From d70ccebc8cf76dadb81ab8d253bec9ef1f4951a1 Mon Sep 17 00:00:00 2001 From: Pablo Carranza Velez Date: Tue, 20 Feb 2024 10:57:24 -0300 Subject: [PATCH 001/343] chore: add first draft IHorizonStaking --- .../contracts/staking/IHorizonStaking.sol | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 packages/contracts/contracts/staking/IHorizonStaking.sol diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol new file mode 100644 index 000000000..92ebe7a33 --- /dev/null +++ b/packages/contracts/contracts/staking/IHorizonStaking.sol @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.7.6; +pragma abicoder v2; + +interface IHorizonStaking { + struct Provision { + // Service provider that created the provision + address serviceProvider; + // tokens in the provision + uint256 tokens; + // tokens that are being thawed (and will stop being slashable soon) + uint256 tokensThawing; + // timestamp of provision creation + uint64 createdAt; + // authority to slash the provision + address verifier; + // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed + uint32 maxVerifierCut; + // time, in seconds, tokens must thaw before being withdrawn + uint64 thawingPeriod; + } + + // the new "Indexer" struct + struct ServiceProviderInternal { + // Tokens on the Service Provider stake (staked by the provider) + uint256 tokensStaked; + // Tokens used in allocations + uint256 __DEPRECATED_tokensAllocated; + // Tokens locked for withdrawal subject to thawing period + uint256 __DEPRECATED_tokensLocked; + // Block when locked tokens can be withdrawn + uint256 __DEPRECATED_tokensLockedUntil; + // tokens used in a provision + uint256 tokensProvisioned; + // tokens that initiated a thawing in any one of the provider's provisions + uint256 tokensRequestedThaw; + // tokens that have been removed from any one of the provider's provisions after thawing + uint256 tokensFulfilledThaw; + // provisions that take priority for undelegation force thawing + bytes32[] forceThawProvisions; + } + + struct ServiceProvider { + // Tokens on the provider stake (staked by the provider) + uint256 tokensStaked; + // tokens used in a provision + uint256 tokensProvisioned; + // tokens that initiated a thawing in any one of the provider's provisions + uint256 tokensRequestedThaw; + // tokens that have been removed from any one of the provider's provisions after thawing + uint256 tokensFulfilledThaw; + // provisions that take priority for undelegation force thawing + bytes32[] forceThawProvisions; + } + + struct DelegationPool { + uint32 __DEPRECATED_cooldownBlocks; // solhint-disable-line var-name-mixedcase + uint32 __DEPRECATED_indexingRewardCut; // in PPM + uint32 __DEPRECATED_queryFeeCut; // in PPM + uint256 __DEPRECATED_updatedAtBlock; // Block when the pool was last updated + uint256 tokens; // Total tokens as pool reserves + uint256 shares; // Total shares minted in the pool + mapping(address => Delegation) delegators; // Mapping of delegator => Delegation + } + + struct Delegation { + // shares owned by the delegator in the pool + uint256 shares; + // tokens delegated to the pool + uint256 tokens; + // Timestamp when locked tokens can be undelegated (after the timelock) + uint256 tokensLockedUntil; + } + + struct ThawRequest { + // tokens that are being thawed by this request + uint256 tokens; + // the provision id to which this request corresponds to + bytes32 provisionId; + // the address that initiated the thaw request, allowed to remove the funds once thawed + address owner; + // the timestamp when the thawed funds can be removed from the provision + uint64 thawingUntil; + // the value of `ServiceProvider.tokensRequestedThaw` the moment the thaw request is created + uint256 tokensRequestedThawSnapshot; + } + + // whitelist/deny a verifier + function allowVerifier(address verifier, bool allow) external; + + // deposit stake + function stake(uint256 tokens) external; + + // create a provision + function provision( + uint256 tokens, + address verifier, + uint256 maxVerifierCut, + uint256 thawingPeriod + ) external; + + // initiate a thawing to remove tokens from a provision + function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32); + + // moves thawed stake from a provision back into the provider's available stake + function deprovision(bytes32 thawRequestId) external; + + // moves thawed stake from one provision into another provision + function reprovision(bytes32 thawRequestId, bytes32 provisionId) external; + + // moves thawed stake back to the owner's account - stake is removed from the protocol + function withdraw(bytes32 thawRequestId) external; + + // delegate tokens to a provider + function delegate(address serviceProvider, uint256 tokens) external; + + // undelegate tokens + function undelegate( + address serviceProvider, + uint256 tokens, + bytes32[] provisions + ) external returns (bytes32[]); + + // slash a service provider + function slash( + bytes32 provisionId, + uint256 tokens, + uint256 verifierAmount + ) external; + + // set the Service Provider's preferred provisions to be force thawed + function setForceThawProvisions(bytes32[] provisions); + + // total staked tokens to the provider + // `ServiceProvider.tokensStaked + DelegationPool.serviceProvider.tokens` + function getStake(address serviceProvider) public view returns (uint256 tokens); + + // staked tokens that are currently not provisioned, aka idle stake + // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` + function getIdleStake(address serviceProvider) public view returns (uint256 tokens); + + // staked tokens the provider can provision before hitting the delegation cap + // `ServiceProvider.tokensStaked * Staking.delegationRatio - Provision.tokensProvisioned` + function getCapacity(address serviceProvider) public view returns (uint256); + + // provisioned tokens that are not being used + // `Provision.tokens - Provision.tokensThawing` + function getTokensAvailable(bytes32 provision) public view returns (uint256 tokens); + + function getServiceProvider(address serviceProvider) + public + view + returns (ServiceProvider memory); + + function getProvision(bytes32 provision) public view returns (Provision memory); +} From 7d096e164788acf5e236201743e172c562371abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 21 Feb 2024 17:52:32 -0300 Subject: [PATCH 002/343] fix: horizon staking interface compilation errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/staking/IHorizonStaking.sol | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol index 92ebe7a33..51cb03c33 100644 --- a/packages/contracts/contracts/staking/IHorizonStaking.sol +++ b/packages/contracts/contracts/staking/IHorizonStaking.sol @@ -101,7 +101,7 @@ interface IHorizonStaking { ) external; // initiate a thawing to remove tokens from a provision - function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32); + function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32 thawRequestId); // moves thawed stake from a provision back into the provider's available stake function deprovision(bytes32 thawRequestId) external; @@ -119,8 +119,8 @@ interface IHorizonStaking { function undelegate( address serviceProvider, uint256 tokens, - bytes32[] provisions - ) external returns (bytes32[]); + bytes32[] calldata provisions + ) external returns (bytes32 thawRequestId); // slash a service provider function slash( @@ -130,28 +130,28 @@ interface IHorizonStaking { ) external; // set the Service Provider's preferred provisions to be force thawed - function setForceThawProvisions(bytes32[] provisions); + function setForceThawProvisions(bytes32[] calldata provisions) external; // total staked tokens to the provider // `ServiceProvider.tokensStaked + DelegationPool.serviceProvider.tokens` - function getStake(address serviceProvider) public view returns (uint256 tokens); + function getStake(address serviceProvider) external view returns (uint256 tokens); // staked tokens that are currently not provisioned, aka idle stake // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address serviceProvider) public view returns (uint256 tokens); + function getIdleStake(address serviceProvider) external view returns (uint256 tokens); // staked tokens the provider can provision before hitting the delegation cap // `ServiceProvider.tokensStaked * Staking.delegationRatio - Provision.tokensProvisioned` - function getCapacity(address serviceProvider) public view returns (uint256); + function getCapacity(address serviceProvider) external view returns (uint256 tokens); // provisioned tokens that are not being used // `Provision.tokens - Provision.tokensThawing` - function getTokensAvailable(bytes32 provision) public view returns (uint256 tokens); + function getTokensAvailable(bytes32 provision) external view returns (uint256 tokens); function getServiceProvider(address serviceProvider) - public + external view returns (ServiceProvider memory); - function getProvision(bytes32 provision) public view returns (Provision memory); + function getProvision(bytes32 provision) external view returns (Provision memory); } From a4e6c2653ec579d1c013ae260c6bf0a02adfd0e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 14 Mar 2024 14:51:01 -0300 Subject: [PATCH 003/343] chore: bump contracts package version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .github/workflows/ci-token-dist.yml | 4 ++- packages/contracts/CHANGELOG.md | 6 ++++ .../contracts/contracts/arbitrum/Arbitrum.md | 5 +++ packages/contracts/package.json | 6 ++-- packages/contracts/scripts/build | 12 ++++++- packages/contracts/scripts/prepack | 20 ----------- packages/contracts/scripts/test | 1 - packages/sdk/CHANGELOG.md | 6 ++++ packages/sdk/package.json | 4 +-- packages/token-distribution/CHANGELOG.md | 7 ++++ packages/token-distribution/package.json | 6 ++-- yarn.lock | 36 ++++++++++++++----- 12 files changed, 74 insertions(+), 39 deletions(-) create mode 100644 packages/contracts/contracts/arbitrum/Arbitrum.md delete mode 100755 packages/contracts/scripts/prepack create mode 100644 packages/token-distribution/CHANGELOG.md diff --git a/.github/workflows/ci-token-dist.yml b/.github/workflows/ci-token-dist.yml index 76922ff9d..7b0bd8767 100644 --- a/.github/workflows/ci-token-dist.yml +++ b/.github/workflows/ci-token-dist.yml @@ -23,4 +23,6 @@ jobs: - name: Set up environment uses: ./.github/actions/setup - name: Run tests - run: yarn test \ No newline at end of file + run: | + pushd packages/token-distribution + yarn test \ No newline at end of file diff --git a/packages/contracts/CHANGELOG.md b/packages/contracts/CHANGELOG.md index 802cff94c..cdbb2c892 100644 --- a/packages/contracts/CHANGELOG.md +++ b/packages/contracts/CHANGELOG.md @@ -1,5 +1,11 @@ # @graphprotocol/contracts +## 7.0.0 + +### Major Changes + +- 9686ce1: Add Horizon staking interface + ## 6.2.1 ### Patch Changes diff --git a/packages/contracts/contracts/arbitrum/Arbitrum.md b/packages/contracts/contracts/arbitrum/Arbitrum.md new file mode 100644 index 000000000..abc87553e --- /dev/null +++ b/packages/contracts/contracts/arbitrum/Arbitrum.md @@ -0,0 +1,5 @@ +# Arbitrum contracts + +These contracts have been copied from the [Arbitrum repo](https://github.com/OffchainLabs/arbitrum). + +They are also available as part of the npm packages [arb-bridge-eth](https://www.npmjs.com/package/arb-bridge-eth) and [arb-bridge-peripherals](https://www.npmjs.com/package/arb-bridge-peripherals). The reason for copying them rather than installing those packages is the contracts only support Solidity `^0.6.11`, so we had to change the version to `^0.7.6` for it to be compatible with our other contracts. diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 4e95a8f3c..6dea50dad 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,6 +1,6 @@ { "name": "@graphprotocol/contracts", - "version": "6.2.1", + "version": "7.0.0", "description": "Contracts for the Graph Protocol", "directories": { "test": "test" @@ -75,13 +75,13 @@ "solidity-coverage": "^0.7.16", "ts-node": "^10.9.1", "typechain": "^5.0.0", - "typescript": "^4.7.4", + "typescript": "^5.2.2", "winston": "^3.3.3", "yaml": "^1.10.2", "yargs": "^17.0.0" }, "scripts": { - "prepack": "scripts/prepack", + "prepack": "SKIP_LOAD=true scripts/build", "build": "SKIP_LOAD=true scripts/build", "clean": "rm -rf build/ cache/ dist/", "compile": "hardhat compile", diff --git a/packages/contracts/scripts/build b/packages/contracts/scripts/build index df72b9f62..e330635ba 100755 --- a/packages/contracts/scripts/build +++ b/packages/contracts/scripts/build @@ -1,6 +1,16 @@ #!/bin/bash +TYPECHAIN_DIR=dist/types + set -eo pipefail -# Build +# Build contracts +yarn clean yarn compile + +# Refresh distribution folder +rm -rf dist && mkdir -p ${TYPECHAIN_DIR} +cp -R build/abis/ dist/abis +cp -R build/types/ ${TYPECHAIN_DIR} + +tsc --esModuleInterop \ No newline at end of file diff --git a/packages/contracts/scripts/prepack b/packages/contracts/scripts/prepack deleted file mode 100755 index bc0e54391..000000000 --- a/packages/contracts/scripts/prepack +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -TYPECHAIN_DIR=dist/types - -set -eo pipefail -set +o noglob - -# Build contracts -yarn clean -yarn build - -# Refresh distribution folder -rm -rf dist && mkdir -p ${TYPECHAIN_DIR} -cp -R build/abis/ dist/abis -cp -R build/types/ ${TYPECHAIN_DIR} - -# Build and create TS declarations -pushd ${TYPECHAIN_DIR} -ls *.ts **/*.ts | xargs tsc --esModuleInterop -popd diff --git a/packages/contracts/scripts/test b/packages/contracts/scripts/test index 376090d90..4156166ae 100755 --- a/packages/contracts/scripts/test +++ b/packages/contracts/scripts/test @@ -6,7 +6,6 @@ source $(pwd)/scripts/evm ### Setup EVM # Ensure we compiled sources - yarn build ### Cleanup diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index 20a787d51..9cc5a8e17 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -1,5 +1,11 @@ # @graphprotocol/sdk +## 0.5.1 + +### Patch Changes + +- Bump contracts dependency + ## 0.5.0 ### Minor Changes diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 18497431e..6083abdcb 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@graphprotocol/sdk", - "version": "0.5.0", + "version": "0.5.1", "description": "TypeScript based SDK to interact with The Graph protocol contracts", "main": "build/index.js", "types": "src/index.ts", @@ -21,7 +21,7 @@ "@arbitrum/sdk": "~3.1.13", "@ethersproject/experimental": "^5.7.0", "@graphprotocol/common-ts": "^2.0.7", - "@graphprotocol/contracts": "workspace:^6.2.0", + "@graphprotocol/contracts": "workspace:^7.0.0", "@nomicfoundation/hardhat-network-helpers": "^1.0.9", "@nomiclabs/hardhat-ethers": "^2.2.3", "debug": "^4.3.4", diff --git a/packages/token-distribution/CHANGELOG.md b/packages/token-distribution/CHANGELOG.md new file mode 100644 index 000000000..2809305b6 --- /dev/null +++ b/packages/token-distribution/CHANGELOG.md @@ -0,0 +1,7 @@ +# @graphprotocol/token-distribution + +## 1.2.1 + +### Patch Changes + +- Bump contracts dependency diff --git a/packages/token-distribution/package.json b/packages/token-distribution/package.json index 37069fc41..097bc13e0 100644 --- a/packages/token-distribution/package.json +++ b/packages/token-distribution/package.json @@ -1,6 +1,6 @@ { "name": "@graphprotocol/token-distribution", - "version": "1.2.0", + "version": "1.2.1", "description": "Graph Token Distribution", "main": "index.js", "scripts": { @@ -31,7 +31,7 @@ "devDependencies": { "@ethersproject/experimental": "^5.0.7", "@graphprotocol/client-cli": "^2.0.2", - "@graphprotocol/contracts": "^5.0.0", + "@graphprotocol/contracts": "workspace:^7.0.0", "@nomiclabs/hardhat-ethers": "^2.0.0", "@nomiclabs/hardhat-etherscan": "^3.1.7", "@nomiclabs/hardhat-waffle": "^2.0.0", @@ -65,6 +65,6 @@ "solhint-plugin-prettier": "^0.1.0", "ts-node": "^10.9.1", "typechain": "^5.0.0", - "typescript": "^4.0.2" + "typescript": "^5.2.2" } } diff --git a/yarn.lock b/yarn.lock index 1ed3feab6..820ba1b2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2795,7 +2795,7 @@ __metadata: languageName: node linkType: hard -"@graphprotocol/contracts@npm:5.3.3, @graphprotocol/contracts@npm:^5.0.0": +"@graphprotocol/contracts@npm:5.3.3": version: 5.3.3 resolution: "@graphprotocol/contracts@npm:5.3.3" dependencies: @@ -2805,7 +2805,7 @@ __metadata: languageName: node linkType: hard -"@graphprotocol/contracts@workspace:^6.2.0, @graphprotocol/contracts@workspace:packages/contracts": +"@graphprotocol/contracts@workspace:^7.0.0, @graphprotocol/contracts@workspace:packages/contracts": version: 0.0.0-use.local resolution: "@graphprotocol/contracts@workspace:packages/contracts" dependencies: @@ -2869,7 +2869,7 @@ __metadata: solidity-coverage: "npm:^0.7.16" ts-node: "npm:^10.9.1" typechain: "npm:^5.0.0" - typescript: "npm:^4.7.4" + typescript: "npm:^5.2.2" winston: "npm:^3.3.3" yaml: "npm:^1.10.2" yargs: "npm:^17.0.0" @@ -2936,7 +2936,7 @@ __metadata: "@arbitrum/sdk": "npm:~3.1.13" "@ethersproject/experimental": "npm:^5.7.0" "@graphprotocol/common-ts": "npm:^2.0.7" - "@graphprotocol/contracts": "workspace:^6.2.0" + "@graphprotocol/contracts": "workspace:^7.0.0" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.9" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@types/chai": "npm:^4.3.9" @@ -2973,7 +2973,7 @@ __metadata: dependencies: "@ethersproject/experimental": "npm:^5.0.7" "@graphprotocol/client-cli": "npm:^2.0.2" - "@graphprotocol/contracts": "npm:^5.0.0" + "@graphprotocol/contracts": "workspace:^7.0.0" "@nomiclabs/hardhat-ethers": "npm:^2.0.0" "@nomiclabs/hardhat-etherscan": "npm:^3.1.7" "@nomiclabs/hardhat-waffle": "npm:^2.0.0" @@ -3007,7 +3007,7 @@ __metadata: solhint-plugin-prettier: "npm:^0.1.0" ts-node: "npm:^10.9.1" typechain: "npm:^5.0.0" - typescript: "npm:^4.0.2" + typescript: "npm:^5.2.2" languageName: unknown linkType: soft @@ -23171,7 +23171,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.0.2, typescript@npm:^4.4.3, typescript@npm:^4.7.4": +"typescript@npm:^4.0.2, typescript@npm:^4.4.3": version: 4.9.5 resolution: "typescript@npm:4.9.5" bin: @@ -23191,7 +23191,17 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^4.0.2#optional!builtin, typescript@patch:typescript@npm%3A^4.4.3#optional!builtin, typescript@patch:typescript@npm%3A^4.7.4#optional!builtin": +"typescript@npm:^5.2.2": + version: 5.4.2 + resolution: "typescript@npm:5.4.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 583ff68cafb0c076695f72d61df6feee71689568179fb0d3a4834dac343df6b6ed7cf7b6f6c801fa52d43cd1d324e2f2d8ae4497b09f9e6cfe3d80a6d6c9ca52 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^4.0.2#optional!builtin, typescript@patch:typescript@npm%3A^4.4.3#optional!builtin": version: 4.9.5 resolution: "typescript@patch:typescript@npm%3A4.9.5#optional!builtin::version=4.9.5&hash=289587" bin: @@ -23211,6 +23221,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.2.2#optional!builtin": + version: 5.4.2 + resolution: "typescript@patch:typescript@npm%3A5.4.2#optional!builtin::version=5.4.2&hash=e012d7" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 22e2f213c3ffe5960c5eaec6c95c04e01858fed57a94be250746f540b935b2c18c3c3fc80d3ab65d28c0aba1eb76284557ba3bf521d28caee811c44ba2b648f9 + languageName: node + linkType: hard + "typewise-core@npm:^1.2, typewise-core@npm:^1.2.0": version: 1.2.0 resolution: "typewise-core@npm:1.2.0" From 0e8895b49ed3facc0cce34ddd29b609f2f94bc7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 21 Mar 2024 17:47:22 -0300 Subject: [PATCH 004/343] fix(contracts): build type code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/contracts/package.json | 1 + packages/contracts/scripts/build | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 6dea50dad..e3f8b71c8 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -5,6 +5,7 @@ "directories": { "test": "test" }, + "main": "dist/types/index.js", "types": "build/types/index.d.ts", "files": [ "dist/**/*", diff --git a/packages/contracts/scripts/build b/packages/contracts/scripts/build index e330635ba..06b9823c1 100755 --- a/packages/contracts/scripts/build +++ b/packages/contracts/scripts/build @@ -7,10 +7,11 @@ set -eo pipefail # Build contracts yarn clean yarn compile +tsc -# Refresh distribution folder -rm -rf dist && mkdir -p ${TYPECHAIN_DIR} +# Copy types and abis to distribution folder +cp -R build/types/* dist/build/types cp -R build/abis/ dist/abis -cp -R build/types/ ${TYPECHAIN_DIR} -tsc --esModuleInterop \ No newline at end of file +# Move compiled types ts +mv dist/build/types dist/types \ No newline at end of file From 258549551f8b5486391819c79070749d841d4734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 8 Apr 2024 14:04:09 -0300 Subject: [PATCH 005/343] chore(horizon): add horizon package boilerplate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .github/actions/setup/action.yml | 2 + .github/workflows/build.yml | 2 + .github/workflows/ci-contracts.yml | 2 + .github/workflows/ci-horizon.yml | 30 + .github/workflows/ci-token-dist.yml | 2 + .github/workflows/e2e-contracts.yml | 2 + .github/workflows/publish.yml | 2 + .github/workflows/verifydeployed.yml | 2 + .gitignore | 6 +- .gitmodules | 3 + .husky/pre-commit | 7 +- README.md | 3 +- package.json | 1 + .../contracts/staking/IHorizonStaking.sol | 24 +- packages/horizon/README.md | 13 + packages/horizon/contracts/SimpleTest.sol | 10 + packages/horizon/eslint.config.js | 21 + packages/horizon/foundry.toml | 6 + packages/horizon/hardhat.config.ts | 13 + packages/horizon/lib/forge-std | 1 + packages/horizon/package.json | 58 ++ packages/horizon/prettier.config.js | 2 + packages/horizon/remappings.txt | 5 + packages/horizon/scripts/deploy.ts | 28 + packages/horizon/test/SimpleTest.t.sol | 17 + packages/horizon/test/SimpleTest.ts | 23 + packages/horizon/tsconfig.json | 18 + yarn.lock | 805 +++++++++++++++++- 28 files changed, 1057 insertions(+), 51 deletions(-) create mode 100644 .github/workflows/ci-horizon.yml create mode 100644 .gitmodules create mode 100644 packages/horizon/README.md create mode 100644 packages/horizon/contracts/SimpleTest.sol create mode 100644 packages/horizon/eslint.config.js create mode 100644 packages/horizon/foundry.toml create mode 100644 packages/horizon/hardhat.config.ts create mode 160000 packages/horizon/lib/forge-std create mode 100644 packages/horizon/package.json create mode 100644 packages/horizon/prettier.config.js create mode 100644 packages/horizon/remappings.txt create mode 100644 packages/horizon/scripts/deploy.ts create mode 100644 packages/horizon/test/SimpleTest.t.sol create mode 100644 packages/horizon/test/SimpleTest.ts create mode 100644 packages/horizon/tsconfig.json diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index d6173e517..baeec7b27 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -4,6 +4,8 @@ runs: using: composite steps: + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 - name: Enable corepack for modern yarn shell: bash run: corepack enable diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 407b0e996..62e6408fe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,5 +16,7 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + submodules: recursive - name: Set up environment uses: ./.github/actions/setup \ No newline at end of file diff --git a/.github/workflows/ci-contracts.yml b/.github/workflows/ci-contracts.yml index 388bb8521..7dca1bfde 100644 --- a/.github/workflows/ci-contracts.yml +++ b/.github/workflows/ci-contracts.yml @@ -20,6 +20,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + submodules: recursive - name: Set up environment uses: ./.github/actions/setup - name: Run tests diff --git a/.github/workflows/ci-horizon.yml b/.github/workflows/ci-horizon.yml new file mode 100644 index 000000000..d450d1264 --- /dev/null +++ b/.github/workflows/ci-horizon.yml @@ -0,0 +1,30 @@ +name: CI - packages/horizon + +env: + CI: true + +on: + push: + branches: "*" + paths: + - packages/horizon/** + pull_request: + branches: "*" + paths: + - packages/horizon/** + workflow_dispatch: + +jobs: + test-ci: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + - name: Set up environment + uses: ./.github/actions/setup + - name: Run tests + run: | + pushd packages/horizon + yarn test \ No newline at end of file diff --git a/.github/workflows/ci-token-dist.yml b/.github/workflows/ci-token-dist.yml index 7b0bd8767..f45eb9111 100644 --- a/.github/workflows/ci-token-dist.yml +++ b/.github/workflows/ci-token-dist.yml @@ -20,6 +20,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + submodules: recursive - name: Set up environment uses: ./.github/actions/setup - name: Run tests diff --git a/.github/workflows/e2e-contracts.yml b/.github/workflows/e2e-contracts.yml index 46a6387ca..c84adb1a0 100644 --- a/.github/workflows/e2e-contracts.yml +++ b/.github/workflows/e2e-contracts.yml @@ -30,6 +30,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + submodules: recursive - name: Set up environment uses: ./.github/actions/setup - name: Run e2e tests diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index dc01211d7..f942b6579 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,6 +23,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + submodules: recursive - name: Set up environment uses: ./.github/actions/setup - name: Publish 🚀 diff --git a/.github/workflows/verifydeployed.yml b/.github/workflows/verifydeployed.yml index 549d6d7ed..9de43994c 100644 --- a/.github/workflows/verifydeployed.yml +++ b/.github/workflows/verifydeployed.yml @@ -25,6 +25,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + with: + submodules: recursive - name: Set up environment uses: ./.github/actions/setup diff --git a/.gitignore b/.gitignore index ecd5f0d2c..55602edb4 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,8 @@ cached/ # Build artifacts dist/ build/ +typechain/ +typechain-types/ deployments/hardhat/ # Ignore solc bin output @@ -45,8 +47,10 @@ addresses-fork.json # Keys .keystore +# Forge artifacts +cache_forge # Graph client .graphclient tx-builder-*.json -!tx-builder-template.json \ No newline at end of file +!tx-builder-template.json diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..edd86d2b7 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "packages/horizon/lib/forge-std"] + path = packages/horizon/lib/forge-std + url = https://github.com/foundry-rs/forge-std diff --git a/.husky/pre-commit b/.husky/pre-commit index 487427eda..92fa26604 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -9,4 +9,9 @@ popd # data-edge pushd packages/data-edge npx --no-install lint-staged -popd \ No newline at end of file +popd + +# graph horizon +pushd packages/horizon +npx --no-install lint-staged +popd diff --git a/README.md b/README.md index f9f736fb5..a36de65bf 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,10 @@ This repository is a Yarn workspaces monorepo containing the following packages: | --- | --- | --- | | [contracts](./packages/contracts) | [![npm version](https://badge.fury.io/js/@graphprotocol%2Fcontracts.svg)](https://badge.fury.io/js/@graphprotocol%2Fcontracts) | Contracts enabling the open and permissionless decentralized network known as The Graph protocol. | | [eslint-graph-config](./packages/eslint-graph-config) | [![npm version]()]() | Shared linting and formatting rules for TypeScript projects. | -| [token-distribution](./packages/token-distribution) | - | Contracts managing token locks for network participants | +| [horizon](./packages/horizon) | [![npm version]()]() | Contracts for Graph Horizon, the next iteration of The Graph protocol. | | [sdk](./packages/sdk) | [![npm version](https://badge.fury.io/js/@graphprotocol%2Fsdk.svg)](https://badge.fury.io/js/@graphprotocol%2Fsdk) | TypeScript based SDK to interact with the protocol contracts | | [solhint-graph-config](./packages/eslint-graph-config) | [![npm version]()]() | Shared linting and formatting rules for Solidity projects. | +| [token-distribution](./packages/token-distribution) | - | Contracts managing token locks for network participants | ## Development diff --git a/package.json b/package.json index 4f1c06aa7..d27a50288 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "packages/contracts", "packages/data-edge", "packages/eslint-graph-config", + "packages/horizon", "packages/sdk", "packages/solhint-graph-config", "packages/token-distribution" diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol index 51cb03c33..a4101ff52 100644 --- a/packages/contracts/contracts/staking/IHorizonStaking.sol +++ b/packages/contracts/contracts/staking/IHorizonStaking.sol @@ -1,8 +1,12 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.7.6; +pragma solidity >=0.7.6 <0.9.0; pragma abicoder v2; +interface Test { + function test() external returns (uint256); +} + interface IHorizonStaking { struct Provision { // Service provider that created the provision @@ -93,12 +97,7 @@ interface IHorizonStaking { function stake(uint256 tokens) external; // create a provision - function provision( - uint256 tokens, - address verifier, - uint256 maxVerifierCut, - uint256 thawingPeriod - ) external; + function provision(uint256 tokens, address verifier, uint256 maxVerifierCut, uint256 thawingPeriod) external; // initiate a thawing to remove tokens from a provision function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32 thawRequestId); @@ -123,11 +122,7 @@ interface IHorizonStaking { ) external returns (bytes32 thawRequestId); // slash a service provider - function slash( - bytes32 provisionId, - uint256 tokens, - uint256 verifierAmount - ) external; + function slash(bytes32 provisionId, uint256 tokens, uint256 verifierAmount) external; // set the Service Provider's preferred provisions to be force thawed function setForceThawProvisions(bytes32[] calldata provisions) external; @@ -148,10 +143,7 @@ interface IHorizonStaking { // `Provision.tokens - Provision.tokensThawing` function getTokensAvailable(bytes32 provision) external view returns (uint256 tokens); - function getServiceProvider(address serviceProvider) - external - view - returns (ServiceProvider memory); + function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory); function getProvision(bytes32 provision) external view returns (Provision memory); } diff --git a/packages/horizon/README.md b/packages/horizon/README.md new file mode 100644 index 000000000..7be82e5d6 --- /dev/null +++ b/packages/horizon/README.md @@ -0,0 +1,13 @@ +# Sample Hardhat Project + +This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract. + +Try running some of the following tasks: + +```shell +npx hardhat help +npx hardhat test +REPORT_GAS=true npx hardhat test +npx hardhat node +npx hardhat run scripts/deploy.ts +``` diff --git a/packages/horizon/contracts/SimpleTest.sol b/packages/horizon/contracts/SimpleTest.sol new file mode 100644 index 000000000..5cc28d9cc --- /dev/null +++ b/packages/horizon/contracts/SimpleTest.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.4.0 <0.9.0; + +import { Test } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; + +contract SimpleTest is Test { + function test() external pure returns (uint256) { + return 42; + } +} diff --git a/packages/horizon/eslint.config.js b/packages/horizon/eslint.config.js new file mode 100644 index 000000000..2cb4335fd --- /dev/null +++ b/packages/horizon/eslint.config.js @@ -0,0 +1,21 @@ +// @ts-check +/* eslint-disable no-undef */ +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ + +const eslintGraphConfig = require('eslint-graph-config') +module.exports = [ + ...eslintGraphConfig.default, + { + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + }, + }, + { + ignores: ['typechain-types/*'], + }, +] diff --git a/packages/horizon/foundry.toml b/packages/horizon/foundry.toml new file mode 100644 index 000000000..55f7ffd31 --- /dev/null +++ b/packages/horizon/foundry.toml @@ -0,0 +1,6 @@ +[profile.default] +src = 'contracts' +out = 'build' +libs = ['node_modules', 'lib'] +test = 'test' +cache_path = 'cache_forge' \ No newline at end of file diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts new file mode 100644 index 000000000..f5c9172a8 --- /dev/null +++ b/packages/horizon/hardhat.config.ts @@ -0,0 +1,13 @@ +// import '@nomicfoundation/hardhat-foundry' +import '@nomicfoundation/hardhat-toolbox' +import { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + solidity: '0.8.24', + paths: { + artifacts: './build/contracts', + sources: './contracts', + }, +} + +export default config diff --git a/packages/horizon/lib/forge-std b/packages/horizon/lib/forge-std new file mode 160000 index 000000000..bb4ceea94 --- /dev/null +++ b/packages/horizon/lib/forge-std @@ -0,0 +1 @@ +Subproject commit bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef diff --git a/packages/horizon/package.json b/packages/horizon/package.json new file mode 100644 index 000000000..ec23f62cb --- /dev/null +++ b/packages/horizon/package.json @@ -0,0 +1,58 @@ +{ + "name": "@graphprotocol/horizon", + "version": "0.0.1", + "description": "", + "author": "The Graph Team", + "license": "GPL-2.0-or-later", + "scripts": { + "lint:ts": "eslint '**/*.{js,ts}' --fix", + "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", + "lint": "yarn lint:ts && yarn lint:sol", + "clean": "rm -rf build cache typechain-types", + "build": "forge build && hardhat compile", + "test": "forge test && hardhat test" + }, + "devDependencies": { + "@graphprotocol/contracts": "workspace:^7.0.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-foundry": "^1.1.1", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=16.0.0", + "chai": "^4.2.0", + "eslint": "^8.56.0", + "eslint-graph-config": "workspace:^0.0.1", + "ethers": "^6.4.0", + "hardhat": "^2.20.1", + "hardhat-gas-reporter": "^1.0.8", + "lint-staged": "^15.2.2", + "prettier": "^3.2.5", + "prettier-plugin-solidity": "^1.3.1", + "solhint": "^4.5.2", + "solhint-graph-config": "workspace:^0.0.1", + "solidity-coverage": "^0.8.0", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": "^5.3.3" + }, + "lint-staged": { + "contracts/**/*.sol": [ + "yarn lint:sol" + ], + "**/*.ts": [ + "yarn lint:ts" + ], + "**/*.js": [ + "yarn lint:ts" + ], + "**/*.json": [ + "yarn lint:ts" + ] + } +} diff --git a/packages/horizon/prettier.config.js b/packages/horizon/prettier.config.js new file mode 100644 index 000000000..5b8e866f2 --- /dev/null +++ b/packages/horizon/prettier.config.js @@ -0,0 +1,2 @@ +const prettierGraphConfig = require('solhint-graph-config/prettier') +module.exports = prettierGraphConfig diff --git a/packages/horizon/remappings.txt b/packages/horizon/remappings.txt new file mode 100644 index 000000000..1bd6482cd --- /dev/null +++ b/packages/horizon/remappings.txt @@ -0,0 +1,5 @@ +@graphprotocol/contracts/=node_modules/@graphprotocol/contracts/ +forge-std/=lib/forge-std/src/ +ds-test/=lib/forge-std/lib/ds-test/src/ +eth-gas-reporter/=node_modules/eth-gas-reporter/ +hardhat/=node_modules/hardhat/ diff --git a/packages/horizon/scripts/deploy.ts b/packages/horizon/scripts/deploy.ts new file mode 100644 index 000000000..cf87ff10f --- /dev/null +++ b/packages/horizon/scripts/deploy.ts @@ -0,0 +1,28 @@ +import { ethers } from 'hardhat' + +async function main() { + const currentTimestampInSeconds = Math.round(Date.now() / 1000) + const unlockTime = currentTimestampInSeconds + 60 + + const lockedAmount = ethers.parseEther('0.001') + const a = 1 + console.log(a) + const lock = await ethers.deployContract('Lock', [unlockTime], { + value: lockedAmount, + }) + + await lock.waitForDeployment() + + console.log( + `Lock with ${ethers.formatEther( + lockedAmount, + )}ETH and unlock timestamp ${unlockTime} deployed to ${typeof lock.target == 'string' ? lock.target : ''}`, + ) +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error) + process.exitCode = 1 +}) diff --git a/packages/horizon/test/SimpleTest.t.sol b/packages/horizon/test/SimpleTest.t.sol new file mode 100644 index 000000000..b130e5d34 --- /dev/null +++ b/packages/horizon/test/SimpleTest.t.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.10; + +import "forge-std/Test.sol"; +import { SimpleTest } from "../contracts/SimpleTest.sol"; + +contract ContractTest is Test { + SimpleTest simpleTest; + + function setUp() public { + simpleTest = new SimpleTest(); + } + + function test_NumberIs42() public { + assertEq(simpleTest.test(), 42); + } +} diff --git a/packages/horizon/test/SimpleTest.ts b/packages/horizon/test/SimpleTest.ts new file mode 100644 index 000000000..cfcfb1443 --- /dev/null +++ b/packages/horizon/test/SimpleTest.ts @@ -0,0 +1,23 @@ +import hardhat from 'hardhat' + +import { expect } from 'chai' +import { loadFixture } from '@nomicfoundation/hardhat-toolbox/network-helpers' + +const ethers = hardhat.ethers + +describe('SimpleTest', function () { + async function deployFixture() { + const [owner] = await ethers.getSigners() + const SimpleTest = await ethers.getContractFactory('SimpleTest') + const simpleTest = await SimpleTest.deploy() + return { simpleTest, owner } + } + + describe('Deployment', function () { + it('Should return 42', async function () { + const { simpleTest } = await loadFixture(deployFixture) + + expect(await simpleTest.test()).to.equal(42) + }) + }) +}) diff --git a/packages/horizon/tsconfig.json b/packages/horizon/tsconfig.json new file mode 100644 index 000000000..143316f16 --- /dev/null +++ b/packages/horizon/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + }, + "include": [ + "hardhat.config.ts", + "scripts/**/*.ts", + "test/**/*.ts", + "eslint.config.js", + "prettier.config.js" + ] +} diff --git a/yarn.lock b/yarn.lock index 820ba1b2a..27dfd84b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,6 +24,13 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:1.10.1": + version: 1.10.1 + resolution: "@adraffy/ens-normalize@npm:1.10.1" + checksum: fdd647604e8fac6204921888aaf5a6bc65eabf0d2921bc5f93b64d01f4bc33ead167c1445f7de05468d05cd92ac31b74c68d2be840c62b79d73693308f885c06 + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -1763,7 +1770,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.0, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.5.0, @ethersproject/abi@npm:^5.6.0, @ethersproject/abi@npm:^5.6.3, @ethersproject/abi@npm:^5.7.0": +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.0, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.5.0, @ethersproject/abi@npm:^5.6.0, @ethersproject/abi@npm:^5.6.3, @ethersproject/abi@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abi@npm:5.7.0" dependencies: @@ -2917,6 +2924,40 @@ __metadata: languageName: unknown linkType: soft +"@graphprotocol/horizon@workspace:packages/horizon": + version: 0.0.0-use.local + resolution: "@graphprotocol/horizon@workspace:packages/horizon" + dependencies: + "@graphprotocol/contracts": "workspace:^7.0.0" + "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" + "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" + "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" + "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" + "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" + "@nomicfoundation/hardhat-verify": "npm:^2.0.0" + "@typechain/ethers-v6": "npm:^0.5.0" + "@typechain/hardhat": "npm:^9.0.0" + "@types/chai": "npm:^4.2.0" + "@types/mocha": "npm:>=9.1.0" + "@types/node": "npm:>=16.0.0" + chai: "npm:^4.2.0" + eslint: "npm:^8.56.0" + eslint-graph-config: "workspace:^0.0.1" + ethers: "npm:^6.4.0" + hardhat: "npm:^2.20.1" + hardhat-gas-reporter: "npm:^1.0.8" + lint-staged: "npm:^15.2.2" + prettier: "npm:^3.2.5" + prettier-plugin-solidity: "npm:^1.3.1" + solhint: "npm:^4.5.2" + solhint-graph-config: "workspace:^0.0.1" + solidity-coverage: "npm:^0.8.0" + ts-node: "npm:>=8.0.0" + typechain: "npm:^8.3.0" + typescript: "npm:^5.3.3" + languageName: unknown + linkType: soft + "@graphprotocol/pino-sentry-simple@npm:0.7.1": version: 0.7.1 resolution: "@graphprotocol/pino-sentry-simple@npm:0.7.1" @@ -4034,6 +4075,15 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": "npm:1.3.2" + checksum: 0bac7d1bbfb3c2286910b02598addd33243cb97c3f36f987ecc927a4be8d7d88e0fcb12b0f0ef8a044e7307d1844dd5c49bb724bfa0a79c8ec50ba60768c97f6 + languageName: node + linkType: hard + "@noble/curves@npm:1.3.0, @noble/curves@npm:~1.3.0": version: 1.3.0 resolution: "@noble/curves@npm:1.3.0" @@ -4050,6 +4100,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: 2482cce3bce6a596626f94ca296e21378e7a5d4c09597cbc46e65ffacc3d64c8df73111f2265444e36a3168208628258bbbaccba2ef24f65f58b2417638a20e7 + languageName: node + linkType: hard + "@noble/hashes@npm:1.3.3, @noble/hashes@npm:~1.3.2": version: 1.3.3 resolution: "@noble/hashes@npm:1.3.3" @@ -4091,6 +4148,105 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr-darwin-arm64@npm:0.2.1": + version: 0.2.1 + resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.2.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nomicfoundation/edr-darwin-x64@npm:0.2.1": + version: 0.2.1 + resolution: "@nomicfoundation/edr-darwin-x64@npm:0.2.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nomicfoundation/edr-linux-arm64-gnu@npm:0.2.1": + version: 0.2.1 + resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.2.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nomicfoundation/edr-linux-arm64-musl@npm:0.2.1": + version: 0.2.1 + resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.2.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nomicfoundation/edr-linux-x64-gnu@npm:0.2.1": + version: 0.2.1 + resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.2.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nomicfoundation/edr-linux-x64-musl@npm:0.2.1": + version: 0.2.1 + resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.2.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nomicfoundation/edr-win32-arm64-msvc@npm:0.2.1": + version: 0.2.1 + resolution: "@nomicfoundation/edr-win32-arm64-msvc@npm:0.2.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nomicfoundation/edr-win32-ia32-msvc@npm:0.2.1": + version: 0.2.1 + resolution: "@nomicfoundation/edr-win32-ia32-msvc@npm:0.2.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@nomicfoundation/edr-win32-x64-msvc@npm:0.2.1": + version: 0.2.1 + resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.2.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@nomicfoundation/edr@npm:^0.2.0": + version: 0.2.1 + resolution: "@nomicfoundation/edr@npm:0.2.1" + dependencies: + "@nomicfoundation/edr-darwin-arm64": "npm:0.2.1" + "@nomicfoundation/edr-darwin-x64": "npm:0.2.1" + "@nomicfoundation/edr-linux-arm64-gnu": "npm:0.2.1" + "@nomicfoundation/edr-linux-arm64-musl": "npm:0.2.1" + "@nomicfoundation/edr-linux-x64-gnu": "npm:0.2.1" + "@nomicfoundation/edr-linux-x64-musl": "npm:0.2.1" + "@nomicfoundation/edr-win32-arm64-msvc": "npm:0.2.1" + "@nomicfoundation/edr-win32-ia32-msvc": "npm:0.2.1" + "@nomicfoundation/edr-win32-x64-msvc": "npm:0.2.1" + dependenciesMeta: + "@nomicfoundation/edr-darwin-arm64": + optional: true + "@nomicfoundation/edr-darwin-x64": + optional: true + "@nomicfoundation/edr-linux-arm64-gnu": + optional: true + "@nomicfoundation/edr-linux-arm64-musl": + optional: true + "@nomicfoundation/edr-linux-x64-gnu": + optional: true + "@nomicfoundation/edr-linux-x64-musl": + optional: true + "@nomicfoundation/edr-win32-arm64-msvc": + optional: true + "@nomicfoundation/edr-win32-ia32-msvc": + optional: true + "@nomicfoundation/edr-win32-x64-msvc": + optional: true + checksum: e8956284c14fb47662c92368ed17d871a24876a27c2e6525c99fabfe41cadb7d6f403889802216691ba41c38ee055c9cd59befc48f7b8018002ac2d09d2da29b + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-block@npm:4.2.2": version: 4.2.2 resolution: "@nomicfoundation/ethereumjs-block@npm:4.2.2" @@ -4582,7 +4738,48 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/hardhat-network-helpers@npm:^1.0.9": +"@nomicfoundation/hardhat-chai-matchers@npm:^2.0.0": + version: 2.0.6 + resolution: "@nomicfoundation/hardhat-chai-matchers@npm:2.0.6" + dependencies: + "@types/chai-as-promised": "npm:^7.1.3" + chai-as-promised: "npm:^7.1.1" + deep-eql: "npm:^4.0.1" + ordinal: "npm:^1.0.3" + peerDependencies: + "@nomicfoundation/hardhat-ethers": ^3.0.0 + chai: ^4.2.0 + ethers: ^6.1.0 + hardhat: ^2.9.4 + checksum: 0d65a0b0a552391ee3b20db9ffc9559138c02bc9c9cdd30106c9b5247d5a9e9b412480772faecab210a8cade0dfcddce3b04f5d3f3371e80085d6883a917dfe5 + languageName: node + linkType: hard + +"@nomicfoundation/hardhat-ethers@npm:^3.0.0": + version: 3.0.5 + resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.5" + dependencies: + debug: "npm:^4.1.1" + lodash.isequal: "npm:^4.5.0" + peerDependencies: + ethers: ^6.1.0 + hardhat: ^2.0.0 + checksum: 8253d107f956fbbfcb55b758cfd05159dcc77289bc115418626c3be32efeaced82c7dbfcb9d67ef0d9dccb6851e8588edeb228f325982ac3c61d7f605bcef009 + languageName: node + linkType: hard + +"@nomicfoundation/hardhat-foundry@npm:^1.1.1": + version: 1.1.1 + resolution: "@nomicfoundation/hardhat-foundry@npm:1.1.1" + dependencies: + chalk: "npm:^2.4.2" + peerDependencies: + hardhat: ^2.17.2 + checksum: e1f914bd705b93c9efc9f0b30eb178288504aede202ec00a9b03d3fa494baf175d0218ee678a328179b1ecfe18e16184888f671e8a03488e4ebfba0daf93a603 + languageName: node + linkType: hard + +"@nomicfoundation/hardhat-network-helpers@npm:^1.0.0, @nomicfoundation/hardhat-network-helpers@npm:^1.0.9": version: 1.0.10 resolution: "@nomicfoundation/hardhat-network-helpers@npm:1.0.10" dependencies: @@ -4593,6 +4790,50 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/hardhat-toolbox@npm:^4.0.0": + version: 4.0.0 + resolution: "@nomicfoundation/hardhat-toolbox@npm:4.0.0" + peerDependencies: + "@nomicfoundation/hardhat-chai-matchers": ^2.0.0 + "@nomicfoundation/hardhat-ethers": ^3.0.0 + "@nomicfoundation/hardhat-network-helpers": ^1.0.0 + "@nomicfoundation/hardhat-verify": ^2.0.0 + "@typechain/ethers-v6": ^0.5.0 + "@typechain/hardhat": ^9.0.0 + "@types/chai": ^4.2.0 + "@types/mocha": ">=9.1.0" + "@types/node": ">=16.0.0" + chai: ^4.2.0 + ethers: ^6.4.0 + hardhat: ^2.11.0 + hardhat-gas-reporter: ^1.0.8 + solidity-coverage: ^0.8.1 + ts-node: ">=8.0.0" + typechain: ^8.3.0 + typescript: ">=4.5.0" + checksum: 9de2511cee509754afd4631f5f1497160bf4d3ecea741e9deeb22a6e662e16ce7ba37cffe836d30a958f08719c0c5906decc3c73df6a5d90c248b4654c8b15d1 + languageName: node + linkType: hard + +"@nomicfoundation/hardhat-verify@npm:^2.0.0": + version: 2.0.4 + resolution: "@nomicfoundation/hardhat-verify@npm:2.0.4" + dependencies: + "@ethersproject/abi": "npm:^5.1.2" + "@ethersproject/address": "npm:^5.0.2" + cbor: "npm:^8.1.0" + chalk: "npm:^2.4.2" + debug: "npm:^4.1.1" + lodash.clonedeep: "npm:^4.5.0" + semver: "npm:^6.3.0" + table: "npm:^6.8.0" + undici: "npm:^5.14.0" + peerDependencies: + hardhat: ^2.0.4 + checksum: 9003db2eb06aad8764473240d5ddb0cdef27b9bd7ed4586469aec8997d4556a1b1f11c537b567e3a30af694ac5d756dc9cccc52c14604e92d0dfdc964d12c6e8 + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1" @@ -5505,6 +5746,20 @@ __metadata: languageName: node linkType: hard +"@typechain/ethers-v6@npm:^0.5.0": + version: 0.5.1 + resolution: "@typechain/ethers-v6@npm:0.5.1" + dependencies: + lodash: "npm:^4.17.15" + ts-essentials: "npm:^7.0.1" + peerDependencies: + ethers: 6.x + typechain: ^8.3.2 + typescript: ">=4.7.0" + checksum: f3c80151c07e01adbf520e0854426649edb0ee540920569487dd8da7eca2fa8615710f4c0eda008e7afdf255fbb8dfdebf721a5d324a4dffeb087611d9bd64b9 + languageName: node + linkType: hard + "@typechain/hardhat@npm:^2.0.0": version: 2.3.1 resolution: "@typechain/hardhat@npm:2.3.1" @@ -5531,6 +5786,20 @@ __metadata: languageName: node linkType: hard +"@typechain/hardhat@npm:^9.0.0": + version: 9.1.0 + resolution: "@typechain/hardhat@npm:9.1.0" + dependencies: + fs-extra: "npm:^9.1.0" + peerDependencies: + "@typechain/ethers-v6": ^0.5.1 + ethers: ^6.1.0 + hardhat: ^2.9.9 + typechain: ^8.3.2 + checksum: 3a1220efefc7b02ca335696167f6c5332a33ff3fbf9f20552468566a1760f76bc88d330683e97ca6213eb9518a2a901391c31c84c0548006b72bd2ec62d4af9c + languageName: node + linkType: hard + "@types/async-eventemitter@npm:^0.2.1": version: 0.2.4 resolution: "@types/async-eventemitter@npm:0.2.4" @@ -5580,7 +5849,7 @@ __metadata: languageName: node linkType: hard -"@types/chai-as-promised@npm:^7.1.5, @types/chai-as-promised@npm:^7.1.7": +"@types/chai-as-promised@npm:^7.1.3, @types/chai-as-promised@npm:^7.1.5, @types/chai-as-promised@npm:^7.1.7": version: 7.1.8 resolution: "@types/chai-as-promised@npm:7.1.8" dependencies: @@ -5589,7 +5858,7 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:*, @types/chai@npm:^4.3.9": +"@types/chai@npm:*, @types/chai@npm:^4.2.0, @types/chai@npm:^4.3.9": version: 4.3.12 resolution: "@types/chai@npm:4.3.12" checksum: e5d952726d7f053812579962b07d0e4965c160c6a90bf466580e639cd3a1f1d30da1abbfe782383538a043a07908f9dfb823fa9065b37752a5f27d62234f44d5 @@ -5755,7 +6024,7 @@ __metadata: languageName: node linkType: hard -"@types/mocha@npm:^10.0.3": +"@types/mocha@npm:>=9.1.0, @types/mocha@npm:^10.0.3": version: 10.0.6 resolution: "@types/mocha@npm:10.0.6" checksum: 4526c9e88388f9e1004c6d3937c5488a39908810f26b927173c58d52b43057f3895627dc06538e96706e08b88158885f869ec6311f6b58fd72bdef715f26d6c3 @@ -5802,6 +6071,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:18.15.13": + version: 18.15.13 + resolution: "@types/node@npm:18.15.13" + checksum: 6e5f61c559e60670a7a8fb88e31226ecc18a21be103297ca4cf9848f0a99049dae77f04b7ae677205f2af494f3701b113ba8734f4b636b355477a6534dbb8ada + languageName: node + linkType: hard + "@types/node@npm:>=12": version: 20.11.30 resolution: "@types/node@npm:20.11.30" @@ -5811,6 +6087,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:>=16.0.0": + version: 20.11.26 + resolution: "@types/node@npm:20.11.26" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 2df81e4f109588c4c490f2c7d616a06d2b3b9298f217468134b80711af810c9a6017a59beb3e6b1c596eb9b6c5a39d33403b99179acb89006badfbc55f2468bb + languageName: node + linkType: hard + "@types/node@npm:^10.0.3": version: 10.17.60 resolution: "@types/node@npm:10.17.60" @@ -6556,6 +6841,13 @@ __metadata: languageName: node linkType: hard +"aes-js@npm:4.0.0-beta.5": + version: 4.0.0-beta.5 + resolution: "aes-js@npm:4.0.0-beta.5" + checksum: 444f4eefa1e602cbc4f2a3c644bc990f93fd982b148425fee17634da510586fc09da940dcf8ace1b2d001453c07ff042e55f7a0482b3cc9372bf1ef75479090c + languageName: node + linkType: hard + "aes-js@npm:^3.1.1": version: 3.1.2 resolution: "aes-js@npm:3.1.2" @@ -6693,6 +6985,15 @@ __metadata: languageName: node linkType: hard +"ansi-escapes@npm:^6.2.0": + version: 6.2.0 + resolution: "ansi-escapes@npm:6.2.0" + dependencies: + type-fest: "npm:^3.0.0" + checksum: 3eec75deedd8b10192c5f98e4cd9715cc3ff268d33fc463c24b7d22446668bfcd4ad1803993ea89c0f51f88b5a3399572bacb7c8cb1a067fc86e189c5f3b0c7e + languageName: node + linkType: hard + "ansi-regex@npm:^2.0.0": version: 2.1.1 resolution: "ansi-regex@npm:2.1.1" @@ -6753,7 +7054,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" checksum: 5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c @@ -8855,6 +9156,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + "chalk@npm:^1.1.3": version: 1.1.3 resolution: "chalk@npm:1.1.3" @@ -9154,6 +9462,15 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-cursor@npm:4.0.0" + dependencies: + restore-cursor: "npm:^4.0.0" + checksum: e776e8c3c6727300d0539b0d25160b2bb56aed1a63942753ba1826b012f337a6f4b7ace3548402e4f2f13b5e16bfd751be672c44b203205e7eca8be94afec42c + languageName: node + linkType: hard + "cli-spinners@npm:^2.5.0": version: 2.9.2 resolution: "cli-spinners@npm:2.9.2" @@ -9217,6 +9534,16 @@ __metadata: languageName: node linkType: hard +"cli-truncate@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-truncate@npm:4.0.0" + dependencies: + slice-ansi: "npm:^5.0.0" + string-width: "npm:^7.0.0" + checksum: d7f0b73e3d9b88cb496e6c086df7410b541b56a43d18ade6a573c9c18bd001b1c3fba1ad578f741a4218fdc794d042385f8ac02c25e1c295a2d8b9f3cb86eb4c + languageName: node + linkType: hard + "cli-width@npm:^3.0.0": version: 3.0.0 resolution: "cli-width@npm:3.0.0" @@ -9385,7 +9712,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.16": +"colorette@npm:^2.0.16, colorette@npm:^2.0.20": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 @@ -9469,6 +9796,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:11.1.0, commander@npm:^11.1.0": + version: 11.1.0 + resolution: "commander@npm:11.1.0" + checksum: 13cc6ac875e48780250f723fb81c1c1178d35c5decb1abb1b628b3177af08a8554e76b2c0f29de72d69eef7c864d12613272a71fabef8047922bc622ab75a179 + languageName: node + linkType: hard + "commander@npm:2.11.0": version: 2.11.0 resolution: "commander@npm:2.11.0" @@ -9490,13 +9824,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^11.1.0": - version: 11.1.0 - resolution: "commander@npm:11.1.0" - checksum: 13cc6ac875e48780250f723fb81c1c1178d35c5decb1abb1b628b3177af08a8554e76b2c0f29de72d69eef7c864d12613272a71fabef8047922bc622ab75a179 - languageName: node - linkType: hard - "commander@npm:^2.15.0, commander@npm:^2.9.0": version: 2.20.3 resolution: "commander@npm:2.20.3" @@ -10180,7 +10507,7 @@ __metadata: languageName: node linkType: hard -"deep-eql@npm:^4.1.3": +"deep-eql@npm:^4.0.1, deep-eql@npm:^4.1.3": version: 4.1.3 resolution: "deep-eql@npm:4.1.3" dependencies: @@ -10471,6 +10798,15 @@ __metadata: languageName: node linkType: hard +"difflib@npm:^0.2.4": + version: 0.2.4 + resolution: "difflib@npm:0.2.4" + dependencies: + heap: "npm:>= 0.2.0" + checksum: 4b151f1f6d378b0837ef28f4706d89d05b78f1093253b06c975c621f7ef8b048978588baf9e8f284c64b133d0abb08303b0789519cc91e5180d420cb3bb99c05 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -10640,6 +10976,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^10.3.0": + version: 10.3.0 + resolution: "emoji-regex@npm:10.3.0" + checksum: b4838e8dcdceb44cf47f59abe352c25ff4fe7857acaf5fb51097c427f6f75b44d052eb907a7a3b86f86bc4eae3a93f5c2b7460abe79c407307e6212d65c91163 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -11854,6 +12197,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^6.4.0": + version: 6.11.1 + resolution: "ethers@npm:6.11.1" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.1" + "@noble/curves": "npm:1.2.0" + "@noble/hashes": "npm:1.3.2" + "@types/node": "npm:18.15.13" + aes-js: "npm:4.0.0-beta.5" + tslib: "npm:2.4.0" + ws: "npm:8.5.0" + checksum: 97a920e0244ba6cd1622b58a448c87f26dad20bad242777abb2e583d045bf7752218477bd7367ba6518c2a5e2b16030afff15e87b705526d0ea667498c27ac89 + languageName: node + linkType: hard + "ethjs-unit@npm:0.1.6": version: 0.1.6 resolution: "ethjs-unit@npm:0.1.6" @@ -11928,6 +12286,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 + languageName: node + linkType: hard + "events@npm:^3.0.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -11946,6 +12311,23 @@ __metadata: languageName: node linkType: hard +"execa@npm:8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 2c52d8775f5bf103ce8eec9c7ab3059909ba350a5164744e9947ed14a53f51687c040a250bda833f906d1283aa8803975b84e6c8f7a7c42f99dc8ef80250d1af + languageName: node + linkType: hard + "execa@npm:^0.7.0": version: 0.7.0 resolution: "execa@npm:0.7.0" @@ -13080,6 +13462,13 @@ __metadata: languageName: node linkType: hard +"get-east-asian-width@npm:^1.0.0": + version: 1.2.0 + resolution: "get-east-asian-width@npm:1.2.0" + checksum: 914b1e217cf38436c24b4c60b4c45289e39a45bf9e65ef9fd343c2815a1a02b8a0215aeec8bf9c07c516089004b6e3826332481f40a09529fcadbf6e579f286b + languageName: node + linkType: hard + "get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": version: 2.0.2 resolution: "get-func-name@npm:2.0.2" @@ -13153,6 +13542,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 5c2181e98202b9dae0bb4a849979291043e5892eb40312b47f0c22b9414fc9b28a3b6063d2375705eb24abc41ecf97894d9a51f64ff021511b504477b27b4290 + languageName: node + linkType: hard + "get-symbol-description@npm:^1.0.2": version: 1.0.2 resolution: "get-symbol-description@npm:1.0.2" @@ -13258,6 +13654,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:7.1.7": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.0.4" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 173245e6f9ccf904309eb7ef4a44a11f3bf68e9e341dff5a28b5db0dd7123b7506daf41497f3437a0710f57198187b758c2351eeaabce4d16935e956920da6a4 + languageName: node + linkType: hard + "glob@npm:7.2.0": version: 7.2.0 resolution: "glob@npm:7.2.0" @@ -13761,7 +14171,7 @@ __metadata: languageName: node linkType: hard -"hardhat-gas-reporter@npm:^1.0.1, hardhat-gas-reporter@npm:^1.0.4": +"hardhat-gas-reporter@npm:^1.0.1, hardhat-gas-reporter@npm:^1.0.4, hardhat-gas-reporter@npm:^1.0.8": version: 1.0.10 resolution: "hardhat-gas-reporter@npm:1.0.10" dependencies: @@ -13830,6 +14240,67 @@ __metadata: languageName: node linkType: hard +"hardhat@npm:^2.20.1": + version: 2.21.0 + resolution: "hardhat@npm:2.21.0" + dependencies: + "@ethersproject/abi": "npm:^5.1.2" + "@metamask/eth-sig-util": "npm:^4.0.0" + "@nomicfoundation/edr": "npm:^0.2.0" + "@nomicfoundation/ethereumjs-common": "npm:4.0.4" + "@nomicfoundation/ethereumjs-tx": "npm:5.0.4" + "@nomicfoundation/ethereumjs-util": "npm:9.0.4" + "@nomicfoundation/solidity-analyzer": "npm:^0.1.0" + "@sentry/node": "npm:^5.18.1" + "@types/bn.js": "npm:^5.1.0" + "@types/lru-cache": "npm:^5.1.0" + adm-zip: "npm:^0.4.16" + aggregate-error: "npm:^3.0.0" + ansi-escapes: "npm:^4.3.0" + boxen: "npm:^5.1.2" + chalk: "npm:^2.4.2" + chokidar: "npm:^3.4.0" + ci-info: "npm:^2.0.0" + debug: "npm:^4.1.1" + enquirer: "npm:^2.3.0" + env-paths: "npm:^2.2.0" + ethereum-cryptography: "npm:^1.0.3" + ethereumjs-abi: "npm:^0.6.8" + find-up: "npm:^2.1.0" + fp-ts: "npm:1.19.3" + fs-extra: "npm:^7.0.1" + glob: "npm:7.2.0" + immutable: "npm:^4.0.0-rc.12" + io-ts: "npm:1.10.4" + keccak: "npm:^3.0.2" + lodash: "npm:^4.17.11" + mnemonist: "npm:^0.38.0" + mocha: "npm:^10.0.0" + p-map: "npm:^4.0.0" + raw-body: "npm:^2.4.1" + resolve: "npm:1.17.0" + semver: "npm:^6.3.0" + solc: "npm:0.7.3" + source-map-support: "npm:^0.5.13" + stacktrace-parser: "npm:^0.1.10" + tsort: "npm:0.0.1" + undici: "npm:^5.14.0" + uuid: "npm:^8.3.2" + ws: "npm:^7.4.6" + peerDependencies: + ts-node: "*" + typescript: "*" + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + bin: + hardhat: internal/cli/bootstrap.js + checksum: d7c887d147ddbd0792b5e64abfd8200c233a1815b91af908f68b167067e109f9ab6e0892d130137a745c6139bae691cee62a8e993290d4fc0a2a733e5dcce324 + languageName: node + linkType: hard + "hardhat@npm:^2.6.1, hardhat@npm:^2.6.4": version: 2.20.1 resolution: "hardhat@npm:2.20.1" @@ -14170,6 +14641,13 @@ __metadata: languageName: node linkType: hard +"heap@npm:>= 0.2.0": + version: 0.2.7 + resolution: "heap@npm:0.2.7" + checksum: 341c5d51ae13dc8346c371a8a69c57c972fcb9a3233090d3dd5ba29d483d6b5b4e75492443cbfeacd46608bb30e6680f646ffb7a6205900221735587d07a79b6 + languageName: node + linkType: hard + "helmet@npm:5.0.2": version: 5.0.2 resolution: "helmet@npm:5.0.2" @@ -14371,6 +14849,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 5a9359073fe17a8b58e5a085e9a39a950366d9f00217c4ff5878bd312e09d80f460536ea6a3f260b5943a01fe55c158d1cea3fc7bee3d0520aeef04f6d915c82 + languageName: node + linkType: hard + "husky@npm:^7.0.4": version: 7.0.4 resolution: "husky@npm:7.0.4" @@ -15060,6 +15545,15 @@ __metadata: languageName: node linkType: hard +"is-fullwidth-code-point@npm:^5.0.0": + version: 5.0.0 + resolution: "is-fullwidth-code-point@npm:5.0.0" + dependencies: + get-east-asian-width: "npm:^1.0.0" + checksum: cd591b27d43d76b05fa65ed03eddce57a16e1eca0b7797ff7255de97019bcaf0219acfc0c4f7af13319e13541f2a53c0ace476f442b13267b9a6a7568f2b65c8 + languageName: node + linkType: hard + "is-function@npm:^1.0.1": version: 1.0.2 resolution: "is-function@npm:1.0.2" @@ -15288,6 +15782,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: eb2f7127af02ee9aa2a0237b730e47ac2de0d4e76a4a905a50a11557f2339df5765eaea4ceb8029f1efa978586abe776908720bfcb1900c20c6ec5145f6f29d8 + languageName: node + linkType: hard + "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -16333,6 +16834,13 @@ __metadata: languageName: node linkType: hard +"lilconfig@npm:3.0.0": + version: 3.0.0 + resolution: "lilconfig@npm:3.0.0" + checksum: 7f5ee7a658dc016cacf146815e8d88b06f06f4402823b8b0934e305a57a197f55ccc9c5cd4fb5ea1b2b821c8ccaf2d54abd59602a4931af06eabda332388d3e6 + languageName: node + linkType: hard + "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -16389,6 +16897,40 @@ __metadata: languageName: node linkType: hard +"lint-staged@npm:^15.2.2": + version: 15.2.2 + resolution: "lint-staged@npm:15.2.2" + dependencies: + chalk: "npm:5.3.0" + commander: "npm:11.1.0" + debug: "npm:4.3.4" + execa: "npm:8.0.1" + lilconfig: "npm:3.0.0" + listr2: "npm:8.0.1" + micromatch: "npm:4.0.5" + pidtree: "npm:0.6.0" + string-argv: "npm:0.3.2" + yaml: "npm:2.3.4" + bin: + lint-staged: bin/lint-staged.js + checksum: a1ba6c7ee53e30a0f6ea9a351d95d3d0d2be916a41b561e22907e9ea513eb18cb3dbe65bff3ec13fad15777999efe56b2e2a95427e31d12a9b7e7948c3630ee2 + languageName: node + linkType: hard + +"listr2@npm:8.0.1": + version: 8.0.1 + resolution: "listr2@npm:8.0.1" + dependencies: + cli-truncate: "npm:^4.0.0" + colorette: "npm:^2.0.20" + eventemitter3: "npm:^5.0.1" + log-update: "npm:^6.0.0" + rfdc: "npm:^1.3.0" + wrap-ansi: "npm:^9.0.0" + checksum: b565d6ceb3a4c2dbe0c1735c0fd907afd0d6f89de21aced8e05187b2d88ca2f8f9ebc5d743885396a00f05f13146f6be744d098a56ce0402cf1cd131485a7ff1 + languageName: node + linkType: hard + "listr2@npm:^3.2.2": version: 3.14.0 resolution: "listr2@npm:3.14.0" @@ -16655,6 +17197,19 @@ __metadata: languageName: node linkType: hard +"log-update@npm:^6.0.0": + version: 6.0.0 + resolution: "log-update@npm:6.0.0" + dependencies: + ansi-escapes: "npm:^6.2.0" + cli-cursor: "npm:^4.0.0" + slice-ansi: "npm:^7.0.0" + strip-ansi: "npm:^7.1.0" + wrap-ansi: "npm:^9.0.0" + checksum: e0b3c3401ef49ce3eb17e2f83d644765e4f7988498fc1344eaa4f31ab30e510dcc469a7fb64dc01bd1c8d9237d917598fa677a9818705fb3774c10f6e9d4b27c + languageName: node + linkType: hard + "logform@npm:^2.3.2, logform@npm:^2.4.0": version: 2.6.0 resolution: "logform@npm:2.6.0" @@ -17103,6 +17658,16 @@ __metadata: languageName: node linkType: hard +"micromatch@npm:4.0.5, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: "npm:^3.0.2" + picomatch: "npm:^2.3.1" + checksum: 3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff + languageName: node + linkType: hard + "micromatch@npm:^2.1.5": version: 2.3.11 resolution: "micromatch@npm:2.3.11" @@ -17145,16 +17710,6 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: "npm:^3.0.2" - picomatch: "npm:^2.3.1" - checksum: 3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff - languageName: node - linkType: hard - "miller-rabin@npm:^4.0.0": version: 4.0.1 resolution: "miller-rabin@npm:4.0.1" @@ -17206,6 +17761,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + "mimic-response@npm:^1.0.0, mimic-response@npm:^1.0.1": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" @@ -18129,6 +18691,15 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^5.1.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + "nullthrows@npm:^1.1.1": version: 1.1.1 resolution: "nullthrows@npm:1.1.1" @@ -18360,6 +18931,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 4eef7c6abfef697dd4479345a4100c382d73c149d2d56170a54a07418c50816937ad09500e1ed1e79d235989d073a9bade8557122aee24f0576ecde0f392bb6c + languageName: node + linkType: hard + "open@npm:^7.4.2": version: 7.4.2 resolution: "open@npm:7.4.2" @@ -18433,6 +19013,13 @@ __metadata: languageName: node linkType: hard +"ordinal@npm:^1.0.3": + version: 1.0.3 + resolution: "ordinal@npm:1.0.3" + checksum: faa276fc1b1660477fd5c8749323c9715ae4f482c21fb8e67e57d1eb57845ba1b902796ecdcf6405325a8c3b042360970f5dc3b7f8cc7d79e0b2a756ab09174d + languageName: node + linkType: hard + "os-homedir@npm:^1.0.0": version: 1.0.2 resolution: "os-homedir@npm:1.0.2" @@ -18878,6 +19465,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + "path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -19112,6 +19706,15 @@ __metadata: languageName: node linkType: hard +"pidtree@npm:0.6.0": + version: 0.6.0 + resolution: "pidtree@npm:0.6.0" + bin: + pidtree: bin/pidtree.js + checksum: 0829ec4e9209e230f74ebf4265f5ccc9ebfb488334b525cb13f86ff801dca44b362c41252cd43ae4d7653a10a5c6ab3be39d2c79064d6895e0d78dc50a5ed6e9 + languageName: node + linkType: hard + "pidtree@npm:^0.5.0": version: 0.5.0 resolution: "pidtree@npm:0.5.0" @@ -19363,7 +19966,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.1.1, prettier@npm:^2.1.2, prettier@npm:^2.7.1, prettier@npm:^2.8.3": +"prettier@npm:^2.1.1, prettier@npm:^2.1.2, prettier@npm:^2.3.1, prettier@npm:^2.7.1, prettier@npm:^2.8.3": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -20462,6 +21065,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "restore-cursor@npm:4.0.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 6f7da8c5e422ac26aa38354870b1afac09963572cf2879443540449068cb43476e9cbccf6f8de3e0171e0d6f7f533c2bc1a0a008003c9a525bbc098e89041318 + languageName: node + linkType: hard + "ret@npm:~0.1.10": version: 0.1.15 resolution: "ret@npm:0.1.15" @@ -21189,7 +21802,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^4.0.1": +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" checksum: 41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 @@ -21306,6 +21919,16 @@ __metadata: languageName: node linkType: hard +"slice-ansi@npm:^7.0.0": + version: 7.1.0 + resolution: "slice-ansi@npm:7.1.0" + dependencies: + ansi-styles: "npm:^6.2.1" + is-fullwidth-code-point: "npm:^5.0.0" + checksum: 631c971d4abf56cf880f034d43fcc44ff883624867bf11ecbd538c47343911d734a4656d7bc02362b40b89d765652a7f935595441e519b59e2ad3f4d5d6fe7ca + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -21624,6 +22247,37 @@ __metadata: languageName: node linkType: hard +"solidity-coverage@npm:^0.8.0": + version: 0.8.11 + resolution: "solidity-coverage@npm:0.8.11" + dependencies: + "@ethersproject/abi": "npm:^5.0.9" + "@solidity-parser/parser": "npm:^0.18.0" + chalk: "npm:^2.4.2" + death: "npm:^1.1.0" + difflib: "npm:^0.2.4" + fs-extra: "npm:^8.1.0" + ghost-testrpc: "npm:^0.0.2" + global-modules: "npm:^2.0.0" + globby: "npm:^10.0.1" + jsonschema: "npm:^1.2.4" + lodash: "npm:^4.17.15" + mocha: "npm:^10.2.0" + node-emoji: "npm:^1.10.0" + pify: "npm:^4.0.1" + recursive-readdir: "npm:^2.2.2" + sc-istanbul: "npm:^0.4.5" + semver: "npm:^7.3.4" + shelljs: "npm:^0.8.3" + web3-utils: "npm:^1.3.6" + peerDependencies: + hardhat: ^2.11.0 + bin: + solidity-coverage: plugins/bin.js + checksum: de26a3bdece5b36005fcf84b4c4e9e0affc2822d69c823d925f439876c3d5c7b1fc83d447745c6aae994ad0e5c02f4c031d4d9b2d5613184d9286116857e6437 + languageName: node + linkType: hard + "solium-plugin-security@npm:0.1.1": version: 0.1.1 resolution: "solium-plugin-security@npm:0.1.1" @@ -21952,7 +22606,7 @@ __metadata: languageName: node linkType: hard -"string-argv@npm:^0.3.1": +"string-argv@npm:0.3.2, string-argv@npm:^0.3.1": version: 0.3.2 resolution: "string-argv@npm:0.3.2" checksum: 75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 @@ -22009,6 +22663,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^7.0.0": + version: 7.1.0 + resolution: "string-width@npm:7.1.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 68a99fbc3bd3d8eb42886ff38dce819767dee55f606f74dfa4687a07dfd21262745d9683df0aa53bf81a5dd47c13da921a501925b974bec66a7ddd634fef0634 + languageName: node + linkType: hard + "string.prototype.trim@npm:^1.2.8, string.prototype.trim@npm:~1.2.8": version: 1.2.8 resolution: "string.prototype.trim@npm:1.2.8" @@ -22114,7 +22779,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^7.0.1": +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" dependencies: @@ -22153,6 +22818,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: a771a17901427bac6293fd416db7577e2bc1c34a19d38351e9d5478c3c415f523f391003b42ed475f27e33a78233035df183525395f731d3bfb8cdcbd4da08ce + languageName: node + linkType: hard + "strip-hex-prefix@npm:1.0.0": version: 1.0.0 resolution: "strip-hex-prefix@npm:1.0.0" @@ -22791,7 +23463,7 @@ __metadata: languageName: node linkType: hard -"ts-node@npm:^10.5.0, ts-node@npm:^10.8.1, ts-node@npm:^10.9.1": +"ts-node@npm:>=8.0.0, ts-node@npm:^10.5.0, ts-node@npm:^10.8.1, ts-node@npm:^10.9.1": version: 10.9.2 resolution: "ts-node@npm:10.9.2" dependencies: @@ -22840,6 +23512,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.4.0": + version: 2.4.0 + resolution: "tslib@npm:2.4.0" + checksum: eb19bda3ae545b03caea6a244b34593468e23d53b26bf8649fbc20fce43e9b21a71127fd6d2b9662c0fe48ee6ff668ead48fd00d3b88b2b716b1c12edae25b5d + languageName: node + linkType: hard + "tslib@npm:^1.11.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -23003,6 +23682,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^3.0.0": + version: 3.13.1 + resolution: "type-fest@npm:3.13.1" + checksum: 547d22186f73a8c04590b70dcf63baff390078c75ea8acd366bbd510fd0646e348bd1970e47ecf795b7cff0b41d26e9c475c1fedd6ef5c45c82075fbf916b629 + languageName: node + linkType: hard + "type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -23088,6 +23774,28 @@ __metadata: languageName: node linkType: hard +"typechain@npm:^8.3.0": + version: 8.3.2 + resolution: "typechain@npm:8.3.2" + dependencies: + "@types/prettier": "npm:^2.1.1" + debug: "npm:^4.3.1" + fs-extra: "npm:^7.0.0" + glob: "npm:7.1.7" + js-sha3: "npm:^0.8.0" + lodash: "npm:^4.17.15" + mkdirp: "npm:^1.0.4" + prettier: "npm:^2.3.1" + ts-command-line-args: "npm:^2.2.0" + ts-essentials: "npm:^7.0.1" + peerDependencies: + typescript: ">=4.3.0" + bin: + typechain: dist/cli/cli.js + checksum: 1ea660cc7c699c6ac68da67b76454eb4e9395c54666d924ca67f983ae8eb5b5e7dab0a576beb55dbfad75ea784a3f68cb1ca019d332293b7291731c156ead5b5 + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.1": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" @@ -24546,7 +25254,7 @@ __metadata: languageName: node linkType: hard -"web3-utils@npm:^1.0.0-beta.31, web3-utils@npm:^1.3.0": +"web3-utils@npm:^1.0.0-beta.31, web3-utils@npm:^1.3.0, web3-utils@npm:^1.3.6": version: 1.10.4 resolution: "web3-utils@npm:1.10.4" dependencies: @@ -24907,6 +25615,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^9.0.0": + version: 9.0.0 + resolution: "wrap-ansi@npm:9.0.0" + dependencies: + ansi-styles: "npm:^6.2.1" + string-width: "npm:^7.0.0" + strip-ansi: "npm:^7.1.0" + checksum: a139b818da9573677548dd463bd626a5a5286271211eb6e4e82f34a4f643191d74e6d4a9bb0a3c26ec90e6f904f679e0569674ac099ea12378a8b98e20706066 + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -24944,6 +25663,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.5.0": + version: 8.5.0 + resolution: "ws@npm:8.5.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 0baeee03e97865accda8fad51e8e5fa17d19b8e264529efdf662bbba2acc1c7f1de8316287e6df5cb639231a96009e6d5234b57e6ff36ee2d04e49a0995fec2f + languageName: node + linkType: hard + "ws@npm:^3.0.0": version: 3.3.3 resolution: "ws@npm:3.3.3" @@ -25111,6 +25845,13 @@ __metadata: languageName: node linkType: hard +"yaml@npm:2.3.4": + version: 2.3.4 + resolution: "yaml@npm:2.3.4" + checksum: cf03b68f8fef5e8516b0f0b54edaf2459f1648317fc6210391cf606d247e678b449382f4bd01f77392538429e306c7cba8ff46ff6b37cac4de9a76aff33bd9e1 + languageName: node + linkType: hard + "yaml@npm:^1.10.0, yaml@npm:^1.10.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" From 2cea50f11d5fd780a289fcfde4a7cfb031e8fb8f Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 10 Apr 2024 17:36:41 -0300 Subject: [PATCH 006/343] chore: add GraphEscrow --- packages/horizon/contracts/GraphEscrow.sol | 50 +++++++++++++++++++ .../horizon/contracts/GraphEscrowStorage.sol | 17 +++++++ .../contracts/interfaces/IGraphEscrow.sol | 25 ++++++++++ .../contracts/interfaces/IGraphPayments.sol | 13 +++++ packages/subgraph-service/lib/forge-std | 1 + 5 files changed, 106 insertions(+) create mode 100644 packages/horizon/contracts/GraphEscrow.sol create mode 100644 packages/horizon/contracts/GraphEscrowStorage.sol create mode 100644 packages/horizon/contracts/interfaces/IGraphEscrow.sol create mode 100644 packages/horizon/contracts/interfaces/IGraphPayments.sol create mode 160000 packages/subgraph-service/lib/forge-std diff --git a/packages/horizon/contracts/GraphEscrow.sol b/packages/horizon/contracts/GraphEscrow.sol new file mode 100644 index 000000000..a6a58c7e1 --- /dev/null +++ b/packages/horizon/contracts/GraphEscrow.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; + +import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; +import { GraphEscrowStorageV1Storage } from "./GraphEscrowStorage.sol"; + +contract GraphEscrow is GraphEscrowStorageV1Storage { + // -- Errors -- + + error GraphEscrowNotGraphPayments(); + + // -- Immutable variables -- + + IGraphToken public immutable graphToken; + IGraphPayments public immutable graphPayments; + + // -- Modifier -- + + modifier onlyGraphPayments() { + if (msg.sender != address(graphPayments)) { + revert GraphEscrowNotGraphPayments(); + } + _; + } + + // -- Constructor -- + + constructor(address _graphToken, address _graphPayments, uint256 _withdrawEscrowThawingPeriod) { + graphToken = IGraphToken(_graphToken); + graphPayments = IGraphPayments(_graphPayments); + _withdrawEscrowThawingPeriod = _withdrawEscrowThawingPeriod; + } + + // Deposit funds into the escrow for a receiver + function deposit(address receiver, uint256 amount) external {} + + // Deposit funds into the escrow for multiple receivers + function depositMany(address[] calldata receivers, uint256[] calldata amounts) external {} + + // Requests to thaw a specific amount of escrow from a receiver's escrow account + function thaw(address receiver, uint256 amount) external {} + + // Withdraws all thawed escrow from a receiver's escrow account + function withdraw(address receiver) external {} + + // Collect from escrow (up to amount available in escrow) for a receiver using sender's deposit + function collect(address sender, address receiver, uint256 amount) external onlyGraphPayments {} +} diff --git a/packages/horizon/contracts/GraphEscrowStorage.sol b/packages/horizon/contracts/GraphEscrowStorage.sol new file mode 100644 index 000000000..aa8567d8b --- /dev/null +++ b/packages/horizon/contracts/GraphEscrowStorage.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; + +contract GraphEscrowStorageV1Storage { + // Stores how much escrow each sender has deposited for each receiver, as well as thawing information + mapping(address sender => mapping(address receiver => IGraphEscrow.EscrowAccount escrowAccount)) + public escrowAccounts; + + // The duration (in seconds) in which escrow funds are thawing before they can be withdrawn + uint256 public immutable withdrawEscrowThawingPeriod; + + // The maximum thawing period (in seconds) for both escrow withdrawal and signer revocation + // This is a precautionary measure to avoid inadvertedly locking funds for too long + uint256 public constant MAX_THAWING_PERIOD = 90 days; +} diff --git a/packages/horizon/contracts/interfaces/IGraphEscrow.sol b/packages/horizon/contracts/interfaces/IGraphEscrow.sol new file mode 100644 index 000000000..8e6ca58fd --- /dev/null +++ b/packages/horizon/contracts/interfaces/IGraphEscrow.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +interface IGraphEscrow { + struct EscrowAccount { + uint256 balance; // Total escrow balance for a sender-receiver pair + uint256 amountThawing; // Amount of escrow currently being thawed + uint256 thawEndTimestamp; // Timestamp at which thawing period ends (zero if not thawing) + } + + // Deposit funds into the escrow for a receiver + function deposit(address receiver, uint256 amount) external; + + // Deposit funds into the escrow for multiple receivers + function depositMany(address[] calldata receivers, uint256[] calldata amounts) external; + + // Requests to thaw a specific amount of escrow from a receiver's escrow account + function thaw(address receiver, uint256 amount) external; + + // Withdraws all thawed escrow from a receiver's escrow account + function withdraw(address receiver) external; + + // Collect from escrow (up to amount available in escrow) for a receiver using sender's deposit + function collect(address sender, address receiver, uint256 amount) external; +} diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol new file mode 100644 index 000000000..2dc89374a --- /dev/null +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +interface IGraphPayments { + function approveCollector(address dataService) external; + function collect( + address sender, + address receiver, + uint256 amount, + uint256 paymentType, + uint256 dataServiceCut + ) external; +} diff --git a/packages/subgraph-service/lib/forge-std b/packages/subgraph-service/lib/forge-std new file mode 160000 index 000000000..bb4ceea94 --- /dev/null +++ b/packages/subgraph-service/lib/forge-std @@ -0,0 +1 @@ +Subproject commit bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef From ac75c308831f9cd26aff754540ec91196c50301a Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 12 Apr 2024 13:03:58 -0300 Subject: [PATCH 007/343] chore: add comment --- packages/horizon/contracts/interfaces/IGraphPayments.sol | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 2dc89374a..2836844c4 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -2,7 +2,10 @@ pragma solidity ^0.8.24; interface IGraphPayments { + // approve a data service to collect funds function approveCollector(address dataService) external; + + // collect funds from a sender, pay cuts and forward the rest to the receiver function collect( address sender, address receiver, From cb1c50a069adb277db441d36a1ed14cf15992112 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 12 Apr 2024 15:21:48 -0300 Subject: [PATCH 008/343] chore: add GraphPayments interface and data --- packages/horizon/contracts/GraphEscrow.sol | 3 +- .../horizon/contracts/GraphEscrowStorage.sol | 6 +-- packages/horizon/contracts/GraphPayments.sol | 50 +++++++++++++++++++ .../contracts/GraphPaymentsStorage.sol | 19 +++++++ .../contracts/interfaces/IGraphPayments.sol | 18 ++++++- 5 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 packages/horizon/contracts/GraphPayments.sol create mode 100644 packages/horizon/contracts/GraphPaymentsStorage.sol diff --git a/packages/horizon/contracts/GraphEscrow.sol b/packages/horizon/contracts/GraphEscrow.sol index a6a58c7e1..06f6e4b42 100644 --- a/packages/horizon/contracts/GraphEscrow.sol +++ b/packages/horizon/contracts/GraphEscrow.sol @@ -3,10 +3,11 @@ pragma solidity ^0.8.24; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; +import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; import { GraphEscrowStorageV1Storage } from "./GraphEscrowStorage.sol"; -contract GraphEscrow is GraphEscrowStorageV1Storage { +contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage { // -- Errors -- error GraphEscrowNotGraphPayments(); diff --git a/packages/horizon/contracts/GraphEscrowStorage.sol b/packages/horizon/contracts/GraphEscrowStorage.sol index aa8567d8b..472915481 100644 --- a/packages/horizon/contracts/GraphEscrowStorage.sol +++ b/packages/horizon/contracts/GraphEscrowStorage.sol @@ -8,10 +8,10 @@ contract GraphEscrowStorageV1Storage { mapping(address sender => mapping(address receiver => IGraphEscrow.EscrowAccount escrowAccount)) public escrowAccounts; - // The duration (in seconds) in which escrow funds are thawing before they can be withdrawn - uint256 public immutable withdrawEscrowThawingPeriod; - // The maximum thawing period (in seconds) for both escrow withdrawal and signer revocation // This is a precautionary measure to avoid inadvertedly locking funds for too long uint256 public constant MAX_THAWING_PERIOD = 90 days; + + // The duration (in seconds) in which escrow funds are thawing before they can be withdrawn + uint256 public immutable withdrawEscrowThawingPeriod; } diff --git a/packages/horizon/contracts/GraphPayments.sol b/packages/horizon/contracts/GraphPayments.sol new file mode 100644 index 000000000..7131d7abd --- /dev/null +++ b/packages/horizon/contracts/GraphPayments.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; +import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; + +import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; +import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; +import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; + +contract GraphEscrow is IGraphPayments, GraphPaymentsStorageV1Storage { + // -- Errors -- + + // -- Immutable variables -- + + IGraphToken public immutable graphToken; + IHorizonStaking public immutable staking; + IGraphEscrow public immutable graphEscrow; + + // -- Modifier -- + + // -- Constructor -- + + constructor(address _graphToken, address _staking, address _graphEscrow) { + graphToken = IGraphToken(_graphToken); + staking = IHorizonStaking(_staking); + graphEscrow = IGraphEscrow(_graphEscrow); + } + + // approve a data service to collect funds + function approveCollector(address dataService) external {} + + // thaw a data service's collector authorization + function thawCollector(address dataService) external {} + + // cancel thawing a data service's collector authorization + function cancelThawCollector(address dataService) external {} + + // revoke authorized collector + function revokeCollector(address dataService) external {} + + // collect funds from a sender, pay cuts and forward the rest to the receiver + function collect( + address sender, + address receiver, + uint256 amount, + uint256 paymentType, + uint256 dataServiceCut + ) external {} +} diff --git a/packages/horizon/contracts/GraphPaymentsStorage.sol b/packages/horizon/contracts/GraphPaymentsStorage.sol new file mode 100644 index 000000000..ebf732f70 --- /dev/null +++ b/packages/horizon/contracts/GraphPaymentsStorage.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; + +contract GraphPaymentsStorageV1Storage { + // Authorized collectors + mapping(address sender => mapping(address collector => uint256 thawEndTimestamp)) public authorizedCollectors; + + // The maximum thawing period (in seconds) for removing collector authorization + // This is a precautionary measure to avoid inadvertedly locking collectors for too long + uint256 public constant MAX_THAWING_PERIOD = 90 days; + + // Thawing period for authorized collectors + uint256 public immutable revokeCollectorThawingPeriod; + + // The graph protocol payment cut + uint256 public immutable protocolPaymentCut; +} diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 2836844c4..b008878fb 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -2,15 +2,31 @@ pragma solidity ^0.8.24; interface IGraphPayments { + // Payment types + enum PaymentType { + Null, + Indexing, + Query + } + // approve a data service to collect funds function approveCollector(address dataService) external; + // thaw a data service's collector authorization + function thawCollector(address dataService) external; + + // cancel thawing a data service's collector authorization + function cancelThawCollector(address dataService) external; + + // revoke authorized collector + function revokeCollector(address dataService) external; + // collect funds from a sender, pay cuts and forward the rest to the receiver function collect( address sender, address receiver, uint256 amount, - uint256 paymentType, + PaymentType paymentType, uint256 dataServiceCut ) external; } From f22adef7046982efbdc5c3633e31a3c164964574 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 12 Apr 2024 18:16:44 -0300 Subject: [PATCH 009/343] chore: implement Escrow deposit --- .../contracts/governance/Controller.sol | 2 +- .../contracts/governance/Governed.sol | 2 +- .../contracts/governance/IController.sol | 2 +- .../contracts/governance/IManaged.sol | 2 +- .../contracts/governance/Managed.sol | 2 +- .../contracts/governance/Pausable.sol | 2 +- .../contracts/contracts/token/IGraphToken.sol | 2 +- packages/horizon/contracts/GraphDirectory.sol | 25 +++++++++ packages/horizon/contracts/GraphEscrow.sol | 20 +++---- packages/horizon/contracts/GraphPayments.sol | 4 +- packages/horizon/contracts/SimpleTest.sol | 10 ---- .../contracts/interfaces/IGraphPayments.sol | 5 +- packages/horizon/lib/forge-std | 2 +- packages/horizon/package.json | 1 + packages/horizon/test/GraphEscrow.t.sol | 54 +++++++++++++++++++ packages/horizon/test/SimpleTest.t.sol | 17 ------ packages/horizon/test/SimpleTest.ts | 23 -------- packages/horizon/test/mocks/MockGRTToken.sol | 46 ++++++++++++++++ yarn.lock | 8 +++ 19 files changed, 157 insertions(+), 72 deletions(-) create mode 100644 packages/horizon/contracts/GraphDirectory.sol delete mode 100644 packages/horizon/contracts/SimpleTest.sol create mode 100644 packages/horizon/test/GraphEscrow.t.sol delete mode 100644 packages/horizon/test/SimpleTest.t.sol delete mode 100644 packages/horizon/test/SimpleTest.ts create mode 100644 packages/horizon/test/mocks/MockGRTToken.sol diff --git a/packages/contracts/contracts/governance/Controller.sol b/packages/contracts/contracts/governance/Controller.sol index affb29a05..2f3654109 100644 --- a/packages/contracts/contracts/governance/Controller.sol +++ b/packages/contracts/contracts/governance/Controller.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; import { IController } from "./IController.sol"; import { IManaged } from "./IManaged.sol"; diff --git a/packages/contracts/contracts/governance/Governed.sol b/packages/contracts/contracts/governance/Governed.sol index f692b2d19..9902eafc9 100644 --- a/packages/contracts/contracts/governance/Governed.sol +++ b/packages/contracts/contracts/governance/Governed.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; /** * @title Graph Governance contract diff --git a/packages/contracts/contracts/governance/IController.sol b/packages/contracts/contracts/governance/IController.sol index 7df3d94ee..0549c723d 100644 --- a/packages/contracts/contracts/governance/IController.sol +++ b/packages/contracts/contracts/governance/IController.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.8.0; +pragma solidity >=0.6.12 <0.9.0; interface IController { function getGovernor() external view returns (address); diff --git a/packages/contracts/contracts/governance/IManaged.sol b/packages/contracts/contracts/governance/IManaged.sol index 76f05e0fb..4cedf9c0b 100644 --- a/packages/contracts/contracts/governance/IManaged.sol +++ b/packages/contracts/contracts/governance/IManaged.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; import { IController } from "./IController.sol"; diff --git a/packages/contracts/contracts/governance/Managed.sol b/packages/contracts/contracts/governance/Managed.sol index fb65e71b9..f0172dc94 100644 --- a/packages/contracts/contracts/governance/Managed.sol +++ b/packages/contracts/contracts/governance/Managed.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; import { IController } from "./IController.sol"; diff --git a/packages/contracts/contracts/governance/Pausable.sol b/packages/contracts/contracts/governance/Pausable.sol index 552b0aa15..5ff29c19e 100644 --- a/packages/contracts/contracts/governance/Pausable.sol +++ b/packages/contracts/contracts/governance/Pausable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; abstract contract Pausable { /** diff --git a/packages/contracts/contracts/token/IGraphToken.sol b/packages/contracts/contracts/token/IGraphToken.sol index 8255e18d5..f24467d42 100644 --- a/packages/contracts/contracts/token/IGraphToken.sol +++ b/packages/contracts/contracts/token/IGraphToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.7.6 <=0.9.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/packages/horizon/contracts/GraphDirectory.sol b/packages/horizon/contracts/GraphDirectory.sol new file mode 100644 index 000000000..d229bd0c4 --- /dev/null +++ b/packages/horizon/contracts/GraphDirectory.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity 0.8.24; + +import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; +import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; +import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; +import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; + +contract GraphDirectory { + IController public immutable graphController; + IHorizonStaking public immutable graphStaking; + IGraphToken public immutable graphToken; + IGraphEscrow public immutable graphEscrow; + IGraphPayments public immutable graphPayments; + + constructor(address _controller) { + graphController = IController(_controller); + graphStaking = IHorizonStaking(graphController.getContractProxy(keccak256("Staking"))); + graphToken = IGraphToken(graphController.getContractProxy(keccak256("GraphToken"))); + graphEscrow = IGraphEscrow(graphController.getContractProxy(keccak256("GraphEscrow"))); + graphPayments = IGraphPayments(graphController.getContractProxy(keccak256("GraphPayments"))); + } +} diff --git a/packages/horizon/contracts/GraphEscrow.sol b/packages/horizon/contracts/GraphEscrow.sol index 06f6e4b42..b2acd630c 100644 --- a/packages/horizon/contracts/GraphEscrow.sol +++ b/packages/horizon/contracts/GraphEscrow.sol @@ -5,17 +5,17 @@ import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToke import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; +import { GraphDirectory } from "./GraphDirectory.sol"; import { GraphEscrowStorageV1Storage } from "./GraphEscrowStorage.sol"; -contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage { +contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirectory { // -- Errors -- error GraphEscrowNotGraphPayments(); - // -- Immutable variables -- + // -- Events -- - IGraphToken public immutable graphToken; - IGraphPayments public immutable graphPayments; + event Deposit(address indexed sender, address indexed receiver, uint256 amount); // -- Modifier -- @@ -28,14 +28,16 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage { // -- Constructor -- - constructor(address _graphToken, address _graphPayments, uint256 _withdrawEscrowThawingPeriod) { - graphToken = IGraphToken(_graphToken); - graphPayments = IGraphPayments(_graphPayments); - _withdrawEscrowThawingPeriod = _withdrawEscrowThawingPeriod; + constructor(address _controller, uint256 _withdrawEscrowThawingPeriod) GraphDirectory(_controller) { + withdrawEscrowThawingPeriod = _withdrawEscrowThawingPeriod; } // Deposit funds into the escrow for a receiver - function deposit(address receiver, uint256 amount) external {} + function deposit(address receiver, uint256 amount) external { + escrowAccounts[msg.sender][receiver].balance += amount; + graphToken.transferFrom(msg.sender, address(this), amount); + emit Deposit(msg.sender, receiver, amount); + } // Deposit funds into the escrow for multiple receivers function depositMany(address[] calldata receivers, uint256[] calldata amounts) external {} diff --git a/packages/horizon/contracts/GraphPayments.sol b/packages/horizon/contracts/GraphPayments.sol index 7131d7abd..6990518d3 100644 --- a/packages/horizon/contracts/GraphPayments.sol +++ b/packages/horizon/contracts/GraphPayments.sol @@ -8,7 +8,7 @@ import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; -contract GraphEscrow is IGraphPayments, GraphPaymentsStorageV1Storage { +contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage { // -- Errors -- // -- Immutable variables -- @@ -44,7 +44,7 @@ contract GraphEscrow is IGraphPayments, GraphPaymentsStorageV1Storage { address sender, address receiver, uint256 amount, - uint256 paymentType, + IGraphPayments.PaymentType paymentType, uint256 dataServiceCut ) external {} } diff --git a/packages/horizon/contracts/SimpleTest.sol b/packages/horizon/contracts/SimpleTest.sol deleted file mode 100644 index 5cc28d9cc..000000000 --- a/packages/horizon/contracts/SimpleTest.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.4.0 <0.9.0; - -import { Test } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; - -contract SimpleTest is Test { - function test() external pure returns (uint256) { - return 42; - } -} diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index b008878fb..ebc05ef34 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -4,9 +4,8 @@ pragma solidity ^0.8.24; interface IGraphPayments { // Payment types enum PaymentType { - Null, - Indexing, - Query + IndexingFees, + QueryFees } // approve a data service to collect funds diff --git a/packages/horizon/lib/forge-std b/packages/horizon/lib/forge-std index bb4ceea94..e4aef94c1 160000 --- a/packages/horizon/lib/forge-std +++ b/packages/horizon/lib/forge-std @@ -1 +1 @@ -Subproject commit bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef +Subproject commit e4aef94c1768803a16fe19f7ce8b65defd027cfd diff --git a/packages/horizon/package.json b/packages/horizon/package.json index ec23f62cb..59dcaee89 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -20,6 +20,7 @@ "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", "@nomicfoundation/hardhat-verify": "^2.0.0", + "@openzeppelin/contracts": "^5.0.2", "@typechain/ethers-v6": "^0.5.0", "@typechain/hardhat": "^9.0.0", "@types/chai": "^4.2.0", diff --git a/packages/horizon/test/GraphEscrow.t.sol b/packages/horizon/test/GraphEscrow.t.sol new file mode 100644 index 000000000..2f77dbfbc --- /dev/null +++ b/packages/horizon/test/GraphEscrow.t.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; + +import { GraphEscrow } from "contracts/GraphEscrow.sol"; +import { GraphPayments } from "contracts/GraphPayments.sol"; + +import "./mocks/MockGRTToken.sol"; + +contract GraphEscrowTest is Test { + GraphEscrow escrow; + + Controller controller; + MockGRTToken token; + + address governor = address(0xA1); + uint256 initialSupply = 1000000 ether; + uint256 withdrawEscrowThawingPeriod = 60; + + address sender; + address receiver; + + // Setup + + function setUp() public { + vm.prank(governor); + controller = new Controller(); + token = new MockGRTToken(); + + vm.startPrank(governor); + controller.setContractProxy(keccak256("GraphToken"), address(token)); + vm.stopPrank(); + + escrow = new GraphEscrow(address(controller), withdrawEscrowThawingPeriod); + + sender = address(0xB1); + receiver = address(0xB2); + } + + function testDeposit() public { + token.mint(sender, 10000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 1000 ether); + vm.stopPrank(); + + + (uint256 receiverEscrowBalance,,) = escrow.escrowAccounts(sender, receiver); + assertEq(receiverEscrowBalance, 1000 ether); + } +} \ No newline at end of file diff --git a/packages/horizon/test/SimpleTest.t.sol b/packages/horizon/test/SimpleTest.t.sol deleted file mode 100644 index b130e5d34..000000000 --- a/packages/horizon/test/SimpleTest.t.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.10; - -import "forge-std/Test.sol"; -import { SimpleTest } from "../contracts/SimpleTest.sol"; - -contract ContractTest is Test { - SimpleTest simpleTest; - - function setUp() public { - simpleTest = new SimpleTest(); - } - - function test_NumberIs42() public { - assertEq(simpleTest.test(), 42); - } -} diff --git a/packages/horizon/test/SimpleTest.ts b/packages/horizon/test/SimpleTest.ts deleted file mode 100644 index cfcfb1443..000000000 --- a/packages/horizon/test/SimpleTest.ts +++ /dev/null @@ -1,23 +0,0 @@ -import hardhat from 'hardhat' - -import { expect } from 'chai' -import { loadFixture } from '@nomicfoundation/hardhat-toolbox/network-helpers' - -const ethers = hardhat.ethers - -describe('SimpleTest', function () { - async function deployFixture() { - const [owner] = await ethers.getSigners() - const SimpleTest = await ethers.getContractFactory('SimpleTest') - const simpleTest = await SimpleTest.deploy() - return { simpleTest, owner } - } - - describe('Deployment', function () { - it('Should return 42', async function () { - const { simpleTest } = await loadFixture(deployFixture) - - expect(await simpleTest.test()).to.equal(42) - }) - }) -}) diff --git a/packages/horizon/test/mocks/MockGRTToken.sol b/packages/horizon/test/mocks/MockGRTToken.sol new file mode 100644 index 000000000..11cf5c0f8 --- /dev/null +++ b/packages/horizon/test/mocks/MockGRTToken.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; + +contract MockGRTToken is ERC20, IGraphToken { + constructor() ERC20("Graph Token", "GRT") {} + + function burn(uint256 amount) external {} + + function burnFrom(address _from, uint256 amount) external { + _burn(_from, amount); + } + + function mint(address to, uint256 amount) public { + _mint(to, amount); + } + + // -- Mint Admin -- + + function addMinter(address _account) external {} + + function removeMinter(address _account) external {} + + function renounceMinter() external {} + + function isMinter(address _account) external view returns (bool) {} + + // -- Permit -- + + function permit( + address _owner, + address _spender, + uint256 _value, + uint256 _deadline, + uint8 _v, + bytes32 _r, + bytes32 _s + ) external {} + + // -- Allowance -- + + function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {} + function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 27dfd84b0..00e728326 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2935,6 +2935,7 @@ __metadata: "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" "@nomicfoundation/hardhat-verify": "npm:^2.0.0" + "@openzeppelin/contracts": "npm:^5.0.2" "@typechain/ethers-v6": "npm:^0.5.0" "@typechain/hardhat": "npm:^9.0.0" "@types/chai": "npm:^4.2.0" @@ -5044,6 +5045,13 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts@npm:^5.0.2": + version: 5.0.2 + resolution: "@openzeppelin/contracts@npm:5.0.2" + checksum: d042661db7bb2f3a4b9ef30bba332e86ac20907d171f2ebfccdc9255cc69b62786fead8d6904b8148a8f26946bc7c15eead91b95f75db0c193a99d52e528663e + languageName: node + linkType: hard + "@openzeppelin/defender-admin-client@npm:^1.46.0": version: 1.54.1 resolution: "@openzeppelin/defender-admin-client@npm:1.54.1" From 7f1431cceaae1b1aec77546794aff8cd476ac468 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 17 Apr 2024 12:26:10 -0300 Subject: [PATCH 010/343] chore: add GraphEscrow implementation --- packages/horizon/contracts/GraphEscrow.sol | 96 +++++++++++++++++++++- packages/horizon/test/GraphEscrow.t.sol | 72 +++++++++++++++- 2 files changed, 163 insertions(+), 5 deletions(-) diff --git a/packages/horizon/contracts/GraphEscrow.sol b/packages/horizon/contracts/GraphEscrow.sol index b2acd630c..afb23d97b 100644 --- a/packages/horizon/contracts/GraphEscrow.sol +++ b/packages/horizon/contracts/GraphEscrow.sol @@ -12,10 +12,25 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector // -- Errors -- error GraphEscrowNotGraphPayments(); + error GraphEscrowInputsLengthMismatch(); + error GraphEscrowInsufficientThawAmount(); + error GraphEscrowInsufficientAmount(uint256 available, uint256 required); + error GraphEscrowNotThawing(); + error GraphEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); // -- Events -- event Deposit(address indexed sender, address indexed receiver, uint256 amount); + event CancelThaw(address indexed sender, address indexed receiver); + event Thaw( + address indexed sender, + address indexed receiver, + uint256 amount, + uint256 totalAmountThawing, + uint256 thawEndTimestamp + ); + event Withdraw(address indexed sender, address indexed receiver, uint256 amount); + event Collect(address indexed sender, address indexed receiver, uint256 amount); // -- Modifier -- @@ -40,14 +55,87 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector } // Deposit funds into the escrow for multiple receivers - function depositMany(address[] calldata receivers, uint256[] calldata amounts) external {} + function depositMany(address[] calldata receivers, uint256[] calldata amounts) external { + if (receivers.length != amounts.length) { + revert GraphEscrowInputsLengthMismatch(); + } + + uint256 totalAmount = 0; + for (uint256 i = 0; i < receivers.length; i++) { + address receiver = receivers[i]; + uint256 amount = amounts[i]; + + totalAmount += amount; + escrowAccounts[msg.sender][receiver].balance += amount; + emit Deposit(msg.sender, receiver, amount); + } + + graphToken.transferFrom(msg.sender, address(this), totalAmount); + } // Requests to thaw a specific amount of escrow from a receiver's escrow account - function thaw(address receiver, uint256 amount) external {} + function thaw(address receiver, uint256 amount) external { + EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; + if (amount == 0) { + // if amount thawing is zero and requested amount is zero this is an invalid request. + // otherwise if amount thawing is greater than zero and requested amount is zero this + // is a cancel thaw request. + if (account.amountThawing == 0) { + revert GraphEscrowInsufficientThawAmount(); + } + account.amountThawing = 0; + account.thawEndTimestamp = 0; + emit CancelThaw(msg.sender, receiver); + return; + } + + // Check if the escrow balance is sufficient + if (account.balance < amount) { + revert GraphEscrowInsufficientAmount({ available: account.balance, required: amount }); + } + + // Set amount to thaw + account.amountThawing = amount; + // Set when the thaw is complete (thawing period number of seconds after current timestamp) + account.thawEndTimestamp = block.timestamp + withdrawEscrowThawingPeriod; + + emit Thaw(msg.sender, receiver, amount, account.amountThawing, account.thawEndTimestamp); + } // Withdraws all thawed escrow from a receiver's escrow account - function withdraw(address receiver) external {} + function withdraw(address receiver) external { + EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; + if (account.thawEndTimestamp == 0) { + revert GraphEscrowNotThawing(); + } + + if (account.thawEndTimestamp > block.timestamp) { + revert GraphEscrowStillThawing({ + currentTimestamp: block.timestamp, + thawEndTimestamp: account.thawEndTimestamp + }); + } + + // Amount is the minimum between the amount being thawed and the actual balance + uint256 amount = account.amountThawing > account.balance ? account.balance : account.amountThawing; + + account.balance -= amount; // Reduce the balance by the withdrawn amount (no underflow risk) + account.amountThawing = 0; + account.thawEndTimestamp = 0; + graphToken.transfer(msg.sender, amount); + emit Withdraw(msg.sender, receiver, amount); + } // Collect from escrow (up to amount available in escrow) for a receiver using sender's deposit - function collect(address sender, address receiver, uint256 amount) external onlyGraphPayments {} + function collect(address sender, address receiver, uint256 amount) external onlyGraphPayments { + EscrowAccount storage account = escrowAccounts[sender][receiver]; + uint256 available = account.balance - account.amountThawing; + + // TODO: should we revert if not enough funds are available? + uint256 collectAmount = amount > available ? available : amount; + + account.balance -= collectAmount; + graphToken.transfer(msg.sender, collectAmount); + emit Collect(sender, receiver, collectAmount); + } } diff --git a/packages/horizon/test/GraphEscrow.t.sol b/packages/horizon/test/GraphEscrow.t.sol index 2f77dbfbc..662b30d64 100644 --- a/packages/horizon/test/GraphEscrow.t.sol +++ b/packages/horizon/test/GraphEscrow.t.sol @@ -15,8 +15,9 @@ contract GraphEscrowTest is Test { Controller controller; MockGRTToken token; + address graphPayments = address(0xA1); - address governor = address(0xA1); + address governor = address(0xA2); uint256 initialSupply = 1000000 ether; uint256 withdrawEscrowThawingPeriod = 60; @@ -32,6 +33,7 @@ contract GraphEscrowTest is Test { vm.startPrank(governor); controller.setContractProxy(keccak256("GraphToken"), address(token)); + controller.setContractProxy(keccak256("GraphPayments"), graphPayments); vm.stopPrank(); escrow = new GraphEscrow(address(controller), withdrawEscrowThawingPeriod); @@ -47,8 +49,76 @@ contract GraphEscrowTest is Test { escrow.deposit(receiver, 1000 ether); vm.stopPrank(); + (uint256 receiverEscrowBalance,,) = escrow.escrowAccounts(sender, receiver); + assertEq(receiverEscrowBalance, 1000 ether); + } + + function testDepositMany() public { + address otherReceiver = address(0xB3); + address[] memory receivers = new address[](2); + receivers[0] = receiver; + receivers[1] = otherReceiver; + + uint256[] memory amounts = new uint256[](2); + amounts[0] = 1000 ether; + amounts[1] = 2000 ether; + + token.mint(sender, 3000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 3000 ether); + escrow.depositMany(receivers, amounts); + vm.stopPrank(); (uint256 receiverEscrowBalance,,) = escrow.escrowAccounts(sender, receiver); assertEq(receiverEscrowBalance, 1000 ether); + + (uint256 otherReceiverEscrowBalance,,) = escrow.escrowAccounts(sender, otherReceiver); + assertEq(otherReceiverEscrowBalance, 2000 ether); + } + + function testThaw() public { + token.mint(sender, 1000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 1000 ether); + escrow.thaw(receiver, 100 ether); + vm.stopPrank(); + + (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(sender, receiver); + assertEq(amountThawing, 100 ether); + assertEq(thawEndTimestamp, block.timestamp + withdrawEscrowThawingPeriod); + } + + function testWithdraw() public { + token.mint(sender, 1000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 1000 ether); + escrow.thaw(receiver, 100 ether); + + // advance time + skip(withdrawEscrowThawingPeriod + 1); + + escrow.withdraw(receiver); + vm.stopPrank(); + + (uint256 receiverEscrowBalance,,) = escrow.escrowAccounts(sender, receiver); + assertEq(receiverEscrowBalance, 900 ether); + } + + function testCollect() public { + token.mint(sender, 1000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 1000 ether); + vm.stopPrank(); + + vm.prank(graphPayments); + escrow.collect(sender, receiver, 100 ether); + + (uint256 receiverEscrowBalance,,) = escrow.escrowAccounts(sender, receiver); + assertEq(receiverEscrowBalance, 900 ether); + uint256 graphPaymentsBalance = token.balanceOf(graphPayments); + assertEq(graphPaymentsBalance, 100 ether); } } \ No newline at end of file From 30bbbc6b39cdf77e1055b5e9b3eda1b9103670f4 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 18 Apr 2024 13:56:41 -0300 Subject: [PATCH 011/343] chore: add GraphPayments implementation --- .../contracts/staking/IHorizonStaking.sol | 2 + packages/horizon/contracts/GraphPayments.sol | 91 ++++++++++-- .../contracts/GraphPaymentsStorage.sol | 3 +- .../contracts/interfaces/IGraphPayments.sol | 6 + packages/horizon/foundry.toml | 3 +- packages/horizon/test/GraphDeployments.t.sol | 87 ++++++++++++ packages/horizon/test/GraphEscrow.t.sol | 1 - packages/horizon/test/GraphPayments.t.sol | 133 ++++++++++++++++++ .../horizon/test/mocks/MockHorizonStaking.sol | 43 ++++++ 9 files changed, 351 insertions(+), 18 deletions(-) create mode 100644 packages/horizon/test/GraphDeployments.t.sol create mode 100644 packages/horizon/test/GraphPayments.t.sol create mode 100644 packages/horizon/test/mocks/MockHorizonStaking.sol diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol index a4101ff52..f6bf1dd87 100644 --- a/packages/contracts/contracts/staking/IHorizonStaking.sol +++ b/packages/contracts/contracts/staking/IHorizonStaking.sol @@ -146,4 +146,6 @@ interface IHorizonStaking { function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory); function getProvision(bytes32 provision) external view returns (Provision memory); + + function getDelegatorCut(address serviceProvider, uint256256 paymentType) external returns (address, uint256); } diff --git a/packages/horizon/contracts/GraphPayments.sol b/packages/horizon/contracts/GraphPayments.sol index 6990518d3..93c80c7bc 100644 --- a/packages/horizon/contracts/GraphPayments.sol +++ b/packages/horizon/contracts/GraphPayments.sol @@ -6,45 +6,106 @@ import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHor import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; +import { GraphDirectory } from "./GraphDirectory.sol"; import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; -contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage { +contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDirectory { // -- Errors -- - // -- Immutable variables -- + error GraphPaymentsNotThawing(); + error GraphPaymentsStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); + error GraphPaymentsCollectorNotAuthorized(address sender, address dataService); - IGraphToken public immutable graphToken; - IHorizonStaking public immutable staking; - IGraphEscrow public immutable graphEscrow; + // -- Events -- + + event AuthorizedCollector(address indexed sender, address indexed dataService); + event ThawCollector(address indexed sender, address indexed dataService); + event CancelThawCollector(address indexed sender, address indexed dataService); + event RevokeCollector(address indexed sender, address indexed dataService); // -- Modifier -- + // -- Parameters -- + + uint256 private immutable MAX_PPM = 1000000; // 100% in parts per million + // -- Constructor -- - constructor(address _graphToken, address _staking, address _graphEscrow) { - graphToken = IGraphToken(_graphToken); - staking = IHorizonStaking(_staking); - graphEscrow = IGraphEscrow(_graphEscrow); + constructor( + address _controller, + uint256 _revokeCollectorThawingPeriod, + uint256 _protocolPaymentCut + ) GraphDirectory(_controller) { + revokeCollectorThawingPeriod = _revokeCollectorThawingPeriod; + protocolPaymentCut = _protocolPaymentCut; } // approve a data service to collect funds - function approveCollector(address dataService) external {} + function approveCollector(address dataService) external { + authorizedCollectors[msg.sender][dataService].authorized = true; + emit AuthorizedCollector(msg.sender, dataService); + } // thaw a data service's collector authorization - function thawCollector(address dataService) external {} + function thawCollector(address dataService) external { + authorizedCollectors[msg.sender][dataService].thawEndTimestamp = block.timestamp + revokeCollectorThawingPeriod; + emit ThawCollector(msg.sender, dataService); + } // cancel thawing a data service's collector authorization - function cancelThawCollector(address dataService) external {} + function cancelThawCollector(address dataService) external { + authorizedCollectors[msg.sender][dataService].thawEndTimestamp = 0; + emit CancelThawCollector(msg.sender, dataService); + } // revoke authorized collector - function revokeCollector(address dataService) external {} + function revokeCollector(address dataService) external { + Collector storage collector = authorizedCollectors[msg.sender][dataService]; + + if (collector.thawEndTimestamp == 0) { + revert GraphPaymentsNotThawing(); + } + + if (collector.thawEndTimestamp > block.timestamp) { + revert GraphPaymentsStillThawing(block.timestamp, collector.thawEndTimestamp); + } + + delete authorizedCollectors[msg.sender][dataService]; + emit RevokeCollector(msg.sender, dataService); + } // collect funds from a sender, pay cuts and forward the rest to the receiver function collect( address sender, - address receiver, + address receiver, // serviceProvider uint256 amount, IGraphPayments.PaymentType paymentType, uint256 dataServiceCut - ) external {} + ) external { + Collector storage collector = authorizedCollectors[sender][msg.sender]; + + if (!collector.authorized) { + revert GraphPaymentsCollectorNotAuthorized(sender, msg.sender); + } + + // Collect tokens from GraphEscrow + graphEscrow.collect(sender, receiver, amount); + + // Pay protocol cut + uint256 protocolCut = (amount * protocolPaymentCut) / MAX_PPM; + graphToken.burn(protocolCut); + + // Pay data service cut + uint256 dataServicePayment = (amount * dataServiceCut) / MAX_PPM; + graphToken.transfer(msg.sender, dataServicePayment); + + // Get delegation cut + (address delegatorAddress, uint256 delegatorCut) = graphStaking.getDelegatorCut(receiver, uint256256(paymentType)); + uint256 delegatorPayment = (amount * delegatorCut) / MAX_PPM; + graphToken.transfer(delegatorAddress, delegatorPayment); + + // Pay the rest to the receiver + uint256 receiverPayment = amount - protocolCut - dataServicePayment - delegatorPayment; + graphToken.transfer(receiver, receiverPayment); + } } diff --git a/packages/horizon/contracts/GraphPaymentsStorage.sol b/packages/horizon/contracts/GraphPaymentsStorage.sol index ebf732f70..e649aea0c 100644 --- a/packages/horizon/contracts/GraphPaymentsStorage.sol +++ b/packages/horizon/contracts/GraphPaymentsStorage.sol @@ -5,7 +5,8 @@ import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; contract GraphPaymentsStorageV1Storage { // Authorized collectors - mapping(address sender => mapping(address collector => uint256 thawEndTimestamp)) public authorizedCollectors; + mapping(address sender => mapping(address dataService => IGraphPayments.Collector collector)) + public authorizedCollectors; // The maximum thawing period (in seconds) for removing collector authorization // This is a precautionary measure to avoid inadvertedly locking collectors for too long diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index ebc05ef34..5d5fe4ca9 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -8,6 +8,12 @@ interface IGraphPayments { QueryFees } + // Authorized collector + struct Collector { + bool authorized; + uint256 thawEndTimestamp; + } + // approve a data service to collect funds function approveCollector(address dataService) external; diff --git a/packages/horizon/foundry.toml b/packages/horizon/foundry.toml index 55f7ffd31..3582d5476 100644 --- a/packages/horizon/foundry.toml +++ b/packages/horizon/foundry.toml @@ -3,4 +3,5 @@ src = 'contracts' out = 'build' libs = ['node_modules', 'lib'] test = 'test' -cache_path = 'cache_forge' \ No newline at end of file +cache_path = 'cache_forge' +fs_permissions = [{ access = "read", path = "./"}] \ No newline at end of file diff --git a/packages/horizon/test/GraphDeployments.t.sol b/packages/horizon/test/GraphDeployments.t.sol new file mode 100644 index 000000000..2b4a1af2f --- /dev/null +++ b/packages/horizon/test/GraphDeployments.t.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; + +import { GraphEscrow } from "contracts/GraphEscrow.sol"; +import { GraphPayments } from "contracts/GraphPayments.sol"; +import { IGraphPayments } from "contracts/interfaces/IGraphPayments.sol"; + +import "./mocks/MockHorizonStaking.sol"; +import "./mocks/MockGRTToken.sol"; + +contract GraphDeployments is Test { + Controller public controller; + MockGRTToken public token; + GraphPayments public payments; + GraphEscrow public escrow; + MockHorizonStaking public staking; + + address public governor = address(0x4b39f53A1084b3eC5f2dA8f3B616D11317572efE); + address public deployer = address(0x54705f06556182AeFfFe40386E85D3921c236f78); + + // GraphEscrow parameters + + uint256 public withdrawEscrowThawingPeriod = 60; + + // GraphPayments parameters + + uint256 public revokeCollectorThawingPeriod = 60; + uint256 public protocolPaymentCut = 10000; // 1% + + // Staking parameters + + address public delegatorAddress = address(0xbdC1c9f94A729E47d6877217eC995916EAD457B7); + uint256 public delegatorCut = 50000; // 5% + + // Setup + + constructor() { + setUp(); + } + + function setUp() public { + vm.prank(governor); + controller = new Controller(); + + // GraphPayments preddict address + bytes32 saltPayments = keccak256("GraphPaymentsSalt"); + bytes32 paymentsHash = keccak256(bytes.concat(vm.getCode("GraphPayments.sol:GraphPayments"), abi.encode(address(controller), revokeCollectorThawingPeriod, protocolPaymentCut))); + address predictedPaymentsAddress = vm.computeCreate2Address(saltPayments, paymentsHash, deployer); + + // GraphEscrow preddict address + bytes32 saltEscrow = keccak256("GraphEscrowSalt"); + bytes32 escrowHash = keccak256(bytes.concat(vm.getCode("GraphEscrow.sol:GraphEscrow"), abi.encode(address(controller), withdrawEscrowThawingPeriod))); + address predictedAddressEscrow = vm.computeCreate2Address(saltEscrow, escrowHash, deployer); + + // GraphToken + vm.prank(deployer); + token = new MockGRTToken(); + + // HorizonStaking + vm.prank(deployer); + staking = new MockHorizonStaking(delegatorAddress, delegatorCut); + + // Setup controller + vm.startPrank(governor); + controller.setContractProxy(keccak256("GraphToken"), address(token)); + controller.setContractProxy(keccak256("GraphEscrow"), predictedAddressEscrow); + controller.setContractProxy(keccak256("GraphPayments"), predictedPaymentsAddress); + controller.setContractProxy(keccak256("Staking"), address(staking)); + vm.stopPrank(); + + vm.startPrank(deployer); + payments = new GraphPayments{salt: saltPayments}(address(controller), revokeCollectorThawingPeriod, protocolPaymentCut); + escrow = new GraphEscrow{salt: saltEscrow}(address(controller), withdrawEscrowThawingPeriod); + vm.stopPrank(); + } + + // Tests + + function testDeployments() public view { + assertEq(address(escrow.graphPayments()), address(payments)); + assertEq(address(payments.graphEscrow()), address(escrow)); + } +} \ No newline at end of file diff --git a/packages/horizon/test/GraphEscrow.t.sol b/packages/horizon/test/GraphEscrow.t.sol index 662b30d64..9ba34820d 100644 --- a/packages/horizon/test/GraphEscrow.t.sol +++ b/packages/horizon/test/GraphEscrow.t.sol @@ -18,7 +18,6 @@ contract GraphEscrowTest is Test { address graphPayments = address(0xA1); address governor = address(0xA2); - uint256 initialSupply = 1000000 ether; uint256 withdrawEscrowThawingPeriod = 60; address sender; diff --git a/packages/horizon/test/GraphPayments.t.sol b/packages/horizon/test/GraphPayments.t.sol new file mode 100644 index 000000000..b97b3b2bf --- /dev/null +++ b/packages/horizon/test/GraphPayments.t.sol @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; + +import { GraphEscrow } from "contracts/GraphEscrow.sol"; +import { GraphPayments } from "contracts/GraphPayments.sol"; +import { IGraphPayments } from "contracts/interfaces/IGraphPayments.sol"; + +import "./GraphDeployments.t.sol"; +import "./mocks/MockGRTToken.sol"; + +contract GraphPaymentsTest is Test { + GraphDeployments deployments; + GraphPayments payments; + Controller controller; + MockGRTToken token; + GraphEscrow escrow; + + address governor; + + uint256 revokeCollectorThawingPeriod; + uint256 protocolPaymentCut; + + address delegatorAddress; + uint256 delegatorCut; + + address sender; + address dataService; + + // Setup + + function setUp() public { + deployments = new GraphDeployments(); + + payments = deployments.payments(); + controller = deployments.controller(); + token = deployments.token(); + escrow = deployments.escrow(); + governor = deployments.governor(); + + revokeCollectorThawingPeriod = deployments.revokeCollectorThawingPeriod(); + protocolPaymentCut = deployments.protocolPaymentCut(); + + delegatorAddress = deployments.delegatorAddress(); + delegatorCut = deployments.delegatorCut(); + + sender = address(0xA1); + dataService = address(0xA2); + } + + // Tests + + function testApproveCollector() public { + vm.prank(sender); + payments.approveCollector(dataService); + + (bool authorized, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); + assertEq(authorized, true); + assertEq(thawEndTimestamp, 0); + } + + function testThawCollector() public { + vm.startPrank(sender); + payments.approveCollector(dataService); + payments.thawCollector(dataService); + vm.stopPrank(); + + (bool authorized, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); + assertEq(authorized, true); + assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); + } + + function testCancelThawCollector() public { + vm.startPrank(sender); + payments.approveCollector(dataService); + payments.thawCollector(dataService); + vm.stopPrank(); + + (bool authorized, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); + assertEq(authorized, true); + assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); + + vm.prank(sender); + payments.cancelThawCollector(dataService); + + (authorized, thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); + assertEq(authorized, true); + assertEq(thawEndTimestamp, 0); + } + + function testRevokeCollector() public { + vm.startPrank(sender); + payments.approveCollector(dataService); + payments.thawCollector(dataService); + skip(revokeCollectorThawingPeriod + 1); + payments.revokeCollector(dataService); + vm.stopPrank(); + + (bool authorized,) = payments.authorizedCollectors(sender, dataService); + assertEq(authorized, false); + } + + function testCollect() public { + vm.prank(sender); + payments.approveCollector(dataService); + + address indexer = address(0xA3); + uint256 amount = 1000 ether; + + token.mint(sender, amount); + vm.startPrank(sender); + token.approve(address(escrow), amount); + escrow.deposit(indexer, amount); + vm.stopPrank(); + + vm.startPrank(dataService); + uint256 dataServiceCut = 30000; // 3% + payments.collect(sender, indexer, amount, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); + vm.stopPrank(); + + uint256 indexerBalance = token.balanceOf(indexer); + assertEq(indexerBalance, 910 ether); + + uint256 dataServiceBalance = token.balanceOf(dataService); + assertEq(dataServiceBalance, 30 ether); + + uint256 delegatorBalance = token.balanceOf(delegatorAddress); + assertEq(delegatorBalance, 50 ether); + } +} \ No newline at end of file diff --git a/packages/horizon/test/mocks/MockHorizonStaking.sol b/packages/horizon/test/mocks/MockHorizonStaking.sol new file mode 100644 index 000000000..40eed6a4e --- /dev/null +++ b/packages/horizon/test/mocks/MockHorizonStaking.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { MockGRTToken } from "./MockGRTToken.sol"; + +contract MockHorizonStaking is IHorizonStaking { + address public delegatorAddress; + uint256 public delegatorCut; + + constructor(address _delegatorAddress, uint256 _delegatorCut) { + delegatorAddress = _delegatorAddress; + delegatorCut = _delegatorCut; + } + + function allowVerifier(address verifier, bool allow) external {} + function stake(uint256 tokens) external {} + function provision(uint256 tokens, address verifier, uint256 maxVerifierCut, uint256 thawingPeriod) external {} + function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32 thawRequestId) {} + function deprovision(bytes32 thawRequestId) external {} + function reprovision(bytes32 thawRequestId, bytes32 provisionId) external {} + function withdraw(bytes32 thawRequestId) external {} + function delegate(address serviceProvider, uint256 tokens) external {} + function undelegate( + address serviceProvider, + uint256 tokens, + bytes32[] calldata provisions + ) external returns (bytes32 thawRequestId) {} + function slash(bytes32 provisionId, uint256 tokens, uint256 verifierAmount) external {} + function setForceThawProvisions(bytes32[] calldata provisions) external {} + function getStake(address serviceProvider) external view returns (uint256 tokens) {} + function getIdleStake(address serviceProvider) external view returns (uint256 tokens) {} + function getCapacity(address serviceProvider) external view returns (uint256 tokens) {} + function getTokensAvailable(bytes32 provision) external view returns (uint256 tokens) {} + function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory) {} + function getProvision(bytes32 provision) external view returns (Provision memory) {} + + function getDelegatorCut(address serviceProvider, uint paymentType) external returns (address, uint256) { + return (delegatorAddress, delegatorCut); + } +} \ No newline at end of file From 9b6ed9bcfd20b3707a518921af0dcf0e34ddf245 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 18 Apr 2024 16:46:54 -0300 Subject: [PATCH 012/343] chore: use GraphDeployments on GraphEscrow --- packages/horizon/contracts/GraphPayments.sol | 2 +- packages/horizon/test/GraphEscrow.t.sol | 21 ++++++++++--------- .../horizon/test/mocks/MockHorizonStaking.sol | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/horizon/contracts/GraphPayments.sol b/packages/horizon/contracts/GraphPayments.sol index 93c80c7bc..df51dc6f7 100644 --- a/packages/horizon/contracts/GraphPayments.sol +++ b/packages/horizon/contracts/GraphPayments.sol @@ -100,7 +100,7 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi graphToken.transfer(msg.sender, dataServicePayment); // Get delegation cut - (address delegatorAddress, uint256 delegatorCut) = graphStaking.getDelegatorCut(receiver, uint256256(paymentType)); + (address delegatorAddress, uint256 delegatorCut) = graphStaking.getDelegatorCut(receiver, uint256(paymentType)); uint256 delegatorPayment = (amount * delegatorCut) / MAX_PPM; graphToken.transfer(delegatorAddress, delegatorPayment); diff --git a/packages/horizon/test/GraphEscrow.t.sol b/packages/horizon/test/GraphEscrow.t.sol index 9ba34820d..ae8814971 100644 --- a/packages/horizon/test/GraphEscrow.t.sol +++ b/packages/horizon/test/GraphEscrow.t.sol @@ -8,14 +8,15 @@ import { Controller } from "@graphprotocol/contracts/contracts/governance/Contro import { GraphEscrow } from "contracts/GraphEscrow.sol"; import { GraphPayments } from "contracts/GraphPayments.sol"; +import "./GraphDeployments.t.sol"; import "./mocks/MockGRTToken.sol"; contract GraphEscrowTest is Test { + GraphDeployments deployments; GraphEscrow escrow; - Controller controller; MockGRTToken token; - address graphPayments = address(0xA1); + GraphPayments payments; address governor = address(0xA2); uint256 withdrawEscrowThawingPeriod = 60; @@ -26,16 +27,15 @@ contract GraphEscrowTest is Test { // Setup function setUp() public { - vm.prank(governor); - controller = new Controller(); - token = new MockGRTToken(); + deployments = new GraphDeployments(); - vm.startPrank(governor); - controller.setContractProxy(keccak256("GraphToken"), address(token)); - controller.setContractProxy(keccak256("GraphPayments"), graphPayments); - vm.stopPrank(); + controller = deployments.controller(); + token = deployments.token(); + escrow = deployments.escrow(); + payments = deployments.payments(); - escrow = new GraphEscrow(address(controller), withdrawEscrowThawingPeriod); + governor = deployments.governor(); + withdrawEscrowThawingPeriod = deployments.withdrawEscrowThawingPeriod(); sender = address(0xB1); receiver = address(0xB2); @@ -112,6 +112,7 @@ contract GraphEscrowTest is Test { escrow.deposit(receiver, 1000 ether); vm.stopPrank(); + address graphPayments = address(payments); vm.prank(graphPayments); escrow.collect(sender, receiver, 100 ether); diff --git a/packages/horizon/test/mocks/MockHorizonStaking.sol b/packages/horizon/test/mocks/MockHorizonStaking.sol index 40eed6a4e..0d97d0a72 100644 --- a/packages/horizon/test/mocks/MockHorizonStaking.sol +++ b/packages/horizon/test/mocks/MockHorizonStaking.sol @@ -37,7 +37,7 @@ contract MockHorizonStaking is IHorizonStaking { function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory) {} function getProvision(bytes32 provision) external view returns (Provision memory) {} - function getDelegatorCut(address serviceProvider, uint paymentType) external returns (address, uint256) { + function getDelegatorCut(address serviceProvider, uint256 paymentType) external returns (address, uint256) { return (delegatorAddress, delegatorCut); } } \ No newline at end of file From 76539f7b20f018297bc58f5005567d73201e20fe Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 19 Apr 2024 15:40:16 -0300 Subject: [PATCH 013/343] fix: change staking interface --- .../contracts/contracts/staking/IHorizonStaking.sol | 2 +- packages/horizon/contracts/GraphPayments.sol | 6 ++++-- .../horizon/contracts/interfaces/IGraphPayments.sol | 2 +- packages/horizon/test/GraphDeployments.t.sol | 3 +-- packages/horizon/test/GraphPayments.t.sol | 11 +++-------- packages/horizon/test/mocks/MockHorizonStaking.sol | 8 +++----- 6 files changed, 13 insertions(+), 19 deletions(-) diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol index f6bf1dd87..ed9751696 100644 --- a/packages/contracts/contracts/staking/IHorizonStaking.sol +++ b/packages/contracts/contracts/staking/IHorizonStaking.sol @@ -147,5 +147,5 @@ interface IHorizonStaking { function getProvision(bytes32 provision) external view returns (Provision memory); - function getDelegatorCut(address serviceProvider, uint256256 paymentType) external returns (address, uint256); + function getDelegatorCut(address serviceProvider, uint256 paymentType) external returns (uint256 delegatorCut); } diff --git a/packages/horizon/contracts/GraphPayments.sol b/packages/horizon/contracts/GraphPayments.sol index df51dc6f7..3d9091b4a 100644 --- a/packages/horizon/contracts/GraphPayments.sol +++ b/packages/horizon/contracts/GraphPayments.sol @@ -100,9 +100,11 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi graphToken.transfer(msg.sender, dataServicePayment); // Get delegation cut - (address delegatorAddress, uint256 delegatorCut) = graphStaking.getDelegatorCut(receiver, uint256(paymentType)); + uint256 delegatorCut = graphStaking.getDelegatorCut(receiver, uint256(paymentType)); uint256 delegatorPayment = (amount * delegatorCut) / MAX_PPM; - graphToken.transfer(delegatorAddress, delegatorPayment); + // TODO: Add to delegation pool + // graphStaking.addToDelegationPool(receiver, delegatorPayment); + graphToken.burn(delegatorPayment); // Pay the rest to the receiver uint256 receiverPayment = amount - protocolCut - dataServicePayment - delegatorPayment; diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 5d5fe4ca9..34dc48770 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -8,7 +8,7 @@ interface IGraphPayments { QueryFees } - // Authorized collector + // Collector struct Collector { bool authorized; uint256 thawEndTimestamp; diff --git a/packages/horizon/test/GraphDeployments.t.sol b/packages/horizon/test/GraphDeployments.t.sol index 2b4a1af2f..c0e1abf5a 100644 --- a/packages/horizon/test/GraphDeployments.t.sol +++ b/packages/horizon/test/GraphDeployments.t.sol @@ -33,7 +33,6 @@ contract GraphDeployments is Test { // Staking parameters - address public delegatorAddress = address(0xbdC1c9f94A729E47d6877217eC995916EAD457B7); uint256 public delegatorCut = 50000; // 5% // Setup @@ -62,7 +61,7 @@ contract GraphDeployments is Test { // HorizonStaking vm.prank(deployer); - staking = new MockHorizonStaking(delegatorAddress, delegatorCut); + staking = new MockHorizonStaking(delegatorCut); // Setup controller vm.startPrank(governor); diff --git a/packages/horizon/test/GraphPayments.t.sol b/packages/horizon/test/GraphPayments.t.sol index b97b3b2bf..b96aac1a9 100644 --- a/packages/horizon/test/GraphPayments.t.sol +++ b/packages/horizon/test/GraphPayments.t.sol @@ -24,9 +24,6 @@ contract GraphPaymentsTest is Test { uint256 revokeCollectorThawingPeriod; uint256 protocolPaymentCut; - address delegatorAddress; - uint256 delegatorCut; - address sender; address dataService; @@ -44,9 +41,6 @@ contract GraphPaymentsTest is Test { revokeCollectorThawingPeriod = deployments.revokeCollectorThawingPeriod(); protocolPaymentCut = deployments.protocolPaymentCut(); - delegatorAddress = deployments.delegatorAddress(); - delegatorCut = deployments.delegatorCut(); - sender = address(0xA1); dataService = address(0xA2); } @@ -127,7 +121,8 @@ contract GraphPaymentsTest is Test { uint256 dataServiceBalance = token.balanceOf(dataService); assertEq(dataServiceBalance, 30 ether); - uint256 delegatorBalance = token.balanceOf(delegatorAddress); - assertEq(delegatorBalance, 50 ether); + // TODO: test delegator cut payment + // uint256 delegatorBalance = token.balanceOf(delegationPool); + // assertEq(delegatorBalance, 50 ether); } } \ No newline at end of file diff --git a/packages/horizon/test/mocks/MockHorizonStaking.sol b/packages/horizon/test/mocks/MockHorizonStaking.sol index 0d97d0a72..a71beff98 100644 --- a/packages/horizon/test/mocks/MockHorizonStaking.sol +++ b/packages/horizon/test/mocks/MockHorizonStaking.sol @@ -7,11 +7,9 @@ import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHor import { MockGRTToken } from "./MockGRTToken.sol"; contract MockHorizonStaking is IHorizonStaking { - address public delegatorAddress; uint256 public delegatorCut; - constructor(address _delegatorAddress, uint256 _delegatorCut) { - delegatorAddress = _delegatorAddress; + constructor(uint256 _delegatorCut) { delegatorCut = _delegatorCut; } @@ -37,7 +35,7 @@ contract MockHorizonStaking is IHorizonStaking { function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory) {} function getProvision(bytes32 provision) external view returns (Provision memory) {} - function getDelegatorCut(address serviceProvider, uint256 paymentType) external returns (address, uint256) { - return (delegatorAddress, delegatorCut); + function getDelegatorCut(address serviceProvider, uint256 paymentType) external returns (uint256) { + return delegatorCut; } } \ No newline at end of file From 914f65faf4e487475fedfc9111e13757d73005f4 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 19 Apr 2024 16:15:54 -0300 Subject: [PATCH 014/343] chore: use addToDelegationPool --- .../contracts/staking/IHorizonStaking.sol | 3 ++- packages/horizon/contracts/GraphPayments.sol | 6 ++---- packages/horizon/test/GraphDeployments.t.sol | 4 ++-- packages/horizon/test/GraphPayments.t.sol | 8 +++++--- .../horizon/test/mocks/MockHorizonStaking.sol | 16 ++++++++++------ 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol index ed9751696..d55520db5 100644 --- a/packages/contracts/contracts/staking/IHorizonStaking.sol +++ b/packages/contracts/contracts/staking/IHorizonStaking.sol @@ -147,5 +147,6 @@ interface IHorizonStaking { function getProvision(bytes32 provision) external view returns (Provision memory); - function getDelegatorCut(address serviceProvider, uint256 paymentType) external returns (uint256 delegatorCut); + function getDelegationCut(address serviceProvider, uint8 paymentType) external view returns (uint256 delegationCut); + function addToDelegationPool(address serviceProvider, uint256 tokens) external; } diff --git a/packages/horizon/contracts/GraphPayments.sol b/packages/horizon/contracts/GraphPayments.sol index 3d9091b4a..553f5b7ce 100644 --- a/packages/horizon/contracts/GraphPayments.sol +++ b/packages/horizon/contracts/GraphPayments.sol @@ -100,11 +100,9 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi graphToken.transfer(msg.sender, dataServicePayment); // Get delegation cut - uint256 delegatorCut = graphStaking.getDelegatorCut(receiver, uint256(paymentType)); + uint256 delegatorCut = graphStaking.getDelegationCut(receiver, uint8(paymentType)); uint256 delegatorPayment = (amount * delegatorCut) / MAX_PPM; - // TODO: Add to delegation pool - // graphStaking.addToDelegationPool(receiver, delegatorPayment); - graphToken.burn(delegatorPayment); + graphStaking.addToDelegationPool(receiver, delegatorPayment); // Pay the rest to the receiver uint256 receiverPayment = amount - protocolCut - dataServicePayment - delegatorPayment; diff --git a/packages/horizon/test/GraphDeployments.t.sol b/packages/horizon/test/GraphDeployments.t.sol index c0e1abf5a..490445f5b 100644 --- a/packages/horizon/test/GraphDeployments.t.sol +++ b/packages/horizon/test/GraphDeployments.t.sol @@ -33,7 +33,7 @@ contract GraphDeployments is Test { // Staking parameters - uint256 public delegatorCut = 50000; // 5% + uint256 public delegationCut = 50000; // 5% // Setup @@ -61,7 +61,7 @@ contract GraphDeployments is Test { // HorizonStaking vm.prank(deployer); - staking = new MockHorizonStaking(delegatorCut); + staking = new MockHorizonStaking(delegationCut); // Setup controller vm.startPrank(governor); diff --git a/packages/horizon/test/GraphPayments.t.sol b/packages/horizon/test/GraphPayments.t.sol index b96aac1a9..ea9585db0 100644 --- a/packages/horizon/test/GraphPayments.t.sol +++ b/packages/horizon/test/GraphPayments.t.sol @@ -10,6 +10,7 @@ import { GraphPayments } from "contracts/GraphPayments.sol"; import { IGraphPayments } from "contracts/interfaces/IGraphPayments.sol"; import "./GraphDeployments.t.sol"; +import "./mocks/MockHorizonStaking.sol"; import "./mocks/MockGRTToken.sol"; contract GraphPaymentsTest is Test { @@ -18,6 +19,7 @@ contract GraphPaymentsTest is Test { Controller controller; MockGRTToken token; GraphEscrow escrow; + MockHorizonStaking staking; address governor; @@ -36,6 +38,7 @@ contract GraphPaymentsTest is Test { controller = deployments.controller(); token = deployments.token(); escrow = deployments.escrow(); + staking = deployments.staking(); governor = deployments.governor(); revokeCollectorThawingPeriod = deployments.revokeCollectorThawingPeriod(); @@ -121,8 +124,7 @@ contract GraphPaymentsTest is Test { uint256 dataServiceBalance = token.balanceOf(dataService); assertEq(dataServiceBalance, 30 ether); - // TODO: test delegator cut payment - // uint256 delegatorBalance = token.balanceOf(delegationPool); - // assertEq(delegatorBalance, 50 ether); + uint256 delegatorBalance = staking.delegationPool(indexer); + assertEq(delegatorBalance, 50 ether); } } \ No newline at end of file diff --git a/packages/horizon/test/mocks/MockHorizonStaking.sol b/packages/horizon/test/mocks/MockHorizonStaking.sol index a71beff98..a31cc8798 100644 --- a/packages/horizon/test/mocks/MockHorizonStaking.sol +++ b/packages/horizon/test/mocks/MockHorizonStaking.sol @@ -4,13 +4,13 @@ pragma solidity ^0.8.24; import "forge-std/Test.sol"; import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; -import { MockGRTToken } from "./MockGRTToken.sol"; contract MockHorizonStaking is IHorizonStaking { - uint256 public delegatorCut; + uint256 public delegationCut; + mapping(address serviceProvider => uint256 tokens) public delegationPool; - constructor(uint256 _delegatorCut) { - delegatorCut = _delegatorCut; + constructor(uint256 _delegationCut) { + delegationCut = _delegationCut; } function allowVerifier(address verifier, bool allow) external {} @@ -35,7 +35,11 @@ contract MockHorizonStaking is IHorizonStaking { function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory) {} function getProvision(bytes32 provision) external view returns (Provision memory) {} - function getDelegatorCut(address serviceProvider, uint256 paymentType) external returns (uint256) { - return delegatorCut; + function getDelegationCut(address serviceProvider, uint8 paymentType) external view returns (uint256) { + return delegationCut; + } + + function addToDelegationPool(address serviceProvider, uint256 tokens) external { + delegationPool[serviceProvider] += tokens; } } \ No newline at end of file From 575faec3008230ccf744178550b0f64b6591cb22 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 19 Apr 2024 16:34:09 -0300 Subject: [PATCH 015/343] chore: move files to folders --- packages/horizon/contracts/{ => escrow}/GraphEscrow.sol | 6 +++--- .../horizon/contracts/{ => escrow}/GraphEscrowStorage.sol | 2 +- packages/horizon/contracts/{ => payments}/GraphPayments.sol | 6 +++--- .../contracts/{ => payments}/GraphPaymentsStorage.sol | 2 +- packages/horizon/test/GraphDeployments.t.sol | 4 ++-- packages/horizon/test/GraphEscrow.t.sol | 4 ++-- packages/horizon/test/GraphPayments.t.sol | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) rename packages/horizon/contracts/{ => escrow}/GraphEscrow.sol (96%) rename packages/horizon/contracts/{ => escrow}/GraphEscrowStorage.sol (92%) rename packages/horizon/contracts/{ => payments}/GraphPayments.sol (95%) rename packages/horizon/contracts/{ => payments}/GraphPaymentsStorage.sol (91%) diff --git a/packages/horizon/contracts/GraphEscrow.sol b/packages/horizon/contracts/escrow/GraphEscrow.sol similarity index 96% rename from packages/horizon/contracts/GraphEscrow.sol rename to packages/horizon/contracts/escrow/GraphEscrow.sol index afb23d97b..dd4d2e9c3 100644 --- a/packages/horizon/contracts/GraphEscrow.sol +++ b/packages/horizon/contracts/escrow/GraphEscrow.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.24; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; -import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; -import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; -import { GraphDirectory } from "./GraphDirectory.sol"; +import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { GraphDirectory } from "../GraphDirectory.sol"; import { GraphEscrowStorageV1Storage } from "./GraphEscrowStorage.sol"; contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirectory { diff --git a/packages/horizon/contracts/GraphEscrowStorage.sol b/packages/horizon/contracts/escrow/GraphEscrowStorage.sol similarity index 92% rename from packages/horizon/contracts/GraphEscrowStorage.sol rename to packages/horizon/contracts/escrow/GraphEscrowStorage.sol index 472915481..1f5657e18 100644 --- a/packages/horizon/contracts/GraphEscrowStorage.sol +++ b/packages/horizon/contracts/escrow/GraphEscrowStorage.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; +import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; contract GraphEscrowStorageV1Storage { // Stores how much escrow each sender has deposited for each receiver, as well as thawing information diff --git a/packages/horizon/contracts/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol similarity index 95% rename from packages/horizon/contracts/GraphPayments.sol rename to packages/horizon/contracts/payments/GraphPayments.sol index 553f5b7ce..5213e3e17 100644 --- a/packages/horizon/contracts/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -4,9 +4,9 @@ pragma solidity ^0.8.24; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; -import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; -import { IGraphEscrow } from "./interfaces/IGraphEscrow.sol"; -import { GraphDirectory } from "./GraphDirectory.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; +import { GraphDirectory } from "../GraphDirectory.sol"; import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDirectory { diff --git a/packages/horizon/contracts/GraphPaymentsStorage.sol b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol similarity index 91% rename from packages/horizon/contracts/GraphPaymentsStorage.sol rename to packages/horizon/contracts/payments/GraphPaymentsStorage.sol index e649aea0c..4c6051c43 100644 --- a/packages/horizon/contracts/GraphPaymentsStorage.sol +++ b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; contract GraphPaymentsStorageV1Storage { // Authorized collectors diff --git a/packages/horizon/test/GraphDeployments.t.sol b/packages/horizon/test/GraphDeployments.t.sol index 490445f5b..159035101 100644 --- a/packages/horizon/test/GraphDeployments.t.sol +++ b/packages/horizon/test/GraphDeployments.t.sol @@ -5,8 +5,8 @@ import "forge-std/Test.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; -import { GraphEscrow } from "contracts/GraphEscrow.sol"; -import { GraphPayments } from "contracts/GraphPayments.sol"; +import { GraphEscrow } from "contracts/escrow/GraphEscrow.sol"; +import { GraphPayments } from "contracts/payments/GraphPayments.sol"; import { IGraphPayments } from "contracts/interfaces/IGraphPayments.sol"; import "./mocks/MockHorizonStaking.sol"; diff --git a/packages/horizon/test/GraphEscrow.t.sol b/packages/horizon/test/GraphEscrow.t.sol index ae8814971..5a2f66976 100644 --- a/packages/horizon/test/GraphEscrow.t.sol +++ b/packages/horizon/test/GraphEscrow.t.sol @@ -5,8 +5,8 @@ import "forge-std/Test.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; -import { GraphEscrow } from "contracts/GraphEscrow.sol"; -import { GraphPayments } from "contracts/GraphPayments.sol"; +import { GraphEscrow } from "contracts/escrow/GraphEscrow.sol"; +import { GraphPayments } from "contracts/payments/GraphPayments.sol"; import "./GraphDeployments.t.sol"; import "./mocks/MockGRTToken.sol"; diff --git a/packages/horizon/test/GraphPayments.t.sol b/packages/horizon/test/GraphPayments.t.sol index ea9585db0..a3c77d9c0 100644 --- a/packages/horizon/test/GraphPayments.t.sol +++ b/packages/horizon/test/GraphPayments.t.sol @@ -5,8 +5,8 @@ import "forge-std/Test.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; -import { GraphEscrow } from "contracts/GraphEscrow.sol"; -import { GraphPayments } from "contracts/GraphPayments.sol"; +import { GraphEscrow } from "contracts/escrow/GraphEscrow.sol"; +import { GraphPayments } from "contracts/payments/GraphPayments.sol"; import { IGraphPayments } from "contracts/interfaces/IGraphPayments.sol"; import "./GraphDeployments.t.sol"; From e0e93a02f00187f09c6345a9021e31680174a29b Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 19 Apr 2024 17:14:58 -0300 Subject: [PATCH 016/343] chore: add unit tests --- .../contracts/interfaces/IGraphPayments.sol | 3 +- .../contracts/payments/GraphPayments.sol | 15 ++- packages/horizon/test/GraphEscrow.t.sol | 93 +++++++++++++++++++ packages/horizon/test/GraphPayments.t.sol | 91 +++++++++++++++--- 4 files changed, 189 insertions(+), 13 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 34dc48770..29802301b 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -11,11 +11,12 @@ interface IGraphPayments { // Collector struct Collector { bool authorized; + uint256 amount; uint256 thawEndTimestamp; } // approve a data service to collect funds - function approveCollector(address dataService) external; + function approveCollector(address dataService, uint256 amount) external; // thaw a data service's collector authorization function thawCollector(address dataService) external; diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 5213e3e17..67e321fb2 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -15,6 +15,7 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi error GraphPaymentsNotThawing(); error GraphPaymentsStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); error GraphPaymentsCollectorNotAuthorized(address sender, address dataService); + error GraphPaymentsCollectorInsufficientAmount(uint256 available, uint256 required); // -- Events -- @@ -41,8 +42,9 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi } // approve a data service to collect funds - function approveCollector(address dataService) external { + function approveCollector(address dataService, uint256 amount) external { authorizedCollectors[msg.sender][dataService].authorized = true; + authorizedCollectors[msg.sender][dataService].amount = amount; emit AuthorizedCollector(msg.sender, dataService); } @@ -54,6 +56,10 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi // cancel thawing a data service's collector authorization function cancelThawCollector(address dataService) external { + if (authorizedCollectors[msg.sender][dataService].thawEndTimestamp == 0) { + revert GraphPaymentsNotThawing(); + } + authorizedCollectors[msg.sender][dataService].thawEndTimestamp = 0; emit CancelThawCollector(msg.sender, dataService); } @@ -88,6 +94,13 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi revert GraphPaymentsCollectorNotAuthorized(sender, msg.sender); } + if (collector.amount < amount) { + revert GraphPaymentsCollectorInsufficientAmount(collector.amount, amount); + } + + // Reduce amount from approved collector + collector.amount -= amount; + // Collect tokens from GraphEscrow graphEscrow.collect(sender, receiver, amount); diff --git a/packages/horizon/test/GraphEscrow.t.sol b/packages/horizon/test/GraphEscrow.t.sol index 5a2f66976..356d4571c 100644 --- a/packages/horizon/test/GraphEscrow.t.sol +++ b/packages/horizon/test/GraphEscrow.t.sol @@ -41,6 +41,8 @@ contract GraphEscrowTest is Test { receiver = address(0xB2); } + // Deposit tests + function testDeposit() public { token.mint(sender, 10000 ether); vm.startPrank(sender); @@ -75,6 +77,27 @@ contract GraphEscrowTest is Test { assertEq(otherReceiverEscrowBalance, 2000 ether); } + function testDepositMany_RevertWhen_InputsLengthMismatch() public { + address otherReceiver = address(0xB3); + address[] memory receivers = new address[](2); + receivers[0] = receiver; + receivers[1] = otherReceiver; + + uint256[] memory amounts = new uint256[](1); + amounts[0] = 1000 ether; + + token.mint(sender, 1000 ether); + token.approve(address(escrow), 1000 ether); + + // revert + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInputsLengthMismatch()"); + vm.expectRevert(expectedError); + vm.prank(sender); + escrow.depositMany(receivers, amounts); + } + + // Thaw tests + function testThaw() public { token.mint(sender, 1000 ether); vm.startPrank(sender); @@ -88,6 +111,34 @@ contract GraphEscrowTest is Test { assertEq(thawEndTimestamp, block.timestamp + withdrawEscrowThawingPeriod); } + function testThaw_RevertWhen_InsufficientThawAmount() public { + token.mint(sender, 1000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 1000 ether); + + // revert + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientThawAmount()"); + vm.expectRevert(expectedError); + escrow.thaw(receiver, 0); + vm.stopPrank(); + } + + function testThaw_RevertWhen_InsufficientAmount() public { + token.mint(sender, 1000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 1000 ether); + + // revert + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", 1000 ether, 2000 ether); + vm.expectRevert(expectedError); + escrow.thaw(receiver, 2000 ether); + vm.stopPrank(); + } + + // Withdraw tests + function testWithdraw() public { token.mint(sender, 1000 ether); vm.startPrank(sender); @@ -105,6 +156,35 @@ contract GraphEscrowTest is Test { assertEq(receiverEscrowBalance, 900 ether); } + function testWithdraw_RevertWhen_NotThawing() public { + token.mint(sender, 1000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 1000 ether); + + // revert + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); + vm.expectRevert(expectedError); + escrow.withdraw(receiver); + vm.stopPrank(); + } + + function testWithdraw_RevertWhen_StillThawing() public { + token.mint(sender, 1000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 1000 ether); + escrow.thaw(receiver, 100 ether); + + // revert + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + withdrawEscrowThawingPeriod); + vm.expectRevert(expectedError); + escrow.withdraw(receiver); + vm.stopPrank(); + } + + // Collect tests + function testCollect() public { token.mint(sender, 1000 ether); vm.startPrank(sender); @@ -121,4 +201,17 @@ contract GraphEscrowTest is Test { uint256 graphPaymentsBalance = token.balanceOf(graphPayments); assertEq(graphPaymentsBalance, 100 ether); } + + function testCollect_RevertWhen_NotGraphPayments() public { + token.mint(sender, 1000 ether); + vm.startPrank(sender); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 1000 ether); + vm.stopPrank(); + + // revert + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotGraphPayments()"); + vm.expectRevert(expectedError); + escrow.collect(sender, receiver, 100 ether); + } } \ No newline at end of file diff --git a/packages/horizon/test/GraphPayments.t.sol b/packages/horizon/test/GraphPayments.t.sol index a3c77d9c0..ec85dd9c3 100644 --- a/packages/horizon/test/GraphPayments.t.sol +++ b/packages/horizon/test/GraphPayments.t.sol @@ -48,61 +48,97 @@ contract GraphPaymentsTest is Test { dataService = address(0xA2); } - // Tests + // Approve tests function testApproveCollector() public { vm.prank(sender); - payments.approveCollector(dataService); + payments.approveCollector(dataService, 1000 ether); - (bool authorized, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); + (bool authorized,, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); assertEq(authorized, true); assertEq(thawEndTimestamp, 0); } + // Thaw tests + function testThawCollector() public { vm.startPrank(sender); - payments.approveCollector(dataService); + payments.approveCollector(dataService, 1000 ether); payments.thawCollector(dataService); vm.stopPrank(); - (bool authorized, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); + (bool authorized,, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); assertEq(authorized, true); assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); } + // Cancel thaw tests + function testCancelThawCollector() public { vm.startPrank(sender); - payments.approveCollector(dataService); + payments.approveCollector(dataService, 1000 ether); payments.thawCollector(dataService); vm.stopPrank(); - (bool authorized, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); + (bool authorized,, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); assertEq(authorized, true); assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); vm.prank(sender); payments.cancelThawCollector(dataService); - (authorized, thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); + (authorized,, thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); assertEq(authorized, true); assertEq(thawEndTimestamp, 0); } + function testCancel_RevertWhen_CollectorIsNotThawing() public { + vm.startPrank(sender); + payments.approveCollector(dataService, 1000 ether); + bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsNotThawing()"); + vm.expectRevert(expectedError); + payments.cancelThawCollector(dataService); + vm.stopPrank(); + } + + // Revoke tests + function testRevokeCollector() public { vm.startPrank(sender); - payments.approveCollector(dataService); + payments.approveCollector(dataService, 1000 ether); payments.thawCollector(dataService); skip(revokeCollectorThawingPeriod + 1); payments.revokeCollector(dataService); vm.stopPrank(); - (bool authorized,) = payments.authorizedCollectors(sender, dataService); + (bool authorized,,) = payments.authorizedCollectors(sender, dataService); assertEq(authorized, false); } + function testRevoke_RevertWhen_CollectorIsNotThawing() public { + vm.startPrank(sender); + payments.approveCollector(dataService, 1000 ether); + bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsNotThawing()"); + vm.expectRevert(expectedError); + payments.revokeCollector(dataService); + vm.stopPrank(); + } + + function testRevoke_RevertWhen_CollectorIsStillThawing() public { + vm.startPrank(sender); + payments.approveCollector(dataService, 1000 ether); + payments.thawCollector(dataService); + bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsStillThawing(uint256,uint256)", block.timestamp, block.timestamp + revokeCollectorThawingPeriod); + vm.expectRevert(expectedError); + payments.revokeCollector(dataService); + vm.stopPrank(); + } + + // Collect tests + function testCollect() public { vm.prank(sender); - payments.approveCollector(dataService); + payments.approveCollector(dataService, 1000 ether); address indexer = address(0xA3); uint256 amount = 1000 ether; @@ -127,4 +163,37 @@ contract GraphPaymentsTest is Test { uint256 delegatorBalance = staking.delegationPool(indexer); assertEq(delegatorBalance, 50 ether); } + + function testCollect_RevertWhen_CollectorNotAuthorized() public { + address indexer = address(0xA3); + uint256 amount = 1000 ether; + + vm.startPrank(dataService); + uint256 dataServiceCut = 30000; // 3% + bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsCollectorNotAuthorized(address,address)", sender, dataService); + vm.expectRevert(expectedError); + payments.collect(sender, indexer, amount, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); + vm.stopPrank(); + } + + function testCollect_RevertWhen_CollectorHasInsufficientAmount() public { + vm.prank(sender); + payments.approveCollector(dataService, 100 ether); + + address indexer = address(0xA3); + uint256 amount = 1000 ether; + + token.mint(sender, amount); + vm.startPrank(sender); + token.approve(address(escrow), amount); + escrow.deposit(indexer, amount); + vm.stopPrank(); + + vm.startPrank(dataService); + uint256 dataServiceCut = 30000; // 3% + bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsCollectorInsufficientAmount(uint256,uint256)", 100 ether, 1000 ether); + vm.expectRevert(expectedError); + payments.collect(sender, indexer, 1000 ether, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); + vm.stopPrank(); + } } \ No newline at end of file From 2b7cff58a264bbfd41866e2920320219bc2afe28 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 8 May 2024 18:41:00 -0300 Subject: [PATCH 017/343] chore: move Collector functionality to Escrow, now Escrow calls Payments --- .../horizon/contracts/escrow/GraphEscrow.sol | 107 ++++++++++--- .../contracts/escrow/GraphEscrowStorage.sol | 7 + .../contracts/interfaces/IGraphEscrow.sol | 18 ++- .../contracts/interfaces/IGraphPayments.sol | 23 +-- .../contracts/payments/GraphPayments.sol | 87 ++--------- .../payments/GraphPaymentsStorage.sol | 11 -- .../horizon/contracts/utils/TokenUtils.sol | 42 ++++++ packages/horizon/test/GraphDeployments.t.sol | 8 +- packages/horizon/test/GraphEscrow.t.sol | 139 +++++++++++++++-- packages/horizon/test/GraphPayments.t.sol | 140 +----------------- packages/subgraph-service/lib/forge-std | 1 - 11 files changed, 303 insertions(+), 280 deletions(-) create mode 100644 packages/horizon/contracts/utils/TokenUtils.sol delete mode 160000 packages/subgraph-service/lib/forge-std diff --git a/packages/horizon/contracts/escrow/GraphEscrow.sol b/packages/horizon/contracts/escrow/GraphEscrow.sol index dd4d2e9c3..a1f5c38f0 100644 --- a/packages/horizon/contracts/escrow/GraphEscrow.sol +++ b/packages/horizon/contracts/escrow/GraphEscrow.sol @@ -1,12 +1,11 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; - import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { GraphDirectory } from "../GraphDirectory.sol"; import { GraphEscrowStorageV1Storage } from "./GraphEscrowStorage.sol"; +import { TokenUtils } from "../utils/TokenUtils.sol"; contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirectory { // -- Errors -- @@ -17,9 +16,16 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector error GraphEscrowInsufficientAmount(uint256 available, uint256 required); error GraphEscrowNotThawing(); error GraphEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); + error GraphEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); + error GraphEscrowCollectorNotAuthorized(address sender, address dataService); + error GraphEscrowCollectorInsufficientAmount(uint256 available, uint256 required); // -- Events -- + event AuthorizedCollector(address indexed sender, address indexed dataService); + event ThawCollector(address indexed sender, address indexed dataService); + event CancelThawCollector(address indexed sender, address indexed dataService); + event RevokeCollector(address indexed sender, address indexed dataService); event Deposit(address indexed sender, address indexed receiver, uint256 amount); event CancelThaw(address indexed sender, address indexed receiver); event Thaw( @@ -32,25 +38,68 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector event Withdraw(address indexed sender, address indexed receiver, uint256 amount); event Collect(address indexed sender, address indexed receiver, uint256 amount); - // -- Modifier -- + // -- Constructor -- - modifier onlyGraphPayments() { - if (msg.sender != address(graphPayments)) { - revert GraphEscrowNotGraphPayments(); + constructor( + address _controller, + uint256 _revokeCollectorThawingPeriod, + uint256 _withdrawEscrowThawingPeriod + ) GraphDirectory(_controller) { + if (_revokeCollectorThawingPeriod > MAX_THAWING_PERIOD) { + revert GraphEscrowThawingPeriodTooLong(_revokeCollectorThawingPeriod, MAX_THAWING_PERIOD); } - _; - } - // -- Constructor -- + if (_withdrawEscrowThawingPeriod > MAX_THAWING_PERIOD) { + revert GraphEscrowThawingPeriodTooLong(_withdrawEscrowThawingPeriod, MAX_THAWING_PERIOD); + } - constructor(address _controller, uint256 _withdrawEscrowThawingPeriod) GraphDirectory(_controller) { + revokeCollectorThawingPeriod = _revokeCollectorThawingPeriod; withdrawEscrowThawingPeriod = _withdrawEscrowThawingPeriod; } + // approve a data service to collect funds + function approveCollector(address dataService, uint256 amount) external { + authorizedCollectors[msg.sender][dataService].authorized = true; + authorizedCollectors[msg.sender][dataService].amount = amount; + emit AuthorizedCollector(msg.sender, dataService); + } + + // thaw a data service's collector authorization + function thawCollector(address dataService) external { + authorizedCollectors[msg.sender][dataService].thawEndTimestamp = block.timestamp + revokeCollectorThawingPeriod; + emit ThawCollector(msg.sender, dataService); + } + + // cancel thawing a data service's collector authorization + function cancelThawCollector(address dataService) external { + if (authorizedCollectors[msg.sender][dataService].thawEndTimestamp == 0) { + revert GraphEscrowNotThawing(); + } + + authorizedCollectors[msg.sender][dataService].thawEndTimestamp = 0; + emit CancelThawCollector(msg.sender, dataService); + } + + // revoke authorized collector + function revokeCollector(address dataService) external { + Collector storage collector = authorizedCollectors[msg.sender][dataService]; + + if (collector.thawEndTimestamp == 0) { + revert GraphEscrowNotThawing(); + } + + if (collector.thawEndTimestamp > block.timestamp) { + revert GraphEscrowStillThawing(block.timestamp, collector.thawEndTimestamp); + } + + delete authorizedCollectors[msg.sender][dataService]; + emit RevokeCollector(msg.sender, dataService); + } + // Deposit funds into the escrow for a receiver function deposit(address receiver, uint256 amount) external { escrowAccounts[msg.sender][receiver].balance += amount; - graphToken.transferFrom(msg.sender, address(this), amount); + TokenUtils.pullTokens(graphToken, msg.sender, amount); emit Deposit(msg.sender, receiver, amount); } @@ -70,7 +119,7 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector emit Deposit(msg.sender, receiver, amount); } - graphToken.transferFrom(msg.sender, address(this), totalAmount); + TokenUtils.pullTokens(graphToken, msg.sender, totalAmount); } // Requests to thaw a specific amount of escrow from a receiver's escrow account @@ -122,20 +171,42 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector account.balance -= amount; // Reduce the balance by the withdrawn amount (no underflow risk) account.amountThawing = 0; account.thawEndTimestamp = 0; - graphToken.transfer(msg.sender, amount); + TokenUtils.pushTokens(graphToken, msg.sender, amount); emit Withdraw(msg.sender, receiver, amount); } // Collect from escrow (up to amount available in escrow) for a receiver using sender's deposit - function collect(address sender, address receiver, uint256 amount) external onlyGraphPayments { + function collect( + address sender, + address receiver, // serviceProvider + address dataService, + uint256 amount, + IGraphPayments.PaymentType paymentType, + uint256 tokensDataService + ) external { + // Check if collector is authorized and has enough funds + Collector storage collector = authorizedCollectors[sender][msg.sender]; + + if (!collector.authorized) { + revert GraphEscrowCollectorNotAuthorized(sender, msg.sender); + } + + if (collector.amount < amount) { + revert GraphEscrowCollectorInsufficientAmount(collector.amount, amount); + } + + // Reduce amount from approved collector + collector.amount -= amount; + + // Collect tokens from GraphEscrow up to amount available EscrowAccount storage account = escrowAccounts[sender][receiver]; uint256 available = account.balance - account.amountThawing; - - // TODO: should we revert if not enough funds are available? uint256 collectAmount = amount > available ? available : amount; - account.balance -= collectAmount; - graphToken.transfer(msg.sender, collectAmount); emit Collect(sender, receiver, collectAmount); + + // Approve tokens so GraphPayments can pull them + graphToken.approve(address(graphPayments), collectAmount); + graphPayments.collect(receiver, dataService, collectAmount, paymentType, tokensDataService); } } diff --git a/packages/horizon/contracts/escrow/GraphEscrowStorage.sol b/packages/horizon/contracts/escrow/GraphEscrowStorage.sol index 1f5657e18..158b7fae0 100644 --- a/packages/horizon/contracts/escrow/GraphEscrowStorage.sol +++ b/packages/horizon/contracts/escrow/GraphEscrowStorage.sol @@ -4,6 +4,10 @@ pragma solidity ^0.8.24; import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; contract GraphEscrowStorageV1Storage { + // Authorized collectors + mapping(address sender => mapping(address dataService => IGraphEscrow.Collector collector)) + public authorizedCollectors; + // Stores how much escrow each sender has deposited for each receiver, as well as thawing information mapping(address sender => mapping(address receiver => IGraphEscrow.EscrowAccount escrowAccount)) public escrowAccounts; @@ -12,6 +16,9 @@ contract GraphEscrowStorageV1Storage { // This is a precautionary measure to avoid inadvertedly locking funds for too long uint256 public constant MAX_THAWING_PERIOD = 90 days; + // Thawing period for authorized collectors + uint256 public immutable revokeCollectorThawingPeriod; + // The duration (in seconds) in which escrow funds are thawing before they can be withdrawn uint256 public immutable withdrawEscrowThawingPeriod; } diff --git a/packages/horizon/contracts/interfaces/IGraphEscrow.sol b/packages/horizon/contracts/interfaces/IGraphEscrow.sol index 8e6ca58fd..841e18eb8 100644 --- a/packages/horizon/contracts/interfaces/IGraphEscrow.sol +++ b/packages/horizon/contracts/interfaces/IGraphEscrow.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; +import { IGraphPayments } from "./IGraphPayments.sol"; + interface IGraphEscrow { struct EscrowAccount { uint256 balance; // Total escrow balance for a sender-receiver pair @@ -8,6 +10,13 @@ interface IGraphEscrow { uint256 thawEndTimestamp; // Timestamp at which thawing period ends (zero if not thawing) } + // Collector + struct Collector { + bool authorized; + uint256 amount; + uint256 thawEndTimestamp; + } + // Deposit funds into the escrow for a receiver function deposit(address receiver, uint256 amount) external; @@ -21,5 +30,12 @@ interface IGraphEscrow { function withdraw(address receiver) external; // Collect from escrow (up to amount available in escrow) for a receiver using sender's deposit - function collect(address sender, address receiver, uint256 amount) external; + function collect( + address sender, + address receiver, + address dataService, + uint256 amount, + IGraphPayments.PaymentType paymentType, + uint256 tokensDataService + ) external; } diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 29802301b..b3af02b20 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -8,31 +8,12 @@ interface IGraphPayments { QueryFees } - // Collector - struct Collector { - bool authorized; - uint256 amount; - uint256 thawEndTimestamp; - } - - // approve a data service to collect funds - function approveCollector(address dataService, uint256 amount) external; - - // thaw a data service's collector authorization - function thawCollector(address dataService) external; - - // cancel thawing a data service's collector authorization - function cancelThawCollector(address dataService) external; - - // revoke authorized collector - function revokeCollector(address dataService) external; - // collect funds from a sender, pay cuts and forward the rest to the receiver function collect( - address sender, address receiver, + address dataService, uint256 amount, PaymentType paymentType, - uint256 dataServiceCut + uint256 tokensDataService ) external; } diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 67e321fb2..dc8809630 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -1,13 +1,10 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; -import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; - import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; -import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; import { GraphDirectory } from "../GraphDirectory.sol"; import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; +import { TokenUtils } from "../utils/TokenUtils.sol"; contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDirectory { // -- Errors -- @@ -19,11 +16,6 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi // -- Events -- - event AuthorizedCollector(address indexed sender, address indexed dataService); - event ThawCollector(address indexed sender, address indexed dataService); - event CancelThawCollector(address indexed sender, address indexed dataService); - event RevokeCollector(address indexed sender, address indexed dataService); - // -- Modifier -- // -- Parameters -- @@ -32,85 +24,26 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi // -- Constructor -- - constructor( - address _controller, - uint256 _revokeCollectorThawingPeriod, - uint256 _protocolPaymentCut - ) GraphDirectory(_controller) { - revokeCollectorThawingPeriod = _revokeCollectorThawingPeriod; + constructor(address _controller, uint256 _protocolPaymentCut) GraphDirectory(_controller) { protocolPaymentCut = _protocolPaymentCut; } - // approve a data service to collect funds - function approveCollector(address dataService, uint256 amount) external { - authorizedCollectors[msg.sender][dataService].authorized = true; - authorizedCollectors[msg.sender][dataService].amount = amount; - emit AuthorizedCollector(msg.sender, dataService); - } - - // thaw a data service's collector authorization - function thawCollector(address dataService) external { - authorizedCollectors[msg.sender][dataService].thawEndTimestamp = block.timestamp + revokeCollectorThawingPeriod; - emit ThawCollector(msg.sender, dataService); - } - - // cancel thawing a data service's collector authorization - function cancelThawCollector(address dataService) external { - if (authorizedCollectors[msg.sender][dataService].thawEndTimestamp == 0) { - revert GraphPaymentsNotThawing(); - } - - authorizedCollectors[msg.sender][dataService].thawEndTimestamp = 0; - emit CancelThawCollector(msg.sender, dataService); - } - - // revoke authorized collector - function revokeCollector(address dataService) external { - Collector storage collector = authorizedCollectors[msg.sender][dataService]; - - if (collector.thawEndTimestamp == 0) { - revert GraphPaymentsNotThawing(); - } - - if (collector.thawEndTimestamp > block.timestamp) { - revert GraphPaymentsStillThawing(block.timestamp, collector.thawEndTimestamp); - } - - delete authorizedCollectors[msg.sender][dataService]; - emit RevokeCollector(msg.sender, dataService); - } - // collect funds from a sender, pay cuts and forward the rest to the receiver function collect( - address sender, address receiver, // serviceProvider + address dataService, uint256 amount, IGraphPayments.PaymentType paymentType, - uint256 dataServiceCut + uint256 tokensDataService ) external { - Collector storage collector = authorizedCollectors[sender][msg.sender]; - - if (!collector.authorized) { - revert GraphPaymentsCollectorNotAuthorized(sender, msg.sender); - } - - if (collector.amount < amount) { - revert GraphPaymentsCollectorInsufficientAmount(collector.amount, amount); - } - - // Reduce amount from approved collector - collector.amount -= amount; - - // Collect tokens from GraphEscrow - graphEscrow.collect(sender, receiver, amount); + TokenUtils.pullTokens(graphToken, msg.sender, amount); // Pay protocol cut - uint256 protocolCut = (amount * protocolPaymentCut) / MAX_PPM; - graphToken.burn(protocolCut); + uint256 tokensProtocol = (amount * protocolPaymentCut) / MAX_PPM; + TokenUtils.burnTokens(graphToken, tokensProtocol); // Pay data service cut - uint256 dataServicePayment = (amount * dataServiceCut) / MAX_PPM; - graphToken.transfer(msg.sender, dataServicePayment); + TokenUtils.pushTokens(graphToken, dataService, tokensDataService); // Get delegation cut uint256 delegatorCut = graphStaking.getDelegationCut(receiver, uint8(paymentType)); @@ -118,7 +51,7 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi graphStaking.addToDelegationPool(receiver, delegatorPayment); // Pay the rest to the receiver - uint256 receiverPayment = amount - protocolCut - dataServicePayment - delegatorPayment; - graphToken.transfer(receiver, receiverPayment); + uint256 receiverPayment = amount - tokensProtocol - tokensDataService - delegatorPayment; + TokenUtils.pushTokens(graphToken, receiver, receiverPayment); } } diff --git a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol index 4c6051c43..7d4c1c338 100644 --- a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol +++ b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol @@ -4,17 +4,6 @@ pragma solidity ^0.8.24; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; contract GraphPaymentsStorageV1Storage { - // Authorized collectors - mapping(address sender => mapping(address dataService => IGraphPayments.Collector collector)) - public authorizedCollectors; - - // The maximum thawing period (in seconds) for removing collector authorization - // This is a precautionary measure to avoid inadvertedly locking collectors for too long - uint256 public constant MAX_THAWING_PERIOD = 90 days; - - // Thawing period for authorized collectors - uint256 public immutable revokeCollectorThawingPeriod; - // The graph protocol payment cut uint256 public immutable protocolPaymentCut; } diff --git a/packages/horizon/contracts/utils/TokenUtils.sol b/packages/horizon/contracts/utils/TokenUtils.sol new file mode 100644 index 000000000..7bb86c491 --- /dev/null +++ b/packages/horizon/contracts/utils/TokenUtils.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; + +library TokenUtils { + /** + * @dev Pull tokens from an address to this contract. + * @param _graphToken Token to transfer + * @param _from Address sending the tokens + * @param _amount Amount of tokens to transfer + */ + function pullTokens(IGraphToken _graphToken, address _from, uint256 _amount) internal { + if (_amount > 0) { + require(_graphToken.transferFrom(_from, address(this), _amount), "!transfer"); + } + } + + /** + * @dev Push tokens from this contract to a receiving address. + * @param _graphToken Token to transfer + * @param _to Address receiving the tokens + * @param _amount Amount of tokens to transfer + */ + function pushTokens(IGraphToken _graphToken, address _to, uint256 _amount) internal { + if (_amount > 0) { + require(_graphToken.transfer(_to, _amount), "!transfer"); + } + } + + /** + * @dev Burn tokens held by this contract. + * @param _graphToken Token to burn + * @param _amount Amount of tokens to burn + */ + function burnTokens(IGraphToken _graphToken, uint256 _amount) internal { + if (_amount > 0) { + _graphToken.burn(_amount); + } + } +} diff --git a/packages/horizon/test/GraphDeployments.t.sol b/packages/horizon/test/GraphDeployments.t.sol index 159035101..e08986c62 100644 --- a/packages/horizon/test/GraphDeployments.t.sol +++ b/packages/horizon/test/GraphDeployments.t.sol @@ -47,12 +47,12 @@ contract GraphDeployments is Test { // GraphPayments preddict address bytes32 saltPayments = keccak256("GraphPaymentsSalt"); - bytes32 paymentsHash = keccak256(bytes.concat(vm.getCode("GraphPayments.sol:GraphPayments"), abi.encode(address(controller), revokeCollectorThawingPeriod, protocolPaymentCut))); + bytes32 paymentsHash = keccak256(bytes.concat(vm.getCode("GraphPayments.sol:GraphPayments"), abi.encode(address(controller), protocolPaymentCut))); address predictedPaymentsAddress = vm.computeCreate2Address(saltPayments, paymentsHash, deployer); // GraphEscrow preddict address bytes32 saltEscrow = keccak256("GraphEscrowSalt"); - bytes32 escrowHash = keccak256(bytes.concat(vm.getCode("GraphEscrow.sol:GraphEscrow"), abi.encode(address(controller), withdrawEscrowThawingPeriod))); + bytes32 escrowHash = keccak256(bytes.concat(vm.getCode("GraphEscrow.sol:GraphEscrow"), abi.encode(address(controller), revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod))); address predictedAddressEscrow = vm.computeCreate2Address(saltEscrow, escrowHash, deployer); // GraphToken @@ -72,8 +72,8 @@ contract GraphDeployments is Test { vm.stopPrank(); vm.startPrank(deployer); - payments = new GraphPayments{salt: saltPayments}(address(controller), revokeCollectorThawingPeriod, protocolPaymentCut); - escrow = new GraphEscrow{salt: saltEscrow}(address(controller), withdrawEscrowThawingPeriod); + payments = new GraphPayments{salt: saltPayments}(address(controller), protocolPaymentCut); + escrow = new GraphEscrow{salt: saltEscrow}(address(controller), revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod); vm.stopPrank(); } diff --git a/packages/horizon/test/GraphEscrow.t.sol b/packages/horizon/test/GraphEscrow.t.sol index 356d4571c..b7304d0ad 100644 --- a/packages/horizon/test/GraphEscrow.t.sol +++ b/packages/horizon/test/GraphEscrow.t.sol @@ -7,6 +7,7 @@ import { Controller } from "@graphprotocol/contracts/contracts/governance/Contro import { GraphEscrow } from "contracts/escrow/GraphEscrow.sol"; import { GraphPayments } from "contracts/payments/GraphPayments.sol"; +import { IGraphPayments } from "contracts/interfaces/IGraphPayments.sol"; import "./GraphDeployments.t.sol"; import "./mocks/MockGRTToken.sol"; @@ -20,9 +21,12 @@ contract GraphEscrowTest is Test { address governor = address(0xA2); uint256 withdrawEscrowThawingPeriod = 60; + uint256 revokeCollectorThawingPeriod; address sender; address receiver; + address verifier; + address dataService; // Setup @@ -36,9 +40,98 @@ contract GraphEscrowTest is Test { governor = deployments.governor(); withdrawEscrowThawingPeriod = deployments.withdrawEscrowThawingPeriod(); + revokeCollectorThawingPeriod = deployments.revokeCollectorThawingPeriod(); sender = address(0xB1); receiver = address(0xB2); + verifier = address(0xB3); + dataService = address(0xB4); + } + + // Collector approve tests + + function testApproveCollector() public { + vm.prank(sender); + escrow.approveCollector(verifier, 1000 ether); + + (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(sender, verifier); + assertEq(authorized, true); + assertEq(thawEndTimestamp, 0); + } + + // Collector thaw tests + + function testThawCollector() public { + vm.startPrank(sender); + escrow.approveCollector(verifier, 1000 ether); + escrow.thawCollector(verifier); + vm.stopPrank(); + + (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(sender, verifier); + assertEq(authorized, true); + assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); + } + + // Collector cancel thaw tests + + function testCancelThawCollector() public { + vm.startPrank(sender); + escrow.approveCollector(verifier, 1000 ether); + escrow.thawCollector(verifier); + vm.stopPrank(); + + (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(sender, verifier); + assertEq(authorized, true); + assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); + + vm.prank(sender); + escrow.cancelThawCollector(verifier); + + (authorized,, thawEndTimestamp) = escrow.authorizedCollectors(sender, verifier); + assertEq(authorized, true); + assertEq(thawEndTimestamp, 0); + } + + function testCancel_RevertWhen_CollectorIsNotThawing() public { + vm.startPrank(sender); + escrow.approveCollector(verifier, 1000 ether); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); + vm.expectRevert(expectedError); + escrow.cancelThawCollector(verifier); + vm.stopPrank(); + } + + // Collector revoke tests + + function testRevokeCollector() public { + vm.startPrank(sender); + escrow.approveCollector(verifier, 1000 ether); + escrow.thawCollector(verifier); + skip(revokeCollectorThawingPeriod + 1); + escrow.revokeCollector(verifier); + vm.stopPrank(); + + (bool authorized,,) = escrow.authorizedCollectors(sender, verifier); + assertEq(authorized, false); + } + + function testRevoke_RevertWhen_CollectorIsNotThawing() public { + vm.startPrank(sender); + escrow.approveCollector(verifier, 1000 ether); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); + vm.expectRevert(expectedError); + escrow.revokeCollector(verifier); + vm.stopPrank(); + } + + function testRevoke_RevertWhen_CollectorIsStillThawing() public { + vm.startPrank(sender); + escrow.approveCollector(verifier, 1000 ether); + escrow.thawCollector(verifier); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + revokeCollectorThawingPeriod); + vm.expectRevert(expectedError); + escrow.revokeCollector(verifier); + vm.stopPrank(); } // Deposit tests @@ -188,30 +281,48 @@ contract GraphEscrowTest is Test { function testCollect() public { token.mint(sender, 1000 ether); vm.startPrank(sender); + escrow.approveCollector(verifier, 1000 ether); token.approve(address(escrow), 1000 ether); escrow.deposit(receiver, 1000 ether); vm.stopPrank(); - address graphPayments = address(payments); - vm.prank(graphPayments); - escrow.collect(sender, receiver, 100 ether); + vm.prank(verifier); + escrow.collect(sender, receiver, dataService, 100 ether, IGraphPayments.PaymentType.IndexingFees, 3 ether); - (uint256 receiverEscrowBalance,,) = escrow.escrowAccounts(sender, receiver); - assertEq(receiverEscrowBalance, 900 ether); - uint256 graphPaymentsBalance = token.balanceOf(graphPayments); - assertEq(graphPaymentsBalance, 100 ether); + uint256 indexerBalance = token.balanceOf(receiver); + assertEq(indexerBalance, 91 ether); } - function testCollect_RevertWhen_NotGraphPayments() public { - token.mint(sender, 1000 ether); + function testCollect_RevertWhen_CollectorNotAuthorized() public { + address indexer = address(0xA3); + uint256 amount = 1000 ether; + + vm.startPrank(verifier); + uint256 dataServiceCut = 30000; // 3% + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorNotAuthorized(address,address)", sender, verifier); + vm.expectRevert(expectedError); + escrow.collect(sender, indexer, dataService, amount, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); + vm.stopPrank(); + } + + function testCollect_RevertWhen_CollectorHasInsufficientAmount() public { + vm.prank(sender); + escrow.approveCollector(verifier, 100 ether); + + address indexer = address(0xA3); + uint256 amount = 1000 ether; + + token.mint(sender, amount); vm.startPrank(sender); - token.approve(address(escrow), 1000 ether); - escrow.deposit(receiver, 1000 ether); + token.approve(address(escrow), amount); + escrow.deposit(indexer, amount); vm.stopPrank(); - // revert - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotGraphPayments()"); + vm.startPrank(verifier); + uint256 dataServiceCut = 30 ether; + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", 100 ether, 1000 ether); vm.expectRevert(expectedError); - escrow.collect(sender, receiver, 100 ether); + escrow.collect(sender, indexer, dataService, 1000 ether, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); + vm.stopPrank(); } } \ No newline at end of file diff --git a/packages/horizon/test/GraphPayments.t.sol b/packages/horizon/test/GraphPayments.t.sol index ec85dd9c3..9c0f0ac56 100644 --- a/packages/horizon/test/GraphPayments.t.sol +++ b/packages/horizon/test/GraphPayments.t.sol @@ -23,7 +23,6 @@ contract GraphPaymentsTest is Test { address governor; - uint256 revokeCollectorThawingPeriod; uint256 protocolPaymentCut; address sender; @@ -41,117 +40,25 @@ contract GraphPaymentsTest is Test { staking = deployments.staking(); governor = deployments.governor(); - revokeCollectorThawingPeriod = deployments.revokeCollectorThawingPeriod(); protocolPaymentCut = deployments.protocolPaymentCut(); sender = address(0xA1); dataService = address(0xA2); } - // Approve tests - - function testApproveCollector() public { - vm.prank(sender); - payments.approveCollector(dataService, 1000 ether); - - (bool authorized,, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); - assertEq(authorized, true); - assertEq(thawEndTimestamp, 0); - } - - // Thaw tests - - function testThawCollector() public { - vm.startPrank(sender); - payments.approveCollector(dataService, 1000 ether); - payments.thawCollector(dataService); - vm.stopPrank(); - - (bool authorized,, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); - assertEq(authorized, true); - assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); - } - - // Cancel thaw tests - - function testCancelThawCollector() public { - vm.startPrank(sender); - payments.approveCollector(dataService, 1000 ether); - payments.thawCollector(dataService); - vm.stopPrank(); - - (bool authorized,, uint256 thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); - assertEq(authorized, true); - assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); - - vm.prank(sender); - payments.cancelThawCollector(dataService); - - (authorized,, thawEndTimestamp) = payments.authorizedCollectors(sender, dataService); - assertEq(authorized, true); - assertEq(thawEndTimestamp, 0); - } - - function testCancel_RevertWhen_CollectorIsNotThawing() public { - vm.startPrank(sender); - payments.approveCollector(dataService, 1000 ether); - bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsNotThawing()"); - vm.expectRevert(expectedError); - payments.cancelThawCollector(dataService); - vm.stopPrank(); - } - - // Revoke tests - - function testRevokeCollector() public { - vm.startPrank(sender); - payments.approveCollector(dataService, 1000 ether); - payments.thawCollector(dataService); - skip(revokeCollectorThawingPeriod + 1); - payments.revokeCollector(dataService); - vm.stopPrank(); - - (bool authorized,,) = payments.authorizedCollectors(sender, dataService); - assertEq(authorized, false); - } - - function testRevoke_RevertWhen_CollectorIsNotThawing() public { - vm.startPrank(sender); - payments.approveCollector(dataService, 1000 ether); - bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsNotThawing()"); - vm.expectRevert(expectedError); - payments.revokeCollector(dataService); - vm.stopPrank(); - } - - function testRevoke_RevertWhen_CollectorIsStillThawing() public { - vm.startPrank(sender); - payments.approveCollector(dataService, 1000 ether); - payments.thawCollector(dataService); - bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsStillThawing(uint256,uint256)", block.timestamp, block.timestamp + revokeCollectorThawingPeriod); - vm.expectRevert(expectedError); - payments.revokeCollector(dataService); - vm.stopPrank(); - } - // Collect tests function testCollect() public { - vm.prank(sender); - payments.approveCollector(dataService, 1000 ether); - address indexer = address(0xA3); uint256 amount = 1000 ether; + address escrowAddress = address(escrow); - token.mint(sender, amount); - vm.startPrank(sender); - token.approve(address(escrow), amount); - escrow.deposit(indexer, amount); - vm.stopPrank(); + vm.startPrank(escrowAddress); + token.mint(escrowAddress, amount); + token.approve(address(payments), amount); - vm.startPrank(dataService); - uint256 dataServiceCut = 30000; // 3% - payments.collect(sender, indexer, amount, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); + uint256 dataServiceCut = 30 ether; // 3% + payments.collect(indexer, dataService, amount, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); vm.stopPrank(); uint256 indexerBalance = token.balanceOf(indexer); @@ -163,37 +70,4 @@ contract GraphPaymentsTest is Test { uint256 delegatorBalance = staking.delegationPool(indexer); assertEq(delegatorBalance, 50 ether); } - - function testCollect_RevertWhen_CollectorNotAuthorized() public { - address indexer = address(0xA3); - uint256 amount = 1000 ether; - - vm.startPrank(dataService); - uint256 dataServiceCut = 30000; // 3% - bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsCollectorNotAuthorized(address,address)", sender, dataService); - vm.expectRevert(expectedError); - payments.collect(sender, indexer, amount, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); - vm.stopPrank(); - } - - function testCollect_RevertWhen_CollectorHasInsufficientAmount() public { - vm.prank(sender); - payments.approveCollector(dataService, 100 ether); - - address indexer = address(0xA3); - uint256 amount = 1000 ether; - - token.mint(sender, amount); - vm.startPrank(sender); - token.approve(address(escrow), amount); - escrow.deposit(indexer, amount); - vm.stopPrank(); - - vm.startPrank(dataService); - uint256 dataServiceCut = 30000; // 3% - bytes memory expectedError = abi.encodeWithSignature("GraphPaymentsCollectorInsufficientAmount(uint256,uint256)", 100 ether, 1000 ether); - vm.expectRevert(expectedError); - payments.collect(sender, indexer, 1000 ether, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); - vm.stopPrank(); - } -} \ No newline at end of file +} diff --git a/packages/subgraph-service/lib/forge-std b/packages/subgraph-service/lib/forge-std deleted file mode 160000 index bb4ceea94..000000000 --- a/packages/subgraph-service/lib/forge-std +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef From 9ab94292be001e97f1acb7791f205fc8c9049680 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 10 May 2024 14:51:56 -0300 Subject: [PATCH 018/343] chore: revert when there is insufficient amount in deposit --- .../horizon/contracts/escrow/GraphEscrow.sol | 23 +++++++++++++------ .../contracts/interfaces/IGraphEscrow.sol | 4 +++- packages/horizon/test/GraphEscrow.t.sol | 15 ++++++++++++ 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/packages/horizon/contracts/escrow/GraphEscrow.sol b/packages/horizon/contracts/escrow/GraphEscrow.sol index a1f5c38f0..2c3e63cc8 100644 --- a/packages/horizon/contracts/escrow/GraphEscrow.sol +++ b/packages/horizon/contracts/escrow/GraphEscrow.sol @@ -175,7 +175,7 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector emit Withdraw(msg.sender, receiver, amount); } - // Collect from escrow (up to amount available in escrow) for a receiver using sender's deposit + // Collect from escrow for a receiver using sender's deposit function collect( address sender, address receiver, // serviceProvider @@ -200,13 +200,22 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector // Collect tokens from GraphEscrow up to amount available EscrowAccount storage account = escrowAccounts[sender][receiver]; - uint256 available = account.balance - account.amountThawing; - uint256 collectAmount = amount > available ? available : amount; - account.balance -= collectAmount; - emit Collect(sender, receiver, collectAmount); + uint256 availableAmount = account.balance - account.amountThawing; + if (availableAmount < amount) { + revert GraphEscrowInsufficientAmount(availableAmount, amount); + } + + account.balance -= amount; + emit Collect(sender, receiver, amount); // Approve tokens so GraphPayments can pull them - graphToken.approve(address(graphPayments), collectAmount); - graphPayments.collect(receiver, dataService, collectAmount, paymentType, tokensDataService); + graphToken.approve(address(graphPayments), amount); + graphPayments.collect(receiver, dataService, amount, paymentType, tokensDataService); + } + + // Get the balance of a sender-receiver pair + function getBalance(address sender, address receiver) external view returns (uint256) { + EscrowAccount storage account = escrowAccounts[sender][receiver]; + return account.balance - account.amountThawing; } } diff --git a/packages/horizon/contracts/interfaces/IGraphEscrow.sol b/packages/horizon/contracts/interfaces/IGraphEscrow.sol index 841e18eb8..f9d3f6140 100644 --- a/packages/horizon/contracts/interfaces/IGraphEscrow.sol +++ b/packages/horizon/contracts/interfaces/IGraphEscrow.sol @@ -29,7 +29,7 @@ interface IGraphEscrow { // Withdraws all thawed escrow from a receiver's escrow account function withdraw(address receiver) external; - // Collect from escrow (up to amount available in escrow) for a receiver using sender's deposit + // Collect from escrow for a receiver using sender's deposit function collect( address sender, address receiver, @@ -38,4 +38,6 @@ interface IGraphEscrow { IGraphPayments.PaymentType paymentType, uint256 tokensDataService ) external; + + function getBalance(address sender, address receiver) external view returns (uint256); } diff --git a/packages/horizon/test/GraphEscrow.t.sol b/packages/horizon/test/GraphEscrow.t.sol index b7304d0ad..221b0f62d 100644 --- a/packages/horizon/test/GraphEscrow.t.sol +++ b/packages/horizon/test/GraphEscrow.t.sol @@ -325,4 +325,19 @@ contract GraphEscrowTest is Test { escrow.collect(sender, indexer, dataService, 1000 ether, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); vm.stopPrank(); } + + function testCollect_RevertWhen_SenderHasInsufficientAmountInEscrow() public { + token.mint(sender, 1000 ether); + vm.startPrank(sender); + escrow.approveCollector(verifier, 1000 ether); + token.approve(address(escrow), 1000 ether); + escrow.deposit(receiver, 100 ether); + vm.stopPrank(); + + vm.prank(verifier); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", 100 ether, 200 ether); + vm.expectRevert(expectedError); + escrow.collect(sender, receiver, dataService, 200 ether, IGraphPayments.PaymentType.IndexingFees, 3 ether); + vm.stopPrank(); + } } \ No newline at end of file From a94a455f474b057f4ea72221713be0e09c300853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Carranza=20V=C3=A9lez?= Date: Fri, 17 May 2024 17:24:20 -0300 Subject: [PATCH 019/343] [WIP] Horizon Staking (#967) * chore(horizon): add staking contract and others (WIP) * chore: fix errors until it compiles * fix: add missing IL2StakingTypes * chore: wip on splitting for code size * chore: somehow it fits in 24kB now * chore: remove global operators and the verifier allowlist * fix: various fixes and a bit of cleanup * chore: slippage protection for delegation * chore: add setter for delegation cuts * chore: add getter for delegation cuts * fix: reintroduce early alloc closure * chore: add support for vesting contracts * fix: various missing things * chore: add OZ contracts * chore: add setOperatorLocked * chore: use delegation ratio in getTokensAvailable * fix: allow changing provision params * fix: remove verifier cut from tokens to slash --- .../contracts/contracts/base/IMulticall.sol | 2 +- .../contracts/contracts/base/Multicall.sol | 2 +- .../contracts/curation/ICuration.sol | 2 +- .../contracts/epochs/IEpochManager.sol | 2 +- .../contracts/gateway/ICallhookReceiver.sol | 2 +- .../contracts/governance/IController.sol | 2 +- .../contracts/governance/IManaged.sol | 2 +- .../contracts/l2/staking/IL2Staking.sol | 20 +- .../contracts/l2/staking/IL2StakingBase.sol | 2 +- .../contracts/l2/staking/IL2StakingTypes.sol | 22 + .../contracts/l2/staking/L2Staking.sol | 23 +- .../contracts/rewards/IRewardsManager.sol | 2 +- .../contracts/staking/IHorizonStaking.sol | 149 --- .../contracts/contracts/staking/L1Staking.sol | 13 +- .../contracts/upgrades/GraphUpgradeable.sol | 2 +- .../contracts/upgrades/IGraphProxy.sol | 2 +- packages/horizon/contracts/GraphDirectory.sol | 34 + packages/horizon/contracts/HorizonStaking.sol | 869 ++++++++++++++++++ .../contracts/HorizonStakingExtension.sol | 262 ++++++ .../contracts/HorizonStakingStorage.sol | 145 +++ packages/horizon/contracts/IGraphToken.sol | 43 + .../horizon/contracts/IHorizonStaking.sol | 9 + .../horizon/contracts/IHorizonStakingBase.sol | 236 +++++ .../contracts/IHorizonStakingExtension.sol | 74 ++ .../contracts/IHorizonStakingTypes.sol | 90 ++ packages/horizon/contracts/IManaged.sol | 25 + .../IStakingBackwardsCompatibility.sol | 189 ++++ packages/horizon/contracts/Managed.sol | 110 +++ packages/horizon/contracts/SimpleTest.sol | 10 - .../StakingBackwardsCompatibility.sol | 508 ++++++++++ .../contracts/mocks/ControllerMock.sol | 125 +++ .../contracts/utils/ExponentialRebates.sol | 64 ++ .../horizon/contracts/utils/LibFixedMath.sol | 389 ++++++++ .../horizon/contracts/utils/MathUtils.sol | 42 + .../horizon/contracts/utils/TokenUtils.sol | 48 + packages/horizon/foundry.toml | 4 +- packages/horizon/hardhat.config.ts | 10 +- packages/horizon/package.json | 3 +- packages/horizon/remappings.txt | 1 + packages/horizon/test/HorizonStaking.t.sol | 35 + packages/horizon/test/HorizonStaking.ts | 38 + packages/horizon/test/SimpleTest.t.sol | 17 - packages/horizon/test/SimpleTest.ts | 23 - yarn.lock | 8 + 44 files changed, 3416 insertions(+), 244 deletions(-) create mode 100644 packages/contracts/contracts/l2/staking/IL2StakingTypes.sol delete mode 100644 packages/contracts/contracts/staking/IHorizonStaking.sol create mode 100644 packages/horizon/contracts/GraphDirectory.sol create mode 100644 packages/horizon/contracts/HorizonStaking.sol create mode 100644 packages/horizon/contracts/HorizonStakingExtension.sol create mode 100644 packages/horizon/contracts/HorizonStakingStorage.sol create mode 100644 packages/horizon/contracts/IGraphToken.sol create mode 100644 packages/horizon/contracts/IHorizonStaking.sol create mode 100644 packages/horizon/contracts/IHorizonStakingBase.sol create mode 100644 packages/horizon/contracts/IHorizonStakingExtension.sol create mode 100644 packages/horizon/contracts/IHorizonStakingTypes.sol create mode 100644 packages/horizon/contracts/IManaged.sol create mode 100644 packages/horizon/contracts/IStakingBackwardsCompatibility.sol create mode 100644 packages/horizon/contracts/Managed.sol delete mode 100644 packages/horizon/contracts/SimpleTest.sol create mode 100644 packages/horizon/contracts/StakingBackwardsCompatibility.sol create mode 100644 packages/horizon/contracts/mocks/ControllerMock.sol create mode 100644 packages/horizon/contracts/utils/ExponentialRebates.sol create mode 100644 packages/horizon/contracts/utils/LibFixedMath.sol create mode 100644 packages/horizon/contracts/utils/MathUtils.sol create mode 100644 packages/horizon/contracts/utils/TokenUtils.sol create mode 100644 packages/horizon/test/HorizonStaking.t.sol create mode 100644 packages/horizon/test/HorizonStaking.ts delete mode 100644 packages/horizon/test/SimpleTest.t.sol delete mode 100644 packages/horizon/test/SimpleTest.ts diff --git a/packages/contracts/contracts/base/IMulticall.sol b/packages/contracts/contracts/base/IMulticall.sol index 3269f694b..65d69d24e 100644 --- a/packages/contracts/contracts/base/IMulticall.sol +++ b/packages/contracts/contracts/base/IMulticall.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; pragma abicoder v2; /** diff --git a/packages/contracts/contracts/base/Multicall.sol b/packages/contracts/contracts/base/Multicall.sol index 49111840d..eff2d3e28 100644 --- a/packages/contracts/contracts/base/Multicall.sol +++ b/packages/contracts/contracts/base/Multicall.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity ^0.7.6 || 0.8.24; pragma abicoder v2; import "./IMulticall.sol"; diff --git a/packages/contracts/contracts/curation/ICuration.sol b/packages/contracts/contracts/curation/ICuration.sol index d92aa9c69..27d37f38c 100644 --- a/packages/contracts/contracts/curation/ICuration.sol +++ b/packages/contracts/contracts/curation/ICuration.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; /** * @title Curation Interface diff --git a/packages/contracts/contracts/epochs/IEpochManager.sol b/packages/contracts/contracts/epochs/IEpochManager.sol index 36b1f47a3..f9a365b9c 100644 --- a/packages/contracts/contracts/epochs/IEpochManager.sol +++ b/packages/contracts/contracts/epochs/IEpochManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; interface IEpochManager { // -- Configuration -- diff --git a/packages/contracts/contracts/gateway/ICallhookReceiver.sol b/packages/contracts/contracts/gateway/ICallhookReceiver.sol index 885b0cdb2..33b06ab5e 100644 --- a/packages/contracts/contracts/gateway/ICallhookReceiver.sol +++ b/packages/contracts/contracts/gateway/ICallhookReceiver.sol @@ -6,7 +6,7 @@ * be allowlisted by the governor, but also implement this interface that contains * the function that will actually be called by the L2GraphTokenGateway. */ -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; interface ICallhookReceiver { /** diff --git a/packages/contracts/contracts/governance/IController.sol b/packages/contracts/contracts/governance/IController.sol index 7df3d94ee..0549c723d 100644 --- a/packages/contracts/contracts/governance/IController.sol +++ b/packages/contracts/contracts/governance/IController.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.8.0; +pragma solidity >=0.6.12 <0.9.0; interface IController { function getGovernor() external view returns (address); diff --git a/packages/contracts/contracts/governance/IManaged.sol b/packages/contracts/contracts/governance/IManaged.sol index 76f05e0fb..4cedf9c0b 100644 --- a/packages/contracts/contracts/governance/IManaged.sol +++ b/packages/contracts/contracts/governance/IManaged.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; import { IController } from "./IController.sol"; diff --git a/packages/contracts/contracts/l2/staking/IL2Staking.sol b/packages/contracts/contracts/l2/staking/IL2Staking.sol index 73ff936ce..4b7748e31 100644 --- a/packages/contracts/contracts/l2/staking/IL2Staking.sol +++ b/packages/contracts/contracts/l2/staking/IL2Staking.sol @@ -5,6 +5,7 @@ pragma abicoder v2; import { IStaking } from "../../staking/IStaking.sol"; import { IL2StakingBase } from "./IL2StakingBase.sol"; +import { IL2StakingTypes } from "./IL2StakingTypes.sol"; /** * @title Interface for the L2 Staking contract @@ -15,21 +16,4 @@ import { IL2StakingBase } from "./IL2StakingBase.sol"; * the custom setup of the Staking contract where part of the functionality is implemented * in a separate contract (StakingExtension) to which calls are delegated through the fallback function. */ -interface IL2Staking is IStaking, IL2StakingBase { - /// @dev Message codes for the L1 -> L2 bridge callhook - enum L1MessageCodes { - RECEIVE_INDEXER_STAKE_CODE, - RECEIVE_DELEGATION_CODE - } - - /// @dev Encoded message struct when receiving indexer stake through the bridge - struct ReceiveIndexerStakeData { - address indexer; - } - - /// @dev Encoded message struct when receiving delegation through the bridge - struct ReceiveDelegationData { - address indexer; - address delegator; - } -} +interface IL2Staking is IStaking, IL2StakingBase, IL2StakingTypes {} diff --git a/packages/contracts/contracts/l2/staking/IL2StakingBase.sol b/packages/contracts/contracts/l2/staking/IL2StakingBase.sol index 6f701ec89..3926dd708 100644 --- a/packages/contracts/contracts/l2/staking/IL2StakingBase.sol +++ b/packages/contracts/contracts/l2/staking/IL2StakingBase.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; import { ICallhookReceiver } from "../../gateway/ICallhookReceiver.sol"; diff --git a/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol b/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol new file mode 100644 index 000000000..41d3fe445 --- /dev/null +++ b/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity >=0.6.12 <0.9.0; + +interface IL2StakingTypes { + /// @dev Message codes for the L1 -> L2 bridge callhook + enum L1MessageCodes { + RECEIVE_INDEXER_STAKE_CODE, + RECEIVE_DELEGATION_CODE + } + + /// @dev Encoded message struct when receiving indexer stake through the bridge + struct ReceiveIndexerStakeData { + address indexer; + } + + /// @dev Encoded message struct when receiving delegation through the bridge + struct ReceiveDelegationData { + address indexer; + address delegator; + } +} diff --git a/packages/contracts/contracts/l2/staking/L2Staking.sol b/packages/contracts/contracts/l2/staking/L2Staking.sol index 3f9d28e5a..4bde512ec 100644 --- a/packages/contracts/contracts/l2/staking/L2Staking.sol +++ b/packages/contracts/contracts/l2/staking/L2Staking.sol @@ -8,6 +8,7 @@ import { Staking } from "../../staking/Staking.sol"; import { IL2StakingBase } from "./IL2StakingBase.sol"; import { IL2Staking } from "./IL2Staking.sol"; import { Stakes } from "../../staking/libs/Stakes.sol"; +import { IL2StakingTypes } from "./IL2StakingTypes.sol"; /** * @title L2Staking contract @@ -63,16 +64,16 @@ contract L2Staking is Staking, IL2StakingBase { require(_from == counterpartStakingAddress, "ONLY_L1_STAKING_THROUGH_BRIDGE"); (uint8 code, bytes memory functionData) = abi.decode(_data, (uint8, bytes)); - if (code == uint8(IL2Staking.L1MessageCodes.RECEIVE_INDEXER_STAKE_CODE)) { - IL2Staking.ReceiveIndexerStakeData memory indexerData = abi.decode( + if (code == uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_INDEXER_STAKE_CODE)) { + IL2StakingTypes.ReceiveIndexerStakeData memory indexerData = abi.decode( functionData, - (IL2Staking.ReceiveIndexerStakeData) + (IL2StakingTypes.ReceiveIndexerStakeData) ); _receiveIndexerStake(_amount, indexerData); - } else if (code == uint8(IL2Staking.L1MessageCodes.RECEIVE_DELEGATION_CODE)) { - IL2Staking.ReceiveDelegationData memory delegationData = abi.decode( + } else if (code == uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE)) { + IL2StakingTypes.ReceiveDelegationData memory delegationData = abi.decode( functionData, - (IL2Staking.ReceiveDelegationData) + (IL2StakingTypes.ReceiveDelegationData) ); _receiveDelegation(_amount, delegationData); } else { @@ -87,7 +88,10 @@ contract L2Staking is Staking, IL2StakingBase { * @param _amount Amount of tokens that were transferred * @param _indexerData struct containing the indexer's address */ - function _receiveIndexerStake(uint256 _amount, IL2Staking.ReceiveIndexerStakeData memory _indexerData) internal { + function _receiveIndexerStake( + uint256 _amount, + IL2StakingTypes.ReceiveIndexerStakeData memory _indexerData + ) internal { address _indexer = _indexerData.indexer; // Deposit tokens into the indexer stake __stakes[_indexer].deposit(_amount); @@ -108,7 +112,10 @@ contract L2Staking is Staking, IL2StakingBase { * @param _amount Amount of tokens that were transferred * @param _delegationData struct containing the delegator's address and the indexer's address */ - function _receiveDelegation(uint256 _amount, IL2Staking.ReceiveDelegationData memory _delegationData) internal { + function _receiveDelegation( + uint256 _amount, + IL2StakingTypes.ReceiveDelegationData memory _delegationData + ) internal { // Get the delegation pool of the indexer DelegationPool storage pool = __delegationPools[_delegationData.indexer]; Delegation storage delegation = pool.delegators[_delegationData.delegator]; diff --git a/packages/contracts/contracts/rewards/IRewardsManager.sol b/packages/contracts/contracts/rewards/IRewardsManager.sol index 4c062e774..4266a8635 100644 --- a/packages/contracts/contracts/rewards/IRewardsManager.sol +++ b/packages/contracts/contracts/rewards/IRewardsManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; interface IRewardsManager { /** diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol deleted file mode 100644 index a4101ff52..000000000 --- a/packages/contracts/contracts/staking/IHorizonStaking.sol +++ /dev/null @@ -1,149 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity >=0.7.6 <0.9.0; -pragma abicoder v2; - -interface Test { - function test() external returns (uint256); -} - -interface IHorizonStaking { - struct Provision { - // Service provider that created the provision - address serviceProvider; - // tokens in the provision - uint256 tokens; - // tokens that are being thawed (and will stop being slashable soon) - uint256 tokensThawing; - // timestamp of provision creation - uint64 createdAt; - // authority to slash the provision - address verifier; - // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed - uint32 maxVerifierCut; - // time, in seconds, tokens must thaw before being withdrawn - uint64 thawingPeriod; - } - - // the new "Indexer" struct - struct ServiceProviderInternal { - // Tokens on the Service Provider stake (staked by the provider) - uint256 tokensStaked; - // Tokens used in allocations - uint256 __DEPRECATED_tokensAllocated; - // Tokens locked for withdrawal subject to thawing period - uint256 __DEPRECATED_tokensLocked; - // Block when locked tokens can be withdrawn - uint256 __DEPRECATED_tokensLockedUntil; - // tokens used in a provision - uint256 tokensProvisioned; - // tokens that initiated a thawing in any one of the provider's provisions - uint256 tokensRequestedThaw; - // tokens that have been removed from any one of the provider's provisions after thawing - uint256 tokensFulfilledThaw; - // provisions that take priority for undelegation force thawing - bytes32[] forceThawProvisions; - } - - struct ServiceProvider { - // Tokens on the provider stake (staked by the provider) - uint256 tokensStaked; - // tokens used in a provision - uint256 tokensProvisioned; - // tokens that initiated a thawing in any one of the provider's provisions - uint256 tokensRequestedThaw; - // tokens that have been removed from any one of the provider's provisions after thawing - uint256 tokensFulfilledThaw; - // provisions that take priority for undelegation force thawing - bytes32[] forceThawProvisions; - } - - struct DelegationPool { - uint32 __DEPRECATED_cooldownBlocks; // solhint-disable-line var-name-mixedcase - uint32 __DEPRECATED_indexingRewardCut; // in PPM - uint32 __DEPRECATED_queryFeeCut; // in PPM - uint256 __DEPRECATED_updatedAtBlock; // Block when the pool was last updated - uint256 tokens; // Total tokens as pool reserves - uint256 shares; // Total shares minted in the pool - mapping(address => Delegation) delegators; // Mapping of delegator => Delegation - } - - struct Delegation { - // shares owned by the delegator in the pool - uint256 shares; - // tokens delegated to the pool - uint256 tokens; - // Timestamp when locked tokens can be undelegated (after the timelock) - uint256 tokensLockedUntil; - } - - struct ThawRequest { - // tokens that are being thawed by this request - uint256 tokens; - // the provision id to which this request corresponds to - bytes32 provisionId; - // the address that initiated the thaw request, allowed to remove the funds once thawed - address owner; - // the timestamp when the thawed funds can be removed from the provision - uint64 thawingUntil; - // the value of `ServiceProvider.tokensRequestedThaw` the moment the thaw request is created - uint256 tokensRequestedThawSnapshot; - } - - // whitelist/deny a verifier - function allowVerifier(address verifier, bool allow) external; - - // deposit stake - function stake(uint256 tokens) external; - - // create a provision - function provision(uint256 tokens, address verifier, uint256 maxVerifierCut, uint256 thawingPeriod) external; - - // initiate a thawing to remove tokens from a provision - function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32 thawRequestId); - - // moves thawed stake from a provision back into the provider's available stake - function deprovision(bytes32 thawRequestId) external; - - // moves thawed stake from one provision into another provision - function reprovision(bytes32 thawRequestId, bytes32 provisionId) external; - - // moves thawed stake back to the owner's account - stake is removed from the protocol - function withdraw(bytes32 thawRequestId) external; - - // delegate tokens to a provider - function delegate(address serviceProvider, uint256 tokens) external; - - // undelegate tokens - function undelegate( - address serviceProvider, - uint256 tokens, - bytes32[] calldata provisions - ) external returns (bytes32 thawRequestId); - - // slash a service provider - function slash(bytes32 provisionId, uint256 tokens, uint256 verifierAmount) external; - - // set the Service Provider's preferred provisions to be force thawed - function setForceThawProvisions(bytes32[] calldata provisions) external; - - // total staked tokens to the provider - // `ServiceProvider.tokensStaked + DelegationPool.serviceProvider.tokens` - function getStake(address serviceProvider) external view returns (uint256 tokens); - - // staked tokens that are currently not provisioned, aka idle stake - // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address serviceProvider) external view returns (uint256 tokens); - - // staked tokens the provider can provision before hitting the delegation cap - // `ServiceProvider.tokensStaked * Staking.delegationRatio - Provision.tokensProvisioned` - function getCapacity(address serviceProvider) external view returns (uint256 tokens); - - // provisioned tokens that are not being used - // `Provision.tokens - Provision.tokensThawing` - function getTokensAvailable(bytes32 provision) external view returns (uint256 tokens); - - function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory); - - function getProvision(bytes32 provision) external view returns (Provision memory); -} diff --git a/packages/contracts/contracts/staking/L1Staking.sol b/packages/contracts/contracts/staking/L1Staking.sol index df4e145bd..5f25cb229 100644 --- a/packages/contracts/contracts/staking/L1Staking.sol +++ b/packages/contracts/contracts/staking/L1Staking.sol @@ -9,12 +9,12 @@ import { ITokenGateway } from "../arbitrum/ITokenGateway.sol"; import { Staking } from "./Staking.sol"; import { Stakes } from "./libs/Stakes.sol"; import { IStakingData } from "./IStakingData.sol"; -import { IL2Staking } from "../l2/staking/IL2Staking.sol"; import { L1StakingV1Storage } from "./L1StakingStorage.sol"; import { IGraphToken } from "../token/IGraphToken.sol"; import { IL1StakingBase } from "./IL1StakingBase.sol"; import { MathUtils } from "./libs/MathUtils.sol"; import { IL1GraphTokenLockTransferTool } from "./IL1GraphTokenLockTransferTool.sol"; +import { IL2StakingTypes } from "../l2/staking/IL2StakingTypes.sol"; /** * @title L1Staking contract @@ -267,11 +267,11 @@ contract L1Staking is Staking, L1StakingV1Storage, IL1StakingBase { ); } - IL2Staking.ReceiveIndexerStakeData memory functionData; + IL2StakingTypes.ReceiveIndexerStakeData memory functionData; functionData.indexer = _l2Beneficiary; bytes memory extraData = abi.encode( - uint8(IL2Staking.L1MessageCodes.RECEIVE_INDEXER_STAKE_CODE), + uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_INDEXER_STAKE_CODE), abi.encode(functionData) ); @@ -324,10 +324,13 @@ contract L1Staking is Staking, L1StakingV1Storage, IL1StakingBase { delegation.shares = 0; bytes memory extraData; { - IL2Staking.ReceiveDelegationData memory functionData; + IL2StakingTypes.ReceiveDelegationData memory functionData; functionData.indexer = indexerTransferredToL2[_indexer]; functionData.delegator = _l2Beneficiary; - extraData = abi.encode(uint8(IL2Staking.L1MessageCodes.RECEIVE_DELEGATION_CODE), abi.encode(functionData)); + extraData = abi.encode( + uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), + abi.encode(functionData) + ); } _sendTokensAndMessageToL2Staking( diff --git a/packages/contracts/contracts/upgrades/GraphUpgradeable.sol b/packages/contracts/contracts/upgrades/GraphUpgradeable.sol index 862f7e7d5..2627e7578 100644 --- a/packages/contracts/contracts/upgrades/GraphUpgradeable.sol +++ b/packages/contracts/contracts/upgrades/GraphUpgradeable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity ^0.7.6 || 0.8.24; import { IGraphProxy } from "./IGraphProxy.sol"; diff --git a/packages/contracts/contracts/upgrades/IGraphProxy.sol b/packages/contracts/contracts/upgrades/IGraphProxy.sol index 61946e948..cee1aadb0 100644 --- a/packages/contracts/contracts/upgrades/IGraphProxy.sol +++ b/packages/contracts/contracts/upgrades/IGraphProxy.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; interface IGraphProxy { function admin() external returns (address); diff --git a/packages/horizon/contracts/GraphDirectory.sol b/packages/horizon/contracts/GraphDirectory.sol new file mode 100644 index 000000000..dfd9973ea --- /dev/null +++ b/packages/horizon/contracts/GraphDirectory.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; + +/** + * @title GraphDirectory contract + * @notice This contract is meant to be inherited by other contracts that + * need to keep track of the addresses of the core Graph Horizon contracts. + * It fetches the addresses from the Controller supplied during construction, + * and uses immutable variables to minimize gas costs. + */ +contract GraphDirectory { + address public immutable CONTROLLER; + address public immutable STAKING; + address public immutable EPOCH_MANAGER; + address public immutable GRAPH_TOKEN; + address public immutable GRAPH_TOKEN_GATEWAY; + // TODO: also GraphPayments and ScalarEscrow? + // Legacy contracts (pre-Horizon) used for StakingBackwardCompatibility + address public immutable REWARDS_MANAGER; + address public immutable CURATION; + + constructor(address _controller) { + CONTROLLER = _controller; + STAKING = IController(_controller).getContractProxy(keccak256("Staking")); + EPOCH_MANAGER = IController(_controller).getContractProxy(keccak256("EpochManager")); + GRAPH_TOKEN = IController(_controller).getContractProxy(keccak256("GraphToken")); + GRAPH_TOKEN_GATEWAY = IController(_controller).getContractProxy(keccak256("GraphTokenGateway")); + REWARDS_MANAGER = IController(_controller).getContractProxy(keccak256("RewardsManager")); + CURATION = IController(_controller).getContractProxy(keccak256("Curation")); + } +} diff --git a/packages/horizon/contracts/HorizonStaking.sol b/packages/horizon/contracts/HorizonStaking.sol new file mode 100644 index 000000000..7b97260be --- /dev/null +++ b/packages/horizon/contracts/HorizonStaking.sol @@ -0,0 +1,869 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol"; + +import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; +import { TokenUtils } from "./utils/TokenUtils.sol"; +import { MathUtils } from "./utils/MathUtils.sol"; +import { Managed } from "./Managed.sol"; +import { IGraphToken } from "./IGraphToken.sol"; +import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; + +/** + * @title HorizonStaking contract + * @dev This contract is the main Staking contract in The Graph protocol after the Horizon upgrade. + * It is designed to be deployed as an upgrade to the L2Staking contract from the legacy contracts + * package. + * It uses a HorizonStakingExtension contract to implement the full IHorizonStaking interface through delegatecalls. + * This is due to the contract size limit on Arbitrum (24kB like mainnet). + */ +contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUpgradeable { + /// @dev 100% in parts per million + uint32 internal constant MAX_PPM = 1000000; + + /// @dev Maximum value that can be set as the maxVerifierCut in a provision. + /// It is equivalent to 100% in parts-per-million + uint32 private constant MAX_MAX_VERIFIER_CUT = 1000000; // 100% + + /// @dev Minimum size of a provision + uint256 private constant MIN_PROVISION_SIZE = 1e18; + + /// @dev Maximum number of simultaneous stake thaw requests (per provision) or undelegations (per delegation) + uint256 private constant MAX_THAW_REQUESTS = 100; + + /// @dev Fixed point precision + uint256 private constant FIXED_POINT_PRECISION = 1e18; + + /// @dev Minimum amount of delegation to prevent rounding attacks. + /// TODO: remove this after L2 transfer tool for delegation is removed + /// (delegation on L2 has its own slippage protection) + uint256 private constant MIN_DELEGATION = 1e18; + + address private immutable STAKING_EXTENSION_ADDRESS; + address private immutable SUBGRAPH_DATA_SERVICE_ADDRESS; + + error HorizonStakingInvalidVerifier(address verifier); + error HorizonStakingVerifierAlreadyAllowed(address verifier); + error HorizonStakingVerifierNotAllowed(address verifier); + error HorizonStakingInvalidZeroTokens(); + error HorizonStakingInvalidProvision(address serviceProvider, address verifier); + error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); + error HorizonStakingInsufficientCapacity(); + error HorizonStakingInsufficientShares(); + error HorizonStakingInsufficientCapacityForLegacyAllocations(); + error HorizonStakingTooManyThawRequests(); + error HorizonStakingInsufficientTokens(uint256 expected, uint256 available); + error HorizonStakingSlippageProtection(uint256 minExpectedAmount, uint256 actualAmount); + + modifier onlyAuthorized(address _serviceProvider, address _verifier) { + if (!isAuthorized(msg.sender, _serviceProvider, _verifier)) { + revert HorizonStakingNotAuthorized(msg.sender, _serviceProvider, _verifier); + } + _; + } + + constructor( + address _controller, + address _stakingExtensionAddress, + address _subgraphDataServiceAddress + ) Managed(_controller) { + STAKING_EXTENSION_ADDRESS = _stakingExtensionAddress; + SUBGRAPH_DATA_SERVICE_ADDRESS = _subgraphDataServiceAddress; + } + + /** + * @notice Delegates the current call to the StakingExtension implementation. + * @dev This function does not return to its internal call site, it will return directly to the + * external caller. + */ + // solhint-disable-next-line payable-fallback, no-complex-fallback + fallback() external { + //require(_implementation() != address(0), "only through proxy"); + address extensionImpl = STAKING_EXTENSION_ADDRESS; + // solhint-disable-next-line no-inline-assembly + assembly { + // (a) get free memory pointer + let ptr := mload(0x40) + + // (1) copy incoming call data + calldatacopy(ptr, 0, calldatasize()) + + // (2) forward call to logic contract + let result := delegatecall(gas(), extensionImpl, ptr, calldatasize(), 0, 0) + let size := returndatasize() + + // (3) retrieve return data + returndatacopy(ptr, 0, size) + + // (4) forward return data back to caller + switch result + case 0 { + revert(ptr, size) + } + default { + return(ptr, size) + } + } + } + + /** + * @notice Deposit tokens on the caller's stake. + * @param _tokens Amount of tokens to stake + */ + function stake(uint256 _tokens) external override { + stakeTo(msg.sender, _tokens); + } + + /** + * @notice Deposit tokens on the service provider stake, on behalf of the service provider. + * @param _serviceProvider Address of the indexer + * @param _tokens Amount of tokens to stake + */ + function stakeTo(address _serviceProvider, uint256 _tokens) public override notPartialPaused { + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + + // Transfer tokens to stake from caller to this contract + TokenUtils.pullTokens(_graphToken(), msg.sender, _tokens); + + // Stake the transferred tokens + _stake(_serviceProvider, _tokens); + } + + function setProvisionParameters( + address _serviceProvider, + address _verifier, + uint32 _maxVerifierCut, + uint64 _thawingPeriod + ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) { + Provision storage prov = provisions[_serviceProvider][_verifier]; + prov.maxVerifierCutPending = _maxVerifierCut; + prov.thawingPeriodPending = _thawingPeriod; + emit ProvisionParametersStaged(_serviceProvider, _verifier, _maxVerifierCut, _thawingPeriod); + } + + function acceptProvisionParameters(address _serviceProvider) external override notPartialPaused { + address verifier = msg.sender; + Provision storage prov = provisions[_serviceProvider][verifier]; + prov.maxVerifierCut = prov.maxVerifierCutPending; + prov.thawingPeriod = prov.thawingPeriodPending; + emit ProvisionParametersSet(_serviceProvider, verifier, prov.maxVerifierCut, prov.thawingPeriod); + } + + /** + * @notice Deposit tokens on the service provider stake, on behalf of the service provider, provisioned + * to a specific verifier. The provider must have previously provisioned stake to that verifier. + * @param _serviceProvider Address of the indexer + * @param _verifier Address of the verifier + * @param _tokens Amount of tokens to stake + */ + function stakeToProvision( + address _serviceProvider, + address _verifier, + uint256 _tokens + ) external override notPartialPaused { + stakeTo(_serviceProvider, _tokens); + _addToProvision(_serviceProvider, _verifier, _tokens); + } + + /** + * @notice Provision stake to a verifier. The tokens will be locked with a thawing period + * and will be slashable by the verifier. This is the main mechanism to provision stake to a data + * service, where the data service is the verifier. + * This function can be called by the service provider or by an operator authorized by the provider + * for this specific verifier. + * @param _serviceProvider The service provider address + * @param _verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) + * @param _tokens The amount of tokens that will be locked and slashable + * @param _maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing + * @param _thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + */ + function provision( + address _serviceProvider, + address _verifier, + uint256 _tokens, + uint32 _maxVerifierCut, + uint64 _thawingPeriod + ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) { + if (getIdleStake(_serviceProvider) < _tokens) { + revert HorizonStakingInsufficientCapacity(); + } + + _createProvision(_serviceProvider, _tokens, _verifier, _maxVerifierCut, _thawingPeriod); + } + + /** + * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets). The tokens will be locked with a thawing period + * and will be slashable by the verifier. This is the main mechanism to provision stake to a data + * service, where the data service is the verifier. Only authorized verifiers can be used. + * This function can be called by the service provider or by an operator authorized by the provider + * for this specific verifier. + * @param _serviceProvider The service provider address + * @param _verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) + * @param _tokens The amount of tokens that will be locked and slashable + * @param _maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing + * @param _thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + */ + function provisionLocked( + address _serviceProvider, + address _verifier, + uint256 _tokens, + uint32 _maxVerifierCut, + uint64 _thawingPeriod + ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) { + if (getIdleStake(_serviceProvider) < _tokens) { + revert HorizonStakingInsufficientCapacity(); + } + if (!allowedLockedVerifiers[_verifier]) { + revert HorizonStakingInvalidVerifier(_verifier); + } + _createProvision(_serviceProvider, _tokens, _verifier, _maxVerifierCut, _thawingPeriod); + } + + /** + * @notice Add more tokens to an existing provision. + * This function can be called by the service provider or by an operator authorized by the provider + * for this specific verifier. + * @param _serviceProvider The service provider address + * @param _verifier The verifier address for which the tokens are provisioned + * @param _tokens The amount of tokens to add to the provision + */ + function addToProvision( + address _serviceProvider, + address _verifier, + uint256 _tokens + ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) { + _addToProvision(_serviceProvider, _verifier, _tokens); + } + + /** + * @notice Start thawing tokens to remove them from a provision. + * This function can be called by the service provider or by an operator authorized by the provider + * for this specific verifier. + * @param _serviceProvider The service provider address + * @param _verifier The verifier address for which the tokens are provisioned + * @param _tokens The amount of tokens to thaw + */ + function thaw( + address _serviceProvider, + address _verifier, + uint256 _tokens + ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) returns (bytes32) { + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + Provision storage prov = provisions[_serviceProvider][_verifier]; + ServiceProviderInternal storage serviceProvider = serviceProviders[_serviceProvider]; + bytes32 thawRequestId = keccak256( + abi.encodePacked(_serviceProvider, _verifier, serviceProvider.nextThawRequestNonce) + ); + serviceProvider.nextThawRequestNonce += 1; + ThawRequest storage thawRequest = thawRequests[thawRequestId]; + + require(getProviderTokensAvailable(_serviceProvider, _verifier) >= _tokens, "insufficient tokens available"); + prov.tokensThawing = prov.tokensThawing + _tokens; + + if (prov.sharesThawing == 0) { + thawRequest.shares = _tokens; + } else { + thawRequest.shares = (prov.sharesThawing * _tokens) / prov.tokensThawing; + } + + thawRequest.thawingUntil = uint64(block.timestamp + uint256(prov.thawingPeriod)); + prov.sharesThawing = prov.sharesThawing + thawRequest.shares; + + if (prov.nThawRequests >= MAX_THAW_REQUESTS) { + revert HorizonStakingTooManyThawRequests(); + } + if (prov.nThawRequests == 0) { + prov.firstThawRequestId = thawRequestId; + } else { + thawRequests[prov.lastThawRequestId].next = thawRequestId; + } + prov.lastThawRequestId = thawRequestId; + prov.nThawRequests += 1; + + emit ProvisionThawInitiated(_serviceProvider, _verifier, _tokens, thawRequest.thawingUntil, thawRequestId); + + return thawRequestId; + } + + /** + * @notice Get the amount of service provider's tokens in a provision that have finished thawing + * @param _serviceProvider The service provider address + * @param _verifier The verifier address for which the tokens are provisioned + */ + function getThawedTokens(address _serviceProvider, address _verifier) external view returns (uint256) { + Provision storage prov = provisions[_serviceProvider][_verifier]; + if (prov.nThawRequests == 0) { + return 0; + } + bytes32 thawRequestId = prov.firstThawRequestId; + uint256 tokens = 0; + while (thawRequestId != bytes32(0)) { + ThawRequest storage thawRequest = thawRequests[thawRequestId]; + if (thawRequest.thawingUntil <= block.timestamp) { + tokens += (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; + } else { + break; + } + thawRequestId = thawRequest.next; + } + return tokens; + } + + // moves thawed stake from a provision back into the provider's available stake + function deprovision( + address _serviceProvider, + address _verifier, + uint256 _tokens + ) external override notPartialPaused { + require(isAuthorized(msg.sender, _serviceProvider, _verifier), "!auth"); + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + _fulfillThawRequests(_serviceProvider, _verifier, _tokens); + } + + /** + * @notice Move already thawed stake from one provision into another provision + * This function can be called by the service provider or by an operator authorized by the provider + * for the two corresponding verifiers. + * The provider must have previously provisioned tokens to the new verifier. + * @param _serviceProvider The service provider address + * @param _oldVerifier The verifier address for which the tokens are currently provisioned + * @param _newVerifier The verifier address for which the tokens will be provisioned + * @param _tokens The amount of tokens to move + */ + function reprovision( + address _serviceProvider, + address _oldVerifier, + address _newVerifier, + uint256 _tokens + ) + external + override + notPartialPaused + onlyAuthorized(_serviceProvider, _oldVerifier) + onlyAuthorized(_serviceProvider, _newVerifier) + { + _fulfillThawRequests(_serviceProvider, _oldVerifier, _tokens); + _addToProvision(_serviceProvider, _newVerifier, _tokens); + } + + /** + * @notice Move idle stake back to the owner's account. + * If tokens were thawing they must be deprovisioned first. + * Stake is removed from the protocol. + * @param _tokens Amount of tokens to unstake + */ + function unstake(uint256 _tokens) external override notPaused { + address serviceProvider = msg.sender; + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + if (getIdleStake(serviceProvider) < _tokens) { + revert HorizonStakingInsufficientCapacity(); + } + + ServiceProviderInternal storage sp = serviceProviders[serviceProvider]; + uint256 stakedTokens = sp.tokensStaked; + // Check that the indexer's stake minus the tokens to unstake is sufficient + // to cover existing allocations + // TODO this is only needed until legacy allocations are closed, + // so we should remove it after the transition period + if ((stakedTokens - _tokens) < sp.__DEPRECATED_tokensAllocated) { + revert HorizonStakingInsufficientCapacityForLegacyAllocations(); + } + + // This is also only during the transition period: we need + // to ensure tokens stay locked after closing legacy allocations. + // After sufficient time (56 days?) we should remove the closeAllocation function + // and set the thawing period to 0. + uint256 lockingPeriod = __DEPRECATED_thawingPeriod; + if (lockingPeriod == 0) { + sp.tokensStaked = stakedTokens - _tokens; + TokenUtils.pushTokens(_graphToken(), serviceProvider, _tokens); + emit StakeWithdrawn(serviceProvider, _tokens); + } else { + // Before locking more tokens, withdraw any unlocked ones if possible + if (sp.__DEPRECATED_tokensLockedUntil != 0 && block.number >= sp.__DEPRECATED_tokensLockedUntil) { + _withdraw(serviceProvider); + } + // TODO remove after the transition period + // Take into account period averaging for multiple unstake requests + if (sp.__DEPRECATED_tokensLocked > 0) { + lockingPeriod = MathUtils.weightedAverageRoundingUp( + MathUtils.diffOrZero(sp.__DEPRECATED_tokensLockedUntil, block.number), // Remaining thawing period + sp.__DEPRECATED_tokensLocked, // Weighted by remaining unstaked tokens + lockingPeriod, // Thawing period + _tokens // Weighted by new tokens to unstake + ); + } + + // Update balances + sp.__DEPRECATED_tokensLocked = sp.__DEPRECATED_tokensLocked + _tokens; + sp.__DEPRECATED_tokensLockedUntil = block.number + lockingPeriod; + emit StakeLocked(serviceProvider, sp.__DEPRECATED_tokensLocked, sp.__DEPRECATED_tokensLockedUntil); + } + } + + /** + * @notice Slash a service provider. This can only be called by a verifier to which + * the provider has provisioned stake, and up to the amount of tokens they have provisioned. + * @dev If delegation slashing is disabled, and the amount of tokens is more than the + * provider's provisioned self-stake, the delegation slashing is skipped without reverting. + * @param _serviceProvider The service provider to slash + * @param _tokens The amount of tokens to slash + * @param _verifierCutAmount The amount of tokens to transfer instead of burning + * @param _verifierCutDestination The address to transfer the verifier cut to + */ + function slash( + address _serviceProvider, + uint256 _tokens, + uint256 _verifierCutAmount, + address _verifierCutDestination + ) external override notPartialPaused { + address verifier = msg.sender; + Provision storage prov = provisions[_serviceProvider][verifier]; + if (prov.tokens < _tokens) { + revert HorizonStakingInsufficientTokens(_tokens, prov.tokens); + } + + uint256 tokensToSlash = _tokens; + uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); + if (providerTokensSlashed > 0) { + require((prov.tokens * prov.maxVerifierCut) / MAX_PPM >= _verifierCutAmount, "verifier cut too high"); + if (_verifierCutAmount > 0) { + TokenUtils.pushTokens(_graphToken(), _verifierCutDestination, _verifierCutAmount); + emit VerifierCutSent(_serviceProvider, verifier, _verifierCutDestination, _verifierCutAmount); + } + TokenUtils.burnTokens(_graphToken(), providerTokensSlashed - _verifierCutAmount); + uint256 provisionFractionSlashed = (providerTokensSlashed * FIXED_POINT_PRECISION) / prov.tokens; + // TODO check for rounding issues + prov.tokensThawing = + (prov.tokensThawing * (FIXED_POINT_PRECISION - provisionFractionSlashed)) / + (FIXED_POINT_PRECISION); + prov.tokens = prov.tokens - providerTokensSlashed; + serviceProviders[_serviceProvider].tokensProvisioned = + serviceProviders[_serviceProvider].tokensProvisioned - + providerTokensSlashed; + serviceProviders[_serviceProvider].tokensStaked = + serviceProviders[_serviceProvider].tokensStaked - + providerTokensSlashed; + emit ProvisionSlashed(_serviceProvider, verifier, providerTokensSlashed); + } + + tokensToSlash = tokensToSlash - providerTokensSlashed; + if (tokensToSlash > 0) { + DelegationPoolInternal storage pool; + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + pool = legacyDelegationPools[_serviceProvider]; + } else { + pool = delegationPools[_serviceProvider][verifier]; + } + if (delegationSlashingEnabled) { + require(pool.tokens >= tokensToSlash, "insufficient delegated tokens"); + TokenUtils.burnTokens(_graphToken(), tokensToSlash); + uint256 delegationFractionSlashed = (tokensToSlash * FIXED_POINT_PRECISION) / pool.tokens; + pool.tokens = pool.tokens - tokensToSlash; + pool.tokensThawing = + (pool.tokensThawing * (FIXED_POINT_PRECISION - delegationFractionSlashed)) / + FIXED_POINT_PRECISION; + emit DelegationSlashed(_serviceProvider, verifier, tokensToSlash); + } else { + emit DelegationSlashingSkipped(_serviceProvider, verifier, tokensToSlash); + } + } + } + + /** + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param _operator The address to check for auth + * @param _serviceProvider The service provider on behalf of whom they're claiming to act + * @param _verifier The verifier / data service on which they're claiming to act + */ + function isAuthorized( + address _operator, + address _serviceProvider, + address _verifier + ) public view override returns (bool) { + if (_operator == _serviceProvider) { + return true; + } + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + return legacyOperatorAuth[_serviceProvider][_operator]; + } else { + return operatorAuth[_serviceProvider][_verifier][_operator]; + } + } + + // staked tokens that are currently not provisioned, aka idle stake + // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` + function getIdleStake(address serviceProvider) public view override returns (uint256 tokens) { + return + serviceProviders[serviceProvider].tokensStaked - + serviceProviders[serviceProvider].tokensProvisioned - + serviceProviders[serviceProvider].__DEPRECATED_tokensLocked; + } + + // provisioned tokens from the service provider that are not being thawed + // `Provision.tokens - Provision.tokensThawing` + function getProviderTokensAvailable( + address _serviceProvider, + address _verifier + ) public view override returns (uint256) { + return provisions[_serviceProvider][_verifier].tokens - provisions[_serviceProvider][_verifier].tokensThawing; + } + + function setAllowedLockedVerifier(address _verifier, bool _allowed) external onlyGovernor { + allowedLockedVerifiers[_verifier] = _allowed; + emit AllowedLockedVerifierSet(_verifier, _allowed); + } + + /** + * @notice Withdraw indexer tokens once the thawing period has passed. + * @dev This is only needed during the transition period while we still have + * a global lock. After that, unstake() will also withdraw. + */ + function withdraw() external override notPaused { + _withdraw(msg.sender); + } + + function delegate( + address _serviceProvider, + address _verifier, + uint256 _tokens, + uint256 _minSharesOut + ) public override notPartialPaused { + // Transfer tokens to stake from caller to this contract + TokenUtils.pullTokens(_graphToken(), msg.sender, _tokens); + _delegate(_serviceProvider, _verifier, _tokens, _minSharesOut); + } + + // For backwards compatibility, delegates to the subgraph data service + // (Note this one doesn't have splippage/rounding protection!) + function delegate(address _serviceProvider, uint256 _tokens) external { + delegate(_serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, _tokens, 0); + } + + // For backwards compatibility, undelegates from the subgraph data service + function undelegate(address _serviceProvider, uint256 _shares) external { + undelegate(_serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, _shares); + } + + // For backwards compatibility, withdraws delegated tokens from the subgraph data service + function withdrawDelegated(address _serviceProvider, address _newServiceProvider) external { + withdrawDelegated(_serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, _newServiceProvider, 0); + } + + function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) internal { + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + // TODO: remove this after L2 transfer tool for delegation is removed + if (_tokens < MIN_DELEGATION) { + revert HorizonStakingInsufficientTokens(MIN_DELEGATION, _tokens); + } + if (provisions[_serviceProvider][_verifier].tokens == 0) { + revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); + } + + DelegationPoolInternal storage pool; + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + pool = legacyDelegationPools[_serviceProvider]; + } else { + pool = delegationPools[_serviceProvider][_verifier]; + } + Delegation storage delegation = pool.delegators[msg.sender]; + + // Calculate shares to issue + uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); + if (shares == 0 || shares < _minSharesOut) { + revert HorizonStakingSlippageProtection(_minSharesOut, shares); + } + + pool.tokens = pool.tokens + _tokens; + pool.shares = pool.shares + shares; + + delegation.shares = delegation.shares + shares; + + emit TokensDelegated(_serviceProvider, _verifier, msg.sender, _tokens); + } + + // undelegate tokens from a service provider + // the shares are burned and replaced with shares in the thawing pool + function undelegate(address _serviceProvider, address _verifier, uint256 _shares) public override notPartialPaused { + require(_shares > 0, "!shares"); + DelegationPoolInternal storage pool; + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + pool = legacyDelegationPools[_serviceProvider]; + } else { + pool = delegationPools[_serviceProvider][_verifier]; + } + Delegation storage delegation = pool.delegators[msg.sender]; + require(delegation.shares >= _shares, "!shares-avail"); + + uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; + + uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); + pool.tokensThawing = pool.tokensThawing + tokens; + + pool.shares = pool.shares - _shares; + pool.sharesThawing = pool.sharesThawing + thawingShares; + + delegation.shares = delegation.shares - _shares; + // TODO: remove this when L2 transfer tools are removed + if (delegation.shares != 0) { + uint256 remainingTokens = (delegation.shares * (pool.tokens - pool.tokensThawing)) / pool.shares; + require(remainingTokens >= MIN_DELEGATION, "!minimum-delegation"); + } + bytes32 thawRequestId = keccak256( + abi.encodePacked(_serviceProvider, _verifier, msg.sender, delegation.nextThawRequestNonce) + ); + delegation.nextThawRequestNonce += 1; + ThawRequest storage thawRequest = thawRequests[thawRequestId]; + thawRequest.shares = thawingShares; + thawRequest.thawingUntil = uint64( + block.timestamp + uint256(provisions[_serviceProvider][_verifier].thawingPeriod) + ); + require(delegation.nThawRequests < MAX_THAW_REQUESTS, "max thaw requests"); + if (delegation.nThawRequests == 0) { + delegation.firstThawRequestId = thawRequestId; + } else { + thawRequests[delegation.lastThawRequestId].next = thawRequestId; + } + delegation.lastThawRequestId = thawRequestId; + unchecked { + delegation.nThawRequests += 1; + } + emit TokensUndelegated(_serviceProvider, _verifier, msg.sender, tokens); + } + + /** + * @notice Add tokens to a delegation pool (without getting shares). + * Used by data services to pay delegation fees/rewards. + * @param _serviceProvider The service provider address + * @param _verifier The verifier address for which the tokens are provisioned + * @param _tokens The amount of tokens to add to the delegation pool + */ + function addToDelegationPool( + address _serviceProvider, + address _verifier, + uint256 _tokens + ) external override notPartialPaused { + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + DelegationPoolInternal storage pool; + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + pool = legacyDelegationPools[_serviceProvider]; + } else { + pool = delegationPools[_serviceProvider][_verifier]; + } + pool.tokens = pool.tokens + _tokens; + emit TokensAddedToDelegationPool(_serviceProvider, _verifier, _tokens); + } + + function withdrawDelegated( + address _serviceProvider, + address _verifier, + address _newServiceProvider, + uint256 _minSharesForNewProvider + ) public override notPartialPaused { + DelegationPoolInternal storage pool; + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + pool = legacyDelegationPools[_serviceProvider]; + } else { + pool = delegationPools[_serviceProvider][_verifier]; + } + Delegation storage delegation = pool.delegators[msg.sender]; + uint256 thawedTokens = 0; + + uint256 sharesThawing = pool.sharesThawing; + uint256 tokensThawing = pool.tokensThawing; + require(delegation.nThawRequests > 0, "no thaw requests"); + bytes32 thawRequestId = delegation.firstThawRequestId; + while (thawRequestId != bytes32(0)) { + ThawRequest storage thawRequest = thawRequests[thawRequestId]; + if (thawRequest.thawingUntil <= block.timestamp) { + uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; + tokensThawing = tokensThawing - tokens; + sharesThawing = sharesThawing - thawRequest.shares; + thawedTokens = thawedTokens + tokens; + delete thawRequests[thawRequestId]; + delegation.firstThawRequestId = thawRequest.next; + delegation.nThawRequests -= 1; + if (delegation.nThawRequests == 0) { + delegation.lastThawRequestId = bytes32(0); + } + } else { + break; + } + thawRequestId = thawRequest.next; + } + + pool.tokens = pool.tokens - thawedTokens; + pool.sharesThawing = sharesThawing; + pool.tokensThawing = tokensThawing; + + if (_newServiceProvider != address(0)) { + _delegate(_newServiceProvider, _verifier, thawedTokens, _minSharesForNewProvider); + } else { + TokenUtils.pushTokens(_graphToken(), msg.sender, thawedTokens); + } + emit DelegatedTokensWithdrawn(_serviceProvider, _verifier, msg.sender, thawedTokens); + } + + function setDelegationSlashingEnabled(bool _enabled) external override onlyGovernor { + delegationSlashingEnabled = _enabled; + emit DelegationSlashingEnabled(_enabled); + } + + // To be called at the end of the transition period, to set the deprecated thawing period to 0 + function clearThawingPeriod() external onlyGovernor { + __DEPRECATED_thawingPeriod = 0; + emit ParameterUpdated("thawingPeriod"); + } + + function setMaxThawingPeriod(uint64 _maxThawingPeriod) external override onlyGovernor { + maxThawingPeriod = _maxThawingPeriod; + emit ParameterUpdated("maxThawingPeriod"); + } + + /** + * @dev Withdraw indexer tokens once the thawing period has passed. + * @param _indexer Address of indexer to withdraw funds from + */ + function _withdraw(address _indexer) private { + // Get tokens available for withdraw and update balance + ServiceProviderInternal storage sp = serviceProviders[_indexer]; + uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; + require(tokensToWithdraw > 0, "!tokens"); + require(block.number >= sp.__DEPRECATED_tokensLockedUntil, "locked"); + + // Reset locked tokens + sp.__DEPRECATED_tokensLocked = 0; + sp.__DEPRECATED_tokensLockedUntil = 0; + + sp.tokensStaked = sp.tokensStaked - tokensToWithdraw; + + // Return tokens to the indexer + TokenUtils.pushTokens(_graphToken(), _indexer, tokensToWithdraw); + + emit StakeWithdrawn(_indexer, tokensToWithdraw); + } + + /** + * @dev Creates a provision + */ + function _createProvision( + address _serviceProvider, + uint256 _tokens, + address _verifier, + uint32 _maxVerifierCut, + uint64 _thawingPeriod + ) internal { + require(_tokens >= MIN_PROVISION_SIZE, "!tokens"); + require(_maxVerifierCut <= MAX_MAX_VERIFIER_CUT, "maxVerifierCut too high"); + require(_thawingPeriod <= maxThawingPeriod, "thawingPeriod too high"); + provisions[_serviceProvider][_verifier] = Provision({ + tokens: _tokens, + tokensThawing: 0, + sharesThawing: 0, + maxVerifierCut: _maxVerifierCut, + thawingPeriod: _thawingPeriod, + createdAt: uint64(block.timestamp), + firstThawRequestId: bytes32(0), + lastThawRequestId: bytes32(0), + nThawRequests: 0, + maxVerifierCutPending: _maxVerifierCut, + thawingPeriodPending: _thawingPeriod + }); + + ServiceProviderInternal storage sp = serviceProviders[_serviceProvider]; + sp.tokensProvisioned = sp.tokensProvisioned + _tokens; + + emit ProvisionCreated(_serviceProvider, _verifier, _tokens, _maxVerifierCut, _thawingPeriod); + } + + function _fulfillThawRequests(address _serviceProvider, address _verifier, uint256 _tokens) internal { + Provision storage prov = provisions[_serviceProvider][_verifier]; + uint256 tokensRemaining = _tokens; + uint256 sharesThawing = prov.sharesThawing; + uint256 tokensThawing = prov.tokensThawing; + while (tokensRemaining > 0) { + require(prov.nThawRequests > 0, "not enough thawed tokens"); + bytes32 thawRequestId = prov.firstThawRequestId; + ThawRequest storage thawRequest = thawRequests[thawRequestId]; + require(thawRequest.thawingUntil <= block.timestamp, "thawing period not over"); + uint256 thawRequestTokens = (thawRequest.shares * tokensThawing) / sharesThawing; + if (thawRequestTokens <= tokensRemaining) { + tokensRemaining = tokensRemaining - thawRequestTokens; + delete thawRequests[thawRequestId]; + prov.firstThawRequestId = thawRequest.next; + prov.nThawRequests -= 1; + tokensThawing = tokensThawing - thawRequestTokens; + sharesThawing = sharesThawing - thawRequest.shares; + if (prov.nThawRequests == 0) { + prov.lastThawRequestId = bytes32(0); + } + } else { + // TODO check for potential rounding issues + uint256 sharesRemoved = (tokensRemaining * prov.sharesThawing) / prov.tokensThawing; + thawRequest.shares = thawRequest.shares - sharesRemoved; + tokensThawing = tokensThawing - tokensRemaining; + sharesThawing = sharesThawing - sharesRemoved; + } + emit ProvisionThawFulfilled( + _serviceProvider, + _verifier, + MathUtils.min(thawRequestTokens, tokensRemaining), + thawRequestId + ); + } + prov.sharesThawing = sharesThawing; + prov.tokensThawing = tokensThawing; + prov.tokens = prov.tokens - _tokens; + serviceProviders[_serviceProvider].tokensProvisioned -= _tokens; + } + + function _addToProvision(address _serviceProvider, address _verifier, uint256 _tokens) internal { + Provision storage prov = provisions[_serviceProvider][_verifier]; + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + if (prov.createdAt == 0) { + revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); + } + if (getIdleStake(_serviceProvider) < _tokens) { + revert HorizonStakingInsufficientCapacity(); + } + + prov.tokens = prov.tokens + _tokens; + serviceProviders[_serviceProvider].tokensProvisioned = + serviceProviders[_serviceProvider].tokensProvisioned + + _tokens; + emit ProvisionIncreased(_serviceProvider, _verifier, _tokens); + } + + /** + * @dev Stake tokens on the service provider. + * TODO: Move to HorizonStaking after the transition period + * @param _serviceProvider Address of staking party + * @param _tokens Amount of tokens to stake + */ + function _stake(address _serviceProvider, uint256 _tokens) internal { + // Deposit tokens into the indexer stake + serviceProviders[_serviceProvider].tokensStaked = serviceProviders[_serviceProvider].tokensStaked + _tokens; + + emit StakeDeposited(_serviceProvider, _tokens); + } + + function _graphToken() internal view returns (IGraphToken) { + return IGraphToken(GRAPH_TOKEN); + } +} diff --git a/packages/horizon/contracts/HorizonStakingExtension.sol b/packages/horizon/contracts/HorizonStakingExtension.sol new file mode 100644 index 000000000..1ec8b2c45 --- /dev/null +++ b/packages/horizon/contracts/HorizonStakingExtension.sol @@ -0,0 +1,262 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { StakingBackwardsCompatibility } from "./StakingBackwardsCompatibility.sol"; +import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; +import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; +import { IHorizonStakingExtension } from "./IHorizonStakingExtension.sol"; +import { MathUtils } from "./utils/MathUtils.sol"; + +/** + * @title L2Staking contract + * @dev This contract is the L2 variant of the Staking contract. It adds a function + * to receive an indexer's stake or delegation from L1. Note that this contract inherits Staking, + * which uses a StakingExtension contract to implement the full IStaking interface through delegatecalls. + */ +contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStakingExtension, IL2StakingBase { + /// @dev Minimum amount of tokens that can be delegated + uint256 private constant MINIMUM_DELEGATION = 1e18; + + /** + * @dev Checks that the sender is the L2GraphTokenGateway as configured on the Controller. + */ + modifier onlyL2Gateway() { + require(msg.sender == GRAPH_TOKEN_GATEWAY, "ONLY_GATEWAY"); + _; + } + + constructor( + address _controller, + address _subgraphDataServiceAddress, + address _exponentialRebates + ) StakingBackwardsCompatibility(_controller, _subgraphDataServiceAddress, _exponentialRebates) {} + + /** + * @notice Receive ETH into the Staking contract: this will always revert + * @dev This function is only here to prevent ETH from being sent to the contract + */ + receive() external payable { + revert("RECEIVE_ETH_NOT_ALLOWED"); + } + + // total staked tokens to the provider + // `ServiceProvider.tokensStaked + function getStake(address serviceProvider) external view override returns (uint256) { + return serviceProviders[serviceProvider].tokensStaked; + } + + // provisioned tokens from delegators that are not being thawed + // `Provision.delegatedTokens - Provision.delegatedTokensThawing` + function getDelegatedTokensAvailable( + address _serviceProvider, + address _verifier + ) public view override returns (uint256) { + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + return + legacyDelegationPools[_serviceProvider].tokens - + (legacyDelegationPools[_serviceProvider].tokensThawing); + } + return + delegationPools[_serviceProvider][_verifier].tokens - + (delegationPools[_serviceProvider][_verifier].tokensThawing); + } + + // provisioned tokens that are not being thawed (including provider tokens and delegation) + function getTokensAvailable( + address _serviceProvider, + address _verifier, + uint32 _delegationRatio + ) external view override returns (uint256) { + uint256 providerTokens = provisions[_serviceProvider][_verifier].tokens; + uint256 tokensDelegatedMax = providerTokens * (uint256(_delegationRatio)); + uint256 tokensDelegatedCapacity = MathUtils.min( + getDelegatedTokensAvailable(_serviceProvider, _verifier), + tokensDelegatedMax + ); + return providerTokens - provisions[_serviceProvider][_verifier].tokensThawing + tokensDelegatedCapacity; + } + + function getServiceProvider(address serviceProvider) external view override returns (ServiceProvider memory) { + ServiceProvider memory sp; + ServiceProviderInternal storage spInternal = serviceProviders[serviceProvider]; + sp.tokensStaked = spInternal.tokensStaked; + sp.tokensProvisioned = spInternal.tokensProvisioned; + sp.nextThawRequestNonce = spInternal.nextThawRequestNonce; + return sp; + } + + /** + * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * @param _operator Address to authorize or unauthorize + * @param _verifier The verifier / data service on which they'll be allowed to operate + * @param _allowed Whether the operator is authorized or not + */ + function setOperator(address _operator, address _verifier, bool _allowed) external override { + require(_operator != msg.sender, "operator == sender"); + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + legacyOperatorAuth[msg.sender][_operator] = _allowed; + } else { + operatorAuth[msg.sender][_verifier][_operator] = _allowed; + } + emit OperatorSet(msg.sender, _operator, _verifier, _allowed); + } + + // for vesting contracts + function setOperatorLocked(address _operator, address _verifier, bool _allowed) external override { + require(_operator != msg.sender, "operator == sender"); + require(allowedLockedVerifiers[_verifier], "VERIFIER_NOT_ALLOWED"); + operatorAuth[msg.sender][_verifier][_operator] = _allowed; + emit OperatorSet(msg.sender, _operator, _verifier, _allowed); + } + + function getMaxThawingPeriod() external view override returns (uint64) { + return maxThawingPeriod; + } + + /** + * @notice Receive tokens with a callhook from the bridge. + * @dev The encoded _data can contain information about an indexer's stake + * or a delegator's delegation. + * See L1MessageCodes in IL2Staking for the supported messages. + * @param _from Token sender in L1 + * @param _amount Amount of tokens that were transferred + * @param _data ABI-encoded callhook data which must include a uint8 code and either a ReceiveIndexerStakeData or ReceiveDelegationData struct. + */ + function onTokenTransfer( + address _from, + uint256 _amount, + bytes calldata _data + ) external override notPartialPaused onlyL2Gateway { + require(_from == counterpartStakingAddress, "ONLY_L1_STAKING_THROUGH_BRIDGE"); + (uint8 code, bytes memory functionData) = abi.decode(_data, (uint8, bytes)); + + if (code == uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_INDEXER_STAKE_CODE)) { + IL2StakingTypes.ReceiveIndexerStakeData memory indexerData = abi.decode( + functionData, + (IL2StakingTypes.ReceiveIndexerStakeData) + ); + _receiveIndexerStake(_amount, indexerData); + } else if (code == uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE)) { + IL2StakingTypes.ReceiveDelegationData memory delegationData = abi.decode( + functionData, + (IL2StakingTypes.ReceiveDelegationData) + ); + _receiveDelegation(_amount, delegationData); + } else { + revert("INVALID_CODE"); + } + } + + function getDelegationPool( + address _serviceProvider, + address _verifier + ) external view override returns (DelegationPool memory) { + DelegationPool memory pool; + DelegationPoolInternal storage poolInternal; + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + poolInternal = legacyDelegationPools[_serviceProvider]; + } else { + poolInternal = delegationPools[_serviceProvider][_verifier]; + } + pool.tokens = poolInternal.tokens; + pool.shares = poolInternal.shares; + pool.tokensThawing = poolInternal.tokensThawing; + pool.sharesThawing = poolInternal.sharesThawing; + return pool; + } + + function getDelegation( + address _delegator, + address _serviceProvider, + address _verifier + ) external view override returns (Delegation memory) { + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + return legacyDelegationPools[_serviceProvider].delegators[_delegator]; + } else { + return delegationPools[_serviceProvider][_verifier].delegators[_delegator]; + } + } + + function getThawRequest(bytes32 _thawRequestId) external view returns (ThawRequest memory) { + return thawRequests[_thawRequestId]; + } + + function getProvision( + address _serviceProvider, + address _verifier + ) external view override returns (Provision memory) { + return provisions[_serviceProvider][_verifier]; + } + + function setDelegationFeeCut( + address _serviceProvider, + address _verifier, + uint256 _feeType, + uint256 _feeCut + ) external override { + delegationFeeCut[_serviceProvider][_verifier][_feeType] = _feeCut; + emit DelegationFeeCutSet(_serviceProvider, _verifier, _feeType, _feeCut); + } + + function getDelegationFeeCut( + address _serviceProvider, + address _verifier, + uint256 _feeType + ) external view override returns (uint256) { + return delegationFeeCut[_serviceProvider][_verifier][_feeType]; + } + + /** + * @dev Receive an Indexer's stake from L1. + * The specified amount is added to the indexer's stake; the indexer's + * address is specified in the _indexerData struct. + * @param _amount Amount of tokens that were transferred + * @param _indexerData struct containing the indexer's address + */ + function _receiveIndexerStake( + uint256 _amount, + IL2StakingTypes.ReceiveIndexerStakeData memory _indexerData + ) internal { + address _indexer = _indexerData.indexer; + // Deposit tokens into the indexer stake + _stake(_indexer, _amount); + } + + /** + * @dev Receive a Delegator's delegation from L1. + * The specified amount is added to the delegator's delegation; the delegator's + * address and the indexer's address are specified in the _delegationData struct. + * Note that no delegation tax is applied here. + * @param _amount Amount of tokens that were transferred + * @param _delegationData struct containing the delegator's address and the indexer's address + */ + function _receiveDelegation( + uint256 _amount, + IL2StakingTypes.ReceiveDelegationData memory _delegationData + ) internal { + // Get the delegation pool of the indexer + DelegationPoolInternal storage pool = legacyDelegationPools[_delegationData.indexer]; + Delegation storage delegation = pool.delegators[_delegationData.delegator]; + + // Calculate shares to issue (without applying any delegation tax) + uint256 shares = (pool.tokens == 0) ? _amount : ((_amount * pool.shares) / pool.tokens); + + if (shares == 0 || _amount < MINIMUM_DELEGATION) { + // If no shares would be issued (probably a rounding issue or attack), + // or if the amount is under the minimum delegation (which could be part of a rounding attack), + // return the tokens to the delegator + _graphToken().transfer(_delegationData.delegator, _amount); + emit TransferredDelegationReturnedToDelegator(_delegationData.indexer, _delegationData.delegator, _amount); + } else { + // Update the delegation pool + pool.tokens = pool.tokens + _amount; + pool.shares = pool.shares + shares; + + // Update the individual delegation + delegation.shares = delegation.shares + shares; + + emit StakeDelegated(_delegationData.indexer, _delegationData.delegator, _amount, shares); + } + } +} diff --git a/packages/horizon/contracts/HorizonStakingStorage.sol b/packages/horizon/contracts/HorizonStakingStorage.sol new file mode 100644 index 000000000..6506429a7 --- /dev/null +++ b/packages/horizon/contracts/HorizonStakingStorage.sol @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { Managed } from "./Managed.sol"; +import { IStakingBackwardsCompatibility } from "./IStakingBackwardsCompatibility.sol"; +import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; + +/** + * @title HorizonStakingV1Storage + * @notice This contract holds all the storage variables for the Staking contract, version 1 + */ +// solhint-disable-next-line max-states-count +abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { + // -- Staking -- + + /// @dev Minimum amount of tokens an indexer needs to stake. + /// Deprecated, now enforced by each data service (verifier) + uint256 internal __DEPRECATED_minimumIndexerStake; + + /// @dev Time in blocks to unstake + /// Deprecated, now enforced by each data service (verifier) + uint32 internal __DEPRECATED_thawingPeriod; // in blocks + + /// @dev Percentage of fees going to curators + /// Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) + /// Deprecated, now enforced by each data service (verifier) + uint32 internal __DEPRECATED_curationPercentage; + + /// @dev Percentage of fees burned as protocol fee + /// Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) + /// Deprecated, now enforced by each data service (verifier) + uint32 internal __DEPRECATED_protocolPercentage; + + /// @dev Period for allocation to be finalized + uint32 private __DEPRECATED_channelDisputeEpochs; // solhint-disable-line var-name-mixedcase + + /// @dev Maximum allocation time. Deprecated, allocations now live on the subgraph service contract. + uint32 internal __DEPRECATED_maxAllocationEpochs; + + /// @dev Rebate alpha numerator + /// Originally used for Cobb-Douglas rebates, now used for exponential rebates + /// Deprecated, now applied on the SubgraphService + uint32 internal __DEPRECATED_alphaNumerator; + + /// @dev Rebate alpha denominator + /// Originally used for Cobb-Douglas rebates, now used for exponential rebates + /// Deprecated, now applied on the SubgraphService + uint32 internal __DEPRECATED_alphaDenominator; + + /// @dev Service provider stakes : serviceProviderAddress => ServiceProvider + mapping(address => ServiceProviderInternal) internal serviceProviders; + + /// @dev Allocations : allocationID => Allocation + /// Deprecated, now applied on the SubgraphService + mapping(address => IStakingBackwardsCompatibility.Allocation) internal __DEPRECATED_allocations; + + /// @dev Subgraph Allocations: subgraphDeploymentID => tokens + /// Deprecated, now applied on the SubgraphService + mapping(bytes32 => uint256) internal __DEPRECATED_subgraphAllocations; + + /// @dev Rebate pools : epoch => Pool + /// Deprecated. + mapping(uint256 => uint256) private __DEPRECATED_rebates; // solhint-disable-line var-name-mixedcase + + // -- Slashing -- + + /// @dev List of addresses allowed to slash stakes + /// Deprecated, now each verifier can slash the corresponding provision. + mapping(address => bool) internal __DEPRECATED_slashers; + + // -- Delegation -- + + /// @dev Delegation capacity multiplier defined by the delegation ratio + /// Deprecated, now applied by each data service as needed. + uint32 internal __DEPRECATED_delegationRatio; + + /// @dev Time in blocks an indexer needs to wait to change delegation parameters (deprecated) + uint32 internal __DEPRECATED_delegationParametersCooldown; // solhint-disable-line var-name-mixedcase + + /// @dev Time in epochs a delegator needs to wait to withdraw delegated stake + /// Deprecated, now only enforced during a transition period + uint32 internal __DEPRECATED_delegationUnbondingPeriod; // in epochs + + /// @dev Percentage of tokens to tax a delegation deposit + /// Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) + /// Deprecated, no tax is applied now. + uint32 internal __DEPRECATED_delegationTaxPercentage; + + /// @dev Delegation pools : serviceProvider => DelegationPoolInternal + /// These are for the subgraph data service. + mapping(address => DelegationPoolInternal) internal legacyDelegationPools; + + // -- Operators -- + + /// @dev Legacy operator auth : indexer => operator => is authorized + mapping(address => mapping(address => bool)) internal legacyOperatorAuth; + + // -- Asset Holders -- + + /// @dev DEPRECATED: Allowed AssetHolders: assetHolder => is allowed + mapping(address => bool) private __DEPRECATED_assetHolders; // solhint-disable-line var-name-mixedcase + + /// @dev Destination of accrued rewards : beneficiary => rewards destination + /// Deprecated, defined by each data service as needed + mapping(address => address) internal __DEPRECATED_rewardsDestination; + + /// @dev Address of the counterpart Staking contract on L1/L2 + address internal counterpartStakingAddress; + /// @dev Address of the StakingExtension implementation + address internal __DEPRECATED_extensionImpl; + + // Additional rebate parameters for exponential rebates + uint32 internal __DEPRECATED_lambdaNumerator; + uint32 internal __DEPRECATED_lambdaDenominator; + + /// Maximum thawing period, in seconds, for a provision + uint64 internal maxThawingPeriod; + + /// @dev Provisions from each service provider for each data service + /// ServiceProvider => Verifier => Provision + mapping(address => mapping(address => Provision)) internal provisions; + + /// @dev Delegation fee cuts for each service provider on each provision, by fee type: + /// ServiceProvider => Verifier => Fee Type => Fee Cut. + /// This is the effective delegator fee cuts for each (data-service-defined) fee type (e.g. indexing fees, query fees). + /// This is in PPM and is the cut taken by the indexer from the fees that correspond to delegators. + /// (based on stake vs delegated stake proportion). + /// The cuts are applied in GraphPayments so apply to all data services that use it. + mapping(address => mapping(address => mapping(uint256 => uint256))) public delegationFeeCut; + + mapping(bytes32 => ThawRequest) internal thawRequests; + + // indexer => verifier => operator => authorized + mapping(address => mapping(address => mapping(address => bool))) internal operatorAuth; + + // governance enables or disables delegation slashing with this flag + bool public delegationSlashingEnabled; + + // delegation pools for each service provider and verifier + mapping(address => mapping(address => DelegationPoolInternal)) internal delegationPools; + + // allowed verifiers for locked provisions (i.e. from GraphTokenLockWallets) + mapping(address => bool) internal allowedLockedVerifiers; +} diff --git a/packages/horizon/contracts/IGraphToken.sol b/packages/horizon/contracts/IGraphToken.sol new file mode 100644 index 000000000..fd0b0a553 --- /dev/null +++ b/packages/horizon/contracts/IGraphToken.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +interface IGraphToken is IERC20 { + // -- Mint and Burn -- + + function burn(uint256 amount) external; + + function burnFrom(address _from, uint256 amount) external; + + function mint(address _to, uint256 _amount) external; + + // -- Mint Admin -- + + function addMinter(address _account) external; + + function removeMinter(address _account) external; + + function renounceMinter() external; + + function isMinter(address _account) external view returns (bool); + + // -- Permit -- + + function permit( + address _owner, + address _spender, + uint256 _value, + uint256 _deadline, + uint8 _v, + bytes32 _r, + bytes32 _s + ) external; + + // -- Allowance -- + + function increaseAllowance(address spender, uint256 addedValue) external returns (bool); + + function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); +} diff --git a/packages/horizon/contracts/IHorizonStaking.sol b/packages/horizon/contracts/IHorizonStaking.sol new file mode 100644 index 000000000..2c9dab033 --- /dev/null +++ b/packages/horizon/contracts/IHorizonStaking.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity >=0.6.12 <0.9.0; +pragma abicoder v2; + +import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; +import { IHorizonStakingExtension } from "./IHorizonStakingExtension.sol"; + +interface IHorizonStaking is IHorizonStakingBase, IHorizonStakingExtension {} diff --git a/packages/horizon/contracts/IHorizonStakingBase.sol b/packages/horizon/contracts/IHorizonStakingBase.sol new file mode 100644 index 000000000..1fc539f96 --- /dev/null +++ b/packages/horizon/contracts/IHorizonStakingBase.sol @@ -0,0 +1,236 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity >=0.6.12 <0.9.0; +pragma abicoder v2; + +import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; + +interface IHorizonStakingBase is IHorizonStakingTypes { + /** + * @dev Emitted when `serviceProvider` stakes `tokens` amount. + */ + event StakeDeposited(address indexed serviceProvider, uint256 tokens); + + /** + * @dev Emitted when `serviceProvider` withdraws `tokens` amount. + */ + event StakeWithdrawn(address indexed serviceProvider, uint256 tokens); + + /** + * @dev Emitted when `serviceProvider` locks `tokens` amount until `until`. + */ + event StakeLocked(address indexed serviceProvider, uint256 tokens, uint256 until); + + /** + * @dev Emitted when a service provider provisions staked tokens to a verifier + */ + event ProvisionCreated( + address indexed serviceProvider, + address indexed verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ); + + /** + * @dev Emitted when a service provider increases the tokens in a provision + */ + event ProvisionIncreased(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + /** + * @dev Emitted when a thawing request is initiated by a service provider + */ + event ProvisionThawInitiated( + address indexed serviceProvider, + address indexed verifier, + uint256 tokens, + uint64 thawingUntil, + bytes32 indexed thawRequestId + ); + + /** + * @dev Emitted when a service provider removes tokens from a provision after thawing + */ + event ProvisionThawFulfilled( + address indexed serviceProvider, + address indexed verifier, + uint256 tokens, + bytes32 indexed thawRequestId + ); + + event ProvisionSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + event DelegationSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + event DelegationSlashingSkipped(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + event VerifierCutSent( + address indexed serviceProvider, + address indexed verifier, + address indexed destination, + uint256 tokens + ); + + event TokensDelegated( + address indexed serviceProvider, + address indexed verifier, + address indexed delegator, + uint256 tokens + ); + + event TokensUndelegated( + address indexed serviceProvider, + address indexed verifier, + address indexed delegator, + uint256 tokens + ); + + event DelegatedTokensWithdrawn( + address indexed serviceProvider, + address indexed verifier, + address indexed delegator, + uint256 tokens + ); + + event DelegationSlashingEnabled(bool enabled); + + event AllowedLockedVerifierSet(address verifier, bool allowed); + + event TokensAddedToDelegationPool(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + event ProvisionParametersStaged( + address indexed serviceProvider, + address indexed verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ); + + event ProvisionParametersSet( + address indexed serviceProvider, + address indexed verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ); + + // deposit stake + function stake(uint256 _tokens) external; + + function stakeTo(address _serviceProvider, uint256 _tokens) external; + + // can be called by anyone if the indexer has provisioned stake to this verifier + function stakeToProvision(address _serviceProvider, address _verifier, uint256 _tokens) external; + + // create a provision + function provision( + address _serviceProvider, + address _verifier, + uint256 _tokens, + uint32 _maxVerifierCut, + uint64 _thawingPeriod + ) external; + + /** + * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets). The tokens will be locked with a thawing period + * and will be slashable by the verifier. This is the main mechanism to provision stake to a data + * service, where the data service is the verifier. Only authorized verifiers can be used. + * This function can be called by the service provider or by an operator authorized by the provider + * for this specific verifier. + * @param _serviceProvider The service provider address + * @param _verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) + * @param _tokens The amount of tokens that will be locked and slashable + * @param _maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing + * @param _thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + */ + function provisionLocked( + address _serviceProvider, + address _verifier, + uint256 _tokens, + uint32 _maxVerifierCut, + uint64 _thawingPeriod + ) external; + + // initiate a thawing to remove tokens from a provision + function thaw(address _serviceProvider, address _verifier, uint256 _tokens) external returns (bytes32); + + // add more tokens from idle stake to an existing provision + function addToProvision(address _serviceProvider, address _verifier, uint256 _tokens) external; + + // moves thawed stake from a provision back into the provider's available stake + function deprovision(address _serviceProvider, address _verifier, uint256 _tokens) external; + + // moves thawed stake from one provision into another provision + function reprovision( + address _serviceProvider, + address _oldVerifier, + address _newVerifier, + uint256 _tokens + ) external; + + // moves thawed stake back to the owner's account - stake is removed from the protocol + function unstake(uint256 _tokens) external; + + // delegate tokens to a provider on a data service + function delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) external; + + // undelegate (thaw) delegated tokens from a provision + function undelegate(address _serviceProvider, address _verifier, uint256 _shares) external; + + // withdraw delegated tokens after thawing + function withdrawDelegated( + address _serviceProvider, + address _verifier, + address _newServiceProvider, + uint256 _minSharesForNewProvider + ) external; + + function slash( + address _serviceProvider, + uint256 _tokens, + uint256 _verifierCutAmount, + address _verifierCutDestination + ) external; + + // staked tokens that are currently not provisioned, aka idle stake + // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` + function getIdleStake(address _serviceProvider) external view returns (uint256 tokens); + + /** + * @notice Withdraw indexer tokens once the thawing period has passed. + * @dev This is only needed during the transition period while we still have + * a global lock. After that, unstake() will also withdraw. + */ + function withdraw() external; + + function setDelegationSlashingEnabled(bool _enabled) external; + + /** + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param _operator The address to check for auth + * @param _serviceProvider The service provider on behalf of whom they're claiming to act + * @param _verifier The verifier / data service on which they're claiming to act + */ + function isAuthorized(address _operator, address _serviceProvider, address _verifier) external view returns (bool); + + function getProviderTokensAvailable(address _serviceProvider, address _verifier) external view returns (uint256); + function setMaxThawingPeriod(uint64 _maxThawingPeriod) external; + + function setAllowedLockedVerifier(address _verifier, bool _allowed) external; + + /** + * @notice Add tokens to a delegation pool (without getting shares). + * Used by data services to pay delegation fees/rewards. + * @param _serviceProvider The service provider address + * @param _verifier The verifier address for which the tokens are provisioned + * @param _tokens The amount of tokens to add to the delegation pool + */ + function addToDelegationPool(address _serviceProvider, address _verifier, uint256 _tokens) external; + + function setProvisionParameters( + address _serviceProvider, + address _verifier, + uint32 _maxVerifierCut, + uint64 _thawingPeriod + ) external; + + function acceptProvisionParameters(address _serviceProvider) external; +} diff --git a/packages/horizon/contracts/IHorizonStakingExtension.sol b/packages/horizon/contracts/IHorizonStakingExtension.sol new file mode 100644 index 000000000..546f9fefa --- /dev/null +++ b/packages/horizon/contracts/IHorizonStakingExtension.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity >=0.6.12 <0.9.0; +pragma abicoder v2; + +import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; + +interface IHorizonStakingExtension { + /** + * @dev Emitted when an operator is allowed or denied by a service provider for a particular data service + */ + event OperatorSet(address indexed serviceProvider, address indexed operator, address verifier, bool allowed); + + event DelegationFeeCutSet( + address indexed serviceProvider, + address indexed verifier, + uint256 feeType, + uint256 feeCut + ); + + function getStake(address serviceProvider) external view returns (uint256); + + function getDelegatedTokensAvailable(address _serviceProvider, address _verifier) external view returns (uint256); + function getTokensAvailable( + address _serviceProvider, + address _verifier, + uint32 _delegationRatio + ) external view returns (uint256); + + function getServiceProvider( + address serviceProvider + ) external view returns (IHorizonStakingTypes.ServiceProvider memory); + + /** + * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * @param _operator Address to authorize or unauthorize + * @param _verifier The verifier / data service on which they'll be allowed to operate + * @param _allowed Whether the operator is authorized or not + */ + function setOperator(address _operator, address _verifier, bool _allowed) external; + + // for vesting contracts + function setOperatorLocked(address _operator, address _verifier, bool _allowed) external; + + function getMaxThawingPeriod() external view returns (uint64); + + function getDelegationPool( + address _serviceProvider, + address _verifier + ) external view returns (IHorizonStakingTypes.DelegationPool memory); + function getDelegation( + address _delegator, + address _serviceProvider, + address _verifier + ) external view returns (IHorizonStakingTypes.Delegation memory); + function getThawRequest(bytes32 _thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory); + function getProvision( + address _serviceProvider, + address _verifier + ) external view returns (IHorizonStakingTypes.Provision memory); + + function setDelegationFeeCut( + address _serviceProvider, + address _verifier, + uint256 _feeType, + uint256 _feeCut + ) external; + + function getDelegationFeeCut( + address _serviceProvider, + address _verifier, + uint256 _feeType + ) external view returns (uint256); +} diff --git a/packages/horizon/contracts/IHorizonStakingTypes.sol b/packages/horizon/contracts/IHorizonStakingTypes.sol new file mode 100644 index 000000000..f58a004b7 --- /dev/null +++ b/packages/horizon/contracts/IHorizonStakingTypes.sol @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity >=0.6.12 <0.9.0; +pragma abicoder v2; + +interface IHorizonStakingTypes { + struct Provision { + // service provider tokens in the provision + uint256 tokens; + // service provider tokens that are being thawed (and will stop being slashable soon) + uint256 tokensThawing; + // shares representing the thawing tokens + uint256 sharesThawing; + // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed + uint32 maxVerifierCut; + // time, in seconds, tokens must thaw before being withdrawn + uint64 thawingPeriod; + uint64 createdAt; + bytes32 firstThawRequestId; + bytes32 lastThawRequestId; + uint256 nThawRequests; + // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed + uint32 maxVerifierCutPending; + // time, in seconds, tokens must thaw before being withdrawn + uint64 thawingPeriodPending; + } + + struct ServiceProvider { + // Tokens on the provider stake (staked by the provider) + uint256 tokensStaked; + // tokens used in a provision + uint256 tokensProvisioned; + // Next nonce to be used to generate thaw request IDs + uint256 nextThawRequestNonce; + } + + struct DelegationPoolInternal { + uint32 __DEPRECATED_cooldownBlocks; // solhint-disable-line var-name-mixedcase + uint32 __DEPRECATED_indexingRewardCut; // in PPM + uint32 __DEPRECATED_queryFeeCut; // in PPM + uint256 __DEPRECATED_updatedAtBlock; // Block when the pool was last updated + uint256 tokens; // Total tokens as pool reserves + uint256 shares; // Total shares minted in the pool + mapping(address => Delegation) delegators; // Mapping of delegator => Delegation + uint256 tokensThawing; // Tokens thawing in the pool + uint256 sharesThawing; // Shares representing the thawing tokens + } + + struct DelegationPool { + uint256 tokens; // Total tokens as pool reserves + uint256 shares; // Total shares minted in the pool + uint256 tokensThawing; // Tokens thawing in the pool + uint256 sharesThawing; // Shares representing the thawing tokens + } + + struct Delegation { + uint256 shares; // Shares owned by a delegator in the pool + uint256 __DEPRECATED_tokensLocked; // Tokens locked for undelegation + uint256 __DEPRECATED_tokensLockedUntil; // Epoch when locked tokens can be withdrawn + bytes32 firstThawRequestId; + bytes32 lastThawRequestId; + uint256 nThawRequests; + uint256 nextThawRequestNonce; + } + + struct ThawRequest { + // shares that represent the tokens being thawed + uint256 shares; + // the timestamp when the thawed funds can be removed from the provision + uint64 thawingUntil; + // id of the next thaw request in the linked list + bytes32 next; + } + + // the new "Indexer" struct + struct ServiceProviderInternal { + // Tokens on the Service Provider stake (staked by the provider) + uint256 tokensStaked; + // Tokens used in allocations + uint256 __DEPRECATED_tokensAllocated; + // Tokens locked for withdrawal subject to thawing period + uint256 __DEPRECATED_tokensLocked; + // Block when locked tokens can be withdrawn + uint256 __DEPRECATED_tokensLockedUntil; + // tokens used in a provision + uint256 tokensProvisioned; + // Next nonce to be used to generate thaw request IDs + uint256 nextThawRequestNonce; + } +} diff --git a/packages/horizon/contracts/IManaged.sol b/packages/horizon/contracts/IManaged.sol new file mode 100644 index 000000000..5aa086ba7 --- /dev/null +++ b/packages/horizon/contracts/IManaged.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity >=0.6.12 <0.9.0; +pragma abicoder v2; + +import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; + +/** + * @title Managed Interface + * @dev Interface for contracts that can be managed by a controller. + */ +interface IManaged { + /** + * @notice (Deprecated) Set the controller that manages this contract + * @dev Only the current controller can set a new controller + * @param _controller Address of the new controller + */ + function setController(address _controller) external; + + /** + * @notice Get the Controller that manages this contract + * @return The Controller as an IController interface + */ + function controller() external view returns (IController); +} diff --git a/packages/horizon/contracts/IStakingBackwardsCompatibility.sol b/packages/horizon/contracts/IStakingBackwardsCompatibility.sol new file mode 100644 index 000000000..43c93662a --- /dev/null +++ b/packages/horizon/contracts/IStakingBackwardsCompatibility.sol @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity >=0.6.12 <0.9.0; +pragma abicoder v2; + +/** + * @title Base interface for the Staking contract. + * @dev This interface includes only what's implemented in the base Staking contract. + * It does not include the L1 and L2 specific functionality. It also does not include + * several functions that are implemented in the StakingExtension contract, and are called + * via delegatecall through the fallback function. See IStaking.sol for an interface + * that includes the full functionality. + */ +interface IStakingBackwardsCompatibility { + /** + * @dev Emitted when `delegator` delegated `tokens` to the `serviceProvider`, the delegator + * gets `shares` for the delegation pool proportionally to the tokens staked. + * This event is here for backwards compatibility, the tokens are delegated + * on the subgraph data service provision. + */ + event StakeDelegated(address indexed serviceProvider, address indexed delegator, uint256 tokens, uint256 shares); + + /** + * @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment + * An allocation is created in the allocate() function and closed in closeAllocation() + */ + struct Allocation { + address indexer; + bytes32 subgraphDeploymentID; + uint256 tokens; // Tokens allocated to a SubgraphDeployment + uint256 createdAtEpoch; // Epoch when it was created + uint256 closedAtEpoch; // Epoch when it was closed + uint256 collectedFees; // Collected fees for the allocation + uint256 __DEPRECATED_effectiveAllocation; // solhint-disable-line var-name-mixedcase + uint256 accRewardsPerAllocatedToken; // Snapshot used for reward calc + uint256 distributedRebates; // Collected rebates that have been rebated + } + /** + * @dev Emitted when `serviceProvider` stakes `tokens` amount. + */ + event StakeDeposited(address indexed serviceProvider, uint256 tokens); + + /** + * @dev Emitted when `serviceProvider` withdraws `tokens` amount. + */ + event StakeWithdrawn(address indexed serviceProvider, uint256 tokens); + + /** + * @dev Emitted when `serviceProvider` locks `tokens` amount until `until`. + */ + event StakeLocked(address indexed serviceProvider, uint256 tokens, uint256 until); + + /** + * @dev Emitted when `indexer` close an allocation in `epoch` for `allocationID`. + * An amount of `tokens` get unallocated from `subgraphDeploymentID`. + * This event also emits the POI (proof of indexing) submitted by the indexer. + * `isPublic` is true if the sender was someone other than the indexer. + */ + event AllocationClosed( + address indexed indexer, + bytes32 indexed subgraphDeploymentID, + uint256 epoch, + uint256 tokens, + address indexed allocationID, + address sender, + bytes32 poi, + bool isPublic + ); + + /** + * @dev Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`. + * `epoch` is the protocol epoch the rebate was collected on + * The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees` + * is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt. + * `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected + * and sent to the delegation pool. + */ + event RebateCollected( + address assetHolder, + address indexed indexer, + bytes32 indexed subgraphDeploymentID, + address indexed allocationID, + uint256 epoch, + uint256 tokens, + uint256 protocolTax, + uint256 curationFees, + uint256 queryFees, + uint256 queryRebates, + uint256 delegationRewards + ); + + /** + * @dev Emitted when `indexer` set `operator` access in the legacy contract, + * which now means only for the subgraph data service. + */ + event SetOperator(address indexed indexer, address indexed operator, bool allowed); + + /** + * @dev Possible states an allocation can be. + * States: + * - Null = indexer == address(0) + * - Active = not Null && tokens > 0 + * - Closed = Active && closedAtEpoch != 0 + */ + enum AllocationState { + Null, + Active, + Closed + } + + /** + * @notice Set the address of the counterpart (L1 or L2) staking contract. + * @dev This function can only be called by the governor. + * @param _counterpart Address of the counterpart staking contract in the other chain, without any aliasing. + */ + function setCounterpartStakingAddress(address _counterpart) external; + + /** + * @notice Close an allocation and free the staked tokens. + * To be eligible for rewards a proof of indexing must be presented. + * Presenting a bad proof is subject to slashable condition. + * To opt out of rewards set _poi to 0x0 + * @param _allocationID The allocation identifier + * @param _poi Proof of indexing submitted for the allocated period + */ + function closeAllocation(address _allocationID, bytes32 _poi) external; + + /** + * @notice Collect query fees from state channels and assign them to an allocation. + * Funds received are only accepted from a valid sender. + * @dev To avoid reverting on the withdrawal from channel flow this function will: + * 1) Accept calls with zero tokens. + * 2) Accept calls after an allocation passed the dispute period, in that case, all + * the received tokens are burned. + * @param _tokens Amount of tokens to collect + * @param _allocationID Allocation where the tokens will be assigned + */ + function collect(uint256 _tokens, address _allocationID) external; + + /** + * @notice Return true if operator is allowed for indexer. + * @param _operator Address of the operator + * @param _indexer Address of the indexer + * @return True if operator is allowed for indexer, false otherwise + */ + function isOperator(address _operator, address _indexer) external view returns (bool); + + /** + * @notice Getter that returns if an indexer has any stake. + * @param _indexer Address of the indexer + * @return True if indexer has staked tokens + */ + function hasStake(address _indexer) external view returns (bool); + + /** + * @notice Get the total amount of tokens staked by the indexer. + * @param _indexer Address of the indexer + * @return Amount of tokens staked by the indexer + */ + function getIndexerStakedTokens(address _indexer) external view returns (uint256); + + /** + * @notice Return the allocation by ID. + * @param _allocationID Address used as allocation identifier + * @return Allocation data + */ + function getAllocation(address _allocationID) external view returns (Allocation memory); + + /** + * @notice Return the current state of an allocation + * @param _allocationID Allocation identifier + * @return AllocationState enum with the state of the allocation + */ + function getAllocationState(address _allocationID) external view returns (AllocationState); + + /** + * @notice Return if allocationID is used. + * @param _allocationID Address used as signer by the indexer for an allocation + * @return True if allocationID already used + */ + function isAllocation(address _allocationID) external view returns (bool); + + /** + * @notice Return the total amount of tokens allocated to subgraph. + * @param _subgraphDeploymentID Deployment ID for the subgraph + * @return Total tokens allocated to subgraph + */ + function getSubgraphAllocatedTokens(bytes32 _subgraphDeploymentID) external view returns (uint256); +} diff --git a/packages/horizon/contracts/Managed.sol b/packages/horizon/contracts/Managed.sol new file mode 100644 index 000000000..858156bbd --- /dev/null +++ b/packages/horizon/contracts/Managed.sol @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; +import { IManaged } from "./IManaged.sol"; +import { GraphDirectory } from "./GraphDirectory.sol"; + +/** + * @title Graph Managed contract + * @dev The Managed contract provides an interface to interact with the Controller. + * Inspired by Livepeer: + * https://github.com/livepeer/protocol/blob/streamflow/contracts/Controller.sol + */ +abstract contract Managed is IManaged, GraphDirectory { + // -- State -- + + /// Controller that manages this contract + IController private __DEPRECATED_controller; + /// @dev Cache for the addresses of the contracts retrieved from the controller + mapping(bytes32 => address) private __DEPRECATED_addressCache; + /// @dev Gap for future storage variables + uint256[10] private __gap; + + // -- Events -- + + /// Emitted when a contract parameter has been updated + event ParameterUpdated(string param); + /// (Deprecated) Emitted when the controller address has been set + event SetController(address controller); + + ///(Deprecated) Emitted when contract with `nameHash` is synced to `contractAddress`. + event ContractSynced(bytes32 indexed nameHash, address contractAddress); + + error ManagedSetControllerDeprecated(); + + constructor(address _controller) GraphDirectory(_controller) {} + + function controller() public view override returns (IController) { + return IController(CONTROLLER); + } + + /** + * @dev Revert if the controller is paused or partially paused + */ + function _notPartialPaused() internal view { + require(!controller().paused(), "Paused"); + require(!controller().partialPaused(), "Partial-paused"); + } + + /** + * @dev Revert if the controller is paused + */ + function _notPaused() internal view virtual { + require(!controller().paused(), "Paused"); + } + + /** + * @dev Revert if the caller is not the governor + */ + function _onlyGovernor() internal view { + require(msg.sender == controller().getGovernor(), "Only Controller governor"); + } + + /** + * @dev Revert if the caller is not the Controller + */ + function _onlyController() internal view { + require(msg.sender == CONTROLLER, "Caller must be Controller"); + } + + /** + * @dev Revert if the controller is paused or partially paused + */ + modifier notPartialPaused() { + _notPartialPaused(); + _; + } + + /** + * @dev Revert if the controller is paused + */ + modifier notPaused() { + _notPaused(); + _; + } + + /** + * @dev Revert if the caller is not the Controller + */ + modifier onlyController() { + _onlyController(); + _; + } + + /** + * @dev Revert if the caller is not the governor + */ + modifier onlyGovernor() { + _onlyGovernor(); + _; + } + + /** + * @notice Set Controller. Deprecated, will revert. + */ + function setController(address) external view override onlyController { + revert ManagedSetControllerDeprecated(); + } +} diff --git a/packages/horizon/contracts/SimpleTest.sol b/packages/horizon/contracts/SimpleTest.sol deleted file mode 100644 index 5cc28d9cc..000000000 --- a/packages/horizon/contracts/SimpleTest.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.4.0 <0.9.0; - -import { Test } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; - -contract SimpleTest is Test { - function test() external pure returns (uint256) { - return 42; - } -} diff --git a/packages/horizon/contracts/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/StakingBackwardsCompatibility.sol new file mode 100644 index 000000000..6e6261bd4 --- /dev/null +++ b/packages/horizon/contracts/StakingBackwardsCompatibility.sol @@ -0,0 +1,508 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; + +import { Multicall } from "@graphprotocol/contracts/contracts/base/Multicall.sol"; +import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol"; +import { TokenUtils } from "./utils/TokenUtils.sol"; +import { IGraphToken } from "./IGraphToken.sol"; +import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; +import { MathUtils } from "./utils/MathUtils.sol"; +import { Managed } from "./Managed.sol"; +import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; +import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; +import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; +import { ExponentialRebates } from "./utils/ExponentialRebates.sol"; +import { IStakingBackwardsCompatibility } from "./IStakingBackwardsCompatibility.sol"; + +/** + * @title Base Staking contract + * @dev The Staking contract allows Indexers to Stake on Subgraphs. Indexers Stake by creating + * Allocations on a Subgraph. It also allows Delegators to Delegate towards an Indexer. The + * contract also has the slashing functionality. + * The contract is abstract as the implementation that is deployed depends on each layer: L1Staking on mainnet + * and L2Staking on Arbitrum. + * Note that this contract delegates part of its functionality to a StakingExtension contract. + * This is due to the 24kB contract size limit on Ethereum. + */ +abstract contract StakingBackwardsCompatibility is + HorizonStakingV1Storage, + GraphUpgradeable, + Multicall, + IStakingBackwardsCompatibility +{ + /// @dev 100% in parts per million + uint32 internal constant MAX_PPM = 1000000; + + address public immutable SUBGRAPH_DATA_SERVICE_ADDRESS; + + address public immutable EXPONENTIAL_REBATES_ADDRESS; + + constructor( + address _controller, + address _subgraphDataServiceAddress, + address _exponentialRebatesAddress + ) Managed(_controller) { + SUBGRAPH_DATA_SERVICE_ADDRESS = _subgraphDataServiceAddress; + EXPONENTIAL_REBATES_ADDRESS = _exponentialRebatesAddress; + } + + /** + * @notice Set the address of the counterpart (L1 or L2) staking contract. + * @dev This function can only be called by the governor. + * TODO: Remove after L2 transition period + * @param _counterpart Address of the counterpart staking contract in the other chain, without any aliasing. + */ + function setCounterpartStakingAddress(address _counterpart) external override onlyGovernor { + counterpartStakingAddress = _counterpart; + emit ParameterUpdated("counterpartStakingAddress"); + } + + /** + * @notice Close an allocation and free the staked tokens. + * To be eligible for rewards a proof of indexing must be presented. + * Presenting a bad proof is subject to slashable condition. + * To opt out of rewards set _poi to 0x0 + * @dev TODO: Remove after Horizon transition period + * @param _allocationID The allocation identifier + * @param _poi Proof of indexing submitted for the allocated period + */ + function closeAllocation(address _allocationID, bytes32 _poi) external override notPaused { + _closeAllocation(_allocationID, _poi); + } + + /** + * @dev Collect and rebate query fees from state channels to the indexer + * To avoid reverting on the withdrawal from channel flow this function will accept calls with zero tokens. + * We use an exponential rebate formula to calculate the amount of tokens to rebate to the indexer. + * This implementation allows collecting multiple times on the same allocation, keeping track of the + * total amount rebated, the total amount collected and compensating the indexer for the difference. + * TODO: Remove after Horizon transition period + * @param _tokens Amount of tokens to collect + * @param _allocationID Allocation where the tokens will be assigned + */ + function collect(uint256 _tokens, address _allocationID) external override { + // Allocation identifier validation + require(_allocationID != address(0), "!alloc"); + + // Allocation must exist + AllocationState allocState = _getAllocationState(_allocationID); + require(allocState != AllocationState.Null, "!collect"); + + // If the query fees are zero, we don't want to revert + // but we also don't need to do anything, so just return + if (_tokens == 0) { + return; + } + + Allocation storage alloc = __DEPRECATED_allocations[_allocationID]; + bytes32 subgraphDeploymentID = alloc.subgraphDeploymentID; + + uint256 queryFees = _tokens; // Tokens collected from the channel + uint256 protocolTax = 0; // Tokens burnt as protocol tax + uint256 curationFees = 0; // Tokens distributed to curators as curation fees + uint256 queryRebates = 0; // Tokens to distribute to indexer + uint256 delegationRewards = 0; // Tokens to distribute to delegators + + { + // -- Pull tokens from the sender -- + IGraphToken graphToken = _graphToken(); + TokenUtils.pullTokens(graphToken, msg.sender, queryFees); + + // -- Collect protocol tax -- + protocolTax = _collectTax(queryFees, __DEPRECATED_protocolPercentage); + queryFees = queryFees - protocolTax; + + // -- Collect curation fees -- + // Only if the subgraph deployment is curated + curationFees = _collectCurationFees(subgraphDeploymentID, queryFees, __DEPRECATED_curationPercentage); + queryFees = queryFees - curationFees; + + // -- Process rebate reward -- + // Using accumulated fees and subtracting previously distributed rebates + // allows for multiple vouchers to be collected while following the rebate formula + alloc.collectedFees = alloc.collectedFees + queryFees; + + // No rebates if indexer has no stake or if lambda is zero + uint256 newRebates = (alloc.tokens == 0 || __DEPRECATED_lambdaNumerator == 0) + ? 0 + : ExponentialRebates(EXPONENTIAL_REBATES_ADDRESS).exponentialRebates( + alloc.collectedFees, + alloc.tokens, + __DEPRECATED_alphaNumerator, + __DEPRECATED_alphaDenominator, + __DEPRECATED_lambdaNumerator, + __DEPRECATED_lambdaDenominator + ); + + // -- Ensure rebates to distribute are within bounds -- + // Indexers can become under or over rebated if rebate parameters (alpha, lambda) + // change between successive collect calls for the same allocation + + // Ensure rebates to distribute are not negative (indexer is over-rebated) + queryRebates = MathUtils.diffOrZero(newRebates, alloc.distributedRebates); + + // Ensure rebates to distribute are not greater than available (indexer is under-rebated) + queryRebates = MathUtils.min(queryRebates, queryFees); + + // -- Burn rebates remanent -- + TokenUtils.burnTokens(graphToken, queryFees - queryRebates); + + // -- Distribute rebates -- + if (queryRebates > 0) { + alloc.distributedRebates = alloc.distributedRebates + queryRebates; + + // -- Collect delegation rewards into the delegation pool -- + delegationRewards = _collectDelegationQueryRewards(alloc.indexer, queryRebates); + queryRebates = queryRebates - delegationRewards; + + // -- Transfer or restake rebates -- + _sendRewards(queryRebates, alloc.indexer, __DEPRECATED_rewardsDestination[alloc.indexer] == address(0)); + } + } + + emit RebateCollected( + msg.sender, + alloc.indexer, + subgraphDeploymentID, + _allocationID, + _epochManager().currentEpoch(), + _tokens, + protocolTax, + curationFees, + queryFees, + queryRebates, + delegationRewards + ); + } + + /** + * @notice Return if allocationID is used. + * @dev TODO: Remove after Horizon transition period + * @param _allocationID Address used as signer by the indexer for an allocation + * @return True if allocationID already used + */ + function isAllocation(address _allocationID) external view override returns (bool) { + return _getAllocationState(_allocationID) != AllocationState.Null; + } + + /** + * @notice Return the allocation by ID. + * @dev TODO: Remove after Horizon transition period + * @param _allocationID Address used as allocation identifier + * @return Allocation data + */ + function getAllocation(address _allocationID) external view override returns (Allocation memory) { + return __DEPRECATED_allocations[_allocationID]; + } + + /** + * @notice Return the current state of an allocation + * @dev TODO: Remove after Horizon transition period + * @param _allocationID Allocation identifier + * @return AllocationState enum with the state of the allocation + */ + function getAllocationState(address _allocationID) external view override returns (AllocationState) { + return _getAllocationState(_allocationID); + } + + /** + * @notice Return the total amount of tokens allocated to subgraph. + * @param _subgraphDeploymentID Deployment ID for the subgraph + * @return Total tokens allocated to subgraph + */ + function getSubgraphAllocatedTokens(bytes32 _subgraphDeploymentID) external view override returns (uint256) { + return __DEPRECATED_subgraphAllocations[_subgraphDeploymentID]; + } + + /** + * @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service. + * @dev TODO: Delete after the transition period + * @param _operator Address of the operator + * @param _serviceProvider Address of the service provider + * @return True if operator is allowed for indexer, false otherwise + */ + function isOperator(address _operator, address _serviceProvider) public view override returns (bool) { + return legacyOperatorAuth[_serviceProvider][_operator]; + } + + /** + * @notice Get the total amount of tokens staked by the indexer. + * @param _indexer Address of the indexer + * @return Amount of tokens staked by the indexer + */ + function getIndexerStakedTokens(address _indexer) external view override returns (uint256) { + return serviceProviders[_indexer].tokensStaked; + } + + /** + * @notice Getter that returns if an indexer has any stake. + * @param _indexer Address of the indexer + * @return True if indexer has staked tokens + */ + function hasStake(address _indexer) external view override returns (bool) { + return serviceProviders[_indexer].tokensStaked > 0; + } + + /** + * @dev Close an allocation and free the staked tokens. + * @param _allocationID The allocation identifier + * @param _poi Proof of indexing submitted for the allocated period + */ + function _closeAllocation(address _allocationID, bytes32 _poi) private { + // Allocation must exist and be active + AllocationState allocState = _getAllocationState(_allocationID); + require(allocState == AllocationState.Active, "!active"); + + // Get allocation + Allocation memory alloc = __DEPRECATED_allocations[_allocationID]; + + // Validate that an allocation cannot be closed before one epoch + alloc.closedAtEpoch = _epochManager().currentEpoch(); + uint256 epochs = MathUtils.diffOrZero(alloc.closedAtEpoch, alloc.createdAtEpoch); + + // Indexer or operator can close an allocation + // Anyone is allowed to close ONLY under two concurrent conditions + // - After maxAllocationEpochs passed + // - When the allocation is for non-zero amount of tokens + bool isIndexer = isOperator(alloc.indexer, SUBGRAPH_DATA_SERVICE_ADDRESS); + if (epochs <= __DEPRECATED_maxAllocationEpochs || alloc.tokens == 0) { + require(isIndexer, "!auth"); + } + + // Close the allocation + __DEPRECATED_allocations[_allocationID].closedAtEpoch = alloc.closedAtEpoch; + + // -- Rewards Distribution -- + + // Process non-zero-allocation rewards tracking + if (alloc.tokens > 0) { + // Distribute rewards if proof of indexing was presented by the indexer or operator + if (isIndexer && _poi != 0) { + _distributeRewards(_allocationID, alloc.indexer); + } else { + _updateRewards(alloc.subgraphDeploymentID); + } + + // Free allocated tokens from use + serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated = + serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated - + alloc.tokens; + + // Track total allocations per subgraph + // Used for rewards calculations + __DEPRECATED_subgraphAllocations[alloc.subgraphDeploymentID] = + __DEPRECATED_subgraphAllocations[alloc.subgraphDeploymentID] - + alloc.tokens; + } + + emit AllocationClosed( + alloc.indexer, + alloc.subgraphDeploymentID, + alloc.closedAtEpoch, + alloc.tokens, + _allocationID, + msg.sender, + _poi, + !isIndexer + ); + } + + /** + * @dev Collect the delegation rewards for query fees. + * This function will assign the collected fees to the delegation pool. + * @param _indexer Indexer to which the tokens to distribute are related + * @param _tokens Total tokens received used to calculate the amount of fees to collect + * @return Amount of delegation rewards + */ + function _collectDelegationQueryRewards(address _indexer, uint256 _tokens) private returns (uint256) { + uint256 delegationRewards = 0; + DelegationPoolInternal storage pool = legacyDelegationPools[_indexer]; + if (pool.tokens > 0 && pool.__DEPRECATED_queryFeeCut < MAX_PPM) { + uint256 indexerCut = (uint256(pool.__DEPRECATED_queryFeeCut) * _tokens) / MAX_PPM; + delegationRewards = _tokens - indexerCut; + pool.tokens = pool.tokens + delegationRewards; + } + return delegationRewards; + } + + /** + * @dev Collect the delegation rewards for indexing. + * This function will assign the collected fees to the delegation pool. + * @param _indexer Indexer to which the tokens to distribute are related + * @param _tokens Total tokens received used to calculate the amount of fees to collect + * @return Amount of delegation rewards + */ + function _collectDelegationIndexingRewards(address _indexer, uint256 _tokens) private returns (uint256) { + uint256 delegationRewards = 0; + DelegationPoolInternal storage pool = legacyDelegationPools[_indexer]; + if (pool.tokens > 0 && pool.__DEPRECATED_indexingRewardCut < MAX_PPM) { + uint256 indexerCut = (uint256(pool.__DEPRECATED_indexingRewardCut) * _tokens) / MAX_PPM; + delegationRewards = _tokens - indexerCut; + pool.tokens = pool.tokens + delegationRewards; + } + return delegationRewards; + } + + /** + * @dev Collect the curation fees for a subgraph deployment from an amount of tokens. + * This function transfer curation fees to the Curation contract by calling Curation.collect + * @param _subgraphDeploymentID Subgraph deployment to which the curation fees are related + * @param _tokens Total tokens received used to calculate the amount of fees to collect + * @param _curationPercentage Percentage of tokens to collect as fees + * @return Amount of curation fees + */ + function _collectCurationFees( + bytes32 _subgraphDeploymentID, + uint256 _tokens, + uint256 _curationPercentage + ) private returns (uint256) { + if (_tokens == 0) { + return 0; + } + + ICuration curation = _curation(); + bool isCurationEnabled = _curationPercentage > 0 && address(curation) != address(0); + + if (isCurationEnabled && curation.isCurated(_subgraphDeploymentID)) { + // Calculate the tokens after curation fees first, and subtact that, + // to prevent curation fees from rounding down to zero + uint256 tokensAfterCurationFees = ((uint256(MAX_PPM) - _curationPercentage) * _tokens) / MAX_PPM; + uint256 curationFees = _tokens - tokensAfterCurationFees; + if (curationFees > 0) { + // Transfer and call collect() + // This function transfer tokens to a trusted protocol contracts + // Then we call collect() to do the transfer bookeeping + _rewardsManager().onSubgraphSignalUpdate(_subgraphDeploymentID); + TokenUtils.pushTokens(_graphToken(), address(curation), curationFees); + curation.collect(_subgraphDeploymentID, curationFees); + } + return curationFees; + } + return 0; + } + + /** + * @dev Collect tax to burn for an amount of tokens. + * @param _tokens Total tokens received used to calculate the amount of tax to collect + * @param _percentage Percentage of tokens to burn as tax + * @return Amount of tax charged + */ + function _collectTax(uint256 _tokens, uint256 _percentage) private returns (uint256) { + // Calculate tokens after tax first, and subtract that, + // to prevent the tax from rounding down to zero + uint256 tokensAfterTax = ((uint256(MAX_PPM) - _percentage) * _tokens) / MAX_PPM; + uint256 tax = _tokens - tokensAfterTax; + TokenUtils.burnTokens(_graphToken(), tax); // Burn tax if any + return tax; + } + + /** + * @dev Triggers an update of rewards due to a change in allocations. + * @param _subgraphDeploymentID Subgraph deployment updated + * @return Accumulated rewards per allocated token for the subgraph deployment + */ + function _updateRewards(bytes32 _subgraphDeploymentID) private returns (uint256) { + IRewardsManager rewardsManager = _rewardsManager(); + if (address(rewardsManager) == address(0)) { + return 0; + } + return rewardsManager.onSubgraphAllocationUpdate(_subgraphDeploymentID); + } + + /** + * @dev Assign rewards for the closed allocation to indexer and delegators. + * @param _allocationID Allocation + * @param _indexer Address of the indexer that did the allocation + */ + function _distributeRewards(address _allocationID, address _indexer) private { + IRewardsManager rewardsManager = _rewardsManager(); + if (address(rewardsManager) == address(0)) { + return; + } + + // Automatically triggers update of rewards snapshot as allocation will change + // after this call. Take rewards mint tokens for the Staking contract to distribute + // between indexer and delegators + uint256 totalRewards = rewardsManager.takeRewards(_allocationID); + if (totalRewards == 0) { + return; + } + + // Calculate delegation rewards and add them to the delegation pool + uint256 delegationRewards = _collectDelegationIndexingRewards(_indexer, totalRewards); + uint256 indexerRewards = totalRewards - delegationRewards; + + // Send the indexer rewards + _sendRewards(indexerRewards, _indexer, __DEPRECATED_rewardsDestination[_indexer] == address(0)); + } + + /** + * @dev Send rewards to the appropriate destination. + * @param _amount Number of rewards tokens + * @param _beneficiary Address of the beneficiary of rewards + * @param _restake Whether to restake or not + */ + function _sendRewards(uint256 _amount, address _beneficiary, bool _restake) private { + if (_amount == 0) return; + + if (_restake) { + // Restake to place fees into the indexer stake + _stake(_beneficiary, _amount); + } else { + // Transfer funds to the beneficiary's designated rewards destination if set + address destination = __DEPRECATED_rewardsDestination[_beneficiary]; + TokenUtils.pushTokens(_graphToken(), destination == address(0) ? _beneficiary : destination, _amount); + } + } + + /** + * @dev Return the current state of an allocation + * @param _allocationID Allocation identifier + * @return AllocationState enum with the state of the allocation + */ + function _getAllocationState(address _allocationID) private view returns (AllocationState) { + Allocation storage alloc = __DEPRECATED_allocations[_allocationID]; + + if (alloc.indexer == address(0)) { + return AllocationState.Null; + } + + if (alloc.createdAtEpoch != 0 && alloc.closedAtEpoch == 0) { + return AllocationState.Active; + } + + return AllocationState.Closed; + } + + /** + * @dev Stake tokens on the service provider. + * TODO: Move to HorizonStaking after the transition period + * @param _serviceProvider Address of staking party + * @param _tokens Amount of tokens to stake + */ + function _stake(address _serviceProvider, uint256 _tokens) internal { + // Deposit tokens into the indexer stake + serviceProviders[_serviceProvider].tokensStaked = serviceProviders[_serviceProvider].tokensStaked + _tokens; + + emit StakeDeposited(_serviceProvider, _tokens); + } + + function _graphToken() internal view returns (IGraphToken) { + return IGraphToken(GRAPH_TOKEN); + } + + function _curation() internal view returns (ICuration) { + return ICuration(CURATION); + } + + function _rewardsManager() internal view returns (IRewardsManager) { + return IRewardsManager(REWARDS_MANAGER); + } + + function _epochManager() internal view returns (IEpochManager) { + return IEpochManager(EPOCH_MANAGER); + } +} diff --git a/packages/horizon/contracts/mocks/ControllerMock.sol b/packages/horizon/contracts/mocks/ControllerMock.sol new file mode 100644 index 000000000..f8c976cf9 --- /dev/null +++ b/packages/horizon/contracts/mocks/ControllerMock.sol @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; +import { IManaged } from "@graphprotocol/contracts/contracts/governance/IManaged.sol"; + +/** + * @title Graph Controller contract (mock) + * @dev Controller is a registry of contracts for convenience. Inspired by Livepeer: + * https://github.com/livepeer/protocol/blob/streamflow/contracts/Controller.sol + */ +contract ControllerMock is IController { + /// @dev Track contract ids to contract proxy address + mapping(bytes32 => address) private _registry; + address public governor; + bool internal _paused; + bool internal _partialPaused; + address internal _pauseGuardian; + + /// Emitted when the proxy address for a protocol contract has been set + event SetContractProxy(bytes32 indexed id, address contractAddress); + + /** + * Constructor for the Controller mock + * @param _governor Address of the governor + */ + constructor(address _governor) { + governor = _governor; + } + + /** + * @notice Getter to access governor + * @return Address of the governor + */ + function getGovernor() external view override returns (address) { + return governor; + } + + // -- Registry -- + + /** + * @notice Register contract id and mapped address + * @param _id Contract id (keccak256 hash of contract name) + * @param _contractAddress Contract address + */ + function setContractProxy(bytes32 _id, address _contractAddress) external override { + require(_contractAddress != address(0), "Contract address must be set"); + _registry[_id] = _contractAddress; + emit SetContractProxy(_id, _contractAddress); + } + + /** + * @notice Unregister a contract address + * @param _id Contract id (keccak256 hash of contract name) + */ + function unsetContractProxy(bytes32 _id) external override { + _registry[_id] = address(0); + emit SetContractProxy(_id, address(0)); + } + + /** + * @notice Get contract proxy address by its id + * @param _id Contract id (keccak256 hash of contract name) + * @return Address of the proxy contract for the provided id + */ + function getContractProxy(bytes32 _id) external view override returns (address) { + return _registry[_id]; + } + + /** + * @notice Update a contract's controller + * @param _id Contract id (keccak256 hash of contract name) + * @param _controller New Controller address + */ + function updateController(bytes32 _id, address _controller) external override { + require(_controller != address(0), "Controller must be set"); + return IManaged(_registry[_id]).setController(_controller); + } + + // -- Pausing -- + + /** + * @notice Change the partial paused state of the contract + * Partial pause is intended as a partial pause of the protocol + * @param _toPause True if the contracts should be (partially) paused, false otherwise + */ + function setPartialPaused(bool _toPause) external override { + _partialPaused = _toPause; + } + + /** + * @notice Change the paused state of the contract + * Full pause most of protocol functions + * @param _toPause True if the contracts should be paused, false otherwise + */ + function setPaused(bool _toPause) external override { + _paused = _toPause; + } + + /** + * @notice Change the Pause Guardian + * @param _newPauseGuardian The address of the new Pause Guardian + */ + function setPauseGuardian(address _newPauseGuardian) external override { + require(_newPauseGuardian != address(0), "PauseGuardian must be set"); + _pauseGuardian = _newPauseGuardian; + } + + /** + * @notice Getter to access paused + * @return True if the contracts are paused, false otherwise + */ + function paused() external view override returns (bool) { + return _paused; + } + + /** + * @notice Getter to access partial pause status + * @return True if the contracts are partially paused, false otherwise + */ + function partialPaused() external view override returns (bool) { + return _partialPaused; + } +} diff --git a/packages/horizon/contracts/utils/ExponentialRebates.sol b/packages/horizon/contracts/utils/ExponentialRebates.sol new file mode 100644 index 000000000..d53efdca3 --- /dev/null +++ b/packages/horizon/contracts/utils/ExponentialRebates.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { LibFixedMath } from "./LibFixedMath.sol"; + +/** + * @title ExponentialRebates contract + * @notice A library to compute query fee rebates using an exponential formula + * @dev This is only used for backwards compatibility in HorizonStaking, and should + * be removed after the transition period. + */ +contract ExponentialRebates { + /// @dev Maximum value of the exponent for which to compute the exponential before clamping to zero. + uint32 private constant MAX_EXPONENT = 15; + + /// @dev The exponential formula used to compute fee-based rewards for + /// staking pools in a given epoch. This function does not perform + /// bounds checking on the inputs, but the following conditions + /// need to be true: + /// 0 <= alphaNumerator / alphaDenominator <= 1 + /// 0 < lambdaNumerator / lambdaDenominator + /// The exponential rebates function has the form: + /// `(1 - alpha * exp ^ (-lambda * stake / fees)) * fees` + /// @param fees Fees generated by indexer in the staking pool. + /// @param stake Stake attributed to the indexer in the staking pool. + /// @param alphaNumerator Numerator of `alpha` in the rebates function. + /// @param alphaDenominator Denominator of `alpha` in the rebates function. + /// @param lambdaNumerator Numerator of `lambda` in the rebates function. + /// @param lambdaDenominator Denominator of `lambda` in the rebates function. + /// @return rewards Rewards owed to the staking pool. + function exponentialRebates( + uint256 fees, + uint256 stake, + uint32 alphaNumerator, + uint32 alphaDenominator, + uint32 lambdaNumerator, + uint32 lambdaDenominator + ) external pure returns (uint256) { + // If alpha is zero indexer gets 100% fees rebate + int256 alpha = LibFixedMath.toFixed(int32(alphaNumerator), int32(alphaDenominator)); + if (alpha == 0) { + return fees; + } + + // No rebates if no fees... + if (fees == 0) { + return 0; + } + + // Award all fees as rebate if the exponent is too large + int256 lambda = LibFixedMath.toFixed(int32(lambdaNumerator), int32(lambdaDenominator)); + int256 exponent = LibFixedMath.mulDiv(lambda, int256(stake), int256(fees)); + if (LibFixedMath.toInteger(exponent) > int256(uint256(MAX_EXPONENT))) { + return fees; + } + + // Compute `1 - alpha * exp ^(-exponent)` + int256 factor = LibFixedMath.sub(LibFixedMath.one(), LibFixedMath.mul(alpha, LibFixedMath.exp(-exponent))); + + // Weight the fees by the factor + return LibFixedMath.uintMul(factor, fees); + } +} diff --git a/packages/horizon/contracts/utils/LibFixedMath.sol b/packages/horizon/contracts/utils/LibFixedMath.sol new file mode 100644 index 000000000..487de84a8 --- /dev/null +++ b/packages/horizon/contracts/utils/LibFixedMath.sol @@ -0,0 +1,389 @@ +/* + + Copyright 2017 Bprotocol Foundation, 2019 ZeroEx Intl. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +// SPDX-License-Identifier: Apache-2.0 + +pragma solidity 0.8.24; + +// solhint-disable indent +/// @dev Signed, fixed-point, 127-bit precision math library. +library LibFixedMath { + // 1 + int256 private constant FIXED_1 = int256(0x0000000000000000000000000000000080000000000000000000000000000000); + // 2**255 + int256 private constant MIN_FIXED_VAL = type(int256).min; + // 1^2 (in fixed-point) + int256 private constant FIXED_1_SQUARED = + int256(0x4000000000000000000000000000000000000000000000000000000000000000); + // 1 + int256 private constant LN_MAX_VAL = FIXED_1; + // e ^ -63.875 + int256 private constant LN_MIN_VAL = int256(0x0000000000000000000000000000000000000000000000000000000733048c5a); + // 0 + int256 private constant EXP_MAX_VAL = 0; + // -63.875 + int256 private constant EXP_MIN_VAL = -int256(0x0000000000000000000000000000001ff0000000000000000000000000000000); + + /// @dev Get one as a fixed-point number. + function one() internal pure returns (int256 f) { + f = FIXED_1; + } + + /// @dev Returns the addition of two fixed point numbers, reverting on overflow. + function add(int256 a, int256 b) internal pure returns (int256 c) { + c = _add(a, b); + } + + /// @dev Returns the addition of two fixed point numbers, reverting on overflow. + function sub(int256 a, int256 b) internal pure returns (int256 c) { + if (b == MIN_FIXED_VAL) { + revert("out-of-bounds"); + } + c = _add(a, -b); + } + + /// @dev Returns the multiplication of two fixed point numbers, reverting on overflow. + function mul(int256 a, int256 b) internal pure returns (int256 c) { + c = _mul(a, b) / FIXED_1; + } + + /// @dev Returns the division of two fixed point numbers. + function div(int256 a, int256 b) internal pure returns (int256 c) { + c = _div(_mul(a, FIXED_1), b); + } + + /// @dev Performs (a * n) / d, without scaling for precision. + function mulDiv(int256 a, int256 n, int256 d) internal pure returns (int256 c) { + c = _div(_mul(a, n), d); + } + + /// @dev Returns the unsigned integer result of multiplying a fixed-point + /// number with an integer, reverting if the multiplication overflows. + /// Negative results are clamped to zero. + function uintMul(int256 f, uint256 u) internal pure returns (uint256) { + if (int256(u) < int256(0)) { + revert("out-of-bounds"); + } + int256 c = _mul(f, int256(u)); + if (c <= 0) { + return 0; + } + return uint256(uint256(c) >> 127); + } + + /// @dev Returns the absolute value of a fixed point number. + function abs(int256 f) internal pure returns (int256 c) { + if (f == MIN_FIXED_VAL) { + revert("out-of-bounds"); + } + if (f >= 0) { + c = f; + } else { + c = -f; + } + } + + /// @dev Returns 1 / `x`, where `x` is a fixed-point number. + function invert(int256 f) internal pure returns (int256 c) { + c = _div(FIXED_1_SQUARED, f); + } + + /// @dev Convert signed `n` / 1 to a fixed-point number. + function toFixed(int256 n) internal pure returns (int256 f) { + f = _mul(n, FIXED_1); + } + + /// @dev Convert signed `n` / `d` to a fixed-point number. + function toFixed(int256 n, int256 d) internal pure returns (int256 f) { + f = _div(_mul(n, FIXED_1), d); + } + + /// @dev Convert unsigned `n` / 1 to a fixed-point number. + /// Reverts if `n` is too large to fit in a fixed-point number. + function toFixed(uint256 n) internal pure returns (int256 f) { + if (int256(n) < int256(0)) { + revert("out-of-bounds"); + } + f = _mul(int256(n), FIXED_1); + } + + /// @dev Convert unsigned `n` / `d` to a fixed-point number. + /// Reverts if `n` / `d` is too large to fit in a fixed-point number. + function toFixed(uint256 n, uint256 d) internal pure returns (int256 f) { + if (int256(n) < int256(0)) { + revert("out-of-bounds"); + } + if (int256(d) < int256(0)) { + revert("out-of-bounds"); + } + f = _div(_mul(int256(n), FIXED_1), int256(d)); + } + + /// @dev Convert a fixed-point number to an integer. + function toInteger(int256 f) internal pure returns (int256 n) { + return f / FIXED_1; + } + + /// @dev Get the natural logarithm of a fixed-point number 0 < `x` <= LN_MAX_VAL + function ln(int256 x) internal pure returns (int256 r) { + if (x > LN_MAX_VAL) { + revert("out-of-bounds"); + } + if (x <= 0) { + revert("too-small"); + } + if (x == FIXED_1) { + return 0; + } + if (x <= LN_MIN_VAL) { + return EXP_MIN_VAL; + } + + int256 y; + int256 z; + int256 w; + unchecked { + // Rewrite the input as a quotient of negative natural exponents and a single residual q, such that 1 < q < 2 + // For example: log(0.3) = log(e^-1 * e^-0.25 * 1.0471028872385522) + // = 1 - 0.25 - log(1 + 0.0471028872385522) + // e ^ -32 + if (x <= int256(0x00000000000000000000000000000000000000000001c8464f76164760000000)) { + r -= int256(0x0000000000000000000000000000001000000000000000000000000000000000); // - 32 + x = (x * FIXED_1) / int256(0x00000000000000000000000000000000000000000001c8464f76164760000000); // / e ^ -32 + } + // e ^ -16 + if (x <= int256(0x00000000000000000000000000000000000000f1aaddd7742e90000000000000)) { + r -= int256(0x0000000000000000000000000000000800000000000000000000000000000000); // - 16 + x = (x * FIXED_1) / int256(0x00000000000000000000000000000000000000f1aaddd7742e90000000000000); // / e ^ -16 + } + // e ^ -8 + if (x <= int256(0x00000000000000000000000000000000000afe10820813d78000000000000000)) { + r -= int256(0x0000000000000000000000000000000400000000000000000000000000000000); // - 8 + x = (x * FIXED_1) / int256(0x00000000000000000000000000000000000afe10820813d78000000000000000); // / e ^ -8 + } + // e ^ -4 + if (x <= int256(0x0000000000000000000000000000000002582ab704279ec00000000000000000)) { + r -= int256(0x0000000000000000000000000000000200000000000000000000000000000000); // - 4 + x = (x * FIXED_1) / int256(0x0000000000000000000000000000000002582ab704279ec00000000000000000); // / e ^ -4 + } + // e ^ -2 + if (x <= int256(0x000000000000000000000000000000001152aaa3bf81cc000000000000000000)) { + r -= int256(0x0000000000000000000000000000000100000000000000000000000000000000); // - 2 + x = (x * FIXED_1) / int256(0x000000000000000000000000000000001152aaa3bf81cc000000000000000000); // / e ^ -2 + } + // e ^ -1 + if (x <= int256(0x000000000000000000000000000000002f16ac6c59de70000000000000000000)) { + r -= int256(0x0000000000000000000000000000000080000000000000000000000000000000); // - 1 + x = (x * FIXED_1) / int256(0x000000000000000000000000000000002f16ac6c59de70000000000000000000); // / e ^ -1 + } + // e ^ -0.5 + if (x <= int256(0x000000000000000000000000000000004da2cbf1be5828000000000000000000)) { + r -= int256(0x0000000000000000000000000000000040000000000000000000000000000000); // - 0.5 + x = (x * FIXED_1) / int256(0x000000000000000000000000000000004da2cbf1be5828000000000000000000); // / e ^ -0.5 + } + // e ^ -0.25 + if (x <= int256(0x0000000000000000000000000000000063afbe7ab2082c000000000000000000)) { + r -= int256(0x0000000000000000000000000000000020000000000000000000000000000000); // - 0.25 + x = (x * FIXED_1) / int256(0x0000000000000000000000000000000063afbe7ab2082c000000000000000000); // / e ^ -0.25 + } + // e ^ -0.125 + if (x <= int256(0x0000000000000000000000000000000070f5a893b608861e1f58934f97aea57d)) { + r -= int256(0x0000000000000000000000000000000010000000000000000000000000000000); // - 0.125 + x = (x * FIXED_1) / int256(0x0000000000000000000000000000000070f5a893b608861e1f58934f97aea57d); // / e ^ -0.125 + } + // `x` is now our residual in the range of 1 <= x <= 2 (or close enough). + + // Add the taylor series for log(1 + z), where z = x - 1 + z = y = x - FIXED_1; + w = (y * y) / FIXED_1; + r += (z * (0x100000000000000000000000000000000 - y)) / 0x100000000000000000000000000000000; + z = (z * w) / FIXED_1; // add y^01 / 01 - y^02 / 02 + r += (z * (0x0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - y)) / 0x200000000000000000000000000000000; + z = (z * w) / FIXED_1; // add y^03 / 03 - y^04 / 04 + r += (z * (0x099999999999999999999999999999999 - y)) / 0x300000000000000000000000000000000; + z = (z * w) / FIXED_1; // add y^05 / 05 - y^06 / 06 + r += (z * (0x092492492492492492492492492492492 - y)) / 0x400000000000000000000000000000000; + z = (z * w) / FIXED_1; // add y^07 / 07 - y^08 / 08 + r += (z * (0x08e38e38e38e38e38e38e38e38e38e38e - y)) / 0x500000000000000000000000000000000; + z = (z * w) / FIXED_1; // add y^09 / 09 - y^10 / 10 + r += (z * (0x08ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b - y)) / 0x600000000000000000000000000000000; + z = (z * w) / FIXED_1; // add y^11 / 11 - y^12 / 12 + r += (z * (0x089d89d89d89d89d89d89d89d89d89d89 - y)) / 0x700000000000000000000000000000000; + z = (z * w) / FIXED_1; // add y^13 / 13 - y^14 / 14 + r += (z * (0x088888888888888888888888888888888 - y)) / 0x800000000000000000000000000000000; // add y^15 / 15 - y^16 / 16 + } + } + + /// @dev Compute the natural exponent for a fixed-point number EXP_MIN_VAL <= `x` <= 1 + function exp(int256 x) internal pure returns (int256 r) { + if (x < EXP_MIN_VAL) { + // Saturate to zero below EXP_MIN_VAL. + return 0; + } + if (x == 0) { + return FIXED_1; + } + if (x > EXP_MAX_VAL) { + revert("out-of-bounds"); + } + + // Rewrite the input as a product of natural exponents and a + // single residual q, where q is a number of small magnitude. + // For example: e^-34.419 = e^(-32 - 2 - 0.25 - 0.125 - 0.044) + // = e^-32 * e^-2 * e^-0.25 * e^-0.125 * e^-0.044 + // -> q = -0.044 + + // Multiply with the taylor series for e^q + int256 y; + int256 z; + // q = x % 0.125 (the residual) + z = y = x % 0x0000000000000000000000000000000010000000000000000000000000000000; + z = (z * y) / FIXED_1; + r += z * 0x10e1b3be415a0000; // add y^02 * (20! / 02!) + z = (z * y) / FIXED_1; + r += z * 0x05a0913f6b1e0000; // add y^03 * (20! / 03!) + z = (z * y) / FIXED_1; + r += z * 0x0168244fdac78000; // add y^04 * (20! / 04!) + z = (z * y) / FIXED_1; + r += z * 0x004807432bc18000; // add y^05 * (20! / 05!) + z = (z * y) / FIXED_1; + r += z * 0x000c0135dca04000; // add y^06 * (20! / 06!) + z = (z * y) / FIXED_1; + r += z * 0x0001b707b1cdc000; // add y^07 * (20! / 07!) + z = (z * y) / FIXED_1; + r += z * 0x000036e0f639b800; // add y^08 * (20! / 08!) + z = (z * y) / FIXED_1; + r += z * 0x00000618fee9f800; // add y^09 * (20! / 09!) + z = (z * y) / FIXED_1; + r += z * 0x0000009c197dcc00; // add y^10 * (20! / 10!) + z = (z * y) / FIXED_1; + r += z * 0x0000000e30dce400; // add y^11 * (20! / 11!) + z = (z * y) / FIXED_1; + r += z * 0x000000012ebd1300; // add y^12 * (20! / 12!) + z = (z * y) / FIXED_1; + r += z * 0x0000000017499f00; // add y^13 * (20! / 13!) + z = (z * y) / FIXED_1; + r += z * 0x0000000001a9d480; // add y^14 * (20! / 14!) + z = (z * y) / FIXED_1; + r += z * 0x00000000001c6380; // add y^15 * (20! / 15!) + z = (z * y) / FIXED_1; + r += z * 0x000000000001c638; // add y^16 * (20! / 16!) + z = (z * y) / FIXED_1; + r += z * 0x0000000000001ab8; // add y^17 * (20! / 17!) + z = (z * y) / FIXED_1; + r += z * 0x000000000000017c; // add y^18 * (20! / 18!) + z = (z * y) / FIXED_1; + r += z * 0x0000000000000014; // add y^19 * (20! / 19!) + z = (z * y) / FIXED_1; + r += z * 0x0000000000000001; // add y^20 * (20! / 20!) + r = r / 0x21c3677c82b40000 + y + FIXED_1; // divide by 20! and then add y^1 / 1! + y^0 / 0! + + // Multiply with the non-residual terms. + x = -x; + // e ^ -32 + if ((x & int256(0x0000000000000000000000000000001000000000000000000000000000000000)) != 0) { + r = + (r * int256(0x00000000000000000000000000000000000000f1aaddd7742e56d32fb9f99744)) / + int256(0x0000000000000000000000000043cbaf42a000812488fc5c220ad7b97bf6e99e); // * e ^ -32 + } + // e ^ -16 + if ((x & int256(0x0000000000000000000000000000000800000000000000000000000000000000)) != 0) { + r = + (r * int256(0x00000000000000000000000000000000000afe10820813d65dfe6a33c07f738f)) / + int256(0x000000000000000000000000000005d27a9f51c31b7c2f8038212a0574779991); // * e ^ -16 + } + // e ^ -8 + if ((x & int256(0x0000000000000000000000000000000400000000000000000000000000000000)) != 0) { + r = + (r * int256(0x0000000000000000000000000000000002582ab704279e8efd15e0265855c47a)) / + int256(0x0000000000000000000000000000001b4c902e273a58678d6d3bfdb93db96d02); // * e ^ -8 + } + // e ^ -4 + if ((x & int256(0x0000000000000000000000000000000200000000000000000000000000000000)) != 0) { + r = + (r * int256(0x000000000000000000000000000000001152aaa3bf81cb9fdb76eae12d029571)) / + int256(0x00000000000000000000000000000003b1cc971a9bb5b9867477440d6d157750); // * e ^ -4 + } + // e ^ -2 + if ((x & int256(0x0000000000000000000000000000000100000000000000000000000000000000)) != 0) { + r = + (r * int256(0x000000000000000000000000000000002f16ac6c59de6f8d5d6f63c1482a7c86)) / + int256(0x000000000000000000000000000000015bf0a8b1457695355fb8ac404e7a79e3); // * e ^ -2 + } + // e ^ -1 + if ((x & int256(0x0000000000000000000000000000000080000000000000000000000000000000)) != 0) { + r = + (r * int256(0x000000000000000000000000000000004da2cbf1be5827f9eb3ad1aa9866ebb3)) / + int256(0x00000000000000000000000000000000d3094c70f034de4b96ff7d5b6f99fcd8); // * e ^ -1 + } + // e ^ -0.5 + if ((x & int256(0x0000000000000000000000000000000040000000000000000000000000000000)) != 0) { + r = + (r * int256(0x0000000000000000000000000000000063afbe7ab2082ba1a0ae5e4eb1b479dc)) / + int256(0x00000000000000000000000000000000a45af1e1f40c333b3de1db4dd55f29a7); // * e ^ -0.5 + } + // e ^ -0.25 + if ((x & int256(0x0000000000000000000000000000000020000000000000000000000000000000)) != 0) { + r = + (r * int256(0x0000000000000000000000000000000070f5a893b608861e1f58934f97aea57d)) / + int256(0x00000000000000000000000000000000910b022db7ae67ce76b441c27035c6a1); // * e ^ -0.25 + } + // e ^ -0.125 + if ((x & int256(0x0000000000000000000000000000000010000000000000000000000000000000)) != 0) { + r = + (r * int256(0x00000000000000000000000000000000783eafef1c0a8f3978c7f81824d62ebf)) / + int256(0x0000000000000000000000000000000088415abbe9a76bead8d00cf112e4d4a8); // * e ^ -0.125 + } + } + + /// @dev Returns the multiplication two numbers, reverting on overflow. + function _mul(int256 a, int256 b) private pure returns (int256 c) { + if (a == 0 || b == 0) { + return 0; + } + unchecked { + c = a * b; + if (c / a != b || c / b != a) { + revert("overflow"); + } + } + } + + /// @dev Returns the division of two numbers, reverting on division by zero. + function _div(int256 a, int256 b) private pure returns (int256 c) { + if (b == 0) { + revert("overflow"); + } + if (a == MIN_FIXED_VAL && b == -1) { + revert("overflow"); + } + unchecked { + c = a / b; + } + } + + /// @dev Adds two numbers, reverting on overflow. + function _add(int256 a, int256 b) private pure returns (int256 c) { + unchecked { + c = a + b; + if ((a < 0 && b < 0 && c > a) || (a > 0 && b > 0 && c < a)) { + revert("overflow"); + } + } + } +} diff --git a/packages/horizon/contracts/utils/MathUtils.sol b/packages/horizon/contracts/utils/MathUtils.sol new file mode 100644 index 000000000..3df620b12 --- /dev/null +++ b/packages/horizon/contracts/utils/MathUtils.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +/** + * @title MathUtils Library + * @notice A collection of functions to perform math operations + */ +library MathUtils { + /** + * @dev Calculates the weighted average of two values pondering each of these + * values based on configured weights. The contribution of each value N is + * weightN/(weightA + weightB). The calculation rounds up to ensure the result + * is always greater than the smallest of the two values. + * @param valueA The amount for value A + * @param weightA The weight to use for value A + * @param valueB The amount for value B + * @param weightB The weight to use for value B + */ + function weightedAverageRoundingUp( + uint256 valueA, + uint256 weightA, + uint256 valueB, + uint256 weightB + ) internal pure returns (uint256) { + return ((valueA * weightA) + (valueB * weightB) + (weightA + weightB - 1)) / (weightA + weightB); + } + + /** + * @dev Returns the minimum of two numbers. + */ + function min(uint256 x, uint256 y) internal pure returns (uint256) { + return x <= y ? x : y; + } + + /** + * @dev Returns the difference between two numbers or zero if negative. + */ + function diffOrZero(uint256 x, uint256 y) internal pure returns (uint256) { + return (x > y) ? x - y : 0; + } +} diff --git a/packages/horizon/contracts/utils/TokenUtils.sol b/packages/horizon/contracts/utils/TokenUtils.sol new file mode 100644 index 000000000..7bfc7203c --- /dev/null +++ b/packages/horizon/contracts/utils/TokenUtils.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { IGraphToken } from "../IGraphToken.sol"; + +/** + * @title TokenUtils library + * @notice This library contains utility functions for handling tokens (transfers and burns). + * It is specifically adapted for the GraphToken, so does not need to handle edge cases + * for other tokens. + */ +library TokenUtils { + /** + * @dev Pull tokens from an address to this contract. + * @param _graphToken Token to transfer + * @param _from Address sending the tokens + * @param _amount Amount of tokens to transfer + */ + function pullTokens(IGraphToken _graphToken, address _from, uint256 _amount) internal { + if (_amount > 0) { + require(_graphToken.transferFrom(_from, address(this), _amount), "!transfer"); + } + } + + /** + * @dev Push tokens from this contract to a receiving address. + * @param _graphToken Token to transfer + * @param _to Address receiving the tokens + * @param _amount Amount of tokens to transfer + */ + function pushTokens(IGraphToken _graphToken, address _to, uint256 _amount) internal { + if (_amount > 0) { + require(_graphToken.transfer(_to, _amount), "!transfer"); + } + } + + /** + * @dev Burn tokens held by this contract. + * @param _graphToken Token to burn + * @param _amount Amount of tokens to burn + */ + function burnTokens(IGraphToken _graphToken, uint256 _amount) internal { + if (_amount > 0) { + _graphToken.burn(_amount); + } + } +} diff --git a/packages/horizon/foundry.toml b/packages/horizon/foundry.toml index 55f7ffd31..38d41a40d 100644 --- a/packages/horizon/foundry.toml +++ b/packages/horizon/foundry.toml @@ -3,4 +3,6 @@ src = 'contracts' out = 'build' libs = ['node_modules', 'lib'] test = 'test' -cache_path = 'cache_forge' \ No newline at end of file +cache_path = 'cache_forge' +optimizer = true +optimizer-runs = 200 diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index f5c9172a8..123791c44 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -3,7 +3,15 @@ import '@nomicfoundation/hardhat-toolbox' import { HardhatUserConfig } from 'hardhat/config' const config: HardhatUserConfig = { - solidity: '0.8.24', + solidity: { + version: '0.8.24', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, paths: { artifacts: './build/contracts', sources: './contracts', diff --git a/packages/horizon/package.json b/packages/horizon/package.json index ec23f62cb..fff88b6d4 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -10,7 +10,7 @@ "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", "build": "forge build && hardhat compile", - "test": "forge test && hardhat test" + "test": "forge test -vvv && hardhat test" }, "devDependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", @@ -20,6 +20,7 @@ "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", "@nomicfoundation/hardhat-verify": "^2.0.0", + "@openzeppelin/contracts": "^5.0.2", "@typechain/ethers-v6": "^0.5.0", "@typechain/hardhat": "^9.0.0", "@types/chai": "^4.2.0", diff --git a/packages/horizon/remappings.txt b/packages/horizon/remappings.txt index 1bd6482cd..758c61447 100644 --- a/packages/horizon/remappings.txt +++ b/packages/horizon/remappings.txt @@ -3,3 +3,4 @@ forge-std/=lib/forge-std/src/ ds-test/=lib/forge-std/lib/ds-test/src/ eth-gas-reporter/=node_modules/eth-gas-reporter/ hardhat/=node_modules/hardhat/ +@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ diff --git a/packages/horizon/test/HorizonStaking.t.sol b/packages/horizon/test/HorizonStaking.t.sol new file mode 100644 index 000000000..144b0c7a5 --- /dev/null +++ b/packages/horizon/test/HorizonStaking.t.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.24; + +import "forge-std/Test.sol"; +import "forge-std/console.sol"; +import { HorizonStaking } from "../contracts/HorizonStaking.sol"; +import { ControllerMock } from "../contracts/mocks/ControllerMock.sol"; +import { HorizonStakingExtension } from "../contracts/HorizonStakingExtension.sol"; +import { ExponentialRebates } from "../contracts/utils/ExponentialRebates.sol"; +import { IHorizonStaking } from "../contracts/IHorizonStaking.sol"; + +contract HorizonStakingTest is Test { + ExponentialRebates rebates; + HorizonStakingExtension ext; + IHorizonStaking staking; + ControllerMock controller; + + function setUp() public { + console.log("Deploying Controller mock"); + controller = new ControllerMock(address(0x1)); + console.log("Deploying HorizonStaking"); + rebates = new ExponentialRebates(); + ext = new HorizonStakingExtension(address(controller), address(0x1), address(rebates)); + staking = IHorizonStaking(address(new HorizonStaking(address(controller), address(ext), address(0x1)))); + } + + function test_SetGlobalOperator() public { + address operator = address(0x1337); + address dataService = address(0x1338); + address serviceProvider = address(this); + + staking.setOperator(operator, dataService, true); + assertTrue(staking.isAuthorized(operator, serviceProvider, dataService)); + } +} diff --git a/packages/horizon/test/HorizonStaking.ts b/packages/horizon/test/HorizonStaking.ts new file mode 100644 index 000000000..6f6e1ad88 --- /dev/null +++ b/packages/horizon/test/HorizonStaking.ts @@ -0,0 +1,38 @@ +import hardhat from 'hardhat' + +import { expect } from 'chai' +import { loadFixture } from '@nomicfoundation/hardhat-toolbox/network-helpers' +import { ZeroAddress } from 'ethers' +import { IHorizonStaking } from '../typechain-types' + +const ethers = hardhat.ethers + +describe('HorizonStaking', function () { + async function deployFixture() { + const [owner] = await ethers.getSigners() + const ControllerMock = await ethers.getContractFactory('ControllerMock') + const controller = await ControllerMock.deploy(owner.address) + await controller.waitForDeployment() + const ExponentialRebates = await ethers.getContractFactory('ExponentialRebates') + const exponentialRebates = await ExponentialRebates.deploy() + await exponentialRebates.waitForDeployment() + const HorizonStakingExtension = await ethers.getContractFactory('HorizonStakingExtension') + const horizonStakingExtension = await HorizonStakingExtension.deploy(controller.target, ZeroAddress, exponentialRebates.target) + await horizonStakingExtension.waitForDeployment() + const HorizonStaking = await ethers.getContractFactory('HorizonStaking') + const horizonStakingContract = await HorizonStaking.deploy(controller.target, horizonStakingExtension.target, ZeroAddress) + await horizonStakingContract.waitForDeployment() + const horizonStaking = (await ethers.getContractAt('IHorizonStaking', horizonStakingContract.target)) as unknown as IHorizonStaking + return { horizonStaking, owner } + } + + describe('setOperator', function () { + it('adds an operator', async function () { + const { horizonStaking, owner } = await loadFixture(deployFixture) + const verifier = ethers.Wallet.createRandom().address + const operator = ethers.Wallet.createRandom().address + await horizonStaking.connect(owner).setOperator(operator, verifier, true) + expect(await horizonStaking.isAuthorized(operator, owner, verifier)).to.be.true + }) + }) +}) diff --git a/packages/horizon/test/SimpleTest.t.sol b/packages/horizon/test/SimpleTest.t.sol deleted file mode 100644 index b130e5d34..000000000 --- a/packages/horizon/test/SimpleTest.t.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.10; - -import "forge-std/Test.sol"; -import { SimpleTest } from "../contracts/SimpleTest.sol"; - -contract ContractTest is Test { - SimpleTest simpleTest; - - function setUp() public { - simpleTest = new SimpleTest(); - } - - function test_NumberIs42() public { - assertEq(simpleTest.test(), 42); - } -} diff --git a/packages/horizon/test/SimpleTest.ts b/packages/horizon/test/SimpleTest.ts deleted file mode 100644 index cfcfb1443..000000000 --- a/packages/horizon/test/SimpleTest.ts +++ /dev/null @@ -1,23 +0,0 @@ -import hardhat from 'hardhat' - -import { expect } from 'chai' -import { loadFixture } from '@nomicfoundation/hardhat-toolbox/network-helpers' - -const ethers = hardhat.ethers - -describe('SimpleTest', function () { - async function deployFixture() { - const [owner] = await ethers.getSigners() - const SimpleTest = await ethers.getContractFactory('SimpleTest') - const simpleTest = await SimpleTest.deploy() - return { simpleTest, owner } - } - - describe('Deployment', function () { - it('Should return 42', async function () { - const { simpleTest } = await loadFixture(deployFixture) - - expect(await simpleTest.test()).to.equal(42) - }) - }) -}) diff --git a/yarn.lock b/yarn.lock index 27dfd84b0..00e728326 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2935,6 +2935,7 @@ __metadata: "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" "@nomicfoundation/hardhat-verify": "npm:^2.0.0" + "@openzeppelin/contracts": "npm:^5.0.2" "@typechain/ethers-v6": "npm:^0.5.0" "@typechain/hardhat": "npm:^9.0.0" "@types/chai": "npm:^4.2.0" @@ -5044,6 +5045,13 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts@npm:^5.0.2": + version: 5.0.2 + resolution: "@openzeppelin/contracts@npm:5.0.2" + checksum: d042661db7bb2f3a4b9ef30bba332e86ac20907d171f2ebfccdc9255cc69b62786fead8d6904b8148a8f26946bc7c15eead91b95f75db0c193a99d52e528663e + languageName: node + linkType: hard + "@openzeppelin/defender-admin-client@npm:^1.46.0": version: 1.54.1 resolution: "@openzeppelin/defender-admin-client@npm:1.54.1" From 46e5da536288ff30edfcac961e597cc3ba2fd6e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 17 May 2024 17:55:11 -0300 Subject: [PATCH 020/343] [WIP] Horizon: add subgraph data service (#946) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: add first draft IHorizonStaking * fix: horizon staking interface compilation errors Signed-off-by: Tomás Migone * chore: bump contracts package version Signed-off-by: Tomás Migone * fix(contracts): build type code Signed-off-by: Tomás Migone * feat: add subgraph service boilerplate Signed-off-by: Tomás Migone * chore: add subgraph service contracts boilerplate Signed-off-by: Tomás Migone * feat(ss): add register flow Signed-off-by: Tomás Migone * feat(ss): add slash flow Signed-off-by: Tomás Migone * wip: redeem flow Signed-off-by: Tomás Migone * feat: query fee redeem flow Signed-off-by: Tomás Migone * fix: add events to subgraph service redeem flow Signed-off-by: Tomás Migone * feat: start allocation flows Signed-off-by: Tomás Migone * chore(horizon): add horizon package boilerplate Signed-off-by: Tomás Migone * chore: horizon dispute manager WIP * chore: testing * chore: rename DisputeManager to SubgraphDisputeManager * fix: remove unneeded code * fix: merge conflicts * fix: indentation * chore: add Ownable * chore: use errors * chore: use subgraph service contract for dispute tests * fix: remove unused code * feat: start work on data service sdk Signed-off-by: Tomás Migone * feat(data-service): break out fee model from subgraph service Signed-off-by: Tomás Migone * chore: simplify data service sdk naming convention Signed-off-by: Tomás Migone * chore(ss): simplify naming convention Signed-off-by: Tomás Migone * fix: cleanup Signed-off-by: Tomás Migone * feat(subgraph-service): register via ds sdk Signed-off-by: Tomás Migone * feat(data-service): add ownable and rescuable data service extensions Signed-off-by: Tomás Migone * feat: provision tracker Signed-off-by: Tomás Migone * feat: add stop service to subgraph service Signed-off-by: Tomás Migone * chore: minor tweaks to ss Signed-off-by: Tomás Migone * chore: update start stop service in ss Signed-off-by: Tomás Migone * feat: improvements to data service framework Signed-off-by: Tomás Migone * feat(ss): dont delete allos when closing, update getallocation Signed-off-by: Tomás Migone * fix: final touches to service flows on subgraph service Signed-off-by: Tomás Migone * chore(ss): rewrite using allocation library Signed-off-by: Tomás Migone * chore(ds): rewrite data service using provision handler and getter Signed-off-by: Tomás Migone * chore(ss): refactor with allocation manager Signed-off-by: Tomás Migone * chore: provide not implemented default fns for data service base contract Signed-off-by: Tomás Migone * feat(ss): revamp allocations, add legacy allocations and migrations Signed-off-by: Tomás Migone * feat(ds): add pausable data service extension Signed-off-by: Tomás Migone * fix(ds): add rescuer role to DataServiceRescuable, dont use Ownable Signed-off-by: Tomás Migone * chore(ds): move PPM lib to data service sdk Signed-off-by: Tomás Migone * chore(ds): rename ProvisionHandler to ProvisionManager Signed-off-by: Tomás Migone * chore: clean up inheritance and interfacesd Signed-off-by: Tomás Migone * chore: cleanup dependencies Signed-off-by: Tomás Migone * chore: ensure consistent stlye in sol files Signed-off-by: Tomás Migone * chore(ss): use math ppm for dispute manager Signed-off-by: Tomás Migone * chore: use attestation lib for dispute manager Signed-off-by: Tomás Migone * chore: attestation manager Signed-off-by: Tomás Migone * chore: remove unused event Signed-off-by: Tomás Migone * chore: readd event in proper contract Signed-off-by: Tomás Migone * docs: add natspec to data service contract Signed-off-by: Tomás Migone * feat: implement curation fees distribution Signed-off-by: Tomás Migone * chore(solhint): update lint rules Signed-off-by: Tomás Migone * chore: apply new linting rules Signed-off-by: Tomás Migone * fix: stack too deep error in subgraph service collect Signed-off-by: Tomás Migone * feat(solhint): add custom leading underscore rule Signed-off-by: Tomás Migone * feat(solhint): fix leading underscore errors with plugin Signed-off-by: Tomás Migone * fix(solhint): properly lint function parameters Signed-off-by: Tomás Migone * chore: apply latest linting rules Signed-off-by: Tomás Migone * docs: natspec for data service interface Signed-off-by: Tomás Migone * chore: fix linting Signed-off-by: Tomás Migone * fix: horizon dispute manager tests * fix: yarn lock Signed-off-by: Tomás Migone --------- Signed-off-by: Tomás Migone Co-authored-by: Pablo Carranza Velez Co-authored-by: Miguel de Elias Co-authored-by: Maikol <86025070+Maikol@users.noreply.github.com> --- .github/workflows/ci-subgraph-service.yml | 30 + .gitmodules | 3 + .husky/pre-commit | 5 + README.md | 1 + package.json | 1 + .../contracts/governance/Controller.sol | 2 +- .../contracts/governance/Governed.sol | 2 +- .../contracts/governance/Pausable.sol | 2 +- .../contracts/staking/IHorizonStaking.sol | 166 ++ .../contracts/contracts/token/IGraphToken.sol | 2 +- .../contracts/contracts/utils/TokenUtils.sol | 2 +- packages/horizon/contracts/SimpleTest.sol | 10 + packages/horizon/test/SimpleTest.t.sol | 17 + packages/horizon/test/SimpleTest.ts | 23 + packages/solhint-graph-config/README.md | 7 + packages/solhint-graph-config/index.js | 24 +- packages/solhint-graph-config/package.json | 5 +- packages/solhint-graph-config/plugin/index.js | 114 + .../solhint-graph-config/plugin/package.json | 5 + packages/subgraph-service/README.md | 13 + .../contracts/DisputeManager.sol | 783 +++++ .../contracts/DisputeManagerStorage.sol | 33 + .../contracts/SubgraphService.sol | 273 ++ .../contracts/SubgraphServiceStorage.sol | 19 + .../contracts/TAPVerifier.sol | 220 ++ .../contracts/data-service/DataService.sol | 39 + .../data-service/DataServiceStorage.sol | 7 + .../contracts/data-service/GraphDirectory.sol | 55 + .../contracts/data-service/IDataService.sol | 164 ++ .../extensions/DataServiceFees.sol | 99 + .../extensions/DataServiceFeesStorage.sol | 20 + .../extensions/DataServicePausable.sol | 35 + .../extensions/DataServiceRescuable.sol | 64 + .../extensions/IDataServiceFees.sol | 27 + .../extensions/IDataServicePausable.sol | 9 + .../extensions/IDataServiceRescuable.sol | 9 + .../data-service/libraries/Denominations.sol | 15 + .../data-service/libraries/PPMMath.sol | 32 + .../libraries/ProvisionGetter.sol | 21 + .../libraries/ProvisionTracker.sol | 43 + .../data-service/libraries/UintRange.sol | 10 + .../utilities/ProvisionManager.sol | 109 + .../utilities/ProvisionManagerStorage.sol | 25 + .../contracts/interfaces/IDisputeManager.sol | 86 + .../contracts/interfaces/IGraphEscrow.sol | 6 + .../contracts/interfaces/IGraphPayments.sol | 17 + .../contracts/interfaces/ISubgraphService.sol | 32 + .../contracts/interfaces/ITAPVerifier.sol | 24 + .../contracts/libraries/Allocation.sol | 101 + .../contracts/libraries/Attestation.sol | 115 + .../contracts/libraries/LegacyAllocation.sol | 46 + .../contracts/utilities/AllocationManager.sol | 251 ++ .../utilities/AllocationManagerStorage.sol | 24 + .../utilities/AttestationManager.sol | 77 + .../utilities/AttestationManagerStorage.sol | 9 + .../contracts/utilities/Directory.sol | 38 + packages/subgraph-service/eslint.config.js | 21 + packages/subgraph-service/foundry.toml | 6 + packages/subgraph-service/hardhat.config.ts | 37 + packages/subgraph-service/lib/forge-std | 1 + packages/subgraph-service/package.json | 63 + packages/subgraph-service/prettier.config.js | 2 + packages/subgraph-service/remappings.txt | 5 + packages/subgraph-service/scripts/deploy.ts | 28 + .../test/DisputeManager.t.sol | 501 ++++ .../test/mocks/MockGRTToken.sol | 46 + .../test/mocks/MockHorizonStaking.sol | 108 + .../test/mocks/MockRewardsManager.sol | 50 + packages/subgraph-service/tsconfig.json | 18 + yarn.lock | 2603 +++++++---------- 70 files changed, 5358 insertions(+), 1502 deletions(-) create mode 100644 .github/workflows/ci-subgraph-service.yml create mode 100644 packages/contracts/contracts/staking/IHorizonStaking.sol create mode 100644 packages/horizon/contracts/SimpleTest.sol create mode 100644 packages/horizon/test/SimpleTest.t.sol create mode 100644 packages/horizon/test/SimpleTest.ts create mode 100644 packages/solhint-graph-config/plugin/index.js create mode 100644 packages/solhint-graph-config/plugin/package.json create mode 100644 packages/subgraph-service/README.md create mode 100644 packages/subgraph-service/contracts/DisputeManager.sol create mode 100644 packages/subgraph-service/contracts/DisputeManagerStorage.sol create mode 100644 packages/subgraph-service/contracts/SubgraphService.sol create mode 100644 packages/subgraph-service/contracts/SubgraphServiceStorage.sol create mode 100644 packages/subgraph-service/contracts/TAPVerifier.sol create mode 100644 packages/subgraph-service/contracts/data-service/DataService.sol create mode 100644 packages/subgraph-service/contracts/data-service/DataServiceStorage.sol create mode 100644 packages/subgraph-service/contracts/data-service/GraphDirectory.sol create mode 100644 packages/subgraph-service/contracts/data-service/IDataService.sol create mode 100644 packages/subgraph-service/contracts/data-service/extensions/DataServiceFees.sol create mode 100644 packages/subgraph-service/contracts/data-service/extensions/DataServiceFeesStorage.sol create mode 100644 packages/subgraph-service/contracts/data-service/extensions/DataServicePausable.sol create mode 100644 packages/subgraph-service/contracts/data-service/extensions/DataServiceRescuable.sol create mode 100644 packages/subgraph-service/contracts/data-service/extensions/IDataServiceFees.sol create mode 100644 packages/subgraph-service/contracts/data-service/extensions/IDataServicePausable.sol create mode 100644 packages/subgraph-service/contracts/data-service/extensions/IDataServiceRescuable.sol create mode 100644 packages/subgraph-service/contracts/data-service/libraries/Denominations.sol create mode 100644 packages/subgraph-service/contracts/data-service/libraries/PPMMath.sol create mode 100644 packages/subgraph-service/contracts/data-service/libraries/ProvisionGetter.sol create mode 100644 packages/subgraph-service/contracts/data-service/libraries/ProvisionTracker.sol create mode 100644 packages/subgraph-service/contracts/data-service/libraries/UintRange.sol create mode 100644 packages/subgraph-service/contracts/data-service/utilities/ProvisionManager.sol create mode 100644 packages/subgraph-service/contracts/data-service/utilities/ProvisionManagerStorage.sol create mode 100644 packages/subgraph-service/contracts/interfaces/IDisputeManager.sol create mode 100644 packages/subgraph-service/contracts/interfaces/IGraphEscrow.sol create mode 100644 packages/subgraph-service/contracts/interfaces/IGraphPayments.sol create mode 100644 packages/subgraph-service/contracts/interfaces/ISubgraphService.sol create mode 100644 packages/subgraph-service/contracts/interfaces/ITAPVerifier.sol create mode 100644 packages/subgraph-service/contracts/libraries/Allocation.sol create mode 100644 packages/subgraph-service/contracts/libraries/Attestation.sol create mode 100644 packages/subgraph-service/contracts/libraries/LegacyAllocation.sol create mode 100644 packages/subgraph-service/contracts/utilities/AllocationManager.sol create mode 100644 packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol create mode 100644 packages/subgraph-service/contracts/utilities/AttestationManager.sol create mode 100644 packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol create mode 100644 packages/subgraph-service/contracts/utilities/Directory.sol create mode 100644 packages/subgraph-service/eslint.config.js create mode 100644 packages/subgraph-service/foundry.toml create mode 100644 packages/subgraph-service/hardhat.config.ts create mode 160000 packages/subgraph-service/lib/forge-std create mode 100644 packages/subgraph-service/package.json create mode 100644 packages/subgraph-service/prettier.config.js create mode 100644 packages/subgraph-service/remappings.txt create mode 100644 packages/subgraph-service/scripts/deploy.ts create mode 100644 packages/subgraph-service/test/DisputeManager.t.sol create mode 100644 packages/subgraph-service/test/mocks/MockGRTToken.sol create mode 100644 packages/subgraph-service/test/mocks/MockHorizonStaking.sol create mode 100644 packages/subgraph-service/test/mocks/MockRewardsManager.sol create mode 100644 packages/subgraph-service/tsconfig.json diff --git a/.github/workflows/ci-subgraph-service.yml b/.github/workflows/ci-subgraph-service.yml new file mode 100644 index 000000000..bda15deff --- /dev/null +++ b/.github/workflows/ci-subgraph-service.yml @@ -0,0 +1,30 @@ +name: CI - packages/subgraph-service + +env: + CI: true + +on: + push: + branches: "*" + paths: + - packages/subgraph-service/** + pull_request: + branches: "*" + paths: + - packages/subgraph-service/** + workflow_dispatch: + +jobs: + test-ci: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + - name: Set up environment + uses: ./.github/actions/setup + - name: Run tests + run: | + pushd packages/subgraph-service + yarn test \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index edd86d2b7..6e4ecf4c6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ +[submodule "packages/subgraph-service/lib/forge-std"] + path = packages/subgraph-service/lib/forge-std + url = https://github.com/foundry-rs/forge-std [submodule "packages/horizon/lib/forge-std"] path = packages/horizon/lib/forge-std url = https://github.com/foundry-rs/forge-std diff --git a/.husky/pre-commit b/.husky/pre-commit index 92fa26604..aa9adeab4 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -6,6 +6,11 @@ pushd packages/contracts npx --no-install lint-staged popd +# subgraph service +pushd packages/subgraph-service +npx --no-install lint-staged +popd + # data-edge pushd packages/data-edge npx --no-install lint-staged diff --git a/README.md b/README.md index a36de65bf..d9b46bb52 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ This repository is a Yarn workspaces monorepo containing the following packages: | [horizon](./packages/horizon) | [![npm version]()]() | Contracts for Graph Horizon, the next iteration of The Graph protocol. | | [sdk](./packages/sdk) | [![npm version](https://badge.fury.io/js/@graphprotocol%2Fsdk.svg)](https://badge.fury.io/js/@graphprotocol%2Fsdk) | TypeScript based SDK to interact with the protocol contracts | | [solhint-graph-config](./packages/eslint-graph-config) | [![npm version]()]() | Shared linting and formatting rules for Solidity projects. | +| [subgraph-service](./packages/subgraph-service) | [![npm version]()]() | Contracts for the Subgraph data service in Graph Horizon. | | [token-distribution](./packages/token-distribution) | - | Contracts managing token locks for network participants | diff --git a/package.json b/package.json index d27a50288..126006c96 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "packages/horizon", "packages/sdk", "packages/solhint-graph-config", + "packages/subgraph-service", "packages/token-distribution" ], "scripts": { diff --git a/packages/contracts/contracts/governance/Controller.sol b/packages/contracts/contracts/governance/Controller.sol index affb29a05..74854cbfe 100644 --- a/packages/contracts/contracts/governance/Controller.sol +++ b/packages/contracts/contracts/governance/Controller.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.7.6 <0.9.0; import { IController } from "./IController.sol"; import { IManaged } from "./IManaged.sol"; diff --git a/packages/contracts/contracts/governance/Governed.sol b/packages/contracts/contracts/governance/Governed.sol index f692b2d19..570e2839c 100644 --- a/packages/contracts/contracts/governance/Governed.sol +++ b/packages/contracts/contracts/governance/Governed.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.7.6 <0.9.0; /** * @title Graph Governance contract diff --git a/packages/contracts/contracts/governance/Pausable.sol b/packages/contracts/contracts/governance/Pausable.sol index 552b0aa15..1e9baf5fe 100644 --- a/packages/contracts/contracts/governance/Pausable.sol +++ b/packages/contracts/contracts/governance/Pausable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.7.6 <0.9.0; abstract contract Pausable { /** diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol new file mode 100644 index 000000000..b45aee1ac --- /dev/null +++ b/packages/contracts/contracts/staking/IHorizonStaking.sol @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity >=0.7.6 <0.9.0; +pragma abicoder v2; + +interface Test { + function test() external returns (uint256); +} + +interface IHorizonStaking { + struct Provision { + // Service provider that created the provision + address serviceProvider; + // tokens in the provision + uint256 tokens; + // delegated tokens in the provision + uint256 delegatedTokens; + // tokens that are being thawed (and will stop being slashable soon) + uint256 tokensThawing; + // timestamp of provision creation + uint64 createdAt; + // authority to slash the provision + address verifier; + // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed + uint32 maxVerifierCut; + // time, in seconds, tokens must thaw before being withdrawn + uint64 thawingPeriod; + } + + // the new "Indexer" struct + struct ServiceProviderInternal { + // Tokens on the Service Provider stake (staked by the provider) + uint256 tokensStaked; + // Tokens used in allocations + uint256 __DEPRECATED_tokensAllocated; + // Tokens locked for withdrawal subject to thawing period + uint256 __DEPRECATED_tokensLocked; + // Block when locked tokens can be withdrawn + uint256 __DEPRECATED_tokensLockedUntil; + // tokens used in a provision + uint256 tokensProvisioned; + // tokens that initiated a thawing in any one of the provider's provisions + uint256 tokensRequestedThaw; + // tokens that have been removed from any one of the provider's provisions after thawing + uint256 tokensFulfilledThaw; + // provisions that take priority for undelegation force thawing + bytes32[] forceThawProvisions; + } + + struct ServiceProvider { + // Tokens on the provider stake (staked by the provider) + uint256 tokensStaked; + // tokens used in a provision + uint256 tokensProvisioned; + // tokens that initiated a thawing in any one of the provider's provisions + uint256 tokensRequestedThaw; + // tokens that have been removed from any one of the provider's provisions after thawing + uint256 tokensFulfilledThaw; + // provisions that take priority for undelegation force thawing + bytes32[] forceThawProvisions; + } + + struct DelegationPool { + uint32 __DEPRECATED_cooldownBlocks; // solhint-disable-line var-name-mixedcase + uint32 __DEPRECATED_indexingRewardCut; // in PPM + uint32 __DEPRECATED_queryFeeCut; // in PPM + uint256 __DEPRECATED_updatedAtBlock; // Block when the pool was last updated + uint256 tokens; // Total tokens as pool reserves + uint256 shares; // Total shares minted in the pool + mapping(address => Delegation) delegators; // Mapping of delegator => Delegation + } + + struct Delegation { + // shares owned by the delegator in the pool + uint256 shares; + // tokens delegated to the pool + uint256 tokens; + // Timestamp when locked tokens can be undelegated (after the timelock) + uint256 tokensLockedUntil; + } + + struct ThawRequest { + // tokens that are being thawed by this request + uint256 tokens; + // the provision id to which this request corresponds to + bytes32 provisionId; + // the address that initiated the thaw request, allowed to remove the funds once thawed + address owner; + // the timestamp when the thawed funds can be removed from the provision + uint64 thawingUntil; + // the value of `ServiceProvider.tokensRequestedThaw` the moment the thaw request is created + uint256 tokensRequestedThawSnapshot; + } + + // whitelist/deny a verifier + function allowVerifier(address verifier, bool allow) external; + + // deposit stake + function stake(uint256 tokens) external; + + // create a provision + function provision(uint256 tokens, address verifier, uint32 maxVerifierCut, uint64 thawingPeriod) external; + + // accept a provision + function acceptProvision(address serviceProvider) external; + + // initiate a thawing to remove tokens from a provision + function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32 thawRequestId); + + // moves thawed stake from a provision back into the provider's available stake + function deprovision(bytes32 thawRequestId) external; + + // moves thawed stake from one provision into another provision + function reprovision(bytes32 thawRequestId, bytes32 provisionId) external; + + // moves thawed stake back to the owner's account - stake is removed from the protocol + function withdraw(bytes32 thawRequestId) external; + + // delegate tokens to a provider + function delegate(address serviceProvider, uint256 tokens) external; + + // undelegate tokens + function undelegate( + address serviceProvider, + uint256 tokens, + bytes32[] calldata provisions + ) external returns (bytes32 thawRequestId); + + // slash a service provider + function slash(address serviceProvider, uint256 tokens, uint256 reward, address rewardsDestination) external; + + // set the Service Provider's preferred provisions to be force thawed + function setForceThawProvisions(bytes32[] calldata provisions) external; + + // total staked tokens to the provider + // `ServiceProvider.tokensStaked + DelegationPool.serviceProvider.tokens` + function getStake(address serviceProvider) external view returns (uint256 tokens); + + // staked tokens that are currently not provisioned, aka idle stake + // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` + function getIdleStake(address serviceProvider) external view returns (uint256 tokens); + + // staked tokens the provider can provision before hitting the delegation cap + // `ServiceProvider.tokensStaked * Staking.delegationRatio - Provision.tokensProvisioned` + function getCapacity(address serviceProvider) external view returns (uint256 tokens); + + // provisioned tokens that are not being used + // `Provision.tokens - Provision.tokensThawing` + function getTokensAvailable(address serviceProvider, address verifier) external view returns (uint256 tokens); + + function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory); + + function getProvision(address serviceProvider, address verifier) external view returns (Provision memory); + + /** + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param _operator The address to check for auth + * @param _serviceProvider The service provider on behalf of whom they're claiming to act + * @param _verifier The verifier / data service on which they're claiming to act + */ + function isAuthorized(address _operator, address _serviceProvider, address _verifier) external view returns (bool); + + function getDelegationCut(address serviceProvider, uint8 paymentType) external view returns (uint256 delegationCut); + function addToDelegationPool(address serviceProvider, uint256 tokens) external; + function stakeToProvision(address _serviceProvider, address _verifier, uint256 _tokens) external; +} diff --git a/packages/contracts/contracts/token/IGraphToken.sol b/packages/contracts/contracts/token/IGraphToken.sol index 8255e18d5..f24467d42 100644 --- a/packages/contracts/contracts/token/IGraphToken.sol +++ b/packages/contracts/contracts/token/IGraphToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.7.6 <=0.9.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/packages/contracts/contracts/utils/TokenUtils.sol b/packages/contracts/contracts/utils/TokenUtils.sol index 265f918a5..09d9ed704 100644 --- a/packages/contracts/contracts/utils/TokenUtils.sol +++ b/packages/contracts/contracts/utils/TokenUtils.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.7.6 <=0.8.24; import "../token/IGraphToken.sol"; diff --git a/packages/horizon/contracts/SimpleTest.sol b/packages/horizon/contracts/SimpleTest.sol new file mode 100644 index 000000000..5cc28d9cc --- /dev/null +++ b/packages/horizon/contracts/SimpleTest.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.4.0 <0.9.0; + +import { Test } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; + +contract SimpleTest is Test { + function test() external pure returns (uint256) { + return 42; + } +} diff --git a/packages/horizon/test/SimpleTest.t.sol b/packages/horizon/test/SimpleTest.t.sol new file mode 100644 index 000000000..b130e5d34 --- /dev/null +++ b/packages/horizon/test/SimpleTest.t.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.10; + +import "forge-std/Test.sol"; +import { SimpleTest } from "../contracts/SimpleTest.sol"; + +contract ContractTest is Test { + SimpleTest simpleTest; + + function setUp() public { + simpleTest = new SimpleTest(); + } + + function test_NumberIs42() public { + assertEq(simpleTest.test(), 42); + } +} diff --git a/packages/horizon/test/SimpleTest.ts b/packages/horizon/test/SimpleTest.ts new file mode 100644 index 000000000..cfcfb1443 --- /dev/null +++ b/packages/horizon/test/SimpleTest.ts @@ -0,0 +1,23 @@ +import hardhat from 'hardhat' + +import { expect } from 'chai' +import { loadFixture } from '@nomicfoundation/hardhat-toolbox/network-helpers' + +const ethers = hardhat.ethers + +describe('SimpleTest', function () { + async function deployFixture() { + const [owner] = await ethers.getSigners() + const SimpleTest = await ethers.getContractFactory('SimpleTest') + const simpleTest = await SimpleTest.deploy() + return { simpleTest, owner } + } + + describe('Deployment', function () { + it('Should return 42', async function () { + const { simpleTest } = await loadFixture(deployFixture) + + expect(await simpleTest.test()).to.equal(42) + }) + }) +}) diff --git a/packages/solhint-graph-config/README.md b/packages/solhint-graph-config/README.md index 7a724946b..4257b2dd8 100644 --- a/packages/solhint-graph-config/README.md +++ b/packages/solhint-graph-config/README.md @@ -17,6 +17,13 @@ yarn add --dev solhint solhint-graph-config yarn add --dev solhint solhint-graph-config@workspace:^x.y.z ``` +To use graph plugin you'll also need to manually add the plugin to your `package.json`: +```json + "devDependencies": { + "solhint-plugin-graph": "file:node_modules/solhint-graph-config/plugin" + } +``` + ### Configuration Run `solhint` with `node_modules/solhint-graph-config/index.js` as the configuration file. We suggest creating an npm script to make it easier to run: diff --git a/packages/solhint-graph-config/index.js b/packages/solhint-graph-config/index.js index b37be2810..f7193d748 100644 --- a/packages/solhint-graph-config/index.js +++ b/packages/solhint-graph-config/index.js @@ -1,12 +1,28 @@ module.exports = { + plugins: [ 'graph' ], extends: 'solhint:recommended', rules: { - 'func-visibility': ['warn', { ignoreConstructors: true }], - 'compiler-version': ['off'], + // best practices + 'no-empty-blocks': 'off', 'constructor-syntax': 'warn', + + // style rules + 'private-vars-leading-underscore': 'off', // see graph/leading-underscore + 'const-name-snakecase': 'warn', + 'named-parameters-mapping': 'warn', + 'imports-on-top': 'warn', + 'ordering': 'warn', + 'visibility-modifier-order': 'warn', + + // miscellaneous 'quotes': ['error', 'double'], - 'reason-string': ['off'], + + // security + 'compiler-version': ['off'], + 'func-visibility': ['warn', { ignoreConstructors: true }], 'not-rely-on-time': 'off', - 'no-empty-blocks': 'off', + + // graph + 'graph/leading-underscore': 'warn', }, } diff --git a/packages/solhint-graph-config/package.json b/packages/solhint-graph-config/package.json index 2ead8bbef..d976b3cb9 100644 --- a/packages/solhint-graph-config/package.json +++ b/packages/solhint-graph-config/package.json @@ -5,9 +5,12 @@ "main": "index.js", "author": "The Graph Team", "license": "GPL-2.0-or-later", + "dependencies": { + "solhint-plugin-graph": "file:plugin" + }, "peerDependencies": { "prettier": "^3.2.5", "prettier-plugin-solidity": "^1.3.1", - "solhint": "^4.1.1" + "solhint": "^4.5.4" } } diff --git a/packages/solhint-graph-config/plugin/index.js b/packages/solhint-graph-config/plugin/index.js new file mode 100644 index 000000000..cd16840e8 --- /dev/null +++ b/packages/solhint-graph-config/plugin/index.js @@ -0,0 +1,114 @@ +function hasLeadingUnderscore(text) { + return text && text[0] === '_' +} + +class Base { + constructor(reporter, config, source, fileName) { + this.reporter = reporter; + this.ignored = this.constructor.global; + this.ruleId = this.constructor.ruleId; + if (this.ruleId === undefined) { + throw Error('missing ruleId static property'); + } + } + + error(node, message, fix) { + if (!this.ignored) { + this.reporter.error(node, this.ruleId, message, fix); + } + } +} + +module.exports = [ + class extends Base { + static ruleId = 'leading-underscore'; + + ContractDefinition(node) { + if (node.kind === 'library') { + this.inLibrary = true + } + } + + 'ContractDefinition:exit'() { + this.inLibrary = false + } + + StateVariableDeclaration() { + this.inStateVariableDeclaration = true + } + + 'StateVariableDeclaration:exit'() { + this.inStateVariableDeclaration = false + } + + VariableDeclaration(node) { + if (!this.inLibrary) { + if (!this.inStateVariableDeclaration) { + this.validateName(node, false, 'variable') + return + } + + this.validateName(node, 'variable') + } + + } + + FunctionDefinition(node) { + if (!this.inLibrary) { + if (!node.name) { + return + } + for (const parameter of node.parameters) { + parameter.visibility = node.visibility + } + + this.validateName(node, 'function') + + } + } + + validateName(node, type) { + const isPrivate = node.visibility === 'private' + const isInternal = node.visibility === 'internal' || node.visibility === 'default' + const isConstant = node.isDeclaredConst + const isImmutable = node.isImmutable + const shouldHaveLeadingUnderscore = (isPrivate || isInternal) && !(isConstant || isImmutable) + + if (node.name === null) { + return + } + + if (hasLeadingUnderscore(node.name) !== shouldHaveLeadingUnderscore) { + this._error(node, node.name, shouldHaveLeadingUnderscore, type) + } + } + + fixStatement(node, shouldHaveLeadingUnderscore, type) { + let range + + if (type === 'function') { + range = node.range + range[0] += 8 + } else if (type === 'parameter') { + range = node.identifier.range + } else { + range = node.identifier.range + range[0] -= 1 + } + + return (fixer) => + shouldHaveLeadingUnderscore + ? fixer.insertTextBeforeRange(range, ' _') + : fixer.removeRange([range[0] + 1, range[0] + 1]) + } + + _error(node, name, shouldHaveLeadingUnderscore, type) { + this.error( + node, + `'${name}' ${shouldHaveLeadingUnderscore ? 'should' : 'should not'} start with _`, + this.fixStatement(node, shouldHaveLeadingUnderscore, type) + ) + } + }, + +]; \ No newline at end of file diff --git a/packages/solhint-graph-config/plugin/package.json b/packages/solhint-graph-config/plugin/package.json new file mode 100644 index 000000000..53bab497d --- /dev/null +++ b/packages/solhint-graph-config/plugin/package.json @@ -0,0 +1,5 @@ +{ + "name": "solhint-plugin-graph", + "version": "0.0.0", + "private": true +} \ No newline at end of file diff --git a/packages/subgraph-service/README.md b/packages/subgraph-service/README.md new file mode 100644 index 000000000..7be82e5d6 --- /dev/null +++ b/packages/subgraph-service/README.md @@ -0,0 +1,13 @@ +# Sample Hardhat Project + +This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract. + +Try running some of the following tasks: + +```shell +npx hardhat help +npx hardhat test +REPORT_GAS=true npx hardhat test +npx hardhat node +npx hardhat run scripts/deploy.ts +``` diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol new file mode 100644 index 000000000..dc5f785f2 --- /dev/null +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -0,0 +1,783 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.24; +pragma abicoder v2; + +import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { IDisputeManager } from "./interfaces/IDisputeManager.sol"; +import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { DisputeManagerV1Storage } from "./DisputeManagerStorage.sol"; +import { GraphDirectory } from "./data-service/GraphDirectory.sol"; +import { AttestationManager } from "./utilities/AttestationManager.sol"; + +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; +import { Allocation } from "./libraries/Allocation.sol"; +import { PPMMath } from "./data-service/libraries/PPMMath.sol"; +import { Attestation } from "./libraries/Attestation.sol"; + +/* + * @title DisputeManager + * @notice Provides a way to align the incentives of participants by having slashing as deterrent + * for incorrect behaviour. + * + * There are two types of disputes that can be created: Query disputes and Indexing disputes. + * + * Query Disputes: + * Graph nodes receive queries and return responses with signed receipts called attestations. + * An attestation can be disputed if the consumer thinks the query response was invalid. + * Indexers use the derived private key for an allocation to sign attestations. + * + * Indexing Disputes: + * Indexers present a Proof of Indexing (POI) when they close allocations to prove + * they were indexing a subgraph. The Staking contract emits that proof with the format + * keccak256(indexer.address, POI). + * Any challenger can dispute the validity of a POI by submitting a dispute to this contract + * along with a deposit. + * + * Arbitration: + * Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated + * to a EOA or DAO. + */ +contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeManagerV1Storage, IDisputeManager { + using PPMMath for uint256; + + // -- Events -- + event ArbitratorSet(address arbitrator); + event DisputePeriodSet(uint64 disputePeriod); + event MinimumDepositSet(uint256 minimumDeposit); + event MaxSlashingPercentageSet(uint32 maxSlashingPercentage); + event FishermanRewardPercentageSet(uint32 fishermanRewardPercentage); + event SubgraphServiceSet(address indexed subgraphService); + + /** + * @dev Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer` + * by `fisherman`. + * The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted. + */ + event QueryDisputeCreated( + bytes32 indexed disputeId, + address indexed indexer, + address indexed fisherman, + uint256 tokens, + bytes32 subgraphDeploymentId, + bytes attestation + ); + + /** + * @dev Emitted when an indexing dispute is created for `allocationId` and `indexer` + * by `fisherman`. + * The event emits the amount of `tokens` deposited by the fisherman. + */ + event IndexingDisputeCreated( + bytes32 indexed disputeId, + address indexed indexer, + address indexed fisherman, + uint256 tokens, + address allocationId + ); + + /** + * @dev Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`. + * The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward. + */ + event DisputeAccepted( + bytes32 indexed disputeId, + address indexed indexer, + address indexed fisherman, + uint256 tokens + ); + + /** + * @dev Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`. + * The event emits the amount `tokens` burned from the fisherman deposit. + */ + event DisputeRejected( + bytes32 indexed disputeId, + address indexed indexer, + address indexed fisherman, + uint256 tokens + ); + + /** + * @dev Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`. + * The event emits the amount `tokens` used as deposit and returned to the fisherman. + */ + event DisputeDrawn(bytes32 indexed disputeId, address indexed indexer, address indexed fisherman, uint256 tokens); + + /** + * @dev Emitted when two disputes are in conflict to link them. + * This event will be emitted after each DisputeCreated event is emitted + * for each of the individual disputes. + */ + event DisputeLinked(bytes32 indexed disputeId1, bytes32 indexed disputeId2); + + // -- Errors -- + + error DisputeManagerNotArbitrator(); + error DisputeManagerNotFisherman(); + error DisputeManagerInvalidZeroAddress(); + error DisputeManagerDisputePeriodZero(); + error DisputeManagerZeroTokens(); + error DisputeManagerInvalidDispute(bytes32 disputeId); + error DisputeManagerInvalidMinimumDeposit(uint256 minimumDeposit); + error DisputeManagerInvalidFishermanReward(uint32 percentage); + error DisputeManagerInvalidMaxSlashingPercentage(uint32 maxSlashingPercentage); + error DisputeManagerInvalidSlashAmount(uint256 slashAmount); + error DisputeManagerInvalidDisputeStatus(IDisputeManager.DisputeStatus status); + error DisputeManagerInsufficientDeposit(uint256 deposit, uint256 minimumDeposit); + error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId); + error DisputeManagerDisputePeriodNotFinished(); + error DisputeManagerMustAcceptRelatedDispute(bytes32 disputeId, bytes32 relatedDisputeId); + error DisputeManagerIndexerNotFound(address allocationId); + error DisputeManagerNonMatchingSubgraphDeployment(bytes32 subgraphDeploymentId1, bytes32 subgraphDeploymentId2); + error DisputeManagerNonConflictingAttestations( + bytes32 requestCID1, + bytes32 responseCID1, + bytes32 subgraphDeploymentId1, + bytes32 requestCID2, + bytes32 responseCID2, + bytes32 subgraphDeploymentId2 + ); + + // -- Modifiers -- + + /** + * @dev Check if the caller is the arbitrator. + */ + modifier onlyArbitrator() { + if (msg.sender != arbitrator) { + revert DisputeManagerNotArbitrator(); + } + _; + } + + modifier onlyPendingDispute(bytes32 disputeId) { + if (!isDisputeCreated(disputeId)) { + revert DisputeManagerInvalidDispute(disputeId); + } + + if (disputes[disputeId].status != IDisputeManager.DisputeStatus.Pending) { + revert DisputeManagerInvalidDisputeStatus(disputes[disputeId].status); + } + _; + } + + modifier onlyFisherman(bytes32 disputeId) { + if (!isDisputeCreated(disputeId)) { + revert DisputeManagerInvalidDispute(disputeId); + } + + if (msg.sender != disputes[disputeId].fisherman) { + revert DisputeManagerNotFisherman(); + } + _; + } + + // -- Functions -- + + /** + * @dev Initialize this contract. + * @param controller Address of Graph Controller contract + * @param arbitrator Arbitrator role + * @param disputePeriod Dispute period in seconds + * @param minimumDeposit Minimum deposit required to create a Dispute + * @param fishermanRewardPercentage Percent of slashed funds for fisherman (ppm) + * @param maxSlashingPercentage Maximum percentage of indexer stake that can be slashed (ppm) + */ + constructor( + address controller, + address arbitrator, + uint64 disputePeriod, + uint256 minimumDeposit, + uint32 fishermanRewardPercentage, + uint32 maxSlashingPercentage + ) Ownable(msg.sender) GraphDirectory(controller) { + // Settings + _setArbitrator(arbitrator); + _setDisputePeriod(disputePeriod); + _setMinimumDeposit(minimumDeposit); + _setFishermanRewardPercentage(fishermanRewardPercentage); + _setMaxSlashingPercentage(maxSlashingPercentage); + } + + /** + * @dev Create an indexing dispute for the arbitrator to resolve. + * The disputes are created in reference to an allocationId + * This function is called by a challenger that will need to `_deposit` at + * least `minimumDeposit` GRT tokens. + * @param allocationId The allocation to dispute + * @param deposit Amount of tokens staked as deposit + */ + function createIndexingDispute(address allocationId, uint256 deposit) external override returns (bytes32) { + // Get funds from submitter + _pullSubmitterDeposit(deposit); + + // Create a dispute + return _createIndexingDisputeWithAllocation(msg.sender, deposit, allocationId); + } + + /** + * @dev Create a query dispute for the arbitrator to resolve. + * This function is called by a fisherman that will need to `_deposit` at + * least `minimumDeposit` GRT tokens. + * @param attestationData Attestation bytes submitted by the fisherman + * @param deposit Amount of tokens staked as deposit + */ + function createQueryDispute(bytes calldata attestationData, uint256 deposit) external override returns (bytes32) { + // Get funds from submitter + _pullSubmitterDeposit(deposit); + + // Create a dispute + return + _createQueryDisputeWithAttestation( + msg.sender, + deposit, + Attestation.parse(attestationData), + attestationData + ); + } + + /** + * @dev Create query disputes for two conflicting attestations. + * A conflicting attestation is a proof presented by two different indexers + * where for the same request on a subgraph the response is different. + * For this type of dispute the submitter is not required to present a deposit + * as one of the attestation is considered to be right. + * Two linked disputes will be created and if the arbitrator resolve one, the other + * one will be automatically resolved. + * @param attestationData1 First attestation data submitted + * @param attestationData2 Second attestation data submitted + * @return DisputeId1, DisputeId2 + */ + function createQueryDisputeConflict( + bytes calldata attestationData1, + bytes calldata attestationData2 + ) external override returns (bytes32, bytes32) { + address fisherman = msg.sender; + + // Parse each attestation + Attestation.State memory attestation1 = Attestation.parse(attestationData1); + Attestation.State memory attestation2 = Attestation.parse(attestationData2); + + // Test that attestations are conflicting + if (!Attestation.areConflicting(attestation2, attestation1)) { + revert DisputeManagerNonConflictingAttestations( + attestation1.requestCID, + attestation1.responseCID, + attestation1.subgraphDeploymentId, + attestation2.requestCID, + attestation2.responseCID, + attestation2.subgraphDeploymentId + ); + } + + // Create the disputes + // The deposit is zero for conflicting attestations + bytes32 dId1 = _createQueryDisputeWithAttestation(fisherman, 0, attestation1, attestationData1); + bytes32 dId2 = _createQueryDisputeWithAttestation(fisherman, 0, attestation2, attestationData2); + + // Store the linked disputes to be resolved + disputes[dId1].relatedDisputeId = dId2; + disputes[dId2].relatedDisputeId = dId1; + + // Emit event that links the two created disputes + emit DisputeLinked(dId1, dId2); + + return (dId1, dId2); + } + + /** + * @dev The arbitrator accepts a dispute as being valid. + * This function will revert if the indexer is not slashable, whether because it does not have + * any stake available or the slashing percentage is configured to be zero. In those cases + * a dispute must be resolved using drawDispute or rejectDispute. + * @notice Accept a dispute with Id `disputeId` + * @param disputeId Id of the dispute to be accepted + * @param slashAmount Amount of tokens to slash from the indexer + */ + function acceptDispute( + bytes32 disputeId, + uint256 slashAmount + ) external override onlyArbitrator onlyPendingDispute(disputeId) { + Dispute storage dispute = disputes[disputeId]; + + // store the dispute status + dispute.status = IDisputeManager.DisputeStatus.Accepted; + + // Slash + uint256 tokensToReward = _slashIndexer(dispute.indexer, slashAmount); + + // Give the fisherman their reward and their deposit back + TokenUtils.pushTokens(GRAPH_TOKEN, dispute.fisherman, tokensToReward + dispute.deposit); + + if (_isDisputeInConflict(dispute)) { + rejectDispute(dispute.relatedDisputeId); + } + + emit DisputeAccepted(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit + tokensToReward); + } + + /** + * @dev The arbitrator draws dispute. + * @notice Ignore a dispute with Id `disputeId` + * @param disputeId Id of the dispute to be disregarded + */ + function drawDispute(bytes32 disputeId) external override onlyArbitrator onlyPendingDispute(disputeId) { + Dispute storage dispute = disputes[disputeId]; + + // Return deposit to the fisherman + TokenUtils.pushTokens(GRAPH_TOKEN, dispute.fisherman, dispute.deposit); + + // resolve related dispute if any + _drawDisputeInConflict(dispute); + + // store dispute status + dispute.status = IDisputeManager.DisputeStatus.Drawn; + + emit DisputeDrawn(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); + } + + /** + * @dev Once the dispute period ends, if the disput status remains Pending, + * the fisherman can cancel the dispute and get back their initial deposit. + * @notice Cancel a dispute with Id `disputeId` + * @param disputeId Id of the dispute to be cancelled + */ + function cancelDispute(bytes32 disputeId) external override onlyFisherman(disputeId) onlyPendingDispute(disputeId) { + Dispute storage dispute = disputes[disputeId]; + + // Check if dispute period has finished + if (block.timestamp <= dispute.createdAt + disputePeriod) { + revert DisputeManagerDisputePeriodNotFinished(); + } + + // Return deposit to the fisherman + TokenUtils.pushTokens(GRAPH_TOKEN, dispute.fisherman, dispute.deposit); + + // resolve related dispute if any + _cancelDisputeInConflict(dispute); + + // store dispute status + dispute.status = IDisputeManager.DisputeStatus.Cancelled; + } + + /** + * @dev Set the arbitrator address. + * @notice Update the arbitrator to `_arbitrator` + * @param arbitrator The address of the arbitration contract or party + */ + function setArbitrator(address arbitrator) external override onlyOwner { + _setArbitrator(arbitrator); + } + + /** + * @dev Set the dispute period. + * @notice Update the dispute period to `_disputePeriod` in seconds + * @param disputePeriod Dispute period in seconds + */ + function setDisputePeriod(uint64 disputePeriod) external override { + _setDisputePeriod(disputePeriod); + } + + /** + * @dev Set the minimum deposit required to create a dispute. + * @notice Update the minimum deposit to `_minimumDeposit` Graph Tokens + * @param minimumDeposit The minimum deposit in Graph Tokens + */ + function setMinimumDeposit(uint256 minimumDeposit) external override onlyOwner { + _setMinimumDeposit(minimumDeposit); + } + + /** + * @dev Set the percent reward that the fisherman gets when slashing occurs. + * @notice Update the reward percentage to `_percentage` + * @param percentage Reward as a percentage of indexer stake + */ + function setFishermanRewardPercentage(uint32 percentage) external override onlyOwner { + _setFishermanRewardPercentage(percentage); + } + + /** + * @dev Set the maximum percentage that can be used for slashing indexers. + * @param maxSlashingPercentage Max percentage slashing for disputes + */ + function setMaxSlashingPercentage(uint32 maxSlashingPercentage) external override onlyOwner { + _setMaxSlashingPercentage(maxSlashingPercentage); + } + + /** + * @dev Set the subgraph service address. + * @notice Update the subgraph service to `_subgraphService` + * @param subgraphService The address of the subgraph service contract + */ + function setSubgraphService(address subgraphService) external onlyOwner { + _setSubgraphService(subgraphService); + } + + /** + * @dev Get the message hash that a indexer used to sign the receipt. + * Encodes a receipt using a domain separator, as described on + * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification. + * @notice Return the message hash used to sign the receipt + * @param receipt Receipt returned by indexer and submitted by fisherman + * @return Message hash used to sign the receipt + */ + function encodeReceipt(Attestation.Receipt memory receipt) external view returns (bytes32) { + return _encodeReceipt(receipt); + } + + /** + * @dev Get the verifier cut. + * @return Verifier cut in percentage (ppm) + */ + function getVerifierCut() external view returns (uint32) { + return fishermanRewardPercentage; + } + + /** + * @dev Get the dispute period. + * @return Dispute period in seconds + */ + function getDisputePeriod() external view returns (uint64) { + return disputePeriod; + } + + function areConflictingAttestations( + Attestation.State memory attestation1, + Attestation.State memory attestation2 + ) external pure returns (bool) { + return Attestation.areConflicting(attestation1, attestation2); + } + + /** + * @dev The arbitrator rejects a dispute as being invalid. + * @notice Reject a dispute with Id `disputeId` + * @param disputeId Id of the dispute to be rejected + */ + function rejectDispute(bytes32 disputeId) public override onlyArbitrator onlyPendingDispute(disputeId) { + Dispute storage dispute = disputes[disputeId]; + + // store dispute status + dispute.status = IDisputeManager.DisputeStatus.Rejected; + + // For conflicting disputes, the related dispute must be accepted + if (_isDisputeInConflict(dispute)) { + revert DisputeManagerMustAcceptRelatedDispute(disputeId, dispute.relatedDisputeId); + } + + // Burn the fisherman's deposit + TokenUtils.burnTokens(GRAPH_TOKEN, dispute.deposit); + + emit DisputeRejected(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); + } + + /** + * @dev Returns the indexer that signed an attestation. + * @param attestation Attestation + * @return indexer address + */ + function getAttestationIndexer(Attestation.State memory attestation) public view returns (address) { + // Get attestation signer. Indexers signs with the allocationId + address allocationId = _recoverSigner(attestation); + + Allocation.State memory alloc = subgraphService.getAllocation(allocationId); + if (alloc.indexer == address(0)) { + revert DisputeManagerIndexerNotFound(allocationId); + } + if (alloc.subgraphDeploymentId != attestation.subgraphDeploymentId) { + revert DisputeManagerNonMatchingSubgraphDeployment( + alloc.subgraphDeploymentId, + attestation.subgraphDeploymentId + ); + } + return alloc.indexer; + } + + /** + * @dev Return whether a dispute exists or not. + * @notice Return if dispute with Id `disputeId` exists + * @param disputeId True if dispute already exists + */ + function isDisputeCreated(bytes32 disputeId) public view override returns (bool) { + return disputes[disputeId].status != DisputeStatus.Null; + } + + /** + * @dev Create a query dispute passing the parsed attestation. + * To be used in createQueryDispute() and createQueryDisputeConflict() + * to avoid calling parseAttestation() multiple times + * `attestationData` is only passed to be emitted + * @param _fisherman Creator of dispute + * @param _deposit Amount of tokens staked as deposit + * @param _attestation Attestation struct parsed from bytes + * @param _attestationData Attestation bytes submitted by the fisherman + * @return DisputeId + */ + function _createQueryDisputeWithAttestation( + address _fisherman, + uint256 _deposit, + Attestation.State memory _attestation, + bytes memory _attestationData + ) private returns (bytes32) { + // Get the indexer that signed the attestation + address indexer = getAttestationIndexer(_attestation); + + // The indexer is disputable + IHorizonStaking.Provision memory provision = GRAPH_STAKING.getProvision(indexer, address(subgraphService)); + if (provision.tokens == 0) { + revert DisputeManagerZeroTokens(); + } + + // Create a disputeId + bytes32 disputeId = keccak256( + abi.encodePacked( + _attestation.requestCID, + _attestation.responseCID, + _attestation.subgraphDeploymentId, + indexer, + _fisherman + ) + ); + + // Only one dispute for a (indexer, subgraphDeploymentId) at a time + if (isDisputeCreated(disputeId)) { + revert DisputeManagerDisputeAlreadyCreated(disputeId); + } + + // Store dispute + disputes[disputeId] = Dispute( + indexer, + _fisherman, + _deposit, + 0, // no related dispute, + DisputeType.QueryDispute, + IDisputeManager.DisputeStatus.Pending, + block.timestamp + ); + + emit QueryDisputeCreated( + disputeId, + indexer, + _fisherman, + _deposit, + _attestation.subgraphDeploymentId, + _attestationData + ); + + return disputeId; + } + + /** + * @dev Create indexing dispute internal function. + * @param _fisherman The challenger creating the dispute + * @param _deposit Amount of tokens staked as deposit + * @param _allocationId Allocation disputed + */ + function _createIndexingDisputeWithAllocation( + address _fisherman, + uint256 _deposit, + address _allocationId + ) private returns (bytes32) { + // Create a disputeId + bytes32 disputeId = keccak256(abi.encodePacked(_allocationId)); + + // Only one dispute for an allocationId at a time + if (isDisputeCreated(disputeId)) { + revert DisputeManagerDisputeAlreadyCreated(disputeId); + } + + // Allocation must exist + Allocation.State memory alloc = subgraphService.getAllocation(_allocationId); + address indexer = alloc.indexer; + if (indexer == address(0)) { + revert DisputeManagerIndexerNotFound(_allocationId); + } + + // The indexer must be disputable + IHorizonStaking.Provision memory provision = GRAPH_STAKING.getProvision(indexer, address(subgraphService)); + if (provision.tokens == 0) { + revert DisputeManagerZeroTokens(); + } + + // Store dispute + disputes[disputeId] = Dispute( + alloc.indexer, + _fisherman, + _deposit, + 0, + DisputeType.IndexingDispute, + IDisputeManager.DisputeStatus.Pending, + block.timestamp + ); + + emit IndexingDisputeCreated(disputeId, alloc.indexer, _fisherman, _deposit, _allocationId); + + return disputeId; + } + + /** + * @dev Resolve the conflicting dispute if there is any for the one passed to this function. + * @param _dispute Dispute + * @return True if resolved + */ + function _drawDisputeInConflict(Dispute memory _dispute) private returns (bool) { + if (_isDisputeInConflict(_dispute)) { + bytes32 relatedDisputeId = _dispute.relatedDisputeId; + Dispute storage relatedDispute = disputes[relatedDisputeId]; + relatedDispute.status = IDisputeManager.DisputeStatus.Drawn; + return true; + } + return false; + } + + /** + * @dev Cancel the conflicting dispute if there is any for the one passed to this function. + * @param _dispute Dispute + * @return True if cancelled + */ + function _cancelDisputeInConflict(Dispute memory _dispute) private returns (bool) { + if (_isDisputeInConflict(_dispute)) { + bytes32 relatedDisputeId = _dispute.relatedDisputeId; + Dispute storage relatedDispute = disputes[relatedDisputeId]; + relatedDispute.status = IDisputeManager.DisputeStatus.Cancelled; + return true; + } + return false; + } + + /** + * @dev Pull deposit from submitter account. + * @param _deposit Amount of tokens to deposit + */ + function _pullSubmitterDeposit(uint256 _deposit) private { + // Ensure that fisherman has staked at least the minimum amount + if (_deposit < minimumDeposit) { + revert DisputeManagerInsufficientDeposit(_deposit, minimumDeposit); + } + + // Transfer tokens to deposit from fisherman to this contract + TokenUtils.pullTokens(GRAPH_TOKEN, msg.sender, _deposit); + } + + /** + * @dev Make the subgraph service contract slash the indexer and reward the challenger. + * Give the challenger a reward equal to the fishermanRewardPercentage of slashed amount + * @param _indexer Address of the indexer + * @param _slashAmount Amount of tokens to slash from the indexer + */ + function _slashIndexer(address _indexer, uint256 _slashAmount) private returns (uint256 rewardsAmount) { + // Get slashable amount for indexer + IHorizonStaking.Provision memory provision = GRAPH_STAKING.getProvision(_indexer, address(subgraphService)); + uint256 totalProvisionTokens = provision.tokens + provision.delegatedTokens; // slashable tokens + + // Get slash amount + uint256 maxSlashAmount = uint256(maxSlashingPercentage).mulPPM(totalProvisionTokens); + if (_slashAmount == 0) { + revert DisputeManagerInvalidSlashAmount(_slashAmount); + } + + if (_slashAmount > maxSlashAmount) { + revert DisputeManagerInvalidSlashAmount(_slashAmount); + } + + // Rewards amount can only be extracted from service poriver tokens so + // we grab the minimum between the slash amount and indexer's tokens + uint256 maxRewardableTokens = Math.min(_slashAmount, provision.tokens); + rewardsAmount = uint256(fishermanRewardPercentage).mulPPM(maxRewardableTokens); + + subgraphService.slash(_indexer, abi.encode(_slashAmount, rewardsAmount)); + return rewardsAmount; + } + + /** + * @dev Internal: Set the arbitrator address. + * @notice Update the arbitrator to `_arbitrator` + * @param _arbitrator The address of the arbitration contract or party + */ + function _setArbitrator(address _arbitrator) private { + if (_arbitrator == address(0)) { + revert DisputeManagerInvalidZeroAddress(); + } + arbitrator = _arbitrator; + emit ArbitratorSet(arbitrator); + } + + /** + * @dev Internal: Set the dispute period. + * @notice Update the dispute period to `_disputePeriod` in seconds + * @param _disputePeriod Dispute period in seconds + */ + function _setDisputePeriod(uint64 _disputePeriod) private { + if (_disputePeriod == 0) { + revert DisputeManagerDisputePeriodZero(); + } + disputePeriod = _disputePeriod; + emit DisputePeriodSet(disputePeriod); + } + + /** + * @dev Internal: Set the minimum deposit required to create a dispute. + * @notice Update the minimum deposit to `_minimumDeposit` Graph Tokens + * @param _minimumDeposit The minimum deposit in Graph Tokens + */ + function _setMinimumDeposit(uint256 _minimumDeposit) private { + if (_minimumDeposit == 0) { + revert DisputeManagerInvalidMinimumDeposit(_minimumDeposit); + } + minimumDeposit = _minimumDeposit; + emit MinimumDepositSet(minimumDeposit); + } + + /** + * @dev Internal: Set the percent reward that the fisherman gets when slashing occurs. + * @notice Update the reward percentage to `_percentage` + * @param _percentage Reward as a percentage of indexer stake + */ + function _setFishermanRewardPercentage(uint32 _percentage) private { + // Must be within 0% to 100% (inclusive) + if (!PPMMath.isValidPPM(_percentage)) { + revert DisputeManagerInvalidFishermanReward(_percentage); + } + fishermanRewardPercentage = _percentage; + emit FishermanRewardPercentageSet(fishermanRewardPercentage); + } + + /** + * @dev Internal: Set the maximum percentage that can be used for slashing indexers. + * @param _maxSlashingPercentage Max percentage slashing for disputes + */ + function _setMaxSlashingPercentage(uint32 _maxSlashingPercentage) private { + // Must be within 0% to 100% (inclusive) + if (!PPMMath.isValidPPM(_maxSlashingPercentage)) { + revert DisputeManagerInvalidMaxSlashingPercentage(_maxSlashingPercentage); + } + maxSlashingPercentage = _maxSlashingPercentage; + emit MaxSlashingPercentageSet(maxSlashingPercentage); + } + + /** + * @dev Internal: Set the subgraph service address. + * @notice Update the subgraph service to `_subgraphService` + * @param _subgraphService The address of the subgraph service contract + */ + function _setSubgraphService(address _subgraphService) private { + if (_subgraphService == address(0)) { + revert DisputeManagerInvalidZeroAddress(); + } + subgraphService = ISubgraphService(_subgraphService); + emit SubgraphServiceSet(_subgraphService); + } + + /** + * @dev Returns whether the dispute is for a conflicting attestation or not. + * @param _dispute Dispute + * @return True conflicting attestation dispute + */ + function _isDisputeInConflict(Dispute memory _dispute) private view returns (bool) { + bytes32 relatedId = _dispute.relatedDisputeId; + // this is so the check returns false when rejecting the related dispute. + return relatedId != 0 && disputes[relatedId].status == IDisputeManager.DisputeStatus.Pending; + } +} diff --git a/packages/subgraph-service/contracts/DisputeManagerStorage.sol b/packages/subgraph-service/contracts/DisputeManagerStorage.sol new file mode 100644 index 000000000..350d96566 --- /dev/null +++ b/packages/subgraph-service/contracts/DisputeManagerStorage.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity ^0.8.24; + +import { IDisputeManager } from "./interfaces/IDisputeManager.sol"; +import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; + +abstract contract DisputeManagerV1Storage { + // -- State -- + + ISubgraphService public subgraphService; + + // The arbitrator is solely in control of arbitrating disputes + address public arbitrator; + + // dispute period in seconds + uint64 public disputePeriod; + + // Minimum deposit required to create a Dispute + uint256 public minimumDeposit; + + // Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute + // Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) + uint32 public fishermanRewardPercentage; + + // Maximum percentage of indexer stake that can be slashed on a dispute + // Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) + uint32 public maxSlashingPercentage; + + // Disputes created : disputeID => Dispute + // disputeID - check creation functions to see how disputeID is built + mapping(bytes32 disputeID => IDisputeManager.Dispute dispute) public disputes; +} diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol new file mode 100644 index 000000000..9489373ab --- /dev/null +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -0,0 +1,273 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; +import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; +import { ITAPVerifier } from "./interfaces/ITAPVerifier.sol"; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { DataService } from "./data-service/DataService.sol"; +import { DataServicePausable } from "./data-service/extensions/DataServicePausable.sol"; +import { DataServiceRescuable } from "./data-service/extensions/DataServiceRescuable.sol"; +import { DataServiceFees } from "./data-service/extensions/DataServiceFees.sol"; +import { Directory } from "./utilities/Directory.sol"; +import { AllocationManager } from "./utilities/AllocationManager.sol"; +import { SubgraphServiceV1Storage } from "./SubgraphServiceStorage.sol"; + +import { PPMMath } from "./data-service/libraries/PPMMath.sol"; +import { Allocation } from "./libraries/Allocation.sol"; +import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; + +// TODO: contract needs to be upgradeable +contract SubgraphService is + Ownable, + DataService, + DataServicePausable, + DataServiceRescuable, + DataServiceFees, + Directory, + AllocationManager, + SubgraphServiceV1Storage, + ISubgraphService +{ + using PPMMath for uint256; + using Allocation for mapping(address => Allocation.State); + + event QueryFeesRedeemed( + address serviceProvider, + address payer, + uint256 tokensCollected, + uint256 tokensCurators, + uint256 tokensSubgraphService + ); + + error SubgraphServiceEmptyUrl(); + error SubgraphServiceInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected); + error SubgraphServiceInvalidPaymentType(IGraphPayments.PaymentTypes feeType); + error SubgraphServiceIndexerAlreadyRegistered(); + error SubgraphServiceIndexerNotRegistered(address indexer); + error SubgraphServiceInconsistentCollection(uint256 tokensExpected, uint256 tokensCollected); + + modifier onlyRegisteredIndexer(address indexer) { + if (indexers[indexer].registeredAt == 0) { + revert SubgraphServiceIndexerNotRegistered(indexer); + } + _; + } + + constructor( + address graphController, + address disputeManager, + address tapVerifier, + address curation, + uint256 minimumProvisionTokens + ) + Ownable(msg.sender) + DataService(graphController) + Directory(address(this), tapVerifier, disputeManager, curation) + AllocationManager("SubgraphService", "1.0") + { + _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max); + } + + function register( + address indexer, + bytes calldata data + ) external override onlyProvisionAuthorized(indexer) whenNotPaused { + (string memory url, string memory geohash) = abi.decode(data, (string, string)); + + // Must provide a URL + if (bytes(url).length == 0) { + revert SubgraphServiceEmptyUrl(); + } + + // Only allow registering once + if (indexers[indexer].registeredAt != 0) { + revert SubgraphServiceIndexerAlreadyRegistered(); + } + + // Register the indexer + indexers[indexer] = Indexer({ registeredAt: block.timestamp, url: url, geoHash: geohash }); + + // Ensure the service provider created a valid provision for the data service + // and accept it in the staking contract + _acceptProvision(indexer); + + emit ServiceProviderRegistered(indexer); + } + + function acceptProvision( + address indexer, + bytes calldata + ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + _acceptProvision(indexer); + } + + function startService( + address indexer, + bytes calldata data + ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + (bytes32 subgraphDeploymentId, uint256 tokens, address allocationId, bytes memory allocationProof) = abi.decode( + data, + (bytes32, uint256, address, bytes) + ); + _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof); + emit ServiceStarted(indexer); + } + + function collectServicePayment( + address indexer, + bytes calldata data + ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + (address allocationId, bytes32 poi) = abi.decode(data, (address, bytes32)); + uint256 rewards = _collectPOIRewards(allocationId, poi); + emit ServicePaymentCollected(indexer, rewards); + } + + function stopService( + address indexer, + bytes calldata data + ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + address allocationId = abi.decode(data, (address)); + _closeAllocation(allocationId); + emit ServiceStopped(indexer); + } + + function resizeAllocation( + address indexer, + address allocationId, + uint256 tokens + ) external onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + _resizeAllocation(allocationId, tokens); + } + + // TODO: Does this design allow custom payment types?! + function redeem( + address indexer, + IGraphPayments.PaymentTypes feeType, + bytes calldata data + ) external override onlyRegisteredIndexer(indexer) whenNotPaused { + uint256 feesCollected = 0; + + if (feeType == IGraphPayments.PaymentTypes.QueryFee) { + feesCollected = _redeemQueryFees(abi.decode(data, (ITAPVerifier.SignedRAV))); + } else { + revert SubgraphServiceInvalidPaymentType(feeType); + } + + emit ServiceFeesRedeemed(indexer, feeType, feesCollected); + } + + function slash(address indexer, bytes calldata data) external override onlyDisputeManager whenNotPaused { + (uint256 tokens, uint256 reward) = abi.decode(data, (uint256, uint256)); + GRAPH_STAKING.slash(indexer, tokens, reward, address(DISPUTE_MANAGER)); + emit ServiceProviderSlashed(indexer, tokens); + } + + function migrateLegacyAllocation( + address indexer, + address allocationId, + bytes32 subgraphDeploymentID + ) external onlyOwner { + _migrateLegacyAllocation(indexer, allocationId, subgraphDeploymentID); + } + + function setPauseGuardian(address pauseGuardian, bool allowed) external onlyOwner { + _setPauseGuardian(pauseGuardian, allowed); + } + + function getAllocation(address allocationId) external view override returns (Allocation.State memory) { + return allocations[allocationId]; + } + + function getLegacyAllocation(address allocationId) external view returns (LegacyAllocation.State memory) { + return legacyAllocations[allocationId]; + } + + function encodeAllocationProof(address _indexer, address _allocationId) external view returns (bytes32) { + return _encodeAllocationProof(_indexer, _allocationId); + } + + // -- Data service parameter getters -- + function _getThawingPeriodRange() internal view override returns (uint64 min, uint64 max) { + uint64 disputePeriod = DISPUTE_MANAGER.getDisputePeriod(); + return (disputePeriod, type(uint64).max); + } + + function _getVerifierCutRange() internal view override returns (uint32 min, uint32 max) { + uint32 verifierCut = DISPUTE_MANAGER.getVerifierCut(); + return (verifierCut, type(uint32).max); + } + + function _redeemQueryFees(ITAPVerifier.SignedRAV memory _signedRAV) private returns (uint256 feesCollected) { + address indexer = _signedRAV.rav.serviceProvider; + address allocationId = abi.decode(_signedRAV.rav.metadata, (address)); + + // release expired stake claims + _releaseStake(IGraphPayments.PaymentTypes.QueryFee, indexer, 0); + + // validate RAV and calculate tokens to collect + address payer = TAP_VERIFIER.verify(_signedRAV); + uint256 tokens = _signedRAV.rav.valueAggregate; + uint256 tokensAlreadyCollected = tokensCollected[indexer][payer]; + if (tokens <= tokensAlreadyCollected) { + revert SubgraphServiceInconsistentRAVTokens(tokens, tokensAlreadyCollected); + } + uint256 tokensToCollect = tokens - tokensAlreadyCollected; + uint256 tokensCurators = 0; + uint256 tokensSubgraphService = 0; + + if (tokensToCollect > 0) { + // lock stake as economic security for fees + // block scope to avoid 'stack too deep' error + { + uint256 tokensToLock = tokensToCollect * stakeToFeesRatio; + uint256 unlockTimestamp = block.timestamp + DISPUTE_MANAGER.getDisputePeriod(); + _lockStake(IGraphPayments.PaymentTypes.QueryFee, indexer, tokensToLock, unlockTimestamp); + } + + // get subgraph deployment id - reverts if allocation is not found + bytes32 subgraphDeploymentId = allocations.get(allocationId).subgraphDeploymentId; + + // calculate service and curator cuts + // TODO: note we don't let curation cut round down to zero + PaymentFee memory feePercentages = _getQueryFeesPaymentFees(subgraphDeploymentId); + tokensSubgraphService = tokensToCollect.mulPPM(feePercentages.servicePercentage); + tokensCurators = tokensToCollect.mulPPMRoundUp(feePercentages.curationPercentage); + uint256 totalCut = tokensSubgraphService + tokensCurators; + + // collect fees + uint256 balanceBefore = GRAPH_TOKEN.balanceOf(address(this)); + GRAPH_PAYMENTS.collect(payer, indexer, tokensToCollect, IGraphPayments.PaymentTypes.QueryFee, totalCut); + uint256 balanceAfter = GRAPH_TOKEN.balanceOf(address(this)); + if (balanceBefore + totalCut != balanceAfter) { + revert SubgraphServiceInconsistentCollection(balanceBefore + totalCut, balanceAfter); + } + tokensCollected[indexer][payer] = tokens; + + // distribute curation cut to curators + if (tokensCurators > 0) { + // we are about to change subgraph signal so we take rewards snapshot + GRAPH_REWARDS_MANAGER.onSubgraphSignalUpdate(subgraphDeploymentId); + + // Send GRT and bookkeep by calling collect() + GRAPH_TOKEN.transfer(address(CURATION), tokensCurators); + CURATION.collect(subgraphDeploymentId, tokensCurators); + } + } + + emit QueryFeesRedeemed(indexer, payer, tokensToCollect, tokensCurators, tokensSubgraphService); + return tokensToCollect; + } + + function _getQueryFeesPaymentFees(bytes32 _subgraphDeploymentId) private view returns (PaymentFee memory) { + PaymentFee memory feePercentages = paymentFees[IGraphPayments.PaymentTypes.QueryFee]; + + // Only pay curation fees if the subgraph is curated + if (!CURATION.isCurated(_subgraphDeploymentId)) { + feePercentages.curationPercentage = 0; + } + + return feePercentages; + } +} diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol new file mode 100644 index 000000000..27ebc13ff --- /dev/null +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; +import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; + +abstract contract SubgraphServiceV1Storage { + /// @notice Service providers registered in the data service + mapping(address indexer => ISubgraphService.Indexer details) public indexers; + + // -- Fees -- + // multiplier for how many tokens back collected query fees + uint256 public stakeToFeesRatio; + + /// @notice The fees cut taken by the subgraph service + mapping(IGraphPayments.PaymentTypes paymentType => ISubgraphService.PaymentFee paymentFees) public paymentFees; + + mapping(address indexer => mapping(address payer => uint256 tokens)) public tokensCollected; +} diff --git a/packages/subgraph-service/contracts/TAPVerifier.sol b/packages/subgraph-service/contracts/TAPVerifier.sol new file mode 100644 index 000000000..e7b3d5a7f --- /dev/null +++ b/packages/subgraph-service/contracts/TAPVerifier.sol @@ -0,0 +1,220 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { ITAPVerifier } from "./interfaces/ITAPVerifier.sol"; + +import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; + +/** + * @title TAPVerifier + * @dev A contract for verifying receipt aggregation vouchers. + */ +contract TAPVerifier is EIP712, ITAPVerifier { + bytes32 private constant EIP712_RAV_TYPEHASH = + keccak256( + "ReceiptAggregateVoucher(address dataService, address serviceProvider,uint64 timestampNs,uint128 valueAggregate,bytes metadata)" + ); + + // The duration (in seconds) in which a signer is thawing before they can be revoked + uint256 public immutable REVOKE_SIGNER_THAWING_PERIOD; + + // Map of signer to authorized signer information + mapping(address signer => SenderAuthorization authorizedSigner) public authorizedSigners; + + /** + * @dev Emitted when a signer is authorized to sign RAVs for a sender. + */ + event AuthorizeSigner(address indexed signer, address indexed sender); + /** + * @dev Emitted when a thaw request is made for authorized signer + */ + event ThawSigner(address indexed sender, address indexed authorizedSigner, uint256 thawEndTimestamp); + + /** + * @dev Emitted when the thawing of a signer is cancelled + */ + event CancelThawSigner(address indexed sender, address indexed authorizedSigner, uint256 thawEndTimestamp); + + /** + * @dev Emitted when a authorized signer has been revoked + */ + event RevokeAuthorizedSigner(address indexed sender, address indexed authorizedSigner); + + error TAPVerifierInvalidCaller(address sender, address expected); + error TAPVerifierInvalidSignerProof(); + error TAPVerifierAlreadyAuthorized(address signer, address authorizingSender); + error TAPVerifierNotAuthorized(address signer, address sender); + error TAPVerifierNotThawing(); + error TAPVerifierStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); + + /** + * @dev Constructs a new instance of the TAPVerifier contract. + */ + constructor(string memory eip712Name, string memory eip712Version) EIP712(eip712Name, eip712Version) {} + + /** + * @dev Authorizes a signer to sign RAVs for the sender. + * @param signer Address of the authorized signer. + * @param proof The proof provided by the signer to authorize the sender, consisting of packed (chainID, proof deadline, sender address). + * @dev The proof deadline is the timestamp at which the proof expires. The proof is susceptible to replay attacks until the deadline is reached. + * @notice REVERT with error: + * - SignerAlreadyAuthorized: Signer is currently authorized for a sender + * - InvalidSignerProof: The provided signer proof is invalid + */ + function authorizeSigner(address signer, uint256 proofDeadline, bytes calldata proof) external { + if (authorizedSigners[signer].sender != address(0)) { + revert TAPVerifierAlreadyAuthorized(signer, authorizedSigners[signer].sender); + } + + _verifyAuthorizedSignerProof(proof, proofDeadline, signer); + + authorizedSigners[signer].sender = msg.sender; + authorizedSigners[signer].thawEndTimestamp = 0; + emit AuthorizeSigner(signer, msg.sender); + } + + /** + * @dev Starts thawing a signer to be removed from the authorized signers list. + * @param signer Address of the signer to remove. + * @notice WARNING: Thawing a signer alerts receivers that signatures from that signer will soon be deemed invalid. + * Receivers without existing signed receipts or RAVs from this signer should treat them as unauthorized. + * Those with existing signed documents from this signer should work towards settling their engagements. + * Once a signer is thawed, they should be viewed as revoked regardless of their revocation status. + * @notice REVERT with error: + * - SignerNotAuthorizedBySender: The provided signer is either not authorized or + * authorized by a different sender + */ + function thawSigner(address signer) external { + SenderAuthorization storage authorization = authorizedSigners[signer]; + + if (authorization.sender != msg.sender) { + revert TAPVerifierNotAuthorized(signer, authorizedSigners[signer].sender); + } + + authorization.thawEndTimestamp = block.timestamp + REVOKE_SIGNER_THAWING_PERIOD; + emit ThawSigner(authorization.sender, signer, authorization.thawEndTimestamp); + } + + /** + * @dev Stops thawing a signer. + * @param signer Address of the signer to stop thawing. + * @notice REVERT with error: + * - SignerNotAuthorizedBySender: The provided signer is either not authorized or + * authorized by a different sender + */ + function cancelThawSigner(address signer) external { + SenderAuthorization storage authorization = authorizedSigners[signer]; + + if (authorization.sender != msg.sender) { + revert TAPVerifierNotAuthorized(signer, authorizedSigners[signer].sender); + } + + authorization.thawEndTimestamp = 0; + emit CancelThawSigner(authorization.sender, signer, authorization.thawEndTimestamp); + } + + /** + * @dev Revokes a signer from the authorized signers list if thawed. + * @param signer Address of the signer to remove. + * @notice REVERT with error: + * - SignerNotAuthorizedBySender: The provided signer is either not authorized or + * authorized by a different sender + * - SignerNotThawing: No thaw was initiated for the provided signer + * - SignerStillThawing: ThawEndTimestamp has not been reached + * for provided signer + */ + function revokeAuthorizedSigner(address signer) external { + SenderAuthorization storage authorization = authorizedSigners[signer]; + + if (authorization.sender != msg.sender) { + revert TAPVerifierNotAuthorized(signer, authorizedSigners[signer].sender); + } + + if (authorization.thawEndTimestamp == 0) { + revert TAPVerifierNotThawing(); + } + + if (authorization.thawEndTimestamp > block.timestamp) { + revert TAPVerifierStillThawing({ + currentTimestamp: block.timestamp, + thawEndTimestamp: authorization.thawEndTimestamp + }); + } + + delete authorizedSigners[signer]; + emit RevokeAuthorizedSigner(authorization.sender, signer); + } + + /** + * @notice Verify validity of a SignedRAV + * @dev Caller must be the data service the RAV was issued to. + * @param signedRAV The SignedRAV containing the RAV and its signature. + * @return The address of the signer. + * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. + */ + function verify(SignedRAV calldata signedRAV) external view returns (address) { + if (signedRAV.rav.dataService != msg.sender) { + revert TAPVerifierInvalidCaller(msg.sender, signedRAV.rav.dataService); + } + return recover(signedRAV); + } + + /** + * @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV). + * @param signedRAV The SignedRAV containing the RAV and its signature. + * @return The address of the signer. + * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. + */ + function recover(SignedRAV calldata signedRAV) public view returns (address) { + bytes32 messageHash = encodeRAV(signedRAV.rav); + return ECDSA.recover(messageHash, signedRAV.signature); + } + + /** + * @dev Computes the hash of a ReceiptAggregateVoucher (RAV). + * @param rav The RAV for which to compute the hash. + * @return The hash of the RAV. + */ + function encodeRAV(ReceiptAggregateVoucher calldata rav) public view returns (bytes32) { + return + _hashTypedDataV4( + keccak256( + abi.encode( + EIP712_RAV_TYPEHASH, + rav.dataService, + rav.serviceProvider, + rav.timestampNs, + rav.valueAggregate + ) + ) + ); + } + + /** + * @dev Verifies a proof that authorizes the sender to authorize the signer. + * @param _proof The proof provided by the signer to authorize the sender. + * @param _signer The address of the signer being authorized. + * @notice REVERT with error: + * - InvalidSignerProof: If the given proof is not valid + */ + function _verifyAuthorizedSignerProof(bytes calldata _proof, uint256 _proofDeadline, address _signer) private view { + // Verify that the proof deadline has not passed + if (block.timestamp > _proofDeadline) { + revert TAPVerifierInvalidSignerProof(); + } + + // Generate the hash of the sender's address + bytes32 messageHash = keccak256(abi.encodePacked(block.chainid, _proofDeadline, msg.sender)); + + // Generate the digest to be signed by the signer + bytes32 digest = MessageHashUtils.toEthSignedMessageHash(messageHash); + + // Verify that the recovered signer matches the expected signer + if (ECDSA.recover(digest, _proof) != _signer) { + revert TAPVerifierInvalidSignerProof(); + } + } +} diff --git a/packages/subgraph-service/contracts/data-service/DataService.sol b/packages/subgraph-service/contracts/data-service/DataService.sol new file mode 100644 index 000000000..52f1e25b5 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/DataService.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IDataService } from "./IDataService.sol"; + +import { GraphDirectory } from "./GraphDirectory.sol"; +import { DataServiceV1Storage } from "./DataServiceStorage.sol"; +import { ProvisionManager } from "./utilities/ProvisionManager.sol"; + +/** + * @title Implementation of the {IDataService} interface. + * @dev This implementation provides base functionality for a data service: + * - GraphDirectory, allows the data service to interact with Graph Horizon contracts + * - ProvisionManager, provides functionality to manage provisions + * + * The derived contract should add functionality that implements the interfaces described in {IDataService}. + */ +abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1Storage, IDataService { + /** + * @dev Addresses in GraphDirectory are immutables, they can only be set in this constructor. + * @param controller The address of the Graph Horizon controller contract. + */ + constructor(address controller) GraphDirectory(controller) {} + + /** + * @notice Verifies and accepts the provision of a service provider in the {Graph Horizon staking + * contract}. + * @dev This internal function is a wrapper around {ProvisionManager-checkAndAcceptProvision} + * that ensures the event {ProvisionAccepted} is emitted when called from different contexts. + * + * Emits a {ProvisionAccepted} event. + * + * @param _serviceProvider The address of the service provider. + */ + function _acceptProvision(address _serviceProvider) internal { + _checkAndAcceptProvision(_serviceProvider); + emit ProvisionAccepted(_serviceProvider); + } +} diff --git a/packages/subgraph-service/contracts/data-service/DataServiceStorage.sol b/packages/subgraph-service/contracts/data-service/DataServiceStorage.sol new file mode 100644 index 000000000..3cb7e0b86 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/DataServiceStorage.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +abstract contract DataServiceV1Storage { + /// @dev Gap to allow adding variables in future upgrades + uint256[50] private __gap; +} diff --git a/packages/subgraph-service/contracts/data-service/GraphDirectory.sol b/packages/subgraph-service/contracts/data-service/GraphDirectory.sol new file mode 100644 index 000000000..f35a7a663 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/GraphDirectory.sol @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; +import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; +// import { IGraphTokenGateway } from "@graphprotocol/contracts/contracts/gateway/IGraphTokenGateway.sol"; +import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; +import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; +import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; + +abstract contract GraphDirectory { + IController public immutable GRAPH_CONTROLLER; + IHorizonStaking public immutable GRAPH_STAKING; + IEpochManager public immutable GRAPH_EPOCH_MANAGER; + IGraphToken public immutable GRAPH_TOKEN; + // IGraphTokenGateway public immutable graphTokenGateway; + IGraphEscrow public immutable GRAPH_ESCROW; + IGraphPayments public immutable GRAPH_PAYMENTS; + IRewardsManager public immutable GRAPH_REWARDS_MANAGER; + + event GraphDirectoryInitialized( + IController graphController, + IHorizonStaking graphStaking, + IEpochManager graphEpochManager, + IGraphToken graphToken, + // address graphTokenGateway, + IGraphEscrow graphEscrow, + IGraphPayments graphPayments, + IRewardsManager graphRewardsManager + ); + + constructor(address controller) { + GRAPH_CONTROLLER = IController(controller); + GRAPH_STAKING = IHorizonStaking(GRAPH_CONTROLLER.getContractProxy(keccak256("Staking"))); + GRAPH_EPOCH_MANAGER = IEpochManager(GRAPH_CONTROLLER.getContractProxy(keccak256("EpochManager"))); + GRAPH_TOKEN = IGraphToken(GRAPH_CONTROLLER.getContractProxy(keccak256("GraphToken"))); + // graphTokenGateway = graphController.getContractProxy(keccak256("GraphTokenGateway")); + GRAPH_ESCROW = IGraphEscrow(GRAPH_CONTROLLER.getContractProxy(keccak256("GraphEscrow"))); + GRAPH_PAYMENTS = IGraphPayments(GRAPH_CONTROLLER.getContractProxy(keccak256("GraphPayments"))); + GRAPH_REWARDS_MANAGER = IRewardsManager(GRAPH_CONTROLLER.getContractProxy(keccak256("RewardsManager"))); + emit GraphDirectoryInitialized( + GRAPH_CONTROLLER, + GRAPH_STAKING, + GRAPH_EPOCH_MANAGER, + GRAPH_TOKEN, + // graphTokenGateway, + GRAPH_ESCROW, + GRAPH_PAYMENTS, + GRAPH_REWARDS_MANAGER + ); + } +} diff --git a/packages/subgraph-service/contracts/data-service/IDataService.sol b/packages/subgraph-service/contracts/data-service/IDataService.sol new file mode 100644 index 000000000..0e598b2cb --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/IDataService.sol @@ -0,0 +1,164 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; + +/** + * @title Interface of the base {DataService} contract as defined by the Graph Horizon specification. + * @dev This interface provides a guardrail for data service implementations that utilize Graph Horizon. + * It's expected that implementations follow the specification however much of it is intentionally loose + * to allow for greater flexibility when designing a data service. For specifics always check the data + * service implementation. + + * In general, this is a great starting point for data services that want to use Graph Horizon + * to provide economic security for a service being provided. It assumes two main forms of retribution for + * service providers: + * - service payment, to compensate ongoing work required to serve customers requests + * - service fees, earnt by serving customer requests, ideally leveraging {GraphPayments} to collect fees from the payer + * + * TIP: TODO: link to data service framework documentation + */ +interface IDataService { + /** + * @notice Emitted when a service provider is registered with the data service. + * @param serviceProvider The address of the service provider. + */ + event ServiceProviderRegistered(address indexed serviceProvider); + + /** + * @notice Emitted when a service provider accepts a provision in {Graph Horizon staking contract}. + * @param serviceProvider The address of the service provider. + */ + event ProvisionAccepted(address indexed serviceProvider); + + /** + * @notice Emitted when a service provider starts providing the service. + * @param serviceProvider The address of the service provider. + */ + event ServiceStarted(address indexed serviceProvider); + + /** + * @notice Emitted when a service provider stops providing the service. + * @param serviceProvider The address of the service provider. + */ + event ServiceStopped(address indexed serviceProvider); + + /** + * @notice Emitted when a service provider collects payment for the service being provided. + * @param serviceProvider The address of the service provider. + * @param tokens The amount of tokens collected. + */ + event ServicePaymentCollected(address indexed serviceProvider, uint256 tokens); + + /** + * @notice Emitted when a service provider redeems fees. + * @param serviceProvider The address of the service provider. + * @param feeType The type of fee to redeem as defined in {GraphPayments}. + * @param tokens The amount of tokens redeemed. + */ + event ServiceFeesRedeemed( + address indexed serviceProvider, + IGraphPayments.PaymentTypes indexed feeType, + uint256 tokens + ); + + /** + * @notice Emitted when a service provider is slashed. + * @param serviceProvider The address of the service provider. + * @param tokens The amount of tokens slashed. + */ + event ServiceProviderSlashed(address indexed serviceProvider, uint256 tokens); + + /** + * @notice Thrown to signal that a feature is not implemented by a data service. + */ + error DataServiceFeatureNotImplemented(); + + /** + * @notice Registers a service provider with the data service. The service provider can now + * start providing the service. + * @dev Before registering, the service provider must have created a provision in the + * Graph Horizon staking contract with parameters that are compatible with the data service. + * + * Verifies the provision parameters and marks it as accepted it in the Graph Horizon + * staking contract using {_acceptProvision}. + * + * Emits a {ServiceProviderRegistered} event. + * + * NOTE: Failing to accept the provision will result in the service provider operating + * on an unverified provision. Depending on of the data service this can be a security + * risk as the protocol won't be able to guarantee economic security for the consumer. + * @param serviceProvider The address of the service provider. + * @param data Custom data, usage defined by the data service. + */ + function register(address serviceProvider, bytes calldata data) external; + + /** + * @notice Accepts the provision of a service provider in the {Graph Horizon staking + * contract}. + * @dev Provides a way for the data service to revalidate and reaccept a provision that + * had a parameter change. Should call {_acceptProvision}. + * + * Emits a {ProvisionAccepted} event. + * + * @param serviceProvider The address of the service provider. + * @param data Custom data, usage defined by the data service. + */ + function acceptProvision(address serviceProvider, bytes calldata data) external; + + /** + * @notice Service provider starts providing the service. + * @dev Emits a {ServiceStarted} event. + * @param serviceProvider The address of the service provider. + * @param data Custom data, usage defined by the data service. + */ + function startService(address serviceProvider, bytes calldata data) external; + + /** + * @notice Service provider collects payment for the service being provided. + * @dev This is payment owed to a service provided for ongoing work required to fullfil + * customer requests. How the funds for the payment are procured is up to the data service. + * + * Emits a {ServicePaymentCollected} event. + * + * NOTE: Data services that are vetted by the Graph Council might qualify for a portion of + * the protocol issuance to cover these payments. In this case, the funds are taken by + * interacting with the rewards manager contract. + * @param serviceProvider The address of the service provider. + * @param data Custom data, usage defined by the data service. + */ + function collectServicePayment(address serviceProvider, bytes calldata data) external; + + /** + * @notice Service provider stops providing the service. + * @dev Emits a {ServiceStopped} event. + * @param serviceProvider The address of the service provider. + * @param data Custom data, usage defined by the data service. + */ + function stopService(address serviceProvider, bytes calldata data) external; + + /** + * @notice Redeeems fees earnt by the service provider. + * @dev The implementation of this function is expected to interact with {GraphPayments} + * to collect fees from the service payer, which is done via {IGraphPayments-collect}. + * @param serviceProvider The address of the service provider. + * + * Emits a {ServicePaymentRedeemed} event. + * + * @param feeType The type of fee to redeem as defined in {GraphPayments}. + * @param data Custom data, usage defined by the data service. + */ + function redeem(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external; + + /** + * @notice Slash a service provider for misbehaviour. + * @dev To slash the service provider's provision the function should call + * {Staking-slash}. + * + * Emits a {ServiceProviderSlashed} event. + * + * @param serviceProvider The address of the service provider. + * @param data Custom data, usage defined by the data service. + */ + function slash(address serviceProvider, bytes calldata data) external; +} diff --git a/packages/subgraph-service/contracts/data-service/extensions/DataServiceFees.sol b/packages/subgraph-service/contracts/data-service/extensions/DataServiceFees.sol new file mode 100644 index 000000000..583f01efa --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/extensions/DataServiceFees.sol @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IDataServiceFees } from "./IDataServiceFees.sol"; +import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; + +import { DataService } from "../DataService.sol"; +import { DataServiceFeesV1Storage } from "./DataServiceFeesStorage.sol"; + +import { ProvisionTracker } from "../libraries/ProvisionTracker.sol"; + +abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees { + using ProvisionTracker for mapping(address => uint256); + + event StakeClaimLocked( + address indexed serviceProvider, + bytes32 indexed claimId, + uint256 tokens, + uint256 unlockTimestamp + ); + event StakeClaimReleased( + address indexed serviceProvider, + bytes32 indexed claimId, + uint256 tokens, + uint256 releaseAt + ); + + error DataServiceFeesClaimNotFound(bytes32 claimId); + + function releaseStake(IGraphPayments.PaymentTypes feeType, uint256 n) external virtual { + _releaseStake(feeType, msg.sender, n); + } + + /// @notice Release expired stake claims for a service provider + /// @param _n The number of stake claims to release, or 0 to release all + function _releaseStake(IGraphPayments.PaymentTypes _feeType, address _serviceProvider, uint256 _n) internal { + bool releaseAll = _n == 0; + + // check the stake claims list + // TODO: evaluate replacing with OZ DoubleEndedQueue + bytes32 head = claimsLists[_feeType][_serviceProvider].head; + while (head != bytes32(0) && (releaseAll || _n > 0)) { + StakeClaim memory claim = _getStakeClaim(head); + + if (block.timestamp >= claim.releaseAt) { + // Release stake + feesProvisionTracker[_feeType].release(_serviceProvider, claim.tokens); + + // Update list and refresh pointer + StakeClaimsList storage claimsList = claimsLists[_feeType][_serviceProvider]; + claimsList.head = claim.nextClaim; + delete claims[head]; + head = claimsList.head; + if (!releaseAll) _n--; + + emit StakeClaimReleased(_serviceProvider, claimsList.head, claim.tokens, claim.releaseAt); + } else { + break; + } + } + } + + function _lockStake( + IGraphPayments.PaymentTypes _feeType, + address _serviceProvider, + uint256 _tokens, + uint256 _unlockTimestamp + ) internal { + feesProvisionTracker[_feeType].lock(GRAPH_STAKING, _serviceProvider, _tokens); + + StakeClaimsList storage claimsList = claimsLists[_feeType][_serviceProvider]; + bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce); + claims[claimId] = StakeClaim({ + serviceProvider: _serviceProvider, + tokens: _tokens, + createdAt: block.timestamp, + releaseAt: _unlockTimestamp, + nextClaim: bytes32(0) + }); + + claims[claimsList.tail].nextClaim = claimId; + claimsList.tail = claimId; + claimsList.nonce += 1; + + emit StakeClaimLocked(_serviceProvider, claimId, _tokens, _unlockTimestamp); + } + + function _getStakeClaim(bytes32 _claimId) private view returns (StakeClaim memory) { + StakeClaim memory claim = claims[_claimId]; + if (claim.createdAt == 0) { + revert DataServiceFeesClaimNotFound(_claimId); + } + return claim; + } + + function _buildStakeClaimId(address _serviceProvider, uint256 _nonce) private view returns (bytes32) { + return keccak256(abi.encodePacked(address(this), _serviceProvider, _nonce)); + } +} diff --git a/packages/subgraph-service/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/subgraph-service/contracts/data-service/extensions/DataServiceFeesStorage.sol new file mode 100644 index 000000000..4296a952a --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IDataServiceFees } from "./IDataServiceFees.sol"; +import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; + +abstract contract DataServiceFeesV1Storage { + /// @notice List of all locked stake claims to be released to service providers + mapping(bytes32 claimId => IDataServiceFees.StakeClaim claim) public claims; + + mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => uint256 tokens)) + public feesProvisionTracker; + + /// @notice Service providers registered in the data service + mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => IDataServiceFees.StakeClaimsList list)) + public claimsLists; + + /// @dev Gap to allow adding variables in future upgrades + uint256[50] private __gap; +} diff --git a/packages/subgraph-service/contracts/data-service/extensions/DataServicePausable.sol b/packages/subgraph-service/contracts/data-service/extensions/DataServicePausable.sol new file mode 100644 index 000000000..ab0ec97c3 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/extensions/DataServicePausable.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IDataServicePausable } from "./IDataServicePausable.sol"; + +import { Pausable } from "@openzeppelin/contracts/utils/Pausable.sol"; +import { DataService } from "../DataService.sol"; + +abstract contract DataServicePausable is Pausable, DataService, IDataServicePausable { + mapping(address pauseGuardian => bool allowed) public pauseGuardians; + + event PauseGuardianSet(address indexed account, bool allowed); + + error DataServicePausableNotPauseGuardian(address account); + + modifier onlyPauseGuardian() { + if (!pauseGuardians[msg.sender]) { + revert DataServicePausableNotPauseGuardian(msg.sender); + } + _; + } + + function pause() public onlyPauseGuardian whenNotPaused { + _pause(); + } + + function unpause() public onlyPauseGuardian whenPaused { + _unpause(); + } + + function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused { + pauseGuardians[_pauseGuardian] = _allowed; + emit PauseGuardianSet(_pauseGuardian, _allowed); + } +} diff --git a/packages/subgraph-service/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/subgraph-service/contracts/data-service/extensions/DataServiceRescuable.sol new file mode 100644 index 000000000..7e6120783 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/extensions/DataServiceRescuable.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { IDataServiceRescuable } from "./IDataServiceRescuable.sol"; + +import { DataService } from "../DataService.sol"; + +import { Denominations } from "../libraries/Denominations.sol"; +import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +/** + * @title Rescuable contract + * @dev Allows a contract to have a function to rescue tokens sent by mistake. + * The contract must implement the external rescueTokens function or similar, + * that calls this contract's _rescueTokens. + */ +abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { + mapping(address rescuer => bool allowed) public rescuers; + + /** + * @dev Tokens rescued by the user + */ + event TokensRescued(address indexed from, address indexed to, uint256 amount); + event RescuerSet(address indexed account, bool allowed); + + error DataServiceRescuableCannotRescueZero(); + error DataServiceRescuableNotRescuer(address account); + + modifier onlyRescuer() { + if (!rescuers[msg.sender]) { + revert DataServiceRescuableNotRescuer(msg.sender); + } + _; + } + + function rescueGRT(address to, uint256 amount) external onlyRescuer { + _rescueTokens(to, address(GRAPH_TOKEN), amount); + } + + function rescueETH(address payable to, uint256 amount) external onlyRescuer { + _rescueTokens(to, Denominations.NATIVE_TOKEN, amount); + } + + function _setRescuer(address _rescuer, bool _allowed) internal { + rescuers[_rescuer] = _allowed; + emit RescuerSet(_rescuer, _allowed); + } + + /** + * @dev Allows rescuing tokens sent to this contract + * @param _to Destination address to send the tokens + * @param _token Address of the token being rescued + * @param _amount Amount of tokens to pull + */ + function _rescueTokens(address _to, address _token, uint256 _amount) internal { + if (_amount == 0) revert DataServiceRescuableCannotRescueZero(); + + if (Denominations.isNativeToken(_token)) payable(_to).transfer(_amount); + else SafeERC20.safeTransfer(IERC20(_token), _to, _amount); + + emit TokensRescued(msg.sender, _to, _amount); + } +} diff --git a/packages/subgraph-service/contracts/data-service/extensions/IDataServiceFees.sol b/packages/subgraph-service/contracts/data-service/extensions/IDataServiceFees.sol new file mode 100644 index 000000000..36caf73f1 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/extensions/IDataServiceFees.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IDataService } from "../IDataService.sol"; +import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; + +interface IDataServiceFees is IDataService { + struct StakeClaimsList { + bytes32 head; + bytes32 tail; + uint256 nonce; + } + + /// A locked stake claim to be released to a service provider + struct StakeClaim { + address serviceProvider; + // tokens to be released with this claim + uint256 tokens; + uint256 createdAt; + // timestamp when the claim can be released + uint256 releaseAt; + // next claim in the linked list + bytes32 nextClaim; + } + + function releaseStake(IGraphPayments.PaymentTypes feeType, uint256 n) external; +} diff --git a/packages/subgraph-service/contracts/data-service/extensions/IDataServicePausable.sol b/packages/subgraph-service/contracts/data-service/extensions/IDataServicePausable.sol new file mode 100644 index 000000000..5b2940d6c --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/extensions/IDataServicePausable.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IDataService } from "../IDataService.sol"; + +interface IDataServicePausable is IDataService { + function pause() external; + function unpause() external; +} diff --git a/packages/subgraph-service/contracts/data-service/extensions/IDataServiceRescuable.sol b/packages/subgraph-service/contracts/data-service/extensions/IDataServiceRescuable.sol new file mode 100644 index 000000000..36ad6d68f --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/extensions/IDataServiceRescuable.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IDataService } from "../IDataService.sol"; + +interface IDataServiceRescuable is IDataService { + function rescueGRT(address to, uint256 amount) external; + function rescueETH(address payable to, uint256 amount) external; +} diff --git a/packages/subgraph-service/contracts/data-service/libraries/Denominations.sol b/packages/subgraph-service/contracts/data-service/libraries/Denominations.sol new file mode 100644 index 000000000..a5f543fb2 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/libraries/Denominations.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +/** + * @title Denominations + * @dev Provides a list of ground denominations for those tokens that cannot be represented by an ERC20. + * For now, the only needed is the native token that could be ETH, MATIC, or other depending on the layer being operated. + */ +library Denominations { + address internal constant NATIVE_TOKEN = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + + function isNativeToken(address token) internal pure returns (bool) { + return token == NATIVE_TOKEN; + } +} diff --git a/packages/subgraph-service/contracts/data-service/libraries/PPMMath.sol b/packages/subgraph-service/contracts/data-service/libraries/PPMMath.sol new file mode 100644 index 000000000..ac0f65252 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/libraries/PPMMath.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +library PPMMath { + /// @notice Maximum value in parts per million (PPM). + uint256 internal constant MAX_PPM = 1_000_000; + + error PPMMathInvalidPPM(uint256 ppm); + error PPMMathInvalidMulPPM(uint256 a, uint256 b); + + // one of a or b must be in PPM + function mulPPM(uint256 a, uint256 b) internal pure returns (uint256) { + if (!isValidPPM(a) && !isValidPPM(b)) { + revert PPMMathInvalidMulPPM(a, b); + } + return (a * b) / MAX_PPM; + } + + // Calculate the tokens after curation fees first, and subtact that, + // to prevent curation fees from rounding down to zero + // a must be in ppm + function mulPPMRoundUp(uint256 a, uint256 b) internal pure returns (uint256) { + if (!isValidPPM(a)) { + revert PPMMathInvalidPPM(a); + } + return b - mulPPM(MAX_PPM - a, b); + } + + function isValidPPM(uint256 ppm) internal pure returns (bool) { + return ppm >= 0 && ppm <= MAX_PPM; + } +} diff --git a/packages/subgraph-service/contracts/data-service/libraries/ProvisionGetter.sol b/packages/subgraph-service/contracts/data-service/libraries/ProvisionGetter.sol new file mode 100644 index 000000000..4de039012 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/libraries/ProvisionGetter.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; + +library ProvisionGetter { + using ProvisionGetter for IHorizonStaking.Provision; + + error ProvisionGetterProvisionNotFound(address serviceProvider, address service); + + function get( + IHorizonStaking graphStaking, + address serviceProvider + ) internal view returns (IHorizonStaking.Provision memory) { + IHorizonStaking.Provision memory provision = graphStaking.getProvision(serviceProvider, address(this)); + if (provision.createdAt == 0) { + revert ProvisionGetterProvisionNotFound(serviceProvider, address(this)); + } + return provision; + } +} diff --git a/packages/subgraph-service/contracts/data-service/libraries/ProvisionTracker.sol b/packages/subgraph-service/contracts/data-service/libraries/ProvisionTracker.sol new file mode 100644 index 000000000..216bbe3dc --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/libraries/ProvisionTracker.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; + +library ProvisionTracker { + error ProvisionTrackerInsufficientTokens(uint256 tokensAvailable, uint256 tokensRequired); + + function lock( + mapping(address => uint256) storage self, + IHorizonStaking graphStaking, + address serviceProvider, + uint256 tokens + ) internal { + if (tokens == 0) return; + + uint256 tokensRequired = self[serviceProvider] + tokens; + uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this)); + if (tokensRequired > tokensAvailable) { + revert ProvisionTrackerInsufficientTokens(tokensAvailable, tokensRequired); + } + self[serviceProvider] += tokens; + } + + function release(mapping(address => uint256) storage self, address serviceProvider, uint256 tokens) internal { + if (tokens == 0) return; + + if (tokens > self[serviceProvider]) { + revert ProvisionTrackerInsufficientTokens(self[serviceProvider], tokens); + } + self[serviceProvider] -= tokens; + } + + function getTokensFree( + mapping(address => uint256) storage self, + IHorizonStaking graphStaking, + address serviceProvider + ) internal view returns (uint256) { + uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this)); + if (tokensAvailable >= self[serviceProvider]) return tokensAvailable - self[serviceProvider]; + else return 0; + } +} diff --git a/packages/subgraph-service/contracts/data-service/libraries/UintRange.sol b/packages/subgraph-service/contracts/data-service/libraries/UintRange.sol new file mode 100644 index 000000000..f98714d25 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/libraries/UintRange.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +library UintRange { + using UintRange for uint256; + + function isInRange(uint256 self, uint256 min, uint256 max) internal pure returns (bool) { + return self >= min && self <= max; + } +} diff --git a/packages/subgraph-service/contracts/data-service/utilities/ProvisionManager.sol b/packages/subgraph-service/contracts/data-service/utilities/ProvisionManager.sol new file mode 100644 index 000000000..581cff131 --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/utilities/ProvisionManager.sol @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; + +import { GraphDirectory } from "../GraphDirectory.sol"; +import { ProvisionManagerV1Storage } from "./ProvisionManagerStorage.sol"; + +import { ProvisionGetter } from "../libraries/ProvisionGetter.sol"; +import { UintRange } from "../libraries/UintRange.sol"; + +abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage { + using ProvisionGetter for IHorizonStaking; + using UintRange for uint256; + + error ProvisionManagerInvalidProvisionTokens( + uint256 tokens, + uint256 minimumProvisionTokens, + uint256 maximumProvisionTokens + ); + error ProvisionManagerInvalidVerifierCut( + uint256 verifierCut, + uint256 minimumVerifierCut, + uint256 maximumVerifierCut + ); + error ProvisionManagerInvalidThawingPeriod( + uint64 thawingPeriod, + uint64 minimumThawingPeriod, + uint64 maximumThawingPeriod + ); + error ProvisionManagerNotAuthorized(address caller, address serviceProvider, address service); + + modifier onlyProvisionAuthorized(address serviceProvider) { + if (!GRAPH_STAKING.isAuthorized(msg.sender, serviceProvider, address(this))) { + revert ProvisionManagerNotAuthorized(msg.sender, serviceProvider, address(this)); + } + _; + } + + constructor() { + minimumProvisionTokens = type(uint256).min; + maximumProvisionTokens = type(uint256).max; + + minimumThawingPeriod = type(uint64).min; + maximumThawingPeriod = type(uint64).max; + + minimumVerifierCut = type(uint32).min; + maximumVerifierCut = type(uint32).max; + } + + function _checkAndAcceptProvision(address _serviceProvider) internal virtual { + _checkProvisionParameters(_serviceProvider); + GRAPH_STAKING.acceptProvision(_serviceProvider); + } + + // -- Provision Parameters: setters -- + function _setProvisionTokensRange(uint256 _min, uint256 _max) internal { + minimumProvisionTokens = _min; + maximumProvisionTokens = _max; + } + + function _setVerifierCutRange(uint32 _min, uint32 _max) internal { + minimumVerifierCut = _min; + maximumVerifierCut = _max; + } + + function _setThawingPeriodRange(uint64 _min, uint64 _max) internal { + minimumThawingPeriod = _min; + maximumThawingPeriod = _max; + } + + /// @notice Checks if the service provider has a valid provision for the data service in the staking contract + /// @param _serviceProvider The address of the service provider + function _checkProvisionParameters(address _serviceProvider) internal view virtual { + IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); + + (uint256 provisionTokensMin, uint256 provisionTokensMax) = _getProvisionTokensRange(); + if (!provision.tokens.isInRange(provisionTokensMin, provisionTokensMax)) { + revert ProvisionManagerInvalidProvisionTokens(provision.tokens, provisionTokensMin, provisionTokensMax); + } + + (uint64 thawingPeriodMin, uint64 thawingPeriodMax) = _getThawingPeriodRange(); + if (!uint256(provision.thawingPeriod).isInRange(thawingPeriodMin, thawingPeriodMax)) { + revert ProvisionManagerInvalidThawingPeriod(provision.thawingPeriod, thawingPeriodMin, thawingPeriodMax); + } + + (uint32 verifierCutMin, uint32 verifierCutMax) = _getVerifierCutRange(); + if (!uint256(provision.maxVerifierCut).isInRange(verifierCutMin, verifierCutMax)) { + revert ProvisionManagerInvalidVerifierCut(provision.maxVerifierCut, verifierCutMin, verifierCutMax); + } + } + + // -- Provision Parameters: getters -- + function _getProvisionTokensRange() internal view virtual returns (uint256 min, uint256 max) { + return (minimumProvisionTokens, maximumProvisionTokens); + } + + function _getThawingPeriodRange() internal view virtual returns (uint64 min, uint64 max) { + return (minimumThawingPeriod, maximumThawingPeriod); + } + + function _getVerifierCutRange() internal view virtual returns (uint32 min, uint32 max) { + return (minimumVerifierCut, maximumVerifierCut); + } + + function _getProvision(address _serviceProvider) internal view returns (IHorizonStaking.Provision memory) { + return GRAPH_STAKING.get(_serviceProvider); + } +} diff --git a/packages/subgraph-service/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/subgraph-service/contracts/data-service/utilities/ProvisionManagerStorage.sol new file mode 100644 index 000000000..e7a25e6ab --- /dev/null +++ b/packages/subgraph-service/contracts/data-service/utilities/ProvisionManagerStorage.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +abstract contract ProvisionManagerV1Storage { + /// @notice The minimum amount of tokens required to register a provision in the data service + uint256 public minimumProvisionTokens; + + /// @notice The maximum amount of tokens allowed to register a provision in the data service + uint256 public maximumProvisionTokens; + + /// @notice The minimum thawing period required to register a provision in the data service + uint64 public minimumThawingPeriod; + + /// @notice The maximum thawing period allowed to register a provision in the data service + uint64 public maximumThawingPeriod; + + /// @notice The minimum verifier cut required to register a provision in the data service + uint32 public minimumVerifierCut; + + /// @notice The maximum verifier cut allowed to register a provision in the data service + uint32 public maximumVerifierCut; + + /// @dev Gap to allow adding variables in future upgrades + uint256[50] private __gap; +} diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol new file mode 100644 index 000000000..d40750a55 --- /dev/null +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity ^0.8.24; +pragma abicoder v2; + +import { Attestation } from "../libraries/Attestation.sol"; + +interface IDisputeManager { + // -- Dispute -- + + enum DisputeType { + Null, + IndexingDispute, + QueryDispute + } + + enum DisputeStatus { + Null, + Accepted, + Rejected, + Drawn, + Pending, + Cancelled + } + + // Disputes contain info necessary for the Arbitrator to verify and resolve + struct Dispute { + address indexer; + address fisherman; + uint256 deposit; + bytes32 relatedDisputeId; + DisputeType disputeType; + DisputeStatus status; + uint256 createdAt; + } + + // -- Attestation -- + + // -- Configuration -- + + function setDisputePeriod(uint64 disputePeriod) external; + + function setArbitrator(address arbitrator) external; + + function setMinimumDeposit(uint256 minimumDeposit) external; + + function setFishermanRewardPercentage(uint32 percentage) external; + + function setMaxSlashingPercentage(uint32 maxPercentage) external; + + // -- Dispute -- + + function createQueryDispute(bytes calldata attestationData, uint256 deposit) external returns (bytes32); + + function createQueryDisputeConflict( + bytes calldata attestationData1, + bytes calldata attestationData2 + ) external returns (bytes32, bytes32); + + function createIndexingDispute(address allocationId, uint256 deposit) external returns (bytes32); + + function acceptDispute(bytes32 disputeId, uint256 slashAmount) external; + + function rejectDispute(bytes32 disputeId) external; + + function drawDispute(bytes32 disputeId) external; + + function cancelDispute(bytes32 disputeId) external; + + // -- Getters -- + + function getVerifierCut() external view returns (uint32); + + function getDisputePeriod() external view returns (uint64); + + function isDisputeCreated(bytes32 disputeId) external view returns (bool); + + function encodeReceipt(Attestation.Receipt memory receipt) external view returns (bytes32); + + function getAttestationIndexer(Attestation.State memory attestation) external view returns (address); + + function areConflictingAttestations( + Attestation.State memory attestation1, + Attestation.State memory attestation2 + ) external pure returns (bool); +} diff --git a/packages/subgraph-service/contracts/interfaces/IGraphEscrow.sol b/packages/subgraph-service/contracts/interfaces/IGraphEscrow.sol new file mode 100644 index 000000000..111d667b2 --- /dev/null +++ b/packages/subgraph-service/contracts/interfaces/IGraphEscrow.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +interface IGraphEscrow { + function getSender(address signer) external view returns (address sender); +} diff --git a/packages/subgraph-service/contracts/interfaces/IGraphPayments.sol b/packages/subgraph-service/contracts/interfaces/IGraphPayments.sol new file mode 100644 index 000000000..0fa08fa63 --- /dev/null +++ b/packages/subgraph-service/contracts/interfaces/IGraphPayments.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +interface IGraphPayments { + enum PaymentTypes { + QueryFee, + IndexingFee + } + + function collect( + address sender, + address receiver, + uint256 tokens, + PaymentTypes paymentType, + uint256 tokensDataService + ) external returns (uint256); +} diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol new file mode 100644 index 000000000..ab62a3d84 --- /dev/null +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IDataServiceFees } from "../data-service/extensions/IDataServiceFees.sol"; + +import { Allocation } from "../libraries/Allocation.sol"; +import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; + +interface ISubgraphService is IDataServiceFees { + struct Indexer { + uint256 registeredAt; + string url; + string geoHash; + } + + struct PaymentFee { + uint128 servicePercentage; + uint128 curationPercentage; + } + + function resizeAllocation(address indexer, address allocationId, uint256 tokens) external; + + function migrateLegacyAllocation(address indexer, address allocationId, bytes32 subgraphDeploymentID) external; + + function setPauseGuardian(address pauseGuardian, bool allowed) external; + + function getAllocation(address allocationId) external view returns (Allocation.State memory); + + function getLegacyAllocation(address allocationId) external view returns (LegacyAllocation.State memory); + + function encodeAllocationProof(address _indexer, address _allocationId) external view returns (bytes32); +} diff --git a/packages/subgraph-service/contracts/interfaces/ITAPVerifier.sol b/packages/subgraph-service/contracts/interfaces/ITAPVerifier.sol new file mode 100644 index 000000000..2cbfdf052 --- /dev/null +++ b/packages/subgraph-service/contracts/interfaces/ITAPVerifier.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +interface ITAPVerifier { + struct ReceiptAggregateVoucher { + address dataService; + address serviceProvider; + uint64 timestampNs; + uint128 valueAggregate; + bytes metadata; + } + + struct SignedRAV { + ReceiptAggregateVoucher rav; + bytes signature; // 65 bytes: r (32 Bytes) || s (32 Bytes) || v (1 Byte) + } + + struct SenderAuthorization { + address sender; // Sender the signer is authorized to sign for + uint256 thawEndTimestamp; // Timestamp at which thawing period ends (zero if not thawing) + } + + function verify(SignedRAV calldata rav) external returns (address sender); +} diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol new file mode 100644 index 000000000..f6e9e0000 --- /dev/null +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +library Allocation { + using Allocation for State; + + struct State { + address indexer; + bytes32 subgraphDeploymentId; + uint256 tokens; + uint256 createdAt; + uint256 closedAt; + uint256 lastPOIPresentedAt; + uint256 accRewardsPerAllocatedToken; + uint256 accRewardsPending; + } + + error AllocationAlreadyExists(address allocationId); + error AllocationDoesNotExist(address allocationId); + error AllocationClosed(address allocationId, uint256 closedAt); + error AllocationZeroTokens(address allocationId); + + function create( + mapping(address => State) storage self, + address indexer, + address allocationId, + bytes32 subgraphDeploymentId, + uint256 tokens, + uint256 accRewardsPerAllocatedToken + ) internal returns (State memory) { + if (self[allocationId].exists()) revert AllocationAlreadyExists(allocationId); + + State memory allocation = State({ + indexer: indexer, + subgraphDeploymentId: subgraphDeploymentId, + tokens: tokens, + createdAt: block.timestamp, + closedAt: 0, + lastPOIPresentedAt: block.timestamp, + accRewardsPerAllocatedToken: accRewardsPerAllocatedToken, + accRewardsPending: 0 + }); + + self[allocationId] = allocation; + + return allocation; + } + + // Update POI timestamp and take rewards snapshot + // For stale POIs this ensures the rewards are not collected with the next valid POI + function presentPOI(mapping(address => State) storage self, address allocationId) internal returns (State memory) { + State storage allocation = _get(self, allocationId); + if (!allocation.isOpen()) revert AllocationClosed(allocationId, allocation.closedAt); + if (allocation.isAltruistic()) revert AllocationZeroTokens(allocationId); + allocation.lastPOIPresentedAt = block.timestamp; + + return allocation; + } + + function snapshotRewards( + mapping(address => State) storage self, + address allocationId, + uint256 accRewardsPerAllocatedToken + ) internal returns (State memory) { + State storage allocation = _get(self, allocationId); + if (!allocation.isOpen()) revert AllocationClosed(allocationId, allocation.closedAt); + allocation.accRewardsPerAllocatedToken = accRewardsPerAllocatedToken; + + return allocation; + } + + function close(mapping(address => State) storage self, address allocationId) internal returns (State memory) { + State storage allocation = _get(self, allocationId); + if (!allocation.isOpen()) revert AllocationClosed(allocationId, allocation.closedAt); + allocation.closedAt = block.timestamp; + + return allocation; + } + + function get(mapping(address => State) storage self, address allocationId) internal view returns (State memory) { + return _get(self, allocationId); + } + + function exists(State memory self) internal pure returns (bool) { + return self.createdAt != 0; + } + + function isOpen(State memory self) internal pure returns (bool) { + return self.exists() && self.closedAt == 0; + } + + function isAltruistic(State memory self) internal pure returns (bool) { + return self.exists() && self.tokens == 0; + } + + function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) { + State storage allocation = self[allocationId]; + if (!allocation.exists()) revert AllocationDoesNotExist(allocationId); + return allocation; + } +} diff --git a/packages/subgraph-service/contracts/libraries/Attestation.sol b/packages/subgraph-service/contracts/libraries/Attestation.sol new file mode 100644 index 000000000..1ff99b0e3 --- /dev/null +++ b/packages/subgraph-service/contracts/libraries/Attestation.sol @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +library Attestation { + // Receipt content sent from the service provider in response to request + struct Receipt { + bytes32 requestCID; + bytes32 responseCID; + bytes32 subgraphDeploymentId; + } + + // Attestation sent from the service provider in response to a request + struct State { + bytes32 requestCID; + bytes32 responseCID; + bytes32 subgraphDeploymentId; + bytes32 r; + bytes32 s; + uint8 v; + } + + // Attestation size is the sum of the receipt (96) + signature (65) + uint256 private constant ATTESTATION_SIZE_BYTES = RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES; + uint256 private constant RECEIPT_SIZE_BYTES = 96; + + uint256 private constant SIG_R_LENGTH = 32; + uint256 private constant SIG_S_LENGTH = 32; + uint256 private constant SIG_V_LENGTH = 1; + uint256 private constant SIG_R_OFFSET = RECEIPT_SIZE_BYTES; + uint256 private constant SIG_S_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH; + uint256 private constant SIG_V_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH + SIG_S_LENGTH; + uint256 private constant SIG_SIZE_BYTES = SIG_R_LENGTH + SIG_S_LENGTH + SIG_V_LENGTH; + + uint256 private constant UINT8_BYTE_LENGTH = 1; + uint256 private constant BYTES32_BYTE_LENGTH = 32; + + error AttestationInvalidBytesLength(uint256 length, uint256 expectedLength); + + /** + * @dev Returns if two attestations are conflicting. + * Everything must match except for the responseId. + * @param _attestation1 Attestation + * @param _attestation2 Attestation + * @return True if the two attestations are conflicting + */ + function areConflicting( + Attestation.State memory _attestation1, + Attestation.State memory _attestation2 + ) internal pure returns (bool) { + return (_attestation1.requestCID == _attestation2.requestCID && + _attestation1.subgraphDeploymentId == _attestation2.subgraphDeploymentId && + _attestation1.responseCID != _attestation2.responseCID); + } + + /** + * @dev Parse the bytes attestation into a struct from `_data`. + * @return Attestation struct + */ + function parse(bytes memory _data) internal pure returns (State memory) { + // Check attestation data length + if (_data.length != ATTESTATION_SIZE_BYTES) { + revert AttestationInvalidBytesLength(_data.length, ATTESTATION_SIZE_BYTES); + } + + // Decode receipt + (bytes32 requestCID, bytes32 responseCID, bytes32 subgraphDeploymentId) = abi.decode( + _data, + (bytes32, bytes32, bytes32) + ); + + // Decode signature + // Signature is expected to be in the order defined in the Attestation struct + bytes32 r = _toBytes32(_data, SIG_R_OFFSET); + bytes32 s = _toBytes32(_data, SIG_S_OFFSET); + uint8 v = _toUint8(_data, SIG_V_OFFSET); + + return State(requestCID, responseCID, subgraphDeploymentId, r, s, v); + } + + /** + * @dev Parse a uint8 from `_bytes` starting at offset `_start`. + * @return uint8 value + */ + function _toUint8(bytes memory _bytes, uint256 _start) private pure returns (uint8) { + if (_bytes.length < (_start + UINT8_BYTE_LENGTH)) { + revert AttestationInvalidBytesLength(_bytes.length, _start + UINT8_BYTE_LENGTH); + } + uint8 tempUint; + + // solhint-disable-next-line no-inline-assembly + assembly { + tempUint := mload(add(add(_bytes, 0x1), _start)) + } + + return tempUint; + } + + /** + * @dev Parse a bytes32 from `_bytes` starting at offset `_start`. + * @return bytes32 value + */ + function _toBytes32(bytes memory _bytes, uint256 _start) private pure returns (bytes32) { + if (_bytes.length < (_start + BYTES32_BYTE_LENGTH)) { + revert AttestationInvalidBytesLength(_bytes.length, _start + BYTES32_BYTE_LENGTH); + } + bytes32 tempBytes32; + + // solhint-disable-next-line no-inline-assembly + assembly { + tempBytes32 := mload(add(add(_bytes, 0x20), _start)) + } + + return tempBytes32; + } +} diff --git a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol new file mode 100644 index 000000000..bef060e8b --- /dev/null +++ b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +library LegacyAllocation { + using LegacyAllocation for State; + + struct State { + address indexer; + bytes32 subgraphDeploymentID; + } + + error LegacyAllocationExists(address allocationId); + error LegacyAllocationDoesNotExist(address allocationId); + error LegacyAllocationAlreadyMigrated(address allocationId); + + function migrate( + mapping(address => State) storage self, + address indexer, + address allocationId, + bytes32 subgraphDeploymentID + ) internal { + if (self[allocationId].exists()) revert LegacyAllocationAlreadyMigrated(allocationId); + + State memory allocation = State({ indexer: indexer, subgraphDeploymentID: subgraphDeploymentID }); + + self[allocationId] = allocation; + } + + function get(mapping(address => State) storage self, address allocationId) internal view returns (State memory) { + return _get(self, allocationId); + } + + function revertIfExists(mapping(address => State) storage self, address allocationId) internal view { + if (self[allocationId].exists()) revert LegacyAllocationExists(allocationId); + } + + function exists(State memory self) internal pure returns (bool) { + return self.indexer != address(0); + } + + function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) { + State storage allocation = self[allocationId]; + if (!allocation.exists()) revert LegacyAllocationDoesNotExist(allocationId); + return allocation; + } +} diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol new file mode 100644 index 000000000..bcd7f1097 --- /dev/null +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -0,0 +1,251 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; + +import { GraphDirectory } from "../data-service/GraphDirectory.sol"; +import { AllocationManagerV1Storage } from "./AllocationManagerStorage.sol"; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; +import { Allocation } from "../libraries/Allocation.sol"; +import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; +import { PPMMath } from "../data-service/libraries/PPMMath.sol"; +import { ProvisionTracker } from "../data-service/libraries/ProvisionTracker.sol"; + +abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManagerV1Storage { + using ProvisionTracker for mapping(address => uint256); + using Allocation for mapping(address => Allocation.State); + using LegacyAllocation for mapping(address => LegacyAllocation.State); + using PPMMath for uint256; + + // -- Immutables -- + bytes32 private immutable EIP712_ALLOCATION_PROOF_TYPEHASH = + keccak256("AllocationIdProof(address indexer,address allocationId)"); + + /** + * @dev Emitted when `indexer` allocated `tokens` amount to `subgraphDeploymentId` + * during `epoch`. + * `allocationId` indexer derived address used to identify the allocation. + */ + event AllocationCreated( + address indexed indexer, + address indexed allocationId, + bytes32 indexed subgraphDeploymentId, + uint256 tokens + ); + + event AllocationCollected( + address indexed indexer, + address indexed allocationId, + bytes32 indexed subgraphDeploymentId, + uint256 tokensRewards, + uint256 tokensIndexerRewards, + uint256 tokensDelegationRewards, + bytes32 poi + ); + + event AllocationResized( + address indexed indexer, + address indexed allocationId, + bytes32 indexed subgraphDeploymentId, + uint256 newTokens, + uint256 oldTokens + ); + + /** + * @dev Emitted when `indexer` closes an allocation with id `allocationId`. + * An amount of `tokens` get unallocated from `subgraphDeploymentId`. + */ + event AllocationClosed( + address indexed indexer, + address indexed allocationId, + bytes32 indexed subgraphDeploymentId, + uint256 tokens + ); + + event LegacyAllocationMigrated( + address indexed indexer, + address indexed allocationId, + bytes32 indexed subgraphDeploymentId + ); + + error AllocationManagerInvalidAllocationProof(address signer, address allocationId); + error AllocationManagerInvalidAllocationId(); + error AllocationManagerZeroTokensAllocation(address allocationId); + error AllocationManagerAllocationClosed(address allocationId); + error AllocationManagerAllocationSameSize(address allocationId, uint256 tokens); + error AllocationManagerInvalidZeroPOI(); + + constructor(string memory name, string memory version) EIP712(name, version) {} + + function _migrateLegacyAllocation(address _indexer, address _allocationId, bytes32 _subgraphDeploymentId) internal { + legacyAllocations.migrate(_indexer, _allocationId, _subgraphDeploymentId); + emit LegacyAllocationMigrated(_indexer, _allocationId, _subgraphDeploymentId); + } + + function _allocate( + address _indexer, + address _allocationId, + bytes32 _subgraphDeploymentId, + uint256 _tokens, + bytes memory _allocationProof + ) internal returns (Allocation.State memory) { + if (_allocationId == address(0)) revert AllocationManagerInvalidAllocationId(); + + _verifyAllocationProof(_indexer, _allocationId, _allocationProof); + + // Ensure allocation id is not reused + // need to check both subgraph service (on create()) and legacy allocations + legacyAllocations.revertIfExists(_allocationId); + Allocation.State memory allocation = allocations.create( + _indexer, + _allocationId, + _subgraphDeploymentId, + _tokens, + // allos can be resized now, so we need to always take snapshot + GRAPH_REWARDS_MANAGER.onSubgraphAllocationUpdate(_subgraphDeploymentId) + ); + + // Check that the indexer has enough tokens available + allocationProvisionTracker.lock(GRAPH_STAKING, _indexer, _tokens); + + // Update total allocated tokens for the subgraph deployment + subgraphAllocatedTokens[allocation.subgraphDeploymentId] = + subgraphAllocatedTokens[allocation.subgraphDeploymentId] + + allocation.tokens; + + emit AllocationCreated(_indexer, _allocationId, _subgraphDeploymentId, allocation.tokens); + return allocation; + } + + // Update POI timestamp and take rewards snapshot even for 0 rewards + // This ensures the rewards are actually skipped and not collected with the next valid POI + function _collectPOIRewards(address _allocationId, bytes32 _poi) internal returns (uint256) { + if (_poi == bytes32(0)) revert AllocationManagerInvalidZeroPOI(); + + Allocation.State memory allocation = allocations.get(_allocationId); + + // Mint indexing rewards, stale POIs get no rewards... + uint256 timeSinceLastPOI = block.number - allocation.lastPOIPresentedAt; + uint256 tokensRewards = timeSinceLastPOI <= maxPOIStaleness + ? GRAPH_REWARDS_MANAGER.takeRewards(_allocationId) + : 0; + + // ... but we still take a snapshot to ensure the rewards are not collected with the next valid POI + allocations.snapshotRewards( + _allocationId, + GRAPH_REWARDS_MANAGER.onSubgraphAllocationUpdate(allocation.subgraphDeploymentId) + ); + allocations.presentPOI(_allocationId); + + if (tokensRewards == 0) { + emit AllocationCollected(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, 0, 0, 0, _poi); + return tokensRewards; + } + + // Distribute rewards to delegators + // TODO: remove the uint8 cast when PRs are merged + uint256 delegatorCut = GRAPH_STAKING.getDelegationCut( + allocation.indexer, + uint8(IGraphPayments.PaymentTypes.IndexingFee) + ); + uint256 tokensDelegationRewards = tokensRewards.mulPPM(delegatorCut); + GRAPH_TOKEN.approve(address(GRAPH_STAKING), tokensDelegationRewards); + GRAPH_STAKING.addToDelegationPool(allocation.indexer, tokensDelegationRewards); + + // Distribute rewards to indexer + uint256 tokensIndexerRewards = tokensRewards - tokensDelegationRewards; + address rewardsDestination = rewardsDestination[allocation.indexer]; + if (rewardsDestination == address(0)) { + GRAPH_TOKEN.approve(address(GRAPH_STAKING), tokensIndexerRewards); + GRAPH_STAKING.stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards); + } else { + GRAPH_TOKEN.transfer(rewardsDestination, tokensIndexerRewards); + } + + emit AllocationCollected( + allocation.indexer, + _allocationId, + allocation.subgraphDeploymentId, + tokensRewards, + tokensIndexerRewards, + tokensDelegationRewards, + _poi + ); + + return tokensRewards; + } + + function _resizeAllocation(address _allocationId, uint256 _tokens) internal returns (Allocation.State memory) { + Allocation.State memory allocation = allocations.get(_allocationId); + + // Exit early if the allocation size is the same + if (_tokens == allocation.tokens) { + revert AllocationManagerAllocationSameSize(_allocationId, _tokens); + } + + // Update provision tracker + uint256 oldTokens = allocation.tokens; + if (_tokens > oldTokens) { + allocationProvisionTracker.lock(GRAPH_STAKING, allocation.indexer, _tokens - oldTokens); + } else { + allocationProvisionTracker.release(allocation.indexer, oldTokens - _tokens); + } + + // Calculate rewards that have been accrued since the last snapshot but not yet issued + uint256 accRewardsPerAllocatedToken = GRAPH_REWARDS_MANAGER.onSubgraphAllocationUpdate( + allocation.subgraphDeploymentId + ); + uint256 accRewardsPending = accRewardsPerAllocatedToken - allocation.accRewardsPerAllocatedToken; + + // Update the allocation + allocations[_allocationId].tokens = _tokens; + allocations[_allocationId].accRewardsPerAllocatedToken = accRewardsPerAllocatedToken; + allocations[_allocationId].accRewardsPending = allocations[_allocationId].accRewardsPending + accRewardsPending; + + // Update total allocated tokens for the subgraph deployment + subgraphAllocatedTokens[allocation.subgraphDeploymentId] = + subgraphAllocatedTokens[allocation.subgraphDeploymentId] + + (_tokens - oldTokens); + + emit AllocationResized(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, _tokens, oldTokens); + return allocations[_allocationId]; + } + + function _closeAllocation(address _allocationId) internal returns (Allocation.State memory) { + Allocation.State memory allocation = allocations.get(_allocationId); + + allocations.close(_allocationId); + allocationProvisionTracker.release(allocation.indexer, allocation.tokens); + + subgraphAllocatedTokens[allocation.subgraphDeploymentId] = + subgraphAllocatedTokens[allocation.subgraphDeploymentId] - + allocation.tokens; + + emit AllocationClosed(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, allocation.tokens); + return allocations[_allocationId]; + } + + function _getAllocation(address _allocationId) internal view returns (Allocation.State memory) { + return allocations.get(_allocationId); + } + + function _getLegacyAllocation(address _allocationId) internal view returns (LegacyAllocation.State memory) { + return legacyAllocations.get(_allocationId); + } + + // -- Allocation Proof Verification -- + // Caller must prove that they own the private key for the allocationId address + // The proof is an EIP712 signed message of (indexer,allocationId) + function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) internal view { + bytes32 digest = _encodeAllocationProof(_indexer, _allocationId); + address signer = ECDSA.recover(digest, _proof); + if (signer != _allocationId) revert AllocationManagerInvalidAllocationProof(signer, _allocationId); + } + + function _encodeAllocationProof(address _indexer, address _allocationId) internal view returns (bytes32) { + return + EIP712._hashTypedDataV4(keccak256(abi.encode(EIP712_ALLOCATION_PROOF_TYPEHASH, _indexer, _allocationId))); + } +} diff --git a/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol new file mode 100644 index 000000000..c737acabf --- /dev/null +++ b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { Allocation } from "../libraries/Allocation.sol"; +import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; + +abstract contract AllocationManagerV1Storage { + mapping(address allocationId => Allocation.State allocation) public allocations; + mapping(address indexer => uint256 tokens) public allocationProvisionTracker; + mapping(address allocationId => LegacyAllocation.State allocation) public legacyAllocations; + + /// @notice Maximum amount of since last POI was presented to qualify for indexing rewards + uint256 public maxPOIStaleness; + + /// @dev Destination of accrued rewards + mapping(address indexer => address destination) public rewardsDestination; + + /// @notice Track total tokens allocated per subgraph deployment + /// @dev Used to calculate indexing rewards + mapping(bytes32 subgraphDeploymentId => uint256 tokens) public subgraphAllocatedTokens; + + /// @dev Gap to allow adding variables in future upgrades + uint256[50] private __gap; +} diff --git a/packages/subgraph-service/contracts/utilities/AttestationManager.sol b/packages/subgraph-service/contracts/utilities/AttestationManager.sol new file mode 100644 index 000000000..2c1e18150 --- /dev/null +++ b/packages/subgraph-service/contracts/utilities/AttestationManager.sol @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { AttestationManagerV1Storage } from "./AttestationManagerStorage.sol"; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { Attestation } from "../libraries/Attestation.sol"; + +abstract contract AttestationManager is AttestationManagerV1Storage { + bytes32 private constant RECEIPT_TYPE_HASH = + keccak256("Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)"); + + bytes32 private constant DOMAIN_TYPE_HASH = + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)"); + bytes32 private constant DOMAIN_NAME_HASH = keccak256("Graph Protocol"); + bytes32 private constant DOMAIN_VERSION_HASH = keccak256("0"); + bytes32 private constant DOMAIN_SALT = 0xa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c2; + + constructor() { + // EIP-712 domain separator + _domainSeparator = keccak256( + abi.encode( + DOMAIN_TYPE_HASH, + DOMAIN_NAME_HASH, + DOMAIN_VERSION_HASH, + block.chainid, + address(this), + DOMAIN_SALT + ) + ); + } + + /** + * @dev Recover the signer address of the `_attestation`. + * @param _attestation The attestation struct + * @return Signer address + */ + function _recoverSigner(Attestation.State memory _attestation) internal view returns (address) { + // Obtain the hash of the fully-encoded message, per EIP-712 encoding + Attestation.Receipt memory receipt = Attestation.Receipt( + _attestation.requestCID, + _attestation.responseCID, + _attestation.subgraphDeploymentId + ); + bytes32 messageHash = _encodeReceipt(receipt); + + // Obtain the signer of the fully-encoded EIP-712 message hash + // NOTE: The signer of the attestation is the indexer that served the request + return ECDSA.recover(messageHash, abi.encodePacked(_attestation.r, _attestation.s, _attestation.v)); + } + + /** + * @dev Get the message hash that a indexer used to sign the receipt. + * Encodes a receipt using a domain separator, as described on + * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification. + * @notice Return the message hash used to sign the receipt + * @param _receipt Receipt returned by indexer and submitted by fisherman + * @return Message hash used to sign the receipt + */ + function _encodeReceipt(Attestation.Receipt memory _receipt) internal view returns (bytes32) { + return + keccak256( + abi.encodePacked( + "\x19\x01", // EIP-191 encoding pad, EIP-712 version 1 + _domainSeparator, + keccak256( + abi.encode( + RECEIPT_TYPE_HASH, + _receipt.requestCID, + _receipt.responseCID, + _receipt.subgraphDeploymentId + ) // EIP 712-encoded message hash + ) + ) + ); + } +} diff --git a/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol new file mode 100644 index 000000000..80aa0388f --- /dev/null +++ b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +abstract contract AttestationManagerV1Storage { + bytes32 internal _domainSeparator; + + /// @dev Gap to allow adding variables in future upgrades + uint256[50] private __gap; +} diff --git a/packages/subgraph-service/contracts/utilities/Directory.sol b/packages/subgraph-service/contracts/utilities/Directory.sol new file mode 100644 index 000000000..cd87de102 --- /dev/null +++ b/packages/subgraph-service/contracts/utilities/Directory.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { ITAPVerifier } from "../interfaces/ITAPVerifier.sol"; +import { IDisputeManager } from "../interfaces/IDisputeManager.sol"; +import { ISubgraphService } from "../interfaces/ISubgraphService.sol"; +import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; + +abstract contract Directory { + ITAPVerifier public immutable TAP_VERIFIER; + IDisputeManager public immutable DISPUTE_MANAGER; + ISubgraphService public immutable SUBGRAPH_SERVICE; + ICuration public immutable CURATION; + + event SubgraphServiceDirectoryInitialized( + address subgraphService, + address tapVerifier, + address disputeManager, + address curation + ); + error DirectoryNotDisputeManager(address caller, address disputeManager); + + modifier onlyDisputeManager() { + if (msg.sender != address(DISPUTE_MANAGER)) { + revert DirectoryNotDisputeManager(msg.sender, address(DISPUTE_MANAGER)); + } + _; + } + + constructor(address subgraphService, address tapVerifier, address disputeManager, address curation) { + SUBGRAPH_SERVICE = ISubgraphService(subgraphService); + TAP_VERIFIER = ITAPVerifier(tapVerifier); + DISPUTE_MANAGER = IDisputeManager(disputeManager); + CURATION = ICuration(curation); + + emit SubgraphServiceDirectoryInitialized(subgraphService, tapVerifier, disputeManager, curation); + } +} diff --git a/packages/subgraph-service/eslint.config.js b/packages/subgraph-service/eslint.config.js new file mode 100644 index 000000000..2cb4335fd --- /dev/null +++ b/packages/subgraph-service/eslint.config.js @@ -0,0 +1,21 @@ +// @ts-check +/* eslint-disable no-undef */ +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ + +const eslintGraphConfig = require('eslint-graph-config') +module.exports = [ + ...eslintGraphConfig.default, + { + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + }, + }, + { + ignores: ['typechain-types/*'], + }, +] diff --git a/packages/subgraph-service/foundry.toml b/packages/subgraph-service/foundry.toml new file mode 100644 index 000000000..55f7ffd31 --- /dev/null +++ b/packages/subgraph-service/foundry.toml @@ -0,0 +1,6 @@ +[profile.default] +src = 'contracts' +out = 'build' +libs = ['node_modules', 'lib'] +test = 'test' +cache_path = 'cache_forge' \ No newline at end of file diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts new file mode 100644 index 000000000..f4a7067b7 --- /dev/null +++ b/packages/subgraph-service/hardhat.config.ts @@ -0,0 +1,37 @@ +// import '@nomicfoundation/hardhat-foundry' +import '@nomicfoundation/hardhat-toolbox' +import 'hardhat-contract-sizer' +import 'hardhat-storage-layout' +import 'solidity-docgen' + +import { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + solidity: { + compilers: [ + { + version: '0.8.24', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + metadata: { + useLiteralContent: true, + }, + outputSelection: { + '*': { + '*': ['storageLayout', 'metadata'], + }, + }, + }, + }, + ], + }, + paths: { + artifacts: './build/contracts', + sources: './contracts', + }, +} + +export default config diff --git a/packages/subgraph-service/lib/forge-std b/packages/subgraph-service/lib/forge-std new file mode 160000 index 000000000..bb4ceea94 --- /dev/null +++ b/packages/subgraph-service/lib/forge-std @@ -0,0 +1 @@ +Subproject commit bb4ceea94d6f10eeb5b41dc2391c6c8bf8e734ef diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json new file mode 100644 index 000000000..f66d229de --- /dev/null +++ b/packages/subgraph-service/package.json @@ -0,0 +1,63 @@ +{ + "name": "@graphprotocol/subgraph-service", + "version": "0.0.1", + "description": "", + "author": "The Graph Team", + "license": "GPL-2.0-or-later", + "scripts": { + "lint:ts": "eslint '**/*.{js,ts}' --fix", + "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", + "lint": "yarn lint:ts && yarn lint:sol", + "clean": "rm -rf build cache typechain-types", + "build": "forge build && hardhat compile", + "test": "forge test && hardhat test" + }, + "devDependencies": { + "@graphprotocol/contracts": "workspace:^7.0.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-foundry": "^1.1.1", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@openzeppelin/contracts": "^5.0.2", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=16.0.0", + "chai": "^4.2.0", + "eslint": "^8.56.0", + "eslint-graph-config": "workspace:^0.0.1", + "ethers": "^6.4.0", + "hardhat": "^2.20.1", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-gas-reporter": "^1.0.8", + "hardhat-storage-layout": "^0.1.7", + "lint-staged": "^15.2.2", + "prettier": "^3.2.5", + "prettier-plugin-solidity": "^1.3.1", + "solhint": "^4.5.4", + "solhint-graph-config": "workspace:^0.0.1", + "solhint-plugin-graph": "file:node_modules/solhint-graph-config/plugin", + "solidity-coverage": "^0.8.0", + "solidity-docgen": "^0.6.0-beta.36", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": "^5.3.3" + }, + "lint-staged": { + "contracts/**/*.sol": [ + "yarn lint:sol" + ], + "**/*.ts": [ + "yarn lint:ts" + ], + "**/*.js": [ + "yarn lint:ts" + ], + "**/*.json": [ + "yarn lint:ts" + ] + } +} diff --git a/packages/subgraph-service/prettier.config.js b/packages/subgraph-service/prettier.config.js new file mode 100644 index 000000000..5b8e866f2 --- /dev/null +++ b/packages/subgraph-service/prettier.config.js @@ -0,0 +1,2 @@ +const prettierGraphConfig = require('solhint-graph-config/prettier') +module.exports = prettierGraphConfig diff --git a/packages/subgraph-service/remappings.txt b/packages/subgraph-service/remappings.txt new file mode 100644 index 000000000..1bd6482cd --- /dev/null +++ b/packages/subgraph-service/remappings.txt @@ -0,0 +1,5 @@ +@graphprotocol/contracts/=node_modules/@graphprotocol/contracts/ +forge-std/=lib/forge-std/src/ +ds-test/=lib/forge-std/lib/ds-test/src/ +eth-gas-reporter/=node_modules/eth-gas-reporter/ +hardhat/=node_modules/hardhat/ diff --git a/packages/subgraph-service/scripts/deploy.ts b/packages/subgraph-service/scripts/deploy.ts new file mode 100644 index 000000000..cf87ff10f --- /dev/null +++ b/packages/subgraph-service/scripts/deploy.ts @@ -0,0 +1,28 @@ +import { ethers } from 'hardhat' + +async function main() { + const currentTimestampInSeconds = Math.round(Date.now() / 1000) + const unlockTime = currentTimestampInSeconds + 60 + + const lockedAmount = ethers.parseEther('0.001') + const a = 1 + console.log(a) + const lock = await ethers.deployContract('Lock', [unlockTime], { + value: lockedAmount, + }) + + await lock.waitForDeployment() + + console.log( + `Lock with ${ethers.formatEther( + lockedAmount, + )}ETH and unlock timestamp ${unlockTime} deployed to ${typeof lock.target == 'string' ? lock.target : ''}`, + ) +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error) + process.exitCode = 1 +}) diff --git a/packages/subgraph-service/test/DisputeManager.t.sol b/packages/subgraph-service/test/DisputeManager.t.sol new file mode 100644 index 000000000..bc8e8f42d --- /dev/null +++ b/packages/subgraph-service/test/DisputeManager.t.sol @@ -0,0 +1,501 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; +import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; + +import { DisputeManager } from "../contracts/DisputeManager.sol"; +import { IDisputeManager } from "../contracts/interfaces/IDisputeManager.sol"; +import { Attestation } from "../contracts/libraries/Attestation.sol"; + +import { SubgraphService } from "../contracts/SubgraphService.sol"; + +// Mocks + +import "./mocks/MockGRTToken.sol"; +import "./mocks/MockHorizonStaking.sol"; +import "./mocks/MockRewardsManager.sol"; + +contract DisputeManagerTest is Test { + DisputeManager disputeManager; + + address governor; + address arbitrator; + + uint256 indexerPrivateKey; + address indexer; + + uint256 fishermanPrivateKey; + address fisherman; + + uint256 allocationIDPrivateKey; + address allocationID; + + uint64 disputePeriod = 300; // 5 minutes + uint256 minimumDeposit = 100 ether; // 100 GRT + uint32 fishermanRewardPercentage = 100000; // 10% + uint32 maxSlashingPercentage = 500000; // 50% + + Controller controller; + MockGRTToken graphToken; + SubgraphService subgraphService; + MockHorizonStaking staking; + MockRewardsManager rewardsManager; + + // Setup + + function setUp() public { + governor = address(0xA1); + arbitrator = address(0xA2); + + indexerPrivateKey = 0xB1; + indexer = vm.addr(indexerPrivateKey); + + fishermanPrivateKey = 0xC1; + fisherman = vm.addr(fishermanPrivateKey); + + allocationIDPrivateKey = 0xD1; + allocationID = vm.addr(allocationIDPrivateKey); + + graphToken = new MockGRTToken(); + staking = new MockHorizonStaking(address(graphToken)); + rewardsManager = new MockRewardsManager(); + + address payments = address(0xE2); + address tapVerifier = address(0xE3); + address curation = address(0xE4); + + vm.startPrank(governor); + controller = new Controller(); + controller.setContractProxy(keccak256("GraphToken"), address(graphToken)); + controller.setContractProxy(keccak256("Staking"), address(staking)); + controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); + vm.stopPrank(); + + disputeManager = new DisputeManager( + address(controller), + arbitrator, + disputePeriod, + minimumDeposit, + fishermanRewardPercentage, + maxSlashingPercentage + ); + + subgraphService = new SubgraphService( + address(controller), + address(disputeManager), + tapVerifier, + curation, + 1000 ether + ); + + disputeManager.setSubgraphService(address(subgraphService)); + } + + // Helper functions + + function createProvisionAndAllocate(address _allocationID, uint256 tokens) private { + vm.startPrank(indexer); + graphToken.mint(indexer, tokens); + staking.provision(tokens, address(subgraphService), 500000, 300); + bytes32 subgraphDeployment = keccak256(abi.encodePacked("Subgraph Deployment ID")); + bytes32 digest = subgraphService.encodeAllocationProof(indexer, _allocationID); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + + subgraphService.register( + indexer, + abi.encode("url", "geoHash") + ); + + bytes memory data = abi.encode( + subgraphDeployment, + tokens, + _allocationID, + abi.encodePacked(r, s, v) + ); + subgraphService.startService(indexer, data); + vm.stopPrank(); + } + + function createIndexingDispute(address _allocationID, uint256 tokens) private returns (bytes32 disputeID) { + vm.startPrank(fisherman); + graphToken.mint(fisherman, tokens); + graphToken.approve(address(disputeManager), tokens); + bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, tokens); + vm.stopPrank(); + return _disputeID; + } + + function createQueryDispute(uint256 tokens) private returns (bytes32 disputeID) { + Attestation.Receipt memory receipt = Attestation.Receipt({ + requestCID: keccak256(abi.encodePacked("Request CID")), + responseCID: keccak256(abi.encodePacked("Response CID")), + subgraphDeploymentId: keccak256(abi.encodePacked("Subgraph Deployment ID")) + }); + bytes memory attestationData = createAtestationData(receipt, allocationIDPrivateKey); + + vm.startPrank(fisherman); + graphToken.mint(fisherman, tokens); + graphToken.approve(address(disputeManager), tokens); + bytes32 _disputeID = disputeManager.createQueryDispute(attestationData, tokens); + vm.stopPrank(); + return _disputeID; + } + + function createConflictingAttestations( + bytes32 responseCID1, + bytes32 subgraphDeploymentId1, + bytes32 responseCID2, + bytes32 subgraphDeploymentId2 + ) private view returns (bytes memory attestationData1, bytes memory attestationData2) { + bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); + Attestation.Receipt memory receipt1 = Attestation.Receipt({ + requestCID: requestCID, + responseCID: responseCID1, + subgraphDeploymentId: subgraphDeploymentId1 + }); + + Attestation.Receipt memory receipt2 = Attestation.Receipt({ + requestCID: requestCID, + responseCID: responseCID2, + subgraphDeploymentId: subgraphDeploymentId2 + }); + + bytes memory _attestationData1 = createAtestationData(receipt1, allocationIDPrivateKey); + bytes memory _attestationData2 = createAtestationData(receipt2, allocationIDPrivateKey); + return (_attestationData1, _attestationData2); + } + + function createAtestationData(Attestation.Receipt memory receipt, uint256 signer) private view returns (bytes memory attestationData) { + bytes32 digest = disputeManager.encodeReceipt(receipt); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(signer, digest); + + return abi.encodePacked(receipt.requestCID, receipt.responseCID, receipt.subgraphDeploymentId, r, s, v); + } + + // Tests + + // Create dispute + + function testCreateIndexingDispute() public { + createProvisionAndAllocate(allocationID, 10000 ether); + + bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); + } + + function testCreateQueryDispute() public { + createProvisionAndAllocate(allocationID, 10000 ether); + + bytes32 disputeID = createQueryDispute(200 ether); + assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); + } + + function testCreateQueryDisputeConflict() public { + createProvisionAndAllocate(allocationID, 10000 ether); + + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = + createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); + + vm.prank(fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + assertTrue(disputeManager.isDisputeCreated(disputeID1), "Dispute 1 should be created."); + assertTrue(disputeManager.isDisputeCreated(disputeID2), "Dispute 2 should be created."); + } + + function test_RevertWhen_DisputeAlreadyCreated() public { + createProvisionAndAllocate(allocationID, 10000 ether); + bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + + // Create another dispute with different fisherman + address otherFisherman = address(0x5); + uint256 tokens = 200 ether; + vm.startPrank(otherFisherman); + graphToken.mint(otherFisherman, tokens); + graphToken.approve(address(disputeManager), tokens); + bytes memory expectedError = abi.encodeWithSignature("DisputeManagerDisputeAlreadyCreated(bytes32)", disputeID); + vm.expectRevert(expectedError); + disputeManager.createIndexingDispute(allocationID, tokens); + vm.stopPrank(); + } + + function test_RevertIf_DepositUnderMinimum() public { + // minimum deposit is 100 ether + vm.startPrank(fisherman); + graphToken.mint(fisherman, 50 ether); + bytes memory expectedError = abi.encodeWithSignature("DisputeManagerInsufficientDeposit(uint256,uint256)", 50 ether, 100 ether); + vm.expectRevert(expectedError); + disputeManager.createIndexingDispute(allocationID, 50 ether); + vm.stopPrank(); + } + + function test_RevertIf_AllocationDoesNotExist() public { + // create dispute without an existing allocation + uint256 tokens = 200 ether; + vm.startPrank(fisherman); + graphToken.mint(fisherman, tokens); + graphToken.approve(address(disputeManager), tokens); + bytes memory expectedError = abi.encodeWithSignature("DisputeManagerIndexerNotFound(address)", allocationID); + vm.expectRevert(expectedError); + disputeManager.createIndexingDispute(allocationID, tokens); + vm.stopPrank(); + } + + function test_RevertIf_ConflictingAttestationsResponsesAreTheSame() public { + bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 responseCID = keccak256(abi.encodePacked("Response CID")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = + createConflictingAttestations( + responseCID, + subgraphDeploymentId, + responseCID, + subgraphDeploymentId + ); + + vm.prank(fisherman); + + bytes memory expectedError = abi.encodeWithSignature( + "DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", + requestCID, + responseCID, + subgraphDeploymentId, + requestCID, + responseCID, + subgraphDeploymentId + ); + vm.expectRevert(expectedError); + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + } + + function test_RevertIf_ConflictingAttestationsHaveDifferentSubgraph() public { + bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId1 = keccak256(abi.encodePacked("Subgraph Deployment ID 1")); + bytes32 subgraphDeploymentId2 = keccak256(abi.encodePacked("Subgraph Deployment ID 2")); + + (bytes memory attestationData1, bytes memory attestationData2) = + createConflictingAttestations( + responseCID1, + subgraphDeploymentId1, + responseCID2, + subgraphDeploymentId2 + ); + + vm.prank(fisherman); + bytes memory expectedError = abi.encodeWithSignature( + "DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", + requestCID, + responseCID1, + subgraphDeploymentId1, + requestCID, + responseCID2, + subgraphDeploymentId2 + ); + vm.expectRevert(expectedError); + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + } + + // Accept dispute + + function testAcceptIndexingDispute() public { + createProvisionAndAllocate(allocationID, 10000 ether); + bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + + vm.prank(arbitrator); + disputeManager.acceptDispute(disputeID, 5000 ether); + + assertEq(graphToken.balanceOf(fisherman), 700 ether, "Fisherman should receive 50% of slashed tokens."); + assertEq(graphToken.balanceOf(indexer), 5000 ether, "Service provider should have 5000 GRT slashed."); + } + + function testAcceptQueryDispute() public { + createProvisionAndAllocate(allocationID, 10000 ether); + bytes32 disputeID = createQueryDispute(200 ether); + + vm.prank(arbitrator); + disputeManager.acceptDispute(disputeID, 5000 ether); + + assertEq(graphToken.balanceOf(fisherman), 700 ether, "Fisherman should receive 50% of slashed tokens."); + assertEq(graphToken.balanceOf(indexer), 5000 ether, "Service provider should have 5000 GRT slashed."); + } + + function testAcceptQueryDisputeConflicting() public { + createProvisionAndAllocate(allocationID, 10000 ether); + + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = + createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); + + vm.prank(fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + + vm.prank(arbitrator); + disputeManager.acceptDispute(disputeID1, 5000 ether); + + assertEq(graphToken.balanceOf(fisherman), 500 ether, "Fisherman should receive 50% of slashed tokens."); + assertEq(graphToken.balanceOf(indexer), 5000 ether, "Service provider should have 5000 GRT slashed."); + + (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); + (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); + assertTrue(status1 == IDisputeManager.DisputeStatus.Accepted, "Dispute 1 should be accepted."); + assertTrue(status2 == IDisputeManager.DisputeStatus.Rejected, "Dispute 2 should be rejected."); + } + + function test_RevertIf_CallerIsNotArbitrator_AcceptDispute() public { + createProvisionAndAllocate(allocationID, 10000 ether); + + bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + + // attempt to accept dispute as fisherman + vm.prank(fisherman); + vm.expectRevert(bytes4(keccak256("DisputeManagerNotArbitrator()"))); + disputeManager.acceptDispute(disputeID, 5000 ether); + } + + function test_RevertIf_SlashingOverMaxSlashPercentage() public { + createProvisionAndAllocate(allocationID, 10000 ether); + bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + + // max slashing percentage is 50% + vm.prank(arbitrator); + bytes memory expectedError = abi.encodeWithSignature("DisputeManagerInvalidSlashAmount(uint256)", 6000 ether); + vm.expectRevert(expectedError); + disputeManager.acceptDispute(disputeID, 6000 ether); + } + + // Cancel dispute + + function testCancelDispute() public { + createProvisionAndAllocate(allocationID, 10000 ether); + bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + + // skip to end of dispute period + skip(disputePeriod + 1); + + vm.prank(fisherman); + disputeManager.cancelDispute(disputeID); + + assertEq(graphToken.balanceOf(fisherman), 200 ether, "Fisherman should receive their deposit back."); + assertEq(graphToken.balanceOf(indexer), 10000 ether, "There's no slashing to the indexer."); + } + + function testCancelQueryDisputeConflicting() public { + createProvisionAndAllocate(allocationID, 10000 ether); + + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = + createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); + + vm.prank(fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + + // skip to end of dispute period + skip(disputePeriod + 1); + + vm.prank(fisherman); + disputeManager.cancelDispute(disputeID1); + + assertEq(graphToken.balanceOf(indexer), 10000 ether, "There's no slashing to the indexer."); + + (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); + (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); + assertTrue(status1 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 1 should be cancelled."); + assertTrue(status2 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 2 should be cancelled."); + } + + function test_RevertIf_CallerIsNotFisherman_CancelDispute() public { + createProvisionAndAllocate(allocationID, 10000 ether); + bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + + vm.prank(arbitrator); + vm.expectRevert(bytes4(keccak256("DisputeManagerNotFisherman()"))); + disputeManager.cancelDispute(disputeID); + } + + // Draw dispute + + function testDrawDispute() public { + createProvisionAndAllocate(allocationID, 10000 ether); + bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + + vm.prank(arbitrator); + disputeManager.drawDispute(disputeID); + + assertEq(graphToken.balanceOf(fisherman), 200 ether, "Fisherman should receive their deposit back."); + assertEq(graphToken.balanceOf(indexer), 10000 ether, "There's no slashing to the indexer."); + } + + function testDrawQueryDisputeConflicting() public { + createProvisionAndAllocate(allocationID, 10000 ether); + + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = + createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); + + vm.prank(fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + + vm.prank(arbitrator); + disputeManager.drawDispute(disputeID1); + + assertEq(graphToken.balanceOf(indexer), 10000 ether, "There's no slashing to the indexer."); + + (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); + (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); + assertTrue(status1 == IDisputeManager.DisputeStatus.Drawn, "Dispute 1 should be drawn."); + assertTrue(status2 == IDisputeManager.DisputeStatus.Drawn, "Dispute 2 should be drawn."); + } + + function test_RevertIf_CallerIsNotArbitrator_DrawDispute() public { + createProvisionAndAllocate(allocationID, 10000 ether); + bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + + // attempt to draw dispute as fisherman + vm.prank(fisherman); + vm.expectRevert(bytes4(keccak256("DisputeManagerNotArbitrator()"))); + disputeManager.drawDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/mocks/MockGRTToken.sol b/packages/subgraph-service/test/mocks/MockGRTToken.sol new file mode 100644 index 000000000..11cf5c0f8 --- /dev/null +++ b/packages/subgraph-service/test/mocks/MockGRTToken.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; + +contract MockGRTToken is ERC20, IGraphToken { + constructor() ERC20("Graph Token", "GRT") {} + + function burn(uint256 amount) external {} + + function burnFrom(address _from, uint256 amount) external { + _burn(_from, amount); + } + + function mint(address to, uint256 amount) public { + _mint(to, amount); + } + + // -- Mint Admin -- + + function addMinter(address _account) external {} + + function removeMinter(address _account) external {} + + function renounceMinter() external {} + + function isMinter(address _account) external view returns (bool) {} + + // -- Permit -- + + function permit( + address _owner, + address _spender, + uint256 _value, + uint256 _deadline, + uint8 _v, + bytes32 _r, + bytes32 _s + ) external {} + + // -- Allowance -- + + function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {} + function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {} +} \ No newline at end of file diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol new file mode 100644 index 000000000..bd67a980c --- /dev/null +++ b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { MockGRTToken } from "./MockGRTToken.sol"; + +contract MockHorizonStaking is IHorizonStaking { + mapping (address verifier => mapping (address serviceProvider => IHorizonStaking.Provision provision)) public _provisions; + MockGRTToken public grtToken; + + constructor(address _grtTokenAddress) { + grtToken = MockGRTToken(_grtTokenAddress); + } + + // whitelist/deny a verifier + function allowVerifier(address verifier, bool allow) external {} + + // deposit stake + function stake(uint256 tokens) external {} + + // create a provision + function provision(uint256 tokens, address verifier, uint32 maxVerifierCut, uint64 thawingPeriod) external { + IHorizonStaking.Provision memory newProvision = IHorizonStaking.Provision({ + serviceProvider: msg.sender, + tokens: tokens, + delegatedTokens: 0, + tokensThawing: 0, + createdAt: uint64(block.timestamp), + verifier: verifier, + maxVerifierCut: maxVerifierCut, + thawingPeriod: thawingPeriod + }); + _provisions[verifier][msg.sender] = newProvision; + } + + function acceptProvision(address serviceProvider) external {} + + // initiate a thawing to remove tokens from a provision + function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32 thawRequestId) {} + + // moves thawed stake from a provision back into the provider's available stake + function deprovision(bytes32 thawRequestId) external {} + + // moves thawed stake from one provision into another provision + function reprovision(bytes32 thawRequestId, bytes32 provisionId) external {} + + // moves thawed stake back to the owner's account - stake is removed from the protocol + function withdraw(bytes32 thawRequestId) external {} + + // delegate tokens to a provider + function delegate(address serviceProvider, uint256 tokens) external {} + + // undelegate tokens + function undelegate( + address serviceProvider, + uint256 tokens, + bytes32[] calldata provisions + ) external returns (bytes32 thawRequestId) {} + + // slash a service provider + function slash(address serviceProvider, uint256 tokens, uint256 reward, address rewardsDestination) external { + grtToken.mint(rewardsDestination, reward); + grtToken.burnFrom(serviceProvider, tokens); + } + + // set the Service Provider's preferred provisions to be force thawed + function setForceThawProvisions(bytes32[] calldata provisions) external {} + + // total staked tokens to the provider + // `ServiceProvider.tokensStaked + DelegationPool.serviceProvider.tokens` + function getStake(address serviceProvider) external view returns (uint256 tokens) {} + + // staked tokens that are currently not provisioned, aka idle stake + // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` + function getIdleStake(address serviceProvider) external view returns (uint256 tokens) {} + + // staked tokens the provider can provision before hitting the delegation cap + // `ServiceProvider.tokensStaked * Staking.delegationRatio - Provision.tokensProvisioned` + function getCapacity(address serviceProvider) external view returns (uint256 tokens) {} + + // provisioned tokens that are not being used + // `Provision.tokens - Provision.tokensThawing` + function getTokensAvailable(address serviceProvider, address verifier) external view returns (uint256 tokens) { + return _provisions[verifier][serviceProvider].tokens; + } + + function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory) {} + + function getProvision(address serviceProvider, address verifier) external view returns (Provision memory) { + return _provisions[verifier][serviceProvider]; + } + + /** + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param _operator The address to check for auth + * @param _serviceProvider The service provider on behalf of whom they're claiming to act + * @param _verifier The verifier / data service on which they're claiming to act + */ + function isAuthorized(address _operator, address _serviceProvider, address _verifier) external view returns (bool) { + return true; + } + + function getDelegationCut(address serviceProvider, uint8 paymentType) external view returns (uint256 delegationCut) {} + function addToDelegationPool(address serviceProvider, uint256 tokens) external {} + function stakeToProvision(address _serviceProvider, address _verifier, uint256 _tokens) external {} +} \ No newline at end of file diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol new file mode 100644 index 000000000..6d15d2b3c --- /dev/null +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; + +contract MockRewardsManager is IRewardsManager { + // -- Config -- + + function setIssuancePerBlock(uint256 _issuancePerBlock) external {} + + function setMinimumSubgraphSignal(uint256 _minimumSubgraphSignal) external {} + + // -- Denylist -- + + function setSubgraphAvailabilityOracle(address _subgraphAvailabilityOracle) external {} + + function setDenied(bytes32 _subgraphDeploymentID, bool _deny) external {} + + function setDeniedMany(bytes32[] calldata _subgraphDeploymentID, bool[] calldata _deny) external {} + + function isDenied(bytes32 _subgraphDeploymentID) external view returns (bool) {} + + // -- Getters -- + + function getNewRewardsPerSignal() external view returns (uint256) {} + + function getAccRewardsPerSignal() external view returns (uint256) {} + + function getAccRewardsForSubgraph(bytes32 _subgraphDeploymentID) external view returns (uint256) {} + + function getAccRewardsPerAllocatedToken(bytes32 _subgraphDeploymentID) external view returns (uint256, uint256) {} + + function getRewards(address _allocationID) external view returns (uint256) {} + + // -- Updates -- + + function updateAccRewardsPerSignal() external returns (uint256) {} + + function takeRewards(address _allocationID) external returns (uint256) {} + + // -- Hooks -- + + function onSubgraphSignalUpdate(bytes32 _subgraphDeploymentID) external returns (uint256) {} + + function onSubgraphAllocationUpdate(bytes32 _subgraphDeploymentID) external returns (uint256) { + return 0; + } +} \ No newline at end of file diff --git a/packages/subgraph-service/tsconfig.json b/packages/subgraph-service/tsconfig.json new file mode 100644 index 000000000..adee669ce --- /dev/null +++ b/packages/subgraph-service/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + }, + "include": [ + "hardhat.config.ts", + "prettier.config.js", + "scripts/**/*.ts", + "test/**/*.ts", + "eslint.config.js" + ] +} diff --git a/yarn.lock b/yarn.lock index 00e728326..1e14c7d52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,22 +5,15 @@ __metadata: version: 8 cacheKey: 10c0 -"@0no-co/graphql.web@npm:^1.0.1": - version: 1.0.4 - resolution: "@0no-co/graphql.web@npm:1.0.4" +"@0no-co/graphql.web@npm:^1.0.5": + version: 1.0.7 + resolution: "@0no-co/graphql.web@npm:1.0.7" peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 peerDependenciesMeta: graphql: optional: true - checksum: bf63cb5b017063363c9a9e06dc17532abc1c2da402c7ebcbc7b5ab2a0601ec93b02de93af9e50d9daffb3b747eddcf0b1e5418a46d1182c5b8087b7d7a1768ad - languageName: node - linkType: hard - -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: 53c2b231a61a46792b39a0d43bc4f4f776bb4542aa57ee04930676802e5501282c2fc8aac14e4cd1f1120ff8b52616b6ff5ab539ad30aa2277d726444b71619f + checksum: 4744a6c327e0a2d564c8f4720ef08dcece6c3b8373f52208ff29f7086f90e18d211c59cc222c229f1e3241abd1fc6e30377dc1dadac491bbb25706f29dea626a languageName: node linkType: hard @@ -32,12 +25,12 @@ __metadata: linkType: hard "@ampproject/remapping@npm:^2.2.0": - version: 2.2.1 - resolution: "@ampproject/remapping@npm:2.2.1" + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 92ce5915f8901d8c7cd4f4e6e2fe7b9fd335a29955b400caa52e0e5b12ca3796ada7c2f10e78c9c5b0f9c2539dff0ffea7b19850a56e1487aa083531e1e46d43 + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed languageName: node linkType: hard @@ -129,12 +122,12 @@ __metadata: linkType: hard "@aws-sdk/types@npm:^3.1.0": - version: 3.515.0 - resolution: "@aws-sdk/types@npm:3.515.0" + version: 3.577.0 + resolution: "@aws-sdk/types@npm:3.577.0" dependencies: - "@smithy/types": "npm:^2.9.1" - tslib: "npm:^2.5.0" - checksum: 47afecf060dec7e7db5073dfec7d6815582f66266cfb31111af4a80fc10bc56bf5c7a5dc096780849efa982a9b097e69b1b3bebf23d82521763b04ae17cc7202 + "@smithy/types": "npm:^3.0.0" + tslib: "npm:^2.6.2" + checksum: ae31757b05c2445f52b3f3268d7e9cbae765cae24f088afb8f967c8e3a268b425794a8e99fab3e0428dc6491ccca99b6c57ab5ca69e2d1cc2878ec85ff9643f7 languageName: node linkType: hard @@ -147,55 +140,55 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/code-frame@npm:7.23.5" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.2": + version: 7.24.2 + resolution: "@babel/code-frame@npm:7.24.2" dependencies: - "@babel/highlight": "npm:^7.23.4" - chalk: "npm:^2.4.2" - checksum: a10e843595ddd9f97faa99917414813c06214f4d9205294013e20c70fbdf4f943760da37dec1d998bf3e6fc20fa2918a47c0e987a7e458663feb7698063ad7c6 + "@babel/highlight": "npm:^7.24.2" + picocolors: "npm:^1.0.0" + checksum: d1d4cba89475ab6aab7a88242e1fd73b15ecb9f30c109b69752956434d10a26a52cbd37727c4eca104b6d45227bd1dfce39a6a6f4a14c9b2f07f871e968cf406 languageName: node linkType: hard "@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/compat-data@npm:7.23.5" - checksum: 081278ed46131a890ad566a59c61600a5f9557bd8ee5e535890c8548192532ea92590742fd74bd9db83d74c669ef8a04a7e1c85cdea27f960233e3b83c3a957c + version: 7.24.4 + resolution: "@babel/compat-data@npm:7.24.4" + checksum: 9cd8a9cd28a5ca6db5d0e27417d609f95a8762b655e8c9c97fd2de08997043ae99f0139007083c5e607601c6122e8432c85fe391731b19bf26ad458fa0c60dd3 languageName: node linkType: hard "@babel/core@npm:^7.14.0": - version: 7.23.9 - resolution: "@babel/core@npm:7.23.9" + version: 7.24.5 + resolution: "@babel/core@npm:7.24.5" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.23.5" - "@babel/generator": "npm:^7.23.6" + "@babel/code-frame": "npm:^7.24.2" + "@babel/generator": "npm:^7.24.5" "@babel/helper-compilation-targets": "npm:^7.23.6" - "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helpers": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/helper-module-transforms": "npm:^7.24.5" + "@babel/helpers": "npm:^7.24.5" + "@babel/parser": "npm:^7.24.5" + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.5" + "@babel/types": "npm:^7.24.5" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 03883300bf1252ab4c9ba5b52f161232dd52873dbe5cde9289bb2bb26e935c42682493acbac9194a59a3b6cbd17f4c4c84030db8d6d482588afe64531532ff9b + checksum: e26ba810a77bc8e21579a12fc36c79a0a60554404dc9447f2d64eb1f26d181c48d3b97d39d9f158e9911ec7162a8280acfaf2b4b210e975f0dd4bd4dbb1ee159 languageName: node linkType: hard -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/generator@npm:7.23.6" +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/generator@npm:7.24.5" dependencies: - "@babel/types": "npm:^7.23.6" - "@jridgewell/gen-mapping": "npm:^0.3.2" - "@jridgewell/trace-mapping": "npm:^0.3.17" + "@babel/types": "npm:^7.24.5" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^2.5.1" - checksum: 53540e905cd10db05d9aee0a5304e36927f455ce66f95d1253bb8a179f286b88fa7062ea0db354c566fe27f8bb96567566084ffd259f8feaae1de5eccc8afbda + checksum: 0d64f880150e7dfb92ceff2b4ac865f36aa1e295120920246492ffd0146562dabf79ba8699af1c8833f8a7954818d4d146b7b02f808df4d6024fb99f98b2f78d languageName: node linkType: hard @@ -208,7 +201,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.23.6": +"@babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.23.6": version: 7.23.6 resolution: "@babel/helper-compilation-targets@npm:7.23.6" dependencies: @@ -222,21 +215,21 @@ __metadata: linkType: hard "@babel/helper-create-class-features-plugin@npm:^7.18.6": - version: 7.23.10 - resolution: "@babel/helper-create-class-features-plugin@npm:7.23.10" + version: 7.24.5 + resolution: "@babel/helper-create-class-features-plugin@npm:7.24.5" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-member-expression-to-functions": "npm:^7.23.0" + "@babel/helper-member-expression-to-functions": "npm:^7.24.5" "@babel/helper-optimise-call-expression": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.20" + "@babel/helper-replace-supers": "npm:^7.24.1" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/helper-split-export-declaration": "npm:^7.24.5" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: f30437aa16f3585cc3382ea630f24457ef622c22f5e4eccffbc03f6a81efbef0b6714fb5a78baa64c838884ba7e1427e3280d7b27481b9f587bc8fbbed05dd36 + checksum: afc72e8075a249663f8024ef1760de4c0b9252bdde16419ac955fa7e15b8d4096ca1e01f796df4fa8cfdb056708886f60b631ad492242a8e47307974fc305920 languageName: node linkType: hard @@ -266,36 +259,36 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.22.15, @babel/helper-member-expression-to-functions@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" +"@babel/helper-member-expression-to-functions@npm:^7.23.0, @babel/helper-member-expression-to-functions@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.24.5" dependencies: - "@babel/types": "npm:^7.23.0" - checksum: b810daddf093ffd0802f1429052349ed9ea08ef7d0c56da34ffbcdecbdafac86f95bdea2fe30e0e0e629febc7dd41b56cb5eacc10d1a44336d37b755dac31fa4 + "@babel/types": "npm:^7.24.5" + checksum: a3c0276a1ede8648a0e6fd86ad846cd57421d05eddfa29446b8b5a013db650462022b9ec1e65ea32c747d0542d729c80866830697f94fb12d603e87c51f080a5 languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-module-imports@npm:7.22.15" +"@babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.3": + version: 7.24.3 + resolution: "@babel/helper-module-imports@npm:7.24.3" dependencies: - "@babel/types": "npm:^7.22.15" - checksum: 4e0d7fc36d02c1b8c8b3006dfbfeedf7a367d3334a04934255de5128115ea0bafdeb3e5736a2559917f0653e4e437400d54542da0468e08d3cbc86d3bbfa8f30 + "@babel/types": "npm:^7.24.0" + checksum: 052c188adcd100f5e8b6ff0c9643ddaabc58b6700d3bbbc26804141ad68375a9f97d9d173658d373d31853019e65f62610239e3295cdd58e573bdcb2fded188d languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/helper-module-transforms@npm:7.23.3" +"@babel/helper-module-transforms@npm:^7.23.3, @babel/helper-module-transforms@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-module-transforms@npm:7.24.5" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-module-imports": "npm:^7.22.15" - "@babel/helper-simple-access": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/helper-validator-identifier": "npm:^7.22.20" + "@babel/helper-module-imports": "npm:^7.24.3" + "@babel/helper-simple-access": "npm:^7.24.5" + "@babel/helper-split-export-declaration": "npm:^7.24.5" + "@babel/helper-validator-identifier": "npm:^7.24.5" peerDependencies: "@babel/core": ^7.0.0 - checksum: 211e1399d0c4993671e8e5c2b25383f08bee40004ace5404ed4065f0e9258cc85d99c1b82fd456c030ce5cfd4d8f310355b54ef35de9924eabfc3dff1331d946 + checksum: 6e77d72f62b7e87abaea800ea0bccd4d54cde26485750969f5f493c032eb63251eb50c3522cace557781565d51c1d0c4bcc866407d24becfb109c18fb92c978d languageName: node linkType: hard @@ -308,32 +301,32 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.22.5 - resolution: "@babel/helper-plugin-utils@npm:7.22.5" - checksum: d2c4bfe2fa91058bcdee4f4e57a3f4933aed7af843acfd169cd6179fab8d13c1d636474ecabb2af107dc77462c7e893199aa26632bac1c6d7e025a17cbb9d20d +"@babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.24.5, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.24.5 + resolution: "@babel/helper-plugin-utils@npm:7.24.5" + checksum: 4ae40094e6a2f183281213344f4df60c66b16b19a2bc38d2bb11810a6dc0a0e7ec638957d0e433ff8b615775b8f3cd1b7edbf59440d1b50e73c389fc22913377 languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-replace-supers@npm:7.22.20" +"@babel/helper-replace-supers@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helper-replace-supers@npm:7.24.1" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-member-expression-to-functions": "npm:^7.22.15" + "@babel/helper-member-expression-to-functions": "npm:^7.23.0" "@babel/helper-optimise-call-expression": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0 - checksum: 6b0858811ad46873817c90c805015d63300e003c5a85c147a17d9845fa2558a02047c3cc1f07767af59014b2dd0fa75b503e5bc36e917f360e9b67bb6f1e79f4 + checksum: d39a3df7892b7c3c0e307fb229646168a9bd35e26a72080c2530729322600e8cff5f738f44a14860a2358faffa741b6a6a0d6749f113387b03ddbfa0ec10e1a0 languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-simple-access@npm:7.22.5" +"@babel/helper-simple-access@npm:^7.22.5, @babel/helper-simple-access@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-simple-access@npm:7.24.5" dependencies: - "@babel/types": "npm:^7.22.5" - checksum: f0cf81a30ba3d09a625fd50e5a9069e575c5b6719234e04ee74247057f8104beca89ed03e9217b6e9b0493434cedc18c5ecca4cea6244990836f1f893e140369 + "@babel/types": "npm:^7.24.5" + checksum: d96a0ab790a400f6c2dcbd9457b9ca74b9ba6d0f67ff9cd5bcc73792c8fbbd0847322a0dddbd8987dd98610ee1637c680938c7d83d3ffce7d06d7519d823d996 languageName: node linkType: hard @@ -346,26 +339,26 @@ __metadata: languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/helper-split-export-declaration@npm:7.22.6" +"@babel/helper-split-export-declaration@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-split-export-declaration@npm:7.24.5" dependencies: - "@babel/types": "npm:^7.22.5" - checksum: d83e4b623eaa9622c267d3c83583b72f3aac567dc393dda18e559d79187961cb29ae9c57b2664137fc3d19508370b12ec6a81d28af73a50e0846819cb21c6e44 + "@babel/types": "npm:^7.24.5" + checksum: d7a812d67d031a348f3fb0e6263ce2dbe6038f81536ba7fb16db385383bcd6542b71833194303bf6d3d0e4f7b6b584c9c8fae8772122e2ce68fc9bdf07f4135d languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/helper-string-parser@npm:7.23.4" - checksum: f348d5637ad70b6b54b026d6544bd9040f78d24e7ec245a0fc42293968181f6ae9879c22d89744730d246ce8ec53588f716f102addd4df8bbc79b73ea10004ac +"@babel/helper-string-parser@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helper-string-parser@npm:7.24.1" + checksum: 2f9bfcf8d2f9f083785df0501dbab92770111ece2f90d120352fda6dd2a7d47db11b807d111e6f32aa1ba6d763fe2dc6603d153068d672a5d0ad33ca802632b2 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-validator-identifier@npm:7.22.20" - checksum: dcad63db345fb110e032de46c3688384b0008a42a4845180ce7cd62b1a9c0507a1bed727c4d1060ed1a03ae57b4d918570259f81724aaac1a5b776056f37504e +"@babel/helper-validator-identifier@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-validator-identifier@npm:7.24.5" + checksum: 05f957229d89ce95a137d04e27f7d0680d84ae48b6ad830e399db0779341f7d30290f863a93351b4b3bde2166737f73a286ea42856bb07c8ddaa95600d38645c languageName: node linkType: hard @@ -376,34 +369,35 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/helpers@npm:7.23.9" +"@babel/helpers@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helpers@npm:7.24.5" dependencies: - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: f69fd0aca96a6fb8bd6dd044cd8a5c0f1851072d4ce23355345b9493c4032e76d1217f86b70df795e127553cf7f3fcd1587ede9d1b03b95e8b62681ca2165b87 + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.5" + "@babel/types": "npm:^7.24.5" + checksum: 0630b0223c3a9a34027ddc05b3bac54d68d5957f84e92d2d4814b00448a76e12f9188f9c85cfce2011696d82a8ffcbd8189da097c0af0181d32eb27eca34185e languageName: node linkType: hard -"@babel/highlight@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/highlight@npm:7.23.4" +"@babel/highlight@npm:^7.24.2": + version: 7.24.5 + resolution: "@babel/highlight@npm:7.24.5" dependencies: - "@babel/helper-validator-identifier": "npm:^7.22.20" + "@babel/helper-validator-identifier": "npm:^7.24.5" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" - checksum: fbff9fcb2f5539289c3c097d130e852afd10d89a3a08ac0b5ebebbc055cc84a4bcc3dcfed463d488cde12dd0902ef1858279e31d7349b2e8cee43913744bda33 + picocolors: "npm:^1.0.0" + checksum: e98047d3ad24608bfa596d000c861a2cc875af897427f2833b91a4e0d4cead07301a7ec15fa26093dcd61e036e2eed2db338ae54f93016fe0dc785fadc4159db languageName: node linkType: hard -"@babel/parser@npm:^7.14.0, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/parser@npm:7.23.9" +"@babel/parser@npm:^7.14.0, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/parser@npm:7.24.5" bin: parser: ./bin/babel-parser.js - checksum: 7df97386431366d4810538db4b9ec538f4377096f720c0591c7587a16f6810e62747e9fbbfa1ff99257fd4330035e4fb1b5b77c7bd3b97ce0d2e3780a6618975 + checksum: 8333a6ad5328bad34fa0e12bcee147c3345ea9a438c0909e7c68c6cfbea43c464834ffd7eabd1cbc1c62df0a558e22ffade9f5b29440833ba7b33d96a71f88c0 languageName: node linkType: hard @@ -445,36 +439,36 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-flow@npm:7.23.3" +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-flow@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8a5e1e8b6a3728a2c8fe6d70c09a43642e737d9c0485e1b041cd3a6021ef05376ec3c9137be3b118c622ba09b5770d26fdc525473f8d06d4ab9e46de2783dd0a + checksum: 618de04360a96111408abdaafaba2efbaef0d90faad029d50e0281eaad5d7c7bd2ce4420bbac0ee27ad84c2b7bbc3e48f782064f81ed5bc40c398637991004c7 languageName: node linkType: hard "@babel/plugin-syntax-import-assertions@npm:^7.20.0": - version: 7.23.3 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7db8b59f75667bada2293353bb66b9d5651a673b22c72f47da9f5c46e719142481601b745f9822212fd7522f92e26e8576af37116f85dae1b5e5967f80d0faab + checksum: 72f0340d73e037f0702c61670054e0af66ece7282c5c2f4ba8de059390fee502de282defdf15959cd9f71aa18dc5c5e4e7a0fde317799a0600c6c4e0a656d82b languageName: node linkType: hard "@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 563bb7599b868773f1c7c1d441ecc9bc53aeb7832775da36752c926fc402a1fa5421505b39e724f71eb217c13e4b93117e081cac39723b0e11dac4c897f33c3e + checksum: 6cec76fbfe6ca81c9345c2904d8d9a8a0df222f9269f0962ed6eb2eb8f3f10c2f15e993d1ef09dbaf97726bf1792b5851cf5bd9a769f966a19448df6be95d19a languageName: node linkType: hard @@ -490,193 +484,193 @@ __metadata: linkType: hard "@babel/plugin-transform-arrow-functions@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b128315c058f5728d29b0b78723659b11de88247ea4d0388f0b935cddf60a80c40b9067acf45cbbe055bd796928faef152a09d9e4a0695465aca4394d9f109ca + checksum: f44bfacf087dc21b422bab99f4e9344ee7b695b05c947dacae66de05c723ab9d91800be7edc1fa016185e8c819f3aca2b4a5f66d8a4d1e47d9bad80b8fa55b8e languageName: node linkType: hard "@babel/plugin-transform-block-scoped-functions@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 82c12a11277528184a979163de7189ceb00129f60dd930b0d5313454310bf71205f302fb2bf0430247161c8a22aaa9fb9eec1459f9f7468206422c191978fd59 + checksum: 6fbaa85f5204f34845dfc0bebf62fdd3ac5a286241c85651e59d426001e7a1785ac501f154e093e0b8ee49e1f51e3f8b06575a5ae8d4a9406d43e4816bf18c37 languageName: node linkType: hard "@babel/plugin-transform-block-scoping@npm:^7.0.0": - version: 7.23.4 - resolution: "@babel/plugin-transform-block-scoping@npm:7.23.4" + version: 7.24.5 + resolution: "@babel/plugin-transform-block-scoping@npm:7.24.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 83006804dddf980ab1bcd6d67bc381e24b58c776507c34f990468f820d0da71dba3697355ca4856532fa2eeb2a1e3e73c780f03760b5507a511cbedb0308e276 + checksum: 85997fc8179b7d26e8af30865aeb91789f3bc1f0cd5643ed25f25891ff9c071460ec1220599b19070b424a3b902422f682e9b02e515872540173eae2e25f760c languageName: node linkType: hard "@babel/plugin-transform-classes@npm:^7.0.0": - version: 7.23.8 - resolution: "@babel/plugin-transform-classes@npm:7.23.8" + version: 7.24.5 + resolution: "@babel/plugin-transform-classes@npm:7.24.5" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.20" - "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/helper-plugin-utils": "npm:^7.24.5" + "@babel/helper-replace-supers": "npm:^7.24.1" + "@babel/helper-split-export-declaration": "npm:^7.24.5" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 227ac5166501e04d9e7fbd5eda6869b084ffa4af6830ac12544ac6ea14953ca00eb1762b0df9349c0f6c8d2a799385910f558066cd0fb85b9ca437b1131a6043 + checksum: 4affcbb7cb01fa4764c7a4b534c30fd24a4b68e680a2d6e242dd7ca8726490f0f1426c44797deff84a38a162e0629718900c68d28daffe2b12adf5b4194156a7 languageName: node linkType: hard "@babel/plugin-transform-computed-properties@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-computed-properties@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/template": "npm:^7.22.15" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/template": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3ca8a006f8e652b58c21ecb84df1d01a73f0a96b1d216fd09a890b235dd90cb966b152b603b88f7e850ae238644b1636ce5c30b7c029c0934b43383932372e4a + checksum: 8292c508b656b7722e2c2ca0f6f31339852e3ed2b9b80f6e068a4010e961b431ca109ecd467fc906283f4b1574c1e7b1cb68d35a4dea12079d386c15ff7e0eac languageName: node linkType: hard "@babel/plugin-transform-destructuring@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" + version: 7.24.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.24.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 717e9a62c1b0c93c507f87b4eaf839ec08d3c3147f14d74ae240d8749488d9762a8b3950132be620a069bde70f4b3e4ee9867b226c973fcc40f3cdec975cde71 + checksum: 6a37953a95f04b335bf3e2118fb93f50dd9593c658d1b2f8918a380a2ee30f1b420139eccf7ec3873c86a8208527895fcf6b7e21c0e734a6ad6e5d5042eace4d languageName: node linkType: hard "@babel/plugin-transform-flow-strip-types@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-flow": "npm:^7.23.3" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/plugin-syntax-flow": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9ab627f9668fc1f95564b26bffd6706f86205960d9ccc168236752fbef65dbe10aa0ce74faae12f48bb3b72ec7f38ef2a78b4874c222c1e85754e981639f3b33 + checksum: e6aa9cbad0441867598d390d4df65bc8c6b797574673e4eedbdae0cc528e81e00f4b2cd38f7d138b0f04bcdd2540384a9812d5d76af5abfa06aee1c7fc20ca58 languageName: node linkType: hard "@babel/plugin-transform-for-of@npm:^7.0.0": - version: 7.23.6 - resolution: "@babel/plugin-transform-for-of@npm:7.23.6" + version: 7.24.1 + resolution: "@babel/plugin-transform-for-of@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 46681b6ab10f3ca2d961f50d4096b62ab5d551e1adad84e64be1ee23e72eb2f26a1e30e617e853c74f1349fffe4af68d33921a128543b6f24b6d46c09a3e2aec + checksum: e4bc92b1f334246e62d4bde079938df940794db564742034f6597f2e38bd426e11ae8c5670448e15dd6e45c462f2a9ab3fa87259bddf7c08553ffd9457fc2b2c languageName: node linkType: hard "@babel/plugin-transform-function-name@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-function-name@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-function-name@npm:7.24.1" dependencies: - "@babel/helper-compilation-targets": "npm:^7.22.15" + "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 89cb9747802118048115cf92a8f310752f02030549b26f008904990cbdc86c3d4a68e07ca3b5c46de8a46ed4df2cb576ac222c74c56de67253d2a3ddc2956083 + checksum: 65c1735ec3b5e43db9b5aebf3c16171c04b3050c92396b9e22dda0d2aaf51f43fdcf147f70a40678fd9a4ee2272a5acec4826e9c21bcf968762f4c184897ad75 languageName: node linkType: hard "@babel/plugin-transform-literals@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-literals@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8292106b106201464c2bfdd5c014fe6a9ca1c0256eb0a8031deb20081e21906fe68b156186f77d993c23eeab6d8d6f5f66e8895eec7ed97ce6de5dbcafbcd7f4 + checksum: a27cc7d565ee57b5a2bf136fa889c5c2f5988545ae7b3b2c83a7afe5dd37dfac80dca88b1c633c65851ce6af7d2095c04c01228657ce0198f918e64b5ccd01fa languageName: node linkType: hard "@babel/plugin-transform-member-expression-literals@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 687f24f3ec60b627fef6e87b9e2770df77f76727b9d5f54fa4c84a495bb24eb4a20f1a6240fa22d339d45aac5eaeb1b39882e941bfd00cf498f9c53478d1ec88 + checksum: 2af731d02aa4c757ef80c46df42264128cbe45bfd15e1812d1a595265b690a44ad036041c406a73411733540e1c4256d8174705ae6b8cfaf757fc175613993fd languageName: node linkType: hard "@babel/plugin-transform-modules-commonjs@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.1" dependencies: "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-simple-access": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5c8840c5c9ecba39367ae17c973ed13dbc43234147b77ae780eec65010e2a9993c5d717721b23e8179f7cf49decdd325c509b241d69cfbf92aa647a1d8d5a37d + checksum: efb3ea2047604a7eb44a9289311ebb29842fe6510ff8b66a77a60440448c65e1312a60dc48191ed98246bdbd163b5b6f3348a0669bcc0e3809e69c7c776b20fa languageName: node linkType: hard "@babel/plugin-transform-object-super@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-object-super@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-object-super@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.20" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-replace-supers": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a6856fd8c0afbe5b3318c344d4d201d009f4051e2f6ff6237ff2660593e93c5997a58772b13d639077c3e29ced3440247b29c496cd77b13af1e7559a70009775 + checksum: d30e6b9e59a707efd7ed524fc0a8deeea046011a6990250f2e9280516683138e2d13d9c52daf41d78407bdab0378aef7478326f2a15305b773d851cb6e106157 languageName: node linkType: hard "@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7": - version: 7.23.3 - resolution: "@babel/plugin-transform-parameters@npm:7.23.3" + version: 7.24.5 + resolution: "@babel/plugin-transform-parameters@npm:7.24.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a8d4cbe0f6ba68d158f5b4215c63004fc37a1fdc539036eb388a9792017c8496ea970a1932ccb929308f61e53dc56676ed01d8df6f42bc0a85c7fd5ba82482b7 + checksum: e08b8c46a24b1b21dde7783cb0aeb56ffe9ef6d6f1795649ce76273657158d3bfa5370c6594200ed7d371983b599c8e194b76108dffed9ab5746fe630ef2e8f5 languageName: node linkType: hard "@babel/plugin-transform-property-literals@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b2549f23f90cf276c2e3058c2225c3711c2ad1c417e336d3391199445a9776dd791b83be47b2b9a7ae374b40652d74b822387e31fa5267a37bf49c122e1a9747 + checksum: 3bf3e01f7bb8215a8b6d0081b6f86fea23e3a4543b619e059a264ede028bc58cdfb0acb2c43271271915a74917effa547bc280ac636a9901fa9f2fb45623f87e languageName: node linkType: hard "@babel/plugin-transform-react-display-name@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-react-display-name@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-react-display-name@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3aed142af7bd1aed1df2bdad91ed33ba1cdd5c3c67ce6eafba821ff72f129162a197ffb55f1eb1775af276abd5545934489a8257fef6c6665ddf253a4f39a939 + checksum: adf1a3cb0df8134533a558a9072a67e34127fd489dfe431c3348a86dd41f3e74861d5d5134bbb68f61a9cdb3f7e79b2acea1346be94ce4d3328a64e5a9e09be1 languageName: node linkType: hard @@ -696,85 +690,85 @@ __metadata: linkType: hard "@babel/plugin-transform-shorthand-properties@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c423c66fec0b6503f50561741754c84366ef9e9818442c8881fbaa90cc363fd137084b9431cdc00ed2f1fd8c8a1a5982c4a7e1f2af3769db4caf2ac7ea55d4f0 + checksum: 8273347621183aada3cf1f3019d8d5f29467ba13a75b72cb405bc7f23b7e05fd85f4edb1e4d9f0103153dddb61826a42dc24d466480d707f8932c1923a4c25fa languageName: node linkType: hard "@babel/plugin-transform-spread@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-spread@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-spread@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a348e4ae47e4ceeceb760506ec7bf835ccc18a2cf70ec74ebfbe41bc172fa2412b05b7d1b86836f8aee375e41a04ff20486074778d0e2d19d668b33dc52e9dbb + checksum: 50a0302e344546d57e5c9f4dea575f88e084352eeac4e9a3e238c41739eef2df1daf4a7ebbb3ccb7acd3447f6a5ce9938405f98bf5f5583deceb8257f5a673c9 languageName: node linkType: hard "@babel/plugin-transform-template-literals@npm:^7.0.0": - version: 7.23.3 - resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9b5f43788b9ffcb8f2b445a16b1aa40fcf23cb0446a4649445f098ec6b4cb751f243a535da623d59fefe48f4c40552f5621187a61811779076bab26863e3373d + checksum: f73bcda5488eb81c6e7a876498d9e6b72be32fca5a4d9db9053491a2d1300cd27b889b463fd2558f3cd5826a85ed00f61d81b234aa55cb5a0abf1b6fa1bd5026 languageName: node linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.5.5": - version: 7.23.9 - resolution: "@babel/runtime@npm:7.23.9" + version: 7.24.5 + resolution: "@babel/runtime@npm:7.24.5" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: e71205fdd7082b2656512cc98e647d9ea7e222e4fe5c36e9e5adc026446fcc3ba7b3cdff8b0b694a0b78bb85db83e7b1e3d4c56ef90726682b74f13249cf952d + checksum: 05730e43e8ba6550eae9fd4fb5e7d9d3cb91140379425abcb2a1ff9cebad518a280d82c4c4b0f57ada26a863106ac54a748d90c775790c0e2cd0ddd85ccdf346 languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/template@npm:7.23.9" +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/template@npm:7.24.0" dependencies: "@babel/code-frame": "npm:^7.23.5" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: 0e8b60119433787742bc08ae762bbd8d6755611c4cabbcb7627b292ec901a55af65d93d1c88572326069efb64136ef151ec91ffb74b2df7689bbab237030833a + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: 9d3dd8d22fe1c36bc3bdef6118af1f4b030aaf6d7d2619f5da203efa818a2185d717523486c111de8d99a8649ddf4bbf6b2a7a64962d8411cf6a8fa89f010e54 languageName: node linkType: hard -"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/traverse@npm:7.23.9" +"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/traverse@npm:7.24.5" dependencies: - "@babel/code-frame": "npm:^7.23.5" - "@babel/generator": "npm:^7.23.6" + "@babel/code-frame": "npm:^7.24.2" + "@babel/generator": "npm:^7.24.5" "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-hoist-variables": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/helper-split-export-declaration": "npm:^7.24.5" + "@babel/parser": "npm:^7.24.5" + "@babel/types": "npm:^7.24.5" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: d1615d1d02f04d47111a7ea4446a1a6275668ca39082f31d51f08380de9502e19862be434eaa34b022ce9a17dbb8f9e2b73a746c654d9575f3a680a7ffdf5630 + checksum: 3f22534bc2b2ed9208e55ef48af3b32939032b23cb9dc4037447cb108640df70bbb0b9fea86e9c58648949fdc2cb14e89aa79ffa3c62a5dd43459a52fe8c01d1 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.8.3": - version: 7.23.9 - resolution: "@babel/types@npm:7.23.9" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.5, @babel/types@npm:^7.8.3": + version: 7.24.5 + resolution: "@babel/types@npm:7.24.5" dependencies: - "@babel/helper-string-parser": "npm:^7.23.4" - "@babel/helper-validator-identifier": "npm:^7.22.20" + "@babel/helper-string-parser": "npm:^7.24.1" + "@babel/helper-validator-identifier": "npm:^7.24.5" to-fast-properties: "npm:^2.0.0" - checksum: edc7bb180ce7e4d2aea10c6972fb10474341ac39ba8fdc4a27ffb328368dfdfbf40fca18e441bbe7c483774500d5c05e222cec276c242e952853dcaf4eb884f7 + checksum: e1284eb046c5e0451b80220d1200e2327e0a8544a2fe45bb62c952e5fdef7099c603d2336b17b6eac3cc046b7a69bfbce67fe56e1c0ea48cd37c65cb88638f2a languageName: node linkType: hard @@ -824,9 +818,9 @@ __metadata: languageName: node linkType: hard -"@changesets/apply-release-plan@npm:^7.0.0": - version: 7.0.0 - resolution: "@changesets/apply-release-plan@npm:7.0.0" +"@changesets/apply-release-plan@npm:^7.0.1": + version: 7.0.1 + resolution: "@changesets/apply-release-plan@npm:7.0.1" dependencies: "@babel/runtime": "npm:^7.20.1" "@changesets/config": "npm:^3.0.0" @@ -841,7 +835,7 @@ __metadata: prettier: "npm:^2.7.1" resolve-from: "npm:^5.0.0" semver: "npm:^7.5.3" - checksum: 5f4c2d6b500d0ade51b31bc03b2475dd0bcaf3a31995f2ad953a6c3b05d3fb588568470bad3093d052f351ecdc6f8e2124d38941210361692b81bf62afbba7d7 + checksum: ca41f84a22a1fd25af4b195956afd393000139581a84528b6d21871e4ce417abf884ad2ef8a8ed7abb49031fed7cbb69226a158df36050aa70ed295636a42369 languageName: node linkType: hard @@ -869,11 +863,11 @@ __metadata: linkType: hard "@changesets/cli@npm:^2.27.1": - version: 2.27.1 - resolution: "@changesets/cli@npm:2.27.1" + version: 2.27.2 + resolution: "@changesets/cli@npm:2.27.2" dependencies: "@babel/runtime": "npm:^7.20.1" - "@changesets/apply-release-plan": "npm:^7.0.0" + "@changesets/apply-release-plan": "npm:^7.0.1" "@changesets/assemble-release-plan": "npm:^6.0.0" "@changesets/changelog-git": "npm:^0.2.0" "@changesets/config": "npm:^3.0.0" @@ -885,7 +879,7 @@ __metadata: "@changesets/pre": "npm:^2.0.0" "@changesets/read": "npm:^0.6.0" "@changesets/types": "npm:^6.0.0" - "@changesets/write": "npm:^0.3.0" + "@changesets/write": "npm:^0.3.1" "@manypkg/get-packages": "npm:^1.1.3" "@types/semver": "npm:^7.5.0" ansi-colors: "npm:^4.1.3" @@ -906,7 +900,7 @@ __metadata: tty-table: "npm:^4.1.5" bin: changeset: bin.js - checksum: c7adc35f22983be9b0f6a8e4c3bc7013208ddf341b637530b88267e78469f0b7af9e36b138bea9f2fe29bb7b44294cd08aa0301a5cba0c6a928824f11d024e04 + checksum: c2fd356b235bb27de0267389af38bca356d1c61892d0d3e114cec2e628aa6e7aadfe1828d9024b9c7d8005c3b968760ab4d781d4ce3a04309d5263d710341bec languageName: node linkType: hard @@ -1046,16 +1040,16 @@ __metadata: languageName: node linkType: hard -"@changesets/write@npm:^0.3.0": - version: 0.3.0 - resolution: "@changesets/write@npm:0.3.0" +"@changesets/write@npm:^0.3.1": + version: 0.3.1 + resolution: "@changesets/write@npm:0.3.1" dependencies: "@babel/runtime": "npm:^7.20.1" "@changesets/types": "npm:^6.0.0" fs-extra: "npm:^7.0.1" human-id: "npm:^1.0.2" prettier: "npm:^2.7.1" - checksum: 537f419d854946cce5694696b6a48ffee0ea1f7b5c97c5246836931886db18153c42a7dea1e74b0e8bf571fcded527e2f443ab362fdb1e4129bd95a61b2d0fe5 + checksum: 6c6ef4c12f93ae10706eea96fae73ab05fddeaa1870102681106a29e4e92c37be9643f214c56187141ab5cf3a4cccb4e8a59212d0fa6c7c26083c5d613878c9a languageName: node linkType: hard @@ -1122,12 +1116,12 @@ __metadata: linkType: hard "@commitlint/config-conventional@npm:^18.4.3": - version: 18.6.2 - resolution: "@commitlint/config-conventional@npm:18.6.2" + version: 18.6.3 + resolution: "@commitlint/config-conventional@npm:18.6.3" dependencies: "@commitlint/types": "npm:^18.6.1" conventional-changelog-conventionalcommits: "npm:^7.0.2" - checksum: ff4ccff3c2992c209703eb7d08f8e1c6d8471d4f0778f384dc0fef490cc023227f1b662f7136a301804d650518e00c7f859aa3eb1a156448f837b2a50206430d + checksum: 047f84598f80f7f793bdb0ffc9cf9059c199da6c5bc12ab87084fa933faee08c9290e3331f6f0d7e07c4f0ffb0b5c678e5036025aeabb8e74af296b9146c6354 languageName: node linkType: hard @@ -1476,12 +1470,10 @@ __metadata: linkType: hard "@defi-wonderland/smock@npm:^2.0.7": - version: 2.3.5 - resolution: "@defi-wonderland/smock@npm:2.3.5" + version: 2.4.0 + resolution: "@defi-wonderland/smock@npm:2.4.0" dependencies: - "@nomicfoundation/ethereumjs-evm": "npm:^1.0.0-rc.3" - "@nomicfoundation/ethereumjs-util": "npm:^8.0.0-rc.3" - "@nomicfoundation/ethereumjs-vm": "npm:^6.0.0-rc.3" + "@nomicfoundation/ethereumjs-util": "npm:^9.0.4" diff: "npm:^5.0.0" lodash.isequal: "npm:^4.5.0" lodash.isequalwith: "npm:^4.4.0" @@ -1493,8 +1485,8 @@ __metadata: "@ethersproject/abstract-signer": ^5 "@nomiclabs/hardhat-ethers": ^2 ethers: ^5 - hardhat: ^2 - checksum: c831563fe6607841d69f5936011398a492f760f52f9cb17626b2949ff3ef7668729acc4a3a944f739417b2d1b99bc6c83580f236189f27431224021c66ac1821 + hardhat: ^2.21.0 + checksum: 166dfb4b9e00c29466f0cf27dc2009e8139f9e6a31e42b74d55f5e6ac690d5f7137ae5acf1b8ff846ae46915608f6de921f2bef47a485088e57d951cac72b054 languageName: node linkType: hard @@ -1575,7 +1567,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" checksum: c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 @@ -1599,13 +1591,6 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.56.0": - version: 8.56.0 - resolution: "@eslint/js@npm:8.56.0" - checksum: 60b3a1cf240e2479cec9742424224465dc50e46d781da1b7f5ef240501b2d1202c225bd456207faac4b34a64f4765833345bc4ddffd00395e1db40fa8c426f5a - languageName: node - linkType: hard - "@eslint/js@npm:8.57.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" @@ -2617,9 +2602,9 @@ __metadata: linkType: hard "@fastify/busboy@npm:^2.0.0": - version: 2.1.0 - resolution: "@fastify/busboy@npm:2.1.0" - checksum: 7bb641080aac7cf01d88749ad331af10ba9ec3713ec07cabbe833908c75df21bd56249bb6173bdec07f5a41896b21e3689316f86684c06635da45f91ff4565a2 + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 languageName: node linkType: hard @@ -3009,6 +2994,45 @@ __metadata: languageName: unknown linkType: soft +"@graphprotocol/subgraph-service@workspace:packages/subgraph-service": + version: 0.0.0-use.local + resolution: "@graphprotocol/subgraph-service@workspace:packages/subgraph-service" + dependencies: + "@graphprotocol/contracts": "workspace:^7.0.0" + "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" + "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" + "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" + "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" + "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" + "@nomicfoundation/hardhat-verify": "npm:^2.0.0" + "@openzeppelin/contracts": "npm:^5.0.2" + "@typechain/ethers-v6": "npm:^0.5.0" + "@typechain/hardhat": "npm:^9.0.0" + "@types/chai": "npm:^4.2.0" + "@types/mocha": "npm:>=9.1.0" + "@types/node": "npm:>=16.0.0" + chai: "npm:^4.2.0" + eslint: "npm:^8.56.0" + eslint-graph-config: "workspace:^0.0.1" + ethers: "npm:^6.4.0" + hardhat: "npm:^2.20.1" + hardhat-contract-sizer: "npm:^2.10.0" + hardhat-gas-reporter: "npm:^1.0.8" + hardhat-storage-layout: "npm:^0.1.7" + lint-staged: "npm:^15.2.2" + prettier: "npm:^3.2.5" + prettier-plugin-solidity: "npm:^1.3.1" + solhint: "npm:^4.5.4" + solhint-graph-config: "workspace:^0.0.1" + solhint-plugin-graph: "file:node_modules/solhint-graph-config/plugin" + solidity-coverage: "npm:^0.8.0" + solidity-docgen: "npm:^0.6.0-beta.36" + ts-node: "npm:>=8.0.0" + typechain: "npm:^8.3.0" + typescript: "npm:^5.3.3" + languageName: unknown + linkType: soft + "@graphprotocol/token-distribution@workspace:packages/token-distribution": version: 0.0.0-use.local resolution: "@graphprotocol/token-distribution@workspace:packages/token-distribution" @@ -3921,7 +3945,7 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.13, @humanwhocodes/config-array@npm:^0.11.14": +"@humanwhocodes/config-array@npm:^0.11.14": version: 0.11.14 resolution: "@humanwhocodes/config-array@npm:0.11.14" dependencies: @@ -3940,9 +3964,9 @@ __metadata: linkType: hard "@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.2 - resolution: "@humanwhocodes/object-schema@npm:2.0.2" - checksum: 6fd83dc320231d71c4541d0244051df61f301817e9f9da9fd4cb7e44ec8aacbde5958c1665b0c419401ab935114fdf532a6ad5d4e7294b1af2f347dd91a6983f + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c languageName: node linkType: hard @@ -3960,14 +3984,14 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.3 - resolution: "@jridgewell/gen-mapping@npm:0.3.3" +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" dependencies: - "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/set-array": "npm:^1.2.1" "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 376fc11cf5a967318ba3ddd9d8e91be528eab6af66810a713c49b0c3f8dc67e9949452c51c38ab1b19aa618fb5e8594da5a249977e26b1e7fea1ee5a1fcacc74 + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb languageName: node linkType: hard @@ -3978,10 +4002,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: bc7ab4c4c00470de4e7562ecac3c0c84f53e7ee8a711e546d67c47da7febe7c45cd67d4d84ee3c9b2c05ae8e872656cdded8a707a283d30bd54fbc65aef821ab +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 languageName: node linkType: hard @@ -4002,13 +4026,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.22 - resolution: "@jridgewell/trace-mapping@npm:0.3.22" +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: "@jridgewell/resolve-uri": "npm:^3.1.0" "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 18cf19f88e2792c1c91515f2b629aae05f3cdbb2e60c3886e16e80725234ce26dd10144c4981c05d9366e7094498c0b4fe5c1a89f4a730d7376a4ba4af448149 + checksum: 3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 languageName: node linkType: hard @@ -4022,11 +4046,11 @@ __metadata: linkType: hard "@ljharb/through@npm:^2.3.9, @ljharb/through@npm:~2.3.9": - version: 2.3.12 - resolution: "@ljharb/through@npm:2.3.12" + version: 2.3.13 + resolution: "@ljharb/through@npm:2.3.13" dependencies: - call-bind: "npm:^1.0.5" - checksum: 7560aaef7b6ef88c16783ffde37278e2177c7f0f5427400059a8a7687b144dc711bf5b2347ab27e858a29f25e4b868d77c915c9614bc399b82b8123430614653 + call-bind: "npm:^1.0.7" + checksum: fb60b2fb2c674a674d8ebdb8972ccf52f8a62a9c1f5a2ac42557bc0273231c65d642aa2d7627cbb300766a25ae4642acd0f95fba2f8a1ff891086f0cb15807c3 languageName: node linkType: hard @@ -4115,6 +4139,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:^1.4.0": + version: 1.4.0 + resolution: "@noble/hashes@npm:1.4.0" + checksum: 8c3f005ee72e7b8f9cff756dfae1241485187254e3f743873e22073d63906863df5d4f13d441b7530ea614b7a093f0d889309f28b59850f33b66cb26a779a4a5 + languageName: node + linkType: hard + "@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0": version: 1.7.1 resolution: "@noble/secp256k1@npm:1.7.1" @@ -4149,116 +4180,67 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/edr-darwin-arm64@npm:0.2.1": - version: 0.2.1 - resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.2.1" - conditions: os=darwin & cpu=arm64 +"@nomicfoundation/edr-darwin-arm64@npm:0.3.8": + version: 0.3.8 + resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.3.8" + checksum: 98298ddd1dd1d513245be57dc89aad51a0ff6da2f1227c32085a8d49c0d3cbc311981539037c3030b652e1008253d6e72081f019d44cf47c6aa8f14175505554 languageName: node linkType: hard -"@nomicfoundation/edr-darwin-x64@npm:0.2.1": - version: 0.2.1 - resolution: "@nomicfoundation/edr-darwin-x64@npm:0.2.1" - conditions: os=darwin & cpu=x64 +"@nomicfoundation/edr-darwin-x64@npm:0.3.8": + version: 0.3.8 + resolution: "@nomicfoundation/edr-darwin-x64@npm:0.3.8" + checksum: a09fb0030b5dc7e202e7d42aae9f52af86090999a50cbfd9a4b3197b9c7fc8c7325c01d67fdd88b7037a8831e0e89ecf131155edf2c98c453c28f37c6da346f4 languageName: node linkType: hard -"@nomicfoundation/edr-linux-arm64-gnu@npm:0.2.1": - version: 0.2.1 - resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.2.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@nomicfoundation/edr-linux-arm64-musl@npm:0.2.1": - version: 0.2.1 - resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.2.1" - conditions: os=linux & cpu=arm64 & libc=musl +"@nomicfoundation/edr-linux-arm64-gnu@npm:0.3.8": + version: 0.3.8 + resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.3.8" + checksum: 20766169cb3425202a45812f01f9e49560f7cedfb797ea548759136fb8078d6179c11557b69fab8514e7f21a3f3f856dec0ba7a1584d5b431ac1440142f2012e languageName: node linkType: hard -"@nomicfoundation/edr-linux-x64-gnu@npm:0.2.1": - version: 0.2.1 - resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.2.1" - conditions: os=linux & cpu=x64 & libc=glibc +"@nomicfoundation/edr-linux-arm64-musl@npm:0.3.8": + version: 0.3.8 + resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.3.8" + checksum: dabd1ee8fc5f45382e8d58770138ba0cd6536915aa5f99459404d27dec046c76e427a0971ed705da83a6aa65e9272ac84b86b14313bd83ea4fea2c81c2d3f1e5 languageName: node linkType: hard -"@nomicfoundation/edr-linux-x64-musl@npm:0.2.1": - version: 0.2.1 - resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.2.1" - conditions: os=linux & cpu=x64 & libc=musl +"@nomicfoundation/edr-linux-x64-gnu@npm:0.3.8": + version: 0.3.8 + resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.3.8" + checksum: 060aaa197a8401b0142d07042e72159703c6e61ef866e98548c00ff2512deb75d179536d63a89ce6cd0866269d22b2823459be730c2766c95b73645f7d4d1afc languageName: node linkType: hard -"@nomicfoundation/edr-win32-arm64-msvc@npm:0.2.1": - version: 0.2.1 - resolution: "@nomicfoundation/edr-win32-arm64-msvc@npm:0.2.1" - conditions: os=win32 & cpu=arm64 +"@nomicfoundation/edr-linux-x64-musl@npm:0.3.8": + version: 0.3.8 + resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.3.8" + checksum: 49a7cb73b833a694744e2f5323d7268009eb1961e01ceb91f9137cf843e54571636b89418f204222d5f40b9122dd1c0e058b6efd368a438bc3bdb50205ea70d9 languageName: node linkType: hard -"@nomicfoundation/edr-win32-ia32-msvc@npm:0.2.1": - version: 0.2.1 - resolution: "@nomicfoundation/edr-win32-ia32-msvc@npm:0.2.1" - conditions: os=win32 & cpu=ia32 +"@nomicfoundation/edr-win32-x64-msvc@npm:0.3.8": + version: 0.3.8 + resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.3.8" + checksum: b7dfea0f01fd034ff6b48c44f75836f4dda84975f49c3655c97e76f2535945ed532756e7f2c22fa31035c4a29ce26d9546051f993ce553a8c4d570298525f55c languageName: node linkType: hard -"@nomicfoundation/edr-win32-x64-msvc@npm:0.2.1": - version: 0.2.1 - resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.2.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@nomicfoundation/edr@npm:^0.2.0": - version: 0.2.1 - resolution: "@nomicfoundation/edr@npm:0.2.1" - dependencies: - "@nomicfoundation/edr-darwin-arm64": "npm:0.2.1" - "@nomicfoundation/edr-darwin-x64": "npm:0.2.1" - "@nomicfoundation/edr-linux-arm64-gnu": "npm:0.2.1" - "@nomicfoundation/edr-linux-arm64-musl": "npm:0.2.1" - "@nomicfoundation/edr-linux-x64-gnu": "npm:0.2.1" - "@nomicfoundation/edr-linux-x64-musl": "npm:0.2.1" - "@nomicfoundation/edr-win32-arm64-msvc": "npm:0.2.1" - "@nomicfoundation/edr-win32-ia32-msvc": "npm:0.2.1" - "@nomicfoundation/edr-win32-x64-msvc": "npm:0.2.1" - dependenciesMeta: - "@nomicfoundation/edr-darwin-arm64": - optional: true - "@nomicfoundation/edr-darwin-x64": - optional: true - "@nomicfoundation/edr-linux-arm64-gnu": - optional: true - "@nomicfoundation/edr-linux-arm64-musl": - optional: true - "@nomicfoundation/edr-linux-x64-gnu": - optional: true - "@nomicfoundation/edr-linux-x64-musl": - optional: true - "@nomicfoundation/edr-win32-arm64-msvc": - optional: true - "@nomicfoundation/edr-win32-ia32-msvc": - optional: true - "@nomicfoundation/edr-win32-x64-msvc": - optional: true - checksum: e8956284c14fb47662c92368ed17d871a24876a27c2e6525c99fabfe41cadb7d6f403889802216691ba41c38ee055c9cd59befc48f7b8018002ac2d09d2da29b - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-block@npm:4.2.2": - version: 4.2.2 - resolution: "@nomicfoundation/ethereumjs-block@npm:4.2.2" +"@nomicfoundation/edr@npm:^0.3.7": + version: 0.3.8 + resolution: "@nomicfoundation/edr@npm:0.3.8" dependencies: - "@nomicfoundation/ethereumjs-common": "npm:3.1.2" - "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" - "@nomicfoundation/ethereumjs-trie": "npm:5.0.5" - "@nomicfoundation/ethereumjs-tx": "npm:4.1.2" - "@nomicfoundation/ethereumjs-util": "npm:8.0.6" - ethereum-cryptography: "npm:0.1.3" - checksum: 1c211294b3064d2bbfcf33b460438f01fb9cd77429314a90a5e2ffce5162019a384f4ae7d3825cfd386a140db191b251b475427562c53f85beffc786156f817e + "@nomicfoundation/edr-darwin-arm64": "npm:0.3.8" + "@nomicfoundation/edr-darwin-x64": "npm:0.3.8" + "@nomicfoundation/edr-linux-arm64-gnu": "npm:0.3.8" + "@nomicfoundation/edr-linux-arm64-musl": "npm:0.3.8" + "@nomicfoundation/edr-linux-x64-gnu": "npm:0.3.8" + "@nomicfoundation/edr-linux-x64-musl": "npm:0.3.8" + "@nomicfoundation/edr-win32-x64-msvc": "npm:0.3.8" + checksum: 56f4debf1d736783f498624fc2d647b075a56baedc6daf593a3e9627c99724e3fbf665245daa321a6f1db74694c11c2d70585d84fd13ecc90bf5632f503e1f04 languageName: node linkType: hard @@ -4277,40 +4259,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-block@npm:5.0.4": - version: 5.0.4 - resolution: "@nomicfoundation/ethereumjs-block@npm:5.0.4" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:4.0.4" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.4" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.4" - "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - ethereum-cryptography: "npm:0.1.3" - checksum: 9f8cb09f5910275188b1ad48611856c14131ad28022b958cc648f8e095fadd41002454a3396c612c2977691e59a8baad4f6adf07aab3f9c4b20b5f24c71dd7a0 - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-blockchain@npm:6.2.2": - version: 6.2.2 - resolution: "@nomicfoundation/ethereumjs-blockchain@npm:6.2.2" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:4.2.2" - "@nomicfoundation/ethereumjs-common": "npm:3.1.2" - "@nomicfoundation/ethereumjs-ethash": "npm:2.0.5" - "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" - "@nomicfoundation/ethereumjs-trie": "npm:5.0.5" - "@nomicfoundation/ethereumjs-util": "npm:8.0.6" - abstract-level: "npm:^1.0.3" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - level: "npm:^8.0.0" - lru-cache: "npm:^5.1.1" - memory-level: "npm:^1.0.0" - checksum: 6fe6e315900e1d6a29d59be41f566bdfd5ffdf82ab0fe081b1999dcc4eec3a248ab080d359a56e8cde4e473ca90349b0c50fa1ab707aa3e275fb1c478237e5e2 - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-blockchain@npm:7.0.1": version: 7.0.1 resolution: "@nomicfoundation/ethereumjs-blockchain@npm:7.0.1" @@ -4332,34 +4280,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-blockchain@npm:7.0.4": - version: 7.0.4 - resolution: "@nomicfoundation/ethereumjs-blockchain@npm:7.0.4" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:5.0.4" - "@nomicfoundation/ethereumjs-common": "npm:4.0.4" - "@nomicfoundation/ethereumjs-ethash": "npm:3.0.4" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.4" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.4" - "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - lru-cache: "npm:^10.0.0" - checksum: 47f73fea07880edb68b2614981226d9315a1a3dc673d0e09d68f0bc9ebd93cbfe6ccceb3cb56f777dc9b9386cff39878349fd7474d460a38478e7175b47788f9 - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-common@npm:3.1.2": - version: 3.1.2 - resolution: "@nomicfoundation/ethereumjs-common@npm:3.1.2" - dependencies: - "@nomicfoundation/ethereumjs-util": "npm:8.0.6" - crc-32: "npm:^1.2.0" - checksum: 90910630025b5bb503f36125c45395cc9f875ffdd8137a83e9c1d566678edcc8db40f8ce1dff9da1ef2c91c7d6b6d1fa75c41a9579a5d3a8f0ae669fcea244b1 - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-common@npm:4.0.1": version: 4.0.1 resolution: "@nomicfoundation/ethereumjs-common@npm:4.0.1" @@ -4379,20 +4299,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-ethash@npm:2.0.5": - version: 2.0.5 - resolution: "@nomicfoundation/ethereumjs-ethash@npm:2.0.5" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:4.2.2" - "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" - "@nomicfoundation/ethereumjs-util": "npm:8.0.6" - abstract-level: "npm:^1.0.3" - bigint-crypto-utils: "npm:^3.0.23" - ethereum-cryptography: "npm:0.1.3" - checksum: 7a90ef53ae4c1ac5a314c3447966fdbefcc96481ae3a05d59e881053350c55be7c841708c61c79a2af40bbb0181d6e0db42601592f17a4db1611b199d49e8544 - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-ethash@npm:3.0.1": version: 3.0.1 resolution: "@nomicfoundation/ethereumjs-ethash@npm:3.0.1" @@ -4407,35 +4313,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-ethash@npm:3.0.4": - version: 3.0.4 - resolution: "@nomicfoundation/ethereumjs-ethash@npm:3.0.4" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:5.0.4" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" - "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - bigint-crypto-utils: "npm:^3.2.2" - ethereum-cryptography: "npm:0.1.3" - checksum: c4cb846b656720910fe6d4a741ad0be93833c701456da983fa3a1795dda6faaa0ab4fb3130446e648db94b68358e1e4e30024d372fb40d3f65a40650af1a83bc - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-evm@npm:1.3.2, @nomicfoundation/ethereumjs-evm@npm:^1.0.0-rc.3": - version: 1.3.2 - resolution: "@nomicfoundation/ethereumjs-evm@npm:1.3.2" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:3.1.2" - "@nomicfoundation/ethereumjs-util": "npm:8.0.6" - "@types/async-eventemitter": "npm:^0.2.1" - async-eventemitter: "npm:^0.2.4" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - mcl-wasm: "npm:^0.7.1" - rustbn.js: "npm:~0.2.0" - checksum: 4aa14d7dce597a91c25bec5975022348741cebf6ed20cda028ddcbebe739ba2e6f4c879fa1ebe849bd5c78d3fd2443ebbb7d57e1fca5a98fbe88fc9ce15d9fd6 - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-evm@npm:2.0.1": version: 2.0.1 resolution: "@nomicfoundation/ethereumjs-evm@npm:2.0.1" @@ -4452,31 +4329,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-evm@npm:2.0.4": - version: 2.0.4 - resolution: "@nomicfoundation/ethereumjs-evm@npm:2.0.4" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:4.0.4" - "@nomicfoundation/ethereumjs-statemanager": "npm:2.0.4" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.4" - "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - "@types/debug": "npm:^4.1.9" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - rustbn-wasm: "npm:^0.2.0" - checksum: f21f4d0f1a74c903934d1c6c3abcd1342c9a812c71f142999c9f3f823119761cfdb4e89e829195fa446adb772b7f4b23ee9d55ed31bd92d5d03df438c3c29202 - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-rlp@npm:4.0.3": - version: 4.0.3 - resolution: "@nomicfoundation/ethereumjs-rlp@npm:4.0.3" - bin: - rlp: bin/rlp - checksum: 3e3c07abf53ff5832afbbdf3f3687e11e2e829699348eea1ae465084c72e024559d97e351e8f0fb27f32c7896633c7dd50b19d8de486e89cde777fd5447381cd - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-rlp@npm:5.0.1": version: 5.0.1 resolution: "@nomicfoundation/ethereumjs-rlp@npm:5.0.1" @@ -4495,21 +4347,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-statemanager@npm:1.0.5": - version: 1.0.5 - resolution: "@nomicfoundation/ethereumjs-statemanager@npm:1.0.5" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:3.1.2" - "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" - "@nomicfoundation/ethereumjs-trie": "npm:5.0.5" - "@nomicfoundation/ethereumjs-util": "npm:8.0.6" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - functional-red-black-tree: "npm:^1.0.1" - checksum: 4a05b7a86a1bbc8fd409416edf437d99d9d4498c438e086c30250cb3dc92ff00086f9ff959f469c72d46178e831104dc15f10465e27fbbf0ca97da27d6889a0c - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-statemanager@npm:2.0.1": version: 2.0.1 resolution: "@nomicfoundation/ethereumjs-statemanager@npm:2.0.1" @@ -4524,39 +4361,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-statemanager@npm:2.0.4": - version: 2.0.4 - resolution: "@nomicfoundation/ethereumjs-statemanager@npm:2.0.4" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:4.0.4" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.4" - "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - js-sdsl: "npm:^4.1.4" - lru-cache: "npm:^10.0.0" - peerDependencies: - "@nomicfoundation/ethereumjs-verkle": 0.0.2 - peerDependenciesMeta: - "@nomicfoundation/ethereumjs-verkle": - optional: true - checksum: 6190fef25b1099ede00edf69194903a5c5df18563adae3f053e2eafacc91eeab547d257e6aa47ce7ff5264533bb7bb0fbfcb18e75ea66376ac7305ad40dafbf4 - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-trie@npm:5.0.5": - version: 5.0.5 - resolution: "@nomicfoundation/ethereumjs-trie@npm:5.0.5" - dependencies: - "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" - "@nomicfoundation/ethereumjs-util": "npm:8.0.6" - ethereum-cryptography: "npm:0.1.3" - readable-stream: "npm:^3.6.0" - checksum: cab544fef4bcdc3acef1bfb4ee9f2fde44b66a22b2329bfd67515facdf115a318961f8bc0e38befded838e8fc513974f90f340b53a98b8469e54960b15cd857a - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-trie@npm:6.0.1": version: 6.0.1 resolution: "@nomicfoundation/ethereumjs-trie@npm:6.0.1" @@ -4570,32 +4374,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-trie@npm:6.0.4": - version: 6.0.4 - resolution: "@nomicfoundation/ethereumjs-trie@npm:6.0.4" - dependencies: - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" - "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - "@types/readable-stream": "npm:^2.3.13" - ethereum-cryptography: "npm:0.1.3" - lru-cache: "npm:^10.0.0" - readable-stream: "npm:^3.6.0" - checksum: b475d858f98037431c54c7177d0ce95133a81f1ee98a0b042136d65c88b7b5b3d86ba981cf78292776781d43d60daed44edf508ff4d416355bd00517e9142c9f - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-tx@npm:4.1.2": - version: 4.1.2 - resolution: "@nomicfoundation/ethereumjs-tx@npm:4.1.2" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:3.1.2" - "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" - "@nomicfoundation/ethereumjs-util": "npm:8.0.6" - ethereum-cryptography: "npm:0.1.3" - checksum: cb569c882d3ce922acff1a4238864f11109ac5a30dfa481b1ed9c7043c2b773f3a5fc88a3f4fefb62b11c448305296533f555f93d1d969a5abd3c2a13c80ed74 - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-tx@npm:5.0.1": version: 5.0.1 resolution: "@nomicfoundation/ethereumjs-tx@npm:5.0.1" @@ -4627,16 +4405,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-util@npm:8.0.6, @nomicfoundation/ethereumjs-util@npm:^8.0.0-rc.3": - version: 8.0.6 - resolution: "@nomicfoundation/ethereumjs-util@npm:8.0.6" - dependencies: - "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" - ethereum-cryptography: "npm:0.1.3" - checksum: 647006f4dfa962f61cec54c34ff9939468042cf762ff3b2cf80c8362558f21750348a3cda63dc9890b1cb2ba664f97dc4a892afca5f5d6f95b3ba4d56be5a33b - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-util@npm:9.0.1": version: 9.0.1 resolution: "@nomicfoundation/ethereumjs-util@npm:9.0.1" @@ -4648,7 +4416,7 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-util@npm:9.0.4": +"@nomicfoundation/ethereumjs-util@npm:9.0.4, @nomicfoundation/ethereumjs-util@npm:^9.0.4": version: 9.0.4 resolution: "@nomicfoundation/ethereumjs-util@npm:9.0.4" dependencies: @@ -4663,18 +4431,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-verkle@npm:0.0.2": - version: 0.0.2 - resolution: "@nomicfoundation/ethereumjs-verkle@npm:0.0.2" - dependencies: - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" - "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - lru-cache: "npm:^10.0.0" - rust-verkle-wasm: "npm:^0.0.1" - checksum: 7f6b3be75949adbdb8ecea4539a7c4cdce9ee1d76159b5d77f04a794e4e9de42570fc0491fc4769ecc3553547031996b16ec88ba18d68bf0e1b0d1149effb51b - languageName: node - linkType: hard - "@nomicfoundation/ethereumjs-vm@npm:7.0.1": version: 7.0.1 resolution: "@nomicfoundation/ethereumjs-vm@npm:7.0.1" @@ -4696,49 +4452,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-vm@npm:7.0.4": - version: 7.0.4 - resolution: "@nomicfoundation/ethereumjs-vm@npm:7.0.4" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:5.0.4" - "@nomicfoundation/ethereumjs-blockchain": "npm:7.0.4" - "@nomicfoundation/ethereumjs-common": "npm:4.0.4" - "@nomicfoundation/ethereumjs-evm": "npm:2.0.4" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" - "@nomicfoundation/ethereumjs-statemanager": "npm:2.0.4" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.4" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.4" - "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - checksum: a1893c8aa0fb8666bcb7371d8a57f641bd6079a79f9e08175aca214cd4a3d7eda3e54046a7d1b4c6cbc2356e80b1e6b44295e56df2d184ceb157eb67e54ee326 - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-vm@npm:^6.0.0-rc.3": - version: 6.4.2 - resolution: "@nomicfoundation/ethereumjs-vm@npm:6.4.2" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:4.2.2" - "@nomicfoundation/ethereumjs-blockchain": "npm:6.2.2" - "@nomicfoundation/ethereumjs-common": "npm:3.1.2" - "@nomicfoundation/ethereumjs-evm": "npm:1.3.2" - "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" - "@nomicfoundation/ethereumjs-statemanager": "npm:1.0.5" - "@nomicfoundation/ethereumjs-trie": "npm:5.0.5" - "@nomicfoundation/ethereumjs-tx": "npm:4.1.2" - "@nomicfoundation/ethereumjs-util": "npm:8.0.6" - "@types/async-eventemitter": "npm:^0.2.1" - async-eventemitter: "npm:^0.2.4" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - functional-red-black-tree: "npm:^1.0.1" - mcl-wasm: "npm:^0.7.1" - rustbn.js: "npm:~0.2.0" - checksum: 78e4b0ba20e8fa4ef112bae88f432746647ed48b41918b34855fe08269be3aaff84f95c08b6c61475fb70f24a28ba73612bd2bcd19b3c007c8bf9e11a43fa8e0 - languageName: node - linkType: hard - "@nomicfoundation/hardhat-chai-matchers@npm:^2.0.0": version: 2.0.6 resolution: "@nomicfoundation/hardhat-chai-matchers@npm:2.0.6" @@ -4757,26 +4470,26 @@ __metadata: linkType: hard "@nomicfoundation/hardhat-ethers@npm:^3.0.0": - version: 3.0.5 - resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.5" + version: 3.0.6 + resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.6" dependencies: debug: "npm:^4.1.1" lodash.isequal: "npm:^4.5.0" peerDependencies: ethers: ^6.1.0 hardhat: ^2.0.0 - checksum: 8253d107f956fbbfcb55b758cfd05159dcc77289bc115418626c3be32efeaced82c7dbfcb9d67ef0d9dccb6851e8588edeb228f325982ac3c61d7f605bcef009 + checksum: c7abe4234fae6422a357ef9e959cfe4183d5d7121d18e9f71b1659944419fde7d2a0290cd42fd5e85d855d8c83b86bbaed316f4950f0976015f941d958679a99 languageName: node linkType: hard "@nomicfoundation/hardhat-foundry@npm:^1.1.1": - version: 1.1.1 - resolution: "@nomicfoundation/hardhat-foundry@npm:1.1.1" + version: 1.1.2 + resolution: "@nomicfoundation/hardhat-foundry@npm:1.1.2" dependencies: chalk: "npm:^2.4.2" peerDependencies: hardhat: ^2.17.2 - checksum: e1f914bd705b93c9efc9f0b30eb178288504aede202ec00a9b03d3fa494baf175d0218ee678a328179b1ecfe18e16184888f671e8a03488e4ebfba0daf93a603 + checksum: 54cad1a0d1fc3c2137722a1b213dcbd18f77e63778bda9593052e6090868b2fb7bf8087c10404c6b181fa631e75f7e70490b5b97c3e4eba8f52ef449131dada0 languageName: node linkType: hard @@ -4817,8 +4530,8 @@ __metadata: linkType: hard "@nomicfoundation/hardhat-verify@npm:^2.0.0": - version: 2.0.4 - resolution: "@nomicfoundation/hardhat-verify@npm:2.0.4" + version: 2.0.7 + resolution: "@nomicfoundation/hardhat-verify@npm:2.0.7" dependencies: "@ethersproject/abi": "npm:^5.1.2" "@ethersproject/address": "npm:^5.0.2" @@ -4831,7 +4544,7 @@ __metadata: undici: "npm:^5.14.0" peerDependencies: hardhat: ^2.0.4 - checksum: 9003db2eb06aad8764473240d5ddb0cdef27b9bd7ed4586469aec8997d4556a1b1f11c537b567e3a30af694ac5d756dc9cccc52c14604e92d0dfdc964d12c6e8 + checksum: a6b3b89d3d2a594c44b50832840deefd3261b158bde774319322859077637f656c2e436af21ca3ce10d60eac78e3a1fbfea02abfe20a4729f97b4f30515524a6 languageName: node linkType: hard @@ -5003,24 +4716,24 @@ __metadata: linkType: hard "@npmcli/agent@npm:^2.0.0": - version: 2.2.1 - resolution: "@npmcli/agent@npm:2.2.1" + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" dependencies: agent-base: "npm:^7.1.0" http-proxy-agent: "npm:^7.0.0" https-proxy-agent: "npm:^7.0.1" lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.1" - checksum: 38ee5cbe8f3cde13be916e717bfc54fd1a7605c07af056369ff894e244c221e0b56b08ca5213457477f9bc15bca9e729d51a4788829b5c3cf296b3c996147f76 + socks-proxy-agent: "npm:^8.0.3" + checksum: 325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae languageName: node linkType: hard "@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" dependencies: semver: "npm:^7.3.5" - checksum: 162b4a0b8705cd6f5c2470b851d1dc6cd228c86d2170e1769d738c1fbb69a87160901411c3c035331e9e99db72f1f1099a8b734bf1637cc32b9a5be1660e4e1e + checksum: c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 languageName: node linkType: hard @@ -5053,28 +4766,28 @@ __metadata: linkType: hard "@openzeppelin/defender-admin-client@npm:^1.46.0": - version: 1.54.1 - resolution: "@openzeppelin/defender-admin-client@npm:1.54.1" + version: 1.54.2 + resolution: "@openzeppelin/defender-admin-client@npm:1.54.2" dependencies: - "@openzeppelin/defender-base-client": "npm:1.54.1" + "@openzeppelin/defender-base-client": "npm:1.54.2" axios: "npm:^1.4.0" ethers: "npm:^5.7.2" lodash: "npm:^4.17.19" node-fetch: "npm:^2.6.0" - checksum: b8d9b112bc9c477aca23a9b7249801eb997295302afe60e5c0883579f1ca1069a411ee7be9f972de52019bf59e0d36b7c11503ec09d4328c15899fa4bfdf6d6c + checksum: fff2a74f840168d65a7cc51992610c199eb0d2b54b63f84060dded898d2730e0b008b3f492251ec99a697d45e69987a203ee005b5912e51a2786407755e3e53f languageName: node linkType: hard -"@openzeppelin/defender-base-client@npm:1.54.1, @openzeppelin/defender-base-client@npm:^1.46.0": - version: 1.54.1 - resolution: "@openzeppelin/defender-base-client@npm:1.54.1" +"@openzeppelin/defender-base-client@npm:1.54.2, @openzeppelin/defender-base-client@npm:^1.46.0": + version: 1.54.2 + resolution: "@openzeppelin/defender-base-client@npm:1.54.2" dependencies: amazon-cognito-identity-js: "npm:^6.0.1" async-retry: "npm:^1.3.3" axios: "npm:^1.4.0" lodash: "npm:^4.17.19" node-fetch: "npm:^2.6.0" - checksum: 10a709dfc4fc55ad8d431b1c6d5e67129131d9763f3a91b9ec9ee63653cc8b0a8567809d04341bcb8615e0e20c917c2045a45693070ee9d83da11620338d874d + checksum: b30c5c5ed47ed0ff788025abd0cdfc816fdbd49065c221be7e760385e5cbf5b05488ed1cfb040c5cbe0a1ca6cc6af035dc88a6e5b2c09fb9ae4ae048493014bd languageName: node linkType: hard @@ -5128,8 +4841,8 @@ __metadata: linkType: hard "@openzeppelin/upgrades-core@npm:^1.27.0": - version: 1.32.5 - resolution: "@openzeppelin/upgrades-core@npm:1.32.5" + version: 1.33.1 + resolution: "@openzeppelin/upgrades-core@npm:1.33.1" dependencies: cbor: "npm:^9.0.0" chalk: "npm:^4.1.0" @@ -5141,7 +4854,7 @@ __metadata: solidity-ast: "npm:^0.4.51" bin: openzeppelin-upgrades-core: dist/cli/cli.js - checksum: aac654c46aadcfba55024a17d029edcbc529be2fae16fa8d4efc3fd8114cbb4d36d8974a62b1f34fcfa593b3b072898995034ff3bb6a921e00bcac669d8b1998 + checksum: 96fbed78baec7502709a38f5a00180750c24e96aa047a438b34c0d9895dc4ffed47b7e4fedab57cabfd733a3c079e78c98eec23a6df61f3fb4c8b2c9d096bcba languageName: node linkType: hard @@ -5166,15 +4879,15 @@ __metadata: linkType: hard "@peculiar/webcrypto@npm:^1.4.0": - version: 1.4.5 - resolution: "@peculiar/webcrypto@npm:1.4.5" + version: 1.4.6 + resolution: "@peculiar/webcrypto@npm:1.4.6" dependencies: "@peculiar/asn1-schema": "npm:^2.3.8" "@peculiar/json-schema": "npm:^1.1.12" pvtsutils: "npm:^1.3.5" tslib: "npm:^2.6.2" - webcrypto-core: "npm:^1.7.8" - checksum: 7cefe2a1329e3d41721268cf483dfd7a7a3bfbdaaba0ca8db9a538b49a51c6977f66f7f85e6f0c2162ff8d09540821bedc6766586d83c4be565b1af49ea81a86 + webcrypto-core: "npm:^1.7.9" + checksum: b9c80b1a0a3e3ebbf045bd5167fe99ec4a83b170e9aa15a5952a9138afc278210d772306dcc57101d9407c3f9c70dbf6bfb4d8b3f20996ad35c650bb0fe6a90c languageName: node linkType: hard @@ -5236,9 +4949,9 @@ __metadata: linkType: hard "@repeaterjs/repeater@npm:^3.0.4": - version: 3.0.5 - resolution: "@repeaterjs/repeater@npm:3.0.5" - checksum: e6e1aca2bbfe0b8e974bc5185a6839f9e78ec8acb96b6d6911a9dfc958443689f9bc38bcc6d554e6c8598f597f0151841aafbd1ee3ef16262ee93d18b2c1d4b5 + version: 3.0.6 + resolution: "@repeaterjs/repeater@npm:3.0.6" + checksum: c3915e2603927c7d6a9eb09673bc28fc49ab3a86947ec191a74663b33deebee2fcc4b03c31cc663ff27bd6db9e6c9487639b6935e265d601ce71b8c497f5f4a8 languageName: node linkType: hard @@ -5329,10 +5042,10 @@ __metadata: languageName: node linkType: hard -"@scure/base@npm:^1.1.1, @scure/base@npm:~1.1.0, @scure/base@npm:~1.1.4": - version: 1.1.5 - resolution: "@scure/base@npm:1.1.5" - checksum: 6eb07be0202fac74a57c79d0d00a45f6f7e57447010c1e3d90a4275d197829727b7abc54b248fc6f9bef9ae374f7be5ee9154dde5b5b73da773560bf17aa8504 +"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.4": + version: 1.1.6 + resolution: "@scure/base@npm:1.1.6" + checksum: 237a46a1f45391fc57719154f14295db936a0b1562ea3e182dd42d7aca082dbb7062a28d6c49af16a7e478b12dae8a0fe678d921ea5056bcc30238d29eb05c55 languageName: node linkType: hard @@ -5481,12 +5194,12 @@ __metadata: languageName: node linkType: hard -"@smithy/types@npm:^2.9.1": - version: 2.10.0 - resolution: "@smithy/types@npm:2.10.0" +"@smithy/types@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/types@npm:3.0.0" dependencies: - tslib: "npm:^2.5.0" - checksum: e82d7584e9b0d0c8fb6da059af6ebcb8af86dba7c1dc3e757b4998eca636f8dd697ea47701ff6c755789f0a63ef16f960fcc682ab2ca185cef4c6a6db5f022dc + tslib: "npm:^2.6.2" + checksum: 9f6eefa4f715a8f0bfd79787f82156b4785baaa1524496abe9fc3db96c36f7c782fb962353601d8bd2bba3b449d999d48a09b2b25405bfcd7fb5e1d1c935f1fb languageName: node linkType: hard @@ -5522,72 +5235,72 @@ __metadata: languageName: node linkType: hard -"@stylistic/eslint-plugin-js@npm:1.6.2, @stylistic/eslint-plugin-js@npm:^1.6.2": - version: 1.6.2 - resolution: "@stylistic/eslint-plugin-js@npm:1.6.2" +"@stylistic/eslint-plugin-js@npm:1.8.1, @stylistic/eslint-plugin-js@npm:^1.8.1": + version: 1.8.1 + resolution: "@stylistic/eslint-plugin-js@npm:1.8.1" dependencies: - "@types/eslint": "npm:^8.56.2" + "@types/eslint": "npm:^8.56.10" acorn: "npm:^8.11.3" escape-string-regexp: "npm:^4.0.0" eslint-visitor-keys: "npm:^3.4.3" espree: "npm:^9.6.1" peerDependencies: eslint: ">=8.40.0" - checksum: b74b08802cb888b64b2432e2fa7723c664d1b6a3ee5ad48f8caeef83eebcfcf291f92f967b65e79854d19a660e9428567247de402eeb9e59d9320f71c8c3881e + checksum: 0f5aa5f4afd0a0120a7675f5f0abb2d6fc5ee6197390613a69dcf510644964f1eb8ef8c060be2cf8c1885863a507bdf42e74954f886dca4102e49acfee50c577 languageName: node linkType: hard -"@stylistic/eslint-plugin-jsx@npm:1.6.2": - version: 1.6.2 - resolution: "@stylistic/eslint-plugin-jsx@npm:1.6.2" +"@stylistic/eslint-plugin-jsx@npm:1.8.1": + version: 1.8.1 + resolution: "@stylistic/eslint-plugin-jsx@npm:1.8.1" dependencies: - "@stylistic/eslint-plugin-js": "npm:^1.6.2" - "@types/eslint": "npm:^8.56.2" + "@stylistic/eslint-plugin-js": "npm:^1.8.1" + "@types/eslint": "npm:^8.56.10" estraverse: "npm:^5.3.0" - picomatch: "npm:^4.0.1" + picomatch: "npm:^4.0.2" peerDependencies: eslint: ">=8.40.0" - checksum: 882daa8ac9e3d7db5009dd6a9b4c406edab0ced233d3d49e6a9a0acb94ed68d8e5ec9a705c8925c7adc103ef9c057f33b74c32c7087f40a61c5b85f31f530fcc + checksum: 3bf9a543c1dc661bbe1fb939a46a8cc9543f8c2fbd53b39c05861e042e28c7483cf318152c5cbf1dbc6022e0e211375931f707c5d9a7a63f83a74f857f7b28b4 languageName: node linkType: hard -"@stylistic/eslint-plugin-plus@npm:1.6.2": - version: 1.6.2 - resolution: "@stylistic/eslint-plugin-plus@npm:1.6.2" +"@stylistic/eslint-plugin-plus@npm:1.8.1": + version: 1.8.1 + resolution: "@stylistic/eslint-plugin-plus@npm:1.8.1" dependencies: - "@types/eslint": "npm:^8.56.2" + "@types/eslint": "npm:^8.56.10" "@typescript-eslint/utils": "npm:^6.21.0" peerDependencies: eslint: "*" - checksum: 426e68c7edcb96d48f8ccb22c07fb5b7b26d85210494cfbafb6331d67496946ae3af841933059c31594d5f7c8b4e867de2345418d64a1885b102988d7679fae1 + checksum: 644cf23179b69df12bc798357ae0193eed2dd68a6e5e8dd11f5c8ecad0898eb58b5dac68fafd31c52b852b0800cb21ce457397d4d94cb60549311283540a2dd4 languageName: node linkType: hard -"@stylistic/eslint-plugin-ts@npm:1.6.2": - version: 1.6.2 - resolution: "@stylistic/eslint-plugin-ts@npm:1.6.2" +"@stylistic/eslint-plugin-ts@npm:1.8.1": + version: 1.8.1 + resolution: "@stylistic/eslint-plugin-ts@npm:1.8.1" dependencies: - "@stylistic/eslint-plugin-js": "npm:1.6.2" - "@types/eslint": "npm:^8.56.2" + "@stylistic/eslint-plugin-js": "npm:1.8.1" + "@types/eslint": "npm:^8.56.10" "@typescript-eslint/utils": "npm:^6.21.0" peerDependencies: eslint: ">=8.40.0" - checksum: 15e19abfce7ac77843d1331ee5cab74b405bdb5fb890acb071f6a7c21dc81b338d6482f227aa0af0b32faa61de25166b3a3253cec1df867f99ca105155e001cc + checksum: 1bd0bb220998b7ebd3a7e788b8bafc6674291160604825eea547cfd1a9530b02777ffe5775ddce932388044d7e932c9693be8c30fa989b03ee0ddf98ebc3d40d languageName: node linkType: hard "@stylistic/eslint-plugin@npm:^1.6.2": - version: 1.6.2 - resolution: "@stylistic/eslint-plugin@npm:1.6.2" + version: 1.8.1 + resolution: "@stylistic/eslint-plugin@npm:1.8.1" dependencies: - "@stylistic/eslint-plugin-js": "npm:1.6.2" - "@stylistic/eslint-plugin-jsx": "npm:1.6.2" - "@stylistic/eslint-plugin-plus": "npm:1.6.2" - "@stylistic/eslint-plugin-ts": "npm:1.6.2" - "@types/eslint": "npm:^8.56.2" + "@stylistic/eslint-plugin-js": "npm:1.8.1" + "@stylistic/eslint-plugin-jsx": "npm:1.8.1" + "@stylistic/eslint-plugin-plus": "npm:1.8.1" + "@stylistic/eslint-plugin-ts": "npm:1.8.1" + "@types/eslint": "npm:^8.56.10" peerDependencies: eslint: ">=8.40.0" - checksum: 353c852e1ace9b80bfe18a31b977723d79081397a12ebd14f34f2f5c2eeebc71a38ea17b65b9e3e3d8fcf09c14807822bf9123551e8df1785a3d1d1a6ee39c51 + checksum: 036e4e9dcc4674810bd36b22404234b6a34b79b762fe8275470916ce5a3d3b10e5ef9ba86fb786fcbb39b801a6757079915c1cdd57d07c88ed472fdff5192cc4 languageName: node linkType: hard @@ -5681,9 +5394,9 @@ __metadata: linkType: hard "@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: c176a2c1e1b16be120c328300ea910df15fb9a5277010116d26818272341a11483c5a80059389d04edacf6fd2d03d4687ad3660870fdd1cc0b7109e160adb220 + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c languageName: node linkType: hard @@ -5808,15 +5521,6 @@ __metadata: languageName: node linkType: hard -"@types/async-eventemitter@npm:^0.2.1": - version: 0.2.4 - resolution: "@types/async-eventemitter@npm:0.2.4" - dependencies: - "@types/events": "npm:*" - checksum: 2ae267eb3e959fe5aaf6d850ab06ac2e5b44f1a7e3e421250f3ebaa8a108f641e9050d042980bc35aab98d6fa5f1a62a43cfb7f377011ce9013ed62229327111 - languageName: node - linkType: hard - "@types/bn.js@npm:*, @types/bn.js@npm:^5.1.0, @types/bn.js@npm:^5.1.1": version: 5.1.5 resolution: "@types/bn.js@npm:5.1.5" @@ -5867,9 +5571,9 @@ __metadata: linkType: hard "@types/chai@npm:*, @types/chai@npm:^4.2.0, @types/chai@npm:^4.3.9": - version: 4.3.12 - resolution: "@types/chai@npm:4.3.12" - checksum: e5d952726d7f053812579962b07d0e4965c160c6a90bf466580e639cd3a1f1d30da1abbfe782383538a043a07908f9dfb823fa9065b37752a5f27d62234f44d5 + version: 4.3.16 + resolution: "@types/chai@npm:4.3.16" + checksum: 745d4a9be429d5d86a7ab26064610b8957fe12dd80e94dc7d0707cf3db1c889e3ffe0d73d69bb15e6d376bf4462a7a75e9d8fc1051750b5d656d6cfe459829b7 languageName: node linkType: hard @@ -5882,7 +5586,7 @@ __metadata: languageName: node linkType: hard -"@types/debug@npm:^4.1.10, @types/debug@npm:^4.1.7, @types/debug@npm:^4.1.8, @types/debug@npm:^4.1.9": +"@types/debug@npm:^4.1.10, @types/debug@npm:^4.1.7, @types/debug@npm:^4.1.8": version: 4.1.12 resolution: "@types/debug@npm:4.1.12" dependencies: @@ -5900,13 +5604,13 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:*, @types/eslint@npm:^8.56.2": - version: 8.56.3 - resolution: "@types/eslint@npm:8.56.3" +"@types/eslint@npm:*, @types/eslint@npm:^8.56.10": + version: 8.56.10 + resolution: "@types/eslint@npm:8.56.10" dependencies: "@types/estree": "npm:*" "@types/json-schema": "npm:*" - checksum: c5d81d0001fae211451b39d82b2bc8d7224b00d52a514954a33840a3665f36f3bde3be602eec6ad08d1fff59108052cd7746ced4237116bc3d8ac01a7cf5b5fe + checksum: 674349d6c342c3864d70f4d5a9965f96fb253801532752c8c500ad6a1c2e8b219e01ccff5dc8791dcb58b5483012c495708bb9f3ff929f5c9322b3da126c15d3 languageName: node linkType: hard @@ -5926,13 +5630,6 @@ __metadata: languageName: node linkType: hard -"@types/events@npm:*": - version: 3.0.3 - resolution: "@types/events@npm:3.0.3" - checksum: 3a56f8c51eb4ebc0d05dcadca0c6636c816acc10216ce36c976fad11e54a01f4bb979a07211355686015884753b37f17d74bfdc7aaf4ebb027c1e8a501c7b21d - languageName: node - linkType: hard - "@types/form-data@npm:0.0.33": version: 0.0.33 resolution: "@types/form-data@npm:0.0.33" @@ -5996,9 +5693,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.200": - version: 4.14.202 - resolution: "@types/lodash@npm:4.14.202" - checksum: 6064d43c8f454170841bd67c8266cc9069d9e570a72ca63f06bceb484cb4a3ee60c9c1f305c1b9e3a87826049fd41124b8ef265c4dd08b00f6766609c7fe9973 + version: 4.17.4 + resolution: "@types/lodash@npm:4.17.4" + checksum: 0124c64cb9fe7a0f78b6777955abd05ef0d97844d49118652eae45f8fa57bfb7f5a7a9bccc0b5a84c0a6dc09631042e4590cb665acb9d58dfd5e6543c75341ec languageName: node linkType: hard @@ -6070,37 +5767,19 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^20.11.19, @types/node@npm:^20.4.2, @types/node@npm:^20.8.7, @types/node@npm:^20.9.0": - version: 20.11.20 - resolution: "@types/node@npm:20.11.20" - dependencies: - undici-types: "npm:~5.26.4" - checksum: 8e8de211e6d54425c603388a9b5cc9c434101985d0a1c88aabbf65d10df2b1fccd71855c20e61ae8a75c7aea56cb0f64e722cf7914cff1247d0b62ce21996ac4 - languageName: node - linkType: hard - -"@types/node@npm:18.15.13": - version: 18.15.13 - resolution: "@types/node@npm:18.15.13" - checksum: 6e5f61c559e60670a7a8fb88e31226ecc18a21be103297ca4cf9848f0a99049dae77f04b7ae677205f2af494f3701b113ba8734f4b636b355477a6534dbb8ada - languageName: node - linkType: hard - -"@types/node@npm:>=12": - version: 20.11.30 - resolution: "@types/node@npm:20.11.30" +"@types/node@npm:*, @types/node@npm:>=12, @types/node@npm:>=16.0.0, @types/node@npm:^20.11.19, @types/node@npm:^20.4.2, @types/node@npm:^20.8.7, @types/node@npm:^20.9.0": + version: 20.12.12 + resolution: "@types/node@npm:20.12.12" dependencies: undici-types: "npm:~5.26.4" - checksum: 867cfaf969c6d8850d8d7304e7ab739898a50ecb1395b61ff2335644f5f48d7a46fbc4a14cee967aed65ec134b61a746edae70d1f32f11321ccf29165e3bc4e6 + checksum: f374b763c744e8f16e4f38cf6e2c0eef31781ec9228c9e43a6f267880fea420fab0a238b59f10a7cb3444e49547c5e3785787e371fc242307310995b21988812 languageName: node linkType: hard -"@types/node@npm:>=16.0.0": - version: 20.11.26 - resolution: "@types/node@npm:20.11.26" - dependencies: - undici-types: "npm:~5.26.4" - checksum: 2df81e4f109588c4c490f2c7d616a06d2b3b9298f217468134b80711af810c9a6017a59beb3e6b1c596eb9b6c5a39d33403b99179acb89006badfbc55f2468bb +"@types/node@npm:18.15.13": + version: 18.15.13 + resolution: "@types/node@npm:18.15.13" + checksum: 6e5f61c559e60670a7a8fb88e31226ecc18a21be103297ca4cf9848f0a99049dae77f04b7ae677205f2af494f3701b113ba8734f4b636b355477a6534dbb8ada languageName: node linkType: hard @@ -6162,17 +5841,10 @@ __metadata: languageName: node linkType: hard -"@types/qs@npm:^6.2.31, @types/qs@npm:^6.9.4": - version: 6.9.11 - resolution: "@types/qs@npm:6.9.11" - checksum: 657a50f05b694d6fd3916d24177cfa0f3b8b87d9deff4ffa4dddcb0b03583ebf7c47b424b8de400270fb9a5cc1e9cf790dd82c833c6935305851e7da8ede3ff5 - languageName: node - linkType: hard - -"@types/qs@npm:^6.9.7": - version: 6.9.13 - resolution: "@types/qs@npm:6.9.13" - checksum: 0e2dbfb6ee13657cd87742f92c94f1b7a70901452fce477fb9391928165766623581a3229b34fde3e832afbedee509de98984124f38b513ba072d6e193ea06cd +"@types/qs@npm:^6.2.31, @types/qs@npm:^6.9.4, @types/qs@npm:^6.9.7": + version: 6.9.15 + resolution: "@types/qs@npm:6.9.15" + checksum: 49c5ff75ca3adb18a1939310042d273c9fc55920861bd8e5100c8a923b3cda90d759e1a95e18334092da1c8f7b820084687770c83a1ccef04fb2c6908117c823 languageName: node linkType: hard @@ -6214,9 +5886,9 @@ __metadata: linkType: hard "@types/semver@npm:^7.5.0": - version: 7.5.7 - resolution: "@types/semver@npm:7.5.7" - checksum: fb72d8b86a7779650f14ae89542f1da2ab624adb8188d98754b1d29a2fe3d41f0348bf9435b60ad145df1812fd2a09b3256779aa23b532c199f3dee59619a1eb + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: 8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa languageName: node linkType: hard @@ -6270,9 +5942,9 @@ __metadata: linkType: hard "@types/validator@npm:^13.7.1, @types/validator@npm:^13.7.17": - version: 13.11.9 - resolution: "@types/validator@npm:13.11.9" - checksum: 856ebfcfe25d6c91a90235e0eb27302a737832530898195bbfb265da52ae7fe6d68f684942574f8818d3c262cae7a1de99f145dac73fc57217933af1bfc199cb + version: 13.11.10 + resolution: "@types/validator@npm:13.11.10" + checksum: fe63a20fa90d3e8c661d0ac5b5af162cdd387b9e8fd67f5a0a00ca308e4e2d7602467cc32ef3e2c979b737629fa9e2ff593d3946ee4f8667bbb80af0494b9c66 languageName: node linkType: hard @@ -6320,28 +5992,26 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/eslint-plugin@npm:7.0.2" +"@typescript-eslint/eslint-plugin@npm:7.9.0": + version: 7.9.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.9.0" dependencies: - "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/type-utils": "npm:7.0.2" - "@typescript-eslint/utils": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" - debug: "npm:^4.3.4" + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:7.9.0" + "@typescript-eslint/type-utils": "npm:7.9.0" + "@typescript-eslint/utils": "npm:7.9.0" + "@typescript-eslint/visitor-keys": "npm:7.9.0" graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.4" + ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" + ts-api-utils: "npm:^1.3.0" peerDependencies: "@typescript-eslint/parser": ^7.0.0 eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 76727ad48f01c1bb4ef37690e7ed12754930ce3a4bbe5dcd52f24d42f4625fc0b151db8189947f3956b4a09a562eb2da683ff65b57a13a15426eee3b680f80a5 + checksum: 5c0ded9cb2210c141d236075f01a86447bf497a5061773c3c64a90756264776b4c4df100f7588e36d34f727eca55afd52fe6696a3cbe2d1f131250934254603a languageName: node linkType: hard @@ -6370,21 +6040,21 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/parser@npm:7.0.2" +"@typescript-eslint/parser@npm:7.9.0": + version: 7.9.0 + resolution: "@typescript-eslint/parser@npm:7.9.0" dependencies: - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/typescript-estree": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.9.0" + "@typescript-eslint/types": "npm:7.9.0" + "@typescript-eslint/typescript-estree": "npm:7.9.0" + "@typescript-eslint/visitor-keys": "npm:7.9.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: acffdbea0bba24398ba8bd1ccf5b59438bc093e41d7a325019383094f39d676b5cf2f5963bfa5e332e54728e5b9e14be3984752ee91da6f0e1a3e0b613422d0e + checksum: 16ca04645429436d9b7986cddda979ef4d088f4223f4a69e04a369e0fd4852dd5ff3d4b99da2e43cddaa2b421b24ff42f275d87bd110ae2356bdd0e81c2534e7 languageName: node linkType: hard @@ -6416,13 +6086,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/scope-manager@npm:7.0.2" +"@typescript-eslint/scope-manager@npm:7.9.0": + version: 7.9.0 + resolution: "@typescript-eslint/scope-manager@npm:7.9.0" dependencies: - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" - checksum: 60241a0dbed7605133b6242d7fc172e8ee649e1033b8a179cebe3e21c60e0c08c12679fd37644cfef57c95a5d75a3927afc9d6365a5f9684c1d043285db23c66 + "@typescript-eslint/types": "npm:7.9.0" + "@typescript-eslint/visitor-keys": "npm:7.9.0" + checksum: 1ba6fc559a42a9b54e38c3ac2b6669efcff1a30292fb4e5fc8739c890a6c0f37d1a6aee1d115198f57c88e4f1776e95c1d7143de5cb5b970d5eb3023e97789dd languageName: node linkType: hard @@ -6443,20 +6113,20 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/type-utils@npm:7.0.2" +"@typescript-eslint/type-utils@npm:7.9.0": + version: 7.9.0 + resolution: "@typescript-eslint/type-utils@npm:7.9.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.0.2" - "@typescript-eslint/utils": "npm:7.0.2" + "@typescript-eslint/typescript-estree": "npm:7.9.0" + "@typescript-eslint/utils": "npm:7.9.0" debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.0.1" + ts-api-utils: "npm:^1.3.0" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: fa7957aa65cb0d7366c7c9be94e45cc2f1ebe9981cbf393054b505c6d555a01b2a2fe7cd1254d668f30183a275032f909186ce0b9f213f64b776bd7872144a6e + checksum: 775280fb179268f8bacd60e684d9d5a1c6a379646b082c7244bf2dfb7dd693053bd9efa473b71e10a86db69322b0a2cecf5598d019684930df50000bf3d70af0 languageName: node linkType: hard @@ -6467,10 +6137,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/types@npm:7.0.2" - checksum: 5f95266cc2cd0e6cf1239dcd36b53c7d98b01ba12c61947316f0d879df87b912b4d23f0796324e2ab0fb8780503a338da41a4695fa91d90392b6c6aca5239fa7 +"@typescript-eslint/types@npm:7.9.0": + version: 7.9.0 + resolution: "@typescript-eslint/types@npm:7.9.0" + checksum: d5f4a547dba4865ee2391bf06f2b3f8e8592a561976d2be35bb61ce340c7d1b7b4b25ac6ab5b9941813b465b9420bebb7b2179b1d71f6a83069feeb000b3558d languageName: node linkType: hard @@ -6493,22 +6163,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/typescript-estree@npm:7.0.2" +"@typescript-eslint/typescript-estree@npm:7.9.0": + version: 7.9.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.9.0" dependencies: - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/types": "npm:7.9.0" + "@typescript-eslint/visitor-keys": "npm:7.9.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 2f6795b05fced9f2e0887f6735aa1a0b20516952792e4be13cd94c5e56db8ad013ba27aeb56f89fedff8b7af587f854482f00aac75b418611c74e42169c29aeb + checksum: cfc3d2b7a5433c9a2989c7289bc72b49786993782801ad8ca5a07c651df457a67fbce13b120c86c34c03d56570a90e5cf4f3b8806349f103a3658f2366ec28ea languageName: node linkType: hard @@ -6529,20 +6199,17 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/utils@npm:7.0.2" +"@typescript-eslint/utils@npm:7.9.0": + version: 7.9.0 + resolution: "@typescript-eslint/utils@npm:7.9.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@types/json-schema": "npm:^7.0.12" - "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/typescript-estree": "npm:7.0.2" - semver: "npm:^7.5.4" + "@typescript-eslint/scope-manager": "npm:7.9.0" + "@typescript-eslint/types": "npm:7.9.0" + "@typescript-eslint/typescript-estree": "npm:7.9.0" peerDependencies: eslint: ^8.56.0 - checksum: b4ae9a36393c92b332e99d70219d1ee056271261f7433924db804e5f06d97ca60408b9c7a655afce8a851982e7153243a625d6cc76fea764f767f96c8f3e16da + checksum: cb99d6a950e7da0319bc7b923a82c52c0798a14e837afee51b2295cfbde02e0a2ac8e0b5904cd7bd01d1b376c7a6ad3739101b486feaf2517c8640024deb88c7 languageName: node linkType: hard @@ -6556,13 +6223,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/visitor-keys@npm:7.0.2" +"@typescript-eslint/visitor-keys@npm:7.9.0": + version: 7.9.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.9.0" dependencies: - "@typescript-eslint/types": "npm:7.0.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 4146d1ad6ce9374e6b5a75677fc709816bdc5fe324b1a857405f21dad23bb28c79cfd0555bc2a01c4af1d9e9ee81ff5e29ec41cc9d05b0b1101cc4264e7f21d1 + "@typescript-eslint/types": "npm:7.9.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 19181d8b9d2d7bc43d5c8884661cd9a86ac316392b8e590187cc507442093a1ba2bef0cc22181b8298d5dc9f455abb73cffa4663451bdf32b1b7fe12160c5c99 languageName: node linkType: hard @@ -6586,12 +6253,12 @@ __metadata: linkType: hard "@urql/core@npm:>=2.3.6": - version: 4.2.3 - resolution: "@urql/core@npm:4.2.3" + version: 5.0.3 + resolution: "@urql/core@npm:5.0.3" dependencies: - "@0no-co/graphql.web": "npm:^1.0.1" + "@0no-co/graphql.web": "npm:^1.0.5" wonka: "npm:^6.3.2" - checksum: 2e2e5f94365c5513c6eb8d996d0b60211ca5ef122bfb7e77a192f63f8f469689ead2b232b835ce47f8127d7c9a5c8083548cac05f3b4be4f01f723dbfb575da0 + checksum: 7ae9dfe4cbce949a0e2856f46e5c0f62a1bdb6eda6f24480468b62f886cc03131e77b578da4fbb9fe8c1622b7542fdd371b83e7883f01a296924b5dfbe738f10 languageName: node linkType: hard @@ -6872,12 +6539,12 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": - version: 7.1.0 - resolution: "agent-base@npm:7.1.0" +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" dependencies: debug: "npm:^4.3.4" - checksum: fc974ab57ffdd8421a2bc339644d312a9cca320c20c3393c9d8b1fd91731b9bbabdb985df5fc860f5b79d81c3e350daa3fcb31c5c07c0bb385aafc817df004ce + checksum: e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 languageName: node linkType: hard @@ -6930,27 +6597,27 @@ __metadata: linkType: hard "ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.11.0, ajv@npm:^8.12.0": - version: 8.12.0 - resolution: "ajv@npm:8.12.0" + version: 8.13.0 + resolution: "ajv@npm:8.13.0" dependencies: - fast-deep-equal: "npm:^3.1.1" + fast-deep-equal: "npm:^3.1.3" json-schema-traverse: "npm:^1.0.0" require-from-string: "npm:^2.0.2" - uri-js: "npm:^4.2.2" - checksum: ac4f72adf727ee425e049bc9d8b31d4a57e1c90da8d28bcd23d60781b12fcd6fc3d68db5df16994c57b78b94eed7988f5a6b482fd376dc5b084125e20a0a622e + uri-js: "npm:^4.4.1" + checksum: 14c6497b6f72843986d7344175a1aa0e2c35b1e7f7475e55bc582cddb765fca7e6bf950f465dc7846f817776d9541b706f4b5b3fbedd8dfdeb5fce6f22864264 languageName: node linkType: hard "amazon-cognito-identity-js@npm:^6.0.1": - version: 6.3.11 - resolution: "amazon-cognito-identity-js@npm:6.3.11" + version: 6.3.13 + resolution: "amazon-cognito-identity-js@npm:6.3.13" dependencies: "@aws-crypto/sha256-js": "npm:1.2.2" buffer: "npm:4.9.2" fast-base64-decode: "npm:^1.0.0" isomorphic-unfetch: "npm:^3.0.0" js-cookie: "npm:^2.2.1" - checksum: 4619e4c19770722ac243c98fb7d4aff35eb0b8f5a2db9ea31a5765f5c54deb7245e316e7e9f633f07d70520f13be157fc90c6139c5f0f2ecc59e5e7d16ee76b1 + checksum: 274785ef26573969bcc12d8f36d1f529da7fd50068ee52c7e3213c61549ce319db7c477c8c11633fc7f6bfe114fd93071228720742c0b091bafe18e7c13536a8 languageName: node linkType: hard @@ -6994,11 +6661,9 @@ __metadata: linkType: hard "ansi-escapes@npm:^6.2.0": - version: 6.2.0 - resolution: "ansi-escapes@npm:6.2.0" - dependencies: - type-fest: "npm:^3.0.0" - checksum: 3eec75deedd8b10192c5f98e4cd9715cc3ff268d33fc463c24b7d22446668bfcd4ad1803993ea89c0f51f88b5a3399572bacb7c8cb1a067fc86e189c5f3b0c7e + version: 6.2.1 + resolution: "ansi-escapes@npm:6.2.1" + checksum: a2c6f58b044be5f69662ee17073229b492daa2425a7fd99a665db6c22eab6e4ab42752807def7281c1c7acfed48f87f2362dda892f08c2c437f1b39c6b033103 languageName: node linkType: hard @@ -7261,15 +6926,16 @@ __metadata: linkType: hard "array.prototype.findlast@npm:^1.2.2": - version: 1.2.4 - resolution: "array.prototype.findlast@npm:1.2.4" + version: 1.2.5 + resolution: "array.prototype.findlast@npm:1.2.5" dependencies: - call-bind: "npm:^1.0.5" + call-bind: "npm:^1.0.7" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.3" + es-abstract: "npm:^1.23.2" es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" es-shim-unscopables: "npm:^1.0.2" - checksum: 4b5145a68ebaa00ef3d61de07c6694cad73d60763079f1e7662b948e5a167b5121b0c1e6feae8df1e42ead07c21699e25242b95cd5c48e094fd530b192aa4150 + checksum: ddc952b829145ab45411b9d6adcb51a8c17c76bf89c9dd64b52d5dffa65d033da8c076ed2e17091779e83bc892b9848188d7b4b33453c5565e65a92863cb2775 languageName: node linkType: hard @@ -7286,15 +6952,17 @@ __metadata: linkType: hard "array.prototype.reduce@npm:^1.0.6": - version: 1.0.6 - resolution: "array.prototype.reduce@npm:1.0.6" + version: 1.0.7 + resolution: "array.prototype.reduce@npm:1.0.7" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" es-array-method-boxes-properly: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" is-string: "npm:^1.0.7" - checksum: 4082757ff094c372d94e5b5c7f7f12dae11cfdf41dec7cd7a54a528f6a92155442bac38eddd23a82be7e8fd9c458b124163e791cb5841372d02b1ba964a92816 + checksum: 97aac907d7b15088d5b991bad79de96f95ea0d47a701a034e2dc816e0aabaed2fb401d7fe65ab6fda05eafa58319aa2d1bac404f515e162b81b3b61a51224db2 languageName: node linkType: hard @@ -7328,15 +6996,14 @@ __metadata: languageName: node linkType: hard -"asn1.js@npm:^5.2.0": - version: 5.4.1 - resolution: "asn1.js@npm:5.4.1" +"asn1.js@npm:^4.10.1": + version: 4.10.1 + resolution: "asn1.js@npm:4.10.1" dependencies: bn.js: "npm:^4.0.0" inherits: "npm:^2.0.1" minimalistic-assert: "npm:^1.0.0" - safer-buffer: "npm:^2.1.0" - checksum: b577232fa6069cc52bb128e564002c62b2b1fe47f7137bdcd709c0b8495aa79cee0f8cc458a831b2d8675900eea0d05781b006be5e1aa4f0ae3577a73ec20324 + checksum: afa7f3ab9e31566c80175a75b182e5dba50589dcc738aa485be42bdd787e2a07246a4b034d481861123cbe646a7656f318f4f1cad2e9e5e808a210d5d6feaa88 languageName: node linkType: hard @@ -7402,7 +7069,7 @@ __metadata: languageName: node linkType: hard -"async-eventemitter@npm:^0.2.2, async-eventemitter@npm:^0.2.4": +"async-eventemitter@npm:^0.2.2": version: 0.2.4 resolution: "async-eventemitter@npm:0.2.4" dependencies: @@ -7505,7 +7172,7 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.6, available-typed-arrays@npm:^1.0.7": +"available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" dependencies: @@ -7548,13 +7215,13 @@ __metadata: linkType: hard "axios@npm:^1.4.0, axios@npm:^1.5.1": - version: 1.6.7 - resolution: "axios@npm:1.6.7" + version: 1.6.8 + resolution: "axios@npm:1.6.8" dependencies: - follow-redirects: "npm:^1.15.4" + follow-redirects: "npm:^1.15.6" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: 131bf8e62eee48ca4bd84e6101f211961bf6a21a33b95e5dfb3983d5a2fe50d9fffde0b57668d7ce6f65063d3dc10f2212cbcb554f75cfca99da1c73b210358d + checksum: 0f22da6f490335479a89878bc7d5a1419484fbb437b564a80c34888fc36759ae4f56ea28d55a191695e5ed327f0bad56e7ff60fb6770c14d1be6501505d47ab9 languageName: node linkType: hard @@ -8326,7 +7993,7 @@ __metadata: languageName: node linkType: hard -"bigint-crypto-utils@npm:^3.0.23, bigint-crypto-utils@npm:^3.2.2": +"bigint-crypto-utils@npm:^3.0.23": version: 3.3.0 resolution: "bigint-crypto-utils@npm:3.3.0" checksum: 7d06fa01d63e8e9513eee629fe8a426993276b1bdca5aefd0eb3188cee7026334d29e801ef6187a5bc6105ebf26e6e79e6fab544a7da769ccf55b913e66d2a14 @@ -8348,9 +8015,9 @@ __metadata: linkType: hard "binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 languageName: node linkType: hard @@ -8651,7 +8318,7 @@ __metadata: languageName: node linkType: hard -"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": +"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" dependencies: @@ -8699,19 +8366,20 @@ __metadata: linkType: hard "browserify-sign@npm:^4.0.0": - version: 4.2.2 - resolution: "browserify-sign@npm:4.2.2" + version: 4.2.3 + resolution: "browserify-sign@npm:4.2.3" dependencies: bn.js: "npm:^5.2.1" browserify-rsa: "npm:^4.1.0" create-hash: "npm:^1.2.0" create-hmac: "npm:^1.1.7" - elliptic: "npm:^6.5.4" + elliptic: "npm:^6.5.5" + hash-base: "npm:~3.0" inherits: "npm:^2.0.4" - parse-asn1: "npm:^5.1.6" - readable-stream: "npm:^3.6.2" + parse-asn1: "npm:^5.1.7" + readable-stream: "npm:^2.3.8" safe-buffer: "npm:^5.2.1" - checksum: 4d1292e5c165d93455630515003f0e95eed9239c99e2d373920c5b56903d16296a3d23cd4bdc4d298f55ad9b83714a9e63bc4839f1166c303349a16e84e9b016 + checksum: 30c0eba3f5970a20866a4d3fbba2c5bd1928cd24f47faf995f913f1499214c6f3be14bb4d6ec1ab5c6cafb1eca9cb76ba1c2e1c04ed018370634d4e659c77216 languageName: node linkType: hard @@ -8900,8 +8568,8 @@ __metadata: linkType: hard "cacache@npm:^18.0.0": - version: 18.0.2 - resolution: "cacache@npm:18.0.2" + version: 18.0.3 + resolution: "cacache@npm:18.0.3" dependencies: "@npmcli/fs": "npm:^3.1.0" fs-minipass: "npm:^3.0.0" @@ -8915,7 +8583,7 @@ __metadata: ssri: "npm:^10.0.0" tar: "npm:^6.1.11" unique-filename: "npm:^3.0.0" - checksum: 7992665305cc251a984f4fdbab1449d50e88c635bc43bf2785530c61d239c61b349e5734461baa461caaee65f040ab14e2d58e694f479c0810cffd181ba5eabc + checksum: dfda92840bb371fb66b88c087c61a74544363b37a265023223a99965b16a16bbb87661fe4948718d79df6e0cc04e85e62784fbcf1832b2a5e54ff4c46fbb45b7 languageName: node linkType: hard @@ -9082,9 +8750,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30000844, caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001589 - resolution: "caniuse-lite@npm:1.0.30001589" - checksum: 20debfb949413f603011bc7dacaf050010778bc4f8632c86fafd1bd0c43180c95ae7c31f6c82348f6309e5e221934e327c3607a216e3f09640284acf78cd6d4d + version: 1.0.30001620 + resolution: "caniuse-lite@npm:1.0.30001620" + checksum: 3783117143fbdc98c1b91a579d0f2a7bcee7008f322ba7a2bf56a6c3d105400772c7ed8026840b4ea909ec7bf254bcc36532f2ce1b1a1240b00d0335da39b7ec languageName: node linkType: hard @@ -9139,13 +8807,13 @@ __metadata: linkType: hard "chai-as-promised@npm:^7.1.1": - version: 7.1.1 - resolution: "chai-as-promised@npm:7.1.1" + version: 7.1.2 + resolution: "chai-as-promised@npm:7.1.2" dependencies: check-error: "npm:^1.0.2" peerDependencies: - chai: ">= 2.1.2 < 5" - checksum: e25a602c3a8cd0b97ce6b0c7ddaaf4bd8517941da9f44dc65262c5268ea463f634dc495cdef6a21eaeffdb5022b6f4c3781027b8308273b7fff089c605abf6aa + chai: ">= 2.1.2 < 6" + checksum: ee20ed75296d8cbf828b2f3c9ad64627cee67b1a38b8e906ca59fe788fb6965ddb10f702ae66645ed88f15a905ade4f2d9f8540029e92e2d59b229c9f912273f languageName: node linkType: hard @@ -9501,15 +9169,15 @@ __metadata: linkType: hard "cli-table3@npm:^0.6.0, cli-table3@npm:^0.6.2": - version: 0.6.3 - resolution: "cli-table3@npm:0.6.3" + version: 0.6.5 + resolution: "cli-table3@npm:0.6.5" dependencies: "@colors/colors": "npm:1.5.0" string-width: "npm:^4.2.0" dependenciesMeta: "@colors/colors": optional: true - checksum: 39e580cb346c2eaf1bd8f4ff055ae644e902b8303c164a1b8894c0dc95941f92e001db51f49649011be987e708d9fa3183ccc2289a4d376a057769664048cc0c + checksum: d7cc9ed12212ae68241cc7a3133c52b844113b17856e11f4f81308acc3febcea7cc9fd298e70933e294dd642866b29fd5d113c2c098948701d0c35f09455de78 languageName: node linkType: hard @@ -10071,6 +9739,13 @@ __metadata: languageName: node linkType: hard +"cookie@npm:0.6.0": + version: 0.6.0 + resolution: "cookie@npm:0.6.0" + checksum: f2318b31af7a31b4ddb4a678d024514df5e705f9be5909a192d7f116cfb6d45cbacf96a473fa733faa95050e7cff26e7832bb3ef94751592f1387b71c8956686 + languageName: node + linkType: hard + "cookiejar@npm:^2.1.1": version: 2.1.4 resolution: "cookiejar@npm:2.1.4" @@ -10086,9 +9761,9 @@ __metadata: linkType: hard "core-js-pure@npm:^3.0.1": - version: 3.36.0 - resolution: "core-js-pure@npm:3.36.0" - checksum: 1c5ecb37451bcebaa449e36285d27c4c79d5ff24b8bfd44491ce661cfc12b5c56471c847d306d21a56894338d00abea4993a6f8e07c71d4e887d1f71e410d22e + version: 3.37.1 + resolution: "core-js-pure@npm:3.37.1" + checksum: 38200d08862b4ef2207af72a7525f7b9ac750f5e1d84ef27a3e314aefa69518179a9b732f51ebe35c3b38606d9fa4f686fcf6eff067615cc293a3b1c84041e74 languageName: node linkType: hard @@ -10364,13 +10039,13 @@ __metadata: languageName: node linkType: hard -"d@npm:1, d@npm:^1.0.1": - version: 1.0.1 - resolution: "d@npm:1.0.1" +"d@npm:1, d@npm:^1.0.1, d@npm:^1.0.2": + version: 1.0.2 + resolution: "d@npm:1.0.2" dependencies: - es5-ext: "npm:^0.10.50" - type: "npm:^1.0.1" - checksum: 1fedcb3b956a461f64d86b94b347441beff5cef8910b6ac4ec509a2c67eeaa7093660a98b26601ac91f91260238add73bdf25867a9c0cb783774642bc4c1523f + es5-ext: "npm:^0.10.64" + type: "npm:^2.7.2" + checksum: 3e6ede10cd3b77586c47da48423b62bed161bf1a48bdbcc94d87263522e22f5dfb0e678a6dba5323fdc14c5d8612b7f7eb9e7d9e37b2e2d67a7bf9f116dabe5a languageName: node linkType: hard @@ -10390,6 +10065,39 @@ __metadata: languageName: node linkType: hard +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 8984119e59dbed906a11fcfb417d7d861936f16697a0e7216fe2c6c810f6b5e8f4a5281e73f2c28e8e9259027190ac4a33e2a65fdd7fa86ac06b76e838918583 + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: b7d9e48a0cf5aefed9ab7d123559917b2d7e0d65531f43b2fd95b9d3a6b46042dd3fca597c42bba384e66b70d7ad66ff23932f8367b241f53d93af42cfe04ec2 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 21b0d2e53fd6e20cc4257c873bf6d36d77bd6185624b84076c0a1ddaa757b49aaf076254006341d35568e89f52eecd1ccb1a502cfb620f2beca04f48a6a62a8f + languageName: node + linkType: hard + "dataloader@npm:2.2.2, dataloader@npm:^2.2.2": version: 2.2.2 resolution: "dataloader@npm:2.2.2" @@ -10594,7 +10302,7 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1, define-data-property@npm:^1.1.2, define-data-property@npm:^1.1.4": +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" dependencies: @@ -10612,7 +10320,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -10748,15 +10456,15 @@ __metadata: linkType: hard "detect-port@npm:^1.3.0": - version: 1.5.1 - resolution: "detect-port@npm:1.5.1" + version: 1.6.1 + resolution: "detect-port@npm:1.6.1" dependencies: address: "npm:^1.0.1" debug: "npm:4" bin: detect: bin/detect-port.js detect-port: bin/detect-port.js - checksum: f2b204ad3a9f8e8b53fea35fcc97469f31a8e3e786a2f59fbc886397e33b5f130c5f964bf001b9a64d990047c3824f6a439308461ff19801df04ab48a754639e + checksum: 4ea9eb46a637cb21220dd0a62b6074792894fc77b2cacbc9de533d1908b2eedafa7bfd7547baaa2ac1e9c7ba7c289b34b17db896dca6da142f4fc6e2060eee17 languageName: node linkType: hard @@ -10927,14 +10635,14 @@ __metadata: linkType: hard "duplexify@npm:^4.1.1, duplexify@npm:^4.1.2": - version: 4.1.2 - resolution: "duplexify@npm:4.1.2" + version: 4.1.3 + resolution: "duplexify@npm:4.1.3" dependencies: end-of-stream: "npm:^1.4.1" inherits: "npm:^2.0.3" readable-stream: "npm:^3.1.1" - stream-shift: "npm:^1.0.0" - checksum: cacd09d8f1c58f92f83e17dffc14ece50415b32753446ed92046236a27a9e73cb914cda495d955ea12e0e615381082a511f20e219f48a06e84675c9d6950675b + stream-shift: "npm:^1.0.2" + checksum: 8a7621ae95c89f3937f982fe36d72ea997836a708471a75bb2a0eecde3330311b1e128a6dad510e0fd64ace0c56bff3484ed2e82af0e465600c82117eadfbda5 languageName: node linkType: hard @@ -10963,13 +10671,13 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.3.47, electron-to-chromium@npm:^1.4.668": - version: 1.4.681 - resolution: "electron-to-chromium@npm:1.4.681" - checksum: 5b2558dfb8bb82c20fb5fa1d9bbe06a3add47431dc3e1e4815e997be6ad387787047d9e534ed96839a9e7012520a5281c865158b09db41d10c029af003f05f94 + version: 1.4.774 + resolution: "electron-to-chromium@npm:1.4.774" + checksum: dc957ee574d14838abd16f48fb3e4bd069bf47807fe02144b850d4903265810e17abc5800a361941f787bd78692cf4f81eab70046a6757eb39e44c91ff520dd4 languageName: node linkType: hard -"elliptic@npm:6.5.4, elliptic@npm:^6.4.0, elliptic@npm:^6.5.2, elliptic@npm:^6.5.3, elliptic@npm:^6.5.4": +"elliptic@npm:6.5.4": version: 6.5.4 resolution: "elliptic@npm:6.5.4" dependencies: @@ -10984,6 +10692,21 @@ __metadata: languageName: node linkType: hard +"elliptic@npm:^6.4.0, elliptic@npm:^6.5.2, elliptic@npm:^6.5.3, elliptic@npm:^6.5.4, elliptic@npm:^6.5.5": + version: 6.5.5 + resolution: "elliptic@npm:6.5.5" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 3e591e93783a1b66f234ebf5bd3a8a9a8e063a75073a35a671e03e3b25253b6e33ac121f7efe9b8808890fffb17b40596cc19d01e6e8d1fa13b9a56ff65597c8 + languageName: node + linkType: hard + "emoji-regex@npm:^10.3.0": version: 10.3.0 resolution: "emoji-regex@npm:10.3.0" @@ -11115,17 +10838,21 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3": - version: 1.22.4 - resolution: "es-abstract@npm:1.22.4" +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" dependencies: array-buffer-byte-length: "npm:^1.0.1" arraybuffer.prototype.slice: "npm:^1.0.3" - available-typed-arrays: "npm:^1.0.6" + available-typed-arrays: "npm:^1.0.7" call-bind: "npm:^1.0.7" + data-view-buffer: "npm:^1.0.1" + data-view-byte-length: "npm:^1.0.1" + data-view-byte-offset: "npm:^1.0.0" es-define-property: "npm:^1.0.0" es-errors: "npm:^1.3.0" - es-set-tostringtag: "npm:^2.0.2" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.0.3" es-to-primitive: "npm:^1.2.1" function.prototype.name: "npm:^1.1.6" get-intrinsic: "npm:^1.2.4" @@ -11133,15 +10860,16 @@ __metadata: globalthis: "npm:^1.0.3" gopd: "npm:^1.0.1" has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.0.1" + has-proto: "npm:^1.0.3" has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.1" + hasown: "npm:^2.0.2" internal-slot: "npm:^1.0.7" is-array-buffer: "npm:^3.0.4" is-callable: "npm:^1.2.7" - is-negative-zero: "npm:^2.0.2" + is-data-view: "npm:^1.0.1" + is-negative-zero: "npm:^2.0.3" is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.2" + is-shared-array-buffer: "npm:^1.0.3" is-string: "npm:^1.0.7" is-typed-array: "npm:^1.1.13" is-weakref: "npm:^1.0.2" @@ -11149,18 +10877,18 @@ __metadata: object-keys: "npm:^1.1.1" object.assign: "npm:^4.1.5" regexp.prototype.flags: "npm:^1.5.2" - safe-array-concat: "npm:^1.1.0" + safe-array-concat: "npm:^1.1.2" safe-regex-test: "npm:^1.0.3" - string.prototype.trim: "npm:^1.2.8" - string.prototype.trimend: "npm:^1.0.7" - string.prototype.trimstart: "npm:^1.0.7" - typed-array-buffer: "npm:^1.0.1" - typed-array-byte-length: "npm:^1.0.0" - typed-array-byte-offset: "npm:^1.0.0" - typed-array-length: "npm:^1.0.4" + string.prototype.trim: "npm:^1.2.9" + string.prototype.trimend: "npm:^1.0.8" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.6" unbox-primitive: "npm:^1.0.2" - which-typed-array: "npm:^1.1.14" - checksum: dc332c3a010c5e7b77b7ea8a4532ac455fa02e7bcabf996a47447165bafa72d0d99967407d0cf5dbbb5fbbf87f53cd8b706608ec70953523b8cd2b831b9a9d64 + which-typed-array: "npm:^1.1.15" + checksum: d27e9afafb225c6924bee9971a7f25f20c314f2d6cb93a63cada4ac11dcf42040896a6c22e5fb8f2a10767055ed4ddf400be3b1eb12297d281726de470b75666 languageName: node linkType: hard @@ -11187,7 +10915,16 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.2": +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": version: 2.0.3 resolution: "es-set-tostringtag@npm:2.0.3" dependencies: @@ -11218,15 +10955,15 @@ __metadata: languageName: node linkType: hard -"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50, es5-ext@npm:^0.10.62, es5-ext@npm:~0.10.14": - version: 0.10.63 - resolution: "es5-ext@npm:0.10.63" +"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50, es5-ext@npm:^0.10.62, es5-ext@npm:^0.10.63, es5-ext@npm:^0.10.64, es5-ext@npm:~0.10.14": + version: 0.10.64 + resolution: "es5-ext@npm:0.10.64" dependencies: es6-iterator: "npm:^2.0.3" es6-symbol: "npm:^3.1.3" esniff: "npm:^2.0.1" next-tick: "npm:^1.1.0" - checksum: 1f20f9c73dc43cca9f1aa6908062f0a3d0bf3cee229a11a2cda6d4eca83583ceeb9b59ad36e951aa6e41ddd06d81aafac9a01de3d38a76b86f598a69ad0456bd + checksum: 4459b6ae216f3c615db086e02437bdfde851515a101577fd61b19f9b3c1ad924bab4d197981eb7f0ccb915f643f2fc10ff76b97a680e96cbb572d15a27acd9a3 languageName: node linkType: hard @@ -11249,16 +10986,16 @@ __metadata: linkType: hard "es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": - version: 3.1.3 - resolution: "es6-symbol@npm:3.1.3" + version: 3.1.4 + resolution: "es6-symbol@npm:3.1.4" dependencies: - d: "npm:^1.0.1" - ext: "npm:^1.1.2" - checksum: 22982f815f00df553a89f4fb74c5048fed85df598482b4bd38dbd173174247949c72982a7d7132a58b147525398400e5f182db59b0916cb49f1e245fb0e22233 + d: "npm:^1.0.2" + ext: "npm:^1.7.0" + checksum: 777bf3388db5d7919e09a0fd175aa5b8a62385b17cb2227b7a137680cba62b4d9f6193319a102642aa23d5840d38a62e4784f19cfa5be4a2210a3f0e9b23d15d languageName: node linkType: hard -"escalade@npm:^3.1.1": +"escalade@npm:^3.1.1, escalade@npm:^3.1.2": version: 3.1.2 resolution: "escalade@npm:3.1.2" checksum: 6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 @@ -11386,55 +11123,7 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.52.0, eslint@npm:^8.56.0": - version: 8.56.0 - resolution: "eslint@npm:8.56.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.56.0" - "@humanwhocodes/config-array": "npm:^0.11.13" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" - debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" - bin: - eslint: bin/eslint.js - checksum: 2be598f7da1339d045ad933ffd3d4742bee610515cd2b0d9a2b8b729395a01d4e913552fff555b559fccaefd89d7b37632825789d1b06470608737ae69ab43fb - languageName: node - linkType: hard - -"eslint@npm:^8.57.0": +"eslint@npm:^8.52.0, eslint@npm:^8.56.0, eslint@npm:^8.57.0": version: 8.57.0 resolution: "eslint@npm:8.57.0" dependencies: @@ -11745,11 +11434,11 @@ __metadata: linkType: hard "ethereum-bloom-filters@npm:^1.0.6": - version: 1.0.10 - resolution: "ethereum-bloom-filters@npm:1.0.10" + version: 1.1.0 + resolution: "ethereum-bloom-filters@npm:1.1.0" dependencies: - js-sha3: "npm:^0.8.0" - checksum: ae70b0b0b6d83beece65638a634818f0bd1d00d7a4447e17b83797f4d8db4c49491b57119c5ed081c008fb766bb8f230f3603187fd6649d58a8cf3b9aa91549c + "@noble/hashes": "npm:^1.4.0" + checksum: 54b0b7a1fdf12fe02fc8f605f213d11ea026111b9d2af79ff58e8319c904d9d6cee77c62fe70bee62c4d0c7952caf58ebaf47a889d9e4199cf4da1a361a87b53 languageName: node linkType: hard @@ -12206,8 +11895,8 @@ __metadata: linkType: hard "ethers@npm:^6.4.0": - version: 6.11.1 - resolution: "ethers@npm:6.11.1" + version: 6.12.1 + resolution: "ethers@npm:6.12.1" dependencies: "@adraffy/ens-normalize": "npm:1.10.1" "@noble/curves": "npm:1.2.0" @@ -12216,7 +11905,7 @@ __metadata: aes-js: "npm:4.0.0-beta.5" tslib: "npm:2.4.0" ws: "npm:8.5.0" - checksum: 97a920e0244ba6cd1622b58a448c87f26dad20bad242777abb2e583d045bf7752218477bd7367ba6518c2a5e2b16030afff15e87b705526d0ea667498c27ac89 + checksum: 7686e1efdb0a831578f35d69188783c225de5a6fbb1b422327bc45cee04d49a2707e73c9342a6a5eb2870ce35668c71372737439ec3993d31d83f4a0e2446cc7 languageName: node linkType: hard @@ -12463,7 +12152,7 @@ __metadata: languageName: node linkType: hard -"express@npm:4.18.2, express@npm:^4.14.0": +"express@npm:4.18.2": version: 4.18.2 resolution: "express@npm:4.18.2" dependencies: @@ -12502,16 +12191,16 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.18.1": - version: 4.18.3 - resolution: "express@npm:4.18.3" +"express@npm:^4.14.0, express@npm:^4.18.1": + version: 4.19.2 + resolution: "express@npm:4.19.2" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" body-parser: "npm:1.20.2" content-disposition: "npm:0.5.4" content-type: "npm:~1.0.4" - cookie: "npm:0.5.0" + cookie: "npm:0.6.0" cookie-signature: "npm:1.0.6" debug: "npm:2.6.9" depd: "npm:2.0.0" @@ -12537,11 +12226,11 @@ __metadata: type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 0b9eeafbac549e3c67d92d083bf1773e358359f41ad142b92121935c6348d29079b75054555b3f62de39263fffc8ba06898b09fdd3e213e28e714c03c5d9f44c + checksum: e82e2662ea9971c1407aea9fc3c16d6b963e55e3830cd0ef5e00b533feda8b770af4e3be630488ef8a752d7c75c4fcefb15892868eeaafe7353cb9e3e269fdcb languageName: node linkType: hard -"ext@npm:^1.1.2": +"ext@npm:^1.7.0": version: 1.7.0 resolution: "ext@npm:1.7.0" dependencies: @@ -12728,9 +12417,9 @@ __metadata: linkType: hard "fast-redact@npm:^3.0.0": - version: 3.3.0 - resolution: "fast-redact@npm:3.3.0" - checksum: d81562510681e9ba6404ee5d3838ff5257a44d2f80937f5024c099049ff805437d0fae0124458a7e87535cc9dcf4de305bb075cab8f08d6c720bbc3447861b4e + version: 3.5.0 + resolution: "fast-redact@npm:3.5.0" + checksum: 7e2ce4aad6e7535e0775bf12bd3e4f2e53d8051d8b630e0fa9e67f68cb0b0e6070d2f7a94b1d0522ef07e32f7c7cda5755e2b677a6538f1e9070ca053c42343a languageName: node linkType: hard @@ -13059,17 +12748,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.12.1, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.15.4": - version: 1.15.5 - resolution: "follow-redirects@npm:1.15.5" - peerDependenciesMeta: - debug: - optional: true - checksum: 418d71688ceaf109dfd6f85f747a0c75de30afe43a294caa211def77f02ef19865b547dfb73fde82b751e1cc507c06c754120b848fe5a7400b0a669766df7615 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.14.9": +"follow-redirects@npm:^1.12.1, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.6": version: 1.15.6 resolution: "follow-redirects@npm:1.15.6" peerDependenciesMeta: @@ -13484,7 +13163,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" dependencies: @@ -13704,17 +13383,17 @@ __metadata: linkType: hard "glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": - version: 10.3.10 - resolution: "glob@npm:10.3.10" + version: 10.3.15 + resolution: "glob@npm:10.3.15" dependencies: foreground-child: "npm:^3.1.0" - jackspeak: "npm:^2.3.5" + jackspeak: "npm:^2.3.6" minimatch: "npm:^9.0.1" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry: "npm:^1.10.1" + minipass: "npm:^7.0.4" + path-scurry: "npm:^1.11.0" bin: glob: dist/esm/bin.mjs - checksum: 13d8a1feb7eac7945f8c8480e11cd4a44b24d26503d99a8d8ac8d5aefbf3e9802a2b6087318a829fad04cb4e829f25c5f4f1110c68966c498720dd261c7e344d + checksum: cda748ddc181b31b3df9548c0991800406d5cc3b3f8110e37a8751ec1e39f37cdae7d7782d5422d7df92775121cdf00599992dff22f7ff1260344843af227c2b languageName: node linkType: hard @@ -13808,11 +13487,12 @@ __metadata: linkType: hard "globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" dependencies: - define-properties: "npm:^1.1.3" - checksum: 0db6e9af102a5254630351557ac15e6909bc7459d3e3f6b001e59fe784c96d31108818f032d9095739355a88467459e6488ff16584ee6250cd8c27dec05af4b0 + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 languageName: node linkType: hard @@ -13991,11 +13671,11 @@ __metadata: linkType: hard "graphql-ws@npm:^5.12.1": - version: 5.15.0 - resolution: "graphql-ws@npm:5.15.0" + version: 5.16.0 + resolution: "graphql-ws@npm:5.16.0" peerDependencies: graphql: ">=0.11 <=16" - checksum: 4fcd93ed75261681b1def8cd96d1db0fc650586b145325b3fc134ab9c27ed48fbedad3e8261e3f3df65758a332d0420b8c60e13abb1ee8329ef624e312b61ccc + checksum: 5e538c3460ca997a1634bd0f64236d8d7aa6ac75c58aba549b49953faf0dd2497f4fa43eedb0bc82cfff50426c7ce47682a670d2571fd7f3af5dcf00911c9e1b languageName: node linkType: hard @@ -14049,7 +13729,7 @@ __metadata: languageName: node linkType: hard -"handlebars@npm:^4.0.1": +"handlebars@npm:^4.0.1, handlebars@npm:^4.7.7": version: 4.7.8 resolution: "handlebars@npm:4.7.8" dependencies: @@ -14103,7 +13783,7 @@ __metadata: languageName: node linkType: hard -"hardhat-contract-sizer@npm:^2.0.1, hardhat-contract-sizer@npm:^2.0.3": +"hardhat-contract-sizer@npm:^2.0.1, hardhat-contract-sizer@npm:^2.0.3, hardhat-contract-sizer@npm:^2.10.0": version: 2.10.0 resolution: "hardhat-contract-sizer@npm:2.10.0" dependencies: @@ -14218,114 +13898,57 @@ __metadata: prompt-sync: "npm:^4.2.0" peerDependencies: "@nomiclabs/hardhat-ethers": ^2.1.1 - ethers: ^5.0.0 - hardhat: ^2.0.0 - checksum: 5cf999c706f2baa4b03898ebed5ce302ff202156b2637434748072b6250f0967e1d580c8b07b52068558adb2eba178c6aff1543877672cbd57dd34a987e46604 - languageName: node - linkType: hard - -"hardhat-storage-layout@npm:0.1.6": - version: 0.1.6 - resolution: "hardhat-storage-layout@npm:0.1.6" - dependencies: - console-table-printer: "npm:^2.9.0" - peerDependencies: - hardhat: ^2.0.3 - checksum: f88e6aaedf65281c161d4b70b94417812e3ca36d7af39d0f9bf0711d62bf0c282c41d148cad8a99964824a8a19f0eb6861666bf04244ff8f4df3c292d51fc443 - languageName: node - linkType: hard - -"hardhat-tracer@npm:^1.0.0-alpha.6": - version: 1.3.0 - resolution: "hardhat-tracer@npm:1.3.0" - dependencies: - ethers: "npm:^5.6.1" - peerDependencies: - chalk: 4.x - ethers: 5.x - hardhat: 2.x - checksum: 488d8e704cc5ddcd9d536b33d1dc8a126b129ee24c8ff3b345bfc14703b251621ab606de2587a2aef6ae9b23bdf051d83997c7adb002add357a097a9deca3ecb - languageName: node - linkType: hard - -"hardhat@npm:^2.20.1": - version: 2.21.0 - resolution: "hardhat@npm:2.21.0" - dependencies: - "@ethersproject/abi": "npm:^5.1.2" - "@metamask/eth-sig-util": "npm:^4.0.0" - "@nomicfoundation/edr": "npm:^0.2.0" - "@nomicfoundation/ethereumjs-common": "npm:4.0.4" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.4" - "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - "@nomicfoundation/solidity-analyzer": "npm:^0.1.0" - "@sentry/node": "npm:^5.18.1" - "@types/bn.js": "npm:^5.1.0" - "@types/lru-cache": "npm:^5.1.0" - adm-zip: "npm:^0.4.16" - aggregate-error: "npm:^3.0.0" - ansi-escapes: "npm:^4.3.0" - boxen: "npm:^5.1.2" - chalk: "npm:^2.4.2" - chokidar: "npm:^3.4.0" - ci-info: "npm:^2.0.0" - debug: "npm:^4.1.1" - enquirer: "npm:^2.3.0" - env-paths: "npm:^2.2.0" - ethereum-cryptography: "npm:^1.0.3" - ethereumjs-abi: "npm:^0.6.8" - find-up: "npm:^2.1.0" - fp-ts: "npm:1.19.3" - fs-extra: "npm:^7.0.1" - glob: "npm:7.2.0" - immutable: "npm:^4.0.0-rc.12" - io-ts: "npm:1.10.4" - keccak: "npm:^3.0.2" - lodash: "npm:^4.17.11" - mnemonist: "npm:^0.38.0" - mocha: "npm:^10.0.0" - p-map: "npm:^4.0.0" - raw-body: "npm:^2.4.1" - resolve: "npm:1.17.0" - semver: "npm:^6.3.0" - solc: "npm:0.7.3" - source-map-support: "npm:^0.5.13" - stacktrace-parser: "npm:^0.1.10" - tsort: "npm:0.0.1" - undici: "npm:^5.14.0" - uuid: "npm:^8.3.2" - ws: "npm:^7.4.6" + ethers: ^5.0.0 + hardhat: ^2.0.0 + checksum: 5cf999c706f2baa4b03898ebed5ce302ff202156b2637434748072b6250f0967e1d580c8b07b52068558adb2eba178c6aff1543877672cbd57dd34a987e46604 + languageName: node + linkType: hard + +"hardhat-storage-layout@npm:0.1.6": + version: 0.1.6 + resolution: "hardhat-storage-layout@npm:0.1.6" + dependencies: + console-table-printer: "npm:^2.9.0" peerDependencies: - ts-node: "*" - typescript: "*" - peerDependenciesMeta: - ts-node: - optional: true - typescript: - optional: true - bin: - hardhat: internal/cli/bootstrap.js - checksum: d7c887d147ddbd0792b5e64abfd8200c233a1815b91af908f68b167067e109f9ab6e0892d130137a745c6139bae691cee62a8e993290d4fc0a2a733e5dcce324 + hardhat: ^2.0.3 + checksum: f88e6aaedf65281c161d4b70b94417812e3ca36d7af39d0f9bf0711d62bf0c282c41d148cad8a99964824a8a19f0eb6861666bf04244ff8f4df3c292d51fc443 + languageName: node + linkType: hard + +"hardhat-storage-layout@npm:^0.1.7": + version: 0.1.7 + resolution: "hardhat-storage-layout@npm:0.1.7" + dependencies: + console-table-printer: "npm:^2.9.0" + peerDependencies: + hardhat: ^2.0.3 + checksum: 257b52a079183953d079ae221d05551391ff57adbad1ba033a3ccfa1b9df495ddd29285e67a7d03da484aa69f65850feb64a9bd7e37f53c549efd3833ed8b38c + languageName: node + linkType: hard + +"hardhat-tracer@npm:^1.0.0-alpha.6": + version: 1.3.0 + resolution: "hardhat-tracer@npm:1.3.0" + dependencies: + ethers: "npm:^5.6.1" + peerDependencies: + chalk: 4.x + ethers: 5.x + hardhat: 2.x + checksum: 488d8e704cc5ddcd9d536b33d1dc8a126b129ee24c8ff3b345bfc14703b251621ab606de2587a2aef6ae9b23bdf051d83997c7adb002add357a097a9deca3ecb languageName: node linkType: hard -"hardhat@npm:^2.6.1, hardhat@npm:^2.6.4": - version: 2.20.1 - resolution: "hardhat@npm:2.20.1" +"hardhat@npm:^2.20.1, hardhat@npm:^2.6.1, hardhat@npm:^2.6.4": + version: 2.22.4 + resolution: "hardhat@npm:2.22.4" dependencies: "@ethersproject/abi": "npm:^5.1.2" "@metamask/eth-sig-util": "npm:^4.0.0" - "@nomicfoundation/ethereumjs-block": "npm:5.0.4" - "@nomicfoundation/ethereumjs-blockchain": "npm:7.0.4" + "@nomicfoundation/edr": "npm:^0.3.7" "@nomicfoundation/ethereumjs-common": "npm:4.0.4" - "@nomicfoundation/ethereumjs-evm": "npm:2.0.4" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" - "@nomicfoundation/ethereumjs-statemanager": "npm:2.0.4" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.4" "@nomicfoundation/ethereumjs-tx": "npm:5.0.4" "@nomicfoundation/ethereumjs-util": "npm:9.0.4" - "@nomicfoundation/ethereumjs-verkle": "npm:0.0.2" - "@nomicfoundation/ethereumjs-vm": "npm:7.0.4" "@nomicfoundation/solidity-analyzer": "npm:^0.1.0" "@sentry/node": "npm:^5.18.1" "@types/bn.js": "npm:^5.1.0" @@ -14373,7 +13996,7 @@ __metadata: optional: true bin: hardhat: internal/cli/bootstrap.js - checksum: e27f1fc6b016d7ceb62795ff47384a02ad61722cdd2ab55c91d7ff2ce31973a1ea5e462431c7033ca53e66e4722c3597664b0ebaac70104622d227e94b4fb3e0 + checksum: b9f51c40bc0d392dedb7fe866da30115a9c120b89eafe1f0afcda3cf1b379d7163e6a33a9b7a8ba78df795b477c2fd2d83ace8eb992668271b610786e320d5b7 languageName: node linkType: hard @@ -14489,7 +14112,7 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.1, has-property-descriptors@npm:^1.0.2": +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": version: 1.0.2 resolution: "has-property-descriptors@npm:1.0.2" dependencies: @@ -14512,7 +14135,7 @@ __metadata: languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1, has-tostringtag@npm:^1.0.2": +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" dependencies: @@ -14578,6 +14201,16 @@ __metadata: languageName: node linkType: hard +"hash-base@npm:~3.0": + version: 3.0.4 + resolution: "hash-base@npm:3.0.4" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + checksum: a13357dccb3827f0bb0b56bf928da85c428dc8670f6e4a1c7265e4f1653ce02d69030b40fd01b0f1d218a995a066eea279cded9cec72d207b593bcdfe309c2f0 + languageName: node + linkType: hard + "hash-it@npm:^6.0.0": version: 6.0.0 resolution: "hash-it@npm:6.0.0" @@ -14605,12 +14238,12 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0, hasown@npm:^2.0.1": - version: 2.0.1 - resolution: "hasown@npm:2.0.1" +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" dependencies: function-bind: "npm:^1.1.2" - checksum: 9e27e70e8e4204f4124c8f99950d1ba2b1f5174864fd39ff26da190f9ea6488c1b3927dcc64981c26d1f637a971783c9489d62c829d393ea509e6f1ba20370bb + checksum: 3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 languageName: node linkType: hard @@ -14923,7 +14556,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.2.4": +"ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1": version: 5.3.1 resolution: "ignore@npm:5.3.1" checksum: 703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd @@ -14952,9 +14585,9 @@ __metadata: linkType: hard "immutable@npm:^4.0.0-rc.12": - version: 4.3.5 - resolution: "immutable@npm:4.3.5" - checksum: 63d2d7908241a955d18c7822fd2215b6e89ff5a1a33cc72cd475b013cbbdef7a705aa5170a51ce9f84a57f62fdddfaa34e7b5a14b33d8a43c65cc6a881d6e894 + version: 4.3.6 + resolution: "immutable@npm:4.3.6" + checksum: 7d0952a768b4fadcee47230ed86dc9505a4517095eceaf5a47e65288571c42400c6e4a2ae21eca4eda957cb7bc50720213135b62cf6a181639111f8acae128c3 languageName: node linkType: hard @@ -15418,6 +15051,15 @@ __metadata: languageName: node linkType: hard +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: "npm:^1.1.13" + checksum: a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d + languageName: node + linkType: hard + "is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" @@ -15635,7 +15277,7 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": +"is-negative-zero@npm:^2.0.3": version: 2.0.3 resolution: "is-negative-zero@npm:2.0.3" checksum: bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e @@ -15767,7 +15409,7 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "is-shared-array-buffer@npm:1.0.3" dependencies: @@ -16116,7 +15758,7 @@ __metadata: languageName: node linkType: hard -"jackspeak@npm:^2.3.5": +"jackspeak@npm:^2.3.6": version: 2.3.6 resolution: "jackspeak@npm:2.3.6" dependencies: @@ -17314,10 +16956,10 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.0, lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.2.0 - resolution: "lru-cache@npm:10.2.0" - checksum: c9847612aa2daaef102d30542a8d6d9b2c2bb36581c1bf0dc3ebf5e5f3352c772a749e604afae2e46873b930a9e9523743faac4e5b937c576ab29196774712ee +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.2.2 + resolution: "lru-cache@npm:10.2.2" + checksum: 402d31094335851220d0b00985084288136136992979d0e015f0f1697e15d1c86052d7d53ae86b614e5b058425606efffc6969a31a091085d7a2b80a8a1e26d6 languageName: node linkType: hard @@ -17385,8 +17027,8 @@ __metadata: linkType: hard "make-fetch-happen@npm:^13.0.0": - version: 13.0.0 - resolution: "make-fetch-happen@npm:13.0.0" + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" dependencies: "@npmcli/agent": "npm:^2.0.0" cacache: "npm:^18.0.0" @@ -17397,9 +17039,10 @@ __metadata: minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" promise-retry: "npm:^2.0.1" ssri: "npm:^10.0.0" - checksum: 43b9f6dcbc6fe8b8604cb6396957c3698857a15ba4dbc38284f7f0e61f248300585ef1eb8cc62df54e9c724af977e45b5cdfd88320ef7f53e45070ed3488da55 + checksum: df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e languageName: node linkType: hard @@ -17827,12 +17470,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:*, minimatch@npm:9.0.3, minimatch@npm:^9.0.1": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" +"minimatch@npm:*, minimatch@npm:^9.0.1, minimatch@npm:^9.0.4": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + checksum: 2c16f21f50e64922864e560ff97c587d15fd491f65d92a677a344e970fe62aafdbeafe648965fa96d33c061b4d0eabfe0213466203dd793367e7f28658cf6414 languageName: node linkType: hard @@ -17854,6 +17497,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + "minimatch@npm:^5.0.1": version: 5.1.6 resolution: "minimatch@npm:5.1.6" @@ -17898,8 +17550,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^3.0.0": - version: 3.0.4 - resolution: "minipass-fetch@npm:3.0.4" + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" dependencies: encoding: "npm:^0.1.13" minipass: "npm:^7.0.3" @@ -17908,7 +17560,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 1b63c1f3313e88eeac4689f1b71c9f086598db9a189400e3ee960c32ed89e06737fa23976c9305c2d57464fb3fcdc12749d3378805c9d6176f5569b0d0ee8a75 + checksum: 9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b languageName: node linkType: hard @@ -17965,10 +17617,10 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": - version: 7.0.4 - resolution: "minipass@npm:7.0.4" - checksum: 6c7370a6dfd257bf18222da581ba89a5eaedca10e158781232a8b5542a90547540b4b9b7e7f490e4cda43acfbd12e086f0453728ecf8c19e0ef6921bc5958ac5 +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4": + version: 7.1.1 + resolution: "minipass@npm:7.1.1" + checksum: fdccc2f99c31083f45f881fd1e6971d798e333e078ab3c8988fb818c470fbd5e935388ad9adb286397eba50baebf46ef8ff487c8d3f455a69c6f3efc327bdff9 languageName: node linkType: hard @@ -18067,8 +17719,8 @@ __metadata: linkType: hard "mocha@npm:^10.0.0, mocha@npm:^10.2.0": - version: 10.3.0 - resolution: "mocha@npm:10.3.0" + version: 10.4.0 + resolution: "mocha@npm:10.4.0" dependencies: ansi-colors: "npm:4.1.1" browser-stdout: "npm:1.3.1" @@ -18093,7 +17745,7 @@ __metadata: bin: _mocha: bin/_mocha mocha: bin/mocha.js - checksum: 8dc93842468b2be5f820e5eb64208fb68ba3e5ee90cfe21a9f1d439f9ec031e8a8dc97f4d3206a376c9e05141cf689a812aedcf4545f71f69b3e9a51f312ec4a + checksum: e572e9d8c164e98f64de7e9498608de042fd841c6a7441f456a5e216e9aed2299e2c568d9dc27f2be2de06521e6b2d1dd774ab58a243b1c7697d14aec2f0f7f7 languageName: node linkType: hard @@ -18547,19 +18199,19 @@ __metadata: linkType: hard "node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": - version: 4.8.0 - resolution: "node-gyp-build@npm:4.8.0" + version: 4.8.1 + resolution: "node-gyp-build@npm:4.8.1" bin: node-gyp-build: bin.js node-gyp-build-optional: optional.js node-gyp-build-test: build-test.js - checksum: 85324be16f81f0235cbbc42e3eceaeb1b5ab94c8d8f5236755e1435b4908338c65a4e75f66ee343cbcb44ddf9b52a428755bec16dcd983295be4458d95c8e1ad + checksum: e36ca3d2adf2b9cca316695d7687207c19ac6ed326d6d7c68d7112cebe0de4f82d6733dff139132539fcc01cf5761f6c9082a21864ab9172edf84282bc849ce7 languageName: node linkType: hard "node-gyp@npm:latest": - version: 10.0.1 - resolution: "node-gyp@npm:10.0.1" + version: 10.1.0 + resolution: "node-gyp@npm:10.1.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" @@ -18573,7 +18225,7 @@ __metadata: which: "npm:^4.0.0" bin: node-gyp: bin/node-gyp.js - checksum: abddfff7d873312e4ed4a5fb75ce893a5c4fb69e7fcb1dfa71c28a6b92a7f1ef6b62790dffb39181b5a82728ba8f2f32d229cf8cbe66769fe02cea7db4a555aa + checksum: 9cc821111ca244a01fb7f054db7523ab0a0cd837f665267eb962eb87695d71fb1e681f9e21464cc2fd7c05530dc4c81b810bca1a88f7d7186909b74477491a3c languageName: node linkType: hard @@ -18610,13 +18262,13 @@ __metadata: linkType: hard "nopt@npm:^7.0.0": - version: 7.2.0 - resolution: "nopt@npm:7.2.0" + version: 7.2.1 + resolution: "nopt@npm:7.2.1" dependencies: abbrev: "npm:^2.0.0" bin: nopt: bin/nopt.js - checksum: 9bd7198df6f16eb29ff16892c77bcf7f0cc41f9fb5c26280ac0def2cf8cf319f3b821b3af83eba0e74c85807cc430a16efe0db58fe6ae1f41e69519f585b6aff + checksum: a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 languageName: node linkType: hard @@ -18675,9 +18327,9 @@ __metadata: linkType: hard "normalize-url@npm:^8.0.0": - version: 8.0.0 - resolution: "normalize-url@npm:8.0.0" - checksum: 09582d56acd562d89849d9239852c2aff225c72be726556d6883ff36de50006803d32a023c10e917bcc1c55f73f3bb16434f67992fe9b61906a3db882192753c + version: 8.0.1 + resolution: "normalize-url@npm:8.0.1" + checksum: eb439231c4b84430f187530e6fdac605c5048ef4ec556447a10c00a91fc69b52d8d8298d9d608e68d3e0f7dc2d812d3455edf425e0f215993667c3183bcab1ef languageName: node linkType: hard @@ -18779,12 +18431,12 @@ __metadata: linkType: hard "object-is@npm:^1.1.5": - version: 1.1.5 - resolution: "object-is@npm:1.1.5" + version: 1.1.6 + resolution: "object-is@npm:1.1.6" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - checksum: 8c263fb03fc28f1ffb54b44b9147235c5e233dc1ca23768e7d2569740b5d860154d7cc29a30220fe28ed6d8008e2422aefdebfe987c103e1c5d190cf02d9d886 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + checksum: 506af444c4dce7f8e31f34fc549e2fb8152d6b9c4a30c6e62852badd7f520b579c679af433e7a072f9d78eb7808d230dc12e1cf58da9154dfbf8813099ea0fe0 languageName: node linkType: hard @@ -18824,15 +18476,17 @@ __metadata: linkType: hard "object.getownpropertydescriptors@npm:^2.1.6": - version: 2.1.7 - resolution: "object.getownpropertydescriptors@npm:2.1.7" + version: 2.1.8 + resolution: "object.getownpropertydescriptors@npm:2.1.8" dependencies: array.prototype.reduce: "npm:^1.0.6" - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - safe-array-concat: "npm:^1.0.0" - checksum: 519c4eb47bd30dad1385994dbea59408c25f4bff68b29d918267091f3d597d39b04557691e94ee385fd9af7f191daffa59954e19c6f1e53215d6910d386005a2 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + gopd: "npm:^1.0.1" + safe-array-concat: "npm:^1.1.2" + checksum: 553e9562fd86637c9c169df23a56f1d810d8c9b580a6d4be11552c009f32469310c9347f3d10325abf0cd9cfe4afc521a1e903fbd24148ae7ec860e1e7c75cf3 languageName: node linkType: hard @@ -18991,16 +18645,16 @@ __metadata: linkType: hard "optionator@npm:^0.9.3": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" + version: 0.9.4 + resolution: "optionator@npm:0.9.4" dependencies: - "@aashutoshrathi/word-wrap": "npm:^1.2.3" deep-is: "npm:^0.1.3" fast-levenshtein: "npm:^2.0.6" levn: "npm:^0.4.1" prelude-ls: "npm:^1.2.1" type-check: "npm:^0.4.0" - checksum: 66fba794d425b5be51353035cf3167ce6cfa049059cbb93229b819167687e0f48d2bc4603fcb21b091c99acb516aae1083624675b15c4765b2e4693a085e959c + word-wrap: "npm:^1.2.5" + checksum: 4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 languageName: node linkType: hard @@ -19264,16 +18918,17 @@ __metadata: languageName: node linkType: hard -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.6": - version: 5.1.6 - resolution: "parse-asn1@npm:5.1.6" +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7": + version: 5.1.7 + resolution: "parse-asn1@npm:5.1.7" dependencies: - asn1.js: "npm:^5.2.0" - browserify-aes: "npm:^1.0.0" - evp_bytestokey: "npm:^1.0.0" - pbkdf2: "npm:^3.0.3" - safe-buffer: "npm:^5.1.1" - checksum: 4ed1d9b9e120c5484d29d67bb90171aac0b73422bc016d6294160aea983275c28a27ab85d862059a36a86a97dd31b7ddd97486802ca9fac67115fe3409e9dcbd + asn1.js: "npm:^4.10.1" + browserify-aes: "npm:^1.2.0" + evp_bytestokey: "npm:^1.0.3" + hash-base: "npm:~3.0" + pbkdf2: "npm:^3.1.2" + safe-buffer: "npm:^5.2.1" + checksum: 05eb5937405c904eb5a7f3633bab1acc11f4ae3478a07ef5c6d81ce88c3c0e505ff51f9c7b935ebc1265c868343793698fc91025755a895d0276f620f95e8a82 languageName: node linkType: hard @@ -19503,13 +19158,13 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.10.1": - version: 1.10.1 - resolution: "path-scurry@npm:1.10.1" +"path-scurry@npm:^1.11.0": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" dependencies: - lru-cache: "npm:^9.1.1 || ^10.0.0" + lru-cache: "npm:^10.2.0" minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: e5dc78a7348d25eec61ab166317e9e9c7b46818aa2c2b9006c507a6ff48c672d011292d9662527213e558f5652ce0afcc788663a061d8b59ab495681840c0c1e + checksum: 32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d languageName: node linkType: hard @@ -19552,7 +19207,7 @@ __metadata: languageName: node linkType: hard -"pbkdf2@npm:^3.0.17, pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.0.9": +"pbkdf2@npm:^3.0.17, pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.0.9, pbkdf2@npm:^3.1.2": version: 3.1.2 resolution: "pbkdf2@npm:3.1.2" dependencies: @@ -19589,9 +19244,9 @@ __metadata: linkType: hard "pg-connection-string@npm:^2.5.0, pg-connection-string@npm:^2.6.1, pg-connection-string@npm:^2.6.2": - version: 2.6.2 - resolution: "pg-connection-string@npm:2.6.2" - checksum: e8fdea74fcc8bdc3d7c5c6eadd9425fdba7e67fb7fe836f9c0cecad94c8984e435256657d1d8ce0483d1fedef667e7a57e32449a63cb805cb0289fc34b62da35 + version: 2.6.4 + resolution: "pg-connection-string@npm:2.6.4" + checksum: 0d0b617df0fc6507bf6a94bdcd56c7a305788a1402d69bff9773350947c8f525d6d8136128065370749a3325e99658ae40fbdcce620fb8e60126181f0591a6a6 languageName: node linkType: hard @@ -19612,18 +19267,18 @@ __metadata: linkType: hard "pg-pool@npm:^3.5.1, pg-pool@npm:^3.6.1": - version: 3.6.1 - resolution: "pg-pool@npm:3.6.1" + version: 3.6.2 + resolution: "pg-pool@npm:3.6.2" peerDependencies: pg: ">=8.0" - checksum: 47837c4e4c2b9e195cec01bd58b6e276acc915537191707ad4d6ed975fd9bc03c73f63cb7fde4cb0e08ed059e35faf60fbd03744dee3af71d4b4631ab40eeb7f + checksum: 14c524549490954b5e48457a4b808df8f619f6deeb3b395b0cd184a8f4ed65a9273fe0697ba0341a41d6745af197f1437eb1cf51fff0cbbf5b0fb3852ebe5392 languageName: node linkType: hard "pg-protocol@npm:^1.5.0, pg-protocol@npm:^1.6.0": - version: 1.6.0 - resolution: "pg-protocol@npm:1.6.0" - checksum: 318a4d1e9cebd3927b10a8bc412f5017117a1f9a5fafb628d75847da7d1ab81c33250de58596bd0990029e14e92a995a851286d60fc236692299faf509572213 + version: 1.6.1 + resolution: "pg-protocol@npm:1.6.1" + checksum: 7eadef4010ac0a3925c460be7332ca4098a5c6d5181725a62193fcfa800000ae6632d98d814f3989b42cf5fdc3b45e34c714a1959d29174e81e30730e140ae5f languageName: node linkType: hard @@ -19693,10 +19348,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: 20a5b249e331c14479d94ec6817a182fd7a5680debae82705747b2db7ec50009a5f6648d0621c561b0572703f84dbef0858abcbd5856d3c5511426afcb1961f7 +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 languageName: node linkType: hard @@ -19707,10 +19362,10 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.1": - version: 4.0.1 - resolution: "picomatch@npm:4.0.1" - checksum: a036a085b18b376493e8ccef155bb03c65a2be7203582b717bb0498d1446e6a80f7f86a36e07877590abd0431f26c64c6154058c31f4f46105d3686a34fa3cf6 +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc languageName: node linkType: hard @@ -20006,6 +19661,13 @@ __metadata: languageName: node linkType: hard +"proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -20342,11 +20004,11 @@ __metadata: linkType: hard "qs@npm:^6.11.2, qs@npm:^6.4.0, qs@npm:^6.7.0, qs@npm:^6.9.4": - version: 6.11.2 - resolution: "qs@npm:6.11.2" + version: 6.12.1 + resolution: "qs@npm:6.12.1" dependencies: - side-channel: "npm:^1.0.4" - checksum: 4f95d4ff18ed480befcafa3390022817ffd3087fc65f146cceb40fc5edb9fa96cb31f648cae2fa96ca23818f0798bd63ad4ca369a0e22702fcd41379b3ab6571 + side-channel: "npm:^1.0.6" + checksum: 439e6d7c6583e7c69f2cab2c39c55b97db7ce576e4c7c469082b938b7fc8746e8d547baacb69b4cd2b6666484776c3f4840ad7163a4c5326300b0afa0acdd84b languageName: node linkType: hard @@ -20574,7 +20236,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:2 || 3, readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": +"readable-stream@npm:2 || 3, readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -20597,7 +20259,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.2.8, readable-stream@npm:^2.2.9, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.2.8, readable-stream@npm:^2.2.9, readable-stream@npm:^2.3.6, readable-stream@npm:^2.3.8, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -21155,13 +20817,13 @@ __metadata: linkType: hard "rimraf@npm:^5.0.0": - version: 5.0.5 - resolution: "rimraf@npm:5.0.5" + version: 5.0.7 + resolution: "rimraf@npm:5.0.7" dependencies: glob: "npm:^10.3.7" bin: rimraf: dist/esm/bin.mjs - checksum: d50dbe724f33835decd88395b25ed35995077c60a50ae78ded06e0185418914e555817aad1b4243edbff2254548c2f6ad6f70cc850040bebb4da9e8cc016f586 + checksum: bd6dbfaa98ae34ce1e54d1e06045d2d63e8859d9a1979bb4a4628b652b459a2d17b17dc20ee072b034bd2d09bd691e801d24c4d9cfe94e16fdbcc8470a1d4807 languageName: node linkType: hard @@ -21222,22 +20884,6 @@ __metadata: languageName: node linkType: hard -"rust-verkle-wasm@npm:^0.0.1": - version: 0.0.1 - resolution: "rust-verkle-wasm@npm:0.0.1" - checksum: 07536a7b4d1fe37dcfc9fc19fdee630d26c9c27acd3a18da8daf21c040b87bb162098fd304e1458e4edb72d8ed4cd0e74c9fcd75edb70eb5e29a1a524916ad12 - languageName: node - linkType: hard - -"rustbn-wasm@npm:^0.2.0": - version: 0.2.0 - resolution: "rustbn-wasm@npm:0.2.0" - dependencies: - "@scure/base": "npm:^1.1.1" - checksum: 86729b25a7295f706641366a3ba2bd59a666c1ddbdc40ec4a18f8f8dd5074aaf742ffaf260e80617513954e6a247f4e06f655fe99e9d75fddbdcc4cf0bea32b7 - languageName: node - linkType: hard - "rustbn.js@npm:~0.2.0": version: 0.2.0 resolution: "rustbn.js@npm:0.2.0" @@ -21263,15 +20909,15 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-array-concat@npm:1.1.0" +"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" dependencies: - call-bind: "npm:^1.0.5" - get-intrinsic: "npm:^1.2.2" + call-bind: "npm:^1.0.7" + get-intrinsic: "npm:^1.2.4" has-symbols: "npm:^1.0.3" isarray: "npm:^2.0.5" - checksum: 833d3d950fc7507a60075f9bfaf41ec6dac7c50c7a9d62b1e6b071ecc162185881f92e594ff95c1a18301c881352dd6fd236d56999d5819559db7b92da9c28af + checksum: 12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9 languageName: node linkType: hard @@ -21432,7 +21078,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.6.0, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:7.6.0": version: 7.6.0 resolution: "semver@npm:7.6.0" dependencies: @@ -21452,6 +21098,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": + version: 7.6.2 + resolution: "semver@npm:7.6.2" + bin: + semver: bin/semver.js + checksum: 97d3441e97ace8be4b1976433d1c32658f6afaff09f143e52c593bae7eef33de19e3e369c88bd985ce1042c6f441c80c6803078d1de2a9988080b66684cbb30c + languageName: node + linkType: hard + "semver@npm:~5.4.1": version: 5.4.1 resolution: "semver@npm:5.4.1" @@ -21659,16 +21314,16 @@ __metadata: linkType: hard "set-function-length@npm:^1.2.1": - version: 1.2.1 - resolution: "set-function-length@npm:1.2.1" + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" dependencies: - define-data-property: "npm:^1.1.2" + define-data-property: "npm:^1.1.4" es-errors: "npm:^1.3.0" function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.3" + get-intrinsic: "npm:^1.2.4" gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.1" - checksum: 1927e296599f2c04d210c1911f1600430a5e49e04a6d8bb03dca5487b95a574da9968813a2ced9a774bd3e188d4a6208352c8f64b8d4674cdb021dca21e190ca + has-property-descriptors: "npm:^1.0.2" + checksum: 82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c languageName: node linkType: hard @@ -21791,15 +21446,15 @@ __metadata: languageName: node linkType: hard -"side-channel@npm:^1.0.4": - version: 1.0.5 - resolution: "side-channel@npm:1.0.5" +"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" dependencies: - call-bind: "npm:^1.0.6" + call-bind: "npm:^1.0.7" es-errors: "npm:^1.3.0" get-intrinsic: "npm:^1.2.4" object-inspect: "npm:^1.13.1" - checksum: 31312fecb68997ce2893b1f6d1fd07d6dd41e05cc938e82004f056f7de96dd9df599ef9418acdf730dda948e867e933114bd2efe4170c0146d1ed7009700c252 + checksum: d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f languageName: node linkType: hard @@ -22006,24 +21661,24 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:^8.0.1": - version: 8.0.2 - resolution: "socks-proxy-agent@npm:8.0.2" +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.3 + resolution: "socks-proxy-agent@npm:8.0.3" dependencies: - agent-base: "npm:^7.0.2" + agent-base: "npm:^7.1.1" debug: "npm:^4.3.4" socks: "npm:^2.7.1" - checksum: a842402fc9b8848a31367f2811ca3cd14c4106588b39a0901cd7a69029998adfc6456b0203617c18ed090542ad0c24ee4e9d4c75a0c4b75071e214227c177eb7 + checksum: 4950529affd8ccd6951575e21c1b7be8531b24d924aa4df3ee32df506af34b618c4e50d261f4cc603f1bfd8d426915b7d629966c8ce45b05fb5ad8c8b9a6459d languageName: node linkType: hard "socks@npm:^2.7.1": - version: 2.8.1 - resolution: "socks@npm:2.8.1" + version: 2.8.3 + resolution: "socks@npm:2.8.3" dependencies: ip-address: "npm:^9.0.5" smart-buffer: "npm:^4.2.0" - checksum: ac77b515c260473cc7c4452f09b20939e22510ce3ae48385c516d1d5784374d5cc75be3cb18ff66cc985a7f4f2ef8fef84e984c5ec70aad58355ed59241f40a8 + checksum: d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 languageName: node linkType: hard @@ -22127,13 +21782,29 @@ __metadata: "solhint-graph-config@workspace:^0.0.1, solhint-graph-config@workspace:packages/solhint-graph-config": version: 0.0.0-use.local resolution: "solhint-graph-config@workspace:packages/solhint-graph-config" + dependencies: + solhint-plugin-graph: "file:plugin" peerDependencies: prettier: ^3.2.5 prettier-plugin-solidity: ^1.3.1 - solhint: ^4.1.1 + solhint: ^4.5.4 languageName: unknown linkType: soft +"solhint-plugin-graph@file:node_modules/solhint-graph-config/plugin::locator=%40graphprotocol%2Fsubgraph-service%40workspace%3Apackages%2Fsubgraph-service": + version: 0.0.0 + resolution: "solhint-plugin-graph@file:node_modules/solhint-graph-config/plugin#node_modules/solhint-graph-config/plugin::hash=37bdb1&locator=%40graphprotocol%2Fsubgraph-service%40workspace%3Apackages%2Fsubgraph-service" + checksum: f77aeda80dc6f8bb93376c3b05e910874038e701793f7805e9937f0047e68d3ac8595d915a4cb12dd974c49851d2b0fdf94742b0b2865cd7bf7e3a630177dfea + languageName: node + linkType: hard + +"solhint-plugin-graph@file:plugin::locator=solhint-graph-config%40workspace%3Apackages%2Fsolhint-graph-config": + version: 0.0.0 + resolution: "solhint-plugin-graph@file:plugin#plugin::hash=37bdb1&locator=solhint-graph-config%40workspace%3Apackages%2Fsolhint-graph-config" + checksum: f77aeda80dc6f8bb93376c3b05e910874038e701793f7805e9937f0047e68d3ac8595d915a4cb12dd974c49851d2b0fdf94742b0b2865cd7bf7e3a630177dfea + languageName: node + linkType: hard + "solhint-plugin-prettier@npm:^0.1.0": version: 0.1.0 resolution: "solhint-plugin-prettier@npm:0.1.0" @@ -22147,41 +21818,9 @@ __metadata: languageName: node linkType: hard -"solhint@npm:^4.1.1": - version: 4.1.1 - resolution: "solhint@npm:4.1.1" - dependencies: - "@solidity-parser/parser": "npm:^0.16.0" - ajv: "npm:^6.12.6" - antlr4: "npm:^4.11.0" - ast-parents: "npm:^0.0.1" - chalk: "npm:^4.1.2" - commander: "npm:^10.0.0" - cosmiconfig: "npm:^8.0.0" - fast-diff: "npm:^1.2.0" - glob: "npm:^8.0.3" - ignore: "npm:^5.2.4" - js-yaml: "npm:^4.1.0" - latest-version: "npm:^7.0.0" - lodash: "npm:^4.17.21" - pluralize: "npm:^8.0.0" - prettier: "npm:^2.8.3" - semver: "npm:^7.5.2" - strip-ansi: "npm:^6.0.1" - table: "npm:^6.8.1" - text-table: "npm:^0.2.0" - dependenciesMeta: - prettier: - optional: true - bin: - solhint: solhint.js - checksum: b4bdb21bdc13f7ba3436d571a30cae6cb8dfb58ab1387df8bef25eeca25c8fbb3f625c49a5dddea41f8361aaeb4d8e2e9f986f580663ddd4574fd3d5de5f66c9 - languageName: node - linkType: hard - -"solhint@npm:^4.5.2": - version: 4.5.2 - resolution: "solhint@npm:4.5.2" +"solhint@npm:^4.1.1, solhint@npm:^4.5.2, solhint@npm:^4.5.4": + version: 4.5.4 + resolution: "solhint@npm:4.5.4" dependencies: "@solidity-parser/parser": "npm:^0.18.0" ajv: "npm:^6.12.6" @@ -22207,16 +21846,16 @@ __metadata: optional: true bin: solhint: solhint.js - checksum: a54cc8df54ed711ca6be783b9291eb9e838f518f236d4df05c6ef412ead6a21f4a5bf3bace62ca7d2ed69f4566d5289db4c8c93e0c5e23ac91401904e1f1f312 + checksum: 85bc62536c6b1269403b2af369dcfc7c63d07c6efb994f4e3c4e7e96d3511a64ab10c68635c6676e09eee289104b5d349091960994e990cacf240497170c8aed languageName: node linkType: hard -"solidity-ast@npm:^0.4.51": - version: 0.4.55 - resolution: "solidity-ast@npm:0.4.55" +"solidity-ast@npm:^0.4.38, solidity-ast@npm:^0.4.51": + version: 0.4.56 + resolution: "solidity-ast@npm:0.4.56" dependencies: array.prototype.findlast: "npm:^1.2.2" - checksum: 6f945f014a34ccc9fe8ffbbef286e9f12d52a92bee79d01f8f16e81e2ccd610bbb3e60ab4bebaea7a868382c235d0f01938e32103a68d374753c355849f2279f + checksum: 6e10e58ddae8c7a9e53551bc61b673963c6671cac12050fa77575caff1ecc6a58440af8b7d85755fdda7e02d0516e2dcd3a5a976bd91a865375274163281d160 languageName: node linkType: hard @@ -22256,8 +21895,8 @@ __metadata: linkType: hard "solidity-coverage@npm:^0.8.0": - version: 0.8.11 - resolution: "solidity-coverage@npm:0.8.11" + version: 0.8.12 + resolution: "solidity-coverage@npm:0.8.12" dependencies: "@ethersproject/abi": "npm:^5.0.9" "@solidity-parser/parser": "npm:^0.18.0" @@ -22269,7 +21908,7 @@ __metadata: global-modules: "npm:^2.0.0" globby: "npm:^10.0.1" jsonschema: "npm:^1.2.4" - lodash: "npm:^4.17.15" + lodash: "npm:^4.17.21" mocha: "npm:^10.2.0" node-emoji: "npm:^1.10.0" pify: "npm:^4.0.1" @@ -22282,7 +21921,19 @@ __metadata: hardhat: ^2.11.0 bin: solidity-coverage: plugins/bin.js - checksum: de26a3bdece5b36005fcf84b4c4e9e0affc2822d69c823d925f439876c3d5c7b1fc83d447745c6aae994ad0e5c02f4c031d4d9b2d5613184d9286116857e6437 + checksum: 500de00ca5d0ff9531bcfc54040591e90bb281714c5ad810bc6aa77bb6ab696f15a141f6bcb1a47547dca68d10e717e1705741d4cf660d7dce8700fa97e6bfaf + languageName: node + linkType: hard + +"solidity-docgen@npm:^0.6.0-beta.36": + version: 0.6.0-beta.36 + resolution: "solidity-docgen@npm:0.6.0-beta.36" + dependencies: + handlebars: "npm:^4.7.7" + solidity-ast: "npm:^0.4.38" + peerDependencies: + hardhat: ^2.8.0 + checksum: 34ca1c18b2f662e5b6e407fad9346da91807b18ca57c877d909a4e730935475b0d3a5d8e91d79113c96741f4275944f9f3176a612894f4118e16cd9a9de80c02 languageName: node linkType: hard @@ -22503,11 +22154,11 @@ __metadata: linkType: hard "ssri@npm:^10.0.0": - version: 10.0.5 - resolution: "ssri@npm:10.0.5" + version: 10.0.6 + resolution: "ssri@npm:10.0.6" dependencies: minipass: "npm:^7.0.3" - checksum: b091f2ae92474183c7ac5ed3f9811457e1df23df7a7e70c9476eaa9a0c4a0c8fc190fb45acefbf023ca9ee864dd6754237a697dc52a0fb182afe65d8e77443d8 + checksum: e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 languageName: node linkType: hard @@ -22558,7 +22209,7 @@ __metadata: languageName: node linkType: hard -"stream-shift@npm:^1.0.0": +"stream-shift@npm:^1.0.2": version: 1.0.3 resolution: "stream-shift@npm:1.0.3" checksum: 939cd1051ca750d240a0625b106a2b988c45fb5a3be0cebe9a9858cb01bc1955e8c7b9fac17a9462976bea4a7b704e317c5c2200c70f0ca715a3363b9aa4fd3b @@ -22682,36 +22333,37 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.8, string.prototype.trim@npm:~1.2.8": - version: 1.2.8 - resolution: "string.prototype.trim@npm:1.2.8" +"string.prototype.trim@npm:^1.2.9, string.prototype.trim@npm:~1.2.8": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - checksum: 4f76c583908bcde9a71208ddff38f67f24c9ec8093631601666a0df8b52fad44dad2368c78895ce83eb2ae8e7068294cc96a02fc971ab234e4d5c9bb61ea4e34 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.0" + es-object-atoms: "npm:^1.0.0" + checksum: dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.7": - version: 1.0.7 - resolution: "string.prototype.trimend@npm:1.0.7" +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - checksum: 53c24911c7c4d8d65f5ef5322de23a3d5b6b4db73273e05871d5ab4571ae5638f38f7f19d71d09116578fb060e5a145cc6a208af2d248c8baf7a34f44d32ce57 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.7": - version: 1.0.7 - resolution: "string.prototype.trimstart@npm:1.0.7" +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - checksum: 0bcf391b41ea16d4fda9c9953d0a7075171fe090d33b4cf64849af94944c50862995672ac03e0c5dba2940a213ad7f53515a668dac859ce22a0276289ae5cf4f + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 languageName: node linkType: hard @@ -23002,15 +22654,15 @@ __metadata: linkType: hard "table@npm:^6.8.0, table@npm:^6.8.1": - version: 6.8.1 - resolution: "table@npm:6.8.1" + version: 6.8.2 + resolution: "table@npm:6.8.2" dependencies: ajv: "npm:^8.0.1" lodash.truncate: "npm:^4.4.2" slice-ansi: "npm:^4.0.0" string-width: "npm:^4.2.3" strip-ansi: "npm:^6.0.1" - checksum: 591ed84b2438b01c9bc02248e2238e21e8bfb73654bc5acca0d469053eb39be3db2f57d600dcf08ac983b6f50f80842c44612c03877567c2afee3aec4a033e5f + checksum: f8b348af38ee34e419d8ce7306ba00671ce6f20e861ccff22555f491ba264e8416086063ce278a8d81abfa8d23b736ec2cca7ac4029b5472f63daa4b4688b803 languageName: node linkType: hard @@ -23056,8 +22708,8 @@ __metadata: linkType: hard "tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.0 - resolution: "tar@npm:6.2.0" + version: 6.2.1 + resolution: "tar@npm:6.2.1" dependencies: chownr: "npm:^2.0.0" fs-minipass: "npm:^2.0.0" @@ -23065,7 +22717,7 @@ __metadata: minizlib: "npm:^2.1.1" mkdirp: "npm:^1.0.3" yallist: "npm:^4.0.0" - checksum: 02ca064a1a6b4521fef88c07d389ac0936730091f8c02d30ea60d472e0378768e870769ab9e986d87807bfee5654359cf29ff4372746cc65e30cbddc352660d8 + checksum: a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 languageName: node linkType: hard @@ -23404,12 +23056,12 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.0.1": - version: 1.2.1 - resolution: "ts-api-utils@npm:1.2.1" +"ts-api-utils@npm:^1.0.1, ts-api-utils@npm:^1.3.0": + version: 1.3.0 + resolution: "ts-api-utils@npm:1.3.0" peerDependencies: typescript: ">=4.2.0" - checksum: 8ddb493e7ae581d3f57a2e469142feb60b420d4ad8366ab969fe8e36531f8f301f370676b47e8d97f28b5f5fd10d6f2d55f656943a8546ef95e35ce5cf117754 + checksum: f54a0ba9ed56ce66baea90a3fa087a484002e807f28a8ccb2d070c75e76bde64bd0f6dce98b3802834156306050871b67eec325cb4e918015a360a3f0868c77c languageName: node linkType: hard @@ -23690,13 +23342,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^3.0.0": - version: 3.13.1 - resolution: "type-fest@npm:3.13.1" - checksum: 547d22186f73a8c04590b70dcf63baff390078c75ea8acd366bbd510fd0646e348bd1970e47ecf795b7cff0b41d26e9c475c1fedd6ef5c45c82075fbf916b629 - languageName: node - linkType: hard - "type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -23707,13 +23352,6 @@ __metadata: languageName: node linkType: hard -"type@npm:^1.0.1": - version: 1.2.0 - resolution: "type@npm:1.2.0" - checksum: 444660849aaebef8cbb9bc43b28ec2068952064cfce6a646f88db97aaa2e2d6570c5629cd79238b71ba23aa3f75146a0b96e24e198210ee0089715a6f8889bf7 - languageName: node - linkType: hard - "type@npm:^2.7.2": version: 2.7.2 resolution: "type@npm:2.7.2" @@ -23804,7 +23442,7 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.1": +"typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" dependencies: @@ -23815,7 +23453,7 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.0": +"typed-array-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "typed-array-byte-length@npm:1.0.1" dependencies: @@ -23828,7 +23466,7 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.0": +"typed-array-byte-offset@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-byte-offset@npm:1.0.2" dependencies: @@ -23842,9 +23480,9 @@ __metadata: languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": - version: 1.0.5 - resolution: "typed-array-length@npm:1.0.5" +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" dependencies: call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" @@ -23852,7 +23490,7 @@ __metadata: has-proto: "npm:^1.0.3" is-typed-array: "npm:^1.1.13" possible-typed-array-names: "npm:^1.0.0" - checksum: 5cc0f79196e70a92f8f40846cfa62b3de6be51e83f73655e137116cf65e3c29a288502b18cc8faf33c943c2470a4569009e1d6da338441649a2db2f135761ad5 + checksum: 74253d7dc488eb28b6b2711cf31f5a9dcefc9c41b0681fd1c178ed0a1681b4468581a3626d39cd4df7aee3d3927ab62be06aa9ca74e5baf81827f61641445b77 languageName: node linkType: hard @@ -23873,17 +23511,18 @@ __metadata: linkType: hard "typescript-eslint@npm:^7.0.2": - version: 7.0.2 - resolution: "typescript-eslint@npm:7.0.2" + version: 7.9.0 + resolution: "typescript-eslint@npm:7.9.0" dependencies: - "@typescript-eslint/eslint-plugin": "npm:7.0.2" - "@typescript-eslint/parser": "npm:7.0.2" + "@typescript-eslint/eslint-plugin": "npm:7.9.0" + "@typescript-eslint/parser": "npm:7.9.0" + "@typescript-eslint/utils": "npm:7.9.0" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 947216bccdb392c1e5f1228772185afbe306db305f1f61343d3cb315aa6c80a928709172498af62536b50c1e7c91e263eed7886bb4b328ca8850ffb1ea71a3d9 + checksum: dacdd8b278d519eea1d980c71dd301a0b68fe1100aa8eaa9e3b80acd7089765ef50bdf369b7c11ddc5f4be6ac6d90cc9283db549003c3df8cfabbe4f44a36b53 languageName: node linkType: hard @@ -23897,23 +23536,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.0.4, typescript@npm:^5.1.6, typescript@npm:^5.3.3": - version: 5.3.3 - resolution: "typescript@npm:5.3.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: e33cef99d82573624fc0f854a2980322714986bc35b9cb4d1ce736ed182aeab78e2cb32b385efa493b2a976ef52c53e20d6c6918312353a91850e2b76f1ea44f - languageName: node - linkType: hard - -"typescript@npm:^5.2.2": - version: 5.4.2 - resolution: "typescript@npm:5.4.2" +"typescript@npm:^5.0.4, typescript@npm:^5.1.6, typescript@npm:^5.2.2, typescript@npm:^5.3.3": + version: 5.4.5 + resolution: "typescript@npm:5.4.5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 583ff68cafb0c076695f72d61df6feee71689568179fb0d3a4834dac343df6b6ed7cf7b6f6c801fa52d43cd1d324e2f2d8ae4497b09f9e6cfe3d80a6d6c9ca52 + checksum: 2954022ada340fd3d6a9e2b8e534f65d57c92d5f3989a263754a78aba549f7e6529acc1921913560a4b816c46dce7df4a4d29f9f11a3dc0d4213bb76d043251e languageName: node linkType: hard @@ -23927,23 +23556,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A^5.1.6#optional!builtin, typescript@patch:typescript@npm%3A^5.3.3#optional!builtin": - version: 5.3.3 - resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 1d0a5f4ce496c42caa9a30e659c467c5686eae15d54b027ee7866744952547f1be1262f2d40de911618c242b510029d51d43ff605dba8fb740ec85ca2d3f9500 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.2.2#optional!builtin": - version: 5.4.2 - resolution: "typescript@patch:typescript@npm%3A5.4.2#optional!builtin::version=5.4.2&hash=e012d7" +"typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A^5.1.6#optional!builtin, typescript@patch:typescript@npm%3A^5.2.2#optional!builtin, typescript@patch:typescript@npm%3A^5.3.3#optional!builtin": + version: 5.4.5 + resolution: "typescript@patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=e012d7" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 22e2f213c3ffe5960c5eaec6c95c04e01858fed57a94be250746f540b935b2c18c3c3fc80d3ab65d28c0aba1eb76284557ba3bf521d28caee811c44ba2b648f9 + checksum: 9cf4c053893bcf327d101b6c024a55baf05430dc30263f9adb1bf354aeffc11306fe1f23ba2f9a0209674359f16219b5b7d229e923477b94831d07d5a33a4217 languageName: node linkType: hard @@ -24083,11 +23702,11 @@ __metadata: linkType: hard "undici@npm:^5.14.0": - version: 5.28.3 - resolution: "undici@npm:5.28.3" + version: 5.28.4 + resolution: "undici@npm:5.28.4" dependencies: "@fastify/busboy": "npm:^2.0.0" - checksum: 3c559ae50ef3104b7085251445dda6f4de871553b9e290845649d2f80b06c0c9cfcdf741b0029c6b20d36c82e6a74dc815b139fa9a26757d70728074ca6d6f5c + checksum: 08d0f2596553aa0a54ca6e8e9c7f45aef7d042c60918564e3a142d449eda165a80196f6ef19ea2ef2e6446959e293095d8e40af1236f0d67223b06afac5ecad7 languageName: node linkType: hard @@ -24176,16 +23795,16 @@ __metadata: linkType: hard "update-browserslist-db@npm:^1.0.13": - version: 1.0.13 - resolution: "update-browserslist-db@npm:1.0.13" + version: 1.0.16 + resolution: "update-browserslist-db@npm:1.0.16" dependencies: - escalade: "npm:^3.1.1" - picocolors: "npm:^1.0.0" + escalade: "npm:^3.1.2" + picocolors: "npm:^1.0.1" peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: e52b8b521c78ce1e0c775f356cd16a9c22c70d25f3e01180839c407a5dc787fb05a13f67560cbaf316770d26fa99f78f1acd711b1b54a4f35d4820d4ea7136e6 + checksum: 5995399fc202adbb51567e4810e146cdf7af630a92cc969365a099150cb00597e425cc14987ca7080b09a4d0cfd2a3de53fbe72eebff171aed7f9bb81f9bf405 languageName: node linkType: hard @@ -24207,7 +23826,7 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2": +"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: @@ -24383,9 +24002,9 @@ __metadata: linkType: hard "validator@npm:^13.7.0, validator@npm:^13.9.0": - version: 13.11.0 - resolution: "validator@npm:13.11.0" - checksum: 0107da3add5a4ebc6391dac103c55f6d8ed055bbcc29a4c9cbf89eacfc39ba102a5618c470bdc33c6487d30847771a892134a8c791f06ef0962dd4b7a60ae0f5 + version: 13.12.0 + resolution: "validator@npm:13.12.0" + checksum: 21d48a7947c9e8498790550f56cd7971e0e3d724c73388226b109c1bac2728f4f88caddfc2f7ed4b076f9b0d004316263ac786a17e9c4edf075741200718cd32 languageName: node linkType: hard @@ -25323,16 +24942,16 @@ __metadata: languageName: node linkType: hard -"webcrypto-core@npm:^1.7.8": - version: 1.7.8 - resolution: "webcrypto-core@npm:1.7.8" +"webcrypto-core@npm:^1.7.9": + version: 1.7.9 + resolution: "webcrypto-core@npm:1.7.9" dependencies: "@peculiar/asn1-schema": "npm:^2.3.8" "@peculiar/json-schema": "npm:^1.1.12" asn1js: "npm:^3.0.1" pvtsutils: "npm:^1.3.5" tslib: "npm:^2.6.2" - checksum: 4c6ef9ae4ae27489f88b7c571494b058120178528f25efe87b97cbc64ead03a6468a614f6269927d13735e4f5ce1d1f7599cf4385ee9b61a13921964a5748a66 + checksum: 29075c0fd6afdd11473dcf98623b929fae6a0861a54725af109df824e3c55c00580103a2f934baabff52d588e9c6c3892db80346061fd835c55e0a83264c19f5 languageName: node linkType: hard @@ -25358,16 +24977,16 @@ __metadata: linkType: hard "websocket@npm:^1.0.31, websocket@npm:^1.0.32": - version: 1.0.34 - resolution: "websocket@npm:1.0.34" + version: 1.0.35 + resolution: "websocket@npm:1.0.35" dependencies: bufferutil: "npm:^4.0.1" debug: "npm:^2.2.0" - es5-ext: "npm:^0.10.50" + es5-ext: "npm:^0.10.63" typedarray-to-buffer: "npm:^3.1.5" utf-8-validate: "npm:^5.0.2" yaeti: "npm:^0.0.6" - checksum: a7e17d24edec685fdf055940ff9c6a15e726df5bb5e537382390bd1ab978fc8c0d71cd2842bb628e361d823aafd43934cc56aa5b979d08e52461be7da8d01eee + checksum: 8be9a68dc0228f18058c9010d1308479f05050af8f6d68b9dbc6baebd9ab484c15a24b2521a5d742a9d78e62ee19194c532992f1047a9b9adf8c3eedb0b1fcdc languageName: node linkType: hard @@ -25432,16 +25051,16 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.2": - version: 1.1.14 - resolution: "which-typed-array@npm:1.1.14" +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" dependencies: - available-typed-arrays: "npm:^1.0.6" - call-bind: "npm:^1.0.5" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" gopd: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.1" - checksum: 0960f1e77807058819451b98c51d4cd72031593e8de990b24bd3fc22e176f5eee22921d68d852297c786aec117689f0423ed20aa4fde7ce2704d680677891f56 + has-tostringtag: "npm:^1.0.2" + checksum: 4465d5348c044032032251be54d8988270e69c6b7154f8fcb2a47ff706fe36f7624b3a24246b8d9089435a8f4ec48c1c1025c5d6b499456b9e5eff4f48212983 languageName: node linkType: hard @@ -25496,7 +25115,7 @@ __metadata: languageName: node linkType: hard -"winston-transport@npm:^4.5.0": +"winston-transport@npm:^4.7.0": version: 4.7.0 resolution: "winston-transport@npm:4.7.0" dependencies: @@ -25508,8 +25127,8 @@ __metadata: linkType: hard "winston@npm:*, winston@npm:^3.3.3": - version: 3.11.0 - resolution: "winston@npm:3.11.0" + version: 3.13.0 + resolution: "winston@npm:3.13.0" dependencies: "@colors/colors": "npm:^1.6.0" "@dabh/diagnostics": "npm:^2.0.2" @@ -25521,8 +25140,8 @@ __metadata: safe-stable-stringify: "npm:^2.3.1" stack-trace: "npm:0.0.x" triple-beam: "npm:^1.3.0" - winston-transport: "npm:^4.5.0" - checksum: 7e1f8919cbdc62cfe46e6204d79a83e1364696ef61111483f3ecf204988922383fe74192c5bc9f89df9b47caf24c2d34f5420ef6f3b693f8d1286b46432e97be + winston-transport: "npm:^4.7.0" + checksum: 2c3cc7389a691e1638edcb0d4bfea72caa82d87d5681ec6131ac9bae780d94d06fb7b112edcd4ec37c8b947a1b64943941b761e34d67c6b0dac6e9c31ae4b25b languageName: node linkType: hard @@ -25549,7 +25168,7 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:~1.2.3": +"word-wrap@npm:^1.2.5, word-wrap@npm:~1.2.3": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" checksum: e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 @@ -25722,8 +25341,8 @@ __metadata: linkType: hard "ws@npm:^8.12.0, ws@npm:^8.13.0": - version: 8.16.0 - resolution: "ws@npm:8.16.0" + version: 8.17.0 + resolution: "ws@npm:8.17.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -25732,7 +25351,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: a7783bb421c648b1e622b423409cb2a58ac5839521d2f689e84bc9dc41d59379c692dd405b15a997ea1d4c0c2e5314ad707332d0c558f15232d2bc07c0b4618a + checksum: 55241ec93a66fdfc4bf4f8bc66c8eb038fda2c7a4ee8f6f157f2ca7dc7aa76aea0c0da0bf3adb2af390074a70a0e45456a2eaf80e581e630b75df10a64b0a990 languageName: node linkType: hard @@ -26044,17 +25663,17 @@ __metadata: linkType: hard "zod-to-json-schema@npm:^3.20.5": - version: 3.22.4 - resolution: "zod-to-json-schema@npm:3.22.4" + version: 3.23.0 + resolution: "zod-to-json-schema@npm:3.23.0" peerDependencies: - zod: ^3.22.4 - checksum: a949720c165347982a4abf5d612b78bebc2b5fb1217d22e20c024782ce6a9ae0baffe5deb6ba6f961ffa7b28b888c37f744bbfee6d7e9d74f2ec1f94d6968f0d + zod: ^3.23.3 + checksum: bcd966fa040765d7170a89c0c5f1717575e7d8823b84cbbb606689d494ae308c9eaadd4b71a74752e3170deef64c1f1bb2985f4663c44a0ed2e7854ff6fda724 languageName: node linkType: hard "zod@npm:^3.21.4": - version: 3.22.4 - resolution: "zod@npm:3.22.4" - checksum: 7578ab283dac0eee66a0ad0fc4a7f28c43e6745aadb3a529f59a4b851aa10872b3890398b3160f257f4b6817b4ce643debdda4fb21a2c040adda7862cab0a587 + version: 3.23.8 + resolution: "zod@npm:3.23.8" + checksum: 8f14c87d6b1b53c944c25ce7a28616896319d95bc46a9660fe441adc0ed0a81253b02b5abdaeffedbeb23bdd25a0bf1c29d2c12dd919aef6447652dd295e3e69 languageName: node linkType: hard From 16eabd820382321e180309bc56d7f781159a663c Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 17 May 2024 22:55:47 -0300 Subject: [PATCH 021/343] fix: merge conflicts errors --- .../contracts/staking/IHorizonStaking.sol | 152 ------------------ .../contracts/HorizonStakingExtension.sol | 3 +- .../contracts/payments/GraphPayments.sol | 2 +- 3 files changed, 3 insertions(+), 154 deletions(-) delete mode 100644 packages/contracts/contracts/staking/IHorizonStaking.sol diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol deleted file mode 100644 index d55520db5..000000000 --- a/packages/contracts/contracts/staking/IHorizonStaking.sol +++ /dev/null @@ -1,152 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity >=0.7.6 <0.9.0; -pragma abicoder v2; - -interface Test { - function test() external returns (uint256); -} - -interface IHorizonStaking { - struct Provision { - // Service provider that created the provision - address serviceProvider; - // tokens in the provision - uint256 tokens; - // tokens that are being thawed (and will stop being slashable soon) - uint256 tokensThawing; - // timestamp of provision creation - uint64 createdAt; - // authority to slash the provision - address verifier; - // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed - uint32 maxVerifierCut; - // time, in seconds, tokens must thaw before being withdrawn - uint64 thawingPeriod; - } - - // the new "Indexer" struct - struct ServiceProviderInternal { - // Tokens on the Service Provider stake (staked by the provider) - uint256 tokensStaked; - // Tokens used in allocations - uint256 __DEPRECATED_tokensAllocated; - // Tokens locked for withdrawal subject to thawing period - uint256 __DEPRECATED_tokensLocked; - // Block when locked tokens can be withdrawn - uint256 __DEPRECATED_tokensLockedUntil; - // tokens used in a provision - uint256 tokensProvisioned; - // tokens that initiated a thawing in any one of the provider's provisions - uint256 tokensRequestedThaw; - // tokens that have been removed from any one of the provider's provisions after thawing - uint256 tokensFulfilledThaw; - // provisions that take priority for undelegation force thawing - bytes32[] forceThawProvisions; - } - - struct ServiceProvider { - // Tokens on the provider stake (staked by the provider) - uint256 tokensStaked; - // tokens used in a provision - uint256 tokensProvisioned; - // tokens that initiated a thawing in any one of the provider's provisions - uint256 tokensRequestedThaw; - // tokens that have been removed from any one of the provider's provisions after thawing - uint256 tokensFulfilledThaw; - // provisions that take priority for undelegation force thawing - bytes32[] forceThawProvisions; - } - - struct DelegationPool { - uint32 __DEPRECATED_cooldownBlocks; // solhint-disable-line var-name-mixedcase - uint32 __DEPRECATED_indexingRewardCut; // in PPM - uint32 __DEPRECATED_queryFeeCut; // in PPM - uint256 __DEPRECATED_updatedAtBlock; // Block when the pool was last updated - uint256 tokens; // Total tokens as pool reserves - uint256 shares; // Total shares minted in the pool - mapping(address => Delegation) delegators; // Mapping of delegator => Delegation - } - - struct Delegation { - // shares owned by the delegator in the pool - uint256 shares; - // tokens delegated to the pool - uint256 tokens; - // Timestamp when locked tokens can be undelegated (after the timelock) - uint256 tokensLockedUntil; - } - - struct ThawRequest { - // tokens that are being thawed by this request - uint256 tokens; - // the provision id to which this request corresponds to - bytes32 provisionId; - // the address that initiated the thaw request, allowed to remove the funds once thawed - address owner; - // the timestamp when the thawed funds can be removed from the provision - uint64 thawingUntil; - // the value of `ServiceProvider.tokensRequestedThaw` the moment the thaw request is created - uint256 tokensRequestedThawSnapshot; - } - - // whitelist/deny a verifier - function allowVerifier(address verifier, bool allow) external; - - // deposit stake - function stake(uint256 tokens) external; - - // create a provision - function provision(uint256 tokens, address verifier, uint256 maxVerifierCut, uint256 thawingPeriod) external; - - // initiate a thawing to remove tokens from a provision - function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32 thawRequestId); - - // moves thawed stake from a provision back into the provider's available stake - function deprovision(bytes32 thawRequestId) external; - - // moves thawed stake from one provision into another provision - function reprovision(bytes32 thawRequestId, bytes32 provisionId) external; - - // moves thawed stake back to the owner's account - stake is removed from the protocol - function withdraw(bytes32 thawRequestId) external; - - // delegate tokens to a provider - function delegate(address serviceProvider, uint256 tokens) external; - - // undelegate tokens - function undelegate( - address serviceProvider, - uint256 tokens, - bytes32[] calldata provisions - ) external returns (bytes32 thawRequestId); - - // slash a service provider - function slash(bytes32 provisionId, uint256 tokens, uint256 verifierAmount) external; - - // set the Service Provider's preferred provisions to be force thawed - function setForceThawProvisions(bytes32[] calldata provisions) external; - - // total staked tokens to the provider - // `ServiceProvider.tokensStaked + DelegationPool.serviceProvider.tokens` - function getStake(address serviceProvider) external view returns (uint256 tokens); - - // staked tokens that are currently not provisioned, aka idle stake - // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address serviceProvider) external view returns (uint256 tokens); - - // staked tokens the provider can provision before hitting the delegation cap - // `ServiceProvider.tokensStaked * Staking.delegationRatio - Provision.tokensProvisioned` - function getCapacity(address serviceProvider) external view returns (uint256 tokens); - - // provisioned tokens that are not being used - // `Provision.tokens - Provision.tokensThawing` - function getTokensAvailable(bytes32 provision) external view returns (uint256 tokens); - - function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory); - - function getProvision(bytes32 provision) external view returns (Provision memory); - - function getDelegationCut(address serviceProvider, uint8 paymentType) external view returns (uint256 delegationCut); - function addToDelegationPool(address serviceProvider, uint256 tokens) external; -} diff --git a/packages/horizon/contracts/HorizonStakingExtension.sol b/packages/horizon/contracts/HorizonStakingExtension.sol index 890e34cd8..1ec8b2c45 100644 --- a/packages/horizon/contracts/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/HorizonStakingExtension.sol @@ -8,7 +8,8 @@ import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/I import { IHorizonStakingExtension } from "./IHorizonStakingExtension.sol"; import { MathUtils } from "./utils/MathUtils.sol"; -act +/** + * @title L2Staking contract * @dev This contract is the L2 variant of the Staking contract. It adds a function * to receive an indexer's stake or delegation from L1. Note that this contract inherits Staking, * which uses a StakingExtension contract to implement the full IStaking interface through delegatecalls. diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index f47ac1414..652183fd3 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -8,7 +8,7 @@ import { GraphDirectory } from "../GraphDirectory.sol"; import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; import { TokenUtils } from "../utils/TokenUtils.sol"; -aphPayments, GraphPaymentsStorageV1Storage, GraphDirectory { +contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDirectory { // -- Errors -- error GraphPaymentsNotThawing(); From 06d8308ebf2a1e913c5e8a4b05e27fdcf813dcd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 20 May 2024 11:52:26 -0300 Subject: [PATCH 022/343] chore: turn solhint plugin into package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- README.md | 3 +- package.json | 1 + packages/solhint-graph-config/package.json | 3 +- .../plugin => solhint-plugin-graph}/index.js | 0 .../package.json | 4 +- packages/subgraph-service/package.json | 2 +- yarn.lock | 50 ++++++++----------- 7 files changed, 29 insertions(+), 34 deletions(-) rename packages/{solhint-graph-config/plugin => solhint-plugin-graph}/index.js (100%) rename packages/{solhint-graph-config/plugin => solhint-plugin-graph}/package.json (69%) diff --git a/README.md b/README.md index d9b46bb52..eb1b61d06 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,8 @@ This repository is a Yarn workspaces monorepo containing the following packages: | [eslint-graph-config](./packages/eslint-graph-config) | [![npm version]()]() | Shared linting and formatting rules for TypeScript projects. | | [horizon](./packages/horizon) | [![npm version]()]() | Contracts for Graph Horizon, the next iteration of The Graph protocol. | | [sdk](./packages/sdk) | [![npm version](https://badge.fury.io/js/@graphprotocol%2Fsdk.svg)](https://badge.fury.io/js/@graphprotocol%2Fsdk) | TypeScript based SDK to interact with the protocol contracts | -| [solhint-graph-config](./packages/eslint-graph-config) | [![npm version]()]() | Shared linting and formatting rules for Solidity projects. | +| [solhint-graph-config](./packages/solhint-graph-config) | [![npm version]()]() | Shared linting and formatting rules for Solidity projects. | +| [solhint-plugin-graph](./packages/solhint-plugin-graph) | [![npm version]()]() | Plugin for Solhint with specific Graph linting rules. | | [subgraph-service](./packages/subgraph-service) | [![npm version]()]() | Contracts for the Subgraph data service in Graph Horizon. | | [token-distribution](./packages/token-distribution) | - | Contracts managing token locks for network participants | diff --git a/package.json b/package.json index 126006c96..6b82fd5a4 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "packages/horizon", "packages/sdk", "packages/solhint-graph-config", + "packages/solhint-plugin-graph", "packages/subgraph-service", "packages/token-distribution" ], diff --git a/packages/solhint-graph-config/package.json b/packages/solhint-graph-config/package.json index d976b3cb9..5b516ed58 100644 --- a/packages/solhint-graph-config/package.json +++ b/packages/solhint-graph-config/package.json @@ -1,12 +1,13 @@ { "name": "solhint-graph-config", + "private": true, "version": "0.0.1", "description": "Linting and formatting rules for The Graph's Solidity projects", "main": "index.js", "author": "The Graph Team", "license": "GPL-2.0-or-later", "dependencies": { - "solhint-plugin-graph": "file:plugin" + "solhint-plugin-graph": "workspace:*" }, "peerDependencies": { "prettier": "^3.2.5", diff --git a/packages/solhint-graph-config/plugin/index.js b/packages/solhint-plugin-graph/index.js similarity index 100% rename from packages/solhint-graph-config/plugin/index.js rename to packages/solhint-plugin-graph/index.js diff --git a/packages/solhint-graph-config/plugin/package.json b/packages/solhint-plugin-graph/package.json similarity index 69% rename from packages/solhint-graph-config/plugin/package.json rename to packages/solhint-plugin-graph/package.json index 53bab497d..1b1c0f568 100644 --- a/packages/solhint-graph-config/plugin/package.json +++ b/packages/solhint-plugin-graph/package.json @@ -1,5 +1,5 @@ { "name": "solhint-plugin-graph", - "version": "0.0.0", + "version": "0.0.1", "private": true -} \ No newline at end of file +} diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index f66d229de..144263417 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -39,7 +39,7 @@ "prettier-plugin-solidity": "^1.3.1", "solhint": "^4.5.4", "solhint-graph-config": "workspace:^0.0.1", - "solhint-plugin-graph": "file:node_modules/solhint-graph-config/plugin", + "solhint-plugin-graph": "workspace:^0.0.1", "solidity-coverage": "^0.8.0", "solidity-docgen": "^0.6.0-beta.36", "ts-node": ">=8.0.0", diff --git a/yarn.lock b/yarn.lock index 1e14c7d52..bed525f83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -863,8 +863,8 @@ __metadata: linkType: hard "@changesets/cli@npm:^2.27.1": - version: 2.27.2 - resolution: "@changesets/cli@npm:2.27.2" + version: 2.27.3 + resolution: "@changesets/cli@npm:2.27.3" dependencies: "@babel/runtime": "npm:^7.20.1" "@changesets/apply-release-plan": "npm:^7.0.1" @@ -900,7 +900,7 @@ __metadata: tty-table: "npm:^4.1.5" bin: changeset: bin.js - checksum: c2fd356b235bb27de0267389af38bca356d1c61892d0d3e114cec2e628aa6e7aadfe1828d9024b9c7d8005c3b968760ab4d781d4ce3a04309d5263d710341bec + checksum: fee10ae204926dbf4847111bf49ca93dc5b43a55b48635e2e08e71ab8442cf414c8165ae11174d6366ef12305274ea1b75beb14ca74b9a766d82b8c32148199b languageName: node linkType: hard @@ -3024,7 +3024,7 @@ __metadata: prettier-plugin-solidity: "npm:^1.3.1" solhint: "npm:^4.5.4" solhint-graph-config: "workspace:^0.0.1" - solhint-plugin-graph: "file:node_modules/solhint-graph-config/plugin" + solhint-plugin-graph: "workspace:^0.0.1" solidity-coverage: "npm:^0.8.0" solidity-docgen: "npm:^0.6.0-beta.36" ts-node: "npm:>=8.0.0" @@ -4766,28 +4766,28 @@ __metadata: linkType: hard "@openzeppelin/defender-admin-client@npm:^1.46.0": - version: 1.54.2 - resolution: "@openzeppelin/defender-admin-client@npm:1.54.2" + version: 1.54.4 + resolution: "@openzeppelin/defender-admin-client@npm:1.54.4" dependencies: - "@openzeppelin/defender-base-client": "npm:1.54.2" + "@openzeppelin/defender-base-client": "npm:1.54.4" axios: "npm:^1.4.0" ethers: "npm:^5.7.2" lodash: "npm:^4.17.19" node-fetch: "npm:^2.6.0" - checksum: fff2a74f840168d65a7cc51992610c199eb0d2b54b63f84060dded898d2730e0b008b3f492251ec99a697d45e69987a203ee005b5912e51a2786407755e3e53f + checksum: a44439ebde420aa35b36db7c2845978dd099e0fb6edc394e7b65be67ec1135e99ccc8059e78cb70c8a8fd5598ba40d082648664af95f9cb97a7673c075f64abb languageName: node linkType: hard -"@openzeppelin/defender-base-client@npm:1.54.2, @openzeppelin/defender-base-client@npm:^1.46.0": - version: 1.54.2 - resolution: "@openzeppelin/defender-base-client@npm:1.54.2" +"@openzeppelin/defender-base-client@npm:1.54.4, @openzeppelin/defender-base-client@npm:^1.46.0": + version: 1.54.4 + resolution: "@openzeppelin/defender-base-client@npm:1.54.4" dependencies: amazon-cognito-identity-js: "npm:^6.0.1" async-retry: "npm:^1.3.3" axios: "npm:^1.4.0" lodash: "npm:^4.17.19" node-fetch: "npm:^2.6.0" - checksum: b30c5c5ed47ed0ff788025abd0cdfc816fdbd49065c221be7e760385e5cbf5b05488ed1cfb040c5cbe0a1ca6cc6af035dc88a6e5b2c09fb9ae4ae048493014bd + checksum: 636614a8012cfbbe065b8ccc3ef6a16635e2f1b48f7421242de81f74def99a51795464e9a2bd02e7305ff32b339a8847d7733452e6fe7810d4badd0c2086c38f languageName: node linkType: hard @@ -7215,13 +7215,13 @@ __metadata: linkType: hard "axios@npm:^1.4.0, axios@npm:^1.5.1": - version: 1.6.8 - resolution: "axios@npm:1.6.8" + version: 1.7.1 + resolution: "axios@npm:1.7.1" dependencies: follow-redirects: "npm:^1.15.6" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: 0f22da6f490335479a89878bc7d5a1419484fbb437b564a80c34888fc36759ae4f56ea28d55a191695e5ed327f0bad56e7ff60fb6770c14d1be6501505d47ab9 + checksum: 554395472f18f4ddb43b4be2900473bc1a4d589464a8ab16f6954c53d9cace4317d5c9e009d5bb05f098d9565b2fa45f152a5d4cecb87536c8f0c370c25a7770 languageName: node linkType: hard @@ -21783,7 +21783,7 @@ __metadata: version: 0.0.0-use.local resolution: "solhint-graph-config@workspace:packages/solhint-graph-config" dependencies: - solhint-plugin-graph: "file:plugin" + solhint-plugin-graph: "workspace:*" peerDependencies: prettier: ^3.2.5 prettier-plugin-solidity: ^1.3.1 @@ -21791,19 +21791,11 @@ __metadata: languageName: unknown linkType: soft -"solhint-plugin-graph@file:node_modules/solhint-graph-config/plugin::locator=%40graphprotocol%2Fsubgraph-service%40workspace%3Apackages%2Fsubgraph-service": - version: 0.0.0 - resolution: "solhint-plugin-graph@file:node_modules/solhint-graph-config/plugin#node_modules/solhint-graph-config/plugin::hash=37bdb1&locator=%40graphprotocol%2Fsubgraph-service%40workspace%3Apackages%2Fsubgraph-service" - checksum: f77aeda80dc6f8bb93376c3b05e910874038e701793f7805e9937f0047e68d3ac8595d915a4cb12dd974c49851d2b0fdf94742b0b2865cd7bf7e3a630177dfea - languageName: node - linkType: hard - -"solhint-plugin-graph@file:plugin::locator=solhint-graph-config%40workspace%3Apackages%2Fsolhint-graph-config": - version: 0.0.0 - resolution: "solhint-plugin-graph@file:plugin#plugin::hash=37bdb1&locator=solhint-graph-config%40workspace%3Apackages%2Fsolhint-graph-config" - checksum: f77aeda80dc6f8bb93376c3b05e910874038e701793f7805e9937f0047e68d3ac8595d915a4cb12dd974c49851d2b0fdf94742b0b2865cd7bf7e3a630177dfea - languageName: node - linkType: hard +"solhint-plugin-graph@workspace:*, solhint-plugin-graph@workspace:^0.0.1, solhint-plugin-graph@workspace:packages/solhint-plugin-graph": + version: 0.0.0-use.local + resolution: "solhint-plugin-graph@workspace:packages/solhint-plugin-graph" + languageName: unknown + linkType: soft "solhint-plugin-prettier@npm:^0.1.0": version: 0.1.0 From 7aa37984931aa5686721df975cdd8d71f37edb6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 20 May 2024 14:23:47 -0300 Subject: [PATCH 023/343] chore: move data service framework, rework file structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/contracts/SimpleTest.sol | 10 ------ .../contracts/data-service/DataService.sol | 4 +-- .../data-service/DataServiceStorage.sol | 0 .../contracts/data-service/GraphDirectory.sol | 2 +- .../extensions/DataServiceFees.sol | 6 ++-- .../extensions/DataServiceFeesStorage.sol | 2 ++ .../extensions/DataServicePausable.sol | 0 .../extensions/DataServiceRescuable.sol | 2 +- .../extensions/IDataServiceFees.sol | 2 +- .../extensions/IDataServicePausable.sol | 2 +- .../extensions/IDataServiceRescuable.sol | 2 +- .../libraries/ProvisionGetter.sol | 2 +- .../libraries/ProvisionTracker.sol | 12 ++++--- .../utilities/ProvisionManager.sol | 10 +++--- .../utilities/ProvisionManagerStorage.sol | 0 .../contracts/interfaces}/IDataService.sol | 2 +- .../contracts/interfaces/IGraphEscrow.sol | 0 .../contracts/interfaces/IGraphPayments.sol | 0 .../{ => interfaces}/IGraphToken.sol | 2 +- .../{ => interfaces}/IHorizonStaking.sol | 0 .../{ => interfaces}/IHorizonStakingBase.sol | 0 .../IHorizonStakingExtension.sol | 0 .../{ => interfaces}/IHorizonStakingTypes.sol | 0 .../contracts/{ => interfaces}/IManaged.sol | 0 .../IStakingBackwardsCompatibility.sol | 0 .../contracts/interfaces/ITAPVerifier.sol | 0 .../contracts}/libraries/Denominations.sol | 0 .../{utils => libraries}/LibFixedMath.sol | 0 .../{utils => libraries}/MathUtils.sol | 0 .../contracts}/libraries/PPMMath.sol | 0 .../{utils => libraries}/TokenUtils.sol | 2 +- .../contracts}/libraries/UintRange.sol | 0 .../payments/collectors}/TAPVerifier.sol | 2 +- .../{ => staking}/HorizonStaking.sol | 11 ++++--- .../{ => staking}/HorizonStakingExtension.sol | 13 ++++---- .../{ => staking}/HorizonStakingStorage.sol | 7 +++-- .../StakingBackwardsCompatibility.sol | 31 +++++++------------ .../libraries}/ExponentialRebates.sol | 4 +-- .../{ => staking/utilities}/Managed.sol | 5 +-- packages/horizon/scripts/deploy.ts | 28 ----------------- packages/horizon/test/HorizonStaking.t.sol | 12 +++---- packages/horizon/test/HorizonStaking.ts | 4 +-- packages/horizon/test/SimpleTest.t.sol | 17 ---------- packages/horizon/test/SimpleTest.ts | 23 -------------- .../contracts/DisputeManager.sol | 12 ++++--- .../contracts/SubgraphService.sol | 22 ++++++------- .../contracts/SubgraphServiceStorage.sol | 2 +- .../contracts/interfaces/ISubgraphService.sol | 4 +-- .../contracts/utilities/AllocationManager.sol | 26 ++++++++++------ .../contracts/utilities/Directory.sol | 2 +- packages/subgraph-service/package.json | 1 + packages/subgraph-service/remappings.txt | 1 + .../test/mocks/MockHorizonStaking.sol | 24 ++++++++------ yarn.lock | 3 +- 54 files changed, 127 insertions(+), 189 deletions(-) delete mode 100644 packages/horizon/contracts/SimpleTest.sol rename packages/{subgraph-service => horizon}/contracts/data-service/DataService.sol (96%) rename packages/{subgraph-service => horizon}/contracts/data-service/DataServiceStorage.sol (100%) rename packages/{subgraph-service => horizon}/contracts/data-service/GraphDirectory.sol (96%) rename packages/{subgraph-service => horizon}/contracts/data-service/extensions/DataServiceFees.sol (98%) rename packages/{subgraph-service => horizon}/contracts/data-service/extensions/DataServiceFeesStorage.sol (96%) rename packages/{subgraph-service => horizon}/contracts/data-service/extensions/DataServicePausable.sol (100%) rename packages/{subgraph-service => horizon}/contracts/data-service/extensions/DataServiceRescuable.sol (97%) rename packages/{subgraph-service => horizon}/contracts/data-service/extensions/IDataServiceFees.sol (91%) rename packages/{subgraph-service => horizon}/contracts/data-service/extensions/IDataServicePausable.sol (73%) rename packages/{subgraph-service => horizon}/contracts/data-service/extensions/IDataServiceRescuable.sol (79%) rename packages/{subgraph-service => horizon}/contracts/data-service/libraries/ProvisionGetter.sol (87%) rename packages/{subgraph-service => horizon}/contracts/data-service/libraries/ProvisionTracker.sol (82%) rename packages/{subgraph-service => horizon}/contracts/data-service/utilities/ProvisionManager.sol (95%) rename packages/{subgraph-service => horizon}/contracts/data-service/utilities/ProvisionManagerStorage.sol (100%) rename packages/{subgraph-service/contracts/data-service => horizon/contracts/interfaces}/IDataService.sol (99%) rename packages/{subgraph-service => horizon}/contracts/interfaces/IGraphEscrow.sol (100%) rename packages/{subgraph-service => horizon}/contracts/interfaces/IGraphPayments.sol (100%) rename packages/horizon/contracts/{ => interfaces}/IGraphToken.sol (93%) rename packages/horizon/contracts/{ => interfaces}/IHorizonStaking.sol (100%) rename packages/horizon/contracts/{ => interfaces}/IHorizonStakingBase.sol (100%) rename packages/horizon/contracts/{ => interfaces}/IHorizonStakingExtension.sol (100%) rename packages/horizon/contracts/{ => interfaces}/IHorizonStakingTypes.sol (100%) rename packages/horizon/contracts/{ => interfaces}/IManaged.sol (100%) rename packages/horizon/contracts/{ => interfaces}/IStakingBackwardsCompatibility.sol (100%) rename packages/{subgraph-service => horizon}/contracts/interfaces/ITAPVerifier.sol (100%) rename packages/{subgraph-service/contracts/data-service => horizon/contracts}/libraries/Denominations.sol (100%) rename packages/horizon/contracts/{utils => libraries}/LibFixedMath.sol (100%) rename packages/horizon/contracts/{utils => libraries}/MathUtils.sol (100%) rename packages/{subgraph-service/contracts/data-service => horizon/contracts}/libraries/PPMMath.sol (100%) rename packages/horizon/contracts/{utils => libraries}/TokenUtils.sol (96%) rename packages/{subgraph-service/contracts/data-service => horizon/contracts}/libraries/UintRange.sol (100%) rename packages/{subgraph-service/contracts => horizon/contracts/payments/collectors}/TAPVerifier.sol (99%) rename packages/horizon/contracts/{ => staking}/HorizonStaking.sol (99%) rename packages/horizon/contracts/{ => staking}/HorizonStakingExtension.sol (97%) rename packages/horizon/contracts/{ => staking}/HorizonStakingStorage.sol (96%) rename packages/horizon/contracts/{ => staking}/StakingBackwardsCompatibility.sol (96%) rename packages/horizon/contracts/{utils => staking/libraries}/ExponentialRebates.sol (96%) rename packages/horizon/contracts/{ => staking/utilities}/Managed.sol (96%) delete mode 100644 packages/horizon/scripts/deploy.ts delete mode 100644 packages/horizon/test/SimpleTest.t.sol delete mode 100644 packages/horizon/test/SimpleTest.ts diff --git a/packages/horizon/contracts/SimpleTest.sol b/packages/horizon/contracts/SimpleTest.sol deleted file mode 100644 index 5cc28d9cc..000000000 --- a/packages/horizon/contracts/SimpleTest.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.4.0 <0.9.0; - -import { Test } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; - -contract SimpleTest is Test { - function test() external pure returns (uint256) { - return 42; - } -} diff --git a/packages/subgraph-service/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol similarity index 96% rename from packages/subgraph-service/contracts/data-service/DataService.sol rename to packages/horizon/contracts/data-service/DataService.sol index 52f1e25b5..f256cbba7 100644 --- a/packages/subgraph-service/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IDataService } from "./IDataService.sol"; +import { IDataService } from "../interfaces/IDataService.sol"; -import { GraphDirectory } from "./GraphDirectory.sol"; import { DataServiceV1Storage } from "./DataServiceStorage.sol"; +import { GraphDirectory } from "./GraphDirectory.sol"; import { ProvisionManager } from "./utilities/ProvisionManager.sol"; /** diff --git a/packages/subgraph-service/contracts/data-service/DataServiceStorage.sol b/packages/horizon/contracts/data-service/DataServiceStorage.sol similarity index 100% rename from packages/subgraph-service/contracts/data-service/DataServiceStorage.sol rename to packages/horizon/contracts/data-service/DataServiceStorage.sol diff --git a/packages/subgraph-service/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol similarity index 96% rename from packages/subgraph-service/contracts/data-service/GraphDirectory.sol rename to packages/horizon/contracts/data-service/GraphDirectory.sol index f35a7a663..b79d7de52 100644 --- a/packages/subgraph-service/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.24; import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; -import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; // import { IGraphTokenGateway } from "@graphprotocol/contracts/contracts/gateway/IGraphTokenGateway.sol"; import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; diff --git a/packages/subgraph-service/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol similarity index 98% rename from packages/subgraph-service/contracts/data-service/extensions/DataServiceFees.sol rename to packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 583f01efa..3978d9a48 100644 --- a/packages/subgraph-service/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -4,11 +4,11 @@ pragma solidity ^0.8.24; import { IDataServiceFees } from "./IDataServiceFees.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; +import { ProvisionTracker } from "../libraries/ProvisionTracker.sol"; + import { DataService } from "../DataService.sol"; import { DataServiceFeesV1Storage } from "./DataServiceFeesStorage.sol"; -import { ProvisionTracker } from "../libraries/ProvisionTracker.sol"; - abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees { using ProvisionTracker for mapping(address => uint256); @@ -66,7 +66,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat uint256 _tokens, uint256 _unlockTimestamp ) internal { - feesProvisionTracker[_feeType].lock(GRAPH_STAKING, _serviceProvider, _tokens); + feesProvisionTracker[_feeType].lock(GRAPH_STAKING, _serviceProvider, _tokens, delegationRatio); StakeClaimsList storage claimsList = claimsLists[_feeType][_serviceProvider]; bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce); diff --git a/packages/subgraph-service/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol similarity index 96% rename from packages/subgraph-service/contracts/data-service/extensions/DataServiceFeesStorage.sol rename to packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index 4296a952a..d64f99239 100644 --- a/packages/subgraph-service/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -15,6 +15,8 @@ abstract contract DataServiceFeesV1Storage { mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => IDataServiceFees.StakeClaimsList list)) public claimsLists; + uint32 public delegationRatio; + /// @dev Gap to allow adding variables in future upgrades uint256[50] private __gap; } diff --git a/packages/subgraph-service/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol similarity index 100% rename from packages/subgraph-service/contracts/data-service/extensions/DataServicePausable.sol rename to packages/horizon/contracts/data-service/extensions/DataServicePausable.sol diff --git a/packages/subgraph-service/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol similarity index 97% rename from packages/subgraph-service/contracts/data-service/extensions/DataServiceRescuable.sol rename to packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index 7e6120783..76a25162a 100644 --- a/packages/subgraph-service/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -6,7 +6,7 @@ import { IDataServiceRescuable } from "./IDataServiceRescuable.sol"; import { DataService } from "../DataService.sol"; -import { Denominations } from "../libraries/Denominations.sol"; +import { Denominations } from "../../libraries/Denominations.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; /** diff --git a/packages/subgraph-service/contracts/data-service/extensions/IDataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol similarity index 91% rename from packages/subgraph-service/contracts/data-service/extensions/IDataServiceFees.sol rename to packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol index 36caf73f1..fe75755fe 100644 --- a/packages/subgraph-service/contracts/data-service/extensions/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IDataService } from "../IDataService.sol"; +import { IDataService } from "../../interfaces/IDataService.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; interface IDataServiceFees is IDataService { diff --git a/packages/subgraph-service/contracts/data-service/extensions/IDataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol similarity index 73% rename from packages/subgraph-service/contracts/data-service/extensions/IDataServicePausable.sol rename to packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol index 5b2940d6c..302e8a67e 100644 --- a/packages/subgraph-service/contracts/data-service/extensions/IDataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IDataService } from "../IDataService.sol"; +import { IDataService } from "../../interfaces/IDataService.sol"; interface IDataServicePausable is IDataService { function pause() external; diff --git a/packages/subgraph-service/contracts/data-service/extensions/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol similarity index 79% rename from packages/subgraph-service/contracts/data-service/extensions/IDataServiceRescuable.sol rename to packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol index 36ad6d68f..ee379315c 100644 --- a/packages/subgraph-service/contracts/data-service/extensions/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IDataService } from "../IDataService.sol"; +import { IDataService } from "../../interfaces/IDataService.sol"; interface IDataServiceRescuable is IDataService { function rescueGRT(address to, uint256 amount) external; diff --git a/packages/subgraph-service/contracts/data-service/libraries/ProvisionGetter.sol b/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol similarity index 87% rename from packages/subgraph-service/contracts/data-service/libraries/ProvisionGetter.sol rename to packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol index 4de039012..6fdf1e2c4 100644 --- a/packages/subgraph-service/contracts/data-service/libraries/ProvisionGetter.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; library ProvisionGetter { using ProvisionGetter for IHorizonStaking.Provision; diff --git a/packages/subgraph-service/contracts/data-service/libraries/ProvisionTracker.sol b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol similarity index 82% rename from packages/subgraph-service/contracts/data-service/libraries/ProvisionTracker.sol rename to packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol index 216bbe3dc..f0acc7f89 100644 --- a/packages/subgraph-service/contracts/data-service/libraries/ProvisionTracker.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; library ProvisionTracker { error ProvisionTrackerInsufficientTokens(uint256 tokensAvailable, uint256 tokensRequired); @@ -10,12 +10,13 @@ library ProvisionTracker { mapping(address => uint256) storage self, IHorizonStaking graphStaking, address serviceProvider, - uint256 tokens + uint256 tokens, + uint32 delegationRatio ) internal { if (tokens == 0) return; uint256 tokensRequired = self[serviceProvider] + tokens; - uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this)); + uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio); if (tokensRequired > tokensAvailable) { revert ProvisionTrackerInsufficientTokens(tokensAvailable, tokensRequired); } @@ -34,9 +35,10 @@ library ProvisionTracker { function getTokensFree( mapping(address => uint256) storage self, IHorizonStaking graphStaking, - address serviceProvider + address serviceProvider, + uint32 delegationRatio ) internal view returns (uint256) { - uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this)); + uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio); if (tokensAvailable >= self[serviceProvider]) return tokensAvailable - self[serviceProvider]; else return 0; } diff --git a/packages/subgraph-service/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol similarity index 95% rename from packages/subgraph-service/contracts/data-service/utilities/ProvisionManager.sol rename to packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 581cff131..dd9d2677f 100644 --- a/packages/subgraph-service/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; + +import { ProvisionGetter } from "../libraries/ProvisionGetter.sol"; +import { UintRange } from "../../libraries/UintRange.sol"; import { GraphDirectory } from "../GraphDirectory.sol"; import { ProvisionManagerV1Storage } from "./ProvisionManagerStorage.sol"; -import { ProvisionGetter } from "../libraries/ProvisionGetter.sol"; -import { UintRange } from "../libraries/UintRange.sol"; - abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage { using ProvisionGetter for IHorizonStaking; using UintRange for uint256; @@ -50,7 +50,7 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage function _checkAndAcceptProvision(address _serviceProvider) internal virtual { _checkProvisionParameters(_serviceProvider); - GRAPH_STAKING.acceptProvision(_serviceProvider); + GRAPH_STAKING.acceptProvisionParameters(_serviceProvider); } // -- Provision Parameters: setters -- diff --git a/packages/subgraph-service/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol similarity index 100% rename from packages/subgraph-service/contracts/data-service/utilities/ProvisionManagerStorage.sol rename to packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol diff --git a/packages/subgraph-service/contracts/data-service/IDataService.sol b/packages/horizon/contracts/interfaces/IDataService.sol similarity index 99% rename from packages/subgraph-service/contracts/data-service/IDataService.sol rename to packages/horizon/contracts/interfaces/IDataService.sol index 0e598b2cb..4064d4444 100644 --- a/packages/subgraph-service/contracts/data-service/IDataService.sol +++ b/packages/horizon/contracts/interfaces/IDataService.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { IGraphPayments } from "./IGraphPayments.sol"; /** * @title Interface of the base {DataService} contract as defined by the Graph Horizon specification. diff --git a/packages/subgraph-service/contracts/interfaces/IGraphEscrow.sol b/packages/horizon/contracts/interfaces/IGraphEscrow.sol similarity index 100% rename from packages/subgraph-service/contracts/interfaces/IGraphEscrow.sol rename to packages/horizon/contracts/interfaces/IGraphEscrow.sol diff --git a/packages/subgraph-service/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol similarity index 100% rename from packages/subgraph-service/contracts/interfaces/IGraphPayments.sol rename to packages/horizon/contracts/interfaces/IGraphPayments.sol diff --git a/packages/horizon/contracts/IGraphToken.sol b/packages/horizon/contracts/interfaces/IGraphToken.sol similarity index 93% rename from packages/horizon/contracts/IGraphToken.sol rename to packages/horizon/contracts/interfaces/IGraphToken.sol index fd0b0a553..27f68a0d2 100644 --- a/packages/horizon/contracts/IGraphToken.sol +++ b/packages/horizon/contracts/interfaces/IGraphToken.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.24; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IGraphToken is IERC20 { // -- Mint and Burn -- diff --git a/packages/horizon/contracts/IHorizonStaking.sol b/packages/horizon/contracts/interfaces/IHorizonStaking.sol similarity index 100% rename from packages/horizon/contracts/IHorizonStaking.sol rename to packages/horizon/contracts/interfaces/IHorizonStaking.sol diff --git a/packages/horizon/contracts/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol similarity index 100% rename from packages/horizon/contracts/IHorizonStakingBase.sol rename to packages/horizon/contracts/interfaces/IHorizonStakingBase.sol diff --git a/packages/horizon/contracts/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol similarity index 100% rename from packages/horizon/contracts/IHorizonStakingExtension.sol rename to packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol diff --git a/packages/horizon/contracts/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol similarity index 100% rename from packages/horizon/contracts/IHorizonStakingTypes.sol rename to packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol diff --git a/packages/horizon/contracts/IManaged.sol b/packages/horizon/contracts/interfaces/IManaged.sol similarity index 100% rename from packages/horizon/contracts/IManaged.sol rename to packages/horizon/contracts/interfaces/IManaged.sol diff --git a/packages/horizon/contracts/IStakingBackwardsCompatibility.sol b/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol similarity index 100% rename from packages/horizon/contracts/IStakingBackwardsCompatibility.sol rename to packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol diff --git a/packages/subgraph-service/contracts/interfaces/ITAPVerifier.sol b/packages/horizon/contracts/interfaces/ITAPVerifier.sol similarity index 100% rename from packages/subgraph-service/contracts/interfaces/ITAPVerifier.sol rename to packages/horizon/contracts/interfaces/ITAPVerifier.sol diff --git a/packages/subgraph-service/contracts/data-service/libraries/Denominations.sol b/packages/horizon/contracts/libraries/Denominations.sol similarity index 100% rename from packages/subgraph-service/contracts/data-service/libraries/Denominations.sol rename to packages/horizon/contracts/libraries/Denominations.sol diff --git a/packages/horizon/contracts/utils/LibFixedMath.sol b/packages/horizon/contracts/libraries/LibFixedMath.sol similarity index 100% rename from packages/horizon/contracts/utils/LibFixedMath.sol rename to packages/horizon/contracts/libraries/LibFixedMath.sol diff --git a/packages/horizon/contracts/utils/MathUtils.sol b/packages/horizon/contracts/libraries/MathUtils.sol similarity index 100% rename from packages/horizon/contracts/utils/MathUtils.sol rename to packages/horizon/contracts/libraries/MathUtils.sol diff --git a/packages/subgraph-service/contracts/data-service/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol similarity index 100% rename from packages/subgraph-service/contracts/data-service/libraries/PPMMath.sol rename to packages/horizon/contracts/libraries/PPMMath.sol diff --git a/packages/horizon/contracts/utils/TokenUtils.sol b/packages/horizon/contracts/libraries/TokenUtils.sol similarity index 96% rename from packages/horizon/contracts/utils/TokenUtils.sol rename to packages/horizon/contracts/libraries/TokenUtils.sol index 7bfc7203c..07b267451 100644 --- a/packages/horizon/contracts/utils/TokenUtils.sol +++ b/packages/horizon/contracts/libraries/TokenUtils.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.24; -import { IGraphToken } from "../IGraphToken.sol"; +import { IGraphToken } from "../interfaces/IGraphToken.sol"; /** * @title TokenUtils library diff --git a/packages/subgraph-service/contracts/data-service/libraries/UintRange.sol b/packages/horizon/contracts/libraries/UintRange.sol similarity index 100% rename from packages/subgraph-service/contracts/data-service/libraries/UintRange.sol rename to packages/horizon/contracts/libraries/UintRange.sol diff --git a/packages/subgraph-service/contracts/TAPVerifier.sol b/packages/horizon/contracts/payments/collectors/TAPVerifier.sol similarity index 99% rename from packages/subgraph-service/contracts/TAPVerifier.sol rename to packages/horizon/contracts/payments/collectors/TAPVerifier.sol index e7b3d5a7f..735cc38a0 100644 --- a/packages/subgraph-service/contracts/TAPVerifier.sol +++ b/packages/horizon/contracts/payments/collectors/TAPVerifier.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { ITAPVerifier } from "./interfaces/ITAPVerifier.sol"; +import { ITAPVerifier } from "../../interfaces/ITAPVerifier.sol"; import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; diff --git a/packages/horizon/contracts/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol similarity index 99% rename from packages/horizon/contracts/HorizonStaking.sol rename to packages/horizon/contracts/staking/HorizonStaking.sol index 7b97260be..883e1f611 100644 --- a/packages/horizon/contracts/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -3,12 +3,13 @@ pragma solidity 0.8.24; import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol"; +import { IHorizonStakingBase } from "../interfaces/IHorizonStakingBase.sol"; +import { IGraphToken } from "../interfaces/IGraphToken.sol"; -import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; -import { TokenUtils } from "./utils/TokenUtils.sol"; -import { MathUtils } from "./utils/MathUtils.sol"; -import { Managed } from "./Managed.sol"; -import { IGraphToken } from "./IGraphToken.sol"; +import { TokenUtils } from "../libraries/TokenUtils.sol"; +import { MathUtils } from "../libraries/MathUtils.sol"; + +import { Managed } from "./utilities/Managed.sol"; import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; /** diff --git a/packages/horizon/contracts/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol similarity index 97% rename from packages/horizon/contracts/HorizonStakingExtension.sol rename to packages/horizon/contracts/staking/HorizonStakingExtension.sol index 1ec8b2c45..0183e73f9 100644 --- a/packages/horizon/contracts/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -2,11 +2,13 @@ pragma solidity 0.8.24; -import { StakingBackwardsCompatibility } from "./StakingBackwardsCompatibility.sol"; import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; -import { IHorizonStakingExtension } from "./IHorizonStakingExtension.sol"; -import { MathUtils } from "./utils/MathUtils.sol"; +import { IHorizonStakingExtension } from "../interfaces/IHorizonStakingExtension.sol"; + +import { MathUtils } from "../libraries/MathUtils.sol"; + +import { StakingBackwardsCompatibility } from "./StakingBackwardsCompatibility.sol"; /** * @title L2Staking contract @@ -28,9 +30,8 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStaki constructor( address _controller, - address _subgraphDataServiceAddress, - address _exponentialRebates - ) StakingBackwardsCompatibility(_controller, _subgraphDataServiceAddress, _exponentialRebates) {} + address _subgraphDataServiceAddress + ) StakingBackwardsCompatibility(_controller, _subgraphDataServiceAddress) {} /** * @notice Receive ETH into the Staking contract: this will always revert diff --git a/packages/horizon/contracts/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol similarity index 96% rename from packages/horizon/contracts/HorizonStakingStorage.sol rename to packages/horizon/contracts/staking/HorizonStakingStorage.sol index 6506429a7..80e25f6ae 100644 --- a/packages/horizon/contracts/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -2,9 +2,10 @@ pragma solidity 0.8.24; -import { Managed } from "./Managed.sol"; -import { IStakingBackwardsCompatibility } from "./IStakingBackwardsCompatibility.sol"; -import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; +import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; +import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; + +import { Managed } from "./utilities/Managed.sol"; /** * @title HorizonStakingV1Storage diff --git a/packages/horizon/contracts/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol similarity index 96% rename from packages/horizon/contracts/StakingBackwardsCompatibility.sol rename to packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index 6e6261bd4..0d8c2749e 100644 --- a/packages/horizon/contracts/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -2,20 +2,20 @@ pragma solidity 0.8.24; -import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; +import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; +import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; +import { IGraphToken } from "../interfaces/IGraphToken.sol"; +import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; + +import { TokenUtils } from "../libraries/TokenUtils.sol"; +import { MathUtils } from "../libraries/MathUtils.sol"; +import { ExponentialRebates } from "./libraries/ExponentialRebates.sol"; import { Multicall } from "@graphprotocol/contracts/contracts/base/Multicall.sol"; import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol"; -import { TokenUtils } from "./utils/TokenUtils.sol"; -import { IGraphToken } from "./IGraphToken.sol"; +import { Managed } from "./utilities/Managed.sol"; import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; -import { MathUtils } from "./utils/MathUtils.sol"; -import { Managed } from "./Managed.sol"; -import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; -import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; -import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; -import { ExponentialRebates } from "./utils/ExponentialRebates.sol"; -import { IStakingBackwardsCompatibility } from "./IStakingBackwardsCompatibility.sol"; /** * @title Base Staking contract @@ -38,15 +38,8 @@ abstract contract StakingBackwardsCompatibility is address public immutable SUBGRAPH_DATA_SERVICE_ADDRESS; - address public immutable EXPONENTIAL_REBATES_ADDRESS; - - constructor( - address _controller, - address _subgraphDataServiceAddress, - address _exponentialRebatesAddress - ) Managed(_controller) { + constructor(address _controller, address _subgraphDataServiceAddress) Managed(_controller) { SUBGRAPH_DATA_SERVICE_ADDRESS = _subgraphDataServiceAddress; - EXPONENTIAL_REBATES_ADDRESS = _exponentialRebatesAddress; } /** @@ -128,7 +121,7 @@ abstract contract StakingBackwardsCompatibility is // No rebates if indexer has no stake or if lambda is zero uint256 newRebates = (alloc.tokens == 0 || __DEPRECATED_lambdaNumerator == 0) ? 0 - : ExponentialRebates(EXPONENTIAL_REBATES_ADDRESS).exponentialRebates( + : ExponentialRebates.exponentialRebates( alloc.collectedFees, alloc.tokens, __DEPRECATED_alphaNumerator, diff --git a/packages/horizon/contracts/utils/ExponentialRebates.sol b/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol similarity index 96% rename from packages/horizon/contracts/utils/ExponentialRebates.sol rename to packages/horizon/contracts/staking/libraries/ExponentialRebates.sol index d53efdca3..50579cafb 100644 --- a/packages/horizon/contracts/utils/ExponentialRebates.sol +++ b/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.24; -import { LibFixedMath } from "./LibFixedMath.sol"; +import { LibFixedMath } from "../../libraries/LibFixedMath.sol"; /** * @title ExponentialRebates contract @@ -10,7 +10,7 @@ import { LibFixedMath } from "./LibFixedMath.sol"; * @dev This is only used for backwards compatibility in HorizonStaking, and should * be removed after the transition period. */ -contract ExponentialRebates { +library ExponentialRebates { /// @dev Maximum value of the exponent for which to compute the exponential before clamping to zero. uint32 private constant MAX_EXPONENT = 15; diff --git a/packages/horizon/contracts/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol similarity index 96% rename from packages/horizon/contracts/Managed.sol rename to packages/horizon/contracts/staking/utilities/Managed.sol index 858156bbd..685c18184 100644 --- a/packages/horizon/contracts/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -3,8 +3,9 @@ pragma solidity 0.8.24; import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; -import { IManaged } from "./IManaged.sol"; -import { GraphDirectory } from "./GraphDirectory.sol"; +import { IManaged } from "../../interfaces/IManaged.sol"; + +import { GraphDirectory } from "../../GraphDirectory.sol"; /** * @title Graph Managed contract diff --git a/packages/horizon/scripts/deploy.ts b/packages/horizon/scripts/deploy.ts deleted file mode 100644 index cf87ff10f..000000000 --- a/packages/horizon/scripts/deploy.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ethers } from 'hardhat' - -async function main() { - const currentTimestampInSeconds = Math.round(Date.now() / 1000) - const unlockTime = currentTimestampInSeconds + 60 - - const lockedAmount = ethers.parseEther('0.001') - const a = 1 - console.log(a) - const lock = await ethers.deployContract('Lock', [unlockTime], { - value: lockedAmount, - }) - - await lock.waitForDeployment() - - console.log( - `Lock with ${ethers.formatEther( - lockedAmount, - )}ETH and unlock timestamp ${unlockTime} deployed to ${typeof lock.target == 'string' ? lock.target : ''}`, - ) -} - -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. -main().catch((error) => { - console.error(error) - process.exitCode = 1 -}) diff --git a/packages/horizon/test/HorizonStaking.t.sol b/packages/horizon/test/HorizonStaking.t.sol index 144b0c7a5..55088f0fe 100644 --- a/packages/horizon/test/HorizonStaking.t.sol +++ b/packages/horizon/test/HorizonStaking.t.sol @@ -3,14 +3,13 @@ pragma solidity 0.8.24; import "forge-std/Test.sol"; import "forge-std/console.sol"; -import { HorizonStaking } from "../contracts/HorizonStaking.sol"; +import { HorizonStaking } from "../contracts/staking/HorizonStaking.sol"; import { ControllerMock } from "../contracts/mocks/ControllerMock.sol"; -import { HorizonStakingExtension } from "../contracts/HorizonStakingExtension.sol"; -import { ExponentialRebates } from "../contracts/utils/ExponentialRebates.sol"; -import { IHorizonStaking } from "../contracts/IHorizonStaking.sol"; +import { HorizonStakingExtension } from "../contracts/staking/HorizonStakingExtension.sol"; +import { ExponentialRebates } from "../contracts/staking/libraries/ExponentialRebates.sol"; +import { IHorizonStaking } from "../contracts/interfaces/IHorizonStaking.sol"; contract HorizonStakingTest is Test { - ExponentialRebates rebates; HorizonStakingExtension ext; IHorizonStaking staking; ControllerMock controller; @@ -19,8 +18,7 @@ contract HorizonStakingTest is Test { console.log("Deploying Controller mock"); controller = new ControllerMock(address(0x1)); console.log("Deploying HorizonStaking"); - rebates = new ExponentialRebates(); - ext = new HorizonStakingExtension(address(controller), address(0x1), address(rebates)); + ext = new HorizonStakingExtension(address(controller), address(0x1)); staking = IHorizonStaking(address(new HorizonStaking(address(controller), address(ext), address(0x1)))); } diff --git a/packages/horizon/test/HorizonStaking.ts b/packages/horizon/test/HorizonStaking.ts index 6f6e1ad88..28eb281f7 100644 --- a/packages/horizon/test/HorizonStaking.ts +++ b/packages/horizon/test/HorizonStaking.ts @@ -16,8 +16,8 @@ describe('HorizonStaking', function () { const ExponentialRebates = await ethers.getContractFactory('ExponentialRebates') const exponentialRebates = await ExponentialRebates.deploy() await exponentialRebates.waitForDeployment() - const HorizonStakingExtension = await ethers.getContractFactory('HorizonStakingExtension') - const horizonStakingExtension = await HorizonStakingExtension.deploy(controller.target, ZeroAddress, exponentialRebates.target) + const HorizonStakingExtension = await ethers.getContractFactory('HorizonStakingExtension', { libraries: { ExponentialRebates: exponentialRebates.target } }) + const horizonStakingExtension = await HorizonStakingExtension.deploy(controller.target, ZeroAddress) await horizonStakingExtension.waitForDeployment() const HorizonStaking = await ethers.getContractFactory('HorizonStaking') const horizonStakingContract = await HorizonStaking.deploy(controller.target, horizonStakingExtension.target, ZeroAddress) diff --git a/packages/horizon/test/SimpleTest.t.sol b/packages/horizon/test/SimpleTest.t.sol deleted file mode 100644 index b130e5d34..000000000 --- a/packages/horizon/test/SimpleTest.t.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.10; - -import "forge-std/Test.sol"; -import { SimpleTest } from "../contracts/SimpleTest.sol"; - -contract ContractTest is Test { - SimpleTest simpleTest; - - function setUp() public { - simpleTest = new SimpleTest(); - } - - function test_NumberIs42() public { - assertEq(simpleTest.test(), 42); - } -} diff --git a/packages/horizon/test/SimpleTest.ts b/packages/horizon/test/SimpleTest.ts deleted file mode 100644 index cfcfb1443..000000000 --- a/packages/horizon/test/SimpleTest.ts +++ /dev/null @@ -1,23 +0,0 @@ -import hardhat from 'hardhat' - -import { expect } from 'chai' -import { loadFixture } from '@nomicfoundation/hardhat-toolbox/network-helpers' - -const ethers = hardhat.ethers - -describe('SimpleTest', function () { - async function deployFixture() { - const [owner] = await ethers.getSigners() - const SimpleTest = await ethers.getContractFactory('SimpleTest') - const simpleTest = await SimpleTest.deploy() - return { simpleTest, owner } - } - - describe('Deployment', function () { - it('Should return 42', async function () { - const { simpleTest } = await loadFixture(deployFixture) - - expect(await simpleTest.test()).to.equal(42) - }) - }) -}) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index dc5f785f2..e74ba0f0b 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -2,19 +2,19 @@ pragma solidity ^0.8.24; pragma abicoder v2; -import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; import { IDisputeManager } from "./interfaces/IDisputeManager.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { DisputeManagerV1Storage } from "./DisputeManagerStorage.sol"; -import { GraphDirectory } from "./data-service/GraphDirectory.sol"; +import { GraphDirectory } from "@graphprotocol/horizon/contracts/data-service/GraphDirectory.sol"; import { AttestationManager } from "./utilities/AttestationManager.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { Allocation } from "./libraries/Allocation.sol"; -import { PPMMath } from "./data-service/libraries/PPMMath.sol"; import { Attestation } from "./libraries/Attestation.sol"; /* @@ -670,7 +670,11 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM function _slashIndexer(address _indexer, uint256 _slashAmount) private returns (uint256 rewardsAmount) { // Get slashable amount for indexer IHorizonStaking.Provision memory provision = GRAPH_STAKING.getProvision(_indexer, address(subgraphService)); - uint256 totalProvisionTokens = provision.tokens + provision.delegatedTokens; // slashable tokens + IHorizonStaking.DelegationPool memory pool = GRAPH_STAKING.getDelegationPool( + _indexer, + address(subgraphService) + ); + uint256 totalProvisionTokens = provision.tokens + pool.tokens; // slashable tokens // Get slash amount uint256 maxSlashAmount = uint256(maxSlashingPercentage).mulPPM(totalProvisionTokens); diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 9489373ab..896314bf8 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -1,20 +1,20 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; +import { ITAPVerifier } from "@graphprotocol/horizon/contracts/interfaces/ITAPVerifier.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; -import { ITAPVerifier } from "./interfaces/ITAPVerifier.sol"; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; -import { DataService } from "./data-service/DataService.sol"; -import { DataServicePausable } from "./data-service/extensions/DataServicePausable.sol"; -import { DataServiceRescuable } from "./data-service/extensions/DataServiceRescuable.sol"; -import { DataServiceFees } from "./data-service/extensions/DataServiceFees.sol"; +import { DataServicePausable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausable.sol"; +import { DataService } from "@graphprotocol/horizon/contracts/data-service/DataService.sol"; +import { DataServiceRescuable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceRescuable.sol"; +import { DataServiceFees } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol"; import { Directory } from "./utilities/Directory.sol"; import { AllocationManager } from "./utilities/AllocationManager.sol"; import { SubgraphServiceV1Storage } from "./SubgraphServiceStorage.sol"; -import { PPMMath } from "./data-service/libraries/PPMMath.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { Allocation } from "./libraries/Allocation.sol"; import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; @@ -111,7 +111,7 @@ contract SubgraphService is data, (bytes32, uint256, address, bytes) ); - _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof); + _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof, delegationRatio); emit ServiceStarted(indexer); } @@ -138,7 +138,7 @@ contract SubgraphService is address allocationId, uint256 tokens ) external onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { - _resizeAllocation(allocationId, tokens); + _resizeAllocation(allocationId, tokens, delegationRatio); } // TODO: Does this design allow custom payment types?! @@ -184,8 +184,8 @@ contract SubgraphService is return legacyAllocations[allocationId]; } - function encodeAllocationProof(address _indexer, address _allocationId) external view returns (bytes32) { - return _encodeAllocationProof(_indexer, _allocationId); + function encodeAllocationProof(address indexer, address allocationId) external view returns (bytes32) { + return _encodeAllocationProof(indexer, allocationId); } // -- Data service parameter getters -- diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol index 27ebc13ff..c67702428 100644 --- a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; -import { IGraphPayments } from "./interfaces/IGraphPayments.sol"; abstract contract SubgraphServiceV1Storage { /// @notice Service providers registered in the data service diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index ab62a3d84..17dd7019c 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IDataServiceFees } from "../data-service/extensions/IDataServiceFees.sol"; +import { IDataServiceFees } from "@graphprotocol/horizon/contracts/data-service/extensions/IDataServiceFees.sol"; import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; @@ -28,5 +28,5 @@ interface ISubgraphService is IDataServiceFees { function getLegacyAllocation(address allocationId) external view returns (LegacyAllocation.State memory); - function encodeAllocationProof(address _indexer, address _allocationId) external view returns (bytes32); + function encodeAllocationProof(address indexer, address allocationId) external view returns (bytes32); } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index bcd7f1097..3e43fc0fb 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -1,17 +1,17 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; -import { GraphDirectory } from "../data-service/GraphDirectory.sol"; +import { GraphDirectory } from "@graphprotocol/horizon/contracts/data-service/GraphDirectory.sol"; import { AllocationManagerV1Storage } from "./AllocationManagerStorage.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; -import { PPMMath } from "../data-service/libraries/PPMMath.sol"; -import { ProvisionTracker } from "../data-service/libraries/ProvisionTracker.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManagerV1Storage { using ProvisionTracker for mapping(address => uint256); @@ -89,7 +89,8 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager address _allocationId, bytes32 _subgraphDeploymentId, uint256 _tokens, - bytes memory _allocationProof + bytes memory _allocationProof, + uint32 __delegationRatio ) internal returns (Allocation.State memory) { if (_allocationId == address(0)) revert AllocationManagerInvalidAllocationId(); @@ -108,7 +109,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager ); // Check that the indexer has enough tokens available - allocationProvisionTracker.lock(GRAPH_STAKING, _indexer, _tokens); + allocationProvisionTracker.lock(GRAPH_STAKING, _indexer, _tokens, delegationRatio); // Update total allocated tokens for the subgraph deployment subgraphAllocatedTokens[allocation.subgraphDeploymentId] = @@ -146,13 +147,14 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager // Distribute rewards to delegators // TODO: remove the uint8 cast when PRs are merged - uint256 delegatorCut = GRAPH_STAKING.getDelegationCut( + uint256 delegatorCut = GRAPH_STAKING.getDelegationFeeCut( allocation.indexer, + address(this), uint8(IGraphPayments.PaymentTypes.IndexingFee) ); uint256 tokensDelegationRewards = tokensRewards.mulPPM(delegatorCut); GRAPH_TOKEN.approve(address(GRAPH_STAKING), tokensDelegationRewards); - GRAPH_STAKING.addToDelegationPool(allocation.indexer, tokensDelegationRewards); + GRAPH_STAKING.addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards); // Distribute rewards to indexer uint256 tokensIndexerRewards = tokensRewards - tokensDelegationRewards; @@ -177,7 +179,11 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager return tokensRewards; } - function _resizeAllocation(address _allocationId, uint256 _tokens) internal returns (Allocation.State memory) { + function _resizeAllocation( + address _allocationId, + uint256 _tokens, + uint3 _ _delegationRatio + ) internal returns (Allocation.State memory) { Allocation.State memory allocation = allocations.get(_allocationId); // Exit early if the allocation size is the same @@ -188,7 +194,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager // Update provision tracker uint256 oldTokens = allocation.tokens; if (_tokens > oldTokens) { - allocationProvisionTracker.lock(GRAPH_STAKING, allocation.indexer, _tokens - oldTokens); + allocationProvisionTracker.lock(GRAPH_STAKING, allocation.indexer, _tokens - oldTokens, delegationRatio); } else { allocationProvisionTracker.release(allocation.indexer, oldTokens - _tokens); } diff --git a/packages/subgraph-service/contracts/utilities/Directory.sol b/packages/subgraph-service/contracts/utilities/Directory.sol index cd87de102..bc452f072 100644 --- a/packages/subgraph-service/contracts/utilities/Directory.sol +++ b/packages/subgraph-service/contracts/utilities/Directory.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { ITAPVerifier } from "../interfaces/ITAPVerifier.sol"; +import { ITAPVerifier } from "@graphprotocol/horizon/contracts/interfaces/ITAPVerifier.sol"; import { IDisputeManager } from "../interfaces/IDisputeManager.sol"; import { ISubgraphService } from "../interfaces/ISubgraphService.sol"; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 144263417..8ad66358e 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -14,6 +14,7 @@ }, "devDependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", + "@graphprotocol/horizon": "workspace:^0.0.1", "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", "@nomicfoundation/hardhat-ethers": "^3.0.0", "@nomicfoundation/hardhat-foundry": "^1.1.1", diff --git a/packages/subgraph-service/remappings.txt b/packages/subgraph-service/remappings.txt index 1bd6482cd..d9bed44ec 100644 --- a/packages/subgraph-service/remappings.txt +++ b/packages/subgraph-service/remappings.txt @@ -1,4 +1,5 @@ @graphprotocol/contracts/=node_modules/@graphprotocol/contracts/ +@graphprotocol/horizon/=node_modules/@graphprotocol/horizon/ forge-std/=lib/forge-std/src/ ds-test/=lib/forge-std/lib/ds-test/src/ eth-gas-reporter/=node_modules/eth-gas-reporter/ diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol index bd67a980c..b8f722bcf 100644 --- a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol +++ b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol @@ -3,10 +3,11 @@ pragma solidity ^0.8.24; import "forge-std/Test.sol"; -import { IHorizonStaking } from "@graphprotocol/contracts/contracts/staking/IHorizonStaking.sol"; +import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; +import { IHorizonStakingTypes } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStakingTypes.sol"; import { MockGRTToken } from "./MockGRTToken.sol"; -contract MockHorizonStaking is IHorizonStaking { +contract MockHorizonStaking { mapping (address verifier => mapping (address serviceProvider => IHorizonStaking.Provision provision)) public _provisions; MockGRTToken public grtToken; @@ -22,15 +23,18 @@ contract MockHorizonStaking is IHorizonStaking { // create a provision function provision(uint256 tokens, address verifier, uint32 maxVerifierCut, uint64 thawingPeriod) external { - IHorizonStaking.Provision memory newProvision = IHorizonStaking.Provision({ - serviceProvider: msg.sender, + IHorizonStaking.Provision memory newProvision = IHorizonStakingTypes.Provision({ tokens: tokens, - delegatedTokens: 0, tokensThawing: 0, - createdAt: uint64(block.timestamp), - verifier: verifier, + sharesThawing: 0, maxVerifierCut: maxVerifierCut, - thawingPeriod: thawingPeriod + thawingPeriod: thawingPeriod, + createdAt: uint64(block.timestamp), + firstThawRequestId: bytes32(0), + lastThawRequestId: bytes32(0), + nThawRequests: 0, + maxVerifierCutPending: maxVerifierCut, + thawingPeriodPending: thawingPeriod }); _provisions[verifier][msg.sender] = newProvision; } @@ -86,9 +90,9 @@ contract MockHorizonStaking is IHorizonStaking { return _provisions[verifier][serviceProvider].tokens; } - function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory) {} + function getServiceProvider(address serviceProvider) external view returns (IHorizonStaking.ServiceProvider memory) {} - function getProvision(address serviceProvider, address verifier) external view returns (Provision memory) { + function getProvision(address serviceProvider, address verifier) external view returns (IHorizonStaking.Provision memory) { return _provisions[verifier][serviceProvider]; } diff --git a/yarn.lock b/yarn.lock index bed525f83..c105ba53f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2909,7 +2909,7 @@ __metadata: languageName: unknown linkType: soft -"@graphprotocol/horizon@workspace:packages/horizon": +"@graphprotocol/horizon@workspace:^0.0.1, @graphprotocol/horizon@workspace:packages/horizon": version: 0.0.0-use.local resolution: "@graphprotocol/horizon@workspace:packages/horizon" dependencies: @@ -2999,6 +2999,7 @@ __metadata: resolution: "@graphprotocol/subgraph-service@workspace:packages/subgraph-service" dependencies: "@graphprotocol/contracts": "workspace:^7.0.0" + "@graphprotocol/horizon": "workspace:^0.0.1" "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" From c052943e1f35cb97ecc6ce6e2cc96ea3fb78140b Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Mon, 20 May 2024 14:30:08 -0300 Subject: [PATCH 024/343] chore: uint tests refactor --- packages/horizon/test/GraphBase.t.sol | 12 +- .../horizon/test/escrow/GraphEscrow.t.sol | 304 ++---------------- packages/horizon/test/escrow/collect.t.sol | 75 +++++ packages/horizon/test/escrow/collector.t.sol | 87 +++++ packages/horizon/test/escrow/deposit.t.sol | 53 +++ packages/horizon/test/escrow/thaw.t.sol | 34 ++ packages/horizon/test/escrow/withdraw.t.sol | 48 +++ .../horizon/test/payments/GraphPayments.t.sol | 4 +- .../horizon-staking/HorizonStaking.t.sol | 10 +- 9 files changed, 332 insertions(+), 295 deletions(-) create mode 100644 packages/horizon/test/escrow/collect.t.sol create mode 100644 packages/horizon/test/escrow/collector.t.sol create mode 100644 packages/horizon/test/escrow/deposit.t.sol create mode 100644 packages/horizon/test/escrow/thaw.t.sol create mode 100644 packages/horizon/test/escrow/withdraw.t.sol diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 5367dc0c1..b26bc14e1 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -57,6 +57,14 @@ abstract contract GraphBaseTest is Test, Constants { // Deploy protocol contracts deployProtocolContracts(); unpauseProtocol(); + + // Label contracts + vm.label({ account: address(controller), newLabel: "Controller" }); + vm.label({ account: address(token), newLabel: "GraphToken" }); + vm.label({ account: address(payments), newLabel: "GraphPayments" }); + vm.label({ account: address(escrow), newLabel: "GraphEscrow" }); + vm.label({ account: address(staking), newLabel: "HorizonStaking" }); + vm.label({ account: address(stakingExtension), newLabel: "HorizonStakingExtension" }); } function deployProtocolContracts() private { @@ -158,7 +166,9 @@ abstract contract GraphBaseTest is Test, Constants { function createUser(string memory name) private returns (address) { address user = makeAddr(name); - deal({ token: address(token), to: user, give: 10000 ether }); + vm.deal({ account: user, newBalance: 100 ether }); + deal({ token: address(token), to: user, give: type(uint256).max }); + vm.label({ account: user, newLabel: name }); return user; } diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index ced2cbd18..f420c1964 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -3,306 +3,38 @@ pragma solidity ^0.8.24; import "forge-std/Test.sol"; -import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; +import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaking.t.sol"; -import { HorizonStaking_Shared_Test } from "../shared/horizon-staking/HorizonStaking.t.sol"; +contract GraphEscrowTest is HorizonStakingSharedTest { -contract GraphEscrowTest is HorizonStaking_Shared_Test { - - // Collector approve tests - - function testCollector_Approve() public { - vm.prank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - - (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, true); - assertEq(thawEndTimestamp, 0); - } - - // Collector thaw tests - - function testCollector_Thaw() public { - vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - escrow.thawCollector(users.verifier); - vm.stopPrank(); - - (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, true); - assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); - } - - // Collector cancel thaw tests - - function testCollector_CancelThaw() public { - vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - escrow.thawCollector(users.verifier); - vm.stopPrank(); - - (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, true); - assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); - - vm.prank(users.gateway); - escrow.cancelThawCollector(users.verifier); - - (authorized,, thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, true); - assertEq(thawEndTimestamp, 0); - } - - function testCollector_RevertWhen_CancelThawIsNotThawing() public { - vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); - vm.expectRevert(expectedError); - escrow.cancelThawCollector(users.verifier); - vm.stopPrank(); - } - - // Collector revoke tests - - function testCollector_Revoke() public { - vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - escrow.thawCollector(users.verifier); - skip(revokeCollectorThawingPeriod + 1); - escrow.revokeCollector(users.verifier); - vm.stopPrank(); - - (bool authorized,,) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, false); - } - - function testCollector_RevertWhen_RevokeIsNotThawing() public { - vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); - vm.expectRevert(expectedError); - escrow.revokeCollector(users.verifier); - vm.stopPrank(); - } - - function testCollector_RevertWhen_RevokeIsStillThawing() public { + modifier useGateway() { vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - escrow.thawCollector(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + revokeCollectorThawingPeriod); - vm.expectRevert(expectedError); - escrow.revokeCollector(users.verifier); + _; vm.stopPrank(); } - // Deposit tests - - function testDeposit_Tokens() public { - mint(users.gateway, 10000 ether); - vm.startPrank(users.gateway); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 1000 ether); - vm.stopPrank(); - - (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); - assertEq(indexerEscrowBalance, 1000 ether); - } - - function testDeposit_ManyDeposits() public { - address otherIndexer = address(0xB3); - address[] memory indexers = new address[](2); - indexers[0] = users.indexer; - indexers[1] = otherIndexer; - - uint256[] memory amounts = new uint256[](2); - amounts[0] = 1000 ether; - amounts[1] = 2000 ether; - - mint(users.gateway, 3000 ether); - vm.startPrank(users.gateway); - token.approve(address(escrow), 3000 ether); - escrow.depositMany(indexers, amounts); - vm.stopPrank(); - - (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); - assertEq(indexerEscrowBalance, 1000 ether); - - (uint256 otherIndexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, otherIndexer); - assertEq(otherIndexerEscrowBalance, 2000 ether); + modifier approveEscrow(uint256 amount) { + _approveEscrow(amount); + _; } - function testDeposit_RevertWhen_ManyDepositsInputsLengthMismatch() public { - address otherIndexer = address(0xB3); - address[] memory indexers = new address[](2); - indexers[0] = users.indexer; - indexers[1] = otherIndexer; - - uint256[] memory amounts = new uint256[](1); - amounts[0] = 1000 ether; - - mint(users.gateway, 1000 ether); - token.approve(address(escrow), 1000 ether); - - // revert - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInputsLengthMismatch()"); - vm.expectRevert(expectedError); - vm.prank(users.gateway); - escrow.depositMany(indexers, amounts); + modifier depositTokens(uint256 amount) { + vm.assume(amount > 0); + vm.assume(amount <= 10000 ether); + _depositTokens(amount); + _; } - // Thaw tests - - function testThaw_Tokens() public { - mint(users.gateway, 1000 ether); - vm.startPrank(users.gateway); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 1000 ether); - escrow.thaw(users.indexer, 100 ether); - vm.stopPrank(); - - (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.indexer); - assertEq(amountThawing, 100 ether); - assertEq(thawEndTimestamp, block.timestamp + withdrawEscrowThawingPeriod); + function setUp() public virtual override { + HorizonStakingSharedTest.setUp(); } - function testThaw_RevertWhen_InsufficientThawAmount() public { - mint(users.gateway, 1000 ether); - vm.startPrank(users.gateway); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 1000 ether); - - // revert - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientThawAmount()"); - vm.expectRevert(expectedError); - escrow.thaw(users.indexer, 0); - vm.stopPrank(); - } - - function testThaw_RevertWhen_InsufficientAmount() public { - mint(users.gateway, 1000 ether); - vm.startPrank(users.gateway); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 1000 ether); - - // revert - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", 1000 ether, 2000 ether); - vm.expectRevert(expectedError); - escrow.thaw(users.indexer, 2000 ether); - vm.stopPrank(); - } - - // Withdraw tests - - function testWithdraw_Tokens() public { - mint(users.gateway, 1000 ether); - vm.startPrank(users.gateway); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 1000 ether); - escrow.thaw(users.indexer, 100 ether); - - // advance time - skip(withdrawEscrowThawingPeriod + 1); - - escrow.withdraw(users.indexer); - vm.stopPrank(); - - (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); - assertEq(indexerEscrowBalance, 900 ether); - } - - function testWithdraw_RevertWhen_NotThawing() public { - mint(users.gateway, 1000 ether); - vm.startPrank(users.gateway); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 1000 ether); - - // revert - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); - vm.expectRevert(expectedError); - escrow.withdraw(users.indexer); - vm.stopPrank(); - } - - function testWithdraw_RevertWhen_StillThawing() public { - mint(users.gateway, 1000 ether); - vm.startPrank(users.gateway); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 1000 ether); - escrow.thaw(users.indexer, 100 ether); - - // revert - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + withdrawEscrowThawingPeriod); - vm.expectRevert(expectedError); - escrow.withdraw(users.indexer); - vm.stopPrank(); - } - - // Collect tests - - function testCollect() public { - uint256 amount = 1000 ether; - createProvision(amount); - setDelegationFeeCut(0, 100000); - - vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 1000 ether); - vm.stopPrank(); - - uint256 indexerPreviousBalance = token.balanceOf(users.indexer); - vm.prank(users.verifier); - escrow.collect(users.gateway, users.indexer, subgraphDataServiceAddress, 100 ether, IGraphPayments.PaymentType.IndexingFees, 3 ether); - - uint256 indexerBalance = token.balanceOf(users.indexer); - assertEq(indexerBalance - indexerPreviousBalance, 86 ether); - } - - function testCollect_RevertWhen_CollectorNotAuthorized() public { - address indexer = address(0xA3); - uint256 amount = 1000 ether; - - vm.startPrank(users.verifier); - uint256 dataServiceCut = 30000; // 3% - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorNotAuthorized(address,address)", users.gateway, users.verifier); - vm.expectRevert(expectedError); - escrow.collect(users.gateway, indexer, subgraphDataServiceAddress, amount, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); - vm.stopPrank(); - } - - function testCollect_RevertWhen_CollectorHasInsufficientAmount() public { - vm.prank(users.gateway); - escrow.approveCollector(users.verifier, 100 ether); - - address indexer = address(0xA3); - uint256 amount = 1000 ether; - - mint(users.gateway, amount); - vm.startPrank(users.gateway); + function _depositTokens(uint256 amount) internal { token.approve(address(escrow), amount); - escrow.deposit(indexer, amount); - vm.stopPrank(); - - vm.startPrank(users.verifier); - uint256 dataServiceCut = 30 ether; - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", 100 ether, 1000 ether); - vm.expectRevert(expectedError); - escrow.collect(users.gateway, indexer, subgraphDataServiceAddress, 1000 ether, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); - vm.stopPrank(); + escrow.deposit(users.indexer, amount); } - function testCollect_RevertWhen_SenderHasInsufficientAmountInEscrow() public { - mint(users.gateway, 1000 ether); - vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 100 ether); - vm.stopPrank(); - - vm.prank(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", 100 ether, 200 ether); - vm.expectRevert(expectedError); - escrow.collect(users.gateway, users.indexer, subgraphDataServiceAddress, 200 ether, IGraphPayments.PaymentType.IndexingFees, 3 ether); - vm.stopPrank(); + function _approveEscrow(uint256 amount) internal { + token.approve(address(escrow), amount); } } \ No newline at end of file diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol new file mode 100644 index 000000000..a1d7a3a5f --- /dev/null +++ b/packages/horizon/test/escrow/collect.t.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { GraphEscrowTest } from "./GraphEscrow.t.sol"; +import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; + +contract GraphEscrowCollectTest is GraphEscrowTest { + + function testCollect() public { + uint256 amount = 1000 ether; + createProvision(amount); + setDelegationFeeCut(0, 100000); + + vm.startPrank(users.gateway); + escrow.approveCollector(users.verifier, 1000 ether); + token.approve(address(escrow), 1000 ether); + escrow.deposit(users.indexer, 1000 ether); + vm.stopPrank(); + + uint256 indexerPreviousBalance = token.balanceOf(users.indexer); + vm.prank(users.verifier); + escrow.collect(users.gateway, users.indexer, subgraphDataServiceAddress, 100 ether, IGraphPayments.PaymentType.IndexingFees, 3 ether); + + uint256 indexerBalance = token.balanceOf(users.indexer); + assertEq(indexerBalance - indexerPreviousBalance, 86 ether); + } + + function testCollect_RevertWhen_CollectorNotAuthorized() public { + address indexer = address(0xA3); + uint256 amount = 1000 ether; + + vm.startPrank(users.verifier); + uint256 dataServiceCut = 30000; // 3% + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorNotAuthorized(address,address)", users.gateway, users.verifier); + vm.expectRevert(expectedError); + escrow.collect(users.gateway, indexer, subgraphDataServiceAddress, amount, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); + vm.stopPrank(); + } + + function testCollect_RevertWhen_CollectorHasInsufficientAmount() public { + vm.prank(users.gateway); + escrow.approveCollector(users.verifier, 100 ether); + + address indexer = address(0xA3); + uint256 amount = 1000 ether; + + vm.startPrank(users.gateway); + token.approve(address(escrow), amount); + escrow.deposit(indexer, amount); + vm.stopPrank(); + + vm.startPrank(users.verifier); + uint256 dataServiceCut = 30 ether; + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", 100 ether, 1000 ether); + vm.expectRevert(expectedError); + escrow.collect(users.gateway, indexer, subgraphDataServiceAddress, 1000 ether, IGraphPayments.PaymentType.IndexingFees, dataServiceCut); + vm.stopPrank(); + } + + function testCollect_RevertWhen_SenderHasInsufficientAmountInEscrow() public { + vm.startPrank(users.gateway); + escrow.approveCollector(users.verifier, 1000 ether); + token.approve(address(escrow), 1000 ether); + escrow.deposit(users.indexer, 100 ether); + vm.stopPrank(); + + vm.prank(users.verifier); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", 100 ether, 200 ether); + vm.expectRevert(expectedError); + escrow.collect(users.gateway, users.indexer, subgraphDataServiceAddress, 200 ether, IGraphPayments.PaymentType.IndexingFees, 3 ether); + vm.stopPrank(); + } +} \ No newline at end of file diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol new file mode 100644 index 000000000..f4ef2b11c --- /dev/null +++ b/packages/horizon/test/escrow/collector.t.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { GraphEscrowTest } from "./GraphEscrow.t.sol"; + +contract GraphEscrowCollectorTest is GraphEscrowTest { + function setUp() public virtual override { + GraphEscrowTest.setUp(); + vm.prank(users.gateway); + escrow.approveCollector(users.verifier, 1000 ether); + } + + // Collector approve tests + + function testCollector_Approve() public view { + (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); + assertEq(authorized, true); + assertEq(thawEndTimestamp, 0); + } + + // Collector thaw tests + + function testCollector_Thaw() public { + vm.prank(users.gateway); + escrow.thawCollector(users.verifier); + + (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); + assertEq(authorized, true); + assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); + } + + // Collector cancel thaw tests + + function testCollector_CancelThaw() public { + vm.prank(users.gateway); + escrow.thawCollector(users.verifier); + + (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); + assertEq(authorized, true); + assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); + + vm.prank(users.gateway); + escrow.cancelThawCollector(users.verifier); + + (authorized,, thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); + assertEq(authorized, true); + assertEq(thawEndTimestamp, 0); + } + + function testCollector_RevertWhen_CancelThawIsNotThawing() public { + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); + vm.expectRevert(expectedError); + escrow.cancelThawCollector(users.verifier); + vm.stopPrank(); + } + + // Collector revoke tests + + function testCollector_Revoke() public { + vm.startPrank(users.gateway); + escrow.thawCollector(users.verifier); + skip(revokeCollectorThawingPeriod + 1); + escrow.revokeCollector(users.verifier); + vm.stopPrank(); + + (bool authorized,,) = escrow.authorizedCollectors(users.gateway, users.verifier); + assertEq(authorized, false); + } + + function testCollector_RevertWhen_RevokeIsNotThawing() public { + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); + vm.expectRevert(expectedError); + vm.prank(users.gateway); + escrow.revokeCollector(users.verifier); + } + + function testCollector_RevertWhen_RevokeIsStillThawing() public { + vm.startPrank(users.gateway); + escrow.thawCollector(users.verifier); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + revokeCollectorThawingPeriod); + vm.expectRevert(expectedError); + escrow.revokeCollector(users.verifier); + vm.stopPrank(); + } +} \ No newline at end of file diff --git a/packages/horizon/test/escrow/deposit.t.sol b/packages/horizon/test/escrow/deposit.t.sol new file mode 100644 index 000000000..d7898bd37 --- /dev/null +++ b/packages/horizon/test/escrow/deposit.t.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { GraphEscrowTest } from "./GraphEscrow.t.sol"; + +contract GraphEscrowDepositTest is GraphEscrowTest { + + function testDeposit_Tokens(uint256 amount) public useGateway depositTokens(amount) { + (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); + assertEq(indexerEscrowBalance, amount); + } + + function testDeposit_ManyDeposits(uint256 amount) public useGateway approveEscrow(amount) { + uint256 amountOne = amount / 2; + uint256 amountTwo = amount - amountOne; + + address otherIndexer = address(0xB3); + address[] memory indexers = new address[](2); + indexers[0] = users.indexer; + indexers[1] = otherIndexer; + + uint256[] memory amounts = new uint256[](2); + amounts[0] = amountOne; + amounts[1] = amountTwo; + + escrow.depositMany(indexers, amounts); + + (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); + assertEq(indexerEscrowBalance, amountOne); + + (uint256 otherIndexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, otherIndexer); + assertEq(otherIndexerEscrowBalance, amountTwo); + } + + function testDeposit_RevertWhen_ManyDepositsInputsLengthMismatch( + uint256 amount + ) public useGateway approveEscrow(amount) { + address otherIndexer = address(0xB3); + address[] memory indexers = new address[](2); + indexers[0] = users.indexer; + indexers[1] = otherIndexer; + + uint256[] memory amounts = new uint256[](1); + amounts[0] = 1000 ether; + + // revert + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInputsLengthMismatch()"); + vm.expectRevert(expectedError); + escrow.depositMany(indexers, amounts); + } +} \ No newline at end of file diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol new file mode 100644 index 000000000..51400feac --- /dev/null +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { GraphEscrowTest } from "./GraphEscrow.t.sol"; + +contract GraphEscrowThawTest is GraphEscrowTest { + + function testThaw_Tokens(uint256 amount) public useGateway depositTokens(amount) { + escrow.thaw(users.indexer, amount); + + (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.indexer); + assertEq(amountThawing, amount); + assertEq(thawEndTimestamp, block.timestamp + withdrawEscrowThawingPeriod); + } + + function testThaw_RevertWhen_InsufficientThawAmount( + uint256 amount + ) public useGateway depositTokens(amount) { + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientThawAmount()"); + vm.expectRevert(expectedError); + escrow.thaw(users.indexer, 0); + } + + function testThaw_RevertWhen_InsufficientAmount( + uint256 amount + ) public useGateway depositTokens(amount) { + uint256 overAmount = amount + 1; + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", amount, overAmount); + vm.expectRevert(expectedError); + escrow.thaw(users.indexer, overAmount); + } +} \ No newline at end of file diff --git a/packages/horizon/test/escrow/withdraw.t.sol b/packages/horizon/test/escrow/withdraw.t.sol new file mode 100644 index 000000000..075a16a74 --- /dev/null +++ b/packages/horizon/test/escrow/withdraw.t.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { GraphEscrowTest } from "./GraphEscrow.t.sol"; + +contract GraphEscrowWithdrawTest is GraphEscrowTest { + + modifier depositAndThawTokens(uint256 amount, uint256 thawAmount) { + vm.assume(thawAmount > 0); + vm.assume(amount > thawAmount); + _depositTokens(amount); + escrow.thaw(users.indexer, thawAmount); + _; + } + + function testWithdraw_Tokens( + uint256 amount, + uint256 thawAmount + ) public useGateway depositAndThawTokens(amount, thawAmount) { + // advance time + skip(withdrawEscrowThawingPeriod + 1); + + escrow.withdraw(users.indexer); + vm.stopPrank(); + + (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); + assertEq(indexerEscrowBalance, amount - thawAmount); + } + + function testWithdraw_RevertWhen_NotThawing(uint256 amount) public useGateway depositTokens(amount) { + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); + vm.expectRevert(expectedError); + escrow.withdraw(users.indexer); + vm.stopPrank(); + } + + function testWithdraw_RevertWhen_StillThawing( + uint256 amount, + uint256 thawAmount + ) public useGateway depositAndThawTokens(amount, thawAmount) { + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + withdrawEscrowThawingPeriod); + vm.expectRevert(expectedError); + escrow.withdraw(users.indexer); + vm.stopPrank(); + } +} \ No newline at end of file diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index e7889101f..afcecd803 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -5,9 +5,9 @@ import "forge-std/Test.sol"; import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; -import { HorizonStaking_Shared_Test } from "../shared/horizon-staking/HorizonStaking.t.sol"; +import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaking.t.sol"; -contract GraphPaymentsTest is HorizonStaking_Shared_Test { +contract GraphPaymentsTest is HorizonStakingSharedTest { function testCollect() public { // Setup Staking diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol index 62a8db3ac..c5aec8aa2 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol @@ -5,15 +5,13 @@ import "forge-std/Test.sol"; import { GraphBaseTest } from "../../GraphBase.t.sol"; -abstract contract HorizonStaking_Shared_Test is GraphBaseTest { +abstract contract HorizonStakingSharedTest is GraphBaseTest { /* Set Up */ - // function setUp() public virtual override { - // GraphBaseTest.setUp(); - - - // } + function setUp() public virtual override { + GraphBaseTest.setUp(); + } /* Helpers */ From 6165dc96a6b18d10af1317cc135880ff5aed403a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 20 May 2024 15:01:25 -0300 Subject: [PATCH 025/343] fix: typo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/utilities/AllocationManager.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 3e43fc0fb..ae280c5a9 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -90,7 +90,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager bytes32 _subgraphDeploymentId, uint256 _tokens, bytes memory _allocationProof, - uint32 __delegationRatio + uint32 _delegationRatio ) internal returns (Allocation.State memory) { if (_allocationId == address(0)) revert AllocationManagerInvalidAllocationId(); @@ -109,7 +109,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager ); // Check that the indexer has enough tokens available - allocationProvisionTracker.lock(GRAPH_STAKING, _indexer, _tokens, delegationRatio); + allocationProvisionTracker.lock(GRAPH_STAKING, _indexer, _tokens, _delegationRatio); // Update total allocated tokens for the subgraph deployment subgraphAllocatedTokens[allocation.subgraphDeploymentId] = @@ -182,7 +182,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager function _resizeAllocation( address _allocationId, uint256 _tokens, - uint3 _ _delegationRatio + uint32 _delegationRatio ) internal returns (Allocation.State memory) { Allocation.State memory allocation = allocations.get(_allocationId); @@ -194,7 +194,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager // Update provision tracker uint256 oldTokens = allocation.tokens; if (_tokens > oldTokens) { - allocationProvisionTracker.lock(GRAPH_STAKING, allocation.indexer, _tokens - oldTokens, delegationRatio); + allocationProvisionTracker.lock(GRAPH_STAKING, allocation.indexer, _tokens - oldTokens, _delegationRatio); } else { allocationProvisionTracker.release(allocation.indexer, oldTokens - _tokens); } From fe747d167b841729c72b14f90c50d1d1b544a444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 20 May 2024 16:58:56 -0300 Subject: [PATCH 026/343] chore: lint horizon package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/contracts/GraphDirectory.sol | 20 +- .../horizon/contracts/escrow/GraphEscrow.sol | 50 +- .../contracts/escrow/GraphEscrowStorage.sol | 4 +- .../contracts/interfaces/IGraphToken.sol | 26 +- .../interfaces/IHorizonStakingBase.sol | 122 ++- .../interfaces/IHorizonStakingExtension.sol | 65 +- .../interfaces/IHorizonStakingTypes.sol | 5 +- .../horizon/contracts/interfaces/IManaged.sol | 4 +- .../IStakingBackwardsCompatibility.sol | 91 +-- .../contracts/mocks/ControllerMock.sol | 92 +-- .../horizon/contracts/mocks/MockGRTToken.sol | 39 +- .../contracts/payments/GraphPayments.sol | 9 +- .../payments/GraphPaymentsStorage.sol | 4 +- .../contracts/staking/HorizonStaking.sol | 710 +++++++++--------- .../staking/HorizonStakingExtension.sol | 221 +++--- .../staking/HorizonStakingStorage.sol | 45 +- .../staking/StakingBackwardsCompatibility.sol | 304 ++++---- .../contracts/staking/utilities/Managed.sol | 75 +- packages/horizon/package.json | 1 + packages/solhint-graph-config/index.js | 2 + packages/solhint-plugin-graph/index.js | 6 + yarn.lock | 1 + 22 files changed, 953 insertions(+), 943 deletions(-) diff --git a/packages/horizon/contracts/GraphDirectory.sol b/packages/horizon/contracts/GraphDirectory.sol index b509f792a..f36b0f9b3 100644 --- a/packages/horizon/contracts/GraphDirectory.sol +++ b/packages/horizon/contracts/GraphDirectory.sol @@ -24,15 +24,15 @@ contract GraphDirectory { address public immutable GRAPH_PAYMENTS; address public immutable GRAPH_ESCROW; - constructor(address _controller) { - CONTROLLER = _controller; - STAKING = IController(_controller).getContractProxy(keccak256("Staking")); - EPOCH_MANAGER = IController(_controller).getContractProxy(keccak256("EpochManager")); - GRAPH_TOKEN = IController(_controller).getContractProxy(keccak256("GraphToken")); - GRAPH_TOKEN_GATEWAY = IController(_controller).getContractProxy(keccak256("GraphTokenGateway")); - REWARDS_MANAGER = IController(_controller).getContractProxy(keccak256("RewardsManager")); - CURATION = IController(_controller).getContractProxy(keccak256("Curation")); - GRAPH_PAYMENTS = IController(_controller).getContractProxy(keccak256("GraphPayments")); - GRAPH_ESCROW = IController(_controller).getContractProxy(keccak256("GraphEscrow")); + constructor(address controller) { + CONTROLLER = controller; + STAKING = IController(controller).getContractProxy(keccak256("Staking")); + EPOCH_MANAGER = IController(controller).getContractProxy(keccak256("EpochManager")); + GRAPH_TOKEN = IController(controller).getContractProxy(keccak256("GraphToken")); + GRAPH_TOKEN_GATEWAY = IController(controller).getContractProxy(keccak256("GraphTokenGateway")); + REWARDS_MANAGER = IController(controller).getContractProxy(keccak256("RewardsManager")); + CURATION = IController(controller).getContractProxy(keccak256("Curation")); + GRAPH_PAYMENTS = IController(controller).getContractProxy(keccak256("GraphPayments")); + GRAPH_ESCROW = IController(controller).getContractProxy(keccak256("GraphEscrow")); } } diff --git a/packages/horizon/contracts/escrow/GraphEscrow.sol b/packages/horizon/contracts/escrow/GraphEscrow.sol index b1c21f54d..6e6921a82 100644 --- a/packages/horizon/contracts/escrow/GraphEscrow.sol +++ b/packages/horizon/contracts/escrow/GraphEscrow.sol @@ -9,18 +9,6 @@ import { GraphEscrowStorageV1Storage } from "./GraphEscrowStorage.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirectory { - // -- Errors -- - - error GraphEscrowNotGraphPayments(); - error GraphEscrowInputsLengthMismatch(); - error GraphEscrowInsufficientThawAmount(); - error GraphEscrowInsufficientAmount(uint256 available, uint256 required); - error GraphEscrowNotThawing(); - error GraphEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); - error GraphEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); - error GraphEscrowCollectorNotAuthorized(address sender, address dataService); - error GraphEscrowCollectorInsufficientAmount(uint256 available, uint256 required); - // -- Events -- event AuthorizedCollector(address indexed sender, address indexed dataService); @@ -39,23 +27,35 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector event Withdraw(address indexed sender, address indexed receiver, uint256 amount); event Collect(address indexed sender, address indexed receiver, uint256 amount); + // -- Errors -- + + error GraphEscrowNotGraphPayments(); + error GraphEscrowInputsLengthMismatch(); + error GraphEscrowInsufficientThawAmount(); + error GraphEscrowInsufficientAmount(uint256 available, uint256 required); + error GraphEscrowNotThawing(); + error GraphEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); + error GraphEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); + error GraphEscrowCollectorNotAuthorized(address sender, address dataService); + error GraphEscrowCollectorInsufficientAmount(uint256 available, uint256 required); + // -- Constructor -- constructor( - address _controller, - uint256 _revokeCollectorThawingPeriod, - uint256 _withdrawEscrowThawingPeriod - ) GraphDirectory(_controller) { - if (_revokeCollectorThawingPeriod > MAX_THAWING_PERIOD) { - revert GraphEscrowThawingPeriodTooLong(_revokeCollectorThawingPeriod, MAX_THAWING_PERIOD); + address controller, + uint256 revokeCollectorThawingPeriod, + uint256 withdrawEscrowThawingPeriod + ) GraphDirectory(controller) { + if (revokeCollectorThawingPeriod > MAX_THAWING_PERIOD) { + revert GraphEscrowThawingPeriodTooLong(revokeCollectorThawingPeriod, MAX_THAWING_PERIOD); } - if (_withdrawEscrowThawingPeriod > MAX_THAWING_PERIOD) { - revert GraphEscrowThawingPeriodTooLong(_withdrawEscrowThawingPeriod, MAX_THAWING_PERIOD); + if (withdrawEscrowThawingPeriod > MAX_THAWING_PERIOD) { + revert GraphEscrowThawingPeriodTooLong(withdrawEscrowThawingPeriod, MAX_THAWING_PERIOD); } - revokeCollectorThawingPeriod = _revokeCollectorThawingPeriod; - withdrawEscrowThawingPeriod = _withdrawEscrowThawingPeriod; + revokeCollectorThawingPeriod = revokeCollectorThawingPeriod; + withdrawEscrowThawingPeriod = withdrawEscrowThawingPeriod; } // approve a data service to collect funds @@ -67,7 +67,9 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector // thaw a data service's collector authorization function thawCollector(address dataService) external { - authorizedCollectors[msg.sender][dataService].thawEndTimestamp = block.timestamp + revokeCollectorThawingPeriod; + authorizedCollectors[msg.sender][dataService].thawEndTimestamp = + block.timestamp + + REVOKE_COLLECTOR_THAWING_PERIOD; emit ThawCollector(msg.sender, dataService); } @@ -147,7 +149,7 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector // Set amount to thaw account.amountThawing = amount; // Set when the thaw is complete (thawing period number of seconds after current timestamp) - account.thawEndTimestamp = block.timestamp + withdrawEscrowThawingPeriod; + account.thawEndTimestamp = block.timestamp + WITHDRAW_ESCROW_THAWING_PERIOD; emit Thaw(msg.sender, receiver, amount, account.amountThawing, account.thawEndTimestamp); } diff --git a/packages/horizon/contracts/escrow/GraphEscrowStorage.sol b/packages/horizon/contracts/escrow/GraphEscrowStorage.sol index 158b7fae0..89a49e756 100644 --- a/packages/horizon/contracts/escrow/GraphEscrowStorage.sol +++ b/packages/horizon/contracts/escrow/GraphEscrowStorage.sol @@ -17,8 +17,8 @@ contract GraphEscrowStorageV1Storage { uint256 public constant MAX_THAWING_PERIOD = 90 days; // Thawing period for authorized collectors - uint256 public immutable revokeCollectorThawingPeriod; + uint256 public immutable REVOKE_COLLECTOR_THAWING_PERIOD; // The duration (in seconds) in which escrow funds are thawing before they can be withdrawn - uint256 public immutable withdrawEscrowThawingPeriod; + uint256 public immutable WITHDRAW_ESCROW_THAWING_PERIOD; } diff --git a/packages/horizon/contracts/interfaces/IGraphToken.sol b/packages/horizon/contracts/interfaces/IGraphToken.sol index 27f68a0d2..d00e81fc1 100644 --- a/packages/horizon/contracts/interfaces/IGraphToken.sol +++ b/packages/horizon/contracts/interfaces/IGraphToken.sol @@ -9,30 +9,28 @@ interface IGraphToken is IERC20 { function burn(uint256 amount) external; - function burnFrom(address _from, uint256 amount) external; + function burnFrom(address from, uint256 amount) external; - function mint(address _to, uint256 _amount) external; + function mint(address to, uint256 amount) external; // -- Mint Admin -- - function addMinter(address _account) external; + function addMinter(address account) external; - function removeMinter(address _account) external; + function removeMinter(address account) external; function renounceMinter() external; - function isMinter(address _account) external view returns (bool); - // -- Permit -- function permit( - address _owner, - address _spender, - uint256 _value, - uint256 _deadline, - uint8 _v, - bytes32 _r, - bytes32 _s + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s ) external; // -- Allowance -- @@ -40,4 +38,6 @@ interface IGraphToken is IERC20 { function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); + + function isMinter(address account) external view returns (bool); } diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol index 1fc539f96..41f1ae1df 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol @@ -113,20 +113,20 @@ interface IHorizonStakingBase is IHorizonStakingTypes { ); // deposit stake - function stake(uint256 _tokens) external; + function stake(uint256 tokens) external; - function stakeTo(address _serviceProvider, uint256 _tokens) external; + function stakeTo(address serviceProvider, uint256 tokens) external; // can be called by anyone if the indexer has provisioned stake to this verifier - function stakeToProvision(address _serviceProvider, address _verifier, uint256 _tokens) external; + function stakeToProvision(address serviceProvider, address verifier, uint256 tokens) external; // create a provision function provision( - address _serviceProvider, - address _verifier, - uint256 _tokens, - uint32 _maxVerifierCut, - uint64 _thawingPeriod + address serviceProvider, + address verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod ) external; /** @@ -135,65 +135,56 @@ interface IHorizonStakingBase is IHorizonStakingTypes { * service, where the data service is the verifier. Only authorized verifiers can be used. * This function can be called by the service provider or by an operator authorized by the provider * for this specific verifier. - * @param _serviceProvider The service provider address - * @param _verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) - * @param _tokens The amount of tokens that will be locked and slashable - * @param _maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing - * @param _thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) + * @param tokens The amount of tokens that will be locked and slashable + * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing + * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision */ function provisionLocked( - address _serviceProvider, - address _verifier, - uint256 _tokens, - uint32 _maxVerifierCut, - uint64 _thawingPeriod + address serviceProvider, + address verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod ) external; // initiate a thawing to remove tokens from a provision - function thaw(address _serviceProvider, address _verifier, uint256 _tokens) external returns (bytes32); + function thaw(address serviceProvider, address verifier, uint256 tokens) external returns (bytes32); // add more tokens from idle stake to an existing provision - function addToProvision(address _serviceProvider, address _verifier, uint256 _tokens) external; + function addToProvision(address serviceProvider, address verifier, uint256 tokens) external; // moves thawed stake from a provision back into the provider's available stake - function deprovision(address _serviceProvider, address _verifier, uint256 _tokens) external; + function deprovision(address serviceProvider, address verifier, uint256 tokens) external; // moves thawed stake from one provision into another provision - function reprovision( - address _serviceProvider, - address _oldVerifier, - address _newVerifier, - uint256 _tokens - ) external; + function reprovision(address serviceProvider, address oldVerifier, address newVerifier, uint256 tokens) external; // moves thawed stake back to the owner's account - stake is removed from the protocol - function unstake(uint256 _tokens) external; + function unstake(uint256 tokens) external; // delegate tokens to a provider on a data service - function delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) external; + function delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) external; // undelegate (thaw) delegated tokens from a provision - function undelegate(address _serviceProvider, address _verifier, uint256 _shares) external; + function undelegate(address serviceProvider, address verifier, uint256 shares) external; // withdraw delegated tokens after thawing function withdrawDelegated( - address _serviceProvider, - address _verifier, - address _newServiceProvider, - uint256 _minSharesForNewProvider + address serviceProvider, + address verifier, + address newServiceProvider, + uint256 minSharesForNewProvider ) external; function slash( - address _serviceProvider, - uint256 _tokens, - uint256 _verifierCutAmount, - address _verifierCutDestination + address serviceProvider, + uint256 tokens, + uint256 verifierCutAmount, + address verifierCutDestination ) external; - // staked tokens that are currently not provisioned, aka idle stake - // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address _serviceProvider) external view returns (uint256 tokens); - /** * @notice Withdraw indexer tokens once the thawing period has passed. * @dev This is only needed during the transition period while we still have @@ -201,36 +192,41 @@ interface IHorizonStakingBase is IHorizonStakingTypes { */ function withdraw() external; - function setDelegationSlashingEnabled(bool _enabled) external; + function setDelegationSlashingEnabled(bool enabled) external; - /** - * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param _operator The address to check for auth - * @param _serviceProvider The service provider on behalf of whom they're claiming to act - * @param _verifier The verifier / data service on which they're claiming to act - */ - function isAuthorized(address _operator, address _serviceProvider, address _verifier) external view returns (bool); - - function getProviderTokensAvailable(address _serviceProvider, address _verifier) external view returns (uint256); - function setMaxThawingPeriod(uint64 _maxThawingPeriod) external; + function setMaxThawingPeriod(uint64 maxThawingPeriod) external; - function setAllowedLockedVerifier(address _verifier, bool _allowed) external; + function setAllowedLockedVerifier(address verifier, bool allowed) external; /** * @notice Add tokens to a delegation pool (without getting shares). * Used by data services to pay delegation fees/rewards. - * @param _serviceProvider The service provider address - * @param _verifier The verifier address for which the tokens are provisioned - * @param _tokens The amount of tokens to add to the delegation pool + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + * @param tokens The amount of tokens to add to the delegation pool */ - function addToDelegationPool(address _serviceProvider, address _verifier, uint256 _tokens) external; + function addToDelegationPool(address serviceProvider, address verifier, uint256 tokens) external; function setProvisionParameters( - address _serviceProvider, - address _verifier, - uint32 _maxVerifierCut, - uint64 _thawingPeriod + address serviceProvider, + address verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod ) external; - function acceptProvisionParameters(address _serviceProvider) external; + function acceptProvisionParameters(address serviceProvider) external; + + // staked tokens that are currently not provisioned, aka idle stake + // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` + function getIdleStake(address serviceProvider) external view returns (uint256 tokens); + + /** + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param operator The address to check for auth + * @param serviceProvider The service provider on behalf of whom they're claiming to act + * @param verifier The verifier / data service on which they're claiming to act + */ + function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); + + function getProviderTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); } diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol index 546f9fefa..7c5da23e2 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol @@ -18,57 +18,56 @@ interface IHorizonStakingExtension { uint256 feeCut ); + /** + * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * @param operator Address to authorize or unauthorize + * @param verifier The verifier / data service on which they'll be allowed to operate + * @param allowed Whether the operator is authorized or not + */ + function setOperator(address operator, address verifier, bool allowed) external; + + // for vesting contracts + function setOperatorLocked(address operator, address verifier, bool allowed) external; + + function setDelegationFeeCut(address serviceProvider, address verifier, uint256 feeType, uint256 feeCut) external; + function getStake(address serviceProvider) external view returns (uint256); - function getDelegatedTokensAvailable(address _serviceProvider, address _verifier) external view returns (uint256); + function getDelegatedTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); + function getTokensAvailable( - address _serviceProvider, - address _verifier, - uint32 _delegationRatio + address serviceProvider, + address verifier, + uint32 delegationRatio ) external view returns (uint256); function getServiceProvider( address serviceProvider ) external view returns (IHorizonStakingTypes.ServiceProvider memory); - /** - * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. - * @param _operator Address to authorize or unauthorize - * @param _verifier The verifier / data service on which they'll be allowed to operate - * @param _allowed Whether the operator is authorized or not - */ - function setOperator(address _operator, address _verifier, bool _allowed) external; - - // for vesting contracts - function setOperatorLocked(address _operator, address _verifier, bool _allowed) external; - function getMaxThawingPeriod() external view returns (uint64); function getDelegationPool( - address _serviceProvider, - address _verifier + address serviceProvider, + address verifier ) external view returns (IHorizonStakingTypes.DelegationPool memory); + function getDelegation( - address _delegator, - address _serviceProvider, - address _verifier + address delegator, + address serviceProvider, + address verifier ) external view returns (IHorizonStakingTypes.Delegation memory); - function getThawRequest(bytes32 _thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory); + + function getThawRequest(bytes32 thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory); + function getProvision( - address _serviceProvider, - address _verifier + address serviceProvider, + address verifier ) external view returns (IHorizonStakingTypes.Provision memory); - function setDelegationFeeCut( - address _serviceProvider, - address _verifier, - uint256 _feeType, - uint256 _feeCut - ) external; - function getDelegationFeeCut( - address _serviceProvider, - address _verifier, - uint256 _feeType + address serviceProvider, + address verifier, + uint256 feeType ) external view returns (uint256); } diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol index f58a004b7..f737d52ee 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol @@ -3,6 +3,9 @@ pragma solidity >=0.6.12 <0.9.0; pragma abicoder v2; +// TODO: create custom var-name-mixedcase +/* solhint-disable var-name-mixedcase */ + interface IHorizonStakingTypes { struct Provision { // service provider tokens in the provision @@ -77,7 +80,7 @@ interface IHorizonStakingTypes { // Tokens on the Service Provider stake (staked by the provider) uint256 tokensStaked; // Tokens used in allocations - uint256 __DEPRECATED_tokensAllocated; + uint256 __DEPRECATED_tokensAllocated; // solhint-disable-line graph/leading-underscore // Tokens locked for withdrawal subject to thawing period uint256 __DEPRECATED_tokensLocked; // Block when locked tokens can be withdrawn diff --git a/packages/horizon/contracts/interfaces/IManaged.sol b/packages/horizon/contracts/interfaces/IManaged.sol index 5aa086ba7..13c129b2f 100644 --- a/packages/horizon/contracts/interfaces/IManaged.sol +++ b/packages/horizon/contracts/interfaces/IManaged.sol @@ -13,9 +13,9 @@ interface IManaged { /** * @notice (Deprecated) Set the controller that manages this contract * @dev Only the current controller can set a new controller - * @param _controller Address of the new controller + * @param controller Address of the new controller */ - function setController(address _controller) external; + function setController(address controller) external; /** * @notice Get the Controller that manages this contract diff --git a/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol b/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol index 43c93662a..088ee3776 100644 --- a/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol @@ -12,14 +12,6 @@ pragma abicoder v2; * that includes the full functionality. */ interface IStakingBackwardsCompatibility { - /** - * @dev Emitted when `delegator` delegated `tokens` to the `serviceProvider`, the delegator - * gets `shares` for the delegation pool proportionally to the tokens staked. - * This event is here for backwards compatibility, the tokens are delegated - * on the subgraph data service provision. - */ - event StakeDelegated(address indexed serviceProvider, address indexed delegator, uint256 tokens, uint256 shares); - /** * @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment * An allocation is created in the allocate() function and closed in closeAllocation() @@ -31,10 +23,32 @@ interface IStakingBackwardsCompatibility { uint256 createdAtEpoch; // Epoch when it was created uint256 closedAtEpoch; // Epoch when it was closed uint256 collectedFees; // Collected fees for the allocation - uint256 __DEPRECATED_effectiveAllocation; // solhint-disable-line var-name-mixedcase + uint256 DEPRECATED_effectiveAllocation; // solhint-disable-line var-name-mixedcase uint256 accRewardsPerAllocatedToken; // Snapshot used for reward calc uint256 distributedRebates; // Collected rebates that have been rebated } + + /** + * @dev Possible states an allocation can be. + * States: + * - Null = indexer == address(0) + * - Active = not Null && tokens > 0 + * - Closed = Active && closedAtEpoch != 0 + */ + enum AllocationState { + Null, + Active, + Closed + } + + /** + * @dev Emitted when `delegator` delegated `tokens` to the `serviceProvider`, the delegator + * gets `shares` for the delegation pool proportionally to the tokens staked. + * This event is here for backwards compatibility, the tokens are delegated + * on the subgraph data service provision. + */ + event StakeDelegated(address indexed serviceProvider, address indexed delegator, uint256 tokens, uint256 shares); + /** * @dev Emitted when `serviceProvider` stakes `tokens` amount. */ @@ -95,35 +109,22 @@ interface IStakingBackwardsCompatibility { */ event SetOperator(address indexed indexer, address indexed operator, bool allowed); - /** - * @dev Possible states an allocation can be. - * States: - * - Null = indexer == address(0) - * - Active = not Null && tokens > 0 - * - Closed = Active && closedAtEpoch != 0 - */ - enum AllocationState { - Null, - Active, - Closed - } - /** * @notice Set the address of the counterpart (L1 or L2) staking contract. * @dev This function can only be called by the governor. - * @param _counterpart Address of the counterpart staking contract in the other chain, without any aliasing. + * @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing. */ - function setCounterpartStakingAddress(address _counterpart) external; + function setCounterpartStakingAddress(address counterpart) external; /** * @notice Close an allocation and free the staked tokens. * To be eligible for rewards a proof of indexing must be presented. * Presenting a bad proof is subject to slashable condition. * To opt out of rewards set _poi to 0x0 - * @param _allocationID The allocation identifier - * @param _poi Proof of indexing submitted for the allocated period + * @param allocationID The allocation identifier + * @param poi Proof of indexing submitted for the allocated period */ - function closeAllocation(address _allocationID, bytes32 _poi) external; + function closeAllocation(address allocationID, bytes32 poi) external; /** * @notice Collect query fees from state channels and assign them to an allocation. @@ -132,58 +133,58 @@ interface IStakingBackwardsCompatibility { * 1) Accept calls with zero tokens. * 2) Accept calls after an allocation passed the dispute period, in that case, all * the received tokens are burned. - * @param _tokens Amount of tokens to collect - * @param _allocationID Allocation where the tokens will be assigned + * @param tokens Amount of tokens to collect + * @param allocationID Allocation where the tokens will be assigned */ - function collect(uint256 _tokens, address _allocationID) external; + function collect(uint256 tokens, address allocationID) external; /** * @notice Return true if operator is allowed for indexer. - * @param _operator Address of the operator - * @param _indexer Address of the indexer + * @param operator Address of the operator + * @param indexer Address of the indexer * @return True if operator is allowed for indexer, false otherwise */ - function isOperator(address _operator, address _indexer) external view returns (bool); + function isOperator(address operator, address indexer) external view returns (bool); /** * @notice Getter that returns if an indexer has any stake. - * @param _indexer Address of the indexer + * @param indexer Address of the indexer * @return True if indexer has staked tokens */ - function hasStake(address _indexer) external view returns (bool); + function hasStake(address indexer) external view returns (bool); /** * @notice Get the total amount of tokens staked by the indexer. - * @param _indexer Address of the indexer + * @param indexer Address of the indexer * @return Amount of tokens staked by the indexer */ - function getIndexerStakedTokens(address _indexer) external view returns (uint256); + function getIndexerStakedTokens(address indexer) external view returns (uint256); /** * @notice Return the allocation by ID. - * @param _allocationID Address used as allocation identifier + * @param allocationID Address used as allocation identifier * @return Allocation data */ - function getAllocation(address _allocationID) external view returns (Allocation memory); + function getAllocation(address allocationID) external view returns (Allocation memory); /** * @notice Return the current state of an allocation - * @param _allocationID Allocation identifier + * @param allocationID Allocation identifier * @return AllocationState enum with the state of the allocation */ - function getAllocationState(address _allocationID) external view returns (AllocationState); + function getAllocationState(address allocationID) external view returns (AllocationState); /** * @notice Return if allocationID is used. - * @param _allocationID Address used as signer by the indexer for an allocation + * @param allocationID Address used as signer by the indexer for an allocation * @return True if allocationID already used */ - function isAllocation(address _allocationID) external view returns (bool); + function isAllocation(address allocationID) external view returns (bool); /** * @notice Return the total amount of tokens allocated to subgraph. - * @param _subgraphDeploymentID Deployment ID for the subgraph + * @param subgraphDeploymentID Deployment ID for the subgraph * @return Total tokens allocated to subgraph */ - function getSubgraphAllocatedTokens(bytes32 _subgraphDeploymentID) external view returns (uint256); + function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentID) external view returns (uint256); } diff --git a/packages/horizon/contracts/mocks/ControllerMock.sol b/packages/horizon/contracts/mocks/ControllerMock.sol index f8c976cf9..a30993a89 100644 --- a/packages/horizon/contracts/mocks/ControllerMock.sol +++ b/packages/horizon/contracts/mocks/ControllerMock.sol @@ -12,7 +12,7 @@ import { IManaged } from "@graphprotocol/contracts/contracts/governance/IManaged */ contract ControllerMock is IController { /// @dev Track contract ids to contract proxy address - mapping(bytes32 => address) private _registry; + mapping(bytes32 contractName => address contractAddress) private _registry; address public governor; bool internal _paused; bool internal _partialPaused; @@ -23,59 +23,42 @@ contract ControllerMock is IController { /** * Constructor for the Controller mock - * @param _governor Address of the governor + * @param governor_ Address of the governor */ - constructor(address _governor) { - governor = _governor; - } - - /** - * @notice Getter to access governor - * @return Address of the governor - */ - function getGovernor() external view override returns (address) { - return governor; + constructor(address governor_) { + governor = governor_; } // -- Registry -- /** * @notice Register contract id and mapped address - * @param _id Contract id (keccak256 hash of contract name) - * @param _contractAddress Contract address + * @param id Contract id (keccak256 hash of contract name) + * @param contractAddress Contract address */ - function setContractProxy(bytes32 _id, address _contractAddress) external override { - require(_contractAddress != address(0), "Contract address must be set"); - _registry[_id] = _contractAddress; - emit SetContractProxy(_id, _contractAddress); + function setContractProxy(bytes32 id, address contractAddress) external override { + require(contractAddress != address(0), "Contract address must be set"); + _registry[id] = contractAddress; + emit SetContractProxy(id, contractAddress); } /** * @notice Unregister a contract address - * @param _id Contract id (keccak256 hash of contract name) - */ - function unsetContractProxy(bytes32 _id) external override { - _registry[_id] = address(0); - emit SetContractProxy(_id, address(0)); - } - - /** - * @notice Get contract proxy address by its id - * @param _id Contract id (keccak256 hash of contract name) - * @return Address of the proxy contract for the provided id + * @param id Contract id (keccak256 hash of contract name) */ - function getContractProxy(bytes32 _id) external view override returns (address) { - return _registry[_id]; + function unsetContractProxy(bytes32 id) external override { + _registry[id] = address(0); + emit SetContractProxy(id, address(0)); } /** * @notice Update a contract's controller - * @param _id Contract id (keccak256 hash of contract name) - * @param _controller New Controller address + * @param id Contract id (keccak256 hash of contract name) + * @param controller New Controller address */ - function updateController(bytes32 _id, address _controller) external override { - require(_controller != address(0), "Controller must be set"); - return IManaged(_registry[_id]).setController(_controller); + function updateController(bytes32 id, address controller) external override { + require(controller != address(0), "Controller must be set"); + return IManaged(_registry[id]).setController(controller); } // -- Pausing -- @@ -83,28 +66,45 @@ contract ControllerMock is IController { /** * @notice Change the partial paused state of the contract * Partial pause is intended as a partial pause of the protocol - * @param _toPause True if the contracts should be (partially) paused, false otherwise + * @param toPause True if the contracts should be (partially) paused, false otherwise */ - function setPartialPaused(bool _toPause) external override { - _partialPaused = _toPause; + function setPartialPaused(bool toPause) external override { + _partialPaused = toPause; } /** * @notice Change the paused state of the contract * Full pause most of protocol functions - * @param _toPause True if the contracts should be paused, false otherwise + * @param toPause True if the contracts should be paused, false otherwise */ - function setPaused(bool _toPause) external override { - _paused = _toPause; + function setPaused(bool toPause) external override { + _paused = toPause; } /** * @notice Change the Pause Guardian - * @param _newPauseGuardian The address of the new Pause Guardian + * @param newPauseGuardian The address of the new Pause Guardian + */ + function setPauseGuardian(address newPauseGuardian) external override { + require(newPauseGuardian != address(0), "PauseGuardian must be set"); + _pauseGuardian = newPauseGuardian; + } + + /** + * @notice Getter to access governor + * @return Address of the governor + */ + function getGovernor() external view override returns (address) { + return governor; + } + + /** + * @notice Get contract proxy address by its id + * @param id Contract id (keccak256 hash of contract name) + * @return Address of the proxy contract for the provided id */ - function setPauseGuardian(address _newPauseGuardian) external override { - require(_newPauseGuardian != address(0), "PauseGuardian must be set"); - _pauseGuardian = _newPauseGuardian; + function getContractProxy(bytes32 id) external view override returns (address) { + return _registry[id]; } /** diff --git a/packages/horizon/contracts/mocks/MockGRTToken.sol b/packages/horizon/contracts/mocks/MockGRTToken.sol index a39faaed3..1212f3e70 100644 --- a/packages/horizon/contracts/mocks/MockGRTToken.sol +++ b/packages/horizon/contracts/mocks/MockGRTToken.sol @@ -1,46 +1,47 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; contract MockGRTToken is ERC20, IGraphToken { constructor() ERC20("Graph Token", "GRT") {} function burn(uint256 amount) external {} - function burnFrom(address _from, uint256 amount) external { - _burn(_from, amount); - } - - function mint(address to, uint256 amount) public { - _mint(to, amount); + function burnFrom(address from, uint256 amount) external { + _burn(from, amount); } // -- Mint Admin -- - function addMinter(address _account) external {} + function addMinter(address account) external {} - function removeMinter(address _account) external {} + function removeMinter(address account) external {} function renounceMinter() external {} - function isMinter(address _account) external view returns (bool) {} - // -- Permit -- function permit( - address _owner, - address _spender, - uint256 _value, - uint256 _deadline, - uint8 _v, - bytes32 _r, - bytes32 _s + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s ) external {} // -- Allowance -- function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {} + function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {} + + function isMinter(address account) external view returns (bool) {} + + function mint(address to, uint256 amount) public { + _mint(to, amount); + } } diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 2a2fa96ba..41ba9f063 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -9,6 +9,7 @@ import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDirectory { + uint256 private immutable MAX_PPM = 1000000; // 100% in parts per million // -- Errors -- error GraphPaymentsNotThawing(); @@ -22,12 +23,10 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi // -- Parameters -- - uint256 private immutable MAX_PPM = 1000000; // 100% in parts per million - // -- Constructor -- - constructor(address _controller, uint256 _protocolPaymentCut) GraphDirectory(_controller) { - protocolPaymentCut = _protocolPaymentCut; + constructor(address controller, uint256 protocolPaymentCut) GraphDirectory(controller) { + protocolPaymentCut = protocolPaymentCut; } // collect funds from a sender, pay cuts and forward the rest to the receiver @@ -43,7 +42,7 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi TokenUtils.pullTokens(graphToken, msg.sender, amount); // Pay protocol cut - uint256 tokensProtocol = (amount * protocolPaymentCut) / MAX_PPM; + uint256 tokensProtocol = (amount * PROTOCOL_PAYMENT_CUT) / MAX_PPM; TokenUtils.burnTokens(graphToken, tokensProtocol); // Pay data service cut diff --git a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol index 7d4c1c338..09a8691d8 100644 --- a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol +++ b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol @@ -1,9 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; - contract GraphPaymentsStorageV1Storage { // The graph protocol payment cut - uint256 public immutable protocolPaymentCut; + uint256 public immutable PROTOCOL_PAYMENT_CUT; } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 883e1f611..a773d8dd0 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -58,20 +58,20 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp error HorizonStakingInsufficientTokens(uint256 expected, uint256 available); error HorizonStakingSlippageProtection(uint256 minExpectedAmount, uint256 actualAmount); - modifier onlyAuthorized(address _serviceProvider, address _verifier) { - if (!isAuthorized(msg.sender, _serviceProvider, _verifier)) { - revert HorizonStakingNotAuthorized(msg.sender, _serviceProvider, _verifier); + modifier onlyAuthorized(address serviceProvider, address verifier) { + if (!isAuthorized(msg.sender, serviceProvider, verifier)) { + revert HorizonStakingNotAuthorized(msg.sender, serviceProvider, verifier); } _; } constructor( - address _controller, - address _stakingExtensionAddress, - address _subgraphDataServiceAddress - ) Managed(_controller) { - STAKING_EXTENSION_ADDRESS = _stakingExtensionAddress; - SUBGRAPH_DATA_SERVICE_ADDRESS = _subgraphDataServiceAddress; + address controller, + address stakingExtensionAddress, + address subgraphDataServiceAddress + ) Managed(controller) { + STAKING_EXTENSION_ADDRESS = stakingExtensionAddress; + SUBGRAPH_DATA_SERVICE_ADDRESS = subgraphDataServiceAddress; } /** @@ -111,63 +111,46 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp /** * @notice Deposit tokens on the caller's stake. - * @param _tokens Amount of tokens to stake + * @param tokens Amount of tokens to stake */ - function stake(uint256 _tokens) external override { - stakeTo(msg.sender, _tokens); - } - - /** - * @notice Deposit tokens on the service provider stake, on behalf of the service provider. - * @param _serviceProvider Address of the indexer - * @param _tokens Amount of tokens to stake - */ - function stakeTo(address _serviceProvider, uint256 _tokens) public override notPartialPaused { - if (_tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } - - // Transfer tokens to stake from caller to this contract - TokenUtils.pullTokens(_graphToken(), msg.sender, _tokens); - - // Stake the transferred tokens - _stake(_serviceProvider, _tokens); + function stake(uint256 tokens) external override { + stakeTo(msg.sender, tokens); } function setProvisionParameters( - address _serviceProvider, - address _verifier, - uint32 _maxVerifierCut, - uint64 _thawingPeriod - ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) { - Provision storage prov = provisions[_serviceProvider][_verifier]; - prov.maxVerifierCutPending = _maxVerifierCut; - prov.thawingPeriodPending = _thawingPeriod; - emit ProvisionParametersStaged(_serviceProvider, _verifier, _maxVerifierCut, _thawingPeriod); - } - - function acceptProvisionParameters(address _serviceProvider) external override notPartialPaused { + address serviceProvider, + address verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + Provision storage prov = _provisions[serviceProvider][verifier]; + prov.maxVerifierCutPending = maxVerifierCut; + prov.thawingPeriodPending = thawingPeriod; + emit ProvisionParametersStaged(serviceProvider, verifier, maxVerifierCut, thawingPeriod); + } + + function acceptProvisionParameters(address serviceProvider) external override notPartialPaused { address verifier = msg.sender; - Provision storage prov = provisions[_serviceProvider][verifier]; + Provision storage prov = _provisions[serviceProvider][verifier]; prov.maxVerifierCut = prov.maxVerifierCutPending; prov.thawingPeriod = prov.thawingPeriodPending; - emit ProvisionParametersSet(_serviceProvider, verifier, prov.maxVerifierCut, prov.thawingPeriod); + emit ProvisionParametersSet(serviceProvider, verifier, prov.maxVerifierCut, prov.thawingPeriod); } /** * @notice Deposit tokens on the service provider stake, on behalf of the service provider, provisioned * to a specific verifier. The provider must have previously provisioned stake to that verifier. - * @param _serviceProvider Address of the indexer - * @param _verifier Address of the verifier - * @param _tokens Amount of tokens to stake + * @param serviceProvider Address of the indexer + * @param verifier Address of the verifier + * @param tokens Amount of tokens to stake */ function stakeToProvision( - address _serviceProvider, - address _verifier, - uint256 _tokens + address serviceProvider, + address verifier, + uint256 tokens ) external override notPartialPaused { - stakeTo(_serviceProvider, _tokens); - _addToProvision(_serviceProvider, _verifier, _tokens); + stakeTo(serviceProvider, tokens); + _addToProvision(serviceProvider, verifier, tokens); } /** @@ -176,24 +159,24 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp * service, where the data service is the verifier. * This function can be called by the service provider or by an operator authorized by the provider * for this specific verifier. - * @param _serviceProvider The service provider address - * @param _verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) - * @param _tokens The amount of tokens that will be locked and slashable - * @param _maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing - * @param _thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) + * @param tokens The amount of tokens that will be locked and slashable + * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing + * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision */ function provision( - address _serviceProvider, - address _verifier, - uint256 _tokens, - uint32 _maxVerifierCut, - uint64 _thawingPeriod - ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) { - if (getIdleStake(_serviceProvider) < _tokens) { + address serviceProvider, + address verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + if (getIdleStake(serviceProvider) < tokens) { revert HorizonStakingInsufficientCapacity(); } - _createProvision(_serviceProvider, _tokens, _verifier, _maxVerifierCut, _thawingPeriod); + _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } /** @@ -202,75 +185,73 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp * service, where the data service is the verifier. Only authorized verifiers can be used. * This function can be called by the service provider or by an operator authorized by the provider * for this specific verifier. - * @param _serviceProvider The service provider address - * @param _verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) - * @param _tokens The amount of tokens that will be locked and slashable - * @param _maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing - * @param _thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) + * @param tokens The amount of tokens that will be locked and slashable + * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing + * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision */ function provisionLocked( - address _serviceProvider, - address _verifier, - uint256 _tokens, - uint32 _maxVerifierCut, - uint64 _thawingPeriod - ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) { - if (getIdleStake(_serviceProvider) < _tokens) { + address serviceProvider, + address verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + if (getIdleStake(serviceProvider) < tokens) { revert HorizonStakingInsufficientCapacity(); } - if (!allowedLockedVerifiers[_verifier]) { - revert HorizonStakingInvalidVerifier(_verifier); + if (!_allowedLockedVerifiers[verifier]) { + revert HorizonStakingInvalidVerifier(verifier); } - _createProvision(_serviceProvider, _tokens, _verifier, _maxVerifierCut, _thawingPeriod); + _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } /** * @notice Add more tokens to an existing provision. * This function can be called by the service provider or by an operator authorized by the provider * for this specific verifier. - * @param _serviceProvider The service provider address - * @param _verifier The verifier address for which the tokens are provisioned - * @param _tokens The amount of tokens to add to the provision + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + * @param tokens The amount of tokens to add to the provision */ function addToProvision( - address _serviceProvider, - address _verifier, - uint256 _tokens - ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) { - _addToProvision(_serviceProvider, _verifier, _tokens); + address serviceProvider, + address verifier, + uint256 tokens + ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + _addToProvision(serviceProvider, verifier, tokens); } /** * @notice Start thawing tokens to remove them from a provision. * This function can be called by the service provider or by an operator authorized by the provider * for this specific verifier. - * @param _serviceProvider The service provider address - * @param _verifier The verifier address for which the tokens are provisioned - * @param _tokens The amount of tokens to thaw + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + * @param tokens The amount of tokens to thaw */ function thaw( - address _serviceProvider, - address _verifier, - uint256 _tokens - ) external override notPartialPaused onlyAuthorized(_serviceProvider, _verifier) returns (bytes32) { - if (_tokens == 0) { + address serviceProvider, + address verifier, + uint256 tokens + ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) returns (bytes32) { + if (tokens == 0) { revert HorizonStakingInvalidZeroTokens(); } - Provision storage prov = provisions[_serviceProvider][_verifier]; - ServiceProviderInternal storage serviceProvider = serviceProviders[_serviceProvider]; - bytes32 thawRequestId = keccak256( - abi.encodePacked(_serviceProvider, _verifier, serviceProvider.nextThawRequestNonce) - ); - serviceProvider.nextThawRequestNonce += 1; - ThawRequest storage thawRequest = thawRequests[thawRequestId]; + Provision storage prov = _provisions[serviceProvider][verifier]; + ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; + bytes32 thawRequestId = keccak256(abi.encodePacked(serviceProvider, verifier, sp.nextThawRequestNonce)); + sp.nextThawRequestNonce += 1; + ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - require(getProviderTokensAvailable(_serviceProvider, _verifier) >= _tokens, "insufficient tokens available"); - prov.tokensThawing = prov.tokensThawing + _tokens; + require(getProviderTokensAvailable(serviceProvider, verifier) >= tokens, "insufficient tokens available"); + prov.tokensThawing = prov.tokensThawing + tokens; if (prov.sharesThawing == 0) { - thawRequest.shares = _tokens; + thawRequest.shares = tokens; } else { - thawRequest.shares = (prov.sharesThawing * _tokens) / prov.tokensThawing; + thawRequest.shares = (prov.sharesThawing * tokens) / prov.tokensThawing; } thawRequest.thawingUntil = uint64(block.timestamp + uint256(prov.thawingPeriod)); @@ -282,51 +263,23 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp if (prov.nThawRequests == 0) { prov.firstThawRequestId = thawRequestId; } else { - thawRequests[prov.lastThawRequestId].next = thawRequestId; + _thawRequests[prov.lastThawRequestId].next = thawRequestId; } prov.lastThawRequestId = thawRequestId; prov.nThawRequests += 1; - emit ProvisionThawInitiated(_serviceProvider, _verifier, _tokens, thawRequest.thawingUntil, thawRequestId); + emit ProvisionThawInitiated(serviceProvider, verifier, tokens, thawRequest.thawingUntil, thawRequestId); return thawRequestId; } - /** - * @notice Get the amount of service provider's tokens in a provision that have finished thawing - * @param _serviceProvider The service provider address - * @param _verifier The verifier address for which the tokens are provisioned - */ - function getThawedTokens(address _serviceProvider, address _verifier) external view returns (uint256) { - Provision storage prov = provisions[_serviceProvider][_verifier]; - if (prov.nThawRequests == 0) { - return 0; - } - bytes32 thawRequestId = prov.firstThawRequestId; - uint256 tokens = 0; - while (thawRequestId != bytes32(0)) { - ThawRequest storage thawRequest = thawRequests[thawRequestId]; - if (thawRequest.thawingUntil <= block.timestamp) { - tokens += (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; - } else { - break; - } - thawRequestId = thawRequest.next; - } - return tokens; - } - // moves thawed stake from a provision back into the provider's available stake - function deprovision( - address _serviceProvider, - address _verifier, - uint256 _tokens - ) external override notPartialPaused { - require(isAuthorized(msg.sender, _serviceProvider, _verifier), "!auth"); - if (_tokens == 0) { + function deprovision(address serviceProvider, address verifier, uint256 tokens) external override notPartialPaused { + require(isAuthorized(msg.sender, serviceProvider, verifier), "!auth"); + if (tokens == 0) { revert HorizonStakingInvalidZeroTokens(); } - _fulfillThawRequests(_serviceProvider, _verifier, _tokens); + _fulfillThawRequests(serviceProvider, verifier, tokens); } /** @@ -334,49 +287,49 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp * This function can be called by the service provider or by an operator authorized by the provider * for the two corresponding verifiers. * The provider must have previously provisioned tokens to the new verifier. - * @param _serviceProvider The service provider address - * @param _oldVerifier The verifier address for which the tokens are currently provisioned - * @param _newVerifier The verifier address for which the tokens will be provisioned - * @param _tokens The amount of tokens to move + * @param serviceProvider The service provider address + * @param oldVerifier The verifier address for which the tokens are currently provisioned + * @param newVerifier The verifier address for which the tokens will be provisioned + * @param tokens The amount of tokens to move */ function reprovision( - address _serviceProvider, - address _oldVerifier, - address _newVerifier, - uint256 _tokens + address serviceProvider, + address oldVerifier, + address newVerifier, + uint256 tokens ) external override notPartialPaused - onlyAuthorized(_serviceProvider, _oldVerifier) - onlyAuthorized(_serviceProvider, _newVerifier) + onlyAuthorized(serviceProvider, oldVerifier) + onlyAuthorized(serviceProvider, newVerifier) { - _fulfillThawRequests(_serviceProvider, _oldVerifier, _tokens); - _addToProvision(_serviceProvider, _newVerifier, _tokens); + _fulfillThawRequests(serviceProvider, oldVerifier, tokens); + _addToProvision(serviceProvider, newVerifier, tokens); } /** * @notice Move idle stake back to the owner's account. * If tokens were thawing they must be deprovisioned first. * Stake is removed from the protocol. - * @param _tokens Amount of tokens to unstake + * @param tokens Amount of tokens to unstake */ - function unstake(uint256 _tokens) external override notPaused { + function unstake(uint256 tokens) external override notPaused { address serviceProvider = msg.sender; - if (_tokens == 0) { + if (tokens == 0) { revert HorizonStakingInvalidZeroTokens(); } - if (getIdleStake(serviceProvider) < _tokens) { + if (getIdleStake(serviceProvider) < tokens) { revert HorizonStakingInsufficientCapacity(); } - ServiceProviderInternal storage sp = serviceProviders[serviceProvider]; + ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; uint256 stakedTokens = sp.tokensStaked; // Check that the indexer's stake minus the tokens to unstake is sufficient // to cover existing allocations // TODO this is only needed until legacy allocations are closed, // so we should remove it after the transition period - if ((stakedTokens - _tokens) < sp.__DEPRECATED_tokensAllocated) { + if ((stakedTokens - tokens) < sp.__DEPRECATED_tokensAllocated) { revert HorizonStakingInsufficientCapacityForLegacyAllocations(); } @@ -386,9 +339,9 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp // and set the thawing period to 0. uint256 lockingPeriod = __DEPRECATED_thawingPeriod; if (lockingPeriod == 0) { - sp.tokensStaked = stakedTokens - _tokens; - TokenUtils.pushTokens(_graphToken(), serviceProvider, _tokens); - emit StakeWithdrawn(serviceProvider, _tokens); + sp.tokensStaked = stakedTokens - tokens; + TokenUtils.pushTokens(_graphToken(), serviceProvider, tokens); + emit StakeWithdrawn(serviceProvider, tokens); } else { // Before locking more tokens, withdraw any unlocked ones if possible if (sp.__DEPRECATED_tokensLockedUntil != 0 && block.number >= sp.__DEPRECATED_tokensLockedUntil) { @@ -401,12 +354,12 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp MathUtils.diffOrZero(sp.__DEPRECATED_tokensLockedUntil, block.number), // Remaining thawing period sp.__DEPRECATED_tokensLocked, // Weighted by remaining unstaked tokens lockingPeriod, // Thawing period - _tokens // Weighted by new tokens to unstake + tokens // Weighted by new tokens to unstake ); } // Update balances - sp.__DEPRECATED_tokensLocked = sp.__DEPRECATED_tokensLocked + _tokens; + sp.__DEPRECATED_tokensLocked = sp.__DEPRECATED_tokensLocked + tokens; sp.__DEPRECATED_tokensLockedUntil = block.number + lockingPeriod; emit StakeLocked(serviceProvider, sp.__DEPRECATED_tokensLocked, sp.__DEPRECATED_tokensLockedUntil); } @@ -417,54 +370,54 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp * the provider has provisioned stake, and up to the amount of tokens they have provisioned. * @dev If delegation slashing is disabled, and the amount of tokens is more than the * provider's provisioned self-stake, the delegation slashing is skipped without reverting. - * @param _serviceProvider The service provider to slash - * @param _tokens The amount of tokens to slash - * @param _verifierCutAmount The amount of tokens to transfer instead of burning - * @param _verifierCutDestination The address to transfer the verifier cut to + * @param serviceProvider The service provider to slash + * @param tokens The amount of tokens to slash + * @param verifierCutAmount The amount of tokens to transfer instead of burning + * @param verifierCutDestination The address to transfer the verifier cut to */ function slash( - address _serviceProvider, - uint256 _tokens, - uint256 _verifierCutAmount, - address _verifierCutDestination + address serviceProvider, + uint256 tokens, + uint256 verifierCutAmount, + address verifierCutDestination ) external override notPartialPaused { address verifier = msg.sender; - Provision storage prov = provisions[_serviceProvider][verifier]; - if (prov.tokens < _tokens) { - revert HorizonStakingInsufficientTokens(_tokens, prov.tokens); + Provision storage prov = _provisions[serviceProvider][verifier]; + if (prov.tokens < tokens) { + revert HorizonStakingInsufficientTokens(tokens, prov.tokens); } - uint256 tokensToSlash = _tokens; + uint256 tokensToSlash = tokens; uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); if (providerTokensSlashed > 0) { - require((prov.tokens * prov.maxVerifierCut) / MAX_PPM >= _verifierCutAmount, "verifier cut too high"); - if (_verifierCutAmount > 0) { - TokenUtils.pushTokens(_graphToken(), _verifierCutDestination, _verifierCutAmount); - emit VerifierCutSent(_serviceProvider, verifier, _verifierCutDestination, _verifierCutAmount); + require((prov.tokens * prov.maxVerifierCut) / MAX_PPM >= verifierCutAmount, "verifier cut too high"); + if (verifierCutAmount > 0) { + TokenUtils.pushTokens(_graphToken(), verifierCutDestination, verifierCutAmount); + emit VerifierCutSent(serviceProvider, verifier, verifierCutDestination, verifierCutAmount); } - TokenUtils.burnTokens(_graphToken(), providerTokensSlashed - _verifierCutAmount); + TokenUtils.burnTokens(_graphToken(), providerTokensSlashed - verifierCutAmount); uint256 provisionFractionSlashed = (providerTokensSlashed * FIXED_POINT_PRECISION) / prov.tokens; // TODO check for rounding issues prov.tokensThawing = (prov.tokensThawing * (FIXED_POINT_PRECISION - provisionFractionSlashed)) / (FIXED_POINT_PRECISION); prov.tokens = prov.tokens - providerTokensSlashed; - serviceProviders[_serviceProvider].tokensProvisioned = - serviceProviders[_serviceProvider].tokensProvisioned - + _serviceProviders[serviceProvider].tokensProvisioned = + _serviceProviders[serviceProvider].tokensProvisioned - providerTokensSlashed; - serviceProviders[_serviceProvider].tokensStaked = - serviceProviders[_serviceProvider].tokensStaked - + _serviceProviders[serviceProvider].tokensStaked = + _serviceProviders[serviceProvider].tokensStaked - providerTokensSlashed; - emit ProvisionSlashed(_serviceProvider, verifier, providerTokensSlashed); + emit ProvisionSlashed(serviceProvider, verifier, providerTokensSlashed); } tokensToSlash = tokensToSlash - providerTokensSlashed; if (tokensToSlash > 0) { DelegationPoolInternal storage pool; if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = legacyDelegationPools[_serviceProvider]; + pool = _legacyDelegationPools[serviceProvider]; } else { - pool = delegationPools[_serviceProvider][verifier]; + pool = _delegationPools[serviceProvider][verifier]; } if (delegationSlashingEnabled) { require(pool.tokens >= tokensToSlash, "insufficient delegated tokens"); @@ -474,55 +427,32 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp pool.tokensThawing = (pool.tokensThawing * (FIXED_POINT_PRECISION - delegationFractionSlashed)) / FIXED_POINT_PRECISION; - emit DelegationSlashed(_serviceProvider, verifier, tokensToSlash); + emit DelegationSlashed(serviceProvider, verifier, tokensToSlash); } else { - emit DelegationSlashingSkipped(_serviceProvider, verifier, tokensToSlash); + emit DelegationSlashingSkipped(serviceProvider, verifier, tokensToSlash); } } } - /** - * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param _operator The address to check for auth - * @param _serviceProvider The service provider on behalf of whom they're claiming to act - * @param _verifier The verifier / data service on which they're claiming to act - */ - function isAuthorized( - address _operator, - address _serviceProvider, - address _verifier - ) public view override returns (bool) { - if (_operator == _serviceProvider) { - return true; - } - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - return legacyOperatorAuth[_serviceProvider][_operator]; - } else { - return operatorAuth[_serviceProvider][_verifier][_operator]; - } + // For backwards compatibility, delegates to the subgraph data service + // (Note this one doesn't have splippage/rounding protection!) + function delegate(address serviceProvider, uint256 tokens) external { + delegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, tokens, 0); } - // staked tokens that are currently not provisioned, aka idle stake - // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address serviceProvider) public view override returns (uint256 tokens) { - return - serviceProviders[serviceProvider].tokensStaked - - serviceProviders[serviceProvider].tokensProvisioned - - serviceProviders[serviceProvider].__DEPRECATED_tokensLocked; + // For backwards compatibility, undelegates from the subgraph data service + function undelegate(address serviceProvider, uint256 shares) external { + undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares); } - // provisioned tokens from the service provider that are not being thawed - // `Provision.tokens - Provision.tokensThawing` - function getProviderTokensAvailable( - address _serviceProvider, - address _verifier - ) public view override returns (uint256) { - return provisions[_serviceProvider][_verifier].tokens - provisions[_serviceProvider][_verifier].tokensThawing; + // For backwards compatibility, withdraws delegated tokens from the subgraph data service + function withdrawDelegated(address serviceProvider, address newServiceProvider) external { + withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0); } - function setAllowedLockedVerifier(address _verifier, bool _allowed) external onlyGovernor { - allowedLockedVerifiers[_verifier] = _allowed; - emit AllowedLockedVerifierSet(_verifier, _allowed); + function setAllowedLockedVerifier(address verifier, bool allowed) external onlyGovernor { + _allowedLockedVerifiers[verifier] = allowed; + emit AllowedLockedVerifierSet(verifier, allowed); } /** @@ -534,152 +464,159 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp _withdraw(msg.sender); } - function delegate( - address _serviceProvider, - address _verifier, - uint256 _tokens, - uint256 _minSharesOut - ) public override notPartialPaused { - // Transfer tokens to stake from caller to this contract - TokenUtils.pullTokens(_graphToken(), msg.sender, _tokens); - _delegate(_serviceProvider, _verifier, _tokens, _minSharesOut); + /** + * @notice Add tokens to a delegation pool (without getting shares). + * Used by data services to pay delegation fees/rewards. + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + * @param tokens The amount of tokens to add to the delegation pool + */ + function addToDelegationPool( + address serviceProvider, + address verifier, + uint256 tokens + ) external override notPartialPaused { + if (tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + DelegationPoolInternal storage pool; + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + pool = _legacyDelegationPools[serviceProvider]; + } else { + pool = _delegationPools[serviceProvider][verifier]; + } + pool.tokens = pool.tokens + tokens; + emit TokensAddedToDelegationPool(serviceProvider, verifier, tokens); } - // For backwards compatibility, delegates to the subgraph data service - // (Note this one doesn't have splippage/rounding protection!) - function delegate(address _serviceProvider, uint256 _tokens) external { - delegate(_serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, _tokens, 0); + function setDelegationSlashingEnabled(bool enabled) external override onlyGovernor { + delegationSlashingEnabled = enabled; + emit DelegationSlashingEnabled(enabled); } - // For backwards compatibility, undelegates from the subgraph data service - function undelegate(address _serviceProvider, uint256 _shares) external { - undelegate(_serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, _shares); + // To be called at the end of the transition period, to set the deprecated thawing period to 0 + function clearThawingPeriod() external onlyGovernor { + __DEPRECATED_thawingPeriod = 0; + emit ParameterUpdated("thawingPeriod"); } - // For backwards compatibility, withdraws delegated tokens from the subgraph data service - function withdrawDelegated(address _serviceProvider, address _newServiceProvider) external { - withdrawDelegated(_serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, _newServiceProvider, 0); + function setMaxThawingPeriod(uint64 maxThawingPeriod) external override onlyGovernor { + maxThawingPeriod = _maxThawingPeriod; + emit ParameterUpdated("maxThawingPeriod"); } - function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) internal { - if (_tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } - // TODO: remove this after L2 transfer tool for delegation is removed - if (_tokens < MIN_DELEGATION) { - revert HorizonStakingInsufficientTokens(MIN_DELEGATION, _tokens); - } - if (provisions[_serviceProvider][_verifier].tokens == 0) { - revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); + /** + * @notice Get the amount of service provider's tokens in a provision that have finished thawing + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + */ + function getThawedTokens(address serviceProvider, address verifier) external view returns (uint256) { + Provision storage prov = _provisions[serviceProvider][verifier]; + if (prov.nThawRequests == 0) { + return 0; } - - DelegationPoolInternal storage pool; - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = legacyDelegationPools[_serviceProvider]; - } else { - pool = delegationPools[_serviceProvider][_verifier]; + bytes32 thawRequestId = prov.firstThawRequestId; + uint256 tokens = 0; + while (thawRequestId != bytes32(0)) { + ThawRequest storage thawRequest = _thawRequests[thawRequestId]; + if (thawRequest.thawingUntil <= block.timestamp) { + tokens += (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; + } else { + break; + } + thawRequestId = thawRequest.next; } - Delegation storage delegation = pool.delegators[msg.sender]; + return tokens; + } - // Calculate shares to issue - uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); - if (shares == 0 || shares < _minSharesOut) { - revert HorizonStakingSlippageProtection(_minSharesOut, shares); + /** + * @notice Deposit tokens on the service provider stake, on behalf of the service provider. + * @param serviceProvider Address of the indexer + * @param tokens Amount of tokens to stake + */ + function stakeTo(address serviceProvider, uint256 tokens) public override notPartialPaused { + if (tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); } - pool.tokens = pool.tokens + _tokens; - pool.shares = pool.shares + shares; + // Transfer tokens to stake from caller to this contract + TokenUtils.pullTokens(_graphToken(), msg.sender, tokens); - delegation.shares = delegation.shares + shares; + // Stake the transferred tokens + _stake(serviceProvider, tokens); + } - emit TokensDelegated(_serviceProvider, _verifier, msg.sender, _tokens); + function delegate( + address serviceProvider, + address verifier, + uint256 tokens, + uint256 minSharesOut + ) public override notPartialPaused { + // Transfer tokens to stake from caller to this contract + TokenUtils.pullTokens(_graphToken(), msg.sender, tokens); + _delegate(serviceProvider, verifier, tokens, minSharesOut); } // undelegate tokens from a service provider // the shares are burned and replaced with shares in the thawing pool - function undelegate(address _serviceProvider, address _verifier, uint256 _shares) public override notPartialPaused { - require(_shares > 0, "!shares"); + function undelegate(address serviceProvider, address verifier, uint256 shares) public override notPartialPaused { + require(shares > 0, "!shares"); DelegationPoolInternal storage pool; - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = legacyDelegationPools[_serviceProvider]; + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + pool = _legacyDelegationPools[serviceProvider]; } else { - pool = delegationPools[_serviceProvider][_verifier]; + pool = _delegationPools[serviceProvider][verifier]; } Delegation storage delegation = pool.delegators[msg.sender]; - require(delegation.shares >= _shares, "!shares-avail"); + require(delegation.shares >= shares, "!shares-avail"); - uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; + uint256 tokens = (shares * (pool.tokens - pool.tokensThawing)) / pool.shares; uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); pool.tokensThawing = pool.tokensThawing + tokens; - pool.shares = pool.shares - _shares; + pool.shares = pool.shares - shares; pool.sharesThawing = pool.sharesThawing + thawingShares; - delegation.shares = delegation.shares - _shares; + delegation.shares = delegation.shares - shares; // TODO: remove this when L2 transfer tools are removed if (delegation.shares != 0) { uint256 remainingTokens = (delegation.shares * (pool.tokens - pool.tokensThawing)) / pool.shares; require(remainingTokens >= MIN_DELEGATION, "!minimum-delegation"); } bytes32 thawRequestId = keccak256( - abi.encodePacked(_serviceProvider, _verifier, msg.sender, delegation.nextThawRequestNonce) + abi.encodePacked(serviceProvider, verifier, msg.sender, delegation.nextThawRequestNonce) ); delegation.nextThawRequestNonce += 1; - ThawRequest storage thawRequest = thawRequests[thawRequestId]; + ThawRequest storage thawRequest = _thawRequests[thawRequestId]; thawRequest.shares = thawingShares; thawRequest.thawingUntil = uint64( - block.timestamp + uint256(provisions[_serviceProvider][_verifier].thawingPeriod) + block.timestamp + uint256(_provisions[serviceProvider][verifier].thawingPeriod) ); require(delegation.nThawRequests < MAX_THAW_REQUESTS, "max thaw requests"); if (delegation.nThawRequests == 0) { delegation.firstThawRequestId = thawRequestId; } else { - thawRequests[delegation.lastThawRequestId].next = thawRequestId; + _thawRequests[delegation.lastThawRequestId].next = thawRequestId; } delegation.lastThawRequestId = thawRequestId; unchecked { delegation.nThawRequests += 1; } - emit TokensUndelegated(_serviceProvider, _verifier, msg.sender, tokens); - } - - /** - * @notice Add tokens to a delegation pool (without getting shares). - * Used by data services to pay delegation fees/rewards. - * @param _serviceProvider The service provider address - * @param _verifier The verifier address for which the tokens are provisioned - * @param _tokens The amount of tokens to add to the delegation pool - */ - function addToDelegationPool( - address _serviceProvider, - address _verifier, - uint256 _tokens - ) external override notPartialPaused { - if (_tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } - DelegationPoolInternal storage pool; - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = legacyDelegationPools[_serviceProvider]; - } else { - pool = delegationPools[_serviceProvider][_verifier]; - } - pool.tokens = pool.tokens + _tokens; - emit TokensAddedToDelegationPool(_serviceProvider, _verifier, _tokens); + emit TokensUndelegated(serviceProvider, verifier, msg.sender, tokens); } function withdrawDelegated( - address _serviceProvider, - address _verifier, - address _newServiceProvider, - uint256 _minSharesForNewProvider + address serviceProvider, + address verifier, + address newServiceProvider, + uint256 minSharesForNewProvider ) public override notPartialPaused { DelegationPoolInternal storage pool; - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = legacyDelegationPools[_serviceProvider]; + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + pool = _legacyDelegationPools[serviceProvider]; } else { - pool = delegationPools[_serviceProvider][_verifier]; + pool = _delegationPools[serviceProvider][verifier]; } Delegation storage delegation = pool.delegators[msg.sender]; uint256 thawedTokens = 0; @@ -689,13 +626,13 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp require(delegation.nThawRequests > 0, "no thaw requests"); bytes32 thawRequestId = delegation.firstThawRequestId; while (thawRequestId != bytes32(0)) { - ThawRequest storage thawRequest = thawRequests[thawRequestId]; + ThawRequest storage thawRequest = _thawRequests[thawRequestId]; if (thawRequest.thawingUntil <= block.timestamp) { uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; tokensThawing = tokensThawing - tokens; sharesThawing = sharesThawing - thawRequest.shares; thawedTokens = thawedTokens + tokens; - delete thawRequests[thawRequestId]; + delete _thawRequests[thawRequestId]; delegation.firstThawRequestId = thawRequest.next; delegation.nThawRequests -= 1; if (delegation.nThawRequests == 0) { @@ -711,51 +648,85 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp pool.sharesThawing = sharesThawing; pool.tokensThawing = tokensThawing; - if (_newServiceProvider != address(0)) { - _delegate(_newServiceProvider, _verifier, thawedTokens, _minSharesForNewProvider); + if (newServiceProvider != address(0)) { + _delegate(newServiceProvider, verifier, thawedTokens, minSharesForNewProvider); } else { TokenUtils.pushTokens(_graphToken(), msg.sender, thawedTokens); } - emit DelegatedTokensWithdrawn(_serviceProvider, _verifier, msg.sender, thawedTokens); + emit DelegatedTokensWithdrawn(serviceProvider, verifier, msg.sender, thawedTokens); } - function setDelegationSlashingEnabled(bool _enabled) external override onlyGovernor { - delegationSlashingEnabled = _enabled; - emit DelegationSlashingEnabled(_enabled); + /** + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param operator The address to check for auth + * @param serviceProvider The service provider on behalf of whom they're claiming to act + * @param verifier The verifier / data service on which they're claiming to act + */ + function isAuthorized( + address operator, + address serviceProvider, + address verifier + ) public view override returns (bool) { + if (operator == serviceProvider) { + return true; + } + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + return _legacyOperatorAuth[serviceProvider][operator]; + } else { + return _operatorAuth[serviceProvider][verifier][operator]; + } } - // To be called at the end of the transition period, to set the deprecated thawing period to 0 - function clearThawingPeriod() external onlyGovernor { - __DEPRECATED_thawingPeriod = 0; - emit ParameterUpdated("thawingPeriod"); + // staked tokens that are currently not provisioned, aka idle stake + // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` + function getIdleStake(address serviceProvider) public view override returns (uint256 tokens) { + return + _serviceProviders[serviceProvider].tokensStaked - + _serviceProviders[serviceProvider].tokensProvisioned - + _serviceProviders[serviceProvider].__DEPRECATED_tokensLocked; } - function setMaxThawingPeriod(uint64 _maxThawingPeriod) external override onlyGovernor { - maxThawingPeriod = _maxThawingPeriod; - emit ParameterUpdated("maxThawingPeriod"); + // provisioned tokens from the service provider that are not being thawed + // `Provision.tokens - Provision.tokensThawing` + function getProviderTokensAvailable( + address serviceProvider, + address verifier + ) public view override returns (uint256) { + return _provisions[serviceProvider][verifier].tokens - _provisions[serviceProvider][verifier].tokensThawing; } - /** - * @dev Withdraw indexer tokens once the thawing period has passed. - * @param _indexer Address of indexer to withdraw funds from - */ - function _withdraw(address _indexer) private { - // Get tokens available for withdraw and update balance - ServiceProviderInternal storage sp = serviceProviders[_indexer]; - uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; - require(tokensToWithdraw > 0, "!tokens"); - require(block.number >= sp.__DEPRECATED_tokensLockedUntil, "locked"); + function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) internal { + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + // TODO: remove this after L2 transfer tool for delegation is removed + if (_tokens < MIN_DELEGATION) { + revert HorizonStakingInsufficientTokens(MIN_DELEGATION, _tokens); + } + if (_provisions[_serviceProvider][_verifier].tokens == 0) { + revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); + } - // Reset locked tokens - sp.__DEPRECATED_tokensLocked = 0; - sp.__DEPRECATED_tokensLockedUntil = 0; + DelegationPoolInternal storage pool; + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + pool = _legacyDelegationPools[_serviceProvider]; + } else { + pool = _delegationPools[_serviceProvider][_verifier]; + } + Delegation storage delegation = pool.delegators[msg.sender]; - sp.tokensStaked = sp.tokensStaked - tokensToWithdraw; + // Calculate shares to issue + uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); + if (shares == 0 || shares < _minSharesOut) { + revert HorizonStakingSlippageProtection(_minSharesOut, shares); + } - // Return tokens to the indexer - TokenUtils.pushTokens(_graphToken(), _indexer, tokensToWithdraw); + pool.tokens = pool.tokens + _tokens; + pool.shares = pool.shares + shares; - emit StakeWithdrawn(_indexer, tokensToWithdraw); + delegation.shares = delegation.shares + shares; + + emit TokensDelegated(_serviceProvider, _verifier, msg.sender, _tokens); } /** @@ -770,8 +741,8 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp ) internal { require(_tokens >= MIN_PROVISION_SIZE, "!tokens"); require(_maxVerifierCut <= MAX_MAX_VERIFIER_CUT, "maxVerifierCut too high"); - require(_thawingPeriod <= maxThawingPeriod, "thawingPeriod too high"); - provisions[_serviceProvider][_verifier] = Provision({ + require(_thawingPeriod <= _maxThawingPeriod, "thawingPeriod too high"); + _provisions[_serviceProvider][_verifier] = Provision({ tokens: _tokens, tokensThawing: 0, sharesThawing: 0, @@ -785,26 +756,26 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp thawingPeriodPending: _thawingPeriod }); - ServiceProviderInternal storage sp = serviceProviders[_serviceProvider]; + ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; sp.tokensProvisioned = sp.tokensProvisioned + _tokens; emit ProvisionCreated(_serviceProvider, _verifier, _tokens, _maxVerifierCut, _thawingPeriod); } function _fulfillThawRequests(address _serviceProvider, address _verifier, uint256 _tokens) internal { - Provision storage prov = provisions[_serviceProvider][_verifier]; + Provision storage prov = _provisions[_serviceProvider][_verifier]; uint256 tokensRemaining = _tokens; uint256 sharesThawing = prov.sharesThawing; uint256 tokensThawing = prov.tokensThawing; while (tokensRemaining > 0) { require(prov.nThawRequests > 0, "not enough thawed tokens"); bytes32 thawRequestId = prov.firstThawRequestId; - ThawRequest storage thawRequest = thawRequests[thawRequestId]; + ThawRequest storage thawRequest = _thawRequests[thawRequestId]; require(thawRequest.thawingUntil <= block.timestamp, "thawing period not over"); uint256 thawRequestTokens = (thawRequest.shares * tokensThawing) / sharesThawing; if (thawRequestTokens <= tokensRemaining) { tokensRemaining = tokensRemaining - thawRequestTokens; - delete thawRequests[thawRequestId]; + delete _thawRequests[thawRequestId]; prov.firstThawRequestId = thawRequest.next; prov.nThawRequests -= 1; tokensThawing = tokensThawing - thawRequestTokens; @@ -829,11 +800,11 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp prov.sharesThawing = sharesThawing; prov.tokensThawing = tokensThawing; prov.tokens = prov.tokens - _tokens; - serviceProviders[_serviceProvider].tokensProvisioned -= _tokens; + _serviceProviders[_serviceProvider].tokensProvisioned -= _tokens; } function _addToProvision(address _serviceProvider, address _verifier, uint256 _tokens) internal { - Provision storage prov = provisions[_serviceProvider][_verifier]; + Provision storage prov = _provisions[_serviceProvider][_verifier]; if (_tokens == 0) { revert HorizonStakingInvalidZeroTokens(); } @@ -845,8 +816,8 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp } prov.tokens = prov.tokens + _tokens; - serviceProviders[_serviceProvider].tokensProvisioned = - serviceProviders[_serviceProvider].tokensProvisioned + + _serviceProviders[_serviceProvider].tokensProvisioned = + _serviceProviders[_serviceProvider].tokensProvisioned + _tokens; emit ProvisionIncreased(_serviceProvider, _verifier, _tokens); } @@ -859,7 +830,7 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp */ function _stake(address _serviceProvider, uint256 _tokens) internal { // Deposit tokens into the indexer stake - serviceProviders[_serviceProvider].tokensStaked = serviceProviders[_serviceProvider].tokensStaked + _tokens; + _serviceProviders[_serviceProvider].tokensStaked = _serviceProviders[_serviceProvider].tokensStaked + _tokens; emit StakeDeposited(_serviceProvider, _tokens); } @@ -867,4 +838,27 @@ contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUp function _graphToken() internal view returns (IGraphToken) { return IGraphToken(GRAPH_TOKEN); } + + /** + * @dev Withdraw indexer tokens once the thawing period has passed. + * @param _indexer Address of indexer to withdraw funds from + */ + function _withdraw(address _indexer) private { + // Get tokens available for withdraw and update balance + ServiceProviderInternal storage sp = _serviceProviders[_indexer]; + uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; + require(tokensToWithdraw > 0, "!tokens"); + require(block.number >= sp.__DEPRECATED_tokensLockedUntil, "locked"); + + // Reset locked tokens + sp.__DEPRECATED_tokensLocked = 0; + sp.__DEPRECATED_tokensLockedUntil = 0; + + sp.tokensStaked = sp.tokensStaked - tokensToWithdraw; + + // Return tokens to the indexer + TokenUtils.pushTokens(_graphToken(), _indexer, tokensToWithdraw); + + emit StakeWithdrawn(_indexer, tokensToWithdraw); + } } diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 0183e73f9..12a685277 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -29,9 +29,9 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStaki } constructor( - address _controller, - address _subgraphDataServiceAddress - ) StakingBackwardsCompatibility(_controller, _subgraphDataServiceAddress) {} + address controller, + address subgraphDataServiceAddress + ) StakingBackwardsCompatibility(controller, subgraphDataServiceAddress) {} /** * @notice Receive ETH into the Staking contract: this will always revert @@ -41,78 +41,28 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStaki revert("RECEIVE_ETH_NOT_ALLOWED"); } - // total staked tokens to the provider - // `ServiceProvider.tokensStaked - function getStake(address serviceProvider) external view override returns (uint256) { - return serviceProviders[serviceProvider].tokensStaked; - } - - // provisioned tokens from delegators that are not being thawed - // `Provision.delegatedTokens - Provision.delegatedTokensThawing` - function getDelegatedTokensAvailable( - address _serviceProvider, - address _verifier - ) public view override returns (uint256) { - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - return - legacyDelegationPools[_serviceProvider].tokens - - (legacyDelegationPools[_serviceProvider].tokensThawing); - } - return - delegationPools[_serviceProvider][_verifier].tokens - - (delegationPools[_serviceProvider][_verifier].tokensThawing); - } - - // provisioned tokens that are not being thawed (including provider tokens and delegation) - function getTokensAvailable( - address _serviceProvider, - address _verifier, - uint32 _delegationRatio - ) external view override returns (uint256) { - uint256 providerTokens = provisions[_serviceProvider][_verifier].tokens; - uint256 tokensDelegatedMax = providerTokens * (uint256(_delegationRatio)); - uint256 tokensDelegatedCapacity = MathUtils.min( - getDelegatedTokensAvailable(_serviceProvider, _verifier), - tokensDelegatedMax - ); - return providerTokens - provisions[_serviceProvider][_verifier].tokensThawing + tokensDelegatedCapacity; - } - - function getServiceProvider(address serviceProvider) external view override returns (ServiceProvider memory) { - ServiceProvider memory sp; - ServiceProviderInternal storage spInternal = serviceProviders[serviceProvider]; - sp.tokensStaked = spInternal.tokensStaked; - sp.tokensProvisioned = spInternal.tokensProvisioned; - sp.nextThawRequestNonce = spInternal.nextThawRequestNonce; - return sp; - } - /** * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. - * @param _operator Address to authorize or unauthorize - * @param _verifier The verifier / data service on which they'll be allowed to operate - * @param _allowed Whether the operator is authorized or not + * @param operator Address to authorize or unauthorize + * @param verifier The verifier / data service on which they'll be allowed to operate + * @param allowed Whether the operator is authorized or not */ - function setOperator(address _operator, address _verifier, bool _allowed) external override { - require(_operator != msg.sender, "operator == sender"); - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - legacyOperatorAuth[msg.sender][_operator] = _allowed; + function setOperator(address operator, address verifier, bool allowed) external override { + require(operator != msg.sender, "operator == sender"); + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + _legacyOperatorAuth[msg.sender][operator] = allowed; } else { - operatorAuth[msg.sender][_verifier][_operator] = _allowed; + _operatorAuth[msg.sender][verifier][operator] = allowed; } - emit OperatorSet(msg.sender, _operator, _verifier, _allowed); + emit OperatorSet(msg.sender, operator, verifier, allowed); } // for vesting contracts - function setOperatorLocked(address _operator, address _verifier, bool _allowed) external override { - require(_operator != msg.sender, "operator == sender"); - require(allowedLockedVerifiers[_verifier], "VERIFIER_NOT_ALLOWED"); - operatorAuth[msg.sender][_verifier][_operator] = _allowed; - emit OperatorSet(msg.sender, _operator, _verifier, _allowed); - } - - function getMaxThawingPeriod() external view override returns (uint64) { - return maxThawingPeriod; + function setOperatorLocked(address operator, address verifier, bool allowed) external override { + require(operator != msg.sender, "operator == sender"); + require(_allowedLockedVerifiers[verifier], "VERIFIER_NOT_ALLOWED"); + _operatorAuth[msg.sender][verifier][operator] = allowed; + emit OperatorSet(msg.sender, operator, verifier, allowed); } /** @@ -120,45 +70,89 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStaki * @dev The encoded _data can contain information about an indexer's stake * or a delegator's delegation. * See L1MessageCodes in IL2Staking for the supported messages. - * @param _from Token sender in L1 - * @param _amount Amount of tokens that were transferred - * @param _data ABI-encoded callhook data which must include a uint8 code and either a ReceiveIndexerStakeData or ReceiveDelegationData struct. + * @param from Token sender in L1 + * @param amount Amount of tokens that were transferred + * @param data ABI-encoded callhook data which must include a uint8 code and either a ReceiveIndexerStakeData or ReceiveDelegationData struct. */ function onTokenTransfer( - address _from, - uint256 _amount, - bytes calldata _data + address from, + uint256 amount, + bytes calldata data ) external override notPartialPaused onlyL2Gateway { - require(_from == counterpartStakingAddress, "ONLY_L1_STAKING_THROUGH_BRIDGE"); - (uint8 code, bytes memory functionData) = abi.decode(_data, (uint8, bytes)); + require(from == _counterpartStakingAddress, "ONLY_L1_STAKING_THROUGH_BRIDGE"); + (uint8 code, bytes memory functionData) = abi.decode(data, (uint8, bytes)); if (code == uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_INDEXER_STAKE_CODE)) { IL2StakingTypes.ReceiveIndexerStakeData memory indexerData = abi.decode( functionData, (IL2StakingTypes.ReceiveIndexerStakeData) ); - _receiveIndexerStake(_amount, indexerData); + _receiveIndexerStake(amount, indexerData); } else if (code == uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE)) { IL2StakingTypes.ReceiveDelegationData memory delegationData = abi.decode( functionData, (IL2StakingTypes.ReceiveDelegationData) ); - _receiveDelegation(_amount, delegationData); + _receiveDelegation(amount, delegationData); } else { revert("INVALID_CODE"); } } + function setDelegationFeeCut( + address serviceProvider, + address verifier, + uint256 feeType, + uint256 feeCut + ) external override { + delegationFeeCut[serviceProvider][verifier][feeType] = feeCut; + emit DelegationFeeCutSet(serviceProvider, verifier, feeType, feeCut); + } + + // total staked tokens to the provider + // `ServiceProvider.tokensStaked + function getStake(address serviceProvider) external view override returns (uint256) { + return _serviceProviders[serviceProvider].tokensStaked; + } + + // provisioned tokens that are not being thawed (including provider tokens and delegation) + function getTokensAvailable( + address serviceProvider, + address verifier, + uint32 delegationRatio + ) external view override returns (uint256) { + uint256 providerTokens = _provisions[serviceProvider][verifier].tokens; + uint256 tokensDelegatedMax = providerTokens * (uint256(delegationRatio)); + uint256 tokensDelegatedCapacity = MathUtils.min( + getDelegatedTokensAvailable(serviceProvider, verifier), + tokensDelegatedMax + ); + return providerTokens - _provisions[serviceProvider][verifier].tokensThawing + tokensDelegatedCapacity; + } + + function getServiceProvider(address serviceProvider) external view override returns (ServiceProvider memory) { + ServiceProvider memory sp; + ServiceProviderInternal storage spInternal = _serviceProviders[serviceProvider]; + sp.tokensStaked = spInternal.tokensStaked; + sp.tokensProvisioned = spInternal.tokensProvisioned; + sp.nextThawRequestNonce = spInternal.nextThawRequestNonce; + return sp; + } + + function getMaxThawingPeriod() external view override returns (uint64) { + return _maxThawingPeriod; + } + function getDelegationPool( - address _serviceProvider, - address _verifier + address serviceProvider, + address verifier ) external view override returns (DelegationPool memory) { DelegationPool memory pool; DelegationPoolInternal storage poolInternal; - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - poolInternal = legacyDelegationPools[_serviceProvider]; + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + poolInternal = _legacyDelegationPools[serviceProvider]; } else { - poolInternal = delegationPools[_serviceProvider][_verifier]; + poolInternal = _delegationPools[serviceProvider][verifier]; } pool.tokens = poolInternal.tokens; pool.shares = poolInternal.shares; @@ -168,44 +162,47 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStaki } function getDelegation( - address _delegator, - address _serviceProvider, - address _verifier + address delegator, + address serviceProvider, + address verifier ) external view override returns (Delegation memory) { - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - return legacyDelegationPools[_serviceProvider].delegators[_delegator]; + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + return _legacyDelegationPools[serviceProvider].delegators[delegator]; } else { - return delegationPools[_serviceProvider][_verifier].delegators[_delegator]; + return _delegationPools[serviceProvider][verifier].delegators[delegator]; } } - function getThawRequest(bytes32 _thawRequestId) external view returns (ThawRequest memory) { - return thawRequests[_thawRequestId]; - } - - function getProvision( - address _serviceProvider, - address _verifier - ) external view override returns (Provision memory) { - return provisions[_serviceProvider][_verifier]; + function getThawRequest(bytes32 thawRequestId) external view returns (ThawRequest memory) { + return _thawRequests[thawRequestId]; } - function setDelegationFeeCut( - address _serviceProvider, - address _verifier, - uint256 _feeType, - uint256 _feeCut - ) external override { - delegationFeeCut[_serviceProvider][_verifier][_feeType] = _feeCut; - emit DelegationFeeCutSet(_serviceProvider, _verifier, _feeType, _feeCut); + function getProvision(address serviceProvider, address verifier) external view override returns (Provision memory) { + return _provisions[serviceProvider][verifier]; } function getDelegationFeeCut( - address _serviceProvider, - address _verifier, - uint256 _feeType + address serviceProvider, + address verifier, + uint256 feeType ) external view override returns (uint256) { - return delegationFeeCut[_serviceProvider][_verifier][_feeType]; + return delegationFeeCut[serviceProvider][verifier][feeType]; + } + + // provisioned tokens from delegators that are not being thawed + // `Provision.delegatedTokens - Provision.delegatedTokensThawing` + function getDelegatedTokensAvailable( + address serviceProvider, + address verifier + ) public view override returns (uint256) { + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + return + _legacyDelegationPools[serviceProvider].tokens - + (_legacyDelegationPools[serviceProvider].tokensThawing); + } + return + _delegationPools[serviceProvider][verifier].tokens - + (_delegationPools[serviceProvider][verifier].tokensThawing); } /** @@ -219,9 +216,9 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStaki uint256 _amount, IL2StakingTypes.ReceiveIndexerStakeData memory _indexerData ) internal { - address _indexer = _indexerData.indexer; + address indexer = _indexerData.indexer; // Deposit tokens into the indexer stake - _stake(_indexer, _amount); + _stake(indexer, _amount); } /** @@ -237,7 +234,7 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStaki IL2StakingTypes.ReceiveDelegationData memory _delegationData ) internal { // Get the delegation pool of the indexer - DelegationPoolInternal storage pool = legacyDelegationPools[_delegationData.indexer]; + DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; Delegation storage delegation = pool.delegators[_delegationData.delegator]; // Calculate shares to issue (without applying any delegation tax) diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index 80e25f6ae..a640568ef 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -7,6 +7,9 @@ import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; import { Managed } from "./utilities/Managed.sol"; +// TODO: create custom var-name-mixedcase +/* solhint-disable var-name-mixedcase */ + /** * @title HorizonStakingV1Storage * @notice This contract holds all the storage variables for the Staking contract, version 1 @@ -34,7 +37,7 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { uint32 internal __DEPRECATED_protocolPercentage; /// @dev Period for allocation to be finalized - uint32 private __DEPRECATED_channelDisputeEpochs; // solhint-disable-line var-name-mixedcase + uint32 private __DEPRECATED_channelDisputeEpochs; /// @dev Maximum allocation time. Deprecated, allocations now live on the subgraph service contract. uint32 internal __DEPRECATED_maxAllocationEpochs; @@ -50,25 +53,26 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { uint32 internal __DEPRECATED_alphaDenominator; /// @dev Service provider stakes : serviceProviderAddress => ServiceProvider - mapping(address => ServiceProviderInternal) internal serviceProviders; + mapping(address serviceProvider => ServiceProviderInternal details) internal _serviceProviders; /// @dev Allocations : allocationID => Allocation /// Deprecated, now applied on the SubgraphService - mapping(address => IStakingBackwardsCompatibility.Allocation) internal __DEPRECATED_allocations; + mapping(address allocationId => IStakingBackwardsCompatibility.Allocation allocation) + internal __DEPRECATED_allocations; /// @dev Subgraph Allocations: subgraphDeploymentID => tokens /// Deprecated, now applied on the SubgraphService - mapping(bytes32 => uint256) internal __DEPRECATED_subgraphAllocations; + mapping(bytes32 subgraphDeploymentId => uint256 tokens) internal __DEPRECATED_subgraphAllocations; /// @dev Rebate pools : epoch => Pool /// Deprecated. - mapping(uint256 => uint256) private __DEPRECATED_rebates; // solhint-disable-line var-name-mixedcase + mapping(uint256 epoch => uint256 rebates) private __DEPRECATED_rebates; // -- Slashing -- /// @dev List of addresses allowed to slash stakes /// Deprecated, now each verifier can slash the corresponding provision. - mapping(address => bool) internal __DEPRECATED_slashers; + mapping(address slasher => bool allowed) internal __DEPRECATED_slashers; // -- Delegation -- @@ -77,7 +81,7 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { uint32 internal __DEPRECATED_delegationRatio; /// @dev Time in blocks an indexer needs to wait to change delegation parameters (deprecated) - uint32 internal __DEPRECATED_delegationParametersCooldown; // solhint-disable-line var-name-mixedcase + uint32 internal __DEPRECATED_delegationParametersCooldown; /// @dev Time in epochs a delegator needs to wait to withdraw delegated stake /// Deprecated, now only enforced during a transition period @@ -90,24 +94,24 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { /// @dev Delegation pools : serviceProvider => DelegationPoolInternal /// These are for the subgraph data service. - mapping(address => DelegationPoolInternal) internal legacyDelegationPools; + mapping(address serviceProvider => DelegationPoolInternal delegationPool) internal _legacyDelegationPools; // -- Operators -- /// @dev Legacy operator auth : indexer => operator => is authorized - mapping(address => mapping(address => bool)) internal legacyOperatorAuth; + mapping(address legacyOperator => mapping(address serviceProvider => bool authorized)) internal _legacyOperatorAuth; // -- Asset Holders -- /// @dev DEPRECATED: Allowed AssetHolders: assetHolder => is allowed - mapping(address => bool) private __DEPRECATED_assetHolders; // solhint-disable-line var-name-mixedcase + mapping(address assetHolder => bool allowed) private __DEPRECATED_assetHolders; /// @dev Destination of accrued rewards : beneficiary => rewards destination /// Deprecated, defined by each data service as needed - mapping(address => address) internal __DEPRECATED_rewardsDestination; + mapping(address serviceProvider => address rewardsDestination) internal __DEPRECATED_rewardsDestination; /// @dev Address of the counterpart Staking contract on L1/L2 - address internal counterpartStakingAddress; + address internal _counterpartStakingAddress; /// @dev Address of the StakingExtension implementation address internal __DEPRECATED_extensionImpl; @@ -116,11 +120,11 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { uint32 internal __DEPRECATED_lambdaDenominator; /// Maximum thawing period, in seconds, for a provision - uint64 internal maxThawingPeriod; + uint64 internal _maxThawingPeriod; /// @dev Provisions from each service provider for each data service /// ServiceProvider => Verifier => Provision - mapping(address => mapping(address => Provision)) internal provisions; + mapping(address serviceProvider => mapping(address verifier => Provision provision)) internal _provisions; /// @dev Delegation fee cuts for each service provider on each provision, by fee type: /// ServiceProvider => Verifier => Fee Type => Fee Cut. @@ -128,19 +132,22 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { /// This is in PPM and is the cut taken by the indexer from the fees that correspond to delegators. /// (based on stake vs delegated stake proportion). /// The cuts are applied in GraphPayments so apply to all data services that use it. - mapping(address => mapping(address => mapping(uint256 => uint256))) public delegationFeeCut; + mapping(address serviceProvider => mapping(address verifier => mapping(uint256 feeType => uint256 feeCut))) + public delegationFeeCut; - mapping(bytes32 => ThawRequest) internal thawRequests; + mapping(bytes32 thawRequestId => ThawRequest thawRequest) internal _thawRequests; // indexer => verifier => operator => authorized - mapping(address => mapping(address => mapping(address => bool))) internal operatorAuth; + mapping(address serviceProvider => mapping(address verifier => mapping(address operator => bool authorized))) + internal _operatorAuth; // governance enables or disables delegation slashing with this flag bool public delegationSlashingEnabled; // delegation pools for each service provider and verifier - mapping(address => mapping(address => DelegationPoolInternal)) internal delegationPools; + mapping(address serviceProvider => mapping(address verifier => DelegationPoolInternal delegationPool)) + internal _delegationPools; // allowed verifiers for locked provisions (i.e. from GraphTokenLockWallets) - mapping(address => bool) internal allowedLockedVerifiers; + mapping(address verifier => bool allowed) internal _allowedLockedVerifiers; } diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index 0d8c2749e..ea51f372c 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -38,18 +38,18 @@ abstract contract StakingBackwardsCompatibility is address public immutable SUBGRAPH_DATA_SERVICE_ADDRESS; - constructor(address _controller, address _subgraphDataServiceAddress) Managed(_controller) { - SUBGRAPH_DATA_SERVICE_ADDRESS = _subgraphDataServiceAddress; + constructor(address controller, address subgraphDataServiceAddress) Managed(controller) { + SUBGRAPH_DATA_SERVICE_ADDRESS = subgraphDataServiceAddress; } /** * @notice Set the address of the counterpart (L1 or L2) staking contract. * @dev This function can only be called by the governor. * TODO: Remove after L2 transition period - * @param _counterpart Address of the counterpart staking contract in the other chain, without any aliasing. + * @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing. */ - function setCounterpartStakingAddress(address _counterpart) external override onlyGovernor { - counterpartStakingAddress = _counterpart; + function setCounterpartStakingAddress(address counterpart) external override onlyGovernor { + _counterpartStakingAddress = counterpart; emit ParameterUpdated("counterpartStakingAddress"); } @@ -59,11 +59,11 @@ abstract contract StakingBackwardsCompatibility is * Presenting a bad proof is subject to slashable condition. * To opt out of rewards set _poi to 0x0 * @dev TODO: Remove after Horizon transition period - * @param _allocationID The allocation identifier - * @param _poi Proof of indexing submitted for the allocated period + * @param allocationID The allocation identifier + * @param poi Proof of indexing submitted for the allocated period */ - function closeAllocation(address _allocationID, bytes32 _poi) external override notPaused { - _closeAllocation(_allocationID, _poi); + function closeAllocation(address allocationID, bytes32 poi) external override notPaused { + _closeAllocation(allocationID, poi); } /** @@ -73,27 +73,27 @@ abstract contract StakingBackwardsCompatibility is * This implementation allows collecting multiple times on the same allocation, keeping track of the * total amount rebated, the total amount collected and compensating the indexer for the difference. * TODO: Remove after Horizon transition period - * @param _tokens Amount of tokens to collect - * @param _allocationID Allocation where the tokens will be assigned + * @param tokens Amount of tokens to collect + * @param allocationID Allocation where the tokens will be assigned */ - function collect(uint256 _tokens, address _allocationID) external override { + function collect(uint256 tokens, address allocationID) external override { // Allocation identifier validation - require(_allocationID != address(0), "!alloc"); + require(allocationID != address(0), "!alloc"); // Allocation must exist - AllocationState allocState = _getAllocationState(_allocationID); + AllocationState allocState = _getAllocationState(allocationID); require(allocState != AllocationState.Null, "!collect"); // If the query fees are zero, we don't want to revert // but we also don't need to do anything, so just return - if (_tokens == 0) { + if (tokens == 0) { return; } - Allocation storage alloc = __DEPRECATED_allocations[_allocationID]; + Allocation storage alloc = __DEPRECATED_allocations[allocationID]; bytes32 subgraphDeploymentID = alloc.subgraphDeploymentID; - uint256 queryFees = _tokens; // Tokens collected from the channel + uint256 queryFees = tokens; // Tokens collected from the channel uint256 protocolTax = 0; // Tokens burnt as protocol tax uint256 curationFees = 0; // Tokens distributed to curators as curation fees uint256 queryRebates = 0; // Tokens to distribute to indexer @@ -160,9 +160,9 @@ abstract contract StakingBackwardsCompatibility is msg.sender, alloc.indexer, subgraphDeploymentID, - _allocationID, + allocationID, _epochManager().currentEpoch(), - _tokens, + tokens, protocolTax, curationFees, queryFees, @@ -174,69 +174,172 @@ abstract contract StakingBackwardsCompatibility is /** * @notice Return if allocationID is used. * @dev TODO: Remove after Horizon transition period - * @param _allocationID Address used as signer by the indexer for an allocation + * @param allocationID Address used as signer by the indexer for an allocation * @return True if allocationID already used */ - function isAllocation(address _allocationID) external view override returns (bool) { - return _getAllocationState(_allocationID) != AllocationState.Null; + function isAllocation(address allocationID) external view override returns (bool) { + return _getAllocationState(allocationID) != AllocationState.Null; } /** * @notice Return the allocation by ID. * @dev TODO: Remove after Horizon transition period - * @param _allocationID Address used as allocation identifier + * @param allocationID Address used as allocation identifier * @return Allocation data */ - function getAllocation(address _allocationID) external view override returns (Allocation memory) { - return __DEPRECATED_allocations[_allocationID]; + function getAllocation(address allocationID) external view override returns (Allocation memory) { + return __DEPRECATED_allocations[allocationID]; } /** * @notice Return the current state of an allocation * @dev TODO: Remove after Horizon transition period - * @param _allocationID Allocation identifier + * @param allocationID Allocation identifier * @return AllocationState enum with the state of the allocation */ - function getAllocationState(address _allocationID) external view override returns (AllocationState) { - return _getAllocationState(_allocationID); + function getAllocationState(address allocationID) external view override returns (AllocationState) { + return _getAllocationState(allocationID); } /** * @notice Return the total amount of tokens allocated to subgraph. - * @param _subgraphDeploymentID Deployment ID for the subgraph + * @param subgraphDeploymentID Deployment ID for the subgraph * @return Total tokens allocated to subgraph */ - function getSubgraphAllocatedTokens(bytes32 _subgraphDeploymentID) external view override returns (uint256) { - return __DEPRECATED_subgraphAllocations[_subgraphDeploymentID]; + function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentID) external view override returns (uint256) { + return __DEPRECATED_subgraphAllocations[subgraphDeploymentID]; + } + + /** + * @notice Get the total amount of tokens staked by the indexer. + * @param indexer Address of the indexer + * @return Amount of tokens staked by the indexer + */ + function getIndexerStakedTokens(address indexer) external view override returns (uint256) { + return _serviceProviders[indexer].tokensStaked; + } + + /** + * @notice Getter that returns if an indexer has any stake. + * @param indexer Address of the indexer + * @return True if indexer has staked tokens + */ + function hasStake(address indexer) external view override returns (bool) { + return _serviceProviders[indexer].tokensStaked > 0; } /** * @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service. * @dev TODO: Delete after the transition period - * @param _operator Address of the operator - * @param _serviceProvider Address of the service provider + * @param operator Address of the operator + * @param serviceProvider Address of the service provider * @return True if operator is allowed for indexer, false otherwise */ - function isOperator(address _operator, address _serviceProvider) public view override returns (bool) { - return legacyOperatorAuth[_serviceProvider][_operator]; + function isOperator(address operator, address serviceProvider) public view override returns (bool) { + return _legacyOperatorAuth[serviceProvider][operator]; } /** - * @notice Get the total amount of tokens staked by the indexer. - * @param _indexer Address of the indexer - * @return Amount of tokens staked by the indexer + * @dev Stake tokens on the service provider. + * TODO: Move to HorizonStaking after the transition period + * @param _serviceProvider Address of staking party + * @param _tokens Amount of tokens to stake */ - function getIndexerStakedTokens(address _indexer) external view override returns (uint256) { - return serviceProviders[_indexer].tokensStaked; + function _stake(address _serviceProvider, uint256 _tokens) internal { + // Deposit tokens into the indexer stake + _serviceProviders[_serviceProvider].tokensStaked = _serviceProviders[_serviceProvider].tokensStaked + _tokens; + + emit StakeDeposited(_serviceProvider, _tokens); + } + + function _graphToken() internal view returns (IGraphToken) { + return IGraphToken(GRAPH_TOKEN); + } + + function _curation() internal view returns (ICuration) { + return ICuration(CURATION); + } + + function _rewardsManager() internal view returns (IRewardsManager) { + return IRewardsManager(REWARDS_MANAGER); + } + + function _epochManager() internal view returns (IEpochManager) { + return IEpochManager(EPOCH_MANAGER); } /** - * @notice Getter that returns if an indexer has any stake. - * @param _indexer Address of the indexer - * @return True if indexer has staked tokens + * @dev Collect tax to burn for an amount of tokens. + * @param _tokens Total tokens received used to calculate the amount of tax to collect + * @param _percentage Percentage of tokens to burn as tax + * @return Amount of tax charged + */ + function _collectTax(uint256 _tokens, uint256 _percentage) private returns (uint256) { + // Calculate tokens after tax first, and subtract that, + // to prevent the tax from rounding down to zero + uint256 tokensAfterTax = ((uint256(MAX_PPM) - _percentage) * _tokens) / MAX_PPM; + uint256 tax = _tokens - tokensAfterTax; + TokenUtils.burnTokens(_graphToken(), tax); // Burn tax if any + return tax; + } + + /** + * @dev Triggers an update of rewards due to a change in allocations. + * @param _subgraphDeploymentID Subgraph deployment updated + * @return Accumulated rewards per allocated token for the subgraph deployment */ - function hasStake(address _indexer) external view override returns (bool) { - return serviceProviders[_indexer].tokensStaked > 0; + function _updateRewards(bytes32 _subgraphDeploymentID) private returns (uint256) { + IRewardsManager rewardsManager = _rewardsManager(); + if (address(rewardsManager) == address(0)) { + return 0; + } + return rewardsManager.onSubgraphAllocationUpdate(_subgraphDeploymentID); + } + + /** + * @dev Assign rewards for the closed allocation to indexer and delegators. + * @param _allocationID Allocation + * @param _indexer Address of the indexer that did the allocation + */ + function _distributeRewards(address _allocationID, address _indexer) private { + IRewardsManager rewardsManager = _rewardsManager(); + if (address(rewardsManager) == address(0)) { + return; + } + + // Automatically triggers update of rewards snapshot as allocation will change + // after this call. Take rewards mint tokens for the Staking contract to distribute + // between indexer and delegators + uint256 totalRewards = rewardsManager.takeRewards(_allocationID); + if (totalRewards == 0) { + return; + } + + // Calculate delegation rewards and add them to the delegation pool + uint256 delegationRewards = _collectDelegationIndexingRewards(_indexer, totalRewards); + uint256 indexerRewards = totalRewards - delegationRewards; + + // Send the indexer rewards + _sendRewards(indexerRewards, _indexer, __DEPRECATED_rewardsDestination[_indexer] == address(0)); + } + + /** + * @dev Send rewards to the appropriate destination. + * @param _amount Number of rewards tokens + * @param _beneficiary Address of the beneficiary of rewards + * @param _restake Whether to restake or not + */ + function _sendRewards(uint256 _amount, address _beneficiary, bool _restake) private { + if (_amount == 0) return; + + if (_restake) { + // Restake to place fees into the indexer stake + _stake(_beneficiary, _amount); + } else { + // Transfer funds to the beneficiary's designated rewards destination if set + address destination = __DEPRECATED_rewardsDestination[_beneficiary]; + TokenUtils.pushTokens(_graphToken(), destination == address(0) ? _beneficiary : destination, _amount); + } } /** @@ -280,8 +383,8 @@ abstract contract StakingBackwardsCompatibility is } // Free allocated tokens from use - serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated = - serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated - + _serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated = + _serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated - alloc.tokens; // Track total allocations per subgraph @@ -312,7 +415,7 @@ abstract contract StakingBackwardsCompatibility is */ function _collectDelegationQueryRewards(address _indexer, uint256 _tokens) private returns (uint256) { uint256 delegationRewards = 0; - DelegationPoolInternal storage pool = legacyDelegationPools[_indexer]; + DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; if (pool.tokens > 0 && pool.__DEPRECATED_queryFeeCut < MAX_PPM) { uint256 indexerCut = (uint256(pool.__DEPRECATED_queryFeeCut) * _tokens) / MAX_PPM; delegationRewards = _tokens - indexerCut; @@ -330,7 +433,7 @@ abstract contract StakingBackwardsCompatibility is */ function _collectDelegationIndexingRewards(address _indexer, uint256 _tokens) private returns (uint256) { uint256 delegationRewards = 0; - DelegationPoolInternal storage pool = legacyDelegationPools[_indexer]; + DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; if (pool.tokens > 0 && pool.__DEPRECATED_indexingRewardCut < MAX_PPM) { uint256 indexerCut = (uint256(pool.__DEPRECATED_indexingRewardCut) * _tokens) / MAX_PPM; delegationRewards = _tokens - indexerCut; @@ -377,80 +480,6 @@ abstract contract StakingBackwardsCompatibility is return 0; } - /** - * @dev Collect tax to burn for an amount of tokens. - * @param _tokens Total tokens received used to calculate the amount of tax to collect - * @param _percentage Percentage of tokens to burn as tax - * @return Amount of tax charged - */ - function _collectTax(uint256 _tokens, uint256 _percentage) private returns (uint256) { - // Calculate tokens after tax first, and subtract that, - // to prevent the tax from rounding down to zero - uint256 tokensAfterTax = ((uint256(MAX_PPM) - _percentage) * _tokens) / MAX_PPM; - uint256 tax = _tokens - tokensAfterTax; - TokenUtils.burnTokens(_graphToken(), tax); // Burn tax if any - return tax; - } - - /** - * @dev Triggers an update of rewards due to a change in allocations. - * @param _subgraphDeploymentID Subgraph deployment updated - * @return Accumulated rewards per allocated token for the subgraph deployment - */ - function _updateRewards(bytes32 _subgraphDeploymentID) private returns (uint256) { - IRewardsManager rewardsManager = _rewardsManager(); - if (address(rewardsManager) == address(0)) { - return 0; - } - return rewardsManager.onSubgraphAllocationUpdate(_subgraphDeploymentID); - } - - /** - * @dev Assign rewards for the closed allocation to indexer and delegators. - * @param _allocationID Allocation - * @param _indexer Address of the indexer that did the allocation - */ - function _distributeRewards(address _allocationID, address _indexer) private { - IRewardsManager rewardsManager = _rewardsManager(); - if (address(rewardsManager) == address(0)) { - return; - } - - // Automatically triggers update of rewards snapshot as allocation will change - // after this call. Take rewards mint tokens for the Staking contract to distribute - // between indexer and delegators - uint256 totalRewards = rewardsManager.takeRewards(_allocationID); - if (totalRewards == 0) { - return; - } - - // Calculate delegation rewards and add them to the delegation pool - uint256 delegationRewards = _collectDelegationIndexingRewards(_indexer, totalRewards); - uint256 indexerRewards = totalRewards - delegationRewards; - - // Send the indexer rewards - _sendRewards(indexerRewards, _indexer, __DEPRECATED_rewardsDestination[_indexer] == address(0)); - } - - /** - * @dev Send rewards to the appropriate destination. - * @param _amount Number of rewards tokens - * @param _beneficiary Address of the beneficiary of rewards - * @param _restake Whether to restake or not - */ - function _sendRewards(uint256 _amount, address _beneficiary, bool _restake) private { - if (_amount == 0) return; - - if (_restake) { - // Restake to place fees into the indexer stake - _stake(_beneficiary, _amount); - } else { - // Transfer funds to the beneficiary's designated rewards destination if set - address destination = __DEPRECATED_rewardsDestination[_beneficiary]; - TokenUtils.pushTokens(_graphToken(), destination == address(0) ? _beneficiary : destination, _amount); - } - } - /** * @dev Return the current state of an allocation * @param _allocationID Allocation identifier @@ -469,33 +498,4 @@ abstract contract StakingBackwardsCompatibility is return AllocationState.Closed; } - - /** - * @dev Stake tokens on the service provider. - * TODO: Move to HorizonStaking after the transition period - * @param _serviceProvider Address of staking party - * @param _tokens Amount of tokens to stake - */ - function _stake(address _serviceProvider, uint256 _tokens) internal { - // Deposit tokens into the indexer stake - serviceProviders[_serviceProvider].tokensStaked = serviceProviders[_serviceProvider].tokensStaked + _tokens; - - emit StakeDeposited(_serviceProvider, _tokens); - } - - function _graphToken() internal view returns (IGraphToken) { - return IGraphToken(GRAPH_TOKEN); - } - - function _curation() internal view returns (ICuration) { - return ICuration(CURATION); - } - - function _rewardsManager() internal view returns (IRewardsManager) { - return IRewardsManager(REWARDS_MANAGER); - } - - function _epochManager() internal view returns (IEpochManager) { - return IEpochManager(EPOCH_MANAGER); - } } diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index 685c18184..496caca0e 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -7,6 +7,9 @@ import { IManaged } from "../../interfaces/IManaged.sol"; import { GraphDirectory } from "../../GraphDirectory.sol"; +// TODO: create custom var-name-mixedcase +/* solhint-disable var-name-mixedcase */ + /** * @title Graph Managed contract * @dev The Managed contract provides an interface to interact with the Controller. @@ -19,7 +22,7 @@ abstract contract Managed is IManaged, GraphDirectory { /// Controller that manages this contract IController private __DEPRECATED_controller; /// @dev Cache for the addresses of the contracts retrieved from the controller - mapping(bytes32 => address) private __DEPRECATED_addressCache; + mapping(bytes32 contractName => address contractAddress) private __DEPRECATED_addressCache; /// @dev Gap for future storage variables uint256[10] private __gap; @@ -35,41 +38,6 @@ abstract contract Managed is IManaged, GraphDirectory { error ManagedSetControllerDeprecated(); - constructor(address _controller) GraphDirectory(_controller) {} - - function controller() public view override returns (IController) { - return IController(CONTROLLER); - } - - /** - * @dev Revert if the controller is paused or partially paused - */ - function _notPartialPaused() internal view { - require(!controller().paused(), "Paused"); - require(!controller().partialPaused(), "Partial-paused"); - } - - /** - * @dev Revert if the controller is paused - */ - function _notPaused() internal view virtual { - require(!controller().paused(), "Paused"); - } - - /** - * @dev Revert if the caller is not the governor - */ - function _onlyGovernor() internal view { - require(msg.sender == controller().getGovernor(), "Only Controller governor"); - } - - /** - * @dev Revert if the caller is not the Controller - */ - function _onlyController() internal view { - require(msg.sender == CONTROLLER, "Caller must be Controller"); - } - /** * @dev Revert if the controller is paused or partially paused */ @@ -102,10 +70,45 @@ abstract contract Managed is IManaged, GraphDirectory { _; } + constructor(address controller_) GraphDirectory(controller_) {} + /** * @notice Set Controller. Deprecated, will revert. */ function setController(address) external view override onlyController { revert ManagedSetControllerDeprecated(); } + + function controller() public view override returns (IController) { + return IController(CONTROLLER); + } + + /** + * @dev Revert if the controller is paused or partially paused + */ + function _notPartialPaused() internal view { + require(!controller().paused(), "Paused"); + require(!controller().partialPaused(), "Partial-paused"); + } + + /** + * @dev Revert if the controller is paused + */ + function _notPaused() internal view virtual { + require(!controller().paused(), "Paused"); + } + + /** + * @dev Revert if the caller is not the governor + */ + function _onlyGovernor() internal view { + require(msg.sender == controller().getGovernor(), "Only Controller governor"); + } + + /** + * @dev Revert if the caller is not the Controller + */ + function _onlyController() internal view { + require(msg.sender == CONTROLLER, "Caller must be Controller"); + } } diff --git a/packages/horizon/package.json b/packages/horizon/package.json index fff88b6d4..a39d4adc6 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -37,6 +37,7 @@ "prettier-plugin-solidity": "^1.3.1", "solhint": "^4.5.2", "solhint-graph-config": "workspace:^0.0.1", + "solhint-plugin-graph": "workspace:^0.0.1", "solidity-coverage": "^0.8.0", "ts-node": ">=8.0.0", "typechain": "^8.3.0", diff --git a/packages/solhint-graph-config/index.js b/packages/solhint-graph-config/index.js index f7193d748..f05ee0df6 100644 --- a/packages/solhint-graph-config/index.js +++ b/packages/solhint-graph-config/index.js @@ -24,5 +24,7 @@ module.exports = { // graph 'graph/leading-underscore': 'warn', + + 'gas-custom-errors': 'off' }, } diff --git a/packages/solhint-plugin-graph/index.js b/packages/solhint-plugin-graph/index.js index cd16840e8..d21c8840d 100644 --- a/packages/solhint-plugin-graph/index.js +++ b/packages/solhint-plugin-graph/index.js @@ -4,6 +4,8 @@ function hasLeadingUnderscore(text) { class Base { constructor(reporter, config, source, fileName) { + this.ignoreDeprecated = true; + this.deprecatedPrefix = '__DEPRECATED_'; this.reporter = reporter; this.ignored = this.constructor.global; this.ruleId = this.constructor.ruleId; @@ -68,6 +70,10 @@ module.exports = [ } validateName(node, type) { + if (this.ignoreDeprecated && node.name.startsWith(this.deprecatedPrefix)) { + return + } + const isPrivate = node.visibility === 'private' const isInternal = node.visibility === 'internal' || node.visibility === 'default' const isConstant = node.isDeclaredConst diff --git a/yarn.lock b/yarn.lock index c105ba53f..a164666c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2937,6 +2937,7 @@ __metadata: prettier-plugin-solidity: "npm:^1.3.1" solhint: "npm:^4.5.2" solhint-graph-config: "workspace:^0.0.1" + solhint-plugin-graph: "workspace:^0.0.1" solidity-coverage: "npm:^0.8.0" ts-node: "npm:>=8.0.0" typechain: "npm:^8.3.0" From fd8ad110eac8919a2f37e22090d392952c345d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 11:36:56 -0300 Subject: [PATCH 027/343] chore: staking interfaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../interfaces/IHorizonStakingExtension.sol | 20 ++++++------------- .../contracts/staking/HorizonStaking.sol | 3 ++- .../staking/HorizonStakingExtension.sol | 2 +- .../staking/HorizonStakingStorage.sol | 14 +++++++------ .../staking/StakingBackwardsCompatibility.sol | 14 ++++--------- 5 files changed, 21 insertions(+), 32 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol index 7c5da23e2..4e4811e3a 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol @@ -5,7 +5,7 @@ pragma abicoder v2; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; -interface IHorizonStakingExtension { +interface IHorizonStakingExtension is IHorizonStakingTypes { /** * @dev Emitted when an operator is allowed or denied by a service provider for a particular data service */ @@ -41,29 +41,21 @@ interface IHorizonStakingExtension { uint32 delegationRatio ) external view returns (uint256); - function getServiceProvider( - address serviceProvider - ) external view returns (IHorizonStakingTypes.ServiceProvider memory); + function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory); function getMaxThawingPeriod() external view returns (uint64); - function getDelegationPool( - address serviceProvider, - address verifier - ) external view returns (IHorizonStakingTypes.DelegationPool memory); + function getDelegationPool(address serviceProvider, address verifier) external view returns (DelegationPool memory); function getDelegation( address delegator, address serviceProvider, address verifier - ) external view returns (IHorizonStakingTypes.Delegation memory); + ) external view returns (Delegation memory); - function getThawRequest(bytes32 thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory); + function getThawRequest(bytes32 thawRequestId) external view returns (ThawRequest memory); - function getProvision( - address serviceProvider, - address verifier - ) external view returns (IHorizonStakingTypes.Provision memory); + function getProvision(address serviceProvider, address verifier) external view returns (Provision memory); function getDelegationFeeCut( address serviceProvider, diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index a773d8dd0..9254587f9 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -9,6 +9,7 @@ import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; +import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; import { Managed } from "./utilities/Managed.sol"; import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; @@ -20,7 +21,7 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; * It uses a HorizonStakingExtension contract to implement the full IHorizonStaking interface through delegatecalls. * This is due to the contract size limit on Arbitrum (24kB like mainnet). */ -contract HorizonStaking is HorizonStakingV1Storage, IHorizonStakingBase, GraphUpgradeable { +contract HorizonStaking is GraphUpgradeable, Multicall, HorizonStakingV1Storage, IHorizonStakingBase { /// @dev 100% in parts per million uint32 internal constant MAX_PPM = 1000000; diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 12a685277..7e54fd361 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -16,7 +16,7 @@ import { StakingBackwardsCompatibility } from "./StakingBackwardsCompatibility.s * to receive an indexer's stake or delegation from L1. Note that this contract inherits Staking, * which uses a StakingExtension contract to implement the full IStaking interface through delegatecalls. */ -contract HorizonStakingExtension is StakingBackwardsCompatibility, IHorizonStakingExtension, IL2StakingBase { +contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBase, IHorizonStakingExtension { /// @dev Minimum amount of tokens that can be delegated uint256 private constant MINIMUM_DELEGATION = 1e18; diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index a640568ef..260e7ee65 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -15,7 +15,7 @@ import { Managed } from "./utilities/Managed.sol"; * @notice This contract holds all the storage variables for the Staking contract, version 1 */ // solhint-disable-next-line max-states-count -abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { +abstract contract HorizonStakingV1Storage is Managed { // -- Staking -- /// @dev Minimum amount of tokens an indexer needs to stake. @@ -53,7 +53,7 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { uint32 internal __DEPRECATED_alphaDenominator; /// @dev Service provider stakes : serviceProviderAddress => ServiceProvider - mapping(address serviceProvider => ServiceProviderInternal details) internal _serviceProviders; + mapping(address serviceProvider => IHorizonStakingTypes.ServiceProviderInternal details) internal _serviceProviders; /// @dev Allocations : allocationID => Allocation /// Deprecated, now applied on the SubgraphService @@ -94,7 +94,8 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { /// @dev Delegation pools : serviceProvider => DelegationPoolInternal /// These are for the subgraph data service. - mapping(address serviceProvider => DelegationPoolInternal delegationPool) internal _legacyDelegationPools; + mapping(address serviceProvider => IHorizonStakingTypes.DelegationPoolInternal delegationPool) + internal _legacyDelegationPools; // -- Operators -- @@ -124,7 +125,8 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { /// @dev Provisions from each service provider for each data service /// ServiceProvider => Verifier => Provision - mapping(address serviceProvider => mapping(address verifier => Provision provision)) internal _provisions; + mapping(address serviceProvider => mapping(address verifier => IHorizonStakingTypes.Provision provision)) + internal _provisions; /// @dev Delegation fee cuts for each service provider on each provision, by fee type: /// ServiceProvider => Verifier => Fee Type => Fee Cut. @@ -135,7 +137,7 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { mapping(address serviceProvider => mapping(address verifier => mapping(uint256 feeType => uint256 feeCut))) public delegationFeeCut; - mapping(bytes32 thawRequestId => ThawRequest thawRequest) internal _thawRequests; + mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _thawRequests; // indexer => verifier => operator => authorized mapping(address serviceProvider => mapping(address verifier => mapping(address operator => bool authorized))) @@ -145,7 +147,7 @@ abstract contract HorizonStakingV1Storage is Managed, IHorizonStakingTypes { bool public delegationSlashingEnabled; // delegation pools for each service provider and verifier - mapping(address serviceProvider => mapping(address verifier => DelegationPoolInternal delegationPool)) + mapping(address serviceProvider => mapping(address verifier => IHorizonStakingTypes.DelegationPoolInternal delegationPool)) internal _delegationPools; // allowed verifiers for locked provisions (i.e. from GraphTokenLockWallets) diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index ea51f372c..09e4d114a 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -7,13 +7,12 @@ import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRew import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; +import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; import { ExponentialRebates } from "./libraries/ExponentialRebates.sol"; -import { Multicall } from "@graphprotocol/contracts/contracts/base/Multicall.sol"; -import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol"; import { Managed } from "./utilities/Managed.sol"; import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; @@ -27,12 +26,7 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; * Note that this contract delegates part of its functionality to a StakingExtension contract. * This is due to the 24kB contract size limit on Ethereum. */ -abstract contract StakingBackwardsCompatibility is - HorizonStakingV1Storage, - GraphUpgradeable, - Multicall, - IStakingBackwardsCompatibility -{ +abstract contract StakingBackwardsCompatibility is HorizonStakingV1Storage, IStakingBackwardsCompatibility { /// @dev 100% in parts per million uint32 internal constant MAX_PPM = 1000000; @@ -415,7 +409,7 @@ abstract contract StakingBackwardsCompatibility is */ function _collectDelegationQueryRewards(address _indexer, uint256 _tokens) private returns (uint256) { uint256 delegationRewards = 0; - DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; + IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; if (pool.tokens > 0 && pool.__DEPRECATED_queryFeeCut < MAX_PPM) { uint256 indexerCut = (uint256(pool.__DEPRECATED_queryFeeCut) * _tokens) / MAX_PPM; delegationRewards = _tokens - indexerCut; @@ -433,7 +427,7 @@ abstract contract StakingBackwardsCompatibility is */ function _collectDelegationIndexingRewards(address _indexer, uint256 _tokens) private returns (uint256) { uint256 delegationRewards = 0; - DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; + IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; if (pool.tokens > 0 && pool.__DEPRECATED_indexingRewardCut < MAX_PPM) { uint256 indexerCut = (uint256(pool.__DEPRECATED_indexingRewardCut) * _tokens) / MAX_PPM; delegationRewards = _tokens - indexerCut; From 5e12031e1bd05ce5450249f096643404866b607d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 12:00:18 -0300 Subject: [PATCH 028/343] chore(staking): move managed to main contract MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/contracts/staking/HorizonStaking.sol | 2 +- packages/horizon/contracts/staking/HorizonStakingStorage.sol | 4 +--- packages/horizon/hardhat.config.ts | 2 ++ packages/horizon/package.json | 1 + yarn.lock | 1 + 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 9254587f9..0f5773d6e 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -21,7 +21,7 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; * It uses a HorizonStakingExtension contract to implement the full IHorizonStaking interface through delegatecalls. * This is due to the contract size limit on Arbitrum (24kB like mainnet). */ -contract HorizonStaking is GraphUpgradeable, Multicall, HorizonStakingV1Storage, IHorizonStakingBase { +contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV1Storage, IHorizonStakingBase { /// @dev 100% in parts per million uint32 internal constant MAX_PPM = 1000000; diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index 260e7ee65..e23cde9c7 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -5,8 +5,6 @@ pragma solidity 0.8.24; import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; -import { Managed } from "./utilities/Managed.sol"; - // TODO: create custom var-name-mixedcase /* solhint-disable var-name-mixedcase */ @@ -15,7 +13,7 @@ import { Managed } from "./utilities/Managed.sol"; * @notice This contract holds all the storage variables for the Staking contract, version 1 */ // solhint-disable-next-line max-states-count -abstract contract HorizonStakingV1Storage is Managed { +abstract contract HorizonStakingV1Storage { // -- Staking -- /// @dev Minimum amount of tokens an indexer needs to stake. diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index 123791c44..f4efae525 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -1,5 +1,7 @@ // import '@nomicfoundation/hardhat-foundry' import '@nomicfoundation/hardhat-toolbox' +import 'hardhat-storage-layout' + import { HardhatUserConfig } from 'hardhat/config' const config: HardhatUserConfig = { diff --git a/packages/horizon/package.json b/packages/horizon/package.json index a39d4adc6..cdcfa441b 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -32,6 +32,7 @@ "ethers": "^6.4.0", "hardhat": "^2.20.1", "hardhat-gas-reporter": "^1.0.8", + "hardhat-storage-layout": "^0.1.7", "lint-staged": "^15.2.2", "prettier": "^3.2.5", "prettier-plugin-solidity": "^1.3.1", diff --git a/yarn.lock b/yarn.lock index a164666c1..1258d7100 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2932,6 +2932,7 @@ __metadata: ethers: "npm:^6.4.0" hardhat: "npm:^2.20.1" hardhat-gas-reporter: "npm:^1.0.8" + hardhat-storage-layout: "npm:^0.1.7" lint-staged: "npm:^15.2.2" prettier: "npm:^3.2.5" prettier-plugin-solidity: "npm:^1.3.1" From 5d1f32774320de81cfaf283b1922ce38adfde476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 12:21:07 -0300 Subject: [PATCH 029/343] chore: simplify Managed contract MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../staking/StakingBackwardsCompatibility.sol | 2 +- .../contracts/staking/utilities/Managed.sol | 43 +++---------------- 2 files changed, 6 insertions(+), 39 deletions(-) diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index 09e4d114a..79a97b341 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -26,7 +26,7 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; * Note that this contract delegates part of its functionality to a StakingExtension contract. * This is due to the 24kB contract size limit on Ethereum. */ -abstract contract StakingBackwardsCompatibility is HorizonStakingV1Storage, IStakingBackwardsCompatibility { +abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Storage, IStakingBackwardsCompatibility { /// @dev 100% in parts per million uint32 internal constant MAX_PPM = 1000000; diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index 496caca0e..8cfadfb6d 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -30,11 +30,6 @@ abstract contract Managed is IManaged, GraphDirectory { /// Emitted when a contract parameter has been updated event ParameterUpdated(string param); - /// (Deprecated) Emitted when the controller address has been set - event SetController(address controller); - - ///(Deprecated) Emitted when contract with `nameHash` is synced to `contractAddress`. - event ContractSynced(bytes32 indexed nameHash, address contractAddress); error ManagedSetControllerDeprecated(); @@ -42,7 +37,8 @@ abstract contract Managed is IManaged, GraphDirectory { * @dev Revert if the controller is paused or partially paused */ modifier notPartialPaused() { - _notPartialPaused(); + require(!controller().paused(), "Paused"); + require(!controller().partialPaused(), "Partial-paused"); _; } @@ -50,7 +46,7 @@ abstract contract Managed is IManaged, GraphDirectory { * @dev Revert if the controller is paused */ modifier notPaused() { - _notPaused(); + require(!controller().paused(), "Paused"); _; } @@ -58,7 +54,7 @@ abstract contract Managed is IManaged, GraphDirectory { * @dev Revert if the caller is not the Controller */ modifier onlyController() { - _onlyController(); + require(msg.sender == CONTROLLER, "Caller must be Controller"); _; } @@ -66,7 +62,7 @@ abstract contract Managed is IManaged, GraphDirectory { * @dev Revert if the caller is not the governor */ modifier onlyGovernor() { - _onlyGovernor(); + require(msg.sender == controller().getGovernor(), "Only Controller governor"); _; } @@ -82,33 +78,4 @@ abstract contract Managed is IManaged, GraphDirectory { function controller() public view override returns (IController) { return IController(CONTROLLER); } - - /** - * @dev Revert if the controller is paused or partially paused - */ - function _notPartialPaused() internal view { - require(!controller().paused(), "Paused"); - require(!controller().partialPaused(), "Partial-paused"); - } - - /** - * @dev Revert if the controller is paused - */ - function _notPaused() internal view virtual { - require(!controller().paused(), "Paused"); - } - - /** - * @dev Revert if the caller is not the governor - */ - function _onlyGovernor() internal view { - require(msg.sender == controller().getGovernor(), "Only Controller governor"); - } - - /** - * @dev Revert if the caller is not the Controller - */ - function _onlyController() internal view { - require(msg.sender == CONTROLLER, "Caller must be Controller"); - } } From 896e3f515e45f58da359076d57aeb384d99edf09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 14:43:42 -0300 Subject: [PATCH 030/343] feat(directory): improve graph directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/arbitrum/ITokenGateway.sol | 27 ++-- packages/contracts/package.json | 1 + packages/horizon/contracts/GraphDirectory.sol | 38 ------ .../contracts/data-service/GraphDirectory.sol | 127 ++++++++++++++---- .../extensions/DataServiceFees.sol | 2 +- .../extensions/DataServiceRescuable.sol | 2 +- .../utilities/ProvisionManager.sol | 6 +- .../horizon/contracts/escrow/GraphEscrow.sol | 20 +-- .../horizon/contracts/interfaces/IManaged.sol | 25 ---- .../contracts/payments/GraphPayments.sol | 24 ++-- .../contracts/staking/HorizonStaking.sol | 22 ++- .../staking/HorizonStakingExtension.sol | 2 +- .../staking/StakingBackwardsCompatibility.sol | 49 ++----- .../contracts/staking/utilities/Managed.sol | 32 ++--- .../test/deployments/Deployments.t.sol | 10 +- .../contracts/DisputeManager.sol | 32 ++--- .../contracts/SubgraphService.sol | 12 +- .../contracts/utilities/AllocationManager.sol | 24 ++-- yarn.lock | 1 + 19 files changed, 214 insertions(+), 242 deletions(-) delete mode 100644 packages/horizon/contracts/GraphDirectory.sol delete mode 100644 packages/horizon/contracts/interfaces/IManaged.sol diff --git a/packages/contracts/contracts/arbitrum/ITokenGateway.sol b/packages/contracts/contracts/arbitrum/ITokenGateway.sol index 977fe07f2..41b11f7fc 100644 --- a/packages/contracts/contracts/arbitrum/ITokenGateway.sol +++ b/packages/contracts/contracts/arbitrum/ITokenGateway.sol @@ -23,7 +23,7 @@ * */ -pragma solidity ^0.7.6; +pragma solidity ^0.7.6 || 0.8.24; interface ITokenGateway { /// @notice event deprecated in favor of DepositInitiated and WithdrawalInitiated @@ -47,21 +47,20 @@ interface ITokenGateway { // ); function outboundTransfer( - address _token, - address _to, - uint256 _amount, - uint256 _maxGas, - uint256 _gasPriceBid, - bytes calldata _data - ) external payable returns (bytes memory); + address oken, + address t, + uint256 amunt, + uint256 maxas, + uint256 gasPiceBid, + bytes calldata data + ) external payable returns (bytes memory); function finalizeInboundTransfer( - address _token, - address _from, - address _to, - uint256 _amount, - bytes calldata _data - ) external payable; + address token, address from, + address to, + uint256 amount, + bytes calldata data + )external payable; /** * @notice Calculate the address used when bridging an ERC20 token diff --git a/packages/contracts/package.json b/packages/contracts/package.json index e3f8b71c8..0f112bcc1 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -73,6 +73,7 @@ "prettier-plugin-solidity": "^1.3.1", "solhint": "^4.1.1", "solhint-graph-config": "workspace:^0.0.1", + "solhint-plugin-graph": "workspace:^0.0.1", "solidity-coverage": "^0.7.16", "ts-node": "^10.9.1", "typechain": "^5.0.0", diff --git a/packages/horizon/contracts/GraphDirectory.sol b/packages/horizon/contracts/GraphDirectory.sol deleted file mode 100644 index f36b0f9b3..000000000 --- a/packages/horizon/contracts/GraphDirectory.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity 0.8.24; - -import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; - -/** - * @title GraphDirectory contract - * @notice This contract is meant to be inherited by other contracts that - * need to keep track of the addresses of the core Graph Horizon contracts. - * It fetches the addresses from the Controller supplied during construction, - * and uses immutable variables to minimize gas costs. - */ -contract GraphDirectory { - address public immutable CONTROLLER; - address public immutable STAKING; - address public immutable EPOCH_MANAGER; - address public immutable GRAPH_TOKEN; - address public immutable GRAPH_TOKEN_GATEWAY; - // TODO: also GraphPayments and ScalarEscrow? - // Legacy contracts (pre-Horizon) used for StakingBackwardCompatibility - address public immutable REWARDS_MANAGER; - address public immutable CURATION; - address public immutable GRAPH_PAYMENTS; - address public immutable GRAPH_ESCROW; - - constructor(address controller) { - CONTROLLER = controller; - STAKING = IController(controller).getContractProxy(keccak256("Staking")); - EPOCH_MANAGER = IController(controller).getContractProxy(keccak256("EpochManager")); - GRAPH_TOKEN = IController(controller).getContractProxy(keccak256("GraphToken")); - GRAPH_TOKEN_GATEWAY = IController(controller).getContractProxy(keccak256("GraphTokenGateway")); - REWARDS_MANAGER = IController(controller).getContractProxy(keccak256("RewardsManager")); - CURATION = IController(controller).getContractProxy(keccak256("Curation")); - GRAPH_PAYMENTS = IController(controller).getContractProxy(keccak256("GraphPayments")); - GRAPH_ESCROW = IController(controller).getContractProxy(keccak256("GraphEscrow")); - } -} diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index b79d7de52..d76bda88f 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -3,53 +3,122 @@ pragma solidity 0.8.24; import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; +import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; -import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; -// import { IGraphTokenGateway } from "@graphprotocol/contracts/contracts/gateway/IGraphTokenGateway.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; -import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; -import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; +import { ITokenGateway } from "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol"; +/** + * @title GraphDirectory contract + * @notice This contract is meant to be inherited by other contracts that + * need to keep track of the addresses of the core Graph Horizon contracts. + * It fetches the addresses from the Controller supplied during construction, + * and uses immutable variables to minimize gas costs. + */ abstract contract GraphDirectory { - IController public immutable GRAPH_CONTROLLER; - IHorizonStaking public immutable GRAPH_STAKING; - IEpochManager public immutable GRAPH_EPOCH_MANAGER; - IGraphToken public immutable GRAPH_TOKEN; - // IGraphTokenGateway public immutable graphTokenGateway; - IGraphEscrow public immutable GRAPH_ESCROW; - IGraphPayments public immutable GRAPH_PAYMENTS; - IRewardsManager public immutable GRAPH_REWARDS_MANAGER; + IController private immutable GRAPH_CONTROLLER; + + // Graph Horizon contracts + IGraphToken private immutable GRAPH_TOKEN; + IHorizonStaking private immutable GRAPH_STAKING; + IGraphPayments private immutable GRAPH_PAYMENTS; + IGraphEscrow private immutable GRAPH_ESCROW; + + // Legacy Graph contracts + // Required for StakingBackwardCompatibility + // TODO: remove these once StakingBackwardCompatibility is removed + IEpochManager private immutable GRAPH_EPOCH_MANAGER; + IRewardsManager private immutable GRAPH_REWARDS_MANAGER; + ICuration private immutable GRAPH_CURATION; + ITokenGateway private immutable GRAPH_TOKEN_GATEWAY; event GraphDirectoryInitialized( IController graphController, - IHorizonStaking graphStaking, - IEpochManager graphEpochManager, IGraphToken graphToken, - // address graphTokenGateway, - IGraphEscrow graphEscrow, + IHorizonStaking graphStaking, IGraphPayments graphPayments, - IRewardsManager graphRewardsManager + IGraphEscrow graphEscrow, + IEpochManager graphEpochManager, + IRewardsManager graphRewardsManager, + ICuration graphCuration, + ITokenGateway graphTokenGateway ); + error GraphDirectoryInvalidZeroAddress(); + constructor(address controller) { + if (controller == address(0)) { + revert GraphDirectoryInvalidZeroAddress(); + } GRAPH_CONTROLLER = IController(controller); - GRAPH_STAKING = IHorizonStaking(GRAPH_CONTROLLER.getContractProxy(keccak256("Staking"))); - GRAPH_EPOCH_MANAGER = IEpochManager(GRAPH_CONTROLLER.getContractProxy(keccak256("EpochManager"))); - GRAPH_TOKEN = IGraphToken(GRAPH_CONTROLLER.getContractProxy(keccak256("GraphToken"))); - // graphTokenGateway = graphController.getContractProxy(keccak256("GraphTokenGateway")); - GRAPH_ESCROW = IGraphEscrow(GRAPH_CONTROLLER.getContractProxy(keccak256("GraphEscrow"))); - GRAPH_PAYMENTS = IGraphPayments(GRAPH_CONTROLLER.getContractProxy(keccak256("GraphPayments"))); - GRAPH_REWARDS_MANAGER = IRewardsManager(GRAPH_CONTROLLER.getContractProxy(keccak256("RewardsManager"))); + + GRAPH_TOKEN = IGraphToken(_getContractFromController("GraphToken")); + GRAPH_STAKING = IHorizonStaking(_getContractFromController("Staking")); + GRAPH_PAYMENTS = IGraphPayments(_getContractFromController("GraphPayments")); + GRAPH_ESCROW = IGraphEscrow(_getContractFromController("GraphEscrow")); + GRAPH_EPOCH_MANAGER = IEpochManager(_getContractFromController("EpochManager")); + GRAPH_REWARDS_MANAGER = IRewardsManager(_getContractFromController("RewardsManager")); + GRAPH_CURATION = ICuration(_getContractFromController("Curation")); + GRAPH_TOKEN_GATEWAY = ITokenGateway(_getContractFromController("GraphTokenGateway")); + emit GraphDirectoryInitialized( GRAPH_CONTROLLER, - GRAPH_STAKING, - GRAPH_EPOCH_MANAGER, GRAPH_TOKEN, - // graphTokenGateway, - GRAPH_ESCROW, + GRAPH_STAKING, GRAPH_PAYMENTS, - GRAPH_REWARDS_MANAGER + GRAPH_ESCROW, + GRAPH_EPOCH_MANAGER, + GRAPH_REWARDS_MANAGER, + GRAPH_CURATION, + GRAPH_TOKEN_GATEWAY ); } + + function _graphController() internal view returns (IController) { + return GRAPH_CONTROLLER; + } + + function _graphToken() internal view returns (IGraphToken) { + return GRAPH_TOKEN; + } + + function _graphStaking() internal view returns (IHorizonStaking) { + return GRAPH_STAKING; + } + + function _graphPayments() internal view returns (IGraphPayments) { + return GRAPH_PAYMENTS; + } + + function _graphEscrow() internal view returns (IGraphEscrow) { + return GRAPH_ESCROW; + } + + function _graphEpochManager() internal view returns (IEpochManager) { + return GRAPH_EPOCH_MANAGER; + } + + function _graphRewardsManager() internal view returns (IRewardsManager) { + return GRAPH_REWARDS_MANAGER; + } + + function _graphCuration() internal view returns (ICuration) { + return GRAPH_CURATION; + } + + function _graphTokenGateway() internal view returns (ITokenGateway) { + return GRAPH_TOKEN_GATEWAY; + } + + function _getContractFromController(bytes memory __contractName) private view returns (address) { + address contractAddress = GRAPH_CONTROLLER.getContractProxy(keccak256(contractName)); + if (contractAddress == address(0)) { + revert GraphDirectoryInvalidZeroAddress(); + } + return contractAddress; + } } diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 3978d9a48..b803c9248 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -66,7 +66,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat uint256 _tokens, uint256 _unlockTimestamp ) internal { - feesProvisionTracker[_feeType].lock(GRAPH_STAKING, _serviceProvider, _tokens, delegationRatio); + feesProvisionTracker[_feeType].lock(_graphStaking(), _serviceProvider, _tokens, delegationRatio); StakeClaimsList storage claimsList = claimsLists[_feeType][_serviceProvider]; bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce); diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index 76a25162a..b345a8683 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -35,7 +35,7 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { } function rescueGRT(address to, uint256 amount) external onlyRescuer { - _rescueTokens(to, address(GRAPH_TOKEN), amount); + _rescueTokens(to, address(_graphToken()), amount); } function rescueETH(address payable to, uint256 amount) external onlyRescuer { diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index dd9d2677f..946db4b0f 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -31,7 +31,7 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage error ProvisionManagerNotAuthorized(address caller, address serviceProvider, address service); modifier onlyProvisionAuthorized(address serviceProvider) { - if (!GRAPH_STAKING.isAuthorized(msg.sender, serviceProvider, address(this))) { + if (!_graphStaking().isAuthorized(msg.sender, serviceProvider, address(this))) { revert ProvisionManagerNotAuthorized(msg.sender, serviceProvider, address(this)); } _; @@ -50,7 +50,7 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage function _checkAndAcceptProvision(address _serviceProvider) internal virtual { _checkProvisionParameters(_serviceProvider); - GRAPH_STAKING.acceptProvisionParameters(_serviceProvider); + _graphStaking().acceptProvisionParameters(_serviceProvider); } // -- Provision Parameters: setters -- @@ -104,6 +104,6 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage } function _getProvision(address _serviceProvider) internal view returns (IHorizonStaking.Provision memory) { - return GRAPH_STAKING.get(_serviceProvider); + return _graphStaking().get(_serviceProvider); } } diff --git a/packages/horizon/contracts/escrow/GraphEscrow.sol b/packages/horizon/contracts/escrow/GraphEscrow.sol index 6e6921a82..e6d021425 100644 --- a/packages/horizon/contracts/escrow/GraphEscrow.sol +++ b/packages/horizon/contracts/escrow/GraphEscrow.sol @@ -4,11 +4,15 @@ pragma solidity ^0.8.24; import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; -import { GraphDirectory } from "../GraphDirectory.sol"; -import { GraphEscrowStorageV1Storage } from "./GraphEscrowStorage.sol"; + import { TokenUtils } from "../libraries/TokenUtils.sol"; +import { GraphDirectory } from "../data-service/GraphDirectory.sol"; +import { GraphEscrowStorageV1Storage } from "./GraphEscrowStorage.sol"; + contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirectory { + using TokenUtils for IGraphToken; + // -- Events -- event AuthorizedCollector(address indexed sender, address indexed dataService); @@ -102,7 +106,7 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector // Deposit funds into the escrow for a receiver function deposit(address receiver, uint256 amount) external { escrowAccounts[msg.sender][receiver].balance += amount; - TokenUtils.pullTokens(IGraphToken(GRAPH_TOKEN), msg.sender, amount); + _graphToken().pullTokens(msg.sender, amount); emit Deposit(msg.sender, receiver, amount); } @@ -122,7 +126,7 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector emit Deposit(msg.sender, receiver, amount); } - TokenUtils.pullTokens(IGraphToken(GRAPH_TOKEN), msg.sender, totalAmount); + _graphToken().pullTokens(msg.sender, totalAmount); } // Requests to thaw a specific amount of escrow from a receiver's escrow account @@ -174,7 +178,7 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector account.balance -= amount; // Reduce the balance by the withdrawn amount (no underflow risk) account.amountThawing = 0; account.thawEndTimestamp = 0; - TokenUtils.pushTokens(IGraphToken(GRAPH_TOKEN), msg.sender, amount); + _graphToken().pushTokens(msg.sender, amount); emit Withdraw(msg.sender, receiver, amount); } @@ -212,10 +216,8 @@ contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirector emit Collect(sender, receiver, amount); // Approve tokens so GraphPayments can pull them - IGraphToken graphToken = IGraphToken(GRAPH_TOKEN); - IGraphPayments graphPayments = IGraphPayments(GRAPH_PAYMENTS); - graphToken.approve(address(graphPayments), amount); - graphPayments.collect(receiver, dataService, amount, paymentType, tokensDataService); + _graphToken().approve(address(_graphPayments()), amount); + _graphPayments().collect(receiver, dataService, amount, paymentType, tokensDataService); } // Get the balance of a sender-receiver pair diff --git a/packages/horizon/contracts/interfaces/IManaged.sol b/packages/horizon/contracts/interfaces/IManaged.sol deleted file mode 100644 index 13c129b2f..000000000 --- a/packages/horizon/contracts/interfaces/IManaged.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity >=0.6.12 <0.9.0; -pragma abicoder v2; - -import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; - -/** - * @title Managed Interface - * @dev Interface for contracts that can be managed by a controller. - */ -interface IManaged { - /** - * @notice (Deprecated) Set the controller that manages this contract - * @dev Only the current controller can set a new controller - * @param controller Address of the new controller - */ - function setController(address controller) external; - - /** - * @notice Get the Controller that manages this contract - * @return The Controller as an IController interface - */ - function controller() external view returns (IController); -} diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 41ba9f063..f5e0d2031 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -4,11 +4,15 @@ pragma solidity ^0.8.24; import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; -import { GraphDirectory } from "../GraphDirectory.sol"; -import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; + import { TokenUtils } from "../libraries/TokenUtils.sol"; +import { GraphDirectory } from "../data-service/GraphDirectory.sol"; +import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; + contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDirectory { + using TokenUtils for IGraphToken; + uint256 private immutable MAX_PPM = 1000000; // 100% in parts per million // -- Errors -- @@ -26,7 +30,7 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi // -- Constructor -- constructor(address controller, uint256 protocolPaymentCut) GraphDirectory(controller) { - protocolPaymentCut = protocolPaymentCut; + PROTOCOL_PAYMENT_CUT = protocolPaymentCut; } // collect funds from a sender, pay cuts and forward the rest to the receiver @@ -37,24 +41,22 @@ contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDi IGraphPayments.PaymentTypes paymentType, uint256 tokensDataService ) external { - IGraphToken graphToken = IGraphToken(GRAPH_TOKEN); - IHorizonStaking staking = IHorizonStaking(STAKING); - TokenUtils.pullTokens(graphToken, msg.sender, amount); + _graphToken().pullTokens(msg.sender, amount); // Pay protocol cut uint256 tokensProtocol = (amount * PROTOCOL_PAYMENT_CUT) / MAX_PPM; - TokenUtils.burnTokens(graphToken, tokensProtocol); + _graphToken().burnTokens(tokensProtocol); // Pay data service cut - TokenUtils.pushTokens(graphToken, dataService, tokensDataService); + _graphToken().pushTokens(dataService, tokensDataService); // Get delegation cut - uint256 delegationFeeCut = staking.getDelegationFeeCut(receiver, dataService, uint8(paymentType)); + uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, uint8(paymentType)); uint256 tokensDelegationPool = (amount * delegationFeeCut) / MAX_PPM; - staking.addToDelegationPool(receiver, dataService, tokensDelegationPool); + _graphStaking().addToDelegationPool(receiver, dataService, tokensDelegationPool); // Pay the rest to the receiver uint256 tokensReceiver = amount - tokensProtocol - tokensDataService - tokensDelegationPool; - TokenUtils.pushTokens(graphToken, receiver, tokensReceiver); + _graphToken().pushTokens(receiver, tokensReceiver); } } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 0f5773d6e..77812d5b3 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -22,6 +22,8 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; * This is due to the contract size limit on Arbitrum (24kB like mainnet). */ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV1Storage, IHorizonStakingBase { + using TokenUtils for IGraphToken; + /// @dev 100% in parts per million uint32 internal constant MAX_PPM = 1000000; @@ -341,7 +343,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV uint256 lockingPeriod = __DEPRECATED_thawingPeriod; if (lockingPeriod == 0) { sp.tokensStaked = stakedTokens - tokens; - TokenUtils.pushTokens(_graphToken(), serviceProvider, tokens); + _graphToken().pushTokens(serviceProvider, tokens); emit StakeWithdrawn(serviceProvider, tokens); } else { // Before locking more tokens, withdraw any unlocked ones if possible @@ -393,10 +395,10 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV if (providerTokensSlashed > 0) { require((prov.tokens * prov.maxVerifierCut) / MAX_PPM >= verifierCutAmount, "verifier cut too high"); if (verifierCutAmount > 0) { - TokenUtils.pushTokens(_graphToken(), verifierCutDestination, verifierCutAmount); + _graphToken().pushTokens(verifierCutDestination, verifierCutAmount); emit VerifierCutSent(serviceProvider, verifier, verifierCutDestination, verifierCutAmount); } - TokenUtils.burnTokens(_graphToken(), providerTokensSlashed - verifierCutAmount); + _graphToken().burnTokens(providerTokensSlashed - verifierCutAmount); uint256 provisionFractionSlashed = (providerTokensSlashed * FIXED_POINT_PRECISION) / prov.tokens; // TODO check for rounding issues prov.tokensThawing = @@ -422,7 +424,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV } if (delegationSlashingEnabled) { require(pool.tokens >= tokensToSlash, "insufficient delegated tokens"); - TokenUtils.burnTokens(_graphToken(), tokensToSlash); + _graphToken().burnTokens(tokensToSlash); uint256 delegationFractionSlashed = (tokensToSlash * FIXED_POINT_PRECISION) / pool.tokens; pool.tokens = pool.tokens - tokensToSlash; pool.tokensThawing = @@ -541,7 +543,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV } // Transfer tokens to stake from caller to this contract - TokenUtils.pullTokens(_graphToken(), msg.sender, tokens); + _graphToken().pullTokens(msg.sender, tokens); // Stake the transferred tokens _stake(serviceProvider, tokens); @@ -554,7 +556,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV uint256 minSharesOut ) public override notPartialPaused { // Transfer tokens to stake from caller to this contract - TokenUtils.pullTokens(_graphToken(), msg.sender, tokens); + _graphToken().pullTokens(msg.sender, tokens); _delegate(serviceProvider, verifier, tokens, minSharesOut); } @@ -652,7 +654,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV if (newServiceProvider != address(0)) { _delegate(newServiceProvider, verifier, thawedTokens, minSharesForNewProvider); } else { - TokenUtils.pushTokens(_graphToken(), msg.sender, thawedTokens); + _graphToken().pushTokens(msg.sender, thawedTokens); } emit DelegatedTokensWithdrawn(serviceProvider, verifier, msg.sender, thawedTokens); } @@ -836,10 +838,6 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV emit StakeDeposited(_serviceProvider, _tokens); } - function _graphToken() internal view returns (IGraphToken) { - return IGraphToken(GRAPH_TOKEN); - } - /** * @dev Withdraw indexer tokens once the thawing period has passed. * @param _indexer Address of indexer to withdraw funds from @@ -858,7 +856,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV sp.tokensStaked = sp.tokensStaked - tokensToWithdraw; // Return tokens to the indexer - TokenUtils.pushTokens(_graphToken(), _indexer, tokensToWithdraw); + _graphToken().pushTokens(_indexer, tokensToWithdraw); emit StakeWithdrawn(_indexer, tokensToWithdraw); } diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 7e54fd361..469e4cf3f 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -24,7 +24,7 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas * @dev Checks that the sender is the L2GraphTokenGateway as configured on the Controller. */ modifier onlyL2Gateway() { - require(msg.sender == GRAPH_TOKEN_GATEWAY, "ONLY_GATEWAY"); + require(msg.sender == address(_graphTokenGateway()), "ONLY_GATEWAY"); _; } diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index 79a97b341..30a667b77 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -27,6 +27,8 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; * This is due to the 24kB contract size limit on Ethereum. */ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Storage, IStakingBackwardsCompatibility { + using TokenUtils for IGraphToken; + /// @dev 100% in parts per million uint32 internal constant MAX_PPM = 1000000; @@ -96,7 +98,7 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor { // -- Pull tokens from the sender -- IGraphToken graphToken = _graphToken(); - TokenUtils.pullTokens(graphToken, msg.sender, queryFees); + _graphToken().pullTokens(msg.sender, queryFees); // -- Collect protocol tax -- protocolTax = _collectTax(queryFees, __DEPRECATED_protocolPercentage); @@ -135,7 +137,7 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor queryRebates = MathUtils.min(queryRebates, queryFees); // -- Burn rebates remanent -- - TokenUtils.burnTokens(graphToken, queryFees - queryRebates); + _graphToken().burnTokens(queryFees - queryRebates); // -- Distribute rebates -- if (queryRebates > 0) { @@ -155,7 +157,7 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor alloc.indexer, subgraphDeploymentID, allocationID, - _epochManager().currentEpoch(), + _graphEpochManager().currentEpoch(), tokens, protocolTax, curationFees, @@ -246,22 +248,6 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor emit StakeDeposited(_serviceProvider, _tokens); } - function _graphToken() internal view returns (IGraphToken) { - return IGraphToken(GRAPH_TOKEN); - } - - function _curation() internal view returns (ICuration) { - return ICuration(CURATION); - } - - function _rewardsManager() internal view returns (IRewardsManager) { - return IRewardsManager(REWARDS_MANAGER); - } - - function _epochManager() internal view returns (IEpochManager) { - return IEpochManager(EPOCH_MANAGER); - } - /** * @dev Collect tax to burn for an amount of tokens. * @param _tokens Total tokens received used to calculate the amount of tax to collect @@ -273,7 +259,7 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor // to prevent the tax from rounding down to zero uint256 tokensAfterTax = ((uint256(MAX_PPM) - _percentage) * _tokens) / MAX_PPM; uint256 tax = _tokens - tokensAfterTax; - TokenUtils.burnTokens(_graphToken(), tax); // Burn tax if any + _graphToken().burnTokens(tax); // Burn tax if any return tax; } @@ -283,11 +269,7 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor * @return Accumulated rewards per allocated token for the subgraph deployment */ function _updateRewards(bytes32 _subgraphDeploymentID) private returns (uint256) { - IRewardsManager rewardsManager = _rewardsManager(); - if (address(rewardsManager) == address(0)) { - return 0; - } - return rewardsManager.onSubgraphAllocationUpdate(_subgraphDeploymentID); + return _graphRewardsManager().onSubgraphAllocationUpdate(_subgraphDeploymentID); } /** @@ -296,15 +278,10 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor * @param _indexer Address of the indexer that did the allocation */ function _distributeRewards(address _allocationID, address _indexer) private { - IRewardsManager rewardsManager = _rewardsManager(); - if (address(rewardsManager) == address(0)) { - return; - } - // Automatically triggers update of rewards snapshot as allocation will change // after this call. Take rewards mint tokens for the Staking contract to distribute // between indexer and delegators - uint256 totalRewards = rewardsManager.takeRewards(_allocationID); + uint256 totalRewards = _graphRewardsManager().takeRewards(_allocationID); if (totalRewards == 0) { return; } @@ -332,7 +309,7 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor } else { // Transfer funds to the beneficiary's designated rewards destination if set address destination = __DEPRECATED_rewardsDestination[_beneficiary]; - TokenUtils.pushTokens(_graphToken(), destination == address(0) ? _beneficiary : destination, _amount); + _graphToken().pushTokens(destination == address(0) ? _beneficiary : destination, _amount); } } @@ -350,7 +327,7 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor Allocation memory alloc = __DEPRECATED_allocations[_allocationID]; // Validate that an allocation cannot be closed before one epoch - alloc.closedAtEpoch = _epochManager().currentEpoch(); + alloc.closedAtEpoch = _graphEpochManager().currentEpoch(); uint256 epochs = MathUtils.diffOrZero(alloc.closedAtEpoch, alloc.createdAtEpoch); // Indexer or operator can close an allocation @@ -453,7 +430,7 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor return 0; } - ICuration curation = _curation(); + ICuration curation = _graphCuration(); bool isCurationEnabled = _curationPercentage > 0 && address(curation) != address(0); if (isCurationEnabled && curation.isCurated(_subgraphDeploymentID)) { @@ -465,8 +442,8 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor // Transfer and call collect() // This function transfer tokens to a trusted protocol contracts // Then we call collect() to do the transfer bookeeping - _rewardsManager().onSubgraphSignalUpdate(_subgraphDeploymentID); - TokenUtils.pushTokens(_graphToken(), address(curation), curationFees); + _graphRewardsManager().onSubgraphSignalUpdate(_subgraphDeploymentID); + _graphToken().pushTokens(address(curation), curationFees); curation.collect(_subgraphDeploymentID, curationFees); } return curationFees; diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index 8cfadfb6d..459d807b5 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -2,10 +2,7 @@ pragma solidity 0.8.24; -import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; -import { IManaged } from "../../interfaces/IManaged.sol"; - -import { GraphDirectory } from "../../GraphDirectory.sol"; +import { GraphDirectory } from "../../data-service/GraphDirectory.sol"; // TODO: create custom var-name-mixedcase /* solhint-disable var-name-mixedcase */ @@ -16,11 +13,11 @@ import { GraphDirectory } from "../../GraphDirectory.sol"; * Inspired by Livepeer: * https://github.com/livepeer/protocol/blob/streamflow/contracts/Controller.sol */ -abstract contract Managed is IManaged, GraphDirectory { +abstract contract Managed is GraphDirectory { // -- State -- /// Controller that manages this contract - IController private __DEPRECATED_controller; + address private __DEPRECATED_controller; /// @dev Cache for the addresses of the contracts retrieved from the controller mapping(bytes32 contractName => address contractAddress) private __DEPRECATED_addressCache; /// @dev Gap for future storage variables @@ -31,14 +28,12 @@ abstract contract Managed is IManaged, GraphDirectory { /// Emitted when a contract parameter has been updated event ParameterUpdated(string param); - error ManagedSetControllerDeprecated(); - /** * @dev Revert if the controller is paused or partially paused */ modifier notPartialPaused() { - require(!controller().paused(), "Paused"); - require(!controller().partialPaused(), "Partial-paused"); + require(!_graphController().paused(), "Paused"); + require(!_graphController().partialPaused(), "Partial-paused"); _; } @@ -46,7 +41,7 @@ abstract contract Managed is IManaged, GraphDirectory { * @dev Revert if the controller is paused */ modifier notPaused() { - require(!controller().paused(), "Paused"); + require(!_graphController().paused(), "Paused"); _; } @@ -54,7 +49,7 @@ abstract contract Managed is IManaged, GraphDirectory { * @dev Revert if the caller is not the Controller */ modifier onlyController() { - require(msg.sender == CONTROLLER, "Caller must be Controller"); + require(msg.sender == address(_graphController()), "Caller must be Controller"); _; } @@ -62,20 +57,9 @@ abstract contract Managed is IManaged, GraphDirectory { * @dev Revert if the caller is not the governor */ modifier onlyGovernor() { - require(msg.sender == controller().getGovernor(), "Only Controller governor"); + require(msg.sender == _graphController().getGovernor(), "Only Controller governor"); _; } constructor(address controller_) GraphDirectory(controller_) {} - - /** - * @notice Set Controller. Deprecated, will revert. - */ - function setController(address) external view override onlyController { - revert ManagedSetControllerDeprecated(); - } - - function controller() public view override returns (IController) { - return IController(CONTROLLER); - } } diff --git a/packages/horizon/test/deployments/Deployments.t.sol b/packages/horizon/test/deployments/Deployments.t.sol index 37fe8b237..3af5e027c 100644 --- a/packages/horizon/test/deployments/Deployments.t.sol +++ b/packages/horizon/test/deployments/Deployments.t.sol @@ -8,10 +8,10 @@ import { GraphBaseTest } from "../GraphBase.t.sol"; contract GraphDeploymentsTest is GraphBaseTest { function testDeployments() public view { - assertEq(address(escrow.GRAPH_PAYMENTS()), address(payments)); - assertEq(address(escrow.GRAPH_TOKEN()), address(token)); - assertEq(address(payments.STAKING()), address(staking)); - assertEq(address(payments.GRAPH_ESCROW()), address(escrow)); - assertEq(address(payments.GRAPH_TOKEN()), address(token)); + // assertEq(address(escrow.GRAPH_PAYMENTS()), address(payments)); + // assertEq(address(escrow.GRAPH_TOKEN()), address(token)); + // assertEq(address(payments.STAKING()), address(staking)); + // assertEq(address(payments.GRAPH_ESCROW()), address(escrow)); + // assertEq(address(payments.GRAPH_TOKEN()), address(token)); } } diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index e74ba0f0b..ac0320651 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -2,21 +2,22 @@ pragma solidity ^0.8.24; pragma abicoder v2; +import { IGraphToken } from "@graphprotocol/horizon/contracts/interfaces/IGraphToken.sol"; import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; import { IDisputeManager } from "./interfaces/IDisputeManager.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; -import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; -import { DisputeManagerV1Storage } from "./DisputeManagerStorage.sol"; -import { GraphDirectory } from "@graphprotocol/horizon/contracts/data-service/GraphDirectory.sol"; -import { AttestationManager } from "./utilities/AttestationManager.sol"; - import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; -import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; +import { TokenUtils } from "@graphprotocol/horizon/contracts/libraries/TokenUtils.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { Allocation } from "./libraries/Allocation.sol"; import { Attestation } from "./libraries/Attestation.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { GraphDirectory } from "@graphprotocol/horizon/contracts/data-service/GraphDirectory.sol"; +import { DisputeManagerV1Storage } from "./DisputeManagerStorage.sol"; +import { AttestationManager } from "./utilities/AttestationManager.sol"; + /* * @title DisputeManager * @notice Provides a way to align the incentives of participants by having slashing as deterrent @@ -41,6 +42,7 @@ import { Attestation } from "./libraries/Attestation.sol"; * to a EOA or DAO. */ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeManagerV1Storage, IDisputeManager { + using TokenUtils for IGraphToken; using PPMMath for uint256; // -- Events -- @@ -310,7 +312,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM uint256 tokensToReward = _slashIndexer(dispute.indexer, slashAmount); // Give the fisherman their reward and their deposit back - TokenUtils.pushTokens(GRAPH_TOKEN, dispute.fisherman, tokensToReward + dispute.deposit); + _graphToken().pushTokens(dispute.fisherman, tokensToReward + dispute.deposit); if (_isDisputeInConflict(dispute)) { rejectDispute(dispute.relatedDisputeId); @@ -328,7 +330,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM Dispute storage dispute = disputes[disputeId]; // Return deposit to the fisherman - TokenUtils.pushTokens(GRAPH_TOKEN, dispute.fisherman, dispute.deposit); + _graphToken().pushTokens(dispute.fisherman, dispute.deposit); // resolve related dispute if any _drawDisputeInConflict(dispute); @@ -354,7 +356,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM } // Return deposit to the fisherman - TokenUtils.pushTokens(GRAPH_TOKEN, dispute.fisherman, dispute.deposit); + _graphToken().pushTokens(dispute.fisherman, dispute.deposit); // resolve related dispute if any _cancelDisputeInConflict(dispute); @@ -468,7 +470,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM } // Burn the fisherman's deposit - TokenUtils.burnTokens(GRAPH_TOKEN, dispute.deposit); + _graphToken().burnTokens(dispute.deposit); emit DisputeRejected(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); } @@ -525,7 +527,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM address indexer = getAttestationIndexer(_attestation); // The indexer is disputable - IHorizonStaking.Provision memory provision = GRAPH_STAKING.getProvision(indexer, address(subgraphService)); + IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService)); if (provision.tokens == 0) { revert DisputeManagerZeroTokens(); } @@ -596,7 +598,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM } // The indexer must be disputable - IHorizonStaking.Provision memory provision = GRAPH_STAKING.getProvision(indexer, address(subgraphService)); + IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService)); if (provision.tokens == 0) { revert DisputeManagerZeroTokens(); } @@ -658,7 +660,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM } // Transfer tokens to deposit from fisherman to this contract - TokenUtils.pullTokens(GRAPH_TOKEN, msg.sender, _deposit); + _graphToken().pullTokens(msg.sender, _deposit); } /** @@ -669,8 +671,8 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM */ function _slashIndexer(address _indexer, uint256 _slashAmount) private returns (uint256 rewardsAmount) { // Get slashable amount for indexer - IHorizonStaking.Provision memory provision = GRAPH_STAKING.getProvision(_indexer, address(subgraphService)); - IHorizonStaking.DelegationPool memory pool = GRAPH_STAKING.getDelegationPool( + IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_indexer, address(subgraphService)); + IHorizonStaking.DelegationPool memory pool = _graphStaking().getDelegationPool( _indexer, address(subgraphService) ); diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 896314bf8..a7a486802 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -160,7 +160,7 @@ contract SubgraphService is function slash(address indexer, bytes calldata data) external override onlyDisputeManager whenNotPaused { (uint256 tokens, uint256 reward) = abi.decode(data, (uint256, uint256)); - GRAPH_STAKING.slash(indexer, tokens, reward, address(DISPUTE_MANAGER)); + _graphStaking().slash(indexer, tokens, reward, address(DISPUTE_MANAGER)); emit ServiceProviderSlashed(indexer, tokens); } @@ -237,9 +237,9 @@ contract SubgraphService is uint256 totalCut = tokensSubgraphService + tokensCurators; // collect fees - uint256 balanceBefore = GRAPH_TOKEN.balanceOf(address(this)); - GRAPH_PAYMENTS.collect(payer, indexer, tokensToCollect, IGraphPayments.PaymentTypes.QueryFee, totalCut); - uint256 balanceAfter = GRAPH_TOKEN.balanceOf(address(this)); + uint256 balanceBefore = _graphToken().balanceOf(address(this)); + _graphPayments().collect(payer, indexer, tokensToCollect, IGraphPayments.PaymentTypes.QueryFee, totalCut); + uint256 balanceAfter = _graphToken().balanceOf(address(this)); if (balanceBefore + totalCut != balanceAfter) { revert SubgraphServiceInconsistentCollection(balanceBefore + totalCut, balanceAfter); } @@ -248,10 +248,10 @@ contract SubgraphService is // distribute curation cut to curators if (tokensCurators > 0) { // we are about to change subgraph signal so we take rewards snapshot - GRAPH_REWARDS_MANAGER.onSubgraphSignalUpdate(subgraphDeploymentId); + _graphRewardsManager().onSubgraphSignalUpdate(subgraphDeploymentId); // Send GRT and bookkeep by calling collect() - GRAPH_TOKEN.transfer(address(CURATION), tokensCurators); + _graphToken().transfer(address(CURATION), tokensCurators); CURATION.collect(subgraphDeploymentId, tokensCurators); } } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index ae280c5a9..175d7def8 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -105,11 +105,11 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager _subgraphDeploymentId, _tokens, // allos can be resized now, so we need to always take snapshot - GRAPH_REWARDS_MANAGER.onSubgraphAllocationUpdate(_subgraphDeploymentId) + _graphRewardsManager().onSubgraphAllocationUpdate(_subgraphDeploymentId) ); // Check that the indexer has enough tokens available - allocationProvisionTracker.lock(GRAPH_STAKING, _indexer, _tokens, _delegationRatio); + allocationProvisionTracker.lock(_graphStaking(), _indexer, _tokens, _delegationRatio); // Update total allocated tokens for the subgraph deployment subgraphAllocatedTokens[allocation.subgraphDeploymentId] = @@ -130,13 +130,13 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager // Mint indexing rewards, stale POIs get no rewards... uint256 timeSinceLastPOI = block.number - allocation.lastPOIPresentedAt; uint256 tokensRewards = timeSinceLastPOI <= maxPOIStaleness - ? GRAPH_REWARDS_MANAGER.takeRewards(_allocationId) + ? _graphRewardsManager().takeRewards(_allocationId) : 0; // ... but we still take a snapshot to ensure the rewards are not collected with the next valid POI allocations.snapshotRewards( _allocationId, - GRAPH_REWARDS_MANAGER.onSubgraphAllocationUpdate(allocation.subgraphDeploymentId) + _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId) ); allocations.presentPOI(_allocationId); @@ -147,23 +147,23 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager // Distribute rewards to delegators // TODO: remove the uint8 cast when PRs are merged - uint256 delegatorCut = GRAPH_STAKING.getDelegationFeeCut( + uint256 delegatorCut = _graphStaking().getDelegationFeeCut( allocation.indexer, address(this), uint8(IGraphPayments.PaymentTypes.IndexingFee) ); uint256 tokensDelegationRewards = tokensRewards.mulPPM(delegatorCut); - GRAPH_TOKEN.approve(address(GRAPH_STAKING), tokensDelegationRewards); - GRAPH_STAKING.addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards); + _graphToken().approve(address(_graphStaking()), tokensDelegationRewards); + _graphStaking().addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards); // Distribute rewards to indexer uint256 tokensIndexerRewards = tokensRewards - tokensDelegationRewards; address rewardsDestination = rewardsDestination[allocation.indexer]; if (rewardsDestination == address(0)) { - GRAPH_TOKEN.approve(address(GRAPH_STAKING), tokensIndexerRewards); - GRAPH_STAKING.stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards); + _graphToken().approve(address(_graphStaking()), tokensIndexerRewards); + _graphStaking().stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards); } else { - GRAPH_TOKEN.transfer(rewardsDestination, tokensIndexerRewards); + _graphToken().transfer(rewardsDestination, tokensIndexerRewards); } emit AllocationCollected( @@ -194,13 +194,13 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager // Update provision tracker uint256 oldTokens = allocation.tokens; if (_tokens > oldTokens) { - allocationProvisionTracker.lock(GRAPH_STAKING, allocation.indexer, _tokens - oldTokens, _delegationRatio); + allocationProvisionTracker.lock(_graphStaking(), allocation.indexer, _tokens - oldTokens, _delegationRatio); } else { allocationProvisionTracker.release(allocation.indexer, oldTokens - _tokens); } // Calculate rewards that have been accrued since the last snapshot but not yet issued - uint256 accRewardsPerAllocatedToken = GRAPH_REWARDS_MANAGER.onSubgraphAllocationUpdate( + uint256 accRewardsPerAllocatedToken = _graphRewardsManager().onSubgraphAllocationUpdate( allocation.subgraphDeploymentId ); uint256 accRewardsPending = accRewardsPerAllocatedToken - allocation.accRewardsPerAllocatedToken; diff --git a/yarn.lock b/yarn.lock index 1258d7100..6d884fac8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2858,6 +2858,7 @@ __metadata: prettier-plugin-solidity: "npm:^1.3.1" solhint: "npm:^4.1.1" solhint-graph-config: "workspace:^0.0.1" + solhint-plugin-graph: "workspace:^0.0.1" solidity-coverage: "npm:^0.7.16" ts-node: "npm:^10.9.1" typechain: "npm:^5.0.0" From 870d71eb58e5002fe80516b899c6fb0a5d2e8b2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 15:06:03 -0300 Subject: [PATCH 031/343] chore(payments): rename payments escrow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/GraphDirectory.sol | 14 +++++++------- .../{IGraphEscrow.sol => IPaymentsEscrow.sol} | 2 +- .../PaymentsEscrow.sol} | 6 +++--- .../PaymentsEscrowStorage.sol} | 8 ++++---- .../staking/StakingBackwardsCompatibility.sol | 1 - packages/horizon/test/GraphBase.t.sol | 6 +++--- 6 files changed, 18 insertions(+), 19 deletions(-) rename packages/horizon/contracts/interfaces/{IGraphEscrow.sol => IPaymentsEscrow.sol} (98%) rename packages/horizon/contracts/{escrow/GraphEscrow.sol => payments/PaymentsEscrow.sol} (97%) rename packages/horizon/contracts/{escrow/GraphEscrowStorage.sol => payments/PaymentsEscrowStorage.sol} (72%) diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index d76bda88f..24cfa14e0 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -6,7 +6,7 @@ import { IController } from "@graphprotocol/contracts/contracts/governance/ICont import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; -import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; +import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; @@ -26,7 +26,7 @@ abstract contract GraphDirectory { IGraphToken private immutable GRAPH_TOKEN; IHorizonStaking private immutable GRAPH_STAKING; IGraphPayments private immutable GRAPH_PAYMENTS; - IGraphEscrow private immutable GRAPH_ESCROW; + IPaymentsEscrow private immutable GRAPH_ESCROW; // Legacy Graph contracts // Required for StakingBackwardCompatibility @@ -41,7 +41,7 @@ abstract contract GraphDirectory { IGraphToken graphToken, IHorizonStaking graphStaking, IGraphPayments graphPayments, - IGraphEscrow graphEscrow, + IPaymentsEscrow graphEscrow, IEpochManager graphEpochManager, IRewardsManager graphRewardsManager, ICuration graphCuration, @@ -59,7 +59,7 @@ abstract contract GraphDirectory { GRAPH_TOKEN = IGraphToken(_getContractFromController("GraphToken")); GRAPH_STAKING = IHorizonStaking(_getContractFromController("Staking")); GRAPH_PAYMENTS = IGraphPayments(_getContractFromController("GraphPayments")); - GRAPH_ESCROW = IGraphEscrow(_getContractFromController("GraphEscrow")); + GRAPH_ESCROW = IPaymentsEscrow(_getContractFromController("PaymentsEscrow")); GRAPH_EPOCH_MANAGER = IEpochManager(_getContractFromController("EpochManager")); GRAPH_REWARDS_MANAGER = IRewardsManager(_getContractFromController("RewardsManager")); GRAPH_CURATION = ICuration(_getContractFromController("Curation")); @@ -94,7 +94,7 @@ abstract contract GraphDirectory { return GRAPH_PAYMENTS; } - function _graphEscrow() internal view returns (IGraphEscrow) { + function _graphEscrow() internal view returns (IPaymentsEscrow) { return GRAPH_ESCROW; } @@ -114,8 +114,8 @@ abstract contract GraphDirectory { return GRAPH_TOKEN_GATEWAY; } - function _getContractFromController(bytes memory __contractName) private view returns (address) { - address contractAddress = GRAPH_CONTROLLER.getContractProxy(keccak256(contractName)); + function _getContractFromController(bytes memory _contractName) private view returns (address) { + address contractAddress = GRAPH_CONTROLLER.getContractProxy(keccak256(_contractName)); if (contractAddress == address(0)) { revert GraphDirectoryInvalidZeroAddress(); } diff --git a/packages/horizon/contracts/interfaces/IGraphEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol similarity index 98% rename from packages/horizon/contracts/interfaces/IGraphEscrow.sol rename to packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 9b638a87e..73acc6592 100644 --- a/packages/horizon/contracts/interfaces/IGraphEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.24; import { IGraphPayments } from "./IGraphPayments.sol"; -interface IGraphEscrow { +interface IPaymentsEscrow { struct EscrowAccount { uint256 balance; // Total escrow balance for a sender-receiver pair uint256 amountThawing; // Amount of escrow currently being thawed diff --git a/packages/horizon/contracts/escrow/GraphEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol similarity index 97% rename from packages/horizon/contracts/escrow/GraphEscrow.sol rename to packages/horizon/contracts/payments/PaymentsEscrow.sol index e6d021425..7b324606c 100644 --- a/packages/horizon/contracts/escrow/GraphEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -2,15 +2,15 @@ pragma solidity ^0.8.24; import { IGraphToken } from "../interfaces/IGraphToken.sol"; -import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; import { GraphDirectory } from "../data-service/GraphDirectory.sol"; -import { GraphEscrowStorageV1Storage } from "./GraphEscrowStorage.sol"; +import { PaymentsEscrowV1Storage } from "./PaymentsEscrowStorage.sol"; -contract GraphEscrow is IGraphEscrow, GraphEscrowStorageV1Storage, GraphDirectory { +contract PaymentsEscrow is IPaymentsEscrow, PaymentsEscrowV1Storage, GraphDirectory { using TokenUtils for IGraphToken; // -- Events -- diff --git a/packages/horizon/contracts/escrow/GraphEscrowStorage.sol b/packages/horizon/contracts/payments/PaymentsEscrowStorage.sol similarity index 72% rename from packages/horizon/contracts/escrow/GraphEscrowStorage.sol rename to packages/horizon/contracts/payments/PaymentsEscrowStorage.sol index 89a49e756..2607ab801 100644 --- a/packages/horizon/contracts/escrow/GraphEscrowStorage.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrowStorage.sol @@ -1,15 +1,15 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphEscrow } from "../interfaces/IGraphEscrow.sol"; +import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; -contract GraphEscrowStorageV1Storage { +contract PaymentsEscrowV1Storage { // Authorized collectors - mapping(address sender => mapping(address dataService => IGraphEscrow.Collector collector)) + mapping(address sender => mapping(address dataService => IPaymentsEscrow.Collector collector)) public authorizedCollectors; // Stores how much escrow each sender has deposited for each receiver, as well as thawing information - mapping(address sender => mapping(address receiver => IGraphEscrow.EscrowAccount escrowAccount)) + mapping(address sender => mapping(address receiver => IPaymentsEscrow.EscrowAccount escrowAccount)) public escrowAccounts; // The maximum thawing period (in seconds) for both escrow withdrawal and signer revocation diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index 30a667b77..a570242f4 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -97,7 +97,6 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor { // -- Pull tokens from the sender -- - IGraphToken graphToken = _graphToken(); _graphToken().pullTokens(msg.sender, queryFees); // -- Collect protocol tax -- diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 28fa8f2c8..36721ed2c 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -5,7 +5,7 @@ import "forge-std/Test.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; -import { GraphEscrow } from "contracts/escrow/GraphEscrow.sol"; +import { PaymentsEscrow } from "contracts/payments/PaymentsEscrow.sol"; import { GraphPayments } from "contracts/payments/GraphPayments.sol"; import { IHorizonStaking } from "contracts/interfaces/IHorizonStaking.sol"; import { HorizonStaking } from "contracts/staking/HorizonStaking.sol"; @@ -21,7 +21,7 @@ abstract contract GraphBaseTest is Test, Constants { Controller public controller; MockGRTToken public token; GraphPayments public payments; - GraphEscrow public escrow; + PaymentsEscrow public escrow; IHorizonStaking public staking; HorizonStaking private stakingBase; @@ -139,7 +139,7 @@ abstract contract GraphBaseTest is Test, Constants { address(controller), protocolPaymentCut ); - escrow = new GraphEscrow{salt: saltEscrow}( + escrow = new PaymentsEscrow{salt: saltEscrow}( address(controller), revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod From f628fea033deb64e8f29345b7b8290e93ff1f8ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 15:15:23 -0300 Subject: [PATCH 032/343] chore(contracts): dont apply underscore rules on legacy code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/contracts/.solhint.json | 14 ---------- packages/contracts/.solhintignore | 8 ------ .../contracts/arbitrum/ITokenGateway.sol | 13 +++++---- packages/contracts/package.json | 2 +- packages/contracts/solhint.config.js | 28 +++++++++++++++++++ packages/contracts/tsconfig.json | 1 + 6 files changed, 37 insertions(+), 29 deletions(-) delete mode 100644 packages/contracts/.solhint.json delete mode 100644 packages/contracts/.solhintignore create mode 100644 packages/contracts/solhint.config.js diff --git a/packages/contracts/.solhint.json b/packages/contracts/.solhint.json deleted file mode 100644 index e52cf9346..000000000 --- a/packages/contracts/.solhint.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "solhint:recommended", - "plugins": ["prettier"], - "rules": { - "prettier/prettier": "error", - "func-visibility": ["warn", { "ignoreConstructors": true }], - "compiler-version": ["off"], - "constructor-syntax": "warn", - "quotes": ["error", "double"], - "reason-string": ["off"], - "not-rely-on-time": "off", - "no-empty-blocks": "off" - } -} diff --git a/packages/contracts/.solhintignore b/packages/contracts/.solhintignore deleted file mode 100644 index b36dffeb7..000000000 --- a/packages/contracts/.solhintignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules - -./contracts/bancor -./contracts/discovery/erc1056 -./contracts/rewards/RewardsManager.sol -./contracts/staking/libs/LibFixedMath.sol -./contracts/tests/ens -./contracts/tests/testnet/GSRManager.sol diff --git a/packages/contracts/contracts/arbitrum/ITokenGateway.sol b/packages/contracts/contracts/arbitrum/ITokenGateway.sol index 41b11f7fc..6ac47d715 100644 --- a/packages/contracts/contracts/arbitrum/ITokenGateway.sol +++ b/packages/contracts/contracts/arbitrum/ITokenGateway.sol @@ -53,14 +53,15 @@ interface ITokenGateway { uint256 maxas, uint256 gasPiceBid, bytes calldata data - ) external payable returns (bytes memory); + ) external payable returns (bytes memory); function finalizeInboundTransfer( - address token, address from, - address to, - uint256 amount, - bytes calldata data - )external payable; + address token, + address from, + address to, + uint256 amount, + bytes calldata data + ) external payable; /** * @notice Calculate the address used when bridging an ERC20 token diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 0f112bcc1..85f02990d 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -97,7 +97,7 @@ "test:upgrade": "scripts/upgrade", "lint": "yarn lint:ts && yarn lint:sol", "lint:ts": "eslint '**/*.{js,ts}' --fix", - "lint:sol": "prettier --write 'contracts/**/*.sol' && solhint --fix --noPrompt contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", + "lint:sol": "prettier --write 'contracts/**/*.sol' && solhint --fix --noPrompt contracts/**/*.sol --config solhint.config.js", "analyze": "scripts/analyze", "myth": "scripts/myth", "flatten": "scripts/flatten && scripts/clean", diff --git a/packages/contracts/solhint.config.js b/packages/contracts/solhint.config.js new file mode 100644 index 000000000..b8e918530 --- /dev/null +++ b/packages/contracts/solhint.config.js @@ -0,0 +1,28 @@ +module.exports = { + plugins: ['graph'], + extends: 'solhint:recommended', + rules: { + // best practices + 'no-empty-blocks': 'off', + 'constructor-syntax': 'warn', + + // style rules + 'private-vars-leading-underscore': 'off', // see graph/leading-underscore + 'const-name-snakecase': 'warn', + 'named-parameters-mapping': 'warn', + 'imports-on-top': 'warn', + 'ordering': 'warn', + 'visibility-modifier-order': 'warn', + + // miscellaneous + 'quotes': ['error', 'double'], + + // security + 'compiler-version': ['off'], + 'func-visibility': ['warn', { ignoreConstructors: true }], + 'not-rely-on-time': 'off', + + // graph + // 'graph/leading-underscore': 'warn', // Contracts were originally written with a different style + }, +} diff --git a/packages/contracts/tsconfig.json b/packages/contracts/tsconfig.json index a12f7de23..a876614c5 100644 --- a/packages/contracts/tsconfig.json +++ b/packages/contracts/tsconfig.json @@ -13,6 +13,7 @@ "truffle.js", "eslint.config.js", "prettier.config.js", + "solhint.config.js", "hardhat.config.ts", "index.d.ts", "scripts/**/*.ts", From 18f9a97a900dd9fdce0a47755d0378088cc6df79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 15:22:56 -0300 Subject: [PATCH 033/343] feat: add multicall to payments contracts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IPaymentsEscrow.sol | 3 -- .../contracts/payments/GraphPayments.sol | 3 +- .../contracts/payments/PaymentsEscrow.sol | 22 +---------- .../contracts/staking/HorizonStaking.sol | 2 +- packages/horizon/test/escrow/deposit.t.sol | 39 ------------------- 5 files changed, 5 insertions(+), 64 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 73acc6592..368b2d6d0 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -20,9 +20,6 @@ interface IPaymentsEscrow { // Deposit funds into the escrow for a receiver function deposit(address receiver, uint256 amount) external; - // Deposit funds into the escrow for multiple receivers - function depositMany(address[] calldata receivers, uint256[] calldata amounts) external; - // Requests to thaw a specific amount of escrow from a receiver's escrow account function thaw(address receiver, uint256 amount) external; diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index f5e0d2031..85fc17314 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -5,12 +5,13 @@ import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; import { GraphDirectory } from "../data-service/GraphDirectory.sol"; import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; -contract GraphPayments is IGraphPayments, GraphPaymentsStorageV1Storage, GraphDirectory { +contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Storage, IGraphPayments { using TokenUtils for IGraphToken; uint256 private immutable MAX_PPM = 1000000; // 100% in parts per million diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 7b324606c..54f4ed0af 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -5,12 +5,13 @@ import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; +import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; import { GraphDirectory } from "../data-service/GraphDirectory.sol"; import { PaymentsEscrowV1Storage } from "./PaymentsEscrowStorage.sol"; -contract PaymentsEscrow is IPaymentsEscrow, PaymentsEscrowV1Storage, GraphDirectory { +contract PaymentsEscrow is Multicall, GraphDirectory, PaymentsEscrowV1Storage, IPaymentsEscrow { using TokenUtils for IGraphToken; // -- Events -- @@ -110,25 +111,6 @@ contract PaymentsEscrow is IPaymentsEscrow, PaymentsEscrowV1Storage, GraphDirect emit Deposit(msg.sender, receiver, amount); } - // Deposit funds into the escrow for multiple receivers - function depositMany(address[] calldata receivers, uint256[] calldata amounts) external { - if (receivers.length != amounts.length) { - revert GraphEscrowInputsLengthMismatch(); - } - - uint256 totalAmount = 0; - for (uint256 i = 0; i < receivers.length; i++) { - address receiver = receivers[i]; - uint256 amount = amounts[i]; - - totalAmount += amount; - escrowAccounts[msg.sender][receiver].balance += amount; - emit Deposit(msg.sender, receiver, amount); - } - - _graphToken().pullTokens(msg.sender, totalAmount); - } - // Requests to thaw a specific amount of escrow from a receiver's escrow account function thaw(address receiver, uint256 amount) external { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 77812d5b3..95c297ffd 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -8,8 +8,8 @@ import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; - import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; + import { Managed } from "./utilities/Managed.sol"; import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; diff --git a/packages/horizon/test/escrow/deposit.t.sol b/packages/horizon/test/escrow/deposit.t.sol index d7898bd37..48574880e 100644 --- a/packages/horizon/test/escrow/deposit.t.sol +++ b/packages/horizon/test/escrow/deposit.t.sol @@ -11,43 +11,4 @@ contract GraphEscrowDepositTest is GraphEscrowTest { (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); assertEq(indexerEscrowBalance, amount); } - - function testDeposit_ManyDeposits(uint256 amount) public useGateway approveEscrow(amount) { - uint256 amountOne = amount / 2; - uint256 amountTwo = amount - amountOne; - - address otherIndexer = address(0xB3); - address[] memory indexers = new address[](2); - indexers[0] = users.indexer; - indexers[1] = otherIndexer; - - uint256[] memory amounts = new uint256[](2); - amounts[0] = amountOne; - amounts[1] = amountTwo; - - escrow.depositMany(indexers, amounts); - - (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); - assertEq(indexerEscrowBalance, amountOne); - - (uint256 otherIndexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, otherIndexer); - assertEq(otherIndexerEscrowBalance, amountTwo); - } - - function testDeposit_RevertWhen_ManyDepositsInputsLengthMismatch( - uint256 amount - ) public useGateway approveEscrow(amount) { - address otherIndexer = address(0xB3); - address[] memory indexers = new address[](2); - indexers[0] = users.indexer; - indexers[1] = otherIndexer; - - uint256[] memory amounts = new uint256[](1); - amounts[0] = 1000 ether; - - // revert - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInputsLengthMismatch()"); - vm.expectRevert(expectedError); - escrow.depositMany(indexers, amounts); - } } \ No newline at end of file From ffbe9138e60e469c3a632dc177bf3328501181af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 15:24:15 -0300 Subject: [PATCH 034/343] chore: remove payments escrow storage contract, not upgradeable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/payments/PaymentsEscrow.sol | 21 ++++++++++++++-- .../payments/PaymentsEscrowStorage.sol | 24 ------------------- 2 files changed, 19 insertions(+), 26 deletions(-) delete mode 100644 packages/horizon/contracts/payments/PaymentsEscrowStorage.sol diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 54f4ed0af..d00312e05 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -9,11 +9,28 @@ import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; import { GraphDirectory } from "../data-service/GraphDirectory.sol"; -import { PaymentsEscrowV1Storage } from "./PaymentsEscrowStorage.sol"; -contract PaymentsEscrow is Multicall, GraphDirectory, PaymentsEscrowV1Storage, IPaymentsEscrow { +contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { using TokenUtils for IGraphToken; + // Authorized collectors + mapping(address sender => mapping(address dataService => IPaymentsEscrow.Collector collector)) + public authorizedCollectors; + + // Stores how much escrow each sender has deposited for each receiver, as well as thawing information + mapping(address sender => mapping(address receiver => IPaymentsEscrow.EscrowAccount escrowAccount)) + public escrowAccounts; + + // The maximum thawing period (in seconds) for both escrow withdrawal and signer revocation + // This is a precautionary measure to avoid inadvertedly locking funds for too long + uint256 public constant MAX_THAWING_PERIOD = 90 days; + + // Thawing period for authorized collectors + uint256 public immutable REVOKE_COLLECTOR_THAWING_PERIOD; + + // The duration (in seconds) in which escrow funds are thawing before they can be withdrawn + uint256 public immutable WITHDRAW_ESCROW_THAWING_PERIOD; + // -- Events -- event AuthorizedCollector(address indexed sender, address indexed dataService); diff --git a/packages/horizon/contracts/payments/PaymentsEscrowStorage.sol b/packages/horizon/contracts/payments/PaymentsEscrowStorage.sol deleted file mode 100644 index 2607ab801..000000000 --- a/packages/horizon/contracts/payments/PaymentsEscrowStorage.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; - -import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; - -contract PaymentsEscrowV1Storage { - // Authorized collectors - mapping(address sender => mapping(address dataService => IPaymentsEscrow.Collector collector)) - public authorizedCollectors; - - // Stores how much escrow each sender has deposited for each receiver, as well as thawing information - mapping(address sender => mapping(address receiver => IPaymentsEscrow.EscrowAccount escrowAccount)) - public escrowAccounts; - - // The maximum thawing period (in seconds) for both escrow withdrawal and signer revocation - // This is a precautionary measure to avoid inadvertedly locking funds for too long - uint256 public constant MAX_THAWING_PERIOD = 90 days; - - // Thawing period for authorized collectors - uint256 public immutable REVOKE_COLLECTOR_THAWING_PERIOD; - - // The duration (in seconds) in which escrow funds are thawing before they can be withdrawn - uint256 public immutable WITHDRAW_ESCROW_THAWING_PERIOD; -} From e8c53790b5aa677f1e3e7f5ab1cb298f9237b3d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 15:39:25 -0300 Subject: [PATCH 035/343] feat(ss): add rewards destination functionality MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../subgraph-service/contracts/SubgraphService.sol | 9 ++++++++- .../contracts/utilities/AllocationManager.sol | 11 +++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index a7a486802..ffce937f8 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -74,7 +74,10 @@ contract SubgraphService is address indexer, bytes calldata data ) external override onlyProvisionAuthorized(indexer) whenNotPaused { - (string memory url, string memory geohash) = abi.decode(data, (string, string)); + (string memory url, string memory geohash, address rewardsDestination) = abi.decode( + data, + (string, string, address) + ); // Must provide a URL if (bytes(url).length == 0) { @@ -89,6 +92,10 @@ contract SubgraphService is // Register the indexer indexers[indexer] = Indexer({ registeredAt: block.timestamp, url: url, geoHash: geohash }); + if (rewardsDestination != address(0)) { + _setRewardsDestination(indexer, rewardsDestination); + } + // Ensure the service provider created a valid provision for the data service // and accept it in the staking contract _acceptProvision(indexer); diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 175d7def8..182827b12 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -70,6 +70,8 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager bytes32 indexed subgraphDeploymentId ); + event RewardsDestinationSet(address indexed indexer, address rewardsDestination); + error AllocationManagerInvalidAllocationProof(address signer, address allocationId); error AllocationManagerInvalidAllocationId(); error AllocationManagerZeroTokensAllocation(address allocationId); @@ -79,6 +81,10 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager constructor(string memory name, string memory version) EIP712(name, version) {} + function setRewardsDestination(address rewardsDestination) external { + _setRewardsDestination(msg.sender, rewardsDestination); + } + function _migrateLegacyAllocation(address _indexer, address _allocationId, bytes32 _subgraphDeploymentId) internal { legacyAllocations.migrate(_indexer, _allocationId, _subgraphDeploymentId); emit LegacyAllocationMigrated(_indexer, _allocationId, _subgraphDeploymentId); @@ -233,6 +239,11 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager return allocations[_allocationId]; } + function _setRewardsDestination(address _indexer, address _rewardsDestination) internal { + rewardsDestination[_indexer] = _rewardsDestination; + emit RewardsDestinationSet(_indexer, _rewardsDestination); + } + function _getAllocation(address _allocationId) internal view returns (Allocation.State memory) { return allocations.get(_allocationId); } From 3a67294a6cf899ab4111c102d5504bd3d0d1a8fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 21 May 2024 16:33:24 -0300 Subject: [PATCH 036/343] feat: unify data service collection functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IDataService.sol | 42 ++++++------------- .../contracts/interfaces/IGraphPayments.sol | 3 +- .../contracts/payments/GraphPayments.sol | 23 +++++++++- .../contracts/payments/PaymentsEscrow.sol | 4 +- .../contracts/SubgraphService.sol | 41 ++++++++---------- .../contracts/utilities/AllocationManager.sol | 37 ++++++++++------ 6 files changed, 79 insertions(+), 71 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IDataService.sol b/packages/horizon/contracts/interfaces/IDataService.sol index 4064d4444..e6ca8fabe 100644 --- a/packages/horizon/contracts/interfaces/IDataService.sol +++ b/packages/horizon/contracts/interfaces/IDataService.sol @@ -44,19 +44,12 @@ interface IDataService { event ServiceStopped(address indexed serviceProvider); /** - * @notice Emitted when a service provider collects payment for the service being provided. + * @notice Emitted when a service provider collects payment. * @param serviceProvider The address of the service provider. + * @param feeType The type of fee to collect as defined in {GraphPayments}. * @param tokens The amount of tokens collected. */ - event ServicePaymentCollected(address indexed serviceProvider, uint256 tokens); - - /** - * @notice Emitted when a service provider redeems fees. - * @param serviceProvider The address of the service provider. - * @param feeType The type of fee to redeem as defined in {GraphPayments}. - * @param tokens The amount of tokens redeemed. - */ - event ServiceFeesRedeemed( + event ServicePaymentCollected( address indexed serviceProvider, IGraphPayments.PaymentTypes indexed feeType, uint256 tokens @@ -114,21 +107,6 @@ interface IDataService { */ function startService(address serviceProvider, bytes calldata data) external; - /** - * @notice Service provider collects payment for the service being provided. - * @dev This is payment owed to a service provided for ongoing work required to fullfil - * customer requests. How the funds for the payment are procured is up to the data service. - * - * Emits a {ServicePaymentCollected} event. - * - * NOTE: Data services that are vetted by the Graph Council might qualify for a portion of - * the protocol issuance to cover these payments. In this case, the funds are taken by - * interacting with the rewards manager contract. - * @param serviceProvider The address of the service provider. - * @param data Custom data, usage defined by the data service. - */ - function collectServicePayment(address serviceProvider, bytes calldata data) external; - /** * @notice Service provider stops providing the service. * @dev Emits a {ServiceStopped} event. @@ -138,17 +116,21 @@ interface IDataService { function stopService(address serviceProvider, bytes calldata data) external; /** - * @notice Redeeems fees earnt by the service provider. + * @notice Collects payment earnt by the service provider. * @dev The implementation of this function is expected to interact with {GraphPayments} - * to collect fees from the service payer, which is done via {IGraphPayments-collect}. + * to collect payment from the service payer, which is done via {IGraphPayments-collect}. * @param serviceProvider The address of the service provider. * - * Emits a {ServicePaymentRedeemed} event. + * Emits a {ServicePaymentCollected} event. * - * @param feeType The type of fee to redeem as defined in {GraphPayments}. + * NOTE: Data services that are vetted by the Graph Council might qualify for a portion of + * protocol issuance to cover for these payments. In this case, the funds are taken by + * interacting with the rewards manager contract instead of the {GraphPayments} contract. + * @param serviceProvider The address of the service provider. + * @param feeType The type of fee to collect as defined in {GraphPayments}. * @param data Custom data, usage defined by the data service. */ - function redeem(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external; + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external; /** * @notice Slash a service provider for misbehaviour. diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 0beda3543..a42035ef9 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -5,7 +5,8 @@ interface IGraphPayments { // Payment types enum PaymentTypes { QueryFee, - IndexingFee + IndexingFee, + IndexingRewards } // collect funds from a sender, pay cuts and forward the rest to the receiver diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 85fc17314..2ea903807 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -15,6 +15,16 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora using TokenUtils for IGraphToken; uint256 private immutable MAX_PPM = 1000000; // 100% in parts per million + + event GraphPaymentsCollected( + address indexed sender, + address indexed receiver, + uint256 tokensReceiver, + uint256 tokensDelegationPool, + uint256 tokensDataService, + uint256 tokensProtocol + ); + // -- Errors -- error GraphPaymentsNotThawing(); @@ -54,10 +64,21 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora // Get delegation cut uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, uint8(paymentType)); uint256 tokensDelegationPool = (amount * delegationFeeCut) / MAX_PPM; - _graphStaking().addToDelegationPool(receiver, dataService, tokensDelegationPool); + if (tokensDelegationPool > 0) { + _graphStaking().addToDelegationPool(receiver, dataService, tokensDelegationPool); + } // Pay the rest to the receiver uint256 tokensReceiver = amount - tokensProtocol - tokensDataService - tokensDelegationPool; _graphToken().pushTokens(receiver, tokensReceiver); + + emit GraphPaymentsCollected( + msg.sender, + receiver, + tokensReceiver, + tokensDelegationPool, + tokensDataService, + tokensProtocol + ); } } diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index d00312e05..d0e560b5e 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -47,7 +47,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { uint256 thawEndTimestamp ); event Withdraw(address indexed sender, address indexed receiver, uint256 amount); - event Collect(address indexed sender, address indexed receiver, uint256 amount); + event EscrowCollected(address indexed sender, address indexed receiver, uint256 amount); // -- Errors -- @@ -212,7 +212,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } account.balance -= amount; - emit Collect(sender, receiver, amount); + emit EscrowCollected(sender, receiver, amount); // Approve tokens so GraphPayments can pull them _graphToken().approve(address(_graphPayments()), amount); diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index ffce937f8..e7484247b 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -33,7 +33,7 @@ contract SubgraphService is using PPMMath for uint256; using Allocation for mapping(address => Allocation.State); - event QueryFeesRedeemed( + event QueryFeesCollected( address serviceProvider, address payer, uint256 tokensCollected, @@ -122,15 +122,6 @@ contract SubgraphService is emit ServiceStarted(indexer); } - function collectServicePayment( - address indexer, - bytes calldata data - ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { - (address allocationId, bytes32 poi) = abi.decode(data, (address, bytes32)); - uint256 rewards = _collectPOIRewards(allocationId, poi); - emit ServicePaymentCollected(indexer, rewards); - } - function stopService( address indexer, bytes calldata data @@ -148,21 +139,22 @@ contract SubgraphService is _resizeAllocation(allocationId, tokens, delegationRatio); } - // TODO: Does this design allow custom payment types?! - function redeem( + function collect( address indexer, - IGraphPayments.PaymentTypes feeType, + IGraphPayments.PaymentTypes paymentType, bytes calldata data ) external override onlyRegisteredIndexer(indexer) whenNotPaused { - uint256 feesCollected = 0; + uint256 paymentCollected = 0; - if (feeType == IGraphPayments.PaymentTypes.QueryFee) { - feesCollected = _redeemQueryFees(abi.decode(data, (ITAPVerifier.SignedRAV))); + if (paymentType == IGraphPayments.PaymentTypes.QueryFee) { + paymentCollected = _collectQueryFees(data); + } else if (paymentType == IGraphPayments.PaymentTypes.IndexingRewards) { + paymentCollected = _collectIndexingRewards(data); } else { - revert SubgraphServiceInvalidPaymentType(feeType); + revert SubgraphServiceInvalidPaymentType(paymentType); } - emit ServiceFeesRedeemed(indexer, feeType, feesCollected); + emit ServicePaymentCollected(indexer, paymentType, paymentCollected); } function slash(address indexer, bytes calldata data) external override onlyDisputeManager whenNotPaused { @@ -206,16 +198,17 @@ contract SubgraphService is return (verifierCut, type(uint32).max); } - function _redeemQueryFees(ITAPVerifier.SignedRAV memory _signedRAV) private returns (uint256 feesCollected) { - address indexer = _signedRAV.rav.serviceProvider; - address allocationId = abi.decode(_signedRAV.rav.metadata, (address)); + function _collectQueryFees(bytes memory _data) private returns (uint256 feesCollected) { + ITAPVerifier.SignedRAV memory signedRav = abi.decode(_data, (ITAPVerifier.SignedRAV)); + address indexer = signedRav.rav.serviceProvider; + address allocationId = abi.decode(signedRav.rav.metadata, (address)); // release expired stake claims _releaseStake(IGraphPayments.PaymentTypes.QueryFee, indexer, 0); // validate RAV and calculate tokens to collect - address payer = TAP_VERIFIER.verify(_signedRAV); - uint256 tokens = _signedRAV.rav.valueAggregate; + address payer = TAP_VERIFIER.verify(signedRav); + uint256 tokens = signedRav.rav.valueAggregate; uint256 tokensAlreadyCollected = tokensCollected[indexer][payer]; if (tokens <= tokensAlreadyCollected) { revert SubgraphServiceInconsistentRAVTokens(tokens, tokensAlreadyCollected); @@ -263,7 +256,7 @@ contract SubgraphService is } } - emit QueryFeesRedeemed(indexer, payer, tokensToCollect, tokensCurators, tokensSubgraphService); + emit QueryFeesCollected(indexer, payer, tokensToCollect, tokensCurators, tokensSubgraphService); return tokensToCollect; } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 182827b12..f20a5ab90 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -35,7 +35,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager uint256 tokens ); - event AllocationCollected( + event IndexingRewardsCollected( address indexed indexer, address indexed allocationId, bytes32 indexed subgraphDeploymentId, @@ -128,26 +128,35 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager // Update POI timestamp and take rewards snapshot even for 0 rewards // This ensures the rewards are actually skipped and not collected with the next valid POI - function _collectPOIRewards(address _allocationId, bytes32 _poi) internal returns (uint256) { - if (_poi == bytes32(0)) revert AllocationManagerInvalidZeroPOI(); + function _collectIndexingRewards(bytes memory _data) internal returns (uint256) { + (address allocationId, bytes32 poi) = abi.decode(_data, (address, bytes32)); + if (poi == bytes32(0)) revert AllocationManagerInvalidZeroPOI(); - Allocation.State memory allocation = allocations.get(_allocationId); + Allocation.State memory allocation = allocations.get(allocationId); // Mint indexing rewards, stale POIs get no rewards... uint256 timeSinceLastPOI = block.number - allocation.lastPOIPresentedAt; uint256 tokensRewards = timeSinceLastPOI <= maxPOIStaleness - ? _graphRewardsManager().takeRewards(_allocationId) + ? _graphRewardsManager().takeRewards(allocationId) : 0; // ... but we still take a snapshot to ensure the rewards are not collected with the next valid POI allocations.snapshotRewards( - _allocationId, + allocationId, _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId) ); - allocations.presentPOI(_allocationId); + allocations.presentPOI(allocationId); if (tokensRewards == 0) { - emit AllocationCollected(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, 0, 0, 0, _poi); + emit IndexingRewardsCollected( + allocation.indexer, + allocationId, + allocation.subgraphDeploymentId, + 0, + 0, + 0, + poi + ); return tokensRewards; } @@ -159,8 +168,10 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager uint8(IGraphPayments.PaymentTypes.IndexingFee) ); uint256 tokensDelegationRewards = tokensRewards.mulPPM(delegatorCut); - _graphToken().approve(address(_graphStaking()), tokensDelegationRewards); - _graphStaking().addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards); + if (tokensDelegationRewards > 0) { + _graphToken().approve(address(_graphStaking()), tokensDelegationRewards); + _graphStaking().addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards); + } // Distribute rewards to indexer uint256 tokensIndexerRewards = tokensRewards - tokensDelegationRewards; @@ -172,14 +183,14 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager _graphToken().transfer(rewardsDestination, tokensIndexerRewards); } - emit AllocationCollected( + emit IndexingRewardsCollected( allocation.indexer, - _allocationId, + allocationId, allocation.subgraphDeploymentId, tokensRewards, tokensIndexerRewards, tokensDelegationRewards, - _poi + poi ); return tokensRewards; From a3c79a57c5b86c8a4bfc77697c2a2168e3ccdb5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 22 May 2024 12:03:53 -0300 Subject: [PATCH 037/343] feat: add TAP collector MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IGraphPayments.sol | 4 +- .../interfaces/IPaymentsCollector.sol | 9 + .../contracts/interfaces/IPaymentsEscrow.sol | 6 +- .../{ITAPVerifier.sol => ITAPCollector.sol} | 11 +- .../contracts/payments/GraphPayments.sol | 20 +- .../contracts/payments/PaymentsEscrow.sol | 66 +++--- .../payments/collectors/TAPCollector.sol | 123 ++++++++++ .../payments/collectors/TAPVerifier.sol | 220 ------------------ packages/horizon/test/escrow/collect.t.sol | 8 +- .../horizon/test/payments/GraphPayments.t.sol | 2 +- .../contracts/SubgraphService.sol | 77 +++--- .../contracts/SubgraphServiceStorage.sol | 4 +- .../contracts/interfaces/ISubgraphService.sol | 6 +- .../contracts/utilities/Directory.sol | 6 +- 14 files changed, 233 insertions(+), 329 deletions(-) create mode 100644 packages/horizon/contracts/interfaces/IPaymentsCollector.sol rename packages/horizon/contracts/interfaces/{ITAPVerifier.sol => ITAPCollector.sol} (56%) create mode 100644 packages/horizon/contracts/payments/collectors/TAPCollector.sol delete mode 100644 packages/horizon/contracts/payments/collectors/TAPVerifier.sol diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index a42035ef9..acad67e99 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -11,10 +11,10 @@ interface IGraphPayments { // collect funds from a sender, pay cuts and forward the rest to the receiver function collect( + PaymentTypes paymentType, address receiver, - address dataService, uint256 tokens, - PaymentTypes paymentType, + address dataService, uint256 tokensDataService ) external; } diff --git a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol new file mode 100644 index 000000000..76525bd03 --- /dev/null +++ b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { IGraphPayments } from "./IGraphPayments.sol"; + +interface IPaymentsCollector { + function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external returns (uint256); +} diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 368b2d6d0..cd7665e73 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -28,11 +28,11 @@ interface IPaymentsEscrow { // Collect from escrow for a receiver using sender's deposit function collect( - address sender, + IGraphPayments.PaymentTypes paymentType, + address payer, address receiver, + uint256 tokens, address dataService, - uint256 amount, - IGraphPayments.PaymentTypes paymentType, uint256 tokensDataService ) external; diff --git a/packages/horizon/contracts/interfaces/ITAPVerifier.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol similarity index 56% rename from packages/horizon/contracts/interfaces/ITAPVerifier.sol rename to packages/horizon/contracts/interfaces/ITAPCollector.sol index 2cbfdf052..217f7a1a6 100644 --- a/packages/horizon/contracts/interfaces/ITAPVerifier.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -1,7 +1,9 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -interface ITAPVerifier { +import { IPaymentsCollector } from "./IPaymentsCollector.sol"; + +interface ITAPCollector is IPaymentsCollector { struct ReceiptAggregateVoucher { address dataService; address serviceProvider; @@ -14,11 +16,4 @@ interface ITAPVerifier { ReceiptAggregateVoucher rav; bytes signature; // 65 bytes: r (32 Bytes) || s (32 Bytes) || v (1 Byte) } - - struct SenderAuthorization { - address sender; // Sender the signer is authorized to sign for - uint256 thawEndTimestamp; // Timestamp at which thawing period ends (zero if not thawing) - } - - function verify(SignedRAV calldata rav) external returns (address sender); } diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 2ea903807..7644d68cf 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -19,6 +19,7 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora event GraphPaymentsCollected( address indexed sender, address indexed receiver, + address indexed dataService, uint256 tokensReceiver, uint256 tokensDelegationPool, uint256 tokensDataService, @@ -46,16 +47,16 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora // collect funds from a sender, pay cuts and forward the rest to the receiver function collect( - address receiver, // serviceProvider - address dataService, - uint256 amount, IGraphPayments.PaymentTypes paymentType, + address receiver, + uint256 tokens, + address dataService, uint256 tokensDataService ) external { - _graphToken().pullTokens(msg.sender, amount); + _graphToken().pullTokens(msg.sender, tokens); // Pay protocol cut - uint256 tokensProtocol = (amount * PROTOCOL_PAYMENT_CUT) / MAX_PPM; + uint256 tokensProtocol = (tokens * PROTOCOL_PAYMENT_CUT) / MAX_PPM; _graphToken().burnTokens(tokensProtocol); // Pay data service cut @@ -63,19 +64,20 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora // Get delegation cut uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, uint8(paymentType)); - uint256 tokensDelegationPool = (amount * delegationFeeCut) / MAX_PPM; + uint256 tokensDelegationPool = (tokens * delegationFeeCut) / MAX_PPM; if (tokensDelegationPool > 0) { _graphStaking().addToDelegationPool(receiver, dataService, tokensDelegationPool); } // Pay the rest to the receiver - uint256 tokensReceiver = amount - tokensProtocol - tokensDataService - tokensDelegationPool; - _graphToken().pushTokens(receiver, tokensReceiver); + uint256 tokensReceiverRemaining = tokens - tokensProtocol - tokensDataService - tokensDelegationPool; + _graphToken().pushTokens(receiver, tokensReceiverRemaining); emit GraphPaymentsCollected( msg.sender, receiver, - tokensReceiver, + dataService, + tokensReceiverRemaining, tokensDelegationPool, tokensDataService, tokensProtocol diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index d0e560b5e..f8ac5ca37 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -33,21 +33,21 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // -- Events -- - event AuthorizedCollector(address indexed sender, address indexed dataService); - event ThawCollector(address indexed sender, address indexed dataService); - event CancelThawCollector(address indexed sender, address indexed dataService); - event RevokeCollector(address indexed sender, address indexed dataService); - event Deposit(address indexed sender, address indexed receiver, uint256 amount); - event CancelThaw(address indexed sender, address indexed receiver); + event AuthorizedCollector(address indexed payer, address indexed dataService); + event ThawCollector(address indexed payer, address indexed dataService); + event CancelThawCollector(address indexed payer, address indexed dataService); + event RevokeCollector(address indexed payer, address indexed dataService); + event Deposit(address indexed payer, address indexed receiver, uint256 tokens); + event CancelThaw(address indexed payer, address indexed receiver); event Thaw( - address indexed sender, + address indexed payer, address indexed receiver, - uint256 amount, + uint256 tokens, uint256 totalAmountThawing, uint256 thawEndTimestamp ); - event Withdraw(address indexed sender, address indexed receiver, uint256 amount); - event EscrowCollected(address indexed sender, address indexed receiver, uint256 amount); + event Withdraw(address indexed payer, address indexed receiver, uint256 tokens); + event EscrowCollected(address indexed payer, address indexed receiver, uint256 tokens); // -- Errors -- @@ -61,6 +61,8 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { error GraphEscrowCollectorNotAuthorized(address sender, address dataService); error GraphEscrowCollectorInsufficientAmount(uint256 available, uint256 required); + error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens); + // -- Constructor -- constructor( @@ -183,45 +185,53 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // Collect from escrow for a receiver using sender's deposit function collect( - address sender, - address receiver, // serviceProvider - address dataService, - uint256 amount, IGraphPayments.PaymentTypes paymentType, + address payer, + address receiver, + uint256 tokens, + address dataService, uint256 tokensDataService ) external { // Check if collector is authorized and has enough funds - Collector storage collector = authorizedCollectors[sender][msg.sender]; + Collector storage collector = authorizedCollectors[payer][msg.sender]; if (!collector.authorized) { - revert GraphEscrowCollectorNotAuthorized(sender, msg.sender); + revert GraphEscrowCollectorNotAuthorized(payer, msg.sender); } - if (collector.amount < amount) { - revert GraphEscrowCollectorInsufficientAmount(collector.amount, amount); + if (collector.amount < tokens) { + revert GraphEscrowCollectorInsufficientAmount(collector.amount, tokens); } // Reduce amount from approved collector - collector.amount -= amount; + collector.amount -= tokens; // Collect tokens from GraphEscrow up to amount available - EscrowAccount storage account = escrowAccounts[sender][receiver]; + EscrowAccount storage account = escrowAccounts[payer][receiver]; uint256 availableAmount = account.balance - account.amountThawing; - if (availableAmount < amount) { - revert GraphEscrowInsufficientAmount(availableAmount, amount); + if (availableAmount < tokens) { + revert GraphEscrowInsufficientAmount(availableAmount, tokens); } - account.balance -= amount; - emit EscrowCollected(sender, receiver, amount); + account.balance -= tokens; // Approve tokens so GraphPayments can pull them - _graphToken().approve(address(_graphPayments()), amount); - _graphPayments().collect(receiver, dataService, amount, paymentType, tokensDataService); + uint256 balanceBefore = _graphToken().balanceOf(address(this)); + + _graphToken().approve(address(_graphPayments()), tokens); + _graphPayments().collect(paymentType, receiver, tokens, dataService, tokensDataService); + + uint256 balanceAfter = _graphToken().balanceOf(address(this)); + if (balanceBefore - balanceAfter != tokens) { + revert PaymentsEscrowInconsistentCollection(balanceBefore, balanceAfter, tokens); + } + + emit EscrowCollected(payer, receiver, tokens); } // Get the balance of a sender-receiver pair - function getBalance(address sender, address receiver) external view returns (uint256) { - EscrowAccount storage account = escrowAccounts[sender][receiver]; + function getBalance(address payer, address receiver) external view returns (uint256) { + EscrowAccount storage account = escrowAccounts[payer][receiver]; return account.balance - account.amountThawing; } } diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol new file mode 100644 index 000000000..b5cdced84 --- /dev/null +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; + +import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; +import { ITAPCollector } from "../../interfaces/ITAPCollector.sol"; + +import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; +import { PPMMath } from "../../libraries/PPMMath.sol"; + +import { GraphDirectory } from "../../data-service/GraphDirectory.sol"; +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; + +/** + * @title TAPVerifier + * @dev A contract for verifying receipt aggregation vouchers. + */ +contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { + using PPMMath for uint256; + + bytes32 private constant EIP712_RAV_TYPEHASH = + keccak256( + "ReceiptAggregateVoucher(address dataService, address serviceProvider,uint64 timestampNs,uint128 valueAggregate,bytes metadata)" + ); + + mapping(address dataService => mapping(address receiver => mapping(address payer => uint256 tokens))) + public tokensCollected; + + event TAPCollectorCollected( + IGraphPayments.PaymentTypes indexed paymentType, + address indexed payer, + address receiver, + uint256 tokensReceiver, + address indexed dataService, + uint256 tokensDataService + ); + + error TAPCollectorCallerNotDataService(address caller, address dataService); + error TAPVerifierInvalidSignerProof(); + error TAPCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected); + + /** + * @dev Constructs a new instance of the TAPVerifier contract. + */ + constructor( + string memory eip712Name, + string memory eip712Version, + address controller + ) EIP712(eip712Name, eip712Version) GraphDirectory(controller) {} + + /** + * @notice Verify validity of a SignedRAV + * @dev Caller must be the data service the RAV was issued to. + * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. + */ + function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external returns (uint256) { + (SignedRAV memory signedRAV, uint256 percentageDataService) = abi.decode(data, (SignedRAV, uint256)); + + if (signedRAV.rav.dataService != msg.sender) { + revert TAPCollectorCallerNotDataService(msg.sender, signedRAV.rav.dataService); + } + + address dataService = signedRAV.rav.dataService; + address payer = _recoverRAVSigner(signedRAV); + address receiver = signedRAV.rav.serviceProvider; + + uint256 tokensRAV = signedRAV.rav.valueAggregate; + uint256 tokensAlreadyCollected = tokensCollected[dataService][receiver][payer]; + if (tokensRAV < tokensAlreadyCollected) { + revert TAPCollectorInconsistentRAVTokens(tokensRAV, tokensAlreadyCollected); + } + + uint256 tokensToCollect = tokensRAV - tokensAlreadyCollected; + uint256 tokensDataService = tokensToCollect.mulPPM(percentageDataService); + + if (tokensToCollect > 0) { + _graphEscrow().collect(paymentType, payer, receiver, tokensToCollect, dataService, tokensDataService); + tokensCollected[dataService][receiver][payer] = tokensRAV; + } + + emit TAPCollectorCollected(paymentType, payer, receiver, tokensToCollect, dataService, tokensDataService); + return tokensToCollect; + } + + /** + * @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV). + * @param signedRAV The SignedRAV containing the RAV and its signature. + * @return The address of the signer. + * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. + */ + function recoverRAVSigner(SignedRAV calldata signedRAV) public view returns (address) { + return _recoverRAVSigner(signedRAV); + } + + /** + * @dev Computes the hash of a ReceiptAggregateVoucher (RAV). + * @param rav The RAV for which to compute the hash. + * @return The hash of the RAV. + */ + function encodeRAV(ReceiptAggregateVoucher calldata rav) public view returns (bytes32) { + return _encodeRAV(rav); + } + + function _recoverRAVSigner(SignedRAV memory __signedRAV) private view returns (address) { + bytes32 messageHash = _encodeRAV(signedRAV.rav); + return ECDSA.recover(messageHash, signedRAV.signature); + } + + function _encodeRAV(ReceiptAggregateVoucher memor _ _rav) private view returns (bytes32) { + return + _hashTypedDataV4( + keccak256( + abi.encode( + EIP712_RAV_TYPEHASH, + rav.dataService, + rav.serviceProvider, + rav.timestampNs, + rav.valueAggregate + ) + ) + ); + } +} diff --git a/packages/horizon/contracts/payments/collectors/TAPVerifier.sol b/packages/horizon/contracts/payments/collectors/TAPVerifier.sol deleted file mode 100644 index 735cc38a0..000000000 --- a/packages/horizon/contracts/payments/collectors/TAPVerifier.sol +++ /dev/null @@ -1,220 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; - -import { ITAPVerifier } from "../../interfaces/ITAPVerifier.sol"; - -import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; - -import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; - -/** - * @title TAPVerifier - * @dev A contract for verifying receipt aggregation vouchers. - */ -contract TAPVerifier is EIP712, ITAPVerifier { - bytes32 private constant EIP712_RAV_TYPEHASH = - keccak256( - "ReceiptAggregateVoucher(address dataService, address serviceProvider,uint64 timestampNs,uint128 valueAggregate,bytes metadata)" - ); - - // The duration (in seconds) in which a signer is thawing before they can be revoked - uint256 public immutable REVOKE_SIGNER_THAWING_PERIOD; - - // Map of signer to authorized signer information - mapping(address signer => SenderAuthorization authorizedSigner) public authorizedSigners; - - /** - * @dev Emitted when a signer is authorized to sign RAVs for a sender. - */ - event AuthorizeSigner(address indexed signer, address indexed sender); - /** - * @dev Emitted when a thaw request is made for authorized signer - */ - event ThawSigner(address indexed sender, address indexed authorizedSigner, uint256 thawEndTimestamp); - - /** - * @dev Emitted when the thawing of a signer is cancelled - */ - event CancelThawSigner(address indexed sender, address indexed authorizedSigner, uint256 thawEndTimestamp); - - /** - * @dev Emitted when a authorized signer has been revoked - */ - event RevokeAuthorizedSigner(address indexed sender, address indexed authorizedSigner); - - error TAPVerifierInvalidCaller(address sender, address expected); - error TAPVerifierInvalidSignerProof(); - error TAPVerifierAlreadyAuthorized(address signer, address authorizingSender); - error TAPVerifierNotAuthorized(address signer, address sender); - error TAPVerifierNotThawing(); - error TAPVerifierStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); - - /** - * @dev Constructs a new instance of the TAPVerifier contract. - */ - constructor(string memory eip712Name, string memory eip712Version) EIP712(eip712Name, eip712Version) {} - - /** - * @dev Authorizes a signer to sign RAVs for the sender. - * @param signer Address of the authorized signer. - * @param proof The proof provided by the signer to authorize the sender, consisting of packed (chainID, proof deadline, sender address). - * @dev The proof deadline is the timestamp at which the proof expires. The proof is susceptible to replay attacks until the deadline is reached. - * @notice REVERT with error: - * - SignerAlreadyAuthorized: Signer is currently authorized for a sender - * - InvalidSignerProof: The provided signer proof is invalid - */ - function authorizeSigner(address signer, uint256 proofDeadline, bytes calldata proof) external { - if (authorizedSigners[signer].sender != address(0)) { - revert TAPVerifierAlreadyAuthorized(signer, authorizedSigners[signer].sender); - } - - _verifyAuthorizedSignerProof(proof, proofDeadline, signer); - - authorizedSigners[signer].sender = msg.sender; - authorizedSigners[signer].thawEndTimestamp = 0; - emit AuthorizeSigner(signer, msg.sender); - } - - /** - * @dev Starts thawing a signer to be removed from the authorized signers list. - * @param signer Address of the signer to remove. - * @notice WARNING: Thawing a signer alerts receivers that signatures from that signer will soon be deemed invalid. - * Receivers without existing signed receipts or RAVs from this signer should treat them as unauthorized. - * Those with existing signed documents from this signer should work towards settling their engagements. - * Once a signer is thawed, they should be viewed as revoked regardless of their revocation status. - * @notice REVERT with error: - * - SignerNotAuthorizedBySender: The provided signer is either not authorized or - * authorized by a different sender - */ - function thawSigner(address signer) external { - SenderAuthorization storage authorization = authorizedSigners[signer]; - - if (authorization.sender != msg.sender) { - revert TAPVerifierNotAuthorized(signer, authorizedSigners[signer].sender); - } - - authorization.thawEndTimestamp = block.timestamp + REVOKE_SIGNER_THAWING_PERIOD; - emit ThawSigner(authorization.sender, signer, authorization.thawEndTimestamp); - } - - /** - * @dev Stops thawing a signer. - * @param signer Address of the signer to stop thawing. - * @notice REVERT with error: - * - SignerNotAuthorizedBySender: The provided signer is either not authorized or - * authorized by a different sender - */ - function cancelThawSigner(address signer) external { - SenderAuthorization storage authorization = authorizedSigners[signer]; - - if (authorization.sender != msg.sender) { - revert TAPVerifierNotAuthorized(signer, authorizedSigners[signer].sender); - } - - authorization.thawEndTimestamp = 0; - emit CancelThawSigner(authorization.sender, signer, authorization.thawEndTimestamp); - } - - /** - * @dev Revokes a signer from the authorized signers list if thawed. - * @param signer Address of the signer to remove. - * @notice REVERT with error: - * - SignerNotAuthorizedBySender: The provided signer is either not authorized or - * authorized by a different sender - * - SignerNotThawing: No thaw was initiated for the provided signer - * - SignerStillThawing: ThawEndTimestamp has not been reached - * for provided signer - */ - function revokeAuthorizedSigner(address signer) external { - SenderAuthorization storage authorization = authorizedSigners[signer]; - - if (authorization.sender != msg.sender) { - revert TAPVerifierNotAuthorized(signer, authorizedSigners[signer].sender); - } - - if (authorization.thawEndTimestamp == 0) { - revert TAPVerifierNotThawing(); - } - - if (authorization.thawEndTimestamp > block.timestamp) { - revert TAPVerifierStillThawing({ - currentTimestamp: block.timestamp, - thawEndTimestamp: authorization.thawEndTimestamp - }); - } - - delete authorizedSigners[signer]; - emit RevokeAuthorizedSigner(authorization.sender, signer); - } - - /** - * @notice Verify validity of a SignedRAV - * @dev Caller must be the data service the RAV was issued to. - * @param signedRAV The SignedRAV containing the RAV and its signature. - * @return The address of the signer. - * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. - */ - function verify(SignedRAV calldata signedRAV) external view returns (address) { - if (signedRAV.rav.dataService != msg.sender) { - revert TAPVerifierInvalidCaller(msg.sender, signedRAV.rav.dataService); - } - return recover(signedRAV); - } - - /** - * @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV). - * @param signedRAV The SignedRAV containing the RAV and its signature. - * @return The address of the signer. - * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. - */ - function recover(SignedRAV calldata signedRAV) public view returns (address) { - bytes32 messageHash = encodeRAV(signedRAV.rav); - return ECDSA.recover(messageHash, signedRAV.signature); - } - - /** - * @dev Computes the hash of a ReceiptAggregateVoucher (RAV). - * @param rav The RAV for which to compute the hash. - * @return The hash of the RAV. - */ - function encodeRAV(ReceiptAggregateVoucher calldata rav) public view returns (bytes32) { - return - _hashTypedDataV4( - keccak256( - abi.encode( - EIP712_RAV_TYPEHASH, - rav.dataService, - rav.serviceProvider, - rav.timestampNs, - rav.valueAggregate - ) - ) - ); - } - - /** - * @dev Verifies a proof that authorizes the sender to authorize the signer. - * @param _proof The proof provided by the signer to authorize the sender. - * @param _signer The address of the signer being authorized. - * @notice REVERT with error: - * - InvalidSignerProof: If the given proof is not valid - */ - function _verifyAuthorizedSignerProof(bytes calldata _proof, uint256 _proofDeadline, address _signer) private view { - // Verify that the proof deadline has not passed - if (block.timestamp > _proofDeadline) { - revert TAPVerifierInvalidSignerProof(); - } - - // Generate the hash of the sender's address - bytes32 messageHash = keccak256(abi.encodePacked(block.chainid, _proofDeadline, msg.sender)); - - // Generate the digest to be signed by the signer - bytes32 digest = MessageHashUtils.toEthSignedMessageHash(messageHash); - - // Verify that the recovered signer matches the expected signer - if (ECDSA.recover(digest, _proof) != _signer) { - revert TAPVerifierInvalidSignerProof(); - } - } -} diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 604e1b4ee..1f2b733f6 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -21,7 +21,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { uint256 indexerPreviousBalance = token.balanceOf(users.indexer); vm.prank(users.verifier); - escrow.collect(users.gateway, users.indexer, subgraphDataServiceAddress, 100 ether, IGraphPayments.PaymentTypes.IndexingFee, 3 ether); + escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, 100 ether, subgraphDataServiceAddress, 3 ether); uint256 indexerBalance = token.balanceOf(users.indexer); assertEq(indexerBalance - indexerPreviousBalance, 86 ether); @@ -35,7 +35,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { uint256 dataServiceCut = 30000; // 3% bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorNotAuthorized(address,address)", users.gateway, users.verifier); vm.expectRevert(expectedError); - escrow.collect(users.gateway, indexer, subgraphDataServiceAddress, amount, IGraphPayments.PaymentTypes.IndexingFee, dataServiceCut); + escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, indexer, amount, subgraphDataServiceAddress, dataServiceCut); vm.stopPrank(); } @@ -55,7 +55,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { uint256 dataServiceCut = 30 ether; bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", 100 ether, 1000 ether); vm.expectRevert(expectedError); - escrow.collect(users.gateway, indexer, subgraphDataServiceAddress, 1000 ether, IGraphPayments.PaymentTypes.IndexingFee, dataServiceCut); + escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, indexer, 1000 ether, subgraphDataServiceAddress, dataServiceCut); vm.stopPrank(); } @@ -69,7 +69,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { vm.prank(users.verifier); bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", 100 ether, 200 ether); vm.expectRevert(expectedError); - escrow.collect(users.gateway, users.indexer, subgraphDataServiceAddress, 200 ether, IGraphPayments.PaymentTypes.IndexingFee, 3 ether); + escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, 200 ether, subgraphDataServiceAddress, 3 ether); vm.stopPrank(); } } \ No newline at end of file diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 73f8f431b..4bf00ff8d 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -25,7 +25,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { // Collect payments through GraphPayments uint256 dataServiceCut = 30 ether; // 3% uint256 indexerPreviousBalance = token.balanceOf(users.indexer); - payments.collect(users.indexer, subgraphDataServiceAddress, amount, IGraphPayments.PaymentTypes.IndexingFee, dataServiceCut); + payments.collect(IGraphPayments.PaymentTypes.IndexingFee, users.indexer, amount, subgraphDataServiceAddress, dataServiceCut); vm.stopPrank(); uint256 indexerBalance = token.balanceOf(users.indexer); diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index e7484247b..d27c2093c 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.24; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; -import { ITAPVerifier } from "@graphprotocol/horizon/contracts/interfaces/ITAPVerifier.sol"; +import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; @@ -35,18 +35,16 @@ contract SubgraphService is event QueryFeesCollected( address serviceProvider, - address payer, uint256 tokensCollected, uint256 tokensCurators, uint256 tokensSubgraphService ); error SubgraphServiceEmptyUrl(); - error SubgraphServiceInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected); error SubgraphServiceInvalidPaymentType(IGraphPayments.PaymentTypes feeType); error SubgraphServiceIndexerAlreadyRegistered(); error SubgraphServiceIndexerNotRegistered(address indexer); - error SubgraphServiceInconsistentCollection(uint256 tokensExpected, uint256 tokensCollected); + error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensCollected); modifier onlyRegisteredIndexer(address indexer) { if (indexers[indexer].registeredAt == 0) { @@ -199,55 +197,44 @@ contract SubgraphService is } function _collectQueryFees(bytes memory _data) private returns (uint256 feesCollected) { - ITAPVerifier.SignedRAV memory signedRav = abi.decode(_data, (ITAPVerifier.SignedRAV)); + ITAPCollector.SignedRAV memory signedRav = abi.decode(_data, (ITAPCollector.SignedRAV)); address indexer = signedRav.rav.serviceProvider; address allocationId = abi.decode(signedRav.rav.metadata, (address)); + bytes32 subgraphDeploymentId = allocations.get(allocationId).subgraphDeploymentId; // release expired stake claims _releaseStake(IGraphPayments.PaymentTypes.QueryFee, indexer, 0); - // validate RAV and calculate tokens to collect - address payer = TAP_VERIFIER.verify(signedRav); - uint256 tokens = signedRav.rav.valueAggregate; - uint256 tokensAlreadyCollected = tokensCollected[indexer][payer]; - if (tokens <= tokensAlreadyCollected) { - revert SubgraphServiceInconsistentRAVTokens(tokens, tokensAlreadyCollected); + // Collect from GraphPayments + PaymentCuts memory queryFeePaymentCuts = _getQueryFeePaymentCuts(subgraphDeploymentId); + uint256 percentageTotalCut = queryFeePaymentCuts.percentageServiceCut + + queryFeePaymentCuts.percentageCurationCut; + + uint256 balanceBefore = _graphToken().balanceOf(address(this)); + uint256 tokensCollected = TAP_COLLECTOR.collect( + IGraphPayments.PaymentTypes.QueryFee, + abi.encode(signedRav, percentageTotalCut) + ); + uint256 tokensDataService = tokensCollected.mulPPM(percentageTotalCut); + uint256 balanceAfter = _graphToken().balanceOf(address(this)); + if (balanceAfter - balanceBefore != tokensDataService) { + revert SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter, tokensDataService); } - uint256 tokensToCollect = tokens - tokensAlreadyCollected; + uint256 tokensCurators = 0; uint256 tokensSubgraphService = 0; - - if (tokensToCollect > 0) { + if (tokensCollected > 0) { // lock stake as economic security for fees - // block scope to avoid 'stack too deep' error - { - uint256 tokensToLock = tokensToCollect * stakeToFeesRatio; - uint256 unlockTimestamp = block.timestamp + DISPUTE_MANAGER.getDisputePeriod(); - _lockStake(IGraphPayments.PaymentTypes.QueryFee, indexer, tokensToLock, unlockTimestamp); - } - - // get subgraph deployment id - reverts if allocation is not found - bytes32 subgraphDeploymentId = allocations.get(allocationId).subgraphDeploymentId; + uint256 tokensToLock = tokensCollected * stakeToFeesRatio; + uint256 unlockTimestamp = block.timestamp + DISPUTE_MANAGER.getDisputePeriod(); + _lockStake(IGraphPayments.PaymentTypes.QueryFee, indexer, tokensToLock, unlockTimestamp); // calculate service and curator cuts - // TODO: note we don't let curation cut round down to zero - PaymentFee memory feePercentages = _getQueryFeesPaymentFees(subgraphDeploymentId); - tokensSubgraphService = tokensToCollect.mulPPM(feePercentages.servicePercentage); - tokensCurators = tokensToCollect.mulPPMRoundUp(feePercentages.curationPercentage); - uint256 totalCut = tokensSubgraphService + tokensCurators; - - // collect fees - uint256 balanceBefore = _graphToken().balanceOf(address(this)); - _graphPayments().collect(payer, indexer, tokensToCollect, IGraphPayments.PaymentTypes.QueryFee, totalCut); - uint256 balanceAfter = _graphToken().balanceOf(address(this)); - if (balanceBefore + totalCut != balanceAfter) { - revert SubgraphServiceInconsistentCollection(balanceBefore + totalCut, balanceAfter); - } - tokensCollected[indexer][payer] = tokens; + tokensCurators = tokensCollected.mulPPMRoundUp(queryFeePaymentCuts.percentageCurationCut); + tokensSubgraphService = tokensDataService - tokensCurators; - // distribute curation cut to curators if (tokensCurators > 0) { - // we are about to change subgraph signal so we take rewards snapshot + // curation collection changes subgraph signal so we take rewards snapshot _graphRewardsManager().onSubgraphSignalUpdate(subgraphDeploymentId); // Send GRT and bookkeep by calling collect() @@ -256,18 +243,18 @@ contract SubgraphService is } } - emit QueryFeesCollected(indexer, payer, tokensToCollect, tokensCurators, tokensSubgraphService); - return tokensToCollect; + emit QueryFeesCollected(indexer, tokensCollected, tokensCurators, tokensSubgraphService); + return tokensCollected; } - function _getQueryFeesPaymentFees(bytes32 _subgraphDeploymentId) private view returns (PaymentFee memory) { - PaymentFee memory feePercentages = paymentFees[IGraphPayments.PaymentTypes.QueryFee]; + function _getQueryFeePaymentCuts(bytes32 _subgraphDeploymentId) private view returns (PaymentCuts memory) { + PaymentCuts memory queryFeePaymentCuts = paymentCuts[IGraphPayments.PaymentTypes.QueryFee]; // Only pay curation fees if the subgraph is curated if (!CURATION.isCurated(_subgraphDeploymentId)) { - feePercentages.curationPercentage = 0; + queryFeePaymentCuts.percentageCurationCut = 0; } - return feePercentages; + return queryFeePaymentCuts; } } diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol index c67702428..671279989 100644 --- a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -13,7 +13,5 @@ abstract contract SubgraphServiceV1Storage { uint256 public stakeToFeesRatio; /// @notice The fees cut taken by the subgraph service - mapping(IGraphPayments.PaymentTypes paymentType => ISubgraphService.PaymentFee paymentFees) public paymentFees; - - mapping(address indexer => mapping(address payer => uint256 tokens)) public tokensCollected; + mapping(IGraphPayments.PaymentTypes paymentType => ISubgraphService.PaymentCuts paymentCuts) public paymentCuts; } diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 17dd7019c..4e395fc0b 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -13,9 +13,9 @@ interface ISubgraphService is IDataServiceFees { string geoHash; } - struct PaymentFee { - uint128 servicePercentage; - uint128 curationPercentage; + struct PaymentCuts { + uint128 percentageServiceCut; + uint128 percentageCurationCut; } function resizeAllocation(address indexer, address allocationId, uint256 tokens) external; diff --git a/packages/subgraph-service/contracts/utilities/Directory.sol b/packages/subgraph-service/contracts/utilities/Directory.sol index bc452f072..f6f9253ab 100644 --- a/packages/subgraph-service/contracts/utilities/Directory.sol +++ b/packages/subgraph-service/contracts/utilities/Directory.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { ITAPVerifier } from "@graphprotocol/horizon/contracts/interfaces/ITAPVerifier.sol"; +import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; import { IDisputeManager } from "../interfaces/IDisputeManager.sol"; import { ISubgraphService } from "../interfaces/ISubgraphService.sol"; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; abstract contract Directory { - ITAPVerifier public immutable TAP_VERIFIER; + ITAPCollector public immutable TAP_COLLECTOR; IDisputeManager public immutable DISPUTE_MANAGER; ISubgraphService public immutable SUBGRAPH_SERVICE; ICuration public immutable CURATION; @@ -29,7 +29,7 @@ abstract contract Directory { constructor(address subgraphService, address tapVerifier, address disputeManager, address curation) { SUBGRAPH_SERVICE = ISubgraphService(subgraphService); - TAP_VERIFIER = ITAPVerifier(tapVerifier); + TAP_COLLECTOR = ITAPCollector(tapVerifier); DISPUTE_MANAGER = IDisputeManager(disputeManager); CURATION = ICuration(curation); From 58db521f83c4e1203095bddaa9095fc39db82ada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 22 May 2024 12:21:47 -0300 Subject: [PATCH 038/343] feat: add bridge escrow and graph proxy admin to graph directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/gateway/IBridgeEscrow.sol | 26 +++++++ .../contracts/upgrades/IGraphProxyAdmin.sol | 10 +++ .../contracts/data-service/GraphDirectory.sol | 78 ++++++++++++------- .../contracts/payments/GraphPayments.sol | 1 - .../payments/collectors/TAPCollector.sol | 26 ++++--- .../staking/StakingBackwardsCompatibility.sol | 2 - 6 files changed, 101 insertions(+), 42 deletions(-) create mode 100644 packages/contracts/contracts/gateway/IBridgeEscrow.sol create mode 100644 packages/contracts/contracts/upgrades/IGraphProxyAdmin.sol diff --git a/packages/contracts/contracts/gateway/IBridgeEscrow.sol b/packages/contracts/contracts/gateway/IBridgeEscrow.sol new file mode 100644 index 000000000..733288e9c --- /dev/null +++ b/packages/contracts/contracts/gateway/IBridgeEscrow.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +/** + * @title IBridgeEscrow + */ +interface IBridgeEscrow { + /** + * @notice Initialize the BridgeEscrow contract. + * @param _controller Address of the Controller that manages this contract + */ + function initialize(address _controller) external; + + /** + * @notice Approve a spender (i.e. a bridge that manages the GRT funds held by the escrow) + * @param _spender Address of the spender that will be approved + */ + function approveAll(address _spender) external; + + /** + * @notice Revoke a spender (i.e. a bridge that will no longer manage the GRT funds held by the escrow) + * @param _spender Address of the spender that will be revoked + */ + function revokeAll(address _spender) external; +} diff --git a/packages/contracts/contracts/upgrades/IGraphProxyAdmin.sol b/packages/contracts/contracts/upgrades/IGraphProxyAdmin.sol new file mode 100644 index 000000000..2abf4517d --- /dev/null +++ b/packages/contracts/contracts/upgrades/IGraphProxyAdmin.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +/** + * @title IGraphProxyAdmin + * @dev Empty interface to allow the GraphProxyAdmin contract to be used + * in the GraphDirectory contract. + */ +interface IGraphProxyAdmin {} diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index 24cfa14e0..f05d9db66 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -2,50 +2,58 @@ pragma solidity 0.8.24; -import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; + +import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; -import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; import { ITokenGateway } from "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol"; +import { IBridgeEscrow } from "@graphprotocol/contracts/contracts/gateway/IBridgeEscrow.sol"; +import { IGraphProxyAdmin } from "@graphprotocol/contracts/contracts/upgrades/IGraphProxyAdmin.sol"; + +import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; /** * @title GraphDirectory contract * @notice This contract is meant to be inherited by other contracts that - * need to keep track of the addresses of the core Graph Horizon contracts. + * need to keep track of the addresses in Graph Horizon contracts. * It fetches the addresses from the Controller supplied during construction, * and uses immutable variables to minimize gas costs. */ abstract contract GraphDirectory { - IController private immutable GRAPH_CONTROLLER; - // Graph Horizon contracts IGraphToken private immutable GRAPH_TOKEN; IHorizonStaking private immutable GRAPH_STAKING; IGraphPayments private immutable GRAPH_PAYMENTS; - IPaymentsEscrow private immutable GRAPH_ESCROW; + IPaymentsEscrow private immutable GRAPH_PAYMENTS_ESCROW; - // Legacy Graph contracts - // Required for StakingBackwardCompatibility - // TODO: remove these once StakingBackwardCompatibility is removed + // Graph periphery contracts + IController private immutable GRAPH_CONTROLLER; IEpochManager private immutable GRAPH_EPOCH_MANAGER; IRewardsManager private immutable GRAPH_REWARDS_MANAGER; - ICuration private immutable GRAPH_CURATION; ITokenGateway private immutable GRAPH_TOKEN_GATEWAY; + IBridgeEscrow private immutable GRAPH_BRIDGE_ESCROW; + IGraphProxyAdmin private immutable GRAPH_PROXY_ADMIN; + + // Legacy Graph contracts - required for StakingBackwardCompatibility + // TODO: remove these once StakingBackwardCompatibility is removed + ICuration private immutable GRAPH_CURATION; event GraphDirectoryInitialized( - IController graphController, IGraphToken graphToken, IHorizonStaking graphStaking, IGraphPayments graphPayments, IPaymentsEscrow graphEscrow, + IController graphController, IEpochManager graphEpochManager, IRewardsManager graphRewardsManager, - ICuration graphCuration, - ITokenGateway graphTokenGateway + ITokenGateway graphTokenGateway, + IBridgeEscrow graphBridgeEscrow, + IGraphProxyAdmin graphProxyAdmin, + ICuration graphCuration ); error GraphDirectoryInvalidZeroAddress(); @@ -59,29 +67,29 @@ abstract contract GraphDirectory { GRAPH_TOKEN = IGraphToken(_getContractFromController("GraphToken")); GRAPH_STAKING = IHorizonStaking(_getContractFromController("Staking")); GRAPH_PAYMENTS = IGraphPayments(_getContractFromController("GraphPayments")); - GRAPH_ESCROW = IPaymentsEscrow(_getContractFromController("PaymentsEscrow")); + GRAPH_PAYMENTS_ESCROW = IPaymentsEscrow(_getContractFromController("PaymentsEscrow")); GRAPH_EPOCH_MANAGER = IEpochManager(_getContractFromController("EpochManager")); GRAPH_REWARDS_MANAGER = IRewardsManager(_getContractFromController("RewardsManager")); - GRAPH_CURATION = ICuration(_getContractFromController("Curation")); GRAPH_TOKEN_GATEWAY = ITokenGateway(_getContractFromController("GraphTokenGateway")); + GRAPH_BRIDGE_ESCROW = IBridgeEscrow(_getContractFromController("BridgeEscrow")); + GRAPH_PROXY_ADMIN = IGraphProxyAdmin(_getContractFromController("GraphProxyAdmin")); + GRAPH_CURATION = ICuration(_getContractFromController("Curation")); emit GraphDirectoryInitialized( - GRAPH_CONTROLLER, GRAPH_TOKEN, GRAPH_STAKING, GRAPH_PAYMENTS, - GRAPH_ESCROW, + GRAPH_PAYMENTS_ESCROW, + GRAPH_CONTROLLER, GRAPH_EPOCH_MANAGER, GRAPH_REWARDS_MANAGER, - GRAPH_CURATION, - GRAPH_TOKEN_GATEWAY + GRAPH_TOKEN_GATEWAY, + GRAPH_BRIDGE_ESCROW, + GRAPH_PROXY_ADMIN, + GRAPH_CURATION ); } - function _graphController() internal view returns (IController) { - return GRAPH_CONTROLLER; - } - function _graphToken() internal view returns (IGraphToken) { return GRAPH_TOKEN; } @@ -94,8 +102,12 @@ abstract contract GraphDirectory { return GRAPH_PAYMENTS; } - function _graphEscrow() internal view returns (IPaymentsEscrow) { - return GRAPH_ESCROW; + function _graphPaymentsEscrow() internal view returns (IPaymentsEscrow) { + return GRAPH_PAYMENTS_ESCROW; + } + + function _graphController() internal view returns (IController) { + return GRAPH_CONTROLLER; } function _graphEpochManager() internal view returns (IEpochManager) { @@ -106,14 +118,22 @@ abstract contract GraphDirectory { return GRAPH_REWARDS_MANAGER; } - function _graphCuration() internal view returns (ICuration) { - return GRAPH_CURATION; - } - function _graphTokenGateway() internal view returns (ITokenGateway) { return GRAPH_TOKEN_GATEWAY; } + function _graphBridgeEscrow() internal view returns (IBridgeEscrow) { + return GRAPH_BRIDGE_ESCROW; + } + + function _graphProxyAdmin() internal view returns (IGraphProxyAdmin) { + return GRAPH_PROXY_ADMIN; + } + + function _graphCuration() internal view returns (ICuration) { + return GRAPH_CURATION; + } + function _getContractFromController(bytes memory _contractName) private view returns (address) { address contractAddress = GRAPH_CONTROLLER.getContractProxy(keccak256(_contractName)); if (contractAddress == address(0)) { diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 7644d68cf..2ba8f8dc8 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.24; import { IGraphToken } from "../interfaces/IGraphToken.sol"; -import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index b5cdced84..f0fb31077 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -9,7 +9,6 @@ import { PPMMath } from "../../libraries/PPMMath.sol"; import { GraphDirectory } from "../../data-service/GraphDirectory.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; /** * @title TAPVerifier @@ -74,7 +73,14 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { uint256 tokensDataService = tokensToCollect.mulPPM(percentageDataService); if (tokensToCollect > 0) { - _graphEscrow().collect(paymentType, payer, receiver, tokensToCollect, dataService, tokensDataService); + _graphPaymentsEscrow().collect( + paymentType, + payer, + receiver, + tokensToCollect, + dataService, + tokensDataService + ); tokensCollected[dataService][receiver][payer] = tokensRAV; } @@ -101,21 +107,21 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { return _encodeRAV(rav); } - function _recoverRAVSigner(SignedRAV memory __signedRAV) private view returns (address) { - bytes32 messageHash = _encodeRAV(signedRAV.rav); - return ECDSA.recover(messageHash, signedRAV.signature); + function _recoverRAVSigner(SignedRAV memory _signedRAV) private view returns (address) { + bytes32 messageHash = _encodeRAV(_signedRAV.rav); + return ECDSA.recover(messageHash, _signedRAV.signature); } - function _encodeRAV(ReceiptAggregateVoucher memor _ _rav) private view returns (bytes32) { + function _encodeRAV(ReceiptAggregateVoucher memory _rav) private view returns (bytes32) { return _hashTypedDataV4( keccak256( abi.encode( EIP712_RAV_TYPEHASH, - rav.dataService, - rav.serviceProvider, - rav.timestampNs, - rav.valueAggregate + _rav.dataService, + _rav.serviceProvider, + _rav.timestampNs, + _rav.valueAggregate ) ) ); diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index a570242f4..9928a88d5 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -3,8 +3,6 @@ pragma solidity 0.8.24; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; -import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; -import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; From 3d11376234c63044911410ee70d196b96bbfa453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 22 May 2024 14:33:17 -0300 Subject: [PATCH 039/343] chore: subgraph service directory revamp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/SubgraphService.sol | 16 ++++----- .../contracts/utilities/Directory.sol | 34 ++++++++++++++----- packages/subgraph-service/package.json | 2 +- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index d27c2093c..261dd8805 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -157,7 +157,7 @@ contract SubgraphService is function slash(address indexer, bytes calldata data) external override onlyDisputeManager whenNotPaused { (uint256 tokens, uint256 reward) = abi.decode(data, (uint256, uint256)); - _graphStaking().slash(indexer, tokens, reward, address(DISPUTE_MANAGER)); + _graphStaking().slash(indexer, tokens, reward, address(_disputeManager())); emit ServiceProviderSlashed(indexer, tokens); } @@ -187,12 +187,12 @@ contract SubgraphService is // -- Data service parameter getters -- function _getThawingPeriodRange() internal view override returns (uint64 min, uint64 max) { - uint64 disputePeriod = DISPUTE_MANAGER.getDisputePeriod(); + uint64 disputePeriod = _disputeManager().getDisputePeriod(); return (disputePeriod, type(uint64).max); } function _getVerifierCutRange() internal view override returns (uint32 min, uint32 max) { - uint32 verifierCut = DISPUTE_MANAGER.getVerifierCut(); + uint32 verifierCut = _disputeManager().getVerifierCut(); return (verifierCut, type(uint32).max); } @@ -211,7 +211,7 @@ contract SubgraphService is queryFeePaymentCuts.percentageCurationCut; uint256 balanceBefore = _graphToken().balanceOf(address(this)); - uint256 tokensCollected = TAP_COLLECTOR.collect( + uint256 tokensCollected = _tapCollector().collect( IGraphPayments.PaymentTypes.QueryFee, abi.encode(signedRav, percentageTotalCut) ); @@ -226,7 +226,7 @@ contract SubgraphService is if (tokensCollected > 0) { // lock stake as economic security for fees uint256 tokensToLock = tokensCollected * stakeToFeesRatio; - uint256 unlockTimestamp = block.timestamp + DISPUTE_MANAGER.getDisputePeriod(); + uint256 unlockTimestamp = block.timestamp + _disputeManager().getDisputePeriod(); _lockStake(IGraphPayments.PaymentTypes.QueryFee, indexer, tokensToLock, unlockTimestamp); // calculate service and curator cuts @@ -238,8 +238,8 @@ contract SubgraphService is _graphRewardsManager().onSubgraphSignalUpdate(subgraphDeploymentId); // Send GRT and bookkeep by calling collect() - _graphToken().transfer(address(CURATION), tokensCurators); - CURATION.collect(subgraphDeploymentId, tokensCurators); + _graphToken().transfer(address(_curation()), tokensCurators); + _curation().collect(subgraphDeploymentId, tokensCurators); } } @@ -251,7 +251,7 @@ contract SubgraphService is PaymentCuts memory queryFeePaymentCuts = paymentCuts[IGraphPayments.PaymentTypes.QueryFee]; // Only pay curation fees if the subgraph is curated - if (!CURATION.isCurated(_subgraphDeploymentId)) { + if (!_curation().isCurated(_subgraphDeploymentId)) { queryFeePaymentCuts.percentageCurationCut = 0; } diff --git a/packages/subgraph-service/contracts/utilities/Directory.sol b/packages/subgraph-service/contracts/utilities/Directory.sol index f6f9253ab..f4e756cf6 100644 --- a/packages/subgraph-service/contracts/utilities/Directory.sol +++ b/packages/subgraph-service/contracts/utilities/Directory.sol @@ -1,21 +1,21 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; import { IDisputeManager } from "../interfaces/IDisputeManager.sol"; import { ISubgraphService } from "../interfaces/ISubgraphService.sol"; +import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; abstract contract Directory { - ITAPCollector public immutable TAP_COLLECTOR; - IDisputeManager public immutable DISPUTE_MANAGER; - ISubgraphService public immutable SUBGRAPH_SERVICE; - ICuration public immutable CURATION; + ISubgraphService private immutable SUBGRAPH_SERVICE; + IDisputeManager private immutable DISPUTE_MANAGER; + ITAPCollector private immutable TAP_COLLECTOR; + ICuration private immutable CURATION; event SubgraphServiceDirectoryInitialized( address subgraphService, - address tapVerifier, address disputeManager, + address tapCollector, address curation ); error DirectoryNotDisputeManager(address caller, address disputeManager); @@ -27,12 +27,28 @@ abstract contract Directory { _; } - constructor(address subgraphService, address tapVerifier, address disputeManager, address curation) { + constructor(address subgraphService, address disputeManager, address tapCollector, address curation) { SUBGRAPH_SERVICE = ISubgraphService(subgraphService); - TAP_COLLECTOR = ITAPCollector(tapVerifier); DISPUTE_MANAGER = IDisputeManager(disputeManager); + TAP_COLLECTOR = ITAPCollector(tapCollector); CURATION = ICuration(curation); - emit SubgraphServiceDirectoryInitialized(subgraphService, tapVerifier, disputeManager, curation); + emit SubgraphServiceDirectoryInitialized(subgraphService, disputeManager, tapCollector, curation); + } + + function _subgraphService() internal view returns (ISubgraphService) { + return SUBGRAPH_SERVICE; + } + + function _disputeManager() internal view returns (IDisputeManager) { + return DISPUTE_MANAGER; + } + + function _tapCollector() internal view returns (ITAPCollector) { + return TAP_COLLECTOR; + } + + function _curation() internal view returns (ICuration) { + return CURATION; } } diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 8ad66358e..8df36e35f 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -10,7 +10,7 @@ "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", "build": "forge build && hardhat compile", - "test": "forge test && hardhat test" + "test": "forge test -vvv && hardhat test" }, "devDependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", From 72d679c969dea66b053f784d0fb1e00212db348d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 22 May 2024 15:05:33 -0300 Subject: [PATCH 040/343] feat: update rewards manager to add allowlist for taking rewards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/rewards/IRewardsIssuer.sol | 20 ++++++++ .../contracts/rewards/IRewardsManager.sol | 2 + .../contracts/rewards/RewardsManager.sol | 46 +++++++++++++------ .../rewards/RewardsManagerStorage.sol | 5 ++ .../staking/StakingBackwardsCompatibility.sol | 22 ++++++++- .../contracts/SubgraphService.sol | 9 ++++ .../test/mocks/MockRewardsManager.sol | 2 + 7 files changed, 90 insertions(+), 16 deletions(-) create mode 100644 packages/contracts/contracts/rewards/IRewardsIssuer.sol diff --git a/packages/contracts/contracts/rewards/IRewardsIssuer.sol b/packages/contracts/contracts/rewards/IRewardsIssuer.sol new file mode 100644 index 000000000..bf2f8c430 --- /dev/null +++ b/packages/contracts/contracts/rewards/IRewardsIssuer.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity >=0.6.12 <0.9.0; + +interface IRewardsIssuer { + /** + * @dev Get allocation data to calculate rewards issuance + * @param allocationId The allocation ID + * @return indexer The indexer address + * @return subgraphDeploymentID Subgraph deployment id for the allocation + * @return tokens Amount of allocated tokens + * @return accRewardsPerAllocatedToken Rewards snapshot + */ + function getAllocationData( + address allocationId + ) + external + view + returns (address indexer, bytes32 subgraphDeploymentID, uint256 tokens, uint256 accRewardsPerAllocatedToken); +} diff --git a/packages/contracts/contracts/rewards/IRewardsManager.sol b/packages/contracts/contracts/rewards/IRewardsManager.sol index 4266a8635..2d2bd4003 100644 --- a/packages/contracts/contracts/rewards/IRewardsManager.sol +++ b/packages/contracts/contracts/rewards/IRewardsManager.sol @@ -19,6 +19,8 @@ interface IRewardsManager { function setMinimumSubgraphSignal(uint256 _minimumSubgraphSignal) external; + function setRewardsIssuer(address _rewardsIssuer, bool _allowed) external; + // -- Denylist -- function setSubgraphAvailabilityOracle(address _subgraphAvailabilityOracle) external; diff --git a/packages/contracts/contracts/rewards/RewardsManager.sol b/packages/contracts/contracts/rewards/RewardsManager.sol index 03cadacb0..41c79e861 100644 --- a/packages/contracts/contracts/rewards/RewardsManager.sol +++ b/packages/contracts/contracts/rewards/RewardsManager.sol @@ -10,6 +10,7 @@ import "../staking/libs/MathUtils.sol"; import "./RewardsManagerStorage.sol"; import "./IRewardsManager.sol"; +import { IRewardsIssuer } from "./IRewardsIssuer.sol"; /** * @title Rewards Manager Contract @@ -28,7 +29,7 @@ import "./IRewardsManager.sol"; * These functions may overestimate the actual rewards due to changes in the total supply * until the actual takeRewards function is called. */ -contract RewardsManager is RewardsManagerV4Storage, GraphUpgradeable, IRewardsManager { +contract RewardsManager is RewardsManagerV5Storage, GraphUpgradeable, IRewardsManager { using SafeMath for uint256; uint256 private constant FIXED_POINT_SCALING_FACTOR = 1e18; @@ -38,18 +39,23 @@ contract RewardsManager is RewardsManagerV4Storage, GraphUpgradeable, IRewardsMa /** * @dev Emitted when rewards are assigned to an indexer. */ - event RewardsAssigned(address indexed indexer, address indexed allocationID, uint256 epoch, uint256 amount); + event RewardsAssigned(address indexed indexer, address indexed allocationID, uint256 amount); /** * @dev Emitted when rewards are denied to an indexer. */ - event RewardsDenied(address indexed indexer, address indexed allocationID, uint256 epoch); + event RewardsDenied(address indexed indexer, address indexed allocationID); /** * @dev Emitted when a subgraph is denied for claiming rewards. */ event RewardsDenylistUpdated(bytes32 indexed subgraphDeploymentID, uint256 sinceBlock); + /** + * @dev Emitted when a rewards issuer is updated. + */ + event RewardsIssuerSet(address indexed rewardsIssuer, bool allowed); + // -- Modifiers -- modifier onlySubgraphAvailabilityOracle() { @@ -115,6 +121,11 @@ contract RewardsManager is RewardsManagerV4Storage, GraphUpgradeable, IRewardsMa emit ParameterUpdated("minimumSubgraphSignal"); } + function setRewardsIssuer(address _rewardsIssuer, bool _allowed) external override onlyGovernor { + rewardsIssuers[_rewardsIssuer] = _allowed; + emit RewardsIssuerSet(_rewardsIssuer, _allowed); + } + // -- Denylist -- /** @@ -349,29 +360,34 @@ contract RewardsManager is RewardsManagerV4Storage, GraphUpgradeable, IRewardsMa * @return Assigned rewards amount */ function takeRewards(address _allocationID) external override returns (uint256) { - // Only Staking contract is authorized as caller - IStaking staking = staking(); - require(msg.sender == address(staking), "Caller must be the staking contract"); + address rewardsIssuer = msg.sender; + require(rewardsIssuers[rewardsIssuer], "Caller must be a rewards issuer"); + + ( + address indexer, + bytes32 subgraphDeploymentID, + uint256 tokens, + uint256 accRewardsPerAllocatedToken + ) = IRewardsIssuer(rewardsIssuer).getAllocationData(_allocationID); - IStaking.Allocation memory alloc = staking.getAllocation(_allocationID); - uint256 accRewardsPerAllocatedToken = onSubgraphAllocationUpdate(alloc.subgraphDeploymentID); + uint256 updatedAccRewardsPerAllocatedToken = onSubgraphAllocationUpdate(subgraphDeploymentID); // Do not do rewards on denied subgraph deployments ID - if (isDenied(alloc.subgraphDeploymentID)) { - emit RewardsDenied(alloc.indexer, _allocationID, alloc.closedAtEpoch); + if (isDenied(subgraphDeploymentID)) { + emit RewardsDenied(indexer, _allocationID); return 0; } // Calculate rewards accrued by this allocation - uint256 rewards = _calcRewards(alloc.tokens, alloc.accRewardsPerAllocatedToken, accRewardsPerAllocatedToken); + uint256 rewards = _calcRewards(tokens, accRewardsPerAllocatedToken, updatedAccRewardsPerAllocatedToken); if (rewards > 0) { - // Mint directly to staking contract for the reward amount - // The staking contract will do bookkeeping of the reward and + // Mint directly to rewards issuer for the reward amount + // The rewards issuer contract will do bookkeeping of the reward and // assign in proportion to each stakeholder incentive - graphToken().mint(address(staking), rewards); + graphToken().mint(rewardsIssuer, rewards); } - emit RewardsAssigned(alloc.indexer, _allocationID, alloc.closedAtEpoch, rewards); + emit RewardsAssigned(indexer, _allocationID, rewards); return rewards; } diff --git a/packages/contracts/contracts/rewards/RewardsManagerStorage.sol b/packages/contracts/contracts/rewards/RewardsManagerStorage.sol index 72dbda373..afcd98e43 100644 --- a/packages/contracts/contracts/rewards/RewardsManagerStorage.sol +++ b/packages/contracts/contracts/rewards/RewardsManagerStorage.sol @@ -36,3 +36,8 @@ contract RewardsManagerV4Storage is RewardsManagerV3Storage { // GRT issued for indexer rewards per block uint256 public issuancePerBlock; } + +contract RewardsManagerV5Storage is RewardsManagerV4Storage { + // List of addresses that are allowed to issue rewards + mapping(address => bool) public rewardsIssuers; +} diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index 9928a88d5..737fd8d5f 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.24; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; +import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; @@ -24,7 +25,12 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; * Note that this contract delegates part of its functionality to a StakingExtension contract. * This is due to the 24kB contract size limit on Ethereum. */ -abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Storage, IStakingBackwardsCompatibility { +abstract contract StakingBackwardsCompatibility is + Managed, + HorizonStakingV1Storage, + IRewardsIssuer, + IStakingBackwardsCompatibility +{ using TokenUtils for IGraphToken; /// @dev 100% in parts per million @@ -184,6 +190,20 @@ abstract contract StakingBackwardsCompatibility is Managed, HorizonStakingV1Stor return __DEPRECATED_allocations[allocationID]; } + /** + * @notice Return allocation data by ID. + * @dev To be called by the Rewards Manager to calculate rewards issuance. + * @dev TODO: Remove after Horizon transition period + * @param allocationID Address used as allocation identifier + * @return Allocation data + */ + function getAllocationData( + address allocationID + ) external view override returns (address, bytes32, uint256, uint256) { + Allocation memory allo = __DEPRECATED_allocations[allocationID]; + return (allo.indexer, allo.subgraphDeploymentID, allo.tokens, allo.accRewardsPerAllocatedToken); + } + /** * @notice Return the current state of an allocation * @dev TODO: Remove after Horizon transition period diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 261dd8805..2fce55365 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.24; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; +import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { DataServicePausable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausable.sol"; @@ -28,6 +29,7 @@ contract SubgraphService is Directory, AllocationManager, SubgraphServiceV1Storage, + IRewardsIssuer, ISubgraphService { using PPMMath for uint256; @@ -177,6 +179,13 @@ contract SubgraphService is return allocations[allocationId]; } + function getAllocationData( + address allocationId + ) external view override returns (address, bytes32, uint256, uint256) { + Allocation.State memory allo = allocations[allocationId]; + return (allo.indexer, allo.subgraphDeploymentId, allo.tokens, allo.accRewardsPerAllocatedToken); + } + function getLegacyAllocation(address allocationId) external view returns (LegacyAllocation.State memory) { return legacyAllocations[allocationId]; } diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol index 6d15d2b3c..49c284aaa 100644 --- a/packages/subgraph-service/test/mocks/MockRewardsManager.sol +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -12,6 +12,8 @@ contract MockRewardsManager is IRewardsManager { function setMinimumSubgraphSignal(uint256 _minimumSubgraphSignal) external {} + function setRewardsIssuer(address _rewardsIssuer, bool _allowed) external {} + // -- Denylist -- function setSubgraphAvailabilityOracle(address _subgraphAvailabilityOracle) external {} From 8d788f27eca0b5db872143ba6630e079acaf3a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 22 May 2024 15:17:45 -0300 Subject: [PATCH 041/343] feat: allow presenting 0x00 pois MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/libraries/Allocation.sol | 2 +- .../contracts/utilities/AllocationManager.sol | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index f6e9e0000..f7b5c972a 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -36,7 +36,7 @@ library Allocation { tokens: tokens, createdAt: block.timestamp, closedAt: 0, - lastPOIPresentedAt: block.timestamp, + lastPOIPresentedAt: 0, accRewardsPerAllocatedToken: accRewardsPerAllocatedToken, accRewardsPending: 0 }); diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index f20a5ab90..62a70aee4 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -6,6 +6,7 @@ import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGra import { GraphDirectory } from "@graphprotocol/horizon/contracts/data-service/GraphDirectory.sol"; import { AllocationManagerV1Storage } from "./AllocationManagerStorage.sol"; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; import { Allocation } from "../libraries/Allocation.sol"; @@ -130,17 +131,16 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager // This ensures the rewards are actually skipped and not collected with the next valid POI function _collectIndexingRewards(bytes memory _data) internal returns (uint256) { (address allocationId, bytes32 poi) = abi.decode(_data, (address, bytes32)); - if (poi == bytes32(0)) revert AllocationManagerInvalidZeroPOI(); Allocation.State memory allocation = allocations.get(allocationId); - // Mint indexing rewards, stale POIs get no rewards... - uint256 timeSinceLastPOI = block.number - allocation.lastPOIPresentedAt; - uint256 tokensRewards = timeSinceLastPOI <= maxPOIStaleness + // Mint indexing rewards, 0x00 and stale POIs get no rewards... + uint256 timeSinceLastPOI = block.number - Math.max(allocation.createdAt, allocation.lastPOIPresentedAt); + uint256 tokensRewards = (timeSinceLastPOI <= maxPOIStaleness && poi != bytes32(0)) ? _graphRewardsManager().takeRewards(allocationId) : 0; - // ... but we still take a snapshot to ensure the rewards are not collected with the next valid POI + // ... but we still take a snapshot to ensure the rewards are not accumulated for the next valid POI allocations.snapshotRewards( allocationId, _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId) From 21235909bb9a10f5e401a0d9c08f3c8f2deadc79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 22 May 2024 17:45:51 -0300 Subject: [PATCH 042/343] feat: better provision checks, delegation ratio fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/DataService.sol | 15 ---- .../extensions/DataServiceFees.sol | 2 +- .../extensions/DataServiceFeesStorage.sol | 2 - .../utilities/ProvisionManager.sol | 78 ++++++++++++------- .../utilities/ProvisionManagerStorage.sol | 6 ++ .../staking/HorizonStakingExtension.sol | 5 +- .../contracts/SubgraphService.sol | 19 +++-- .../test/DisputeManager.t.sol | 3 +- 8 files changed, 73 insertions(+), 57 deletions(-) diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index f256cbba7..06c484aa2 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -21,19 +21,4 @@ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1 * @param controller The address of the Graph Horizon controller contract. */ constructor(address controller) GraphDirectory(controller) {} - - /** - * @notice Verifies and accepts the provision of a service provider in the {Graph Horizon staking - * contract}. - * @dev This internal function is a wrapper around {ProvisionManager-checkAndAcceptProvision} - * that ensures the event {ProvisionAccepted} is emitted when called from different contexts. - * - * Emits a {ProvisionAccepted} event. - * - * @param _serviceProvider The address of the service provider. - */ - function _acceptProvision(address _serviceProvider) internal { - _checkAndAcceptProvision(_serviceProvider); - emit ProvisionAccepted(_serviceProvider); - } } diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index b803c9248..2ea9ffe2c 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -66,7 +66,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat uint256 _tokens, uint256 _unlockTimestamp ) internal { - feesProvisionTracker[_feeType].lock(_graphStaking(), _serviceProvider, _tokens, delegationRatio); + feesProvisionTracker[_feeType].lock(_graphStaking(), _serviceProvider, _tokens, maximumDelegationRatio); StakeClaimsList storage claimsList = claimsLists[_feeType][_serviceProvider]; bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce); diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index d64f99239..4296a952a 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -15,8 +15,6 @@ abstract contract DataServiceFeesV1Storage { mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => IDataServiceFees.StakeClaimsList list)) public claimsLists; - uint32 public delegationRatio; - /// @dev Gap to allow adding variables in future upgrades uint256[50] private __gap; } diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 946db4b0f..57e14270f 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -13,21 +13,7 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage using ProvisionGetter for IHorizonStaking; using UintRange for uint256; - error ProvisionManagerInvalidProvisionTokens( - uint256 tokens, - uint256 minimumProvisionTokens, - uint256 maximumProvisionTokens - ); - error ProvisionManagerInvalidVerifierCut( - uint256 verifierCut, - uint256 minimumVerifierCut, - uint256 maximumVerifierCut - ); - error ProvisionManagerInvalidThawingPeriod( - uint64 thawingPeriod, - uint64 minimumThawingPeriod, - uint64 maximumThawingPeriod - ); + error ProvisionManagerInvalidValue(bytes message, uint256 value, uint256 min, uint256 max); error ProvisionManagerNotAuthorized(address caller, address serviceProvider, address service); modifier onlyProvisionAuthorized(address serviceProvider) { @@ -41,6 +27,9 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage minimumProvisionTokens = type(uint256).min; maximumProvisionTokens = type(uint256).max; + minimumDelegationRatio = type(uint32).min; + maximumDelegationRatio = type(uint32).max; + minimumThawingPeriod = type(uint64).min; maximumThawingPeriod = type(uint64).max; @@ -48,8 +37,17 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage maximumVerifierCut = type(uint32).max; } - function _checkAndAcceptProvision(address _serviceProvider) internal virtual { - _checkProvisionParameters(_serviceProvider); + /** + * @notice Verifies and accepts the provision of a service provider in the {Graph Horizon staking + * contract}. + * @dev Checks the pending provision parameters, not the current ones. + * + * Emits a {ProvisionAccepted} event. + * + * @param _serviceProvider The address of the service provider. + */ + function _acceptProvisionParameters(address _serviceProvider) internal virtual { + _checkProvisionParameters(_serviceProvider, true); _graphStaking().acceptProvisionParameters(_serviceProvider); } @@ -59,6 +57,11 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage maximumProvisionTokens = _max; } + function _setDelegationRatioRange(uint32 _min, uint32 _max) internal { + minimumDelegationRatio = _min; + maximumDelegationRatio = _max; + } + function _setVerifierCutRange(uint32 _min, uint32 _max) internal { minimumVerifierCut = _min; maximumVerifierCut = _max; @@ -69,25 +72,30 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage maximumThawingPeriod = _max; } - /// @notice Checks if the service provider has a valid provision for the data service in the staking contract - /// @param _serviceProvider The address of the service provider - function _checkProvisionParameters(address _serviceProvider) internal view virtual { + function _checkProvisionTokens(address _serviceProvider) internal view virtual { IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); + _checkValueInRange(provision.tokens, minimumProvisionTokens, maximumProvisionTokens, "tokens"); + } - (uint256 provisionTokensMin, uint256 provisionTokensMax) = _getProvisionTokensRange(); - if (!provision.tokens.isInRange(provisionTokensMin, provisionTokensMax)) { - revert ProvisionManagerInvalidProvisionTokens(provision.tokens, provisionTokensMin, provisionTokensMax); - } + function _checkProvisionDelegationRatio(address _serviceProvider) internal view virtual { + IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); + uint256 delegatedTokens = _graphStaking().getDelegatedTokensAvailable(_serviceProvider, address(this)); + + (uint32 delegationRatioMin, uint32 delegationRatioMax) = _getDelegationRatioRange(); + uint256 delegationRatioToCheck = uint32(delegatedTokens / (provision.tokens - provision.tokensThawing)); + _checkValueInRange(delegationRatioToCheck, delegationRatioMin, delegationRatioMax, "delegationRatio"); + } + + function _checkProvisionParameters(address _serviceProvider, bool _checkPending) internal view virtual { + IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); (uint64 thawingPeriodMin, uint64 thawingPeriodMax) = _getThawingPeriodRange(); - if (!uint256(provision.thawingPeriod).isInRange(thawingPeriodMin, thawingPeriodMax)) { - revert ProvisionManagerInvalidThawingPeriod(provision.thawingPeriod, thawingPeriodMin, thawingPeriodMax); - } + uint64 thawingPeriodToCheck = _checkPending ? provision.thawingPeriodPending : provision.thawingPeriod; + _checkValueInRange(thawingPeriodToCheck, thawingPeriodMin, thawingPeriodMax, "thawingPeriod"); (uint32 verifierCutMin, uint32 verifierCutMax) = _getVerifierCutRange(); - if (!uint256(provision.maxVerifierCut).isInRange(verifierCutMin, verifierCutMax)) { - revert ProvisionManagerInvalidVerifierCut(provision.maxVerifierCut, verifierCutMin, verifierCutMax); - } + uint32 maxVerifierCutToCheck = _checkPending ? provision.maxVerifierCutPending : provision.maxVerifierCut; + _checkValueInRange(maxVerifierCutToCheck, verifierCutMin, verifierCutMax, "maxVerifierCut"); } // -- Provision Parameters: getters -- @@ -95,6 +103,10 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage return (minimumProvisionTokens, maximumProvisionTokens); } + function _getDelegationRatioRange() internal view virtual returns (uint32 min, uint32 max) { + return (minimumDelegationRatio, maximumDelegationRatio); + } + function _getThawingPeriodRange() internal view virtual returns (uint64 min, uint64 max) { return (minimumThawingPeriod, maximumThawingPeriod); } @@ -106,4 +118,10 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage function _getProvision(address _serviceProvider) internal view returns (IHorizonStaking.Provision memory) { return _graphStaking().get(_serviceProvider); } + + function _checkValueInRange(uint256 _value, uint256 _min, uint256 _max, bytes memory _revertMessage) private pure { + if (!_value.isInRange(_min, _max)) { + revert ProvisionManagerInvalidValue(_revertMessage, _value, _min, _max); + } + } } diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol index e7a25e6ab..2f129adef 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol @@ -8,6 +8,12 @@ abstract contract ProvisionManagerV1Storage { /// @notice The maximum amount of tokens allowed to register a provision in the data service uint256 public maximumProvisionTokens; + /// @notice Minimum delegation to self stake ratio required + uint32 public minimumDelegationRatio; + + /// @notice Maximum delegation to self stake ratio allowed for a service provider + uint32 public maximumDelegationRatio; + /// @notice The minimum thawing period required to register a provision in the data service uint64 public minimumThawingPeriod; diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 469e4cf3f..7142fbd31 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -122,12 +122,13 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas uint32 delegationRatio ) external view override returns (uint256) { uint256 providerTokens = _provisions[serviceProvider][verifier].tokens; - uint256 tokensDelegatedMax = providerTokens * (uint256(delegationRatio)); + uint256 providerThawingTokens = _provisions[serviceProvider][verifier].tokensThawing; + uint256 tokensDelegatedMax = (providerTokens - providerThawingTokens) * (uint256(delegationRatio)); uint256 tokensDelegatedCapacity = MathUtils.min( getDelegatedTokensAvailable(serviceProvider, verifier), tokensDelegatedMax ); - return providerTokens - _provisions[serviceProvider][verifier].tokensThawing + tokensDelegatedCapacity; + return providerTokens - providerThawingTokens + tokensDelegatedCapacity; } function getServiceProvider(address serviceProvider) external view override returns (ServiceProvider memory) { diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 2fce55365..3836b7e57 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -60,7 +60,8 @@ contract SubgraphService is address disputeManager, address tapVerifier, address curation, - uint256 minimumProvisionTokens + uint256 minimumProvisionTokens, + uint32 maximumDelegationRatio ) Ownable(msg.sender) DataService(graphController) @@ -68,6 +69,7 @@ contract SubgraphService is AllocationManager("SubgraphService", "1.0") { _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max); + _setDelegationRatioRange(type(uint32).min, maximumDelegationRatio); } function register( @@ -97,8 +99,8 @@ contract SubgraphService is } // Ensure the service provider created a valid provision for the data service - // and accept it in the staking contract - _acceptProvision(indexer); + _checkProvisionParameters(indexer, false); + _checkProvisionTokens(indexer); emit ServiceProviderRegistered(indexer); } @@ -107,18 +109,21 @@ contract SubgraphService is address indexer, bytes calldata ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { - _acceptProvision(indexer); + _checkProvisionTokens(indexer); + _acceptProvisionParameters(indexer); + emit ProvisionAccepted(indexer); } function startService( address indexer, bytes calldata data ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + _checkProvisionTokens(indexer); (bytes32 subgraphDeploymentId, uint256 tokens, address allocationId, bytes memory allocationProof) = abi.decode( data, (bytes32, uint256, address, bytes) ); - _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof, delegationRatio); + _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof, maximumDelegationRatio); emit ServiceStarted(indexer); } @@ -136,7 +141,8 @@ contract SubgraphService is address allocationId, uint256 tokens ) external onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { - _resizeAllocation(allocationId, tokens, delegationRatio); + _checkProvisionTokens(indexer); + _resizeAllocation(allocationId, tokens, maximumDelegationRatio); } function collect( @@ -144,6 +150,7 @@ contract SubgraphService is IGraphPayments.PaymentTypes paymentType, bytes calldata data ) external override onlyRegisteredIndexer(indexer) whenNotPaused { + _checkProvisionTokens(indexer); uint256 paymentCollected = 0; if (paymentType == IGraphPayments.PaymentTypes.QueryFee) { diff --git a/packages/subgraph-service/test/DisputeManager.t.sol b/packages/subgraph-service/test/DisputeManager.t.sol index bc8e8f42d..8d338299f 100644 --- a/packages/subgraph-service/test/DisputeManager.t.sol +++ b/packages/subgraph-service/test/DisputeManager.t.sol @@ -89,7 +89,8 @@ contract DisputeManagerTest is Test { address(disputeManager), tapVerifier, curation, - 1000 ether + 1000 ether, + 16 ); disputeManager.setSubgraphService(address(subgraphService)); From f657198bfefd8f2b00d04679375e7b0bcf00a7cc Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 21 May 2024 18:47:05 -0300 Subject: [PATCH 043/343] chore: fix unit tests and refactor --- .../contracts/data-service/GraphDirectory.sol | 1 + .../contracts/payments/GraphPayments.sol | 6 +- packages/horizon/test/GraphBase.t.sol | 36 +++++----- .../horizon/test/escrow/GraphEscrow.t.sol | 30 +++++--- packages/horizon/test/escrow/collect.t.sol | 69 ++++++++----------- packages/horizon/test/escrow/collector.t.sol | 27 ++------ packages/horizon/test/escrow/deposit.t.sol | 2 +- packages/horizon/test/escrow/thaw.t.sol | 6 +- packages/horizon/test/escrow/withdraw.t.sol | 2 +- .../horizon/test/payments/GraphPayments.t.sol | 20 +++--- .../horizon-staking/HorizonStaking.t.sol | 26 ++++++- packages/horizon/test/utils/Constants.sol | 4 +- 12 files changed, 120 insertions(+), 109 deletions(-) diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index f05d9db66..805136db1 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -16,6 +16,7 @@ import { IGraphProxyAdmin } from "@graphprotocol/contracts/contracts/upgrades/IG import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; +import "forge-std/console.sol"; /** * @title GraphDirectory contract * @notice This contract is meant to be inherited by other contracts that diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 2ba8f8dc8..8fddc6a07 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -69,7 +69,11 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora } // Pay the rest to the receiver - uint256 tokensReceiverRemaining = tokens - tokensProtocol - tokensDataService - tokensDelegationPool; + uint256 totalCut = tokensProtocol + tokensDataService + tokensDelegationPool; + if (totalCut > tokens) { + revert GraphPaymentsCollectorInsufficientAmount(tokens, totalCut); + } + uint256 tokensReceiverRemaining = tokens - totalCut; _graphToken().pushTokens(receiver, tokensReceiverRemaining); emit GraphPaymentsCollected( diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 36721ed2c..51a5b4d5a 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -67,10 +67,13 @@ abstract contract GraphBaseTest is Test, Constants { } function deployProtocolContracts() private { - vm.prank(users.governor); + vm.startPrank(users.governor); controller = new Controller(); + controller.setContractProxy(keccak256("GraphToken"), address(token)); + vm.stopPrank(); + - // GraphPayments preddict address + // GraphPayments predict address bytes32 saltPayments = keccak256("GraphPaymentsSalt"); bytes32 paymentsHash = keccak256(bytes.concat( vm.getCode("GraphPayments.sol:GraphPayments"), @@ -82,7 +85,7 @@ abstract contract GraphBaseTest is Test, Constants { users.deployer ); - // GraphEscrow preddict address + // GraphEscrow predict address bytes32 saltEscrow = keccak256("GraphEscrowSalt"); bytes32 escrowHash = keccak256(bytes.concat( vm.getCode("GraphEscrow.sol:GraphEscrow"), @@ -98,7 +101,7 @@ abstract contract GraphBaseTest is Test, Constants { users.deployer ); - // HorizonStakingExtension preddict address + // HorizonStakingExtension predict address bytes32 saltHorizonStakingExtension = keccak256("HorizonStakingExtensionSalt"); bytes32 horizonStakingExtensionHash = keccak256(bytes.concat( vm.getCode("HorizonStakingExtension.sol:HorizonStakingExtension"), @@ -110,7 +113,7 @@ abstract contract GraphBaseTest is Test, Constants { users.deployer ); - // HorizonStaking preddict address + // HorizonStaking predict address bytes32 saltHorizonStaking = keccak256("saltHorizonStaking"); bytes32 horizonStakingHash = keccak256(bytes.concat( vm.getCode("HorizonStaking.sol:HorizonStaking"), @@ -120,18 +123,17 @@ abstract contract GraphBaseTest is Test, Constants { subgraphDataServiceAddress ) )); - // address predictedAddressHorizonStaking = vm.computeCreate2Address( - // saltHorizonStaking, - // horizonStakingHash, - // users.deployer - // ); + address predictedAddressHorizonStaking = vm.computeCreate2Address( + saltHorizonStaking, + horizonStakingHash, + users.deployer + ); // Setup controller vm.startPrank(users.governor); - controller.setContractProxy(keccak256("GraphToken"), address(token)); controller.setContractProxy(keccak256("GraphEscrow"), predictedAddressEscrow); controller.setContractProxy(keccak256("GraphPayments"), predictedPaymentsAddress); - // controller.setContractProxy(keccak256("Staking"), predictedAddressHorizonStaking); + controller.setContractProxy(keccak256("Staking"), address(predictedAddressHorizonStaking)); vm.stopPrank(); vm.startPrank(users.deployer); @@ -144,16 +146,16 @@ abstract contract GraphBaseTest is Test, Constants { revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod ); + stakingExtension = new HorizonStakingExtension{salt: saltHorizonStakingExtension}( + address(controller), + subgraphDataServiceAddress + ); stakingBase = new HorizonStaking{salt: saltHorizonStaking}( address(controller), - predictedAddressHorizonStakingExtension, + address(stakingExtension), subgraphDataServiceAddress ); staking = IHorizonStaking(address(stakingBase)); - // stakingExtension = new HorizonStakingExtension{salt: saltHorizonStakingExtension}( - // address(controller), - // subgraphDataServiceAddress - // ); vm.stopPrank(); } diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index f420c1964..fffa82830 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -13,15 +13,23 @@ contract GraphEscrowTest is HorizonStakingSharedTest { vm.stopPrank(); } - modifier approveEscrow(uint256 amount) { - _approveEscrow(amount); + modifier approveEscrow(uint256 tokens) { + changePrank(users.gateway); + _approveEscrow(tokens); _; } - modifier depositTokens(uint256 amount) { - vm.assume(amount > 0); - vm.assume(amount <= 10000 ether); - _depositTokens(amount); + modifier useDeposit(uint256 tokens) { + changePrank(users.gateway); + vm.assume(tokens > 0); + vm.assume(tokens <= 10_000_000_000 ether); + _depositTokens(tokens); + _; + } + + modifier useCollector(uint256 tokens) { + changePrank(users.gateway); + escrow.approveCollector(users.verifier, tokens); _; } @@ -29,12 +37,12 @@ contract GraphEscrowTest is HorizonStakingSharedTest { HorizonStakingSharedTest.setUp(); } - function _depositTokens(uint256 amount) internal { - token.approve(address(escrow), amount); - escrow.deposit(users.indexer, amount); + function _depositTokens(uint256 tokens) internal { + token.approve(address(escrow), tokens); + escrow.deposit(users.indexer, tokens); } - function _approveEscrow(uint256 amount) internal { - token.approve(address(escrow), amount); + function _approveEscrow(uint256 tokens) internal { + token.approve(address(escrow), tokens); } } \ No newline at end of file diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 1f2b733f6..db7f549e8 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -8,68 +8,57 @@ import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; contract GraphEscrowCollectTest is GraphEscrowTest { - function testCollect() public { - uint256 amount = 1000 ether; - createProvision(amount); - setDelegationFeeCut(0, 100000); - + function testCollect_Tokens(uint256 amount, uint256 tokensDataService) public useProvision(amount, 0, 0) useDelegationFeeCut(0, delegationFeeCut) { + uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; + uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; + vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegatoion); + vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 1000 ether); + escrow.approveCollector(users.verifier, amount); + _depositTokens(amount); vm.stopPrank(); uint256 indexerPreviousBalance = token.balanceOf(users.indexer); vm.prank(users.verifier); - escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, 100 ether, subgraphDataServiceAddress, 3 ether); + escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); uint256 indexerBalance = token.balanceOf(users.indexer); - assertEq(indexerBalance - indexerPreviousBalance, 86 ether); + uint256 indexerExpectedPayment = amount - tokensDataService - tokensProtocol - tokensDelegatoion; + assertEq(indexerBalance - indexerPreviousBalance, indexerExpectedPayment); + assertTrue(true); } - function testCollect_RevertWhen_CollectorNotAuthorized() public { - address indexer = address(0xA3); - uint256 amount = 1000 ether; - + function testCollect_RevertWhen_CollectorNotAuthorized(uint256 amount) public { vm.startPrank(users.verifier); uint256 dataServiceCut = 30000; // 3% bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorNotAuthorized(address,address)", users.gateway, users.verifier); vm.expectRevert(expectedError); - escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, indexer, amount, subgraphDataServiceAddress, dataServiceCut); + escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, dataServiceCut); vm.stopPrank(); } - function testCollect_RevertWhen_CollectorHasInsufficientAmount() public { - vm.prank(users.gateway); - escrow.approveCollector(users.verifier, 100 ether); - - address indexer = address(0xA3); - uint256 amount = 1000 ether; - - vm.startPrank(users.gateway); - token.approve(address(escrow), amount); - escrow.deposit(indexer, amount); - vm.stopPrank(); + function testCollect_RevertWhen_CollectorHasInsufficientAmount( + uint256 amount, + uint256 insufficientAmount + ) public useGateway useCollector(insufficientAmount) useDeposit(amount) { + vm.assume(insufficientAmount < amount); - vm.startPrank(users.verifier); - uint256 dataServiceCut = 30 ether; - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", 100 ether, 1000 ether); + changePrank(users.verifier); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", insufficientAmount, amount); vm.expectRevert(expectedError); - escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, indexer, 1000 ether, subgraphDataServiceAddress, dataServiceCut); - vm.stopPrank(); + escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); } - function testCollect_RevertWhen_SenderHasInsufficientAmountInEscrow() public { - vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - token.approve(address(escrow), 1000 ether); - escrow.deposit(users.indexer, 100 ether); - vm.stopPrank(); + function testCollect_RevertWhen_SenderHasInsufficientAmountInEscrow( + uint256 amount, + uint256 insufficientAmount + ) public useGateway useCollector(amount) useDeposit(insufficientAmount) { + vm.assume(insufficientAmount < amount); - vm.prank(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", 100 ether, 200 ether); + changePrank(users.verifier); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", insufficientAmount, amount); vm.expectRevert(expectedError); - escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, 200 ether, subgraphDataServiceAddress, 3 ether); + escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); vm.stopPrank(); } } \ No newline at end of file diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index f4ef2b11c..be1524056 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -6,15 +6,10 @@ import "forge-std/Test.sol"; import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowCollectorTest is GraphEscrowTest { - function setUp() public virtual override { - GraphEscrowTest.setUp(); - vm.prank(users.gateway); - escrow.approveCollector(users.verifier, 1000 ether); - } // Collector approve tests - function testCollector_Approve() public view { + function testCollector_Approve(uint256 amount) public useGateway useCollector(amount) { (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); assertEq(authorized, true); assertEq(thawEndTimestamp, 0); @@ -22,8 +17,7 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { // Collector thaw tests - function testCollector_Thaw() public { - vm.prank(users.gateway); + function testCollector_Thaw(uint256 amount) public useGateway useCollector(amount) { escrow.thawCollector(users.verifier); (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); @@ -33,15 +27,13 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { // Collector cancel thaw tests - function testCollector_CancelThaw() public { - vm.prank(users.gateway); + function testCollector_CancelThaw(uint256 amount) public useGateway useCollector(amount) { escrow.thawCollector(users.verifier); (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); assertEq(authorized, true); assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); - vm.prank(users.gateway); escrow.cancelThawCollector(users.verifier); (authorized,, thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); @@ -49,7 +41,7 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { assertEq(thawEndTimestamp, 0); } - function testCollector_RevertWhen_CancelThawIsNotThawing() public { + function testCollector_RevertWhen_CancelThawIsNotThawing(uint256 amount) public useGateway useCollector(amount) { bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); vm.expectRevert(expectedError); escrow.cancelThawCollector(users.verifier); @@ -58,30 +50,25 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { // Collector revoke tests - function testCollector_Revoke() public { - vm.startPrank(users.gateway); + function testCollector_Revoke(uint256 amount) public useGateway useCollector(amount) { escrow.thawCollector(users.verifier); skip(revokeCollectorThawingPeriod + 1); escrow.revokeCollector(users.verifier); - vm.stopPrank(); (bool authorized,,) = escrow.authorizedCollectors(users.gateway, users.verifier); assertEq(authorized, false); } - function testCollector_RevertWhen_RevokeIsNotThawing() public { + function testCollector_RevertWhen_RevokeIsNotThawing(uint256 amount) public useGateway useCollector(amount) { bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); vm.expectRevert(expectedError); - vm.prank(users.gateway); escrow.revokeCollector(users.verifier); } - function testCollector_RevertWhen_RevokeIsStillThawing() public { - vm.startPrank(users.gateway); + function testCollector_RevertWhen_RevokeIsStillThawing(uint256 amount) public useGateway useCollector(amount) { escrow.thawCollector(users.verifier); bytes memory expectedError = abi.encodeWithSignature("GraphEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + revokeCollectorThawingPeriod); vm.expectRevert(expectedError); escrow.revokeCollector(users.verifier); - vm.stopPrank(); } } \ No newline at end of file diff --git a/packages/horizon/test/escrow/deposit.t.sol b/packages/horizon/test/escrow/deposit.t.sol index 48574880e..8a83043e2 100644 --- a/packages/horizon/test/escrow/deposit.t.sol +++ b/packages/horizon/test/escrow/deposit.t.sol @@ -7,7 +7,7 @@ import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowDepositTest is GraphEscrowTest { - function testDeposit_Tokens(uint256 amount) public useGateway depositTokens(amount) { + function testDeposit_Tokens(uint256 amount) public useGateway useDeposit(amount) { (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); assertEq(indexerEscrowBalance, amount); } diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index 51400feac..a9d95460b 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -7,7 +7,7 @@ import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowThawTest is GraphEscrowTest { - function testThaw_Tokens(uint256 amount) public useGateway depositTokens(amount) { + function testThaw_Tokens(uint256 amount) public useGateway useDeposit(amount) { escrow.thaw(users.indexer, amount); (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.indexer); @@ -17,7 +17,7 @@ contract GraphEscrowThawTest is GraphEscrowTest { function testThaw_RevertWhen_InsufficientThawAmount( uint256 amount - ) public useGateway depositTokens(amount) { + ) public useGateway useDeposit(amount) { bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientThawAmount()"); vm.expectRevert(expectedError); escrow.thaw(users.indexer, 0); @@ -25,7 +25,7 @@ contract GraphEscrowThawTest is GraphEscrowTest { function testThaw_RevertWhen_InsufficientAmount( uint256 amount - ) public useGateway depositTokens(amount) { + ) public useGateway useDeposit(amount) { uint256 overAmount = amount + 1; bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", amount, overAmount); vm.expectRevert(expectedError); diff --git a/packages/horizon/test/escrow/withdraw.t.sol b/packages/horizon/test/escrow/withdraw.t.sol index 075a16a74..be47fea83 100644 --- a/packages/horizon/test/escrow/withdraw.t.sol +++ b/packages/horizon/test/escrow/withdraw.t.sol @@ -29,7 +29,7 @@ contract GraphEscrowWithdrawTest is GraphEscrowTest { assertEq(indexerEscrowBalance, amount - thawAmount); } - function testWithdraw_RevertWhen_NotThawing(uint256 amount) public useGateway depositTokens(amount) { + function testWithdraw_RevertWhen_NotThawing(uint256 amount) public useGateway useDeposit(amount) { bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); vm.expectRevert(expectedError); escrow.withdraw(users.indexer); diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 4bf00ff8d..74f255d9c 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -9,12 +9,10 @@ import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaki contract GraphPaymentsTest is HorizonStakingSharedTest { - function testCollect() public { - // Setup Staking - uint256 amount = 1000 ether; - createProvision(amount); - setDelegationFeeCut(0, 100000); - + function testCollect(uint256 amount, uint256 tokensDataService) public useProvision(amount, 0, 0) useDelegationFeeCut(0, 100000) { + uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; + uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; + vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegatoion); address escrowAddress = address(escrow); // Add tokens in escrow @@ -23,18 +21,18 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { approve(address(payments), amount); // Collect payments through GraphPayments - uint256 dataServiceCut = 30 ether; // 3% uint256 indexerPreviousBalance = token.balanceOf(users.indexer); - payments.collect(IGraphPayments.PaymentTypes.IndexingFee, users.indexer, amount, subgraphDataServiceAddress, dataServiceCut); + payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); vm.stopPrank(); uint256 indexerBalance = token.balanceOf(users.indexer); - assertEq(indexerBalance - indexerPreviousBalance, 860 ether); + uint256 expectedPayment = amount - tokensDataService - tokensProtocol - tokensDelegatoion; + assertEq(indexerBalance - indexerPreviousBalance, expectedPayment); uint256 dataServiceBalance = token.balanceOf(subgraphDataServiceAddress); - assertEq(dataServiceBalance, 30 ether); + assertEq(dataServiceBalance, tokensDataService); uint256 delegatorBalance = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(delegatorBalance, 100 ether); + assertEq(delegatorBalance, tokensDelegatoion); } } diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol index c5aec8aa2..c65032e9a 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol @@ -7,6 +7,18 @@ import { GraphBaseTest } from "../../GraphBase.t.sol"; abstract contract HorizonStakingSharedTest is GraphBaseTest { + modifier useProvision(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) { + vm.assume(tokens <= 10_000_000_000 ether); + vm.assume(tokens > 1e18); + _createProvision(tokens, maxVerifierCut, thawingPeriod); + _; + } + + modifier useDelegationFeeCut(uint256 paymentType, uint256 cut) { + _setDelegationFeeCut(paymentType, cut); + _; + } + /* Set Up */ function setUp() public virtual override { @@ -15,14 +27,22 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { /* Helpers */ - function createProvision(uint256 tokens) internal { + function _createProvision(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) internal { vm.startPrank(users.indexer); token.approve(address(staking), tokens); staking.stakeTo(users.indexer, tokens); - staking.provision(users.indexer, subgraphDataServiceAddress, tokens, 0, 0); + staking.provision( + users.indexer, + subgraphDataServiceAddress, + tokens, + maxVerifierCut, + thawingPeriod + ); + vm.stopPrank(); } - function setDelegationFeeCut(uint256 paymentType, uint256 cut) internal { + function _setDelegationFeeCut(uint256 paymentType, uint256 cut) internal { + vm.prank(users.indexer); staking.setDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType, cut); } } diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index 8e03271ec..ff7f77dfb 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -2,9 +2,11 @@ pragma solidity ^0.8.24; abstract contract Constants { + uint256 internal constant MAX_PPM = 1000000; // 100% in parts per million + uint256 internal constant delegationFeeCut = 100000; // 10% in parts per million // GraphEscrow parameters uint256 internal constant withdrawEscrowThawingPeriod = 60; - // GraphPayments parameters uint256 internal constant revokeCollectorThawingPeriod = 60; + // GraphPayments parameters uint256 internal constant protocolPaymentCut = 10000; } \ No newline at end of file From 31ae8e451d1890dd93e2a3ef1ceb4acb530d128f Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 21 May 2024 18:54:18 -0300 Subject: [PATCH 044/343] fix: approving collector for smaller allowance --- packages/horizon/contracts/payments/PaymentsEscrow.sol | 9 +++++++-- packages/horizon/test/escrow/collector.t.sol | 10 ++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index f8ac5ca37..345b4309d 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -84,8 +84,13 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // approve a data service to collect funds function approveCollector(address dataService, uint256 amount) external { - authorizedCollectors[msg.sender][dataService].authorized = true; - authorizedCollectors[msg.sender][dataService].amount = amount; + IGraphEscrow.Collector storage collector = authorizedCollectors[msg.sender][dataService]; + if (collector.amount > amount) { + revert GraphEscrowCollectorInsufficientAmount(collector.amount, amount); + } + + collector.authorized = true; + collector.amount = amount; emit AuthorizedCollector(msg.sender, dataService); } diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index be1524056..c87545b1a 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -15,6 +15,16 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { assertEq(thawEndTimestamp, 0); } + function testCollector_RevertWhen_ApprovingForSmallerAllowance( + uint256 amount, + uint256 smallerAmount + ) public useGateway useCollector(amount) { + vm.assume(smallerAmount < amount); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", amount, smallerAmount); + vm.expectRevert(expectedError); + escrow.approveCollector(users.verifier, smallerAmount); + } + // Collector thaw tests function testCollector_Thaw(uint256 amount) public useGateway useCollector(amount) { From 0c438c842ba2b3b30569fb2c9c32e4f5d9453901 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 22 May 2024 11:59:33 -0300 Subject: [PATCH 045/343] fix: type error --- packages/horizon/contracts/payments/PaymentsEscrow.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 345b4309d..f1c684887 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -84,7 +84,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // approve a data service to collect funds function approveCollector(address dataService, uint256 amount) external { - IGraphEscrow.Collector storage collector = authorizedCollectors[msg.sender][dataService]; + Collector storage collector = authorizedCollectors[msg.sender][dataService]; if (collector.amount > amount) { revert GraphEscrowCollectorInsufficientAmount(collector.amount, amount); } From 5247ebf93ecf04fc276e091f6c0f7175cce0d04f Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 22 May 2024 18:26:54 -0300 Subject: [PATCH 046/343] fix: rebase and fixes --- .../contracts/upgrades/GraphProxy.sol | 5 +- .../contracts/upgrades/GraphProxyAdmin.sol | 2 +- .../contracts/upgrades/GraphProxyStorage.sol | 2 +- .../contracts/payments/PaymentsEscrow.sol | 4 +- packages/horizon/test/GraphBase.t.sol | 57 ++++++++----------- packages/horizon/test/HorizonStaking.t.sol | 33 ----------- packages/horizon/test/HorizonStaking.ts | 38 ------------- 7 files changed, 28 insertions(+), 113 deletions(-) delete mode 100644 packages/horizon/test/HorizonStaking.t.sol delete mode 100644 packages/horizon/test/HorizonStaking.ts diff --git a/packages/contracts/contracts/upgrades/GraphProxy.sol b/packages/contracts/contracts/upgrades/GraphProxy.sol index 7d227b065..c5c01ca8f 100644 --- a/packages/contracts/contracts/upgrades/GraphProxy.sol +++ b/packages/contracts/contracts/upgrades/GraphProxy.sol @@ -1,8 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; - -import { Address } from "@openzeppelin/contracts/utils/Address.sol"; +pragma solidity >=0.6.12 <0.9.0; import { GraphProxyStorage } from "./GraphProxyStorage.sol"; @@ -160,7 +158,6 @@ contract GraphProxy is GraphProxyStorage, IGraphProxy { */ function _acceptUpgrade() internal { address _pendingImplementation = _getPendingImplementation(); - require(Address.isContract(_pendingImplementation), "Impl must be a contract"); require(_pendingImplementation != address(0), "Impl cannot be zero address"); require(msg.sender == _pendingImplementation, "Only pending implementation"); diff --git a/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol b/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol index 7d809d5ec..8fb735901 100644 --- a/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol +++ b/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; import { Governed } from "../governance/Governed.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxyStorage.sol b/packages/contracts/contracts/upgrades/GraphProxyStorage.sol index 05b922647..42e2a0545 100644 --- a/packages/contracts/contracts/upgrades/GraphProxyStorage.sol +++ b/packages/contracts/contracts/upgrades/GraphProxyStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity >=0.6.12 <0.9.0; /** * @title Graph Proxy Storage diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index f1c684887..9404190be 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -78,8 +78,8 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { revert GraphEscrowThawingPeriodTooLong(withdrawEscrowThawingPeriod, MAX_THAWING_PERIOD); } - revokeCollectorThawingPeriod = revokeCollectorThawingPeriod; - withdrawEscrowThawingPeriod = withdrawEscrowThawingPeriod; + REVOKE_COLLECTOR_THAWING_PERIOD = revokeCollectorThawingPeriod; + WITHDRAW_ESCROW_THAWING_PERIOD = withdrawEscrowThawingPeriod; } // approve a data service to collect funds diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 51a5b4d5a..f348ca3f0 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -3,6 +3,8 @@ pragma solidity ^0.8.24; import "forge-std/Test.sol"; +import { GraphProxyAdmin } from "@graphprotocol/contracts/contracts/upgrades/GraphProxyAdmin.sol"; +import { GraphProxy } from "@graphprotocol/contracts/contracts/upgrades/GraphProxy.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; import { PaymentsEscrow } from "contracts/payments/PaymentsEscrow.sol"; @@ -18,6 +20,7 @@ abstract contract GraphBaseTest is Test, Constants { /* Contracts */ + GraphProxyAdmin public proxyAdmin; Controller public controller; MockGRTToken public token; GraphPayments public payments; @@ -41,6 +44,7 @@ abstract contract GraphBaseTest is Test, Constants { function setUp() public virtual { // Deploy ERC20 token + vm.prank(users.deployer); token = new MockGRTToken(); // Setup Users @@ -68,10 +72,13 @@ abstract contract GraphBaseTest is Test, Constants { function deployProtocolContracts() private { vm.startPrank(users.governor); + proxyAdmin = new GraphProxyAdmin(); controller = new Controller(); - controller.setContractProxy(keccak256("GraphToken"), address(token)); vm.stopPrank(); + // Staking Proxy + vm.prank(users.deployer); + GraphProxy stakingProxy = new GraphProxy(address(0), address(proxyAdmin)); // GraphPayments predict address bytes32 saltPayments = keccak256("GraphPaymentsSalt"); @@ -101,39 +108,16 @@ abstract contract GraphBaseTest is Test, Constants { users.deployer ); - // HorizonStakingExtension predict address - bytes32 saltHorizonStakingExtension = keccak256("HorizonStakingExtensionSalt"); - bytes32 horizonStakingExtensionHash = keccak256(bytes.concat( - vm.getCode("HorizonStakingExtension.sol:HorizonStakingExtension"), - abi.encode(address(controller), subgraphDataServiceAddress) - )); - address predictedAddressHorizonStakingExtension = vm.computeCreate2Address( - saltHorizonStakingExtension, - horizonStakingExtensionHash, - users.deployer - ); - - // HorizonStaking predict address - bytes32 saltHorizonStaking = keccak256("saltHorizonStaking"); - bytes32 horizonStakingHash = keccak256(bytes.concat( - vm.getCode("HorizonStaking.sol:HorizonStaking"), - abi.encode( - address(controller), - predictedAddressHorizonStakingExtension, - subgraphDataServiceAddress - ) - )); - address predictedAddressHorizonStaking = vm.computeCreate2Address( - saltHorizonStaking, - horizonStakingHash, - users.deployer - ); - // Setup controller vm.startPrank(users.governor); - controller.setContractProxy(keccak256("GraphEscrow"), predictedAddressEscrow); + controller.setContractProxy(keccak256("GraphToken"), address(token)); + controller.setContractProxy(keccak256("PaymentsEscrow"), predictedAddressEscrow); controller.setContractProxy(keccak256("GraphPayments"), predictedPaymentsAddress); - controller.setContractProxy(keccak256("Staking"), address(predictedAddressHorizonStaking)); + controller.setContractProxy(keccak256("Staking"), address(stakingProxy)); + controller.setContractProxy(keccak256("EpochManager"), makeAddr("EpochManager")); + controller.setContractProxy(keccak256("RewardsManager"), makeAddr("RewardsManager")); + controller.setContractProxy(keccak256("Curation"), makeAddr("Curation")); + controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); vm.stopPrank(); vm.startPrank(users.deployer); @@ -146,16 +130,21 @@ abstract contract GraphBaseTest is Test, Constants { revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod ); - stakingExtension = new HorizonStakingExtension{salt: saltHorizonStakingExtension}( + stakingExtension = new HorizonStakingExtension( address(controller), subgraphDataServiceAddress ); - stakingBase = new HorizonStaking{salt: saltHorizonStaking}( + stakingBase = new HorizonStaking( address(controller), address(stakingExtension), subgraphDataServiceAddress ); - staking = IHorizonStaking(address(stakingBase)); + vm.stopPrank(); + + vm.startPrank(users.governor); + proxyAdmin.upgrade(stakingProxy, address(stakingBase)); + proxyAdmin.acceptProxy(stakingBase, stakingProxy); + staking = IHorizonStaking(address(stakingProxy)); vm.stopPrank(); } diff --git a/packages/horizon/test/HorizonStaking.t.sol b/packages/horizon/test/HorizonStaking.t.sol deleted file mode 100644 index 55088f0fe..000000000 --- a/packages/horizon/test/HorizonStaking.t.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.24; - -import "forge-std/Test.sol"; -import "forge-std/console.sol"; -import { HorizonStaking } from "../contracts/staking/HorizonStaking.sol"; -import { ControllerMock } from "../contracts/mocks/ControllerMock.sol"; -import { HorizonStakingExtension } from "../contracts/staking/HorizonStakingExtension.sol"; -import { ExponentialRebates } from "../contracts/staking/libraries/ExponentialRebates.sol"; -import { IHorizonStaking } from "../contracts/interfaces/IHorizonStaking.sol"; - -contract HorizonStakingTest is Test { - HorizonStakingExtension ext; - IHorizonStaking staking; - ControllerMock controller; - - function setUp() public { - console.log("Deploying Controller mock"); - controller = new ControllerMock(address(0x1)); - console.log("Deploying HorizonStaking"); - ext = new HorizonStakingExtension(address(controller), address(0x1)); - staking = IHorizonStaking(address(new HorizonStaking(address(controller), address(ext), address(0x1)))); - } - - function test_SetGlobalOperator() public { - address operator = address(0x1337); - address dataService = address(0x1338); - address serviceProvider = address(this); - - staking.setOperator(operator, dataService, true); - assertTrue(staking.isAuthorized(operator, serviceProvider, dataService)); - } -} diff --git a/packages/horizon/test/HorizonStaking.ts b/packages/horizon/test/HorizonStaking.ts deleted file mode 100644 index 28eb281f7..000000000 --- a/packages/horizon/test/HorizonStaking.ts +++ /dev/null @@ -1,38 +0,0 @@ -import hardhat from 'hardhat' - -import { expect } from 'chai' -import { loadFixture } from '@nomicfoundation/hardhat-toolbox/network-helpers' -import { ZeroAddress } from 'ethers' -import { IHorizonStaking } from '../typechain-types' - -const ethers = hardhat.ethers - -describe('HorizonStaking', function () { - async function deployFixture() { - const [owner] = await ethers.getSigners() - const ControllerMock = await ethers.getContractFactory('ControllerMock') - const controller = await ControllerMock.deploy(owner.address) - await controller.waitForDeployment() - const ExponentialRebates = await ethers.getContractFactory('ExponentialRebates') - const exponentialRebates = await ExponentialRebates.deploy() - await exponentialRebates.waitForDeployment() - const HorizonStakingExtension = await ethers.getContractFactory('HorizonStakingExtension', { libraries: { ExponentialRebates: exponentialRebates.target } }) - const horizonStakingExtension = await HorizonStakingExtension.deploy(controller.target, ZeroAddress) - await horizonStakingExtension.waitForDeployment() - const HorizonStaking = await ethers.getContractFactory('HorizonStaking') - const horizonStakingContract = await HorizonStaking.deploy(controller.target, horizonStakingExtension.target, ZeroAddress) - await horizonStakingContract.waitForDeployment() - const horizonStaking = (await ethers.getContractAt('IHorizonStaking', horizonStakingContract.target)) as unknown as IHorizonStaking - return { horizonStaking, owner } - } - - describe('setOperator', function () { - it('adds an operator', async function () { - const { horizonStaking, owner } = await loadFixture(deployFixture) - const verifier = ethers.Wallet.createRandom().address - const operator = ethers.Wallet.createRandom().address - await horizonStaking.connect(owner).setOperator(operator, verifier, true) - expect(await horizonStaking.isAuthorized(operator, owner, verifier)).to.be.true - }) - }) -}) From 8947c0780f8c11d800986a4e45095c1745db597e Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 22 May 2024 18:39:34 -0300 Subject: [PATCH 047/343] fix: more rebase fixes --- packages/horizon/test/GraphBase.t.sol | 2 ++ packages/horizon/test/escrow/collect.t.sol | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index f348ca3f0..3055c9245 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -118,6 +118,8 @@ abstract contract GraphBaseTest is Test, Constants { controller.setContractProxy(keccak256("RewardsManager"), makeAddr("RewardsManager")); controller.setContractProxy(keccak256("Curation"), makeAddr("Curation")); controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); + controller.setContractProxy(keccak256("BridgeEscrow"), makeAddr("BridgeEscrow")); + controller.setContractProxy(keccak256("GraphProxyAdmin"), makeAddr("GraphProxyAdmin")); vm.stopPrank(); vm.startPrank(users.deployer); diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index db7f549e8..4c66cfc0c 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -20,7 +20,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { uint256 indexerPreviousBalance = token.balanceOf(users.indexer); vm.prank(users.verifier); - escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); + escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); uint256 indexerBalance = token.balanceOf(users.indexer); uint256 indexerExpectedPayment = amount - tokensDataService - tokensProtocol - tokensDelegatoion; @@ -33,7 +33,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { uint256 dataServiceCut = 30000; // 3% bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorNotAuthorized(address,address)", users.gateway, users.verifier); vm.expectRevert(expectedError); - escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, dataServiceCut); + escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, dataServiceCut); vm.stopPrank(); } @@ -46,7 +46,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { changePrank(users.verifier); bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", insufficientAmount, amount); vm.expectRevert(expectedError); - escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); + escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); } function testCollect_RevertWhen_SenderHasInsufficientAmountInEscrow( @@ -58,7 +58,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { changePrank(users.verifier); bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", insufficientAmount, amount); vm.expectRevert(expectedError); - escrow.collect(IGraphPayments.PaymentTypes.IndexingFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); + escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); vm.stopPrank(); } } \ No newline at end of file From abbadf67ba29e2eb24fd0cd5adb01d8cb718a240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 11:06:24 -0300 Subject: [PATCH 048/343] feat: add onlyValidProvision modifier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../utilities/ProvisionManager.sol | 7 ++++ .../contracts/SubgraphService.sol | 37 +++++++++++++------ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 57e14270f..54a24b9bc 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -23,6 +23,13 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage _; } + modifier onlyValidProvision(address serviceProvider) virtual { + _checkProvisionTokens(serviceProvider); + _checkProvisionDelegationRatio(serviceProvider); + _checkProvisionParameters(serviceProvider, false); + _; + } + constructor() { minimumProvisionTokens = type(uint256).min; maximumProvisionTokens = type(uint256).max; diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 3836b7e57..2f8a504fb 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -55,6 +55,15 @@ contract SubgraphService is _; } + /** + * @dev Strict delegation ratio not enforced. + */ + modifier onlyValidProvision(address indexer) override { + _checkProvisionTokens(indexer); + _checkProvisionParameters(indexer, false); + _; + } + constructor( address graphController, address disputeManager, @@ -75,7 +84,7 @@ contract SubgraphService is function register( address indexer, bytes calldata data - ) external override onlyProvisionAuthorized(indexer) whenNotPaused { + ) external override onlyProvisionAuthorized(indexer) onlyValidProvision(indexer) whenNotPaused { (string memory url, string memory geohash, address rewardsDestination) = abi.decode( data, (string, string, address) @@ -98,10 +107,6 @@ contract SubgraphService is _setRewardsDestination(indexer, rewardsDestination); } - // Ensure the service provider created a valid provision for the data service - _checkProvisionParameters(indexer, false); - _checkProvisionTokens(indexer); - emit ServiceProviderRegistered(indexer); } @@ -117,8 +122,14 @@ contract SubgraphService is function startService( address indexer, bytes calldata data - ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { - _checkProvisionTokens(indexer); + ) + external + override + onlyProvisionAuthorized(indexer) + onlyValidProvision(indexer) + onlyRegisteredIndexer(indexer) + whenNotPaused + { (bytes32 subgraphDeploymentId, uint256 tokens, address allocationId, bytes memory allocationProof) = abi.decode( data, (bytes32, uint256, address, bytes) @@ -140,8 +151,13 @@ contract SubgraphService is address indexer, address allocationId, uint256 tokens - ) external onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { - _checkProvisionTokens(indexer); + ) + external + onlyProvisionAuthorized(indexer) + onlyValidProvision(indexer) + onlyRegisteredIndexer(indexer) + whenNotPaused + { _resizeAllocation(allocationId, tokens, maximumDelegationRatio); } @@ -149,8 +165,7 @@ contract SubgraphService is address indexer, IGraphPayments.PaymentTypes paymentType, bytes calldata data - ) external override onlyRegisteredIndexer(indexer) whenNotPaused { - _checkProvisionTokens(indexer); + ) external override onlyValidProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { uint256 paymentCollected = 0; if (paymentType == IGraphPayments.PaymentTypes.QueryFee) { From 3b39aa5133abfa4416c8cc6cfaaa8ee258f31f55 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 23 May 2024 11:31:22 -0300 Subject: [PATCH 049/343] fix: renamed error, move code to trigger revert --- .../contracts/payments/GraphPayments.sol | 22 ++++++++------- .../horizon/test/payments/GraphPayments.t.sol | 28 ++++++++++++++++++- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 8fddc6a07..c5818ca0c 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -30,7 +30,7 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora error GraphPaymentsNotThawing(); error GraphPaymentsStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); error GraphPaymentsCollectorNotAuthorized(address sender, address dataService); - error GraphPaymentsCollectorInsufficientAmount(uint256 available, uint256 required); + error GraphPaymentsInsufficientAmount(uint256 available, uint256 required); // -- Events -- @@ -54,25 +54,27 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora ) external { _graphToken().pullTokens(msg.sender, tokens); - // Pay protocol cut + // Calculate cuts uint256 tokensProtocol = (tokens * PROTOCOL_PAYMENT_CUT) / MAX_PPM; + uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, uint8(paymentType)); + uint256 tokensDelegationPool = (tokens * delegationFeeCut) / MAX_PPM; + uint256 totalCut = tokensProtocol + tokensDataService + tokensDelegationPool; + if (totalCut > tokens) { + revert GraphPaymentsInsufficientAmount(tokens, totalCut); + } + + // Pay protocol cut _graphToken().burnTokens(tokensProtocol); // Pay data service cut _graphToken().pushTokens(dataService, tokensDataService); - // Get delegation cut - uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, uint8(paymentType)); - uint256 tokensDelegationPool = (tokens * delegationFeeCut) / MAX_PPM; + // Pay delegators if (tokensDelegationPool > 0) { _graphStaking().addToDelegationPool(receiver, dataService, tokensDelegationPool); } - // Pay the rest to the receiver - uint256 totalCut = tokensProtocol + tokensDataService + tokensDelegationPool; - if (totalCut > tokens) { - revert GraphPaymentsCollectorInsufficientAmount(tokens, totalCut); - } + // Pay receiver uint256 tokensReceiverRemaining = tokens - totalCut; _graphToken().pushTokens(receiver, tokensReceiverRemaining); diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 74f255d9c..519f6e105 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -9,7 +9,10 @@ import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaki contract GraphPaymentsTest is HorizonStakingSharedTest { - function testCollect(uint256 amount, uint256 tokensDataService) public useProvision(amount, 0, 0) useDelegationFeeCut(0, 100000) { + function testCollect( + uint256 amount, + uint256 tokensDataService + ) public useProvision(amount, 0, 0) useDelegationFeeCut(0, delegationFeeCut) { uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegatoion); @@ -35,4 +38,27 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { uint256 delegatorBalance = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(delegatorBalance, tokensDelegatoion); } + + function testCollect_RevertWhen_InsufficientAmount( + uint256 amount, + uint256 tokensDataService + ) public useProvision(amount, 0, 0) useDelegationFeeCut(0, delegationFeeCut) { + vm.assume(tokensDataService <= 10_000_000_000 ether); + vm.assume(tokensDataService > amount); + + address escrowAddress = address(escrow); + mint(escrowAddress, amount); + vm.startPrank(escrowAddress); + approve(address(payments), amount); + + bytes memory expectedError; + { + uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; + uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; + uint256 requiredAmount = tokensDataService + tokensProtocol + tokensDelegatoion; + expectedError = abi.encodeWithSignature("GraphPaymentsInsufficientAmount(uint256,uint256)", amount, requiredAmount); + } + vm.expectRevert(expectedError); + payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); + } } From 3a66efa829d081494b2ecb69d9a61f727d4cc8c0 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 23 May 2024 11:34:33 -0300 Subject: [PATCH 050/343] fix: removed unwanted import --- packages/horizon/contracts/data-service/GraphDirectory.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index 805136db1..f05d9db66 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -16,7 +16,6 @@ import { IGraphProxyAdmin } from "@graphprotocol/contracts/contracts/upgrades/IG import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; -import "forge-std/console.sol"; /** * @title GraphDirectory contract * @notice This contract is meant to be inherited by other contracts that From ac5546d2c1e7fba15fc5cb0892facf814c770b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 12:15:34 -0300 Subject: [PATCH 051/343] chore: enforce consistent variable naming MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - cut: for PPM percentages - tokens: for token amounts Signed-off-by: Tomás Migone --- .../extensions/DataServiceRescuable.sol | 22 ++--- .../extensions/IDataServiceRescuable.sol | 4 +- .../contracts/interfaces/IGraphToken.sol | 6 +- .../interfaces/IHorizonStakingBase.sol | 6 +- .../contracts/interfaces/IPaymentsEscrow.sol | 8 +- .../contracts/libraries/TokenUtils.sol | 24 ++--- .../horizon/contracts/mocks/MockGRTToken.sol | 10 +-- .../contracts/payments/GraphPayments.sol | 4 +- .../contracts/payments/PaymentsEscrow.sol | 67 +++++++------- .../payments/collectors/TAPCollector.sol | 4 +- .../contracts/staking/HorizonStaking.sol | 20 ++--- .../staking/HorizonStakingExtension.sol | 30 +++---- .../staking/StakingBackwardsCompatibility.sol | 18 ++-- packages/horizon/test/escrow/collect.t.sol | 4 +- packages/horizon/test/escrow/collector.t.sol | 2 +- packages/horizon/test/escrow/thaw.t.sol | 4 +- .../horizon/test/payments/GraphPayments.t.sol | 2 +- .../contracts/DisputeManager.sol | 88 +++++++++---------- .../contracts/DisputeManagerStorage.sol | 4 +- .../contracts/SubgraphService.sol | 11 ++- .../contracts/interfaces/IDisputeManager.sol | 6 +- .../contracts/interfaces/ISubgraphService.sol | 4 +- .../test/DisputeManager.t.sol | 1 - .../test/mocks/MockHorizonStaking.sol | 8 +- .../test/mocks/MockRewardsManager.sol | 26 +++--- 25 files changed, 187 insertions(+), 196 deletions(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index b345a8683..45a1cd4f9 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -21,7 +21,7 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { /** * @dev Tokens rescued by the user */ - event TokensRescued(address indexed from, address indexed to, uint256 amount); + event TokensRescued(address indexed from, address indexed to, uint256 tokens); event RescuerSet(address indexed account, bool allowed); error DataServiceRescuableCannotRescueZero(); @@ -34,12 +34,12 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { _; } - function rescueGRT(address to, uint256 amount) external onlyRescuer { - _rescueTokens(to, address(_graphToken()), amount); + function rescueGRT(address to, uint256 tokens) external onlyRescuer { + _rescueTokens(to, address(_graphToken()), tokens); } - function rescueETH(address payable to, uint256 amount) external onlyRescuer { - _rescueTokens(to, Denominations.NATIVE_TOKEN, amount); + function rescueETH(address payable to, uint256 tokens) external onlyRescuer { + _rescueTokens(to, Denominations.NATIVE_TOKEN, tokens); } function _setRescuer(address _rescuer, bool _allowed) internal { @@ -51,14 +51,14 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { * @dev Allows rescuing tokens sent to this contract * @param _to Destination address to send the tokens * @param _token Address of the token being rescued - * @param _amount Amount of tokens to pull + * @param _tokens Amount of tokens to pull */ - function _rescueTokens(address _to, address _token, uint256 _amount) internal { - if (_amount == 0) revert DataServiceRescuableCannotRescueZero(); + function _rescueTokens(address _to, address _token, uint256 _tokens) internal { + if (_tokens == 0) revert DataServiceRescuableCannotRescueZero(); - if (Denominations.isNativeToken(_token)) payable(_to).transfer(_amount); - else SafeERC20.safeTransfer(IERC20(_token), _to, _amount); + if (Denominations.isNativeToken(_token)) payable(_to).transfer(_tokens); + else SafeERC20.safeTransfer(IERC20(_token), _to, _tokens); - emit TokensRescued(msg.sender, _to, _amount); + emit TokensRescued(msg.sender, _to, _tokens); } } diff --git a/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol index ee379315c..18eee452d 100644 --- a/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol @@ -4,6 +4,6 @@ pragma solidity ^0.8.24; import { IDataService } from "../../interfaces/IDataService.sol"; interface IDataServiceRescuable is IDataService { - function rescueGRT(address to, uint256 amount) external; - function rescueETH(address payable to, uint256 amount) external; + function rescueGRT(address to, uint256 tokens) external; + function rescueETH(address payable to, uint256 tokens) external; } diff --git a/packages/horizon/contracts/interfaces/IGraphToken.sol b/packages/horizon/contracts/interfaces/IGraphToken.sol index d00e81fc1..cb0b6cae6 100644 --- a/packages/horizon/contracts/interfaces/IGraphToken.sol +++ b/packages/horizon/contracts/interfaces/IGraphToken.sol @@ -7,11 +7,11 @@ import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IGraphToken is IERC20 { // -- Mint and Burn -- - function burn(uint256 amount) external; + function burn(uint256 tokens) external; - function burnFrom(address from, uint256 amount) external; + function burnFrom(address from, uint256 tokens) external; - function mint(address to, uint256 amount) external; + function mint(address to, uint256 tokens) external; // -- Mint Admin -- diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol index 41f1ae1df..3cef3e193 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol @@ -64,7 +64,7 @@ interface IHorizonStakingBase is IHorizonStakingTypes { event DelegationSlashingSkipped(address indexed serviceProvider, address indexed verifier, uint256 tokens); - event VerifierCutSent( + event VerifierTokensSent( address indexed serviceProvider, address indexed verifier, address indexed destination, @@ -181,8 +181,8 @@ interface IHorizonStakingBase is IHorizonStakingTypes { function slash( address serviceProvider, uint256 tokens, - uint256 verifierCutAmount, - address verifierCutDestination + uint256 tokensVerifier, + address verifierDestination ) external; /** diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index cd7665e73..de3f0af06 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -6,22 +6,22 @@ import { IGraphPayments } from "./IGraphPayments.sol"; interface IPaymentsEscrow { struct EscrowAccount { uint256 balance; // Total escrow balance for a sender-receiver pair - uint256 amountThawing; // Amount of escrow currently being thawed + uint256 tokensThawing; // Amount of escrow currently being thawed uint256 thawEndTimestamp; // Timestamp at which thawing period ends (zero if not thawing) } // Collector struct Collector { bool authorized; - uint256 amount; + uint256 allowance; uint256 thawEndTimestamp; } // Deposit funds into the escrow for a receiver - function deposit(address receiver, uint256 amount) external; + function deposit(address receiver, uint256 tokens) external; // Requests to thaw a specific amount of escrow from a receiver's escrow account - function thaw(address receiver, uint256 amount) external; + function thaw(address receiver, uint256 tokens) external; // Withdraws all thawed escrow from a receiver's escrow account function withdraw(address receiver) external; diff --git a/packages/horizon/contracts/libraries/TokenUtils.sol b/packages/horizon/contracts/libraries/TokenUtils.sol index 07b267451..30903d6ae 100644 --- a/packages/horizon/contracts/libraries/TokenUtils.sol +++ b/packages/horizon/contracts/libraries/TokenUtils.sol @@ -15,11 +15,11 @@ library TokenUtils { * @dev Pull tokens from an address to this contract. * @param _graphToken Token to transfer * @param _from Address sending the tokens - * @param _amount Amount of tokens to transfer + * @param _tokens Amount of tokens to transfer */ - function pullTokens(IGraphToken _graphToken, address _from, uint256 _amount) internal { - if (_amount > 0) { - require(_graphToken.transferFrom(_from, address(this), _amount), "!transfer"); + function pullTokens(IGraphToken _graphToken, address _from, uint256 _tokens) internal { + if (_tokens > 0) { + require(_graphToken.transferFrom(_from, address(this), _tokens), "!transfer"); } } @@ -27,22 +27,22 @@ library TokenUtils { * @dev Push tokens from this contract to a receiving address. * @param _graphToken Token to transfer * @param _to Address receiving the tokens - * @param _amount Amount of tokens to transfer + * @param _tokens Amount of tokens to transfer */ - function pushTokens(IGraphToken _graphToken, address _to, uint256 _amount) internal { - if (_amount > 0) { - require(_graphToken.transfer(_to, _amount), "!transfer"); + function pushTokens(IGraphToken _graphToken, address _to, uint256 _tokens) internal { + if (_tokens > 0) { + require(_graphToken.transfer(_to, _tokens), "!transfer"); } } /** * @dev Burn tokens held by this contract. * @param _graphToken Token to burn - * @param _amount Amount of tokens to burn + * @param _tokens Amount of tokens to burn */ - function burnTokens(IGraphToken _graphToken, uint256 _amount) internal { - if (_amount > 0) { - _graphToken.burn(_amount); + function burnTokens(IGraphToken _graphToken, uint256 _tokens) internal { + if (_tokens > 0) { + _graphToken.burn(_tokens); } } } diff --git a/packages/horizon/contracts/mocks/MockGRTToken.sol b/packages/horizon/contracts/mocks/MockGRTToken.sol index 1212f3e70..7d7e1cc9e 100644 --- a/packages/horizon/contracts/mocks/MockGRTToken.sol +++ b/packages/horizon/contracts/mocks/MockGRTToken.sol @@ -7,10 +7,10 @@ import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToke contract MockGRTToken is ERC20, IGraphToken { constructor() ERC20("Graph Token", "GRT") {} - function burn(uint256 amount) external {} + function burn(uint256 tokens) external {} - function burnFrom(address from, uint256 amount) external { - _burn(from, amount); + function burnFrom(address from, uint256 tokens) external { + _burn(from, tokens); } // -- Mint Admin -- @@ -41,7 +41,7 @@ contract MockGRTToken is ERC20, IGraphToken { function isMinter(address account) external view returns (bool) {} - function mint(address to, uint256 amount) public { - _mint(to, amount); + function mint(address to, uint256 tokens) public { + _mint(to, tokens); } } diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index c5818ca0c..84e4fabd2 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -30,7 +30,7 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora error GraphPaymentsNotThawing(); error GraphPaymentsStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); error GraphPaymentsCollectorNotAuthorized(address sender, address dataService); - error GraphPaymentsInsufficientAmount(uint256 available, uint256 required); + error GraphPaymentsInsufficientTokens(uint256 available, uint256 required); // -- Events -- @@ -60,7 +60,7 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora uint256 tokensDelegationPool = (tokens * delegationFeeCut) / MAX_PPM; uint256 totalCut = tokensProtocol + tokensDataService + tokensDelegationPool; if (totalCut > tokens) { - revert GraphPaymentsInsufficientAmount(tokens, totalCut); + revert GraphPaymentsInsufficientTokens(tokens, totalCut); } // Pay protocol cut diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 9404190be..6d7e82d11 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -43,7 +43,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { address indexed payer, address indexed receiver, uint256 tokens, - uint256 totalAmountThawing, + uint256 totalTokensThawing, uint256 thawEndTimestamp ); event Withdraw(address indexed payer, address indexed receiver, uint256 tokens); @@ -53,14 +53,13 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { error GraphEscrowNotGraphPayments(); error GraphEscrowInputsLengthMismatch(); - error GraphEscrowInsufficientThawAmount(); - error GraphEscrowInsufficientAmount(uint256 available, uint256 required); + error GraphEscrowInsufficientTokensThawing(); + error GraphEscrowInsufficientBalance(uint256 available, uint256 required); error GraphEscrowNotThawing(); error GraphEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); error GraphEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); error GraphEscrowCollectorNotAuthorized(address sender, address dataService); - error GraphEscrowCollectorInsufficientAmount(uint256 available, uint256 required); - + error GraphEscrowInsufficientAllowance(uint256 available, uint256 required); error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens); // -- Constructor -- @@ -83,14 +82,14 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // approve a data service to collect funds - function approveCollector(address dataService, uint256 amount) external { + function approveCollector(address dataService, uint256 tokens) external { Collector storage collector = authorizedCollectors[msg.sender][dataService]; - if (collector.amount > amount) { - revert GraphEscrowCollectorInsufficientAmount(collector.amount, amount); + if (collector.allowance > tokens) { + revert GraphEscrowInsufficientAllowance(collector.allowance, tokens); } collector.authorized = true; - collector.amount = amount; + collector.allowance = tokens; emit AuthorizedCollector(msg.sender, dataService); } @@ -129,39 +128,39 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // Deposit funds into the escrow for a receiver - function deposit(address receiver, uint256 amount) external { - escrowAccounts[msg.sender][receiver].balance += amount; - _graphToken().pullTokens(msg.sender, amount); - emit Deposit(msg.sender, receiver, amount); + function deposit(address receiver, uint256 tokens) external { + escrowAccounts[msg.sender][receiver].balance += tokens; + _graphToken().pullTokens(msg.sender, tokens); + emit Deposit(msg.sender, receiver, tokens); } // Requests to thaw a specific amount of escrow from a receiver's escrow account - function thaw(address receiver, uint256 amount) external { + function thaw(address receiver, uint256 tokens) external { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; - if (amount == 0) { + if (tokens == 0) { // if amount thawing is zero and requested amount is zero this is an invalid request. // otherwise if amount thawing is greater than zero and requested amount is zero this // is a cancel thaw request. - if (account.amountThawing == 0) { - revert GraphEscrowInsufficientThawAmount(); + if (account.tokensThawing == 0) { + revert GraphEscrowInsufficientTokensThawing(); } - account.amountThawing = 0; + account.tokensThawing = 0; account.thawEndTimestamp = 0; emit CancelThaw(msg.sender, receiver); return; } // Check if the escrow balance is sufficient - if (account.balance < amount) { - revert GraphEscrowInsufficientAmount({ available: account.balance, required: amount }); + if (account.balance < tokens) { + revert GraphEscrowInsufficientBalance(account.balance, tokens); } // Set amount to thaw - account.amountThawing = amount; + account.tokensThawing = tokens; // Set when the thaw is complete (thawing period number of seconds after current timestamp) account.thawEndTimestamp = block.timestamp + WITHDRAW_ESCROW_THAWING_PERIOD; - emit Thaw(msg.sender, receiver, amount, account.amountThawing, account.thawEndTimestamp); + emit Thaw(msg.sender, receiver, tokens, account.tokensThawing, account.thawEndTimestamp); } // Withdraws all thawed escrow from a receiver's escrow account @@ -179,13 +178,13 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // Amount is the minimum between the amount being thawed and the actual balance - uint256 amount = account.amountThawing > account.balance ? account.balance : account.amountThawing; + uint256 tokens = account.tokensThawing > account.balance ? account.balance : account.tokensThawing; - account.balance -= amount; // Reduce the balance by the withdrawn amount (no underflow risk) - account.amountThawing = 0; + account.balance -= tokens; // Reduce the balance by the withdrawn amount (no underflow risk) + account.tokensThawing = 0; account.thawEndTimestamp = 0; - _graphToken().pushTokens(msg.sender, amount); - emit Withdraw(msg.sender, receiver, amount); + _graphToken().pushTokens(msg.sender, tokens); + emit Withdraw(msg.sender, receiver, tokens); } // Collect from escrow for a receiver using sender's deposit @@ -204,18 +203,18 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { revert GraphEscrowCollectorNotAuthorized(payer, msg.sender); } - if (collector.amount < tokens) { - revert GraphEscrowCollectorInsufficientAmount(collector.amount, tokens); + if (collector.allowance < tokens) { + revert GraphEscrowInsufficientAllowance(collector.allowance, tokens); } // Reduce amount from approved collector - collector.amount -= tokens; + collector.allowance -= tokens; // Collect tokens from GraphEscrow up to amount available EscrowAccount storage account = escrowAccounts[payer][receiver]; - uint256 availableAmount = account.balance - account.amountThawing; - if (availableAmount < tokens) { - revert GraphEscrowInsufficientAmount(availableAmount, tokens); + uint256 availableTokens = account.balance - account.tokensThawing; + if (availableTokens < tokens) { + revert GraphEscrowInsufficientBalance(availableTokens, tokens); } account.balance -= tokens; @@ -237,6 +236,6 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // Get the balance of a sender-receiver pair function getBalance(address payer, address receiver) external view returns (uint256) { EscrowAccount storage account = escrowAccounts[payer][receiver]; - return account.balance - account.amountThawing; + return account.balance - account.tokensThawing; } } diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index f0fb31077..1a0a66ab7 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -53,7 +53,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. */ function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external returns (uint256) { - (SignedRAV memory signedRAV, uint256 percentageDataService) = abi.decode(data, (SignedRAV, uint256)); + (SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(data, (SignedRAV, uint256)); if (signedRAV.rav.dataService != msg.sender) { revert TAPCollectorCallerNotDataService(msg.sender, signedRAV.rav.dataService); @@ -70,7 +70,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { } uint256 tokensToCollect = tokensRAV - tokensAlreadyCollected; - uint256 tokensDataService = tokensToCollect.mulPPM(percentageDataService); + uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); if (tokensToCollect > 0) { _graphPaymentsEscrow().collect( diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 95c297ffd..6aeb5d19a 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -59,7 +59,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV error HorizonStakingInsufficientCapacityForLegacyAllocations(); error HorizonStakingTooManyThawRequests(); error HorizonStakingInsufficientTokens(uint256 expected, uint256 available); - error HorizonStakingSlippageProtection(uint256 minExpectedAmount, uint256 actualAmount); + error HorizonStakingSlippageProtection(uint256 minExpectedShares, uint256 actualShares); modifier onlyAuthorized(address serviceProvider, address verifier) { if (!isAuthorized(msg.sender, serviceProvider, verifier)) { @@ -375,14 +375,14 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV * provider's provisioned self-stake, the delegation slashing is skipped without reverting. * @param serviceProvider The service provider to slash * @param tokens The amount of tokens to slash - * @param verifierCutAmount The amount of tokens to transfer instead of burning - * @param verifierCutDestination The address to transfer the verifier cut to + * @param tokensVerifier The amount of tokens to transfer instead of burning + * @param verifierDestination The address to transfer the verifier cut to */ function slash( address serviceProvider, uint256 tokens, - uint256 verifierCutAmount, - address verifierCutDestination + uint256 tokensVerifier, + address verifierDestination ) external override notPartialPaused { address verifier = msg.sender; Provision storage prov = _provisions[serviceProvider][verifier]; @@ -393,12 +393,12 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV uint256 tokensToSlash = tokens; uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); if (providerTokensSlashed > 0) { - require((prov.tokens * prov.maxVerifierCut) / MAX_PPM >= verifierCutAmount, "verifier cut too high"); - if (verifierCutAmount > 0) { - _graphToken().pushTokens(verifierCutDestination, verifierCutAmount); - emit VerifierCutSent(serviceProvider, verifier, verifierCutDestination, verifierCutAmount); + require((prov.tokens * prov.maxVerifierCut) / MAX_PPM >= tokensVerifier, "verifier cut too high"); + if (tokensVerifier > 0) { + _graphToken().pushTokens(verifierDestination, tokensVerifier); + emit VerifierTokensSent(serviceProvider, verifier, verifierDestination, tokensVerifier); } - _graphToken().burnTokens(providerTokensSlashed - verifierCutAmount); + _graphToken().burnTokens(providerTokensSlashed - tokensVerifier); uint256 provisionFractionSlashed = (providerTokensSlashed * FIXED_POINT_PRECISION) / prov.tokens; // TODO check for rounding issues prov.tokensThawing = diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 7142fbd31..e7b0e744d 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -71,12 +71,12 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas * or a delegator's delegation. * See L1MessageCodes in IL2Staking for the supported messages. * @param from Token sender in L1 - * @param amount Amount of tokens that were transferred + * @param tokens Amount of tokens that were transferred * @param data ABI-encoded callhook data which must include a uint8 code and either a ReceiveIndexerStakeData or ReceiveDelegationData struct. */ function onTokenTransfer( address from, - uint256 amount, + uint256 tokens, bytes calldata data ) external override notPartialPaused onlyL2Gateway { require(from == _counterpartStakingAddress, "ONLY_L1_STAKING_THROUGH_BRIDGE"); @@ -87,13 +87,13 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas functionData, (IL2StakingTypes.ReceiveIndexerStakeData) ); - _receiveIndexerStake(amount, indexerData); + _receiveIndexerStake(tokens, indexerData); } else if (code == uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE)) { IL2StakingTypes.ReceiveDelegationData memory delegationData = abi.decode( functionData, (IL2StakingTypes.ReceiveDelegationData) ); - _receiveDelegation(amount, delegationData); + _receiveDelegation(tokens, delegationData); } else { revert("INVALID_CODE"); } @@ -210,16 +210,16 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas * @dev Receive an Indexer's stake from L1. * The specified amount is added to the indexer's stake; the indexer's * address is specified in the _indexerData struct. - * @param _amount Amount of tokens that were transferred + * @param _tokens Amount of tokens that were transferred * @param _indexerData struct containing the indexer's address */ function _receiveIndexerStake( - uint256 _amount, + uint256 _tokens, IL2StakingTypes.ReceiveIndexerStakeData memory _indexerData ) internal { address indexer = _indexerData.indexer; // Deposit tokens into the indexer stake - _stake(indexer, _amount); + _stake(indexer, _tokens); } /** @@ -227,11 +227,11 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas * The specified amount is added to the delegator's delegation; the delegator's * address and the indexer's address are specified in the _delegationData struct. * Note that no delegation tax is applied here. - * @param _amount Amount of tokens that were transferred + * @param _tokens Amount of tokens that were transferred * @param _delegationData struct containing the delegator's address and the indexer's address */ function _receiveDelegation( - uint256 _amount, + uint256 _tokens, IL2StakingTypes.ReceiveDelegationData memory _delegationData ) internal { // Get the delegation pool of the indexer @@ -239,23 +239,23 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas Delegation storage delegation = pool.delegators[_delegationData.delegator]; // Calculate shares to issue (without applying any delegation tax) - uint256 shares = (pool.tokens == 0) ? _amount : ((_amount * pool.shares) / pool.tokens); + uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / pool.tokens); - if (shares == 0 || _amount < MINIMUM_DELEGATION) { + if (shares == 0 || _tokens < MINIMUM_DELEGATION) { // If no shares would be issued (probably a rounding issue or attack), // or if the amount is under the minimum delegation (which could be part of a rounding attack), // return the tokens to the delegator - _graphToken().transfer(_delegationData.delegator, _amount); - emit TransferredDelegationReturnedToDelegator(_delegationData.indexer, _delegationData.delegator, _amount); + _graphToken().transfer(_delegationData.delegator, _tokens); + emit TransferredDelegationReturnedToDelegator(_delegationData.indexer, _delegationData.delegator, _tokens); } else { // Update the delegation pool - pool.tokens = pool.tokens + _amount; + pool.tokens = pool.tokens + _tokens; pool.shares = pool.shares + shares; // Update the individual delegation delegation.shares = delegation.shares + shares; - emit StakeDelegated(_delegationData.indexer, _delegationData.delegator, _amount, shares); + emit StakeDelegated(_delegationData.indexer, _delegationData.delegator, _tokens, shares); } } } diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index 737fd8d5f..66c088e02 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -313,20 +313,20 @@ abstract contract StakingBackwardsCompatibility is /** * @dev Send rewards to the appropriate destination. - * @param _amount Number of rewards tokens + * @param _tokens Number of rewards tokens * @param _beneficiary Address of the beneficiary of rewards * @param _restake Whether to restake or not */ - function _sendRewards(uint256 _amount, address _beneficiary, bool _restake) private { - if (_amount == 0) return; + function _sendRewards(uint256 _tokens, address _beneficiary, bool _restake) private { + if (_tokens == 0) return; if (_restake) { // Restake to place fees into the indexer stake - _stake(_beneficiary, _amount); + _stake(_beneficiary, _tokens); } else { // Transfer funds to the beneficiary's designated rewards destination if set address destination = __DEPRECATED_rewardsDestination[_beneficiary]; - _graphToken().pushTokens(destination == address(0) ? _beneficiary : destination, _amount); + _graphToken().pushTokens(destination == address(0) ? _beneficiary : destination, _tokens); } } @@ -435,25 +435,25 @@ abstract contract StakingBackwardsCompatibility is * This function transfer curation fees to the Curation contract by calling Curation.collect * @param _subgraphDeploymentID Subgraph deployment to which the curation fees are related * @param _tokens Total tokens received used to calculate the amount of fees to collect - * @param _curationPercentage Percentage of tokens to collect as fees + * @param _curationCut Percentage of tokens to collect as fees * @return Amount of curation fees */ function _collectCurationFees( bytes32 _subgraphDeploymentID, uint256 _tokens, - uint256 _curationPercentage + uint256 _curationCut ) private returns (uint256) { if (_tokens == 0) { return 0; } ICuration curation = _graphCuration(); - bool isCurationEnabled = _curationPercentage > 0 && address(curation) != address(0); + bool isCurationEnabled = _curationCut > 0 && address(curation) != address(0); if (isCurationEnabled && curation.isCurated(_subgraphDeploymentID)) { // Calculate the tokens after curation fees first, and subtact that, // to prevent curation fees from rounding down to zero - uint256 tokensAfterCurationFees = ((uint256(MAX_PPM) - _curationPercentage) * _tokens) / MAX_PPM; + uint256 tokensAfterCurationFees = ((uint256(MAX_PPM) - _curationCut) * _tokens) / MAX_PPM; uint256 curationFees = _tokens - tokensAfterCurationFees; if (curationFees > 0) { // Transfer and call collect() diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 4c66cfc0c..9893d3aee 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -44,7 +44,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { vm.assume(insufficientAmount < amount); changePrank(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", insufficientAmount, amount); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAllowance(uint256,uint256)", insufficientAmount, amount); vm.expectRevert(expectedError); escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); } @@ -56,7 +56,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { vm.assume(insufficientAmount < amount); changePrank(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", insufficientAmount, amount); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientBalance(uint256,uint256)", insufficientAmount, amount); vm.expectRevert(expectedError); escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); vm.stopPrank(); diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index c87545b1a..9274f6f9d 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -20,7 +20,7 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { uint256 smallerAmount ) public useGateway useCollector(amount) { vm.assume(smallerAmount < amount); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorInsufficientAmount(uint256,uint256)", amount, smallerAmount); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAllowance(uint256,uint256)", amount, smallerAmount); vm.expectRevert(expectedError); escrow.approveCollector(users.verifier, smallerAmount); } diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index a9d95460b..287400d8f 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -18,7 +18,7 @@ contract GraphEscrowThawTest is GraphEscrowTest { function testThaw_RevertWhen_InsufficientThawAmount( uint256 amount ) public useGateway useDeposit(amount) { - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientThawAmount()"); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientTokensThawing()"); vm.expectRevert(expectedError); escrow.thaw(users.indexer, 0); } @@ -27,7 +27,7 @@ contract GraphEscrowThawTest is GraphEscrowTest { uint256 amount ) public useGateway useDeposit(amount) { uint256 overAmount = amount + 1; - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAmount(uint256,uint256)", amount, overAmount); + bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientBalance(uint256,uint256)", amount, overAmount); vm.expectRevert(expectedError); escrow.thaw(users.indexer, overAmount); } diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 519f6e105..78e868cae 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -56,7 +56,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; uint256 requiredAmount = tokensDataService + tokensProtocol + tokensDelegatoion; - expectedError = abi.encodeWithSignature("GraphPaymentsInsufficientAmount(uint256,uint256)", amount, requiredAmount); + expectedError = abi.encodeWithSignature("GraphPaymentsInsufficientTokens(uint256,uint256)", amount, requiredAmount); } vm.expectRevert(expectedError); payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index ac0320651..69190b27f 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -49,8 +49,8 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM event ArbitratorSet(address arbitrator); event DisputePeriodSet(uint64 disputePeriod); event MinimumDepositSet(uint256 minimumDeposit); - event MaxSlashingPercentageSet(uint32 maxSlashingPercentage); - event FishermanRewardPercentageSet(uint32 fishermanRewardPercentage); + event MaxSlashingCutSet(uint32 maxSlashingCut); + event FishermanRewardCutSet(uint32 fishermanRewardCut); event SubgraphServiceSet(address indexed subgraphService); /** @@ -124,9 +124,9 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM error DisputeManagerZeroTokens(); error DisputeManagerInvalidDispute(bytes32 disputeId); error DisputeManagerInvalidMinimumDeposit(uint256 minimumDeposit); - error DisputeManagerInvalidFishermanReward(uint32 percentage); - error DisputeManagerInvalidMaxSlashingPercentage(uint32 maxSlashingPercentage); - error DisputeManagerInvalidSlashAmount(uint256 slashAmount); + error DisputeManagerInvalidFishermanReward(uint32 cut); + error DisputeManagerInvalidMaxSlashingCut(uint32 maxSlashingCut); + error DisputeManagerInvalidTokensSlash(uint256 tokensSlash); error DisputeManagerInvalidDisputeStatus(IDisputeManager.DisputeStatus status); error DisputeManagerInsufficientDeposit(uint256 deposit, uint256 minimumDeposit); error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId); @@ -185,23 +185,23 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * @param arbitrator Arbitrator role * @param disputePeriod Dispute period in seconds * @param minimumDeposit Minimum deposit required to create a Dispute - * @param fishermanRewardPercentage Percent of slashed funds for fisherman (ppm) - * @param maxSlashingPercentage Maximum percentage of indexer stake that can be slashed (ppm) + * @param fishermanRewardCut_ Percent of slashed funds for fisherman (ppm) + * @param maxSlashingCut_ Maximum percentage of indexer stake that can be slashed (ppm) */ constructor( address controller, address arbitrator, uint64 disputePeriod, uint256 minimumDeposit, - uint32 fishermanRewardPercentage, - uint32 maxSlashingPercentage + uint32 fishermanRewardCut_, + uint32 maxSlashingCut_ ) Ownable(msg.sender) GraphDirectory(controller) { // Settings _setArbitrator(arbitrator); _setDisputePeriod(disputePeriod); _setMinimumDeposit(minimumDeposit); - _setFishermanRewardPercentage(fishermanRewardPercentage); - _setMaxSlashingPercentage(maxSlashingPercentage); + _setFishermanRewardCut(fishermanRewardCut_); + _setMaxSlashingCut(maxSlashingCut_); } /** @@ -297,11 +297,11 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * a dispute must be resolved using drawDispute or rejectDispute. * @notice Accept a dispute with Id `disputeId` * @param disputeId Id of the dispute to be accepted - * @param slashAmount Amount of tokens to slash from the indexer + * @param tokensSlash Amount of tokens to slash from the indexer */ function acceptDispute( bytes32 disputeId, - uint256 slashAmount + uint256 tokensSlash ) external override onlyArbitrator onlyPendingDispute(disputeId) { Dispute storage dispute = disputes[disputeId]; @@ -309,7 +309,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM dispute.status = IDisputeManager.DisputeStatus.Accepted; // Slash - uint256 tokensToReward = _slashIndexer(dispute.indexer, slashAmount); + uint256 tokensToReward = _slashIndexer(dispute.indexer, tokensSlash); // Give the fisherman their reward and their deposit back _graphToken().pushTokens(dispute.fisherman, tokensToReward + dispute.deposit); @@ -395,18 +395,18 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM /** * @dev Set the percent reward that the fisherman gets when slashing occurs. * @notice Update the reward percentage to `_percentage` - * @param percentage Reward as a percentage of indexer stake + * @param fishermanRewardCut_ Reward as a percentage of indexer stake */ - function setFishermanRewardPercentage(uint32 percentage) external override onlyOwner { - _setFishermanRewardPercentage(percentage); + function setFishermanRewardCut(uint32 fishermanRewardCut_) external override onlyOwner { + _setFishermanRewardCut(fishermanRewardCut_); } /** * @dev Set the maximum percentage that can be used for slashing indexers. - * @param maxSlashingPercentage Max percentage slashing for disputes + * @param maxSlashingCut_ Max percentage slashing for disputes */ - function setMaxSlashingPercentage(uint32 maxSlashingPercentage) external override onlyOwner { - _setMaxSlashingPercentage(maxSlashingPercentage); + function setMaxSlashingCut(uint32 maxSlashingCut_) external override onlyOwner { + _setMaxSlashingCut(maxSlashingCut_); } /** @@ -435,7 +435,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * @return Verifier cut in percentage (ppm) */ function getVerifierCut() external view returns (uint32) { - return fishermanRewardPercentage; + return fishermanRewardCut; } /** @@ -667,9 +667,9 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * @dev Make the subgraph service contract slash the indexer and reward the challenger. * Give the challenger a reward equal to the fishermanRewardPercentage of slashed amount * @param _indexer Address of the indexer - * @param _slashAmount Amount of tokens to slash from the indexer + * @param _tokensSlash Amount of tokens to slash from the indexer */ - function _slashIndexer(address _indexer, uint256 _slashAmount) private returns (uint256 rewardsAmount) { + function _slashIndexer(address _indexer, uint256 _tokensSlash) private returns (uint256) { // Get slashable amount for indexer IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_indexer, address(subgraphService)); IHorizonStaking.DelegationPool memory pool = _graphStaking().getDelegationPool( @@ -679,22 +679,22 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM uint256 totalProvisionTokens = provision.tokens + pool.tokens; // slashable tokens // Get slash amount - uint256 maxSlashAmount = uint256(maxSlashingPercentage).mulPPM(totalProvisionTokens); - if (_slashAmount == 0) { - revert DisputeManagerInvalidSlashAmount(_slashAmount); + uint256 maxTokensSlash = uint256(maxSlashingCut).mulPPM(totalProvisionTokens); + if (_tokensSlash == 0) { + revert DisputeManagerInvalidTokensSlash(_tokensSlash); } - if (_slashAmount > maxSlashAmount) { - revert DisputeManagerInvalidSlashAmount(_slashAmount); + if (_tokensSlash > maxTokensSlash) { + revert DisputeManagerInvalidTokensSlash(_tokensSlash); } // Rewards amount can only be extracted from service poriver tokens so // we grab the minimum between the slash amount and indexer's tokens - uint256 maxRewardableTokens = Math.min(_slashAmount, provision.tokens); - rewardsAmount = uint256(fishermanRewardPercentage).mulPPM(maxRewardableTokens); + uint256 maxRewardableTokens = Math.min(_tokensSlash, provision.tokens); + uint256 tokensRewards = uint256(fishermanRewardCut).mulPPM(maxRewardableTokens); - subgraphService.slash(_indexer, abi.encode(_slashAmount, rewardsAmount)); - return rewardsAmount; + subgraphService.slash(_indexer, abi.encode(_tokensSlash, tokensRewards)); + return tokensRewards; } /** @@ -739,28 +739,28 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM /** * @dev Internal: Set the percent reward that the fisherman gets when slashing occurs. * @notice Update the reward percentage to `_percentage` - * @param _percentage Reward as a percentage of indexer stake + * @param _fishermanRewardCut Reward as a percentage of indexer stake */ - function _setFishermanRewardPercentage(uint32 _percentage) private { + function _setFishermanRewardCut(uint32 _fishermanRewardCut) private { // Must be within 0% to 100% (inclusive) - if (!PPMMath.isValidPPM(_percentage)) { - revert DisputeManagerInvalidFishermanReward(_percentage); + if (!PPMMath.isValidPPM(_fishermanRewardCut)) { + revert DisputeManagerInvalidFishermanReward(_fishermanRewardCut); } - fishermanRewardPercentage = _percentage; - emit FishermanRewardPercentageSet(fishermanRewardPercentage); + fishermanRewardCut = _fishermanRewardCut; + emit FishermanRewardCutSet(fishermanRewardCut); } /** * @dev Internal: Set the maximum percentage that can be used for slashing indexers. - * @param _maxSlashingPercentage Max percentage slashing for disputes + * @param _maxSlashingCut Max percentage slashing for disputes */ - function _setMaxSlashingPercentage(uint32 _maxSlashingPercentage) private { + function _setMaxSlashingCut(uint32 _maxSlashingCut) private { // Must be within 0% to 100% (inclusive) - if (!PPMMath.isValidPPM(_maxSlashingPercentage)) { - revert DisputeManagerInvalidMaxSlashingPercentage(_maxSlashingPercentage); + if (!PPMMath.isValidPPM(_maxSlashingCut)) { + revert DisputeManagerInvalidMaxSlashingCut(_maxSlashingCut); } - maxSlashingPercentage = _maxSlashingPercentage; - emit MaxSlashingPercentageSet(maxSlashingPercentage); + maxSlashingCut = _maxSlashingCut; + emit MaxSlashingCutSet(maxSlashingCut); } /** diff --git a/packages/subgraph-service/contracts/DisputeManagerStorage.sol b/packages/subgraph-service/contracts/DisputeManagerStorage.sol index 350d96566..e3af4bf53 100644 --- a/packages/subgraph-service/contracts/DisputeManagerStorage.sol +++ b/packages/subgraph-service/contracts/DisputeManagerStorage.sol @@ -21,11 +21,11 @@ abstract contract DisputeManagerV1Storage { // Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute // Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) - uint32 public fishermanRewardPercentage; + uint32 public fishermanRewardCut; // Maximum percentage of indexer stake that can be slashed on a dispute // Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) - uint32 public maxSlashingPercentage; + uint32 public maxSlashingCut; // Disputes created : disputeID => Dispute // disputeID - check creation functions to see how disputeID is built diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 2f8a504fb..e82e7c7e6 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -238,15 +238,14 @@ contract SubgraphService is // Collect from GraphPayments PaymentCuts memory queryFeePaymentCuts = _getQueryFeePaymentCuts(subgraphDeploymentId); - uint256 percentageTotalCut = queryFeePaymentCuts.percentageServiceCut + - queryFeePaymentCuts.percentageCurationCut; + uint256 totalCut = queryFeePaymentCuts.serviceCut + queryFeePaymentCuts.curationCut; uint256 balanceBefore = _graphToken().balanceOf(address(this)); uint256 tokensCollected = _tapCollector().collect( IGraphPayments.PaymentTypes.QueryFee, - abi.encode(signedRav, percentageTotalCut) + abi.encode(signedRav, totalCut) ); - uint256 tokensDataService = tokensCollected.mulPPM(percentageTotalCut); + uint256 tokensDataService = tokensCollected.mulPPM(totalCut); uint256 balanceAfter = _graphToken().balanceOf(address(this)); if (balanceAfter - balanceBefore != tokensDataService) { revert SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter, tokensDataService); @@ -261,7 +260,7 @@ contract SubgraphService is _lockStake(IGraphPayments.PaymentTypes.QueryFee, indexer, tokensToLock, unlockTimestamp); // calculate service and curator cuts - tokensCurators = tokensCollected.mulPPMRoundUp(queryFeePaymentCuts.percentageCurationCut); + tokensCurators = tokensCollected.mulPPMRoundUp(queryFeePaymentCuts.curationCut); tokensSubgraphService = tokensDataService - tokensCurators; if (tokensCurators > 0) { @@ -283,7 +282,7 @@ contract SubgraphService is // Only pay curation fees if the subgraph is curated if (!_curation().isCurated(_subgraphDeploymentId)) { - queryFeePaymentCuts.percentageCurationCut = 0; + queryFeePaymentCuts.curationCut = 0; } return queryFeePaymentCuts; diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index d40750a55..70fe4e7f8 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -44,9 +44,9 @@ interface IDisputeManager { function setMinimumDeposit(uint256 minimumDeposit) external; - function setFishermanRewardPercentage(uint32 percentage) external; + function setFishermanRewardCut(uint32 cut) external; - function setMaxSlashingPercentage(uint32 maxPercentage) external; + function setMaxSlashingCut(uint32 maxCut) external; // -- Dispute -- @@ -59,7 +59,7 @@ interface IDisputeManager { function createIndexingDispute(address allocationId, uint256 deposit) external returns (bytes32); - function acceptDispute(bytes32 disputeId, uint256 slashAmount) external; + function acceptDispute(bytes32 disputeId, uint256 tokensSlash) external; function rejectDispute(bytes32 disputeId) external; diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 4e395fc0b..e1f85ec25 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -14,8 +14,8 @@ interface ISubgraphService is IDataServiceFees { } struct PaymentCuts { - uint128 percentageServiceCut; - uint128 percentageCurationCut; + uint128 serviceCut; + uint128 curationCut; } function resizeAllocation(address indexer, address allocationId, uint256 tokens) external; diff --git a/packages/subgraph-service/test/DisputeManager.t.sol b/packages/subgraph-service/test/DisputeManager.t.sol index 8d338299f..fea4d3ed7 100644 --- a/packages/subgraph-service/test/DisputeManager.t.sol +++ b/packages/subgraph-service/test/DisputeManager.t.sol @@ -64,7 +64,6 @@ contract DisputeManagerTest is Test { staking = new MockHorizonStaking(address(graphToken)); rewardsManager = new MockRewardsManager(); - address payments = address(0xE2); address tapVerifier = address(0xE3); address curation = address(0xE4); diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol index b8f722bcf..7b21f25a1 100644 --- a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol +++ b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol @@ -96,13 +96,7 @@ contract MockHorizonStaking { return _provisions[verifier][serviceProvider]; } - /** - * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param _operator The address to check for auth - * @param _serviceProvider The service provider on behalf of whom they're claiming to act - * @param _verifier The verifier / data service on which they're claiming to act - */ - function isAuthorized(address _operator, address _serviceProvider, address _verifier) external view returns (bool) { + function isAuthorized(address, address, address) external pure returns (bool) { return true; } diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol index 49c284aaa..f2447c7c4 100644 --- a/packages/subgraph-service/test/mocks/MockRewardsManager.sol +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -8,21 +8,21 @@ import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRew contract MockRewardsManager is IRewardsManager { // -- Config -- - function setIssuancePerBlock(uint256 _issuancePerBlock) external {} + function setIssuancePerBlock(uint256) external {} - function setMinimumSubgraphSignal(uint256 _minimumSubgraphSignal) external {} + function setMinimumSubgraphSignal(uint256) external {} - function setRewardsIssuer(address _rewardsIssuer, bool _allowed) external {} + function setRewardsIssuer(address, bool) external {} // -- Denylist -- - function setSubgraphAvailabilityOracle(address _subgraphAvailabilityOracle) external {} + function setSubgraphAvailabilityOracle(address) external {} - function setDenied(bytes32 _subgraphDeploymentID, bool _deny) external {} + function setDenied(bytes32, bool) external {} - function setDeniedMany(bytes32[] calldata _subgraphDeploymentID, bool[] calldata _deny) external {} + function setDeniedMany(bytes32[] calldata, bool[] calldata) external {} - function isDenied(bytes32 _subgraphDeploymentID) external view returns (bool) {} + function isDenied(bytes32) external view returns (bool) {} // -- Getters -- @@ -30,23 +30,23 @@ contract MockRewardsManager is IRewardsManager { function getAccRewardsPerSignal() external view returns (uint256) {} - function getAccRewardsForSubgraph(bytes32 _subgraphDeploymentID) external view returns (uint256) {} + function getAccRewardsForSubgraph(bytes32) external view returns (uint256) {} - function getAccRewardsPerAllocatedToken(bytes32 _subgraphDeploymentID) external view returns (uint256, uint256) {} + function getAccRewardsPerAllocatedToken(bytes32) external view returns (uint256, uint256) {} - function getRewards(address _allocationID) external view returns (uint256) {} + function getRewards(address) external view returns (uint256) {} // -- Updates -- function updateAccRewardsPerSignal() external returns (uint256) {} - function takeRewards(address _allocationID) external returns (uint256) {} + function takeRewards(address) external returns (uint256) {} // -- Hooks -- - function onSubgraphSignalUpdate(bytes32 _subgraphDeploymentID) external returns (uint256) {} + function onSubgraphSignalUpdate(bytes32) external pure returns (uint256) {} - function onSubgraphAllocationUpdate(bytes32 _subgraphDeploymentID) external returns (uint256) { + function onSubgraphAllocationUpdate(bytes32) external pure returns (uint256) { return 0; } } \ No newline at end of file From 187daaf8a96c519c557bb717516b7f60786eab64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 13:02:12 -0300 Subject: [PATCH 052/343] chore: use PPMMath MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/GraphDirectory.sol | 6 ++--- .../horizon/contracts/libraries/PPMMath.sol | 8 +++---- .../contracts/payments/GraphPayments.sol | 8 +++---- .../contracts/staking/HorizonStaking.sol | 11 ++++----- .../staking/StakingBackwardsCompatibility.sol | 23 +++++++------------ 5 files changed, 24 insertions(+), 32 deletions(-) diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index f05d9db66..3f50440b2 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -56,11 +56,11 @@ abstract contract GraphDirectory { ICuration graphCuration ); - error GraphDirectoryInvalidZeroAddress(); + error GraphDirectoryInvalidZeroAddress(bytes contractName); constructor(address controller) { if (controller == address(0)) { - revert GraphDirectoryInvalidZeroAddress(); + revert GraphDirectoryInvalidZeroAddress("Controller"); } GRAPH_CONTROLLER = IController(controller); @@ -137,7 +137,7 @@ abstract contract GraphDirectory { function _getContractFromController(bytes memory _contractName) private view returns (address) { address contractAddress = GRAPH_CONTROLLER.getContractProxy(keccak256(_contractName)); if (contractAddress == address(0)) { - revert GraphDirectoryInvalidZeroAddress(); + revert GraphDirectoryInvalidZeroAddress(_contractName); } return contractAddress; } diff --git a/packages/horizon/contracts/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol index ac0f65252..2129f4a96 100644 --- a/packages/horizon/contracts/libraries/PPMMath.sol +++ b/packages/horizon/contracts/libraries/PPMMath.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.24; library PPMMath { - /// @notice Maximum value in parts per million (PPM). + /// @notice Maximum value (100%) in parts per million (PPM). uint256 internal constant MAX_PPM = 1_000_000; error PPMMathInvalidPPM(uint256 ppm); @@ -20,10 +20,10 @@ library PPMMath { // to prevent curation fees from rounding down to zero // a must be in ppm function mulPPMRoundUp(uint256 a, uint256 b) internal pure returns (uint256) { - if (!isValidPPM(a)) { - revert PPMMathInvalidPPM(a); + if (!isValidPPM(b)) { + revert PPMMathInvalidPPM(b); } - return b - mulPPM(MAX_PPM - a, b); + return a - mulPPM(MAX_PPM - b, a); } function isValidPPM(uint256 ppm) internal pure returns (bool) { diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 84e4fabd2..ab1bec54c 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -6,14 +6,14 @@ import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; +import { PPMMath } from "../libraries/PPMMath.sol"; import { GraphDirectory } from "../data-service/GraphDirectory.sol"; import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Storage, IGraphPayments { using TokenUtils for IGraphToken; - - uint256 private immutable MAX_PPM = 1000000; // 100% in parts per million + using PPMMath for uint256; event GraphPaymentsCollected( address indexed sender, @@ -55,9 +55,9 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora _graphToken().pullTokens(msg.sender, tokens); // Calculate cuts - uint256 tokensProtocol = (tokens * PROTOCOL_PAYMENT_CUT) / MAX_PPM; + uint256 tokensProtocol = tokens.mulPPM(PROTOCOL_PAYMENT_CUT); uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, uint8(paymentType)); - uint256 tokensDelegationPool = (tokens * delegationFeeCut) / MAX_PPM; + uint256 tokensDelegationPool = tokens.mulPPM(delegationFeeCut); uint256 totalCut = tokensProtocol + tokensDataService + tokensDelegationPool; if (totalCut > tokens) { revert GraphPaymentsInsufficientTokens(tokens, totalCut); diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 6aeb5d19a..af87401c2 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -6,9 +6,10 @@ import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/Gr import { IHorizonStakingBase } from "../interfaces/IHorizonStakingBase.sol"; import { IGraphToken } from "../interfaces/IGraphToken.sol"; +import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; -import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; +import { PPMMath } from "../libraries/PPMMath.sol"; import { Managed } from "./utilities/Managed.sol"; import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; @@ -23,13 +24,11 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; */ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV1Storage, IHorizonStakingBase { using TokenUtils for IGraphToken; - - /// @dev 100% in parts per million - uint32 internal constant MAX_PPM = 1000000; + using PPMMath for uint256; /// @dev Maximum value that can be set as the maxVerifierCut in a provision. /// It is equivalent to 100% in parts-per-million - uint32 private constant MAX_MAX_VERIFIER_CUT = 1000000; // 100% + uint32 private constant MAX_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM); /// @dev Minimum size of a provision uint256 private constant MIN_PROVISION_SIZE = 1e18; @@ -393,7 +392,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV uint256 tokensToSlash = tokens; uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); if (providerTokensSlashed > 0) { - require((prov.tokens * prov.maxVerifierCut) / MAX_PPM >= tokensVerifier, "verifier cut too high"); + require(prov.tokens.mulPPM(prov.maxVerifierCut) >= tokensVerifier, "verifier cut too high"); if (tokensVerifier > 0) { _graphToken().pushTokens(verifierDestination, tokensVerifier); emit VerifierTokensSent(serviceProvider, verifier, verifierDestination, tokensVerifier); diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index 66c088e02..7310f2d72 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -11,6 +11,7 @@ import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; import { TokenUtils } from "../libraries/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; import { ExponentialRebates } from "./libraries/ExponentialRebates.sol"; +import { PPMMath } from "../libraries/PPMMath.sol"; import { Managed } from "./utilities/Managed.sol"; import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; @@ -32,9 +33,7 @@ abstract contract StakingBackwardsCompatibility is IStakingBackwardsCompatibility { using TokenUtils for IGraphToken; - - /// @dev 100% in parts per million - uint32 internal constant MAX_PPM = 1000000; + using PPMMath for uint256; address public immutable SUBGRAPH_DATA_SERVICE_ADDRESS; @@ -272,10 +271,7 @@ abstract contract StakingBackwardsCompatibility is * @return Amount of tax charged */ function _collectTax(uint256 _tokens, uint256 _percentage) private returns (uint256) { - // Calculate tokens after tax first, and subtract that, - // to prevent the tax from rounding down to zero - uint256 tokensAfterTax = ((uint256(MAX_PPM) - _percentage) * _tokens) / MAX_PPM; - uint256 tax = _tokens - tokensAfterTax; + uint256 tax = _tokens.mulPPMRoundUp(_percentage); _graphToken().burnTokens(tax); // Burn tax if any return tax; } @@ -404,8 +400,8 @@ abstract contract StakingBackwardsCompatibility is function _collectDelegationQueryRewards(address _indexer, uint256 _tokens) private returns (uint256) { uint256 delegationRewards = 0; IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; - if (pool.tokens > 0 && pool.__DEPRECATED_queryFeeCut < MAX_PPM) { - uint256 indexerCut = (uint256(pool.__DEPRECATED_queryFeeCut) * _tokens) / MAX_PPM; + if (pool.tokens > 0 && uint256(pool.__DEPRECATED_queryFeeCut).isValidPPM()) { + uint256 indexerCut = uint256(pool.__DEPRECATED_queryFeeCut).mulPPM(_tokens); delegationRewards = _tokens - indexerCut; pool.tokens = pool.tokens + delegationRewards; } @@ -422,8 +418,8 @@ abstract contract StakingBackwardsCompatibility is function _collectDelegationIndexingRewards(address _indexer, uint256 _tokens) private returns (uint256) { uint256 delegationRewards = 0; IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; - if (pool.tokens > 0 && pool.__DEPRECATED_indexingRewardCut < MAX_PPM) { - uint256 indexerCut = (uint256(pool.__DEPRECATED_indexingRewardCut) * _tokens) / MAX_PPM; + if (pool.tokens > 0 && uint256(pool.__DEPRECATED_indexingRewardCut).isValidPPM()) { + uint256 indexerCut = uint256(pool.__DEPRECATED_indexingRewardCut).mulPPM(_tokens); delegationRewards = _tokens - indexerCut; pool.tokens = pool.tokens + delegationRewards; } @@ -451,10 +447,7 @@ abstract contract StakingBackwardsCompatibility is bool isCurationEnabled = _curationCut > 0 && address(curation) != address(0); if (isCurationEnabled && curation.isCurated(_subgraphDeploymentID)) { - // Calculate the tokens after curation fees first, and subtact that, - // to prevent curation fees from rounding down to zero - uint256 tokensAfterCurationFees = ((uint256(MAX_PPM) - _curationCut) * _tokens) / MAX_PPM; - uint256 curationFees = _tokens - tokensAfterCurationFees; + uint256 curationFees = _tokens.mulPPMRoundUp(_curationCut); if (curationFees > 0) { // Transfer and call collect() // This function transfer tokens to a trusted protocol contracts From 04432d28e080f83d4f4ad2b54acbaf6a96e6b0dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 13:40:43 -0300 Subject: [PATCH 053/343] fix: take pending rewards for subgraph service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/SubgraphService.sol | 7 ++++++- .../contracts/libraries/Allocation.sol | 11 +++++++++++ .../contracts/utilities/AllocationManager.sol | 17 +++++++++++++---- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index e82e7c7e6..dd4c92d10 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -205,7 +205,12 @@ contract SubgraphService is address allocationId ) external view override returns (address, bytes32, uint256, uint256) { Allocation.State memory allo = allocations[allocationId]; - return (allo.indexer, allo.subgraphDeploymentId, allo.tokens, allo.accRewardsPerAllocatedToken); + return ( + allo.indexer, + allo.subgraphDeploymentId, + allo.tokens, + allo.accRewardsPerAllocatedToken + allo.accRewardsPending + ); } function getLegacyAllocation(address allocationId) external view returns (LegacyAllocation.State memory) { diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index f7b5c972a..8543b4f57 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -69,6 +69,17 @@ library Allocation { return allocation; } + function clearPendingRewards( + mapping(address => State) storage self, + address allocationId + ) internal returns (State memory) { + State storage allocation = _get(self, allocationId); + if (!allocation.isOpen()) revert AllocationClosed(allocationId, allocation.closedAt); + allocation.accRewardsPending = 0; + + return allocation; + } + function close(mapping(address => State) storage self, address allocationId) internal returns (State memory) { State storage allocation = _get(self, allocationId); if (!allocation.isOpen()) revert AllocationClosed(allocationId, allocation.closedAt); diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 62a70aee4..fa4d0a654 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -147,6 +147,9 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager ); allocations.presentPOI(allocationId); + // Any pending rewards should have been collected now + allocations.clearPendingRewards(allocationId); + if (tokensRewards == 0) { emit IndexingRewardsCollected( allocation.indexer, @@ -225,12 +228,11 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager // Update the allocation allocations[_allocationId].tokens = _tokens; allocations[_allocationId].accRewardsPerAllocatedToken = accRewardsPerAllocatedToken; - allocations[_allocationId].accRewardsPending = allocations[_allocationId].accRewardsPending + accRewardsPending; + allocations[_allocationId].accRewardsPending += accRewardsPending; // Update total allocated tokens for the subgraph deployment - subgraphAllocatedTokens[allocation.subgraphDeploymentId] = - subgraphAllocatedTokens[allocation.subgraphDeploymentId] + - (_tokens - oldTokens); + // underflow: subgraphAllocatedTokens should at least be oldTokens so it can't underflow + subgraphAllocatedTokens[allocation.subgraphDeploymentId] += (_tokens - oldTokens); emit AllocationResized(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, _tokens, oldTokens); return allocations[_allocationId]; @@ -242,6 +244,13 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager allocations.close(_allocationId); allocationProvisionTracker.release(allocation.indexer, allocation.tokens); + // Take rewards snapshot to prevent other allos from counting tokens from this allo + allocations.snapshotRewards( + _allocationId, + _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId) + ); + + // Update total allocated tokens for the subgraph deployment subgraphAllocatedTokens[allocation.subgraphDeploymentId] = subgraphAllocatedTokens[allocation.subgraphDeploymentId] - allocation.tokens; From 92f3a55aa92ea25416894828d87863c6fc77f1ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 13:58:09 -0300 Subject: [PATCH 054/343] chore: use graph payments payment types instead of uint8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../interfaces/IHorizonStakingExtension.sol | 12 +++++++++--- .../horizon/contracts/payments/GraphPayments.sol | 2 +- .../contracts/staking/HorizonStakingExtension.sol | 11 ++++++----- .../contracts/staking/HorizonStakingStorage.sol | 5 +++-- packages/horizon/test/escrow/collect.t.sol | 2 +- packages/horizon/test/payments/GraphPayments.t.sol | 4 ++-- .../test/shared/horizon-staking/HorizonStaking.t.sol | 5 +++-- .../contracts/utilities/AllocationManager.sol | 2 +- 8 files changed, 26 insertions(+), 17 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol index 4e4811e3a..2cc79cdcb 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol @@ -4,6 +4,7 @@ pragma solidity >=0.6.12 <0.9.0; pragma abicoder v2; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; +import { IGraphPayments } from "./IGraphPayments.sol"; interface IHorizonStakingExtension is IHorizonStakingTypes { /** @@ -14,7 +15,7 @@ interface IHorizonStakingExtension is IHorizonStakingTypes { event DelegationFeeCutSet( address indexed serviceProvider, address indexed verifier, - uint256 feeType, + IGraphPayments.PaymentTypes paymentType, uint256 feeCut ); @@ -29,7 +30,12 @@ interface IHorizonStakingExtension is IHorizonStakingTypes { // for vesting contracts function setOperatorLocked(address operator, address verifier, bool allowed) external; - function setDelegationFeeCut(address serviceProvider, address verifier, uint256 feeType, uint256 feeCut) external; + function setDelegationFeeCut( + address serviceProvider, + address verifier, + IGraphPayments.PaymentTypes paymentType, + uint256 feeCut + ) external; function getStake(address serviceProvider) external view returns (uint256); @@ -60,6 +66,6 @@ interface IHorizonStakingExtension is IHorizonStakingTypes { function getDelegationFeeCut( address serviceProvider, address verifier, - uint256 feeType + IGraphPayments.PaymentTypes paymentType ) external view returns (uint256); } diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index ab1bec54c..44f56d553 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -56,7 +56,7 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora // Calculate cuts uint256 tokensProtocol = tokens.mulPPM(PROTOCOL_PAYMENT_CUT); - uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, uint8(paymentType)); + uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, paymentType); uint256 tokensDelegationPool = tokens.mulPPM(delegationFeeCut); uint256 totalCut = tokensProtocol + tokensDataService + tokensDelegationPool; if (totalCut > tokens) { diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index e7b0e744d..c3e8c1675 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -5,6 +5,7 @@ pragma solidity 0.8.24; import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; import { IHorizonStakingExtension } from "../interfaces/IHorizonStakingExtension.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; @@ -102,11 +103,11 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas function setDelegationFeeCut( address serviceProvider, address verifier, - uint256 feeType, + IGraphPayments.PaymentTypes paymentType, uint256 feeCut ) external override { - delegationFeeCut[serviceProvider][verifier][feeType] = feeCut; - emit DelegationFeeCutSet(serviceProvider, verifier, feeType, feeCut); + delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; + emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); } // total staked tokens to the provider @@ -185,9 +186,9 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas function getDelegationFeeCut( address serviceProvider, address verifier, - uint256 feeType + IGraphPayments.PaymentTypes paymentType ) external view override returns (uint256) { - return delegationFeeCut[serviceProvider][verifier][feeType]; + return delegationFeeCut[serviceProvider][verifier][paymentType]; } // provisioned tokens from delegators that are not being thawed diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index e23cde9c7..5adfa3676 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.24; import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; // TODO: create custom var-name-mixedcase /* solhint-disable var-name-mixedcase */ @@ -127,12 +128,12 @@ abstract contract HorizonStakingV1Storage { internal _provisions; /// @dev Delegation fee cuts for each service provider on each provision, by fee type: - /// ServiceProvider => Verifier => Fee Type => Fee Cut. + /// ServiceProvider => Verifier => Payment Type => Fee Cut. /// This is the effective delegator fee cuts for each (data-service-defined) fee type (e.g. indexing fees, query fees). /// This is in PPM and is the cut taken by the indexer from the fees that correspond to delegators. /// (based on stake vs delegated stake proportion). /// The cuts are applied in GraphPayments so apply to all data services that use it. - mapping(address serviceProvider => mapping(address verifier => mapping(uint256 feeType => uint256 feeCut))) + mapping(address serviceProvider => mapping(address verifier => mapping(IGraphPayments.PaymentTypes paymentType => uint256 feeCut))) public delegationFeeCut; mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _thawRequests; diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 9893d3aee..237e3230c 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -8,7 +8,7 @@ import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; contract GraphEscrowCollectTest is GraphEscrowTest { - function testCollect_Tokens(uint256 amount, uint256 tokensDataService) public useProvision(amount, 0, 0) useDelegationFeeCut(0, delegationFeeCut) { + function testCollect_Tokens(uint256 amount, uint256 tokensDataService) public useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegatoion); diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 78e868cae..a584ed09d 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -12,7 +12,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { function testCollect( uint256 amount, uint256 tokensDataService - ) public useProvision(amount, 0, 0) useDelegationFeeCut(0, delegationFeeCut) { + ) public useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegatoion); @@ -42,7 +42,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { function testCollect_RevertWhen_InsufficientAmount( uint256 amount, uint256 tokensDataService - ) public useProvision(amount, 0, 0) useDelegationFeeCut(0, delegationFeeCut) { + ) public useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { vm.assume(tokensDataService <= 10_000_000_000 ether); vm.assume(tokensDataService > amount); diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol index c65032e9a..4dbddde97 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.24; import "forge-std/Test.sol"; import { GraphBaseTest } from "../../GraphBase.t.sol"; +import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol"; abstract contract HorizonStakingSharedTest is GraphBaseTest { @@ -14,7 +15,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { _; } - modifier useDelegationFeeCut(uint256 paymentType, uint256 cut) { + modifier useDelegationFeeCut(IGraphPayments.PaymentTypes paymentType, uint256 cut) { _setDelegationFeeCut(paymentType, cut); _; } @@ -41,7 +42,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { vm.stopPrank(); } - function _setDelegationFeeCut(uint256 paymentType, uint256 cut) internal { + function _setDelegationFeeCut(IGraphPayments.PaymentTypes paymentType, uint256 cut) internal { vm.prank(users.indexer); staking.setDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType, cut); } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index fa4d0a654..b57ef7f97 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -168,7 +168,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager uint256 delegatorCut = _graphStaking().getDelegationFeeCut( allocation.indexer, address(this), - uint8(IGraphPayments.PaymentTypes.IndexingFee) + IGraphPayments.PaymentTypes.IndexingFee ); uint256 tokensDelegationRewards = tokensRewards.mulPPM(delegatorCut); if (tokensDelegationRewards > 0) { From b95655e456c91d728f6478d0eb95511625afd4c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 14:03:15 -0300 Subject: [PATCH 055/343] chore: rename indexer to service provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IHorizonStakingBase.sol | 4 ++-- packages/horizon/contracts/staking/HorizonStaking.sol | 10 +++++----- .../contracts/staking/HorizonStakingExtension.sol | 5 +++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol index 3cef3e193..0b7409a64 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol @@ -117,7 +117,7 @@ interface IHorizonStakingBase is IHorizonStakingTypes { function stakeTo(address serviceProvider, uint256 tokens) external; - // can be called by anyone if the indexer has provisioned stake to this verifier + // can be called by anyone if the service provider has provisioned stake to this verifier function stakeToProvision(address serviceProvider, address verifier, uint256 tokens) external; // create a provision @@ -186,7 +186,7 @@ interface IHorizonStakingBase is IHorizonStakingTypes { ) external; /** - * @notice Withdraw indexer tokens once the thawing period has passed. + * @notice Withdraw service provider tokens once the thawing period has passed. * @dev This is only needed during the transition period while we still have * a global lock. After that, unstake() will also withdraw. */ diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index af87401c2..9fd375e91 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -142,7 +142,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV /** * @notice Deposit tokens on the service provider stake, on behalf of the service provider, provisioned * to a specific verifier. The provider must have previously provisioned stake to that verifier. - * @param serviceProvider Address of the indexer + * @param serviceProvider Address of the service provider * @param verifier Address of the verifier * @param tokens Amount of tokens to stake */ @@ -327,7 +327,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; uint256 stakedTokens = sp.tokensStaked; - // Check that the indexer's stake minus the tokens to unstake is sufficient + // Check that the service provider's stake minus the tokens to unstake is sufficient // to cover existing allocations // TODO this is only needed until legacy allocations are closed, // so we should remove it after the transition period @@ -458,7 +458,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV } /** - * @notice Withdraw indexer tokens once the thawing period has passed. + * @notice Withdraw service provider tokens once the thawing period has passed. * @dev This is only needed during the transition period while we still have * a global lock. After that, unstake() will also withdraw. */ @@ -533,7 +533,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV /** * @notice Deposit tokens on the service provider stake, on behalf of the service provider. - * @param serviceProvider Address of the indexer + * @param serviceProvider Address of the service provider * @param tokens Amount of tokens to stake */ function stakeTo(address serviceProvider, uint256 tokens) public override notPartialPaused { @@ -831,7 +831,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV * @param _tokens Amount of tokens to stake */ function _stake(address _serviceProvider, uint256 _tokens) internal { - // Deposit tokens into the indexer stake + // Deposit tokens into the service provider stake _serviceProviders[_serviceProvider].tokensStaked = _serviceProviders[_serviceProvider].tokensStaked + _tokens; emit StakeDeposited(_serviceProvider, _tokens); diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index c3e8c1675..c73cc9de7 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -14,7 +14,7 @@ import { StakingBackwardsCompatibility } from "./StakingBackwardsCompatibility.s /** * @title L2Staking contract * @dev This contract is the L2 variant of the Staking contract. It adds a function - * to receive an indexer's stake or delegation from L1. Note that this contract inherits Staking, + * to receive an service provider's stake or delegation from L1. Note that this contract inherits Staking, * which uses a StakingExtension contract to implement the full IStaking interface through delegatecalls. */ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBase, IHorizonStakingExtension { @@ -68,9 +68,10 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas /** * @notice Receive tokens with a callhook from the bridge. - * @dev The encoded _data can contain information about an indexer's stake + * @dev The encoded _data can contain information about an service provider's stake * or a delegator's delegation. * See L1MessageCodes in IL2Staking for the supported messages. + * @dev "indexer" in this context refers to a service provider (legacy terminology for the bridge) * @param from Token sender in L1 * @param tokens Amount of tokens that were transferred * @param data ABI-encoded callhook data which must include a uint8 code and either a ReceiveIndexerStakeData or ReceiveDelegationData struct. From 90e5b7c31e373986e909d78a17b89c292df4c45c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 14:06:22 -0300 Subject: [PATCH 056/343] chore: more indexer renames MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../horizon/contracts/staking/HorizonStaking.sol | 14 +++++++------- .../contracts/staking/HorizonStakingStorage.sol | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 9fd375e91..64ab7e0c6 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -838,12 +838,12 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV } /** - * @dev Withdraw indexer tokens once the thawing period has passed. - * @param _indexer Address of indexer to withdraw funds from + * @dev Withdraw service provider tokens once the thawing period has passed. + * @param _serviceProvider Address of service provider to withdraw funds from */ - function _withdraw(address _indexer) private { + function _withdraw(address _serviceProvider) private { // Get tokens available for withdraw and update balance - ServiceProviderInternal storage sp = _serviceProviders[_indexer]; + ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; require(tokensToWithdraw > 0, "!tokens"); require(block.number >= sp.__DEPRECATED_tokensLockedUntil, "locked"); @@ -854,9 +854,9 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV sp.tokensStaked = sp.tokensStaked - tokensToWithdraw; - // Return tokens to the indexer - _graphToken().pushTokens(_indexer, tokensToWithdraw); + // Return tokens to the service provider + _graphToken().pushTokens(_serviceProvider, tokensToWithdraw); - emit StakeWithdrawn(_indexer, tokensToWithdraw); + emit StakeWithdrawn(_serviceProvider, tokensToWithdraw); } } diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index 5adfa3676..5c85f910b 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -98,7 +98,7 @@ abstract contract HorizonStakingV1Storage { // -- Operators -- - /// @dev Legacy operator auth : indexer => operator => is authorized + /// @dev Legacy operator auth : service provider => operator => is authorized mapping(address legacyOperator => mapping(address serviceProvider => bool authorized)) internal _legacyOperatorAuth; // -- Asset Holders -- @@ -130,7 +130,7 @@ abstract contract HorizonStakingV1Storage { /// @dev Delegation fee cuts for each service provider on each provision, by fee type: /// ServiceProvider => Verifier => Payment Type => Fee Cut. /// This is the effective delegator fee cuts for each (data-service-defined) fee type (e.g. indexing fees, query fees). - /// This is in PPM and is the cut taken by the indexer from the fees that correspond to delegators. + /// This is in PPM and is the cut taken by the service provider from the fees that correspond to delegators. /// (based on stake vs delegated stake proportion). /// The cuts are applied in GraphPayments so apply to all data services that use it. mapping(address serviceProvider => mapping(address verifier => mapping(IGraphPayments.PaymentTypes paymentType => uint256 feeCut))) @@ -138,7 +138,7 @@ abstract contract HorizonStakingV1Storage { mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _thawRequests; - // indexer => verifier => operator => authorized + // service provider => verifier => operator => authorized mapping(address serviceProvider => mapping(address verifier => mapping(address operator => bool authorized))) internal _operatorAuth; From b2207616d843ac4e741a0606e8e00b8709d9b40b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 14:08:50 -0300 Subject: [PATCH 057/343] chore: remove unnecessary pragma abicoder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v2 is default since 0.8.0 Signed-off-by: Tomás Migone --- packages/subgraph-service/contracts/DisputeManager.sol | 1 - .../subgraph-service/contracts/interfaces/IDisputeManager.sol | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 69190b27f..12395625e 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -1,6 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.24; -pragma abicoder v2; import { IGraphToken } from "@graphprotocol/horizon/contracts/interfaces/IGraphToken.sol"; import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 70fe4e7f8..e9880944d 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.24; -pragma abicoder v2; import { Attestation } from "../libraries/Attestation.sol"; From 444233591ebcf10f436f5e21f6388274e079208a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 14:54:00 -0300 Subject: [PATCH 058/343] chore: update solidity version, remove duplicate files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/contracts/base/IMulticall.sol | 2 +- .../contracts/contracts/base/Multicall.sol | 2 +- .../contracts/curation/ICuration.sol | 2 +- .../contracts/epochs/IEpochManager.sol | 2 +- .../contracts/gateway/ICallhookReceiver.sol | 2 +- .../contracts/governance/Controller.sol | 2 +- .../contracts/governance/Governed.sol | 2 +- .../contracts/governance/IController.sol | 2 +- .../contracts/governance/IManaged.sol | 2 +- .../contracts/governance/Managed.sol | 2 +- .../contracts/governance/Pausable.sol | 2 +- .../contracts/l2/staking/IL2StakingBase.sol | 2 +- .../contracts/l2/staking/IL2StakingTypes.sol | 2 +- .../contracts/rewards/IRewardsIssuer.sol | 2 +- .../contracts/rewards/IRewardsManager.sol | 2 +- .../contracts/staking/IHorizonStaking.sol | 166 ------------------ .../contracts/contracts/token/IGraphToken.sol | 2 +- .../contracts/upgrades/GraphProxy.sol | 2 +- .../contracts/upgrades/GraphProxyAdmin.sol | 2 +- .../contracts/upgrades/GraphProxyStorage.sol | 2 +- .../contracts/upgrades/IGraphProxy.sol | 2 +- .../contracts/contracts/utils/TokenUtils.sol | 8 +- .../contracts/data-service/GraphDirectory.sol | 2 +- .../contracts/interfaces/IGraphToken.sol | 43 ----- .../contracts/interfaces/IHorizonStaking.sol | 3 +- .../interfaces/IHorizonStakingBase.sol | 3 +- .../interfaces/IHorizonStakingExtension.sol | 3 +- .../interfaces/IHorizonStakingTypes.sol | 3 +- .../IStakingBackwardsCompatibility.sol | 3 +- .../contracts/libraries/TokenUtils.sol | 48 ----- .../contracts/payments/GraphPayments.sol | 4 +- .../contracts/payments/PaymentsEscrow.sol | 4 +- .../contracts/staking/HorizonStaking.sol | 4 +- .../staking/StakingBackwardsCompatibility.sol | 4 +- .../contracts/DisputeManager.sol | 4 +- 35 files changed, 43 insertions(+), 299 deletions(-) delete mode 100644 packages/contracts/contracts/staking/IHorizonStaking.sol delete mode 100644 packages/horizon/contracts/interfaces/IGraphToken.sol delete mode 100644 packages/horizon/contracts/libraries/TokenUtils.sol diff --git a/packages/contracts/contracts/base/IMulticall.sol b/packages/contracts/contracts/base/IMulticall.sol index 65d69d24e..3269f694b 100644 --- a/packages/contracts/contracts/base/IMulticall.sol +++ b/packages/contracts/contracts/base/IMulticall.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6; pragma abicoder v2; /** diff --git a/packages/contracts/contracts/base/Multicall.sol b/packages/contracts/contracts/base/Multicall.sol index eff2d3e28..49111840d 100644 --- a/packages/contracts/contracts/base/Multicall.sol +++ b/packages/contracts/contracts/base/Multicall.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6; pragma abicoder v2; import "./IMulticall.sol"; diff --git a/packages/contracts/contracts/curation/ICuration.sol b/packages/contracts/contracts/curation/ICuration.sol index 27d37f38c..b57efaf2a 100644 --- a/packages/contracts/contracts/curation/ICuration.sol +++ b/packages/contracts/contracts/curation/ICuration.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; /** * @title Curation Interface diff --git a/packages/contracts/contracts/epochs/IEpochManager.sol b/packages/contracts/contracts/epochs/IEpochManager.sol index f9a365b9c..5f02e3579 100644 --- a/packages/contracts/contracts/epochs/IEpochManager.sol +++ b/packages/contracts/contracts/epochs/IEpochManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; interface IEpochManager { // -- Configuration -- diff --git a/packages/contracts/contracts/gateway/ICallhookReceiver.sol b/packages/contracts/contracts/gateway/ICallhookReceiver.sol index 33b06ab5e..e869c7f4e 100644 --- a/packages/contracts/contracts/gateway/ICallhookReceiver.sol +++ b/packages/contracts/contracts/gateway/ICallhookReceiver.sol @@ -6,7 +6,7 @@ * be allowlisted by the governor, but also implement this interface that contains * the function that will actually be called by the L2GraphTokenGateway. */ -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; interface ICallhookReceiver { /** diff --git a/packages/contracts/contracts/governance/Controller.sol b/packages/contracts/contracts/governance/Controller.sol index 74854cbfe..9c369b0b7 100644 --- a/packages/contracts/contracts/governance/Controller.sol +++ b/packages/contracts/contracts/governance/Controller.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.7.6 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; import { IController } from "./IController.sol"; import { IManaged } from "./IManaged.sol"; diff --git a/packages/contracts/contracts/governance/Governed.sol b/packages/contracts/contracts/governance/Governed.sol index 570e2839c..0d1c1250b 100644 --- a/packages/contracts/contracts/governance/Governed.sol +++ b/packages/contracts/contracts/governance/Governed.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.7.6 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; /** * @title Graph Governance contract diff --git a/packages/contracts/contracts/governance/IController.sol b/packages/contracts/contracts/governance/IController.sol index 0549c723d..634c881d3 100644 --- a/packages/contracts/contracts/governance/IController.sol +++ b/packages/contracts/contracts/governance/IController.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; interface IController { function getGovernor() external view returns (address); diff --git a/packages/contracts/contracts/governance/IManaged.sol b/packages/contracts/contracts/governance/IManaged.sol index 4cedf9c0b..5ef387b5d 100644 --- a/packages/contracts/contracts/governance/IManaged.sol +++ b/packages/contracts/contracts/governance/IManaged.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; import { IController } from "./IController.sol"; diff --git a/packages/contracts/contracts/governance/Managed.sol b/packages/contracts/contracts/governance/Managed.sol index f0172dc94..fb65e71b9 100644 --- a/packages/contracts/contracts/governance/Managed.sol +++ b/packages/contracts/contracts/governance/Managed.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6; import { IController } from "./IController.sol"; diff --git a/packages/contracts/contracts/governance/Pausable.sol b/packages/contracts/contracts/governance/Pausable.sol index 1e9baf5fe..9ebf36a1c 100644 --- a/packages/contracts/contracts/governance/Pausable.sol +++ b/packages/contracts/contracts/governance/Pausable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.7.6 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; abstract contract Pausable { /** diff --git a/packages/contracts/contracts/l2/staking/IL2StakingBase.sol b/packages/contracts/contracts/l2/staking/IL2StakingBase.sol index 3926dd708..9ae4b850b 100644 --- a/packages/contracts/contracts/l2/staking/IL2StakingBase.sol +++ b/packages/contracts/contracts/l2/staking/IL2StakingBase.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; import { ICallhookReceiver } from "../../gateway/ICallhookReceiver.sol"; diff --git a/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol b/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol index 41d3fe445..2bc452a4a 100644 --- a/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol +++ b/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; interface IL2StakingTypes { /// @dev Message codes for the L1 -> L2 bridge callhook diff --git a/packages/contracts/contracts/rewards/IRewardsIssuer.sol b/packages/contracts/contracts/rewards/IRewardsIssuer.sol index bf2f8c430..67588aee3 100644 --- a/packages/contracts/contracts/rewards/IRewardsIssuer.sol +++ b/packages/contracts/contracts/rewards/IRewardsIssuer.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; interface IRewardsIssuer { /** diff --git a/packages/contracts/contracts/rewards/IRewardsManager.sol b/packages/contracts/contracts/rewards/IRewardsManager.sol index 2d2bd4003..5c4de5461 100644 --- a/packages/contracts/contracts/rewards/IRewardsManager.sol +++ b/packages/contracts/contracts/rewards/IRewardsManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; interface IRewardsManager { /** diff --git a/packages/contracts/contracts/staking/IHorizonStaking.sol b/packages/contracts/contracts/staking/IHorizonStaking.sol deleted file mode 100644 index b45aee1ac..000000000 --- a/packages/contracts/contracts/staking/IHorizonStaking.sol +++ /dev/null @@ -1,166 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity >=0.7.6 <0.9.0; -pragma abicoder v2; - -interface Test { - function test() external returns (uint256); -} - -interface IHorizonStaking { - struct Provision { - // Service provider that created the provision - address serviceProvider; - // tokens in the provision - uint256 tokens; - // delegated tokens in the provision - uint256 delegatedTokens; - // tokens that are being thawed (and will stop being slashable soon) - uint256 tokensThawing; - // timestamp of provision creation - uint64 createdAt; - // authority to slash the provision - address verifier; - // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed - uint32 maxVerifierCut; - // time, in seconds, tokens must thaw before being withdrawn - uint64 thawingPeriod; - } - - // the new "Indexer" struct - struct ServiceProviderInternal { - // Tokens on the Service Provider stake (staked by the provider) - uint256 tokensStaked; - // Tokens used in allocations - uint256 __DEPRECATED_tokensAllocated; - // Tokens locked for withdrawal subject to thawing period - uint256 __DEPRECATED_tokensLocked; - // Block when locked tokens can be withdrawn - uint256 __DEPRECATED_tokensLockedUntil; - // tokens used in a provision - uint256 tokensProvisioned; - // tokens that initiated a thawing in any one of the provider's provisions - uint256 tokensRequestedThaw; - // tokens that have been removed from any one of the provider's provisions after thawing - uint256 tokensFulfilledThaw; - // provisions that take priority for undelegation force thawing - bytes32[] forceThawProvisions; - } - - struct ServiceProvider { - // Tokens on the provider stake (staked by the provider) - uint256 tokensStaked; - // tokens used in a provision - uint256 tokensProvisioned; - // tokens that initiated a thawing in any one of the provider's provisions - uint256 tokensRequestedThaw; - // tokens that have been removed from any one of the provider's provisions after thawing - uint256 tokensFulfilledThaw; - // provisions that take priority for undelegation force thawing - bytes32[] forceThawProvisions; - } - - struct DelegationPool { - uint32 __DEPRECATED_cooldownBlocks; // solhint-disable-line var-name-mixedcase - uint32 __DEPRECATED_indexingRewardCut; // in PPM - uint32 __DEPRECATED_queryFeeCut; // in PPM - uint256 __DEPRECATED_updatedAtBlock; // Block when the pool was last updated - uint256 tokens; // Total tokens as pool reserves - uint256 shares; // Total shares minted in the pool - mapping(address => Delegation) delegators; // Mapping of delegator => Delegation - } - - struct Delegation { - // shares owned by the delegator in the pool - uint256 shares; - // tokens delegated to the pool - uint256 tokens; - // Timestamp when locked tokens can be undelegated (after the timelock) - uint256 tokensLockedUntil; - } - - struct ThawRequest { - // tokens that are being thawed by this request - uint256 tokens; - // the provision id to which this request corresponds to - bytes32 provisionId; - // the address that initiated the thaw request, allowed to remove the funds once thawed - address owner; - // the timestamp when the thawed funds can be removed from the provision - uint64 thawingUntil; - // the value of `ServiceProvider.tokensRequestedThaw` the moment the thaw request is created - uint256 tokensRequestedThawSnapshot; - } - - // whitelist/deny a verifier - function allowVerifier(address verifier, bool allow) external; - - // deposit stake - function stake(uint256 tokens) external; - - // create a provision - function provision(uint256 tokens, address verifier, uint32 maxVerifierCut, uint64 thawingPeriod) external; - - // accept a provision - function acceptProvision(address serviceProvider) external; - - // initiate a thawing to remove tokens from a provision - function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32 thawRequestId); - - // moves thawed stake from a provision back into the provider's available stake - function deprovision(bytes32 thawRequestId) external; - - // moves thawed stake from one provision into another provision - function reprovision(bytes32 thawRequestId, bytes32 provisionId) external; - - // moves thawed stake back to the owner's account - stake is removed from the protocol - function withdraw(bytes32 thawRequestId) external; - - // delegate tokens to a provider - function delegate(address serviceProvider, uint256 tokens) external; - - // undelegate tokens - function undelegate( - address serviceProvider, - uint256 tokens, - bytes32[] calldata provisions - ) external returns (bytes32 thawRequestId); - - // slash a service provider - function slash(address serviceProvider, uint256 tokens, uint256 reward, address rewardsDestination) external; - - // set the Service Provider's preferred provisions to be force thawed - function setForceThawProvisions(bytes32[] calldata provisions) external; - - // total staked tokens to the provider - // `ServiceProvider.tokensStaked + DelegationPool.serviceProvider.tokens` - function getStake(address serviceProvider) external view returns (uint256 tokens); - - // staked tokens that are currently not provisioned, aka idle stake - // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address serviceProvider) external view returns (uint256 tokens); - - // staked tokens the provider can provision before hitting the delegation cap - // `ServiceProvider.tokensStaked * Staking.delegationRatio - Provision.tokensProvisioned` - function getCapacity(address serviceProvider) external view returns (uint256 tokens); - - // provisioned tokens that are not being used - // `Provision.tokens - Provision.tokensThawing` - function getTokensAvailable(address serviceProvider, address verifier) external view returns (uint256 tokens); - - function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory); - - function getProvision(address serviceProvider, address verifier) external view returns (Provision memory); - - /** - * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param _operator The address to check for auth - * @param _serviceProvider The service provider on behalf of whom they're claiming to act - * @param _verifier The verifier / data service on which they're claiming to act - */ - function isAuthorized(address _operator, address _serviceProvider, address _verifier) external view returns (bool); - - function getDelegationCut(address serviceProvider, uint8 paymentType) external view returns (uint256 delegationCut); - function addToDelegationPool(address serviceProvider, uint256 tokens) external; - function stakeToProvision(address _serviceProvider, address _verifier, uint256 _tokens) external; -} diff --git a/packages/contracts/contracts/token/IGraphToken.sol b/packages/contracts/contracts/token/IGraphToken.sol index f24467d42..1342625df 100644 --- a/packages/contracts/contracts/token/IGraphToken.sol +++ b/packages/contracts/contracts/token/IGraphToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.7.6 <=0.9.0; +pragma solidity ^0.7.6 || 0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxy.sol b/packages/contracts/contracts/upgrades/GraphProxy.sol index c5c01ca8f..a95428f68 100644 --- a/packages/contracts/contracts/upgrades/GraphProxy.sol +++ b/packages/contracts/contracts/upgrades/GraphProxy.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; import { GraphProxyStorage } from "./GraphProxyStorage.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol b/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol index 8fb735901..0d3b075a5 100644 --- a/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol +++ b/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; import { Governed } from "../governance/Governed.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxyStorage.sol b/packages/contracts/contracts/upgrades/GraphProxyStorage.sol index 42e2a0545..9117ff54d 100644 --- a/packages/contracts/contracts/upgrades/GraphProxyStorage.sol +++ b/packages/contracts/contracts/upgrades/GraphProxyStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; /** * @title Graph Proxy Storage diff --git a/packages/contracts/contracts/upgrades/IGraphProxy.sol b/packages/contracts/contracts/upgrades/IGraphProxy.sol index cee1aadb0..59d4a323d 100644 --- a/packages/contracts/contracts/upgrades/IGraphProxy.sol +++ b/packages/contracts/contracts/upgrades/IGraphProxy.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; +pragma solidity ^0.7.6 || 0.8.24; interface IGraphProxy { function admin() external returns (address); diff --git a/packages/contracts/contracts/utils/TokenUtils.sol b/packages/contracts/contracts/utils/TokenUtils.sol index 09d9ed704..f33bc5c85 100644 --- a/packages/contracts/contracts/utils/TokenUtils.sol +++ b/packages/contracts/contracts/utils/TokenUtils.sol @@ -1,9 +1,15 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.7.6 <=0.8.24; +pragma solidity ^0.7.6 || 0.8.24; import "../token/IGraphToken.sol"; +/** + * @title TokenUtils library + * @notice This library contains utility functions for handling tokens (transfers and burns). + * It is specifically adapted for the GraphToken, so does not need to handle edge cases + * for other tokens. + */ library TokenUtils { /** * @dev Pull tokens from an address to this contract. diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index 3f50440b2..ae9f9cdaf 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.24; -import { IGraphToken } from "../interfaces/IGraphToken.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; diff --git a/packages/horizon/contracts/interfaces/IGraphToken.sol b/packages/horizon/contracts/interfaces/IGraphToken.sol deleted file mode 100644 index cb0b6cae6..000000000 --- a/packages/horizon/contracts/interfaces/IGraphToken.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity 0.8.24; - -import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -interface IGraphToken is IERC20 { - // -- Mint and Burn -- - - function burn(uint256 tokens) external; - - function burnFrom(address from, uint256 tokens) external; - - function mint(address to, uint256 tokens) external; - - // -- Mint Admin -- - - function addMinter(address account) external; - - function removeMinter(address account) external; - - function renounceMinter() external; - - // -- Permit -- - - function permit( - address owner, - address spender, - uint256 value, - uint256 deadline, - uint8 v, - bytes32 r, - bytes32 s - ) external; - - // -- Allowance -- - - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - - function isMinter(address account) external view returns (bool); -} diff --git a/packages/horizon/contracts/interfaces/IHorizonStaking.sol b/packages/horizon/contracts/interfaces/IHorizonStaking.sol index 2c9dab033..297ccdcbe 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStaking.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStaking.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; -pragma abicoder v2; +pragma solidity 0.8.24; import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; import { IHorizonStakingExtension } from "./IHorizonStakingExtension.sol"; diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol index 0b7409a64..9a7c480dc 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; -pragma abicoder v2; +pragma solidity 0.8.24; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol index 2cc79cdcb..99ff66677 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; -pragma abicoder v2; +pragma solidity 0.8.24; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; import { IGraphPayments } from "./IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol index f737d52ee..f95fff4c4 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; -pragma abicoder v2; +pragma solidity 0.8.24; // TODO: create custom var-name-mixedcase /* solhint-disable var-name-mixedcase */ diff --git a/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol b/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol index 088ee3776..bf5efbf0d 100644 --- a/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.12 <0.9.0; -pragma abicoder v2; +pragma solidity 0.8.24; /** * @title Base interface for the Staking contract. diff --git a/packages/horizon/contracts/libraries/TokenUtils.sol b/packages/horizon/contracts/libraries/TokenUtils.sol deleted file mode 100644 index 30903d6ae..000000000 --- a/packages/horizon/contracts/libraries/TokenUtils.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity 0.8.24; - -import { IGraphToken } from "../interfaces/IGraphToken.sol"; - -/** - * @title TokenUtils library - * @notice This library contains utility functions for handling tokens (transfers and burns). - * It is specifically adapted for the GraphToken, so does not need to handle edge cases - * for other tokens. - */ -library TokenUtils { - /** - * @dev Pull tokens from an address to this contract. - * @param _graphToken Token to transfer - * @param _from Address sending the tokens - * @param _tokens Amount of tokens to transfer - */ - function pullTokens(IGraphToken _graphToken, address _from, uint256 _tokens) internal { - if (_tokens > 0) { - require(_graphToken.transferFrom(_from, address(this), _tokens), "!transfer"); - } - } - - /** - * @dev Push tokens from this contract to a receiving address. - * @param _graphToken Token to transfer - * @param _to Address receiving the tokens - * @param _tokens Amount of tokens to transfer - */ - function pushTokens(IGraphToken _graphToken, address _to, uint256 _tokens) internal { - if (_tokens > 0) { - require(_graphToken.transfer(_to, _tokens), "!transfer"); - } - } - - /** - * @dev Burn tokens held by this contract. - * @param _graphToken Token to burn - * @param _tokens Amount of tokens to burn - */ - function burnTokens(IGraphToken _graphToken, uint256 _tokens) internal { - if (_tokens > 0) { - _graphToken.burn(_tokens); - } - } -} diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 44f56d553..2cf88e058 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphToken } from "../interfaces/IGraphToken.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; -import { TokenUtils } from "../libraries/TokenUtils.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { PPMMath } from "../libraries/PPMMath.sol"; import { GraphDirectory } from "../data-service/GraphDirectory.sol"; diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 6d7e82d11..90e69ae5f 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.24; -import { IGraphToken } from "../interfaces/IGraphToken.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; -import { TokenUtils } from "../libraries/TokenUtils.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { GraphDirectory } from "../data-service/GraphDirectory.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 64ab7e0c6..73707f623 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -3,11 +3,11 @@ pragma solidity 0.8.24; import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStakingBase } from "../interfaces/IHorizonStakingBase.sol"; -import { IGraphToken } from "../interfaces/IGraphToken.sol"; import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; -import { TokenUtils } from "../libraries/TokenUtils.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; import { PPMMath } from "../libraries/PPMMath.sol"; diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol index 7310f2d72..b0b46a9a5 100644 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol @@ -4,11 +4,11 @@ pragma solidity 0.8.24; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; -import { IGraphToken } from "../interfaces/IGraphToken.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; -import { TokenUtils } from "../libraries/TokenUtils.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; import { ExponentialRebates } from "./libraries/ExponentialRebates.sol"; import { PPMMath } from "../libraries/PPMMath.sol"; diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 12395625e..1e6f1452e 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.24; -import { IGraphToken } from "@graphprotocol/horizon/contracts/interfaces/IGraphToken.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; import { IDisputeManager } from "./interfaces/IDisputeManager.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; -import { TokenUtils } from "@graphprotocol/horizon/contracts/libraries/TokenUtils.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { Allocation } from "./libraries/Allocation.sol"; import { Attestation } from "./libraries/Attestation.sol"; From f4802b22c636efcf6f181935a750a70ecfb7b827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 23 May 2024 15:57:33 -0300 Subject: [PATCH 059/343] chore: pin solidity version to 0.8.24 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/contracts/data-service/DataService.sol | 2 +- .../horizon/contracts/data-service/DataServiceStorage.sol | 2 +- packages/horizon/contracts/data-service/GraphDirectory.sol | 4 ++-- .../contracts/data-service/extensions/DataServiceFees.sol | 2 +- .../data-service/extensions/DataServiceFeesStorage.sol | 2 +- .../data-service/extensions/DataServicePausable.sol | 2 +- .../data-service/extensions/DataServiceRescuable.sol | 2 +- .../contracts/data-service/extensions/IDataServiceFees.sol | 2 +- .../data-service/extensions/IDataServicePausable.sol | 2 +- .../data-service/extensions/IDataServiceRescuable.sol | 2 +- .../contracts/data-service/libraries/ProvisionGetter.sol | 2 +- .../contracts/data-service/libraries/ProvisionTracker.sol | 2 +- .../contracts/data-service/utilities/ProvisionManager.sol | 2 +- .../data-service/utilities/ProvisionManagerStorage.sol | 2 +- .../contracts/interfaces}/IBridgeEscrow.sol | 6 +++--- packages/horizon/contracts/interfaces/IDataService.sol | 2 +- packages/horizon/contracts/interfaces/IGraphPayments.sol | 2 +- .../contracts/interfaces}/IGraphProxyAdmin.sol | 0 packages/horizon/contracts/interfaces/IPaymentsEscrow.sol | 2 +- packages/horizon/contracts/interfaces/ITAPCollector.sol | 2 +- packages/horizon/contracts/libraries/Denominations.sol | 2 +- packages/horizon/contracts/libraries/PPMMath.sol | 2 +- packages/horizon/contracts/libraries/UintRange.sol | 2 +- packages/horizon/contracts/mocks/MockGRTToken.sol | 2 +- packages/horizon/contracts/payments/GraphPayments.sol | 2 +- .../horizon/contracts/payments/GraphPaymentsStorage.sol | 2 +- packages/horizon/contracts/payments/PaymentsEscrow.sol | 2 +- .../horizon/contracts/payments/collectors/TAPCollector.sol | 2 +- packages/horizon/test/GraphBase.t.sol | 2 +- packages/horizon/test/deployments/Deployments.t.sol | 2 +- packages/horizon/test/escrow/GraphEscrow.t.sol | 2 +- packages/horizon/test/escrow/collect.t.sol | 2 +- packages/horizon/test/escrow/collector.t.sol | 2 +- packages/horizon/test/escrow/deposit.t.sol | 2 +- packages/horizon/test/escrow/thaw.t.sol | 2 +- packages/horizon/test/escrow/withdraw.t.sol | 2 +- packages/horizon/test/payments/GraphPayments.t.sol | 2 +- .../test/shared/horizon-staking/HorizonStaking.t.sol | 2 +- packages/horizon/test/utils/Constants.sol | 2 +- packages/horizon/test/utils/Users.sol | 2 +- packages/subgraph-service/contracts/DisputeManager.sol | 2 +- .../subgraph-service/contracts/DisputeManagerStorage.sol | 2 +- packages/subgraph-service/contracts/SubgraphService.sol | 2 +- .../subgraph-service/contracts/SubgraphServiceStorage.sol | 2 +- .../contracts/interfaces/IDisputeManager.sol | 2 +- .../contracts/interfaces/ISubgraphService.sol | 2 +- .../subgraph-service/contracts/libraries/Allocation.sol | 2 +- .../subgraph-service/contracts/libraries/Attestation.sol | 2 +- .../contracts/libraries/LegacyAllocation.sol | 2 +- .../contracts/utilities/AllocationManager.sol | 2 +- .../contracts/utilities/AllocationManagerStorage.sol | 2 +- .../contracts/utilities/AttestationManager.sol | 2 +- .../contracts/utilities/AttestationManagerStorage.sol | 2 +- packages/subgraph-service/contracts/utilities/Directory.sol | 2 +- packages/subgraph-service/test/DisputeManager.t.sol | 2 +- packages/subgraph-service/test/mocks/MockGRTToken.sol | 2 +- packages/subgraph-service/test/mocks/MockHorizonStaking.sol | 2 +- packages/subgraph-service/test/mocks/MockRewardsManager.sol | 2 +- 58 files changed, 60 insertions(+), 60 deletions(-) rename packages/{contracts/contracts/gateway => horizon/contracts/interfaces}/IBridgeEscrow.sol (80%) rename packages/{contracts/contracts/upgrades => horizon/contracts/interfaces}/IGraphProxyAdmin.sol (100%) diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index 06c484aa2..79e62216f 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDataService } from "../interfaces/IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/DataServiceStorage.sol b/packages/horizon/contracts/data-service/DataServiceStorage.sol index 3cb7e0b86..92e73e690 100644 --- a/packages/horizon/contracts/data-service/DataServiceStorage.sol +++ b/packages/horizon/contracts/data-service/DataServiceStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; abstract contract DataServiceV1Storage { /// @dev Gap to allow adding variables in future upgrades diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index ae9f9cdaf..6171e06c8 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -11,8 +11,8 @@ import { IController } from "@graphprotocol/contracts/contracts/governance/ICont import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; import { ITokenGateway } from "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol"; -import { IBridgeEscrow } from "@graphprotocol/contracts/contracts/gateway/IBridgeEscrow.sol"; -import { IGraphProxyAdmin } from "@graphprotocol/contracts/contracts/upgrades/IGraphProxyAdmin.sol"; +import { IBridgeEscrow } from "../interfaces/IBridgeEscrow.sol"; +import { IGraphProxyAdmin } from "../interfaces/IGraphProxyAdmin.sol"; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 2ea9ffe2c..b61526cf7 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDataServiceFees } from "./IDataServiceFees.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index 4296a952a..a55a393e3 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDataServiceFees } from "./IDataServiceFees.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index ab0ec97c3..dc35d5f8a 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDataServicePausable } from "./IDataServicePausable.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index 45a1cd4f9..fd790dae3 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { IDataServiceRescuable } from "./IDataServiceRescuable.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol index fe75755fe..58f9f876f 100644 --- a/packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDataService } from "../../interfaces/IDataService.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol index 302e8a67e..6996c2bcf 100644 --- a/packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDataService } from "../../interfaces/IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol index 18eee452d..e8075dab5 100644 --- a/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDataService } from "../../interfaces/IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol b/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol index 6fdf1e2c4..f0ef2d382 100644 --- a/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol index f0acc7f89..cc86b71e3 100644 --- a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 54a24b9bc..f13adecf8 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol index 2f129adef..6e62d134c 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; abstract contract ProvisionManagerV1Storage { /// @notice The minimum amount of tokens required to register a provision in the data service diff --git a/packages/contracts/contracts/gateway/IBridgeEscrow.sol b/packages/horizon/contracts/interfaces/IBridgeEscrow.sol similarity index 80% rename from packages/contracts/contracts/gateway/IBridgeEscrow.sol rename to packages/horizon/contracts/interfaces/IBridgeEscrow.sol index 733288e9c..372f8ba0c 100644 --- a/packages/contracts/contracts/gateway/IBridgeEscrow.sol +++ b/packages/horizon/contracts/interfaces/IBridgeEscrow.sol @@ -10,17 +10,17 @@ interface IBridgeEscrow { * @notice Initialize the BridgeEscrow contract. * @param _controller Address of the Controller that manages this contract */ - function initialize(address _controller) external; + function initialize(address ontroller) external; /** * @notice Approve a spender (i.e. a bridge that manages the GRT funds held by the escrow) * @param _spender Address of the spender that will be approved */ - function approveAll(address _spender) external; + function approveAll(address sender) external; /** * @notice Revoke a spender (i.e. a bridge that will no longer manage the GRT funds held by the escrow) * @param _spender Address of the spender that will be revoked */ - function revokeAll(address _spender) external; + function revokeAll(address spnder) external; } diff --git a/packages/horizon/contracts/interfaces/IDataService.sol b/packages/horizon/contracts/interfaces/IDataService.sol index e6ca8fabe..7b401e533 100644 --- a/packages/horizon/contracts/interfaces/IDataService.sol +++ b/packages/horizon/contracts/interfaces/IDataService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IGraphPayments } from "./IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index acad67e99..bb0274b2d 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; interface IGraphPayments { // Payment types diff --git a/packages/contracts/contracts/upgrades/IGraphProxyAdmin.sol b/packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol similarity index 100% rename from packages/contracts/contracts/upgrades/IGraphProxyAdmin.sol rename to packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index de3f0af06..20b10491f 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IGraphPayments } from "./IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index 217f7a1a6..90b2c53dd 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IPaymentsCollector } from "./IPaymentsCollector.sol"; diff --git a/packages/horizon/contracts/libraries/Denominations.sol b/packages/horizon/contracts/libraries/Denominations.sol index a5f543fb2..201051447 100644 --- a/packages/horizon/contracts/libraries/Denominations.sol +++ b/packages/horizon/contracts/libraries/Denominations.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; /** * @title Denominations diff --git a/packages/horizon/contracts/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol index 2129f4a96..3eb3a5b69 100644 --- a/packages/horizon/contracts/libraries/PPMMath.sol +++ b/packages/horizon/contracts/libraries/PPMMath.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; library PPMMath { /// @notice Maximum value (100%) in parts per million (PPM). diff --git a/packages/horizon/contracts/libraries/UintRange.sol b/packages/horizon/contracts/libraries/UintRange.sol index f98714d25..d8265e35f 100644 --- a/packages/horizon/contracts/libraries/UintRange.sol +++ b/packages/horizon/contracts/libraries/UintRange.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; library UintRange { using UintRange for uint256; diff --git a/packages/horizon/contracts/mocks/MockGRTToken.sol b/packages/horizon/contracts/mocks/MockGRTToken.sol index 7d7e1cc9e..af50cbdfd 100644 --- a/packages/horizon/contracts/mocks/MockGRTToken.sol +++ b/packages/horizon/contracts/mocks/MockGRTToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 2cf88e058..bab59365d 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol index 09a8691d8..f05499249 100644 --- a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol +++ b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; contract GraphPaymentsStorageV1Storage { // The graph protocol payment cut diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 90e69ae5f..fd30bd758 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 1a0a66ab7..94f601ad5 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; import { ITAPCollector } from "../../interfaces/ITAPCollector.sol"; diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 3055c9245..b45797fdf 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/deployments/Deployments.t.sol b/packages/horizon/test/deployments/Deployments.t.sol index 3af5e027c..2832bc69b 100644 --- a/packages/horizon/test/deployments/Deployments.t.sol +++ b/packages/horizon/test/deployments/Deployments.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index fffa82830..c4041be16 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 237e3230c..7317f9c0e 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index 9274f6f9d..1e3fd3fb8 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/deposit.t.sol b/packages/horizon/test/escrow/deposit.t.sol index 8a83043e2..05c6d557d 100644 --- a/packages/horizon/test/escrow/deposit.t.sol +++ b/packages/horizon/test/escrow/deposit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index 287400d8f..72a1fc176 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/withdraw.t.sol b/packages/horizon/test/escrow/withdraw.t.sol index be47fea83..6d70b64f7 100644 --- a/packages/horizon/test/escrow/withdraw.t.sol +++ b/packages/horizon/test/escrow/withdraw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index a584ed09d..655700c6a 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol index 4dbddde97..464665d51 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index ff7f77dfb..44ed15fdf 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; abstract contract Constants { uint256 internal constant MAX_PPM = 1000000; // 100% in parts per million diff --git a/packages/horizon/test/utils/Users.sol b/packages/horizon/test/utils/Users.sol index 39f1a2a5f..a834e18a9 100644 --- a/packages/horizon/test/utils/Users.sol +++ b/packages/horizon/test/utils/Users.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; struct Users { address governor; diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 1e6f1452e..9eda3f42d 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; diff --git a/packages/subgraph-service/contracts/DisputeManagerStorage.sol b/packages/subgraph-service/contracts/DisputeManagerStorage.sol index e3af4bf53..c90ef885d 100644 --- a/packages/subgraph-service/contracts/DisputeManagerStorage.sol +++ b/packages/subgraph-service/contracts/DisputeManagerStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDisputeManager } from "./interfaces/IDisputeManager.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index dd4c92d10..b252346a5 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol index 671279989..3904b7ba4 100644 --- a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index e9880944d..8c3df586d 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { Attestation } from "../libraries/Attestation.sol"; diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index e1f85ec25..52561fb74 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDataServiceFees } from "@graphprotocol/horizon/contracts/data-service/extensions/IDataServiceFees.sol"; diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index 8543b4f57..5d7dd4f82 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; library Allocation { using Allocation for State; diff --git a/packages/subgraph-service/contracts/libraries/Attestation.sol b/packages/subgraph-service/contracts/libraries/Attestation.sol index 1ff99b0e3..de85d9ca0 100644 --- a/packages/subgraph-service/contracts/libraries/Attestation.sol +++ b/packages/subgraph-service/contracts/libraries/Attestation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; library Attestation { // Receipt content sent from the service provider in response to request diff --git a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol index bef060e8b..18b5bdb1e 100644 --- a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol +++ b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; library LegacyAllocation { using LegacyAllocation for State; diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index b57ef7f97..4423473ea 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol index c737acabf..525c83b54 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AttestationManager.sol b/packages/subgraph-service/contracts/utilities/AttestationManager.sol index 2c1e18150..54b538c89 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { AttestationManagerV1Storage } from "./AttestationManagerStorage.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol index 80aa0388f..2841334ff 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; abstract contract AttestationManagerV1Storage { bytes32 internal _domainSeparator; diff --git a/packages/subgraph-service/contracts/utilities/Directory.sol b/packages/subgraph-service/contracts/utilities/Directory.sol index f4e756cf6..ca7a45a73 100644 --- a/packages/subgraph-service/contracts/utilities/Directory.sol +++ b/packages/subgraph-service/contracts/utilities/Directory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import { IDisputeManager } from "../interfaces/IDisputeManager.sol"; import { ISubgraphService } from "../interfaces/ISubgraphService.sol"; diff --git a/packages/subgraph-service/test/DisputeManager.t.sol b/packages/subgraph-service/test/DisputeManager.t.sol index fea4d3ed7..64838c6bb 100644 --- a/packages/subgraph-service/test/DisputeManager.t.sol +++ b/packages/subgraph-service/test/DisputeManager.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/mocks/MockGRTToken.sol b/packages/subgraph-service/test/mocks/MockGRTToken.sol index 11cf5c0f8..cab52fb35 100644 --- a/packages/subgraph-service/test/mocks/MockGRTToken.sol +++ b/packages/subgraph-service/test/mocks/MockGRTToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol index 7b21f25a1..13281fa6e 100644 --- a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol +++ b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol index f2447c7c4..c98b60ca7 100644 --- a/packages/subgraph-service/test/mocks/MockRewardsManager.sol +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.24; import "forge-std/Test.sol"; From a390aea68fce24002633bc3f1f2f62aa1010a495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 12:24:59 -0300 Subject: [PATCH 060/343] Tmigone/horizon staking revamp (#973) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: typos Signed-off-by: Tomás Migone * chore: refactor HorizonStaking Signed-off-by: Tomás Migone --------- Signed-off-by: Tomás Migone --- .../contracts/interfaces/IBridgeEscrow.sol | 12 +- .../contracts/interfaces/IHorizonStaking.sol | 5 +- .../interfaces/IHorizonStakingBase.sol | 228 ++----- .../interfaces/IHorizonStakingExtension.sol | 188 ++++-- .../interfaces/IHorizonStakingMain.sol | 252 ++++++++ .../IStakingBackwardsCompatibility.sol | 189 ------ .../contracts/staking/HorizonStaking.sol | 149 ++--- .../contracts/staking/HorizonStakingBase.sol | 200 +++++++ .../staking/HorizonStakingExtension.sol | 558 ++++++++++++++---- .../staking/HorizonStakingStorage.sol | 5 +- .../staking/StakingBackwardsCompatibility.sol | 482 --------------- packages/horizon/hardhat.config.ts | 1 + packages/horizon/package.json | 1 + yarn.lock | 1 + 14 files changed, 1121 insertions(+), 1150 deletions(-) create mode 100644 packages/horizon/contracts/interfaces/IHorizonStakingMain.sol delete mode 100644 packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol create mode 100644 packages/horizon/contracts/staking/HorizonStakingBase.sol delete mode 100644 packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol diff --git a/packages/horizon/contracts/interfaces/IBridgeEscrow.sol b/packages/horizon/contracts/interfaces/IBridgeEscrow.sol index 372f8ba0c..19a13a0f2 100644 --- a/packages/horizon/contracts/interfaces/IBridgeEscrow.sol +++ b/packages/horizon/contracts/interfaces/IBridgeEscrow.sol @@ -8,19 +8,19 @@ pragma solidity 0.8.24; interface IBridgeEscrow { /** * @notice Initialize the BridgeEscrow contract. - * @param _controller Address of the Controller that manages this contract + * @param controller Address of the Controller that manages this contract */ - function initialize(address ontroller) external; + function initialize(address controller) external; /** * @notice Approve a spender (i.e. a bridge that manages the GRT funds held by the escrow) - * @param _spender Address of the spender that will be approved + * @param spender Address of the spender that will be approved */ - function approveAll(address sender) external; + function approveAll(address spender) external; /** * @notice Revoke a spender (i.e. a bridge that will no longer manage the GRT funds held by the escrow) - * @param _spender Address of the spender that will be revoked + * @param spender Address of the spender that will be revoked */ - function revokeAll(address spnder) external; + function revokeAll(address spender) external; } diff --git a/packages/horizon/contracts/interfaces/IHorizonStaking.sol b/packages/horizon/contracts/interfaces/IHorizonStaking.sol index 297ccdcbe..96560f7a3 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStaking.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStaking.sol @@ -2,7 +2,8 @@ pragma solidity 0.8.24; -import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; +import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; +import { IHorizonStakingMain } from "./IHorizonStakingMain.sol"; import { IHorizonStakingExtension } from "./IHorizonStakingExtension.sol"; -interface IHorizonStaking is IHorizonStakingBase, IHorizonStakingExtension {} +interface IHorizonStaking is IHorizonStakingTypes, IHorizonStakingMain, IHorizonStakingExtension {} diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol index 9a7c480dc..a5f6e4fa4 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol @@ -3,229 +3,67 @@ pragma solidity 0.8.24; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; +import { IGraphPayments } from "./IGraphPayments.sol"; -interface IHorizonStakingBase is IHorizonStakingTypes { +interface IHorizonStakingBase { /** * @dev Emitted when `serviceProvider` stakes `tokens` amount. + * @dev TODO(after transition period): move to IHorizonStakingMain */ event StakeDeposited(address indexed serviceProvider, uint256 tokens); /** - * @dev Emitted when `serviceProvider` withdraws `tokens` amount. + * @dev Emitted when `delegator` delegated `tokens` to the `serviceProvider`, the delegator + * gets `shares` for the delegation pool proportionally to the tokens staked. + * This event is here for backwards compatibility, the tokens are delegated + * on the subgraph data service provision. + * @dev TODO(after transition period): move to IHorizonStakingMain */ - event StakeWithdrawn(address indexed serviceProvider, uint256 tokens); + event StakeDelegated(address indexed serviceProvider, address indexed delegator, uint256 tokens, uint256 shares); - /** - * @dev Emitted when `serviceProvider` locks `tokens` amount until `until`. - */ - event StakeLocked(address indexed serviceProvider, uint256 tokens, uint256 until); - - /** - * @dev Emitted when a service provider provisions staked tokens to a verifier - */ - event ProvisionCreated( - address indexed serviceProvider, - address indexed verifier, - uint256 tokens, - uint32 maxVerifierCut, - uint64 thawingPeriod - ); - - /** - * @dev Emitted when a service provider increases the tokens in a provision - */ - event ProvisionIncreased(address indexed serviceProvider, address indexed verifier, uint256 tokens); - - /** - * @dev Emitted when a thawing request is initiated by a service provider - */ - event ProvisionThawInitiated( - address indexed serviceProvider, - address indexed verifier, - uint256 tokens, - uint64 thawingUntil, - bytes32 indexed thawRequestId - ); + function getStake(address serviceProvider) external view returns (uint256); - /** - * @dev Emitted when a service provider removes tokens from a provision after thawing - */ - event ProvisionThawFulfilled( - address indexed serviceProvider, - address indexed verifier, - uint256 tokens, - bytes32 indexed thawRequestId - ); - - event ProvisionSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens); - - event DelegationSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens); - - event DelegationSlashingSkipped(address indexed serviceProvider, address indexed verifier, uint256 tokens); - - event VerifierTokensSent( - address indexed serviceProvider, - address indexed verifier, - address indexed destination, - uint256 tokens - ); - - event TokensDelegated( - address indexed serviceProvider, - address indexed verifier, - address indexed delegator, - uint256 tokens - ); - - event TokensUndelegated( - address indexed serviceProvider, - address indexed verifier, - address indexed delegator, - uint256 tokens - ); - - event DelegatedTokensWithdrawn( - address indexed serviceProvider, - address indexed verifier, - address indexed delegator, - uint256 tokens - ); - - event DelegationSlashingEnabled(bool enabled); - - event AllowedLockedVerifierSet(address verifier, bool allowed); - - event TokensAddedToDelegationPool(address indexed serviceProvider, address indexed verifier, uint256 tokens); - - event ProvisionParametersStaged( - address indexed serviceProvider, - address indexed verifier, - uint32 maxVerifierCut, - uint64 thawingPeriod - ); - - event ProvisionParametersSet( - address indexed serviceProvider, - address indexed verifier, - uint32 maxVerifierCut, - uint64 thawingPeriod - ); - - // deposit stake - function stake(uint256 tokens) external; - - function stakeTo(address serviceProvider, uint256 tokens) external; - - // can be called by anyone if the service provider has provisioned stake to this verifier - function stakeToProvision(address serviceProvider, address verifier, uint256 tokens) external; - - // create a provision - function provision( - address serviceProvider, - address verifier, - uint256 tokens, - uint32 maxVerifierCut, - uint64 thawingPeriod - ) external; + function getDelegatedTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); - /** - * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets). The tokens will be locked with a thawing period - * and will be slashable by the verifier. This is the main mechanism to provision stake to a data - * service, where the data service is the verifier. Only authorized verifiers can be used. - * This function can be called by the service provider or by an operator authorized by the provider - * for this specific verifier. - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) - * @param tokens The amount of tokens that will be locked and slashable - * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing - * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision - */ - function provisionLocked( + function getTokensAvailable( address serviceProvider, address verifier, - uint256 tokens, - uint32 maxVerifierCut, - uint64 thawingPeriod - ) external; - - // initiate a thawing to remove tokens from a provision - function thaw(address serviceProvider, address verifier, uint256 tokens) external returns (bytes32); + uint32 delegationRatio + ) external view returns (uint256); - // add more tokens from idle stake to an existing provision - function addToProvision(address serviceProvider, address verifier, uint256 tokens) external; + function getServiceProvider( + address serviceProvider + ) external view returns (IHorizonStakingTypes.ServiceProvider memory); - // moves thawed stake from a provision back into the provider's available stake - function deprovision(address serviceProvider, address verifier, uint256 tokens) external; + function getMaxThawingPeriod() external view returns (uint64); - // moves thawed stake from one provision into another provision - function reprovision(address serviceProvider, address oldVerifier, address newVerifier, uint256 tokens) external; - - // moves thawed stake back to the owner's account - stake is removed from the protocol - function unstake(uint256 tokens) external; - - // delegate tokens to a provider on a data service - function delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) external; - - // undelegate (thaw) delegated tokens from a provision - function undelegate(address serviceProvider, address verifier, uint256 shares) external; - - // withdraw delegated tokens after thawing - function withdrawDelegated( + function getDelegationPool( address serviceProvider, - address verifier, - address newServiceProvider, - uint256 minSharesForNewProvider - ) external; + address verifier + ) external view returns (IHorizonStakingTypes.DelegationPool memory); - function slash( + function getDelegation( + address delegator, address serviceProvider, - uint256 tokens, - uint256 tokensVerifier, - address verifierDestination - ) external; - - /** - * @notice Withdraw service provider tokens once the thawing period has passed. - * @dev This is only needed during the transition period while we still have - * a global lock. After that, unstake() will also withdraw. - */ - function withdraw() external; - - function setDelegationSlashingEnabled(bool enabled) external; + address verifier + ) external view returns (IHorizonStakingTypes.Delegation memory); - function setMaxThawingPeriod(uint64 maxThawingPeriod) external; + function getThawRequest(bytes32 thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory); - function setAllowedLockedVerifier(address verifier, bool allowed) external; - - /** - * @notice Add tokens to a delegation pool (without getting shares). - * Used by data services to pay delegation fees/rewards. - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned - * @param tokens The amount of tokens to add to the delegation pool - */ - function addToDelegationPool(address serviceProvider, address verifier, uint256 tokens) external; + function getProvision( + address serviceProvider, + address verifier + ) external view returns (IHorizonStakingTypes.Provision memory); - function setProvisionParameters( + function getDelegationFeeCut( address serviceProvider, address verifier, - uint32 maxVerifierCut, - uint64 thawingPeriod - ) external; - - function acceptProvisionParameters(address serviceProvider) external; + IGraphPayments.PaymentTypes paymentType + ) external view returns (uint256); // staked tokens that are currently not provisioned, aka idle stake // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` function getIdleStake(address serviceProvider) external view returns (uint256 tokens); - /** - * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param operator The address to check for auth - * @param serviceProvider The service provider on behalf of whom they're claiming to act - * @param verifier The verifier / data service on which they're claiming to act - */ - function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); - function getProviderTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); } diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol index 99ff66677..992ad7069 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol @@ -2,69 +2,165 @@ pragma solidity 0.8.24; -import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; -import { IGraphPayments } from "./IGraphPayments.sol"; +/** + * @title Base interface for the Staking contract. + * @dev This interface includes only what's implemented in the base Staking contract. + * It does not include the L1 and L2 specific functionality. It also does not include + * several functions that are implemented in the StakingExtension contract, and are called + * via delegatecall through the fallback function. See IStaking.sol for an interface + * that includes the full functionality. + */ +interface IHorizonStakingExtension { + /** + * @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment + * An allocation is created in the allocate() function and closed in closeAllocation() + */ + struct Allocation { + address indexer; + bytes32 subgraphDeploymentID; + uint256 tokens; // Tokens allocated to a SubgraphDeployment + uint256 createdAtEpoch; // Epoch when it was created + uint256 closedAtEpoch; // Epoch when it was closed + uint256 collectedFees; // Collected fees for the allocation + uint256 DEPRECATED_effectiveAllocation; // solhint-disable-line var-name-mixedcase + uint256 accRewardsPerAllocatedToken; // Snapshot used for reward calc + uint256 distributedRebates; // Collected rebates that have been rebated + } -interface IHorizonStakingExtension is IHorizonStakingTypes { /** - * @dev Emitted when an operator is allowed or denied by a service provider for a particular data service + * @dev Possible states an allocation can be. + * States: + * - Null = indexer == address(0) + * - Active = not Null && tokens > 0 + * - Closed = Active && closedAtEpoch != 0 */ - event OperatorSet(address indexed serviceProvider, address indexed operator, address verifier, bool allowed); + enum AllocationState { + Null, + Active, + Closed + } - event DelegationFeeCutSet( - address indexed serviceProvider, - address indexed verifier, - IGraphPayments.PaymentTypes paymentType, - uint256 feeCut + /** + * @dev Emitted when `indexer` close an allocation in `epoch` for `allocationID`. + * An amount of `tokens` get unallocated from `subgraphDeploymentID`. + * This event also emits the POI (proof of indexing) submitted by the indexer. + * `isPublic` is true if the sender was someone other than the indexer. + */ + event AllocationClosed( + address indexed indexer, + bytes32 indexed subgraphDeploymentID, + uint256 epoch, + uint256 tokens, + address indexed allocationID, + address sender, + bytes32 poi, + bool isPublic ); /** - * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. - * @param operator Address to authorize or unauthorize - * @param verifier The verifier / data service on which they'll be allowed to operate - * @param allowed Whether the operator is authorized or not + * @dev Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`. + * `epoch` is the protocol epoch the rebate was collected on + * The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees` + * is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt. + * `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected + * and sent to the delegation pool. */ - function setOperator(address operator, address verifier, bool allowed) external; - - // for vesting contracts - function setOperatorLocked(address operator, address verifier, bool allowed) external; + event RebateCollected( + address assetHolder, + address indexed indexer, + bytes32 indexed subgraphDeploymentID, + address indexed allocationID, + uint256 epoch, + uint256 tokens, + uint256 protocolTax, + uint256 curationFees, + uint256 queryFees, + uint256 queryRebates, + uint256 delegationRewards + ); - function setDelegationFeeCut( - address serviceProvider, - address verifier, - IGraphPayments.PaymentTypes paymentType, - uint256 feeCut - ) external; + /** + * @dev Emitted when `indexer` set `operator` access in the legacy contract, + * which now means only for the subgraph data service. + */ + event SetOperator(address indexed indexer, address indexed operator, bool allowed); - function getStake(address serviceProvider) external view returns (uint256); + /** + * @notice Set the address of the counterpart (L1 or L2) staking contract. + * @dev This function can only be called by the governor. + * @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing. + */ + function setCounterpartStakingAddress(address counterpart) external; - function getDelegatedTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); + /** + * @notice Close an allocation and free the staked tokens. + * To be eligible for rewards a proof of indexing must be presented. + * Presenting a bad proof is subject to slashable condition. + * To opt out of rewards set _poi to 0x0 + * @param allocationID The allocation identifier + * @param poi Proof of indexing submitted for the allocated period + */ + function closeAllocation(address allocationID, bytes32 poi) external; - function getTokensAvailable( - address serviceProvider, - address verifier, - uint32 delegationRatio - ) external view returns (uint256); + /** + * @notice Collect query fees from state channels and assign them to an allocation. + * Funds received are only accepted from a valid sender. + * @dev To avoid reverting on the withdrawal from channel flow this function will: + * 1) Accept calls with zero tokens. + * 2) Accept calls after an allocation passed the dispute period, in that case, all + * the received tokens are burned. + * @param tokens Amount of tokens to collect + * @param allocationID Allocation where the tokens will be assigned + */ + function collect(uint256 tokens, address allocationID) external; - function getServiceProvider(address serviceProvider) external view returns (ServiceProvider memory); + /** + * @notice Return true if operator is allowed for indexer. + * @param operator Address of the operator + * @param indexer Address of the indexer + * @return True if operator is allowed for indexer, false otherwise + */ + function isOperator(address operator, address indexer) external view returns (bool); - function getMaxThawingPeriod() external view returns (uint64); + /** + * @notice Getter that returns if an indexer has any stake. + * @param indexer Address of the indexer + * @return True if indexer has staked tokens + */ + function hasStake(address indexer) external view returns (bool); - function getDelegationPool(address serviceProvider, address verifier) external view returns (DelegationPool memory); + /** + * @notice Get the total amount of tokens staked by the indexer. + * @param indexer Address of the indexer + * @return Amount of tokens staked by the indexer + */ + function getIndexerStakedTokens(address indexer) external view returns (uint256); - function getDelegation( - address delegator, - address serviceProvider, - address verifier - ) external view returns (Delegation memory); + /** + * @notice Return the allocation by ID. + * @param allocationID Address used as allocation identifier + * @return Allocation data + */ + function getAllocation(address allocationID) external view returns (Allocation memory); - function getThawRequest(bytes32 thawRequestId) external view returns (ThawRequest memory); + /** + * @notice Return the current state of an allocation + * @param allocationID Allocation identifier + * @return AllocationState enum with the state of the allocation + */ + function getAllocationState(address allocationID) external view returns (AllocationState); - function getProvision(address serviceProvider, address verifier) external view returns (Provision memory); + /** + * @notice Return if allocationID is used. + * @param allocationID Address used as signer by the indexer for an allocation + * @return True if allocationID already used + */ + function isAllocation(address allocationID) external view returns (bool); - function getDelegationFeeCut( - address serviceProvider, - address verifier, - IGraphPayments.PaymentTypes paymentType - ) external view returns (uint256); + /** + * @notice Return the total amount of tokens allocated to subgraph. + * @param subgraphDeploymentID Deployment ID for the subgraph + * @return Total tokens allocated to subgraph + */ + function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentID) external view returns (uint256); } diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/IHorizonStakingMain.sol new file mode 100644 index 000000000..8146ed5cb --- /dev/null +++ b/packages/horizon/contracts/interfaces/IHorizonStakingMain.sol @@ -0,0 +1,252 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; +import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; + +interface IHorizonStakingMain is IHorizonStakingBase { + /** + * @dev Emitted when `serviceProvider` withdraws `tokens` amount. + */ + event StakeWithdrawn(address indexed serviceProvider, uint256 tokens); + + /** + * @dev Emitted when `serviceProvider` locks `tokens` amount until `until`. + */ + event StakeLocked(address indexed serviceProvider, uint256 tokens, uint256 until); + + /** + * @dev Emitted when a service provider provisions staked tokens to a verifier + */ + event ProvisionCreated( + address indexed serviceProvider, + address indexed verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ); + + /** + * @dev Emitted when a service provider increases the tokens in a provision + */ + event ProvisionIncreased(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + /** + * @dev Emitted when a thawing request is initiated by a service provider + */ + event ProvisionThawInitiated( + address indexed serviceProvider, + address indexed verifier, + uint256 tokens, + uint64 thawingUntil, + bytes32 indexed thawRequestId + ); + + /** + * @dev Emitted when a service provider removes tokens from a provision after thawing + */ + event ProvisionThawFulfilled( + address indexed serviceProvider, + address indexed verifier, + uint256 tokens, + bytes32 indexed thawRequestId + ); + + event ProvisionSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + event DelegationSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + event DelegationSlashingSkipped(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + event VerifierTokensSent( + address indexed serviceProvider, + address indexed verifier, + address indexed destination, + uint256 tokens + ); + + event TokensDelegated( + address indexed serviceProvider, + address indexed verifier, + address indexed delegator, + uint256 tokens + ); + + event TokensUndelegated( + address indexed serviceProvider, + address indexed verifier, + address indexed delegator, + uint256 tokens + ); + + event DelegatedTokensWithdrawn( + address indexed serviceProvider, + address indexed verifier, + address indexed delegator, + uint256 tokens + ); + + event DelegationSlashingEnabled(bool enabled); + + event AllowedLockedVerifierSet(address verifier, bool allowed); + + event TokensAddedToDelegationPool(address indexed serviceProvider, address indexed verifier, uint256 tokens); + + event ProvisionParametersStaged( + address indexed serviceProvider, + address indexed verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ); + + event ProvisionParametersSet( + address indexed serviceProvider, + address indexed verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ); + + /** + * @dev Emitted when an operator is allowed or denied by a service provider for a particular data service + */ + event OperatorSet(address indexed serviceProvider, address indexed operator, address verifier, bool allowed); + + event DelegationFeeCutSet( + address indexed serviceProvider, + address indexed verifier, + IGraphPayments.PaymentTypes paymentType, + uint256 feeCut + ); + + // deposit stake + function stake(uint256 tokens) external; + + function stakeTo(address serviceProvider, uint256 tokens) external; + + // can be called by anyone if the service provider has provisioned stake to this verifier + function stakeToProvision(address serviceProvider, address verifier, uint256 tokens) external; + + // create a provision + function provision( + address serviceProvider, + address verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external; + + /** + * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets). The tokens will be locked with a thawing period + * and will be slashable by the verifier. This is the main mechanism to provision stake to a data + * service, where the data service is the verifier. Only authorized verifiers can be used. + * This function can be called by the service provider or by an operator authorized by the provider + * for this specific verifier. + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) + * @param tokens The amount of tokens that will be locked and slashable + * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing + * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + */ + function provisionLocked( + address serviceProvider, + address verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external; + + // initiate a thawing to remove tokens from a provision + function thaw(address serviceProvider, address verifier, uint256 tokens) external returns (bytes32); + + // add more tokens from idle stake to an existing provision + function addToProvision(address serviceProvider, address verifier, uint256 tokens) external; + + // moves thawed stake from a provision back into the provider's available stake + function deprovision(address serviceProvider, address verifier, uint256 tokens) external; + + // moves thawed stake from one provision into another provision + function reprovision(address serviceProvider, address oldVerifier, address newVerifier, uint256 tokens) external; + + // moves thawed stake back to the owner's account - stake is removed from the protocol + function unstake(uint256 tokens) external; + + // delegate tokens to a provider on a data service + function delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) external; + + // undelegate (thaw) delegated tokens from a provision + function undelegate(address serviceProvider, address verifier, uint256 shares) external; + + // withdraw delegated tokens after thawing + function withdrawDelegated( + address serviceProvider, + address verifier, + address newServiceProvider, + uint256 minSharesForNewProvider + ) external; + + function slash( + address serviceProvider, + uint256 tokens, + uint256 tokensVerifier, + address verifierDestination + ) external; + + /** + * @notice Withdraw service provider tokens once the thawing period has passed. + * @dev This is only needed during the transition period while we still have + * a global lock. After that, unstake() will also withdraw. + */ + function withdraw() external; + + function setDelegationSlashingEnabled(bool enabled) external; + + function setMaxThawingPeriod(uint64 maxThawingPeriod) external; + + function setAllowedLockedVerifier(address verifier, bool allowed) external; + + /** + * @notice Add tokens to a delegation pool (without getting shares). + * Used by data services to pay delegation fees/rewards. + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + * @param tokens The amount of tokens to add to the delegation pool + */ + function addToDelegationPool(address serviceProvider, address verifier, uint256 tokens) external; + + function setProvisionParameters( + address serviceProvider, + address verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external; + + function acceptProvisionParameters(address serviceProvider) external; + + /** + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param operator The address to check for auth + * @param serviceProvider The service provider on behalf of whom they're claiming to act + * @param verifier The verifier / data service on which they're claiming to act + */ + function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); + + /** + * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * @param operator Address to authorize or unauthorize + * @param verifier The verifier / data service on which they'll be allowed to operate + * @param allowed Whether the operator is authorized or not + */ + function setOperator(address operator, address verifier, bool allowed) external; + + // for vesting contracts + function setOperatorLocked(address operator, address verifier, bool allowed) external; + + function setDelegationFeeCut( + address serviceProvider, + address verifier, + IGraphPayments.PaymentTypes paymentType, + uint256 feeCut + ) external; +} diff --git a/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol b/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol deleted file mode 100644 index bf5efbf0d..000000000 --- a/packages/horizon/contracts/interfaces/IStakingBackwardsCompatibility.sol +++ /dev/null @@ -1,189 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity 0.8.24; - -/** - * @title Base interface for the Staking contract. - * @dev This interface includes only what's implemented in the base Staking contract. - * It does not include the L1 and L2 specific functionality. It also does not include - * several functions that are implemented in the StakingExtension contract, and are called - * via delegatecall through the fallback function. See IStaking.sol for an interface - * that includes the full functionality. - */ -interface IStakingBackwardsCompatibility { - /** - * @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment - * An allocation is created in the allocate() function and closed in closeAllocation() - */ - struct Allocation { - address indexer; - bytes32 subgraphDeploymentID; - uint256 tokens; // Tokens allocated to a SubgraphDeployment - uint256 createdAtEpoch; // Epoch when it was created - uint256 closedAtEpoch; // Epoch when it was closed - uint256 collectedFees; // Collected fees for the allocation - uint256 DEPRECATED_effectiveAllocation; // solhint-disable-line var-name-mixedcase - uint256 accRewardsPerAllocatedToken; // Snapshot used for reward calc - uint256 distributedRebates; // Collected rebates that have been rebated - } - - /** - * @dev Possible states an allocation can be. - * States: - * - Null = indexer == address(0) - * - Active = not Null && tokens > 0 - * - Closed = Active && closedAtEpoch != 0 - */ - enum AllocationState { - Null, - Active, - Closed - } - - /** - * @dev Emitted when `delegator` delegated `tokens` to the `serviceProvider`, the delegator - * gets `shares` for the delegation pool proportionally to the tokens staked. - * This event is here for backwards compatibility, the tokens are delegated - * on the subgraph data service provision. - */ - event StakeDelegated(address indexed serviceProvider, address indexed delegator, uint256 tokens, uint256 shares); - - /** - * @dev Emitted when `serviceProvider` stakes `tokens` amount. - */ - event StakeDeposited(address indexed serviceProvider, uint256 tokens); - - /** - * @dev Emitted when `serviceProvider` withdraws `tokens` amount. - */ - event StakeWithdrawn(address indexed serviceProvider, uint256 tokens); - - /** - * @dev Emitted when `serviceProvider` locks `tokens` amount until `until`. - */ - event StakeLocked(address indexed serviceProvider, uint256 tokens, uint256 until); - - /** - * @dev Emitted when `indexer` close an allocation in `epoch` for `allocationID`. - * An amount of `tokens` get unallocated from `subgraphDeploymentID`. - * This event also emits the POI (proof of indexing) submitted by the indexer. - * `isPublic` is true if the sender was someone other than the indexer. - */ - event AllocationClosed( - address indexed indexer, - bytes32 indexed subgraphDeploymentID, - uint256 epoch, - uint256 tokens, - address indexed allocationID, - address sender, - bytes32 poi, - bool isPublic - ); - - /** - * @dev Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`. - * `epoch` is the protocol epoch the rebate was collected on - * The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees` - * is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt. - * `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected - * and sent to the delegation pool. - */ - event RebateCollected( - address assetHolder, - address indexed indexer, - bytes32 indexed subgraphDeploymentID, - address indexed allocationID, - uint256 epoch, - uint256 tokens, - uint256 protocolTax, - uint256 curationFees, - uint256 queryFees, - uint256 queryRebates, - uint256 delegationRewards - ); - - /** - * @dev Emitted when `indexer` set `operator` access in the legacy contract, - * which now means only for the subgraph data service. - */ - event SetOperator(address indexed indexer, address indexed operator, bool allowed); - - /** - * @notice Set the address of the counterpart (L1 or L2) staking contract. - * @dev This function can only be called by the governor. - * @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing. - */ - function setCounterpartStakingAddress(address counterpart) external; - - /** - * @notice Close an allocation and free the staked tokens. - * To be eligible for rewards a proof of indexing must be presented. - * Presenting a bad proof is subject to slashable condition. - * To opt out of rewards set _poi to 0x0 - * @param allocationID The allocation identifier - * @param poi Proof of indexing submitted for the allocated period - */ - function closeAllocation(address allocationID, bytes32 poi) external; - - /** - * @notice Collect query fees from state channels and assign them to an allocation. - * Funds received are only accepted from a valid sender. - * @dev To avoid reverting on the withdrawal from channel flow this function will: - * 1) Accept calls with zero tokens. - * 2) Accept calls after an allocation passed the dispute period, in that case, all - * the received tokens are burned. - * @param tokens Amount of tokens to collect - * @param allocationID Allocation where the tokens will be assigned - */ - function collect(uint256 tokens, address allocationID) external; - - /** - * @notice Return true if operator is allowed for indexer. - * @param operator Address of the operator - * @param indexer Address of the indexer - * @return True if operator is allowed for indexer, false otherwise - */ - function isOperator(address operator, address indexer) external view returns (bool); - - /** - * @notice Getter that returns if an indexer has any stake. - * @param indexer Address of the indexer - * @return True if indexer has staked tokens - */ - function hasStake(address indexer) external view returns (bool); - - /** - * @notice Get the total amount of tokens staked by the indexer. - * @param indexer Address of the indexer - * @return Amount of tokens staked by the indexer - */ - function getIndexerStakedTokens(address indexer) external view returns (uint256); - - /** - * @notice Return the allocation by ID. - * @param allocationID Address used as allocation identifier - * @return Allocation data - */ - function getAllocation(address allocationID) external view returns (Allocation memory); - - /** - * @notice Return the current state of an allocation - * @param allocationID Allocation identifier - * @return AllocationState enum with the state of the allocation - */ - function getAllocationState(address allocationID) external view returns (AllocationState); - - /** - * @notice Return if allocationID is used. - * @param allocationID Address used as signer by the indexer for an allocation - * @return True if allocationID already used - */ - function isAllocation(address allocationID) external view returns (bool); - - /** - * @notice Return the total amount of tokens allocated to subgraph. - * @param subgraphDeploymentID Deployment ID for the subgraph - * @return Total tokens allocated to subgraph - */ - function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentID) external view returns (uint256); -} diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 73707f623..c780c3880 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -2,17 +2,16 @@ pragma solidity 0.8.24; -import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; -import { IHorizonStakingBase } from "../interfaces/IHorizonStakingBase.sol"; +import { IHorizonStakingMain } from "../interfaces/IHorizonStakingMain.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; -import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; import { PPMMath } from "../libraries/PPMMath.sol"; -import { Managed } from "./utilities/Managed.sol"; -import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; +import { HorizonStakingBase } from "./HorizonStakingBase.sol"; /** * @title HorizonStaking contract @@ -22,7 +21,7 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; * It uses a HorizonStakingExtension contract to implement the full IHorizonStaking interface through delegatecalls. * This is due to the contract size limit on Arbitrum (24kB like mainnet). */ -contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV1Storage, IHorizonStakingBase { +contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { using TokenUtils for IGraphToken; using PPMMath for uint256; @@ -45,7 +44,6 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV uint256 private constant MIN_DELEGATION = 1e18; address private immutable STAKING_EXTENSION_ADDRESS; - address private immutable SUBGRAPH_DATA_SERVICE_ADDRESS; error HorizonStakingInvalidVerifier(address verifier); error HorizonStakingVerifierAlreadyAllowed(address verifier); @@ -71,9 +69,8 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV address controller, address stakingExtensionAddress, address subgraphDataServiceAddress - ) Managed(controller) { + ) HorizonStakingBase(controller, subgraphDataServiceAddress) { STAKING_EXTENSION_ADDRESS = stakingExtensionAddress; - SUBGRAPH_DATA_SERVICE_ADDRESS = subgraphDataServiceAddress; } /** @@ -119,6 +116,40 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV stakeTo(msg.sender, tokens); } + /** + * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * @param operator Address to authorize or unauthorize + * @param verifier The verifier / data service on which they'll be allowed to operate + * @param allowed Whether the operator is authorized or not + */ + function setOperator(address operator, address verifier, bool allowed) external override { + require(operator != msg.sender, "operator == sender"); + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + _legacyOperatorAuth[msg.sender][operator] = allowed; + } else { + _operatorAuth[msg.sender][verifier][operator] = allowed; + } + emit OperatorSet(msg.sender, operator, verifier, allowed); + } + + // for vesting contracts + function setOperatorLocked(address operator, address verifier, bool allowed) external override { + require(operator != msg.sender, "operator == sender"); + require(_allowedLockedVerifiers[verifier], "VERIFIER_NOT_ALLOWED"); + _operatorAuth[msg.sender][verifier][operator] = allowed; + emit OperatorSet(msg.sender, operator, verifier, allowed); + } + + function setDelegationFeeCut( + address serviceProvider, + address verifier, + IGraphPayments.PaymentTypes paymentType, + uint256 feeCut + ) external override { + delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; + emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); + } + function setProvisionParameters( address serviceProvider, address verifier, @@ -174,7 +205,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV uint32 maxVerifierCut, uint64 thawingPeriod ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { - if (getIdleStake(serviceProvider) < tokens) { + if (_getIdleStake(serviceProvider) < tokens) { revert HorizonStakingInsufficientCapacity(); } @@ -200,7 +231,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV uint32 maxVerifierCut, uint64 thawingPeriod ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { - if (getIdleStake(serviceProvider) < tokens) { + if (_getIdleStake(serviceProvider) < tokens) { revert HorizonStakingInsufficientCapacity(); } if (!_allowedLockedVerifiers[verifier]) { @@ -247,7 +278,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV sp.nextThawRequestNonce += 1; ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - require(getProviderTokensAvailable(serviceProvider, verifier) >= tokens, "insufficient tokens available"); + require(_getProviderTokensAvailable(serviceProvider, verifier) >= tokens, "insufficient tokens available"); prov.tokensThawing = prov.tokensThawing + tokens; if (prov.sharesThawing == 0) { @@ -321,7 +352,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV if (tokens == 0) { revert HorizonStakingInvalidZeroTokens(); } - if (getIdleStake(serviceProvider) < tokens) { + if (_getIdleStake(serviceProvider) < tokens) { revert HorizonStakingInsufficientCapacity(); } @@ -415,12 +446,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV tokensToSlash = tokensToSlash - providerTokensSlashed; if (tokensToSlash > 0) { - DelegationPoolInternal storage pool; - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = _legacyDelegationPools[serviceProvider]; - } else { - pool = _delegationPools[serviceProvider][verifier]; - } + DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); if (delegationSlashingEnabled) { require(pool.tokens >= tokensToSlash, "insufficient delegated tokens"); _graphToken().burnTokens(tokensToSlash); @@ -481,12 +507,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV if (tokens == 0) { revert HorizonStakingInvalidZeroTokens(); } - DelegationPoolInternal storage pool; - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = _legacyDelegationPools[serviceProvider]; - } else { - pool = _delegationPools[serviceProvider][verifier]; - } + DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); pool.tokens = pool.tokens + tokens; emit TokensAddedToDelegationPool(serviceProvider, verifier, tokens); } @@ -507,30 +528,6 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV emit ParameterUpdated("maxThawingPeriod"); } - /** - * @notice Get the amount of service provider's tokens in a provision that have finished thawing - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned - */ - function getThawedTokens(address serviceProvider, address verifier) external view returns (uint256) { - Provision storage prov = _provisions[serviceProvider][verifier]; - if (prov.nThawRequests == 0) { - return 0; - } - bytes32 thawRequestId = prov.firstThawRequestId; - uint256 tokens = 0; - while (thawRequestId != bytes32(0)) { - ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - if (thawRequest.thawingUntil <= block.timestamp) { - tokens += (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; - } else { - break; - } - thawRequestId = thawRequest.next; - } - return tokens; - } - /** * @notice Deposit tokens on the service provider stake, on behalf of the service provider. * @param serviceProvider Address of the service provider @@ -563,12 +560,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV // the shares are burned and replaced with shares in the thawing pool function undelegate(address serviceProvider, address verifier, uint256 shares) public override notPartialPaused { require(shares > 0, "!shares"); - DelegationPoolInternal storage pool; - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = _legacyDelegationPools[serviceProvider]; - } else { - pool = _delegationPools[serviceProvider][verifier]; - } + DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); Delegation storage delegation = pool.delegators[msg.sender]; require(delegation.shares >= shares, "!shares-avail"); @@ -614,12 +606,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV address newServiceProvider, uint256 minSharesForNewProvider ) public override notPartialPaused { - DelegationPoolInternal storage pool; - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = _legacyDelegationPools[serviceProvider]; - } else { - pool = _delegationPools[serviceProvider][verifier]; - } + DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); Delegation storage delegation = pool.delegators[msg.sender]; uint256 thawedTokens = 0; @@ -679,24 +666,6 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV } } - // staked tokens that are currently not provisioned, aka idle stake - // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address serviceProvider) public view override returns (uint256 tokens) { - return - _serviceProviders[serviceProvider].tokensStaked - - _serviceProviders[serviceProvider].tokensProvisioned - - _serviceProviders[serviceProvider].__DEPRECATED_tokensLocked; - } - - // provisioned tokens from the service provider that are not being thawed - // `Provision.tokens - Provision.tokensThawing` - function getProviderTokensAvailable( - address serviceProvider, - address verifier - ) public view override returns (uint256) { - return _provisions[serviceProvider][verifier].tokens - _provisions[serviceProvider][verifier].tokensThawing; - } - function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) internal { if (_tokens == 0) { revert HorizonStakingInvalidZeroTokens(); @@ -709,12 +678,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); } - DelegationPoolInternal storage pool; - if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = _legacyDelegationPools[_serviceProvider]; - } else { - pool = _delegationPools[_serviceProvider][_verifier]; - } + DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); Delegation storage delegation = pool.delegators[msg.sender]; // Calculate shares to issue @@ -813,7 +777,7 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV if (prov.createdAt == 0) { revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); } - if (getIdleStake(_serviceProvider) < _tokens) { + if (_getIdleStake(_serviceProvider) < _tokens) { revert HorizonStakingInsufficientCapacity(); } @@ -824,19 +788,6 @@ contract HorizonStaking is GraphUpgradeable, Multicall, Managed, HorizonStakingV emit ProvisionIncreased(_serviceProvider, _verifier, _tokens); } - /** - * @dev Stake tokens on the service provider. - * TODO: Move to HorizonStaking after the transition period - * @param _serviceProvider Address of staking party - * @param _tokens Amount of tokens to stake - */ - function _stake(address _serviceProvider, uint256 _tokens) internal { - // Deposit tokens into the service provider stake - _serviceProviders[_serviceProvider].tokensStaked = _serviceProviders[_serviceProvider].tokensStaked + _tokens; - - emit StakeDeposited(_serviceProvider, _tokens); - } - /** * @dev Withdraw service provider tokens once the thawing period has passed. * @param _serviceProvider Address of service provider to withdraw funds from diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol new file mode 100644 index 000000000..cd54932b8 --- /dev/null +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -0,0 +1,200 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.24; + +import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; +import { IHorizonStakingBase } from "../interfaces/IHorizonStakingBase.sol"; +import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; + +import { MathUtils } from "../libraries/MathUtils.sol"; + +import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; +import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol"; +import { Managed } from "./utilities/Managed.sol"; +import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; + +/** + * @title L2Staking contract + * @dev This contract is the L2 variant of the Staking contract. It adds a function + * to receive an service provider's stake or delegation from L1. Note that this contract inherits Staking, + * which uses a StakingExtension contract to implement the full IStaking interface through delegatecalls. + */ +abstract contract HorizonStakingBase is + Multicall, + Managed, + HorizonStakingV1Storage, + GraphUpgradeable, + IHorizonStakingTypes, + IHorizonStakingBase +{ + address internal immutable SUBGRAPH_DATA_SERVICE_ADDRESS; + + constructor(address controller, address subgraphDataServiceAddress) Managed(controller) { + SUBGRAPH_DATA_SERVICE_ADDRESS = subgraphDataServiceAddress; + } + + /** + * @notice Receive ETH into the Staking contract: this will always revert + * @dev This function is only here to prevent ETH from being sent to the contract + */ + receive() external payable { + revert("RECEIVE_ETH_NOT_ALLOWED"); + } + + // total staked tokens to the provider + // `ServiceProvider.tokensStaked + function getStake(address serviceProvider) external view override returns (uint256) { + return _serviceProviders[serviceProvider].tokensStaked; + } + + // provisioned tokens that are not being thawed (including provider tokens and delegation) + function getTokensAvailable( + address serviceProvider, + address verifier, + uint32 delegationRatio + ) external view override returns (uint256) { + uint256 providerTokens = _provisions[serviceProvider][verifier].tokens; + uint256 providerThawingTokens = _provisions[serviceProvider][verifier].tokensThawing; + uint256 tokensDelegatedMax = (providerTokens - providerThawingTokens) * (uint256(delegationRatio)); + uint256 tokensDelegatedCapacity = MathUtils.min( + getDelegatedTokensAvailable(serviceProvider, verifier), + tokensDelegatedMax + ); + return providerTokens - providerThawingTokens + tokensDelegatedCapacity; + } + + function getServiceProvider(address serviceProvider) external view override returns (ServiceProvider memory) { + ServiceProvider memory sp; + ServiceProviderInternal storage spInternal = _serviceProviders[serviceProvider]; + sp.tokensStaked = spInternal.tokensStaked; + sp.tokensProvisioned = spInternal.tokensProvisioned; + sp.nextThawRequestNonce = spInternal.nextThawRequestNonce; + return sp; + } + + function getMaxThawingPeriod() external view override returns (uint64) { + return _maxThawingPeriod; + } + + function getDelegationPool( + address serviceProvider, + address verifier + ) external view override returns (DelegationPool memory) { + DelegationPool memory pool; + DelegationPoolInternal storage poolInternal = _getDelegationPool(serviceProvider, verifier); + pool.tokens = poolInternal.tokens; + pool.shares = poolInternal.shares; + pool.tokensThawing = poolInternal.tokensThawing; + pool.sharesThawing = poolInternal.sharesThawing; + return pool; + } + + function getDelegation( + address delegator, + address serviceProvider, + address verifier + ) external view override returns (Delegation memory) { + DelegationPoolInternal storage poolInternal = _getDelegationPool(serviceProvider, verifier); + return poolInternal.delegators[delegator]; + } + + function getThawRequest(bytes32 thawRequestId) external view returns (ThawRequest memory) { + return _thawRequests[thawRequestId]; + } + + function getProvision(address serviceProvider, address verifier) external view override returns (Provision memory) { + return _provisions[serviceProvider][verifier]; + } + + function getDelegationFeeCut( + address serviceProvider, + address verifier, + IGraphPayments.PaymentTypes paymentType + ) external view override returns (uint256) { + return delegationFeeCut[serviceProvider][verifier][paymentType]; + } + + // provisioned tokens from delegators that are not being thawed + // `Provision.delegatedTokens - Provision.delegatedTokensThawing` + function getDelegatedTokensAvailable( + address serviceProvider, + address verifier + ) public view override returns (uint256) { + DelegationPoolInternal storage poolInternal = _getDelegationPool(serviceProvider, verifier); + return poolInternal.tokens - poolInternal.tokensThawing; + } + + // staked tokens that are currently not provisioned, aka idle stake + // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` + function getIdleStake(address serviceProvider) external view override returns (uint256 tokens) { + return _getIdleStake(serviceProvider); + } + + // provisioned tokens from the service provider that are not being thawed + // `Provision.tokens - Provision.tokensThawing` + function getProviderTokensAvailable( + address serviceProvider, + address verifier + ) external view override returns (uint256) { + return _getProviderTokensAvailable(serviceProvider, verifier); + } + + /** + * @notice Get the amount of service provider's tokens in a provision that have finished thawing + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + */ + function getThawedTokens(address serviceProvider, address verifier) external view returns (uint256) { + Provision storage prov = _provisions[serviceProvider][verifier]; + if (prov.nThawRequests == 0) { + return 0; + } + bytes32 thawRequestId = prov.firstThawRequestId; + uint256 tokens = 0; + while (thawRequestId != bytes32(0)) { + ThawRequest storage thawRequest = _thawRequests[thawRequestId]; + if (thawRequest.thawingUntil <= block.timestamp) { + tokens += (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; + } else { + break; + } + thawRequestId = thawRequest.next; + } + return tokens; + } + + /** + * @notice Deposit tokens into the service provider stake. + * @dev TODO(after transition period): move to HorizonStaking + * @param _serviceProvider Address of staking party + * @param _tokens Amount of tokens to stake + */ + function _stake(address _serviceProvider, uint256 _tokens) internal { + _serviceProviders[_serviceProvider].tokensStaked = _serviceProviders[_serviceProvider].tokensStaked + _tokens; + emit StakeDeposited(_serviceProvider, _tokens); + } + + function _getDelegationPool( + address _serviceProvider, + address _verifier + ) internal view returns (DelegationPoolInternal storage) { + IHorizonStakingTypes.DelegationPoolInternal storage pool; + if (_verifier == _serviceProvider) { + pool = _legacyDelegationPools[_serviceProvider]; + } else { + pool = _delegationPools[_serviceProvider][_verifier]; + } + return pool; + } + + function etIdleStake(address serviceProvider) public view returns (uint256 tokens) { + return + _serviceProviders[serviceProvider].tokensStaked - + _serviceProviders[serviceProvider].tokensProvisioned - + _serviceProviders[serviceProvider].__DEPRECATED_tokensLocked; + } + + function gtProviderTokensAvailable(address serviceProvider, address verifier) public view returns (uint256) { + return _provisions[serviceProvider][verifier].tokens - _provisions[serviceProvider][verifier].tokensThawing; + } +} diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index c73cc9de7..71cfd3dc6 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -2,22 +2,37 @@ pragma solidity 0.8.24; -import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; -import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; +import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; +import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStakingExtension } from "../interfaces/IHorizonStakingExtension.sol"; -import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; +import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; +import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; +import { ExponentialRebates } from "./libraries/ExponentialRebates.sol"; +import { PPMMath } from "../libraries/PPMMath.sol"; -import { StakingBackwardsCompatibility } from "./StakingBackwardsCompatibility.sol"; +import { HorizonStakingBase } from "./HorizonStakingBase.sol"; +import { Managed } from "./utilities/Managed.sol"; +import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; /** - * @title L2Staking contract - * @dev This contract is the L2 variant of the Staking contract. It adds a function - * to receive an service provider's stake or delegation from L1. Note that this contract inherits Staking, - * which uses a StakingExtension contract to implement the full IStaking interface through delegatecalls. + * @title Base Staking contract + * @dev The Staking contract allows Indexers to Stake on Subgraphs. Indexers Stake by creating + * Allocations on a Subgraph. It also allows Delegators to Delegate towards an Indexer. The + * contract also has the slashing functionality. + * The contract is abstract as the implementation that is deployed depends on each layer: L1Staking on mainnet + * and L2Staking on Arbitrum. + * Note that this contract delegates part of its functionality to a StakingExtension contract. + * This is due to the 24kB contract size limit on Ethereum. */ -contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBase, IHorizonStakingExtension { +contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2StakingBase, IHorizonStakingExtension { + using TokenUtils for IGraphToken; + using PPMMath for uint256; + /// @dev Minimum amount of tokens that can be delegated uint256 private constant MINIMUM_DELEGATION = 1e18; @@ -32,39 +47,7 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas constructor( address controller, address subgraphDataServiceAddress - ) StakingBackwardsCompatibility(controller, subgraphDataServiceAddress) {} - - /** - * @notice Receive ETH into the Staking contract: this will always revert - * @dev This function is only here to prevent ETH from being sent to the contract - */ - receive() external payable { - revert("RECEIVE_ETH_NOT_ALLOWED"); - } - - /** - * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. - * @param operator Address to authorize or unauthorize - * @param verifier The verifier / data service on which they'll be allowed to operate - * @param allowed Whether the operator is authorized or not - */ - function setOperator(address operator, address verifier, bool allowed) external override { - require(operator != msg.sender, "operator == sender"); - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - _legacyOperatorAuth[msg.sender][operator] = allowed; - } else { - _operatorAuth[msg.sender][verifier][operator] = allowed; - } - emit OperatorSet(msg.sender, operator, verifier, allowed); - } - - // for vesting contracts - function setOperatorLocked(address operator, address verifier, bool allowed) external override { - require(operator != msg.sender, "operator == sender"); - require(_allowedLockedVerifiers[verifier], "VERIFIER_NOT_ALLOWED"); - _operatorAuth[msg.sender][verifier][operator] = allowed; - emit OperatorSet(msg.sender, operator, verifier, allowed); - } + ) HorizonStakingBase(controller, subgraphDataServiceAddress) {} /** * @notice Receive tokens with a callhook from the bridge. @@ -101,111 +84,214 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas } } - function setDelegationFeeCut( - address serviceProvider, - address verifier, - IGraphPayments.PaymentTypes paymentType, - uint256 feeCut - ) external override { - delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; - emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); + /** + * @notice Set the address of the counterpart (L1 or L2) staking contract. + * @dev This function can only be called by the governor. + * TODO: Remove after L2 transition period + * @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing. + */ + function setCounterpartStakingAddress(address counterpart) external override onlyGovernor { + _counterpartStakingAddress = counterpart; + emit ParameterUpdated("counterpartStakingAddress"); } - // total staked tokens to the provider - // `ServiceProvider.tokensStaked - function getStake(address serviceProvider) external view override returns (uint256) { - return _serviceProviders[serviceProvider].tokensStaked; + /** + * @notice Close an allocation and free the staked tokens. + * To be eligible for rewards a proof of indexing must be presented. + * Presenting a bad proof is subject to slashable condition. + * To opt out of rewards set _poi to 0x0 + * @dev TODO: Remove after Horizon transition period + * @param allocationID The allocation identifier + * @param poi Proof of indexing submitted for the allocated period + */ + function closeAllocation(address allocationID, bytes32 poi) external override notPaused { + _closeAllocation(allocationID, poi); } - // provisioned tokens that are not being thawed (including provider tokens and delegation) - function getTokensAvailable( - address serviceProvider, - address verifier, - uint32 delegationRatio - ) external view override returns (uint256) { - uint256 providerTokens = _provisions[serviceProvider][verifier].tokens; - uint256 providerThawingTokens = _provisions[serviceProvider][verifier].tokensThawing; - uint256 tokensDelegatedMax = (providerTokens - providerThawingTokens) * (uint256(delegationRatio)); - uint256 tokensDelegatedCapacity = MathUtils.min( - getDelegatedTokensAvailable(serviceProvider, verifier), - tokensDelegatedMax + /** + * @dev Collect and rebate query fees from state channels to the indexer + * To avoid reverting on the withdrawal from channel flow this function will accept calls with zero tokens. + * We use an exponential rebate formula to calculate the amount of tokens to rebate to the indexer. + * This implementation allows collecting multiple times on the same allocation, keeping track of the + * total amount rebated, the total amount collected and compensating the indexer for the difference. + * TODO: Remove after Horizon transition period + * @param tokens Amount of tokens to collect + * @param allocationID Allocation where the tokens will be assigned + */ + function collect(uint256 tokens, address allocationID) external override { + // Allocation identifier validation + require(allocationID != address(0), "!alloc"); + + // Allocation must exist + AllocationState allocState = _getAllocationState(allocationID); + require(allocState != AllocationState.Null, "!collect"); + + // If the query fees are zero, we don't want to revert + // but we also don't need to do anything, so just return + if (tokens == 0) { + return; + } + + Allocation storage alloc = __DEPRECATED_allocations[allocationID]; + bytes32 subgraphDeploymentID = alloc.subgraphDeploymentID; + + uint256 queryFees = tokens; // Tokens collected from the channel + uint256 protocolTax = 0; // Tokens burnt as protocol tax + uint256 curationFees = 0; // Tokens distributed to curators as curation fees + uint256 queryRebates = 0; // Tokens to distribute to indexer + uint256 delegationRewards = 0; // Tokens to distribute to delegators + + { + // -- Pull tokens from the sender -- + _graphToken().pullTokens(msg.sender, queryFees); + + // -- Collect protocol tax -- + protocolTax = _collectTax(queryFees, __DEPRECATED_protocolPercentage); + queryFees = queryFees - protocolTax; + + // -- Collect curation fees -- + // Only if the subgraph deployment is curated + curationFees = _collectCurationFees(subgraphDeploymentID, queryFees, __DEPRECATED_curationPercentage); + queryFees = queryFees - curationFees; + + // -- Process rebate reward -- + // Using accumulated fees and subtracting previously distributed rebates + // allows for multiple vouchers to be collected while following the rebate formula + alloc.collectedFees = alloc.collectedFees + queryFees; + + // No rebates if indexer has no stake or if lambda is zero + uint256 newRebates = (alloc.tokens == 0 || __DEPRECATED_lambdaNumerator == 0) + ? 0 + : ExponentialRebates.exponentialRebates( + alloc.collectedFees, + alloc.tokens, + __DEPRECATED_alphaNumerator, + __DEPRECATED_alphaDenominator, + __DEPRECATED_lambdaNumerator, + __DEPRECATED_lambdaDenominator + ); + + // -- Ensure rebates to distribute are within bounds -- + // Indexers can become under or over rebated if rebate parameters (alpha, lambda) + // change between successive collect calls for the same allocation + + // Ensure rebates to distribute are not negative (indexer is over-rebated) + queryRebates = MathUtils.diffOrZero(newRebates, alloc.distributedRebates); + + // Ensure rebates to distribute are not greater than available (indexer is under-rebated) + queryRebates = MathUtils.min(queryRebates, queryFees); + + // -- Burn rebates remanent -- + _graphToken().burnTokens(queryFees - queryRebates); + + // -- Distribute rebates -- + if (queryRebates > 0) { + alloc.distributedRebates = alloc.distributedRebates + queryRebates; + + // -- Collect delegation rewards into the delegation pool -- + delegationRewards = _collectDelegationQueryRewards(alloc.indexer, queryRebates); + queryRebates = queryRebates - delegationRewards; + + // -- Transfer or restake rebates -- + _sendRewards(queryRebates, alloc.indexer, __DEPRECATED_rewardsDestination[alloc.indexer] == address(0)); + } + } + + emit RebateCollected( + msg.sender, + alloc.indexer, + subgraphDeploymentID, + allocationID, + _graphEpochManager().currentEpoch(), + tokens, + protocolTax, + curationFees, + queryFees, + queryRebates, + delegationRewards ); - return providerTokens - providerThawingTokens + tokensDelegatedCapacity; } - function getServiceProvider(address serviceProvider) external view override returns (ServiceProvider memory) { - ServiceProvider memory sp; - ServiceProviderInternal storage spInternal = _serviceProviders[serviceProvider]; - sp.tokensStaked = spInternal.tokensStaked; - sp.tokensProvisioned = spInternal.tokensProvisioned; - sp.nextThawRequestNonce = spInternal.nextThawRequestNonce; - return sp; + /** + * @notice Return if allocationID is used. + * @dev TODO: Remove after Horizon transition period + * @param allocationID Address used as signer by the indexer for an allocation + * @return True if allocationID already used + */ + function isAllocation(address allocationID) external view override returns (bool) { + return _getAllocationState(allocationID) != AllocationState.Null; } - function getMaxThawingPeriod() external view override returns (uint64) { - return _maxThawingPeriod; + /** + * @notice Return the allocation by ID. + * @dev TODO: Remove after Horizon transition period + * @param allocationID Address used as allocation identifier + * @return Allocation data + */ + function getAllocation(address allocationID) external view override returns (Allocation memory) { + return __DEPRECATED_allocations[allocationID]; } - function getDelegationPool( - address serviceProvider, - address verifier - ) external view override returns (DelegationPool memory) { - DelegationPool memory pool; - DelegationPoolInternal storage poolInternal; - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - poolInternal = _legacyDelegationPools[serviceProvider]; - } else { - poolInternal = _delegationPools[serviceProvider][verifier]; - } - pool.tokens = poolInternal.tokens; - pool.shares = poolInternal.shares; - pool.tokensThawing = poolInternal.tokensThawing; - pool.sharesThawing = poolInternal.sharesThawing; - return pool; + /** + * @notice Return allocation data by ID. + * @dev To be called by the Rewards Manager to calculate rewards issuance. + * @dev TODO: Remove after Horizon transition period + * @param allocationID Address used as allocation identifier + * @return Allocation data + */ + function getAllocationData( + address allocationID + ) external view override returns (address, bytes32, uint256, uint256) { + Allocation memory allo = __DEPRECATED_allocations[allocationID]; + return (allo.indexer, allo.subgraphDeploymentID, allo.tokens, allo.accRewardsPerAllocatedToken); } - function getDelegation( - address delegator, - address serviceProvider, - address verifier - ) external view override returns (Delegation memory) { - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - return _legacyDelegationPools[serviceProvider].delegators[delegator]; - } else { - return _delegationPools[serviceProvider][verifier].delegators[delegator]; - } + /** + * @notice Return the current state of an allocation + * @dev TODO: Remove after Horizon transition period + * @param allocationID Allocation identifier + * @return AllocationState enum with the state of the allocation + */ + function getAllocationState(address allocationID) external view override returns (AllocationState) { + return _getAllocationState(allocationID); } - function getThawRequest(bytes32 thawRequestId) external view returns (ThawRequest memory) { - return _thawRequests[thawRequestId]; + /** + * @notice Return the total amount of tokens allocated to subgraph. + * @param subgraphDeploymentID Deployment ID for the subgraph + * @return Total tokens allocated to subgraph + */ + function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentID) external view override returns (uint256) { + return __DEPRECATED_subgraphAllocations[subgraphDeploymentID]; } - function getProvision(address serviceProvider, address verifier) external view override returns (Provision memory) { - return _provisions[serviceProvider][verifier]; + /** + * @notice Get the total amount of tokens staked by the indexer. + * @param indexer Address of the indexer + * @return Amount of tokens staked by the indexer + */ + function getIndexerStakedTokens(address indexer) external view override returns (uint256) { + return _serviceProviders[indexer].tokensStaked; } - function getDelegationFeeCut( - address serviceProvider, - address verifier, - IGraphPayments.PaymentTypes paymentType - ) external view override returns (uint256) { - return delegationFeeCut[serviceProvider][verifier][paymentType]; + /** + * @notice Getter that returns if an indexer has any stake. + * @param indexer Address of the indexer + * @return True if indexer has staked tokens + */ + function hasStake(address indexer) external view override returns (bool) { + return _serviceProviders[indexer].tokensStaked > 0; } - // provisioned tokens from delegators that are not being thawed - // `Provision.delegatedTokens - Provision.delegatedTokensThawing` - function getDelegatedTokensAvailable( - address serviceProvider, - address verifier - ) public view override returns (uint256) { - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - return - _legacyDelegationPools[serviceProvider].tokens - - (_legacyDelegationPools[serviceProvider].tokensThawing); - } - return - _delegationPools[serviceProvider][verifier].tokens - - (_delegationPools[serviceProvider][verifier].tokensThawing); + /** + * @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service. + * @dev TODO: Delete after the transition period + * @param operator Address of the operator + * @param serviceProvider Address of the service provider + * @return True if operator is allowed for indexer, false otherwise + */ + function isOperator(address operator, address serviceProvider) public view override returns (bool) { + return _legacyOperatorAuth[serviceProvider][operator]; } /** @@ -237,8 +323,8 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas IL2StakingTypes.ReceiveDelegationData memory _delegationData ) internal { // Get the delegation pool of the indexer - DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; - Delegation storage delegation = pool.delegators[_delegationData.delegator]; + IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; + IHorizonStakingTypes.Delegation storage delegation = pool.delegators[_delegationData.delegator]; // Calculate shares to issue (without applying any delegation tax) uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / pool.tokens); @@ -260,4 +346,220 @@ contract HorizonStakingExtension is StakingBackwardsCompatibility, IL2StakingBas emit StakeDelegated(_delegationData.indexer, _delegationData.delegator, _tokens, shares); } } + + /** + * @dev Collect tax to burn for an amount of tokens. + * @param _tokens Total tokens received used to calculate the amount of tax to collect + * @param _percentage Percentage of tokens to burn as tax + * @return Amount of tax charged + */ + function _collectTax(uint256 _tokens, uint256 _percentage) private returns (uint256) { + uint256 tax = _tokens.mulPPMRoundUp(_percentage); + _graphToken().burnTokens(tax); // Burn tax if any + return tax; + } + + /** + * @dev Triggers an update of rewards due to a change in allocations. + * @param _subgraphDeploymentID Subgraph deployment updated + * @return Accumulated rewards per allocated token for the subgraph deployment + */ + function _updateRewards(bytes32 _subgraphDeploymentID) private returns (uint256) { + return _graphRewardsManager().onSubgraphAllocationUpdate(_subgraphDeploymentID); + } + + /** + * @dev Assign rewards for the closed allocation to indexer and delegators. + * @param _allocationID Allocation + * @param _indexer Address of the indexer that did the allocation + */ + function _distributeRewards(address _allocationID, address _indexer) private { + // Automatically triggers update of rewards snapshot as allocation will change + // after this call. Take rewards mint tokens for the Staking contract to distribute + // between indexer and delegators + uint256 totalRewards = _graphRewardsManager().takeRewards(_allocationID); + if (totalRewards == 0) { + return; + } + + // Calculate delegation rewards and add them to the delegation pool + uint256 delegationRewards = _collectDelegationIndexingRewards(_indexer, totalRewards); + uint256 indexerRewards = totalRewards - delegationRewards; + + // Send the indexer rewards + _sendRewards(indexerRewards, _indexer, __DEPRECATED_rewardsDestination[_indexer] == address(0)); + } + + /** + * @dev Send rewards to the appropriate destination. + * @param _tokens Number of rewards tokens + * @param _beneficiary Address of the beneficiary of rewards + * @param _restake Whether to restake or not + */ + function _sendRewards(uint256 _tokens, address _beneficiary, bool _restake) private { + if (_tokens == 0) return; + + if (_restake) { + // Restake to place fees into the indexer stake + _stake(_beneficiary, _tokens); + } else { + // Transfer funds to the beneficiary's designated rewards destination if set + address destination = __DEPRECATED_rewardsDestination[_beneficiary]; + _graphToken().pushTokens(destination == address(0) ? _beneficiary : destination, _tokens); + } + } + + /** + * @dev Close an allocation and free the staked tokens. + * @param _allocationID The allocation identifier + * @param _poi Proof of indexing submitted for the allocated period + */ + function _closeAllocation(address _allocationID, bytes32 _poi) private { + // Allocation must exist and be active + AllocationState allocState = _getAllocationState(_allocationID); + require(allocState == AllocationState.Active, "!active"); + + // Get allocation + Allocation memory alloc = __DEPRECATED_allocations[_allocationID]; + + // Validate that an allocation cannot be closed before one epoch + alloc.closedAtEpoch = _graphEpochManager().currentEpoch(); + uint256 epochs = MathUtils.diffOrZero(alloc.closedAtEpoch, alloc.createdAtEpoch); + + // Indexer or operator can close an allocation + // Anyone is allowed to close ONLY under two concurrent conditions + // - After maxAllocationEpochs passed + // - When the allocation is for non-zero amount of tokens + bool isIndexer = isOperator(alloc.indexer, SUBGRAPH_DATA_SERVICE_ADDRESS); + if (epochs <= __DEPRECATED_maxAllocationEpochs || alloc.tokens == 0) { + require(isIndexer, "!auth"); + } + + // Close the allocation + __DEPRECATED_allocations[_allocationID].closedAtEpoch = alloc.closedAtEpoch; + + // -- Rewards Distribution -- + + // Process non-zero-allocation rewards tracking + if (alloc.tokens > 0) { + // Distribute rewards if proof of indexing was presented by the indexer or operator + if (isIndexer && _poi != 0) { + _distributeRewards(_allocationID, alloc.indexer); + } else { + _updateRewards(alloc.subgraphDeploymentID); + } + + // Free allocated tokens from use + _serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated = + _serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated - + alloc.tokens; + + // Track total allocations per subgraph + // Used for rewards calculations + __DEPRECATED_subgraphAllocations[alloc.subgraphDeploymentID] = + __DEPRECATED_subgraphAllocations[alloc.subgraphDeploymentID] - + alloc.tokens; + } + + emit AllocationClosed( + alloc.indexer, + alloc.subgraphDeploymentID, + alloc.closedAtEpoch, + alloc.tokens, + _allocationID, + msg.sender, + _poi, + !isIndexer + ); + } + + /** + * @dev Collect the delegation rewards for query fees. + * This function will assign the collected fees to the delegation pool. + * @param _indexer Indexer to which the tokens to distribute are related + * @param _tokens Total tokens received used to calculate the amount of fees to collect + * @return Amount of delegation rewards + */ + function _collectDelegationQueryRewards(address _indexer, uint256 _tokens) private returns (uint256) { + uint256 delegationRewards = 0; + IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; + if (pool.tokens > 0 && uint256(pool.__DEPRECATED_queryFeeCut).isValidPPM()) { + uint256 indexerCut = uint256(pool.__DEPRECATED_queryFeeCut).mulPPM(_tokens); + delegationRewards = _tokens - indexerCut; + pool.tokens = pool.tokens + delegationRewards; + } + return delegationRewards; + } + + /** + * @dev Collect the delegation rewards for indexing. + * This function will assign the collected fees to the delegation pool. + * @param _indexer Indexer to which the tokens to distribute are related + * @param _tokens Total tokens received used to calculate the amount of fees to collect + * @return Amount of delegation rewards + */ + function _collectDelegationIndexingRewards(address _indexer, uint256 _tokens) private returns (uint256) { + uint256 delegationRewards = 0; + IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; + if (pool.tokens > 0 && uint256(pool.__DEPRECATED_indexingRewardCut).isValidPPM()) { + uint256 indexerCut = uint256(pool.__DEPRECATED_indexingRewardCut).mulPPM(_tokens); + delegationRewards = _tokens - indexerCut; + pool.tokens = pool.tokens + delegationRewards; + } + return delegationRewards; + } + + /** + * @dev Collect the curation fees for a subgraph deployment from an amount of tokens. + * This function transfer curation fees to the Curation contract by calling Curation.collect + * @param _subgraphDeploymentID Subgraph deployment to which the curation fees are related + * @param _tokens Total tokens received used to calculate the amount of fees to collect + * @param _curationCut Percentage of tokens to collect as fees + * @return Amount of curation fees + */ + function _collectCurationFees( + bytes32 _subgraphDeploymentID, + uint256 _tokens, + uint256 _curationCut + ) private returns (uint256) { + if (_tokens == 0) { + return 0; + } + + ICuration curation = _graphCuration(); + bool isCurationEnabled = _curationCut > 0 && address(curation) != address(0); + + if (isCurationEnabled && curation.isCurated(_subgraphDeploymentID)) { + uint256 curationFees = _tokens.mulPPMRoundUp(_curationCut); + if (curationFees > 0) { + // Transfer and call collect() + // This function transfer tokens to a trusted protocol contracts + // Then we call collect() to do the transfer bookeeping + _graphRewardsManager().onSubgraphSignalUpdate(_subgraphDeploymentID); + _graphToken().pushTokens(address(curation), curationFees); + curation.collect(_subgraphDeploymentID, curationFees); + } + return curationFees; + } + return 0; + } + + /** + * @dev Return the current state of an allocation + * @param _allocationID Allocation identifier + * @return AllocationState enum with the state of the allocation + */ + function _getAllocationState(address _allocationID) private view returns (AllocationState) { + Allocation storage alloc = __DEPRECATED_allocations[_allocationID]; + + if (alloc.indexer == address(0)) { + return AllocationState.Null; + } + + if (alloc.createdAtEpoch != 0 && alloc.closedAtEpoch == 0) { + return AllocationState.Active; + } + + return AllocationState.Closed; + } } diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index 5c85f910b..96af3a4fb 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.24; -import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; +import { IHorizonStakingExtension } from "../interfaces/IHorizonStakingExtension.sol"; import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; @@ -56,8 +56,7 @@ abstract contract HorizonStakingV1Storage { /// @dev Allocations : allocationID => Allocation /// Deprecated, now applied on the SubgraphService - mapping(address allocationId => IStakingBackwardsCompatibility.Allocation allocation) - internal __DEPRECATED_allocations; + mapping(address allocationId => IHorizonStakingExtension.Allocation allocation) internal __DEPRECATED_allocations; /// @dev Subgraph Allocations: subgraphDeploymentID => tokens /// Deprecated, now applied on the SubgraphService diff --git a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol b/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol deleted file mode 100644 index b0b46a9a5..000000000 --- a/packages/horizon/contracts/staking/StakingBackwardsCompatibility.sol +++ /dev/null @@ -1,482 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity 0.8.24; - -import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; -import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; -import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; -import { IStakingBackwardsCompatibility } from "../interfaces/IStakingBackwardsCompatibility.sol"; -import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; - -import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; -import { MathUtils } from "../libraries/MathUtils.sol"; -import { ExponentialRebates } from "./libraries/ExponentialRebates.sol"; -import { PPMMath } from "../libraries/PPMMath.sol"; - -import { Managed } from "./utilities/Managed.sol"; -import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; - -/** - * @title Base Staking contract - * @dev The Staking contract allows Indexers to Stake on Subgraphs. Indexers Stake by creating - * Allocations on a Subgraph. It also allows Delegators to Delegate towards an Indexer. The - * contract also has the slashing functionality. - * The contract is abstract as the implementation that is deployed depends on each layer: L1Staking on mainnet - * and L2Staking on Arbitrum. - * Note that this contract delegates part of its functionality to a StakingExtension contract. - * This is due to the 24kB contract size limit on Ethereum. - */ -abstract contract StakingBackwardsCompatibility is - Managed, - HorizonStakingV1Storage, - IRewardsIssuer, - IStakingBackwardsCompatibility -{ - using TokenUtils for IGraphToken; - using PPMMath for uint256; - - address public immutable SUBGRAPH_DATA_SERVICE_ADDRESS; - - constructor(address controller, address subgraphDataServiceAddress) Managed(controller) { - SUBGRAPH_DATA_SERVICE_ADDRESS = subgraphDataServiceAddress; - } - - /** - * @notice Set the address of the counterpart (L1 or L2) staking contract. - * @dev This function can only be called by the governor. - * TODO: Remove after L2 transition period - * @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing. - */ - function setCounterpartStakingAddress(address counterpart) external override onlyGovernor { - _counterpartStakingAddress = counterpart; - emit ParameterUpdated("counterpartStakingAddress"); - } - - /** - * @notice Close an allocation and free the staked tokens. - * To be eligible for rewards a proof of indexing must be presented. - * Presenting a bad proof is subject to slashable condition. - * To opt out of rewards set _poi to 0x0 - * @dev TODO: Remove after Horizon transition period - * @param allocationID The allocation identifier - * @param poi Proof of indexing submitted for the allocated period - */ - function closeAllocation(address allocationID, bytes32 poi) external override notPaused { - _closeAllocation(allocationID, poi); - } - - /** - * @dev Collect and rebate query fees from state channels to the indexer - * To avoid reverting on the withdrawal from channel flow this function will accept calls with zero tokens. - * We use an exponential rebate formula to calculate the amount of tokens to rebate to the indexer. - * This implementation allows collecting multiple times on the same allocation, keeping track of the - * total amount rebated, the total amount collected and compensating the indexer for the difference. - * TODO: Remove after Horizon transition period - * @param tokens Amount of tokens to collect - * @param allocationID Allocation where the tokens will be assigned - */ - function collect(uint256 tokens, address allocationID) external override { - // Allocation identifier validation - require(allocationID != address(0), "!alloc"); - - // Allocation must exist - AllocationState allocState = _getAllocationState(allocationID); - require(allocState != AllocationState.Null, "!collect"); - - // If the query fees are zero, we don't want to revert - // but we also don't need to do anything, so just return - if (tokens == 0) { - return; - } - - Allocation storage alloc = __DEPRECATED_allocations[allocationID]; - bytes32 subgraphDeploymentID = alloc.subgraphDeploymentID; - - uint256 queryFees = tokens; // Tokens collected from the channel - uint256 protocolTax = 0; // Tokens burnt as protocol tax - uint256 curationFees = 0; // Tokens distributed to curators as curation fees - uint256 queryRebates = 0; // Tokens to distribute to indexer - uint256 delegationRewards = 0; // Tokens to distribute to delegators - - { - // -- Pull tokens from the sender -- - _graphToken().pullTokens(msg.sender, queryFees); - - // -- Collect protocol tax -- - protocolTax = _collectTax(queryFees, __DEPRECATED_protocolPercentage); - queryFees = queryFees - protocolTax; - - // -- Collect curation fees -- - // Only if the subgraph deployment is curated - curationFees = _collectCurationFees(subgraphDeploymentID, queryFees, __DEPRECATED_curationPercentage); - queryFees = queryFees - curationFees; - - // -- Process rebate reward -- - // Using accumulated fees and subtracting previously distributed rebates - // allows for multiple vouchers to be collected while following the rebate formula - alloc.collectedFees = alloc.collectedFees + queryFees; - - // No rebates if indexer has no stake or if lambda is zero - uint256 newRebates = (alloc.tokens == 0 || __DEPRECATED_lambdaNumerator == 0) - ? 0 - : ExponentialRebates.exponentialRebates( - alloc.collectedFees, - alloc.tokens, - __DEPRECATED_alphaNumerator, - __DEPRECATED_alphaDenominator, - __DEPRECATED_lambdaNumerator, - __DEPRECATED_lambdaDenominator - ); - - // -- Ensure rebates to distribute are within bounds -- - // Indexers can become under or over rebated if rebate parameters (alpha, lambda) - // change between successive collect calls for the same allocation - - // Ensure rebates to distribute are not negative (indexer is over-rebated) - queryRebates = MathUtils.diffOrZero(newRebates, alloc.distributedRebates); - - // Ensure rebates to distribute are not greater than available (indexer is under-rebated) - queryRebates = MathUtils.min(queryRebates, queryFees); - - // -- Burn rebates remanent -- - _graphToken().burnTokens(queryFees - queryRebates); - - // -- Distribute rebates -- - if (queryRebates > 0) { - alloc.distributedRebates = alloc.distributedRebates + queryRebates; - - // -- Collect delegation rewards into the delegation pool -- - delegationRewards = _collectDelegationQueryRewards(alloc.indexer, queryRebates); - queryRebates = queryRebates - delegationRewards; - - // -- Transfer or restake rebates -- - _sendRewards(queryRebates, alloc.indexer, __DEPRECATED_rewardsDestination[alloc.indexer] == address(0)); - } - } - - emit RebateCollected( - msg.sender, - alloc.indexer, - subgraphDeploymentID, - allocationID, - _graphEpochManager().currentEpoch(), - tokens, - protocolTax, - curationFees, - queryFees, - queryRebates, - delegationRewards - ); - } - - /** - * @notice Return if allocationID is used. - * @dev TODO: Remove after Horizon transition period - * @param allocationID Address used as signer by the indexer for an allocation - * @return True if allocationID already used - */ - function isAllocation(address allocationID) external view override returns (bool) { - return _getAllocationState(allocationID) != AllocationState.Null; - } - - /** - * @notice Return the allocation by ID. - * @dev TODO: Remove after Horizon transition period - * @param allocationID Address used as allocation identifier - * @return Allocation data - */ - function getAllocation(address allocationID) external view override returns (Allocation memory) { - return __DEPRECATED_allocations[allocationID]; - } - - /** - * @notice Return allocation data by ID. - * @dev To be called by the Rewards Manager to calculate rewards issuance. - * @dev TODO: Remove after Horizon transition period - * @param allocationID Address used as allocation identifier - * @return Allocation data - */ - function getAllocationData( - address allocationID - ) external view override returns (address, bytes32, uint256, uint256) { - Allocation memory allo = __DEPRECATED_allocations[allocationID]; - return (allo.indexer, allo.subgraphDeploymentID, allo.tokens, allo.accRewardsPerAllocatedToken); - } - - /** - * @notice Return the current state of an allocation - * @dev TODO: Remove after Horizon transition period - * @param allocationID Allocation identifier - * @return AllocationState enum with the state of the allocation - */ - function getAllocationState(address allocationID) external view override returns (AllocationState) { - return _getAllocationState(allocationID); - } - - /** - * @notice Return the total amount of tokens allocated to subgraph. - * @param subgraphDeploymentID Deployment ID for the subgraph - * @return Total tokens allocated to subgraph - */ - function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentID) external view override returns (uint256) { - return __DEPRECATED_subgraphAllocations[subgraphDeploymentID]; - } - - /** - * @notice Get the total amount of tokens staked by the indexer. - * @param indexer Address of the indexer - * @return Amount of tokens staked by the indexer - */ - function getIndexerStakedTokens(address indexer) external view override returns (uint256) { - return _serviceProviders[indexer].tokensStaked; - } - - /** - * @notice Getter that returns if an indexer has any stake. - * @param indexer Address of the indexer - * @return True if indexer has staked tokens - */ - function hasStake(address indexer) external view override returns (bool) { - return _serviceProviders[indexer].tokensStaked > 0; - } - - /** - * @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service. - * @dev TODO: Delete after the transition period - * @param operator Address of the operator - * @param serviceProvider Address of the service provider - * @return True if operator is allowed for indexer, false otherwise - */ - function isOperator(address operator, address serviceProvider) public view override returns (bool) { - return _legacyOperatorAuth[serviceProvider][operator]; - } - - /** - * @dev Stake tokens on the service provider. - * TODO: Move to HorizonStaking after the transition period - * @param _serviceProvider Address of staking party - * @param _tokens Amount of tokens to stake - */ - function _stake(address _serviceProvider, uint256 _tokens) internal { - // Deposit tokens into the indexer stake - _serviceProviders[_serviceProvider].tokensStaked = _serviceProviders[_serviceProvider].tokensStaked + _tokens; - - emit StakeDeposited(_serviceProvider, _tokens); - } - - /** - * @dev Collect tax to burn for an amount of tokens. - * @param _tokens Total tokens received used to calculate the amount of tax to collect - * @param _percentage Percentage of tokens to burn as tax - * @return Amount of tax charged - */ - function _collectTax(uint256 _tokens, uint256 _percentage) private returns (uint256) { - uint256 tax = _tokens.mulPPMRoundUp(_percentage); - _graphToken().burnTokens(tax); // Burn tax if any - return tax; - } - - /** - * @dev Triggers an update of rewards due to a change in allocations. - * @param _subgraphDeploymentID Subgraph deployment updated - * @return Accumulated rewards per allocated token for the subgraph deployment - */ - function _updateRewards(bytes32 _subgraphDeploymentID) private returns (uint256) { - return _graphRewardsManager().onSubgraphAllocationUpdate(_subgraphDeploymentID); - } - - /** - * @dev Assign rewards for the closed allocation to indexer and delegators. - * @param _allocationID Allocation - * @param _indexer Address of the indexer that did the allocation - */ - function _distributeRewards(address _allocationID, address _indexer) private { - // Automatically triggers update of rewards snapshot as allocation will change - // after this call. Take rewards mint tokens for the Staking contract to distribute - // between indexer and delegators - uint256 totalRewards = _graphRewardsManager().takeRewards(_allocationID); - if (totalRewards == 0) { - return; - } - - // Calculate delegation rewards and add them to the delegation pool - uint256 delegationRewards = _collectDelegationIndexingRewards(_indexer, totalRewards); - uint256 indexerRewards = totalRewards - delegationRewards; - - // Send the indexer rewards - _sendRewards(indexerRewards, _indexer, __DEPRECATED_rewardsDestination[_indexer] == address(0)); - } - - /** - * @dev Send rewards to the appropriate destination. - * @param _tokens Number of rewards tokens - * @param _beneficiary Address of the beneficiary of rewards - * @param _restake Whether to restake or not - */ - function _sendRewards(uint256 _tokens, address _beneficiary, bool _restake) private { - if (_tokens == 0) return; - - if (_restake) { - // Restake to place fees into the indexer stake - _stake(_beneficiary, _tokens); - } else { - // Transfer funds to the beneficiary's designated rewards destination if set - address destination = __DEPRECATED_rewardsDestination[_beneficiary]; - _graphToken().pushTokens(destination == address(0) ? _beneficiary : destination, _tokens); - } - } - - /** - * @dev Close an allocation and free the staked tokens. - * @param _allocationID The allocation identifier - * @param _poi Proof of indexing submitted for the allocated period - */ - function _closeAllocation(address _allocationID, bytes32 _poi) private { - // Allocation must exist and be active - AllocationState allocState = _getAllocationState(_allocationID); - require(allocState == AllocationState.Active, "!active"); - - // Get allocation - Allocation memory alloc = __DEPRECATED_allocations[_allocationID]; - - // Validate that an allocation cannot be closed before one epoch - alloc.closedAtEpoch = _graphEpochManager().currentEpoch(); - uint256 epochs = MathUtils.diffOrZero(alloc.closedAtEpoch, alloc.createdAtEpoch); - - // Indexer or operator can close an allocation - // Anyone is allowed to close ONLY under two concurrent conditions - // - After maxAllocationEpochs passed - // - When the allocation is for non-zero amount of tokens - bool isIndexer = isOperator(alloc.indexer, SUBGRAPH_DATA_SERVICE_ADDRESS); - if (epochs <= __DEPRECATED_maxAllocationEpochs || alloc.tokens == 0) { - require(isIndexer, "!auth"); - } - - // Close the allocation - __DEPRECATED_allocations[_allocationID].closedAtEpoch = alloc.closedAtEpoch; - - // -- Rewards Distribution -- - - // Process non-zero-allocation rewards tracking - if (alloc.tokens > 0) { - // Distribute rewards if proof of indexing was presented by the indexer or operator - if (isIndexer && _poi != 0) { - _distributeRewards(_allocationID, alloc.indexer); - } else { - _updateRewards(alloc.subgraphDeploymentID); - } - - // Free allocated tokens from use - _serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated = - _serviceProviders[alloc.indexer].__DEPRECATED_tokensAllocated - - alloc.tokens; - - // Track total allocations per subgraph - // Used for rewards calculations - __DEPRECATED_subgraphAllocations[alloc.subgraphDeploymentID] = - __DEPRECATED_subgraphAllocations[alloc.subgraphDeploymentID] - - alloc.tokens; - } - - emit AllocationClosed( - alloc.indexer, - alloc.subgraphDeploymentID, - alloc.closedAtEpoch, - alloc.tokens, - _allocationID, - msg.sender, - _poi, - !isIndexer - ); - } - - /** - * @dev Collect the delegation rewards for query fees. - * This function will assign the collected fees to the delegation pool. - * @param _indexer Indexer to which the tokens to distribute are related - * @param _tokens Total tokens received used to calculate the amount of fees to collect - * @return Amount of delegation rewards - */ - function _collectDelegationQueryRewards(address _indexer, uint256 _tokens) private returns (uint256) { - uint256 delegationRewards = 0; - IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; - if (pool.tokens > 0 && uint256(pool.__DEPRECATED_queryFeeCut).isValidPPM()) { - uint256 indexerCut = uint256(pool.__DEPRECATED_queryFeeCut).mulPPM(_tokens); - delegationRewards = _tokens - indexerCut; - pool.tokens = pool.tokens + delegationRewards; - } - return delegationRewards; - } - - /** - * @dev Collect the delegation rewards for indexing. - * This function will assign the collected fees to the delegation pool. - * @param _indexer Indexer to which the tokens to distribute are related - * @param _tokens Total tokens received used to calculate the amount of fees to collect - * @return Amount of delegation rewards - */ - function _collectDelegationIndexingRewards(address _indexer, uint256 _tokens) private returns (uint256) { - uint256 delegationRewards = 0; - IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; - if (pool.tokens > 0 && uint256(pool.__DEPRECATED_indexingRewardCut).isValidPPM()) { - uint256 indexerCut = uint256(pool.__DEPRECATED_indexingRewardCut).mulPPM(_tokens); - delegationRewards = _tokens - indexerCut; - pool.tokens = pool.tokens + delegationRewards; - } - return delegationRewards; - } - - /** - * @dev Collect the curation fees for a subgraph deployment from an amount of tokens. - * This function transfer curation fees to the Curation contract by calling Curation.collect - * @param _subgraphDeploymentID Subgraph deployment to which the curation fees are related - * @param _tokens Total tokens received used to calculate the amount of fees to collect - * @param _curationCut Percentage of tokens to collect as fees - * @return Amount of curation fees - */ - function _collectCurationFees( - bytes32 _subgraphDeploymentID, - uint256 _tokens, - uint256 _curationCut - ) private returns (uint256) { - if (_tokens == 0) { - return 0; - } - - ICuration curation = _graphCuration(); - bool isCurationEnabled = _curationCut > 0 && address(curation) != address(0); - - if (isCurationEnabled && curation.isCurated(_subgraphDeploymentID)) { - uint256 curationFees = _tokens.mulPPMRoundUp(_curationCut); - if (curationFees > 0) { - // Transfer and call collect() - // This function transfer tokens to a trusted protocol contracts - // Then we call collect() to do the transfer bookeeping - _graphRewardsManager().onSubgraphSignalUpdate(_subgraphDeploymentID); - _graphToken().pushTokens(address(curation), curationFees); - curation.collect(_subgraphDeploymentID, curationFees); - } - return curationFees; - } - return 0; - } - - /** - * @dev Return the current state of an allocation - * @param _allocationID Allocation identifier - * @return AllocationState enum with the state of the allocation - */ - function _getAllocationState(address _allocationID) private view returns (AllocationState) { - Allocation storage alloc = __DEPRECATED_allocations[_allocationID]; - - if (alloc.indexer == address(0)) { - return AllocationState.Null; - } - - if (alloc.createdAtEpoch != 0 && alloc.closedAtEpoch == 0) { - return AllocationState.Active; - } - - return AllocationState.Closed; - } -} diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index f4efae525..4e35d3b4e 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -1,6 +1,7 @@ // import '@nomicfoundation/hardhat-foundry' import '@nomicfoundation/hardhat-toolbox' import 'hardhat-storage-layout' +import 'hardhat-contract-sizer' import { HardhatUserConfig } from 'hardhat/config' diff --git a/packages/horizon/package.json b/packages/horizon/package.json index cdcfa441b..00c266f49 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -31,6 +31,7 @@ "eslint-graph-config": "workspace:^0.0.1", "ethers": "^6.4.0", "hardhat": "^2.20.1", + "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.8", "hardhat-storage-layout": "^0.1.7", "lint-staged": "^15.2.2", diff --git a/yarn.lock b/yarn.lock index 6d884fac8..98c24bbfa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2932,6 +2932,7 @@ __metadata: eslint-graph-config: "workspace:^0.0.1" ethers: "npm:^6.4.0" hardhat: "npm:^2.20.1" + hardhat-contract-sizer: "npm:^2.10.0" hardhat-gas-reporter: "npm:^1.0.8" hardhat-storage-layout: "npm:^0.1.7" lint-staged: "npm:^15.2.2" From aa9e908d8b42f51327cbc6207c339981e9be108b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 12:32:22 -0300 Subject: [PATCH 061/343] chore: rework interface directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/DataService.sol | 2 +- .../data-service/extensions/DataServiceFees.sol | 2 +- .../extensions/DataServiceFeesStorage.sol | 2 +- .../extensions/DataServicePausable.sol | 2 +- .../extensions/DataServiceRescuable.sol | 2 +- .../interfaces/IDataService.sol | 2 +- .../IDataServiceFees.sol | 2 +- .../IDataServicePausable.sol | 2 +- .../IDataServiceRescuable.sol | 2 +- .../contracts/interfaces/IHorizonStaking.sol | 6 +++--- .../{ => internal}/IHorizonStakingBase.sol | 2 +- .../{ => internal}/IHorizonStakingExtension.sol | 0 .../{ => internal}/IHorizonStakingMain.sol | 2 +- .../{ => internal}/IHorizonStakingTypes.sol | 0 .../horizon/contracts/staking/HorizonStaking.sol | 4 ++-- .../contracts/staking/HorizonStakingBase.sol | 16 ++++++++-------- .../staking/HorizonStakingExtension.sol | 4 ++-- .../contracts/staking/HorizonStakingStorage.sol | 4 ++-- 18 files changed, 28 insertions(+), 28 deletions(-) rename packages/horizon/contracts/{ => data-service}/interfaces/IDataService.sol (98%) rename packages/horizon/contracts/data-service/{extensions => interfaces}/IDataServiceFees.sol (91%) rename packages/horizon/contracts/data-service/{extensions => interfaces}/IDataServicePausable.sol (73%) rename packages/horizon/contracts/data-service/{extensions => interfaces}/IDataServiceRescuable.sol (79%) rename packages/horizon/contracts/interfaces/{ => internal}/IHorizonStakingBase.sol (97%) rename packages/horizon/contracts/interfaces/{ => internal}/IHorizonStakingExtension.sol (100%) rename packages/horizon/contracts/interfaces/{ => internal}/IHorizonStakingMain.sol (99%) rename packages/horizon/contracts/interfaces/{ => internal}/IHorizonStakingTypes.sol (100%) diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index 79e62216f..b2c39b6b0 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; -import { IDataService } from "../interfaces/IDataService.sol"; +import { IDataService } from "./interfaces/IDataService.sol"; import { DataServiceV1Storage } from "./DataServiceStorage.sol"; import { GraphDirectory } from "./GraphDirectory.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index b61526cf7..e25057f80 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; -import { IDataServiceFees } from "./IDataServiceFees.sol"; +import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; import { ProvisionTracker } from "../libraries/ProvisionTracker.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index a55a393e3..7069b9bb6 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; -import { IDataServiceFees } from "./IDataServiceFees.sol"; +import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; abstract contract DataServiceFeesV1Storage { diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index dc35d5f8a..d38b1fc0e 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; -import { IDataServicePausable } from "./IDataServicePausable.sol"; +import { IDataServicePausable } from "../interfaces/IDataServicePausable.sol"; import { Pausable } from "@openzeppelin/contracts/utils/Pausable.sol"; import { DataService } from "../DataService.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index fd790dae3..dffd76804 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.24; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import { IDataServiceRescuable } from "./IDataServiceRescuable.sol"; +import { IDataServiceRescuable } from "../interfaces/IDataServiceRescuable.sol"; import { DataService } from "../DataService.sol"; diff --git a/packages/horizon/contracts/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol similarity index 98% rename from packages/horizon/contracts/interfaces/IDataService.sol rename to packages/horizon/contracts/data-service/interfaces/IDataService.sol index 7b401e533..3406c7029 100644 --- a/packages/horizon/contracts/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; -import { IGraphPayments } from "./IGraphPayments.sol"; +import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; /** * @title Interface of the base {DataService} contract as defined by the Graph Horizon specification. diff --git a/packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol similarity index 91% rename from packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol rename to packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index 58f9f876f..b89ef5f5e 100644 --- a/packages/horizon/contracts/data-service/extensions/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; -import { IDataService } from "../../interfaces/IDataService.sol"; +import { IDataService } from "./IDataService.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; interface IDataServiceFees is IDataService { diff --git a/packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol similarity index 73% rename from packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol rename to packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol index 6996c2bcf..04e17422d 100644 --- a/packages/horizon/contracts/data-service/extensions/IDataServicePausable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; -import { IDataService } from "../../interfaces/IDataService.sol"; +import { IDataService } from "./IDataService.sol"; interface IDataServicePausable is IDataService { function pause() external; diff --git a/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol similarity index 79% rename from packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol rename to packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol index e8075dab5..76c5a53b6 100644 --- a/packages/horizon/contracts/data-service/extensions/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; -import { IDataService } from "../../interfaces/IDataService.sol"; +import { IDataService } from "./IDataService.sol"; interface IDataServiceRescuable is IDataService { function rescueGRT(address to, uint256 tokens) external; diff --git a/packages/horizon/contracts/interfaces/IHorizonStaking.sol b/packages/horizon/contracts/interfaces/IHorizonStaking.sol index 96560f7a3..13d9f19f6 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStaking.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStaking.sol @@ -2,8 +2,8 @@ pragma solidity 0.8.24; -import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; -import { IHorizonStakingMain } from "./IHorizonStakingMain.sol"; -import { IHorizonStakingExtension } from "./IHorizonStakingExtension.sol"; +import { IHorizonStakingTypes } from "./internal/IHorizonStakingTypes.sol"; +import { IHorizonStakingMain } from "./internal/IHorizonStakingMain.sol"; +import { IHorizonStakingExtension } from "./internal/IHorizonStakingExtension.sol"; interface IHorizonStaking is IHorizonStakingTypes, IHorizonStakingMain, IHorizonStakingExtension {} diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol similarity index 97% rename from packages/horizon/contracts/interfaces/IHorizonStakingBase.sol rename to packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index a5f6e4fa4..2483ebda4 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.24; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; -import { IGraphPayments } from "./IGraphPayments.sol"; +import { IGraphPayments } from "../IGraphPayments.sol"; interface IHorizonStakingBase { /** diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol similarity index 100% rename from packages/horizon/contracts/interfaces/IHorizonStakingExtension.sol rename to packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol similarity index 99% rename from packages/horizon/contracts/interfaces/IHorizonStakingMain.sol rename to packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 8146ed5cb..7961902ec 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.24; import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; -import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; interface IHorizonStakingMain is IHorizonStakingBase { /** diff --git a/packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol similarity index 100% rename from packages/horizon/contracts/interfaces/IHorizonStakingTypes.sol rename to packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index c780c3880..aeaffec2c 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -3,9 +3,9 @@ pragma solidity 0.8.24; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; -import { IHorizonStakingMain } from "../interfaces/IHorizonStakingMain.sol"; +import { IHorizonStakingMain } from "../interfaces/internal/IHorizonStakingMain.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; -import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; +import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index cd54932b8..74b720679 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -2,8 +2,8 @@ pragma solidity 0.8.24; -import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; -import { IHorizonStakingBase } from "../interfaces/IHorizonStakingBase.sol"; +import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; +import { IHorizonStakingBase } from "../interfaces/internal/IHorizonStakingBase.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; @@ -187,14 +187,14 @@ abstract contract HorizonStakingBase is return pool; } - function etIdleStake(address serviceProvider) public view returns (uint256 tokens) { + function _getIdleStake(address _serviceProvider) public view returns (uint256 tokens) { return - _serviceProviders[serviceProvider].tokensStaked - - _serviceProviders[serviceProvider].tokensProvisioned - - _serviceProviders[serviceProvider].__DEPRECATED_tokensLocked; + _serviceProviders[_serviceProvider].tokensStaked - + _serviceProviders[_serviceProvider].tokensProvisioned - + _serviceProviders[_serviceProvider].__DEPRECATED_tokensLocked; } - function gtProviderTokensAvailable(address serviceProvider, address verifier) public view returns (uint256) { - return _provisions[serviceProvider][verifier].tokens - _provisions[serviceProvider][verifier].tokensThawing; + function _getProviderTokensAvailable(address _serviceProvider, address _verifier) public view returns (uint256) { + return _provisions[_serviceProvider][_verifier].tokens - _provisions[_serviceProvider][_verifier].tokensThawing; } } diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 71cfd3dc6..a9666a832 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -5,8 +5,8 @@ pragma solidity 0.8.24; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; -import { IHorizonStakingExtension } from "../interfaces/IHorizonStakingExtension.sol"; -import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; +import { IHorizonStakingExtension } from "../interfaces/internal/IHorizonStakingExtension.sol"; +import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index 96af3a4fb..ff9a1e2bb 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -2,8 +2,8 @@ pragma solidity 0.8.24; -import { IHorizonStakingExtension } from "../interfaces/IHorizonStakingExtension.sol"; -import { IHorizonStakingTypes } from "../interfaces/IHorizonStakingTypes.sol"; +import { IHorizonStakingExtension } from "../interfaces/internal/IHorizonStakingExtension.sol"; +import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; // TODO: create custom var-name-mixedcase From ca633f40a469768880fbb22a34c90ce26f6f335f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 12:32:57 -0300 Subject: [PATCH 062/343] chore: disable autofix for solhint plugin, its bugged MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/solhint-plugin-graph/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/solhint-plugin-graph/index.js b/packages/solhint-plugin-graph/index.js index d21c8840d..b2d3b88f6 100644 --- a/packages/solhint-plugin-graph/index.js +++ b/packages/solhint-plugin-graph/index.js @@ -112,7 +112,7 @@ module.exports = [ this.error( node, `'${name}' ${shouldHaveLeadingUnderscore ? 'should' : 'should not'} start with _`, - this.fixStatement(node, shouldHaveLeadingUnderscore, type) + // this.fixStatement(node, shouldHaveLeadingUnderscore, type) ) } }, From eef74f642b7cc9385d853e3e682b38de0b2fa288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 13:02:57 -0300 Subject: [PATCH 063/343] chore: order staking functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../internal/IHorizonStakingMain.sol | 30 +- .../contracts/staking/HorizonStaking.sol | 816 ++++++++++-------- .../contracts/staking/HorizonStakingBase.sol | 16 +- .../staking/HorizonStakingExtension.sol | 2 - 4 files changed, 474 insertions(+), 390 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 7961902ec..80613c018 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.24; import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; -import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; interface IHorizonStakingMain is IHorizonStakingBase { @@ -120,6 +119,19 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint256 feeCut ); + error HorizonStakingInvalidVerifier(address verifier); + error HorizonStakingVerifierAlreadyAllowed(address verifier); + error HorizonStakingVerifierNotAllowed(address verifier); + error HorizonStakingInvalidZeroTokens(); + error HorizonStakingInvalidProvision(address serviceProvider, address verifier); + error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); + error HorizonStakingInsufficientCapacity(); + error HorizonStakingInsufficientShares(); + error HorizonStakingInsufficientCapacityForLegacyAllocations(); + error HorizonStakingTooManyThawRequests(); + error HorizonStakingInsufficientTokens(uint256 expected, uint256 available); + error HorizonStakingSlippageProtection(uint256 minExpectedShares, uint256 actualShares); + // deposit stake function stake(uint256 tokens) external; @@ -224,14 +236,6 @@ interface IHorizonStakingMain is IHorizonStakingBase { function acceptProvisionParameters(address serviceProvider) external; - /** - * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param operator The address to check for auth - * @param serviceProvider The service provider on behalf of whom they're claiming to act - * @param verifier The verifier / data service on which they're claiming to act - */ - function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); - /** * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. * @param operator Address to authorize or unauthorize @@ -249,4 +253,12 @@ interface IHorizonStakingMain is IHorizonStakingBase { IGraphPayments.PaymentTypes paymentType, uint256 feeCut ) external; + + /** + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param operator The address to check for auth + * @param serviceProvider The service provider on behalf of whom they're claiming to act + * @param verifier The verifier / data service on which they're claiming to act + */ + function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index aeaffec2c..67cfdf0b0 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -5,7 +5,6 @@ pragma solidity 0.8.24; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStakingMain } from "../interfaces/internal/IHorizonStakingMain.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; -import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; @@ -45,19 +44,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address private immutable STAKING_EXTENSION_ADDRESS; - error HorizonStakingInvalidVerifier(address verifier); - error HorizonStakingVerifierAlreadyAllowed(address verifier); - error HorizonStakingVerifierNotAllowed(address verifier); - error HorizonStakingInvalidZeroTokens(); - error HorizonStakingInvalidProvision(address serviceProvider, address verifier); - error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); - error HorizonStakingInsufficientCapacity(); - error HorizonStakingInsufficientShares(); - error HorizonStakingInsufficientCapacityForLegacyAllocations(); - error HorizonStakingTooManyThawRequests(); - error HorizonStakingInsufficientTokens(uint256 expected, uint256 available); - error HorizonStakingSlippageProtection(uint256 minExpectedShares, uint256 actualShares); - modifier onlyAuthorized(address serviceProvider, address verifier) { if (!isAuthorized(msg.sender, serviceProvider, verifier)) { revert HorizonStakingNotAuthorized(msg.sender, serviceProvider, verifier); @@ -108,66 +94,25 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } } + /* + * STAKING + */ + /** * @notice Deposit tokens on the caller's stake. * @param tokens Amount of tokens to stake */ function stake(uint256 tokens) external override { - stakeTo(msg.sender, tokens); + _stakeTo(msg.sender, tokens); } /** - * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. - * @param operator Address to authorize or unauthorize - * @param verifier The verifier / data service on which they'll be allowed to operate - * @param allowed Whether the operator is authorized or not + * @notice Deposit tokens on the service provider stake, on behalf of the service provider. + * @param serviceProvider Address of the service provider + * @param tokens Amount of tokens to stake */ - function setOperator(address operator, address verifier, bool allowed) external override { - require(operator != msg.sender, "operator == sender"); - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - _legacyOperatorAuth[msg.sender][operator] = allowed; - } else { - _operatorAuth[msg.sender][verifier][operator] = allowed; - } - emit OperatorSet(msg.sender, operator, verifier, allowed); - } - - // for vesting contracts - function setOperatorLocked(address operator, address verifier, bool allowed) external override { - require(operator != msg.sender, "operator == sender"); - require(_allowedLockedVerifiers[verifier], "VERIFIER_NOT_ALLOWED"); - _operatorAuth[msg.sender][verifier][operator] = allowed; - emit OperatorSet(msg.sender, operator, verifier, allowed); - } - - function setDelegationFeeCut( - address serviceProvider, - address verifier, - IGraphPayments.PaymentTypes paymentType, - uint256 feeCut - ) external override { - delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; - emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); - } - - function setProvisionParameters( - address serviceProvider, - address verifier, - uint32 maxVerifierCut, - uint64 thawingPeriod - ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { - Provision storage prov = _provisions[serviceProvider][verifier]; - prov.maxVerifierCutPending = maxVerifierCut; - prov.thawingPeriodPending = thawingPeriod; - emit ProvisionParametersStaged(serviceProvider, verifier, maxVerifierCut, thawingPeriod); - } - - function acceptProvisionParameters(address serviceProvider) external override notPartialPaused { - address verifier = msg.sender; - Provision storage prov = _provisions[serviceProvider][verifier]; - prov.maxVerifierCut = prov.maxVerifierCutPending; - prov.thawingPeriod = prov.thawingPeriodPending; - emit ProvisionParametersSet(serviceProvider, verifier, prov.maxVerifierCut, prov.thawingPeriod); + function stakeTo(address serviceProvider, uint256 tokens) external override notPartialPaused { + _stakeTo(serviceProvider, tokens); } /** @@ -182,40 +127,37 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, uint256 tokens ) external override notPartialPaused { - stakeTo(serviceProvider, tokens); + _stakeTo(serviceProvider, tokens); _addToProvision(serviceProvider, verifier, tokens); } /** - * @notice Provision stake to a verifier. The tokens will be locked with a thawing period - * and will be slashable by the verifier. This is the main mechanism to provision stake to a data - * service, where the data service is the verifier. - * This function can be called by the service provider or by an operator authorized by the provider - * for this specific verifier. - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) - * @param tokens The amount of tokens that will be locked and slashable - * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing - * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + * @notice Move idle stake back to the owner's account. + * If tokens were thawing they must be deprovisioned first. + * Stake is removed from the protocol. + * @param tokens Amount of tokens to unstake */ - function provision( - address serviceProvider, - address verifier, - uint256 tokens, - uint32 maxVerifierCut, - uint64 thawingPeriod - ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { - if (_getIdleStake(serviceProvider) < tokens) { - revert HorizonStakingInsufficientCapacity(); - } + function unstake(uint256 tokens) external override notPaused { + _unstake(tokens); + } - _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); + /** + * @notice Withdraw service provider tokens once the thawing period has passed. + * @dev This is only needed during the transition period while we still have + * a global lock. After that, unstake() will also withdraw. + */ + function withdraw() external override notPaused { + _withdraw(msg.sender); } + /* + * PROVISIONS + */ + /** - * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets). The tokens will be locked with a thawing period + * @notice Provision stake to a verifier. The tokens will be locked with a thawing period * and will be slashable by the verifier. This is the main mechanism to provision stake to a data - * service, where the data service is the verifier. Only authorized verifiers can be used. + * service, where the data service is the verifier. * This function can be called by the service provider or by an operator authorized by the provider * for this specific verifier. * @param serviceProvider The service provider address @@ -224,7 +166,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision */ - function provisionLocked( + function provision( address serviceProvider, address verifier, uint256 tokens, @@ -234,9 +176,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { if (_getIdleStake(serviceProvider) < tokens) { revert HorizonStakingInsufficientCapacity(); } - if (!_allowedLockedVerifiers[verifier]) { - revert HorizonStakingInvalidVerifier(verifier); - } + _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } @@ -341,93 +281,205 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _addToProvision(serviceProvider, newVerifier, tokens); } - /** - * @notice Move idle stake back to the owner's account. - * If tokens were thawing they must be deprovisioned first. - * Stake is removed from the protocol. - * @param tokens Amount of tokens to unstake + function setProvisionParameters( + address serviceProvider, + address verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + Provision storage prov = _provisions[serviceProvider][verifier]; + prov.maxVerifierCutPending = maxVerifierCut; + prov.thawingPeriodPending = thawingPeriod; + emit ProvisionParametersStaged(serviceProvider, verifier, maxVerifierCut, thawingPeriod); + } + + function acceptProvisionParameters(address serviceProvider) external override notPartialPaused { + address verifier = msg.sender; + Provision storage prov = _provisions[serviceProvider][verifier]; + prov.maxVerifierCut = prov.maxVerifierCutPending; + prov.thawingPeriod = prov.thawingPeriodPending; + emit ProvisionParametersSet(serviceProvider, verifier, prov.maxVerifierCut, prov.thawingPeriod); + } + + /* + * DELEGATION */ - function unstake(uint256 tokens) external override notPaused { - address serviceProvider = msg.sender; - if (tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } - if (_getIdleStake(serviceProvider) < tokens) { - revert HorizonStakingInsufficientCapacity(); - } - ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; - uint256 stakedTokens = sp.tokensStaked; - // Check that the service provider's stake minus the tokens to unstake is sufficient - // to cover existing allocations - // TODO this is only needed until legacy allocations are closed, - // so we should remove it after the transition period - if ((stakedTokens - tokens) < sp.__DEPRECATED_tokensAllocated) { - revert HorizonStakingInsufficientCapacityForLegacyAllocations(); - } + function delegate( + address serviceProvider, + address verifier, + uint256 tokens, + uint256 minSharesOut + ) external override notPartialPaused { + _graphToken().pullTokens(msg.sender, tokens); + _delegate(serviceProvider, verifier, tokens, minSharesOut); + } - // This is also only during the transition period: we need - // to ensure tokens stay locked after closing legacy allocations. - // After sufficient time (56 days?) we should remove the closeAllocation function - // and set the thawing period to 0. - uint256 lockingPeriod = __DEPRECATED_thawingPeriod; - if (lockingPeriod == 0) { - sp.tokensStaked = stakedTokens - tokens; - _graphToken().pushTokens(serviceProvider, tokens); - emit StakeWithdrawn(serviceProvider, tokens); - } else { - // Before locking more tokens, withdraw any unlocked ones if possible - if (sp.__DEPRECATED_tokensLockedUntil != 0 && block.number >= sp.__DEPRECATED_tokensLockedUntil) { - _withdraw(serviceProvider); - } - // TODO remove after the transition period - // Take into account period averaging for multiple unstake requests - if (sp.__DEPRECATED_tokensLocked > 0) { - lockingPeriod = MathUtils.weightedAverageRoundingUp( - MathUtils.diffOrZero(sp.__DEPRECATED_tokensLockedUntil, block.number), // Remaining thawing period - sp.__DEPRECATED_tokensLocked, // Weighted by remaining unstaked tokens - lockingPeriod, // Thawing period - tokens // Weighted by new tokens to unstake - ); + // undelegate tokens from a service provider + // the shares are burned and replaced with shares in the thawing pool + function undelegate(address serviceProvider, address verifier, uint256 shares) external override notPartialPaused { + _undelegate(serviceProvider, verifier, shares); + } + + function withdrawDelegated( + address serviceProvider, + address verifier, + address newServiceProvider, + uint256 minSharesForNewProvider + ) external override notPartialPaused { + DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); + Delegation storage delegation = pool.delegators[msg.sender]; + uint256 thawedTokens = 0; + + uint256 sharesThawing = pool.sharesThawing; + uint256 tokensThawing = pool.tokensThawing; + require(delegation.nThawRequests > 0, "no thaw requests"); + bytes32 thawRequestId = delegation.firstThawRequestId; + while (thawRequestId != bytes32(0)) { + ThawRequest storage thawRequest = _thawRequests[thawRequestId]; + if (thawRequest.thawingUntil <= block.timestamp) { + uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; + tokensThawing = tokensThawing - tokens; + sharesThawing = sharesThawing - thawRequest.shares; + thawedTokens = thawedTokens + tokens; + delete _thawRequests[thawRequestId]; + delegation.firstThawRequestId = thawRequest.next; + delegation.nThawRequests -= 1; + if (delegation.nThawRequests == 0) { + delegation.lastThawRequestId = bytes32(0); + } + } else { + break; } + thawRequestId = thawRequest.next; + } - // Update balances - sp.__DEPRECATED_tokensLocked = sp.__DEPRECATED_tokensLocked + tokens; - sp.__DEPRECATED_tokensLockedUntil = block.number + lockingPeriod; - emit StakeLocked(serviceProvider, sp.__DEPRECATED_tokensLocked, sp.__DEPRECATED_tokensLockedUntil); + pool.tokens = pool.tokens - thawedTokens; + pool.sharesThawing = sharesThawing; + pool.tokensThawing = tokensThawing; + + if (newServiceProvider != address(0)) { + _delegate(newServiceProvider, verifier, thawedTokens, minSharesForNewProvider); + } else { + _graphToken().pushTokens(msg.sender, thawedTokens); } + emit DelegatedTokensWithdrawn(serviceProvider, verifier, msg.sender, thawedTokens); } /** - * @notice Slash a service provider. This can only be called by a verifier to which - * the provider has provisioned stake, and up to the amount of tokens they have provisioned. - * @dev If delegation slashing is disabled, and the amount of tokens is more than the - * provider's provisioned self-stake, the delegation slashing is skipped without reverting. - * @param serviceProvider The service provider to slash - * @param tokens The amount of tokens to slash - * @param tokensVerifier The amount of tokens to transfer instead of burning - * @param verifierDestination The address to transfer the verifier cut to + * @notice Add tokens to a delegation pool (without getting shares). + * Used by data services to pay delegation fees/rewards. + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + * @param tokens The amount of tokens to add to the delegation pool */ - function slash( + function addToDelegationPool( address serviceProvider, - uint256 tokens, - uint256 tokensVerifier, - address verifierDestination + address verifier, + uint256 tokens ) external override notPartialPaused { - address verifier = msg.sender; - Provision storage prov = _provisions[serviceProvider][verifier]; - if (prov.tokens < tokens) { - revert HorizonStakingInsufficientTokens(tokens, prov.tokens); + if (tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); } + DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); + pool.tokens = pool.tokens + tokens; + emit TokensAddedToDelegationPool(serviceProvider, verifier, tokens); + } - uint256 tokensToSlash = tokens; - uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); - if (providerTokensSlashed > 0) { - require(prov.tokens.mulPPM(prov.maxVerifierCut) >= tokensVerifier, "verifier cut too high"); - if (tokensVerifier > 0) { - _graphToken().pushTokens(verifierDestination, tokensVerifier); - emit VerifierTokensSent(serviceProvider, verifier, verifierDestination, tokensVerifier); - } + function setDelegationSlashingEnabled(bool enabled) external override onlyGovernor { + delegationSlashingEnabled = enabled; + emit DelegationSlashingEnabled(enabled); + } + + function setDelegationFeeCut( + address serviceProvider, + address verifier, + IGraphPayments.PaymentTypes paymentType, + uint256 feeCut + ) external override { + delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; + emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); + } + + // For backwards compatibility, delegates to the subgraph data service + // (Note this one doesn't have splippage/rounding protection!) + function delegate(address serviceProvider, uint256 tokens) external { + _graphToken().pullTokens(msg.sender, tokens); + _delegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, tokens, 0); + } + + // For backwards compatibility, undelegates from the subgraph data service + function undelegate(address serviceProvider, uint256 shares) external { + _undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares); + } + + // For backwards compatibility, withdraws delegated tokens from the subgraph data service + function withdrawDelegated(address serviceProvider, address newServiceProvider) external { + _withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0); + } + + /* + * OPERATOR + */ + + /** + * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * @param operator Address to authorize or unauthorize + * @param verifier The verifier / data service on which they'll be allowed to operate + * @param allowed Whether the operator is authorized or not + */ + function setOperator(address operator, address verifier, bool allowed) external override { + require(operator != msg.sender, "operator == sender"); + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + _legacyOperatorAuth[msg.sender][operator] = allowed; + } else { + _operatorAuth[msg.sender][verifier][operator] = allowed; + } + emit OperatorSet(msg.sender, operator, verifier, allowed); + } + + // for vesting contracts + function setOperatorLocked(address operator, address verifier, bool allowed) external override { + require(operator != msg.sender, "operator == sender"); + require(_allowedLockedVerifiers[verifier], "VERIFIER_NOT_ALLOWED"); + _operatorAuth[msg.sender][verifier][operator] = allowed; + emit OperatorSet(msg.sender, operator, verifier, allowed); + } + + /* + * SLASHING + */ + + /** + * @notice Slash a service provider. This can only be called by a verifier to which + * the provider has provisioned stake, and up to the amount of tokens they have provisioned. + * @dev If delegation slashing is disabled, and the amount of tokens is more than the + * provider's provisioned self-stake, the delegation slashing is skipped without reverting. + * @param serviceProvider The service provider to slash + * @param tokens The amount of tokens to slash + * @param tokensVerifier The amount of tokens to transfer instead of burning + * @param verifierDestination The address to transfer the verifier cut to + */ + function slash( + address serviceProvider, + uint256 tokens, + uint256 tokensVerifier, + address verifierDestination + ) external override notPartialPaused { + address verifier = msg.sender; + Provision storage prov = _provisions[serviceProvider][verifier]; + if (prov.tokens < tokens) { + revert HorizonStakingInsufficientTokens(tokens, prov.tokens); + } + + uint256 tokensToSlash = tokens; + uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); + if (providerTokensSlashed > 0) { + require(prov.tokens.mulPPM(prov.maxVerifierCut) >= tokensVerifier, "verifier cut too high"); + if (tokensVerifier > 0) { + _graphToken().pushTokens(verifierDestination, tokensVerifier); + emit VerifierTokensSent(serviceProvider, verifier, verifierDestination, tokensVerifier); + } _graphToken().burnTokens(providerTokensSlashed - tokensVerifier); uint256 provisionFractionSlashed = (providerTokensSlashed * FIXED_POINT_PRECISION) / prov.tokens; // TODO check for rounding issues @@ -462,59 +514,41 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } } - // For backwards compatibility, delegates to the subgraph data service - // (Note this one doesn't have splippage/rounding protection!) - function delegate(address serviceProvider, uint256 tokens) external { - delegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, tokens, 0); - } - - // For backwards compatibility, undelegates from the subgraph data service - function undelegate(address serviceProvider, uint256 shares) external { - undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares); - } - - // For backwards compatibility, withdraws delegated tokens from the subgraph data service - function withdrawDelegated(address serviceProvider, address newServiceProvider) external { - withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0); - } - - function setAllowedLockedVerifier(address verifier, bool allowed) external onlyGovernor { - _allowedLockedVerifiers[verifier] = allowed; - emit AllowedLockedVerifierSet(verifier, allowed); - } - - /** - * @notice Withdraw service provider tokens once the thawing period has passed. - * @dev This is only needed during the transition period while we still have - * a global lock. After that, unstake() will also withdraw. + /* + * LOCKED VERIFIERS */ - function withdraw() external override notPaused { - _withdraw(msg.sender); - } /** - * @notice Add tokens to a delegation pool (without getting shares). - * Used by data services to pay delegation fees/rewards. + * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets). The tokens will be locked with a thawing period + * and will be slashable by the verifier. This is the main mechanism to provision stake to a data + * service, where the data service is the verifier. Only authorized verifiers can be used. + * This function can be called by the service provider or by an operator authorized by the provider + * for this specific verifier. * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned - * @param tokens The amount of tokens to add to the delegation pool + * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) + * @param tokens The amount of tokens that will be locked and slashable + * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing + * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision */ - function addToDelegationPool( + function provisionLocked( address serviceProvider, address verifier, - uint256 tokens - ) external override notPartialPaused { - if (tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + if (_getIdleStake(serviceProvider) < tokens) { + revert HorizonStakingInsufficientCapacity(); } - DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); - pool.tokens = pool.tokens + tokens; - emit TokensAddedToDelegationPool(serviceProvider, verifier, tokens); + if (!_allowedLockedVerifiers[verifier]) { + revert HorizonStakingInvalidVerifier(verifier); + } + _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } - function setDelegationSlashingEnabled(bool enabled) external override onlyGovernor { - delegationSlashingEnabled = enabled; - emit DelegationSlashingEnabled(enabled); + function setAllowedLockedVerifier(address verifier, bool allowed) external onlyGovernor { + _allowedLockedVerifiers[verifier] = allowed; + emit AllowedLockedVerifierSet(verifier, allowed); } // To be called at the end of the transition period, to set the deprecated thawing period to 0 @@ -529,63 +563,224 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @notice Deposit tokens on the service provider stake, on behalf of the service provider. - * @param serviceProvider Address of the service provider - * @param tokens Amount of tokens to stake + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param operator The address to check for auth + * @param serviceProvider The service provider on behalf of whom they're claiming to act + * @param verifier The verifier / data service on which they're claiming to act */ - function stakeTo(address serviceProvider, uint256 tokens) public override notPartialPaused { - if (tokens == 0) { + function isAuthorized( + address operator, + address serviceProvider, + address verifier + ) public view override returns (bool) { + if (operator == serviceProvider) { + return true; + } + if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + return _legacyOperatorAuth[serviceProvider][operator]; + } else { + return _operatorAuth[serviceProvider][verifier][operator]; + } + } + + /* + * PRIVATE FUNCTIONS + */ + function _stakeTo(address _serviceProvider, uint256 _tokens) private { + if (_tokens == 0) { revert HorizonStakingInvalidZeroTokens(); } // Transfer tokens to stake from caller to this contract - _graphToken().pullTokens(msg.sender, tokens); + _graphToken().pullTokens(msg.sender, _tokens); // Stake the transferred tokens - _stake(serviceProvider, tokens); + _stake(_serviceProvider, _tokens); } - function delegate( - address serviceProvider, - address verifier, - uint256 tokens, - uint256 minSharesOut - ) public override notPartialPaused { - // Transfer tokens to stake from caller to this contract - _graphToken().pullTokens(msg.sender, tokens); - _delegate(serviceProvider, verifier, tokens, minSharesOut); + function _unstake(uint256 _tokens) private { + address serviceProvider = msg.sender; + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + if (_getIdleStake(serviceProvider) < _tokens) { + revert HorizonStakingInsufficientCapacity(); + } + + ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; + uint256 stakedTokens = sp.tokensStaked; + // Check that the service provider's stake minus the tokens to unstake is sufficient + // to cover existing allocations + // TODO this is only needed until legacy allocations are closed, + // so we should remove it after the transition period + if ((stakedTokens - _tokens) < sp.__DEPRECATED_tokensAllocated) { + revert HorizonStakingInsufficientCapacityForLegacyAllocations(); + } + + // This is also only during the transition period: we need + // to ensure tokens stay locked after closing legacy allocations. + // After sufficient time (56 days?) we should remove the closeAllocation function + // and set the thawing period to 0. + uint256 lockingPeriod = __DEPRECATED_thawingPeriod; + if (lockingPeriod == 0) { + sp.tokensStaked = stakedTokens - _tokens; + _graphToken().pushTokens(serviceProvider, _tokens); + emit StakeWithdrawn(serviceProvider, _tokens); + } else { + // Before locking more tokens, withdraw any unlocked ones if possible + if (sp.__DEPRECATED_tokensLockedUntil != 0 && block.number >= sp.__DEPRECATED_tokensLockedUntil) { + _withdraw(serviceProvider); + } + // TODO remove after the transition period + // Take into account period averaging for multiple unstake requests + if (sp.__DEPRECATED_tokensLocked > 0) { + lockingPeriod = MathUtils.weightedAverageRoundingUp( + MathUtils.diffOrZero(sp.__DEPRECATED_tokensLockedUntil, block.number), // Remaining thawing period + sp.__DEPRECATED_tokensLocked, // Weighted by remaining unstaked tokens + lockingPeriod, // Thawing period + _tokens // Weighted by new tokens to unstake + ); + } + + // Update balances + sp.__DEPRECATED_tokensLocked = sp.__DEPRECATED_tokensLocked + _tokens; + sp.__DEPRECATED_tokensLockedUntil = block.number + lockingPeriod; + emit StakeLocked(serviceProvider, sp.__DEPRECATED_tokensLocked, sp.__DEPRECATED_tokensLockedUntil); + } } - // undelegate tokens from a service provider - // the shares are burned and replaced with shares in the thawing pool - function undelegate(address serviceProvider, address verifier, uint256 shares) public override notPartialPaused { - require(shares > 0, "!shares"); - DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); + /** + * @dev Creates a provision + */ + function _createProvision( + address _serviceProvider, + uint256 _tokens, + address _verifier, + uint32 _maxVerifierCut, + uint64 _thawingPeriod + ) private { + require(_tokens >= MIN_PROVISION_SIZE, "!tokens"); + require(_maxVerifierCut <= MAX_MAX_VERIFIER_CUT, "maxVerifierCut too high"); + require(_thawingPeriod <= _maxThawingPeriod, "thawingPeriod too high"); + _provisions[_serviceProvider][_verifier] = Provision({ + tokens: _tokens, + tokensThawing: 0, + sharesThawing: 0, + maxVerifierCut: _maxVerifierCut, + thawingPeriod: _thawingPeriod, + createdAt: uint64(block.timestamp), + firstThawRequestId: bytes32(0), + lastThawRequestId: bytes32(0), + nThawRequests: 0, + maxVerifierCutPending: _maxVerifierCut, + thawingPeriodPending: _thawingPeriod + }); + + ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; + sp.tokensProvisioned = sp.tokensProvisioned + _tokens; + + emit ProvisionCreated(_serviceProvider, _verifier, _tokens, _maxVerifierCut, _thawingPeriod); + } + + function _addToProvision(address _serviceProvider, address _verifier, uint256 _tokens) private { + Provision storage prov = _provisions[_serviceProvider][_verifier]; + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + if (prov.createdAt == 0) { + revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); + } + if (_getIdleStake(_serviceProvider) < _tokens) { + revert HorizonStakingInsufficientCapacity(); + } + + prov.tokens = prov.tokens + _tokens; + _serviceProviders[_serviceProvider].tokensProvisioned = + _serviceProviders[_serviceProvider].tokensProvisioned + + _tokens; + emit ProvisionIncreased(_serviceProvider, _verifier, _tokens); + } + + /** + * @dev Withdraw service provider tokens once the thawing period has passed. + * @param _serviceProvider Address of service provider to withdraw funds from + */ + function _withdraw(address _serviceProvider) private { + // Get tokens available for withdraw and update balance + ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; + uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; + require(tokensToWithdraw > 0, "!tokens"); + require(block.number >= sp.__DEPRECATED_tokensLockedUntil, "locked"); + + // Reset locked tokens + sp.__DEPRECATED_tokensLocked = 0; + sp.__DEPRECATED_tokensLockedUntil = 0; + + sp.tokensStaked = sp.tokensStaked - tokensToWithdraw; + + // Return tokens to the service provider + _graphToken().pushTokens(_serviceProvider, tokensToWithdraw); + + emit StakeWithdrawn(_serviceProvider, tokensToWithdraw); + } + + function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) private { + if (_tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + // TODO: remove this after L2 transfer tool for delegation is removed + if (_tokens < MIN_DELEGATION) { + revert HorizonStakingInsufficientTokens(MIN_DELEGATION, _tokens); + } + if (_provisions[_serviceProvider][_verifier].tokens == 0) { + revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); + } + + DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); + Delegation storage delegation = pool.delegators[msg.sender]; + + // Calculate shares to issue + uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); + if (shares == 0 || shares < _minSharesOut) { + revert HorizonStakingSlippageProtection(_minSharesOut, shares); + } + + pool.tokens = pool.tokens + _tokens; + pool.shares = pool.shares + shares; + + delegation.shares = delegation.shares + shares; + + emit TokensDelegated(_serviceProvider, _verifier, msg.sender, _tokens); + } + + function _undelegate(address _serviceProvider, address _verifier, uint256 _shares) private { + require(_shares > 0, "!shares"); + DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); Delegation storage delegation = pool.delegators[msg.sender]; - require(delegation.shares >= shares, "!shares-avail"); + require(delegation.shares >= _shares, "!shares-avail"); - uint256 tokens = (shares * (pool.tokens - pool.tokensThawing)) / pool.shares; + uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); pool.tokensThawing = pool.tokensThawing + tokens; - pool.shares = pool.shares - shares; + pool.shares = pool.shares - _shares; pool.sharesThawing = pool.sharesThawing + thawingShares; - delegation.shares = delegation.shares - shares; + delegation.shares = delegation.shares - _shares; // TODO: remove this when L2 transfer tools are removed if (delegation.shares != 0) { uint256 remainingTokens = (delegation.shares * (pool.tokens - pool.tokensThawing)) / pool.shares; require(remainingTokens >= MIN_DELEGATION, "!minimum-delegation"); } bytes32 thawRequestId = keccak256( - abi.encodePacked(serviceProvider, verifier, msg.sender, delegation.nextThawRequestNonce) + abi.encodePacked(_serviceProvider, _verifier, msg.sender, delegation.nextThawRequestNonce) ); delegation.nextThawRequestNonce += 1; ThawRequest storage thawRequest = _thawRequests[thawRequestId]; thawRequest.shares = thawingShares; thawRequest.thawingUntil = uint64( - block.timestamp + uint256(_provisions[serviceProvider][verifier].thawingPeriod) + block.timestamp + uint256(_provisions[_serviceProvider][_verifier].thawingPeriod) ); require(delegation.nThawRequests < MAX_THAW_REQUESTS, "max thaw requests"); if (delegation.nThawRequests == 0) { @@ -597,16 +792,16 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { unchecked { delegation.nThawRequests += 1; } - emit TokensUndelegated(serviceProvider, verifier, msg.sender, tokens); + emit TokensUndelegated(_serviceProvider, _verifier, msg.sender, tokens); } - function withdrawDelegated( - address serviceProvider, - address verifier, - address newServiceProvider, - uint256 minSharesForNewProvider - ) public override notPartialPaused { - DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); + function _withdrawDelegated( + address _serviceProvider, + address _verifier, + address _newServiceProvider, + uint256 _minSharesForNewProvider + ) private { + DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); Delegation storage delegation = pool.delegators[msg.sender]; uint256 thawedTokens = 0; @@ -637,98 +832,15 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { pool.sharesThawing = sharesThawing; pool.tokensThawing = tokensThawing; - if (newServiceProvider != address(0)) { - _delegate(newServiceProvider, verifier, thawedTokens, minSharesForNewProvider); + if (_newServiceProvider != address(0)) { + _delegate(_newServiceProvider, _verifier, thawedTokens, _minSharesForNewProvider); } else { _graphToken().pushTokens(msg.sender, thawedTokens); } - emit DelegatedTokensWithdrawn(serviceProvider, verifier, msg.sender, thawedTokens); - } - - /** - * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param operator The address to check for auth - * @param serviceProvider The service provider on behalf of whom they're claiming to act - * @param verifier The verifier / data service on which they're claiming to act - */ - function isAuthorized( - address operator, - address serviceProvider, - address verifier - ) public view override returns (bool) { - if (operator == serviceProvider) { - return true; - } - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - return _legacyOperatorAuth[serviceProvider][operator]; - } else { - return _operatorAuth[serviceProvider][verifier][operator]; - } - } - - function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) internal { - if (_tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } - // TODO: remove this after L2 transfer tool for delegation is removed - if (_tokens < MIN_DELEGATION) { - revert HorizonStakingInsufficientTokens(MIN_DELEGATION, _tokens); - } - if (_provisions[_serviceProvider][_verifier].tokens == 0) { - revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); - } - - DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); - Delegation storage delegation = pool.delegators[msg.sender]; - - // Calculate shares to issue - uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); - if (shares == 0 || shares < _minSharesOut) { - revert HorizonStakingSlippageProtection(_minSharesOut, shares); - } - - pool.tokens = pool.tokens + _tokens; - pool.shares = pool.shares + shares; - - delegation.shares = delegation.shares + shares; - - emit TokensDelegated(_serviceProvider, _verifier, msg.sender, _tokens); - } - - /** - * @dev Creates a provision - */ - function _createProvision( - address _serviceProvider, - uint256 _tokens, - address _verifier, - uint32 _maxVerifierCut, - uint64 _thawingPeriod - ) internal { - require(_tokens >= MIN_PROVISION_SIZE, "!tokens"); - require(_maxVerifierCut <= MAX_MAX_VERIFIER_CUT, "maxVerifierCut too high"); - require(_thawingPeriod <= _maxThawingPeriod, "thawingPeriod too high"); - _provisions[_serviceProvider][_verifier] = Provision({ - tokens: _tokens, - tokensThawing: 0, - sharesThawing: 0, - maxVerifierCut: _maxVerifierCut, - thawingPeriod: _thawingPeriod, - createdAt: uint64(block.timestamp), - firstThawRequestId: bytes32(0), - lastThawRequestId: bytes32(0), - nThawRequests: 0, - maxVerifierCutPending: _maxVerifierCut, - thawingPeriodPending: _thawingPeriod - }); - - ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; - sp.tokensProvisioned = sp.tokensProvisioned + _tokens; - - emit ProvisionCreated(_serviceProvider, _verifier, _tokens, _maxVerifierCut, _thawingPeriod); + emit DelegatedTokensWithdrawn(_serviceProvider, _verifier, msg.sender, thawedTokens); } - function _fulfillThawRequests(address _serviceProvider, address _verifier, uint256 _tokens) internal { + function _fulfillThawRequests(address _serviceProvider, address _verifier, uint256 _tokens) private { Provision storage prov = _provisions[_serviceProvider][_verifier]; uint256 tokensRemaining = _tokens; uint256 sharesThawing = prov.sharesThawing; @@ -768,46 +880,4 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { prov.tokens = prov.tokens - _tokens; _serviceProviders[_serviceProvider].tokensProvisioned -= _tokens; } - - function _addToProvision(address _serviceProvider, address _verifier, uint256 _tokens) internal { - Provision storage prov = _provisions[_serviceProvider][_verifier]; - if (_tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } - if (prov.createdAt == 0) { - revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); - } - if (_getIdleStake(_serviceProvider) < _tokens) { - revert HorizonStakingInsufficientCapacity(); - } - - prov.tokens = prov.tokens + _tokens; - _serviceProviders[_serviceProvider].tokensProvisioned = - _serviceProviders[_serviceProvider].tokensProvisioned + - _tokens; - emit ProvisionIncreased(_serviceProvider, _verifier, _tokens); - } - - /** - * @dev Withdraw service provider tokens once the thawing period has passed. - * @param _serviceProvider Address of service provider to withdraw funds from - */ - function _withdraw(address _serviceProvider) private { - // Get tokens available for withdraw and update balance - ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; - uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; - require(tokensToWithdraw > 0, "!tokens"); - require(block.number >= sp.__DEPRECATED_tokensLockedUntil, "locked"); - - // Reset locked tokens - sp.__DEPRECATED_tokensLocked = 0; - sp.__DEPRECATED_tokensLockedUntil = 0; - - sp.tokensStaked = sp.tokensStaked - tokensToWithdraw; - - // Return tokens to the service provider - _graphToken().pushTokens(_serviceProvider, tokensToWithdraw); - - emit StakeWithdrawn(_serviceProvider, tokensToWithdraw); - } } diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 74b720679..e392a992b 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -57,7 +57,7 @@ abstract contract HorizonStakingBase is uint256 providerThawingTokens = _provisions[serviceProvider][verifier].tokensThawing; uint256 tokensDelegatedMax = (providerTokens - providerThawingTokens) * (uint256(delegationRatio)); uint256 tokensDelegatedCapacity = MathUtils.min( - getDelegatedTokensAvailable(serviceProvider, verifier), + _getDelegatedTokensAvailable(serviceProvider, verifier), tokensDelegatedMax ); return providerTokens - providerThawingTokens + tokensDelegatedCapacity; @@ -119,9 +119,8 @@ abstract contract HorizonStakingBase is function getDelegatedTokensAvailable( address serviceProvider, address verifier - ) public view override returns (uint256) { - DelegationPoolInternal storage poolInternal = _getDelegationPool(serviceProvider, verifier); - return poolInternal.tokens - poolInternal.tokensThawing; + ) external view override returns (uint256) { + return _getDelegatedTokensAvailable(serviceProvider, verifier); } // staked tokens that are currently not provisioned, aka idle stake @@ -187,14 +186,19 @@ abstract contract HorizonStakingBase is return pool; } - function _getIdleStake(address _serviceProvider) public view returns (uint256 tokens) { + function _getIdleStake(address _serviceProvider) internal view returns (uint256 tokens) { return _serviceProviders[_serviceProvider].tokensStaked - _serviceProviders[_serviceProvider].tokensProvisioned - _serviceProviders[_serviceProvider].__DEPRECATED_tokensLocked; } - function _getProviderTokensAvailable(address _serviceProvider, address _verifier) public view returns (uint256) { + function _getProviderTokensAvailable(address _serviceProvider, address _verifier) internal view returns (uint256) { return _provisions[_serviceProvider][_verifier].tokens - _provisions[_serviceProvider][_verifier].tokensThawing; } + + function _getDelegatedTokensAvailable(address _serviceProvider, address _verifier) internal view returns (uint256) { + DelegationPoolInternal storage poolInternal = _getDelegationPool(_serviceProvider, _verifier); + return poolInternal.tokens - poolInternal.tokensThawing; + } } diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index a9666a832..ce53e2860 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -16,8 +16,6 @@ import { ExponentialRebates } from "./libraries/ExponentialRebates.sol"; import { PPMMath } from "../libraries/PPMMath.sol"; import { HorizonStakingBase } from "./HorizonStakingBase.sol"; -import { Managed } from "./utilities/Managed.sol"; -import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; /** * @title Base Staking contract From 3ca420e2aff961eb730a722b7d74b39bcdcb1a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 13:53:58 -0300 Subject: [PATCH 064/343] chore: staking function ordering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/staking/HorizonStaking.sol | 138 ++++++++++-------- 1 file changed, 74 insertions(+), 64 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 67cfdf0b0..616efca8a 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -45,7 +45,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address private immutable STAKING_EXTENSION_ADDRESS; modifier onlyAuthorized(address serviceProvider, address verifier) { - if (!isAuthorized(msg.sender, serviceProvider, verifier)) { + if (!_isAuthorized(msg.sender, serviceProvider, verifier)) { revert HorizonStakingNotAuthorized(msg.sender, serviceProvider, verifier); } _; @@ -248,7 +248,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // moves thawed stake from a provision back into the provider's available stake function deprovision(address serviceProvider, address verifier, uint256 tokens) external override notPartialPaused { - require(isAuthorized(msg.sender, serviceProvider, verifier), "!auth"); + require(_isAuthorized(msg.sender, serviceProvider, verifier), "!auth"); if (tokens == 0) { revert HorizonStakingInvalidZeroTokens(); } @@ -315,6 +315,26 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _delegate(serviceProvider, verifier, tokens, minSharesOut); } + /** + * @notice Add tokens to a delegation pool (without getting shares). + * Used by data services to pay delegation fees/rewards. + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + * @param tokens The amount of tokens to add to the delegation pool + */ + function addToDelegationPool( + address serviceProvider, + address verifier, + uint256 tokens + ) external override notPartialPaused { + if (tokens == 0) { + revert HorizonStakingInvalidZeroTokens(); + } + DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); + pool.tokens = pool.tokens + tokens; + emit TokensAddedToDelegationPool(serviceProvider, verifier, tokens); + } + // undelegate tokens from a service provider // the shares are burned and replaced with shares in the thawing pool function undelegate(address serviceProvider, address verifier, uint256 shares) external override notPartialPaused { @@ -366,31 +386,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit DelegatedTokensWithdrawn(serviceProvider, verifier, msg.sender, thawedTokens); } - /** - * @notice Add tokens to a delegation pool (without getting shares). - * Used by data services to pay delegation fees/rewards. - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned - * @param tokens The amount of tokens to add to the delegation pool - */ - function addToDelegationPool( - address serviceProvider, - address verifier, - uint256 tokens - ) external override notPartialPaused { - if (tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } - DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); - pool.tokens = pool.tokens + tokens; - emit TokensAddedToDelegationPool(serviceProvider, verifier, tokens); - } - - function setDelegationSlashingEnabled(bool enabled) external override onlyGovernor { - delegationSlashingEnabled = enabled; - emit DelegationSlashingEnabled(enabled); - } - function setDelegationFeeCut( address serviceProvider, address verifier, @@ -418,34 +413,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0); } - /* - * OPERATOR - */ - - /** - * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. - * @param operator Address to authorize or unauthorize - * @param verifier The verifier / data service on which they'll be allowed to operate - * @param allowed Whether the operator is authorized or not - */ - function setOperator(address operator, address verifier, bool allowed) external override { - require(operator != msg.sender, "operator == sender"); - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - _legacyOperatorAuth[msg.sender][operator] = allowed; - } else { - _operatorAuth[msg.sender][verifier][operator] = allowed; - } - emit OperatorSet(msg.sender, operator, verifier, allowed); - } - - // for vesting contracts - function setOperatorLocked(address operator, address verifier, bool allowed) external override { - require(operator != msg.sender, "operator == sender"); - require(_allowedLockedVerifiers[verifier], "VERIFIER_NOT_ALLOWED"); - _operatorAuth[msg.sender][verifier][operator] = allowed; - emit OperatorSet(msg.sender, operator, verifier, allowed); - } - /* * SLASHING */ @@ -546,11 +513,26 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } + // for vesting contracts + function setOperatorLocked(address operator, address verifier, bool allowed) external override { + require(_allowedLockedVerifiers[verifier], "VERIFIER_NOT_ALLOWED"); + _setOperator(operator, verifier, allowed); + } + + /* + * GOVERNANCE + */ + function setAllowedLockedVerifier(address verifier, bool allowed) external onlyGovernor { _allowedLockedVerifiers[verifier] = allowed; emit AllowedLockedVerifierSet(verifier, allowed); } + function setDelegationSlashingEnabled(bool enabled) external override onlyGovernor { + delegationSlashingEnabled = enabled; + emit DelegationSlashingEnabled(enabled); + } + // To be called at the end of the transition period, to set the deprecated thawing period to 0 function clearThawingPeriod() external onlyGovernor { __DEPRECATED_thawingPeriod = 0; @@ -562,6 +544,20 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit ParameterUpdated("maxThawingPeriod"); } + /* + * OPERATOR + */ + + /** + * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * @param operator Address to authorize or unauthorize + * @param verifier The verifier / data service on which they'll be allowed to operate + * @param allowed Whether the operator is authorized or not + */ + function setOperator(address operator, address verifier, bool allowed) external override { + _setOperator(operator, verifier, allowed); + } + /** * @notice Check if an operator is authorized for the caller on a specific verifier / data service. * @param operator The address to check for auth @@ -572,15 +568,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address operator, address serviceProvider, address verifier - ) public view override returns (bool) { - if (operator == serviceProvider) { - return true; - } - if (verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - return _legacyOperatorAuth[serviceProvider][operator]; - } else { - return _operatorAuth[serviceProvider][verifier][operator]; - } + ) external view override returns (bool) { + return _isAuthorized(operator, serviceProvider, verifier); } /* @@ -840,6 +829,16 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit DelegatedTokensWithdrawn(_serviceProvider, _verifier, msg.sender, thawedTokens); } + function _setOperator(address _operator, address _verifier, bool _allowed) private { + require(_operator != msg.sender, "operator == sender"); + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + _legacyOperatorAuth[msg.sender][_operator] = _allowed; + } else { + _operatorAuth[msg.sender][_verifier][_operator] = _allowed; + } + emit OperatorSet(msg.sender, _operator, _verifier, _allowed); + } + function _fulfillThawRequests(address _serviceProvider, address _verifier, uint256 _tokens) private { Provision storage prov = _provisions[_serviceProvider][_verifier]; uint256 tokensRemaining = _tokens; @@ -880,4 +879,15 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { prov.tokens = prov.tokens - _tokens; _serviceProviders[_serviceProvider].tokensProvisioned -= _tokens; } + + function _isAuthorized(address _operator, address _serviceProvider, address _verifier) private view returns (bool) { + if (_operator == _serviceProvider) { + return true; + } + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { + return _legacyOperatorAuth[_serviceProvider][_operator]; + } else { + return _operatorAuth[_serviceProvider][_verifier][_operator]; + } + } } From 1f4db7049ef807876d41efb2d8b54dfebbe07d61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 13:56:09 -0300 Subject: [PATCH 065/343] fix(ss): interface importsy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../subgraph-service/contracts/interfaces/ISubgraphService.sol | 2 +- packages/subgraph-service/test/mocks/MockHorizonStaking.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 52561fb74..0cf65f37f 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; -import { IDataServiceFees } from "@graphprotocol/horizon/contracts/data-service/extensions/IDataServiceFees.sol"; +import { IDataServiceFees } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol"; import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol index 13281fa6e..9efebeb60 100644 --- a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol +++ b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.24; import "forge-std/Test.sol"; import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; -import { IHorizonStakingTypes } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStakingTypes.sol"; +import { IHorizonStakingTypes } from "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol"; import { MockGRTToken } from "./MockGRTToken.sol"; contract MockHorizonStaking { From 511ef3031a72799c2e767a99aba90d556817c88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 14:22:19 -0300 Subject: [PATCH 066/343] chore: ensure events and errors consistency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../extensions/DataServiceFees.sol | 15 --- .../extensions/DataServicePausable.sol | 4 - .../extensions/DataServiceRescuable.sol | 9 -- .../interfaces/IDataServiceFees.sol | 14 +++ .../interfaces/IDataServicePausable.sol | 5 + .../interfaces/IDataServiceRescuable.sol | 10 ++ .../contracts/interfaces/IGraphPayments.sol | 4 + .../contracts/interfaces/IPaymentsEscrow.sol | 29 ++++++ .../contracts/interfaces/ITAPCollector.sol | 13 +++ .../internal/IHorizonStakingExtension.sol | 6 +- .../internal/IHorizonStakingMain.sol | 8 +- .../contracts/payments/GraphPayments.sol | 7 -- .../contracts/payments/PaymentsEscrow.sol | 59 +++-------- .../payments/collectors/TAPCollector.sol | 13 --- .../contracts/staking/HorizonStaking.sol | 6 +- .../staking/HorizonStakingExtension.sol | 2 +- .../contracts/staking/utilities/Managed.sol | 5 - .../contracts/DisputeManager.sol | 98 ------------------- .../contracts/SubgraphService.sol | 15 +-- .../contracts/interfaces/IDisputeManager.sol | 98 +++++++++++++++++++ .../contracts/interfaces/ISubgraphService.sol | 14 +++ 21 files changed, 211 insertions(+), 223 deletions(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index e25057f80..4770ebc41 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -12,21 +12,6 @@ import { DataServiceFeesV1Storage } from "./DataServiceFeesStorage.sol"; abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees { using ProvisionTracker for mapping(address => uint256); - event StakeClaimLocked( - address indexed serviceProvider, - bytes32 indexed claimId, - uint256 tokens, - uint256 unlockTimestamp - ); - event StakeClaimReleased( - address indexed serviceProvider, - bytes32 indexed claimId, - uint256 tokens, - uint256 releaseAt - ); - - error DataServiceFeesClaimNotFound(bytes32 claimId); - function releaseStake(IGraphPayments.PaymentTypes feeType, uint256 n) external virtual { _releaseStake(feeType, msg.sender, n); } diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index d38b1fc0e..d1800ad38 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -9,10 +9,6 @@ import { DataService } from "../DataService.sol"; abstract contract DataServicePausable is Pausable, DataService, IDataServicePausable { mapping(address pauseGuardian => bool allowed) public pauseGuardians; - event PauseGuardianSet(address indexed account, bool allowed); - - error DataServicePausableNotPauseGuardian(address account); - modifier onlyPauseGuardian() { if (!pauseGuardians[msg.sender]) { revert DataServicePausableNotPauseGuardian(msg.sender); diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index dffd76804..8fff2947d 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -18,15 +18,6 @@ import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.s abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { mapping(address rescuer => bool allowed) public rescuers; - /** - * @dev Tokens rescued by the user - */ - event TokensRescued(address indexed from, address indexed to, uint256 tokens); - event RescuerSet(address indexed account, bool allowed); - - error DataServiceRescuableCannotRescueZero(); - error DataServiceRescuableNotRescuer(address account); - modifier onlyRescuer() { if (!rescuers[msg.sender]) { revert DataServiceRescuableNotRescuer(msg.sender); diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index b89ef5f5e..b5d5d88d5 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -23,5 +23,19 @@ interface IDataServiceFees is IDataService { bytes32 nextClaim; } + event StakeClaimLocked( + address indexed serviceProvider, + bytes32 indexed claimId, + uint256 tokens, + uint256 unlockTimestamp + ); + event StakeClaimReleased( + address indexed serviceProvider, + bytes32 indexed claimId, + uint256 tokens, + uint256 releaseAt + ); + error DataServiceFeesClaimNotFound(bytes32 claimId); + function releaseStake(IGraphPayments.PaymentTypes feeType, uint256 n) external; } diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol index 04e17422d..2c89ca860 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol @@ -4,6 +4,11 @@ pragma solidity 0.8.24; import { IDataService } from "./IDataService.sol"; interface IDataServicePausable is IDataService { + event PauseGuardianSet(address indexed account, bool allowed); + + error DataServicePausableNotPauseGuardian(address account); + function pause() external; + function unpause() external; } diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol index 76c5a53b6..4762fd349 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol @@ -4,6 +4,16 @@ pragma solidity 0.8.24; import { IDataService } from "./IDataService.sol"; interface IDataServiceRescuable is IDataService { + /** + * @dev Tokens rescued by the user + */ + event TokensRescued(address indexed from, address indexed to, uint256 tokens); + event RescuerSet(address indexed account, bool allowed); + + error DataServiceRescuableCannotRescueZero(); + error DataServiceRescuableNotRescuer(address account); + function rescueGRT(address to, uint256 tokens) external; + function rescueETH(address payable to, uint256 tokens) external; } diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index bb0274b2d..9002185c6 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -9,6 +9,10 @@ interface IGraphPayments { IndexingRewards } + // -- Errors -- + + error GraphPaymentsInsufficientTokens(uint256 available, uint256 required); + // collect funds from a sender, pay cuts and forward the rest to the receiver function collect( PaymentTypes paymentType, diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 20b10491f..db5c56218 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -17,6 +17,35 @@ interface IPaymentsEscrow { uint256 thawEndTimestamp; } + // -- Events -- + + event AuthorizedCollector(address indexed payer, address indexed dataService); + event ThawCollector(address indexed payer, address indexed dataService); + event CancelThawCollector(address indexed payer, address indexed dataService); + event RevokeCollector(address indexed payer, address indexed dataService); + event Deposit(address indexed payer, address indexed receiver, uint256 tokens); + event CancelThaw(address indexed payer, address indexed receiver); + event Thaw( + address indexed payer, + address indexed receiver, + uint256 tokens, + uint256 totalTokensThawing, + uint256 thawEndTimestamp + ); + event Withdraw(address indexed payer, address indexed receiver, uint256 tokens); + event EscrowCollected(address indexed payer, address indexed receiver, uint256 tokens); + + // -- Errors -- + + error PaymentsEscrowInsufficientTokensThawing(); + error PaymentsEscrowInsufficientBalance(uint256 available, uint256 required); + error PaymentsEscrowNotThawing(); + error PaymentsEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); + error PaymentsEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); + error PaymentsEscrowCollectorNotAuthorized(address sender, address dataService); + error PaymentsEscrowInsufficientAllowance(uint256 available, uint256 required); + error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens); + // Deposit funds into the escrow for a receiver function deposit(address receiver, uint256 tokens) external; diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index 90b2c53dd..50db686c9 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; +import { IGraphPayments } from "./IGraphPayments.sol"; import { IPaymentsCollector } from "./IPaymentsCollector.sol"; interface ITAPCollector is IPaymentsCollector { @@ -16,4 +17,16 @@ interface ITAPCollector is IPaymentsCollector { ReceiptAggregateVoucher rav; bytes signature; // 65 bytes: r (32 Bytes) || s (32 Bytes) || v (1 Byte) } + + event TAPCollectorCollected( + IGraphPayments.PaymentTypes indexed paymentType, + address indexed payer, + address receiver, + uint256 tokensReceiver, + address indexed dataService, + uint256 tokensDataService + ); + + error TAPCollectorCallerNotDataService(address caller, address dataService); + error TAPCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected); } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 992ad7069..649107997 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -79,11 +79,7 @@ interface IHorizonStakingExtension { uint256 delegationRewards ); - /** - * @dev Emitted when `indexer` set `operator` access in the legacy contract, - * which now means only for the subgraph data service. - */ - event SetOperator(address indexed indexer, address indexed operator, bool allowed); + event CounterpartStakingAddressSet(address indexed counterpart); /** * @notice Set the address of the counterpart (L1 or L2) staking contract. diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 80613c018..e88015900 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -91,7 +91,7 @@ interface IHorizonStakingMain is IHorizonStakingBase { event AllowedLockedVerifierSet(address verifier, bool allowed); - event TokensAddedToDelegationPool(address indexed serviceProvider, address indexed verifier, uint256 tokens); + event TokensToDelegationPoolAdded(address indexed serviceProvider, address indexed verifier, uint256 tokens); event ProvisionParametersStaged( address indexed serviceProvider, @@ -107,6 +107,9 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint64 thawingPeriod ); + event ThawingPeriodCleared(); + event MaxThawingPeriodSet(uint64 maxThawingPeriod); + /** * @dev Emitted when an operator is allowed or denied by a service provider for a particular data service */ @@ -120,13 +123,10 @@ interface IHorizonStakingMain is IHorizonStakingBase { ); error HorizonStakingInvalidVerifier(address verifier); - error HorizonStakingVerifierAlreadyAllowed(address verifier); - error HorizonStakingVerifierNotAllowed(address verifier); error HorizonStakingInvalidZeroTokens(); error HorizonStakingInvalidProvision(address serviceProvider, address verifier); error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); error HorizonStakingInsufficientCapacity(); - error HorizonStakingInsufficientShares(); error HorizonStakingInsufficientCapacityForLegacyAllocations(); error HorizonStakingTooManyThawRequests(); error HorizonStakingInsufficientTokens(uint256 expected, uint256 available); diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index bab59365d..3831514d3 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -25,13 +25,6 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora uint256 tokensProtocol ); - // -- Errors -- - - error GraphPaymentsNotThawing(); - error GraphPaymentsStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); - error GraphPaymentsCollectorNotAuthorized(address sender, address dataService); - error GraphPaymentsInsufficientTokens(uint256 available, uint256 required); - // -- Events -- // -- Modifier -- diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index fd30bd758..4ce4a029b 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -31,37 +31,6 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // The duration (in seconds) in which escrow funds are thawing before they can be withdrawn uint256 public immutable WITHDRAW_ESCROW_THAWING_PERIOD; - // -- Events -- - - event AuthorizedCollector(address indexed payer, address indexed dataService); - event ThawCollector(address indexed payer, address indexed dataService); - event CancelThawCollector(address indexed payer, address indexed dataService); - event RevokeCollector(address indexed payer, address indexed dataService); - event Deposit(address indexed payer, address indexed receiver, uint256 tokens); - event CancelThaw(address indexed payer, address indexed receiver); - event Thaw( - address indexed payer, - address indexed receiver, - uint256 tokens, - uint256 totalTokensThawing, - uint256 thawEndTimestamp - ); - event Withdraw(address indexed payer, address indexed receiver, uint256 tokens); - event EscrowCollected(address indexed payer, address indexed receiver, uint256 tokens); - - // -- Errors -- - - error GraphEscrowNotGraphPayments(); - error GraphEscrowInputsLengthMismatch(); - error GraphEscrowInsufficientTokensThawing(); - error GraphEscrowInsufficientBalance(uint256 available, uint256 required); - error GraphEscrowNotThawing(); - error GraphEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); - error GraphEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); - error GraphEscrowCollectorNotAuthorized(address sender, address dataService); - error GraphEscrowInsufficientAllowance(uint256 available, uint256 required); - error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens); - // -- Constructor -- constructor( @@ -70,11 +39,11 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { uint256 withdrawEscrowThawingPeriod ) GraphDirectory(controller) { if (revokeCollectorThawingPeriod > MAX_THAWING_PERIOD) { - revert GraphEscrowThawingPeriodTooLong(revokeCollectorThawingPeriod, MAX_THAWING_PERIOD); + revert PaymentsEscrowThawingPeriodTooLong(revokeCollectorThawingPeriod, MAX_THAWING_PERIOD); } if (withdrawEscrowThawingPeriod > MAX_THAWING_PERIOD) { - revert GraphEscrowThawingPeriodTooLong(withdrawEscrowThawingPeriod, MAX_THAWING_PERIOD); + revert PaymentsEscrowThawingPeriodTooLong(withdrawEscrowThawingPeriod, MAX_THAWING_PERIOD); } REVOKE_COLLECTOR_THAWING_PERIOD = revokeCollectorThawingPeriod; @@ -85,7 +54,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { function approveCollector(address dataService, uint256 tokens) external { Collector storage collector = authorizedCollectors[msg.sender][dataService]; if (collector.allowance > tokens) { - revert GraphEscrowInsufficientAllowance(collector.allowance, tokens); + revert PaymentsEscrowInsufficientAllowance(collector.allowance, tokens); } collector.authorized = true; @@ -104,7 +73,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // cancel thawing a data service's collector authorization function cancelThawCollector(address dataService) external { if (authorizedCollectors[msg.sender][dataService].thawEndTimestamp == 0) { - revert GraphEscrowNotThawing(); + revert PaymentsEscrowNotThawing(); } authorizedCollectors[msg.sender][dataService].thawEndTimestamp = 0; @@ -116,11 +85,11 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { Collector storage collector = authorizedCollectors[msg.sender][dataService]; if (collector.thawEndTimestamp == 0) { - revert GraphEscrowNotThawing(); + revert PaymentsEscrowNotThawing(); } if (collector.thawEndTimestamp > block.timestamp) { - revert GraphEscrowStillThawing(block.timestamp, collector.thawEndTimestamp); + revert PaymentsEscrowStillThawing(block.timestamp, collector.thawEndTimestamp); } delete authorizedCollectors[msg.sender][dataService]; @@ -142,7 +111,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // otherwise if amount thawing is greater than zero and requested amount is zero this // is a cancel thaw request. if (account.tokensThawing == 0) { - revert GraphEscrowInsufficientTokensThawing(); + revert PaymentsEscrowInsufficientTokensThawing(); } account.tokensThawing = 0; account.thawEndTimestamp = 0; @@ -152,7 +121,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // Check if the escrow balance is sufficient if (account.balance < tokens) { - revert GraphEscrowInsufficientBalance(account.balance, tokens); + revert PaymentsEscrowInsufficientBalance(account.balance, tokens); } // Set amount to thaw @@ -167,11 +136,11 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { function withdraw(address receiver) external { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; if (account.thawEndTimestamp == 0) { - revert GraphEscrowNotThawing(); + revert PaymentsEscrowNotThawing(); } if (account.thawEndTimestamp > block.timestamp) { - revert GraphEscrowStillThawing({ + revert PaymentsEscrowStillThawing({ currentTimestamp: block.timestamp, thawEndTimestamp: account.thawEndTimestamp }); @@ -200,21 +169,21 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { Collector storage collector = authorizedCollectors[payer][msg.sender]; if (!collector.authorized) { - revert GraphEscrowCollectorNotAuthorized(payer, msg.sender); + revert PaymentsEscrowCollectorNotAuthorized(payer, msg.sender); } if (collector.allowance < tokens) { - revert GraphEscrowInsufficientAllowance(collector.allowance, tokens); + revert PaymentsEscrowInsufficientAllowance(collector.allowance, tokens); } // Reduce amount from approved collector collector.allowance -= tokens; - // Collect tokens from GraphEscrow up to amount available + // Collect tokens from PaymentsEscrow up to amount available EscrowAccount storage account = escrowAccounts[payer][receiver]; uint256 availableTokens = account.balance - account.tokensThawing; if (availableTokens < tokens) { - revert GraphEscrowInsufficientBalance(availableTokens, tokens); + revert PaymentsEscrowInsufficientBalance(availableTokens, tokens); } account.balance -= tokens; diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 94f601ad5..067bfce7c 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -25,19 +25,6 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { mapping(address dataService => mapping(address receiver => mapping(address payer => uint256 tokens))) public tokensCollected; - event TAPCollectorCollected( - IGraphPayments.PaymentTypes indexed paymentType, - address indexed payer, - address receiver, - uint256 tokensReceiver, - address indexed dataService, - uint256 tokensDataService - ); - - error TAPCollectorCallerNotDataService(address caller, address dataService); - error TAPVerifierInvalidSignerProof(); - error TAPCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected); - /** * @dev Constructs a new instance of the TAPVerifier contract. */ diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 616efca8a..ced8e0fd2 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -332,7 +332,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); pool.tokens = pool.tokens + tokens; - emit TokensAddedToDelegationPool(serviceProvider, verifier, tokens); + emit TokensToDelegationPoolAdded(serviceProvider, verifier, tokens); } // undelegate tokens from a service provider @@ -536,12 +536,12 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // To be called at the end of the transition period, to set the deprecated thawing period to 0 function clearThawingPeriod() external onlyGovernor { __DEPRECATED_thawingPeriod = 0; - emit ParameterUpdated("thawingPeriod"); + emit ThawingPeriodCleared(); } function setMaxThawingPeriod(uint64 maxThawingPeriod) external override onlyGovernor { maxThawingPeriod = _maxThawingPeriod; - emit ParameterUpdated("maxThawingPeriod"); + emit MaxThawingPeriodSet(_maxThawingPeriod); } /* diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index ce53e2860..97d9af0b0 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -90,7 +90,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2Staki */ function setCounterpartStakingAddress(address counterpart) external override onlyGovernor { _counterpartStakingAddress = counterpart; - emit ParameterUpdated("counterpartStakingAddress"); + emit CounterpartStakingAddressSet(counterpart); } /** diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index 459d807b5..c56e6ad2d 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -23,11 +23,6 @@ abstract contract Managed is GraphDirectory { /// @dev Gap for future storage variables uint256[10] private __gap; - // -- Events -- - - /// Emitted when a contract parameter has been updated - event ParameterUpdated(string param); - /** * @dev Revert if the controller is paused or partially paused */ diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 9eda3f42d..7570ddf54 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -44,104 +44,6 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM using TokenUtils for IGraphToken; using PPMMath for uint256; - // -- Events -- - event ArbitratorSet(address arbitrator); - event DisputePeriodSet(uint64 disputePeriod); - event MinimumDepositSet(uint256 minimumDeposit); - event MaxSlashingCutSet(uint32 maxSlashingCut); - event FishermanRewardCutSet(uint32 fishermanRewardCut); - event SubgraphServiceSet(address indexed subgraphService); - - /** - * @dev Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer` - * by `fisherman`. - * The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted. - */ - event QueryDisputeCreated( - bytes32 indexed disputeId, - address indexed indexer, - address indexed fisherman, - uint256 tokens, - bytes32 subgraphDeploymentId, - bytes attestation - ); - - /** - * @dev Emitted when an indexing dispute is created for `allocationId` and `indexer` - * by `fisherman`. - * The event emits the amount of `tokens` deposited by the fisherman. - */ - event IndexingDisputeCreated( - bytes32 indexed disputeId, - address indexed indexer, - address indexed fisherman, - uint256 tokens, - address allocationId - ); - - /** - * @dev Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`. - * The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward. - */ - event DisputeAccepted( - bytes32 indexed disputeId, - address indexed indexer, - address indexed fisherman, - uint256 tokens - ); - - /** - * @dev Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`. - * The event emits the amount `tokens` burned from the fisherman deposit. - */ - event DisputeRejected( - bytes32 indexed disputeId, - address indexed indexer, - address indexed fisherman, - uint256 tokens - ); - - /** - * @dev Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`. - * The event emits the amount `tokens` used as deposit and returned to the fisherman. - */ - event DisputeDrawn(bytes32 indexed disputeId, address indexed indexer, address indexed fisherman, uint256 tokens); - - /** - * @dev Emitted when two disputes are in conflict to link them. - * This event will be emitted after each DisputeCreated event is emitted - * for each of the individual disputes. - */ - event DisputeLinked(bytes32 indexed disputeId1, bytes32 indexed disputeId2); - - // -- Errors -- - - error DisputeManagerNotArbitrator(); - error DisputeManagerNotFisherman(); - error DisputeManagerInvalidZeroAddress(); - error DisputeManagerDisputePeriodZero(); - error DisputeManagerZeroTokens(); - error DisputeManagerInvalidDispute(bytes32 disputeId); - error DisputeManagerInvalidMinimumDeposit(uint256 minimumDeposit); - error DisputeManagerInvalidFishermanReward(uint32 cut); - error DisputeManagerInvalidMaxSlashingCut(uint32 maxSlashingCut); - error DisputeManagerInvalidTokensSlash(uint256 tokensSlash); - error DisputeManagerInvalidDisputeStatus(IDisputeManager.DisputeStatus status); - error DisputeManagerInsufficientDeposit(uint256 deposit, uint256 minimumDeposit); - error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId); - error DisputeManagerDisputePeriodNotFinished(); - error DisputeManagerMustAcceptRelatedDispute(bytes32 disputeId, bytes32 relatedDisputeId); - error DisputeManagerIndexerNotFound(address allocationId); - error DisputeManagerNonMatchingSubgraphDeployment(bytes32 subgraphDeploymentId1, bytes32 subgraphDeploymentId2); - error DisputeManagerNonConflictingAttestations( - bytes32 requestCID1, - bytes32 responseCID1, - bytes32 subgraphDeploymentId1, - bytes32 requestCID2, - bytes32 responseCID2, - bytes32 subgraphDeploymentId2 - ); - // -- Modifiers -- /** diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index b252346a5..de0168619 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -3,8 +3,8 @@ pragma solidity 0.8.24; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; -import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; +import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { DataServicePausable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausable.sol"; @@ -35,19 +35,6 @@ contract SubgraphService is using PPMMath for uint256; using Allocation for mapping(address => Allocation.State); - event QueryFeesCollected( - address serviceProvider, - uint256 tokensCollected, - uint256 tokensCurators, - uint256 tokensSubgraphService - ); - - error SubgraphServiceEmptyUrl(); - error SubgraphServiceInvalidPaymentType(IGraphPayments.PaymentTypes feeType); - error SubgraphServiceIndexerAlreadyRegistered(); - error SubgraphServiceIndexerNotRegistered(address indexer); - error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensCollected); - modifier onlyRegisteredIndexer(address indexer) { if (indexers[indexer].registeredAt == 0) { revert SubgraphServiceIndexerNotRegistered(indexer); diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 8c3df586d..8e6f9441b 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -33,6 +33,104 @@ interface IDisputeManager { uint256 createdAt; } + // -- Events -- + event ArbitratorSet(address arbitrator); + event DisputePeriodSet(uint64 disputePeriod); + event MinimumDepositSet(uint256 minimumDeposit); + event MaxSlashingCutSet(uint32 maxSlashingCut); + event FishermanRewardCutSet(uint32 fishermanRewardCut); + event SubgraphServiceSet(address indexed subgraphService); + + /** + * @dev Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer` + * by `fisherman`. + * The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted. + */ + event QueryDisputeCreated( + bytes32 indexed disputeId, + address indexed indexer, + address indexed fisherman, + uint256 tokens, + bytes32 subgraphDeploymentId, + bytes attestation + ); + + /** + * @dev Emitted when an indexing dispute is created for `allocationId` and `indexer` + * by `fisherman`. + * The event emits the amount of `tokens` deposited by the fisherman. + */ + event IndexingDisputeCreated( + bytes32 indexed disputeId, + address indexed indexer, + address indexed fisherman, + uint256 tokens, + address allocationId + ); + + /** + * @dev Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`. + * The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward. + */ + event DisputeAccepted( + bytes32 indexed disputeId, + address indexed indexer, + address indexed fisherman, + uint256 tokens + ); + + /** + * @dev Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`. + * The event emits the amount `tokens` burned from the fisherman deposit. + */ + event DisputeRejected( + bytes32 indexed disputeId, + address indexed indexer, + address indexed fisherman, + uint256 tokens + ); + + /** + * @dev Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`. + * The event emits the amount `tokens` used as deposit and returned to the fisherman. + */ + event DisputeDrawn(bytes32 indexed disputeId, address indexed indexer, address indexed fisherman, uint256 tokens); + + /** + * @dev Emitted when two disputes are in conflict to link them. + * This event will be emitted after each DisputeCreated event is emitted + * for each of the individual disputes. + */ + event DisputeLinked(bytes32 indexed disputeId1, bytes32 indexed disputeId2); + + // -- Errors -- + + error DisputeManagerNotArbitrator(); + error DisputeManagerNotFisherman(); + error DisputeManagerInvalidZeroAddress(); + error DisputeManagerDisputePeriodZero(); + error DisputeManagerZeroTokens(); + error DisputeManagerInvalidDispute(bytes32 disputeId); + error DisputeManagerInvalidMinimumDeposit(uint256 minimumDeposit); + error DisputeManagerInvalidFishermanReward(uint32 cut); + error DisputeManagerInvalidMaxSlashingCut(uint32 maxSlashingCut); + error DisputeManagerInvalidTokensSlash(uint256 tokensSlash); + error DisputeManagerInvalidDisputeStatus(IDisputeManager.DisputeStatus status); + error DisputeManagerInsufficientDeposit(uint256 deposit, uint256 minimumDeposit); + error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId); + error DisputeManagerDisputePeriodNotFinished(); + error DisputeManagerMustAcceptRelatedDispute(bytes32 disputeId, bytes32 relatedDisputeId); + error DisputeManagerIndexerNotFound(address allocationId); + error DisputeManagerNonMatchingSubgraphDeployment(bytes32 subgraphDeploymentId1, bytes32 subgraphDeploymentId2); + error DisputeManagerNonConflictingAttestations( + bytes32 requestCID1, + bytes32 responseCID1, + bytes32 subgraphDeploymentId1, + bytes32 requestCID2, + bytes32 responseCID2, + bytes32 subgraphDeploymentId2 + ); + // -- Attestation -- // -- Configuration -- diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 0cf65f37f..f7730036c 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.24; import { IDataServiceFees } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol"; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; @@ -18,6 +19,19 @@ interface ISubgraphService is IDataServiceFees { uint128 curationCut; } + event QueryFeesCollected( + address serviceProvider, + uint256 tokensCollected, + uint256 tokensCurators, + uint256 tokensSubgraphService + ); + + error SubgraphServiceEmptyUrl(); + error SubgraphServiceInvalidPaymentType(IGraphPayments.PaymentTypes feeType); + error SubgraphServiceIndexerAlreadyRegistered(); + error SubgraphServiceIndexerNotRegistered(address indexer); + error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensCollected); + function resizeAllocation(address indexer, address allocationId, uint256 tokens) external; function migrateLegacyAllocation(address indexer, address allocationId, bytes32 subgraphDeploymentID) external; From 5542532dfc44560dfef1b14daafb0554fede44b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 14:43:12 -0300 Subject: [PATCH 067/343] chore: update provision event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../interfaces/internal/IHorizonStakingMain.sol | 2 +- .../horizon/contracts/staking/HorizonStaking.sol | 14 +++++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index e88015900..9036be8c4 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -122,7 +122,6 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint256 feeCut ); - error HorizonStakingInvalidVerifier(address verifier); error HorizonStakingInvalidZeroTokens(); error HorizonStakingInvalidProvision(address serviceProvider, address verifier); error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); @@ -131,6 +130,7 @@ interface IHorizonStakingMain is IHorizonStakingBase { error HorizonStakingTooManyThawRequests(); error HorizonStakingInsufficientTokens(uint256 expected, uint256 available); error HorizonStakingSlippageProtection(uint256 minExpectedShares, uint256 actualShares); + error HorizonStakingVerifierNotAllowed(address verifier); // deposit stake function stake(uint256 tokens) external; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index ced8e0fd2..728372269 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -173,10 +173,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint32 maxVerifierCut, uint64 thawingPeriod ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { - if (_getIdleStake(serviceProvider) < tokens) { - revert HorizonStakingInsufficientCapacity(); - } - _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } @@ -504,18 +500,15 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint32 maxVerifierCut, uint64 thawingPeriod ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { - if (_getIdleStake(serviceProvider) < tokens) { - revert HorizonStakingInsufficientCapacity(); - } if (!_allowedLockedVerifiers[verifier]) { - revert HorizonStakingInvalidVerifier(verifier); + revert HorizonStakingVerifierNotAllowed(verifier); } _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } // for vesting contracts function setOperatorLocked(address operator, address verifier, bool allowed) external override { - require(_allowedLockedVerifiers[verifier], "VERIFIER_NOT_ALLOWED"); + if (!_allowedLockedVerifiers[verifier]) revert HorizonStakingVerifierNotAllowed(verifier); _setOperator(operator, verifier, allowed); } @@ -648,6 +641,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint32 _maxVerifierCut, uint64 _thawingPeriod ) private { + if (_getIdleStake(_serviceProvider) < _tokens) { + revert HorizonStakingInsufficientCapacity(); + } require(_tokens >= MIN_PROVISION_SIZE, "!tokens"); require(_maxVerifierCut <= MAX_MAX_VERIFIER_CUT, "maxVerifierCut too high"); require(_thawingPeriod <= _maxThawingPeriod, "thawingPeriod too high"); From 6255c48dcb9e451cae1eda253d8399a2d1ed9a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 14:46:01 -0300 Subject: [PATCH 068/343] feat: updated solidity to 0.8.26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/contracts/contracts/arbitrum/ITokenGateway.sol | 2 +- packages/contracts/contracts/curation/ICuration.sol | 2 +- packages/contracts/contracts/epochs/IEpochManager.sol | 2 +- packages/contracts/contracts/gateway/ICallhookReceiver.sol | 2 +- packages/contracts/contracts/governance/Controller.sol | 2 +- packages/contracts/contracts/governance/Governed.sol | 2 +- packages/contracts/contracts/governance/IController.sol | 2 +- packages/contracts/contracts/governance/IManaged.sol | 2 +- packages/contracts/contracts/governance/Pausable.sol | 2 +- packages/contracts/contracts/l2/staking/IL2StakingBase.sol | 2 +- packages/contracts/contracts/l2/staking/IL2StakingTypes.sol | 2 +- packages/contracts/contracts/rewards/IRewardsIssuer.sol | 2 +- packages/contracts/contracts/rewards/IRewardsManager.sol | 2 +- packages/contracts/contracts/token/IGraphToken.sol | 2 +- packages/contracts/contracts/upgrades/GraphProxy.sol | 2 +- packages/contracts/contracts/upgrades/GraphProxyAdmin.sol | 2 +- packages/contracts/contracts/upgrades/GraphProxyStorage.sol | 2 +- packages/contracts/contracts/upgrades/GraphUpgradeable.sol | 2 +- packages/contracts/contracts/upgrades/IGraphProxy.sol | 2 +- packages/contracts/contracts/utils/TokenUtils.sol | 2 +- packages/horizon/contracts/data-service/DataService.sol | 2 +- packages/horizon/contracts/data-service/DataServiceStorage.sol | 2 +- packages/horizon/contracts/data-service/GraphDirectory.sol | 2 +- .../contracts/data-service/extensions/DataServiceFees.sol | 2 +- .../data-service/extensions/DataServiceFeesStorage.sol | 2 +- .../contracts/data-service/extensions/DataServicePausable.sol | 2 +- .../contracts/data-service/extensions/DataServiceRescuable.sol | 2 +- .../horizon/contracts/data-service/interfaces/IDataService.sol | 2 +- .../contracts/data-service/interfaces/IDataServiceFees.sol | 2 +- .../contracts/data-service/interfaces/IDataServicePausable.sol | 2 +- .../contracts/data-service/interfaces/IDataServiceRescuable.sol | 2 +- .../contracts/data-service/libraries/ProvisionGetter.sol | 2 +- .../contracts/data-service/libraries/ProvisionTracker.sol | 2 +- .../contracts/data-service/utilities/ProvisionManager.sol | 2 +- .../data-service/utilities/ProvisionManagerStorage.sol | 2 +- packages/horizon/contracts/interfaces/IBridgeEscrow.sol | 2 +- packages/horizon/contracts/interfaces/IGraphPayments.sol | 2 +- packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol | 2 +- packages/horizon/contracts/interfaces/IHorizonStaking.sol | 2 +- packages/horizon/contracts/interfaces/IPaymentsCollector.sol | 2 +- packages/horizon/contracts/interfaces/IPaymentsEscrow.sol | 2 +- packages/horizon/contracts/interfaces/ITAPCollector.sol | 2 +- .../contracts/interfaces/internal/IHorizonStakingBase.sol | 2 +- .../contracts/interfaces/internal/IHorizonStakingExtension.sol | 2 +- .../contracts/interfaces/internal/IHorizonStakingMain.sol | 2 +- .../contracts/interfaces/internal/IHorizonStakingTypes.sol | 2 +- packages/horizon/contracts/libraries/Denominations.sol | 2 +- packages/horizon/contracts/libraries/LibFixedMath.sol | 2 +- packages/horizon/contracts/libraries/MathUtils.sol | 2 +- packages/horizon/contracts/libraries/PPMMath.sol | 2 +- packages/horizon/contracts/libraries/UintRange.sol | 2 +- packages/horizon/contracts/mocks/ControllerMock.sol | 2 +- packages/horizon/contracts/mocks/MockGRTToken.sol | 2 +- packages/horizon/contracts/payments/GraphPayments.sol | 2 +- packages/horizon/contracts/payments/GraphPaymentsStorage.sol | 2 +- packages/horizon/contracts/payments/PaymentsEscrow.sol | 2 +- packages/horizon/contracts/payments/collectors/TAPCollector.sol | 2 +- packages/horizon/contracts/staking/HorizonStaking.sol | 2 +- packages/horizon/contracts/staking/HorizonStakingBase.sol | 2 +- packages/horizon/contracts/staking/HorizonStakingExtension.sol | 2 +- packages/horizon/contracts/staking/HorizonStakingStorage.sol | 2 +- .../horizon/contracts/staking/libraries/ExponentialRebates.sol | 2 +- packages/horizon/contracts/staking/utilities/Managed.sol | 2 +- packages/horizon/hardhat.config.ts | 2 +- packages/horizon/test/GraphBase.t.sol | 2 +- packages/horizon/test/deployments/Deployments.t.sol | 2 +- packages/horizon/test/escrow/GraphEscrow.t.sol | 2 +- packages/horizon/test/escrow/collect.t.sol | 2 +- packages/horizon/test/escrow/collector.t.sol | 2 +- packages/horizon/test/escrow/deposit.t.sol | 2 +- packages/horizon/test/escrow/thaw.t.sol | 2 +- packages/horizon/test/escrow/withdraw.t.sol | 2 +- packages/horizon/test/payments/GraphPayments.t.sol | 2 +- .../horizon/test/shared/horizon-staking/HorizonStaking.t.sol | 2 +- packages/horizon/test/utils/Constants.sol | 2 +- packages/horizon/test/utils/Users.sol | 2 +- packages/subgraph-service/contracts/DisputeManager.sol | 2 +- packages/subgraph-service/contracts/DisputeManagerStorage.sol | 2 +- packages/subgraph-service/contracts/SubgraphService.sol | 2 +- packages/subgraph-service/contracts/SubgraphServiceStorage.sol | 2 +- .../subgraph-service/contracts/interfaces/IDisputeManager.sol | 2 +- .../subgraph-service/contracts/interfaces/ISubgraphService.sol | 2 +- packages/subgraph-service/contracts/libraries/Allocation.sol | 2 +- packages/subgraph-service/contracts/libraries/Attestation.sol | 2 +- .../subgraph-service/contracts/libraries/LegacyAllocation.sol | 2 +- .../subgraph-service/contracts/utilities/AllocationManager.sol | 2 +- .../contracts/utilities/AllocationManagerStorage.sol | 2 +- .../subgraph-service/contracts/utilities/AttestationManager.sol | 2 +- .../contracts/utilities/AttestationManagerStorage.sol | 2 +- packages/subgraph-service/contracts/utilities/Directory.sol | 2 +- packages/subgraph-service/hardhat.config.ts | 2 +- packages/subgraph-service/test/DisputeManager.t.sol | 2 +- packages/subgraph-service/test/mocks/MockGRTToken.sol | 2 +- packages/subgraph-service/test/mocks/MockHorizonStaking.sol | 2 +- packages/subgraph-service/test/mocks/MockRewardsManager.sol | 2 +- 95 files changed, 95 insertions(+), 95 deletions(-) diff --git a/packages/contracts/contracts/arbitrum/ITokenGateway.sol b/packages/contracts/contracts/arbitrum/ITokenGateway.sol index 6ac47d715..9fb440fd2 100644 --- a/packages/contracts/contracts/arbitrum/ITokenGateway.sol +++ b/packages/contracts/contracts/arbitrum/ITokenGateway.sol @@ -23,7 +23,7 @@ * */ -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; interface ITokenGateway { /// @notice event deprecated in favor of DepositInitiated and WithdrawalInitiated diff --git a/packages/contracts/contracts/curation/ICuration.sol b/packages/contracts/contracts/curation/ICuration.sol index b57efaf2a..635b45a0c 100644 --- a/packages/contracts/contracts/curation/ICuration.sol +++ b/packages/contracts/contracts/curation/ICuration.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; /** * @title Curation Interface diff --git a/packages/contracts/contracts/epochs/IEpochManager.sol b/packages/contracts/contracts/epochs/IEpochManager.sol index 5f02e3579..23c55f15b 100644 --- a/packages/contracts/contracts/epochs/IEpochManager.sol +++ b/packages/contracts/contracts/epochs/IEpochManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; interface IEpochManager { // -- Configuration -- diff --git a/packages/contracts/contracts/gateway/ICallhookReceiver.sol b/packages/contracts/contracts/gateway/ICallhookReceiver.sol index e869c7f4e..0fc27cf23 100644 --- a/packages/contracts/contracts/gateway/ICallhookReceiver.sol +++ b/packages/contracts/contracts/gateway/ICallhookReceiver.sol @@ -6,7 +6,7 @@ * be allowlisted by the governor, but also implement this interface that contains * the function that will actually be called by the L2GraphTokenGateway. */ -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; interface ICallhookReceiver { /** diff --git a/packages/contracts/contracts/governance/Controller.sol b/packages/contracts/contracts/governance/Controller.sol index 9c369b0b7..a24b96b4e 100644 --- a/packages/contracts/contracts/governance/Controller.sol +++ b/packages/contracts/contracts/governance/Controller.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; import { IController } from "./IController.sol"; import { IManaged } from "./IManaged.sol"; diff --git a/packages/contracts/contracts/governance/Governed.sol b/packages/contracts/contracts/governance/Governed.sol index 0d1c1250b..c9cf940db 100644 --- a/packages/contracts/contracts/governance/Governed.sol +++ b/packages/contracts/contracts/governance/Governed.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; /** * @title Graph Governance contract diff --git a/packages/contracts/contracts/governance/IController.sol b/packages/contracts/contracts/governance/IController.sol index 634c881d3..093a0303a 100644 --- a/packages/contracts/contracts/governance/IController.sol +++ b/packages/contracts/contracts/governance/IController.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; interface IController { function getGovernor() external view returns (address); diff --git a/packages/contracts/contracts/governance/IManaged.sol b/packages/contracts/contracts/governance/IManaged.sol index 5ef387b5d..59f44dd9a 100644 --- a/packages/contracts/contracts/governance/IManaged.sol +++ b/packages/contracts/contracts/governance/IManaged.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; import { IController } from "./IController.sol"; diff --git a/packages/contracts/contracts/governance/Pausable.sol b/packages/contracts/contracts/governance/Pausable.sol index 9ebf36a1c..8564b9c09 100644 --- a/packages/contracts/contracts/governance/Pausable.sol +++ b/packages/contracts/contracts/governance/Pausable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; abstract contract Pausable { /** diff --git a/packages/contracts/contracts/l2/staking/IL2StakingBase.sol b/packages/contracts/contracts/l2/staking/IL2StakingBase.sol index 9ae4b850b..8c0b145de 100644 --- a/packages/contracts/contracts/l2/staking/IL2StakingBase.sol +++ b/packages/contracts/contracts/l2/staking/IL2StakingBase.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; import { ICallhookReceiver } from "../../gateway/ICallhookReceiver.sol"; diff --git a/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol b/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol index 2bc452a4a..086f88e77 100644 --- a/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol +++ b/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; interface IL2StakingTypes { /// @dev Message codes for the L1 -> L2 bridge callhook diff --git a/packages/contracts/contracts/rewards/IRewardsIssuer.sol b/packages/contracts/contracts/rewards/IRewardsIssuer.sol index 67588aee3..21dcc8768 100644 --- a/packages/contracts/contracts/rewards/IRewardsIssuer.sol +++ b/packages/contracts/contracts/rewards/IRewardsIssuer.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; interface IRewardsIssuer { /** diff --git a/packages/contracts/contracts/rewards/IRewardsManager.sol b/packages/contracts/contracts/rewards/IRewardsManager.sol index 5c4de5461..1602fe91e 100644 --- a/packages/contracts/contracts/rewards/IRewardsManager.sol +++ b/packages/contracts/contracts/rewards/IRewardsManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; interface IRewardsManager { /** diff --git a/packages/contracts/contracts/token/IGraphToken.sol b/packages/contracts/contracts/token/IGraphToken.sol index 1342625df..f6f1c00f6 100644 --- a/packages/contracts/contracts/token/IGraphToken.sol +++ b/packages/contracts/contracts/token/IGraphToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxy.sol b/packages/contracts/contracts/upgrades/GraphProxy.sol index a95428f68..cb52ab1dc 100644 --- a/packages/contracts/contracts/upgrades/GraphProxy.sol +++ b/packages/contracts/contracts/upgrades/GraphProxy.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; import { GraphProxyStorage } from "./GraphProxyStorage.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol b/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol index 0d3b075a5..55bbd2176 100644 --- a/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol +++ b/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; import { Governed } from "../governance/Governed.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxyStorage.sol b/packages/contracts/contracts/upgrades/GraphProxyStorage.sol index 9117ff54d..cd076c118 100644 --- a/packages/contracts/contracts/upgrades/GraphProxyStorage.sol +++ b/packages/contracts/contracts/upgrades/GraphProxyStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; /** * @title Graph Proxy Storage diff --git a/packages/contracts/contracts/upgrades/GraphUpgradeable.sol b/packages/contracts/contracts/upgrades/GraphUpgradeable.sol index 2627e7578..ffc47aa40 100644 --- a/packages/contracts/contracts/upgrades/GraphUpgradeable.sol +++ b/packages/contracts/contracts/upgrades/GraphUpgradeable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; import { IGraphProxy } from "./IGraphProxy.sol"; diff --git a/packages/contracts/contracts/upgrades/IGraphProxy.sol b/packages/contracts/contracts/upgrades/IGraphProxy.sol index 59d4a323d..e81722e3f 100644 --- a/packages/contracts/contracts/upgrades/IGraphProxy.sol +++ b/packages/contracts/contracts/upgrades/IGraphProxy.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; interface IGraphProxy { function admin() external returns (address); diff --git a/packages/contracts/contracts/utils/TokenUtils.sol b/packages/contracts/contracts/utils/TokenUtils.sol index f33bc5c85..a34059a1d 100644 --- a/packages/contracts/contracts/utils/TokenUtils.sol +++ b/packages/contracts/contracts/utils/TokenUtils.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.24; +pragma solidity ^0.7.6 || 0.8.26; import "../token/IGraphToken.sol"; diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index b2c39b6b0..681d13f73 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDataService } from "./interfaces/IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/DataServiceStorage.sol b/packages/horizon/contracts/data-service/DataServiceStorage.sol index 92e73e690..03b060515 100644 --- a/packages/horizon/contracts/data-service/DataServiceStorage.sol +++ b/packages/horizon/contracts/data-service/DataServiceStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; abstract contract DataServiceV1Storage { /// @dev Gap to allow adding variables in future upgrades diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index 6171e06c8..63a6aec48 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 4770ebc41..150c5cd27 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index 7069b9bb6..814d246a7 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index d1800ad38..e02f1776e 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDataServicePausable } from "../interfaces/IDataServicePausable.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index 8fff2947d..bd77533c6 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { IDataServiceRescuable } from "../interfaces/IDataServiceRescuable.sol"; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index 3406c7029..6814ef23e 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index b5d5d88d5..bbbab0d8b 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDataService } from "./IDataService.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol index 2c89ca860..673238b7f 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDataService } from "./IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol index 4762fd349..f1494413f 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDataService } from "./IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol b/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol index f0ef2d382..a8e44b1c4 100644 --- a/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol index cc86b71e3..5fb9230cf 100644 --- a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index f13adecf8..4fba72985 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol index 6e62d134c..7f4e507a5 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; abstract contract ProvisionManagerV1Storage { /// @notice The minimum amount of tokens required to register a provision in the data service diff --git a/packages/horizon/contracts/interfaces/IBridgeEscrow.sol b/packages/horizon/contracts/interfaces/IBridgeEscrow.sol index 19a13a0f2..4e0021423 100644 --- a/packages/horizon/contracts/interfaces/IBridgeEscrow.sol +++ b/packages/horizon/contracts/interfaces/IBridgeEscrow.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; /** * @title IBridgeEscrow diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 9002185c6..8c52b18be 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; interface IGraphPayments { // Payment types diff --git a/packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol b/packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol index 2abf4517d..6bc063057 100644 --- a/packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol +++ b/packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; /** * @title IGraphProxyAdmin diff --git a/packages/horizon/contracts/interfaces/IHorizonStaking.sol b/packages/horizon/contracts/interfaces/IHorizonStaking.sol index 13d9f19f6..647e66320 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStaking.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStaking.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IHorizonStakingTypes } from "./internal/IHorizonStakingTypes.sol"; import { IHorizonStakingMain } from "./internal/IHorizonStakingMain.sol"; diff --git a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol index 76525bd03..f076ef3e0 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphPayments } from "./IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index db5c56218..db8320aea 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphPayments } from "./IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index 50db686c9..46209bb2d 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphPayments } from "./IGraphPayments.sol"; import { IPaymentsCollector } from "./IPaymentsCollector.sol"; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index 2483ebda4..0d367547f 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; import { IGraphPayments } from "../IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 649107997..d09bbc3c3 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; /** * @title Base interface for the Staking contract. diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 9036be8c4..d0a962071 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index f95fff4c4..d320dd643 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; // TODO: create custom var-name-mixedcase /* solhint-disable var-name-mixedcase */ diff --git a/packages/horizon/contracts/libraries/Denominations.sol b/packages/horizon/contracts/libraries/Denominations.sol index 201051447..5652f50a0 100644 --- a/packages/horizon/contracts/libraries/Denominations.sol +++ b/packages/horizon/contracts/libraries/Denominations.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; /** * @title Denominations diff --git a/packages/horizon/contracts/libraries/LibFixedMath.sol b/packages/horizon/contracts/libraries/LibFixedMath.sol index 487de84a8..fd29b5e53 100644 --- a/packages/horizon/contracts/libraries/LibFixedMath.sol +++ b/packages/horizon/contracts/libraries/LibFixedMath.sol @@ -18,7 +18,7 @@ // SPDX-License-Identifier: Apache-2.0 -pragma solidity 0.8.24; +pragma solidity 0.8.26; // solhint-disable indent /// @dev Signed, fixed-point, 127-bit precision math library. diff --git a/packages/horizon/contracts/libraries/MathUtils.sol b/packages/horizon/contracts/libraries/MathUtils.sol index 3df620b12..a5ad3f41a 100644 --- a/packages/horizon/contracts/libraries/MathUtils.sol +++ b/packages/horizon/contracts/libraries/MathUtils.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; /** * @title MathUtils Library diff --git a/packages/horizon/contracts/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol index 3eb3a5b69..2bd5a51f9 100644 --- a/packages/horizon/contracts/libraries/PPMMath.sol +++ b/packages/horizon/contracts/libraries/PPMMath.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; library PPMMath { /// @notice Maximum value (100%) in parts per million (PPM). diff --git a/packages/horizon/contracts/libraries/UintRange.sol b/packages/horizon/contracts/libraries/UintRange.sol index d8265e35f..2e722e057 100644 --- a/packages/horizon/contracts/libraries/UintRange.sol +++ b/packages/horizon/contracts/libraries/UintRange.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; library UintRange { using UintRange for uint256; diff --git a/packages/horizon/contracts/mocks/ControllerMock.sol b/packages/horizon/contracts/mocks/ControllerMock.sol index a30993a89..82673dca6 100644 --- a/packages/horizon/contracts/mocks/ControllerMock.sol +++ b/packages/horizon/contracts/mocks/ControllerMock.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; import { IManaged } from "@graphprotocol/contracts/contracts/governance/IManaged.sol"; diff --git a/packages/horizon/contracts/mocks/MockGRTToken.sol b/packages/horizon/contracts/mocks/MockGRTToken.sol index af50cbdfd..1a51f3b96 100644 --- a/packages/horizon/contracts/mocks/MockGRTToken.sol +++ b/packages/horizon/contracts/mocks/MockGRTToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 3831514d3..cb0123e32 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol index f05499249..409b42a80 100644 --- a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol +++ b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; contract GraphPaymentsStorageV1Storage { // The graph protocol payment cut diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 4ce4a029b..507c79393 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 067bfce7c..6c50f8015 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; import { ITAPCollector } from "../../interfaces/ITAPCollector.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 728372269..16367b776 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStakingMain } from "../interfaces/internal/IHorizonStakingMain.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index e392a992b..951395b5b 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; import { IHorizonStakingBase } from "../interfaces/internal/IHorizonStakingBase.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 97d9af0b0..97fd49500 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index ff9a1e2bb..ffe82ab30 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IHorizonStakingExtension } from "../interfaces/internal/IHorizonStakingExtension.sol"; import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; diff --git a/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol b/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol index 50579cafb..3cbc93aa0 100644 --- a/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol +++ b/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { LibFixedMath } from "../../libraries/LibFixedMath.sol"; diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index c56e6ad2d..de3a08214 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { GraphDirectory } from "../../data-service/GraphDirectory.sol"; diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index 4e35d3b4e..fd31b26d4 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -7,7 +7,7 @@ import { HardhatUserConfig } from 'hardhat/config' const config: HardhatUserConfig = { solidity: { - version: '0.8.24', + version: '0.8.26', settings: { optimizer: { enabled: true, diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index b45797fdf..f657d8b3e 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/deployments/Deployments.t.sol b/packages/horizon/test/deployments/Deployments.t.sol index 2832bc69b..46abde654 100644 --- a/packages/horizon/test/deployments/Deployments.t.sol +++ b/packages/horizon/test/deployments/Deployments.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index c4041be16..a98eb3322 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 7317f9c0e..d7557353a 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index 1e3fd3fb8..f90eff6dc 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/deposit.t.sol b/packages/horizon/test/escrow/deposit.t.sol index 05c6d557d..8e9839b9b 100644 --- a/packages/horizon/test/escrow/deposit.t.sol +++ b/packages/horizon/test/escrow/deposit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index 72a1fc176..bf689486c 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/withdraw.t.sol b/packages/horizon/test/escrow/withdraw.t.sol index 6d70b64f7..15d1d94ed 100644 --- a/packages/horizon/test/escrow/withdraw.t.sol +++ b/packages/horizon/test/escrow/withdraw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 655700c6a..e4fa18b97 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol index 464665d51..7fd428e40 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index 44ed15fdf..bcf3295d8 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; abstract contract Constants { uint256 internal constant MAX_PPM = 1000000; // 100% in parts per million diff --git a/packages/horizon/test/utils/Users.sol b/packages/horizon/test/utils/Users.sol index a834e18a9..e86bf8faf 100644 --- a/packages/horizon/test/utils/Users.sol +++ b/packages/horizon/test/utils/Users.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; struct Users { address governor; diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 7570ddf54..536fe187d 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; diff --git a/packages/subgraph-service/contracts/DisputeManagerStorage.sol b/packages/subgraph-service/contracts/DisputeManagerStorage.sol index c90ef885d..bf2b368d6 100644 --- a/packages/subgraph-service/contracts/DisputeManagerStorage.sol +++ b/packages/subgraph-service/contracts/DisputeManagerStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDisputeManager } from "./interfaces/IDisputeManager.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index de0168619..302e350bb 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol index 3904b7ba4..9d2ae9966 100644 --- a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 8e6f9441b..f6c9a1c56 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { Attestation } from "../libraries/Attestation.sol"; diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index f7730036c..3bf6ed711 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDataServiceFees } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol"; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index 5d7dd4f82..bcbc666e6 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; library Allocation { using Allocation for State; diff --git a/packages/subgraph-service/contracts/libraries/Attestation.sol b/packages/subgraph-service/contracts/libraries/Attestation.sol index de85d9ca0..5d5771721 100644 --- a/packages/subgraph-service/contracts/libraries/Attestation.sol +++ b/packages/subgraph-service/contracts/libraries/Attestation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; library Attestation { // Receipt content sent from the service provider in response to request diff --git a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol index 18b5bdb1e..840973cbf 100644 --- a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol +++ b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; library LegacyAllocation { using LegacyAllocation for State; diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 4423473ea..69031bf44 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol index 525c83b54..700c0243c 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AttestationManager.sol b/packages/subgraph-service/contracts/utilities/AttestationManager.sol index 54b538c89..b68a6804d 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { AttestationManagerV1Storage } from "./AttestationManagerStorage.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol index 2841334ff..cfb925f5b 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; abstract contract AttestationManagerV1Storage { bytes32 internal _domainSeparator; diff --git a/packages/subgraph-service/contracts/utilities/Directory.sol b/packages/subgraph-service/contracts/utilities/Directory.sol index ca7a45a73..67afaadc5 100644 --- a/packages/subgraph-service/contracts/utilities/Directory.sol +++ b/packages/subgraph-service/contracts/utilities/Directory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.24; +pragma solidity 0.8.26; import { IDisputeManager } from "../interfaces/IDisputeManager.sol"; import { ISubgraphService } from "../interfaces/ISubgraphService.sol"; diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts index f4a7067b7..4d951d967 100644 --- a/packages/subgraph-service/hardhat.config.ts +++ b/packages/subgraph-service/hardhat.config.ts @@ -10,7 +10,7 @@ const config: HardhatUserConfig = { solidity: { compilers: [ { - version: '0.8.24', + version: '0.8.26', settings: { optimizer: { enabled: true, diff --git a/packages/subgraph-service/test/DisputeManager.t.sol b/packages/subgraph-service/test/DisputeManager.t.sol index 64838c6bb..b13fc8109 100644 --- a/packages/subgraph-service/test/DisputeManager.t.sol +++ b/packages/subgraph-service/test/DisputeManager.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/mocks/MockGRTToken.sol b/packages/subgraph-service/test/mocks/MockGRTToken.sol index cab52fb35..d581f8299 100644 --- a/packages/subgraph-service/test/mocks/MockGRTToken.sol +++ b/packages/subgraph-service/test/mocks/MockGRTToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol index 9efebeb60..c8ee45799 100644 --- a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol +++ b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol index c98b60ca7..3e43e8109 100644 --- a/packages/subgraph-service/test/mocks/MockRewardsManager.sol +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; From 9118567cdc9f873a27418405542ad9ecd50e1322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 15:41:48 -0300 Subject: [PATCH 069/343] chore: use IR to compile solidity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/foundry.toml | 1 + packages/horizon/hardhat.config.ts | 1 + packages/subgraph-service/foundry.toml | 5 ++++- packages/subgraph-service/hardhat.config.ts | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/horizon/foundry.toml b/packages/horizon/foundry.toml index 9f5c3a92a..c9e7f0534 100644 --- a/packages/horizon/foundry.toml +++ b/packages/horizon/foundry.toml @@ -7,3 +7,4 @@ cache_path = 'cache_forge' fs_permissions = [{ access = "read", path = "./"}] optimizer = true optimizer-runs = 200 +via_ir = true \ No newline at end of file diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index fd31b26d4..2d951261d 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -9,6 +9,7 @@ const config: HardhatUserConfig = { solidity: { version: '0.8.26', settings: { + viaIR: true, optimizer: { enabled: true, runs: 200, diff --git a/packages/subgraph-service/foundry.toml b/packages/subgraph-service/foundry.toml index 55f7ffd31..4c96e433b 100644 --- a/packages/subgraph-service/foundry.toml +++ b/packages/subgraph-service/foundry.toml @@ -3,4 +3,7 @@ src = 'contracts' out = 'build' libs = ['node_modules', 'lib'] test = 'test' -cache_path = 'cache_forge' \ No newline at end of file +cache_path = 'cache_forge' +optimizer = true +optimizer-runs = 200 +via_ir = true \ No newline at end of file diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts index 4d951d967..1db083d76 100644 --- a/packages/subgraph-service/hardhat.config.ts +++ b/packages/subgraph-service/hardhat.config.ts @@ -12,6 +12,7 @@ const config: HardhatUserConfig = { { version: '0.8.26', settings: { + viaIR: true, optimizer: { enabled: true, runs: 200, From 106f388b20e56f98f6394ddd4c7dad694ecb6603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 17:14:53 -0300 Subject: [PATCH 070/343] feat: use require with custom errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/GraphDirectory.sol | 10 +- .../extensions/DataServiceFees.sol | 4 +- .../extensions/DataServicePausable.sol | 4 +- .../extensions/DataServiceRescuable.sol | 6 +- .../libraries/ProvisionGetter.sol | 21 --- .../libraries/ProvisionTracker.sol | 9 +- .../utilities/ProvisionManager.sol | 18 +-- .../contracts/interfaces/IPaymentsEscrow.sol | 4 +- .../internal/IHorizonStakingMain.sol | 14 +- .../horizon/contracts/libraries/PPMMath.sol | 8 +- .../contracts/payments/GraphPayments.sol | 4 +- .../contracts/payments/PaymentsEscrow.sol | 79 ++++------ .../payments/collectors/TAPCollector.sol | 15 +- .../contracts/staking/HorizonStaking.sol | 147 +++++++++--------- .../contracts/staking/utilities/Managed.sol | 15 +- .../contracts/DisputeManager.sol | 115 +++++--------- .../contracts/SubgraphService.sol | 23 +-- .../contracts/interfaces/IDisputeManager.sol | 2 +- .../contracts/libraries/Allocation.sol | 13 +- .../contracts/libraries/Attestation.sol | 21 +-- .../contracts/libraries/LegacyAllocation.sol | 7 +- .../contracts/utilities/AllocationManager.sol | 22 +-- .../contracts/utilities/Directory.sol | 7 +- 23 files changed, 234 insertions(+), 334 deletions(-) delete mode 100644 packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index 63a6aec48..decb73e21 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -59,11 +59,9 @@ abstract contract GraphDirectory { error GraphDirectoryInvalidZeroAddress(bytes contractName); constructor(address controller) { - if (controller == address(0)) { - revert GraphDirectoryInvalidZeroAddress("Controller"); - } - GRAPH_CONTROLLER = IController(controller); + require(controller != address(0), GraphDirectoryInvalidZeroAddress("Controller")); + GRAPH_CONTROLLER = IController(controller); GRAPH_TOKEN = IGraphToken(_getContractFromController("GraphToken")); GRAPH_STAKING = IHorizonStaking(_getContractFromController("Staking")); GRAPH_PAYMENTS = IGraphPayments(_getContractFromController("GraphPayments")); @@ -136,9 +134,7 @@ abstract contract GraphDirectory { function _getContractFromController(bytes memory _contractName) private view returns (address) { address contractAddress = GRAPH_CONTROLLER.getContractProxy(keccak256(_contractName)); - if (contractAddress == address(0)) { - revert GraphDirectoryInvalidZeroAddress(_contractName); - } + require(contractAddress != address(0), GraphDirectoryInvalidZeroAddress(_contractName)); return contractAddress; } } diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 150c5cd27..cf8787674 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -72,9 +72,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat function _getStakeClaim(bytes32 _claimId) private view returns (StakeClaim memory) { StakeClaim memory claim = claims[_claimId]; - if (claim.createdAt == 0) { - revert DataServiceFeesClaimNotFound(_claimId); - } + require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId)); return claim; } diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index e02f1776e..43a09f3f2 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -10,9 +10,7 @@ abstract contract DataServicePausable is Pausable, DataService, IDataServicePaus mapping(address pauseGuardian => bool allowed) public pauseGuardians; modifier onlyPauseGuardian() { - if (!pauseGuardians[msg.sender]) { - revert DataServicePausableNotPauseGuardian(msg.sender); - } + require(pauseGuardians[msg.sender], DataServicePausableNotPauseGuardian(msg.sender)); _; } diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index bd77533c6..3fc23422d 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -19,9 +19,7 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { mapping(address rescuer => bool allowed) public rescuers; modifier onlyRescuer() { - if (!rescuers[msg.sender]) { - revert DataServiceRescuableNotRescuer(msg.sender); - } + require(rescuers[msg.sender], DataServiceRescuableNotRescuer(msg.sender)); _; } @@ -45,7 +43,7 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { * @param _tokens Amount of tokens to pull */ function _rescueTokens(address _to, address _token, uint256 _tokens) internal { - if (_tokens == 0) revert DataServiceRescuableCannotRescueZero(); + require(_tokens != 0, DataServiceRescuableCannotRescueZero()); if (Denominations.isNativeToken(_token)) payable(_to).transfer(_tokens); else SafeERC20.safeTransfer(IERC20(_token), _to, _tokens); diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol b/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol deleted file mode 100644 index a8e44b1c4..000000000 --- a/packages/horizon/contracts/data-service/libraries/ProvisionGetter.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; - -import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; - -library ProvisionGetter { - using ProvisionGetter for IHorizonStaking.Provision; - - error ProvisionGetterProvisionNotFound(address serviceProvider, address service); - - function get( - IHorizonStaking graphStaking, - address serviceProvider - ) internal view returns (IHorizonStaking.Provision memory) { - IHorizonStaking.Provision memory provision = graphStaking.getProvision(serviceProvider, address(this)); - if (provision.createdAt == 0) { - revert ProvisionGetterProvisionNotFound(serviceProvider, address(this)); - } - return provision; - } -} diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol index 5fb9230cf..4358b33b2 100644 --- a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol @@ -17,18 +17,13 @@ library ProvisionTracker { uint256 tokensRequired = self[serviceProvider] + tokens; uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio); - if (tokensRequired > tokensAvailable) { - revert ProvisionTrackerInsufficientTokens(tokensAvailable, tokensRequired); - } + require(tokensRequired <= tokensAvailable, ProvisionTrackerInsufficientTokens(tokensAvailable, tokensRequired)); self[serviceProvider] += tokens; } function release(mapping(address => uint256) storage self, address serviceProvider, uint256 tokens) internal { if (tokens == 0) return; - - if (tokens > self[serviceProvider]) { - revert ProvisionTrackerInsufficientTokens(self[serviceProvider], tokens); - } + require(self[serviceProvider] >= tokens, ProvisionTrackerInsufficientTokens(self[serviceProvider], tokens)); self[serviceProvider] -= tokens; } diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 4fba72985..c09a17ada 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -3,23 +3,23 @@ pragma solidity 0.8.26; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; -import { ProvisionGetter } from "../libraries/ProvisionGetter.sol"; import { UintRange } from "../../libraries/UintRange.sol"; import { GraphDirectory } from "../GraphDirectory.sol"; import { ProvisionManagerV1Storage } from "./ProvisionManagerStorage.sol"; abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage { - using ProvisionGetter for IHorizonStaking; using UintRange for uint256; error ProvisionManagerInvalidValue(bytes message, uint256 value, uint256 min, uint256 max); error ProvisionManagerNotAuthorized(address caller, address serviceProvider, address service); + error ProvisionManagerProvisionNotFound(address serviceProvider, address service); modifier onlyProvisionAuthorized(address serviceProvider) { - if (!_graphStaking().isAuthorized(msg.sender, serviceProvider, address(this))) { - revert ProvisionManagerNotAuthorized(msg.sender, serviceProvider, address(this)); - } + require( + _graphStaking().isAuthorized(msg.sender, serviceProvider, address(this)), + ProvisionManagerNotAuthorized(msg.sender, serviceProvider, address(this)) + ); _; } @@ -123,12 +123,12 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage } function _getProvision(address _serviceProvider) internal view returns (IHorizonStaking.Provision memory) { - return _graphStaking().get(_serviceProvider); + IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_serviceProvider, address(this)); + require(provision.createdAt != 0, ProvisionManagerProvisionNotFound(_serviceProvider, address(this))); + return provision; } function _checkValueInRange(uint256 _value, uint256 _min, uint256 _max, bytes memory _revertMessage) private pure { - if (!_value.isInRange(_min, _max)) { - revert ProvisionManagerInvalidValue(_revertMessage, _value, _min, _max); - } + require(_value.isInRange(_min, _max), ProvisionManagerInvalidValue(_revertMessage, _value, _min, _max)); } } diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index db8320aea..12b64cb87 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -43,9 +43,9 @@ interface IPaymentsEscrow { error PaymentsEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); error PaymentsEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); error PaymentsEscrowCollectorNotAuthorized(address sender, address dataService); - error PaymentsEscrowInsufficientAllowance(uint256 available, uint256 required); + error PaymentsEscrowInsufficientAllowance(uint256 current, uint256 required); + error PaymentsEscrowInconsistentAllowance(uint256 current, uint256 required); error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens); - // Deposit funds into the escrow for a receiver function deposit(address receiver, uint256 tokens) external; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index d0a962071..27f63b3c8 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -124,13 +124,25 @@ interface IHorizonStakingMain is IHorizonStakingBase { error HorizonStakingInvalidZeroTokens(); error HorizonStakingInvalidProvision(address serviceProvider, address verifier); + error HorizonStakingInvalidTokens(uint256 tokens, uint256 minTokens); + error HorizonStakingInvalidMaxVerifierCut(uint32 maxVerifierCut, uint32 maxAllowedCut); + error HorizonStakingInvalidThawingPeriod(uint64 thawingPeriod, uint64 maxThawingPeriod); error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); error HorizonStakingInsufficientCapacity(); error HorizonStakingInsufficientCapacityForLegacyAllocations(); + error HorizonStakingInsufficientTokensAvailable(uint256 tokensAvailable, uint256 tokensRequired); error HorizonStakingTooManyThawRequests(); - error HorizonStakingInsufficientTokens(uint256 expected, uint256 available); + error HorizonStakingInsufficientTokens(uint256 available, uint256 tokensRequired); error HorizonStakingSlippageProtection(uint256 minExpectedShares, uint256 actualShares); error HorizonStakingVerifierNotAllowed(address verifier); + error HorizonStakingNothingThawing(); + error HorizonStakingVerifierTokensTooHigh(uint256 tokensVerifier, uint256 maxVerifierTokens); + error HorizonStakingNotEnoughDelegation(uint256 tokensAvailable, uint256 tokensRequired); + error HorizonStakingStillThawing(uint256 until); + error HorizonStakingInvalidZeroShares(); + error HorizonStakingInvalidSharesAmount(uint256 sharesAvailable, uint256 sharesRequired); + error HorizonStakingCallerIsServiceProvider(); + error HorizonStakingCannotFulfillThawRequest(); // deposit stake function stake(uint256 tokens) external; diff --git a/packages/horizon/contracts/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol index 2bd5a51f9..f18e089ab 100644 --- a/packages/horizon/contracts/libraries/PPMMath.sol +++ b/packages/horizon/contracts/libraries/PPMMath.sol @@ -10,9 +10,7 @@ library PPMMath { // one of a or b must be in PPM function mulPPM(uint256 a, uint256 b) internal pure returns (uint256) { - if (!isValidPPM(a) && !isValidPPM(b)) { - revert PPMMathInvalidMulPPM(a, b); - } + require(isValidPPM(a) || isValidPPM(b), PPMMathInvalidMulPPM(a, b)); return (a * b) / MAX_PPM; } @@ -20,9 +18,7 @@ library PPMMath { // to prevent curation fees from rounding down to zero // a must be in ppm function mulPPMRoundUp(uint256 a, uint256 b) internal pure returns (uint256) { - if (!isValidPPM(b)) { - revert PPMMathInvalidPPM(b); - } + require(isValidPPM(b), PPMMathInvalidPPM(b)); return a - mulPPM(MAX_PPM - b, a); } diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index cb0123e32..ea7ef45c8 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -52,9 +52,7 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, paymentType); uint256 tokensDelegationPool = tokens.mulPPM(delegationFeeCut); uint256 totalCut = tokensProtocol + tokensDataService + tokensDelegationPool; - if (totalCut > tokens) { - revert GraphPaymentsInsufficientTokens(tokens, totalCut); - } + require(tokens >= totalCut, GraphPaymentsInsufficientTokens(tokens, totalCut)); // Pay protocol cut _graphToken().burnTokens(tokensProtocol); diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 507c79393..19274123a 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -38,13 +38,14 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { uint256 revokeCollectorThawingPeriod, uint256 withdrawEscrowThawingPeriod ) GraphDirectory(controller) { - if (revokeCollectorThawingPeriod > MAX_THAWING_PERIOD) { - revert PaymentsEscrowThawingPeriodTooLong(revokeCollectorThawingPeriod, MAX_THAWING_PERIOD); - } - - if (withdrawEscrowThawingPeriod > MAX_THAWING_PERIOD) { - revert PaymentsEscrowThawingPeriodTooLong(withdrawEscrowThawingPeriod, MAX_THAWING_PERIOD); - } + require( + revokeCollectorThawingPeriod <= MAX_THAWING_PERIOD, + PaymentsEscrowThawingPeriodTooLong(revokeCollectorThawingPeriod, MAX_THAWING_PERIOD) + ); + require( + withdrawEscrowThawingPeriod <= MAX_THAWING_PERIOD, + PaymentsEscrowThawingPeriodTooLong(withdrawEscrowThawingPeriod, MAX_THAWING_PERIOD) + ); REVOKE_COLLECTOR_THAWING_PERIOD = revokeCollectorThawingPeriod; WITHDRAW_ESCROW_THAWING_PERIOD = withdrawEscrowThawingPeriod; @@ -53,9 +54,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // approve a data service to collect funds function approveCollector(address dataService, uint256 tokens) external { Collector storage collector = authorizedCollectors[msg.sender][dataService]; - if (collector.allowance > tokens) { - revert PaymentsEscrowInsufficientAllowance(collector.allowance, tokens); - } + require(tokens > collector.allowance, PaymentsEscrowInconsistentAllowance(collector.allowance, tokens)); collector.authorized = true; collector.allowance = tokens; @@ -72,9 +71,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // cancel thawing a data service's collector authorization function cancelThawCollector(address dataService) external { - if (authorizedCollectors[msg.sender][dataService].thawEndTimestamp == 0) { - revert PaymentsEscrowNotThawing(); - } + require(authorizedCollectors[msg.sender][dataService].thawEndTimestamp != 0, PaymentsEscrowNotThawing()); authorizedCollectors[msg.sender][dataService].thawEndTimestamp = 0; emit CancelThawCollector(msg.sender, dataService); @@ -84,13 +81,11 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { function revokeCollector(address dataService) external { Collector storage collector = authorizedCollectors[msg.sender][dataService]; - if (collector.thawEndTimestamp == 0) { - revert PaymentsEscrowNotThawing(); - } - - if (collector.thawEndTimestamp > block.timestamp) { - revert PaymentsEscrowStillThawing(block.timestamp, collector.thawEndTimestamp); - } + require(collector.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); + require( + collector.thawEndTimestamp < block.timestamp, + PaymentsEscrowStillThawing(block.timestamp, collector.thawEndTimestamp) + ); delete authorizedCollectors[msg.sender][dataService]; emit RevokeCollector(msg.sender, dataService); @@ -110,9 +105,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // if amount thawing is zero and requested amount is zero this is an invalid request. // otherwise if amount thawing is greater than zero and requested amount is zero this // is a cancel thaw request. - if (account.tokensThawing == 0) { - revert PaymentsEscrowInsufficientTokensThawing(); - } + require(account.tokensThawing != 0, PaymentsEscrowInsufficientTokensThawing()); account.tokensThawing = 0; account.thawEndTimestamp = 0; emit CancelThaw(msg.sender, receiver); @@ -120,9 +113,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // Check if the escrow balance is sufficient - if (account.balance < tokens) { - revert PaymentsEscrowInsufficientBalance(account.balance, tokens); - } + require(account.balance >= tokens, PaymentsEscrowInsufficientBalance(account.balance, tokens)); // Set amount to thaw account.tokensThawing = tokens; @@ -135,16 +126,11 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // Withdraws all thawed escrow from a receiver's escrow account function withdraw(address receiver) external { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; - if (account.thawEndTimestamp == 0) { - revert PaymentsEscrowNotThawing(); - } - - if (account.thawEndTimestamp > block.timestamp) { - revert PaymentsEscrowStillThawing({ - currentTimestamp: block.timestamp, - thawEndTimestamp: account.thawEndTimestamp - }); - } + require(account.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); + require( + account.thawEndTimestamp < block.timestamp, + PaymentsEscrowStillThawing(block.timestamp, account.thawEndTimestamp) + ); // Amount is the minimum between the amount being thawed and the actual balance uint256 tokens = account.tokensThawing > account.balance ? account.balance : account.tokensThawing; @@ -167,14 +153,8 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { ) external { // Check if collector is authorized and has enough funds Collector storage collector = authorizedCollectors[payer][msg.sender]; - - if (!collector.authorized) { - revert PaymentsEscrowCollectorNotAuthorized(payer, msg.sender); - } - - if (collector.allowance < tokens) { - revert PaymentsEscrowInsufficientAllowance(collector.allowance, tokens); - } + require(collector.authorized, PaymentsEscrowCollectorNotAuthorized(payer, msg.sender)); + require(collector.allowance >= tokens, PaymentsEscrowInsufficientAllowance(collector.allowance, tokens)); // Reduce amount from approved collector collector.allowance -= tokens; @@ -182,9 +162,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // Collect tokens from PaymentsEscrow up to amount available EscrowAccount storage account = escrowAccounts[payer][receiver]; uint256 availableTokens = account.balance - account.tokensThawing; - if (availableTokens < tokens) { - revert PaymentsEscrowInsufficientBalance(availableTokens, tokens); - } + require(availableTokens >= tokens, PaymentsEscrowInsufficientBalance(availableTokens, tokens)); account.balance -= tokens; @@ -195,9 +173,10 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { _graphPayments().collect(paymentType, receiver, tokens, dataService, tokensDataService); uint256 balanceAfter = _graphToken().balanceOf(address(this)); - if (balanceBefore - balanceAfter != tokens) { - revert PaymentsEscrowInconsistentCollection(balanceBefore, balanceAfter, tokens); - } + require( + balanceBefore == tokens + balanceAfter, + PaymentsEscrowInconsistentCollection(balanceBefore, balanceAfter, tokens) + ); emit EscrowCollected(payer, receiver, tokens); } diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 6c50f8015..b535a72de 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -41,10 +41,10 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { */ function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external returns (uint256) { (SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(data, (SignedRAV, uint256)); - - if (signedRAV.rav.dataService != msg.sender) { - revert TAPCollectorCallerNotDataService(msg.sender, signedRAV.rav.dataService); - } + require( + signedRAV.rav.dataService == msg.sender, + TAPCollectorCallerNotDataService(msg.sender, signedRAV.rav.dataService) + ); address dataService = signedRAV.rav.dataService; address payer = _recoverRAVSigner(signedRAV); @@ -52,9 +52,10 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { uint256 tokensRAV = signedRAV.rav.valueAggregate; uint256 tokensAlreadyCollected = tokensCollected[dataService][receiver][payer]; - if (tokensRAV < tokensAlreadyCollected) { - revert TAPCollectorInconsistentRAVTokens(tokensRAV, tokensAlreadyCollected); - } + require( + tokensRAV > tokensAlreadyCollected, + TAPCollectorInconsistentRAVTokens(tokensRAV, tokensAlreadyCollected) + ); uint256 tokensToCollect = tokensRAV - tokensAlreadyCollected; uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 16367b776..1e81e7ad2 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -45,9 +45,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address private immutable STAKING_EXTENSION_ADDRESS; modifier onlyAuthorized(address serviceProvider, address verifier) { - if (!_isAuthorized(msg.sender, serviceProvider, verifier)) { - revert HorizonStakingNotAuthorized(msg.sender, serviceProvider, verifier); - } + require( + _isAuthorized(msg.sender, serviceProvider, verifier), + HorizonStakingNotAuthorized(msg.sender, serviceProvider, verifier) + ); _; } @@ -66,7 +67,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { */ // solhint-disable-next-line payable-fallback, no-complex-fallback fallback() external { - //require(_implementation() != address(0), "only through proxy"); address extensionImpl = STAKING_EXTENSION_ADDRESS; // solhint-disable-next-line no-inline-assembly assembly { @@ -205,16 +205,16 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, uint256 tokens ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) returns (bytes32) { - if (tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } + require(tokens != 0, HorizonStakingInvalidZeroTokens()); + Provision storage prov = _provisions[serviceProvider][verifier]; ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; bytes32 thawRequestId = keccak256(abi.encodePacked(serviceProvider, verifier, sp.nextThawRequestNonce)); sp.nextThawRequestNonce += 1; ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - require(_getProviderTokensAvailable(serviceProvider, verifier) >= tokens, "insufficient tokens available"); + uint256 tokensAvailable = _getProviderTokensAvailable(serviceProvider, verifier); + require(tokensAvailable >= tokens, HorizonStakingInsufficientTokensAvailable(tokensAvailable, tokens)); prov.tokensThawing = prov.tokensThawing + tokens; if (prov.sharesThawing == 0) { @@ -226,9 +226,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { thawRequest.thawingUntil = uint64(block.timestamp + uint256(prov.thawingPeriod)); prov.sharesThawing = prov.sharesThawing + thawRequest.shares; - if (prov.nThawRequests >= MAX_THAW_REQUESTS) { - revert HorizonStakingTooManyThawRequests(); - } + require(prov.nThawRequests < MAX_THAW_REQUESTS, HorizonStakingTooManyThawRequests()); if (prov.nThawRequests == 0) { prov.firstThawRequestId = thawRequestId; } else { @@ -244,10 +242,11 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // moves thawed stake from a provision back into the provider's available stake function deprovision(address serviceProvider, address verifier, uint256 tokens) external override notPartialPaused { - require(_isAuthorized(msg.sender, serviceProvider, verifier), "!auth"); - if (tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } + require( + _isAuthorized(msg.sender, serviceProvider, verifier), + HorizonStakingNotAuthorized(msg.sender, serviceProvider, verifier) + ); + require(tokens != 0, HorizonStakingInvalidZeroTokens()); _fulfillThawRequests(serviceProvider, verifier, tokens); } @@ -323,9 +322,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, uint256 tokens ) external override notPartialPaused { - if (tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } + require(tokens != 0, HorizonStakingInvalidZeroTokens()); DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); pool.tokens = pool.tokens + tokens; emit TokensToDelegationPoolAdded(serviceProvider, verifier, tokens); @@ -349,7 +346,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 sharesThawing = pool.sharesThawing; uint256 tokensThawing = pool.tokensThawing; - require(delegation.nThawRequests > 0, "no thaw requests"); + require(delegation.nThawRequests > 0, HorizonStakingNothingThawing()); bytes32 thawRequestId = delegation.firstThawRequestId; while (thawRequestId != bytes32(0)) { ThawRequest storage thawRequest = _thawRequests[thawRequestId]; @@ -431,14 +428,16 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { ) external override notPartialPaused { address verifier = msg.sender; Provision storage prov = _provisions[serviceProvider][verifier]; - if (prov.tokens < tokens) { - revert HorizonStakingInsufficientTokens(tokens, prov.tokens); - } + require(prov.tokens >= tokens, HorizonStakingInsufficientTokens(prov.tokens, tokens)); uint256 tokensToSlash = tokens; uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); if (providerTokensSlashed > 0) { - require(prov.tokens.mulPPM(prov.maxVerifierCut) >= tokensVerifier, "verifier cut too high"); + uint256 maxVerifierCut = prov.tokens.mulPPM(prov.maxVerifierCut); + require( + maxVerifierCut >= tokensVerifier, + HorizonStakingVerifierTokensTooHigh(tokensVerifier, maxVerifierCut) + ); if (tokensVerifier > 0) { _graphToken().pushTokens(verifierDestination, tokensVerifier); emit VerifierTokensSent(serviceProvider, verifier, verifierDestination, tokensVerifier); @@ -463,7 +462,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { if (tokensToSlash > 0) { DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); if (delegationSlashingEnabled) { - require(pool.tokens >= tokensToSlash, "insufficient delegated tokens"); + require(pool.tokens >= tokensToSlash, HorizonStakingNotEnoughDelegation(pool.tokens, tokensToSlash)); _graphToken().burnTokens(tokensToSlash); uint256 delegationFractionSlashed = (tokensToSlash * FIXED_POINT_PRECISION) / pool.tokens; pool.tokens = pool.tokens - tokensToSlash; @@ -500,15 +499,13 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint32 maxVerifierCut, uint64 thawingPeriod ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { - if (!_allowedLockedVerifiers[verifier]) { - revert HorizonStakingVerifierNotAllowed(verifier); - } + require(_allowedLockedVerifiers[verifier], HorizonStakingVerifierNotAllowed(verifier)); _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } // for vesting contracts function setOperatorLocked(address operator, address verifier, bool allowed) external override { - if (!_allowedLockedVerifiers[verifier]) revert HorizonStakingVerifierNotAllowed(verifier); + require(_allowedLockedVerifiers[verifier], HorizonStakingVerifierNotAllowed(verifier)); _setOperator(operator, verifier, allowed); } @@ -569,9 +566,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * PRIVATE FUNCTIONS */ function _stakeTo(address _serviceProvider, uint256 _tokens) private { - if (_tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } + require(_tokens != 0, HorizonStakingInvalidZeroTokens()); // Transfer tokens to stake from caller to this contract _graphToken().pullTokens(msg.sender, _tokens); @@ -582,12 +577,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { function _unstake(uint256 _tokens) private { address serviceProvider = msg.sender; - if (_tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } - if (_getIdleStake(serviceProvider) < _tokens) { - revert HorizonStakingInsufficientCapacity(); - } + require(_tokens != 0, HorizonStakingInvalidZeroTokens()); + require(_tokens <= _getIdleStake(serviceProvider), HorizonStakingInsufficientCapacity()); ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; uint256 stakedTokens = sp.tokensStaked; @@ -595,9 +586,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // to cover existing allocations // TODO this is only needed until legacy allocations are closed, // so we should remove it after the transition period - if ((stakedTokens - _tokens) < sp.__DEPRECATED_tokensAllocated) { - revert HorizonStakingInsufficientCapacityForLegacyAllocations(); - } + require( + stakedTokens - _tokens >= sp.__DEPRECATED_tokensAllocated, + HorizonStakingInsufficientCapacityForLegacyAllocations() + ); // This is also only during the transition period: we need // to ensure tokens stay locked after closing legacy allocations. @@ -641,12 +633,17 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint32 _maxVerifierCut, uint64 _thawingPeriod ) private { - if (_getIdleStake(_serviceProvider) < _tokens) { - revert HorizonStakingInsufficientCapacity(); - } - require(_tokens >= MIN_PROVISION_SIZE, "!tokens"); - require(_maxVerifierCut <= MAX_MAX_VERIFIER_CUT, "maxVerifierCut too high"); - require(_thawingPeriod <= _maxThawingPeriod, "thawingPeriod too high"); + require(_tokens >= MIN_PROVISION_SIZE, HorizonStakingInvalidTokens(_tokens, MIN_PROVISION_SIZE)); + require( + _maxVerifierCut <= MAX_MAX_VERIFIER_CUT, + HorizonStakingInvalidMaxVerifierCut(_maxVerifierCut, MAX_MAX_VERIFIER_CUT) + ); + require( + _thawingPeriod <= _maxThawingPeriod, + HorizonStakingInvalidThawingPeriod(_thawingPeriod, _maxThawingPeriod) + ); + require(_tokens <= _getIdleStake(_serviceProvider), HorizonStakingInsufficientCapacity()); + _provisions[_serviceProvider][_verifier] = Provision({ tokens: _tokens, tokensThawing: 0, @@ -669,15 +666,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { function _addToProvision(address _serviceProvider, address _verifier, uint256 _tokens) private { Provision storage prov = _provisions[_serviceProvider][_verifier]; - if (_tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } - if (prov.createdAt == 0) { - revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); - } - if (_getIdleStake(_serviceProvider) < _tokens) { - revert HorizonStakingInsufficientCapacity(); - } + require(_tokens != 0, HorizonStakingInvalidZeroTokens()); + require(prov.createdAt != 0, HorizonStakingInvalidProvision(_serviceProvider, _verifier)); + require(_tokens <= _getIdleStake(_serviceProvider), HorizonStakingInsufficientCapacity()); prov.tokens = prov.tokens + _tokens; _serviceProviders[_serviceProvider].tokensProvisioned = @@ -694,8 +685,11 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // Get tokens available for withdraw and update balance ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; - require(tokensToWithdraw > 0, "!tokens"); - require(block.number >= sp.__DEPRECATED_tokensLockedUntil, "locked"); + require(tokensToWithdraw > 0, HorizonStakingInvalidZeroTokens()); + require( + block.timestamp >= sp.__DEPRECATED_tokensLockedUntil, + HorizonStakingStillThawing(sp.__DEPRECATED_tokensLockedUntil) + ); // Reset locked tokens sp.__DEPRECATED_tokensLocked = 0; @@ -710,25 +704,21 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) private { - if (_tokens == 0) { - revert HorizonStakingInvalidZeroTokens(); - } + require(_tokens != 0, HorizonStakingInvalidZeroTokens()); + // TODO: remove this after L2 transfer tool for delegation is removed - if (_tokens < MIN_DELEGATION) { - revert HorizonStakingInsufficientTokens(MIN_DELEGATION, _tokens); - } - if (_provisions[_serviceProvider][_verifier].tokens == 0) { - revert HorizonStakingInvalidProvision(_serviceProvider, _verifier); - } + require(_tokens >= MIN_DELEGATION, HorizonStakingInsufficientTokens(MIN_DELEGATION, _tokens)); + require( + _provisions[_serviceProvider][_verifier].tokens != 0, + HorizonStakingInvalidProvision(_serviceProvider, _verifier) + ); DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); Delegation storage delegation = pool.delegators[msg.sender]; // Calculate shares to issue uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); - if (shares == 0 || shares < _minSharesOut) { - revert HorizonStakingSlippageProtection(_minSharesOut, shares); - } + require(shares != 0 && shares >= _minSharesOut, HorizonStakingSlippageProtection(_minSharesOut, shares)); pool.tokens = pool.tokens + _tokens; pool.shares = pool.shares + shares; @@ -739,10 +729,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } function _undelegate(address _serviceProvider, address _verifier, uint256 _shares) private { - require(_shares > 0, "!shares"); + require(_shares > 0, HorizonStakingInvalidZeroShares()); DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); Delegation storage delegation = pool.delegators[msg.sender]; - require(delegation.shares >= _shares, "!shares-avail"); + require(delegation.shares >= _shares, HorizonStakingInvalidSharesAmount(delegation.shares, _shares)); uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; @@ -756,7 +746,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // TODO: remove this when L2 transfer tools are removed if (delegation.shares != 0) { uint256 remainingTokens = (delegation.shares * (pool.tokens - pool.tokensThawing)) / pool.shares; - require(remainingTokens >= MIN_DELEGATION, "!minimum-delegation"); + require( + remainingTokens >= MIN_DELEGATION, + HorizonStakingInsufficientTokens(remainingTokens, MIN_DELEGATION) + ); } bytes32 thawRequestId = keccak256( abi.encodePacked(_serviceProvider, _verifier, msg.sender, delegation.nextThawRequestNonce) @@ -767,7 +760,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { thawRequest.thawingUntil = uint64( block.timestamp + uint256(_provisions[_serviceProvider][_verifier].thawingPeriod) ); - require(delegation.nThawRequests < MAX_THAW_REQUESTS, "max thaw requests"); + require(delegation.nThawRequests < MAX_THAW_REQUESTS, HorizonStakingTooManyThawRequests()); if (delegation.nThawRequests == 0) { delegation.firstThawRequestId = thawRequestId; } else { @@ -792,7 +785,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 sharesThawing = pool.sharesThawing; uint256 tokensThawing = pool.tokensThawing; - require(delegation.nThawRequests > 0, "no thaw requests"); + require(delegation.nThawRequests > 0, HorizonStakingNothingThawing()); bytes32 thawRequestId = delegation.firstThawRequestId; while (thawRequestId != bytes32(0)) { ThawRequest storage thawRequest = _thawRequests[thawRequestId]; @@ -826,7 +819,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } function _setOperator(address _operator, address _verifier, bool _allowed) private { - require(_operator != msg.sender, "operator == sender"); + require(_operator != msg.sender, HorizonStakingCallerIsServiceProvider()); if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { _legacyOperatorAuth[msg.sender][_operator] = _allowed; } else { @@ -841,10 +834,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 sharesThawing = prov.sharesThawing; uint256 tokensThawing = prov.tokensThawing; while (tokensRemaining > 0) { - require(prov.nThawRequests > 0, "not enough thawed tokens"); + require(prov.nThawRequests > 0, HorizonStakingCannotFulfillThawRequest()); bytes32 thawRequestId = prov.firstThawRequestId; ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - require(thawRequest.thawingUntil <= block.timestamp, "thawing period not over"); + require(thawRequest.thawingUntil <= block.timestamp, HorizonStakingStillThawing(thawRequest.thawingUntil)); uint256 thawRequestTokens = (thawRequest.shares * tokensThawing) / sharesThawing; if (thawRequestTokens <= tokensRemaining) { tokensRemaining = tokensRemaining - thawRequestTokens; diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index de3a08214..87e2f3ed0 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -23,12 +23,17 @@ abstract contract Managed is GraphDirectory { /// @dev Gap for future storage variables uint256[10] private __gap; + error ManagedIsPaused(); + error ManagedIsPartialPaused(); + error ManagedOnlyController(); + error ManagedOnlyGovernor(); + /** * @dev Revert if the controller is paused or partially paused */ modifier notPartialPaused() { - require(!_graphController().paused(), "Paused"); - require(!_graphController().partialPaused(), "Partial-paused"); + require(!_graphController().paused(), ManagedIsPaused()); + require(!_graphController().partialPaused(), ManagedIsPartialPaused()); _; } @@ -36,7 +41,7 @@ abstract contract Managed is GraphDirectory { * @dev Revert if the controller is paused */ modifier notPaused() { - require(!_graphController().paused(), "Paused"); + require(!_graphController().paused(), ManagedIsPaused()); _; } @@ -44,7 +49,7 @@ abstract contract Managed is GraphDirectory { * @dev Revert if the caller is not the Controller */ modifier onlyController() { - require(msg.sender == address(_graphController()), "Caller must be Controller"); + require(msg.sender == address(_graphController()), ManagedOnlyController()); _; } @@ -52,7 +57,7 @@ abstract contract Managed is GraphDirectory { * @dev Revert if the caller is not the governor */ modifier onlyGovernor() { - require(msg.sender == _graphController().getGovernor(), "Only Controller governor"); + require(msg.sender == _graphController().getGovernor(), ManagedOnlyGovernor()); _; } diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 536fe187d..ed6545593 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -50,31 +50,22 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * @dev Check if the caller is the arbitrator. */ modifier onlyArbitrator() { - if (msg.sender != arbitrator) { - revert DisputeManagerNotArbitrator(); - } + require(msg.sender == arbitrator, DisputeManagerNotArbitrator()); _; } modifier onlyPendingDispute(bytes32 disputeId) { - if (!isDisputeCreated(disputeId)) { - revert DisputeManagerInvalidDispute(disputeId); - } - - if (disputes[disputeId].status != IDisputeManager.DisputeStatus.Pending) { - revert DisputeManagerInvalidDisputeStatus(disputes[disputeId].status); - } + require(isDisputeCreated(disputeId), DisputeManagerInvalidDispute(disputeId)); + require( + disputes[disputeId].status == IDisputeManager.DisputeStatus.Pending, + DisputeManagerDisputeNotPending(disputes[disputeId].status) + ); _; } modifier onlyFisherman(bytes32 disputeId) { - if (!isDisputeCreated(disputeId)) { - revert DisputeManagerInvalidDispute(disputeId); - } - - if (msg.sender != disputes[disputeId].fisherman) { - revert DisputeManagerNotFisherman(); - } + require(isDisputeCreated(disputeId), DisputeManagerInvalidDispute(disputeId)); + require(msg.sender == disputes[disputeId].fisherman, DisputeManagerNotFisherman()); _; } @@ -165,16 +156,17 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM Attestation.State memory attestation2 = Attestation.parse(attestationData2); // Test that attestations are conflicting - if (!Attestation.areConflicting(attestation2, attestation1)) { - revert DisputeManagerNonConflictingAttestations( + require( + Attestation.areConflicting(attestation1, attestation2), + DisputeManagerNonConflictingAttestations( attestation1.requestCID, attestation1.responseCID, attestation1.subgraphDeploymentId, attestation2.requestCID, attestation2.responseCID, attestation2.subgraphDeploymentId - ); - } + ) + ); // Create the disputes // The deposit is zero for conflicting attestations @@ -252,9 +244,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM Dispute storage dispute = disputes[disputeId]; // Check if dispute period has finished - if (block.timestamp <= dispute.createdAt + disputePeriod) { - revert DisputeManagerDisputePeriodNotFinished(); - } + require(dispute.createdAt + disputePeriod < block.timestamp, DisputeManagerDisputePeriodNotFinished()); // Return deposit to the fisherman _graphToken().pushTokens(dispute.fisherman, dispute.deposit); @@ -366,9 +356,10 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM dispute.status = IDisputeManager.DisputeStatus.Rejected; // For conflicting disputes, the related dispute must be accepted - if (_isDisputeInConflict(dispute)) { - revert DisputeManagerMustAcceptRelatedDispute(disputeId, dispute.relatedDisputeId); - } + require( + !_isDisputeInConflict(dispute), + DisputeManagerMustAcceptRelatedDispute(disputeId, dispute.relatedDisputeId) + ); // Burn the fisherman's deposit _graphToken().burnTokens(dispute.deposit); @@ -386,15 +377,11 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM address allocationId = _recoverSigner(attestation); Allocation.State memory alloc = subgraphService.getAllocation(allocationId); - if (alloc.indexer == address(0)) { - revert DisputeManagerIndexerNotFound(allocationId); - } - if (alloc.subgraphDeploymentId != attestation.subgraphDeploymentId) { - revert DisputeManagerNonMatchingSubgraphDeployment( - alloc.subgraphDeploymentId, - attestation.subgraphDeploymentId - ); - } + require(alloc.indexer != address(0), DisputeManagerIndexerNotFound(allocationId)); + require( + alloc.subgraphDeploymentId == attestation.subgraphDeploymentId, + DisputeManagerNonMatchingSubgraphDeployment(alloc.subgraphDeploymentId, attestation.subgraphDeploymentId) + ); return alloc.indexer; } @@ -429,9 +416,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM // The indexer is disputable IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService)); - if (provision.tokens == 0) { - revert DisputeManagerZeroTokens(); - } + require(provision.tokens != 0, DisputeManagerZeroTokens()); // Create a disputeId bytes32 disputeId = keccak256( @@ -445,9 +430,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM ); // Only one dispute for a (indexer, subgraphDeploymentId) at a time - if (isDisputeCreated(disputeId)) { - revert DisputeManagerDisputeAlreadyCreated(disputeId); - } + require(!isDisputeCreated(disputeId), DisputeManagerDisputeAlreadyCreated(disputeId)); // Store dispute disputes[disputeId] = Dispute( @@ -487,22 +470,16 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM bytes32 disputeId = keccak256(abi.encodePacked(_allocationId)); // Only one dispute for an allocationId at a time - if (isDisputeCreated(disputeId)) { - revert DisputeManagerDisputeAlreadyCreated(disputeId); - } + require(!isDisputeCreated(disputeId), DisputeManagerDisputeAlreadyCreated(disputeId)); // Allocation must exist Allocation.State memory alloc = subgraphService.getAllocation(_allocationId); address indexer = alloc.indexer; - if (indexer == address(0)) { - revert DisputeManagerIndexerNotFound(_allocationId); - } + require(indexer != address(0), DisputeManagerIndexerNotFound(_allocationId)); // The indexer must be disputable IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService)); - if (provision.tokens == 0) { - revert DisputeManagerZeroTokens(); - } + require(provision.tokens != 0, DisputeManagerZeroTokens()); // Store dispute disputes[disputeId] = Dispute( @@ -556,9 +533,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM */ function _pullSubmitterDeposit(uint256 _deposit) private { // Ensure that fisherman has staked at least the minimum amount - if (_deposit < minimumDeposit) { - revert DisputeManagerInsufficientDeposit(_deposit, minimumDeposit); - } + require(_deposit >= minimumDeposit, DisputeManagerInsufficientDeposit(_deposit, minimumDeposit)); // Transfer tokens to deposit from fisherman to this contract _graphToken().pullTokens(msg.sender, _deposit); @@ -581,13 +556,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM // Get slash amount uint256 maxTokensSlash = uint256(maxSlashingCut).mulPPM(totalProvisionTokens); - if (_tokensSlash == 0) { - revert DisputeManagerInvalidTokensSlash(_tokensSlash); - } - - if (_tokensSlash > maxTokensSlash) { - revert DisputeManagerInvalidTokensSlash(_tokensSlash); - } + require(_tokensSlash != 0 && _tokensSlash <= maxTokensSlash, DisputeManagerInvalidTokensSlash(_tokensSlash)); // Rewards amount can only be extracted from service poriver tokens so // we grab the minimum between the slash amount and indexer's tokens @@ -604,9 +573,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * @param _arbitrator The address of the arbitration contract or party */ function _setArbitrator(address _arbitrator) private { - if (_arbitrator == address(0)) { - revert DisputeManagerInvalidZeroAddress(); - } + require(_arbitrator != address(0), DisputeManagerInvalidZeroAddress()); arbitrator = _arbitrator; emit ArbitratorSet(arbitrator); } @@ -617,9 +584,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * @param _disputePeriod Dispute period in seconds */ function _setDisputePeriod(uint64 _disputePeriod) private { - if (_disputePeriod == 0) { - revert DisputeManagerDisputePeriodZero(); - } + require(_disputePeriod != 0, DisputeManagerDisputePeriodZero()); disputePeriod = _disputePeriod; emit DisputePeriodSet(disputePeriod); } @@ -630,9 +595,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * @param _minimumDeposit The minimum deposit in Graph Tokens */ function _setMinimumDeposit(uint256 _minimumDeposit) private { - if (_minimumDeposit == 0) { - revert DisputeManagerInvalidMinimumDeposit(_minimumDeposit); - } + require(_minimumDeposit != 0, DisputeManagerInvalidMinimumDeposit(_minimumDeposit)); minimumDeposit = _minimumDeposit; emit MinimumDepositSet(minimumDeposit); } @@ -644,9 +607,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM */ function _setFishermanRewardCut(uint32 _fishermanRewardCut) private { // Must be within 0% to 100% (inclusive) - if (!PPMMath.isValidPPM(_fishermanRewardCut)) { - revert DisputeManagerInvalidFishermanReward(_fishermanRewardCut); - } + require(PPMMath.isValidPPM(_fishermanRewardCut), DisputeManagerInvalidFishermanReward(_fishermanRewardCut)); fishermanRewardCut = _fishermanRewardCut; emit FishermanRewardCutSet(fishermanRewardCut); } @@ -657,9 +618,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM */ function _setMaxSlashingCut(uint32 _maxSlashingCut) private { // Must be within 0% to 100% (inclusive) - if (!PPMMath.isValidPPM(_maxSlashingCut)) { - revert DisputeManagerInvalidMaxSlashingCut(_maxSlashingCut); - } + require(PPMMath.isValidPPM(_maxSlashingCut), DisputeManagerInvalidMaxSlashingCut(_maxSlashingCut)); maxSlashingCut = _maxSlashingCut; emit MaxSlashingCutSet(maxSlashingCut); } @@ -670,9 +629,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * @param _subgraphService The address of the subgraph service contract */ function _setSubgraphService(address _subgraphService) private { - if (_subgraphService == address(0)) { - revert DisputeManagerInvalidZeroAddress(); - } + require(_subgraphService != address(0), DisputeManagerInvalidZeroAddress()); subgraphService = ISubgraphService(_subgraphService); emit SubgraphServiceSet(_subgraphService); } diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 302e350bb..9a66c7916 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -36,9 +36,7 @@ contract SubgraphService is using Allocation for mapping(address => Allocation.State); modifier onlyRegisteredIndexer(address indexer) { - if (indexers[indexer].registeredAt == 0) { - revert SubgraphServiceIndexerNotRegistered(indexer); - } + require(indexers[indexer].registeredAt != 0, SubgraphServiceIndexerNotRegistered(indexer)); _; } @@ -77,19 +75,11 @@ contract SubgraphService is (string, string, address) ); - // Must provide a URL - if (bytes(url).length == 0) { - revert SubgraphServiceEmptyUrl(); - } - - // Only allow registering once - if (indexers[indexer].registeredAt != 0) { - revert SubgraphServiceIndexerAlreadyRegistered(); - } + require(bytes(url).length > 0, SubgraphServiceEmptyUrl()); + require(indexers[indexer].registeredAt == 0, SubgraphServiceIndexerAlreadyRegistered()); // Register the indexer indexers[indexer] = Indexer({ registeredAt: block.timestamp, url: url, geoHash: geohash }); - if (rewardsDestination != address(0)) { _setRewardsDestination(indexer, rewardsDestination); } @@ -239,9 +229,10 @@ contract SubgraphService is ); uint256 tokensDataService = tokensCollected.mulPPM(totalCut); uint256 balanceAfter = _graphToken().balanceOf(address(this)); - if (balanceAfter - balanceBefore != tokensDataService) { - revert SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter, tokensDataService); - } + require( + balanceBefore + tokensDataService == balanceAfter, + SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter, tokensDataService) + ); uint256 tokensCurators = 0; uint256 tokensSubgraphService = 0; diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index f6c9a1c56..a72956a29 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -115,7 +115,7 @@ interface IDisputeManager { error DisputeManagerInvalidFishermanReward(uint32 cut); error DisputeManagerInvalidMaxSlashingCut(uint32 maxSlashingCut); error DisputeManagerInvalidTokensSlash(uint256 tokensSlash); - error DisputeManagerInvalidDisputeStatus(IDisputeManager.DisputeStatus status); + error DisputeManagerDisputeNotPending(IDisputeManager.DisputeStatus status); error DisputeManagerInsufficientDeposit(uint256 deposit, uint256 minimumDeposit); error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId); error DisputeManagerDisputePeriodNotFinished(); diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index bcbc666e6..34c876135 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -28,7 +28,7 @@ library Allocation { uint256 tokens, uint256 accRewardsPerAllocatedToken ) internal returns (State memory) { - if (self[allocationId].exists()) revert AllocationAlreadyExists(allocationId); + require(!self[allocationId].exists(), AllocationAlreadyExists(allocationId)); State memory allocation = State({ indexer: indexer, @@ -50,8 +50,7 @@ library Allocation { // For stale POIs this ensures the rewards are not collected with the next valid POI function presentPOI(mapping(address => State) storage self, address allocationId) internal returns (State memory) { State storage allocation = _get(self, allocationId); - if (!allocation.isOpen()) revert AllocationClosed(allocationId, allocation.closedAt); - if (allocation.isAltruistic()) revert AllocationZeroTokens(allocationId); + require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); allocation.lastPOIPresentedAt = block.timestamp; return allocation; @@ -63,7 +62,7 @@ library Allocation { uint256 accRewardsPerAllocatedToken ) internal returns (State memory) { State storage allocation = _get(self, allocationId); - if (!allocation.isOpen()) revert AllocationClosed(allocationId, allocation.closedAt); + require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); allocation.accRewardsPerAllocatedToken = accRewardsPerAllocatedToken; return allocation; @@ -74,7 +73,7 @@ library Allocation { address allocationId ) internal returns (State memory) { State storage allocation = _get(self, allocationId); - if (!allocation.isOpen()) revert AllocationClosed(allocationId, allocation.closedAt); + require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); allocation.accRewardsPending = 0; return allocation; @@ -82,7 +81,7 @@ library Allocation { function close(mapping(address => State) storage self, address allocationId) internal returns (State memory) { State storage allocation = _get(self, allocationId); - if (!allocation.isOpen()) revert AllocationClosed(allocationId, allocation.closedAt); + require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); allocation.closedAt = block.timestamp; return allocation; @@ -106,7 +105,7 @@ library Allocation { function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) { State storage allocation = self[allocationId]; - if (!allocation.exists()) revert AllocationDoesNotExist(allocationId); + require(allocation.exists(), AllocationDoesNotExist(allocationId)); return allocation; } } diff --git a/packages/subgraph-service/contracts/libraries/Attestation.sol b/packages/subgraph-service/contracts/libraries/Attestation.sol index 5d5771721..b08802ec3 100644 --- a/packages/subgraph-service/contracts/libraries/Attestation.sol +++ b/packages/subgraph-service/contracts/libraries/Attestation.sol @@ -58,9 +58,10 @@ library Attestation { */ function parse(bytes memory _data) internal pure returns (State memory) { // Check attestation data length - if (_data.length != ATTESTATION_SIZE_BYTES) { - revert AttestationInvalidBytesLength(_data.length, ATTESTATION_SIZE_BYTES); - } + require( + _data.length == ATTESTATION_SIZE_BYTES, + AttestationInvalidBytesLength(_data.length, ATTESTATION_SIZE_BYTES) + ); // Decode receipt (bytes32 requestCID, bytes32 responseCID, bytes32 subgraphDeploymentId) = abi.decode( @@ -82,9 +83,10 @@ library Attestation { * @return uint8 value */ function _toUint8(bytes memory _bytes, uint256 _start) private pure returns (uint8) { - if (_bytes.length < (_start + UINT8_BYTE_LENGTH)) { - revert AttestationInvalidBytesLength(_bytes.length, _start + UINT8_BYTE_LENGTH); - } + require( + _bytes.length >= _start + UINT8_BYTE_LENGTH, + AttestationInvalidBytesLength(_bytes.length, _start + UINT8_BYTE_LENGTH) + ); uint8 tempUint; // solhint-disable-next-line no-inline-assembly @@ -100,9 +102,10 @@ library Attestation { * @return bytes32 value */ function _toBytes32(bytes memory _bytes, uint256 _start) private pure returns (bytes32) { - if (_bytes.length < (_start + BYTES32_BYTE_LENGTH)) { - revert AttestationInvalidBytesLength(_bytes.length, _start + BYTES32_BYTE_LENGTH); - } + require( + _bytes.length >= _start + BYTES32_BYTE_LENGTH, + AttestationInvalidBytesLength(_bytes.length, _start + BYTES32_BYTE_LENGTH) + ); bytes32 tempBytes32; // solhint-disable-next-line no-inline-assembly diff --git a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol index 840973cbf..604a3bd78 100644 --- a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol +++ b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol @@ -19,10 +19,9 @@ library LegacyAllocation { address allocationId, bytes32 subgraphDeploymentID ) internal { - if (self[allocationId].exists()) revert LegacyAllocationAlreadyMigrated(allocationId); + require(!self[allocationId].exists(), LegacyAllocationExists(allocationId)); State memory allocation = State({ indexer: indexer, subgraphDeploymentID: subgraphDeploymentID }); - self[allocationId] = allocation; } @@ -31,7 +30,7 @@ library LegacyAllocation { } function revertIfExists(mapping(address => State) storage self, address allocationId) internal view { - if (self[allocationId].exists()) revert LegacyAllocationExists(allocationId); + require(!self[allocationId].exists(), LegacyAllocationExists(allocationId)); } function exists(State memory self) internal pure returns (bool) { @@ -40,7 +39,7 @@ library LegacyAllocation { function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) { State storage allocation = self[allocationId]; - if (!allocation.exists()) revert LegacyAllocationDoesNotExist(allocationId); + require(allocation.exists(), LegacyAllocationDoesNotExist(allocationId)); return allocation; } } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 69031bf44..ee0f5f2eb 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -17,6 +17,7 @@ import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManagerV1Storage { using ProvisionTracker for mapping(address => uint256); using Allocation for mapping(address => Allocation.State); + using Allocation for Allocation.State; using LegacyAllocation for mapping(address => LegacyAllocation.State); using PPMMath for uint256; @@ -99,7 +100,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager bytes memory _allocationProof, uint32 _delegationRatio ) internal returns (Allocation.State memory) { - if (_allocationId == address(0)) revert AllocationManagerInvalidAllocationId(); + require(_allocationId != address(0), AllocationManagerInvalidAllocationId()); _verifyAllocationProof(_indexer, _allocationId, _allocationProof); @@ -134,9 +135,12 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager Allocation.State memory allocation = allocations.get(allocationId); - // Mint indexing rewards, 0x00 and stale POIs get no rewards... + // Mint indexing rewards. To qualify: + // - POI must be non-zero + // - POI must not be stale, i.e: older than maxPOIStaleness + // - allocation must not be altruistic (tokens = 0) uint256 timeSinceLastPOI = block.number - Math.max(allocation.createdAt, allocation.lastPOIPresentedAt); - uint256 tokensRewards = (timeSinceLastPOI <= maxPOIStaleness && poi != bytes32(0)) + uint256 tokensRewards = (timeSinceLastPOI <= maxPOIStaleness && poi != bytes32(0) && !allocation.isAltruistic()) ? _graphRewardsManager().takeRewards(allocationId) : 0; @@ -205,11 +209,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager uint32 _delegationRatio ) internal returns (Allocation.State memory) { Allocation.State memory allocation = allocations.get(_allocationId); - - // Exit early if the allocation size is the same - if (_tokens == allocation.tokens) { - revert AllocationManagerAllocationSameSize(_allocationId, _tokens); - } + require(_tokens != allocation.tokens, AllocationManagerAllocationSameSize(_allocationId, _tokens)); // Update provision tracker uint256 oldTokens = allocation.tokens; @@ -223,7 +223,9 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager uint256 accRewardsPerAllocatedToken = _graphRewardsManager().onSubgraphAllocationUpdate( allocation.subgraphDeploymentId ); - uint256 accRewardsPending = accRewardsPerAllocatedToken - allocation.accRewardsPerAllocatedToken; + uint256 accRewardsPending = !allocation.isAltruistic() + ? accRewardsPerAllocatedToken - allocation.accRewardsPerAllocatedToken + : 0; // Update the allocation allocations[_allocationId].tokens = _tokens; @@ -278,7 +280,7 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) internal view { bytes32 digest = _encodeAllocationProof(_indexer, _allocationId); address signer = ECDSA.recover(digest, _proof); - if (signer != _allocationId) revert AllocationManagerInvalidAllocationProof(signer, _allocationId); + require(signer == _allocationId, AllocationManagerInvalidAllocationProof(signer, _allocationId)); } function _encodeAllocationProof(address _indexer, address _allocationId) internal view returns (bytes32) { diff --git a/packages/subgraph-service/contracts/utilities/Directory.sol b/packages/subgraph-service/contracts/utilities/Directory.sol index 67afaadc5..8bfaee861 100644 --- a/packages/subgraph-service/contracts/utilities/Directory.sol +++ b/packages/subgraph-service/contracts/utilities/Directory.sol @@ -21,9 +21,10 @@ abstract contract Directory { error DirectoryNotDisputeManager(address caller, address disputeManager); modifier onlyDisputeManager() { - if (msg.sender != address(DISPUTE_MANAGER)) { - revert DirectoryNotDisputeManager(msg.sender, address(DISPUTE_MANAGER)); - } + require( + msg.sender == address(DISPUTE_MANAGER), + DirectoryNotDisputeManager(msg.sender, address(DISPUTE_MANAGER)) + ); _; } From b5cb905cb1fb75897a0341f08ba13850600dfff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 17:39:01 -0300 Subject: [PATCH 071/343] fix: couple fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/staking/HorizonStaking.sol | 26 +++++++++---------- .../contracts/DisputeManager.sol | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 1e81e7ad2..c84260eb8 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -102,7 +102,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice Deposit tokens on the caller's stake. * @param tokens Amount of tokens to stake */ - function stake(uint256 tokens) external override { + function stake(uint256 tokens) external override notPartialPaused { _stakeTo(msg.sender, tokens); } @@ -241,12 +241,11 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } // moves thawed stake from a provision back into the provider's available stake - function deprovision(address serviceProvider, address verifier, uint256 tokens) external override notPartialPaused { - require( - _isAuthorized(msg.sender, serviceProvider, verifier), - HorizonStakingNotAuthorized(msg.sender, serviceProvider, verifier) - ); - require(tokens != 0, HorizonStakingInvalidZeroTokens()); + function deprovision( + address serviceProvider, + address verifier, + uint256 tokens + ) external override onlyAuthorized(serviceProvider, verifier) notPartialPaused { _fulfillThawRequests(serviceProvider, verifier, tokens); } @@ -384,25 +383,25 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, IGraphPayments.PaymentTypes paymentType, uint256 feeCut - ) external override { + ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); } // For backwards compatibility, delegates to the subgraph data service // (Note this one doesn't have splippage/rounding protection!) - function delegate(address serviceProvider, uint256 tokens) external { + function delegate(address serviceProvider, uint256 tokens) external notPartialPaused { _graphToken().pullTokens(msg.sender, tokens); _delegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, tokens, 0); } // For backwards compatibility, undelegates from the subgraph data service - function undelegate(address serviceProvider, uint256 shares) external { + function undelegate(address serviceProvider, uint256 shares) external notPartialPaused { _undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares); } // For backwards compatibility, withdraws delegated tokens from the subgraph data service - function withdrawDelegated(address serviceProvider, address newServiceProvider) external { + function withdrawDelegated(address serviceProvider, address newServiceProvider) external notPartialPaused { _withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0); } @@ -504,7 +503,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } // for vesting contracts - function setOperatorLocked(address operator, address verifier, bool allowed) external override { + function setOperatorLocked(address operator, address verifier, bool allowed) external override notPartialPaused { require(_allowedLockedVerifiers[verifier], HorizonStakingVerifierNotAllowed(verifier)); _setOperator(operator, verifier, allowed); } @@ -544,7 +543,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param verifier The verifier / data service on which they'll be allowed to operate * @param allowed Whether the operator is authorized or not */ - function setOperator(address operator, address verifier, bool allowed) external override { + function setOperator(address operator, address verifier, bool allowed) external override notPartialPaused { _setOperator(operator, verifier, allowed); } @@ -829,6 +828,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } function _fulfillThawRequests(address _serviceProvider, address _verifier, uint256 _tokens) private { + require(_tokens != 0, HorizonStakingInvalidZeroTokens()); Provision storage prov = _provisions[_serviceProvider][_verifier]; uint256 tokensRemaining = _tokens; uint256 sharesThawing = prov.sharesThawing; diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index ed6545593..55c8c6622 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -270,7 +270,7 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM * @notice Update the dispute period to `_disputePeriod` in seconds * @param disputePeriod Dispute period in seconds */ - function setDisputePeriod(uint64 disputePeriod) external override { + function setDisputePeriod(uint64 disputePeriod) external override onlyOwner { _setDisputePeriod(disputePeriod); } From 180513ef5d58f4c9a48b8dcc3702bfcd438cc205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 24 May 2024 17:52:20 -0300 Subject: [PATCH 072/343] feat: remove partial pause MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/staking/HorizonStaking.sol | 48 +++++++++---------- .../staking/HorizonStakingExtension.sol | 4 +- .../contracts/staking/utilities/Managed.sol | 10 ---- 3 files changed, 24 insertions(+), 38 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index c84260eb8..95174f626 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -102,7 +102,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice Deposit tokens on the caller's stake. * @param tokens Amount of tokens to stake */ - function stake(uint256 tokens) external override notPartialPaused { + function stake(uint256 tokens) external override notPaused { _stakeTo(msg.sender, tokens); } @@ -111,7 +111,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param serviceProvider Address of the service provider * @param tokens Amount of tokens to stake */ - function stakeTo(address serviceProvider, uint256 tokens) external override notPartialPaused { + function stakeTo(address serviceProvider, uint256 tokens) external override notPaused { _stakeTo(serviceProvider, tokens); } @@ -122,11 +122,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param verifier Address of the verifier * @param tokens Amount of tokens to stake */ - function stakeToProvision( - address serviceProvider, - address verifier, - uint256 tokens - ) external override notPartialPaused { + function stakeToProvision(address serviceProvider, address verifier, uint256 tokens) external override notPaused { _stakeTo(serviceProvider, tokens); _addToProvision(serviceProvider, verifier, tokens); } @@ -172,7 +168,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod - ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + ) external override notPaused onlyAuthorized(serviceProvider, verifier) { _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } @@ -188,7 +184,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address verifier, uint256 tokens - ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + ) external override notPaused onlyAuthorized(serviceProvider, verifier) { _addToProvision(serviceProvider, verifier, tokens); } @@ -204,7 +200,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address verifier, uint256 tokens - ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) returns (bytes32) { + ) external override notPaused onlyAuthorized(serviceProvider, verifier) returns (bytes32) { require(tokens != 0, HorizonStakingInvalidZeroTokens()); Provision storage prov = _provisions[serviceProvider][verifier]; @@ -245,7 +241,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address verifier, uint256 tokens - ) external override onlyAuthorized(serviceProvider, verifier) notPartialPaused { + ) external override onlyAuthorized(serviceProvider, verifier) notPaused { _fulfillThawRequests(serviceProvider, verifier, tokens); } @@ -267,7 +263,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { ) external override - notPartialPaused + notPaused onlyAuthorized(serviceProvider, oldVerifier) onlyAuthorized(serviceProvider, newVerifier) { @@ -280,14 +276,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, uint32 maxVerifierCut, uint64 thawingPeriod - ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + ) external override notPaused onlyAuthorized(serviceProvider, verifier) { Provision storage prov = _provisions[serviceProvider][verifier]; prov.maxVerifierCutPending = maxVerifierCut; prov.thawingPeriodPending = thawingPeriod; emit ProvisionParametersStaged(serviceProvider, verifier, maxVerifierCut, thawingPeriod); } - function acceptProvisionParameters(address serviceProvider) external override notPartialPaused { + function acceptProvisionParameters(address serviceProvider) external override notPaused { address verifier = msg.sender; Provision storage prov = _provisions[serviceProvider][verifier]; prov.maxVerifierCut = prov.maxVerifierCutPending; @@ -304,7 +300,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, uint256 tokens, uint256 minSharesOut - ) external override notPartialPaused { + ) external override notPaused { _graphToken().pullTokens(msg.sender, tokens); _delegate(serviceProvider, verifier, tokens, minSharesOut); } @@ -320,7 +316,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address verifier, uint256 tokens - ) external override notPartialPaused { + ) external override notPaused { require(tokens != 0, HorizonStakingInvalidZeroTokens()); DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); pool.tokens = pool.tokens + tokens; @@ -329,7 +325,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // undelegate tokens from a service provider // the shares are burned and replaced with shares in the thawing pool - function undelegate(address serviceProvider, address verifier, uint256 shares) external override notPartialPaused { + function undelegate(address serviceProvider, address verifier, uint256 shares) external override notPaused { _undelegate(serviceProvider, verifier, shares); } @@ -338,7 +334,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, address newServiceProvider, uint256 minSharesForNewProvider - ) external override notPartialPaused { + ) external override notPaused { DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); Delegation storage delegation = pool.delegators[msg.sender]; uint256 thawedTokens = 0; @@ -383,25 +379,25 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, IGraphPayments.PaymentTypes paymentType, uint256 feeCut - ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + ) external override notPaused onlyAuthorized(serviceProvider, verifier) { delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); } // For backwards compatibility, delegates to the subgraph data service // (Note this one doesn't have splippage/rounding protection!) - function delegate(address serviceProvider, uint256 tokens) external notPartialPaused { + function delegate(address serviceProvider, uint256 tokens) external notPaused { _graphToken().pullTokens(msg.sender, tokens); _delegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, tokens, 0); } // For backwards compatibility, undelegates from the subgraph data service - function undelegate(address serviceProvider, uint256 shares) external notPartialPaused { + function undelegate(address serviceProvider, uint256 shares) external notPaused { _undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares); } // For backwards compatibility, withdraws delegated tokens from the subgraph data service - function withdrawDelegated(address serviceProvider, address newServiceProvider) external notPartialPaused { + function withdrawDelegated(address serviceProvider, address newServiceProvider) external notPaused { _withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0); } @@ -424,7 +420,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokens, uint256 tokensVerifier, address verifierDestination - ) external override notPartialPaused { + ) external override notPaused { address verifier = msg.sender; Provision storage prov = _provisions[serviceProvider][verifier]; require(prov.tokens >= tokens, HorizonStakingInsufficientTokens(prov.tokens, tokens)); @@ -497,13 +493,13 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod - ) external override notPartialPaused onlyAuthorized(serviceProvider, verifier) { + ) external override notPaused onlyAuthorized(serviceProvider, verifier) { require(_allowedLockedVerifiers[verifier], HorizonStakingVerifierNotAllowed(verifier)); _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } // for vesting contracts - function setOperatorLocked(address operator, address verifier, bool allowed) external override notPartialPaused { + function setOperatorLocked(address operator, address verifier, bool allowed) external override notPaused { require(_allowedLockedVerifiers[verifier], HorizonStakingVerifierNotAllowed(verifier)); _setOperator(operator, verifier, allowed); } @@ -543,7 +539,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param verifier The verifier / data service on which they'll be allowed to operate * @param allowed Whether the operator is authorized or not */ - function setOperator(address operator, address verifier, bool allowed) external override notPartialPaused { + function setOperator(address operator, address verifier, bool allowed) external override notPaused { _setOperator(operator, verifier, allowed); } diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 97fd49500..284d2dbe6 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -61,7 +61,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2Staki address from, uint256 tokens, bytes calldata data - ) external override notPartialPaused onlyL2Gateway { + ) external override notPaused onlyL2Gateway { require(from == _counterpartStakingAddress, "ONLY_L1_STAKING_THROUGH_BRIDGE"); (uint8 code, bytes memory functionData) = abi.decode(data, (uint8, bytes)); @@ -116,7 +116,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2Staki * @param tokens Amount of tokens to collect * @param allocationID Allocation where the tokens will be assigned */ - function collect(uint256 tokens, address allocationID) external override { + function collect(uint256 tokens, address allocationID) external override notPaused { // Allocation identifier validation require(allocationID != address(0), "!alloc"); diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index 87e2f3ed0..d9cbc9980 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -24,19 +24,9 @@ abstract contract Managed is GraphDirectory { uint256[10] private __gap; error ManagedIsPaused(); - error ManagedIsPartialPaused(); error ManagedOnlyController(); error ManagedOnlyGovernor(); - /** - * @dev Revert if the controller is paused or partially paused - */ - modifier notPartialPaused() { - require(!_graphController().paused(), ManagedIsPaused()); - require(!_graphController().partialPaused(), ManagedIsPartialPaused()); - _; - } - /** * @dev Revert if the controller is paused */ From e7c00c1835c2cf757612e248a497fe51c088c465 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Sat, 25 May 2024 01:04:02 -0300 Subject: [PATCH 073/343] chore: add horizon unit tests --- packages/horizon/test/GraphBase.t.sol | 12 +- .../horizon/test/escrow/GraphEscrow.t.sol | 2 +- packages/horizon/test/escrow/collect.t.sol | 8 +- .../horizon/test/payments/GraphPayments.t.sol | 8 +- ...aking.t.sol => HorizonStakingShared.t.sol} | 30 +++- .../horizon/test/staking/HorizonStaking.t.sol | 86 ++++++++++++ .../test/staking/delegation/delegate.t.sol | 42 ++++++ .../test/staking/delegation/undelegate.t.sol | 76 ++++++++++ .../test/staking/delegation/withdraw.t.sol | 72 ++++++++++ .../test/staking/operator/operator.t.sol | 14 ++ .../test/staking/provision/deprovision.t.sol | 98 +++++++++++++ .../test/staking/provision/provision.t.sol | 93 +++++++++++++ .../test/staking/provision/reprovision.t.sol | 131 ++++++++++++++++++ .../horizon/test/staking/slash/slash.t.sol | 87 ++++++++++++ .../horizon/test/staking/stake/stake.t.sol | 29 ++++ .../horizon/test/staking/stake/unstake.t.sol | 74 ++++++++++ packages/horizon/test/staking/thaw/thaw.t.sol | 118 ++++++++++++++++ packages/horizon/test/utils/Constants.sol | 6 + packages/horizon/test/utils/Users.sol | 1 + 19 files changed, 971 insertions(+), 16 deletions(-) rename packages/horizon/test/shared/horizon-staking/{HorizonStaking.t.sol => HorizonStakingShared.t.sol} (64%) create mode 100644 packages/horizon/test/staking/HorizonStaking.t.sol create mode 100644 packages/horizon/test/staking/delegation/delegate.t.sol create mode 100644 packages/horizon/test/staking/delegation/undelegate.t.sol create mode 100644 packages/horizon/test/staking/delegation/withdraw.t.sol create mode 100644 packages/horizon/test/staking/operator/operator.t.sol create mode 100644 packages/horizon/test/staking/provision/deprovision.t.sol create mode 100644 packages/horizon/test/staking/provision/provision.t.sol create mode 100644 packages/horizon/test/staking/provision/reprovision.t.sol create mode 100644 packages/horizon/test/staking/slash/slash.t.sol create mode 100644 packages/horizon/test/staking/stake/stake.t.sol create mode 100644 packages/horizon/test/staking/stake/unstake.t.sol create mode 100644 packages/horizon/test/staking/thaw/thaw.t.sol diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index f657d8b3e..27835c54a 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -54,11 +54,13 @@ abstract contract GraphBaseTest is Test, Constants { indexer: createUser("indexer"), operator: createUser("operator"), gateway: createUser("gateway"), - verifier: createUser("verifier") + verifier: createUser("verifier"), + delegator: createUser("delegator") }); // Deploy protocol contracts deployProtocolContracts(); + setupProtocol(); unpauseProtocol(); // Label contracts @@ -147,11 +149,15 @@ abstract contract GraphBaseTest is Test, Constants { proxyAdmin.upgrade(stakingProxy, address(stakingBase)); proxyAdmin.acceptProxy(stakingBase, stakingProxy); staking = IHorizonStaking(address(stakingProxy)); - vm.stopPrank(); + } + + function setupProtocol() private { + vm.startPrank(users.governor); + staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); } function unpauseProtocol() private { - vm.prank(users.governor); + vm.startPrank(users.governor); controller.setPaused(false); } diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index a98eb3322..70c96466f 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaking.t.sol"; +import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; contract GraphEscrowTest is HorizonStakingSharedTest { diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index d7557353a..04d71252d 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -8,7 +8,10 @@ import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; contract GraphEscrowCollectTest is GraphEscrowTest { - function testCollect_Tokens(uint256 amount, uint256 tokensDataService) public useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { + function testCollect_Tokens( + uint256 amount, + uint256 tokensDataService + ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegatoion); @@ -16,10 +19,9 @@ contract GraphEscrowCollectTest is GraphEscrowTest { vm.startPrank(users.gateway); escrow.approveCollector(users.verifier, amount); _depositTokens(amount); - vm.stopPrank(); uint256 indexerPreviousBalance = token.balanceOf(users.indexer); - vm.prank(users.verifier); + vm.startPrank(users.verifier); escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); uint256 indexerBalance = token.balanceOf(users.indexer); diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index e4fa18b97..4449bbdcc 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -5,14 +5,14 @@ import "forge-std/Test.sol"; import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; -import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaking.t.sol"; +import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; contract GraphPaymentsTest is HorizonStakingSharedTest { function testCollect( uint256 amount, uint256 tokensDataService - ) public useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { + ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegatoion); @@ -42,7 +42,11 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { function testCollect_RevertWhen_InsufficientAmount( uint256 amount, uint256 tokensDataService +<<<<<<< HEAD ) public useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { +======= + ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(0, delegationFeeCut) { +>>>>>>> 9fa803b7 (chore: staking tests refactor) vm.assume(tokensDataService <= 10_000_000_000 ether); vm.assume(tokensDataService > amount); diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol similarity index 64% rename from packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol rename to packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 7fd428e40..2ee0d5764 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStaking.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -8,10 +8,24 @@ import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol abstract contract HorizonStakingSharedTest is GraphBaseTest { + modifier useIndexer() { + vm.startPrank(users.indexer); + _; + vm.stopPrank(); + } + + modifier assumeProvisionTokens(uint256 tokens) { + vm.assume(tokens > MIN_PROVISION_SIZE); + vm.assume(tokens <= 10_000_000_000 ether); + _; + } + modifier useProvision(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) { vm.assume(tokens <= 10_000_000_000 ether); - vm.assume(tokens > 1e18); - _createProvision(tokens, maxVerifierCut, thawingPeriod); + vm.assume(tokens > MIN_PROVISION_SIZE); + vm.assume(maxVerifierCut <= MAX_MAX_VERIFIER_CUT); + vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); + _createProvision(subgraphDataServiceAddress, tokens, maxVerifierCut, thawingPeriod); _; } @@ -28,22 +42,24 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { /* Helpers */ - function _createProvision(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) internal { - vm.startPrank(users.indexer); + function _createProvision( + address dataServiceAddress, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) internal { token.approve(address(staking), tokens); staking.stakeTo(users.indexer, tokens); staking.provision( users.indexer, - subgraphDataServiceAddress, + dataServiceAddress, tokens, maxVerifierCut, thawingPeriod ); - vm.stopPrank(); } function _setDelegationFeeCut(IGraphPayments.PaymentTypes paymentType, uint256 cut) internal { - vm.prank(users.indexer); staking.setDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType, cut); } } diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol new file mode 100644 index 000000000..431ce0296 --- /dev/null +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { IHorizonStakingTypes } from "../../contracts/interfaces/IHorizonStakingTypes.sol"; +import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; + +contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { + + modifier useOperator() { + vm.startPrank(users.indexer); + staking.setOperator(users.operator, subgraphDataServiceAddress, true); + vm.startPrank(users.operator); + _; + vm.stopPrank(); + } + + modifier useStake(uint256 amount) { + vm.assume(amount > MIN_PROVISION_SIZE); + approve(address(staking), amount); + staking.stake(amount); + _; + } + + modifier useStakeTo(address to, uint256 amount) { + vm.assume(amount > MIN_PROVISION_SIZE); + _stakeTo(to, amount); + _; + } + + modifier useThawRequest(uint256 thawAmount) { + vm.assume(thawAmount > 0); + _createThawRequest(thawAmount); + _; + } + + modifier useThawAndDeprovision(uint256 amount, uint64 thawingPeriod) { + vm.assume(amount > 0); + _createThawRequest(amount); + skip(thawingPeriod + 1); + _deprovision(amount); + _; + } + + modifier useDelegation(uint256 delegationAmount) { + address msgSender; + (, msgSender,) = vm.readCallers(); + vm.assume(delegationAmount > MIN_DELEGATION); + vm.assume(delegationAmount <= 10_000_000_000 ether); + vm.startPrank(users.delegator); + _delegate(delegationAmount); + vm.startPrank(msgSender); + _; + } + + function _stakeTo(address to, uint256 amount) internal { + approve(address(staking), amount); + staking.stakeTo(to, amount); + } + + function _createThawRequest(uint256 thawAmount) internal returns (bytes32) { + return staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + } + + function _deprovision(uint256 amount) internal { + staking.deprovision(users.indexer, subgraphDataServiceAddress, amount); + } + + function _delegate(uint256 amount) internal { + token.approve(address(staking), amount); + staking.delegate(users.indexer, subgraphDataServiceAddress, amount, 0); + } + + function _getDelegation() internal view returns (Delegation memory) { + return staking.getDelegation(users.delegator, users.indexer, subgraphDataServiceAddress); + } + + function _undelegate(uint256 shares) internal { + staking.undelegate(users.indexer, subgraphDataServiceAddress, shares); + } + + function _getDelegationPool() internal view returns (DelegationPool memory) { + return staking.getDelegationPool(users.indexer, subgraphDataServiceAddress); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol new file mode 100644 index 000000000..279c2f7f7 --- /dev/null +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingDelegateTest is HorizonStakingTest { + + function testDelegate_Tokens( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(delegatedTokens, delegationAmount); + } + + function testDelegate_RevertWhen_ZeroTokens( + uint256 amount + ) public useIndexer useProvision(amount, 0, 0) { + vm.startPrank(users.delegator); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); + vm.expectRevert(expectedError); + staking.delegate(users.indexer, subgraphDataServiceAddress, 0, 0); + } + + function testDelegate_RevertWhen_BelowMinimum( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) { + vm.startPrank(users.delegator); + delegationAmount = bound(delegationAmount, 1, MIN_DELEGATION - 1); + token.approve(address(staking), delegationAmount); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInsufficientTokens(uint256,uint256)", + MIN_DELEGATION, + delegationAmount + ); + vm.expectRevert(expectedError); + staking.delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol new file mode 100644 index 000000000..73c7a913e --- /dev/null +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingUndelegateTest is HorizonStakingTest { + + function testUndelegate_Tokens( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + // TODO: maybe create a changePrank + vm.stopPrank(); + vm.startPrank(users.delegator); + Delegation memory delegation = _getDelegation(); + _undelegate(delegation.shares); + + Delegation memory thawingDelegation = _getDelegation(); + ThawRequest memory thawRequest = staking.getThawRequest(thawingDelegation.lastThawRequestId); + + assertEq(thawRequest.shares, delegation.shares); + } + + function testUndelegate_RevertWhen_ZeroTokens( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + // TODO: maybe create a changePrank + vm.stopPrank(); + vm.startPrank(users.delegator); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); + vm.expectRevert(expectedError); + _undelegate(0); + } + + function testUndelegate_RevertWhen_OverUndelegation( + uint256 amount, + uint256 delegationAmount, + uint256 overDelegationShares + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + // TODO: maybe create a changePrank + vm.stopPrank(); + vm.startPrank(users.delegator); + Delegation memory delegation = _getDelegation(); + vm.assume(overDelegationShares > delegation.shares); + + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInsufficientTokens(uint256,uint256)", + overDelegationShares, + delegation.shares + ); + vm.expectRevert(expectedError); + _undelegate(overDelegationShares); + } + + function testUndelegate_RevertWhen_UndelegateLeavesInsufficientTokens( + uint256 delegationAmount, + uint256 withdrawShares + ) + public + useIndexer + useProvision(10_000_000 ether, 0, 0) + useDelegation(delegationAmount) + { + // TODO: maybe create a changePrank + vm.stopPrank(); + vm.startPrank(users.delegator); + uint256 minShares = delegationAmount - MIN_DELEGATION + 1; + withdrawShares = bound(withdrawShares, minShares, delegationAmount - 1); + + vm.expectRevert("!minimum-delegation"); + _undelegate(withdrawShares); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol new file mode 100644 index 000000000..593a2dae5 --- /dev/null +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { + + modifier useUndelegate(uint256 shares) { + vm.stopPrank(); + vm.startPrank(users.delegator); + Delegation memory delegation = _getDelegation(); + shares = bound(shares, 1, delegation.shares); + + if (shares != delegation.shares) { + DelegationPool memory pool = _getDelegationPool(); + uint256 tokens = (shares * (pool.tokens - pool.tokensThawing)) / pool.shares; + uint256 newTokensThawing = pool.tokensThawing + tokens; + uint256 remainingTokens = (delegation.shares * (pool.tokens - newTokensThawing)) / pool.shares; + vm.assume(remainingTokens >= MIN_DELEGATION); + } + + _undelegate(shares); + _; + } + + function _withdrawDelegated() private { + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0x0), 0); + } + + function _expectedTokensFromThawRequest(ThawRequest memory thawRequest) private view returns (uint256) { + DelegationPool memory pool = _getDelegationPool(); + return (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing; + } + + function testWithdrawDelegation_Tokens( + uint256 delegationAmount, + uint256 withdrawShares + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + useUndelegate(withdrawShares) + { + Delegation memory thawingDelegation = _getDelegation(); + ThawRequest memory thawRequest = staking.getThawRequest(thawingDelegation.lastThawRequestId); + + skip(thawRequest.thawingUntil + 1); + + uint256 previousBalance = token.balanceOf(users.delegator); + uint256 expectedTokens = _expectedTokensFromThawRequest(thawRequest); + _withdrawDelegated(); + + uint256 newBalance = token.balanceOf(users.delegator); + assertEq(newBalance - previousBalance, expectedTokens); + } + + function testWithdrawDelegation_RevertWhen_NotThawing( + uint256 delegationAmount + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + vm.expectRevert(expectedError); + _withdrawDelegated(); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/operator/operator.t.sol b/packages/horizon/test/staking/operator/operator.t.sol new file mode 100644 index 000000000..6fffe0cf3 --- /dev/null +++ b/packages/horizon/test/staking/operator/operator.t.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingOperatorTest is HorizonStakingTest { + + function testOperator_SetOperator() public useIndexer { + staking.setOperator(users.operator, subgraphDataServiceAddress, true); + assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol new file mode 100644 index 000000000..3afb3a7b1 --- /dev/null +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingDeprovisionTest is HorizonStakingTest { + + function testDeprovision_Tokens( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { + skip(thawingPeriod + 1); + + _deprovision(amount); + uint256 idleStake = staking.getIdleStake(users.indexer); + assertEq(idleStake, amount); + } + + function testDeprovision_OperatorMovingTokens( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useOperator useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { + skip(thawingPeriod + 1); + + _deprovision(amount); + uint256 idleStake = staking.getIdleStake(users.indexer); + assertEq(idleStake, amount); + } + + function testDeprovision_RevertWhen_OperatorNotAuthorized( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { + vm.startPrank(users.operator); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingNotAuthorized(address,address,address)", + users.operator, + users.indexer, + subgraphDataServiceAddress + ); + vm.expectRevert(expectedError); + _deprovision(amount); + } + + function testDeprovision_RevertWhen_ZeroTokens( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); + vm.expectRevert(expectedError); + _deprovision(0); + } + + function testDeprovision_RevertWhen_NoThawingTokens( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + vm.expectRevert(expectedError); + _deprovision(amount); + } + + function testDeprovision_RevertWhen_StillThawing( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { + vm.assume(thawingPeriod > 0); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingStillThawing(uint256,uint256)", + block.timestamp, + block.timestamp + thawingPeriod + ); + vm.expectRevert(expectedError); + _deprovision(amount); + } + + function testDeprovision_RevertWhen_NotEnoughThawedTokens( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod, + uint256 deprovisionAmount + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + vm.assume(deprovisionAmount > amount); + skip(thawingPeriod + 1); + + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + vm.expectRevert(expectedError); + _deprovision(deprovisionAmount); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol new file mode 100644 index 000000000..ee9591205 --- /dev/null +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingProvisionTest is HorizonStakingTest { + + function testProvision_Create( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionTokens, amount); + } + + function testProvision_RevertWhen_InsufficientTokens(uint256 amount) public useIndexer useStake(1000 ether) { + vm.assume(amount < MIN_PROVISION_SIZE); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientTokens(uint256,uint256)", MIN_PROVISION_SIZE, amount); + vm.expectRevert(expectedError); + staking.provision(users.indexer, subgraphDataServiceAddress, amount, 0, 0); + } + + function testProvision_RevertWhen_MaxVerifierCutTooHigh( + uint256 amount, + uint32 maxVerifierCut + ) public useIndexer useStake(amount) { + vm.assume(amount > MIN_PROVISION_SIZE); + vm.assume(maxVerifierCut > MAX_MAX_VERIFIER_CUT); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingMaxVerifierCutExceeded(uint32,uint32)", MAX_MAX_VERIFIER_CUT, maxVerifierCut); + vm.expectRevert(expectedError); + staking.provision(users.indexer, subgraphDataServiceAddress, amount, maxVerifierCut, 0); + } + + function testProvision_RevertWhen_ThawingPeriodTooHigh( + uint256 amount, + uint64 thawingPeriod + ) public useIndexer useStake(amount) { + vm.assume(amount > MIN_PROVISION_SIZE); + vm.assume(thawingPeriod > MAX_THAWING_PERIOD); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingMaxThawingPeriodExceeded(uint64,uint64)", MAX_THAWING_PERIOD, thawingPeriod); + vm.expectRevert(expectedError); + staking.provision(users.indexer, subgraphDataServiceAddress, amount, 0, thawingPeriod); + } + + function testProvision_RevertWhen_ThereIsNoIdleStake( + uint256 amount, + uint256 provisionTokens + ) public useIndexer useStake(amount) { + vm.assume(amount > MIN_PROVISION_SIZE); + vm.assume(provisionTokens > amount); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientCapacity()"); + vm.expectRevert(expectedError); + staking.provision(users.indexer, subgraphDataServiceAddress, provisionTokens, 0, 0); + } + + function testProvision_OperatorAddTokensToProvision( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod, + uint256 tokensToAdd + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + tokensToAdd = bound(tokensToAdd, 1, type(uint256).max - amount); + // Set operator + staking.setOperator(users.operator, subgraphDataServiceAddress, true); + + // Add more tokens to the provision + vm.startPrank(users.operator); + _stakeTo(users.indexer, tokensToAdd); + staking.addToProvision(users.indexer, subgraphDataServiceAddress, tokensToAdd); + + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionTokens, amount + tokensToAdd); + } + + function testProvision_RevertWhen_OperatorNotAuthorized( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + vm.startPrank(users.operator); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingNotAuthorized(address,address,address)", + users.operator, + users.indexer, + subgraphDataServiceAddress + ); + vm.expectRevert(expectedError); + staking.provision(users.indexer, subgraphDataServiceAddress, amount, maxVerifierCut, thawingPeriod); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol new file mode 100644 index 000000000..2c10e9060 --- /dev/null +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -0,0 +1,131 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingReprovisionTest is HorizonStakingTest { + + address private newDataService = makeAddr("newDataService"); + + function _reprovision(uint256 amount) private { + staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, amount); + } + + function testReprovision_MovingTokens( + uint64 thawingPeriod, + uint256 provisionAmount + ) + public + useIndexer + useProvision(provisionAmount, 0, thawingPeriod) + useThawRequest(provisionAmount) + { + skip(thawingPeriod + 1); + + _createProvision(newDataService, MIN_PROVISION_SIZE, 0, thawingPeriod); + _reprovision(provisionAmount); + uint256 idleStake = staking.getIdleStake(users.indexer); + assertEq(idleStake, 0 ether); + + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, newDataService); + assertEq(provisionTokens, provisionAmount + MIN_PROVISION_SIZE); + } + + function testReprovision_OperatorMovingTokens( + uint64 thawingPeriod, + uint256 provisionAmount + ) + public + useOperator + useProvision(provisionAmount, 0, thawingPeriod) + useThawRequest(provisionAmount) + { + skip(thawingPeriod + 1); + + // Switch to indexer to set operator for new data service + vm.startPrank(users.indexer); + staking.setOperator(users.operator, newDataService, true); + + // Switch back to operator + vm.startPrank(users.operator); + _createProvision(newDataService, MIN_PROVISION_SIZE, 0, thawingPeriod); + _reprovision(provisionAmount); + uint256 idleStake = staking.getIdleStake(users.indexer); + assertEq(idleStake, 0 ether); + + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, newDataService); + assertEq(provisionTokens, provisionAmount + MIN_PROVISION_SIZE); + } + + function testReprovision_RevertWhen_OperatorNotAuthorizedForNewDataService( + uint256 provisionAmount + ) + public + useOperator + useProvision(provisionAmount, 0, 0) + useThawRequest(provisionAmount) + { + // Switch to indexer to create new provision + vm.startPrank(users.indexer); + _createProvision(newDataService, MIN_PROVISION_SIZE, 0, 0); + + // Switch back to operator + vm.startPrank(users.operator); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingNotAuthorized(address,address,address)", + users.operator, + users.indexer, + newDataService + ); + vm.expectRevert(expectedError); + _reprovision(provisionAmount); + } + + function testReprovision_RevertWhen_NoThawingTokens( + uint256 amount + ) public useIndexer useProvision(amount, 0, 0) { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + vm.expectRevert(expectedError); + _reprovision(amount); + } + + function testReprovision_RevertWhen_StillThawing( + uint64 thawingPeriod, + uint256 provisionAmount + ) + public + useIndexer + useProvision(provisionAmount, 0, thawingPeriod) + useThawRequest(provisionAmount) + { + vm.assume(thawingPeriod > 0); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingStillThawing(uint256,uint256)", + block.timestamp, + block.timestamp + thawingPeriod + ); + vm.expectRevert(expectedError); + _reprovision(provisionAmount); + } + + function testReprovision_RevertWhen_NotEnoughThawedTokens( + uint64 thawingPeriod, + uint256 provisionAmount, + uint256 newProvisionAmount + ) + public + useIndexer + useProvision(provisionAmount, 0, thawingPeriod) + useThawRequest(provisionAmount) + { + newProvisionAmount = bound(newProvisionAmount, provisionAmount + 1, type(uint256).max - provisionAmount); + skip(thawingPeriod + 1); + + _createProvision(newDataService, newProvisionAmount, 0, thawingPeriod); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + vm.expectRevert(expectedError); + _reprovision(newProvisionAmount); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol new file mode 100644 index 000000000..2b3c8c5b1 --- /dev/null +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingSlashTest is HorizonStakingTest { + + modifier useDelegationSlashingDisabled() { + address msgSender; + (, msgSender,) = vm.readCallers(); + vm.startPrank(users.governor); + staking.setDelegationSlashingEnabled(false); + vm.startPrank(msgSender); + _; + } + + function _slash(uint256 amount, uint256 verifierCutAmount) private { + staking.slash(users.indexer, amount, verifierCutAmount, subgraphDataServiceAddress); + } + + function testSlash_Tokens( + uint256 amount, + uint32 maxVerifierCut, + uint256 slashAmount, + uint256 verifierCutAmount + ) public useIndexer useProvision(amount, maxVerifierCut, 0) { + verifierCutAmount = bound(verifierCutAmount, 0, maxVerifierCut); + + // TODO: when slashing for low amounts there's an arithmetic underflow + slashAmount = bound(slashAmount, MIN_PROVISION_SIZE, amount); + + vm.startPrank(subgraphDataServiceAddress); + _slash(slashAmount, verifierCutAmount); + + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionTokens, amount - slashAmount); + + uint256 verifierTokens = token.balanceOf(subgraphDataServiceAddress); + assertEq(verifierTokens, verifierCutAmount); + } + + // TODO: Should be re-enabled when slashin is fixed to count for delegated tokens + // function testSlash_DelegationDisabled_SlashingOverProvisionTokens( + // uint256 amount, + // uint256 slashAmount, + // uint256 verifierCutAmount, + // uint256 delegationAmount + // ) public useIndexer useProvision(amount, 100000, 0) useDelegationSlashingDisabled { + // vm.assume(slashAmount > amount); + // vm.assume(delegationAmount > 0); + // uint32 delegationRatio = 5; + + // vm.stopPrank(); + // vm.startPrank(users.delegator); + // _delegate(delegationAmount); + + // vm.startPrank(subgraphDataServiceAddress); + // _slash(slashAmount, verifierCutAmount); + + // uint256 provisionProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + // assertEq(provisionProviderTokens, 0 ether); + + // uint256 verifierTokens = token.balanceOf(address(subgraphDataServiceAddress)); + // assertEq(verifierTokens, verifierCutAmount); + + // uint256 delegatedTokens = staking.getTokensAvailable(users.indexer, subgraphDataServiceAddress, delegationRatio); + // assertEq(delegatedTokens, delegationAmount); + // } + + function testSlash_RevertWhen_NoProvision( + uint256 amount, + uint256 slashAmount + ) public useIndexer useStake(amount) { + // TODO: when slashing for low amounts there's an arithmetic underflow + slashAmount = bound(slashAmount, MIN_PROVISION_SIZE, amount); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInsufficientTokens(uint256,uint256)", + slashAmount, + 0 ether + ); + vm.expectRevert(expectedError); + vm.startPrank(subgraphDataServiceAddress); + _slash(slashAmount, 0); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/stake/stake.t.sol b/packages/horizon/test/staking/stake/stake.t.sol new file mode 100644 index 000000000..bcdec35c9 --- /dev/null +++ b/packages/horizon/test/staking/stake/stake.t.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingStakeTest is HorizonStakingTest { + + function testStake_Tokens(uint256 amount) public useIndexer useStake(amount) { + assertTrue(staking.getStake(address(users.indexer)) == amount); + } + + function testStake_RevertWhen_ZeroTokens() public useIndexer { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); + vm.expectRevert(expectedError); + staking.stake(0); + } + + function testStakeTo_Tokens(uint256 amount) public useOperator useStakeTo(users.indexer, amount) { + assertTrue(staking.getStake(address(users.indexer)) == amount); + } + + function testStakeTo_RevertWhen_ZeroTokens() public useOperator { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); + vm.expectRevert(expectedError); + staking.stakeTo(users.indexer, 0); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/stake/unstake.t.sol b/packages/horizon/test/staking/stake/unstake.t.sol new file mode 100644 index 000000000..6285ef9c0 --- /dev/null +++ b/packages/horizon/test/staking/stake/unstake.t.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingUnstakeTest is HorizonStakingTest { + + function testUnstake_Tokens( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) + public + useIndexer + useProvision(amount, maxVerifierCut, thawingPeriod) + useThawAndDeprovision(amount, thawingPeriod) + { + uint256 previousIndexerTokens = token.balanceOf(users.indexer); + staking.unstake(amount); + uint256 idleStake = staking.getIdleStake(users.indexer); + assertEq(idleStake, 0 ether); + + uint256 newIndexerBalance = token.balanceOf(users.indexer); + assertEq(newIndexerBalance - previousIndexerTokens, amount); + } + + function testUnstake_RevertWhen_ZeroTokens( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) + public + useIndexer + useProvision(amount, maxVerifierCut, thawingPeriod) + useThawAndDeprovision(amount, thawingPeriod) + { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); + vm.expectRevert(expectedError); + staking.unstake(0); + } + + function testUnstake_RevertWhen_NoIdleStake( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) + public + useIndexer + useProvision(amount, maxVerifierCut, thawingPeriod) + { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientCapacity()"); + vm.expectRevert(expectedError); + staking.unstake(amount); + } + + function testUnstake_RevertWhen_NotDeprovision( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) + public + useIndexer + useProvision(amount, maxVerifierCut, thawingPeriod) + useThawRequest(amount) + { + skip(thawingPeriod + 1); + + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientCapacity()"); + vm.expectRevert(expectedError); + staking.unstake(amount); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/thaw/thaw.t.sol new file mode 100644 index 000000000..e139f219d --- /dev/null +++ b/packages/horizon/test/staking/thaw/thaw.t.sol @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { IHorizonStakingTypes } from "../../../contracts/interfaces/IHorizonStakingTypes.sol"; +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingThawTest is HorizonStakingTest { + + function testThaw_Tokens( + uint256 amount, + uint64 thawingPeriod, + uint256 thawAmount + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + thawAmount = bound(thawAmount, 1, amount); + bytes32 expectedThawRequestId = keccak256( + abi.encodePacked(users.indexer, subgraphDataServiceAddress, uint256(0)) + ); + bytes32 thawRequestId = _createThawRequest(thawAmount); + assertEq(thawRequestId, expectedThawRequestId); + + ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + assertEq(thawRequest.shares, thawAmount); + assertEq(thawRequest.thawingUntil, block.timestamp + thawingPeriod); + } + + function testThaw_MultipleRequests( + uint256 amount, + uint64 thawingPeriod, + uint256 thawAmount, + uint256 thawAmount2 + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + thawAmount = bound(thawAmount, 1, amount - 1); + thawAmount2 = bound(thawAmount2, 1, amount - thawAmount); + bytes32 thawRequestId = _createThawRequest(thawAmount); + bytes32 thawRequestId2 = _createThawRequest(thawAmount2); + + ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + assertEq(thawRequest.shares, thawAmount); + assertEq(thawRequest.thawingUntil, block.timestamp + thawingPeriod); + assertEq(thawRequest.next, thawRequestId2); + + ThawRequest memory thawRequest2 = staking.getThawRequest(thawRequestId2); + uint256 totalThawAmount = thawAmount + thawAmount2; + assertEq(thawRequest2.shares, (thawRequest.shares * thawAmount2) / totalThawAmount); + assertEq(thawRequest2.thawingUntil, block.timestamp + thawingPeriod); + } + + function testThaw_OperatorCanStartThawing( + uint256 amount, + uint64 thawingPeriod + ) public useOperator useProvision(amount, 0, thawingPeriod) { + bytes32 thawRequestId = _createThawRequest(amount); + + ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + assertEq(thawRequest.shares, amount); + assertEq(thawRequest.thawingUntil, block.timestamp + thawingPeriod); + } + + function testThaw_RevertWhen_OperatorNotAuthorized( + uint256 amount, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + vm.startPrank(users.operator); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingNotAuthorized(address,address,address)", + users.operator, + users.indexer, + subgraphDataServiceAddress + ); + vm.expectRevert(expectedError); + _createThawRequest(amount); + } + + function testThaw_RevertWhen_InsufficientTokensAvailable( + uint256 amount, + uint64 thawingPeriod, + uint256 thawAmount + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + vm.assume(thawAmount > amount); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInsufficientTokens(uint256,uint256)", + thawAmount, + amount + ); + vm.expectRevert(expectedError); + _createThawRequest(thawAmount); + } + + function testThaw_RevertWhen_OverMaxThawRequests( + uint256 amount, + uint64 thawingPeriod, + uint256 thawAmount + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + // vm.assume(thawAmount > 0); + // vm.assume(amount / (MAX_THAW_REQUESTS + 1) > thawAmount); + thawAmount = bound(thawAmount, 1, amount / (MAX_THAW_REQUESTS + 1)); + + for (uint256 i = 0; i < 100; i++) { + _createThawRequest(thawAmount); + } + + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingTooManyThawRequests()"); + vm.expectRevert(expectedError); + _createThawRequest(thawAmount); + } + + function testThaw_RevertWhen_ThawingZeroTokens( + uint256 amount, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + uint256 thawAmount = 0 ether; + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); + vm.expectRevert(expectedError); + _createThawRequest(thawAmount); + } +} \ No newline at end of file diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index bcf3295d8..00c253bbd 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -9,4 +9,10 @@ abstract contract Constants { uint256 internal constant revokeCollectorThawingPeriod = 60; // GraphPayments parameters uint256 internal constant protocolPaymentCut = 10000; + // Staking constants + uint256 internal constant MAX_THAW_REQUESTS = 100; + uint256 internal constant MIN_PROVISION_SIZE = 1e18; + uint32 internal constant MAX_MAX_VERIFIER_CUT = 1000000; // 100% in parts per million + uint64 internal constant MAX_THAWING_PERIOD = 28 days; + uint256 internal constant MIN_DELEGATION = 1e18; } \ No newline at end of file diff --git a/packages/horizon/test/utils/Users.sol b/packages/horizon/test/utils/Users.sol index e86bf8faf..3329d69da 100644 --- a/packages/horizon/test/utils/Users.sol +++ b/packages/horizon/test/utils/Users.sol @@ -8,4 +8,5 @@ struct Users { address operator; address gateway; address verifier; + address delegator; } \ No newline at end of file From ed3fa1e891034aae837e26f73b6babb1c6e87bdf Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Sat, 25 May 2024 12:34:28 -0300 Subject: [PATCH 074/343] chore: update solidity version --- packages/horizon/test/payments/GraphPayments.t.sol | 6 +----- packages/horizon/test/staking/HorizonStaking.t.sol | 4 ++-- packages/horizon/test/staking/delegation/delegate.t.sol | 2 +- packages/horizon/test/staking/delegation/undelegate.t.sol | 2 +- packages/horizon/test/staking/delegation/withdraw.t.sol | 2 +- packages/horizon/test/staking/operator/operator.t.sol | 2 +- packages/horizon/test/staking/provision/deprovision.t.sol | 2 +- packages/horizon/test/staking/provision/provision.t.sol | 2 +- packages/horizon/test/staking/provision/reprovision.t.sol | 2 +- packages/horizon/test/staking/slash/slash.t.sol | 2 +- packages/horizon/test/staking/stake/stake.t.sol | 2 +- packages/horizon/test/staking/stake/unstake.t.sol | 2 +- packages/horizon/test/staking/thaw/thaw.t.sol | 4 ++-- 13 files changed, 15 insertions(+), 19 deletions(-) diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 4449bbdcc..70806f42f 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -42,11 +42,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { function testCollect_RevertWhen_InsufficientAmount( uint256 amount, uint256 tokensDataService -<<<<<<< HEAD - ) public useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { -======= - ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(0, delegationFeeCut) { ->>>>>>> 9fa803b7 (chore: staking tests refactor) + ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { vm.assume(tokensDataService <= 10_000_000_000 ether); vm.assume(tokensDataService > amount); diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index 431ce0296..b2c256a2d 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { IHorizonStakingTypes } from "../../contracts/interfaces/IHorizonStakingTypes.sol"; +import { IHorizonStakingTypes } from "../../contracts/interfaces/internal/IHorizonStakingTypes.sol"; import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 279c2f7f7..603020ef7 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 73c7a913e..7d31112ff 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 593a2dae5..255124cb9 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/operator/operator.t.sol b/packages/horizon/test/staking/operator/operator.t.sol index 6fffe0cf3..f9f6e1692 100644 --- a/packages/horizon/test/staking/operator/operator.t.sol +++ b/packages/horizon/test/staking/operator/operator.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol index 3afb3a7b1..afaa11a5b 100644 --- a/packages/horizon/test/staking/provision/deprovision.t.sol +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol index ee9591205..3d9974a9e 100644 --- a/packages/horizon/test/staking/provision/provision.t.sol +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 2c10e9060..4198eaea4 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 2b3c8c5b1..2306e93f7 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/stake/stake.t.sol b/packages/horizon/test/staking/stake/stake.t.sol index bcdec35c9..048d6b4a7 100644 --- a/packages/horizon/test/staking/stake/stake.t.sol +++ b/packages/horizon/test/staking/stake/stake.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/stake/unstake.t.sol b/packages/horizon/test/staking/stake/unstake.t.sol index 6285ef9c0..8acd695fe 100644 --- a/packages/horizon/test/staking/stake/unstake.t.sol +++ b/packages/horizon/test/staking/stake/unstake.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/thaw/thaw.t.sol index e139f219d..22fbb9fe1 100644 --- a/packages/horizon/test/staking/thaw/thaw.t.sol +++ b/packages/horizon/test/staking/thaw/thaw.t.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { IHorizonStakingTypes } from "../../../contracts/interfaces/IHorizonStakingTypes.sol"; +import { IHorizonStakingTypes } from "../../../contracts/interfaces/internal/IHorizonStakingTypes.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingThawTest is HorizonStakingTest { From b05d0649cf80d0d5efef729105b54ca25e00bfeb Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Mon, 27 May 2024 11:04:48 -0300 Subject: [PATCH 075/343] fix: failing tests --- .../contracts/staking/HorizonStaking.sol | 2 +- .../horizon/test/escrow/GraphEscrow.t.sol | 4 +--- packages/horizon/test/escrow/collect.t.sol | 14 ++++++++----- packages/horizon/test/escrow/collector.t.sol | 8 ++++---- packages/horizon/test/escrow/thaw.t.sol | 4 ++-- packages/horizon/test/escrow/withdraw.t.sol | 6 ++---- .../test/staking/delegation/undelegate.t.sol | 16 +++++++++------ .../test/staking/delegation/withdraw.t.sol | 2 +- .../test/staking/provision/deprovision.t.sol | 7 +++---- .../test/staking/provision/provision.t.sol | 20 +++++++++++++++---- .../test/staking/provision/reprovision.t.sol | 7 +++---- .../horizon/test/staking/slash/slash.t.sol | 4 ++-- packages/horizon/test/staking/thaw/thaw.t.sol | 6 +++--- 13 files changed, 57 insertions(+), 43 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 95174f626..9880a352f 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -525,7 +525,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } function setMaxThawingPeriod(uint64 maxThawingPeriod) external override onlyGovernor { - maxThawingPeriod = _maxThawingPeriod; + _maxThawingPeriod = maxThawingPeriod; emit MaxThawingPeriodSet(_maxThawingPeriod); } diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index 70c96466f..5d0e01954 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -14,13 +14,11 @@ contract GraphEscrowTest is HorizonStakingSharedTest { } modifier approveEscrow(uint256 tokens) { - changePrank(users.gateway); _approveEscrow(tokens); _; } modifier useDeposit(uint256 tokens) { - changePrank(users.gateway); vm.assume(tokens > 0); vm.assume(tokens <= 10_000_000_000 ether); _depositTokens(tokens); @@ -28,7 +26,7 @@ contract GraphEscrowTest is HorizonStakingSharedTest { } modifier useCollector(uint256 tokens) { - changePrank(users.gateway); + vm.assume(tokens > 0); escrow.approveCollector(users.verifier, tokens); _; } diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 04d71252d..5a9a71fa1 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -33,7 +33,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { function testCollect_RevertWhen_CollectorNotAuthorized(uint256 amount) public { vm.startPrank(users.verifier); uint256 dataServiceCut = 30000; // 3% - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowCollectorNotAuthorized(address,address)", users.gateway, users.verifier); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowCollectorNotAuthorized(address,address)", users.gateway, users.verifier); vm.expectRevert(expectedError); escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, dataServiceCut); vm.stopPrank(); @@ -45,8 +45,12 @@ contract GraphEscrowCollectTest is GraphEscrowTest { ) public useGateway useCollector(insufficientAmount) useDeposit(amount) { vm.assume(insufficientAmount < amount); - changePrank(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAllowance(uint256,uint256)", insufficientAmount, amount); + vm.startPrank(users.verifier); + bytes memory expectedError = abi.encodeWithSignature( + "PaymentsEscrowInsufficientAllowance(uint256,uint256)", + insufficientAmount, + amount + ); vm.expectRevert(expectedError); escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); } @@ -57,8 +61,8 @@ contract GraphEscrowCollectTest is GraphEscrowTest { ) public useGateway useCollector(amount) useDeposit(insufficientAmount) { vm.assume(insufficientAmount < amount); - changePrank(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientBalance(uint256,uint256)", insufficientAmount, amount); + vm.startPrank(users.verifier); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowInsufficientBalance(uint256,uint256)", insufficientAmount, amount); vm.expectRevert(expectedError); escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); vm.stopPrank(); diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index f90eff6dc..83d7fb42a 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -20,7 +20,7 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { uint256 smallerAmount ) public useGateway useCollector(amount) { vm.assume(smallerAmount < amount); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientAllowance(uint256,uint256)", amount, smallerAmount); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowInconsistentAllowance(uint256,uint256)", amount, smallerAmount); vm.expectRevert(expectedError); escrow.approveCollector(users.verifier, smallerAmount); } @@ -52,7 +52,7 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { } function testCollector_RevertWhen_CancelThawIsNotThawing(uint256 amount) public useGateway useCollector(amount) { - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowNotThawing()"); vm.expectRevert(expectedError); escrow.cancelThawCollector(users.verifier); vm.stopPrank(); @@ -70,14 +70,14 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { } function testCollector_RevertWhen_RevokeIsNotThawing(uint256 amount) public useGateway useCollector(amount) { - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowNotThawing()"); vm.expectRevert(expectedError); escrow.revokeCollector(users.verifier); } function testCollector_RevertWhen_RevokeIsStillThawing(uint256 amount) public useGateway useCollector(amount) { escrow.thawCollector(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + revokeCollectorThawingPeriod); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + revokeCollectorThawingPeriod); vm.expectRevert(expectedError); escrow.revokeCollector(users.verifier); } diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index bf689486c..110d262e3 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -18,7 +18,7 @@ contract GraphEscrowThawTest is GraphEscrowTest { function testThaw_RevertWhen_InsufficientThawAmount( uint256 amount ) public useGateway useDeposit(amount) { - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientTokensThawing()"); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowInsufficientTokensThawing()"); vm.expectRevert(expectedError); escrow.thaw(users.indexer, 0); } @@ -27,7 +27,7 @@ contract GraphEscrowThawTest is GraphEscrowTest { uint256 amount ) public useGateway useDeposit(amount) { uint256 overAmount = amount + 1; - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowInsufficientBalance(uint256,uint256)", amount, overAmount); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowInsufficientBalance(uint256,uint256)", amount, overAmount); vm.expectRevert(expectedError); escrow.thaw(users.indexer, overAmount); } diff --git a/packages/horizon/test/escrow/withdraw.t.sol b/packages/horizon/test/escrow/withdraw.t.sol index 15d1d94ed..a541c818b 100644 --- a/packages/horizon/test/escrow/withdraw.t.sol +++ b/packages/horizon/test/escrow/withdraw.t.sol @@ -30,19 +30,17 @@ contract GraphEscrowWithdrawTest is GraphEscrowTest { } function testWithdraw_RevertWhen_NotThawing(uint256 amount) public useGateway useDeposit(amount) { - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowNotThawing()"); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowNotThawing()"); vm.expectRevert(expectedError); escrow.withdraw(users.indexer); - vm.stopPrank(); } function testWithdraw_RevertWhen_StillThawing( uint256 amount, uint256 thawAmount ) public useGateway depositAndThawTokens(amount, thawAmount) { - bytes memory expectedError = abi.encodeWithSignature("GraphEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + withdrawEscrowThawingPeriod); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + withdrawEscrowThawingPeriod); vm.expectRevert(expectedError); escrow.withdraw(users.indexer); - vm.stopPrank(); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 7d31112ff..e3b355c30 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -30,7 +30,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { // TODO: maybe create a changePrank vm.stopPrank(); vm.startPrank(users.delegator); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroShares()"); vm.expectRevert(expectedError); _undelegate(0); } @@ -47,9 +47,9 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { vm.assume(overDelegationShares > delegation.shares); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInsufficientTokens(uint256,uint256)", - overDelegationShares, - delegation.shares + "HorizonStakingInvalidSharesAmount(uint256,uint256)", + delegation.shares, + overDelegationShares ); vm.expectRevert(expectedError); _undelegate(overDelegationShares); @@ -69,8 +69,12 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { vm.startPrank(users.delegator); uint256 minShares = delegationAmount - MIN_DELEGATION + 1; withdrawShares = bound(withdrawShares, minShares, delegationAmount - 1); - - vm.expectRevert("!minimum-delegation"); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInsufficientTokens(uint256,uint256)", + delegationAmount - withdrawShares, + MIN_DELEGATION + ); + vm.expectRevert(expectedError); _undelegate(withdrawShares); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 255124cb9..2db1a4237 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -65,7 +65,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); _withdrawDelegated(); } diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol index afaa11a5b..ba8584d17 100644 --- a/packages/horizon/test/staking/provision/deprovision.t.sol +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -62,7 +62,7 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { uint32 maxVerifierCut, uint64 thawingPeriod ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCannotFulfillThawRequest()"); vm.expectRevert(expectedError); _deprovision(amount); } @@ -74,8 +74,7 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { vm.assume(thawingPeriod > 0); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingStillThawing(uint256,uint256)", - block.timestamp, + "HorizonStakingStillThawing(uint256)", block.timestamp + thawingPeriod ); vm.expectRevert(expectedError); @@ -91,7 +90,7 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { vm.assume(deprovisionAmount > amount); skip(thawingPeriod + 1); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCannotFulfillThawRequest()"); vm.expectRevert(expectedError); _deprovision(deprovisionAmount); } diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol index 3d9974a9e..f92f85be1 100644 --- a/packages/horizon/test/staking/provision/provision.t.sol +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -17,8 +17,12 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { } function testProvision_RevertWhen_InsufficientTokens(uint256 amount) public useIndexer useStake(1000 ether) { - vm.assume(amount < MIN_PROVISION_SIZE); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientTokens(uint256,uint256)", MIN_PROVISION_SIZE, amount); + amount = bound(amount, 0, MIN_PROVISION_SIZE - 1); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInvalidTokens(uint256,uint256)", + amount, + MIN_PROVISION_SIZE + ); vm.expectRevert(expectedError); staking.provision(users.indexer, subgraphDataServiceAddress, amount, 0, 0); } @@ -29,7 +33,11 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { ) public useIndexer useStake(amount) { vm.assume(amount > MIN_PROVISION_SIZE); vm.assume(maxVerifierCut > MAX_MAX_VERIFIER_CUT); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingMaxVerifierCutExceeded(uint32,uint32)", MAX_MAX_VERIFIER_CUT, maxVerifierCut); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInvalidMaxVerifierCut(uint32,uint32)", + maxVerifierCut, + MAX_MAX_VERIFIER_CUT + ); vm.expectRevert(expectedError); staking.provision(users.indexer, subgraphDataServiceAddress, amount, maxVerifierCut, 0); } @@ -40,7 +48,11 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { ) public useIndexer useStake(amount) { vm.assume(amount > MIN_PROVISION_SIZE); vm.assume(thawingPeriod > MAX_THAWING_PERIOD); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingMaxThawingPeriodExceeded(uint64,uint64)", MAX_THAWING_PERIOD, thawingPeriod); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInvalidThawingPeriod(uint64,uint64)", + thawingPeriod, + MAX_THAWING_PERIOD + ); vm.expectRevert(expectedError); staking.provision(users.indexer, subgraphDataServiceAddress, amount, 0, thawingPeriod); } diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 4198eaea4..8a7d17d6a 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -86,7 +86,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { function testReprovision_RevertWhen_NoThawingTokens( uint256 amount ) public useIndexer useProvision(amount, 0, 0) { - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCannotFulfillThawRequest()"); vm.expectRevert(expectedError); _reprovision(amount); } @@ -102,8 +102,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { { vm.assume(thawingPeriod > 0); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingStillThawing(uint256,uint256)", - block.timestamp, + "HorizonStakingStillThawing(uint256)", block.timestamp + thawingPeriod ); vm.expectRevert(expectedError); @@ -124,7 +123,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { skip(thawingPeriod + 1); _createProvision(newDataService, newProvisionAmount, 0, thawingPeriod); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNotEnoughThawedTokens()"); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCannotFulfillThawRequest()"); vm.expectRevert(expectedError); _reprovision(newProvisionAmount); } diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 2306e93f7..9a0951f23 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -77,8 +77,8 @@ contract HorizonStakingSlashTest is HorizonStakingTest { slashAmount = bound(slashAmount, MIN_PROVISION_SIZE, amount); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInsufficientTokens(uint256,uint256)", - slashAmount, - 0 ether + 0 ether, + slashAmount ); vm.expectRevert(expectedError); vm.startPrank(subgraphDataServiceAddress); diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/thaw/thaw.t.sol index 22fbb9fe1..3d2ce4b90 100644 --- a/packages/horizon/test/staking/thaw/thaw.t.sol +++ b/packages/horizon/test/staking/thaw/thaw.t.sol @@ -80,9 +80,9 @@ contract HorizonStakingThawTest is HorizonStakingTest { ) public useIndexer useProvision(amount, 0, thawingPeriod) { vm.assume(thawAmount > amount); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInsufficientTokens(uint256,uint256)", - thawAmount, - amount + "HorizonStakingInsufficientTokensAvailable(uint256,uint256)", + amount, + thawAmount ); vm.expectRevert(expectedError); _createThawRequest(thawAmount); From 5655a898512741d4c05c5da3ff37aa464dca0d02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 27 May 2024 12:44:51 -0300 Subject: [PATCH 076/343] chore: disable optimizer for tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/foundry.toml | 9 ++++++++- packages/horizon/package.json | 2 +- packages/subgraph-service/foundry.toml | 9 ++++++++- packages/subgraph-service/package.json | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/horizon/foundry.toml b/packages/horizon/foundry.toml index c9e7f0534..a1826d45c 100644 --- a/packages/horizon/foundry.toml +++ b/packages/horizon/foundry.toml @@ -7,4 +7,11 @@ cache_path = 'cache_forge' fs_permissions = [{ access = "read", path = "./"}] optimizer = true optimizer-runs = 200 -via_ir = true \ No newline at end of file +via_ir = true + +[profile.lite] +optimizer = false +optimizer-runs = 1 + +[profile.lite.optimizer_details.yulDetails] +optimizerSteps = ':' \ No newline at end of file diff --git a/packages/horizon/package.json b/packages/horizon/package.json index 00c266f49..2eee03723 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -9,7 +9,7 @@ "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", - "build": "forge build && hardhat compile", + "build": "FOUNDRY_PROFILE=lite forge build && hardhat compile", "test": "forge test -vvv && hardhat test" }, "devDependencies": { diff --git a/packages/subgraph-service/foundry.toml b/packages/subgraph-service/foundry.toml index 4c96e433b..d4c30311f 100644 --- a/packages/subgraph-service/foundry.toml +++ b/packages/subgraph-service/foundry.toml @@ -6,4 +6,11 @@ test = 'test' cache_path = 'cache_forge' optimizer = true optimizer-runs = 200 -via_ir = true \ No newline at end of file +via_ir = true + +[profile.lite] +optimizer = false +optimizer-runs = 1 + +[profile.lite.optimizer_details.yulDetails] +optimizerSteps = ':' \ No newline at end of file diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 8df36e35f..1cfe655b2 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -9,7 +9,7 @@ "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", - "build": "forge build && hardhat compile", + "build": "FOUNDRY_PROFILE=lite forge build && hardhat compile", "test": "forge test -vvv && hardhat test" }, "devDependencies": { From 6a48e4da5f5a42e5d1c75d84e520c5e106de5aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 27 May 2024 13:36:44 -0300 Subject: [PATCH 077/343] fix: foundry profile usage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/package.json | 4 ++-- packages/subgraph-service/package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/horizon/package.json b/packages/horizon/package.json index 2eee03723..1118b1b19 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -9,8 +9,8 @@ "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", - "build": "FOUNDRY_PROFILE=lite forge build && hardhat compile", - "test": "forge test -vvv && hardhat test" + "build": "forge build && hardhat compile", + "test": "FOUNDRY_PROFILE=lite forge test -vvv && hardhat test" }, "devDependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 1cfe655b2..6e963c603 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -9,8 +9,8 @@ "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", - "build": "FOUNDRY_PROFILE=lite forge build && hardhat compile", - "test": "forge test -vvv && hardhat test" + "build": "forge build && hardhat compile", + "test": "FOUNDRY_PROFILE=lite forge test -vvv && hardhat test" }, "devDependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", From 6e3ab78b021e3a566d6c5def8def8a9132735925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 27 May 2024 14:29:03 -0300 Subject: [PATCH 078/343] chore: remove duplicate code from staking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/staking/HorizonStaking.sol | 38 +------------------ 1 file changed, 1 insertion(+), 37 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 9880a352f..0c5af9853 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -335,43 +335,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address newServiceProvider, uint256 minSharesForNewProvider ) external override notPaused { - DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); - Delegation storage delegation = pool.delegators[msg.sender]; - uint256 thawedTokens = 0; - - uint256 sharesThawing = pool.sharesThawing; - uint256 tokensThawing = pool.tokensThawing; - require(delegation.nThawRequests > 0, HorizonStakingNothingThawing()); - bytes32 thawRequestId = delegation.firstThawRequestId; - while (thawRequestId != bytes32(0)) { - ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - if (thawRequest.thawingUntil <= block.timestamp) { - uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; - tokensThawing = tokensThawing - tokens; - sharesThawing = sharesThawing - thawRequest.shares; - thawedTokens = thawedTokens + tokens; - delete _thawRequests[thawRequestId]; - delegation.firstThawRequestId = thawRequest.next; - delegation.nThawRequests -= 1; - if (delegation.nThawRequests == 0) { - delegation.lastThawRequestId = bytes32(0); - } - } else { - break; - } - thawRequestId = thawRequest.next; - } - - pool.tokens = pool.tokens - thawedTokens; - pool.sharesThawing = sharesThawing; - pool.tokensThawing = tokensThawing; - - if (newServiceProvider != address(0)) { - _delegate(newServiceProvider, verifier, thawedTokens, minSharesForNewProvider); - } else { - _graphToken().pushTokens(msg.sender, thawedTokens); - } - emit DelegatedTokensWithdrawn(serviceProvider, verifier, msg.sender, thawedTokens); + _withdrawDelegated(serviceProvider, verifier, newServiceProvider, minSharesForNewProvider); } function setDelegationFeeCut( From a9277b479e8726b37014d104913b1853187befb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 28 May 2024 11:17:51 -0300 Subject: [PATCH 079/343] feat: add linked list library (#975) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../extensions/DataServiceFees.sol | 89 ++++--- .../extensions/DataServiceFeesStorage.sol | 10 +- .../interfaces/IDataServiceFees.sol | 15 +- .../internal/IHorizonStakingBase.sol | 20 ++ .../internal/IHorizonStakingMain.sol | 38 +-- .../internal/IHorizonStakingTypes.sol | 11 - .../contracts/libraries/LinkedList.sol | 72 +++++ .../contracts/staking/HorizonStaking.sol | 250 +++++++----------- .../contracts/staking/HorizonStakingBase.sol | 97 ++++++- .../staking/HorizonStakingStorage.sol | 5 + packages/horizon/hardhat.config.ts | 2 +- 11 files changed, 367 insertions(+), 242 deletions(-) create mode 100644 packages/horizon/contracts/libraries/LinkedList.sol diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index cf8787674..b416bcf69 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -5,46 +5,19 @@ import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; import { ProvisionTracker } from "../libraries/ProvisionTracker.sol"; +import { LinkedList } from "../../libraries/LinkedList.sol"; import { DataService } from "../DataService.sol"; import { DataServiceFeesV1Storage } from "./DataServiceFeesStorage.sol"; abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees { using ProvisionTracker for mapping(address => uint256); + using LinkedList for LinkedList.List; function releaseStake(IGraphPayments.PaymentTypes feeType, uint256 n) external virtual { _releaseStake(feeType, msg.sender, n); } - /// @notice Release expired stake claims for a service provider - /// @param _n The number of stake claims to release, or 0 to release all - function _releaseStake(IGraphPayments.PaymentTypes _feeType, address _serviceProvider, uint256 _n) internal { - bool releaseAll = _n == 0; - - // check the stake claims list - // TODO: evaluate replacing with OZ DoubleEndedQueue - bytes32 head = claimsLists[_feeType][_serviceProvider].head; - while (head != bytes32(0) && (releaseAll || _n > 0)) { - StakeClaim memory claim = _getStakeClaim(head); - - if (block.timestamp >= claim.releaseAt) { - // Release stake - feesProvisionTracker[_feeType].release(_serviceProvider, claim.tokens); - - // Update list and refresh pointer - StakeClaimsList storage claimsList = claimsLists[_feeType][_serviceProvider]; - claimsList.head = claim.nextClaim; - delete claims[head]; - head = claimsList.head; - if (!releaseAll) _n--; - - emit StakeClaimReleased(_serviceProvider, claimsList.head, claim.tokens, claim.releaseAt); - } else { - break; - } - } - } - function _lockStake( IGraphPayments.PaymentTypes _feeType, address _serviceProvider, @@ -53,7 +26,9 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat ) internal { feesProvisionTracker[_feeType].lock(_graphStaking(), _serviceProvider, _tokens, maximumDelegationRatio); - StakeClaimsList storage claimsList = claimsLists[_feeType][_serviceProvider]; + LinkedList.List storage claimsList = claimsLists[_feeType][_serviceProvider]; + + // Save item and add to list bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce); claims[claimId] = StakeClaim({ serviceProvider: _serviceProvider, @@ -62,12 +37,52 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat releaseAt: _unlockTimestamp, nextClaim: bytes32(0) }); + if (claimsList.count != 0) claims[claimsList.tail].nextClaim = claimId; + claimsList.add(claimId); + + emit StakeClaimLocked(_serviceProvider, _feeType, claimId, _tokens, _unlockTimestamp); + } + + /// @notice Release expired stake claims for a service provider + /// @param _n The number of stake claims to release, or 0 to release all + function _releaseStake(IGraphPayments.PaymentTypes _feeType, address _serviceProvider, uint256 _n) internal { + LinkedList.List storage claimsList = claimsLists[_feeType][_serviceProvider]; + (uint256 claimsReleased, bytes memory data) = claimsList.traverse( + _getNextStakeClaim, + _processStakeClaim, + _deleteStakeClaim, + abi.encode(0), + _n + ); + + emit StakeClaimsReleased(_serviceProvider, _feeType, claimsReleased, abi.decode(data, (uint256))); + } + + function _processStakeClaim(bytes32 _claimId, bytes memory acc) private returns (bool, bool, bytes memory) { + StakeClaim memory claim = _getStakeClaim(_claimId); + + // early exit + if (claim.releaseAt > block.timestamp) { + return (true, false, LinkedList.NULL_BYTES); + } + + // decode + (IGraphPayments.PaymentTypes _feeType, address _serviceProvider) = abi.decode( + acc, + (IGraphPayments.PaymentTypes, address) + ); - claims[claimsList.tail].nextClaim = claimId; - claimsList.tail = claimId; - claimsList.nonce += 1; + // process + feesProvisionTracker[_feeType].release(_serviceProvider, claim.tokens); + emit StakeClaimReleased(_serviceProvider, _feeType, _claimId, claim.tokens, claim.releaseAt); - emit StakeClaimLocked(_serviceProvider, claimId, _tokens, _unlockTimestamp); + // encode + acc = abi.encode(abi.decode(acc, (uint256)) + claim.tokens); + return (false, true, acc); + } + + function _deleteStakeClaim(bytes32 _claimId) private { + delete claims[_claimId]; } function _getStakeClaim(bytes32 _claimId) private view returns (StakeClaim memory) { @@ -76,6 +91,12 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat return claim; } + function _getNextStakeClaim(bytes32 _claimId) private view returns (bytes32) { + StakeClaim memory claim = claims[_claimId]; + require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId)); + return claim.nextClaim; + } + function _buildStakeClaimId(address _serviceProvider, uint256 _nonce) private view returns (bytes32) { return keccak256(abi.encodePacked(address(this), _serviceProvider, _nonce)); } diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index 814d246a7..7e867c35e 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -4,15 +4,17 @@ pragma solidity 0.8.26; import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; -abstract contract DataServiceFeesV1Storage { - /// @notice List of all locked stake claims to be released to service providers - mapping(bytes32 claimId => IDataServiceFees.StakeClaim claim) public claims; +import { LinkedList } from "../../libraries/LinkedList.sol"; +abstract contract DataServiceFeesV1Storage { mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => uint256 tokens)) public feesProvisionTracker; + /// @notice List of all locked stake claims to be released to service providers + mapping(bytes32 claimId => IDataServiceFees.StakeClaim claim) public claims; + /// @notice Service providers registered in the data service - mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => IDataServiceFees.StakeClaimsList list)) + mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => LinkedList.List list)) public claimsLists; /// @dev Gap to allow adding variables in future upgrades diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index bbbab0d8b..9e39e62fd 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -5,12 +5,6 @@ import { IDataService } from "./IDataService.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; interface IDataServiceFees is IDataService { - struct StakeClaimsList { - bytes32 head; - bytes32 tail; - uint256 nonce; - } - /// A locked stake claim to be released to a service provider struct StakeClaim { address serviceProvider; @@ -25,16 +19,25 @@ interface IDataServiceFees is IDataService { event StakeClaimLocked( address indexed serviceProvider, + IGraphPayments.PaymentTypes indexed feeType, bytes32 indexed claimId, uint256 tokens, uint256 unlockTimestamp ); event StakeClaimReleased( address indexed serviceProvider, + IGraphPayments.PaymentTypes indexed feeType, bytes32 indexed claimId, uint256 tokens, uint256 releaseAt ); + event StakeClaimsReleased( + address indexed serviceProvider, + IGraphPayments.PaymentTypes indexed feeType, + uint256 claimsCount, + uint256 tokensReleased + ); + error DataServiceFeesClaimNotFound(bytes32 claimId); function releaseStake(IGraphPayments.PaymentTypes feeType, uint256 n) external; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index 0d367547f..76ad132aa 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -21,6 +21,26 @@ interface IHorizonStakingBase { */ event StakeDelegated(address indexed serviceProvider, address indexed delegator, uint256 tokens, uint256 shares); + event ThawRequestCreated( + address indexed serviceProvider, + address indexed verifier, + address indexed owner, + uint256 shares, + uint64 thawingUntil, + bytes32 thawRequestId + ); + event ThawRequestFulfilled(bytes32 indexed thawRequestId, uint256 tokens, uint256 shares, uint64 thawingUntil); + event ThawRequestsFulfilled( + address indexed serviceProvider, + address indexed verifier, + address indexed owner, + uint256 thawRequestsFulfilled, + uint256 tokens + ); + + error HorizonStakingNothingThawing(); + error HorizonStakingTooManyThawRequests(); + function getStake(address serviceProvider) external view returns (uint256); function getDelegatedTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 27f63b3c8..ced1957b9 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -32,26 +32,9 @@ interface IHorizonStakingMain is IHorizonStakingBase { */ event ProvisionIncreased(address indexed serviceProvider, address indexed verifier, uint256 tokens); - /** - * @dev Emitted when a thawing request is initiated by a service provider - */ - event ProvisionThawInitiated( - address indexed serviceProvider, - address indexed verifier, - uint256 tokens, - uint64 thawingUntil, - bytes32 indexed thawRequestId - ); + event ProvisionThawed(address indexed serviceProvider, address indexed verifier, uint256 tokens); - /** - * @dev Emitted when a service provider removes tokens from a provision after thawing - */ - event ProvisionThawFulfilled( - address indexed serviceProvider, - address indexed verifier, - uint256 tokens, - bytes32 indexed thawRequestId - ); + event TokensDeprovisioned(address indexed serviceProvider, address indexed verifier, uint256 tokens); event ProvisionSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens); @@ -131,11 +114,9 @@ interface IHorizonStakingMain is IHorizonStakingBase { error HorizonStakingInsufficientCapacity(); error HorizonStakingInsufficientCapacityForLegacyAllocations(); error HorizonStakingInsufficientTokensAvailable(uint256 tokensAvailable, uint256 tokensRequired); - error HorizonStakingTooManyThawRequests(); error HorizonStakingInsufficientTokens(uint256 available, uint256 tokensRequired); error HorizonStakingSlippageProtection(uint256 minExpectedShares, uint256 actualShares); error HorizonStakingVerifierNotAllowed(address verifier); - error HorizonStakingNothingThawing(); error HorizonStakingVerifierTokensTooHigh(uint256 tokensVerifier, uint256 maxVerifierTokens); error HorizonStakingNotEnoughDelegation(uint256 tokensAvailable, uint256 tokensRequired); error HorizonStakingStillThawing(uint256 until); @@ -182,16 +163,22 @@ interface IHorizonStakingMain is IHorizonStakingBase { ) external; // initiate a thawing to remove tokens from a provision - function thaw(address serviceProvider, address verifier, uint256 tokens) external returns (bytes32); + function thaw(address serviceProvider, address verifier, uint256 tokens) external; // add more tokens from idle stake to an existing provision function addToProvision(address serviceProvider, address verifier, uint256 tokens) external; // moves thawed stake from a provision back into the provider's available stake - function deprovision(address serviceProvider, address verifier, uint256 tokens) external; + function deprovision(address serviceProvider, address verifier, uint256 nThawRequests) external; // moves thawed stake from one provision into another provision - function reprovision(address serviceProvider, address oldVerifier, address newVerifier, uint256 tokens) external; + function reprovision( + address serviceProvider, + address oldVerifier, + address newVerifier, + uint256 nThawRequests, + uint256 tokens + ) external; // moves thawed stake back to the owner's account - stake is removed from the protocol function unstake(uint256 tokens) external; @@ -207,7 +194,8 @@ interface IHorizonStakingMain is IHorizonStakingBase { address serviceProvider, address verifier, address newServiceProvider, - uint256 minSharesForNewProvider + uint256 minSharesForNewProvider, + uint256 nThawRequests ) external; function slash( diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index d320dd643..13c64d37d 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -18,9 +18,6 @@ interface IHorizonStakingTypes { // time, in seconds, tokens must thaw before being withdrawn uint64 thawingPeriod; uint64 createdAt; - bytes32 firstThawRequestId; - bytes32 lastThawRequestId; - uint256 nThawRequests; // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed uint32 maxVerifierCutPending; // time, in seconds, tokens must thaw before being withdrawn @@ -32,8 +29,6 @@ interface IHorizonStakingTypes { uint256 tokensStaked; // tokens used in a provision uint256 tokensProvisioned; - // Next nonce to be used to generate thaw request IDs - uint256 nextThawRequestNonce; } struct DelegationPoolInternal { @@ -59,10 +54,6 @@ interface IHorizonStakingTypes { uint256 shares; // Shares owned by a delegator in the pool uint256 __DEPRECATED_tokensLocked; // Tokens locked for undelegation uint256 __DEPRECATED_tokensLockedUntil; // Epoch when locked tokens can be withdrawn - bytes32 firstThawRequestId; - bytes32 lastThawRequestId; - uint256 nThawRequests; - uint256 nextThawRequestNonce; } struct ThawRequest { @@ -86,7 +77,5 @@ interface IHorizonStakingTypes { uint256 __DEPRECATED_tokensLockedUntil; // tokens used in a provision uint256 tokensProvisioned; - // Next nonce to be used to generate thaw request IDs - uint256 nextThawRequestNonce; } } diff --git a/packages/horizon/contracts/libraries/LinkedList.sol b/packages/horizon/contracts/libraries/LinkedList.sol new file mode 100644 index 000000000..28ced852a --- /dev/null +++ b/packages/horizon/contracts/libraries/LinkedList.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.26; + +library LinkedList { + using LinkedList for List; + + error LinkedListEmptyList(); + + bytes internal constant NULL_BYTES = bytes(""); + struct List { + bytes32 head; + bytes32 tail; + uint256 nonce; + uint256 count; + } + + function add(List storage self, bytes32 id) internal { + self.tail = id; + self.nonce += 1; + if (self.count == 0) self.head = id; + self.count += 1; + } + + function remove( + List storage self, + function(bytes32) view returns (bytes32) getNextItem, + function(bytes32) deleteItem + ) internal returns (bytes32) { + require(self.count > 0, LinkedListEmptyList()); + bytes32 nextItem = getNextItem(self.head); + deleteItem(self.head); + self.count -= 1; + self.head = nextItem; + if (self.count == 0) self.tail = bytes32(0); + return self.head; + } + + function traverse( + List storage self, + function(bytes32) view returns (bytes32) getNextItem, + function(bytes32, bytes memory) returns (bool, bool, bytes memory) processItem, + function(bytes32) deleteItem, + bytes memory processInitAcc, + uint256 iterations + ) internal returns (uint256, bytes memory) { + uint256 itemCount = 0; + bool traverseAll = iterations == 0; + bytes memory acc = processInitAcc; + + bytes32 cursor = self.head; + + while (cursor != bytes32(0) && (traverseAll || iterations > 0)) { + (bool shouldBreak, bool shouldDelete, bytes memory acc_) = processItem(cursor, acc); + + if (shouldBreak) break; + + acc = acc_; + + if (shouldDelete) { + cursor = self.remove(getNextItem, deleteItem); + } else { + cursor = getNextItem(cursor); + } + + if (!traverseAll) iterations--; + itemCount++; + } + + return (itemCount, acc); + } +} diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 0c5af9853..2986f7c30 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -9,6 +9,7 @@ import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; import { PPMMath } from "../libraries/PPMMath.sol"; +import { LinkedList } from "../libraries/LinkedList.sol"; import { HorizonStakingBase } from "./HorizonStakingBase.sol"; @@ -23,6 +24,7 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { using TokenUtils for IGraphToken; using PPMMath for uint256; + using LinkedList for LinkedList.List; /// @dev Maximum value that can be set as the maxVerifierCut in a provision. /// It is equivalent to 100% in parts-per-million @@ -31,9 +33,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /// @dev Minimum size of a provision uint256 private constant MIN_PROVISION_SIZE = 1e18; - /// @dev Maximum number of simultaneous stake thaw requests (per provision) or undelegations (per delegation) - uint256 private constant MAX_THAW_REQUESTS = 100; - /// @dev Fixed point precision uint256 private constant FIXED_POINT_PRECISION = 1e18; @@ -200,49 +199,17 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address verifier, uint256 tokens - ) external override notPaused onlyAuthorized(serviceProvider, verifier) returns (bytes32) { - require(tokens != 0, HorizonStakingInvalidZeroTokens()); - - Provision storage prov = _provisions[serviceProvider][verifier]; - ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; - bytes32 thawRequestId = keccak256(abi.encodePacked(serviceProvider, verifier, sp.nextThawRequestNonce)); - sp.nextThawRequestNonce += 1; - ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - - uint256 tokensAvailable = _getProviderTokensAvailable(serviceProvider, verifier); - require(tokensAvailable >= tokens, HorizonStakingInsufficientTokensAvailable(tokensAvailable, tokens)); - prov.tokensThawing = prov.tokensThawing + tokens; - - if (prov.sharesThawing == 0) { - thawRequest.shares = tokens; - } else { - thawRequest.shares = (prov.sharesThawing * tokens) / prov.tokensThawing; - } - - thawRequest.thawingUntil = uint64(block.timestamp + uint256(prov.thawingPeriod)); - prov.sharesThawing = prov.sharesThawing + thawRequest.shares; - - require(prov.nThawRequests < MAX_THAW_REQUESTS, HorizonStakingTooManyThawRequests()); - if (prov.nThawRequests == 0) { - prov.firstThawRequestId = thawRequestId; - } else { - _thawRequests[prov.lastThawRequestId].next = thawRequestId; - } - prov.lastThawRequestId = thawRequestId; - prov.nThawRequests += 1; - - emit ProvisionThawInitiated(serviceProvider, verifier, tokens, thawRequest.thawingUntil, thawRequestId); - - return thawRequestId; + ) external override notPaused onlyAuthorized(serviceProvider, verifier) { + _thaw(serviceProvider, verifier, tokens); } // moves thawed stake from a provision back into the provider's available stake function deprovision( address serviceProvider, address verifier, - uint256 tokens + uint256 nThawRequests ) external override onlyAuthorized(serviceProvider, verifier) notPaused { - _fulfillThawRequests(serviceProvider, verifier, tokens); + _deprovision(serviceProvider, verifier, nThawRequests); } /** @@ -259,6 +226,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address oldVerifier, address newVerifier, + uint256 nThawRequests, uint256 tokens ) external @@ -267,7 +235,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { onlyAuthorized(serviceProvider, oldVerifier) onlyAuthorized(serviceProvider, newVerifier) { - _fulfillThawRequests(serviceProvider, oldVerifier, tokens); + _deprovision(serviceProvider, oldVerifier, nThawRequests); _addToProvision(serviceProvider, newVerifier, tokens); } @@ -333,9 +301,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address verifier, address newServiceProvider, - uint256 minSharesForNewProvider + uint256 minSharesForNewProvider, + uint256 nThawRequests ) external override notPaused { - _withdrawDelegated(serviceProvider, verifier, newServiceProvider, minSharesForNewProvider); + _withdrawDelegated(serviceProvider, verifier, newServiceProvider, minSharesForNewProvider, nThawRequests); } function setDelegationFeeCut( @@ -362,7 +331,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // For backwards compatibility, withdraws delegated tokens from the subgraph data service function withdrawDelegated(address serviceProvider, address newServiceProvider) external notPaused { - _withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0); + _withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0, 0); } /* @@ -582,6 +551,32 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } } + /** + * @dev Withdraw service provider tokens once the thawing period has passed. + * @param _serviceProvider Address of service provider to withdraw funds from + */ + function _withdraw(address _serviceProvider) private { + // Get tokens available for withdraw and update balance + ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; + uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; + require(tokensToWithdraw > 0, HorizonStakingInvalidZeroTokens()); + require( + block.timestamp >= sp.__DEPRECATED_tokensLockedUntil, + HorizonStakingStillThawing(sp.__DEPRECATED_tokensLockedUntil) + ); + + // Reset locked tokens + sp.__DEPRECATED_tokensLocked = 0; + sp.__DEPRECATED_tokensLockedUntil = 0; + + sp.tokensStaked = sp.tokensStaked - tokensToWithdraw; + + // Return tokens to the service provider + _graphToken().pushTokens(_serviceProvider, tokensToWithdraw); + + emit StakeWithdrawn(_serviceProvider, tokensToWithdraw); + } + /** * @dev Creates a provision */ @@ -610,9 +605,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { maxVerifierCut: _maxVerifierCut, thawingPeriod: _thawingPeriod, createdAt: uint64(block.timestamp), - firstThawRequestId: bytes32(0), - lastThawRequestId: bytes32(0), - nThawRequests: 0, maxVerifierCutPending: _maxVerifierCut, thawingPeriodPending: _thawingPeriod }); @@ -636,30 +628,44 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit ProvisionIncreased(_serviceProvider, _verifier, _tokens); } - /** - * @dev Withdraw service provider tokens once the thawing period has passed. - * @param _serviceProvider Address of service provider to withdraw funds from - */ - function _withdraw(address _serviceProvider) private { - // Get tokens available for withdraw and update balance - ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; - uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; - require(tokensToWithdraw > 0, HorizonStakingInvalidZeroTokens()); - require( - block.timestamp >= sp.__DEPRECATED_tokensLockedUntil, - HorizonStakingStillThawing(sp.__DEPRECATED_tokensLockedUntil) - ); + function _thaw(address _serviceProvider, address _verifier, uint256 _tokens) private { + require(_tokens != 0, HorizonStakingInvalidZeroTokens()); + uint256 tokensAvailable = _getProviderTokensAvailable(_serviceProvider, _verifier); + require(tokensAvailable >= _tokens, HorizonStakingInsufficientTokensAvailable(tokensAvailable, _tokens)); - // Reset locked tokens - sp.__DEPRECATED_tokensLocked = 0; - sp.__DEPRECATED_tokensLockedUntil = 0; + Provision storage prov = _provisions[_serviceProvider][_verifier]; + uint256 thawingShares = prov.sharesThawing == 0 ? _tokens : (prov.sharesThawing * _tokens) / prov.tokensThawing; + uint64 thawingUntil = uint64(block.timestamp + uint256(prov.thawingPeriod)); - sp.tokensStaked = sp.tokensStaked - tokensToWithdraw; + // provision accounting + prov.tokensThawing = prov.tokensThawing + _tokens; + prov.sharesThawing = prov.sharesThawing + thawingShares; - // Return tokens to the service provider - _graphToken().pushTokens(_serviceProvider, tokensToWithdraw); + _createThawRequest(_serviceProvider, _verifier, _serviceProvider, thawingShares, thawingUntil); + emit ProvisionThawed(_serviceProvider, _verifier, _tokens); + } - emit StakeWithdrawn(_serviceProvider, tokensToWithdraw); + function _deprovision(address _serviceProvider, address _verifier, uint256 _nThawRequests) private { + Provision storage prov = _provisions[_serviceProvider][_verifier]; + + uint256 tokensThawed = 0; + uint256 sharesThawing = prov.sharesThawing; + uint256 tokensThawing = prov.tokensThawing; + (tokensThawed, tokensThawing, sharesThawing) = _fulfillThawRequests( + _serviceProvider, + _verifier, + _serviceProvider, + tokensThawing, + sharesThawing, + _nThawRequests + ); + + prov.tokens = prov.tokens - tokensThawed; + prov.sharesThawing = sharesThawing; + prov.tokensThawing = tokensThawing; + _serviceProviders[_serviceProvider].tokensProvisioned -= tokensThawed; + + emit TokensDeprovisioned(_serviceProvider, _verifier, tokensThawed); } function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) private { @@ -694,11 +700,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { require(delegation.shares >= _shares, HorizonStakingInvalidSharesAmount(delegation.shares, _shares)); uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; - uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); - pool.tokensThawing = pool.tokensThawing + tokens; - + uint64 thawingUntil = uint64(block.timestamp + uint256(_provisions[_serviceProvider][_verifier].thawingPeriod)); pool.shares = pool.shares - _shares; + pool.tokensThawing = pool.tokensThawing + tokens; pool.sharesThawing = pool.sharesThawing + thawingShares; delegation.shares = delegation.shares - _shares; @@ -710,25 +715,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { HorizonStakingInsufficientTokens(remainingTokens, MIN_DELEGATION) ); } - bytes32 thawRequestId = keccak256( - abi.encodePacked(_serviceProvider, _verifier, msg.sender, delegation.nextThawRequestNonce) - ); - delegation.nextThawRequestNonce += 1; - ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - thawRequest.shares = thawingShares; - thawRequest.thawingUntil = uint64( - block.timestamp + uint256(_provisions[_serviceProvider][_verifier].thawingPeriod) - ); - require(delegation.nThawRequests < MAX_THAW_REQUESTS, HorizonStakingTooManyThawRequests()); - if (delegation.nThawRequests == 0) { - delegation.firstThawRequestId = thawRequestId; - } else { - _thawRequests[delegation.lastThawRequestId].next = thawRequestId; - } - delegation.lastThawRequestId = thawRequestId; - unchecked { - delegation.nThawRequests += 1; - } + + _createThawRequest(_serviceProvider, _verifier, msg.sender, thawingShares, thawingUntil); + emit TokensUndelegated(_serviceProvider, _verifier, msg.sender, tokens); } @@ -736,45 +725,34 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address _serviceProvider, address _verifier, address _newServiceProvider, - uint256 _minSharesForNewProvider + uint256 _minSharesForNewProvider, + uint256 _nThawRequests ) private { DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); - Delegation storage delegation = pool.delegators[msg.sender]; - uint256 thawedTokens = 0; + uint256 tokensThawed = 0; uint256 sharesThawing = pool.sharesThawing; uint256 tokensThawing = pool.tokensThawing; - require(delegation.nThawRequests > 0, HorizonStakingNothingThawing()); - bytes32 thawRequestId = delegation.firstThawRequestId; - while (thawRequestId != bytes32(0)) { - ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - if (thawRequest.thawingUntil <= block.timestamp) { - uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; - tokensThawing = tokensThawing - tokens; - sharesThawing = sharesThawing - thawRequest.shares; - thawedTokens = thawedTokens + tokens; - delete _thawRequests[thawRequestId]; - delegation.firstThawRequestId = thawRequest.next; - delegation.nThawRequests -= 1; - if (delegation.nThawRequests == 0) { - delegation.lastThawRequestId = bytes32(0); - } - } else { - break; - } - thawRequestId = thawRequest.next; - } + (tokensThawed, tokensThawing, sharesThawing) = _fulfillThawRequests( + _serviceProvider, + _verifier, + msg.sender, + tokensThawing, + sharesThawing, + _nThawRequests + ); - pool.tokens = pool.tokens - thawedTokens; + pool.tokens = pool.tokens - tokensThawed; pool.sharesThawing = sharesThawing; pool.tokensThawing = tokensThawing; if (_newServiceProvider != address(0)) { - _delegate(_newServiceProvider, _verifier, thawedTokens, _minSharesForNewProvider); + _delegate(_newServiceProvider, _verifier, tokensThawed, _minSharesForNewProvider); } else { - _graphToken().pushTokens(msg.sender, thawedTokens); + _graphToken().pushTokens(msg.sender, tokensThawed); } - emit DelegatedTokensWithdrawn(_serviceProvider, _verifier, msg.sender, thawedTokens); + + emit DelegatedTokensWithdrawn(_serviceProvider, _verifier, msg.sender, tokensThawed); } function _setOperator(address _operator, address _verifier, bool _allowed) private { @@ -787,48 +765,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit OperatorSet(msg.sender, _operator, _verifier, _allowed); } - function _fulfillThawRequests(address _serviceProvider, address _verifier, uint256 _tokens) private { - require(_tokens != 0, HorizonStakingInvalidZeroTokens()); - Provision storage prov = _provisions[_serviceProvider][_verifier]; - uint256 tokensRemaining = _tokens; - uint256 sharesThawing = prov.sharesThawing; - uint256 tokensThawing = prov.tokensThawing; - while (tokensRemaining > 0) { - require(prov.nThawRequests > 0, HorizonStakingCannotFulfillThawRequest()); - bytes32 thawRequestId = prov.firstThawRequestId; - ThawRequest storage thawRequest = _thawRequests[thawRequestId]; - require(thawRequest.thawingUntil <= block.timestamp, HorizonStakingStillThawing(thawRequest.thawingUntil)); - uint256 thawRequestTokens = (thawRequest.shares * tokensThawing) / sharesThawing; - if (thawRequestTokens <= tokensRemaining) { - tokensRemaining = tokensRemaining - thawRequestTokens; - delete _thawRequests[thawRequestId]; - prov.firstThawRequestId = thawRequest.next; - prov.nThawRequests -= 1; - tokensThawing = tokensThawing - thawRequestTokens; - sharesThawing = sharesThawing - thawRequest.shares; - if (prov.nThawRequests == 0) { - prov.lastThawRequestId = bytes32(0); - } - } else { - // TODO check for potential rounding issues - uint256 sharesRemoved = (tokensRemaining * prov.sharesThawing) / prov.tokensThawing; - thawRequest.shares = thawRequest.shares - sharesRemoved; - tokensThawing = tokensThawing - tokensRemaining; - sharesThawing = sharesThawing - sharesRemoved; - } - emit ProvisionThawFulfilled( - _serviceProvider, - _verifier, - MathUtils.min(thawRequestTokens, tokensRemaining), - thawRequestId - ); - } - prov.sharesThawing = sharesThawing; - prov.tokensThawing = tokensThawing; - prov.tokens = prov.tokens - _tokens; - _serviceProviders[_serviceProvider].tokensProvisioned -= _tokens; - } - function _isAuthorized(address _operator, address _serviceProvider, address _verifier) private view returns (bool) { if (_operator == _serviceProvider) { return true; diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 951395b5b..8ececc9f5 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -7,6 +7,7 @@ import { IHorizonStakingBase } from "../interfaces/internal/IHorizonStakingBase. import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; +import { LinkedList } from "../libraries/LinkedList.sol"; import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; import { GraphUpgradeable } from "@graphprotocol/contracts/contracts/upgrades/GraphUpgradeable.sol"; @@ -27,8 +28,13 @@ abstract contract HorizonStakingBase is IHorizonStakingTypes, IHorizonStakingBase { + using LinkedList for LinkedList.List; + address internal immutable SUBGRAPH_DATA_SERVICE_ADDRESS; + /// @dev Maximum number of simultaneous stake thaw requests (per provision) or undelegations (per delegation) + uint256 private constant MAX_THAW_REQUESTS = 100; + constructor(address controller, address subgraphDataServiceAddress) Managed(controller) { SUBGRAPH_DATA_SERVICE_ADDRESS = subgraphDataServiceAddress; } @@ -68,7 +74,6 @@ abstract contract HorizonStakingBase is ServiceProviderInternal storage spInternal = _serviceProviders[serviceProvider]; sp.tokensStaked = spInternal.tokensStaked; sp.tokensProvisioned = spInternal.tokensProvisioned; - sp.nextThawRequestNonce = spInternal.nextThawRequestNonce; return sp; } @@ -144,12 +149,15 @@ abstract contract HorizonStakingBase is * @param verifier The verifier address for which the tokens are provisioned */ function getThawedTokens(address serviceProvider, address verifier) external view returns (uint256) { - Provision storage prov = _provisions[serviceProvider][verifier]; - if (prov.nThawRequests == 0) { + LinkedList.List storage thawRequestList = _thawRequestLists[serviceProvider][verifier][serviceProvider]; + if (thawRequestList.count == 0) { return 0; } - bytes32 thawRequestId = prov.firstThawRequestId; + uint256 tokens = 0; + Provision storage prov = _provisions[serviceProvider][verifier]; + + bytes32 thawRequestId = thawRequestList.head; while (thawRequestId != bytes32(0)) { ThawRequest storage thawRequest = _thawRequests[thawRequestId]; if (thawRequest.thawingUntil <= block.timestamp) { @@ -173,6 +181,87 @@ abstract contract HorizonStakingBase is emit StakeDeposited(_serviceProvider, _tokens); } + function _createThawRequest( + address _serviceProvider, + address _verifier, + address _owner, + uint256 _shares, + uint64 _thawingUntil + ) internal { + LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; + require(thawRequestList.count < MAX_THAW_REQUESTS, HorizonStakingTooManyThawRequests()); + + bytes32 thawRequestId = keccak256(abi.encodePacked(_serviceProvider, _verifier, _owner, thawRequestList.nonce)); + _thawRequests[thawRequestId] = ThawRequest({ shares: _shares, thawingUntil: _thawingUntil, next: bytes32(0) }); + + if (thawRequestList.count != 0) _thawRequests[thawRequestList.tail].next = thawRequestId; + thawRequestList.add(thawRequestId); + + emit ThawRequestCreated(_serviceProvider, _verifier, _owner, _shares, _thawingUntil, thawRequestId); + } + + function _fulfillThawRequests( + address _serviceProvider, + address _verifier, + address _owner, + uint256 _tokensThawing, + uint256 _sharesThawing, + uint256 _nThawRequests + ) internal returns (uint256, uint256, uint256) { + LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; + require(thawRequestList.count > 0, HorizonStakingNothingThawing()); + + uint256 tokensThawed = 0; + (uint256 thawRequestsFulfilled, bytes memory data) = thawRequestList.traverse( + _getNextThawRequest, + _fulfillThawRequest, + _deleteThawRequest, + abi.encode(tokensThawed, _tokensThawing, _sharesThawing), + _nThawRequests + ); + + (tokensThawed, _tokensThawing, _sharesThawing) = abi.decode(data, (uint256, uint256, uint256)); + emit ThawRequestsFulfilled(_serviceProvider, _verifier, _owner, thawRequestsFulfilled, tokensThawed); + return (tokensThawed, _tokensThawing, _sharesThawing); + } + + function _fulfillThawRequest( + bytes32 _thawRequestId, + bytes memory _acc + ) internal returns (bool, bool, bytes memory) { + ThawRequest storage thawRequest = _thawRequests[_thawRequestId]; + + // early exit + if (thawRequest.thawingUntil > block.timestamp) { + return (true, false, LinkedList.NULL_BYTES); + } + + // decode + (uint256 tokensThawed, uint256 tokensThawing, uint256 sharesThawing) = abi.decode( + _acc, + (uint256, uint256, uint256) + ); + + // process + uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; + tokensThawing = tokensThawing - tokens; + sharesThawing = sharesThawing - thawRequest.shares; + tokensThawed = tokensThawed + tokens; + emit ThawRequestFulfilled(_thawRequestId, tokens, thawRequest.shares, thawRequest.thawingUntil); + + // encode + _acc = abi.encode(tokensThawed, tokensThawing, sharesThawing); + return (false, true, _acc); + } + + function _deleteThawRequest(bytes32 _thawRequestId) internal { + delete _thawRequests[_thawRequestId]; + } + + function _getNextThawRequest(bytes32 _thawRequestId) private view returns (bytes32) { + return _thawRequests[_thawRequestId].next; + } + function _getDelegationPool( address _serviceProvider, address _verifier diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index ffe82ab30..8d147866a 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -6,6 +6,8 @@ import { IHorizonStakingExtension } from "../interfaces/internal/IHorizonStaking import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; +import { LinkedList } from "../libraries/LinkedList.sol"; + // TODO: create custom var-name-mixedcase /* solhint-disable var-name-mixedcase */ @@ -137,6 +139,9 @@ abstract contract HorizonStakingV1Storage { mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _thawRequests; + mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) + internal _thawRequestLists; + // service provider => verifier => operator => authorized mapping(address serviceProvider => mapping(address verifier => mapping(address operator => bool authorized))) internal _operatorAuth; diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index 2d951261d..fa73c9643 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -1,4 +1,4 @@ -// import '@nomicfoundation/hardhat-foundry' +import '@nomicfoundation/hardhat-foundry' import '@nomicfoundation/hardhat-toolbox' import 'hardhat-storage-layout' import 'hardhat-contract-sizer' From 1c6202713d41a9cee3f2c22194ae8d3aa0e2acab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 28 May 2024 12:16:36 -0300 Subject: [PATCH 080/343] feat: make fees extension only one type of payment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../extensions/DataServiceFees.sol | 41 +++---- .../extensions/DataServiceFeesStorage.sol | 7 +- .../interfaces/IDataServiceFees.sol | 12 +- .../internal/IHorizonStakingBase.sol | 8 ++ .../internal/IHorizonStakingMain.sol | 8 +- .../contracts/libraries/LinkedList.sol | 6 +- .../contracts/staking/HorizonStaking.sol | 116 ++++++++++++++++-- .../contracts/staking/HorizonStakingBase.sol | 90 ++------------ packages/horizon/test/data-service/DataS.sol | 83 +++++++++++++ packages/horizon/test/data-service/test.t.sol | 30 +++++ .../test/staking/delegation/undelegate.t.sol | 6 +- .../test/staking/delegation/withdraw.t.sol | 8 +- .../test/staking/provision/reprovision.t.sol | 2 +- packages/horizon/test/staking/thaw/thaw.t.sol | 13 +- .../contracts/SubgraphService.sol | 4 +- packages/subgraph-service/hardhat.config.ts | 28 ++--- .../test/mocks/MockHorizonStaking.sol | 3 - 17 files changed, 289 insertions(+), 176 deletions(-) create mode 100644 packages/horizon/test/data-service/DataS.sol create mode 100644 packages/horizon/test/data-service/test.t.sol diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index b416bcf69..0e418503d 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -2,7 +2,6 @@ pragma solidity 0.8.26; import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; -import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; import { ProvisionTracker } from "../libraries/ProvisionTracker.sol"; import { LinkedList } from "../../libraries/LinkedList.sol"; @@ -14,19 +13,14 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat using ProvisionTracker for mapping(address => uint256); using LinkedList for LinkedList.List; - function releaseStake(IGraphPayments.PaymentTypes feeType, uint256 n) external virtual { - _releaseStake(feeType, msg.sender, n); + function releaseStake(uint256 n) external virtual override { + _releaseStake(msg.sender, n); } - function _lockStake( - IGraphPayments.PaymentTypes _feeType, - address _serviceProvider, - uint256 _tokens, - uint256 _unlockTimestamp - ) internal { - feesProvisionTracker[_feeType].lock(_graphStaking(), _serviceProvider, _tokens, maximumDelegationRatio); + function _lockStake(address _serviceProvider, uint256 _tokens, uint256 _unlockTimestamp) internal { + feesProvisionTracker.lock(_graphStaking(), _serviceProvider, _tokens, maximumDelegationRatio); - LinkedList.List storage claimsList = claimsLists[_feeType][_serviceProvider]; + LinkedList.List storage claimsList = claimsLists[_serviceProvider]; // Save item and add to list bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce); @@ -40,25 +34,25 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat if (claimsList.count != 0) claims[claimsList.tail].nextClaim = claimId; claimsList.add(claimId); - emit StakeClaimLocked(_serviceProvider, _feeType, claimId, _tokens, _unlockTimestamp); + emit StakeClaimLocked(_serviceProvider, claimId, _tokens, _unlockTimestamp); } /// @notice Release expired stake claims for a service provider /// @param _n The number of stake claims to release, or 0 to release all - function _releaseStake(IGraphPayments.PaymentTypes _feeType, address _serviceProvider, uint256 _n) internal { - LinkedList.List storage claimsList = claimsLists[_feeType][_serviceProvider]; + function _releaseStake(address _serviceProvider, uint256 _n) internal { + LinkedList.List storage claimsList = claimsLists[_serviceProvider]; (uint256 claimsReleased, bytes memory data) = claimsList.traverse( _getNextStakeClaim, _processStakeClaim, _deleteStakeClaim, - abi.encode(0), + abi.encode(0, _serviceProvider), _n ); - emit StakeClaimsReleased(_serviceProvider, _feeType, claimsReleased, abi.decode(data, (uint256))); + emit StakeClaimsReleased(_serviceProvider, claimsReleased, abi.decode(data, (uint256))); } - function _processStakeClaim(bytes32 _claimId, bytes memory acc) private returns (bool, bool, bytes memory) { + function _processStakeClaim(bytes32 _claimId, bytes memory _acc) private returns (bool, bool, bytes memory) { StakeClaim memory claim = _getStakeClaim(_claimId); // early exit @@ -67,18 +61,15 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat } // decode - (IGraphPayments.PaymentTypes _feeType, address _serviceProvider) = abi.decode( - acc, - (IGraphPayments.PaymentTypes, address) - ); + (uint256 tokensClaimed, address serviceProvider) = abi.decode(_acc, (uint256, address)); // process - feesProvisionTracker[_feeType].release(_serviceProvider, claim.tokens); - emit StakeClaimReleased(_serviceProvider, _feeType, _claimId, claim.tokens, claim.releaseAt); + feesProvisionTracker.release(serviceProvider, claim.tokens); + emit StakeClaimReleased(serviceProvider, _claimId, claim.tokens, claim.releaseAt); // encode - acc = abi.encode(abi.decode(acc, (uint256)) + claim.tokens); - return (false, true, acc); + _acc = abi.encode(tokensClaimed + claim.tokens, serviceProvider); + return (false, true, _acc); } function _deleteStakeClaim(bytes32 _claimId) private { diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index 7e867c35e..57e178e86 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -2,20 +2,17 @@ pragma solidity 0.8.26; import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; -import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; import { LinkedList } from "../../libraries/LinkedList.sol"; abstract contract DataServiceFeesV1Storage { - mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => uint256 tokens)) - public feesProvisionTracker; + mapping(address serviceProvider => uint256 tokens) public feesProvisionTracker; /// @notice List of all locked stake claims to be released to service providers mapping(bytes32 claimId => IDataServiceFees.StakeClaim claim) public claims; /// @notice Service providers registered in the data service - mapping(IGraphPayments.PaymentTypes feeType => mapping(address serviceProvider => LinkedList.List list)) - public claimsLists; + mapping(address serviceProvider => LinkedList.List list) public claimsLists; /// @dev Gap to allow adding variables in future upgrades uint256[50] private __gap; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index 9e39e62fd..cab7e9998 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -2,7 +2,6 @@ pragma solidity 0.8.26; import { IDataService } from "./IDataService.sol"; -import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; interface IDataServiceFees is IDataService { /// A locked stake claim to be released to a service provider @@ -19,26 +18,19 @@ interface IDataServiceFees is IDataService { event StakeClaimLocked( address indexed serviceProvider, - IGraphPayments.PaymentTypes indexed feeType, bytes32 indexed claimId, uint256 tokens, uint256 unlockTimestamp ); event StakeClaimReleased( address indexed serviceProvider, - IGraphPayments.PaymentTypes indexed feeType, bytes32 indexed claimId, uint256 tokens, uint256 releaseAt ); - event StakeClaimsReleased( - address indexed serviceProvider, - IGraphPayments.PaymentTypes indexed feeType, - uint256 claimsCount, - uint256 tokensReleased - ); + event StakeClaimsReleased(address indexed serviceProvider, uint256 claimsCount, uint256 tokensReleased); error DataServiceFeesClaimNotFound(bytes32 claimId); - function releaseStake(IGraphPayments.PaymentTypes feeType, uint256 n) external; + function releaseStake(uint256 n) external; } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index 76ad132aa..c8dea3da6 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -5,6 +5,8 @@ pragma solidity 0.8.26; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; import { IGraphPayments } from "../IGraphPayments.sol"; +import { LinkedList } from "../../libraries/LinkedList.sol"; + interface IHorizonStakingBase { /** * @dev Emitted when `serviceProvider` stakes `tokens` amount. @@ -86,4 +88,10 @@ interface IHorizonStakingBase { function getIdleStake(address serviceProvider) external view returns (uint256 tokens); function getProviderTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); + + function getThawRequestList( + address serviceProvider, + address verifier, + address owner + ) external view returns (LinkedList.List memory); } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index ced1957b9..d11d958b8 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -163,7 +163,7 @@ interface IHorizonStakingMain is IHorizonStakingBase { ) external; // initiate a thawing to remove tokens from a provision - function thaw(address serviceProvider, address verifier, uint256 tokens) external; + function thaw(address serviceProvider, address verifier, uint256 tokens) external returns (bytes32); // add more tokens from idle stake to an existing provision function addToProvision(address serviceProvider, address verifier, uint256 tokens) external; @@ -176,8 +176,8 @@ interface IHorizonStakingMain is IHorizonStakingBase { address serviceProvider, address oldVerifier, address newVerifier, - uint256 nThawRequests, - uint256 tokens + uint256 tokens, + uint256 nThawRequests ) external; // moves thawed stake back to the owner's account - stake is removed from the protocol @@ -187,7 +187,7 @@ interface IHorizonStakingMain is IHorizonStakingBase { function delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) external; // undelegate (thaw) delegated tokens from a provision - function undelegate(address serviceProvider, address verifier, uint256 shares) external; + function undelegate(address serviceProvider, address verifier, uint256 shares) external returns (bytes32); // withdraw delegated tokens after thawing function withdrawDelegated( diff --git a/packages/horizon/contracts/libraries/LinkedList.sol b/packages/horizon/contracts/libraries/LinkedList.sol index 28ced852a..d58d3f5cd 100644 --- a/packages/horizon/contracts/libraries/LinkedList.sol +++ b/packages/horizon/contracts/libraries/LinkedList.sol @@ -5,15 +5,15 @@ pragma solidity 0.8.26; library LinkedList { using LinkedList for List; - error LinkedListEmptyList(); - - bytes internal constant NULL_BYTES = bytes(""); struct List { bytes32 head; bytes32 tail; uint256 nonce; uint256 count; } + bytes internal constant NULL_BYTES = bytes(""); + + error LinkedListEmptyList(); function add(List storage self, bytes32 id) internal { self.tail = id; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 2986f7c30..e72027cbb 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -36,6 +36,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /// @dev Fixed point precision uint256 private constant FIXED_POINT_PRECISION = 1e18; + /// @dev Maximum number of simultaneous stake thaw requests (per provision) or undelegations (per delegation) + uint256 private constant MAX_THAW_REQUESTS = 100; + /// @dev Minimum amount of delegation to prevent rounding attacks. /// TODO: remove this after L2 transfer tool for delegation is removed /// (delegation on L2 has its own slippage protection) @@ -199,8 +202,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address verifier, uint256 tokens - ) external override notPaused onlyAuthorized(serviceProvider, verifier) { - _thaw(serviceProvider, verifier, tokens); + ) external override notPaused onlyAuthorized(serviceProvider, verifier) returns (bytes32) { + return _thaw(serviceProvider, verifier, tokens); } // moves thawed stake from a provision back into the provider's available stake @@ -226,8 +229,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address oldVerifier, address newVerifier, - uint256 nThawRequests, - uint256 tokens + uint256 tokens, + uint256 nThawRequests ) external override @@ -293,8 +296,12 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // undelegate tokens from a service provider // the shares are burned and replaced with shares in the thawing pool - function undelegate(address serviceProvider, address verifier, uint256 shares) external override notPaused { - _undelegate(serviceProvider, verifier, shares); + function undelegate( + address serviceProvider, + address verifier, + uint256 shares + ) external override notPaused returns (bytes32) { + return _undelegate(serviceProvider, verifier, shares); } function withdrawDelegated( @@ -628,7 +635,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit ProvisionIncreased(_serviceProvider, _verifier, _tokens); } - function _thaw(address _serviceProvider, address _verifier, uint256 _tokens) private { + function _thaw(address _serviceProvider, address _verifier, uint256 _tokens) private returns (bytes32) { require(_tokens != 0, HorizonStakingInvalidZeroTokens()); uint256 tokensAvailable = _getProviderTokensAvailable(_serviceProvider, _verifier); require(tokensAvailable >= _tokens, HorizonStakingInsufficientTokensAvailable(tokensAvailable, _tokens)); @@ -641,8 +648,15 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { prov.tokensThawing = prov.tokensThawing + _tokens; prov.sharesThawing = prov.sharesThawing + thawingShares; - _createThawRequest(_serviceProvider, _verifier, _serviceProvider, thawingShares, thawingUntil); + bytes32 thawRequestId = _createThawRequest( + _serviceProvider, + _verifier, + _serviceProvider, + thawingShares, + thawingUntil + ); emit ProvisionThawed(_serviceProvider, _verifier, _tokens); + return thawRequestId; } function _deprovision(address _serviceProvider, address _verifier, uint256 _nThawRequests) private { @@ -693,7 +707,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit TokensDelegated(_serviceProvider, _verifier, msg.sender, _tokens); } - function _undelegate(address _serviceProvider, address _verifier, uint256 _shares) private { + function _undelegate(address _serviceProvider, address _verifier, uint256 _shares) private returns (bytes32) { require(_shares > 0, HorizonStakingInvalidZeroShares()); DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); Delegation storage delegation = pool.delegators[msg.sender]; @@ -716,9 +730,16 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { ); } - _createThawRequest(_serviceProvider, _verifier, msg.sender, thawingShares, thawingUntil); + bytes32 thawRequestId = _createThawRequest( + _serviceProvider, + _verifier, + msg.sender, + thawingShares, + thawingUntil + ); emit TokensUndelegated(_serviceProvider, _verifier, msg.sender, tokens); + return thawRequestId; } function _withdrawDelegated( @@ -755,6 +776,81 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit DelegatedTokensWithdrawn(_serviceProvider, _verifier, msg.sender, tokensThawed); } + function _createThawRequest( + address _serviceProvider, + address _verifier, + address _owner, + uint256 _shares, + uint64 _thawingUntil + ) private returns (bytes32) { + LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; + require(thawRequestList.count < MAX_THAW_REQUESTS, HorizonStakingTooManyThawRequests()); + + bytes32 thawRequestId = keccak256(abi.encodePacked(_serviceProvider, _verifier, _owner, thawRequestList.nonce)); + _thawRequests[thawRequestId] = ThawRequest({ shares: _shares, thawingUntil: _thawingUntil, next: bytes32(0) }); + + if (thawRequestList.count != 0) _thawRequests[thawRequestList.tail].next = thawRequestId; + thawRequestList.add(thawRequestId); + + emit ThawRequestCreated(_serviceProvider, _verifier, _owner, _shares, _thawingUntil, thawRequestId); + return thawRequestId; + } + + function _fulfillThawRequests( + address _serviceProvider, + address _verifier, + address _owner, + uint256 _tokensThawing, + uint256 _sharesThawing, + uint256 _nThawRequests + ) private returns (uint256, uint256, uint256) { + LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; + require(thawRequestList.count > 0, HorizonStakingNothingThawing()); + + uint256 tokensThawed = 0; + (uint256 thawRequestsFulfilled, bytes memory data) = thawRequestList.traverse( + _getNextThawRequest, + _fulfillThawRequest, + _deleteThawRequest, + abi.encode(tokensThawed, _tokensThawing, _sharesThawing), + _nThawRequests + ); + + (tokensThawed, _tokensThawing, _sharesThawing) = abi.decode(data, (uint256, uint256, uint256)); + emit ThawRequestsFulfilled(_serviceProvider, _verifier, _owner, thawRequestsFulfilled, tokensThawed); + return (tokensThawed, _tokensThawing, _sharesThawing); + } + + function _fulfillThawRequest(bytes32 _thawRequestId, bytes memory _acc) private returns (bool, bool, bytes memory) { + ThawRequest storage thawRequest = _thawRequests[_thawRequestId]; + + // early exit + if (thawRequest.thawingUntil > block.timestamp) { + return (true, false, LinkedList.NULL_BYTES); + } + + // decode + (uint256 tokensThawed, uint256 tokensThawing, uint256 sharesThawing) = abi.decode( + _acc, + (uint256, uint256, uint256) + ); + + // process + uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; + tokensThawing = tokensThawing - tokens; + sharesThawing = sharesThawing - thawRequest.shares; + tokensThawed = tokensThawed + tokens; + emit ThawRequestFulfilled(_thawRequestId, tokens, thawRequest.shares, thawRequest.thawingUntil); + + // encode + _acc = abi.encode(tokensThawed, tokensThawing, sharesThawing); + return (false, true, _acc); + } + + function _deleteThawRequest(bytes32 _thawRequestId) private { + delete _thawRequests[_thawRequestId]; + } + function _setOperator(address _operator, address _verifier, bool _allowed) private { require(_operator != msg.sender, HorizonStakingCallerIsServiceProvider()); if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 8ececc9f5..27b8e10e3 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -32,9 +32,6 @@ abstract contract HorizonStakingBase is address internal immutable SUBGRAPH_DATA_SERVICE_ADDRESS; - /// @dev Maximum number of simultaneous stake thaw requests (per provision) or undelegations (per delegation) - uint256 private constant MAX_THAW_REQUESTS = 100; - constructor(address controller, address subgraphDataServiceAddress) Managed(controller) { SUBGRAPH_DATA_SERVICE_ADDRESS = subgraphDataServiceAddress; } @@ -107,6 +104,14 @@ abstract contract HorizonStakingBase is return _thawRequests[thawRequestId]; } + function getThawRequestList( + address serviceProvider, + address verifier, + address owner + ) external view returns (LinkedList.List memory) { + return _thawRequestLists[serviceProvider][verifier][owner]; + } + function getProvision(address serviceProvider, address verifier) external view override returns (Provision memory) { return _provisions[serviceProvider][verifier]; } @@ -181,84 +186,7 @@ abstract contract HorizonStakingBase is emit StakeDeposited(_serviceProvider, _tokens); } - function _createThawRequest( - address _serviceProvider, - address _verifier, - address _owner, - uint256 _shares, - uint64 _thawingUntil - ) internal { - LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; - require(thawRequestList.count < MAX_THAW_REQUESTS, HorizonStakingTooManyThawRequests()); - - bytes32 thawRequestId = keccak256(abi.encodePacked(_serviceProvider, _verifier, _owner, thawRequestList.nonce)); - _thawRequests[thawRequestId] = ThawRequest({ shares: _shares, thawingUntil: _thawingUntil, next: bytes32(0) }); - - if (thawRequestList.count != 0) _thawRequests[thawRequestList.tail].next = thawRequestId; - thawRequestList.add(thawRequestId); - - emit ThawRequestCreated(_serviceProvider, _verifier, _owner, _shares, _thawingUntil, thawRequestId); - } - - function _fulfillThawRequests( - address _serviceProvider, - address _verifier, - address _owner, - uint256 _tokensThawing, - uint256 _sharesThawing, - uint256 _nThawRequests - ) internal returns (uint256, uint256, uint256) { - LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; - require(thawRequestList.count > 0, HorizonStakingNothingThawing()); - - uint256 tokensThawed = 0; - (uint256 thawRequestsFulfilled, bytes memory data) = thawRequestList.traverse( - _getNextThawRequest, - _fulfillThawRequest, - _deleteThawRequest, - abi.encode(tokensThawed, _tokensThawing, _sharesThawing), - _nThawRequests - ); - - (tokensThawed, _tokensThawing, _sharesThawing) = abi.decode(data, (uint256, uint256, uint256)); - emit ThawRequestsFulfilled(_serviceProvider, _verifier, _owner, thawRequestsFulfilled, tokensThawed); - return (tokensThawed, _tokensThawing, _sharesThawing); - } - - function _fulfillThawRequest( - bytes32 _thawRequestId, - bytes memory _acc - ) internal returns (bool, bool, bytes memory) { - ThawRequest storage thawRequest = _thawRequests[_thawRequestId]; - - // early exit - if (thawRequest.thawingUntil > block.timestamp) { - return (true, false, LinkedList.NULL_BYTES); - } - - // decode - (uint256 tokensThawed, uint256 tokensThawing, uint256 sharesThawing) = abi.decode( - _acc, - (uint256, uint256, uint256) - ); - - // process - uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; - tokensThawing = tokensThawing - tokens; - sharesThawing = sharesThawing - thawRequest.shares; - tokensThawed = tokensThawed + tokens; - emit ThawRequestFulfilled(_thawRequestId, tokens, thawRequest.shares, thawRequest.thawingUntil); - - // encode - _acc = abi.encode(tokensThawed, tokensThawing, sharesThawing); - return (false, true, _acc); - } - - function _deleteThawRequest(bytes32 _thawRequestId) internal { - delete _thawRequests[_thawRequestId]; - } - - function _getNextThawRequest(bytes32 _thawRequestId) private view returns (bytes32) { + function _getNextThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { return _thawRequests[_thawRequestId].next; } diff --git a/packages/horizon/test/data-service/DataS.sol b/packages/horizon/test/data-service/DataS.sol new file mode 100644 index 000000000..3ed3aa3ba --- /dev/null +++ b/packages/horizon/test/data-service/DataS.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; +import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; +import { IDataServiceFees } from "../../contracts/data-service/interfaces/IDataServiceFees.sol"; + +import { LinkedList } from "../../contracts/libraries/LinkedList.sol"; +import "forge-std/console.sol"; + +contract DataS { + using LinkedList for LinkedList.List; + struct StakeClaim { + uint256 tokens; + uint256 releaseAt; + bytes32 nextClaim; + } + + mapping(bytes32 claimId => StakeClaim tokens) public claims; + /// @notice Service providers registered in the data service + mapping(address serviceProvider => LinkedList.List list) public claimsLists2; + + constructor() {} + + function lockStake(address sp, uint256 tokens, uint256 unlock) external { + _lockStake(sp, tokens, unlock); + } + + function releaseStake2(address _serviceProvider, uint256 _n) external { + LinkedList.List storage claimsList2 = claimsLists2[_serviceProvider]; + (uint256 count, bytes memory acc) = claimsList2.traverse( + _getNextStakeClaim, + _processStakeClaim, + _deleteStakeClaim, + abi.encode(0), + _n + ); + + uint256 tokens = abi.decode(acc, (uint256)); + + console.log("count: %s", count); + console.log("tokens accumualted: %s", tokens); + } + + function _lockStake(address _serviceProvider, uint256 _tokens, uint256 _unlockTimestamp) internal { + LinkedList.List storage claimsList = claimsLists2[_serviceProvider]; + bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce); + claims[claimId] = StakeClaim({ tokens: _tokens, releaseAt: _unlockTimestamp, nextClaim: bytes32(0) }); + console.logBytes32(claimId); + claims[claimsList.tail].nextClaim = claimId; + + claimsList.tail = claimId; + claimsList.nonce += 1; + if (claimsList.head == bytes32(0)) claimsList.head = claimId; + } + + function _buildStakeClaimId(address _serviceProvider, uint256 _nonce) private view returns (bytes32) { + return keccak256(abi.encodePacked(address(this), _serviceProvider, _nonce)); + } + + function _getStakeClaim(bytes32 _claimId) private view returns (StakeClaim memory) { + StakeClaim memory claim = claims[_claimId]; + return claim; + } + + function _getNextStakeClaim(bytes32 _claimId) private view returns (bytes32) { + StakeClaim memory claim = claims[_claimId]; + return claim.nextClaim; + } + + function _deleteStakeClaim(bytes32 _claimId) private { + delete claims[_claimId]; + } + + function _processStakeClaim( + bytes32 _claimId, + bytes memory acc_ + ) private returns (bool, bool, bytes memory) { + StakeClaim memory claim = _getStakeClaim(_claimId); + if (block.timestamp < claim.releaseAt) return (true, false, LinkedList.NULL_BYTES); + + uint256 tokensAcc = abi.decode(acc_, (uint256)); + return (block.timestamp < claim.releaseAt, true, abi.encode(tokensAcc + claim.tokens)); + } +} diff --git a/packages/horizon/test/data-service/test.t.sol b/packages/horizon/test/data-service/test.t.sol new file mode 100644 index 000000000..ddedca6c7 --- /dev/null +++ b/packages/horizon/test/data-service/test.t.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { DataS } from "./DataS.sol"; + +// import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaking.t.sol"; + +contract DataServiceTest is Test { + DataS ds = new DataS(); + address sp1 = makeAddr("sp1"); + + function setUp() public { + ds.lockStake(sp1, 10 wei, block.timestamp + 100); + ds.lockStake(sp1, 1 wei, block.timestamp + 200); + ds.lockStake(sp1, 1 wei, block.timestamp + 300); + ds.lockStake(sp1, 1 wei, block.timestamp + 400); + vm.warp(block.timestamp + 2000); + console.log("done setup"); + } + + function test_test() public { + assertTrue(true); + } + + function test_release() public { + ds.releaseStake2(sp1, 0); + } +} diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index e3b355c30..5c6bab44c 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -5,6 +5,8 @@ import "forge-std/Test.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; +import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; + contract HorizonStakingUndelegateTest is HorizonStakingTest { function testUndelegate_Tokens( @@ -17,8 +19,8 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { Delegation memory delegation = _getDelegation(); _undelegate(delegation.shares); - Delegation memory thawingDelegation = _getDelegation(); - ThawRequest memory thawRequest = staking.getThawRequest(thawingDelegation.lastThawRequestId); + LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceAddress, users.delegator); + ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); assertEq(thawRequest.shares, delegation.shares); } diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 2db1a4237..01840874b 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -5,6 +5,8 @@ import "forge-std/Test.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; +import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; + contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { modifier useUndelegate(uint256 shares) { @@ -26,7 +28,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { } function _withdrawDelegated() private { - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0x0), 0); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0x0), 0, 0); } function _expectedTokensFromThawRequest(ThawRequest memory thawRequest) private view returns (uint256) { @@ -44,8 +46,8 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useDelegation(delegationAmount) useUndelegate(withdrawShares) { - Delegation memory thawingDelegation = _getDelegation(); - ThawRequest memory thawRequest = staking.getThawRequest(thawingDelegation.lastThawRequestId); + LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceAddress, users.delegator); + ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); skip(thawRequest.thawingUntil + 1); diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 8a7d17d6a..78a7a50ac 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -10,7 +10,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { address private newDataService = makeAddr("newDataService"); function _reprovision(uint256 amount) private { - staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, amount); + staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, amount, 0); } function testReprovision_MovingTokens( diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/thaw/thaw.t.sol index 3d2ce4b90..ec2d9e0e5 100644 --- a/packages/horizon/test/staking/thaw/thaw.t.sol +++ b/packages/horizon/test/staking/thaw/thaw.t.sol @@ -7,7 +7,6 @@ import { IHorizonStakingTypes } from "../../../contracts/interfaces/internal/IHo import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingThawTest is HorizonStakingTest { - function testThaw_Tokens( uint256 amount, uint64 thawingPeriod, @@ -15,12 +14,12 @@ contract HorizonStakingThawTest is HorizonStakingTest { ) public useIndexer useProvision(amount, 0, thawingPeriod) { thawAmount = bound(thawAmount, 1, amount); bytes32 expectedThawRequestId = keccak256( - abi.encodePacked(users.indexer, subgraphDataServiceAddress, uint256(0)) + abi.encodePacked(users.indexer, subgraphDataServiceAddress, users.indexer, uint256(0)) ); bytes32 thawRequestId = _createThawRequest(thawAmount); assertEq(thawRequestId, expectedThawRequestId); - ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + ThawRequest memory thawRequest = staking.getThawRequest(expectedThawRequestId); assertEq(thawRequest.shares, thawAmount); assertEq(thawRequest.thawingUntil, block.timestamp + thawingPeriod); } @@ -52,7 +51,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { uint64 thawingPeriod ) public useOperator useProvision(amount, 0, thawingPeriod) { bytes32 thawRequestId = _createThawRequest(amount); - + ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); assertEq(thawRequest.shares, amount); assertEq(thawRequest.thawingUntil, block.timestamp + thawingPeriod); @@ -64,7 +63,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { ) public useIndexer useProvision(amount, 0, thawingPeriod) { vm.startPrank(users.operator); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingNotAuthorized(address,address,address)", + "HorizonStakingNotAuthorized(address,address,address)", users.operator, users.indexer, subgraphDataServiceAddress @@ -96,7 +95,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { // vm.assume(thawAmount > 0); // vm.assume(amount / (MAX_THAW_REQUESTS + 1) > thawAmount); thawAmount = bound(thawAmount, 1, amount / (MAX_THAW_REQUESTS + 1)); - + for (uint256 i = 0; i < 100; i++) { _createThawRequest(thawAmount); } @@ -115,4 +114,4 @@ contract HorizonStakingThawTest is HorizonStakingTest { vm.expectRevert(expectedError); _createThawRequest(thawAmount); } -} \ No newline at end of file +} diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 9a66c7916..5a5598b47 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -216,7 +216,7 @@ contract SubgraphService is bytes32 subgraphDeploymentId = allocations.get(allocationId).subgraphDeploymentId; // release expired stake claims - _releaseStake(IGraphPayments.PaymentTypes.QueryFee, indexer, 0); + _releaseStake(indexer, 0); // Collect from GraphPayments PaymentCuts memory queryFeePaymentCuts = _getQueryFeePaymentCuts(subgraphDeploymentId); @@ -240,7 +240,7 @@ contract SubgraphService is // lock stake as economic security for fees uint256 tokensToLock = tokensCollected * stakeToFeesRatio; uint256 unlockTimestamp = block.timestamp + _disputeManager().getDisputePeriod(); - _lockStake(IGraphPayments.PaymentTypes.QueryFee, indexer, tokensToLock, unlockTimestamp); + _lockStake(indexer, tokensToLock, unlockTimestamp); // calculate service and curator cuts tokensCurators = tokensCollected.mulPPMRoundUp(queryFeePaymentCuts.curationCut); diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts index 1db083d76..a8e05c779 100644 --- a/packages/subgraph-service/hardhat.config.ts +++ b/packages/subgraph-service/hardhat.config.ts @@ -1,4 +1,4 @@ -// import '@nomicfoundation/hardhat-foundry' +import '@nomicfoundation/hardhat-foundry' import '@nomicfoundation/hardhat-toolbox' import 'hardhat-contract-sizer' import 'hardhat-storage-layout' @@ -8,26 +8,14 @@ import { HardhatUserConfig } from 'hardhat/config' const config: HardhatUserConfig = { solidity: { - compilers: [ - { - version: '0.8.26', - settings: { - viaIR: true, - optimizer: { - enabled: true, - runs: 200, - }, - metadata: { - useLiteralContent: true, - }, - outputSelection: { - '*': { - '*': ['storageLayout', 'metadata'], - }, - }, - }, + version: '0.8.26', + settings: { + viaIR: true, + optimizer: { + enabled: true, + runs: 200, }, - ], + }, }, paths: { artifacts: './build/contracts', diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol index c8ee45799..d7b205c5c 100644 --- a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol +++ b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol @@ -30,9 +30,6 @@ contract MockHorizonStaking { maxVerifierCut: maxVerifierCut, thawingPeriod: thawingPeriod, createdAt: uint64(block.timestamp), - firstThawRequestId: bytes32(0), - lastThawRequestId: bytes32(0), - nThawRequests: 0, maxVerifierCutPending: maxVerifierCut, thawingPeriodPending: thawingPeriod }); From c11b31e5afe3f7b57567d165f467ac801a125890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 28 May 2024 14:18:52 -0300 Subject: [PATCH 081/343] feat: make subgraph service and graph payments upgradeable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../DataServicePausableUpgradeable.sol | 36 ++++ .../contracts/payments/GraphPayments.sol | 21 +- .../payments/GraphPaymentsStorage.sol | 7 - packages/horizon/package.json | 1 + packages/horizon/remappings.txt | 1 + .../contracts/DisputeManager.sol | 26 ++- .../contracts/SubgraphService.sol | 29 +-- .../contracts/utilities/AllocationManager.sol | 14 +- .../utilities/AttestationManager.sol | 7 +- packages/subgraph-service/package.json | 1 + packages/subgraph-service/remappings.txt | 2 + .../test/DisputeManager.t.sol | 187 +++++++++--------- 12 files changed, 189 insertions(+), 143 deletions(-) create mode 100644 packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol delete mode 100644 packages/horizon/contracts/payments/GraphPaymentsStorage.sol diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol new file mode 100644 index 000000000..ad60c4c9f --- /dev/null +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.26; + +import { IDataServicePausable } from "../interfaces/IDataServicePausable.sol"; + +import { PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; +import { DataService } from "../DataService.sol"; + +abstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataService, IDataServicePausable { + mapping(address pauseGuardian => bool allowed) public pauseGuardians; + + modifier onlyPauseGuardian() { + require(pauseGuardians[msg.sender], DataServicePausableNotPauseGuardian(msg.sender)); + _; + } + + function pause() public onlyPauseGuardian whenNotPaused { + _pause(); + } + + function unpause() public onlyPauseGuardian whenPaused { + _unpause(); + } + + function __DataServicePausable_init() internal { + __Pausable_init_unchained(); + __DataServicePausable_init_unchained(); + } + + function __DataServicePausable_init_unchained() internal {} + + function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused { + pauseGuardians[_pauseGuardian] = _allowed; + emit PauseGuardianSet(_pauseGuardian, _allowed); + } +} diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index ea7ef45c8..4a95e2f4c 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -4,17 +4,17 @@ pragma solidity 0.8.26; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; -import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { MulticallUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { PPMMath } from "../libraries/PPMMath.sol"; import { GraphDirectory } from "../data-service/GraphDirectory.sol"; -import { GraphPaymentsStorageV1Storage } from "./GraphPaymentsStorage.sol"; -contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Storage, IGraphPayments { +contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, IGraphPayments { using TokenUtils for IGraphToken; using PPMMath for uint256; - + uint256 public immutable PROTOCOL_PAYMENT_CUT; event GraphPaymentsCollected( address indexed sender, address indexed receiver, @@ -25,16 +25,13 @@ contract GraphPayments is Multicall, GraphDirectory, GraphPaymentsStorageV1Stora uint256 tokensProtocol ); - // -- Events -- - - // -- Modifier -- - - // -- Parameters -- - - // -- Constructor -- - constructor(address controller, uint256 protocolPaymentCut) GraphDirectory(controller) { PROTOCOL_PAYMENT_CUT = protocolPaymentCut; + _disableInitializers(); + } + + function initialize() external initializer { + __Multicall_init(); } // collect funds from a sender, pay cuts and forward the rest to the receiver diff --git a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol b/packages/horizon/contracts/payments/GraphPaymentsStorage.sol deleted file mode 100644 index 409b42a80..000000000 --- a/packages/horizon/contracts/payments/GraphPaymentsStorage.sol +++ /dev/null @@ -1,7 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; - -contract GraphPaymentsStorageV1Storage { - // The graph protocol payment cut - uint256 public immutable PROTOCOL_PAYMENT_CUT; -} diff --git a/packages/horizon/package.json b/packages/horizon/package.json index 1118b1b19..e6001d96c 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -21,6 +21,7 @@ "@nomicfoundation/hardhat-toolbox": "^4.0.0", "@nomicfoundation/hardhat-verify": "^2.0.0", "@openzeppelin/contracts": "^5.0.2", + "@openzeppelin/contracts-upgradeable": "^5.0.2", "@typechain/ethers-v6": "^0.5.0", "@typechain/hardhat": "^9.0.0", "@types/chai": "^4.2.0", diff --git a/packages/horizon/remappings.txt b/packages/horizon/remappings.txt index 758c61447..aa8b4e6b7 100644 --- a/packages/horizon/remappings.txt +++ b/packages/horizon/remappings.txt @@ -4,3 +4,4 @@ ds-test/=lib/forge-std/lib/ds-test/src/ eth-gas-reporter/=node_modules/eth-gas-reporter/ hardhat/=node_modules/hardhat/ @openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ +@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 55c8c6622..178659120 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -12,7 +12,8 @@ import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol" import { Allocation } from "./libraries/Allocation.sol"; import { Attestation } from "./libraries/Attestation.sol"; -import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { GraphDirectory } from "@graphprotocol/horizon/contracts/data-service/GraphDirectory.sol"; import { DisputeManagerV1Storage } from "./DisputeManagerStorage.sol"; import { AttestationManager } from "./utilities/AttestationManager.sol"; @@ -40,7 +41,14 @@ import { AttestationManager } from "./utilities/AttestationManager.sol"; * Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated * to a EOA or DAO. */ -contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeManagerV1Storage, IDisputeManager { +contract DisputeManager is + Initializable, + OwnableUpgradeable, + GraphDirectory, + AttestationManager, + DisputeManagerV1Storage, + IDisputeManager +{ using TokenUtils for IGraphToken; using PPMMath for uint256; @@ -69,26 +77,28 @@ contract DisputeManager is Ownable, GraphDirectory, AttestationManager, DisputeM _; } - // -- Functions -- + constructor(address controller) GraphDirectory(controller) { + _disableInitializers(); + } /** * @dev Initialize this contract. - * @param controller Address of Graph Controller contract * @param arbitrator Arbitrator role * @param disputePeriod Dispute period in seconds * @param minimumDeposit Minimum deposit required to create a Dispute * @param fishermanRewardCut_ Percent of slashed funds for fisherman (ppm) * @param maxSlashingCut_ Maximum percentage of indexer stake that can be slashed (ppm) */ - constructor( - address controller, + function initialize( address arbitrator, uint64 disputePeriod, uint256 minimumDeposit, uint32 fishermanRewardCut_, uint32 maxSlashingCut_ - ) Ownable(msg.sender) GraphDirectory(controller) { - // Settings + ) external initializer { + __Ownable_init(msg.sender); + __AttestationManager_init(); + _setArbitrator(arbitrator); _setDisputePeriod(disputePeriod); _setMinimumDeposit(minimumDeposit); diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 5a5598b47..97fa8e119 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -6,8 +6,9 @@ import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPC import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; -import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; -import { DataServicePausable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausable.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { DataServicePausableUpgradeable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol"; import { DataService } from "@graphprotocol/horizon/contracts/data-service/DataService.sol"; import { DataServiceRescuable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceRescuable.sol"; import { DataServiceFees } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol"; @@ -21,9 +22,10 @@ import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; // TODO: contract needs to be upgradeable contract SubgraphService is - Ownable, + Initializable, + OwnableUpgradeable, DataService, - DataServicePausable, + DataServicePausableUpgradeable, DataServiceRescuable, DataServiceFees, Directory, @@ -53,15 +55,16 @@ contract SubgraphService is address graphController, address disputeManager, address tapVerifier, - address curation, - uint256 minimumProvisionTokens, - uint32 maximumDelegationRatio - ) - Ownable(msg.sender) - DataService(graphController) - Directory(address(this), tapVerifier, disputeManager, curation) - AllocationManager("SubgraphService", "1.0") - { + address curation + ) DataService(graphController) Directory(address(this), tapVerifier, disputeManager, curation) { + _disableInitializers(); + } + + function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external initializer { + __Ownable_init(msg.sender); + __DataServicePausable_init(); + __AllocationManager_init("SubgraphService", "1.0"); + _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max); _setDelegationRatioRange(type(uint32).min, maximumDelegationRatio); } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index ee0f5f2eb..3512336e3 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -8,13 +8,13 @@ import { AllocationManagerV1Storage } from "./AllocationManagerStorage.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; +import { EIP712Upgradeable } from "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol"; import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; -abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManagerV1Storage { +abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, AllocationManagerV1Storage { using ProvisionTracker for mapping(address => uint256); using Allocation for mapping(address => Allocation.State); using Allocation for Allocation.State; @@ -81,7 +81,12 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager error AllocationManagerAllocationSameSize(address allocationId, uint256 tokens); error AllocationManagerInvalidZeroPOI(); - constructor(string memory name, string memory version) EIP712(name, version) {} + function __AllocationManager_init(string memory name, string memory version) internal { + __EIP712_init(name, version); + __AllocationManager_init_unchained(name, version); + } + + function __AllocationManager_init_unchained(string memory name, string memory version) internal {} function setRewardsDestination(address rewardsDestination) external { _setRewardsDestination(msg.sender, rewardsDestination); @@ -284,7 +289,6 @@ abstract contract AllocationManager is EIP712, GraphDirectory, AllocationManager } function _encodeAllocationProof(address _indexer, address _allocationId) internal view returns (bytes32) { - return - EIP712._hashTypedDataV4(keccak256(abi.encode(EIP712_ALLOCATION_PROOF_TYPEHASH, _indexer, _allocationId))); + return _hashTypedDataV4(keccak256(abi.encode(EIP712_ALLOCATION_PROOF_TYPEHASH, _indexer, _allocationId))); } } diff --git a/packages/subgraph-service/contracts/utilities/AttestationManager.sol b/packages/subgraph-service/contracts/utilities/AttestationManager.sol index b68a6804d..535774c1a 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManager.sol @@ -16,8 +16,11 @@ abstract contract AttestationManager is AttestationManagerV1Storage { bytes32 private constant DOMAIN_VERSION_HASH = keccak256("0"); bytes32 private constant DOMAIN_SALT = 0xa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c2; - constructor() { - // EIP-712 domain separator + function __AttestationManager_init() internal { + __AttestationManager_init_unchained(); + } + + function __AttestationManager_init_unchained() internal { _domainSeparator = keccak256( abi.encode( DOMAIN_TYPE_HASH, diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 6e963c603..b591a4d41 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -22,6 +22,7 @@ "@nomicfoundation/hardhat-toolbox": "^4.0.0", "@nomicfoundation/hardhat-verify": "^2.0.0", "@openzeppelin/contracts": "^5.0.2", + "@openzeppelin/contracts-upgradeable": "^5.0.2", "@typechain/ethers-v6": "^0.5.0", "@typechain/hardhat": "^9.0.0", "@types/chai": "^4.2.0", diff --git a/packages/subgraph-service/remappings.txt b/packages/subgraph-service/remappings.txt index d9bed44ec..485676dc2 100644 --- a/packages/subgraph-service/remappings.txt +++ b/packages/subgraph-service/remappings.txt @@ -4,3 +4,5 @@ forge-std/=lib/forge-std/src/ ds-test/=lib/forge-std/lib/ds-test/src/ eth-gas-reporter/=node_modules/eth-gas-reporter/ hardhat/=node_modules/hardhat/ +@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ +@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ diff --git a/packages/subgraph-service/test/DisputeManager.t.sol b/packages/subgraph-service/test/DisputeManager.t.sol index b13fc8109..f11f0a051 100644 --- a/packages/subgraph-service/test/DisputeManager.t.sol +++ b/packages/subgraph-service/test/DisputeManager.t.sol @@ -24,21 +24,21 @@ contract DisputeManagerTest is Test { address governor; address arbitrator; - + uint256 indexerPrivateKey; address indexer; - + uint256 fishermanPrivateKey; address fisherman; - + uint256 allocationIDPrivateKey; address allocationID; - + uint64 disputePeriod = 300; // 5 minutes uint256 minimumDeposit = 100 ether; // 100 GRT uint32 fishermanRewardPercentage = 100000; // 10% uint32 maxSlashingPercentage = 500000; // 50% - + Controller controller; MockGRTToken graphToken; SubgraphService subgraphService; @@ -53,17 +53,17 @@ contract DisputeManagerTest is Test { indexerPrivateKey = 0xB1; indexer = vm.addr(indexerPrivateKey); - + fishermanPrivateKey = 0xC1; fisherman = vm.addr(fishermanPrivateKey); - + allocationIDPrivateKey = 0xD1; allocationID = vm.addr(allocationIDPrivateKey); graphToken = new MockGRTToken(); staking = new MockHorizonStaking(address(graphToken)); rewardsManager = new MockRewardsManager(); - + address tapVerifier = address(0xE3); address curation = address(0xE4); @@ -74,8 +74,8 @@ contract DisputeManagerTest is Test { controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); vm.stopPrank(); - disputeManager = new DisputeManager( - address(controller), + disputeManager = new DisputeManager(address(controller)); + disputeManager.initialize( arbitrator, disputePeriod, minimumDeposit, @@ -83,14 +83,8 @@ contract DisputeManagerTest is Test { maxSlashingPercentage ); - subgraphService = new SubgraphService( - address(controller), - address(disputeManager), - tapVerifier, - curation, - 1000 ether, - 16 - ); + subgraphService = new SubgraphService(address(controller), address(disputeManager), tapVerifier, curation); + subgraphService.initialize(1000 ether, 16); disputeManager.setSubgraphService(address(subgraphService)); } @@ -105,17 +99,9 @@ contract DisputeManagerTest is Test { bytes32 digest = subgraphService.encodeAllocationProof(indexer, _allocationID); (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); - subgraphService.register( - indexer, - abi.encode("url", "geoHash") - ); + subgraphService.register(indexer, abi.encode("url", "geoHash")); - bytes memory data = abi.encode( - subgraphDeployment, - tokens, - _allocationID, - abi.encodePacked(r, s, v) - ); + bytes memory data = abi.encode(subgraphDeployment, tokens, _allocationID, abi.encodePacked(r, s, v)); subgraphService.startService(indexer, data); vm.stopPrank(); } @@ -136,7 +122,7 @@ contract DisputeManagerTest is Test { subgraphDeploymentId: keccak256(abi.encodePacked("Subgraph Deployment ID")) }); bytes memory attestationData = createAtestationData(receipt, allocationIDPrivateKey); - + vm.startPrank(fisherman); graphToken.mint(fisherman, tokens); graphToken.approve(address(disputeManager), tokens); @@ -169,10 +155,13 @@ contract DisputeManagerTest is Test { return (_attestationData1, _attestationData2); } - function createAtestationData(Attestation.Receipt memory receipt, uint256 signer) private view returns (bytes memory attestationData) { + function createAtestationData( + Attestation.Receipt memory receipt, + uint256 signer + ) private view returns (bytes memory attestationData) { bytes32 digest = disputeManager.encodeReceipt(receipt); (uint8 v, bytes32 r, bytes32 s) = vm.sign(signer, digest); - + return abi.encodePacked(receipt.requestCID, receipt.responseCID, receipt.subgraphDeploymentId, r, s, v); } @@ -201,17 +190,18 @@ contract DisputeManagerTest is Test { bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - (bytes memory attestationData1, bytes memory attestationData2) = - createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); + (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); vm.prank(fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = - disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); assertTrue(disputeManager.isDisputeCreated(disputeID1), "Dispute 1 should be created."); assertTrue(disputeManager.isDisputeCreated(disputeID2), "Dispute 2 should be created."); } @@ -219,7 +209,7 @@ contract DisputeManagerTest is Test { function test_RevertWhen_DisputeAlreadyCreated() public { createProvisionAndAllocate(allocationID, 10000 ether); bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); - + // Create another dispute with different fisherman address otherFisherman = address(0x5); uint256 tokens = 200 ether; @@ -236,7 +226,11 @@ contract DisputeManagerTest is Test { // minimum deposit is 100 ether vm.startPrank(fisherman); graphToken.mint(fisherman, 50 ether); - bytes memory expectedError = abi.encodeWithSignature("DisputeManagerInsufficientDeposit(uint256,uint256)", 50 ether, 100 ether); + bytes memory expectedError = abi.encodeWithSignature( + "DisputeManagerInsufficientDeposit(uint256,uint256)", + 50 ether, + 100 ether + ); vm.expectRevert(expectedError); disputeManager.createIndexingDispute(allocationID, 50 ether); vm.stopPrank(); @@ -259,23 +253,22 @@ contract DisputeManagerTest is Test { bytes32 responseCID = keccak256(abi.encodePacked("Response CID")); bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - (bytes memory attestationData1, bytes memory attestationData2) = - createConflictingAttestations( - responseCID, - subgraphDeploymentId, - responseCID, - subgraphDeploymentId - ); + (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( + responseCID, + subgraphDeploymentId, + responseCID, + subgraphDeploymentId + ); vm.prank(fisherman); bytes memory expectedError = abi.encodeWithSignature( "DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", - requestCID, - responseCID, - subgraphDeploymentId, - requestCID, - responseCID, + requestCID, + responseCID, + subgraphDeploymentId, + requestCID, + responseCID, subgraphDeploymentId ); vm.expectRevert(expectedError); @@ -289,22 +282,21 @@ contract DisputeManagerTest is Test { bytes32 subgraphDeploymentId1 = keccak256(abi.encodePacked("Subgraph Deployment ID 1")); bytes32 subgraphDeploymentId2 = keccak256(abi.encodePacked("Subgraph Deployment ID 2")); - (bytes memory attestationData1, bytes memory attestationData2) = - createConflictingAttestations( - responseCID1, - subgraphDeploymentId1, - responseCID2, - subgraphDeploymentId2 - ); + (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( + responseCID1, + subgraphDeploymentId1, + responseCID2, + subgraphDeploymentId2 + ); vm.prank(fisherman); bytes memory expectedError = abi.encodeWithSignature( "DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", - requestCID, - responseCID1, - subgraphDeploymentId1, - requestCID, - responseCID2, + requestCID, + responseCID1, + subgraphDeploymentId1, + requestCID, + responseCID2, subgraphDeploymentId2 ); vm.expectRevert(expectedError); @@ -342,18 +334,19 @@ contract DisputeManagerTest is Test { bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - (bytes memory attestationData1, bytes memory attestationData2) = - createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); + (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); vm.prank(fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = - disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); - + (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); + vm.prank(arbitrator); disputeManager.acceptDispute(disputeID1, 5000 ether); @@ -411,21 +404,22 @@ contract DisputeManagerTest is Test { bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - (bytes memory attestationData1, bytes memory attestationData2) = - createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); + (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); vm.prank(fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = - disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); // skip to end of dispute period skip(disputePeriod + 1); - + vm.prank(fisherman); disputeManager.cancelDispute(disputeID1); @@ -466,18 +460,19 @@ contract DisputeManagerTest is Test { bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - (bytes memory attestationData1, bytes memory attestationData2) = - createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); + (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); vm.prank(fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = - disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); - + (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); + vm.prank(arbitrator); disputeManager.drawDispute(disputeID1); From 75c5b36a1d7b4bb6d95d5dbca76a10a10b7c0ea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 28 May 2024 14:56:26 -0300 Subject: [PATCH 082/343] chore: complete some interfaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/GraphDirectory.sol | 6 +++--- .../extensions/DataServiceFees.sol | 2 +- .../extensions/DataServicePausable.sol | 4 ++-- .../DataServicePausableUpgradeable.sol | 6 ++++-- .../contracts/interfaces/IGraphPayments.sol | 11 +++++++++++ .../contracts/interfaces/IPaymentsEscrow.sol | 5 +++++ .../internal/IHorizonStakingMain.sol | 18 ++++++++++++++---- .../contracts/payments/GraphPayments.sol | 9 --------- .../contracts/payments/PaymentsEscrow.sol | 18 +++++++++--------- .../contracts/staking/HorizonStaking.sol | 16 ++++++++-------- .../contracts/staking/HorizonStakingBase.sol | 2 +- .../staking/HorizonStakingStorage.sol | 4 ++-- .../contracts/DisputeManager.sol | 12 ++++++------ .../contracts/SubgraphService.sol | 10 +++++----- .../contracts/interfaces/IDisputeManager.sol | 14 ++++++++++---- .../contracts/interfaces/ISubgraphService.sol | 3 ++- .../contracts/utilities/AllocationManager.sol | 2 +- yarn.lock | 11 +++++++++++ 18 files changed, 95 insertions(+), 58 deletions(-) diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index decb73e21..a59200982 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -43,11 +43,11 @@ abstract contract GraphDirectory { ICuration private immutable GRAPH_CURATION; event GraphDirectoryInitialized( - IGraphToken graphToken, - IHorizonStaking graphStaking, + IGraphToken indexed graphToken, + IHorizonStaking indexed graphStaking, IGraphPayments graphPayments, IPaymentsEscrow graphEscrow, - IController graphController, + IController indexed graphController, IEpochManager graphEpochManager, IRewardsManager graphRewardsManager, ITokenGateway graphTokenGateway, diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 0e418503d..b8602eb2a 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -13,7 +13,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat using ProvisionTracker for mapping(address => uint256); using LinkedList for LinkedList.List; - function releaseStake(uint256 n) external virtual override { + function releaseStake(uint256 n) external virtual { _releaseStake(msg.sender, n); } diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index 43a09f3f2..df8c1c402 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -14,11 +14,11 @@ abstract contract DataServicePausable is Pausable, DataService, IDataServicePaus _; } - function pause() public onlyPauseGuardian whenNotPaused { + function pause() external onlyPauseGuardian whenNotPaused { _pause(); } - function unpause() public onlyPauseGuardian whenPaused { + function unpause() external onlyPauseGuardian whenPaused { _unpause(); } diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol index ad60c4c9f..a57087e0e 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol @@ -14,19 +14,21 @@ abstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataSer _; } - function pause() public onlyPauseGuardian whenNotPaused { + function pause() external onlyPauseGuardian whenNotPaused { _pause(); } - function unpause() public onlyPauseGuardian whenPaused { + function unpause() external onlyPauseGuardian whenPaused { _unpause(); } + // solhint-disable-next-line func-name-mixedcase function __DataServicePausable_init() internal { __Pausable_init_unchained(); __DataServicePausable_init_unchained(); } + // solhint-disable-next-line func-name-mixedcase function __DataServicePausable_init_unchained() internal {} function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused { diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 8c52b18be..c3889222f 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -9,10 +9,21 @@ interface IGraphPayments { IndexingRewards } + event GraphPaymentsCollected( + address indexed sender, + address indexed receiver, + address indexed dataService, + uint256 tokensReceiver, + uint256 tokensDelegationPool, + uint256 tokensDataService, + uint256 tokensProtocol + ); // -- Errors -- error GraphPaymentsInsufficientTokens(uint256 available, uint256 required); + function initialize() external; + // collect funds from a sender, pay cuts and forward the rest to the receiver function collect( PaymentTypes paymentType, diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 12b64cb87..7b39d77df 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -46,6 +46,11 @@ interface IPaymentsEscrow { error PaymentsEscrowInsufficientAllowance(uint256 current, uint256 required); error PaymentsEscrowInconsistentAllowance(uint256 current, uint256 required); error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens); + + function approveCollector(address dataService, uint256 thawingPeriod) external; + function thawCollector(address dataService) external; + function cancelThawCollector(address dataService) external; + function revokeCollector(address dataService) external; // Deposit funds into the escrow for a receiver function deposit(address receiver, uint256 tokens) external; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index d11d958b8..33e6ea8c4 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -72,7 +72,7 @@ interface IHorizonStakingMain is IHorizonStakingBase { event DelegationSlashingEnabled(bool enabled); - event AllowedLockedVerifierSet(address verifier, bool allowed); + event AllowedLockedVerifierSet(address indexed verifier, bool allowed); event TokensToDelegationPoolAdded(address indexed serviceProvider, address indexed verifier, uint256 tokens); @@ -96,12 +96,17 @@ interface IHorizonStakingMain is IHorizonStakingBase { /** * @dev Emitted when an operator is allowed or denied by a service provider for a particular data service */ - event OperatorSet(address indexed serviceProvider, address indexed operator, address verifier, bool allowed); + event OperatorSet( + address indexed serviceProvider, + address indexed operator, + address indexed verifier, + bool allowed + ); event DelegationFeeCutSet( address indexed serviceProvider, address indexed verifier, - IGraphPayments.PaymentTypes paymentType, + IGraphPayments.PaymentTypes indexed paymentType, uint256 feeCut ); @@ -119,10 +124,10 @@ interface IHorizonStakingMain is IHorizonStakingBase { error HorizonStakingVerifierNotAllowed(address verifier); error HorizonStakingVerifierTokensTooHigh(uint256 tokensVerifier, uint256 maxVerifierTokens); error HorizonStakingNotEnoughDelegation(uint256 tokensAvailable, uint256 tokensRequired); - error HorizonStakingStillThawing(uint256 until); error HorizonStakingInvalidZeroShares(); error HorizonStakingInvalidSharesAmount(uint256 sharesAvailable, uint256 sharesRequired); error HorizonStakingCallerIsServiceProvider(); + error HorizonStakingStillThawing(uint256 until); error HorizonStakingCannotFulfillThawRequest(); // deposit stake @@ -261,4 +266,9 @@ interface IHorizonStakingMain is IHorizonStakingBase { * @param verifier The verifier / data service on which they're claiming to act */ function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); + + function clearThawingPeriod() external; + function delegate(address serviceProvider, uint256 tokens) external; + function undelegate(address serviceProvider, uint256 shares) external; + function withdrawDelegated(address serviceProvider, address newServiceProvider) external; } diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 4a95e2f4c..274337af0 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -15,15 +15,6 @@ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, I using TokenUtils for IGraphToken; using PPMMath for uint256; uint256 public immutable PROTOCOL_PAYMENT_CUT; - event GraphPaymentsCollected( - address indexed sender, - address indexed receiver, - address indexed dataService, - uint256 tokensReceiver, - uint256 tokensDelegationPool, - uint256 tokensDataService, - uint256 tokensProtocol - ); constructor(address controller, uint256 protocolPaymentCut) GraphDirectory(controller) { PROTOCOL_PAYMENT_CUT = protocolPaymentCut; diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 19274123a..5b62863ec 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -52,7 +52,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // approve a data service to collect funds - function approveCollector(address dataService, uint256 tokens) external { + function approveCollector(address dataService, uint256 tokens) external override { Collector storage collector = authorizedCollectors[msg.sender][dataService]; require(tokens > collector.allowance, PaymentsEscrowInconsistentAllowance(collector.allowance, tokens)); @@ -62,7 +62,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // thaw a data service's collector authorization - function thawCollector(address dataService) external { + function thawCollector(address dataService) external override { authorizedCollectors[msg.sender][dataService].thawEndTimestamp = block.timestamp + REVOKE_COLLECTOR_THAWING_PERIOD; @@ -70,7 +70,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // cancel thawing a data service's collector authorization - function cancelThawCollector(address dataService) external { + function cancelThawCollector(address dataService) external override { require(authorizedCollectors[msg.sender][dataService].thawEndTimestamp != 0, PaymentsEscrowNotThawing()); authorizedCollectors[msg.sender][dataService].thawEndTimestamp = 0; @@ -78,7 +78,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // revoke authorized collector - function revokeCollector(address dataService) external { + function revokeCollector(address dataService) external override { Collector storage collector = authorizedCollectors[msg.sender][dataService]; require(collector.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); @@ -92,14 +92,14 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // Deposit funds into the escrow for a receiver - function deposit(address receiver, uint256 tokens) external { + function deposit(address receiver, uint256 tokens) external override { escrowAccounts[msg.sender][receiver].balance += tokens; _graphToken().pullTokens(msg.sender, tokens); emit Deposit(msg.sender, receiver, tokens); } // Requests to thaw a specific amount of escrow from a receiver's escrow account - function thaw(address receiver, uint256 tokens) external { + function thaw(address receiver, uint256 tokens) external override { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; if (tokens == 0) { // if amount thawing is zero and requested amount is zero this is an invalid request. @@ -124,7 +124,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // Withdraws all thawed escrow from a receiver's escrow account - function withdraw(address receiver) external { + function withdraw(address receiver) external override { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; require(account.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); require( @@ -150,7 +150,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { uint256 tokens, address dataService, uint256 tokensDataService - ) external { + ) external override { // Check if collector is authorized and has enough funds Collector storage collector = authorizedCollectors[payer][msg.sender]; require(collector.authorized, PaymentsEscrowCollectorNotAuthorized(payer, msg.sender)); @@ -182,7 +182,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { } // Get the balance of a sender-receiver pair - function getBalance(address payer, address receiver) external view returns (uint256) { + function getBalance(address payer, address receiver) external view override returns (uint256) { EscrowAccount storage account = escrowAccounts[payer][receiver]; return account.balance - account.tokensThawing; } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index e72027cbb..4c779bda5 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -320,24 +320,24 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { IGraphPayments.PaymentTypes paymentType, uint256 feeCut ) external override notPaused onlyAuthorized(serviceProvider, verifier) { - delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; + _delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); } // For backwards compatibility, delegates to the subgraph data service // (Note this one doesn't have splippage/rounding protection!) - function delegate(address serviceProvider, uint256 tokens) external notPaused { + function delegate(address serviceProvider, uint256 tokens) external override notPaused { _graphToken().pullTokens(msg.sender, tokens); _delegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, tokens, 0); } // For backwards compatibility, undelegates from the subgraph data service - function undelegate(address serviceProvider, uint256 shares) external notPaused { + function undelegate(address serviceProvider, uint256 shares) external override notPaused { _undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares); } // For backwards compatibility, withdraws delegated tokens from the subgraph data service - function withdrawDelegated(address serviceProvider, address newServiceProvider) external notPaused { + function withdrawDelegated(address serviceProvider, address newServiceProvider) external override notPaused { _withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0, 0); } @@ -396,7 +396,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { tokensToSlash = tokensToSlash - providerTokensSlashed; if (tokensToSlash > 0) { DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); - if (delegationSlashingEnabled) { + if (_delegationSlashingEnabled) { require(pool.tokens >= tokensToSlash, HorizonStakingNotEnoughDelegation(pool.tokens, tokensToSlash)); _graphToken().burnTokens(tokensToSlash); uint256 delegationFractionSlashed = (tokensToSlash * FIXED_POINT_PRECISION) / pool.tokens; @@ -448,18 +448,18 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * GOVERNANCE */ - function setAllowedLockedVerifier(address verifier, bool allowed) external onlyGovernor { + function setAllowedLockedVerifier(address verifier, bool allowed) external override onlyGovernor { _allowedLockedVerifiers[verifier] = allowed; emit AllowedLockedVerifierSet(verifier, allowed); } function setDelegationSlashingEnabled(bool enabled) external override onlyGovernor { - delegationSlashingEnabled = enabled; + _delegationSlashingEnabled = enabled; emit DelegationSlashingEnabled(enabled); } // To be called at the end of the transition period, to set the deprecated thawing period to 0 - function clearThawingPeriod() external onlyGovernor { + function clearThawingPeriod() external override onlyGovernor { __DEPRECATED_thawingPeriod = 0; emit ThawingPeriodCleared(); } diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 27b8e10e3..81d4b061e 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -121,7 +121,7 @@ abstract contract HorizonStakingBase is address verifier, IGraphPayments.PaymentTypes paymentType ) external view override returns (uint256) { - return delegationFeeCut[serviceProvider][verifier][paymentType]; + return _delegationFeeCut[serviceProvider][verifier][paymentType]; } // provisioned tokens from delegators that are not being thawed diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index 8d147866a..c69bbca51 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -135,7 +135,7 @@ abstract contract HorizonStakingV1Storage { /// (based on stake vs delegated stake proportion). /// The cuts are applied in GraphPayments so apply to all data services that use it. mapping(address serviceProvider => mapping(address verifier => mapping(IGraphPayments.PaymentTypes paymentType => uint256 feeCut))) - public delegationFeeCut; + internal _delegationFeeCut; mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _thawRequests; @@ -147,7 +147,7 @@ abstract contract HorizonStakingV1Storage { internal _operatorAuth; // governance enables or disables delegation slashing with this flag - bool public delegationSlashingEnabled; + bool internal _delegationSlashingEnabled; // delegation pools for each service provider and verifier mapping(address serviceProvider => mapping(address verifier => IHorizonStakingTypes.DelegationPoolInternal delegationPool)) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 178659120..e85fb54d7 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -95,7 +95,7 @@ contract DisputeManager is uint256 minimumDeposit, uint32 fishermanRewardCut_, uint32 maxSlashingCut_ - ) external initializer { + ) external override initializer { __Ownable_init(msg.sender); __AttestationManager_init(); @@ -315,7 +315,7 @@ contract DisputeManager is * @notice Update the subgraph service to `_subgraphService` * @param subgraphService The address of the subgraph service contract */ - function setSubgraphService(address subgraphService) external onlyOwner { + function setSubgraphService(address subgraphService) external override onlyOwner { _setSubgraphService(subgraphService); } @@ -327,7 +327,7 @@ contract DisputeManager is * @param receipt Receipt returned by indexer and submitted by fisherman * @return Message hash used to sign the receipt */ - function encodeReceipt(Attestation.Receipt memory receipt) external view returns (bytes32) { + function encodeReceipt(Attestation.Receipt memory receipt) external view override returns (bytes32) { return _encodeReceipt(receipt); } @@ -335,7 +335,7 @@ contract DisputeManager is * @dev Get the verifier cut. * @return Verifier cut in percentage (ppm) */ - function getVerifierCut() external view returns (uint32) { + function getVerifierCut() external view override returns (uint32) { return fishermanRewardCut; } @@ -343,14 +343,14 @@ contract DisputeManager is * @dev Get the dispute period. * @return Dispute period in seconds */ - function getDisputePeriod() external view returns (uint64) { + function getDisputePeriod() external view override returns (uint64) { return disputePeriod; } function areConflictingAttestations( Attestation.State memory attestation1, Attestation.State memory attestation2 - ) external pure returns (bool) { + ) external pure override returns (bool) { return Attestation.areConflicting(attestation1, attestation2); } diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 97fa8e119..29dc8e9e1 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -60,7 +60,7 @@ contract SubgraphService is _disableInitializers(); } - function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external initializer { + function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external override initializer { __Ownable_init(msg.sender); __DataServicePausable_init(); __AllocationManager_init("SubgraphService", "1.0"); @@ -169,11 +169,11 @@ contract SubgraphService is address indexer, address allocationId, bytes32 subgraphDeploymentID - ) external onlyOwner { + ) external override onlyOwner { _migrateLegacyAllocation(indexer, allocationId, subgraphDeploymentID); } - function setPauseGuardian(address pauseGuardian, bool allowed) external onlyOwner { + function setPauseGuardian(address pauseGuardian, bool allowed) external override onlyOwner { _setPauseGuardian(pauseGuardian, allowed); } @@ -193,11 +193,11 @@ contract SubgraphService is ); } - function getLegacyAllocation(address allocationId) external view returns (LegacyAllocation.State memory) { + function getLegacyAllocation(address allocationId) external view override returns (LegacyAllocation.State memory) { return legacyAllocations[allocationId]; } - function encodeAllocationProof(address indexer, address allocationId) external view returns (bytes32) { + function encodeAllocationProof(address indexer, address allocationId) external view override returns (bytes32) { return _encodeAllocationProof(indexer, allocationId); } diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index a72956a29..27bd0418f 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -34,7 +34,7 @@ interface IDisputeManager { } // -- Events -- - event ArbitratorSet(address arbitrator); + event ArbitratorSet(address indexed arbitrator); event DisputePeriodSet(uint64 disputePeriod); event MinimumDepositSet(uint256 minimumDeposit); event MaxSlashingCutSet(uint32 maxSlashingCut); @@ -131,9 +131,13 @@ interface IDisputeManager { bytes32 subgraphDeploymentId2 ); - // -- Attestation -- - - // -- Configuration -- + function initialize( + address arbitrator, + uint64 disputePeriod, + uint256 minimumDeposit, + uint32 fishermanRewardCut, + uint32 maxSlashingCut + ) external; function setDisputePeriod(uint64 disputePeriod) external; @@ -180,4 +184,6 @@ interface IDisputeManager { Attestation.State memory attestation1, Attestation.State memory attestation2 ) external pure returns (bool); + + function setSubgraphService(address subgraphService) external; } diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 3bf6ed711..868e63fca 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -20,7 +20,7 @@ interface ISubgraphService is IDataServiceFees { } event QueryFeesCollected( - address serviceProvider, + address indexed serviceProvider, uint256 tokensCollected, uint256 tokensCurators, uint256 tokensSubgraphService @@ -32,6 +32,7 @@ interface ISubgraphService is IDataServiceFees { error SubgraphServiceIndexerNotRegistered(address indexer); error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensCollected); + function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external; function resizeAllocation(address indexer, address allocationId, uint256 tokens) external; function migrateLegacyAllocation(address indexer, address allocationId, bytes32 subgraphDeploymentID) external; diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 3512336e3..0e67014dc 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -72,7 +72,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca bytes32 indexed subgraphDeploymentId ); - event RewardsDestinationSet(address indexed indexer, address rewardsDestination); + event RewardsDestinationSet(address indexed indexer, address indexed rewardsDestination); error AllocationManagerInvalidAllocationProof(address signer, address allocationId); error AllocationManagerInvalidAllocationId(); diff --git a/yarn.lock b/yarn.lock index 98c24bbfa..29b385618 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2922,6 +2922,7 @@ __metadata: "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" "@nomicfoundation/hardhat-verify": "npm:^2.0.0" "@openzeppelin/contracts": "npm:^5.0.2" + "@openzeppelin/contracts-upgradeable": "npm:^5.0.2" "@typechain/ethers-v6": "npm:^0.5.0" "@typechain/hardhat": "npm:^9.0.0" "@types/chai": "npm:^4.2.0" @@ -3011,6 +3012,7 @@ __metadata: "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" "@nomicfoundation/hardhat-verify": "npm:^2.0.0" "@openzeppelin/contracts": "npm:^5.0.2" + "@openzeppelin/contracts-upgradeable": "npm:^5.0.2" "@typechain/ethers-v6": "npm:^0.5.0" "@typechain/hardhat": "npm:^9.0.0" "@types/chai": "npm:^4.2.0" @@ -4749,6 +4751,15 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts-upgradeable@npm:^5.0.2": + version: 5.0.2 + resolution: "@openzeppelin/contracts-upgradeable@npm:5.0.2" + peerDependencies: + "@openzeppelin/contracts": 5.0.2 + checksum: 0bd47a4fa0ba8084c1df9573968ff02387bc21514d846b5feb4ad42f90f3ba26bb1e40f17f03e4fa24ffbe473b9ea06c137283297884ab7d5b98d2c112904dc9 + languageName: node + linkType: hard + "@openzeppelin/contracts@npm:^3.3.0-solc-0.7, @openzeppelin/contracts@npm:^3.4.1": version: 3.4.2 resolution: "@openzeppelin/contracts@npm:3.4.2" From a2c8b38f9b5acae10d12b35ca8d09b8c9acda9a8 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Mon, 27 May 2024 19:12:52 -0300 Subject: [PATCH 083/343] fix: slashing horizon delegation --- .../contracts/staking/HorizonStaking.sol | 5 +- .../horizon/test/staking/slash/slash.t.sol | 82 +++++++++++++------ 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 4c779bda5..1317de454 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -363,7 +363,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { ) external override notPaused { address verifier = msg.sender; Provision storage prov = _provisions[serviceProvider][verifier]; - require(prov.tokens >= tokens, HorizonStakingInsufficientTokens(prov.tokens, tokens)); + DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); + uint256 availableTokens = prov.tokens + pool.tokens; + require(availableTokens >= tokens, HorizonStakingInsufficientTokens(prov.tokens, tokens)); uint256 tokensToSlash = tokens; uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); @@ -395,7 +397,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { tokensToSlash = tokensToSlash - providerTokensSlashed; if (tokensToSlash > 0) { - DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); if (_delegationSlashingEnabled) { require(pool.tokens >= tokensToSlash, HorizonStakingNotEnoughDelegation(pool.tokens, tokensToSlash)); _graphToken().burnTokens(tokensToSlash); diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 9a0951f23..f455ea041 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -7,11 +7,11 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingSlashTest is HorizonStakingTest { - modifier useDelegationSlashingDisabled() { + modifier useDelegationSlashing(bool enabled) { address msgSender; (, msgSender,) = vm.readCallers(); vm.startPrank(users.governor); - staking.setDelegationSlashingEnabled(false); + staking.setDelegationSlashingEnabled(enabled); vm.startPrank(msgSender); _; } @@ -41,33 +41,63 @@ contract HorizonStakingSlashTest is HorizonStakingTest { assertEq(verifierTokens, verifierCutAmount); } - // TODO: Should be re-enabled when slashin is fixed to count for delegated tokens - // function testSlash_DelegationDisabled_SlashingOverProvisionTokens( - // uint256 amount, - // uint256 slashAmount, - // uint256 verifierCutAmount, - // uint256 delegationAmount - // ) public useIndexer useProvision(amount, 100000, 0) useDelegationSlashingDisabled { - // vm.assume(slashAmount > amount); - // vm.assume(delegationAmount > 0); - // uint32 delegationRatio = 5; - - // vm.stopPrank(); - // vm.startPrank(users.delegator); - // _delegate(delegationAmount); - - // vm.startPrank(subgraphDataServiceAddress); - // _slash(slashAmount, verifierCutAmount); + function testSlash_DelegationDisabled_SlashingOverProvisionTokens( + uint256 amount, + uint256 slashAmount, + uint256 verifierCutAmount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(false) { + // TODO: changePrank? + vm.stopPrank(); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); + verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); + + vm.startPrank(users.delegator); + _delegate(delegationAmount); + + vm.startPrank(subgraphDataServiceAddress); + _slash(slashAmount, verifierCutAmount); + + uint256 provisionProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionProviderTokens, 0 ether); + + uint256 verifierTokens = token.balanceOf(address(subgraphDataServiceAddress)); + assertEq(verifierTokens, verifierCutAmount); + + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + // No slashing occurred for delegation + assertEq(delegatedTokens, delegationAmount); + } + + function testSlash_DelegationEnabled_SlashingOverProvisionTokens( + uint256 amount, + uint256 slashAmount, + uint256 verifierCutAmount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(true) { + // TODO: changePrank? + vm.stopPrank(); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); + verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); + + vm.startPrank(users.delegator); + _delegate(delegationAmount); + + vm.startPrank(subgraphDataServiceAddress); + _slash(slashAmount, verifierCutAmount); - // uint256 provisionProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); - // assertEq(provisionProviderTokens, 0 ether); + uint256 provisionProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionProviderTokens, 0 ether); - // uint256 verifierTokens = token.balanceOf(address(subgraphDataServiceAddress)); - // assertEq(verifierTokens, verifierCutAmount); + uint256 verifierTokens = token.balanceOf(address(subgraphDataServiceAddress)); + assertEq(verifierTokens, verifierCutAmount); - // uint256 delegatedTokens = staking.getTokensAvailable(users.indexer, subgraphDataServiceAddress, delegationRatio); - // assertEq(delegatedTokens, delegationAmount); - // } + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + uint256 slashedDelegation = slashAmount - amount; + assertEq(delegatedTokens, delegationAmount - slashedDelegation); + } function testSlash_RevertWhen_NoProvision( uint256 amount, From 7bea04735ff7cd06e90287ea0a2bb35dbda20d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 28 May 2024 17:52:36 -0300 Subject: [PATCH 084/343] docs: add natspec to horizon staking base contract MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../internal/IHorizonStakingBase.sol | 172 ++++++++++----- .../internal/IHorizonStakingExtension.sol | 9 + .../internal/IHorizonStakingMain.sol | 23 ++ .../internal/IHorizonStakingTypes.sol | 47 ++-- .../contracts/staking/HorizonStaking.sol | 10 +- .../contracts/staking/HorizonStakingBase.sol | 201 +++++++++++------- .../staking/HorizonStakingExtension.sol | 13 +- .../horizon/test/staking/HorizonStaking.t.sol | 2 +- 8 files changed, 323 insertions(+), 154 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index c8dea3da6..563ba258f 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -7,91 +7,165 @@ import { IGraphPayments } from "../IGraphPayments.sol"; import { LinkedList } from "../../libraries/LinkedList.sol"; +/** + * @title Interface for the {HorizonStakingBase} contract. + * @dev Provides getters for {HorizonStaking} and {HorizonStakingExtension} storage variables. + * + * Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision + * functions take `serviceProvider` and `verifier` addresses. + */ interface IHorizonStakingBase { /** - * @dev Emitted when `serviceProvider` stakes `tokens` amount. - * @dev TODO(after transition period): move to IHorizonStakingMain + * @notice Emitted when a service provider stakes tokens. + * @dev TODO: After transition period move to IHorizonStakingMain. Temporarily it + * needs to be here since it's emitted by {_stake} which is used by both {HorizonStaking} + * and {HorizonStakingExtension}. + * @param serviceProvider The address of the service provider. + * @param tokens The amount of tokens staked. */ event StakeDeposited(address indexed serviceProvider, uint256 tokens); /** - * @dev Emitted when `delegator` delegated `tokens` to the `serviceProvider`, the delegator - * gets `shares` for the delegation pool proportionally to the tokens staked. - * This event is here for backwards compatibility, the tokens are delegated - * on the subgraph data service provision. - * @dev TODO(after transition period): move to IHorizonStakingMain + * @notice Gets the details of a service provider. + * @param serviceProvider The address of the service provider. */ - event StakeDelegated(address indexed serviceProvider, address indexed delegator, uint256 tokens, uint256 shares); - - event ThawRequestCreated( - address indexed serviceProvider, - address indexed verifier, - address indexed owner, - uint256 shares, - uint64 thawingUntil, - bytes32 thawRequestId - ); - event ThawRequestFulfilled(bytes32 indexed thawRequestId, uint256 tokens, uint256 shares, uint64 thawingUntil); - event ThawRequestsFulfilled( - address indexed serviceProvider, - address indexed verifier, - address indexed owner, - uint256 thawRequestsFulfilled, - uint256 tokens - ); - - error HorizonStakingNothingThawing(); - error HorizonStakingTooManyThawRequests(); - - function getStake(address serviceProvider) external view returns (uint256); - - function getDelegatedTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); - - function getTokensAvailable( - address serviceProvider, - address verifier, - uint32 delegationRatio - ) external view returns (uint256); - function getServiceProvider( address serviceProvider ) external view returns (IHorizonStakingTypes.ServiceProvider memory); - function getMaxThawingPeriod() external view returns (uint64); + /** + * @notice Gets the stake of a service provider. + * @param serviceProvider The address of the service provider. + * @return The amount of tokens staked. + */ + function getStake(address serviceProvider) external view returns (uint256); + /** + * @notice Gets the service provider's idle stake which is the stake that is not being + * used for any provision. Note that this only includes service provider's self stake. + * @param serviceProvider The address of the service provider. + * @return The amount of tokens that are idle. + */ + function getIdleStake(address serviceProvider) external view returns (uint256); + + /** + * @notice Gets the details of delegation pool. + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + * @return The delegation pool details. + */ function getDelegationPool( address serviceProvider, address verifier ) external view returns (IHorizonStakingTypes.DelegationPool memory); + /** + * @notice Gets the details of a delegation. + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + * @param delegator The address of the delegator. + * @return The delegation details. + */ function getDelegation( - address delegator, address serviceProvider, - address verifier + address verifier, + address delegator ) external view returns (IHorizonStakingTypes.Delegation memory); - function getThawRequest(bytes32 thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory); + /** + * @notice Gets the delegation fee cut for a payment type. + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + * @param paymentType The payment type as defined by {IGraphPayments.PaymentTypes}. + * @return The delegation fee cut in PPM. + */ + function getDelegationFeeCut( + address serviceProvider, + address verifier, + IGraphPayments.PaymentTypes paymentType + ) external view returns (uint256); + /** + * @notice Gets the details of a provision. + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + * @return The provision details. + */ function getProvision( address serviceProvider, address verifier ) external view returns (IHorizonStakingTypes.Provision memory); - function getDelegationFeeCut( + /** + * @notice Gets the tokens available in a provision. + * Tokens available are the tokens in a provision that are not thawing. Includes service + * provider's and delegator's stake. + * + * Allows specifying a `delegationRatio` which caps the amount of delegated tokens that are + * considered available. + * + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + * @param delegationRatio The delegation ratio. + * @return The amount of tokens available. + */ + function getTokensAvailable( address serviceProvider, address verifier, - IGraphPayments.PaymentTypes paymentType + uint32 delegationRatio ) external view returns (uint256); - // staked tokens that are currently not provisioned, aka idle stake - // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address serviceProvider) external view returns (uint256 tokens); - + /** + * @notice Gets the service provider's tokens available in a provision. + * @dev Calculated as the tokens available minus the tokens thawing. + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + * @return The amount of tokens available. + */ function getProviderTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); + /** + * @notice Gets the delegator's tokens available in a provision. + * @dev Calculated as the tokens available minus the tokens thawing. + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + * @return The amount of tokens available. + */ + function getDelegatedTokensAvailable(address serviceProvider, address verifier) external view returns (uint256); + + /** + * @notice Gets a thaw request. + * @param thawRequestId The id of the thaw request. + * @return The thaw request details. + */ + function getThawRequest(bytes32 thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory); + + /** + * @notice Gets the metadata of a thaw request list. + * Service provider and delegators each have their own thaw request list per provision. + * Metadata includes the head and tail of the list, plus the total number of thaw requests. + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + * @param owner The owner of the thaw requests. Use either the service provider or delegator address. + * @return The thaw requests list metadata. + */ function getThawRequestList( address serviceProvider, address verifier, address owner ) external view returns (LinkedList.List memory); + + /** + * @notice Gets the amount of thawed tokens for a given provision. + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + * @param owner The owner of the thaw requests. Use either the service provider or delegator address. + * @return The amount of thawed tokens. + */ + function getThawedTokens(address serviceProvider, address verifier, address owner) external view returns (uint256); + + /** + * @notice Gets the maximum allowed thawing period for a provision. + */ + function getMaxThawingPeriod() external view returns (uint64); } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index d09bbc3c3..4d7518ec4 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -40,6 +40,15 @@ interface IHorizonStakingExtension { Closed } + /** + * @notice Emitted when a delegator delegates through the Graph Token Gateway using the transfer tools. + * @dev TODO(after transfer tools): delete + * @param serviceProvider The address of the service provider. + * @param delegator The address of the delegator. + * @param tokens The amount of tokens delegated. + */ + event StakeDelegated(address indexed serviceProvider, address indexed delegator, uint256 tokens, uint256 shares); + /** * @dev Emitted when `indexer` close an allocation in `epoch` for `allocationID`. * An amount of `tokens` get unallocated from `subgraphDeploymentID`. diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 33e6ea8c4..cd53cb613 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -6,6 +6,23 @@ import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; interface IHorizonStakingMain is IHorizonStakingBase { + event ThawRequestCreated( + address indexed serviceProvider, + address indexed verifier, + address indexed owner, + uint256 shares, + uint64 thawingUntil, + bytes32 thawRequestId + ); + event ThawRequestFulfilled(bytes32 indexed thawRequestId, uint256 tokens, uint256 shares, uint64 thawingUntil); + event ThawRequestsFulfilled( + address indexed serviceProvider, + address indexed verifier, + address indexed owner, + uint256 thawRequestsFulfilled, + uint256 tokens + ); + /** * @dev Emitted when `serviceProvider` withdraws `tokens` amount. */ @@ -130,6 +147,9 @@ interface IHorizonStakingMain is IHorizonStakingBase { error HorizonStakingStillThawing(uint256 until); error HorizonStakingCannotFulfillThawRequest(); + error HorizonStakingNothingThawing(); + error HorizonStakingTooManyThawRequests(); + // deposit stake function stake(uint256 tokens) external; @@ -268,7 +288,10 @@ interface IHorizonStakingMain is IHorizonStakingBase { function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); function clearThawingPeriod() external; + function delegate(address serviceProvider, uint256 tokens) external; + function undelegate(address serviceProvider, uint256 shares) external; + function withdrawDelegated(address serviceProvider, address newServiceProvider) external; } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index 13c64d37d..0b59e0b8c 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.26; // TODO: create custom var-name-mixedcase -/* solhint-disable var-name-mixedcase */ interface IHorizonStakingTypes { struct Provision { @@ -31,27 +30,45 @@ interface IHorizonStakingTypes { uint256 tokensProvisioned; } - struct DelegationPoolInternal { - uint32 __DEPRECATED_cooldownBlocks; // solhint-disable-line var-name-mixedcase - uint32 __DEPRECATED_indexingRewardCut; // in PPM - uint32 __DEPRECATED_queryFeeCut; // in PPM - uint256 __DEPRECATED_updatedAtBlock; // Block when the pool was last updated + // the new "Indexer" struct + struct ServiceProviderInternal { + // Tokens on the Service Provider stake (staked by the provider) + uint256 tokensStaked; + // Tokens used in allocations + uint256 __DEPRECATED_tokensAllocated; // solhint-disable-line graph/leading-underscore + // Tokens locked for withdrawal subject to thawing period + uint256 __DEPRECATED_tokensLocked; + // Block when locked tokens can be withdrawn + uint256 __DEPRECATED_tokensLockedUntil; + // tokens used in a provision + uint256 tokensProvisioned; + } + + struct DelegationPool { uint256 tokens; // Total tokens as pool reserves uint256 shares; // Total shares minted in the pool - mapping(address => Delegation) delegators; // Mapping of delegator => Delegation uint256 tokensThawing; // Tokens thawing in the pool uint256 sharesThawing; // Shares representing the thawing tokens } - struct DelegationPool { + struct DelegationPoolInternal { + uint32 __DEPRECATED_cooldownBlocks; + uint32 __DEPRECATED_indexingRewardCut; // in PPM + uint32 __DEPRECATED_queryFeeCut; // in PPM + uint256 __DEPRECATED_updatedAtBlock; // Block when the pool was last updated uint256 tokens; // Total tokens as pool reserves uint256 shares; // Total shares minted in the pool + mapping(address => DelegationInternal) delegators; // Mapping of delegator => Delegation uint256 tokensThawing; // Tokens thawing in the pool uint256 sharesThawing; // Shares representing the thawing tokens } struct Delegation { uint256 shares; // Shares owned by a delegator in the pool + } + + struct DelegationInternal { + uint256 shares; // Shares owned by a delegator in the pool uint256 __DEPRECATED_tokensLocked; // Tokens locked for undelegation uint256 __DEPRECATED_tokensLockedUntil; // Epoch when locked tokens can be withdrawn } @@ -64,18 +81,4 @@ interface IHorizonStakingTypes { // id of the next thaw request in the linked list bytes32 next; } - - // the new "Indexer" struct - struct ServiceProviderInternal { - // Tokens on the Service Provider stake (staked by the provider) - uint256 tokensStaked; - // Tokens used in allocations - uint256 __DEPRECATED_tokensAllocated; // solhint-disable-line graph/leading-underscore - // Tokens locked for withdrawal subject to thawing period - uint256 __DEPRECATED_tokensLocked; - // Block when locked tokens can be withdrawn - uint256 __DEPRECATED_tokensLockedUntil; - // tokens used in a provision - uint256 tokensProvisioned; - } } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 4c779bda5..939200cf4 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -18,8 +18,10 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; * @dev This contract is the main Staking contract in The Graph protocol after the Horizon upgrade. * It is designed to be deployed as an upgrade to the L2Staking contract from the legacy contracts * package. - * It uses a HorizonStakingExtension contract to implement the full IHorizonStaking interface through delegatecalls. - * This is due to the contract size limit on Arbitrum (24kB like mainnet). + * @dev It uses a HorizonStakingExtension contract to implement the full IHorizonStaking interface through delegatecalls. + * This is due to the contract size limit on Arbitrum (24kB). The extension contract contains functionality to support + * the legacy staking functions and the transfer tools. Both can be eventually safely removed without affecting + * the main staking contract. */ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { using TokenUtils for IGraphToken; @@ -693,7 +695,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { ); DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); - Delegation storage delegation = pool.delegators[msg.sender]; + DelegationInternal storage delegation = pool.delegators[msg.sender]; // Calculate shares to issue uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); @@ -710,7 +712,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { function _undelegate(address _serviceProvider, address _verifier, uint256 _shares) private returns (bytes32) { require(_shares > 0, HorizonStakingInvalidZeroShares()); DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); - Delegation storage delegation = pool.delegators[msg.sender]; + DelegationInternal storage delegation = pool.delegators[msg.sender]; require(delegation.shares >= _shares, HorizonStakingInvalidSharesAmount(delegation.shares, _shares)); uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 81d4b061e..e338b9e03 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -15,10 +15,9 @@ import { Managed } from "./utilities/Managed.sol"; import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; /** - * @title L2Staking contract - * @dev This contract is the L2 variant of the Staking contract. It adds a function - * to receive an service provider's stake or delegation from L1. Note that this contract inherits Staking, - * which uses a StakingExtension contract to implement the full IStaking interface through delegatecalls. + * @title HorizonStakingBase contract + * @dev This contract is the base staking contract, to be inherited by HorizonStaking and HorizonStakingExtension. + * It implements all storage getters for both internal and external use. */ abstract contract HorizonStakingBase is Multicall, @@ -44,28 +43,10 @@ abstract contract HorizonStakingBase is revert("RECEIVE_ETH_NOT_ALLOWED"); } - // total staked tokens to the provider - // `ServiceProvider.tokensStaked - function getStake(address serviceProvider) external view override returns (uint256) { - return _serviceProviders[serviceProvider].tokensStaked; - } - - // provisioned tokens that are not being thawed (including provider tokens and delegation) - function getTokensAvailable( - address serviceProvider, - address verifier, - uint32 delegationRatio - ) external view override returns (uint256) { - uint256 providerTokens = _provisions[serviceProvider][verifier].tokens; - uint256 providerThawingTokens = _provisions[serviceProvider][verifier].tokensThawing; - uint256 tokensDelegatedMax = (providerTokens - providerThawingTokens) * (uint256(delegationRatio)); - uint256 tokensDelegatedCapacity = MathUtils.min( - _getDelegatedTokensAvailable(serviceProvider, verifier), - tokensDelegatedMax - ); - return providerTokens - providerThawingTokens + tokensDelegatedCapacity; - } - + /** + * @notice See {IHorizonStakingBase-getServiceProvider}. + * @dev Removes deprecated fields from the return value. + */ function getServiceProvider(address serviceProvider) external view override returns (ServiceProvider memory) { ServiceProvider memory sp; ServiceProviderInternal storage spInternal = _serviceProviders[serviceProvider]; @@ -74,10 +55,24 @@ abstract contract HorizonStakingBase is return sp; } - function getMaxThawingPeriod() external view override returns (uint64) { - return _maxThawingPeriod; + /** + * @notice See {IHorizonStakingBase-getStake}. + */ + function getStake(address serviceProvider) external view override returns (uint256) { + return _serviceProviders[serviceProvider].tokensStaked; + } + + /** + * @notice See {IHorizonStakingBase-getIdleStake}. + */ + function getIdleStake(address serviceProvider) external view override returns (uint256 tokens) { + return _getIdleStake(serviceProvider); } + /** + * @notice See {IHorizonStakingBase-getDelegationPool}. + * @dev Removes deprecated fields from the return value. + */ function getDelegationPool( address serviceProvider, address verifier @@ -91,41 +86,69 @@ abstract contract HorizonStakingBase is return pool; } + /** + * @notice See {IHorizonStakingBase-getDelegation}. + * @dev Removes deprecated fields from the return value. + */ function getDelegation( - address delegator, address serviceProvider, - address verifier + address verifier, + address delegator ) external view override returns (Delegation memory) { + Delegation memory delegation; DelegationPoolInternal storage poolInternal = _getDelegationPool(serviceProvider, verifier); - return poolInternal.delegators[delegator]; - } - - function getThawRequest(bytes32 thawRequestId) external view returns (ThawRequest memory) { - return _thawRequests[thawRequestId]; + delegation.shares = poolInternal.delegators[delegator].shares; + return delegation; } - function getThawRequestList( + /** + * @notice See {IHorizonStakingBase-getDelegationFeeCut}. + */ + function getDelegationFeeCut( address serviceProvider, address verifier, - address owner - ) external view returns (LinkedList.List memory) { - return _thawRequestLists[serviceProvider][verifier][owner]; + IGraphPayments.PaymentTypes paymentType + ) external view override returns (uint256) { + return _delegationFeeCut[serviceProvider][verifier][paymentType]; } + /** + * @notice See {IHorizonStakingBase-getProvision}. + */ function getProvision(address serviceProvider, address verifier) external view override returns (Provision memory) { return _provisions[serviceProvider][verifier]; } - function getDelegationFeeCut( + /** + * @notice See {IHorizonStakingBase-getTokensAvailable}. + */ + function getTokensAvailable( address serviceProvider, address verifier, - IGraphPayments.PaymentTypes paymentType + uint32 delegationRatio ) external view override returns (uint256) { - return _delegationFeeCut[serviceProvider][verifier][paymentType]; + uint256 tokensAvailableProvider = _getProviderTokensAvailable(serviceProvider, verifier); + uint256 tokensAvailableDelegated = _getDelegatedTokensAvailable(serviceProvider, verifier); + + uint256 tokensDelegatedMax = tokensAvailableProvider * (uint256(delegationRatio)); + uint256 tokensDelegatedCapacity = MathUtils.min(tokensAvailableDelegated, tokensDelegatedMax); + + return tokensAvailableProvider + tokensDelegatedCapacity; + } + + /** + * @notice See {IHorizonStakingBase-getProviderTokensAvailable}. + */ + function getProviderTokensAvailable( + address serviceProvider, + address verifier + ) external view override returns (uint256) { + return _getProviderTokensAvailable(serviceProvider, verifier); } - // provisioned tokens from delegators that are not being thawed - // `Provision.delegatedTokens - Provision.delegatedTokensThawing` + /** + * @notice See {IHorizonStakingBase-getDelegatedTokensAvailable}. + */ function getDelegatedTokensAvailable( address serviceProvider, address verifier @@ -133,28 +156,33 @@ abstract contract HorizonStakingBase is return _getDelegatedTokensAvailable(serviceProvider, verifier); } - // staked tokens that are currently not provisioned, aka idle stake - // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address serviceProvider) external view override returns (uint256 tokens) { - return _getIdleStake(serviceProvider); + /** + * @notice See {IHorizonStakingBase-getThawRequest}. + */ + function getThawRequest(bytes32 thawRequestId) external view override returns (ThawRequest memory) { + return _thawRequests[thawRequestId]; } - // provisioned tokens from the service provider that are not being thawed - // `Provision.tokens - Provision.tokensThawing` - function getProviderTokensAvailable( + /** + * @notice See {IHorizonStakingBase-getThawRequestList}. + */ + function getThawRequestList( address serviceProvider, - address verifier - ) external view override returns (uint256) { - return _getProviderTokensAvailable(serviceProvider, verifier); + address verifier, + address owner + ) external view override returns (LinkedList.List memory) { + return _thawRequestLists[serviceProvider][verifier][owner]; } /** - * @notice Get the amount of service provider's tokens in a provision that have finished thawing - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned + * @notice See {IHorizonStakingBase-getThawedTokens}. */ - function getThawedTokens(address serviceProvider, address verifier) external view returns (uint256) { - LinkedList.List storage thawRequestList = _thawRequestLists[serviceProvider][verifier][serviceProvider]; + function getThawedTokens( + address serviceProvider, + address verifier, + address owner + ) external view override returns (uint256) { + LinkedList.List storage thawRequestList = _thawRequestLists[serviceProvider][verifier][owner]; if (thawRequestList.count == 0) { return 0; } @@ -175,27 +203,50 @@ abstract contract HorizonStakingBase is return tokens; } + /** + * @notice See {IHorizonStakingBase-getMaxThawingPeriod}. + */ + function getMaxThawingPeriod() external view override returns (uint64) { + return _maxThawingPeriod; + } + /** * @notice Deposit tokens into the service provider stake. - * @dev TODO(after transition period): move to HorizonStaking - * @param _serviceProvider Address of staking party - * @param _tokens Amount of tokens to stake + * @dev TODO: After transition period move to IHorizonStakingMain. Temporarily it + * needs to be here since it's used by both {HorizonStaking} and {HorizonStakingExtension}. + * + * Emits a {StakeDeposited} event. */ function _stake(address _serviceProvider, uint256 _tokens) internal { _serviceProviders[_serviceProvider].tokensStaked = _serviceProviders[_serviceProvider].tokensStaked + _tokens; emit StakeDeposited(_serviceProvider, _tokens); } - function _getNextThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { - return _thawRequests[_thawRequestId].next; + /** + * @dev Gets the idle stake of a service provider. + * + * Note that the calculation considers tokens that were locked in the legacy staking contract. + * TODO: update the calculation after the transition period. + */ + function _getIdleStake(address _serviceProvider) internal view returns (uint256) { + return + _serviceProviders[_serviceProvider].tokensStaked - + _serviceProviders[_serviceProvider].tokensProvisioned - + _serviceProviders[_serviceProvider].__DEPRECATED_tokensLocked; } + /** + * @dev Gets a delegation pool. + * + * Note that there is a special case if the verifier is the subgraph data service, since + * in that case the pools are stored in the legacy mapping. + */ function _getDelegationPool( address _serviceProvider, address _verifier ) internal view returns (DelegationPoolInternal storage) { IHorizonStakingTypes.DelegationPoolInternal storage pool; - if (_verifier == _serviceProvider) { + if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { pool = _legacyDelegationPools[_serviceProvider]; } else { pool = _delegationPools[_serviceProvider][_verifier]; @@ -203,19 +254,25 @@ abstract contract HorizonStakingBase is return pool; } - function _getIdleStake(address _serviceProvider) internal view returns (uint256 tokens) { - return - _serviceProviders[_serviceProvider].tokensStaked - - _serviceProviders[_serviceProvider].tokensProvisioned - - _serviceProviders[_serviceProvider].__DEPRECATED_tokensLocked; - } - + /** + * @dev See {IHorizonStakingBase-getProviderTokensAvailable}. + */ function _getProviderTokensAvailable(address _serviceProvider, address _verifier) internal view returns (uint256) { return _provisions[_serviceProvider][_verifier].tokens - _provisions[_serviceProvider][_verifier].tokensThawing; } + /** + * @dev See {IHorizonStakingBase-getDelegatedTokensAvailable}. + */ function _getDelegatedTokensAvailable(address _serviceProvider, address _verifier) internal view returns (uint256) { DelegationPoolInternal storage poolInternal = _getDelegationPool(_serviceProvider, _verifier); return poolInternal.tokens - poolInternal.tokensThawing; } + + /** + * @dev Gets the next thaw request in the list. + */ + function _getNextThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { + return _thawRequests[_thawRequestId].next; + } } diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 284d2dbe6..6265583fe 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -18,14 +18,15 @@ import { PPMMath } from "../libraries/PPMMath.sol"; import { HorizonStakingBase } from "./HorizonStakingBase.sol"; /** - * @title Base Staking contract + * @title Horizon Staking extension contract + * @dev This contract contains: + * - all the legacy staking functionality, required to support the transition period + * - transfer tools support functions + * TODO: once the transition period and the transfer tools are deemed not necessary this contract + * can be removed. * @dev The Staking contract allows Indexers to Stake on Subgraphs. Indexers Stake by creating * Allocations on a Subgraph. It also allows Delegators to Delegate towards an Indexer. The * contract also has the slashing functionality. - * The contract is abstract as the implementation that is deployed depends on each layer: L1Staking on mainnet - * and L2Staking on Arbitrum. - * Note that this contract delegates part of its functionality to a StakingExtension contract. - * This is due to the 24kB contract size limit on Ethereum. */ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2StakingBase, IHorizonStakingExtension { using TokenUtils for IGraphToken; @@ -322,7 +323,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2Staki ) internal { // Get the delegation pool of the indexer IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; - IHorizonStakingTypes.Delegation storage delegation = pool.delegators[_delegationData.delegator]; + IHorizonStakingTypes.DelegationInternal storage delegation = pool.delegators[_delegationData.delegator]; // Calculate shares to issue (without applying any delegation tax) uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / pool.tokens); diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index b2c256a2d..961445e8a 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -73,7 +73,7 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { } function _getDelegation() internal view returns (Delegation memory) { - return staking.getDelegation(users.delegator, users.indexer, subgraphDataServiceAddress); + return staking.getDelegation(users.indexer, subgraphDataServiceAddress, users.delegator); } function _undelegate(uint256 shares) internal { From 19591b3d0e75d415e8f17502d098c5d92f59da40 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 28 May 2024 22:40:49 -0300 Subject: [PATCH 085/343] fix: rebase horizon branch --- .../contracts/staking/HorizonStaking.sol | 4 +- .../horizon/test/staking/HorizonStaking.t.sol | 4 +- .../test/staking/provision/deprovision.t.sol | 74 +++++++++---------- .../test/staking/provision/reprovision.t.sol | 41 +++------- packages/horizon/test/staking/thaw/thaw.t.sol | 3 +- 5 files changed, 54 insertions(+), 72 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 1317de454..60b674aab 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -364,8 +364,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier = msg.sender; Provision storage prov = _provisions[serviceProvider][verifier]; DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); - uint256 availableTokens = prov.tokens + pool.tokens; - require(availableTokens >= tokens, HorizonStakingInsufficientTokens(prov.tokens, tokens)); + uint256 tokensProvisionTotal = prov.tokens + pool.tokens; + require(tokensProvisionTotal >= tokens, HorizonStakingInsufficientTokens(prov.tokens, tokens)); uint256 tokensToSlash = tokens; uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index b2c256a2d..dd80c878f 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -63,8 +63,8 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { return staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); } - function _deprovision(uint256 amount) internal { - staking.deprovision(users.indexer, subgraphDataServiceAddress, amount); + function _deprovision(uint256 nThawRequests) internal { + staking.deprovision(users.indexer, subgraphDataServiceAddress, nThawRequests); } function _delegate(uint256 amount) internal { diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol index ba8584d17..a187dfc6b 100644 --- a/packages/horizon/test/staking/provision/deprovision.t.sol +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -7,18 +7,46 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingDeprovisionTest is HorizonStakingTest { - function testDeprovision_Tokens( + function testDeprovision_AllRequests( uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { skip(thawingPeriod + 1); - _deprovision(amount); + // nThawRequests == 0 removes all thaw requests + _deprovision(0); uint256 idleStake = staking.getIdleStake(users.indexer); assertEq(idleStake, amount); } + function testDeprovision_FirstRequestOnly( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod, + uint256 thawAmount + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + thawAmount = bound(thawAmount, MIN_DELEGATION, amount); + uint256 thawAmount1 = thawAmount / 2; + bytes32 thawRequestId = _createThawRequest(thawAmount1); + bytes32 thawRequestId2 = _createThawRequest(thawAmount - thawAmount1); + skip(thawingPeriod + 1); + + console.log("thawAmount1: ", thawAmount1); + console.log("thawAmount2: ", thawAmount - thawAmount1); + + ThawRequest memory thawRequest1 = staking.getThawRequest(thawRequestId); + ThawRequest memory thawRequest2 = staking.getThawRequest(thawRequestId2); + console.log("Thaw request 1 shares: ", thawRequest1.shares); + console.log("Thaw request 2 shares: ", thawRequest2.shares); + + console.log("Idle stake before deprovision: ", staking.getIdleStake(users.indexer)); + _deprovision(1); + uint256 idleStake = staking.getIdleStake(users.indexer); + console.log("Idle stake after deprovision: ", idleStake); + assertEq(idleStake, thawAmount1); + } + function testDeprovision_OperatorMovingTokens( uint256 amount, uint32 maxVerifierCut, @@ -26,7 +54,7 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { ) public useOperator useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { skip(thawingPeriod + 1); - _deprovision(amount); + _deprovision(0); uint256 idleStake = staking.getIdleStake(users.indexer); assertEq(idleStake, amount); } @@ -44,54 +72,26 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { subgraphDataServiceAddress ); vm.expectRevert(expectedError); - _deprovision(amount); - } - - function testDeprovision_RevertWhen_ZeroTokens( - uint256 amount, - uint32 maxVerifierCut, - uint64 thawingPeriod - ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); - vm.expectRevert(expectedError); _deprovision(0); } - function testDeprovision_RevertWhen_NoThawingTokens( uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCannotFulfillThawRequest()"); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); - _deprovision(amount); + _deprovision(0); } - function testDeprovision_RevertWhen_StillThawing( + function testDeprovision_StillThawing( uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { vm.assume(thawingPeriod > 0); - bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingStillThawing(uint256)", - block.timestamp + thawingPeriod - ); - vm.expectRevert(expectedError); - _deprovision(amount); - } - - function testDeprovision_RevertWhen_NotEnoughThawedTokens( - uint256 amount, - uint32 maxVerifierCut, - uint64 thawingPeriod, - uint256 deprovisionAmount - ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - vm.assume(deprovisionAmount > amount); - skip(thawingPeriod + 1); - - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCannotFulfillThawRequest()"); - vm.expectRevert(expectedError); - _deprovision(deprovisionAmount); + _deprovision(0); + uint256 idleStake = staking.getIdleStake(users.indexer); + assertEq(idleStake, 0); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 78a7a50ac..9cd0c2116 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -9,8 +9,8 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { address private newDataService = makeAddr("newDataService"); - function _reprovision(uint256 amount) private { - staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, amount, 0); + function _reprovision(uint256 tokens, uint256 nThawRequests) private { + staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, tokens, nThawRequests); } function testReprovision_MovingTokens( @@ -25,7 +25,9 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { skip(thawingPeriod + 1); _createProvision(newDataService, MIN_PROVISION_SIZE, 0, thawingPeriod); - _reprovision(provisionAmount); + + // nThawRequests == 0 reprovisions all thaw requests + _reprovision(provisionAmount, 0); uint256 idleStake = staking.getIdleStake(users.indexer); assertEq(idleStake, 0 ether); @@ -51,7 +53,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { // Switch back to operator vm.startPrank(users.operator); _createProvision(newDataService, MIN_PROVISION_SIZE, 0, thawingPeriod); - _reprovision(provisionAmount); + _reprovision(provisionAmount, 0); uint256 idleStake = staking.getIdleStake(users.indexer); assertEq(idleStake, 0 ether); @@ -80,15 +82,15 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { newDataService ); vm.expectRevert(expectedError); - _reprovision(provisionAmount); + _reprovision(provisionAmount, 0); } function testReprovision_RevertWhen_NoThawingTokens( uint256 amount ) public useIndexer useProvision(amount, 0, 0) { - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCannotFulfillThawRequest()"); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); - _reprovision(amount); + _reprovision(amount, 0); } function testReprovision_RevertWhen_StillThawing( @@ -101,30 +103,11 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { useThawRequest(provisionAmount) { vm.assume(thawingPeriod > 0); - bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingStillThawing(uint256)", - block.timestamp + thawingPeriod - ); - vm.expectRevert(expectedError); - _reprovision(provisionAmount); - } - function testReprovision_RevertWhen_NotEnoughThawedTokens( - uint64 thawingPeriod, - uint256 provisionAmount, - uint256 newProvisionAmount - ) - public - useIndexer - useProvision(provisionAmount, 0, thawingPeriod) - useThawRequest(provisionAmount) - { - newProvisionAmount = bound(newProvisionAmount, provisionAmount + 1, type(uint256).max - provisionAmount); - skip(thawingPeriod + 1); + _createProvision(newDataService, MIN_PROVISION_SIZE, 0, thawingPeriod); - _createProvision(newDataService, newProvisionAmount, 0, thawingPeriod); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCannotFulfillThawRequest()"); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientCapacity()"); vm.expectRevert(expectedError); - _reprovision(newProvisionAmount); + _reprovision(provisionAmount, 0); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/thaw/thaw.t.sol index ec2d9e0e5..94785421f 100644 --- a/packages/horizon/test/staking/thaw/thaw.t.sol +++ b/packages/horizon/test/staking/thaw/thaw.t.sol @@ -41,8 +41,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { assertEq(thawRequest.next, thawRequestId2); ThawRequest memory thawRequest2 = staking.getThawRequest(thawRequestId2); - uint256 totalThawAmount = thawAmount + thawAmount2; - assertEq(thawRequest2.shares, (thawRequest.shares * thawAmount2) / totalThawAmount); + assertEq(thawRequest2.shares, thawAmount2); assertEq(thawRequest2.thawingUntil, block.timestamp + thawingPeriod); } From 5091e7d03fcda1f2b01c289e15f829be3a7ce708 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 28 May 2024 16:07:17 -0300 Subject: [PATCH 086/343] fix: withdraw delegation with zero tokens --- .../contracts/staking/HorizonStaking.sol | 10 ++- packages/horizon/test/GraphBase.t.sol | 2 +- .../test/staking/delegation/withdraw.t.sol | 78 +++++++++++++++++++ 3 files changed, 85 insertions(+), 5 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index f932abc9c..c009f3ebb 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -770,10 +770,12 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { pool.sharesThawing = sharesThawing; pool.tokensThawing = tokensThawing; - if (_newServiceProvider != address(0)) { - _delegate(_newServiceProvider, _verifier, tokensThawed, _minSharesForNewProvider); - } else { - _graphToken().pushTokens(msg.sender, tokensThawed); + if (tokensThawed != 0) { + if (_newServiceProvider != address(0)) { + _delegate(_newServiceProvider, _verifier, tokensThawed, _minSharesForNewProvider); + } else { + _graphToken().pushTokens(msg.sender, tokensThawed); + } } emit DelegatedTokensWithdrawn(_serviceProvider, _verifier, msg.sender, tokensThawed); diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 27835c54a..565080cc9 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -161,7 +161,7 @@ abstract contract GraphBaseTest is Test, Constants { controller.setPaused(false); } - function createUser(string memory name) private returns (address) { + function createUser(string memory name) internal returns (address) { address user = makeAddr(name); vm.deal({ account: user, newBalance: 100 ether }); deal({ token: address(token), to: user, give: type(uint256).max }); diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 01840874b..b0c6974df 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -36,6 +36,18 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { return (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing; } + function _setupNewIndexer(uint256 tokens) private returns(address) { + address msgSender; + (, msgSender,) = vm.readCallers(); + address newIndexer = createUser("newIndexer"); + vm.startPrank(newIndexer); + token.approve(address(staking), tokens); + staking.stakeTo(newIndexer, tokens); + staking.provision(newIndexer,subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); + vm.startPrank(msgSender); + return newIndexer; + } + function testWithdrawDelegation_Tokens( uint256 delegationAmount, uint256 withdrawShares @@ -71,4 +83,70 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { vm.expectRevert(expectedError); _withdrawDelegated(); } + + function testWithdrawDelegation_MoveToNewServiceProvider( + uint256 delegationAmount + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + useUndelegate(delegationAmount) + { + Delegation memory thawingDelegation = _getDelegation(); + ThawRequest memory thawRequest = staking.getThawRequest(thawingDelegation.lastThawRequestId); + + skip(thawRequest.thawingUntil + 1); + + // Setup new service provider + address newIndexer = _setupNewIndexer(10_000_000 ether); + + uint256 previousBalance = token.balanceOf(users.delegator); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0); + + uint256 newBalance = token.balanceOf(users.delegator); + assertEq(newBalance, previousBalance); + + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(newIndexer, subgraphDataServiceAddress); + assertEq(delegatedTokens, delegationAmount); + } + + function testWithdrawDelegation_ZeroTokens( + uint256 delegationAmount + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + useUndelegate(delegationAmount) + { + uint256 previousBalance = token.balanceOf(users.delegator); + _withdrawDelegated(); + + // Nothing changed since thawing period haven't finished + uint256 newBalance = token.balanceOf(users.delegator); + assertEq(newBalance, previousBalance); + } + + function testWithdrawDelegation_MoveZeroTokensToNewServiceProvider( + uint256 delegationAmount + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + useUndelegate(delegationAmount) + { + // Setup new service provider + address newIndexer = _setupNewIndexer(10_000_000 ether); + + uint256 previousBalance = token.balanceOf(users.delegator); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0); + + uint256 newBalance = token.balanceOf(users.delegator); + assertEq(newBalance, previousBalance); + + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(newIndexer, subgraphDataServiceAddress); + assertEq(delegatedTokens, 0); + } } \ No newline at end of file From c212cbed60638b277847ec9e34327d3dcfb11ac7 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 29 May 2024 15:54:51 -0300 Subject: [PATCH 087/343] fix: rebase --- packages/horizon/test/staking/delegation/withdraw.t.sol | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index b0c6974df..0b622ce9a 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -93,16 +93,13 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useDelegation(delegationAmount) useUndelegate(delegationAmount) { - Delegation memory thawingDelegation = _getDelegation(); - ThawRequest memory thawRequest = staking.getThawRequest(thawingDelegation.lastThawRequestId); - - skip(thawRequest.thawingUntil + 1); + skip(MAX_THAWING_PERIOD + 1); // Setup new service provider address newIndexer = _setupNewIndexer(10_000_000 ether); uint256 previousBalance = token.balanceOf(users.delegator); - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0, 0); uint256 newBalance = token.balanceOf(users.delegator); assertEq(newBalance, previousBalance); @@ -141,7 +138,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { address newIndexer = _setupNewIndexer(10_000_000 ether); uint256 previousBalance = token.balanceOf(users.delegator); - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0, 0); uint256 newBalance = token.balanceOf(users.delegator); assertEq(newBalance, previousBalance); From d7497d6f73257ec2706ec973ec080b6b62813c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 29 May 2024 16:53:39 -0300 Subject: [PATCH 088/343] docs: add natspec to horizon staking contracts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IHorizonStaking.sol | 9 +- .../internal/IHorizonStakingBase.sol | 5 +- .../internal/IHorizonStakingExtension.sol | 10 +- .../internal/IHorizonStakingMain.sol | 815 +++++++++++++++--- .../internal/IHorizonStakingTypes.sol | 124 ++- .../contracts/staking/HorizonStaking.sol | 315 ++++--- .../contracts/staking/HorizonStakingBase.sol | 37 +- .../staking/HorizonStakingExtension.sol | 20 +- .../staking/HorizonStakingStorage.sol | 74 +- .../contracts/staking/utilities/Managed.sol | 22 +- 10 files changed, 1096 insertions(+), 335 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IHorizonStaking.sol b/packages/horizon/contracts/interfaces/IHorizonStaking.sol index 647e66320..1cf1b6283 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStaking.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStaking.sol @@ -4,6 +4,13 @@ pragma solidity 0.8.26; import { IHorizonStakingTypes } from "./internal/IHorizonStakingTypes.sol"; import { IHorizonStakingMain } from "./internal/IHorizonStakingMain.sol"; +import { IHorizonStakingBase } from "./internal/IHorizonStakingBase.sol"; import { IHorizonStakingExtension } from "./internal/IHorizonStakingExtension.sol"; -interface IHorizonStaking is IHorizonStakingTypes, IHorizonStakingMain, IHorizonStakingExtension {} +/** + * @title Complete interface for the Horizon Staking contract + * @notice This interface exposes all functions implemented by the {HorizonStaking} contract and its extension + * {HorizonStakingExtension} as well as the custom data types used by the contract. + * @dev Use this interface to interact with the Horizon Staking contract. + */ +interface IHorizonStaking is IHorizonStakingTypes, IHorizonStakingBase, IHorizonStakingMain, IHorizonStakingExtension {} diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index 563ba258f..808c738f1 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -9,9 +9,8 @@ import { LinkedList } from "../../libraries/LinkedList.sol"; /** * @title Interface for the {HorizonStakingBase} contract. - * @dev Provides getters for {HorizonStaking} and {HorizonStakingExtension} storage variables. - * - * Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision + * @notice Provides getters for {HorizonStaking} and {HorizonStakingExtension} storage variables. + * @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision * functions take `serviceProvider` and `verifier` addresses. */ interface IHorizonStakingBase { diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 4d7518ec4..825ce2292 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -3,12 +3,8 @@ pragma solidity 0.8.26; /** - * @title Base interface for the Staking contract. - * @dev This interface includes only what's implemented in the base Staking contract. - * It does not include the L1 and L2 specific functionality. It also does not include - * several functions that are implemented in the StakingExtension contract, and are called - * via delegatecall through the fallback function. See IStaking.sol for an interface - * that includes the full functionality. + * @title Interface for {HorizonStakingExtension} contract. + * @notice Provides functions for managing legacy allocations and transfer tools. */ interface IHorizonStakingExtension { /** @@ -22,7 +18,7 @@ interface IHorizonStakingExtension { uint256 createdAtEpoch; // Epoch when it was created uint256 closedAtEpoch; // Epoch when it was closed uint256 collectedFees; // Collected fees for the allocation - uint256 DEPRECATED_effectiveAllocation; // solhint-disable-line var-name-mixedcase + uint256 __DEPRECATED_effectiveAllocation; // solhint-disable-line var-name-mixedcase uint256 accRewardsPerAllocatedToken; // Snapshot used for reward calc uint256 distributedRebates; // Collected rebates that have been rebated } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index cd53cb613..33a8f29cc 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -5,36 +5,43 @@ pragma solidity 0.8.26; import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; -interface IHorizonStakingMain is IHorizonStakingBase { - event ThawRequestCreated( - address indexed serviceProvider, - address indexed verifier, - address indexed owner, - uint256 shares, - uint64 thawingUntil, - bytes32 thawRequestId - ); - event ThawRequestFulfilled(bytes32 indexed thawRequestId, uint256 tokens, uint256 shares, uint64 thawingUntil); - event ThawRequestsFulfilled( - address indexed serviceProvider, - address indexed verifier, - address indexed owner, - uint256 thawRequestsFulfilled, - uint256 tokens - ); +/** + * @title Inferface for the {HorizonStaking} contract. + * @notice Provides functions for managing stake, provisions, delegations, and slashing. + * @dev Note that this interface only includes the functions implemented by {HorizonStaking} contract, + * and not those implemented by {HorizonStakingExtension}. + * Do not use this interface to interface with the {HorizonStaking} contract, use {IHorizonStaking} for + * the complete interface. + * @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision + * functions take `serviceProvider` and `verifier` addresses. + */ +interface IHorizonStakingMain { + // -- Events: stake -- /** - * @dev Emitted when `serviceProvider` withdraws `tokens` amount. + * @notice Emitted when a service provider unstakes tokens during the transition period. + * @param serviceProvider The address of the service provider + * @param tokens The amount of tokens unstaked + * @param until The block number until the stake is locked */ - event StakeWithdrawn(address indexed serviceProvider, uint256 tokens); + event StakeLocked(address indexed serviceProvider, uint256 tokens, uint256 until); /** - * @dev Emitted when `serviceProvider` locks `tokens` amount until `until`. + * @notice Emitted when a service provider withdraws tokens during the transition period. + * @param serviceProvider The address of the service provider + * @param tokens The amount of tokens withdrawn */ - event StakeLocked(address indexed serviceProvider, uint256 tokens, uint256 until); + event StakeWithdrawn(address indexed serviceProvider, uint256 tokens); + + // -- Events: provision -- /** - * @dev Emitted when a service provider provisions staked tokens to a verifier + * @notice Emitted when a service provider provisions staked tokens to a verifier. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param tokens The amount of tokens provisioned + * @param maxVerifierCut The maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing + * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision */ event ProvisionCreated( address indexed serviceProvider, @@ -45,20 +52,108 @@ interface IHorizonStakingMain is IHorizonStakingBase { ); /** - * @dev Emitted when a service provider increases the tokens in a provision + * @notice Emitted whenever staked tokens are added to an existing provision + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param tokens The amount of tokens added to the provision */ event ProvisionIncreased(address indexed serviceProvider, address indexed verifier, uint256 tokens); + /** + * @notice Emitted when a service provider thaws tokens from a provision. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param tokens The amount of tokens thawed + */ event ProvisionThawed(address indexed serviceProvider, address indexed verifier, uint256 tokens); + /** + * @notice Emitted when a service provider removes tokens from a provision. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param tokens The amount of tokens removed + */ event TokensDeprovisioned(address indexed serviceProvider, address indexed verifier, uint256 tokens); + /** + * @notice Emitted when a service provider stages a provision parameter update. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for + * themselves when slashing + * @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from + * the provision + */ + event ProvisionParametersStaged( + address indexed serviceProvider, + address indexed verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ); + + /** + * @notice Emitted when a service provider accepts a staged provision parameter update. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param maxVerifierCut The new maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves + * when slashing + * @param thawingPeriod The new period in seconds that the tokens will be thawing before they can be removed from the provision + */ + event ProvisionParametersSet( + address indexed serviceProvider, + address indexed verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ); + + /** + * @dev Emitted when an operator is allowed or denied by a service provider for a particular verifier + * @param serviceProvider The address of the service provider + * @param operator The address of the operator + * @param verifier The address of the verifier + * @param allowed Whether the operator is allowed or denied + */ + event OperatorSet( + address indexed serviceProvider, + address indexed operator, + address indexed verifier, + bool allowed + ); + + // -- Events: slashing -- + + /** + * @notice Emitted when a provision is slashed by a verifier. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param tokens The amount of tokens slashed (note this only represents service provider's slashed stake) + */ event ProvisionSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens); + /** + * @notice Emitted when a delegation pool is slashed by a verifier. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param tokens The amount of tokens slashed (note this only represents delegation pool's slashed stake) + */ event DelegationSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens); + /** + * @notice Emitted when a delegation pool would have been slashed by a verifier, but the slashing was skipped + * because delegation slashing global parameter is not enabled. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param tokens The amount of tokens that would have been slashed (note this only represents delegation pool's slashed stake) + */ event DelegationSlashingSkipped(address indexed serviceProvider, address indexed verifier, uint256 tokens); + /** + * @notice Emitted when the verifier cut is sent to the verifier after slashing a provision. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param destination The address where the verifier cut is sent + * @param tokens The amount of tokens sent to the verifier + */ event VerifierTokensSent( address indexed serviceProvider, address indexed verifier, @@ -66,6 +161,15 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint256 tokens ); + // -- Events: delegation -- + + /** + * @notice Emitted when tokens are delegated to a provision. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param delegator The address of the delegator + * @param tokens The amount of tokens delegated + */ event TokensDelegated( address indexed serviceProvider, address indexed verifier, @@ -73,6 +177,14 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint256 tokens ); + /** + * @notice Emitted when a delegator undelegates tokens from a provision and starts + * thawing them. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param delegator The address of the delegator + * @param tokens The amount of tokens undelegated + */ event TokensUndelegated( address indexed serviceProvider, address indexed verifier, @@ -80,6 +192,13 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint256 tokens ); + /** + * @notice Emitted when a delegator withdraws tokens from a provision after thawing. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param delegator The address of the delegator + * @param tokens The amount of tokens withdrawn + */ event DelegatedTokensWithdrawn( address indexed serviceProvider, address indexed verifier, @@ -87,99 +206,318 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint256 tokens ); - event DelegationSlashingEnabled(bool enabled); - - event AllowedLockedVerifierSet(address indexed verifier, bool allowed); - + /** + * @notice Emitted when tokens are added to a delegation pool's reserve. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param tokens The amount of tokens withdrawn + */ event TokensToDelegationPoolAdded(address indexed serviceProvider, address indexed verifier, uint256 tokens); - event ProvisionParametersStaged( + /** + * @notice Emitted when a service provider sets delegation fee cuts for a verifier. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments} + * @param feeCut The fee cut set, in PPM + */ + event DelegationFeeCutSet( address indexed serviceProvider, address indexed verifier, - uint32 maxVerifierCut, - uint64 thawingPeriod + IGraphPayments.PaymentTypes indexed paymentType, + uint256 feeCut ); - event ProvisionParametersSet( + // -- Events: thawing -- + + /** + * @notice Emitted when a thaw request is created. + * @dev Can be emitted by the service provider when thawing stake or by the delegator when undelegating. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param owner The address of the owner of the thaw request. + * @param shares The amount of shares being thawed + * @param thawingUntil The timestamp until the stake is thawed + * @param thawRequestId The ID of the thaw request + */ + event ThawRequestCreated( address indexed serviceProvider, address indexed verifier, - uint32 maxVerifierCut, - uint64 thawingPeriod + address indexed owner, + uint256 shares, + uint64 thawingUntil, + bytes32 thawRequestId ); - event ThawingPeriodCleared(); - event MaxThawingPeriodSet(uint64 maxThawingPeriod); + /** + * @notice Emitted when a thaw request is fulfilled, meaning the stake is released. + * @param thawRequestId The ID of the thaw request + * @param tokens The amount of tokens being released + * @param shares The amount of shares being released + * @param thawingUntil The timestamp until the stake has thawn + */ + event ThawRequestFulfilled(bytes32 indexed thawRequestId, uint256 tokens, uint256 shares, uint64 thawingUntil); /** - * @dev Emitted when an operator is allowed or denied by a service provider for a particular data service + * @notice Emitted when a series of thaw requests are fulfilled. + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param owner The address of the owner of the thaw requests + * @param thawRequestsFulfilled The number of thaw requests fulfilled + * @param tokens The total amount of tokens being released */ - event OperatorSet( + event ThawRequestsFulfilled( address indexed serviceProvider, - address indexed operator, address indexed verifier, - bool allowed + address indexed owner, + uint256 thawRequestsFulfilled, + uint256 tokens ); - event DelegationFeeCutSet( - address indexed serviceProvider, - address indexed verifier, - IGraphPayments.PaymentTypes indexed paymentType, - uint256 feeCut - ); + // -- Events: governance -- + + /** + * @notice Emitted when the global maximum thawing period allowed for provisions is set. + * @param maxThawingPeriod The new maximum thawing period + */ + event MaxThawingPeriodSet(uint64 maxThawingPeriod); + + /** + * @notice Emitted when a verifier is allowed or disallowed to be used for locked provisions. + * @param verifier The address of the verifier + * @param allowed Whether the verifier is allowed or disallowed + */ + event AllowedLockedVerifierSet(address indexed verifier, bool allowed); + + /** + * @notice Emitted when the legacy global thawing period is set to zero. + * @dev This marks the end of the transition period. + */ + event ThawingPeriodCleared(); + + /** + * @notice Emitted when the delegation slashing global flag is set. + * @param enabled Whether delegation slashing is enabled or disabled. + */ + event DelegationSlashingEnabled(bool enabled); + // -- Errors: tokens + + /** + * @notice Thrown when operating a zero token amount is not allowed. + */ error HorizonStakingInvalidZeroTokens(); + + /** + * @notice Thrown when a minimum token amount is required to operate but it's not met. + * @param tokens The actual token amount + * @param minRequired The minimum required token amount + */ + error HorizonStakingInsufficientTokens(uint256 tokens, uint256 minRequired); + + /** + * @notice Thrown when the amount of tokens exceeds the maximum allowed to operate. + * @param tokens The actual token amount + * @param maxTokens The maximum allowed token amount + */ + error HorizonStakingTooManyTokens(uint256 tokens, uint256 maxTokens); + + // -- Errors: provision -- + + /** + * @notice Thrown when attempting to operate with a provision that does not exist. + * @param serviceProvider The service provider address + * @param verifier The verifier address + */ error HorizonStakingInvalidProvision(address serviceProvider, address verifier); - error HorizonStakingInvalidTokens(uint256 tokens, uint256 minTokens); - error HorizonStakingInvalidMaxVerifierCut(uint32 maxVerifierCut, uint32 maxAllowedCut); - error HorizonStakingInvalidThawingPeriod(uint64 thawingPeriod, uint64 maxThawingPeriod); + + /** + * @notice Thrown when the caller is not authorized to operate on a provision. + * @param caller The caller address + * @param serviceProvider The service provider address + * @param verifier The verifier address + */ error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); - error HorizonStakingInsufficientCapacity(); - error HorizonStakingInsufficientCapacityForLegacyAllocations(); - error HorizonStakingInsufficientTokensAvailable(uint256 tokensAvailable, uint256 tokensRequired); - error HorizonStakingInsufficientTokens(uint256 available, uint256 tokensRequired); - error HorizonStakingSlippageProtection(uint256 minExpectedShares, uint256 actualShares); - error HorizonStakingVerifierNotAllowed(address verifier); - error HorizonStakingVerifierTokensTooHigh(uint256 tokensVerifier, uint256 maxVerifierTokens); - error HorizonStakingNotEnoughDelegation(uint256 tokensAvailable, uint256 tokensRequired); + + /** + * @notice Thrown when attempting to create a provision with an invalid maximum verifier cut. + * @param maxVerifierCut The maximum verifier cut + * @param maxMaxVerifierCut The maximum `maxVerifierCut` allowed + */ + error HorizonStakingInvalidMaxVerifierCut(uint32 maxVerifierCut, uint32 maxMaxVerifierCut); + + /** + * @notice Thrown when attempting to create a provision with an invalid thawing period. + * @param thawingPeriod The thawing period + * @param maxThawingPeriod The maximum `thawingPeriod` allowed + */ + error HorizonStakingInvalidThawingPeriod(uint64 thawingPeriod, uint64 maxThawingPeriod); + + // -- Errors: stake -- + + /** + * @notice Thrown when the service provider has insufficient idle stake to operate. + * @param tokens The actual token amount + * @param minTokens The minimum required token amount + */ + error HorizonStakingInsufficientIdleStake(uint256 tokens, uint256 minTokens); + + /** + * @notice Thrown during the transition period when the service provider has insufficient stake to + * cover their existing legacy allocations. + * @param tokens The actual token amount + * @param minTokens The minimum required token amount + */ + error HorizonStakingInsufficientStakeForLegacyAllocations(uint256 tokens, uint256 minTokens); + + // -- Errors: delegation -- + + /** + * @notice Thrown when delegation shares obtained are below the expected amount. + * @param shares The actual share amount + * @param minShares The minimum required share amount + */ + error HorizonStakingSlippageProtection(uint256 shares, uint256 minShares); + + /** + * @notice Thrown when operating a zero share amount is not allowed. + */ error HorizonStakingInvalidZeroShares(); - error HorizonStakingInvalidSharesAmount(uint256 sharesAvailable, uint256 sharesRequired); - error HorizonStakingCallerIsServiceProvider(); - error HorizonStakingStillThawing(uint256 until); - error HorizonStakingCannotFulfillThawRequest(); + + /** + * @notice Thrown when a minimum share amount is required to operate but it's not met. + * @param shares The actual share amount + * @param minShares The minimum required share amount + */ + error HorizonStakingInsufficientShares(uint256 shares, uint256 minShares); + + // -- Errors: slashing -- + /** + * @notice Thrown when delegation pool reserves are not enough to cover slashing amount. + * @param tokens The actual token amount in the delegation pool + * @param tokensToSlash The amount to be slashed + */ + error HorizonStakingNotEnoughDelegation(uint256 tokens, uint256 tokensToSlash); + + // -- Errors: thaw requests -- error HorizonStakingNothingThawing(); error HorizonStakingTooManyThawRequests(); - // deposit stake + // -- Errors: misc -- + /** + * @notice Thrown during the transition period when attempting to withdraw tokens that are still thawing. + * @dev Note this thawing refers to the global thawing period applied to legacy allocated tokens, + * it does not refer to thaw requests. + * @param until The block number until the stake is locked + */ + error HorizonStakingStillThawing(uint256 until); + + /** + * @notice Thrown when a service provider attempts to operate on verifieres that are not allowed. + * @dev Only applies to stake from locked wallets. + */ + error HorizonStakingVerifierNotAllowed(address verifier); + + /** + * @notice Thrown when a service provider attempts to change their own operator access. + */ + error HorizonStakingCallerIsServiceProvider(); + + // -- Functions -- + + /** + * @notice Deposit tokens on the staking contract. + * @dev Pulls tokens from the caller. + * + * Requirements: + * - `_tokens` cannot be zero. + * - Caller must have previously approved this contract to pull tokens from their balance. + * + * Emits a {StakeDeposited} event. + * + * @param tokens Amount of tokens to stake + */ function stake(uint256 tokens) external; + /** + * @notice Deposit tokens on the service provider stake, on behalf of the service provider. + * @dev Pulls tokens from the caller. + * + * Requirements: + * - `_tokens` cannot be zero. + * - Caller must have previously approved this contract to pull tokens from their balance. + * + * Emits a {StakeDeposited} event. + * + * @param serviceProvider Address of the service provider + * @param tokens Amount of tokens to stake + */ function stakeTo(address serviceProvider, uint256 tokens) external; // can be called by anyone if the service provider has provisioned stake to this verifier + /** + * @notice Deposit tokens on the service provider stake, on behalf of the service provider, + * provisioned to a specific verifier. + * @dev Requirements: + * - The `serviceProvider` must have previously provisioned stake to `verifier`. + * - `_tokens` cannot be zero. + * - Caller must have previously approved this contract to pull tokens from their balance. + * + * Emits {StakeDeposited} and {ProvisionIncreased} events. + * + * @param serviceProvider Address of the service provider + * @param verifier Address of the verifier + * @param tokens Amount of tokens to stake + */ function stakeToProvision(address serviceProvider, address verifier, uint256 tokens) external; - // create a provision - function provision( - address serviceProvider, - address verifier, - uint256 tokens, - uint32 maxVerifierCut, - uint64 thawingPeriod - ) external; + /** + * @notice Move idle stake back to the owner's account. + * Stake is removed from the protocol: + * - During the transition period it's locked for a period of time before it can be withdrawn + * by calling {withdraw}. + * - After the transition period it's immediately withdrawn. + * @dev Requirements: + * - `_tokens` cannot be zero. + * - `_serviceProvider` must have enough idle stake to cover the staking amount and any + * legacy allocation. + * + * Emits a {StakeLocked} event during the transition period. + * Emits a {StakeWithdrawn} event after the transition period. + * + * @param tokens Amount of tokens to unstake + */ + function unstake(uint256 tokens) external; + + /** + * @notice Withdraw service provider tokens once the thawing period (initiated by {unstake}) has passed. + * All thawed tokens are withdrawn. + * @dev This is only needed during the transition period while we still have + * a global lock. After that, unstake() will automatically withdraw. + */ + function withdraw() external; /** - * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets). The tokens will be locked with a thawing period + * @notice Provision stake to a verifier. The tokens will be locked with a thawing period * and will be slashable by the verifier. This is the main mechanism to provision stake to a data - * service, where the data service is the verifier. Only authorized verifiers can be used. + * service, where the data service is the verifier. * This function can be called by the service provider or by an operator authorized by the provider * for this specific verifier. + * @dev Requirements: + * - `tokens` cannot be zero and must be over the data service minimum required. + * - Provision parameters must be within the range allowed by the verifier (`maxVerifierCut` and `thawingPeriod`) + * - The `serviceProvider` must have enough idle stake to cover the tokens to provision. + * + * Emits a {ProvisionCreated} event. + * * @param serviceProvider The service provider address * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) * @param tokens The amount of tokens that will be locked and slashable * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision */ - function provisionLocked( + function provision( address serviceProvider, address verifier, uint256 tokens, @@ -187,16 +525,80 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint64 thawingPeriod ) external; - // initiate a thawing to remove tokens from a provision - function thaw(address serviceProvider, address verifier, uint256 tokens) external returns (bytes32); - - // add more tokens from idle stake to an existing provision + /** + * @notice Adds tokens from the service provider's idle stake to a provision + * @dev + * + * Requirements: + * - The `serviceProvider` must have previously provisioned stake to `verifier`. + * - `tokens` cannot be zero. + * - The `serviceProvider` must have enough idle stake to cover the tokens to add. + * + * Emits a {ProvisionIncreased} event. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address + * @param tokens The amount of tokens to add to the provision + */ function addToProvision(address serviceProvider, address verifier, uint256 tokens) external; - // moves thawed stake from a provision back into the provider's available stake + /** + * @notice Start thawing tokens to remove them from a provision. + * This function can be called by the service provider or by an operator authorized by the provider + * for this specific verifier. + * + * Note that removing tokens from a provision is a two step process: + * - First the tokens are thawed using this function. + * - Then after the thawing period, the tokens are removed from the provision using {deprovision} + * or {reprovision}. + * + * @dev Requirements: + * - The provision must have enough tokens available to thaw. + * - `tokens` cannot be zero. + * + * Emits {ProvisionThawed} and {ThawRequestCreated} events. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + * @param tokens The amount of tokens to thaw + * @return The ID of the thaw request + */ + function thaw(address serviceProvider, address verifier, uint256 tokens) external returns (bytes32); + + /** + * @notice Remove tokens from a provision and move them back to the service provider's idle stake. + * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw + * requests in the event that fulfulling all of them results in a gas limit error. + * + * Requirements: + * - Must have previously initiated a thaw request using {thaw}. + * + * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {TokensDeprovisioned} events. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address + * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests. + */ function deprovision(address serviceProvider, address verifier, uint256 nThawRequests) external; - // moves thawed stake from one provision into another provision + /** + * @notice Move already thawed stake from one provision into another provision + * This function can be called by the service provider or by an operator authorized by the provider + * for the two corresponding verifiers. + * @dev Requirements: + * - Must have previously initiated a thaw request using {thaw}. + * - `tokens` cannot be zero. + * - The `serviceProvider` must have previously provisioned stake to `newVerifier`. + * - The `serviceProvider` must have enough idle stake to cover the tokens to add. + * + * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled}, {TokensDeprovisioned} and {ProvisionIncreased} + * events. + * + * @param serviceProvider The service provider address + * @param oldVerifier The verifier address for which the tokens are currently provisioned + * @param newVerifier The verifier address for which the tokens will be provisioned + * @param tokens The amount of tokens to move + */ function reprovision( address serviceProvider, address oldVerifier, @@ -205,16 +607,107 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint256 nThawRequests ) external; - // moves thawed stake back to the owner's account - stake is removed from the protocol - function unstake(uint256 tokens) external; + /** + * @notice Stages a provision parameter update. Note that the change is not effective until the verifier calls + * {acceptProvisionParameters}. + * @dev This two step update process prevents the service provider from changing the parameters + * without the verifier's consent. + * + * Emits a {ProvisionParametersStaged} event. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address + * @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for + * themselves when slashing + * @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from + * the provision + */ + function setProvisionParameters( + address serviceProvider, + address verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external; + + /** + * @notice Accepts a staged provision parameter update. + * @dev Only the provision's verifier can call this function. + * + * Emits a {ProvisionParametersSet} event. + * + * @param serviceProvider The service provider address + */ + function acceptProvisionParameters(address serviceProvider) external; - // delegate tokens to a provider on a data service + /** + * @notice Delegate tokens to a provision. + * @dev Requirements: + * - `tokens` cannot be zero. + * - Caller must have previously approved this contract to pull tokens from their balance. + * - The provision must exist. + * + * Emits a {TokensDelegated} event. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address + * @param tokens The amount of tokens to delegate + * @param minSharesOut The minimum amount of shares to accept, slippage protection. + */ function delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) external; - // undelegate (thaw) delegated tokens from a provision + /** + * @notice Add tokens to a delegation pool without issuing shares. + * Used by data services to pay delegation fees/rewards. + * Delegators SHOULD NOT call this function. + * + * @dev Requirements: + * - `tokens` cannot be zero. + * + * Emits a {TokensToDelegationPoolAdded} event. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address for which the tokens are provisioned + * @param tokens The amount of tokens to add to the delegation pool + */ + function addToDelegationPool(address serviceProvider, address verifier, uint256 tokens) external; + + /** + * @notice Undelegate tokens from a provision and start thawing them. + * Note that undelegating tokens from a provision is a two step process: + * - First the tokens are thawed using this function. + * - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. + * + * Requirements: + * - Must have previously initiated a thaw request using {undelegate}. + * - `shares` cannot be zero. + * + * Emits a {TokensUndelegated} and {ThawRequestCreated} event. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address + * @param shares The amount of shares to undelegate + * @return The ID of the thaw request + */ function undelegate(address serviceProvider, address verifier, uint256 shares) external returns (bytes32); - // withdraw delegated tokens after thawing + /** + * @notice Withdraw undelegated tokens from a provision after thawing. + * Tokens can be automatically re-delegated to another provision by setting `newServiceProvider`. + * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw + * requests in the event that fulfulling all of them results in a gas limit error. + * + * Requirements: + * - Must have previously initiated a thaw request using {undelegate}. + * - `newServiceProvider` must either be zero address or have previously provisioned stake to `verifier`. + * + * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address + * @param newServiceProvider The address of a new service provider, if the delegator wants to re-delegate + * @param minSharesForNewProvider The minimum amount of shares to accept for the new service provider + * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests. + */ function withdrawDelegated( address serviceProvider, address verifier, @@ -223,75 +716,157 @@ interface IHorizonStakingMain is IHorizonStakingBase { uint256 nThawRequests ) external; - function slash( + /** + * @notice Set the fee cut for a verifier on a specific payment type. + * @dev Emits a {DelegationFeeCutSet} event. + * @param serviceProvider The service provider address + * @param verifier The verifier address + * @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments} + * @param feeCut The fee cut to set, in PPM + */ + function setDelegationFeeCut( address serviceProvider, - uint256 tokens, - uint256 tokensVerifier, - address verifierDestination + address verifier, + IGraphPayments.PaymentTypes paymentType, + uint256 feeCut ) external; /** - * @notice Withdraw service provider tokens once the thawing period has passed. - * @dev This is only needed during the transition period while we still have - * a global lock. After that, unstake() will also withdraw. + * @notice Delegate tokens to the subgraph data service provision. + * This function is for backwards compatibility with the legacy staking contract. + * It only allows delegting to the subgraph data service and DOES NOT have slippage protection. + * @dev See {delegate}. + * @param serviceProvider The service provider address + * @param tokens The amount of tokens to delegate */ - function withdraw() external; + function delegate(address serviceProvider, uint256 tokens) external; - function setDelegationSlashingEnabled(bool enabled) external; + /** + * @notice Undelegate tokens from the subgraph data service provision and start thawing them. + * This function is for backwards compatibility with the legacy staking contract. + * It only allows undelegting from the subgraph data service. + * @dev See {undelegate}. + * @param serviceProvider The service provider address + * @param shares The amount of shares to undelegate + */ + function undelegate(address serviceProvider, uint256 shares) external; - function setMaxThawingPeriod(uint64 maxThawingPeriod) external; + /** + * @notice Withdraw undelegated tokens from the subgraph data service provision after thawing. + * This function is for backwards compatibility with the legacy staking contract. + * It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in + * case the caller opts for re-delegating. + * @dev See {delegate}. + * @param serviceProvider The service provider address + * @param newServiceProvider The address of a new service provider, if the delegator wants to re-delegate + */ + function withdrawDelegated(address serviceProvider, address newServiceProvider) external; - function setAllowedLockedVerifier(address verifier, bool allowed) external; + /** + * @notice Slash a service provider. This can only be called by a verifier to which + * the provider has provisioned stake, and up to the amount of tokens they have provisioned. + * If the service provider's stake is not enough, the associated delegation pool might be slashed + * depending on the value of the global delegation slashing flag. + * @dev Requirements: + * - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider. + * - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut. + * + * Emits a {ProvisionSlashed} and {VerifierTokensSent} events. + * Emits a {DelegationSlashed} or {DelegationSlashingSkipped} event depending on the global delegation slashing + * flag. + * + * @param serviceProvider The service provider to slash + * @param tokens The amount of tokens to slash + * @param tokensVerifier The amount of tokens to transfer instead of burning + * @param verifierDestination The address to transfer the verifier cut to + */ + function slash( + address serviceProvider, + uint256 tokens, + uint256 tokensVerifier, + address verifierDestination + ) external; /** - * @notice Add tokens to a delegation pool (without getting shares). - * Used by data services to pay delegation fees/rewards. + * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets). + * @dev See {provision}. + * + * Additional requirements: + * - The `verifier` must be allowed to be used for locked provisions. + * * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned - * @param tokens The amount of tokens to add to the delegation pool + * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) + * @param tokens The amount of tokens that will be locked and slashable + * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing + * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision */ - function addToDelegationPool(address serviceProvider, address verifier, uint256 tokens) external; - - function setProvisionParameters( + function provisionLocked( address serviceProvider, address verifier, + uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod ) external; - function acceptProvisionParameters(address serviceProvider) external; - /** * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * + * @dev See {setOperator}. + * Additional requirements: + * - The `verifier` must be allowed to be used for locked provisions. + * * @param operator Address to authorize or unauthorize * @param verifier The verifier / data service on which they'll be allowed to operate * @param allowed Whether the operator is authorized or not */ - function setOperator(address operator, address verifier, bool allowed) external; - - // for vesting contracts function setOperatorLocked(address operator, address verifier, bool allowed) external; - function setDelegationFeeCut( - address serviceProvider, - address verifier, - IGraphPayments.PaymentTypes paymentType, - uint256 feeCut - ) external; + /** + * @notice Sets a verifier as a globally allowed verifier for locked provisions. + * @dev This function can only be called by the contract governor, it's used to maintain + * a whitelist of verifiers that do not allow the stake from a locked wallet to escape the lock. + * @dev Emits a {AllowedLockedVerifierSet} event. + * @param verifier The verifier address + * @param allowed Whether the verifier is allowed or not + */ + function setAllowedLockedVerifier(address verifier, bool allowed) external; /** - * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param operator The address to check for auth - * @param serviceProvider The service provider on behalf of whom they're claiming to act - * @param verifier The verifier / data service on which they're claiming to act + * @notice Set the global delegation slashing flag. + * @dev This function can only be called by the contract governor. + * @param enabled Whether delegation slashing is enabled or disabled. */ - function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); + function setDelegationSlashingEnabled(bool enabled) external; + /** + * @notice Clear the legacy global thawing period. + * This signifies the end of the transition period, after which no legacy allocations should be left. + * @dev This function can only be called by the contract governor. + * @dev Emits a {ThawingPeriodCleared} event. + */ function clearThawingPeriod() external; - function delegate(address serviceProvider, uint256 tokens) external; + /** + * @notice Sets the global maximum thawing period allowed for provisions. + * @param maxThawingPeriod The new maximum thawing period, in seconds + */ + function setMaxThawingPeriod(uint64 maxThawingPeriod) external; - function undelegate(address serviceProvider, uint256 shares) external; + /** + * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * @dev Emits a {OperatorSet} event. + * @param operator Address to authorize or unauthorize + * @param verifier The verifier / data service on which they'll be allowed to operate + * @param allowed Whether the operator is authorized or not + */ + function setOperator(address operator, address verifier, bool allowed) external; - function withdrawDelegated(address serviceProvider, address newServiceProvider) external; + /** + * @notice Check if an operator is authorized for the caller on a specific verifier / data service. + * @param operator The address to check for auth + * @param serviceProvider The service provider on behalf of whom they're claiming to act + * @param verifier The verifier / data service on which they're claiming to act + * @return Whether the operator is authorized or not + */ + function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index 0b59e0b8c..ae2a05516 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -2,83 +2,139 @@ pragma solidity 0.8.26; -// TODO: create custom var-name-mixedcase +/* solhint-disable var-name-mixedcase */ // TODO: create custom var-name-mixedcase +/** + * @title Defines the data types used in the Horizon staking contract + * @dev In order to preserve storage compatibility some data structures keep deprecated fields. + * These structures have then two representations, an internal one used by the contract storage and a public one. + * Getter functions should retrieve internal representations, remove deprecated fields and return the public representation. + */ interface IHorizonStakingTypes { + /** + * @notice Represents stake assigned to a specific verifier/data service. + * Provisioned stake is locked and can be used as economic security by a data service. + */ struct Provision { - // service provider tokens in the provision + // Service provider tokens in the provision (does not include delegated tokens) uint256 tokens; - // service provider tokens that are being thawed (and will stop being slashable soon) + // Service provider tokens that are being thawed (and will stop being slashable soon) uint256 tokensThawing; - // shares representing the thawing tokens + // Shares representing the thawing tokens uint256 sharesThawing; - // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed + // Max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed uint32 maxVerifierCut; - // time, in seconds, tokens must thaw before being withdrawn + // Time, in seconds, tokens must thaw before being withdrawn uint64 thawingPeriod; + // Timestamp when the provision was created uint64 createdAt; - // max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed + // Pending value for `maxVerifierCut`. Verifier needs to accept it before it becomes active. uint32 maxVerifierCutPending; - // time, in seconds, tokens must thaw before being withdrawn + // Pending value for `thawingPeriod`. Verifier needs to accept it before it becomes active. uint64 thawingPeriodPending; } + /** + * @notice Public representation of a service provider. + * @dev See {ServiceProviderInternal} for the actual storage representation + */ struct ServiceProvider { - // Tokens on the provider stake (staked by the provider) + // Total amount of tokens on the provider stake (only staked by the provider, inludes all provisions) uint256 tokensStaked; - // tokens used in a provision + // Total amount of tokens locked in provisions (only staked by the provider) uint256 tokensProvisioned; } - // the new "Indexer" struct + /** + * @notice Internal representation of a service provider. + * @dev It contains deprecated fields from the `Indexer` struct to maintain storage compatibility. + */ struct ServiceProviderInternal { - // Tokens on the Service Provider stake (staked by the provider) + // Total amount of tokens on the provider stake (only staked by the provider, inludes all provisions) uint256 tokensStaked; - // Tokens used in allocations + // (Deprecated) Tokens used in allocations uint256 __DEPRECATED_tokensAllocated; // solhint-disable-line graph/leading-underscore - // Tokens locked for withdrawal subject to thawing period + // (Deprecated) Tokens locked for withdrawal subject to thawing period uint256 __DEPRECATED_tokensLocked; - // Block when locked tokens can be withdrawn + // (Deprecated) Block when locked tokens can be withdrawn uint256 __DEPRECATED_tokensLockedUntil; - // tokens used in a provision + // Total amount of tokens locked in provisions (only staked by the provider) uint256 tokensProvisioned; } + /** + * @notice Public representation of a delegation pool. + * @dev See {DelegationPoolInternal} for the actual storage representation + */ struct DelegationPool { - uint256 tokens; // Total tokens as pool reserves - uint256 shares; // Total shares minted in the pool - uint256 tokensThawing; // Tokens thawing in the pool - uint256 sharesThawing; // Shares representing the thawing tokens + // Total tokens as pool reserves + uint256 tokens; + // Total shares minted in the pool + uint256 shares; + // Tokens thawing in the pool + uint256 tokensThawing; + // Shares representing the thawing tokens + uint256 sharesThawing; } + /** + * @notice Internal representation of a delegation pool. + * @dev It contains deprecated fields from the previous version of the `DelegationPool` struct + * to maintain storage compatibility. + */ struct DelegationPoolInternal { + // (Deprecated) Time, in blocks, an indexer must wait before updating delegation parameters uint32 __DEPRECATED_cooldownBlocks; - uint32 __DEPRECATED_indexingRewardCut; // in PPM - uint32 __DEPRECATED_queryFeeCut; // in PPM - uint256 __DEPRECATED_updatedAtBlock; // Block when the pool was last updated - uint256 tokens; // Total tokens as pool reserves - uint256 shares; // Total shares minted in the pool - mapping(address => DelegationInternal) delegators; // Mapping of delegator => Delegation - uint256 tokensThawing; // Tokens thawing in the pool - uint256 sharesThawing; // Shares representing the thawing tokens + // (Deprecated) Percentage of indexing rewards for the delegation pool, in PPM + uint32 __DEPRECATED_indexingRewardCut; + // (Deprecated) Percentage of query fees for the delegation pool, in PPM + uint32 __DEPRECATED_queryFeeCut; + // (Deprecated) Block when the delegation parameters were last updated + uint256 __DEPRECATED_updatedAtBlock; + // Total tokens as pool reserves + uint256 tokens; + // Total shares minted in the pool + uint256 shares; + // Delegation details by delegator + mapping(address delegator => DelegationInternal delegation) delegators; + // Tokens thawing in the pool + uint256 tokensThawing; + // Shares representing the thawing tokens + uint256 sharesThawing; } + /** + * @notice Public representation of delegation details. + * @dev See {DelegationInternal} for the actual storage representation + */ struct Delegation { uint256 shares; // Shares owned by a delegator in the pool } + /** + * @notice Internal representation of delegation details. + * @dev It contains deprecated fields from the previous version of the `Delegation` struct + * to maintain storage compatibility. + */ struct DelegationInternal { - uint256 shares; // Shares owned by a delegator in the pool - uint256 __DEPRECATED_tokensLocked; // Tokens locked for undelegation - uint256 __DEPRECATED_tokensLockedUntil; // Epoch when locked tokens can be withdrawn + // Shares owned by the delegator in the pool + uint256 shares; + // (Deprecated) Tokens locked for undelegation + uint256 __DEPRECATED_tokensLocked; + // (Deprecated) Epoch when locked tokens can be withdrawn + uint256 __DEPRECATED_tokensLockedUntil; } + /** + * @notice Details of a stake thawing operation. + * @dev ThawRequests are stored in linked lists by service provider/delegator. + */ struct ThawRequest { - // shares that represent the tokens being thawed + // Shares that represent the tokens being thawed uint256 shares; - // the timestamp when the thawed funds can be removed from the provision + // The timestamp when the thawed funds can be removed from the provision uint64 thawingUntil; - // id of the next thaw request in the linked list + // Id of the next thaw request in the linked list bytes32 next; } } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 939200cf4..015ea5bcc 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -15,13 +15,15 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; /** * @title HorizonStaking contract - * @dev This contract is the main Staking contract in The Graph protocol after the Horizon upgrade. - * It is designed to be deployed as an upgrade to the L2Staking contract from the legacy contracts - * package. - * @dev It uses a HorizonStakingExtension contract to implement the full IHorizonStaking interface through delegatecalls. - * This is due to the contract size limit on Arbitrum (24kB). The extension contract contains functionality to support - * the legacy staking functions and the transfer tools. Both can be eventually safely removed without affecting - * the main staking contract. + * @notice The {HorizonStaking} contract allows service providers to stake and provision tokens to verifiers to be used + * as economic security for a service. It also allows delegators to delegate towards a service provider provision. + * @dev Implements the {IHorizonStakingMain} interface. + * @dev This is the main Staking contract in The Graph protocol after the Horizon upgrade. + * It is designed to be deployed as an upgrade to the L2Staking contract from the legacy contracts package. + * @dev It uses a {HorizonStakingExtension} contract to implement the full {IHorizonStaking} interface through delegatecalls. + * This is due to the contract size limit on Arbitrum (24kB). The extension contract implements functionality to support + * the legacy staking functions and the transfer tools. Both can be eventually removed without affecting the main + * staking contract. */ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { using TokenUtils for IGraphToken; @@ -46,8 +48,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /// (delegation on L2 has its own slippage protection) uint256 private constant MIN_DELEGATION = 1e18; + /// @dev Address of the staking extension contract address private immutable STAKING_EXTENSION_ADDRESS; + /** + * @notice Checks that the caller is authorized to operate over a provision. + * @param serviceProvider The address of the service provider. + * @param verifier The address of the verifier. + */ modifier onlyAuthorized(address serviceProvider, address verifier) { require( _isAuthorized(msg.sender, serviceProvider, verifier), @@ -56,6 +64,13 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _; } + /** + * @dev The staking contract is upgradeable however we stil use the constructor to set + * a few immutable variables. + * @param controller The address of the Graph controller contract. + * @param stakingExtensionAddress The address of the staking extension contract. + * @param subgraphDataServiceAddress The address of the subgraph data service. + */ constructor( address controller, address stakingExtensionAddress, @@ -103,28 +118,21 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { */ /** - * @notice Deposit tokens on the caller's stake. - * @param tokens Amount of tokens to stake + * @notice See {IHorizonStakingMain-stake}. */ function stake(uint256 tokens) external override notPaused { _stakeTo(msg.sender, tokens); } /** - * @notice Deposit tokens on the service provider stake, on behalf of the service provider. - * @param serviceProvider Address of the service provider - * @param tokens Amount of tokens to stake + * @notice See {IHorizonStakingMain-stakeTo}. */ function stakeTo(address serviceProvider, uint256 tokens) external override notPaused { _stakeTo(serviceProvider, tokens); } /** - * @notice Deposit tokens on the service provider stake, on behalf of the service provider, provisioned - * to a specific verifier. The provider must have previously provisioned stake to that verifier. - * @param serviceProvider Address of the service provider - * @param verifier Address of the verifier - * @param tokens Amount of tokens to stake + * @notice See {IHorizonStakingMain-stakeToProvision}. */ function stakeToProvision(address serviceProvider, address verifier, uint256 tokens) external override notPaused { _stakeTo(serviceProvider, tokens); @@ -132,22 +140,17 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @notice Move idle stake back to the owner's account. - * If tokens were thawing they must be deprovisioned first. - * Stake is removed from the protocol. - * @param tokens Amount of tokens to unstake + * @notice See {IHorizonStakingMain-unstake}. */ function unstake(uint256 tokens) external override notPaused { _unstake(tokens); } /** - * @notice Withdraw service provider tokens once the thawing period has passed. - * @dev This is only needed during the transition period while we still have - * a global lock. After that, unstake() will also withdraw. + * @notice See {IHorizonStakingMain-withdraw}. */ function withdraw() external override notPaused { - _withdraw(msg.sender); + _withdraw(msg.sender, true); } /* @@ -155,16 +158,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { */ /** - * @notice Provision stake to a verifier. The tokens will be locked with a thawing period - * and will be slashable by the verifier. This is the main mechanism to provision stake to a data - * service, where the data service is the verifier. - * This function can be called by the service provider or by an operator authorized by the provider - * for this specific verifier. - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) - * @param tokens The amount of tokens that will be locked and slashable - * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing - * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + * @notice See {IHorizonStakingMain-provision}. */ function provision( address serviceProvider, @@ -177,12 +171,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @notice Add more tokens to an existing provision. - * This function can be called by the service provider or by an operator authorized by the provider - * for this specific verifier. - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned - * @param tokens The amount of tokens to add to the provision + * @notice See {IHorizonStakingMain-addToProvision}. */ function addToProvision( address serviceProvider, @@ -193,12 +182,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @notice Start thawing tokens to remove them from a provision. - * This function can be called by the service provider or by an operator authorized by the provider - * for this specific verifier. - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned - * @param tokens The amount of tokens to thaw + * @notice See {IHorizonStakingMain-thaw}. */ function thaw( address serviceProvider, @@ -208,7 +192,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { return _thaw(serviceProvider, verifier, tokens); } - // moves thawed stake from a provision back into the provider's available stake + /** + * @notice See {IHorizonStakingMain-deprovision}. + */ function deprovision( address serviceProvider, address verifier, @@ -218,14 +204,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @notice Move already thawed stake from one provision into another provision - * This function can be called by the service provider or by an operator authorized by the provider - * for the two corresponding verifiers. - * The provider must have previously provisioned tokens to the new verifier. - * @param serviceProvider The service provider address - * @param oldVerifier The verifier address for which the tokens are currently provisioned - * @param newVerifier The verifier address for which the tokens will be provisioned - * @param tokens The amount of tokens to move + * @notice See {IHorizonStakingMain-reprovision}. */ function reprovision( address serviceProvider, @@ -244,6 +223,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _addToProvision(serviceProvider, newVerifier, tokens); } + /** + * @notice See {IHorizonStakingMain-setProvisionParameters}. + */ function setProvisionParameters( address serviceProvider, address verifier, @@ -256,6 +238,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit ProvisionParametersStaged(serviceProvider, verifier, maxVerifierCut, thawingPeriod); } + /** + * @notice See {IHorizonStakingMain-acceptProvisionParameters}. + */ function acceptProvisionParameters(address serviceProvider) external override notPaused { address verifier = msg.sender; Provision storage prov = _provisions[serviceProvider][verifier]; @@ -268,6 +253,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * DELEGATION */ + /** + * @notice See {IHorizonStakingMain-delegate}. + */ function delegate( address serviceProvider, address verifier, @@ -279,11 +267,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @notice Add tokens to a delegation pool (without getting shares). - * Used by data services to pay delegation fees/rewards. - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned - * @param tokens The amount of tokens to add to the delegation pool + * @notice See {IHorizonStakingMain-addToDelegationPool}. */ function addToDelegationPool( address serviceProvider, @@ -296,8 +280,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit TokensToDelegationPoolAdded(serviceProvider, verifier, tokens); } - // undelegate tokens from a service provider - // the shares are burned and replaced with shares in the thawing pool + /** + * @notice See {IHorizonStakingMain-undelegate}. + */ function undelegate( address serviceProvider, address verifier, @@ -306,6 +291,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { return _undelegate(serviceProvider, verifier, shares); } + /** + * @notice See {IHorizonStakingMain-withdrawDelegated}. + */ function withdrawDelegated( address serviceProvider, address verifier, @@ -316,6 +304,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _withdrawDelegated(serviceProvider, verifier, newServiceProvider, minSharesForNewProvider, nThawRequests); } + /** + * @notice See {IHorizonStakingMain-setDelegationFeeCut}. + */ function setDelegationFeeCut( address serviceProvider, address verifier, @@ -326,19 +317,24 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); } - // For backwards compatibility, delegates to the subgraph data service - // (Note this one doesn't have splippage/rounding protection!) + /** + * @notice See {IHorizonStakingMain-delegate}. + */ function delegate(address serviceProvider, uint256 tokens) external override notPaused { _graphToken().pullTokens(msg.sender, tokens); _delegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, tokens, 0); } - // For backwards compatibility, undelegates from the subgraph data service + /** + * @notice See {IHorizonStakingMain-undelegate}. + */ function undelegate(address serviceProvider, uint256 shares) external override notPaused { _undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares); } - // For backwards compatibility, withdraws delegated tokens from the subgraph data service + /** + * @notice See {IHorizonStakingMain-withdrawDelegated}. + */ function withdrawDelegated(address serviceProvider, address newServiceProvider) external override notPaused { _withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0, 0); } @@ -348,14 +344,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { */ /** - * @notice Slash a service provider. This can only be called by a verifier to which - * the provider has provisioned stake, and up to the amount of tokens they have provisioned. - * @dev If delegation slashing is disabled, and the amount of tokens is more than the - * provider's provisioned self-stake, the delegation slashing is skipped without reverting. - * @param serviceProvider The service provider to slash - * @param tokens The amount of tokens to slash - * @param tokensVerifier The amount of tokens to transfer instead of burning - * @param verifierDestination The address to transfer the verifier cut to + * @notice See {IHorizonStakingMain-slash}. */ function slash( address serviceProvider, @@ -370,10 +359,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokensToSlash = tokens; uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); if (providerTokensSlashed > 0) { - uint256 maxVerifierCut = prov.tokens.mulPPM(prov.maxVerifierCut); + uint256 maxVerifierTokens = prov.tokens.mulPPM(prov.maxVerifierCut); require( - maxVerifierCut >= tokensVerifier, - HorizonStakingVerifierTokensTooHigh(tokensVerifier, maxVerifierCut) + maxVerifierTokens >= tokensVerifier, + HorizonStakingTooManyTokens(tokensVerifier, maxVerifierTokens) ); if (tokensVerifier > 0) { _graphToken().pushTokens(verifierDestination, tokensVerifier); @@ -418,16 +407,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { */ /** - * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets). The tokens will be locked with a thawing period - * and will be slashable by the verifier. This is the main mechanism to provision stake to a data - * service, where the data service is the verifier. Only authorized verifiers can be used. - * This function can be called by the service provider or by an operator authorized by the provider - * for this specific verifier. - * @param serviceProvider The service provider address - * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens) - * @param tokens The amount of tokens that will be locked and slashable - * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing - * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision + * @notice See {IHorizonStakingMain-provisionLocked}. */ function provisionLocked( address serviceProvider, @@ -440,7 +420,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _createProvision(serviceProvider, tokens, verifier, maxVerifierCut, thawingPeriod); } - // for vesting contracts + /** + * @notice See {IHorizonStakingMain-setOperatorLocked}. + */ function setOperatorLocked(address operator, address verifier, bool allowed) external override notPaused { require(_allowedLockedVerifiers[verifier], HorizonStakingVerifierNotAllowed(verifier)); _setOperator(operator, verifier, allowed); @@ -450,22 +432,33 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * GOVERNANCE */ + /** + * @notice See {IHorizonStakingMain-setAllowedLockedVerifier}. + */ function setAllowedLockedVerifier(address verifier, bool allowed) external override onlyGovernor { _allowedLockedVerifiers[verifier] = allowed; emit AllowedLockedVerifierSet(verifier, allowed); } + /** + * @notice See {IHorizonStakingMain-setDelegationSlashingEnabled}. + */ function setDelegationSlashingEnabled(bool enabled) external override onlyGovernor { _delegationSlashingEnabled = enabled; emit DelegationSlashingEnabled(enabled); } - // To be called at the end of the transition period, to set the deprecated thawing period to 0 + /** + * @notice See {IHorizonStakingMain-clearThawingPeriod}. + */ function clearThawingPeriod() external override onlyGovernor { __DEPRECATED_thawingPeriod = 0; emit ThawingPeriodCleared(); } + /** + * @notice See {IHorizonStakingMain-setMaxThawingPeriod}. + */ function setMaxThawingPeriod(uint64 maxThawingPeriod) external override onlyGovernor { _maxThawingPeriod = maxThawingPeriod; emit MaxThawingPeriodSet(_maxThawingPeriod); @@ -476,20 +469,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { */ /** - * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. - * @param operator Address to authorize or unauthorize - * @param verifier The verifier / data service on which they'll be allowed to operate - * @param allowed Whether the operator is authorized or not + * @notice See {IHorizonStakingMain-setOperator}. */ function setOperator(address operator, address verifier, bool allowed) external override notPaused { _setOperator(operator, verifier, allowed); } /** - * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param operator The address to check for auth - * @param serviceProvider The service provider on behalf of whom they're claiming to act - * @param verifier The verifier / data service on which they're claiming to act + * @notice See {IHorizonStakingMain-isAuthorized}. */ function isAuthorized( address operator, @@ -502,6 +489,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /* * PRIVATE FUNCTIONS */ + + /** + * @notice See {IHorizonStakingMain-stakeTo}. + */ function _stakeTo(address _serviceProvider, uint256 _tokens) private { require(_tokens != 0, HorizonStakingInvalidZeroTokens()); @@ -512,10 +503,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _stake(_serviceProvider, _tokens); } + /** + * @notice See {IHorizonStakingMain-unstake}. + */ function _unstake(uint256 _tokens) private { address serviceProvider = msg.sender; require(_tokens != 0, HorizonStakingInvalidZeroTokens()); - require(_tokens <= _getIdleStake(serviceProvider), HorizonStakingInsufficientCapacity()); + uint256 tokensIdle = _getIdleStake(serviceProvider); + require(_tokens <= tokensIdle, HorizonStakingInsufficientIdleStake(_tokens, tokensIdle)); ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; uint256 stakedTokens = sp.tokensStaked; @@ -523,9 +518,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // to cover existing allocations // TODO this is only needed until legacy allocations are closed, // so we should remove it after the transition period + uint256 remainingTokens = stakedTokens - _tokens; require( - stakedTokens - _tokens >= sp.__DEPRECATED_tokensAllocated, - HorizonStakingInsufficientCapacityForLegacyAllocations() + remainingTokens >= sp.__DEPRECATED_tokensAllocated, + HorizonStakingInsufficientStakeForLegacyAllocations(remainingTokens, sp.__DEPRECATED_tokensAllocated) ); // This is also only during the transition period: we need @@ -540,7 +536,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } else { // Before locking more tokens, withdraw any unlocked ones if possible if (sp.__DEPRECATED_tokensLockedUntil != 0 && block.number >= sp.__DEPRECATED_tokensLockedUntil) { - _withdraw(serviceProvider); + _withdraw(serviceProvider, false); } // TODO remove after the transition period // Take into account period averaging for multiple unstake requests @@ -561,18 +557,24 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @dev Withdraw service provider tokens once the thawing period has passed. + * @notice See {IHorizonStakingMain-withdraw}. * @param _serviceProvider Address of service provider to withdraw funds from + * @param revertIfThawing If true, the function will revert if the tokens are still thawing */ - function _withdraw(address _serviceProvider) private { + function _withdraw(address _serviceProvider, bool revertIfThawing) private { // Get tokens available for withdraw and update balance ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; - require(tokensToWithdraw > 0, HorizonStakingInvalidZeroTokens()); - require( - block.timestamp >= sp.__DEPRECATED_tokensLockedUntil, - HorizonStakingStillThawing(sp.__DEPRECATED_tokensLockedUntil) - ); + require(tokensToWithdraw != 0, HorizonStakingInvalidZeroTokens()); + + if (revertIfThawing) { + require( + block.timestamp >= sp.__DEPRECATED_tokensLockedUntil, + HorizonStakingStillThawing(sp.__DEPRECATED_tokensLockedUntil) + ); + } else { + return; + } // Reset locked tokens sp.__DEPRECATED_tokensLocked = 0; @@ -587,7 +589,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @dev Creates a provision + * @notice See {IHorizonStakingMain-createProvision}. */ function _createProvision( address _serviceProvider, @@ -596,7 +598,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint32 _maxVerifierCut, uint64 _thawingPeriod ) private { - require(_tokens >= MIN_PROVISION_SIZE, HorizonStakingInvalidTokens(_tokens, MIN_PROVISION_SIZE)); + require(_tokens >= MIN_PROVISION_SIZE, HorizonStakingInsufficientTokens(_tokens, MIN_PROVISION_SIZE)); require( _maxVerifierCut <= MAX_MAX_VERIFIER_CUT, HorizonStakingInvalidMaxVerifierCut(_maxVerifierCut, MAX_MAX_VERIFIER_CUT) @@ -605,7 +607,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _thawingPeriod <= _maxThawingPeriod, HorizonStakingInvalidThawingPeriod(_thawingPeriod, _maxThawingPeriod) ); - require(_tokens <= _getIdleStake(_serviceProvider), HorizonStakingInsufficientCapacity()); + uint256 tokensIdle = _getIdleStake(_serviceProvider); + require(_tokens <= tokensIdle, HorizonStakingInsufficientIdleStake(_tokens, tokensIdle)); _provisions[_serviceProvider][_verifier] = Provision({ tokens: _tokens, @@ -624,11 +627,15 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit ProvisionCreated(_serviceProvider, _verifier, _tokens, _maxVerifierCut, _thawingPeriod); } + /** + * @notice See {IHorizonStakingMain-addToProvision}. + */ function _addToProvision(address _serviceProvider, address _verifier, uint256 _tokens) private { Provision storage prov = _provisions[_serviceProvider][_verifier]; require(_tokens != 0, HorizonStakingInvalidZeroTokens()); require(prov.createdAt != 0, HorizonStakingInvalidProvision(_serviceProvider, _verifier)); - require(_tokens <= _getIdleStake(_serviceProvider), HorizonStakingInsufficientCapacity()); + uint256 tokensIdle = _getIdleStake(_serviceProvider); + require(_tokens <= tokensIdle, HorizonStakingInsufficientIdleStake(_tokens, tokensIdle)); prov.tokens = prov.tokens + _tokens; _serviceProviders[_serviceProvider].tokensProvisioned = @@ -637,16 +644,18 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit ProvisionIncreased(_serviceProvider, _verifier, _tokens); } + /** + * @notice See {IHorizonStakingMain-thaw}. + */ function _thaw(address _serviceProvider, address _verifier, uint256 _tokens) private returns (bytes32) { require(_tokens != 0, HorizonStakingInvalidZeroTokens()); uint256 tokensAvailable = _getProviderTokensAvailable(_serviceProvider, _verifier); - require(tokensAvailable >= _tokens, HorizonStakingInsufficientTokensAvailable(tokensAvailable, _tokens)); + require(tokensAvailable >= _tokens, HorizonStakingInsufficientTokens(tokensAvailable, _tokens)); Provision storage prov = _provisions[_serviceProvider][_verifier]; uint256 thawingShares = prov.sharesThawing == 0 ? _tokens : (prov.sharesThawing * _tokens) / prov.tokensThawing; uint64 thawingUntil = uint64(block.timestamp + uint256(prov.thawingPeriod)); - // provision accounting prov.tokensThawing = prov.tokensThawing + _tokens; prov.sharesThawing = prov.sharesThawing + thawingShares; @@ -661,6 +670,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { return thawRequestId; } + /** + * @notice See {IHorizonStakingMain-deprovision}. + */ function _deprovision(address _serviceProvider, address _verifier, uint256 _nThawRequests) private { Provision storage prov = _provisions[_serviceProvider][_verifier]; @@ -684,13 +696,18 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit TokensDeprovisioned(_serviceProvider, _verifier, tokensThawed); } + /** + * @notice See {IHorizonStakingMain-delegate}. + * @dev Note that this function does not pull the delegated tokens from the caller. It expects that to + * have been done before calling this function. + */ function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) private { require(_tokens != 0, HorizonStakingInvalidZeroTokens()); // TODO: remove this after L2 transfer tool for delegation is removed - require(_tokens >= MIN_DELEGATION, HorizonStakingInsufficientTokens(MIN_DELEGATION, _tokens)); + require(_tokens >= MIN_DELEGATION, HorizonStakingInsufficientTokens(_tokens, MIN_DELEGATION)); require( - _provisions[_serviceProvider][_verifier].tokens != 0, + _provisions[_serviceProvider][_verifier].createdAt != 0, HorizonStakingInvalidProvision(_serviceProvider, _verifier) ); @@ -699,7 +716,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // Calculate shares to issue uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); - require(shares != 0 && shares >= _minSharesOut, HorizonStakingSlippageProtection(_minSharesOut, shares)); + require(shares != 0 && shares >= _minSharesOut, HorizonStakingSlippageProtection(shares, _minSharesOut)); pool.tokens = pool.tokens + _tokens; pool.shares = pool.shares + shares; @@ -709,11 +726,16 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit TokensDelegated(_serviceProvider, _verifier, msg.sender, _tokens); } + /** + * @notice See {IHorizonStakingMain-undelegate}. + * @dev To allow delegation to be slashable even while thawing without breaking accounting + * the delegation pool shares are burned and replaced with thawing pool shares. + */ function _undelegate(address _serviceProvider, address _verifier, uint256 _shares) private returns (bytes32) { require(_shares > 0, HorizonStakingInvalidZeroShares()); DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); DelegationInternal storage delegation = pool.delegators[msg.sender]; - require(delegation.shares >= _shares, HorizonStakingInvalidSharesAmount(delegation.shares, _shares)); + require(delegation.shares >= _shares, HorizonStakingInsufficientShares(delegation.shares, _shares)); uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); @@ -744,6 +766,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { return thawRequestId; } + /** + * @notice See {IHorizonStakingMain-withdrawDelegated}. + */ function _withdrawDelegated( address _serviceProvider, address _verifier, @@ -778,6 +803,19 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit DelegatedTokensWithdrawn(_serviceProvider, _verifier, msg.sender, tokensThawed); } + /** + * @notice Creates a thaw request. + * Allows creating thaw requests up to a maximum of `MAX_THAW_REQUESTS` per owner. + * Thaw requests are stored in a linked list per owner (and service provider, verifier) to allow for efficient + * processing. + * @dev Emits a {ThawRequestCreated} event. + * @param _serviceProvider The address of the service provider + * @param _verifier The address of the verifier + * @param _owner The address of the owner of the thaw request + * @param _shares The number of shares to thaw + * @param _thawingUntil The timestamp until which the shares are thawing + * @return The ID of the thaw request + */ function _createThawRequest( address _serviceProvider, address _verifier, @@ -798,6 +836,19 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { return thawRequestId; } + /** + * @notice Traverses a thaw request list and fulfills expired thaw requests. + * @dev Emits a {ThawRequestsFulfilled} event and a {ThawRequestFulfilled} event for each thaw request fulfilled. + * @param _serviceProvider The address of the service provider + * @param _verifier The address of the verifier + * @param _owner The address of the owner of the thaw request + * @param _tokensThawing The current amount of tokens already thawing + * @param _sharesThawing The current amount of shares already thawing + * @param _nThawRequests The number of thaw requests to fulfill. If set to 0, all thaw requests are fulfilled. + * @return The amount of thawed tokens + * @return The amount of tokens still thawing + * @return The amount of shares still thawing + */ function _fulfillThawRequests( address _serviceProvider, address _verifier, @@ -823,6 +874,17 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { return (tokensThawed, _tokensThawing, _sharesThawing); } + /** + * @notice Fulfills a thaw request. + * @dev This function is used as a callback in the linked list traversal. + * + * Emits a {ThawRequestFulfilled} event. + * + * @param _thawRequestId The ID of the current thaw request + * @return Wether the thaw request is still thawing, indicating that the traversal should continue or stop. + * @return Wether the thaw request should be deleted + * @return The updated accumulator data + */ function _fulfillThawRequest(bytes32 _thawRequestId, bytes memory _acc) private returns (bool, bool, bytes memory) { ThawRequest storage thawRequest = _thawRequests[_thawRequestId]; @@ -849,10 +911,20 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { return (false, true, _acc); } + /** + * @notice Deletes a ThawRequest. + * @dev This function is used as a callback in the linked list traversal. + * @param _thawRequestId The ID of the thaw request to delete + */ function _deleteThawRequest(bytes32 _thawRequestId) private { delete _thawRequests[_thawRequestId]; } + /** + * @notice See {IHorizonStakingMain-setOperator}. + * @dev Note that this function handles the special case where the verifier is the subgraph data service, + * where the operator settings are stored in the legacy mapping. + */ function _setOperator(address _operator, address _verifier, bool _allowed) private { require(_operator != msg.sender, HorizonStakingCallerIsServiceProvider()); if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { @@ -863,6 +935,11 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit OperatorSet(msg.sender, _operator, _verifier, _allowed); } + /** + * @notice See {IHorizonStakingMain-isAuthorized}. + * @dev Note that this function handles the special case where the verifier is the subgraph data service, + * where the operator settings are stored in the legacy mapping. + */ function _isAuthorized(address _operator, address _serviceProvider, address _verifier) private view returns (bool) { if (_operator == _serviceProvider) { return true; diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index e338b9e03..c173c4bec 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -16,8 +16,11 @@ import { HorizonStakingV1Storage } from "./HorizonStakingStorage.sol"; /** * @title HorizonStakingBase contract - * @dev This contract is the base staking contract, to be inherited by HorizonStaking and HorizonStakingExtension. - * It implements all storage getters for both internal and external use. + * @notice This contract is the base staking contract implementing storage getters for both internal + * and external use. + * @dev Implementation of the {IHorizonStakingBase} interface. + * @dev It's meant to be inherited by the {HorizonStaking} and {HorizonStakingExtension} + * contracts so some internal functions are also included here. */ abstract contract HorizonStakingBase is Multicall, @@ -29,8 +32,18 @@ abstract contract HorizonStakingBase is { using LinkedList for LinkedList.List; + /** + * @notice The address of the subgraph data service. + * @dev Require to handle the special case when the verifier is the subgraph data service. + */ address internal immutable SUBGRAPH_DATA_SERVICE_ADDRESS; + /** + * @dev The staking contract is upgradeable however we stil use the constructor to set + * a few immutable variables. + * @param controller The address of the Graph controller contract. + * @param subgraphDataServiceAddress The address of the subgraph data service. + */ constructor(address controller, address subgraphDataServiceAddress) Managed(controller) { SUBGRAPH_DATA_SERVICE_ADDRESS = subgraphDataServiceAddress; } @@ -216,6 +229,8 @@ abstract contract HorizonStakingBase is * needs to be here since it's used by both {HorizonStaking} and {HorizonStakingExtension}. * * Emits a {StakeDeposited} event. + * @param _serviceProvider The address of the service provider. + * @param _tokens The amount of tokens to deposit. */ function _stake(address _serviceProvider, uint256 _tokens) internal { _serviceProviders[_serviceProvider].tokensStaked = _serviceProviders[_serviceProvider].tokensStaked + _tokens; @@ -223,9 +238,8 @@ abstract contract HorizonStakingBase is } /** - * @dev Gets the idle stake of a service provider. - * - * Note that the calculation considers tokens that were locked in the legacy staking contract. + * @notice See {IHorizonStakingBase-getIdleStake}. + * @dev Note that the calculation considers tokens that were locked in the legacy staking contract. * TODO: update the calculation after the transition period. */ function _getIdleStake(address _serviceProvider) internal view returns (uint256) { @@ -236,10 +250,9 @@ abstract contract HorizonStakingBase is } /** - * @dev Gets a delegation pool. - * - * Note that there is a special case if the verifier is the subgraph data service, since - * in that case the pools are stored in the legacy mapping. + * @notice See {IHorizonStakingBase-getDelegationPool}. + * @dev Note that this function handles the special case where the verifier is the subgraph data service, + * where the pools are stored in the legacy mapping. */ function _getDelegationPool( address _serviceProvider, @@ -255,14 +268,14 @@ abstract contract HorizonStakingBase is } /** - * @dev See {IHorizonStakingBase-getProviderTokensAvailable}. + * @notice See {IHorizonStakingBase-getProviderTokensAvailable}. */ function _getProviderTokensAvailable(address _serviceProvider, address _verifier) internal view returns (uint256) { return _provisions[_serviceProvider][_verifier].tokens - _provisions[_serviceProvider][_verifier].tokensThawing; } /** - * @dev See {IHorizonStakingBase-getDelegatedTokensAvailable}. + * @notice See {IHorizonStakingBase-getDelegatedTokensAvailable}. */ function _getDelegatedTokensAvailable(address _serviceProvider, address _verifier) internal view returns (uint256) { DelegationPoolInternal storage poolInternal = _getDelegationPool(_serviceProvider, _verifier); @@ -270,7 +283,7 @@ abstract contract HorizonStakingBase is } /** - * @dev Gets the next thaw request in the list. + * @notice Gets the next thaw request after `_thawRequestId`. */ function _getNextThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { return _thawRequests[_thawRequestId].next; diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 6265583fe..c2d7685b4 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -19,14 +19,12 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; /** * @title Horizon Staking extension contract - * @dev This contract contains: - * - all the legacy staking functionality, required to support the transition period - * - transfer tools support functions - * TODO: once the transition period and the transfer tools are deemed not necessary this contract - * can be removed. - * @dev The Staking contract allows Indexers to Stake on Subgraphs. Indexers Stake by creating - * Allocations on a Subgraph. It also allows Delegators to Delegate towards an Indexer. The - * contract also has the slashing functionality. + * @notice The {HorizonStakingExtension} contract implements the legacy functionality required to support the transition + * to the Horizon Staking contract. It allows indexers to close allocations and collect pending query fees, but it + * does not allow for the creation of new allocations. This should allow indexers to migrate to a subgraph data service + * without losing rewards or having service interruptions. + * @dev TODO: Once the transition period and the transfer tools are deemed not necessary this contract + * can be removed. It's expected the transition period to last for a full allocation cycle (28 epochs). */ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2StakingBase, IHorizonStakingExtension { using TokenUtils for IGraphToken; @@ -43,6 +41,12 @@ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2Staki _; } + /** + * @dev The staking contract is upgradeable however we stil use the constructor to set + * a few immutable variables. + * @param controller The address of the Graph controller contract. + * @param subgraphDataServiceAddress The address of the subgraph data service. + */ constructor( address controller, address subgraphDataServiceAddress diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index c69bbca51..2b58b02c7 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -8,14 +8,15 @@ import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { LinkedList } from "../libraries/LinkedList.sol"; -// TODO: create custom var-name-mixedcase -/* solhint-disable var-name-mixedcase */ +/* solhint-disable var-name-mixedcase */ // TODO: create custom var-name-mixedcase +/* solhint-disable max-states-count */ /** * @title HorizonStakingV1Storage - * @notice This contract holds all the storage variables for the Staking contract, version 1 + * @notice This contract holds all the storage variables for the Staking contract. + * @dev Deprecated variables are kept to support the transition to Horizon Staking. + * They can eventually be collapsed into a single storage slot. */ -// solhint-disable-next-line max-states-count abstract contract HorizonStakingV1Storage { // -- Staking -- @@ -38,34 +39,36 @@ abstract contract HorizonStakingV1Storage { uint32 internal __DEPRECATED_protocolPercentage; /// @dev Period for allocation to be finalized + /// Deprecated with exponential rebates. uint32 private __DEPRECATED_channelDisputeEpochs; - /// @dev Maximum allocation time. Deprecated, allocations now live on the subgraph service contract. + /// @dev Maximum allocation time. + /// Deprecated, allocations now live on the subgraph service contract. uint32 internal __DEPRECATED_maxAllocationEpochs; /// @dev Rebate alpha numerator /// Originally used for Cobb-Douglas rebates, now used for exponential rebates - /// Deprecated, now applied on the SubgraphService + /// Deprecated, any rebate mechanism is now applied on the subgraph data service. uint32 internal __DEPRECATED_alphaNumerator; /// @dev Rebate alpha denominator /// Originally used for Cobb-Douglas rebates, now used for exponential rebates - /// Deprecated, now applied on the SubgraphService + /// Deprecated, any rebate mechanism is now applied on the subgraph data service. uint32 internal __DEPRECATED_alphaDenominator; - /// @dev Service provider stakes : serviceProviderAddress => ServiceProvider + /// @dev Service providers details, tracks stake utilization. mapping(address serviceProvider => IHorizonStakingTypes.ServiceProviderInternal details) internal _serviceProviders; - /// @dev Allocations : allocationID => Allocation - /// Deprecated, now applied on the SubgraphService + /// @dev Allocation details. + /// Deprecated, now applied on the subgraph data service mapping(address allocationId => IHorizonStakingExtension.Allocation allocation) internal __DEPRECATED_allocations; - /// @dev Subgraph Allocations: subgraphDeploymentID => tokens + /// @dev Subgraph allocations, tracks the tokens allocated to a subgraph deployment /// Deprecated, now applied on the SubgraphService mapping(bytes32 subgraphDeploymentId => uint256 tokens) internal __DEPRECATED_subgraphAllocations; - /// @dev Rebate pools : epoch => Pool - /// Deprecated. + /// @dev Rebate pool details per epoch + /// Deprecated with exponential rebates. mapping(uint256 epoch => uint256 rebates) private __DEPRECATED_rebates; // -- Slashing -- @@ -77,59 +80,66 @@ abstract contract HorizonStakingV1Storage { // -- Delegation -- /// @dev Delegation capacity multiplier defined by the delegation ratio - /// Deprecated, now applied by each data service as needed. + /// Deprecated, enforced by each data service as needed. uint32 internal __DEPRECATED_delegationRatio; - /// @dev Time in blocks an indexer needs to wait to change delegation parameters (deprecated) + /// @dev Time in blocks an indexer needs to wait to change delegation parameters + /// Deprecated, enforced by each data service as needed. uint32 internal __DEPRECATED_delegationParametersCooldown; /// @dev Time in epochs a delegator needs to wait to withdraw delegated stake /// Deprecated, now only enforced during a transition period - uint32 internal __DEPRECATED_delegationUnbondingPeriod; // in epochs + uint32 internal __DEPRECATED_delegationUnbondingPeriod; /// @dev Percentage of tokens to tax a delegation deposit /// Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) /// Deprecated, no tax is applied now. uint32 internal __DEPRECATED_delegationTaxPercentage; - /// @dev Delegation pools : serviceProvider => DelegationPoolInternal - /// These are for the subgraph data service. + /// @dev Delegation pools (legacy). + /// Only used when the verifier is the subgraph data service. mapping(address serviceProvider => IHorizonStakingTypes.DelegationPoolInternal delegationPool) internal _legacyDelegationPools; // -- Operators -- - /// @dev Legacy operator auth : service provider => operator => is authorized + /// @dev Operator allow list (legacy) + /// Only used when the verifier is the subgraph data service. mapping(address legacyOperator => mapping(address serviceProvider => bool authorized)) internal _legacyOperatorAuth; // -- Asset Holders -- - /// @dev DEPRECATED: Allowed AssetHolders: assetHolder => is allowed + /// @dev Asset holder allow list + /// Deprecated with permissionless payers mapping(address assetHolder => bool allowed) private __DEPRECATED_assetHolders; - /// @dev Destination of accrued rewards : beneficiary => rewards destination + /// @dev Destination of accrued indexing rewards /// Deprecated, defined by each data service as needed mapping(address serviceProvider => address rewardsDestination) internal __DEPRECATED_rewardsDestination; /// @dev Address of the counterpart Staking contract on L1/L2 + /// Used for the transfer tools. address internal _counterpartStakingAddress; + /// @dev Address of the StakingExtension implementation + /// This is now an immutable variable to save some gas. address internal __DEPRECATED_extensionImpl; - // Additional rebate parameters for exponential rebates + // @dev Additional rebate parameters for exponential rebates + /// Deprecated, any rebate mechanism is now applied on the subgraph data service. uint32 internal __DEPRECATED_lambdaNumerator; uint32 internal __DEPRECATED_lambdaDenominator; - /// Maximum thawing period, in seconds, for a provision + // -- Horizon Staking -- + + /// @dev Maximum thawing period, in seconds, for a provision uint64 internal _maxThawingPeriod; /// @dev Provisions from each service provider for each data service - /// ServiceProvider => Verifier => Provision mapping(address serviceProvider => mapping(address verifier => IHorizonStakingTypes.Provision provision)) internal _provisions; /// @dev Delegation fee cuts for each service provider on each provision, by fee type: - /// ServiceProvider => Verifier => Payment Type => Fee Cut. /// This is the effective delegator fee cuts for each (data-service-defined) fee type (e.g. indexing fees, query fees). /// This is in PPM and is the cut taken by the service provider from the fees that correspond to delegators. /// (based on stake vs delegated stake proportion). @@ -137,22 +147,28 @@ abstract contract HorizonStakingV1Storage { mapping(address serviceProvider => mapping(address verifier => mapping(IGraphPayments.PaymentTypes paymentType => uint256 feeCut))) internal _delegationFeeCut; + /// @dev Thaw requests + /// Details for each thawing operation in the staking contract (for both service providers and delegators). mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _thawRequests; + /// @dev Thaw request lists + /// Metadata defining linked lists of thaw requests for each service provider or delegator (owner) mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) internal _thawRequestLists; - // service provider => verifier => operator => authorized + /// @dev Operator allow list + /// Used for all verifiers except the subgraph data service. mapping(address serviceProvider => mapping(address verifier => mapping(address operator => bool authorized))) internal _operatorAuth; - // governance enables or disables delegation slashing with this flag + /// @dev Flag to enable or disable delegation slashing bool internal _delegationSlashingEnabled; - // delegation pools for each service provider and verifier + /// @dev Delegation pools for each service provider and verifier mapping(address serviceProvider => mapping(address verifier => IHorizonStakingTypes.DelegationPoolInternal delegationPool)) internal _delegationPools; - // allowed verifiers for locked provisions (i.e. from GraphTokenLockWallets) + /// @dev Allowed verifiers for locked provisions (i.e. from GraphTokenLockWallets) + // Verifiers are whitelisted to ensure locked tokens cannot escape using an arbitrary verifier. mapping(address verifier => bool allowed) internal _allowedLockedVerifiers; } diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index d9cbc9980..5f5a0f6b3 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -10,21 +10,35 @@ import { GraphDirectory } from "../../data-service/GraphDirectory.sol"; /** * @title Graph Managed contract * @dev The Managed contract provides an interface to interact with the Controller. - * Inspired by Livepeer: - * https://github.com/livepeer/protocol/blob/streamflow/contracts/Controller.sol + * For Graph Horizon this contract is mostly a shell that uses {GraphDirectory}, however since the {HorizonStaking} + * contract uses it we need to preserve the storage layout. + * Inspired by Livepeer: https://github.com/livepeer/protocol/blob/streamflow/contracts/Controller.sol */ abstract contract Managed is GraphDirectory { // -- State -- /// Controller that manages this contract address private __DEPRECATED_controller; + /// @dev Cache for the addresses of the contracts retrieved from the controller mapping(bytes32 contractName => address contractAddress) private __DEPRECATED_addressCache; + /// @dev Gap for future storage variables uint256[10] private __gap; + /** + * @notice Thrown when a protected function is called and the contract is paused. + */ error ManagedIsPaused(); + + /** + * @notice Thrown when a the caller is not the expected controller address. + */ error ManagedOnlyController(); + + /** + * @notice Thrown when a the caller is not the governor. + */ error ManagedOnlyGovernor(); /** @@ -51,5 +65,9 @@ abstract contract Managed is GraphDirectory { _; } + /** + * @dev Initialize the contract + * @param controller_ The address of the Graph controller contract. + */ constructor(address controller_) GraphDirectory(controller_) {} } From 75d3cb9ebd95f69cdac83392bd55666b361ae362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 29 May 2024 17:56:42 -0300 Subject: [PATCH 089/343] docs: add natspec to data service fees extension contract MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/DataService.sol | 2 +- .../contracts/data-service/GraphDirectory.sol | 95 ++++++++++++++++++- .../extensions/DataServiceFees.sol | 55 ++++++++++- .../data-service/interfaces/IDataService.sol | 9 +- .../interfaces/IDataServiceFees.sol | 64 ++++++++++++- .../internal/IHorizonStakingTypes.sol | 3 +- .../contracts/staking/HorizonStaking.sol | 5 +- .../contracts/staking/HorizonStakingBase.sol | 1 + 8 files changed, 211 insertions(+), 23 deletions(-) diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index 681d13f73..ded9378fa 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -13,7 +13,7 @@ import { ProvisionManager } from "./utilities/ProvisionManager.sol"; * - GraphDirectory, allows the data service to interact with Graph Horizon contracts * - ProvisionManager, provides functionality to manage provisions * - * The derived contract should add functionality that implements the interfaces described in {IDataService}. + * The derived contract MUST implement all the interfaces described in {IDataService}. */ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1Storage, IDataService { /** diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index a59200982..ffa1c08ad 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -24,24 +24,59 @@ import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration * and uses immutable variables to minimize gas costs. */ abstract contract GraphDirectory { - // Graph Horizon contracts + // -- Graph Horizon contracts -- + + /// @dev The Graph Token contract address IGraphToken private immutable GRAPH_TOKEN; + + /// @dev The Horizon Staking contract address IHorizonStaking private immutable GRAPH_STAKING; + + /// @dev The Graph Payments contract address IGraphPayments private immutable GRAPH_PAYMENTS; + + /// @dev The Payments Escrow contract address IPaymentsEscrow private immutable GRAPH_PAYMENTS_ESCROW; - // Graph periphery contracts + // -- Graph periphery contracts -- + + /// @dev The Graph Controller contract address IController private immutable GRAPH_CONTROLLER; + + /// @dev The Epoch Manager contract address IEpochManager private immutable GRAPH_EPOCH_MANAGER; + + /// @dev The Rewards Manager contract address IRewardsManager private immutable GRAPH_REWARDS_MANAGER; + + /// @dev The Token Gateway contract address ITokenGateway private immutable GRAPH_TOKEN_GATEWAY; + + /// @dev The Bridge Escrow contract address IBridgeEscrow private immutable GRAPH_BRIDGE_ESCROW; + + /// @dev The Graph Proxy Admin contract address IGraphProxyAdmin private immutable GRAPH_PROXY_ADMIN; - // Legacy Graph contracts - required for StakingBackwardCompatibility - // TODO: remove these once StakingBackwardCompatibility is removed + // -- Legacy Graph contracts -- + // These are required for backwards compatibility on HorizonStakingExtension + // TODO: remove these once HorizonStakingExtension is removed ICuration private immutable GRAPH_CURATION; + /** + * @notice Emitted when the GraphDirectory is initialized + * @param graphToken The Graph Token contract address + * @param graphStaking The Horizon Staking contract address + * @param graphPayments The Graph Payments contract address + * @param graphEscrow The Payments Escrow contract address + * @param graphController The Graph Controller contract address + * @param graphEpochManager The Epoch Manager contract address + * @param graphRewardsManager The Rewards Manager contract address + * @param graphTokenGateway The Token Gateway contract address + * @param graphBridgeEscrow The Bridge Escrow contract address + * @param graphProxyAdmin The Graph Proxy Admin contract address + * @param graphCuration The Curation contract address + */ event GraphDirectoryInitialized( IGraphToken indexed graphToken, IHorizonStaking indexed graphStaking, @@ -56,8 +91,21 @@ abstract contract GraphDirectory { ICuration graphCuration ); + /** + * @notice Thrown when either the controller is the zero address or a contract address is not found + * on the controller + * @param contractName The name of the contract that was not found, or the controller + */ error GraphDirectoryInvalidZeroAddress(bytes contractName); + /** + * @notice Constructor for the GraphDirectory contract + * @dev Requirements: + * - `controller` cannot be zero address + * + * Emits a {GraphDirectoryInitialized} event + * @param controller The address of the Graph Controller contract. + */ constructor(address controller) { require(controller != address(0), GraphDirectoryInvalidZeroAddress("Controller")); @@ -88,50 +136,89 @@ abstract contract GraphDirectory { ); } + /** + * @notice Get the Graph Token contract + */ function _graphToken() internal view returns (IGraphToken) { return GRAPH_TOKEN; } + /** + * @notice Get the Horizon Staking contract + */ function _graphStaking() internal view returns (IHorizonStaking) { return GRAPH_STAKING; } + /** + * @notice Get the Graph Payments contract + */ function _graphPayments() internal view returns (IGraphPayments) { return GRAPH_PAYMENTS; } + /** + * @notice Get the Payments Escrow contract + */ function _graphPaymentsEscrow() internal view returns (IPaymentsEscrow) { return GRAPH_PAYMENTS_ESCROW; } + /** + * @notice Get the Graph Controller contract + */ function _graphController() internal view returns (IController) { return GRAPH_CONTROLLER; } + /** + * @notice Get the Epoch Manager contract + */ function _graphEpochManager() internal view returns (IEpochManager) { return GRAPH_EPOCH_MANAGER; } + /** + * @notice Get the Rewards Manager contract + */ function _graphRewardsManager() internal view returns (IRewardsManager) { return GRAPH_REWARDS_MANAGER; } + /** + * @notice Get the Graph Token Gateway contract + */ function _graphTokenGateway() internal view returns (ITokenGateway) { return GRAPH_TOKEN_GATEWAY; } + /** + * @notice Get the Bridge Escrow contract + */ function _graphBridgeEscrow() internal view returns (IBridgeEscrow) { return GRAPH_BRIDGE_ESCROW; } + /** + * @notice Get the Graph Proxy Admin contract + */ function _graphProxyAdmin() internal view returns (IGraphProxyAdmin) { return GRAPH_PROXY_ADMIN; } + /** + * @notice Get the Curation contract + */ function _graphCuration() internal view returns (ICuration) { return GRAPH_CURATION; } + /** + * @notice Get a contract address from the controller + * @dev Requirements: + * - The `_contractName` must be registered in the controller + * @param _contractName The name of the contract to fetch from the controller + */ function _getContractFromController(bytes memory _contractName) private view returns (address) { address contractAddress = GRAPH_CONTROLLER.getContractProxy(keccak256(_contractName)); require(contractAddress != address(0), GraphDirectoryInvalidZeroAddress(_contractName)); diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index b8602eb2a..c4a203942 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -9,14 +9,35 @@ import { LinkedList } from "../../libraries/LinkedList.sol"; import { DataService } from "../DataService.sol"; import { DataServiceFeesV1Storage } from "./DataServiceFeesStorage.sol"; +/** + * @title DataServiceFees + * @notice Adds functionality to the {IDataService} contract to handle payment collateralization + * using a Horizon provision. See {IDataServiceFees} for more details. + * @dev Implementation of the {IDataServiceFees} interface. + */ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees { using ProvisionTracker for mapping(address => uint256); using LinkedList for LinkedList.List; + /** + * @notice See {IDataServiceFees-releaseStake} + */ function releaseStake(uint256 n) external virtual { _releaseStake(msg.sender, n); } + /** + * @notice Locks stake for a service provider to back a payment. + * Creates a stake claim, which is stored in a linked list by service provider. + * @dev Requirements: + * - The associated provision must have enough available tokens to lock the stake. + * + * Emits a {StakeClaimLocked} event. + * + * @param _serviceProvider The address of the service provider + * @param _tokens The amount of tokens to lock in the claim + * @param _unlockTimestamp The timestamp when the tokens can be released + */ function _lockStake(address _serviceProvider, uint256 _tokens, uint256 _unlockTimestamp) internal { feesProvisionTracker.lock(_graphStaking(), _serviceProvider, _tokens, maximumDelegationRatio); @@ -25,7 +46,6 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat // Save item and add to list bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce); claims[claimId] = StakeClaim({ - serviceProvider: _serviceProvider, tokens: _tokens, createdAt: block.timestamp, releaseAt: _unlockTimestamp, @@ -37,8 +57,9 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat emit StakeClaimLocked(_serviceProvider, claimId, _tokens, _unlockTimestamp); } - /// @notice Release expired stake claims for a service provider - /// @param _n The number of stake claims to release, or 0 to release all + /** + * @notice See {IDataServiceFees-releaseStake} + */ function _releaseStake(address _serviceProvider, uint256 _n) internal { LinkedList.List storage claimsList = claimsLists[_serviceProvider]; (uint256 claimsReleased, bytes memory data) = claimsList.traverse( @@ -52,6 +73,15 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat emit StakeClaimsReleased(_serviceProvider, claimsReleased, abi.decode(data, (uint256))); } + /** + * @notice Processes a stake claim, releasing the tokens if the claim has expired. + * @dev This function is used as a callback in the stake claims linked list traversal. + * @param _claimId The id of the stake claim + * @param _acc The accumulator for the stake claims being processed + * @return Wether the stake claim is still locked, indicating that the traversal should continue or stop. + * @return Wether the stake claim should be deleted + * @return The updated accumulator data + */ function _processStakeClaim(bytes32 _claimId, bytes memory _acc) private returns (bool, bool, bytes memory) { StakeClaim memory claim = _getStakeClaim(_claimId); @@ -72,22 +102,41 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat return (false, true, _acc); } + /** + * @notice Deletes a stake claim. + * @dev This function is used as a callback in the stake claims linked list traversal. + * @param _claimId The ID of the stake claim to delete + */ function _deleteStakeClaim(bytes32 _claimId) private { delete claims[_claimId]; } + /** + * @notice Gets the details of a stake claim + * @param _claimId The ID of the stake claim + */ function _getStakeClaim(bytes32 _claimId) private view returns (StakeClaim memory) { StakeClaim memory claim = claims[_claimId]; require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId)); return claim; } + /** + * @notice Gets the next stake claim in the linked list + * @dev This function is used as a callback in the stake claims linked list traversal. + * @param _claimId The ID of the stake claim + */ function _getNextStakeClaim(bytes32 _claimId) private view returns (bytes32) { StakeClaim memory claim = claims[_claimId]; require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId)); return claim.nextClaim; } + /** + * @notice Builds a stake claim ID + * @param _serviceProvider The address of the service provider + * @param _nonce A nonce of the stake claim + */ function _buildStakeClaimId(address _serviceProvider, uint256 _nonce) private view returns (bytes32) { return keccak256(abi.encodePacked(address(this), _serviceProvider, _nonce)); } diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index 6814ef23e..a30fb3b90 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -5,18 +5,13 @@ import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; /** * @title Interface of the base {DataService} contract as defined by the Graph Horizon specification. - * @dev This interface provides a guardrail for data service implementations that utilize Graph Horizon. + * @notice This interface provides a guardrail for data service implementations that utilize Graph Horizon. * It's expected that implementations follow the specification however much of it is intentionally loose * to allow for greater flexibility when designing a data service. For specifics always check the data * service implementation. * In general, this is a great starting point for data services that want to use Graph Horizon - * to provide economic security for a service being provided. It assumes two main forms of retribution for - * service providers: - * - service payment, to compensate ongoing work required to serve customers requests - * - service fees, earnt by serving customer requests, ideally leveraging {GraphPayments} to collect fees from the payer - * - * TIP: TODO: link to data service framework documentation + * to provide economic security for a service being provided. */ interface IDataService { /** diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index cab7e9998..3cb63a50b 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -3,34 +3,88 @@ pragma solidity 0.8.26; import { IDataService } from "./IDataService.sol"; +/** + * @title Interface for the {IDataServiceFees} contract. + * @notice Adds functionality to the {IDataService} contract to handle payment collateralization + * using a Horizon provision. + * + * It's designed to be used with the Data Service framework: + * - When a service provider collects payment with {IDataService.collect} the data service should lock + * stake to back the payment using {_lockStake}. + * - Every time there is a payment collection with {IDataService.collect}, the data service should + * attempt to release any expired stake claims by calling {_releaseStake}. + * - Stake claims can also be manually released by calling {releaseStake} directly. + * + * @dev Note that this implementation uses the entire provisioned stake as collateral for the payment. + * It can be used to provide economic security for the payments collected as long as the provisioned + * stake is not being used for other purposes. + */ interface IDataServiceFees is IDataService { - /// A locked stake claim to be released to a service provider + /** + * @notice A stake claim, representing provisioned stake that gets locked + * to be released to a service provider. + * @dev StakeClaims are stored in linked lists by service provider, ordered by + * creation timestamp. + */ struct StakeClaim { - address serviceProvider; - // tokens to be released with this claim + // The amount of tokens to be locked in the claim uint256 tokens; + // Timestamp when the claim was created uint256 createdAt; - // timestamp when the claim can be released + // Timestamp when the claim will expire and tokens can be released uint256 releaseAt; - // next claim in the linked list + // Next claim in the linked list bytes32 nextClaim; } + /** + * @notice Emitted when a stake claim is created and stake is locked. + * @param serviceProvider The address of the service provider + * @param claimId The id of the stake claim + * @param tokens The amount of tokens to lock in the claim + * @param unlockTimestamp The timestamp when the tokens can be released + */ event StakeClaimLocked( address indexed serviceProvider, bytes32 indexed claimId, uint256 tokens, uint256 unlockTimestamp ); + + /** + * @notice Emitted when a stake claim is released and stake is unlocked. + * @param serviceProvider The address of the service provider + * @param claimId The id of the stake claim + * @param tokens The amount of tokens released + * @param releaseAt The timestamp when the tokens were released + */ event StakeClaimReleased( address indexed serviceProvider, bytes32 indexed claimId, uint256 tokens, uint256 releaseAt ); + + /** + * @notice Emitted when a series of stake claims are released. + * @param serviceProvider The address of the service provider + * @param claimsCount The number of stake claims being released + * @param tokensReleased The total amount of tokens being released + */ event StakeClaimsReleased(address indexed serviceProvider, uint256 claimsCount, uint256 tokensReleased); + /** + * @notice Thrown when attempting to get a stake claim that does not exist. + */ error DataServiceFeesClaimNotFound(bytes32 claimId); + /** + * @notice Releases expired stake claims for the caller. + * @dev This function is only meant to be called if the service provider has enough + * stake claims that releasing them all at once would exceed the block gas limit. + * @dev This function can be overriden and/or disabled. + * @dev Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released. + * @param n Amount of stake claims to process. If 0, all stake claims are processed. + */ function releaseStake(uint256 n) external; } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index ae2a05516..c0d6892b3 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -127,7 +127,8 @@ interface IHorizonStakingTypes { /** * @notice Details of a stake thawing operation. - * @dev ThawRequests are stored in linked lists by service provider/delegator. + * @dev ThawRequests are stored in linked lists by service provider/delegator, + * ordered by creation timestamp. */ struct ThawRequest { // Shares that represent the tokens being thawed diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index f1c0a7f3c..ca3786975 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -877,11 +877,12 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice Fulfills a thaw request. - * @dev This function is used as a callback in the linked list traversal. + * @dev This function is used as a callback in the thaw requests linked list traversal. * * Emits a {ThawRequestFulfilled} event. * * @param _thawRequestId The ID of the current thaw request + * @param _acc The accumulator data for the thaw requests being fulfilled * @return Wether the thaw request is still thawing, indicating that the traversal should continue or stop. * @return Wether the thaw request should be deleted * @return The updated accumulator data @@ -914,7 +915,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice Deletes a ThawRequest. - * @dev This function is used as a callback in the linked list traversal. + * @dev This function is used as a callback in the thaw requests linked list traversal. * @param _thawRequestId The ID of the thaw request to delete */ function _deleteThawRequest(bytes32 _thawRequestId) private { diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index c173c4bec..c3eca6b43 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -284,6 +284,7 @@ abstract contract HorizonStakingBase is /** * @notice Gets the next thaw request after `_thawRequestId`. + * @dev This function is used as a callback in the thaw requests linked list traversal. */ function _getNextThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { return _thawRequests[_thawRequestId].next; From 8616335633dee3ea047982e61ce27d6aba285bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 30 May 2024 13:30:13 -0300 Subject: [PATCH 090/343] docs: add natspec to data service contracts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/DataService.sol | 24 +- .../extensions/DataServiceFees.sol | 6 +- .../extensions/DataServiceFeesStorage.sol | 3 + .../extensions/DataServicePausable.sol | 28 ++ .../DataServicePausableUpgradeable.sol | 34 ++- .../extensions/DataServiceRescuable.sol | 31 +- .../data-service/interfaces/IDataService.sol | 14 +- .../interfaces/IDataServiceFees.sol | 4 +- .../interfaces/IDataServicePausable.sol | 31 ++ .../interfaces/IDataServiceRescuable.sol | 42 ++- .../libraries/ProvisionTracker.sol | 40 ++- .../utilities/ProvisionManager.sol | 276 +++++++++++++++--- .../utilities/ProvisionManagerStorage.sol | 3 + .../staking/libraries/ExponentialRebates.sol | 2 +- .../contracts/SubgraphService.sol | 1 + .../contracts/utilities/AllocationManager.sol | 4 +- .../utilities/AttestationManager.sol | 7 +- 17 files changed, 462 insertions(+), 88 deletions(-) diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index ded9378fa..d9f2ec1e5 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -8,12 +8,16 @@ import { GraphDirectory } from "./GraphDirectory.sol"; import { ProvisionManager } from "./utilities/ProvisionManager.sol"; /** - * @title Implementation of the {IDataService} interface. - * @dev This implementation provides base functionality for a data service: + * @title DataService contract + * @dev Implementation of the {IDataService} interface. + * @notice This implementation provides base functionality for a data service: * - GraphDirectory, allows the data service to interact with Graph Horizon contracts * - ProvisionManager, provides functionality to manage provisions * - * The derived contract MUST implement all the interfaces described in {IDataService}. + * The derived contract MUST implement all the interfaces described in {IDataService} and in + * accordance with the Data Service framework. + * @dev Implementation must initialize the contract using {__DataService_init} or + * {__DataService_init_unchained} functions. */ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1Storage, IDataService { /** @@ -21,4 +25,18 @@ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1 * @param controller The address of the Graph Horizon controller contract. */ constructor(address controller) GraphDirectory(controller) {} + + /** + * @notice Initializes the contract and any parent contracts. + */ + function __DataService_init() internal onlyInitializing { + __DataService_init_unchained(); + } + + /** + * @notice Initializes the contract. + */ + function __DataService_init_unchained() internal onlyInitializing { + __ProvisionManager_init_unchained(); + } } diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index c4a203942..000a72d09 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -10,10 +10,10 @@ import { DataService } from "../DataService.sol"; import { DataServiceFeesV1Storage } from "./DataServiceFeesStorage.sol"; /** - * @title DataServiceFees - * @notice Adds functionality to the {IDataService} contract to handle payment collateralization - * using a Horizon provision. See {IDataServiceFees} for more details. + * @title DataServiceFees contract * @dev Implementation of the {IDataServiceFees} interface. + * @notice Extension for the {IDataService} contract to handle payment collateralization + * using a Horizon provision. See {IDataServiceFees} for more details. */ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees { using ProvisionTracker for mapping(address => uint256); diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index 57e178e86..483b67b80 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -5,6 +5,9 @@ import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; import { LinkedList } from "../../libraries/LinkedList.sol"; +/** + * @title Storage layout for the {DataServiceFees} extension contract. + */ abstract contract DataServiceFeesV1Storage { mapping(address serviceProvider => uint256 tokens) public feesProvisionTracker; diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index df8c1c402..577db9677 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -6,22 +6,50 @@ import { IDataServicePausable } from "../interfaces/IDataServicePausable.sol"; import { Pausable } from "@openzeppelin/contracts/utils/Pausable.sol"; import { DataService } from "../DataService.sol"; +/** + * @title DataServicePausable contract + * @dev Implementation of the {IDataServicePausable} interface. + * @notice Extension for the {IDataService} contract, adds pausing functionality + * to the data service. Pausing is controlled by privileged accounts called + * pause guardians. + * @dev Note that this extension does not provide an external function to set pause + * guardians. This should be implemented in the derived contract. + */ abstract contract DataServicePausable is Pausable, DataService, IDataServicePausable { + /// @notice List of pause guardians and their allowed status mapping(address pauseGuardian => bool allowed) public pauseGuardians; + /** + * @notice Checks if the caller is a pause guardian. + */ modifier onlyPauseGuardian() { require(pauseGuardians[msg.sender], DataServicePausableNotPauseGuardian(msg.sender)); _; } + /** + * @notice See {IDataServicePausable-pause} + */ function pause() external onlyPauseGuardian whenNotPaused { _pause(); } + /** + * @notice See {IDataServicePausable-pause} + */ function unpause() external onlyPauseGuardian whenPaused { _unpause(); } + /** + * @notice Sets a pause guardian. + * @dev Internal function to be used by the derived contract to set pause guardians. + * + * Emits a {PauseGuardianSet} event. + * + * @param _pauseGuardian The address of the pause guardian + * @param _allowed The allowed status of the pause guardian + */ function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused { pauseGuardians[_pauseGuardian] = _allowed; emit PauseGuardianSet(_pauseGuardian, _allowed); diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol index a57087e0e..53003ebfc 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol @@ -6,31 +6,61 @@ import { IDataServicePausable } from "../interfaces/IDataServicePausable.sol"; import { PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; import { DataService } from "../DataService.sol"; +/** + * @title DataServicePausableUpgradeable contract + * @dev Implementation of the {IDataServicePausable} interface. + * @dev Upgradeable version of the {DataServicePausable} contract. + */ abstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataService, IDataServicePausable { + /// @notice List of pause guardians and their allowed status mapping(address pauseGuardian => bool allowed) public pauseGuardians; + /** + * @notice Checks if the caller is a pause guardian. + */ modifier onlyPauseGuardian() { require(pauseGuardians[msg.sender], DataServicePausableNotPauseGuardian(msg.sender)); _; } + /** + * @notice See {IDataServicePausable-pause} + */ function pause() external onlyPauseGuardian whenNotPaused { _pause(); } + /** + * @notice See {IDataServicePausable-pause} + */ function unpause() external onlyPauseGuardian whenPaused { _unpause(); } + /** + * @notice Initializes the contract and parent contracts + */ // solhint-disable-next-line func-name-mixedcase - function __DataServicePausable_init() internal { + function __DataServicePausable_init() internal onlyInitializing { __Pausable_init_unchained(); __DataServicePausable_init_unchained(); } + /** + * @notice Initializes the contract + */ // solhint-disable-next-line func-name-mixedcase - function __DataServicePausable_init_unchained() internal {} + function __DataServicePausable_init_unchained() internal onlyInitializing {} + /** + * @notice Sets a pause guardian. + * @dev Internal function to be used by the derived contract to set pause guardians. + * + * Emits a {PauseGuardianSet} event. + * + * @param _pauseGuardian The address of the pause guardian + * @param _allowed The allowed status of the pause guardian + */ function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused { pauseGuardians[_pauseGuardian] = _allowed; emit PauseGuardianSet(_pauseGuardian, _allowed); diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index 3fc23422d..f321b8d22 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -14,23 +14,44 @@ import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.s * @dev Allows a contract to have a function to rescue tokens sent by mistake. * The contract must implement the external rescueTokens function or similar, * that calls this contract's _rescueTokens. + * @dev Note that this extension does not provide an external function to set + * rescuers. This should be implemented in the derived contract. */ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { + /// @notice List of rescuers and their allowed status mapping(address rescuer => bool allowed) public rescuers; + /** + * @notice Checks if the caller is a rescuer. + */ modifier onlyRescuer() { require(rescuers[msg.sender], DataServiceRescuableNotRescuer(msg.sender)); _; } - function rescueGRT(address to, uint256 tokens) external onlyRescuer { + /** + * @notice See {IDataServiceRescuable-rescueGRT} + */ + function rescueGRT(address to, uint256 tokens) external virtual onlyRescuer { _rescueTokens(to, address(_graphToken()), tokens); } - function rescueETH(address payable to, uint256 tokens) external onlyRescuer { + /** + * @notice See {IDataServiceRescuable-rescueETH} + */ + function rescueETH(address payable to, uint256 tokens) external virtual onlyRescuer { _rescueTokens(to, Denominations.NATIVE_TOKEN, tokens); } + /** + * @notice Sets a rescuer. + * @dev Internal function to be used by the derived contract to set rescuers. + * + * Emits a {RescuerSet} event. + * + * @param _rescuer Address of the rescuer + * @param _allowed Allowed status of the rescuer + */ function _setRescuer(address _rescuer, bool _allowed) internal { rescuers[_rescuer] = _allowed; emit RescuerSet(_rescuer, _allowed); @@ -38,9 +59,9 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { /** * @dev Allows rescuing tokens sent to this contract - * @param _to Destination address to send the tokens - * @param _token Address of the token being rescued - * @param _tokens Amount of tokens to pull + * @param _to Destination address to send the tokens + * @param _token Address of the token being rescued + * @param _tokens Amount of tokens to pull */ function _rescueTokens(address _to, address _token, uint256 _tokens) internal { require(_tokens != 0, DataServiceRescuableCannotRescueZero()); diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index a30fb3b90..aa3ef3dfa 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -5,13 +5,13 @@ import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; /** * @title Interface of the base {DataService} contract as defined by the Graph Horizon specification. - * @notice This interface provides a guardrail for data service implementations that utilize Graph Horizon. - * It's expected that implementations follow the specification however much of it is intentionally loose - * to allow for greater flexibility when designing a data service. For specifics always check the data - * service implementation. - - * In general, this is a great starting point for data services that want to use Graph Horizon - * to provide economic security for a service being provided. + * @notice This interface provides a guardrail for contracts that use the Data Service framework + * to implement a data service on Graph Horizon. Much of the specification is intentionally loose + * to allow for greater flexibility when designing a data service. It's not possible to guarantee that + * an implementation will honor the Data Service framework guidelines so it's advised to always review + * the implementation code and the documentation. + * @dev This interface is expected to be inherited and extended by a data service interface. It can be + * used to interact with it however it's advised to use the more specific parent interface. */ interface IDataService { /** diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index 3cb63a50b..b730a09e6 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -4,8 +4,8 @@ pragma solidity 0.8.26; import { IDataService } from "./IDataService.sol"; /** - * @title Interface for the {IDataServiceFees} contract. - * @notice Adds functionality to the {IDataService} contract to handle payment collateralization + * @title Interface for the {DataServiceFees} contract. + * @notice Extension for the {IDataService} contract to handle payment collateralization * using a Horizon provision. * * It's designed to be used with the Data Service framework: diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol index 673238b7f..04e931749 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol @@ -3,12 +3,43 @@ pragma solidity 0.8.26; import { IDataService } from "./IDataService.sol"; +/** + * @title Interface for the {DataServicePausable} contract. + * @notice Extension for the {IDataService} contract, adds pausing functionality + * to the data service. Pausing is controlled by privileged accounts called + * pause guardians. + */ interface IDataServicePausable is IDataService { + /** + * @notice Emitted when a pause guardian is set. + * @param account The address of the pause guardian + * @param allowed The allowed status of the pause guardian + */ event PauseGuardianSet(address indexed account, bool allowed); + /** + * @notice Emitted when a the caller is not a pause guardian + * @param account The address of the pause guardian + */ error DataServicePausableNotPauseGuardian(address account); + /** + * @notice Pauses the data service. + * @dev Note that only functions using the modifiers `whenNotPaused` + * and `whenPaused` will be affected by the pause. + * + * Requirements: + * - The contract must not be already paused + */ function pause() external; + /** + * @notice Unpauses the data service. + * @dev Note that only functions using the modifiers `whenNotPaused` + * and `whenPaused` will be affected by the pause. + * + * Requirements: + * - The contract must be paused + */ function unpause() external; } diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol index f1494413f..ba21f3019 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol @@ -3,17 +3,57 @@ pragma solidity 0.8.26; import { IDataService } from "./IDataService.sol"; +/** + * @title Interface for the {IDataServicePausable} contract. + * @notice Extension for the {IDataService} contract, adds the ability to rescue + * any ERC20 token or ETH from the contract, controlled by a rescuer privileged role. + */ interface IDataServiceRescuable is IDataService { /** - * @dev Tokens rescued by the user + * @notice Emitted when tokens are rescued from the contract. */ event TokensRescued(address indexed from, address indexed to, uint256 tokens); + + /** + * @notice Emitted when a rescuer is set. + */ event RescuerSet(address indexed account, bool allowed); + /** + * @notice Thrown when trying to rescue zero tokens. + */ error DataServiceRescuableCannotRescueZero(); + + /** + * @notice Thrown when the caller is not a rescuer. + */ error DataServiceRescuableNotRescuer(address account); + /** + * @notice Rescues GRT tokens from the contract. + * @dev Declared as virtual to allow disabling the function via override. + * + * Requirements: + * - Cannot rescue zero tokens. + * + * Emits a {TokensRescued} event. + * + * @param to Address of the tokens recipient. + * @param tokens Amount of tokens to rescue. + */ function rescueGRT(address to, uint256 tokens) external; + /** + * @notice Rescues ether from the contract. + * @dev Declared as virtual to allow disabling the function via override. + * + * Requirements: + * - Cannot rescue zeroether. + * + * Emits a {TokensRescued} event. + * + * @param to Address of the tokens recipient. + * @param tokens Amount of tokens to rescue. + */ function rescueETH(address payable to, uint256 tokens) external; } diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol index 4358b33b2..a95f634f8 100644 --- a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol @@ -3,9 +3,30 @@ pragma solidity 0.8.26; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; +/** + * @title ProvisionTracker library + * @notice A library to facilitate tracking of "used tokens" on Graph Horizon provisions. This can be used to + * ensure data services have enough economic security (provisioned stake) to back the payments they collect for + * their services. + * The library provides two primitives, lock and release to signal token usage and free up tokens respectively. It + * does not make any assumptions about the conditions under which tokens are locked or released. + */ library ProvisionTracker { + /** + * @notice Thrown when trying to lock more tokens than available + */ error ProvisionTrackerInsufficientTokens(uint256 tokensAvailable, uint256 tokensRequired); + /** + * @notice Locks tokens for a service provider + * @dev Requirements: + * - `tokens` must be less than or equal to the amount of tokens available, as reported by the HorizonStaking contract + * @param self The provision tracker mapping + * @param graphStaking The HorizonStaking contract + * @param serviceProvider The service provider address + * @param tokens The amount of tokens to lock + * @param delegationRatio A delegation ratio to limit the amount of delegation that's usable + */ function lock( mapping(address => uint256) storage self, IHorizonStaking graphStaking, @@ -21,20 +42,17 @@ library ProvisionTracker { self[serviceProvider] += tokens; } + /** + * @notice Releases tokens for a service provider + * @dev Requirements: + * - `tokens` must be less than or equal to the amount of tokens locked for the service provider + * @param self The provision tracker mapping + * @param serviceProvider The service provider address + * @param tokens The amount of tokens to release + */ function release(mapping(address => uint256) storage self, address serviceProvider, uint256 tokens) internal { if (tokens == 0) return; require(self[serviceProvider] >= tokens, ProvisionTrackerInsufficientTokens(self[serviceProvider], tokens)); self[serviceProvider] -= tokens; } - - function getTokensFree( - mapping(address => uint256) storage self, - IHorizonStaking graphStaking, - address serviceProvider, - uint32 delegationRatio - ) internal view returns (uint256) { - uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio); - if (tokensAvailable >= self[serviceProvider]) return tokensAvailable - self[serviceProvider]; - else return 0; - } } diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index c09a17ada..ff02978fb 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -5,48 +5,118 @@ import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; import { UintRange } from "../../libraries/UintRange.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { GraphDirectory } from "../GraphDirectory.sol"; import { ProvisionManagerV1Storage } from "./ProvisionManagerStorage.sol"; -abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage { +/** + * @title ProvisionManager contract + * @notice A helper contract that implements several provision management functions. + * @dev Provides utilities to verify provision parameters are within an acceptable range. Each + * parameter has an overridable setter and getter for the validity range, and a checker that reverts + * if the parameter is out of range. + * The parameters are: + * - Provision parameters (thawing period and verifier cut) + * - Delegation ratio + * - Provision tokens + */ +abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionManagerV1Storage { using UintRange for uint256; + /** + * @notice Emitted when the provision tokens range is set. + * @param min The minimum allowed value for the provision tokens. + * @param max The maximum allowed value for the provision tokens. + */ + event ProvisionTokensRangeSet(uint256 min, uint256 max); + + /** + * @notice Emitted when the delegation ratio range is set. + * @param min The minimum allowed value for the delegation ratio. + * @param max The maximum allowed value for the delegation ratio. + */ + event DelegationRatioRangeSet(uint32 min, uint32 max); + + /** + * @notice Emitted when the verifier cut range is set. + * @param min The minimum allowed value for the max verifier cut. + * @param max The maximum allowed value for the max verifier cut. + */ + event VerifierCutRangeSet(uint32 min, uint32 max); + + /** + * @notice Emitted when the thawing period range is set. + * @param min The minimum allowed value for the thawing period. + * @param max The maximum allowed value for the thawing period. + */ + event ThawingPeriodRangeSet(uint64 min, uint64 max); + + /** + * @notice Thrown when a provision parameter is out of range. + * @param message The error message. + * @param value The value that is out of range. + * @param min The minimum allowed value. + * @param max The maximum allowed value. + */ error ProvisionManagerInvalidValue(bytes message, uint256 value, uint256 min, uint256 max); - error ProvisionManagerNotAuthorized(address caller, address serviceProvider, address service); - error ProvisionManagerProvisionNotFound(address serviceProvider, address service); + /** + * @notice Thrown when the caller is not authorized to manage the provision of a service provider. + * @param caller The address of the caller. + * @param serviceProvider The address of the service provider. + */ + error ProvisionManagerNotAuthorized(address caller, address serviceProvider); + + /** + * @notice Thrown when a provision is not found. + * @param serviceProvider The address of the service provider. + */ + error ProvisionManagerProvisionNotFound(address serviceProvider); + + /** + * @notice Checks if the caller is authorized to manage the provision of a service provider. + */ modifier onlyProvisionAuthorized(address serviceProvider) { require( _graphStaking().isAuthorized(msg.sender, serviceProvider, address(this)), - ProvisionManagerNotAuthorized(msg.sender, serviceProvider, address(this)) + ProvisionManagerNotAuthorized(msg.sender, serviceProvider) ); _; } + /** + * @notice Checks if a provision of a service provider is valid according + * to the parameter ranges established. + */ modifier onlyValidProvision(address serviceProvider) virtual { - _checkProvisionTokens(serviceProvider); - _checkProvisionDelegationRatio(serviceProvider); - _checkProvisionParameters(serviceProvider, false); + IHorizonStaking.Provision memory provision = _getProvision(serviceProvider); + _checkProvisionTokens(provision); + _checkProvisionDelegationRatio(provision, serviceProvider); + _checkProvisionParameters(provision, false); _; } - constructor() { - minimumProvisionTokens = type(uint256).min; - maximumProvisionTokens = type(uint256).max; - - minimumDelegationRatio = type(uint32).min; - maximumDelegationRatio = type(uint32).max; - - minimumThawingPeriod = type(uint64).min; - maximumThawingPeriod = type(uint64).max; + /** + * @notice Initializes the contract and any parent contracts. + */ + function __ProvisionManager_init() internal onlyInitializing { + __ProvisionManager_init_unchained(); + } - minimumVerifierCut = type(uint32).min; - maximumVerifierCut = type(uint32).max; + /** + * @notice Initializes the contract. + * @dev All parameters set to their entire range as valid. + */ + function __ProvisionManager_init_unchained() internal onlyInitializing { + _setProvisionTokensRange(type(uint256).min, type(uint256).max); + _setDelegationRatioRange(type(uint32).min, type(uint32).max); + _setVerifierCutRange(type(uint32).min, type(uint32).max); + _setThawingPeriodRange(type(uint64).min, type(uint64).max); } /** - * @notice Verifies and accepts the provision of a service provider in the {Graph Horizon staking - * contract}. + * @notice Verifies and accepts the provision parameters of a service provider in + * the {HorizonStaking} contract. * @dev Checks the pending provision parameters, not the current ones. * * Emits a {ProvisionAccepted} event. @@ -58,76 +128,186 @@ abstract contract ProvisionManager is GraphDirectory, ProvisionManagerV1Storage _graphStaking().acceptProvisionParameters(_serviceProvider); } - // -- Provision Parameters: setters -- + // -- checks -- + + /** + * @notice Checks if the provision tokens of a service provider are within the valid range. + * @param _serviceProvider The address of the service provider. + */ + function _checkProvisionTokens(address _serviceProvider) internal view virtual { + IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); + _checkProvisionTokens(provision); + } + + /** + * @notice Checks if the provision tokens of a service provider are within the valid range. + * @param _provision The provision to check. + */ + function _checkProvisionTokens(IHorizonStaking.Provision memory _provision) internal view virtual { + _checkValueInRange(_provision.tokens, minimumProvisionTokens, maximumProvisionTokens, "tokens"); + } + + /** + * @notice Checks if the delegation ratio of a service provider is within the valid range. + * @param _serviceProvider The address of the service provider. + */ + function _checkProvisionDelegationRatio(address _serviceProvider) internal view virtual { + IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); + _checkProvisionDelegationRatio(provision, _serviceProvider); + } + + /** + * @notice Checks if the delegation ratio of a service provider is within the valid range. + * @param _provision The provision to check. + * @param _serviceProvider The address of the service provider. + */ + function _checkProvisionDelegationRatio( + IHorizonStaking.Provision memory _provision, + address _serviceProvider + ) internal view virtual { + (uint32 delegationRatioMin, uint32 delegationRatioMax) = _getDelegationRatioRange(); + if (delegationRatioMin == type(uint32).min && delegationRatioMax == type(uint32).max) return; + + uint256 delegatedTokens = _graphStaking().getDelegatedTokensAvailable(_serviceProvider, address(this)); + uint256 delegationRatioToCheck = uint32(delegatedTokens / (_provision.tokens - _provision.tokensThawing)); + _checkValueInRange(delegationRatioToCheck, delegationRatioMin, delegationRatioMax, "delegationRatio"); + } + + /** + * @notice Checks if the provision parameters of a service provider are within the valid range. + * @param _serviceProvider The address of the service provider. + * @param _checkPending If true, checks the pending provision parameters. + */ + function _checkProvisionParameters(address _serviceProvider, bool _checkPending) internal view virtual { + IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); + _checkProvisionParameters(provision, _checkPending); + } + + /** + * @notice Checks if the provision parameters of a service provider are within the valid range. + * @param _provision The provision to check. + * @param _checkPending If true, checks the pending provision parameters instead of the current ones. + */ + function _checkProvisionParameters( + IHorizonStaking.Provision memory _provision, + bool _checkPending + ) internal view virtual { + (uint64 thawingPeriodMin, uint64 thawingPeriodMax) = _getThawingPeriodRange(); + if (thawingPeriodMin != type(uint64).min || thawingPeriodMax != type(uint64).max) { + uint64 thawingPeriodToCheck = _checkPending ? _provision.thawingPeriodPending : _provision.thawingPeriod; + _checkValueInRange(thawingPeriodToCheck, thawingPeriodMin, thawingPeriodMax, "thawingPeriod"); + } + + (uint32 verifierCutMin, uint32 verifierCutMax) = _getVerifierCutRange(); + if (verifierCutMin != type(uint32).min || verifierCutMax != type(uint32).max) { + uint32 maxVerifierCutToCheck = _checkPending ? _provision.maxVerifierCutPending : _provision.maxVerifierCut; + _checkValueInRange(maxVerifierCutToCheck, verifierCutMin, verifierCutMax, "maxVerifierCut"); + } + } + + // -- setters -- + + /** + * @notice Sets the range for the provision tokens. + * @param _min The minimum allowed value for the provision tokens. + * @param _max The maximum allowed value for the provision tokens. + */ function _setProvisionTokensRange(uint256 _min, uint256 _max) internal { minimumProvisionTokens = _min; maximumProvisionTokens = _max; + emit ProvisionTokensRangeSet(_min, _max); } + /** + * @notice Sets the range for the delegation ratio. + * @param _min The minimum allowed value for the delegation ratio. + * @param _max The maximum allowed value for the delegation ratio. + */ function _setDelegationRatioRange(uint32 _min, uint32 _max) internal { minimumDelegationRatio = _min; maximumDelegationRatio = _max; + emit DelegationRatioRangeSet(_min, _max); } + /** + * @notice Sets the range for the verifier cut. + * @param _min The minimum allowed value for the max verifier cut. + * @param _max The maximum allowed value for the max verifier cut. + */ function _setVerifierCutRange(uint32 _min, uint32 _max) internal { minimumVerifierCut = _min; maximumVerifierCut = _max; + emit VerifierCutRangeSet(_min, _max); } + /** + * @notice Sets the range for the thawing period. + * @param _min The minimum allowed value for the thawing period. + * @param _max The maximum allowed value for the thawing period. + */ function _setThawingPeriodRange(uint64 _min, uint64 _max) internal { minimumThawingPeriod = _min; maximumThawingPeriod = _max; + emit ThawingPeriodRangeSet(_min, _max); } - function _checkProvisionTokens(address _serviceProvider) internal view virtual { - IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); - _checkValueInRange(provision.tokens, minimumProvisionTokens, maximumProvisionTokens, "tokens"); - } + // -- getters -- - function _checkProvisionDelegationRatio(address _serviceProvider) internal view virtual { - IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); - uint256 delegatedTokens = _graphStaking().getDelegatedTokensAvailable(_serviceProvider, address(this)); - - (uint32 delegationRatioMin, uint32 delegationRatioMax) = _getDelegationRatioRange(); - uint256 delegationRatioToCheck = uint32(delegatedTokens / (provision.tokens - provision.tokensThawing)); - _checkValueInRange(delegationRatioToCheck, delegationRatioMin, delegationRatioMax, "delegationRatio"); - } - - function _checkProvisionParameters(address _serviceProvider, bool _checkPending) internal view virtual { - IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); - - (uint64 thawingPeriodMin, uint64 thawingPeriodMax) = _getThawingPeriodRange(); - uint64 thawingPeriodToCheck = _checkPending ? provision.thawingPeriodPending : provision.thawingPeriod; - _checkValueInRange(thawingPeriodToCheck, thawingPeriodMin, thawingPeriodMax, "thawingPeriod"); - - (uint32 verifierCutMin, uint32 verifierCutMax) = _getVerifierCutRange(); - uint32 maxVerifierCutToCheck = _checkPending ? provision.maxVerifierCutPending : provision.maxVerifierCut; - _checkValueInRange(maxVerifierCutToCheck, verifierCutMin, verifierCutMax, "maxVerifierCut"); - } - - // -- Provision Parameters: getters -- + /** + * @notice Gets the range for the provision tokens. + * @return min The minimum allowed value for the provision tokens. + * @return max The maximum allowed value for the provision tokens. + */ function _getProvisionTokensRange() internal view virtual returns (uint256 min, uint256 max) { return (minimumProvisionTokens, maximumProvisionTokens); } + /** + * @notice Gets the range for the delegation ratio. + * @return min The minimum allowed value for the delegation ratio. + * @return max The maximum allowed value for the delegation ratio. + */ function _getDelegationRatioRange() internal view virtual returns (uint32 min, uint32 max) { return (minimumDelegationRatio, maximumDelegationRatio); } + /** + * @notice Gets the range for the thawing period. + * @return min The minimum allowed value for the thawing period. + * @return max The maximum allowed value for the thawing period. + */ function _getThawingPeriodRange() internal view virtual returns (uint64 min, uint64 max) { return (minimumThawingPeriod, maximumThawingPeriod); } + /** + * @notice Gets the range for the verifier cut. + * @return min The minimum allowed value for the max verifier cut. + * @return max The maximum allowed value for the max verifier cut. + */ function _getVerifierCutRange() internal view virtual returns (uint32 min, uint32 max) { return (minimumVerifierCut, maximumVerifierCut); } + /** + * @notice Gets a provision from the {HorizonStaking} contract. + * @dev Requirements: + * - The provision must exist. + * @param _serviceProvider The address of the service provider. + */ function _getProvision(address _serviceProvider) internal view returns (IHorizonStaking.Provision memory) { IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_serviceProvider, address(this)); - require(provision.createdAt != 0, ProvisionManagerProvisionNotFound(_serviceProvider, address(this))); + require(provision.createdAt != 0, ProvisionManagerProvisionNotFound(_serviceProvider)); return provision; } + /** + * @notice Checks if a value is within a valid range. + * @param _value The value to check. + * @param _min The minimum allowed value. + * @param _max The maximum allowed value. + * @param _revertMessage The revert message to display if the value is out of range. + */ function _checkValueInRange(uint256 _value, uint256 _min, uint256 _max, bytes memory _revertMessage) private pure { require(_value.isInRange(_min, _max), ProvisionManagerInvalidValue(_revertMessage, _value, _min, _max)); } diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol index 7f4e507a5..acc24d5a0 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol @@ -1,6 +1,9 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; +/** + * @title Storage layout for the {ProvisionManager} helper contract. + */ abstract contract ProvisionManagerV1Storage { /// @notice The minimum amount of tokens required to register a provision in the data service uint256 public minimumProvisionTokens; diff --git a/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol b/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol index 3cbc93aa0..1f7f0b3d2 100644 --- a/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol +++ b/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.26; import { LibFixedMath } from "../../libraries/LibFixedMath.sol"; /** - * @title ExponentialRebates contract + * @title ExponentialRebates library * @notice A library to compute query fee rebates using an exponential formula * @dev This is only used for backwards compatibility in HorizonStaking, and should * be removed after the transition period. diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 29dc8e9e1..f39beed4c 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -62,6 +62,7 @@ contract SubgraphService is function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external override initializer { __Ownable_init(msg.sender); + __DataService_init(); __DataServicePausable_init(); __AllocationManager_init("SubgraphService", "1.0"); diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 0e67014dc..5a4a9c58f 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -81,12 +81,12 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca error AllocationManagerAllocationSameSize(address allocationId, uint256 tokens); error AllocationManagerInvalidZeroPOI(); - function __AllocationManager_init(string memory name, string memory version) internal { + function __AllocationManager_init(string memory name, string memory version) internal onlyInitializing { __EIP712_init(name, version); __AllocationManager_init_unchained(name, version); } - function __AllocationManager_init_unchained(string memory name, string memory version) internal {} + function __AllocationManager_init_unchained(string memory name, string memory version) internal onlyInitializing {} function setRewardsDestination(address rewardsDestination) external { _setRewardsDestination(msg.sender, rewardsDestination); diff --git a/packages/subgraph-service/contracts/utilities/AttestationManager.sol b/packages/subgraph-service/contracts/utilities/AttestationManager.sol index 535774c1a..c6ed521b6 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManager.sol @@ -4,9 +4,10 @@ pragma solidity 0.8.26; import { AttestationManagerV1Storage } from "./AttestationManagerStorage.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Attestation } from "../libraries/Attestation.sol"; -abstract contract AttestationManager is AttestationManagerV1Storage { +abstract contract AttestationManager is Initializable, AttestationManagerV1Storage { bytes32 private constant RECEIPT_TYPE_HASH = keccak256("Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)"); @@ -16,11 +17,11 @@ abstract contract AttestationManager is AttestationManagerV1Storage { bytes32 private constant DOMAIN_VERSION_HASH = keccak256("0"); bytes32 private constant DOMAIN_SALT = 0xa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c2; - function __AttestationManager_init() internal { + function __AttestationManager_init() internal onlyInitializing { __AttestationManager_init_unchained(); } - function __AttestationManager_init_unchained() internal { + function __AttestationManager_init_unchained() internal onlyInitializing { _domainSeparator = keccak256( abi.encode( DOMAIN_TYPE_HASH, From 641842e8adb1b08f3cf0321b09aa9975ed141e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 30 May 2024 17:16:24 -0300 Subject: [PATCH 091/343] docs: add natspec to payments protocol contracts and libraries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IGraphPayments.sol | 46 ++- .../interfaces/IPaymentsCollector.sol | 38 +++ .../contracts/interfaces/IPaymentsEscrow.sol | 273 ++++++++++++++++-- .../contracts/interfaces/ITAPCollector.sol | 54 +++- .../contracts/libraries/Denominations.sol | 8 +- .../contracts/libraries/LinkedList.sol | 57 ++++ .../horizon/contracts/libraries/PPMMath.sol | 40 ++- .../horizon/contracts/libraries/UintRange.sol | 14 +- .../contracts/payments/GraphPayments.sol | 22 +- .../contracts/payments/PaymentsEscrow.sol | 146 ++++++---- .../payments/collectors/TAPCollector.sol | 41 ++- 11 files changed, 619 insertions(+), 120 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index c3889222f..86054ad7d 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -1,16 +1,35 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; +/** + * @title Interface for the {GraphPayments} contract + * @notice This contract is part of the Graph Horizon payments protocol. It's designed + * to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a + * set of pre established rules. + */ interface IGraphPayments { - // Payment types + /** + * @notice Types of payments that are supported by the payments protocol + * @dev + */ enum PaymentTypes { QueryFee, IndexingFee, IndexingRewards } - event GraphPaymentsCollected( - address indexed sender, + /** + * @notice Emitted when a payment is collected + * @param payer The address of the payer + * @param receiver The address of the receiver + * @param dataService The address of the data service + * @param tokensReceiver Amount of tokens for the receiver + * @param tokensDelegationPool Amount of tokens for delegators + * @param tokensDataService Amount of tokens for the data service + * @param tokensProtocol Amount of tokens charged as protocol tax + */ + event PaymentCollected( + address indexed payer, address indexed receiver, address indexed dataService, uint256 tokensReceiver, @@ -18,13 +37,28 @@ interface IGraphPayments { uint256 tokensDataService, uint256 tokensProtocol ); - // -- Errors -- - error GraphPaymentsInsufficientTokens(uint256 available, uint256 required); + /** + * @notice Emitted when there are insufficient tokens to pay the required amount + * @param tokens The amount of tokens available + * @param minTokens The amount of tokens being collected + */ + error GraphPaymentsInsufficientTokens(uint256 tokens, uint256 minTokens); + /** + * @notice Initialize the contract + */ function initialize() external; - // collect funds from a sender, pay cuts and forward the rest to the receiver + /** + * @notice Collects funds from a payer. + * It will pay cuts to all relevant parties and forward the rest to the receiver. + * @param paymentType The type of payment as defined in {IGraphPayments} + * @param receiver The address of the receiver + * @param tokens The amount of tokens being collected + * @param dataService The address of the data service + * @param tokensDataService The amount of tokens that should be sent to the data service + */ function collect( PaymentTypes paymentType, address receiver, diff --git a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol index f076ef3e0..176f6284b 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol @@ -4,6 +4,44 @@ pragma solidity 0.8.26; import { IGraphPayments } from "./IGraphPayments.sol"; +/** + * @title Interface for a payments collector contract as defined by Graph Horizon payments protocol + * @notice Contracts implementing this interface can be used with the payments protocol. First, a payer must + * approve the collector to collect payments on their behalf. Only then can payment collection be initiated + * using the collector contract. + * + * @dev It's important to note that it's the collector contract's responsibility to validate the payment + * request is legitimate. + */ interface IPaymentsCollector { + /** + * @notice Emitted when a payment is collected + * @param paymentType The payment type collected as defined by {IGraphPayments} + * @param payer The address of the payer + * @param receiver The address of the receiver + * @param tokensReceiver The amount of tokens received by the receiver + * @param dataService The address of the data service + * @param tokensDataService The amount of tokens received by the data service + */ + event PaymentCollected( + IGraphPayments.PaymentTypes indexed paymentType, + address indexed payer, + address receiver, + uint256 tokensReceiver, + address indexed dataService, + uint256 tokensDataService + ); + + /** + * @notice Initiate a payment collection through the payments protocol + * @dev This function should require the caller to present some form of evidence of the payer's debt to + * the receiver. The collector should validate this evidence and, if valid, collect the payment. + * + * Emits a {PaymentCollected} event + * + * @param paymentType The payment type to collect, as defined by {IGraphPayments} + * @param data Additional data required for the payment collection. Will vary depending on the collector + * implementation. + */ function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external returns (uint256); } diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 7b39d77df..6d9396d00 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -3,28 +3,90 @@ pragma solidity 0.8.26; import { IGraphPayments } from "./IGraphPayments.sol"; +/** + * @title Interface for the {PaymentsEscrow} contract + * @notice This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT) + * for payments made through the payments protocol for services provided + * via a Graph Horizon data service. + * + * Payers deposit funds on the escrow, signalling their ability to pay for a service, and only + * being able to retrieve them after a thawing period. Receivers collect funds from the escrow, + * provided the payer has authorized them. The payer authorization is delegated to a payment + * collector contract which implements the {IPaymentsCollector} interface. + */ interface IPaymentsEscrow { + /// @notice Escrow account for a payer-receiver pair struct EscrowAccount { - uint256 balance; // Total escrow balance for a sender-receiver pair - uint256 tokensThawing; // Amount of escrow currently being thawed - uint256 thawEndTimestamp; // Timestamp at which thawing period ends (zero if not thawing) + // Total token balance for the payer-receiver pair + uint256 balance; + // Amount of tokens currently being thawed + uint256 tokensThawing; + // Timestamp at which thawing period ends (zero if not thawing) + uint256 thawEndTimestamp; } - // Collector + /// @notice Details for a payer-collector pair + /// @dev Collectors can be removed only after a thawing period struct Collector { + // Whether the collector is authorized to collect funds bool authorized; + // Amount of tokens the collector is allowed to collect uint256 allowance; + // Timestamp at which the collector thawing period ends (zero if not thawing) uint256 thawEndTimestamp; } - // -- Events -- + /** + * @notice Emitted when a payer authorizes a collector to collect funds + * @param payer The address of the payer + * @param collector The address of the collector + */ + event AuthorizedCollector(address indexed payer, address indexed collector); + + /** + * @notice Emitted when a payer thaws a collector + * @param payer The address of the payer + * @param collector The address of the collector + */ + event ThawCollector(address indexed payer, address indexed collector); + + /** + * @notice Emitted when a payer cancels the thawing of a collector + * @param payer The address of the payer + * @param collector The address of the collector + */ + event CancelThawCollector(address indexed payer, address indexed collector); - event AuthorizedCollector(address indexed payer, address indexed dataService); - event ThawCollector(address indexed payer, address indexed dataService); - event CancelThawCollector(address indexed payer, address indexed dataService); - event RevokeCollector(address indexed payer, address indexed dataService); + /** + * @notice Emitted when a payer revokes a collector authorization. + * @param payer The address of the payer + * @param collector The address of the collector + */ + event RevokeCollector(address indexed payer, address indexed collector); + + /** + * @notice Emitted when a payer deposits funds into the escrow for a payer-receiver pair + * @param payer The address of the payer + * @param receiver The address of the receiver + * @param tokens The amount of tokens deposited + */ event Deposit(address indexed payer, address indexed receiver, uint256 tokens); + + /** + * @notice Emitted when a payer cancels an escrow thawing + * @param payer The address of the payer + * @param receiver The address of the receiver + */ event CancelThaw(address indexed payer, address indexed receiver); + + /** + * @notice Emitted when a payer thaws funds from the escrow for a payer-receiver pair + * @param payer The address of the payer + * @param receiver The address of the receiver + * @param tokens The amount of tokens thawed + * @param totalTokensThawing The total amount of tokens being thawed + * @param thawEndTimestamp The timestamp at which the thawing period ends + */ event Thaw( address indexed payer, address indexed receiver, @@ -32,43 +94,206 @@ interface IPaymentsEscrow { uint256 totalTokensThawing, uint256 thawEndTimestamp ); + + /** + * @notice Emitted when a payer withdraws funds from the escrow for a payer-receiver pair + * @param payer The address of the payer + * @param receiver The address of the receiver + * @param tokens The amount of tokens withdrawn + */ event Withdraw(address indexed payer, address indexed receiver, uint256 tokens); + + /** + * @notice Emitted when a collector collects funds from the escrow for a payer-receiver pair + * @param payer The address of the payer + * @param receiver The address of the receiver + * @param tokens The amount of tokens collected + */ event EscrowCollected(address indexed payer, address indexed receiver, uint256 tokens); // -- Errors -- - error PaymentsEscrowInsufficientTokensThawing(); - error PaymentsEscrowInsufficientBalance(uint256 available, uint256 required); + /** + * @notice Thrown when the available balance is insufficient to perform an operation + * @param balance The current balance + * @param minBalance The minimum required balance + */ + error PaymentsEscrowInsufficientBalance(uint256 balance, uint256 minBalance); + + /** + * @notice Thrown when a thawing is expected to be in progress but it is not + */ error PaymentsEscrowNotThawing(); + + /** + * @notice Thrown when a thawing is still in progress + * @param currentTimestamp The current timestamp + * @param thawEndTimestamp The timestamp at which the thawing period ends + */ error PaymentsEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); + + /** + * @notice Thrown when setting the thawing period to a value greater than the maximum + * @param thawingPeriod The thawing period + * @param maxThawingPeriod The maximum thawing period + */ error PaymentsEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); - error PaymentsEscrowCollectorNotAuthorized(address sender, address dataService); - error PaymentsEscrowInsufficientAllowance(uint256 current, uint256 required); - error PaymentsEscrowInconsistentAllowance(uint256 current, uint256 required); + + /** + * @notice Thrown when a collector is not authorized to collect funds + * @param payer The address of the payer + * @param collector The amount of tokens the collector is allowed to collect + */ + error PaymentsEscrowCollectorNotAuthorized(address payer, address collector); + + /** + * @notice Thrown when a collector has insufficient allowance to collect funds + * @param allowance The current allowance + * @param minAllowance The minimum required allowance + */ + error PaymentsEscrowInsufficientAllowance(uint256 allowance, uint256 minAllowance); + + /** + * @notice Thrown when attempting to decrease a collector's allowance + * @param current The current allowance + * @param target The target allowance + */ + error PaymentsEscrowInconsistentAllowance(uint256 current, uint256 target); + + /** + * @notice Thrown when the contract balance is not consistent with the collection amount + * @param balanceBefore The balance before the collection + * @param balanceAfter The balance after the collection + * @param tokens The amount of tokens collected + */ error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens); - function approveCollector(address dataService, uint256 thawingPeriod) external; - function thawCollector(address dataService) external; - function cancelThawCollector(address dataService) external; - function revokeCollector(address dataService) external; - // Deposit funds into the escrow for a receiver + /** + * @notice Authorize a collector to collect funds from the payer's escrow + * @dev This function can only be used to increase the allowance of a collector. + * To reduce it the authorization must be revoked and a new one must be created. + * + * Requirements: + * - `allowance` must be greater than the current allowance + * + * Emits an {AuthorizedCollector} event + * + * @param collector The address of the collector + * @param allowance The amount of tokens the collector is allowed to collect + */ + function approveCollector(address collector, uint256 allowance) external; + + /** + * @notice Thaw a collector's collector authorization + * @dev The thawing period is defined by the `REVOKE_COLLECTOR_THAWING_PERIOD` constant + * + * Emits a {ThawCollector} event + * + * @param collector The address of the collector + */ + function thawCollector(address collector) external; + + /** + * @notice Cancel a collector's authorization thawing + * @dev Requirements: + * - `collector` must be thawing + * + * Emits a {CancelThawCollector} event + * + * @param collector The address of the collector + */ + function cancelThawCollector(address collector) external; + + /** + * @notice Revoke a collector's authorization. + * Removes the collector from the list of authorized collectors. + * @dev Requirements: + * - `collector` must have thawed + * + * Emits a {RevokeCollector} event + * + * @param collector The address of the collector + */ + function revokeCollector(address collector) external; + + /** + * @notice Deposits funds into the escrow for a payer-receiver pair, where + * the payer is the transaction caller. + * @dev Emits a {Deposit} event + * @param receiver The address of the receiver + * @param tokens The amount of tokens to deposit + */ function deposit(address receiver, uint256 tokens) external; - // Requests to thaw a specific amount of escrow from a receiver's escrow account + /** + * @notice Deposits funds into the escrow for a payer-receiver pair, where + * the payer can be specified. + * @dev Emits a {Deposit} event + * @param payer The address of the payer + * @param receiver The address of the receiver + * @param tokens The amount of tokens to deposit + */ + function depositTo(address payer, address receiver, uint256 tokens) external; + + /** + * @notice Thaw a specific amount of escrow from a payer-receiver's escrow account. + * The payer is the transaction caller. + * If `tokens` is zero and funds were already thawing it will cancel the thawing. + * Note that repeated calls to this function will overwrite the previous thawing amount + * and reset the thawing period. + * @dev Requirements: + * - `tokens` must be less than or equal to the available balance + * + * Emits a {Thaw} event. If `tokens` is zero it will emit a {CancelThaw} event. + * + * @param receiver The address of the receiver + * @param tokens The amount of tokens to thaw + */ function thaw(address receiver, uint256 tokens) external; - // Withdraws all thawed escrow from a receiver's escrow account + /** + * @notice Withdraws all thawed escrow from a payer-receiver's escrow account. + * The payer is the transaction caller. + * Note that the withdrawn funds might be less than the thawed amount if there were + * payment collections in the meantime. + * @dev Requirements: + * - Funds must be thawed + * + * Emits a {Withdraw} event + * + * @param receiver The address of the receiver + */ function withdraw(address receiver) external; - // Collect from escrow for a receiver using sender's deposit + /** + * @notice Collects funds from the payer-receiver's escrow and sends them to {GraphPayments} for + * distribution using the Graph Horizon Payments protocol. + * The function will revert if there are not enough funds in the escrow. + * @dev Requirements: + * - `collector` needs to be authorized by the payer and have enough allowance + * + * Emits an {EscrowCollected} event + * + * @param paymentType The type of payment being collected as defined in the {IGraphPayments} interface + * @param payer The address of the payer + * @param receiver The address of the receiver + * @param tokens The amount of tokens to collect + * @param collector The address of the collector + * @param tokensDataService The amount of tokens that {GraphPayments} should send to the data service + */ function collect( IGraphPayments.PaymentTypes paymentType, address payer, address receiver, uint256 tokens, - address dataService, + address collector, uint256 tokensDataService ) external; - function getBalance(address sender, address receiver) external view returns (uint256); + /** + * @notice Get the balance of a payer-receiver pair + * @param payer The address of the payer + * @param receiver The address of the receiver + */ + function getBalance(address payer, address receiver) external view returns (uint256); } diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index 46209bb2d..2e5a47c05 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -4,29 +4,63 @@ pragma solidity 0.8.26; import { IGraphPayments } from "./IGraphPayments.sol"; import { IPaymentsCollector } from "./IPaymentsCollector.sol"; +/** + * @title Interface for the {TAPCollector} contract + * @dev Implements the {IPaymentCollector} interface as defined by the Graph + * Horizon payments protocol. + * @notice Implements a payments collector contract that can be used to collect + * payments using a TAP RAV (Receipt Aggregate Voucher). + */ interface ITAPCollector is IPaymentsCollector { + /// @notice The Receipt Aggregate Voucher (RAV) struct struct ReceiptAggregateVoucher { + // The address of the data service the RAV was issued to address dataService; + // The address of the service provider the RAV was issued to address serviceProvider; + // The RAV timestamp, indicating the latest TAP Receipt in the RAV uint64 timestampNs; + // Total amount owed to the service provider since the beginning of the + // payer-service provider relationship, including all debt that is already paid for. uint128 valueAggregate; + // Arbitrary metadata to extend functionality if a data service requires it bytes metadata; } + /// @notice A struct representing a signed RAV struct SignedRAV { + // The RAV ReceiptAggregateVoucher rav; - bytes signature; // 65 bytes: r (32 Bytes) || s (32 Bytes) || v (1 Byte) + // Signature - 65 bytes: r (32 Bytes) || s (32 Bytes) || v (1 Byte) + bytes signature; } - event TAPCollectorCollected( - IGraphPayments.PaymentTypes indexed paymentType, - address indexed payer, - address receiver, - uint256 tokensReceiver, - address indexed dataService, - uint256 tokensDataService - ); - + /** + * Trown when the caller is not the data service the RAV was issued to + * @param caller The address of the caller + * @param dataService The address of the data service + */ error TAPCollectorCallerNotDataService(address caller, address dataService); + + /** + * @notice Thrown when the tokens collected are inconsistent with the collection history + * Each RAV should have a value greater than the previous one + * @param tokens The amount of tokens in the RAV + * @param tokensCollected The amount of tokens already collected + */ error TAPCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected); + + /** + * @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV). + * @param signedRAV The SignedRAV containing the RAV and its signature. + * @return The address of the signer. + */ + function recoverRAVSigner(SignedRAV calldata signedRAV) external view returns (address); + + /** + * @dev Computes the hash of a ReceiptAggregateVoucher (RAV). + * @param rav The RAV for which to compute the hash. + * @return The hash of the RAV. + */ + function encodeRAV(ReceiptAggregateVoucher calldata rav) external view returns (bytes32); } diff --git a/packages/horizon/contracts/libraries/Denominations.sol b/packages/horizon/contracts/libraries/Denominations.sol index 5652f50a0..ae3adab94 100644 --- a/packages/horizon/contracts/libraries/Denominations.sol +++ b/packages/horizon/contracts/libraries/Denominations.sol @@ -2,13 +2,19 @@ pragma solidity 0.8.26; /** - * @title Denominations + * @title Denominations library * @dev Provides a list of ground denominations for those tokens that cannot be represented by an ERC20. * For now, the only needed is the native token that could be ETH, MATIC, or other depending on the layer being operated. */ library Denominations { + /// @notice The address of the native token, i.e ETH address internal constant NATIVE_TOKEN = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + /** + * @notice Checks if a token is the native token + * @param token The token address to check + * @return True if the token is the native token, false otherwise + */ function isNativeToken(address token) internal pure returns (bool) { return token == NATIVE_TOKEN; } diff --git a/packages/horizon/contracts/libraries/LinkedList.sol b/packages/horizon/contracts/libraries/LinkedList.sol index d58d3f5cd..99bf682ea 100644 --- a/packages/horizon/contracts/libraries/LinkedList.sol +++ b/packages/horizon/contracts/libraries/LinkedList.sol @@ -2,19 +2,51 @@ pragma solidity 0.8.26; +/** + * @title LinkedList library + * @notice A library to manage singly linked lists. + * + * The library makes no assumptions about the contents of the items, the only + * requirements on the items are: + * - they must be represented by a unique bytes32 id + * - the id of the item must not be bytes32(0) + * - each item must have a reference to the next item in the list + * + * A contract using this library must store: + * - a LinkedList.List to keep track of the list metadata + * - a mapping from bytes32 to the item data + */ library LinkedList { using LinkedList for List; + /// @notice Represents a linked list struct List { + // The head of the list bytes32 head; + // The tail of the list bytes32 tail; + // A nonce, which can optionally be used to generate unique ids uint256 nonce; + // The number of items in the list uint256 count; } + + /// @notice Empty bytes constant bytes internal constant NULL_BYTES = bytes(""); + /** + * @notice Thrown when trying to remove an item from an empty list + */ error LinkedListEmptyList(); + /** + * @notice Adds an item to the list. + * The item is added to the end of the list. + * @dev Note that this function will not take care of linking the + * old tail to the new item. The caller should take care of this. + * @param self The list metadata + * @param id The id of the item to add + */ function add(List storage self, bytes32 id) internal { self.tail = id; self.nonce += 1; @@ -22,6 +54,15 @@ library LinkedList { self.count += 1; } + /** + * @notice Removes an item from the list. + * The item is removed from the beginning of the list. + * @param self The list metadata + * @param getNextItem A function to get the next item in the list. It should take + * the id of the current item and return the id of the next item. + * @param deleteItem A function to delete an item. This should delete the item from + * the contract storage. It takes the id of the item to delete. + */ function remove( List storage self, function(bytes32) view returns (bytes32) getNextItem, @@ -36,6 +77,22 @@ library LinkedList { return self.head; } + /** + * @notice Traverses the list and processes each item. + * @param self The list metadata + * @param getNextItem A function to get the next item in the list. It should take + * the id of the current item and return the id of the next item. + * @param processItem A function to process an item. The function should take the id of the item + * and an accumulator, and return: + * - a boolean indicating whether the traversal should stop + * - a boolean indicating whether the item should be deleted + * - an accumulator to pass data between iterations + * @param deleteItem A function to delete an item. This should delete the item from + * the contract storage. It takes the id of the item to delete. + * @param processInitAcc The initial accumulator data + * @param iterations The maximum number of iterations to perform. If 0, the traversal will continue + * until the end of the list. + */ function traverse( List storage self, function(bytes32) view returns (bytes32) getNextItem, diff --git a/packages/horizon/contracts/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol index f18e089ab..1496be4d8 100644 --- a/packages/horizon/contracts/libraries/PPMMath.sol +++ b/packages/horizon/contracts/libraries/PPMMath.sol @@ -1,28 +1,54 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; +/** + * @title PPMMath library + * @notice A library for handling calculations with parts per million (PPM) amounts. + */ library PPMMath { /// @notice Maximum value (100%) in parts per million (PPM). uint256 internal constant MAX_PPM = 1_000_000; - error PPMMathInvalidPPM(uint256 ppm); + /** + * @notice Thrown when a value is expected to be in PPM but is not. + * @param value The value that is not in PPM. + */ + error PPMMathInvalidPPM(uint256 value); + + /** + * @notice Thrown when no value in a multiplication is in PPM. + * @param a The first value in the multiplication. + * @param b The second value in the multiplication. + */ error PPMMathInvalidMulPPM(uint256 a, uint256 b); - // one of a or b must be in PPM + /** + * @notice Multiplies two values, one of which must be in PPM. + * @param a The first value. + * @param b The second value. + * @return The result of the multiplication. + */ function mulPPM(uint256 a, uint256 b) internal pure returns (uint256) { require(isValidPPM(a) || isValidPPM(b), PPMMathInvalidMulPPM(a, b)); return (a * b) / MAX_PPM; } - // Calculate the tokens after curation fees first, and subtact that, - // to prevent curation fees from rounding down to zero - // a must be in ppm + /** + * @notice Multiplies two values, one of which must be in PPM, and rounds up the result. + * @param a The first value. + * @param b The second value. + */ function mulPPMRoundUp(uint256 a, uint256 b) internal pure returns (uint256) { require(isValidPPM(b), PPMMathInvalidPPM(b)); return a - mulPPM(MAX_PPM - b, a); } - function isValidPPM(uint256 ppm) internal pure returns (bool) { - return ppm >= 0 && ppm <= MAX_PPM; + /** + * @notice Checks if a value is in PPM. + * @dev A valid PPM value is between 0 and MAX_PPM. + * @param value The value to check. + */ + function isValidPPM(uint256 value) internal pure returns (bool) { + return value >= 0 && value <= MAX_PPM; } } diff --git a/packages/horizon/contracts/libraries/UintRange.sol b/packages/horizon/contracts/libraries/UintRange.sol index 2e722e057..12fe10176 100644 --- a/packages/horizon/contracts/libraries/UintRange.sol +++ b/packages/horizon/contracts/libraries/UintRange.sol @@ -1,10 +1,20 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; +/** + * @title UintRange library + * @notice A library for handling range checks on uint256 values. + */ library UintRange { using UintRange for uint256; - function isInRange(uint256 self, uint256 min, uint256 max) internal pure returns (bool) { - return self >= min && self <= max; + /** + * @notice Checks if a value is in the range [`min`, `max`]. + * @param value The value to check. + * @param min The minimum value of the range. + * @param max The maximum value of the range. + */ + function isInRange(uint256 value, uint256 min, uint256 max) internal pure returns (bool) { + return value >= min && value <= max; } } diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 274337af0..a3e1b2dd7 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -11,21 +11,39 @@ import { PPMMath } from "../libraries/PPMMath.sol"; import { GraphDirectory } from "../data-service/GraphDirectory.sol"; +/** + * @title GraphPayments contract + * @notice This contract is part of the Graph Horizon payments protocol. It's designed + * to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a + * set of pre established rules. + */ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, IGraphPayments { using TokenUtils for IGraphToken; using PPMMath for uint256; uint256 public immutable PROTOCOL_PAYMENT_CUT; + /** + * @notice Constructor for the {GraphPayments} contract + * @dev This contract is upgradeable however we stil use the constructor to set + * a few immutable variables. + * @param controller The address of the Graph controller + * @param protocolPaymentCut The protocol tax in PPM + */ constructor(address controller, uint256 protocolPaymentCut) GraphDirectory(controller) { PROTOCOL_PAYMENT_CUT = protocolPaymentCut; _disableInitializers(); } + /** + * @notice See {IGraphPayments-initialize} + */ function initialize() external initializer { __Multicall_init(); } - // collect funds from a sender, pay cuts and forward the rest to the receiver + /** + * @notice See {IGraphPayments-collect} + */ function collect( IGraphPayments.PaymentTypes paymentType, address receiver, @@ -57,7 +75,7 @@ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, I uint256 tokensReceiverRemaining = tokens - totalCut; _graphToken().pushTokens(receiver, tokensReceiverRemaining); - emit GraphPaymentsCollected( + emit PaymentCollected( msg.sender, receiver, dataService, diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 5b62863ec..a03ac7409 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -10,29 +10,40 @@ import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils. import { GraphDirectory } from "../data-service/GraphDirectory.sol"; +/** + * @title PaymentsEscrow contract + * @dev Implements the {IPaymentsEscrow} interface + * @notice This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT) + * for payments made through the payments protocol for services provided + * via a Graph Horizon data service. + */ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { using TokenUtils for IGraphToken; - // Authorized collectors - mapping(address sender => mapping(address dataService => IPaymentsEscrow.Collector collector)) + /// @notice Authorization details for payer-collector pairs + mapping(address payer => mapping(address collector => IPaymentsEscrow.Collector collectorDetails)) public authorizedCollectors; - // Stores how much escrow each sender has deposited for each receiver, as well as thawing information - mapping(address sender => mapping(address receiver => IPaymentsEscrow.EscrowAccount escrowAccount)) + /// @notice Escrow account details for payer-receiver pairs + mapping(address payer => mapping(address receiver => IPaymentsEscrow.EscrowAccount escrowAccount)) public escrowAccounts; - // The maximum thawing period (in seconds) for both escrow withdrawal and signer revocation - // This is a precautionary measure to avoid inadvertedly locking funds for too long + /// @notice The maximum thawing period (in seconds) for both escrow withdrawal and signer revocation + /// @dev This is a precautionary measure to avoid inadvertedly locking funds for too long uint256 public constant MAX_THAWING_PERIOD = 90 days; - // Thawing period for authorized collectors + /// @notice Thawing period in seconds for authorized collectors uint256 public immutable REVOKE_COLLECTOR_THAWING_PERIOD; - // The duration (in seconds) in which escrow funds are thawing before they can be withdrawn + /// @notice Thawing period in seconds for escrow funds withdrawal uint256 public immutable WITHDRAW_ESCROW_THAWING_PERIOD; - // -- Constructor -- - + /** + * @notice Construct the PaymentsEscrow contract + * @param controller The address of the controller + * @param revokeCollectorThawingPeriod Thawing period in seconds for authorized collectors + * @param withdrawEscrowThawingPeriod Thawing period in seconds for escrow funds withdrawal + */ constructor( address controller, uint256 revokeCollectorThawingPeriod, @@ -51,35 +62,43 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { WITHDRAW_ESCROW_THAWING_PERIOD = withdrawEscrowThawingPeriod; } - // approve a data service to collect funds - function approveCollector(address dataService, uint256 tokens) external override { - Collector storage collector = authorizedCollectors[msg.sender][dataService]; - require(tokens > collector.allowance, PaymentsEscrowInconsistentAllowance(collector.allowance, tokens)); + /** + * @notice See {IPaymentsEscrow-approveCollector} + */ + function approveCollector(address collector_, uint256 allowance) external override { + Collector storage collector = authorizedCollectors[msg.sender][collector_]; + require(allowance > collector.allowance, PaymentsEscrowInconsistentAllowance(collector.allowance, allowance)); collector.authorized = true; - collector.allowance = tokens; - emit AuthorizedCollector(msg.sender, dataService); + collector.allowance = allowance; + emit AuthorizedCollector(msg.sender, collector_); } - // thaw a data service's collector authorization - function thawCollector(address dataService) external override { - authorizedCollectors[msg.sender][dataService].thawEndTimestamp = + /** + * @notice See {IPaymentsEscrow-thawCollector} + */ + function thawCollector(address collector) external override { + authorizedCollectors[msg.sender][collector].thawEndTimestamp = block.timestamp + REVOKE_COLLECTOR_THAWING_PERIOD; - emit ThawCollector(msg.sender, dataService); + emit ThawCollector(msg.sender, collector); } - // cancel thawing a data service's collector authorization - function cancelThawCollector(address dataService) external override { - require(authorizedCollectors[msg.sender][dataService].thawEndTimestamp != 0, PaymentsEscrowNotThawing()); + /** + * @notice See {IPaymentsEscrow-cancelThawCollector} + */ + function cancelThawCollector(address collector) external override { + require(authorizedCollectors[msg.sender][collector].thawEndTimestamp != 0, PaymentsEscrowNotThawing()); - authorizedCollectors[msg.sender][dataService].thawEndTimestamp = 0; - emit CancelThawCollector(msg.sender, dataService); + authorizedCollectors[msg.sender][collector].thawEndTimestamp = 0; + emit CancelThawCollector(msg.sender, collector); } - // revoke authorized collector - function revokeCollector(address dataService) external override { - Collector storage collector = authorizedCollectors[msg.sender][dataService]; + /** + * @notice See {IPaymentsEscrow-revokeCollector} + */ + function revokeCollector(address collector_) external override { + Collector storage collector = authorizedCollectors[msg.sender][collector_]; require(collector.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); require( @@ -87,43 +106,52 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { PaymentsEscrowStillThawing(block.timestamp, collector.thawEndTimestamp) ); - delete authorizedCollectors[msg.sender][dataService]; - emit RevokeCollector(msg.sender, dataService); + delete authorizedCollectors[msg.sender][collector_]; + emit RevokeCollector(msg.sender, collector_); } - // Deposit funds into the escrow for a receiver + /** + * @notice See {IPaymentsEscrow-deposit} + */ function deposit(address receiver, uint256 tokens) external override { - escrowAccounts[msg.sender][receiver].balance += tokens; - _graphToken().pullTokens(msg.sender, tokens); - emit Deposit(msg.sender, receiver, tokens); + _deposit(msg.sender, receiver, tokens); + } + + /** + * @notice See {IPaymentsEscrow-depositTo} + */ + function depositTo(address payer, address receiver, uint256 tokens) external override { + _deposit(payer, receiver, tokens); } - // Requests to thaw a specific amount of escrow from a receiver's escrow account + /** + * @notice See {IPaymentsEscrow-thaw} + */ function thaw(address receiver, uint256 tokens) external override { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; + + // if amount thawing is zero and requested amount is zero this is an invalid request. + // otherwise if amount thawing is greater than zero and requested amount is zero this + // is a cancel thaw request. if (tokens == 0) { - // if amount thawing is zero and requested amount is zero this is an invalid request. - // otherwise if amount thawing is greater than zero and requested amount is zero this - // is a cancel thaw request. - require(account.tokensThawing != 0, PaymentsEscrowInsufficientTokensThawing()); + require(account.tokensThawing != 0, PaymentsEscrowNotThawing()); account.tokensThawing = 0; account.thawEndTimestamp = 0; emit CancelThaw(msg.sender, receiver); return; } - // Check if the escrow balance is sufficient require(account.balance >= tokens, PaymentsEscrowInsufficientBalance(account.balance, tokens)); - // Set amount to thaw account.tokensThawing = tokens; - // Set when the thaw is complete (thawing period number of seconds after current timestamp) account.thawEndTimestamp = block.timestamp + WITHDRAW_ESCROW_THAWING_PERIOD; emit Thaw(msg.sender, receiver, tokens, account.tokensThawing, account.thawEndTimestamp); } - // Withdraws all thawed escrow from a receiver's escrow account + /** + * @notice See {IPaymentsEscrow-withdraw} + */ function withdraw(address receiver) external override { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; require(account.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); @@ -135,14 +163,16 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { // Amount is the minimum between the amount being thawed and the actual balance uint256 tokens = account.tokensThawing > account.balance ? account.balance : account.tokensThawing; - account.balance -= tokens; // Reduce the balance by the withdrawn amount (no underflow risk) + account.balance -= tokens; account.tokensThawing = 0; account.thawEndTimestamp = 0; _graphToken().pushTokens(msg.sender, tokens); emit Withdraw(msg.sender, receiver, tokens); } - // Collect from escrow for a receiver using sender's deposit + /** + * @notice See {IPaymentsEscrow-collect} + */ function collect( IGraphPayments.PaymentTypes paymentType, address payer, @@ -156,17 +186,14 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { require(collector.authorized, PaymentsEscrowCollectorNotAuthorized(payer, msg.sender)); require(collector.allowance >= tokens, PaymentsEscrowInsufficientAllowance(collector.allowance, tokens)); - // Reduce amount from approved collector - collector.allowance -= tokens; - - // Collect tokens from PaymentsEscrow up to amount available + // Check if there are enough funds in the escrow account EscrowAccount storage account = escrowAccounts[payer][receiver]; - uint256 availableTokens = account.balance - account.tokensThawing; - require(availableTokens >= tokens, PaymentsEscrowInsufficientBalance(availableTokens, tokens)); + require(account.balance >= tokens, PaymentsEscrowInsufficientBalance(account.balance, tokens)); + // Reduce amount from approved collector and account balance + collector.allowance -= tokens; account.balance -= tokens; - // Approve tokens so GraphPayments can pull them uint256 balanceBefore = _graphToken().balanceOf(address(this)); _graphToken().approve(address(_graphPayments()), tokens); @@ -181,9 +208,22 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { emit EscrowCollected(payer, receiver, tokens); } - // Get the balance of a sender-receiver pair + /** + * @notice See {IPaymentsEscrow-getBalance} + */ function getBalance(address payer, address receiver) external view override returns (uint256) { EscrowAccount storage account = escrowAccounts[payer][receiver]; return account.balance - account.tokensThawing; } + + /** + * @notice See {IPaymentsEscrow-deposit} + * @param receiver The address of the receiver + * @param tokens The amount of tokens to deposit + */ + function _deposit(address payer, address receiver, uint256 tokens) internal { + escrowAccounts[payer][receiver].balance += tokens; + _graphToken().pullTokens(msg.sender, tokens); + emit Deposit(payer, receiver, tokens); + } } diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index b535a72de..a80e08cdf 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -11,22 +11,31 @@ import { GraphDirectory } from "../../data-service/GraphDirectory.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; /** - * @title TAPVerifier - * @dev A contract for verifying receipt aggregation vouchers. + * @title TAPCollector contract + * @dev Implements the {ITAPCollector} and {IPaymentCollector} interfaces. + * @notice A payments collector contract that can be used to collect payments using a TAP RAV (Receipt Aggregate Voucher). + * @dev Note that the contract expects the RAV aggregate value to be monotonically increasing, each successive RAV for the same + * (data service-payer-receiver) tuple should have a value greater than the previous one. The contract will keep track of the tokens + * already collected and calculate the difference to collect. */ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { using PPMMath for uint256; + /// @notice The EIP712 typehash for the ReceiptAggregateVoucher struct bytes32 private constant EIP712_RAV_TYPEHASH = keccak256( "ReceiptAggregateVoucher(address dataService, address serviceProvider,uint64 timestampNs,uint128 valueAggregate,bytes metadata)" ); + /// @notice Tracks the amount of tokens already collected by a data service from a payer to a receiver mapping(address dataService => mapping(address receiver => mapping(address payer => uint256 tokens))) public tokensCollected; /** - * @dev Constructs a new instance of the TAPVerifier contract. + * @notice Constructs a new instance of the TAPVerifier contract. + * @param eip712Name The name of the EIP712 domain. + * @param eip712Version The version of the EIP712 domain. + * @param controller The address of the Graph controller. */ constructor( string memory eip712Name, @@ -35,11 +44,12 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { ) EIP712(eip712Name, eip712Version) GraphDirectory(controller) {} /** - * @notice Verify validity of a SignedRAV + * @notice Initiate a payment collection through the payments protocol + * See {IGraphPayments.collect}. * @dev Caller must be the data service the RAV was issued to. * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. */ - function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external returns (uint256) { + function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external override returns (uint256) { (SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(data, (SignedRAV, uint256)); require( signedRAV.rav.dataService == msg.sender, @@ -72,34 +82,35 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { tokensCollected[dataService][receiver][payer] = tokensRAV; } - emit TAPCollectorCollected(paymentType, payer, receiver, tokensToCollect, dataService, tokensDataService); + emit PaymentCollected(paymentType, payer, receiver, tokensToCollect, dataService, tokensDataService); return tokensToCollect; } /** - * @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV). - * @param signedRAV The SignedRAV containing the RAV and its signature. - * @return The address of the signer. - * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. + * @notice See {ITAPCollector.recoverRAVSigner} */ - function recoverRAVSigner(SignedRAV calldata signedRAV) public view returns (address) { + function recoverRAVSigner(SignedRAV calldata signedRAV) external view override returns (address) { return _recoverRAVSigner(signedRAV); } /** - * @dev Computes the hash of a ReceiptAggregateVoucher (RAV). - * @param rav The RAV for which to compute the hash. - * @return The hash of the RAV. + * @notice See {ITAPCollector.encodeRAV} */ - function encodeRAV(ReceiptAggregateVoucher calldata rav) public view returns (bytes32) { + function encodeRAV(ReceiptAggregateVoucher calldata rav) external view returns (bytes32) { return _encodeRAV(rav); } + /** + * @notice See {ITAPCollector.recoverRAVSigner} + */ function _recoverRAVSigner(SignedRAV memory _signedRAV) private view returns (address) { bytes32 messageHash = _encodeRAV(_signedRAV.rav); return ECDSA.recover(messageHash, _signedRAV.signature); } + /** + * @notice See {ITAPCollector.encodeRAV} + */ function _encodeRAV(ReceiptAggregateVoucher memory _rav) private view returns (bytes32) { return _hashTypedDataV4( From 289772e49dbf4f4352bfab8f136dfcd4bac852cb Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 31 May 2024 18:11:12 -0300 Subject: [PATCH 092/343] fix: update GraphEscrow to EscrowPayments --- packages/horizon/test/GraphBase.t.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 565080cc9..699880050 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -67,7 +67,7 @@ abstract contract GraphBaseTest is Test, Constants { vm.label({ account: address(controller), newLabel: "Controller" }); vm.label({ account: address(token), newLabel: "GraphToken" }); vm.label({ account: address(payments), newLabel: "GraphPayments" }); - vm.label({ account: address(escrow), newLabel: "GraphEscrow" }); + vm.label({ account: address(escrow), newLabel: "PaymentsEscrow" }); vm.label({ account: address(staking), newLabel: "HorizonStaking" }); vm.label({ account: address(stakingExtension), newLabel: "HorizonStakingExtension" }); } @@ -97,7 +97,7 @@ abstract contract GraphBaseTest is Test, Constants { // GraphEscrow predict address bytes32 saltEscrow = keccak256("GraphEscrowSalt"); bytes32 escrowHash = keccak256(bytes.concat( - vm.getCode("GraphEscrow.sol:GraphEscrow"), + vm.getCode("PaymentsEscrow.sol:PaymentsEscrow"), abi.encode( address(controller), revokeCollectorThawingPeriod, From 685f457dd2d7d318591f57661562c9e0ca7c453a Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Mon, 3 Jun 2024 11:30:12 -0300 Subject: [PATCH 093/343] fix: unit tests --- packages/horizon/test/escrow/thaw.t.sol | 16 +++++++++++++--- .../test/staking/delegation/delegate.t.sol | 6 +++--- .../test/staking/delegation/undelegate.t.sol | 2 +- .../test/staking/provision/provision.t.sol | 8 ++++++-- .../test/staking/provision/reprovision.t.sol | 6 +++++- .../horizon/test/staking/stake/unstake.t.sol | 12 ++++++++++-- packages/horizon/test/staking/thaw/thaw.t.sol | 2 +- 7 files changed, 39 insertions(+), 13 deletions(-) diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index 110d262e3..1b952e1f1 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -18,17 +18,27 @@ contract GraphEscrowThawTest is GraphEscrowTest { function testThaw_RevertWhen_InsufficientThawAmount( uint256 amount ) public useGateway useDeposit(amount) { - bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowInsufficientTokensThawing()"); + bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowNotThawing()"); vm.expectRevert(expectedError); escrow.thaw(users.indexer, 0); } function testThaw_RevertWhen_InsufficientAmount( - uint256 amount + uint256 amount, + uint256 overAmount ) public useGateway useDeposit(amount) { - uint256 overAmount = amount + 1; + overAmount = bound(overAmount, amount + 1, type(uint256).max); bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowInsufficientBalance(uint256,uint256)", amount, overAmount); vm.expectRevert(expectedError); escrow.thaw(users.indexer, overAmount); } + + function testThaw_CancelRequest(uint256 amount) public useGateway useDeposit(amount) { + escrow.thaw(users.indexer, amount); + escrow.thaw(users.indexer, 0); + + (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.indexer); + assertEq(amountThawing, 0); + assertEq(thawEndTimestamp, 0); + } } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 603020ef7..58ae6f1e5 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -32,9 +32,9 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { delegationAmount = bound(delegationAmount, 1, MIN_DELEGATION - 1); token.approve(address(staking), delegationAmount); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInsufficientTokens(uint256,uint256)", - MIN_DELEGATION, - delegationAmount + "HorizonStakingInsufficientTokens(uint256,uint256)", + delegationAmount, + MIN_DELEGATION ); vm.expectRevert(expectedError); staking.delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 5c6bab44c..5eca15326 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -49,7 +49,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { vm.assume(overDelegationShares > delegation.shares); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInvalidSharesAmount(uint256,uint256)", + "HorizonStakingInsufficientShares(uint256,uint256)", delegation.shares, overDelegationShares ); diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol index f92f85be1..bb5f4792a 100644 --- a/packages/horizon/test/staking/provision/provision.t.sol +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -19,7 +19,7 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { function testProvision_RevertWhen_InsufficientTokens(uint256 amount) public useIndexer useStake(1000 ether) { amount = bound(amount, 0, MIN_PROVISION_SIZE - 1); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInvalidTokens(uint256,uint256)", + "HorizonStakingInsufficientTokens(uint256,uint256)", amount, MIN_PROVISION_SIZE ); @@ -63,7 +63,11 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { ) public useIndexer useStake(amount) { vm.assume(amount > MIN_PROVISION_SIZE); vm.assume(provisionTokens > amount); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientCapacity()"); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInsufficientIdleStake(uint256,uint256)", + provisionTokens, + amount + ); vm.expectRevert(expectedError); staking.provision(users.indexer, subgraphDataServiceAddress, provisionTokens, 0, 0); } diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 9cd0c2116..06c033888 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -106,7 +106,11 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { _createProvision(newDataService, MIN_PROVISION_SIZE, 0, thawingPeriod); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientCapacity()"); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInsufficientIdleStake(uint256,uint256)", + provisionAmount, + 0 + ); vm.expectRevert(expectedError); _reprovision(provisionAmount, 0); } diff --git a/packages/horizon/test/staking/stake/unstake.t.sol b/packages/horizon/test/staking/stake/unstake.t.sol index 8acd695fe..56eac4bfb 100644 --- a/packages/horizon/test/staking/stake/unstake.t.sol +++ b/packages/horizon/test/staking/stake/unstake.t.sol @@ -50,7 +50,11 @@ contract HorizonStakingUnstakeTest is HorizonStakingTest { useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientCapacity()"); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInsufficientIdleStake(uint256,uint256)", + amount, + 0 + ); vm.expectRevert(expectedError); staking.unstake(amount); } @@ -67,7 +71,11 @@ contract HorizonStakingUnstakeTest is HorizonStakingTest { { skip(thawingPeriod + 1); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientCapacity()"); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingInsufficientIdleStake(uint256,uint256)", + amount, + 0 + ); vm.expectRevert(expectedError); staking.unstake(amount); } diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/thaw/thaw.t.sol index 94785421f..713bdaa51 100644 --- a/packages/horizon/test/staking/thaw/thaw.t.sol +++ b/packages/horizon/test/staking/thaw/thaw.t.sol @@ -78,7 +78,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { ) public useIndexer useProvision(amount, 0, thawingPeriod) { vm.assume(thawAmount > amount); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInsufficientTokensAvailable(uint256,uint256)", + "HorizonStakingInsufficientTokens(uint256,uint256)", amount, thawAmount ); From a83e8877b39b289a2d55bf856c70cdb880600afc Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Mon, 3 Jun 2024 11:32:13 -0300 Subject: [PATCH 094/343] fix: remove commented code --- packages/horizon/test/staking/thaw/thaw.t.sol | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/thaw/thaw.t.sol index 713bdaa51..6a4a475f0 100644 --- a/packages/horizon/test/staking/thaw/thaw.t.sol +++ b/packages/horizon/test/staking/thaw/thaw.t.sol @@ -91,8 +91,6 @@ contract HorizonStakingThawTest is HorizonStakingTest { uint64 thawingPeriod, uint256 thawAmount ) public useIndexer useProvision(amount, 0, thawingPeriod) { - // vm.assume(thawAmount > 0); - // vm.assume(amount / (MAX_THAW_REQUESTS + 1) > thawAmount); thawAmount = bound(thawAmount, 1, amount / (MAX_THAW_REQUESTS + 1)); for (uint256 i = 0; i < 100; i++) { From 273311231d75646a06028f38cf0eab778309f2c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 3 Jun 2024 15:26:23 -0300 Subject: [PATCH 095/343] docs: finalize natspec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/GraphDirectory.sol | 21 +- .../data-service/interfaces/IDataService.sol | 8 +- .../utilities/ProvisionManager.sol | 36 +++ .../internal/IHorizonStakingMain.sol | 3 + .../contracts/DisputeManager.sol | 118 ++++---- .../contracts/DisputeManagerStorage.sol | 20 +- .../contracts/SubgraphService.sol | 265 ++++++++++++++++-- .../contracts/SubgraphServiceStorage.sol | 3 +- .../contracts/interfaces/IDisputeManager.sol | 42 ++- .../contracts/interfaces/ISubgraphService.sol | 120 +++++++- .../contracts/libraries/Allocation.sol | 98 ++++++- .../contracts/libraries/Attestation.sol | 10 +- .../contracts/libraries/LegacyAllocation.sol | 57 +++- .../contracts/utilities/AllocationManager.sol | 204 ++++++++++++-- .../utilities/AllocationManagerStorage.sol | 11 +- .../utilities/AttestationManager.sol | 19 ++ .../utilities/AttestationManagerStorage.sol | 1 + .../contracts/utilities/Directory.sol | 50 ++++ 18 files changed, 944 insertions(+), 142 deletions(-) diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/data-service/GraphDirectory.sol index ffa1c08ad..085ee8a8b 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/data-service/GraphDirectory.sol @@ -26,36 +26,36 @@ import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration abstract contract GraphDirectory { // -- Graph Horizon contracts -- - /// @dev The Graph Token contract address + /// @notice The Graph Token contract address IGraphToken private immutable GRAPH_TOKEN; - /// @dev The Horizon Staking contract address + /// @notice The Horizon Staking contract address IHorizonStaking private immutable GRAPH_STAKING; - /// @dev The Graph Payments contract address + /// @notice The Graph Payments contract address IGraphPayments private immutable GRAPH_PAYMENTS; - /// @dev The Payments Escrow contract address + /// @notice The Payments Escrow contract address IPaymentsEscrow private immutable GRAPH_PAYMENTS_ESCROW; // -- Graph periphery contracts -- - /// @dev The Graph Controller contract address + /// @notice The Graph Controller contract address IController private immutable GRAPH_CONTROLLER; - /// @dev The Epoch Manager contract address + /// @notice The Epoch Manager contract address IEpochManager private immutable GRAPH_EPOCH_MANAGER; - /// @dev The Rewards Manager contract address + /// @notice The Rewards Manager contract address IRewardsManager private immutable GRAPH_REWARDS_MANAGER; - /// @dev The Token Gateway contract address + /// @notice The Token Gateway contract address ITokenGateway private immutable GRAPH_TOKEN_GATEWAY; - /// @dev The Bridge Escrow contract address + /// @notice The Bridge Escrow contract address IBridgeEscrow private immutable GRAPH_BRIDGE_ESCROW; - /// @dev The Graph Proxy Admin contract address + /// @notice The Graph Proxy Admin contract address IGraphProxyAdmin private immutable GRAPH_PROXY_ADMIN; // -- Legacy Graph contracts -- @@ -104,6 +104,7 @@ abstract contract GraphDirectory { * - `controller` cannot be zero address * * Emits a {GraphDirectoryInitialized} event + * * @param controller The address of the Graph Controller contract. */ constructor(address controller) { diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index aa3ef3dfa..f2ffec1a5 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -68,8 +68,7 @@ interface IDataService { * @dev Before registering, the service provider must have created a provision in the * Graph Horizon staking contract with parameters that are compatible with the data service. * - * Verifies the provision parameters and marks it as accepted it in the Graph Horizon - * staking contract using {_acceptProvision}. + * Verifies provision parameters and rejects registration in the event they are not valid. * * Emits a {ServiceProviderRegistered} event. * @@ -82,10 +81,9 @@ interface IDataService { function register(address serviceProvider, bytes calldata data) external; /** - * @notice Accepts the provision of a service provider in the {Graph Horizon staking + * @notice Accepts staged parameters in the provision of a service provider in the {Graph Horizon staking * contract}. - * @dev Provides a way for the data service to revalidate and reaccept a provision that - * had a parameter change. Should call {_acceptProvision}. + * @dev Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. * * Emits a {ProvisionAccepted} event. * diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index ff02978fb..520b7a24b 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -96,6 +96,42 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa _; } + /** + * @notice External getter for the thawing period range + * @return Minimum thawing period allowed + * @return Maximum thawing period allowed + */ + function getThawingPeriodRange() external view returns (uint64, uint64) { + return _getThawingPeriodRange(); + } + + /** + * @notice External getter for the verifier cut range + * @return Minimum verifier cut allowed + * @return Maximum verifier cut allowed + */ + function getVerifierCutRange() external view returns (uint32, uint32) { + return _getVerifierCutRange(); + } + + /** + * @notice External getter for the provision tokens range + * @return Minimum provision tokens allowed + * @return Maximum provision tokens allowed + */ + function getProvisionTokensRange() external view returns (uint256, uint256) { + return _getProvisionTokensRange(); + } + + /** + * @notice External getter for the delegation ratio range + * @return Minimum delegation ratio allowed + * @return Maximum delegation ratio allowed + */ + function getDelegationRatioRange() external view returns (uint32, uint32) { + return _getDelegationRatioRange(); + } + /** * @notice Initializes the contract and any parent contracts. */ diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 33a8f29cc..201e1b75a 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -767,6 +767,9 @@ interface IHorizonStakingMain { * the provider has provisioned stake, and up to the amount of tokens they have provisioned. * If the service provider's stake is not enough, the associated delegation pool might be slashed * depending on the value of the global delegation slashing flag. + * + * Part of the slashed tokens are sent to the `verifierDestination` as a reward. + * * @dev Requirements: * - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider. * - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut. diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index e85fb54d7..765d08fbc 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -20,8 +20,7 @@ import { AttestationManager } from "./utilities/AttestationManager.sol"; /* * @title DisputeManager - * @notice Provides a way to align the incentives of participants by having slashing as deterrent - * for incorrect behaviour. + * @notice Provides a way to permissionlessly create disputes for incorrect behavior in the Subgraph Service. * * There are two types of disputes that can be created: Query disputes and Indexing disputes. * @@ -55,13 +54,17 @@ contract DisputeManager is // -- Modifiers -- /** - * @dev Check if the caller is the arbitrator. + * @notice Check if the caller is the arbitrator. */ modifier onlyArbitrator() { require(msg.sender == arbitrator, DisputeManagerNotArbitrator()); _; } + /** + * @notice Check if the dispute exists and is pending. + * @param disputeId The dispute Id + */ modifier onlyPendingDispute(bytes32 disputeId) { require(isDisputeCreated(disputeId), DisputeManagerInvalidDispute(disputeId)); require( @@ -71,18 +74,26 @@ contract DisputeManager is _; } + /** + * @notice Check if the caller is the fisherman of the dispute. + * @param disputeId The dispute Id + */ modifier onlyFisherman(bytes32 disputeId) { require(isDisputeCreated(disputeId), DisputeManagerInvalidDispute(disputeId)); require(msg.sender == disputes[disputeId].fisherman, DisputeManagerNotFisherman()); _; } + /** + * @notice Contract constructor + * @param controller Address of the controller + */ constructor(address controller) GraphDirectory(controller) { _disableInitializers(); } /** - * @dev Initialize this contract. + * @notice Initialize this contract. * @param arbitrator Arbitrator role * @param disputePeriod Dispute period in seconds * @param minimumDeposit Minimum deposit required to create a Dispute @@ -107,7 +118,7 @@ contract DisputeManager is } /** - * @dev Create an indexing dispute for the arbitrator to resolve. + * @notice Create an indexing dispute for the arbitrator to resolve. * The disputes are created in reference to an allocationId * This function is called by a challenger that will need to `_deposit` at * least `minimumDeposit` GRT tokens. @@ -123,7 +134,7 @@ contract DisputeManager is } /** - * @dev Create a query dispute for the arbitrator to resolve. + * @notice Create a query dispute for the arbitrator to resolve. * This function is called by a fisherman that will need to `_deposit` at * least `minimumDeposit` GRT tokens. * @param attestationData Attestation bytes submitted by the fisherman @@ -144,7 +155,7 @@ contract DisputeManager is } /** - * @dev Create query disputes for two conflicting attestations. + * @notice Create query disputes for two conflicting attestations. * A conflicting attestation is a proof presented by two different indexers * where for the same request on a subgraph the response is different. * For this type of dispute the submitter is not required to present a deposit @@ -194,11 +205,11 @@ contract DisputeManager is } /** - * @dev The arbitrator accepts a dispute as being valid. + * @notice The arbitrator accepts a dispute as being valid. * This function will revert if the indexer is not slashable, whether because it does not have * any stake available or the slashing percentage is configured to be zero. In those cases * a dispute must be resolved using drawDispute or rejectDispute. - * @notice Accept a dispute with Id `disputeId` + * @dev Accept a dispute with Id `disputeId` * @param disputeId Id of the dispute to be accepted * @param tokensSlash Amount of tokens to slash from the indexer */ @@ -225,8 +236,8 @@ contract DisputeManager is } /** - * @dev The arbitrator draws dispute. - * @notice Ignore a dispute with Id `disputeId` + * @notice The arbitrator draws dispute. + * @dev Ignore a dispute with Id `disputeId` * @param disputeId Id of the dispute to be disregarded */ function drawDispute(bytes32 disputeId) external override onlyArbitrator onlyPendingDispute(disputeId) { @@ -245,9 +256,9 @@ contract DisputeManager is } /** - * @dev Once the dispute period ends, if the disput status remains Pending, + * @notice Once the dispute period ends, if the disput status remains Pending, * the fisherman can cancel the dispute and get back their initial deposit. - * @notice Cancel a dispute with Id `disputeId` + * @dev Cancel a dispute with Id `disputeId` * @param disputeId Id of the dispute to be cancelled */ function cancelDispute(bytes32 disputeId) external override onlyFisherman(disputeId) onlyPendingDispute(disputeId) { @@ -267,8 +278,8 @@ contract DisputeManager is } /** - * @dev Set the arbitrator address. - * @notice Update the arbitrator to `_arbitrator` + * @notice Set the arbitrator address. + * @dev Update the arbitrator to `_arbitrator` * @param arbitrator The address of the arbitration contract or party */ function setArbitrator(address arbitrator) external override onlyOwner { @@ -276,8 +287,8 @@ contract DisputeManager is } /** - * @dev Set the dispute period. - * @notice Update the dispute period to `_disputePeriod` in seconds + * @notice Set the dispute period. + * @dev Update the dispute period to `_disputePeriod` in seconds * @param disputePeriod Dispute period in seconds */ function setDisputePeriod(uint64 disputePeriod) external override onlyOwner { @@ -285,8 +296,8 @@ contract DisputeManager is } /** - * @dev Set the minimum deposit required to create a dispute. - * @notice Update the minimum deposit to `_minimumDeposit` Graph Tokens + * @notice Set the minimum deposit required to create a dispute. + * @dev Update the minimum deposit to `_minimumDeposit` Graph Tokens * @param minimumDeposit The minimum deposit in Graph Tokens */ function setMinimumDeposit(uint256 minimumDeposit) external override onlyOwner { @@ -294,8 +305,8 @@ contract DisputeManager is } /** - * @dev Set the percent reward that the fisherman gets when slashing occurs. - * @notice Update the reward percentage to `_percentage` + * @notice Set the percent reward that the fisherman gets when slashing occurs. + * @dev Update the reward percentage to `_percentage` * @param fishermanRewardCut_ Reward as a percentage of indexer stake */ function setFishermanRewardCut(uint32 fishermanRewardCut_) external override onlyOwner { @@ -303,7 +314,7 @@ contract DisputeManager is } /** - * @dev Set the maximum percentage that can be used for slashing indexers. + * @notice Set the maximum percentage that can be used for slashing indexers. * @param maxSlashingCut_ Max percentage slashing for disputes */ function setMaxSlashingCut(uint32 maxSlashingCut_) external override onlyOwner { @@ -311,8 +322,8 @@ contract DisputeManager is } /** - * @dev Set the subgraph service address. - * @notice Update the subgraph service to `_subgraphService` + * @notice Set the subgraph service address. + * @dev Update the subgraph service to `_subgraphService` * @param subgraphService The address of the subgraph service contract */ function setSubgraphService(address subgraphService) external override onlyOwner { @@ -320,10 +331,10 @@ contract DisputeManager is } /** - * @dev Get the message hash that a indexer used to sign the receipt. + * @notice Get the message hash that a indexer used to sign the receipt. * Encodes a receipt using a domain separator, as described on * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification. - * @notice Return the message hash used to sign the receipt + * @dev Return the message hash used to sign the receipt * @param receipt Receipt returned by indexer and submitted by fisherman * @return Message hash used to sign the receipt */ @@ -332,7 +343,7 @@ contract DisputeManager is } /** - * @dev Get the verifier cut. + * @notice Get the verifier cut. * @return Verifier cut in percentage (ppm) */ function getVerifierCut() external view override returns (uint32) { @@ -340,13 +351,18 @@ contract DisputeManager is } /** - * @dev Get the dispute period. + * @notice Get the dispute period. * @return Dispute period in seconds */ function getDisputePeriod() external view override returns (uint64) { return disputePeriod; } + /** + * @notice Checks if two attestations are conflicting. + * @param attestation1 The first attestation + * @param attestation2 The second attestation + */ function areConflictingAttestations( Attestation.State memory attestation1, Attestation.State memory attestation2 @@ -355,8 +371,8 @@ contract DisputeManager is } /** - * @dev The arbitrator rejects a dispute as being invalid. - * @notice Reject a dispute with Id `disputeId` + * @notice The arbitrator rejects a dispute as being invalid. + * @dev Reject a dispute with Id `disputeId` * @param disputeId Id of the dispute to be rejected */ function rejectDispute(bytes32 disputeId) public override onlyArbitrator onlyPendingDispute(disputeId) { @@ -378,7 +394,7 @@ contract DisputeManager is } /** - * @dev Returns the indexer that signed an attestation. + * @notice Returns the indexer that signed an attestation. * @param attestation Attestation * @return indexer address */ @@ -396,8 +412,8 @@ contract DisputeManager is } /** - * @dev Return whether a dispute exists or not. - * @notice Return if dispute with Id `disputeId` exists + * @notice Return whether a dispute exists or not. + * @dev Return if dispute with Id `disputeId` exists * @param disputeId True if dispute already exists */ function isDisputeCreated(bytes32 disputeId) public view override returns (bool) { @@ -405,7 +421,7 @@ contract DisputeManager is } /** - * @dev Create a query dispute passing the parsed attestation. + * @notice Create a query dispute passing the parsed attestation. * To be used in createQueryDispute() and createQueryDisputeConflict() * to avoid calling parseAttestation() multiple times * `attestationData` is only passed to be emitted @@ -466,7 +482,7 @@ contract DisputeManager is } /** - * @dev Create indexing dispute internal function. + * @notice Create indexing dispute internal function. * @param _fisherman The challenger creating the dispute * @param _deposit Amount of tokens staked as deposit * @param _allocationId Allocation disputed @@ -508,7 +524,7 @@ contract DisputeManager is } /** - * @dev Resolve the conflicting dispute if there is any for the one passed to this function. + * @notice Resolve the conflicting dispute if there is any for the one passed to this function. * @param _dispute Dispute * @return True if resolved */ @@ -523,7 +539,7 @@ contract DisputeManager is } /** - * @dev Cancel the conflicting dispute if there is any for the one passed to this function. + * @notice Cancel the conflicting dispute if there is any for the one passed to this function. * @param _dispute Dispute * @return True if cancelled */ @@ -538,7 +554,7 @@ contract DisputeManager is } /** - * @dev Pull deposit from submitter account. + * @notice Pull deposit from submitter account. * @param _deposit Amount of tokens to deposit */ function _pullSubmitterDeposit(uint256 _deposit) private { @@ -550,7 +566,7 @@ contract DisputeManager is } /** - * @dev Make the subgraph service contract slash the indexer and reward the challenger. + * @notice Make the subgraph service contract slash the indexer and reward the challenger. * Give the challenger a reward equal to the fishermanRewardPercentage of slashed amount * @param _indexer Address of the indexer * @param _tokensSlash Amount of tokens to slash from the indexer @@ -578,8 +594,8 @@ contract DisputeManager is } /** - * @dev Internal: Set the arbitrator address. - * @notice Update the arbitrator to `_arbitrator` + * @notice Internal: Set the arbitrator address. + * @dev Update the arbitrator to `_arbitrator` * @param _arbitrator The address of the arbitration contract or party */ function _setArbitrator(address _arbitrator) private { @@ -589,8 +605,8 @@ contract DisputeManager is } /** - * @dev Internal: Set the dispute period. - * @notice Update the dispute period to `_disputePeriod` in seconds + * @notice Internal: Set the dispute period. + * @dev Update the dispute period to `_disputePeriod` in seconds * @param _disputePeriod Dispute period in seconds */ function _setDisputePeriod(uint64 _disputePeriod) private { @@ -600,8 +616,8 @@ contract DisputeManager is } /** - * @dev Internal: Set the minimum deposit required to create a dispute. - * @notice Update the minimum deposit to `_minimumDeposit` Graph Tokens + * @notice Internal: Set the minimum deposit required to create a dispute. + * @dev Update the minimum deposit to `_minimumDeposit` Graph Tokens * @param _minimumDeposit The minimum deposit in Graph Tokens */ function _setMinimumDeposit(uint256 _minimumDeposit) private { @@ -611,8 +627,8 @@ contract DisputeManager is } /** - * @dev Internal: Set the percent reward that the fisherman gets when slashing occurs. - * @notice Update the reward percentage to `_percentage` + * @notice Internal: Set the percent reward that the fisherman gets when slashing occurs. + * @dev Update the reward percentage to `_percentage` * @param _fishermanRewardCut Reward as a percentage of indexer stake */ function _setFishermanRewardCut(uint32 _fishermanRewardCut) private { @@ -623,7 +639,7 @@ contract DisputeManager is } /** - * @dev Internal: Set the maximum percentage that can be used for slashing indexers. + * @notice Internal: Set the maximum percentage that can be used for slashing indexers. * @param _maxSlashingCut Max percentage slashing for disputes */ function _setMaxSlashingCut(uint32 _maxSlashingCut) private { @@ -634,8 +650,8 @@ contract DisputeManager is } /** - * @dev Internal: Set the subgraph service address. - * @notice Update the subgraph service to `_subgraphService` + * @notice Internal: Set the subgraph service address. + * @dev Update the subgraph service to `_subgraphService` * @param _subgraphService The address of the subgraph service contract */ function _setSubgraphService(address _subgraphService) private { @@ -645,7 +661,7 @@ contract DisputeManager is } /** - * @dev Returns whether the dispute is for a conflicting attestation or not. + * @notice Returns whether the dispute is for a conflicting attestation or not. * @param _dispute Dispute * @return True conflicting attestation dispute */ diff --git a/packages/subgraph-service/contracts/DisputeManagerStorage.sol b/packages/subgraph-service/contracts/DisputeManagerStorage.sol index bf2b368d6..19e217f12 100644 --- a/packages/subgraph-service/contracts/DisputeManagerStorage.sol +++ b/packages/subgraph-service/contracts/DisputeManagerStorage.sol @@ -6,28 +6,24 @@ import { IDisputeManager } from "./interfaces/IDisputeManager.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; abstract contract DisputeManagerV1Storage { - // -- State -- - + /// @notice The Subgraph Service contract address ISubgraphService public subgraphService; - // The arbitrator is solely in control of arbitrating disputes + /// @notice The arbitrator is solely in control of arbitrating disputes address public arbitrator; - // dispute period in seconds + /// @notice dispute period in seconds uint64 public disputePeriod; - // Minimum deposit required to create a Dispute + /// @notice Minimum deposit required to create a Dispute uint256 public minimumDeposit; - // Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute - // Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) + /// @notice Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM. uint32 public fishermanRewardCut; - // Maximum percentage of indexer stake that can be slashed on a dispute - // Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%) + /// @notice Maximum percentage of indexer stake that can be slashed on a dispute. In PPM. uint32 public maxSlashingCut; - // Disputes created : disputeID => Dispute - // disputeID - check creation functions to see how disputeID is built - mapping(bytes32 disputeID => IDisputeManager.Dispute dispute) public disputes; + /// @notice List of disputes created + mapping(bytes32 disputeId => IDisputeManager.Dispute dispute) public disputes; } diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index f39beed4c..f6fa952e5 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -10,7 +10,6 @@ import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/O import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { DataServicePausableUpgradeable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol"; import { DataService } from "@graphprotocol/horizon/contracts/data-service/DataService.sol"; -import { DataServiceRescuable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceRescuable.sol"; import { DataServiceFees } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol"; import { Directory } from "./utilities/Directory.sol"; import { AllocationManager } from "./utilities/AllocationManager.sol"; @@ -20,13 +19,11 @@ import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol" import { Allocation } from "./libraries/Allocation.sol"; import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; -// TODO: contract needs to be upgradeable contract SubgraphService is Initializable, OwnableUpgradeable, DataService, DataServicePausableUpgradeable, - DataServiceRescuable, DataServiceFees, Directory, AllocationManager, @@ -37,13 +34,25 @@ contract SubgraphService is using PPMMath for uint256; using Allocation for mapping(address => Allocation.State); + /** + * @notice Checks that an indexer is registered + * @param indexer The address of the indexer + */ modifier onlyRegisteredIndexer(address indexer) { require(indexers[indexer].registeredAt != 0, SubgraphServiceIndexerNotRegistered(indexer)); _; } /** - * @dev Strict delegation ratio not enforced. + * @notice Checks that a provision is valid + * @dev A valid provision is defined as one that: + * - has at least the minimum amount of tokens requiered by the subgraph service + * - has a thawing period at least equal to {DisputeManager.disputePeriod} + * - has a verifier cut at most equal to {DisputeManager.verifierCut} + * + * Note that no delegation ratio is enforced here. + * + * @param indexer The address of the indexer */ modifier onlyValidProvision(address indexer) override { _checkProvisionTokens(indexer); @@ -51,15 +60,28 @@ contract SubgraphService is _; } + /** + * @notice Constructor for the SubgraphService contract + * @dev DataService and Directory constructors set a bunch of immutable variables + * @param graphController The address of the Graph Controller contract + * @param disputeManager The address of the DisputeManager contract + * @param tapCollector The address of the TAPCollector contract + * @param curation The address of the Curation contract + */ constructor( address graphController, address disputeManager, - address tapVerifier, + address tapCollector, address curation - ) DataService(graphController) Directory(address(this), tapVerifier, disputeManager, curation) { + ) DataService(graphController) Directory(address(this), tapCollector, disputeManager, curation) { _disableInitializers(); } + /** + * @notice See {ISubgraphService.initialize} + * @dev The thawingPeriod and verifierCut ranges are not set here because they are variables + * on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges. + */ function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external override initializer { __Ownable_init(msg.sender); __DataService_init(); @@ -70,6 +92,24 @@ contract SubgraphService is _setDelegationRatioRange(type(uint32).min, maximumDelegationRatio); } + /** + * @notice + * @dev Implements {IDataService.register} + * + * Requirements: + * - The indexer must not be already registered + * - The URL must not be empty + * - The provision must be valid according to the subgraph service rules + * + * Emits a {ServiceProviderRegistered} event + * + * @param indexer The address of the indexer to register + * @param data Encoded registration data: + * - address `url`: The URL of the indexer + * - string `geohash`: The geohash of the indexer + * - address `rewardsDestination`: The address where the indexer wants to receive indexing rewards. + * Use zero address for automatic reprovisioning to the subgraph service. + */ function register( address indexer, bytes calldata data @@ -91,6 +131,19 @@ contract SubgraphService is emit ServiceProviderRegistered(indexer); } + /** + * @notice Accept staged parameters in the provision of a service provider + * @dev Implements {IDataService-acceptProvision} + * + * Requirements: + * - The indexer must be registered + * - Must have previously staged provision parameters, using {IHorizonStaking-setProvisionParameters} + * - The new provision parameters must be valid according to the subgraph service rules + * + * Emits a {ProvisionAccepted} event + * + * @param indexer The address of the indexer to accept the provision for + */ function acceptProvision( address indexer, bytes calldata @@ -100,6 +153,30 @@ contract SubgraphService is emit ProvisionAccepted(indexer); } + /** + * @notice Allocates tokens to subgraph deployment, manifesting the indexer's commitment to index it + * @dev This is the equivalent of the `allocate` function in the legacy Staking contract. + * + * Requirements: + * - The indexer must be registered + * - The provision must be valid according to the subgraph service rules + * - Allocation id cannot be zero + * - Allocation id cannot be reused from the legacy staking contract + * - The indexer must have enough available tokens to allocate + * + * The `allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`. + * + * See {AllocationManager-allocate} for more details. + * + * Emits {ServiceStarted} and {AllocationCreated} events + * + * @param indexer The address of the indexer + * @param data Encoded data: + * - bytes32 `subgraphDeploymentId`: The id of the subgraph deployment + * - uint256 `tokens`: The amount of tokens to allocate + * - address `allocationId`: The id of the allocation + * - bytes `allocationProof`: Signed proof of the allocation id address ownership + */ function startService( address indexer, bytes calldata data @@ -119,6 +196,25 @@ contract SubgraphService is emit ServiceStarted(indexer); } + /** + * @notice Close an allocation, indicating that the indexer has stopped indexing the subgraph deployment + * @dev This is the equivalent of the `closeAllocation` function in the legacy Staking contract. + * There are a few notable differences with the legacy function: + * - allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically + * without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated + * tokens for other purposes. + * - No POI is required to close an allocation. Indexers should present POIs to collect indexing rewards using {collect}. + * + * Requirements: + * - The indexer must be registered + * - Allocation must exist and be open + * + * Emits {ServiceStopped} and {AllocationClosed} events + * + * @param indexer The address of the indexer + * @param data Encoded data: + * - address `allocationId`: The id of the allocation + */ function stopService( address indexer, bytes calldata data @@ -128,20 +224,27 @@ contract SubgraphService is emit ServiceStopped(indexer); } - function resizeAllocation( - address indexer, - address allocationId, - uint256 tokens - ) - external - onlyProvisionAuthorized(indexer) - onlyValidProvision(indexer) - onlyRegisteredIndexer(indexer) - whenNotPaused - { - _resizeAllocation(allocationId, tokens, maximumDelegationRatio); - } - + /** + * @notice Collects payment for the service provided by the indexer + * Allows collecting different types of payments such as query fees and indexing rewards. + * It uses Graph Horizon payments protocol to process payments. + * Reverts if the payment type is not supported. + * @dev This function is the equivalent of the `collect` function for query fees and the `closeAllocation` function + * for indexing rewards in the legacy Staking contract. + * + * Requirements: + * - The indexer must be registered + * - The provision must be valid according to the subgraph service rules + * + * Emits a {ServicePaymentCollected} event. Emits payment type specific events. + * + * For query fees, see {SubgraphService-_collectQueryFees} for more details. + * For indexing rewards, see {AllocationManager-_collectIndexingRewards} for more details. + * + * @param indexer The address of the indexer + * @param paymentType The type of payment to collect as defined in {IGraphPayments} + * @param data Encoded data to fulfill the payment. The structure of the data depends on the payment type. See above. + */ function collect( address indexer, IGraphPayments.PaymentTypes paymentType, @@ -160,12 +263,46 @@ contract SubgraphService is emit ServicePaymentCollected(indexer, paymentType, paymentCollected); } + /** + * @notice Slash an indexer + * @dev Slashing is delegated to the {DisputeManager} contract which is the only one that can call this + * function. + * + * See {IHorizonStaking-slash} for more details. + * + * Emits a {ServiceProviderSlashed} event. + * + * @param indexer The address of the indexer to be slashed + * @param data Encoded data: + * - uint256 `tokens`: The amount of tokens to slash + * - uint256 `reward`: The amount of tokens to reward the slasher + */ function slash(address indexer, bytes calldata data) external override onlyDisputeManager whenNotPaused { (uint256 tokens, uint256 reward) = abi.decode(data, (uint256, uint256)); _graphStaking().slash(indexer, tokens, reward, address(_disputeManager())); emit ServiceProviderSlashed(indexer, tokens); } + /** + * @notice See {ISubgraphService.resizeAllocation} + */ + function resizeAllocation( + address indexer, + address allocationId, + uint256 tokens + ) + external + onlyProvisionAuthorized(indexer) + onlyValidProvision(indexer) + onlyRegisteredIndexer(indexer) + whenNotPaused + { + _resizeAllocation(allocationId, tokens, maximumDelegationRatio); + } + + /** + * @notice See {ISubgraphService.migrateLegacyAllocation} + */ function migrateLegacyAllocation( address indexer, address allocationId, @@ -174,14 +311,55 @@ contract SubgraphService is _migrateLegacyAllocation(indexer, allocationId, subgraphDeploymentID); } + /** + * @notice See {ISubgraphService.setPauseGuardian} + */ function setPauseGuardian(address pauseGuardian, bool allowed) external override onlyOwner { _setPauseGuardian(pauseGuardian, allowed); } + /** + * @notice See {ISubgraphService.setRewardsDestination} + */ + function setRewardsDestination(address rewardsDestination) external { + _setRewardsDestination(msg.sender, rewardsDestination); + } + + /** + * @notice See {ISubgraphService.setMinimumProvisionTokens} + */ + function setMinimumProvisionTokens(uint256 minimumProvisionTokens) external override onlyOwner { + _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max); + } + + /** + * @notice See {ISubgraphService.setMaximumDelegationRatio} + */ + function setMaximumDelegationRatio(uint32 maximumDelegationRatio) external override onlyOwner { + _setDelegationRatioRange(type(uint32).min, maximumDelegationRatio); + } + + /** + * @notice See {ISubgraphService.getAllocation} + */ function getAllocation(address allocationId) external view override returns (Allocation.State memory) { return allocations[allocationId]; } + /** + * @notice Get allocation data to calculate rewards issuance + * @dev Implements {IRewardsIssuer.getAllocationData} + * @dev Note that this is slightly different than {getAllocation}. It returns an + * unstructured subset of the allocation data, which is the minimum required to mint rewards. + * + * Should only be used by the {RewardsManager}. + * + * @param allocationId The allocation Id + * @return indexer The indexer address + * @return subgraphDeploymentId Subgraph deployment id for the allocation + * @return tokens Amount of allocated tokens + * @return accRewardsPerAllocatedToken Rewards snapshot + */ function getAllocationData( address allocationId ) external view override returns (address, bytes32, uint256, uint256) { @@ -194,25 +372,67 @@ contract SubgraphService is ); } + /** + * @notice See {ISubgraphService.getLegacyAllocation} + */ function getLegacyAllocation(address allocationId) external view override returns (LegacyAllocation.State memory) { return legacyAllocations[allocationId]; } + /** + * @notice See {ISubgraphService.encodeAllocationProof} + */ function encodeAllocationProof(address indexer, address allocationId) external view override returns (bytes32) { return _encodeAllocationProof(indexer, allocationId); } // -- Data service parameter getters -- + /** + * @notice Getter for the accepted thawing period range for provisions + * @dev This override ensures {ProvisionManager} uses the thawing period from the {DisputeManager} + * @return min The minimum thawing period which is defined by {DisputeManager-getDisputePeriod} + * @return max The maximum is unbounded + */ function _getThawingPeriodRange() internal view override returns (uint64 min, uint64 max) { uint64 disputePeriod = _disputeManager().getDisputePeriod(); return (disputePeriod, type(uint64).max); } + /** + * @notice Getter for the accepted verifier cut range for provisions + * @return min The minimum verifier cut which is defined by {DisputeManager-getVerifierCut} + * @return max The maximum is unbounded + */ function _getVerifierCutRange() internal view override returns (uint32 min, uint32 max) { uint32 verifierCut = _disputeManager().getVerifierCut(); return (verifierCut, type(uint32).max); } + /** + * @notice Collect query fees + * Stake equal to the amount being collected times the `stakeToFeesRatio` is locked into a stake claim. + * This claim can be released at a later stage once expired. + * + * It's important to note that before collecting this function will attempt to release any expired stake claims. + * This could lead to an out of gas error if there are too many expired claims. In that case, the indexer will need to + * manually release the claims, see {IDataServiceFees-releaseStake}, before attempting to collect again. + * + * @dev This function is the equivalent of the legacy `collect` function for query fees. + * @dev Uses the {TAPCollector} to collect payment from Graph Horizon payments protocol. + * Fees are distributed to service provider and delegators by {GraphPayments}, though curators + * share is distributed by this function. + * + * Query fees can be collected on closed allocations. + * + * Requirements: + * - Indexer must have enough available tokens to lock as economic security for fees + * + * Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released. + * Emits a {StakeClaimLocked} event. + * Emits a {QueryFeesCollected} event. + * + * @param _data Encoded data containing a signed RAV + */ function _collectQueryFees(bytes memory _data) private returns (uint256 feesCollected) { ITAPCollector.SignedRAV memory signedRav = abi.decode(_data, (ITAPCollector.SignedRAV)); address indexer = signedRav.rav.serviceProvider; @@ -264,6 +484,11 @@ contract SubgraphService is return tokensCollected; } + /** + * @notice Gets the payment cuts for query fees + * Checks if the subgraph is curated and adjusts the curation cut accordingly + * @param _subgraphDeploymentId The subgraph deployment id + */ function _getQueryFeePaymentCuts(bytes32 _subgraphDeploymentId) private view returns (PaymentCuts memory) { PaymentCuts memory queryFeePaymentCuts = paymentCuts[IGraphPayments.PaymentTypes.QueryFee]; diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol index 9d2ae9966..50e72b417 100644 --- a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -8,8 +8,7 @@ abstract contract SubgraphServiceV1Storage { /// @notice Service providers registered in the data service mapping(address indexer => ISubgraphService.Indexer details) public indexers; - // -- Fees -- - // multiplier for how many tokens back collected query fees + ///@notice Multiplier for how many tokens back collected query fees uint256 public stakeToFeesRatio; /// @notice The fees cut taken by the subgraph service diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 27bd0418f..0da818cfa 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -5,14 +5,15 @@ pragma solidity 0.8.26; import { Attestation } from "../libraries/Attestation.sol"; interface IDisputeManager { - // -- Dispute -- + /// @notice Types of disputes that can be created enum DisputeType { Null, IndexingDispute, QueryDispute } + /// @notice Status of a dispute enum DisputeStatus { Null, Accepted, @@ -22,23 +23,58 @@ interface IDisputeManager { Cancelled } - // Disputes contain info necessary for the Arbitrator to verify and resolve + /// @notice Disputes contain info necessary for the Arbitrator to verify and resolve struct Dispute { + // Indexer that is being disputed address indexer; + // Fisherman that created the dispute address fisherman; + // Amount of tokens deposited by the fisherman uint256 deposit; + // Link to a related dispute, used when creating dispute via conflicting attestations bytes32 relatedDisputeId; + // Type of dispute DisputeType disputeType; + // Status of the dispute DisputeStatus status; + // Timestamp when the dispute was created uint256 createdAt; } - // -- Events -- + /** + * @notice Emitted when arbitrator is set. + * @param arbitrator The address of the arbitrator. + */ event ArbitratorSet(address indexed arbitrator); + + /** + * @notice Emitted when dispute period is set. + * @param disputePeriod The dispute period in seconds. + */ event DisputePeriodSet(uint64 disputePeriod); + + /** + * @notice Emitted when minimum deposit is set. + * @param minimumDeposit The minimum deposit required to create a dispute. + */ event MinimumDepositSet(uint256 minimumDeposit); + + /** + * @notice Emitted when max slashing cut is set. + * @param maxSlashingCut The maximum slashing cut that can be set. + */ event MaxSlashingCutSet(uint32 maxSlashingCut); + + /** + * @notice Emitted when fisherman reward cut is set. + * @param fishermanRewardCut The fisherman reward cut. + */ event FishermanRewardCutSet(uint32 fishermanRewardCut); + + /** + * @notice Emitted when subgraph service is set. + * @param subgraphService The address of the subgraph service. + */ event SubgraphServiceSet(address indexed subgraphService); /** diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 868e63fca..d4b51999b 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -7,18 +7,40 @@ import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGra import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; +/** + * @title Interface for the {SubgraphService} contract + * @dev This interface extends {IDataServiceFees} and {IDataService}. + * @notice The Subgraph Service is a data service built on top of Graph Horizon that supports the use case of + * subgraph indexing and querying. The {SubgraphService} contract implements the flows described in the Data + * Service framework to allow indexers to register as subgraph service providers, create allocations to signal + * their commitment to index a subgraph, and collect fees for indexing and querying services. + */ interface ISubgraphService is IDataServiceFees { + /// @notice Contains details for each indexer struct Indexer { + // Timestamp when the indexer registered uint256 registeredAt; + // The URL where the indexer can be reached at for queries string url; + // The indexer's geo location, expressed as a geo hash string geoHash; } + /// @notice Payment cut definitions for each payment type struct PaymentCuts { + // The cut the service provider takes from the payment uint128 serviceCut; + // The cut curators take from the payment uint128 curationCut; } + /** + * @notice Emitted when a subgraph service collects query fees from Graph Payments + * @param serviceProvider The address of the service provider + * @param tokensCollected The amount of tokens collected + * @param tokensCurators The amount of tokens curators receive + * @param tokensSubgraphService The amount of tokens the subgraph service receives + */ event QueryFeesCollected( address indexed serviceProvider, uint256 tokensCollected, @@ -26,22 +48,116 @@ interface ISubgraphService is IDataServiceFees { uint256 tokensSubgraphService ); + /** + * @notice Thrown when an indexer tries to register with an empty URL + */ error SubgraphServiceEmptyUrl(); - error SubgraphServiceInvalidPaymentType(IGraphPayments.PaymentTypes feeType); + + /** + * @notice Thrown when an indexer tries to register but they are already registered + */ error SubgraphServiceIndexerAlreadyRegistered(); + + /** + * @notice Thrown when an indexer tries to perform an operation but they are not registered + * @param indexer The address of the indexer that is not registered + */ error SubgraphServiceIndexerNotRegistered(address indexer); + + /** + * @notice Thrown when an indexer tries to collect fees for an unsupported payment type + * @param paymentType The payment type that is not supported + */ + error SubgraphServiceInvalidPaymentType(IGraphPayments.PaymentTypes paymentType); + + /** + * @notice Thrown when the contract GRT balance is inconsistent with the payment amount collected + * from Graph Payments + * @param balanceBefore The contract GRT balance before the collection + * @param balanceAfter The contract GRT balance after the collection + * @param tokensCollected The amount of tokens collected + */ error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensCollected); + /** + * @notice Initialize the contract + * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation + * @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation + */ function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external; + + /** + * @notice Change the amount of tokens in an allocation + * @dev Requirements: + * - The indexer must be registered + * - The provision must be valid according to the subgraph service rules + * - `tokens` must be different from the current allocation size + * - The indexer must have enough available tokens to allocate if they are upsizing the allocation + * + * Emits a {AllocationResized} event. + * + * See {AllocationManager-_resizeAllocation} for more details. + * + * @param indexer The address of the indexer + * @param allocationId The id of the allocation + * @param tokens The new amount of tokens in the allocation + */ function resizeAllocation(address indexer, address allocationId, uint256 tokens) external; - function migrateLegacyAllocation(address indexer, address allocationId, bytes32 subgraphDeploymentID) external; + /** + * @notice Imports a legacy allocation id into the subgraph service + * This is a governor only action that is required to prevent indexers from re-using allocation ids from the + * legacy staking contract. + * @param indexer The address of the indexer + * @param allocationId The id of the allocation + * @param subgraphDeploymentId The id of the subgraph deployment + */ + function migrateLegacyAllocation(address indexer, address allocationId, bytes32 subgraphDeploymentId) external; + /** + * @notice Sets a pause guardian + * @param pauseGuardian The address of the pause guardian + * @param allowed True if the pause guardian is allowed to pause the contract, false otherwise + */ function setPauseGuardian(address pauseGuardian, bool allowed) external; + /** + * @notice Sets the minimum amount of provisioned tokens required to create an allocation + * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation + */ + function setMinimumProvisionTokens(uint256 minimumProvisionTokens) external; + + /** + * @notice Sets the maximum delegation ratio allowed for an allocation + * @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation + */ + function setMaximumDelegationRatio(uint32 maximumDelegationRatio) external; + + /** + * @notice Sets the rewards destination for an indexer to receive indexing rewards + * @dev Emits a {RewardsDestinationSet} event + * @param rewardsDestination The address where indexing rewards should be sent + */ + function setRewardsDestination(address rewardsDestination) external; + + /** + * @notice Gets the details of an allocation + * For legacy allocations use {getLegacyAllocation} + * @param allocationId The id of the allocation + */ function getAllocation(address allocationId) external view returns (Allocation.State memory); + /** + * @notice Gets the details of a legacy allocation + * For non-legacy allocations use {getAllocation} + * @param allocationId The id of the allocation + */ function getLegacyAllocation(address allocationId) external view returns (LegacyAllocation.State memory); + /** + * @notice Encodes the allocation proof for EIP712 signing + * @param indexer The address of the indexer + * @param allocationId The id of the allocation + */ function encodeAllocationProof(address indexer, address allocationId) external view returns (bytes32); } diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index 34c876135..0df8f6e21 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -1,25 +1,66 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; +/** + * @title Allocation library + * @notice A library to handle Allocations. + */ library Allocation { using Allocation for State; + /** + * @notice Allocation details + */ struct State { + // Indexer that owns the allocation address indexer; + // Subgraph deployment id the allocation is for bytes32 subgraphDeploymentId; + // Number of tokens allocated uint256 tokens; + // Timestamp when the allocation was created uint256 createdAt; + // Timestamp when the allocation was closed uint256 closedAt; + // Timestamp when the last POI was presented uint256 lastPOIPresentedAt; + // Accumulated rewards per allocated token uint256 accRewardsPerAllocatedToken; + // Accumulated rewards per allocated token that are pending to be claimed + // due to an allocation resize uint256 accRewardsPending; } + /** + * @notice Thrown when attempting to create an allocation with an existing id + * @param allocationId The allocation id + */ error AllocationAlreadyExists(address allocationId); + + /** + * @notice Thrown when trying to perform an operation on a non-existent allocation + * @param allocationId The allocation id + */ error AllocationDoesNotExist(address allocationId); + + /** + * @notice Thrown when trying to perform an operation on a closed allocation + * @param allocationId The allocation id + * @param closedAt The timestamp when the allocation was closed + */ error AllocationClosed(address allocationId, uint256 closedAt); - error AllocationZeroTokens(address allocationId); + /** + * @notice Create a new allocation + * @dev Requirements: + * - The allocation must not exist + * @param self The allocation list mapping + * @param indexer The indexer that owns the allocation + * @param allocationId The allocation id + * @param subgraphDeploymentId The subgraph deployment id the allocation is for + * @param tokens The number of tokens allocated + * @param accRewardsPerAllocatedToken The initial accumulated rewards per allocated token + */ function create( mapping(address => State) storage self, address indexer, @@ -46,8 +87,14 @@ library Allocation { return allocation; } - // Update POI timestamp and take rewards snapshot - // For stale POIs this ensures the rewards are not collected with the next valid POI + /** + * @notice Present a POI for an allocation + * @dev It only updates the last POI presented timestamp. + * Requirements: + * - The allocation must be open + * @param self The allocation list mapping + * @param allocationId The allocation id + */ function presentPOI(mapping(address => State) storage self, address allocationId) internal returns (State memory) { State storage allocation = _get(self, allocationId); require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); @@ -56,6 +103,14 @@ library Allocation { return allocation; } + /** + * @notice Update the accumulated rewards per allocated token for an allocation + * @dev Requirements: + * - The allocation must be open + * @param self The allocation list mapping + * @param allocationId The allocation id + * @param accRewardsPerAllocatedToken The new accumulated rewards per allocated token + */ function snapshotRewards( mapping(address => State) storage self, address allocationId, @@ -68,6 +123,13 @@ library Allocation { return allocation; } + /** + * @notice Update the accumulated rewards pending to be claimed for an allocation + * @dev Requirements: + * - The allocation must be open + * @param self The allocation list mapping + * @param allocationId The allocation id + */ function clearPendingRewards( mapping(address => State) storage self, address allocationId @@ -79,6 +141,13 @@ library Allocation { return allocation; } + /** + * @notice Close an allocation + * @dev Requirements: + * - The allocation must be open + * @param self The allocation list mapping + * @param allocationId The allocation id + */ function close(mapping(address => State) storage self, address allocationId) internal returns (State memory) { State storage allocation = _get(self, allocationId); require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); @@ -87,22 +156,45 @@ library Allocation { return allocation; } + /** + * @notice Get an allocation + * @param self The allocation list mapping + * @param allocationId The allocation id + */ function get(mapping(address => State) storage self, address allocationId) internal view returns (State memory) { return _get(self, allocationId); } + /** + * @notice Checks if an allocation exists + * @param self The allocation + */ function exists(State memory self) internal pure returns (bool) { return self.createdAt != 0; } + /** + * @notice Checks if an allocation is open + * @param self The allocation + */ function isOpen(State memory self) internal pure returns (bool) { return self.exists() && self.closedAt == 0; } + /** + * @notice Checks if an allocation is closed + * @param self The allocation + */ function isAltruistic(State memory self) internal pure returns (bool) { return self.exists() && self.tokens == 0; } + /** + * @notice Get the allocation for an allocation id + * @dev Reverts if the allocation does not exist + * @param self The allocation list mapping + * @param allocationId The allocation id + */ function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) { State storage allocation = self[allocationId]; require(allocation.exists(), AllocationDoesNotExist(allocationId)); diff --git a/packages/subgraph-service/contracts/libraries/Attestation.sol b/packages/subgraph-service/contracts/libraries/Attestation.sol index b08802ec3..7926ca30a 100644 --- a/packages/subgraph-service/contracts/libraries/Attestation.sol +++ b/packages/subgraph-service/contracts/libraries/Attestation.sol @@ -1,15 +1,19 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; +/** + * @title Attestation library + * @notice A library to handle Attestation. + */ library Attestation { - // Receipt content sent from the service provider in response to request + /// @notice Receipt content sent from the service provider in response to request struct Receipt { bytes32 requestCID; bytes32 responseCID; bytes32 subgraphDeploymentId; } - // Attestation sent from the service provider in response to a request + /// @notice Attestation sent from the service provider in response to a request struct State { bytes32 requestCID; bytes32 responseCID; @@ -19,7 +23,7 @@ library Attestation { uint8 v; } - // Attestation size is the sum of the receipt (96) + signature (65) + /// @notice Attestation size is the sum of the receipt (96) + signature (65) uint256 private constant ATTESTATION_SIZE_BYTES = RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES; uint256 private constant RECEIPT_SIZE_BYTES = 96; diff --git a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol index 604a3bd78..81e6bcdcb 100644 --- a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol +++ b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol @@ -1,42 +1,93 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; +/** + * @title LegacyAllocation library + * @notice A library to handle legacy Allocations. + */ library LegacyAllocation { using LegacyAllocation for State; + /** + * @notice Legacy allocation details + * @dev Note that we are only storing the indexer and subgraphDeploymentId. The main point of tracking legacy allocations + * is to prevent them from being re used on the Subgraph Service. We don't need to store the rest of the allocation details. + */ struct State { address indexer; - bytes32 subgraphDeploymentID; + bytes32 subgraphDeploymentId; } + /** + * @notice Thrown when attempting to migrate an allocation with an existing id + * @param allocationId The allocation id + */ error LegacyAllocationExists(address allocationId); + + /** + * @notice Thrown when trying to get a non-existent allocation + * @param allocationId The allocation id + */ error LegacyAllocationDoesNotExist(address allocationId); + + /** + * @notice Thrown when trying to migrate an allocation that has already been migrated + * @param allocationId The allocation id + */ error LegacyAllocationAlreadyMigrated(address allocationId); + /** + * @notice Migrate a legacy allocation + * @dev Requirements: + * - The allocation must not exist + * @param self The legacy allocation list mapping + * @param indexer The indexer that owns the allocation + * @param allocationId The allocation id + * @param subgraphDeploymentId The subgraph deployment id the allocation is for + */ function migrate( mapping(address => State) storage self, address indexer, address allocationId, - bytes32 subgraphDeploymentID + bytes32 subgraphDeploymentId ) internal { require(!self[allocationId].exists(), LegacyAllocationExists(allocationId)); - State memory allocation = State({ indexer: indexer, subgraphDeploymentID: subgraphDeploymentID }); + State memory allocation = State({ indexer: indexer, subgraphDeploymentId: subgraphDeploymentId }); self[allocationId] = allocation; } + /** + * @notice Get a legacy allocation + * @param self The legacy allocation list mapping + * @param allocationId The allocation id + */ function get(mapping(address => State) storage self, address allocationId) internal view returns (State memory) { return _get(self, allocationId); } + /** + * @notice Revert if a legacy allocation exists + * @param self The legacy allocation list mapping + * @param allocationId The allocation id + */ function revertIfExists(mapping(address => State) storage self, address allocationId) internal view { require(!self[allocationId].exists(), LegacyAllocationExists(allocationId)); } + /** + * @notice Check if a legacy allocation exists + * @param self The legacy allocation + */ function exists(State memory self) internal pure returns (bool) { return self.indexer != address(0); } + /** + * @notice Get a legacy allocation + * @param self The legacy allocation list mapping + * @param allocationId The allocation id + */ function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) { State storage allocation = self[allocationId]; require(allocation.exists(), LegacyAllocationDoesNotExist(allocationId)); diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 5a4a9c58f..ec5d869a1 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -14,6 +14,12 @@ import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; +/** + * @title AllocationManager contract + * @notice A helper contract implementing allocation lifecycle management. + * Allows opening, resizing, and closing allocations, as well as collecting indexing rewards by presenting a Proof + * of Indexing (POI). + */ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, AllocationManagerV1Storage { using ProvisionTracker for mapping(address => uint256); using Allocation for mapping(address => Allocation.State); @@ -21,14 +27,16 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca using LegacyAllocation for mapping(address => LegacyAllocation.State); using PPMMath for uint256; - // -- Immutables -- + ///@dev EIP712 typehash for allocation proof bytes32 private immutable EIP712_ALLOCATION_PROOF_TYPEHASH = keccak256("AllocationIdProof(address indexer,address allocationId)"); /** - * @dev Emitted when `indexer` allocated `tokens` amount to `subgraphDeploymentId` - * during `epoch`. - * `allocationId` indexer derived address used to identify the allocation. + * @notice Emitted when an indexer creates an allocation + * @param indexer The address of the indexer + * @param allocationId The id of the allocation + * @param subgraphDeploymentId The id of the subgraph deployment + * @param tokens The amount of tokens allocated */ event AllocationCreated( address indexed indexer, @@ -37,6 +45,16 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca uint256 tokens ); + /** + * @notice Emitted when an indexer collects indexing rewards for an allocation + * @param indexer The address of the indexer + * @param allocationId The id of the allocation + * @param subgraphDeploymentId The id of the subgraph deployment + * @param tokensRewards The amount of tokens collected + * @param tokensIndexerRewards The amount of tokens collected for the indexer + * @param tokensDelegationRewards The amount of tokens collected for delegators + * @param poi The POI presented + */ event IndexingRewardsCollected( address indexed indexer, address indexed allocationId, @@ -47,6 +65,14 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca bytes32 poi ); + /** + * @notice Emitted when an indexer resizes an allocation + * @param indexer The address of the indexer + * @param allocationId The id of the allocation + * @param subgraphDeploymentId The id of the subgraph deployment + * @param newTokens The new amount of tokens allocated + * @param oldTokens The old amount of tokens allocated + */ event AllocationResized( address indexed indexer, address indexed allocationId, @@ -56,8 +82,11 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca ); /** - * @dev Emitted when `indexer` closes an allocation with id `allocationId`. - * An amount of `tokens` get unallocated from `subgraphDeploymentId`. + * @dev Emitted when an indexer closes an allocation + * @param indexer The address of the indexer + * @param allocationId The id of the allocation + * @param subgraphDeploymentId The id of the subgraph deployment + * @param tokens The amount of tokens allocated */ event AllocationClosed( address indexed indexer, @@ -66,37 +95,99 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca uint256 tokens ); + /** + * @notice Emitted when a legacy allocation is migrated into the subgraph service + * @param indexer The address of the indexer + * @param allocationId The id of the allocation + * @param subgraphDeploymentId The id of the subgraph deployment + */ event LegacyAllocationMigrated( address indexed indexer, address indexed allocationId, bytes32 indexed subgraphDeploymentId ); + /** + * @notice Emitted when an indexer sets a new indexing rewards destination + * @param indexer The address of the indexer + * @param rewardsDestination The address where indexing rewards should be sent + */ event RewardsDestinationSet(address indexed indexer, address indexed rewardsDestination); + /** + * @notice Thrown when an allocation proof is invalid + * Both `signer` and `allocationId` should match for a valid proof. + * @param signer The address that signed the proof + * @param allocationId The id of the allocation + */ error AllocationManagerInvalidAllocationProof(address signer, address allocationId); - error AllocationManagerInvalidAllocationId(); + + /** + * @notice Thrown when attempting to create an allocation with a zero allocation id + */ + error AllocationManagerInvalidZeroAllocationId(); + + /** + * @notice Thrown when attempting to create an allocation with zero tokens + * @param allocationId The id of the allocation + */ error AllocationManagerZeroTokensAllocation(address allocationId); + + /** + * @notice Thrown when attempting to collect indexing rewards on a closed allocationl + * @param allocationId The id of the allocation + */ error AllocationManagerAllocationClosed(address allocationId); + + /** + * @notice Thrown when attempting to resize an allocation with the same size + * @param allocationId The id of the allocation + * @param tokens The amount of tokens + */ error AllocationManagerAllocationSameSize(address allocationId, uint256 tokens); - error AllocationManagerInvalidZeroPOI(); + /** + * @notice Initializes the contract and parent contracts + */ function __AllocationManager_init(string memory name, string memory version) internal onlyInitializing { __EIP712_init(name, version); __AllocationManager_init_unchained(name, version); } + /** + * @notice Initializes the contract + */ function __AllocationManager_init_unchained(string memory name, string memory version) internal onlyInitializing {} - function setRewardsDestination(address rewardsDestination) external { - _setRewardsDestination(msg.sender, rewardsDestination); - } - + /** + * @notice Imports a legacy allocation id into the subgraph service + * This is a governor only action that is required to prevent indexers from re-using allocation ids from the + * legacy staking contract. + * @param _indexer The address of the indexer + * @param _allocationId The id of the allocation + * @param _subgraphDeploymentId The id of the subgraph deployment + */ function _migrateLegacyAllocation(address _indexer, address _allocationId, bytes32 _subgraphDeploymentId) internal { legacyAllocations.migrate(_indexer, _allocationId, _subgraphDeploymentId); emit LegacyAllocationMigrated(_indexer, _allocationId, _subgraphDeploymentId); } + /** + * @notice Create an allocation + * @dev The `_allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)` + * + * Requirements: + * - `_allocationId` must not be the zero address + * + * Emits a {AllocationCreated} event + * + * @param _indexer The address of the indexer + * @param _allocationId The id of the allocation to be created + * @param _subgraphDeploymentId The subgraph deployment Id + * @param _tokens The amount of tokens to allocate + * @param _allocationProof Signed proof of allocation id address ownership + * @param _delegationRatio The delegation ratio to consider when locking tokens + */ function _allocate( address _indexer, address _allocationId, @@ -105,23 +196,23 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca bytes memory _allocationProof, uint32 _delegationRatio ) internal returns (Allocation.State memory) { - require(_allocationId != address(0), AllocationManagerInvalidAllocationId()); + require(_allocationId != address(0), AllocationManagerInvalidZeroAllocationId()); _verifyAllocationProof(_indexer, _allocationId, _allocationProof); // Ensure allocation id is not reused - // need to check both subgraph service (on create()) and legacy allocations + // need to check both subgraph service (on allocations.create()) and legacy allocations legacyAllocations.revertIfExists(_allocationId); Allocation.State memory allocation = allocations.create( _indexer, _allocationId, _subgraphDeploymentId, _tokens, - // allos can be resized now, so we need to always take snapshot _graphRewardsManager().onSubgraphAllocationUpdate(_subgraphDeploymentId) ); // Check that the indexer has enough tokens available + // Note that the delegation ratio ensures overdelegation cannot be used allocationProvisionTracker.lock(_graphStaking(), _indexer, _tokens, _delegationRatio); // Update total allocated tokens for the subgraph deployment @@ -133,17 +224,32 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca return allocation; } - // Update POI timestamp and take rewards snapshot even for 0 rewards - // This ensures the rewards are actually skipped and not collected with the next valid POI + /** + * @notice Present a POI to collect indexing rewards for an allocation + * This function will mint indexing rewards using the {RewardsManager} and distribute them to the indexer and delegators. + * + * To qualify for indexing rewards: + * - POI must be non-zero + * - POI must not be stale, i.e: older than `maxPOIStaleness` + * - allocation must not be altruistic (allocated tokens = 0) + * + * Note that indexers are required to periodically (at most every `maxPOIStaleness`) present POIs to collect rewards. + * Rewards will not be issued to stale POIs, which means that indexers are advised to present a zero POI if they are + * unable to present a valid one to prevent being locked out of future rewards. + * + * Emits a {IndexingRewardsCollected} event. + * + * @param _data Encoded data containing: + * - address `allocationId`: The id of the allocation to collect rewards for + * - bytes32 `poi`: The POI being presented + */ function _collectIndexingRewards(bytes memory _data) internal returns (uint256) { (address allocationId, bytes32 poi) = abi.decode(_data, (address, bytes32)); Allocation.State memory allocation = allocations.get(allocationId); + require(allocation.isOpen(), AllocationManagerAllocationClosed(allocationId)); - // Mint indexing rewards. To qualify: - // - POI must be non-zero - // - POI must not be stale, i.e: older than maxPOIStaleness - // - allocation must not be altruistic (tokens = 0) + // Mint indexing rewards if all conditions are met uint256 timeSinceLastPOI = block.number - Math.max(allocation.createdAt, allocation.lastPOIPresentedAt); uint256 tokensRewards = (timeSinceLastPOI <= maxPOIStaleness && poi != bytes32(0) && !allocation.isAltruistic()) ? _graphRewardsManager().takeRewards(allocationId) @@ -173,7 +279,6 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca } // Distribute rewards to delegators - // TODO: remove the uint8 cast when PRs are merged uint256 delegatorCut = _graphStaking().getDelegationFeeCut( allocation.indexer, address(this), @@ -208,6 +313,21 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca return tokensRewards; } + /** + * @notice Resize an allocation + * @dev Will lock or release tokens in the provision tracker depending on the new allocation size. + * Rewards accrued but not issued before the resize will be accounted for as pending rewards. + * These will be paid out when the indexer presents a POI. + * + * Requirements: + * - `_tokens` must be different from the current allocation size + * + * Emits a {AllocationResized} event. + * + * @param _allocationId The id of the allocation to be resized + * @param _tokens The new amount of tokens to allocate + * @param _delegationRatio The delegation ratio to consider when locking tokens + */ function _resizeAllocation( address _allocationId, uint256 _tokens, @@ -245,6 +365,17 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca return allocations[_allocationId]; } + /** + * @notice Close an allocation + * Does not require presenting a POI, use {_collectIndexingRewards} to present a POI and collect rewards + * @dev Note that allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically + * without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated + * tokens for other purposes. + * + * Emits a {AllocationClosed} event + * + * @param _allocationId The id of the allocation to be closed + */ function _closeAllocation(address _allocationId) internal returns (Allocation.State memory) { Allocation.State memory allocation = allocations.get(_allocationId); @@ -266,28 +397,51 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca return allocations[_allocationId]; } + /** + * @notice Sets the rewards destination for an indexer to receive indexing rewards + * @dev Emits a {RewardsDestinationSet} event + * @param _rewardsDestination The address where indexing rewards should be sent + */ function _setRewardsDestination(address _indexer, address _rewardsDestination) internal { rewardsDestination[_indexer] = _rewardsDestination; emit RewardsDestinationSet(_indexer, _rewardsDestination); } + /** + * @notice Gets the details of an allocation + * @param _allocationId The id of the allocation + */ function _getAllocation(address _allocationId) internal view returns (Allocation.State memory) { return allocations.get(_allocationId); } + /** + * @notice Gets the details of a legacy allocation + * @param _allocationId The id of the legacy allocation + */ function _getLegacyAllocation(address _allocationId) internal view returns (LegacyAllocation.State memory) { return legacyAllocations.get(_allocationId); } - // -- Allocation Proof Verification -- - // Caller must prove that they own the private key for the allocationId address - // The proof is an EIP712 signed message of (indexer,allocationId) + /** + * @notice Verifies ownsership of an allocation id by verifying an EIP712 allocation proof + * @dev Requirements: + * - Signer must be the allocation id address + * @param _indexer The address of the indexer + * @param _allocationId The id of the allocation + * @param _proof The EIP712 proof, an EIP712 signed message of (indexer,allocationId) + */ function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) internal view { bytes32 digest = _encodeAllocationProof(_indexer, _allocationId); address signer = ECDSA.recover(digest, _proof); require(signer == _allocationId, AllocationManagerInvalidAllocationProof(signer, _allocationId)); } + /** + * @notice Encodes the allocation proof for EIP712 signing + * @param _indexer The address of the indexer + * @param _allocationId The id of the allocation + */ function _encodeAllocationProof(address _indexer, address _allocationId) internal view returns (bytes32) { return _hashTypedDataV4(keccak256(abi.encode(EIP712_ALLOCATION_PROOF_TYPEHASH, _indexer, _allocationId))); } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol index 700c0243c..da812f5c1 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol @@ -5,14 +5,19 @@ import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; abstract contract AllocationManagerV1Storage { + /// @notice Allocation details mapping(address allocationId => Allocation.State allocation) public allocations; - mapping(address indexer => uint256 tokens) public allocationProvisionTracker; + + /// @notice Legacy allocation details mapping(address allocationId => LegacyAllocation.State allocation) public legacyAllocations; - /// @notice Maximum amount of since last POI was presented to qualify for indexing rewards + /// @notice Tracks allocated tokens per indexer + mapping(address indexer => uint256 tokens) public allocationProvisionTracker; + + /// @notice Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards uint256 public maxPOIStaleness; - /// @dev Destination of accrued rewards + /// @notice Destination of accrued indexing rewards mapping(address indexer => address destination) public rewardsDestination; /// @notice Track total tokens allocated per subgraph deployment diff --git a/packages/subgraph-service/contracts/utilities/AttestationManager.sol b/packages/subgraph-service/contracts/utilities/AttestationManager.sol index c6ed521b6..63ebcf9a1 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManager.sol @@ -7,20 +7,39 @@ import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Attestation } from "../libraries/Attestation.sol"; +/** + * @title AttestationManager contract + * @notice A helper contract implementing attestation verification. + * Uses a custom implementation of EIP712 for backwards compatibility with attestations. + */ abstract contract AttestationManager is Initializable, AttestationManagerV1Storage { + /// @notice EIP712 type hash for Receipt struct bytes32 private constant RECEIPT_TYPE_HASH = keccak256("Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)"); + /// @notice EIP712 domain type hash bytes32 private constant DOMAIN_TYPE_HASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)"); + + /// @notice EIP712 domain name bytes32 private constant DOMAIN_NAME_HASH = keccak256("Graph Protocol"); + + /// @notice EIP712 domain version bytes32 private constant DOMAIN_VERSION_HASH = keccak256("0"); + + /// @notice EIP712 domain salt bytes32 private constant DOMAIN_SALT = 0xa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c2; + /** + * @dev Initialize the AttestationManager contract and parent contracts + */ function __AttestationManager_init() internal onlyInitializing { __AttestationManager_init_unchained(); } + /** + * @dev Initialize the AttestationManager contract + */ function __AttestationManager_init_unchained() internal onlyInitializing { _domainSeparator = keccak256( abi.encode( diff --git a/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol index cfb925f5b..5bf57af65 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.26; abstract contract AttestationManagerV1Storage { + /// @dev EIP712 domain separator bytes32 internal _domainSeparator; /// @dev Gap to allow adding variables in future upgrades diff --git a/packages/subgraph-service/contracts/utilities/Directory.sol b/packages/subgraph-service/contracts/utilities/Directory.sol index 8bfaee861..920a0ae5e 100644 --- a/packages/subgraph-service/contracts/utilities/Directory.sol +++ b/packages/subgraph-service/contracts/utilities/Directory.sol @@ -6,20 +6,51 @@ import { ISubgraphService } from "../interfaces/ISubgraphService.sol"; import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; +/** + * @title Directory contract + * @notice This contract is meant to be inherited by {SubgraphService} contract. + * It contains the addresses of the contracts that the contract interacts with. + * Uses immutable variables to minimize gas costs. + */ abstract contract Directory { + /// @notice The Subgraph Service contract address ISubgraphService private immutable SUBGRAPH_SERVICE; + + /// @notice The Dispute Manager contract address IDisputeManager private immutable DISPUTE_MANAGER; + + /// @notice The TAP Collector contract address + /// @dev Required to collect payments via Graph Horizon payments protocol ITAPCollector private immutable TAP_COLLECTOR; + + /// @notice The Curation contract address + /// @dev Required for curation fees distribution ICuration private immutable CURATION; + /** + * @notice Emitted when the Directory is initialized + * @param subgraphService The Subgraph Service contract address + * @param disputeManager The Dispute Manager contract address + * @param tapCollector The TAP Collector contract address + * @param curation The Curation contract address + */ event SubgraphServiceDirectoryInitialized( address subgraphService, address disputeManager, address tapCollector, address curation ); + + /** + * @notice Thrown when the caller is not the Dispute Manager + * @param caller The caller address + * @param disputeManager The Dispute Manager address + */ error DirectoryNotDisputeManager(address caller, address disputeManager); + /** + * @notice Checks that the caller is the Dispute Manager + */ modifier onlyDisputeManager() { require( msg.sender == address(DISPUTE_MANAGER), @@ -28,6 +59,13 @@ abstract contract Directory { _; } + /** + * @notice Constructor for the Directory contract + * @param subgraphService The Subgraph Service contract address + * @param disputeManager The Dispute Manager contract address + * @param tapCollector The TAP Collector contract address + * @param curation The Curation contract address + */ constructor(address subgraphService, address disputeManager, address tapCollector, address curation) { SUBGRAPH_SERVICE = ISubgraphService(subgraphService); DISPUTE_MANAGER = IDisputeManager(disputeManager); @@ -37,18 +75,30 @@ abstract contract Directory { emit SubgraphServiceDirectoryInitialized(subgraphService, disputeManager, tapCollector, curation); } + /** + * @notice Returns the Subgraph Service contract address + */ function _subgraphService() internal view returns (ISubgraphService) { return SUBGRAPH_SERVICE; } + /** + * @notice Returns the Dispute Manager contract address + */ function _disputeManager() internal view returns (IDisputeManager) { return DISPUTE_MANAGER; } + /** + * @notice Returns the TAP Collector contract address + */ function _tapCollector() internal view returns (ITAPCollector) { return TAP_COLLECTOR; } + /** + * @notice Returns the Curation contract address + */ function _curation() internal view returns (ICuration) { return CURATION; } From d369c0844c9aa27f3e855fc4467ff1edc7a06d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 3 Jun 2024 15:35:22 -0300 Subject: [PATCH 096/343] chore: lint fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/DataService.sol | 2 + .../utilities/ProvisionManager.sol | 94 ++++++++++--------- .../contracts/interfaces/ITAPCollector.sol | 1 - .../internal/IHorizonStakingMain.sol | 1 - .../contracts/payments/PaymentsEscrow.sol | 13 +-- .../contracts/staking/HorizonStaking.sol | 6 +- .../contracts/SubgraphService.sol | 10 +- .../contracts/interfaces/IDisputeManager.sol | 9 +- .../contracts/utilities/AllocationManager.sol | 13 ++- .../utilities/AttestationManager.sol | 4 +- 10 files changed, 81 insertions(+), 72 deletions(-) diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index d9f2ec1e5..f986224b3 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -29,6 +29,7 @@ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1 /** * @notice Initializes the contract and any parent contracts. */ + // solhint-disable-next-line func-name-mixedcase function __DataService_init() internal onlyInitializing { __DataService_init_unchained(); } @@ -36,6 +37,7 @@ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1 /** * @notice Initializes the contract. */ + // solhint-disable-next-line func-name-mixedcase function __DataService_init_unchained() internal onlyInitializing { __ProvisionManager_init_unchained(); } diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 520b7a24b..24230997e 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -135,6 +135,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa /** * @notice Initializes the contract and any parent contracts. */ + // solhint-disable-next-line func-name-mixedcase function __ProvisionManager_init() internal onlyInitializing { __ProvisionManager_init_unchained(); } @@ -143,6 +144,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa * @notice Initializes the contract. * @dev All parameters set to their entire range as valid. */ + // solhint-disable-next-line func-name-mixedcase function __ProvisionManager_init_unchained() internal onlyInitializing { _setProvisionTokensRange(type(uint256).min, type(uint256).max); _setDelegationRatioRange(type(uint32).min, type(uint32).max); @@ -164,6 +166,52 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa _graphStaking().acceptProvisionParameters(_serviceProvider); } + // -- setters -- + + /** + * @notice Sets the range for the provision tokens. + * @param _min The minimum allowed value for the provision tokens. + * @param _max The maximum allowed value for the provision tokens. + */ + function _setProvisionTokensRange(uint256 _min, uint256 _max) internal { + minimumProvisionTokens = _min; + maximumProvisionTokens = _max; + emit ProvisionTokensRangeSet(_min, _max); + } + + /** + * @notice Sets the range for the delegation ratio. + * @param _min The minimum allowed value for the delegation ratio. + * @param _max The maximum allowed value for the delegation ratio. + */ + function _setDelegationRatioRange(uint32 _min, uint32 _max) internal { + minimumDelegationRatio = _min; + maximumDelegationRatio = _max; + emit DelegationRatioRangeSet(_min, _max); + } + + /** + * @notice Sets the range for the verifier cut. + * @param _min The minimum allowed value for the max verifier cut. + * @param _max The maximum allowed value for the max verifier cut. + */ + function _setVerifierCutRange(uint32 _min, uint32 _max) internal { + minimumVerifierCut = _min; + maximumVerifierCut = _max; + emit VerifierCutRangeSet(_min, _max); + } + + /** + * @notice Sets the range for the thawing period. + * @param _min The minimum allowed value for the thawing period. + * @param _max The maximum allowed value for the thawing period. + */ + function _setThawingPeriodRange(uint64 _min, uint64 _max) internal { + minimumThawingPeriod = _min; + maximumThawingPeriod = _max; + emit ThawingPeriodRangeSet(_min, _max); + } + // -- checks -- /** @@ -241,52 +289,6 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa } } - // -- setters -- - - /** - * @notice Sets the range for the provision tokens. - * @param _min The minimum allowed value for the provision tokens. - * @param _max The maximum allowed value for the provision tokens. - */ - function _setProvisionTokensRange(uint256 _min, uint256 _max) internal { - minimumProvisionTokens = _min; - maximumProvisionTokens = _max; - emit ProvisionTokensRangeSet(_min, _max); - } - - /** - * @notice Sets the range for the delegation ratio. - * @param _min The minimum allowed value for the delegation ratio. - * @param _max The maximum allowed value for the delegation ratio. - */ - function _setDelegationRatioRange(uint32 _min, uint32 _max) internal { - minimumDelegationRatio = _min; - maximumDelegationRatio = _max; - emit DelegationRatioRangeSet(_min, _max); - } - - /** - * @notice Sets the range for the verifier cut. - * @param _min The minimum allowed value for the max verifier cut. - * @param _max The maximum allowed value for the max verifier cut. - */ - function _setVerifierCutRange(uint32 _min, uint32 _max) internal { - minimumVerifierCut = _min; - maximumVerifierCut = _max; - emit VerifierCutRangeSet(_min, _max); - } - - /** - * @notice Sets the range for the thawing period. - * @param _min The minimum allowed value for the thawing period. - * @param _max The maximum allowed value for the thawing period. - */ - function _setThawingPeriodRange(uint64 _min, uint64 _max) internal { - minimumThawingPeriod = _min; - maximumThawingPeriod = _max; - emit ThawingPeriodRangeSet(_min, _max); - } - // -- getters -- /** diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index 2e5a47c05..28561e2ce 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; -import { IGraphPayments } from "./IGraphPayments.sol"; import { IPaymentsCollector } from "./IPaymentsCollector.sol"; /** diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 201e1b75a..0118479a1 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -2,7 +2,6 @@ pragma solidity 0.8.26; -import { IHorizonStakingBase } from "./IHorizonStakingBase.sol"; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; /** diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index a03ac7409..8b9e8c768 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -218,12 +218,13 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { /** * @notice See {IPaymentsEscrow-deposit} - * @param receiver The address of the receiver - * @param tokens The amount of tokens to deposit + * @param _payer The address of the payer + * @param _receiver The address of the receiver + * @param _tokens The amount of tokens to deposit */ - function _deposit(address payer, address receiver, uint256 tokens) internal { - escrowAccounts[payer][receiver].balance += tokens; - _graphToken().pullTokens(msg.sender, tokens); - emit Deposit(payer, receiver, tokens); + function _deposit(address _payer, address _receiver, uint256 _tokens) internal { + escrowAccounts[_payer][_receiver].balance += _tokens; + _graphToken().pullTokens(msg.sender, _tokens); + emit Deposit(_payer, _receiver, _tokens); } } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index d0a404040..3ffc3e4b6 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -560,15 +560,15 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice See {IHorizonStakingMain-withdraw}. * @param _serviceProvider Address of service provider to withdraw funds from - * @param revertIfThawing If true, the function will revert if the tokens are still thawing + * @param _revertIfThawing If true, the function will revert if the tokens are still thawing */ - function _withdraw(address _serviceProvider, bool revertIfThawing) private { + function _withdraw(address _serviceProvider, bool _revertIfThawing) private { // Get tokens available for withdraw and update balance ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; require(tokensToWithdraw != 0, HorizonStakingInvalidZeroTokens()); - if (revertIfThawing) { + if (_revertIfThawing) { require( block.timestamp >= sp.__DEPRECATED_tokensLockedUntil, HorizonStakingStillThawing(sp.__DEPRECATED_tokensLockedUntil) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index f6fa952e5..fb113c24c 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -231,11 +231,11 @@ contract SubgraphService is * Reverts if the payment type is not supported. * @dev This function is the equivalent of the `collect` function for query fees and the `closeAllocation` function * for indexing rewards in the legacy Staking contract. - * + * * Requirements: * - The indexer must be registered * - The provision must be valid according to the subgraph service rules - * + * * Emits a {ServicePaymentCollected} event. Emits payment type specific events. * * For query fees, see {SubgraphService-_collectQueryFees} for more details. @@ -349,11 +349,11 @@ contract SubgraphService is /** * @notice Get allocation data to calculate rewards issuance * @dev Implements {IRewardsIssuer.getAllocationData} - * @dev Note that this is slightly different than {getAllocation}. It returns an + * @dev Note that this is slightly different than {getAllocation}. It returns an * unstructured subset of the allocation data, which is the minimum required to mint rewards. - * + * * Should only be used by the {RewardsManager}. - * + * * @param allocationId The allocation Id * @return indexer The indexer address * @return subgraphDeploymentId Subgraph deployment id for the allocation diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 0da818cfa..f53b0f538 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -5,7 +5,6 @@ pragma solidity 0.8.26; import { Attestation } from "../libraries/Attestation.sol"; interface IDisputeManager { - /// @notice Types of disputes that can be created enum DisputeType { Null, @@ -58,7 +57,7 @@ interface IDisputeManager { * @param minimumDeposit The minimum deposit required to create a dispute. */ event MinimumDepositSet(uint256 minimumDeposit); - + /** * @notice Emitted when max slashing cut is set. * @param maxSlashingCut The maximum slashing cut that can be set. @@ -70,7 +69,7 @@ interface IDisputeManager { * @param fishermanRewardCut The fisherman reward cut. */ event FishermanRewardCutSet(uint32 fishermanRewardCut); - + /** * @notice Emitted when subgraph service is set. * @param subgraphService The address of the subgraph service. @@ -204,6 +203,8 @@ interface IDisputeManager { function cancelDispute(bytes32 disputeId) external; + function setSubgraphService(address subgraphService) external; + // -- Getters -- function getVerifierCut() external view returns (uint32); @@ -220,6 +221,4 @@ interface IDisputeManager { Attestation.State memory attestation1, Attestation.State memory attestation2 ) external pure returns (bool); - - function setSubgraphService(address subgraphService) external; } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index ec5d869a1..7b8ba6c50 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -149,15 +149,20 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca /** * @notice Initializes the contract and parent contracts */ - function __AllocationManager_init(string memory name, string memory version) internal onlyInitializing { - __EIP712_init(name, version); - __AllocationManager_init_unchained(name, version); + // solhint-disable-next-line func-name-mixedcase + function __AllocationManager_init(string memory _name, string memory _version) internal onlyInitializing { + __EIP712_init(_name, _version); + __AllocationManager_init_unchained(_name, _version); } /** * @notice Initializes the contract */ - function __AllocationManager_init_unchained(string memory name, string memory version) internal onlyInitializing {} + // solhint-disable-next-line func-name-mixedcase + function __AllocationManager_init_unchained( + string memory _name, + string memory _version + ) internal onlyInitializing {} /** * @notice Imports a legacy allocation id into the subgraph service diff --git a/packages/subgraph-service/contracts/utilities/AttestationManager.sol b/packages/subgraph-service/contracts/utilities/AttestationManager.sol index 63ebcf9a1..0d8405917 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManager.sol @@ -20,7 +20,7 @@ abstract contract AttestationManager is Initializable, AttestationManagerV1Stora /// @notice EIP712 domain type hash bytes32 private constant DOMAIN_TYPE_HASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)"); - + /// @notice EIP712 domain name bytes32 private constant DOMAIN_NAME_HASH = keccak256("Graph Protocol"); @@ -33,6 +33,7 @@ abstract contract AttestationManager is Initializable, AttestationManagerV1Stora /** * @dev Initialize the AttestationManager contract and parent contracts */ + // solhint-disable-next-line func-name-mixedcase function __AttestationManager_init() internal onlyInitializing { __AttestationManager_init_unchained(); } @@ -40,6 +41,7 @@ abstract contract AttestationManager is Initializable, AttestationManagerV1Stora /** * @dev Initialize the AttestationManager contract */ + // solhint-disable-next-line func-name-mixedcase function __AttestationManager_init_unchained() internal onlyInitializing { _domainSeparator = keccak256( abi.encode( From 9ed2a722fa03058b57bcbb922e6f11bb6393eee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 3 Jun 2024 16:14:15 -0300 Subject: [PATCH 097/343] chore: trim unused code from LibFixedMath MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/libraries/LibFixedMath.sol | 150 ------------------ 1 file changed, 150 deletions(-) diff --git a/packages/horizon/contracts/libraries/LibFixedMath.sol b/packages/horizon/contracts/libraries/LibFixedMath.sol index fd29b5e53..1a941ed11 100644 --- a/packages/horizon/contracts/libraries/LibFixedMath.sol +++ b/packages/horizon/contracts/libraries/LibFixedMath.sol @@ -27,13 +27,6 @@ library LibFixedMath { int256 private constant FIXED_1 = int256(0x0000000000000000000000000000000080000000000000000000000000000000); // 2**255 int256 private constant MIN_FIXED_VAL = type(int256).min; - // 1^2 (in fixed-point) - int256 private constant FIXED_1_SQUARED = - int256(0x4000000000000000000000000000000000000000000000000000000000000000); - // 1 - int256 private constant LN_MAX_VAL = FIXED_1; - // e ^ -63.875 - int256 private constant LN_MIN_VAL = int256(0x0000000000000000000000000000000000000000000000000000000733048c5a); // 0 int256 private constant EXP_MAX_VAL = 0; // -63.875 @@ -44,11 +37,6 @@ library LibFixedMath { f = FIXED_1; } - /// @dev Returns the addition of two fixed point numbers, reverting on overflow. - function add(int256 a, int256 b) internal pure returns (int256 c) { - c = _add(a, b); - } - /// @dev Returns the addition of two fixed point numbers, reverting on overflow. function sub(int256 a, int256 b) internal pure returns (int256 c) { if (b == MIN_FIXED_VAL) { @@ -62,11 +50,6 @@ library LibFixedMath { c = _mul(a, b) / FIXED_1; } - /// @dev Returns the division of two fixed point numbers. - function div(int256 a, int256 b) internal pure returns (int256 c) { - c = _div(_mul(a, FIXED_1), b); - } - /// @dev Performs (a * n) / d, without scaling for precision. function mulDiv(int256 a, int256 n, int256 d) internal pure returns (int256 c) { c = _div(_mul(a, n), d); @@ -86,149 +69,16 @@ library LibFixedMath { return uint256(uint256(c) >> 127); } - /// @dev Returns the absolute value of a fixed point number. - function abs(int256 f) internal pure returns (int256 c) { - if (f == MIN_FIXED_VAL) { - revert("out-of-bounds"); - } - if (f >= 0) { - c = f; - } else { - c = -f; - } - } - - /// @dev Returns 1 / `x`, where `x` is a fixed-point number. - function invert(int256 f) internal pure returns (int256 c) { - c = _div(FIXED_1_SQUARED, f); - } - - /// @dev Convert signed `n` / 1 to a fixed-point number. - function toFixed(int256 n) internal pure returns (int256 f) { - f = _mul(n, FIXED_1); - } - /// @dev Convert signed `n` / `d` to a fixed-point number. function toFixed(int256 n, int256 d) internal pure returns (int256 f) { f = _div(_mul(n, FIXED_1), d); } - /// @dev Convert unsigned `n` / 1 to a fixed-point number. - /// Reverts if `n` is too large to fit in a fixed-point number. - function toFixed(uint256 n) internal pure returns (int256 f) { - if (int256(n) < int256(0)) { - revert("out-of-bounds"); - } - f = _mul(int256(n), FIXED_1); - } - - /// @dev Convert unsigned `n` / `d` to a fixed-point number. - /// Reverts if `n` / `d` is too large to fit in a fixed-point number. - function toFixed(uint256 n, uint256 d) internal pure returns (int256 f) { - if (int256(n) < int256(0)) { - revert("out-of-bounds"); - } - if (int256(d) < int256(0)) { - revert("out-of-bounds"); - } - f = _div(_mul(int256(n), FIXED_1), int256(d)); - } - /// @dev Convert a fixed-point number to an integer. function toInteger(int256 f) internal pure returns (int256 n) { return f / FIXED_1; } - /// @dev Get the natural logarithm of a fixed-point number 0 < `x` <= LN_MAX_VAL - function ln(int256 x) internal pure returns (int256 r) { - if (x > LN_MAX_VAL) { - revert("out-of-bounds"); - } - if (x <= 0) { - revert("too-small"); - } - if (x == FIXED_1) { - return 0; - } - if (x <= LN_MIN_VAL) { - return EXP_MIN_VAL; - } - - int256 y; - int256 z; - int256 w; - unchecked { - // Rewrite the input as a quotient of negative natural exponents and a single residual q, such that 1 < q < 2 - // For example: log(0.3) = log(e^-1 * e^-0.25 * 1.0471028872385522) - // = 1 - 0.25 - log(1 + 0.0471028872385522) - // e ^ -32 - if (x <= int256(0x00000000000000000000000000000000000000000001c8464f76164760000000)) { - r -= int256(0x0000000000000000000000000000001000000000000000000000000000000000); // - 32 - x = (x * FIXED_1) / int256(0x00000000000000000000000000000000000000000001c8464f76164760000000); // / e ^ -32 - } - // e ^ -16 - if (x <= int256(0x00000000000000000000000000000000000000f1aaddd7742e90000000000000)) { - r -= int256(0x0000000000000000000000000000000800000000000000000000000000000000); // - 16 - x = (x * FIXED_1) / int256(0x00000000000000000000000000000000000000f1aaddd7742e90000000000000); // / e ^ -16 - } - // e ^ -8 - if (x <= int256(0x00000000000000000000000000000000000afe10820813d78000000000000000)) { - r -= int256(0x0000000000000000000000000000000400000000000000000000000000000000); // - 8 - x = (x * FIXED_1) / int256(0x00000000000000000000000000000000000afe10820813d78000000000000000); // / e ^ -8 - } - // e ^ -4 - if (x <= int256(0x0000000000000000000000000000000002582ab704279ec00000000000000000)) { - r -= int256(0x0000000000000000000000000000000200000000000000000000000000000000); // - 4 - x = (x * FIXED_1) / int256(0x0000000000000000000000000000000002582ab704279ec00000000000000000); // / e ^ -4 - } - // e ^ -2 - if (x <= int256(0x000000000000000000000000000000001152aaa3bf81cc000000000000000000)) { - r -= int256(0x0000000000000000000000000000000100000000000000000000000000000000); // - 2 - x = (x * FIXED_1) / int256(0x000000000000000000000000000000001152aaa3bf81cc000000000000000000); // / e ^ -2 - } - // e ^ -1 - if (x <= int256(0x000000000000000000000000000000002f16ac6c59de70000000000000000000)) { - r -= int256(0x0000000000000000000000000000000080000000000000000000000000000000); // - 1 - x = (x * FIXED_1) / int256(0x000000000000000000000000000000002f16ac6c59de70000000000000000000); // / e ^ -1 - } - // e ^ -0.5 - if (x <= int256(0x000000000000000000000000000000004da2cbf1be5828000000000000000000)) { - r -= int256(0x0000000000000000000000000000000040000000000000000000000000000000); // - 0.5 - x = (x * FIXED_1) / int256(0x000000000000000000000000000000004da2cbf1be5828000000000000000000); // / e ^ -0.5 - } - // e ^ -0.25 - if (x <= int256(0x0000000000000000000000000000000063afbe7ab2082c000000000000000000)) { - r -= int256(0x0000000000000000000000000000000020000000000000000000000000000000); // - 0.25 - x = (x * FIXED_1) / int256(0x0000000000000000000000000000000063afbe7ab2082c000000000000000000); // / e ^ -0.25 - } - // e ^ -0.125 - if (x <= int256(0x0000000000000000000000000000000070f5a893b608861e1f58934f97aea57d)) { - r -= int256(0x0000000000000000000000000000000010000000000000000000000000000000); // - 0.125 - x = (x * FIXED_1) / int256(0x0000000000000000000000000000000070f5a893b608861e1f58934f97aea57d); // / e ^ -0.125 - } - // `x` is now our residual in the range of 1 <= x <= 2 (or close enough). - - // Add the taylor series for log(1 + z), where z = x - 1 - z = y = x - FIXED_1; - w = (y * y) / FIXED_1; - r += (z * (0x100000000000000000000000000000000 - y)) / 0x100000000000000000000000000000000; - z = (z * w) / FIXED_1; // add y^01 / 01 - y^02 / 02 - r += (z * (0x0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - y)) / 0x200000000000000000000000000000000; - z = (z * w) / FIXED_1; // add y^03 / 03 - y^04 / 04 - r += (z * (0x099999999999999999999999999999999 - y)) / 0x300000000000000000000000000000000; - z = (z * w) / FIXED_1; // add y^05 / 05 - y^06 / 06 - r += (z * (0x092492492492492492492492492492492 - y)) / 0x400000000000000000000000000000000; - z = (z * w) / FIXED_1; // add y^07 / 07 - y^08 / 08 - r += (z * (0x08e38e38e38e38e38e38e38e38e38e38e - y)) / 0x500000000000000000000000000000000; - z = (z * w) / FIXED_1; // add y^09 / 09 - y^10 / 10 - r += (z * (0x08ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b - y)) / 0x600000000000000000000000000000000; - z = (z * w) / FIXED_1; // add y^11 / 11 - y^12 / 12 - r += (z * (0x089d89d89d89d89d89d89d89d89d89d89 - y)) / 0x700000000000000000000000000000000; - z = (z * w) / FIXED_1; // add y^13 / 13 - y^14 / 14 - r += (z * (0x088888888888888888888888888888888 - y)) / 0x800000000000000000000000000000000; // add y^15 / 15 - y^16 / 16 - } - } - /// @dev Compute the natural exponent for a fixed-point number EXP_MIN_VAL <= `x` <= 1 function exp(int256 x) internal pure returns (int256 r) { if (x < EXP_MIN_VAL) { From 4f6436ae1aed6eaadf4cce7838862e7dc57c0b62 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Mon, 3 Jun 2024 17:09:25 -0300 Subject: [PATCH 098/343] chore: add governance tests --- .../internal/IHorizonStakingBase.sol | 12 +++ .../internal/IHorizonStakingExtension.sol | 6 ++ .../contracts/staking/HorizonStakingBase.sol | 14 ++++ .../staking/HorizonStakingExtension.sol | 9 +++ .../test/staking/governance/governance.t.sol | 77 +++++++++++++++++++ 5 files changed, 118 insertions(+) create mode 100644 packages/horizon/test/staking/governance/governance.t.sol diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index 808c738f1..522ddf44e 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -167,4 +167,16 @@ interface IHorizonStakingBase { * @notice Gets the maximum allowed thawing period for a provision. */ function getMaxThawingPeriod() external view returns (uint64); + + /** + * @notice Return true if the verifier is an allowed locked verifier. + * @param verifier Address of the verifier + * @return True if verifier is allowed locked verifier, false otherwise + */ + function isAllowedLockedVerifier(address verifier) external view returns (bool); + + /** + * @notice Return true if delegation slashing is enabled, false otherwise. + */ + function isDelegationSlashingEnabled() external view returns (bool); } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 825ce2292..a51b1871d 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -164,4 +164,10 @@ interface IHorizonStakingExtension { * @return Total tokens allocated to subgraph */ function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentID) external view returns (uint256); + + /** + * @notice Retrun the time in blocks to unstake + * @return Thawing period in blocks + */ + function __DEPRECATED_getThawingPeriod() external view returns (uint64); } diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index c3eca6b43..eeac9f800 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -223,6 +223,20 @@ abstract contract HorizonStakingBase is return _maxThawingPeriod; } + /** + * @notice see {IHorizonStakingBase-isAllowedLockedVerifier}. + */ + function isAllowedLockedVerifier(address verifier) external view returns (bool) { + return _allowedLockedVerifiers[verifier]; + } + + /** + * @notice See {IHorizonStakingBase-isDelegationSlashingEnabled}. + */ + function isDelegationSlashingEnabled() external view returns (bool) { + return _delegationSlashingEnabled; + } + /** * @notice Deposit tokens into the service provider stake. * @dev TODO: After transition period move to IHorizonStakingMain. Temporarily it diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index c2d7685b4..7683523a7 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -297,6 +297,15 @@ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2Staki return _legacyOperatorAuth[serviceProvider][operator]; } + /** + * @notice Retrun the time in blocks to unstake + * Deprecated, now enforced by each data service (verifier) + * @return Thawing period in blocks + */ + function __DEPRECATED_getThawingPeriod() external view returns (uint64) { + return __DEPRECATED_thawingPeriod; + } + /** * @dev Receive an Indexer's stake from L1. * The specified amount is added to the indexer's stake; the indexer's diff --git a/packages/horizon/test/staking/governance/governance.t.sol b/packages/horizon/test/staking/governance/governance.t.sol new file mode 100644 index 000000000..988863f39 --- /dev/null +++ b/packages/horizon/test/staking/governance/governance.t.sol @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingGovernanceTest is HorizonStakingTest { + + modifier useGovernor { + vm.startPrank(users.governor); + _; + } + + function testGovernance_SetAllowedLockedVerifier() public useGovernor { + staking.setAllowedLockedVerifier(subgraphDataServiceAddress, true); + assertTrue(staking.isAllowedLockedVerifier(subgraphDataServiceAddress)); + + // Use allowed verifier to set an operator with locked tokens + vm.startPrank(users.indexer); + staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + + assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); + } + + function testGovernance_RevertWhen_VerifierNotAllowed() public useGovernor { + staking.setAllowedLockedVerifier(subgraphDataServiceAddress, false); + assertFalse(staking.isAllowedLockedVerifier(subgraphDataServiceAddress)); + + vm.startPrank(users.indexer); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingVerifierNotAllowed(address)", subgraphDataServiceAddress); + vm.expectRevert(expectedError); + staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + } + + function testGovernance_RevertWhen_SetAllowedLockedVerifier_NotGovernor() public useIndexer { + bytes memory expectedError = abi.encodeWithSignature("ManagedOnlyGovernor()"); + vm.expectRevert(expectedError); + staking.setAllowedLockedVerifier(subgraphDataServiceAddress, true); + } + + function testGovernance_SetDelgationSlashing(bool enabled) public useGovernor { + staking.setDelegationSlashingEnabled(enabled); + assertEq(staking.isDelegationSlashingEnabled(), enabled); + } + + function testGovernance_SetDelgationSlashing_NotGovernor(bool enabled) public useIndexer { + bytes memory expectedError = abi.encodeWithSignature("ManagedOnlyGovernor()"); + vm.expectRevert(expectedError); + staking.setDelegationSlashingEnabled(enabled); + } + + function testGovernance_ClearThawingPeriod(uint32 thawingPeriod) public useGovernor { + vm.store(address(staking), bytes32(uint256(13)), bytes32(uint256(thawingPeriod))); + assertEq(staking.__DEPRECATED_getThawingPeriod(), thawingPeriod); + + staking.clearThawingPeriod(); + assertEq(staking.__DEPRECATED_getThawingPeriod(), 0); + } + + function testGovernance_ClearThawingPeriod_NotGovernor() public useIndexer { + bytes memory expectedError = abi.encodeWithSignature("ManagedOnlyGovernor()"); + vm.expectRevert(expectedError); + staking.clearThawingPeriod(); + } + + function testGovernance__SetMaxThawingPeriod(uint64 maxThawingPeriod) public useGovernor { + staking.setMaxThawingPeriod(maxThawingPeriod); + assertEq(staking.getMaxThawingPeriod(), maxThawingPeriod); + } + + function testGovernance__SetMaxThawingPeriod_NotGovernor() public useIndexer { + bytes memory expectedError = abi.encodeWithSignature("ManagedOnlyGovernor()"); + vm.expectRevert(expectedError); + staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); + } +} \ No newline at end of file From 95bb9404155688dbe9af0b40cbc38c9bfc13e60f Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 4 Jun 2024 10:48:17 -0300 Subject: [PATCH 099/343] chore: add tokens locked tests --- packages/horizon/test/GraphBase.t.sol | 3 +- .../horizon/test/staking/HorizonStaking.t.sol | 9 +++ .../test/staking/delegation/undelegate.t.sol | 16 +--- .../test/staking/governance/governance.t.sol | 16 ---- .../test/staking/operator/locked.t.sol | 26 +++++++ .../test/staking/operator/operator.t.sol | 15 +++- .../test/staking/provision/locked.t.sol | 78 +++++++++++++++++++ .../horizon/test/staking/slash/slash.t.sol | 8 +- packages/horizon/test/utils/Utils.sol | 12 +++ 9 files changed, 147 insertions(+), 36 deletions(-) create mode 100644 packages/horizon/test/staking/operator/locked.t.sol create mode 100644 packages/horizon/test/staking/provision/locked.t.sol create mode 100644 packages/horizon/test/utils/Utils.sol diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 699880050..cc4924842 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -15,8 +15,9 @@ import { HorizonStakingExtension } from "contracts/staking/HorizonStakingExtensi import { MockGRTToken } from "../contracts/mocks/MockGRTToken.sol"; import { Constants } from "./utils/Constants.sol"; import { Users } from "./utils/Users.sol"; +import { Utils } from "./utils/Utils.sol"; -abstract contract GraphBaseTest is Test, Constants { +abstract contract GraphBaseTest is Utils, Constants { /* Contracts */ diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index cc601ea90..cd2e9ba76 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -54,6 +54,15 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { _; } + modifier useLockedVerifier() { + address msgSender; + (, msgSender,) = vm.readCallers(); + resetPrank(users.governor); + staking.setAllowedLockedVerifier(subgraphDataServiceAddress, true); + resetPrank(msgSender); + _; + } + function _stakeTo(address to, uint256 amount) internal { approve(address(staking), amount); staking.stakeTo(to, amount); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 5eca15326..99683c825 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -13,9 +13,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 amount, uint256 delegationAmount ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { - // TODO: maybe create a changePrank - vm.stopPrank(); - vm.startPrank(users.delegator); + resetPrank(users.delegator); Delegation memory delegation = _getDelegation(); _undelegate(delegation.shares); @@ -29,9 +27,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 amount, uint256 delegationAmount ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { - // TODO: maybe create a changePrank - vm.stopPrank(); - vm.startPrank(users.delegator); + resetPrank(users.delegator); bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroShares()"); vm.expectRevert(expectedError); _undelegate(0); @@ -42,9 +38,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 delegationAmount, uint256 overDelegationShares ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { - // TODO: maybe create a changePrank - vm.stopPrank(); - vm.startPrank(users.delegator); + resetPrank(users.delegator); Delegation memory delegation = _getDelegation(); vm.assume(overDelegationShares > delegation.shares); @@ -66,9 +60,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { useProvision(10_000_000 ether, 0, 0) useDelegation(delegationAmount) { - // TODO: maybe create a changePrank - vm.stopPrank(); - vm.startPrank(users.delegator); + resetPrank(users.delegator); uint256 minShares = delegationAmount - MIN_DELEGATION + 1; withdrawShares = bound(withdrawShares, minShares, delegationAmount - 1); bytes memory expectedError = abi.encodeWithSignature( diff --git a/packages/horizon/test/staking/governance/governance.t.sol b/packages/horizon/test/staking/governance/governance.t.sol index 988863f39..078d39ba2 100644 --- a/packages/horizon/test/staking/governance/governance.t.sol +++ b/packages/horizon/test/staking/governance/governance.t.sol @@ -15,22 +15,6 @@ contract HorizonStakingGovernanceTest is HorizonStakingTest { function testGovernance_SetAllowedLockedVerifier() public useGovernor { staking.setAllowedLockedVerifier(subgraphDataServiceAddress, true); assertTrue(staking.isAllowedLockedVerifier(subgraphDataServiceAddress)); - - // Use allowed verifier to set an operator with locked tokens - vm.startPrank(users.indexer); - staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); - - assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); - } - - function testGovernance_RevertWhen_VerifierNotAllowed() public useGovernor { - staking.setAllowedLockedVerifier(subgraphDataServiceAddress, false); - assertFalse(staking.isAllowedLockedVerifier(subgraphDataServiceAddress)); - - vm.startPrank(users.indexer); - bytes memory expectedError = abi.encodeWithSignature("HorizonStakingVerifierNotAllowed(address)", subgraphDataServiceAddress); - vm.expectRevert(expectedError); - staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); } function testGovernance_RevertWhen_SetAllowedLockedVerifier_NotGovernor() public useIndexer { diff --git a/packages/horizon/test/staking/operator/locked.t.sol b/packages/horizon/test/staking/operator/locked.t.sol new file mode 100644 index 000000000..b29d8890f --- /dev/null +++ b/packages/horizon/test/staking/operator/locked.t.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingOperatorLockedTest is HorizonStakingTest { + + function testOperatorLocked_Set() public useIndexer useLockedVerifier { + staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); + } + + function testOperatorLocked_RevertWhen_VerifierNotAllowed() public useIndexer { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingVerifierNotAllowed(address)", subgraphDataServiceAddress); + vm.expectRevert(expectedError); + staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + } + + function testOperatorLocked_RevertWhen_CallerIsServiceProvider() public useIndexer useLockedVerifier { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCallerIsServiceProvider()"); + vm.expectRevert(expectedError); + staking.setOperatorLocked(users.indexer, subgraphDataServiceAddress, true); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/operator/operator.t.sol b/packages/horizon/test/staking/operator/operator.t.sol index f9f6e1692..034acdf8e 100644 --- a/packages/horizon/test/staking/operator/operator.t.sol +++ b/packages/horizon/test/staking/operator/operator.t.sol @@ -7,8 +7,21 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingOperatorTest is HorizonStakingTest { - function testOperator_SetOperator() public useIndexer { + function testOperator_SetOperator() public useOperator { + assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); + } + + function testOperator_RevertWhen_CallerIsServiceProvider() public useIndexer { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCallerIsServiceProvider()"); + vm.expectRevert(expectedError); + staking.setOperator(users.indexer, subgraphDataServiceAddress, true); + } + + function testOperator_RemoveOperator() public useIndexer { staking.setOperator(users.operator, subgraphDataServiceAddress, true); assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); + + staking.setOperator(users.operator, subgraphDataServiceAddress, false); + assertFalse(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/provision/locked.t.sol b/packages/horizon/test/staking/provision/locked.t.sol new file mode 100644 index 000000000..3560dad39 --- /dev/null +++ b/packages/horizon/test/staking/provision/locked.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingProvisionLockedTest is HorizonStakingTest { + + function testProvisionLocked_Create( + uint256 amount + ) public useIndexer useStake(amount) useLockedVerifier { + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionTokens, 0); + + staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + + vm.startPrank(users.operator); + staking.provisionLocked( + users.indexer, + subgraphDataServiceAddress, + amount, + MAX_MAX_VERIFIER_CUT, + MAX_THAWING_PERIOD + ); + + provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionTokens, amount); + } + + function testProvisionLocked_RevertWhen_VerifierNotAllowed( + uint256 amount + ) public useIndexer useStake(amount) useLockedVerifier { + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionTokens, 0); + + // Set operator + staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + + // Disable locked verifier + vm.startPrank(users.governor); + staking.setAllowedLockedVerifier(subgraphDataServiceAddress, false); + + vm.startPrank(users.operator); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingVerifierNotAllowed(address)", subgraphDataServiceAddress); + vm.expectRevert(expectedError); + staking.provisionLocked( + users.indexer, + subgraphDataServiceAddress, + amount, + MAX_MAX_VERIFIER_CUT, + MAX_THAWING_PERIOD + ); + } + + function testProvisionLocked_RevertWhen_OperatorNotAllowed( + uint256 amount + ) public useIndexer useStake(amount) useLockedVerifier { + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionTokens, 0); + + vm.startPrank(users.operator); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingNotAuthorized(address,address,address)", + users.operator, + users.indexer, + subgraphDataServiceAddress + ); + vm.expectRevert(expectedError); + staking.provisionLocked( + users.indexer, + subgraphDataServiceAddress, + amount, + MAX_MAX_VERIFIER_CUT, + MAX_THAWING_PERIOD + ); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index f455ea041..c24429a1b 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -47,13 +47,11 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 verifierCutAmount, uint256 delegationAmount ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(false) { - // TODO: changePrank? - vm.stopPrank(); delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); - vm.startPrank(users.delegator); + resetPrank(users.delegator); _delegate(delegationAmount); vm.startPrank(subgraphDataServiceAddress); @@ -76,13 +74,11 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 verifierCutAmount, uint256 delegationAmount ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(true) { - // TODO: changePrank? - vm.stopPrank(); delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); - vm.startPrank(users.delegator); + resetPrank(users.delegator); _delegate(delegationAmount); vm.startPrank(subgraphDataServiceAddress); diff --git a/packages/horizon/test/utils/Utils.sol b/packages/horizon/test/utils/Utils.sol new file mode 100644 index 000000000..47e4e68df --- /dev/null +++ b/packages/horizon/test/utils/Utils.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +abstract contract Utils is Test { + /// @dev Stops the active prank and sets a new one. + function resetPrank(address msgSender) internal { + vm.stopPrank(); + vm.startPrank(msgSender); + } +} \ No newline at end of file From 5d7bb2213430cb54c5fc5e4a20dc31ad5276ea24 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 4 Jun 2024 12:33:01 -0300 Subject: [PATCH 100/343] chore: legacy subgraph service tests --- packages/horizon/test/GraphBase.t.sol | 5 ++- .../horizon/test/staking/HorizonStaking.t.sol | 22 +++++----- .../test/staking/delegation/delegate.t.sol | 14 ++++++ .../test/staking/delegation/undelegate.t.sol | 31 ++++++++++--- .../test/staking/delegation/withdraw.t.sol | 44 ++++++++++++++----- .../test/staking/operator/locked.t.sol | 9 +++- .../test/staking/provision/locked.t.sol | 6 +-- .../horizon/test/staking/slash/slash.t.sol | 4 +- 8 files changed, 98 insertions(+), 37 deletions(-) diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index cc4924842..a517cc6a5 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -31,6 +31,7 @@ abstract contract GraphBaseTest is Utils, Constants { HorizonStaking private stakingBase; HorizonStakingExtension private stakingExtension; + address subgraphDataServiceLegacyAddress = makeAddr("subgraphDataServiceLegacyAddress"); address subgraphDataServiceAddress = makeAddr("subgraphDataServiceAddress"); /* Users */ @@ -137,12 +138,12 @@ abstract contract GraphBaseTest is Utils, Constants { ); stakingExtension = new HorizonStakingExtension( address(controller), - subgraphDataServiceAddress + subgraphDataServiceLegacyAddress ); stakingBase = new HorizonStaking( address(controller), address(stakingExtension), - subgraphDataServiceAddress + subgraphDataServiceLegacyAddress ); vm.stopPrank(); diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index cd2e9ba76..1c3a91c95 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -49,16 +49,16 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { vm.assume(delegationAmount > MIN_DELEGATION); vm.assume(delegationAmount <= 10_000_000_000 ether); vm.startPrank(users.delegator); - _delegate(delegationAmount); + _delegate(delegationAmount, subgraphDataServiceAddress); vm.startPrank(msgSender); _; } - modifier useLockedVerifier() { + modifier useLockedVerifier(address verifier) { address msgSender; (, msgSender,) = vm.readCallers(); resetPrank(users.governor); - staking.setAllowedLockedVerifier(subgraphDataServiceAddress, true); + staking.setAllowedLockedVerifier(verifier, true); resetPrank(msgSender); _; } @@ -76,20 +76,20 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { staking.deprovision(users.indexer, subgraphDataServiceAddress, nThawRequests); } - function _delegate(uint256 amount) internal { + function _delegate(uint256 amount, address verifier) internal { token.approve(address(staking), amount); - staking.delegate(users.indexer, subgraphDataServiceAddress, amount, 0); + staking.delegate(users.indexer, verifier, amount, 0); } - function _getDelegation() internal view returns (Delegation memory) { - return staking.getDelegation(users.indexer, subgraphDataServiceAddress, users.delegator); + function _getDelegation(address verifier) internal view returns (Delegation memory) { + return staking.getDelegation(users.indexer, verifier, users.delegator); } - function _undelegate(uint256 shares) internal { - staking.undelegate(users.indexer, subgraphDataServiceAddress, shares); + function _undelegate(uint256 shares, address verifier) internal { + staking.undelegate(users.indexer, verifier, shares); } - function _getDelegationPool() internal view returns (DelegationPool memory) { - return staking.getDelegationPool(users.indexer, subgraphDataServiceAddress); + function _getDelegationPool(address verifier) internal view returns (DelegationPool memory) { + return staking.getDelegationPool(users.indexer, verifier); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 58ae6f1e5..b779fce19 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -39,4 +39,18 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { vm.expectRevert(expectedError); staking.delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); } + + function testDelegate_LegacySubgraphService( + uint256 amount, + uint256 delegationAmount + ) public useIndexer { + amount = bound(amount, MIN_PROVISION_SIZE, 10_000_000_000 ether); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); + + resetPrank(users.delegator); + _delegate(delegationAmount, subgraphDataServiceLegacyAddress); + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceLegacyAddress); + assertEq(delegatedTokens, delegationAmount); + } } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 99683c825..45f7850d7 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -14,8 +14,8 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 delegationAmount ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); - Delegation memory delegation = _getDelegation(); - _undelegate(delegation.shares); + Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + _undelegate(delegation.shares, subgraphDataServiceAddress); LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceAddress, users.delegator); ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); @@ -30,7 +30,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { resetPrank(users.delegator); bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroShares()"); vm.expectRevert(expectedError); - _undelegate(0); + _undelegate(0, subgraphDataServiceAddress); } function testUndelegate_RevertWhen_OverUndelegation( @@ -39,7 +39,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 overDelegationShares ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); - Delegation memory delegation = _getDelegation(); + Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); vm.assume(overDelegationShares > delegation.shares); bytes memory expectedError = abi.encodeWithSignature( @@ -48,7 +48,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { overDelegationShares ); vm.expectRevert(expectedError); - _undelegate(overDelegationShares); + _undelegate(overDelegationShares, subgraphDataServiceAddress); } function testUndelegate_RevertWhen_UndelegateLeavesInsufficientTokens( @@ -69,6 +69,25 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { MIN_DELEGATION ); vm.expectRevert(expectedError); - _undelegate(withdrawShares); + _undelegate(withdrawShares, subgraphDataServiceAddress); + } + + function testUndelegate_LegacySubgraphService( + uint256 amount, + uint256 delegationAmount + ) public useIndexer { + amount = bound(amount, MIN_PROVISION_SIZE, 10_000_000_000 ether); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); + + resetPrank(users.delegator); + _delegate(delegationAmount, subgraphDataServiceLegacyAddress); + Delegation memory delegation = _getDelegation(subgraphDataServiceLegacyAddress); + _undelegate(delegation.shares, subgraphDataServiceLegacyAddress); + + LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceLegacyAddress, users.delegator); + ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + + assertEq(thawRequest.shares, delegation.shares); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 0b622ce9a..9490c19cf 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -12,27 +12,27 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { modifier useUndelegate(uint256 shares) { vm.stopPrank(); vm.startPrank(users.delegator); - Delegation memory delegation = _getDelegation(); + Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); shares = bound(shares, 1, delegation.shares); if (shares != delegation.shares) { - DelegationPool memory pool = _getDelegationPool(); + DelegationPool memory pool = _getDelegationPool(subgraphDataServiceAddress); uint256 tokens = (shares * (pool.tokens - pool.tokensThawing)) / pool.shares; uint256 newTokensThawing = pool.tokensThawing + tokens; uint256 remainingTokens = (delegation.shares * (pool.tokens - newTokensThawing)) / pool.shares; vm.assume(remainingTokens >= MIN_DELEGATION); } - _undelegate(shares); + _undelegate(shares, subgraphDataServiceAddress); _; } - function _withdrawDelegated() private { - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0x0), 0, 0); + function _withdrawDelegated(address verifier) private { + staking.withdrawDelegated(users.indexer, verifier, address(0x0), 0, 0); } - function _expectedTokensFromThawRequest(ThawRequest memory thawRequest) private view returns (uint256) { - DelegationPool memory pool = _getDelegationPool(); + function _expectedTokensFromThawRequest(ThawRequest memory thawRequest, address verifier) private view returns (uint256) { + DelegationPool memory pool = _getDelegationPool(verifier); return (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing; } @@ -64,8 +64,8 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { skip(thawRequest.thawingUntil + 1); uint256 previousBalance = token.balanceOf(users.delegator); - uint256 expectedTokens = _expectedTokensFromThawRequest(thawRequest); - _withdrawDelegated(); + uint256 expectedTokens = _expectedTokensFromThawRequest(thawRequest, subgraphDataServiceAddress); + _withdrawDelegated(subgraphDataServiceAddress); uint256 newBalance = token.balanceOf(users.delegator); assertEq(newBalance - previousBalance, expectedTokens); @@ -81,7 +81,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); - _withdrawDelegated(); + _withdrawDelegated(subgraphDataServiceAddress); } function testWithdrawDelegation_MoveToNewServiceProvider( @@ -118,7 +118,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useUndelegate(delegationAmount) { uint256 previousBalance = token.balanceOf(users.delegator); - _withdrawDelegated(); + _withdrawDelegated(subgraphDataServiceAddress); // Nothing changed since thawing period haven't finished uint256 newBalance = token.balanceOf(users.delegator); @@ -146,4 +146,26 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { uint256 delegatedTokens = staking.getDelegatedTokensAvailable(newIndexer, subgraphDataServiceAddress); assertEq(delegatedTokens, 0); } + + function testWithdrawDelegation_LegacySubgraphService(uint256 delegationAmount) public useIndexer { + delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + _createProvision(subgraphDataServiceLegacyAddress, 10_000_000 ether, 0, MAX_THAWING_PERIOD); + + resetPrank(users.delegator); + _delegate(delegationAmount, subgraphDataServiceLegacyAddress); + Delegation memory delegation = _getDelegation(subgraphDataServiceLegacyAddress); + _undelegate(delegation.shares, subgraphDataServiceLegacyAddress); + + LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceLegacyAddress, users.delegator); + ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + + skip(thawRequest.thawingUntil + 1); + + uint256 previousBalance = token.balanceOf(users.delegator); + uint256 expectedTokens = _expectedTokensFromThawRequest(thawRequest, subgraphDataServiceLegacyAddress); + _withdrawDelegated(subgraphDataServiceLegacyAddress); + + uint256 newBalance = token.balanceOf(users.delegator); + assertEq(newBalance - previousBalance, expectedTokens); + } } \ No newline at end of file diff --git a/packages/horizon/test/staking/operator/locked.t.sol b/packages/horizon/test/staking/operator/locked.t.sol index b29d8890f..1f87004fb 100644 --- a/packages/horizon/test/staking/operator/locked.t.sol +++ b/packages/horizon/test/staking/operator/locked.t.sol @@ -7,7 +7,7 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingOperatorLockedTest is HorizonStakingTest { - function testOperatorLocked_Set() public useIndexer useLockedVerifier { + function testOperatorLocked_Set() public useIndexer useLockedVerifier(subgraphDataServiceAddress) { staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); } @@ -18,9 +18,14 @@ contract HorizonStakingOperatorLockedTest is HorizonStakingTest { staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); } - function testOperatorLocked_RevertWhen_CallerIsServiceProvider() public useIndexer useLockedVerifier { + function testOperatorLocked_RevertWhen_CallerIsServiceProvider() public useIndexer useLockedVerifier(subgraphDataServiceAddress) { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCallerIsServiceProvider()"); vm.expectRevert(expectedError); staking.setOperatorLocked(users.indexer, subgraphDataServiceAddress, true); } + + function testOperatorLocked_SetLegacySubgraphService() public useIndexer useLockedVerifier(subgraphDataServiceLegacyAddress) { + staking.setOperatorLocked(users.operator, subgraphDataServiceLegacyAddress, true); + assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceLegacyAddress)); + } } \ No newline at end of file diff --git a/packages/horizon/test/staking/provision/locked.t.sol b/packages/horizon/test/staking/provision/locked.t.sol index 3560dad39..a4c826254 100644 --- a/packages/horizon/test/staking/provision/locked.t.sol +++ b/packages/horizon/test/staking/provision/locked.t.sol @@ -9,7 +9,7 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { function testProvisionLocked_Create( uint256 amount - ) public useIndexer useStake(amount) useLockedVerifier { + ) public useIndexer useStake(amount) useLockedVerifier(subgraphDataServiceAddress) { uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(provisionTokens, 0); @@ -30,7 +30,7 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { function testProvisionLocked_RevertWhen_VerifierNotAllowed( uint256 amount - ) public useIndexer useStake(amount) useLockedVerifier { + ) public useIndexer useStake(amount) useLockedVerifier(subgraphDataServiceAddress) { uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(provisionTokens, 0); @@ -55,7 +55,7 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { function testProvisionLocked_RevertWhen_OperatorNotAllowed( uint256 amount - ) public useIndexer useStake(amount) useLockedVerifier { + ) public useIndexer useStake(amount) useLockedVerifier(subgraphDataServiceAddress) { uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(provisionTokens, 0); diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index c24429a1b..5d1ab96d6 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -52,7 +52,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); resetPrank(users.delegator); - _delegate(delegationAmount); + _delegate(delegationAmount, subgraphDataServiceAddress); vm.startPrank(subgraphDataServiceAddress); _slash(slashAmount, verifierCutAmount); @@ -79,7 +79,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); resetPrank(users.delegator); - _delegate(delegationAmount); + _delegate(delegationAmount, subgraphDataServiceAddress); vm.startPrank(subgraphDataServiceAddress); _slash(slashAmount, verifierCutAmount); From 0ebdbae100bf04bd148874eccf2ab130989c7090 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 4 Jun 2024 12:59:29 -0300 Subject: [PATCH 101/343] chore: deployments tests --- packages/horizon/test/GraphBase.t.sol | 2 +- .../test/deployments/Deployments.t.sol | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index a517cc6a5..def11a81a 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -123,7 +123,7 @@ abstract contract GraphBaseTest is Utils, Constants { controller.setContractProxy(keccak256("Curation"), makeAddr("Curation")); controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); controller.setContractProxy(keccak256("BridgeEscrow"), makeAddr("BridgeEscrow")); - controller.setContractProxy(keccak256("GraphProxyAdmin"), makeAddr("GraphProxyAdmin")); + controller.setContractProxy(keccak256("GraphProxyAdmin"), address(proxyAdmin)); vm.stopPrank(); vm.startPrank(users.deployer); diff --git a/packages/horizon/test/deployments/Deployments.t.sol b/packages/horizon/test/deployments/Deployments.t.sol index 46abde654..f3c088ab7 100644 --- a/packages/horizon/test/deployments/Deployments.t.sol +++ b/packages/horizon/test/deployments/Deployments.t.sol @@ -7,11 +7,23 @@ import { GraphBaseTest } from "../GraphBase.t.sol"; contract GraphDeploymentsTest is GraphBaseTest { + /* + * HELPERS + */ + + function _getContractFromController(bytes memory _contractName) private view returns (address) { + return controller.getContractProxy(keccak256(_contractName)); + } + + /* + * TESTS + */ + function testDeployments() public view { - // assertEq(address(escrow.GRAPH_PAYMENTS()), address(payments)); - // assertEq(address(escrow.GRAPH_TOKEN()), address(token)); - // assertEq(address(payments.STAKING()), address(staking)); - // assertEq(address(payments.GRAPH_ESCROW()), address(escrow)); - // assertEq(address(payments.GRAPH_TOKEN()), address(token)); + assertEq(_getContractFromController("GraphPayments"), address(payments)); + assertEq(_getContractFromController("GraphToken"), address(token)); + assertEq(_getContractFromController("Staking"), address(staking)); + assertEq(_getContractFromController("PaymentsEscrow"), address(escrow)); + assertEq(_getContractFromController("GraphProxyAdmin"), address(proxyAdmin)); } } From 646198e05187bbad6cca83f569053166a9944a81 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 4 Jun 2024 13:10:30 -0300 Subject: [PATCH 102/343] chore: comments heading --- packages/horizon/test/GraphBase.t.sol | 12 ++++++++++-- packages/horizon/test/escrow/GraphEscrow.t.sol | 10 +++++++--- packages/horizon/test/escrow/collect.t.sol | 4 ++++ packages/horizon/test/escrow/collector.t.sol | 10 +++------- packages/horizon/test/escrow/deposit.t.sol | 4 ++++ packages/horizon/test/escrow/thaw.t.sol | 4 ++++ packages/horizon/test/escrow/withdraw.t.sol | 8 ++++++++ packages/horizon/test/payments/GraphPayments.t.sol | 4 ++++ .../horizon-staking/HorizonStakingShared.t.sol | 14 +++++++------- packages/horizon/test/staking/HorizonStaking.t.sol | 8 ++++++++ .../horizon/test/staking/delegation/delegate.t.sol | 4 ++++ .../test/staking/delegation/undelegate.t.sol | 4 ++++ .../horizon/test/staking/delegation/withdraw.t.sol | 12 ++++++++++++ .../test/staking/governance/governance.t.sol | 8 ++++++++ .../horizon/test/staking/operator/locked.t.sol | 4 ++++ .../horizon/test/staking/operator/operator.t.sol | 4 ++++ .../test/staking/provision/deprovision.t.sol | 4 ++++ .../horizon/test/staking/provision/locked.t.sol | 4 ++++ .../horizon/test/staking/provision/provision.t.sol | 4 ++++ .../test/staking/provision/reprovision.t.sol | 12 ++++++++++++ packages/horizon/test/staking/slash/slash.t.sol | 12 ++++++++++++ packages/horizon/test/staking/stake/stake.t.sol | 4 ++++ packages/horizon/test/staking/stake/unstake.t.sol | 4 ++++ packages/horizon/test/staking/thaw/thaw.t.sol | 5 +++++ 24 files changed, 144 insertions(+), 19 deletions(-) diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index def11a81a..e21a13142 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -19,6 +19,10 @@ import { Utils } from "./utils/Utils.sol"; abstract contract GraphBaseTest is Utils, Constants { + /* + * VARIABLES + */ + /* Contracts */ GraphProxyAdmin public proxyAdmin; @@ -42,7 +46,9 @@ abstract contract GraphBaseTest is Utils, Constants { Constants public constants; - /* Set Up */ + /* + * SET UP + */ function setUp() public virtual { // Deploy ERC20 token @@ -171,7 +177,9 @@ abstract contract GraphBaseTest is Utils, Constants { return user; } - /* Token helpers */ + /* + * TOKEN HELPERS + */ function mint(address _address, uint256 amount) internal { deal({ token: address(token), to: _address, give: amount }); diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index 5d0e01954..bad127890 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaki contract GraphEscrowTest is HorizonStakingSharedTest { + /* + * MODIFIERS + */ + modifier useGateway() { vm.startPrank(users.gateway); _; @@ -31,9 +35,9 @@ contract GraphEscrowTest is HorizonStakingSharedTest { _; } - function setUp() public virtual override { - HorizonStakingSharedTest.setUp(); - } + /* + * HELPERS + */ function _depositTokens(uint256 tokens) internal { token.approve(address(escrow), tokens); diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 5a9a71fa1..ab6808f55 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -8,6 +8,10 @@ import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; contract GraphEscrowCollectTest is GraphEscrowTest { + /* + * TESTS + */ + function testCollect_Tokens( uint256 amount, uint256 tokensDataService diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index 83d7fb42a..3c13b1b42 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -7,7 +7,9 @@ import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowCollectorTest is GraphEscrowTest { - // Collector approve tests + /* + * TESTS + */ function testCollector_Approve(uint256 amount) public useGateway useCollector(amount) { (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); @@ -25,8 +27,6 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { escrow.approveCollector(users.verifier, smallerAmount); } - // Collector thaw tests - function testCollector_Thaw(uint256 amount) public useGateway useCollector(amount) { escrow.thawCollector(users.verifier); @@ -35,8 +35,6 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); } - // Collector cancel thaw tests - function testCollector_CancelThaw(uint256 amount) public useGateway useCollector(amount) { escrow.thawCollector(users.verifier); @@ -58,8 +56,6 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { vm.stopPrank(); } - // Collector revoke tests - function testCollector_Revoke(uint256 amount) public useGateway useCollector(amount) { escrow.thawCollector(users.verifier); skip(revokeCollectorThawingPeriod + 1); diff --git a/packages/horizon/test/escrow/deposit.t.sol b/packages/horizon/test/escrow/deposit.t.sol index 8e9839b9b..79b7c3616 100644 --- a/packages/horizon/test/escrow/deposit.t.sol +++ b/packages/horizon/test/escrow/deposit.t.sol @@ -7,6 +7,10 @@ import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowDepositTest is GraphEscrowTest { + /* + * TESTS + */ + function testDeposit_Tokens(uint256 amount) public useGateway useDeposit(amount) { (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); assertEq(indexerEscrowBalance, amount); diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index 1b952e1f1..60bf343e0 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -7,6 +7,10 @@ import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowThawTest is GraphEscrowTest { + /* + * TESTS + */ + function testThaw_Tokens(uint256 amount) public useGateway useDeposit(amount) { escrow.thaw(users.indexer, amount); diff --git a/packages/horizon/test/escrow/withdraw.t.sol b/packages/horizon/test/escrow/withdraw.t.sol index a541c818b..d2561f418 100644 --- a/packages/horizon/test/escrow/withdraw.t.sol +++ b/packages/horizon/test/escrow/withdraw.t.sol @@ -7,6 +7,10 @@ import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowWithdrawTest is GraphEscrowTest { + /* + * MODIFIERS + */ + modifier depositAndThawTokens(uint256 amount, uint256 thawAmount) { vm.assume(thawAmount > 0); vm.assume(amount > thawAmount); @@ -15,6 +19,10 @@ contract GraphEscrowWithdrawTest is GraphEscrowTest { _; } + /* + * TESTS + */ + function testWithdraw_Tokens( uint256 amount, uint256 thawAmount diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 70806f42f..dcbdf82fb 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -9,6 +9,10 @@ import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaki contract GraphPaymentsTest is HorizonStakingSharedTest { + /* + * TESTS + */ + function testCollect( uint256 amount, uint256 tokensDataService diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 2ee0d5764..363587d26 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -8,6 +8,10 @@ import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol abstract contract HorizonStakingSharedTest is GraphBaseTest { + /* + * MODIFIERS + */ + modifier useIndexer() { vm.startPrank(users.indexer); _; @@ -34,13 +38,9 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { _; } - /* Set Up */ - - function setUp() public virtual override { - GraphBaseTest.setUp(); - } - - /* Helpers */ + /* + * HELPERS + */ function _createProvision( address dataServiceAddress, diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index 1c3a91c95..383639ae7 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -8,6 +8,10 @@ import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaki contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { + /* + * MODIFIERS + */ + modifier useOperator() { vm.startPrank(users.indexer); staking.setOperator(users.operator, subgraphDataServiceAddress, true); @@ -63,6 +67,10 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { _; } + /* + * HELPERS + */ + function _stakeTo(address to, uint256 amount) internal { approve(address(staking), amount); staking.stakeTo(to, amount); diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index b779fce19..504164807 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingDelegateTest is HorizonStakingTest { + /* + * TESTS + */ + function testDelegate_Tokens( uint256 amount, uint256 delegationAmount diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 45f7850d7..40a01a490 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -9,6 +9,10 @@ import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; contract HorizonStakingUndelegateTest is HorizonStakingTest { + /* + * TESTS + */ + function testUndelegate_Tokens( uint256 amount, uint256 delegationAmount diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 9490c19cf..9c9e862f7 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -9,6 +9,10 @@ import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { + /* + * MODIFIERS + */ + modifier useUndelegate(uint256 shares) { vm.stopPrank(); vm.startPrank(users.delegator); @@ -27,6 +31,10 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { _; } + /* + * HELPERS + */ + function _withdrawDelegated(address verifier) private { staking.withdrawDelegated(users.indexer, verifier, address(0x0), 0, 0); } @@ -48,6 +56,10 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { return newIndexer; } + /* + * TESTS + */ + function testWithdrawDelegation_Tokens( uint256 delegationAmount, uint256 withdrawShares diff --git a/packages/horizon/test/staking/governance/governance.t.sol b/packages/horizon/test/staking/governance/governance.t.sol index 078d39ba2..430ad69a0 100644 --- a/packages/horizon/test/staking/governance/governance.t.sol +++ b/packages/horizon/test/staking/governance/governance.t.sol @@ -7,11 +7,19 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingGovernanceTest is HorizonStakingTest { + /* + * MODIFIERS + */ + modifier useGovernor { vm.startPrank(users.governor); _; } + /* + * TESTS + */ + function testGovernance_SetAllowedLockedVerifier() public useGovernor { staking.setAllowedLockedVerifier(subgraphDataServiceAddress, true); assertTrue(staking.isAllowedLockedVerifier(subgraphDataServiceAddress)); diff --git a/packages/horizon/test/staking/operator/locked.t.sol b/packages/horizon/test/staking/operator/locked.t.sol index 1f87004fb..e6eb8038d 100644 --- a/packages/horizon/test/staking/operator/locked.t.sol +++ b/packages/horizon/test/staking/operator/locked.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingOperatorLockedTest is HorizonStakingTest { + /* + * TESTS + */ + function testOperatorLocked_Set() public useIndexer useLockedVerifier(subgraphDataServiceAddress) { staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); diff --git a/packages/horizon/test/staking/operator/operator.t.sol b/packages/horizon/test/staking/operator/operator.t.sol index 034acdf8e..af06e0ef5 100644 --- a/packages/horizon/test/staking/operator/operator.t.sol +++ b/packages/horizon/test/staking/operator/operator.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingOperatorTest is HorizonStakingTest { + /* + * TESTS + */ + function testOperator_SetOperator() public useOperator { assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); } diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol index a187dfc6b..9f3438739 100644 --- a/packages/horizon/test/staking/provision/deprovision.t.sol +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingDeprovisionTest is HorizonStakingTest { + /* + * TESTS + */ + function testDeprovision_AllRequests( uint256 amount, uint32 maxVerifierCut, diff --git a/packages/horizon/test/staking/provision/locked.t.sol b/packages/horizon/test/staking/provision/locked.t.sol index a4c826254..642ba9a10 100644 --- a/packages/horizon/test/staking/provision/locked.t.sol +++ b/packages/horizon/test/staking/provision/locked.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingProvisionLockedTest is HorizonStakingTest { + /* + * TESTS + */ + function testProvisionLocked_Create( uint256 amount ) public useIndexer useStake(amount) useLockedVerifier(subgraphDataServiceAddress) { diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol index bb5f4792a..823a87d54 100644 --- a/packages/horizon/test/staking/provision/provision.t.sol +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingProvisionTest is HorizonStakingTest { + /* + * TESTS + */ + function testProvision_Create( uint256 amount, uint32 maxVerifierCut, diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 06c033888..3d1d803dc 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -7,12 +7,24 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingReprovisionTest is HorizonStakingTest { + /* + * VARIABLES + */ + address private newDataService = makeAddr("newDataService"); + /* + * HELPERS + */ + function _reprovision(uint256 tokens, uint256 nThawRequests) private { staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, tokens, nThawRequests); } + /* + * TESTS + */ + function testReprovision_MovingTokens( uint64 thawingPeriod, uint256 provisionAmount diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 5d1ab96d6..6cd2563f6 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingSlashTest is HorizonStakingTest { + /* + * MODIFIERS + */ + modifier useDelegationSlashing(bool enabled) { address msgSender; (, msgSender,) = vm.readCallers(); @@ -16,10 +20,18 @@ contract HorizonStakingSlashTest is HorizonStakingTest { _; } + /* + * HELPERS + */ + function _slash(uint256 amount, uint256 verifierCutAmount) private { staking.slash(users.indexer, amount, verifierCutAmount, subgraphDataServiceAddress); } + /* + * TESTS + */ + function testSlash_Tokens( uint256 amount, uint32 maxVerifierCut, diff --git a/packages/horizon/test/staking/stake/stake.t.sol b/packages/horizon/test/staking/stake/stake.t.sol index 048d6b4a7..9c1c69ad9 100644 --- a/packages/horizon/test/staking/stake/stake.t.sol +++ b/packages/horizon/test/staking/stake/stake.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingStakeTest is HorizonStakingTest { + /* + * TESTS + */ + function testStake_Tokens(uint256 amount) public useIndexer useStake(amount) { assertTrue(staking.getStake(address(users.indexer)) == amount); } diff --git a/packages/horizon/test/staking/stake/unstake.t.sol b/packages/horizon/test/staking/stake/unstake.t.sol index 56eac4bfb..140148d24 100644 --- a/packages/horizon/test/staking/stake/unstake.t.sol +++ b/packages/horizon/test/staking/stake/unstake.t.sol @@ -7,6 +7,10 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingUnstakeTest is HorizonStakingTest { + /* + * TESTS + */ + function testUnstake_Tokens( uint256 amount, uint32 maxVerifierCut, diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/thaw/thaw.t.sol index 6a4a475f0..1f747f7f0 100644 --- a/packages/horizon/test/staking/thaw/thaw.t.sol +++ b/packages/horizon/test/staking/thaw/thaw.t.sol @@ -7,6 +7,11 @@ import { IHorizonStakingTypes } from "../../../contracts/interfaces/internal/IHo import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingThawTest is HorizonStakingTest { + + /* + * TESTS + */ + function testThaw_Tokens( uint256 amount, uint64 thawingPeriod, From 352d7f1ea1f5e6a6efeb502e7f741b7fd6476b11 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 4 Jun 2024 15:08:33 -0300 Subject: [PATCH 103/343] chore: staking service provider tests --- .../horizon/test/escrow/GraphEscrow.t.sol | 2 +- .../horizon/test/payments/GraphPayments.t.sol | 2 +- .../HorizonStakingShared.t.sol | 4 +- .../horizon/test/staking/HorizonStaking.t.sol | 2 +- .../test/staking/delegation/delegate.t.sol | 4 +- .../test/staking/delegation/undelegate.t.sol | 4 +- .../test/staking/delegation/withdraw.t.sol | 2 +- .../serviceProvider/serviceProvider.t.sol | 107 ++++++++++++++++++ .../horizon/test/staking/slash/slash.t.sol | 4 +- packages/horizon/test/utils/Constants.sol | 1 + 10 files changed, 120 insertions(+), 12 deletions(-) create mode 100644 packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index bad127890..c94d221df 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -24,7 +24,7 @@ contract GraphEscrowTest is HorizonStakingSharedTest { modifier useDeposit(uint256 tokens) { vm.assume(tokens > 0); - vm.assume(tokens <= 10_000_000_000 ether); + vm.assume(tokens <= MAX_STAKING_TOKENS); _depositTokens(tokens); _; } diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index dcbdf82fb..637caba61 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -47,7 +47,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { uint256 amount, uint256 tokensDataService ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { - vm.assume(tokensDataService <= 10_000_000_000 ether); + vm.assume(tokensDataService <= MAX_STAKING_TOKENS); vm.assume(tokensDataService > amount); address escrowAddress = address(escrow); diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 363587d26..85cbbcbaf 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -20,12 +20,12 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { modifier assumeProvisionTokens(uint256 tokens) { vm.assume(tokens > MIN_PROVISION_SIZE); - vm.assume(tokens <= 10_000_000_000 ether); + vm.assume(tokens <= MAX_STAKING_TOKENS); _; } modifier useProvision(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) { - vm.assume(tokens <= 10_000_000_000 ether); + vm.assume(tokens <= MAX_STAKING_TOKENS); vm.assume(tokens > MIN_PROVISION_SIZE); vm.assume(maxVerifierCut <= MAX_MAX_VERIFIER_CUT); vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index 383639ae7..e74db32ce 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -51,7 +51,7 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { address msgSender; (, msgSender,) = vm.readCallers(); vm.assume(delegationAmount > MIN_DELEGATION); - vm.assume(delegationAmount <= 10_000_000_000 ether); + vm.assume(delegationAmount <= MAX_STAKING_TOKENS); vm.startPrank(users.delegator); _delegate(delegationAmount, subgraphDataServiceAddress); vm.startPrank(msgSender); diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 504164807..708c3bf5c 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -48,8 +48,8 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 amount, uint256 delegationAmount ) public useIndexer { - amount = bound(amount, MIN_PROVISION_SIZE, 10_000_000_000 ether); - delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + amount = bound(amount, MIN_PROVISION_SIZE, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 40a01a490..ec37d8112 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -80,8 +80,8 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 amount, uint256 delegationAmount ) public useIndexer { - amount = bound(amount, MIN_PROVISION_SIZE, 10_000_000_000 ether); - delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + amount = bound(amount, MIN_PROVISION_SIZE, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 9c9e862f7..8110c3d9a 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -160,7 +160,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { } function testWithdrawDelegation_LegacySubgraphService(uint256 delegationAmount) public useIndexer { - delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(subgraphDataServiceLegacyAddress, 10_000_000 ether, 0, MAX_THAWING_PERIOD); resetPrank(users.delegator); diff --git a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol new file mode 100644 index 000000000..9a1885e87 --- /dev/null +++ b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; +import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol"; + +contract HorizonStakingServiceProviderTest is HorizonStakingTest { + + /* + * TESTS + */ + + function testServiceProvider_GetProvider( + uint256 amount, + uint256 operatorAmount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + operatorAmount = bound(operatorAmount, 1, MAX_STAKING_TOKENS); + ServiceProvider memory sp = staking.getServiceProvider(users.indexer); + assertEq(sp.tokensStaked, amount); + assertEq(sp.tokensProvisioned, amount); + + staking.setOperator(users.operator, subgraphDataServiceAddress, true); + resetPrank(users.operator); + _stakeTo(users.indexer, operatorAmount); + sp = staking.getServiceProvider(users.indexer); + assertEq(sp.tokensStaked, amount + operatorAmount); + assertEq(sp.tokensProvisioned, amount); + } + + function testServiceProvider_GetDelegationFeeCut( + uint256 queryCut, + uint256 indexingCut, + uint256 rewardsCut + ) public useIndexer { + _setDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, queryCut); + _setDelegationFeeCut(IGraphPayments.PaymentTypes.IndexingFee, indexingCut); + _setDelegationFeeCut(IGraphPayments.PaymentTypes.IndexingRewards, rewardsCut); + + uint256 queryFeeCut = staking.getDelegationFeeCut(users.indexer, subgraphDataServiceAddress, IGraphPayments.PaymentTypes.QueryFee); + uint256 indexingFeeCut = staking.getDelegationFeeCut(users.indexer, subgraphDataServiceAddress, IGraphPayments.PaymentTypes.IndexingFee); + uint256 indexingRewardsCut = staking.getDelegationFeeCut(users.indexer, subgraphDataServiceAddress, IGraphPayments.PaymentTypes.IndexingRewards); + assertEq(queryFeeCut, queryCut); + assertEq(indexingFeeCut, indexingCut); + assertEq(indexingRewardsCut, rewardsCut); + } + + function testServiceProvider_GetProvision( + uint256 amount, + uint256 thawAmount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + thawAmount = bound(thawAmount, 1, amount); + Provision memory p = staking.getProvision(users.indexer, subgraphDataServiceAddress); + assertEq(p.tokens, amount); + assertEq(p.tokensThawing, 0); + assertEq(p.sharesThawing, 0); + assertEq(p.maxVerifierCut, maxVerifierCut); + assertEq(p.thawingPeriod, thawingPeriod); + assertEq(p.createdAt, block.timestamp); + assertEq(p.maxVerifierCutPending, maxVerifierCut); + assertEq(p.thawingPeriodPending, thawingPeriod); + + staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + p = staking.getProvision(users.indexer, subgraphDataServiceAddress); + assertEq(p.tokensThawing, thawAmount); + } + + function testServiceProvider_GetTokensAvailable( + uint256 amount, + uint256 thawAmount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + thawAmount = bound(thawAmount, 1, amount); + uint256 tokensAvailable = staking.getTokensAvailable(users.indexer, subgraphDataServiceAddress, 0); + assertEq(tokensAvailable, amount); + + staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + tokensAvailable = staking.getTokensAvailable(users.indexer, subgraphDataServiceAddress, 0); + assertEq(tokensAvailable, amount - thawAmount); + } + + function testServiceProvider_GetTokensAvailable_WithDelegation( + uint256 amount, + uint256 delegationAmount, + uint32 delegationRatio + ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { + uint256 tokensAvailable = staking.getTokensAvailable(users.indexer, subgraphDataServiceAddress, delegationRatio); + + uint256 tokensDelegatedMax = amount * (uint256(delegationRatio)); + uint256 tokensDelegatedCapacity = delegationAmount > tokensDelegatedMax ? tokensDelegatedMax : delegationAmount; + assertEq(tokensAvailable, amount + tokensDelegatedCapacity); + } + + function testServiceProvider_GetProviderTokensAvailable( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { + uint256 providerTokensAvailable = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(providerTokensAvailable, amount); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 6cd2563f6..50f4d1e88 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -59,7 +59,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 verifierCutAmount, uint256 delegationAmount ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(false) { - delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); @@ -86,7 +86,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 verifierCutAmount, uint256 delegationAmount ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(true) { - delegationAmount = bound(delegationAmount, MIN_DELEGATION, 10_000_000_000 ether); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index 00c253bbd..46445b039 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.26; abstract contract Constants { uint256 internal constant MAX_PPM = 1000000; // 100% in parts per million uint256 internal constant delegationFeeCut = 100000; // 10% in parts per million + uint256 internal constant MAX_STAKING_TOKENS = 10_000_000_000 ether; // GraphEscrow parameters uint256 internal constant withdrawEscrowThawingPeriod = 60; uint256 internal constant revokeCollectorThawingPeriod = 60; From cec263910cc90e2dfa692961768d0d04c32b89ff Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 4 Jun 2024 15:33:23 -0300 Subject: [PATCH 104/343] fix: vm.assume rejecting too many options --- packages/horizon/test/payments/GraphPayments.t.sol | 3 +-- packages/horizon/test/staking/delegation/undelegate.t.sol | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 637caba61..0a53f5e20 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -47,8 +47,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { uint256 amount, uint256 tokensDataService ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { - vm.assume(tokensDataService <= MAX_STAKING_TOKENS); - vm.assume(tokensDataService > amount); + tokensDataService = bound(tokensDataService, amount + 1, MAX_STAKING_TOKENS); address escrowAddress = address(escrow); mint(escrowAddress, amount); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index ec37d8112..9b74f729d 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -44,7 +44,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); - vm.assume(overDelegationShares > delegation.shares); + overDelegationShares = bound(overDelegationShares, delegation.shares + 1, MAX_STAKING_TOKENS); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInsufficientShares(uint256,uint256)", From c26e06bc88d113db1352027fb6c9564450d85581 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 4 Jun 2024 15:33:46 -0300 Subject: [PATCH 105/343] chore: add set staking counterpart address --- .../test/staking/governance/governance.t.sol | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/horizon/test/staking/governance/governance.t.sol b/packages/horizon/test/staking/governance/governance.t.sol index 430ad69a0..71cd1bb49 100644 --- a/packages/horizon/test/staking/governance/governance.t.sol +++ b/packages/horizon/test/staking/governance/governance.t.sol @@ -66,4 +66,19 @@ contract HorizonStakingGovernanceTest is HorizonStakingTest { vm.expectRevert(expectedError); staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); } + + function testGovernance_SetCounterpartStakingAddress(address counterpartStakingAddress) public useGovernor { + staking.setCounterpartStakingAddress(counterpartStakingAddress); + bytes32 storedValue = vm.load(address(staking), bytes32(uint256(24))); + address storedCounterpartStakingAddress = address(uint160(uint256(storedValue))); + assertEq(storedCounterpartStakingAddress, counterpartStakingAddress); + } + + function testGovernance_RevertWhen_SetCounterpartStakingAddress_NotGovernor( + address counterpartStakingAddress + ) public useIndexer { + bytes memory expectedError = abi.encodeWithSignature("ManagedOnlyGovernor()"); + vm.expectRevert(expectedError); + staking.setCounterpartStakingAddress(counterpartStakingAddress); + } } \ No newline at end of file From d109bbc390cc4cb729bd66c3cbd27f77608449d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 4 Jun 2024 16:19:04 -0300 Subject: [PATCH 106/343] test: add tests for linked list library MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../extensions/DataServiceFees.sol | 7 +- .../contracts/libraries/LinkedList.sol | 30 ++- .../contracts/staking/HorizonStaking.sol | 7 +- packages/horizon/test/data-service/DataS.sol | 83 -------- packages/horizon/test/data-service/test.t.sol | 30 --- .../horizon/test/libraries/LinkedList.t.sol | 180 ++++++++++++++++++ .../horizon/test/libraries/LinkedList.tree | 34 ++++ .../test/libraries/ListImplementation.sol | 48 +++++ .../horizon/test/staking/HorizonStaking.t.sol | 2 +- 9 files changed, 291 insertions(+), 130 deletions(-) delete mode 100644 packages/horizon/test/data-service/DataS.sol delete mode 100644 packages/horizon/test/data-service/test.t.sol create mode 100644 packages/horizon/test/libraries/LinkedList.t.sol create mode 100644 packages/horizon/test/libraries/LinkedList.tree create mode 100644 packages/horizon/test/libraries/ListImplementation.sol diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 000a72d09..1c81da824 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -79,15 +79,14 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat * @param _claimId The id of the stake claim * @param _acc The accumulator for the stake claims being processed * @return Wether the stake claim is still locked, indicating that the traversal should continue or stop. - * @return Wether the stake claim should be deleted * @return The updated accumulator data */ - function _processStakeClaim(bytes32 _claimId, bytes memory _acc) private returns (bool, bool, bytes memory) { + function _processStakeClaim(bytes32 _claimId, bytes memory _acc) private returns (bool, bytes memory) { StakeClaim memory claim = _getStakeClaim(_claimId); // early exit if (claim.releaseAt > block.timestamp) { - return (true, false, LinkedList.NULL_BYTES); + return (true, LinkedList.NULL_BYTES); } // decode @@ -99,7 +98,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat // encode _acc = abi.encode(tokensClaimed + claim.tokens, serviceProvider); - return (false, true, _acc); + return (false, _acc); } /** diff --git a/packages/horizon/contracts/libraries/LinkedList.sol b/packages/horizon/contracts/libraries/LinkedList.sol index 99bf682ea..7a49d0c5a 100644 --- a/packages/horizon/contracts/libraries/LinkedList.sol +++ b/packages/horizon/contracts/libraries/LinkedList.sol @@ -11,6 +11,7 @@ pragma solidity 0.8.26; * - they must be represented by a unique bytes32 id * - the id of the item must not be bytes32(0) * - each item must have a reference to the next item in the list + * - the list cannot have more than `MAX_ITEMS` items * * A contract using this library must store: * - a LinkedList.List to keep track of the list metadata @@ -34,20 +35,36 @@ library LinkedList { /// @notice Empty bytes constant bytes internal constant NULL_BYTES = bytes(""); + /// @notice Maximum amount of items allowed in the list + uint256 internal constant MAX_ITEMS = 10_000; + /** * @notice Thrown when trying to remove an item from an empty list */ error LinkedListEmptyList(); + /** + * @notice Thrown when trying to add an item to a list that has reached the maximum number of elements + */ + error LinkedListMaxElementsExceeded(); + + /** + * @notice Thrown when trying to traverse a list with more iterations than elements + */ + error LinkedListInvalidIterations(); + /** * @notice Adds an item to the list. * The item is added to the end of the list. * @dev Note that this function will not take care of linking the * old tail to the new item. The caller should take care of this. + * It will also not ensure id uniqueness. + * @dev There is a maximum number of elements that can be added to the list. * @param self The list metadata * @param id The id of the item to add */ function add(List storage self, bytes32 id) internal { + require(self.count < MAX_ITEMS, LinkedListMaxElementsExceeded()); self.tail = id; self.nonce += 1; if (self.count == 0) self.head = id; @@ -96,11 +113,13 @@ library LinkedList { function traverse( List storage self, function(bytes32) view returns (bytes32) getNextItem, - function(bytes32, bytes memory) returns (bool, bool, bytes memory) processItem, + function(bytes32, bytes memory) returns (bool, bytes memory) processItem, function(bytes32) deleteItem, bytes memory processInitAcc, uint256 iterations ) internal returns (uint256, bytes memory) { + require(iterations <= self.count, LinkedListInvalidIterations()); + uint256 itemCount = 0; bool traverseAll = iterations == 0; bytes memory acc = processInitAcc; @@ -108,17 +127,12 @@ library LinkedList { bytes32 cursor = self.head; while (cursor != bytes32(0) && (traverseAll || iterations > 0)) { - (bool shouldBreak, bool shouldDelete, bytes memory acc_) = processItem(cursor, acc); + (bool shouldBreak, bytes memory acc_) = processItem(cursor, acc); if (shouldBreak) break; acc = acc_; - - if (shouldDelete) { - cursor = self.remove(getNextItem, deleteItem); - } else { - cursor = getNextItem(cursor); - } + cursor = self.remove(getNextItem, deleteItem); if (!traverseAll) iterations--; itemCount++; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 3ffc3e4b6..c8d7f437f 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -886,15 +886,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param _thawRequestId The ID of the current thaw request * @param _acc The accumulator data for the thaw requests being fulfilled * @return Wether the thaw request is still thawing, indicating that the traversal should continue or stop. - * @return Wether the thaw request should be deleted * @return The updated accumulator data */ - function _fulfillThawRequest(bytes32 _thawRequestId, bytes memory _acc) private returns (bool, bool, bytes memory) { + function _fulfillThawRequest(bytes32 _thawRequestId, bytes memory _acc) private returns (bool, bytes memory) { ThawRequest storage thawRequest = _thawRequests[_thawRequestId]; // early exit if (thawRequest.thawingUntil > block.timestamp) { - return (true, false, LinkedList.NULL_BYTES); + return (true, LinkedList.NULL_BYTES); } // decode @@ -912,7 +911,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // encode _acc = abi.encode(tokensThawed, tokensThawing, sharesThawing); - return (false, true, _acc); + return (false, _acc); } /** diff --git a/packages/horizon/test/data-service/DataS.sol b/packages/horizon/test/data-service/DataS.sol deleted file mode 100644 index 3ed3aa3ba..000000000 --- a/packages/horizon/test/data-service/DataS.sol +++ /dev/null @@ -1,83 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; -import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; -import { IDataServiceFees } from "../../contracts/data-service/interfaces/IDataServiceFees.sol"; - -import { LinkedList } from "../../contracts/libraries/LinkedList.sol"; -import "forge-std/console.sol"; - -contract DataS { - using LinkedList for LinkedList.List; - struct StakeClaim { - uint256 tokens; - uint256 releaseAt; - bytes32 nextClaim; - } - - mapping(bytes32 claimId => StakeClaim tokens) public claims; - /// @notice Service providers registered in the data service - mapping(address serviceProvider => LinkedList.List list) public claimsLists2; - - constructor() {} - - function lockStake(address sp, uint256 tokens, uint256 unlock) external { - _lockStake(sp, tokens, unlock); - } - - function releaseStake2(address _serviceProvider, uint256 _n) external { - LinkedList.List storage claimsList2 = claimsLists2[_serviceProvider]; - (uint256 count, bytes memory acc) = claimsList2.traverse( - _getNextStakeClaim, - _processStakeClaim, - _deleteStakeClaim, - abi.encode(0), - _n - ); - - uint256 tokens = abi.decode(acc, (uint256)); - - console.log("count: %s", count); - console.log("tokens accumualted: %s", tokens); - } - - function _lockStake(address _serviceProvider, uint256 _tokens, uint256 _unlockTimestamp) internal { - LinkedList.List storage claimsList = claimsLists2[_serviceProvider]; - bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce); - claims[claimId] = StakeClaim({ tokens: _tokens, releaseAt: _unlockTimestamp, nextClaim: bytes32(0) }); - console.logBytes32(claimId); - claims[claimsList.tail].nextClaim = claimId; - - claimsList.tail = claimId; - claimsList.nonce += 1; - if (claimsList.head == bytes32(0)) claimsList.head = claimId; - } - - function _buildStakeClaimId(address _serviceProvider, uint256 _nonce) private view returns (bytes32) { - return keccak256(abi.encodePacked(address(this), _serviceProvider, _nonce)); - } - - function _getStakeClaim(bytes32 _claimId) private view returns (StakeClaim memory) { - StakeClaim memory claim = claims[_claimId]; - return claim; - } - - function _getNextStakeClaim(bytes32 _claimId) private view returns (bytes32) { - StakeClaim memory claim = claims[_claimId]; - return claim.nextClaim; - } - - function _deleteStakeClaim(bytes32 _claimId) private { - delete claims[_claimId]; - } - - function _processStakeClaim( - bytes32 _claimId, - bytes memory acc_ - ) private returns (bool, bool, bytes memory) { - StakeClaim memory claim = _getStakeClaim(_claimId); - if (block.timestamp < claim.releaseAt) return (true, false, LinkedList.NULL_BYTES); - - uint256 tokensAcc = abi.decode(acc_, (uint256)); - return (block.timestamp < claim.releaseAt, true, abi.encode(tokensAcc + claim.tokens)); - } -} diff --git a/packages/horizon/test/data-service/test.t.sol b/packages/horizon/test/data-service/test.t.sol deleted file mode 100644 index ddedca6c7..000000000 --- a/packages/horizon/test/data-service/test.t.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { DataS } from "./DataS.sol"; - -// import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaking.t.sol"; - -contract DataServiceTest is Test { - DataS ds = new DataS(); - address sp1 = makeAddr("sp1"); - - function setUp() public { - ds.lockStake(sp1, 10 wei, block.timestamp + 100); - ds.lockStake(sp1, 1 wei, block.timestamp + 200); - ds.lockStake(sp1, 1 wei, block.timestamp + 300); - ds.lockStake(sp1, 1 wei, block.timestamp + 400); - vm.warp(block.timestamp + 2000); - console.log("done setup"); - } - - function test_test() public { - assertTrue(true); - } - - function test_release() public { - ds.releaseStake2(sp1, 0); - } -} diff --git a/packages/horizon/test/libraries/LinkedList.t.sol b/packages/horizon/test/libraries/LinkedList.t.sol new file mode 100644 index 000000000..63229fb2c --- /dev/null +++ b/packages/horizon/test/libraries/LinkedList.t.sol @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import "forge-std/console.sol"; +import {Test} from "forge-std/Test.sol"; +import {LinkedList} from "../../contracts/libraries/LinkedList.sol"; + +import {ListImplementation} from "./ListImplementation.sol"; + +contract LinkedListTest is Test, ListImplementation { + using LinkedList for LinkedList.List; + + function setUp() internal { + list = LinkedList.List({head: bytes32(0), tail: bytes32(0), nonce: 0, count: 0}); + } + + function test_Add_GivenTheListIsEmpty() external { + _assert_addItem(_buildItemId(list.nonce), 0); + } + + function test_Add_GivenTheListIsNotEmpty() external { + // init list + _assert_addItem(_buildItemId(list.nonce), 0); + + // add to a non empty list + _assert_addItem(_buildItemId(list.nonce), 1); + } + + function test_Add_RevertGiven_TheListIsAtMaxSize() external { + for (uint256 i = 0; i < LinkedList.MAX_ITEMS; i++) { + bytes32 id = _buildItemId(list.nonce); + _addItemToList(list, id, i); + } + + vm.expectRevert(LinkedList.LinkedListMaxElementsExceeded.selector); + list.add(_buildItemId(list.nonce)); + } + + function test_Remove_RevertGiven_TheListIsEmpty() external { + vm.expectRevert(LinkedList.LinkedListEmptyList.selector); + list.remove(_getNextItem, _deleteItem); + } + + function test_Remove_GivenTheListIsNotEmpty() external { + _assert_addItem(_buildItemId(list.nonce), 0); + _assert_removeItem(); + } + + function test_TraverseGivenTheListIsEmpty() external { + _assert_traverseList(_processItemAddition, abi.encode(0), 0, abi.encode(0)); + } + + modifier givenTheListIsNotEmpty() { + for (uint256 i = 0; i < LIST_LENGTH; i++) { + bytes32 id = _buildItemId(list.nonce); + _assert_addItem(id, i); + } + _; + } + + function test_TraverseWhenIterationsAreNotSpecified() external givenTheListIsNotEmpty { + // calculate sum of all item idexes - it's what _processItemAddition does + uint256 sum = 0; + for (uint256 i = 0; i < list.count; i++) { + sum += i; + } + _assert_traverseList(_processItemAddition, abi.encode(0), 0, abi.encode(sum)); + } + + function test_TraverseWhenIterationsAreSpecified(uint256 n) external givenTheListIsNotEmpty { + vm.assume(n > 0); + vm.assume(n < LIST_LENGTH); + uint256 sum = 0; + for (uint256 i = 0; i < n; i++) { + sum += i; + } + _assert_traverseList(_processItemAddition, abi.encode(0), n, abi.encode(sum)); + } + + function test_TraverseWhenIterationsAreInvalid() external givenTheListIsNotEmpty { + uint256 n = LIST_LENGTH + 1; + uint256 sum = 0; + for (uint256 i = 0; i < n; i++) { + sum += i; + } + vm.expectRevert(LinkedList.LinkedListInvalidIterations.selector); + _assert_traverseList(_processItemAddition, abi.encode(0), n, abi.encode(sum)); + } + + // -- Assertions -- + function _assert_addItem(bytes32 id, uint256 idIndex) internal { + uint256 beforeNonce = list.nonce; + uint256 beforeCount = list.count; + bytes32 beforeHead = list.head; + + ids[idIndex] = _addItemToList(list, id, idIndex); + + uint256 afterNonce = list.nonce; + uint256 afterCount = list.count; + bytes32 afterTail = list.tail; + bytes32 afterHead = list.head; + + assertEq(afterNonce, beforeNonce + 1); + assertEq(afterCount, beforeCount + 1); + + if (beforeCount == 0) { + assertEq(afterHead, id); + } else { + assertEq(afterHead, beforeHead); + } + assertEq(afterTail, id); + } + + function _assert_removeItem() internal { + uint256 beforeNonce = list.nonce; + uint256 beforeCount = list.count; + bytes32 beforeTail = list.tail; + bytes32 beforeHead = list.head; + + Item memory beforeHeadItem = items[beforeHead]; + + list.remove(_getNextItem, _deleteItem); + + uint256 afterNonce = list.nonce; + uint256 afterCount = list.count; + bytes32 afterTail = list.tail; + bytes32 afterHead = list.head; + + assertEq(afterNonce, beforeNonce); + assertEq(afterCount, beforeCount - 1); + + if (afterCount == 0) { + assertEq(afterTail, bytes32(0)); + } else { + assertEq(afterTail, beforeTail); + } + assertEq(afterHead, beforeHeadItem.next); + } + + function _assert_traverseList( + function(bytes32, bytes memory) internal returns (bool, bytes memory) _processItem, + bytes memory _initAcc, + uint256 _n, + bytes memory _expectedAcc + ) internal { + uint256 beforeNonce = list.nonce; + uint256 beforeCount = list.count; + bytes32 beforeTail = list.tail; + bytes32 beforeHead = list.head; + + // calculate after head item + bytes32 calcAfterHead = beforeHead; + if (_n != 0) { + for (uint256 i = 0; i < _n; i++) { + calcAfterHead = _getNextItem(calcAfterHead); + } + } + + (uint256 processedCount, bytes memory acc) = + list.traverse(_getNextItem, _processItem, _deleteItem, _initAcc, _n); + uint256 afterNonce = list.nonce; + uint256 afterCount = list.count; + bytes32 afterTail = list.tail; + bytes32 afterHead = list.head; + + assertEq(processedCount, _n == 0 ? beforeCount : _n); + assertEq(acc, _expectedAcc); + + assertEq(afterNonce, beforeNonce); + assertEq(afterCount, _n == 0 ? 0 : beforeCount - _n); + + if (_n == 0) { + assertEq(afterTail, bytes32(0)); + assertEq(afterHead, bytes32(0)); + } else { + assertEq(afterTail, beforeTail); + assertEq(afterHead, calcAfterHead); + } + } +} diff --git a/packages/horizon/test/libraries/LinkedList.tree b/packages/horizon/test/libraries/LinkedList.tree new file mode 100644 index 000000000..dc5143cb4 --- /dev/null +++ b/packages/horizon/test/libraries/LinkedList.tree @@ -0,0 +1,34 @@ +LinkedListTest::add_ +├── given the list is empty +│ ├── it should have a count of 1 and nonce of 1 +│ ├── it should have the tail set to the element +│ └── it should have the head set to the element +├── given the list is not empty +│ ├── it should have a count of 2 and nonce of 2 +│ ├── it should have the tail set to the new element +│ └── it should have the head set to the old element +└── given the list is at max size + └── it should revert + +LinkedListTest::remove_ +├── given the list is empty +│ └── it should revert +└── given the list is not empty + ├── it should have a count of 0 + ├── it should have the tail set to bytes32(0) + └── it should have the head set to bytes32(0) + +LinkedListTest::traverse +├── given the list is empty +│ ├── it should return zero processed elements +│ └── it should return accumulator value same as the initial value +└── given the list is not empty + └── when iterations are not specified + │ ├── it should return process all elements + │ └── it should return accumulator value equal to the processed value + └── when iterations are specified + │ ├── it should return process all elements + │ └── it should return accumulator value equal to the processed value + └── when iterations are invalid + ├── it should return process all elements + └── it should return accumulator value equal to the processed value diff --git a/packages/horizon/test/libraries/ListImplementation.sol b/packages/horizon/test/libraries/ListImplementation.sol new file mode 100644 index 000000000..0ec024435 --- /dev/null +++ b/packages/horizon/test/libraries/ListImplementation.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import { LinkedList } from "../../contracts/libraries/LinkedList.sol"; + +contract ListImplementation { + using LinkedList for LinkedList.List; + + uint256 constant LIST_LENGTH = 100; + + struct Item { + uint256 data; + bytes32 next; + } + + LinkedList.List public list; + mapping(bytes32 id => Item data) public items; + bytes32[LIST_LENGTH] public ids; + + function _addItemToList(LinkedList.List storage _list, bytes32 _id, uint256 _data) internal returns (bytes32) { + items[_id] = Item({ data: _data, next: bytes32(0) }); + if (_list.count != 0) { + items[_list.tail].next = _id; + } + _list.add(_id); + return _id; + } + + function _deleteItem(bytes32 _id) internal { + delete items[_id]; + } + + function _getNextItem(bytes32 _id) internal view returns (bytes32) { + return items[_id].next; + } + + function _processItemAddition(bytes32 _id, bytes memory _acc) internal returns (bool, bytes memory) { + uint256 sum = abi.decode(_acc, (uint256)); + sum += items[_id].data; + return (false, abi.encode(sum)); // dont break, do delete + } + + function _buildItemId(uint256 nonce) internal view returns (bytes32) { + // use block.number to salt the id generation to avoid + // accidentally using dirty state on repeat tests + return bytes32(keccak256(abi.encode(nonce, block.number))); + } +} diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index e74db32ce..e6ecc555c 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -43,7 +43,7 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { vm.assume(amount > 0); _createThawRequest(amount); skip(thawingPeriod + 1); - _deprovision(amount); + _deprovision(0); _; } From c8c4eeb8ce0f5167c46b92b5a9b24ae891e6da81 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 4 Jun 2024 16:13:36 -0300 Subject: [PATCH 107/343] chore: added more staking service provider tests --- .../serviceProvider/serviceProvider.t.sol | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol index 9a1885e87..5461698e3 100644 --- a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol +++ b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol @@ -102,6 +102,38 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { uint256 delegationAmount ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { uint256 providerTokensAvailable = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + // Should not include delegated tokens assertEq(providerTokensAvailable, amount); } + + function testServiceProvider_HasStake( + uint256 amount + ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) { + assertTrue(staking.hasStake(users.indexer)); + + _createThawRequest(amount); + skip(MAX_THAWING_PERIOD + 1); + _deprovision(0); + staking.unstake(amount); + + assertFalse(staking.hasStake(users.indexer)); + } + + function testServiceProvider_GetIndexerStakedTokens( + uint256 amount + ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) { + assertEq(staking.getIndexerStakedTokens(users.indexer), amount); + + _createThawRequest(amount); + // Does not discount thawing tokens + assertEq(staking.getIndexerStakedTokens(users.indexer), amount); + + skip(MAX_THAWING_PERIOD + 1); + _deprovision(0); + // Does not discount thawing tokens + assertEq(staking.getIndexerStakedTokens(users.indexer), amount); + + staking.unstake(amount); + assertEq(staking.getIndexerStakedTokens(users.indexer), 0); + } } \ No newline at end of file From 05de8aa8826e747fe3df504d93a5f7079ec25954 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 4 Jun 2024 19:05:36 -0300 Subject: [PATCH 108/343] fix: remove MIN_PROVISION_SIZE from horizon staking --- .../contracts/staking/HorizonStaking.sol | 5 +-- .../HorizonStakingShared.t.sol | 4 +-- .../horizon/test/staking/HorizonStaking.t.sol | 4 +-- .../test/staking/allocation/allocation.t.sol | 0 .../test/staking/delegation/delegate.t.sol | 2 +- .../test/staking/delegation/undelegate.t.sol | 4 +-- .../test/staking/provision/deprovision.t.sol | 18 +++-------- .../test/staking/provision/provision.t.sol | 14 ++------- .../test/staking/provision/reprovision.t.sol | 12 +++---- .../horizon/test/staking/slash/slash.t.sol | 31 ++++++++++++++++--- packages/horizon/test/staking/thaw/thaw.t.sol | 2 ++ packages/horizon/test/utils/Constants.sol | 3 +- 12 files changed, 51 insertions(+), 48 deletions(-) create mode 100644 packages/horizon/test/staking/allocation/allocation.t.sol diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index c8d7f437f..4caa10a96 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -34,9 +34,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /// It is equivalent to 100% in parts-per-million uint32 private constant MAX_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM); - /// @dev Minimum size of a provision - uint256 private constant MIN_PROVISION_SIZE = 1e18; - /// @dev Fixed point precision uint256 private constant FIXED_POINT_PRECISION = 1e18; @@ -599,7 +596,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint32 _maxVerifierCut, uint64 _thawingPeriod ) private { - require(_tokens >= MIN_PROVISION_SIZE, HorizonStakingInsufficientTokens(_tokens, MIN_PROVISION_SIZE)); + require(_tokens > 0, HorizonStakingInvalidZeroTokens()); require( _maxVerifierCut <= MAX_MAX_VERIFIER_CUT, HorizonStakingInvalidMaxVerifierCut(_maxVerifierCut, MAX_MAX_VERIFIER_CUT) diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 85cbbcbaf..1f1ea3310 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -19,14 +19,14 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { } modifier assumeProvisionTokens(uint256 tokens) { - vm.assume(tokens > MIN_PROVISION_SIZE); + vm.assume(tokens > 0); vm.assume(tokens <= MAX_STAKING_TOKENS); _; } modifier useProvision(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) { vm.assume(tokens <= MAX_STAKING_TOKENS); - vm.assume(tokens > MIN_PROVISION_SIZE); + vm.assume(tokens > 0); vm.assume(maxVerifierCut <= MAX_MAX_VERIFIER_CUT); vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); _createProvision(subgraphDataServiceAddress, tokens, maxVerifierCut, thawingPeriod); diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index e6ecc555c..bb3703b34 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -21,14 +21,14 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { } modifier useStake(uint256 amount) { - vm.assume(amount > MIN_PROVISION_SIZE); + vm.assume(amount > 0); approve(address(staking), amount); staking.stake(amount); _; } modifier useStakeTo(address to, uint256 amount) { - vm.assume(amount > MIN_PROVISION_SIZE); + vm.assume(amount > 0); _stakeTo(to, amount); _; } diff --git a/packages/horizon/test/staking/allocation/allocation.t.sol b/packages/horizon/test/staking/allocation/allocation.t.sol new file mode 100644 index 000000000..e69de29bb diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 708c3bf5c..c254756fc 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -48,7 +48,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 amount, uint256 delegationAmount ) public useIndexer { - amount = bound(amount, MIN_PROVISION_SIZE, MAX_STAKING_TOKENS); + amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 9b74f729d..5dcc85183 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -44,7 +44,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); - overDelegationShares = bound(overDelegationShares, delegation.shares + 1, MAX_STAKING_TOKENS); + overDelegationShares = bound(overDelegationShares, delegation.shares + 1, MAX_STAKING_TOKENS + 1); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInsufficientShares(uint256,uint256)", @@ -80,7 +80,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 amount, uint256 delegationAmount ) public useIndexer { - amount = bound(amount, MIN_PROVISION_SIZE, MAX_STAKING_TOKENS); + amount = bound(amount, 1, MAX_STAKING_TOKENS); delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol index 9f3438739..fbb9d0fc4 100644 --- a/packages/horizon/test/staking/provision/deprovision.t.sol +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -30,24 +30,16 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { uint64 thawingPeriod, uint256 thawAmount ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - thawAmount = bound(thawAmount, MIN_DELEGATION, amount); + vm.assume(amount > 1); + thawAmount = bound(thawAmount, 2, amount); uint256 thawAmount1 = thawAmount / 2; - bytes32 thawRequestId = _createThawRequest(thawAmount1); - bytes32 thawRequestId2 = _createThawRequest(thawAmount - thawAmount1); - skip(thawingPeriod + 1); - - console.log("thawAmount1: ", thawAmount1); - console.log("thawAmount2: ", thawAmount - thawAmount1); + _createThawRequest(thawAmount1); + _createThawRequest(thawAmount - thawAmount1); - ThawRequest memory thawRequest1 = staking.getThawRequest(thawRequestId); - ThawRequest memory thawRequest2 = staking.getThawRequest(thawRequestId2); - console.log("Thaw request 1 shares: ", thawRequest1.shares); - console.log("Thaw request 2 shares: ", thawRequest2.shares); + skip(thawingPeriod + 1); - console.log("Idle stake before deprovision: ", staking.getIdleStake(users.indexer)); _deprovision(1); uint256 idleStake = staking.getIdleStake(users.indexer); - console.log("Idle stake after deprovision: ", idleStake); assertEq(idleStake, thawAmount1); } diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol index 823a87d54..fc941ec7f 100644 --- a/packages/horizon/test/staking/provision/provision.t.sol +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -20,22 +20,16 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { assertEq(provisionTokens, amount); } - function testProvision_RevertWhen_InsufficientTokens(uint256 amount) public useIndexer useStake(1000 ether) { - amount = bound(amount, 0, MIN_PROVISION_SIZE - 1); - bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInsufficientTokens(uint256,uint256)", - amount, - MIN_PROVISION_SIZE - ); + function testProvision_RevertWhen_ZeroTokens() public useIndexer useStake(1000 ether) { + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); vm.expectRevert(expectedError); - staking.provision(users.indexer, subgraphDataServiceAddress, amount, 0, 0); + staking.provision(users.indexer, subgraphDataServiceAddress, 0, 0, 0); } function testProvision_RevertWhen_MaxVerifierCutTooHigh( uint256 amount, uint32 maxVerifierCut ) public useIndexer useStake(amount) { - vm.assume(amount > MIN_PROVISION_SIZE); vm.assume(maxVerifierCut > MAX_MAX_VERIFIER_CUT); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInvalidMaxVerifierCut(uint32,uint32)", @@ -50,7 +44,6 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { uint256 amount, uint64 thawingPeriod ) public useIndexer useStake(amount) { - vm.assume(amount > MIN_PROVISION_SIZE); vm.assume(thawingPeriod > MAX_THAWING_PERIOD); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInvalidThawingPeriod(uint64,uint64)", @@ -65,7 +58,6 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { uint256 amount, uint256 provisionTokens ) public useIndexer useStake(amount) { - vm.assume(amount > MIN_PROVISION_SIZE); vm.assume(provisionTokens > amount); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInsufficientIdleStake(uint256,uint256)", diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 3d1d803dc..5d7ed8068 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -36,7 +36,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { { skip(thawingPeriod + 1); - _createProvision(newDataService, MIN_PROVISION_SIZE, 0, thawingPeriod); + _createProvision(newDataService, 1 ether, 0, thawingPeriod); // nThawRequests == 0 reprovisions all thaw requests _reprovision(provisionAmount, 0); @@ -44,7 +44,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { assertEq(idleStake, 0 ether); uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, newDataService); - assertEq(provisionTokens, provisionAmount + MIN_PROVISION_SIZE); + assertEq(provisionTokens, provisionAmount + 1 ether); } function testReprovision_OperatorMovingTokens( @@ -64,13 +64,13 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { // Switch back to operator vm.startPrank(users.operator); - _createProvision(newDataService, MIN_PROVISION_SIZE, 0, thawingPeriod); + _createProvision(newDataService, 1 ether, 0, thawingPeriod); _reprovision(provisionAmount, 0); uint256 idleStake = staking.getIdleStake(users.indexer); assertEq(idleStake, 0 ether); uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, newDataService); - assertEq(provisionTokens, provisionAmount + MIN_PROVISION_SIZE); + assertEq(provisionTokens, provisionAmount + 1 ether); } function testReprovision_RevertWhen_OperatorNotAuthorizedForNewDataService( @@ -83,7 +83,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { { // Switch to indexer to create new provision vm.startPrank(users.indexer); - _createProvision(newDataService, MIN_PROVISION_SIZE, 0, 0); + _createProvision(newDataService, 1 ether, 0, 0); // Switch back to operator vm.startPrank(users.operator); @@ -116,7 +116,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { { vm.assume(thawingPeriod > 0); - _createProvision(newDataService, MIN_PROVISION_SIZE, 0, thawingPeriod); + _createProvision(newDataService, 1 ether, 0, thawingPeriod); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInsufficientIdleStake(uint256,uint256)", diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 50f4d1e88..758ebc1cf 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -39,9 +39,9 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 verifierCutAmount ) public useIndexer useProvision(amount, maxVerifierCut, 0) { verifierCutAmount = bound(verifierCutAmount, 0, maxVerifierCut); - - // TODO: when slashing for low amounts there's an arithmetic underflow - slashAmount = bound(slashAmount, MIN_PROVISION_SIZE, amount); + slashAmount = bound(slashAmount, 1, amount); + uint256 maxVerifierTokens = (slashAmount * maxVerifierCut) / MAX_PPM; + vm.assume(verifierCutAmount <= maxVerifierTokens); vm.startPrank(subgraphDataServiceAddress); _slash(slashAmount, verifierCutAmount); @@ -53,6 +53,24 @@ contract HorizonStakingSlashTest is HorizonStakingTest { assertEq(verifierTokens, verifierCutAmount); } + function testSlash_RevertWhen_TooManyTokens( + uint256 amount, + uint32 maxVerifierCut, + uint256 verifierCutAmount + ) public useIndexer useProvision(amount, maxVerifierCut, 0) { + uint256 maxVerifierTokens = (amount * maxVerifierCut) / MAX_PPM; + verifierCutAmount = bound(verifierCutAmount, maxVerifierTokens + 1, MAX_STAKING_TOKENS); + + vm.startPrank(subgraphDataServiceAddress); + bytes memory expectedError = abi.encodeWithSignature( + "HorizonStakingTooManyTokens(uint256,uint256)", + verifierCutAmount, + maxVerifierTokens + ); + vm.expectRevert(expectedError); + _slash(amount, verifierCutAmount); + } + function testSlash_DelegationDisabled_SlashingOverProvisionTokens( uint256 amount, uint256 slashAmount, @@ -62,6 +80,8 @@ contract HorizonStakingSlashTest is HorizonStakingTest { delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); + uint256 maxVerifierTokens = (amount * MAX_MAX_VERIFIER_CUT) / MAX_PPM; + vm.assume(verifierCutAmount <= maxVerifierTokens); resetPrank(users.delegator); _delegate(delegationAmount, subgraphDataServiceAddress); @@ -89,6 +109,8 @@ contract HorizonStakingSlashTest is HorizonStakingTest { delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); + uint256 maxVerifierTokens = (amount * MAX_MAX_VERIFIER_CUT) / MAX_PPM; + vm.assume(verifierCutAmount <= maxVerifierTokens); resetPrank(users.delegator); _delegate(delegationAmount, subgraphDataServiceAddress); @@ -111,8 +133,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 amount, uint256 slashAmount ) public useIndexer useStake(amount) { - // TODO: when slashing for low amounts there's an arithmetic underflow - slashAmount = bound(slashAmount, MIN_PROVISION_SIZE, amount); + slashAmount = bound(slashAmount, 1, amount); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInsufficientTokens(uint256,uint256)", 0 ether, diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/thaw/thaw.t.sol index 1f747f7f0..2ed99682f 100644 --- a/packages/horizon/test/staking/thaw/thaw.t.sol +++ b/packages/horizon/test/staking/thaw/thaw.t.sol @@ -35,6 +35,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { uint256 thawAmount, uint256 thawAmount2 ) public useIndexer useProvision(amount, 0, thawingPeriod) { + vm.assume(amount > 1); thawAmount = bound(thawAmount, 1, amount - 1); thawAmount2 = bound(thawAmount2, 1, amount - thawAmount); bytes32 thawRequestId = _createThawRequest(thawAmount); @@ -96,6 +97,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { uint64 thawingPeriod, uint256 thawAmount ) public useIndexer useProvision(amount, 0, thawingPeriod) { + vm.assume(amount >= MAX_THAW_REQUESTS + 1); thawAmount = bound(thawAmount, 1, amount / (MAX_THAW_REQUESTS + 1)); for (uint256 i = 0; i < 100; i++) { diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index 46445b039..f3e7f1157 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -12,8 +12,7 @@ abstract contract Constants { uint256 internal constant protocolPaymentCut = 10000; // Staking constants uint256 internal constant MAX_THAW_REQUESTS = 100; - uint256 internal constant MIN_PROVISION_SIZE = 1e18; uint32 internal constant MAX_MAX_VERIFIER_CUT = 1000000; // 100% in parts per million uint64 internal constant MAX_THAWING_PERIOD = 28 days; - uint256 internal constant MIN_DELEGATION = 1e18; + uint256 internal constant MIN_DELEGATION = 1 ether; } \ No newline at end of file From 3a4507c2f90366e924bd975d368111a3f8dd607a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 5 Jun 2024 11:49:15 -0300 Subject: [PATCH 109/343] test: add provision tracker tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../libraries/ProvisionTracker.t.sol | 110 ++++++++++++++++++ .../libraries/ProvisionTracker.tree | 11 ++ .../ProvisionTrackerImplementation.sol | 8 ++ .../HorizonStakingShared.t.sol | 2 +- 4 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol create mode 100644 packages/horizon/test/data-service/libraries/ProvisionTracker.tree create mode 100644 packages/horizon/test/data-service/libraries/ProvisionTrackerImplementation.sol diff --git a/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol b/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol new file mode 100644 index 000000000..6155bf4c7 --- /dev/null +++ b/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import { HorizonStakingSharedTest } from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; +import { ProvisionTrackerImplementation } from "./ProvisionTrackerImplementation.sol"; +import { ProvisionTracker } from "../../../contracts/data-service/libraries/ProvisionTracker.sol"; +import { IHorizonStaking } from "./../../../contracts/interfaces/IHorizonStaking.sol"; + +// Wrapper required because when using vm.expectRevert, the error is expected in the next immediate call +// Which in the case of this library is an internal call to the staking contract +// See: https://github.com/foundry-rs/foundry/issues/5454 +library ProvisionTrackerWrapper { + function lock( + mapping(address => uint256) storage self, + IHorizonStaking graphStaking, + address serviceProvider, + uint256 tokens, + uint32 delegationRatio + ) external { + ProvisionTracker.lock(self, graphStaking, serviceProvider, tokens, delegationRatio); + } + + function release(mapping(address => uint256) storage self, address serviceProvider, uint256 tokens) external { + ProvisionTracker.release(self, serviceProvider, tokens); + } +} + +contract ProvisionTrackerTest is HorizonStakingSharedTest, ProvisionTrackerImplementation { + using ProvisionTrackerWrapper for mapping(address => uint256); + + modifier useProvision( + uint256 tokens, + uint32, + uint64 + ) override { + vm.assume(tokens > 0); + vm.assume(tokens <= MAX_STAKING_TOKENS); + _createProvision(address(this), tokens, 0, 0); + _; + } + + function test_Lock_GivenTheProvisionHasSufficientAvailableTokens( + uint256 tokens, + uint256 steps + ) external useIndexer useProvision(tokens, 0, 0) { + vm.assume(tokens > 0); + vm.assume(steps > 0); + vm.assume(steps < 100); + uint256 stepAmount = tokens / steps; + + for (uint256 i = 0; i < steps; i++) { + uint256 beforeLockedAmount = provisionTracker[users.indexer]; + provisionTracker.lock(staking, users.indexer, stepAmount, uint32(0)); + uint256 afterLockedAmount = provisionTracker[users.indexer]; + assertEq(afterLockedAmount, beforeLockedAmount + stepAmount); + } + + assertEq(provisionTracker[users.indexer], stepAmount * steps); + uint256 delta = (tokens % steps); + uint256 tokensAvailable = staking.getTokensAvailable(users.indexer, address(this), 0); + assertEq(tokensAvailable - provisionTracker[users.indexer], delta); + } + + function test_Lock_RevertGiven_TheProvisionHasInsufficientAvailableTokens( + uint256 tokens + ) external useIndexer useProvision(tokens, 0, 0) { + uint256 tokensToLock = tokens + 1; + vm.expectRevert( + abi.encodeWithSelector(ProvisionTracker.ProvisionTrackerInsufficientTokens.selector, tokens, tokensToLock) + ); + provisionTracker.lock(staking, users.indexer, tokensToLock, uint32(0)); + } + + function test_Release_GivenTheProvisionHasSufficientLockedTokens( + uint256 tokens, + uint256 steps + ) external useIndexer useProvision(tokens, 0, 0) { + vm.assume(tokens > 0); + vm.assume(steps > 0); + vm.assume(steps < 100); + + // setup + provisionTracker.lock(staking, users.indexer, tokens, uint32(0)); + + // lock entire provision, then unlock in steps + uint256 stepAmount = tokens / steps; + + for (uint256 i = 0; i < steps; i++) { + uint256 beforeLockedAmount = provisionTracker[users.indexer]; + provisionTracker.release(users.indexer, stepAmount); + uint256 afterLockedAmount = provisionTracker[users.indexer]; + assertEq(afterLockedAmount, beforeLockedAmount - stepAmount); + } + + assertEq(provisionTracker[users.indexer], tokens - stepAmount * steps); + uint256 delta = (tokens % steps); + assertEq(provisionTracker[users.indexer], delta); + } + + function test_Release_RevertGiven_TheProvisionHasInsufficientLockedTokens(uint256 tokens) external useIndexer useProvision(tokens, 0, 0) { + // setup + provisionTracker.lock(staking, users.indexer, tokens, uint32(0)); + + uint256 tokensToRelease = tokens + 1; + vm.expectRevert( + abi.encodeWithSelector(ProvisionTracker.ProvisionTrackerInsufficientTokens.selector, tokens, tokensToRelease) + ); + provisionTracker.release(users.indexer, tokensToRelease); + } +} diff --git a/packages/horizon/test/data-service/libraries/ProvisionTracker.tree b/packages/horizon/test/data-service/libraries/ProvisionTracker.tree new file mode 100644 index 000000000..34955ed76 --- /dev/null +++ b/packages/horizon/test/data-service/libraries/ProvisionTracker.tree @@ -0,0 +1,11 @@ +ProvisionTrackerTest::lock_ +├── given the provision has sufficient available tokens +│ └── it should lock the tokens +└── given the provision has insufficient available tokens + └── it should revert + +ProvisionTrackerTest::release_ +├── given the provision has sufficient locked tokens +│ └── it should release the tokens +└── given the provision has insufficient locked tokens + └── it should revert \ No newline at end of file diff --git a/packages/horizon/test/data-service/libraries/ProvisionTrackerImplementation.sol b/packages/horizon/test/data-service/libraries/ProvisionTrackerImplementation.sol new file mode 100644 index 000000000..0093fba72 --- /dev/null +++ b/packages/horizon/test/data-service/libraries/ProvisionTrackerImplementation.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import { ProvisionTracker } from "../../../contracts/data-service/libraries/ProvisionTracker.sol"; + +contract ProvisionTrackerImplementation { + mapping(address => uint256) public provisionTracker; +} diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 1f1ea3310..8ab125dcb 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -24,7 +24,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { _; } - modifier useProvision(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) { + modifier useProvision(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) virtual { vm.assume(tokens <= MAX_STAKING_TOKENS); vm.assume(tokens > 0); vm.assume(maxVerifierCut <= MAX_MAX_VERIFIER_CUT); From 783c6f78a8b7fed66631592a2c528a8cc6c2e4ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 5 Jun 2024 16:22:52 -0300 Subject: [PATCH 110/343] test: add GraphDirectory tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/DataService.sol | 2 +- .../utilities/ProvisionManager.sol | 2 +- .../contracts/payments/GraphPayments.sol | 2 +- .../contracts/payments/PaymentsEscrow.sol | 2 +- .../payments/collectors/TAPCollector.sol | 2 +- .../contracts/staking/utilities/Managed.sol | 2 +- .../GraphDirectory.sol | 44 +++++------ .../test/deployments/Deployments.t.sol | 29 -------- .../test/utilities/GraphDirectory.t.sol | 73 +++++++++++++++++++ .../test/utilities/GraphDirectory.tree | 11 +++ .../GraphDirectoryImplementation.sol | 69 ++++++++++++++++++ 11 files changed, 181 insertions(+), 57 deletions(-) rename packages/horizon/contracts/{data-service => utilities}/GraphDirectory.sol (90%) delete mode 100644 packages/horizon/test/deployments/Deployments.t.sol create mode 100644 packages/horizon/test/utilities/GraphDirectory.t.sol create mode 100644 packages/horizon/test/utilities/GraphDirectory.tree create mode 100644 packages/horizon/test/utilities/GraphDirectoryImplementation.sol diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index f986224b3..db0a2bd11 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.26; import { IDataService } from "./interfaces/IDataService.sol"; import { DataServiceV1Storage } from "./DataServiceStorage.sol"; -import { GraphDirectory } from "./GraphDirectory.sol"; +import { GraphDirectory } from "../utilities/GraphDirectory.sol"; import { ProvisionManager } from "./utilities/ProvisionManager.sol"; /** diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 24230997e..247567bc2 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -6,7 +6,7 @@ import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; import { UintRange } from "../../libraries/UintRange.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import { GraphDirectory } from "../GraphDirectory.sol"; +import { GraphDirectory } from "../../utilities/GraphDirectory.sol"; import { ProvisionManagerV1Storage } from "./ProvisionManagerStorage.sol"; /** diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index a3e1b2dd7..298a1a74c 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -9,7 +9,7 @@ import { MulticallUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/ import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { PPMMath } from "../libraries/PPMMath.sol"; -import { GraphDirectory } from "../data-service/GraphDirectory.sol"; +import { GraphDirectory } from "../utilities/GraphDirectory.sol"; /** * @title GraphPayments contract diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 8b9e8c768..6f5ee9282 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -8,7 +8,7 @@ import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; -import { GraphDirectory } from "../data-service/GraphDirectory.sol"; +import { GraphDirectory } from "../utilities/GraphDirectory.sol"; /** * @title PaymentsEscrow contract diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index a80e08cdf..77e086022 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -7,7 +7,7 @@ import { ITAPCollector } from "../../interfaces/ITAPCollector.sol"; import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; import { PPMMath } from "../../libraries/PPMMath.sol"; -import { GraphDirectory } from "../../data-service/GraphDirectory.sol"; +import { GraphDirectory } from "../../utilities/GraphDirectory.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; /** diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index 5f5a0f6b3..4d8e77b4f 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.26; -import { GraphDirectory } from "../../data-service/GraphDirectory.sol"; +import { GraphDirectory } from "../../utilities/GraphDirectory.sol"; // TODO: create custom var-name-mixedcase /* solhint-disable var-name-mixedcase */ diff --git a/packages/horizon/contracts/data-service/GraphDirectory.sol b/packages/horizon/contracts/utilities/GraphDirectory.sol similarity index 90% rename from packages/horizon/contracts/data-service/GraphDirectory.sol rename to packages/horizon/contracts/utilities/GraphDirectory.sol index 085ee8a8b..570a5d476 100644 --- a/packages/horizon/contracts/data-service/GraphDirectory.sol +++ b/packages/horizon/contracts/utilities/GraphDirectory.sol @@ -78,17 +78,17 @@ abstract contract GraphDirectory { * @param graphCuration The Curation contract address */ event GraphDirectoryInitialized( - IGraphToken indexed graphToken, - IHorizonStaking indexed graphStaking, - IGraphPayments graphPayments, - IPaymentsEscrow graphEscrow, - IController indexed graphController, - IEpochManager graphEpochManager, - IRewardsManager graphRewardsManager, - ITokenGateway graphTokenGateway, - IBridgeEscrow graphBridgeEscrow, - IGraphProxyAdmin graphProxyAdmin, - ICuration graphCuration + address indexed graphToken, + address indexed graphStaking, + address graphPayments, + address graphEscrow, + address indexed graphController, + address graphEpochManager, + address graphRewardsManager, + address graphTokenGateway, + address graphBridgeEscrow, + address graphProxyAdmin, + address graphCuration ); /** @@ -123,17 +123,17 @@ abstract contract GraphDirectory { GRAPH_CURATION = ICuration(_getContractFromController("Curation")); emit GraphDirectoryInitialized( - GRAPH_TOKEN, - GRAPH_STAKING, - GRAPH_PAYMENTS, - GRAPH_PAYMENTS_ESCROW, - GRAPH_CONTROLLER, - GRAPH_EPOCH_MANAGER, - GRAPH_REWARDS_MANAGER, - GRAPH_TOKEN_GATEWAY, - GRAPH_BRIDGE_ESCROW, - GRAPH_PROXY_ADMIN, - GRAPH_CURATION + address(GRAPH_TOKEN), + address(GRAPH_STAKING), + address(GRAPH_PAYMENTS), + address(GRAPH_PAYMENTS_ESCROW), + address(GRAPH_CONTROLLER), + address(GRAPH_EPOCH_MANAGER), + address(GRAPH_REWARDS_MANAGER), + address(GRAPH_TOKEN_GATEWAY), + address(GRAPH_BRIDGE_ESCROW), + address(GRAPH_PROXY_ADMIN), + address(GRAPH_CURATION) ); } diff --git a/packages/horizon/test/deployments/Deployments.t.sol b/packages/horizon/test/deployments/Deployments.t.sol deleted file mode 100644 index f3c088ab7..000000000 --- a/packages/horizon/test/deployments/Deployments.t.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { GraphBaseTest } from "../GraphBase.t.sol"; - -contract GraphDeploymentsTest is GraphBaseTest { - - /* - * HELPERS - */ - - function _getContractFromController(bytes memory _contractName) private view returns (address) { - return controller.getContractProxy(keccak256(_contractName)); - } - - /* - * TESTS - */ - - function testDeployments() public view { - assertEq(_getContractFromController("GraphPayments"), address(payments)); - assertEq(_getContractFromController("GraphToken"), address(token)); - assertEq(_getContractFromController("Staking"), address(staking)); - assertEq(_getContractFromController("PaymentsEscrow"), address(escrow)); - assertEq(_getContractFromController("GraphProxyAdmin"), address(proxyAdmin)); - } -} diff --git a/packages/horizon/test/utilities/GraphDirectory.t.sol b/packages/horizon/test/utilities/GraphDirectory.t.sol new file mode 100644 index 000000000..6a2c958b8 --- /dev/null +++ b/packages/horizon/test/utilities/GraphDirectory.t.sol @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; +import { stdStorage, StdStorage } from "forge-std/Test.sol"; +import { GraphBaseTest } from "../GraphBase.t.sol"; +import { GraphDirectory } from "./../../contracts/utilities/GraphDirectory.sol"; +import { GraphDirectoryImplementation } from "./GraphDirectoryImplementation.sol"; + +contract GraphDirectoryTest is GraphBaseTest { + function test_WhenTheContractIsDeployedWithAValidController() external { + vm.expectEmit(); + emit GraphDirectory.GraphDirectoryInitialized( + _getContractFromController("GraphToken"), + _getContractFromController("Staking"), + _getContractFromController("GraphPayments"), + _getContractFromController("PaymentsEscrow"), + address(controller), + _getContractFromController("EpochManager"), + _getContractFromController("RewardsManager"), + _getContractFromController("GraphTokenGateway"), + _getContractFromController("BridgeEscrow"), + _getContractFromController("GraphProxyAdmin"), + _getContractFromController("Curation") + ); + _deployImplementation(address(controller)); + } + + function test_RevertWhen_TheContractIsDeployedWithAnInvalidController(address controller_) external { + vm.assume(controller_ != address(controller)); + vm.assume(controller_ != address(0)); + + vm.expectRevert(); // call to getContractProxy on a random address reverts + _deployImplementation(controller_); + } + + function test_RevertWhen_TheContractIsDeployedWithTheZeroAddressAsTheInvalidController() external { + vm.expectRevert(abi.encodeWithSelector(GraphDirectory.GraphDirectoryInvalidZeroAddress.selector, "Controller")); // call to getContractProxy on a random address reverts + _deployImplementation(address(0)); + } + + function test_WhenTheContractGettersAreCalled() external { + GraphDirectoryImplementation directory = _deployImplementation(address(controller)); + + assertEq(_getContractFromController("GraphToken"), address(directory.graphToken())); + assertEq(_getContractFromController("Staking"), address(directory.graphStaking())); + assertEq(_getContractFromController("GraphPayments"), address(directory.graphPayments())); + assertEq(_getContractFromController("PaymentsEscrow"), address(directory.graphPaymentsEscrow())); + assertEq(_getContractFromController("EpochManager"), address(directory.graphEpochManager())); + assertEq(_getContractFromController("RewardsManager"), address(directory.graphRewardsManager())); + assertEq(_getContractFromController("GraphTokenGateway"), address(directory.graphTokenGateway())); + assertEq(_getContractFromController("BridgeEscrow"), address(directory.graphBridgeEscrow())); + assertEq(_getContractFromController("GraphProxyAdmin"), address(directory.graphProxyAdmin())); + assertEq(_getContractFromController("Curation"), address(directory.graphCuration())); + } + + function test_RevertWhen_AnInvalidContractGetterIsCalled() external { + // Zero out the Staking contract address to simulate a non registered contract + bytes32 storageSlot = keccak256(abi.encode(keccak256("Staking"), 5)); + vm.store(address(controller), storageSlot, bytes32(0)); + + vm.expectRevert(abi.encodeWithSelector(GraphDirectory.GraphDirectoryInvalidZeroAddress.selector, "Staking")); + _deployImplementation(address(controller)); + } + + function _deployImplementation(address _controller) private returns (GraphDirectoryImplementation) { + return new GraphDirectoryImplementation(_controller); + } + + function _getContractFromController(bytes memory _contractName) private view returns (address) { + return controller.getContractProxy(keccak256(_contractName)); + } +} diff --git a/packages/horizon/test/utilities/GraphDirectory.tree b/packages/horizon/test/utilities/GraphDirectory.tree new file mode 100644 index 000000000..fc928ec29 --- /dev/null +++ b/packages/horizon/test/utilities/GraphDirectory.tree @@ -0,0 +1,11 @@ +GraphDirectoryTest +├── when the contract is deployed with a valid controller +│ └── it should emit an initialization event +├── when the contract is deployed with an invalid controller +│ └── it should revert +├── when the contract is deployed with the zero address as the invalid controller +│ └── it should revert +├── when the contract getters are called +│ └── it should return the contract address +└── when an invalid contract getter is called + └── it should revert \ No newline at end of file diff --git a/packages/horizon/test/utilities/GraphDirectoryImplementation.sol b/packages/horizon/test/utilities/GraphDirectoryImplementation.sol new file mode 100644 index 000000000..9f4b5066c --- /dev/null +++ b/packages/horizon/test/utilities/GraphDirectoryImplementation.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.26; + +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; +import { IHorizonStaking } from "../../contracts/interfaces/IHorizonStaking.sol"; +import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; +import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; + +import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; +import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; +import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; +import { ITokenGateway } from "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol"; +import { IBridgeEscrow } from "../../contracts/interfaces/IBridgeEscrow.sol"; +import { IGraphProxyAdmin } from "../../contracts/interfaces/IGraphProxyAdmin.sol"; +import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; + +import { GraphDirectory } from "./../../contracts/utilities/GraphDirectory.sol"; + +contract GraphDirectoryImplementation is GraphDirectory { + constructor(address controller) GraphDirectory(controller) {} + + function getContractFromController(bytes memory contractName) external view returns (address) { + return _graphController().getContractProxy(keccak256(contractName)); + } + function graphToken() external view returns (IGraphToken) { + return _graphToken(); + } + + function graphStaking() external view returns (IHorizonStaking) { + return _graphStaking(); + } + + function graphPayments() external view returns (IGraphPayments) { + return _graphPayments(); + } + + function graphPaymentsEscrow() external view returns (IPaymentsEscrow) { + return _graphPaymentsEscrow(); + } + + function graphController() external view returns (IController) { + return _graphController(); + } + + function graphEpochManager() external view returns (IEpochManager) { + return _graphEpochManager(); + } + + function graphRewardsManager() external view returns (IRewardsManager) { + return _graphRewardsManager(); + } + + function graphTokenGateway() external view returns (ITokenGateway) { + return _graphTokenGateway(); + } + + function graphBridgeEscrow() external view returns (IBridgeEscrow) { + return _graphBridgeEscrow(); + } + + function graphProxyAdmin() external view returns (IGraphProxyAdmin) { + return _graphProxyAdmin(); + } + + function graphCuration() external view returns (ICuration) { + return _graphCuration(); + } +} From ec7a3742f201ee0150c6bef7438e62a35d91aa6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 5 Jun 2024 17:05:56 -0300 Subject: [PATCH 111/343] test: add base data service tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/DataService.sol | 10 ++++-- .../test/data-service/DataService.t.sol | 31 +++++++++++++++++++ .../test/data-service/DataService.tree | 3 ++ .../test/data-service/DataServiceBase.sol | 18 +++++++++++ .../DataServiceBaseUpgradeable.sol | 27 ++++++++++++++++ 5 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 packages/horizon/test/data-service/DataService.t.sol create mode 100644 packages/horizon/test/data-service/DataService.tree create mode 100644 packages/horizon/test/data-service/DataServiceBase.sol create mode 100644 packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index db0a2bd11..8831237aa 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -16,8 +16,14 @@ import { ProvisionManager } from "./utilities/ProvisionManager.sol"; * * The derived contract MUST implement all the interfaces described in {IDataService} and in * accordance with the Data Service framework. - * @dev Implementation must initialize the contract using {__DataService_init} or - * {__DataService_init_unchained} functions. + * @dev A note on upgradeability: this base contract can be inherited by upgradeable or non upgradeable + * contracts. + * - If the data service implementation is upgradeable, it must initialize the contract via an external + * initializer function with the `initializer` modifier that calls {__DataService_init} or + * {__DataService_init_unchained}. + * - If the data service implementation is NOT upgradeable, it must initialize the contract by calling + * {__DataService_init} or {__DataService_init_unchained} in the constructor. Note that the `initializer` + * will be required in the constructor. */ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1Storage, IDataService { /** diff --git a/packages/horizon/test/data-service/DataService.t.sol b/packages/horizon/test/data-service/DataService.t.sol new file mode 100644 index 000000000..a21d7f2e1 --- /dev/null +++ b/packages/horizon/test/data-service/DataService.t.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import { GraphBaseTest } from "../GraphBase.t.sol"; +import { DataServiceBase } from "./DataServiceBase.sol"; + +contract DataService is GraphBaseTest { + function test_WhenTheContractIsDeployedWithAValidController() external { + DataServiceBase dataService = _deployDataService(); + + (uint32 minDelegationRatio, uint32 maxDelegationRatio) = dataService.getDelegationRatioRange(); + assertEq(minDelegationRatio, type(uint32).min); + assertEq(maxDelegationRatio, type(uint32).max); + + (uint256 minTokens, uint256 maxTokens) = dataService.getProvisionTokensRange(); + assertEq(minTokens, type(uint256).min); + assertEq(maxTokens, type(uint256).max); + + (uint32 minVerifierCut, uint32 maxVerifierCut) = dataService.getVerifierCutRange(); + assertEq(minVerifierCut, type(uint32).min); + assertEq(maxVerifierCut, type(uint32).max); + + (uint64 minThawingPeriod, uint64 maxThawingPeriod) = dataService.getThawingPeriodRange(); + assertEq(minThawingPeriod, type(uint64).min); + assertEq(maxThawingPeriod, type(uint64).max); + } + + function _deployDataService() internal returns (DataServiceBase) { + return new DataServiceBase(address(controller)); + } +} diff --git a/packages/horizon/test/data-service/DataService.tree b/packages/horizon/test/data-service/DataService.tree new file mode 100644 index 000000000..2a71bce48 --- /dev/null +++ b/packages/horizon/test/data-service/DataService.tree @@ -0,0 +1,3 @@ +DataService +└── when the contract is deployed with a valid controller + └── it should set all it's ranges to max \ No newline at end of file diff --git a/packages/horizon/test/data-service/DataServiceBase.sol b/packages/horizon/test/data-service/DataServiceBase.sol new file mode 100644 index 000000000..5103d51c5 --- /dev/null +++ b/packages/horizon/test/data-service/DataServiceBase.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.26; + +import { DataService } from "../../contracts/data-service/DataService.sol"; +import { IGraphPayments } from "./../../contracts/interfaces/IGraphPayments.sol"; + +contract DataServiceBase is DataService { + constructor(address controller) DataService(controller) initializer { + __DataService_init(); + } + + function register(address serviceProvider, bytes calldata data) external {} + function acceptProvision(address serviceProvider, bytes calldata data) external {} + function startService(address serviceProvider, bytes calldata data) external {} + function stopService(address serviceProvider, bytes calldata data) external {} + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} + function slash(address serviceProvider, bytes calldata data) external {} +} diff --git a/packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol b/packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol new file mode 100644 index 000000000..91984def0 --- /dev/null +++ b/packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.26; + +import { DataService } from "../../contracts/data-service/DataService.sol"; +import { IGraphPayments } from "./../../contracts/interfaces/IGraphPayments.sol"; + +contract DataServiceBase is DataService { + constructor(address controller) DataService(controller) { + _disableInitializers(); + } + + function initialize() external initializer { + __DataService_init(); + } + + function register(address serviceProvider, bytes calldata data) external {} + + function acceptProvision(address serviceProvider, bytes calldata data) external {} + + function startService(address serviceProvider, bytes calldata data) external {} + + function stopService(address serviceProvider, bytes calldata data) external {} + + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} + + function slash(address serviceProvider, bytes calldata data) external {} +} From 82cc903e92f3a5af603358d52ce3debfd5a18b71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 5 Jun 2024 17:26:28 -0300 Subject: [PATCH 112/343] test: add upgradeable data service test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .gitmodules | 3 ++ .../contracts/data-service/DataService.sol | 3 +- .../horizon/lib/openzeppelin-foundry-upgrades | 1 + packages/horizon/remappings.txt | 1 + .../test/data-service/DataService.t.sol | 2 +- .../DataServiceBaseUpgradeable.sol | 2 +- .../data-service/DataServiceUpgradeable.t.sol | 43 +++++++++++++++++++ 7 files changed, 52 insertions(+), 3 deletions(-) create mode 160000 packages/horizon/lib/openzeppelin-foundry-upgrades create mode 100644 packages/horizon/test/data-service/DataServiceUpgradeable.t.sol diff --git a/.gitmodules b/.gitmodules index 6e4ecf4c6..313d1d2d0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "packages/horizon/lib/forge-std"] path = packages/horizon/lib/forge-std url = https://github.com/foundry-rs/forge-std +[submodule "packages/horizon/lib/openzeppelin-foundry-upgrades"] + path = packages/horizon/lib/openzeppelin-foundry-upgrades + url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index 8831237aa..40f375d6f 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -20,7 +20,8 @@ import { ProvisionManager } from "./utilities/ProvisionManager.sol"; * contracts. * - If the data service implementation is upgradeable, it must initialize the contract via an external * initializer function with the `initializer` modifier that calls {__DataService_init} or - * {__DataService_init_unchained}. + * {__DataService_init_unchained}. It's recommended the implementation constructor to also call + * {_disableInitializers} to prevent the implementation from being initialized. * - If the data service implementation is NOT upgradeable, it must initialize the contract by calling * {__DataService_init} or {__DataService_init_unchained} in the constructor. Note that the `initializer` * will be required in the constructor. diff --git a/packages/horizon/lib/openzeppelin-foundry-upgrades b/packages/horizon/lib/openzeppelin-foundry-upgrades new file mode 160000 index 000000000..4cd15fc50 --- /dev/null +++ b/packages/horizon/lib/openzeppelin-foundry-upgrades @@ -0,0 +1 @@ +Subproject commit 4cd15fc50b141c77d8cc9ff8efb44d00e841a299 diff --git a/packages/horizon/remappings.txt b/packages/horizon/remappings.txt index aa8b4e6b7..d27549557 100644 --- a/packages/horizon/remappings.txt +++ b/packages/horizon/remappings.txt @@ -5,3 +5,4 @@ eth-gas-reporter/=node_modules/eth-gas-reporter/ hardhat/=node_modules/hardhat/ @openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ @openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ +openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src \ No newline at end of file diff --git a/packages/horizon/test/data-service/DataService.t.sol b/packages/horizon/test/data-service/DataService.t.sol index a21d7f2e1..738e2112d 100644 --- a/packages/horizon/test/data-service/DataService.t.sol +++ b/packages/horizon/test/data-service/DataService.t.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.26; import { GraphBaseTest } from "../GraphBase.t.sol"; import { DataServiceBase } from "./DataServiceBase.sol"; -contract DataService is GraphBaseTest { +contract DataServiceTest is GraphBaseTest { function test_WhenTheContractIsDeployedWithAValidController() external { DataServiceBase dataService = _deployDataService(); diff --git a/packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol b/packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol index 91984def0..00f2b485b 100644 --- a/packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol +++ b/packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.26; import { DataService } from "../../contracts/data-service/DataService.sol"; import { IGraphPayments } from "./../../contracts/interfaces/IGraphPayments.sol"; -contract DataServiceBase is DataService { +contract DataServiceBaseUpgradeable is DataService { constructor(address controller) DataService(controller) { _disableInitializers(); } diff --git a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol new file mode 100644 index 000000000..5523d7286 --- /dev/null +++ b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import { GraphBaseTest } from "../GraphBase.t.sol"; +import { DataServiceBaseUpgradeable } from "./DataServiceBaseUpgradeable.sol"; +import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; +import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +contract DataServiceUpgradeableTest is GraphBaseTest { + function test_WhenTheContractIsDeployedWithAValidController() external { + DataServiceBaseUpgradeable dataService = _deployDataService(); + + (uint32 minDelegationRatio, uint32 maxDelegationRatio) = dataService.getDelegationRatioRange(); + assertEq(minDelegationRatio, type(uint32).min); + assertEq(maxDelegationRatio, type(uint32).max); + + (uint256 minTokens, uint256 maxTokens) = dataService.getProvisionTokensRange(); + assertEq(minTokens, type(uint256).min); + assertEq(maxTokens, type(uint256).max); + + (uint32 minVerifierCut, uint32 maxVerifierCut) = dataService.getVerifierCutRange(); + assertEq(minVerifierCut, type(uint32).min); + assertEq(maxVerifierCut, type(uint32).max); + + (uint64 minThawingPeriod, uint64 maxThawingPeriod) = dataService.getThawingPeriodRange(); + assertEq(minThawingPeriod, type(uint64).min); + assertEq(maxThawingPeriod, type(uint64).max); + } + + function _deployDataService() internal returns (DataServiceBaseUpgradeable) { + // Deploy implementation + address implementation = address(new DataServiceBaseUpgradeable(address(controller))); + + // Deploy proxy (calls initialize) + address proxy = UnsafeUpgrades.deployTransparentProxy( + implementation, + users.governor, + abi.encodeCall(DataServiceBaseUpgradeable.initialize, ()) + ); + + return DataServiceBaseUpgradeable(proxy); + } +} From 9c6f70f82474cdf1239c191363bf6dbab4012aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 7 Jun 2024 14:45:46 +0200 Subject: [PATCH 113/343] fix: bad import path for graph directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/subgraph-service/contracts/DisputeManager.sol | 2 +- .../subgraph-service/contracts/utilities/AllocationManager.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 765d08fbc..692c6a93c 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -14,7 +14,7 @@ import { Attestation } from "./libraries/Attestation.sol"; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import { GraphDirectory } from "@graphprotocol/horizon/contracts/data-service/GraphDirectory.sol"; +import { GraphDirectory } from "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol"; import { DisputeManagerV1Storage } from "./DisputeManagerStorage.sol"; import { AttestationManager } from "./utilities/AttestationManager.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 7b8ba6c50..8d14da240 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.26; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; -import { GraphDirectory } from "@graphprotocol/horizon/contracts/data-service/GraphDirectory.sol"; +import { GraphDirectory } from "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol"; import { AllocationManagerV1Storage } from "./AllocationManagerStorage.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; From 9cb27fe2602e93fa4f3ecbb68eef763f68569f44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 7 Jun 2024 17:49:11 +0200 Subject: [PATCH 114/343] fix: feedback fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/contracts/contracts/arbitrum/ITokenGateway.sol | 4 ++-- packages/horizon/contracts/data-service/DataService.sol | 5 ++--- .../data-service/extensions/DataServiceFees.sol | 4 ++-- .../contracts/data-service/interfaces/IDataService.sol | 9 ++++++--- packages/horizon/contracts/libraries/LinkedList.sol | 8 ++++---- packages/horizon/contracts/staking/HorizonStaking.sol | 2 +- packages/horizon/test/libraries/LinkedList.t.sol | 6 +++--- packages/horizon/test/libraries/ListImplementation.sol | 2 +- packages/subgraph-service/contracts/SubgraphService.sol | 6 +++--- 9 files changed, 24 insertions(+), 22 deletions(-) diff --git a/packages/contracts/contracts/arbitrum/ITokenGateway.sol b/packages/contracts/contracts/arbitrum/ITokenGateway.sol index 9fb440fd2..96080858c 100644 --- a/packages/contracts/contracts/arbitrum/ITokenGateway.sol +++ b/packages/contracts/contracts/arbitrum/ITokenGateway.sol @@ -47,8 +47,8 @@ interface ITokenGateway { // ); function outboundTransfer( - address oken, - address t, + address token, + address to, uint256 amunt, uint256 maxas, uint256 gasPiceBid, diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index 40f375d6f..b2bc32d95 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -38,6 +38,7 @@ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1 */ // solhint-disable-next-line func-name-mixedcase function __DataService_init() internal onlyInitializing { + __ProvisionManager_init_unchained(); __DataService_init_unchained(); } @@ -45,7 +46,5 @@ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1 * @notice Initializes the contract. */ // solhint-disable-next-line func-name-mixedcase - function __DataService_init_unchained() internal onlyInitializing { - __ProvisionManager_init_unchained(); - } + function __DataService_init_unchained() internal onlyInitializing {} } diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 1c81da824..1ffabce2c 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -22,7 +22,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat /** * @notice See {IDataServiceFees-releaseStake} */ - function releaseStake(uint256 n) external virtual { + function releaseStake(uint256 n) external virtual override { _releaseStake(msg.sender, n); } @@ -52,7 +52,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat nextClaim: bytes32(0) }); if (claimsList.count != 0) claims[claimsList.tail].nextClaim = claimId; - claimsList.add(claimId); + claimsList.addTail(claimId); emit StakeClaimLocked(_serviceProvider, claimId, _tokens, _unlockTimestamp); } diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index f2ffec1a5..69b4fdf1c 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -17,8 +17,9 @@ interface IDataService { /** * @notice Emitted when a service provider is registered with the data service. * @param serviceProvider The address of the service provider. + * @param data Custom data, usage defined by the data service. */ - event ServiceProviderRegistered(address indexed serviceProvider); + event ServiceProviderRegistered(address indexed serviceProvider, bytes data); /** * @notice Emitted when a service provider accepts a provision in {Graph Horizon staking contract}. @@ -29,14 +30,16 @@ interface IDataService { /** * @notice Emitted when a service provider starts providing the service. * @param serviceProvider The address of the service provider. + * @param data Custom data, usage defined by the data service. */ - event ServiceStarted(address indexed serviceProvider); + event ServiceStarted(address indexed serviceProvider, bytes data); /** * @notice Emitted when a service provider stops providing the service. * @param serviceProvider The address of the service provider. + * @param data Custom data, usage defined by the data service. */ - event ServiceStopped(address indexed serviceProvider); + event ServiceStopped(address indexed serviceProvider, bytes data); /** * @notice Emitted when a service provider collects payment. diff --git a/packages/horizon/contracts/libraries/LinkedList.sol b/packages/horizon/contracts/libraries/LinkedList.sol index 7a49d0c5a..27a22a08f 100644 --- a/packages/horizon/contracts/libraries/LinkedList.sol +++ b/packages/horizon/contracts/libraries/LinkedList.sol @@ -63,7 +63,7 @@ library LinkedList { * @param self The list metadata * @param id The id of the item to add */ - function add(List storage self, bytes32 id) internal { + function addTail(List storage self, bytes32 id) internal { require(self.count < MAX_ITEMS, LinkedListMaxElementsExceeded()); self.tail = id; self.nonce += 1; @@ -80,7 +80,7 @@ library LinkedList { * @param deleteItem A function to delete an item. This should delete the item from * the contract storage. It takes the id of the item to delete. */ - function remove( + function removeHead( List storage self, function(bytes32) view returns (bytes32) getNextItem, function(bytes32) deleteItem @@ -96,13 +96,13 @@ library LinkedList { /** * @notice Traverses the list and processes each item. + * It deletes the processed items from both the list and the storage mapping. * @param self The list metadata * @param getNextItem A function to get the next item in the list. It should take * the id of the current item and return the id of the next item. * @param processItem A function to process an item. The function should take the id of the item * and an accumulator, and return: * - a boolean indicating whether the traversal should stop - * - a boolean indicating whether the item should be deleted * - an accumulator to pass data between iterations * @param deleteItem A function to delete an item. This should delete the item from * the contract storage. It takes the id of the item to delete. @@ -132,7 +132,7 @@ library LinkedList { if (shouldBreak) break; acc = acc_; - cursor = self.remove(getNextItem, deleteItem); + cursor = self.removeHead(getNextItem, deleteItem); if (!traverseAll) iterations--; itemCount++; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 4caa10a96..d63b655c2 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -830,7 +830,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _thawRequests[thawRequestId] = ThawRequest({ shares: _shares, thawingUntil: _thawingUntil, next: bytes32(0) }); if (thawRequestList.count != 0) _thawRequests[thawRequestList.tail].next = thawRequestId; - thawRequestList.add(thawRequestId); + thawRequestList.addTail(thawRequestId); emit ThawRequestCreated(_serviceProvider, _verifier, _owner, _shares, _thawingUntil, thawRequestId); return thawRequestId; diff --git a/packages/horizon/test/libraries/LinkedList.t.sol b/packages/horizon/test/libraries/LinkedList.t.sol index 63229fb2c..d2cf60aef 100644 --- a/packages/horizon/test/libraries/LinkedList.t.sol +++ b/packages/horizon/test/libraries/LinkedList.t.sol @@ -33,12 +33,12 @@ contract LinkedListTest is Test, ListImplementation { } vm.expectRevert(LinkedList.LinkedListMaxElementsExceeded.selector); - list.add(_buildItemId(list.nonce)); + list.addTail(_buildItemId(list.nonce)); } function test_Remove_RevertGiven_TheListIsEmpty() external { vm.expectRevert(LinkedList.LinkedListEmptyList.selector); - list.remove(_getNextItem, _deleteItem); + list.removeHead(_getNextItem, _deleteItem); } function test_Remove_GivenTheListIsNotEmpty() external { @@ -119,7 +119,7 @@ contract LinkedListTest is Test, ListImplementation { Item memory beforeHeadItem = items[beforeHead]; - list.remove(_getNextItem, _deleteItem); + list.removeHead(_getNextItem, _deleteItem); uint256 afterNonce = list.nonce; uint256 afterCount = list.count; diff --git a/packages/horizon/test/libraries/ListImplementation.sol b/packages/horizon/test/libraries/ListImplementation.sol index 0ec024435..9c8bbfb60 100644 --- a/packages/horizon/test/libraries/ListImplementation.sol +++ b/packages/horizon/test/libraries/ListImplementation.sol @@ -22,7 +22,7 @@ contract ListImplementation { if (_list.count != 0) { items[_list.tail].next = _id; } - _list.add(_id); + _list.addTail(_id); return _id; } diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index fb113c24c..e127abd3d 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -128,7 +128,7 @@ contract SubgraphService is _setRewardsDestination(indexer, rewardsDestination); } - emit ServiceProviderRegistered(indexer); + emit ServiceProviderRegistered(indexer, data); } /** @@ -193,7 +193,7 @@ contract SubgraphService is (bytes32, uint256, address, bytes) ); _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof, maximumDelegationRatio); - emit ServiceStarted(indexer); + emit ServiceStarted(indexer, data); } /** @@ -221,7 +221,7 @@ contract SubgraphService is ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { address allocationId = abi.decode(data, (address)); _closeAllocation(allocationId); - emit ServiceStopped(indexer); + emit ServiceStopped(indexer, data); } /** From a7d8ec470df2edbd7a4c6289bce80435af5dc347 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Fri, 7 Jun 2024 14:34:03 -0300 Subject: [PATCH 115/343] chore: horizon allocation fix and tests (#981) --- .../internal/IHorizonStakingExtension.sol | 4 +- .../horizon/contracts/mocks/CurationMock.sol | 22 +++ .../contracts/mocks/EpochManagerMock.sol | 64 ++++++++ .../contracts/mocks/RewardsManagerMock.sol | 27 ++++ .../staking/HorizonStakingExtension.sol | 11 +- packages/horizon/test/GraphBase.t.sol | 37 +++-- .../allocation/HorizonStakingExtension.t.sol | 80 +++++++++ .../test/staking/allocation/allocation.t.sol | 114 +++++++++++++ .../test/staking/allocation/close.t.sol | 72 +++++++++ .../test/staking/allocation/collect.t.sol | 153 ++++++++++++++++++ packages/horizon/test/utils/Constants.sol | 4 + 11 files changed, 569 insertions(+), 19 deletions(-) create mode 100644 packages/horizon/contracts/mocks/CurationMock.sol create mode 100644 packages/horizon/contracts/mocks/EpochManagerMock.sol create mode 100644 packages/horizon/contracts/mocks/RewardsManagerMock.sol create mode 100644 packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol create mode 100644 packages/horizon/test/staking/allocation/close.t.sol create mode 100644 packages/horizon/test/staking/allocation/collect.t.sol diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index a51b1871d..3c9a26c91 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -2,11 +2,13 @@ pragma solidity 0.8.26; +import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; + /** * @title Interface for {HorizonStakingExtension} contract. * @notice Provides functions for managing legacy allocations and transfer tools. */ -interface IHorizonStakingExtension { +interface IHorizonStakingExtension is IRewardsIssuer { /** * @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment * An allocation is created in the allocate() function and closed in closeAllocation() diff --git a/packages/horizon/contracts/mocks/CurationMock.sol b/packages/horizon/contracts/mocks/CurationMock.sol new file mode 100644 index 000000000..b480673fd --- /dev/null +++ b/packages/horizon/contracts/mocks/CurationMock.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.26; + +import { MockGRTToken } from "./MockGRTToken.sol"; + +contract CurationMock { + + mapping(bytes32 => uint256) public curation; + + function signal(bytes32 _subgraphDeploymentID, uint256 _tokens) public { + curation[_subgraphDeploymentID] += _tokens; + } + + function isCurated(bytes32 _subgraphDeploymentID) public view returns (bool) { + return curation[_subgraphDeploymentID] != 0; + } + + function collect(bytes32 _subgraphDeploymentID, uint256 _tokens) external { + curation[_subgraphDeploymentID] += _tokens; + } +} diff --git a/packages/horizon/contracts/mocks/EpochManagerMock.sol b/packages/horizon/contracts/mocks/EpochManagerMock.sol new file mode 100644 index 000000000..82b51d855 --- /dev/null +++ b/packages/horizon/contracts/mocks/EpochManagerMock.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.26; + +import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; + +contract EpochManagerMock is IEpochManager { + + // -- Variables -- + + uint256 public epochLength; + uint256 public lastRunEpoch; + uint256 public lastLengthUpdateEpoch; + uint256 public lastLengthUpdateBlock; + + // -- Configuration -- + + function setEpochLength(uint256 _epochLength) public { + lastLengthUpdateEpoch = 1; + lastLengthUpdateBlock = blockNum(); + epochLength = _epochLength; + } + + // -- Epochs + + function runEpoch() public { + lastRunEpoch = currentEpoch(); + } + + // -- Getters -- + + function isCurrentEpochRun() public view returns (bool) { + return lastRunEpoch == currentEpoch(); + } + + function blockNum() public view returns (uint256) { + return block.number; + } + + function blockHash(uint256 _block) public view returns (bytes32) { + return blockhash(_block); + } + + function currentEpoch() public view returns (uint256) { + return lastLengthUpdateEpoch + epochsSinceUpdate(); + } + + function currentEpochBlock() public view returns (uint256) { + return lastLengthUpdateBlock + (epochsSinceUpdate() * epochLength); + } + + function currentEpochBlockSinceStart() public view returns (uint256) { + return blockNum() - currentEpochBlock(); + } + + function epochsSince(uint256 _epoch) public view returns (uint256) { + uint256 epoch = currentEpoch(); + return _epoch < epoch ? (epoch - _epoch) : 0; + } + + function epochsSinceUpdate() public view returns (uint256) { + return (blockNum() - lastLengthUpdateBlock) / epochLength; + } +} diff --git a/packages/horizon/contracts/mocks/RewardsManagerMock.sol b/packages/horizon/contracts/mocks/RewardsManagerMock.sol new file mode 100644 index 000000000..9473e6dbc --- /dev/null +++ b/packages/horizon/contracts/mocks/RewardsManagerMock.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.26; + +import { MockGRTToken } from "./MockGRTToken.sol"; + +contract RewardsManagerMock { + + // -- Variables -- + MockGRTToken public token; + uint256 private rewards; + + // -- Constructor -- + + constructor(MockGRTToken _token, uint256 _rewards) { + token = _token; + rewards = _rewards; + } + + function takeRewards(address) external returns (uint256) { + token.mint(msg.sender, rewards); + return rewards; + } + + function onSubgraphAllocationUpdate(bytes32) public returns (uint256) {} + function onSubgraphSignalUpdate(bytes32 _subgraphDeploymentID) external returns (uint256) {} +} diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 7683523a7..7abac7623 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.26; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; -import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStakingExtension } from "../interfaces/internal/IHorizonStakingExtension.sol"; import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; @@ -26,7 +25,7 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; * @dev TODO: Once the transition period and the transfer tools are deemed not necessary this contract * can be removed. It's expected the transition period to last for a full allocation cycle (28 epochs). */ -contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2StakingBase, IHorizonStakingExtension { +contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizonStakingExtension { using TokenUtils for IGraphToken; using PPMMath for uint256; @@ -442,9 +441,9 @@ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2Staki // Anyone is allowed to close ONLY under two concurrent conditions // - After maxAllocationEpochs passed // - When the allocation is for non-zero amount of tokens - bool isIndexer = isOperator(alloc.indexer, SUBGRAPH_DATA_SERVICE_ADDRESS); + bool isIndexerOrOperator = msg.sender == alloc.indexer || isOperator(alloc.indexer, SUBGRAPH_DATA_SERVICE_ADDRESS); if (epochs <= __DEPRECATED_maxAllocationEpochs || alloc.tokens == 0) { - require(isIndexer, "!auth"); + require(isIndexerOrOperator, "!auth"); } // Close the allocation @@ -455,7 +454,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2Staki // Process non-zero-allocation rewards tracking if (alloc.tokens > 0) { // Distribute rewards if proof of indexing was presented by the indexer or operator - if (isIndexer && _poi != 0) { + if (isIndexerOrOperator && _poi != 0) { _distributeRewards(_allocationID, alloc.indexer); } else { _updateRewards(alloc.subgraphDeploymentID); @@ -481,7 +480,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IRewardsIssuer, IL2Staki _allocationID, msg.sender, _poi, - !isIndexer + !isIndexerOrOperator ); } diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index e21a13142..c7f57197a 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -13,6 +13,9 @@ import { IHorizonStaking } from "contracts/interfaces/IHorizonStaking.sol"; import { HorizonStaking } from "contracts/staking/HorizonStaking.sol"; import { HorizonStakingExtension } from "contracts/staking/HorizonStakingExtension.sol"; import { MockGRTToken } from "../contracts/mocks/MockGRTToken.sol"; +import { EpochManagerMock } from "../contracts/mocks/EpochManagerMock.sol"; +import { RewardsManagerMock } from "../contracts/mocks/RewardsManagerMock.sol"; +import { CurationMock } from "../contracts/mocks/CurationMock.sol"; import { Constants } from "./utils/Constants.sol"; import { Users } from "./utils/Users.sol"; import { Utils } from "./utils/Utils.sol"; @@ -31,6 +34,9 @@ abstract contract GraphBaseTest is Utils, Constants { GraphPayments public payments; PaymentsEscrow public escrow; IHorizonStaking public staking; + EpochManagerMock public epochManager; + RewardsManagerMock public rewardsManager; + CurationMock public curation; HorizonStaking private stakingBase; HorizonStakingExtension private stakingExtension; @@ -84,10 +90,9 @@ abstract contract GraphBaseTest is Utils, Constants { vm.startPrank(users.governor); proxyAdmin = new GraphProxyAdmin(); controller = new Controller(); - vm.stopPrank(); // Staking Proxy - vm.prank(users.deployer); + resetPrank(users.deployer); GraphProxy stakingProxy = new GraphProxy(address(0), address(proxyAdmin)); // GraphPayments predict address @@ -118,21 +123,29 @@ abstract contract GraphBaseTest is Utils, Constants { users.deployer ); + // Epoch Manager + epochManager = new EpochManagerMock(); + + // Rewards Manager + rewardsManager = new RewardsManagerMock(token, ALLOCATIONS_REWARD_CUT); + + // Curation + curation = new CurationMock(); + // Setup controller - vm.startPrank(users.governor); + resetPrank(users.governor); controller.setContractProxy(keccak256("GraphToken"), address(token)); controller.setContractProxy(keccak256("PaymentsEscrow"), predictedAddressEscrow); controller.setContractProxy(keccak256("GraphPayments"), predictedPaymentsAddress); controller.setContractProxy(keccak256("Staking"), address(stakingProxy)); - controller.setContractProxy(keccak256("EpochManager"), makeAddr("EpochManager")); - controller.setContractProxy(keccak256("RewardsManager"), makeAddr("RewardsManager")); - controller.setContractProxy(keccak256("Curation"), makeAddr("Curation")); + controller.setContractProxy(keccak256("EpochManager"), address(epochManager)); + controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); + controller.setContractProxy(keccak256("Curation"), address(curation)); controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); controller.setContractProxy(keccak256("BridgeEscrow"), makeAddr("BridgeEscrow")); controller.setContractProxy(keccak256("GraphProxyAdmin"), address(proxyAdmin)); - vm.stopPrank(); - vm.startPrank(users.deployer); + resetPrank(users.deployer); payments = new GraphPayments{salt: saltPayments}( address(controller), protocolPaymentCut @@ -151,21 +164,21 @@ abstract contract GraphBaseTest is Utils, Constants { address(stakingExtension), subgraphDataServiceLegacyAddress ); - vm.stopPrank(); - vm.startPrank(users.governor); + resetPrank(users.governor); proxyAdmin.upgrade(stakingProxy, address(stakingBase)); proxyAdmin.acceptProxy(stakingBase, stakingProxy); staking = IHorizonStaking(address(stakingProxy)); } function setupProtocol() private { - vm.startPrank(users.governor); + resetPrank(users.governor); staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); + epochManager.setEpochLength(EPOCH_LENGTH); } function unpauseProtocol() private { - vm.startPrank(users.governor); + resetPrank(users.governor); controller.setPaused(false); } diff --git a/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol b/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol new file mode 100644 index 000000000..266ec3c5b --- /dev/null +++ b/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; +import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; + +contract HorizonStakingExtensionTest is HorizonStakingTest { + + /* + * VARIABLES + */ + + address internal _allocationId = makeAddr("allocationId"); + bytes32 internal constant _subgraphDeploymentID = keccak256("subgraphDeploymentID"); + bytes32 internal constant _poi = keccak256("poi"); + uint256 internal constant MAX_ALLOCATION_EPOCHS = 28; + IHorizonStakingExtension.Allocation internal _allocation; + + /* + * MODIFIERS + */ + + modifier useAllocation() { + _storeAllocation(0); + _; + } + + /* + * SET UP + */ + + function setUp() public virtual override { + super.setUp(); + + _allocation = IHorizonStakingExtension.Allocation({ + indexer: users.indexer, + subgraphDeploymentID: _subgraphDeploymentID, + tokens: 0, + createdAtEpoch: block.timestamp, + closedAtEpoch: 0, + collectedFees: 0, + __DEPRECATED_effectiveAllocation: 0, + accRewardsPerAllocatedToken: 0, + distributedRebates: 0 + }); + } + + /* + * HELPERS + */ + + function _storeAllocation(uint256 tokens) internal { + uint256 allocationsSlot = 15; + bytes32 allocationBaseSlot = keccak256(abi.encode(_allocationId, allocationsSlot)); + vm.store(address(staking), allocationBaseSlot, bytes32(uint256(uint160(_allocation.indexer)))); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 1), _allocation.subgraphDeploymentID); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 2), bytes32(tokens)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 3), bytes32(_allocation.createdAtEpoch)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 4), bytes32(_allocation.closedAtEpoch)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 5), bytes32(_allocation.collectedFees)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 6), bytes32(_allocation.__DEPRECATED_effectiveAllocation)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 7), bytes32(_allocation.accRewardsPerAllocatedToken)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 8), bytes32(_allocation.distributedRebates)); + + uint256 serviceProviderSlot = 14; + bytes32 serviceProviderBaseSlot = keccak256(abi.encode(_allocation.indexer, serviceProviderSlot)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 1), bytes32(tokens)); + + uint256 subgraphsAllocationsSlot = 16; + bytes32 subgraphAllocationsBaseSlot = keccak256(abi.encode(_allocation.subgraphDeploymentID, subgraphsAllocationsSlot)); + vm.store(address(staking), subgraphAllocationsBaseSlot, bytes32(tokens)); + } + + function _storeMaxAllocationEpochs() internal { + uint256 slot = 13; + vm.store(address(staking), bytes32(slot), bytes32(MAX_ALLOCATION_EPOCHS) << 128); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/allocation/allocation.t.sol b/packages/horizon/test/staking/allocation/allocation.t.sol index e69de29bb..1667c607c 100644 --- a/packages/horizon/test/staking/allocation/allocation.t.sol +++ b/packages/horizon/test/staking/allocation/allocation.t.sol @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingExtensionTest } from "./HorizonStakingExtension.t.sol"; +import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; + +contract HorizonStakingAllocationTest is HorizonStakingExtensionTest { + + /* + * TESTS + */ + + function testAllocation_GetAllocation() public useAllocation { + IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); + assertEq(allocation.indexer, _allocation.indexer); + assertEq(allocation.subgraphDeploymentID, _allocation.subgraphDeploymentID); + assertEq(allocation.tokens, _allocation.tokens); + assertEq(allocation.createdAtEpoch, _allocation.createdAtEpoch); + assertEq(allocation.closedAtEpoch, _allocation.closedAtEpoch); + assertEq(allocation.collectedFees, _allocation.collectedFees); + assertEq(allocation.__DEPRECATED_effectiveAllocation, _allocation.__DEPRECATED_effectiveAllocation); + assertEq(allocation.accRewardsPerAllocatedToken, _allocation.accRewardsPerAllocatedToken); + assertEq(allocation.distributedRebates, _allocation.distributedRebates); + } + + function testAllocation_GetAllocationData() public useAllocation { + (address indexer, bytes32 subgraphDeploymentID, uint256 tokens, uint256 accRewardsPerAllocatedToken) = + staking.getAllocationData(_allocationId); + assertEq(indexer, _allocation.indexer); + assertEq(subgraphDeploymentID, _allocation.subgraphDeploymentID); + assertEq(tokens, _allocation.tokens); + assertEq(accRewardsPerAllocatedToken, _allocation.accRewardsPerAllocatedToken); + } + + function testAllocation_GetAllocationState_Active() public useAllocation { + IHorizonStakingExtension.AllocationState state = staking.getAllocationState(_allocationId); + assertEq(uint16(state), uint16(IHorizonStakingExtension.AllocationState.Active)); + } + + function testAllocation_GetAllocationState_Null() public view { + IHorizonStakingExtension.AllocationState state = staking.getAllocationState(_allocationId); + assertEq(uint16(state), uint16(IHorizonStakingExtension.AllocationState.Null)); + } + + function testAllocation_IsAllocation() public useAllocation { + bool isAllocation = staking.isAllocation(_allocationId); + assertTrue(isAllocation); + } + + function testAllocation_IsNotAllocation() public view { + bool isAllocation = staking.isAllocation(_allocationId); + assertFalse(isAllocation); + } + + function testCloseAllocation(uint256 tokens) public useIndexer { + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + _storeAllocation(tokens); + _storeMaxAllocationEpochs(); + _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + + // Skip 15 epochs + vm.roll(15); + + staking.closeAllocation(_allocationId, _poi); + IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); + assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); + + // Stake should be updated with rewards + assertEq(staking.getStake(address(users.indexer)), tokens + ALLOCATIONS_REWARD_CUT); + } + + function testCloseAllocation_RevertWhen_NotActive() public { + vm.expectRevert("!active"); + staking.closeAllocation(_allocationId, _poi); + } + + function testCloseAllocation_RevertWhen_NotIndexer() public useAllocation { + resetPrank(users.delegator); + vm.expectRevert("!auth"); + staking.closeAllocation(_allocationId, _poi); + } + + function testCloseAllocation_AfterMaxEpochs_AnyoneCanClose(uint256 tokens) public useIndexer { + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + _storeAllocation(tokens); + _storeMaxAllocationEpochs(); + _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + + // Skip to over the max allocation epochs + vm.roll(MAX_ALLOCATION_EPOCHS + 2); + + resetPrank(users.delegator); + staking.closeAllocation(_allocationId, 0x0); + IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); + assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); + + // No rewards distributed + assertEq(staking.getStake(address(users.indexer)), tokens); + } + + function testCloseAllocation_RevertWhen_ZeroTokensNotAuthorized() public useIndexer { + _storeAllocation(0); + _storeMaxAllocationEpochs(); + + // Skip to over the max allocation epochs + vm.roll(MAX_ALLOCATION_EPOCHS + 2); + + resetPrank(users.delegator); + vm.expectRevert("!auth"); + staking.closeAllocation(_allocationId, 0x0); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/allocation/close.t.sol b/packages/horizon/test/staking/allocation/close.t.sol new file mode 100644 index 000000000..21eb5a23e --- /dev/null +++ b/packages/horizon/test/staking/allocation/close.t.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingExtensionTest } from "./HorizonStakingExtension.t.sol"; +import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; + +contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { + + /* + * TESTS + */ + + function testCloseAllocation(uint256 tokens) public useIndexer { + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + _storeAllocation(tokens); + _storeMaxAllocationEpochs(); + _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + + // Skip 15 epochs + vm.roll(15); + + staking.closeAllocation(_allocationId, _poi); + IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); + assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); + + // Stake should be updated with rewards + assertEq(staking.getStake(address(users.indexer)), tokens + ALLOCATIONS_REWARD_CUT); + } + + function testCloseAllocation_RevertWhen_NotActive() public { + vm.expectRevert("!active"); + staking.closeAllocation(_allocationId, _poi); + } + + function testCloseAllocation_RevertWhen_NotIndexer() public useAllocation { + resetPrank(users.delegator); + vm.expectRevert("!auth"); + staking.closeAllocation(_allocationId, _poi); + } + + function testCloseAllocation_AfterMaxEpochs_AnyoneCanClose(uint256 tokens) public useIndexer { + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + _storeAllocation(tokens); + _storeMaxAllocationEpochs(); + _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + + // Skip to over the max allocation epochs + vm.roll(MAX_ALLOCATION_EPOCHS + 2); + + resetPrank(users.delegator); + staking.closeAllocation(_allocationId, 0x0); + IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); + assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); + + // No rewards distributed + assertEq(staking.getStake(address(users.indexer)), tokens); + } + + function testCloseAllocation_RevertWhen_ZeroTokensNotAuthorized() public useIndexer { + _storeAllocation(0); + _storeMaxAllocationEpochs(); + + // Skip to over the max allocation epochs + vm.roll(MAX_ALLOCATION_EPOCHS + 2); + + resetPrank(users.delegator); + vm.expectRevert("!auth"); + staking.closeAllocation(_allocationId, 0x0); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/allocation/collect.t.sol b/packages/horizon/test/staking/allocation/collect.t.sol new file mode 100644 index 000000000..ea4d1abcf --- /dev/null +++ b/packages/horizon/test/staking/allocation/collect.t.sol @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingExtensionTest } from "./HorizonStakingExtension.t.sol"; +import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; +import { ExponentialRebates } from "../../../contracts/staking/libraries/ExponentialRebates.sol"; +import { PPMMath } from "../../../contracts/libraries/PPMMath.sol"; + +contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { + using PPMMath for uint256; + + uint32 private alphaNumerator = 100; + uint32 private alphaDenominator = 100; + uint32 private lambdaNumerator = 60; + uint32 private lambdaDenominator = 100; + + /* + * MODIFIERS + */ + + modifier useRebateParameters() { + _storeRebateParameters(); + _; + } + + /* + * HELPERS + */ + + function _storeRebateParameters() private { + // Store alpha numerator and denominator + uint256 alphaSlot = 13; + uint256 alphaNumeratorOffset = 20; + uint256 alphaDenominatorOffset = 24; + bytes32 alphaValues = bytes32( + (uint256(alphaNumerator) << (8 * alphaNumeratorOffset)) | + (uint256(alphaDenominator) << (8 * alphaDenominatorOffset)) + ); + vm.store(address(staking), bytes32(alphaSlot), alphaValues); + + // Store lambda numerator and denominator + uint256 lambdaSlot = 25; + uint256 lambdaNumeratorOffset = 20; + uint256 lambdaDenominatorOffset = 24; + bytes32 lambdaValues = bytes32( + (uint256(lambdaNumerator) << (8 * lambdaNumeratorOffset)) | + (uint256(lambdaDenominator) << (8 * lambdaDenominatorOffset)) + ); + vm.store(address(staking), bytes32(lambdaSlot), lambdaValues); + } + + function _storeProtocolTaxAndCuration(uint32 curationPercentage, uint32 taxPercentage) private { + bytes32 slot = bytes32(uint256(13)); + uint256 curationOffset = 4; + uint256 protocolTaxOffset = 8; + bytes32 originalValue = vm.load(address(staking), slot); + + bytes32 newProtocolTaxValue = bytes32( + (uint256(originalValue) & ~((0xFFFFFFFF << (8 * curationOffset)) | (0xFFFFFFFF << (8 * protocolTaxOffset))) | + (uint256(curationPercentage) << (8 * curationOffset))) | + (uint256(taxPercentage) << (8 * protocolTaxOffset)) + ); + vm.store(address(staking), slot, newProtocolTaxValue); + } + + function _storeDelegationPool(uint256 tokens, uint32 queryFeeCut) private { + bytes32 baseSlot = keccak256(abi.encode(users.indexer, uint256(20))); + bytes32 queryFeeCutValue = bytes32(uint256(queryFeeCut) << uint256(64)); + bytes32 tokensSlot = bytes32(uint256(baseSlot) + 2); + vm.store(address(staking), baseSlot, queryFeeCutValue); + vm.store(address(staking), tokensSlot, bytes32(tokens)); + } + + /* + * TESTS + */ + + function testCollectAllocation_RevertWhen_InvalidAllocationId(uint256 tokens) public useAllocation { + vm.expectRevert("!alloc"); + staking.collect(tokens, address(0)); + } + + function testCollectAllocation_RevertWhen_Null(uint256 tokens) public { + vm.expectRevert("!collect"); + staking.collect(tokens, _allocationId); + } + + function testCollectAllocation_ZeroTokens() public useAllocation { + staking.collect(0, _allocationId); + assertEq(staking.getStake(address(users.indexer)), 0); + } + + function testCollect_Tokens( + uint256 provisionTokens, + uint256 allocationTokens, + uint256 collectTokens, + uint256 curationTokens, + uint32 curationPercentage, + uint32 protocolTaxPercentage, + uint256 delegationTokens, + uint32 queryFeeCut + ) public useRebateParameters { + provisionTokens = bound(provisionTokens, 1, MAX_STAKING_TOKENS); + allocationTokens = bound(allocationTokens, 0, MAX_STAKING_TOKENS); + collectTokens = bound(collectTokens, 0, MAX_STAKING_TOKENS); + curationTokens = bound(curationTokens, 0, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 0, MAX_STAKING_TOKENS); + vm.assume(curationPercentage <= MAX_PPM); + vm.assume(protocolTaxPercentage <= MAX_PPM); + vm.assume(queryFeeCut <= MAX_PPM); + resetPrank(users.indexer); + _createProvision(subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); + _storeAllocation(allocationTokens); + _storeProtocolTaxAndCuration(curationPercentage, protocolTaxPercentage); + _storeDelegationPool(delegationTokens, queryFeeCut); + curation.signal(_subgraphDeploymentID, curationTokens); + + resetPrank(users.gateway); + approve(address(staking), collectTokens); + staking.collect(collectTokens, _allocationId); + + uint256 protocolTaxTokens = collectTokens.mulPPMRoundUp(protocolTaxPercentage); + uint256 queryFees = collectTokens - protocolTaxTokens; + + uint256 curationCutTokens = 0; + if (curationTokens > 0) { + curationCutTokens = queryFees.mulPPMRoundUp(curationPercentage); + queryFees -= curationCutTokens; + } + + uint256 newRebates = ExponentialRebates.exponentialRebates( + queryFees, + allocationTokens, + alphaNumerator, + alphaDenominator, + lambdaNumerator, + lambdaDenominator + ); + uint256 payment = newRebates > queryFees ? queryFees : newRebates; + + uint256 delegationFeeCut = 0; + if (delegationTokens > 0) { + delegationFeeCut = payment - payment.mulPPM(queryFeeCut); + payment -= delegationFeeCut; + } + + assertEq(staking.getStake(address(users.indexer)), provisionTokens + payment); + assertEq(curation.curation(_subgraphDeploymentID), curationTokens + curationCutTokens); + assertEq(staking.getDelegationPool(users.indexer, subgraphDataServiceLegacyAddress).tokens, delegationTokens + delegationFeeCut); + } +} \ No newline at end of file diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index f3e7f1157..a5fc1fe27 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -15,4 +15,8 @@ abstract contract Constants { uint32 internal constant MAX_MAX_VERIFIER_CUT = 1000000; // 100% in parts per million uint64 internal constant MAX_THAWING_PERIOD = 28 days; uint256 internal constant MIN_DELEGATION = 1 ether; + // Epoch manager + uint256 internal constant EPOCH_LENGTH = 1; + // Rewards manager + uint256 internal constant ALLOCATIONS_REWARD_CUT = 100 ether; } \ No newline at end of file From 04bf4c7dfa0b1f30b0ea1bffcd7ee615879d9355 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 7 Jun 2024 17:49:40 -0300 Subject: [PATCH 116/343] chore: horizon allocation with beneficiary test --- .../allocation/HorizonStakingExtension.t.sol | 6 ++ .../test/staking/allocation/allocation.t.sol | 58 ------------------- .../test/staking/allocation/close.t.sol | 20 +++++++ .../test/staking/allocation/collect.t.sol | 32 ++++++++++ 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol b/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol index 266ec3c5b..3b1f0a56b 100644 --- a/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol +++ b/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol @@ -77,4 +77,10 @@ contract HorizonStakingExtensionTest is HorizonStakingTest { uint256 slot = 13; vm.store(address(staking), bytes32(slot), bytes32(MAX_ALLOCATION_EPOCHS) << 128); } + + function _storeRewardsDestination(address destination) internal { + uint256 rewardsDestinationSlot = 23; + bytes32 rewardsDestinationSlotBaseSlot = keccak256(abi.encode(users.indexer, rewardsDestinationSlot)); + vm.store(address(staking), rewardsDestinationSlotBaseSlot, bytes32(uint256(uint160(destination)))); + } } \ No newline at end of file diff --git a/packages/horizon/test/staking/allocation/allocation.t.sol b/packages/horizon/test/staking/allocation/allocation.t.sol index 1667c607c..feb89ec7c 100644 --- a/packages/horizon/test/staking/allocation/allocation.t.sol +++ b/packages/horizon/test/staking/allocation/allocation.t.sol @@ -53,62 +53,4 @@ contract HorizonStakingAllocationTest is HorizonStakingExtensionTest { bool isAllocation = staking.isAllocation(_allocationId); assertFalse(isAllocation); } - - function testCloseAllocation(uint256 tokens) public useIndexer { - tokens = bound(tokens, 1, MAX_STAKING_TOKENS); - _storeAllocation(tokens); - _storeMaxAllocationEpochs(); - _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); - - // Skip 15 epochs - vm.roll(15); - - staking.closeAllocation(_allocationId, _poi); - IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); - assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); - - // Stake should be updated with rewards - assertEq(staking.getStake(address(users.indexer)), tokens + ALLOCATIONS_REWARD_CUT); - } - - function testCloseAllocation_RevertWhen_NotActive() public { - vm.expectRevert("!active"); - staking.closeAllocation(_allocationId, _poi); - } - - function testCloseAllocation_RevertWhen_NotIndexer() public useAllocation { - resetPrank(users.delegator); - vm.expectRevert("!auth"); - staking.closeAllocation(_allocationId, _poi); - } - - function testCloseAllocation_AfterMaxEpochs_AnyoneCanClose(uint256 tokens) public useIndexer { - tokens = bound(tokens, 1, MAX_STAKING_TOKENS); - _storeAllocation(tokens); - _storeMaxAllocationEpochs(); - _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); - - // Skip to over the max allocation epochs - vm.roll(MAX_ALLOCATION_EPOCHS + 2); - - resetPrank(users.delegator); - staking.closeAllocation(_allocationId, 0x0); - IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); - assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); - - // No rewards distributed - assertEq(staking.getStake(address(users.indexer)), tokens); - } - - function testCloseAllocation_RevertWhen_ZeroTokensNotAuthorized() public useIndexer { - _storeAllocation(0); - _storeMaxAllocationEpochs(); - - // Skip to over the max allocation epochs - vm.roll(MAX_ALLOCATION_EPOCHS + 2); - - resetPrank(users.delegator); - vm.expectRevert("!auth"); - staking.closeAllocation(_allocationId, 0x0); - } } \ No newline at end of file diff --git a/packages/horizon/test/staking/allocation/close.t.sol b/packages/horizon/test/staking/allocation/close.t.sol index 21eb5a23e..0f15b84ea 100644 --- a/packages/horizon/test/staking/allocation/close.t.sol +++ b/packages/horizon/test/staking/allocation/close.t.sol @@ -29,6 +29,26 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { assertEq(staking.getStake(address(users.indexer)), tokens + ALLOCATIONS_REWARD_CUT); } + function testCloseAllocation_WithBeneficiaryAddress(uint256 tokens) public useIndexer { + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + _storeAllocation(tokens); + _storeMaxAllocationEpochs(); + _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + + address beneficiary = makeAddr("beneficiary"); + _storeRewardsDestination(beneficiary); + + // Skip 15 epochs + vm.roll(15); + + staking.closeAllocation(_allocationId, _poi); + IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); + assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); + + // Stake should be updated with rewards + assertEq(token.balanceOf(beneficiary), ALLOCATIONS_REWARD_CUT); + } + function testCloseAllocation_RevertWhen_NotActive() public { vm.expectRevert("!active"); staking.closeAllocation(_allocationId, _poi); diff --git a/packages/horizon/test/staking/allocation/collect.t.sol b/packages/horizon/test/staking/allocation/collect.t.sol index ea4d1abcf..ee33f89e5 100644 --- a/packages/horizon/test/staking/allocation/collect.t.sol +++ b/packages/horizon/test/staking/allocation/collect.t.sol @@ -150,4 +150,36 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { assertEq(curation.curation(_subgraphDeploymentID), curationTokens + curationCutTokens); assertEq(staking.getDelegationPool(users.indexer, subgraphDataServiceLegacyAddress).tokens, delegationTokens + delegationFeeCut); } + + function testCollect_WithBeneficiaryAddress( + uint256 provisionTokens, + uint256 allocationTokens, + uint256 collectTokens + ) public useIndexer useRebateParameters { + provisionTokens = bound(provisionTokens, 1, MAX_STAKING_TOKENS); + allocationTokens = bound(allocationTokens, 0, MAX_STAKING_TOKENS); + collectTokens = bound(collectTokens, 0, MAX_STAKING_TOKENS); + + _createProvision(subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); + _storeAllocation(allocationTokens); + + address beneficiary = makeAddr("beneficiary"); + _storeRewardsDestination(beneficiary); + + resetPrank(users.gateway); + approve(address(staking), collectTokens); + staking.collect(collectTokens, _allocationId); + + uint256 newRebates = ExponentialRebates.exponentialRebates( + collectTokens, + allocationTokens, + alphaNumerator, + alphaDenominator, + lambdaNumerator, + lambdaDenominator + ); + uint256 payment = newRebates > collectTokens ? collectTokens : newRebates; + + assertEq(token.balanceOf(beneficiary), payment); + } } \ No newline at end of file From 66f9767492fff45760d8d27e58e189eb4592d227 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 7 Jun 2024 18:19:53 -0300 Subject: [PATCH 117/343] chore: horizon close collection with delegation fees --- .../allocation/HorizonStakingExtension.t.sol | 11 ++++++++ .../test/staking/allocation/close.t.sol | 25 +++++++++++++++++++ .../test/staking/allocation/collect.t.sol | 10 +------- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol b/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol index 3b1f0a56b..19a42da2b 100644 --- a/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol +++ b/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol @@ -47,6 +47,17 @@ contract HorizonStakingExtensionTest is HorizonStakingTest { }); } + function _storeDelegationPool(uint256 tokens, uint32 indexingRewardCut, uint32 queryFeeCut) internal { + bytes32 baseSlot = keccak256(abi.encode(users.indexer, uint256(20))); + bytes32 feeCutValues = bytes32( + (uint256(indexingRewardCut) << uint256(32)) | + (uint256(queryFeeCut) << uint256(64)) + ); + bytes32 tokensSlot = bytes32(uint256(baseSlot) + 2); + vm.store(address(staking), baseSlot, feeCutValues); + vm.store(address(staking), tokensSlot, bytes32(tokens)); + } + /* * HELPERS */ diff --git a/packages/horizon/test/staking/allocation/close.t.sol b/packages/horizon/test/staking/allocation/close.t.sol index 0f15b84ea..d8524bb92 100644 --- a/packages/horizon/test/staking/allocation/close.t.sol +++ b/packages/horizon/test/staking/allocation/close.t.sol @@ -5,8 +5,10 @@ import "forge-std/Test.sol"; import { HorizonStakingExtensionTest } from "./HorizonStakingExtension.t.sol"; import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; +import { PPMMath } from "../../../contracts/libraries/PPMMath.sol"; contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { + using PPMMath for uint256; /* * TESTS @@ -89,4 +91,27 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { vm.expectRevert("!auth"); staking.closeAllocation(_allocationId, 0x0); } + + function testCloseAllocation_WithDelegation(uint256 tokens, uint256 delegationTokens, uint32 indexingRewardCut) public useIndexer { + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + vm.assume(indexingRewardCut <= MAX_PPM); + + _storeAllocation(tokens); + _storeMaxAllocationEpochs(); + _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + _storeDelegationPool(delegationTokens, indexingRewardCut, 0); + + // Skip 15 epochs + vm.roll(15); + + staking.closeAllocation(_allocationId, _poi); + IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); + assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); + + uint256 indexerRewardCut = ALLOCATIONS_REWARD_CUT.mulPPM(indexingRewardCut); + uint256 delegationFeeCut = ALLOCATIONS_REWARD_CUT - indexerRewardCut; + assertEq(staking.getStake(address(users.indexer)), tokens + indexerRewardCut); + assertEq(staking.getDelegationPool(users.indexer, subgraphDataServiceLegacyAddress).tokens, delegationTokens + delegationFeeCut); + } } \ No newline at end of file diff --git a/packages/horizon/test/staking/allocation/collect.t.sol b/packages/horizon/test/staking/allocation/collect.t.sol index ee33f89e5..b12783510 100644 --- a/packages/horizon/test/staking/allocation/collect.t.sol +++ b/packages/horizon/test/staking/allocation/collect.t.sol @@ -65,14 +65,6 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { vm.store(address(staking), slot, newProtocolTaxValue); } - function _storeDelegationPool(uint256 tokens, uint32 queryFeeCut) private { - bytes32 baseSlot = keccak256(abi.encode(users.indexer, uint256(20))); - bytes32 queryFeeCutValue = bytes32(uint256(queryFeeCut) << uint256(64)); - bytes32 tokensSlot = bytes32(uint256(baseSlot) + 2); - vm.store(address(staking), baseSlot, queryFeeCutValue); - vm.store(address(staking), tokensSlot, bytes32(tokens)); - } - /* * TESTS */ @@ -114,7 +106,7 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { _createProvision(subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); _storeAllocation(allocationTokens); _storeProtocolTaxAndCuration(curationPercentage, protocolTaxPercentage); - _storeDelegationPool(delegationTokens, queryFeeCut); + _storeDelegationPool(delegationTokens, 0, queryFeeCut); curation.signal(_subgraphDeploymentID, curationTokens); resetPrank(users.gateway); From 99c273ee656027e49cb7f73c1477790698780402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Sat, 8 Jun 2024 00:09:56 +0200 Subject: [PATCH 118/343] fix: change delegation ratio to be a value instead of range MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../extensions/DataServiceFees.sol | 2 +- .../utilities/ProvisionManager.sol | 81 ++++++------------- .../utilities/ProvisionManagerStorage.sol | 10 +-- .../test/data-service/DataService.t.sol | 5 +- .../data-service/DataServiceUpgradeable.t.sol | 5 +- .../contracts/SubgraphService.sol | 14 ++-- .../contracts/interfaces/ISubgraphService.sol | 6 +- 7 files changed, 42 insertions(+), 81 deletions(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 1ffabce2c..d9a6122b6 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -39,7 +39,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat * @param _unlockTimestamp The timestamp when the tokens can be released */ function _lockStake(address _serviceProvider, uint256 _tokens, uint256 _unlockTimestamp) internal { - feesProvisionTracker.lock(_graphStaking(), _serviceProvider, _tokens, maximumDelegationRatio); + feesProvisionTracker.lock(_graphStaking(), _serviceProvider, _tokens, delegationRatio); LinkedList.List storage claimsList = claimsLists[_serviceProvider]; diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 247567bc2..a500febf9 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -17,7 +17,6 @@ import { ProvisionManagerV1Storage } from "./ProvisionManagerStorage.sol"; * if the parameter is out of range. * The parameters are: * - Provision parameters (thawing period and verifier cut) - * - Delegation ratio * - Provision tokens */ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionManagerV1Storage { @@ -31,11 +30,10 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa event ProvisionTokensRangeSet(uint256 min, uint256 max); /** - * @notice Emitted when the delegation ratio range is set. - * @param min The minimum allowed value for the delegation ratio. - * @param max The maximum allowed value for the delegation ratio. + * @notice Emitted when the delegation ratio is set. + * @param ratio The delegation ratio */ - event DelegationRatioRangeSet(uint32 min, uint32 max); + event DelegationRatioSet(uint32 ratio); /** * @notice Emitted when the verifier cut range is set. @@ -91,7 +89,6 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa modifier onlyValidProvision(address serviceProvider) virtual { IHorizonStaking.Provision memory provision = _getProvision(serviceProvider); _checkProvisionTokens(provision); - _checkProvisionDelegationRatio(provision, serviceProvider); _checkProvisionParameters(provision, false); _; } @@ -124,12 +121,11 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa } /** - * @notice External getter for the delegation ratio range - * @return Minimum delegation ratio allowed - * @return Maximum delegation ratio allowed + * @notice External getter for the delegation ratio + * @return The delegation ratio */ - function getDelegationRatioRange() external view returns (uint32, uint32) { - return _getDelegationRatioRange(); + function getDelegationRatio() external view returns (uint32) { + return _getDelegationRatio(); } /** @@ -147,7 +143,6 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa // solhint-disable-next-line func-name-mixedcase function __ProvisionManager_init_unchained() internal onlyInitializing { _setProvisionTokensRange(type(uint256).min, type(uint256).max); - _setDelegationRatioRange(type(uint32).min, type(uint32).max); _setVerifierCutRange(type(uint32).min, type(uint32).max); _setThawingPeriodRange(type(uint64).min, type(uint64).max); } @@ -167,6 +162,14 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa } // -- setters -- + /** + * @notice Sets the delegation ratio. + * @param _ratio The delegation ratio to be set + */ + function _setDelegationRatio(uint32 _ratio) internal { + delegationRatio = _ratio; + emit DelegationRatioSet(_ratio); + } /** * @notice Sets the range for the provision tokens. @@ -179,17 +182,6 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa emit ProvisionTokensRangeSet(_min, _max); } - /** - * @notice Sets the range for the delegation ratio. - * @param _min The minimum allowed value for the delegation ratio. - * @param _max The maximum allowed value for the delegation ratio. - */ - function _setDelegationRatioRange(uint32 _min, uint32 _max) internal { - minimumDelegationRatio = _min; - maximumDelegationRatio = _max; - emit DelegationRatioRangeSet(_min, _max); - } - /** * @notice Sets the range for the verifier cut. * @param _min The minimum allowed value for the max verifier cut. @@ -231,32 +223,6 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa _checkValueInRange(_provision.tokens, minimumProvisionTokens, maximumProvisionTokens, "tokens"); } - /** - * @notice Checks if the delegation ratio of a service provider is within the valid range. - * @param _serviceProvider The address of the service provider. - */ - function _checkProvisionDelegationRatio(address _serviceProvider) internal view virtual { - IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider); - _checkProvisionDelegationRatio(provision, _serviceProvider); - } - - /** - * @notice Checks if the delegation ratio of a service provider is within the valid range. - * @param _provision The provision to check. - * @param _serviceProvider The address of the service provider. - */ - function _checkProvisionDelegationRatio( - IHorizonStaking.Provision memory _provision, - address _serviceProvider - ) internal view virtual { - (uint32 delegationRatioMin, uint32 delegationRatioMax) = _getDelegationRatioRange(); - if (delegationRatioMin == type(uint32).min && delegationRatioMax == type(uint32).max) return; - - uint256 delegatedTokens = _graphStaking().getDelegatedTokensAvailable(_serviceProvider, address(this)); - uint256 delegationRatioToCheck = uint32(delegatedTokens / (_provision.tokens - _provision.tokensThawing)); - _checkValueInRange(delegationRatioToCheck, delegationRatioMin, delegationRatioMax, "delegationRatio"); - } - /** * @notice Checks if the provision parameters of a service provider are within the valid range. * @param _serviceProvider The address of the service provider. @@ -291,6 +257,14 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa // -- getters -- + /** + * @notice Gets the delegation ratio. + * @return The delegation ratio + */ + function _getDelegationRatio() internal view virtual returns (uint32) { + return delegationRatio; + } + /** * @notice Gets the range for the provision tokens. * @return min The minimum allowed value for the provision tokens. @@ -300,15 +274,6 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa return (minimumProvisionTokens, maximumProvisionTokens); } - /** - * @notice Gets the range for the delegation ratio. - * @return min The minimum allowed value for the delegation ratio. - * @return max The maximum allowed value for the delegation ratio. - */ - function _getDelegationRatioRange() internal view virtual returns (uint32 min, uint32 max) { - return (minimumDelegationRatio, maximumDelegationRatio); - } - /** * @notice Gets the range for the thawing period. * @return min The minimum allowed value for the thawing period. diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol index acc24d5a0..70f10d6e3 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol @@ -11,12 +11,6 @@ abstract contract ProvisionManagerV1Storage { /// @notice The maximum amount of tokens allowed to register a provision in the data service uint256 public maximumProvisionTokens; - /// @notice Minimum delegation to self stake ratio required - uint32 public minimumDelegationRatio; - - /// @notice Maximum delegation to self stake ratio allowed for a service provider - uint32 public maximumDelegationRatio; - /// @notice The minimum thawing period required to register a provision in the data service uint64 public minimumThawingPeriod; @@ -29,6 +23,10 @@ abstract contract ProvisionManagerV1Storage { /// @notice The maximum verifier cut allowed to register a provision in the data service uint32 public maximumVerifierCut; + /// @notice How much delegation the service provider can effectively use + /// @dev Max calculated as service provider's stake * delegationRatio + uint32 public delegationRatio; + /// @dev Gap to allow adding variables in future upgrades uint256[50] private __gap; } diff --git a/packages/horizon/test/data-service/DataService.t.sol b/packages/horizon/test/data-service/DataService.t.sol index 738e2112d..66d12d80b 100644 --- a/packages/horizon/test/data-service/DataService.t.sol +++ b/packages/horizon/test/data-service/DataService.t.sol @@ -8,9 +8,8 @@ contract DataServiceTest is GraphBaseTest { function test_WhenTheContractIsDeployedWithAValidController() external { DataServiceBase dataService = _deployDataService(); - (uint32 minDelegationRatio, uint32 maxDelegationRatio) = dataService.getDelegationRatioRange(); - assertEq(minDelegationRatio, type(uint32).min); - assertEq(maxDelegationRatio, type(uint32).max); + uint32 delegationRatio = dataService.getDelegationRatio(); + assertEq(delegationRatio, type(uint32).min); (uint256 minTokens, uint256 maxTokens) = dataService.getProvisionTokensRange(); assertEq(minTokens, type(uint256).min); diff --git a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol index 5523d7286..49ddec3d7 100644 --- a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol +++ b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol @@ -10,9 +10,8 @@ contract DataServiceUpgradeableTest is GraphBaseTest { function test_WhenTheContractIsDeployedWithAValidController() external { DataServiceBaseUpgradeable dataService = _deployDataService(); - (uint32 minDelegationRatio, uint32 maxDelegationRatio) = dataService.getDelegationRatioRange(); - assertEq(minDelegationRatio, type(uint32).min); - assertEq(maxDelegationRatio, type(uint32).max); + uint32 delegationRatio = dataService.getDelegationRatio(); + assertEq(delegationRatio, type(uint32).min); (uint256 minTokens, uint256 maxTokens) = dataService.getProvisionTokensRange(); assertEq(minTokens, type(uint256).min); diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index e127abd3d..d45e13ba3 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -82,14 +82,14 @@ contract SubgraphService is * @dev The thawingPeriod and verifierCut ranges are not set here because they are variables * on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges. */ - function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external override initializer { + function initialize(uint256 minimumProvisionTokens, uint32 delegationRatio) external override initializer { __Ownable_init(msg.sender); __DataService_init(); __DataServicePausable_init(); __AllocationManager_init("SubgraphService", "1.0"); _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max); - _setDelegationRatioRange(type(uint32).min, maximumDelegationRatio); + _setDelegationRatio(delegationRatio); } /** @@ -192,7 +192,7 @@ contract SubgraphService is data, (bytes32, uint256, address, bytes) ); - _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof, maximumDelegationRatio); + _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof, delegationRatio); emit ServiceStarted(indexer, data); } @@ -297,7 +297,7 @@ contract SubgraphService is onlyRegisteredIndexer(indexer) whenNotPaused { - _resizeAllocation(allocationId, tokens, maximumDelegationRatio); + _resizeAllocation(allocationId, tokens, delegationRatio); } /** @@ -333,10 +333,10 @@ contract SubgraphService is } /** - * @notice See {ISubgraphService.setMaximumDelegationRatio} + * @notice See {ISubgraphService.setDelegationRatio} */ - function setMaximumDelegationRatio(uint32 maximumDelegationRatio) external override onlyOwner { - _setDelegationRatioRange(type(uint32).min, maximumDelegationRatio); + function setDelegationRatio(uint32 delegationRatio) external override onlyOwner { + _setDelegationRatio(delegationRatio); } /** diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index d4b51999b..39fc7430d 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -128,10 +128,10 @@ interface ISubgraphService is IDataServiceFees { function setMinimumProvisionTokens(uint256 minimumProvisionTokens) external; /** - * @notice Sets the maximum delegation ratio allowed for an allocation - * @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation + * @notice Sets the delegation ratio + * @param delegationRatio The delegation ratio */ - function setMaximumDelegationRatio(uint32 maximumDelegationRatio) external; + function setDelegationRatio(uint32 delegationRatio) external; /** * @notice Sets the rewards destination for an indexer to receive indexing rewards From 1741ea2311b009d11005075369729246abd448e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Sat, 8 Jun 2024 00:24:12 +0200 Subject: [PATCH 119/343] fix: moar feedback fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IBridgeEscrow.sol | 26 ------------------- .../contracts/libraries/Denominations.sol | 1 + .../contracts/utilities/GraphDirectory.sol | 15 ----------- packages/horizon/eslint.config.js | 2 +- packages/horizon/package.json | 2 +- packages/horizon/test/GraphBase.t.sol | 1 - .../test/utilities/GraphDirectory.t.sol | 2 -- .../GraphDirectoryImplementation.sol | 5 ---- packages/subgraph-service/package.json | 2 +- 9 files changed, 4 insertions(+), 52 deletions(-) delete mode 100644 packages/horizon/contracts/interfaces/IBridgeEscrow.sol diff --git a/packages/horizon/contracts/interfaces/IBridgeEscrow.sol b/packages/horizon/contracts/interfaces/IBridgeEscrow.sol deleted file mode 100644 index 4e0021423..000000000 --- a/packages/horizon/contracts/interfaces/IBridgeEscrow.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -pragma solidity 0.8.26; - -/** - * @title IBridgeEscrow - */ -interface IBridgeEscrow { - /** - * @notice Initialize the BridgeEscrow contract. - * @param controller Address of the Controller that manages this contract - */ - function initialize(address controller) external; - - /** - * @notice Approve a spender (i.e. a bridge that manages the GRT funds held by the escrow) - * @param spender Address of the spender that will be approved - */ - function approveAll(address spender) external; - - /** - * @notice Revoke a spender (i.e. a bridge that will no longer manage the GRT funds held by the escrow) - * @param spender Address of the spender that will be revoked - */ - function revokeAll(address spender) external; -} diff --git a/packages/horizon/contracts/libraries/Denominations.sol b/packages/horizon/contracts/libraries/Denominations.sol index ae3adab94..fe5cf2d05 100644 --- a/packages/horizon/contracts/libraries/Denominations.sol +++ b/packages/horizon/contracts/libraries/Denominations.sol @@ -8,6 +8,7 @@ pragma solidity 0.8.26; */ library Denominations { /// @notice The address of the native token, i.e ETH + /// @dev This convention is taken from https://eips.ethereum.org/EIPS/eip-7528 address internal constant NATIVE_TOKEN = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; /** diff --git a/packages/horizon/contracts/utilities/GraphDirectory.sol b/packages/horizon/contracts/utilities/GraphDirectory.sol index 570a5d476..b63bcdeab 100644 --- a/packages/horizon/contracts/utilities/GraphDirectory.sol +++ b/packages/horizon/contracts/utilities/GraphDirectory.sol @@ -11,7 +11,6 @@ import { IController } from "@graphprotocol/contracts/contracts/governance/ICont import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; import { ITokenGateway } from "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol"; -import { IBridgeEscrow } from "../interfaces/IBridgeEscrow.sol"; import { IGraphProxyAdmin } from "../interfaces/IGraphProxyAdmin.sol"; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; @@ -52,9 +51,6 @@ abstract contract GraphDirectory { /// @notice The Token Gateway contract address ITokenGateway private immutable GRAPH_TOKEN_GATEWAY; - /// @notice The Bridge Escrow contract address - IBridgeEscrow private immutable GRAPH_BRIDGE_ESCROW; - /// @notice The Graph Proxy Admin contract address IGraphProxyAdmin private immutable GRAPH_PROXY_ADMIN; @@ -73,7 +69,6 @@ abstract contract GraphDirectory { * @param graphEpochManager The Epoch Manager contract address * @param graphRewardsManager The Rewards Manager contract address * @param graphTokenGateway The Token Gateway contract address - * @param graphBridgeEscrow The Bridge Escrow contract address * @param graphProxyAdmin The Graph Proxy Admin contract address * @param graphCuration The Curation contract address */ @@ -86,7 +81,6 @@ abstract contract GraphDirectory { address graphEpochManager, address graphRewardsManager, address graphTokenGateway, - address graphBridgeEscrow, address graphProxyAdmin, address graphCuration ); @@ -118,7 +112,6 @@ abstract contract GraphDirectory { GRAPH_EPOCH_MANAGER = IEpochManager(_getContractFromController("EpochManager")); GRAPH_REWARDS_MANAGER = IRewardsManager(_getContractFromController("RewardsManager")); GRAPH_TOKEN_GATEWAY = ITokenGateway(_getContractFromController("GraphTokenGateway")); - GRAPH_BRIDGE_ESCROW = IBridgeEscrow(_getContractFromController("BridgeEscrow")); GRAPH_PROXY_ADMIN = IGraphProxyAdmin(_getContractFromController("GraphProxyAdmin")); GRAPH_CURATION = ICuration(_getContractFromController("Curation")); @@ -131,7 +124,6 @@ abstract contract GraphDirectory { address(GRAPH_EPOCH_MANAGER), address(GRAPH_REWARDS_MANAGER), address(GRAPH_TOKEN_GATEWAY), - address(GRAPH_BRIDGE_ESCROW), address(GRAPH_PROXY_ADMIN), address(GRAPH_CURATION) ); @@ -193,13 +185,6 @@ abstract contract GraphDirectory { return GRAPH_TOKEN_GATEWAY; } - /** - * @notice Get the Bridge Escrow contract - */ - function _graphBridgeEscrow() internal view returns (IBridgeEscrow) { - return GRAPH_BRIDGE_ESCROW; - } - /** * @notice Get the Graph Proxy Admin contract */ diff --git a/packages/horizon/eslint.config.js b/packages/horizon/eslint.config.js index 2cb4335fd..c9e06b116 100644 --- a/packages/horizon/eslint.config.js +++ b/packages/horizon/eslint.config.js @@ -16,6 +16,6 @@ module.exports = [ }, }, { - ignores: ['typechain-types/*'], + ignores: ['typechain-types/*', 'lib/*'], }, ] diff --git a/packages/horizon/package.json b/packages/horizon/package.json index e6001d96c..a214e1d0a 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -2,7 +2,7 @@ "name": "@graphprotocol/horizon", "version": "0.0.1", "description": "", - "author": "The Graph Team", + "author": "The Graph core devs", "license": "GPL-2.0-or-later", "scripts": { "lint:ts": "eslint '**/*.{js,ts}' --fix", diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index c7f57197a..b978fba2d 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -142,7 +142,6 @@ abstract contract GraphBaseTest is Utils, Constants { controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); controller.setContractProxy(keccak256("Curation"), address(curation)); controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); - controller.setContractProxy(keccak256("BridgeEscrow"), makeAddr("BridgeEscrow")); controller.setContractProxy(keccak256("GraphProxyAdmin"), address(proxyAdmin)); resetPrank(users.deployer); diff --git a/packages/horizon/test/utilities/GraphDirectory.t.sol b/packages/horizon/test/utilities/GraphDirectory.t.sol index 6a2c958b8..35ab2a291 100644 --- a/packages/horizon/test/utilities/GraphDirectory.t.sol +++ b/packages/horizon/test/utilities/GraphDirectory.t.sol @@ -19,7 +19,6 @@ contract GraphDirectoryTest is GraphBaseTest { _getContractFromController("EpochManager"), _getContractFromController("RewardsManager"), _getContractFromController("GraphTokenGateway"), - _getContractFromController("BridgeEscrow"), _getContractFromController("GraphProxyAdmin"), _getContractFromController("Curation") ); @@ -49,7 +48,6 @@ contract GraphDirectoryTest is GraphBaseTest { assertEq(_getContractFromController("EpochManager"), address(directory.graphEpochManager())); assertEq(_getContractFromController("RewardsManager"), address(directory.graphRewardsManager())); assertEq(_getContractFromController("GraphTokenGateway"), address(directory.graphTokenGateway())); - assertEq(_getContractFromController("BridgeEscrow"), address(directory.graphBridgeEscrow())); assertEq(_getContractFromController("GraphProxyAdmin"), address(directory.graphProxyAdmin())); assertEq(_getContractFromController("Curation"), address(directory.graphCuration())); } diff --git a/packages/horizon/test/utilities/GraphDirectoryImplementation.sol b/packages/horizon/test/utilities/GraphDirectoryImplementation.sol index 9f4b5066c..57780f450 100644 --- a/packages/horizon/test/utilities/GraphDirectoryImplementation.sol +++ b/packages/horizon/test/utilities/GraphDirectoryImplementation.sol @@ -11,7 +11,6 @@ import { IController } from "@graphprotocol/contracts/contracts/governance/ICont import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; import { ITokenGateway } from "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol"; -import { IBridgeEscrow } from "../../contracts/interfaces/IBridgeEscrow.sol"; import { IGraphProxyAdmin } from "../../contracts/interfaces/IGraphProxyAdmin.sol"; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; @@ -55,10 +54,6 @@ contract GraphDirectoryImplementation is GraphDirectory { return _graphTokenGateway(); } - function graphBridgeEscrow() external view returns (IBridgeEscrow) { - return _graphBridgeEscrow(); - } - function graphProxyAdmin() external view returns (IGraphProxyAdmin) { return _graphProxyAdmin(); } diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index b591a4d41..a90790742 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -2,7 +2,7 @@ "name": "@graphprotocol/subgraph-service", "version": "0.0.1", "description": "", - "author": "The Graph Team", + "author": "The Graph core devs", "license": "GPL-2.0-or-later", "scripts": { "lint:ts": "eslint '**/*.{js,ts}' --fix", From 6f376cd2e64c14507707e801992c8c19e76a3aa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 7 Jun 2024 19:25:19 -0300 Subject: [PATCH 120/343] =?UTF-8?q?fix:=20ensure=20rewards=20manager=20loo?= =?UTF-8?q?ks=20at=20subgraph=20service=20and=20staking=20for=E2=80=A6=20(?= =?UTF-8?q?#982)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: ensure rewards manager looks at subgraph service and staking for allos Signed-off-by: Tomás Migone * fix: typo Signed-off-by: Tomás Migone --------- Signed-off-by: Tomás Migone --- .../contracts/rewards/IRewardsIssuer.sol | 20 ++++++- .../contracts/rewards/IRewardsManager.sol | 2 +- .../contracts/rewards/RewardsManager.sol | 59 +++++++++++++++---- .../rewards/RewardsManagerStorage.sol | 7 ++- .../contracts/staking/IStakingBase.sol | 14 +++++ .../contracts/contracts/staking/Staking.sol | 21 +++++++ .../test/unit/rewards/rewards.test.ts | 10 ++-- .../internal/IHorizonStakingExtension.sol | 7 --- .../staking/HorizonStakingExtension.sol | 9 +++ .../contracts/SubgraphService.sol | 24 ++++++++ .../test/mocks/MockRewardsManager.sol | 2 +- 11 files changed, 141 insertions(+), 34 deletions(-) diff --git a/packages/contracts/contracts/rewards/IRewardsIssuer.sol b/packages/contracts/contracts/rewards/IRewardsIssuer.sol index 21dcc8768..949c564a2 100644 --- a/packages/contracts/contracts/rewards/IRewardsIssuer.sol +++ b/packages/contracts/contracts/rewards/IRewardsIssuer.sol @@ -5,9 +5,9 @@ pragma solidity ^0.7.6 || 0.8.26; interface IRewardsIssuer { /** * @dev Get allocation data to calculate rewards issuance - * @param allocationId The allocation ID + * @param allocationId The allocation Id * @return indexer The indexer address - * @return subgraphDeploymentID Subgraph deployment id for the allocation + * @return subgraphDeploymentId Subgraph deployment id for the allocation * @return tokens Amount of allocated tokens * @return accRewardsPerAllocatedToken Rewards snapshot */ @@ -16,5 +16,19 @@ interface IRewardsIssuer { ) external view - returns (address indexer, bytes32 subgraphDeploymentID, uint256 tokens, uint256 accRewardsPerAllocatedToken); + returns (address indexer, bytes32 subgraphDeploymentId, uint256 tokens, uint256 accRewardsPerAllocatedToken); + + /** + * @notice Return the total amount of tokens allocated to subgraph. + * @param _subgraphDeploymentId Deployment Id for the subgraph + * @return Total tokens allocated to subgraph + */ + function getSubgraphAllocatedTokens(bytes32 _subgraphDeploymentId) external view returns (uint256); + + /** + * @notice Wether or not an allocation is active (i.e open) + * @param _allocationId Allocation Id + * @return Wether or not the allocation is active + */ + function isActiveAllocation(address _allocationId) external view returns (bool); } diff --git a/packages/contracts/contracts/rewards/IRewardsManager.sol b/packages/contracts/contracts/rewards/IRewardsManager.sol index 1602fe91e..e511748e3 100644 --- a/packages/contracts/contracts/rewards/IRewardsManager.sol +++ b/packages/contracts/contracts/rewards/IRewardsManager.sol @@ -19,7 +19,7 @@ interface IRewardsManager { function setMinimumSubgraphSignal(uint256 _minimumSubgraphSignal) external; - function setRewardsIssuer(address _rewardsIssuer, bool _allowed) external; + function setSubgraphService(address _subgraphService) external; // -- Denylist -- diff --git a/packages/contracts/contracts/rewards/RewardsManager.sol b/packages/contracts/contracts/rewards/RewardsManager.sol index 41c79e861..21512ec80 100644 --- a/packages/contracts/contracts/rewards/RewardsManager.sol +++ b/packages/contracts/contracts/rewards/RewardsManager.sol @@ -52,9 +52,9 @@ contract RewardsManager is RewardsManagerV5Storage, GraphUpgradeable, IRewardsMa event RewardsDenylistUpdated(bytes32 indexed subgraphDeploymentID, uint256 sinceBlock); /** - * @dev Emitted when a rewards issuer is updated. + * @dev Emitted when the subgraph service is set */ - event RewardsIssuerSet(address indexed rewardsIssuer, bool allowed); + event SubgraphServiceSet(address indexed oldSubgraphService, address indexed newSubgraphService); // -- Modifiers -- @@ -121,9 +121,10 @@ contract RewardsManager is RewardsManagerV5Storage, GraphUpgradeable, IRewardsMa emit ParameterUpdated("minimumSubgraphSignal"); } - function setRewardsIssuer(address _rewardsIssuer, bool _allowed) external override onlyGovernor { - rewardsIssuers[_rewardsIssuer] = _allowed; - emit RewardsIssuerSet(_rewardsIssuer, _allowed); + function setSubgraphService(address _subgraphService) external override onlyGovernor { + address oldSubgraphService = address(subgraphService); + subgraphService = IRewardsIssuer(_subgraphService); + emit SubgraphServiceSet(oldSubgraphService, _subgraphService); } // -- Denylist -- @@ -258,7 +259,19 @@ contract RewardsManager is RewardsManagerV5Storage, GraphUpgradeable, IRewardsMa subgraph.accRewardsForSubgraphSnapshot ); - uint256 subgraphAllocatedTokens = staking().getSubgraphAllocatedTokens(_subgraphDeploymentID); + // There are two contributors to subgraph allocated tokens: + // - the legacy allocations on the legacy staking contract + // - the new allocations on the subgraph service + uint256 subgraphAllocatedTokens = 0; + address[2] memory rewardsIssuers = [address(staking()), address(subgraphService)]; + for (uint256 i = 0; i < rewardsIssuers.length; i++) { + if (rewardsIssuers[i] != address(0)) { + subgraphAllocatedTokens += IRewardsIssuer(rewardsIssuers[i]).getSubgraphAllocatedTokens( + _subgraphDeploymentID + ); + } + } + if (subgraphAllocatedTokens == 0) { return (0, accRewardsForSubgraph); } @@ -321,19 +334,35 @@ contract RewardsManager is RewardsManagerV5Storage, GraphUpgradeable, IRewardsMa /** * @dev Calculate current rewards for a given allocation on demand. + * The allocation could be a legacy allocation or a new subgraph service allocation. * @param _allocationID Allocation * @return Rewards amount for an allocation */ function getRewards(address _allocationID) external view override returns (uint256) { - IStaking.AllocationState allocState = staking().getAllocationState(_allocationID); - if (allocState != IStakingBase.AllocationState.Active) { + address rewardsIssuer = address(0); + + // Check both the legacy and new allocations + address[2] memory rewardsIssuers = [address(staking()), address(subgraphService)]; + for (uint256 i = 0; i < rewardsIssuers.length; i++) { + if (rewardsIssuers[i] != address(0)) { + if (IRewardsIssuer(rewardsIssuers[i]).isActiveAllocation(_allocationID)) { + rewardsIssuer = address(rewardsIssuers[i]); + break; + } + } + } + + // Bail if allo does not exist + if (rewardsIssuer == address(0)) { return 0; } - IStaking.Allocation memory alloc = staking().getAllocation(_allocationID); + (, bytes32 subgraphDeploymentId, uint256 tokens, uint256 alloAccRewardsPerAllocatedToken) = IRewardsIssuer( + rewardsIssuer + ).getAllocationData(_allocationID); - (uint256 accRewardsPerAllocatedToken, ) = getAccRewardsPerAllocatedToken(alloc.subgraphDeploymentID); - return _calcRewards(alloc.tokens, alloc.accRewardsPerAllocatedToken, accRewardsPerAllocatedToken); + (uint256 accRewardsPerAllocatedToken, ) = getAccRewardsPerAllocatedToken(subgraphDeploymentId); + return _calcRewards(tokens, alloAccRewardsPerAllocatedToken, accRewardsPerAllocatedToken); } /** @@ -354,14 +383,18 @@ contract RewardsManager is RewardsManagerV5Storage, GraphUpgradeable, IRewardsMa /** * @dev Pull rewards from the contract for a particular allocation. - * This function can only be called by the Staking contract. + * This function can only be called by an authorized rewards issuer which are + * the staking contract (for legacy allocations), and the subgraph service (for new allocations). * This function will mint the necessary tokens to reward based on the inflation calculation. * @param _allocationID Allocation * @return Assigned rewards amount */ function takeRewards(address _allocationID) external override returns (uint256) { address rewardsIssuer = msg.sender; - require(rewardsIssuers[rewardsIssuer], "Caller must be a rewards issuer"); + require( + rewardsIssuer == address(staking()) || rewardsIssuer == address(subgraphService), + "Caller must be a rewards issuer" + ); ( address indexer, diff --git a/packages/contracts/contracts/rewards/RewardsManagerStorage.sol b/packages/contracts/contracts/rewards/RewardsManagerStorage.sol index afcd98e43..c40ad38f4 100644 --- a/packages/contracts/contracts/rewards/RewardsManagerStorage.sol +++ b/packages/contracts/contracts/rewards/RewardsManagerStorage.sol @@ -1,9 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6; +pragma solidity ^0.7.6 || 0.8.26; import "./IRewardsManager.sol"; import "../governance/Managed.sol"; +import { IRewardsIssuer } from "./IRewardsIssuer.sol"; contract RewardsManagerV1Storage is Managed { // -- State -- @@ -38,6 +39,6 @@ contract RewardsManagerV4Storage is RewardsManagerV3Storage { } contract RewardsManagerV5Storage is RewardsManagerV4Storage { - // List of addresses that are allowed to issue rewards - mapping(address => bool) public rewardsIssuers; + // Address of the subgraph service + IRewardsIssuer public subgraphService; } diff --git a/packages/contracts/contracts/staking/IStakingBase.sol b/packages/contracts/contracts/staking/IStakingBase.sol index b30d00499..6ca3957f4 100644 --- a/packages/contracts/contracts/staking/IStakingBase.sol +++ b/packages/contracts/contracts/staking/IStakingBase.sol @@ -361,6 +361,20 @@ interface IStakingBase is IStakingData { */ function getAllocation(address _allocationID) external view returns (Allocation memory); + /** + * @dev New function to get the allocation data for the rewards manager + * @dev Note that this is only to make tests pass, as the staking contract with + * this changes will never get deployed. HorizonStaking is taking it's place. + */ + function getAllocationData(address _allocationID) external view returns (address, bytes32, uint256, uint256); + + /** + * @dev New function to get the allocation active status for the rewards manager + * @dev Note that this is only to make tests pass, as the staking contract with + * this changes will never get deployed. HorizonStaking is taking it's place. + */ + function isActiveAllocation(address _allocationID) external view returns (bool); + /** * @notice Return the current state of an allocation * @param _allocationID Allocation identifier diff --git a/packages/contracts/contracts/staking/Staking.sol b/packages/contracts/contracts/staking/Staking.sol index e9da34440..83745c30a 100644 --- a/packages/contracts/contracts/staking/Staking.sol +++ b/packages/contracts/contracts/staking/Staking.sol @@ -472,6 +472,27 @@ abstract contract Staking is StakingV4Storage, GraphUpgradeable, IStakingBase, M return __allocations[_allocationID]; } + /** + * @dev New function to get the allocation data for the rewards manager + * @dev Note that this is only to make tests pass, as the staking contract with + * this changes will never get deployed. HorizonStaking is taking it's place. + */ + function getAllocationData( + address _allocationID + ) external view override returns (address, bytes32, uint256, uint256) { + Allocation memory alloc = __allocations[_allocationID]; + return (alloc.indexer, alloc.subgraphDeploymentID, alloc.tokens, alloc.accRewardsPerAllocatedToken); + } + + /** + * @dev New function to get the allocation active status for the rewards manager + * @dev Note that this is only to make tests pass, as the staking contract with + * this changes will never get deployed. HorizonStaking is taking it's place. + */ + function isActiveAllocation(address _allocationID) external view override returns (bool) { + return _getAllocationState(_allocationID) == AllocationState.Active; + } + /** * @notice Return the current state of an allocation * @param _allocationID Allocation identifier diff --git a/packages/contracts/test/unit/rewards/rewards.test.ts b/packages/contracts/test/unit/rewards/rewards.test.ts index 1070b9ff3..c9e0f6a28 100644 --- a/packages/contracts/test/unit/rewards/rewards.test.ts +++ b/packages/contracts/test/unit/rewards/rewards.test.ts @@ -653,7 +653,6 @@ describe('Rewards', () => { const event = rewardsManager.interface.parseLog(receipt.logs[1]).args expect(event.indexer).eq(indexer1.address) expect(event.allocationID).eq(allocationID1) - expect(event.epoch).eq(await epochManager.currentEpoch()) expect(toRound(event.amount)).eq(toRound(expectedIndexingRewards)) // After state @@ -692,7 +691,7 @@ describe('Rewards', () => { const tx = staking.connect(indexer1).closeAllocation(allocationID1, randomHexBytes()) await expect(tx) .emit(rewardsManager, 'RewardsAssigned') - .withArgs(indexer1.address, allocationID1, await epochManager.currentEpoch(), toBN(0)) + .withArgs(indexer1.address, allocationID1, toBN(0)) }) it('does not revert with an underflow if the minimum signal changes, and signal came after allocation', async function () { @@ -710,7 +709,7 @@ describe('Rewards', () => { const tx = staking.connect(indexer1).closeAllocation(allocationID1, randomHexBytes()) await expect(tx) .emit(rewardsManager, 'RewardsAssigned') - .withArgs(indexer1.address, allocationID1, await epochManager.currentEpoch(), toBN(0)) + .withArgs(indexer1.address, allocationID1, toBN(0)) }) it('does not revert if signal was already under minimum', async function () { @@ -727,7 +726,7 @@ describe('Rewards', () => { await expect(tx) .emit(rewardsManager, 'RewardsAssigned') - .withArgs(indexer1.address, allocationID1, await epochManager.currentEpoch(), toBN(0)) + .withArgs(indexer1.address, allocationID1, toBN(0)) }) it('should distribute rewards on closed allocation and send to destination', async function () { @@ -761,7 +760,6 @@ describe('Rewards', () => { const event = rewardsManager.interface.parseLog(receipt.logs[1]).args expect(event.indexer).eq(indexer1.address) expect(event.allocationID).eq(allocationID1) - expect(event.epoch).eq(await epochManager.currentEpoch()) expect(toRound(event.amount)).eq(toRound(expectedIndexingRewards)) // After state @@ -853,7 +851,7 @@ describe('Rewards', () => { const tx = staking.connect(indexer1).closeAllocation(allocationID1, randomHexBytes()) await expect(tx) .emit(rewardsManager, 'RewardsDenied') - .withArgs(indexer1.address, allocationID1, await epochManager.currentEpoch()) + .withArgs(indexer1.address, allocationID1) }) }) }) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 3c9a26c91..d0331580e 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -160,13 +160,6 @@ interface IHorizonStakingExtension is IRewardsIssuer { */ function isAllocation(address allocationID) external view returns (bool); - /** - * @notice Return the total amount of tokens allocated to subgraph. - * @param subgraphDeploymentID Deployment ID for the subgraph - * @return Total tokens allocated to subgraph - */ - function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentID) external view returns (uint256); - /** * @notice Retrun the time in blocks to unstake * @return Thawing period in blocks diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 7abac7623..7931c2988 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -267,6 +267,15 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon return __DEPRECATED_subgraphAllocations[subgraphDeploymentID]; } + /** + * @notice Return true if allocation is active. + * @param allocationID Allocation identifier + * @return True if allocation is active + */ + function isActiveAllocation(address allocationID) external view override returns (bool) { + return _getAllocationState(allocationID) == AllocationState.Active; + } + /** * @notice Get the total amount of tokens staked by the indexer. * @param indexer Address of the indexer diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index d45e13ba3..566394b51 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -33,6 +33,7 @@ contract SubgraphService is { using PPMMath for uint256; using Allocation for mapping(address => Allocation.State); + using Allocation for Allocation.State; /** * @notice Checks that an indexer is registered @@ -372,6 +373,29 @@ contract SubgraphService is ); } + /** + * @notice Return the total amount of tokens allocated to subgraph. + * @dev Implements {IRewardsIssuer.getSubgraphAllocatedTokens} + * @dev To be used by the {RewardsManager}. + * @param subgraphDeploymentId Deployment Id for the subgraph + * @return Total tokens allocated to subgraph + */ + function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentId) external view override returns (uint256) { + return subgraphAllocatedTokens[subgraphDeploymentId]; + } + + /** + * @notice Check if an allocation is open + * @dev Implements {IRewardsIssuer.isAllocationActive} + * @dev To be used by the {RewardsManager}. + * + * @param allocationId The allocation Id + * @return Wether or not the allocation is active + */ + function isActiveAllocation(address allocationId) external view override returns (bool) { + return allocations[allocationId].isOpen(); + } + /** * @notice See {ISubgraphService.getLegacyAllocation} */ diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol index 3e43e8109..158feef50 100644 --- a/packages/subgraph-service/test/mocks/MockRewardsManager.sol +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -12,7 +12,7 @@ contract MockRewardsManager is IRewardsManager { function setMinimumSubgraphSignal(uint256) external {} - function setRewardsIssuer(address, bool) external {} + function setSubgraphService(address) external {} // -- Denylist -- From 02a2fc3e37334c89a6b44acfdcd9bd023333655c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Sat, 8 Jun 2024 01:16:06 +0200 Subject: [PATCH 121/343] feat: use poi to create dispute MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/DisputeManager.sol | 20 ++++++++---- .../contracts/interfaces/IDisputeManager.sol | 5 +-- packages/subgraph-service/package.json | 2 +- .../test/DisputeManager.t.sol | 31 ++++++++++++------- 4 files changed, 38 insertions(+), 20 deletions(-) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 692c6a93c..b1d894061 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -119,18 +119,24 @@ contract DisputeManager is /** * @notice Create an indexing dispute for the arbitrator to resolve. - * The disputes are created in reference to an allocationId + * The disputes are created in reference to an allocationId and specifically + * a POI for that allocation. * This function is called by a challenger that will need to `_deposit` at * least `minimumDeposit` GRT tokens. * @param allocationId The allocation to dispute + * @param poi The Proof of Indexing (POI) being disputed * @param deposit Amount of tokens staked as deposit */ - function createIndexingDispute(address allocationId, uint256 deposit) external override returns (bytes32) { + function createIndexingDispute( + address allocationId, + bytes32 poi, + uint256 deposit + ) external override returns (bytes32) { // Get funds from submitter _pullSubmitterDeposit(deposit); // Create a dispute - return _createIndexingDisputeWithAllocation(msg.sender, deposit, allocationId); + return _createIndexingDisputeWithAllocation(msg.sender, deposit, allocationId, poi); } /** @@ -486,14 +492,16 @@ contract DisputeManager is * @param _fisherman The challenger creating the dispute * @param _deposit Amount of tokens staked as deposit * @param _allocationId Allocation disputed + * @param _poi The POI being disputed */ function _createIndexingDisputeWithAllocation( address _fisherman, uint256 _deposit, - address _allocationId + address _allocationId, + bytes32 _poi ) private returns (bytes32) { // Create a disputeId - bytes32 disputeId = keccak256(abi.encodePacked(_allocationId)); + bytes32 disputeId = keccak256(abi.encodePacked(_allocationId, _poi)); // Only one dispute for an allocationId at a time require(!isDisputeCreated(disputeId), DisputeManagerDisputeAlreadyCreated(disputeId)); @@ -518,7 +526,7 @@ contract DisputeManager is block.timestamp ); - emit IndexingDisputeCreated(disputeId, alloc.indexer, _fisherman, _deposit, _allocationId); + emit IndexingDisputeCreated(disputeId, alloc.indexer, _fisherman, _deposit, _allocationId, _poi); return disputeId; } diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index f53b0f538..86b7783d8 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -100,7 +100,8 @@ interface IDisputeManager { address indexed indexer, address indexed fisherman, uint256 tokens, - address allocationId + address allocationId, + bytes32 poi ); /** @@ -193,7 +194,7 @@ interface IDisputeManager { bytes calldata attestationData2 ) external returns (bytes32, bytes32); - function createIndexingDispute(address allocationId, uint256 deposit) external returns (bytes32); + function createIndexingDispute(address allocationId, bytes32 poi, uint256 deposit) external returns (bytes32); function acceptDispute(bytes32 disputeId, uint256 tokensSlash) external; diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index a90790742..da7b33a3d 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -10,7 +10,7 @@ "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", "build": "forge build && hardhat compile", - "test": "FOUNDRY_PROFILE=lite forge test -vvv && hardhat test" + "test": "FOUNDRY_PROFILE=lite forge test -vvvv && hardhat test" }, "devDependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", diff --git a/packages/subgraph-service/test/DisputeManager.t.sol b/packages/subgraph-service/test/DisputeManager.t.sol index f11f0a051..97fd7b5ff 100644 --- a/packages/subgraph-service/test/DisputeManager.t.sol +++ b/packages/subgraph-service/test/DisputeManager.t.sol @@ -6,6 +6,7 @@ import "forge-std/Test.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; +import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; import { DisputeManager } from "../contracts/DisputeManager.sol"; import { IDisputeManager } from "../contracts/interfaces/IDisputeManager.sol"; @@ -72,16 +73,24 @@ contract DisputeManagerTest is Test { controller.setContractProxy(keccak256("GraphToken"), address(graphToken)); controller.setContractProxy(keccak256("Staking"), address(staking)); controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); + controller.setContractProxy(keccak256("GraphPayments"), address(0x100)); + controller.setContractProxy(keccak256("PaymentsEscrow"), address(0x101)); + controller.setContractProxy(keccak256("EpochManager"), address(0x102)); + controller.setContractProxy(keccak256("GraphTokenGateway"), address(0x103)); + controller.setContractProxy(keccak256("GraphProxyAdmin"), address(0x104)); + controller.setContractProxy(keccak256("Curation"), address(0x105)); vm.stopPrank(); - disputeManager = new DisputeManager(address(controller)); - disputeManager.initialize( - arbitrator, - disputePeriod, - minimumDeposit, - fishermanRewardPercentage, - maxSlashingPercentage + address disputeManagerImplementation = address(new DisputeManager(address(controller))); + address disputeManagerProxy = UnsafeUpgrades.deployTransparentProxy( + disputeManagerImplementation, + governor, + abi.encodeCall( + DisputeManager.initialize, + (arbitrator, disputePeriod, minimumDeposit, fishermanRewardPercentage, maxSlashingPercentage) + ) ); + disputeManager = DisputeManager(disputeManagerProxy); subgraphService = new SubgraphService(address(controller), address(disputeManager), tapVerifier, curation); subgraphService.initialize(1000 ether, 16); @@ -110,7 +119,7 @@ contract DisputeManagerTest is Test { vm.startPrank(fisherman); graphToken.mint(fisherman, tokens); graphToken.approve(address(disputeManager), tokens); - bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, tokens); + bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, bytes32("POI1234"), tokens); vm.stopPrank(); return _disputeID; } @@ -218,7 +227,7 @@ contract DisputeManagerTest is Test { graphToken.approve(address(disputeManager), tokens); bytes memory expectedError = abi.encodeWithSignature("DisputeManagerDisputeAlreadyCreated(bytes32)", disputeID); vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, tokens); + disputeManager.createIndexingDispute(allocationID, bytes32("POI1234"), tokens); vm.stopPrank(); } @@ -232,7 +241,7 @@ contract DisputeManagerTest is Test { 100 ether ); vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, 50 ether); + disputeManager.createIndexingDispute(allocationID, bytes32("POI1234"), 50 ether); vm.stopPrank(); } @@ -244,7 +253,7 @@ contract DisputeManagerTest is Test { graphToken.approve(address(disputeManager), tokens); bytes memory expectedError = abi.encodeWithSignature("DisputeManagerIndexerNotFound(address)", allocationID); vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, tokens); + disputeManager.createIndexingDispute(allocationID, bytes32("POI1234"), tokens); vm.stopPrank(); } From aba7ac591ceda1a68d15e3c57068b4a8d620b0eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Sat, 8 Jun 2024 01:43:02 +0200 Subject: [PATCH 122/343] feat: use poi to create dispute id MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .gitmodules | 3 ++ .../contracts/SubgraphService.sol | 2 +- .../lib/openzeppelin-foundry-upgrades | 1 + packages/subgraph-service/remappings.txt | 1 + .../test/DisputeManager.t.sol | 43 +++++++++++-------- .../test/mocks/MockHorizonStaking.sol | 10 ++++- 6 files changed, 40 insertions(+), 20 deletions(-) create mode 160000 packages/subgraph-service/lib/openzeppelin-foundry-upgrades diff --git a/.gitmodules b/.gitmodules index 313d1d2d0..8cd5a0672 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "packages/horizon/lib/openzeppelin-foundry-upgrades"] path = packages/horizon/lib/openzeppelin-foundry-upgrades url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades +[submodule "packages/subgraph-service/lib/openzeppelin-foundry-upgrades"] + path = packages/subgraph-service/lib/openzeppelin-foundry-upgrades + url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 566394b51..bd36002a0 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -74,7 +74,7 @@ contract SubgraphService is address disputeManager, address tapCollector, address curation - ) DataService(graphController) Directory(address(this), tapCollector, disputeManager, curation) { + ) DataService(graphController) Directory(address(this), disputeManager, tapCollector, curation) { _disableInitializers(); } diff --git a/packages/subgraph-service/lib/openzeppelin-foundry-upgrades b/packages/subgraph-service/lib/openzeppelin-foundry-upgrades new file mode 160000 index 000000000..4cd15fc50 --- /dev/null +++ b/packages/subgraph-service/lib/openzeppelin-foundry-upgrades @@ -0,0 +1 @@ +Subproject commit 4cd15fc50b141c77d8cc9ff8efb44d00e841a299 diff --git a/packages/subgraph-service/remappings.txt b/packages/subgraph-service/remappings.txt index 485676dc2..d5c1ff26c 100644 --- a/packages/subgraph-service/remappings.txt +++ b/packages/subgraph-service/remappings.txt @@ -6,3 +6,4 @@ eth-gas-reporter/=node_modules/eth-gas-reporter/ hardhat/=node_modules/hardhat/ @openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ @openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ +openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src \ No newline at end of file diff --git a/packages/subgraph-service/test/DisputeManager.t.sol b/packages/subgraph-service/test/DisputeManager.t.sol index 97fd7b5ff..a5375dc0d 100644 --- a/packages/subgraph-service/test/DisputeManager.t.sol +++ b/packages/subgraph-service/test/DisputeManager.t.sol @@ -92,8 +92,15 @@ contract DisputeManagerTest is Test { ); disputeManager = DisputeManager(disputeManagerProxy); - subgraphService = new SubgraphService(address(controller), address(disputeManager), tapVerifier, curation); - subgraphService.initialize(1000 ether, 16); + address subgraphServiceImplementation = address( + new SubgraphService(address(controller), address(disputeManager), tapVerifier, curation) + ); + address subgraphServiceProxy = UnsafeUpgrades.deployTransparentProxy( + subgraphServiceImplementation, + governor, + abi.encodeCall(SubgraphService.initialize, (1000 ether, 16)) + ); + subgraphService = SubgraphService(subgraphServiceProxy); disputeManager.setSubgraphService(address(subgraphService)); } @@ -108,18 +115,18 @@ contract DisputeManagerTest is Test { bytes32 digest = subgraphService.encodeAllocationProof(indexer, _allocationID); (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); - subgraphService.register(indexer, abi.encode("url", "geoHash")); + subgraphService.register(indexer, abi.encode("url", "geoHash", address(0))); bytes memory data = abi.encode(subgraphDeployment, tokens, _allocationID, abi.encodePacked(r, s, v)); subgraphService.startService(indexer, data); vm.stopPrank(); } - function createIndexingDispute(address _allocationID, uint256 tokens) private returns (bytes32 disputeID) { + function createIndexingDispute(address _allocationID, bytes32 _poi, uint256 tokens) private returns (bytes32 disputeID) { vm.startPrank(fisherman); graphToken.mint(fisherman, tokens); graphToken.approve(address(disputeManager), tokens); - bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, bytes32("POI1234"), tokens); + bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, _poi, tokens); vm.stopPrank(); return _disputeID; } @@ -181,7 +188,7 @@ contract DisputeManagerTest is Test { function testCreateIndexingDispute() public { createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); } @@ -217,7 +224,7 @@ contract DisputeManagerTest is Test { function test_RevertWhen_DisputeAlreadyCreated() public { createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); // Create another dispute with different fisherman address otherFisherman = address(0x5); @@ -227,7 +234,7 @@ contract DisputeManagerTest is Test { graphToken.approve(address(disputeManager), tokens); bytes memory expectedError = abi.encodeWithSignature("DisputeManagerDisputeAlreadyCreated(bytes32)", disputeID); vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI1234"), tokens); + disputeManager.createIndexingDispute(allocationID, bytes32("POI1"), tokens); vm.stopPrank(); } @@ -241,7 +248,7 @@ contract DisputeManagerTest is Test { 100 ether ); vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI1234"), 50 ether); + disputeManager.createIndexingDispute(allocationID, bytes32("POI3"), 50 ether); vm.stopPrank(); } @@ -253,7 +260,7 @@ contract DisputeManagerTest is Test { graphToken.approve(address(disputeManager), tokens); bytes memory expectedError = abi.encodeWithSignature("DisputeManagerIndexerNotFound(address)", allocationID); vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI1234"), tokens); + disputeManager.createIndexingDispute(allocationID, bytes32("POI4"), tokens); vm.stopPrank(); } @@ -316,7 +323,7 @@ contract DisputeManagerTest is Test { function testAcceptIndexingDispute() public { createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); vm.prank(arbitrator); disputeManager.acceptDispute(disputeID, 5000 ether); @@ -371,7 +378,7 @@ contract DisputeManagerTest is Test { function test_RevertIf_CallerIsNotArbitrator_AcceptDispute() public { createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); // attempt to accept dispute as fisherman vm.prank(fisherman); @@ -381,11 +388,11 @@ contract DisputeManagerTest is Test { function test_RevertIf_SlashingOverMaxSlashPercentage() public { createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI101"), 200 ether); // max slashing percentage is 50% vm.prank(arbitrator); - bytes memory expectedError = abi.encodeWithSignature("DisputeManagerInvalidSlashAmount(uint256)", 6000 ether); + bytes memory expectedError = abi.encodeWithSignature("DisputeManagerInvalidTokensSlash(uint256)", 6000 ether); vm.expectRevert(expectedError); disputeManager.acceptDispute(disputeID, 6000 ether); } @@ -394,7 +401,7 @@ contract DisputeManagerTest is Test { function testCancelDispute() public { createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); // skip to end of dispute period skip(disputePeriod + 1); @@ -442,7 +449,7 @@ contract DisputeManagerTest is Test { function test_RevertIf_CallerIsNotFisherman_CancelDispute() public { createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); vm.prank(arbitrator); vm.expectRevert(bytes4(keccak256("DisputeManagerNotFisherman()"))); @@ -453,7 +460,7 @@ contract DisputeManagerTest is Test { function testDrawDispute() public { createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI32"), 200 ether); vm.prank(arbitrator); disputeManager.drawDispute(disputeID); @@ -495,7 +502,7 @@ contract DisputeManagerTest is Test { function test_RevertIf_CallerIsNotArbitrator_DrawDispute() public { createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, 200 ether); + bytes32 disputeID = createIndexingDispute(allocationID,bytes32("POI1"), 200 ether); // attempt to draw dispute as fisherman vm.prank(fisherman); diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol index d7b205c5c..d5f1d48d0 100644 --- a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol +++ b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol @@ -83,7 +83,7 @@ contract MockHorizonStaking { // provisioned tokens that are not being used // `Provision.tokens - Provision.tokensThawing` - function getTokensAvailable(address serviceProvider, address verifier) external view returns (uint256 tokens) { + function getTokensAvailable(address serviceProvider, address verifier, uint32 delegationRatio) external view returns (uint256 tokens) { return _provisions[verifier][serviceProvider].tokens; } @@ -97,6 +97,14 @@ contract MockHorizonStaking { return true; } + function getDelegationPool(address serviceProvider, address verifier) external view returns (IHorizonStakingTypes.DelegationPool memory) { + return IHorizonStakingTypes.DelegationPool({ + tokens: 0, + shares: 0, + tokensThawing: 0, + sharesThawing: 0 + }); + } function getDelegationCut(address serviceProvider, uint8 paymentType) external view returns (uint256 delegationCut) {} function addToDelegationPool(address serviceProvider, uint256 tokens) external {} function stakeToProvision(address _serviceProvider, address _verifier, uint256 _tokens) external {} From df297f77661f247308eb6d240e556b67fc5cfbfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 11 Jun 2024 15:51:43 +0200 Subject: [PATCH 123/343] test: add data service framework tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../utilities/ProvisionManager.sol | 14 +- .../test/data-service/DataService.t.sol | 400 +++++++++++++++++- .../test/data-service/DataService.tree | 72 +++- .../test/data-service/DataServiceBase.sol | 18 - .../data-service/DataServiceUpgradeable.t.sol | 5 +- .../data-service/DataServiceUpgradeable.tree | 3 + .../implementations/DataServiceBase.sol | 59 +++ .../DataServiceBaseUpgradeable.sol | 4 +- .../implementations/DataServiceOverride.sol | 25 ++ .../libraries/ProvisionTracker.t.sol | 19 +- .../HorizonStakingShared.t.sol | 44 +- 11 files changed, 589 insertions(+), 74 deletions(-) delete mode 100644 packages/horizon/test/data-service/DataServiceBase.sol create mode 100644 packages/horizon/test/data-service/DataServiceUpgradeable.tree create mode 100644 packages/horizon/test/data-service/implementations/DataServiceBase.sol rename packages/horizon/test/data-service/{ => implementations}/DataServiceBaseUpgradeable.sol (83%) create mode 100644 packages/horizon/test/data-service/implementations/DataServiceOverride.sol diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index a500febf9..de3580aea 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -58,6 +58,13 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa */ error ProvisionManagerInvalidValue(bytes message, uint256 value, uint256 min, uint256 max); + /** + * @notice Thrown when attempting to set a range where min is greater than max. + * @param min The minimum value. + * @param max The maximum value. + */ + error ProvisionManagerInvalidRange(uint256 min, uint256 max); + /** * @notice Thrown when the caller is not authorized to manage the provision of a service provider. * @param caller The address of the caller. @@ -156,7 +163,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa * * @param _serviceProvider The address of the service provider. */ - function _acceptProvisionParameters(address _serviceProvider) internal virtual { + function _acceptProvisionParameters(address _serviceProvider) internal { _checkProvisionParameters(_serviceProvider, true); _graphStaking().acceptProvisionParameters(_serviceProvider); } @@ -177,6 +184,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa * @param _max The maximum allowed value for the provision tokens. */ function _setProvisionTokensRange(uint256 _min, uint256 _max) internal { + require(_min <= _max, ProvisionManagerInvalidRange(_min, _max)); minimumProvisionTokens = _min; maximumProvisionTokens = _max; emit ProvisionTokensRangeSet(_min, _max); @@ -188,6 +196,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa * @param _max The maximum allowed value for the max verifier cut. */ function _setVerifierCutRange(uint32 _min, uint32 _max) internal { + require(_min <= _max, ProvisionManagerInvalidRange(_min, _max)); minimumVerifierCut = _min; maximumVerifierCut = _max; emit VerifierCutRangeSet(_min, _max); @@ -199,6 +208,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa * @param _max The maximum allowed value for the thawing period. */ function _setThawingPeriodRange(uint64 _min, uint64 _max) internal { + require(_min <= _max, ProvisionManagerInvalidRange(_min, _max)); minimumThawingPeriod = _min; maximumThawingPeriod = _max; emit ThawingPeriodRangeSet(_min, _max); @@ -261,7 +271,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa * @notice Gets the delegation ratio. * @return The delegation ratio */ - function _getDelegationRatio() internal view virtual returns (uint32) { + function _getDelegationRatio() internal view returns (uint32) { return delegationRatio; } diff --git a/packages/horizon/test/data-service/DataService.t.sol b/packages/horizon/test/data-service/DataService.t.sol index 66d12d80b..95e027dd3 100644 --- a/packages/horizon/test/data-service/DataService.t.sol +++ b/packages/horizon/test/data-service/DataService.t.sol @@ -1,30 +1,394 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.26; -import { GraphBaseTest } from "../GraphBase.t.sol"; -import { DataServiceBase } from "./DataServiceBase.sol"; +import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; +import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; +import { DataServiceBase } from "./implementations/DataServiceBase.sol"; +import { DataServiceOverride } from "./implementations/DataServiceOverride.sol"; +import { ProvisionManager } from "./../../contracts/data-service/utilities/ProvisionManager.sol"; +import { PPMMath } from "./../../contracts/libraries/PPMMath.sol"; -contract DataServiceTest is GraphBaseTest { - function test_WhenTheContractIsDeployedWithAValidController() external { - DataServiceBase dataService = _deployDataService(); +contract DataServiceTest is HorizonStakingSharedTest { + DataServiceBase dataService; + DataServiceOverride dataServiceOverride; - uint32 delegationRatio = dataService.getDelegationRatio(); - assertEq(delegationRatio, type(uint32).min); + function setUp() public override { + super.setUp(); - (uint256 minTokens, uint256 maxTokens) = dataService.getProvisionTokensRange(); - assertEq(minTokens, type(uint256).min); - assertEq(maxTokens, type(uint256).max); + dataService = new DataServiceBase(address(controller)); + dataServiceOverride = new DataServiceOverride(address(controller)); + } + + function test_Constructor_WhenTheContractIsDeployedWithAValidController() external view { + _assert_delegationRatio(type(uint32).min); + _assert_provisionTokens_range(type(uint256).min, type(uint256).max); + _assert_verifierCut_range(type(uint32).min, type(uint32).max); + _assert_thawingPeriod_range(type(uint64).min, type(uint64).max); + } + + // -- Delegation ratio -- + + function test_DelegationRatio_WhenSettingTheDelegationRatio(uint32 delegationRatio) external { + _assert_set_delegationRatio(delegationRatio); + } + + function test_DelegationRatio_WhenGettingTheDelegationRatio(uint32 ratio) external { + dataService.setDelegationRatio(ratio); + _assert_delegationRatio(ratio); + } + + // -- Provision tokens -- + + function test_ProvisionTokens_WhenSettingAValidRange(uint256 min, uint256 max) external { + vm.assume(min <= max); + _assert_set_provisionTokens_range(min, max); + } + + function test_ProvisionTokens_RevertWhen_SettingAnInvalidRange(uint256 min, uint256 max) external { + vm.assume(min > max); + + vm.expectRevert(abi.encodeWithSelector(ProvisionManager.ProvisionManagerInvalidRange.selector, min, max)); + dataService.setProvisionTokensRange(min, max); + } + + function test_ProvisionTokens_WhenGettingTheRange() external { + dataService.setProvisionTokensRange(dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); + _assert_provisionTokens_range(dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); + } + + function test_ProvisionTokens_WhenGettingTheRangeWithAnOverridenGetter() external { + // Overriden getter returns the const values regardless of the set range + dataServiceOverride.setProvisionTokensRange(0, 1); + (uint256 min, uint256 max) = dataServiceOverride.getProvisionTokensRange(); + + assertEq(min, dataServiceOverride.PROVISION_TOKENS_MIN()); + assertEq(max, dataServiceOverride.PROVISION_TOKENS_MAX()); + } + + function test_ProvisionTokens_WhenCheckingAValidProvision(uint256 tokens) external useIndexer { + dataService.setProvisionTokensRange(dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); + tokens = bound(tokens, dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); + + _createProvision(address(dataService), tokens, 0, 0); + dataService.checkProvisionTokens(users.indexer); + } + + function test_ProvisionTokens_WhenCheckingWithAnOverridenChecker(uint256 tokens) external useIndexer { + vm.assume(tokens != 0); + dataServiceOverride.setProvisionTokensRange( + dataService.PROVISION_TOKENS_MIN(), + dataService.PROVISION_TOKENS_MAX() + ); + + // this checker accepts provisions with any amount of tokens + _createProvision(address(dataServiceOverride), tokens, 0, 0); + dataServiceOverride.checkProvisionTokens(users.indexer); + } + + function test_ProvisionTokens_RevertWhen_CheckingAnInvalidProvision(uint256 tokens) external useIndexer { + dataService.setProvisionTokensRange(dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); + tokens = bound(tokens, 1, dataService.PROVISION_TOKENS_MIN() - 1); + + _createProvision(address(dataService), tokens, 0, 0); + vm.expectRevert( + abi.encodeWithSelector( + ProvisionManager.ProvisionManagerInvalidValue.selector, + "tokens", + tokens, + dataService.PROVISION_TOKENS_MIN(), + dataService.PROVISION_TOKENS_MAX() + ) + ); + dataService.checkProvisionTokens(users.indexer); + } + + // -- Verifier cut -- + + function test_VerifierCut_WhenSettingAValidRange(uint32 min, uint32 max) external { + vm.assume(min <= max); + _assert_set_verifierCut_range(min, max); + } + + function test_VerifierCut_RevertWhen_SettingAnInvalidRange(uint32 min, uint32 max) external { + vm.assume(min > max); + + vm.expectRevert(abi.encodeWithSelector(ProvisionManager.ProvisionManagerInvalidRange.selector, min, max)); + dataService.setVerifierCutRange(min, max); + } + + function test_VerifierCut_WhenGettingTheRange() external { + dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); + _assert_verifierCut_range(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); + } + + function test_VerifierCut_WhenGettingTheRangeWithAnOverridenGetter() external { + // Overriden getter returns the const values regardless of the set range + dataServiceOverride.setVerifierCutRange(0, 1); + (uint32 min, uint32 max) = dataServiceOverride.getVerifierCutRange(); + assertEq(min, dataServiceOverride.VERIFIER_CUT_MIN()); + assertEq(max, dataServiceOverride.VERIFIER_CUT_MAX()); + } + + function test_VerifierCut_WhenCheckingAValidProvision(uint32 verifierCut) external useIndexer { + dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); + verifierCut = uint32(bound(verifierCut, dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX())); + + _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), verifierCut, 0); + dataService.checkProvisionParameters(users.indexer, false); + } + + function test_VerifierCut_WhenCheckingWithAnOverridenChecker(uint32 verifierCut) external useIndexer { + verifierCut = uint32(bound(verifierCut, 0, uint32(PPMMath.MAX_PPM))); + dataServiceOverride.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); + + // this checker accepts provisions with any verifier cut range + _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), verifierCut, 0); + dataServiceOverride.checkProvisionParameters(users.indexer, false); + } + + function test_VerifierCut_RevertWhen_CheckingAnInvalidProvision(uint32 verifierCut) external useIndexer { + dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); + verifierCut = uint32(bound(verifierCut, 0, dataService.VERIFIER_CUT_MIN() - 1)); + + _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), verifierCut, 0); + vm.expectRevert( + abi.encodeWithSelector( + ProvisionManager.ProvisionManagerInvalidValue.selector, + "maxVerifierCut", + verifierCut, + dataService.VERIFIER_CUT_MIN(), + dataService.VERIFIER_CUT_MAX() + ) + ); + dataService.checkProvisionParameters(users.indexer, false); + } + + // -- Thawing period -- - (uint32 minVerifierCut, uint32 maxVerifierCut) = dataService.getVerifierCutRange(); - assertEq(minVerifierCut, type(uint32).min); - assertEq(maxVerifierCut, type(uint32).max); + function test_ThawingPeriod_WhenSettingAValidRange(uint64 min, uint64 max) external { + vm.assume(min <= max); + _assert_set_thawingPeriod_range(min, max); + } + + function test_ThawingPeriod_RevertWhen_SettingAnInvalidRange(uint64 min, uint64 max) external { + vm.assume(min > max); + + vm.expectRevert(abi.encodeWithSelector(ProvisionManager.ProvisionManagerInvalidRange.selector, min, max)); + dataService.setThawingPeriodRange(min, max); + } + + function test_ThawingPeriod_WhenGettingTheRange() external { + dataService.setThawingPeriodRange(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); + _assert_thawingPeriod_range(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); + } + + function test_ThawingPeriod_WhenGettingTheRangeWithAnOverridenGetter() external { + // Overriden getter returns the const values regardless of the set range + dataServiceOverride.setThawingPeriodRange(0, 1); + (uint64 min, uint64 max) = dataServiceOverride.getThawingPeriodRange(); + assertEq(min, dataServiceOverride.THAWING_PERIOD_MIN()); + assertEq(max, dataServiceOverride.THAWING_PERIOD_MAX()); + } + + function test_ThawingPeriod_WhenCheckingAValidProvision(uint64 thawingPeriod) external useIndexer { + dataService.setThawingPeriodRange(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); + thawingPeriod = uint32( + bound(thawingPeriod, dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()) + ); + + _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), 0, thawingPeriod); + dataService.checkProvisionParameters(users.indexer, false); + } + + function test_ThawingPeriod_WhenCheckingWithAnOverridenChecker(uint64 thawingPeriod) external useIndexer { + thawingPeriod = uint32(bound(thawingPeriod, 0, staking.getMaxThawingPeriod())); + dataServiceOverride.setThawingPeriodRange(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); + + // this checker accepts provisions with any verifier cut range + _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), 0, thawingPeriod); + dataServiceOverride.checkProvisionParameters(users.indexer, false); + } + + function test_ThawingPeriod_RevertWhen_CheckingAnInvalidProvision(uint64 thawingPeriod) external useIndexer { + dataService.setThawingPeriodRange(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); + thawingPeriod = uint32(bound(thawingPeriod, 0, dataService.THAWING_PERIOD_MIN() - 1)); + + _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), 0, thawingPeriod); + vm.expectRevert( + abi.encodeWithSelector( + ProvisionManager.ProvisionManagerInvalidValue.selector, + "thawingPeriod", + thawingPeriod, + dataService.THAWING_PERIOD_MIN(), + dataService.THAWING_PERIOD_MAX() + ) + ); + dataService.checkProvisionParameters(users.indexer, false); + } + + modifier givenProvisionParametersChanged() { + _; + } + + function test_ProvisionParameters_WhenTheNewParametersAreValid( + uint32 maxVerifierCut, + uint64 thawingPeriod + ) external givenProvisionParametersChanged useIndexer { + // bound to valid values + maxVerifierCut = uint32(bound(maxVerifierCut, dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX())); + thawingPeriod = uint64(bound(thawingPeriod, dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX())); + + // set provision parameter ranges + dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); + dataService.setThawingPeriodRange(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); + + // stage provision parameter changes + _createProvision( + address(dataService), + dataService.PROVISION_TOKENS_MIN(), + dataService.VERIFIER_CUT_MIN(), + dataService.THAWING_PERIOD_MIN() + ); + staking.setProvisionParameters( + users.indexer, + address(dataService), + maxVerifierCut, + thawingPeriod + ); + + // accept provision parameters + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionParametersSet( + users.indexer, + address(dataService), + maxVerifierCut, + thawingPeriod + ); + dataService.acceptProvisionParameters(users.indexer); + } + + function test_ProvisionParameters_RevertWhen_TheNewThawingPeriodIsInvalid( + uint64 thawingPeriod + ) external givenProvisionParametersChanged useIndexer { + // bound to invalid values + thawingPeriod = uint64(bound(thawingPeriod, 0, dataService.THAWING_PERIOD_MIN() - 1)); + + // set provision parameter ranges + dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); + dataService.setThawingPeriodRange(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); + + // stage provision parameter changes + _createProvision( + address(dataService), + dataService.PROVISION_TOKENS_MIN(), + dataService.VERIFIER_CUT_MIN(), + dataService.THAWING_PERIOD_MIN() + ); + staking.setProvisionParameters( + users.indexer, + address(dataService), + dataService.VERIFIER_CUT_MIN(), + thawingPeriod + ); + + // accept provision parameters + vm.expectRevert( + abi.encodeWithSelector( + ProvisionManager.ProvisionManagerInvalidValue.selector, + "thawingPeriod", + thawingPeriod, + dataService.THAWING_PERIOD_MIN(), + dataService.THAWING_PERIOD_MAX() + ) + ); + dataService.acceptProvisionParameters(users.indexer); + } + + function test_ProvisionParameters_RevertWhen_TheNewVerifierCutIsInvalid( + uint32 maxVerifierCut + ) external givenProvisionParametersChanged useIndexer { + // bound to valid values + maxVerifierCut = uint32(bound(maxVerifierCut, dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX())); + + // set provision parameter ranges + dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); + dataService.setThawingPeriodRange(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); + + // stage provision parameter changes + _createProvision( + address(dataService), + dataService.PROVISION_TOKENS_MIN(), + dataService.VERIFIER_CUT_MIN(), + dataService.THAWING_PERIOD_MIN() + ); + staking.setProvisionParameters( + users.indexer, + address(dataService), + maxVerifierCut, + dataService.THAWING_PERIOD_MIN() + ); + + // accept provision parameters + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionParametersSet( + users.indexer, + address(dataService), + maxVerifierCut, + dataService.THAWING_PERIOD_MIN() + ); + dataService.acceptProvisionParameters(users.indexer); + } + + // -- Assert functions -- + + function _assert_set_delegationRatio(uint32 ratio) internal { + vm.expectEmit(); + emit ProvisionManager.DelegationRatioSet(ratio); + dataService.setDelegationRatio(ratio); + _assert_delegationRatio(ratio); + } + + function _assert_delegationRatio(uint32 ratio) internal view { + uint32 _delegationRatio = dataService.getDelegationRatio(); + assertEq(_delegationRatio, ratio); + } + + function _assert_set_provisionTokens_range(uint256 min, uint256 max) internal { + vm.expectEmit(); + emit ProvisionManager.ProvisionTokensRangeSet(min, max); + dataService.setProvisionTokensRange(min, max); + _assert_provisionTokens_range(min, max); + } + + function _assert_provisionTokens_range(uint256 min, uint256 max) internal view { + (uint256 _min, uint256 _max) = dataService.getProvisionTokensRange(); + assertEq(_min, min); + assertEq(_max, max); + } + + function _assert_set_verifierCut_range(uint32 min, uint32 max) internal { + vm.expectEmit(); + emit ProvisionManager.VerifierCutRangeSet(min, max); + dataService.setVerifierCutRange(min, max); + _assert_verifierCut_range(min, max); + } + + function _assert_verifierCut_range(uint32 min, uint32 max) internal view { + (uint32 _min, uint32 _max) = dataService.getVerifierCutRange(); + assertEq(_min, min); + assertEq(_max, max); + } - (uint64 minThawingPeriod, uint64 maxThawingPeriod) = dataService.getThawingPeriodRange(); - assertEq(minThawingPeriod, type(uint64).min); - assertEq(maxThawingPeriod, type(uint64).max); + function _assert_set_thawingPeriod_range(uint64 min, uint64 max) internal { + vm.expectEmit(); + emit ProvisionManager.ThawingPeriodRangeSet(min, max); + dataService.setThawingPeriodRange(min, max); + _assert_thawingPeriod_range(min, max); } - function _deployDataService() internal returns (DataServiceBase) { - return new DataServiceBase(address(controller)); + function _assert_thawingPeriod_range(uint64 min, uint64 max) internal view { + (uint64 _min, uint64 _max) = dataService.getThawingPeriodRange(); + assertEq(_min, min); + assertEq(_max, max); } } diff --git a/packages/horizon/test/data-service/DataService.tree b/packages/horizon/test/data-service/DataService.tree index 2a71bce48..cd016608e 100644 --- a/packages/horizon/test/data-service/DataService.tree +++ b/packages/horizon/test/data-service/DataService.tree @@ -1,3 +1,71 @@ -DataService +DataServiceTest::constructor_ └── when the contract is deployed with a valid controller - └── it should set all it's ranges to max \ No newline at end of file + └── it should set all it's ranges to max + +DataServiceTest::delegationRatio_ +├── when setting the delegation ratio +│ ├── it should emit an event +│ └── it should set the range +└── when getting the delegation ratio + └── it should return the correct value + +DataServiceTest::provisionTokens_ +├── when setting a valid range +│ ├── it should emit an event +│ └── it should set the range +├── when setting an invalid range +│ └── it should revert +├── when getting the range +│ └── it should return the correct value +├── when getting the range with an overriden getter +│ └── it should return the correct value +├── when checking a valid provision +│ └── it should not revert +├── when checking with an overriden checker +│ └── it should not revert +└── when checking an invalid provision + └── it should revert + +DataServiceTest::verifierCut_ +├── when setting a valid range +│ ├── it should emit an event +│ └── it should set the range +├── when setting an invalid range +│ └── it should revert +├── when getting the range +│ └── it should return the correct value +├── when getting the range with an overriden getter +│ └── it should return the correct value +├── when checking a valid provision +│ └── it should not revert +├── when checking with an overriden checker +│ └── it should not revert +└── when checking an invalid provision + └── it should revert + +DataServiceTest::thawingPeriod_ +├── when setting a valid range +│ ├── it should emit an event +│ └── it should set the range +├── when setting an invalid range +│ └── it should revert +├── when getting the range +│ └── it should return the correct value +├── when getting the range with an overriden getter +│ └── it should return the correct value +├── when checking a valid provision +│ └── it should not revert +├── when checking with an overriden checker +│ └── it should not revert +└── when checking an invalid provision + └── it should revert + +DataServiceTest::provisionParameters_ +└── given provision parameters changed + ├── when the new parameters are valid + │ ├── it should emit an event + │ └── it should set the new parameters + ├── when the new thawing period is invalid + │ └── it should revert + └── when the new verifier cut is invalid + └── it should revert \ No newline at end of file diff --git a/packages/horizon/test/data-service/DataServiceBase.sol b/packages/horizon/test/data-service/DataServiceBase.sol deleted file mode 100644 index 5103d51c5..000000000 --- a/packages/horizon/test/data-service/DataServiceBase.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; - -import { DataService } from "../../contracts/data-service/DataService.sol"; -import { IGraphPayments } from "./../../contracts/interfaces/IGraphPayments.sol"; - -contract DataServiceBase is DataService { - constructor(address controller) DataService(controller) initializer { - __DataService_init(); - } - - function register(address serviceProvider, bytes calldata data) external {} - function acceptProvision(address serviceProvider, bytes calldata data) external {} - function startService(address serviceProvider, bytes calldata data) external {} - function stopService(address serviceProvider, bytes calldata data) external {} - function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} - function slash(address serviceProvider, bytes calldata data) external {} -} diff --git a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol index 49ddec3d7..dff804a2b 100644 --- a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol +++ b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol @@ -2,9 +2,8 @@ pragma solidity 0.8.26; import { GraphBaseTest } from "../GraphBase.t.sol"; -import { DataServiceBaseUpgradeable } from "./DataServiceBaseUpgradeable.sol"; +import { DataServiceBaseUpgradeable } from "./implementations/DataServiceBaseUpgradeable.sol"; import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; -import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; contract DataServiceUpgradeableTest is GraphBaseTest { function test_WhenTheContractIsDeployedWithAValidController() external { @@ -30,7 +29,7 @@ contract DataServiceUpgradeableTest is GraphBaseTest { // Deploy implementation address implementation = address(new DataServiceBaseUpgradeable(address(controller))); - // Deploy proxy (calls initialize) + // Deploy proxy address proxy = UnsafeUpgrades.deployTransparentProxy( implementation, users.governor, diff --git a/packages/horizon/test/data-service/DataServiceUpgradeable.tree b/packages/horizon/test/data-service/DataServiceUpgradeable.tree new file mode 100644 index 000000000..dbb433635 --- /dev/null +++ b/packages/horizon/test/data-service/DataServiceUpgradeable.tree @@ -0,0 +1,3 @@ +DataServiceUpgradeableTest +└── when the contract is deployed with a valid controller + └── it should set all it's ranges to max \ No newline at end of file diff --git a/packages/horizon/test/data-service/implementations/DataServiceBase.sol b/packages/horizon/test/data-service/implementations/DataServiceBase.sol new file mode 100644 index 000000000..1742efc12 --- /dev/null +++ b/packages/horizon/test/data-service/implementations/DataServiceBase.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.26; + +import { DataService } from "../../../contracts/data-service/DataService.sol"; +import { IGraphPayments } from "./../../../contracts/interfaces/IGraphPayments.sol"; + +contract DataServiceBase is DataService { + uint32 public constant DELEGATION_RATIO = 100; + uint256 public constant PROVISION_TOKENS_MIN = 50; + uint256 public constant PROVISION_TOKENS_MAX = 5000; + uint32 public constant VERIFIER_CUT_MIN = 5; + uint32 public constant VERIFIER_CUT_MAX = 100000; + uint64 public constant THAWING_PERIOD_MIN = 15; + uint64 public constant THAWING_PERIOD_MAX = 76; + + constructor(address controller) DataService(controller) initializer { + __DataService_init(); + } + + function register(address serviceProvider, bytes calldata data) external {} + + function acceptProvision(address serviceProvider, bytes calldata data) external {} + + function startService(address serviceProvider, bytes calldata data) external {} + + function stopService(address serviceProvider, bytes calldata data) external {} + + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} + + function slash(address serviceProvider, bytes calldata data) external {} + + function setDelegationRatio(uint32 ratio) external { + _setDelegationRatio(ratio); + } + + function setProvisionTokensRange(uint256 min, uint256 max) external { + _setProvisionTokensRange(min, max); + } + + function setVerifierCutRange(uint32 min, uint32 max) external { + _setVerifierCutRange(min, max); + } + + function setThawingPeriodRange(uint64 min, uint64 max) external { + _setThawingPeriodRange(min, max); + } + + function checkProvisionTokens(address serviceProvider) external view { + _checkProvisionTokens(serviceProvider); + } + + function checkProvisionParameters(address serviceProvider, bool pending) external view { + _checkProvisionParameters(serviceProvider, pending); + } + + function acceptProvisionParameters(address serviceProvider) external { + _acceptProvisionParameters(serviceProvider); + } +} diff --git a/packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol similarity index 83% rename from packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol rename to packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol index 00f2b485b..9913c1b76 100644 --- a/packages/horizon/test/data-service/DataServiceBaseUpgradeable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; -import { DataService } from "../../contracts/data-service/DataService.sol"; -import { IGraphPayments } from "./../../contracts/interfaces/IGraphPayments.sol"; +import { DataService } from "../../../contracts/data-service/DataService.sol"; +import { IGraphPayments } from "./../../../contracts/interfaces/IGraphPayments.sol"; contract DataServiceBaseUpgradeable is DataService { constructor(address controller) DataService(controller) { diff --git a/packages/horizon/test/data-service/implementations/DataServiceOverride.sol b/packages/horizon/test/data-service/implementations/DataServiceOverride.sol new file mode 100644 index 000000000..838be68a5 --- /dev/null +++ b/packages/horizon/test/data-service/implementations/DataServiceOverride.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.26; + +import { DataServiceBase } from "./DataServiceBase.sol"; + +contract DataServiceOverride is DataServiceBase { + constructor(address controller) DataServiceBase(controller) initializer { + __DataService_init(); + } + + function _getProvisionTokensRange() internal pure override returns (uint256, uint256) { + return (PROVISION_TOKENS_MIN, PROVISION_TOKENS_MAX); + } + + function _getVerifierCutRange() internal pure override returns (uint32, uint32) { + return (VERIFIER_CUT_MIN, VERIFIER_CUT_MAX); + } + + function _getThawingPeriodRange() internal pure override returns (uint64, uint64) { + return (THAWING_PERIOD_MIN, THAWING_PERIOD_MAX); + } + + function _checkProvisionTokens(address _serviceProvider) internal pure override {} + function _checkProvisionParameters(address _serviceProvider, bool pending) internal pure override {} +} diff --git a/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol b/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol index 6155bf4c7..a7ec2f614 100644 --- a/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol +++ b/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol @@ -28,21 +28,10 @@ library ProvisionTrackerWrapper { contract ProvisionTrackerTest is HorizonStakingSharedTest, ProvisionTrackerImplementation { using ProvisionTrackerWrapper for mapping(address => uint256); - modifier useProvision( - uint256 tokens, - uint32, - uint64 - ) override { - vm.assume(tokens > 0); - vm.assume(tokens <= MAX_STAKING_TOKENS); - _createProvision(address(this), tokens, 0, 0); - _; - } - function test_Lock_GivenTheProvisionHasSufficientAvailableTokens( uint256 tokens, uint256 steps - ) external useIndexer useProvision(tokens, 0, 0) { + ) external useIndexer useProvisionDataService(address(this), tokens, 0, 0) { vm.assume(tokens > 0); vm.assume(steps > 0); vm.assume(steps < 100); @@ -63,7 +52,7 @@ contract ProvisionTrackerTest is HorizonStakingSharedTest, ProvisionTrackerImple function test_Lock_RevertGiven_TheProvisionHasInsufficientAvailableTokens( uint256 tokens - ) external useIndexer useProvision(tokens, 0, 0) { + ) external useIndexer useProvisionDataService(address(this), tokens, 0, 0) { uint256 tokensToLock = tokens + 1; vm.expectRevert( abi.encodeWithSelector(ProvisionTracker.ProvisionTrackerInsufficientTokens.selector, tokens, tokensToLock) @@ -74,7 +63,7 @@ contract ProvisionTrackerTest is HorizonStakingSharedTest, ProvisionTrackerImple function test_Release_GivenTheProvisionHasSufficientLockedTokens( uint256 tokens, uint256 steps - ) external useIndexer useProvision(tokens, 0, 0) { + ) external useIndexer useProvisionDataService(address(this), tokens, 0, 0) { vm.assume(tokens > 0); vm.assume(steps > 0); vm.assume(steps < 100); @@ -97,7 +86,7 @@ contract ProvisionTrackerTest is HorizonStakingSharedTest, ProvisionTrackerImple assertEq(provisionTracker[users.indexer], delta); } - function test_Release_RevertGiven_TheProvisionHasInsufficientLockedTokens(uint256 tokens) external useIndexer useProvision(tokens, 0, 0) { + function test_Release_RevertGiven_TheProvisionHasInsufficientLockedTokens(uint256 tokens) external useIndexer useProvisionDataService(address(this), tokens, 0, 0) { // setup provisionTracker.lock(staking, users.indexer, tokens, uint32(0)); diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 8ab125dcb..9a30f53cc 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -7,7 +7,6 @@ import { GraphBaseTest } from "../../GraphBase.t.sol"; import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol"; abstract contract HorizonStakingSharedTest is GraphBaseTest { - /* * MODIFIERS */ @@ -24,12 +23,22 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { _; } - modifier useProvision(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) virtual { - vm.assume(tokens <= MAX_STAKING_TOKENS); - vm.assume(tokens > 0); - vm.assume(maxVerifierCut <= MAX_MAX_VERIFIER_CUT); - vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); - _createProvision(subgraphDataServiceAddress, tokens, maxVerifierCut, thawingPeriod); + modifier useProvision( + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) virtual { + _useProvision(subgraphDataServiceAddress, tokens, maxVerifierCut, thawingPeriod); + _; + } + + modifier useProvisionDataService( + address dataService, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) { + _useProvision(dataService, tokens, maxVerifierCut, thawingPeriod); _; } @@ -42,6 +51,19 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { * HELPERS */ + function _useProvision( + address dataService, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) internal { + vm.assume(tokens <= MAX_STAKING_TOKENS); + vm.assume(tokens > 0); + vm.assume(maxVerifierCut <= MAX_MAX_VERIFIER_CUT); + vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); + _createProvision(dataService, tokens, maxVerifierCut, thawingPeriod); + } + function _createProvision( address dataServiceAddress, uint256 tokens, @@ -50,13 +72,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { ) internal { token.approve(address(staking), tokens); staking.stakeTo(users.indexer, tokens); - staking.provision( - users.indexer, - dataServiceAddress, - tokens, - maxVerifierCut, - thawingPeriod - ); + staking.provision(users.indexer, dataServiceAddress, tokens, maxVerifierCut, thawingPeriod); } function _setDelegationFeeCut(IGraphPayments.PaymentTypes paymentType, uint256 cut) internal { From e5c3ec1235c3d66cd534328220f8bee49215c874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 11 Jun 2024 16:03:46 +0200 Subject: [PATCH 124/343] chore: linting stuff MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/.solhintignore | 1 + .../internal/IHorizonStakingExtension.sol | 1 + .../staking/HorizonStakingExtension.sol | 22 ++++++++++--------- 3 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 packages/horizon/.solhintignore diff --git a/packages/horizon/.solhintignore b/packages/horizon/.solhintignore new file mode 100644 index 000000000..a0367e1af --- /dev/null +++ b/packages/horizon/.solhintignore @@ -0,0 +1 @@ +contracts/mocks/* \ No newline at end of file diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index d0331580e..80fc52ea0 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -164,5 +164,6 @@ interface IHorizonStakingExtension is IRewardsIssuer { * @notice Retrun the time in blocks to unstake * @return Thawing period in blocks */ + // solhint-disable-next-line func-name-mixedcase function __DEPRECATED_getThawingPeriod() external view returns (uint64); } diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 7931c2988..9667d35bb 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -294,6 +294,16 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon return _serviceProviders[indexer].tokensStaked > 0; } + /** + * @notice Retrun the time in blocks to unstake + * Deprecated, now enforced by each data service (verifier) + * @return Thawing period in blocks + */ + // solhint-disable-next-line func-name-mixedcase + function __DEPRECATED_getThawingPeriod() external view returns (uint64) { + return __DEPRECATED_thawingPeriod; + } + /** * @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service. * @dev TODO: Delete after the transition period @@ -305,15 +315,6 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon return _legacyOperatorAuth[serviceProvider][operator]; } - /** - * @notice Retrun the time in blocks to unstake - * Deprecated, now enforced by each data service (verifier) - * @return Thawing period in blocks - */ - function __DEPRECATED_getThawingPeriod() external view returns (uint64) { - return __DEPRECATED_thawingPeriod; - } - /** * @dev Receive an Indexer's stake from L1. * The specified amount is added to the indexer's stake; the indexer's @@ -450,7 +451,8 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon // Anyone is allowed to close ONLY under two concurrent conditions // - After maxAllocationEpochs passed // - When the allocation is for non-zero amount of tokens - bool isIndexerOrOperator = msg.sender == alloc.indexer || isOperator(alloc.indexer, SUBGRAPH_DATA_SERVICE_ADDRESS); + bool isIndexerOrOperator = msg.sender == alloc.indexer || + isOperator(alloc.indexer, SUBGRAPH_DATA_SERVICE_ADDRESS); if (epochs <= __DEPRECATED_maxAllocationEpochs || alloc.tokens == 0) { require(isIndexerOrOperator, "!auth"); } From bc4aba10aaa2c3a610645b86d1c6ed44d009ee1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 11 Jun 2024 16:05:49 +0200 Subject: [PATCH 125/343] chore: more linting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/contracts/mocks/CurationMock.sol | 1 - packages/horizon/contracts/mocks/EpochManagerMock.sol | 5 ++--- packages/horizon/contracts/mocks/RewardsManagerMock.sol | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/horizon/contracts/mocks/CurationMock.sol b/packages/horizon/contracts/mocks/CurationMock.sol index b480673fd..402a07e4c 100644 --- a/packages/horizon/contracts/mocks/CurationMock.sol +++ b/packages/horizon/contracts/mocks/CurationMock.sol @@ -5,7 +5,6 @@ pragma solidity 0.8.26; import { MockGRTToken } from "./MockGRTToken.sol"; contract CurationMock { - mapping(bytes32 => uint256) public curation; function signal(bytes32 _subgraphDeploymentID, uint256 _tokens) public { diff --git a/packages/horizon/contracts/mocks/EpochManagerMock.sol b/packages/horizon/contracts/mocks/EpochManagerMock.sol index 82b51d855..b76714e50 100644 --- a/packages/horizon/contracts/mocks/EpochManagerMock.sol +++ b/packages/horizon/contracts/mocks/EpochManagerMock.sol @@ -5,14 +5,13 @@ pragma solidity 0.8.26; import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; contract EpochManagerMock is IEpochManager { - // -- Variables -- - + uint256 public epochLength; uint256 public lastRunEpoch; uint256 public lastLengthUpdateEpoch; uint256 public lastLengthUpdateBlock; - + // -- Configuration -- function setEpochLength(uint256 _epochLength) public { diff --git a/packages/horizon/contracts/mocks/RewardsManagerMock.sol b/packages/horizon/contracts/mocks/RewardsManagerMock.sol index 9473e6dbc..2388d99b6 100644 --- a/packages/horizon/contracts/mocks/RewardsManagerMock.sol +++ b/packages/horizon/contracts/mocks/RewardsManagerMock.sol @@ -5,7 +5,6 @@ pragma solidity 0.8.26; import { MockGRTToken } from "./MockGRTToken.sol"; contract RewardsManagerMock { - // -- Variables -- MockGRTToken public token; uint256 private rewards; From 203a3b049fad608b3b7906262b17a032dd336bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 11 Jun 2024 17:19:04 +0200 Subject: [PATCH 126/343] fix: require params change when calling set provision parameters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../internal/IHorizonStakingMain.sol | 2 +- .../contracts/staking/HorizonStaking.sol | 18 ++- .../test/data-service/DataService.t.sol | 27 +++-- .../horizon/test/staking/HorizonStaking.t.sol | 7 ++ .../test/staking/provision/parameters.t.sol | 104 ++++++++++++++++++ 5 files changed, 137 insertions(+), 21 deletions(-) create mode 100644 packages/horizon/test/staking/provision/parameters.t.sol diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 0118479a1..a6f18c66c 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -612,7 +612,7 @@ interface IHorizonStakingMain { * @dev This two step update process prevents the service provider from changing the parameters * without the verifier's consent. * - * Emits a {ProvisionParametersStaged} event. + * Emits a {ProvisionParametersStaged} event if at least one of the parameters changed. * * @param serviceProvider The service provider address * @param verifier The verifier address diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index d63b655c2..6b02c86c8 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -230,9 +230,13 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint64 thawingPeriod ) external override notPaused onlyAuthorized(serviceProvider, verifier) { Provision storage prov = _provisions[serviceProvider][verifier]; - prov.maxVerifierCutPending = maxVerifierCut; - prov.thawingPeriodPending = thawingPeriod; - emit ProvisionParametersStaged(serviceProvider, verifier, maxVerifierCut, thawingPeriod); + require(prov.createdAt != 0, HorizonStakingInvalidProvision(serviceProvider, verifier)); + + if ((prov.maxVerifierCutPending != maxVerifierCut) || (prov.thawingPeriodPending != thawingPeriod)) { + prov.maxVerifierCutPending = maxVerifierCut; + prov.thawingPeriodPending = thawingPeriod; + emit ProvisionParametersStaged(serviceProvider, verifier, maxVerifierCut, thawingPeriod); + } } /** @@ -241,9 +245,11 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { function acceptProvisionParameters(address serviceProvider) external override notPaused { address verifier = msg.sender; Provision storage prov = _provisions[serviceProvider][verifier]; - prov.maxVerifierCut = prov.maxVerifierCutPending; - prov.thawingPeriod = prov.thawingPeriodPending; - emit ProvisionParametersSet(serviceProvider, verifier, prov.maxVerifierCut, prov.thawingPeriod); + if ((prov.maxVerifierCutPending != prov.maxVerifierCut) || (prov.thawingPeriodPending != prov.thawingPeriod)) { + prov.maxVerifierCut = prov.maxVerifierCutPending; + prov.thawingPeriod = prov.thawingPeriodPending; + emit ProvisionParametersSet(serviceProvider, verifier, prov.maxVerifierCut, prov.thawingPeriod); + } } /* diff --git a/packages/horizon/test/data-service/DataService.t.sol b/packages/horizon/test/data-service/DataService.t.sol index 95e027dd3..ecba7ae52 100644 --- a/packages/horizon/test/data-service/DataService.t.sol +++ b/packages/horizon/test/data-service/DataService.t.sol @@ -236,7 +236,9 @@ contract DataServiceTest is HorizonStakingSharedTest { ) external givenProvisionParametersChanged useIndexer { // bound to valid values maxVerifierCut = uint32(bound(maxVerifierCut, dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX())); - thawingPeriod = uint64(bound(thawingPeriod, dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX())); + thawingPeriod = uint64( + bound(thawingPeriod, dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()) + ); // set provision parameter ranges dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); @@ -249,12 +251,7 @@ contract DataServiceTest is HorizonStakingSharedTest { dataService.VERIFIER_CUT_MIN(), dataService.THAWING_PERIOD_MIN() ); - staking.setProvisionParameters( - users.indexer, - address(dataService), - maxVerifierCut, - thawingPeriod - ); + staking.setProvisionParameters(users.indexer, address(dataService), maxVerifierCut, thawingPeriod); // accept provision parameters vm.expectEmit(); @@ -329,13 +326,15 @@ contract DataServiceTest is HorizonStakingSharedTest { ); // accept provision parameters - vm.expectEmit(); - emit IHorizonStakingMain.ProvisionParametersSet( - users.indexer, - address(dataService), - maxVerifierCut, - dataService.THAWING_PERIOD_MIN() - ); + if (maxVerifierCut != dataService.VERIFIER_CUT_MIN()) { + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionParametersSet( + users.indexer, + address(dataService), + maxVerifierCut, + dataService.THAWING_PERIOD_MIN() + ); + } dataService.acceptProvisionParameters(users.indexer); } diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index bb3703b34..ec3248f39 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -12,6 +12,13 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { * MODIFIERS */ + modifier usePausedStaking() { + vm.startPrank(users.governor); + controller.setPaused(true); + vm.stopPrank(); + _; + } + modifier useOperator() { vm.startPrank(users.indexer); staking.setOperator(users.operator, subgraphDataServiceAddress, true); diff --git a/packages/horizon/test/staking/provision/parameters.t.sol b/packages/horizon/test/staking/provision/parameters.t.sol new file mode 100644 index 000000000..298059a7a --- /dev/null +++ b/packages/horizon/test/staking/provision/parameters.t.sol @@ -0,0 +1,104 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; + +contract HorizonStakingProvisionParametersTest is HorizonStakingTest { + /* + * TESTS + */ + + function test_ProvisionParametersSet( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, 0, 0) { + vm.assume(maxVerifierCut != 0); + vm.assume(thawingPeriod != 0); + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionParametersStaged( + users.indexer, + subgraphDataServiceAddress, + maxVerifierCut, + thawingPeriod + ); + staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); + + Provision memory prov = staking.getProvision(users.indexer, subgraphDataServiceAddress); + assertEq(prov.maxVerifierCutPending, maxVerifierCut); + assertEq(prov.thawingPeriodPending, thawingPeriod); + } + + function test_ProvisionParametersSet_RevertWhen_ProvisionNotExists( + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer { + vm.expectRevert( + abi.encodeWithSignature( + "HorizonStakingInvalidProvision(address,address)", + users.indexer, + subgraphDataServiceAddress + ) + ); + staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); + } + + function test_ProvisionParametersSet_RevertWhen_CallerNotAuthorized( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + vm.startPrank(msg.sender); // stop impersonating the indexer + vm.expectRevert( + abi.encodeWithSignature( + "HorizonStakingNotAuthorized(address,address,address)", + msg.sender, + users.indexer, + subgraphDataServiceAddress + ) + ); + staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); + vm.stopPrank(); + } + + function test_ProvisionParametersSet_RevertWhen_ProtocolPaused( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) usePausedStaking { + vm.expectRevert(abi.encodeWithSignature("ManagedIsPaused()")); + staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); + } + + function test_ProvisionParametersAccept( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + Provision memory prov = staking.getProvision(users.indexer, subgraphDataServiceAddress); + + staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); + + vm.startPrank(subgraphDataServiceAddress); + + if (maxVerifierCut != prov.maxVerifierCut || thawingPeriod != prov.thawingPeriod) { + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionParametersSet( + users.indexer, + subgraphDataServiceAddress, + maxVerifierCut, + thawingPeriod + ); + } + staking.acceptProvisionParameters(users.indexer); + vm.stopPrank(); + + assertEq(prov.maxVerifierCut, maxVerifierCut); + assertEq(prov.maxVerifierCutPending, maxVerifierCut); + assertEq(prov.thawingPeriod, thawingPeriod); + assertEq(prov.thawingPeriodPending, thawingPeriod); + } +} From da34d9bd7035a89d72878834c2de5de0a0162415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 12 Jun 2024 11:08:28 +0200 Subject: [PATCH 127/343] test: add tests for DataServicePausable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../extensions/DataServicePausable.sol | 2 +- packages/horizon/test/GraphBase.t.sol | 3 + .../extensions/DataServicePausable.t.sol | 94 +++++++++++++++++++ .../extensions/DataServicePausable.tree | 23 +++++ .../DataServiceImpPausable.sol | 36 +++++++ 5 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 packages/horizon/test/data-service/extensions/DataServicePausable.t.sol create mode 100644 packages/horizon/test/data-service/extensions/DataServicePausable.tree create mode 100644 packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index 577db9677..404876dc6 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -50,7 +50,7 @@ abstract contract DataServicePausable is Pausable, DataService, IDataServicePaus * @param _pauseGuardian The address of the pause guardian * @param _allowed The allowed status of the pause guardian */ - function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused { + function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal { pauseGuardians[_pauseGuardian] = _allowed; emit PauseGuardianSet(_pauseGuardian, _allowed); } diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index b978fba2d..fec51c345 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -84,6 +84,9 @@ abstract contract GraphBaseTest is Utils, Constants { vm.label({ account: address(escrow), newLabel: "PaymentsEscrow" }); vm.label({ account: address(staking), newLabel: "HorizonStaking" }); vm.label({ account: address(stakingExtension), newLabel: "HorizonStakingExtension" }); + + // Ensure caller is back to the original msg.sender + vm.stopPrank(); } function deployProtocolContracts() private { diff --git a/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol b/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol new file mode 100644 index 000000000..e65f579f5 --- /dev/null +++ b/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; +import {HorizonStakingSharedTest} from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; +import {DataServiceImpPausable} from "../implementations/DataServiceImpPausable.sol"; +import {IDataServicePausable} from "./../../../contracts/data-service/interfaces/IDataServicePausable.sol"; + +contract DataServicePausableTest is HorizonStakingSharedTest { + DataServiceImpPausable dataService; + + event Paused(address pauser); + event Unpaused(address unpauser); + + function setUp() public override { + super.setUp(); + + dataService = new DataServiceImpPausable(address(controller)); + } + + modifier whenTheCallerIsAPauseGuardian() { + _assert_setPauseGuardian(address(this), true); + _; + } + + function test_Pause_WhenTheProtocolIsNotPaused() external whenTheCallerIsAPauseGuardian { + _assert_pause(); + } + + function test_Pause_RevertWhen_TheProtocolIsPaused() external whenTheCallerIsAPauseGuardian { + _assert_pause(); + + vm.expectRevert(abi.encodeWithSignature("EnforcedPause()")); + dataService.pause(); + assertEq(dataService.paused(), true); + } + + function test_Pause_RevertWhen_TheCallerIsNotAPauseGuardian() external { + vm.expectRevert(abi.encodeWithSignature("DataServicePausableNotPauseGuardian(address)", address(this))); + dataService.pause(); + assertEq(dataService.paused(), false); + } + + function test_Unpause_WhenTheProtocolIsPaused() external whenTheCallerIsAPauseGuardian { + _assert_pause(); + _assert_unpause(); + } + + function test_Unpause_RevertWhen_TheProtocolIsNotPaused() external whenTheCallerIsAPauseGuardian { + vm.expectRevert(abi.encodeWithSignature("ExpectedPause()")); + dataService.unpause(); + assertEq(dataService.paused(), false); + } + + function test_Unpause_RevertWhen_TheCallerIsNotAPauseGuardian() external { + _assert_setPauseGuardian(address(this), true); + _assert_pause(); + _assert_setPauseGuardian(address(this), false); + + vm.expectRevert(abi.encodeWithSignature("DataServicePausableNotPauseGuardian(address)", address(this))); + dataService.unpause(); + assertEq(dataService.paused(), true); + } + + function test_SetPauseGuardian_WhenSettingAPauseGuardian() external { + _assert_setPauseGuardian(address(this), true); + } + + function test_SetPauseGuardian_WhenRemovingAPauseGuardian() external { + _assert_setPauseGuardian(address(this), true); + _assert_setPauseGuardian(address(this), false); + } + + function _assert_pause() private { + vm.expectEmit(); + emit Paused(address(this)); + dataService.pause(); + assertEq(dataService.paused(), true); + } + + function _assert_unpause() private { + vm.expectEmit(); + emit Unpaused(address(this)); + dataService.unpause(); + assertEq(dataService.paused(), false); + } + + function _assert_setPauseGuardian(address pauseGuardian, bool allowed) private { + vm.expectEmit(); + emit IDataServicePausable.PauseGuardianSet(pauseGuardian, allowed); + dataService.setPauseGuardian(pauseGuardian, allowed); + assertEq(dataService.pauseGuardians(pauseGuardian), allowed); + } +} diff --git a/packages/horizon/test/data-service/extensions/DataServicePausable.tree b/packages/horizon/test/data-service/extensions/DataServicePausable.tree new file mode 100644 index 000000000..9a3692026 --- /dev/null +++ b/packages/horizon/test/data-service/extensions/DataServicePausable.tree @@ -0,0 +1,23 @@ +DataServicePausableTest::pause_ +├── when the caller is a pause guardian +│ ├── when the protocol is not paused +│ │ └── it should pause the contract +│ └── when the protocol is paused +│ └── it should revert +└── when the caller is not a pause guardian + └── it should revert + +DataServicePausableTest::unpause_ +├── when the caller is a pause guardian +│ ├── when the protocol is paused +│ │ └── it should unpause the contract +│ └── when the protocol is not paused +│ └── it should revert +└── when the caller is not a pause guardian + └── it should revert + +DataServicePausableTest::setPauseGuardian_ +├── when setting a pause guardian +│ └── it should emit an event +└── when removing a pause guardian + └── it should emit an event \ No newline at end of file diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol new file mode 100644 index 000000000..ff40733b2 --- /dev/null +++ b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.26; + +import { DataService } from "../../../contracts/data-service/DataService.sol"; +import { DataServicePausable } from "../../../contracts/data-service/extensions/DataServicePausable.sol"; +import { IGraphPayments } from "./../../../contracts/interfaces/IGraphPayments.sol"; + +contract DataServiceImpPausable is DataServicePausable { + uint32 public constant DELEGATION_RATIO = 100; + uint256 public constant PROVISION_TOKENS_MIN = 50; + uint256 public constant PROVISION_TOKENS_MAX = 5000; + uint32 public constant VERIFIER_CUT_MIN = 5; + uint32 public constant VERIFIER_CUT_MAX = 100000; + uint64 public constant THAWING_PERIOD_MIN = 15; + uint64 public constant THAWING_PERIOD_MAX = 76; + + constructor(address controller) DataService(controller) initializer { + __DataService_init(); + } + + function register(address serviceProvider, bytes calldata data) external {} + + function acceptProvision(address serviceProvider, bytes calldata data) external {} + + function startService(address serviceProvider, bytes calldata data) external {} + + function stopService(address serviceProvider, bytes calldata data) external {} + + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} + + function slash(address serviceProvider, bytes calldata data) external {} + + function setPauseGuardian(address pauseGuardian, bool allowed) external { + _setPauseGuardian(pauseGuardian, allowed); + } +} From 17d3b792c6541546db163c0121c72a63de0c89dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 12 Jun 2024 11:42:48 +0200 Subject: [PATCH 128/343] test: upgradeable contracts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../data-service/DataServiceUpgradeable.t.sol | 15 ++++-- .../data-service/DataServiceUpgradeable.tree | 3 -- .../DataServicePausableUpgradeable.t.sol | 54 +++++++++++++++++++ .../DataServiceBaseUpgradeable.sol | 4 ++ .../DataServiceImpPausableUpgradeable.sol | 33 ++++++++++++ 5 files changed, 102 insertions(+), 7 deletions(-) delete mode 100644 packages/horizon/test/data-service/DataServiceUpgradeable.tree create mode 100644 packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol create mode 100644 packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol diff --git a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol index dff804a2b..7ff6c8246 100644 --- a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol +++ b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol @@ -6,9 +6,11 @@ import { DataServiceBaseUpgradeable } from "./implementations/DataServiceBaseUpg import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; contract DataServiceUpgradeableTest is GraphBaseTest { - function test_WhenTheContractIsDeployedWithAValidController() external { - DataServiceBaseUpgradeable dataService = _deployDataService(); + function test_WhenTheContractIsDeployed() external { + (DataServiceBaseUpgradeable dataService, DataServiceBaseUpgradeable implementation) = _deployDataService(); + // via proxy - ensure that the proxy was initialized correctly + // these calls validate proxy storage was correctly initialized uint32 delegationRatio = dataService.getDelegationRatio(); assertEq(delegationRatio, type(uint32).min); @@ -23,9 +25,14 @@ contract DataServiceUpgradeableTest is GraphBaseTest { (uint64 minThawingPeriod, uint64 maxThawingPeriod) = dataService.getThawingPeriodRange(); assertEq(minThawingPeriod, type(uint64).min); assertEq(maxThawingPeriod, type(uint64).max); + + // this ensures that implementation immutables were correctly initialized + // and they can be read via the proxy + assertEq(implementation.controller(), address(controller)); + assertEq(dataService.controller(), address(controller)); } - function _deployDataService() internal returns (DataServiceBaseUpgradeable) { + function _deployDataService() internal returns (DataServiceBaseUpgradeable, DataServiceBaseUpgradeable) { // Deploy implementation address implementation = address(new DataServiceBaseUpgradeable(address(controller))); @@ -36,6 +43,6 @@ contract DataServiceUpgradeableTest is GraphBaseTest { abi.encodeCall(DataServiceBaseUpgradeable.initialize, ()) ); - return DataServiceBaseUpgradeable(proxy); + return (DataServiceBaseUpgradeable(proxy), DataServiceBaseUpgradeable(implementation)); } } diff --git a/packages/horizon/test/data-service/DataServiceUpgradeable.tree b/packages/horizon/test/data-service/DataServiceUpgradeable.tree deleted file mode 100644 index dbb433635..000000000 --- a/packages/horizon/test/data-service/DataServiceUpgradeable.tree +++ /dev/null @@ -1,3 +0,0 @@ -DataServiceUpgradeableTest -└── when the contract is deployed with a valid controller - └── it should set all it's ranges to max \ No newline at end of file diff --git a/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol b/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol new file mode 100644 index 000000000..eef727465 --- /dev/null +++ b/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import { GraphBaseTest } from "../../GraphBase.t.sol"; +import { DataServiceImpPausableUpgradeable } from "../implementations/DataServiceImpPausableUpgradeable.sol"; +import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; + +contract DataServicePausableUpgradeableTest is GraphBaseTest { + function test_WhenTheContractIsDeployed() external { + ( + DataServiceImpPausableUpgradeable dataService, + DataServiceImpPausableUpgradeable implementation + ) = _deployDataService(); + + // via proxy - ensure that the proxy was initialized correctly + // these calls validate proxy storage was correctly initialized + uint32 delegationRatio = dataService.getDelegationRatio(); + assertEq(delegationRatio, type(uint32).min); + + (uint256 minTokens, uint256 maxTokens) = dataService.getProvisionTokensRange(); + assertEq(minTokens, type(uint256).min); + assertEq(maxTokens, type(uint256).max); + + (uint32 minVerifierCut, uint32 maxVerifierCut) = dataService.getVerifierCutRange(); + assertEq(minVerifierCut, type(uint32).min); + assertEq(maxVerifierCut, type(uint32).max); + + (uint64 minThawingPeriod, uint64 maxThawingPeriod) = dataService.getThawingPeriodRange(); + assertEq(minThawingPeriod, type(uint64).min); + assertEq(maxThawingPeriod, type(uint64).max); + + // this ensures that implementation immutables were correctly initialized + // and they can be read via the proxy + assertEq(implementation.controller(), address(controller)); + assertEq(dataService.controller(), address(controller)); + } + + function _deployDataService() + internal + returns (DataServiceImpPausableUpgradeable, DataServiceImpPausableUpgradeable) + { + // Deploy implementation + address implementation = address(new DataServiceImpPausableUpgradeable(address(controller))); + + // Deploy proxy + address proxy = UnsafeUpgrades.deployTransparentProxy( + implementation, + users.governor, + abi.encodeCall(DataServiceImpPausableUpgradeable.initialize, ()) + ); + + return (DataServiceImpPausableUpgradeable(proxy), DataServiceImpPausableUpgradeable(implementation)); + } +} diff --git a/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol index 9913c1b76..af0f22aaf 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol @@ -24,4 +24,8 @@ contract DataServiceBaseUpgradeable is DataService { function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} function slash(address serviceProvider, bytes calldata data) external {} + + function controller() external view returns (address) { + return address(_graphController()); + } } diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol b/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol new file mode 100644 index 000000000..14b23bc9c --- /dev/null +++ b/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.26; + +import { DataService } from "../../../contracts/data-service/DataService.sol"; +import { DataServicePausableUpgradeable } from "../../../contracts/data-service/extensions/DataServicePausableUpgradeable.sol"; +import { IGraphPayments } from "./../../../contracts/interfaces/IGraphPayments.sol"; + +contract DataServiceImpPausableUpgradeable is DataServicePausableUpgradeable { + constructor(address controller) DataService(controller) { + _disableInitializers(); + } + + function initialize() external initializer { + __DataService_init(); + __DataServicePausable_init(); + } + + function register(address serviceProvider, bytes calldata data) external {} + + function acceptProvision(address serviceProvider, bytes calldata data) external {} + + function startService(address serviceProvider, bytes calldata data) external {} + + function stopService(address serviceProvider, bytes calldata data) external {} + + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} + + function slash(address serviceProvider, bytes calldata data) external {} + + function controller() external view returns (address) { + return address(_graphController()); + } +} From 54c4a39419420df57ff038fb87435dc86c0bcb18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 12 Jun 2024 11:52:17 +0200 Subject: [PATCH 129/343] test: more pausable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../extensions/DataServicePausable.t.sol | 35 ++++++++++++++++--- .../extensions/DataServicePausable.tree | 14 +++++++- .../implementations/DataServiceFees.sol | 0 .../DataServiceImpPausable.sol | 11 ++++++ 4 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 packages/horizon/test/data-service/implementations/DataServiceFees.sol diff --git a/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol b/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol index e65f579f5..c71cace11 100644 --- a/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol +++ b/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol @@ -1,10 +1,9 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.26; -import "forge-std/Test.sol"; -import {HorizonStakingSharedTest} from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; -import {DataServiceImpPausable} from "../implementations/DataServiceImpPausable.sol"; -import {IDataServicePausable} from "./../../../contracts/data-service/interfaces/IDataServicePausable.sol"; +import { HorizonStakingSharedTest } from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; +import { DataServiceImpPausable } from "../implementations/DataServiceImpPausable.sol"; +import { IDataServicePausable } from "./../../../contracts/data-service/interfaces/IDataServicePausable.sol"; contract DataServicePausableTest is HorizonStakingSharedTest { DataServiceImpPausable dataService; @@ -71,6 +70,34 @@ contract DataServicePausableTest is HorizonStakingSharedTest { _assert_setPauseGuardian(address(this), false); } + function test_PausedProtectedFn_RevertWhen_TheProtocolIsPaused() external { + _assert_setPauseGuardian(address(this), true); + _assert_pause(); + + vm.expectRevert(abi.encodeWithSignature("EnforcedPause()")); + dataService.pausedProtectedFn(); + } + + function test_PausedProtectedFn_WhenTheProtocolIsNotPaused() external { + vm.expectEmit(); + emit DataServiceImpPausable.PausedProtectedFn(); + dataService.pausedProtectedFn(); + } + + function test_UnpausedProtectedFn_WhenTheProtocolIsPaused() external { + _assert_setPauseGuardian(address(this), true); + _assert_pause(); + + vm.expectEmit(); + emit DataServiceImpPausable.UnpausedProtectedFn(); + dataService.unpausedProtectedFn(); + } + + function test_UnpausedProtectedFn_RevertWhen_TheProtocolIsNotPaused() external { + vm.expectRevert(abi.encodeWithSignature("ExpectedPause()")); + dataService.unpausedProtectedFn(); + } + function _assert_pause() private { vm.expectEmit(); emit Paused(address(this)); diff --git a/packages/horizon/test/data-service/extensions/DataServicePausable.tree b/packages/horizon/test/data-service/extensions/DataServicePausable.tree index 9a3692026..1c162c55d 100644 --- a/packages/horizon/test/data-service/extensions/DataServicePausable.tree +++ b/packages/horizon/test/data-service/extensions/DataServicePausable.tree @@ -20,4 +20,16 @@ DataServicePausableTest::setPauseGuardian_ ├── when setting a pause guardian │ └── it should emit an event └── when removing a pause guardian - └── it should emit an event \ No newline at end of file + └── it should emit an event + +DataServicePausableTest::pausedProtectedFn_ +├── when the protocol is paused +│ └── it should revert +└── when the protocol is not paused + └── it should emit an event + +DataServicePausableTest::unpausedProtectedFn_ +├── when the protocol is paused +│ └── it should emit an event +└── when the protocol is not paused + └── it should revert diff --git a/packages/horizon/test/data-service/implementations/DataServiceFees.sol b/packages/horizon/test/data-service/implementations/DataServiceFees.sol new file mode 100644 index 000000000..e69de29bb diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol index ff40733b2..ad5308e33 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol @@ -14,6 +14,9 @@ contract DataServiceImpPausable is DataServicePausable { uint64 public constant THAWING_PERIOD_MIN = 15; uint64 public constant THAWING_PERIOD_MAX = 76; + event PausedProtectedFn(); + event UnpausedProtectedFn(); + constructor(address controller) DataService(controller) initializer { __DataService_init(); } @@ -33,4 +36,12 @@ contract DataServiceImpPausable is DataServicePausable { function setPauseGuardian(address pauseGuardian, bool allowed) external { _setPauseGuardian(pauseGuardian, allowed); } + + function pausedProtectedFn() external whenNotPaused { + emit PausedProtectedFn(); + } + + function unpausedProtectedFn() external whenPaused { + emit UnpausedProtectedFn(); + } } From 086a94c1516a7207319f35531cf92a44988b7482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 13 Jun 2024 17:45:13 +0200 Subject: [PATCH 130/343] test: add data service fees tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../extensions/DataServiceFees.sol | 1 + .../interfaces/IDataServiceFees.sol | 5 + .../extensions/DataServiceFees.t.sol | 220 ++++++++++++++++++ .../extensions/DataServiceFees.tree | 21 ++ .../implementations/DataServiceFees.sol | 0 .../implementations/DataServiceImpFees.sol | 35 +++ 6 files changed, 282 insertions(+) create mode 100644 packages/horizon/test/data-service/extensions/DataServiceFees.t.sol create mode 100644 packages/horizon/test/data-service/extensions/DataServiceFees.tree delete mode 100644 packages/horizon/test/data-service/implementations/DataServiceFees.sol create mode 100644 packages/horizon/test/data-service/implementations/DataServiceImpFees.sol diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index d9a6122b6..bcec6f828 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -39,6 +39,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat * @param _unlockTimestamp The timestamp when the tokens can be released */ function _lockStake(address _serviceProvider, uint256 _tokens, uint256 _unlockTimestamp) internal { + require(_tokens != 0, DataServiceFeesZeroTokens()); feesProvisionTracker.lock(_graphStaking(), _serviceProvider, _tokens, delegationRatio); LinkedList.List storage claimsList = claimsLists[_serviceProvider]; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index b730a09e6..5e84863e6 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -78,6 +78,11 @@ interface IDataServiceFees is IDataService { */ error DataServiceFeesClaimNotFound(bytes32 claimId); + /** + * @notice Emitted when trying to lock zero tokens in a stake claim + */ + error DataServiceFeesZeroTokens(); + /** * @notice Releases expired stake claims for the caller. * @dev This function is only meant to be called if the service provider has enough diff --git a/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol new file mode 100644 index 000000000..8ad370c48 --- /dev/null +++ b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol @@ -0,0 +1,220 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.26; + +import "forge-std/Console.sol"; +import { HorizonStakingSharedTest } from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; +import { DataServiceImpFees } from "../implementations/DataServiceImpFees.sol"; +import { IDataServiceFees } from "../../../contracts/data-service/interfaces/IDataServiceFees.sol"; +import { ProvisionTracker } from "../../../contracts/data-service/libraries/ProvisionTracker.sol"; +import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; + +contract DataServiceFeesTest is HorizonStakingSharedTest { + function test_Lock_RevertWhen_ZeroTokensAreLocked() + external + useIndexer + useProvisionDataService(address(dataService), PROVISION_TOKENS, 0, 0) + { + vm.expectRevert(abi.encodeWithSignature("DataServiceFeesZeroTokens()")); + dataService.lockStake(users.indexer, 0); + } + + uint256 public constant PROVISION_TOKENS = 10_000_000 ether; + DataServiceImpFees dataService; + + function setUp() public override { + super.setUp(); + + dataService = new DataServiceImpFees(address(controller)); + } + + function test_Lock_WhenTheProvisionHasEnoughTokens( + uint256 tokens + ) external useIndexer useProvisionDataService(address(dataService), PROVISION_TOKENS, 0, 0) { + tokens = bound(tokens, 1, PROVISION_TOKENS / dataService.STAKE_TO_FEES_RATIO()); + + _assert_lockStake(users.indexer, tokens); + } + + function test_Lock_WhenTheProvisionHasJustEnoughTokens( + uint256 tokens, + uint256 steps + ) external useIndexer useProvisionDataService(address(dataService), PROVISION_TOKENS, 0, 0) { + // lock all provisioned stake in steps + // limit tokens to at least 1 per step + tokens = bound(tokens, 50, PROVISION_TOKENS / dataService.STAKE_TO_FEES_RATIO()); + steps = bound(steps, 1, 50); + uint256 stepAmount = tokens / steps; + + for (uint256 i = 0; i < steps; i++) { + _assert_lockStake(users.indexer, stepAmount); + } + + uint256 lockedStake = dataService.feesProvisionTracker(users.indexer); + uint256 delta = (tokens % steps); + assertEq(lockedStake, stepAmount * dataService.STAKE_TO_FEES_RATIO() * steps); + assertEq(tokens * dataService.STAKE_TO_FEES_RATIO() - lockedStake, delta * dataService.STAKE_TO_FEES_RATIO()); + } + + function test_Lock_RevertWhen_TheProvisionHasNotEnoughTokens( + uint256 tokens + ) external useIndexer useProvisionDataService(address(dataService), PROVISION_TOKENS, 0, 0) { + tokens = bound(tokens, 1, PROVISION_TOKENS / dataService.STAKE_TO_FEES_RATIO()); + + // lock everything + _assert_lockStake(users.indexer, PROVISION_TOKENS / dataService.STAKE_TO_FEES_RATIO()); + + // tryna lock some more + uint256 additionalTokens = 10000; + uint256 tokensRequired = dataService.feesProvisionTracker(users.indexer) + + additionalTokens * + dataService.STAKE_TO_FEES_RATIO(); + uint256 tokensAvailable = staking.getTokensAvailable(users.indexer, address(dataService), 0); + vm.expectRevert( + abi.encodeWithSelector( + ProvisionTracker.ProvisionTrackerInsufficientTokens.selector, + tokensAvailable, + tokensRequired + ) + ); + dataService.lockStake(users.indexer, additionalTokens); + } + + function test_Release_WhenNIsValid( + uint256 tokens, + uint256 steps, + uint256 n + ) external useIndexer useProvisionDataService(address(dataService), PROVISION_TOKENS, 0, 0) { + // lock all provisioned stake in steps + // limit tokens to at least 1 per step + // limit steps to at least 15 so we stagger locks every 5 seconds to have some expired + tokens = bound(tokens, 50, PROVISION_TOKENS / dataService.STAKE_TO_FEES_RATIO()); + steps = bound(steps, 15, 50); + n = bound(n, 0, steps); + + uint256 stepAmount = tokens / steps; + + // lock tokens staggering the release + for (uint256 i = 0; i < steps; i++) { + _assert_lockStake(users.indexer, stepAmount); + vm.warp(block.timestamp + 5 seconds); + } + + // it should release all expired claims + _assert_releaseStake(users.indexer, n); + } + + function test_Release_WhenNIsNotValid( + uint256 tokens, + uint256 steps + ) external useIndexer useProvisionDataService(address(dataService), PROVISION_TOKENS, 0, 0) { + // lock all provisioned stake in steps + // limit tokens to at least 1 per step + // limit steps to at least 15 so we stagger locks every 5 seconds to have some expired + tokens = bound(tokens, 50, PROVISION_TOKENS / dataService.STAKE_TO_FEES_RATIO()); + steps = bound(steps, 15, 50); + + uint256 stepAmount = tokens / steps; + + // lock tokens staggering the release + for (uint256 i = 0; i < steps; i++) { + _assert_lockStake(users.indexer, stepAmount); + vm.warp(block.timestamp + 5 seconds); + } + + // it should revert + vm.expectRevert(abi.encodeWithSelector(LinkedList.LinkedListInvalidIterations.selector)); + dataService.releaseStake(steps + 1); + } + + // -- Assertion functions -- + + function _assert_lockStake(address serviceProvider, uint256 tokens) private { + // before state + (bytes32 beforeHead, , uint256 beforeNonce, uint256 beforeCount) = dataService.claimsLists(serviceProvider); + uint256 beforeLockedStake = dataService.feesProvisionTracker(serviceProvider); + + // calc + uint256 unlockTimestamp = block.timestamp + dataService.LOCK_DURATION(); + uint256 stakeToLock = tokens * dataService.STAKE_TO_FEES_RATIO(); + bytes32 predictedClaimId = keccak256(abi.encodePacked(address(dataService), serviceProvider, beforeNonce)); + + // it should emit a an event + vm.expectEmit(); + emit IDataServiceFees.StakeClaimLocked(serviceProvider, predictedClaimId, stakeToLock, unlockTimestamp); + dataService.lockStake(serviceProvider, tokens); + + // after state + uint256 afterLockedStake = dataService.feesProvisionTracker(serviceProvider); + (bytes32 afterHead, bytes32 afterTail, uint256 afterNonce, uint256 afterCount) = dataService.claimsLists( + serviceProvider + ); + + // it should lock the tokens + assertEq(beforeLockedStake + stakeToLock, afterLockedStake); + + // it should create a stake claim + (uint256 claimTokens, uint256 createdAt, uint256 releaseAt, bytes32 nextClaim) = dataService.claims( + predictedClaimId + ); + assertEq(claimTokens, stakeToLock); + assertEq(createdAt, block.timestamp); + assertEq(releaseAt, unlockTimestamp); + assertEq(nextClaim, bytes32(0)); + + // it should update the list + assertEq(afterCount, beforeCount + 1); + assertEq(afterNonce, beforeNonce + 1); + assertEq(afterHead, beforeCount == 0 ? predictedClaimId : beforeHead); + assertEq(afterTail, predictedClaimId); + } + + function _assert_releaseStake(address serviceProvider, uint256 n) private { + // before state + (bytes32 beforeHead, bytes32 beforeTail, uint256 beforeNonce, uint256 beforeCount) = dataService.claimsLists( + serviceProvider + ); + uint256 beforeLockedStake = dataService.feesProvisionTracker(serviceProvider); + + // calc and set events + vm.expectEmit(); + + uint256 claimsCount = 0; + uint256 tokensReleased = 0; + bytes32 head = beforeHead; + while (head != bytes32(0) && (claimsCount < n || n == 0)) { + (uint256 claimTokens, , uint256 releaseAt, bytes32 nextClaim) = dataService.claims(head); + if (releaseAt > block.timestamp) { + break; + } + + emit IDataServiceFees.StakeClaimReleased(serviceProvider, head, claimTokens, releaseAt); + head = nextClaim; + tokensReleased += claimTokens; + claimsCount++; + } + + // it should emit a an event + emit IDataServiceFees.StakeClaimsReleased(serviceProvider, claimsCount, tokensReleased); + dataService.releaseStake(n); + + // after state + (bytes32 afterHead, bytes32 afterTail, uint256 afterNonce, uint256 afterCount) = dataService.claimsLists( + serviceProvider + ); + uint256 afterLockedStake = dataService.feesProvisionTracker(serviceProvider); + + // it should release the tokens + assertEq(beforeLockedStake - tokensReleased, afterLockedStake); + + // it should remove the processed claims from the list + assertEq(afterCount, beforeCount - claimsCount); + assertEq(afterNonce, beforeNonce); + if (claimsCount != 0) { + assertNotEq(afterHead, beforeHead); + } else { + assertEq(afterHead, beforeHead); + } + assertEq(afterHead, head); + assertEq(afterTail, claimsCount == beforeCount ? bytes32(0) : beforeTail); + } +} diff --git a/packages/horizon/test/data-service/extensions/DataServiceFees.tree b/packages/horizon/test/data-service/extensions/DataServiceFees.tree new file mode 100644 index 000000000..331627179 --- /dev/null +++ b/packages/horizon/test/data-service/extensions/DataServiceFees.tree @@ -0,0 +1,21 @@ +DataServiceFeesTest::lock_ +├── when zero tokens are locked +│ └── it should revert +├── when the provision has enough tokens +│ ├── it should lock the tokens +│ ├── it should create a stake claim +│ ├── it should update the claims list +│ └── it should emit a an event +├── when the provision has just enough tokens +│ ├── it should lock the tokens +│ ├── it should create a stake claim +│ ├── it should update the claims list +│ └── it should emit a an event +└──when the provision has not enough tokens + └── it should revert + +DataServiceFeesTest::release_ +├── when n is valid +│ └── it should release all expired claims +└── when n is not valid + └── it should release at most n expired claims \ No newline at end of file diff --git a/packages/horizon/test/data-service/implementations/DataServiceFees.sol b/packages/horizon/test/data-service/implementations/DataServiceFees.sol deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol b/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol new file mode 100644 index 000000000..72574cedb --- /dev/null +++ b/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.26; + +import { DataService } from "../../../contracts/data-service/DataService.sol"; +import { DataServiceFees } from "../../../contracts/data-service/extensions/DataServiceFees.sol"; +import { IGraphPayments } from "./../../../contracts/interfaces/IGraphPayments.sol"; + +contract DataServiceImpFees is DataServiceFees { + uint256 public constant STAKE_TO_FEES_RATIO = 1000; + uint256 public constant LOCK_DURATION = 1 minutes; + + constructor(address controller) DataService(controller) initializer { + __DataService_init(); + } + + function register(address serviceProvider, bytes calldata data) external {} + + function acceptProvision(address serviceProvider, bytes calldata data) external {} + + function startService(address serviceProvider, bytes calldata data) external {} + + function stopService(address serviceProvider, bytes calldata data) external {} + + function collect(address serviceProvider, IGraphPayments.PaymentTypes, bytes calldata data) external { + uint256 amount = abi.decode(data, (uint256)); + _releaseStake(serviceProvider, 0); + _lockStake(serviceProvider, amount * STAKE_TO_FEES_RATIO, block.timestamp + LOCK_DURATION); + } + + function lockStake(address serviceProvider, uint256 amount) external { + _lockStake(serviceProvider, amount * STAKE_TO_FEES_RATIO, block.timestamp + LOCK_DURATION); + } + + function slash(address serviceProvider, bytes calldata data) external {} +} From 6627b7d61e3111a0181d9e0a3ab6269b0fba5d9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 14 Jun 2024 09:41:34 +0200 Subject: [PATCH 131/343] fix: remove console import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../horizon/test/data-service/extensions/DataServiceFees.t.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol index 8ad370c48..4ab1406ae 100644 --- a/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol +++ b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.26; -import "forge-std/Console.sol"; import { HorizonStakingSharedTest } from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; import { DataServiceImpFees } from "../implementations/DataServiceImpFees.sol"; import { IDataServiceFees } from "../../../contracts/data-service/interfaces/IDataServiceFees.sol"; From c4b49583e5f5b7df7898074d44eb7b70e13ac795 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 18 Jun 2024 18:34:57 -0300 Subject: [PATCH 132/343] chore: refactor dispute manager tests --- .../test/DisputeManager.t.sol | 512 ------------------ .../subgraph-service/test/GraphBaseTest.t.sol | 123 +++++ .../test/disputes/DisputeManager.t.sol | 128 +++++ .../test/disputes/accept.t.sol | 126 +++++ .../test/disputes/cancel.t.sol | 74 +++ .../test/disputes/create.t.sol | 157 ++++++ .../subgraph-service/test/disputes/draw.t.sol | 71 +++ .../test/mocks/MockHorizonStaking.sol | 4 +- .../subgraph-service/test/utils/Constants.sol | 13 + .../subgraph-service/test/utils/Users.sol | 14 + .../subgraph-service/test/utils/Utils.sol | 12 + 11 files changed, 720 insertions(+), 514 deletions(-) delete mode 100644 packages/subgraph-service/test/DisputeManager.t.sol create mode 100644 packages/subgraph-service/test/GraphBaseTest.t.sol create mode 100644 packages/subgraph-service/test/disputes/DisputeManager.t.sol create mode 100644 packages/subgraph-service/test/disputes/accept.t.sol create mode 100644 packages/subgraph-service/test/disputes/cancel.t.sol create mode 100644 packages/subgraph-service/test/disputes/create.t.sol create mode 100644 packages/subgraph-service/test/disputes/draw.t.sol create mode 100644 packages/subgraph-service/test/utils/Constants.sol create mode 100644 packages/subgraph-service/test/utils/Users.sol create mode 100644 packages/subgraph-service/test/utils/Utils.sol diff --git a/packages/subgraph-service/test/DisputeManager.t.sol b/packages/subgraph-service/test/DisputeManager.t.sol deleted file mode 100644 index a5375dc0d..000000000 --- a/packages/subgraph-service/test/DisputeManager.t.sol +++ /dev/null @@ -1,512 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; -import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; -import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; - -import { DisputeManager } from "../contracts/DisputeManager.sol"; -import { IDisputeManager } from "../contracts/interfaces/IDisputeManager.sol"; -import { Attestation } from "../contracts/libraries/Attestation.sol"; - -import { SubgraphService } from "../contracts/SubgraphService.sol"; - -// Mocks - -import "./mocks/MockGRTToken.sol"; -import "./mocks/MockHorizonStaking.sol"; -import "./mocks/MockRewardsManager.sol"; - -contract DisputeManagerTest is Test { - DisputeManager disputeManager; - - address governor; - address arbitrator; - - uint256 indexerPrivateKey; - address indexer; - - uint256 fishermanPrivateKey; - address fisherman; - - uint256 allocationIDPrivateKey; - address allocationID; - - uint64 disputePeriod = 300; // 5 minutes - uint256 minimumDeposit = 100 ether; // 100 GRT - uint32 fishermanRewardPercentage = 100000; // 10% - uint32 maxSlashingPercentage = 500000; // 50% - - Controller controller; - MockGRTToken graphToken; - SubgraphService subgraphService; - MockHorizonStaking staking; - MockRewardsManager rewardsManager; - - // Setup - - function setUp() public { - governor = address(0xA1); - arbitrator = address(0xA2); - - indexerPrivateKey = 0xB1; - indexer = vm.addr(indexerPrivateKey); - - fishermanPrivateKey = 0xC1; - fisherman = vm.addr(fishermanPrivateKey); - - allocationIDPrivateKey = 0xD1; - allocationID = vm.addr(allocationIDPrivateKey); - - graphToken = new MockGRTToken(); - staking = new MockHorizonStaking(address(graphToken)); - rewardsManager = new MockRewardsManager(); - - address tapVerifier = address(0xE3); - address curation = address(0xE4); - - vm.startPrank(governor); - controller = new Controller(); - controller.setContractProxy(keccak256("GraphToken"), address(graphToken)); - controller.setContractProxy(keccak256("Staking"), address(staking)); - controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); - controller.setContractProxy(keccak256("GraphPayments"), address(0x100)); - controller.setContractProxy(keccak256("PaymentsEscrow"), address(0x101)); - controller.setContractProxy(keccak256("EpochManager"), address(0x102)); - controller.setContractProxy(keccak256("GraphTokenGateway"), address(0x103)); - controller.setContractProxy(keccak256("GraphProxyAdmin"), address(0x104)); - controller.setContractProxy(keccak256("Curation"), address(0x105)); - vm.stopPrank(); - - address disputeManagerImplementation = address(new DisputeManager(address(controller))); - address disputeManagerProxy = UnsafeUpgrades.deployTransparentProxy( - disputeManagerImplementation, - governor, - abi.encodeCall( - DisputeManager.initialize, - (arbitrator, disputePeriod, minimumDeposit, fishermanRewardPercentage, maxSlashingPercentage) - ) - ); - disputeManager = DisputeManager(disputeManagerProxy); - - address subgraphServiceImplementation = address( - new SubgraphService(address(controller), address(disputeManager), tapVerifier, curation) - ); - address subgraphServiceProxy = UnsafeUpgrades.deployTransparentProxy( - subgraphServiceImplementation, - governor, - abi.encodeCall(SubgraphService.initialize, (1000 ether, 16)) - ); - subgraphService = SubgraphService(subgraphServiceProxy); - - disputeManager.setSubgraphService(address(subgraphService)); - } - - // Helper functions - - function createProvisionAndAllocate(address _allocationID, uint256 tokens) private { - vm.startPrank(indexer); - graphToken.mint(indexer, tokens); - staking.provision(tokens, address(subgraphService), 500000, 300); - bytes32 subgraphDeployment = keccak256(abi.encodePacked("Subgraph Deployment ID")); - bytes32 digest = subgraphService.encodeAllocationProof(indexer, _allocationID); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); - - subgraphService.register(indexer, abi.encode("url", "geoHash", address(0))); - - bytes memory data = abi.encode(subgraphDeployment, tokens, _allocationID, abi.encodePacked(r, s, v)); - subgraphService.startService(indexer, data); - vm.stopPrank(); - } - - function createIndexingDispute(address _allocationID, bytes32 _poi, uint256 tokens) private returns (bytes32 disputeID) { - vm.startPrank(fisherman); - graphToken.mint(fisherman, tokens); - graphToken.approve(address(disputeManager), tokens); - bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, _poi, tokens); - vm.stopPrank(); - return _disputeID; - } - - function createQueryDispute(uint256 tokens) private returns (bytes32 disputeID) { - Attestation.Receipt memory receipt = Attestation.Receipt({ - requestCID: keccak256(abi.encodePacked("Request CID")), - responseCID: keccak256(abi.encodePacked("Response CID")), - subgraphDeploymentId: keccak256(abi.encodePacked("Subgraph Deployment ID")) - }); - bytes memory attestationData = createAtestationData(receipt, allocationIDPrivateKey); - - vm.startPrank(fisherman); - graphToken.mint(fisherman, tokens); - graphToken.approve(address(disputeManager), tokens); - bytes32 _disputeID = disputeManager.createQueryDispute(attestationData, tokens); - vm.stopPrank(); - return _disputeID; - } - - function createConflictingAttestations( - bytes32 responseCID1, - bytes32 subgraphDeploymentId1, - bytes32 responseCID2, - bytes32 subgraphDeploymentId2 - ) private view returns (bytes memory attestationData1, bytes memory attestationData2) { - bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); - Attestation.Receipt memory receipt1 = Attestation.Receipt({ - requestCID: requestCID, - responseCID: responseCID1, - subgraphDeploymentId: subgraphDeploymentId1 - }); - - Attestation.Receipt memory receipt2 = Attestation.Receipt({ - requestCID: requestCID, - responseCID: responseCID2, - subgraphDeploymentId: subgraphDeploymentId2 - }); - - bytes memory _attestationData1 = createAtestationData(receipt1, allocationIDPrivateKey); - bytes memory _attestationData2 = createAtestationData(receipt2, allocationIDPrivateKey); - return (_attestationData1, _attestationData2); - } - - function createAtestationData( - Attestation.Receipt memory receipt, - uint256 signer - ) private view returns (bytes memory attestationData) { - bytes32 digest = disputeManager.encodeReceipt(receipt); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(signer, digest); - - return abi.encodePacked(receipt.requestCID, receipt.responseCID, receipt.subgraphDeploymentId, r, s, v); - } - - // Tests - - // Create dispute - - function testCreateIndexingDispute() public { - createProvisionAndAllocate(allocationID, 10000 ether); - - bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); - assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); - } - - function testCreateQueryDispute() public { - createProvisionAndAllocate(allocationID, 10000 ether); - - bytes32 disputeID = createQueryDispute(200 ether); - assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); - } - - function testCreateQueryDisputeConflict() public { - createProvisionAndAllocate(allocationID, 10000 ether); - - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); - - vm.prank(fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( - attestationData1, - attestationData2 - ); - assertTrue(disputeManager.isDisputeCreated(disputeID1), "Dispute 1 should be created."); - assertTrue(disputeManager.isDisputeCreated(disputeID2), "Dispute 2 should be created."); - } - - function test_RevertWhen_DisputeAlreadyCreated() public { - createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); - - // Create another dispute with different fisherman - address otherFisherman = address(0x5); - uint256 tokens = 200 ether; - vm.startPrank(otherFisherman); - graphToken.mint(otherFisherman, tokens); - graphToken.approve(address(disputeManager), tokens); - bytes memory expectedError = abi.encodeWithSignature("DisputeManagerDisputeAlreadyCreated(bytes32)", disputeID); - vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI1"), tokens); - vm.stopPrank(); - } - - function test_RevertIf_DepositUnderMinimum() public { - // minimum deposit is 100 ether - vm.startPrank(fisherman); - graphToken.mint(fisherman, 50 ether); - bytes memory expectedError = abi.encodeWithSignature( - "DisputeManagerInsufficientDeposit(uint256,uint256)", - 50 ether, - 100 ether - ); - vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI3"), 50 ether); - vm.stopPrank(); - } - - function test_RevertIf_AllocationDoesNotExist() public { - // create dispute without an existing allocation - uint256 tokens = 200 ether; - vm.startPrank(fisherman); - graphToken.mint(fisherman, tokens); - graphToken.approve(address(disputeManager), tokens); - bytes memory expectedError = abi.encodeWithSignature("DisputeManagerIndexerNotFound(address)", allocationID); - vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI4"), tokens); - vm.stopPrank(); - } - - function test_RevertIf_ConflictingAttestationsResponsesAreTheSame() public { - bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); - bytes32 responseCID = keccak256(abi.encodePacked("Response CID")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( - responseCID, - subgraphDeploymentId, - responseCID, - subgraphDeploymentId - ); - - vm.prank(fisherman); - - bytes memory expectedError = abi.encodeWithSignature( - "DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", - requestCID, - responseCID, - subgraphDeploymentId, - requestCID, - responseCID, - subgraphDeploymentId - ); - vm.expectRevert(expectedError); - disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); - } - - function test_RevertIf_ConflictingAttestationsHaveDifferentSubgraph() public { - bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId1 = keccak256(abi.encodePacked("Subgraph Deployment ID 1")); - bytes32 subgraphDeploymentId2 = keccak256(abi.encodePacked("Subgraph Deployment ID 2")); - - (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( - responseCID1, - subgraphDeploymentId1, - responseCID2, - subgraphDeploymentId2 - ); - - vm.prank(fisherman); - bytes memory expectedError = abi.encodeWithSignature( - "DisputeManagerNonConflictingAttestations(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", - requestCID, - responseCID1, - subgraphDeploymentId1, - requestCID, - responseCID2, - subgraphDeploymentId2 - ); - vm.expectRevert(expectedError); - disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); - } - - // Accept dispute - - function testAcceptIndexingDispute() public { - createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); - - vm.prank(arbitrator); - disputeManager.acceptDispute(disputeID, 5000 ether); - - assertEq(graphToken.balanceOf(fisherman), 700 ether, "Fisherman should receive 50% of slashed tokens."); - assertEq(graphToken.balanceOf(indexer), 5000 ether, "Service provider should have 5000 GRT slashed."); - } - - function testAcceptQueryDispute() public { - createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createQueryDispute(200 ether); - - vm.prank(arbitrator); - disputeManager.acceptDispute(disputeID, 5000 ether); - - assertEq(graphToken.balanceOf(fisherman), 700 ether, "Fisherman should receive 50% of slashed tokens."); - assertEq(graphToken.balanceOf(indexer), 5000 ether, "Service provider should have 5000 GRT slashed."); - } - - function testAcceptQueryDisputeConflicting() public { - createProvisionAndAllocate(allocationID, 10000 ether); - - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); - - vm.prank(fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( - attestationData1, - attestationData2 - ); - - vm.prank(arbitrator); - disputeManager.acceptDispute(disputeID1, 5000 ether); - - assertEq(graphToken.balanceOf(fisherman), 500 ether, "Fisherman should receive 50% of slashed tokens."); - assertEq(graphToken.balanceOf(indexer), 5000 ether, "Service provider should have 5000 GRT slashed."); - - (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); - assertTrue(status1 == IDisputeManager.DisputeStatus.Accepted, "Dispute 1 should be accepted."); - assertTrue(status2 == IDisputeManager.DisputeStatus.Rejected, "Dispute 2 should be rejected."); - } - - function test_RevertIf_CallerIsNotArbitrator_AcceptDispute() public { - createProvisionAndAllocate(allocationID, 10000 ether); - - bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); - - // attempt to accept dispute as fisherman - vm.prank(fisherman); - vm.expectRevert(bytes4(keccak256("DisputeManagerNotArbitrator()"))); - disputeManager.acceptDispute(disputeID, 5000 ether); - } - - function test_RevertIf_SlashingOverMaxSlashPercentage() public { - createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI101"), 200 ether); - - // max slashing percentage is 50% - vm.prank(arbitrator); - bytes memory expectedError = abi.encodeWithSignature("DisputeManagerInvalidTokensSlash(uint256)", 6000 ether); - vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID, 6000 ether); - } - - // Cancel dispute - - function testCancelDispute() public { - createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); - - // skip to end of dispute period - skip(disputePeriod + 1); - - vm.prank(fisherman); - disputeManager.cancelDispute(disputeID); - - assertEq(graphToken.balanceOf(fisherman), 200 ether, "Fisherman should receive their deposit back."); - assertEq(graphToken.balanceOf(indexer), 10000 ether, "There's no slashing to the indexer."); - } - - function testCancelQueryDisputeConflicting() public { - createProvisionAndAllocate(allocationID, 10000 ether); - - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); - - vm.prank(fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( - attestationData1, - attestationData2 - ); - - // skip to end of dispute period - skip(disputePeriod + 1); - - vm.prank(fisherman); - disputeManager.cancelDispute(disputeID1); - - assertEq(graphToken.balanceOf(indexer), 10000 ether, "There's no slashing to the indexer."); - - (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); - assertTrue(status1 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 1 should be cancelled."); - assertTrue(status2 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 2 should be cancelled."); - } - - function test_RevertIf_CallerIsNotFisherman_CancelDispute() public { - createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI1"), 200 ether); - - vm.prank(arbitrator); - vm.expectRevert(bytes4(keccak256("DisputeManagerNotFisherman()"))); - disputeManager.cancelDispute(disputeID); - } - - // Draw dispute - - function testDrawDispute() public { - createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID, bytes32("POI32"), 200 ether); - - vm.prank(arbitrator); - disputeManager.drawDispute(disputeID); - - assertEq(graphToken.balanceOf(fisherman), 200 ether, "Fisherman should receive their deposit back."); - assertEq(graphToken.balanceOf(indexer), 10000 ether, "There's no slashing to the indexer."); - } - - function testDrawQueryDisputeConflicting() public { - createProvisionAndAllocate(allocationID, 10000 ether); - - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); - - vm.prank(fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( - attestationData1, - attestationData2 - ); - - vm.prank(arbitrator); - disputeManager.drawDispute(disputeID1); - - assertEq(graphToken.balanceOf(indexer), 10000 ether, "There's no slashing to the indexer."); - - (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); - assertTrue(status1 == IDisputeManager.DisputeStatus.Drawn, "Dispute 1 should be drawn."); - assertTrue(status2 == IDisputeManager.DisputeStatus.Drawn, "Dispute 2 should be drawn."); - } - - function test_RevertIf_CallerIsNotArbitrator_DrawDispute() public { - createProvisionAndAllocate(allocationID, 10000 ether); - bytes32 disputeID = createIndexingDispute(allocationID,bytes32("POI1"), 200 ether); - - // attempt to draw dispute as fisherman - vm.prank(fisherman); - vm.expectRevert(bytes4(keccak256("DisputeManagerNotArbitrator()"))); - disputeManager.drawDispute(disputeID); - } -} diff --git a/packages/subgraph-service/test/GraphBaseTest.t.sol b/packages/subgraph-service/test/GraphBaseTest.t.sol new file mode 100644 index 000000000..4bf253e94 --- /dev/null +++ b/packages/subgraph-service/test/GraphBaseTest.t.sol @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; +import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; + +import { SubgraphService } from "../contracts/SubgraphService.sol"; +import { DisputeManager } from "../contracts/DisputeManager.sol"; +import { Users } from "./utils/Users.sol"; +import { Constants } from "./utils/Constants.sol"; +import { Utils } from "./utils/Utils.sol"; + +import { MockGRTToken } from "./mocks/MockGRTToken.sol"; +import { MockHorizonStaking } from "./mocks/MockHorizonStaking.sol"; +import { MockRewardsManager } from "./mocks/MockRewardsManager.sol"; + +abstract contract GraphBaseTest is Utils, Constants { + + /* + * VARIABLES + */ + + /* Contracts */ + + Controller controller; + SubgraphService subgraphService; + DisputeManager disputeManager; + + MockGRTToken token; + MockHorizonStaking staking; + MockRewardsManager rewardsManager; + + /* Users */ + + Users internal users; + + /* + * SET UP + */ + + function setUp() public virtual { + token = new MockGRTToken(); + + // Setup Users + users = Users({ + governor: createUser("governor"), + deployer: createUser("deployer"), + indexer: createUser("indexer"), + operator: createUser("operator"), + gateway: createUser("gateway"), + verifier: createUser("verifier"), + delegator: createUser("delegator"), + arbitrator: createUser("arbitrator"), + fisherman: createUser("fisherman") + }); + + deployProtocolContracts(); + vm.stopPrank(); + } + + function deployProtocolContracts() private { + changePrank(users.deployer); + staking = new MockHorizonStaking(address(token)); + rewardsManager = new MockRewardsManager(); + + address tapVerifier = address(0xE3); + address curation = address(0xE4); + + changePrank(users.governor); + controller = new Controller(); + controller.setContractProxy(keccak256("GraphToken"), address(token)); + controller.setContractProxy(keccak256("Staking"), address(staking)); + controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); + controller.setContractProxy(keccak256("GraphPayments"), makeAddr("GraphPayments")); + controller.setContractProxy(keccak256("PaymentsEscrow"), makeAddr("PaymentsEscrow")); + controller.setContractProxy(keccak256("EpochManager"), makeAddr("EpochManager")); + controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); + controller.setContractProxy(keccak256("GraphProxyAdmin"), makeAddr("GraphProxyAdmin")); + controller.setContractProxy(keccak256("Curation"), makeAddr("Curation")); + + changePrank(users.deployer); + address disputeManagerImplementation = address(new DisputeManager(address(controller))); + address disputeManagerProxy = UnsafeUpgrades.deployTransparentProxy( + disputeManagerImplementation, + users.governor, + abi.encodeCall( + DisputeManager.initialize, + (users.arbitrator, disputePeriod, minimumDeposit, fishermanRewardPercentage, maxSlashingPercentage) + ) + ); + disputeManager = DisputeManager(disputeManagerProxy); + + address subgraphServiceImplementation = address( + new SubgraphService(address(controller), address(disputeManager), tapVerifier, curation) + ); + address subgraphServiceProxy = UnsafeUpgrades.deployTransparentProxy( + subgraphServiceImplementation, + users.governor, + abi.encodeCall(SubgraphService.initialize, (minimumProvisionTokens, delegationRatio)) + ); + subgraphService = SubgraphService(subgraphServiceProxy); + + disputeManager.setSubgraphService(address(subgraphService)); + } + + function createUser(string memory name) private returns (address) { + address user = makeAddr(name); + vm.deal({ account: user, newBalance: 100 ether }); + deal({ token: address(token), to: user, give: 10_000_000_000 ether }); + vm.label({ account: user, newLabel: name }); + return user; + } + + function mint(address _address, uint256 amount) internal { + deal({ token: address(token), to: _address, give: amount }); + } + + function burn(address _from, uint256 amount) internal { + token.burnFrom(_from, amount); + } +} \ No newline at end of file diff --git a/packages/subgraph-service/test/disputes/DisputeManager.t.sol b/packages/subgraph-service/test/disputes/DisputeManager.t.sol new file mode 100644 index 000000000..cf50ab122 --- /dev/null +++ b/packages/subgraph-service/test/disputes/DisputeManager.t.sol @@ -0,0 +1,128 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; +import { Attestation } from "../../contracts/libraries/Attestation.sol"; + +import { GraphBaseTest } from "../GraphBaseTest.t.sol"; + +contract DisputeManagerTest is GraphBaseTest { + using PPMMath for uint256; + + /* + * VARIABLES + */ + + uint256 allocationIDPrivateKey; + address allocationID; + + /* + * MODIFIERS + */ + + modifier useIndexer { + vm.startPrank(users.indexer); + _; + vm.stopPrank(); + } + + modifier useFisherman { + vm.startPrank(users.fisherman); + _; + vm.stopPrank(); + } + + modifier useProvision(uint256 tokens) { + vm.assume(tokens > minimumProvisionTokens); + vm.assume(tokens < 10_000_000_000 ether); + staking.provision(tokens, address(subgraphService), maxSlashingPercentage, disputePeriod); + bytes32 subgraphDeployment = keccak256(abi.encodePacked("Subgraph Deployment ID")); + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + + subgraphService.register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + subgraphService.startService(users.indexer, data); + _; + } + + /* + * SET UP + */ + + function setUp() public override { + super.setUp(); + (allocationID, allocationIDPrivateKey) = makeAddrAndKey("allocationId"); + } + + /* + * HELPERS + */ + + function _createIndexingDispute(address _allocationID, bytes32 _poi, uint256 tokens) internal returns (bytes32 disputeID) { + address msgSender; + (, msgSender,) = vm.readCallers(); + resetPrank(users.fisherman); + token.approve(address(disputeManager), tokens); + bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, _poi, tokens); + resetPrank(msgSender); + return _disputeID; + } + + function _createQueryDispute(uint256 tokens) internal returns (bytes32 disputeID) { + address msgSender; + (, msgSender,) = vm.readCallers(); + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = Attestation.Receipt({ + requestCID: keccak256(abi.encodePacked("Request CID")), + responseCID: keccak256(abi.encodePacked("Response CID")), + subgraphDeploymentId: keccak256(abi.encodePacked("Subgraph Deployment ID")) + }); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + + token.approve(address(disputeManager), tokens); + bytes32 _disputeID = disputeManager.createQueryDispute(attestationData, tokens); + resetPrank(msgSender); + return _disputeID; + } + + function _createConflictingAttestations( + bytes32 responseCID1, + bytes32 subgraphDeploymentId1, + bytes32 responseCID2, + bytes32 subgraphDeploymentId2 + ) internal view returns (bytes memory attestationData1, bytes memory attestationData2) { + bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); + Attestation.Receipt memory receipt1 = Attestation.Receipt({ + requestCID: requestCID, + responseCID: responseCID1, + subgraphDeploymentId: subgraphDeploymentId1 + }); + + Attestation.Receipt memory receipt2 = Attestation.Receipt({ + requestCID: requestCID, + responseCID: responseCID2, + subgraphDeploymentId: subgraphDeploymentId2 + }); + + bytes memory _attestationData1 = _createAtestationData(receipt1, allocationIDPrivateKey); + bytes memory _attestationData2 = _createAtestationData(receipt2, allocationIDPrivateKey); + return (_attestationData1, _attestationData2); + } + + function _createAtestationData( + Attestation.Receipt memory receipt, + uint256 signer + ) private view returns (bytes memory attestationData) { + bytes32 digest = disputeManager.encodeReceipt(receipt); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(signer, digest); + + return abi.encodePacked(receipt.requestCID, receipt.responseCID, receipt.subgraphDeploymentId, r, s, v); + } +} diff --git a/packages/subgraph-service/test/disputes/accept.t.sol b/packages/subgraph-service/test/disputes/accept.t.sol new file mode 100644 index 000000000..52b3f21ec --- /dev/null +++ b/packages/subgraph-service/test/disputes/accept.t.sol @@ -0,0 +1,126 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "./DisputeManager.t.sol"; + +contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { + using PPMMath for uint256; + + /* + * TESTS + */ + + function testAccept_IndexingDispute( + uint256 tokens, + uint256 tokensDispute, + uint256 tokensSlash + ) public useIndexer useProvision(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + + uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + + resetPrank(users.arbitrator); + disputeManager.acceptDispute(disputeID, tokensSlash); + + uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward; + assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance, "Fisherman should receive 50% of slashed tokens."); + } + + function testAccept_QueryDispute( + uint256 tokens, + uint256 tokensDispute, + uint256 tokensSlash + ) public useIndexer useProvision(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + + uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); + bytes32 disputeID = _createQueryDispute(tokensDispute); + + resetPrank(users.arbitrator); + disputeManager.acceptDispute(disputeID, tokensSlash); + + uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward; + assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance, "Fisherman should receive 50% of slashed tokens."); + } + + function testAccept_QueryDisputeConflicting( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useProvision(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); + + resetPrank(users.arbitrator); + disputeManager.acceptDispute(disputeID1, tokensSlash); + + uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward; + assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance, "Fisherman should receive 50% of slashed tokens."); + + (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); + (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); + assertTrue(status1 == IDisputeManager.DisputeStatus.Accepted, "Dispute 1 should be accepted."); + assertTrue(status2 == IDisputeManager.DisputeStatus.Rejected, "Dispute 2 should be rejected."); + } + + function testAccept_RevertIf_CallerIsNotArbitrator( + uint256 tokens, + uint256 tokensDispute, + uint256 tokensSlash + ) public useIndexer useProvision(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + + // attempt to accept dispute as fisherman + resetPrank(users.fisherman); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.acceptDispute(disputeID, tokensSlash); + } + + function testAccept_RevertWhen_SlashingOverMaxSlashPercentage( + uint256 tokens, + uint256 tokensDispute, + uint256 tokensSlash + ) public useIndexer useProvision(tokens) { + tokensSlash = bound(tokensSlash, uint256(maxSlashingPercentage).mulPPM(tokens) + 1, type(uint256).max); + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI101"), tokensDispute); + + // max slashing percentage is 50% + resetPrank(users.arbitrator); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidTokensSlash.selector, + tokensSlash + ); + vm.expectRevert(expectedError); + disputeManager.acceptDispute(disputeID, tokensSlash); + } +} diff --git a/packages/subgraph-service/test/disputes/cancel.t.sol b/packages/subgraph-service/test/disputes/cancel.t.sol new file mode 100644 index 000000000..db553a18b --- /dev/null +++ b/packages/subgraph-service/test/disputes/cancel.t.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "./DisputeManager.t.sol"; + +contract DisputeManagerCancelDisputeTest is DisputeManagerTest { + + /* + * TESTS + */ + + function testCancel_Dispute( + uint256 tokens, + uint256 tokensDispute + ) public useIndexer useProvision(tokens) { + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + + // skip to end of dispute period + skip(disputePeriod + 1); + + resetPrank(users.fisherman); + disputeManager.cancelDispute(disputeID); + + assertEq(token.balanceOf(users.fisherman), fishermanPreviousBalance, "Fisherman should receive their deposit back."); + } + + function testCancel_QueryDisputeConflicting( + uint256 tokens + ) public useIndexer useProvision(tokens) { + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); + + // skip to end of dispute period + skip(disputePeriod + 1); + + disputeManager.cancelDispute(disputeID1); + + (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); + (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); + assertTrue(status1 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 1 should be cancelled."); + assertTrue(status2 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 2 should be cancelled."); + } + + function testCancel_RevertIf_CallerIsNotFisherman( + uint256 tokens, + uint256 tokensDispute + ) public useIndexer useProvision(tokens) { + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + + resetPrank(users.arbitrator); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotFisherman.selector)); + disputeManager.cancelDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/disputes/create.t.sol b/packages/subgraph-service/test/disputes/create.t.sol new file mode 100644 index 000000000..058eee21c --- /dev/null +++ b/packages/subgraph-service/test/disputes/create.t.sol @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "./DisputeManager.t.sol"; + +contract DisputeManagerCreateDisputeTest is DisputeManagerTest { + + /* + * TESTS + */ + + function testCreate_IndexingDispute( + uint256 tokens, + uint256 tokensDispute + ) public useIndexer useProvision(tokens) { + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); + } + + function testCreate_QueryDispute( + uint256 tokens, + uint256 tokensDispute + ) public useIndexer useProvision(tokens) { + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + bytes32 disputeID = _createQueryDispute(tokensDispute); + assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); + } + + function testCreate_QueryDisputeConflict( + uint256 tokens + ) public useIndexer useProvision(tokens) { + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); + assertTrue(disputeManager.isDisputeCreated(disputeID1), "Dispute 1 should be created."); + assertTrue(disputeManager.isDisputeCreated(disputeID2), "Dispute 2 should be created."); + } + + function testCreate_RevertWhen_DisputeAlreadyCreated( + uint256 tokens, + uint256 tokensDispute + ) public useIndexer useProvision(tokens) { + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + + // Create another dispute with different fisherman + address otherFisherman = makeAddr("otherFisherman"); + resetPrank(otherFisherman); + mint(otherFisherman, tokensDispute); + token.approve(address(disputeManager), tokensDispute); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerDisputeAlreadyCreated.selector, + disputeID + ); + vm.expectRevert(expectedError); + disputeManager.createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + vm.stopPrank(); + } + + function testCreate_RevertIf_DepositUnderMinimum( + uint256 tokensDispute + ) public useFisherman { + tokensDispute = bound(tokensDispute, 1, minimumDeposit - 1); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInsufficientDeposit.selector, + tokensDispute, + minimumDeposit + ); + vm.expectRevert(expectedError); + disputeManager.createIndexingDispute(allocationID, bytes32("POI3"), tokensDispute); + vm.stopPrank(); + } + + function testCreate_RevertIf_AllocationDoesNotExist( + uint256 tokens + ) public useFisherman { + tokens = bound(tokens, minimumDeposit, 10_000_000_000 ether); + token.approve(address(disputeManager), tokens); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerIndexerNotFound.selector, + allocationID + ); + vm.expectRevert(expectedError); + disputeManager.createIndexingDispute(allocationID, bytes32("POI4"), tokens); + vm.stopPrank(); + } + + function testCreate_RevertIf_ConflictingAttestationsResponsesAreTheSame() public useFisherman { + bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 responseCID = keccak256(abi.encodePacked("Response CID")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + responseCID, + subgraphDeploymentId, + responseCID, + subgraphDeploymentId + ); + + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerNonConflictingAttestations.selector, + requestCID, + responseCID, + subgraphDeploymentId, + requestCID, + responseCID, + subgraphDeploymentId + ); + vm.expectRevert(expectedError); + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + } + + function testCreate_RevertIf_ConflictingAttestationsHaveDifferentSubgraph() public { + bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId1 = keccak256(abi.encodePacked("Subgraph Deployment ID 1")); + bytes32 subgraphDeploymentId2 = keccak256(abi.encodePacked("Subgraph Deployment ID 2")); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + responseCID1, + subgraphDeploymentId1, + responseCID2, + subgraphDeploymentId2 + ); + + vm.prank(users.fisherman); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerNonConflictingAttestations.selector, + requestCID, + responseCID1, + subgraphDeploymentId1, + requestCID, + responseCID2, + subgraphDeploymentId2 + ); + vm.expectRevert(expectedError); + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + } +} diff --git a/packages/subgraph-service/test/disputes/draw.t.sol b/packages/subgraph-service/test/disputes/draw.t.sol new file mode 100644 index 000000000..0139bf929 --- /dev/null +++ b/packages/subgraph-service/test/disputes/draw.t.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "./DisputeManager.t.sol"; + +contract DisputeManagerDrawDisputeTest is DisputeManagerTest { + + /* + * TESTS + */ + + function testDraw_Dispute( + uint256 tokens, + uint256 tokensDispute + ) public useIndexer useProvision(tokens) { + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI32"), tokensDispute); + + resetPrank(users.arbitrator); + disputeManager.drawDispute(disputeID); + + assertEq(token.balanceOf(users.fisherman), fishermanPreviousBalance, "Fisherman should receive their deposit back."); + } + + function testDraw_QueryDisputeConflicting( + uint256 tokens + ) public useIndexer useProvision(tokens) { + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); + + resetPrank(users.arbitrator); + disputeManager.drawDispute(disputeID1); + + (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); + (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); + assertTrue(status1 == IDisputeManager.DisputeStatus.Drawn, "Dispute 1 should be drawn."); + assertTrue(status2 == IDisputeManager.DisputeStatus.Drawn, "Dispute 2 should be drawn."); + } + + function testDraw_RevertIf_CallerIsNotArbitrator( + uint256 tokens, + uint256 tokensDispute + ) public useIndexer useProvision(tokens) { + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + bytes32 disputeID =_createIndexingDispute(allocationID,bytes32("POI1"), tokens); + + // attempt to draw dispute as fisherman + resetPrank(users.fisherman); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.drawDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol index d5f1d48d0..6c365b89c 100644 --- a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol +++ b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol @@ -83,7 +83,7 @@ contract MockHorizonStaking { // provisioned tokens that are not being used // `Provision.tokens - Provision.tokensThawing` - function getTokensAvailable(address serviceProvider, address verifier, uint32 delegationRatio) external view returns (uint256 tokens) { + function getTokensAvailable(address serviceProvider, address verifier, uint32) external view returns (uint256 tokens) { return _provisions[verifier][serviceProvider].tokens; } @@ -97,7 +97,7 @@ contract MockHorizonStaking { return true; } - function getDelegationPool(address serviceProvider, address verifier) external view returns (IHorizonStakingTypes.DelegationPool memory) { + function getDelegationPool(address, address) external pure returns (IHorizonStakingTypes.DelegationPool memory) { return IHorizonStakingTypes.DelegationPool({ tokens: 0, shares: 0, diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol new file mode 100644 index 000000000..b5af24f0b --- /dev/null +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +abstract contract Constants { + // Dispute Manager + uint64 internal constant disputePeriod = 300; // 5 minutes + uint256 internal constant minimumDeposit = 100 ether; // 100 GRT + uint32 internal constant fishermanRewardPercentage = 100000; // 10% + uint32 internal constant maxSlashingPercentage = 500000; // 50% + // Subgraph Service + uint256 internal constant minimumProvisionTokens = 1000 ether; + uint32 internal constant delegationRatio = 16; +} \ No newline at end of file diff --git a/packages/subgraph-service/test/utils/Users.sol b/packages/subgraph-service/test/utils/Users.sol new file mode 100644 index 000000000..91efa8f7a --- /dev/null +++ b/packages/subgraph-service/test/utils/Users.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +struct Users { + address governor; + address deployer; + address indexer; + address operator; + address gateway; + address verifier; + address delegator; + address arbitrator; + address fisherman; +} \ No newline at end of file diff --git a/packages/subgraph-service/test/utils/Utils.sol b/packages/subgraph-service/test/utils/Utils.sol new file mode 100644 index 000000000..47e4e68df --- /dev/null +++ b/packages/subgraph-service/test/utils/Utils.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +abstract contract Utils is Test { + /// @dev Stops the active prank and sets a new one. + function resetPrank(address msgSender) internal { + vm.stopPrank(); + vm.startPrank(msgSender); + } +} \ No newline at end of file From 29dedff11bf53824ca244f42ff7960d9fe6e4da4 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 19 Jun 2024 10:12:32 -0300 Subject: [PATCH 133/343] chore: add register tests --- ...hBaseTest.t.sol => SubgraphBaseTest.t.sol} | 11 ++-- .../test/disputes/DisputeManager.t.sol | 41 +------------ .../test/shared/SubgraphServiceShared.t.sol | 58 +++++++++++++++++++ .../subgraphService/SubgraphService.t.sol | 30 ++++++++++ .../test/subgraphService/register.t.sol | 53 +++++++++++++++++ .../subgraph-service/test/utils/Users.sol | 1 + 6 files changed, 150 insertions(+), 44 deletions(-) rename packages/subgraph-service/test/{GraphBaseTest.t.sol => SubgraphBaseTest.t.sol} (94%) create mode 100644 packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol create mode 100644 packages/subgraph-service/test/subgraphService/SubgraphService.t.sol create mode 100644 packages/subgraph-service/test/subgraphService/register.t.sol diff --git a/packages/subgraph-service/test/GraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol similarity index 94% rename from packages/subgraph-service/test/GraphBaseTest.t.sol rename to packages/subgraph-service/test/SubgraphBaseTest.t.sol index 4bf253e94..ba4d36287 100644 --- a/packages/subgraph-service/test/GraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -16,7 +16,7 @@ import { MockGRTToken } from "./mocks/MockGRTToken.sol"; import { MockHorizonStaking } from "./mocks/MockHorizonStaking.sol"; import { MockRewardsManager } from "./mocks/MockRewardsManager.sol"; -abstract contract GraphBaseTest is Utils, Constants { +abstract contract SubgraphBaseTest is Utils, Constants { /* * VARIABLES @@ -53,7 +53,8 @@ abstract contract GraphBaseTest is Utils, Constants { verifier: createUser("verifier"), delegator: createUser("delegator"), arbitrator: createUser("arbitrator"), - fisherman: createUser("fisherman") + fisherman: createUser("fisherman"), + rewardsDestination: createUser("rewardsDestination") }); deployProtocolContracts(); @@ -61,14 +62,14 @@ abstract contract GraphBaseTest is Utils, Constants { } function deployProtocolContracts() private { - changePrank(users.deployer); + resetPrank(users.deployer); staking = new MockHorizonStaking(address(token)); rewardsManager = new MockRewardsManager(); address tapVerifier = address(0xE3); address curation = address(0xE4); - changePrank(users.governor); + resetPrank(users.governor); controller = new Controller(); controller.setContractProxy(keccak256("GraphToken"), address(token)); controller.setContractProxy(keccak256("Staking"), address(staking)); @@ -80,7 +81,7 @@ abstract contract GraphBaseTest is Utils, Constants { controller.setContractProxy(keccak256("GraphProxyAdmin"), makeAddr("GraphProxyAdmin")); controller.setContractProxy(keccak256("Curation"), makeAddr("Curation")); - changePrank(users.deployer); + resetPrank(users.deployer); address disputeManagerImplementation = address(new DisputeManager(address(controller))); address disputeManagerProxy = UnsafeUpgrades.deployTransparentProxy( disputeManagerImplementation, diff --git a/packages/subgraph-service/test/disputes/DisputeManager.t.sol b/packages/subgraph-service/test/disputes/DisputeManager.t.sol index cf50ab122..8b6f95b12 100644 --- a/packages/subgraph-service/test/disputes/DisputeManager.t.sol +++ b/packages/subgraph-service/test/disputes/DisputeManager.t.sol @@ -9,58 +9,21 @@ import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol" import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; import { Attestation } from "../../contracts/libraries/Attestation.sol"; -import { GraphBaseTest } from "../GraphBaseTest.t.sol"; +import { SubgraphServiceSharedTest } from "../shared/SubgraphServiceShared.t.sol"; -contract DisputeManagerTest is GraphBaseTest { +contract DisputeManagerTest is SubgraphServiceSharedTest { using PPMMath for uint256; - /* - * VARIABLES - */ - - uint256 allocationIDPrivateKey; - address allocationID; - /* * MODIFIERS */ - modifier useIndexer { - vm.startPrank(users.indexer); - _; - vm.stopPrank(); - } - modifier useFisherman { vm.startPrank(users.fisherman); _; vm.stopPrank(); } - modifier useProvision(uint256 tokens) { - vm.assume(tokens > minimumProvisionTokens); - vm.assume(tokens < 10_000_000_000 ether); - staking.provision(tokens, address(subgraphService), maxSlashingPercentage, disputePeriod); - bytes32 subgraphDeployment = keccak256(abi.encodePacked("Subgraph Deployment ID")); - bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); - - subgraphService.register(users.indexer, abi.encode("url", "geoHash", address(0))); - - bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); - subgraphService.startService(users.indexer, data); - _; - } - - /* - * SET UP - */ - - function setUp() public override { - super.setUp(); - (allocationID, allocationIDPrivateKey) = makeAddrAndKey("allocationId"); - } - /* * HELPERS */ diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol new file mode 100644 index 000000000..228c7d5d3 --- /dev/null +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { SubgraphBaseTest } from "../SubgraphBaseTest.t.sol"; + +abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { + + /* + * VARIABLES + */ + + uint256 allocationIDPrivateKey; + address allocationID; + + /* + * MODIFIERS + */ + + modifier useIndexer { + vm.startPrank(users.indexer); + _; + vm.stopPrank(); + } + + modifier useProvision(uint256 tokens) { + vm.assume(tokens > minimumProvisionTokens); + vm.assume(tokens < 10_000_000_000 ether); + _createProvision(tokens); + bytes32 subgraphDeployment = keccak256(abi.encodePacked("Subgraph Deployment ID")); + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + + subgraphService.register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + subgraphService.startService(users.indexer, data); + _; + } + + /* + * SET UP + */ + + function setUp() public virtual override { + super.setUp(); + (allocationID, allocationIDPrivateKey) = makeAddrAndKey("allocationId"); + } + + /* + * HELPERS + */ + + function _createProvision(uint256 tokens) internal { + staking.provision(tokens, address(subgraphService), maxSlashingPercentage, disputePeriod); + } +} diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol new file mode 100644 index 000000000..f25cfe2b3 --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { SubgraphServiceSharedTest } from "../shared/SubgraphServiceShared.t.sol"; + +contract SubgraphServiceTest is SubgraphServiceSharedTest { + + /* + * VARIABLES + */ + + /* + * MODIFIERS + */ + + /* + * SET UP + */ + + function setUp() public override { + super.setUp(); + } + + /* + * HELPERS + */ + +} diff --git a/packages/subgraph-service/test/subgraphService/register.t.sol b/packages/subgraph-service/test/subgraphService/register.t.sol new file mode 100644 index 000000000..5c7c5881e --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/register.t.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { ISubgraphService } from "../../contracts/interfaces/ISubgraphService.sol"; +import { SubgraphServiceTest } from "./SubgraphService.t.sol"; + +contract SubgraphServiceRegisterTest is SubgraphServiceTest { + + /* + * TESTS + */ + + function testRegister_Indexer(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, 10_000_000_000 ether); + _createProvision(tokens); + bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); + vm.expectEmit(address(subgraphService)); + emit IDataService.ServiceProviderRegistered( + users.indexer, + data + ); + subgraphService.register(users.indexer, data); + + uint256 registeredAt; + string memory url; + string memory geoHash; + (registeredAt, url, geoHash) = subgraphService.indexers(users.indexer); + assertEq(registeredAt, block.timestamp); + assertEq(url, "url"); + assertEq(geoHash, "geoHash"); + } + + function testRegister_RevertIf_AlreadyRegistered( + uint256 tokens + ) public useIndexer useProvision(tokens) { + bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); + vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerAlreadyRegistered.selector)); + subgraphService.register(users.indexer, data); + } + + function testRegister_RevertWhen_InvalidProvision() public useIndexer { + bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerProvisionNotFound.selector, + users.indexer + )); + subgraphService.register(users.indexer, data); + } +} diff --git a/packages/subgraph-service/test/utils/Users.sol b/packages/subgraph-service/test/utils/Users.sol index 91efa8f7a..b2976f98a 100644 --- a/packages/subgraph-service/test/utils/Users.sol +++ b/packages/subgraph-service/test/utils/Users.sol @@ -11,4 +11,5 @@ struct Users { address delegator; address arbitrator; address fisherman; + address rewardsDestination; } \ No newline at end of file From f76fc3fc398d73feee652607485faee9b9030c78 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 19 Jun 2024 12:52:17 -0300 Subject: [PATCH 134/343] chore: use HorizonStaking instead of mock implementation --- .../test/SubgraphBaseTest.t.sol | 48 +++++++- .../test/mocks/MockHorizonStaking.sol | 111 ------------------ .../test/shared/SubgraphServiceShared.t.sol | 4 +- .../subgraph-service/test/utils/Constants.sol | 2 + 4 files changed, 48 insertions(+), 117 deletions(-) delete mode 100644 packages/subgraph-service/test/mocks/MockHorizonStaking.sol diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index ba4d36287..1da4c8a1f 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -4,6 +4,11 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; +import { GraphProxy } from "@graphprotocol/contracts/contracts/upgrades/GraphProxy.sol"; +import { GraphProxyAdmin } from "@graphprotocol/contracts/contracts/upgrades/GraphProxyAdmin.sol"; +import { HorizonStaking } from "@graphprotocol/horizon/contracts/staking/HorizonStaking.sol"; +import { HorizonStakingExtension } from "@graphprotocol/horizon/contracts/staking/HorizonStakingExtension.sol"; +import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; import { SubgraphService } from "../contracts/SubgraphService.sol"; @@ -13,7 +18,6 @@ import { Constants } from "./utils/Constants.sol"; import { Utils } from "./utils/Utils.sol"; import { MockGRTToken } from "./mocks/MockGRTToken.sol"; -import { MockHorizonStaking } from "./mocks/MockHorizonStaking.sol"; import { MockRewardsManager } from "./mocks/MockRewardsManager.sol"; abstract contract SubgraphBaseTest is Utils, Constants { @@ -24,12 +28,16 @@ abstract contract SubgraphBaseTest is Utils, Constants { /* Contracts */ + GraphProxyAdmin public proxyAdmin; Controller controller; SubgraphService subgraphService; DisputeManager disputeManager; + IHorizonStaking staking; + + HorizonStaking private stakingBase; + HorizonStakingExtension private stakingExtension; MockGRTToken token; - MockHorizonStaking staking; MockRewardsManager rewardsManager; /* Users */ @@ -58,21 +66,26 @@ abstract contract SubgraphBaseTest is Utils, Constants { }); deployProtocolContracts(); + setupProtocol(); + unpauseProtocol(); vm.stopPrank(); } function deployProtocolContracts() private { + resetPrank(users.governor); + proxyAdmin = new GraphProxyAdmin(); + controller = new Controller(); + resetPrank(users.deployer); - staking = new MockHorizonStaking(address(token)); + GraphProxy stakingProxy = new GraphProxy(address(0), address(proxyAdmin)); rewardsManager = new MockRewardsManager(); address tapVerifier = address(0xE3); address curation = address(0xE4); resetPrank(users.governor); - controller = new Controller(); controller.setContractProxy(keccak256("GraphToken"), address(token)); - controller.setContractProxy(keccak256("Staking"), address(staking)); + controller.setContractProxy(keccak256("Staking"), address(stakingProxy)); controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); controller.setContractProxy(keccak256("GraphPayments"), makeAddr("GraphPayments")); controller.setContractProxy(keccak256("PaymentsEscrow"), makeAddr("PaymentsEscrow")); @@ -104,6 +117,31 @@ abstract contract SubgraphBaseTest is Utils, Constants { subgraphService = SubgraphService(subgraphServiceProxy); disputeManager.setSubgraphService(address(subgraphService)); + + stakingExtension = new HorizonStakingExtension( + address(controller), + address(subgraphService) + ); + stakingBase = new HorizonStaking( + address(controller), + address(stakingExtension), + address(subgraphService) + ); + + resetPrank(users.governor); + proxyAdmin.upgrade(stakingProxy, address(stakingBase)); + proxyAdmin.acceptProxy(stakingBase, stakingProxy); + staking = IHorizonStaking(address(stakingProxy)); + } + + function setupProtocol() private { + resetPrank(users.governor); + staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); + } + + function unpauseProtocol() private { + resetPrank(users.governor); + controller.setPaused(false); } function createUser(string memory name) private returns (address) { diff --git a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol b/packages/subgraph-service/test/mocks/MockHorizonStaking.sol deleted file mode 100644 index 6c365b89c..000000000 --- a/packages/subgraph-service/test/mocks/MockHorizonStaking.sol +++ /dev/null @@ -1,111 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; -import { IHorizonStakingTypes } from "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol"; -import { MockGRTToken } from "./MockGRTToken.sol"; - -contract MockHorizonStaking { - mapping (address verifier => mapping (address serviceProvider => IHorizonStaking.Provision provision)) public _provisions; - MockGRTToken public grtToken; - - constructor(address _grtTokenAddress) { - grtToken = MockGRTToken(_grtTokenAddress); - } - - // whitelist/deny a verifier - function allowVerifier(address verifier, bool allow) external {} - - // deposit stake - function stake(uint256 tokens) external {} - - // create a provision - function provision(uint256 tokens, address verifier, uint32 maxVerifierCut, uint64 thawingPeriod) external { - IHorizonStaking.Provision memory newProvision = IHorizonStakingTypes.Provision({ - tokens: tokens, - tokensThawing: 0, - sharesThawing: 0, - maxVerifierCut: maxVerifierCut, - thawingPeriod: thawingPeriod, - createdAt: uint64(block.timestamp), - maxVerifierCutPending: maxVerifierCut, - thawingPeriodPending: thawingPeriod - }); - _provisions[verifier][msg.sender] = newProvision; - } - - function acceptProvision(address serviceProvider) external {} - - // initiate a thawing to remove tokens from a provision - function thaw(bytes32 provisionId, uint256 tokens) external returns (bytes32 thawRequestId) {} - - // moves thawed stake from a provision back into the provider's available stake - function deprovision(bytes32 thawRequestId) external {} - - // moves thawed stake from one provision into another provision - function reprovision(bytes32 thawRequestId, bytes32 provisionId) external {} - - // moves thawed stake back to the owner's account - stake is removed from the protocol - function withdraw(bytes32 thawRequestId) external {} - - // delegate tokens to a provider - function delegate(address serviceProvider, uint256 tokens) external {} - - // undelegate tokens - function undelegate( - address serviceProvider, - uint256 tokens, - bytes32[] calldata provisions - ) external returns (bytes32 thawRequestId) {} - - // slash a service provider - function slash(address serviceProvider, uint256 tokens, uint256 reward, address rewardsDestination) external { - grtToken.mint(rewardsDestination, reward); - grtToken.burnFrom(serviceProvider, tokens); - } - - // set the Service Provider's preferred provisions to be force thawed - function setForceThawProvisions(bytes32[] calldata provisions) external {} - - // total staked tokens to the provider - // `ServiceProvider.tokensStaked + DelegationPool.serviceProvider.tokens` - function getStake(address serviceProvider) external view returns (uint256 tokens) {} - - // staked tokens that are currently not provisioned, aka idle stake - // `getStake(serviceProvider) - ServiceProvider.tokensProvisioned` - function getIdleStake(address serviceProvider) external view returns (uint256 tokens) {} - - // staked tokens the provider can provision before hitting the delegation cap - // `ServiceProvider.tokensStaked * Staking.delegationRatio - Provision.tokensProvisioned` - function getCapacity(address serviceProvider) external view returns (uint256 tokens) {} - - // provisioned tokens that are not being used - // `Provision.tokens - Provision.tokensThawing` - function getTokensAvailable(address serviceProvider, address verifier, uint32) external view returns (uint256 tokens) { - return _provisions[verifier][serviceProvider].tokens; - } - - function getServiceProvider(address serviceProvider) external view returns (IHorizonStaking.ServiceProvider memory) {} - - function getProvision(address serviceProvider, address verifier) external view returns (IHorizonStaking.Provision memory) { - return _provisions[verifier][serviceProvider]; - } - - function isAuthorized(address, address, address) external pure returns (bool) { - return true; - } - - function getDelegationPool(address, address) external pure returns (IHorizonStakingTypes.DelegationPool memory) { - return IHorizonStakingTypes.DelegationPool({ - tokens: 0, - shares: 0, - tokensThawing: 0, - sharesThawing: 0 - }); - } - function getDelegationCut(address serviceProvider, uint8 paymentType) external view returns (uint256 delegationCut) {} - function addToDelegationPool(address serviceProvider, uint256 tokens) external {} - function stakeToProvision(address _serviceProvider, address _verifier, uint256 _tokens) external {} -} \ No newline at end of file diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol index 228c7d5d3..07aed08f1 100644 --- a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -53,6 +53,8 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { */ function _createProvision(uint256 tokens) internal { - staking.provision(tokens, address(subgraphService), maxSlashingPercentage, disputePeriod); + token.approve(address(staking), tokens); + staking.stakeTo(users.indexer, tokens); + staking.provision(users.indexer, address(subgraphService), tokens, maxSlashingPercentage, disputePeriod); } } diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index b5af24f0b..b43a2adac 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -10,4 +10,6 @@ abstract contract Constants { // Subgraph Service uint256 internal constant minimumProvisionTokens = 1000 ether; uint32 internal constant delegationRatio = 16; + // Staking + uint64 internal constant MAX_THAWING_PERIOD = 28 days; } \ No newline at end of file From d44864112ea75db11cbc363f6c86e54d778a913a Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 20 Jun 2024 14:33:36 -0300 Subject: [PATCH 135/343] chore: add more subgraph service tests --- .../test/shared/SubgraphServiceShared.t.sol | 24 +++++--- .../subgraphService/SubgraphService.t.sol | 6 ++ .../test/subgraphService/allocate/start.t.sol | 61 +++++++++++++++++++ .../{ => provider}/register.t.sol | 36 ++++++++--- .../subgraphService/provision/accept.t.sol | 40 ++++++++++++ .../subgraph-service/test/utils/Constants.sol | 2 + 6 files changed, 154 insertions(+), 15 deletions(-) create mode 100644 packages/subgraph-service/test/subgraphService/allocate/start.t.sol rename packages/subgraph-service/test/subgraphService/{ => provider}/register.t.sol (58%) create mode 100644 packages/subgraph-service/test/subgraphService/provision/accept.t.sol diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol index 07aed08f1..537df824e 100644 --- a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -13,6 +13,7 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { uint256 allocationIDPrivateKey; address allocationID; + bytes32 subgraphDeployment; /* * MODIFIERS @@ -28,14 +29,8 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { vm.assume(tokens > minimumProvisionTokens); vm.assume(tokens < 10_000_000_000 ether); _createProvision(tokens); - bytes32 subgraphDeployment = keccak256(abi.encodePacked("Subgraph Deployment ID")); - bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); - - subgraphService.register(users.indexer, abi.encode("url", "geoHash", address(0))); - - bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); - subgraphService.startService(users.indexer, data); + _registerIndexer(address(0)); + _startService(tokens); _; } @@ -46,6 +41,7 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { function setUp() public virtual override { super.setUp(); (allocationID, allocationIDPrivateKey) = makeAddrAndKey("allocationId"); + subgraphDeployment = keccak256(abi.encodePacked("Subgraph Deployment ID")); } /* @@ -57,4 +53,16 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { staking.stakeTo(users.indexer, tokens); staking.provision(users.indexer, address(subgraphService), tokens, maxSlashingPercentage, disputePeriod); } + + function _registerIndexer(address rewardsDestination) internal { + subgraphService.register(users.indexer, abi.encode("url", "geoHash", rewardsDestination)); + } + + function _startService(uint256 tokens) internal { + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + + bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + subgraphService.startService(users.indexer, data); + } } diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index f25cfe2b3..fb379737c 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -15,6 +15,12 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { * MODIFIERS */ + modifier useOperator { + vm.startPrank(users.operator); + _; + vm.stopPrank(); + } + /* * SET UP */ diff --git a/packages/subgraph-service/test/subgraphService/allocate/start.t.sol b/packages/subgraph-service/test/subgraphService/allocate/start.t.sol new file mode 100644 index 000000000..87d33ac22 --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/allocate/start.t.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { Allocation } from "../../../contracts/libraries/Allocation.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; + +contract SubgraphServiceAllocateStartTest is SubgraphServiceTest { + + /* + * TESTS + */ + + function testStart_Allocation(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(tokens); + _registerIndexer(address(0)); + + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + + bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + vm.expectEmit(address(subgraphService)); + emit IDataService.ServiceStarted(users.indexer, data); + subgraphService.startService(users.indexer, data); + + Allocation.State memory allocation = subgraphService.getAllocation(allocationID); + assertEq(allocation.tokens, tokens); + assertEq(allocation.indexer, users.indexer); + assertEq(allocation.subgraphDeploymentId, subgraphDeployment); + assertEq(allocation.createdAt, block.timestamp); + assertEq(allocation.closedAt, 0); + assertEq(allocation.lastPOIPresentedAt, 0); + assertEq(allocation.accRewardsPerAllocatedToken, 0); + assertEq(allocation.accRewardsPending, 0); + } + + function testStart_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(tokens); + _registerIndexer(address(0)); + + resetPrank(users.operator); + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + + bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerNotAuthorized.selector, + users.operator, + users.indexer + )); + subgraphService.startService(users.indexer, data); + } +} diff --git a/packages/subgraph-service/test/subgraphService/register.t.sol b/packages/subgraph-service/test/subgraphService/provider/register.t.sol similarity index 58% rename from packages/subgraph-service/test/subgraphService/register.t.sol rename to packages/subgraph-service/test/subgraphService/provider/register.t.sol index 5c7c5881e..842c467bd 100644 --- a/packages/subgraph-service/test/subgraphService/register.t.sol +++ b/packages/subgraph-service/test/subgraphService/provider/register.t.sol @@ -5,8 +5,8 @@ import "forge-std/Test.sol"; import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; -import { ISubgraphService } from "../../contracts/interfaces/ISubgraphService.sol"; -import { SubgraphServiceTest } from "./SubgraphService.t.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; contract SubgraphServiceRegisterTest is SubgraphServiceTest { @@ -15,7 +15,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { */ function testRegister_Indexer(uint256 tokens) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens, 10_000_000_000 ether); + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); _createProvision(tokens); bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); vm.expectEmit(address(subgraphService)); @@ -37,17 +37,39 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { function testRegister_RevertIf_AlreadyRegistered( uint256 tokens ) public useIndexer useProvision(tokens) { - bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerAlreadyRegistered.selector)); - subgraphService.register(users.indexer, data); + _registerIndexer(users.rewardsDestination); } function testRegister_RevertWhen_InvalidProvision() public useIndexer { - bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); vm.expectRevert(abi.encodeWithSelector( ProvisionManager.ProvisionManagerProvisionNotFound.selector, users.indexer )); - subgraphService.register(users.indexer, data); + _registerIndexer(users.rewardsDestination); + } + + function testRegister_RevertWhen_NotAuthorized() public { + resetPrank(users.operator); + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerNotAuthorized.selector, + users.operator, + users.indexer + )); + _registerIndexer(users.rewardsDestination); + } + + function testRegister_RevertWhen_InvalidProvisionValues(uint256 tokens) public useIndexer { + tokens = bound(tokens, 1, minimumProvisionTokens - 1); + _createProvision(tokens); + + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerInvalidValue.selector, + "tokens", + tokens, + minimumProvisionTokens, + maximumProvisionTokens + )); + _registerIndexer(address(0)); } } diff --git a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol new file mode 100644 index 000000000..dd6d73587 --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; + +contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { + + /* + * TESTS + */ + + function testAccept_Provision(uint256 tokens) public useIndexer useProvision(tokens) { + vm.expectEmit(address(subgraphService)); + emit IDataService.ProvisionAccepted(users.indexer); + subgraphService.acceptProvision(users.indexer, ""); + } + + function testAccept_RevertWhen_NotRegistered() public useIndexer { + vm.expectRevert(abi.encodeWithSelector( + ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, + users.indexer + )); + subgraphService.acceptProvision(users.indexer, ""); + } + + function testAccept_RevertWhen_NotAuthorized() public { + resetPrank(users.operator); + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerNotAuthorized.selector, + users.operator, + users.indexer + )); + subgraphService.acceptProvision(users.indexer, ""); + } +} diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index b43a2adac..26e73083b 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.26; abstract contract Constants { + uint256 internal constant MAX_TOKENS = 10_000_000_000 ether; // Dispute Manager uint64 internal constant disputePeriod = 300; // 5 minutes uint256 internal constant minimumDeposit = 100 ether; // 100 GRT @@ -9,6 +10,7 @@ abstract contract Constants { uint32 internal constant maxSlashingPercentage = 500000; // 50% // Subgraph Service uint256 internal constant minimumProvisionTokens = 1000 ether; + uint256 internal constant maximumProvisionTokens = type(uint256).max; uint32 internal constant delegationRatio = 16; // Staking uint64 internal constant MAX_THAWING_PERIOD = 28 days; From 826181c994f5e679ea22cc79aa6fb3eaf7b37cc1 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 20 Jun 2024 18:57:55 -0300 Subject: [PATCH 136/343] chore: start allocation tests --- .../test/subgraphService/allocate/start.t.sol | 78 +++++++++++++++++-- 1 file changed, 70 insertions(+), 8 deletions(-) diff --git a/packages/subgraph-service/test/subgraphService/allocate/start.t.sol b/packages/subgraph-service/test/subgraphService/allocate/start.t.sol index 87d33ac22..0ecdb059c 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/start.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/start.t.sol @@ -7,10 +7,21 @@ import { IDataService } from "@graphprotocol/horizon/contracts/data-service/inte import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; import { Allocation } from "../../../contracts/libraries/Allocation.sol"; +import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; contract SubgraphServiceAllocateStartTest is SubgraphServiceTest { + /* + * Helpers + */ + + function _generateData(uint256 tokens) private view returns(bytes memory) { + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + return abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + } + /* * TESTS */ @@ -21,10 +32,7 @@ contract SubgraphServiceAllocateStartTest is SubgraphServiceTest { _createProvision(tokens); _registerIndexer(address(0)); - bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); - - bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + bytes memory data = _generateData(tokens); vm.expectEmit(address(subgraphService)); emit IDataService.ServiceStarted(users.indexer, data); subgraphService.startService(users.indexer, data); @@ -47,10 +55,7 @@ contract SubgraphServiceAllocateStartTest is SubgraphServiceTest { _registerIndexer(address(0)); resetPrank(users.operator); - bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); - - bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + bytes memory data = _generateData(tokens); vm.expectRevert(abi.encodeWithSelector( ProvisionManager.ProvisionManagerNotAuthorized.selector, users.operator, @@ -58,4 +63,61 @@ contract SubgraphServiceAllocateStartTest is SubgraphServiceTest { )); subgraphService.startService(users.indexer, data); } + + function testStart_RevertWhen_NoValidProvision(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + bytes memory data = _generateData(tokens); + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerProvisionNotFound.selector, + users.indexer + )); + subgraphService.startService(users.indexer, data); + } + + function testStart_RevertWhen_NotRegistered(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(tokens); + + bytes memory data = _generateData(tokens); + vm.expectRevert(abi.encodeWithSelector( + ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, + users.indexer + )); + subgraphService.startService(users.indexer, data); + } + + function testStart_RevertWhen_ZeroAllocationId(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(tokens); + _registerIndexer(address(0)); + + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, address(0)); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + bytes memory data = abi.encode(subgraphDeployment, tokens, address(0), abi.encodePacked(r, s, v)); + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerInvalidZeroAllocationId.selector + )); + subgraphService.startService(users.indexer, data); + } + + function testStart_RevertWhen_InvalidSignature(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(tokens); + _registerIndexer(address(0)); + + (address signer, uint256 signerPrivateKey) = makeAddrAndKey("invalidSigner"); + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, digest); + bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerInvalidAllocationProof.selector, + signer, + allocationID + )); + subgraphService.startService(users.indexer, data); + } } From 215758a8c1b8fb42d153b992d8663129e86a09df Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 21 Jun 2024 12:33:56 -0300 Subject: [PATCH 137/343] chore: stop allocation tests started --- .../contracts/utilities/AllocationManager.sol | 6 +-- .../test/disputes/accept.t.sol | 10 ++--- .../test/disputes/cancel.t.sol | 6 +-- .../test/disputes/create.t.sol | 8 ++-- .../subgraph-service/test/disputes/draw.t.sol | 6 +-- .../test/shared/SubgraphServiceShared.t.sol | 2 +- .../test/subgraphService/allocate/start.t.sol | 45 ++++++++++++++++++- .../test/subgraphService/allocate/stop.t.sol | 33 ++++++++++++++ .../subgraphService/provider/register.t.sol | 2 +- .../subgraphService/provision/accept.t.sol | 2 +- 10 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 packages/subgraph-service/test/subgraphService/allocate/stop.t.sol diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 8d14da240..394ac3e57 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -384,15 +384,15 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca function _closeAllocation(address _allocationId) internal returns (Allocation.State memory) { Allocation.State memory allocation = allocations.get(_allocationId); - allocations.close(_allocationId); - allocationProvisionTracker.release(allocation.indexer, allocation.tokens); - // Take rewards snapshot to prevent other allos from counting tokens from this allo allocations.snapshotRewards( _allocationId, _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId) ); + allocations.close(_allocationId); + allocationProvisionTracker.release(allocation.indexer, allocation.tokens); + // Update total allocated tokens for the subgraph deployment subgraphAllocatedTokens[allocation.subgraphDeploymentId] = subgraphAllocatedTokens[allocation.subgraphDeploymentId] - diff --git a/packages/subgraph-service/test/disputes/accept.t.sol b/packages/subgraph-service/test/disputes/accept.t.sol index 52b3f21ec..6292e65a4 100644 --- a/packages/subgraph-service/test/disputes/accept.t.sol +++ b/packages/subgraph-service/test/disputes/accept.t.sol @@ -18,7 +18,7 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { uint256 tokens, uint256 tokensDispute, uint256 tokensSlash - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); tokensDispute = bound(tokensDispute, minimumDeposit, tokens); @@ -37,7 +37,7 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { uint256 tokens, uint256 tokensDispute, uint256 tokensSlash - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); tokensDispute = bound(tokensDispute, minimumDeposit, tokens); @@ -55,7 +55,7 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { function testAccept_QueryDisputeConflicting( uint256 tokens, uint256 tokensSlash - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); @@ -93,7 +93,7 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { uint256 tokens, uint256 tokensDispute, uint256 tokensSlash - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); tokensDispute = bound(tokensDispute, minimumDeposit, tokens); @@ -109,7 +109,7 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { uint256 tokens, uint256 tokensDispute, uint256 tokensSlash - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensSlash = bound(tokensSlash, uint256(maxSlashingPercentage).mulPPM(tokens) + 1, type(uint256).max); tokensDispute = bound(tokensDispute, minimumDeposit, tokens); bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI101"), tokensDispute); diff --git a/packages/subgraph-service/test/disputes/cancel.t.sol b/packages/subgraph-service/test/disputes/cancel.t.sol index db553a18b..741feda16 100644 --- a/packages/subgraph-service/test/disputes/cancel.t.sol +++ b/packages/subgraph-service/test/disputes/cancel.t.sol @@ -15,7 +15,7 @@ contract DisputeManagerCancelDisputeTest is DisputeManagerTest { function testCancel_Dispute( uint256 tokens, uint256 tokensDispute - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensDispute = bound(tokensDispute, minimumDeposit, tokens); uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); @@ -31,7 +31,7 @@ contract DisputeManagerCancelDisputeTest is DisputeManagerTest { function testCancel_QueryDisputeConflicting( uint256 tokens - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); @@ -63,7 +63,7 @@ contract DisputeManagerCancelDisputeTest is DisputeManagerTest { function testCancel_RevertIf_CallerIsNotFisherman( uint256 tokens, uint256 tokensDispute - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensDispute = bound(tokensDispute, minimumDeposit, tokens); bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); diff --git a/packages/subgraph-service/test/disputes/create.t.sol b/packages/subgraph-service/test/disputes/create.t.sol index 058eee21c..5112aea0a 100644 --- a/packages/subgraph-service/test/disputes/create.t.sol +++ b/packages/subgraph-service/test/disputes/create.t.sol @@ -15,7 +15,7 @@ contract DisputeManagerCreateDisputeTest is DisputeManagerTest { function testCreate_IndexingDispute( uint256 tokens, uint256 tokensDispute - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensDispute = bound(tokensDispute, minimumDeposit, tokens); bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); @@ -24,7 +24,7 @@ contract DisputeManagerCreateDisputeTest is DisputeManagerTest { function testCreate_QueryDispute( uint256 tokens, uint256 tokensDispute - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensDispute = bound(tokensDispute, minimumDeposit, tokens); bytes32 disputeID = _createQueryDispute(tokensDispute); assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); @@ -32,7 +32,7 @@ contract DisputeManagerCreateDisputeTest is DisputeManagerTest { function testCreate_QueryDisputeConflict( uint256 tokens - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); @@ -56,7 +56,7 @@ contract DisputeManagerCreateDisputeTest is DisputeManagerTest { function testCreate_RevertWhen_DisputeAlreadyCreated( uint256 tokens, uint256 tokensDispute - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensDispute = bound(tokensDispute, minimumDeposit, tokens); bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); diff --git a/packages/subgraph-service/test/disputes/draw.t.sol b/packages/subgraph-service/test/disputes/draw.t.sol index 0139bf929..746d25ebd 100644 --- a/packages/subgraph-service/test/disputes/draw.t.sol +++ b/packages/subgraph-service/test/disputes/draw.t.sol @@ -16,7 +16,7 @@ contract DisputeManagerDrawDisputeTest is DisputeManagerTest { function testDraw_Dispute( uint256 tokens, uint256 tokensDispute - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensDispute = bound(tokensDispute, minimumDeposit, tokens); uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI32"), tokensDispute); @@ -29,7 +29,7 @@ contract DisputeManagerDrawDisputeTest is DisputeManagerTest { function testDraw_QueryDisputeConflicting( uint256 tokens - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); @@ -59,7 +59,7 @@ contract DisputeManagerDrawDisputeTest is DisputeManagerTest { function testDraw_RevertIf_CallerIsNotArbitrator( uint256 tokens, uint256 tokensDispute - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { tokensDispute = bound(tokensDispute, minimumDeposit, tokens); bytes32 disputeID =_createIndexingDispute(allocationID,bytes32("POI1"), tokens); diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol index 537df824e..3db0509ec 100644 --- a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -25,7 +25,7 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { vm.stopPrank(); } - modifier useProvision(uint256 tokens) { + modifier useAllocation(uint256 tokens) { vm.assume(tokens > minimumProvisionTokens); vm.assume(tokens < 10_000_000_000 ether); _createProvision(tokens); diff --git a/packages/subgraph-service/test/subgraphService/allocate/start.t.sol b/packages/subgraph-service/test/subgraphService/allocate/start.t.sol index 0ecdb059c..65e4ec35b 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/start.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/start.t.sol @@ -5,9 +5,12 @@ import "forge-std/Test.sol"; import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; -import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; + import { Allocation } from "../../../contracts/libraries/Allocation.sol"; import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { LegacyAllocation } from "../../../contracts/libraries/LegacyAllocation.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; contract SubgraphServiceAllocateStartTest is SubgraphServiceTest { @@ -46,6 +49,9 @@ contract SubgraphServiceAllocateStartTest is SubgraphServiceTest { assertEq(allocation.lastPOIPresentedAt, 0); assertEq(allocation.accRewardsPerAllocatedToken, 0); assertEq(allocation.accRewardsPending, 0); + + uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeployment); + assertEq(subgraphAllocatedTokens, tokens); } function testStart_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer { @@ -120,4 +126,41 @@ contract SubgraphServiceAllocateStartTest is SubgraphServiceTest { )); subgraphService.startService(users.indexer, data); } + + function testStart_RevertWhen_ArealdyExists(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(tokens); + _registerIndexer(address(0)); + + bytes32 slot = keccak256(abi.encode(allocationID, uint256(158))); + vm.store(address(subgraphService), slot, bytes32(uint256(uint160(users.indexer)))); + vm.store(address(subgraphService), bytes32(uint256(slot) + 1), subgraphDeployment); + + bytes memory data = _generateData(tokens); + vm.expectRevert(abi.encodeWithSelector( + LegacyAllocation.LegacyAllocationExists.selector, + allocationID + )); + subgraphService.startService(users.indexer, data); + } + + function testStart_RevertWhen_NotEnoughTokens( + uint256 tokens, + uint256 lockTokens + ) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS - 1); + lockTokens = bound(lockTokens, tokens + 1, MAX_TOKENS); + + _createProvision(tokens); + _registerIndexer(address(0)); + + bytes memory data = _generateData(lockTokens); + vm.expectRevert(abi.encodeWithSelector( + ProvisionTracker.ProvisionTrackerInsufficientTokens.selector, + tokens, + lockTokens + )); + subgraphService.startService(users.indexer, data); + } } diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol new file mode 100644 index 000000000..c1b5170d8 --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; + +import { Allocation } from "../../../contracts/libraries/Allocation.sol"; +import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { LegacyAllocation } from "../../../contracts/libraries/LegacyAllocation.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; + +contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { + + /* + * Helpers + */ + + /* + * TESTS + */ + + function testStop_Allocation(uint256 tokens) public useIndexer useAllocation(tokens) { + assertTrue(subgraphService.isActiveAllocation(allocationID)); + bytes memory data = abi.encode(allocationID); + // vm.expectEmit(address(subgraphService)); + // emit IDataService.ServiceStopped(users.indexer, data); + subgraphService.stopService(users.indexer, data); + } +} diff --git a/packages/subgraph-service/test/subgraphService/provider/register.t.sol b/packages/subgraph-service/test/subgraphService/provider/register.t.sol index 842c467bd..2605d9e00 100644 --- a/packages/subgraph-service/test/subgraphService/provider/register.t.sol +++ b/packages/subgraph-service/test/subgraphService/provider/register.t.sol @@ -36,7 +36,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { function testRegister_RevertIf_AlreadyRegistered( uint256 tokens - ) public useIndexer useProvision(tokens) { + ) public useIndexer useAllocation(tokens) { vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerAlreadyRegistered.selector)); _registerIndexer(users.rewardsDestination); } diff --git a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol index dd6d73587..8e98078c6 100644 --- a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol +++ b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol @@ -14,7 +14,7 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { * TESTS */ - function testAccept_Provision(uint256 tokens) public useIndexer useProvision(tokens) { + function testAccept_Provision(uint256 tokens) public useIndexer useAllocation(tokens) { vm.expectEmit(address(subgraphService)); emit IDataService.ProvisionAccepted(users.indexer); subgraphService.acceptProvision(users.indexer, ""); From cd7723937b2bfaee197b95d3804719ae22ba8d5a Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 25 Jun 2024 17:13:41 -0300 Subject: [PATCH 138/343] chore: stop allocation tests --- .../test/subgraphService/allocate/stop.t.sol | 38 ++++++++++++++++++- .../subgraphService/collect/collect.t.sol | 33 ++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 packages/subgraph-service/test/subgraphService/collect/collect.t.sol diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol index c1b5170d8..06a2019ec 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol @@ -26,8 +26,42 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { function testStop_Allocation(uint256 tokens) public useIndexer useAllocation(tokens) { assertTrue(subgraphService.isActiveAllocation(allocationID)); bytes memory data = abi.encode(allocationID); - // vm.expectEmit(address(subgraphService)); - // emit IDataService.ServiceStopped(users.indexer, data); + vm.expectEmit(address(subgraphService)); + emit IDataService.ServiceStopped(users.indexer, data); + subgraphService.stopService(users.indexer, data); + + uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeployment); + assertEq(subgraphAllocatedTokens, 0); + } + + function testStop_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer useAllocation(tokens) { + resetPrank(users.operator); + bytes memory data = abi.encode(allocationID); + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerNotAuthorized.selector, + users.operator, + users.indexer + )); + subgraphService.stopService(users.indexer, data); + } + + function testStop_RevertWhen_NotRegistered() public useIndexer { + bytes memory data = abi.encode(allocationID); + vm.expectRevert(abi.encodeWithSelector( + ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, + users.indexer + )); + subgraphService.stopService(users.indexer, data); + } + + function testStop_RevertWhen_NotOpen(uint256 tokens) public useIndexer useAllocation(tokens) { + bytes memory data = abi.encode(allocationID); + subgraphService.stopService(users.indexer, data); + vm.expectRevert(abi.encodeWithSelector( + Allocation.AllocationClosed.selector, + allocationID, + block.timestamp + )); subgraphService.stopService(users.indexer, data); } } diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol new file mode 100644 index 000000000..b9fc3d77d --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; + +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; + +contract SubgraphServiceRegisterTest is SubgraphServiceTest { + + /* + * TESTS + */ + + function testCollect_Tokens(uint256 tokens) public useIndexer useAllocation(tokens) { + + } + + function testCollect_RevertWhen_InvalidPayment( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes invalidPaymentType = IGraphPayments.PaymentTypes.IndexingFee; + vm.expectRevert(abi.encodeWithSelector( + ISubgraphService.SubgraphServiceInvalidPaymentType.selector, + invalidPaymentType + )); + subgraphService.collect(users.indexer, invalidPaymentType, ""); + } +} From 6b99a6d69a61d6f0da18c2daab0d01ff2b6e2dde Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 26 Jun 2024 14:17:02 -0300 Subject: [PATCH 139/343] WIP --- .../test/SubgraphBaseTest.t.sol | 62 ++++++++++++++++--- .../subgraphService/SubgraphService.t.sol | 2 +- .../subgraphService/collect/collect.t.sol | 36 ++++++++++- .../subgraph-service/test/utils/Constants.sol | 5 ++ 4 files changed, 94 insertions(+), 11 deletions(-) diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index 1da4c8a1f..b48a18d33 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -4,17 +4,23 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; +import { GraphPayments } from "@graphprotocol/horizon/contracts/payments/GraphPayments.sol"; import { GraphProxy } from "@graphprotocol/contracts/contracts/upgrades/GraphProxy.sol"; import { GraphProxyAdmin } from "@graphprotocol/contracts/contracts/upgrades/GraphProxyAdmin.sol"; import { HorizonStaking } from "@graphprotocol/horizon/contracts/staking/HorizonStaking.sol"; import { HorizonStakingExtension } from "@graphprotocol/horizon/contracts/staking/HorizonStakingExtension.sol"; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; +import { IPaymentsEscrow } from "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol"; +import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; +import { TAPCollector } from "@graphprotocol/horizon/contracts/payments/collectors/TAPCollector.sol"; +import { PaymentsEscrow } from "@graphprotocol/horizon/contracts/payments/PaymentsEscrow.sol"; import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; -import { SubgraphService } from "../contracts/SubgraphService.sol"; +import { Constants } from "./utils/Constants.sol"; import { DisputeManager } from "../contracts/DisputeManager.sol"; +import { SubgraphService } from "../contracts/SubgraphService.sol"; import { Users } from "./utils/Users.sol"; -import { Constants } from "./utils/Constants.sol"; import { Utils } from "./utils/Utils.sol"; import { MockGRTToken } from "./mocks/MockGRTToken.sol"; @@ -28,11 +34,14 @@ abstract contract SubgraphBaseTest is Utils, Constants { /* Contracts */ - GraphProxyAdmin public proxyAdmin; + GraphProxyAdmin proxyAdmin; Controller controller; SubgraphService subgraphService; DisputeManager disputeManager; IHorizonStaking staking; + IGraphPayments graphPayments; + IPaymentsEscrow escrow; + ITAPCollector tapCollector; HorizonStaking private stakingBase; HorizonStakingExtension private stakingExtension; @@ -80,15 +89,40 @@ abstract contract SubgraphBaseTest is Utils, Constants { GraphProxy stakingProxy = new GraphProxy(address(0), address(proxyAdmin)); rewardsManager = new MockRewardsManager(); - address tapVerifier = address(0xE3); - address curation = address(0xE4); + // GraphPayments predict address + bytes32 saltGraphPayments = keccak256("GraphPaymentsSalt"); + bytes32 paymentsHash = keccak256(bytes.concat( + vm.getCode("GraphPayments.sol:GraphPayments"), + abi.encode(address(controller), protocolPaymentCut) + )); + address predictedGraphPaymentsAddress = vm.computeCreate2Address( + saltGraphPayments, + paymentsHash, + users.deployer + ); + + // GraphEscrow predict address + bytes32 saltEscrow = keccak256("GraphEscrowSalt"); + bytes32 escrowHash = keccak256(bytes.concat( + vm.getCode("PaymentsEscrow.sol:PaymentsEscrow"), + abi.encode( + address(controller), + revokeCollectorThawingPeriod, + withdrawEscrowThawingPeriod + ) + )); + address predictedEscrowAddress = vm.computeCreate2Address( + saltEscrow, + escrowHash, + users.deployer + ); resetPrank(users.governor); controller.setContractProxy(keccak256("GraphToken"), address(token)); controller.setContractProxy(keccak256("Staking"), address(stakingProxy)); controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); - controller.setContractProxy(keccak256("GraphPayments"), makeAddr("GraphPayments")); - controller.setContractProxy(keccak256("PaymentsEscrow"), makeAddr("PaymentsEscrow")); + controller.setContractProxy(keccak256("GraphPayments"), predictedGraphPaymentsAddress); + controller.setContractProxy(keccak256("PaymentsEscrow"), predictedEscrowAddress); controller.setContractProxy(keccak256("EpochManager"), makeAddr("EpochManager")); controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); controller.setContractProxy(keccak256("GraphProxyAdmin"), makeAddr("GraphProxyAdmin")); @@ -106,8 +140,10 @@ abstract contract SubgraphBaseTest is Utils, Constants { ); disputeManager = DisputeManager(disputeManagerProxy); + tapCollector = new TAPCollector("TAPCollector", "1", address(controller)); + address curation = address(0xE4); address subgraphServiceImplementation = address( - new SubgraphService(address(controller), address(disputeManager), tapVerifier, curation) + new SubgraphService(address(controller), address(disputeManager), address(tapCollector), curation) ); address subgraphServiceProxy = UnsafeUpgrades.deployTransparentProxy( subgraphServiceImplementation, @@ -128,6 +164,16 @@ abstract contract SubgraphBaseTest is Utils, Constants { address(subgraphService) ); + graphPayments = new GraphPayments{salt: saltGraphPayments}( + address(controller), + protocolPaymentCut + ); + escrow = new PaymentsEscrow{salt: saltEscrow}( + address(controller), + revokeCollectorThawingPeriod, + withdrawEscrowThawingPeriod + ); + resetPrank(users.governor); proxyAdmin.upgrade(stakingProxy, address(stakingBase)); proxyAdmin.acceptProxy(stakingBase, stakingProxy); diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index fb379737c..65498e485 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -25,7 +25,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { * SET UP */ - function setUp() public override { + function setUp() public virtual override { super.setUp(); } diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index b9fc3d77d..7b11b0f35 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -5,6 +5,7 @@ import "forge-std/Test.sol"; import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; +import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; @@ -12,12 +13,43 @@ import { SubgraphServiceTest } from "../SubgraphService.t.sol"; contract SubgraphServiceRegisterTest is SubgraphServiceTest { + address signer; + uint256 signerPrivateKey; + + /* + * HELPERS + */ + + function _getRAV() private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { + return ITAPCollector.ReceiptAggregateVoucher({ + dataService: address(subgraphService), + serviceProvider: users.indexer, + timestampNs: 0, + valueAggregate: 0, + metadata: abi.encode(allocationID) + }); + } + + /* + * SET UP + */ + + function setUp() public virtual override { + super.setUp(); + (signer, signerPrivateKey) = makeAddrAndKey("signer"); + } + /* * TESTS */ - function testCollect_Tokens(uint256 tokens) public useIndexer useAllocation(tokens) { - + function testCollect_QueryFees(uint256 tokens) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes invalidPaymentType = IGraphPayments.PaymentTypes.QueryFee; + ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(); + bytes32 messageHash = tapCollector.encodeRAV(rav); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, messageHash); + bytes memory data = abi.encode(rav, r, s, v); + subgraphService.collect(users.indexer, invalidPaymentType, data); } function testCollect_RevertWhen_InvalidPayment( diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index 26e73083b..207680655 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -14,4 +14,9 @@ abstract contract Constants { uint32 internal constant delegationRatio = 16; // Staking uint64 internal constant MAX_THAWING_PERIOD = 28 days; + // GraphEscrow parameters + uint256 internal constant withdrawEscrowThawingPeriod = 60; + uint256 internal constant revokeCollectorThawingPeriod = 60; + // GraphPayments parameters + uint256 internal constant protocolPaymentCut = 10000; } \ No newline at end of file From 30973f120e3055081f3d1ca533235bc4c01845df Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 27 Jun 2024 18:01:02 -0300 Subject: [PATCH 140/343] chore: subgraph service unit tests --- .../contracts/SubgraphService.sol | 25 +++++++ .../contracts/SubgraphServiceStorage.sol | 2 +- .../contracts/interfaces/ISubgraphService.sol | 36 ++++++++++ .../contracts/utilities/AllocationManager.sol | 16 +++++ packages/subgraph-service/foundry.toml | 1 + .../test/SubgraphBaseTest.t.sol | 14 ++-- .../test/mocks/MockCuration.sol | 11 +++ .../test/mocks/MockRewardsManager.sol | 39 +++++++++- .../subgraphService/collect/collect.t.sol | 71 ++++++++++++++++--- .../subgraph-service/test/utils/Constants.sol | 6 ++ 10 files changed, 206 insertions(+), 15 deletions(-) create mode 100644 packages/subgraph-service/test/mocks/MockCuration.sol diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index bd36002a0..403d99dcf 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -19,6 +19,8 @@ import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol" import { Allocation } from "./libraries/Allocation.sol"; import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; +import "forge-std/console.sol"; + contract SubgraphService is Initializable, OwnableUpgradeable, @@ -340,6 +342,29 @@ contract SubgraphService is _setDelegationRatio(delegationRatio); } + /** + * @notice See {ISubgraphService.setStakeToFeesRatio} + */ + function setStakeToFeesRatio(uint32 _stakeToFeesRatio) external override onlyOwner { + stakeToFeesRatio = _stakeToFeesRatio; + emit StakeToFeesRatioSet(_stakeToFeesRatio); + } + + /** + * @notice See {ISubgraphService.setMaxPOIStaleness} + */ + function setMaxPOIStaleness(uint256 maxPOIStaleness) external override onlyOwner { + _setMaxPOIStaleness(maxPOIStaleness); + } + + /** + * @notice See {ISubgraphService.setPaymentCuts} + */ + function setPaymentCuts(IGraphPayments.PaymentTypes paymentType, uint128 serviceCut, uint128 curationCut) external override onlyOwner { + paymentCuts[paymentType] = PaymentCuts(serviceCut, curationCut); + emit PaymentCutsSet(paymentType, serviceCut, curationCut); + } + /** * @notice See {ISubgraphService.getAllocation} */ diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol index 50e72b417..e0f23aa88 100644 --- a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -9,7 +9,7 @@ abstract contract SubgraphServiceV1Storage { mapping(address indexer => ISubgraphService.Indexer details) public indexers; ///@notice Multiplier for how many tokens back collected query fees - uint256 public stakeToFeesRatio; + uint32 public stakeToFeesRatio; /// @notice The fees cut taken by the subgraph service mapping(IGraphPayments.PaymentTypes paymentType => ISubgraphService.PaymentCuts paymentCuts) public paymentCuts; diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 39fc7430d..096d101a5 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -48,6 +48,20 @@ interface ISubgraphService is IDataServiceFees { uint256 tokensSubgraphService ); + /** + * @notice Emitted when the stake to fees ratio is set. + * @param ratio The stake to fees ratio + */ + event StakeToFeesRatioSet(uint32 ratio); + + /** + * @notice Emmited when payment cuts are set for a payment type + * @param paymentType The payment type + * @param serviceCut The service cut for the payment type + * @param curationCut The curation cut for the payment type + */ + event PaymentCutsSet(IGraphPayments.PaymentTypes paymentType, uint128 serviceCut, uint128 curationCut); + /** * @notice Thrown when an indexer tries to register with an empty URL */ @@ -133,6 +147,28 @@ interface ISubgraphService is IDataServiceFees { */ function setDelegationRatio(uint32 delegationRatio) external; + /** + * @notice Sets the stake to fees ratio + * @param stakeToFeesRatio The stake to fees ratio + */ + function setStakeToFeesRatio(uint32 stakeToFeesRatio) external; + + /** + * @notice Sets the max POI staleness + * See {AllocationManagerV1Storage-maxPOIStaleness} for more details. + * @param maxPOIStaleness The max POI staleness in seconds + */ + function setMaxPOIStaleness(uint256 maxPOIStaleness) external; + + /** + * @notice Sets the payment cuts for a payment type + * @dev Emits a {PaymentCutsSet} event + * @param paymentType The payment type + * @param serviceCut The service cut for the payment type + * @param curationCut The curation cut for the payment type + */ + function setPaymentCuts(IGraphPayments.PaymentTypes paymentType, uint128 serviceCut, uint128 curationCut) external; + /** * @notice Sets the rewards destination for an indexer to receive indexing rewards * @dev Emits a {RewardsDestinationSet} event diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 394ac3e57..850b3fd13 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -114,6 +114,12 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca */ event RewardsDestinationSet(address indexed indexer, address indexed rewardsDestination); + /** + * @notice Emitted when the maximum POI staleness is updated + * @param maxPOIStaleness The max POI staleness in seconds + */ + event MaxPOIStalenessSet(uint256 maxPOIStaleness); + /** * @notice Thrown when an allocation proof is invalid * Both `signer` and `allocationId` should match for a valid proof. @@ -412,6 +418,16 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca emit RewardsDestinationSet(_indexer, _rewardsDestination); } + /** + * @notice Sets the maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards + * @dev Emits a {MaxPOIStalenessSet} event + * @param _maxPOIStaleness The max POI staleness in seconds + */ + function _setMaxPOIStaleness(uint256 _maxPOIStaleness) internal { + maxPOIStaleness = _maxPOIStaleness; + emit MaxPOIStalenessSet(_maxPOIStaleness); + } + /** * @notice Gets the details of an allocation * @param _allocationId The id of the allocation diff --git a/packages/subgraph-service/foundry.toml b/packages/subgraph-service/foundry.toml index d4c30311f..235a58eb9 100644 --- a/packages/subgraph-service/foundry.toml +++ b/packages/subgraph-service/foundry.toml @@ -7,6 +7,7 @@ cache_path = 'cache_forge' optimizer = true optimizer-runs = 200 via_ir = true +fs_permissions = [{ access = "read", path = "./"}] [profile.lite] optimizer = false diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index b48a18d33..8344875bf 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -23,6 +23,7 @@ import { SubgraphService } from "../contracts/SubgraphService.sol"; import { Users } from "./utils/Users.sol"; import { Utils } from "./utils/Utils.sol"; +import { MockCuration } from "./mocks/MockCuration.sol"; import { MockGRTToken } from "./mocks/MockGRTToken.sol"; import { MockRewardsManager } from "./mocks/MockRewardsManager.sol"; @@ -46,6 +47,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { HorizonStaking private stakingBase; HorizonStakingExtension private stakingExtension; + MockCuration curation; MockGRTToken token; MockRewardsManager rewardsManager; @@ -87,7 +89,8 @@ abstract contract SubgraphBaseTest is Utils, Constants { resetPrank(users.deployer); GraphProxy stakingProxy = new GraphProxy(address(0), address(proxyAdmin)); - rewardsManager = new MockRewardsManager(); + rewardsManager = new MockRewardsManager(token, rewardsPerSignal); + curation = new MockCuration(); // GraphPayments predict address bytes32 saltGraphPayments = keccak256("GraphPaymentsSalt"); @@ -126,7 +129,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { controller.setContractProxy(keccak256("EpochManager"), makeAddr("EpochManager")); controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); controller.setContractProxy(keccak256("GraphProxyAdmin"), makeAddr("GraphProxyAdmin")); - controller.setContractProxy(keccak256("Curation"), makeAddr("Curation")); + controller.setContractProxy(keccak256("Curation"), address(curation)); resetPrank(users.deployer); address disputeManagerImplementation = address(new DisputeManager(address(controller))); @@ -141,9 +144,8 @@ abstract contract SubgraphBaseTest is Utils, Constants { disputeManager = DisputeManager(disputeManagerProxy); tapCollector = new TAPCollector("TAPCollector", "1", address(controller)); - address curation = address(0xE4); address subgraphServiceImplementation = address( - new SubgraphService(address(controller), address(disputeManager), address(tapCollector), curation) + new SubgraphService(address(controller), address(disputeManager), address(tapCollector), address(curation)) ); address subgraphServiceProxy = UnsafeUpgrades.deployTransparentProxy( subgraphServiceImplementation, @@ -183,6 +185,10 @@ abstract contract SubgraphBaseTest is Utils, Constants { function setupProtocol() private { resetPrank(users.governor); staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); + resetPrank(users.deployer); + subgraphService.setStakeToFeesRatio(stakeToFeesRatio); + subgraphService.setMaxPOIStaleness(maxPOIStaleness); + subgraphService.setPaymentCuts(IGraphPayments.PaymentTypes.QueryFee, serviceCut, curationCut); } function unpauseProtocol() private { diff --git a/packages/subgraph-service/test/mocks/MockCuration.sol b/packages/subgraph-service/test/mocks/MockCuration.sol new file mode 100644 index 000000000..68b4a8ce9 --- /dev/null +++ b/packages/subgraph-service/test/mocks/MockCuration.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.26; + +contract MockCuration { + function isCurated(bytes32) public pure returns (bool) { + return true; + } + + function collect(bytes32, uint256) external {} +} \ No newline at end of file diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol index 158feef50..dad236c7a 100644 --- a/packages/subgraph-service/test/mocks/MockRewardsManager.sol +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -4,8 +4,32 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; import { IRewardsManager } from "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; + +import { MockGRTToken } from "./MockGRTToken.sol"; + +interface IRewardsIssuer { + function getAllocationData( + address allocationId + ) + external + view + returns (address indexer, bytes32 subgraphDeploymentId, uint256 tokens, uint256 accRewardsPerAllocatedToken); +} contract MockRewardsManager is IRewardsManager { + using PPMMath for uint256; + + MockGRTToken public token; + uint256 public rewardsPerSignal; + + uint256 private constant FIXED_POINT_SCALING_FACTOR = 1e18; + + constructor(MockGRTToken _token, uint256 _rewardsPerSignal) { + token = _token; + rewardsPerSignal = _rewardsPerSignal; + } + // -- Config -- function setIssuancePerBlock(uint256) external {} @@ -40,7 +64,20 @@ contract MockRewardsManager is IRewardsManager { function updateAccRewardsPerSignal() external returns (uint256) {} - function takeRewards(address) external returns (uint256) {} + function takeRewards(address _allocationID) external returns (uint256) { + address rewardsIssuer = msg.sender; + ( + , + , + uint256 tokens, + uint256 accRewardsPerAllocatedToken + ) = IRewardsIssuer(rewardsIssuer).getAllocationData(_allocationID); + + uint256 accRewardsPerTokens = tokens.mulPPM(rewardsPerSignal); + uint256 rewards = accRewardsPerTokens - accRewardsPerAllocatedToken; + token.mint(rewardsIssuer, rewards); + return rewards; + } // -- Hooks -- diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index 7b11b0f35..0683c4712 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -6,12 +6,15 @@ import "forge-std/Test.sol"; import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; contract SubgraphServiceRegisterTest is SubgraphServiceTest { + using PPMMath for uint128; + using PPMMath for uint256; address signer; uint256 signerPrivateKey; @@ -20,16 +23,38 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { * HELPERS */ - function _getRAV() private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { + function _getQueryFeeEncodedData( + uint128 tokens + ) private view returns (bytes memory) { + ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(tokens); + bytes32 messageHash = tapCollector.encodeRAV(rav); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, messageHash); + bytes memory signature = abi.encodePacked(r, s, v); + ITAPCollector.SignedRAV memory signedRAV = ITAPCollector.SignedRAV(rav, signature); + return abi.encode(signedRAV); + } + + function _getRAV(uint128 tokens) private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { return ITAPCollector.ReceiptAggregateVoucher({ dataService: address(subgraphService), serviceProvider: users.indexer, timestampNs: 0, - valueAggregate: 0, + valueAggregate: tokens, metadata: abi.encode(allocationID) }); } + function _approveCollector(uint128 tokens) private { + address msgSender; + (, msgSender,) = vm.readCallers(); + resetPrank(signer); + mint(signer, tokens); + escrow.approveCollector(address(tapCollector), tokens); + token.approve(address(escrow), tokens); + escrow.deposit(users.indexer, tokens); + resetPrank(msgSender); + } + /* * SET UP */ @@ -37,19 +62,47 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { function setUp() public virtual override { super.setUp(); (signer, signerPrivateKey) = makeAddrAndKey("signer"); + vm.label({ account: signer, newLabel: "signer" }); } /* * TESTS */ - function testCollect_QueryFees(uint256 tokens) public useIndexer useAllocation(tokens) { - IGraphPayments.PaymentTypes invalidPaymentType = IGraphPayments.PaymentTypes.QueryFee; - ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(); - bytes32 messageHash = tapCollector.encodeRAV(rav); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, messageHash); - bytes memory data = abi.encode(rav, r, s, v); - subgraphService.collect(users.indexer, invalidPaymentType, data); + function testCollect_QueryFees( + uint256 tokens, + uint256 tokensPayment + ) public useIndexer useAllocation(tokens) { + vm.assume(tokens > minimumProvisionTokens * stakeToFeesRatio); + uint256 maxTokensPayment = tokens / stakeToFeesRatio > type(uint128).max ? type(uint128).max : tokens / stakeToFeesRatio; + tokensPayment = bound(tokensPayment, minimumProvisionTokens, maxTokensPayment); + uint128 tokensPayment128 = uint128(tokensPayment); + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; + bytes memory data = _getQueryFeeEncodedData(tokensPayment128); + + uint256 indexerPreviousBalance = token.balanceOf(users.indexer); + + _approveCollector(tokensPayment128); + subgraphService.collect(users.indexer, paymentType, data); + + uint256 indexerBalance = token.balanceOf(users.indexer); + uint256 tokensProtocol = tokensPayment128.mulPPM(protocolPaymentCut); + uint256 curationTokens = tokensPayment128.mulPPMRoundUp(curationCut); + uint256 dataServiceTokens = tokensPayment128.mulPPM(serviceCut + curationCut) - curationTokens; + + uint256 expectedIndexerTokensPayment = tokensPayment128 - tokensProtocol - dataServiceTokens - curationTokens; + assertEq(indexerBalance, indexerPreviousBalance + expectedIndexerTokensPayment); + } + + function testCollect_IndexingFees(uint256 tokens) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + bytes memory data = abi.encode(allocationID, bytes32("POI1")); + + uint256 indexerPreviousProvisionBalance = staking.getProviderTokensAvailable(users.indexer, address(subgraphService)); + subgraphService.collect(users.indexer, paymentType, data); + + uint256 indexerProvisionBalance = staking.getProviderTokensAvailable(users.indexer, address(subgraphService)); + assertEq(indexerProvisionBalance, indexerPreviousProvisionBalance + tokens.mulPPM(rewardsPerSignal)); } function testCollect_RevertWhen_InvalidPayment( diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index 207680655..1d07ec817 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -12,6 +12,10 @@ abstract contract Constants { uint256 internal constant minimumProvisionTokens = 1000 ether; uint256 internal constant maximumProvisionTokens = type(uint256).max; uint32 internal constant delegationRatio = 16; + uint32 public constant stakeToFeesRatio = 2; + uint256 public constant maxPOIStaleness = 28 days; + uint128 public constant serviceCut = 10000; + uint128 public constant curationCut = 10000; // Staking uint64 internal constant MAX_THAWING_PERIOD = 28 days; // GraphEscrow parameters @@ -19,4 +23,6 @@ abstract contract Constants { uint256 internal constant revokeCollectorThawingPeriod = 60; // GraphPayments parameters uint256 internal constant protocolPaymentCut = 10000; + // RewardsMananger parameters + uint256 public constant rewardsPerSignal = 10000; } \ No newline at end of file From 19cb2877535bd5679afffa9ca2ab5251eecdf927 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 27 Jun 2024 18:13:04 -0300 Subject: [PATCH 141/343] fix: revert unit type change --- packages/subgraph-service/contracts/SubgraphService.sol | 4 +--- .../subgraph-service/contracts/SubgraphServiceStorage.sol | 2 +- .../contracts/interfaces/ISubgraphService.sol | 4 ++-- packages/subgraph-service/test/utils/Constants.sol | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 403d99dcf..0045b970d 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -19,8 +19,6 @@ import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol" import { Allocation } from "./libraries/Allocation.sol"; import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; -import "forge-std/console.sol"; - contract SubgraphService is Initializable, OwnableUpgradeable, @@ -345,7 +343,7 @@ contract SubgraphService is /** * @notice See {ISubgraphService.setStakeToFeesRatio} */ - function setStakeToFeesRatio(uint32 _stakeToFeesRatio) external override onlyOwner { + function setStakeToFeesRatio(uint256 _stakeToFeesRatio) external override onlyOwner { stakeToFeesRatio = _stakeToFeesRatio; emit StakeToFeesRatioSet(_stakeToFeesRatio); } diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol index e0f23aa88..50e72b417 100644 --- a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -9,7 +9,7 @@ abstract contract SubgraphServiceV1Storage { mapping(address indexer => ISubgraphService.Indexer details) public indexers; ///@notice Multiplier for how many tokens back collected query fees - uint32 public stakeToFeesRatio; + uint256 public stakeToFeesRatio; /// @notice The fees cut taken by the subgraph service mapping(IGraphPayments.PaymentTypes paymentType => ISubgraphService.PaymentCuts paymentCuts) public paymentCuts; diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 096d101a5..2c378809e 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -52,7 +52,7 @@ interface ISubgraphService is IDataServiceFees { * @notice Emitted when the stake to fees ratio is set. * @param ratio The stake to fees ratio */ - event StakeToFeesRatioSet(uint32 ratio); + event StakeToFeesRatioSet(uint256 ratio); /** * @notice Emmited when payment cuts are set for a payment type @@ -151,7 +151,7 @@ interface ISubgraphService is IDataServiceFees { * @notice Sets the stake to fees ratio * @param stakeToFeesRatio The stake to fees ratio */ - function setStakeToFeesRatio(uint32 stakeToFeesRatio) external; + function setStakeToFeesRatio(uint256 stakeToFeesRatio) external; /** * @notice Sets the max POI staleness diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index 1d07ec817..75ff738a8 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -12,7 +12,7 @@ abstract contract Constants { uint256 internal constant minimumProvisionTokens = 1000 ether; uint256 internal constant maximumProvisionTokens = type(uint256).max; uint32 internal constant delegationRatio = 16; - uint32 public constant stakeToFeesRatio = 2; + uint256 public constant stakeToFeesRatio = 2; uint256 public constant maxPOIStaleness = 28 days; uint128 public constant serviceCut = 10000; uint128 public constant curationCut = 10000; From 0f366d28b95ad1d25c1e351922b0ea82e9437320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 14 Aug 2024 15:42:36 -0300 Subject: [PATCH 142/343] fix: update subgraph endpoints to network and some linting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../subgraph-service/contracts/SubgraphService.sol | 12 ++++++++---- packages/subgraph-service/eslint.config.js | 2 +- packages/token-distribution/.env.sample | 1 + packages/token-distribution/.graphclientrc.yml | 4 ++-- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 0045b970d..d0db789b9 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -343,9 +343,9 @@ contract SubgraphService is /** * @notice See {ISubgraphService.setStakeToFeesRatio} */ - function setStakeToFeesRatio(uint256 _stakeToFeesRatio) external override onlyOwner { - stakeToFeesRatio = _stakeToFeesRatio; - emit StakeToFeesRatioSet(_stakeToFeesRatio); + function setStakeToFeesRatio(uint256 stakeToFeesRatio_) external override onlyOwner { + stakeToFeesRatio = stakeToFeesRatio_; + emit StakeToFeesRatioSet(stakeToFeesRatio_); } /** @@ -358,7 +358,11 @@ contract SubgraphService is /** * @notice See {ISubgraphService.setPaymentCuts} */ - function setPaymentCuts(IGraphPayments.PaymentTypes paymentType, uint128 serviceCut, uint128 curationCut) external override onlyOwner { + function setPaymentCuts( + IGraphPayments.PaymentTypes paymentType, + uint128 serviceCut, + uint128 curationCut + ) external override onlyOwner { paymentCuts[paymentType] = PaymentCuts(serviceCut, curationCut); emit PaymentCutsSet(paymentType, serviceCut, curationCut); } diff --git a/packages/subgraph-service/eslint.config.js b/packages/subgraph-service/eslint.config.js index 2cb4335fd..c9e06b116 100644 --- a/packages/subgraph-service/eslint.config.js +++ b/packages/subgraph-service/eslint.config.js @@ -16,6 +16,6 @@ module.exports = [ }, }, { - ignores: ['typechain-types/*'], + ignores: ['typechain-types/*', 'lib/*'], }, ] diff --git a/packages/token-distribution/.env.sample b/packages/token-distribution/.env.sample index 1ecb4d424..feae0f5fe 100644 --- a/packages/token-distribution/.env.sample +++ b/packages/token-distribution/.env.sample @@ -1,3 +1,4 @@ MNEMONIC= ETHERSCAN_API_KEY= INFURA_KEY= +STUDIO_API_KEY= diff --git a/packages/token-distribution/.graphclientrc.yml b/packages/token-distribution/.graphclientrc.yml index 34d67cb06..3ab12d3ca 100644 --- a/packages/token-distribution/.graphclientrc.yml +++ b/packages/token-distribution/.graphclientrc.yml @@ -2,13 +2,13 @@ sources: - name: graph-network handler: graphql: - endpoint: https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-mainnet + endpoint: https://gateway.thegraph.com/api/${STUDIO_API_KEY}/subgraphs/id/9Co7EQe5PgW3ugCUJrJgRv4u9zdEuDJf8NvMWftNsBH8 retry: 5 - name: token-distribution handler: graphql: - endpoint: https://api.thegraph.com/subgraphs/name/graphprotocol/token-distribution + endpoint: https://gateway.thegraph.com/api/${STUDIO_API_KEY}/subgraphs/id/ChfAJn6jQEBjVqtdUiThfG6sWy2Sr5XQPNucE9DkgXSN retry: 5 transforms: - autoPagination: From d0256329ac2669a0c7d6c7bef9c0795d1dfdffe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 15 Aug 2024 16:35:21 -0300 Subject: [PATCH 143/343] fix: add STUDIO_API_KEY to GitHub action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .github/workflows/ci-token-dist.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-token-dist.yml b/.github/workflows/ci-token-dist.yml index f45eb9111..c0e73b072 100644 --- a/.github/workflows/ci-token-dist.yml +++ b/.github/workflows/ci-token-dist.yml @@ -2,6 +2,7 @@ name: CI - packages/token-distribution env: CI: true + STUDIO_API_KEY: ${{ secrets.STUDIO_API_KEY }} on: push: From 8345a1f28e19cbe0d9c1bbf55f8fe764622827ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 15 Aug 2024 16:37:07 -0300 Subject: [PATCH 144/343] fix: missing env var declaration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 62e6408fe..9536e68e3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,6 +2,7 @@ name: Build env: CI: true + STUDIO_API_KEY: ${{ secrets.STUDIO_API_KEY }} on: push: From 5c5787a4ca5d344c0ec6dfb48af0843d5e70cd0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 15 Aug 2024 17:02:59 -0300 Subject: [PATCH 145/343] ci: build packages individudally MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .github/actions/setup/action.yml | 3 --- .github/workflows/build.yml | 4 +++- .github/workflows/ci-contracts.yml | 4 ++++ .github/workflows/ci-data-edge.yml | 4 ++++ .github/workflows/ci-horizon.yml | 4 ++++ .github/workflows/ci-subgraph-service.yml | 4 ++++ .github/workflows/ci-token-dist.yml | 4 ++++ .github/workflows/e2e-contracts.yml | 4 ++++ .github/workflows/verifydeployed.yml | 10 ++++++++-- 9 files changed, 35 insertions(+), 6 deletions(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index baeec7b27..310c412bd 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -17,6 +17,3 @@ runs: - name: Install dependencies shell: bash run: yarn --immutable - - name: Build - shell: bash - run: yarn build || yarn build diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9536e68e3..2a7a8b2ff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,4 +20,6 @@ jobs: with: submodules: recursive - name: Set up environment - uses: ./.github/actions/setup \ No newline at end of file + uses: ./.github/actions/setup + - name: Build + run: yarn build || yarn build \ No newline at end of file diff --git a/.github/workflows/ci-contracts.yml b/.github/workflows/ci-contracts.yml index 7dca1bfde..d60ab0d9b 100644 --- a/.github/workflows/ci-contracts.yml +++ b/.github/workflows/ci-contracts.yml @@ -24,6 +24,10 @@ jobs: submodules: recursive - name: Set up environment uses: ./.github/actions/setup + - name: Build + run: | + pushd packages/contracts + yarn build || yarn build - name: Run tests run: | pushd packages/contracts diff --git a/.github/workflows/ci-data-edge.yml b/.github/workflows/ci-data-edge.yml index 065e0f964..a8046aa7e 100644 --- a/.github/workflows/ci-data-edge.yml +++ b/.github/workflows/ci-data-edge.yml @@ -22,5 +22,9 @@ jobs: uses: actions/checkout@v4 - name: Set up environment uses: ./.github/actions/setup + - name: Build + run: | + pushd packages/data-edge + yarn build - name: Run tests run: yarn test \ No newline at end of file diff --git a/.github/workflows/ci-horizon.yml b/.github/workflows/ci-horizon.yml index d450d1264..159ca7b4d 100644 --- a/.github/workflows/ci-horizon.yml +++ b/.github/workflows/ci-horizon.yml @@ -24,6 +24,10 @@ jobs: submodules: recursive - name: Set up environment uses: ./.github/actions/setup + - name: Build + run: | + pushd packages/horizon + yarn build - name: Run tests run: | pushd packages/horizon diff --git a/.github/workflows/ci-subgraph-service.yml b/.github/workflows/ci-subgraph-service.yml index bda15deff..141c3549d 100644 --- a/.github/workflows/ci-subgraph-service.yml +++ b/.github/workflows/ci-subgraph-service.yml @@ -24,6 +24,10 @@ jobs: submodules: recursive - name: Set up environment uses: ./.github/actions/setup + - name: Build + run: | + pushd packages/subgraph-service + yarn build - name: Run tests run: | pushd packages/subgraph-service diff --git a/.github/workflows/ci-token-dist.yml b/.github/workflows/ci-token-dist.yml index c0e73b072..b991c1608 100644 --- a/.github/workflows/ci-token-dist.yml +++ b/.github/workflows/ci-token-dist.yml @@ -25,6 +25,10 @@ jobs: submodules: recursive - name: Set up environment uses: ./.github/actions/setup + - name: Build + run: | + pushd packages/token-distribution + yarn build - name: Run tests run: | pushd packages/token-distribution diff --git a/.github/workflows/e2e-contracts.yml b/.github/workflows/e2e-contracts.yml index c84adb1a0..ce5540add 100644 --- a/.github/workflows/e2e-contracts.yml +++ b/.github/workflows/e2e-contracts.yml @@ -34,6 +34,10 @@ jobs: submodules: recursive - name: Set up environment uses: ./.github/actions/setup + - name: Build + run: | + pushd packages/contracts + yarn build || yarn build - name: Run e2e tests run: | git clone https://github.com/OffchainLabs/nitro-testnode/ diff --git a/.github/workflows/verifydeployed.yml b/.github/workflows/verifydeployed.yml index 9de43994c..db5b90133 100644 --- a/.github/workflows/verifydeployed.yml +++ b/.github/workflows/verifydeployed.yml @@ -30,8 +30,10 @@ jobs: - name: Set up environment uses: ./.github/actions/setup - - name: Compile contracts - run: yarn build + - name: Build + run: | + pushd packages/contracts + yarn build || yarn build - name: Save build artifacts uses: actions/upload-artifact@v3 @@ -50,6 +52,10 @@ jobs: uses: actions/checkout@v3 - name: Set up environment uses: ./.github/actions/setup + - name: Build + run: | + pushd packages/contracts + yarn build || yarn build - name: Get build artifacts uses: actions/download-artifact@v3 with: From 4bdd2375532129302768ede8437942eac0de19ec Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 7 Aug 2024 15:13:48 -0300 Subject: [PATCH 146/343] fix: addToDelegationPool access control and token transfer (OZ C-01) --- .../internal/IHorizonStakingMain.sol | 6 ++ .../horizon/contracts/mocks/MockGRTToken.sol | 4 +- .../contracts/payments/GraphPayments.sol | 1 + .../contracts/staking/HorizonStaking.sol | 2 + packages/horizon/test/escrow/collect.t.sol | 2 +- .../test/staking/allocation/collect.t.sol | 1 + .../test/staking/delegation/addToPool.t.sol | 79 +++++++++++++++++++ 7 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 packages/horizon/test/staking/delegation/addToPool.t.sol diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index a6f18c66c..ede817cb8 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -338,6 +338,12 @@ interface IHorizonStakingMain { */ error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); + /** + * @notice Thrown when an unauthorized sender attempts to deposit tokens into the delegation pool. + * @param sender The message sender address + */ + error HorizonStakingInvalidDelegationPoolSender(address sender); + /** * @notice Thrown when attempting to create a provision with an invalid maximum verifier cut. * @param maxVerifierCut The maximum verifier cut diff --git a/packages/horizon/contracts/mocks/MockGRTToken.sol b/packages/horizon/contracts/mocks/MockGRTToken.sol index 1a51f3b96..1d5649f29 100644 --- a/packages/horizon/contracts/mocks/MockGRTToken.sol +++ b/packages/horizon/contracts/mocks/MockGRTToken.sol @@ -7,7 +7,9 @@ import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToke contract MockGRTToken is ERC20, IGraphToken { constructor() ERC20("Graph Token", "GRT") {} - function burn(uint256 tokens) external {} + function burn(uint256 tokens) external { + _burn(msg.sender, tokens); + } function burnFrom(address from, uint256 tokens) external { _burn(from, tokens); diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 298a1a74c..0deb8d112 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -68,6 +68,7 @@ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, I // Pay delegators if (tokensDelegationPool > 0) { + _graphToken().approve(address(_graphStaking()), tokensDelegationPool); _graphStaking().addToDelegationPool(receiver, dataService, tokensDelegationPool); } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 6b02c86c8..731efaf08 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -278,6 +278,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokens ) external override notPaused { require(tokens != 0, HorizonStakingInvalidZeroTokens()); + require(msg.sender == verifier || msg.sender == address(_graphPayments()), HorizonStakingInvalidDelegationPoolSender(msg.sender)); + _graphToken().pullTokens(msg.sender, tokens); DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); pool.tokens = pool.tokens + tokens; emit TokensToDelegationPoolAdded(serviceProvider, verifier, tokens); diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index ab6808f55..baa1de06e 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -31,7 +31,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { uint256 indexerBalance = token.balanceOf(users.indexer); uint256 indexerExpectedPayment = amount - tokensDataService - tokensProtocol - tokensDelegatoion; assertEq(indexerBalance - indexerPreviousBalance, indexerExpectedPayment); - assertTrue(true); + assertEq(token.balanceOf(address(payments)), 0); } function testCollect_RevertWhen_CollectorNotAuthorized(uint256 amount) public { diff --git a/packages/horizon/test/staking/allocation/collect.t.sol b/packages/horizon/test/staking/allocation/collect.t.sol index b12783510..43c3c67ca 100644 --- a/packages/horizon/test/staking/allocation/collect.t.sol +++ b/packages/horizon/test/staking/allocation/collect.t.sol @@ -141,6 +141,7 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { assertEq(staking.getStake(address(users.indexer)), provisionTokens + payment); assertEq(curation.curation(_subgraphDeploymentID), curationTokens + curationCutTokens); assertEq(staking.getDelegationPool(users.indexer, subgraphDataServiceLegacyAddress).tokens, delegationTokens + delegationFeeCut); + assertEq(token.balanceOf(address(payments)), 0); } function testCollect_WithBeneficiaryAddress( diff --git a/packages/horizon/test/staking/delegation/addToPool.t.sol b/packages/horizon/test/staking/delegation/addToPool.t.sol new file mode 100644 index 000000000..6335de7a9 --- /dev/null +++ b/packages/horizon/test/staking/delegation/addToPool.t.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { + + modifier useValidDelegationAmount(uint256 tokens) { + vm.assume(tokens > 0); + vm.assume(tokens <= MAX_STAKING_TOKENS); + _; + } + + /* + * TESTS + */ + + function test_Delegation_AddToPool_Verifier( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useValidDelegationAmount(delegationAmount) { + uint256 stakingPreviousBalance = token.balanceOf(address(staking)); + + resetPrank(subgraphDataServiceAddress); + mint(subgraphDataServiceAddress, delegationAmount); + token.approve(address(staking), delegationAmount); + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.TokensToDelegationPoolAdded(users.indexer, subgraphDataServiceAddress, delegationAmount); + staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); + + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(delegatedTokens, delegationAmount); + assertEq(token.balanceOf(subgraphDataServiceAddress), 0); + assertEq(token.balanceOf(address(staking)), stakingPreviousBalance + delegationAmount); + } + + function test_Delegation_AddToPool_Payments( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useValidDelegationAmount(delegationAmount) { + uint256 stakingPreviousBalance = token.balanceOf(address(staking)); + + resetPrank(address(payments)); + mint(address(payments), delegationAmount); + token.approve(address(staking), delegationAmount); + staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); + + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(delegatedTokens, delegationAmount); + assertEq(token.balanceOf(subgraphDataServiceAddress), 0); + assertEq(token.balanceOf(address(staking)), stakingPreviousBalance + delegationAmount); + } + + function test_Delegation_AddToPool_RevertWhen_InvalidSender( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useValidDelegationAmount(delegationAmount) { + vm.assume(delegationAmount > 0); + vm.startPrank(users.delegator); + bytes memory expectedError = abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPoolSender.selector, + users.delegator + ); + vm.expectRevert(expectedError); + staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); + } + + function test_Delegation_AddToPool_RevertWhen_ZeroTokens( + uint256 amount + ) public useIndexer useProvision(amount, 0, 0) { + vm.startPrank(subgraphDataServiceAddress); + bytes memory expectedError = abi.encodeWithSelector(IHorizonStakingMain.HorizonStakingInvalidZeroTokens.selector); + vm.expectRevert(expectedError); + staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, 0); + } +} \ No newline at end of file From f4f9badb7d72547142e45c57e5f259fdf27d2b2e Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 13 Aug 2024 15:01:43 -0300 Subject: [PATCH 147/343] fix: moved pull tokens and made addToDelegationPool open to all --- .../interfaces/internal/IHorizonStakingMain.sol | 7 +------ .../horizon/contracts/staking/HorizonStaking.sol | 3 +-- .../test/staking/delegation/addToPool.t.sol | 14 -------------- 3 files changed, 2 insertions(+), 22 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index ede817cb8..2f45ef386 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -338,12 +338,6 @@ interface IHorizonStakingMain { */ error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); - /** - * @notice Thrown when an unauthorized sender attempts to deposit tokens into the delegation pool. - * @param sender The message sender address - */ - error HorizonStakingInvalidDelegationPoolSender(address sender); - /** * @notice Thrown when attempting to create a provision with an invalid maximum verifier cut. * @param maxVerifierCut The maximum verifier cut @@ -667,6 +661,7 @@ interface IHorizonStakingMain { * * @dev Requirements: * - `tokens` cannot be zero. + * - Caller must have previously approved this contract to pull tokens from their balance. * * Emits a {TokensToDelegationPoolAdded} event. * diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 731efaf08..6ad6dec7c 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -278,10 +278,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokens ) external override notPaused { require(tokens != 0, HorizonStakingInvalidZeroTokens()); - require(msg.sender == verifier || msg.sender == address(_graphPayments()), HorizonStakingInvalidDelegationPoolSender(msg.sender)); - _graphToken().pullTokens(msg.sender, tokens); DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); pool.tokens = pool.tokens + tokens; + _graphToken().pullTokens(msg.sender, tokens); emit TokensToDelegationPoolAdded(serviceProvider, verifier, tokens); } diff --git a/packages/horizon/test/staking/delegation/addToPool.t.sol b/packages/horizon/test/staking/delegation/addToPool.t.sol index 6335de7a9..bdafa4046 100644 --- a/packages/horizon/test/staking/delegation/addToPool.t.sol +++ b/packages/horizon/test/staking/delegation/addToPool.t.sol @@ -54,20 +54,6 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { assertEq(token.balanceOf(address(staking)), stakingPreviousBalance + delegationAmount); } - function test_Delegation_AddToPool_RevertWhen_InvalidSender( - uint256 amount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useValidDelegationAmount(delegationAmount) { - vm.assume(delegationAmount > 0); - vm.startPrank(users.delegator); - bytes memory expectedError = abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidDelegationPoolSender.selector, - users.delegator - ); - vm.expectRevert(expectedError); - staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); - } - function test_Delegation_AddToPool_RevertWhen_ZeroTokens( uint256 amount ) public useIndexer useProvision(amount, 0, 0) { From a183d7ed952165bb23c0eaa9efa12fefeea807f9 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 8 Aug 2024 15:23:36 -0300 Subject: [PATCH 148/343] fix: add subgraph service as a caller when collecting from curation contract (OZ C-03) --- .../contracts/curation/CurationStorage.sol | 13 +++++++ .../contracts/l2/curation/IL2Curation.sol | 6 +++ .../contracts/l2/curation/L2Curation.sol | 23 ++++++++++-- .../contracts/test/unit/l2/l2Curation.test.ts | 37 ++++++++++++++++--- 4 files changed, 69 insertions(+), 10 deletions(-) diff --git a/packages/contracts/contracts/curation/CurationStorage.sol b/packages/contracts/contracts/curation/CurationStorage.sol index bcbf0df6b..12f5b255b 100644 --- a/packages/contracts/contracts/curation/CurationStorage.sol +++ b/packages/contracts/contracts/curation/CurationStorage.sol @@ -68,3 +68,16 @@ abstract contract CurationV1Storage is Managed, ICuration { abstract contract CurationV2Storage is CurationV1Storage, Initializable { // Nothing here, just adding Initializable } + +/** + * @title Curation Storage version 3 + * @dev This contract holds the third version of the storage variables + * for the Curation and L2Curation contracts. + * It adds a new variable subgraphService to the storage. + * When adding new variables, create a new version that inherits this and update + * the contracts to use the new version instead. + */ +abstract contract CurationV3Storage is CurationV2Storage { + // Address of the subgraph service + address public subgraphService; +} diff --git a/packages/contracts/contracts/l2/curation/IL2Curation.sol b/packages/contracts/contracts/l2/curation/IL2Curation.sol index bbbfd82ff..b59960792 100644 --- a/packages/contracts/contracts/l2/curation/IL2Curation.sol +++ b/packages/contracts/contracts/l2/curation/IL2Curation.sol @@ -6,6 +6,12 @@ pragma solidity ^0.7.6; * @title Interface of the L2 Curation contract. */ interface IL2Curation { + /** + * @notice Set the subgraph service address. + * @param _subgraphService Address of the SubgraphService contract + */ + function setSubgraphService(address _subgraphService) external; + /** * @notice Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool. * @dev This function charges no tax and can only be called by GNS in specific scenarios (for now diff --git a/packages/contracts/contracts/l2/curation/L2Curation.sol b/packages/contracts/contracts/l2/curation/L2Curation.sol index 4d51bf3f1..efc690bb0 100644 --- a/packages/contracts/contracts/l2/curation/L2Curation.sol +++ b/packages/contracts/contracts/l2/curation/L2Curation.sol @@ -12,7 +12,7 @@ import { TokenUtils } from "../../utils/TokenUtils.sol"; import { IRewardsManager } from "../../rewards/IRewardsManager.sol"; import { Managed } from "../../governance/Managed.sol"; import { IGraphToken } from "../../token/IGraphToken.sol"; -import { CurationV2Storage } from "../../curation/CurationStorage.sol"; +import { CurationV3Storage } from "../../curation/CurationStorage.sol"; import { IGraphCurationToken } from "../../curation/IGraphCurationToken.sol"; import { IL2Curation } from "./IL2Curation.sol"; @@ -28,7 +28,7 @@ import { IL2Curation } from "./IL2Curation.sol"; * Holders can burn GCS using this contract to get GRT tokens back according to the * bonding curve. */ -contract L2Curation is CurationV2Storage, GraphUpgradeable, IL2Curation { +contract L2Curation is CurationV3Storage, GraphUpgradeable, IL2Curation { using SafeMathUpgradeable for uint256; /// @dev 100% in parts per million @@ -67,6 +67,11 @@ contract L2Curation is CurationV2Storage, GraphUpgradeable, IL2Curation { */ event Collected(bytes32 indexed subgraphDeploymentID, uint256 tokens); + /** + * @dev Emitted when the subgraph service is set. + */ + event SubgraphServiceSet(address indexed oldSubgraphService, address indexed newSubgraphService); + /** * @dev Modifier for functions that can only be called by the GNS contract */ @@ -131,6 +136,16 @@ contract L2Curation is CurationV2Storage, GraphUpgradeable, IL2Curation { _setCurationTokenMaster(_curationTokenMaster); } + /** + * @notice Set the subgraph service address + * @param _subgraphService Address of the subgraph service contract + */ + function setSubgraphService(address _subgraphService) external override onlyGovernor { + address oldSubgraphService = subgraphService; + subgraphService = _subgraphService; + emit SubgraphServiceSet(oldSubgraphService, _subgraphService); + } + /** * @notice Assign Graph Tokens collected as curation fees to the curation pool reserve. * @dev This function can only be called by the Staking contract and will do the bookeeping of @@ -139,8 +154,8 @@ contract L2Curation is CurationV2Storage, GraphUpgradeable, IL2Curation { * @param _tokens Amount of Graph Tokens to add to reserves */ function collect(bytes32 _subgraphDeploymentID, uint256 _tokens) external override { - // Only Staking contract is authorized as caller - require(msg.sender == address(staking()), "Caller must be the staking contract"); + // Only SubgraphService or Staking contract are authorized as caller + require(msg.sender == subgraphService || msg.sender == address(staking()), "Caller must be the subgraph service or staking contract"); // Must be curated to accept tokens require(isCurated(_subgraphDeploymentID), "Subgraph deployment must be curated to collect fees"); diff --git a/packages/contracts/test/unit/l2/l2Curation.test.ts b/packages/contracts/test/unit/l2/l2Curation.test.ts index f004318f1..29ac28319 100644 --- a/packages/contracts/test/unit/l2/l2Curation.test.ts +++ b/packages/contracts/test/unit/l2/l2Curation.test.ts @@ -150,6 +150,20 @@ describe('L2Curation:Config', () => { await expect(tx).revertedWith('Only Controller governor') }) }) + + describe('subgraphService', function () { + it('should set `subgraphService`', async function () { + const newSubgraphService = randomAddress() + await curation.connect(governor).setSubgraphService(newSubgraphService) + expect(await curation.subgraphService()).eq(newSubgraphService) + }) + + it('reject set `subgraphService` if not allowed', async function () { + const newSubgraphService = randomAddress() + const tx = curation.connect(me).setSubgraphService(newSubgraphService) + await expect(tx).revertedWith('Only Controller governor') + }) + }) }) describe('L2Curation', () => { @@ -158,6 +172,7 @@ describe('L2Curation', () => { let governor: SignerWithAddress let curator: SignerWithAddress let stakingMock: SignerWithAddress + let subgraphService: SignerWithAddress let gnsImpersonator: Signer let fixture: NetworkFixture @@ -322,14 +337,14 @@ describe('L2Curation', () => { expect(afterTokenTotalSupply).eq(beforeTokenTotalSupply) } - const shouldCollect = async (tokensToCollect: BigNumber) => { + const shouldCollect = async (tokensToCollect: BigNumber, signer: SignerWithAddress = stakingMock) => { // Before state const beforePool = await curation.pools(subgraphDeploymentID) const beforeTotalBalance = await grt.balanceOf(curation.address) // Source of tokens must be the staking for this to work - await grt.connect(stakingMock).transfer(curation.address, tokensToCollect) - const tx = curation.connect(stakingMock).collect(subgraphDeploymentID, tokensToCollect) + await grt.connect(signer).transfer(curation.address, tokensToCollect) + const tx = curation.connect(signer).collect(subgraphDeploymentID, tokensToCollect) await expect(tx).emit(curation, 'Collected').withArgs(subgraphDeploymentID, tokensToCollect) // After state @@ -343,7 +358,7 @@ describe('L2Curation', () => { before(async function () { // Use stakingMock so we can call collect - [me, curator, stakingMock] = await graph.getTestAccounts() + [me, curator, stakingMock, subgraphService] = await graph.getTestAccounts() ;({ governor } = await graph.getNamedAccounts()) fixture = new NetworkFixture(graph.provider) contracts = await fixture.load(governor, true) @@ -576,10 +591,10 @@ describe('L2Curation', () => { it('reject collect tokens distributed from invalid address', async function () { const tx = curation.connect(me).collect(subgraphDeploymentID, tokensToCollect) - await expect(tx).revertedWith('Caller must be the staking contract') + await expect(tx).revertedWith('Caller must be the subgraph service or staking contract') }) - it('should collect tokens distributed to the curation pool', async function () { + it('should collect tokens distributed to the curation pool from staking contract', async function () { await controller .connect(governor) .setContractProxy(utils.id('Staking'), stakingMock.address) @@ -592,6 +607,16 @@ describe('L2Curation', () => { await shouldCollect(toGRT('500.25')) }) + it('should collect tokens distributed to the curation pool from subgraph service address', async function () { + await grt.connect(governor).mint(subgraphService.address, tokensToCollect) + await curation.connect(governor).setSubgraphService(subgraphService.address) + await shouldCollect(toGRT('1'), subgraphService) + await shouldCollect(toGRT('10'), subgraphService) + await shouldCollect(toGRT('100'), subgraphService) + await shouldCollect(toGRT('200'), subgraphService) + await shouldCollect(toGRT('500.25'), subgraphService) + }) + it('should collect tokens and then unsignal all', async function () { await controller .connect(governor) From e0cf705efa5e466fdc04eb0ec4c7425d85c8c007 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 8 Aug 2024 19:33:52 -0300 Subject: [PATCH 149/343] fix: subgraphService access controll (OZ C-04) --- .../contracts/SubgraphService.sol | 9 ++- .../contracts/interfaces/ISubgraphService.sol | 7 +++ .../contracts/utilities/AllocationManager.sol | 11 +++- .../subgraphService/SubgraphService.t.sol | 16 +++++ .../test/subgraphService/allocate/stop.t.sol | 15 +++++ .../subgraphService/collect/collect.t.sol | 58 +++++++++++++++++-- 6 files changed, 108 insertions(+), 8 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index d0db789b9..b2f3940d0 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -221,6 +221,7 @@ contract SubgraphService is bytes calldata data ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { address allocationId = abi.decode(data, (address)); + require(allocations[allocationId].indexer == indexer, SubgraphServiceIndexerNotAuthorized(indexer, allocationId)); _closeAllocation(allocationId); emit ServiceStopped(indexer, data); } @@ -250,13 +251,13 @@ contract SubgraphService is address indexer, IGraphPayments.PaymentTypes paymentType, bytes calldata data - ) external override onlyValidProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + ) external override onlyProvisionAuthorized(indexer) onlyValidProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { uint256 paymentCollected = 0; if (paymentType == IGraphPayments.PaymentTypes.QueryFee) { paymentCollected = _collectQueryFees(data); } else if (paymentType == IGraphPayments.PaymentTypes.IndexingRewards) { - paymentCollected = _collectIndexingRewards(data); + paymentCollected = _collectIndexingRewards(indexer, data); } else { revert SubgraphServiceInvalidPaymentType(paymentType); } @@ -488,7 +489,9 @@ contract SubgraphService is ITAPCollector.SignedRAV memory signedRav = abi.decode(_data, (ITAPCollector.SignedRAV)); address indexer = signedRav.rav.serviceProvider; address allocationId = abi.decode(signedRav.rav.metadata, (address)); - bytes32 subgraphDeploymentId = allocations.get(allocationId).subgraphDeploymentId; + Allocation.State memory allocation = allocations.get(allocationId); + require(allocation.indexer == indexer, SubgraphServiceIndexerNotAuthorized(indexer, allocationId)); + bytes32 subgraphDeploymentId = allocation.subgraphDeploymentId; // release expired stake claims _releaseStake(indexer, 0); diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 2c378809e..cdb07c35e 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -93,6 +93,13 @@ interface ISubgraphService is IDataServiceFees { */ error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensCollected); + /** + * @notice Thrown when an indexer tries to perform an operation but they are not authorized + * @param indexer The address of the indexer + * @param allocationId The id of the allocation + */ + error SubgraphServiceIndexerNotAuthorized(address indexer, address allocationId); + /** * @notice Initialize the contract * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 850b3fd13..27aa47ce2 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -152,6 +152,13 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca */ error AllocationManagerAllocationSameSize(address allocationId, uint256 tokens); + /** + * @notice Thrown when an indexer is not allocation owner + * @param allocationId The id of the allocation + * @param indexer The address of the indexer + */ + error AllocationManagerIndexerNotAuthorized(address indexer, address allocationId); + /** * @notice Initializes the contract and parent contracts */ @@ -250,14 +257,16 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * * Emits a {IndexingRewardsCollected} event. * + * @param indexer The address of the indexer * @param _data Encoded data containing: * - address `allocationId`: The id of the allocation to collect rewards for * - bytes32 `poi`: The POI being presented */ - function _collectIndexingRewards(bytes memory _data) internal returns (uint256) { + function _collectIndexingRewards(address indexer, bytes memory _data) internal returns (uint256) { (address allocationId, bytes32 poi) = abi.decode(_data, (address, bytes32)); Allocation.State memory allocation = allocations.get(allocationId); + require(allocation.indexer == indexer, AllocationManagerIndexerNotAuthorized(indexer, allocationId)); require(allocation.isOpen(), AllocationManagerAllocationClosed(allocationId)); // Mint indexing rewards if all conditions are met diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 65498e485..f0bc41c58 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -33,4 +33,20 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { * HELPERS */ + function _createAndStartAllocation(address indexer, uint256 tokens) internal { + mint(indexer, tokens); + + resetPrank(indexer); + token.approve(address(staking), tokens); + staking.stakeTo(indexer, tokens); + staking.provision(indexer, address(subgraphService), tokens, maxSlashingPercentage, disputePeriod); + subgraphService.register(indexer, abi.encode("url", "geoHash", address(0))); + + (address newIndexerAllocationId, uint256 newIndexerAllocationKey) = makeAddrAndKey("newIndexerAllocationId"); + bytes32 digest = subgraphService.encodeAllocationProof(indexer, newIndexerAllocationId); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(newIndexerAllocationKey, digest); + + bytes memory data = abi.encode(subgraphDeployment, tokens, newIndexerAllocationId, abi.encodePacked(r, s, v)); + subgraphService.startService(indexer, data); + } } diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol index 06a2019ec..761a9a938 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol @@ -34,6 +34,21 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { assertEq(subgraphAllocatedTokens, 0); } + function testStop_RevertWhen_IndexerIsNotTheAllocationOwner(uint256 tokens) public useIndexer useAllocation(tokens) { + // Setup new indexer + address newIndexer = makeAddr("newIndexer"); + _createAndStartAllocation(newIndexer, tokens); + + // Attempt to close other indexer's allocation + bytes memory data = abi.encode(allocationID); + vm.expectRevert(abi.encodeWithSelector( + ISubgraphService.SubgraphServiceIndexerNotAuthorized.selector, + newIndexer, + allocationID + )); + subgraphService.stopService(newIndexer, data); + } + function testStop_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer useAllocation(tokens) { resetPrank(users.operator); bytes memory data = abi.encode(allocationID); diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index 0683c4712..a83fa8a58 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -9,6 +9,7 @@ import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPC import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; @@ -24,9 +25,10 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { */ function _getQueryFeeEncodedData( + address indexer, uint128 tokens ) private view returns (bytes memory) { - ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(tokens); + ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(indexer, tokens); bytes32 messageHash = tapCollector.encodeRAV(rav); (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, messageHash); bytes memory signature = abi.encodePacked(r, s, v); @@ -34,10 +36,10 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { return abi.encode(signedRAV); } - function _getRAV(uint128 tokens) private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { + function _getRAV(address indexer, uint128 tokens) private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { return ITAPCollector.ReceiptAggregateVoucher({ dataService: address(subgraphService), - serviceProvider: users.indexer, + serviceProvider: indexer, timestampNs: 0, valueAggregate: tokens, metadata: abi.encode(allocationID) @@ -78,7 +80,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { tokensPayment = bound(tokensPayment, minimumProvisionTokens, maxTokensPayment); uint128 tokensPayment128 = uint128(tokensPayment); IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; - bytes memory data = _getQueryFeeEncodedData(tokensPayment128); + bytes memory data = _getQueryFeeEncodedData(users.indexer, tokensPayment128); uint256 indexerPreviousBalance = token.balanceOf(users.indexer); @@ -115,4 +117,52 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { )); subgraphService.collect(users.indexer, invalidPaymentType, ""); } + + function testCollect_RevertWhen_NotAuthorized( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; + bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokens)); + resetPrank(users.operator); + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerNotAuthorized.selector, + users.operator, + users.indexer + )); + subgraphService.collect(users.indexer, paymentType, data); + } + + function testCollect_QueryFees_RevertWhen_IndexerIsNotAllocationOwner( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; + // Setup new indexer + address newIndexer = makeAddr("newIndexer"); + _createAndStartAllocation(newIndexer, tokens); + bytes memory data = _getQueryFeeEncodedData(newIndexer, uint128(tokens)); + // Attempt to collect from other indexer's allocation + vm.expectRevert(abi.encodeWithSelector( + ISubgraphService.SubgraphServiceIndexerNotAuthorized.selector, + newIndexer, + allocationID + )); + subgraphService.collect(newIndexer, paymentType, data); + } + + function testCollect_IndexingFees_RevertWhen_IndexerIsNotAllocationOwner( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + // Setup new indexer + address newIndexer = makeAddr("newIndexer"); + _createAndStartAllocation(newIndexer, tokens); + bytes memory data = abi.encode(allocationID, bytes32("POI1")); + // Attempt to collect from other indexer's allocation + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerIndexerNotAuthorized.selector, + newIndexer, + allocationID + )); + subgraphService.collect(newIndexer, paymentType, data); + } } From 857f27b75db2051dc8f52592c1b812d338fe57b3 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 9 Aug 2024 17:33:39 -0300 Subject: [PATCH 150/343] fix: collecting other indexers query fees --- .../contracts/SubgraphService.sol | 11 ++++++----- .../contracts/interfaces/ISubgraphService.sol | 14 ++++++++++---- .../test/subgraphService/allocate/stop.t.sol | 5 ++--- .../test/subgraphService/collect/collect.t.sol | 18 ++++++++++++++++-- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index b2f3940d0..0ba7c3ccd 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -221,7 +221,7 @@ contract SubgraphService is bytes calldata data ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { address allocationId = abi.decode(data, (address)); - require(allocations[allocationId].indexer == indexer, SubgraphServiceIndexerNotAuthorized(indexer, allocationId)); + require(allocations[allocationId].indexer == indexer, SubgraphServiceInvalidIndexer(indexer)); _closeAllocation(allocationId); emit ServiceStopped(indexer, data); } @@ -255,7 +255,7 @@ contract SubgraphService is uint256 paymentCollected = 0; if (paymentType == IGraphPayments.PaymentTypes.QueryFee) { - paymentCollected = _collectQueryFees(data); + paymentCollected = _collectQueryFees(indexer, data); } else if (paymentType == IGraphPayments.PaymentTypes.IndexingRewards) { paymentCollected = _collectIndexingRewards(indexer, data); } else { @@ -485,12 +485,13 @@ contract SubgraphService is * * @param _data Encoded data containing a signed RAV */ - function _collectQueryFees(bytes memory _data) private returns (uint256 feesCollected) { + function _collectQueryFees(address indexer, bytes memory _data) private returns (uint256 feesCollected) { ITAPCollector.SignedRAV memory signedRav = abi.decode(_data, (ITAPCollector.SignedRAV)); - address indexer = signedRav.rav.serviceProvider; + address serviceProvider = signedRav.rav.serviceProvider; + require(indexer == serviceProvider, SubgraphServiceInvalidIndexer(indexer)); address allocationId = abi.decode(signedRav.rav.metadata, (address)); Allocation.State memory allocation = allocations.get(allocationId); - require(allocation.indexer == indexer, SubgraphServiceIndexerNotAuthorized(indexer, allocationId)); + require(allocation.indexer == indexer, SubgraphServiceInvalidAllocationIndexer(indexer, allocationId)); bytes32 subgraphDeploymentId = allocation.subgraphDeploymentId; // release expired stake claims diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index cdb07c35e..594fa0865 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -94,11 +94,17 @@ interface ISubgraphService is IDataServiceFees { error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensCollected); /** - * @notice Thrown when an indexer tries to perform an operation but they are not authorized - * @param indexer The address of the indexer - * @param allocationId The id of the allocation + * @notice @notice Thrown when the service provider in the RAV does not match the expected indexer. + * @param indexer The address of the expected indexer. + */ + error SubgraphServiceInvalidIndexer(address indexer); + + /** + * @notice Thrown when the indexer in the allocation state does not match the expected indexer. + * @param indexer The address of the expected indexer. + * @param allocationId The id of the allocation. */ - error SubgraphServiceIndexerNotAuthorized(address indexer, address allocationId); + error SubgraphServiceInvalidAllocationIndexer(address indexer, address allocationId); /** * @notice Initialize the contract diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol index 761a9a938..cf1b20dca 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol @@ -42,9 +42,8 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { // Attempt to close other indexer's allocation bytes memory data = abi.encode(allocationID); vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceIndexerNotAuthorized.selector, - newIndexer, - allocationID + ISubgraphService.SubgraphServiceInvalidIndexer.selector, + newIndexer )); subgraphService.stopService(newIndexer, data); } diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index a83fa8a58..5c4a67834 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -140,15 +140,29 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { address newIndexer = makeAddr("newIndexer"); _createAndStartAllocation(newIndexer, tokens); bytes memory data = _getQueryFeeEncodedData(newIndexer, uint128(tokens)); - // Attempt to collect from other indexer's allocation vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceIndexerNotAuthorized.selector, + ISubgraphService.SubgraphServiceInvalidAllocationIndexer.selector, newIndexer, allocationID )); subgraphService.collect(newIndexer, paymentType, data); } + function testCollect_QueryFees_RevertWhen_CollectingOtherIndexersFees( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; + // Setup new indexer + address newIndexer = makeAddr("newIndexer"); + _createAndStartAllocation(newIndexer, tokens); + bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokens)); + vm.expectRevert(abi.encodeWithSelector( + ISubgraphService.SubgraphServiceInvalidIndexer.selector, + newIndexer + )); + subgraphService.collect(newIndexer, paymentType, data); + } + function testCollect_IndexingFees_RevertWhen_IndexerIsNotAllocationOwner( uint256 tokens ) public useIndexer useAllocation(tokens) { From 0364b4115f233cbff44749652d78c786a853675c Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 13 Aug 2024 14:31:11 -0300 Subject: [PATCH 151/343] fix: renaming errors and variables --- .../contracts/SubgraphService.sol | 20 +++++++++++-------- .../contracts/interfaces/ISubgraphService.sol | 7 ++++--- .../contracts/utilities/AllocationManager.sol | 8 ++++---- .../test/subgraphService/allocate/stop.t.sol | 5 +++-- .../subgraphService/collect/collect.t.sol | 9 +++++---- 5 files changed, 28 insertions(+), 21 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 0ba7c3ccd..1833515c4 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -221,7 +221,7 @@ contract SubgraphService is bytes calldata data ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { address allocationId = abi.decode(data, (address)); - require(allocations[allocationId].indexer == indexer, SubgraphServiceInvalidIndexer(indexer)); + require(allocations[allocationId].indexer == indexer, SubgraphServiceAllocationNotAuthorized(indexer, allocationId)); _closeAllocation(allocationId); emit ServiceStopped(indexer, data); } @@ -483,19 +483,23 @@ contract SubgraphService is * Emits a {StakeClaimLocked} event. * Emits a {QueryFeesCollected} event. * + * @param _indexer The address of the indexer * @param _data Encoded data containing a signed RAV */ - function _collectQueryFees(address indexer, bytes memory _data) private returns (uint256 feesCollected) { + function _collectQueryFees(address _indexer, bytes memory _data) private returns (uint256 feesCollected) { ITAPCollector.SignedRAV memory signedRav = abi.decode(_data, (ITAPCollector.SignedRAV)); - address serviceProvider = signedRav.rav.serviceProvider; - require(indexer == serviceProvider, SubgraphServiceInvalidIndexer(indexer)); + address indexer = signedRav.rav.serviceProvider; + require(_indexer == indexer, SubgraphServiceIndexerMismatch(indexer, _indexer)); address allocationId = abi.decode(signedRav.rav.metadata, (address)); Allocation.State memory allocation = allocations.get(allocationId); - require(allocation.indexer == indexer, SubgraphServiceInvalidAllocationIndexer(indexer, allocationId)); + + // Not strictly necessary: if an indexer collects another's voucher, they lock their stake with no gains. + // We include the check to guard against potential malicious payers deceiving the indexer. + require(allocation.indexer == _indexer, SubgraphServiceAllocationNotAuthorized(_indexer, allocationId)); bytes32 subgraphDeploymentId = allocation.subgraphDeploymentId; // release expired stake claims - _releaseStake(indexer, 0); + _releaseStake(_indexer, 0); // Collect from GraphPayments PaymentCuts memory queryFeePaymentCuts = _getQueryFeePaymentCuts(subgraphDeploymentId); @@ -519,7 +523,7 @@ contract SubgraphService is // lock stake as economic security for fees uint256 tokensToLock = tokensCollected * stakeToFeesRatio; uint256 unlockTimestamp = block.timestamp + _disputeManager().getDisputePeriod(); - _lockStake(indexer, tokensToLock, unlockTimestamp); + _lockStake(_indexer, tokensToLock, unlockTimestamp); // calculate service and curator cuts tokensCurators = tokensCollected.mulPPMRoundUp(queryFeePaymentCuts.curationCut); @@ -535,7 +539,7 @@ contract SubgraphService is } } - emit QueryFeesCollected(indexer, tokensCollected, tokensCurators, tokensSubgraphService); + emit QueryFeesCollected(_indexer, tokensCollected, tokensCurators, tokensSubgraphService); return tokensCollected; } diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 594fa0865..4cceee6b0 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -95,16 +95,17 @@ interface ISubgraphService is IDataServiceFees { /** * @notice @notice Thrown when the service provider in the RAV does not match the expected indexer. - * @param indexer The address of the expected indexer. + * @param providedIndexer The address of the provided indexer. + * @param expectedIndexer The address of the expected indexer. */ - error SubgraphServiceInvalidIndexer(address indexer); + error SubgraphServiceIndexerMismatch(address providedIndexer, address expectedIndexer); /** * @notice Thrown when the indexer in the allocation state does not match the expected indexer. * @param indexer The address of the expected indexer. * @param allocationId The id of the allocation. */ - error SubgraphServiceInvalidAllocationIndexer(address indexer, address allocationId); + error SubgraphServiceAllocationNotAuthorized(address indexer, address allocationId); /** * @notice Initialize the contract diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 27aa47ce2..bf6165272 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -157,7 +157,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * @param allocationId The id of the allocation * @param indexer The address of the indexer */ - error AllocationManagerIndexerNotAuthorized(address indexer, address allocationId); + error AllocationManagerNotAuthorized(address indexer, address allocationId); /** * @notice Initializes the contract and parent contracts @@ -257,16 +257,16 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * * Emits a {IndexingRewardsCollected} event. * - * @param indexer The address of the indexer + * @param _indexer The address of the indexer * @param _data Encoded data containing: * - address `allocationId`: The id of the allocation to collect rewards for * - bytes32 `poi`: The POI being presented */ - function _collectIndexingRewards(address indexer, bytes memory _data) internal returns (uint256) { + function _collectIndexingRewards(address _indexer, bytes memory _data) internal returns (uint256) { (address allocationId, bytes32 poi) = abi.decode(_data, (address, bytes32)); Allocation.State memory allocation = allocations.get(allocationId); - require(allocation.indexer == indexer, AllocationManagerIndexerNotAuthorized(indexer, allocationId)); + require(allocation.indexer == _indexer, AllocationManagerNotAuthorized(_indexer, allocationId)); require(allocation.isOpen(), AllocationManagerAllocationClosed(allocationId)); // Mint indexing rewards if all conditions are met diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol index cf1b20dca..73466c50c 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol @@ -42,8 +42,9 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { // Attempt to close other indexer's allocation bytes memory data = abi.encode(allocationID); vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceInvalidIndexer.selector, - newIndexer + ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, + newIndexer, + allocationID )); subgraphService.stopService(newIndexer, data); } diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index 5c4a67834..034af2f9f 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -86,7 +86,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { _approveCollector(tokensPayment128); subgraphService.collect(users.indexer, paymentType, data); - + uint256 indexerBalance = token.balanceOf(users.indexer); uint256 tokensProtocol = tokensPayment128.mulPPM(protocolPaymentCut); uint256 curationTokens = tokensPayment128.mulPPMRoundUp(curationCut); @@ -141,7 +141,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { _createAndStartAllocation(newIndexer, tokens); bytes memory data = _getQueryFeeEncodedData(newIndexer, uint128(tokens)); vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceInvalidAllocationIndexer.selector, + ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, newIndexer, allocationID )); @@ -157,7 +157,8 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { _createAndStartAllocation(newIndexer, tokens); bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokens)); vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceInvalidIndexer.selector, + ISubgraphService.SubgraphServiceIndexerMismatch.selector, + users.indexer, newIndexer )); subgraphService.collect(newIndexer, paymentType, data); @@ -173,7 +174,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { bytes memory data = abi.encode(allocationID, bytes32("POI1")); // Attempt to collect from other indexer's allocation vm.expectRevert(abi.encodeWithSelector( - AllocationManager.AllocationManagerIndexerNotAuthorized.selector, + AllocationManager.AllocationManagerNotAuthorized.selector, newIndexer, allocationID )); From c783118d4305b2ab74ab759383ff9a71e0f245c9 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 14 Aug 2024 16:21:48 -0300 Subject: [PATCH 152/343] fix: resize only open allocations and access control (OZ C-05) --- .../contracts/SubgraphService.sol | 2 +- .../contracts/utilities/AllocationManager.sol | 13 ++- .../test/SubgraphBaseTest.t.sol | 2 +- .../test/mocks/MockRewardsManager.sol | 12 +- .../test/shared/SubgraphServiceShared.t.sol | 17 ++- .../subgraphService/SubgraphService.t.sol | 49 ++++++-- .../subgraphService/allocate/resize.t.sol | 106 ++++++++++++++++++ .../test/subgraphService/allocate/stop.t.sol | 9 +- .../subgraphService/collect/collect.t.sol | 11 +- .../subgraph-service/test/utils/Constants.sol | 1 + 10 files changed, 187 insertions(+), 35 deletions(-) create mode 100644 packages/subgraph-service/test/subgraphService/allocate/resize.t.sol diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 1833515c4..9ae1f18c7 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -299,7 +299,7 @@ contract SubgraphService is onlyRegisteredIndexer(indexer) whenNotPaused { - _resizeAllocation(allocationId, tokens, delegationRatio); + _resizeAllocation(indexer, allocationId, tokens, delegationRatio); } /** diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index bf6165272..800aca723 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -340,20 +340,26 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * These will be paid out when the indexer presents a POI. * * Requirements: + * - `_indexer` must be the owner of the allocation + * - Allocation must be open * - `_tokens` must be different from the current allocation size * * Emits a {AllocationResized} event. * + * @param _indexer The address of the indexer * @param _allocationId The id of the allocation to be resized * @param _tokens The new amount of tokens to allocate * @param _delegationRatio The delegation ratio to consider when locking tokens */ function _resizeAllocation( + address _indexer, address _allocationId, uint256 _tokens, uint32 _delegationRatio ) internal returns (Allocation.State memory) { Allocation.State memory allocation = allocations.get(_allocationId); + require(allocation.indexer == _indexer, AllocationManagerNotAuthorized(_indexer, _allocationId)); + require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId)); require(_tokens != allocation.tokens, AllocationManagerAllocationSameSize(_allocationId, _tokens)); // Update provision tracker @@ -378,8 +384,11 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca allocations[_allocationId].accRewardsPending += accRewardsPending; // Update total allocated tokens for the subgraph deployment - // underflow: subgraphAllocatedTokens should at least be oldTokens so it can't underflow - subgraphAllocatedTokens[allocation.subgraphDeploymentId] += (_tokens - oldTokens); + if (_tokens > oldTokens) { + subgraphAllocatedTokens[allocation.subgraphDeploymentId] += (_tokens - oldTokens); + } else { + subgraphAllocatedTokens[allocation.subgraphDeploymentId] -= (oldTokens - _tokens); + } emit AllocationResized(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, _tokens, oldTokens); return allocations[_allocationId]; diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index 8344875bf..5e1322de3 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -89,7 +89,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { resetPrank(users.deployer); GraphProxy stakingProxy = new GraphProxy(address(0), address(proxyAdmin)); - rewardsManager = new MockRewardsManager(token, rewardsPerSignal); + rewardsManager = new MockRewardsManager(token, rewardsPerSignal, rewardsPerSubgraphAllocationUpdate); curation = new MockCuration(); // GraphPayments predict address diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol index dad236c7a..52ff6a4dc 100644 --- a/packages/subgraph-service/test/mocks/MockRewardsManager.sol +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -22,12 +22,15 @@ contract MockRewardsManager is IRewardsManager { MockGRTToken public token; uint256 public rewardsPerSignal; + uint256 public rewardsPerSubgraphAllocationUpdate; + mapping(bytes32 => bool) public subgraphs; uint256 private constant FIXED_POINT_SCALING_FACTOR = 1e18; - constructor(MockGRTToken _token, uint256 _rewardsPerSignal) { + constructor(MockGRTToken _token, uint256 _rewardsPerSignal, uint256 _rewardsPerSubgraphAllocationUpdate) { token = _token; rewardsPerSignal = _rewardsPerSignal; + rewardsPerSubgraphAllocationUpdate = _rewardsPerSubgraphAllocationUpdate; } // -- Config -- @@ -83,7 +86,12 @@ contract MockRewardsManager is IRewardsManager { function onSubgraphSignalUpdate(bytes32) external pure returns (uint256) {} - function onSubgraphAllocationUpdate(bytes32) external pure returns (uint256) { + function onSubgraphAllocationUpdate(bytes32 _subgraphDeploymentID) external returns (uint256) { + if (subgraphs[_subgraphDeploymentID]) { + return rewardsPerSubgraphAllocationUpdate; + } + + subgraphs[_subgraphDeploymentID] = true; return 0; } } \ No newline at end of file diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol index 3db0509ec..a67a151c1 100644 --- a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -49,11 +49,15 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { */ function _createProvision(uint256 tokens) internal { - token.approve(address(staking), tokens); - staking.stakeTo(users.indexer, tokens); + _stakeTo(users.indexer, tokens); staking.provision(users.indexer, address(subgraphService), tokens, maxSlashingPercentage, disputePeriod); } + function _addToProvision(address _indexer, uint256 _tokens) internal { + _stakeTo(_indexer, _tokens); + staking.addToProvision(_indexer, address(subgraphService), _tokens); + } + function _registerIndexer(address rewardsDestination) internal { subgraphService.register(users.indexer, abi.encode("url", "geoHash", rewardsDestination)); } @@ -65,4 +69,13 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); subgraphService.startService(users.indexer, data); } + + /* + * PRIVATE + */ + + function _stakeTo(address _indexer, uint256 _tokens) internal { + token.approve(address(staking), _tokens); + staking.stakeTo(_indexer, _tokens); + } } diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index f0bc41c58..89b613344 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -3,9 +3,14 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; + import { SubgraphServiceSharedTest } from "../shared/SubgraphServiceShared.t.sol"; contract SubgraphServiceTest is SubgraphServiceSharedTest { + using PPMMath for uint256; /* * VARIABLES @@ -33,20 +38,44 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { * HELPERS */ - function _createAndStartAllocation(address indexer, uint256 tokens) internal { - mint(indexer, tokens); + function _createAndStartAllocation(address _indexer, uint256 _tokens) internal { + mint(_indexer, _tokens); - resetPrank(indexer); - token.approve(address(staking), tokens); - staking.stakeTo(indexer, tokens); - staking.provision(indexer, address(subgraphService), tokens, maxSlashingPercentage, disputePeriod); - subgraphService.register(indexer, abi.encode("url", "geoHash", address(0))); + resetPrank(_indexer); + token.approve(address(staking), _tokens); + staking.stakeTo(_indexer, _tokens); + staking.provision(_indexer, address(subgraphService), _tokens, maxSlashingPercentage, disputePeriod); + subgraphService.register(_indexer, abi.encode("url", "geoHash", address(0))); (address newIndexerAllocationId, uint256 newIndexerAllocationKey) = makeAddrAndKey("newIndexerAllocationId"); - bytes32 digest = subgraphService.encodeAllocationProof(indexer, newIndexerAllocationId); + bytes32 digest = subgraphService.encodeAllocationProof(_indexer, newIndexerAllocationId); (uint8 v, bytes32 r, bytes32 s) = vm.sign(newIndexerAllocationKey, digest); - bytes memory data = abi.encode(subgraphDeployment, tokens, newIndexerAllocationId, abi.encodePacked(r, s, v)); - subgraphService.startService(indexer, data); + bytes memory data = abi.encode(subgraphDeployment, _tokens, newIndexerAllocationId, abi.encodePacked(r, s, v)); + subgraphService.startService(_indexer, data); + } + + function _stopAllocation(address _indexer, address _allocationID) internal { + resetPrank(_indexer); + assertTrue(subgraphService.isActiveAllocation(_allocationID)); + bytes memory data = abi.encode(_allocationID); + vm.expectEmit(address(subgraphService)); + emit IDataService.ServiceStopped(_indexer, data); + subgraphService.stopService(_indexer, data); + + uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeployment); + assertEq(subgraphAllocatedTokens, 0); + } + + function _collectIndexingRewards(address _indexer, address _allocationID, uint256 _tokens) internal { + resetPrank(_indexer); + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + bytes memory data = abi.encode(_allocationID, bytes32("POI1")); + + uint256 indexerPreviousProvisionBalance = staking.getProviderTokensAvailable(_indexer, address(subgraphService)); + subgraphService.collect(_indexer, paymentType, data); + + uint256 indexerProvisionBalance = staking.getProviderTokensAvailable(_indexer, address(subgraphService)); + assertEq(indexerProvisionBalance, indexerPreviousProvisionBalance + _tokens.mulPPM(rewardsPerSignal)); } } diff --git a/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol b/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol new file mode 100644 index 000000000..6010a1da7 --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { Allocation } from "../../../contracts/libraries/Allocation.sol"; +import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; + +contract SubgraphServiceAllocateResizeTest is SubgraphServiceTest { + + /* + * Helpers + */ + + function _setupResize(address _indexer, uint256 _tokens) private { + + token.approve(address(staking), _tokens); + staking.stakeTo(_indexer, _tokens); + staking.addToProvision(_indexer, address(subgraphService), _tokens); + } + + function _resizeAllocation(address _indexer, address _allocationID, bytes32 _subgraphDeployment, uint256 _tokens) private { + uint256 oldAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(_subgraphDeployment); + vm.expectEmit(address(subgraphService)); + emit AllocationManager.AllocationResized(_indexer, _allocationID, _subgraphDeployment, _tokens, oldAllocatedTokens); + subgraphService.resizeAllocation(_indexer, _allocationID, _tokens); + + Allocation.State memory allocation = subgraphService.getAllocation(_allocationID); + assertEq(allocation.tokens, _tokens); + assertEq(allocation.accRewardsPerAllocatedToken, rewardsPerSubgraphAllocationUpdate); + + uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(_subgraphDeployment); + assertEq(subgraphAllocatedTokens, _tokens); + } + + /* + * TESTS + */ + + function testResize_Allocation(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { + resizeTokens = bound(resizeTokens, 1, MAX_TOKENS); + vm.assume(resizeTokens != tokens); + + mint(users.indexer, resizeTokens); + _addToProvision(users.indexer, resizeTokens); + _resizeAllocation(users.indexer, allocationID, subgraphDeployment, resizeTokens); + } + + function testResize_Allocation_AfterCollectingIndexingRewards(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { + resizeTokens = bound(resizeTokens, 1, MAX_TOKENS); + vm.assume(resizeTokens != tokens); + + mint(users.indexer, resizeTokens); + _collectIndexingRewards(users.indexer, allocationID, tokens); + _addToProvision(users.indexer, resizeTokens); + _resizeAllocation(users.indexer, allocationID, subgraphDeployment, resizeTokens); + } + + function testResize_Allocation_SecondTime(uint256 tokens, uint256 firstResizeTokens, uint256 secondResizeTokens) public useIndexer useAllocation(tokens) { + firstResizeTokens = bound(firstResizeTokens, 1, MAX_TOKENS); + secondResizeTokens = bound(secondResizeTokens, 1, MAX_TOKENS); + vm.assume(firstResizeTokens != tokens); + vm.assume(secondResizeTokens != firstResizeTokens); + + mint(users.indexer, firstResizeTokens); + _addToProvision(users.indexer, firstResizeTokens); + _resizeAllocation(users.indexer, allocationID, subgraphDeployment, firstResizeTokens); + + mint(users.indexer, secondResizeTokens); + _addToProvision(users.indexer, secondResizeTokens); + _resizeAllocation(users.indexer, allocationID, subgraphDeployment, secondResizeTokens); + } + + function testResize_RevertWhen_NotAuthorized(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { + resizeTokens = bound(resizeTokens, tokens + 1, MAX_TOKENS); + + address newIndexer = makeAddr("newIndexer"); + _createAndStartAllocation(newIndexer, tokens); + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerNotAuthorized.selector, + newIndexer, + allocationID + )); + subgraphService.resizeAllocation(newIndexer, allocationID, resizeTokens); + } + + function testResize_RevertWhen_SameSize(uint256 tokens) public useIndexer useAllocation(tokens) { + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerAllocationSameSize.selector, + allocationID, + tokens + )); + subgraphService.resizeAllocation(users.indexer, allocationID, tokens); + } + + function testResize_RevertIf_AllocationIsClosed(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { + resizeTokens = bound(resizeTokens, tokens + 1, MAX_TOKENS); + _stopAllocation(users.indexer, allocationID); + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerAllocationClosed.selector, + allocationID + )); + subgraphService.resizeAllocation(users.indexer, allocationID, resizeTokens); + } +} diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol index 73466c50c..6e53ab886 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol @@ -24,14 +24,7 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { */ function testStop_Allocation(uint256 tokens) public useIndexer useAllocation(tokens) { - assertTrue(subgraphService.isActiveAllocation(allocationID)); - bytes memory data = abi.encode(allocationID); - vm.expectEmit(address(subgraphService)); - emit IDataService.ServiceStopped(users.indexer, data); - subgraphService.stopService(users.indexer, data); - - uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeployment); - assertEq(subgraphAllocatedTokens, 0); + _stopAllocation(users.indexer, allocationID); } function testStop_RevertWhen_IndexerIsNotTheAllocationOwner(uint256 tokens) public useIndexer useAllocation(tokens) { diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index 034af2f9f..b9f2fbcd1 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -96,15 +96,8 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { assertEq(indexerBalance, indexerPreviousBalance + expectedIndexerTokensPayment); } - function testCollect_IndexingFees(uint256 tokens) public useIndexer useAllocation(tokens) { - IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; - bytes memory data = abi.encode(allocationID, bytes32("POI1")); - - uint256 indexerPreviousProvisionBalance = staking.getProviderTokensAvailable(users.indexer, address(subgraphService)); - subgraphService.collect(users.indexer, paymentType, data); - - uint256 indexerProvisionBalance = staking.getProviderTokensAvailable(users.indexer, address(subgraphService)); - assertEq(indexerProvisionBalance, indexerPreviousProvisionBalance + tokens.mulPPM(rewardsPerSignal)); + function testCollect_IndexingRewards(uint256 tokens) public useIndexer useAllocation(tokens) { + _collectIndexingRewards(users.indexer, allocationID, tokens); } function testCollect_RevertWhen_InvalidPayment( diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index 75ff738a8..e35659062 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -25,4 +25,5 @@ abstract contract Constants { uint256 internal constant protocolPaymentCut = 10000; // RewardsMananger parameters uint256 public constant rewardsPerSignal = 10000; + uint256 public constant rewardsPerSubgraphAllocationUpdate = 1000; } \ No newline at end of file From 787604656e76c33040000283d4491f86b3127f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 15 Aug 2024 13:32:25 -0300 Subject: [PATCH 153/343] fix: change pending rewards due to resize to token amounts instead of per token (OZ-H01) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/rewards/IRewardsIssuer.sol | 9 ++++- .../contracts/rewards/IRewardsManager.sol | 2 + .../contracts/rewards/RewardsManager.sol | 33 ++++++++++++--- .../contracts/staking/IStakingBase.sol | 4 +- .../contracts/contracts/staking/Staking.sol | 4 +- packages/contracts/package.json | 2 +- .../staking/HorizonStakingExtension.sol | 5 ++- .../test/data-service/DataService.t.sol | 16 ++++---- .../test/staking/allocation/allocation.t.sol | 3 +- .../contracts/SubgraphService.sol | 19 +++++++-- .../contracts/libraries/Allocation.sol | 3 +- .../contracts/utilities/AllocationManager.sol | 7 +++- .../test/mocks/MockRewardsManager.sol | 2 + .../subgraphService/allocate/resize.t.sol | 40 ++++++++++++++----- yarn.lock | 4 +- 15 files changed, 113 insertions(+), 40 deletions(-) diff --git a/packages/contracts/contracts/rewards/IRewardsIssuer.sol b/packages/contracts/contracts/rewards/IRewardsIssuer.sol index 949c564a2..a5400a6cf 100644 --- a/packages/contracts/contracts/rewards/IRewardsIssuer.sol +++ b/packages/contracts/contracts/rewards/IRewardsIssuer.sol @@ -10,13 +10,20 @@ interface IRewardsIssuer { * @return subgraphDeploymentId Subgraph deployment id for the allocation * @return tokens Amount of allocated tokens * @return accRewardsPerAllocatedToken Rewards snapshot + * @return accRewardsPending Tokens pending to be claimed */ function getAllocationData( address allocationId ) external view - returns (address indexer, bytes32 subgraphDeploymentId, uint256 tokens, uint256 accRewardsPerAllocatedToken); + returns ( + address indexer, + bytes32 subgraphDeploymentId, + uint256 tokens, + uint256 accRewardsPerAllocatedToken, + uint256 accRewardsPending + ); /** * @notice Return the total amount of tokens allocated to subgraph. diff --git a/packages/contracts/contracts/rewards/IRewardsManager.sol b/packages/contracts/contracts/rewards/IRewardsManager.sol index e511748e3..4030ad2e5 100644 --- a/packages/contracts/contracts/rewards/IRewardsManager.sol +++ b/packages/contracts/contracts/rewards/IRewardsManager.sol @@ -43,6 +43,8 @@ interface IRewardsManager { function getRewards(address _allocationID) external view returns (uint256); + function calcRewards(uint256 _tokens, uint256 _accRewardsPerAllocatedToken) external pure returns (uint256); + // -- Updates -- function updateAccRewardsPerSignal() external returns (uint256); diff --git a/packages/contracts/contracts/rewards/RewardsManager.sol b/packages/contracts/contracts/rewards/RewardsManager.sol index 21512ec80..a9b3b61e2 100644 --- a/packages/contracts/contracts/rewards/RewardsManager.sol +++ b/packages/contracts/contracts/rewards/RewardsManager.sol @@ -357,12 +357,30 @@ contract RewardsManager is RewardsManagerV5Storage, GraphUpgradeable, IRewardsMa return 0; } - (, bytes32 subgraphDeploymentId, uint256 tokens, uint256 alloAccRewardsPerAllocatedToken) = IRewardsIssuer( - rewardsIssuer - ).getAllocationData(_allocationID); + ( + , + bytes32 subgraphDeploymentId, + uint256 tokens, + uint256 alloAccRewardsPerAllocatedToken, + uint256 accRewardsPending + ) = IRewardsIssuer(rewardsIssuer).getAllocationData(_allocationID); (uint256 accRewardsPerAllocatedToken, ) = getAccRewardsPerAllocatedToken(subgraphDeploymentId); - return _calcRewards(tokens, alloAccRewardsPerAllocatedToken, accRewardsPerAllocatedToken); + return + accRewardsPending.add(_calcRewards(tokens, alloAccRewardsPerAllocatedToken, accRewardsPerAllocatedToken)); + } + + /** + * @dev Calculate rewards for a given accumulated rewards per allocated token. + * @param _tokens Tokens allocated + * @param _accRewardsPerAllocatedToken Allocation accumulated rewards per token + * @return Rewards amount + */ + function calcRewards( + uint256 _tokens, + uint256 _accRewardsPerAllocatedToken + ) external pure override returns (uint256) { + return _accRewardsPerAllocatedToken.mul(_tokens).div(FIXED_POINT_SCALING_FACTOR); } /** @@ -400,7 +418,8 @@ contract RewardsManager is RewardsManagerV5Storage, GraphUpgradeable, IRewardsMa address indexer, bytes32 subgraphDeploymentID, uint256 tokens, - uint256 accRewardsPerAllocatedToken + uint256 accRewardsPerAllocatedToken, + uint256 accRewardsPending ) = IRewardsIssuer(rewardsIssuer).getAllocationData(_allocationID); uint256 updatedAccRewardsPerAllocatedToken = onSubgraphAllocationUpdate(subgraphDeploymentID); @@ -412,7 +431,9 @@ contract RewardsManager is RewardsManagerV5Storage, GraphUpgradeable, IRewardsMa } // Calculate rewards accrued by this allocation - uint256 rewards = _calcRewards(tokens, accRewardsPerAllocatedToken, updatedAccRewardsPerAllocatedToken); + uint256 rewards = accRewardsPending.add( + _calcRewards(tokens, accRewardsPerAllocatedToken, updatedAccRewardsPerAllocatedToken) + ); if (rewards > 0) { // Mint directly to rewards issuer for the reward amount // The rewards issuer contract will do bookkeeping of the reward and diff --git a/packages/contracts/contracts/staking/IStakingBase.sol b/packages/contracts/contracts/staking/IStakingBase.sol index 6ca3957f4..f01ca4326 100644 --- a/packages/contracts/contracts/staking/IStakingBase.sol +++ b/packages/contracts/contracts/staking/IStakingBase.sol @@ -366,7 +366,9 @@ interface IStakingBase is IStakingData { * @dev Note that this is only to make tests pass, as the staking contract with * this changes will never get deployed. HorizonStaking is taking it's place. */ - function getAllocationData(address _allocationID) external view returns (address, bytes32, uint256, uint256); + function getAllocationData( + address _allocationID + ) external view returns (address, bytes32, uint256, uint256, uint256); /** * @dev New function to get the allocation active status for the rewards manager diff --git a/packages/contracts/contracts/staking/Staking.sol b/packages/contracts/contracts/staking/Staking.sol index 83745c30a..d44d4767e 100644 --- a/packages/contracts/contracts/staking/Staking.sol +++ b/packages/contracts/contracts/staking/Staking.sol @@ -479,9 +479,9 @@ abstract contract Staking is StakingV4Storage, GraphUpgradeable, IStakingBase, M */ function getAllocationData( address _allocationID - ) external view override returns (address, bytes32, uint256, uint256) { + ) external view override returns (address, bytes32, uint256, uint256, uint256) { Allocation memory alloc = __allocations[_allocationID]; - return (alloc.indexer, alloc.subgraphDeploymentID, alloc.tokens, alloc.accRewardsPerAllocatedToken); + return (alloc.indexer, alloc.subgraphDeploymentID, alloc.tokens, alloc.accRewardsPerAllocatedToken, 0); } /** diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 85f02990d..b6cb22e0c 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "@arbitrum/sdk": "~3.1.13", - "@defi-wonderland/smock": "^2.0.7", + "@defi-wonderland/smock": "^2.4.0", "@ethersproject/experimental": "^5.6.0", "@graphprotocol/common-ts": "^1.8.3", "@nomiclabs/hardhat-ethers": "^2.2.3", diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 9667d35bb..3aa425154 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -238,14 +238,15 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon * @notice Return allocation data by ID. * @dev To be called by the Rewards Manager to calculate rewards issuance. * @dev TODO: Remove after Horizon transition period + * @dev Note that the accRewardsPending field is not used and will always be zero. * @param allocationID Address used as allocation identifier * @return Allocation data */ function getAllocationData( address allocationID - ) external view override returns (address, bytes32, uint256, uint256) { + ) external view override returns (address, bytes32, uint256, uint256, uint256) { Allocation memory allo = __DEPRECATED_allocations[allocationID]; - return (allo.indexer, allo.subgraphDeploymentID, allo.tokens, allo.accRewardsPerAllocatedToken); + return (allo.indexer, allo.subgraphDeploymentID, allo.tokens, allo.accRewardsPerAllocatedToken, 0); } /** diff --git a/packages/horizon/test/data-service/DataService.t.sol b/packages/horizon/test/data-service/DataService.t.sol index ecba7ae52..ea5fd51a7 100644 --- a/packages/horizon/test/data-service/DataService.t.sol +++ b/packages/horizon/test/data-service/DataService.t.sol @@ -254,13 +254,15 @@ contract DataServiceTest is HorizonStakingSharedTest { staking.setProvisionParameters(users.indexer, address(dataService), maxVerifierCut, thawingPeriod); // accept provision parameters - vm.expectEmit(); - emit IHorizonStakingMain.ProvisionParametersSet( - users.indexer, - address(dataService), - maxVerifierCut, - thawingPeriod - ); + if (maxVerifierCut != dataService.VERIFIER_CUT_MIN() || thawingPeriod != dataService.THAWING_PERIOD_MIN()) { + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionParametersSet( + users.indexer, + address(dataService), + maxVerifierCut, + thawingPeriod + ); + } dataService.acceptProvisionParameters(users.indexer); } diff --git a/packages/horizon/test/staking/allocation/allocation.t.sol b/packages/horizon/test/staking/allocation/allocation.t.sol index feb89ec7c..83e23a81f 100644 --- a/packages/horizon/test/staking/allocation/allocation.t.sol +++ b/packages/horizon/test/staking/allocation/allocation.t.sol @@ -26,12 +26,13 @@ contract HorizonStakingAllocationTest is HorizonStakingExtensionTest { } function testAllocation_GetAllocationData() public useAllocation { - (address indexer, bytes32 subgraphDeploymentID, uint256 tokens, uint256 accRewardsPerAllocatedToken) = + (address indexer, bytes32 subgraphDeploymentID, uint256 tokens, uint256 accRewardsPerAllocatedToken, uint256 accRewardsPending) = staking.getAllocationData(_allocationId); assertEq(indexer, _allocation.indexer); assertEq(subgraphDeploymentID, _allocation.subgraphDeploymentID); assertEq(tokens, _allocation.tokens); assertEq(accRewardsPerAllocatedToken, _allocation.accRewardsPerAllocatedToken); + assertEq(accRewardsPending, 0); } function testAllocation_GetAllocationState_Active() public useAllocation { diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 9ae1f18c7..a3b9d1541 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -221,7 +221,10 @@ contract SubgraphService is bytes calldata data ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { address allocationId = abi.decode(data, (address)); - require(allocations[allocationId].indexer == indexer, SubgraphServiceAllocationNotAuthorized(indexer, allocationId)); + require( + allocations[allocationId].indexer == indexer, + SubgraphServiceAllocationNotAuthorized(indexer, allocationId) + ); _closeAllocation(allocationId); emit ServiceStopped(indexer, data); } @@ -251,7 +254,14 @@ contract SubgraphService is address indexer, IGraphPayments.PaymentTypes paymentType, bytes calldata data - ) external override onlyProvisionAuthorized(indexer) onlyValidProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + ) + external + override + onlyProvisionAuthorized(indexer) + onlyValidProvision(indexer) + onlyRegisteredIndexer(indexer) + whenNotPaused + { uint256 paymentCollected = 0; if (paymentType == IGraphPayments.PaymentTypes.QueryFee) { @@ -391,13 +401,14 @@ contract SubgraphService is */ function getAllocationData( address allocationId - ) external view override returns (address, bytes32, uint256, uint256) { + ) external view override returns (address, bytes32, uint256, uint256, uint256) { Allocation.State memory allo = allocations[allocationId]; return ( allo.indexer, allo.subgraphDeploymentId, allo.tokens, - allo.accRewardsPerAllocatedToken + allo.accRewardsPending + allo.accRewardsPerAllocatedToken, + allo.accRewardsPending ); } diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index 0df8f6e21..7511f360a 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -26,8 +26,7 @@ library Allocation { uint256 lastPOIPresentedAt; // Accumulated rewards per allocated token uint256 accRewardsPerAllocatedToken; - // Accumulated rewards per allocated token that are pending to be claimed - // due to an allocation resize + // Accumulated rewards that are pending to be claimed due allocation resize uint256 accRewardsPending; } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 800aca723..1ddb25f5e 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -374,14 +374,17 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca uint256 accRewardsPerAllocatedToken = _graphRewardsManager().onSubgraphAllocationUpdate( allocation.subgraphDeploymentId ); - uint256 accRewardsPending = !allocation.isAltruistic() + uint256 accRewardsPerAllocatedTokenPending = !allocation.isAltruistic() ? accRewardsPerAllocatedToken - allocation.accRewardsPerAllocatedToken : 0; // Update the allocation allocations[_allocationId].tokens = _tokens; allocations[_allocationId].accRewardsPerAllocatedToken = accRewardsPerAllocatedToken; - allocations[_allocationId].accRewardsPending += accRewardsPending; + allocations[_allocationId].accRewardsPending += _graphRewardsManager().calcRewards( + oldTokens, + accRewardsPerAllocatedTokenPending + ); // Update total allocated tokens for the subgraph deployment if (_tokens > oldTokens) { diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol index 52ff6a4dc..59ca5577e 100644 --- a/packages/subgraph-service/test/mocks/MockRewardsManager.sol +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -63,6 +63,8 @@ contract MockRewardsManager is IRewardsManager { function getRewards(address) external view returns (uint256) {} + function calcRewards(uint256, uint256) external pure returns (uint256) {} + // -- Updates -- function updateAccRewardsPerSignal() external returns (uint256) {} diff --git a/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol b/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol index 6010a1da7..9fdd327dc 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol @@ -14,24 +14,46 @@ contract SubgraphServiceAllocateResizeTest is SubgraphServiceTest { */ function _setupResize(address _indexer, uint256 _tokens) private { - token.approve(address(staking), _tokens); staking.stakeTo(_indexer, _tokens); staking.addToProvision(_indexer, address(subgraphService), _tokens); } function _resizeAllocation(address _indexer, address _allocationID, bytes32 _subgraphDeployment, uint256 _tokens) private { - uint256 oldAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(_subgraphDeployment); + // before + uint256 beforeSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(_subgraphDeployment); + uint256 beforeAllocatedTokens = subgraphService.allocationProvisionTracker(_indexer); + Allocation.State memory beforeAllocation = subgraphService.getAllocation(_allocationID); + + uint256 allocatedTokensDelta; + if (_tokens > beforeAllocation.tokens) { + allocatedTokensDelta = _tokens - beforeAllocation.tokens; + } else { + allocatedTokensDelta = beforeAllocation.tokens - _tokens; + } + + // resize vm.expectEmit(address(subgraphService)); - emit AllocationManager.AllocationResized(_indexer, _allocationID, _subgraphDeployment, _tokens, oldAllocatedTokens); + emit AllocationManager.AllocationResized(_indexer, _allocationID, _subgraphDeployment, _tokens, beforeSubgraphAllocatedTokens); subgraphService.resizeAllocation(_indexer, _allocationID, _tokens); - Allocation.State memory allocation = subgraphService.getAllocation(_allocationID); - assertEq(allocation.tokens, _tokens); - assertEq(allocation.accRewardsPerAllocatedToken, rewardsPerSubgraphAllocationUpdate); - - uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(_subgraphDeployment); - assertEq(subgraphAllocatedTokens, _tokens); + // after + uint256 afterSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(_subgraphDeployment); + uint256 afterAllocatedTokens = subgraphService.allocationProvisionTracker(_indexer); + Allocation.State memory afterAllocation = subgraphService.getAllocation(_allocationID); + uint256 accRewardsPerAllocatedTokenDelta = afterAllocation.accRewardsPerAllocatedToken - beforeAllocation.accRewardsPerAllocatedToken; + uint256 afterAccRewardsPending = rewardsManager.calcRewards(beforeAllocation.tokens, accRewardsPerAllocatedTokenDelta); + + //assert + if (_tokens > beforeAllocation.tokens) { + assertEq(afterAllocatedTokens, beforeAllocatedTokens + allocatedTokensDelta); + } else { + assertEq(afterAllocatedTokens, beforeAllocatedTokens - allocatedTokensDelta); + } + assertEq(afterAllocation.tokens, _tokens); + assertEq(afterAllocation.accRewardsPerAllocatedToken, rewardsPerSubgraphAllocationUpdate); + assertEq(afterAllocation.accRewardsPending, afterAccRewardsPending); + assertEq(afterSubgraphAllocatedTokens, _tokens); } /* diff --git a/yarn.lock b/yarn.lock index 29b385618..4088ee33e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1469,7 +1469,7 @@ __metadata: languageName: node linkType: hard -"@defi-wonderland/smock@npm:^2.0.7": +"@defi-wonderland/smock@npm:^2.4.0": version: 2.4.0 resolution: "@defi-wonderland/smock@npm:2.4.0" dependencies: @@ -2802,7 +2802,7 @@ __metadata: resolution: "@graphprotocol/contracts@workspace:packages/contracts" dependencies: "@arbitrum/sdk": "npm:~3.1.13" - "@defi-wonderland/smock": "npm:^2.0.7" + "@defi-wonderland/smock": "npm:^2.4.0" "@ethersproject/experimental": "npm:^5.6.0" "@graphprotocol/common-ts": "npm:^1.8.3" "@graphprotocol/sdk": "workspace:^0.5.0" From 7726b5888db40288a6ff3acd49032ed90b276aac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 15 Aug 2024 14:27:25 -0300 Subject: [PATCH 154/343] fix: pin smock version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/contracts/eslint.config.js | 2 + packages/contracts/package.json | 2 +- .../test/unit/lib/graphTokenTests.ts | 2 +- yarn.lock | 192 +++++++++++++++++- 4 files changed, 187 insertions(+), 11 deletions(-) diff --git a/packages/contracts/eslint.config.js b/packages/contracts/eslint.config.js index c7c0ba1b2..566196117 100644 --- a/packages/contracts/eslint.config.js +++ b/packages/contracts/eslint.config.js @@ -9,6 +9,8 @@ module.exports = [ '@typescript-eslint/no-unsafe-call': 'off', '@typescript-eslint/no-unsafe-member-access': 'off', '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', }, }, { diff --git a/packages/contracts/package.json b/packages/contracts/package.json index b6cb22e0c..f4ecce85a 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "@arbitrum/sdk": "~3.1.13", - "@defi-wonderland/smock": "^2.4.0", + "@defi-wonderland/smock": "~2.3.0", "@ethersproject/experimental": "^5.6.0", "@graphprotocol/common-ts": "^1.8.3", "@nomiclabs/hardhat-ethers": "^2.2.3", diff --git a/packages/contracts/test/unit/lib/graphTokenTests.ts b/packages/contracts/test/unit/lib/graphTokenTests.ts index 77682ada9..299458080 100644 --- a/packages/contracts/test/unit/lib/graphTokenTests.ts +++ b/packages/contracts/test/unit/lib/graphTokenTests.ts @@ -55,7 +55,7 @@ export function grtTests(isL2: boolean): void { return permit } - async function createPermitTransaction(permit: Permit, signer: string, salt: string) { + function createPermitTransaction(permit: Permit, signer: string, salt: string) { const signature: Signature = signPermit(signer, graph.chainId, grt.address, permit, salt) const wallet = new ethers.Wallet(signer, graph.provider) return grt diff --git a/yarn.lock b/yarn.lock index 4088ee33e..4d5746433 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1469,11 +1469,13 @@ __metadata: languageName: node linkType: hard -"@defi-wonderland/smock@npm:^2.4.0": - version: 2.4.0 - resolution: "@defi-wonderland/smock@npm:2.4.0" +"@defi-wonderland/smock@npm:~2.3.0": + version: 2.3.5 + resolution: "@defi-wonderland/smock@npm:2.3.5" dependencies: - "@nomicfoundation/ethereumjs-util": "npm:^9.0.4" + "@nomicfoundation/ethereumjs-evm": "npm:^1.0.0-rc.3" + "@nomicfoundation/ethereumjs-util": "npm:^8.0.0-rc.3" + "@nomicfoundation/ethereumjs-vm": "npm:^6.0.0-rc.3" diff: "npm:^5.0.0" lodash.isequal: "npm:^4.5.0" lodash.isequalwith: "npm:^4.4.0" @@ -1485,8 +1487,8 @@ __metadata: "@ethersproject/abstract-signer": ^5 "@nomiclabs/hardhat-ethers": ^2 ethers: ^5 - hardhat: ^2.21.0 - checksum: 166dfb4b9e00c29466f0cf27dc2009e8139f9e6a31e42b74d55f5e6ac690d5f7137ae5acf1b8ff846ae46915608f6de921f2bef47a485088e57d951cac72b054 + hardhat: ^2 + checksum: c831563fe6607841d69f5936011398a492f760f52f9cb17626b2949ff3ef7668729acc4a3a944f739417b2d1b99bc6c83580f236189f27431224021c66ac1821 languageName: node linkType: hard @@ -2802,7 +2804,7 @@ __metadata: resolution: "@graphprotocol/contracts@workspace:packages/contracts" dependencies: "@arbitrum/sdk": "npm:~3.1.13" - "@defi-wonderland/smock": "npm:^2.4.0" + "@defi-wonderland/smock": "npm:~2.3.0" "@ethersproject/experimental": "npm:^5.6.0" "@graphprotocol/common-ts": "npm:^1.8.3" "@graphprotocol/sdk": "workspace:^0.5.0" @@ -4251,6 +4253,20 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-block@npm:4.2.2": + version: 4.2.2 + resolution: "@nomicfoundation/ethereumjs-block@npm:4.2.2" + dependencies: + "@nomicfoundation/ethereumjs-common": "npm:3.1.2" + "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" + "@nomicfoundation/ethereumjs-trie": "npm:5.0.5" + "@nomicfoundation/ethereumjs-tx": "npm:4.1.2" + "@nomicfoundation/ethereumjs-util": "npm:8.0.6" + ethereum-cryptography: "npm:0.1.3" + checksum: 1c211294b3064d2bbfcf33b460438f01fb9cd77429314a90a5e2ffce5162019a384f4ae7d3825cfd386a140db191b251b475427562c53f85beffc786156f817e + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-block@npm:5.0.1": version: 5.0.1 resolution: "@nomicfoundation/ethereumjs-block@npm:5.0.1" @@ -4266,6 +4282,26 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-blockchain@npm:6.2.2": + version: 6.2.2 + resolution: "@nomicfoundation/ethereumjs-blockchain@npm:6.2.2" + dependencies: + "@nomicfoundation/ethereumjs-block": "npm:4.2.2" + "@nomicfoundation/ethereumjs-common": "npm:3.1.2" + "@nomicfoundation/ethereumjs-ethash": "npm:2.0.5" + "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" + "@nomicfoundation/ethereumjs-trie": "npm:5.0.5" + "@nomicfoundation/ethereumjs-util": "npm:8.0.6" + abstract-level: "npm:^1.0.3" + debug: "npm:^4.3.3" + ethereum-cryptography: "npm:0.1.3" + level: "npm:^8.0.0" + lru-cache: "npm:^5.1.1" + memory-level: "npm:^1.0.0" + checksum: 6fe6e315900e1d6a29d59be41f566bdfd5ffdf82ab0fe081b1999dcc4eec3a248ab080d359a56e8cde4e473ca90349b0c50fa1ab707aa3e275fb1c478237e5e2 + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-blockchain@npm:7.0.1": version: 7.0.1 resolution: "@nomicfoundation/ethereumjs-blockchain@npm:7.0.1" @@ -4287,6 +4323,16 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-common@npm:3.1.2": + version: 3.1.2 + resolution: "@nomicfoundation/ethereumjs-common@npm:3.1.2" + dependencies: + "@nomicfoundation/ethereumjs-util": "npm:8.0.6" + crc-32: "npm:^1.2.0" + checksum: 90910630025b5bb503f36125c45395cc9f875ffdd8137a83e9c1d566678edcc8db40f8ce1dff9da1ef2c91c7d6b6d1fa75c41a9579a5d3a8f0ae669fcea244b1 + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-common@npm:4.0.1": version: 4.0.1 resolution: "@nomicfoundation/ethereumjs-common@npm:4.0.1" @@ -4306,6 +4352,20 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-ethash@npm:2.0.5": + version: 2.0.5 + resolution: "@nomicfoundation/ethereumjs-ethash@npm:2.0.5" + dependencies: + "@nomicfoundation/ethereumjs-block": "npm:4.2.2" + "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" + "@nomicfoundation/ethereumjs-util": "npm:8.0.6" + abstract-level: "npm:^1.0.3" + bigint-crypto-utils: "npm:^3.0.23" + ethereum-cryptography: "npm:0.1.3" + checksum: 7a90ef53ae4c1ac5a314c3447966fdbefcc96481ae3a05d59e881053350c55be7c841708c61c79a2af40bbb0181d6e0db42601592f17a4db1611b199d49e8544 + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-ethash@npm:3.0.1": version: 3.0.1 resolution: "@nomicfoundation/ethereumjs-ethash@npm:3.0.1" @@ -4320,6 +4380,22 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-evm@npm:1.3.2, @nomicfoundation/ethereumjs-evm@npm:^1.0.0-rc.3": + version: 1.3.2 + resolution: "@nomicfoundation/ethereumjs-evm@npm:1.3.2" + dependencies: + "@nomicfoundation/ethereumjs-common": "npm:3.1.2" + "@nomicfoundation/ethereumjs-util": "npm:8.0.6" + "@types/async-eventemitter": "npm:^0.2.1" + async-eventemitter: "npm:^0.2.4" + debug: "npm:^4.3.3" + ethereum-cryptography: "npm:0.1.3" + mcl-wasm: "npm:^0.7.1" + rustbn.js: "npm:~0.2.0" + checksum: 4aa14d7dce597a91c25bec5975022348741cebf6ed20cda028ddcbebe739ba2e6f4c879fa1ebe849bd5c78d3fd2443ebbb7d57e1fca5a98fbe88fc9ce15d9fd6 + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-evm@npm:2.0.1": version: 2.0.1 resolution: "@nomicfoundation/ethereumjs-evm@npm:2.0.1" @@ -4336,6 +4412,15 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-rlp@npm:4.0.3": + version: 4.0.3 + resolution: "@nomicfoundation/ethereumjs-rlp@npm:4.0.3" + bin: + rlp: bin/rlp + checksum: 3e3c07abf53ff5832afbbdf3f3687e11e2e829699348eea1ae465084c72e024559d97e351e8f0fb27f32c7896633c7dd50b19d8de486e89cde777fd5447381cd + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-rlp@npm:5.0.1": version: 5.0.1 resolution: "@nomicfoundation/ethereumjs-rlp@npm:5.0.1" @@ -4354,6 +4439,21 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-statemanager@npm:1.0.5": + version: 1.0.5 + resolution: "@nomicfoundation/ethereumjs-statemanager@npm:1.0.5" + dependencies: + "@nomicfoundation/ethereumjs-common": "npm:3.1.2" + "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" + "@nomicfoundation/ethereumjs-trie": "npm:5.0.5" + "@nomicfoundation/ethereumjs-util": "npm:8.0.6" + debug: "npm:^4.3.3" + ethereum-cryptography: "npm:0.1.3" + functional-red-black-tree: "npm:^1.0.1" + checksum: 4a05b7a86a1bbc8fd409416edf437d99d9d4498c438e086c30250cb3dc92ff00086f9ff959f469c72d46178e831104dc15f10465e27fbbf0ca97da27d6889a0c + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-statemanager@npm:2.0.1": version: 2.0.1 resolution: "@nomicfoundation/ethereumjs-statemanager@npm:2.0.1" @@ -4368,6 +4468,18 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-trie@npm:5.0.5": + version: 5.0.5 + resolution: "@nomicfoundation/ethereumjs-trie@npm:5.0.5" + dependencies: + "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" + "@nomicfoundation/ethereumjs-util": "npm:8.0.6" + ethereum-cryptography: "npm:0.1.3" + readable-stream: "npm:^3.6.0" + checksum: cab544fef4bcdc3acef1bfb4ee9f2fde44b66a22b2329bfd67515facdf115a318961f8bc0e38befded838e8fc513974f90f340b53a98b8469e54960b15cd857a + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-trie@npm:6.0.1": version: 6.0.1 resolution: "@nomicfoundation/ethereumjs-trie@npm:6.0.1" @@ -4381,6 +4493,18 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-tx@npm:4.1.2": + version: 4.1.2 + resolution: "@nomicfoundation/ethereumjs-tx@npm:4.1.2" + dependencies: + "@nomicfoundation/ethereumjs-common": "npm:3.1.2" + "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" + "@nomicfoundation/ethereumjs-util": "npm:8.0.6" + ethereum-cryptography: "npm:0.1.3" + checksum: cb569c882d3ce922acff1a4238864f11109ac5a30dfa481b1ed9c7043c2b773f3a5fc88a3f4fefb62b11c448305296533f555f93d1d969a5abd3c2a13c80ed74 + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-tx@npm:5.0.1": version: 5.0.1 resolution: "@nomicfoundation/ethereumjs-tx@npm:5.0.1" @@ -4412,6 +4536,16 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-util@npm:8.0.6, @nomicfoundation/ethereumjs-util@npm:^8.0.0-rc.3": + version: 8.0.6 + resolution: "@nomicfoundation/ethereumjs-util@npm:8.0.6" + dependencies: + "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" + ethereum-cryptography: "npm:0.1.3" + checksum: 647006f4dfa962f61cec54c34ff9939468042cf762ff3b2cf80c8362558f21750348a3cda63dc9890b1cb2ba664f97dc4a892afca5f5d6f95b3ba4d56be5a33b + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-util@npm:9.0.1": version: 9.0.1 resolution: "@nomicfoundation/ethereumjs-util@npm:9.0.1" @@ -4423,7 +4557,7 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-util@npm:9.0.4, @nomicfoundation/ethereumjs-util@npm:^9.0.4": +"@nomicfoundation/ethereumjs-util@npm:9.0.4": version: 9.0.4 resolution: "@nomicfoundation/ethereumjs-util@npm:9.0.4" dependencies: @@ -4459,6 +4593,30 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ethereumjs-vm@npm:^6.0.0-rc.3": + version: 6.4.2 + resolution: "@nomicfoundation/ethereumjs-vm@npm:6.4.2" + dependencies: + "@nomicfoundation/ethereumjs-block": "npm:4.2.2" + "@nomicfoundation/ethereumjs-blockchain": "npm:6.2.2" + "@nomicfoundation/ethereumjs-common": "npm:3.1.2" + "@nomicfoundation/ethereumjs-evm": "npm:1.3.2" + "@nomicfoundation/ethereumjs-rlp": "npm:4.0.3" + "@nomicfoundation/ethereumjs-statemanager": "npm:1.0.5" + "@nomicfoundation/ethereumjs-trie": "npm:5.0.5" + "@nomicfoundation/ethereumjs-tx": "npm:4.1.2" + "@nomicfoundation/ethereumjs-util": "npm:8.0.6" + "@types/async-eventemitter": "npm:^0.2.1" + async-eventemitter: "npm:^0.2.4" + debug: "npm:^4.3.3" + ethereum-cryptography: "npm:0.1.3" + functional-red-black-tree: "npm:^1.0.1" + mcl-wasm: "npm:^0.7.1" + rustbn.js: "npm:~0.2.0" + checksum: 78e4b0ba20e8fa4ef112bae88f432746647ed48b41918b34855fe08269be3aaff84f95c08b6c61475fb70f24a28ba73612bd2bcd19b3c007c8bf9e11a43fa8e0 + languageName: node + linkType: hard + "@nomicfoundation/hardhat-chai-matchers@npm:^2.0.0": version: 2.0.6 resolution: "@nomicfoundation/hardhat-chai-matchers@npm:2.0.6" @@ -5537,6 +5695,15 @@ __metadata: languageName: node linkType: hard +"@types/async-eventemitter@npm:^0.2.1": + version: 0.2.4 + resolution: "@types/async-eventemitter@npm:0.2.4" + dependencies: + "@types/events": "npm:*" + checksum: 2ae267eb3e959fe5aaf6d850ab06ac2e5b44f1a7e3e421250f3ebaa8a108f641e9050d042980bc35aab98d6fa5f1a62a43cfb7f377011ce9013ed62229327111 + languageName: node + linkType: hard + "@types/bn.js@npm:*, @types/bn.js@npm:^5.1.0, @types/bn.js@npm:^5.1.1": version: 5.1.5 resolution: "@types/bn.js@npm:5.1.5" @@ -5646,6 +5813,13 @@ __metadata: languageName: node linkType: hard +"@types/events@npm:*": + version: 3.0.3 + resolution: "@types/events@npm:3.0.3" + checksum: 3a56f8c51eb4ebc0d05dcadca0c6636c816acc10216ce36c976fad11e54a01f4bb979a07211355686015884753b37f17d74bfdc7aaf4ebb027c1e8a501c7b21d + languageName: node + linkType: hard + "@types/form-data@npm:0.0.33": version: 0.0.33 resolution: "@types/form-data@npm:0.0.33" @@ -7085,7 +7259,7 @@ __metadata: languageName: node linkType: hard -"async-eventemitter@npm:^0.2.2": +"async-eventemitter@npm:^0.2.2, async-eventemitter@npm:^0.2.4": version: 0.2.4 resolution: "async-eventemitter@npm:0.2.4" dependencies: From d80a02523cb64e5b1799897cd3cf156ac069195f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 19 Aug 2024 15:10:24 -0300 Subject: [PATCH 155/343] fix: ensure maxVerifierCut is a valid PPM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../data-service/utilities/ProvisionManager.sol | 4 +++- .../utilities/ProvisionManagerStorage.sol | 4 ++-- packages/horizon/test/data-service/DataService.t.sol | 11 ++++++++++- .../test/data-service/DataServiceUpgradeable.t.sol | 4 +++- .../extensions/DataServicePausableUpgradeable.t.sol | 4 +++- .../subgraph-service/contracts/SubgraphService.sol | 4 ++-- 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index de3580aea..c89e9e473 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.26; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; import { UintRange } from "../../libraries/UintRange.sol"; +import { PPMMath } from "../../libraries/PPMMath.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { GraphDirectory } from "../../utilities/GraphDirectory.sol"; @@ -150,7 +151,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa // solhint-disable-next-line func-name-mixedcase function __ProvisionManager_init_unchained() internal onlyInitializing { _setProvisionTokensRange(type(uint256).min, type(uint256).max); - _setVerifierCutRange(type(uint32).min, type(uint32).max); + _setVerifierCutRange(type(uint32).min, uint32(PPMMath.MAX_PPM)); _setThawingPeriodRange(type(uint64).min, type(uint64).max); } @@ -197,6 +198,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa */ function _setVerifierCutRange(uint32 _min, uint32 _max) internal { require(_min <= _max, ProvisionManagerInvalidRange(_min, _max)); + require(_max <= PPMMath.MAX_PPM, ProvisionManagerInvalidRange(_min, _max)); minimumVerifierCut = _min; maximumVerifierCut = _max; emit VerifierCutRangeSet(_min, _max); diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol index 70f10d6e3..8649055db 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol @@ -17,10 +17,10 @@ abstract contract ProvisionManagerV1Storage { /// @notice The maximum thawing period allowed to register a provision in the data service uint64 public maximumThawingPeriod; - /// @notice The minimum verifier cut required to register a provision in the data service + /// @notice The minimum verifier cut required to register a provision in the data service (in PPM) uint32 public minimumVerifierCut; - /// @notice The maximum verifier cut allowed to register a provision in the data service + /// @notice The maximum verifier cut allowed to register a provision in the data service (in PPM) uint32 public maximumVerifierCut; /// @notice How much delegation the service provider can effectively use diff --git a/packages/horizon/test/data-service/DataService.t.sol b/packages/horizon/test/data-service/DataService.t.sol index ea5fd51a7..98f7aadb3 100644 --- a/packages/horizon/test/data-service/DataService.t.sol +++ b/packages/horizon/test/data-service/DataService.t.sol @@ -22,7 +22,7 @@ contract DataServiceTest is HorizonStakingSharedTest { function test_Constructor_WhenTheContractIsDeployedWithAValidController() external view { _assert_delegationRatio(type(uint32).min); _assert_provisionTokens_range(type(uint256).min, type(uint256).max); - _assert_verifierCut_range(type(uint32).min, type(uint32).max); + _assert_verifierCut_range(type(uint32).min, uint32(PPMMath.MAX_PPM)); _assert_thawingPeriod_range(type(uint64).min, type(uint64).max); } @@ -106,6 +106,7 @@ contract DataServiceTest is HorizonStakingSharedTest { function test_VerifierCut_WhenSettingAValidRange(uint32 min, uint32 max) external { vm.assume(min <= max); + vm.assume(max <= uint32(PPMMath.MAX_PPM)); _assert_set_verifierCut_range(min, max); } @@ -116,6 +117,14 @@ contract DataServiceTest is HorizonStakingSharedTest { dataService.setVerifierCutRange(min, max); } + function test_VerifierCut_RevertWhen_SettingAnInvalidMax(uint32 min, uint32 max) external { + vm.assume(max > uint32(PPMMath.MAX_PPM)); + vm.assume(min <= max); + + vm.expectRevert(abi.encodeWithSelector(ProvisionManager.ProvisionManagerInvalidRange.selector, min, max)); + dataService.setVerifierCutRange(min, max); + } + function test_VerifierCut_WhenGettingTheRange() external { dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); _assert_verifierCut_range(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); diff --git a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol index 7ff6c8246..c8721260f 100644 --- a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol +++ b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol @@ -5,6 +5,8 @@ import { GraphBaseTest } from "../GraphBase.t.sol"; import { DataServiceBaseUpgradeable } from "./implementations/DataServiceBaseUpgradeable.sol"; import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; +import { PPMMath } from "./../../contracts/libraries/PPMMath.sol"; + contract DataServiceUpgradeableTest is GraphBaseTest { function test_WhenTheContractIsDeployed() external { (DataServiceBaseUpgradeable dataService, DataServiceBaseUpgradeable implementation) = _deployDataService(); @@ -20,7 +22,7 @@ contract DataServiceUpgradeableTest is GraphBaseTest { (uint32 minVerifierCut, uint32 maxVerifierCut) = dataService.getVerifierCutRange(); assertEq(minVerifierCut, type(uint32).min); - assertEq(maxVerifierCut, type(uint32).max); + assertEq(maxVerifierCut, uint32(PPMMath.MAX_PPM)); (uint64 minThawingPeriod, uint64 maxThawingPeriod) = dataService.getThawingPeriodRange(); assertEq(minThawingPeriod, type(uint64).min); diff --git a/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol b/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol index eef727465..9f4a8822b 100644 --- a/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol +++ b/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol @@ -5,6 +5,8 @@ import { GraphBaseTest } from "../../GraphBase.t.sol"; import { DataServiceImpPausableUpgradeable } from "../implementations/DataServiceImpPausableUpgradeable.sol"; import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; +import { PPMMath } from "./../../../contracts/libraries/PPMMath.sol"; + contract DataServicePausableUpgradeableTest is GraphBaseTest { function test_WhenTheContractIsDeployed() external { ( @@ -23,7 +25,7 @@ contract DataServicePausableUpgradeableTest is GraphBaseTest { (uint32 minVerifierCut, uint32 maxVerifierCut) = dataService.getVerifierCutRange(); assertEq(minVerifierCut, type(uint32).min); - assertEq(maxVerifierCut, type(uint32).max); + assertEq(maxVerifierCut, uint32(PPMMath.MAX_PPM)); (uint64 minThawingPeriod, uint64 maxThawingPeriod) = dataService.getThawingPeriodRange(); assertEq(minThawingPeriod, type(uint64).min); diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index a3b9d1541..27fdefd2f 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -464,11 +464,11 @@ contract SubgraphService is /** * @notice Getter for the accepted verifier cut range for provisions * @return min The minimum verifier cut which is defined by {DisputeManager-getVerifierCut} - * @return max The maximum is unbounded + * @return max The maximum is 100% in PPM */ function _getVerifierCutRange() internal view override returns (uint32 min, uint32 max) { uint32 verifierCut = _disputeManager().getVerifierCut(); - return (verifierCut, type(uint32).max); + return (verifierCut, uint32(PPMMath.MAX_PPM)); } /** From d7814eaeb98fdf25551a7957cf2e0a35fea954c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 19 Aug 2024 15:24:20 -0300 Subject: [PATCH 156/343] fix: use isvalidPPM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/utilities/ProvisionManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index c89e9e473..ad18bee93 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -198,7 +198,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa */ function _setVerifierCutRange(uint32 _min, uint32 _max) internal { require(_min <= _max, ProvisionManagerInvalidRange(_min, _max)); - require(_max <= PPMMath.MAX_PPM, ProvisionManagerInvalidRange(_min, _max)); + require(PPMMath.isValidPPM(_max), ProvisionManagerInvalidRange(_min, _max)); minimumVerifierCut = _min; maximumVerifierCut = _max; emit VerifierCutRangeSet(_min, _max); From 4c58b6203fd522324db7639e2d5beb705cb67587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 23 Aug 2024 11:55:09 -0300 Subject: [PATCH 157/343] fix: cap slash amount to a stake snapshot percentage (OZ M-02) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/DataService.sol | 28 +++ .../data-service/interfaces/IDataService.sol | 27 +++ .../utilities/ProvisionManager.sol | 35 ---- .../contracts/DisputeManager.sol | 66 +++++-- .../contracts/interfaces/IDisputeManager.sol | 12 +- .../test/disputes/accept.t.sol | 165 +++++++++++++++--- .../test/disputes/cancel.t.sol | 4 +- .../subgraph-service/test/disputes/draw.t.sol | 4 +- .../test/shared/SubgraphServiceShared.t.sol | 5 + 9 files changed, 261 insertions(+), 85 deletions(-) diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index b2bc32d95..c87cf5e40 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -47,4 +47,32 @@ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1 */ // solhint-disable-next-line func-name-mixedcase function __DataService_init_unchained() internal onlyInitializing {} + + /** + * @notice See {IDataService-getThawingPeriodRange}. + */ + function getThawingPeriodRange() external view returns (uint64, uint64) { + return _getThawingPeriodRange(); + } + + /** + * @notice See {IDataService-getVerifierCutRange}. + */ + function getVerifierCutRange() external view returns (uint32, uint32) { + return _getVerifierCutRange(); + } + + /** + * @notice See {IDataService-getProvisionTokensRange}. + */ + function getProvisionTokensRange() external view returns (uint256, uint256) { + return _getProvisionTokensRange(); + } + + /** + * @notice See {IDataService-getDelegationRatio}. + */ + function getDelegationRatio() external view returns (uint32) { + return _getDelegationRatio(); + } } diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index 69b4fdf1c..1627c8651 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -139,4 +139,31 @@ interface IDataService { * @param data Custom data, usage defined by the data service. */ function slash(address serviceProvider, bytes calldata data) external; + + /** + * @notice External getter for the thawing period range + * @return Minimum thawing period allowed + * @return Maximum thawing period allowed + */ + function getThawingPeriodRange() external view returns (uint64, uint64); + + /** + * @notice External getter for the verifier cut range + * @return Minimum verifier cut allowed + * @return Maximum verifier cut allowed + */ + function getVerifierCutRange() external view returns (uint32, uint32); + + /** + * @notice External getter for the provision tokens range + * @return Minimum provision tokens allowed + * @return Maximum provision tokens allowed + */ + function getProvisionTokensRange() external view returns (uint256, uint256); + + /** + * @notice External getter for the delegation ratio + * @return The delegation ratio + */ + function getDelegationRatio() external view returns (uint32); } diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index ad18bee93..36c3f70b0 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -101,41 +101,6 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa _; } - /** - * @notice External getter for the thawing period range - * @return Minimum thawing period allowed - * @return Maximum thawing period allowed - */ - function getThawingPeriodRange() external view returns (uint64, uint64) { - return _getThawingPeriodRange(); - } - - /** - * @notice External getter for the verifier cut range - * @return Minimum verifier cut allowed - * @return Maximum verifier cut allowed - */ - function getVerifierCutRange() external view returns (uint32, uint32) { - return _getVerifierCutRange(); - } - - /** - * @notice External getter for the provision tokens range - * @return Minimum provision tokens allowed - * @return Maximum provision tokens allowed - */ - function getProvisionTokensRange() external view returns (uint256, uint256) { - return _getProvisionTokensRange(); - } - - /** - * @notice External getter for the delegation ratio - * @return The delegation ratio - */ - function getDelegationRatio() external view returns (uint32) { - return _getDelegationRatio(); - } - /** * @notice Initializes the contract and any parent contracts. */ diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index b1d894061..6d4577153 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -9,6 +9,7 @@ import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { MathUtils } from "@graphprotocol/horizon/contracts/libraries/MathUtils.sol"; import { Allocation } from "./libraries/Allocation.sol"; import { Attestation } from "./libraries/Attestation.sol"; @@ -229,7 +230,7 @@ contract DisputeManager is dispute.status = IDisputeManager.DisputeStatus.Accepted; // Slash - uint256 tokensToReward = _slashIndexer(dispute.indexer, tokensSlash); + uint256 tokensToReward = _slashIndexer(dispute.indexer, tokensSlash, dispute.stakeSnapshot); // Give the fisherman their reward and their deposit back _graphToken().pushTokens(dispute.fisherman, tokensToReward + dispute.deposit); @@ -364,6 +365,15 @@ contract DisputeManager is return disputePeriod; } + /** + * @notice Get the stake snapshot for an indexer. + * @param indexer The indexer address + */ + function getStakeSnapshot(address indexer) external view override returns (uint256) { + IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService)); + return _getStakeSnapshot(indexer, provision.tokens); + } + /** * @notice Checks if two attestations are conflicting. * @param attestation1 The first attestation @@ -465,6 +475,7 @@ contract DisputeManager is require(!isDisputeCreated(disputeId), DisputeManagerDisputeAlreadyCreated(disputeId)); // Store dispute + uint256 stakeSnapshot = _getStakeSnapshot(indexer, provision.tokens); disputes[disputeId] = Dispute( indexer, _fisherman, @@ -472,7 +483,8 @@ contract DisputeManager is 0, // no related dispute, DisputeType.QueryDispute, IDisputeManager.DisputeStatus.Pending, - block.timestamp + block.timestamp, + stakeSnapshot ); emit QueryDisputeCreated( @@ -481,7 +493,8 @@ contract DisputeManager is _fisherman, _deposit, _attestation.subgraphDeploymentId, - _attestationData + _attestationData, + stakeSnapshot ); return disputeId; @@ -516,6 +529,7 @@ contract DisputeManager is require(provision.tokens != 0, DisputeManagerZeroTokens()); // Store dispute + uint256 stakeSnapshot = _getStakeSnapshot(indexer, provision.tokens); disputes[disputeId] = Dispute( alloc.indexer, _fisherman, @@ -523,10 +537,11 @@ contract DisputeManager is 0, DisputeType.IndexingDispute, IDisputeManager.DisputeStatus.Pending, - block.timestamp + block.timestamp, + stakeSnapshot ); - emit IndexingDisputeCreated(disputeId, alloc.indexer, _fisherman, _deposit, _allocationId, _poi); + emit IndexingDisputeCreated(disputeId, alloc.indexer, _fisherman, _deposit, _allocationId, _poi, stakeSnapshot); return disputeId; } @@ -578,21 +593,24 @@ contract DisputeManager is * Give the challenger a reward equal to the fishermanRewardPercentage of slashed amount * @param _indexer Address of the indexer * @param _tokensSlash Amount of tokens to slash from the indexer + * @param _tokensStakeSnapshot Snapshot of the indexer's stake at the time of the dispute creation */ - function _slashIndexer(address _indexer, uint256 _tokensSlash) private returns (uint256) { + function _slashIndexer( + address _indexer, + uint256 _tokensSlash, + uint256 _tokensStakeSnapshot + ) private returns (uint256) { // Get slashable amount for indexer IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_indexer, address(subgraphService)); - IHorizonStaking.DelegationPool memory pool = _graphStaking().getDelegationPool( - _indexer, - address(subgraphService) - ); - uint256 totalProvisionTokens = provision.tokens + pool.tokens; // slashable tokens - // Get slash amount - uint256 maxTokensSlash = uint256(maxSlashingCut).mulPPM(totalProvisionTokens); - require(_tokensSlash != 0 && _tokensSlash <= maxTokensSlash, DisputeManagerInvalidTokensSlash(_tokensSlash)); + // Ensure slash amount is within the cap + uint256 maxTokensSlash = _tokensStakeSnapshot.mulPPM(maxSlashingCut); + require( + _tokensSlash != 0 && _tokensSlash <= maxTokensSlash, + DisputeManagerInvalidTokensSlash(_tokensSlash, maxTokensSlash) + ); - // Rewards amount can only be extracted from service poriver tokens so + // Rewards amount can only be extracted from service provider tokens so // we grab the minimum between the slash amount and indexer's tokens uint256 maxRewardableTokens = Math.min(_tokensSlash, provision.tokens); uint256 tokensRewards = uint256(fishermanRewardCut).mulPPM(maxRewardableTokens); @@ -678,4 +696,22 @@ contract DisputeManager is // this is so the check returns false when rejecting the related dispute. return relatedId != 0 && disputes[relatedId].status == IDisputeManager.DisputeStatus.Pending; } + + /** + * @notice Get the total stake snapshot for and indexer. + * @dev A few considerations: + * - We include both indexer and delegators stake. + * - Thawing stake is not excluded from the snapshot. + * - Delegators stake is capped at the delegation ratio to prevent delegators from inflating the snapshot + * to increase the indexer slash amount. + * @param _indexer Indexer address + * @param _indexerStake Indexer's stake + * @return Total stake snapshot + */ + function _getStakeSnapshot(address _indexer, uint256 _indexerStake) private view returns (uint256) { + uint256 delegatorsStake = _graphStaking().getDelegationPool(_indexer, address(subgraphService)).tokens; + uint256 delegatorsStakeMax = _indexerStake * uint256(subgraphService.getDelegationRatio()); + uint256 stakeSnapshot = _indexerStake + MathUtils.min(delegatorsStake, delegatorsStakeMax); + return stakeSnapshot; + } } diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 86b7783d8..b0616824d 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -38,6 +38,8 @@ interface IDisputeManager { DisputeStatus status; // Timestamp when the dispute was created uint256 createdAt; + // Stake snapshot of the indexer at the time of the dispute (includes delegation up to the delegation ratio) + uint256 stakeSnapshot; } /** @@ -87,7 +89,8 @@ interface IDisputeManager { address indexed fisherman, uint256 tokens, bytes32 subgraphDeploymentId, - bytes attestation + bytes attestation, + uint256 stakeSnapshot ); /** @@ -101,7 +104,8 @@ interface IDisputeManager { address indexed fisherman, uint256 tokens, address allocationId, - bytes32 poi + bytes32 poi, + uint256 stakeSnapshot ); /** @@ -150,7 +154,7 @@ interface IDisputeManager { error DisputeManagerInvalidMinimumDeposit(uint256 minimumDeposit); error DisputeManagerInvalidFishermanReward(uint32 cut); error DisputeManagerInvalidMaxSlashingCut(uint32 maxSlashingCut); - error DisputeManagerInvalidTokensSlash(uint256 tokensSlash); + error DisputeManagerInvalidTokensSlash(uint256 tokensSlash, uint256 maxTokensSlash); error DisputeManagerDisputeNotPending(IDisputeManager.DisputeStatus status); error DisputeManagerInsufficientDeposit(uint256 deposit, uint256 minimumDeposit); error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId); @@ -222,4 +226,6 @@ interface IDisputeManager { Attestation.State memory attestation1, Attestation.State memory attestation2 ) external pure returns (bool); + + function getStakeSnapshot(address indexer) external view returns (uint256); } diff --git a/packages/subgraph-service/test/disputes/accept.t.sol b/packages/subgraph-service/test/disputes/accept.t.sol index 6292e65a4..ee9bbec27 100644 --- a/packages/subgraph-service/test/disputes/accept.t.sol +++ b/packages/subgraph-service/test/disputes/accept.t.sol @@ -6,6 +6,7 @@ import "forge-std/Test.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; import { DisputeManagerTest } from "./DisputeManager.t.sol"; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { using PPMMath for uint256; @@ -17,9 +18,17 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { function testAccept_IndexingDispute( uint256 tokens, uint256 tokensDispute, - uint256 tokensSlash + uint256 tokensSlash, + uint256 delegationAmount ) public useIndexer useAllocation(tokens) { - tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); + + resetPrank(users.delegator); + _delegate(delegationAmount); + + uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); + uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); + tokensSlash = bound(tokensSlash, 1, tokensSlashCap); tokensDispute = bound(tokensDispute, minimumDeposit, tokens); uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); @@ -28,17 +37,25 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { resetPrank(users.arbitrator); disputeManager.acceptDispute(disputeID, tokensSlash); - uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanReward = Math.min(tokensSlash, tokens).mulPPM(fishermanRewardPercentage); uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward; - assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance, "Fisherman should receive 50% of slashed tokens."); + assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance); } function testAccept_QueryDispute( uint256 tokens, uint256 tokensDispute, - uint256 tokensSlash + uint256 tokensSlash, + uint256 delegationAmount ) public useIndexer useAllocation(tokens) { - tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); + + resetPrank(users.delegator); + _delegate(delegationAmount); + + uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); + uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); + tokensSlash = bound(tokensSlash, 1, tokensSlashCap); tokensDispute = bound(tokensDispute, minimumDeposit, tokens); uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); @@ -47,16 +64,24 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { resetPrank(users.arbitrator); disputeManager.acceptDispute(disputeID, tokensSlash); - uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanReward = Math.min(tokensSlash, tokens).mulPPM(fishermanRewardPercentage); uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward; - assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance, "Fisherman should receive 50% of slashed tokens."); + assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance); } function testAccept_QueryDisputeConflicting( uint256 tokens, - uint256 tokensSlash + uint256 tokensSlash, + uint256 delegationAmount ) public useIndexer useAllocation(tokens) { - tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); + + resetPrank(users.delegator); + _delegate(delegationAmount); + + uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); + uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); + tokensSlash = bound(tokensSlash, 1, tokensSlashCap); bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); @@ -79,48 +104,132 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { resetPrank(users.arbitrator); disputeManager.acceptDispute(disputeID1, tokensSlash); - uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanReward = Math.min(tokensSlash, tokens).mulPPM(fishermanRewardPercentage); uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward; - assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance, "Fisherman should receive 50% of slashed tokens."); + assertEq( + token.balanceOf(users.fisherman), + fishermanExpectedBalance, + "Fisherman should receive 50% of slashed tokens." + ); - (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); + (, , , , , IDisputeManager.DisputeStatus status1, , ) = disputeManager.disputes(disputeID1); + (, , , , , IDisputeManager.DisputeStatus status2, , ) = disputeManager.disputes(disputeID2); assertTrue(status1 == IDisputeManager.DisputeStatus.Accepted, "Dispute 1 should be accepted."); assertTrue(status2 == IDisputeManager.DisputeStatus.Rejected, "Dispute 2 should be rejected."); } - function testAccept_RevertIf_CallerIsNotArbitrator( + function testAccept_IndexingDispute_RevertIf_SlashAmountTooHigh( uint256 tokens, uint256 tokensDispute, - uint256 tokensSlash + uint256 tokensSlash, + uint256 delegationAmount ) public useIndexer useAllocation(tokens) { - tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); + + resetPrank(users.delegator); + _delegate(delegationAmount); + + uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); + uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); + tokensSlash = bound(tokensSlash, tokensSlashCap + 1 wei, type(uint256).max); tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); - // attempt to accept dispute as fisherman - resetPrank(users.fisherman); - vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + resetPrank(users.arbitrator); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidTokensSlash.selector, + tokensSlash, + tokensSlashCap + ); + vm.expectRevert(expectedError); disputeManager.acceptDispute(disputeID, tokensSlash); } - function testAccept_RevertWhen_SlashingOverMaxSlashPercentage( + function testAccept_QueryDispute_RevertIf_SlashAmountTooHigh( uint256 tokens, uint256 tokensDispute, - uint256 tokensSlash + uint256 tokensSlash, + uint256 delegationAmount + ) public useIndexer useAllocation(tokens) { + delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); + + resetPrank(users.delegator); + _delegate(delegationAmount); + + uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); + uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); + tokensSlash = bound(tokensSlash, tokensSlashCap + 1 wei, type(uint256).max); + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + + bytes32 disputeID = _createQueryDispute(tokensDispute); + + resetPrank(users.arbitrator); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidTokensSlash.selector, + tokensSlash, + tokensSlashCap + ); + vm.expectRevert(expectedError); + disputeManager.acceptDispute(disputeID, tokensSlash); + } + + function testAccept_ConflictingQueryDispute_RevertIf_SlashAmountTooHigh( + uint256 tokens, + uint256 tokensDispute, + uint256 tokensSlash, + uint256 delegationAmount ) public useIndexer useAllocation(tokens) { - tokensSlash = bound(tokensSlash, uint256(maxSlashingPercentage).mulPPM(tokens) + 1, type(uint256).max); + delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); + + resetPrank(users.delegator); + _delegate(delegationAmount); + + uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); + uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); + tokensSlash = bound(tokensSlash, tokensSlashCap + 1 wei, type(uint256).max); tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI101"), tokensDispute); - // max slashing percentage is 50% + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + responseCID1, + subgraphDeploymentId, + responseCID2, + subgraphDeploymentId + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); + resetPrank(users.arbitrator); bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerInvalidTokensSlash.selector, - tokensSlash + IDisputeManager.DisputeManagerInvalidTokensSlash.selector, + tokensSlash, + tokensSlashCap ); vm.expectRevert(expectedError); + disputeManager.acceptDispute(disputeID1, tokensSlash); + } + + function testAccept_RevertIf_CallerIsNotArbitrator( + uint256 tokens, + uint256 tokensDispute, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + tokensDispute = bound(tokensDispute, minimumDeposit, tokens); + + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + + // attempt to accept dispute as fisherman + resetPrank(users.fisherman); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); disputeManager.acceptDispute(disputeID, tokensSlash); } } diff --git a/packages/subgraph-service/test/disputes/cancel.t.sol b/packages/subgraph-service/test/disputes/cancel.t.sol index 741feda16..f61e7c099 100644 --- a/packages/subgraph-service/test/disputes/cancel.t.sol +++ b/packages/subgraph-service/test/disputes/cancel.t.sol @@ -54,8 +54,8 @@ contract DisputeManagerCancelDisputeTest is DisputeManagerTest { disputeManager.cancelDispute(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); + (, , , , , IDisputeManager.DisputeStatus status1, ,) = disputeManager.disputes(disputeID1); + (, , , , , IDisputeManager.DisputeStatus status2, ,) = disputeManager.disputes(disputeID2); assertTrue(status1 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 1 should be cancelled."); assertTrue(status2 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 2 should be cancelled."); } diff --git a/packages/subgraph-service/test/disputes/draw.t.sol b/packages/subgraph-service/test/disputes/draw.t.sol index 746d25ebd..e28561b10 100644 --- a/packages/subgraph-service/test/disputes/draw.t.sol +++ b/packages/subgraph-service/test/disputes/draw.t.sol @@ -50,8 +50,8 @@ contract DisputeManagerDrawDisputeTest is DisputeManagerTest { resetPrank(users.arbitrator); disputeManager.drawDispute(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status1, ) = disputeManager.disputes(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status2, ) = disputeManager.disputes(disputeID2); + (, , , , , IDisputeManager.DisputeStatus status1, ,) = disputeManager.disputes(disputeID1); + (, , , , , IDisputeManager.DisputeStatus status2, ,) = disputeManager.disputes(disputeID2); assertTrue(status1 == IDisputeManager.DisputeStatus.Drawn, "Dispute 1 should be drawn."); assertTrue(status2 == IDisputeManager.DisputeStatus.Drawn, "Dispute 2 should be drawn."); } diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol index a67a151c1..8c0b9d0fe 100644 --- a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -70,6 +70,11 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { subgraphService.startService(users.indexer, data); } + function _delegate(uint256 tokens) internal { + token.approve(address(staking), tokens); + staking.delegate(users.indexer, address(subgraphService), tokens, 0); + } + /* * PRIVATE */ From 94fe5a0ce0f3c6e76275ed053a3917914abbf7fd Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 15 Aug 2024 17:11:16 -0300 Subject: [PATCH 158/343] fix: early return in Staking withdraw (OZ M-03) --- .../contracts/staking/HorizonStaking.sol | 22 ++- .../horizon/test/staking/HorizonStaking.t.sol | 19 ++- .../horizon/test/staking/stake/unstake.t.sol | 128 ++++++++++++++++-- .../horizon/test/staking/stake/withdraw.t.sol | 59 ++++++++ packages/horizon/test/utils/Constants.sol | 1 + 5 files changed, 205 insertions(+), 24 deletions(-) create mode 100644 packages/horizon/test/staking/stake/withdraw.t.sol diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 6ad6dec7c..79093fa9c 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -147,7 +147,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice See {IHorizonStakingMain-withdraw}. */ function withdraw() external override notPaused { - _withdraw(msg.sender, true); + _withdraw(msg.sender); } /* @@ -540,8 +540,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit StakeWithdrawn(serviceProvider, _tokens); } else { // Before locking more tokens, withdraw any unlocked ones if possible - if (sp.__DEPRECATED_tokensLockedUntil != 0 && block.number >= sp.__DEPRECATED_tokensLockedUntil) { - _withdraw(serviceProvider, false); + if (sp.__DEPRECATED_tokensLocked != 0 && block.number >= sp.__DEPRECATED_tokensLockedUntil) { + _withdraw(serviceProvider); } // TODO remove after the transition period // Take into account period averaging for multiple unstake requests @@ -564,22 +564,16 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice See {IHorizonStakingMain-withdraw}. * @param _serviceProvider Address of service provider to withdraw funds from - * @param _revertIfThawing If true, the function will revert if the tokens are still thawing */ - function _withdraw(address _serviceProvider, bool _revertIfThawing) private { + function _withdraw(address _serviceProvider) private { // Get tokens available for withdraw and update balance ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; uint256 tokensToWithdraw = sp.__DEPRECATED_tokensLocked; require(tokensToWithdraw != 0, HorizonStakingInvalidZeroTokens()); - - if (_revertIfThawing) { - require( - block.timestamp >= sp.__DEPRECATED_tokensLockedUntil, - HorizonStakingStillThawing(sp.__DEPRECATED_tokensLockedUntil) - ); - } else { - return; - } + require( + block.number >= sp.__DEPRECATED_tokensLockedUntil, + HorizonStakingStillThawing(sp.__DEPRECATED_tokensLockedUntil) + ); // Reset locked tokens sp.__DEPRECATED_tokensLocked = 0; diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index ec3248f39..98a1ca203 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -107,4 +107,21 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { function _getDelegationPool(address verifier) internal view returns (DelegationPool memory) { return staking.getDelegationPool(users.indexer, verifier); } -} \ No newline at end of file + + function _storeServiceProvider( + address _indexer, + uint256 _tokensStaked, + uint256 _tokensAllocated, + uint256 _tokensLocked, + uint256 _tokensLockedUntil, + uint256 _tokensProvisioned + ) internal { + uint256 serviceProviderSlot = 14; + bytes32 serviceProviderBaseSlot = keccak256(abi.encode(_indexer, serviceProviderSlot)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot)), bytes32(_tokensStaked)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 1), bytes32(_tokensAllocated)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 2), bytes32(_tokensLocked)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 3), bytes32(_tokensLockedUntil)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 4), bytes32(_tokensProvisioned)); + } +} diff --git a/packages/horizon/test/staking/stake/unstake.t.sol b/packages/horizon/test/staking/stake/unstake.t.sol index 140148d24..c5d44a3fb 100644 --- a/packages/horizon/test/staking/stake/unstake.t.sol +++ b/packages/horizon/test/staking/stake/unstake.t.sol @@ -3,31 +3,141 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; +import { MathUtils } from "../../../contracts/libraries/MathUtils.sol"; + import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingUnstakeTest is HorizonStakingTest { + function _unstakeTokens(uint256 _tokens) private { + uint256 previousIndexerTokens = token.balanceOf(users.indexer); + uint256 previousIndexerIdleStake = staking.getIdleStake(users.indexer); + + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.StakeWithdrawn(users.indexer, _tokens); + staking.unstake(_tokens); + + uint256 idleStake = staking.getIdleStake(users.indexer); + assertEq(idleStake, previousIndexerIdleStake - _tokens); + + uint256 newIndexerBalance = token.balanceOf(users.indexer); + assertEq(newIndexerBalance - previousIndexerTokens, _tokens); + } + + function _unstakeDuringLockingPeriod( + uint256 _tokens, + uint256 _tokensStillThawing, + uint256 _tokensToWithdraw, + uint32 _oldLockingPeriod + ) private { + uint256 previousIndexerTokens = token.balanceOf(users.indexer); + uint256 previousIndexerIdleStake = staking.getIdleStake(users.indexer); + + vm.expectEmit(address(staking)); + uint256 lockingPeriod = block.number + THAWING_PERIOD_IN_BLOCKS; + if (_tokensStillThawing > 0) { + lockingPeriod = block.number + MathUtils.weightedAverageRoundingUp( + MathUtils.diffOrZero(_oldLockingPeriod, block.number), + _tokensStillThawing, + THAWING_PERIOD_IN_BLOCKS, + _tokens + ); + } + emit IHorizonStakingMain.StakeLocked(users.indexer, _tokens + _tokensStillThawing, lockingPeriod); + staking.unstake(_tokens); + + uint256 idleStake = staking.getIdleStake(users.indexer); + assertEq(idleStake, previousIndexerIdleStake - _tokens); + + uint256 newIndexerBalance = token.balanceOf(users.indexer); + assertEq(newIndexerBalance - previousIndexerTokens, _tokensToWithdraw); + } + + function _storeDeprecatedThawingPeriod(uint32 _thawingPeriod) private { + uint256 slot = 13; + bytes32 value = bytes32(uint256(_thawingPeriod)); + vm.store(address(staking), bytes32(slot), value); + } + /* * TESTS */ function testUnstake_Tokens( - uint256 amount, + uint256 tokens, + uint256 tokensToUnstake, uint32 maxVerifierCut, uint64 thawingPeriod ) public useIndexer - useProvision(amount, maxVerifierCut, thawingPeriod) - useThawAndDeprovision(amount, thawingPeriod) + useProvision(tokens, maxVerifierCut, thawingPeriod) { - uint256 previousIndexerTokens = token.balanceOf(users.indexer); - staking.unstake(amount); - uint256 idleStake = staking.getIdleStake(users.indexer); - assertEq(idleStake, 0 ether); + tokensToUnstake = bound(tokensToUnstake, 1, tokens); + _createThawRequest(tokens); + skip(thawingPeriod + 1); + _deprovision(0); + _unstakeTokens(tokensToUnstake); + } - uint256 newIndexerBalance = token.balanceOf(users.indexer); - assertEq(newIndexerBalance - previousIndexerTokens, amount); + function testUnstake_LockingPeriodGreaterThanZero_TokensDoneThawing( + uint256 tokens, + uint256 tokensToUnstake, + uint256 tokensLocked + ) + public + useIndexer + { + // bounds + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + tokensToUnstake = bound(tokensToUnstake, 1, tokens); + tokensLocked = bound(tokensLocked, 1, MAX_STAKING_TOKENS); + + // vm.store to simulate locked tokens with past locking period + _storeDeprecatedThawingPeriod(THAWING_PERIOD_IN_BLOCKS); + token.transfer(address(staking), tokensLocked); + _storeServiceProvider(users.indexer, tokensLocked, 0, tokensLocked, block.number, 0); + + // create provision, thaw request and deprovision + _createProvision(subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); + _createThawRequest(tokens); + skip(MAX_THAWING_PERIOD + 1); + _deprovision(0); + + // unstake + _unstakeDuringLockingPeriod(tokensToUnstake, 0, tokensLocked, 0); + } + + function testUnstake_LockingPeriodGreaterThanZero_TokensStillThawing( + uint256 tokens, + uint256 tokensToUnstake, + uint256 tokensThawing, + uint32 tokensThawingUntilBlock + ) + public + useIndexer + { + // bounds + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + tokensToUnstake = bound(tokensToUnstake, 1, tokens); + tokensThawing = bound(tokensThawing, 1, MAX_STAKING_TOKENS); + vm.assume(tokensThawingUntilBlock > block.number); + vm.assume(tokensThawingUntilBlock < block.number + THAWING_PERIOD_IN_BLOCKS); + + // vm.store to simulate locked tokens still thawing + _storeDeprecatedThawingPeriod(THAWING_PERIOD_IN_BLOCKS); + token.transfer(address(staking), tokensThawing); + _storeServiceProvider(users.indexer, tokensThawing, 0, tokensThawing, tokensThawingUntilBlock, 0); + + // create provision, thaw request and deprovision + _createProvision(subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); + _createThawRequest(tokens); + skip(MAX_THAWING_PERIOD + 1); + _deprovision(0); + + // unstake + _unstakeDuringLockingPeriod(tokensToUnstake, tokensThawing, 0, tokensThawingUntilBlock); } function testUnstake_RevertWhen_ZeroTokens( diff --git a/packages/horizon/test/staking/stake/withdraw.t.sol b/packages/horizon/test/staking/stake/withdraw.t.sol new file mode 100644 index 000000000..73a96b542 --- /dev/null +++ b/packages/horizon/test/staking/stake/withdraw.t.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingWithdrawTest is HorizonStakingTest { + + /* + * HELPERS + */ + + function _withdrawLockedTokens(uint256 tokens) private { + uint256 previousIndexerTokens = token.balanceOf(users.indexer); + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.StakeWithdrawn(users.indexer, tokens); + staking.withdraw(); + uint256 newIndexerBalance = token.balanceOf(users.indexer); + assertEq(newIndexerBalance - previousIndexerTokens, tokens); + } + + /* + * TESTS + */ + + function testWithdraw_Tokens(uint256 tokens, uint256 tokensLocked) public useIndexer { + vm.assume(tokens > 0); + tokensLocked = bound(tokensLocked, 1, tokens); + _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, MAX_THAWING_PERIOD); + _storeServiceProvider(users.indexer, tokens, 0, tokensLocked, block.timestamp, 0); + _withdrawLockedTokens(tokensLocked); + } + + function testWithdraw_RevertWhen_ZeroTokens(uint256 tokens) public useIndexer { + vm.assume(tokens > 0); + _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, MAX_THAWING_PERIOD); + _storeServiceProvider(users.indexer, tokens, 0, 0, block.timestamp, 0); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidZeroTokens.selector + )); + staking.withdraw(); + } + + function testWithdraw_RevertWhen_StillThawing(uint256 tokens, uint256 tokensLocked) public useIndexer { + vm.assume(tokens > 0); + tokensLocked = bound(tokensLocked, 1, tokens); + _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, MAX_THAWING_PERIOD); + uint256 thawUntil = block.timestamp + 1; + _storeServiceProvider(users.indexer, tokens, 0, tokensLocked, thawUntil, 0); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingStillThawing.selector, + thawUntil + )); + staking.withdraw(); + } +} \ No newline at end of file diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index a5fc1fe27..29daaaa96 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -15,6 +15,7 @@ abstract contract Constants { uint32 internal constant MAX_MAX_VERIFIER_CUT = 1000000; // 100% in parts per million uint64 internal constant MAX_THAWING_PERIOD = 28 days; uint256 internal constant MIN_DELEGATION = 1 ether; + uint32 internal constant THAWING_PERIOD_IN_BLOCKS = 300; // Epoch manager uint256 internal constant EPOCH_LENGTH = 1; // Rewards manager From cab507f92c46af03684c3916e53399219aa08757 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 16 Aug 2024 12:43:09 -0300 Subject: [PATCH 159/343] fix: slashing reverts when exceeding provision balance (OZ M-05) --- .../internal/IHorizonStakingMain.sol | 8 - .../contracts/staking/HorizonStaking.sol | 6 +- .../horizon/test/staking/slash/slash.t.sol | 166 +++++++++--------- 3 files changed, 89 insertions(+), 91 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 2f45ef386..28c865bf2 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -390,14 +390,6 @@ interface IHorizonStakingMain { */ error HorizonStakingInsufficientShares(uint256 shares, uint256 minShares); - // -- Errors: slashing -- - /** - * @notice Thrown when delegation pool reserves are not enough to cover slashing amount. - * @param tokens The actual token amount in the delegation pool - * @param tokensToSlash The amount to be slashed - */ - error HorizonStakingNotEnoughDelegation(uint256 tokens, uint256 tokensToSlash); - // -- Errors: thaw requests -- error HorizonStakingNothingThawing(); diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 79093fa9c..e0de847b0 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -360,9 +360,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { Provision storage prov = _provisions[serviceProvider][verifier]; DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); uint256 tokensProvisionTotal = prov.tokens + pool.tokens; - require(tokensProvisionTotal >= tokens, HorizonStakingInsufficientTokens(prov.tokens, tokens)); + require(tokensProvisionTotal != 0, HorizonStakingInsufficientTokens(tokensProvisionTotal, tokens)); - uint256 tokensToSlash = tokens; + uint256 tokensToSlash = MathUtils.min(tokens, tokensProvisionTotal); uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); if (providerTokensSlashed > 0) { uint256 maxVerifierTokens = prov.tokens.mulPPM(prov.maxVerifierCut); @@ -390,10 +390,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { emit ProvisionSlashed(serviceProvider, verifier, providerTokensSlashed); } + // Since tokensToSlash is already limited above, this subtraction will remain within pool.tokens. tokensToSlash = tokensToSlash - providerTokensSlashed; if (tokensToSlash > 0) { if (_delegationSlashingEnabled) { - require(pool.tokens >= tokensToSlash, HorizonStakingNotEnoughDelegation(pool.tokens, tokensToSlash)); _graphToken().burnTokens(tokensToSlash); uint256 delegationFractionSlashed = (tokensToSlash * FIXED_POINT_PRECISION) / pool.tokens; pool.tokens = pool.tokens - tokensToSlash; diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 758ebc1cf..2fe8c4ef6 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -3,6 +3,9 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; +import { MathUtils } from "../../../contracts/libraries/MathUtils.sol"; + import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingSlashTest is HorizonStakingTest { @@ -24,8 +27,43 @@ contract HorizonStakingSlashTest is HorizonStakingTest { * HELPERS */ - function _slash(uint256 amount, uint256 verifierCutAmount) private { - staking.slash(users.indexer, amount, verifierCutAmount, subgraphDataServiceAddress); + function _slash(uint256 tokens, uint256 verifierCutAmount) private { + uint256 beforeProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + uint256 beforeDelegationTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + bool isDelegationSlashingEnabled = staking.isDelegationSlashingEnabled(); + + // Calculate expected tokens after slashing + uint256 providerTokensSlashed = MathUtils.min(beforeProviderTokens, tokens); + uint256 expectedProviderTokensAfterSlashing = beforeProviderTokens - providerTokensSlashed; + + uint256 delegationTokensSlashed = MathUtils.min(beforeDelegationTokens, tokens - providerTokensSlashed); + uint256 expectedDelegationTokensAfterSlashing = beforeDelegationTokens - (isDelegationSlashingEnabled ? delegationTokensSlashed : 0); + + vm.expectEmit(address(staking)); + if (verifierCutAmount > 0) { + emit IHorizonStakingMain.VerifierTokensSent(users.indexer, subgraphDataServiceAddress, subgraphDataServiceAddress, verifierCutAmount); + } + emit IHorizonStakingMain.ProvisionSlashed(users.indexer, subgraphDataServiceAddress, providerTokensSlashed); + + if (isDelegationSlashingEnabled) { + emit IHorizonStakingMain.DelegationSlashed(users.indexer, subgraphDataServiceAddress, delegationTokensSlashed); + } else { + emit IHorizonStakingMain.DelegationSlashingSkipped(users.indexer, subgraphDataServiceAddress, delegationTokensSlashed); + } + staking.slash(users.indexer, tokens, verifierCutAmount, subgraphDataServiceAddress); + + if (!isDelegationSlashingEnabled) { + expectedDelegationTokensAfterSlashing = beforeDelegationTokens; + } + + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionTokens, expectedProviderTokensAfterSlashing); + + uint256 delegationTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(delegationTokens, expectedDelegationTokensAfterSlashing); + + uint256 verifierTokens = token.balanceOf(subgraphDataServiceAddress); + assertEq(verifierTokens, verifierCutAmount); } /* @@ -33,114 +71,82 @@ contract HorizonStakingSlashTest is HorizonStakingTest { */ function testSlash_Tokens( - uint256 amount, + uint256 tokens, uint32 maxVerifierCut, - uint256 slashAmount, + uint256 slashTokens, uint256 verifierCutAmount - ) public useIndexer useProvision(amount, maxVerifierCut, 0) { + ) public useIndexer useProvision(tokens, maxVerifierCut, 0) { verifierCutAmount = bound(verifierCutAmount, 0, maxVerifierCut); - slashAmount = bound(slashAmount, 1, amount); - uint256 maxVerifierTokens = (slashAmount * maxVerifierCut) / MAX_PPM; + slashTokens = bound(slashTokens, 1, tokens); + uint256 maxVerifierTokens = (slashTokens * maxVerifierCut) / MAX_PPM; vm.assume(verifierCutAmount <= maxVerifierTokens); vm.startPrank(subgraphDataServiceAddress); - _slash(slashAmount, verifierCutAmount); - - uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(provisionTokens, amount - slashAmount); - - uint256 verifierTokens = token.balanceOf(subgraphDataServiceAddress); - assertEq(verifierTokens, verifierCutAmount); + _slash(slashTokens, verifierCutAmount); } - function testSlash_RevertWhen_TooManyTokens( - uint256 amount, - uint32 maxVerifierCut, - uint256 verifierCutAmount - ) public useIndexer useProvision(amount, maxVerifierCut, 0) { - uint256 maxVerifierTokens = (amount * maxVerifierCut) / MAX_PPM; - verifierCutAmount = bound(verifierCutAmount, maxVerifierTokens + 1, MAX_STAKING_TOKENS); - - vm.startPrank(subgraphDataServiceAddress); - bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingTooManyTokens(uint256,uint256)", - verifierCutAmount, - maxVerifierTokens - ); - vm.expectRevert(expectedError); - _slash(amount, verifierCutAmount); - } - - function testSlash_DelegationDisabled_SlashingOverProvisionTokens( - uint256 amount, - uint256 slashAmount, + function testSlash_DelegationDisabled_SlashingOverProviderTokens( + uint256 tokens, + uint256 slashTokens, uint256 verifierCutAmount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(false) { - delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); - slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); + uint256 delegationTokens + ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(false) { + vm.assume(slashTokens > tokens); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); - uint256 maxVerifierTokens = (amount * MAX_MAX_VERIFIER_CUT) / MAX_PPM; + uint256 maxVerifierTokens = (tokens * MAX_MAX_VERIFIER_CUT) / MAX_PPM; vm.assume(verifierCutAmount <= maxVerifierTokens); resetPrank(users.delegator); - _delegate(delegationAmount, subgraphDataServiceAddress); + _delegate(delegationTokens, subgraphDataServiceAddress); vm.startPrank(subgraphDataServiceAddress); - _slash(slashAmount, verifierCutAmount); - - uint256 provisionProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(provisionProviderTokens, 0 ether); - - uint256 verifierTokens = token.balanceOf(address(subgraphDataServiceAddress)); - assertEq(verifierTokens, verifierCutAmount); - - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); - // No slashing occurred for delegation - assertEq(delegatedTokens, delegationAmount); + _slash(slashTokens, verifierCutAmount); } - function testSlash_DelegationEnabled_SlashingOverProvisionTokens( - uint256 amount, - uint256 slashAmount, + function testSlash_DelegationEnabled_SlashingOverProviderTokens( + uint256 tokens, + uint256 slashTokens, uint256 verifierCutAmount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(true) { - delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); - slashAmount = bound(slashAmount, amount + 1, amount + delegationAmount); + uint256 delegationTokens + ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(true) { + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + slashTokens = bound(slashTokens, tokens + 1, tokens + delegationTokens); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); - uint256 maxVerifierTokens = (amount * MAX_MAX_VERIFIER_CUT) / MAX_PPM; + uint256 maxVerifierTokens = (tokens * MAX_MAX_VERIFIER_CUT) / MAX_PPM; vm.assume(verifierCutAmount <= maxVerifierTokens); resetPrank(users.delegator); - _delegate(delegationAmount, subgraphDataServiceAddress); + _delegate(delegationTokens, subgraphDataServiceAddress); vm.startPrank(subgraphDataServiceAddress); - _slash(slashAmount, verifierCutAmount); - - uint256 provisionProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(provisionProviderTokens, 0 ether); - - uint256 verifierTokens = token.balanceOf(address(subgraphDataServiceAddress)); - assertEq(verifierTokens, verifierCutAmount); + _slash(slashTokens, verifierCutAmount); + } - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); - uint256 slashedDelegation = slashAmount - amount; - assertEq(delegatedTokens, delegationAmount - slashedDelegation); + function testSlash_OverProvisionSize( + uint256 tokens, + uint256 slashTokens, + uint256 delegationTokens + ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) { + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + vm.assume(slashTokens > tokens + delegationTokens); + + vm.startPrank(subgraphDataServiceAddress); + _slash(slashTokens, 0); } function testSlash_RevertWhen_NoProvision( - uint256 amount, - uint256 slashAmount - ) public useIndexer useStake(amount) { - slashAmount = bound(slashAmount, 1, amount); - bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInsufficientTokens(uint256,uint256)", - 0 ether, - slashAmount + uint256 tokens, + uint256 slashTokens + ) public useIndexer useStake(tokens) { + vm.assume(slashTokens > 0); + bytes memory expectedError = abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInsufficientTokens.selector, + 0, + slashTokens ); vm.expectRevert(expectedError); vm.startPrank(subgraphDataServiceAddress); - _slash(slashAmount, 0); + staking.slash(users.indexer, slashTokens, 0, subgraphDataServiceAddress); } } \ No newline at end of file From 66975489d680ad197dc4ba295a70e51f75674c18 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Mon, 19 Aug 2024 16:41:33 -0300 Subject: [PATCH 160/343] fix: revert when delegating, undelegating or withdrawing from an invalid delegation pool (OZ M-06) --- .../internal/IHorizonStakingMain.sol | 7 ++ .../contracts/staking/HorizonStaking.sol | 7 ++ .../horizon/test/staking/HorizonStaking.t.sol | 71 ++++++++++++++++-- .../test/staking/delegation/delegate.t.sol | 30 +++++++- .../test/staking/delegation/undelegate.t.sol | 35 +++++---- .../test/staking/delegation/withdraw.t.sol | 72 ++++++++++++------- .../horizon/test/staking/slash/slash.t.sol | 49 ------------- 7 files changed, 176 insertions(+), 95 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 28c865bf2..2ec440263 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -390,6 +390,13 @@ interface IHorizonStakingMain { */ error HorizonStakingInsufficientShares(uint256 shares, uint256 minShares); + /** + * @notice Thrown when as a result of slashing delegation pool has no tokens but has shares. + * @param serviceProvider The service provider address + * @param verifier The verifier address + */ + error HorizonStakingInvalidDelegationPool(address serviceProvider, address verifier); + // -- Errors: thaw requests -- error HorizonStakingNothingThawing(); diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index e0de847b0..a8abafa7b 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -713,6 +713,11 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); DelegationInternal storage delegation = pool.delegators[msg.sender]; + require( + pool.tokens != 0 || pool.shares == 0, + HorizonStakingInvalidDelegationPool(_serviceProvider, _verifier) + ); + // Calculate shares to issue uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); require(shares != 0 && shares >= _minSharesOut, HorizonStakingSlippageProtection(shares, _minSharesOut)); @@ -735,6 +740,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); DelegationInternal storage delegation = pool.delegators[msg.sender]; require(delegation.shares >= _shares, HorizonStakingInsufficientShares(delegation.shares, _shares)); + require(pool.tokens != 0, HorizonStakingInvalidDelegationPool(_serviceProvider, _verifier)); uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); @@ -776,6 +782,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 _nThawRequests ) private { DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); + require(pool.tokens != 0, HorizonStakingInvalidDelegationPool(_serviceProvider, _verifier)); uint256 tokensThawed = 0; uint256 sharesThawing = pool.sharesThawing; diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index 98a1ca203..dde585a58 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -3,7 +3,11 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; +import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { IHorizonStakingTypes } from "../../contracts/interfaces/internal/IHorizonStakingTypes.sol"; +import { LinkedList } from "../../contracts/libraries/LinkedList.sol"; +import { MathUtils } from "../../contracts/libraries/MathUtils.sol"; + import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { @@ -74,6 +78,15 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { _; } + modifier useDelegationSlashing(bool enabled) { + address msgSender; + (, msgSender,) = vm.readCallers(); + resetPrank(users.governor); + staking.setDelegationSlashingEnabled(enabled); + resetPrank(msgSender); + _; + } + /* * HELPERS */ @@ -91,17 +104,26 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { staking.deprovision(users.indexer, subgraphDataServiceAddress, nThawRequests); } - function _delegate(uint256 amount, address verifier) internal { - token.approve(address(staking), amount); - staking.delegate(users.indexer, verifier, amount, 0); + function _delegate(uint256 _tokens, address _verifier) internal { + token.approve(address(staking), _tokens); + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.TokensDelegated(users.indexer, _verifier, users.delegator, _tokens); + staking.delegate(users.indexer, _verifier, _tokens, 0); + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, _verifier); + assertEq(delegatedTokens, _tokens); } function _getDelegation(address verifier) internal view returns (Delegation memory) { return staking.getDelegation(users.indexer, verifier, users.delegator); } - function _undelegate(uint256 shares, address verifier) internal { - staking.undelegate(users.indexer, verifier, shares); + function _undelegate(uint256 _shares, address _verifier) internal { + staking.undelegate(users.indexer, _verifier, _shares); + + LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, _verifier, users.delegator); + ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + + assertEq(thawRequest.shares, _shares); } function _getDelegationPool(address verifier) internal view returns (DelegationPool memory) { @@ -124,4 +146,43 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 3), bytes32(_tokensLockedUntil)); vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 4), bytes32(_tokensProvisioned)); } + + function _slash(uint256 tokens, uint256 verifierCutAmount) internal { + uint256 beforeProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + uint256 beforeDelegationTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + bool isDelegationSlashingEnabled = staking.isDelegationSlashingEnabled(); + + // Calculate expected tokens after slashing + uint256 providerTokensSlashed = MathUtils.min(beforeProviderTokens, tokens); + uint256 expectedProviderTokensAfterSlashing = beforeProviderTokens - providerTokensSlashed; + + uint256 delegationTokensSlashed = MathUtils.min(beforeDelegationTokens, tokens - providerTokensSlashed); + uint256 expectedDelegationTokensAfterSlashing = beforeDelegationTokens - (isDelegationSlashingEnabled ? delegationTokensSlashed : 0); + + vm.expectEmit(address(staking)); + if (verifierCutAmount > 0) { + emit IHorizonStakingMain.VerifierTokensSent(users.indexer, subgraphDataServiceAddress, subgraphDataServiceAddress, verifierCutAmount); + } + emit IHorizonStakingMain.ProvisionSlashed(users.indexer, subgraphDataServiceAddress, providerTokensSlashed); + + if (isDelegationSlashingEnabled) { + emit IHorizonStakingMain.DelegationSlashed(users.indexer, subgraphDataServiceAddress, delegationTokensSlashed); + } else { + emit IHorizonStakingMain.DelegationSlashingSkipped(users.indexer, subgraphDataServiceAddress, delegationTokensSlashed); + } + staking.slash(users.indexer, tokens, verifierCutAmount, subgraphDataServiceAddress); + + if (!isDelegationSlashingEnabled) { + expectedDelegationTokensAfterSlashing = beforeDelegationTokens; + } + + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(provisionTokens, expectedProviderTokensAfterSlashing); + + uint256 delegationTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + assertEq(delegationTokens, expectedDelegationTokensAfterSlashing); + + uint256 verifierTokens = token.balanceOf(subgraphDataServiceAddress); + assertEq(verifierTokens, verifierCutAmount); + } } diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index c254756fc..4e3a1d23c 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -3,6 +3,8 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; + import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingDelegateTest is HorizonStakingTest { @@ -14,9 +16,10 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { function testDelegate_Tokens( uint256 amount, uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(delegatedTokens, delegationAmount); + ) public useIndexer useProvision(amount, 0, 0) { + delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); + resetPrank(users.delegator); + _delegate(delegationAmount, subgraphDataServiceAddress); } function testDelegate_RevertWhen_ZeroTokens( @@ -57,4 +60,25 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceLegacyAddress); assertEq(delegatedTokens, delegationAmount); } + + function testDelegate_RevertWhen_InvalidPool( + uint256 tokens, + uint256 delegationTokens + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing(true) { + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + resetPrank(users.delegator); + _delegate(delegationTokens, subgraphDataServiceAddress); + + resetPrank(subgraphDataServiceAddress); + _slash(tokens + delegationTokens, 0); + + resetPrank(users.delegator); + token.approve(address(staking), delegationTokens); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + users.indexer, + subgraphDataServiceAddress + )); + staking.delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + } } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 5dcc85183..98b00668f 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -3,9 +3,9 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { HorizonStakingTest } from "../HorizonStaking.t.sol"; +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; -import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingUndelegateTest is HorizonStakingTest { @@ -20,11 +20,6 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { resetPrank(users.delegator); Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); _undelegate(delegation.shares, subgraphDataServiceAddress); - - LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceAddress, users.delegator); - ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); - - assertEq(thawRequest.shares, delegation.shares); } function testUndelegate_RevertWhen_ZeroTokens( @@ -52,7 +47,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { overDelegationShares ); vm.expectRevert(expectedError); - _undelegate(overDelegationShares, subgraphDataServiceAddress); + staking.undelegate(users.indexer, subgraphDataServiceAddress, overDelegationShares); } function testUndelegate_RevertWhen_UndelegateLeavesInsufficientTokens( @@ -73,7 +68,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { MIN_DELEGATION ); vm.expectRevert(expectedError); - _undelegate(withdrawShares, subgraphDataServiceAddress); + staking.undelegate(users.indexer, subgraphDataServiceAddress, withdrawShares); } function testUndelegate_LegacySubgraphService( @@ -88,10 +83,26 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { _delegate(delegationAmount, subgraphDataServiceLegacyAddress); Delegation memory delegation = _getDelegation(subgraphDataServiceLegacyAddress); _undelegate(delegation.shares, subgraphDataServiceLegacyAddress); + } - LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceLegacyAddress, users.delegator); - ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + function testUndelegate_RevertWhen_InvalidPool( + uint256 tokens, + uint256 delegationTokens + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing(true) { + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + resetPrank(users.delegator); + _delegate(delegationTokens, subgraphDataServiceAddress); - assertEq(thawRequest.shares, delegation.shares); + resetPrank(subgraphDataServiceAddress); + _slash(tokens + delegationTokens, 0); + + resetPrank(users.delegator); + Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + users.indexer, + subgraphDataServiceAddress + )); + staking.undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 8110c3d9a..ea26a7120 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -3,10 +3,11 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { HorizonStakingTest } from "../HorizonStaking.t.sol"; - +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { /* @@ -35,8 +36,21 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { * HELPERS */ - function _withdrawDelegated(address verifier) private { - staking.withdrawDelegated(users.indexer, verifier, address(0x0), 0, 0); + function _withdrawDelegated(address _verifier, address _newIndexer) private { + LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, _verifier, users.delegator); + ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + + uint256 previousBalance = token.balanceOf(users.delegator); + uint256 expectedTokens = _expectedTokensFromThawRequest(thawRequest, _verifier); + staking.withdrawDelegated(users.indexer, _verifier, _newIndexer, 0, 0); + + if (_newIndexer != address(0)) { + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(_newIndexer, _verifier); + assertEq(delegatedTokens, expectedTokens); + } else { + uint256 newBalance = token.balanceOf(users.delegator); + assertEq(newBalance - previousBalance, expectedTokens); + } } function _expectedTokensFromThawRequest(ThawRequest memory thawRequest, address verifier) private view returns (uint256) { @@ -75,12 +89,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { skip(thawRequest.thawingUntil + 1); - uint256 previousBalance = token.balanceOf(users.delegator); - uint256 expectedTokens = _expectedTokensFromThawRequest(thawRequest, subgraphDataServiceAddress); - _withdrawDelegated(subgraphDataServiceAddress); - - uint256 newBalance = token.balanceOf(users.delegator); - assertEq(newBalance - previousBalance, expectedTokens); + _withdrawDelegated(subgraphDataServiceAddress, address(0)); } function testWithdrawDelegation_RevertWhen_NotThawing( @@ -93,7 +102,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); - _withdrawDelegated(subgraphDataServiceAddress); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); } function testWithdrawDelegation_MoveToNewServiceProvider( @@ -109,15 +118,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { // Setup new service provider address newIndexer = _setupNewIndexer(10_000_000 ether); - - uint256 previousBalance = token.balanceOf(users.delegator); - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0, 0); - - uint256 newBalance = token.balanceOf(users.delegator); - assertEq(newBalance, previousBalance); - - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(newIndexer, subgraphDataServiceAddress); - assertEq(delegatedTokens, delegationAmount); + _withdrawDelegated(subgraphDataServiceAddress, newIndexer); } function testWithdrawDelegation_ZeroTokens( @@ -130,7 +131,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useUndelegate(delegationAmount) { uint256 previousBalance = token.balanceOf(users.delegator); - _withdrawDelegated(subgraphDataServiceAddress); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); // Nothing changed since thawing period haven't finished uint256 newBalance = token.balanceOf(users.delegator); @@ -173,11 +174,30 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { skip(thawRequest.thawingUntil + 1); - uint256 previousBalance = token.balanceOf(users.delegator); - uint256 expectedTokens = _expectedTokensFromThawRequest(thawRequest, subgraphDataServiceLegacyAddress); - _withdrawDelegated(subgraphDataServiceLegacyAddress); + _withdrawDelegated(subgraphDataServiceLegacyAddress, address(0)); + } - uint256 newBalance = token.balanceOf(users.delegator); - assertEq(newBalance - previousBalance, expectedTokens); + function testWithdrawDelegation_RevertWhen_InvalidPool( + uint256 tokens, + uint256 delegationTokens + ) public useIndexer useProvision(tokens, 0, MAX_THAWING_PERIOD) useDelegationSlashing(true) { + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + resetPrank(users.delegator); + _delegate(delegationTokens, subgraphDataServiceAddress); + Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + _undelegate(delegation.shares, subgraphDataServiceAddress); + + skip(MAX_THAWING_PERIOD + 1); + + resetPrank(subgraphDataServiceAddress); + _slash(tokens + delegationTokens, 0); + + resetPrank(users.delegator); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + users.indexer, + subgraphDataServiceAddress + )); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 2fe8c4ef6..7797186b4 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -4,7 +4,6 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; -import { MathUtils } from "../../../contracts/libraries/MathUtils.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; @@ -14,58 +13,10 @@ contract HorizonStakingSlashTest is HorizonStakingTest { * MODIFIERS */ - modifier useDelegationSlashing(bool enabled) { - address msgSender; - (, msgSender,) = vm.readCallers(); - vm.startPrank(users.governor); - staking.setDelegationSlashingEnabled(enabled); - vm.startPrank(msgSender); - _; - } - /* * HELPERS */ - function _slash(uint256 tokens, uint256 verifierCutAmount) private { - uint256 beforeProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); - uint256 beforeDelegationTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); - bool isDelegationSlashingEnabled = staking.isDelegationSlashingEnabled(); - - // Calculate expected tokens after slashing - uint256 providerTokensSlashed = MathUtils.min(beforeProviderTokens, tokens); - uint256 expectedProviderTokensAfterSlashing = beforeProviderTokens - providerTokensSlashed; - - uint256 delegationTokensSlashed = MathUtils.min(beforeDelegationTokens, tokens - providerTokensSlashed); - uint256 expectedDelegationTokensAfterSlashing = beforeDelegationTokens - (isDelegationSlashingEnabled ? delegationTokensSlashed : 0); - - vm.expectEmit(address(staking)); - if (verifierCutAmount > 0) { - emit IHorizonStakingMain.VerifierTokensSent(users.indexer, subgraphDataServiceAddress, subgraphDataServiceAddress, verifierCutAmount); - } - emit IHorizonStakingMain.ProvisionSlashed(users.indexer, subgraphDataServiceAddress, providerTokensSlashed); - - if (isDelegationSlashingEnabled) { - emit IHorizonStakingMain.DelegationSlashed(users.indexer, subgraphDataServiceAddress, delegationTokensSlashed); - } else { - emit IHorizonStakingMain.DelegationSlashingSkipped(users.indexer, subgraphDataServiceAddress, delegationTokensSlashed); - } - staking.slash(users.indexer, tokens, verifierCutAmount, subgraphDataServiceAddress); - - if (!isDelegationSlashingEnabled) { - expectedDelegationTokensAfterSlashing = beforeDelegationTokens; - } - - uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(provisionTokens, expectedProviderTokensAfterSlashing); - - uint256 delegationTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(delegationTokens, expectedDelegationTokensAfterSlashing); - - uint256 verifierTokens = token.balanceOf(subgraphDataServiceAddress); - assertEq(verifierTokens, verifierCutAmount); - } - /* * TESTS */ From 50a8fa317fea240f767b2ed58baa34b6e9ec6da0 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 20 Aug 2024 16:07:30 -0300 Subject: [PATCH 161/343] fix: rename error --- .../contracts/interfaces/internal/IHorizonStakingMain.sol | 2 +- packages/horizon/contracts/staking/HorizonStaking.sol | 6 +++--- packages/horizon/test/staking/delegation/delegate.t.sol | 2 +- packages/horizon/test/staking/delegation/undelegate.t.sol | 2 +- packages/horizon/test/staking/delegation/withdraw.t.sol | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 2ec440263..25c5f85aa 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -395,7 +395,7 @@ interface IHorizonStakingMain { * @param serviceProvider The service provider address * @param verifier The verifier address */ - error HorizonStakingInvalidDelegationPool(address serviceProvider, address verifier); + error HorizonStakingInvalidDelegationPoolState(address serviceProvider, address verifier); // -- Errors: thaw requests -- diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index a8abafa7b..f6fd5cff3 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -715,7 +715,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { require( pool.tokens != 0 || pool.shares == 0, - HorizonStakingInvalidDelegationPool(_serviceProvider, _verifier) + HorizonStakingInvalidDelegationPoolState(_serviceProvider, _verifier) ); // Calculate shares to issue @@ -740,7 +740,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); DelegationInternal storage delegation = pool.delegators[msg.sender]; require(delegation.shares >= _shares, HorizonStakingInsufficientShares(delegation.shares, _shares)); - require(pool.tokens != 0, HorizonStakingInvalidDelegationPool(_serviceProvider, _verifier)); + require(pool.tokens != 0, HorizonStakingInvalidDelegationPoolState(_serviceProvider, _verifier)); uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); @@ -782,7 +782,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 _nThawRequests ) private { DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); - require(pool.tokens != 0, HorizonStakingInvalidDelegationPool(_serviceProvider, _verifier)); + require(pool.tokens != 0, HorizonStakingInvalidDelegationPoolState(_serviceProvider, _verifier)); uint256 tokensThawed = 0; uint256 sharesThawing = pool.sharesThawing; diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 4e3a1d23c..183463717 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -75,7 +75,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { resetPrank(users.delegator); token.approve(address(staking), delegationTokens); vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, users.indexer, subgraphDataServiceAddress )); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 98b00668f..5025ccc39 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -99,7 +99,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { resetPrank(users.delegator); Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, users.indexer, subgraphDataServiceAddress )); diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index ea26a7120..6ec26c937 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -194,7 +194,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { resetPrank(users.delegator); vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, users.indexer, subgraphDataServiceAddress )); From bdaa2c42038197d417aaca412d495d5d2876f226 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 20 Aug 2024 16:33:27 -0300 Subject: [PATCH 162/343] fix: check for shares thawing --- .../contracts/staking/HorizonStaking.sol | 2 +- .../test/staking/delegation/delegate.t.sol | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index f6fd5cff3..4d3349b7a 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -714,7 +714,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { DelegationInternal storage delegation = pool.delegators[msg.sender]; require( - pool.tokens != 0 || pool.shares == 0, + pool.tokens != 0 || (pool.shares == 0 && pool.sharesThawing == 0), HorizonStakingInvalidDelegationPoolState(_serviceProvider, _verifier) ); diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 183463717..11a823a32 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -81,4 +81,27 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { )); staking.delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); } + + function testDelegate_RevertWhen_ThawingShares_InvalidPool( + uint256 tokens, + uint256 delegationTokens + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing(true) { + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + resetPrank(users.delegator); + _delegate(delegationTokens, subgraphDataServiceAddress); + Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + _undelegate(delegation.shares, subgraphDataServiceAddress); + + resetPrank(subgraphDataServiceAddress); + _slash(tokens + delegationTokens, 0); + + resetPrank(users.delegator); + token.approve(address(staking), delegationTokens); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, + users.indexer, + subgraphDataServiceAddress + )); + staking.delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + } } \ No newline at end of file From 3ab169b893aa4cc1c16f4b6090e83d8b5899e0aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 22 Aug 2024 12:09:50 -0300 Subject: [PATCH 163/343] fix: return tokens to delegator when bridging if the pool is invalid (OZ M-06) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../horizon/contracts/staking/HorizonStakingExtension.sol | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 3aa425154..6e4894bcc 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -348,6 +348,13 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; IHorizonStakingTypes.DelegationInternal storage delegation = pool.delegators[_delegationData.delegator]; + // If pool is in an invalid state, return the tokens to the delegator + if (pool.tokens == 0 && (pool.shares == 0 || pool.sharesThawing == 0)) { + _graphToken().transfer(_delegationData.delegator, _tokens); + emit TransferredDelegationReturnedToDelegator(_delegationData.indexer, _delegationData.delegator, _tokens); + return; + } + // Calculate shares to issue (without applying any delegation tax) uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / pool.tokens); From 5a06dd8697f2a84dbc2b4af5e9e109095f3e344f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 22 Aug 2024 14:15:44 -0300 Subject: [PATCH 164/343] fix: invalid pool detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/contracts/staking/HorizonStakingExtension.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 6e4894bcc..41dda175f 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -349,7 +349,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon IHorizonStakingTypes.DelegationInternal storage delegation = pool.delegators[_delegationData.delegator]; // If pool is in an invalid state, return the tokens to the delegator - if (pool.tokens == 0 && (pool.shares == 0 || pool.sharesThawing == 0)) { + if (pool.tokens == 0 && (pool.shares != 0 || pool.sharesThawing != 0)) { _graphToken().transfer(_delegationData.delegator, _tokens); emit TransferredDelegationReturnedToDelegator(_delegationData.indexer, _delegationData.delegator, _tokens); return; From 1650a91979c9793fe6771d79b8e5ad5265d193ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 20 Aug 2024 16:48:54 -0300 Subject: [PATCH 165/343] fix: wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../internal/IHorizonStakingExtension.sol | 3 +- packages/horizon/test/GraphBase.t.sol | 8 +- .../horizon/test/staking/HorizonStaking.t.sol | 217 ++++++++++++++++-- .../test/staking/delegation/addToPool.t.sol | 2 + .../test/staking/delegation/delegate.t.sol | 46 ++-- .../test/staking/delegation/undelegate.t.sol | 64 ++++-- .../test/staking/delegation/withdraw.t.sol | 10 +- .../horizon/test/staking/slash/slash.t.sol | 4 +- .../test/staking/transfer-tools/ttools.t.sol | 76 ++++++ 9 files changed, 359 insertions(+), 71 deletions(-) create mode 100644 packages/horizon/test/staking/transfer-tools/ttools.t.sol diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 80fc52ea0..2df5cd82a 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -3,12 +3,13 @@ pragma solidity 0.8.26; import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; +import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; /** * @title Interface for {HorizonStakingExtension} contract. * @notice Provides functions for managing legacy allocations and transfer tools. */ -interface IHorizonStakingExtension is IRewardsIssuer { +interface IHorizonStakingExtension is IRewardsIssuer, IL2StakingBase { /** * @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment * An allocation is created in the allocate() function and closed in closeAllocation() diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index fec51c345..7126c5313 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -43,6 +43,10 @@ abstract contract GraphBaseTest is Utils, Constants { address subgraphDataServiceLegacyAddress = makeAddr("subgraphDataServiceLegacyAddress"); address subgraphDataServiceAddress = makeAddr("subgraphDataServiceAddress"); + + // We use these addresses to mock calls from the counterpart staking contract + address graphTokenGatewayAddress = makeAddr("GraphTokenGateway"); + address counterpartStaking = makeAddr("counterpartStaking"); /* Users */ @@ -144,7 +148,7 @@ abstract contract GraphBaseTest is Utils, Constants { controller.setContractProxy(keccak256("EpochManager"), address(epochManager)); controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); controller.setContractProxy(keccak256("Curation"), address(curation)); - controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); + controller.setContractProxy(keccak256("GraphTokenGateway"), graphTokenGatewayAddress); controller.setContractProxy(keccak256("GraphProxyAdmin"), address(proxyAdmin)); resetPrank(users.deployer); @@ -171,6 +175,8 @@ abstract contract GraphBaseTest is Utils, Constants { proxyAdmin.upgrade(stakingProxy, address(stakingBase)); proxyAdmin.acceptProxy(stakingBase, stakingProxy); staking = IHorizonStaking(address(stakingProxy)); + + staking.setCounterpartStakingAddress(address(counterpartStaking)); } function setupProtocol() private { diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index dde585a58..64dbc1630 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; +import { stdStorage, StdStorage } from "forge-std/Test.sol"; import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { IHorizonStakingTypes } from "../../contracts/interfaces/internal/IHorizonStakingTypes.sol"; @@ -11,6 +12,7 @@ import { MathUtils } from "../../contracts/libraries/MathUtils.sol"; import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { + using stdStorage for StdStorage; /* * MODIFIERS @@ -60,18 +62,18 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { modifier useDelegation(uint256 delegationAmount) { address msgSender; - (, msgSender,) = vm.readCallers(); + (, msgSender, ) = vm.readCallers(); vm.assume(delegationAmount > MIN_DELEGATION); vm.assume(delegationAmount <= MAX_STAKING_TOKENS); vm.startPrank(users.delegator); - _delegate(delegationAmount, subgraphDataServiceAddress); + _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); vm.startPrank(msgSender); _; } modifier useLockedVerifier(address verifier) { address msgSender; - (, msgSender,) = vm.readCallers(); + (, msgSender, ) = vm.readCallers(); resetPrank(users.governor); staking.setAllowedLockedVerifier(verifier, true); resetPrank(msgSender); @@ -80,7 +82,7 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { modifier useDelegationSlashing(bool enabled) { address msgSender; - (, msgSender,) = vm.readCallers(); + (, msgSender, ) = vm.readCallers(); resetPrank(users.governor); staking.setDelegationSlashingEnabled(enabled); resetPrank(msgSender); @@ -104,26 +106,167 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { staking.deprovision(users.indexer, subgraphDataServiceAddress, nThawRequests); } - function _delegate(uint256 _tokens, address _verifier) internal { - token.approve(address(staking), _tokens); - vm.expectEmit(address(staking)); - emit IHorizonStakingMain.TokensDelegated(users.indexer, _verifier, users.delegator, _tokens); - staking.delegate(users.indexer, _verifier, _tokens, 0); - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, _verifier); - assertEq(delegatedTokens, _tokens); + function _delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) internal { + __delegate(serviceProvider, verifier, tokens, minSharesOut, false); } - function _getDelegation(address verifier) internal view returns (Delegation memory) { - return staking.getDelegation(users.indexer, verifier, users.delegator); + function _delegateLegacy(address serviceProvider, uint256 tokens) internal { + __delegate(serviceProvider, subgraphDataServiceLegacyAddress, tokens, 0, true); + } + + + struct DelegateData { + DelegationPool pool; + Delegation delegation; + uint256 storagePoolTokens; + uint256 delegatedTokens; + uint256 delegatorBalance; + uint256 stakingBalance; + } + + function __delegate( + address serviceProvider, + address verifier, + uint256 tokens, + uint256 minSharesOut, + bool legacy + ) internal { + (, address delegator, ) = vm.readCallers(); + + // before + DelegateData memory beforeData = DelegateData({ + pool: staking.getDelegationPool(serviceProvider, verifier), + delegation: staking.getDelegation(serviceProvider, verifier, delegator), + storagePoolTokens: uint256(vm.load(address(staking), _getSlotPoolTokens(serviceProvider, verifier, legacy))), + delegatedTokens: staking.getDelegatedTokensAvailable(serviceProvider, verifier), + delegatorBalance: token.balanceOf(delegator), + stakingBalance: token.balanceOf(address(staking)) + }); + + uint256 calcShares = (beforeData.pool.tokens == 0) + ? tokens + : ((tokens * beforeData.pool.shares) / (beforeData.pool.tokens - beforeData.pool.tokensThawing)); + + // delegate + token.approve(address(staking), tokens); + vm.expectEmit(); + emit IHorizonStakingMain.TokensDelegated(serviceProvider, verifier, delegator, tokens); + if (legacy) { + staking.delegate(serviceProvider, tokens); + } else { + staking.delegate(serviceProvider, verifier, tokens, minSharesOut); + } + + // after + DelegateData memory afterData = DelegateData({ + pool: staking.getDelegationPool(serviceProvider, verifier), + delegation: staking.getDelegation(serviceProvider, verifier, delegator), + storagePoolTokens: uint256(vm.load(address(staking), _getSlotPoolTokens(serviceProvider, verifier, legacy))), + delegatedTokens: staking.getDelegatedTokensAvailable(serviceProvider, verifier), + delegatorBalance: token.balanceOf(delegator), + stakingBalance: token.balanceOf(address(staking)) + }); + + uint256 deltaShares = afterData.delegation.shares - beforeData.delegation.shares; + + // assertions + assertEq(beforeData.pool.tokens + tokens, afterData.pool.tokens); + assertEq(beforeData.pool.shares + calcShares, afterData.pool.shares); + assertEq(beforeData.pool.tokensThawing, afterData.pool.tokensThawing); + assertEq(beforeData.pool.sharesThawing, afterData.pool.sharesThawing); + assertGe(deltaShares, minSharesOut); + assertEq(calcShares, deltaShares); + assertEq(beforeData.delegatedTokens + tokens, afterData.delegatedTokens); + // Ensure correct slot is being updated, pools are stored in different storage locations for legacy subgraph data service + assertEq(beforeData.storagePoolTokens + tokens, afterData.storagePoolTokens); + assertEq(beforeData.delegatorBalance - tokens, afterData.delegatorBalance); + assertEq(beforeData.stakingBalance + tokens, afterData.stakingBalance); + } + + function _undelegate(address serviceProvider, address verifier, uint256 shares) internal { + __undelegate(serviceProvider, verifier, shares, false); + } + + function _undelegateLegacy(address serviceProvider, uint256 shares) internal { + __undelegate(serviceProvider, subgraphDataServiceLegacyAddress, shares, true); } - function _undelegate(uint256 _shares, address _verifier) internal { - staking.undelegate(users.indexer, _verifier, _shares); + function __undelegate(address serviceProvider, address verifier, uint256 shares, bool legacy) internal { + (, address delegator, ) = vm.readCallers(); + + // Delegation pool data is stored in a different storage slot for the legacy subgraph data service + bytes32 slotPoolShares; + if (legacy) { + slotPoolShares = bytes32(uint256(keccak256(abi.encode(serviceProvider, 20))) + 3); + } else { + slotPoolShares = bytes32( + uint256(keccak256(abi.encode(verifier, keccak256(abi.encode(serviceProvider, 33))))) + 3 + ); + } - LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, _verifier, users.delegator); - ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + // before + DelegationPool memory beforePool = staking.getDelegationPool(serviceProvider, verifier); + Delegation memory beforeDelegation = staking.getDelegation(serviceProvider, verifier, delegator); + LinkedList.List memory beforeThawRequestList = staking.getThawRequestList(serviceProvider, verifier, delegator); + uint256 beforeStoragePoolShares = uint256(vm.load(address(staking), slotPoolShares)); + uint256 beforeDelegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); + + uint256 calcTokens = ((beforePool.tokens - beforePool.tokensThawing) * shares) / beforePool.shares; + uint256 calcThawingShares = beforePool.tokensThawing == 0 + ? calcTokens + : (beforePool.sharesThawing * calcTokens) / beforePool.tokensThawing; + uint64 calcThawingUntil = staking.getProvision(serviceProvider, verifier).thawingPeriod + + uint64(block.timestamp); + bytes32 calcThawRequestId = keccak256( + abi.encodePacked(serviceProvider, verifier, delegator, beforeThawRequestList.nonce) + ); + + // undelegate + vm.expectEmit(); + emit IHorizonStakingMain.ThawRequestCreated( + serviceProvider, + verifier, + delegator, + calcThawingShares, + calcThawingUntil, + calcThawRequestId + ); + vm.expectEmit(); + emit IHorizonStakingMain.TokensUndelegated(serviceProvider, verifier, delegator, calcTokens); + if (legacy) { + staking.undelegate(serviceProvider, shares); + } else { + staking.undelegate(serviceProvider, verifier, shares); + } - assertEq(thawRequest.shares, _shares); + // after + DelegationPool memory afterPool = staking.getDelegationPool(users.indexer, verifier); + Delegation memory afterDelegation = staking.getDelegation(serviceProvider, verifier, delegator); + LinkedList.List memory afterThawRequestList = staking.getThawRequestList(serviceProvider, verifier, delegator); + ThawRequest memory afterThawRequest = staking.getThawRequest(calcThawRequestId); + uint256 afterStoragePoolShares = uint256(vm.load(address(staking), slotPoolShares)); + uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); + + // assertions + assertEq(beforePool.shares, afterPool.shares + shares); + assertEq(beforePool.tokens, afterPool.tokens); + assertEq(beforePool.tokensThawing + calcTokens, afterPool.tokensThawing); + assertEq(beforePool.sharesThawing + calcThawingShares, afterPool.sharesThawing); + assertEq(beforeDelegation.shares - shares, afterDelegation.shares); + assertEq(afterThawRequest.shares, calcThawingShares); + assertEq(afterThawRequest.thawingUntil, calcThawingUntil); + assertEq(afterThawRequest.next, bytes32(0)); + assertEq(calcThawRequestId, afterThawRequestList.tail); + assertEq(beforeThawRequestList.nonce + 1, afterThawRequestList.nonce); + assertEq(beforeThawRequestList.count + 1, afterThawRequestList.count); + assertEq(afterDelegatedTokens + calcTokens, beforeDelegatedTokens); + // Ensure correct slot is being updated, pools are stored in different storage locations for legacy subgraph data service + assertEq(beforeStoragePoolShares, afterStoragePoolShares + shares); + } + + // todo remove these + function _getDelegation(address verifier) internal view returns (Delegation memory) { + return staking.getDelegation(users.indexer, verifier, users.delegator); } function _getDelegationPool(address verifier) internal view returns (DelegationPool memory) { @@ -157,32 +300,58 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { uint256 expectedProviderTokensAfterSlashing = beforeProviderTokens - providerTokensSlashed; uint256 delegationTokensSlashed = MathUtils.min(beforeDelegationTokens, tokens - providerTokensSlashed); - uint256 expectedDelegationTokensAfterSlashing = beforeDelegationTokens - (isDelegationSlashingEnabled ? delegationTokensSlashed : 0); + uint256 expectedDelegationTokensAfterSlashing = beforeDelegationTokens - + (isDelegationSlashingEnabled ? delegationTokensSlashed : 0); vm.expectEmit(address(staking)); if (verifierCutAmount > 0) { - emit IHorizonStakingMain.VerifierTokensSent(users.indexer, subgraphDataServiceAddress, subgraphDataServiceAddress, verifierCutAmount); + emit IHorizonStakingMain.VerifierTokensSent( + users.indexer, + subgraphDataServiceAddress, + subgraphDataServiceAddress, + verifierCutAmount + ); } emit IHorizonStakingMain.ProvisionSlashed(users.indexer, subgraphDataServiceAddress, providerTokensSlashed); if (isDelegationSlashingEnabled) { - emit IHorizonStakingMain.DelegationSlashed(users.indexer, subgraphDataServiceAddress, delegationTokensSlashed); + emit IHorizonStakingMain.DelegationSlashed( + users.indexer, + subgraphDataServiceAddress, + delegationTokensSlashed + ); } else { - emit IHorizonStakingMain.DelegationSlashingSkipped(users.indexer, subgraphDataServiceAddress, delegationTokensSlashed); + emit IHorizonStakingMain.DelegationSlashingSkipped( + users.indexer, + subgraphDataServiceAddress, + delegationTokensSlashed + ); } staking.slash(users.indexer, tokens, verifierCutAmount, subgraphDataServiceAddress); if (!isDelegationSlashingEnabled) { expectedDelegationTokensAfterSlashing = beforeDelegationTokens; } - + uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(provisionTokens, expectedProviderTokensAfterSlashing); uint256 delegationTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(delegationTokens, expectedDelegationTokensAfterSlashing); - + uint256 verifierTokens = token.balanceOf(subgraphDataServiceAddress); assertEq(verifierTokens, verifierCutAmount); } + + function _getSlotPoolTokens(address serviceProvider, address verifier, bool legacy) private returns (bytes32) { + bytes32 slotPoolTokens; + if (legacy) { + slotPoolTokens = bytes32(uint256(keccak256(abi.encode(serviceProvider, 20))) + 2); + } else { + slotPoolTokens = bytes32( + uint256(keccak256(abi.encode(verifier, keccak256(abi.encode(serviceProvider, 33))))) + 2 + ); + } + return slotPoolTokens; + } } diff --git a/packages/horizon/test/staking/delegation/addToPool.t.sol b/packages/horizon/test/staking/delegation/addToPool.t.sol index bdafa4046..4ef0c480a 100644 --- a/packages/horizon/test/staking/delegation/addToPool.t.sol +++ b/packages/horizon/test/staking/delegation/addToPool.t.sol @@ -62,4 +62,6 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { vm.expectRevert(expectedError); staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, 0); } + + // TODO: test recovering an invalid delegation pool } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 11a823a32..7136cf721 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -8,7 +8,6 @@ import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHor import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingDelegateTest is HorizonStakingTest { - /* * TESTS */ @@ -16,15 +15,29 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { function testDelegate_Tokens( uint256 amount, uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) { - delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); - resetPrank(users.delegator); - _delegate(delegationAmount, subgraphDataServiceAddress); + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { } - function testDelegate_RevertWhen_ZeroTokens( - uint256 amount - ) public useIndexer useProvision(amount, 0, 0) { + function testDelegate_Tokens_WhenThawing( + uint256 amount, + uint256 delegationAmount, + uint256 undelegateAmount + ) public useIndexer useProvision(amount, 0, 1 days) { + amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); + // there is a min delegation amount of 1 ether after undelegating so we start with 1 ether + 1 wei + delegationAmount = bound(delegationAmount, 1 ether + 1 wei, MAX_STAKING_TOKENS); + + vm.startPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); + + Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + undelegateAmount = bound(undelegateAmount, 1 wei, delegation.shares - 1 ether); + _undelegate(users.indexer, subgraphDataServiceAddress, undelegateAmount); + + _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); + } + + function testDelegate_RevertWhen_ZeroTokens(uint256 amount) public useIndexer useProvision(amount, 0, 0) { vm.startPrank(users.delegator); bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); vm.expectRevert(expectedError); @@ -47,18 +60,13 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { staking.delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); } - function testDelegate_LegacySubgraphService( - uint256 amount, - uint256 delegationAmount - ) public useIndexer { + function testDelegate_LegacySubgraphService(uint256 amount, uint256 delegationAmount) public useIndexer { amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); - _delegate(delegationAmount, subgraphDataServiceLegacyAddress); - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceLegacyAddress); - assertEq(delegatedTokens, delegationAmount); + _delegateLegacy(users.indexer, delegationAmount); } function testDelegate_RevertWhen_InvalidPool( @@ -67,7 +75,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing(true) { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); - _delegate(delegationTokens, subgraphDataServiceAddress); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); resetPrank(subgraphDataServiceAddress); _slash(tokens + delegationTokens, 0); @@ -88,9 +96,9 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing(true) { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); - _delegate(delegationTokens, subgraphDataServiceAddress); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); - _undelegate(delegation.shares, subgraphDataServiceAddress); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); resetPrank(subgraphDataServiceAddress); _slash(tokens + delegationTokens, 0); @@ -104,4 +112,4 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { )); staking.delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); } -} \ No newline at end of file +} diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 5025ccc39..4ffde07ff 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -8,7 +8,6 @@ import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHor import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingUndelegateTest is HorizonStakingTest { - /* * TESTS */ @@ -19,20 +18,54 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); - _undelegate(delegation.shares, subgraphDataServiceAddress); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); } - function testUndelegate_RevertWhen_ZeroTokens( + function testMultipleUndelegate_Tokens( + uint256 amount, + uint256 delegationAmount, + uint256 undelegateSteps + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + undelegateSteps = bound(undelegateSteps, 1, 10); + + resetPrank(users.delegator); + Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + + // there is a min delegation amount of 1 ether after undelegating + uint256 undelegateAmount = (delegation.shares - 1 ether) / undelegateSteps; + for (uint i = 0; i < undelegateSteps; i++) { + _undelegate(users.indexer, subgraphDataServiceAddress, undelegateAmount); + } + } + + function testUndelegate_RevertWhen_TooManyUndelegations() + public + useIndexer + useProvision(1000 ether, 0, 0) + useDelegation(1000 ether) + { + resetPrank(users.delegator); + + for (uint i = 0; i < MAX_THAW_REQUESTS; i++) { + _undelegate(users.indexer, subgraphDataServiceAddress, 1 ether); + } + + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingTooManyThawRequests()"); + vm.expectRevert(expectedError); + staking.undelegate(users.indexer, subgraphDataServiceAddress, 1 ether); + } + + function testUndelegate_RevertWhen_ZeroShares( uint256 amount, uint256 delegationAmount ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroShares()"); vm.expectRevert(expectedError); - _undelegate(0, subgraphDataServiceAddress); + staking.undelegate(users.indexer, subgraphDataServiceAddress, 0); } - function testUndelegate_RevertWhen_OverUndelegation( + function testUndelegate_RevertWhen_OverShares( uint256 amount, uint256 delegationAmount, uint256 overDelegationShares @@ -53,12 +86,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { function testUndelegate_RevertWhen_UndelegateLeavesInsufficientTokens( uint256 delegationAmount, uint256 withdrawShares - ) - public - useIndexer - useProvision(10_000_000 ether, 0, 0) - useDelegation(delegationAmount) - { + ) public useIndexer useProvision(10_000_000 ether, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); uint256 minShares = delegationAmount - MIN_DELEGATION + 1; withdrawShares = bound(withdrawShares, minShares, delegationAmount - 1); @@ -71,18 +99,16 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { staking.undelegate(users.indexer, subgraphDataServiceAddress, withdrawShares); } - function testUndelegate_LegacySubgraphService( - uint256 amount, - uint256 delegationAmount - ) public useIndexer { + function testUndelegate_LegacySubgraphService(uint256 amount, uint256 delegationAmount) public useIndexer { amount = bound(amount, 1, MAX_STAKING_TOKENS); delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); - _delegate(delegationAmount, subgraphDataServiceLegacyAddress); + _delegateLegacy(users.indexer, delegationAmount); + Delegation memory delegation = _getDelegation(subgraphDataServiceLegacyAddress); - _undelegate(delegation.shares, subgraphDataServiceLegacyAddress); + _undelegateLegacy(users.indexer, delegation.shares); } function testUndelegate_RevertWhen_InvalidPool( @@ -91,7 +117,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing(true) { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); - _delegate(delegationTokens, subgraphDataServiceAddress); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); resetPrank(subgraphDataServiceAddress); _slash(tokens + delegationTokens, 0); @@ -105,4 +131,4 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { )); staking.undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); } -} \ No newline at end of file +} diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 6ec26c937..cffcad565 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -28,7 +28,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { vm.assume(remainingTokens >= MIN_DELEGATION); } - _undelegate(shares, subgraphDataServiceAddress); + _undelegate(users.indexer, subgraphDataServiceAddress, shares); _; } @@ -165,9 +165,9 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { _createProvision(subgraphDataServiceLegacyAddress, 10_000_000 ether, 0, MAX_THAWING_PERIOD); resetPrank(users.delegator); - _delegate(delegationAmount, subgraphDataServiceLegacyAddress); + _delegateLegacy(users.indexer, delegationAmount); Delegation memory delegation = _getDelegation(subgraphDataServiceLegacyAddress); - _undelegate(delegation.shares, subgraphDataServiceLegacyAddress); + _undelegateLegacy(users.indexer, delegation.shares); LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceLegacyAddress, users.delegator); ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); @@ -183,9 +183,9 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { ) public useIndexer useProvision(tokens, 0, MAX_THAWING_PERIOD) useDelegationSlashing(true) { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); - _delegate(delegationTokens, subgraphDataServiceAddress); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); - _undelegate(delegation.shares, subgraphDataServiceAddress); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); skip(MAX_THAWING_PERIOD + 1); diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 7797186b4..8f7d086f5 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -49,7 +49,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { vm.assume(verifierCutAmount <= maxVerifierTokens); resetPrank(users.delegator); - _delegate(delegationTokens, subgraphDataServiceAddress); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); vm.startPrank(subgraphDataServiceAddress); _slash(slashTokens, verifierCutAmount); @@ -68,7 +68,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { vm.assume(verifierCutAmount <= maxVerifierTokens); resetPrank(users.delegator); - _delegate(delegationTokens, subgraphDataServiceAddress); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); vm.startPrank(subgraphDataServiceAddress); _slash(slashTokens, verifierCutAmount); diff --git a/packages/horizon/test/staking/transfer-tools/ttools.t.sol b/packages/horizon/test/staking/transfer-tools/ttools.t.sol new file mode 100644 index 000000000..9175f74e5 --- /dev/null +++ b/packages/horizon/test/staking/transfer-tools/ttools.t.sol @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; +import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; + +contract HorizonStakingTransferToolsTest is HorizonStakingTest { + /* + * TESTS + */ + + function testOnTransfer_RevertWhen_InvalidCaller( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + + bytes memory data = abi.encode(uint8(0), new bytes(0)); // Valid codes are 0 and 1 + vm.expectRevert(bytes("ONLY_GATEWAY")); + staking.onTokenTransfer(counterpartStaking, 0, data); + } + + function testOnTransfer_RevertWhen_InvalidCounterpart( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + resetPrank(graphTokenGatewayAddress); + + bytes memory data = abi.encode(uint8(0), new bytes(0)); // Valid codes are 0 and 1 + vm.expectRevert(bytes("ONLY_L1_STAKING_THROUGH_BRIDGE")); + staking.onTokenTransfer(address(staking), 0, data); + } + + function testOnTransfer_RevertWhen_InvalidData( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + resetPrank(graphTokenGatewayAddress); + + vm.expectRevert(); + staking.onTokenTransfer(counterpartStaking, 0, new bytes(0)); + } + + function testOnTransfer_RevertWhen_InvalidCode( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + resetPrank(graphTokenGatewayAddress); + + bytes memory data = abi.encode(uint8(2), new bytes(0)); // Valid codes are 0 and 1 + vm.expectRevert(bytes("INVALID_CODE")); + staking.onTokenTransfer(counterpartStaking, 0, data); + } + + function testOnTransfer_ReceiveDelegation_RevertWhen_InvalidData( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + resetPrank(graphTokenGatewayAddress); + + bytes memory data = abi.encode(uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), new bytes(0)); + vm.expectRevert(); + staking.onTokenTransfer(counterpartStaking, 0, data); + } + + function testOnTransfer_ReceiveDelegation( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + resetPrank(graphTokenGatewayAddress); + + bytes memory data = abi.encode(uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), abi.encode(users.indexer, users.delegator)); + staking.onTokenTransfer(counterpartStaking, 0, data); + } +} From afe8bbcef3676df2a107594eca1d93c4a04ed9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 20 Aug 2024 18:39:17 -0300 Subject: [PATCH 166/343] fix: calculation of shares when receiving delegation from l1 (OZ H-03) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../staking/HorizonStakingExtension.sol | 4 +- .../test/staking/delegation/undelegate.t.sol | 4 +- .../test/staking/transfer-tools/ttools.t.sol | 198 ++++++++++++++---- 3 files changed, 159 insertions(+), 47 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 41dda175f..8f7ab8449 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -337,6 +337,8 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon * The specified amount is added to the delegator's delegation; the delegator's * address and the indexer's address are specified in the _delegationData struct. * Note that no delegation tax is applied here. + * @dev Note that L1 staking contract only allows delegation transfer if the indexer has already transferred, + * this means the corresponding delegation pool exists. * @param _tokens Amount of tokens that were transferred * @param _delegationData struct containing the delegator's address and the indexer's address */ @@ -356,7 +358,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon } // Calculate shares to issue (without applying any delegation tax) - uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / pool.tokens); + uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); if (shares == 0 || _tokens < MINIMUM_DELEGATION) { // If no shares would be issued (probably a rounding issue or attack), diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 4ffde07ff..8c578b768 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -25,10 +25,12 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 amount, uint256 delegationAmount, uint256 undelegateSteps - ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + ) public useIndexer useProvision(amount, 0, 0) { undelegateSteps = bound(undelegateSteps, 1, 10); + delegationAmount = bound(delegationAmount, MIN_DELEGATION + 10 wei, MAX_STAKING_TOKENS); resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); // there is a min delegation amount of 1 ether after undelegating diff --git a/packages/horizon/test/staking/transfer-tools/ttools.t.sol b/packages/horizon/test/staking/transfer-tools/ttools.t.sol index 9175f74e5..fcc3c7d69 100644 --- a/packages/horizon/test/staking/transfer-tools/ttools.t.sol +++ b/packages/horizon/test/staking/transfer-tools/ttools.t.sol @@ -5,72 +5,180 @@ import "forge-std/Test.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; +import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; +import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; contract HorizonStakingTransferToolsTest is HorizonStakingTest { + event Transfer(address indexed from, address indexed to, uint tokens); + /* * TESTS */ - function testOnTransfer_RevertWhen_InvalidCaller( - uint256 amount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + function testOnTransfer_RevertWhen_InvalidCaller() public { + bytes memory data = abi.encode(uint8(0), new bytes(0)); // Valid codes are 0 and 1 + vm.expectRevert(bytes("ONLY_GATEWAY")); + staking.onTokenTransfer(counterpartStaking, 0, data); + } + + function testOnTransfer_RevertWhen_InvalidCounterpart() public { + resetPrank(graphTokenGatewayAddress); - bytes memory data = abi.encode(uint8(0), new bytes(0)); // Valid codes are 0 and 1 - vm.expectRevert(bytes("ONLY_GATEWAY")); - staking.onTokenTransfer(counterpartStaking, 0, data); + bytes memory data = abi.encode(uint8(0), new bytes(0)); // Valid codes are 0 and 1 + vm.expectRevert(bytes("ONLY_L1_STAKING_THROUGH_BRIDGE")); + staking.onTokenTransfer(address(staking), 0, data); } - function testOnTransfer_RevertWhen_InvalidCounterpart( - uint256 amount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { - resetPrank(graphTokenGatewayAddress); + function testOnTransfer_RevertWhen_InvalidData() public { + resetPrank(graphTokenGatewayAddress); - bytes memory data = abi.encode(uint8(0), new bytes(0)); // Valid codes are 0 and 1 - vm.expectRevert(bytes("ONLY_L1_STAKING_THROUGH_BRIDGE")); - staking.onTokenTransfer(address(staking), 0, data); + vm.expectRevert(); + staking.onTokenTransfer(counterpartStaking, 0, new bytes(0)); } - function testOnTransfer_RevertWhen_InvalidData( - uint256 amount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { - resetPrank(graphTokenGatewayAddress); + function testOnTransfer_RevertWhen_InvalidCode() public { + resetPrank(graphTokenGatewayAddress); - vm.expectRevert(); - staking.onTokenTransfer(counterpartStaking, 0, new bytes(0)); + bytes memory data = abi.encode(uint8(2), new bytes(0)); // Valid codes are 0 and 1 + vm.expectRevert(bytes("INVALID_CODE")); + staking.onTokenTransfer(counterpartStaking, 0, data); } - function testOnTransfer_RevertWhen_InvalidCode( - uint256 amount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { - resetPrank(graphTokenGatewayAddress); + function testOnTransfer_ReceiveDelegation_RevertWhen_InvalidData() public { + resetPrank(graphTokenGatewayAddress); - bytes memory data = abi.encode(uint8(2), new bytes(0)); // Valid codes are 0 and 1 - vm.expectRevert(bytes("INVALID_CODE")); - staking.onTokenTransfer(counterpartStaking, 0, data); + bytes memory data = abi.encode(uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), new bytes(0)); + vm.expectRevert(); + staking.onTokenTransfer(counterpartStaking, 0, data); } - function testOnTransfer_ReceiveDelegation_RevertWhen_InvalidData( - uint256 amount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { - resetPrank(graphTokenGatewayAddress); + function testOnTransfer_ReceiveDelegation(uint256 amount) public { + amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); + + // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 + resetPrank(users.indexer); + _createProvision(subgraphDataServiceLegacyAddress, 100 ether, 0, 0); + + resetPrank(users.delegator); + _delegateLegacy(users.indexer, 1 ether); - bytes memory data = abi.encode(uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), new bytes(0)); - vm.expectRevert(); - staking.onTokenTransfer(counterpartStaking, 0, data); + // send amount to staking contract - this should be done by the bridge + resetPrank(users.delegator); + token.transfer(address(staking), amount); + + resetPrank(graphTokenGatewayAddress); + bytes memory data = abi.encode( + uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), + abi.encode(users.indexer, users.delegator) + ); + _onTokenTransfer_ReceiveDelegation(counterpartStaking, amount, data); } - function testOnTransfer_ReceiveDelegation( - uint256 amount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { - resetPrank(graphTokenGatewayAddress); + function testOnTransfer_ReceiveDelegation_WhenThawing(uint256 amount) public { + amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); + uint256 originalDelegationAmount = 10 ether; + + // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 + resetPrank(users.indexer); + _createProvision(subgraphDataServiceLegacyAddress, 100 ether, 0, 1 days); + + resetPrank(users.delegator); + _delegateLegacy(users.indexer, originalDelegationAmount); + + // send amount to staking contract - this should be done by the bridge + resetPrank(users.delegator); + token.transfer(address(staking), amount); + + // thaw some delegation before receiving new delegation from L1 + resetPrank(users.delegator); + _undelegateLegacy(users.indexer, originalDelegationAmount / 10); + + resetPrank(graphTokenGatewayAddress); + bytes memory data = abi.encode( + uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), + abi.encode(users.indexer, users.delegator) + ); + _onTokenTransfer_ReceiveDelegation(counterpartStaking, amount, data); + } + + /** + * HELPERS + */ + + function _onTokenTransfer_ReceiveDelegation(address from, uint256 tokens, bytes memory data) internal { + (, bytes memory fnData) = abi.decode(data, (uint8, bytes)); + (address serviceProvider, address delegator) = abi.decode(fnData, (address, address)); + bytes32 slotPoolTokens = bytes32(uint256(keccak256(abi.encode(serviceProvider, 20))) + 2); + + // before + DelegationPool memory beforePool = staking.getDelegationPool(serviceProvider, subgraphDataServiceLegacyAddress); + Delegation memory beforeDelegation = staking.getDelegation( + serviceProvider, + subgraphDataServiceLegacyAddress, + delegator + ); + uint256 beforeStoragePoolTokens = uint256(vm.load(address(staking), slotPoolTokens)); + uint256 beforeDelegatedTokens = staking.getDelegatedTokensAvailable( + serviceProvider, + subgraphDataServiceLegacyAddress + ); + uint256 beforeDelegatorBalance = token.balanceOf(delegator); + uint256 beforeStakingBalance = token.balanceOf(address(staking)); + uint256 calcShares = (beforePool.tokens == 0) + ? tokens + : ((tokens * beforePool.shares) / (beforePool.tokens - beforePool.tokensThawing)); + + // onTokenTransfer + if (calcShares == 0 || tokens < 1 ether) { + vm.expectEmit(); + emit Transfer(address(staking), delegator, tokens); + vm.expectEmit(); + emit IL2StakingBase.TransferredDelegationReturnedToDelegator(serviceProvider, delegator, tokens); + } else { + vm.expectEmit(); + emit IHorizonStakingExtension.StakeDelegated(serviceProvider, delegator, tokens, calcShares); + } + staking.onTokenTransfer(counterpartStaking, tokens, data); + + // after + DelegationPool memory afterPool = staking.getDelegationPool(serviceProvider, subgraphDataServiceLegacyAddress); + Delegation memory afterDelegation = staking.getDelegation( + serviceProvider, + subgraphDataServiceLegacyAddress, + delegator + ); + uint256 afterStoragePoolTokens = uint256(vm.load(address(staking), slotPoolTokens)); + uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable( + serviceProvider, + subgraphDataServiceLegacyAddress + ); + uint256 afterDelegatorBalance = token.balanceOf(delegator); + uint256 afterStakingBalance = token.balanceOf(address(staking)); + + uint256 deltaShares = afterDelegation.shares - beforeDelegation.shares; - bytes memory data = abi.encode(uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), abi.encode(users.indexer, users.delegator)); - staking.onTokenTransfer(counterpartStaking, 0, data); + // assertions + if (calcShares == 0 || tokens < 1 ether) { + assertEq(beforePool.tokens, afterPool.tokens); + assertEq(beforePool.shares, afterPool.shares); + assertEq(beforePool.tokensThawing, afterPool.tokensThawing); + assertEq(beforePool.sharesThawing, afterPool.sharesThawing); + assertEq(0, deltaShares); + assertEq(beforeDelegatedTokens, afterDelegatedTokens); + assertEq(beforeStoragePoolTokens, afterStoragePoolTokens); + assertEq(beforeDelegatorBalance + tokens, afterDelegatorBalance); + assertEq(beforeStakingBalance - tokens, afterStakingBalance); + } else { + assertEq(beforePool.tokens + tokens, afterPool.tokens); + assertEq(beforePool.shares + calcShares, afterPool.shares); + assertEq(beforePool.tokensThawing, afterPool.tokensThawing); + assertEq(beforePool.sharesThawing, afterPool.sharesThawing); + assertEq(calcShares, deltaShares); + assertEq(beforeDelegatedTokens + tokens, afterDelegatedTokens); + // Ensure correct slot is being updated, pools are stored in different storage locations for legacy subgraph data service + assertEq(beforeStoragePoolTokens + tokens, afterStoragePoolTokens); + assertEq(beforeDelegatorBalance, afterDelegatorBalance); + assertEq(beforeStakingBalance, afterStakingBalance); + } } } From 7d1b2fba5cf78a575dfec603ce5d145343ce8729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 22 Aug 2024 14:22:56 -0300 Subject: [PATCH 167/343] test: add test for receivedelegation special case MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../horizon/test/staking/HorizonStaking.t.sol | 30 ++++++++-------- .../test/staking/delegation/delegate.t.sol | 4 +-- .../test/staking/delegation/undelegate.t.sol | 2 +- .../test/staking/delegation/withdraw.t.sol | 2 +- .../horizon/test/staking/slash/slash.t.sol | 8 ++--- .../test/staking/transfer-tools/ttools.t.sol | 36 +++++++++++++++++-- 6 files changed, 57 insertions(+), 25 deletions(-) diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index 64dbc1630..bf0106fca 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -290,9 +290,9 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 4), bytes32(_tokensProvisioned)); } - function _slash(uint256 tokens, uint256 verifierCutAmount) internal { - uint256 beforeProviderTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); - uint256 beforeDelegationTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + function _slash(address serviceProvider, address verifier, uint256 tokens, uint256 verifierCutAmount) internal { + uint256 beforeProviderTokens = staking.getProviderTokensAvailable(serviceProvider, verifier); + uint256 beforeDelegationTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); bool isDelegationSlashingEnabled = staking.isDelegationSlashingEnabled(); // Calculate expected tokens after slashing @@ -306,40 +306,40 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { vm.expectEmit(address(staking)); if (verifierCutAmount > 0) { emit IHorizonStakingMain.VerifierTokensSent( - users.indexer, - subgraphDataServiceAddress, - subgraphDataServiceAddress, + serviceProvider, + verifier, + verifier, verifierCutAmount ); } - emit IHorizonStakingMain.ProvisionSlashed(users.indexer, subgraphDataServiceAddress, providerTokensSlashed); + emit IHorizonStakingMain.ProvisionSlashed(serviceProvider, verifier, providerTokensSlashed); if (isDelegationSlashingEnabled) { emit IHorizonStakingMain.DelegationSlashed( - users.indexer, - subgraphDataServiceAddress, + serviceProvider, + verifier, delegationTokensSlashed ); } else { emit IHorizonStakingMain.DelegationSlashingSkipped( - users.indexer, - subgraphDataServiceAddress, + serviceProvider, + verifier, delegationTokensSlashed ); } - staking.slash(users.indexer, tokens, verifierCutAmount, subgraphDataServiceAddress); + staking.slash(serviceProvider, tokens, verifierCutAmount, verifier); if (!isDelegationSlashingEnabled) { expectedDelegationTokensAfterSlashing = beforeDelegationTokens; } - uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); + uint256 provisionTokens = staking.getProviderTokensAvailable(serviceProvider, verifier); assertEq(provisionTokens, expectedProviderTokensAfterSlashing); - uint256 delegationTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); + uint256 delegationTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); assertEq(delegationTokens, expectedDelegationTokensAfterSlashing); - uint256 verifierTokens = token.balanceOf(subgraphDataServiceAddress); + uint256 verifierTokens = token.balanceOf(verifier); assertEq(verifierTokens, verifierCutAmount); } diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 7136cf721..939893794 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -78,7 +78,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); resetPrank(subgraphDataServiceAddress); - _slash(tokens + delegationTokens, 0); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); resetPrank(users.delegator); token.approve(address(staking), delegationTokens); @@ -101,7 +101,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); resetPrank(subgraphDataServiceAddress); - _slash(tokens + delegationTokens, 0); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); resetPrank(users.delegator); token.approve(address(staking), delegationTokens); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 8c578b768..54e16d084 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -122,7 +122,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); resetPrank(subgraphDataServiceAddress); - _slash(tokens + delegationTokens, 0); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); resetPrank(users.delegator); Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index cffcad565..dc7785ed4 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -190,7 +190,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { skip(MAX_THAWING_PERIOD + 1); resetPrank(subgraphDataServiceAddress); - _slash(tokens + delegationTokens, 0); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); resetPrank(users.delegator); vm.expectRevert(abi.encodeWithSelector( diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 8f7d086f5..1644e336e 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -33,7 +33,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { vm.assume(verifierCutAmount <= maxVerifierTokens); vm.startPrank(subgraphDataServiceAddress); - _slash(slashTokens, verifierCutAmount); + _slash(users.indexer, subgraphDataServiceAddress, slashTokens, verifierCutAmount); } function testSlash_DelegationDisabled_SlashingOverProviderTokens( @@ -52,7 +52,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); vm.startPrank(subgraphDataServiceAddress); - _slash(slashTokens, verifierCutAmount); + _slash(users.indexer, subgraphDataServiceAddress, slashTokens, verifierCutAmount); } function testSlash_DelegationEnabled_SlashingOverProviderTokens( @@ -71,7 +71,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); vm.startPrank(subgraphDataServiceAddress); - _slash(slashTokens, verifierCutAmount); + _slash(users.indexer, subgraphDataServiceAddress, slashTokens, verifierCutAmount); } function testSlash_OverProvisionSize( @@ -83,7 +83,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { vm.assume(slashTokens > tokens + delegationTokens); vm.startPrank(subgraphDataServiceAddress); - _slash(slashTokens, 0); + _slash(users.indexer, subgraphDataServiceAddress, slashTokens, 0); } function testSlash_RevertWhen_NoProvision( diff --git a/packages/horizon/test/staking/transfer-tools/ttools.t.sol b/packages/horizon/test/staking/transfer-tools/ttools.t.sol index fcc3c7d69..71bf2bb3e 100644 --- a/packages/horizon/test/staking/transfer-tools/ttools.t.sol +++ b/packages/horizon/test/staking/transfer-tools/ttools.t.sol @@ -101,6 +101,35 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { _onTokenTransfer_ReceiveDelegation(counterpartStaking, amount, data); } + function testOnTransfer_ReceiveDelegation_WhenInvalidPool(uint256 amount) public useDelegationSlashing(true) { + amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); + uint256 originalDelegationAmount = 10 ether; + uint256 provisionSize = 100 ether; + + // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 + resetPrank(users.indexer); + _createProvision(subgraphDataServiceLegacyAddress, provisionSize, 0, 1 days); + + // initialize the delegation pool + resetPrank(users.delegator); + _delegateLegacy(users.indexer, originalDelegationAmount); + + // slash the entire provision + resetPrank(subgraphDataServiceLegacyAddress); + _slash(users.indexer, subgraphDataServiceLegacyAddress, provisionSize + originalDelegationAmount, 0); + + // send amount to staking contract - this should be done by the bridge + resetPrank(users.delegator); + token.transfer(address(staking), amount); + + resetPrank(graphTokenGatewayAddress); + bytes memory data = abi.encode( + uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), + abi.encode(users.indexer, users.delegator) + ); + _onTokenTransfer_ReceiveDelegation(counterpartStaking, amount, data); + } + /** * HELPERS */ @@ -128,8 +157,11 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { ? tokens : ((tokens * beforePool.shares) / (beforePool.tokens - beforePool.tokensThawing)); + bool earlyExit = (calcShares == 0 || tokens < 1 ether) || + (beforePool.tokens == 0 && (beforePool.shares != 0 || beforePool.sharesThawing != 0)); + // onTokenTransfer - if (calcShares == 0 || tokens < 1 ether) { + if (earlyExit) { vm.expectEmit(); emit Transfer(address(staking), delegator, tokens); vm.expectEmit(); @@ -158,7 +190,7 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { uint256 deltaShares = afterDelegation.shares - beforeDelegation.shares; // assertions - if (calcShares == 0 || tokens < 1 ether) { + if (earlyExit) { assertEq(beforePool.tokens, afterPool.tokens); assertEq(beforePool.shares, afterPool.shares); assertEq(beforePool.tokensThawing, afterPool.tokensThawing); From 4787e1290c6402640c96e26f1b491099d772cad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 21 Aug 2024 14:39:51 -0300 Subject: [PATCH 168/343] fix: remove subgraph service cut (OZ H-04) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../data-service/interfaces/IDataService.sol | 7 +- .../implementations/DataServiceBase.sol | 2 +- .../DataServiceBaseUpgradeable.sol | 2 +- .../implementations/DataServiceImpFees.sol | 2 +- .../DataServiceImpPausable.sol | 2 +- .../DataServiceImpPausableUpgradeable.sol | 2 +- .../contracts/SubgraphService.sol | 55 ++----- .../contracts/SubgraphServiceStorage.sol | 5 +- .../contracts/interfaces/ISubgraphService.sol | 42 ++--- .../test/SubgraphBaseTest.t.sol | 2 +- .../subgraphService/collect/collect.t.sol | 145 +++++++++++------- .../subgraph-service/test/utils/Constants.sol | 3 +- 12 files changed, 132 insertions(+), 137 deletions(-) diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index 1627c8651..258fc336c 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -125,8 +125,13 @@ interface IDataService { * @param serviceProvider The address of the service provider. * @param feeType The type of fee to collect as defined in {GraphPayments}. * @param data Custom data, usage defined by the data service. + * @return The amount of tokens collected. */ - function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external; + function collect( + address serviceProvider, + IGraphPayments.PaymentTypes feeType, + bytes calldata data + ) external returns (uint256); /** * @notice Slash a service provider for misbehaviour. diff --git a/packages/horizon/test/data-service/implementations/DataServiceBase.sol b/packages/horizon/test/data-service/implementations/DataServiceBase.sol index 1742efc12..b8171e649 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceBase.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceBase.sol @@ -25,7 +25,7 @@ contract DataServiceBase is DataService { function stopService(address serviceProvider, bytes calldata data) external {} - function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external returns (uint256) {} function slash(address serviceProvider, bytes calldata data) external {} diff --git a/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol index af0f22aaf..fbe2fe211 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol @@ -21,7 +21,7 @@ contract DataServiceBaseUpgradeable is DataService { function stopService(address serviceProvider, bytes calldata data) external {} - function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external returns (uint256) {} function slash(address serviceProvider, bytes calldata data) external {} diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol b/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol index 72574cedb..ee071c47d 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol @@ -21,7 +21,7 @@ contract DataServiceImpFees is DataServiceFees { function stopService(address serviceProvider, bytes calldata data) external {} - function collect(address serviceProvider, IGraphPayments.PaymentTypes, bytes calldata data) external { + function collect(address serviceProvider, IGraphPayments.PaymentTypes, bytes calldata data) external returns (uint256) { uint256 amount = abi.decode(data, (uint256)); _releaseStake(serviceProvider, 0); _lockStake(serviceProvider, amount * STAKE_TO_FEES_RATIO, block.timestamp + LOCK_DURATION); diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol index ad5308e33..5d49f8873 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol @@ -29,7 +29,7 @@ contract DataServiceImpPausable is DataServicePausable { function stopService(address serviceProvider, bytes calldata data) external {} - function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external returns (uint256) {} function slash(address serviceProvider, bytes calldata data) external {} diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol b/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol index 14b23bc9c..5b55d0866 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol @@ -23,7 +23,7 @@ contract DataServiceImpPausableUpgradeable is DataServicePausableUpgradeable { function stopService(address serviceProvider, bytes calldata data) external {} - function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external {} + function collect(address serviceProvider, IGraphPayments.PaymentTypes feeType, bytes calldata data) external returns (uint256) {} function slash(address serviceProvider, bytes calldata data) external {} diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 27fdefd2f..ab0e02dc5 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -261,6 +261,7 @@ contract SubgraphService is onlyValidProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused + returns (uint256) { uint256 paymentCollected = 0; @@ -273,6 +274,7 @@ contract SubgraphService is } emit ServicePaymentCollected(indexer, paymentType, paymentCollected); + return paymentCollected; } /** @@ -367,15 +369,12 @@ contract SubgraphService is } /** - * @notice See {ISubgraphService.setPaymentCuts} + * @notice See {ISubgraphService.setCurationCut} */ - function setPaymentCuts( - IGraphPayments.PaymentTypes paymentType, - uint128 serviceCut, - uint128 curationCut - ) external override onlyOwner { - paymentCuts[paymentType] = PaymentCuts(serviceCut, curationCut); - emit PaymentCutsSet(paymentType, serviceCut, curationCut); + function setCurationCut(uint256 curationCut) external override onlyOwner { + require(PPMMath.isValidPPM(curationCut), SubgraphServiceInvalidCurationCut(curationCut)); + curationFeesCut = curationCut; + emit CurationCutSet(curationCut); } /** @@ -512,34 +511,28 @@ contract SubgraphService is // release expired stake claims _releaseStake(_indexer, 0); - // Collect from GraphPayments - PaymentCuts memory queryFeePaymentCuts = _getQueryFeePaymentCuts(subgraphDeploymentId); - uint256 totalCut = queryFeePaymentCuts.serviceCut + queryFeePaymentCuts.curationCut; - + // Collect from GraphPayments - only curators cut is sent back to the subgraph service uint256 balanceBefore = _graphToken().balanceOf(address(this)); + + uint256 curationCut = _curation().isCurated(subgraphDeploymentId) ? curationFeesCut : 0; uint256 tokensCollected = _tapCollector().collect( IGraphPayments.PaymentTypes.QueryFee, - abi.encode(signedRav, totalCut) + abi.encode(signedRav, curationCut) ); - uint256 tokensDataService = tokensCollected.mulPPM(totalCut); + uint256 tokensCurators = tokensCollected.mulPPM(curationCut); + uint256 balanceAfter = _graphToken().balanceOf(address(this)); require( - balanceBefore + tokensDataService == balanceAfter, - SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter, tokensDataService) + balanceBefore + tokensCurators == balanceAfter, + SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter, tokensCurators) ); - uint256 tokensCurators = 0; - uint256 tokensSubgraphService = 0; if (tokensCollected > 0) { // lock stake as economic security for fees uint256 tokensToLock = tokensCollected * stakeToFeesRatio; uint256 unlockTimestamp = block.timestamp + _disputeManager().getDisputePeriod(); _lockStake(_indexer, tokensToLock, unlockTimestamp); - // calculate service and curator cuts - tokensCurators = tokensCollected.mulPPMRoundUp(queryFeePaymentCuts.curationCut); - tokensSubgraphService = tokensDataService - tokensCurators; - if (tokensCurators > 0) { // curation collection changes subgraph signal so we take rewards snapshot _graphRewardsManager().onSubgraphSignalUpdate(subgraphDeploymentId); @@ -550,23 +543,7 @@ contract SubgraphService is } } - emit QueryFeesCollected(_indexer, tokensCollected, tokensCurators, tokensSubgraphService); + emit QueryFeesCollected(_indexer, tokensCollected, tokensCurators); return tokensCollected; } - - /** - * @notice Gets the payment cuts for query fees - * Checks if the subgraph is curated and adjusts the curation cut accordingly - * @param _subgraphDeploymentId The subgraph deployment id - */ - function _getQueryFeePaymentCuts(bytes32 _subgraphDeploymentId) private view returns (PaymentCuts memory) { - PaymentCuts memory queryFeePaymentCuts = paymentCuts[IGraphPayments.PaymentTypes.QueryFee]; - - // Only pay curation fees if the subgraph is curated - if (!_curation().isCurated(_subgraphDeploymentId)) { - queryFeePaymentCuts.curationCut = 0; - } - - return queryFeePaymentCuts; - } } diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol index 50e72b417..54de429f1 100644 --- a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; -import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; abstract contract SubgraphServiceV1Storage { @@ -11,6 +10,6 @@ abstract contract SubgraphServiceV1Storage { ///@notice Multiplier for how many tokens back collected query fees uint256 public stakeToFeesRatio; - /// @notice The fees cut taken by the subgraph service - mapping(IGraphPayments.PaymentTypes paymentType => ISubgraphService.PaymentCuts paymentCuts) public paymentCuts; + /// @notice The cut curators take from query fee payments + uint256 public curationFeesCut; } diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 4cceee6b0..f03bd0b49 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -26,27 +26,13 @@ interface ISubgraphService is IDataServiceFees { string geoHash; } - /// @notice Payment cut definitions for each payment type - struct PaymentCuts { - // The cut the service provider takes from the payment - uint128 serviceCut; - // The cut curators take from the payment - uint128 curationCut; - } - /** * @notice Emitted when a subgraph service collects query fees from Graph Payments * @param serviceProvider The address of the service provider * @param tokensCollected The amount of tokens collected * @param tokensCurators The amount of tokens curators receive - * @param tokensSubgraphService The amount of tokens the subgraph service receives */ - event QueryFeesCollected( - address indexed serviceProvider, - uint256 tokensCollected, - uint256 tokensCurators, - uint256 tokensSubgraphService - ); + event QueryFeesCollected(address indexed serviceProvider, uint256 tokensCollected, uint256 tokensCurators); /** * @notice Emitted when the stake to fees ratio is set. @@ -55,12 +41,16 @@ interface ISubgraphService is IDataServiceFees { event StakeToFeesRatioSet(uint256 ratio); /** - * @notice Emmited when payment cuts are set for a payment type - * @param paymentType The payment type - * @param serviceCut The service cut for the payment type - * @param curationCut The curation cut for the payment type + * @notice Emmited when curator cuts are set + * @param curationCut The curation cut */ - event PaymentCutsSet(IGraphPayments.PaymentTypes paymentType, uint128 serviceCut, uint128 curationCut); + event CurationCutSet(uint256 curationCut); + + /** + * Thrown when trying to set a curation cut that is not a valid PPM value + * @param curationCut The curation cut value + */ + error SubgraphServiceInvalidCurationCut(uint256 curationCut); /** * @notice Thrown when an indexer tries to register with an empty URL @@ -89,9 +79,9 @@ interface ISubgraphService is IDataServiceFees { * from Graph Payments * @param balanceBefore The contract GRT balance before the collection * @param balanceAfter The contract GRT balance after the collection - * @param tokensCollected The amount of tokens collected + * @param tokensDataService The amount of tokens sent to the subgraph service */ - error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensCollected); + error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensDataService); /** * @notice @notice Thrown when the service provider in the RAV does not match the expected indexer. @@ -175,13 +165,11 @@ interface ISubgraphService is IDataServiceFees { function setMaxPOIStaleness(uint256 maxPOIStaleness) external; /** - * @notice Sets the payment cuts for a payment type - * @dev Emits a {PaymentCutsSet} event - * @param paymentType The payment type - * @param serviceCut The service cut for the payment type + * @notice Sets the curators payment cut for query fees + * @dev Emits a {CuratorCutSet} event * @param curationCut The curation cut for the payment type */ - function setPaymentCuts(IGraphPayments.PaymentTypes paymentType, uint128 serviceCut, uint128 curationCut) external; + function setCurationCut(uint256 curationCut) external; /** * @notice Sets the rewards destination for an indexer to receive indexing rewards diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index 5e1322de3..1ebcf6683 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -188,7 +188,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { resetPrank(users.deployer); subgraphService.setStakeToFeesRatio(stakeToFeesRatio); subgraphService.setMaxPOIStaleness(maxPOIStaleness); - subgraphService.setPaymentCuts(IGraphPayments.PaymentTypes.QueryFee, serviceCut, curationCut); + subgraphService.setCurationCut(curationCut); } function unpauseProtocol() private { diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index b9f2fbcd1..e8292de45 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -24,10 +24,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { * HELPERS */ - function _getQueryFeeEncodedData( - address indexer, - uint128 tokens - ) private view returns (bytes memory) { + function _getQueryFeeEncodedData(address indexer, uint128 tokens) private view returns (bytes memory) { ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(indexer, tokens); bytes32 messageHash = tapCollector.encodeRAV(rav); (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, messageHash); @@ -36,19 +33,23 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { return abi.encode(signedRAV); } - function _getRAV(address indexer, uint128 tokens) private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { - return ITAPCollector.ReceiptAggregateVoucher({ - dataService: address(subgraphService), - serviceProvider: indexer, - timestampNs: 0, - valueAggregate: tokens, - metadata: abi.encode(allocationID) - }); + function _getRAV( + address indexer, + uint128 tokens + ) private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { + return + ITAPCollector.ReceiptAggregateVoucher({ + dataService: address(subgraphService), + serviceProvider: indexer, + timestampNs: 0, + valueAggregate: tokens, + metadata: abi.encode(allocationID) + }); } - function _approveCollector(uint128 tokens) private { + function _approveCollector(uint256 tokens) private { address msgSender; - (, msgSender,) = vm.readCallers(); + (, msgSender, ) = vm.readCallers(); resetPrank(signer); mint(signer, tokens); escrow.approveCollector(address(tapCollector), tokens); @@ -72,56 +73,84 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { */ function testCollect_QueryFees( - uint256 tokens, + uint256 tokensAllocated, uint256 tokensPayment - ) public useIndexer useAllocation(tokens) { - vm.assume(tokens > minimumProvisionTokens * stakeToFeesRatio); - uint256 maxTokensPayment = tokens / stakeToFeesRatio > type(uint128).max ? type(uint128).max : tokens / stakeToFeesRatio; + ) public useIndexer useAllocation(tokensAllocated) { + vm.assume(tokensAllocated > minimumProvisionTokens * stakeToFeesRatio); + uint256 maxTokensPayment = tokensAllocated / stakeToFeesRatio > type(uint128).max + ? type(uint128).max + : tokensAllocated / stakeToFeesRatio; tokensPayment = bound(tokensPayment, minimumProvisionTokens, maxTokensPayment); - uint128 tokensPayment128 = uint128(tokensPayment); - IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; - bytes memory data = _getQueryFeeEncodedData(users.indexer, tokensPayment128); - + + _approveCollector(tokensPayment); + uint256 indexerPreviousBalance = token.balanceOf(users.indexer); - - _approveCollector(tokensPayment128); - subgraphService.collect(users.indexer, paymentType, data); + + bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokensPayment)); + uint256 tokensCollected = subgraphService.collect(users.indexer, IGraphPayments.PaymentTypes.QueryFee, data); uint256 indexerBalance = token.balanceOf(users.indexer); - uint256 tokensProtocol = tokensPayment128.mulPPM(protocolPaymentCut); - uint256 curationTokens = tokensPayment128.mulPPMRoundUp(curationCut); - uint256 dataServiceTokens = tokensPayment128.mulPPM(serviceCut + curationCut) - curationTokens; + uint256 tokensProtocol = tokensCollected.mulPPM(protocolPaymentCut); + uint256 curationTokens = tokensCollected.mulPPM(curationCut); - uint256 expectedIndexerTokensPayment = tokensPayment128 - tokensProtocol - dataServiceTokens - curationTokens; + uint256 expectedIndexerTokensPayment = tokensCollected - tokensProtocol - curationTokens; assertEq(indexerBalance, indexerPreviousBalance + expectedIndexerTokensPayment); } + function testCollect_MultipleQueryFees( + uint256 tokensAllocated, + uint256 numPayments + ) public useIndexer useAllocation(tokensAllocated) { + vm.assume(tokensAllocated > minimumProvisionTokens * stakeToFeesRatio); + numPayments = bound(numPayments, 1, 10); + uint256 tokensPayment = tokensAllocated / stakeToFeesRatio / numPayments; + + _approveCollector(tokensAllocated); + + uint256 accTokensPayment = 0; + for (uint i = 0; i < numPayments; i++) { + accTokensPayment = accTokensPayment + tokensPayment; + uint256 indexerPreviousBalance = token.balanceOf(users.indexer); + + bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(accTokensPayment)); + uint256 tokensCollected = subgraphService.collect( + users.indexer, + IGraphPayments.PaymentTypes.QueryFee, + data + ); + + uint256 indexerBalance = token.balanceOf(users.indexer); + uint256 tokensProtocol = tokensCollected.mulPPM(protocolPaymentCut); + uint256 curationTokens = tokensCollected.mulPPM(curationCut); + + uint256 expectedIndexerTokensPayment = tokensCollected - tokensProtocol - curationTokens; + assertEq(indexerBalance, indexerPreviousBalance + expectedIndexerTokensPayment); + } + } + function testCollect_IndexingRewards(uint256 tokens) public useIndexer useAllocation(tokens) { _collectIndexingRewards(users.indexer, allocationID, tokens); } - function testCollect_RevertWhen_InvalidPayment( - uint256 tokens - ) public useIndexer useAllocation(tokens) { + function testCollect_RevertWhen_InvalidPayment(uint256 tokens) public useIndexer useAllocation(tokens) { IGraphPayments.PaymentTypes invalidPaymentType = IGraphPayments.PaymentTypes.IndexingFee; - vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceInvalidPaymentType.selector, - invalidPaymentType - )); + vm.expectRevert( + abi.encodeWithSelector(ISubgraphService.SubgraphServiceInvalidPaymentType.selector, invalidPaymentType) + ); subgraphService.collect(users.indexer, invalidPaymentType, ""); } - function testCollect_RevertWhen_NotAuthorized( - uint256 tokens - ) public useIndexer useAllocation(tokens) { + function testCollect_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer useAllocation(tokens) { IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokens)); resetPrank(users.operator); - vm.expectRevert(abi.encodeWithSelector( - ProvisionManager.ProvisionManagerNotAuthorized.selector, - users.operator, - users.indexer - )); + vm.expectRevert( + abi.encodeWithSelector( + ProvisionManager.ProvisionManagerNotAuthorized.selector, + users.operator, + users.indexer + ) + ); subgraphService.collect(users.indexer, paymentType, data); } @@ -133,11 +162,13 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { address newIndexer = makeAddr("newIndexer"); _createAndStartAllocation(newIndexer, tokens); bytes memory data = _getQueryFeeEncodedData(newIndexer, uint128(tokens)); - vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, - newIndexer, - allocationID - )); + vm.expectRevert( + abi.encodeWithSelector( + ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, + newIndexer, + allocationID + ) + ); subgraphService.collect(newIndexer, paymentType, data); } @@ -149,11 +180,9 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { address newIndexer = makeAddr("newIndexer"); _createAndStartAllocation(newIndexer, tokens); bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokens)); - vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceIndexerMismatch.selector, - users.indexer, - newIndexer - )); + vm.expectRevert( + abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerMismatch.selector, users.indexer, newIndexer) + ); subgraphService.collect(newIndexer, paymentType, data); } @@ -166,11 +195,9 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { _createAndStartAllocation(newIndexer, tokens); bytes memory data = abi.encode(allocationID, bytes32("POI1")); // Attempt to collect from other indexer's allocation - vm.expectRevert(abi.encodeWithSelector( - AllocationManager.AllocationManagerNotAuthorized.selector, - newIndexer, - allocationID - )); + vm.expectRevert( + abi.encodeWithSelector(AllocationManager.AllocationManagerNotAuthorized.selector, newIndexer, allocationID) + ); subgraphService.collect(newIndexer, paymentType, data); } } diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index e35659062..e533fd549 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -14,8 +14,7 @@ abstract contract Constants { uint32 internal constant delegationRatio = 16; uint256 public constant stakeToFeesRatio = 2; uint256 public constant maxPOIStaleness = 28 days; - uint128 public constant serviceCut = 10000; - uint128 public constant curationCut = 10000; + uint256 public constant curationCut = 10000; // Staking uint64 internal constant MAX_THAWING_PERIOD = 28 days; // GraphEscrow parameters From 0a9fe158f84a3a45b3029c97d9e75e15c2926993 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 21 Aug 2024 15:09:54 -0300 Subject: [PATCH 169/343] fix: prevent provisions from being overwritten if they exist (OZ H-05) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../internal/IHorizonStakingMain.sol | 5 +++++ .../contracts/staking/HorizonStaking.sol | 1 + .../test/staking/provision/provision.t.sol | 20 ++++++++++++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 25c5f85aa..e296f88e5 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -352,6 +352,11 @@ interface IHorizonStakingMain { */ error HorizonStakingInvalidThawingPeriod(uint64 thawingPeriod, uint64 maxThawingPeriod); + /** + * @notice Thrown when attempting to create a provision for a data service that already has a provision. + */ + error HorizonStakingProvisionAlreadyExists(); + // -- Errors: stake -- /** diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 4d3349b7a..45ce7c8cb 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -606,6 +606,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _thawingPeriod <= _maxThawingPeriod, HorizonStakingInvalidThawingPeriod(_thawingPeriod, _maxThawingPeriod) ); + require(_provisions[_serviceProvider][_verifier].createdAt == 0, HorizonStakingProvisionAlreadyExists()); uint256 tokensIdle = _getIdleStake(_serviceProvider); require(_tokens <= tokensIdle, HorizonStakingInsufficientIdleStake(_tokens, tokensIdle)); diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol index fc941ec7f..3394460fb 100644 --- a/packages/horizon/test/staking/provision/provision.t.sol +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -6,7 +6,6 @@ import "forge-std/Test.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingProvisionTest is HorizonStakingTest { - /* * TESTS */ @@ -68,6 +67,21 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { staking.provision(users.indexer, subgraphDataServiceAddress, provisionTokens, 0, 0); } + function testProvision_RevertWhen_AlreadyExists( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount / 2, maxVerifierCut, thawingPeriod) { + resetPrank(users.indexer); + + token.approve(address(staking), amount / 2); + staking.stake(amount / 2); + + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingProvisionAlreadyExists()"); + vm.expectRevert(expectedError); + staking.provision(users.indexer, subgraphDataServiceAddress, amount / 2, maxVerifierCut, thawingPeriod); + } + function testProvision_OperatorAddTokensToProvision( uint256 amount, uint32 maxVerifierCut, @@ -94,7 +108,7 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { vm.startPrank(users.operator); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingNotAuthorized(address,address,address)", + "HorizonStakingNotAuthorized(address,address,address)", users.operator, users.indexer, subgraphDataServiceAddress @@ -102,4 +116,4 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { vm.expectRevert(expectedError); staking.provision(users.indexer, subgraphDataServiceAddress, amount, maxVerifierCut, thawingPeriod); } -} \ No newline at end of file +} From ab8f39b840035a651afdf938744e6a9c836c9182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 21 Aug 2024 15:49:24 -0300 Subject: [PATCH 170/343] fix: div by zero when delegating to a pool where all tokens are thawing (OZ H-06) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/staking/HorizonStaking.sol | 4 ++- .../staking/HorizonStakingExtension.sol | 4 ++- .../horizon/test/staking/HorizonStaking.t.sol | 2 +- .../test/staking/delegation/delegate.t.sol | 15 ++++++++++ .../test/staking/transfer-tools/ttools.t.sol | 28 ++++++++++++++++++- 5 files changed, 49 insertions(+), 4 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 45ce7c8cb..d0c227157 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -720,7 +720,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { ); // Calculate shares to issue - uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); + uint256 shares = (pool.tokens == 0 || pool.tokens == pool.tokensThawing) + ? _tokens + : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); require(shares != 0 && shares >= _minSharesOut, HorizonStakingSlippageProtection(shares, _minSharesOut)); pool.tokens = pool.tokens + _tokens; diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 8f7ab8449..38987944d 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -358,7 +358,9 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon } // Calculate shares to issue (without applying any delegation tax) - uint256 shares = (pool.tokens == 0) ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); + uint256 shares = (pool.tokens == 0 || pool.tokens == pool.tokensThawing) + ? _tokens + : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); if (shares == 0 || _tokens < MINIMUM_DELEGATION) { // If no shares would be issued (probably a rounding issue or attack), diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index bf0106fca..75d23948d 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -143,7 +143,7 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { stakingBalance: token.balanceOf(address(staking)) }); - uint256 calcShares = (beforeData.pool.tokens == 0) + uint256 calcShares = (beforeData.pool.tokens == 0 || beforeData.pool.tokens == beforeData.pool.tokensThawing) ? tokens : ((tokens * beforeData.pool.shares) / (beforeData.pool.tokens - beforeData.pool.tokensThawing)); diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 939893794..79443f96c 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -37,6 +37,21 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); } + function testDelegate_Tokens_WhenAllThawing( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 1 days) { + delegationAmount = bound(delegationAmount, 1 ether, MAX_STAKING_TOKENS); + + vm.startPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); + + Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); + + _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); + } + function testDelegate_RevertWhen_ZeroTokens(uint256 amount) public useIndexer useProvision(amount, 0, 0) { vm.startPrank(users.delegator); bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); diff --git a/packages/horizon/test/staking/transfer-tools/ttools.t.sol b/packages/horizon/test/staking/transfer-tools/ttools.t.sol index 71bf2bb3e..28bc11264 100644 --- a/packages/horizon/test/staking/transfer-tools/ttools.t.sol +++ b/packages/horizon/test/staking/transfer-tools/ttools.t.sol @@ -129,6 +129,32 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { ); _onTokenTransfer_ReceiveDelegation(counterpartStaking, amount, data); } + function testOnTransfer_ReceiveDelegation_WhenAllThawing(uint256 amountReceived, uint256 amountDelegated) public { + amountReceived = bound(amountReceived, 1 ether, MAX_STAKING_TOKENS); + amountDelegated = bound(amountDelegated, 1 ether, MAX_STAKING_TOKENS); + + // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 + resetPrank(users.indexer); + _createProvision(subgraphDataServiceLegacyAddress, 100 ether, 0, 1 days); + + resetPrank(users.delegator); + _delegateLegacy(users.indexer, amountDelegated); + + // send amount to staking contract - this should be done by the bridge + resetPrank(users.delegator); + token.transfer(address(staking), amountReceived); + + // thaw all delegation before receiving new delegation from L1 + resetPrank(users.delegator); + _undelegateLegacy(users.indexer, amountDelegated); + + resetPrank(graphTokenGatewayAddress); + bytes memory data = abi.encode( + uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), + abi.encode(users.indexer, users.delegator) + ); + _onTokenTransfer_ReceiveDelegation(counterpartStaking, amountReceived, data); + } /** * HELPERS @@ -153,7 +179,7 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { ); uint256 beforeDelegatorBalance = token.balanceOf(delegator); uint256 beforeStakingBalance = token.balanceOf(address(staking)); - uint256 calcShares = (beforePool.tokens == 0) + uint256 calcShares = (beforePool.tokens == 0 || beforePool.tokens == beforePool.tokensThawing) ? tokens : ((tokens * beforePool.shares) / (beforePool.tokens - beforePool.tokensThawing)); From 61bf0eefb9c8bf1f468902ad97383a835c12c910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 22 Aug 2024 11:45:55 -0300 Subject: [PATCH 171/343] fix: remove white space from typehash calculation (OZ H-07) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/contracts/payments/collectors/TAPCollector.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 77e086022..c8b52a188 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -24,7 +24,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { /// @notice The EIP712 typehash for the ReceiptAggregateVoucher struct bytes32 private constant EIP712_RAV_TYPEHASH = keccak256( - "ReceiptAggregateVoucher(address dataService, address serviceProvider,uint64 timestampNs,uint128 valueAggregate,bytes metadata)" + "ReceiptAggregateVoucher(address dataService,address serviceProvider,uint64 timestampNs,uint128 valueAggregate,bytes metadata)" ); /// @notice Tracks the amount of tokens already collected by a data service from a payer to a receiver From 11b7d443ef8056aba6f43b2b7f6305373d921a7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 23 Aug 2024 14:08:41 -0300 Subject: [PATCH 172/343] fix: include rav metadata in signature verification (OZ H-08) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../horizon/contracts/payments/collectors/TAPCollector.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index c8b52a188..4ba835ace 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -120,7 +120,8 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { _rav.dataService, _rav.serviceProvider, _rav.timestampNs, - _rav.valueAggregate + _rav.valueAggregate, + _rav.metadata ) ) ); From 03ce865cc9e005ee85ff889eae86b1033c19bd11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 23 Aug 2024 15:40:49 -0300 Subject: [PATCH 173/343] fix: wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/SubgraphService.sol | 59 ++++++++++++------ .../contracts/interfaces/ISubgraphService.sol | 36 +++++++++++ .../contracts/libraries/Allocation.sol | 12 ++++ .../contracts/utilities/AllocationManager.sol | 45 +++++--------- .../subgraphService/allocate/resize.t.sol | 3 +- .../test/subgraphService/allocate/stop.t.sol | 61 ++++++++++++------- .../subgraphService/collect/collect.t.sol | 10 ++- 7 files changed, 154 insertions(+), 72 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index ab0e02dc5..d9a9ca45c 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -222,7 +222,7 @@ contract SubgraphService is ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { address allocationId = abi.decode(data, (address)); require( - allocations[allocationId].indexer == indexer, + allocations.get(allocationId).indexer == indexer, SubgraphServiceAllocationNotAuthorized(indexer, allocationId) ); _closeAllocation(allocationId); @@ -266,9 +266,19 @@ contract SubgraphService is uint256 paymentCollected = 0; if (paymentType == IGraphPayments.PaymentTypes.QueryFee) { - paymentCollected = _collectQueryFees(indexer, data); + ITAPCollector.SignedRAV memory signedRav = abi.decode(data, (ITAPCollector.SignedRAV)); + require( + signedRav.rav.serviceProvider == indexer, + SubgraphServiceIndexerMismatch(signedRav.rav.serviceProvider, indexer) + ); + paymentCollected = _collectQueryFees(signedRav); } else if (paymentType == IGraphPayments.PaymentTypes.IndexingRewards) { - paymentCollected = _collectIndexingRewards(indexer, data); + (address allocationId, bytes32 poi) = abi.decode(data, (address, bytes32)); + require( + allocations.get(allocationId).indexer == indexer, + SubgraphServiceAllocationNotAuthorized(indexer, allocationId) + ); + paymentCollected = _collectIndexingRewards(allocationId, poi); } else { revert SubgraphServiceInvalidPaymentType(paymentType); } @@ -297,6 +307,19 @@ contract SubgraphService is emit ServiceProviderSlashed(indexer, tokens); } + /** + * @notice See {ISubgraphService.closeStaleAllocation} + */ + function closeStaleAllocation(address allocationId) external override { + Allocation.State memory allocation = allocations.get(allocationId); + require( + allocation.isStale(maxPOIStaleness), + SubgraphServiceAllocationNotStale(allocationId, allocation.lastPOIPresentedAt) + ); + require(!allocation.isAltruistic(), SubgraphServiceAllocationIsAltruistic(allocationId)); + _closeAllocation(allocationId); + } + /** * @notice See {ISubgraphService.resizeAllocation} */ @@ -311,7 +334,11 @@ contract SubgraphService is onlyRegisteredIndexer(indexer) whenNotPaused { - _resizeAllocation(indexer, allocationId, tokens, delegationRatio); + require( + allocations.get(allocationId).indexer == indexer, + SubgraphServiceAllocationNotAuthorized(indexer, allocationId) + ); + _resizeAllocation(allocationId, tokens, delegationRatio); } /** @@ -493,23 +520,19 @@ contract SubgraphService is * Emits a {StakeClaimLocked} event. * Emits a {QueryFeesCollected} event. * - * @param _indexer The address of the indexer - * @param _data Encoded data containing a signed RAV + * @param _signedRav Signed RAV */ - function _collectQueryFees(address _indexer, bytes memory _data) private returns (uint256 feesCollected) { - ITAPCollector.SignedRAV memory signedRav = abi.decode(_data, (ITAPCollector.SignedRAV)); - address indexer = signedRav.rav.serviceProvider; - require(_indexer == indexer, SubgraphServiceIndexerMismatch(indexer, _indexer)); - address allocationId = abi.decode(signedRav.rav.metadata, (address)); + function _collectQueryFees(ITAPCollector.SignedRAV memory _signedRav) private returns (uint256 feesCollected) { + address indexer = _signedRav.rav.serviceProvider; + address allocationId = abi.decode(_signedRav.rav.metadata, (address)); Allocation.State memory allocation = allocations.get(allocationId); - // Not strictly necessary: if an indexer collects another's voucher, they lock their stake with no gains. - // We include the check to guard against potential malicious payers deceiving the indexer. - require(allocation.indexer == _indexer, SubgraphServiceAllocationNotAuthorized(_indexer, allocationId)); + // Check RAV is consistent - RAV indexer must match the allocation's indexer + require(allocation.indexer == indexer, SubgraphServiceInvalidRAV(indexer, allocation.indexer)); bytes32 subgraphDeploymentId = allocation.subgraphDeploymentId; // release expired stake claims - _releaseStake(_indexer, 0); + _releaseStake(indexer, 0); // Collect from GraphPayments - only curators cut is sent back to the subgraph service uint256 balanceBefore = _graphToken().balanceOf(address(this)); @@ -517,7 +540,7 @@ contract SubgraphService is uint256 curationCut = _curation().isCurated(subgraphDeploymentId) ? curationFeesCut : 0; uint256 tokensCollected = _tapCollector().collect( IGraphPayments.PaymentTypes.QueryFee, - abi.encode(signedRav, curationCut) + abi.encode(_signedRav, curationCut) ); uint256 tokensCurators = tokensCollected.mulPPM(curationCut); @@ -531,7 +554,7 @@ contract SubgraphService is // lock stake as economic security for fees uint256 tokensToLock = tokensCollected * stakeToFeesRatio; uint256 unlockTimestamp = block.timestamp + _disputeManager().getDisputePeriod(); - _lockStake(_indexer, tokensToLock, unlockTimestamp); + _lockStake(indexer, tokensToLock, unlockTimestamp); if (tokensCurators > 0) { // curation collection changes subgraph signal so we take rewards snapshot @@ -543,7 +566,7 @@ contract SubgraphService is } } - emit QueryFeesCollected(_indexer, tokensCollected, tokensCurators); + emit QueryFeesCollected(indexer, tokensCollected, tokensCurators); return tokensCollected; } } diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index f03bd0b49..5e82c66ed 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -97,6 +97,26 @@ interface ISubgraphService is IDataServiceFees { */ error SubgraphServiceAllocationNotAuthorized(address indexer, address allocationId); + /** + * @notice Thrown when collecting a RAV where the RAV indexer is not the same as the allocation indexer + * @param ravIndexer The address of the RAV indexer + * @param allocationIndexer The address of the allocation indexer + */ + error SubgraphServiceInvalidRAV(address ravIndexer, address allocationIndexer); + + /** + * @notice Thrown when trying to force close an allocation that is not stale + * @param allocationId The id of the allocation + * @param lastPOIPresentedAt The timestamp when the last POI was presented + */ + error SubgraphServiceAllocationNotStale(address allocationId, uint256 lastPOIPresentedAt); + + /** + * @notice Thrown when trying to force close an altruistic allocation + * @param allocationId The id of the allocation + */ + error SubgraphServiceAllocationIsAltruistic(address allocationId); + /** * @notice Initialize the contract * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation @@ -104,6 +124,22 @@ interface ISubgraphService is IDataServiceFees { */ function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external; + /** + * @notice Close a stale allocation + * @dev This function can be permissionlessly called when the allocation is stale. + * This ensures rewards for other allocations are not diluted by an inactive allocation + * + * Requirements: + * - Allocation must exist and be open + * - Allocation must be stale + * - Allocation cannot be altruistic + * + * Emits a {AllocationClosed} event. + * + * @param allocationId The id of the allocation + */ + function closeStaleAllocation(address allocationId) external; + /** * @notice Change the amount of tokens in an allocation * @dev Requirements: diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index 7511f360a..df3fe5f59 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; + /** * @title Allocation library * @notice A library to handle Allocations. @@ -164,6 +166,16 @@ library Allocation { return _get(self, allocationId); } + /** + * @notice Checks if an allocation is stale + * @param self The allocation + * @param staleThreshold The time in blocks to consider an allocation stale + */ + function isStale(State memory self, uint256 staleThreshold) internal view returns (bool) { + uint256 timeSinceLastPOI = block.number - Math.max(self.createdAt, self.lastPOIPresentedAt); + return self.isOpen() && timeSinceLastPOI <= staleThreshold; + } + /** * @notice Checks if an allocation exists * @param self The allocation diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 1ddb25f5e..fed133d03 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -152,13 +152,6 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca */ error AllocationManagerAllocationSameSize(address allocationId, uint256 tokens); - /** - * @notice Thrown when an indexer is not allocation owner - * @param allocationId The id of the allocation - * @param indexer The address of the indexer - */ - error AllocationManagerNotAuthorized(address indexer, address allocationId); - /** * @notice Initializes the contract and parent contracts */ @@ -257,43 +250,40 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * * Emits a {IndexingRewardsCollected} event. * - * @param _indexer The address of the indexer - * @param _data Encoded data containing: - * - address `allocationId`: The id of the allocation to collect rewards for - * - bytes32 `poi`: The POI being presented + * @param _allocationId The id of the allocation to collect rewards for + * @param _poi The POI being presented */ - function _collectIndexingRewards(address _indexer, bytes memory _data) internal returns (uint256) { - (address allocationId, bytes32 poi) = abi.decode(_data, (address, bytes32)); - - Allocation.State memory allocation = allocations.get(allocationId); - require(allocation.indexer == _indexer, AllocationManagerNotAuthorized(_indexer, allocationId)); - require(allocation.isOpen(), AllocationManagerAllocationClosed(allocationId)); + function _collectIndexingRewards(address _allocationId, bytes32 _poi) internal returns (uint256) { + Allocation.State memory allocation = allocations.get(_allocationId); + require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId)); // Mint indexing rewards if all conditions are met uint256 timeSinceLastPOI = block.number - Math.max(allocation.createdAt, allocation.lastPOIPresentedAt); - uint256 tokensRewards = (timeSinceLastPOI <= maxPOIStaleness && poi != bytes32(0) && !allocation.isAltruistic()) - ? _graphRewardsManager().takeRewards(allocationId) + uint256 tokensRewards = (timeSinceLastPOI <= maxPOIStaleness && + _poi != bytes32(0) && + !allocation.isAltruistic()) + ? _graphRewardsManager().takeRewards(_allocationId) : 0; // ... but we still take a snapshot to ensure the rewards are not accumulated for the next valid POI allocations.snapshotRewards( - allocationId, + _allocationId, _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId) ); - allocations.presentPOI(allocationId); + allocations.presentPOI(_allocationId); // Any pending rewards should have been collected now - allocations.clearPendingRewards(allocationId); + allocations.clearPendingRewards(_allocationId); if (tokensRewards == 0) { emit IndexingRewardsCollected( allocation.indexer, - allocationId, + _allocationId, allocation.subgraphDeploymentId, 0, 0, 0, - poi + _poi ); return tokensRewards; } @@ -322,12 +312,12 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca emit IndexingRewardsCollected( allocation.indexer, - allocationId, + _allocationId, allocation.subgraphDeploymentId, tokensRewards, tokensIndexerRewards, tokensDelegationRewards, - poi + _poi ); return tokensRewards; @@ -346,19 +336,16 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * * Emits a {AllocationResized} event. * - * @param _indexer The address of the indexer * @param _allocationId The id of the allocation to be resized * @param _tokens The new amount of tokens to allocate * @param _delegationRatio The delegation ratio to consider when locking tokens */ function _resizeAllocation( - address _indexer, address _allocationId, uint256 _tokens, uint32 _delegationRatio ) internal returns (Allocation.State memory) { Allocation.State memory allocation = allocations.get(_allocationId); - require(allocation.indexer == _indexer, AllocationManagerNotAuthorized(_indexer, _allocationId)); require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId)); require(_tokens != allocation.tokens, AllocationManagerAllocationSameSize(_allocationId, _tokens)); diff --git a/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol b/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol index 9fdd327dc..a2d8ef4a7 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol @@ -6,6 +6,7 @@ import "forge-std/Test.sol"; import { Allocation } from "../../../contracts/libraries/Allocation.sol"; import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; contract SubgraphServiceAllocateResizeTest is SubgraphServiceTest { @@ -100,7 +101,7 @@ contract SubgraphServiceAllocateResizeTest is SubgraphServiceTest { address newIndexer = makeAddr("newIndexer"); _createAndStartAllocation(newIndexer, tokens); vm.expectRevert(abi.encodeWithSelector( - AllocationManager.AllocationManagerNotAuthorized.selector, + ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, newIndexer, allocationID )); diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol index 6e53ab886..725531c72 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol @@ -14,7 +14,6 @@ import { LegacyAllocation } from "../../../contracts/libraries/LegacyAllocation. import { SubgraphServiceTest } from "../SubgraphService.t.sol"; contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { - /* * Helpers */ @@ -27,49 +26,69 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { _stopAllocation(users.indexer, allocationID); } - function testStop_RevertWhen_IndexerIsNotTheAllocationOwner(uint256 tokens) public useIndexer useAllocation(tokens) { + function testStop_RevertWhen_IndexerIsNotTheAllocationOwner( + uint256 tokens + ) public useIndexer useAllocation(tokens) { // Setup new indexer address newIndexer = makeAddr("newIndexer"); _createAndStartAllocation(newIndexer, tokens); // Attempt to close other indexer's allocation bytes memory data = abi.encode(allocationID); - vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, - newIndexer, - allocationID - )); + vm.expectRevert( + abi.encodeWithSelector( + ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, + newIndexer, + allocationID + ) + ); subgraphService.stopService(newIndexer, data); } function testStop_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer useAllocation(tokens) { resetPrank(users.operator); bytes memory data = abi.encode(allocationID); - vm.expectRevert(abi.encodeWithSelector( - ProvisionManager.ProvisionManagerNotAuthorized.selector, - users.operator, - users.indexer - )); + vm.expectRevert( + abi.encodeWithSelector( + ProvisionManager.ProvisionManagerNotAuthorized.selector, + users.operator, + users.indexer + ) + ); subgraphService.stopService(users.indexer, data); } function testStop_RevertWhen_NotRegistered() public useIndexer { bytes memory data = abi.encode(allocationID); - vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, - users.indexer - )); + vm.expectRevert( + abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, users.indexer) + ); subgraphService.stopService(users.indexer, data); } function testStop_RevertWhen_NotOpen(uint256 tokens) public useIndexer useAllocation(tokens) { bytes memory data = abi.encode(allocationID); subgraphService.stopService(users.indexer, data); - vm.expectRevert(abi.encodeWithSelector( - Allocation.AllocationClosed.selector, - allocationID, - block.timestamp - )); + vm.expectRevert(abi.encodeWithSelector(Allocation.AllocationClosed.selector, allocationID, block.timestamp)); subgraphService.stopService(users.indexer, data); } + + function testCloseStaleAllocation( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + address permissionlessBob = makeAddr("permissionlessBob"); + + vm.warp(maxPOIStaleness + 1); + + resetPrank(permissionlessBob); + vm.expectEmitted( + abi.encodeWithSelector( + ISubgraphService.SubgraphServiceAllocationClosed.selector, + allocationID + ) + ); + subgraphService.closeStaleAllocation(allocationID); + + assertEq(); + } } diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index e8292de45..07294b25a 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -161,12 +161,16 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { // Setup new indexer address newIndexer = makeAddr("newIndexer"); _createAndStartAllocation(newIndexer, tokens); + + // This data is for user.indexer allocationId bytes memory data = _getQueryFeeEncodedData(newIndexer, uint128(tokens)); + + resetPrank(newIndexer); vm.expectRevert( abi.encodeWithSelector( - ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, + ISubgraphService.SubgraphServiceInvalidRAV.selector, newIndexer, - allocationID + users.indexer ) ); subgraphService.collect(newIndexer, paymentType, data); @@ -196,7 +200,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { bytes memory data = abi.encode(allocationID, bytes32("POI1")); // Attempt to collect from other indexer's allocation vm.expectRevert( - abi.encodeWithSelector(AllocationManager.AllocationManagerNotAuthorized.selector, newIndexer, allocationID) + abi.encodeWithSelector(ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, newIndexer, allocationID) ); subgraphService.collect(newIndexer, paymentType, data); } From dd6a0071bc78b3cebe1816039491b607158ed699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 23 Aug 2024 15:44:45 -0300 Subject: [PATCH 174/343] fix: add fn to allow force closing stale allocations (OZ H-09) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../test/subgraphService/allocate/stop.t.sol | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol index 725531c72..a183f0790 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol @@ -81,14 +81,6 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { vm.warp(maxPOIStaleness + 1); resetPrank(permissionlessBob); - vm.expectEmitted( - abi.encodeWithSelector( - ISubgraphService.SubgraphServiceAllocationClosed.selector, - allocationID - ) - ); subgraphService.closeStaleAllocation(allocationID); - - assertEq(); } } From 7b7cff21fc53a19c7628531ba5c19eaf04eb3adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 23 Aug 2024 16:21:19 -0300 Subject: [PATCH 175/343] fix: timestamp instead of block number MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../subgraph-service/contracts/libraries/Allocation.sol | 4 ++-- .../contracts/utilities/AllocationManager.sol | 8 +++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index df3fe5f59..d8f08d6d6 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -172,8 +172,8 @@ library Allocation { * @param staleThreshold The time in blocks to consider an allocation stale */ function isStale(State memory self, uint256 staleThreshold) internal view returns (bool) { - uint256 timeSinceLastPOI = block.number - Math.max(self.createdAt, self.lastPOIPresentedAt); - return self.isOpen() && timeSinceLastPOI <= staleThreshold; + uint256 timeSinceLastPOI = block.timestamp - Math.max(self.createdAt, self.lastPOIPresentedAt); + return self.isOpen() && timeSinceLastPOI > staleThreshold; } /** diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index fed133d03..f386c4371 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -6,7 +6,6 @@ import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGra import { GraphDirectory } from "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol"; import { AllocationManagerV1Storage } from "./AllocationManagerStorage.sol"; -import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import { EIP712Upgradeable } from "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol"; import { Allocation } from "../libraries/Allocation.sol"; @@ -258,10 +257,9 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId)); // Mint indexing rewards if all conditions are met - uint256 timeSinceLastPOI = block.number - Math.max(allocation.createdAt, allocation.lastPOIPresentedAt); - uint256 tokensRewards = (timeSinceLastPOI <= maxPOIStaleness && - _poi != bytes32(0) && - !allocation.isAltruistic()) + uint256 tokensRewards = (!allocation.isStale(maxPOIStaleness) && + !allocation.isAltruistic() && + _poi != bytes32(0)) ? _graphRewardsManager().takeRewards(_allocationId) : 0; From 36f911280b66ffbde0c4ac2c7fe0b354191c22ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 23 Aug 2024 17:14:25 -0300 Subject: [PATCH 176/343] test: use skip instead of warp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../subgraph-service/test/subgraphService/allocate/stop.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol index a183f0790..fff5c457f 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol @@ -78,7 +78,7 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { ) public useIndexer useAllocation(tokens) { address permissionlessBob = makeAddr("permissionlessBob"); - vm.warp(maxPOIStaleness + 1); + skip(maxPOIStaleness + 1); resetPrank(permissionlessBob); subgraphService.closeStaleAllocation(allocationID); From 41eb02ba8171f573d7aaf7a6128c14f867f65e23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 23 Aug 2024 17:07:21 -0300 Subject: [PATCH 177/343] fix: max verifier tokens calculation when slashing (OZ H-11) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/staking/HorizonStaking.sol | 22 +++++++++++++++++-- .../horizon/test/staking/slash/slash.t.sol | 22 ++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index d0c227157..5095b4f33 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -363,9 +363,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { require(tokensProvisionTotal != 0, HorizonStakingInsufficientTokens(tokensProvisionTotal, tokens)); uint256 tokensToSlash = MathUtils.min(tokens, tokensProvisionTotal); + + // Slash service provider first + // - A portion goes to verifier as reward + // - A portion gets burned uint256 providerTokensSlashed = MathUtils.min(prov.tokens, tokensToSlash); if (providerTokensSlashed > 0) { - uint256 maxVerifierTokens = prov.tokens.mulPPM(prov.maxVerifierCut); + // Pay verifier reward - must be within the maxVerifierCut percentage + uint256 maxVerifierTokens = providerTokensSlashed.mulPPM(prov.maxVerifierCut); require( maxVerifierTokens >= tokensVerifier, HorizonStakingTooManyTokens(tokensVerifier, maxVerifierTokens) @@ -374,32 +379,45 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _graphToken().pushTokens(verifierDestination, tokensVerifier); emit VerifierTokensSent(serviceProvider, verifier, verifierDestination, tokensVerifier); } + + // Burn remainder _graphToken().burnTokens(providerTokensSlashed - tokensVerifier); - uint256 provisionFractionSlashed = (providerTokensSlashed * FIXED_POINT_PRECISION) / prov.tokens; + + // Provision accounting // TODO check for rounding issues + uint256 provisionFractionSlashed = (providerTokensSlashed * FIXED_POINT_PRECISION) / prov.tokens; prov.tokensThawing = (prov.tokensThawing * (FIXED_POINT_PRECISION - provisionFractionSlashed)) / (FIXED_POINT_PRECISION); prov.tokens = prov.tokens - providerTokensSlashed; + + // Service provider accounting _serviceProviders[serviceProvider].tokensProvisioned = _serviceProviders[serviceProvider].tokensProvisioned - providerTokensSlashed; _serviceProviders[serviceProvider].tokensStaked = _serviceProviders[serviceProvider].tokensStaked - providerTokensSlashed; + emit ProvisionSlashed(serviceProvider, verifier, providerTokensSlashed); } + // Slash delegators if needed + // - Slashed delegation is entirely burned // Since tokensToSlash is already limited above, this subtraction will remain within pool.tokens. tokensToSlash = tokensToSlash - providerTokensSlashed; if (tokensToSlash > 0) { if (_delegationSlashingEnabled) { + // Burn tokens _graphToken().burnTokens(tokensToSlash); + + // Delegation pool accounting uint256 delegationFractionSlashed = (tokensToSlash * FIXED_POINT_PRECISION) / pool.tokens; pool.tokens = pool.tokens - tokensToSlash; pool.tokensThawing = (pool.tokensThawing * (FIXED_POINT_PRECISION - delegationFractionSlashed)) / FIXED_POINT_PRECISION; + emit DelegationSlashed(serviceProvider, verifier, tokensToSlash); } else { emit DelegationSlashingSkipped(serviceProvider, verifier, tokensToSlash); diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 1644e336e..b535295fa 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -27,7 +27,6 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 slashTokens, uint256 verifierCutAmount ) public useIndexer useProvision(tokens, maxVerifierCut, 0) { - verifierCutAmount = bound(verifierCutAmount, 0, maxVerifierCut); slashTokens = bound(slashTokens, 1, tokens); uint256 maxVerifierTokens = (slashTokens * maxVerifierCut) / MAX_PPM; vm.assume(verifierCutAmount <= maxVerifierTokens); @@ -36,6 +35,27 @@ contract HorizonStakingSlashTest is HorizonStakingTest { _slash(users.indexer, subgraphDataServiceAddress, slashTokens, verifierCutAmount); } + function testSlash_Tokens_RevertWhen_TooManyVerifierTokens( + uint256 tokens, + uint32 maxVerifierCut, + uint256 slashTokens, + uint256 verifierCutAmount + ) public useIndexer useProvision(tokens, maxVerifierCut, 0) { + slashTokens = bound(slashTokens, 1, tokens); + uint256 maxVerifierTokens = (slashTokens * maxVerifierCut) / MAX_PPM; + vm.assume(verifierCutAmount > maxVerifierTokens); + + vm.startPrank(subgraphDataServiceAddress); + vm.assume(slashTokens > 0); + bytes memory expectedError = abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingTooManyTokens.selector, + verifierCutAmount, + maxVerifierTokens + ); + vm.expectRevert(expectedError); + staking.slash(users.indexer, slashTokens, verifierCutAmount, subgraphDataServiceAddress); + } + function testSlash_DelegationDisabled_SlashingOverProviderTokens( uint256 tokens, uint256 slashTokens, From b2bf0708662866226f7213814579902a70339593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 23 Aug 2024 18:04:07 -0300 Subject: [PATCH 178/343] fix: consider tokens allocated to legacy allos as not idle (OZ H-10) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../horizon/contracts/staking/HorizonStaking.sol | 9 --------- .../contracts/staking/HorizonStakingBase.sol | 1 + .../allocation/HorizonStakingExtension.t.sol | 1 + .../horizon/test/staking/allocation/close.t.sol | 13 ++++++++----- .../horizon/test/staking/allocation/collect.t.sol | 6 +++--- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 5095b4f33..b7f20bf43 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -537,15 +537,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { ServiceProviderInternal storage sp = _serviceProviders[serviceProvider]; uint256 stakedTokens = sp.tokensStaked; - // Check that the service provider's stake minus the tokens to unstake is sufficient - // to cover existing allocations - // TODO this is only needed until legacy allocations are closed, - // so we should remove it after the transition period - uint256 remainingTokens = stakedTokens - _tokens; - require( - remainingTokens >= sp.__DEPRECATED_tokensAllocated, - HorizonStakingInsufficientStakeForLegacyAllocations(remainingTokens, sp.__DEPRECATED_tokensAllocated) - ); // This is also only during the transition period: we need // to ensure tokens stay locked after closing legacy allocations. diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index eeac9f800..f62e593b1 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -260,6 +260,7 @@ abstract contract HorizonStakingBase is return _serviceProviders[_serviceProvider].tokensStaked - _serviceProviders[_serviceProvider].tokensProvisioned - + _serviceProviders[_serviceProvider].__DEPRECATED_tokensAllocated - _serviceProviders[_serviceProvider].__DEPRECATED_tokensLocked; } diff --git a/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol b/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol index 19a42da2b..bf9524c43 100644 --- a/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol +++ b/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol @@ -77,6 +77,7 @@ contract HorizonStakingExtensionTest is HorizonStakingTest { uint256 serviceProviderSlot = 14; bytes32 serviceProviderBaseSlot = keccak256(abi.encode(_allocation.indexer, serviceProviderSlot)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 0), bytes32(tokens)); vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 1), bytes32(tokens)); uint256 subgraphsAllocationsSlot = 16; diff --git a/packages/horizon/test/staking/allocation/close.t.sol b/packages/horizon/test/staking/allocation/close.t.sol index d8524bb92..c7c2aff68 100644 --- a/packages/horizon/test/staking/allocation/close.t.sol +++ b/packages/horizon/test/staking/allocation/close.t.sol @@ -28,7 +28,7 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); // Stake should be updated with rewards - assertEq(staking.getStake(address(users.indexer)), tokens + ALLOCATIONS_REWARD_CUT); + assertEq(staking.getStake(address(users.indexer)), tokens * 2 + ALLOCATIONS_REWARD_CUT); } function testCloseAllocation_WithBeneficiaryAddress(uint256 tokens) public useIndexer { @@ -77,7 +77,7 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); // No rewards distributed - assertEq(staking.getStake(address(users.indexer)), tokens); + assertEq(staking.getStake(address(users.indexer)), tokens * 2); } function testCloseAllocation_RevertWhen_ZeroTokensNotAuthorized() public useIndexer { @@ -93,13 +93,16 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { } function testCloseAllocation_WithDelegation(uint256 tokens, uint256 delegationTokens, uint32 indexingRewardCut) public useIndexer { - tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + tokens = bound(tokens, 2, MAX_STAKING_TOKENS); delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); vm.assume(indexingRewardCut <= MAX_PPM); - _storeAllocation(tokens); + uint256 legacyAllocationTokens = tokens / 2; + uint256 provisionTokens = tokens - legacyAllocationTokens; + + _storeAllocation(legacyAllocationTokens); _storeMaxAllocationEpochs(); - _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + _createProvision(subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); _storeDelegationPool(delegationTokens, indexingRewardCut, 0); // Skip 15 epochs diff --git a/packages/horizon/test/staking/allocation/collect.t.sol b/packages/horizon/test/staking/allocation/collect.t.sol index 43c3c67ca..3ea230a8b 100644 --- a/packages/horizon/test/staking/allocation/collect.t.sol +++ b/packages/horizon/test/staking/allocation/collect.t.sol @@ -84,7 +84,7 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { assertEq(staking.getStake(address(users.indexer)), 0); } - function testCollect_Tokens( + function testCollect_Tokenss( uint256 provisionTokens, uint256 allocationTokens, uint256 collectTokens, @@ -103,10 +103,10 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { vm.assume(protocolTaxPercentage <= MAX_PPM); vm.assume(queryFeeCut <= MAX_PPM); resetPrank(users.indexer); - _createProvision(subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); _storeAllocation(allocationTokens); _storeProtocolTaxAndCuration(curationPercentage, protocolTaxPercentage); _storeDelegationPool(delegationTokens, 0, queryFeeCut); + _createProvision(subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); curation.signal(_subgraphDeploymentID, curationTokens); resetPrank(users.gateway); @@ -138,7 +138,7 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { payment -= delegationFeeCut; } - assertEq(staking.getStake(address(users.indexer)), provisionTokens + payment); + assertEq(staking.getStake(address(users.indexer)), allocationTokens + provisionTokens + payment); assertEq(curation.curation(_subgraphDeploymentID), curationTokens + curationCutTokens); assertEq(staking.getDelegationPool(users.indexer, subgraphDataServiceLegacyAddress).tokens, delegationTokens + delegationFeeCut); assertEq(token.balanceOf(address(payments)), 0); From b56567e49eed99f31e88e99eca31fd3262969778 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 20 Aug 2024 18:48:06 -0300 Subject: [PATCH 179/343] fix: make fisherman deposit a fixed value (OZ L-01) --- .../contracts/DisputeManager.sol | 75 ++++++++++--------- .../contracts/DisputeManagerStorage.sol | 4 +- .../contracts/interfaces/IDisputeManager.sol | 17 ++--- .../test/SubgraphBaseTest.t.sol | 2 +- .../test/disputes/DisputeManager.t.sol | 18 +++-- .../test/disputes/accept.t.sol | 22 ++---- .../test/disputes/cancel.t.sol | 12 +-- .../test/disputes/create.t.sol | 49 +++++------- .../subgraph-service/test/disputes/draw.t.sol | 12 +-- .../subgraph-service/test/utils/Constants.sol | 2 +- 10 files changed, 94 insertions(+), 119 deletions(-) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 6d4577153..5ad0d8d56 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -97,14 +97,14 @@ contract DisputeManager is * @notice Initialize this contract. * @param arbitrator Arbitrator role * @param disputePeriod Dispute period in seconds - * @param minimumDeposit Minimum deposit required to create a Dispute + * @param disputeDeposit Deposit required to create a Dispute * @param fishermanRewardCut_ Percent of slashed funds for fisherman (ppm) * @param maxSlashingCut_ Maximum percentage of indexer stake that can be slashed (ppm) */ function initialize( address arbitrator, uint64 disputePeriod, - uint256 minimumDeposit, + uint256 disputeDeposit, uint32 fishermanRewardCut_, uint32 maxSlashingCut_ ) external override initializer { @@ -113,7 +113,7 @@ contract DisputeManager is _setArbitrator(arbitrator); _setDisputePeriod(disputePeriod); - _setMinimumDeposit(minimumDeposit); + _setDisputeDeposit(disputeDeposit); _setFishermanRewardCut(fishermanRewardCut_); _setMaxSlashingCut(maxSlashingCut_); } @@ -122,40 +122,45 @@ contract DisputeManager is * @notice Create an indexing dispute for the arbitrator to resolve. * The disputes are created in reference to an allocationId and specifically * a POI for that allocation. - * This function is called by a challenger that will need to `_deposit` at - * least `minimumDeposit` GRT tokens. + * This function is called by a challenger and it will pull `disputeDeposit` GRT tokens. + * + * Requirements: + * - Challenger must have previously approved this contract to pull `disputeDeposit` amount + * of tokens from their balance. + * * @param allocationId The allocation to dispute * @param poi The Proof of Indexing (POI) being disputed - * @param deposit Amount of tokens staked as deposit */ function createIndexingDispute( address allocationId, - bytes32 poi, - uint256 deposit + bytes32 poi ) external override returns (bytes32) { // Get funds from submitter - _pullSubmitterDeposit(deposit); + _pullSubmitterDeposit(); // Create a dispute - return _createIndexingDisputeWithAllocation(msg.sender, deposit, allocationId, poi); + return _createIndexingDisputeWithAllocation(msg.sender, disputeDeposit, allocationId, poi); } /** * @notice Create a query dispute for the arbitrator to resolve. - * This function is called by a fisherman that will need to `_deposit` at - * least `minimumDeposit` GRT tokens. - * @param attestationData Attestation bytes submitted by the fisherman - * @param deposit Amount of tokens staked as deposit - */ - function createQueryDispute(bytes calldata attestationData, uint256 deposit) external override returns (bytes32) { + * This function is called by a challenger and it will pull `disputeDeposit` GRT tokens. + * + * * Requirements: + * - Challenger must have previously approved this contract to pull `disputeDeposit` amount + * of tokens from their balance. + * + * @param attestationData Attestation bytes submitted by the challenger + */ + function createQueryDispute(bytes calldata attestationData) external override returns (bytes32) { // Get funds from submitter - _pullSubmitterDeposit(deposit); + _pullSubmitterDeposit(); // Create a dispute return _createQueryDisputeWithAttestation( msg.sender, - deposit, + disputeDeposit, Attestation.parse(attestationData), attestationData ); @@ -303,12 +308,12 @@ contract DisputeManager is } /** - * @notice Set the minimum deposit required to create a dispute. - * @dev Update the minimum deposit to `_minimumDeposit` Graph Tokens - * @param minimumDeposit The minimum deposit in Graph Tokens + * @notice Set the dispute deposit required to create a dispute. + * @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens + * @param disputeDeposit The dispute deposit in Graph Tokens */ - function setMinimumDeposit(uint256 minimumDeposit) external override onlyOwner { - _setMinimumDeposit(minimumDeposit); + function setDisputeDeposit(uint256 disputeDeposit) external override onlyOwner { + _setDisputeDeposit(disputeDeposit); } /** @@ -577,15 +582,11 @@ contract DisputeManager is } /** - * @notice Pull deposit from submitter account. - * @param _deposit Amount of tokens to deposit + * @notice Pull `disputeDeposit` from submitter account. */ - function _pullSubmitterDeposit(uint256 _deposit) private { - // Ensure that fisherman has staked at least the minimum amount - require(_deposit >= minimumDeposit, DisputeManagerInsufficientDeposit(_deposit, minimumDeposit)); - + function _pullSubmitterDeposit() private { // Transfer tokens to deposit from fisherman to this contract - _graphToken().pullTokens(msg.sender, _deposit); + _graphToken().pullTokens(msg.sender, disputeDeposit); } /** @@ -642,14 +643,14 @@ contract DisputeManager is } /** - * @notice Internal: Set the minimum deposit required to create a dispute. - * @dev Update the minimum deposit to `_minimumDeposit` Graph Tokens - * @param _minimumDeposit The minimum deposit in Graph Tokens + * @notice Internal: Set the dispute deposit required to create a dispute. + * @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens + * @param _disputeDeposit The dispute deposit in Graph Tokens */ - function _setMinimumDeposit(uint256 _minimumDeposit) private { - require(_minimumDeposit != 0, DisputeManagerInvalidMinimumDeposit(_minimumDeposit)); - minimumDeposit = _minimumDeposit; - emit MinimumDepositSet(minimumDeposit); + function _setDisputeDeposit(uint256 _disputeDeposit) private { + require(_disputeDeposit != 0, DisputeManagerInvalidDisputeDeposit(_disputeDeposit)); + disputeDeposit = _disputeDeposit; + emit DisputeDepositSet(disputeDeposit); } /** diff --git a/packages/subgraph-service/contracts/DisputeManagerStorage.sol b/packages/subgraph-service/contracts/DisputeManagerStorage.sol index 19e217f12..8ff0685bf 100644 --- a/packages/subgraph-service/contracts/DisputeManagerStorage.sol +++ b/packages/subgraph-service/contracts/DisputeManagerStorage.sol @@ -15,8 +15,8 @@ abstract contract DisputeManagerV1Storage { /// @notice dispute period in seconds uint64 public disputePeriod; - /// @notice Minimum deposit required to create a Dispute - uint256 public minimumDeposit; + /// @notice Deposit required to create a Dispute + uint256 public disputeDeposit; /// @notice Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM. uint32 public fishermanRewardCut; diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index b0616824d..09b13aec4 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -55,10 +55,10 @@ interface IDisputeManager { event DisputePeriodSet(uint64 disputePeriod); /** - * @notice Emitted when minimum deposit is set. - * @param minimumDeposit The minimum deposit required to create a dispute. + * @notice Emitted when dispute deposit is set. + * @param disputeDeposit The dispute deposit required to create a dispute. */ - event MinimumDepositSet(uint256 minimumDeposit); + event DisputeDepositSet(uint256 disputeDeposit); /** * @notice Emitted when max slashing cut is set. @@ -151,12 +151,11 @@ interface IDisputeManager { error DisputeManagerDisputePeriodZero(); error DisputeManagerZeroTokens(); error DisputeManagerInvalidDispute(bytes32 disputeId); - error DisputeManagerInvalidMinimumDeposit(uint256 minimumDeposit); + error DisputeManagerInvalidDisputeDeposit(uint256 disputeDeposit); error DisputeManagerInvalidFishermanReward(uint32 cut); error DisputeManagerInvalidMaxSlashingCut(uint32 maxSlashingCut); error DisputeManagerInvalidTokensSlash(uint256 tokensSlash, uint256 maxTokensSlash); error DisputeManagerDisputeNotPending(IDisputeManager.DisputeStatus status); - error DisputeManagerInsufficientDeposit(uint256 deposit, uint256 minimumDeposit); error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId); error DisputeManagerDisputePeriodNotFinished(); error DisputeManagerMustAcceptRelatedDispute(bytes32 disputeId, bytes32 relatedDisputeId); @@ -174,7 +173,7 @@ interface IDisputeManager { function initialize( address arbitrator, uint64 disputePeriod, - uint256 minimumDeposit, + uint256 disputeDeposit, uint32 fishermanRewardCut, uint32 maxSlashingCut ) external; @@ -183,7 +182,7 @@ interface IDisputeManager { function setArbitrator(address arbitrator) external; - function setMinimumDeposit(uint256 minimumDeposit) external; + function setDisputeDeposit(uint256 disputeDeposit) external; function setFishermanRewardCut(uint32 cut) external; @@ -191,14 +190,14 @@ interface IDisputeManager { // -- Dispute -- - function createQueryDispute(bytes calldata attestationData, uint256 deposit) external returns (bytes32); + function createQueryDispute(bytes calldata attestationData) external returns (bytes32); function createQueryDisputeConflict( bytes calldata attestationData1, bytes calldata attestationData2 ) external returns (bytes32, bytes32); - function createIndexingDispute(address allocationId, bytes32 poi, uint256 deposit) external returns (bytes32); + function createIndexingDispute(address allocationId, bytes32 poi) external returns (bytes32); function acceptDispute(bytes32 disputeId, uint256 tokensSlash) external; diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index 1ebcf6683..a381d1695 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -138,7 +138,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { users.governor, abi.encodeCall( DisputeManager.initialize, - (users.arbitrator, disputePeriod, minimumDeposit, fishermanRewardPercentage, maxSlashingPercentage) + (users.arbitrator, disputePeriod, disputeDeposit, fishermanRewardPercentage, maxSlashingPercentage) ) ); disputeManager = DisputeManager(disputeManagerProxy); diff --git a/packages/subgraph-service/test/disputes/DisputeManager.t.sol b/packages/subgraph-service/test/disputes/DisputeManager.t.sol index 8b6f95b12..954cef783 100644 --- a/packages/subgraph-service/test/disputes/DisputeManager.t.sol +++ b/packages/subgraph-service/test/disputes/DisputeManager.t.sol @@ -28,17 +28,20 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { * HELPERS */ - function _createIndexingDispute(address _allocationID, bytes32 _poi, uint256 tokens) internal returns (bytes32 disputeID) { + function _createIndexingDispute(address _allocationID, bytes32 _poi) internal returns (bytes32 disputeID) { address msgSender; (, msgSender,) = vm.readCallers(); resetPrank(users.fisherman); - token.approve(address(disputeManager), tokens); - bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, _poi, tokens); + uint256 beforeFishermanBalance = token.balanceOf(users.fisherman); + token.approve(address(disputeManager), disputeDeposit); + bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, _poi); + uint256 afterFishermanBalance = token.balanceOf(users.fisherman); + assertEq(afterFishermanBalance, beforeFishermanBalance - disputeDeposit, "Fisherman should be charged the dispute deposit"); resetPrank(msgSender); return _disputeID; } - function _createQueryDispute(uint256 tokens) internal returns (bytes32 disputeID) { + function _createQueryDispute() internal returns (bytes32 disputeID) { address msgSender; (, msgSender,) = vm.readCallers(); resetPrank(users.fisherman); @@ -49,8 +52,11 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { }); bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); - token.approve(address(disputeManager), tokens); - bytes32 _disputeID = disputeManager.createQueryDispute(attestationData, tokens); + uint256 beforeFishermanBalance = token.balanceOf(users.fisherman); + token.approve(address(disputeManager), disputeDeposit); + bytes32 _disputeID = disputeManager.createQueryDispute(attestationData); + uint256 afterFishermanBalance = token.balanceOf(users.fisherman); + assertEq(afterFishermanBalance, beforeFishermanBalance - disputeDeposit, "Fisherman should be charged the dispute deposit"); resetPrank(msgSender); return _disputeID; } diff --git a/packages/subgraph-service/test/disputes/accept.t.sol b/packages/subgraph-service/test/disputes/accept.t.sol index ee9bbec27..8e7a7f593 100644 --- a/packages/subgraph-service/test/disputes/accept.t.sol +++ b/packages/subgraph-service/test/disputes/accept.t.sol @@ -17,7 +17,6 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { function testAccept_IndexingDispute( uint256 tokens, - uint256 tokensDispute, uint256 tokensSlash, uint256 delegationAmount ) public useIndexer useAllocation(tokens) { @@ -29,10 +28,9 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); tokensSlash = bound(tokensSlash, 1, tokensSlashCap); - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); resetPrank(users.arbitrator); disputeManager.acceptDispute(disputeID, tokensSlash); @@ -44,7 +42,6 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { function testAccept_QueryDispute( uint256 tokens, - uint256 tokensDispute, uint256 tokensSlash, uint256 delegationAmount ) public useIndexer useAllocation(tokens) { @@ -56,10 +53,9 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); tokensSlash = bound(tokensSlash, 1, tokensSlashCap); - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); - bytes32 disputeID = _createQueryDispute(tokensDispute); + bytes32 disputeID = _createQueryDispute(); resetPrank(users.arbitrator); disputeManager.acceptDispute(disputeID, tokensSlash); @@ -120,7 +116,6 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { function testAccept_IndexingDispute_RevertIf_SlashAmountTooHigh( uint256 tokens, - uint256 tokensDispute, uint256 tokensSlash, uint256 delegationAmount ) public useIndexer useAllocation(tokens) { @@ -132,9 +127,8 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); tokensSlash = bound(tokensSlash, tokensSlashCap + 1 wei, type(uint256).max); - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); resetPrank(users.arbitrator); bytes memory expectedError = abi.encodeWithSelector( @@ -148,7 +142,6 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { function testAccept_QueryDispute_RevertIf_SlashAmountTooHigh( uint256 tokens, - uint256 tokensDispute, uint256 tokensSlash, uint256 delegationAmount ) public useIndexer useAllocation(tokens) { @@ -160,9 +153,8 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); tokensSlash = bound(tokensSlash, tokensSlashCap + 1 wei, type(uint256).max); - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID = _createQueryDispute(tokensDispute); + bytes32 disputeID = _createQueryDispute(); resetPrank(users.arbitrator); bytes memory expectedError = abi.encodeWithSelector( @@ -176,7 +168,6 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { function testAccept_ConflictingQueryDispute_RevertIf_SlashAmountTooHigh( uint256 tokens, - uint256 tokensDispute, uint256 tokensSlash, uint256 delegationAmount ) public useIndexer useAllocation(tokens) { @@ -188,7 +179,6 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); tokensSlash = bound(tokensSlash, tokensSlashCap + 1 wei, type(uint256).max); - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); @@ -219,13 +209,11 @@ contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { function testAccept_RevertIf_CallerIsNotArbitrator( uint256 tokens, - uint256 tokensDispute, uint256 tokensSlash ) public useIndexer useAllocation(tokens) { tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); // attempt to accept dispute as fisherman resetPrank(users.fisherman); diff --git a/packages/subgraph-service/test/disputes/cancel.t.sol b/packages/subgraph-service/test/disputes/cancel.t.sol index f61e7c099..4affbd6f4 100644 --- a/packages/subgraph-service/test/disputes/cancel.t.sol +++ b/packages/subgraph-service/test/disputes/cancel.t.sol @@ -13,12 +13,10 @@ contract DisputeManagerCancelDisputeTest is DisputeManagerTest { */ function testCancel_Dispute( - uint256 tokens, - uint256 tokensDispute + uint256 tokens ) public useIndexer useAllocation(tokens) { - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); - bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); // skip to end of dispute period skip(disputePeriod + 1); @@ -61,11 +59,9 @@ contract DisputeManagerCancelDisputeTest is DisputeManagerTest { } function testCancel_RevertIf_CallerIsNotFisherman( - uint256 tokens, - uint256 tokensDispute + uint256 tokens ) public useIndexer useAllocation(tokens) { - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); resetPrank(users.arbitrator); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotFisherman.selector)); diff --git a/packages/subgraph-service/test/disputes/create.t.sol b/packages/subgraph-service/test/disputes/create.t.sol index 5112aea0a..eb1907ebe 100644 --- a/packages/subgraph-service/test/disputes/create.t.sol +++ b/packages/subgraph-service/test/disputes/create.t.sol @@ -13,20 +13,16 @@ contract DisputeManagerCreateDisputeTest is DisputeManagerTest { */ function testCreate_IndexingDispute( - uint256 tokens, - uint256 tokensDispute + uint256 tokens ) public useIndexer useAllocation(tokens) { - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); } function testCreate_QueryDispute( - uint256 tokens, - uint256 tokensDispute + uint256 tokens ) public useIndexer useAllocation(tokens) { - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID = _createQueryDispute(tokensDispute); + bytes32 disputeID = _createQueryDispute(); assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); } @@ -54,51 +50,44 @@ contract DisputeManagerCreateDisputeTest is DisputeManagerTest { } function testCreate_RevertWhen_DisputeAlreadyCreated( - uint256 tokens, - uint256 tokensDispute + uint256 tokens ) public useIndexer useAllocation(tokens) { - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); // Create another dispute with different fisherman address otherFisherman = makeAddr("otherFisherman"); resetPrank(otherFisherman); - mint(otherFisherman, tokensDispute); - token.approve(address(disputeManager), tokensDispute); + mint(otherFisherman, disputeDeposit); + token.approve(address(disputeManager), disputeDeposit); bytes memory expectedError = abi.encodeWithSelector( IDisputeManager.DisputeManagerDisputeAlreadyCreated.selector, disputeID ); vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI1"), tokensDispute); + disputeManager.createIndexingDispute(allocationID, bytes32("POI1")); vm.stopPrank(); } - function testCreate_RevertIf_DepositUnderMinimum( - uint256 tokensDispute - ) public useFisherman { - tokensDispute = bound(tokensDispute, 1, minimumDeposit - 1); - bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerInsufficientDeposit.selector, - tokensDispute, - minimumDeposit + function testCreate_RevertIf_TokensNotApproved() public useFisherman { + bytes memory expectedError = abi.encodeWithSignature( + "ERC20InsufficientAllowance(address,uint256,uint256)", + address(disputeManager), + 0, + disputeDeposit ); vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI3"), tokensDispute); + disputeManager.createIndexingDispute(allocationID, bytes32("POI3")); vm.stopPrank(); } - function testCreate_RevertIf_AllocationDoesNotExist( - uint256 tokens - ) public useFisherman { - tokens = bound(tokens, minimumDeposit, 10_000_000_000 ether); - token.approve(address(disputeManager), tokens); + function testCreate_RevertIf_AllocationDoesNotExist() public useFisherman { + token.approve(address(disputeManager), disputeDeposit); bytes memory expectedError = abi.encodeWithSelector( IDisputeManager.DisputeManagerIndexerNotFound.selector, allocationID ); vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI4"), tokens); + disputeManager.createIndexingDispute(allocationID, bytes32("POI4")); vm.stopPrank(); } diff --git a/packages/subgraph-service/test/disputes/draw.t.sol b/packages/subgraph-service/test/disputes/draw.t.sol index e28561b10..e5ef827de 100644 --- a/packages/subgraph-service/test/disputes/draw.t.sol +++ b/packages/subgraph-service/test/disputes/draw.t.sol @@ -14,12 +14,10 @@ contract DisputeManagerDrawDisputeTest is DisputeManagerTest { */ function testDraw_Dispute( - uint256 tokens, - uint256 tokensDispute + uint256 tokens ) public useIndexer useAllocation(tokens) { - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); - bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI32"), tokensDispute); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI32")); resetPrank(users.arbitrator); disputeManager.drawDispute(disputeID); @@ -57,11 +55,9 @@ contract DisputeManagerDrawDisputeTest is DisputeManagerTest { } function testDraw_RevertIf_CallerIsNotArbitrator( - uint256 tokens, - uint256 tokensDispute + uint256 tokens ) public useIndexer useAllocation(tokens) { - tokensDispute = bound(tokensDispute, minimumDeposit, tokens); - bytes32 disputeID =_createIndexingDispute(allocationID,bytes32("POI1"), tokens); + bytes32 disputeID = _createIndexingDispute(allocationID,bytes32("POI1")); // attempt to draw dispute as fisherman resetPrank(users.fisherman); diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index e533fd549..b28362653 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -5,7 +5,7 @@ abstract contract Constants { uint256 internal constant MAX_TOKENS = 10_000_000_000 ether; // Dispute Manager uint64 internal constant disputePeriod = 300; // 5 minutes - uint256 internal constant minimumDeposit = 100 ether; // 100 GRT + uint256 internal constant disputeDeposit = 100 ether; // 100 GRT uint32 internal constant fishermanRewardPercentage = 100000; // 10% uint32 internal constant maxSlashingPercentage = 500000; // 50% // Subgraph Service From dc3add0b1253c6e47d2a4c60c435d92d2af6d4e8 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 21 Aug 2024 12:39:55 -0300 Subject: [PATCH 180/343] fix: add max fisherman rewards cut (OZ L-02) --- .../contracts/DisputeManager.sol | 8 +- .../test/SubgraphBaseTest.t.sol | 4 +- .../DisputeManager.t.sol | 6 + .../constructor/constructor.t.sol | 166 ++++++++++++++++++ .../disputes/accept.t.sol | 4 +- .../disputes/cancel.t.sol | 4 +- .../disputes/create.t.sol | 4 +- .../{ => disputeManager}/disputes/draw.t.sol | 4 +- .../governance/fishermanRewardCut.t.sol | 33 ++++ 9 files changed, 221 insertions(+), 12 deletions(-) rename packages/subgraph-service/test/{disputes => disputeManager}/DisputeManager.t.sol (97%) create mode 100644 packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol rename packages/subgraph-service/test/{ => disputeManager}/disputes/accept.t.sol (98%) rename packages/subgraph-service/test/{ => disputeManager}/disputes/cancel.t.sol (94%) rename packages/subgraph-service/test/{ => disputeManager}/disputes/create.t.sol (97%) rename packages/subgraph-service/test/{ => disputeManager}/disputes/draw.t.sol (94%) create mode 100644 packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 5ad0d8d56..f234057aa 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -52,6 +52,11 @@ contract DisputeManager is using TokenUtils for IGraphToken; using PPMMath for uint256; + // -- Constants -- + + // Maximum value for fisherman reward cut in PPM + uint32 public constant MAX_FISHERMAN_REWARD_CUT = 500000; + // -- Modifiers -- /** @@ -659,8 +664,7 @@ contract DisputeManager is * @param _fishermanRewardCut Reward as a percentage of indexer stake */ function _setFishermanRewardCut(uint32 _fishermanRewardCut) private { - // Must be within 0% to 100% (inclusive) - require(PPMMath.isValidPPM(_fishermanRewardCut), DisputeManagerInvalidFishermanReward(_fishermanRewardCut)); + require(_fishermanRewardCut <= MAX_FISHERMAN_REWARD_CUT, DisputeManagerInvalidFishermanReward(_fishermanRewardCut)); fishermanRewardCut = _fishermanRewardCut; emit FishermanRewardCutSet(fishermanRewardCut); } diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index a381d1695..9991ab8a5 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -142,6 +142,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { ) ); disputeManager = DisputeManager(disputeManagerProxy); + disputeManager.transferOwnership(users.governor); tapCollector = new TAPCollector("TAPCollector", "1", address(controller)); address subgraphServiceImplementation = address( @@ -154,8 +155,6 @@ abstract contract SubgraphBaseTest is Utils, Constants { ); subgraphService = SubgraphService(subgraphServiceProxy); - disputeManager.setSubgraphService(address(subgraphService)); - stakingExtension = new HorizonStakingExtension( address(controller), address(subgraphService) @@ -177,6 +176,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { ); resetPrank(users.governor); + disputeManager.setSubgraphService(address(subgraphService)); proxyAdmin.upgrade(stakingProxy, address(stakingBase)); proxyAdmin.acceptProxy(stakingBase, stakingProxy); staking = IHorizonStaking(address(stakingProxy)); diff --git a/packages/subgraph-service/test/disputes/DisputeManager.t.sol b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol similarity index 97% rename from packages/subgraph-service/test/disputes/DisputeManager.t.sol rename to packages/subgraph-service/test/disputeManager/DisputeManager.t.sol index 954cef783..9f80512b4 100644 --- a/packages/subgraph-service/test/disputes/DisputeManager.t.sol +++ b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol @@ -18,6 +18,12 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { * MODIFIERS */ + modifier useGovernor() { + vm.startPrank(users.governor); + _; + vm.stopPrank(); + } + modifier useFisherman { vm.startPrank(users.fisherman); _; diff --git a/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol b/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol new file mode 100644 index 000000000..d4f100f68 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { GraphDirectory } from "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol"; +import { UnsafeUpgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; +import { DisputeManager } from "../../../contracts/DisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; + +contract DisputeManagerConstructorTest is DisputeManagerTest { + using PPMMath for uint256; + + /* + * MODIFIERS + */ + + modifier useDeployer() { + vm.startPrank(users.deployer); + _; + vm.stopPrank(); + } + + /* + * HELPERS + */ + + function _initializeDisputeManager( + address implementation, + address arbitrator, + uint64 disputePeriod, + uint256 disputeDeposit, + uint32 fishermanRewardPercentage, + uint32 maxSlashingPercentage + ) private returns (address) { + return UnsafeUpgrades.deployTransparentProxy( + implementation, + users.governor, + abi.encodeCall( + DisputeManager.initialize, + (arbitrator, disputePeriod, disputeDeposit, fishermanRewardPercentage, maxSlashingPercentage) + ) + ); + } + + /* + * TESTS + */ + + function test_Constructor( + uint32 fishermanRewardPercentage + ) public useDeployer { + vm.assume(fishermanRewardPercentage <= disputeManager.MAX_FISHERMAN_REWARD_CUT()); + address disputeManagerImplementation = address(new DisputeManager(address(controller))); + address proxy = _initializeDisputeManager( + disputeManagerImplementation, + users.arbitrator, + disputePeriod, + disputeDeposit, + fishermanRewardPercentage, + maxSlashingPercentage + ); + + DisputeManager disputeManager = DisputeManager(proxy); + assertEq(disputeManager.arbitrator(), users.arbitrator); + assertEq(disputeManager.disputePeriod(), disputePeriod); + assertEq(disputeManager.disputeDeposit(), disputeDeposit); + assertEq(disputeManager.fishermanRewardCut(), fishermanRewardPercentage); + } + + function test_Constructor_RevertIf_ControllerAddressIsZero() public useDeployer { + bytes memory expectedError = abi.encodeWithSelector( + GraphDirectory.GraphDirectoryInvalidZeroAddress.selector, + "Controller" + ); + vm.expectRevert(expectedError); + new DisputeManager(address(0)); + } + + function test_Constructor_RevertIf_ArbitratorAddressIsZero() public useDeployer { + address disputeManagerImplementation = address(new DisputeManager(address(controller))); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidZeroAddress.selector + ); + vm.expectRevert(expectedError); + _initializeDisputeManager( + disputeManagerImplementation, + address(0), + disputePeriod, + disputeDeposit, + fishermanRewardPercentage, + maxSlashingPercentage + ); + } + + function test_Constructor_RevertIf_InvalidDisputePeriod() public useDeployer { + address disputeManagerImplementation = address(new DisputeManager(address(controller))); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerDisputePeriodZero.selector + ); + vm.expectRevert(expectedError); + _initializeDisputeManager( + disputeManagerImplementation, + users.arbitrator, + 0, + disputeDeposit, + fishermanRewardPercentage, + maxSlashingPercentage + ); + } + + function test_Constructor_RevertIf_InvalidDisputeDeposit() public useDeployer { + address disputeManagerImplementation = address(new DisputeManager(address(controller))); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidDisputeDeposit.selector, + 0 + ); + vm.expectRevert(expectedError); + _initializeDisputeManager( + disputeManagerImplementation, + users.arbitrator, + disputePeriod, + 0, + fishermanRewardPercentage, + maxSlashingPercentage + ); + } + + function test_Constructor_RevertIf_InvalidFishermanRewardPercentage(uint32 _fishermanRewardPercentage) public useDeployer { + vm.assume(_fishermanRewardPercentage > disputeManager.MAX_FISHERMAN_REWARD_CUT()); + address disputeManagerImplementation = address(new DisputeManager(address(controller))); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidFishermanReward.selector, + _fishermanRewardPercentage + ); + vm.expectRevert(expectedError); + _initializeDisputeManager( + disputeManagerImplementation, + users.arbitrator, + disputePeriod, + disputeDeposit, + _fishermanRewardPercentage, + maxSlashingPercentage + ); + } + + function test_Constructor_RevertIf_InvalidMaxSlashingPercentage(uint32 _maxSlashingPercentage) public useDeployer { + vm.assume(_maxSlashingPercentage > PPMMath.MAX_PPM); + address disputeManagerImplementation = address(new DisputeManager(address(controller))); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidMaxSlashingCut.selector, + _maxSlashingPercentage + ); + vm.expectRevert(expectedError); + _initializeDisputeManager( + disputeManagerImplementation, + users.arbitrator, + disputePeriod, + disputeDeposit, + fishermanRewardPercentage, + _maxSlashingPercentage + ); + } +} \ No newline at end of file diff --git a/packages/subgraph-service/test/disputes/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/accept.t.sol similarity index 98% rename from packages/subgraph-service/test/disputes/accept.t.sol rename to packages/subgraph-service/test/disputeManager/disputes/accept.t.sol index 8e7a7f593..29e3bb6f5 100644 --- a/packages/subgraph-service/test/disputes/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/accept.t.sol @@ -4,8 +4,8 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; -import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; -import { DisputeManagerTest } from "./DisputeManager.t.sol"; +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { diff --git a/packages/subgraph-service/test/disputes/cancel.t.sol b/packages/subgraph-service/test/disputeManager/disputes/cancel.t.sol similarity index 94% rename from packages/subgraph-service/test/disputes/cancel.t.sol rename to packages/subgraph-service/test/disputeManager/disputes/cancel.t.sol index 4affbd6f4..abd55e051 100644 --- a/packages/subgraph-service/test/disputes/cancel.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/cancel.t.sol @@ -3,8 +3,8 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; -import { DisputeManagerTest } from "./DisputeManager.t.sol"; +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; contract DisputeManagerCancelDisputeTest is DisputeManagerTest { diff --git a/packages/subgraph-service/test/disputes/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/create.t.sol similarity index 97% rename from packages/subgraph-service/test/disputes/create.t.sol rename to packages/subgraph-service/test/disputeManager/disputes/create.t.sol index eb1907ebe..05147ec73 100644 --- a/packages/subgraph-service/test/disputes/create.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/create.t.sol @@ -3,8 +3,8 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; -import { DisputeManagerTest } from "./DisputeManager.t.sol"; +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; contract DisputeManagerCreateDisputeTest is DisputeManagerTest { diff --git a/packages/subgraph-service/test/disputes/draw.t.sol b/packages/subgraph-service/test/disputeManager/disputes/draw.t.sol similarity index 94% rename from packages/subgraph-service/test/disputes/draw.t.sol rename to packages/subgraph-service/test/disputeManager/disputes/draw.t.sol index e5ef827de..75dabaa2f 100644 --- a/packages/subgraph-service/test/disputes/draw.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/draw.t.sol @@ -4,8 +4,8 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; -import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; -import { DisputeManagerTest } from "./DisputeManager.t.sol"; +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; contract DisputeManagerDrawDisputeTest is DisputeManagerTest { diff --git a/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol b/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol new file mode 100644 index 000000000..0c821e2a2 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +contract DisputeManagerGovernanceFishermanRewardCutTest is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Governance_SetFishermanRewardCut() public useGovernor { + uint32 fishermanRewardCut = 1000; + disputeManager.setFishermanRewardCut(fishermanRewardCut); + assertEq(disputeManager.fishermanRewardCut(), fishermanRewardCut, "Fisherman reward cut should be set."); + } + + function test_Governance_RevertWhen_OverMaximumValue(uint32 fishermanRewardCut) public useGovernor { + vm.assume(fishermanRewardCut > disputeManager.MAX_FISHERMAN_REWARD_CUT()); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerInvalidFishermanReward.selector, fishermanRewardCut)); + disputeManager.setFishermanRewardCut(fishermanRewardCut); + } + + function test_Governance_RevertWhen_NotGovernor() public useFisherman { + uint32 fishermanRewardCut = 1000; + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, users.fisherman)); + disputeManager.setFishermanRewardCut(fishermanRewardCut); + } +} \ No newline at end of file From 3aeb4b6456d517b704edd4588248e21d261bbdba Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 22 Aug 2024 12:03:00 -0300 Subject: [PATCH 181/343] fix: make PaymentsEscrow upgradable and pausable (OZ L-03) --- .../contracts/interfaces/IPaymentsEscrow.sol | 10 +++ .../contracts/payments/PaymentsEscrow.sol | 41 ++++++--- packages/horizon/test/GraphBase.t.sol | 42 +++++---- .../horizon/test/escrow/GraphEscrow.t.sol | 8 ++ packages/horizon/test/escrow/paused.t.sol | 88 +++++++++++++++++++ packages/horizon/test/escrow/withdraw.t.sol | 12 --- 6 files changed, 159 insertions(+), 42 deletions(-) create mode 100644 packages/horizon/test/escrow/paused.t.sol diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 6d9396d00..b7ed62864 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -113,6 +113,11 @@ interface IPaymentsEscrow { // -- Errors -- + /** + * @notice Thrown when a protected function is called and the contract is paused. + */ + error PaymentsEscrowIsPaused(); + /** * @notice Thrown when the available balance is insufficient to perform an operation * @param balance The current balance @@ -168,6 +173,11 @@ interface IPaymentsEscrow { */ error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens); + /** + * @notice Initialize the contract + */ + function initialize() external; + /** * @notice Authorize a collector to collect funds from the payer's escrow * @dev This function can only be used to increase the allowance of a collector. diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 6f5ee9282..37cc1047f 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -5,7 +5,8 @@ import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToke import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { IPaymentsEscrow } from "../interfaces/IPaymentsEscrow.sol"; -import { Multicall } from "@openzeppelin/contracts/utils/Multicall.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { MulticallUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { GraphDirectory } from "../utilities/GraphDirectory.sol"; @@ -17,7 +18,12 @@ import { GraphDirectory } from "../utilities/GraphDirectory.sol"; * for payments made through the payments protocol for services provided * via a Graph Horizon data service. */ -contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { +contract PaymentsEscrow is + Initializable, + MulticallUpgradeable, + GraphDirectory, + IPaymentsEscrow +{ using TokenUtils for IGraphToken; /// @notice Authorization details for payer-collector pairs @@ -38,6 +44,11 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { /// @notice Thawing period in seconds for escrow funds withdrawal uint256 public immutable WITHDRAW_ESCROW_THAWING_PERIOD; + modifier notPaused() { + require(!_graphController().paused(), PaymentsEscrowIsPaused()); + _; + } + /** * @notice Construct the PaymentsEscrow contract * @param controller The address of the controller @@ -62,10 +73,18 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { WITHDRAW_ESCROW_THAWING_PERIOD = withdrawEscrowThawingPeriod; } + + /** + * @notice See {PaymentsEscrow.initialize} + */ + function initialize() external override initializer { + __Multicall_init(); + } + /** * @notice See {IPaymentsEscrow-approveCollector} */ - function approveCollector(address collector_, uint256 allowance) external override { + function approveCollector(address collector_, uint256 allowance) external override notPaused { Collector storage collector = authorizedCollectors[msg.sender][collector_]; require(allowance > collector.allowance, PaymentsEscrowInconsistentAllowance(collector.allowance, allowance)); @@ -77,7 +96,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { /** * @notice See {IPaymentsEscrow-thawCollector} */ - function thawCollector(address collector) external override { + function thawCollector(address collector) external override notPaused { authorizedCollectors[msg.sender][collector].thawEndTimestamp = block.timestamp + REVOKE_COLLECTOR_THAWING_PERIOD; @@ -87,7 +106,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { /** * @notice See {IPaymentsEscrow-cancelThawCollector} */ - function cancelThawCollector(address collector) external override { + function cancelThawCollector(address collector) external override notPaused { require(authorizedCollectors[msg.sender][collector].thawEndTimestamp != 0, PaymentsEscrowNotThawing()); authorizedCollectors[msg.sender][collector].thawEndTimestamp = 0; @@ -97,7 +116,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { /** * @notice See {IPaymentsEscrow-revokeCollector} */ - function revokeCollector(address collector_) external override { + function revokeCollector(address collector_) external override notPaused { Collector storage collector = authorizedCollectors[msg.sender][collector_]; require(collector.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); @@ -113,21 +132,21 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { /** * @notice See {IPaymentsEscrow-deposit} */ - function deposit(address receiver, uint256 tokens) external override { + function deposit(address receiver, uint256 tokens) external override notPaused { _deposit(msg.sender, receiver, tokens); } /** * @notice See {IPaymentsEscrow-depositTo} */ - function depositTo(address payer, address receiver, uint256 tokens) external override { + function depositTo(address payer, address receiver, uint256 tokens) external override notPaused { _deposit(payer, receiver, tokens); } /** * @notice See {IPaymentsEscrow-thaw} */ - function thaw(address receiver, uint256 tokens) external override { + function thaw(address receiver, uint256 tokens) external override notPaused { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; // if amount thawing is zero and requested amount is zero this is an invalid request. @@ -152,7 +171,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { /** * @notice See {IPaymentsEscrow-withdraw} */ - function withdraw(address receiver) external override { + function withdraw(address receiver) external override notPaused { EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; require(account.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); require( @@ -180,7 +199,7 @@ contract PaymentsEscrow is Multicall, GraphDirectory, IPaymentsEscrow { uint256 tokens, address dataService, uint256 tokensDataService - ) external override { + ) external override notPaused { // Check if collector is authorized and has enough funds Collector storage collector = authorizedCollectors[payer][msg.sender]; require(collector.authorized, PaymentsEscrowCollectorNotAuthorized(payer, msg.sender)); diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 7126c5313..f93009d20 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -6,6 +6,7 @@ import "forge-std/Test.sol"; import { GraphProxyAdmin } from "@graphprotocol/contracts/contracts/upgrades/GraphProxyAdmin.sol"; import { GraphProxy } from "@graphprotocol/contracts/contracts/upgrades/GraphProxy.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; +import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import { PaymentsEscrow } from "contracts/payments/PaymentsEscrow.sol"; import { GraphPayments } from "contracts/payments/GraphPayments.sol"; @@ -114,19 +115,15 @@ abstract contract GraphBaseTest is Utils, Constants { users.deployer ); - // GraphEscrow predict address - bytes32 saltEscrow = keccak256("GraphEscrowSalt"); - bytes32 escrowHash = keccak256(bytes.concat( - vm.getCode("PaymentsEscrow.sol:PaymentsEscrow"), - abi.encode( - address(controller), - revokeCollectorThawingPeriod, - withdrawEscrowThawingPeriod - ) + // PaymentsEscrow + bytes32 escrowProxySalt = keccak256("PaymentsEscrowSalt"); + bytes32 escrowProxyHash = keccak256(bytes.concat( + vm.getCode("TransparentUpgradeableProxy.sol:TransparentUpgradeableProxy"), + abi.encode(address(controller)) )); - address predictedAddressEscrow = vm.computeCreate2Address( - saltEscrow, - escrowHash, + address predictedEscrowProxyAddress = vm.computeCreate2Address( + escrowProxySalt, + escrowProxyHash, users.deployer ); @@ -142,7 +139,7 @@ abstract contract GraphBaseTest is Utils, Constants { // Setup controller resetPrank(users.governor); controller.setContractProxy(keccak256("GraphToken"), address(token)); - controller.setContractProxy(keccak256("PaymentsEscrow"), predictedAddressEscrow); + controller.setContractProxy(keccak256("PaymentsEscrow"), predictedEscrowProxyAddress); controller.setContractProxy(keccak256("GraphPayments"), predictedPaymentsAddress); controller.setContractProxy(keccak256("Staking"), address(stakingProxy)); controller.setContractProxy(keccak256("EpochManager"), address(epochManager)); @@ -153,14 +150,21 @@ abstract contract GraphBaseTest is Utils, Constants { resetPrank(users.deployer); payments = new GraphPayments{salt: saltPayments}( - address(controller), - protocolPaymentCut - ); - escrow = new PaymentsEscrow{salt: saltEscrow}( address(controller), - revokeCollectorThawingPeriod, - withdrawEscrowThawingPeriod + protocolPaymentCut ); + + address escrowImplementation = address(new PaymentsEscrow(address(controller), revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod)); + address escrowProxy = address(new TransparentUpgradeableProxy{salt: escrowProxySalt}( + escrowImplementation, + users.governor, + abi.encodeCall( + PaymentsEscrow.initialize, + () + ) + )); + escrow = PaymentsEscrow(escrowProxy); + stakingExtension = new HorizonStakingExtension( address(controller), subgraphDataServiceLegacyAddress diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index c94d221df..a510f57bf 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -35,6 +35,14 @@ contract GraphEscrowTest is HorizonStakingSharedTest { _; } + modifier depositAndThawTokens(uint256 amount, uint256 thawAmount) { + vm.assume(thawAmount > 0); + vm.assume(amount > thawAmount); + _depositTokens(amount); + escrow.thaw(users.indexer, thawAmount); + _; + } + /* * HELPERS */ diff --git a/packages/horizon/test/escrow/paused.t.sol b/packages/horizon/test/escrow/paused.t.sol new file mode 100644 index 000000000..2be37a61b --- /dev/null +++ b/packages/horizon/test/escrow/paused.t.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; +import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; + +import { GraphEscrowTest } from "./GraphEscrow.t.sol"; + +contract GraphEscrowPausedTest is GraphEscrowTest { + + /* + * MODIFIERS + */ + + modifier usePaused(bool paused) { + address msgSender; + (, msgSender,) = vm.readCallers(); + resetPrank(users.governor); + controller.setPaused(paused); + resetPrank(msgSender); + _; + } + + /* + * TESTS + */ + + // Escrow + + function testPaused_RevertWhen_Deposit(uint256 tokens) public useGateway usePaused(true) { + vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); + escrow.deposit(users.indexer, tokens); + } + + function testPaused_RevertWhen_DepositTo(uint256 tokens) public usePaused(true) { + resetPrank(users.operator); + vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); + escrow.depositTo(users.gateway, users.indexer, tokens); + } + + function testPaused_RevertWhen_ThawTokens(uint256 tokens) public useGateway useDeposit(tokens) usePaused(true) { + vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); + escrow.thaw(users.indexer, tokens); + } + + function testPaused_RevertWhen_WithdrawTokens( + uint256 tokens, + uint256 thawAmount + ) public useGateway depositAndThawTokens(tokens, thawAmount) usePaused(true) { + // advance time + skip(withdrawEscrowThawingPeriod + 1); + + vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); + escrow.withdraw(users.indexer); + } + + // Collect + + function testPaused_RevertWhen_CollectTokens(uint256 tokens, uint256 tokensDataService) public usePaused(true) { + resetPrank(users.verifier); + vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); + escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, tokens, subgraphDataServiceAddress, tokensDataService); + } + + // Collectors + + function testPaused_RevertWhen_ApproveCollector(uint256 tokens) public useGateway usePaused(true) { + vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); + escrow.approveCollector(users.verifier, tokens); + } + + function testPaused_RevertWhen_ThawCollector(uint256 tokens) public useGateway useCollector(tokens) usePaused(true) { + vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); + escrow.thawCollector(users.verifier); + } + + function testPaused_RevertWhen_CancelThawCollector(uint256 tokens) public useGateway useCollector(tokens) usePaused(true) { + vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); + escrow.cancelThawCollector(users.verifier); + } + + function testPaused_RevertWhen_RevokeCollector(uint256 tokens) public useGateway useCollector(tokens) usePaused(true) { + vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); + escrow.revokeCollector(users.verifier); + } +} \ No newline at end of file diff --git a/packages/horizon/test/escrow/withdraw.t.sol b/packages/horizon/test/escrow/withdraw.t.sol index d2561f418..f7ffdd1c6 100644 --- a/packages/horizon/test/escrow/withdraw.t.sol +++ b/packages/horizon/test/escrow/withdraw.t.sol @@ -7,18 +7,6 @@ import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowWithdrawTest is GraphEscrowTest { - /* - * MODIFIERS - */ - - modifier depositAndThawTokens(uint256 amount, uint256 thawAmount) { - vm.assume(thawAmount > 0); - vm.assume(amount > thawAmount); - _depositTokens(amount); - escrow.thaw(users.indexer, thawAmount); - _; - } - /* * TESTS */ From 63f6ea1ff67c2f54a6c6399e82ef44f08432bf3b Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 22 Aug 2024 16:53:40 -0300 Subject: [PATCH 182/343] fix: compute address and deploy using create2 --- packages/horizon/test/GraphBase.t.sol | 87 ++++++++++++++++++--------- 1 file changed, 57 insertions(+), 30 deletions(-) diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index f93009d20..6236d00dd 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; +import { Create2 } from "@openzeppelin/contracts/utils/Create2.sol"; import { GraphProxyAdmin } from "@graphprotocol/contracts/contracts/upgrades/GraphProxyAdmin.sol"; import { GraphProxy } from "@graphprotocol/contracts/contracts/upgrades/GraphProxy.sol"; import { Controller } from "@graphprotocol/contracts/contracts/governance/Controller.sol"; @@ -104,26 +105,44 @@ abstract contract GraphBaseTest is Utils, Constants { GraphProxy stakingProxy = new GraphProxy(address(0), address(proxyAdmin)); // GraphPayments predict address - bytes32 saltPayments = keccak256("GraphPaymentsSalt"); - bytes32 paymentsHash = keccak256(bytes.concat( - vm.getCode("GraphPayments.sol:GraphPayments"), - abi.encode(address(controller), protocolPaymentCut) - )); - address predictedPaymentsAddress = vm.computeCreate2Address( - saltPayments, - paymentsHash, + bytes memory paymentsParameters = abi.encode(address(controller), protocolPaymentCut); + bytes memory paymentsBytecode = abi.encodePacked( + type(GraphPayments).creationCode, + paymentsParameters + ); + address predictedPaymentsAddress = _computeAddress( + "GraphPayments", + paymentsBytecode, users.deployer ); // PaymentsEscrow - bytes32 escrowProxySalt = keccak256("PaymentsEscrowSalt"); - bytes32 escrowProxyHash = keccak256(bytes.concat( - vm.getCode("TransparentUpgradeableProxy.sol:TransparentUpgradeableProxy"), - abi.encode(address(controller)) - )); - address predictedEscrowProxyAddress = vm.computeCreate2Address( - escrowProxySalt, - escrowProxyHash, + bytes memory escrowImplementationParameters = abi.encode( + address(controller), + revokeCollectorThawingPeriod,withdrawEscrowThawingPeriod + ); + bytes memory escrowImplementationBytecode = abi.encodePacked( + type(PaymentsEscrow).creationCode, + escrowImplementationParameters + ); + address predictedEscrowImplementationAddress = _computeAddress( + "PaymentsEscrow", + escrowImplementationBytecode, + users.deployer + ); + + bytes memory escrowProxyParameters = abi.encode( + predictedEscrowImplementationAddress, + users.governor, + abi.encodeCall(PaymentsEscrow.initialize, ()) + ); + bytes memory escrowProxyBytecode = abi.encodePacked( + type(TransparentUpgradeableProxy).creationCode, + escrowProxyParameters + ); + address predictedEscrowProxyAddress = _computeAddress( + "TransparentUpgradeableProxy", + escrowProxyBytecode, users.deployer ); @@ -149,21 +168,15 @@ abstract contract GraphBaseTest is Utils, Constants { controller.setContractProxy(keccak256("GraphProxyAdmin"), address(proxyAdmin)); resetPrank(users.deployer); - payments = new GraphPayments{salt: saltPayments}( - address(controller), - protocolPaymentCut - ); + address paymentsAddress = _deployContract("GraphPayments", paymentsBytecode); + assertEq(paymentsAddress, predictedPaymentsAddress); + payments = GraphPayments(paymentsAddress); - address escrowImplementation = address(new PaymentsEscrow(address(controller), revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod)); - address escrowProxy = address(new TransparentUpgradeableProxy{salt: escrowProxySalt}( - escrowImplementation, - users.governor, - abi.encodeCall( - PaymentsEscrow.initialize, - () - ) - )); - escrow = PaymentsEscrow(escrowProxy); + address escrowImplementationAddress = _deployContract("PaymentsEscrow", escrowImplementationBytecode); + address escrowProxyAddress = _deployContract("TransparentUpgradeableProxy", escrowProxyBytecode); + assertEq(escrowImplementationAddress, predictedEscrowImplementationAddress); + assertEq(escrowProxyAddress, predictedEscrowProxyAddress); + escrow = PaymentsEscrow(escrowProxyAddress); stakingExtension = new HorizonStakingExtension( address(controller), @@ -213,4 +226,18 @@ abstract contract GraphBaseTest is Utils, Constants { function approve(address spender, uint256 amount) internal { token.approve(spender, amount); } + + /* + * PRIVATE + */ + + function _computeAddress(string memory contractName, bytes memory bytecode, address deployer) private pure returns (address) { + bytes32 salt = keccak256(abi.encodePacked(contractName, "Salt")); + return Create2.computeAddress(salt, keccak256(bytecode), deployer); + } + + function _deployContract(string memory contractName, bytes memory bytecode) private returns (address) { + bytes32 salt = keccak256(abi.encodePacked(contractName, "Salt")); + return Create2.deploy(0, salt, bytecode); + } } \ No newline at end of file From d3f5ece36891fd6c0c75f97a9720911ef5ca748d Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 22 Aug 2024 13:55:29 -0300 Subject: [PATCH 183/343] fix: use OpenZeppelin Address to transfer ETH (OZ L-04) --- .../contracts/data-service/extensions/DataServiceRescuable.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index f321b8d22..96fae4c26 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.26; +import { Address } from "@openzeppelin/contracts/utils/Address.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { IDataServiceRescuable } from "../interfaces/IDataServiceRescuable.sol"; @@ -66,7 +67,7 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { function _rescueTokens(address _to, address _token, uint256 _tokens) internal { require(_tokens != 0, DataServiceRescuableCannotRescueZero()); - if (Denominations.isNativeToken(_token)) payable(_to).transfer(_tokens); + if (Denominations.isNativeToken(_token)) Address.sendValue(payable(_to), _tokens); else SafeERC20.safeTransfer(IERC20(_token), _to, _tokens); emit TokensRescued(msg.sender, _to, _tokens); From 4d25fcd44299ac6d1d4943da2d23ebfc8e8efb3b Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 22 Aug 2024 17:07:26 -0300 Subject: [PATCH 184/343] fix: approve collector now increases allowance (OZ L-05) --- .../contracts/interfaces/IPaymentsEscrow.sol | 16 ++++---- .../contracts/payments/PaymentsEscrow.sol | 5 +-- packages/horizon/test/escrow/collector.t.sol | 40 ++++++++++++++----- 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index b7ed62864..d29205ded 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -158,13 +158,6 @@ interface IPaymentsEscrow { */ error PaymentsEscrowInsufficientAllowance(uint256 allowance, uint256 minAllowance); - /** - * @notice Thrown when attempting to decrease a collector's allowance - * @param current The current allowance - * @param target The target allowance - */ - error PaymentsEscrowInconsistentAllowance(uint256 current, uint256 target); - /** * @notice Thrown when the contract balance is not consistent with the collection amount * @param balanceBefore The balance before the collection @@ -173,6 +166,11 @@ interface IPaymentsEscrow { */ error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens); + /** + * @notice Thrown when operating a zero token amount is not allowed. + */ + error PaymentsEscrowInvalidZeroTokens(); + /** * @notice Initialize the contract */ @@ -184,12 +182,12 @@ interface IPaymentsEscrow { * To reduce it the authorization must be revoked and a new one must be created. * * Requirements: - * - `allowance` must be greater than the current allowance + * - `allowance` must be greater than zero * * Emits an {AuthorizedCollector} event * * @param collector The address of the collector - * @param allowance The amount of tokens the collector is allowed to collect + * @param allowance The amount of tokens to add to the collector's allowance */ function approveCollector(address collector, uint256 allowance) external; diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 37cc1047f..00f97c093 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -85,11 +85,10 @@ contract PaymentsEscrow is * @notice See {IPaymentsEscrow-approveCollector} */ function approveCollector(address collector_, uint256 allowance) external override notPaused { + require(allowance != 0, PaymentsEscrowInvalidZeroTokens()); Collector storage collector = authorizedCollectors[msg.sender][collector_]; - require(allowance > collector.allowance, PaymentsEscrowInconsistentAllowance(collector.allowance, allowance)); - collector.authorized = true; - collector.allowance = allowance; + collector.allowance += allowance; emit AuthorizedCollector(msg.sender, collector_); } diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index 3c13b1b42..2df4711fe 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -3,28 +3,50 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; +import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; + import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowCollectorTest is GraphEscrowTest { /* - * TESTS + * HELPERS */ - function testCollector_Approve(uint256 amount) public useGateway useCollector(amount) { - (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); + function _approveCollector(uint256 tokens) internal { + (, uint256 beforeAllowance,) = escrow.authorizedCollectors(users.gateway, users.verifier); + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.AuthorizedCollector(users.gateway, users.verifier); + escrow.approveCollector(users.verifier, tokens); + (bool authorized, uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); assertEq(authorized, true); + assertEq(allowance - beforeAllowance, tokens); assertEq(thawEndTimestamp, 0); } - function testCollector_RevertWhen_ApprovingForSmallerAllowance( - uint256 amount, - uint256 smallerAmount + /* + * TESTS + */ + + function testCollector_Approve( + uint256 tokens, + uint256 approveSteps + ) public useGateway { + approveSteps = bound(approveSteps, 1, 100); + vm.assume(tokens > approveSteps); + + uint256 approveTokens = tokens / approveSteps; + for (uint i = 0; i < approveSteps; i++) { + _approveCollector(approveTokens); + } + } + + function testCollector_RevertWhen_ApprovingForZeroAllowance( + uint256 amount ) public useGateway useCollector(amount) { - vm.assume(smallerAmount < amount); - bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowInconsistentAllowance(uint256,uint256)", amount, smallerAmount); + bytes memory expectedError = abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowInvalidZeroTokens.selector); vm.expectRevert(expectedError); - escrow.approveCollector(users.verifier, smallerAmount); + escrow.approveCollector(users.verifier, 0); } function testCollector_Thaw(uint256 amount) public useGateway useCollector(amount) { From 1c6bb317d4fce7fb1d6dfd91143a82653d926540 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 22 Aug 2024 18:04:37 -0300 Subject: [PATCH 185/343] fix: inonsistent coding style (OZ L-06) --- .../horizon/contracts/interfaces/IGraphPayments.sol | 5 ----- .../contracts/interfaces/IPaymentsEscrow.sol | 5 ----- .../horizon/contracts/payments/GraphPayments.sol | 2 +- .../horizon/contracts/payments/PaymentsEscrow.sol | 4 ++-- .../horizon/contracts/staking/HorizonStaking.sol | 4 ++-- .../contracts/staking/HorizonStakingBase.sol | 2 +- .../contracts/staking/HorizonStakingExtension.sol | 8 ++++---- .../subgraph-service/contracts/DisputeManager.sol | 2 +- .../subgraph-service/contracts/SubgraphService.sol | 13 +++++++++---- .../contracts/interfaces/IDisputeManager.sol | 8 -------- .../contracts/interfaces/ISubgraphService.sol | 8 +------- .../contracts/libraries/Attestation.sol | 3 ++- .../contracts/utilities/AllocationManager.sol | 6 +++++- 13 files changed, 28 insertions(+), 42 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 86054ad7d..565304844 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -45,11 +45,6 @@ interface IGraphPayments { */ error GraphPaymentsInsufficientTokens(uint256 tokens, uint256 minTokens); - /** - * @notice Initialize the contract - */ - function initialize() external; - /** * @notice Collects funds from a payer. * It will pay cuts to all relevant parties and forward the rest to the receiver. diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index d29205ded..23d0b496c 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -171,11 +171,6 @@ interface IPaymentsEscrow { */ error PaymentsEscrowInvalidZeroTokens(); - /** - * @notice Initialize the contract - */ - function initialize() external; - /** * @notice Authorize a collector to collect funds from the payer's escrow * @dev This function can only be used to increase the allowance of a collector. diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 0deb8d112..bfffe4c61 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -35,7 +35,7 @@ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, I } /** - * @notice See {IGraphPayments-initialize} + * @notice Initialize the contract */ function initialize() external initializer { __Multicall_init(); diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 00f97c093..9131188bd 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -75,9 +75,9 @@ contract PaymentsEscrow is /** - * @notice See {PaymentsEscrow.initialize} + * @notice Initialize the contract */ - function initialize() external override initializer { + function initialize() external initializer { __Multicall_init(); } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index b7f20bf43..9bb05bc74 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -265,6 +265,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokens, uint256 minSharesOut ) external override notPaused { + require(tokens != 0, HorizonStakingInvalidZeroTokens()); _graphToken().pullTokens(msg.sender, tokens); _delegate(serviceProvider, verifier, tokens, minSharesOut); } @@ -325,6 +326,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice See {IHorizonStakingMain-delegate}. */ function delegate(address serviceProvider, uint256 tokens) external override notPaused { + require(tokens != 0, HorizonStakingInvalidZeroTokens()); _graphToken().pullTokens(msg.sender, tokens); _delegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, tokens, 0); } @@ -711,8 +713,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * have been done before calling this function. */ function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) private { - require(_tokens != 0, HorizonStakingInvalidZeroTokens()); - // TODO: remove this after L2 transfer tool for delegation is removed require(_tokens >= MIN_DELEGATION, HorizonStakingInsufficientTokens(_tokens, MIN_DELEGATION)); require( diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index f62e593b1..575112e24 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -273,7 +273,7 @@ abstract contract HorizonStakingBase is address _serviceProvider, address _verifier ) internal view returns (DelegationPoolInternal storage) { - IHorizonStakingTypes.DelegationPoolInternal storage pool; + DelegationPoolInternal storage pool; if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { pool = _legacyDelegationPools[_serviceProvider]; } else { diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 38987944d..58c6401db 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -347,7 +347,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon IL2StakingTypes.ReceiveDelegationData memory _delegationData ) internal { // Get the delegation pool of the indexer - IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; + DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; IHorizonStakingTypes.DelegationInternal storage delegation = pool.delegators[_delegationData.delegator]; // If pool is in an invalid state, return the tokens to the delegator @@ -366,7 +366,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon // If no shares would be issued (probably a rounding issue or attack), // or if the amount is under the minimum delegation (which could be part of a rounding attack), // return the tokens to the delegator - _graphToken().transfer(_delegationData.delegator, _tokens); + _graphToken().pushTokens(_delegationData.delegator, _tokens); emit TransferredDelegationReturnedToDelegator(_delegationData.indexer, _delegationData.delegator, _tokens); } else { // Update the delegation pool @@ -516,7 +516,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon */ function _collectDelegationQueryRewards(address _indexer, uint256 _tokens) private returns (uint256) { uint256 delegationRewards = 0; - IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; + DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; if (pool.tokens > 0 && uint256(pool.__DEPRECATED_queryFeeCut).isValidPPM()) { uint256 indexerCut = uint256(pool.__DEPRECATED_queryFeeCut).mulPPM(_tokens); delegationRewards = _tokens - indexerCut; @@ -534,7 +534,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon */ function _collectDelegationIndexingRewards(address _indexer, uint256 _tokens) private returns (uint256) { uint256 delegationRewards = 0; - IHorizonStakingTypes.DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; + DelegationPoolInternal storage pool = _legacyDelegationPools[_indexer]; if (pool.tokens > 0 && uint256(pool.__DEPRECATED_indexingRewardCut).isValidPPM()) { uint256 indexerCut = uint256(pool.__DEPRECATED_indexingRewardCut).mulPPM(_tokens); delegationRewards = _tokens - indexerCut; diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index f234057aa..350f355db 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -112,7 +112,7 @@ contract DisputeManager is uint256 disputeDeposit, uint32 fishermanRewardCut_, uint32 maxSlashingCut_ - ) external override initializer { + ) external initializer { __Ownable_init(msg.sender); __AttestationManager_init(); diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index d9a9ca45c..ffff7af87 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.26; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; @@ -15,6 +16,7 @@ import { Directory } from "./utilities/Directory.sol"; import { AllocationManager } from "./utilities/AllocationManager.sol"; import { SubgraphServiceV1Storage } from "./SubgraphServiceStorage.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { Allocation } from "./libraries/Allocation.sol"; import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; @@ -34,6 +36,7 @@ contract SubgraphService is using PPMMath for uint256; using Allocation for mapping(address => Allocation.State); using Allocation for Allocation.State; + using TokenUtils for IGraphToken; /** * @notice Checks that an indexer is registered @@ -79,18 +82,20 @@ contract SubgraphService is } /** - * @notice See {ISubgraphService.initialize} + * @notice Initialize the contract * @dev The thawingPeriod and verifierCut ranges are not set here because they are variables * on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges. + * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation + * @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation */ - function initialize(uint256 minimumProvisionTokens, uint32 delegationRatio) external override initializer { + function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external initializer { __Ownable_init(msg.sender); __DataService_init(); __DataServicePausable_init(); __AllocationManager_init("SubgraphService", "1.0"); _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max); - _setDelegationRatio(delegationRatio); + _setDelegationRatio(maximumDelegationRatio); } /** @@ -561,7 +566,7 @@ contract SubgraphService is _graphRewardsManager().onSubgraphSignalUpdate(subgraphDeploymentId); // Send GRT and bookkeep by calling collect() - _graphToken().transfer(address(_curation()), tokensCurators); + _graphToken().pushTokens(address(_curation()), tokensCurators); _curation().collect(subgraphDeploymentId, tokensCurators); } } diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 09b13aec4..088133e05 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -170,14 +170,6 @@ interface IDisputeManager { bytes32 subgraphDeploymentId2 ); - function initialize( - address arbitrator, - uint64 disputePeriod, - uint256 disputeDeposit, - uint32 fishermanRewardCut, - uint32 maxSlashingCut - ) external; - function setDisputePeriod(uint64 disputePeriod) external; function setArbitrator(address arbitrator) external; diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 5e82c66ed..0917e55d8 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -117,13 +117,6 @@ interface ISubgraphService is IDataServiceFees { */ error SubgraphServiceAllocationIsAltruistic(address allocationId); - /** - * @notice Initialize the contract - * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation - * @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation - */ - function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external; - /** * @notice Close a stale allocation * @dev This function can be permissionlessly called when the allocation is stale. @@ -141,6 +134,7 @@ interface ISubgraphService is IDataServiceFees { function closeStaleAllocation(address allocationId) external; /** + * @notice Change the amount of tokens in an allocation * @dev Requirements: * - The indexer must be registered diff --git a/packages/subgraph-service/contracts/libraries/Attestation.sol b/packages/subgraph-service/contracts/libraries/Attestation.sol index 7926ca30a..efb76388f 100644 --- a/packages/subgraph-service/contracts/libraries/Attestation.sol +++ b/packages/subgraph-service/contracts/libraries/Attestation.sol @@ -24,7 +24,6 @@ library Attestation { } /// @notice Attestation size is the sum of the receipt (96) + signature (65) - uint256 private constant ATTESTATION_SIZE_BYTES = RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES; uint256 private constant RECEIPT_SIZE_BYTES = 96; uint256 private constant SIG_R_LENGTH = 32; @@ -34,6 +33,8 @@ library Attestation { uint256 private constant SIG_S_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH; uint256 private constant SIG_V_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH + SIG_S_LENGTH; uint256 private constant SIG_SIZE_BYTES = SIG_R_LENGTH + SIG_S_LENGTH + SIG_V_LENGTH; + + uint256 private constant ATTESTATION_SIZE_BYTES = RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES; uint256 private constant UINT8_BYTE_LENGTH = 1; uint256 private constant BYTES32_BYTE_LENGTH = 32; diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index f386c4371..60cf4630f 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -2,10 +2,13 @@ pragma solidity 0.8.26; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; +import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { GraphDirectory } from "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol"; import { AllocationManagerV1Storage } from "./AllocationManagerStorage.sol"; +import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import { EIP712Upgradeable } from "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol"; import { Allocation } from "../libraries/Allocation.sol"; @@ -25,6 +28,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca using Allocation for Allocation.State; using LegacyAllocation for mapping(address => LegacyAllocation.State); using PPMMath for uint256; + using TokenUtils for IGraphToken; ///@dev EIP712 typehash for allocation proof bytes32 private immutable EIP712_ALLOCATION_PROOF_TYPEHASH = @@ -305,7 +309,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca _graphToken().approve(address(_graphStaking()), tokensIndexerRewards); _graphStaking().stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards); } else { - _graphToken().transfer(rewardsDestination, tokensIndexerRewards); + _graphToken().pushTokens(rewardsDestination, tokensIndexerRewards); } emit IndexingRewardsCollected( From fb5956a156c394ae4d16b373d355a8ca6d750cc0 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 23 Aug 2024 12:07:27 -0300 Subject: [PATCH 186/343] fix: missing validations (OZ L-07) --- .../contracts/interfaces/IGraphPayments.sol | 8 +++- .../internal/IHorizonStakingMain.sol | 11 ++++-- .../contracts/libraries/LinkedList.sol | 6 +++ .../contracts/payments/GraphPayments.sol | 1 + .../contracts/staking/HorizonStaking.sol | 7 ++-- .../staking/HorizonStakingExtension.sol | 1 + .../horizon/test/libraries/LinkedList.t.sol | 5 +++ .../horizon/test/payments/GraphPayments.t.sol | 13 +++++++ .../HorizonStakingShared.t.sol | 2 + .../horizon/test/staking/HorizonStaking.t.sol | 4 +- .../test/staking/delegation/delegate.t.sol | 4 +- .../test/staking/delegation/undelegate.t.sol | 2 +- .../test/staking/delegation/withdraw.t.sol | 2 +- .../test/staking/governance/governance.t.sol | 10 ++--- .../serviceProvider/serviceProvider.t.sol | 39 ++++++++++++------- .../horizon/test/staking/slash/slash.t.sol | 4 +- .../test/staking/transfer-tools/ttools.t.sol | 16 +++++++- .../contracts/SubgraphService.sol | 1 + .../contracts/interfaces/ISubgraphService.sol | 5 +++ .../subgraphService/provider/register.t.sol | 16 ++++++++ 20 files changed, 120 insertions(+), 37 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index 565304844..ab89c94f8 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -39,12 +39,18 @@ interface IGraphPayments { ); /** - * @notice Emitted when there are insufficient tokens to pay the required amount + * @notice Thrown when there are insufficient tokens to pay the required amount * @param tokens The amount of tokens available * @param minTokens The amount of tokens being collected */ error GraphPaymentsInsufficientTokens(uint256 tokens, uint256 minTokens); + /** + * @notice Thrown when the protocol payment cut is invalid + * @param protocolPaymentCut The protocol payment cut + */ + error GraphPaymentsInvalidProtocolPaymentCut(uint256 protocolPaymentCut); + /** * @notice Collects funds from a payer. * It will pay cuts to all relevant parties and forward the rest to the receiver. diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index e296f88e5..52dc62339 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -427,6 +427,12 @@ interface IHorizonStakingMain { */ error HorizonStakingCallerIsServiceProvider(); + /** + * @notice Thrown when trying to set a delegation fee cut that is not valid. + * @param feeCut The fee cut + */ + error HorizonStakingInvalidDelegationFeeCut(uint256 feeCut); + // -- Functions -- /** @@ -839,11 +845,10 @@ interface IHorizonStakingMain { function setAllowedLockedVerifier(address verifier, bool allowed) external; /** - * @notice Set the global delegation slashing flag. + * @notice Set the global delegation slashing flag to true. * @dev This function can only be called by the contract governor. - * @param enabled Whether delegation slashing is enabled or disabled. */ - function setDelegationSlashingEnabled(bool enabled) external; + function setDelegationSlashingEnabled() external; /** * @notice Clear the legacy global thawing period. diff --git a/packages/horizon/contracts/libraries/LinkedList.sol b/packages/horizon/contracts/libraries/LinkedList.sol index 27a22a08f..5b15d3d86 100644 --- a/packages/horizon/contracts/libraries/LinkedList.sol +++ b/packages/horizon/contracts/libraries/LinkedList.sol @@ -53,6 +53,11 @@ library LinkedList { */ error LinkedListInvalidIterations(); + /** + * @notice Thrown when trying to add an item with id equal to bytes32(0) + */ + error LinkedListInvalidZeroId(); + /** * @notice Adds an item to the list. * The item is added to the end of the list. @@ -65,6 +70,7 @@ library LinkedList { */ function addTail(List storage self, bytes32 id) internal { require(self.count < MAX_ITEMS, LinkedListMaxElementsExceeded()); + require(id != bytes32(0), LinkedListInvalidZeroId()); self.tail = id; self.nonce += 1; if (self.count == 0) self.head = id; diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index bfffe4c61..4072c2616 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -30,6 +30,7 @@ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, I * @param protocolPaymentCut The protocol tax in PPM */ constructor(address controller, uint256 protocolPaymentCut) GraphDirectory(controller) { + require(PPMMath.isValidPPM(protocolPaymentCut), GraphPaymentsInvalidProtocolPaymentCut(protocolPaymentCut)); PROTOCOL_PAYMENT_CUT = protocolPaymentCut; _disableInitializers(); } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 9bb05bc74..e6cc98315 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -318,6 +318,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { IGraphPayments.PaymentTypes paymentType, uint256 feeCut ) external override notPaused onlyAuthorized(serviceProvider, verifier) { + require(PPMMath.isValidPPM(feeCut), HorizonStakingInvalidDelegationFeeCut(feeCut)); _delegationFeeCut[serviceProvider][verifier][paymentType] = feeCut; emit DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); } @@ -468,9 +469,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice See {IHorizonStakingMain-setDelegationSlashingEnabled}. */ - function setDelegationSlashingEnabled(bool enabled) external override onlyGovernor { - _delegationSlashingEnabled = enabled; - emit DelegationSlashingEnabled(enabled); + function setDelegationSlashingEnabled() external override onlyGovernor { + _delegationSlashingEnabled = true; + emit DelegationSlashingEnabled(_delegationSlashingEnabled); } /** diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 58c6401db..1f6843d53 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -346,6 +346,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon uint256 _tokens, IL2StakingTypes.ReceiveDelegationData memory _delegationData ) internal { + require(_provisions[_delegationData.indexer][SUBGRAPH_DATA_SERVICE_ADDRESS].createdAt != 0, "!provision"); // Get the delegation pool of the indexer DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; IHorizonStakingTypes.DelegationInternal storage delegation = pool.delegators[_delegationData.delegator]; diff --git a/packages/horizon/test/libraries/LinkedList.t.sol b/packages/horizon/test/libraries/LinkedList.t.sol index d2cf60aef..5150b6116 100644 --- a/packages/horizon/test/libraries/LinkedList.t.sol +++ b/packages/horizon/test/libraries/LinkedList.t.sol @@ -14,6 +14,11 @@ contract LinkedListTest is Test, ListImplementation { list = LinkedList.List({head: bytes32(0), tail: bytes32(0), nonce: 0, count: 0}); } + function test_Add_RevertGiven_TheItemIdIsZero() external { + vm.expectRevert(LinkedList.LinkedListInvalidZeroId.selector); + list.addTail(bytes32(0)); + } + function test_Add_GivenTheListIsEmpty() external { _assert_addItem(_buildItemId(list.nonce), 0); } diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 0a53f5e20..9d2ef7495 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; +import { GraphPayments } from "../../contracts/payments/GraphPayments.sol"; import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; @@ -13,6 +14,18 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { * TESTS */ + function testConstructor_RevertIf_InvalidProtocolPaymentCut(uint256 protocolPaymentCut) public { + protocolPaymentCut = bound(protocolPaymentCut, MAX_PPM + 1, MAX_PPM + 100); + + resetPrank(users.deployer); + bytes memory expectedError = abi.encodeWithSelector( + IGraphPayments.GraphPaymentsInvalidProtocolPaymentCut.selector, + protocolPaymentCut + ); + vm.expectRevert(expectedError); + new GraphPayments(address(controller), protocolPaymentCut); + } + function testCollect( uint256 amount, uint256 tokensDataService diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 9a30f53cc..faf7b8039 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -77,5 +77,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { function _setDelegationFeeCut(IGraphPayments.PaymentTypes paymentType, uint256 cut) internal { staking.setDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType, cut); + uint256 delegationFeeCut = staking.getDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType); + assertEq(delegationFeeCut, cut); } } diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index 75d23948d..1973f8581 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -80,11 +80,11 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { _; } - modifier useDelegationSlashing(bool enabled) { + modifier useDelegationSlashing() { address msgSender; (, msgSender, ) = vm.readCallers(); resetPrank(users.governor); - staking.setDelegationSlashingEnabled(enabled); + staking.setDelegationSlashingEnabled(); resetPrank(msgSender); _; } diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 79443f96c..87416daf5 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -87,7 +87,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { function testDelegate_RevertWhen_InvalidPool( uint256 tokens, uint256 delegationTokens - ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing(true) { + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); @@ -108,7 +108,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { function testDelegate_RevertWhen_ThawingShares_InvalidPool( uint256 tokens, uint256 delegationTokens - ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing(true) { + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 54e16d084..d256d8502 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -116,7 +116,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { function testUndelegate_RevertWhen_InvalidPool( uint256 tokens, uint256 delegationTokens - ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing(true) { + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index dc7785ed4..7eb6db57e 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -180,7 +180,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { function testWithdrawDelegation_RevertWhen_InvalidPool( uint256 tokens, uint256 delegationTokens - ) public useIndexer useProvision(tokens, 0, MAX_THAWING_PERIOD) useDelegationSlashing(true) { + ) public useIndexer useProvision(tokens, 0, MAX_THAWING_PERIOD) useDelegationSlashing() { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); diff --git a/packages/horizon/test/staking/governance/governance.t.sol b/packages/horizon/test/staking/governance/governance.t.sol index 71cd1bb49..932e053c4 100644 --- a/packages/horizon/test/staking/governance/governance.t.sol +++ b/packages/horizon/test/staking/governance/governance.t.sol @@ -31,15 +31,15 @@ contract HorizonStakingGovernanceTest is HorizonStakingTest { staking.setAllowedLockedVerifier(subgraphDataServiceAddress, true); } - function testGovernance_SetDelgationSlashing(bool enabled) public useGovernor { - staking.setDelegationSlashingEnabled(enabled); - assertEq(staking.isDelegationSlashingEnabled(), enabled); + function testGovernance_SetDelgationSlashingEnabled() public useGovernor { + staking.setDelegationSlashingEnabled(); + assertTrue(staking.isDelegationSlashingEnabled()); } - function testGovernance_SetDelgationSlashing_NotGovernor(bool enabled) public useIndexer { + function testGovernance_SetDelgationSlashing_NotGovernor() public useIndexer { bytes memory expectedError = abi.encodeWithSignature("ManagedOnlyGovernor()"); vm.expectRevert(expectedError); - staking.setDelegationSlashingEnabled(enabled); + staking.setDelegationSlashingEnabled(); } function testGovernance_ClearThawingPeriod(uint32 thawingPeriod) public useGovernor { diff --git a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol index 5461698e3..2d32fa9e2 100644 --- a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol +++ b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol @@ -3,9 +3,11 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { HorizonStakingTest } from "../HorizonStaking.t.sol"; +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol"; +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + contract HorizonStakingServiceProviderTest is HorizonStakingTest { /* @@ -31,21 +33,14 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { assertEq(sp.tokensProvisioned, amount); } - function testServiceProvider_GetDelegationFeeCut( - uint256 queryCut, - uint256 indexingCut, - uint256 rewardsCut + function testServiceProvider_SetDelegationFeeCut( + uint256 feeCut, + uint8 paymentTypeInput ) public useIndexer { - _setDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, queryCut); - _setDelegationFeeCut(IGraphPayments.PaymentTypes.IndexingFee, indexingCut); - _setDelegationFeeCut(IGraphPayments.PaymentTypes.IndexingRewards, rewardsCut); - - uint256 queryFeeCut = staking.getDelegationFeeCut(users.indexer, subgraphDataServiceAddress, IGraphPayments.PaymentTypes.QueryFee); - uint256 indexingFeeCut = staking.getDelegationFeeCut(users.indexer, subgraphDataServiceAddress, IGraphPayments.PaymentTypes.IndexingFee); - uint256 indexingRewardsCut = staking.getDelegationFeeCut(users.indexer, subgraphDataServiceAddress, IGraphPayments.PaymentTypes.IndexingRewards); - assertEq(queryFeeCut, queryCut); - assertEq(indexingFeeCut, indexingCut); - assertEq(indexingRewardsCut, rewardsCut); + vm.assume(paymentTypeInput < 3); + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes(paymentTypeInput); + feeCut = bound(feeCut, 0, MAX_PPM); + _setDelegationFeeCut(paymentType, feeCut); } function testServiceProvider_GetProvision( @@ -136,4 +131,18 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { staking.unstake(amount); assertEq(staking.getIndexerStakedTokens(users.indexer), 0); } + + function testServiceProvider_RevertIf_InvalidDelegationFeeCut( + uint256 cut, + uint8 paymentTypeInput + ) public useIndexer { + vm.assume(paymentTypeInput < 3); + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes(paymentTypeInput); + cut = bound(cut, MAX_PPM + 1, MAX_PPM + 100); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationFeeCut.selector, + cut + )); + staking.setDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType, cut); + } } \ No newline at end of file diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index b535295fa..b68794604 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -61,7 +61,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 slashTokens, uint256 verifierCutAmount, uint256 delegationTokens - ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(false) { + ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) { vm.assume(slashTokens > tokens); delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); @@ -80,7 +80,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 slashTokens, uint256 verifierCutAmount, uint256 delegationTokens - ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing(true) { + ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing() { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); slashTokens = bound(slashTokens, tokens + 1, tokens + delegationTokens); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); diff --git a/packages/horizon/test/staking/transfer-tools/ttools.t.sol b/packages/horizon/test/staking/transfer-tools/ttools.t.sol index 28bc11264..c41731e10 100644 --- a/packages/horizon/test/staking/transfer-tools/ttools.t.sol +++ b/packages/horizon/test/staking/transfer-tools/ttools.t.sol @@ -44,6 +44,18 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { staking.onTokenTransfer(counterpartStaking, 0, data); } + function testOnTransfer_RevertWhen_ProvisionNotFound(uint256 amount) public { + amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); + + resetPrank(graphTokenGatewayAddress); + bytes memory data = abi.encode( + uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), + abi.encode(users.indexer, users.delegator) + ); + vm.expectRevert(bytes("!provision")); + staking.onTokenTransfer(counterpartStaking, amount, data); + } + function testOnTransfer_ReceiveDelegation_RevertWhen_InvalidData() public { resetPrank(graphTokenGatewayAddress); @@ -101,7 +113,7 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { _onTokenTransfer_ReceiveDelegation(counterpartStaking, amount, data); } - function testOnTransfer_ReceiveDelegation_WhenInvalidPool(uint256 amount) public useDelegationSlashing(true) { + function testOnTransfer_ReceiveDelegation_WhenInvalidPool(uint256 amount) public useDelegationSlashing() { amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); uint256 originalDelegationAmount = 10 ether; uint256 provisionSize = 100 ether; @@ -196,7 +208,7 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { vm.expectEmit(); emit IHorizonStakingExtension.StakeDelegated(serviceProvider, delegator, tokens, calcShares); } - staking.onTokenTransfer(counterpartStaking, tokens, data); + staking.onTokenTransfer(from, tokens, data); // after DelegationPool memory afterPool = staking.getDelegationPool(serviceProvider, subgraphDataServiceLegacyAddress); diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index ffff7af87..fb4612964 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -126,6 +126,7 @@ contract SubgraphService is ); require(bytes(url).length > 0, SubgraphServiceEmptyUrl()); + require(bytes(geohash).length > 0, SubgraphServiceEmptyGeohash()); require(indexers[indexer].registeredAt == 0, SubgraphServiceIndexerAlreadyRegistered()); // Register the indexer diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 0917e55d8..7cb528775 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -57,6 +57,11 @@ interface ISubgraphService is IDataServiceFees { */ error SubgraphServiceEmptyUrl(); + /** + * @notice Thrown when an indexer tries to register with an empty geohash + */ + error SubgraphServiceEmptyGeohash(); + /** * @notice Thrown when an indexer tries to register but they are already registered */ diff --git a/packages/subgraph-service/test/subgraphService/provider/register.t.sol b/packages/subgraph-service/test/subgraphService/provider/register.t.sol index 2605d9e00..e42e152f7 100644 --- a/packages/subgraph-service/test/subgraphService/provider/register.t.sol +++ b/packages/subgraph-service/test/subgraphService/provider/register.t.sol @@ -72,4 +72,20 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { )); _registerIndexer(address(0)); } + + function testRegister_RevertIf_EmptyUrl(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + _createProvision(tokens); + bytes memory data = abi.encode("", "geoHash", users.rewardsDestination); + vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceEmptyUrl.selector)); + subgraphService.register(users.indexer, data); + } + + function testRegister_RevertIf_EmptyGeohash(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + _createProvision(tokens); + bytes memory data = abi.encode("url", "", users.rewardsDestination); + vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceEmptyGeohash.selector)); + subgraphService.register(users.indexer, data); + } } From 2a131ca23da6f8b731c2d260b1e3e931cadc9f12 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 23 Aug 2024 14:03:47 -0300 Subject: [PATCH 187/343] fix: missing or incorrect documentation (OZ L-08) --- .../contracts/interfaces/internal/IHorizonStakingMain.sol | 8 ++++---- .../interfaces/internal/IHorizonStakingTypes.sol | 4 ++-- packages/horizon/contracts/libraries/PPMMath.sol | 4 +++- .../subgraph-service/contracts/libraries/Allocation.sol | 2 +- .../subgraph-service/contracts/libraries/Attestation.sol | 3 +++ 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 52dc62339..bbbfa07b6 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -514,9 +514,10 @@ interface IHorizonStakingMain { * This function can be called by the service provider or by an operator authorized by the provider * for this specific verifier. * @dev Requirements: - * - `tokens` cannot be zero and must be over the data service minimum required. - * - Provision parameters must be within the range allowed by the verifier (`maxVerifierCut` and `thawingPeriod`) + * - `tokens` cannot be zero. * - The `serviceProvider` must have enough idle stake to cover the tokens to provision. + * - `maxVerifierCut` must be less than or equal to `MAX_MAX_VERIFIER_CUT`. + * - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. * * Emits a {ProvisionCreated} event. * @@ -688,7 +689,6 @@ interface IHorizonStakingMain { * - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. * * Requirements: - * - Must have previously initiated a thaw request using {undelegate}. * - `shares` cannot be zero. * * Emits a {TokensUndelegated} and {ThawRequestCreated} event. @@ -822,7 +822,7 @@ interface IHorizonStakingMain { ) external; /** - * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. + * @notice Authorize or unauthorize an address to be an operator for the caller on a verifier. * * @dev See {setOperator}. * Additional requirements: diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index c0d6892b3..5c2f3f5e7 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -85,9 +85,9 @@ interface IHorizonStakingTypes { struct DelegationPoolInternal { // (Deprecated) Time, in blocks, an indexer must wait before updating delegation parameters uint32 __DEPRECATED_cooldownBlocks; - // (Deprecated) Percentage of indexing rewards for the delegation pool, in PPM + // (Deprecated) Percentage of indexing rewards for the service provider, in PPM uint32 __DEPRECATED_indexingRewardCut; - // (Deprecated) Percentage of query fees for the delegation pool, in PPM + // (Deprecated) Percentage of query fees for the service provider, in PPM uint32 __DEPRECATED_queryFeeCut; // (Deprecated) Block when the delegation parameters were last updated uint256 __DEPRECATED_updatedAtBlock; diff --git a/packages/horizon/contracts/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol index 1496be4d8..e992e8831 100644 --- a/packages/horizon/contracts/libraries/PPMMath.sol +++ b/packages/horizon/contracts/libraries/PPMMath.sol @@ -34,7 +34,9 @@ library PPMMath { } /** - * @notice Multiplies two values, one of which must be in PPM, and rounds up the result. + * @notice Multiplies two values, the second one must be in PPM, and rounds up the result. + * @dev requirements: + * - The second value must be in PPM. * @param a The first value. * @param b The second value. */ diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index d8f08d6d6..e039b75bd 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -193,7 +193,7 @@ library Allocation { } /** - * @notice Checks if an allocation is closed + * @notice Checks if an allocation is alturistic * @param self The allocation */ function isAltruistic(State memory self) internal pure returns (bool) { diff --git a/packages/subgraph-service/contracts/libraries/Attestation.sol b/packages/subgraph-service/contracts/libraries/Attestation.sol index efb76388f..587fadca7 100644 --- a/packages/subgraph-service/contracts/libraries/Attestation.sol +++ b/packages/subgraph-service/contracts/libraries/Attestation.sol @@ -96,6 +96,9 @@ library Attestation { // solhint-disable-next-line no-inline-assembly assembly { + // Load the 32-byte word from memory starting at `_bytes + _start + 1` + // The `0x1` accounts for the fact that we want only the first byte (uint8) + // of the loaded 32 bytes. tempUint := mload(add(add(_bytes, 0x1), _start)) } From 74368716a0da44d7adfa8188e07499953904292c Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 23 Aug 2024 15:48:51 -0300 Subject: [PATCH 188/343] fix: gas inefficiencies (OZ L-09) --- .../contracts/governance/Pausable.sol | 2 +- .../contracts/interfaces/IPaymentsEscrow.sol | 13 +--- .../contracts/libraries/LinkedList.sol | 13 ++-- .../horizon/contracts/libraries/PPMMath.sol | 2 +- .../contracts/payments/PaymentsEscrow.sol | 4 +- .../contracts/staking/HorizonStakingBase.sol | 6 +- packages/horizon/test/escrow/collect.t.sol | 11 +++- packages/horizon/test/escrow/collector.t.sol | 64 ++++++++++++------- packages/horizon/test/escrow/thaw.t.sol | 7 +- .../contracts/DisputeManager.sol | 20 +++--- .../contracts/SubgraphService.sol | 17 ----- 11 files changed, 79 insertions(+), 80 deletions(-) diff --git a/packages/contracts/contracts/governance/Pausable.sol b/packages/contracts/contracts/governance/Pausable.sol index 8564b9c09..260d658af 100644 --- a/packages/contracts/contracts/governance/Pausable.sol +++ b/packages/contracts/contracts/governance/Pausable.sol @@ -66,6 +66,6 @@ abstract contract Pausable { function _setPauseGuardian(address newPauseGuardian) internal { address oldPauseGuardian = pauseGuardian; pauseGuardian = newPauseGuardian; - emit NewPauseGuardian(oldPauseGuardian, pauseGuardian); + emit NewPauseGuardian(oldPauseGuardian, newPauseGuardian); } } diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 23d0b496c..7ab5ff023 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -28,8 +28,6 @@ interface IPaymentsEscrow { /// @notice Details for a payer-collector pair /// @dev Collectors can be removed only after a thawing period struct Collector { - // Whether the collector is authorized to collect funds - bool authorized; // Amount of tokens the collector is allowed to collect uint256 allowance; // Timestamp at which the collector thawing period ends (zero if not thawing) @@ -83,15 +81,13 @@ interface IPaymentsEscrow { * @notice Emitted when a payer thaws funds from the escrow for a payer-receiver pair * @param payer The address of the payer * @param receiver The address of the receiver - * @param tokens The amount of tokens thawed - * @param totalTokensThawing The total amount of tokens being thawed + * @param tokens The amount of tokens being thawed * @param thawEndTimestamp The timestamp at which the thawing period ends */ event Thaw( address indexed payer, address indexed receiver, uint256 tokens, - uint256 totalTokensThawing, uint256 thawEndTimestamp ); @@ -144,13 +140,6 @@ interface IPaymentsEscrow { */ error PaymentsEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); - /** - * @notice Thrown when a collector is not authorized to collect funds - * @param payer The address of the payer - * @param collector The amount of tokens the collector is allowed to collect - */ - error PaymentsEscrowCollectorNotAuthorized(address payer, address collector); - /** * @notice Thrown when a collector has insufficient allowance to collect funds * @param allowance The current allowance diff --git a/packages/horizon/contracts/libraries/LinkedList.sol b/packages/horizon/contracts/libraries/LinkedList.sol index 5b15d3d86..13607e257 100644 --- a/packages/horizon/contracts/libraries/LinkedList.sol +++ b/packages/horizon/contracts/libraries/LinkedList.sol @@ -127,23 +127,22 @@ library LinkedList { require(iterations <= self.count, LinkedListInvalidIterations()); uint256 itemCount = 0; - bool traverseAll = iterations == 0; - bytes memory acc = processInitAcc; + iterations = (iterations == 0) ? self.count : iterations; bytes32 cursor = self.head; - while (cursor != bytes32(0) && (traverseAll || iterations > 0)) { - (bool shouldBreak, bytes memory acc_) = processItem(cursor, acc); + while (cursor != bytes32(0) && iterations > 0) { + (bool shouldBreak, bytes memory acc_) = processItem(cursor, processInitAcc); if (shouldBreak) break; - acc = acc_; + processInitAcc = acc_; cursor = self.removeHead(getNextItem, deleteItem); - if (!traverseAll) iterations--; + iterations--; itemCount++; } - return (itemCount, acc); + return (itemCount, processInitAcc); } } diff --git a/packages/horizon/contracts/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol index e992e8831..b02230628 100644 --- a/packages/horizon/contracts/libraries/PPMMath.sol +++ b/packages/horizon/contracts/libraries/PPMMath.sol @@ -51,6 +51,6 @@ library PPMMath { * @param value The value to check. */ function isValidPPM(uint256 value) internal pure returns (bool) { - return value >= 0 && value <= MAX_PPM; + return value <= MAX_PPM; } } diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 9131188bd..5045be86d 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -87,7 +87,6 @@ contract PaymentsEscrow is function approveCollector(address collector_, uint256 allowance) external override notPaused { require(allowance != 0, PaymentsEscrowInvalidZeroTokens()); Collector storage collector = authorizedCollectors[msg.sender][collector_]; - collector.authorized = true; collector.allowance += allowance; emit AuthorizedCollector(msg.sender, collector_); } @@ -164,7 +163,7 @@ contract PaymentsEscrow is account.tokensThawing = tokens; account.thawEndTimestamp = block.timestamp + WITHDRAW_ESCROW_THAWING_PERIOD; - emit Thaw(msg.sender, receiver, tokens, account.tokensThawing, account.thawEndTimestamp); + emit Thaw(msg.sender, receiver, tokens, account.thawEndTimestamp); } /** @@ -201,7 +200,6 @@ contract PaymentsEscrow is ) external override notPaused { // Check if collector is authorized and has enough funds Collector storage collector = authorizedCollectors[payer][msg.sender]; - require(collector.authorized, PaymentsEscrowCollectorNotAuthorized(payer, msg.sender)); require(collector.allowance >= tokens, PaymentsEscrowInsufficientAllowance(collector.allowance, tokens)); // Check if there are enough funds in the escrow account diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 575112e24..722a2f061 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -273,13 +273,11 @@ abstract contract HorizonStakingBase is address _serviceProvider, address _verifier ) internal view returns (DelegationPoolInternal storage) { - DelegationPoolInternal storage pool; if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { - pool = _legacyDelegationPools[_serviceProvider]; + return _legacyDelegationPools[_serviceProvider]; } else { - pool = _delegationPools[_serviceProvider][_verifier]; + return _delegationPools[_serviceProvider][_verifier]; } - return pool; } /** diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index baa1de06e..1ba403a23 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -3,8 +3,10 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { GraphEscrowTest } from "./GraphEscrow.t.sol"; import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; +import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; + +import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowCollectTest is GraphEscrowTest { @@ -35,9 +37,14 @@ contract GraphEscrowCollectTest is GraphEscrowTest { } function testCollect_RevertWhen_CollectorNotAuthorized(uint256 amount) public { + vm.assume(amount > 0); vm.startPrank(users.verifier); uint256 dataServiceCut = 30000; // 3% - bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowCollectorNotAuthorized(address,address)", users.gateway, users.verifier); + bytes memory expectedError = abi.encodeWithSelector( + IPaymentsEscrow.PaymentsEscrowInsufficientAllowance.selector, + 0, + amount + ); vm.expectRevert(expectedError); escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, dataServiceCut); vm.stopPrank(); diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index 2df4711fe..5023c38ce 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -14,16 +14,48 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { */ function _approveCollector(uint256 tokens) internal { - (, uint256 beforeAllowance,) = escrow.authorizedCollectors(users.gateway, users.verifier); + (uint256 beforeAllowance,) = escrow.authorizedCollectors(users.gateway, users.verifier); vm.expectEmit(address(escrow)); emit IPaymentsEscrow.AuthorizedCollector(users.gateway, users.verifier); escrow.approveCollector(users.verifier, tokens); - (bool authorized, uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, true); + (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); assertEq(allowance - beforeAllowance, tokens); assertEq(thawEndTimestamp, 0); } + function _thawCollector() internal { + (uint256 beforeAllowance,) = escrow.authorizedCollectors(users.gateway, users.verifier); + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.ThawCollector(users.gateway, users.verifier); + escrow.thawCollector(users.verifier); + + (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); + assertEq(allowance, beforeAllowance); + assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); + } + + function _cancelThawCollector() internal { + (uint256 beforeAllowance, uint256 beforeThawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); + assertTrue(beforeThawEndTimestamp != 0, "Collector should be thawing"); + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.CancelThawCollector(users.gateway, users.verifier); + escrow.cancelThawCollector(users.verifier); + + (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); + assertEq(allowance, beforeAllowance); + assertEq(thawEndTimestamp, 0); + } + + function _revokeCollector() internal { + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.RevokeCollector(users.gateway, users.verifier); + escrow.revokeCollector(users.verifier); + + (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); + assertEq(allowance, 0); + assertEq(thawEndTimestamp, 0); + } + /* * TESTS */ @@ -50,25 +82,12 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { } function testCollector_Thaw(uint256 amount) public useGateway useCollector(amount) { - escrow.thawCollector(users.verifier); - - (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, true); - assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); + _thawCollector(); } function testCollector_CancelThaw(uint256 amount) public useGateway useCollector(amount) { - escrow.thawCollector(users.verifier); - - (bool authorized,, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, true); - assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); - - escrow.cancelThawCollector(users.verifier); - - (authorized,, thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, true); - assertEq(thawEndTimestamp, 0); + _thawCollector(); + _cancelThawCollector(); } function testCollector_RevertWhen_CancelThawIsNotThawing(uint256 amount) public useGateway useCollector(amount) { @@ -79,12 +98,9 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { } function testCollector_Revoke(uint256 amount) public useGateway useCollector(amount) { - escrow.thawCollector(users.verifier); + _thawCollector(); skip(revokeCollectorThawingPeriod + 1); - escrow.revokeCollector(users.verifier); - - (bool authorized,,) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(authorized, false); + _revokeCollector(); } function testCollector_RevertWhen_RevokeIsNotThawing(uint256 amount) public useGateway useCollector(amount) { diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index 60bf343e0..35f501ff3 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -3,6 +3,8 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; +import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; + import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowThawTest is GraphEscrowTest { @@ -12,11 +14,14 @@ contract GraphEscrowThawTest is GraphEscrowTest { */ function testThaw_Tokens(uint256 amount) public useGateway useDeposit(amount) { + uint256 expectedThawEndTimestamp = block.timestamp + withdrawEscrowThawingPeriod; + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.Thaw(users.gateway, users.indexer, amount, expectedThawEndTimestamp); escrow.thaw(users.indexer, amount); (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.indexer); assertEq(amountThawing, amount); - assertEq(thawEndTimestamp, block.timestamp + withdrawEscrowThawingPeriod); + assertEq(thawEndTimestamp, expectedThawEndTimestamp); } function testThaw_RevertWhen_InsufficientThawAmount( diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 350f355db..4a40b3590 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -260,8 +260,10 @@ contract DisputeManager is function drawDispute(bytes32 disputeId) external override onlyArbitrator onlyPendingDispute(disputeId) { Dispute storage dispute = disputes[disputeId]; - // Return deposit to the fisherman - _graphToken().pushTokens(dispute.fisherman, dispute.deposit); + // Return deposit to the fisherman if any + if (dispute.deposit > 0) { + _graphToken().pushTokens(dispute.fisherman, dispute.deposit); + } // resolve related dispute if any _drawDisputeInConflict(dispute); @@ -284,8 +286,10 @@ contract DisputeManager is // Check if dispute period has finished require(dispute.createdAt + disputePeriod < block.timestamp, DisputeManagerDisputePeriodNotFinished()); - // Return deposit to the fisherman - _graphToken().pushTokens(dispute.fisherman, dispute.deposit); + // Return deposit to the fisherman if any + if (dispute.deposit > 0) { + _graphToken().pushTokens(dispute.fisherman, dispute.deposit); + } // resolve related dispute if any _cancelDisputeInConflict(dispute); @@ -633,7 +637,7 @@ contract DisputeManager is function _setArbitrator(address _arbitrator) private { require(_arbitrator != address(0), DisputeManagerInvalidZeroAddress()); arbitrator = _arbitrator; - emit ArbitratorSet(arbitrator); + emit ArbitratorSet(_arbitrator); } /** @@ -644,7 +648,7 @@ contract DisputeManager is function _setDisputePeriod(uint64 _disputePeriod) private { require(_disputePeriod != 0, DisputeManagerDisputePeriodZero()); disputePeriod = _disputePeriod; - emit DisputePeriodSet(disputePeriod); + emit DisputePeriodSet(_disputePeriod); } /** @@ -655,7 +659,7 @@ contract DisputeManager is function _setDisputeDeposit(uint256 _disputeDeposit) private { require(_disputeDeposit != 0, DisputeManagerInvalidDisputeDeposit(_disputeDeposit)); disputeDeposit = _disputeDeposit; - emit DisputeDepositSet(disputeDeposit); + emit DisputeDepositSet(_disputeDeposit); } /** @@ -666,7 +670,7 @@ contract DisputeManager is function _setFishermanRewardCut(uint32 _fishermanRewardCut) private { require(_fishermanRewardCut <= MAX_FISHERMAN_REWARD_CUT, DisputeManagerInvalidFishermanReward(_fishermanRewardCut)); fishermanRewardCut = _fishermanRewardCut; - emit FishermanRewardCutSet(fishermanRewardCut); + emit FishermanRewardCutSet(_fishermanRewardCut); } /** diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index fb4612964..c06476ec3 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -47,23 +47,6 @@ contract SubgraphService is _; } - /** - * @notice Checks that a provision is valid - * @dev A valid provision is defined as one that: - * - has at least the minimum amount of tokens requiered by the subgraph service - * - has a thawing period at least equal to {DisputeManager.disputePeriod} - * - has a verifier cut at most equal to {DisputeManager.verifierCut} - * - * Note that no delegation ratio is enforced here. - * - * @param indexer The address of the indexer - */ - modifier onlyValidProvision(address indexer) override { - _checkProvisionTokens(indexer); - _checkProvisionParameters(indexer, false); - _; - } - /** * @notice Constructor for the SubgraphService contract * @dev DataService and Directory constructors set a bunch of immutable variables From aa04aa8fb711fe85a37d994f0c2ce1132d483ffd Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 23 Aug 2024 16:22:53 -0300 Subject: [PATCH 189/343] fix: allow slashing even if SubgraphService is paused (OZ CR-01) --- packages/subgraph-service/contracts/SubgraphService.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index c06476ec3..c9741d7e2 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -290,7 +290,7 @@ contract SubgraphService is * - uint256 `tokens`: The amount of tokens to slash * - uint256 `reward`: The amount of tokens to reward the slasher */ - function slash(address indexer, bytes calldata data) external override onlyDisputeManager whenNotPaused { + function slash(address indexer, bytes calldata data) external override onlyDisputeManager { (uint256 tokens, uint256 reward) = abi.decode(data, (uint256, uint256)); _graphStaking().slash(indexer, tokens, reward, address(_disputeManager())); emit ServiceProviderSlashed(indexer, tokens); From 5f74009d827402e65589c8040b2039b745926c8e Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 23 Aug 2024 18:26:14 -0300 Subject: [PATCH 190/343] WIP --- .../libraries/ProvisionTracker.sol | 17 ++++++ .../contracts/SubgraphService.sol | 2 +- .../contracts/utilities/AllocationManager.sol | 60 +++++++++---------- 3 files changed, 46 insertions(+), 33 deletions(-) diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol index a95f634f8..08ac970bb 100644 --- a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol @@ -42,6 +42,23 @@ library ProvisionTracker { self[serviceProvider] += tokens; } + /** + * @notice Checks if a service provider has enough tokens available to lock + * @param self The provision tracker mapping + * @param graphStaking The HorizonStaking contract + * @param serviceProvider The service provider address + * @param delegationRatio A delegation ratio to limit the amount of delegation that's usable + */ + function check( + mapping(address => uint256) storage self, + IHorizonStaking graphStaking, + address serviceProvider, + uint32 delegationRatio + ) internal view returns (bool) { + uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio); + return self[serviceProvider] <= tokensAvailable; + } + /** * @notice Releases tokens for a service provider * @dev Requirements: diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index c9741d7e2..51cb889f7 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -267,7 +267,7 @@ contract SubgraphService is allocations.get(allocationId).indexer == indexer, SubgraphServiceAllocationNotAuthorized(indexer, allocationId) ); - paymentCollected = _collectIndexingRewards(allocationId, poi); + paymentCollected = _collectIndexingRewards(allocationId, poi, delegationRatio); } else { revert SubgraphServiceInvalidPaymentType(paymentType); } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 60cf4630f..bacf67e2a 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -256,7 +256,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * @param _allocationId The id of the allocation to collect rewards for * @param _poi The POI being presented */ - function _collectIndexingRewards(address _allocationId, bytes32 _poi) internal returns (uint256) { + function _collectIndexingRewards(address _allocationId, bytes32 _poi, uint32 _delegationRatio) internal returns (uint256) { Allocation.State memory allocation = allocations.get(_allocationId); require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId)); @@ -277,39 +277,30 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca // Any pending rewards should have been collected now allocations.clearPendingRewards(_allocationId); - if (tokensRewards == 0) { - emit IndexingRewardsCollected( + uint256 tokensIndexerRewards = 0; + uint256 tokensDelegationRewards = 0; + if (tokensRewards != 0) { + // Distribute rewards to delegators + uint256 delegatorCut = _graphStaking().getDelegationFeeCut( allocation.indexer, - _allocationId, - allocation.subgraphDeploymentId, - 0, - 0, - 0, - _poi + address(this), + IGraphPayments.PaymentTypes.IndexingFee ); - return tokensRewards; - } - - // Distribute rewards to delegators - uint256 delegatorCut = _graphStaking().getDelegationFeeCut( - allocation.indexer, - address(this), - IGraphPayments.PaymentTypes.IndexingFee - ); - uint256 tokensDelegationRewards = tokensRewards.mulPPM(delegatorCut); - if (tokensDelegationRewards > 0) { - _graphToken().approve(address(_graphStaking()), tokensDelegationRewards); - _graphStaking().addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards); - } - - // Distribute rewards to indexer - uint256 tokensIndexerRewards = tokensRewards - tokensDelegationRewards; - address rewardsDestination = rewardsDestination[allocation.indexer]; - if (rewardsDestination == address(0)) { - _graphToken().approve(address(_graphStaking()), tokensIndexerRewards); - _graphStaking().stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards); - } else { - _graphToken().pushTokens(rewardsDestination, tokensIndexerRewards); + tokensDelegationRewards = tokensRewards.mulPPM(delegatorCut); + if (tokensDelegationRewards > 0) { + _graphToken().approve(address(_graphStaking()), tokensDelegationRewards); + _graphStaking().addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards); + } + + // Distribute rewards to indexer + tokensIndexerRewards = tokensRewards - tokensDelegationRewards; + address rewardsDestination = rewardsDestination[allocation.indexer]; + if (rewardsDestination == address(0)) { + _graphToken().approve(address(_graphStaking()), tokensIndexerRewards); + _graphStaking().stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards); + } else { + _graphToken().pushTokens(rewardsDestination, tokensIndexerRewards); + } } emit IndexingRewardsCollected( @@ -322,6 +313,11 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca _poi ); + // Check if the allocation is over-allocated and close it if necessary + if (!allocationProvisionTracker.check(_graphStaking(), allocation.indexer, _delegationRatio)) { + _closeAllocation(_allocationId); + } + return tokensRewards; } From 1088e2298c5036f77e61dc73c65e543864a15e18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 23 Aug 2024 18:42:24 -0300 Subject: [PATCH 191/343] fix: close allocation when collecting rewards if over allocated (OZ CR-02) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/utilities/AllocationManager.sol | 8 +++++-- .../subgraphService/collect/collect.t.sol | 23 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index bacf67e2a..289faa9a8 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -256,7 +256,11 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * @param _allocationId The id of the allocation to collect rewards for * @param _poi The POI being presented */ - function _collectIndexingRewards(address _allocationId, bytes32 _poi, uint32 _delegationRatio) internal returns (uint256) { + function _collectIndexingRewards( + address _allocationId, + bytes32 _poi, + uint32 _delegationRatio + ) internal returns (uint256) { Allocation.State memory allocation = allocations.get(_allocationId); require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId)); @@ -313,7 +317,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca _poi ); - // Check if the allocation is over-allocated and close it if necessary + // Check if the indexer is over-allocated and close the allocation if necessary if (!allocationProvisionTracker.check(_graphStaking(), allocation.indexer, _delegationRatio)) { _closeAllocation(_allocationId); } diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index 07294b25a..a04b248a3 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -9,6 +9,7 @@ import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPC import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { Allocation } from "../../../contracts/libraries/Allocation.sol"; import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; @@ -16,6 +17,7 @@ import { SubgraphServiceTest } from "../SubgraphService.t.sol"; contract SubgraphServiceRegisterTest is SubgraphServiceTest { using PPMMath for uint128; using PPMMath for uint256; + using Allocation for Allocation.State; address signer; uint256 signerPrivateKey; @@ -130,6 +132,27 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { function testCollect_IndexingRewards(uint256 tokens) public useIndexer useAllocation(tokens) { _collectIndexingRewards(users.indexer, allocationID, tokens); + + Allocation.State memory afterAllocation = subgraphService.getAllocation(allocationID); + assertEq(afterAllocation.isOpen(), true); + } + + function testCollect_IndexingRewards_When_OverAllocated(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens * 2, 10_000_000_000 ether); + + // setup allocation + _createProvision(tokens); + _registerIndexer(address(0)); + _startService(tokens); + + // thaw some tokens to become over allocated + staking.thaw(users.indexer, address(subgraphService), tokens / 2); + + // this collection should close the allocation + _collectIndexingRewards(users.indexer, allocationID, tokens); + + Allocation.State memory afterAllocation = subgraphService.getAllocation(allocationID); + assertEq(afterAllocation.isOpen(), false); } function testCollect_RevertWhen_InvalidPayment(uint256 tokens) public useIndexer useAllocation(tokens) { From b71eca01198b2ec4bf4eb13e913492e0d06a0a52 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 27 Aug 2024 12:30:43 -0300 Subject: [PATCH 192/343] fix: remove old address from event (OZ C-01) --- packages/contracts/contracts/l2/curation/L2Curation.sol | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/contracts/contracts/l2/curation/L2Curation.sol b/packages/contracts/contracts/l2/curation/L2Curation.sol index efc690bb0..3f8728d0a 100644 --- a/packages/contracts/contracts/l2/curation/L2Curation.sol +++ b/packages/contracts/contracts/l2/curation/L2Curation.sol @@ -70,7 +70,7 @@ contract L2Curation is CurationV3Storage, GraphUpgradeable, IL2Curation { /** * @dev Emitted when the subgraph service is set. */ - event SubgraphServiceSet(address indexed oldSubgraphService, address indexed newSubgraphService); + event SubgraphServiceSet(address indexed newSubgraphService); /** * @dev Modifier for functions that can only be called by the GNS contract @@ -141,9 +141,8 @@ contract L2Curation is CurationV3Storage, GraphUpgradeable, IL2Curation { * @param _subgraphService Address of the subgraph service contract */ function setSubgraphService(address _subgraphService) external override onlyGovernor { - address oldSubgraphService = subgraphService; subgraphService = _subgraphService; - emit SubgraphServiceSet(oldSubgraphService, _subgraphService); + emit SubgraphServiceSet(_subgraphService); } /** From 157bfc6cb1ad438b75151c5ab9378972bf90a7a9 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 27 Aug 2024 12:31:31 -0300 Subject: [PATCH 193/343] fix: updated variable description (OZ H-01) --- packages/contracts/contracts/rewards/IRewardsIssuer.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts/contracts/rewards/IRewardsIssuer.sol b/packages/contracts/contracts/rewards/IRewardsIssuer.sol index a5400a6cf..4bcfa6ea0 100644 --- a/packages/contracts/contracts/rewards/IRewardsIssuer.sol +++ b/packages/contracts/contracts/rewards/IRewardsIssuer.sol @@ -10,7 +10,7 @@ interface IRewardsIssuer { * @return subgraphDeploymentId Subgraph deployment id for the allocation * @return tokens Amount of allocated tokens * @return accRewardsPerAllocatedToken Rewards snapshot - * @return accRewardsPending Tokens pending to be claimed + * @return accRewardsPending Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed */ function getAllocationData( address allocationId From 99af0a69ce3ce43f2d25fa58adea0cc0eb62232e Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 27 Aug 2024 12:32:30 -0300 Subject: [PATCH 194/343] fix: update upper bound for verifierCutRange (OZ H-02) --- .../contracts/data-service/utilities/ProvisionManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 36c3f70b0..16f2d6f1e 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -226,7 +226,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa } (uint32 verifierCutMin, uint32 verifierCutMax) = _getVerifierCutRange(); - if (verifierCutMin != type(uint32).min || verifierCutMax != type(uint32).max) { + if (verifierCutMin != type(uint32).min || verifierCutMax != uint32(PPMMath.MAX_PPM)) { uint32 maxVerifierCutToCheck = _checkPending ? _provision.maxVerifierCutPending : _provision.maxVerifierCut; _checkValueInRange(maxVerifierCutToCheck, verifierCutMin, verifierCutMax, "maxVerifierCut"); } From e2ac05dc03fc2ebb42eaed892c7f03a8528cc147 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 27 Aug 2024 12:33:23 -0300 Subject: [PATCH 195/343] fix: typo (OZ H-04) --- .../subgraph-service/contracts/interfaces/ISubgraphService.sol | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 7cb528775..e993c5159 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -41,7 +41,7 @@ interface ISubgraphService is IDataServiceFees { event StakeToFeesRatioSet(uint256 ratio); /** - * @notice Emmited when curator cuts are set + * @notice Emitted when curator cuts are set * @param curationCut The curation cut */ event CurationCutSet(uint256 curationCut); @@ -139,7 +139,6 @@ interface ISubgraphService is IDataServiceFees { function closeStaleAllocation(address allocationId) external; /** - * @notice Change the amount of tokens in an allocation * @dev Requirements: * - The indexer must be registered From d8bce8ceaca7da496425f4bc072e6e0d9460135c Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 27 Aug 2024 12:36:38 -0300 Subject: [PATCH 196/343] fix: encode _rav.metadata as keccak256 hash (OZ H-08) --- packages/horizon/contracts/payments/collectors/TAPCollector.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 4ba835ace..e385667c7 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -121,7 +121,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { _rav.serviceProvider, _rav.timestampNs, _rav.valueAggregate, - _rav.metadata + keccak256(_rav.metadata) ) ) ); From 58ba769787d320f3432afce65021e378e7e54af3 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 27 Aug 2024 12:37:58 -0300 Subject: [PATCH 197/343] fix: remove unused import (OZ L-06) --- .../subgraph-service/contracts/utilities/AllocationManager.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 289faa9a8..1a9c86928 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -8,7 +8,6 @@ import { GraphDirectory } from "@graphprotocol/horizon/contracts/utilities/Graph import { AllocationManagerV1Storage } from "./AllocationManagerStorage.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; -import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import { EIP712Upgradeable } from "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol"; import { Allocation } from "../libraries/Allocation.sol"; From ddbc4d20586eee08ff50d5885f469ba2557a41a5 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 28 Aug 2024 09:37:25 -0300 Subject: [PATCH 198/343] fix: remove if conditions (OZ H-02) --- .../data-service/utilities/ProvisionManager.sol | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 16f2d6f1e..ef7c9bcf1 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -220,16 +220,12 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa bool _checkPending ) internal view virtual { (uint64 thawingPeriodMin, uint64 thawingPeriodMax) = _getThawingPeriodRange(); - if (thawingPeriodMin != type(uint64).min || thawingPeriodMax != type(uint64).max) { - uint64 thawingPeriodToCheck = _checkPending ? _provision.thawingPeriodPending : _provision.thawingPeriod; - _checkValueInRange(thawingPeriodToCheck, thawingPeriodMin, thawingPeriodMax, "thawingPeriod"); - } + uint64 thawingPeriodToCheck = _checkPending ? _provision.thawingPeriodPending : _provision.thawingPeriod; + _checkValueInRange(thawingPeriodToCheck, thawingPeriodMin, thawingPeriodMax, "thawingPeriod"); (uint32 verifierCutMin, uint32 verifierCutMax) = _getVerifierCutRange(); - if (verifierCutMin != type(uint32).min || verifierCutMax != uint32(PPMMath.MAX_PPM)) { - uint32 maxVerifierCutToCheck = _checkPending ? _provision.maxVerifierCutPending : _provision.maxVerifierCut; - _checkValueInRange(maxVerifierCutToCheck, verifierCutMin, verifierCutMax, "maxVerifierCut"); - } + uint32 maxVerifierCutToCheck = _checkPending ? _provision.maxVerifierCutPending : _provision.maxVerifierCut; + _checkValueInRange(maxVerifierCutToCheck, verifierCutMin, verifierCutMax, "maxVerifierCut"); } // -- getters -- From 63d2ba4b94afb1af9b267d5fef5ddacfcfe39779 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Tue, 10 Sep 2024 04:00:49 +1000 Subject: [PATCH 199/343] Subgraph Service - Unit tests (#1022) * chore: add unit tests * fix: rebase cleanup * chore: dispute manager tests fixes * chore: dispute manager test fixes * chore: refactoring subgraph service unit tests * chore: subgraph service test fixes --- .../contracts/DisputeManager.sol | 24 +- .../contracts/interfaces/IDisputeManager.sol | 15 +- .../contracts/libraries/Attestation.sol | 2 +- .../test/SubgraphBaseTest.t.sol | 6 +- .../test/disputeManager/DisputeManager.t.sol | 426 ++++++++++++++++-- .../constructor/constructor.t.sol | 20 +- .../test/disputeManager/disputes/accept.t.sol | 223 --------- .../test/disputeManager/disputes/cancel.t.sol | 70 --- .../test/disputeManager/disputes/create.t.sol | 146 ------ .../disputeManager/disputes/disputes.t.sol | 71 +++ .../test/disputeManager/disputes/draw.t.sol | 67 --- .../disputes/indexing/accept.t.sol | 64 +++ .../disputes/indexing/cancel.t.sol | 42 ++ .../disputes/indexing/create.t.sol | 111 +++++ .../disputes/indexing/draw.t.sol | 34 ++ .../disputes/indexing/reject.t.sol | 34 ++ .../disputes/query/accept.t.sol | 75 +++ .../disputes/query/cancel.t.sol | 53 +++ .../disputes/query/create.t.sol | 136 ++++++ .../disputeManager/disputes/query/draw.t.sol | 45 ++ .../disputes/query/reject.t.sol | 44 ++ .../disputes/queryConflict/accept.t.sol | 96 ++++ .../disputes/queryConflict/cancel.t.sol | 76 ++++ .../disputes/queryConflict/create.t.sol | 107 +++++ .../disputes/queryConflict/draw.t.sol | 59 +++ .../disputes/queryConflict/reject.t.sol | 42 ++ .../governance/arbitrator.t.sol | 32 ++ .../governance/disputeDeposit.t.sol | 32 ++ .../governance/fishermanRewardCut.t.sol | 7 +- .../governance/maxSlashingCut.t.sol | 32 ++ .../test/shared/HorizonStakingShared.t.sol | 75 +++ .../test/shared/SubgraphServiceShared.t.sol | 148 +++++- .../subgraphService/SubgraphService.t.sol | 335 +++++++++++++- .../subgraphService/allocate/resize.t.sol | 129 ------ .../test/subgraphService/allocate/start.t.sol | 166 ------- .../allocation/closeStale.t.sol | 108 +++++ .../subgraphService/allocation/resize.t.sol | 86 ++++ .../subgraphService/allocation/start.t.sol | 208 +++++++++ .../{allocate => allocation}/stop.t.sol | 31 +- .../subgraphService/collect/collect.t.sol | 210 +-------- .../collect/indexing/indexing.t.sol | 125 +++++ .../subgraphService/collect/query/query.t.sol | 157 +++++++ .../subgraphService/provider/register.t.sol | 51 +-- .../provider/rewardsDestination.t.sol | 26 ++ .../subgraphService/provision/accept.t.sol | 77 +++- .../subgraph-service/test/utils/Constants.sol | 3 +- 46 files changed, 2943 insertions(+), 1183 deletions(-) delete mode 100644 packages/subgraph-service/test/disputeManager/disputes/accept.t.sol delete mode 100644 packages/subgraph-service/test/disputeManager/disputes/cancel.t.sol delete mode 100644 packages/subgraph-service/test/disputeManager/disputes/create.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol delete mode 100644 packages/subgraph-service/test/disputeManager/disputes/draw.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/indexing/cancel.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/indexing/draw.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/indexing/reject.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/query/cancel.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/query/draw.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/query/reject.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/queryConflict/cancel.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/queryConflict/create.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/queryConflict/draw.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/governance/arbitrator.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol create mode 100644 packages/subgraph-service/test/disputeManager/governance/maxSlashingCut.t.sol create mode 100644 packages/subgraph-service/test/shared/HorizonStakingShared.t.sol delete mode 100644 packages/subgraph-service/test/subgraphService/allocate/resize.t.sol delete mode 100644 packages/subgraph-service/test/subgraphService/allocate/start.t.sol create mode 100644 packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol create mode 100644 packages/subgraph-service/test/subgraphService/allocation/resize.t.sol create mode 100644 packages/subgraph-service/test/subgraphService/allocation/start.t.sol rename packages/subgraph-service/test/subgraphService/{allocate => allocation}/stop.t.sol (70%) create mode 100644 packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol create mode 100644 packages/subgraph-service/test/subgraphService/collect/query/query.t.sol create mode 100644 packages/subgraph-service/test/subgraphService/provider/rewardsDestination.t.sol diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 4a40b3590..a9afcff28 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -128,18 +128,15 @@ contract DisputeManager is * The disputes are created in reference to an allocationId and specifically * a POI for that allocation. * This function is called by a challenger and it will pull `disputeDeposit` GRT tokens. - * + * * Requirements: - * - Challenger must have previously approved this contract to pull `disputeDeposit` amount + * - Challenger must have previously approved this contract to pull `disputeDeposit` amount * of tokens from their balance. - * + * * @param allocationId The allocation to dispute * @param poi The Proof of Indexing (POI) being disputed */ - function createIndexingDispute( - address allocationId, - bytes32 poi - ) external override returns (bytes32) { + function createIndexingDispute(address allocationId, bytes32 poi) external override returns (bytes32) { // Get funds from submitter _pullSubmitterDeposit(); @@ -150,11 +147,11 @@ contract DisputeManager is /** * @notice Create a query dispute for the arbitrator to resolve. * This function is called by a challenger and it will pull `disputeDeposit` GRT tokens. - * + * * * Requirements: - * - Challenger must have previously approved this contract to pull `disputeDeposit` amount + * - Challenger must have previously approved this contract to pull `disputeDeposit` amount * of tokens from their balance. - * + * * @param attestationData Attestation bytes submitted by the challenger */ function createQueryDispute(bytes calldata attestationData) external override returns (bytes32) { @@ -296,6 +293,8 @@ contract DisputeManager is // store dispute status dispute.status = IDisputeManager.DisputeStatus.Cancelled; + + emit DisputeCancelled(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); } /** @@ -668,7 +667,10 @@ contract DisputeManager is * @param _fishermanRewardCut Reward as a percentage of indexer stake */ function _setFishermanRewardCut(uint32 _fishermanRewardCut) private { - require(_fishermanRewardCut <= MAX_FISHERMAN_REWARD_CUT, DisputeManagerInvalidFishermanReward(_fishermanRewardCut)); + require( + _fishermanRewardCut <= MAX_FISHERMAN_REWARD_CUT, + DisputeManagerInvalidFishermanReward(_fishermanRewardCut) + ); fishermanRewardCut = _fishermanRewardCut; emit FishermanRewardCutSet(_fishermanRewardCut); } diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 088133e05..73f7e56d6 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -143,6 +143,17 @@ interface IDisputeManager { */ event DisputeLinked(bytes32 indexed disputeId1, bytes32 indexed disputeId2); + /** + * @dev Emitted when a dispute is cancelled by the fisherman. + * The event emits the amount `tokens` returned to the fisherman. + */ + event DisputeCancelled( + bytes32 indexed disputeId, + address indexed indexer, + address indexed fisherman, + uint256 tokens + ); + // -- Errors -- error DisputeManagerNotArbitrator(); @@ -213,10 +224,10 @@ interface IDisputeManager { function getAttestationIndexer(Attestation.State memory attestation) external view returns (address); + function getStakeSnapshot(address indexer) external view returns (uint256); + function areConflictingAttestations( Attestation.State memory attestation1, Attestation.State memory attestation2 ) external pure returns (bool); - - function getStakeSnapshot(address indexer) external view returns (uint256); } diff --git a/packages/subgraph-service/contracts/libraries/Attestation.sol b/packages/subgraph-service/contracts/libraries/Attestation.sol index 587fadca7..0211db674 100644 --- a/packages/subgraph-service/contracts/libraries/Attestation.sol +++ b/packages/subgraph-service/contracts/libraries/Attestation.sol @@ -33,7 +33,7 @@ library Attestation { uint256 private constant SIG_S_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH; uint256 private constant SIG_V_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH + SIG_S_LENGTH; uint256 private constant SIG_SIZE_BYTES = SIG_R_LENGTH + SIG_S_LENGTH + SIG_V_LENGTH; - + uint256 private constant ATTESTATION_SIZE_BYTES = RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES; uint256 private constant UINT8_BYTE_LENGTH = 1; diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index 9991ab8a5..2fe5ccf64 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -40,9 +40,9 @@ abstract contract SubgraphBaseTest is Utils, Constants { SubgraphService subgraphService; DisputeManager disputeManager; IHorizonStaking staking; - IGraphPayments graphPayments; + GraphPayments graphPayments; IPaymentsEscrow escrow; - ITAPCollector tapCollector; + TAPCollector tapCollector; HorizonStaking private stakingBase; HorizonStakingExtension private stakingExtension; @@ -196,7 +196,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { controller.setPaused(false); } - function createUser(string memory name) private returns (address) { + function createUser(string memory name) internal returns (address) { address user = makeAddr(name); vm.deal({ account: user, newBalance: 100 ether }); deal({ token: address(token), to: user, give: 10_000_000_000 ether }); diff --git a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol index 9f80512b4..1077c1435 100644 --- a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol +++ b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol @@ -8,6 +8,8 @@ import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils. import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; import { Attestation } from "../../contracts/libraries/Attestation.sol"; +import { Allocation } from "../../contracts/libraries/Allocation.sol"; +import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; import { SubgraphServiceSharedTest } from "../shared/SubgraphServiceShared.t.sol"; @@ -31,73 +33,415 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { } /* - * HELPERS + * ACTIONS */ - function _createIndexingDispute(address _allocationID, bytes32 _poi) internal returns (bytes32 disputeID) { - address msgSender; - (, msgSender,) = vm.readCallers(); - resetPrank(users.fisherman); - uint256 beforeFishermanBalance = token.balanceOf(users.fisherman); + function _setArbitrator(address _arbitrator) internal { + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.ArbitratorSet(_arbitrator); + disputeManager.setArbitrator(_arbitrator); + assertEq(disputeManager.arbitrator(), _arbitrator, "Arbitrator should be set."); + } + + function _setFishermanRewardCut(uint32 _fishermanRewardCut) internal { + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.FishermanRewardCutSet(_fishermanRewardCut); + disputeManager.setFishermanRewardCut(_fishermanRewardCut); + assertEq(disputeManager.fishermanRewardCut(), _fishermanRewardCut, "Fisherman reward cut should be set."); + } + + function _setMaxSlashingCut(uint32 _maxSlashingCut) internal { + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.MaxSlashingCutSet(_maxSlashingCut); + disputeManager.setMaxSlashingCut(_maxSlashingCut); + assertEq(disputeManager.maxSlashingCut(), _maxSlashingCut, "Max slashing cut should be set."); + } + + function _setDisputeDeposit(uint256 _disputeDeposit) internal { + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.DisputeDepositSet(_disputeDeposit); + disputeManager.setDisputeDeposit(_disputeDeposit); + assertEq(disputeManager.disputeDeposit(), _disputeDeposit, "Dispute deposit should be set."); + } + + function _createIndexingDispute(address _allocationId, bytes32 _poi) internal returns (bytes32) { + (, address fisherman, ) = vm.readCallers(); + bytes32 expectedDisputeId = keccak256(abi.encodePacked(_allocationId, _poi)); + uint256 disputeDeposit = disputeManager.disputeDeposit(); + uint256 beforeFishermanBalance = token.balanceOf(fisherman); + Allocation.State memory alloc = subgraphService.getAllocation(_allocationId); + uint256 stakeSnapshot = disputeManager.getStakeSnapshot(alloc.indexer); + + // Approve the dispute deposit token.approve(address(disputeManager), disputeDeposit); - bytes32 _disputeID = disputeManager.createIndexingDispute(_allocationID, _poi); - uint256 afterFishermanBalance = token.balanceOf(users.fisherman); + + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.IndexingDisputeCreated( + expectedDisputeId, + alloc.indexer, + fisherman, + disputeDeposit, + _allocationId, + _poi, + stakeSnapshot + ); + + // Create the indexing dispute + bytes32 _disputeId = disputeManager.createIndexingDispute(_allocationId, _poi); + + // Check that the dispute was created and that it has the correct ID + assertTrue(disputeManager.isDisputeCreated(_disputeId), "Dispute should be created."); + assertEq(expectedDisputeId, _disputeId, "Dispute ID should match"); + + // Check dispute values + IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); + assertEq(dispute.indexer, alloc.indexer, "Indexer should match"); + assertEq(dispute.fisherman, fisherman, "Fisherman should match"); + assertEq(dispute.deposit, disputeDeposit, "Deposit should match"); + assertEq(dispute.relatedDisputeId, bytes32(0), "Related dispute ID should be empty"); + assertEq(uint8(dispute.disputeType), uint8(IDisputeManager.DisputeType.IndexingDispute), "Dispute type should be indexing"); + assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status should be pending"); + assertEq(dispute.createdAt, block.timestamp, "Created at should match"); + assertEq(dispute.stakeSnapshot, stakeSnapshot, "Stake snapshot should match"); + + // Check that the fisherman was charged the dispute deposit + uint256 afterFishermanBalance = token.balanceOf(fisherman); assertEq(afterFishermanBalance, beforeFishermanBalance - disputeDeposit, "Fisherman should be charged the dispute deposit"); - resetPrank(msgSender); - return _disputeID; + + return _disputeId; } - function _createQueryDispute() internal returns (bytes32 disputeID) { - address msgSender; - (, msgSender,) = vm.readCallers(); - resetPrank(users.fisherman); - Attestation.Receipt memory receipt = Attestation.Receipt({ - requestCID: keccak256(abi.encodePacked("Request CID")), - responseCID: keccak256(abi.encodePacked("Response CID")), - subgraphDeploymentId: keccak256(abi.encodePacked("Subgraph Deployment ID")) - }); - bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + function _createQueryDispute(bytes memory _attestationData) internal returns (bytes32) { + (, address fisherman,) = vm.readCallers(); + Attestation.State memory attestation = Attestation.parse(_attestationData); + address indexer = disputeManager.getAttestationIndexer(attestation); + bytes32 expectedDisputeId = keccak256( + abi.encodePacked( + attestation.requestCID, + attestation.responseCID, + attestation.subgraphDeploymentId, + indexer, + fisherman + ) + ); + uint256 disputeDeposit = disputeManager.disputeDeposit(); + uint256 beforeFishermanBalance = token.balanceOf(fisherman); + uint256 stakeSnapshot = disputeManager.getStakeSnapshot(indexer); - uint256 beforeFishermanBalance = token.balanceOf(users.fisherman); + // Approve the dispute deposit token.approve(address(disputeManager), disputeDeposit); - bytes32 _disputeID = disputeManager.createQueryDispute(attestationData); - uint256 afterFishermanBalance = token.balanceOf(users.fisherman); + + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.QueryDisputeCreated( + expectedDisputeId, + indexer, + fisherman, + disputeDeposit, + attestation.subgraphDeploymentId, + _attestationData, + stakeSnapshot + ); + + bytes32 _disputeID = disputeManager.createQueryDispute(_attestationData); + + // Check that the dispute was created and that it has the correct ID + assertTrue(disputeManager.isDisputeCreated(_disputeID), "Dispute should be created."); + assertEq(expectedDisputeId, _disputeID, "Dispute ID should match"); + + // Check dispute values + IDisputeManager.Dispute memory dispute = _getDispute(_disputeID); + assertEq(dispute.indexer, indexer, "Indexer should match"); + assertEq(dispute.fisherman, fisherman, "Fisherman should match"); + assertEq(dispute.deposit, disputeDeposit, "Deposit should match"); + assertEq(dispute.relatedDisputeId, bytes32(0), "Related dispute ID should be empty"); + assertEq(uint8(dispute.disputeType), uint8(IDisputeManager.DisputeType.QueryDispute), "Dispute type should be query"); + assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status should be pending"); + assertEq(dispute.createdAt, block.timestamp, "Created at should match"); + assertEq(dispute.stakeSnapshot, stakeSnapshot, "Stake snapshot should match"); + + // Check that the fisherman was charged the dispute deposit + uint256 afterFishermanBalance = token.balanceOf(fisherman); assertEq(afterFishermanBalance, beforeFishermanBalance - disputeDeposit, "Fisherman should be charged the dispute deposit"); - resetPrank(msgSender); + return _disputeID; } + function _createQueryDisputeConflict( + bytes memory attestationData1, + bytes memory attestationData2 + ) internal returns (bytes32, bytes32) { + (, address fisherman,) = vm.readCallers(); + Attestation.State memory attestation1 = Attestation.parse(attestationData1); + Attestation.State memory attestation2 = Attestation.parse(attestationData2); + address indexer1 = disputeManager.getAttestationIndexer(attestation1); + address indexer2 = disputeManager.getAttestationIndexer(attestation2); + bytes32 expectedDisputeId1 = keccak256( + abi.encodePacked( + attestation1.requestCID, + attestation1.responseCID, + attestation1.subgraphDeploymentId, + indexer1, + fisherman + ) + ); + bytes32 expectedDisputeId2 = keccak256( + abi.encodePacked( + attestation2.requestCID, + attestation2.responseCID, + attestation2.subgraphDeploymentId, + indexer2, + fisherman + ) + ); + uint256 stakeSnapshot1 = disputeManager.getStakeSnapshot(indexer1); + uint256 stakeSnapshot2 = disputeManager.getStakeSnapshot(indexer2); + + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.QueryDisputeCreated( + expectedDisputeId1, + indexer1, + fisherman, + 0, + attestation1.subgraphDeploymentId, + attestationData1, + stakeSnapshot1 + ); + emit IDisputeManager.QueryDisputeCreated( + expectedDisputeId2, + indexer2, + fisherman, + 0, + attestation2.subgraphDeploymentId, + attestationData2, + stakeSnapshot2 + ); + + (bytes32 _disputeId1, bytes32 _disputeId2) = disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + + // Check that the disputes were created and that they have the correct IDs + assertTrue(disputeManager.isDisputeCreated(_disputeId1), "Dispute 1 should be created."); + assertTrue(disputeManager.isDisputeCreated(_disputeId2), "Dispute 2 should be created."); + assertEq(expectedDisputeId1, _disputeId1, "Dispute 1 ID should match"); + assertEq(expectedDisputeId2, _disputeId2, "Dispute 2 ID should match"); + + // Check dispute values + IDisputeManager.Dispute memory dispute1 = _getDispute(_disputeId1); + assertEq(dispute1.indexer, indexer1, "Indexer 1 should match"); + assertEq(dispute1.fisherman, fisherman, "Fisherman 1 should match"); + assertEq(dispute1.deposit, 0, "Deposit 1 should match"); + assertEq(dispute1.relatedDisputeId, _disputeId2, "Related dispute ID 1 should be the id of the other dispute"); + assertEq(uint8(dispute1.disputeType), uint8(IDisputeManager.DisputeType.QueryDispute), "Dispute type 1 should be query"); + assertEq(uint8(dispute1.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status 1 should be pending"); + assertEq(dispute1.createdAt, block.timestamp, "Created at 1 should match"); + assertEq(dispute1.stakeSnapshot, stakeSnapshot1, "Stake snapshot 1 should match"); + + IDisputeManager.Dispute memory dispute2 = _getDispute(_disputeId2); + assertEq(dispute2.indexer, indexer2, "Indexer 2 should match"); + assertEq(dispute2.fisherman, fisherman, "Fisherman 2 should match"); + assertEq(dispute2.deposit, 0, "Deposit 2 should match"); + assertEq(dispute2.relatedDisputeId, _disputeId1, "Related dispute ID 2 should be the id of the other dispute"); + assertEq(uint8(dispute2.disputeType), uint8(IDisputeManager.DisputeType.QueryDispute), "Dispute type 2 should be query"); + assertEq(uint8(dispute2.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status 2 should be pending"); + assertEq(dispute2.createdAt, block.timestamp, "Created at 2 should match"); + assertEq(dispute2.stakeSnapshot, stakeSnapshot2, "Stake snapshot 2 should match"); + + return (_disputeId1, _disputeId2); + } + + function _acceptDispute(bytes32 _disputeId, uint256 _tokensSlash) internal { + IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); + address fisherman = dispute.fisherman; + uint256 fishermanPreviousBalance = token.balanceOf(fisherman); + uint256 indexerTokensAvailable = staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)); + uint256 disputeDeposit = dispute.deposit; + uint256 fishermanRewardPercentage = disputeManager.fishermanRewardCut(); + uint256 fishermanReward = _tokensSlash.mulPPM(fishermanRewardPercentage); + + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.DisputeAccepted(_disputeId, dispute.indexer, dispute.fisherman, dispute.deposit + fishermanReward); + + // Accept the dispute + disputeManager.acceptDispute(_disputeId, _tokensSlash); + + // Check fisherman's got their reward and their deposit (if any) back + uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward + disputeDeposit; + assertEq(token.balanceOf(fisherman), fishermanExpectedBalance, "Fisherman should get their reward and deposit back"); + + // Check indexer was slashed by the correct amount + uint256 expectedIndexerTokensAvailable; + if (_tokensSlash > indexerTokensAvailable) { + expectedIndexerTokensAvailable = 0; + } else { + expectedIndexerTokensAvailable = indexerTokensAvailable - _tokensSlash; + } + assertEq(staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), expectedIndexerTokensAvailable, "Indexer should be slashed by the correct amount"); + + // Check dispute status + dispute = _getDispute(_disputeId); + assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Accepted), "Dispute status should be accepted"); + + // If there's a related dispute, check that it was rejected + if (dispute.relatedDisputeId != bytes32(0)) { + IDisputeManager.Dispute memory relatedDispute = _getDispute(dispute.relatedDisputeId); + assertEq(uint8(relatedDispute.status), uint8(IDisputeManager.DisputeStatus.Rejected), "Related dispute status should be rejected"); + } + } + + function _drawDispute(bytes32 _disputeId) internal { + IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); + address fisherman = dispute.fisherman; + uint256 fishermanPreviousBalance = token.balanceOf(fisherman); + uint256 indexerTokensAvailable = staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)); + + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.DisputeDrawn(_disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); + + // Draw the dispute + disputeManager.drawDispute(_disputeId); + + // Check that the fisherman got their deposit back + uint256 fishermanExpectedBalance = fishermanPreviousBalance + dispute.deposit; + assertEq(token.balanceOf(fisherman), fishermanExpectedBalance, "Fisherman should receive their deposit back."); + + // Check that indexer was not slashed + assertEq(staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), indexerTokensAvailable, "Indexer should not be slashed"); + + // Check dispute status + dispute = _getDispute(_disputeId); + assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Drawn), "Dispute status should be drawn"); + + // If there's a related dispute, check that it was drawn too + if (dispute.relatedDisputeId != bytes32(0)) { + IDisputeManager.Dispute memory relatedDispute = _getDispute(dispute.relatedDisputeId); + assertEq(uint8(relatedDispute.status), uint8(IDisputeManager.DisputeStatus.Drawn), "Related dispute status should be drawn"); + } + } + + function _rejectDispute(bytes32 _disputeId) internal { + IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); + address fisherman = dispute.fisherman; + uint256 fishermanPreviousBalance = token.balanceOf(fisherman); + uint256 indexerTokensAvailable = staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)); + + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.DisputeRejected(_disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); + + // Reject the dispute + disputeManager.rejectDispute(_disputeId); + + // Check that the fisherman didn't get their deposit back + assertEq(token.balanceOf(users.fisherman), fishermanPreviousBalance, "Fisherman should lose the deposit."); + + // Check that indexer was not slashed + assertEq(staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), indexerTokensAvailable, "Indexer should not be slashed"); + + // Check dispute status + dispute = _getDispute(_disputeId); + assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Rejected), "Dispute status should be rejected"); + // Checl related id is empty + assertEq(dispute.relatedDisputeId, bytes32(0), "Related dispute ID should be empty"); + } + + function _cancelDispute(bytes32 _disputeId) internal { + IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); + address fisherman = dispute.fisherman; + uint256 fishermanPreviousBalance = token.balanceOf(fisherman); + uint256 disputePeriod = disputeManager.disputePeriod(); + uint256 indexerTokensAvailable = staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)); + + // skip to end of dispute period + skip(disputePeriod + 1); + + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.DisputeCancelled(_disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); + + // Cancel the dispute + disputeManager.cancelDispute(_disputeId); + + // Check that the fisherman got their deposit back + uint256 fishermanExpectedBalance = fishermanPreviousBalance + dispute.deposit; + assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance, "Fisherman should receive their deposit back."); + + // Check that indexer was not slashed + assertEq(staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), indexerTokensAvailable, "Indexer should not be slashed"); + + // Check dispute status + dispute = _getDispute(_disputeId); + assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Cancelled), "Dispute status should be cancelled"); + + // If there's a related dispute, check that it was cancelled too + if (dispute.relatedDisputeId != bytes32(0)) { + IDisputeManager.Dispute memory relatedDispute = _getDispute(dispute.relatedDisputeId); + assertEq(uint8(relatedDispute.status), uint8(IDisputeManager.DisputeStatus.Cancelled), "Related dispute status should be cancelled"); + } + } + + /* + * HELPERS + */ + + function _createAttestationReceipt( + bytes32 requestCID, + bytes32 responseCID, + bytes32 subgraphDeploymentId + ) internal pure returns (Attestation.Receipt memory receipt) { + return Attestation.Receipt({ + requestCID: requestCID, + responseCID: responseCID, + subgraphDeploymentId: subgraphDeploymentId + }); + } + function _createConflictingAttestations( + bytes32 requestCID, + bytes32 subgraphDeploymentId, bytes32 responseCID1, - bytes32 subgraphDeploymentId1, bytes32 responseCID2, - bytes32 subgraphDeploymentId2 + uint256 signer1, + uint256 signer2 ) internal view returns (bytes memory attestationData1, bytes memory attestationData2) { - bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); - Attestation.Receipt memory receipt1 = Attestation.Receipt({ - requestCID: requestCID, - responseCID: responseCID1, - subgraphDeploymentId: subgraphDeploymentId1 - }); + Attestation.Receipt memory receipt1 = _createAttestationReceipt(requestCID, responseCID1, subgraphDeploymentId); + Attestation.Receipt memory receipt2 = _createAttestationReceipt(requestCID, responseCID2, subgraphDeploymentId); - Attestation.Receipt memory receipt2 = Attestation.Receipt({ - requestCID: requestCID, - responseCID: responseCID2, - subgraphDeploymentId: subgraphDeploymentId2 - }); - - bytes memory _attestationData1 = _createAtestationData(receipt1, allocationIDPrivateKey); - bytes memory _attestationData2 = _createAtestationData(receipt2, allocationIDPrivateKey); + bytes memory _attestationData1 = _createAtestationData(receipt1, signer1); + bytes memory _attestationData2 = _createAtestationData(receipt2, signer2); return (_attestationData1, _attestationData2); } function _createAtestationData( Attestation.Receipt memory receipt, uint256 signer - ) private view returns (bytes memory attestationData) { + ) internal view returns (bytes memory attestationData) { bytes32 digest = disputeManager.encodeReceipt(receipt); (uint8 v, bytes32 r, bytes32 s) = vm.sign(signer, digest); return abi.encodePacked(receipt.requestCID, receipt.responseCID, receipt.subgraphDeploymentId, r, s, v); } + + /* + * PRIVATE FUNCTIONS + */ + + function _getDispute(bytes32 _disputeId) internal view returns (IDisputeManager.Dispute memory) { + ( + address indexer, + address fisherman, + uint256 deposit, + bytes32 relatedDisputeId, + IDisputeManager.DisputeType disputeType, + IDisputeManager.DisputeStatus status, + uint256 createdAt, + uint256 stakeSnapshot + ) = disputeManager.disputes(_disputeId); + return IDisputeManager.Dispute({ + indexer: indexer, + fisherman: fisherman, + deposit: deposit, + relatedDisputeId: relatedDisputeId, + disputeType: disputeType, + status: status, + createdAt: createdAt, + stakeSnapshot: stakeSnapshot + }); + } } diff --git a/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol b/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol index d4f100f68..76f90481a 100644 --- a/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol +++ b/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol @@ -49,10 +49,12 @@ contract DisputeManagerConstructorTest is DisputeManagerTest { * TESTS */ - function test_Constructor( - uint32 fishermanRewardPercentage + function test_DisputeManager_Constructor( + uint32 fishermanRewardPercentage, + uint32 maxSlashingPercentage ) public useDeployer { vm.assume(fishermanRewardPercentage <= disputeManager.MAX_FISHERMAN_REWARD_CUT()); + vm.assume(maxSlashingPercentage <= PPMMath.MAX_PPM); address disputeManagerImplementation = address(new DisputeManager(address(controller))); address proxy = _initializeDisputeManager( disputeManagerImplementation, @@ -70,7 +72,7 @@ contract DisputeManagerConstructorTest is DisputeManagerTest { assertEq(disputeManager.fishermanRewardCut(), fishermanRewardPercentage); } - function test_Constructor_RevertIf_ControllerAddressIsZero() public useDeployer { + function test_DisputeManager_Constructor_RevertIf_ControllerAddressIsZero() public useDeployer { bytes memory expectedError = abi.encodeWithSelector( GraphDirectory.GraphDirectoryInvalidZeroAddress.selector, "Controller" @@ -79,7 +81,7 @@ contract DisputeManagerConstructorTest is DisputeManagerTest { new DisputeManager(address(0)); } - function test_Constructor_RevertIf_ArbitratorAddressIsZero() public useDeployer { + function test_DisputeManager_Constructor_RevertIf_ArbitratorAddressIsZero() public useDeployer { address disputeManagerImplementation = address(new DisputeManager(address(controller))); bytes memory expectedError = abi.encodeWithSelector( IDisputeManager.DisputeManagerInvalidZeroAddress.selector @@ -95,7 +97,7 @@ contract DisputeManagerConstructorTest is DisputeManagerTest { ); } - function test_Constructor_RevertIf_InvalidDisputePeriod() public useDeployer { + function test_DisputeManager_Constructor_RevertIf_InvalidDisputePeriod() public useDeployer { address disputeManagerImplementation = address(new DisputeManager(address(controller))); bytes memory expectedError = abi.encodeWithSelector( IDisputeManager.DisputeManagerDisputePeriodZero.selector @@ -111,7 +113,7 @@ contract DisputeManagerConstructorTest is DisputeManagerTest { ); } - function test_Constructor_RevertIf_InvalidDisputeDeposit() public useDeployer { + function test_DisputeManager_Constructor_RevertIf_InvalidDisputeDeposit() public useDeployer { address disputeManagerImplementation = address(new DisputeManager(address(controller))); bytes memory expectedError = abi.encodeWithSelector( IDisputeManager.DisputeManagerInvalidDisputeDeposit.selector, @@ -128,7 +130,7 @@ contract DisputeManagerConstructorTest is DisputeManagerTest { ); } - function test_Constructor_RevertIf_InvalidFishermanRewardPercentage(uint32 _fishermanRewardPercentage) public useDeployer { + function test_DisputeManager_Constructor_RevertIf_InvalidFishermanRewardPercentage(uint32 _fishermanRewardPercentage) public useDeployer { vm.assume(_fishermanRewardPercentage > disputeManager.MAX_FISHERMAN_REWARD_CUT()); address disputeManagerImplementation = address(new DisputeManager(address(controller))); bytes memory expectedError = abi.encodeWithSelector( @@ -146,7 +148,7 @@ contract DisputeManagerConstructorTest is DisputeManagerTest { ); } - function test_Constructor_RevertIf_InvalidMaxSlashingPercentage(uint32 _maxSlashingPercentage) public useDeployer { + function test_DisputeManager_Constructor_RevertIf_InvalidMaxSlashingPercentage(uint32 _maxSlashingPercentage) public useDeployer { vm.assume(_maxSlashingPercentage > PPMMath.MAX_PPM); address disputeManagerImplementation = address(new DisputeManager(address(controller))); bytes memory expectedError = abi.encodeWithSelector( @@ -163,4 +165,4 @@ contract DisputeManagerConstructorTest is DisputeManagerTest { _maxSlashingPercentage ); } -} \ No newline at end of file +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/accept.t.sol deleted file mode 100644 index 29e3bb6f5..000000000 --- a/packages/subgraph-service/test/disputeManager/disputes/accept.t.sol +++ /dev/null @@ -1,223 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; -import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; -import { DisputeManagerTest } from "../DisputeManager.t.sol"; -import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; - -contract DisputeManagerAcceptDisputeTest is DisputeManagerTest { - using PPMMath for uint256; - - /* - * TESTS - */ - - function testAccept_IndexingDispute( - uint256 tokens, - uint256 tokensSlash, - uint256 delegationAmount - ) public useIndexer useAllocation(tokens) { - delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); - - resetPrank(users.delegator); - _delegate(delegationAmount); - - uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); - uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); - tokensSlash = bound(tokensSlash, 1, tokensSlashCap); - - uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); - - resetPrank(users.arbitrator); - disputeManager.acceptDispute(disputeID, tokensSlash); - - uint256 fishermanReward = Math.min(tokensSlash, tokens).mulPPM(fishermanRewardPercentage); - uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward; - assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance); - } - - function testAccept_QueryDispute( - uint256 tokens, - uint256 tokensSlash, - uint256 delegationAmount - ) public useIndexer useAllocation(tokens) { - delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); - - resetPrank(users.delegator); - _delegate(delegationAmount); - - uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); - uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); - tokensSlash = bound(tokensSlash, 1, tokensSlashCap); - - uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); - bytes32 disputeID = _createQueryDispute(); - - resetPrank(users.arbitrator); - disputeManager.acceptDispute(disputeID, tokensSlash); - - uint256 fishermanReward = Math.min(tokensSlash, tokens).mulPPM(fishermanRewardPercentage); - uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward; - assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance); - } - - function testAccept_QueryDisputeConflicting( - uint256 tokens, - uint256 tokensSlash, - uint256 delegationAmount - ) public useIndexer useAllocation(tokens) { - delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); - - resetPrank(users.delegator); - _delegate(delegationAmount); - - uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); - uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); - tokensSlash = bound(tokensSlash, 1, tokensSlashCap); - - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); - (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); - - resetPrank(users.fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( - attestationData1, - attestationData2 - ); - - resetPrank(users.arbitrator); - disputeManager.acceptDispute(disputeID1, tokensSlash); - - uint256 fishermanReward = Math.min(tokensSlash, tokens).mulPPM(fishermanRewardPercentage); - uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward; - assertEq( - token.balanceOf(users.fisherman), - fishermanExpectedBalance, - "Fisherman should receive 50% of slashed tokens." - ); - - (, , , , , IDisputeManager.DisputeStatus status1, , ) = disputeManager.disputes(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status2, , ) = disputeManager.disputes(disputeID2); - assertTrue(status1 == IDisputeManager.DisputeStatus.Accepted, "Dispute 1 should be accepted."); - assertTrue(status2 == IDisputeManager.DisputeStatus.Rejected, "Dispute 2 should be rejected."); - } - - function testAccept_IndexingDispute_RevertIf_SlashAmountTooHigh( - uint256 tokens, - uint256 tokensSlash, - uint256 delegationAmount - ) public useIndexer useAllocation(tokens) { - delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); - - resetPrank(users.delegator); - _delegate(delegationAmount); - - uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); - uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); - tokensSlash = bound(tokensSlash, tokensSlashCap + 1 wei, type(uint256).max); - - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); - - resetPrank(users.arbitrator); - bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerInvalidTokensSlash.selector, - tokensSlash, - tokensSlashCap - ); - vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID, tokensSlash); - } - - function testAccept_QueryDispute_RevertIf_SlashAmountTooHigh( - uint256 tokens, - uint256 tokensSlash, - uint256 delegationAmount - ) public useIndexer useAllocation(tokens) { - delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); - - resetPrank(users.delegator); - _delegate(delegationAmount); - - uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); - uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); - tokensSlash = bound(tokensSlash, tokensSlashCap + 1 wei, type(uint256).max); - - bytes32 disputeID = _createQueryDispute(); - - resetPrank(users.arbitrator); - bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerInvalidTokensSlash.selector, - tokensSlash, - tokensSlashCap - ); - vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID, tokensSlash); - } - - function testAccept_ConflictingQueryDispute_RevertIf_SlashAmountTooHigh( - uint256 tokens, - uint256 tokensSlash, - uint256 delegationAmount - ) public useIndexer useAllocation(tokens) { - delegationAmount = bound(delegationAmount, 1 ether, 10_000_000_000 ether); - - resetPrank(users.delegator); - _delegate(delegationAmount); - - uint256 stakeSnapshot = disputeManager.getStakeSnapshot(users.indexer); - uint256 tokensSlashCap = stakeSnapshot.mulPPM(maxSlashingPercentage); - tokensSlash = bound(tokensSlash, tokensSlashCap + 1 wei, type(uint256).max); - - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); - - resetPrank(users.fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( - attestationData1, - attestationData2 - ); - - resetPrank(users.arbitrator); - bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerInvalidTokensSlash.selector, - tokensSlash, - tokensSlashCap - ); - vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID1, tokensSlash); - } - - function testAccept_RevertIf_CallerIsNotArbitrator( - uint256 tokens, - uint256 tokensSlash - ) public useIndexer useAllocation(tokens) { - tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); - - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); - - // attempt to accept dispute as fisherman - resetPrank(users.fisherman); - vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); - disputeManager.acceptDispute(disputeID, tokensSlash); - } -} diff --git a/packages/subgraph-service/test/disputeManager/disputes/cancel.t.sol b/packages/subgraph-service/test/disputeManager/disputes/cancel.t.sol deleted file mode 100644 index abd55e051..000000000 --- a/packages/subgraph-service/test/disputeManager/disputes/cancel.t.sol +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; -import { DisputeManagerTest } from "../DisputeManager.t.sol"; - -contract DisputeManagerCancelDisputeTest is DisputeManagerTest { - - /* - * TESTS - */ - - function testCancel_Dispute( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); - - // skip to end of dispute period - skip(disputePeriod + 1); - - resetPrank(users.fisherman); - disputeManager.cancelDispute(disputeID); - - assertEq(token.balanceOf(users.fisherman), fishermanPreviousBalance, "Fisherman should receive their deposit back."); - } - - function testCancel_QueryDisputeConflicting( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); - - resetPrank(users.fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( - attestationData1, - attestationData2 - ); - - // skip to end of dispute period - skip(disputePeriod + 1); - - disputeManager.cancelDispute(disputeID1); - - (, , , , , IDisputeManager.DisputeStatus status1, ,) = disputeManager.disputes(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status2, ,) = disputeManager.disputes(disputeID2); - assertTrue(status1 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 1 should be cancelled."); - assertTrue(status2 == IDisputeManager.DisputeStatus.Cancelled, "Dispute 2 should be cancelled."); - } - - function testCancel_RevertIf_CallerIsNotFisherman( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); - - resetPrank(users.arbitrator); - vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotFisherman.selector)); - disputeManager.cancelDispute(disputeID); - } -} diff --git a/packages/subgraph-service/test/disputeManager/disputes/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/create.t.sol deleted file mode 100644 index 05147ec73..000000000 --- a/packages/subgraph-service/test/disputeManager/disputes/create.t.sol +++ /dev/null @@ -1,146 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; -import { DisputeManagerTest } from "../DisputeManager.t.sol"; - -contract DisputeManagerCreateDisputeTest is DisputeManagerTest { - - /* - * TESTS - */ - - function testCreate_IndexingDispute( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); - assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); - } - - function testCreate_QueryDispute( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - bytes32 disputeID = _createQueryDispute(); - assertTrue(disputeManager.isDisputeCreated(disputeID), "Dispute should be created."); - } - - function testCreate_QueryDisputeConflict( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); - - resetPrank(users.fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( - attestationData1, - attestationData2 - ); - assertTrue(disputeManager.isDisputeCreated(disputeID1), "Dispute 1 should be created."); - assertTrue(disputeManager.isDisputeCreated(disputeID2), "Dispute 2 should be created."); - } - - function testCreate_RevertWhen_DisputeAlreadyCreated( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); - - // Create another dispute with different fisherman - address otherFisherman = makeAddr("otherFisherman"); - resetPrank(otherFisherman); - mint(otherFisherman, disputeDeposit); - token.approve(address(disputeManager), disputeDeposit); - bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerDisputeAlreadyCreated.selector, - disputeID - ); - vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI1")); - vm.stopPrank(); - } - - function testCreate_RevertIf_TokensNotApproved() public useFisherman { - bytes memory expectedError = abi.encodeWithSignature( - "ERC20InsufficientAllowance(address,uint256,uint256)", - address(disputeManager), - 0, - disputeDeposit - ); - vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI3")); - vm.stopPrank(); - } - - function testCreate_RevertIf_AllocationDoesNotExist() public useFisherman { - token.approve(address(disputeManager), disputeDeposit); - bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerIndexerNotFound.selector, - allocationID - ); - vm.expectRevert(expectedError); - disputeManager.createIndexingDispute(allocationID, bytes32("POI4")); - vm.stopPrank(); - } - - function testCreate_RevertIf_ConflictingAttestationsResponsesAreTheSame() public useFisherman { - bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); - bytes32 responseCID = keccak256(abi.encodePacked("Response CID")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( - responseCID, - subgraphDeploymentId, - responseCID, - subgraphDeploymentId - ); - - bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerNonConflictingAttestations.selector, - requestCID, - responseCID, - subgraphDeploymentId, - requestCID, - responseCID, - subgraphDeploymentId - ); - vm.expectRevert(expectedError); - disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); - } - - function testCreate_RevertIf_ConflictingAttestationsHaveDifferentSubgraph() public { - bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId1 = keccak256(abi.encodePacked("Subgraph Deployment ID 1")); - bytes32 subgraphDeploymentId2 = keccak256(abi.encodePacked("Subgraph Deployment ID 2")); - - (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( - responseCID1, - subgraphDeploymentId1, - responseCID2, - subgraphDeploymentId2 - ); - - vm.prank(users.fisherman); - bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerNonConflictingAttestations.selector, - requestCID, - responseCID1, - subgraphDeploymentId1, - requestCID, - responseCID2, - subgraphDeploymentId2 - ); - vm.expectRevert(expectedError); - disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); - } -} diff --git a/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol b/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol new file mode 100644 index 000000000..cd229dbc4 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; + +contract DisputeManagerDisputeTest is DisputeManagerTest { + using PPMMath for uint256; + + /* + * TESTS + */ + + function test_Dispute_Accept_RevertIf_DisputeDoesNotExist( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + bytes32 disputeID = bytes32("0x0"); + + resetPrank(users.arbitrator); + vm.expectRevert(abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidDispute.selector, + disputeID + )); + disputeManager.acceptDispute(disputeID, tokensSlash); + } + + function test_Dispute_Accept_RevertIf_SlashZeroTokens( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI101")); + + // attempt to accept dispute with 0 tokens slashed + resetPrank(users.arbitrator); + uint256 maxTokensToSlash = uint256(maxSlashingPercentage).mulPPM(tokens); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerInvalidTokensSlash.selector, 0, maxTokensToSlash)); + disputeManager.acceptDispute(disputeID, 0); + } + + function test_Dispute_Reject_RevertIf_DisputeDoesNotExist( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + bytes32 disputeID = bytes32("0x0"); + + resetPrank(users.arbitrator); + vm.expectRevert(abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidDispute.selector, + disputeID + )); + disputeManager.rejectDispute(disputeID); + } + + function test_Dispute_Draw_RevertIf_DisputeDoesNotExist( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + bytes32 disputeID = bytes32("0x0"); + + resetPrank(users.arbitrator); + vm.expectRevert(abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidDispute.selector, + disputeID + )); + disputeManager.drawDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/draw.t.sol b/packages/subgraph-service/test/disputeManager/disputes/draw.t.sol deleted file mode 100644 index 75dabaa2f..000000000 --- a/packages/subgraph-service/test/disputeManager/disputes/draw.t.sol +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; -import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; -import { DisputeManagerTest } from "../DisputeManager.t.sol"; - -contract DisputeManagerDrawDisputeTest is DisputeManagerTest { - - /* - * TESTS - */ - - function testDraw_Dispute( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - uint256 fishermanPreviousBalance = token.balanceOf(users.fisherman); - bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI32")); - - resetPrank(users.arbitrator); - disputeManager.drawDispute(disputeID); - - assertEq(token.balanceOf(users.fisherman), fishermanPreviousBalance, "Fisherman should receive their deposit back."); - } - - function testDraw_QueryDisputeConflicting( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); - bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); - bytes32 subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); - - (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( - responseCID1, - subgraphDeploymentId, - responseCID2, - subgraphDeploymentId - ); - - resetPrank(users.fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = disputeManager.createQueryDisputeConflict( - attestationData1, - attestationData2 - ); - - resetPrank(users.arbitrator); - disputeManager.drawDispute(disputeID1); - - (, , , , , IDisputeManager.DisputeStatus status1, ,) = disputeManager.disputes(disputeID1); - (, , , , , IDisputeManager.DisputeStatus status2, ,) = disputeManager.disputes(disputeID2); - assertTrue(status1 == IDisputeManager.DisputeStatus.Drawn, "Dispute 1 should be drawn."); - assertTrue(status2 == IDisputeManager.DisputeStatus.Drawn, "Dispute 2 should be drawn."); - } - - function testDraw_RevertIf_CallerIsNotArbitrator( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - bytes32 disputeID = _createIndexingDispute(allocationID,bytes32("POI1")); - - // attempt to draw dispute as fisherman - resetPrank(users.fisherman); - vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); - disputeManager.drawDispute(disputeID); - } -} diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol new file mode 100644 index 000000000..5e0d36132 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { + using PPMMath for uint256; + + /* + * TESTS + */ + + function test_Indexing_Accept_Dispute( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + resetPrank(users.fisherman); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); + + resetPrank(users.arbitrator); + _acceptDispute(disputeID, tokensSlash); + } + + function test_Indexing_Accept_RevertIf_CallerIsNotArbitrator( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + resetPrank(users.fisherman); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); + + // attempt to accept dispute as fisherman + resetPrank(users.fisherman); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.acceptDispute(disputeID, tokensSlash); + } + + function test_Indexing_Accept_RevertWhen_SlashingOverMaxSlashPercentage( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + tokensSlash = bound(tokensSlash, uint256(maxSlashingPercentage).mulPPM(tokens) + 1, type(uint256).max); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI101")); + + // max slashing percentage is 50% + resetPrank(users.arbitrator); + uint256 maxTokensToSlash = uint256(maxSlashingPercentage).mulPPM(tokens); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidTokensSlash.selector, + tokensSlash, + maxTokensToSlash + ); + vm.expectRevert(expectedError); + disputeManager.acceptDispute(disputeID, tokensSlash); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/cancel.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/cancel.t.sol new file mode 100644 index 000000000..0a09ad7f4 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/cancel.t.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerIndexingCancelDisputeTest is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Indexing_Cancel_Dispute(uint256 tokens) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1")); + + _cancelDispute(disputeID); + } + + function test_Indexing_Cancel_RevertIf_CallerIsNotFisherman( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1")); + + resetPrank(users.arbitrator); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotFisherman.selector)); + disputeManager.cancelDispute(disputeID); + } + + function test_Indexing_Cancel_RevertIf_DisputePeriodNotOver( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1")); + + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerDisputePeriodNotFinished.selector)); + disputeManager.cancelDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol new file mode 100644 index 000000000..0174315a2 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerIndexingCreateDisputeTest is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Indexing_Create_Dispute( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + _createIndexingDispute(allocationID, bytes32("POI1")); + } + + function test_Indexing_Create_MultipleDisputes() public { + uint256 tokens = 10000 ether; + uint8 numIndexers = 10; + uint256[] memory allocationIDPrivateKeys = new uint256[](numIndexers); + for (uint i = 0; i < numIndexers; i++) { + string memory indexerName = string(abi.encodePacked("Indexer ", i)); + address indexer = createUser(indexerName); + vm.assume(indexer != address(0)); + + resetPrank(indexer); + mint(indexer, tokens); + _createProvision(indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(indexer, abi.encode("url", "geoHash", address(0))); + uint256 allocationIDPrivateKey = uint256(keccak256(abi.encodePacked(i))); + bytes memory data = _createSubgraphAllocationData(indexer, subgraphDeployment, allocationIDPrivateKey, tokens); + _startService(indexer, data); + allocationIDPrivateKeys[i] = allocationIDPrivateKey; + } + + resetPrank(users.fisherman); + for (uint i = 0; i < allocationIDPrivateKeys.length; i++) { + _createIndexingDispute(vm.addr(allocationIDPrivateKeys[i]), bytes32("POI1")); + } + } + + function test_Indexing_Create_RevertWhen_DisputeAlreadyCreated( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1")); + + // Create another dispute with different fisherman + address otherFisherman = makeAddr("otherFisherman"); + resetPrank(otherFisherman); + mint(otherFisherman, disputeDeposit); + token.approve(address(disputeManager), disputeDeposit); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerDisputeAlreadyCreated.selector, + disputeID + ); + vm.expectRevert(expectedError); + disputeManager.createIndexingDispute(allocationID, bytes32("POI1")); + vm.stopPrank(); + } + + function test_Indexing_Create_RevertIf_DepositUnderMinimum(uint256 tokensDeposit) public useFisherman { + tokensDeposit = bound(tokensDeposit, 0, disputeDeposit - 1); + token.approve(address(disputeManager), tokensDeposit); + bytes memory expectedError = abi.encodeWithSignature( + "ERC20InsufficientAllowance(address,uint256,uint256)", + address(disputeManager), + tokensDeposit, + disputeDeposit + ); + vm.expectRevert(expectedError); + disputeManager.createIndexingDispute(allocationID, bytes32("POI3")); + vm.stopPrank(); + } + + function test_Indexing_Create_RevertIf_AllocationDoesNotExist( + uint256 tokens + ) public useFisherman { + tokens = bound(tokens, disputeDeposit, 10_000_000_000 ether); + token.approve(address(disputeManager), tokens); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerIndexerNotFound.selector, + allocationID + ); + vm.expectRevert(expectedError); + disputeManager.createIndexingDispute(allocationID, bytes32("POI4")); + vm.stopPrank(); + } + + function test_Indexing_Create_RevertIf_IndexerIsBelowStake( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // Close allocation + bytes memory data = abi.encode(allocationID); + _stopService(users.indexer, data); + // Thaw, deprovision and unstake + address subgraphDataServiceAddress = address(subgraphService); + _thawDeprovisionAndUnstake(users.indexer, subgraphDataServiceAddress, tokens); + + // Attempt to create dispute + resetPrank(users.fisherman); + token.approve(address(disputeManager), tokens); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerZeroTokens.selector)); + disputeManager.createIndexingDispute(allocationID, bytes32("POI1")); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/draw.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/draw.t.sol new file mode 100644 index 000000000..3df590f74 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/draw.t.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerIndexingDrawDisputeTest is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Indexing_Draw_Dispute(uint256 tokens) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI32")); + + resetPrank(users.arbitrator); + _drawDispute(disputeID); + } + + function test_Indexing_Draw_RevertIf_CallerIsNotArbitrator( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + bytes32 disputeID = _createIndexingDispute(allocationID,bytes32("POI1")); + + // attempt to draw dispute as fisherman + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.drawDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/reject.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/reject.t.sol new file mode 100644 index 000000000..5401c0afe --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/reject.t.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerIndexingRejectDisputeTest is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Indexing_Reject_Dispute(uint256 tokens) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); + + resetPrank(users.arbitrator); + _rejectDispute(disputeID); + } + + function test_Indexing_Reject_RevertIf_CallerIsNotArbitrator( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1")); + + // attempt to accept dispute as fisherman + resetPrank(users.fisherman); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.rejectDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol new file mode 100644 index 000000000..d0f00234d --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { Attestation } from "../../../../contracts/libraries/Attestation.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { + using PPMMath for uint256; + + bytes32 private requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 private responseCID = keccak256(abi.encodePacked("Response CID")); + bytes32 private subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + /* + * TESTS + */ + + function test_Query_Accept_Dispute( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + resetPrank(users.arbitrator); + _acceptDispute(disputeID, tokensSlash); + } + + function test_Query_Accept_RevertIf_CallerIsNotArbitrator( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + // attempt to accept dispute as fisherman + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.acceptDispute(disputeID, tokensSlash); + } + + function test_Query_Accept_RevertWhen_SlashingOverMaxSlashPercentage( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, uint256(maxSlashingPercentage).mulPPM(tokens) + 1, type(uint256).max); + + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + // max slashing percentage is 50% + resetPrank(users.arbitrator); + uint256 maxTokensToSlash = uint256(maxSlashingPercentage).mulPPM(tokens); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidTokensSlash.selector, + tokensSlash, + maxTokensToSlash + ); + vm.expectRevert(expectedError); + disputeManager.acceptDispute(disputeID, tokensSlash); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/cancel.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/cancel.t.sol new file mode 100644 index 000000000..a61db6ad9 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/query/cancel.t.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { Attestation } from "../../../../contracts/libraries/Attestation.sol"; +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryCancelDisputeTest is DisputeManagerTest { + + bytes32 private requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 private responseCID = keccak256(abi.encodePacked("Response CID")); + bytes32 private subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + /* + * TESTS + */ + + function test_Query_Cancel_Dispute(uint256 tokens) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + _cancelDispute(disputeID); + } + + function test_Query_Cancel_RevertIf_CallerIsNotFisherman( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + resetPrank(users.arbitrator); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotFisherman.selector)); + disputeManager.cancelDispute(disputeID); + } + + function test_Query_Cancel_RevertIf_DisputePeriodNotOver( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerDisputePeriodNotFinished.selector)); + disputeManager.cancelDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol new file mode 100644 index 000000000..01f27cf66 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { Attestation } from "../../../../contracts/libraries/Attestation.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryCreateDisputeTest is DisputeManagerTest { + + bytes32 private requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 private responseCID = keccak256(abi.encodePacked("Response CID")); + bytes32 private subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + /* + * TESTS + */ + + function test_Query_Create_Dispute(uint256 tokens) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + _createQueryDispute(attestationData); + } + + function test_Query_Create_MultipleDisputes_DifferentFisherman( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + _createQueryDispute(attestationData); + + // Create another dispute with different fisherman + address otherFisherman = makeAddr("otherFisherman"); + resetPrank(otherFisherman); + mint(otherFisherman, MAX_TOKENS); + Attestation.Receipt memory otherFishermanReceipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory otherFishermanAttestationData = _createAtestationData(otherFishermanReceipt, allocationIDPrivateKey); + _createQueryDispute(otherFishermanAttestationData); + } + + function test_Query_Create_MultipleDisputes_DifferentIndexer( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // Create first dispute for indexer + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + _createQueryDispute(attestationData); + + // Setup new indexer + address newIndexer = makeAddr("newIndexer"); + uint256 newAllocationIDKey = uint256(keccak256(abi.encodePacked("newAllocationID"))); + mint(newIndexer, tokens); + resetPrank(newIndexer); + _createProvision(newIndexer, tokens, maxSlashingPercentage, disputePeriod); + _register(newIndexer, abi.encode("url", "geoHash", 0x0)); + bytes memory data = _createSubgraphAllocationData(newIndexer, subgraphDeployment, newAllocationIDKey, tokens); + _startService(newIndexer, data); + + // Create another dispute with same receipt but different indexer + resetPrank(users.fisherman); + bytes memory attestationData2 = _createAtestationData(receipt, newAllocationIDKey); + _createQueryDispute(attestationData2); + } + + function test_Query_Create_RevertIf_Duplicate(uint256 tokens) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + Attestation.Receipt memory newReceipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory newAttestationData = _createAtestationData(newReceipt, allocationIDPrivateKey); + token.approve(address(disputeManager), disputeDeposit); + vm.expectRevert(abi.encodeWithSelector( + IDisputeManager.DisputeManagerDisputeAlreadyCreated.selector, + disputeID + )); + disputeManager.createQueryDispute(newAttestationData); + } + + function test_Query_Create_RevertIf_DepositUnderMinimum(uint256 tokensDispute) public useFisherman { + tokensDispute = bound(tokensDispute, 0, disputeDeposit - 1); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + + token.approve(address(disputeManager), tokensDispute); + bytes memory expectedError = abi.encodeWithSignature( + "ERC20InsufficientAllowance(address,uint256,uint256)", + address(disputeManager), + tokensDispute, + disputeDeposit + ); + vm.expectRevert(expectedError); + disputeManager.createQueryDispute(attestationData); + } + + function test_Query_Create_RevertIf_AllocationDoesNotExist( + uint256 tokens + ) public useFisherman { + tokens = bound(tokens, disputeDeposit, 10_000_000_000 ether); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + token.approve(address(disputeManager), tokens); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerIndexerNotFound.selector, + allocationID + ); + vm.expectRevert(expectedError); + disputeManager.createQueryDispute(attestationData); + vm.stopPrank(); + } + + function test_Query_Create_RevertIf_IndexerIsBelowStake( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // Close allocation + bytes memory data = abi.encode(allocationID); + _stopService(users.indexer, data); + + // Thaw, deprovision and unstake + address subgraphDataServiceAddress = address(subgraphService); + _thawDeprovisionAndUnstake(users.indexer, subgraphDataServiceAddress, tokens); + + // Atempt to create dispute + resetPrank(users.fisherman); + token.approve(address(disputeManager), tokens); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerZeroTokens.selector)); + disputeManager.createQueryDispute(attestationData); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/draw.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/draw.t.sol new file mode 100644 index 000000000..1b9c96ad2 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/query/draw.t.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { Attestation } from "../../../../contracts/libraries/Attestation.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryDrawDisputeTest is DisputeManagerTest { + + bytes32 private requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 private responseCID = keccak256(abi.encodePacked("Response CID")); + bytes32 private subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + /* + * TESTS + */ + + function test_Query_Draw_Dispute( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + resetPrank(users.arbitrator); + _drawDispute(disputeID); + } + + function test_Query_Draw_RevertIf_CallerIsNotArbitrator( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + // attempt to draw dispute as fisherman + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.drawDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/reject.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/reject.t.sol new file mode 100644 index 000000000..07c738a90 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/query/reject.t.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { Attestation } from "../../../../contracts/libraries/Attestation.sol"; +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryRejectDisputeTest is DisputeManagerTest { + + bytes32 private requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 private responseCID = keccak256(abi.encodePacked("Response CID")); + bytes32 private subgraphDeploymentId = keccak256(abi.encodePacked("Subgraph Deployment ID")); + + /* + * TESTS + */ + + function test_Query_Reject_Dispute( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + resetPrank(users.arbitrator); + _rejectDispute(disputeID); + } + + function test_Query_Reject_RevertIf_CallerIsNotArbitrator( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + // attempt to accept dispute as fisherman + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.rejectDispute(disputeID); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol new file mode 100644 index 000000000..1cfde0a8c --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { + using PPMMath for uint256; + + bytes32 private requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 private responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 private responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + + /* + * TESTS + */ + + function test_Query_Conflict_Accept_Dispute( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + + resetPrank(users.arbitrator); + _acceptDispute(disputeID1, tokensSlash); + } + + function test_Query_Conflict_Accept_RevertIf_CallerIsNotArbitrator( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + + // attempt to accept dispute as fisherman + resetPrank(users.fisherman); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.acceptDispute(disputeID1, tokensSlash); + } + + function test_Query_Conflict_Accept_RevertWhen_SlashingOverMaxSlashPercentage( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, uint256(maxSlashingPercentage).mulPPM(tokens) + 1, type(uint256).max); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + + // max slashing percentage is 50% + resetPrank(users.arbitrator); + uint256 maxTokensToSlash = uint256(maxSlashingPercentage).mulPPM(tokens); + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerInvalidTokensSlash.selector, + tokensSlash, + maxTokensToSlash + ); + vm.expectRevert(expectedError); + disputeManager.acceptDispute(disputeID1, tokensSlash); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/cancel.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/cancel.t.sol new file mode 100644 index 000000000..4de2b3155 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/cancel.t.sol @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryConflictCancelDisputeTest is DisputeManagerTest { + + bytes32 private requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 private responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 private responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + + /* + * TESTS + */ + + function test_Query_Conflict_Cancel_Dispute( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + + _cancelDispute(disputeID1); + } + + function test_Query_Conflict_Cancel_RevertIf_CallerIsNotFisherman( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + + resetPrank(users.indexer); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotFisherman.selector)); + disputeManager.cancelDispute(disputeID1); + } + + function test_Query_Conflict_Cancel_RevertIf_DisputePeriodNotOver( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + + resetPrank(users.fisherman); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerDisputePeriodNotFinished.selector)); + disputeManager.cancelDispute(disputeID1); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/create.t.sol new file mode 100644 index 000000000..2f54983ae --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/create.t.sol @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { Attestation } from "../../../../contracts/libraries/Attestation.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryConflictCreateDisputeTest is DisputeManagerTest { + + bytes32 private requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 private responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 private responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + + /* + * TESTS + */ + + function test_Query_Conflict_Create_DisputeAttestation( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + _createQueryDisputeConflict(attestationData1, attestationData2); + } + + function test_Query_Conflict_Create_DisputeAttestationDifferentIndexers( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // Setup new indexer + address newIndexer = makeAddr("newIndexer"); + uint256 newAllocationIDKey = uint256(keccak256(abi.encodePacked("newAllocationID"))); + mint(newIndexer, tokens); + resetPrank(newIndexer); + _createProvision(newIndexer, tokens, maxSlashingPercentage, disputePeriod); + _register(newIndexer, abi.encode("url", "geoHash", 0x0)); + bytes memory data = _createSubgraphAllocationData(newIndexer, subgraphDeployment, newAllocationIDKey, tokens); + _startService(newIndexer, data); + + // Create query conflict dispute + resetPrank(users.fisherman); + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + newAllocationIDKey + ); + + _createQueryDisputeConflict(attestationData1, attestationData2); + } + + function test_Query_Conflict_Create_RevertIf_AttestationsResponsesAreTheSame() public useFisherman { + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID1, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerNonConflictingAttestations.selector, + requestCID, + responseCID1, + subgraphDeployment, + requestCID, + responseCID1, + subgraphDeployment + ); + vm.expectRevert(expectedError); + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + } + + function test_Query_Conflict_Create_RevertIf_AttestationsHaveDifferentSubgraph() public useFisherman { + bytes32 subgraphDeploymentId2 = keccak256(abi.encodePacked("Subgraph Deployment ID 2")); + + Attestation.Receipt memory receipt1 = _createAttestationReceipt(requestCID, responseCID1, subgraphDeployment); + bytes memory attestationData1 = _createAtestationData(receipt1, allocationIDPrivateKey); + + Attestation.Receipt memory receipt2 = _createAttestationReceipt(requestCID, responseCID2, subgraphDeploymentId2); + bytes memory attestationData2 = _createAtestationData(receipt2, allocationIDPrivateKey); + + bytes memory expectedError = abi.encodeWithSelector( + IDisputeManager.DisputeManagerNonConflictingAttestations.selector, + requestCID, + responseCID1, + subgraphDeployment, + requestCID, + responseCID2, + subgraphDeploymentId2 + ); + vm.expectRevert(expectedError); + disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/draw.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/draw.t.sol new file mode 100644 index 000000000..5127b56a5 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/draw.t.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryConflictDrawDisputeTest is DisputeManagerTest { + + bytes32 private requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 private responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 private responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + + /* + * TESTS + */ + + function test_Query_Conflict_Draw_Dispute( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + + resetPrank(users.arbitrator); + _drawDispute(disputeID1); + } + + function test_Query_Conflict_Draw_RevertIf_CallerIsNotArbitrator( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + + // attempt to draw dispute as fisherman + resetPrank(users.fisherman); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); + disputeManager.drawDispute(disputeID1); + } +} diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol new file mode 100644 index 000000000..078969267 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../../DisputeManager.t.sol"; + +contract DisputeManagerQueryConflictRejectDisputeTest is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Query_Conflict_Reject_Revert( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); + bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); + bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1, bytes32 disputeID2) = _createQueryDisputeConflict(attestationData1, attestationData2); + + resetPrank(users.arbitrator); + vm.expectRevert(abi.encodeWithSelector( + IDisputeManager.DisputeManagerMustAcceptRelatedDispute.selector, + disputeID1, + disputeID2 + )); + disputeManager.rejectDispute(disputeID1); + } +} diff --git a/packages/subgraph-service/test/disputeManager/governance/arbitrator.t.sol b/packages/subgraph-service/test/disputeManager/governance/arbitrator.t.sol new file mode 100644 index 000000000..53e36a497 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/governance/arbitrator.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +contract DisputeManagerGovernanceArbitratorTest is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Governance_SetArbitrator() public useGovernor { + address arbitrator = makeAddr("newArbitrator"); + _setArbitrator(arbitrator); + } + + function test_Governance_RevertWhen_ZeroAddress() public useGovernor { + address arbitrator = address(0); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerInvalidZeroAddress.selector)); + disputeManager.setArbitrator(arbitrator); + } + + function test_Governance_RevertWhen_NotGovernor() public useFisherman { + address arbitrator = makeAddr("newArbitrator"); + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, users.fisherman)); + disputeManager.setArbitrator(arbitrator); + } +} diff --git a/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol b/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol new file mode 100644 index 000000000..163157886 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +contract DisputeManagerGovernanceDisputeDepositTest is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Governance_SetDisputeDeposit(uint256 disputeDeposit) public useGovernor { + vm.assume(disputeDeposit > 0); + _setDisputeDeposit(disputeDeposit); + } + + function test_Governance_RevertWhen_ZeroValue() public useGovernor { + uint256 disputeDeposit = 0; + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerInvalidDisputeDeposit.selector, disputeDeposit)); + disputeManager.setDisputeDeposit(disputeDeposit); + } + + function test_Governance_RevertWhen_NotGovernor() public useFisherman { + uint256 disputeDeposit = 100 ether; + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, users.fisherman)); + disputeManager.setDisputeDeposit(disputeDeposit); + } +} diff --git a/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol b/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol index 0c821e2a2..5a09bdd03 100644 --- a/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol +++ b/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol @@ -13,10 +13,9 @@ contract DisputeManagerGovernanceFishermanRewardCutTest is DisputeManagerTest { * TESTS */ - function test_Governance_SetFishermanRewardCut() public useGovernor { - uint32 fishermanRewardCut = 1000; - disputeManager.setFishermanRewardCut(fishermanRewardCut); - assertEq(disputeManager.fishermanRewardCut(), fishermanRewardCut, "Fisherman reward cut should be set."); + function test_Governance_SetFishermanRewardCut(uint32 fishermanRewardCut) public useGovernor { + vm.assume(fishermanRewardCut <= disputeManager.MAX_FISHERMAN_REWARD_CUT()); + _setFishermanRewardCut(fishermanRewardCut); } function test_Governance_RevertWhen_OverMaximumValue(uint32 fishermanRewardCut) public useGovernor { diff --git a/packages/subgraph-service/test/disputeManager/governance/maxSlashingCut.t.sol b/packages/subgraph-service/test/disputeManager/governance/maxSlashingCut.t.sol new file mode 100644 index 000000000..343e514bc --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/governance/maxSlashingCut.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +contract DisputeManagerGovernanceMaxSlashingCutTest is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Governance_SetMaxSlashingCut(uint32 maxSlashingCut) public useGovernor { + vm.assume(maxSlashingCut <= MAX_PPM); + _setMaxSlashingCut(maxSlashingCut); + } + + function test_Governance_RevertWhen_NotPPM(uint32 maxSlashingCut) public useGovernor { + vm.assume(maxSlashingCut > MAX_PPM); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerInvalidMaxSlashingCut.selector, maxSlashingCut)); + disputeManager.setMaxSlashingCut(maxSlashingCut); + } + + function test_Governance_RevertWhen_NotGovernor() public useFisherman { + uint32 maxSlashingCut = 1000; + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, users.fisherman)); + disputeManager.setMaxSlashingCut(maxSlashingCut); + } +} diff --git a/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol b/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol new file mode 100644 index 000000000..28a22e1a2 --- /dev/null +++ b/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; +import { IHorizonStakingTypes } from "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol"; + +import { SubgraphBaseTest } from "../SubgraphBaseTest.t.sol"; + +abstract contract HorizonStakingSharedTest is SubgraphBaseTest { + + /* + * HELPERS + */ + + function _createProvision( + address _indexer, + uint256 _tokens, + uint32 _maxSlashingPercentage, + uint64 _disputePeriod + ) internal { + _stakeTo(_indexer, _tokens); + staking.provision(_indexer, address(subgraphService), _tokens, _maxSlashingPercentage, _disputePeriod); + } + + function _addToProvision(address _indexer, uint256 _tokens) internal { + _stakeTo(_indexer, _tokens); + staking.addToProvision(_indexer, address(subgraphService), _tokens); + } + + function _delegate(address _indexer, address _verifier, uint256 _tokens, uint256 _minSharesOut) internal { + staking.delegate(_indexer, _verifier, _tokens, _minSharesOut); + } + + function _setDelegationFeeCut( + address _indexer, + address _verifier, + IGraphPayments.PaymentTypes _paymentType, + uint256 _cut + ) internal { + staking.setDelegationFeeCut(_indexer, _verifier, _paymentType, _cut); + } + + function _thawDeprovisionAndUnstake(address _indexer, address _verifier, uint256 _tokens) internal { + // Initiate thaw request + staking.thaw(_indexer, _verifier, _tokens); + + // Skip thawing period + IHorizonStakingTypes.Provision memory provision = staking.getProvision(_indexer, _verifier); + skip(provision.thawingPeriod + 1); + + // Deprovision and unstake + staking.deprovision(_indexer, _verifier, 0); + staking.unstake(_tokens); + } + + function _setProvisionParameters( + address _indexer, + address _verifier, + uint32 _maxVerifierCut, + uint64 _thawingPeriod + ) internal { + staking.setProvisionParameters(_indexer, _verifier, _maxVerifierCut, _thawingPeriod); + } + + /* + * PRIVATE + */ + + function _stakeTo(address _indexer, uint256 _tokens) private { + token.approve(address(staking), _tokens); + staking.stakeTo(_indexer, _tokens); + } +} diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol index 8c0b9d0fe..1067acf14 100644 --- a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -3,9 +3,14 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { SubgraphBaseTest } from "../SubgraphBaseTest.t.sol"; +import { Allocation } from "../../contracts/libraries/Allocation.sol"; +import { AllocationManager } from "../../contracts/utilities/AllocationManager.sol"; +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { ISubgraphService } from "../../contracts/interfaces/ISubgraphService.sol"; -abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { +import { HorizonStakingSharedTest } from "./HorizonStakingShared.t.sol"; + +abstract contract SubgraphServiceSharedTest is HorizonStakingSharedTest { /* * VARIABLES @@ -28,9 +33,22 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { modifier useAllocation(uint256 tokens) { vm.assume(tokens > minimumProvisionTokens); vm.assume(tokens < 10_000_000_000 ether); - _createProvision(tokens); - _registerIndexer(address(0)); - _startService(tokens); + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + bytes memory data = _createSubgraphAllocationData(users.indexer, subgraphDeployment, allocationIDPrivateKey, tokens); + _startService(users.indexer, data); + _; + } + + modifier useDelegation(uint256 tokens) { + // 1e18 is the minimum delegation amount until L2 transfers are removed + vm.assume(tokens > 1e18); + vm.assume(tokens < 10_000_000_000 ether); + (, address msgSender,) = vm.readCallers(); + resetPrank(users.delegator); + token.approve(address(staking), tokens); + _delegate(users.indexer, address(subgraphService), tokens, 0); + resetPrank(msgSender); _; } @@ -45,29 +63,109 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { } /* - * HELPERS + * ACTIONS */ - function _createProvision(uint256 tokens) internal { - _stakeTo(users.indexer, tokens); - staking.provision(users.indexer, address(subgraphService), tokens, maxSlashingPercentage, disputePeriod); + function _register(address _indexer, bytes memory _data) internal { + (string memory url, string memory geohash, address rewardsDestination) = abi.decode( + _data, + (string, string, address) + ); + + vm.expectEmit(address(subgraphService)); + emit IDataService.ServiceProviderRegistered( + _indexer, + _data + ); + + // Register indexer + subgraphService.register(_indexer, _data); + + // Check registered indexer data + ISubgraphService.Indexer memory indexer = _getIndexer(_indexer); + assertEq(indexer.registeredAt, block.timestamp); + assertEq(indexer.url, url); + assertEq(indexer.geoHash, geohash); + + // Check rewards destination + assertEq(subgraphService.rewardsDestination(_indexer), rewardsDestination); } - function _addToProvision(address _indexer, uint256 _tokens) internal { - _stakeTo(_indexer, _tokens); - staking.addToProvision(_indexer, address(subgraphService), _tokens); + function _startService(address _indexer, bytes memory _data) internal { + (bytes32 subgraphDeploymentId, uint256 tokens, address allocationId,) = abi.decode( + _data, + (bytes32, uint256, address, bytes) + ); + uint256 previousSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeploymentId); + + vm.expectEmit(address(subgraphService)); + emit IDataService.ServiceStarted(_indexer, _data); + + // TODO: improve this + uint256 accRewardsPerAllocatedToken = 0; + if (rewardsManager.subgraphs(subgraphDeploymentId)) { + accRewardsPerAllocatedToken = rewardsManager.rewardsPerSubgraphAllocationUpdate(); + } + + // Start service + subgraphService.startService(_indexer, _data); + + // Check allocation data + Allocation.State memory allocation = subgraphService.getAllocation(allocationId); + assertEq(allocation.tokens, tokens); + assertEq(allocation.indexer, _indexer); + assertEq(allocation.subgraphDeploymentId, subgraphDeploymentId); + assertEq(allocation.createdAt, block.timestamp); + assertEq(allocation.closedAt, 0); + assertEq(allocation.lastPOIPresentedAt, 0); + assertEq(allocation.accRewardsPerAllocatedToken, accRewardsPerAllocatedToken); + assertEq(allocation.accRewardsPending, 0); + + // Check subgraph deployment allocated tokens + uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeploymentId); + assertEq(subgraphAllocatedTokens, previousSubgraphAllocatedTokens + tokens); } - function _registerIndexer(address rewardsDestination) internal { - subgraphService.register(users.indexer, abi.encode("url", "geoHash", rewardsDestination)); + function _stopService(address _indexer, bytes memory _data) internal { + address allocationId = abi.decode(_data, (address)); + assertTrue(subgraphService.isActiveAllocation(allocationId)); + + Allocation.State memory allocation = subgraphService.getAllocation(allocationId); + uint256 previousSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(allocation.subgraphDeploymentId); + + vm.expectEmit(address(subgraphService)); + emit AllocationManager.AllocationClosed(_indexer, allocationId, allocation.subgraphDeploymentId, allocation.tokens); + emit IDataService.ServiceStopped(_indexer, _data); + + // stop allocation + subgraphService.stopService(_indexer, _data); + + // update allocation + allocation = subgraphService.getAllocation(allocationId); + + // check allocation + assertEq(allocation.closedAt, block.timestamp); + + // check subgraph deployment allocated tokens + uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeployment); + assertEq(subgraphAllocatedTokens, previousSubgraphAllocatedTokens - allocation.tokens); } - function _startService(uint256 tokens) internal { - bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + /* + * HELPERS + */ - bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); - subgraphService.startService(users.indexer, data); + function _createSubgraphAllocationData( + address _indexer, + bytes32 _subgraphDeployment, + uint256 _allocationIdPrivateKey, + uint256 _tokens + ) internal view returns (bytes memory) { + address allocationId = vm.addr(_allocationIdPrivateKey); + bytes32 digest = subgraphService.encodeAllocationProof(_indexer, allocationId); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(_allocationIdPrivateKey, digest); + + return abi.encode(_subgraphDeployment, _tokens, allocationId, abi.encodePacked(r, s, v)); } function _delegate(uint256 tokens) internal { @@ -76,11 +174,15 @@ abstract contract SubgraphServiceSharedTest is SubgraphBaseTest { } /* - * PRIVATE + * PRIVATE FUNCTIONS */ - function _stakeTo(address _indexer, uint256 _tokens) internal { - token.approve(address(staking), _tokens); - staking.stakeTo(_indexer, _tokens); + function _getIndexer(address _indexer) private view returns (ISubgraphService.Indexer memory) { + (uint256 registeredAt, string memory url, string memory geoHash) = subgraphService.indexers(_indexer); + return ISubgraphService.Indexer({ + registeredAt: registeredAt, + url: url, + geoHash: geoHash + }); } } diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 89b613344..12d20581f 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -6,11 +6,21 @@ import "forge-std/Test.sol"; import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { IHorizonStakingTypes } from "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol"; +import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { LinkedList } from "@graphprotocol/horizon/contracts/libraries/LinkedList.sol"; +import { IDataServiceFees } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol"; +import { Allocation } from "../../contracts/libraries/Allocation.sol"; +import { AllocationManager } from "../../contracts/utilities/AllocationManager.sol"; +import { ISubgraphService } from "../../contracts/interfaces/ISubgraphService.sol"; import { SubgraphServiceSharedTest } from "../shared/SubgraphServiceShared.t.sol"; contract SubgraphServiceTest is SubgraphServiceSharedTest { using PPMMath for uint256; + using Allocation for Allocation.State; + using LinkedList for LinkedList.List; /* * VARIABLES @@ -21,11 +31,18 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { */ modifier useOperator { - vm.startPrank(users.operator); + resetPrank(users.indexer); + staking.setOperator(users.operator, address(subgraphService), true); + resetPrank(users.operator); _; vm.stopPrank(); } + modifier useRewardsDestination { + _setRewardsDestination(users.rewardsDestination); + _; + } + /* * SET UP */ @@ -34,6 +51,285 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { super.setUp(); } + /* + * ACTIONS + */ + + function _setRewardsDestination(address _rewardsDestination) internal { + (, address indexer, ) = vm.readCallers(); + + vm.expectEmit(address(subgraphService)); + emit AllocationManager.RewardsDestinationSet(indexer, _rewardsDestination); + + // Set rewards destination + subgraphService.setRewardsDestination(_rewardsDestination); + + // Check rewards destination + assertEq(subgraphService.rewardsDestination(indexer), _rewardsDestination); + } + + function _acceptProvision(address _indexer, bytes memory _data) internal { + IHorizonStakingTypes.Provision memory provision = staking.getProvision(_indexer, address(subgraphService)); + uint32 maxVerifierCut = provision.maxVerifierCut; + uint64 thawingPeriod = provision.thawingPeriod; + uint32 maxVerifierCutPending = provision.maxVerifierCutPending; + uint64 thawingPeriodPending = provision.thawingPeriodPending; + + vm.expectEmit(address(subgraphService)); + emit IDataService.ProvisionAccepted(_indexer); + + // Accept provision + subgraphService.acceptProvision(_indexer, _data); + + // Update provision after acceptance + provision = staking.getProvision(_indexer, address(subgraphService)); + + // Check that max verifier cut updated to pending value if needed + if (maxVerifierCut != maxVerifierCutPending) { + assertEq(provision.maxVerifierCut, maxVerifierCutPending); + } + + // Check that thawing period updated to pending value if needed + if (thawingPeriod != thawingPeriodPending) { + assertEq(provision.thawingPeriod, thawingPeriodPending); + } + } + + function _resizeAllocation(address _indexer, address _allocationId, uint256 _tokens) internal { + // before state + Allocation.State memory beforeAllocation = subgraphService.getAllocation(_allocationId); + bytes32 subgraphDeploymentId = beforeAllocation.subgraphDeploymentId; + uint256 beforeSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeploymentId); + uint256 beforeAllocatedTokens = subgraphService.allocationProvisionTracker(_indexer); + + uint256 allocatedTokensDelta; + if (_tokens > beforeAllocation.tokens) { + allocatedTokensDelta = _tokens - beforeAllocation.tokens; + } else { + allocatedTokensDelta = beforeAllocation.tokens - _tokens; + } + + vm.expectEmit(address(subgraphService)); + emit AllocationManager.AllocationResized(_indexer, _allocationId, subgraphDeploymentId, _tokens, beforeSubgraphAllocatedTokens); + + // resize allocation + subgraphService.resizeAllocation(_indexer, _allocationId, _tokens); + + // after state + uint256 afterSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeploymentId); + uint256 afterAllocatedTokens = subgraphService.allocationProvisionTracker(_indexer); + Allocation.State memory afterAllocation = subgraphService.getAllocation(_allocationId); + uint256 accRewardsPerAllocatedTokenDelta = afterAllocation.accRewardsPerAllocatedToken - beforeAllocation.accRewardsPerAllocatedToken; + uint256 afterAccRewardsPending = rewardsManager.calcRewards(beforeAllocation.tokens, accRewardsPerAllocatedTokenDelta); + + // check state + if (_tokens > beforeAllocation.tokens) { + assertEq(afterAllocatedTokens, beforeAllocatedTokens + allocatedTokensDelta); + } else { + assertEq(afterAllocatedTokens, beforeAllocatedTokens - allocatedTokensDelta); + } + assertEq(afterAllocation.tokens, _tokens); + assertEq(afterAllocation.accRewardsPerAllocatedToken, rewardsPerSubgraphAllocationUpdate); + assertEq(afterAllocation.accRewardsPending, afterAccRewardsPending); + assertEq(afterSubgraphAllocatedTokens, _tokens); + } + + function _closeStaleAllocation(address _allocationId) internal { + assertTrue(subgraphService.isActiveAllocation(_allocationId)); + + Allocation.State memory allocation = subgraphService.getAllocation(_allocationId); + uint256 previousSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(allocation.subgraphDeploymentId); + + vm.expectEmit(address(subgraphService)); + emit AllocationManager.AllocationClosed(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, allocation.tokens); + + // close stale allocation + subgraphService.closeStaleAllocation(_allocationId); + + // update allocation + allocation = subgraphService.getAllocation(_allocationId); + + // check allocation + assertEq(allocation.closedAt, block.timestamp); + + // check subgraph deployment allocated tokens + uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeployment); + assertEq(subgraphAllocatedTokens, previousSubgraphAllocatedTokens - allocation.tokens); + } + + struct IndexingRewardsData { + bytes32 poi; + uint256 tokensIndexerRewards; + uint256 tokensDelegationRewards; + } + + struct QueryFeeData { + uint256 curationCut; + uint256 protocolPaymentCut; + } + + struct CollectPaymentData { + uint256 rewardsDestinationBalance; + uint256 indexerProvisionBalance; + uint256 delegationPoolBalance; + uint256 indexerBalance; + uint256 curationBalance; + uint256 lockedTokens; + } + + function _collect(address _indexer, IGraphPayments.PaymentTypes _paymentType, bytes memory _data) internal { + address allocationId; + uint256 paymentCollected = 0; + Allocation.State memory allocation; + CollectPaymentData memory collectPaymentDataBefore; + + // PaymentType.IndexingRewards variables + IndexingRewardsData memory indexingRewardsData; + uint32 delegationRatio = subgraphService.delegationRatio(); + address rewardsDestination = subgraphService.rewardsDestination(_indexer); + collectPaymentDataBefore.rewardsDestinationBalance = token.balanceOf(rewardsDestination); + collectPaymentDataBefore.indexerProvisionBalance = staking.getProviderTokensAvailable(_indexer, address(subgraphService)); + collectPaymentDataBefore.delegationPoolBalance = staking.getDelegatedTokensAvailable(_indexer, address(subgraphService)); + + // PaymentType.QueryFee variables + QueryFeeData memory queryFeeData; + queryFeeData.protocolPaymentCut = graphPayments.PROTOCOL_PAYMENT_CUT(); + collectPaymentDataBefore.indexerBalance = token.balanceOf(_indexer); + collectPaymentDataBefore.curationBalance = token.balanceOf(address(curation)); + collectPaymentDataBefore.lockedTokens = subgraphService.feesProvisionTracker(_indexer); + + if (_paymentType == IGraphPayments.PaymentTypes.QueryFee) { + // Recover RAV data + ITAPCollector.SignedRAV memory signedRav = abi.decode(_data, (ITAPCollector.SignedRAV)); + allocationId = abi.decode(signedRav.rav.metadata, (address)); + allocation = subgraphService.getAllocation(allocationId); + address payer = _recoverRAVSigner(signedRav); + + // Total amount of tokens collected for indexer + uint256 tokensCollected = tapCollector.tokensCollected(address(subgraphService), _indexer, payer); + // Find out how much of the payment was collected via this RAV + paymentCollected = signedRav.rav.valueAggregate - tokensCollected; + + // Calculate curation cut + uint256 curationFeesCut = subgraphService.curationFeesCut(); + queryFeeData.curationCut = curation.isCurated(allocation.subgraphDeploymentId) ? curationFeesCut : 0; + uint256 tokensCurators = paymentCollected.mulPPM(queryFeeData.curationCut); + + vm.expectEmit(address(subgraphService)); + emit ISubgraphService.QueryFeesCollected(_indexer, paymentCollected, tokensCurators); + } else if (_paymentType == IGraphPayments.PaymentTypes.IndexingRewards) { + // Recover IndexingRewards data + (allocationId, indexingRewardsData.poi) = abi.decode(_data, (address, bytes32)); + allocation = subgraphService.getAllocation(allocationId); + + // Calculate accumulated tokens, this depends on the rewards manager which we have mocked + uint256 accRewardsPerTokens = allocation.tokens.mulPPM(rewardsManager.rewardsPerSignal()); + // Calculate the payment collected by the indexer for this transaction + paymentCollected = accRewardsPerTokens - allocation.accRewardsPerAllocatedToken; + + uint256 delegatorCut = staking.getDelegationFeeCut( + allocation.indexer, + address(subgraphService), + // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead + IGraphPayments.PaymentTypes.IndexingFee + ); + indexingRewardsData.tokensDelegationRewards = paymentCollected.mulPPM(delegatorCut); + indexingRewardsData.tokensIndexerRewards = paymentCollected - indexingRewardsData.tokensDelegationRewards; + + vm.expectEmit(address(subgraphService)); + emit AllocationManager.IndexingRewardsCollected( + allocation.indexer, + allocationId, + allocation.subgraphDeploymentId, + paymentCollected, + indexingRewardsData.tokensIndexerRewards, + indexingRewardsData.tokensDelegationRewards, + indexingRewardsData.poi + ); + } + + vm.expectEmit(address(subgraphService)); + emit IDataService.ServicePaymentCollected(_indexer, _paymentType, paymentCollected); + + // collect rewards + subgraphService.collect(_indexer, _paymentType, _data); + + // Collect payment data after + CollectPaymentData memory collectPaymentDataAfter; + collectPaymentDataAfter.rewardsDestinationBalance = token.balanceOf(rewardsDestination); + collectPaymentDataAfter.indexerProvisionBalance = staking.getProviderTokensAvailable(_indexer, address(subgraphService)); + collectPaymentDataAfter.delegationPoolBalance = staking.getDelegatedTokensAvailable(_indexer, address(subgraphService)); + collectPaymentDataAfter.indexerBalance = token.balanceOf(_indexer); + collectPaymentDataAfter.curationBalance = token.balanceOf(address(curation)); + collectPaymentDataAfter.lockedTokens = subgraphService.feesProvisionTracker(_indexer); + + if (_paymentType == IGraphPayments.PaymentTypes.QueryFee) { + // Check indexer got paid the correct amount + uint256 tokensProtocol = paymentCollected.mulPPM(protocolPaymentCut); + uint256 curationTokens = paymentCollected.mulPPM(queryFeeData.curationCut); + uint256 expectedIndexerTokensPayment = paymentCollected - tokensProtocol - curationTokens; + assertEq(collectPaymentDataAfter.indexerBalance, collectPaymentDataBefore.indexerBalance + expectedIndexerTokensPayment); + + // Check curation got paid the correct amount + assertEq(collectPaymentDataAfter.curationBalance, collectPaymentDataBefore.curationBalance + curationTokens); + + // Check locked tokens + uint256 stakeToFeesRatio = subgraphService.stakeToFeesRatio(); + uint256 tokensToLock = paymentCollected * stakeToFeesRatio; + assertEq(collectPaymentDataAfter.lockedTokens, collectPaymentDataBefore.lockedTokens + tokensToLock); + + // Check the stake claim + LinkedList.List memory claimsList = _getClaimList(_indexer); + bytes32 claimId = _buildStakeClaimId(_indexer, claimsList.nonce - 1); + IDataServiceFees.StakeClaim memory stakeClaim = _getStakeClaim(claimId); + uint64 disputePeriod = disputeManager.getDisputePeriod(); + assertEq(stakeClaim.tokens, tokensToLock); + assertEq(stakeClaim.createdAt, block.timestamp); + assertEq(stakeClaim.releaseAt, block.timestamp + disputePeriod); + assertEq(stakeClaim.nextClaim, bytes32(0)); + } else { + // Update allocation after collecting rewards + allocation = subgraphService.getAllocation(allocationId); + + // Check allocation state + assertEq(allocation.accRewardsPending, 0); + uint256 accRewardsPerAllocatedToken = rewardsManager.onSubgraphAllocationUpdate(allocation.subgraphDeploymentId); + assertEq(allocation.accRewardsPerAllocatedToken, accRewardsPerAllocatedToken); + assertEq(allocation.lastPOIPresentedAt, block.timestamp); + + // Check indexer got paid the correct amount + if (rewardsDestination == address(0)) { + // If rewards destination is address zero indexer should get paid to their provision balance + assertEq( + collectPaymentDataAfter.indexerProvisionBalance, + collectPaymentDataBefore.indexerProvisionBalance + indexingRewardsData.tokensIndexerRewards + ); + } else { + // If rewards destination is set indexer should get paid to the rewards destination address + assertEq( + collectPaymentDataAfter.rewardsDestinationBalance, + collectPaymentDataBefore.rewardsDestinationBalance + indexingRewardsData.tokensIndexerRewards + ); + } + + // Check delegation pool got paid the correct amount + assertEq( + collectPaymentDataAfter.delegationPoolBalance, + collectPaymentDataBefore.delegationPoolBalance + indexingRewardsData.tokensDelegationRewards + ); + + // If after collecting indexing rewards the indexer is over allocated the allcation should close + uint256 tokensAvailable = staking.getTokensAvailable(_indexer, address(subgraphService), delegationRatio); + if (allocation.tokens <= tokensAvailable) { + // Indexer isn't over allocated so allocation should still be open + assertTrue(allocation.isOpen()); + } else { + // Indexer is over allocated so allocation should be closed + assertFalse(allocation.isOpen()); + } + } + } + /* * HELPERS */ @@ -45,37 +341,36 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { token.approve(address(staking), _tokens); staking.stakeTo(_indexer, _tokens); staking.provision(_indexer, address(subgraphService), _tokens, maxSlashingPercentage, disputePeriod); - subgraphService.register(_indexer, abi.encode("url", "geoHash", address(0))); + _register(_indexer, abi.encode("url", "geoHash", address(0))); (address newIndexerAllocationId, uint256 newIndexerAllocationKey) = makeAddrAndKey("newIndexerAllocationId"); bytes32 digest = subgraphService.encodeAllocationProof(_indexer, newIndexerAllocationId); (uint8 v, bytes32 r, bytes32 s) = vm.sign(newIndexerAllocationKey, digest); bytes memory data = abi.encode(subgraphDeployment, _tokens, newIndexerAllocationId, abi.encodePacked(r, s, v)); - subgraphService.startService(_indexer, data); + _startService(_indexer, data); } - function _stopAllocation(address _indexer, address _allocationID) internal { - resetPrank(_indexer); - assertTrue(subgraphService.isActiveAllocation(_allocationID)); - bytes memory data = abi.encode(_allocationID); - vm.expectEmit(address(subgraphService)); - emit IDataService.ServiceStopped(_indexer, data); - subgraphService.stopService(_indexer, data); + /* + * PRIVATE FUNCTIONS + */ - uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeployment); - assertEq(subgraphAllocatedTokens, 0); + function _recoverRAVSigner(ITAPCollector.SignedRAV memory _signedRAV) private view returns (address) { + bytes32 messageHash = tapCollector.encodeRAV(_signedRAV.rav); + return ECDSA.recover(messageHash, _signedRAV.signature); } - function _collectIndexingRewards(address _indexer, address _allocationID, uint256 _tokens) internal { - resetPrank(_indexer); - IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; - bytes memory data = abi.encode(_allocationID, bytes32("POI1")); + function _getClaimList(address _indexer) private view returns (LinkedList.List memory) { + (bytes32 head, bytes32 tail, uint256 nonce, uint256 count) = subgraphService.claimsLists(_indexer); + return LinkedList.List(head, tail, nonce, count); + } - uint256 indexerPreviousProvisionBalance = staking.getProviderTokensAvailable(_indexer, address(subgraphService)); - subgraphService.collect(_indexer, paymentType, data); + function _buildStakeClaimId(address _indexer, uint256 _nonce) private view returns (bytes32) { + return keccak256(abi.encodePacked(address(subgraphService), _indexer, _nonce)); + } - uint256 indexerProvisionBalance = staking.getProviderTokensAvailable(_indexer, address(subgraphService)); - assertEq(indexerProvisionBalance, indexerPreviousProvisionBalance + _tokens.mulPPM(rewardsPerSignal)); + function _getStakeClaim(bytes32 _claimId) private view returns (IDataServiceFees.StakeClaim memory) { + (uint256 tokens, uint256 createdAt, uint256 releaseAt, bytes32 nextClaim) = subgraphService.claims(_claimId); + return IDataServiceFees.StakeClaim(tokens, createdAt, releaseAt, nextClaim); } } diff --git a/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol b/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol deleted file mode 100644 index a2d8ef4a7..000000000 --- a/packages/subgraph-service/test/subgraphService/allocate/resize.t.sol +++ /dev/null @@ -1,129 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { Allocation } from "../../../contracts/libraries/Allocation.sol"; -import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; -import { SubgraphServiceTest } from "../SubgraphService.t.sol"; -import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; - -contract SubgraphServiceAllocateResizeTest is SubgraphServiceTest { - - /* - * Helpers - */ - - function _setupResize(address _indexer, uint256 _tokens) private { - token.approve(address(staking), _tokens); - staking.stakeTo(_indexer, _tokens); - staking.addToProvision(_indexer, address(subgraphService), _tokens); - } - - function _resizeAllocation(address _indexer, address _allocationID, bytes32 _subgraphDeployment, uint256 _tokens) private { - // before - uint256 beforeSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(_subgraphDeployment); - uint256 beforeAllocatedTokens = subgraphService.allocationProvisionTracker(_indexer); - Allocation.State memory beforeAllocation = subgraphService.getAllocation(_allocationID); - - uint256 allocatedTokensDelta; - if (_tokens > beforeAllocation.tokens) { - allocatedTokensDelta = _tokens - beforeAllocation.tokens; - } else { - allocatedTokensDelta = beforeAllocation.tokens - _tokens; - } - - // resize - vm.expectEmit(address(subgraphService)); - emit AllocationManager.AllocationResized(_indexer, _allocationID, _subgraphDeployment, _tokens, beforeSubgraphAllocatedTokens); - subgraphService.resizeAllocation(_indexer, _allocationID, _tokens); - - // after - uint256 afterSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(_subgraphDeployment); - uint256 afterAllocatedTokens = subgraphService.allocationProvisionTracker(_indexer); - Allocation.State memory afterAllocation = subgraphService.getAllocation(_allocationID); - uint256 accRewardsPerAllocatedTokenDelta = afterAllocation.accRewardsPerAllocatedToken - beforeAllocation.accRewardsPerAllocatedToken; - uint256 afterAccRewardsPending = rewardsManager.calcRewards(beforeAllocation.tokens, accRewardsPerAllocatedTokenDelta); - - //assert - if (_tokens > beforeAllocation.tokens) { - assertEq(afterAllocatedTokens, beforeAllocatedTokens + allocatedTokensDelta); - } else { - assertEq(afterAllocatedTokens, beforeAllocatedTokens - allocatedTokensDelta); - } - assertEq(afterAllocation.tokens, _tokens); - assertEq(afterAllocation.accRewardsPerAllocatedToken, rewardsPerSubgraphAllocationUpdate); - assertEq(afterAllocation.accRewardsPending, afterAccRewardsPending); - assertEq(afterSubgraphAllocatedTokens, _tokens); - } - - /* - * TESTS - */ - - function testResize_Allocation(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { - resizeTokens = bound(resizeTokens, 1, MAX_TOKENS); - vm.assume(resizeTokens != tokens); - - mint(users.indexer, resizeTokens); - _addToProvision(users.indexer, resizeTokens); - _resizeAllocation(users.indexer, allocationID, subgraphDeployment, resizeTokens); - } - - function testResize_Allocation_AfterCollectingIndexingRewards(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { - resizeTokens = bound(resizeTokens, 1, MAX_TOKENS); - vm.assume(resizeTokens != tokens); - - mint(users.indexer, resizeTokens); - _collectIndexingRewards(users.indexer, allocationID, tokens); - _addToProvision(users.indexer, resizeTokens); - _resizeAllocation(users.indexer, allocationID, subgraphDeployment, resizeTokens); - } - - function testResize_Allocation_SecondTime(uint256 tokens, uint256 firstResizeTokens, uint256 secondResizeTokens) public useIndexer useAllocation(tokens) { - firstResizeTokens = bound(firstResizeTokens, 1, MAX_TOKENS); - secondResizeTokens = bound(secondResizeTokens, 1, MAX_TOKENS); - vm.assume(firstResizeTokens != tokens); - vm.assume(secondResizeTokens != firstResizeTokens); - - mint(users.indexer, firstResizeTokens); - _addToProvision(users.indexer, firstResizeTokens); - _resizeAllocation(users.indexer, allocationID, subgraphDeployment, firstResizeTokens); - - mint(users.indexer, secondResizeTokens); - _addToProvision(users.indexer, secondResizeTokens); - _resizeAllocation(users.indexer, allocationID, subgraphDeployment, secondResizeTokens); - } - - function testResize_RevertWhen_NotAuthorized(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { - resizeTokens = bound(resizeTokens, tokens + 1, MAX_TOKENS); - - address newIndexer = makeAddr("newIndexer"); - _createAndStartAllocation(newIndexer, tokens); - vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, - newIndexer, - allocationID - )); - subgraphService.resizeAllocation(newIndexer, allocationID, resizeTokens); - } - - function testResize_RevertWhen_SameSize(uint256 tokens) public useIndexer useAllocation(tokens) { - vm.expectRevert(abi.encodeWithSelector( - AllocationManager.AllocationManagerAllocationSameSize.selector, - allocationID, - tokens - )); - subgraphService.resizeAllocation(users.indexer, allocationID, tokens); - } - - function testResize_RevertIf_AllocationIsClosed(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { - resizeTokens = bound(resizeTokens, tokens + 1, MAX_TOKENS); - _stopAllocation(users.indexer, allocationID); - vm.expectRevert(abi.encodeWithSelector( - AllocationManager.AllocationManagerAllocationClosed.selector, - allocationID - )); - subgraphService.resizeAllocation(users.indexer, allocationID, resizeTokens); - } -} diff --git a/packages/subgraph-service/test/subgraphService/allocate/start.t.sol b/packages/subgraph-service/test/subgraphService/allocate/start.t.sol deleted file mode 100644 index 65e4ec35b..000000000 --- a/packages/subgraph-service/test/subgraphService/allocate/start.t.sol +++ /dev/null @@ -1,166 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; -import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; -import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; - -import { Allocation } from "../../../contracts/libraries/Allocation.sol"; -import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; -import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; -import { LegacyAllocation } from "../../../contracts/libraries/LegacyAllocation.sol"; -import { SubgraphServiceTest } from "../SubgraphService.t.sol"; - -contract SubgraphServiceAllocateStartTest is SubgraphServiceTest { - - /* - * Helpers - */ - - function _generateData(uint256 tokens) private view returns(bytes memory) { - bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); - return abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); - } - - /* - * TESTS - */ - - function testStart_Allocation(uint256 tokens) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - - _createProvision(tokens); - _registerIndexer(address(0)); - - bytes memory data = _generateData(tokens); - vm.expectEmit(address(subgraphService)); - emit IDataService.ServiceStarted(users.indexer, data); - subgraphService.startService(users.indexer, data); - - Allocation.State memory allocation = subgraphService.getAllocation(allocationID); - assertEq(allocation.tokens, tokens); - assertEq(allocation.indexer, users.indexer); - assertEq(allocation.subgraphDeploymentId, subgraphDeployment); - assertEq(allocation.createdAt, block.timestamp); - assertEq(allocation.closedAt, 0); - assertEq(allocation.lastPOIPresentedAt, 0); - assertEq(allocation.accRewardsPerAllocatedToken, 0); - assertEq(allocation.accRewardsPending, 0); - - uint256 subgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeployment); - assertEq(subgraphAllocatedTokens, tokens); - } - - function testStart_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - - _createProvision(tokens); - _registerIndexer(address(0)); - - resetPrank(users.operator); - bytes memory data = _generateData(tokens); - vm.expectRevert(abi.encodeWithSelector( - ProvisionManager.ProvisionManagerNotAuthorized.selector, - users.operator, - users.indexer - )); - subgraphService.startService(users.indexer, data); - } - - function testStart_RevertWhen_NoValidProvision(uint256 tokens) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - - bytes memory data = _generateData(tokens); - vm.expectRevert(abi.encodeWithSelector( - ProvisionManager.ProvisionManagerProvisionNotFound.selector, - users.indexer - )); - subgraphService.startService(users.indexer, data); - } - - function testStart_RevertWhen_NotRegistered(uint256 tokens) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - - _createProvision(tokens); - - bytes memory data = _generateData(tokens); - vm.expectRevert(abi.encodeWithSelector( - ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, - users.indexer - )); - subgraphService.startService(users.indexer, data); - } - - function testStart_RevertWhen_ZeroAllocationId(uint256 tokens) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - - _createProvision(tokens); - _registerIndexer(address(0)); - - bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, address(0)); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); - bytes memory data = abi.encode(subgraphDeployment, tokens, address(0), abi.encodePacked(r, s, v)); - vm.expectRevert(abi.encodeWithSelector( - AllocationManager.AllocationManagerInvalidZeroAllocationId.selector - )); - subgraphService.startService(users.indexer, data); - } - - function testStart_RevertWhen_InvalidSignature(uint256 tokens) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - - _createProvision(tokens); - _registerIndexer(address(0)); - - (address signer, uint256 signerPrivateKey) = makeAddrAndKey("invalidSigner"); - bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, digest); - bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); - vm.expectRevert(abi.encodeWithSelector( - AllocationManager.AllocationManagerInvalidAllocationProof.selector, - signer, - allocationID - )); - subgraphService.startService(users.indexer, data); - } - - function testStart_RevertWhen_ArealdyExists(uint256 tokens) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - - _createProvision(tokens); - _registerIndexer(address(0)); - - bytes32 slot = keccak256(abi.encode(allocationID, uint256(158))); - vm.store(address(subgraphService), slot, bytes32(uint256(uint160(users.indexer)))); - vm.store(address(subgraphService), bytes32(uint256(slot) + 1), subgraphDeployment); - - bytes memory data = _generateData(tokens); - vm.expectRevert(abi.encodeWithSelector( - LegacyAllocation.LegacyAllocationExists.selector, - allocationID - )); - subgraphService.startService(users.indexer, data); - } - - function testStart_RevertWhen_NotEnoughTokens( - uint256 tokens, - uint256 lockTokens - ) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS - 1); - lockTokens = bound(lockTokens, tokens + 1, MAX_TOKENS); - - _createProvision(tokens); - _registerIndexer(address(0)); - - bytes memory data = _generateData(lockTokens); - vm.expectRevert(abi.encodeWithSelector( - ProvisionTracker.ProvisionTrackerInsufficientTokens.selector, - tokens, - lockTokens - )); - subgraphService.startService(users.indexer, data); - } -} diff --git a/packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol b/packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol new file mode 100644 index 000000000..3e6672dd7 --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; + +import { Allocation } from "../../../contracts/libraries/Allocation.sol"; +import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { LegacyAllocation } from "../../../contracts/libraries/LegacyAllocation.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; + +contract SubgraphServiceAllocationCloseStaleTest is SubgraphServiceTest { + + address private permissionlessBob = makeAddr("permissionlessBob"); + + /* + * TESTS + */ + + function test_SubgraphService_Allocation_CloseStale( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // Skip forward + skip(maxPOIStaleness + 1); + + resetPrank(permissionlessBob); + _closeStaleAllocation(allocationID); + } + + function test_SubgraphService_Allocation_CloseStale_AfterCollecting( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // Simulate POIs being submitted + uint8 numberOfPOIs = 5; + uint256 timeBetweenPOIs = 5 days; + + for (uint8 i = 0; i < numberOfPOIs; i++) { + // Skip forward + skip(timeBetweenPOIs); + + bytes memory data = abi.encode(allocationID, bytes32("POI1")); + _collect(users.indexer, IGraphPayments.PaymentTypes.IndexingRewards, data); + } + + // Skip forward so that the allocation is stale + skip(maxPOIStaleness + 1); + + // Close the stale allocation + resetPrank(permissionlessBob); + _closeStaleAllocation(allocationID); + } + + function test_SubgraphService_Allocation_CloseStale_RevertIf_NotStale( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // Simulate POIs being submitted + uint8 numberOfPOIs = 20; + uint256 timeBetweenPOIs = (maxPOIStaleness - 1) / numberOfPOIs; + + for (uint8 i = 0; i < numberOfPOIs; i++) { + // Skip forward + skip(timeBetweenPOIs); + + resetPrank(users.indexer); + + bytes memory data = abi.encode(allocationID, bytes32("POI1")); + _collect(users.indexer, IGraphPayments.PaymentTypes.IndexingRewards, data); + + resetPrank(permissionlessBob); + vm.expectRevert( + abi.encodeWithSelector( + ISubgraphService.SubgraphServiceAllocationNotStale.selector, + allocationID, + block.timestamp + ) + ); + subgraphService.closeStaleAllocation(allocationID); + } + } + + function test_SubgraphService_Allocation_CloseStale_RevertIf_Altruistic( + uint256 tokens + ) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes memory data = _createSubgraphAllocationData(users.indexer, subgraphDeployment, allocationIDPrivateKey, 0); + _startService(users.indexer, data); + + skip(maxPOIStaleness + 1); + + resetPrank(permissionlessBob); + vm.expectRevert( + abi.encodeWithSelector( + ISubgraphService.SubgraphServiceAllocationIsAltruistic.selector, + allocationID + ) + ); + subgraphService.closeStaleAllocation(allocationID); + } +} diff --git a/packages/subgraph-service/test/subgraphService/allocation/resize.t.sol b/packages/subgraph-service/test/subgraphService/allocation/resize.t.sol new file mode 100644 index 000000000..3da7c5a0c --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/allocation/resize.t.sol @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { Allocation } from "../../../contracts/libraries/Allocation.sol"; +import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; + +contract SubgraphServiceAllocationResizeTest is SubgraphServiceTest { + + /* + * TESTS + */ + + function test_SubgraphService_Allocation_Resize(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { + resizeTokens = bound(resizeTokens, 1, MAX_TOKENS); + vm.assume(resizeTokens != tokens); + + mint(users.indexer, resizeTokens); + _addToProvision(users.indexer, resizeTokens); + _resizeAllocation(users.indexer, allocationID, resizeTokens); + } + + function test_SubgraphService_Allocation_Resize_AfterCollectingIndexingRewards(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { + resizeTokens = bound(resizeTokens, 1, MAX_TOKENS); + vm.assume(resizeTokens != tokens); + + mint(users.indexer, resizeTokens); + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + bytes memory data = abi.encode(allocationID, bytes32("POI1")); + _collect(users.indexer, paymentType, data); + _addToProvision(users.indexer, resizeTokens); + _resizeAllocation(users.indexer, allocationID, resizeTokens); + } + + function test_SubgraphService_Allocation_Resize_SecondTime(uint256 tokens, uint256 firstResizeTokens, uint256 secondResizeTokens) public useIndexer useAllocation(tokens) { + firstResizeTokens = bound(firstResizeTokens, 1, MAX_TOKENS); + secondResizeTokens = bound(secondResizeTokens, 1, MAX_TOKENS); + vm.assume(firstResizeTokens != tokens); + vm.assume(secondResizeTokens != firstResizeTokens); + + mint(users.indexer, firstResizeTokens); + _addToProvision(users.indexer, firstResizeTokens); + _resizeAllocation(users.indexer, allocationID, firstResizeTokens); + + mint(users.indexer, secondResizeTokens); + _addToProvision(users.indexer, secondResizeTokens); + _resizeAllocation(users.indexer, allocationID, secondResizeTokens); + } + + function test_SubgraphService_Allocation_Resize_RevertWhen_NotAuthorized(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { + resizeTokens = bound(resizeTokens, tokens + 1, MAX_TOKENS); + + address newIndexer = makeAddr("newIndexer"); + _createAndStartAllocation(newIndexer, tokens); + vm.expectRevert(abi.encodeWithSelector( + ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, + newIndexer, + allocationID + )); + subgraphService.resizeAllocation(newIndexer, allocationID, resizeTokens); + } + + function test_SubgraphService_Allocation_Resize_RevertWhen_SameSize(uint256 tokens) public useIndexer useAllocation(tokens) { + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerAllocationSameSize.selector, + allocationID, + tokens + )); + subgraphService.resizeAllocation(users.indexer, allocationID, tokens); + } + + function test_SubgraphService_Allocation_Resize_RevertIf_AllocationIsClosed(uint256 tokens, uint256 resizeTokens) public useIndexer useAllocation(tokens) { + resizeTokens = bound(resizeTokens, tokens + 1, MAX_TOKENS); + bytes memory data = abi.encode(allocationID); + _stopService(users.indexer, data); + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerAllocationClosed.selector, + allocationID + )); + subgraphService.resizeAllocation(users.indexer, allocationID, resizeTokens); + } +} diff --git a/packages/subgraph-service/test/subgraphService/allocation/start.t.sol b/packages/subgraph-service/test/subgraphService/allocation/start.t.sol new file mode 100644 index 000000000..6db5e73db --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/allocation/start.t.sol @@ -0,0 +1,208 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; + +import { Allocation } from "../../../contracts/libraries/Allocation.sol"; +import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { LegacyAllocation } from "../../../contracts/libraries/LegacyAllocation.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; + +contract SubgraphServiceAllocationStartTest is SubgraphServiceTest { + + /* + * TESTS + */ + + function test_SubgraphService_Allocation_Start(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes memory data = _generateData(tokens); + _startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_AllowsZeroTokens(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes memory data = _generateData(0); + _startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_ByOperator(uint256 tokens) public useOperator { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes memory data = _generateData(tokens); + _startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + resetPrank(users.operator); + bytes memory data = _generateData(tokens); + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerNotAuthorized.selector, + users.operator, + users.indexer + )); + subgraphService.startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_NoValidProvision(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + bytes memory data = _generateData(tokens); + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerProvisionNotFound.selector, + users.indexer + )); + subgraphService.startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_NotRegistered(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + + bytes memory data = _generateData(tokens); + vm.expectRevert(abi.encodeWithSelector( + ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, + users.indexer + )); + subgraphService.startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_ZeroAllocationId(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, address(0)); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(allocationIDPrivateKey, digest); + bytes memory data = abi.encode(subgraphDeployment, tokens, address(0), abi.encodePacked(r, s, v)); + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerInvalidZeroAllocationId.selector + )); + subgraphService.startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_InvalidSignature(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + (address signer, uint256 signerPrivateKey) = makeAddrAndKey("invalidSigner"); + bytes32 digest = subgraphService.encodeAllocationProof(users.indexer, allocationID); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, digest); + bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, abi.encodePacked(r, s, v)); + vm.expectRevert(abi.encodeWithSelector( + AllocationManager.AllocationManagerInvalidAllocationProof.selector, + signer, + allocationID + )); + subgraphService.startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_InvalidData(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes memory data = abi.encode(subgraphDeployment, tokens, allocationID, _generateRandomHexBytes(32)); + vm.expectRevert(abi.encodeWithSelector( + ECDSA.ECDSAInvalidSignatureLength.selector, + 32 + )); + subgraphService.startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_ArealdyExists(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes32 slot = keccak256(abi.encode(allocationID, uint256(158))); + vm.store(address(subgraphService), slot, bytes32(uint256(uint160(users.indexer)))); + vm.store(address(subgraphService), bytes32(uint256(slot) + 1), subgraphDeployment); + + bytes memory data = _generateData(tokens); + vm.expectRevert(abi.encodeWithSelector( + LegacyAllocation.LegacyAllocationExists.selector, + allocationID + )); + subgraphService.startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_ReusingAllocationId(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes memory data = _generateData(tokens); + _startService(users.indexer, data); + + vm.expectRevert(abi.encodeWithSelector( + Allocation.AllocationAlreadyExists.selector, + allocationID + )); + subgraphService.startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_NotEnoughTokens( + uint256 tokens, + uint256 lockTokens + ) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS - 1); + lockTokens = bound(lockTokens, tokens + 1, MAX_TOKENS); + + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + bytes memory data = _generateData(lockTokens); + vm.expectRevert(abi.encodeWithSelector( + ProvisionTracker.ProvisionTrackerInsufficientTokens.selector, + tokens, + lockTokens + )); + subgraphService.startService(users.indexer, data); + } + + /* + * PRIVATE FUNCTIONS + */ + + function _generateData(uint256 tokens) private view returns(bytes memory) { + return _createSubgraphAllocationData(users.indexer, subgraphDeployment, allocationIDPrivateKey, tokens); + } + + function _generateRandomHexBytes(uint256 length) private view returns (bytes memory) { + bytes memory randomBytes = new bytes(length); + for (uint256 i = 0; i < length; i++) { + randomBytes[i] = bytes1(uint8(uint256(keccak256(abi.encodePacked(block.timestamp, block.prevrandao, i))) % 256)); + } + return randomBytes; + } +} diff --git a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol similarity index 70% rename from packages/subgraph-service/test/subgraphService/allocate/stop.t.sol rename to packages/subgraph-service/test/subgraphService/allocation/stop.t.sol index fff5c457f..84b9da27e 100644 --- a/packages/subgraph-service/test/subgraphService/allocate/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol @@ -13,20 +13,18 @@ import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService import { LegacyAllocation } from "../../../contracts/libraries/LegacyAllocation.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; -contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { - /* - * Helpers - */ +contract SubgraphServiceAllocationStopTest is SubgraphServiceTest { /* * TESTS */ - function testStop_Allocation(uint256 tokens) public useIndexer useAllocation(tokens) { - _stopAllocation(users.indexer, allocationID); + function test_SubgraphService_Allocation_Stop(uint256 tokens) public useIndexer useAllocation(tokens) { + bytes memory data = abi.encode(allocationID); + _stopService(users.indexer, data); } - function testStop_RevertWhen_IndexerIsNotTheAllocationOwner( + function test_SubgraphService_Allocation_Stop_RevertWhen_IndexerIsNotTheAllocationOwner( uint256 tokens ) public useIndexer useAllocation(tokens) { // Setup new indexer @@ -45,7 +43,7 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { subgraphService.stopService(newIndexer, data); } - function testStop_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer useAllocation(tokens) { + function test_SubgraphService_Allocation_Stop_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer useAllocation(tokens) { resetPrank(users.operator); bytes memory data = abi.encode(allocationID); vm.expectRevert( @@ -58,7 +56,7 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { subgraphService.stopService(users.indexer, data); } - function testStop_RevertWhen_NotRegistered() public useIndexer { + function test_SubgraphService_Allocation_Stop_RevertWhen_NotRegistered() public useIndexer { bytes memory data = abi.encode(allocationID); vm.expectRevert( abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, users.indexer) @@ -66,21 +64,10 @@ contract SubgraphServiceAllocateStopTest is SubgraphServiceTest { subgraphService.stopService(users.indexer, data); } - function testStop_RevertWhen_NotOpen(uint256 tokens) public useIndexer useAllocation(tokens) { + function test_SubgraphService_Allocation_Stop_RevertWhen_NotOpen(uint256 tokens) public useIndexer useAllocation(tokens) { bytes memory data = abi.encode(allocationID); - subgraphService.stopService(users.indexer, data); + _stopService(users.indexer, data); vm.expectRevert(abi.encodeWithSelector(Allocation.AllocationClosed.selector, allocationID, block.timestamp)); subgraphService.stopService(users.indexer, data); } - - function testCloseStaleAllocation( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - address permissionlessBob = makeAddr("permissionlessBob"); - - skip(maxPOIStaleness + 1); - - resetPrank(permissionlessBob); - subgraphService.closeStaleAllocation(allocationID); - } } diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index a04b248a3..4891a4a75 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -3,228 +3,22 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; -import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; -import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; -import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; -import { Allocation } from "../../../contracts/libraries/Allocation.sol"; -import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; -contract SubgraphServiceRegisterTest is SubgraphServiceTest { - using PPMMath for uint128; - using PPMMath for uint256; - using Allocation for Allocation.State; - - address signer; - uint256 signerPrivateKey; - - /* - * HELPERS - */ - - function _getQueryFeeEncodedData(address indexer, uint128 tokens) private view returns (bytes memory) { - ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(indexer, tokens); - bytes32 messageHash = tapCollector.encodeRAV(rav); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, messageHash); - bytes memory signature = abi.encodePacked(r, s, v); - ITAPCollector.SignedRAV memory signedRAV = ITAPCollector.SignedRAV(rav, signature); - return abi.encode(signedRAV); - } - - function _getRAV( - address indexer, - uint128 tokens - ) private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { - return - ITAPCollector.ReceiptAggregateVoucher({ - dataService: address(subgraphService), - serviceProvider: indexer, - timestampNs: 0, - valueAggregate: tokens, - metadata: abi.encode(allocationID) - }); - } - - function _approveCollector(uint256 tokens) private { - address msgSender; - (, msgSender, ) = vm.readCallers(); - resetPrank(signer); - mint(signer, tokens); - escrow.approveCollector(address(tapCollector), tokens); - token.approve(address(escrow), tokens); - escrow.deposit(users.indexer, tokens); - resetPrank(msgSender); - } - - /* - * SET UP - */ - - function setUp() public virtual override { - super.setUp(); - (signer, signerPrivateKey) = makeAddrAndKey("signer"); - vm.label({ account: signer, newLabel: "signer" }); - } +contract SubgraphServiceCollectTest is SubgraphServiceTest { /* * TESTS */ - function testCollect_QueryFees( - uint256 tokensAllocated, - uint256 tokensPayment - ) public useIndexer useAllocation(tokensAllocated) { - vm.assume(tokensAllocated > minimumProvisionTokens * stakeToFeesRatio); - uint256 maxTokensPayment = tokensAllocated / stakeToFeesRatio > type(uint128).max - ? type(uint128).max - : tokensAllocated / stakeToFeesRatio; - tokensPayment = bound(tokensPayment, minimumProvisionTokens, maxTokensPayment); - - _approveCollector(tokensPayment); - - uint256 indexerPreviousBalance = token.balanceOf(users.indexer); - - bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokensPayment)); - uint256 tokensCollected = subgraphService.collect(users.indexer, IGraphPayments.PaymentTypes.QueryFee, data); - - uint256 indexerBalance = token.balanceOf(users.indexer); - uint256 tokensProtocol = tokensCollected.mulPPM(protocolPaymentCut); - uint256 curationTokens = tokensCollected.mulPPM(curationCut); - - uint256 expectedIndexerTokensPayment = tokensCollected - tokensProtocol - curationTokens; - assertEq(indexerBalance, indexerPreviousBalance + expectedIndexerTokensPayment); - } - - function testCollect_MultipleQueryFees( - uint256 tokensAllocated, - uint256 numPayments - ) public useIndexer useAllocation(tokensAllocated) { - vm.assume(tokensAllocated > minimumProvisionTokens * stakeToFeesRatio); - numPayments = bound(numPayments, 1, 10); - uint256 tokensPayment = tokensAllocated / stakeToFeesRatio / numPayments; - - _approveCollector(tokensAllocated); - - uint256 accTokensPayment = 0; - for (uint i = 0; i < numPayments; i++) { - accTokensPayment = accTokensPayment + tokensPayment; - uint256 indexerPreviousBalance = token.balanceOf(users.indexer); - - bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(accTokensPayment)); - uint256 tokensCollected = subgraphService.collect( - users.indexer, - IGraphPayments.PaymentTypes.QueryFee, - data - ); - - uint256 indexerBalance = token.balanceOf(users.indexer); - uint256 tokensProtocol = tokensCollected.mulPPM(protocolPaymentCut); - uint256 curationTokens = tokensCollected.mulPPM(curationCut); - - uint256 expectedIndexerTokensPayment = tokensCollected - tokensProtocol - curationTokens; - assertEq(indexerBalance, indexerPreviousBalance + expectedIndexerTokensPayment); - } - } - - function testCollect_IndexingRewards(uint256 tokens) public useIndexer useAllocation(tokens) { - _collectIndexingRewards(users.indexer, allocationID, tokens); - - Allocation.State memory afterAllocation = subgraphService.getAllocation(allocationID); - assertEq(afterAllocation.isOpen(), true); - } - - function testCollect_IndexingRewards_When_OverAllocated(uint256 tokens) public useIndexer { - tokens = bound(tokens, minimumProvisionTokens * 2, 10_000_000_000 ether); - - // setup allocation - _createProvision(tokens); - _registerIndexer(address(0)); - _startService(tokens); - - // thaw some tokens to become over allocated - staking.thaw(users.indexer, address(subgraphService), tokens / 2); - - // this collection should close the allocation - _collectIndexingRewards(users.indexer, allocationID, tokens); - - Allocation.State memory afterAllocation = subgraphService.getAllocation(allocationID); - assertEq(afterAllocation.isOpen(), false); - } - - function testCollect_RevertWhen_InvalidPayment(uint256 tokens) public useIndexer useAllocation(tokens) { + function test_SubgraphService_Collect_RevertWhen_InvalidPayment(uint256 tokens) public useIndexer useAllocation(tokens) { IGraphPayments.PaymentTypes invalidPaymentType = IGraphPayments.PaymentTypes.IndexingFee; vm.expectRevert( abi.encodeWithSelector(ISubgraphService.SubgraphServiceInvalidPaymentType.selector, invalidPaymentType) ); subgraphService.collect(users.indexer, invalidPaymentType, ""); } - - function testCollect_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer useAllocation(tokens) { - IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; - bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokens)); - resetPrank(users.operator); - vm.expectRevert( - abi.encodeWithSelector( - ProvisionManager.ProvisionManagerNotAuthorized.selector, - users.operator, - users.indexer - ) - ); - subgraphService.collect(users.indexer, paymentType, data); - } - - function testCollect_QueryFees_RevertWhen_IndexerIsNotAllocationOwner( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; - // Setup new indexer - address newIndexer = makeAddr("newIndexer"); - _createAndStartAllocation(newIndexer, tokens); - - // This data is for user.indexer allocationId - bytes memory data = _getQueryFeeEncodedData(newIndexer, uint128(tokens)); - - resetPrank(newIndexer); - vm.expectRevert( - abi.encodeWithSelector( - ISubgraphService.SubgraphServiceInvalidRAV.selector, - newIndexer, - users.indexer - ) - ); - subgraphService.collect(newIndexer, paymentType, data); - } - - function testCollect_QueryFees_RevertWhen_CollectingOtherIndexersFees( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; - // Setup new indexer - address newIndexer = makeAddr("newIndexer"); - _createAndStartAllocation(newIndexer, tokens); - bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokens)); - vm.expectRevert( - abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerMismatch.selector, users.indexer, newIndexer) - ); - subgraphService.collect(newIndexer, paymentType, data); - } - - function testCollect_IndexingFees_RevertWhen_IndexerIsNotAllocationOwner( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; - // Setup new indexer - address newIndexer = makeAddr("newIndexer"); - _createAndStartAllocation(newIndexer, tokens); - bytes memory data = abi.encode(allocationID, bytes32("POI1")); - // Attempt to collect from other indexer's allocation - vm.expectRevert( - abi.encodeWithSelector(ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, newIndexer, allocationID) - ); - subgraphService.collect(newIndexer, paymentType, data); - } } diff --git a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol new file mode 100644 index 000000000..d51f9ea4b --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; + +import { ISubgraphService } from "../../../../contracts/interfaces/ISubgraphService.sol"; +import { SubgraphServiceTest } from "../../SubgraphService.t.sol"; + +contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { + + /* + * TESTS + */ + + function test_SubgraphService_Collect_Indexing( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + bytes memory data = abi.encode(allocationID, bytes32("POI")); + _collect(users.indexer, paymentType, data); + } + + function test_SubgraphService_Collect_Indexing_WithDelegation( + uint256 tokens, + uint256 delegationTokens, + uint256 delegationFeeCut + ) public useIndexer useAllocation(tokens) useDelegation(delegationTokens) { + delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM); + _setDelegationFeeCut( + users.indexer, + address(subgraphService), + // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead + IGraphPayments.PaymentTypes.IndexingFee, + 100_000 + ); + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + bytes memory data = abi.encode(allocationID, bytes32("POI")); + _collect(users.indexer, paymentType, data); + } + + function test_SubgraphService_Collect_Indexing_RewardsDestination( + uint256 tokens + ) public useIndexer useAllocation(tokens) useRewardsDestination { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + bytes memory data = abi.encode(allocationID, bytes32("POI")); + _collect(users.indexer, paymentType, data); + } + + function test_subgraphService_Collect_Indexing_MultipleOverTime(uint256 tokens) public useIndexer useAllocation(tokens) { + uint8 numberOfPOIs = 20; + uint256 timeBetweenPOIs = 5 days; + + for (uint8 i = 0; i < numberOfPOIs; i++) { + // Skip forward + skip(timeBetweenPOIs); + + resetPrank(users.indexer); + + bytes memory data = abi.encode(allocationID, bytes32("POI")); + _collect(users.indexer, IGraphPayments.PaymentTypes.IndexingRewards, data); + } + } + + function test_subgraphService_Collect_Indexing_MultipleOverTime_WithDelegation( + uint256 tokens, + uint256 delegationTokens, + uint256 delegationFeeCut + ) public useIndexer useAllocation(tokens) useDelegation(delegationTokens) { + delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM); + _setDelegationFeeCut( + users.indexer, + address(subgraphService), + // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead + IGraphPayments.PaymentTypes.IndexingFee, + 100_000 + ); + + uint8 numberOfPOIs = 20; + uint256 timeBetweenPOIs = 5 days; + for (uint8 i = 0; i < numberOfPOIs; i++) { + // Skip forward + skip(timeBetweenPOIs); + + resetPrank(users.indexer); + + bytes memory data = abi.encode(allocationID, bytes32("POI")); + _collect(users.indexer, IGraphPayments.PaymentTypes.IndexingRewards, data); + } + } + + function test_SubgraphService_Collect_Indexing_RevertWhen_OverAllocated(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens * 2, 10_000_000_000 ether); + + // setup allocation + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + bytes memory data = _createSubgraphAllocationData(users.indexer, subgraphDeployment, allocationIDPrivateKey, tokens); + _startService(users.indexer, data); + + // thaw some tokens to become over allocated + staking.thaw(users.indexer, address(subgraphService), tokens / 2); + + // this collection should close the allocation + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + bytes memory collectData = abi.encode(allocationID, bytes32("POI")); + _collect(users.indexer, paymentType, collectData); + } + + function test_SubgraphService_Collect_Indexing_RevertWhen_IndexerIsNotAllocationOwner( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + // Setup new indexer + address newIndexer = makeAddr("newIndexer"); + _createAndStartAllocation(newIndexer, tokens); + bytes memory data = abi.encode(allocationID, bytes32("POI")); + // Attempt to collect from other indexer's allocation + vm.expectRevert( + abi.encodeWithSelector(ISubgraphService.SubgraphServiceAllocationNotAuthorized.selector, newIndexer, allocationID) + ); + subgraphService.collect(newIndexer, paymentType, data); + } +} diff --git a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol new file mode 100644 index 000000000..9e20ad352 --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +// import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; +import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; +import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; + +import { ISubgraphService } from "../../../../contracts/interfaces/ISubgraphService.sol"; +import { SubgraphServiceTest } from "../../SubgraphService.t.sol"; + +contract SubgraphServiceRegisterTest is SubgraphServiceTest { + using PPMMath for uint128; + using PPMMath for uint256; + + address signer; + uint256 signerPrivateKey; + + /* + * HELPERS + */ + + function _getQueryFeeEncodedData(address indexer, uint128 tokens) private view returns (bytes memory) { + ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(indexer, tokens); + bytes32 messageHash = tapCollector.encodeRAV(rav); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(signerPrivateKey, messageHash); + bytes memory signature = abi.encodePacked(r, s, v); + ITAPCollector.SignedRAV memory signedRAV = ITAPCollector.SignedRAV(rav, signature); + return abi.encode(signedRAV); + } + + function _getRAV( + address indexer, + uint128 tokens + ) private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { + return + ITAPCollector.ReceiptAggregateVoucher({ + dataService: address(subgraphService), + serviceProvider: indexer, + timestampNs: 0, + valueAggregate: tokens, + metadata: abi.encode(allocationID) + }); + } + + function _approveCollector(uint256 tokens) private { + address msgSender; + (, msgSender, ) = vm.readCallers(); + resetPrank(signer); + mint(signer, tokens); + escrow.approveCollector(address(tapCollector), tokens); + token.approve(address(escrow), tokens); + escrow.deposit(users.indexer, tokens); + resetPrank(msgSender); + } + + /* + * SET UP + */ + + function setUp() public virtual override { + super.setUp(); + (signer, signerPrivateKey) = makeAddrAndKey("signer"); + vm.label({ account: signer, newLabel: "signer" }); + } + + /* + * TESTS + */ + + function testCollect_QueryFees_ONLY_THIS( + uint256 tokensAllocated, + uint256 tokensPayment + ) public useIndexer useAllocation(tokensAllocated) { + vm.assume(tokensAllocated > minimumProvisionTokens * stakeToFeesRatio); + uint256 maxTokensPayment = tokensAllocated / stakeToFeesRatio > type(uint128).max + ? type(uint128).max + : tokensAllocated / stakeToFeesRatio; + tokensPayment = bound(tokensPayment, minimumProvisionTokens, maxTokensPayment); + + _approveCollector(tokensPayment); + + bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokensPayment)); + _collect(users.indexer, IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testCollect_MultipleQueryFees( + uint256 tokensAllocated, + uint256 numPayments + ) public useIndexer useAllocation(tokensAllocated) { + vm.assume(tokensAllocated > minimumProvisionTokens * stakeToFeesRatio); + numPayments = bound(numPayments, 1, 10); + uint256 tokensPayment = tokensAllocated / stakeToFeesRatio / numPayments; + + _approveCollector(tokensAllocated); + + uint256 accTokensPayment = 0; + for (uint i = 0; i < numPayments; i++) { + accTokensPayment = accTokensPayment + tokensPayment; + bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(accTokensPayment)); + _collect(users.indexer, IGraphPayments.PaymentTypes.QueryFee, data); + } + } + + function testCollect_RevertWhen_NotAuthorized(uint256 tokens) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; + bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokens)); + resetPrank(users.operator); + vm.expectRevert( + abi.encodeWithSelector( + ProvisionManager.ProvisionManagerNotAuthorized.selector, + users.operator, + users.indexer + ) + ); + subgraphService.collect(users.indexer, paymentType, data); + } + + function testCollect_QueryFees_RevertWhen_IndexerIsNotAllocationOwner( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; + // Setup new indexer + address newIndexer = makeAddr("newIndexer"); + _createAndStartAllocation(newIndexer, tokens); + + // This data is for user.indexer allocationId + bytes memory data = _getQueryFeeEncodedData(newIndexer, uint128(tokens)); + + resetPrank(newIndexer); + vm.expectRevert( + abi.encodeWithSelector( + ISubgraphService.SubgraphServiceInvalidRAV.selector, + newIndexer, + users.indexer + ) + ); + subgraphService.collect(newIndexer, paymentType, data); + } + + function testCollect_QueryFees_RevertWhen_CollectingOtherIndexersFees( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.QueryFee; + // Setup new indexer + address newIndexer = makeAddr("newIndexer"); + _createAndStartAllocation(newIndexer, tokens); + bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokens)); + vm.expectRevert( + abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerMismatch.selector, users.indexer, newIndexer) + ); + subgraphService.collect(newIndexer, paymentType, data); + } +} diff --git a/packages/subgraph-service/test/subgraphService/provider/register.t.sol b/packages/subgraph-service/test/subgraphService/provider/register.t.sol index e42e152f7..8e3d0577e 100644 --- a/packages/subgraph-service/test/subgraphService/provider/register.t.sol +++ b/packages/subgraph-service/test/subgraphService/provider/register.t.sol @@ -3,65 +3,54 @@ pragma solidity 0.8.26; import "forge-std/Test.sol"; -import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; -contract SubgraphServiceRegisterTest is SubgraphServiceTest { +contract SubgraphServiceProviderRegisterTest is SubgraphServiceTest { /* * TESTS */ - function testRegister_Indexer(uint256 tokens) public useIndexer { + function test_SubgraphService_Provider_Register(uint256 tokens) public useIndexer { tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - _createProvision(tokens); + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); - vm.expectEmit(address(subgraphService)); - emit IDataService.ServiceProviderRegistered( - users.indexer, - data - ); - subgraphService.register(users.indexer, data); - - uint256 registeredAt; - string memory url; - string memory geoHash; - (registeredAt, url, geoHash) = subgraphService.indexers(users.indexer); - assertEq(registeredAt, block.timestamp); - assertEq(url, "url"); - assertEq(geoHash, "geoHash"); + _register(users.indexer, data); } - function testRegister_RevertIf_AlreadyRegistered( + function test_SubgraphService_Provider_Register_RevertIf_AlreadyRegistered( uint256 tokens ) public useIndexer useAllocation(tokens) { vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerAlreadyRegistered.selector)); - _registerIndexer(users.rewardsDestination); + bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); + subgraphService.register(users.indexer, data); } - function testRegister_RevertWhen_InvalidProvision() public useIndexer { + function test_SubgraphService_Provider_Register_RevertWhen_InvalidProvision() public useIndexer { vm.expectRevert(abi.encodeWithSelector( ProvisionManager.ProvisionManagerProvisionNotFound.selector, users.indexer )); - _registerIndexer(users.rewardsDestination); + bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); + subgraphService.register(users.indexer, data); } - function testRegister_RevertWhen_NotAuthorized() public { + function test_SubgraphService_Provider_Register_RevertWhen_NotAuthorized() public { resetPrank(users.operator); vm.expectRevert(abi.encodeWithSelector( ProvisionManager.ProvisionManagerNotAuthorized.selector, users.operator, users.indexer )); - _registerIndexer(users.rewardsDestination); + bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); + subgraphService.register(users.indexer, data); } - function testRegister_RevertWhen_InvalidProvisionValues(uint256 tokens) public useIndexer { + function test_SubgraphService_Provider_Register_RevertWhen_InvalidProvisionValues(uint256 tokens) public useIndexer { tokens = bound(tokens, 1, minimumProvisionTokens - 1); - _createProvision(tokens); + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); vm.expectRevert(abi.encodeWithSelector( ProvisionManager.ProvisionManagerInvalidValue.selector, @@ -70,20 +59,20 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { minimumProvisionTokens, maximumProvisionTokens )); - _registerIndexer(address(0)); + subgraphService.register(users.indexer, abi.encode("url", "geoHash", address(0))); } - function testRegister_RevertIf_EmptyUrl(uint256 tokens) public useIndexer { + function test_SubgraphService_Provider_Register_RevertIf_EmptyUrl(uint256 tokens) public useIndexer { tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - _createProvision(tokens); + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); bytes memory data = abi.encode("", "geoHash", users.rewardsDestination); vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceEmptyUrl.selector)); subgraphService.register(users.indexer, data); } - function testRegister_RevertIf_EmptyGeohash(uint256 tokens) public useIndexer { + function test_SubgraphService_Provider_Register_RevertIf_EmptyGeohash(uint256 tokens) public useIndexer { tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - _createProvision(tokens); + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); bytes memory data = abi.encode("url", "", users.rewardsDestination); vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceEmptyGeohash.selector)); subgraphService.register(users.indexer, data); diff --git a/packages/subgraph-service/test/subgraphService/provider/rewardsDestination.t.sol b/packages/subgraph-service/test/subgraphService/provider/rewardsDestination.t.sol new file mode 100644 index 000000000..3926bc362 --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/provider/rewardsDestination.t.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import "forge-std/Test.sol"; + +import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; + +contract SubgraphServiceProviderRewardsDestinationTest is SubgraphServiceTest { + + /* + * TESTS + */ + + function test_SubgraphService_Provider_RewardsDestination_Set( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // Should be able to use new address + _setRewardsDestination(users.rewardsDestination); + + // Should be able to set back to address zero + _setRewardsDestination(address(0)); + } +} diff --git a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol index 8e98078c6..9fdb0b76f 100644 --- a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol +++ b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol @@ -14,13 +14,28 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { * TESTS */ - function testAccept_Provision(uint256 tokens) public useIndexer useAllocation(tokens) { - vm.expectEmit(address(subgraphService)); - emit IDataService.ProvisionAccepted(users.indexer); - subgraphService.acceptProvision(users.indexer, ""); + function test_SubgraphService_Provision_Accept( + uint256 tokens, + uint32 newVerifierCut, + uint64 newDisputePeriod + ) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + vm.assume(newVerifierCut >= fishermanRewardPercentage); + vm.assume(newVerifierCut <= MAX_PPM); + vm.assume(newDisputePeriod >= disputePeriod); + + // Setup indexer + _createProvision(users.indexer, tokens, fishermanRewardPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + // Update parameters with new values + _setProvisionParameters(users.indexer, address(subgraphService), newVerifierCut, newDisputePeriod); + + // Accept provision and check parameters + _acceptProvision(users.indexer, ""); } - function testAccept_RevertWhen_NotRegistered() public useIndexer { + function test_SubgraphService_Provision_Accept_RevertWhen_NotRegistered() public useIndexer { vm.expectRevert(abi.encodeWithSelector( ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, users.indexer @@ -28,7 +43,7 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { subgraphService.acceptProvision(users.indexer, ""); } - function testAccept_RevertWhen_NotAuthorized() public { + function test_SubgraphService_Provision_Accept_RevertWhen_NotAuthorized() public { resetPrank(users.operator); vm.expectRevert(abi.encodeWithSelector( ProvisionManager.ProvisionManagerNotAuthorized.selector, @@ -37,4 +52,54 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { )); subgraphService.acceptProvision(users.indexer, ""); } + + function test_SubgraphService_Provision_Accept_RevertIf_InvalidVerifierCut( + uint256 tokens, + uint32 newVerifierCut + ) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + vm.assume(newVerifierCut > MAX_PPM); + + // Setup indexer + _createProvision(users.indexer, tokens, fishermanRewardPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + // Update parameters with new values + _setProvisionParameters(users.indexer, address(subgraphService), newVerifierCut, disputePeriod); + + // Should revert since newVerifierCut is invalid + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerInvalidValue.selector, + "maxVerifierCut", + newVerifierCut, + fishermanRewardPercentage, + MAX_PPM + )); + subgraphService.acceptProvision(users.indexer, ""); + } + + function test_SubgraphService_Provision_Accept_RevertIf_InvalidDisputePeriod( + uint256 tokens, + uint64 newDisputePeriod + ) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + vm.assume(newDisputePeriod < disputePeriod); + + // Setup indexer + _createProvision(users.indexer, tokens, fishermanRewardPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + // Update parameters with new values + _setProvisionParameters(users.indexer, address(subgraphService), fishermanRewardPercentage, newDisputePeriod); + + // Should revert since newDisputePeriod is invalid + vm.expectRevert(abi.encodeWithSelector( + ProvisionManager.ProvisionManagerInvalidValue.selector, + "thawingPeriod", + newDisputePeriod, + disputePeriod, + type(uint64).max + )); + subgraphService.acceptProvision(users.indexer, ""); + } } diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index b28362653..e20d1fc72 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -3,10 +3,11 @@ pragma solidity 0.8.26; abstract contract Constants { uint256 internal constant MAX_TOKENS = 10_000_000_000 ether; + uint256 internal constant MAX_PPM = 1_000_000; // Dispute Manager uint64 internal constant disputePeriod = 300; // 5 minutes uint256 internal constant disputeDeposit = 100 ether; // 100 GRT - uint32 internal constant fishermanRewardPercentage = 100000; // 10% + uint32 internal constant fishermanRewardPercentage = 500000; // 50% uint32 internal constant maxSlashingPercentage = 500000; // 50% // Subgraph Service uint256 internal constant minimumProvisionTokens = 1000 ether; From 4387c6cdc7cf437e75b46d3af3f1d88aa1fdb925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 9 Sep 2024 16:23:36 -0300 Subject: [PATCH 200/343] test: wip refactor unit tests for staking fns (#1021) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * test: wip refactor unit tests for staking fns Signed-off-by: Tomás Migone * test: refactor unstake tests passing Signed-off-by: Tomás Migone * test: refactor withdraw tests Signed-off-by: Tomás Migone * test: refactor add to provision Signed-off-by: Tomás Migone * test: wip thaw refactor Signed-off-by: Tomás Migone * test: refactor thaw tests Signed-off-by: Tomás Migone * test: refactor deprovision test Signed-off-by: Tomás Migone * test: refactor reprovision tests Signed-off-by: Tomás Migone * test: refactor provision parameters functions Signed-off-by: Tomás Migone * test: refactor provision tests Signed-off-by: Tomás Migone * test: refactor operator tests Signed-off-by: Tomás Migone * chore: update some configs Signed-off-by: Tomás Migone * test: wip refactor of delegation tests Signed-off-by: Tomás Migone * test: refactor service provider tests Signed-off-by: Tomás Migone * test: refactor delegation tests Signed-off-by: Tomás Migone * test: refactor governance tests Signed-off-by: Tomás Migone * test: refactor ttools tests Signed-off-by: Tomás Migone * test: refactor slash test Signed-off-by: Tomás Migone * test: refactor legacy allocation tests wip Signed-off-by: Tomás Migone * test: refacto allocation close tests Signed-off-by: Tomás Migone * test: refactor collect allocation tests Signed-off-by: Tomás Migone * fix: remove comments Signed-off-by: Tomás Migone * chore: use solidity 0.8.27, remove compilation via ir Signed-off-by: Tomás Migone * chore: use solidity 0.8.27 Signed-off-by: Tomás Migone --------- Signed-off-by: Tomás Migone --- .../contracts/arbitrum/ITokenGateway.sol | 2 +- .../contracts/curation/ICuration.sol | 2 +- .../contracts/epochs/IEpochManager.sol | 2 +- .../contracts/gateway/ICallhookReceiver.sol | 2 +- .../contracts/governance/Controller.sol | 2 +- .../contracts/governance/Governed.sol | 2 +- .../contracts/governance/IController.sol | 2 +- .../contracts/governance/IManaged.sol | 2 +- .../contracts/governance/Pausable.sol | 2 +- .../contracts/l2/staking/IL2StakingBase.sol | 2 +- .../contracts/l2/staking/IL2StakingTypes.sol | 2 +- .../contracts/rewards/IRewardsIssuer.sol | 2 +- .../contracts/rewards/IRewardsManager.sol | 2 +- .../rewards/RewardsManagerStorage.sol | 2 +- .../contracts/contracts/token/IGraphToken.sol | 2 +- .../contracts/upgrades/GraphProxy.sol | 2 +- .../contracts/upgrades/GraphProxyAdmin.sol | 2 +- .../contracts/upgrades/GraphProxyStorage.sol | 2 +- .../contracts/upgrades/GraphUpgradeable.sol | 2 +- .../contracts/upgrades/IGraphProxy.sol | 2 +- .../contracts/contracts/utils/TokenUtils.sol | 2 +- .../contracts/data-service/DataService.sol | 2 +- .../data-service/DataServiceStorage.sol | 2 +- .../extensions/DataServiceFees.sol | 2 +- .../extensions/DataServiceFeesStorage.sol | 2 +- .../extensions/DataServicePausable.sol | 2 +- .../DataServicePausableUpgradeable.sol | 2 +- .../extensions/DataServiceRescuable.sol | 2 +- .../data-service/interfaces/IDataService.sol | 2 +- .../interfaces/IDataServiceFees.sol | 2 +- .../interfaces/IDataServicePausable.sol | 2 +- .../interfaces/IDataServiceRescuable.sol | 2 +- .../libraries/ProvisionTracker.sol | 2 +- .../utilities/ProvisionManager.sol | 2 +- .../utilities/ProvisionManagerStorage.sol | 2 +- .../contracts/interfaces/IGraphPayments.sol | 2 +- .../contracts/interfaces/IGraphProxyAdmin.sol | 2 +- .../contracts/interfaces/IHorizonStaking.sol | 2 +- .../interfaces/IPaymentsCollector.sol | 2 +- .../contracts/interfaces/IPaymentsEscrow.sol | 9 +- .../contracts/interfaces/ITAPCollector.sol | 2 +- .../internal/IHorizonStakingBase.sol | 2 +- .../internal/IHorizonStakingExtension.sol | 2 +- .../internal/IHorizonStakingMain.sol | 2 +- .../internal/IHorizonStakingTypes.sol | 2 +- .../contracts/libraries/Denominations.sol | 2 +- .../contracts/libraries/LibFixedMath.sol | 2 +- .../contracts/libraries/LinkedList.sol | 2 +- .../horizon/contracts/libraries/MathUtils.sol | 2 +- .../horizon/contracts/libraries/PPMMath.sol | 2 +- .../horizon/contracts/libraries/UintRange.sol | 2 +- .../contracts/mocks/ControllerMock.sol | 2 +- .../horizon/contracts/mocks/CurationMock.sol | 2 +- .../contracts/mocks/EpochManagerMock.sol | 2 +- .../horizon/contracts/mocks/MockGRTToken.sol | 2 +- .../contracts/mocks/RewardsManagerMock.sol | 2 +- .../contracts/payments/GraphPayments.sol | 2 +- .../contracts/payments/PaymentsEscrow.sol | 10 +- .../payments/collectors/TAPCollector.sol | 2 +- .../contracts/staking/HorizonStaking.sol | 2 +- .../contracts/staking/HorizonStakingBase.sol | 2 +- .../staking/HorizonStakingExtension.sol | 2 +- .../staking/HorizonStakingStorage.sol | 4 +- .../staking/libraries/ExponentialRebates.sol | 2 +- .../contracts/staking/utilities/Managed.sol | 2 +- .../contracts/utilities/GraphDirectory.sol | 2 +- packages/horizon/foundry.toml | 10 +- packages/horizon/hardhat.config.ts | 3 +- packages/horizon/package.json | 4 +- packages/horizon/test/GraphBase.t.sol | 10 +- .../test/data-service/DataService.t.sol | 29 +- .../data-service/DataServiceUpgradeable.t.sol | 2 +- .../extensions/DataServiceFees.t.sol | 69 +- .../extensions/DataServicePausable.t.sol | 2 +- .../DataServicePausableUpgradeable.t.sol | 2 +- .../implementations/DataServiceBase.sol | 2 +- .../DataServiceBaseUpgradeable.sol | 4 +- .../implementations/DataServiceImpFees.sol | 3 +- .../DataServiceImpPausable.sol | 2 +- .../DataServiceImpPausableUpgradeable.sol | 4 +- .../implementations/DataServiceOverride.sol | 2 +- .../libraries/ProvisionTracker.t.sol | 2 +- .../ProvisionTrackerImplementation.sol | 2 +- .../horizon/test/escrow/GraphEscrow.t.sol | 2 +- packages/horizon/test/escrow/collect.t.sol | 2 +- packages/horizon/test/escrow/collector.t.sol | 2 +- packages/horizon/test/escrow/deposit.t.sol | 2 +- packages/horizon/test/escrow/paused.t.sol | 2 +- packages/horizon/test/escrow/thaw.t.sol | 2 +- packages/horizon/test/escrow/withdraw.t.sol | 2 +- .../horizon/test/libraries/LinkedList.t.sol | 2 +- .../test/libraries/ListImplementation.sol | 4 +- .../horizon/test/payments/GraphPayments.t.sol | 4 +- .../HorizonStakingShared.t.sol | 2235 ++++++++++++++++- .../horizon/test/staking/HorizonStaking.t.sol | 308 +-- .../allocation/HorizonStakingExtension.t.sol | 98 - .../test/staking/allocation/allocation.t.sol | 33 +- .../test/staking/allocation/close.t.sol | 78 +- .../test/staking/allocation/collect.t.sol | 127 +- .../test/staking/delegation/addToPool.t.sol | 8 +- .../test/staking/delegation/delegate.t.sol | 12 +- .../test/staking/delegation/undelegate.t.sol | 18 +- .../test/staking/delegation/withdraw.t.sol | 58 +- .../test/staking/governance/governance.t.sol | 23 +- .../test/staking/operator/locked.t.sol | 8 +- .../test/staking/operator/operator.t.sol | 13 +- .../test/staking/provision/deprovision.t.sol | 74 +- .../test/staking/provision/locked.t.sol | 10 +- .../test/staking/provision/parameters.t.sol | 38 +- .../test/staking/provision/provision.t.sol | 29 +- .../test/staking/provision/reprovision.t.sol | 103 +- .../staking/{thaw => provision}/thaw.t.sol | 54 +- .../serviceProvider/serviceProvider.t.sol | 18 +- .../horizon/test/staking/slash/slash.t.sol | 11 +- .../horizon/test/staking/stake/stake.t.sol | 12 +- .../horizon/test/staking/stake/unstake.t.sol | 149 +- .../horizon/test/staking/stake/withdraw.t.sol | 62 +- .../test/staking/transfer-tools/ttools.t.sol | 112 +- .../test/utilities/GraphDirectory.t.sol | 2 +- .../GraphDirectoryImplementation.sol | 2 +- packages/horizon/test/utils/Constants.sol | 2 +- packages/horizon/test/utils/Users.sol | 2 +- packages/horizon/test/utils/Utils.sol | 2 +- .../contracts/DisputeManager.sol | 2 +- .../contracts/DisputeManagerStorage.sol | 2 +- .../contracts/SubgraphService.sol | 2 +- .../contracts/SubgraphServiceStorage.sol | 2 +- .../contracts/interfaces/IDisputeManager.sol | 2 +- .../contracts/interfaces/ISubgraphService.sol | 2 +- .../contracts/libraries/Allocation.sol | 2 +- .../contracts/libraries/Attestation.sol | 2 +- .../contracts/libraries/LegacyAllocation.sol | 2 +- .../contracts/utilities/AllocationManager.sol | 2 +- .../utilities/AllocationManagerStorage.sol | 2 +- .../utilities/AttestationManager.sol | 2 +- .../utilities/AttestationManagerStorage.sol | 2 +- .../contracts/utilities/Directory.sol | 2 +- packages/subgraph-service/foundry.toml | 10 +- packages/subgraph-service/hardhat.config.ts | 2 +- packages/subgraph-service/package.json | 2 +- .../test/SubgraphBaseTest.t.sol | 2 +- .../test/disputeManager/DisputeManager.t.sol | 63 +- .../constructor/constructor.t.sol | 2 +- .../disputeManager/disputes/disputes.t.sol | 2 +- .../disputes/indexing/accept.t.sol | 2 +- .../disputes/indexing/cancel.t.sol | 2 +- .../disputes/indexing/create.t.sol | 2 +- .../disputes/indexing/draw.t.sol | 2 +- .../disputes/indexing/reject.t.sol | 2 +- .../disputes/query/accept.t.sol | 2 +- .../disputes/query/cancel.t.sol | 2 +- .../disputes/query/create.t.sol | 2 +- .../disputeManager/disputes/query/draw.t.sol | 2 +- .../disputes/query/reject.t.sol | 2 +- .../disputes/queryConflict/accept.t.sol | 2 +- .../disputes/queryConflict/cancel.t.sol | 2 +- .../disputes/queryConflict/create.t.sol | 2 +- .../disputes/queryConflict/draw.t.sol | 2 +- .../disputes/queryConflict/reject.t.sol | 2 +- .../governance/arbitrator.t.sol | 2 +- .../governance/disputeDeposit.t.sol | 2 +- .../governance/fishermanRewardCut.t.sol | 2 +- .../governance/maxSlashingCut.t.sol | 2 +- .../test/mocks/MockCuration.sol | 2 +- .../test/mocks/MockGRTToken.sol | 2 +- .../test/mocks/MockRewardsManager.sol | 2 +- .../test/shared/HorizonStakingShared.t.sol | 2 +- .../test/shared/SubgraphServiceShared.t.sol | 2 +- .../subgraphService/SubgraphService.t.sol | 103 +- .../allocation/closeStale.t.sol | 2 +- .../subgraphService/allocation/resize.t.sol | 2 +- .../subgraphService/allocation/start.t.sol | 2 +- .../subgraphService/allocation/stop.t.sol | 2 +- .../subgraphService/collect/collect.t.sol | 2 +- .../collect/indexing/indexing.t.sol | 2 +- .../subgraphService/collect/query/query.t.sol | 2 +- .../subgraphService/provider/register.t.sol | 2 +- .../provider/rewardsDestination.t.sol | 2 +- .../subgraphService/provision/accept.t.sol | 2 +- .../subgraph-service/test/utils/Constants.sol | 2 +- .../subgraph-service/test/utils/Users.sol | 2 +- .../subgraph-service/test/utils/Utils.sol | 2 +- 182 files changed, 2877 insertions(+), 1437 deletions(-) delete mode 100644 packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol rename packages/horizon/test/staking/{thaw => provision}/thaw.t.sol (58%) diff --git a/packages/contracts/contracts/arbitrum/ITokenGateway.sol b/packages/contracts/contracts/arbitrum/ITokenGateway.sol index 96080858c..3b12e578e 100644 --- a/packages/contracts/contracts/arbitrum/ITokenGateway.sol +++ b/packages/contracts/contracts/arbitrum/ITokenGateway.sol @@ -23,7 +23,7 @@ * */ -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; interface ITokenGateway { /// @notice event deprecated in favor of DepositInitiated and WithdrawalInitiated diff --git a/packages/contracts/contracts/curation/ICuration.sol b/packages/contracts/contracts/curation/ICuration.sol index 635b45a0c..fe2f0e929 100644 --- a/packages/contracts/contracts/curation/ICuration.sol +++ b/packages/contracts/contracts/curation/ICuration.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; /** * @title Curation Interface diff --git a/packages/contracts/contracts/epochs/IEpochManager.sol b/packages/contracts/contracts/epochs/IEpochManager.sol index 23c55f15b..c65280d59 100644 --- a/packages/contracts/contracts/epochs/IEpochManager.sol +++ b/packages/contracts/contracts/epochs/IEpochManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; interface IEpochManager { // -- Configuration -- diff --git a/packages/contracts/contracts/gateway/ICallhookReceiver.sol b/packages/contracts/contracts/gateway/ICallhookReceiver.sol index 0fc27cf23..8d003cb76 100644 --- a/packages/contracts/contracts/gateway/ICallhookReceiver.sol +++ b/packages/contracts/contracts/gateway/ICallhookReceiver.sol @@ -6,7 +6,7 @@ * be allowlisted by the governor, but also implement this interface that contains * the function that will actually be called by the L2GraphTokenGateway. */ -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; interface ICallhookReceiver { /** diff --git a/packages/contracts/contracts/governance/Controller.sol b/packages/contracts/contracts/governance/Controller.sol index a24b96b4e..2b71fd885 100644 --- a/packages/contracts/contracts/governance/Controller.sol +++ b/packages/contracts/contracts/governance/Controller.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; import { IController } from "./IController.sol"; import { IManaged } from "./IManaged.sol"; diff --git a/packages/contracts/contracts/governance/Governed.sol b/packages/contracts/contracts/governance/Governed.sol index c9cf940db..76a3247dd 100644 --- a/packages/contracts/contracts/governance/Governed.sol +++ b/packages/contracts/contracts/governance/Governed.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; /** * @title Graph Governance contract diff --git a/packages/contracts/contracts/governance/IController.sol b/packages/contracts/contracts/governance/IController.sol index 093a0303a..6ab72010e 100644 --- a/packages/contracts/contracts/governance/IController.sol +++ b/packages/contracts/contracts/governance/IController.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; interface IController { function getGovernor() external view returns (address); diff --git a/packages/contracts/contracts/governance/IManaged.sol b/packages/contracts/contracts/governance/IManaged.sol index 59f44dd9a..ff6625d81 100644 --- a/packages/contracts/contracts/governance/IManaged.sol +++ b/packages/contracts/contracts/governance/IManaged.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; import { IController } from "./IController.sol"; diff --git a/packages/contracts/contracts/governance/Pausable.sol b/packages/contracts/contracts/governance/Pausable.sol index 260d658af..6c5d2fd2c 100644 --- a/packages/contracts/contracts/governance/Pausable.sol +++ b/packages/contracts/contracts/governance/Pausable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; abstract contract Pausable { /** diff --git a/packages/contracts/contracts/l2/staking/IL2StakingBase.sol b/packages/contracts/contracts/l2/staking/IL2StakingBase.sol index 8c0b145de..f5c33c2d0 100644 --- a/packages/contracts/contracts/l2/staking/IL2StakingBase.sol +++ b/packages/contracts/contracts/l2/staking/IL2StakingBase.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; import { ICallhookReceiver } from "../../gateway/ICallhookReceiver.sol"; diff --git a/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol b/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol index 086f88e77..500694e89 100644 --- a/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol +++ b/packages/contracts/contracts/l2/staking/IL2StakingTypes.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; interface IL2StakingTypes { /// @dev Message codes for the L1 -> L2 bridge callhook diff --git a/packages/contracts/contracts/rewards/IRewardsIssuer.sol b/packages/contracts/contracts/rewards/IRewardsIssuer.sol index 4bcfa6ea0..705ce8db8 100644 --- a/packages/contracts/contracts/rewards/IRewardsIssuer.sol +++ b/packages/contracts/contracts/rewards/IRewardsIssuer.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; interface IRewardsIssuer { /** diff --git a/packages/contracts/contracts/rewards/IRewardsManager.sol b/packages/contracts/contracts/rewards/IRewardsManager.sol index 4030ad2e5..3b6bf3ff6 100644 --- a/packages/contracts/contracts/rewards/IRewardsManager.sol +++ b/packages/contracts/contracts/rewards/IRewardsManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; interface IRewardsManager { /** diff --git a/packages/contracts/contracts/rewards/RewardsManagerStorage.sol b/packages/contracts/contracts/rewards/RewardsManagerStorage.sol index c40ad38f4..ded325593 100644 --- a/packages/contracts/contracts/rewards/RewardsManagerStorage.sol +++ b/packages/contracts/contracts/rewards/RewardsManagerStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; import "./IRewardsManager.sol"; import "../governance/Managed.sol"; diff --git a/packages/contracts/contracts/token/IGraphToken.sol b/packages/contracts/contracts/token/IGraphToken.sol index f6f1c00f6..df3b7643f 100644 --- a/packages/contracts/contracts/token/IGraphToken.sol +++ b/packages/contracts/contracts/token/IGraphToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxy.sol b/packages/contracts/contracts/upgrades/GraphProxy.sol index cb52ab1dc..d6fbfac7f 100644 --- a/packages/contracts/contracts/upgrades/GraphProxy.sol +++ b/packages/contracts/contracts/upgrades/GraphProxy.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; import { GraphProxyStorage } from "./GraphProxyStorage.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol b/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol index 55bbd2176..db8e9dcb3 100644 --- a/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol +++ b/packages/contracts/contracts/upgrades/GraphProxyAdmin.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; import { Governed } from "../governance/Governed.sol"; diff --git a/packages/contracts/contracts/upgrades/GraphProxyStorage.sol b/packages/contracts/contracts/upgrades/GraphProxyStorage.sol index cd076c118..7871e4996 100644 --- a/packages/contracts/contracts/upgrades/GraphProxyStorage.sol +++ b/packages/contracts/contracts/upgrades/GraphProxyStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; /** * @title Graph Proxy Storage diff --git a/packages/contracts/contracts/upgrades/GraphUpgradeable.sol b/packages/contracts/contracts/upgrades/GraphUpgradeable.sol index ffc47aa40..60dfbe888 100644 --- a/packages/contracts/contracts/upgrades/GraphUpgradeable.sol +++ b/packages/contracts/contracts/upgrades/GraphUpgradeable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; import { IGraphProxy } from "./IGraphProxy.sol"; diff --git a/packages/contracts/contracts/upgrades/IGraphProxy.sol b/packages/contracts/contracts/upgrades/IGraphProxy.sol index e81722e3f..4f501ed7c 100644 --- a/packages/contracts/contracts/upgrades/IGraphProxy.sol +++ b/packages/contracts/contracts/upgrades/IGraphProxy.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; interface IGraphProxy { function admin() external returns (address); diff --git a/packages/contracts/contracts/utils/TokenUtils.sol b/packages/contracts/contracts/utils/TokenUtils.sol index a34059a1d..fb125613a 100644 --- a/packages/contracts/contracts/utils/TokenUtils.sol +++ b/packages/contracts/contracts/utils/TokenUtils.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.7.6 || 0.8.26; +pragma solidity ^0.7.6 || 0.8.27; import "../token/IGraphToken.sol"; diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index c87cf5e40..8a06ad4ea 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDataService } from "./interfaces/IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/DataServiceStorage.sol b/packages/horizon/contracts/data-service/DataServiceStorage.sol index 03b060515..a0271443c 100644 --- a/packages/horizon/contracts/data-service/DataServiceStorage.sol +++ b/packages/horizon/contracts/data-service/DataServiceStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; abstract contract DataServiceV1Storage { /// @dev Gap to allow adding variables in future upgrades diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index bcec6f828..e0ea587f4 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index 483b67b80..cb4f908dc 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index 404876dc6..4d88cb72e 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDataServicePausable } from "../interfaces/IDataServicePausable.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol index 53003ebfc..52f27d9c4 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDataServicePausable } from "../interfaces/IDataServicePausable.sol"; diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index 96fae4c26..081950b8d 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { Address } from "@openzeppelin/contracts/utils/Address.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index 258fc336c..b7e1028f0 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index 5e84863e6..483f11274 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDataService } from "./IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol index 04e931749..bd27ca848 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDataService } from "./IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol index ba21f3019..811d3b92e 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDataService } from "./IDataService.sol"; diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol index 08ac970bb..fef392302 100644 --- a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index ef7c9bcf1..d1cf94287 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol index 8649055db..0a6bed2be 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title Storage layout for the {ProvisionManager} helper contract. diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index ab89c94f8..f446d6f52 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title Interface for the {GraphPayments} contract diff --git a/packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol b/packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol index 6bc063057..de812fa87 100644 --- a/packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol +++ b/packages/horizon/contracts/interfaces/IGraphProxyAdmin.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title IGraphProxyAdmin diff --git a/packages/horizon/contracts/interfaces/IHorizonStaking.sol b/packages/horizon/contracts/interfaces/IHorizonStaking.sol index 1cf1b6283..e38c3e451 100644 --- a/packages/horizon/contracts/interfaces/IHorizonStaking.sol +++ b/packages/horizon/contracts/interfaces/IHorizonStaking.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IHorizonStakingTypes } from "./internal/IHorizonStakingTypes.sol"; import { IHorizonStakingMain } from "./internal/IHorizonStakingMain.sol"; diff --git a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol index 176f6284b..bcd67df0a 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphPayments } from "./IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 7ab5ff023..4b98cf0a5 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphPayments } from "./IGraphPayments.sol"; @@ -84,12 +84,7 @@ interface IPaymentsEscrow { * @param tokens The amount of tokens being thawed * @param thawEndTimestamp The timestamp at which the thawing period ends */ - event Thaw( - address indexed payer, - address indexed receiver, - uint256 tokens, - uint256 thawEndTimestamp - ); + event Thaw(address indexed payer, address indexed receiver, uint256 tokens, uint256 thawEndTimestamp); /** * @notice Emitted when a payer withdraws funds from the escrow for a payer-receiver pair diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index 28561e2ce..e7b5bc4fd 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IPaymentsCollector } from "./IPaymentsCollector.sol"; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index 522ddf44e..e221dc2cf 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; import { IGraphPayments } from "../IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 2df5cd82a..6e29cb5c9 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index bbbfa07b6..418459d9f 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index 5c2f3f5e7..eef8098e6 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /* solhint-disable var-name-mixedcase */ // TODO: create custom var-name-mixedcase diff --git a/packages/horizon/contracts/libraries/Denominations.sol b/packages/horizon/contracts/libraries/Denominations.sol index fe5cf2d05..675194b1e 100644 --- a/packages/horizon/contracts/libraries/Denominations.sol +++ b/packages/horizon/contracts/libraries/Denominations.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title Denominations library diff --git a/packages/horizon/contracts/libraries/LibFixedMath.sol b/packages/horizon/contracts/libraries/LibFixedMath.sol index 1a941ed11..f23329b5e 100644 --- a/packages/horizon/contracts/libraries/LibFixedMath.sol +++ b/packages/horizon/contracts/libraries/LibFixedMath.sol @@ -18,7 +18,7 @@ // SPDX-License-Identifier: Apache-2.0 -pragma solidity 0.8.26; +pragma solidity 0.8.27; // solhint-disable indent /// @dev Signed, fixed-point, 127-bit precision math library. diff --git a/packages/horizon/contracts/libraries/LinkedList.sol b/packages/horizon/contracts/libraries/LinkedList.sol index 13607e257..aa72b3fcf 100644 --- a/packages/horizon/contracts/libraries/LinkedList.sol +++ b/packages/horizon/contracts/libraries/LinkedList.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title LinkedList library diff --git a/packages/horizon/contracts/libraries/MathUtils.sol b/packages/horizon/contracts/libraries/MathUtils.sol index a5ad3f41a..1a5599fb6 100644 --- a/packages/horizon/contracts/libraries/MathUtils.sol +++ b/packages/horizon/contracts/libraries/MathUtils.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title MathUtils Library diff --git a/packages/horizon/contracts/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol index b02230628..5bd636add 100644 --- a/packages/horizon/contracts/libraries/PPMMath.sol +++ b/packages/horizon/contracts/libraries/PPMMath.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title PPMMath library diff --git a/packages/horizon/contracts/libraries/UintRange.sol b/packages/horizon/contracts/libraries/UintRange.sol index 12fe10176..b2caf779c 100644 --- a/packages/horizon/contracts/libraries/UintRange.sol +++ b/packages/horizon/contracts/libraries/UintRange.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title UintRange library diff --git a/packages/horizon/contracts/mocks/ControllerMock.sol b/packages/horizon/contracts/mocks/ControllerMock.sol index 82673dca6..557b1eff6 100644 --- a/packages/horizon/contracts/mocks/ControllerMock.sol +++ b/packages/horizon/contracts/mocks/ControllerMock.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IController } from "@graphprotocol/contracts/contracts/governance/IController.sol"; import { IManaged } from "@graphprotocol/contracts/contracts/governance/IManaged.sol"; diff --git a/packages/horizon/contracts/mocks/CurationMock.sol b/packages/horizon/contracts/mocks/CurationMock.sol index 402a07e4c..996f971b1 100644 --- a/packages/horizon/contracts/mocks/CurationMock.sol +++ b/packages/horizon/contracts/mocks/CurationMock.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { MockGRTToken } from "./MockGRTToken.sol"; diff --git a/packages/horizon/contracts/mocks/EpochManagerMock.sol b/packages/horizon/contracts/mocks/EpochManagerMock.sol index b76714e50..12f694a5e 100644 --- a/packages/horizon/contracts/mocks/EpochManagerMock.sol +++ b/packages/horizon/contracts/mocks/EpochManagerMock.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; diff --git a/packages/horizon/contracts/mocks/MockGRTToken.sol b/packages/horizon/contracts/mocks/MockGRTToken.sol index 1d5649f29..235999ae5 100644 --- a/packages/horizon/contracts/mocks/MockGRTToken.sol +++ b/packages/horizon/contracts/mocks/MockGRTToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; diff --git a/packages/horizon/contracts/mocks/RewardsManagerMock.sol b/packages/horizon/contracts/mocks/RewardsManagerMock.sol index 2388d99b6..272584ca4 100644 --- a/packages/horizon/contracts/mocks/RewardsManagerMock.sol +++ b/packages/horizon/contracts/mocks/RewardsManagerMock.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { MockGRTToken } from "./MockGRTToken.sol"; diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 4072c2616..b7cb34db7 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 5045be86d..5d0694346 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; @@ -18,12 +18,7 @@ import { GraphDirectory } from "../utilities/GraphDirectory.sol"; * for payments made through the payments protocol for services provided * via a Graph Horizon data service. */ -contract PaymentsEscrow is - Initializable, - MulticallUpgradeable, - GraphDirectory, - IPaymentsEscrow -{ +contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, IPaymentsEscrow { using TokenUtils for IGraphToken; /// @notice Authorization details for payer-collector pairs @@ -73,7 +68,6 @@ contract PaymentsEscrow is WITHDRAW_ESCROW_THAWING_PERIOD = withdrawEscrowThawingPeriod; } - /** * @notice Initialize the contract */ diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index e385667c7..f3d67e819 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; import { ITAPCollector } from "../../interfaces/ITAPCollector.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index e6cc98315..74b2d8d09 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStakingMain } from "../interfaces/internal/IHorizonStakingMain.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 722a2f061..b3e94c7ea 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; import { IHorizonStakingBase } from "../interfaces/internal/IHorizonStakingBase.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 1f6843d53..ba7eb3a5b 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index 2b58b02c7..ff515962a 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IHorizonStakingExtension } from "../interfaces/internal/IHorizonStakingExtension.sol"; import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; @@ -105,7 +105,7 @@ abstract contract HorizonStakingV1Storage { /// @dev Operator allow list (legacy) /// Only used when the verifier is the subgraph data service. - mapping(address legacyOperator => mapping(address serviceProvider => bool authorized)) internal _legacyOperatorAuth; + mapping(address serviceProvider => mapping(address legacyOperator => bool authorized)) internal _legacyOperatorAuth; // -- Asset Holders -- diff --git a/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol b/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol index 1f7f0b3d2..cda9bf247 100644 --- a/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol +++ b/packages/horizon/contracts/staking/libraries/ExponentialRebates.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { LibFixedMath } from "../../libraries/LibFixedMath.sol"; diff --git a/packages/horizon/contracts/staking/utilities/Managed.sol b/packages/horizon/contracts/staking/utilities/Managed.sol index 4d8e77b4f..44d0ad81b 100644 --- a/packages/horizon/contracts/staking/utilities/Managed.sol +++ b/packages/horizon/contracts/staking/utilities/Managed.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { GraphDirectory } from "../../utilities/GraphDirectory.sol"; diff --git a/packages/horizon/contracts/utilities/GraphDirectory.sol b/packages/horizon/contracts/utilities/GraphDirectory.sol index b63bcdeab..c24a7984d 100644 --- a/packages/horizon/contracts/utilities/GraphDirectory.sol +++ b/packages/horizon/contracts/utilities/GraphDirectory.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStaking } from "../interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/foundry.toml b/packages/horizon/foundry.toml index a1826d45c..56cb8a0b6 100644 --- a/packages/horizon/foundry.toml +++ b/packages/horizon/foundry.toml @@ -6,12 +6,4 @@ test = 'test' cache_path = 'cache_forge' fs_permissions = [{ access = "read", path = "./"}] optimizer = true -optimizer-runs = 200 -via_ir = true - -[profile.lite] -optimizer = false -optimizer-runs = 1 - -[profile.lite.optimizer_details.yulDetails] -optimizerSteps = ':' \ No newline at end of file +optimizer_runs = 200 \ No newline at end of file diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index fa73c9643..de221c723 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -7,9 +7,8 @@ import { HardhatUserConfig } from 'hardhat/config' const config: HardhatUserConfig = { solidity: { - version: '0.8.26', + version: '0.8.27', settings: { - viaIR: true, optimizer: { enabled: true, runs: 200, diff --git a/packages/horizon/package.json b/packages/horizon/package.json index a214e1d0a..064e7e1db 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -9,8 +9,8 @@ "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", - "build": "forge build && hardhat compile", - "test": "FOUNDRY_PROFILE=lite forge test -vvv && hardhat test" + "build": "forge build contracts && hardhat compile", + "test": "FOUNDRY_PROFILE=test forge test -vvv && hardhat test" }, "devDependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 6236d00dd..3c2375b8d 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -14,6 +14,7 @@ import { GraphPayments } from "contracts/payments/GraphPayments.sol"; import { IHorizonStaking } from "contracts/interfaces/IHorizonStaking.sol"; import { HorizonStaking } from "contracts/staking/HorizonStaking.sol"; import { HorizonStakingExtension } from "contracts/staking/HorizonStakingExtension.sol"; +import { IHorizonStakingTypes } from "contracts/interfaces/internal/IHorizonStakingTypes.sol"; import { MockGRTToken } from "../contracts/mocks/MockGRTToken.sol"; import { EpochManagerMock } from "../contracts/mocks/EpochManagerMock.sol"; import { RewardsManagerMock } from "../contracts/mocks/RewardsManagerMock.sol"; @@ -22,8 +23,7 @@ import { Constants } from "./utils/Constants.sol"; import { Users } from "./utils/Users.sol"; import { Utils } from "./utils/Utils.sol"; -abstract contract GraphBaseTest is Utils, Constants { - +abstract contract GraphBaseTest is IHorizonStakingTypes, Utils, Constants { /* * VARIABLES */ @@ -54,10 +54,6 @@ abstract contract GraphBaseTest is Utils, Constants { Users internal users; - /* Constants */ - - Constants public constants; - /* * SET UP */ diff --git a/packages/horizon/test/data-service/DataService.t.sol b/packages/horizon/test/data-service/DataService.t.sol index 98f7aadb3..c535c6dea 100644 --- a/packages/horizon/test/data-service/DataService.t.sol +++ b/packages/horizon/test/data-service/DataService.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; @@ -69,7 +69,7 @@ contract DataServiceTest is HorizonStakingSharedTest { dataService.setProvisionTokensRange(dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); tokens = bound(tokens, dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); - _createProvision(address(dataService), tokens, 0, 0); + _createProvision(users.indexer, address(dataService), tokens, 0, 0); dataService.checkProvisionTokens(users.indexer); } @@ -81,7 +81,7 @@ contract DataServiceTest is HorizonStakingSharedTest { ); // this checker accepts provisions with any amount of tokens - _createProvision(address(dataServiceOverride), tokens, 0, 0); + _createProvision(users.indexer, address(dataServiceOverride), tokens, 0, 0); dataServiceOverride.checkProvisionTokens(users.indexer); } @@ -89,7 +89,7 @@ contract DataServiceTest is HorizonStakingSharedTest { dataService.setProvisionTokensRange(dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); tokens = bound(tokens, 1, dataService.PROVISION_TOKENS_MIN() - 1); - _createProvision(address(dataService), tokens, 0, 0); + _createProvision(users.indexer, address(dataService), tokens, 0, 0); vm.expectRevert( abi.encodeWithSelector( ProvisionManager.ProvisionManagerInvalidValue.selector, @@ -142,7 +142,7 @@ contract DataServiceTest is HorizonStakingSharedTest { dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); verifierCut = uint32(bound(verifierCut, dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX())); - _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), verifierCut, 0); + _createProvision(users.indexer, address(dataService), dataService.PROVISION_TOKENS_MIN(), verifierCut, 0); dataService.checkProvisionParameters(users.indexer, false); } @@ -151,7 +151,7 @@ contract DataServiceTest is HorizonStakingSharedTest { dataServiceOverride.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); // this checker accepts provisions with any verifier cut range - _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), verifierCut, 0); + _createProvision(users.indexer, address(dataService), dataService.PROVISION_TOKENS_MIN(), verifierCut, 0); dataServiceOverride.checkProvisionParameters(users.indexer, false); } @@ -159,7 +159,7 @@ contract DataServiceTest is HorizonStakingSharedTest { dataService.setVerifierCutRange(dataService.VERIFIER_CUT_MIN(), dataService.VERIFIER_CUT_MAX()); verifierCut = uint32(bound(verifierCut, 0, dataService.VERIFIER_CUT_MIN() - 1)); - _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), verifierCut, 0); + _createProvision(users.indexer, address(dataService), dataService.PROVISION_TOKENS_MIN(), verifierCut, 0); vm.expectRevert( abi.encodeWithSelector( ProvisionManager.ProvisionManagerInvalidValue.selector, @@ -205,7 +205,7 @@ contract DataServiceTest is HorizonStakingSharedTest { bound(thawingPeriod, dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()) ); - _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), 0, thawingPeriod); + _createProvision(users.indexer, address(dataService), dataService.PROVISION_TOKENS_MIN(), 0, thawingPeriod); dataService.checkProvisionParameters(users.indexer, false); } @@ -214,7 +214,7 @@ contract DataServiceTest is HorizonStakingSharedTest { dataServiceOverride.setThawingPeriodRange(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); // this checker accepts provisions with any verifier cut range - _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), 0, thawingPeriod); + _createProvision(users.indexer, address(dataService), dataService.PROVISION_TOKENS_MIN(), 0, thawingPeriod); dataServiceOverride.checkProvisionParameters(users.indexer, false); } @@ -222,7 +222,7 @@ contract DataServiceTest is HorizonStakingSharedTest { dataService.setThawingPeriodRange(dataService.THAWING_PERIOD_MIN(), dataService.THAWING_PERIOD_MAX()); thawingPeriod = uint32(bound(thawingPeriod, 0, dataService.THAWING_PERIOD_MIN() - 1)); - _createProvision(address(dataService), dataService.PROVISION_TOKENS_MIN(), 0, thawingPeriod); + _createProvision(users.indexer, address(dataService), dataService.PROVISION_TOKENS_MIN(), 0, thawingPeriod); vm.expectRevert( abi.encodeWithSelector( ProvisionManager.ProvisionManagerInvalidValue.selector, @@ -255,12 +255,13 @@ contract DataServiceTest is HorizonStakingSharedTest { // stage provision parameter changes _createProvision( + users.indexer, address(dataService), dataService.PROVISION_TOKENS_MIN(), dataService.VERIFIER_CUT_MIN(), dataService.THAWING_PERIOD_MIN() ); - staking.setProvisionParameters(users.indexer, address(dataService), maxVerifierCut, thawingPeriod); + _setProvisionParameters(users.indexer, address(dataService), maxVerifierCut, thawingPeriod); // accept provision parameters if (maxVerifierCut != dataService.VERIFIER_CUT_MIN() || thawingPeriod != dataService.THAWING_PERIOD_MIN()) { @@ -287,12 +288,13 @@ contract DataServiceTest is HorizonStakingSharedTest { // stage provision parameter changes _createProvision( + users.indexer, address(dataService), dataService.PROVISION_TOKENS_MIN(), dataService.VERIFIER_CUT_MIN(), dataService.THAWING_PERIOD_MIN() ); - staking.setProvisionParameters( + _setProvisionParameters( users.indexer, address(dataService), dataService.VERIFIER_CUT_MIN(), @@ -324,12 +326,13 @@ contract DataServiceTest is HorizonStakingSharedTest { // stage provision parameter changes _createProvision( + users.indexer, address(dataService), dataService.PROVISION_TOKENS_MIN(), dataService.VERIFIER_CUT_MIN(), dataService.THAWING_PERIOD_MIN() ); - staking.setProvisionParameters( + _setProvisionParameters( users.indexer, address(dataService), maxVerifierCut, diff --git a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol index c8721260f..be33173f8 100644 --- a/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol +++ b/packages/horizon/test/data-service/DataServiceUpgradeable.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { GraphBaseTest } from "../GraphBase.t.sol"; import { DataServiceBaseUpgradeable } from "./implementations/DataServiceBaseUpgradeable.sol"; diff --git a/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol index 4ab1406ae..f6f31d54c 100644 --- a/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol +++ b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { HorizonStakingSharedTest } from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; import { DataServiceImpFees } from "../implementations/DataServiceImpFees.sol"; @@ -126,20 +126,27 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { } // -- Assertion functions -- - + // use struct to avoid 'stack too deep' error + struct CalcValues_LockStake { + uint256 unlockTimestamp; + uint256 stakeToLock; + bytes32 predictedClaimId; + } function _assert_lockStake(address serviceProvider, uint256 tokens) private { // before state (bytes32 beforeHead, , uint256 beforeNonce, uint256 beforeCount) = dataService.claimsLists(serviceProvider); uint256 beforeLockedStake = dataService.feesProvisionTracker(serviceProvider); // calc - uint256 unlockTimestamp = block.timestamp + dataService.LOCK_DURATION(); - uint256 stakeToLock = tokens * dataService.STAKE_TO_FEES_RATIO(); - bytes32 predictedClaimId = keccak256(abi.encodePacked(address(dataService), serviceProvider, beforeNonce)); + CalcValues_LockStake memory calcValues = CalcValues_LockStake({ + unlockTimestamp: block.timestamp + dataService.LOCK_DURATION(), + stakeToLock: tokens * dataService.STAKE_TO_FEES_RATIO(), + predictedClaimId: keccak256(abi.encodePacked(address(dataService), serviceProvider, beforeNonce)) + }); // it should emit a an event vm.expectEmit(); - emit IDataServiceFees.StakeClaimLocked(serviceProvider, predictedClaimId, stakeToLock, unlockTimestamp); + emit IDataServiceFees.StakeClaimLocked(serviceProvider, calcValues.predictedClaimId, calcValues.stakeToLock, calcValues.unlockTimestamp); dataService.lockStake(serviceProvider, tokens); // after state @@ -149,24 +156,30 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { ); // it should lock the tokens - assertEq(beforeLockedStake + stakeToLock, afterLockedStake); + assertEq(beforeLockedStake + calcValues.stakeToLock, afterLockedStake); // it should create a stake claim (uint256 claimTokens, uint256 createdAt, uint256 releaseAt, bytes32 nextClaim) = dataService.claims( - predictedClaimId + calcValues.predictedClaimId ); - assertEq(claimTokens, stakeToLock); + assertEq(claimTokens, calcValues.stakeToLock); assertEq(createdAt, block.timestamp); - assertEq(releaseAt, unlockTimestamp); + assertEq(releaseAt, calcValues.unlockTimestamp); assertEq(nextClaim, bytes32(0)); // it should update the list assertEq(afterCount, beforeCount + 1); assertEq(afterNonce, beforeNonce + 1); - assertEq(afterHead, beforeCount == 0 ? predictedClaimId : beforeHead); - assertEq(afterTail, predictedClaimId); + assertEq(afterHead, beforeCount == 0 ? calcValues.predictedClaimId : beforeHead); + assertEq(afterTail, calcValues.predictedClaimId); } + // use struct to avoid 'stack too deep' error + struct CalcValues_ReleaseStake { + uint256 claimsCount; + uint256 tokensReleased; + bytes32 head; + } function _assert_releaseStake(address serviceProvider, uint256 n) private { // before state (bytes32 beforeHead, bytes32 beforeTail, uint256 beforeNonce, uint256 beforeCount) = dataService.claimsLists( @@ -177,23 +190,25 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { // calc and set events vm.expectEmit(); - uint256 claimsCount = 0; - uint256 tokensReleased = 0; - bytes32 head = beforeHead; - while (head != bytes32(0) && (claimsCount < n || n == 0)) { - (uint256 claimTokens, , uint256 releaseAt, bytes32 nextClaim) = dataService.claims(head); + CalcValues_ReleaseStake memory calcValues = CalcValues_ReleaseStake({ + claimsCount: 0, + tokensReleased: 0, + head: beforeHead + }); + while (calcValues.head != bytes32(0) && (calcValues.claimsCount < n || n == 0)) { + (uint256 claimTokens, , uint256 releaseAt, bytes32 nextClaim) = dataService.claims(calcValues.head); if (releaseAt > block.timestamp) { break; } - emit IDataServiceFees.StakeClaimReleased(serviceProvider, head, claimTokens, releaseAt); - head = nextClaim; - tokensReleased += claimTokens; - claimsCount++; + emit IDataServiceFees.StakeClaimReleased(serviceProvider, calcValues.head, claimTokens, releaseAt); + calcValues.head = nextClaim; + calcValues.tokensReleased += claimTokens; + calcValues.claimsCount++; } // it should emit a an event - emit IDataServiceFees.StakeClaimsReleased(serviceProvider, claimsCount, tokensReleased); + emit IDataServiceFees.StakeClaimsReleased(serviceProvider, calcValues.claimsCount, calcValues.tokensReleased); dataService.releaseStake(n); // after state @@ -203,17 +218,17 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { uint256 afterLockedStake = dataService.feesProvisionTracker(serviceProvider); // it should release the tokens - assertEq(beforeLockedStake - tokensReleased, afterLockedStake); + assertEq(beforeLockedStake - calcValues.tokensReleased, afterLockedStake); // it should remove the processed claims from the list - assertEq(afterCount, beforeCount - claimsCount); + assertEq(afterCount, beforeCount - calcValues.claimsCount); assertEq(afterNonce, beforeNonce); - if (claimsCount != 0) { + if (calcValues.claimsCount != 0) { assertNotEq(afterHead, beforeHead); } else { assertEq(afterHead, beforeHead); } - assertEq(afterHead, head); - assertEq(afterTail, claimsCount == beforeCount ? bytes32(0) : beforeTail); + assertEq(afterHead, calcValues.head); + assertEq(afterTail, calcValues.claimsCount == beforeCount ? bytes32(0) : beforeTail); } } diff --git a/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol b/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol index c71cace11..111838fe4 100644 --- a/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol +++ b/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { HorizonStakingSharedTest } from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; import { DataServiceImpPausable } from "../implementations/DataServiceImpPausable.sol"; diff --git a/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol b/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol index 9f4a8822b..6e58810c1 100644 --- a/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol +++ b/packages/horizon/test/data-service/extensions/DataServicePausableUpgradeable.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { GraphBaseTest } from "../../GraphBase.t.sol"; import { DataServiceImpPausableUpgradeable } from "../implementations/DataServiceImpPausableUpgradeable.sol"; diff --git a/packages/horizon/test/data-service/implementations/DataServiceBase.sol b/packages/horizon/test/data-service/implementations/DataServiceBase.sol index b8171e649..d98dd2857 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceBase.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceBase.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { DataService } from "../../../contracts/data-service/DataService.sol"; import { IGraphPayments } from "./../../../contracts/interfaces/IGraphPayments.sol"; diff --git a/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol index fbe2fe211..31309c524 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { DataService } from "../../../contracts/data-service/DataService.sol"; import { IGraphPayments } from "./../../../contracts/interfaces/IGraphPayments.sol"; contract DataServiceBaseUpgradeable is DataService { - constructor(address controller) DataService(controller) { + constructor(address controller_) DataService(controller_) { _disableInitializers(); } diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol b/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol index ee071c47d..efabda6ff 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { DataService } from "../../../contracts/data-service/DataService.sol"; import { DataServiceFees } from "../../../contracts/data-service/extensions/DataServiceFees.sol"; @@ -25,6 +25,7 @@ contract DataServiceImpFees is DataServiceFees { uint256 amount = abi.decode(data, (uint256)); _releaseStake(serviceProvider, 0); _lockStake(serviceProvider, amount * STAKE_TO_FEES_RATIO, block.timestamp + LOCK_DURATION); + return amount; } function lockStake(address serviceProvider, uint256 amount) external { diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol index 5d49f8873..0ca990ab1 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { DataService } from "../../../contracts/data-service/DataService.sol"; import { DataServicePausable } from "../../../contracts/data-service/extensions/DataServicePausable.sol"; diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol b/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol index 5b55d0866..39b2bb26b 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { DataService } from "../../../contracts/data-service/DataService.sol"; import { DataServicePausableUpgradeable } from "../../../contracts/data-service/extensions/DataServicePausableUpgradeable.sol"; import { IGraphPayments } from "./../../../contracts/interfaces/IGraphPayments.sol"; contract DataServiceImpPausableUpgradeable is DataServicePausableUpgradeable { - constructor(address controller) DataService(controller) { + constructor(address controller_) DataService(controller_) { _disableInitializers(); } diff --git a/packages/horizon/test/data-service/implementations/DataServiceOverride.sol b/packages/horizon/test/data-service/implementations/DataServiceOverride.sol index 838be68a5..c5d50ca74 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceOverride.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceOverride.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { DataServiceBase } from "./DataServiceBase.sol"; diff --git a/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol b/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol index a7ec2f614..af147fdd6 100644 --- a/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol +++ b/packages/horizon/test/data-service/libraries/ProvisionTracker.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { HorizonStakingSharedTest } from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; import { ProvisionTrackerImplementation } from "./ProvisionTrackerImplementation.sol"; diff --git a/packages/horizon/test/data-service/libraries/ProvisionTrackerImplementation.sol b/packages/horizon/test/data-service/libraries/ProvisionTrackerImplementation.sol index 0093fba72..5c9cf4a6a 100644 --- a/packages/horizon/test/data-service/libraries/ProvisionTrackerImplementation.sol +++ b/packages/horizon/test/data-service/libraries/ProvisionTrackerImplementation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { ProvisionTracker } from "../../../contracts/data-service/libraries/ProvisionTracker.sol"; diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index a510f57bf..2421ea80c 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 1ba403a23..67efcc6e7 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index 5023c38ce..3e5b71bc0 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/deposit.t.sol b/packages/horizon/test/escrow/deposit.t.sol index 79b7c3616..3ce341a1a 100644 --- a/packages/horizon/test/escrow/deposit.t.sol +++ b/packages/horizon/test/escrow/deposit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/paused.t.sol b/packages/horizon/test/escrow/paused.t.sol index 2be37a61b..f6b65aa2b 100644 --- a/packages/horizon/test/escrow/paused.t.sol +++ b/packages/horizon/test/escrow/paused.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index 35f501ff3..36808602c 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/escrow/withdraw.t.sol b/packages/horizon/test/escrow/withdraw.t.sol index f7ffdd1c6..0e5670c7a 100644 --- a/packages/horizon/test/escrow/withdraw.t.sol +++ b/packages/horizon/test/escrow/withdraw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/horizon/test/libraries/LinkedList.t.sol b/packages/horizon/test/libraries/LinkedList.t.sol index 5150b6116..1850cdb47 100644 --- a/packages/horizon/test/libraries/LinkedList.t.sol +++ b/packages/horizon/test/libraries/LinkedList.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/console.sol"; import {Test} from "forge-std/Test.sol"; diff --git a/packages/horizon/test/libraries/ListImplementation.sol b/packages/horizon/test/libraries/ListImplementation.sol index 9c8bbfb60..fda762c6d 100644 --- a/packages/horizon/test/libraries/ListImplementation.sol +++ b/packages/horizon/test/libraries/ListImplementation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { LinkedList } from "../../contracts/libraries/LinkedList.sol"; @@ -34,7 +34,7 @@ contract ListImplementation { return items[_id].next; } - function _processItemAddition(bytes32 _id, bytes memory _acc) internal returns (bool, bytes memory) { + function _processItemAddition(bytes32 _id, bytes memory _acc) internal view returns (bool, bytes memory) { uint256 sum = abi.decode(_acc, (uint256)); sum += items[_id].data; return (false, abi.encode(sum)); // dont break, do delete diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 9d2ef7495..62e582c26 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -60,7 +60,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { uint256 amount, uint256 tokensDataService ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { - tokensDataService = bound(tokensDataService, amount + 1, MAX_STAKING_TOKENS); + tokensDataService = bound(tokensDataService, amount + 1, MAX_STAKING_TOKENS + 1); address escrowAddress = address(escrow); mint(escrowAddress, amount); diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index faf7b8039..d9f300979 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -1,12 +1,35 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; import { GraphBaseTest } from "../../GraphBase.t.sol"; import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol"; +import { IHorizonStakingBase } from "../../../contracts/interfaces/internal/IHorizonStakingBase.sol"; +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; +import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; +import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; + +import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; +import { MathUtils } from "../../../contracts/libraries/MathUtils.sol"; +import { PPMMath } from "../../../contracts/libraries/PPMMath.sol"; +import { ExponentialRebates } from "../../../contracts/staking/libraries/ExponentialRebates.sol"; abstract contract HorizonStakingSharedTest is GraphBaseTest { + using LinkedList for LinkedList.List; + using PPMMath for uint256; + + event Transfer(address indexed from, address indexed to, uint tokens); + + address internal _allocationId = makeAddr("allocationId"); + bytes32 internal constant _subgraphDeploymentID = keccak256("subgraphDeploymentID"); + uint256 internal constant MAX_ALLOCATION_EPOCHS = 28; + + uint32 internal alphaNumerator = 100; + uint32 internal alphaDenominator = 100; + uint32 internal lambdaNumerator = 60; + uint32 internal lambdaDenominator = 100; + /* * MODIFIERS */ @@ -17,9 +40,17 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { vm.stopPrank(); } - modifier assumeProvisionTokens(uint256 tokens) { - vm.assume(tokens > 0); - vm.assume(tokens <= MAX_STAKING_TOKENS); + modifier useOperator() { + vm.startPrank(users.indexer); + _setOperator(users.operator, subgraphDataServiceAddress, true); + vm.startPrank(users.operator); + _; + vm.stopPrank(); + } + + modifier useStake(uint256 amount) { + vm.assume(amount > 0); + _stake(amount); _; } @@ -43,41 +74,2203 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { } modifier useDelegationFeeCut(IGraphPayments.PaymentTypes paymentType, uint256 cut) { - _setDelegationFeeCut(paymentType, cut); + _setDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType, cut); + _; + } + + function _useProvision(address dataService, uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) internal { + // use assume instead of bound to avoid the bounding falling out of scope + vm.assume(tokens > 0); + vm.assume(tokens <= MAX_STAKING_TOKENS); + vm.assume(maxVerifierCut <= MAX_MAX_VERIFIER_CUT); + vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); + + _createProvision(users.indexer, dataService, tokens, maxVerifierCut, thawingPeriod); + } + + modifier useAllocation(uint256 tokens) { + vm.assume(tokens <= MAX_STAKING_TOKENS); + _createAllocation(users.indexer, _allocationId, _subgraphDeploymentID, tokens); + _; + } + + modifier useRebateParameters() { + _setStorage_RebateParameters(alphaNumerator, alphaDenominator, lambdaNumerator, lambdaDenominator); _; } /* - * HELPERS + * HELPERS: these are shortcuts to perform common actions that often involve multiple contract calls */ + function _createProvision( + address serviceProvider, + address verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) internal { + _stakeTo(serviceProvider, tokens); + _provision(serviceProvider, verifier, tokens, maxVerifierCut, thawingPeriod); + } - function _useProvision( - address dataService, + // This allows setting up contract state with legacy allocations + function _createAllocation( + address serviceProvider, + address allocationId, + bytes32 subgraphDeploymentID, + uint256 tokens + ) internal { + _setStorage_MaxAllocationEpochs(MAX_ALLOCATION_EPOCHS); + + IHorizonStakingExtension.Allocation memory _allocation = IHorizonStakingExtension.Allocation({ + indexer: serviceProvider, + subgraphDeploymentID: subgraphDeploymentID, + tokens: tokens, + createdAtEpoch: block.timestamp, + closedAtEpoch: 0, + collectedFees: 0, + __DEPRECATED_effectiveAllocation: 0, + accRewardsPerAllocatedToken: 0, + distributedRebates: 0 + }); + _setStorage_allocation(_allocation, allocationId, tokens); + + // delegation pool initialized + _setStorage_DelegationPool(serviceProvider, 0, uint32(PPMMath.MAX_PPM), uint32(PPMMath.MAX_PPM)); + + token.transfer(address(staking), tokens); + } + + /* + * ACTIONS: these are individual contract calls wrapped in assertion blocks to ensure they work as expected + */ + function _stake(uint256 tokens) internal { + (, address msgSender, ) = vm.readCallers(); + _stakeTo(msgSender, tokens); + } + + function _stakeTo(address serviceProvider, uint256 tokens) internal { + (, address msgSender, ) = vm.readCallers(); + + // before + uint256 beforeStakingBalance = token.balanceOf(address(staking)); + uint256 beforeSenderBalance = token.balanceOf(msgSender); + ServiceProviderInternal memory beforeServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + + // stakeTo + token.approve(address(staking), tokens); + vm.expectEmit(); + emit IHorizonStakingBase.StakeDeposited(serviceProvider, tokens); + staking.stakeTo(serviceProvider, tokens); + + // after + uint256 afterStakingBalance = token.balanceOf(address(staking)); + uint256 afterSenderBalance = token.balanceOf(msgSender); + ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + + // assert + assertEq(afterStakingBalance, beforeStakingBalance + tokens); + assertEq(afterSenderBalance, beforeSenderBalance - tokens); + assertEq(afterServiceProvider.tokensStaked, beforeServiceProvider.tokensStaked + tokens); + assertEq(afterServiceProvider.tokensProvisioned, beforeServiceProvider.tokensProvisioned); + assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeServiceProvider.__DEPRECATED_tokensAllocated); + assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, beforeServiceProvider.__DEPRECATED_tokensLocked); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLockedUntil, + beforeServiceProvider.__DEPRECATED_tokensLockedUntil + ); + } + + function _unstake(uint256 _tokens) internal { + (, address msgSender, ) = vm.readCallers(); + + uint256 deprecatedThawingPeriod = staking.__DEPRECATED_getThawingPeriod(); + + // before + uint256 beforeSenderBalance = token.balanceOf(msgSender); + uint256 beforeStakingBalance = token.balanceOf(address(staking)); + ServiceProviderInternal memory beforeServiceProvider = _getStorage_ServiceProviderInternal(msgSender); + + bool withdrawCalled = beforeServiceProvider.__DEPRECATED_tokensLocked != 0 && + block.number >= beforeServiceProvider.__DEPRECATED_tokensLockedUntil; + + if (deprecatedThawingPeriod != 0 && beforeServiceProvider.__DEPRECATED_tokensLocked > 0) { + deprecatedThawingPeriod = MathUtils.weightedAverageRoundingUp( + MathUtils.diffOrZero( + withdrawCalled ? 0 : beforeServiceProvider.__DEPRECATED_tokensLockedUntil, + block.number + ), + withdrawCalled ? 0 : beforeServiceProvider.__DEPRECATED_tokensLocked, + deprecatedThawingPeriod, + _tokens + ); + } + + // unstake + if (deprecatedThawingPeriod == 0) { + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.StakeWithdrawn(msgSender, _tokens); + } else { + if (withdrawCalled) { + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.StakeWithdrawn(msgSender, beforeServiceProvider.__DEPRECATED_tokensLocked); + } + + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.StakeLocked( + msgSender, + withdrawCalled ? _tokens : beforeServiceProvider.__DEPRECATED_tokensLocked + _tokens, + block.number + deprecatedThawingPeriod + ); + } + staking.unstake(_tokens); + + // after + uint256 afterSenderBalance = token.balanceOf(msgSender); + uint256 afterStakingBalance = token.balanceOf(address(staking)); + ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(msgSender); + + // assert + if (deprecatedThawingPeriod == 0) { + assertEq(afterSenderBalance, _tokens + beforeSenderBalance); + assertEq(afterStakingBalance, beforeStakingBalance - _tokens); + assertEq(afterServiceProvider.tokensStaked, beforeServiceProvider.tokensStaked - _tokens); + assertEq(afterServiceProvider.tokensProvisioned, beforeServiceProvider.tokensProvisioned); + assertEq( + afterServiceProvider.__DEPRECATED_tokensAllocated, + beforeServiceProvider.__DEPRECATED_tokensAllocated + ); + assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, beforeServiceProvider.__DEPRECATED_tokensLocked); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLockedUntil, + beforeServiceProvider.__DEPRECATED_tokensLockedUntil + ); + } else { + assertEq( + afterServiceProvider.tokensStaked, + withdrawCalled + ? beforeServiceProvider.tokensStaked - beforeServiceProvider.__DEPRECATED_tokensLocked + : beforeServiceProvider.tokensStaked + ); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLocked, + _tokens + (withdrawCalled ? 0 : beforeServiceProvider.__DEPRECATED_tokensLocked) + ); + assertEq(afterServiceProvider.__DEPRECATED_tokensLockedUntil, block.number + deprecatedThawingPeriod); + assertEq(afterServiceProvider.tokensProvisioned, beforeServiceProvider.tokensProvisioned); + assertEq( + afterServiceProvider.__DEPRECATED_tokensAllocated, + beforeServiceProvider.__DEPRECATED_tokensAllocated + ); + uint256 tokensTransferred = (withdrawCalled ? beforeServiceProvider.__DEPRECATED_tokensLocked : 0); + assertEq(afterSenderBalance, beforeSenderBalance + tokensTransferred); + assertEq(afterStakingBalance, beforeStakingBalance - tokensTransferred); + } + } + + function _withdraw() internal { + (, address msgSender, ) = vm.readCallers(); + + // before + ServiceProviderInternal memory beforeServiceProvider = _getStorage_ServiceProviderInternal(msgSender); + uint256 beforeSenderBalance = token.balanceOf(msgSender); + uint256 beforeStakingBalance = token.balanceOf(address(staking)); + + // withdraw + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.StakeWithdrawn(msgSender, beforeServiceProvider.__DEPRECATED_tokensLocked); + staking.withdraw(); + + // after + ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(msgSender); + uint256 afterSenderBalance = token.balanceOf(msgSender); + uint256 afterStakingBalance = token.balanceOf(address(staking)); + + // assert + assertEq(afterSenderBalance - beforeSenderBalance, beforeServiceProvider.__DEPRECATED_tokensLocked); + assertEq(beforeStakingBalance - afterStakingBalance, beforeServiceProvider.__DEPRECATED_tokensLocked); + assertEq( + afterServiceProvider.tokensStaked, + beforeServiceProvider.tokensStaked - beforeServiceProvider.__DEPRECATED_tokensLocked + ); + assertEq(afterServiceProvider.tokensProvisioned, beforeServiceProvider.tokensProvisioned); + assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeServiceProvider.__DEPRECATED_tokensAllocated); + assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, 0); + assertEq(afterServiceProvider.__DEPRECATED_tokensLockedUntil, 0); + } + + function _provision( + address serviceProvider, + address verifier, uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod ) internal { - vm.assume(tokens <= MAX_STAKING_TOKENS); - vm.assume(tokens > 0); - vm.assume(maxVerifierCut <= MAX_MAX_VERIFIER_CUT); - vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); - _createProvision(dataService, tokens, maxVerifierCut, thawingPeriod); + __provision(serviceProvider, verifier, tokens, maxVerifierCut, thawingPeriod, false); } - function _createProvision( - address dataServiceAddress, + function _provisionLocked( + address serviceProvider, + address verifier, uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod ) internal { + __provision(serviceProvider, verifier, tokens, maxVerifierCut, thawingPeriod, true); + } + + function __provision( + address serviceProvider, + address verifier, + uint256 tokens, + uint32 maxVerifierCut, + uint64 thawingPeriod, + bool locked + ) private { + // before + ServiceProviderInternal memory beforeServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + + // provision + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionCreated(serviceProvider, verifier, tokens, maxVerifierCut, thawingPeriod); + if (locked) { + staking.provisionLocked(serviceProvider, verifier, tokens, maxVerifierCut, thawingPeriod); + } else { + staking.provision(serviceProvider, verifier, tokens, maxVerifierCut, thawingPeriod); + } + + // after + Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); + ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + + // assert + assertEq(afterProvision.tokens, tokens); + assertEq(afterProvision.tokensThawing, 0); + assertEq(afterProvision.sharesThawing, 0); + assertEq(afterProvision.maxVerifierCut, maxVerifierCut); + assertEq(afterProvision.thawingPeriod, thawingPeriod); + assertEq(afterProvision.createdAt, uint64(block.timestamp)); + assertEq(afterProvision.maxVerifierCutPending, maxVerifierCut); + assertEq(afterProvision.thawingPeriodPending, thawingPeriod); + assertEq(afterServiceProvider.tokensStaked, beforeServiceProvider.tokensStaked); + assertEq(afterServiceProvider.tokensProvisioned, tokens + beforeServiceProvider.tokensProvisioned); + assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeServiceProvider.__DEPRECATED_tokensAllocated); + assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, beforeServiceProvider.__DEPRECATED_tokensLocked); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLockedUntil, + beforeServiceProvider.__DEPRECATED_tokensLockedUntil + ); + } + + function _addToProvision(address serviceProvider, address verifier, uint256 tokens) internal { + // before + Provision memory beforeProvision = staking.getProvision(serviceProvider, verifier); + ServiceProviderInternal memory beforeServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + + // addToProvision + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionIncreased(serviceProvider, verifier, tokens); + staking.addToProvision(serviceProvider, verifier, tokens); + + // after + Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); + ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + + // assert + assertEq(afterProvision.tokens, beforeProvision.tokens + tokens); + assertEq(afterProvision.tokensThawing, beforeProvision.tokensThawing); + assertEq(afterProvision.sharesThawing, beforeProvision.sharesThawing); + assertEq(afterProvision.maxVerifierCut, beforeProvision.maxVerifierCut); + assertEq(afterProvision.thawingPeriod, beforeProvision.thawingPeriod); + assertEq(afterProvision.createdAt, beforeProvision.createdAt); + assertEq(afterProvision.maxVerifierCutPending, beforeProvision.maxVerifierCutPending); + assertEq(afterProvision.thawingPeriodPending, beforeProvision.thawingPeriodPending); + assertEq(afterServiceProvider.tokensStaked, beforeServiceProvider.tokensStaked); + assertEq(afterServiceProvider.tokensProvisioned, beforeServiceProvider.tokensProvisioned + tokens); + assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeServiceProvider.__DEPRECATED_tokensAllocated); + assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, beforeServiceProvider.__DEPRECATED_tokensLocked); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLockedUntil, + beforeServiceProvider.__DEPRECATED_tokensLockedUntil + ); + } + + function _thaw(address serviceProvider, address verifier, uint256 tokens) internal returns (bytes32) { + // before + Provision memory beforeProvision = staking.getProvision(serviceProvider, verifier); + LinkedList.List memory beforeThawRequestList = staking.getThawRequestList( + serviceProvider, + verifier, + serviceProvider + ); + + bytes32 expectedThawRequestId = keccak256( + abi.encodePacked(users.indexer, verifier, users.indexer, beforeThawRequestList.nonce) + ); + uint256 thawingShares = beforeProvision.sharesThawing == 0 + ? tokens + : (beforeProvision.sharesThawing * tokens) / beforeProvision.tokensThawing; + + // thaw + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ThawRequestCreated( + serviceProvider, + verifier, + serviceProvider, + thawingShares, + uint64(block.timestamp + beforeProvision.thawingPeriod), + expectedThawRequestId + ); + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ProvisionThawed(serviceProvider, verifier, tokens); + bytes32 thawRequestId = staking.thaw(serviceProvider, verifier, tokens); + + // after + Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); + ThawRequest memory afterThawRequest = staking.getThawRequest(thawRequestId); + LinkedList.List memory afterThawRequestList = staking.getThawRequestList( + serviceProvider, + verifier, + serviceProvider + ); + ThawRequest memory afterPreviousTailThawRequest = staking.getThawRequest(beforeThawRequestList.tail); + + // assert + assertEq(afterProvision.tokens, beforeProvision.tokens); + assertEq(afterProvision.tokensThawing, beforeProvision.tokensThawing + tokens); + assertEq(afterProvision.sharesThawing, beforeProvision.sharesThawing + thawingShares); + assertEq(afterProvision.maxVerifierCut, beforeProvision.maxVerifierCut); + assertEq(afterProvision.thawingPeriod, beforeProvision.thawingPeriod); + assertEq(afterProvision.createdAt, beforeProvision.createdAt); + assertEq(afterProvision.maxVerifierCutPending, beforeProvision.maxVerifierCutPending); + assertEq(afterProvision.thawingPeriodPending, beforeProvision.thawingPeriodPending); + assertEq(thawRequestId, expectedThawRequestId); + assertEq(afterThawRequest.shares, thawingShares); + assertEq(afterThawRequest.thawingUntil, block.timestamp + beforeProvision.thawingPeriod); + assertEq(afterThawRequest.next, bytes32(0)); + assertEq( + afterThawRequestList.head, + beforeThawRequestList.count == 0 ? thawRequestId : beforeThawRequestList.head + ); + assertEq(afterThawRequestList.tail, thawRequestId); + assertEq(afterThawRequestList.count, beforeThawRequestList.count + 1); + assertEq(afterThawRequestList.nonce, beforeThawRequestList.nonce + 1); + if (beforeThawRequestList.count != 0) { + assertEq(afterPreviousTailThawRequest.next, thawRequestId); + } + + return thawRequestId; + } + + function _deprovision(address serviceProvider, address verifier, uint256 nThawRequests) internal { + // before + Provision memory beforeProvision = staking.getProvision(serviceProvider, verifier); + ServiceProviderInternal memory beforeServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + LinkedList.List memory beforeThawRequestList = staking.getThawRequestList( + serviceProvider, + verifier, + serviceProvider + ); + + CalcValues_ThawRequestData memory calcValues = calcThawRequestData(serviceProvider, verifier, serviceProvider, nThawRequests, false); + + // deprovision + for (uint i = 0; i < calcValues.thawRequestsFulfilledList.length; i++) { + ThawRequest memory thawRequest = calcValues.thawRequestsFulfilledList[i]; + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ThawRequestFulfilled( + calcValues.thawRequestsFulfilledListIds[i], + calcValues.thawRequestsFulfilledListTokens[i], + thawRequest.shares, + thawRequest.thawingUntil + ); + } + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ThawRequestsFulfilled( + serviceProvider, + verifier, + serviceProvider, + calcValues.thawRequestsFulfilledList.length, + calcValues.tokensThawed + ); + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.TokensDeprovisioned(serviceProvider, verifier, calcValues.tokensThawed); + staking.deprovision(serviceProvider, verifier, nThawRequests); + + // after + Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); + ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + LinkedList.List memory afterThawRequestList = staking.getThawRequestList( + serviceProvider, + verifier, + serviceProvider + ); + + // assert + assertEq(afterProvision.tokens, beforeProvision.tokens - calcValues.tokensThawed); + assertEq(afterProvision.tokensThawing, calcValues.tokensThawing); + assertEq(afterProvision.sharesThawing, calcValues.sharesThawing); + assertEq(afterProvision.maxVerifierCut, beforeProvision.maxVerifierCut); + assertEq(afterProvision.thawingPeriod, beforeProvision.thawingPeriod); + assertEq(afterProvision.createdAt, beforeProvision.createdAt); + assertEq(afterProvision.maxVerifierCutPending, beforeProvision.maxVerifierCutPending); + assertEq(afterProvision.thawingPeriodPending, beforeProvision.thawingPeriodPending); + assertEq(afterServiceProvider.tokensStaked, beforeServiceProvider.tokensStaked); + assertEq(afterServiceProvider.tokensProvisioned, beforeServiceProvider.tokensProvisioned - calcValues.tokensThawed); + assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeServiceProvider.__DEPRECATED_tokensAllocated); + assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, beforeServiceProvider.__DEPRECATED_tokensLocked); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLockedUntil, + beforeServiceProvider.__DEPRECATED_tokensLockedUntil + ); + for (uint i = 0; i < calcValues.thawRequestsFulfilledListIds.length; i++) { + ThawRequest memory thawRequest = staking.getThawRequest(calcValues.thawRequestsFulfilledListIds[i]); + assertEq(thawRequest.shares, 0); + assertEq(thawRequest.thawingUntil, 0); + assertEq(thawRequest.next, bytes32(0)); + } + if (calcValues.thawRequestsFulfilledList.length == 0) { + assertEq(afterThawRequestList.head, beforeThawRequestList.head); + } else { + assertEq( + afterThawRequestList.head, + calcValues.thawRequestsFulfilledList.length == beforeThawRequestList.count + ? bytes32(0) + : calcValues.thawRequestsFulfilledList[calcValues.thawRequestsFulfilledList.length - 1].next + ); + } + assertEq( + afterThawRequestList.tail, + calcValues.thawRequestsFulfilledList.length == beforeThawRequestList.count + ? bytes32(0) + : beforeThawRequestList.tail + ); + assertEq(afterThawRequestList.count, beforeThawRequestList.count - calcValues.thawRequestsFulfilledList.length); + assertEq(afterThawRequestList.nonce, beforeThawRequestList.nonce); + } + + struct BeforeValues_Reprovision { + Provision provision; + Provision provisionNewVerifier; + ServiceProviderInternal serviceProvider; + LinkedList.List thawRequestList; + } + function _reprovision( + address serviceProvider, + address verifier, + address newVerifier, + uint256 tokens, + uint256 nThawRequests + ) internal { + // before + BeforeValues_Reprovision memory beforeValues = BeforeValues_Reprovision({ + provision: staking.getProvision(serviceProvider, verifier), + provisionNewVerifier: staking.getProvision(serviceProvider, newVerifier), + serviceProvider: _getStorage_ServiceProviderInternal(serviceProvider), + thawRequestList: staking.getThawRequestList(serviceProvider, verifier, serviceProvider) + }); + + // calc + CalcValues_ThawRequestData memory calcValues = calcThawRequestData(serviceProvider, verifier, serviceProvider, nThawRequests, false); + + // reprovision + for (uint i = 0; i < calcValues.thawRequestsFulfilledList.length; i++) { + ThawRequest memory thawRequest = calcValues.thawRequestsFulfilledList[i]; + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ThawRequestFulfilled( + calcValues.thawRequestsFulfilledListIds[i], + calcValues.thawRequestsFulfilledListTokens[i], + thawRequest.shares, + thawRequest.thawingUntil + ); + } + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ThawRequestsFulfilled( + serviceProvider, + verifier, + serviceProvider, + calcValues.thawRequestsFulfilledList.length, + calcValues.tokensThawed + ); + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.TokensDeprovisioned(serviceProvider, verifier, calcValues.tokensThawed); + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionIncreased(serviceProvider, newVerifier, tokens); + staking.reprovision(serviceProvider, verifier, newVerifier, tokens, nThawRequests); + + // after + Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); + Provision memory afterProvisionNewVerifier = staking.getProvision(serviceProvider, newVerifier); + ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + LinkedList.List memory afterThawRequestList = staking.getThawRequestList( + serviceProvider, + verifier, + serviceProvider + ); + + // assert: provision old verifier + assertEq(afterProvision.tokens, beforeValues.provision.tokens - calcValues.tokensThawed); + assertEq(afterProvision.tokensThawing, calcValues.tokensThawing); + assertEq(afterProvision.sharesThawing, calcValues.sharesThawing); + assertEq(afterProvision.maxVerifierCut, beforeValues.provision.maxVerifierCut); + assertEq(afterProvision.thawingPeriod, beforeValues.provision.thawingPeriod); + assertEq(afterProvision.createdAt, beforeValues.provision.createdAt); + assertEq(afterProvision.maxVerifierCutPending, beforeValues.provision.maxVerifierCutPending); + assertEq(afterProvision.thawingPeriodPending, beforeValues.provision.thawingPeriodPending); + + // assert: provision new verifier + assertEq(afterProvisionNewVerifier.tokens, beforeValues.provisionNewVerifier.tokens + tokens); + assertEq(afterProvisionNewVerifier.tokensThawing, beforeValues.provisionNewVerifier.tokensThawing); + assertEq(afterProvisionNewVerifier.sharesThawing, beforeValues.provisionNewVerifier.sharesThawing); + assertEq(afterProvisionNewVerifier.maxVerifierCut, beforeValues.provisionNewVerifier.maxVerifierCut); + assertEq(afterProvisionNewVerifier.thawingPeriod, beforeValues.provisionNewVerifier.thawingPeriod); + assertEq(afterProvisionNewVerifier.createdAt, beforeValues.provisionNewVerifier.createdAt); + assertEq(afterProvisionNewVerifier.maxVerifierCutPending, beforeValues.provisionNewVerifier.maxVerifierCutPending); + assertEq(afterProvisionNewVerifier.thawingPeriodPending, beforeValues.provisionNewVerifier.thawingPeriodPending); + + // assert: service provider + assertEq(afterServiceProvider.tokensStaked, beforeValues.serviceProvider.tokensStaked); + assertEq( + afterServiceProvider.tokensProvisioned, + beforeValues.serviceProvider.tokensProvisioned + tokens - calcValues.tokensThawed + ); + assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeValues.serviceProvider.__DEPRECATED_tokensAllocated); + assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, beforeValues.serviceProvider.__DEPRECATED_tokensLocked); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLockedUntil, + beforeValues.serviceProvider.__DEPRECATED_tokensLockedUntil + ); + + // assert: thaw request list old verifier + for (uint i = 0; i < calcValues.thawRequestsFulfilledListIds.length; i++) { + ThawRequest memory thawRequest = staking.getThawRequest(calcValues.thawRequestsFulfilledListIds[i]); + assertEq(thawRequest.shares, 0); + assertEq(thawRequest.thawingUntil, 0); + assertEq(thawRequest.next, bytes32(0)); + } + if (calcValues.thawRequestsFulfilledList.length == 0) { + assertEq(afterThawRequestList.head, beforeValues.thawRequestList.head); + } else { + assertEq( + afterThawRequestList.head, + calcValues.thawRequestsFulfilledList.length == beforeValues.thawRequestList.count + ? bytes32(0) + : calcValues.thawRequestsFulfilledList[calcValues.thawRequestsFulfilledList.length - 1].next + ); + } + assertEq( + afterThawRequestList.tail, + calcValues.thawRequestsFulfilledList.length == beforeValues.thawRequestList.count + ? bytes32(0) + : beforeValues.thawRequestList.tail + ); + assertEq(afterThawRequestList.count, beforeValues.thawRequestList.count - calcValues.thawRequestsFulfilledList.length); + assertEq(afterThawRequestList.nonce, beforeValues.thawRequestList.nonce); + } + + function _setProvisionParameters( + address serviceProvider, + address verifier, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) internal { + // before + Provision memory beforeProvision = staking.getProvision(serviceProvider, verifier); + + // setProvisionParameters + if (beforeProvision.maxVerifierCut != maxVerifierCut || beforeProvision.thawingPeriod != thawingPeriod) { + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionParametersStaged( + serviceProvider, + verifier, + maxVerifierCut, + thawingPeriod + ); + } + staking.setProvisionParameters(serviceProvider, verifier, maxVerifierCut, thawingPeriod); + + // after + Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); + + // assert + assertEq(afterProvision.tokens, beforeProvision.tokens); + assertEq(afterProvision.tokensThawing, beforeProvision.tokensThawing); + assertEq(afterProvision.sharesThawing, beforeProvision.sharesThawing); + assertEq(afterProvision.maxVerifierCut, beforeProvision.maxVerifierCut); + assertEq(afterProvision.thawingPeriod, beforeProvision.thawingPeriod); + assertEq(afterProvision.createdAt, beforeProvision.createdAt); + assertEq(afterProvision.maxVerifierCutPending, maxVerifierCut); + assertEq(afterProvision.thawingPeriodPending, thawingPeriod); + } + + function _acceptProvisionParameters(address serviceProvider) internal { + (, address msgSender, ) = vm.readCallers(); + + // before + Provision memory beforeProvision = staking.getProvision(serviceProvider, msgSender); + + // acceptProvisionParameters + if ( + beforeProvision.maxVerifierCutPending != beforeProvision.maxVerifierCut || + beforeProvision.thawingPeriodPending != beforeProvision.thawingPeriod + ) { + vm.expectEmit(); + emit IHorizonStakingMain.ProvisionParametersSet( + serviceProvider, + msgSender, + beforeProvision.maxVerifierCutPending, + beforeProvision.thawingPeriodPending + ); + } + staking.acceptProvisionParameters(serviceProvider); + + // after + Provision memory afterProvision = staking.getProvision(serviceProvider, msgSender); + + // assert + assertEq(afterProvision.tokens, beforeProvision.tokens); + assertEq(afterProvision.tokensThawing, beforeProvision.tokensThawing); + assertEq(afterProvision.sharesThawing, beforeProvision.sharesThawing); + assertEq(afterProvision.maxVerifierCut, beforeProvision.maxVerifierCutPending); + assertEq(afterProvision.maxVerifierCut, afterProvision.maxVerifierCutPending); + assertEq(afterProvision.thawingPeriod, beforeProvision.thawingPeriodPending); + assertEq(afterProvision.thawingPeriod, afterProvision.thawingPeriodPending); + assertEq(afterProvision.createdAt, beforeProvision.createdAt); + } + + function _setOperator(address operator, address verifier, bool allow) internal { + __setOperator(operator, verifier, allow, false); + } + + function _setOperatorLocked(address operator, address verifier, bool allow) internal { + __setOperator(operator, verifier, allow, true); + } + + function __setOperator(address operator, address verifier, bool allow, bool locked) private { + (, address msgSender, ) = vm.readCallers(); + + // staking contract knows the address of the legacy subgraph service + // but we cannot read it as it's an immutable, we have to use the global var :/ + bool legacy = verifier == subgraphDataServiceLegacyAddress; + + // before + bool beforeOperatorAllowed = _getStorage_OperatorAuth(msgSender, operator, verifier, legacy); + bool beforeOperatorAllowedGetter = staking.isAuthorized(operator, msgSender, verifier); + assertEq(beforeOperatorAllowed, beforeOperatorAllowedGetter); + + // setOperator + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.OperatorSet(msgSender, operator, verifier, allow); + if (locked) { + staking.setOperatorLocked(operator, verifier, allow); + } else { + staking.setOperator(operator, verifier, allow); + } + + // after + bool afterOperatorAllowed = _getStorage_OperatorAuth(msgSender, operator, verifier, legacy); + bool afterOperatorAllowedGetter = staking.isAuthorized(operator, msgSender, verifier); + assertEq(afterOperatorAllowed, afterOperatorAllowedGetter); + + // assert + assertEq(afterOperatorAllowed, allow); + } + + function _delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) internal { + __delegate(serviceProvider, verifier, tokens, minSharesOut, false); + } + + function _delegate(address serviceProvider, uint256 tokens) internal { + __delegate(serviceProvider, subgraphDataServiceLegacyAddress, tokens, 0, true); + } + + function __delegate( + address serviceProvider, + address verifier, + uint256 tokens, + uint256 minSharesOut, + bool legacy + ) private { + (, address delegator, ) = vm.readCallers(); + + // before + DelegationPoolInternalTest memory beforePool = _getStorage_DelegationPoolInternal( + serviceProvider, + verifier, + legacy + ); + DelegationInternal memory beforeDelegation = _getStorage_Delegation( + serviceProvider, + verifier, + delegator, + legacy + ); + uint256 beforeDelegatorBalance = token.balanceOf(delegator); + uint256 beforeStakingBalance = token.balanceOf(address(staking)); + + uint256 calcShares = (beforePool.tokens == 0 || beforePool.tokens == beforePool.tokensThawing) + ? tokens + : ((tokens * beforePool.shares) / (beforePool.tokens - beforePool.tokensThawing)); + + // delegate token.approve(address(staking), tokens); - staking.stakeTo(users.indexer, tokens); - staking.provision(users.indexer, dataServiceAddress, tokens, maxVerifierCut, thawingPeriod); + vm.expectEmit(); + emit IHorizonStakingMain.TokensDelegated(serviceProvider, verifier, delegator, tokens); + if (legacy) { + staking.delegate(serviceProvider, tokens); + } else { + staking.delegate(serviceProvider, verifier, tokens, minSharesOut); + } + + // after + DelegationPoolInternalTest memory afterPool = _getStorage_DelegationPoolInternal( + serviceProvider, + verifier, + legacy + ); + DelegationInternal memory afterDelegation = _getStorage_Delegation( + serviceProvider, + verifier, + delegator, + legacy + ); + uint256 afterDelegatorBalance = token.balanceOf(delegator); + uint256 afterStakingBalance = token.balanceOf(address(staking)); + + uint256 deltaShares = afterDelegation.shares - beforeDelegation.shares; + + // assertions + assertEq(beforePool.tokens + tokens, afterPool.tokens); + assertEq(beforePool.shares + calcShares, afterPool.shares); + assertEq(beforePool.tokensThawing, afterPool.tokensThawing); + assertEq(beforePool.sharesThawing, afterPool.sharesThawing); + assertEq(beforeDelegation.shares + calcShares, afterDelegation.shares); + assertEq(beforeDelegation.__DEPRECATED_tokensLocked, afterDelegation.__DEPRECATED_tokensLocked); + assertEq(beforeDelegation.__DEPRECATED_tokensLockedUntil, afterDelegation.__DEPRECATED_tokensLockedUntil); + assertGe(deltaShares, minSharesOut); + assertEq(calcShares, deltaShares); + assertEq(beforeDelegatorBalance - tokens, afterDelegatorBalance); + assertEq(beforeStakingBalance + tokens, afterStakingBalance); + } + + function _undelegate(address serviceProvider, address verifier, uint256 shares) internal { + __undelegate(serviceProvider, verifier, shares, false); + } + + function _undelegate(address serviceProvider, uint256 shares) internal { + __undelegate(serviceProvider, subgraphDataServiceLegacyAddress, shares, true); + } + + struct BeforeValues_Undelegate { + DelegationPoolInternalTest pool; + DelegationInternal delegation; + LinkedList.List thawRequestList; + uint256 delegatedTokens; + } + struct CalcValues_Undelegate { + uint256 tokens; + uint256 thawingShares; + uint64 thawingUntil; + bytes32 thawRequestId; + } + + function __undelegate(address serviceProvider, address verifier, uint256 shares, bool legacy) private { + (, address delegator, ) = vm.readCallers(); + + // before + BeforeValues_Undelegate memory beforeValues; + beforeValues.pool = _getStorage_DelegationPoolInternal(serviceProvider, verifier, legacy); + beforeValues.delegation = _getStorage_Delegation(serviceProvider, verifier, delegator, legacy); + beforeValues.thawRequestList = staking.getThawRequestList(serviceProvider, verifier, delegator); + beforeValues.delegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); + + // calc + CalcValues_Undelegate memory calcValues; + calcValues.tokens = ((beforeValues.pool.tokens - beforeValues.pool.tokensThawing) * shares) / beforeValues.pool.shares; + calcValues.thawingShares = beforeValues.pool.tokensThawing == 0 + ? calcValues.tokens + : (beforeValues.pool.sharesThawing * calcValues.tokens) / beforeValues.pool.tokensThawing; + calcValues.thawingUntil = + staking.getProvision(serviceProvider, verifier).thawingPeriod + + uint64(block.timestamp); + calcValues.thawRequestId = keccak256( + abi.encodePacked(serviceProvider, verifier, delegator, beforeValues.thawRequestList.nonce) + ); + + // undelegate + vm.expectEmit(); + emit IHorizonStakingMain.ThawRequestCreated( + serviceProvider, + verifier, + delegator, + calcValues.thawingShares, + calcValues.thawingUntil, + calcValues.thawRequestId + ); + vm.expectEmit(); + emit IHorizonStakingMain.TokensUndelegated(serviceProvider, verifier, delegator, calcValues.tokens); + if (legacy) { + staking.undelegate(serviceProvider, shares); + } else { + staking.undelegate(serviceProvider, verifier, shares); + } + + // after + DelegationPoolInternalTest memory afterPool = _getStorage_DelegationPoolInternal( + users.indexer, + verifier, + legacy + ); + DelegationInternal memory afterDelegation = _getStorage_Delegation( + serviceProvider, + verifier, + delegator, + legacy + ); + LinkedList.List memory afterThawRequestList = staking.getThawRequestList(serviceProvider, verifier, delegator); + ThawRequest memory afterThawRequest = staking.getThawRequest(calcValues.thawRequestId); + uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); + + // assertions + assertEq(beforeValues.pool.shares, afterPool.shares + shares); + assertEq(beforeValues.pool.tokens, afterPool.tokens); + assertEq(beforeValues.pool.tokensThawing + calcValues.tokens, afterPool.tokensThawing); + assertEq(beforeValues.pool.sharesThawing + calcValues.thawingShares, afterPool.sharesThawing); + assertEq(beforeValues.delegation.shares - shares, afterDelegation.shares); + assertEq(afterThawRequest.shares, calcValues.thawingShares); + assertEq(afterThawRequest.thawingUntil, calcValues.thawingUntil); + assertEq(afterThawRequest.next, bytes32(0)); + assertEq(calcValues.thawRequestId, afterThawRequestList.tail); + assertEq(beforeValues.thawRequestList.nonce + 1, afterThawRequestList.nonce); + assertEq(beforeValues.thawRequestList.count + 1, afterThawRequestList.count); + assertEq(afterDelegatedTokens + calcValues.tokens, beforeValues.delegatedTokens); + } + + function _withdrawDelegated( + address serviceProvider, + address verifier, + address newServiceProvider, + uint256 minSharesForNewProvider, + uint256 nThawRequests + ) internal { + __withdrawDelegated( + serviceProvider, + verifier, + newServiceProvider, + minSharesForNewProvider, + nThawRequests, + false + ); + } + + function _withdrawDelegated(address serviceProvider, address newServiceProvider) internal { + __withdrawDelegated(serviceProvider, subgraphDataServiceLegacyAddress, newServiceProvider, 0, 0, true); + } + + struct BeforeValues_WithdrawDelegated { + DelegationPoolInternalTest pool; + DelegationPoolInternalTest newPool; + DelegationInternal newDelegation; + LinkedList.List thawRequestList; + uint256 senderBalance; + uint256 stakingBalance; + } + struct AfterValues_WithdrawDelegated { + DelegationPoolInternalTest pool; + DelegationPoolInternalTest newPool; + DelegationInternal newDelegation; + LinkedList.List thawRequestList; + uint256 senderBalance; + uint256 stakingBalance; + } + function __withdrawDelegated( + address _serviceProvider, + address _verifier, + address _newServiceProvider, + uint256 _minSharesForNewProvider, + uint256 _nThawRequests, + bool legacy + ) private { + (, address msgSender, ) = vm.readCallers(); + + bool reDelegate = _newServiceProvider != address(0); + + // before + BeforeValues_WithdrawDelegated memory beforeValues; + beforeValues.pool = _getStorage_DelegationPoolInternal(_serviceProvider, _verifier, legacy); + beforeValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _verifier, legacy); + beforeValues.newDelegation = _getStorage_Delegation(_serviceProvider, _verifier, msgSender, legacy); + beforeValues.thawRequestList = staking.getThawRequestList(_serviceProvider, _verifier, msgSender); + beforeValues.senderBalance = token.balanceOf(msgSender); + beforeValues.stakingBalance = token.balanceOf(address(staking)); + + CalcValues_ThawRequestData memory calcValues = calcThawRequestData( + _serviceProvider, + _verifier, + msgSender, + _nThawRequests, + true + ); + + // withdrawDelegated + for (uint i = 0; i < calcValues.thawRequestsFulfilledList.length; i++) { + ThawRequest memory thawRequest = calcValues.thawRequestsFulfilledList[i]; + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ThawRequestFulfilled( + calcValues.thawRequestsFulfilledListIds[i], + calcValues.thawRequestsFulfilledListTokens[i], + thawRequest.shares, + thawRequest.thawingUntil + ); + } + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ThawRequestsFulfilled( + _serviceProvider, + _verifier, + msgSender, + calcValues.thawRequestsFulfilledList.length, + calcValues.tokensThawed + ); + if (calcValues.tokensThawed != 0) { + vm.expectEmit(); + if (reDelegate) { + emit IHorizonStakingMain.TokensDelegated(_newServiceProvider, _verifier, msgSender, calcValues.tokensThawed); + } else { + emit Transfer(address(staking), msgSender, calcValues.tokensThawed); + } + } + vm.expectEmit(); + emit IHorizonStakingMain.DelegatedTokensWithdrawn(_serviceProvider, _verifier, msgSender, calcValues.tokensThawed); + staking.withdrawDelegated( + _serviceProvider, + _verifier, + _newServiceProvider, + _minSharesForNewProvider, + _nThawRequests + ); + + // after + AfterValues_WithdrawDelegated memory afterValues; + afterValues.pool = _getStorage_DelegationPoolInternal(_serviceProvider, _verifier, legacy); + afterValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _verifier, legacy); + afterValues.newDelegation = _getStorage_Delegation(_newServiceProvider, _verifier, msgSender, legacy); + afterValues.thawRequestList = staking.getThawRequestList(_serviceProvider, _verifier, msgSender); + afterValues.senderBalance = token.balanceOf(msgSender); + afterValues.stakingBalance = token.balanceOf(address(staking)); + + // assert + assertEq(afterValues.pool.tokens, beforeValues.pool.tokens - calcValues.tokensThawed); + assertEq(afterValues.pool.shares, beforeValues.pool.shares); + assertEq(afterValues.pool.tokensThawing, calcValues.tokensThawing); + assertEq(afterValues.pool.sharesThawing, calcValues.sharesThawing); + + for (uint i = 0; i < calcValues.thawRequestsFulfilledListIds.length; i++) { + ThawRequest memory thawRequest = staking.getThawRequest(calcValues.thawRequestsFulfilledListIds[i]); + assertEq(thawRequest.shares, 0); + assertEq(thawRequest.thawingUntil, 0); + assertEq(thawRequest.next, bytes32(0)); + } + if (calcValues.thawRequestsFulfilledList.length == 0) { + assertEq(afterValues.thawRequestList.head, beforeValues.thawRequestList.head); + } else { + assertEq( + afterValues.thawRequestList.head, + calcValues.thawRequestsFulfilledList.length == beforeValues.thawRequestList.count + ? bytes32(0) + : calcValues.thawRequestsFulfilledList[calcValues.thawRequestsFulfilledList.length - 1].next + ); + } + assertEq( + afterValues.thawRequestList.tail, + calcValues.thawRequestsFulfilledList.length == beforeValues.thawRequestList.count + ? bytes32(0) + : beforeValues.thawRequestList.tail + ); + assertEq(afterValues.thawRequestList.count, beforeValues.thawRequestList.count - calcValues.thawRequestsFulfilledList.length); + assertEq(afterValues.thawRequestList.nonce, beforeValues.thawRequestList.nonce); + + if (reDelegate) { + uint256 calcShares = (afterValues.newPool.tokens == 0 || + afterValues.newPool.tokens == afterValues.newPool.tokensThawing) + ? calcValues.tokensThawed + : ((calcValues.tokensThawed * afterValues.newPool.shares) / + (afterValues.newPool.tokens - afterValues.newPool.tokensThawing)); + uint256 deltaShares = afterValues.newDelegation.shares - beforeValues.newDelegation.shares; + + assertEq(afterValues.newPool.tokens, beforeValues.newPool.tokens + calcValues.tokensThawed); + assertEq(afterValues.newPool.shares, beforeValues.newPool.shares + calcShares); + assertEq(afterValues.newPool.tokensThawing, beforeValues.newPool.tokensThawing); + assertEq(afterValues.newPool.sharesThawing, beforeValues.newPool.sharesThawing); + assertEq(afterValues.newDelegation.shares, beforeValues.newDelegation.shares + calcShares); + assertEq(afterValues.newDelegation.__DEPRECATED_tokensLocked, beforeValues.newDelegation.__DEPRECATED_tokensLocked); + assertEq( + afterValues.newDelegation.__DEPRECATED_tokensLockedUntil, + beforeValues.newDelegation.__DEPRECATED_tokensLockedUntil + ); + assertGe(deltaShares, _minSharesForNewProvider); + assertEq(calcShares, deltaShares); + assertEq(afterValues.senderBalance - beforeValues.senderBalance, 0); + assertEq(beforeValues.stakingBalance - afterValues.stakingBalance, 0); + } else { + assertEq(beforeValues.stakingBalance - afterValues.stakingBalance, calcValues.tokensThawed); + assertEq(afterValues.senderBalance - beforeValues.senderBalance, calcValues.tokensThawed); + } + } + + function _addToDelegationPool(address serviceProvider, address verifier, uint256 tokens) internal { + (, address msgSender, ) = vm.readCallers(); + + // staking contract knows the address of the legacy subgraph service + // but we cannot read it as it's an immutable, we have to use the global var :/ + bool legacy = verifier == subgraphDataServiceLegacyAddress; + + // before + DelegationPoolInternalTest memory beforePool = _getStorage_DelegationPoolInternal( + serviceProvider, + verifier, + legacy + ); + uint256 beforeSenderBalance = token.balanceOf(msgSender); + uint256 beforeStakingBalance = token.balanceOf(address(staking)); + + // addToDelegationPool + vm.expectEmit(); + emit Transfer(msgSender, address(staking), tokens); + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.TokensToDelegationPoolAdded(serviceProvider, verifier, tokens); + staking.addToDelegationPool(serviceProvider, verifier, tokens); + + // after + DelegationPoolInternalTest memory afterPool = _getStorage_DelegationPoolInternal( + serviceProvider, + verifier, + legacy + ); + uint256 afterSenderBalance = token.balanceOf(msgSender); + uint256 afterStakingBalance = token.balanceOf(address(staking)); + + // assert + assertEq(beforeSenderBalance - tokens, afterSenderBalance); + assertEq(beforeStakingBalance + tokens, afterStakingBalance); + assertEq(beforePool.tokens + tokens, afterPool.tokens); + assertEq(beforePool.shares, afterPool.shares); + assertEq(beforePool.tokensThawing, afterPool.tokensThawing); + assertEq(beforePool.sharesThawing, afterPool.sharesThawing); } - function _setDelegationFeeCut(IGraphPayments.PaymentTypes paymentType, uint256 cut) internal { - staking.setDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType, cut); - uint256 delegationFeeCut = staking.getDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType); - assertEq(delegationFeeCut, cut); + function _setDelegationFeeCut( + address serviceProvider, + address verifier, + IGraphPayments.PaymentTypes paymentType, + uint256 feeCut + ) internal { + // setDelegationFeeCut + vm.expectEmit(); + emit IHorizonStakingMain.DelegationFeeCutSet(serviceProvider, verifier, paymentType, feeCut); + staking.setDelegationFeeCut(serviceProvider, verifier, paymentType, feeCut); + + // after + uint256 afterDelegationFeeCut = staking.getDelegationFeeCut(serviceProvider, verifier, paymentType); + + // assert + assertEq(afterDelegationFeeCut, feeCut); + } + + function _setAllowedLockedVerifier(address verifier, bool allowed) internal { + // setAllowedLockedVerifier + vm.expectEmit(); + emit IHorizonStakingMain.AllowedLockedVerifierSet(verifier, allowed); + staking.setAllowedLockedVerifier(verifier, allowed); + + // after + bool afterAllowed = staking.isAllowedLockedVerifier(verifier); + + // assert + assertEq(afterAllowed, allowed); + } + + function _setDelegationSlashingEnabled() internal { + // setDelegationSlashingEnabled + vm.expectEmit(); + emit IHorizonStakingMain.DelegationSlashingEnabled(true); + staking.setDelegationSlashingEnabled(); + + // after + bool afterEnabled = staking.isDelegationSlashingEnabled(); + + // assert + assertEq(afterEnabled, true); + } + + function _clearThawingPeriod() internal { + // clearThawingPeriod + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ThawingPeriodCleared(); + staking.clearThawingPeriod(); + + // after + uint64 afterThawingPeriod = staking.__DEPRECATED_getThawingPeriod(); + + // assert + assertEq(afterThawingPeriod, 0); + } + + function _setMaxThawingPeriod(uint64 maxThawingPeriod) internal { + // setMaxThawingPeriod + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.MaxThawingPeriodSet(maxThawingPeriod); + staking.setMaxThawingPeriod(maxThawingPeriod); + + // after + uint64 afterMaxThawingPeriod = staking.getMaxThawingPeriod(); + + // assert + assertEq(afterMaxThawingPeriod, maxThawingPeriod); + } + + function _setCounterpartStakingAddress(address counterpartStakingAddress) internal { + // setCounterpartStakingAddress + vm.expectEmit(address(staking)); + emit IHorizonStakingExtension.CounterpartStakingAddressSet(counterpartStakingAddress); + staking.setCounterpartStakingAddress(counterpartStakingAddress); + + // after + address afterCounterpartStakingAddress = _getStorage_CounterpartStakingAddress(); + + // assert + assertEq(afterCounterpartStakingAddress, counterpartStakingAddress); + } + + struct BeforeValues_ReceiveDelegation { + DelegationPoolInternalTest pool; + DelegationInternal delegation; + uint256 delegatedTokens; + uint256 stakingBalance; + uint256 delegatorBalance; + } + function _onTokenTransfer_ReceiveDelegation(address from, uint256 tokens, bytes memory data) internal { + address serviceProvider; + address delegator; + { + (, bytes memory fnData) = abi.decode(data, (uint8, bytes)); + (serviceProvider, delegator) = abi.decode(fnData, (address, address)); + } + + // before + BeforeValues_ReceiveDelegation memory beforeValues; + beforeValues.pool = _getStorage_DelegationPoolInternal(serviceProvider, subgraphDataServiceLegacyAddress, true); + beforeValues.delegation = _getStorage_Delegation( + serviceProvider, + subgraphDataServiceLegacyAddress, + delegator, + true + ); + beforeValues.stakingBalance = token.balanceOf(address(staking)); + beforeValues.delegatorBalance = token.balanceOf(delegator); + beforeValues.delegatedTokens = staking.getDelegatedTokensAvailable( + serviceProvider, + subgraphDataServiceLegacyAddress + ); + + // calc + uint256 calcShares = (beforeValues.pool.tokens == 0 || beforeValues.pool.tokens == beforeValues.pool.tokensThawing) + ? tokens + : ((tokens * beforeValues.pool.shares) / (beforeValues.pool.tokens - beforeValues.pool.tokensThawing)); + + bool earlyExit = (calcShares == 0 || tokens < 1 ether) || + (beforeValues.pool.tokens == 0 && (beforeValues.pool.shares != 0 || beforeValues.pool.sharesThawing != 0)); + + // onTokenTransfer + if (earlyExit) { + vm.expectEmit(); + emit Transfer(address(staking), delegator, tokens); + vm.expectEmit(); + emit IL2StakingBase.TransferredDelegationReturnedToDelegator(serviceProvider, delegator, tokens); + } else { + vm.expectEmit(); + emit IHorizonStakingExtension.StakeDelegated(serviceProvider, delegator, tokens, calcShares); + } + staking.onTokenTransfer(from, tokens, data); + + // after + DelegationPoolInternalTest memory afterPool = _getStorage_DelegationPoolInternal(serviceProvider, subgraphDataServiceLegacyAddress, true); + DelegationInternal memory afterDelegation = _getStorage_Delegation( + serviceProvider, + subgraphDataServiceLegacyAddress, + delegator, + true + ); + uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable( + serviceProvider, + subgraphDataServiceLegacyAddress + ); + uint256 afterDelegatorBalance = token.balanceOf(delegator); + uint256 afterStakingBalance = token.balanceOf(address(staking)); + + // assertions + if (earlyExit) { + assertEq(beforeValues.pool.tokens, afterPool.tokens); + assertEq(beforeValues.pool.shares, afterPool.shares); + assertEq(beforeValues.pool.tokensThawing, afterPool.tokensThawing); + assertEq(beforeValues.pool.sharesThawing, afterPool.sharesThawing); + assertEq(0, afterDelegation.shares - beforeValues.delegation.shares); + assertEq(beforeValues.delegatedTokens, afterDelegatedTokens); + assertEq(beforeValues.delegatorBalance + tokens, afterDelegatorBalance); + assertEq(beforeValues.stakingBalance - tokens, afterStakingBalance); + } else { + assertEq(beforeValues.pool.tokens + tokens, afterPool.tokens); + assertEq(beforeValues.pool.shares + calcShares, afterPool.shares); + assertEq(beforeValues.pool.tokensThawing, afterPool.tokensThawing); + assertEq(beforeValues.pool.sharesThawing, afterPool.sharesThawing); + assertEq(calcShares, afterDelegation.shares - beforeValues.delegation.shares); + assertEq(beforeValues.delegatedTokens + tokens, afterDelegatedTokens); + assertEq(beforeValues.delegatorBalance, afterDelegatorBalance); + assertEq(beforeValues.stakingBalance, afterStakingBalance); + } + } + + struct BeforeValues_Slash { + Provision provision; + DelegationPoolInternalTest pool; + ServiceProviderInternal serviceProvider; + uint256 stakingBalance; + uint256 verifierBalance; + } + struct CalcValues_Slash { + uint256 tokensToSlash; + uint256 providerTokensSlashed; + uint256 delegationTokensSlashed; + } + + function _slash(address serviceProvider, address verifier, uint256 tokens, uint256 verifierCutAmount) internal { + bool isDelegationSlashingEnabled = staking.isDelegationSlashingEnabled(); + + // staking contract knows the address of the legacy subgraph service + // but we cannot read it as it's an immutable, we have to use the global var :/ + bool legacy = verifier == subgraphDataServiceLegacyAddress; + + // before + BeforeValues_Slash memory before; + before.provision = staking.getProvision(serviceProvider, verifier); + before.pool = _getStorage_DelegationPoolInternal(serviceProvider, verifier, legacy); + before.serviceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + before.stakingBalance = token.balanceOf(address(staking)); + before.verifierBalance = token.balanceOf(verifier); + + // Calculate expected tokens after slashing + CalcValues_Slash memory calcValues; + calcValues.tokensToSlash = MathUtils.min(tokens, before.provision.tokens + before.pool.tokens); + calcValues.providerTokensSlashed = MathUtils.min(before.provision.tokens, calcValues.tokensToSlash); + calcValues.delegationTokensSlashed = calcValues.tokensToSlash - calcValues.providerTokensSlashed; + + if (calcValues.tokensToSlash > 0) { + if (verifierCutAmount > 0) { + vm.expectEmit(address(token)); + emit Transfer(address(staking), verifier, verifierCutAmount); + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.VerifierTokensSent(serviceProvider, verifier, verifier, verifierCutAmount); + } + if (calcValues.providerTokensSlashed - verifierCutAmount > 0) { + vm.expectEmit(address(token)); + emit Transfer(address(staking), address(0), calcValues.providerTokensSlashed - verifierCutAmount); + } + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.ProvisionSlashed(serviceProvider, verifier, calcValues.providerTokensSlashed); + } + + if (calcValues.delegationTokensSlashed > 0) { + if (isDelegationSlashingEnabled) { + vm.expectEmit(address(token)); + emit Transfer(address(staking), address(0), calcValues.delegationTokensSlashed); + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.DelegationSlashed( + serviceProvider, + verifier, + calcValues.delegationTokensSlashed + ); + } else { + vm.expectEmit(address(staking)); + emit IHorizonStakingMain.DelegationSlashingSkipped( + serviceProvider, + verifier, + calcValues.delegationTokensSlashed + ); + } + } + staking.slash(serviceProvider, tokens, verifierCutAmount, verifier); + + // after + Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); + DelegationPoolInternalTest memory afterPool = _getStorage_DelegationPoolInternal( + serviceProvider, + verifier, + legacy + ); + ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); + uint256 afterStakingBalance = token.balanceOf(address(staking)); + uint256 afterVerifierBalance = token.balanceOf(verifier); + + { + uint256 tokensSlashed = calcValues.providerTokensSlashed + + (isDelegationSlashingEnabled ? calcValues.delegationTokensSlashed : 0); + uint256 provisionThawingTokens = (before.provision.tokensThawing * + (1e18 - ((calcValues.providerTokensSlashed * 1e18) / before.provision.tokens))) / (1e18); + + // assert + assertEq(afterProvision.tokens + calcValues.providerTokensSlashed, before.provision.tokens); + assertEq(afterProvision.tokensThawing, provisionThawingTokens); + assertEq(afterProvision.sharesThawing, before.provision.sharesThawing); + assertEq(afterProvision.maxVerifierCut, before.provision.maxVerifierCut); + assertEq(afterProvision.maxVerifierCutPending, before.provision.maxVerifierCutPending); + assertEq(afterProvision.thawingPeriod, before.provision.thawingPeriod); + assertEq(afterProvision.thawingPeriodPending, before.provision.thawingPeriodPending); + + if (isDelegationSlashingEnabled) { + uint256 poolThawingTokens = (before.pool.tokensThawing * + (1e18 - ((calcValues.delegationTokensSlashed * 1e18) / before.pool.tokens))) / (1e18); + assertEq(afterPool.tokens + calcValues.delegationTokensSlashed, before.pool.tokens); + assertEq(afterPool.shares, before.pool.shares); + assertEq(afterPool.tokensThawing, poolThawingTokens); + assertEq(afterPool.sharesThawing, before.pool.sharesThawing); + } + + assertEq(before.stakingBalance - tokensSlashed, afterStakingBalance); + assertEq(before.verifierBalance + verifierCutAmount, afterVerifierBalance); + + assertEq( + afterServiceProvider.tokensStaked + calcValues.providerTokensSlashed, + before.serviceProvider.tokensStaked + ); + assertEq( + afterServiceProvider.tokensProvisioned + calcValues.providerTokensSlashed, + before.serviceProvider.tokensProvisioned + ); + } + } + + // use struct to avoid 'stack too deep' error + struct CalcValues_CloseAllocation { + uint256 rewards; + uint256 delegatorRewards; + uint256 indexerRewards; + } + struct BeforeValues_CloseAllocation { + IHorizonStakingExtension.Allocation allocation; + DelegationPoolInternalTest pool; + ServiceProviderInternal serviceProvider; + uint256 subgraphAllocations; + uint256 stakingBalance; + uint256 indexerBalance; + uint256 beneficiaryBalance; + } + + // Current rewards manager is mocked and assumed to mint fixed rewards + function _closeAllocation(address allocationId, bytes32 poi) internal { + (, address msgSender, ) = vm.readCallers(); + + // before + BeforeValues_CloseAllocation memory beforeValues; + beforeValues.allocation = staking.getAllocation(allocationId); + beforeValues.pool = _getStorage_DelegationPoolInternal( + beforeValues.allocation.indexer, + subgraphDataServiceLegacyAddress, + true + ); + beforeValues.serviceProvider = _getStorage_ServiceProviderInternal(beforeValues.allocation.indexer); + beforeValues.subgraphAllocations = _getStorage_SubgraphAllocations( + beforeValues.allocation.subgraphDeploymentID + ); + beforeValues.stakingBalance = token.balanceOf(address(staking)); + beforeValues.indexerBalance = token.balanceOf(beforeValues.allocation.indexer); + beforeValues.beneficiaryBalance = token.balanceOf( + _getStorage_RewardsDestination(beforeValues.allocation.indexer) + ); + + bool isAuth = staking.isAuthorized( + msgSender, + beforeValues.allocation.indexer, + subgraphDataServiceLegacyAddress + ); + address rewardsDestination = _getStorage_RewardsDestination(beforeValues.allocation.indexer); + + CalcValues_CloseAllocation memory calcValues = CalcValues_CloseAllocation({ + rewards: ALLOCATIONS_REWARD_CUT, + delegatorRewards: ALLOCATIONS_REWARD_CUT - + uint256(beforeValues.pool.__DEPRECATED_indexingRewardCut).mulPPM(ALLOCATIONS_REWARD_CUT), + indexerRewards: 0 + }); + calcValues.indexerRewards = + ALLOCATIONS_REWARD_CUT - + (beforeValues.pool.tokens > 0 ? calcValues.delegatorRewards : 0); + + // closeAllocation + vm.expectEmit(address(staking)); + emit IHorizonStakingExtension.AllocationClosed( + beforeValues.allocation.indexer, + beforeValues.allocation.subgraphDeploymentID, + epochManager.currentEpoch(), + beforeValues.allocation.tokens, + allocationId, + msgSender, + poi, + !isAuth + ); + staking.closeAllocation(allocationId, poi); + + // after + IHorizonStakingExtension.Allocation memory afterAllocation = staking.getAllocation(allocationId); + DelegationPoolInternalTest memory afterPool = _getStorage_DelegationPoolInternal( + beforeValues.allocation.indexer, + subgraphDataServiceLegacyAddress, + true + ); + ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal( + beforeValues.allocation.indexer + ); + uint256 afterSubgraphAllocations = _getStorage_SubgraphAllocations( + beforeValues.allocation.subgraphDeploymentID + ); + uint256 afterStakingBalance = token.balanceOf(address(staking)); + uint256 afterIndexerBalance = token.balanceOf(beforeValues.allocation.indexer); + uint256 afterBeneficiaryBalance = token.balanceOf(rewardsDestination); + + if (beforeValues.allocation.tokens > 0) { + if (isAuth && poi != 0) { + if (rewardsDestination != address(0)) { + assertEq( + beforeValues.stakingBalance + calcValues.rewards - calcValues.indexerRewards, + afterStakingBalance + ); + assertEq(beforeValues.indexerBalance, afterIndexerBalance); + assertEq(beforeValues.beneficiaryBalance + calcValues.indexerRewards, afterBeneficiaryBalance); + } else { + assertEq(beforeValues.stakingBalance + calcValues.rewards, afterStakingBalance); + assertEq(beforeValues.indexerBalance, afterIndexerBalance); + assertEq(beforeValues.beneficiaryBalance, afterBeneficiaryBalance); + } + } else { + assertEq(beforeValues.stakingBalance, afterStakingBalance); + assertEq(beforeValues.indexerBalance, afterIndexerBalance); + assertEq(beforeValues.beneficiaryBalance, afterBeneficiaryBalance); + } + } else { + assertEq(beforeValues.stakingBalance, afterStakingBalance); + assertEq(beforeValues.indexerBalance, afterIndexerBalance); + assertEq(beforeValues.beneficiaryBalance, afterBeneficiaryBalance); + } + + assertEq(afterAllocation.indexer, beforeValues.allocation.indexer); + assertEq(afterAllocation.subgraphDeploymentID, beforeValues.allocation.subgraphDeploymentID); + assertEq(afterAllocation.tokens, beforeValues.allocation.tokens); + assertEq(afterAllocation.createdAtEpoch, beforeValues.allocation.createdAtEpoch); + assertEq(afterAllocation.closedAtEpoch, epochManager.currentEpoch()); + assertEq(afterAllocation.collectedFees, beforeValues.allocation.collectedFees); + assertEq( + afterAllocation.__DEPRECATED_effectiveAllocation, + beforeValues.allocation.__DEPRECATED_effectiveAllocation + ); + assertEq(afterAllocation.accRewardsPerAllocatedToken, beforeValues.allocation.accRewardsPerAllocatedToken); + assertEq(afterAllocation.distributedRebates, beforeValues.allocation.distributedRebates); + + if (beforeValues.allocation.tokens > 0 && isAuth && poi != 0 && rewardsDestination == address(0)) { + assertEq( + afterServiceProvider.tokensStaked, + beforeValues.serviceProvider.tokensStaked + calcValues.indexerRewards + ); + } else { + assertEq(afterServiceProvider.tokensStaked, beforeValues.serviceProvider.tokensStaked); + } + assertEq(afterServiceProvider.tokensProvisioned, beforeValues.serviceProvider.tokensProvisioned); + assertEq( + afterServiceProvider.__DEPRECATED_tokensAllocated + beforeValues.allocation.tokens, + beforeValues.serviceProvider.__DEPRECATED_tokensAllocated + ); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLocked, + beforeValues.serviceProvider.__DEPRECATED_tokensLocked + ); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLockedUntil, + beforeValues.serviceProvider.__DEPRECATED_tokensLockedUntil + ); + + assertEq(afterSubgraphAllocations + beforeValues.allocation.tokens, beforeValues.subgraphAllocations); + + if (beforeValues.allocation.tokens > 0 && isAuth && poi != 0 && beforeValues.pool.tokens > 0) { + assertEq(afterPool.tokens, beforeValues.pool.tokens + calcValues.delegatorRewards); + } else { + assertEq(afterPool.tokens, beforeValues.pool.tokens); + } + } + + // use struct to avoid 'stack too deep' error + struct BeforeValues_Collect { + IHorizonStakingExtension.Allocation allocation; + DelegationPoolInternalTest pool; + ServiceProviderInternal serviceProvider; + uint256 stakingBalance; + uint256 senderBalance; + uint256 curationBalance; + uint256 beneficiaryBalance; + } + struct CalcValues_Collect { + uint256 protocolTaxTokens; + uint256 queryFees; + uint256 curationCutTokens; + uint256 newRebates; + uint256 payment; + uint256 delegationFeeCut; + } + struct AfterValues_Collect { + IHorizonStakingExtension.Allocation allocation; + DelegationPoolInternalTest pool; + ServiceProviderInternal serviceProvider; + uint256 stakingBalance; + uint256 senderBalance; + uint256 curationBalance; + uint256 beneficiaryBalance; + } + + function _collect(uint256 tokens, address allocationId) internal { + (, address msgSender, ) = vm.readCallers(); + + // before + BeforeValues_Collect memory beforeValues; + beforeValues.allocation = staking.getAllocation(allocationId); + beforeValues.pool = _getStorage_DelegationPoolInternal( + beforeValues.allocation.indexer, + subgraphDataServiceLegacyAddress, + true + ); + beforeValues.serviceProvider = _getStorage_ServiceProviderInternal(beforeValues.allocation.indexer); + + (uint32 curationPercentage, uint32 protocolPercentage) = _getStorage_ProtocolTaxAndCuration(); + address rewardsDestination = _getStorage_RewardsDestination(beforeValues.allocation.indexer); + + beforeValues.stakingBalance = token.balanceOf(address(staking)); + beforeValues.senderBalance = token.balanceOf(msgSender); + beforeValues.curationBalance = token.balanceOf(address(curation)); + beforeValues.beneficiaryBalance = token.balanceOf(rewardsDestination); + + // calc some stuff + CalcValues_Collect memory calcValues; + calcValues.protocolTaxTokens = tokens.mulPPMRoundUp(protocolPercentage); + calcValues.queryFees = tokens - calcValues.protocolTaxTokens; + calcValues.curationCutTokens = 0; + if (curation.isCurated(beforeValues.allocation.subgraphDeploymentID)) { + calcValues.curationCutTokens = calcValues.queryFees.mulPPMRoundUp(curationPercentage); + calcValues.queryFees -= calcValues.curationCutTokens; + } + calcValues.newRebates = ExponentialRebates.exponentialRebates( + calcValues.queryFees + beforeValues.allocation.collectedFees, + beforeValues.allocation.tokens, + alphaNumerator, + alphaDenominator, + lambdaNumerator, + lambdaDenominator + ); + calcValues.payment = calcValues.newRebates > calcValues.queryFees + ? calcValues.queryFees + : calcValues.newRebates; + calcValues.delegationFeeCut = 0; + if (beforeValues.pool.tokens > 0) { + calcValues.delegationFeeCut = + calcValues.payment - + calcValues.payment.mulPPM(beforeValues.pool.__DEPRECATED_queryFeeCut); + calcValues.payment -= calcValues.delegationFeeCut; + } + + // staking.collect() + if (tokens > 0) { + vm.expectEmit(address(staking)); + emit IHorizonStakingExtension.RebateCollected( + msgSender, + beforeValues.allocation.indexer, + beforeValues.allocation.subgraphDeploymentID, + allocationId, + epochManager.currentEpoch(), + tokens, + calcValues.protocolTaxTokens, + calcValues.curationCutTokens, + calcValues.queryFees, + calcValues.payment, + calcValues.delegationFeeCut + ); + } + staking.collect(tokens, allocationId); + + // after + AfterValues_Collect memory afterValues; + afterValues.allocation = staking.getAllocation(allocationId); + afterValues.pool = _getStorage_DelegationPoolInternal( + beforeValues.allocation.indexer, + subgraphDataServiceLegacyAddress, + true + ); + afterValues.serviceProvider = _getStorage_ServiceProviderInternal(beforeValues.allocation.indexer); + afterValues.stakingBalance = token.balanceOf(address(staking)); + afterValues.senderBalance = token.balanceOf(msgSender); + afterValues.curationBalance = token.balanceOf(address(curation)); + afterValues.beneficiaryBalance = token.balanceOf(rewardsDestination); + + // assert + assertEq(afterValues.senderBalance + tokens, beforeValues.senderBalance); + assertEq(afterValues.curationBalance, beforeValues.curationBalance + calcValues.curationCutTokens); + if (rewardsDestination != address(0)) { + assertEq(afterValues.beneficiaryBalance, beforeValues.beneficiaryBalance + calcValues.payment); + assertEq(afterValues.stakingBalance, beforeValues.stakingBalance + calcValues.delegationFeeCut); + } else { + assertEq(afterValues.beneficiaryBalance, beforeValues.beneficiaryBalance); + assertEq( + afterValues.stakingBalance, + beforeValues.stakingBalance + calcValues.delegationFeeCut + calcValues.payment + ); + } + + assertEq( + afterValues.allocation.collectedFees, + beforeValues.allocation.collectedFees + tokens - calcValues.protocolTaxTokens - calcValues.curationCutTokens + ); + assertEq(afterValues.allocation.indexer, beforeValues.allocation.indexer); + assertEq(afterValues.allocation.subgraphDeploymentID, beforeValues.allocation.subgraphDeploymentID); + assertEq(afterValues.allocation.tokens, beforeValues.allocation.tokens); + assertEq(afterValues.allocation.createdAtEpoch, beforeValues.allocation.createdAtEpoch); + assertEq(afterValues.allocation.closedAtEpoch, beforeValues.allocation.closedAtEpoch); + assertEq( + afterValues.allocation.accRewardsPerAllocatedToken, + beforeValues.allocation.accRewardsPerAllocatedToken + ); + assertEq( + afterValues.allocation.distributedRebates, + beforeValues.allocation.distributedRebates + calcValues.newRebates + ); + + assertEq(afterValues.pool.tokens, beforeValues.pool.tokens + calcValues.delegationFeeCut); + assertEq(afterValues.pool.shares, beforeValues.pool.shares); + assertEq(afterValues.pool.tokensThawing, beforeValues.pool.tokensThawing); + assertEq(afterValues.pool.sharesThawing, beforeValues.pool.sharesThawing); + + assertEq(afterValues.serviceProvider.tokensProvisioned, beforeValues.serviceProvider.tokensProvisioned); + if (rewardsDestination != address(0)) { + assertEq(afterValues.serviceProvider.tokensStaked, beforeValues.serviceProvider.tokensStaked); + } else { + assertEq( + afterValues.serviceProvider.tokensStaked, + beforeValues.serviceProvider.tokensStaked + calcValues.payment + ); + } + } + + /* + * STORAGE HELPERS + */ + function _getStorage_ServiceProviderInternal( + address serviceProvider + ) internal view returns (ServiceProviderInternal memory) { + uint256 slotNumber = 14; + uint256 baseSlotUint = uint256(keccak256(abi.encode(serviceProvider, slotNumber))); + + ServiceProviderInternal memory serviceProviderInternal = ServiceProviderInternal({ + tokensStaked: uint256(vm.load(address(staking), bytes32(baseSlotUint))), + __DEPRECATED_tokensAllocated: uint256(vm.load(address(staking), bytes32(baseSlotUint + 1))), + __DEPRECATED_tokensLocked: uint256(vm.load(address(staking), bytes32(baseSlotUint + 2))), + __DEPRECATED_tokensLockedUntil: uint256(vm.load(address(staking), bytes32(baseSlotUint + 3))), + tokensProvisioned: uint256(vm.load(address(staking), bytes32(baseSlotUint + 4))) + }); + + return serviceProviderInternal; + } + + function _getStorage_OperatorAuth( + address serviceProvider, + address operator, + address verifier, + bool legacy + ) internal view returns (bool) { + uint256 slotNumber = legacy ? 21 : 31; + uint256 slot; + + if (legacy) { + slot = uint256(keccak256(abi.encode(operator, keccak256(abi.encode(serviceProvider, slotNumber))))); + } else { + slot = uint256( + keccak256( + abi.encode( + operator, + keccak256(abi.encode(verifier, keccak256(abi.encode(serviceProvider, slotNumber)))) + ) + ) + ); + } + return vm.load(address(staking), bytes32(slot)) == bytes32(uint256(1)); + } + + function _setStorage_DeprecatedThawingPeriod(uint32 _thawingPeriod) internal { + uint256 slot = 13; + + // Read the current value of the slot + uint256 currentSlotValue = uint256(vm.load(address(staking), bytes32(slot))); + + // Create a mask to clear the bits for __DEPRECATED_thawingPeriod (bits 0-31) + uint256 mask = ~(uint256(0xFFFFFFFF)); // Mask to clear the first 32 bits + + // Clear the bits for __DEPRECATED_thawingPeriod and set the new value + uint256 newSlotValue = (currentSlotValue & mask) | uint256(_thawingPeriod); + + // Store the updated value back into the slot + vm.store(address(staking), bytes32(slot), bytes32(newSlotValue)); + } + + function _setStorage_ServiceProvider( + address _indexer, + uint256 _tokensStaked, + uint256 _tokensAllocated, + uint256 _tokensLocked, + uint256 _tokensLockedUntil, + uint256 _tokensProvisioned + ) internal { + uint256 serviceProviderSlot = 14; + bytes32 serviceProviderBaseSlot = keccak256(abi.encode(_indexer, serviceProviderSlot)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot)), bytes32(_tokensStaked)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 1), bytes32(_tokensAllocated)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 2), bytes32(_tokensLocked)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 3), bytes32(_tokensLockedUntil)); + vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 4), bytes32(_tokensProvisioned)); + } + + // DelegationPoolInternal contains a mapping, solidity doesn't allow constructing structs with + // nested mappings on memory: "Struct containing a (nested) mapping cannot be constructed" + // So we use a custom struct here and remove the nested mapping which we don't need anyways + struct DelegationPoolInternalTest { + // (Deprecated) Time, in blocks, an indexer must wait before updating delegation parameters + uint32 __DEPRECATED_cooldownBlocks; + // (Deprecated) Percentage of indexing rewards for the service provider, in PPM + uint32 __DEPRECATED_indexingRewardCut; + // (Deprecated) Percentage of query fees for the service provider, in PPM + uint32 __DEPRECATED_queryFeeCut; + // (Deprecated) Block when the delegation parameters were last updated + uint256 __DEPRECATED_updatedAtBlock; + // Total tokens as pool reserves + uint256 tokens; + // Total shares minted in the pool + uint256 shares; + // Delegation details by delegator + uint256 _gap_delegators_mapping; + // Tokens thawing in the pool + uint256 tokensThawing; + // Shares representing the thawing tokens + uint256 sharesThawing; + } + + function _getStorage_DelegationPoolInternal( + address serviceProvider, + address verifier, + bool legacy + ) internal view returns (DelegationPoolInternalTest memory) { + uint256 slotNumber = legacy ? 20 : 33; + uint256 baseSlot; + if (legacy) { + baseSlot = uint256(keccak256(abi.encode(serviceProvider, slotNumber))); + } else { + baseSlot = uint256(keccak256(abi.encode(verifier, keccak256(abi.encode(serviceProvider, slotNumber))))); + } + + uint256 packedData = uint256(vm.load(address(staking), bytes32(baseSlot))); + + DelegationPoolInternalTest memory delegationPoolInternal = DelegationPoolInternalTest({ + __DEPRECATED_cooldownBlocks: uint32(packedData & 0xFFFFFFFF), + __DEPRECATED_indexingRewardCut: uint32((packedData >> 32) & 0xFFFFFFFF), + __DEPRECATED_queryFeeCut: uint32((packedData >> 64) & 0xFFFFFFFF), + __DEPRECATED_updatedAtBlock: uint256(vm.load(address(staking), bytes32(baseSlot + 1))), + tokens: uint256(vm.load(address(staking), bytes32(baseSlot + 2))), + shares: uint256(vm.load(address(staking), bytes32(baseSlot + 3))), + _gap_delegators_mapping: uint256(vm.load(address(staking), bytes32(baseSlot + 4))), + tokensThawing: uint256(vm.load(address(staking), bytes32(baseSlot + 5))), + sharesThawing: uint256(vm.load(address(staking), bytes32(baseSlot + 6))) + }); + + return delegationPoolInternal; + } + + function _getStorage_Delegation( + address serviceProvider, + address verifier, + address delegator, + bool legacy + ) internal view returns (DelegationInternal memory) { + uint256 slotNumber = legacy ? 20 : 33; + uint256 baseSlot; + + // DelegationPool + if (legacy) { + baseSlot = uint256(keccak256(abi.encode(serviceProvider, slotNumber))); + } else { + baseSlot = uint256(keccak256(abi.encode(verifier, keccak256(abi.encode(serviceProvider, slotNumber))))); + } + + // delegators slot in DelegationPool + baseSlot += 4; + + // Delegation + baseSlot = uint256(keccak256(abi.encode(delegator, baseSlot))); + + DelegationInternal memory delegation = DelegationInternal({ + shares: uint256(vm.load(address(staking), bytes32(baseSlot))), + __DEPRECATED_tokensLocked: uint256(vm.load(address(staking), bytes32(baseSlot + 1))), + __DEPRECATED_tokensLockedUntil: uint256(vm.load(address(staking), bytes32(baseSlot + 2))) + }); + + return delegation; + } + + function _getStorage_CounterpartStakingAddress() internal view returns (address) { + uint256 slot = 24; + return address(uint160(uint256(vm.load(address(staking), bytes32(slot))))); + } + + function _setStorage_allocation( + IHorizonStakingExtension.Allocation memory allocation, + address allocationId, + uint256 tokens + ) internal { + // __DEPRECATED_allocations + uint256 allocationsSlot = 15; + bytes32 allocationBaseSlot = keccak256(abi.encode(allocationId, allocationsSlot)); + vm.store(address(staking), allocationBaseSlot, bytes32(uint256(uint160(allocation.indexer)))); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 1), allocation.subgraphDeploymentID); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 2), bytes32(tokens)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 3), bytes32(allocation.createdAtEpoch)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 4), bytes32(allocation.closedAtEpoch)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 5), bytes32(allocation.collectedFees)); + vm.store( + address(staking), + bytes32(uint256(allocationBaseSlot) + 6), + bytes32(allocation.__DEPRECATED_effectiveAllocation) + ); + vm.store( + address(staking), + bytes32(uint256(allocationBaseSlot) + 7), + bytes32(allocation.accRewardsPerAllocatedToken) + ); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 8), bytes32(allocation.distributedRebates)); + + // _serviceProviders + uint256 serviceProviderSlot = 14; + bytes32 serviceProviderBaseSlot = keccak256(abi.encode(allocation.indexer, serviceProviderSlot)); + uint256 currentTokensStaked = uint256(vm.load(address(staking), serviceProviderBaseSlot)); + uint256 currentTokensProvisioned = uint256( + vm.load(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 1)) + ); + vm.store( + address(staking), + bytes32(uint256(serviceProviderBaseSlot) + 0), + bytes32(currentTokensStaked + tokens) + ); + vm.store( + address(staking), + bytes32(uint256(serviceProviderBaseSlot) + 1), + bytes32(currentTokensProvisioned + tokens) + ); + + // __DEPRECATED_subgraphAllocations + uint256 subgraphsAllocationsSlot = 16; + bytes32 subgraphAllocationsBaseSlot = keccak256( + abi.encode(allocation.subgraphDeploymentID, subgraphsAllocationsSlot) + ); + uint256 currentAllocatedTokens = uint256(vm.load(address(staking), subgraphAllocationsBaseSlot)); + vm.store(address(staking), subgraphAllocationsBaseSlot, bytes32(currentAllocatedTokens + tokens)); + } + + function _getStorage_SubgraphAllocations(bytes32 subgraphDeploymentID) internal view returns (uint256) { + uint256 subgraphsAllocationsSlot = 16; + bytes32 subgraphAllocationsBaseSlot = keccak256(abi.encode(subgraphDeploymentID, subgraphsAllocationsSlot)); + return uint256(vm.load(address(staking), subgraphAllocationsBaseSlot)); + } + + function _setStorage_RewardsDestination(address serviceProvider, address destination) internal { + uint256 rewardsDestinationSlot = 23; + bytes32 rewardsDestinationSlotBaseSlot = keccak256(abi.encode(serviceProvider, rewardsDestinationSlot)); + vm.store(address(staking), rewardsDestinationSlotBaseSlot, bytes32(uint256(uint160(destination)))); + } + + function _getStorage_RewardsDestination(address serviceProvider) internal view returns (address) { + uint256 rewardsDestinationSlot = 23; + bytes32 rewardsDestinationSlotBaseSlot = keccak256(abi.encode(serviceProvider, rewardsDestinationSlot)); + return address(uint160(uint256(vm.load(address(staking), rewardsDestinationSlotBaseSlot)))); + } + + function _setStorage_MaxAllocationEpochs(uint256 maxAllocationEpochs) internal { + uint256 slot = 13; + + // Read the current value of the storage slot + uint256 currentSlotValue = uint256(vm.load(address(staking), bytes32(slot))); + + // Mask to clear the specific bits for __DEPRECATED_maxAllocationEpochs (bits 128-159) + uint256 mask = ~(uint256(0xFFFFFFFF) << 128); + + // Clear the bits and set the new maxAllocationEpochs value + uint256 newSlotValue = (currentSlotValue & mask) | (uint256(maxAllocationEpochs) << 128); + + // Store the updated value back into the slot + vm.store(address(staking), bytes32(slot), bytes32(newSlotValue)); + + uint256 readMaxAllocationEpochs = _getStorage_MaxAllocationEpochs(); + assertEq(readMaxAllocationEpochs, maxAllocationEpochs); + } + + function _getStorage_MaxAllocationEpochs() internal view returns (uint256) { + uint256 slot = 13; + + // Read the current value of the storage slot + uint256 currentSlotValue = uint256(vm.load(address(staking), bytes32(slot))); + + // Mask to isolate bits 128-159 + uint256 mask = uint256(0xFFFFFFFF) << 128; + + // Extract the maxAllocationEpochs by masking and shifting + uint256 maxAllocationEpochs = (currentSlotValue & mask) >> 128; + + return maxAllocationEpochs; + } + + function _setStorage_DelegationPool( + address serviceProvider, + uint256 tokens, + uint32 indexingRewardCut, + uint32 queryFeeCut + ) internal { + bytes32 baseSlot = keccak256(abi.encode(serviceProvider, uint256(20))); + bytes32 feeCutValues = bytes32( + (uint256(indexingRewardCut) << uint256(32)) | (uint256(queryFeeCut) << uint256(64)) + ); + bytes32 tokensSlot = bytes32(uint256(baseSlot) + 2); + vm.store(address(staking), baseSlot, feeCutValues); + vm.store(address(staking), tokensSlot, bytes32(tokens)); + } + + function _setStorage_RebateParameters( + uint32 alphaNumerator_, + uint32 alphaDenominator_, + uint32 lambdaNumerator_, + uint32 lambdaDenominator_ + ) internal { + // Store alpha numerator and denominator in slot 13 + uint256 alphaSlot = 13; + + uint256 newAlphaSlotValue; + { + uint256 alphaNumeratorOffset = 160; // Offset for __DEPRECATED_alphaNumerator (20th byte) + uint256 alphaDenominatorOffset = 192; // Offset for __DEPRECATED_alphaDenominator (24th byte) + + // Read current value of the slot + uint256 currentAlphaSlotValue = uint256(vm.load(address(staking), bytes32(alphaSlot))); + + // Create a mask to clear the bits for alphaNumerator and alphaDenominator + uint256 alphaMask = ~(uint256(0xFFFFFFFF) << alphaNumeratorOffset) & + ~(uint256(0xFFFFFFFF) << alphaDenominatorOffset); + + // Clear and set new values + newAlphaSlotValue = + (currentAlphaSlotValue & alphaMask) | + (uint256(alphaNumerator_) << alphaNumeratorOffset) | + (uint256(alphaDenominator_) << alphaDenominatorOffset); + } + + // Store the updated value back into the slot + vm.store(address(staking), bytes32(alphaSlot), bytes32(newAlphaSlotValue)); + + // Store lambda numerator and denominator in slot 25 + uint256 lambdaSlot = 25; + + uint256 newLambdaSlotValue; + { + uint256 lambdaNumeratorOffset = 160; // Offset for lambdaNumerator (20th byte) + uint256 lambdaDenominatorOffset = 192; // Offset for lambdaDenominator (24th byte) + + // Read current value of the slot + uint256 currentLambdaSlotValue = uint256(vm.load(address(staking), bytes32(lambdaSlot))); + + // Create a mask to clear the bits for lambdaNumerator and lambdaDenominator + uint256 lambdaMask = ~(uint256(0xFFFFFFFF) << lambdaNumeratorOffset) & + ~(uint256(0xFFFFFFFF) << lambdaDenominatorOffset); + + // Clear and set new values + newLambdaSlotValue = + (currentLambdaSlotValue & lambdaMask) | + (uint256(lambdaNumerator_) << lambdaNumeratorOffset) | + (uint256(lambdaDenominator_) << lambdaDenominatorOffset); + } + + // Store the updated value back into the slot + vm.store(address(staking), bytes32(lambdaSlot), bytes32(newLambdaSlotValue)); + + // Verify the storage + ( + uint32 readAlphaNumerator, + uint32 readAlphaDenominator, + uint32 readLambdaNumerator, + uint32 readLambdaDenominator + ) = _getStorage_RebateParameters(); + assertEq(readAlphaNumerator, alphaNumerator_); + assertEq(readAlphaDenominator, alphaDenominator_); + assertEq(readLambdaNumerator, lambdaNumerator_); + assertEq(readLambdaDenominator, lambdaDenominator_); + } + + function _getStorage_RebateParameters() internal view returns (uint32, uint32, uint32, uint32) { + // Read alpha numerator and denominator + uint256 alphaSlot = 13; + uint256 alphaValues = uint256(vm.load(address(staking), bytes32(alphaSlot))); + uint32 alphaNumerator_ = uint32(alphaValues >> 160); + uint32 alphaDenominator_ = uint32(alphaValues >> 192); + + // Read lambda numerator and denominator + uint256 lambdaSlot = 25; + uint256 lambdaValues = uint256(vm.load(address(staking), bytes32(lambdaSlot))); + uint32 lambdaNumerator_ = uint32(lambdaValues >> 160); + uint32 lambdaDenominator_ = uint32(lambdaValues >> 192); + + return (alphaNumerator_, alphaDenominator_, lambdaNumerator_, lambdaDenominator_); + } + + // function _setStorage_ProtocolTaxAndCuration(uint32 curationPercentage, uint32 taxPercentage) private { + // bytes32 slot = bytes32(uint256(13)); + // uint256 curationOffset = 4; + // uint256 protocolTaxOffset = 8; + // bytes32 originalValue = vm.load(address(staking), slot); + + // bytes32 newProtocolTaxValue = bytes32( + // ((uint256(originalValue) & + // ~((0xFFFFFFFF << (8 * curationOffset)) | (0xFFFFFFFF << (8 * protocolTaxOffset)))) | + // (uint256(curationPercentage) << (8 * curationOffset))) | + // (uint256(taxPercentage) << (8 * protocolTaxOffset)) + // ); + // vm.store(address(staking), slot, newProtocolTaxValue); + + // (uint32 readCurationPercentage, uint32 readTaxPercentage) = _getStorage_ProtocolTaxAndCuration(); + // assertEq(readCurationPercentage, curationPercentage); + // } + + function _setStorage_ProtocolTaxAndCuration(uint32 curationPercentage, uint32 taxPercentage) internal { + bytes32 slot = bytes32(uint256(13)); + + // Offsets for the percentages + uint256 curationOffset = 32; // __DEPRECATED_curationPercentage (2nd uint32, bits 32-63) + uint256 protocolTaxOffset = 64; // __DEPRECATED_protocolPercentage (3rd uint32, bits 64-95) + + // Read the current slot value + uint256 originalValue = uint256(vm.load(address(staking), slot)); + + // Create masks to clear the specific bits for the two percentages + uint256 mask = ~(uint256(0xFFFFFFFF) << curationOffset) & ~(uint256(0xFFFFFFFF) << protocolTaxOffset); // Mask for curationPercentage // Mask for protocolTax + + // Clear the existing bits and set the new values + uint256 newSlotValue = (originalValue & mask) | + (uint256(curationPercentage) << curationOffset) | + (uint256(taxPercentage) << protocolTaxOffset); + + // Store the updated slot value + vm.store(address(staking), slot, bytes32(newSlotValue)); + + // Verify the values were set correctly + (uint32 readCurationPercentage, uint32 readTaxPercentage) = _getStorage_ProtocolTaxAndCuration(); + assertEq(readCurationPercentage, curationPercentage); + assertEq(readTaxPercentage, taxPercentage); + } + + function _getStorage_ProtocolTaxAndCuration() internal view returns (uint32, uint32) { + bytes32 slot = bytes32(uint256(13)); + bytes32 value = vm.load(address(staking), slot); + uint32 curationPercentage = uint32(uint256(value) >> 32); + uint32 taxPercentage = uint32(uint256(value) >> 64); + return (curationPercentage, taxPercentage); + } + + /* + * MISC: private functions to help with testing + */ + // use struct to avoid 'stack too deep' error + struct CalcValues_ThawRequestData { + uint256 tokensThawed; + uint256 tokensThawing; + uint256 sharesThawing; + ThawRequest[] thawRequestsFulfilledList; + bytes32[] thawRequestsFulfilledListIds; + uint256[] thawRequestsFulfilledListTokens; + } + + function calcThawRequestData( + address serviceProvider, + address verifier, + address owner, + uint256 iterations, + bool delegation + ) private view returns (CalcValues_ThawRequestData memory) { + LinkedList.List memory thawRequestList = staking.getThawRequestList(serviceProvider, verifier, owner); + if (thawRequestList.count == 0) { + return CalcValues_ThawRequestData(0, 0, 0, new ThawRequest[](0), new bytes32[](0), new uint256[](0)); + } + + Provision memory prov = staking.getProvision(serviceProvider, verifier); + DelegationPool memory pool = staking.getDelegationPool(serviceProvider, verifier); + + uint256 tokensThawed = 0; + uint256 tokensThawing = delegation ? pool.tokensThawing : prov.tokensThawing; + uint256 sharesThawing = delegation ? pool.sharesThawing : prov.sharesThawing; + uint256 thawRequestsFulfilled = 0; + + bytes32 thawRequestId = thawRequestList.head; + while (thawRequestId != bytes32(0) && (iterations == 0 || thawRequestsFulfilled < iterations)) { + ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + if (thawRequest.thawingUntil <= block.timestamp) { + thawRequestsFulfilled++; + uint256 tokens = delegation + ? (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing + : (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; + tokensThawed += tokens; + tokensThawing -= tokens; + sharesThawing -= thawRequest.shares; + } else { + break; + } + thawRequestId = thawRequest.next; + } + + // we need to do a second pass because solidity doesnt allow dynamic arrays on memory + ThawRequest[] memory thawRequestsFulfilledList = new ThawRequest[](thawRequestsFulfilled); + bytes32[] memory thawRequestsFulfilledListIds = new bytes32[](thawRequestsFulfilled); + uint256[] memory thawRequestsFulfilledListTokens = new uint256[](thawRequestsFulfilled); + uint256 i = 0; + thawRequestId = thawRequestList.head; + while (thawRequestId != bytes32(0) && (iterations == 0 || i < iterations)) { + ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + if (thawRequest.thawingUntil <= block.timestamp) { + uint256 tokens = delegation + ? (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing + : (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; + thawRequestsFulfilledListTokens[i] = tokens; + thawRequestsFulfilledListIds[i] = thawRequestId; + thawRequestsFulfilledList[i] = staking.getThawRequest(thawRequestId); + thawRequestId = thawRequestsFulfilledList[i].next; + i++; + } else { + break; + } + thawRequestId = thawRequest.next; + } + + assertEq(thawRequestsFulfilled, thawRequestsFulfilledList.length); + assertEq(thawRequestsFulfilled, thawRequestsFulfilledListIds.length); + assertEq(thawRequestsFulfilled, thawRequestsFulfilledListTokens.length); + + return + CalcValues_ThawRequestData( + tokensThawed, + tokensThawing, + sharesThawing, + thawRequestsFulfilledList, + thawRequestsFulfilledListIds, + thawRequestsFulfilledListTokens + ); } } diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index 1973f8581..d846d1754 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -1,17 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; import { stdStorage, StdStorage } from "forge-std/Test.sol"; -import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; -import { IHorizonStakingTypes } from "../../contracts/interfaces/internal/IHorizonStakingTypes.sol"; -import { LinkedList } from "../../contracts/libraries/LinkedList.sol"; -import { MathUtils } from "../../contracts/libraries/MathUtils.sol"; - import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; -contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { +contract HorizonStakingTest is HorizonStakingSharedTest { using stdStorage for StdStorage; /* @@ -25,38 +20,11 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { _; } - modifier useOperator() { - vm.startPrank(users.indexer); - staking.setOperator(users.operator, subgraphDataServiceAddress, true); - vm.startPrank(users.operator); - _; - vm.stopPrank(); - } - - modifier useStake(uint256 amount) { - vm.assume(amount > 0); - approve(address(staking), amount); - staking.stake(amount); - _; - } - - modifier useStakeTo(address to, uint256 amount) { - vm.assume(amount > 0); - _stakeTo(to, amount); - _; - } - - modifier useThawRequest(uint256 thawAmount) { - vm.assume(thawAmount > 0); - _createThawRequest(thawAmount); - _; - } - modifier useThawAndDeprovision(uint256 amount, uint64 thawingPeriod) { vm.assume(amount > 0); - _createThawRequest(amount); + _thaw(users.indexer, subgraphDataServiceAddress, amount); skip(thawingPeriod + 1); - _deprovision(0); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); _; } @@ -75,7 +43,7 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { address msgSender; (, msgSender, ) = vm.readCallers(); resetPrank(users.governor); - staking.setAllowedLockedVerifier(verifier, true); + _setAllowedLockedVerifier(verifier, true); resetPrank(msgSender); _; } @@ -88,270 +56,4 @@ contract HorizonStakingTest is HorizonStakingSharedTest, IHorizonStakingTypes { resetPrank(msgSender); _; } - - /* - * HELPERS - */ - - function _stakeTo(address to, uint256 amount) internal { - approve(address(staking), amount); - staking.stakeTo(to, amount); - } - - function _createThawRequest(uint256 thawAmount) internal returns (bytes32) { - return staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); - } - - function _deprovision(uint256 nThawRequests) internal { - staking.deprovision(users.indexer, subgraphDataServiceAddress, nThawRequests); - } - - function _delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) internal { - __delegate(serviceProvider, verifier, tokens, minSharesOut, false); - } - - function _delegateLegacy(address serviceProvider, uint256 tokens) internal { - __delegate(serviceProvider, subgraphDataServiceLegacyAddress, tokens, 0, true); - } - - - struct DelegateData { - DelegationPool pool; - Delegation delegation; - uint256 storagePoolTokens; - uint256 delegatedTokens; - uint256 delegatorBalance; - uint256 stakingBalance; - } - - function __delegate( - address serviceProvider, - address verifier, - uint256 tokens, - uint256 minSharesOut, - bool legacy - ) internal { - (, address delegator, ) = vm.readCallers(); - - // before - DelegateData memory beforeData = DelegateData({ - pool: staking.getDelegationPool(serviceProvider, verifier), - delegation: staking.getDelegation(serviceProvider, verifier, delegator), - storagePoolTokens: uint256(vm.load(address(staking), _getSlotPoolTokens(serviceProvider, verifier, legacy))), - delegatedTokens: staking.getDelegatedTokensAvailable(serviceProvider, verifier), - delegatorBalance: token.balanceOf(delegator), - stakingBalance: token.balanceOf(address(staking)) - }); - - uint256 calcShares = (beforeData.pool.tokens == 0 || beforeData.pool.tokens == beforeData.pool.tokensThawing) - ? tokens - : ((tokens * beforeData.pool.shares) / (beforeData.pool.tokens - beforeData.pool.tokensThawing)); - - // delegate - token.approve(address(staking), tokens); - vm.expectEmit(); - emit IHorizonStakingMain.TokensDelegated(serviceProvider, verifier, delegator, tokens); - if (legacy) { - staking.delegate(serviceProvider, tokens); - } else { - staking.delegate(serviceProvider, verifier, tokens, minSharesOut); - } - - // after - DelegateData memory afterData = DelegateData({ - pool: staking.getDelegationPool(serviceProvider, verifier), - delegation: staking.getDelegation(serviceProvider, verifier, delegator), - storagePoolTokens: uint256(vm.load(address(staking), _getSlotPoolTokens(serviceProvider, verifier, legacy))), - delegatedTokens: staking.getDelegatedTokensAvailable(serviceProvider, verifier), - delegatorBalance: token.balanceOf(delegator), - stakingBalance: token.balanceOf(address(staking)) - }); - - uint256 deltaShares = afterData.delegation.shares - beforeData.delegation.shares; - - // assertions - assertEq(beforeData.pool.tokens + tokens, afterData.pool.tokens); - assertEq(beforeData.pool.shares + calcShares, afterData.pool.shares); - assertEq(beforeData.pool.tokensThawing, afterData.pool.tokensThawing); - assertEq(beforeData.pool.sharesThawing, afterData.pool.sharesThawing); - assertGe(deltaShares, minSharesOut); - assertEq(calcShares, deltaShares); - assertEq(beforeData.delegatedTokens + tokens, afterData.delegatedTokens); - // Ensure correct slot is being updated, pools are stored in different storage locations for legacy subgraph data service - assertEq(beforeData.storagePoolTokens + tokens, afterData.storagePoolTokens); - assertEq(beforeData.delegatorBalance - tokens, afterData.delegatorBalance); - assertEq(beforeData.stakingBalance + tokens, afterData.stakingBalance); - } - - function _undelegate(address serviceProvider, address verifier, uint256 shares) internal { - __undelegate(serviceProvider, verifier, shares, false); - } - - function _undelegateLegacy(address serviceProvider, uint256 shares) internal { - __undelegate(serviceProvider, subgraphDataServiceLegacyAddress, shares, true); - } - - function __undelegate(address serviceProvider, address verifier, uint256 shares, bool legacy) internal { - (, address delegator, ) = vm.readCallers(); - - // Delegation pool data is stored in a different storage slot for the legacy subgraph data service - bytes32 slotPoolShares; - if (legacy) { - slotPoolShares = bytes32(uint256(keccak256(abi.encode(serviceProvider, 20))) + 3); - } else { - slotPoolShares = bytes32( - uint256(keccak256(abi.encode(verifier, keccak256(abi.encode(serviceProvider, 33))))) + 3 - ); - } - - // before - DelegationPool memory beforePool = staking.getDelegationPool(serviceProvider, verifier); - Delegation memory beforeDelegation = staking.getDelegation(serviceProvider, verifier, delegator); - LinkedList.List memory beforeThawRequestList = staking.getThawRequestList(serviceProvider, verifier, delegator); - uint256 beforeStoragePoolShares = uint256(vm.load(address(staking), slotPoolShares)); - uint256 beforeDelegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); - - uint256 calcTokens = ((beforePool.tokens - beforePool.tokensThawing) * shares) / beforePool.shares; - uint256 calcThawingShares = beforePool.tokensThawing == 0 - ? calcTokens - : (beforePool.sharesThawing * calcTokens) / beforePool.tokensThawing; - uint64 calcThawingUntil = staking.getProvision(serviceProvider, verifier).thawingPeriod + - uint64(block.timestamp); - bytes32 calcThawRequestId = keccak256( - abi.encodePacked(serviceProvider, verifier, delegator, beforeThawRequestList.nonce) - ); - - // undelegate - vm.expectEmit(); - emit IHorizonStakingMain.ThawRequestCreated( - serviceProvider, - verifier, - delegator, - calcThawingShares, - calcThawingUntil, - calcThawRequestId - ); - vm.expectEmit(); - emit IHorizonStakingMain.TokensUndelegated(serviceProvider, verifier, delegator, calcTokens); - if (legacy) { - staking.undelegate(serviceProvider, shares); - } else { - staking.undelegate(serviceProvider, verifier, shares); - } - - // after - DelegationPool memory afterPool = staking.getDelegationPool(users.indexer, verifier); - Delegation memory afterDelegation = staking.getDelegation(serviceProvider, verifier, delegator); - LinkedList.List memory afterThawRequestList = staking.getThawRequestList(serviceProvider, verifier, delegator); - ThawRequest memory afterThawRequest = staking.getThawRequest(calcThawRequestId); - uint256 afterStoragePoolShares = uint256(vm.load(address(staking), slotPoolShares)); - uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); - - // assertions - assertEq(beforePool.shares, afterPool.shares + shares); - assertEq(beforePool.tokens, afterPool.tokens); - assertEq(beforePool.tokensThawing + calcTokens, afterPool.tokensThawing); - assertEq(beforePool.sharesThawing + calcThawingShares, afterPool.sharesThawing); - assertEq(beforeDelegation.shares - shares, afterDelegation.shares); - assertEq(afterThawRequest.shares, calcThawingShares); - assertEq(afterThawRequest.thawingUntil, calcThawingUntil); - assertEq(afterThawRequest.next, bytes32(0)); - assertEq(calcThawRequestId, afterThawRequestList.tail); - assertEq(beforeThawRequestList.nonce + 1, afterThawRequestList.nonce); - assertEq(beforeThawRequestList.count + 1, afterThawRequestList.count); - assertEq(afterDelegatedTokens + calcTokens, beforeDelegatedTokens); - // Ensure correct slot is being updated, pools are stored in different storage locations for legacy subgraph data service - assertEq(beforeStoragePoolShares, afterStoragePoolShares + shares); - } - - // todo remove these - function _getDelegation(address verifier) internal view returns (Delegation memory) { - return staking.getDelegation(users.indexer, verifier, users.delegator); - } - - function _getDelegationPool(address verifier) internal view returns (DelegationPool memory) { - return staking.getDelegationPool(users.indexer, verifier); - } - - function _storeServiceProvider( - address _indexer, - uint256 _tokensStaked, - uint256 _tokensAllocated, - uint256 _tokensLocked, - uint256 _tokensLockedUntil, - uint256 _tokensProvisioned - ) internal { - uint256 serviceProviderSlot = 14; - bytes32 serviceProviderBaseSlot = keccak256(abi.encode(_indexer, serviceProviderSlot)); - vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot)), bytes32(_tokensStaked)); - vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 1), bytes32(_tokensAllocated)); - vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 2), bytes32(_tokensLocked)); - vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 3), bytes32(_tokensLockedUntil)); - vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 4), bytes32(_tokensProvisioned)); - } - - function _slash(address serviceProvider, address verifier, uint256 tokens, uint256 verifierCutAmount) internal { - uint256 beforeProviderTokens = staking.getProviderTokensAvailable(serviceProvider, verifier); - uint256 beforeDelegationTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); - bool isDelegationSlashingEnabled = staking.isDelegationSlashingEnabled(); - - // Calculate expected tokens after slashing - uint256 providerTokensSlashed = MathUtils.min(beforeProviderTokens, tokens); - uint256 expectedProviderTokensAfterSlashing = beforeProviderTokens - providerTokensSlashed; - - uint256 delegationTokensSlashed = MathUtils.min(beforeDelegationTokens, tokens - providerTokensSlashed); - uint256 expectedDelegationTokensAfterSlashing = beforeDelegationTokens - - (isDelegationSlashingEnabled ? delegationTokensSlashed : 0); - - vm.expectEmit(address(staking)); - if (verifierCutAmount > 0) { - emit IHorizonStakingMain.VerifierTokensSent( - serviceProvider, - verifier, - verifier, - verifierCutAmount - ); - } - emit IHorizonStakingMain.ProvisionSlashed(serviceProvider, verifier, providerTokensSlashed); - - if (isDelegationSlashingEnabled) { - emit IHorizonStakingMain.DelegationSlashed( - serviceProvider, - verifier, - delegationTokensSlashed - ); - } else { - emit IHorizonStakingMain.DelegationSlashingSkipped( - serviceProvider, - verifier, - delegationTokensSlashed - ); - } - staking.slash(serviceProvider, tokens, verifierCutAmount, verifier); - - if (!isDelegationSlashingEnabled) { - expectedDelegationTokensAfterSlashing = beforeDelegationTokens; - } - - uint256 provisionTokens = staking.getProviderTokensAvailable(serviceProvider, verifier); - assertEq(provisionTokens, expectedProviderTokensAfterSlashing); - - uint256 delegationTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); - assertEq(delegationTokens, expectedDelegationTokensAfterSlashing); - - uint256 verifierTokens = token.balanceOf(verifier); - assertEq(verifierTokens, verifierCutAmount); - } - - function _getSlotPoolTokens(address serviceProvider, address verifier, bool legacy) private returns (bytes32) { - bytes32 slotPoolTokens; - if (legacy) { - slotPoolTokens = bytes32(uint256(keccak256(abi.encode(serviceProvider, 20))) + 2); - } else { - slotPoolTokens = bytes32( - uint256(keccak256(abi.encode(verifier, keccak256(abi.encode(serviceProvider, 33))))) + 2 - ); - } - return slotPoolTokens; - } } diff --git a/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol b/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol deleted file mode 100644 index bf9524c43..000000000 --- a/packages/horizon/test/staking/allocation/HorizonStakingExtension.t.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.26; - -import "forge-std/Test.sol"; - -import { HorizonStakingTest } from "../HorizonStaking.t.sol"; -import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; - -contract HorizonStakingExtensionTest is HorizonStakingTest { - - /* - * VARIABLES - */ - - address internal _allocationId = makeAddr("allocationId"); - bytes32 internal constant _subgraphDeploymentID = keccak256("subgraphDeploymentID"); - bytes32 internal constant _poi = keccak256("poi"); - uint256 internal constant MAX_ALLOCATION_EPOCHS = 28; - IHorizonStakingExtension.Allocation internal _allocation; - - /* - * MODIFIERS - */ - - modifier useAllocation() { - _storeAllocation(0); - _; - } - - /* - * SET UP - */ - - function setUp() public virtual override { - super.setUp(); - - _allocation = IHorizonStakingExtension.Allocation({ - indexer: users.indexer, - subgraphDeploymentID: _subgraphDeploymentID, - tokens: 0, - createdAtEpoch: block.timestamp, - closedAtEpoch: 0, - collectedFees: 0, - __DEPRECATED_effectiveAllocation: 0, - accRewardsPerAllocatedToken: 0, - distributedRebates: 0 - }); - } - - function _storeDelegationPool(uint256 tokens, uint32 indexingRewardCut, uint32 queryFeeCut) internal { - bytes32 baseSlot = keccak256(abi.encode(users.indexer, uint256(20))); - bytes32 feeCutValues = bytes32( - (uint256(indexingRewardCut) << uint256(32)) | - (uint256(queryFeeCut) << uint256(64)) - ); - bytes32 tokensSlot = bytes32(uint256(baseSlot) + 2); - vm.store(address(staking), baseSlot, feeCutValues); - vm.store(address(staking), tokensSlot, bytes32(tokens)); - } - - /* - * HELPERS - */ - - function _storeAllocation(uint256 tokens) internal { - uint256 allocationsSlot = 15; - bytes32 allocationBaseSlot = keccak256(abi.encode(_allocationId, allocationsSlot)); - vm.store(address(staking), allocationBaseSlot, bytes32(uint256(uint160(_allocation.indexer)))); - vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 1), _allocation.subgraphDeploymentID); - vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 2), bytes32(tokens)); - vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 3), bytes32(_allocation.createdAtEpoch)); - vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 4), bytes32(_allocation.closedAtEpoch)); - vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 5), bytes32(_allocation.collectedFees)); - vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 6), bytes32(_allocation.__DEPRECATED_effectiveAllocation)); - vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 7), bytes32(_allocation.accRewardsPerAllocatedToken)); - vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 8), bytes32(_allocation.distributedRebates)); - - uint256 serviceProviderSlot = 14; - bytes32 serviceProviderBaseSlot = keccak256(abi.encode(_allocation.indexer, serviceProviderSlot)); - vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 0), bytes32(tokens)); - vm.store(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 1), bytes32(tokens)); - - uint256 subgraphsAllocationsSlot = 16; - bytes32 subgraphAllocationsBaseSlot = keccak256(abi.encode(_allocation.subgraphDeploymentID, subgraphsAllocationsSlot)); - vm.store(address(staking), subgraphAllocationsBaseSlot, bytes32(tokens)); - } - - function _storeMaxAllocationEpochs() internal { - uint256 slot = 13; - vm.store(address(staking), bytes32(slot), bytes32(MAX_ALLOCATION_EPOCHS) << 128); - } - - function _storeRewardsDestination(address destination) internal { - uint256 rewardsDestinationSlot = 23; - bytes32 rewardsDestinationSlotBaseSlot = keccak256(abi.encode(users.indexer, rewardsDestinationSlot)); - vm.store(address(staking), rewardsDestinationSlotBaseSlot, bytes32(uint256(uint160(destination)))); - } -} \ No newline at end of file diff --git a/packages/horizon/test/staking/allocation/allocation.t.sol b/packages/horizon/test/staking/allocation/allocation.t.sol index 83e23a81f..9e80433b3 100644 --- a/packages/horizon/test/staking/allocation/allocation.t.sol +++ b/packages/horizon/test/staking/allocation/allocation.t.sol @@ -1,41 +1,18 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; -import { HorizonStakingExtensionTest } from "./HorizonStakingExtension.t.sol"; +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; -contract HorizonStakingAllocationTest is HorizonStakingExtensionTest { +contract HorizonStakingAllocationTest is HorizonStakingTest { /* * TESTS */ - function testAllocation_GetAllocation() public useAllocation { - IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); - assertEq(allocation.indexer, _allocation.indexer); - assertEq(allocation.subgraphDeploymentID, _allocation.subgraphDeploymentID); - assertEq(allocation.tokens, _allocation.tokens); - assertEq(allocation.createdAtEpoch, _allocation.createdAtEpoch); - assertEq(allocation.closedAtEpoch, _allocation.closedAtEpoch); - assertEq(allocation.collectedFees, _allocation.collectedFees); - assertEq(allocation.__DEPRECATED_effectiveAllocation, _allocation.__DEPRECATED_effectiveAllocation); - assertEq(allocation.accRewardsPerAllocatedToken, _allocation.accRewardsPerAllocatedToken); - assertEq(allocation.distributedRebates, _allocation.distributedRebates); - } - - function testAllocation_GetAllocationData() public useAllocation { - (address indexer, bytes32 subgraphDeploymentID, uint256 tokens, uint256 accRewardsPerAllocatedToken, uint256 accRewardsPending) = - staking.getAllocationData(_allocationId); - assertEq(indexer, _allocation.indexer); - assertEq(subgraphDeploymentID, _allocation.subgraphDeploymentID); - assertEq(tokens, _allocation.tokens); - assertEq(accRewardsPerAllocatedToken, _allocation.accRewardsPerAllocatedToken); - assertEq(accRewardsPending, 0); - } - - function testAllocation_GetAllocationState_Active() public useAllocation { + function testAllocation_GetAllocationState_Active(uint256 tokens) public useIndexer useAllocation(tokens) { IHorizonStakingExtension.AllocationState state = staking.getAllocationState(_allocationId); assertEq(uint16(state), uint16(IHorizonStakingExtension.AllocationState.Active)); } @@ -45,7 +22,7 @@ contract HorizonStakingAllocationTest is HorizonStakingExtensionTest { assertEq(uint16(state), uint16(IHorizonStakingExtension.AllocationState.Null)); } - function testAllocation_IsAllocation() public useAllocation { + function testAllocation_IsAllocation(uint256 tokens) public useIndexer useAllocation(tokens) { bool isAllocation = staking.isAllocation(_allocationId); assertTrue(isAllocation); } diff --git a/packages/horizon/test/staking/allocation/close.t.sol b/packages/horizon/test/staking/allocation/close.t.sol index c7c2aff68..121307056 100644 --- a/packages/horizon/test/staking/allocation/close.t.sol +++ b/packages/horizon/test/staking/allocation/close.t.sol @@ -1,54 +1,42 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; -import { HorizonStakingExtensionTest } from "./HorizonStakingExtension.t.sol"; +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; import { PPMMath } from "../../../contracts/libraries/PPMMath.sol"; -contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { +contract HorizonStakingCloseAllocationTest is HorizonStakingTest { using PPMMath for uint256; + bytes32 internal constant _poi = keccak256("poi"); + /* * TESTS */ - function testCloseAllocation(uint256 tokens) public useIndexer { + function testCloseAllocation(uint256 tokens) public useIndexer useAllocation(1 ether) { tokens = bound(tokens, 1, MAX_STAKING_TOKENS); - _storeAllocation(tokens); - _storeMaxAllocationEpochs(); - _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); // Skip 15 epochs vm.roll(15); - staking.closeAllocation(_allocationId, _poi); - IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); - assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); - - // Stake should be updated with rewards - assertEq(staking.getStake(address(users.indexer)), tokens * 2 + ALLOCATIONS_REWARD_CUT); + _closeAllocation(_allocationId, _poi); } - function testCloseAllocation_WithBeneficiaryAddress(uint256 tokens) public useIndexer { + function testCloseAllocation_WithBeneficiaryAddress(uint256 tokens) public useIndexer useAllocation(1 ether) { tokens = bound(tokens, 1, MAX_STAKING_TOKENS); - _storeAllocation(tokens); - _storeMaxAllocationEpochs(); - _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); address beneficiary = makeAddr("beneficiary"); - _storeRewardsDestination(beneficiary); + _setStorage_RewardsDestination(users.indexer, beneficiary); // Skip 15 epochs vm.roll(15); - staking.closeAllocation(_allocationId, _poi); - IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); - assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); - - // Stake should be updated with rewards - assertEq(token.balanceOf(beneficiary), ALLOCATIONS_REWARD_CUT); + _closeAllocation(_allocationId, _poi); } function testCloseAllocation_RevertWhen_NotActive() public { @@ -56,43 +44,32 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { staking.closeAllocation(_allocationId, _poi); } - function testCloseAllocation_RevertWhen_NotIndexer() public useAllocation { + function testCloseAllocation_RevertWhen_NotIndexer() public useIndexer useAllocation(1 ether) { resetPrank(users.delegator); vm.expectRevert("!auth"); staking.closeAllocation(_allocationId, _poi); } - function testCloseAllocation_AfterMaxEpochs_AnyoneCanClose(uint256 tokens) public useIndexer { + function testCloseAllocation_AfterMaxEpochs_AnyoneCanClose(uint256 tokens) public useIndexer useAllocation(1 ether) { tokens = bound(tokens, 1, MAX_STAKING_TOKENS); - _storeAllocation(tokens); - _storeMaxAllocationEpochs(); - _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, 0); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); // Skip to over the max allocation epochs - vm.roll(MAX_ALLOCATION_EPOCHS + 2); + vm.roll((MAX_ALLOCATION_EPOCHS + 1)* EPOCH_LENGTH + 1); resetPrank(users.delegator); - staking.closeAllocation(_allocationId, 0x0); - IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); - assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); - - // No rewards distributed - assertEq(staking.getStake(address(users.indexer)), tokens * 2); + _closeAllocation(_allocationId, 0x0); } - function testCloseAllocation_RevertWhen_ZeroTokensNotAuthorized() public useIndexer { - _storeAllocation(0); - _storeMaxAllocationEpochs(); - - // Skip to over the max allocation epochs - vm.roll(MAX_ALLOCATION_EPOCHS + 2); + function testCloseAllocation_RevertWhen_ZeroTokensNotAuthorized() public useIndexer useAllocation(1 ether){ + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 100 ether, 0, 0); resetPrank(users.delegator); vm.expectRevert("!auth"); staking.closeAllocation(_allocationId, 0x0); } - function testCloseAllocation_WithDelegation(uint256 tokens, uint256 delegationTokens, uint32 indexingRewardCut) public useIndexer { + function testCloseAllocation_WithDelegation(uint256 tokens, uint256 delegationTokens, uint32 indexingRewardCut) public useIndexer useAllocation(1 ether) { tokens = bound(tokens, 2, MAX_STAKING_TOKENS); delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); vm.assume(indexingRewardCut <= MAX_PPM); @@ -100,21 +77,12 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingExtensionTest { uint256 legacyAllocationTokens = tokens / 2; uint256 provisionTokens = tokens - legacyAllocationTokens; - _storeAllocation(legacyAllocationTokens); - _storeMaxAllocationEpochs(); - _createProvision(subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); - _storeDelegationPool(delegationTokens, indexingRewardCut, 0); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); + _setStorage_DelegationPool(users.indexer, delegationTokens, indexingRewardCut, 0); // Skip 15 epochs vm.roll(15); - staking.closeAllocation(_allocationId, _poi); - IHorizonStakingExtension.Allocation memory allocation = staking.getAllocation(_allocationId); - assertEq(allocation.closedAtEpoch, epochManager.currentEpoch()); - - uint256 indexerRewardCut = ALLOCATIONS_REWARD_CUT.mulPPM(indexingRewardCut); - uint256 delegationFeeCut = ALLOCATIONS_REWARD_CUT - indexerRewardCut; - assertEq(staking.getStake(address(users.indexer)), tokens + indexerRewardCut); - assertEq(staking.getDelegationPool(users.indexer, subgraphDataServiceLegacyAddress).tokens, delegationTokens + delegationFeeCut); + _closeAllocation(_allocationId, _poi); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/allocation/collect.t.sol b/packages/horizon/test/staking/allocation/collect.t.sol index 3ea230a8b..9b8b1d9e5 100644 --- a/packages/horizon/test/staking/allocation/collect.t.sol +++ b/packages/horizon/test/staking/allocation/collect.t.sol @@ -1,75 +1,20 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; -import { HorizonStakingExtensionTest } from "./HorizonStakingExtension.t.sol"; -import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; import { ExponentialRebates } from "../../../contracts/staking/libraries/ExponentialRebates.sol"; import { PPMMath } from "../../../contracts/libraries/PPMMath.sol"; -contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { +contract HorizonStakingCollectAllocationTest is HorizonStakingTest { using PPMMath for uint256; - uint32 private alphaNumerator = 100; - uint32 private alphaDenominator = 100; - uint32 private lambdaNumerator = 60; - uint32 private lambdaDenominator = 100; - - /* - * MODIFIERS - */ - - modifier useRebateParameters() { - _storeRebateParameters(); - _; - } - - /* - * HELPERS - */ - - function _storeRebateParameters() private { - // Store alpha numerator and denominator - uint256 alphaSlot = 13; - uint256 alphaNumeratorOffset = 20; - uint256 alphaDenominatorOffset = 24; - bytes32 alphaValues = bytes32( - (uint256(alphaNumerator) << (8 * alphaNumeratorOffset)) | - (uint256(alphaDenominator) << (8 * alphaDenominatorOffset)) - ); - vm.store(address(staking), bytes32(alphaSlot), alphaValues); - - // Store lambda numerator and denominator - uint256 lambdaSlot = 25; - uint256 lambdaNumeratorOffset = 20; - uint256 lambdaDenominatorOffset = 24; - bytes32 lambdaValues = bytes32( - (uint256(lambdaNumerator) << (8 * lambdaNumeratorOffset)) | - (uint256(lambdaDenominator) << (8 * lambdaDenominatorOffset)) - ); - vm.store(address(staking), bytes32(lambdaSlot), lambdaValues); - } - - function _storeProtocolTaxAndCuration(uint32 curationPercentage, uint32 taxPercentage) private { - bytes32 slot = bytes32(uint256(13)); - uint256 curationOffset = 4; - uint256 protocolTaxOffset = 8; - bytes32 originalValue = vm.load(address(staking), slot); - - bytes32 newProtocolTaxValue = bytes32( - (uint256(originalValue) & ~((0xFFFFFFFF << (8 * curationOffset)) | (0xFFFFFFFF << (8 * protocolTaxOffset))) | - (uint256(curationPercentage) << (8 * curationOffset))) | - (uint256(taxPercentage) << (8 * protocolTaxOffset)) - ); - vm.store(address(staking), slot, newProtocolTaxValue); - } - /* * TESTS */ - function testCollectAllocation_RevertWhen_InvalidAllocationId(uint256 tokens) public useAllocation { + function testCollectAllocation_RevertWhen_InvalidAllocationId(uint256 tokens) public useIndexer useAllocation(1 ether) { vm.expectRevert("!alloc"); staking.collect(tokens, address(0)); } @@ -79,13 +24,7 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { staking.collect(tokens, _allocationId); } - function testCollectAllocation_ZeroTokens() public useAllocation { - staking.collect(0, _allocationId); - assertEq(staking.getStake(address(users.indexer)), 0); - } - function testCollect_Tokenss( - uint256 provisionTokens, uint256 allocationTokens, uint256 collectTokens, uint256 curationTokens, @@ -93,75 +32,37 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { uint32 protocolTaxPercentage, uint256 delegationTokens, uint32 queryFeeCut - ) public useRebateParameters { - provisionTokens = bound(provisionTokens, 1, MAX_STAKING_TOKENS); - allocationTokens = bound(allocationTokens, 0, MAX_STAKING_TOKENS); + ) public useIndexer useRebateParameters useAllocation(allocationTokens) { collectTokens = bound(collectTokens, 0, MAX_STAKING_TOKENS); curationTokens = bound(curationTokens, 0, MAX_STAKING_TOKENS); delegationTokens = bound(delegationTokens, 0, MAX_STAKING_TOKENS); vm.assume(curationPercentage <= MAX_PPM); vm.assume(protocolTaxPercentage <= MAX_PPM); vm.assume(queryFeeCut <= MAX_PPM); + resetPrank(users.indexer); - _storeAllocation(allocationTokens); - _storeProtocolTaxAndCuration(curationPercentage, protocolTaxPercentage); - _storeDelegationPool(delegationTokens, 0, queryFeeCut); - _createProvision(subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); + _setStorage_ProtocolTaxAndCuration(curationPercentage, protocolTaxPercentage); + console.log("queryFeeCut", queryFeeCut); + _setStorage_DelegationPool(users.indexer, delegationTokens, 0, queryFeeCut); curation.signal(_subgraphDeploymentID, curationTokens); resetPrank(users.gateway); approve(address(staking), collectTokens); - staking.collect(collectTokens, _allocationId); - - uint256 protocolTaxTokens = collectTokens.mulPPMRoundUp(protocolTaxPercentage); - uint256 queryFees = collectTokens - protocolTaxTokens; - - uint256 curationCutTokens = 0; - if (curationTokens > 0) { - curationCutTokens = queryFees.mulPPMRoundUp(curationPercentage); - queryFees -= curationCutTokens; - } - - uint256 newRebates = ExponentialRebates.exponentialRebates( - queryFees, - allocationTokens, - alphaNumerator, - alphaDenominator, - lambdaNumerator, - lambdaDenominator - ); - uint256 payment = newRebates > queryFees ? queryFees : newRebates; - - uint256 delegationFeeCut = 0; - if (delegationTokens > 0) { - delegationFeeCut = payment - payment.mulPPM(queryFeeCut); - payment -= delegationFeeCut; - } - - assertEq(staking.getStake(address(users.indexer)), allocationTokens + provisionTokens + payment); - assertEq(curation.curation(_subgraphDeploymentID), curationTokens + curationCutTokens); - assertEq(staking.getDelegationPool(users.indexer, subgraphDataServiceLegacyAddress).tokens, delegationTokens + delegationFeeCut); - assertEq(token.balanceOf(address(payments)), 0); + _collect(collectTokens, _allocationId); } function testCollect_WithBeneficiaryAddress( - uint256 provisionTokens, uint256 allocationTokens, uint256 collectTokens - ) public useIndexer useRebateParameters { - provisionTokens = bound(provisionTokens, 1, MAX_STAKING_TOKENS); - allocationTokens = bound(allocationTokens, 0, MAX_STAKING_TOKENS); + ) public useIndexer useRebateParameters useAllocation(allocationTokens) { collectTokens = bound(collectTokens, 0, MAX_STAKING_TOKENS); - _createProvision(subgraphDataServiceLegacyAddress, provisionTokens, 0, 0); - _storeAllocation(allocationTokens); - address beneficiary = makeAddr("beneficiary"); - _storeRewardsDestination(beneficiary); + _setStorage_RewardsDestination(users.indexer, beneficiary); resetPrank(users.gateway); approve(address(staking), collectTokens); - staking.collect(collectTokens, _allocationId); + _collect(collectTokens, _allocationId); uint256 newRebates = ExponentialRebates.exponentialRebates( collectTokens, @@ -175,4 +76,4 @@ contract HorizonStakingCollectAllocationTest is HorizonStakingExtensionTest { assertEq(token.balanceOf(beneficiary), payment); } -} \ No newline at end of file +} diff --git a/packages/horizon/test/staking/delegation/addToPool.t.sol b/packages/horizon/test/staking/delegation/addToPool.t.sol index 4ef0c480a..e88becbbf 100644 --- a/packages/horizon/test/staking/delegation/addToPool.t.sol +++ b/packages/horizon/test/staking/delegation/addToPool.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -27,9 +27,7 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { resetPrank(subgraphDataServiceAddress); mint(subgraphDataServiceAddress, delegationAmount); token.approve(address(staking), delegationAmount); - vm.expectEmit(address(staking)); - emit IHorizonStakingMain.TokensToDelegationPoolAdded(users.indexer, subgraphDataServiceAddress, delegationAmount); - staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); + _addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(delegatedTokens, delegationAmount); @@ -46,7 +44,7 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { resetPrank(address(payments)); mint(address(payments), delegationAmount); token.approve(address(staking), delegationAmount); - staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); + _addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(delegatedTokens, delegationAmount); diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 87416daf5..d5e101bca 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -30,7 +30,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { vm.startPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); - Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); undelegateAmount = bound(undelegateAmount, 1 wei, delegation.shares - 1 ether); _undelegate(users.indexer, subgraphDataServiceAddress, undelegateAmount); @@ -46,7 +46,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { vm.startPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); - Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); @@ -78,10 +78,10 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { function testDelegate_LegacySubgraphService(uint256 amount, uint256 delegationAmount) public useIndexer { amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); - _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); - _delegateLegacy(users.indexer, delegationAmount); + _delegate(users.indexer, delegationAmount); } function testDelegate_RevertWhen_InvalidPool( @@ -112,7 +112,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); - Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); resetPrank(subgraphDataServiceAddress); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index d256d8502..cc2492ba8 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -17,7 +17,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 delegationAmount ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); - Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); } @@ -31,7 +31,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); - Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); // there is a min delegation amount of 1 ether after undelegating uint256 undelegateAmount = (delegation.shares - 1 ether) / undelegateSteps; @@ -73,7 +73,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 overDelegationShares ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); - Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); overDelegationShares = bound(overDelegationShares, delegation.shares + 1, MAX_STAKING_TOKENS + 1); bytes memory expectedError = abi.encodeWithSignature( @@ -104,13 +104,13 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { function testUndelegate_LegacySubgraphService(uint256 amount, uint256 delegationAmount) public useIndexer { amount = bound(amount, 1, MAX_STAKING_TOKENS); delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); - _createProvision(subgraphDataServiceLegacyAddress, amount, 0, 0); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); - _delegateLegacy(users.indexer, delegationAmount); + _delegate(users.indexer, delegationAmount); - Delegation memory delegation = _getDelegation(subgraphDataServiceLegacyAddress); - _undelegateLegacy(users.indexer, delegation.shares); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, true); + _undelegate(users.indexer, delegation.shares); } function testUndelegate_RevertWhen_InvalidPool( @@ -125,7 +125,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); resetPrank(users.delegator); - Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); vm.expectRevert(abi.encodeWithSelector( IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, users.indexer, diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 7eb6db57e..fc9072898 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -17,11 +17,11 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { modifier useUndelegate(uint256 shares) { vm.stopPrank(); vm.startPrank(users.delegator); - Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); shares = bound(shares, 1, delegation.shares); if (shares != delegation.shares) { - DelegationPool memory pool = _getDelegationPool(subgraphDataServiceAddress); + DelegationPoolInternalTest memory pool = _getStorage_DelegationPoolInternal(users.indexer, subgraphDataServiceAddress, false); uint256 tokens = (shares * (pool.tokens - pool.tokensThawing)) / pool.shares; uint256 newTokensThawing = pool.tokensThawing + tokens; uint256 remainingTokens = (delegation.shares * (pool.tokens - newTokensThawing)) / pool.shares; @@ -35,37 +35,13 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { /* * HELPERS */ - - function _withdrawDelegated(address _verifier, address _newIndexer) private { - LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, _verifier, users.delegator); - ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); - - uint256 previousBalance = token.balanceOf(users.delegator); - uint256 expectedTokens = _expectedTokensFromThawRequest(thawRequest, _verifier); - staking.withdrawDelegated(users.indexer, _verifier, _newIndexer, 0, 0); - - if (_newIndexer != address(0)) { - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(_newIndexer, _verifier); - assertEq(delegatedTokens, expectedTokens); - } else { - uint256 newBalance = token.balanceOf(users.delegator); - assertEq(newBalance - previousBalance, expectedTokens); - } - } - - function _expectedTokensFromThawRequest(ThawRequest memory thawRequest, address verifier) private view returns (uint256) { - DelegationPool memory pool = _getDelegationPool(verifier); - return (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing; - } - function _setupNewIndexer(uint256 tokens) private returns(address) { - address msgSender; - (, msgSender,) = vm.readCallers(); + (, address msgSender,) = vm.readCallers(); + address newIndexer = createUser("newIndexer"); vm.startPrank(newIndexer); - token.approve(address(staking), tokens); - staking.stakeTo(newIndexer, tokens); - staking.provision(newIndexer,subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); + _createProvision(newIndexer, subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); + vm.startPrank(msgSender); return newIndexer; } @@ -89,7 +65,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { skip(thawRequest.thawingUntil + 1); - _withdrawDelegated(subgraphDataServiceAddress, address(0)); + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); } function testWithdrawDelegation_RevertWhen_NotThawing( @@ -118,7 +94,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { // Setup new service provider address newIndexer = _setupNewIndexer(10_000_000 ether); - _withdrawDelegated(subgraphDataServiceAddress, newIndexer); + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0, 0); } function testWithdrawDelegation_ZeroTokens( @@ -131,7 +107,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useUndelegate(delegationAmount) { uint256 previousBalance = token.balanceOf(users.delegator); - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); // Nothing changed since thawing period haven't finished uint256 newBalance = token.balanceOf(users.delegator); @@ -151,7 +127,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { address newIndexer = _setupNewIndexer(10_000_000 ether); uint256 previousBalance = token.balanceOf(users.delegator); - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0, 0); + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0, 0); uint256 newBalance = token.balanceOf(users.delegator); assertEq(newBalance, previousBalance); @@ -162,19 +138,19 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { function testWithdrawDelegation_LegacySubgraphService(uint256 delegationAmount) public useIndexer { delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); - _createProvision(subgraphDataServiceLegacyAddress, 10_000_000 ether, 0, MAX_THAWING_PERIOD); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 10_000_000 ether, 0, MAX_THAWING_PERIOD); resetPrank(users.delegator); - _delegateLegacy(users.indexer, delegationAmount); - Delegation memory delegation = _getDelegation(subgraphDataServiceLegacyAddress); - _undelegateLegacy(users.indexer, delegation.shares); + _delegate(users.indexer, delegationAmount); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, true); + _undelegate(users.indexer, delegation.shares); LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceLegacyAddress, users.delegator); ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); skip(thawRequest.thawingUntil + 1); - _withdrawDelegated(subgraphDataServiceLegacyAddress, address(0)); + _withdrawDelegated(users.indexer, address(0)); } function testWithdrawDelegation_RevertWhen_InvalidPool( @@ -184,7 +160,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); - Delegation memory delegation = _getDelegation(subgraphDataServiceAddress); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); skip(MAX_THAWING_PERIOD + 1); diff --git a/packages/horizon/test/staking/governance/governance.t.sol b/packages/horizon/test/staking/governance/governance.t.sol index 932e053c4..401828a3e 100644 --- a/packages/horizon/test/staking/governance/governance.t.sol +++ b/packages/horizon/test/staking/governance/governance.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -21,8 +21,7 @@ contract HorizonStakingGovernanceTest is HorizonStakingTest { */ function testGovernance_SetAllowedLockedVerifier() public useGovernor { - staking.setAllowedLockedVerifier(subgraphDataServiceAddress, true); - assertTrue(staking.isAllowedLockedVerifier(subgraphDataServiceAddress)); + _setAllowedLockedVerifier(subgraphDataServiceAddress, true); } function testGovernance_RevertWhen_SetAllowedLockedVerifier_NotGovernor() public useIndexer { @@ -32,8 +31,7 @@ contract HorizonStakingGovernanceTest is HorizonStakingTest { } function testGovernance_SetDelgationSlashingEnabled() public useGovernor { - staking.setDelegationSlashingEnabled(); - assertTrue(staking.isDelegationSlashingEnabled()); + _setDelegationSlashingEnabled(); } function testGovernance_SetDelgationSlashing_NotGovernor() public useIndexer { @@ -43,11 +41,10 @@ contract HorizonStakingGovernanceTest is HorizonStakingTest { } function testGovernance_ClearThawingPeriod(uint32 thawingPeriod) public useGovernor { - vm.store(address(staking), bytes32(uint256(13)), bytes32(uint256(thawingPeriod))); - assertEq(staking.__DEPRECATED_getThawingPeriod(), thawingPeriod); + // simulate previous thawing period + _setStorage_DeprecatedThawingPeriod(thawingPeriod); - staking.clearThawingPeriod(); - assertEq(staking.__DEPRECATED_getThawingPeriod(), 0); + _clearThawingPeriod(); } function testGovernance_ClearThawingPeriod_NotGovernor() public useIndexer { @@ -57,8 +54,7 @@ contract HorizonStakingGovernanceTest is HorizonStakingTest { } function testGovernance__SetMaxThawingPeriod(uint64 maxThawingPeriod) public useGovernor { - staking.setMaxThawingPeriod(maxThawingPeriod); - assertEq(staking.getMaxThawingPeriod(), maxThawingPeriod); + _setMaxThawingPeriod(maxThawingPeriod); } function testGovernance__SetMaxThawingPeriod_NotGovernor() public useIndexer { @@ -68,10 +64,7 @@ contract HorizonStakingGovernanceTest is HorizonStakingTest { } function testGovernance_SetCounterpartStakingAddress(address counterpartStakingAddress) public useGovernor { - staking.setCounterpartStakingAddress(counterpartStakingAddress); - bytes32 storedValue = vm.load(address(staking), bytes32(uint256(24))); - address storedCounterpartStakingAddress = address(uint160(uint256(storedValue))); - assertEq(storedCounterpartStakingAddress, counterpartStakingAddress); + _setCounterpartStakingAddress(counterpartStakingAddress); } function testGovernance_RevertWhen_SetCounterpartStakingAddress_NotGovernor( diff --git a/packages/horizon/test/staking/operator/locked.t.sol b/packages/horizon/test/staking/operator/locked.t.sol index e6eb8038d..706b47a07 100644 --- a/packages/horizon/test/staking/operator/locked.t.sol +++ b/packages/horizon/test/staking/operator/locked.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -12,8 +12,7 @@ contract HorizonStakingOperatorLockedTest is HorizonStakingTest { */ function testOperatorLocked_Set() public useIndexer useLockedVerifier(subgraphDataServiceAddress) { - staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); - assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); + _setOperatorLocked(users.operator, subgraphDataServiceAddress, true); } function testOperatorLocked_RevertWhen_VerifierNotAllowed() public useIndexer { @@ -29,7 +28,6 @@ contract HorizonStakingOperatorLockedTest is HorizonStakingTest { } function testOperatorLocked_SetLegacySubgraphService() public useIndexer useLockedVerifier(subgraphDataServiceLegacyAddress) { - staking.setOperatorLocked(users.operator, subgraphDataServiceLegacyAddress, true); - assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceLegacyAddress)); + _setOperatorLocked(users.operator, subgraphDataServiceLegacyAddress, true); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/operator/operator.t.sol b/packages/horizon/test/staking/operator/operator.t.sol index af06e0ef5..5d509ba68 100644 --- a/packages/horizon/test/staking/operator/operator.t.sol +++ b/packages/horizon/test/staking/operator/operator.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -11,8 +11,8 @@ contract HorizonStakingOperatorTest is HorizonStakingTest { * TESTS */ - function testOperator_SetOperator() public useOperator { - assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); + function testOperator_SetOperator() public useIndexer { + _setOperator(users.operator, subgraphDataServiceAddress, true); } function testOperator_RevertWhen_CallerIsServiceProvider() public useIndexer { @@ -22,10 +22,7 @@ contract HorizonStakingOperatorTest is HorizonStakingTest { } function testOperator_RemoveOperator() public useIndexer { - staking.setOperator(users.operator, subgraphDataServiceAddress, true); - assertTrue(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); - - staking.setOperator(users.operator, subgraphDataServiceAddress, false); - assertFalse(staking.isAuthorized(users.operator, users.indexer, subgraphDataServiceAddress)); + _setOperator(users.operator, subgraphDataServiceAddress, true); + _setOperator(users.operator, subgraphDataServiceAddress, false); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol index fbb9d0fc4..6d03c3f6e 100644 --- a/packages/horizon/test/staking/provision/deprovision.t.sol +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -1,12 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingDeprovisionTest is HorizonStakingTest { - /* * TESTS */ @@ -14,52 +13,65 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { function testDeprovision_AllRequests( uint256 amount, uint32 maxVerifierCut, - uint64 thawingPeriod - ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { + uint64 thawingPeriod, + uint256 thawCount, + uint256 deprovisionCount + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + thawCount = bound(thawCount, 1, MAX_THAW_REQUESTS); + deprovisionCount = bound(deprovisionCount, 0, thawCount); + vm.assume(amount >= thawCount); // ensure the provision has at least 1 token for each thaw step + uint256 individualThawAmount = amount / thawCount; + + for (uint i = 0; i < thawCount; i++) { + _thaw(users.indexer, subgraphDataServiceAddress, individualThawAmount); + } + skip(thawingPeriod + 1); - // nThawRequests == 0 removes all thaw requests - _deprovision(0); - uint256 idleStake = staking.getIdleStake(users.indexer); - assertEq(idleStake, amount); + _deprovision(users.indexer, subgraphDataServiceAddress, deprovisionCount); } - function testDeprovision_FirstRequestOnly( + function testDeprovision_ThawedRequests( uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod, - uint256 thawAmount + uint256 thawCount ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - vm.assume(amount > 1); - thawAmount = bound(thawAmount, 2, amount); - uint256 thawAmount1 = thawAmount / 2; - _createThawRequest(thawAmount1); - _createThawRequest(thawAmount - thawAmount1); + thawCount = bound(thawCount, 2, MAX_THAW_REQUESTS); + vm.assume(amount >= thawCount); // ensure the provision has at least 1 token for each thaw step + uint256 individualThawAmount = amount / thawCount; + + for (uint i = 0; i < thawCount / 2; i++) { + _thaw(users.indexer, subgraphDataServiceAddress, individualThawAmount); + } skip(thawingPeriod + 1); - _deprovision(1); - uint256 idleStake = staking.getIdleStake(users.indexer); - assertEq(idleStake, thawAmount1); + for (uint i = 0; i < thawCount / 2; i++) { + _thaw(users.indexer, subgraphDataServiceAddress, individualThawAmount); + } + + _deprovision(users.indexer, subgraphDataServiceAddress, 0); } function testDeprovision_OperatorMovingTokens( uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod - ) public useOperator useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useOperator { + _thaw(users.indexer, subgraphDataServiceAddress, amount); skip(thawingPeriod + 1); - _deprovision(0); - uint256 idleStake = staking.getIdleStake(users.indexer); - assertEq(idleStake, amount); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); } function testDeprovision_RevertWhen_OperatorNotAuthorized( uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod - ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + _thaw(users.indexer, subgraphDataServiceAddress, amount); + vm.startPrank(users.operator); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingNotAuthorized(address,address,address)", @@ -68,8 +80,9 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { subgraphDataServiceAddress ); vm.expectRevert(expectedError); - _deprovision(0); + staking.deprovision(users.indexer, subgraphDataServiceAddress, 0); } + function testDeprovision_RevertWhen_NoThawingTokens( uint256 amount, uint32 maxVerifierCut, @@ -77,17 +90,18 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); - _deprovision(0); + staking.deprovision(users.indexer, subgraphDataServiceAddress, 0); } function testDeprovision_StillThawing( uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod - ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useThawRequest(amount) { + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { vm.assume(thawingPeriod > 0); - _deprovision(0); - uint256 idleStake = staking.getIdleStake(users.indexer); - assertEq(idleStake, 0); + + _thaw(users.indexer, subgraphDataServiceAddress, amount); + + _deprovision(users.indexer, subgraphDataServiceAddress, 0); } -} \ No newline at end of file +} diff --git a/packages/horizon/test/staking/provision/locked.t.sol b/packages/horizon/test/staking/provision/locked.t.sol index 642ba9a10..a8adfc774 100644 --- a/packages/horizon/test/staking/provision/locked.t.sol +++ b/packages/horizon/test/staking/provision/locked.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -17,10 +17,10 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(provisionTokens, 0); - staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + _setOperatorLocked(users.operator, subgraphDataServiceAddress, true); vm.startPrank(users.operator); - staking.provisionLocked( + _provisionLocked( users.indexer, subgraphDataServiceAddress, amount, @@ -39,11 +39,11 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { assertEq(provisionTokens, 0); // Set operator - staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + _setOperatorLocked(users.operator, subgraphDataServiceAddress, true); // Disable locked verifier vm.startPrank(users.governor); - staking.setAllowedLockedVerifier(subgraphDataServiceAddress, false); + _setAllowedLockedVerifier(subgraphDataServiceAddress, false); vm.startPrank(users.operator); bytes memory expectedError = abi.encodeWithSignature("HorizonStakingVerifierNotAllowed(address)", subgraphDataServiceAddress); diff --git a/packages/horizon/test/staking/provision/parameters.t.sol b/packages/horizon/test/staking/provision/parameters.t.sol index 298059a7a..8171f95b4 100644 --- a/packages/horizon/test/staking/provision/parameters.t.sol +++ b/packages/horizon/test/staking/provision/parameters.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -16,20 +16,7 @@ contract HorizonStakingProvisionParametersTest is HorizonStakingTest { uint32 maxVerifierCut, uint64 thawingPeriod ) public useIndexer useProvision(amount, 0, 0) { - vm.assume(maxVerifierCut != 0); - vm.assume(thawingPeriod != 0); - vm.expectEmit(); - emit IHorizonStakingMain.ProvisionParametersStaged( - users.indexer, - subgraphDataServiceAddress, - maxVerifierCut, - thawingPeriod - ); - staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); - - Provision memory prov = staking.getProvision(users.indexer, subgraphDataServiceAddress); - assertEq(prov.maxVerifierCutPending, maxVerifierCut); - assertEq(prov.thawingPeriodPending, thawingPeriod); + _setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); } function test_ProvisionParametersSet_RevertWhen_ProvisionNotExists( @@ -78,27 +65,10 @@ contract HorizonStakingProvisionParametersTest is HorizonStakingTest { uint32 maxVerifierCut, uint64 thawingPeriod ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - Provision memory prov = staking.getProvision(users.indexer, subgraphDataServiceAddress); - - staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); + _setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); vm.startPrank(subgraphDataServiceAddress); - - if (maxVerifierCut != prov.maxVerifierCut || thawingPeriod != prov.thawingPeriod) { - vm.expectEmit(); - emit IHorizonStakingMain.ProvisionParametersSet( - users.indexer, - subgraphDataServiceAddress, - maxVerifierCut, - thawingPeriod - ); - } - staking.acceptProvisionParameters(users.indexer); + _acceptProvisionParameters(users.indexer); vm.stopPrank(); - - assertEq(prov.maxVerifierCut, maxVerifierCut); - assertEq(prov.maxVerifierCutPending, maxVerifierCut); - assertEq(prov.thawingPeriod, thawingPeriod); - assertEq(prov.thawingPeriodPending, thawingPeriod); } } diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol index 3394460fb..50dc12057 100644 --- a/packages/horizon/test/staking/provision/provision.t.sol +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -10,13 +10,12 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { * TESTS */ - function testProvision_Create( - uint256 amount, - uint32 maxVerifierCut, - uint64 thawingPeriod - ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(provisionTokens, amount); + function testProvision_Create(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) public useIndexer { + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + maxVerifierCut = uint32(bound(maxVerifierCut, 0, MAX_MAX_VERIFIER_CUT)); + thawingPeriod = uint32(bound(thawingPeriod, 0, MAX_THAWING_PERIOD)); + + _createProvision(users.indexer, subgraphDataServiceAddress, tokens, maxVerifierCut, thawingPeriod); } function testProvision_RevertWhen_ZeroTokens() public useIndexer useStake(1000 ether) { @@ -75,7 +74,7 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { resetPrank(users.indexer); token.approve(address(staking), amount / 2); - staking.stake(amount / 2); + _stake(amount / 2); bytes memory expectedError = abi.encodeWithSignature("HorizonStakingProvisionAlreadyExists()"); vm.expectRevert(expectedError); @@ -87,18 +86,12 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { uint32 maxVerifierCut, uint64 thawingPeriod, uint256 tokensToAdd - ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - tokensToAdd = bound(tokensToAdd, 1, type(uint256).max - amount); - // Set operator - staking.setOperator(users.operator, subgraphDataServiceAddress, true); + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) useOperator { + tokensToAdd = bound(tokensToAdd, 1, MAX_STAKING_TOKENS); // Add more tokens to the provision - vm.startPrank(users.operator); _stakeTo(users.indexer, tokensToAdd); - staking.addToProvision(users.indexer, subgraphDataServiceAddress, tokensToAdd); - - uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(provisionTokens, amount + tokensToAdd); + _addToProvision(users.indexer, subgraphDataServiceAddress, tokensToAdd); } function testProvision_RevertWhen_OperatorNotAuthorized( diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 5d7ed8068..6fd170e4b 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -1,26 +1,17 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingReprovisionTest is HorizonStakingTest { - /* * VARIABLES */ address private newDataService = makeAddr("newDataService"); - /* - * HELPERS - */ - - function _reprovision(uint256 tokens, uint256 nThawRequests) private { - staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, tokens, nThawRequests); - } - /* * TESTS */ @@ -28,62 +19,62 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { function testReprovision_MovingTokens( uint64 thawingPeriod, uint256 provisionAmount - ) - public - useIndexer - useProvision(provisionAmount, 0, thawingPeriod) - useThawRequest(provisionAmount) - { + ) public useIndexer useProvision(provisionAmount, 0, thawingPeriod) { + _thaw(users.indexer, subgraphDataServiceAddress, provisionAmount); skip(thawingPeriod + 1); - _createProvision(newDataService, 1 ether, 0, thawingPeriod); + _createProvision(users.indexer, newDataService, 1 ether, 0, thawingPeriod); + + _reprovision(users.indexer, subgraphDataServiceAddress, newDataService, provisionAmount, 0); + } - // nThawRequests == 0 reprovisions all thaw requests - _reprovision(provisionAmount, 0); - uint256 idleStake = staking.getIdleStake(users.indexer); - assertEq(idleStake, 0 ether); + function testReprovision_TokensOverThawingTokens() public useIndexer { + uint64 thawingPeriod = 1 days; - uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, newDataService); - assertEq(provisionTokens, provisionAmount + 1 ether); + // create provision A, thaw 10 ether, skip time so they are fully thawed + _createProvision(users.indexer, subgraphDataServiceAddress, 100 ether, 0, thawingPeriod); + _thaw(users.indexer, subgraphDataServiceAddress, 10 ether); + skip(thawingPeriod + 1); + + // create provision B + _createProvision(users.indexer, newDataService, 1 ether, 0, thawingPeriod); + + // reprovision 100 ether from A to B + // this should revert because there are only 10 ether that thawed and the service provider + // doesn't have additional idle stake to cover the difference + vm.expectRevert(); + staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, 100 ether, 0); + + // now add some idle stake and try again, it should not revert + _stake(100 ether); + _reprovision(users.indexer, subgraphDataServiceAddress, newDataService, 100 ether, 0); } function testReprovision_OperatorMovingTokens( uint64 thawingPeriod, uint256 provisionAmount - ) - public - useOperator - useProvision(provisionAmount, 0, thawingPeriod) - useThawRequest(provisionAmount) - { + ) public useOperator useProvision(provisionAmount, 0, thawingPeriod) { + _thaw(users.indexer, subgraphDataServiceAddress, provisionAmount); skip(thawingPeriod + 1); // Switch to indexer to set operator for new data service vm.startPrank(users.indexer); - staking.setOperator(users.operator, newDataService, true); - + _setOperator(users.operator, newDataService, true); + // Switch back to operator vm.startPrank(users.operator); - _createProvision(newDataService, 1 ether, 0, thawingPeriod); - _reprovision(provisionAmount, 0); - uint256 idleStake = staking.getIdleStake(users.indexer); - assertEq(idleStake, 0 ether); - - uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, newDataService); - assertEq(provisionTokens, provisionAmount + 1 ether); + _createProvision(users.indexer, newDataService, 1 ether, 0, thawingPeriod); + _reprovision(users.indexer, subgraphDataServiceAddress, newDataService, provisionAmount, 0); } function testReprovision_RevertWhen_OperatorNotAuthorizedForNewDataService( uint256 provisionAmount - ) - public - useOperator - useProvision(provisionAmount, 0, 0) - useThawRequest(provisionAmount) - { + ) public useOperator useProvision(provisionAmount, 0, 0) { + _thaw(users.indexer, subgraphDataServiceAddress, provisionAmount); + // Switch to indexer to create new provision vm.startPrank(users.indexer); - _createProvision(newDataService, 1 ether, 0, 0); + _createProvision(users.indexer, newDataService, 1 ether, 0, 0); // Switch back to operator vm.startPrank(users.operator); @@ -94,29 +85,23 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { newDataService ); vm.expectRevert(expectedError); - _reprovision(provisionAmount, 0); + staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, provisionAmount, 0); } - function testReprovision_RevertWhen_NoThawingTokens( - uint256 amount - ) public useIndexer useProvision(amount, 0, 0) { + function testReprovision_RevertWhen_NoThawingTokens(uint256 amount) public useIndexer useProvision(amount, 0, 0) { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); - _reprovision(amount, 0); + staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, amount, 0); } function testReprovision_RevertWhen_StillThawing( uint64 thawingPeriod, uint256 provisionAmount - ) - public - useIndexer - useProvision(provisionAmount, 0, thawingPeriod) - useThawRequest(provisionAmount) - { + ) public useIndexer useProvision(provisionAmount, 0, thawingPeriod) { vm.assume(thawingPeriod > 0); + _thaw(users.indexer, subgraphDataServiceAddress, provisionAmount); - _createProvision(newDataService, 1 ether, 0, thawingPeriod); + _createProvision(users.indexer, newDataService, 1 ether, 0, thawingPeriod); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInsufficientIdleStake(uint256,uint256)", @@ -124,6 +109,6 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { 0 ); vm.expectRevert(expectedError); - _reprovision(provisionAmount, 0); + staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, provisionAmount, 0); } -} \ No newline at end of file +} diff --git a/packages/horizon/test/staking/thaw/thaw.t.sol b/packages/horizon/test/staking/provision/thaw.t.sol similarity index 58% rename from packages/horizon/test/staking/thaw/thaw.t.sol rename to packages/horizon/test/staking/provision/thaw.t.sol index 2ed99682f..bb0b3409d 100644 --- a/packages/horizon/test/staking/thaw/thaw.t.sol +++ b/packages/horizon/test/staking/provision/thaw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -7,7 +7,6 @@ import { IHorizonStakingTypes } from "../../../contracts/interfaces/internal/IHo import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingThawTest is HorizonStakingTest { - /* * TESTS */ @@ -18,48 +17,29 @@ contract HorizonStakingThawTest is HorizonStakingTest { uint256 thawAmount ) public useIndexer useProvision(amount, 0, thawingPeriod) { thawAmount = bound(thawAmount, 1, amount); - bytes32 expectedThawRequestId = keccak256( - abi.encodePacked(users.indexer, subgraphDataServiceAddress, users.indexer, uint256(0)) - ); - bytes32 thawRequestId = _createThawRequest(thawAmount); - assertEq(thawRequestId, expectedThawRequestId); - ThawRequest memory thawRequest = staking.getThawRequest(expectedThawRequestId); - assertEq(thawRequest.shares, thawAmount); - assertEq(thawRequest.thawingUntil, block.timestamp + thawingPeriod); + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); } function testThaw_MultipleRequests( uint256 amount, uint64 thawingPeriod, - uint256 thawAmount, - uint256 thawAmount2 + uint256 thawCount ) public useIndexer useProvision(amount, 0, thawingPeriod) { - vm.assume(amount > 1); - thawAmount = bound(thawAmount, 1, amount - 1); - thawAmount2 = bound(thawAmount2, 1, amount - thawAmount); - bytes32 thawRequestId = _createThawRequest(thawAmount); - bytes32 thawRequestId2 = _createThawRequest(thawAmount2); - - ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); - assertEq(thawRequest.shares, thawAmount); - assertEq(thawRequest.thawingUntil, block.timestamp + thawingPeriod); - assertEq(thawRequest.next, thawRequestId2); + thawCount = bound(thawCount, 1, MAX_THAW_REQUESTS); + vm.assume(amount >= thawCount); // ensure the provision has at least 1 token for each thaw step + uint256 individualThawAmount = amount / thawCount; - ThawRequest memory thawRequest2 = staking.getThawRequest(thawRequestId2); - assertEq(thawRequest2.shares, thawAmount2); - assertEq(thawRequest2.thawingUntil, block.timestamp + thawingPeriod); + for (uint i = 0; i < thawCount; i++) { + _thaw(users.indexer, subgraphDataServiceAddress, individualThawAmount); + } } function testThaw_OperatorCanStartThawing( uint256 amount, uint64 thawingPeriod - ) public useOperator useProvision(amount, 0, thawingPeriod) { - bytes32 thawRequestId = _createThawRequest(amount); - - ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); - assertEq(thawRequest.shares, amount); - assertEq(thawRequest.thawingUntil, block.timestamp + thawingPeriod); + ) public useIndexer useProvision(amount, 0, thawingPeriod) useOperator { + _thaw(users.indexer, subgraphDataServiceAddress, amount); } function testThaw_RevertWhen_OperatorNotAuthorized( @@ -74,7 +54,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { subgraphDataServiceAddress ); vm.expectRevert(expectedError); - _createThawRequest(amount); + staking.thaw(users.indexer, subgraphDataServiceAddress, amount); } function testThaw_RevertWhen_InsufficientTokensAvailable( @@ -89,7 +69,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { thawAmount ); vm.expectRevert(expectedError); - _createThawRequest(thawAmount); + staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); } function testThaw_RevertWhen_OverMaxThawRequests( @@ -100,13 +80,13 @@ contract HorizonStakingThawTest is HorizonStakingTest { vm.assume(amount >= MAX_THAW_REQUESTS + 1); thawAmount = bound(thawAmount, 1, amount / (MAX_THAW_REQUESTS + 1)); - for (uint256 i = 0; i < 100; i++) { - _createThawRequest(thawAmount); + for (uint256 i = 0; i < MAX_THAW_REQUESTS; i++) { + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); } bytes memory expectedError = abi.encodeWithSignature("HorizonStakingTooManyThawRequests()"); vm.expectRevert(expectedError); - _createThawRequest(thawAmount); + staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); } function testThaw_RevertWhen_ThawingZeroTokens( @@ -116,6 +96,6 @@ contract HorizonStakingThawTest is HorizonStakingTest { uint256 thawAmount = 0 ether; bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInvalidZeroTokens()"); vm.expectRevert(expectedError); - _createThawRequest(thawAmount); + staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); } } diff --git a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol index 2d32fa9e2..63578791a 100644 --- a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol +++ b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -25,7 +25,7 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { assertEq(sp.tokensStaked, amount); assertEq(sp.tokensProvisioned, amount); - staking.setOperator(users.operator, subgraphDataServiceAddress, true); + _setOperator(users.operator, subgraphDataServiceAddress, true); resetPrank(users.operator); _stakeTo(users.indexer, operatorAmount); sp = staking.getServiceProvider(users.indexer); @@ -40,7 +40,7 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { vm.assume(paymentTypeInput < 3); IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes(paymentTypeInput); feeCut = bound(feeCut, 0, MAX_PPM); - _setDelegationFeeCut(paymentType, feeCut); + _setDelegationFeeCut(users.indexer, subgraphDataServiceAddress, paymentType, feeCut); } function testServiceProvider_GetProvision( @@ -60,7 +60,7 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { assertEq(p.maxVerifierCutPending, maxVerifierCut); assertEq(p.thawingPeriodPending, thawingPeriod); - staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); p = staking.getProvision(users.indexer, subgraphDataServiceAddress); assertEq(p.tokensThawing, thawAmount); } @@ -75,7 +75,7 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { uint256 tokensAvailable = staking.getTokensAvailable(users.indexer, subgraphDataServiceAddress, 0); assertEq(tokensAvailable, amount); - staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); tokensAvailable = staking.getTokensAvailable(users.indexer, subgraphDataServiceAddress, 0); assertEq(tokensAvailable, amount - thawAmount); } @@ -106,9 +106,9 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) { assertTrue(staking.hasStake(users.indexer)); - _createThawRequest(amount); + _thaw(users.indexer, subgraphDataServiceAddress, amount); skip(MAX_THAWING_PERIOD + 1); - _deprovision(0); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); staking.unstake(amount); assertFalse(staking.hasStake(users.indexer)); @@ -119,12 +119,12 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) { assertEq(staking.getIndexerStakedTokens(users.indexer), amount); - _createThawRequest(amount); + _thaw(users.indexer, subgraphDataServiceAddress, amount); // Does not discount thawing tokens assertEq(staking.getIndexerStakedTokens(users.indexer), amount); skip(MAX_THAWING_PERIOD + 1); - _deprovision(0); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); // Does not discount thawing tokens assertEq(staking.getIndexerStakedTokens(users.indexer), amount); diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index b68794604..bf1f2fb1e 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -8,15 +8,6 @@ import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHor import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingSlashTest is HorizonStakingTest { - - /* - * MODIFIERS - */ - - /* - * HELPERS - */ - /* * TESTS */ diff --git a/packages/horizon/test/staking/stake/stake.t.sol b/packages/horizon/test/staking/stake/stake.t.sol index 9c1c69ad9..55474245c 100644 --- a/packages/horizon/test/staking/stake/stake.t.sol +++ b/packages/horizon/test/staking/stake/stake.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -11,8 +11,9 @@ contract HorizonStakingStakeTest is HorizonStakingTest { * TESTS */ - function testStake_Tokens(uint256 amount) public useIndexer useStake(amount) { - assertTrue(staking.getStake(address(users.indexer)) == amount); + function testStake_Tokens(uint256 amount) public useIndexer { + amount = bound(amount, 1, MAX_STAKING_TOKENS); + _stake(amount); } function testStake_RevertWhen_ZeroTokens() public useIndexer { @@ -21,8 +22,9 @@ contract HorizonStakingStakeTest is HorizonStakingTest { staking.stake(0); } - function testStakeTo_Tokens(uint256 amount) public useOperator useStakeTo(users.indexer, amount) { - assertTrue(staking.getStake(address(users.indexer)) == amount); + function testStakeTo_Tokens(uint256 amount) public useOperator { + amount = bound(amount, 1, MAX_STAKING_TOKENS); + _stakeTo(users.indexer, amount); } function testStakeTo_RevertWhen_ZeroTokens() public useOperator { diff --git a/packages/horizon/test/staking/stake/unstake.t.sol b/packages/horizon/test/staking/stake/unstake.t.sol index c5d44a3fb..13ea92e00 100644 --- a/packages/horizon/test/staking/stake/unstake.t.sol +++ b/packages/horizon/test/staking/stake/unstake.t.sol @@ -1,65 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; -import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; -import { MathUtils } from "../../../contracts/libraries/MathUtils.sol"; - import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingUnstakeTest is HorizonStakingTest { - - function _unstakeTokens(uint256 _tokens) private { - uint256 previousIndexerTokens = token.balanceOf(users.indexer); - uint256 previousIndexerIdleStake = staking.getIdleStake(users.indexer); - - vm.expectEmit(address(staking)); - emit IHorizonStakingMain.StakeWithdrawn(users.indexer, _tokens); - staking.unstake(_tokens); - - uint256 idleStake = staking.getIdleStake(users.indexer); - assertEq(idleStake, previousIndexerIdleStake - _tokens); - - uint256 newIndexerBalance = token.balanceOf(users.indexer); - assertEq(newIndexerBalance - previousIndexerTokens, _tokens); - } - - function _unstakeDuringLockingPeriod( - uint256 _tokens, - uint256 _tokensStillThawing, - uint256 _tokensToWithdraw, - uint32 _oldLockingPeriod - ) private { - uint256 previousIndexerTokens = token.balanceOf(users.indexer); - uint256 previousIndexerIdleStake = staking.getIdleStake(users.indexer); - - vm.expectEmit(address(staking)); - uint256 lockingPeriod = block.number + THAWING_PERIOD_IN_BLOCKS; - if (_tokensStillThawing > 0) { - lockingPeriod = block.number + MathUtils.weightedAverageRoundingUp( - MathUtils.diffOrZero(_oldLockingPeriod, block.number), - _tokensStillThawing, - THAWING_PERIOD_IN_BLOCKS, - _tokens - ); - } - emit IHorizonStakingMain.StakeLocked(users.indexer, _tokens + _tokensStillThawing, lockingPeriod); - staking.unstake(_tokens); - - uint256 idleStake = staking.getIdleStake(users.indexer); - assertEq(idleStake, previousIndexerIdleStake - _tokens); - - uint256 newIndexerBalance = token.balanceOf(users.indexer); - assertEq(newIndexerBalance - previousIndexerTokens, _tokensToWithdraw); - } - - function _storeDeprecatedThawingPeriod(uint32 _thawingPeriod) private { - uint256 slot = 13; - bytes32 value = bytes32(uint256(_thawingPeriod)); - vm.store(address(staking), bytes32(slot), value); - } - /* * TESTS */ @@ -69,44 +15,60 @@ contract HorizonStakingUnstakeTest is HorizonStakingTest { uint256 tokensToUnstake, uint32 maxVerifierCut, uint64 thawingPeriod - ) - public - useIndexer - useProvision(tokens, maxVerifierCut, thawingPeriod) - { + ) public useIndexer useProvision(tokens, maxVerifierCut, thawingPeriod) { tokensToUnstake = bound(tokensToUnstake, 1, tokens); - _createThawRequest(tokens); + + // thaw, wait and deprovision + _thaw(users.indexer, subgraphDataServiceAddress, tokens); skip(thawingPeriod + 1); - _deprovision(0); - _unstakeTokens(tokensToUnstake); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); + + _unstake(tokensToUnstake); + } + + function testUnstake_LockingPeriodGreaterThanZero_NoThawing( + uint256 tokens, + uint256 tokensToUnstake, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(tokens, maxVerifierCut, thawingPeriod) { + tokensToUnstake = bound(tokensToUnstake, 1, tokens); + + // simulate transition period + _setStorage_DeprecatedThawingPeriod(THAWING_PERIOD_IN_BLOCKS); + + // thaw, wait and deprovision + _thaw(users.indexer, subgraphDataServiceAddress, tokens); + skip(thawingPeriod + 1); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); + + // unstake + _unstake(tokensToUnstake); } function testUnstake_LockingPeriodGreaterThanZero_TokensDoneThawing( uint256 tokens, uint256 tokensToUnstake, uint256 tokensLocked - ) - public - useIndexer - { + ) public useIndexer { // bounds tokens = bound(tokens, 1, MAX_STAKING_TOKENS); tokensToUnstake = bound(tokensToUnstake, 1, tokens); tokensLocked = bound(tokensLocked, 1, MAX_STAKING_TOKENS); - // vm.store to simulate locked tokens with past locking period - _storeDeprecatedThawingPeriod(THAWING_PERIOD_IN_BLOCKS); + // simulate locked tokens with past locking period + _setStorage_DeprecatedThawingPeriod(THAWING_PERIOD_IN_BLOCKS); token.transfer(address(staking), tokensLocked); - _storeServiceProvider(users.indexer, tokensLocked, 0, tokensLocked, block.number, 0); + _setStorage_ServiceProvider(users.indexer, tokensLocked, 0, tokensLocked, block.number, 0); - // create provision, thaw request and deprovision - _createProvision(subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); - _createThawRequest(tokens); + // create provision, thaw and deprovision + _createProvision(users.indexer, subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); + _thaw(users.indexer, subgraphDataServiceAddress, tokens); skip(MAX_THAWING_PERIOD + 1); - _deprovision(0); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); // unstake - _unstakeDuringLockingPeriod(tokensToUnstake, 0, tokensLocked, 0); + _unstake(tokensToUnstake); } function testUnstake_LockingPeriodGreaterThanZero_TokensStillThawing( @@ -114,10 +76,7 @@ contract HorizonStakingUnstakeTest is HorizonStakingTest { uint256 tokensToUnstake, uint256 tokensThawing, uint32 tokensThawingUntilBlock - ) - public - useIndexer - { + ) public useIndexer { // bounds tokens = bound(tokens, 1, MAX_STAKING_TOKENS); tokensToUnstake = bound(tokensToUnstake, 1, tokens); @@ -125,19 +84,19 @@ contract HorizonStakingUnstakeTest is HorizonStakingTest { vm.assume(tokensThawingUntilBlock > block.number); vm.assume(tokensThawingUntilBlock < block.number + THAWING_PERIOD_IN_BLOCKS); - // vm.store to simulate locked tokens still thawing - _storeDeprecatedThawingPeriod(THAWING_PERIOD_IN_BLOCKS); + // simulate locked tokens still thawing + _setStorage_DeprecatedThawingPeriod(THAWING_PERIOD_IN_BLOCKS); token.transfer(address(staking), tokensThawing); - _storeServiceProvider(users.indexer, tokensThawing, 0, tokensThawing, tokensThawingUntilBlock, 0); + _setStorage_ServiceProvider(users.indexer, tokensThawing, 0, tokensThawing, tokensThawingUntilBlock, 0); - // create provision, thaw request and deprovision - _createProvision(subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); - _createThawRequest(tokens); + // create provision, thaw and deprovision + _createProvision(users.indexer, subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); + _thaw(users.indexer, subgraphDataServiceAddress, tokens); skip(MAX_THAWING_PERIOD + 1); - _deprovision(0); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); // unstake - _unstakeDuringLockingPeriod(tokensToUnstake, tokensThawing, 0, tokensThawingUntilBlock); + _unstake(tokensToUnstake); } function testUnstake_RevertWhen_ZeroTokens( @@ -159,11 +118,7 @@ contract HorizonStakingUnstakeTest is HorizonStakingTest { uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod - ) - public - useIndexer - useProvision(amount, maxVerifierCut, thawingPeriod) - { + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingInsufficientIdleStake(uint256,uint256)", amount, @@ -177,12 +132,8 @@ contract HorizonStakingUnstakeTest is HorizonStakingTest { uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod - ) - public - useIndexer - useProvision(amount, maxVerifierCut, thawingPeriod) - useThawRequest(amount) - { + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + _thaw(users.indexer, subgraphDataServiceAddress, amount); skip(thawingPeriod + 1); bytes memory expectedError = abi.encodeWithSignature( @@ -193,4 +144,4 @@ contract HorizonStakingUnstakeTest is HorizonStakingTest { vm.expectRevert(expectedError); staking.unstake(amount); } -} \ No newline at end of file +} diff --git a/packages/horizon/test/staking/stake/withdraw.t.sol b/packages/horizon/test/staking/stake/withdraw.t.sol index 73a96b542..b28dea022 100644 --- a/packages/horizon/test/staking/stake/withdraw.t.sol +++ b/packages/horizon/test/staking/stake/withdraw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -8,52 +8,48 @@ import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHor import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingWithdrawTest is HorizonStakingTest { - - /* - * HELPERS - */ - - function _withdrawLockedTokens(uint256 tokens) private { - uint256 previousIndexerTokens = token.balanceOf(users.indexer); - vm.expectEmit(address(staking)); - emit IHorizonStakingMain.StakeWithdrawn(users.indexer, tokens); - staking.withdraw(); - uint256 newIndexerBalance = token.balanceOf(users.indexer); - assertEq(newIndexerBalance - previousIndexerTokens, tokens); - } - /* * TESTS */ function testWithdraw_Tokens(uint256 tokens, uint256 tokensLocked) public useIndexer { - vm.assume(tokens > 0); + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); tokensLocked = bound(tokensLocked, 1, tokens); - _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, MAX_THAWING_PERIOD); - _storeServiceProvider(users.indexer, tokens, 0, tokensLocked, block.timestamp, 0); - _withdrawLockedTokens(tokensLocked); + + // simulate locked tokens ready to withdraw + token.transfer(address(staking), tokens); + _setStorage_ServiceProvider(users.indexer, tokens, 0, tokensLocked, block.number, 0); + + _createProvision(users.indexer, subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); + + _withdraw(); } function testWithdraw_RevertWhen_ZeroTokens(uint256 tokens) public useIndexer { - vm.assume(tokens > 0); - _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, MAX_THAWING_PERIOD); - _storeServiceProvider(users.indexer, tokens, 0, 0, block.timestamp, 0); - vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidZeroTokens.selector - )); + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + + // simulate zero locked tokens + token.transfer(address(staking), tokens); + _setStorage_ServiceProvider(users.indexer, tokens, 0, 0, 0, 0); + + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, MAX_THAWING_PERIOD); + + vm.expectRevert(abi.encodeWithSelector(IHorizonStakingMain.HorizonStakingInvalidZeroTokens.selector)); staking.withdraw(); } function testWithdraw_RevertWhen_StillThawing(uint256 tokens, uint256 tokensLocked) public useIndexer { - vm.assume(tokens > 0); + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); tokensLocked = bound(tokensLocked, 1, tokens); - _createProvision(subgraphDataServiceLegacyAddress, tokens, 0, MAX_THAWING_PERIOD); + + // simulate locked tokens still thawing uint256 thawUntil = block.timestamp + 1; - _storeServiceProvider(users.indexer, tokens, 0, tokensLocked, thawUntil, 0); - vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingStillThawing.selector, - thawUntil - )); + token.transfer(address(staking), tokens); + _setStorage_ServiceProvider(users.indexer, tokens, 0, tokensLocked, thawUntil, 0); + + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, MAX_THAWING_PERIOD); + + vm.expectRevert(abi.encodeWithSelector(IHorizonStakingMain.HorizonStakingStillThawing.selector, thawUntil)); staking.withdraw(); } -} \ No newline at end of file +} diff --git a/packages/horizon/test/staking/transfer-tools/ttools.t.sol b/packages/horizon/test/staking/transfer-tools/ttools.t.sol index c41731e10..11bb6e62d 100644 --- a/packages/horizon/test/staking/transfer-tools/ttools.t.sol +++ b/packages/horizon/test/staking/transfer-tools/ttools.t.sol @@ -1,16 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; -import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; -import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; contract HorizonStakingTransferToolsTest is HorizonStakingTest { - event Transfer(address indexed from, address indexed to, uint tokens); - /* * TESTS */ @@ -69,10 +65,10 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 resetPrank(users.indexer); - _createProvision(subgraphDataServiceLegacyAddress, 100 ether, 0, 0); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 100 ether, 0, 0); resetPrank(users.delegator); - _delegateLegacy(users.indexer, 1 ether); + _delegate(users.indexer, 1 ether); // send amount to staking contract - this should be done by the bridge resetPrank(users.delegator); @@ -92,10 +88,10 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 resetPrank(users.indexer); - _createProvision(subgraphDataServiceLegacyAddress, 100 ether, 0, 1 days); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 100 ether, 0, 1 days); resetPrank(users.delegator); - _delegateLegacy(users.indexer, originalDelegationAmount); + _delegate(users.indexer, originalDelegationAmount); // send amount to staking contract - this should be done by the bridge resetPrank(users.delegator); @@ -103,7 +99,7 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { // thaw some delegation before receiving new delegation from L1 resetPrank(users.delegator); - _undelegateLegacy(users.indexer, originalDelegationAmount / 10); + _undelegate(users.indexer, originalDelegationAmount / 10); resetPrank(graphTokenGatewayAddress); bytes memory data = abi.encode( @@ -120,11 +116,11 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 resetPrank(users.indexer); - _createProvision(subgraphDataServiceLegacyAddress, provisionSize, 0, 1 days); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, provisionSize, 0, 1 days); // initialize the delegation pool resetPrank(users.delegator); - _delegateLegacy(users.indexer, originalDelegationAmount); + _delegate(users.indexer, originalDelegationAmount); // slash the entire provision resetPrank(subgraphDataServiceLegacyAddress); @@ -147,10 +143,10 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 resetPrank(users.indexer); - _createProvision(subgraphDataServiceLegacyAddress, 100 ether, 0, 1 days); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 100 ether, 0, 1 days); resetPrank(users.delegator); - _delegateLegacy(users.indexer, amountDelegated); + _delegate(users.indexer, amountDelegated); // send amount to staking contract - this should be done by the bridge resetPrank(users.delegator); @@ -158,7 +154,7 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { // thaw all delegation before receiving new delegation from L1 resetPrank(users.delegator); - _undelegateLegacy(users.indexer, amountDelegated); + _undelegate(users.indexer, amountDelegated); resetPrank(graphTokenGatewayAddress); bytes memory data = abi.encode( @@ -166,89 +162,5 @@ contract HorizonStakingTransferToolsTest is HorizonStakingTest { abi.encode(users.indexer, users.delegator) ); _onTokenTransfer_ReceiveDelegation(counterpartStaking, amountReceived, data); - } - - /** - * HELPERS - */ - - function _onTokenTransfer_ReceiveDelegation(address from, uint256 tokens, bytes memory data) internal { - (, bytes memory fnData) = abi.decode(data, (uint8, bytes)); - (address serviceProvider, address delegator) = abi.decode(fnData, (address, address)); - bytes32 slotPoolTokens = bytes32(uint256(keccak256(abi.encode(serviceProvider, 20))) + 2); - - // before - DelegationPool memory beforePool = staking.getDelegationPool(serviceProvider, subgraphDataServiceLegacyAddress); - Delegation memory beforeDelegation = staking.getDelegation( - serviceProvider, - subgraphDataServiceLegacyAddress, - delegator - ); - uint256 beforeStoragePoolTokens = uint256(vm.load(address(staking), slotPoolTokens)); - uint256 beforeDelegatedTokens = staking.getDelegatedTokensAvailable( - serviceProvider, - subgraphDataServiceLegacyAddress - ); - uint256 beforeDelegatorBalance = token.balanceOf(delegator); - uint256 beforeStakingBalance = token.balanceOf(address(staking)); - uint256 calcShares = (beforePool.tokens == 0 || beforePool.tokens == beforePool.tokensThawing) - ? tokens - : ((tokens * beforePool.shares) / (beforePool.tokens - beforePool.tokensThawing)); - - bool earlyExit = (calcShares == 0 || tokens < 1 ether) || - (beforePool.tokens == 0 && (beforePool.shares != 0 || beforePool.sharesThawing != 0)); - - // onTokenTransfer - if (earlyExit) { - vm.expectEmit(); - emit Transfer(address(staking), delegator, tokens); - vm.expectEmit(); - emit IL2StakingBase.TransferredDelegationReturnedToDelegator(serviceProvider, delegator, tokens); - } else { - vm.expectEmit(); - emit IHorizonStakingExtension.StakeDelegated(serviceProvider, delegator, tokens, calcShares); - } - staking.onTokenTransfer(from, tokens, data); - - // after - DelegationPool memory afterPool = staking.getDelegationPool(serviceProvider, subgraphDataServiceLegacyAddress); - Delegation memory afterDelegation = staking.getDelegation( - serviceProvider, - subgraphDataServiceLegacyAddress, - delegator - ); - uint256 afterStoragePoolTokens = uint256(vm.load(address(staking), slotPoolTokens)); - uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable( - serviceProvider, - subgraphDataServiceLegacyAddress - ); - uint256 afterDelegatorBalance = token.balanceOf(delegator); - uint256 afterStakingBalance = token.balanceOf(address(staking)); - - uint256 deltaShares = afterDelegation.shares - beforeDelegation.shares; - - // assertions - if (earlyExit) { - assertEq(beforePool.tokens, afterPool.tokens); - assertEq(beforePool.shares, afterPool.shares); - assertEq(beforePool.tokensThawing, afterPool.tokensThawing); - assertEq(beforePool.sharesThawing, afterPool.sharesThawing); - assertEq(0, deltaShares); - assertEq(beforeDelegatedTokens, afterDelegatedTokens); - assertEq(beforeStoragePoolTokens, afterStoragePoolTokens); - assertEq(beforeDelegatorBalance + tokens, afterDelegatorBalance); - assertEq(beforeStakingBalance - tokens, afterStakingBalance); - } else { - assertEq(beforePool.tokens + tokens, afterPool.tokens); - assertEq(beforePool.shares + calcShares, afterPool.shares); - assertEq(beforePool.tokensThawing, afterPool.tokensThawing); - assertEq(beforePool.sharesThawing, afterPool.sharesThawing); - assertEq(calcShares, deltaShares); - assertEq(beforeDelegatedTokens + tokens, afterDelegatedTokens); - // Ensure correct slot is being updated, pools are stored in different storage locations for legacy subgraph data service - assertEq(beforeStoragePoolTokens + tokens, afterStoragePoolTokens); - assertEq(beforeDelegatorBalance, afterDelegatorBalance); - assertEq(beforeStakingBalance, afterStakingBalance); - } - } + } } diff --git a/packages/horizon/test/utilities/GraphDirectory.t.sol b/packages/horizon/test/utilities/GraphDirectory.t.sol index 35ab2a291..ece4afe65 100644 --- a/packages/horizon/test/utilities/GraphDirectory.t.sol +++ b/packages/horizon/test/utilities/GraphDirectory.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; import { stdStorage, StdStorage } from "forge-std/Test.sol"; diff --git a/packages/horizon/test/utilities/GraphDirectoryImplementation.sol b/packages/horizon/test/utilities/GraphDirectoryImplementation.sol index 57780f450..1095adc3a 100644 --- a/packages/horizon/test/utilities/GraphDirectoryImplementation.sol +++ b/packages/horizon/test/utilities/GraphDirectoryImplementation.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStaking } from "../../contracts/interfaces/IHorizonStaking.sol"; diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index 29daaaa96..f08fa4ec1 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; abstract contract Constants { uint256 internal constant MAX_PPM = 1000000; // 100% in parts per million diff --git a/packages/horizon/test/utils/Users.sol b/packages/horizon/test/utils/Users.sol index 3329d69da..b26329f91 100644 --- a/packages/horizon/test/utils/Users.sol +++ b/packages/horizon/test/utils/Users.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; struct Users { address governor; diff --git a/packages/horizon/test/utils/Utils.sol b/packages/horizon/test/utils/Utils.sol index 47e4e68df..5aae4de3f 100644 --- a/packages/horizon/test/utils/Utils.sol +++ b/packages/horizon/test/utils/Utils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index a9afcff28..f48c20463 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; diff --git a/packages/subgraph-service/contracts/DisputeManagerStorage.sol b/packages/subgraph-service/contracts/DisputeManagerStorage.sol index 8ff0685bf..a8790230d 100644 --- a/packages/subgraph-service/contracts/DisputeManagerStorage.sol +++ b/packages/subgraph-service/contracts/DisputeManagerStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDisputeManager } from "./interfaces/IDisputeManager.sol"; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 51cb889f7..5023e6160 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; diff --git a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol index 54de429f1..e953dfba0 100644 --- a/packages/subgraph-service/contracts/SubgraphServiceStorage.sol +++ b/packages/subgraph-service/contracts/SubgraphServiceStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 73f7e56d6..95511ecc2 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { Attestation } from "../libraries/Attestation.sol"; diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index e993c5159..e12554303 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDataServiceFees } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol"; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index e039b75bd..a55034f17 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/packages/subgraph-service/contracts/libraries/Attestation.sol b/packages/subgraph-service/contracts/libraries/Attestation.sol index 0211db674..66a3cb5fb 100644 --- a/packages/subgraph-service/contracts/libraries/Attestation.sol +++ b/packages/subgraph-service/contracts/libraries/Attestation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title Attestation library diff --git a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol index 81e6bcdcb..83bef8037 100644 --- a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol +++ b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; /** * @title LegacyAllocation library diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 1a9c86928..2e40f28d3 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol index da812f5c1..f11e18d1b 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { Allocation } from "../libraries/Allocation.sol"; import { LegacyAllocation } from "../libraries/LegacyAllocation.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AttestationManager.sol b/packages/subgraph-service/contracts/utilities/AttestationManager.sol index 0d8405917..97c55ab8b 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { AttestationManagerV1Storage } from "./AttestationManagerStorage.sol"; diff --git a/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol index 5bf57af65..5f86a19f3 100644 --- a/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol +++ b/packages/subgraph-service/contracts/utilities/AttestationManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; abstract contract AttestationManagerV1Storage { /// @dev EIP712 domain separator diff --git a/packages/subgraph-service/contracts/utilities/Directory.sol b/packages/subgraph-service/contracts/utilities/Directory.sol index 920a0ae5e..53de7c6e7 100644 --- a/packages/subgraph-service/contracts/utilities/Directory.sol +++ b/packages/subgraph-service/contracts/utilities/Directory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; import { IDisputeManager } from "../interfaces/IDisputeManager.sol"; import { ISubgraphService } from "../interfaces/ISubgraphService.sol"; diff --git a/packages/subgraph-service/foundry.toml b/packages/subgraph-service/foundry.toml index 235a58eb9..9f5c3a92a 100644 --- a/packages/subgraph-service/foundry.toml +++ b/packages/subgraph-service/foundry.toml @@ -4,14 +4,6 @@ out = 'build' libs = ['node_modules', 'lib'] test = 'test' cache_path = 'cache_forge' +fs_permissions = [{ access = "read", path = "./"}] optimizer = true optimizer-runs = 200 -via_ir = true -fs_permissions = [{ access = "read", path = "./"}] - -[profile.lite] -optimizer = false -optimizer-runs = 1 - -[profile.lite.optimizer_details.yulDetails] -optimizerSteps = ':' \ No newline at end of file diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts index a8e05c779..17ebc2053 100644 --- a/packages/subgraph-service/hardhat.config.ts +++ b/packages/subgraph-service/hardhat.config.ts @@ -8,7 +8,7 @@ import { HardhatUserConfig } from 'hardhat/config' const config: HardhatUserConfig = { solidity: { - version: '0.8.26', + version: '0.8.27', settings: { viaIR: true, optimizer: { diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index da7b33a3d..bb5dd9ea9 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -10,7 +10,7 @@ "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", "build": "forge build && hardhat compile", - "test": "FOUNDRY_PROFILE=lite forge test -vvvv && hardhat test" + "test": "forge test && hardhat test" }, "devDependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index 2fe5ccf64..d42b66e29 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol index 1077c1435..0d99aec0b 100644 --- a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol +++ b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -166,54 +166,67 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { return _disputeID; } + struct BeforeValues_CreateQueryDisputeConflict { + Attestation.State attestation1; + Attestation.State attestation2; + address indexer1; + address indexer2; + uint256 stakeSnapshot1; + uint256 stakeSnapshot2; + } function _createQueryDisputeConflict( bytes memory attestationData1, bytes memory attestationData2 ) internal returns (bytes32, bytes32) { (, address fisherman,) = vm.readCallers(); - Attestation.State memory attestation1 = Attestation.parse(attestationData1); - Attestation.State memory attestation2 = Attestation.parse(attestationData2); - address indexer1 = disputeManager.getAttestationIndexer(attestation1); - address indexer2 = disputeManager.getAttestationIndexer(attestation2); + + BeforeValues_CreateQueryDisputeConflict memory beforeValues; + beforeValues.attestation1 = Attestation.parse(attestationData1); + beforeValues.attestation2 = Attestation.parse(attestationData2); + beforeValues.indexer1 = disputeManager.getAttestationIndexer(beforeValues.attestation1); + beforeValues.indexer2 = disputeManager.getAttestationIndexer(beforeValues.attestation2); + beforeValues.stakeSnapshot1 = disputeManager.getStakeSnapshot(beforeValues.indexer1); + beforeValues.stakeSnapshot2 = disputeManager.getStakeSnapshot(beforeValues.indexer2); + bytes32 expectedDisputeId1 = keccak256( abi.encodePacked( - attestation1.requestCID, - attestation1.responseCID, - attestation1.subgraphDeploymentId, - indexer1, + beforeValues.attestation1.requestCID, + beforeValues.attestation1.responseCID, + beforeValues.attestation1.subgraphDeploymentId, + beforeValues.indexer1, fisherman ) ); bytes32 expectedDisputeId2 = keccak256( abi.encodePacked( - attestation2.requestCID, - attestation2.responseCID, - attestation2.subgraphDeploymentId, - indexer2, + beforeValues.attestation2.requestCID, + beforeValues.attestation2.responseCID, + beforeValues.attestation2.subgraphDeploymentId, + beforeValues.indexer2, fisherman ) ); - uint256 stakeSnapshot1 = disputeManager.getStakeSnapshot(indexer1); - uint256 stakeSnapshot2 = disputeManager.getStakeSnapshot(indexer2); + // createQueryDisputeConflict vm.expectEmit(address(disputeManager)); emit IDisputeManager.QueryDisputeCreated( expectedDisputeId1, - indexer1, + beforeValues.indexer1, fisherman, 0, - attestation1.subgraphDeploymentId, + beforeValues.attestation1.subgraphDeploymentId, attestationData1, - stakeSnapshot1 + beforeValues.stakeSnapshot1 ); + vm.expectEmit(address(disputeManager)); emit IDisputeManager.QueryDisputeCreated( expectedDisputeId2, - indexer2, + beforeValues.indexer2, fisherman, 0, - attestation2.subgraphDeploymentId, + beforeValues.attestation2.subgraphDeploymentId, attestationData2, - stakeSnapshot2 + beforeValues.stakeSnapshot2 ); (bytes32 _disputeId1, bytes32 _disputeId2) = disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); @@ -226,24 +239,24 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { // Check dispute values IDisputeManager.Dispute memory dispute1 = _getDispute(_disputeId1); - assertEq(dispute1.indexer, indexer1, "Indexer 1 should match"); + assertEq(dispute1.indexer, beforeValues.indexer1, "Indexer 1 should match"); assertEq(dispute1.fisherman, fisherman, "Fisherman 1 should match"); assertEq(dispute1.deposit, 0, "Deposit 1 should match"); assertEq(dispute1.relatedDisputeId, _disputeId2, "Related dispute ID 1 should be the id of the other dispute"); assertEq(uint8(dispute1.disputeType), uint8(IDisputeManager.DisputeType.QueryDispute), "Dispute type 1 should be query"); assertEq(uint8(dispute1.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status 1 should be pending"); assertEq(dispute1.createdAt, block.timestamp, "Created at 1 should match"); - assertEq(dispute1.stakeSnapshot, stakeSnapshot1, "Stake snapshot 1 should match"); + assertEq(dispute1.stakeSnapshot, beforeValues.stakeSnapshot1, "Stake snapshot 1 should match"); IDisputeManager.Dispute memory dispute2 = _getDispute(_disputeId2); - assertEq(dispute2.indexer, indexer2, "Indexer 2 should match"); + assertEq(dispute2.indexer, beforeValues.indexer2, "Indexer 2 should match"); assertEq(dispute2.fisherman, fisherman, "Fisherman 2 should match"); assertEq(dispute2.deposit, 0, "Deposit 2 should match"); assertEq(dispute2.relatedDisputeId, _disputeId1, "Related dispute ID 2 should be the id of the other dispute"); assertEq(uint8(dispute2.disputeType), uint8(IDisputeManager.DisputeType.QueryDispute), "Dispute type 2 should be query"); assertEq(uint8(dispute2.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status 2 should be pending"); assertEq(dispute2.createdAt, block.timestamp, "Created at 2 should match"); - assertEq(dispute2.stakeSnapshot, stakeSnapshot2, "Stake snapshot 2 should match"); + assertEq(dispute2.stakeSnapshot, beforeValues.stakeSnapshot2, "Stake snapshot 2 should match"); return (_disputeId1, _disputeId2); } diff --git a/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol b/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol index 76f90481a..c9166719f 100644 --- a/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol +++ b/packages/subgraph-service/test/disputeManager/constructor/constructor.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol b/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol index cd229dbc4..b6b4a6890 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol index 5e0d36132..49bee9e26 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/cancel.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/cancel.t.sol index 0a09ad7f4..1639f2cad 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/indexing/cancel.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/cancel.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol index 0174315a2..8d1b75c21 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/draw.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/draw.t.sol index 3df590f74..7ce70d962 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/indexing/draw.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/draw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/reject.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/reject.t.sol index 5401c0afe..41b5adabc 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/indexing/reject.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/reject.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol index d0f00234d..7670d381e 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/cancel.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/cancel.t.sol index a61db6ad9..5a70e2f70 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/query/cancel.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/query/cancel.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol index 01f27cf66..4eba11744 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/draw.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/draw.t.sol index 1b9c96ad2..2ff182378 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/query/draw.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/query/draw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/reject.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/reject.t.sol index 07c738a90..fff210ea6 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/query/reject.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/query/reject.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol index 1cfde0a8c..46a6d4bdd 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/cancel.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/cancel.t.sol index 4de2b3155..36d14fab2 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/cancel.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/cancel.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/create.t.sol index 2f54983ae..edd2d545b 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/create.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/create.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/draw.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/draw.t.sol index 5127b56a5..5444936cc 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/draw.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/draw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol index 078969267..ff347f7d2 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/governance/arbitrator.t.sol b/packages/subgraph-service/test/disputeManager/governance/arbitrator.t.sol index 53e36a497..1277235fd 100644 --- a/packages/subgraph-service/test/disputeManager/governance/arbitrator.t.sol +++ b/packages/subgraph-service/test/disputeManager/governance/arbitrator.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol b/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol index 163157886..1df13acb2 100644 --- a/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol +++ b/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol b/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol index 5a09bdd03..3eddddc37 100644 --- a/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol +++ b/packages/subgraph-service/test/disputeManager/governance/fishermanRewardCut.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/disputeManager/governance/maxSlashingCut.t.sol b/packages/subgraph-service/test/disputeManager/governance/maxSlashingCut.t.sol index 343e514bc..a554f774c 100644 --- a/packages/subgraph-service/test/disputeManager/governance/maxSlashingCut.t.sol +++ b/packages/subgraph-service/test/disputeManager/governance/maxSlashingCut.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/mocks/MockCuration.sol b/packages/subgraph-service/test/mocks/MockCuration.sol index 68b4a8ce9..e0158a99e 100644 --- a/packages/subgraph-service/test/mocks/MockCuration.sol +++ b/packages/subgraph-service/test/mocks/MockCuration.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity 0.8.26; +pragma solidity 0.8.27; contract MockCuration { function isCurated(bytes32) public pure returns (bool) { diff --git a/packages/subgraph-service/test/mocks/MockGRTToken.sol b/packages/subgraph-service/test/mocks/MockGRTToken.sol index d581f8299..7d21fd00a 100644 --- a/packages/subgraph-service/test/mocks/MockGRTToken.sol +++ b/packages/subgraph-service/test/mocks/MockGRTToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; diff --git a/packages/subgraph-service/test/mocks/MockRewardsManager.sol b/packages/subgraph-service/test/mocks/MockRewardsManager.sol index 59ca5577e..363fbf902 100644 --- a/packages/subgraph-service/test/mocks/MockRewardsManager.sol +++ b/packages/subgraph-service/test/mocks/MockRewardsManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol b/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol index 28a22e1a2..e07516903 100644 --- a/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol +++ b/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol index 1067acf14..089fdd9a9 100644 --- a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 12d20581f..05c038680 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; @@ -30,7 +30,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { * MODIFIERS */ - modifier useOperator { + modifier useOperator() { resetPrank(users.indexer); staking.setOperator(users.operator, address(subgraphService), true); resetPrank(users.operator); @@ -38,7 +38,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { vm.stopPrank(); } - modifier useRewardsDestination { + modifier useRewardsDestination() { _setRewardsDestination(users.rewardsDestination); _; } @@ -74,10 +74,10 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { uint64 thawingPeriod = provision.thawingPeriod; uint32 maxVerifierCutPending = provision.maxVerifierCutPending; uint64 thawingPeriodPending = provision.thawingPeriodPending; - + vm.expectEmit(address(subgraphService)); emit IDataService.ProvisionAccepted(_indexer); - + // Accept provision subgraphService.acceptProvision(_indexer, _data); @@ -110,7 +110,13 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { } vm.expectEmit(address(subgraphService)); - emit AllocationManager.AllocationResized(_indexer, _allocationId, subgraphDeploymentId, _tokens, beforeSubgraphAllocatedTokens); + emit AllocationManager.AllocationResized( + _indexer, + _allocationId, + subgraphDeploymentId, + _tokens, + beforeSubgraphAllocatedTokens + ); // resize allocation subgraphService.resizeAllocation(_indexer, _allocationId, _tokens); @@ -119,8 +125,12 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { uint256 afterSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(subgraphDeploymentId); uint256 afterAllocatedTokens = subgraphService.allocationProvisionTracker(_indexer); Allocation.State memory afterAllocation = subgraphService.getAllocation(_allocationId); - uint256 accRewardsPerAllocatedTokenDelta = afterAllocation.accRewardsPerAllocatedToken - beforeAllocation.accRewardsPerAllocatedToken; - uint256 afterAccRewardsPending = rewardsManager.calcRewards(beforeAllocation.tokens, accRewardsPerAllocatedTokenDelta); + uint256 accRewardsPerAllocatedTokenDelta = afterAllocation.accRewardsPerAllocatedToken - + beforeAllocation.accRewardsPerAllocatedToken; + uint256 afterAccRewardsPending = rewardsManager.calcRewards( + beforeAllocation.tokens, + accRewardsPerAllocatedTokenDelta + ); // check state if (_tokens > beforeAllocation.tokens) { @@ -138,10 +148,17 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { assertTrue(subgraphService.isActiveAllocation(_allocationId)); Allocation.State memory allocation = subgraphService.getAllocation(_allocationId); - uint256 previousSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens(allocation.subgraphDeploymentId); - + uint256 previousSubgraphAllocatedTokens = subgraphService.getSubgraphAllocatedTokens( + allocation.subgraphDeploymentId + ); + vm.expectEmit(address(subgraphService)); - emit AllocationManager.AllocationClosed(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, allocation.tokens); + emit AllocationManager.AllocationClosed( + allocation.indexer, + _allocationId, + allocation.subgraphDeploymentId, + allocation.tokens + ); // close stale allocation subgraphService.closeStaleAllocation(_allocationId); @@ -182,15 +199,20 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { uint256 paymentCollected = 0; Allocation.State memory allocation; CollectPaymentData memory collectPaymentDataBefore; - + // PaymentType.IndexingRewards variables IndexingRewardsData memory indexingRewardsData; - uint32 delegationRatio = subgraphService.delegationRatio(); address rewardsDestination = subgraphService.rewardsDestination(_indexer); collectPaymentDataBefore.rewardsDestinationBalance = token.balanceOf(rewardsDestination); - collectPaymentDataBefore.indexerProvisionBalance = staking.getProviderTokensAvailable(_indexer, address(subgraphService)); - collectPaymentDataBefore.delegationPoolBalance = staking.getDelegatedTokensAvailable(_indexer, address(subgraphService)); - + collectPaymentDataBefore.indexerProvisionBalance = staking.getProviderTokensAvailable( + _indexer, + address(subgraphService) + ); + collectPaymentDataBefore.delegationPoolBalance = staking.getDelegatedTokensAvailable( + _indexer, + address(subgraphService) + ); + // PaymentType.QueryFee variables QueryFeeData memory queryFeeData; queryFeeData.protocolPaymentCut = graphPayments.PROTOCOL_PAYMENT_CUT(); @@ -257,25 +279,38 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { // Collect payment data after CollectPaymentData memory collectPaymentDataAfter; collectPaymentDataAfter.rewardsDestinationBalance = token.balanceOf(rewardsDestination); - collectPaymentDataAfter.indexerProvisionBalance = staking.getProviderTokensAvailable(_indexer, address(subgraphService)); - collectPaymentDataAfter.delegationPoolBalance = staking.getDelegatedTokensAvailable(_indexer, address(subgraphService)); + collectPaymentDataAfter.indexerProvisionBalance = staking.getProviderTokensAvailable( + _indexer, + address(subgraphService) + ); + collectPaymentDataAfter.delegationPoolBalance = staking.getDelegatedTokensAvailable( + _indexer, + address(subgraphService) + ); collectPaymentDataAfter.indexerBalance = token.balanceOf(_indexer); collectPaymentDataAfter.curationBalance = token.balanceOf(address(curation)); collectPaymentDataAfter.lockedTokens = subgraphService.feesProvisionTracker(_indexer); if (_paymentType == IGraphPayments.PaymentTypes.QueryFee) { // Check indexer got paid the correct amount - uint256 tokensProtocol = paymentCollected.mulPPM(protocolPaymentCut); - uint256 curationTokens = paymentCollected.mulPPM(queryFeeData.curationCut); - uint256 expectedIndexerTokensPayment = paymentCollected - tokensProtocol - curationTokens; - assertEq(collectPaymentDataAfter.indexerBalance, collectPaymentDataBefore.indexerBalance + expectedIndexerTokensPayment); + { + uint256 tokensProtocol = paymentCollected.mulPPM(protocolPaymentCut); + uint256 curationTokens = paymentCollected.mulPPM(queryFeeData.curationCut); + uint256 expectedIndexerTokensPayment = paymentCollected - tokensProtocol - curationTokens; + assertEq( + collectPaymentDataAfter.indexerBalance, + collectPaymentDataBefore.indexerBalance + expectedIndexerTokensPayment + ); - // Check curation got paid the correct amount - assertEq(collectPaymentDataAfter.curationBalance, collectPaymentDataBefore.curationBalance + curationTokens); + // Check curation got paid the correct amount + assertEq( + collectPaymentDataAfter.curationBalance, + collectPaymentDataBefore.curationBalance + curationTokens + ); + } // Check locked tokens - uint256 stakeToFeesRatio = subgraphService.stakeToFeesRatio(); - uint256 tokensToLock = paymentCollected * stakeToFeesRatio; + uint256 tokensToLock = paymentCollected * subgraphService.stakeToFeesRatio(); assertEq(collectPaymentDataAfter.lockedTokens, collectPaymentDataBefore.lockedTokens + tokensToLock); // Check the stake claim @@ -290,10 +325,12 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { } else { // Update allocation after collecting rewards allocation = subgraphService.getAllocation(allocationId); - + // Check allocation state assertEq(allocation.accRewardsPending, 0); - uint256 accRewardsPerAllocatedToken = rewardsManager.onSubgraphAllocationUpdate(allocation.subgraphDeploymentId); + uint256 accRewardsPerAllocatedToken = rewardsManager.onSubgraphAllocationUpdate( + allocation.subgraphDeploymentId + ); assertEq(allocation.accRewardsPerAllocatedToken, accRewardsPerAllocatedToken); assertEq(allocation.lastPOIPresentedAt, block.timestamp); @@ -301,7 +338,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { if (rewardsDestination == address(0)) { // If rewards destination is address zero indexer should get paid to their provision balance assertEq( - collectPaymentDataAfter.indexerProvisionBalance, + collectPaymentDataAfter.indexerProvisionBalance, collectPaymentDataBefore.indexerProvisionBalance + indexingRewardsData.tokensIndexerRewards ); } else { @@ -314,12 +351,16 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { // Check delegation pool got paid the correct amount assertEq( - collectPaymentDataAfter.delegationPoolBalance, + collectPaymentDataAfter.delegationPoolBalance, collectPaymentDataBefore.delegationPoolBalance + indexingRewardsData.tokensDelegationRewards ); // If after collecting indexing rewards the indexer is over allocated the allcation should close - uint256 tokensAvailable = staking.getTokensAvailable(_indexer, address(subgraphService), delegationRatio); + uint256 tokensAvailable = staking.getTokensAvailable( + _indexer, + address(subgraphService), + subgraphService.delegationRatio() + ); if (allocation.tokens <= tokensAvailable) { // Indexer isn't over allocated so allocation should still be open assertTrue(allocation.isOpen()); diff --git a/packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol b/packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol index 3e6672dd7..68d736261 100644 --- a/packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/allocation/resize.t.sol b/packages/subgraph-service/test/subgraphService/allocation/resize.t.sol index 3da7c5a0c..0df994929 100644 --- a/packages/subgraph-service/test/subgraphService/allocation/resize.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/resize.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/allocation/start.t.sol b/packages/subgraph-service/test/subgraphService/allocation/start.t.sol index 6db5e73db..9157444fb 100644 --- a/packages/subgraph-service/test/subgraphService/allocation/start.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/start.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol index 84b9da27e..ee5958115 100644 --- a/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol index 4891a4a75..9df747b4f 100644 --- a/packages/subgraph-service/test/subgraphService/collect/collect.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/collect.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol index d51f9ea4b..8b29ec830 100644 --- a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol index 9e20ad352..6ad7b5347 100644 --- a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/provider/register.t.sol b/packages/subgraph-service/test/subgraphService/provider/register.t.sol index 8e3d0577e..1df1f5571 100644 --- a/packages/subgraph-service/test/subgraphService/provider/register.t.sol +++ b/packages/subgraph-service/test/subgraphService/provider/register.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/provider/rewardsDestination.t.sol b/packages/subgraph-service/test/subgraphService/provider/rewardsDestination.t.sol index 3926bc362..0b4c805b2 100644 --- a/packages/subgraph-service/test/subgraphService/provider/rewardsDestination.t.sol +++ b/packages/subgraph-service/test/subgraphService/provider/rewardsDestination.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol index 9fdb0b76f..1c8191275 100644 --- a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol +++ b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index e20d1fc72..1dbfd082e 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; abstract contract Constants { uint256 internal constant MAX_TOKENS = 10_000_000_000 ether; diff --git a/packages/subgraph-service/test/utils/Users.sol b/packages/subgraph-service/test/utils/Users.sol index b2976f98a..69c3e411e 100644 --- a/packages/subgraph-service/test/utils/Users.sol +++ b/packages/subgraph-service/test/utils/Users.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; struct Users { address governor; diff --git a/packages/subgraph-service/test/utils/Utils.sol b/packages/subgraph-service/test/utils/Utils.sol index 47e4e68df..5aae4de3f 100644 --- a/packages/subgraph-service/test/utils/Utils.sol +++ b/packages/subgraph-service/test/utils/Utils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.26; +pragma solidity 0.8.27; import "forge-std/Test.sol"; From 282ea51a471ab199fcf701e600e6d3178a7a0847 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 17 Sep 2024 18:03:40 +0100 Subject: [PATCH 201/343] fix: add security contact to DisputeManager.sol --- packages/subgraph-service/contracts/DisputeManager.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index f48c20463..7bc932782 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -19,7 +19,7 @@ import { GraphDirectory } from "@graphprotocol/horizon/contracts/utilities/Graph import { DisputeManagerV1Storage } from "./DisputeManagerStorage.sol"; import { AttestationManager } from "./utilities/AttestationManager.sol"; -/* +/** * @title DisputeManager * @notice Provides a way to permissionlessly create disputes for incorrect behavior in the Subgraph Service. * @@ -40,6 +40,7 @@ import { AttestationManager } from "./utilities/AttestationManager.sol"; * Arbitration: * Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated * to a EOA or DAO. + * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ */ contract DisputeManager is Initializable, From 491041bcd4d64eed502e158af27718343f03948c Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 17 Sep 2024 18:03:53 +0100 Subject: [PATCH 202/343] fix: add security contact to GraphPayments.sol --- packages/horizon/contracts/payments/GraphPayments.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index b7cb34db7..ea3063d81 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -16,6 +16,7 @@ import { GraphDirectory } from "../utilities/GraphDirectory.sol"; * @notice This contract is part of the Graph Horizon payments protocol. It's designed * to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a * set of pre established rules. + * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ */ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, IGraphPayments { using TokenUtils for IGraphToken; From 86fd039daf411b064792ccd06c74080ed3dd2b71 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 17 Sep 2024 18:30:19 +0100 Subject: [PATCH 203/343] fix: add security contact to HorizonStaking.sol --- packages/horizon/contracts/staking/HorizonStaking.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 74b2d8d09..ea64fccda 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -24,6 +24,7 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; * This is due to the contract size limit on Arbitrum (24kB). The extension contract implements functionality to support * the legacy staking functions and the transfer tools. Both can be eventually removed without affecting the main * staking contract. + * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ */ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { using TokenUtils for IGraphToken; From 5ea1fe925147b3465d0373656bc1a0be64eeb783 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 17 Sep 2024 18:35:30 +0100 Subject: [PATCH 204/343] fix: add security contact to HorizonStakingExtension.sol --- packages/horizon/contracts/staking/HorizonStakingExtension.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index ba7eb3a5b..c6e6f5607 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -24,6 +24,7 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; * without losing rewards or having service interruptions. * @dev TODO: Once the transition period and the transfer tools are deemed not necessary this contract * can be removed. It's expected the transition period to last for a full allocation cycle (28 epochs). + * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ */ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizonStakingExtension { using TokenUtils for IGraphToken; From c269117fbf90476c7427b1d40046da5a549bf1d5 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 17 Sep 2024 18:36:01 +0100 Subject: [PATCH 205/343] fix: add security contact to PaymentsEscrow.sol --- packages/horizon/contracts/payments/PaymentsEscrow.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 5d0694346..c7c4e72e5 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -17,6 +17,7 @@ import { GraphDirectory } from "../utilities/GraphDirectory.sol"; * @notice This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT) * for payments made through the payments protocol for services provided * via a Graph Horizon data service. + * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ */ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, IPaymentsEscrow { using TokenUtils for IGraphToken; From 61a15440e9772d22a054b835e2dec5f1e8761b2f Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 17 Sep 2024 18:37:47 +0100 Subject: [PATCH 206/343] fix: add security contact to SubgraphService.sol + add NatSpec before contract def --- packages/subgraph-service/contracts/SubgraphService.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 5023e6160..0d2676476 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -21,6 +21,10 @@ import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol" import { Allocation } from "./libraries/Allocation.sol"; import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; +/** + * @title SubgraphService contract + * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ + */ contract SubgraphService is Initializable, OwnableUpgradeable, From d52be6d79e1967da01939cb8e8caba304f5f2ad5 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 17 Sep 2024 18:38:26 +0100 Subject: [PATCH 207/343] fix: add security contact to TAPCollector.sol --- packages/horizon/contracts/payments/collectors/TAPCollector.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index f3d67e819..fe96b78f3 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -17,6 +17,7 @@ import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; * @dev Note that the contract expects the RAV aggregate value to be monotonically increasing, each successive RAV for the same * (data service-payer-receiver) tuple should have a value greater than the previous one. The contract will keep track of the tokens * already collected and calculate the difference to collect. + * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ */ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { using PPMMath for uint256; From a58f807db20d1b7e82c0502a1995cd676d168fb2 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Wed, 18 Sep 2024 14:23:44 +0100 Subject: [PATCH 208/343] fix: change EIP712_ALLOCATION_PROOF_TYPEHASH from variable to constant. (OZ N-06) --- .../subgraph-service/contracts/utilities/AllocationManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 2e40f28d3..a6b719df4 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -30,7 +30,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca using TokenUtils for IGraphToken; ///@dev EIP712 typehash for allocation proof - bytes32 private immutable EIP712_ALLOCATION_PROOF_TYPEHASH = + bytes32 private constant EIP712_ALLOCATION_PROOF_TYPEHASH = keccak256("AllocationIdProof(address indexer,address allocationId)"); /** From 516a4e3bf2841d5ed764183e48e25df0a5dfc799 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Wed, 18 Sep 2024 17:24:44 +0100 Subject: [PATCH 209/343] fix: add override keyword in functions --- .../contracts/data-service/extensions/DataServicePausable.sol | 4 ++-- .../extensions/DataServicePausableUpgradeable.sol | 4 ++-- packages/subgraph-service/contracts/SubgraphService.sol | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index 4d88cb72e..3c83fbb0e 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -30,14 +30,14 @@ abstract contract DataServicePausable is Pausable, DataService, IDataServicePaus /** * @notice See {IDataServicePausable-pause} */ - function pause() external onlyPauseGuardian whenNotPaused { + function pause() external override onlyPauseGuardian whenNotPaused { _pause(); } /** * @notice See {IDataServicePausable-pause} */ - function unpause() external onlyPauseGuardian whenPaused { + function unpause() external override onlyPauseGuardian whenPaused { _unpause(); } diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol index 52f27d9c4..82d7cc63b 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol @@ -26,14 +26,14 @@ abstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataSer /** * @notice See {IDataServicePausable-pause} */ - function pause() external onlyPauseGuardian whenNotPaused { + function pause() external override onlyPauseGuardian whenNotPaused { _pause(); } /** * @notice See {IDataServicePausable-pause} */ - function unpause() external onlyPauseGuardian whenPaused { + function unpause() external override onlyPauseGuardian whenPaused { _unpause(); } diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 5023e6160..ce64d9ec0 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -351,7 +351,7 @@ contract SubgraphService is /** * @notice See {ISubgraphService.setRewardsDestination} */ - function setRewardsDestination(address rewardsDestination) external { + function setRewardsDestination(address rewardsDestination) external override { _setRewardsDestination(msg.sender, rewardsDestination); } From 9dfb8b0f1e7e3e454a8a249bcf86ce200bb38d84 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Wed, 18 Sep 2024 17:44:23 +0100 Subject: [PATCH 210/343] fix: remove unused return value. (OZ N-10) --- .../subgraph-service/contracts/utilities/AllocationManager.sol | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 2e40f28d3..978335b58 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -396,7 +396,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * * @param _allocationId The id of the allocation to be closed */ - function _closeAllocation(address _allocationId) internal returns (Allocation.State memory) { + function _closeAllocation(address _allocationId) internal { Allocation.State memory allocation = allocations.get(_allocationId); // Take rewards snapshot to prevent other allos from counting tokens from this allo @@ -414,7 +414,6 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca allocation.tokens; emit AllocationClosed(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, allocation.tokens); - return allocations[_allocationId]; } /** From bd62e959dadf8b011b7d3cf766d2cf1103b50120 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Wed, 18 Sep 2024 17:58:49 +0100 Subject: [PATCH 211/343] fix: remove unused return values from the Allocation library. (OZ N-10) --- .../contracts/libraries/Allocation.sol | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/packages/subgraph-service/contracts/libraries/Allocation.sol b/packages/subgraph-service/contracts/libraries/Allocation.sol index a55034f17..320547f92 100644 --- a/packages/subgraph-service/contracts/libraries/Allocation.sol +++ b/packages/subgraph-service/contracts/libraries/Allocation.sol @@ -96,12 +96,10 @@ library Allocation { * @param self The allocation list mapping * @param allocationId The allocation id */ - function presentPOI(mapping(address => State) storage self, address allocationId) internal returns (State memory) { + function presentPOI(mapping(address => State) storage self, address allocationId) internal { State storage allocation = _get(self, allocationId); require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); allocation.lastPOIPresentedAt = block.timestamp; - - return allocation; } /** @@ -116,12 +114,10 @@ library Allocation { mapping(address => State) storage self, address allocationId, uint256 accRewardsPerAllocatedToken - ) internal returns (State memory) { + ) internal { State storage allocation = _get(self, allocationId); require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); allocation.accRewardsPerAllocatedToken = accRewardsPerAllocatedToken; - - return allocation; } /** @@ -131,15 +127,10 @@ library Allocation { * @param self The allocation list mapping * @param allocationId The allocation id */ - function clearPendingRewards( - mapping(address => State) storage self, - address allocationId - ) internal returns (State memory) { + function clearPendingRewards(mapping(address => State) storage self, address allocationId) internal { State storage allocation = _get(self, allocationId); require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); allocation.accRewardsPending = 0; - - return allocation; } /** @@ -149,12 +140,10 @@ library Allocation { * @param self The allocation list mapping * @param allocationId The allocation id */ - function close(mapping(address => State) storage self, address allocationId) internal returns (State memory) { + function close(mapping(address => State) storage self, address allocationId) internal { State storage allocation = _get(self, allocationId); require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt)); allocation.closedAt = block.timestamp; - - return allocation; } /** From ffe9b89775af33d5aedff2c5757d14b819c80e94 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Wed, 18 Sep 2024 19:14:11 +0100 Subject: [PATCH 212/343] fix: address magic number use. (OZ N-11) --- .../data-service/utilities/ProvisionManager.sol | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index d1cf94287..ee5f5e048 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -23,6 +23,14 @@ import { ProvisionManagerV1Storage } from "./ProvisionManagerStorage.sol"; abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionManagerV1Storage { using UintRange for uint256; + // Constants + uint32 private constant DEFAULT_MIN_UINT32 = 0; + uint64 private constant DEFAULT_MIN_UINT64 = 0; + uint256 private constant DEFAULT_MIN_UINT256 = 0; + uint64 private constant DEFAULT_MAX_UINT64 = type(uint64).max; + uint256 private constant DEFAULT_MAX_UINT256 = type(uint256).max; + uint32 private constant MAX_PPM = uint32(PPMMath.MAX_PPM); + /** * @notice Emitted when the provision tokens range is set. * @param min The minimum allowed value for the provision tokens. @@ -115,9 +123,9 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa */ // solhint-disable-next-line func-name-mixedcase function __ProvisionManager_init_unchained() internal onlyInitializing { - _setProvisionTokensRange(type(uint256).min, type(uint256).max); - _setVerifierCutRange(type(uint32).min, uint32(PPMMath.MAX_PPM)); - _setThawingPeriodRange(type(uint64).min, type(uint64).max); + _setProvisionTokensRange(DEFAULT_MIN_UINT256, DEFAULT_MAX_UINT256); + _setVerifierCutRange(DEFAULT_MIN_UINT32, MAX_PPM); + _setThawingPeriodRange(DEFAULT_MIN_UINT64, DEFAULT_MAX_UINT64); } /** From 374f57d015dd6f6f0b44507e217b46193c3d1e7b Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Thu, 19 Sep 2024 15:08:08 +0100 Subject: [PATCH 213/343] fix: typographical errors throughout codebase. (OZ N-07) --- packages/contracts/contracts/curation/Curation.sol | 4 ++-- packages/contracts/contracts/curation/ICuration.sol | 4 ++-- .../contracts/contracts/l2/curation/L2Curation.sol | 6 +++--- .../contracts/contracts/rewards/IRewardsIssuer.sol | 4 ++-- packages/contracts/contracts/staking/Staking.sol | 2 +- packages/contracts/contracts/staking/libs/Stakes.sol | 2 +- .../horizon/contracts/interfaces/ITAPCollector.sol | 2 +- .../interfaces/internal/IHorizonStakingExtension.sol | 2 +- .../interfaces/internal/IHorizonStakingMain.sol | 12 ++++++------ .../interfaces/internal/IHorizonStakingTypes.sol | 4 ++-- .../horizon/contracts/payments/GraphPayments.sol | 2 +- .../horizon/contracts/staking/HorizonStaking.sol | 4 ++-- .../horizon/contracts/staking/HorizonStakingBase.sol | 2 +- .../contracts/staking/HorizonStakingExtension.sol | 6 +++--- .../subgraph-service/contracts/DisputeManager.sol | 2 +- .../contracts/utilities/AllocationManager.sol | 4 ++-- 16 files changed, 31 insertions(+), 31 deletions(-) diff --git a/packages/contracts/contracts/curation/Curation.sol b/packages/contracts/contracts/curation/Curation.sol index bd3032046..e289d048c 100644 --- a/packages/contracts/contracts/curation/Curation.sol +++ b/packages/contracts/contracts/curation/Curation.sol @@ -257,7 +257,7 @@ contract Curation is CurationV2Storage, GraphUpgradeable { /** * @notice Get the amount of token reserves in a curation pool. - * @param _subgraphDeploymentID Subgraph deployment curation poool + * @param _subgraphDeploymentID Subgraph deployment curation pool * @return Amount of token reserves in the curation pool */ function getCurationPoolTokens(bytes32 _subgraphDeploymentID) external view override returns (uint256) { @@ -286,7 +286,7 @@ contract Curation is CurationV2Storage, GraphUpgradeable { /** * @notice Get the amount of signal in a curation pool. - * @param _subgraphDeploymentID Subgraph deployment curation poool + * @param _subgraphDeploymentID Subgraph deployment curation pool * @return Amount of signal minted for the subgraph deployment */ function getCurationPoolSignal(bytes32 _subgraphDeploymentID) public view override returns (uint256) { diff --git a/packages/contracts/contracts/curation/ICuration.sol b/packages/contracts/contracts/curation/ICuration.sol index fe2f0e929..4f2c2bac5 100644 --- a/packages/contracts/contracts/curation/ICuration.sol +++ b/packages/contracts/contracts/curation/ICuration.sol @@ -84,14 +84,14 @@ interface ICuration { /** * @notice Get the amount of signal in a curation pool. - * @param _subgraphDeploymentID Subgraph deployment curation poool + * @param _subgraphDeploymentID Subgraph deployment curation pool * @return Amount of signal minted for the subgraph deployment */ function getCurationPoolSignal(bytes32 _subgraphDeploymentID) external view returns (uint256); /** * @notice Get the amount of token reserves in a curation pool. - * @param _subgraphDeploymentID Subgraph deployment curation poool + * @param _subgraphDeploymentID Subgraph deployment curation pool * @return Amount of token reserves in the curation pool */ function getCurationPoolTokens(bytes32 _subgraphDeploymentID) external view returns (uint256); diff --git a/packages/contracts/contracts/l2/curation/L2Curation.sol b/packages/contracts/contracts/l2/curation/L2Curation.sol index 3f8728d0a..f6d64209b 100644 --- a/packages/contracts/contracts/l2/curation/L2Curation.sol +++ b/packages/contracts/contracts/l2/curation/L2Curation.sol @@ -147,7 +147,7 @@ contract L2Curation is CurationV3Storage, GraphUpgradeable, IL2Curation { /** * @notice Assign Graph Tokens collected as curation fees to the curation pool reserve. - * @dev This function can only be called by the Staking contract and will do the bookeeping of + * @dev This function can only be called by the Staking contract and will do the Bookkeeping of * transferred tokens into this contract. * @param _subgraphDeploymentID SubgraphDeployment where funds should be allocated as reserves * @param _tokens Amount of Graph Tokens to add to reserves @@ -326,7 +326,7 @@ contract L2Curation is CurationV3Storage, GraphUpgradeable, IL2Curation { /** * @notice Get the amount of token reserves in a curation pool. - * @param _subgraphDeploymentID Subgraph deployment curation poool + * @param _subgraphDeploymentID Subgraph deployment curation pool * @return Amount of token reserves in the curation pool */ function getCurationPoolTokens(bytes32 _subgraphDeploymentID) external view override returns (uint256) { @@ -355,7 +355,7 @@ contract L2Curation is CurationV3Storage, GraphUpgradeable, IL2Curation { /** * @notice Get the amount of signal in a curation pool. - * @param _subgraphDeploymentID Subgraph deployment curation poool + * @param _subgraphDeploymentID Subgraph deployment curation pool * @return Amount of signal minted for the subgraph deployment */ function getCurationPoolSignal(bytes32 _subgraphDeploymentID) public view override returns (uint256) { diff --git a/packages/contracts/contracts/rewards/IRewardsIssuer.sol b/packages/contracts/contracts/rewards/IRewardsIssuer.sol index 705ce8db8..fe6963fa7 100644 --- a/packages/contracts/contracts/rewards/IRewardsIssuer.sol +++ b/packages/contracts/contracts/rewards/IRewardsIssuer.sol @@ -33,9 +33,9 @@ interface IRewardsIssuer { function getSubgraphAllocatedTokens(bytes32 _subgraphDeploymentId) external view returns (uint256); /** - * @notice Wether or not an allocation is active (i.e open) + * @notice Whether or not an allocation is active (i.e open) * @param _allocationId Allocation Id - * @return Wether or not the allocation is active + * @return Whether or not the allocation is active */ function isActiveAllocation(address _allocationId) external view returns (bool); } diff --git a/packages/contracts/contracts/staking/Staking.sol b/packages/contracts/contracts/staking/Staking.sol index d44d4767e..6aef50efc 100644 --- a/packages/contracts/contracts/staking/Staking.sol +++ b/packages/contracts/contracts/staking/Staking.sol @@ -912,7 +912,7 @@ abstract contract Staking is StakingV4Storage, GraphUpgradeable, IStakingBase, M if (curationFees > 0) { // Transfer and call collect() // This function transfer tokens to a trusted protocol contracts - // Then we call collect() to do the transfer bookeeping + // Then we call collect() to do the transfer Bookkeeping rewardsManager().onSubgraphSignalUpdate(_subgraphDeploymentID); TokenUtils.pushTokens(_graphToken, address(curation), curationFees); curation.collect(_subgraphDeploymentID, curationFees); diff --git a/packages/contracts/contracts/staking/libs/Stakes.sol b/packages/contracts/contracts/staking/libs/Stakes.sol index b0524b14c..e856cdec1 100644 --- a/packages/contracts/contracts/staking/libs/Stakes.sol +++ b/packages/contracts/contracts/staking/libs/Stakes.sol @@ -85,7 +85,7 @@ library Stakes { /** * @dev Unlock tokens. * @param stake Stake data - * @param _tokens Amount of tokens to unkock + * @param _tokens Amount of tokens to unlock */ function unlockTokens(Stakes.Indexer storage stake, uint256 _tokens) internal { stake.tokensLocked = stake.tokensLocked.sub(_tokens); diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index e7b5bc4fd..6cfc16485 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -35,7 +35,7 @@ interface ITAPCollector is IPaymentsCollector { } /** - * Trown when the caller is not the data service the RAV was issued to + * Thrown when the caller is not the data service the RAV was issued to * @param caller The address of the caller * @param dataService The address of the data service */ diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 6e29cb5c9..fcf70cc32 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -162,7 +162,7 @@ interface IHorizonStakingExtension is IRewardsIssuer, IL2StakingBase { function isAllocation(address allocationID) external view returns (bool); /** - * @notice Retrun the time in blocks to unstake + * @notice Return the time in blocks to unstake * @return Thawing period in blocks */ // solhint-disable-next-line func-name-mixedcase diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 418459d9f..ed7e90804 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -253,7 +253,7 @@ interface IHorizonStakingMain { * @param thawRequestId The ID of the thaw request * @param tokens The amount of tokens being released * @param shares The amount of shares being released - * @param thawingUntil The timestamp until the stake has thawn + * @param thawingUntil The timestamp until the stake has thawed */ event ThawRequestFulfilled(bytes32 indexed thawRequestId, uint256 tokens, uint256 shares, uint64 thawingUntil); @@ -417,7 +417,7 @@ interface IHorizonStakingMain { error HorizonStakingStillThawing(uint256 until); /** - * @notice Thrown when a service provider attempts to operate on verifieres that are not allowed. + * @notice Thrown when a service provider attempts to operate on verifiers that are not allowed. * @dev Only applies to stake from locked wallets. */ error HorizonStakingVerifierNotAllowed(address verifier); @@ -578,7 +578,7 @@ interface IHorizonStakingMain { /** * @notice Remove tokens from a provision and move them back to the service provider's idle stake. * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw - * requests in the event that fulfulling all of them results in a gas limit error. + * requests in the event that fulfilling all of them results in a gas limit error. * * Requirements: * - Must have previously initiated a thaw request using {thaw}. @@ -704,7 +704,7 @@ interface IHorizonStakingMain { * @notice Withdraw undelegated tokens from a provision after thawing. * Tokens can be automatically re-delegated to another provision by setting `newServiceProvider`. * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw - * requests in the event that fulfulling all of them results in a gas limit error. + * requests in the event that fulfilling all of them results in a gas limit error. * * Requirements: * - Must have previously initiated a thaw request using {undelegate}. @@ -744,7 +744,7 @@ interface IHorizonStakingMain { /** * @notice Delegate tokens to the subgraph data service provision. * This function is for backwards compatibility with the legacy staking contract. - * It only allows delegting to the subgraph data service and DOES NOT have slippage protection. + * It only allows delegating to the subgraph data service and DOES NOT have slippage protection. * @dev See {delegate}. * @param serviceProvider The service provider address * @param tokens The amount of tokens to delegate @@ -754,7 +754,7 @@ interface IHorizonStakingMain { /** * @notice Undelegate tokens from the subgraph data service provision and start thawing them. * This function is for backwards compatibility with the legacy staking contract. - * It only allows undelegting from the subgraph data service. + * It only allows undelegating from the subgraph data service. * @dev See {undelegate}. * @param serviceProvider The service provider address * @param shares The amount of shares to undelegate diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index eef8098e6..42b5588ef 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -39,7 +39,7 @@ interface IHorizonStakingTypes { * @dev See {ServiceProviderInternal} for the actual storage representation */ struct ServiceProvider { - // Total amount of tokens on the provider stake (only staked by the provider, inludes all provisions) + // Total amount of tokens on the provider stake (only staked by the provider, includes all provisions) uint256 tokensStaked; // Total amount of tokens locked in provisions (only staked by the provider) uint256 tokensProvisioned; @@ -50,7 +50,7 @@ interface IHorizonStakingTypes { * @dev It contains deprecated fields from the `Indexer` struct to maintain storage compatibility. */ struct ServiceProviderInternal { - // Total amount of tokens on the provider stake (only staked by the provider, inludes all provisions) + // Total amount of tokens on the provider stake (only staked by the provider, includes all provisions) uint256 tokensStaked; // (Deprecated) Tokens used in allocations uint256 __DEPRECATED_tokensAllocated; // solhint-disable-line graph/leading-underscore diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index b7cb34db7..05fbcb066 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -24,7 +24,7 @@ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, I /** * @notice Constructor for the {GraphPayments} contract - * @dev This contract is upgradeable however we stil use the constructor to set + * @dev This contract is upgradeable however we still use the constructor to set * a few immutable variables. * @param controller The address of the Graph controller * @param protocolPaymentCut The protocol tax in PPM diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 74b2d8d09..e36d33a73 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -62,7 +62,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @dev The staking contract is upgradeable however we stil use the constructor to set + * @dev The staking contract is upgradeable however we still use the constructor to set * a few immutable variables. * @param controller The address of the Graph controller contract. * @param stakingExtensionAddress The address of the staking extension contract. @@ -903,7 +903,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * * @param _thawRequestId The ID of the current thaw request * @param _acc The accumulator data for the thaw requests being fulfilled - * @return Wether the thaw request is still thawing, indicating that the traversal should continue or stop. + * @return Whether the thaw request is still thawing, indicating that the traversal should continue or stop. * @return The updated accumulator data */ function _fulfillThawRequest(bytes32 _thawRequestId, bytes memory _acc) private returns (bool, bytes memory) { diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index b3e94c7ea..b55b39fd8 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -39,7 +39,7 @@ abstract contract HorizonStakingBase is address internal immutable SUBGRAPH_DATA_SERVICE_ADDRESS; /** - * @dev The staking contract is upgradeable however we stil use the constructor to set + * @dev The staking contract is upgradeable however we still use the constructor to set * a few immutable variables. * @param controller The address of the Graph controller contract. * @param subgraphDataServiceAddress The address of the subgraph data service. diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index ba7eb3a5b..66efe5521 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -41,7 +41,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon } /** - * @dev The staking contract is upgradeable however we stil use the constructor to set + * @dev The staking contract is upgradeable however we still use the constructor to set * a few immutable variables. * @param controller The address of the Graph controller contract. * @param subgraphDataServiceAddress The address of the subgraph data service. @@ -296,7 +296,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon } /** - * @notice Retrun the time in blocks to unstake + * @notice Return the time in blocks to unstake * Deprecated, now enforced by each data service (verifier) * @return Thawing period in blocks */ @@ -569,7 +569,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon if (curationFees > 0) { // Transfer and call collect() // This function transfer tokens to a trusted protocol contracts - // Then we call collect() to do the transfer bookeeping + // Then we call collect() to do the transfer Bookkeeping _graphRewardsManager().onSubgraphSignalUpdate(_subgraphDeploymentID); _graphToken().pushTokens(address(curation), curationFees); curation.collect(_subgraphDeploymentID, curationFees); diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index f48c20463..8bf0f363b 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -272,7 +272,7 @@ contract DisputeManager is } /** - * @notice Once the dispute period ends, if the disput status remains Pending, + * @notice Once the dispute period ends, if the dispute status remains Pending, * the fisherman can cancel the dispute and get back their initial deposit. * @dev Cancel a dispute with Id `disputeId` * @param disputeId Id of the dispute to be cancelled diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 2e40f28d3..e0d3ea036 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -142,7 +142,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca error AllocationManagerZeroTokensAllocation(address allocationId); /** - * @notice Thrown when attempting to collect indexing rewards on a closed allocationl + * @notice Thrown when attempting to collect indexing rewards on a closed allocation * @param allocationId The id of the allocation */ error AllocationManagerAllocationClosed(address allocationId); @@ -454,7 +454,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca } /** - * @notice Verifies ownsership of an allocation id by verifying an EIP712 allocation proof + * @notice Verifies ownership of an allocation id by verifying an EIP712 allocation proof * @dev Requirements: * - Signer must be the allocation id address * @param _indexer The address of the indexer From 79f7828bb96c76524c3e07e8fd87a713695ea916 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Thu, 19 Sep 2024 18:28:37 +0100 Subject: [PATCH 214/343] fix: reorder parameter use in mulPPM function call in mulPPMRoundUp. (OZ N-12) --- packages/horizon/contracts/libraries/PPMMath.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/libraries/PPMMath.sol b/packages/horizon/contracts/libraries/PPMMath.sol index 5bd636add..38b653954 100644 --- a/packages/horizon/contracts/libraries/PPMMath.sol +++ b/packages/horizon/contracts/libraries/PPMMath.sol @@ -42,7 +42,7 @@ library PPMMath { */ function mulPPMRoundUp(uint256 a, uint256 b) internal pure returns (uint256) { require(isValidPPM(b), PPMMathInvalidPPM(b)); - return a - mulPPM(MAX_PPM - b, a); + return a - mulPPM(a, MAX_PPM - b); } /** From 4354737396d8503b35b3e0bdfceddd1cd3230c1d Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Fri, 20 Sep 2024 05:08:03 +1000 Subject: [PATCH 215/343] fix: only add to delegation pool if shares is greater than 0 (#1031) --- .../contracts/utilities/AllocationManager.sol | 8 ++++- .../subgraphService/SubgraphService.t.sol | 6 ++-- .../collect/indexing/indexing.t.sol | 31 +++++++++++++++++-- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index c277e2e9e..9604f92bb 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.27; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; +import { IHorizonStakingTypes } from "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol"; import { GraphDirectory } from "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol"; import { AllocationManagerV1Storage } from "./AllocationManagerStorage.sol"; @@ -289,7 +290,12 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca address(this), IGraphPayments.PaymentTypes.IndexingFee ); - tokensDelegationRewards = tokensRewards.mulPPM(delegatorCut); + IHorizonStakingTypes.DelegationPool memory delegationPool = _graphStaking().getDelegationPool( + allocation.indexer, + address(this) + ); + // If delegation pool has no shares then we don't need to distribute rewards to delegators + tokensDelegationRewards = delegationPool.shares > 0 ? tokensRewards.mulPPM(delegatorCut) : 0; if (tokensDelegationRewards > 0) { _graphToken().approve(address(_graphStaking()), tokensDelegationRewards); _graphStaking().addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards); diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 05c038680..845a7b7fb 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -11,6 +11,7 @@ import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPC import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import { LinkedList } from "@graphprotocol/horizon/contracts/libraries/LinkedList.sol"; import { IDataServiceFees } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol"; +import { IHorizonStakingTypes } from "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol"; import { Allocation } from "../../contracts/libraries/Allocation.sol"; import { AllocationManager } from "../../contracts/utilities/AllocationManager.sol"; @@ -255,7 +256,8 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead IGraphPayments.PaymentTypes.IndexingFee ); - indexingRewardsData.tokensDelegationRewards = paymentCollected.mulPPM(delegatorCut); + IHorizonStakingTypes.DelegationPool memory delegationPool = staking.getDelegationPool(allocation.indexer, address(subgraphService)); + indexingRewardsData.tokensDelegationRewards = delegationPool.shares > 0 ? paymentCollected.mulPPM(delegatorCut) : 0; indexingRewardsData.tokensIndexerRewards = paymentCollected - indexingRewardsData.tokensDelegationRewards; vm.expectEmit(address(subgraphService)); @@ -322,7 +324,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { assertEq(stakeClaim.createdAt, block.timestamp); assertEq(stakeClaim.releaseAt, block.timestamp + disputePeriod); assertEq(stakeClaim.nextClaim, bytes32(0)); - } else { + } else if (_paymentType == IGraphPayments.PaymentTypes.IndexingRewards) { // Update allocation after collecting rewards allocation = subgraphService.getAllocation(allocationId); diff --git a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol index 8b29ec830..ae2a085ed 100644 --- a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol @@ -27,14 +27,38 @@ contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { uint256 delegationTokens, uint256 delegationFeeCut ) public useIndexer useAllocation(tokens) useDelegation(delegationTokens) { + // Collect reverts if delegationFeeCut is 100% + delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM - 1); + _setDelegationFeeCut( + users.indexer, + address(subgraphService), + // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead + IGraphPayments.PaymentTypes.IndexingFee, + delegationFeeCut + ); + IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; + bytes memory data = abi.encode(allocationID, bytes32("POI")); + _collect(users.indexer, paymentType, data); + } + + function test_SubgraphService_Collect_Indexing_AfterUndelegate( + uint256 tokens, + uint256 delegationTokens, + uint256 delegationFeeCut + ) public useIndexer useAllocation(tokens) useDelegation(delegationTokens) { + // Collect reverts if delegationFeeCut is 100% delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM); _setDelegationFeeCut( users.indexer, address(subgraphService), // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead IGraphPayments.PaymentTypes.IndexingFee, - 100_000 + delegationFeeCut ); + // Undelegate + resetPrank(users.delegator); + staking.undelegate(users.indexer, address(subgraphService), delegationTokens); + resetPrank(users.indexer); IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; bytes memory data = abi.encode(allocationID, bytes32("POI")); _collect(users.indexer, paymentType, data); @@ -68,13 +92,14 @@ contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { uint256 delegationTokens, uint256 delegationFeeCut ) public useIndexer useAllocation(tokens) useDelegation(delegationTokens) { - delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM); + // Collect reverts if delegationFeeCut is 100% + delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM - 1); _setDelegationFeeCut( users.indexer, address(subgraphService), // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead IGraphPayments.PaymentTypes.IndexingFee, - 100_000 + delegationFeeCut ); uint8 numberOfPOIs = 20; From fe380e46d9262f87b8b98c5caa88c53e2113abe4 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Fri, 20 Sep 2024 05:09:13 +1000 Subject: [PATCH 216/343] fix(SubgraphService): use correct payment type for collect indexing rewards (#1032) --- .../contracts/utilities/AllocationManager.sol | 2 +- .../test/subgraphService/SubgraphService.t.sol | 3 +-- .../test/subgraphService/collect/indexing/indexing.t.sol | 9 +++------ 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 9604f92bb..04a6e09dc 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -288,7 +288,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca uint256 delegatorCut = _graphStaking().getDelegationFeeCut( allocation.indexer, address(this), - IGraphPayments.PaymentTypes.IndexingFee + IGraphPayments.PaymentTypes.IndexingRewards ); IHorizonStakingTypes.DelegationPool memory delegationPool = _graphStaking().getDelegationPool( allocation.indexer, diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 845a7b7fb..b5b7f744e 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -253,8 +253,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { uint256 delegatorCut = staking.getDelegationFeeCut( allocation.indexer, address(subgraphService), - // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead - IGraphPayments.PaymentTypes.IndexingFee + IGraphPayments.PaymentTypes.IndexingRewards ); IHorizonStakingTypes.DelegationPool memory delegationPool = staking.getDelegationPool(allocation.indexer, address(subgraphService)); indexingRewardsData.tokensDelegationRewards = delegationPool.shares > 0 ? paymentCollected.mulPPM(delegatorCut) : 0; diff --git a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol index ae2a085ed..bff35f574 100644 --- a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol @@ -32,8 +32,7 @@ contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { _setDelegationFeeCut( users.indexer, address(subgraphService), - // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead - IGraphPayments.PaymentTypes.IndexingFee, + IGraphPayments.PaymentTypes.IndexingRewards, delegationFeeCut ); IGraphPayments.PaymentTypes paymentType = IGraphPayments.PaymentTypes.IndexingRewards; @@ -51,8 +50,7 @@ contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { _setDelegationFeeCut( users.indexer, address(subgraphService), - // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead - IGraphPayments.PaymentTypes.IndexingFee, + IGraphPayments.PaymentTypes.IndexingRewards, delegationFeeCut ); // Undelegate @@ -97,8 +95,7 @@ contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { _setDelegationFeeCut( users.indexer, address(subgraphService), - // TODO: this should be fixed in AllocationManager, it should be IndexingRewards instead - IGraphPayments.PaymentTypes.IndexingFee, + IGraphPayments.PaymentTypes.IndexingRewards, delegationFeeCut ); From 95b3f83b1abe85449a63ab4922e84896f989ac57 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Fri, 20 Sep 2024 05:10:11 +1000 Subject: [PATCH 217/343] fix(Horizon): only allow addToDelegationPool if provision exists and pool has shares (#1042) --- .../internal/IHorizonStakingMain.sol | 7 + .../contracts/staking/HorizonStaking.sol | 8 + packages/horizon/test/escrow/collect.t.sol | 147 +++++++++++++++-- .../horizon/test/payments/GraphPayments.t.sol | 149 ++++++++++++++++-- .../test/staking/delegation/addToPool.t.sol | 63 +++++--- 5 files changed, 324 insertions(+), 50 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index ed7e90804..eafce457a 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -402,6 +402,13 @@ interface IHorizonStakingMain { */ error HorizonStakingInvalidDelegationPoolState(address serviceProvider, address verifier); + /** + * @notice Thrown when attempting to operate with a delegation pool that does not exist. + * @param serviceProvider The service provider address + * @param verifier The verifier address + */ + error HorizonStakingInvalidDelegationPool(address serviceProvider, address verifier); + // -- Errors: thaw requests -- error HorizonStakingNothingThawing(); diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index e36d33a73..c8709e639 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -279,7 +279,15 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokens ) external override notPaused { require(tokens != 0, HorizonStakingInvalidZeroTokens()); + + // Provision must exist before adding to delegation pool + Provision memory prov = _provisions[serviceProvider][verifier]; + require(prov.createdAt != 0, HorizonStakingInvalidProvision(serviceProvider, verifier)); + + // Delegation pool must exist before adding tokens DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); + require(pool.shares > 0, HorizonStakingInvalidDelegationPool(serviceProvider, verifier)); + pool.tokens = pool.tokens + tokens; _graphToken().pullTokens(msg.sender, tokens); emit TokensToDelegationPoolAdded(serviceProvider, verifier, tokens); diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 67efcc6e7..cbf945515 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; +import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; @@ -10,30 +11,107 @@ import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowCollectTest is GraphEscrowTest { + struct CollectPaymentData { + uint256 escrowBalance; + uint256 paymentsBalance; + uint256 receiverBalance; + uint256 delegationPoolBalance; + uint256 dataServiceBalance; + } + + function _collect( + IGraphPayments.PaymentTypes _paymentType, + address _payer, + address _receiver, + uint256 _tokens, + address _dataService, + uint256 _tokensDataService + ) private { + // Previous balances + (uint256 previousPayerEscrowBalance,,) = escrow.escrowAccounts(_payer, _receiver); + CollectPaymentData memory previousBalances = CollectPaymentData({ + escrowBalance: token.balanceOf(address(escrow)), + paymentsBalance: token.balanceOf(address(payments)), + receiverBalance: token.balanceOf(_receiver), + delegationPoolBalance: staking.getDelegatedTokensAvailable( + _receiver, + _dataService + ), + dataServiceBalance: token.balanceOf(_dataService) + }); + + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.EscrowCollected(_payer, _receiver, _tokens); + escrow.collect(_paymentType, _payer, _receiver, _tokens, _dataService, _tokensDataService); + + // Calculate cuts + uint256 protocolPaymentCut = payments.PROTOCOL_PAYMENT_CUT(); + uint256 delegatorCut = staking.getDelegationFeeCut( + _receiver, + _dataService, + _paymentType + ); + uint256 tokensProtocol = _tokens * protocolPaymentCut / MAX_PPM; + uint256 tokensDelegation = _tokens * delegatorCut / MAX_PPM; + + // After balances + (uint256 afterPayerEscrowBalance,,) = escrow.escrowAccounts(_payer, _receiver); + CollectPaymentData memory afterBalances = CollectPaymentData({ + escrowBalance: token.balanceOf(address(escrow)), + paymentsBalance: token.balanceOf(address(payments)), + receiverBalance: token.balanceOf(_receiver), + delegationPoolBalance: staking.getDelegatedTokensAvailable( + _receiver, + _dataService + ), + dataServiceBalance: token.balanceOf(_dataService) + }); + + // Check receiver balance after payment + uint256 receiverExpectedPayment = _tokens - _tokensDataService - tokensProtocol - tokensDelegation; + assertEq(afterBalances.receiverBalance - previousBalances.receiverBalance, receiverExpectedPayment); + assertEq(token.balanceOf(address(payments)), 0); + + // Check delegation pool balance after payment + assertEq(afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance, tokensDelegation); + + // Check that the escrow account has been updated + assertEq(previousBalances.escrowBalance, afterBalances.escrowBalance + _tokens); + + // Check that payments balance didn't change + assertEq(previousBalances.paymentsBalance, afterBalances.paymentsBalance); + + // Check data service balance after payment + assertEq(afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, _tokensDataService); + + // Check payers escrow balance after payment + assertEq(previousPayerEscrowBalance - _tokens, afterPayerEscrowBalance); + } + /* * TESTS */ function testCollect_Tokens( - uint256 amount, + uint256 tokens, + uint256 delegationTokens, uint256 tokensDataService - ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { - uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; - uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; - vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegatoion); - - vm.startPrank(users.gateway); - escrow.approveCollector(users.verifier, amount); - _depositTokens(amount); + ) public useIndexer useProvision(tokens, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { + uint256 tokensProtocol = tokens * protocolPaymentCut / MAX_PPM; + uint256 tokensDelegatoion = tokens * delegationFeeCut / MAX_PPM; + vm.assume(tokensDataService < tokens - tokensProtocol - tokensDelegatoion); - uint256 indexerPreviousBalance = token.balanceOf(users.indexer); - vm.startPrank(users.verifier); - escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); + vm.assume(delegationTokens > MIN_DELEGATION); + vm.assume(delegationTokens <= MAX_STAKING_TOKENS); + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); - uint256 indexerBalance = token.balanceOf(users.indexer); - uint256 indexerExpectedPayment = amount - tokensDataService - tokensProtocol - tokensDelegatoion; - assertEq(indexerBalance - indexerPreviousBalance, indexerExpectedPayment); - assertEq(token.balanceOf(address(payments)), 0); + resetPrank(users.gateway); + escrow.approveCollector(users.verifier, tokens); + _depositTokens(tokens); + + resetPrank(users.verifier); + _collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, tokens, subgraphDataServiceAddress, tokensDataService); } function testCollect_RevertWhen_CollectorNotAuthorized(uint256 amount) public { @@ -78,4 +156,41 @@ contract GraphEscrowCollectTest is GraphEscrowTest { escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); vm.stopPrank(); } + + function testCollect_RevertWhen_InvalidPool( + uint256 amount + ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { + vm.assume(amount > 1 ether); + + resetPrank(users.gateway); + escrow.approveCollector(users.verifier, amount); + _depositTokens(amount); + + resetPrank(users.verifier); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + users.indexer, + subgraphDataServiceAddress + )); + escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 1); + } + + function testCollect_RevertWhen_InvalidProvision( + uint256 amount + ) public useIndexer useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { + vm.assume(amount > 1 ether); + vm.assume(amount <= MAX_STAKING_TOKENS); + + resetPrank(users.gateway); + escrow.approveCollector(users.verifier, amount); + _depositTokens(amount); + + resetPrank(users.verifier); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidProvision.selector, + users.indexer, + subgraphDataServiceAddress + )); + escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 1); + } } \ No newline at end of file diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 62e582c26..8b76678b4 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; +import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; import { GraphPayments } from "../../contracts/payments/GraphPayments.sol"; @@ -10,6 +11,87 @@ import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStaki contract GraphPaymentsTest is HorizonStakingSharedTest { + struct CollectPaymentData { + uint256 escrowBalance; + uint256 paymentsBalance; + uint256 receiverBalance; + uint256 delegationPoolBalance; + uint256 dataServiceBalance; + } + + function _collect( + IGraphPayments.PaymentTypes _paymentType, + address _receiver, + uint256 _tokens, + address _dataService, + uint256 _tokensDataService + ) private { + // Previous balances + CollectPaymentData memory previousBalances = CollectPaymentData({ + escrowBalance: token.balanceOf(address(escrow)), + paymentsBalance: token.balanceOf(address(payments)), + receiverBalance: token.balanceOf(_receiver), + delegationPoolBalance: staking.getDelegatedTokensAvailable( + _receiver, + _dataService + ), + dataServiceBalance: token.balanceOf(_dataService) + }); + + // Calculate cuts + uint256 protocolPaymentCut = payments.PROTOCOL_PAYMENT_CUT(); + uint256 delegatorCut = staking.getDelegationFeeCut( + _receiver, + _dataService, + _paymentType + ); + uint256 tokensProtocol = _tokens * protocolPaymentCut / MAX_PPM; + uint256 tokensDelegation = _tokens * delegatorCut / MAX_PPM; + + uint256 receiverExpectedPayment = _tokens - _tokensDataService - tokensProtocol - tokensDelegation; + + (,address msgSender, ) = vm.readCallers(); + vm.expectEmit(address(payments)); + emit IGraphPayments.PaymentCollected( + msgSender, + _receiver, + _dataService, + receiverExpectedPayment, + tokensDelegation, + _tokensDataService, + tokensProtocol + ); + payments.collect(_paymentType, _receiver, _tokens, _dataService, _tokensDataService); + + // After balances + CollectPaymentData memory afterBalances = CollectPaymentData({ + escrowBalance: token.balanceOf(address(escrow)), + paymentsBalance: token.balanceOf(address(payments)), + receiverBalance: token.balanceOf(_receiver), + delegationPoolBalance: staking.getDelegatedTokensAvailable( + _receiver, + _dataService + ), + dataServiceBalance: token.balanceOf(_dataService) + }); + + // Check receiver balance after payment + assertEq(afterBalances.receiverBalance - previousBalances.receiverBalance, receiverExpectedPayment); + assertEq(token.balanceOf(address(payments)), 0); + + // Check delegation pool balance after payment + assertEq(afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance, tokensDelegation); + + // Check that the escrow account has been updated + assertEq(previousBalances.escrowBalance, afterBalances.escrowBalance + _tokens); + + // Check that payments balance didn't change + assertEq(previousBalances.paymentsBalance, afterBalances.paymentsBalance); + + // Check data service balance after payment + assertEq(afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, _tokensDataService); + } + /* * TESTS */ @@ -28,32 +110,28 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { function testCollect( uint256 amount, - uint256 tokensDataService + uint256 tokensDataService, + uint256 tokensDelegate ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; - uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; - vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegatoion); + uint256 tokensDelegation = amount * delegationFeeCut / MAX_PPM; + vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegation); address escrowAddress = address(escrow); + // Delegate tokens + vm.assume(tokensDelegate > MIN_DELEGATION); + vm.assume(tokensDelegate <= MAX_STAKING_TOKENS); + vm.startPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, tokensDelegate, 0); + // Add tokens in escrow mint(escrowAddress, amount); vm.startPrank(escrowAddress); approve(address(payments), amount); // Collect payments through GraphPayments - uint256 indexerPreviousBalance = token.balanceOf(users.indexer); - payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); + _collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); vm.stopPrank(); - - uint256 indexerBalance = token.balanceOf(users.indexer); - uint256 expectedPayment = amount - tokensDataService - tokensProtocol - tokensDelegatoion; - assertEq(indexerBalance - indexerPreviousBalance, expectedPayment); - - uint256 dataServiceBalance = token.balanceOf(subgraphDataServiceAddress); - assertEq(dataServiceBalance, tokensDataService); - - uint256 delegatorBalance = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(delegatorBalance, tokensDelegatoion); } function testCollect_RevertWhen_InsufficientAmount( @@ -77,4 +155,45 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { vm.expectRevert(expectedError); payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); } + + function testCollect_RevertWhen_InvalidPool( + uint256 amount + ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { + vm.assume(amount > 1 ether); + address escrowAddress = address(escrow); + + // Add tokens in escrow + mint(escrowAddress, amount); + vm.startPrank(escrowAddress); + approve(address(payments), amount); + + // Collect payments through GraphPayments + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + users.indexer, + subgraphDataServiceAddress + )); + payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, 1); + } + + function testCollect_RevertWhen_InvalidProvision( + uint256 amount + ) public useIndexer useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { + vm.assume(amount > 1 ether); + vm.assume(amount <= MAX_STAKING_TOKENS); + address escrowAddress = address(escrow); + + // Add tokens in escrow + mint(escrowAddress, amount); + vm.startPrank(escrowAddress); + approve(address(payments), amount); + + // Collect payments through GraphPayments + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidProvision.selector, + users.indexer, + subgraphDataServiceAddress + )); + payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, 1); + } } diff --git a/packages/horizon/test/staking/delegation/addToPool.t.sol b/packages/horizon/test/staking/delegation/addToPool.t.sol index e88becbbf..b9a583ee8 100644 --- a/packages/horizon/test/staking/delegation/addToPool.t.sol +++ b/packages/horizon/test/staking/delegation/addToPool.t.sol @@ -9,6 +9,12 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { modifier useValidDelegationAmount(uint256 tokens) { + vm.assume(tokens > MIN_DELEGATION); + vm.assume(tokens <= MAX_STAKING_TOKENS); + _; + } + + modifier useValidAddToPoolAmount(uint256 tokens) { vm.assume(tokens > 0); vm.assume(tokens <= MAX_STAKING_TOKENS); _; @@ -20,36 +26,31 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { function test_Delegation_AddToPool_Verifier( uint256 amount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useValidDelegationAmount(delegationAmount) { - uint256 stakingPreviousBalance = token.balanceOf(address(staking)); - + uint256 delegationAmount, + uint256 addToPoolAmount + ) public useIndexer useProvision(amount, 0, 0) useValidDelegationAmount(delegationAmount) useValidAddToPoolAmount(addToPoolAmount) { + // Initialize delegation pool + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); + resetPrank(subgraphDataServiceAddress); - mint(subgraphDataServiceAddress, delegationAmount); - token.approve(address(staking), delegationAmount); - _addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); - - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(delegatedTokens, delegationAmount); - assertEq(token.balanceOf(subgraphDataServiceAddress), 0); - assertEq(token.balanceOf(address(staking)), stakingPreviousBalance + delegationAmount); + mint(subgraphDataServiceAddress, addToPoolAmount); + token.approve(address(staking), addToPoolAmount); + _addToDelegationPool(users.indexer, subgraphDataServiceAddress, addToPoolAmount); } function test_Delegation_AddToPool_Payments( uint256 amount, uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) useValidDelegationAmount(delegationAmount) { - uint256 stakingPreviousBalance = token.balanceOf(address(staking)); + ) public useIndexer useProvision(amount, 0, 0) useValidDelegationAmount(delegationAmount) useValidAddToPoolAmount(delegationAmount) { + // Initialize delegation pool + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); resetPrank(address(payments)); mint(address(payments), delegationAmount); token.approve(address(staking), delegationAmount); _addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationAmount); - - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(users.indexer, subgraphDataServiceAddress); - assertEq(delegatedTokens, delegationAmount); - assertEq(token.balanceOf(subgraphDataServiceAddress), 0); - assertEq(token.balanceOf(address(staking)), stakingPreviousBalance + delegationAmount); } function test_Delegation_AddToPool_RevertWhen_ZeroTokens( @@ -61,5 +62,29 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, 0); } + function test_Delegation_AddToPool_RevertWhen_PoolHasNoShares( + uint256 amount + ) public useIndexer useProvision(amount, 0, 0) { + vm.startPrank(subgraphDataServiceAddress); + bytes memory expectedError = abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + users.indexer, + subgraphDataServiceAddress + ); + vm.expectRevert(expectedError); + staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, 1); + } + + function test_Deletaion_AddToPool_RevertWhen_NoProvision() public { + vm.startPrank(subgraphDataServiceAddress); + bytes memory expectedError = abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidProvision.selector, + users.indexer, + subgraphDataServiceAddress + ); + vm.expectRevert(expectedError); + staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, 1); + } + // TODO: test recovering an invalid delegation pool } \ No newline at end of file From 76e4940b8203784d06939e70e45b8779ab9464f9 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 12:27:06 +0100 Subject: [PATCH 218/343] fix: update constant names. (OZ N-11) --- .../utilities/ProvisionManager.sol | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index ee5f5e048..0e79bfa47 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -24,12 +24,12 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa using UintRange for uint256; // Constants - uint32 private constant DEFAULT_MIN_UINT32 = 0; - uint64 private constant DEFAULT_MIN_UINT64 = 0; - uint256 private constant DEFAULT_MIN_UINT256 = 0; - uint64 private constant DEFAULT_MAX_UINT64 = type(uint64).max; - uint256 private constant DEFAULT_MAX_UINT256 = type(uint256).max; - uint32 private constant MAX_PPM = uint32(PPMMath.MAX_PPM); + uint32 private constant DEFAULT_MIN_VERIFIER_CUT = 0; + uint64 private constant DEFAULT_MIN_THAWING_PERIOD = 0; + uint256 private constant DEFAULT_MIN_PROVISION_TOKENS = 0; + uint64 private constant DEFAULT_MAX_THAWING_PERIOD = type(uint64).max; + uint256 private constant DEFAULT_MAX_PROVISION_TOKENS = type(uint256).max; + uint32 private constant DEFAULT_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM); /** * @notice Emitted when the provision tokens range is set. @@ -123,9 +123,9 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa */ // solhint-disable-next-line func-name-mixedcase function __ProvisionManager_init_unchained() internal onlyInitializing { - _setProvisionTokensRange(DEFAULT_MIN_UINT256, DEFAULT_MAX_UINT256); - _setVerifierCutRange(DEFAULT_MIN_UINT32, MAX_PPM); - _setThawingPeriodRange(DEFAULT_MIN_UINT64, DEFAULT_MAX_UINT64); + _setProvisionTokensRange(DEFAULT_MIN_PROVISION_TOKENS, DEFAULT_MAX_PROVISION_TOKENS); + _setVerifierCutRange(DEFAULT_MIN_VERIFIER_CUT, DEFAULT_MAX_VERIFIER_CUT); + _setThawingPeriodRange(DEFAULT_MIN_THAWING_PERIOD, DEFAULT_MAX_THAWING_PERIOD); } /** From 3bdaec6ffb23810e8b739f314d695e96659780cc Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Sat, 21 Sep 2024 00:38:15 +1000 Subject: [PATCH 219/343] chore: add stakeToFeesRatio to SubgraphService initialize (#1027) * chore: add stakeToFeesRatio to SubgraphService initialize * fix: revert parameter name --- .../contracts/SubgraphService.sol | 16 +++++-- .../contracts/interfaces/ISubgraphService.sol | 5 +++ .../test/SubgraphBaseTest.t.sol | 6 +-- .../subgraphService/SubgraphService.t.sol | 6 +++ .../governance/stakeToFeesRatio.t.sol | 43 +++++++++++++++++++ 5 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 packages/subgraph-service/test/subgraphService/governance/stakeToFeesRatio.t.sol diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index ce64d9ec0..0b77b277f 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -71,7 +71,11 @@ contract SubgraphService is * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation * @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation */ - function initialize(uint256 minimumProvisionTokens, uint32 maximumDelegationRatio) external initializer { + function initialize( + uint256 minimumProvisionTokens, + uint32 maximumDelegationRatio, + uint256 stakeToFeesRatio + ) external initializer { __Ownable_init(msg.sender); __DataService_init(); __DataServicePausable_init(); @@ -79,6 +83,7 @@ contract SubgraphService is _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max); _setDelegationRatio(maximumDelegationRatio); + _setStakeToFeesRatio(stakeToFeesRatio); } /** @@ -373,8 +378,7 @@ contract SubgraphService is * @notice See {ISubgraphService.setStakeToFeesRatio} */ function setStakeToFeesRatio(uint256 stakeToFeesRatio_) external override onlyOwner { - stakeToFeesRatio = stakeToFeesRatio_; - emit StakeToFeesRatioSet(stakeToFeesRatio_); + _setStakeToFeesRatio(stakeToFeesRatio_); } /** @@ -558,4 +562,10 @@ contract SubgraphService is emit QueryFeesCollected(indexer, tokensCollected, tokensCurators); return tokensCollected; } + + function _setStakeToFeesRatio(uint256 _stakeToFeesRatio) private { + require(_stakeToFeesRatio != 0, SubgraphServiceInvalidZeroStakeToFeesRatio()); + stakeToFeesRatio = _stakeToFeesRatio; + emit StakeToFeesRatioSet(_stakeToFeesRatio); + } } diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index e12554303..b83d672f7 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -122,6 +122,11 @@ interface ISubgraphService is IDataServiceFees { */ error SubgraphServiceAllocationIsAltruistic(address allocationId); + /** + * @notice Thrown when trying to set stake to fees ratio to zero + */ + error SubgraphServiceInvalidZeroStakeToFeesRatio(); + /** * @notice Close a stale allocation * @dev This function can be permissionlessly called when the allocation is stale. diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index d42b66e29..f1aa9b96c 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -151,7 +151,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { address subgraphServiceProxy = UnsafeUpgrades.deployTransparentProxy( subgraphServiceImplementation, users.governor, - abi.encodeCall(SubgraphService.initialize, (minimumProvisionTokens, delegationRatio)) + abi.encodeCall(SubgraphService.initialize, (minimumProvisionTokens, delegationRatio, stakeToFeesRatio)) ); subgraphService = SubgraphService(subgraphServiceProxy); @@ -183,10 +183,10 @@ abstract contract SubgraphBaseTest is Utils, Constants { } function setupProtocol() private { + resetPrank(users.deployer); + subgraphService.transferOwnership(users.governor); resetPrank(users.governor); staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); - resetPrank(users.deployer); - subgraphService.setStakeToFeesRatio(stakeToFeesRatio); subgraphService.setMaxPOIStaleness(maxPOIStaleness); subgraphService.setCurationCut(curationCut); } diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index b5b7f744e..91c486a7b 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -31,6 +31,12 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { * MODIFIERS */ + modifier useGovernor() { + vm.startPrank(users.governor); + _; + vm.stopPrank(); + } + modifier useOperator() { resetPrank(users.indexer); staking.setOperator(users.operator, address(subgraphService), true); diff --git a/packages/subgraph-service/test/subgraphService/governance/stakeToFeesRatio.t.sol b/packages/subgraph-service/test/subgraphService/governance/stakeToFeesRatio.t.sol new file mode 100644 index 000000000..bfd09073e --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/governance/stakeToFeesRatio.t.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +contract DisputeManagerGovernanceArbitratorTest is SubgraphServiceTest { + + /** + * ACTIONS + */ + + function _setStakeToFeesRatio(uint256 _stakeToFeesRatio) internal { + vm.expectEmit(address(subgraphService)); + emit ISubgraphService.StakeToFeesRatioSet(_stakeToFeesRatio); + subgraphService.setStakeToFeesRatio(_stakeToFeesRatio); + assertEq(subgraphService.stakeToFeesRatio(), _stakeToFeesRatio); + } + + /* + * TESTS + */ + + function test_Governance_SetStakeToFeesRatio(uint256 stakeToFeesRatio) public useGovernor { + vm.assume(stakeToFeesRatio > 0); + _setStakeToFeesRatio(stakeToFeesRatio); + } + + function test_Governance_RevertWhen_ZeroValue() public useGovernor { + uint256 stakeToFeesRatio = 0; + vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceInvalidZeroStakeToFeesRatio.selector)); + subgraphService.setStakeToFeesRatio(stakeToFeesRatio); + } + + function test_Governance_RevertWhen_NotGovernor() public useIndexer { + uint256 stakeToFeesRatio = 2; + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, users.indexer)); + subgraphService.setStakeToFeesRatio(stakeToFeesRatio); + } +} From 51dd7a8f22b359fa8aaf3820916ca7c40708bd5b Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Sat, 21 Sep 2024 00:38:51 +1000 Subject: [PATCH 220/343] chore(SubgraphService): add Multicall to SubgraphService (#1030) * chore: add Multicall to SubgraphService * fix: add multicall init --- packages/subgraph-service/contracts/SubgraphService.sol | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 0b77b277f..e50762453 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -8,6 +8,7 @@ import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewa import { ISubgraphService } from "./interfaces/ISubgraphService.sol"; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import { MulticallUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { DataServicePausableUpgradeable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol"; import { DataService } from "@graphprotocol/horizon/contracts/data-service/DataService.sol"; @@ -24,6 +25,7 @@ import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; contract SubgraphService is Initializable, OwnableUpgradeable, + MulticallUpgradeable, DataService, DataServicePausableUpgradeable, DataServiceFees, @@ -77,6 +79,7 @@ contract SubgraphService is uint256 stakeToFeesRatio ) external initializer { __Ownable_init(msg.sender); + __Multicall_init(); __DataService_init(); __DataServicePausable_init(); __AllocationManager_init("SubgraphService", "1.0"); From 08539afc31fd3198d8ec7eea716cc935042e5369 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Sat, 21 Sep 2024 00:39:05 +1000 Subject: [PATCH 221/343] fix(SubgraphService): allow collecting rewards when delegation fee cut is 100% (#1038) --- .../contracts/utilities/AllocationManager.sol | 14 ++++++++------ .../collect/indexing/indexing.t.sol | 7 ++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index c555f271c..5bb22cbe2 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -303,12 +303,14 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca // Distribute rewards to indexer tokensIndexerRewards = tokensRewards - tokensDelegationRewards; - address rewardsDestination = rewardsDestination[allocation.indexer]; - if (rewardsDestination == address(0)) { - _graphToken().approve(address(_graphStaking()), tokensIndexerRewards); - _graphStaking().stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards); - } else { - _graphToken().pushTokens(rewardsDestination, tokensIndexerRewards); + if (tokensIndexerRewards > 0) { + address rewardsDestination = rewardsDestination[allocation.indexer]; + if (rewardsDestination == address(0)) { + _graphToken().approve(address(_graphStaking()), tokensIndexerRewards); + _graphStaking().stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards); + } else { + _graphToken().pushTokens(rewardsDestination, tokensIndexerRewards); + } } } diff --git a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol index bff35f574..38e9e7865 100644 --- a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol @@ -27,8 +27,7 @@ contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { uint256 delegationTokens, uint256 delegationFeeCut ) public useIndexer useAllocation(tokens) useDelegation(delegationTokens) { - // Collect reverts if delegationFeeCut is 100% - delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM - 1); + delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM); _setDelegationFeeCut( users.indexer, address(subgraphService), @@ -45,7 +44,6 @@ contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { uint256 delegationTokens, uint256 delegationFeeCut ) public useIndexer useAllocation(tokens) useDelegation(delegationTokens) { - // Collect reverts if delegationFeeCut is 100% delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM); _setDelegationFeeCut( users.indexer, @@ -90,8 +88,7 @@ contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { uint256 delegationTokens, uint256 delegationFeeCut ) public useIndexer useAllocation(tokens) useDelegation(delegationTokens) { - // Collect reverts if delegationFeeCut is 100% - delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM - 1); + delegationFeeCut = bound(delegationFeeCut, 0, MAX_PPM); _setDelegationFeeCut( users.indexer, address(subgraphService), From 3e57ba31739a14ed594cd9ca0b86b1a931605adc Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Sat, 21 Sep 2024 02:22:05 +1000 Subject: [PATCH 222/343] =?UTF-8?q?chore(SubgraphService):=20add=20current?= =?UTF-8?q?=20epoch=20to=20IndexingRewardsCollected=E2=80=A6=20(#1036)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(SubgraphService): add current epoch to IndexingRewardsCollected event * fix: add missing parameter to natspec --- .../contracts/utilities/AllocationManager.sol | 7 ++- .../test/SubgraphBaseTest.t.sol | 6 +- .../test/mocks/MockEpochManager.sol | 63 +++++++++++++++++++ .../subgraphService/SubgraphService.t.sol | 3 +- .../subgraph-service/test/utils/Constants.sol | 3 +- 5 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 packages/subgraph-service/test/mocks/MockEpochManager.sol diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 5bb22cbe2..4ab5fd418 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -57,6 +57,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * @param tokensIndexerRewards The amount of tokens collected for the indexer * @param tokensDelegationRewards The amount of tokens collected for delegators * @param poi The POI presented + * @param currentEpoch The current epoch */ event IndexingRewardsCollected( address indexed indexer, @@ -65,7 +66,8 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca uint256 tokensRewards, uint256 tokensIndexerRewards, uint256 tokensDelegationRewards, - bytes32 poi + bytes32 poi, + uint256 currentEpoch ); /** @@ -321,7 +323,8 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca tokensRewards, tokensIndexerRewards, tokensDelegationRewards, - _poi + _poi, + _graphEpochManager().currentEpoch() ); // Check if the indexer is over-allocated and close the allocation if necessary diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index f1aa9b96c..6ab0c6d24 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -26,6 +26,7 @@ import { Utils } from "./utils/Utils.sol"; import { MockCuration } from "./mocks/MockCuration.sol"; import { MockGRTToken } from "./mocks/MockGRTToken.sol"; import { MockRewardsManager } from "./mocks/MockRewardsManager.sol"; +import { MockEpochManager } from "./mocks/MockEpochManager.sol"; abstract contract SubgraphBaseTest is Utils, Constants { @@ -50,6 +51,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { MockCuration curation; MockGRTToken token; MockRewardsManager rewardsManager; + MockEpochManager epochManager; /* Users */ @@ -91,6 +93,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { GraphProxy stakingProxy = new GraphProxy(address(0), address(proxyAdmin)); rewardsManager = new MockRewardsManager(token, rewardsPerSignal, rewardsPerSubgraphAllocationUpdate); curation = new MockCuration(); + epochManager = new MockEpochManager(); // GraphPayments predict address bytes32 saltGraphPayments = keccak256("GraphPaymentsSalt"); @@ -126,7 +129,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { controller.setContractProxy(keccak256("RewardsManager"), address(rewardsManager)); controller.setContractProxy(keccak256("GraphPayments"), predictedGraphPaymentsAddress); controller.setContractProxy(keccak256("PaymentsEscrow"), predictedEscrowAddress); - controller.setContractProxy(keccak256("EpochManager"), makeAddr("EpochManager")); + controller.setContractProxy(keccak256("EpochManager"), address(epochManager)); controller.setContractProxy(keccak256("GraphTokenGateway"), makeAddr("GraphTokenGateway")); controller.setContractProxy(keccak256("GraphProxyAdmin"), makeAddr("GraphProxyAdmin")); controller.setContractProxy(keccak256("Curation"), address(curation)); @@ -187,6 +190,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { subgraphService.transferOwnership(users.governor); resetPrank(users.governor); staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); + epochManager.setEpochLength(EPOCH_LENGTH); subgraphService.setMaxPOIStaleness(maxPOIStaleness); subgraphService.setCurationCut(curationCut); } diff --git a/packages/subgraph-service/test/mocks/MockEpochManager.sol b/packages/subgraph-service/test/mocks/MockEpochManager.sol new file mode 100644 index 000000000..060a92e21 --- /dev/null +++ b/packages/subgraph-service/test/mocks/MockEpochManager.sol @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.27; + +import { IEpochManager } from "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol"; + +contract MockEpochManager is IEpochManager { + // -- Variables -- + + uint256 public epochLength; + uint256 public lastRunEpoch; + uint256 public lastLengthUpdateEpoch; + uint256 public lastLengthUpdateBlock; + + // -- Configuration -- + + function setEpochLength(uint256 _epochLength) public { + lastLengthUpdateEpoch = 1; + lastLengthUpdateBlock = blockNum(); + epochLength = _epochLength; + } + + // -- Epochs + + function runEpoch() public { + lastRunEpoch = currentEpoch(); + } + + // -- Getters -- + + function isCurrentEpochRun() public view returns (bool) { + return lastRunEpoch == currentEpoch(); + } + + function blockNum() public view returns (uint256) { + return block.number; + } + + function blockHash(uint256 _block) public view returns (bytes32) { + return blockhash(_block); + } + + function currentEpoch() public view returns (uint256) { + return lastLengthUpdateEpoch + epochsSinceUpdate(); + } + + function currentEpochBlock() public view returns (uint256) { + return lastLengthUpdateBlock + (epochsSinceUpdate() * epochLength); + } + + function currentEpochBlockSinceStart() public view returns (uint256) { + return blockNum() - currentEpochBlock(); + } + + function epochsSince(uint256 _epoch) public view returns (uint256) { + uint256 epoch = currentEpoch(); + return _epoch < epoch ? (epoch - _epoch) : 0; + } + + function epochsSinceUpdate() public view returns (uint256) { + return (blockNum() - lastLengthUpdateBlock) / epochLength; + } +} diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 91c486a7b..e62ce8211 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -273,7 +273,8 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { paymentCollected, indexingRewardsData.tokensIndexerRewards, indexingRewardsData.tokensDelegationRewards, - indexingRewardsData.poi + indexingRewardsData.poi, + epochManager.currentEpoch() ); } diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index 1dbfd082e..e70ca8b41 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.27; abstract contract Constants { uint256 internal constant MAX_TOKENS = 10_000_000_000 ether; uint256 internal constant MAX_PPM = 1_000_000; + uint256 internal constant EPOCH_LENGTH = 1; // Dispute Manager uint64 internal constant disputePeriod = 300; // 5 minutes uint256 internal constant disputeDeposit = 100 ether; // 100 GRT @@ -26,4 +27,4 @@ abstract contract Constants { // RewardsMananger parameters uint256 public constant rewardsPerSignal = 10000; uint256 public constant rewardsPerSubgraphAllocationUpdate = 1000; -} \ No newline at end of file +} From 89121252c6aa6a88404cb385bae812d3dbadd071 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 <67825802+MoonBoi9001@users.noreply.github.com> Date: Fri, 20 Sep 2024 19:33:08 +0100 Subject: [PATCH 223/343] Update packages/horizon/contracts/data-service/utilities/ProvisionManager.sol MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tomás Migone --- .../contracts/data-service/utilities/ProvisionManager.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 0e79bfa47..8608fd2fa 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -24,12 +24,12 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa using UintRange for uint256; // Constants - uint32 private constant DEFAULT_MIN_VERIFIER_CUT = 0; - uint64 private constant DEFAULT_MIN_THAWING_PERIOD = 0; - uint256 private constant DEFAULT_MIN_PROVISION_TOKENS = 0; + uint32 private constant DEFAULT_MIN_VERIFIER_CUT = type(uint32).min; + uint32 private constant DEFAULT_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM); + uint64 private constant DEFAULT_MIN_THAWING_PERIOD = type(uint64).min; uint64 private constant DEFAULT_MAX_THAWING_PERIOD = type(uint64).max; + uint256 private constant DEFAULT_MIN_PROVISION_TOKENS = type(uint256).min; uint256 private constant DEFAULT_MAX_PROVISION_TOKENS = type(uint256).max; - uint32 private constant DEFAULT_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM); /** * @notice Emitted when the provision tokens range is set. From cf2109f61d785e323645a86f694329827804391e Mon Sep 17 00:00:00 2001 From: MoonBoi9001 <67825802+MoonBoi9001@users.noreply.github.com> Date: Tue, 24 Sep 2024 18:28:41 +0100 Subject: [PATCH 224/343] fix: remove unused errors, use LegacyAllocationAlreadyMigrated to prevent migrating a legacy allocation twice (OZ N-02) (#1029) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: remove AllocationManagerZeroTokensAllocation. (OZ N-02) * fix: remove DataServiceFeatureNotImplemented. (OZ N-02) * fix: Use LegacyAllocationAlreadyMigrated. (OZ N-02) Use LegacyAllocationAlreadyMigrated to prevent migrating a legacy allocation twice. * fix: restore migrate function to require from if revert. Co-authored-by: Tomás Migone * fix: missing closing braket. --------- Co-authored-by: Tomás Migone --- .../contracts/data-service/interfaces/IDataService.sol | 5 ----- .../contracts/libraries/LegacyAllocation.sol | 5 +++-- .../contracts/utilities/AllocationManager.sol | 10 ++-------- 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index b7e1028f0..3eec64c04 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -60,11 +60,6 @@ interface IDataService { */ event ServiceProviderSlashed(address indexed serviceProvider, uint256 tokens); - /** - * @notice Thrown to signal that a feature is not implemented by a data service. - */ - error DataServiceFeatureNotImplemented(); - /** * @notice Registers a service provider with the data service. The service provider can now * start providing the service. diff --git a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol index 83bef8037..c60783785 100644 --- a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol +++ b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol @@ -39,11 +39,12 @@ library LegacyAllocation { /** * @notice Migrate a legacy allocation * @dev Requirements: - * - The allocation must not exist + * - The allocation must not have been previously migrated * @param self The legacy allocation list mapping * @param indexer The indexer that owns the allocation * @param allocationId The allocation id * @param subgraphDeploymentId The subgraph deployment id the allocation is for + * @custom:error LegacyAllocationAlreadyMigrated if the allocation has already been migrated */ function migrate( mapping(address => State) storage self, @@ -51,7 +52,7 @@ library LegacyAllocation { address allocationId, bytes32 subgraphDeploymentId ) internal { - require(!self[allocationId].exists(), LegacyAllocationExists(allocationId)); + require(!self[allocationId].exists(), LegacyAllocationAlreadyMigrated(allocationId)); State memory allocation = State({ indexer: indexer, subgraphDeploymentId: subgraphDeploymentId }); self[allocationId] = allocation; diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 4ab5fd418..97c3adf99 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -139,13 +139,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca error AllocationManagerInvalidZeroAllocationId(); /** - * @notice Thrown when attempting to create an allocation with zero tokens - * @param allocationId The id of the allocation - */ - error AllocationManagerZeroTokensAllocation(address allocationId); - - /** - * @notice Thrown when attempting to collect indexing rewards on a closed allocation + * @notice Thrown when attempting to collect indexing rewards on a closed allocationl * @param allocationId The id of the allocation */ error AllocationManagerAllocationClosed(address allocationId); @@ -178,7 +172,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca /** * @notice Imports a legacy allocation id into the subgraph service * This is a governor only action that is required to prevent indexers from re-using allocation ids from the - * legacy staking contract. + * legacy staking contract. It will revert with LegacyAllocationAlreadyMigrated if the allocation has already been migrated. * @param _indexer The address of the indexer * @param _allocationId The id of the allocation * @param _subgraphDeploymentId The id of the subgraph deployment From 4ad1ccdf3a6e1229afec0554031cd5fa29fabac9 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 13:04:16 +0100 Subject: [PATCH 225/343] fix: releaseStake n parameter changed to numClaimsToRelease. --- .../data-service/extensions/DataServiceFees.sol | 8 ++++---- .../data-service/interfaces/IDataServiceFees.sol | 4 ++-- .../data-service/extensions/DataServiceFees.t.sol | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index e0ea587f4..83ebbe971 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -22,8 +22,8 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat /** * @notice See {IDataServiceFees-releaseStake} */ - function releaseStake(uint256 n) external virtual override { - _releaseStake(msg.sender, n); + function releaseStake(uint256 numClaimsToRelease) external virtual override { + _releaseStake(msg.sender, numClaimsToRelease); } /** @@ -61,14 +61,14 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat /** * @notice See {IDataServiceFees-releaseStake} */ - function _releaseStake(address _serviceProvider, uint256 _n) internal { + function _releaseStake(address _serviceProvider, uint256 _numClaimsToRelease) internal { LinkedList.List storage claimsList = claimsLists[_serviceProvider]; (uint256 claimsReleased, bytes memory data) = claimsList.traverse( _getNextStakeClaim, _processStakeClaim, _deleteStakeClaim, abi.encode(0, _serviceProvider), - _n + _numClaimsToRelease ); emit StakeClaimsReleased(_serviceProvider, claimsReleased, abi.decode(data, (uint256))); diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index 483f11274..2677f247e 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -89,7 +89,7 @@ interface IDataServiceFees is IDataService { * stake claims that releasing them all at once would exceed the block gas limit. * @dev This function can be overriden and/or disabled. * @dev Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released. - * @param n Amount of stake claims to process. If 0, all stake claims are processed. + * @param numClaimsToRelease Amount of stake claims to process. If 0, all stake claims are processed. */ - function releaseStake(uint256 n) external; + function releaseStake(uint256 numClaimsToRelease) external; } diff --git a/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol index f6f31d54c..fef08d094 100644 --- a/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol +++ b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol @@ -81,14 +81,14 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { function test_Release_WhenNIsValid( uint256 tokens, uint256 steps, - uint256 n + uint256 numClaimsToRelease ) external useIndexer useProvisionDataService(address(dataService), PROVISION_TOKENS, 0, 0) { // lock all provisioned stake in steps // limit tokens to at least 1 per step // limit steps to at least 15 so we stagger locks every 5 seconds to have some expired tokens = bound(tokens, 50, PROVISION_TOKENS / dataService.STAKE_TO_FEES_RATIO()); steps = bound(steps, 15, 50); - n = bound(n, 0, steps); + numClaimsToRelease = bound(numClaimsToRelease, 0, steps); uint256 stepAmount = tokens / steps; @@ -99,7 +99,7 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { } // it should release all expired claims - _assert_releaseStake(users.indexer, n); + _assert_releaseStake(users.indexer, numClaimsToRelease); } function test_Release_WhenNIsNotValid( @@ -180,7 +180,7 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { uint256 tokensReleased; bytes32 head; } - function _assert_releaseStake(address serviceProvider, uint256 n) private { + function _assert_releaseStake(address serviceProvider, uint256 numClaimsToRelease) private { // before state (bytes32 beforeHead, bytes32 beforeTail, uint256 beforeNonce, uint256 beforeCount) = dataService.claimsLists( serviceProvider @@ -195,7 +195,7 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { tokensReleased: 0, head: beforeHead }); - while (calcValues.head != bytes32(0) && (calcValues.claimsCount < n || n == 0)) { + while (calcValues.head != bytes32(0) && (calcValues.claimsCount < numClaimsToRelease || numClaimsToRelease == 0)) { (uint256 claimTokens, , uint256 releaseAt, bytes32 nextClaim) = dataService.claims(calcValues.head); if (releaseAt > block.timestamp) { break; @@ -209,7 +209,7 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { // it should emit a an event emit IDataServiceFees.StakeClaimsReleased(serviceProvider, calcValues.claimsCount, calcValues.tokensReleased); - dataService.releaseStake(n); + dataService.releaseStake(numClaimsToRelease); // after state (bytes32 afterHead, bytes32 afterTail, uint256 afterNonce, uint256 afterCount) = dataService.claimsLists( From d90b971a19639589f6f6a440edfd4dc3737ddff1 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 13:09:06 +0100 Subject: [PATCH 226/343] fix: function _setPartialPaused(bool _toPause) chnaged to function _setPartialPaused(bool _toPartialPause). --- packages/contracts/contracts/governance/Controller.sol | 6 +++--- packages/contracts/contracts/governance/Pausable.sol | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/contracts/contracts/governance/Controller.sol b/packages/contracts/contracts/governance/Controller.sol index 2b71fd885..707a27fff 100644 --- a/packages/contracts/contracts/governance/Controller.sol +++ b/packages/contracts/contracts/governance/Controller.sol @@ -89,10 +89,10 @@ contract Controller is Governed, Pausable, IController { /** * @notice Change the partial paused state of the contract * Partial pause is intended as a partial pause of the protocol - * @param _toPause True if the contracts should be (partially) paused, false otherwise + * @param _toPartialPause True if the contracts should be (partially) paused, false otherwise */ - function setPartialPaused(bool _toPause) external override onlyGovernorOrGuardian { - _setPartialPaused(_toPause); + function setPartialPaused(bool _toPartialPause) external override onlyGovernorOrGuardian { + _setPartialPaused(_toPartialPause); } /** diff --git a/packages/contracts/contracts/governance/Pausable.sol b/packages/contracts/contracts/governance/Pausable.sol index 6c5d2fd2c..179762527 100644 --- a/packages/contracts/contracts/governance/Pausable.sol +++ b/packages/contracts/contracts/governance/Pausable.sol @@ -31,13 +31,13 @@ abstract contract Pausable { /** * @dev Change the partial paused state of the contract - * @param _toPause New value for the partial pause state (true means the contracts will be partially paused) + * @param _toPartialPause New value for the partial pause state (true means the contracts will be partially paused) */ - function _setPartialPaused(bool _toPause) internal { - if (_toPause == _partialPaused) { + function _setPartialPaused(bool _toPartialPause) internal { + if (_toPartialPause == _partialPaused) { return; } - _partialPaused = _toPause; + _partialPaused = _toPartialPause; if (_partialPaused) { lastPausePartialTime = block.timestamp; } From 9d819efaa308b1aef5a44b0dc302f525396cd3bd Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 13:11:19 +0100 Subject: [PATCH 227/343] fix: lastPausePartialTime now lastPartialPauseTime.. --- packages/contracts/contracts/governance/Pausable.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/contracts/contracts/governance/Pausable.sol b/packages/contracts/contracts/governance/Pausable.sol index 179762527..2bc1795cd 100644 --- a/packages/contracts/contracts/governance/Pausable.sol +++ b/packages/contracts/contracts/governance/Pausable.sol @@ -14,7 +14,7 @@ abstract contract Pausable { bool internal _paused; /// Timestamp for the last time the partial pause was set - uint256 public lastPausePartialTime; + uint256 public lastPartialPauseTime; /// Timestamp for the last time the full pause was set uint256 public lastPauseTime; @@ -39,7 +39,7 @@ abstract contract Pausable { } _partialPaused = _toPartialPause; if (_partialPaused) { - lastPausePartialTime = block.timestamp; + lastPartialPauseTime = block.timestamp; } emit PartialPauseChanged(_partialPaused); } From 2d69d2a9eff23403fd7531108c6b25b29285e2f2 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 15:57:36 +0100 Subject: [PATCH 228/343] fix: acceptProvision updated to acceptProvisionPendingParameters --- .../contracts/data-service/interfaces/IDataService.sol | 2 +- .../test/data-service/implementations/DataServiceBase.sol | 2 +- .../implementations/DataServiceBaseUpgradeable.sol | 2 +- .../data-service/implementations/DataServiceImpFees.sol | 2 +- .../implementations/DataServiceImpPausable.sol | 2 +- .../implementations/DataServiceImpPausableUpgradeable.sol | 2 +- packages/subgraph-service/contracts/SubgraphService.sol | 4 ++-- .../test/subgraphService/SubgraphService.t.sol | 2 +- .../test/subgraphService/provision/accept.t.sol | 8 ++++---- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index 3eec64c04..61d032e68 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -88,7 +88,7 @@ interface IDataService { * @param serviceProvider The address of the service provider. * @param data Custom data, usage defined by the data service. */ - function acceptProvision(address serviceProvider, bytes calldata data) external; + function acceptProvisionPendingParameters(address serviceProvider, bytes calldata data) external; /** * @notice Service provider starts providing the service. diff --git a/packages/horizon/test/data-service/implementations/DataServiceBase.sol b/packages/horizon/test/data-service/implementations/DataServiceBase.sol index d98dd2857..0d51241ce 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceBase.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceBase.sol @@ -19,7 +19,7 @@ contract DataServiceBase is DataService { function register(address serviceProvider, bytes calldata data) external {} - function acceptProvision(address serviceProvider, bytes calldata data) external {} + function acceptProvisionPendingParameters(address serviceProvider, bytes calldata data) external {} function startService(address serviceProvider, bytes calldata data) external {} diff --git a/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol index 31309c524..a7ebfd465 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceBaseUpgradeable.sol @@ -15,7 +15,7 @@ contract DataServiceBaseUpgradeable is DataService { function register(address serviceProvider, bytes calldata data) external {} - function acceptProvision(address serviceProvider, bytes calldata data) external {} + function acceptProvisionPendingParameters(address serviceProvider, bytes calldata data) external {} function startService(address serviceProvider, bytes calldata data) external {} diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol b/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol index efabda6ff..ac5c79c89 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpFees.sol @@ -15,7 +15,7 @@ contract DataServiceImpFees is DataServiceFees { function register(address serviceProvider, bytes calldata data) external {} - function acceptProvision(address serviceProvider, bytes calldata data) external {} + function acceptProvisionPendingParameters(address serviceProvider, bytes calldata data) external {} function startService(address serviceProvider, bytes calldata data) external {} diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol index 0ca990ab1..5073207ab 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpPausable.sol @@ -23,7 +23,7 @@ contract DataServiceImpPausable is DataServicePausable { function register(address serviceProvider, bytes calldata data) external {} - function acceptProvision(address serviceProvider, bytes calldata data) external {} + function acceptProvisionPendingParameters(address serviceProvider, bytes calldata data) external {} function startService(address serviceProvider, bytes calldata data) external {} diff --git a/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol b/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol index 39b2bb26b..cea615885 100644 --- a/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol +++ b/packages/horizon/test/data-service/implementations/DataServiceImpPausableUpgradeable.sol @@ -17,7 +17,7 @@ contract DataServiceImpPausableUpgradeable is DataServicePausableUpgradeable { function register(address serviceProvider, bytes calldata data) external {} - function acceptProvision(address serviceProvider, bytes calldata data) external {} + function acceptProvisionPendingParameters(address serviceProvider, bytes calldata data) external {} function startService(address serviceProvider, bytes calldata data) external {} diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index e50762453..18148faf8 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -131,7 +131,7 @@ contract SubgraphService is /** * @notice Accept staged parameters in the provision of a service provider - * @dev Implements {IDataService-acceptProvision} + * @dev Implements {IDataService-acceptProvisionPendingParameters} * * Requirements: * - The indexer must be registered @@ -142,7 +142,7 @@ contract SubgraphService is * * @param indexer The address of the indexer to accept the provision for */ - function acceptProvision( + function acceptProvisionPendingParameters( address indexer, bytes calldata ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index e62ce8211..1f441a9c3 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -86,7 +86,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { emit IDataService.ProvisionAccepted(_indexer); // Accept provision - subgraphService.acceptProvision(_indexer, _data); + subgraphService.acceptProvisionPendingParameters(_indexer, _data); // Update provision after acceptance provision = staking.getProvision(_indexer, address(subgraphService)); diff --git a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol index 1c8191275..44ce19b5f 100644 --- a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol +++ b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol @@ -40,7 +40,7 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { ISubgraphService.SubgraphServiceIndexerNotRegistered.selector, users.indexer )); - subgraphService.acceptProvision(users.indexer, ""); + subgraphService.acceptProvisionPendingParameters(users.indexer, ""); } function test_SubgraphService_Provision_Accept_RevertWhen_NotAuthorized() public { @@ -50,7 +50,7 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { users.operator, users.indexer )); - subgraphService.acceptProvision(users.indexer, ""); + subgraphService.acceptProvisionPendingParameters(users.indexer, ""); } function test_SubgraphService_Provision_Accept_RevertIf_InvalidVerifierCut( @@ -75,7 +75,7 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { fishermanRewardPercentage, MAX_PPM )); - subgraphService.acceptProvision(users.indexer, ""); + subgraphService.acceptProvisionPendingParameters(users.indexer, ""); } function test_SubgraphService_Provision_Accept_RevertIf_InvalidDisputePeriod( @@ -100,6 +100,6 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { disputePeriod, type(uint64).max )); - subgraphService.acceptProvision(users.indexer, ""); + subgraphService.acceptProvisionPendingParameters(users.indexer, ""); } } From a4ba0ab5cf0648117e3f329b54beba5f92c0b670 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 15:58:45 +0100 Subject: [PATCH 229/343] fix: rename staged to pending. --- .../horizon/contracts/data-service/interfaces/IDataService.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index 61d032e68..b3f168bbe 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -79,7 +79,7 @@ interface IDataService { function register(address serviceProvider, bytes calldata data) external; /** - * @notice Accepts staged parameters in the provision of a service provider in the {Graph Horizon staking + * @notice Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking * contract}. * @dev Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. * From 76bedb3ed5fc88536d98f7b7fb9d62705f511dfa Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 16:38:55 +0100 Subject: [PATCH 230/343] fix: rename maxVerifierCut to newMaxVerifierCut and thawingPeriod to newThawingPeriod. --- .../horizon/contracts/staking/HorizonStaking.sol | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index c8709e639..8d74df83e 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -226,16 +226,16 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { function setProvisionParameters( address serviceProvider, address verifier, - uint32 maxVerifierCut, - uint64 thawingPeriod + uint32 newMaxVerifierCut, + uint64 newThawingPeriod ) external override notPaused onlyAuthorized(serviceProvider, verifier) { Provision storage prov = _provisions[serviceProvider][verifier]; require(prov.createdAt != 0, HorizonStakingInvalidProvision(serviceProvider, verifier)); - if ((prov.maxVerifierCutPending != maxVerifierCut) || (prov.thawingPeriodPending != thawingPeriod)) { - prov.maxVerifierCutPending = maxVerifierCut; - prov.thawingPeriodPending = thawingPeriod; - emit ProvisionParametersStaged(serviceProvider, verifier, maxVerifierCut, thawingPeriod); + if ((prov.maxVerifierCutPending != newMaxVerifierCut) || (prov.thawingPeriodPending != newThawingPeriod)) { + prov.maxVerifierCutPending = newMaxVerifierCut; + prov.thawingPeriodPending = newThawingPeriod; + emit ProvisionParametersStaged(serviceProvider, verifier, newMaxVerifierCut, newThawingPeriod); } } From faafe8267fb0a2cb88be2e156134b738bf8d57dc Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 18:56:09 +0100 Subject: [PATCH 231/343] fix: onlyProvisionAuthorized now onlyAuthorizedForProvision. --- .../data-service/utilities/ProvisionManager.sol | 2 +- .../subgraph-service/contracts/SubgraphService.sol | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index d1cf94287..fbd3936ac 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -82,7 +82,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa /** * @notice Checks if the caller is authorized to manage the provision of a service provider. */ - modifier onlyProvisionAuthorized(address serviceProvider) { + modifier onlyAuthorizedForProvision(address serviceProvider) { require( _graphStaking().isAuthorized(msg.sender, serviceProvider, address(this)), ProvisionManagerNotAuthorized(msg.sender, serviceProvider) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 18148faf8..793b05623 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -110,7 +110,7 @@ contract SubgraphService is function register( address indexer, bytes calldata data - ) external override onlyProvisionAuthorized(indexer) onlyValidProvision(indexer) whenNotPaused { + ) external override onlyAuthorizedForProvision(indexer) onlyValidProvision(indexer) whenNotPaused { (string memory url, string memory geohash, address rewardsDestination) = abi.decode( data, (string, string, address) @@ -145,7 +145,7 @@ contract SubgraphService is function acceptProvisionPendingParameters( address indexer, bytes calldata - ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + ) external override onlyAuthorizedForProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { _checkProvisionTokens(indexer); _acceptProvisionParameters(indexer); emit ProvisionAccepted(indexer); @@ -181,7 +181,7 @@ contract SubgraphService is ) external override - onlyProvisionAuthorized(indexer) + onlyAuthorizedForProvision(indexer) onlyValidProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused @@ -216,7 +216,7 @@ contract SubgraphService is function stopService( address indexer, bytes calldata data - ) external override onlyProvisionAuthorized(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { + ) external override onlyAuthorizedForProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { address allocationId = abi.decode(data, (address)); require( allocations.get(allocationId).indexer == indexer, @@ -254,7 +254,7 @@ contract SubgraphService is ) external override - onlyProvisionAuthorized(indexer) + onlyAuthorizedForProvision(indexer) onlyValidProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused @@ -326,7 +326,7 @@ contract SubgraphService is uint256 tokens ) external - onlyProvisionAuthorized(indexer) + onlyAuthorizedForProvision(indexer) onlyValidProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused From e73cb44777ca5f09f0f08a63cb77b19ea7c0d97b Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 18:56:48 +0100 Subject: [PATCH 232/343] fix: ProvisionAccepted now ProvisionPendingParametersAccepted. --- .../contracts/data-service/interfaces/IDataService.sol | 4 ++-- .../contracts/data-service/utilities/ProvisionManager.sol | 2 +- packages/subgraph-service/contracts/SubgraphService.sol | 4 ++-- .../test/subgraphService/SubgraphService.t.sol | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/horizon/contracts/data-service/interfaces/IDataService.sol b/packages/horizon/contracts/data-service/interfaces/IDataService.sol index b3f168bbe..7770bc9a5 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataService.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataService.sol @@ -25,7 +25,7 @@ interface IDataService { * @notice Emitted when a service provider accepts a provision in {Graph Horizon staking contract}. * @param serviceProvider The address of the service provider. */ - event ProvisionAccepted(address indexed serviceProvider); + event ProvisionPendingParametersAccepted(address indexed serviceProvider); /** * @notice Emitted when a service provider starts providing the service. @@ -83,7 +83,7 @@ interface IDataService { * contract}. * @dev Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. * - * Emits a {ProvisionAccepted} event. + * Emits a {ProvisionPendingParametersAccepted} event. * * @param serviceProvider The address of the service provider. * @param data Custom data, usage defined by the data service. diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index fbd3936ac..3670fcdbd 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -125,7 +125,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa * the {HorizonStaking} contract. * @dev Checks the pending provision parameters, not the current ones. * - * Emits a {ProvisionAccepted} event. + * Emits a {ProvisionPendingParametersAccepted} event. * * @param _serviceProvider The address of the service provider. */ diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 793b05623..a4f6375dd 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -138,7 +138,7 @@ contract SubgraphService is * - Must have previously staged provision parameters, using {IHorizonStaking-setProvisionParameters} * - The new provision parameters must be valid according to the subgraph service rules * - * Emits a {ProvisionAccepted} event + * Emits a {ProvisionPendingParametersAccepted} event * * @param indexer The address of the indexer to accept the provision for */ @@ -148,7 +148,7 @@ contract SubgraphService is ) external override onlyAuthorizedForProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused { _checkProvisionTokens(indexer); _acceptProvisionParameters(indexer); - emit ProvisionAccepted(indexer); + emit ProvisionPendingParametersAccepted(indexer); } /** diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 1f441a9c3..67338fe64 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -83,7 +83,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { uint64 thawingPeriodPending = provision.thawingPeriodPending; vm.expectEmit(address(subgraphService)); - emit IDataService.ProvisionAccepted(_indexer); + emit IDataService.ProvisionPendingParametersAccepted(_indexer); // Accept provision subgraphService.acceptProvisionPendingParameters(_indexer, _data); From 69e1971b199af9f67426779f3dfbfc7de8107493 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 19:02:52 +0100 Subject: [PATCH 233/343] fix: releaseAt updated to releasableAt --- .../data-service/extensions/DataServiceFees.sol | 6 +++--- .../data-service/interfaces/IDataServiceFees.sol | 6 +++--- .../test/data-service/extensions/DataServiceFees.t.sol | 10 +++++----- .../test/subgraphService/SubgraphService.t.sol | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 83ebbe971..09102dd4a 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -49,7 +49,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat claims[claimId] = StakeClaim({ tokens: _tokens, createdAt: block.timestamp, - releaseAt: _unlockTimestamp, + releasableAt: _unlockTimestamp, nextClaim: bytes32(0) }); if (claimsList.count != 0) claims[claimsList.tail].nextClaim = claimId; @@ -86,7 +86,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat StakeClaim memory claim = _getStakeClaim(_claimId); // early exit - if (claim.releaseAt > block.timestamp) { + if (claim.releasableAt > block.timestamp) { return (true, LinkedList.NULL_BYTES); } @@ -95,7 +95,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat // process feesProvisionTracker.release(serviceProvider, claim.tokens); - emit StakeClaimReleased(serviceProvider, _claimId, claim.tokens, claim.releaseAt); + emit StakeClaimReleased(serviceProvider, _claimId, claim.tokens, claim.releasableAt); // encode _acc = abi.encode(tokensClaimed + claim.tokens, serviceProvider); diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol index 2677f247e..c94fc6e00 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol @@ -32,7 +32,7 @@ interface IDataServiceFees is IDataService { // Timestamp when the claim was created uint256 createdAt; // Timestamp when the claim will expire and tokens can be released - uint256 releaseAt; + uint256 releasableAt; // Next claim in the linked list bytes32 nextClaim; } @@ -56,13 +56,13 @@ interface IDataServiceFees is IDataService { * @param serviceProvider The address of the service provider * @param claimId The id of the stake claim * @param tokens The amount of tokens released - * @param releaseAt The timestamp when the tokens were released + * @param releasableAt The timestamp when the tokens were released */ event StakeClaimReleased( address indexed serviceProvider, bytes32 indexed claimId, uint256 tokens, - uint256 releaseAt + uint256 releasableAt ); /** diff --git a/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol index fef08d094..a45a7bee2 100644 --- a/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol +++ b/packages/horizon/test/data-service/extensions/DataServiceFees.t.sol @@ -159,12 +159,12 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { assertEq(beforeLockedStake + calcValues.stakeToLock, afterLockedStake); // it should create a stake claim - (uint256 claimTokens, uint256 createdAt, uint256 releaseAt, bytes32 nextClaim) = dataService.claims( + (uint256 claimTokens, uint256 createdAt, uint256 releasableAt, bytes32 nextClaim) = dataService.claims( calcValues.predictedClaimId ); assertEq(claimTokens, calcValues.stakeToLock); assertEq(createdAt, block.timestamp); - assertEq(releaseAt, calcValues.unlockTimestamp); + assertEq(releasableAt, calcValues.unlockTimestamp); assertEq(nextClaim, bytes32(0)); // it should update the list @@ -196,12 +196,12 @@ contract DataServiceFeesTest is HorizonStakingSharedTest { head: beforeHead }); while (calcValues.head != bytes32(0) && (calcValues.claimsCount < numClaimsToRelease || numClaimsToRelease == 0)) { - (uint256 claimTokens, , uint256 releaseAt, bytes32 nextClaim) = dataService.claims(calcValues.head); - if (releaseAt > block.timestamp) { + (uint256 claimTokens, , uint256 releasableAt, bytes32 nextClaim) = dataService.claims(calcValues.head); + if (releasableAt > block.timestamp) { break; } - emit IDataServiceFees.StakeClaimReleased(serviceProvider, calcValues.head, claimTokens, releaseAt); + emit IDataServiceFees.StakeClaimReleased(serviceProvider, calcValues.head, claimTokens, releasableAt); calcValues.head = nextClaim; calcValues.tokensReleased += claimTokens; calcValues.claimsCount++; diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 67338fe64..a5563176b 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -328,7 +328,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { uint64 disputePeriod = disputeManager.getDisputePeriod(); assertEq(stakeClaim.tokens, tokensToLock); assertEq(stakeClaim.createdAt, block.timestamp); - assertEq(stakeClaim.releaseAt, block.timestamp + disputePeriod); + assertEq(stakeClaim.releasableAt, block.timestamp + disputePeriod); assertEq(stakeClaim.nextClaim, bytes32(0)); } else if (_paymentType == IGraphPayments.PaymentTypes.IndexingRewards) { // Update allocation after collecting rewards @@ -419,7 +419,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { } function _getStakeClaim(bytes32 _claimId) private view returns (IDataServiceFees.StakeClaim memory) { - (uint256 tokens, uint256 createdAt, uint256 releaseAt, bytes32 nextClaim) = subgraphService.claims(_claimId); - return IDataServiceFees.StakeClaim(tokens, createdAt, releaseAt, nextClaim); + (uint256 tokens, uint256 createdAt, uint256 releasableAt, bytes32 nextClaim) = subgraphService.claims(_claimId); + return IDataServiceFees.StakeClaim(tokens, createdAt, releasableAt, nextClaim); } } From 78821abd2428fd94a25a361dcae6e9dfcf06c9b1 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 19:04:03 +0100 Subject: [PATCH 234/343] fix: "Resolve the conflicting dispute" updated to "Draw the conflicting dispute". --- packages/contracts/contracts/disputes/DisputeManager.sol | 2 +- packages/subgraph-service/contracts/DisputeManager.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/contracts/contracts/disputes/DisputeManager.sol b/packages/contracts/contracts/disputes/DisputeManager.sol index 6700ec341..53bf43b1e 100644 --- a/packages/contracts/contracts/disputes/DisputeManager.sol +++ b/packages/contracts/contracts/disputes/DisputeManager.sol @@ -606,7 +606,7 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa } /** - * @dev Resolve the conflicting dispute if there is any for the one passed to this function. + * @dev Draw the conflicting dispute if there is any for the one passed to this function. * @param _dispute Dispute * @return True if resolved */ diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 8bf0f363b..f7e6be9ab 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -560,7 +560,7 @@ contract DisputeManager is } /** - * @notice Resolve the conflicting dispute if there is any for the one passed to this function. + * @notice Draw the conflicting dispute if there is any for the one passed to this function. * @param _dispute Dispute * @return True if resolved */ From 99d9bba0ffaaacac162364b0f8bf6e71e8a9856c Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 19:27:16 +0100 Subject: [PATCH 235/343] fix: MAX_THAWING_PERIOD rename to MAX_WAIT_PERIOD in PaymentsEscrow and Constants --- .../horizon/contracts/interfaces/IPaymentsEscrow.sol | 4 ++-- packages/horizon/contracts/payments/PaymentsEscrow.sol | 10 +++++----- packages/subgraph-service/test/SubgraphBaseTest.t.sol | 2 +- packages/subgraph-service/test/utils/Constants.sol | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 4b98cf0a5..47d5c8308 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -131,9 +131,9 @@ interface IPaymentsEscrow { /** * @notice Thrown when setting the thawing period to a value greater than the maximum * @param thawingPeriod The thawing period - * @param maxThawingPeriod The maximum thawing period + * @param maxWaitPeriod The maximum wait period */ - error PaymentsEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxThawingPeriod); + error PaymentsEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxWaitPeriod); /** * @notice Thrown when a collector has insufficient allowance to collect funds diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 5d0694346..b96bb56be 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -31,7 +31,7 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, /// @notice The maximum thawing period (in seconds) for both escrow withdrawal and signer revocation /// @dev This is a precautionary measure to avoid inadvertedly locking funds for too long - uint256 public constant MAX_THAWING_PERIOD = 90 days; + uint256 public constant MAX_WAIT_PERIOD = 90 days; /// @notice Thawing period in seconds for authorized collectors uint256 public immutable REVOKE_COLLECTOR_THAWING_PERIOD; @@ -56,12 +56,12 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, uint256 withdrawEscrowThawingPeriod ) GraphDirectory(controller) { require( - revokeCollectorThawingPeriod <= MAX_THAWING_PERIOD, - PaymentsEscrowThawingPeriodTooLong(revokeCollectorThawingPeriod, MAX_THAWING_PERIOD) + revokeCollectorThawingPeriod <= MAX_WAIT_PERIOD, + PaymentsEscrowThawingPeriodTooLong(revokeCollectorThawingPeriod, MAX_WAIT_PERIOD) ); require( - withdrawEscrowThawingPeriod <= MAX_THAWING_PERIOD, - PaymentsEscrowThawingPeriodTooLong(withdrawEscrowThawingPeriod, MAX_THAWING_PERIOD) + withdrawEscrowThawingPeriod <= MAX_WAIT_PERIOD, + PaymentsEscrowThawingPeriodTooLong(withdrawEscrowThawingPeriod, MAX_WAIT_PERIOD) ); REVOKE_COLLECTOR_THAWING_PERIOD = revokeCollectorThawingPeriod; diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index 6ab0c6d24..43065add6 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -189,7 +189,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { resetPrank(users.deployer); subgraphService.transferOwnership(users.governor); resetPrank(users.governor); - staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); + staking.setMaxThawingPeriod(MAX_WAIT_PERIOD); epochManager.setEpochLength(EPOCH_LENGTH); subgraphService.setMaxPOIStaleness(maxPOIStaleness); subgraphService.setCurationCut(curationCut); diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index e70ca8b41..eabf5e7b2 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -18,7 +18,7 @@ abstract contract Constants { uint256 public constant maxPOIStaleness = 28 days; uint256 public constant curationCut = 10000; // Staking - uint64 internal constant MAX_THAWING_PERIOD = 28 days; + uint64 internal constant MAX_WAIT_PERIOD = 28 days; // GraphEscrow parameters uint256 internal constant withdrawEscrowThawingPeriod = 60; uint256 internal constant revokeCollectorThawingPeriod = 60; From 9503f1dc054c9b4ee80611b7721bc7b9a4a04491 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 20 Sep 2024 19:29:55 +0100 Subject: [PATCH 236/343] fix: challenger and submitter updated to fisherman. --- .../contracts/disputes/DisputeManager.sol | 30 ++++++++--------- .../contracts/test/unit/disputes/common.ts | 4 +-- .../contracts/DisputeManager.sol | 32 +++++++++---------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/packages/contracts/contracts/disputes/DisputeManager.sol b/packages/contracts/contracts/disputes/DisputeManager.sol index 53bf43b1e..fed301de0 100644 --- a/packages/contracts/contracts/disputes/DisputeManager.sol +++ b/packages/contracts/contracts/disputes/DisputeManager.sol @@ -29,7 +29,7 @@ import "./IDisputeManager.sol"; * Indexers present a Proof of Indexing (POI) when they close allocations to prove * they were indexing a subgraph. The Staking contract emits that proof with the format * keccak256(indexer.address, POI). - * Any challenger can dispute the validity of a POI by submitting a dispute to this contract + * Any fisherman can dispute the validity of a POI by submitting a dispute to this contract * along with a deposit. * * Arbitration: @@ -355,8 +355,8 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa * @param _deposit Amount of tokens staked as deposit */ function createQueryDispute(bytes calldata _attestationData, uint256 _deposit) external override returns (bytes32) { - // Get funds from submitter - _pullSubmitterDeposit(_deposit); + // Get funds from fisherman + _pullFishermanDeposit(_deposit); // Create a dispute return @@ -372,7 +372,7 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa * @dev Create query disputes for two conflicting attestations. * A conflicting attestation is a proof presented by two different indexers * where for the same request on a subgraph the response is different. - * For this type of dispute the submitter is not required to present a deposit + * For this type of dispute the fisherman is not required to present a deposit * as one of the attestation is considered to be right. * Two linked disputes will be created and if the arbitrator resolve one, the other * one will be automatically resolved. @@ -470,14 +470,14 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa /** * @dev Create an indexing dispute for the arbitrator to resolve. * The disputes are created in reference to an allocationID - * This function is called by a challenger that will need to `_deposit` at + * This function is called by a fisherman that will need to `_deposit` at * least `minimumDeposit` GRT tokens. * @param _allocationID The allocation to dispute * @param _deposit Amount of tokens staked as deposit */ function createIndexingDispute(address _allocationID, uint256 _deposit) external override returns (bytes32) { - // Get funds from submitter - _pullSubmitterDeposit(_deposit); + // Get funds from fisherman + _pullFishermanDeposit(_deposit); // Create a dispute return _createIndexingDisputeWithAllocation(msg.sender, _deposit, _allocationID); @@ -485,7 +485,7 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa /** * @dev Create indexing dispute internal function. - * @param _fisherman The challenger creating the dispute + * @param _fisherman The fisherman creating the dispute * @param _deposit Amount of tokens staked as deposit * @param _allocationID Allocation disputed */ @@ -621,10 +621,10 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa } /** - * @dev Pull deposit from submitter account. + * @dev Pull deposit from fisherman account. * @param _deposit Amount of tokens to deposit */ - function _pullSubmitterDeposit(uint256 _deposit) private { + function _pullFishermanDeposit(uint256 _deposit) private { // Ensure that fisherman has staked at least the minimum amount require(_deposit >= minimumDeposit, "Dispute deposit is under minimum required"); @@ -633,17 +633,17 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa } /** - * @dev Make the staking contract slash the indexer and reward the challenger. - * Give the challenger a reward equal to the fishermanRewardPercentage of slashed amount + * @dev Make the staking contract slash the indexer and reward the fisherman. + * Give the fisherman a reward equal to the fishermanRewardPercentage of slashed amount * @param _indexer Address of the indexer - * @param _challenger Address of the challenger + * @param _fisherman Address of the fisherman * @param _disputeType Type of dispute * @return slashAmount Dispute slash amount * @return rewardsAmount Dispute rewards amount */ function _slashIndexer( address _indexer, - address _challenger, + address _fisherman, DisputeType _disputeType ) private returns (uint256 slashAmount, uint256 rewardsAmount) { IStaking staking = staking(); @@ -660,7 +660,7 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa // Have staking contract slash the indexer and reward the fisherman // Give the fisherman a reward equal to the fishermanRewardPercentage of slashed amount - staking.slash(_indexer, slashAmount, rewardsAmount, _challenger); + staking.slash(_indexer, slashAmount, rewardsAmount, _fisherman); } /** diff --git a/packages/contracts/test/unit/disputes/common.ts b/packages/contracts/test/unit/disputes/common.ts index 37d77fd5a..f72f3c6cf 100644 --- a/packages/contracts/test/unit/disputes/common.ts +++ b/packages/contracts/test/unit/disputes/common.ts @@ -16,7 +16,7 @@ export interface Dispute { export function createQueryDisputeID( attestation: Attestation, indexerAddress: string, - submitterAddress: string, + fishermanAddress: string, ): string { return solidityKeccak256( ['bytes32', 'bytes32', 'bytes32', 'address', 'address'], @@ -25,7 +25,7 @@ export function createQueryDisputeID( attestation.responseCID, attestation.subgraphDeploymentID, indexerAddress, - submitterAddress, + fishermanAddress, ], ) } diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index f7e6be9ab..d900e6cf1 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -34,7 +34,7 @@ import { AttestationManager } from "./utilities/AttestationManager.sol"; * Indexers present a Proof of Indexing (POI) when they close allocations to prove * they were indexing a subgraph. The Staking contract emits that proof with the format * keccak256(indexer.address, POI). - * Any challenger can dispute the validity of a POI by submitting a dispute to this contract + * Any fisherman can dispute the validity of a POI by submitting a dispute to this contract * along with a deposit. * * Arbitration: @@ -127,18 +127,18 @@ contract DisputeManager is * @notice Create an indexing dispute for the arbitrator to resolve. * The disputes are created in reference to an allocationId and specifically * a POI for that allocation. - * This function is called by a challenger and it will pull `disputeDeposit` GRT tokens. + * This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens. * * Requirements: - * - Challenger must have previously approved this contract to pull `disputeDeposit` amount + * - fisherman must have previously approved this contract to pull `disputeDeposit` amount * of tokens from their balance. * * @param allocationId The allocation to dispute * @param poi The Proof of Indexing (POI) being disputed */ function createIndexingDispute(address allocationId, bytes32 poi) external override returns (bytes32) { - // Get funds from submitter - _pullSubmitterDeposit(); + // Get funds from fisherman + _pullFishermanDeposit(); // Create a dispute return _createIndexingDisputeWithAllocation(msg.sender, disputeDeposit, allocationId, poi); @@ -146,17 +146,17 @@ contract DisputeManager is /** * @notice Create a query dispute for the arbitrator to resolve. - * This function is called by a challenger and it will pull `disputeDeposit` GRT tokens. + * This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens. * * * Requirements: - * - Challenger must have previously approved this contract to pull `disputeDeposit` amount + * - fisherman must have previously approved this contract to pull `disputeDeposit` amount * of tokens from their balance. * - * @param attestationData Attestation bytes submitted by the challenger + * @param attestationData Attestation bytes submitted by the fisherman */ function createQueryDispute(bytes calldata attestationData) external override returns (bytes32) { - // Get funds from submitter - _pullSubmitterDeposit(); + // Get funds from fisherman + _pullFishermanDeposit(); // Create a dispute return @@ -172,7 +172,7 @@ contract DisputeManager is * @notice Create query disputes for two conflicting attestations. * A conflicting attestation is a proof presented by two different indexers * where for the same request on a subgraph the response is different. - * For this type of dispute the submitter is not required to present a deposit + * For this type of dispute the fisherman is not required to present a deposit * as one of the attestation is considered to be right. * Two linked disputes will be created and if the arbitrator resolve one, the other * one will be automatically resolved. @@ -515,7 +515,7 @@ contract DisputeManager is /** * @notice Create indexing dispute internal function. - * @param _fisherman The challenger creating the dispute + * @param _fisherman The fisherman creating the dispute * @param _deposit Amount of tokens staked as deposit * @param _allocationId Allocation disputed * @param _poi The POI being disputed @@ -590,16 +590,16 @@ contract DisputeManager is } /** - * @notice Pull `disputeDeposit` from submitter account. + * @notice Pull `disputeDeposit` from fisherman account. */ - function _pullSubmitterDeposit() private { + function _pullFishermanDeposit() private { // Transfer tokens to deposit from fisherman to this contract _graphToken().pullTokens(msg.sender, disputeDeposit); } /** - * @notice Make the subgraph service contract slash the indexer and reward the challenger. - * Give the challenger a reward equal to the fishermanRewardPercentage of slashed amount + * @notice Make the subgraph service contract slash the indexer and reward the fisherman. + * Give the fisherman a reward equal to the fishermanRewardPercentage of slashed amount * @param _indexer Address of the indexer * @param _tokensSlash Amount of tokens to slash from the indexer * @param _tokensStakeSnapshot Snapshot of the indexer's stake at the time of the dispute creation From 2729a376ac0be6386bcd7d02ea39e74d5cb4fc32 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Mon, 30 Sep 2024 15:44:50 +0100 Subject: [PATCH 237/343] fix: use new constants in subgraphservice.sol --- .../data-service/utilities/ProvisionManager.sol | 6 +++--- .../subgraph-service/contracts/SubgraphService.sol | 11 ++++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 8608fd2fa..b5c905ad5 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -25,11 +25,11 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa // Constants uint32 private constant DEFAULT_MIN_VERIFIER_CUT = type(uint32).min; - uint32 private constant DEFAULT_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM); + uint32 internal constant DEFAULT_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM); uint64 private constant DEFAULT_MIN_THAWING_PERIOD = type(uint64).min; - uint64 private constant DEFAULT_MAX_THAWING_PERIOD = type(uint64).max; + uint64 internal constant DEFAULT_MAX_THAWING_PERIOD = type(uint64).max; uint256 private constant DEFAULT_MIN_PROVISION_TOKENS = type(uint256).min; - uint256 private constant DEFAULT_MAX_PROVISION_TOKENS = type(uint256).max; + uint256 internal constant DEFAULT_MAX_PROVISION_TOKENS = type(uint256).max; /** * @notice Emitted when the provision tokens range is set. diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 5023e6160..909aa7750 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -21,9 +21,14 @@ import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol" import { Allocation } from "./libraries/Allocation.sol"; import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; +import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; + + + contract SubgraphService is Initializable, OwnableUpgradeable, + ProvisionManager, DataService, DataServicePausableUpgradeable, DataServiceFees, @@ -359,7 +364,7 @@ contract SubgraphService is * @notice See {ISubgraphService.setMinimumProvisionTokens} */ function setMinimumProvisionTokens(uint256 minimumProvisionTokens) external override onlyOwner { - _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max); + _setProvisionTokensRange(minimumProvisionTokens, DEFAULT_MAX_PROVISION_TOKENS); } /** @@ -473,7 +478,7 @@ contract SubgraphService is */ function _getThawingPeriodRange() internal view override returns (uint64 min, uint64 max) { uint64 disputePeriod = _disputeManager().getDisputePeriod(); - return (disputePeriod, type(uint64).max); + return (disputePeriod, DEFAULT_MAX_THAWING_PERIOD); } /** @@ -483,7 +488,7 @@ contract SubgraphService is */ function _getVerifierCutRange() internal view override returns (uint32 min, uint32 max) { uint32 verifierCut = _disputeManager().getVerifierCut(); - return (verifierCut, uint32(PPMMath.MAX_PPM)); + return (verifierCut, DEFAULT_MAX_VERIFIER_CUT); } /** From aa27c54a1b176b17a2334b40582645bb4860ed61 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Mon, 30 Sep 2024 17:56:02 +0100 Subject: [PATCH 238/343] fix: emit amount authorized + rescuded token in AuthorizedCollector/TokensRescued respectively. --- .../contracts/data-service/extensions/DataServiceRescuable.sol | 2 +- .../data-service/interfaces/IDataServiceRescuable.sol | 2 +- packages/horizon/contracts/interfaces/IPaymentsEscrow.sol | 3 ++- packages/horizon/contracts/payments/PaymentsEscrow.sol | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index 081950b8d..0d2f0750d 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -70,6 +70,6 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { if (Denominations.isNativeToken(_token)) Address.sendValue(payable(_to), _tokens); else SafeERC20.safeTransfer(IERC20(_token), _to, _tokens); - emit TokensRescued(msg.sender, _to, _tokens); + emit TokensRescued(msg.sender, _to, _token, _tokens); } } diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol index 811d3b92e..07e97ee8c 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol @@ -12,7 +12,7 @@ interface IDataServiceRescuable is IDataService { /** * @notice Emitted when tokens are rescued from the contract. */ - event TokensRescued(address indexed from, address indexed to, uint256 tokens); + event TokensRescued(address indexed from, address indexed to, address token, uint256 tokens); /** * @notice Emitted when a rescuer is set. diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 4b98cf0a5..40394900f 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -38,8 +38,9 @@ interface IPaymentsEscrow { * @notice Emitted when a payer authorizes a collector to collect funds * @param payer The address of the payer * @param collector The address of the collector + * @param allowance The number of tokens the collector is allowed to collect */ - event AuthorizedCollector(address indexed payer, address indexed collector); + event AuthorizedCollector(address indexed payer, address indexed collector, uint256 allowance); /** * @notice Emitted when a payer thaws a collector diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 5d0694346..4b76e2bc6 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -82,7 +82,7 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, require(allowance != 0, PaymentsEscrowInvalidZeroTokens()); Collector storage collector = authorizedCollectors[msg.sender][collector_]; collector.allowance += allowance; - emit AuthorizedCollector(msg.sender, collector_); + emit AuthorizedCollector(msg.sender, collector_, collector.allowance); } /** From 8ce493f79e179a6cdd35b9f12c3f8f74056852f3 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 1 Oct 2024 12:49:04 +0100 Subject: [PATCH 239/343] fix: direct bugs to new security contact email address. --- packages/horizon/contracts/payments/GraphPayments.sol | 3 ++- packages/horizon/contracts/payments/PaymentsEscrow.sol | 3 ++- .../horizon/contracts/payments/collectors/TAPCollector.sol | 3 ++- packages/horizon/contracts/staking/HorizonStaking.sol | 3 ++- packages/horizon/contracts/staking/HorizonStakingExtension.sol | 3 ++- packages/subgraph-service/contracts/DisputeManager.sol | 3 ++- packages/subgraph-service/contracts/SubgraphService.sol | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index ea3063d81..c621f62dc 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -16,7 +16,8 @@ import { GraphDirectory } from "../utilities/GraphDirectory.sol"; * @notice This contract is part of the Graph Horizon payments protocol. It's designed * to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a * set of pre established rules. - * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ + * @custom:security-contact Please email security+contracts@thegraph.com if you find any + * bugs. We may have an active bug bounty program. */ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, IGraphPayments { using TokenUtils for IGraphToken; diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index c7c4e72e5..46736ec3e 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -17,7 +17,8 @@ import { GraphDirectory } from "../utilities/GraphDirectory.sol"; * @notice This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT) * for payments made through the payments protocol for services provided * via a Graph Horizon data service. - * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ + * @custom:security-contact Please email security+contracts@thegraph.com if you find any + * bugs. We may have an active bug bounty program. */ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, IPaymentsEscrow { using TokenUtils for IGraphToken; diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index fe96b78f3..f9b228ead 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -17,7 +17,8 @@ import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; * @dev Note that the contract expects the RAV aggregate value to be monotonically increasing, each successive RAV for the same * (data service-payer-receiver) tuple should have a value greater than the previous one. The contract will keep track of the tokens * already collected and calculate the difference to collect. - * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ + * @custom:security-contact Please email security+contracts@thegraph.com if you find any + * bugs. We may have an active bug bounty program. */ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { using PPMMath for uint256; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index ea64fccda..6a5479878 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -24,7 +24,8 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; * This is due to the contract size limit on Arbitrum (24kB). The extension contract implements functionality to support * the legacy staking functions and the transfer tools. Both can be eventually removed without affecting the main * staking contract. - * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ + * @custom:security-contact Please email security+contracts@thegraph.com if you find any + * bugs. We may have an active bug bounty program. */ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { using TokenUtils for IGraphToken; diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index c6e6f5607..cbb70cc20 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -24,7 +24,8 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; * without losing rewards or having service interruptions. * @dev TODO: Once the transition period and the transfer tools are deemed not necessary this contract * can be removed. It's expected the transition period to last for a full allocation cycle (28 epochs). - * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ + * @custom:security-contact Please email security+contracts@thegraph.com if you find any + * bugs. We may have an active bug bounty program. */ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizonStakingExtension { using TokenUtils for IGraphToken; diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 7bc932782..ce3685948 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -40,7 +40,8 @@ import { AttestationManager } from "./utilities/AttestationManager.sol"; * Arbitration: * Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated * to a EOA or DAO. - * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ + * @custom:security-contact Please email security+contracts@thegraph.com if you find any + * bugs. We may have an active bug bounty program. */ contract DisputeManager is Initializable, diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 0d2676476..b2b43da40 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -23,7 +23,8 @@ import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; /** * @title SubgraphService contract - * @custom:security-contact Bug bounty program: https://immunefi.com/bug-bounty/thegraph/information/ + * @custom:security-contact Please email security+contracts@thegraph.com if you find any + * bugs. We may have an active bug bounty program. */ contract SubgraphService is Initializable, From b721f7254cad577bedb5f7a12495c634e7f7b1df Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 1 Oct 2024 13:41:51 +0100 Subject: [PATCH 240/343] fix: set _verifyAllocationProof visability private. --- .../subgraph-service/contracts/utilities/AllocationManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 97c3adf99..00a323b9a 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -465,7 +465,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * @param _allocationId The id of the allocation * @param _proof The EIP712 proof, an EIP712 signed message of (indexer,allocationId) */ - function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) internal view { + function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) private view { bytes32 digest = _encodeAllocationProof(_indexer, _allocationId); address signer = ECDSA.recover(digest, _proof); require(signer == _allocationId, AllocationManagerInvalidAllocationProof(signer, _allocationId)); From fbc6654d755e0ec96a019bf49a47f39c223125b6 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 1 Oct 2024 13:42:26 +0100 Subject: [PATCH 241/343] fix: set _getDelegatedTokensAvailable visability private. --- packages/horizon/contracts/staking/HorizonStakingBase.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index b55b39fd8..d9fb613c3 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -290,7 +290,7 @@ abstract contract HorizonStakingBase is /** * @notice See {IHorizonStakingBase-getDelegatedTokensAvailable}. */ - function _getDelegatedTokensAvailable(address _serviceProvider, address _verifier) internal view returns (uint256) { + function _getDelegatedTokensAvailable(address _serviceProvider, address _verifier) private view returns (uint256) { DelegationPoolInternal storage poolInternal = _getDelegationPool(_serviceProvider, _verifier); return poolInternal.tokens - poolInternal.tokensThawing; } From decde7fbf38d25d42b671c8a6a07aa966c4467e9 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 1 Oct 2024 13:44:05 +0100 Subject: [PATCH 242/343] fix: set _receiveIndexerStake _receiveDelegation visability private. --- .../horizon/contracts/staking/HorizonStakingExtension.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 66efe5521..d81e707b9 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -326,7 +326,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon function _receiveIndexerStake( uint256 _tokens, IL2StakingTypes.ReceiveIndexerStakeData memory _indexerData - ) internal { + ) private { address indexer = _indexerData.indexer; // Deposit tokens into the indexer stake _stake(indexer, _tokens); @@ -345,7 +345,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon function _receiveDelegation( uint256 _tokens, IL2StakingTypes.ReceiveDelegationData memory _delegationData - ) internal { + ) private { require(_provisions[_delegationData.indexer][SUBGRAPH_DATA_SERVICE_ADDRESS].createdAt != 0, "!provision"); // Get the delegation pool of the indexer DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; From b5d3a7d379b65ceaa841fccd760d2a7763537009 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 1 Oct 2024 13:44:57 +0100 Subject: [PATCH 243/343] fix: set _deposit visability private. --- packages/horizon/contracts/payments/PaymentsEscrow.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 5d0694346..756546c47 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -232,7 +232,7 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, * @param _receiver The address of the receiver * @param _tokens The amount of tokens to deposit */ - function _deposit(address _payer, address _receiver, uint256 _tokens) internal { + function _deposit(address _payer, address _receiver, uint256 _tokens) private { escrowAccounts[_payer][_receiver].balance += _tokens; _graphToken().pullTokens(msg.sender, _tokens); emit Deposit(_payer, _receiver, _tokens); From 32b39657bb2b462ac4c02068dba688318788ce65 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 1 Oct 2024 13:47:26 +0100 Subject: [PATCH 244/343] fix: set drawDispute visability external. --- packages/contracts/contracts/disputes/DisputeManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts/contracts/disputes/DisputeManager.sol b/packages/contracts/contracts/disputes/DisputeManager.sol index 6700ec341..013a21b03 100644 --- a/packages/contracts/contracts/disputes/DisputeManager.sol +++ b/packages/contracts/contracts/disputes/DisputeManager.sol @@ -579,7 +579,7 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa * @notice Ignore a dispute with ID `_disputeID` * @param _disputeID ID of the dispute to be disregarded */ - function drawDispute(bytes32 _disputeID) public override onlyArbitrator onlyPendingDispute(_disputeID) { + function drawDispute(bytes32 _disputeID) external override onlyArbitrator onlyPendingDispute(_disputeID) { Dispute storage dispute = disputes[_disputeID]; // Return deposit to the fisherman From 96b5c3c1eef410fec4dbc6e3ef673fdae267b7d5 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Mon, 30 Sep 2024 18:32:18 +0100 Subject: [PATCH 245/343] fix: emit both amount authorized and total authorized commit to now emit both the amount for which the collector was authorized and also the total amount for which they are now authorized --- .../data-service/interfaces/IDataServiceRescuable.sol | 4 ++++ .../horizon/contracts/interfaces/IPaymentsEscrow.sol | 10 ++++++++-- packages/horizon/contracts/payments/PaymentsEscrow.sol | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol index 07e97ee8c..67026f2d4 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol @@ -11,6 +11,10 @@ import { IDataService } from "./IDataService.sol"; interface IDataServiceRescuable is IDataService { /** * @notice Emitted when tokens are rescued from the contract. + * @param from The address initiating the rescue + * @param to The address receiving the rescued tokens + * @param token The address of the token being rescued + * @param tokens The amount of tokens rescued */ event TokensRescued(address indexed from, address indexed to, address token, uint256 tokens); diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 40394900f..cae2558e7 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -38,9 +38,15 @@ interface IPaymentsEscrow { * @notice Emitted when a payer authorizes a collector to collect funds * @param payer The address of the payer * @param collector The address of the collector - * @param allowance The number of tokens the collector is allowed to collect + * @param addedAllowance The amount of tokens added to the collector's allowance + * @param newTotalAllowance The new total allowance after addition */ - event AuthorizedCollector(address indexed payer, address indexed collector, uint256 allowance); + event AuthorizedCollector( + address indexed payer, + address indexed collector, + uint256 addedAllowance, + uint256 newTotalAllowance + ); /** * @notice Emitted when a payer thaws a collector diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 4b76e2bc6..0c775cd47 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -82,7 +82,7 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, require(allowance != 0, PaymentsEscrowInvalidZeroTokens()); Collector storage collector = authorizedCollectors[msg.sender][collector_]; collector.allowance += allowance; - emit AuthorizedCollector(msg.sender, collector_, collector.allowance); + emit AuthorizedCollector(msg.sender, collector_, allowance, collector.allowance); } /** From a598eca7e6ab93252d10197b8b0ea4228b39c7b8 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 1 Oct 2024 17:20:03 +0100 Subject: [PATCH 246/343] fix: set all ProvisionManager constants internal. --- .../contracts/data-service/utilities/ProvisionManager.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index b5c905ad5..1af1a28b4 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -24,11 +24,11 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa using UintRange for uint256; // Constants - uint32 private constant DEFAULT_MIN_VERIFIER_CUT = type(uint32).min; + uint32 internal constant DEFAULT_MIN_VERIFIER_CUT = type(uint32).min; uint32 internal constant DEFAULT_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM); - uint64 private constant DEFAULT_MIN_THAWING_PERIOD = type(uint64).min; + uint64 internal constant DEFAULT_MIN_THAWING_PERIOD = type(uint64).min; uint64 internal constant DEFAULT_MAX_THAWING_PERIOD = type(uint64).max; - uint256 private constant DEFAULT_MIN_PROVISION_TOKENS = type(uint256).min; + uint256 internal constant DEFAULT_MIN_PROVISION_TOKENS = type(uint256).min; uint256 internal constant DEFAULT_MAX_PROVISION_TOKENS = type(uint256).max; /** From de6c82214254106fbb354186e6b5981a58bd59cd Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 1 Oct 2024 17:21:30 +0100 Subject: [PATCH 247/343] fix: remove ProvisionManager inheritance. --- packages/subgraph-service/contracts/SubgraphService.sol | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 098307ceb..a928c0b0f 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -22,14 +22,12 @@ import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol" import { Allocation } from "./libraries/Allocation.sol"; import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; -import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; contract SubgraphService is Initializable, OwnableUpgradeable, - ProvisionManager, MulticallUpgradeable, DataService, DataServicePausableUpgradeable, From ffd1f79c1ec9b397de64be6ef8e7d3714b575ae0 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Tue, 1 Oct 2024 17:26:10 +0100 Subject: [PATCH 248/343] fix: remove whitespace. --- packages/subgraph-service/contracts/SubgraphService.sol | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index a928c0b0f..b4d1b3f4a 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -22,9 +22,6 @@ import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol" import { Allocation } from "./libraries/Allocation.sol"; import { LegacyAllocation } from "./libraries/LegacyAllocation.sol"; - - - contract SubgraphService is Initializable, OwnableUpgradeable, From f86b12a28f7810fb7a0e66da9b889306f09cb207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 1 Oct 2024 14:49:01 -0300 Subject: [PATCH 249/343] feat(horizon): deploy horizon with Hardhat Ignition (#1025) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(horizon): wip ignition deployment * feat: add ignition modules for horizon contracts Signed-off-by: Tomás Migone * feat: add deploy scripts for horizon staking contracts Signed-off-by: Tomás Migone * feat: first version of horizon contracts deployed with ignition Signed-off-by: Tomás Migone * feat: deploy subgraph service using ignition Signed-off-by: Tomás Migone * fix: remove deployment files for localhost Signed-off-by: Tomás Migone * chore: gitignore localhost deployment files for ignition Signed-off-by: Tomás Migone * chore: add deployment files for arbitrum sepolia and sepolia Signed-off-by: Tomás Migone * fix: deployment tweaks, add deployment files to github Signed-off-by: Tomás Migone * fix: use correct network name for arbitrum sepolia Signed-off-by: Tomás Migone * fix: hardhat build Signed-off-by: Tomás Migone --------- Signed-off-by: Tomás Migone --- .gitignore | 4 + packages/horizon/README.md | 22 +- packages/horizon/contracts/mocks/Dummy.sol | 5 + packages/horizon/hardhat.config.ts | 29 + .../ignition/configs/horizon.hardhat.json | 46 + .../artifacts/BridgeEscrow#BridgeEscrow.json | 159 ++ .../BridgeEscrow#BridgeEscrow_Instance.json | 159 ++ .../artifacts/BridgeEscrow#GraphProxy.json | 177 ++ .../artifacts/Controller#Controller.json | 349 +++ .../artifacts/Curation#Curation.json | 707 +++++ .../artifacts/Curation#Curation_Instance.json | 707 +++++ .../Curation#GraphCurationToken.json | 414 +++ .../artifacts/Curation#GraphProxy.json | 177 ++ .../artifacts/EpochManager#EpochManager.json | 364 +++ .../EpochManager#EpochManager_Instance.json | 364 +++ .../artifacts/EpochManager#GraphProxy.json | 177 ++ .../GraphHorizon_Periphery#Dummy.json | 10 + .../GraphPayments#GraphPayments.json | 308 +++ .../GraphPayments#GraphPayments_Instance.json | 308 +++ .../GraphProxyAdmin#GraphProxyAdmin.json | 234 ++ .../artifacts/GraphToken#GraphProxy.json | 177 ++ .../artifacts/GraphToken#GraphToken.json | 750 ++++++ .../GraphToken#GraphToken_Instance.json | 750 ++++++ .../GraphTokenGateway#GraphProxy.json | 177 ++ .../GraphTokenGateway#GraphTokenGateway.json | 647 +++++ ...kenGateway#GraphTokenGateway_Instance.json | 647 +++++ ...izonProxies#GraphProxy_HorizonStaking.json | 177 ++ ...zonProxies#OZProxyDummy_GraphPayments.json | 10 + ...onProxies#OZProxyDummy_PaymentsEscrow.json | 10 + ...rizonProxies#ProxyAdmin_GraphPayments.json | 132 + ...izonProxies#ProxyAdmin_PaymentsEscrow.json | 132 + .../HorizonProxies#RegisteredDummy.json | 10 + ...sparentUpgradeableProxy_GraphPayments.json | 116 + ...parentUpgradeableProxy_PaymentsEscrow.json | 116 + .../HorizonStaking#HorizonStaking.json | 2280 +++++++++++++++++ ...orizonStaking#HorizonStaking_Instance.json | 2280 +++++++++++++++++ ...onStakingExtension#ExponentialRebates.json | 55 + ...kingExtension#HorizonStakingExtension.json | 1263 +++++++++ .../PaymentsEscrow#PaymentsEscrow.json | 769 ++++++ ...aymentsEscrow#PaymentsEscrow_Instance.json | 769 ++++++ .../artifacts/RewardsManager#GraphProxy.json | 177 ++ .../RewardsManager#RewardsManager.json | 635 +++++ ...ewardsManager#RewardsManager_Instance.json | 635 +++++ .../artifacts/TAPCollector#TAPCollector.json | 450 ++++ .../chain-11155111/deployed_addresses.json | 41 + .../deployments/chain-11155111/journal.jsonl | 318 +++ .../artifacts/BridgeEscrow#BridgeEscrow.json | 159 ++ .../BridgeEscrow#BridgeEscrow_Instance.json | 159 ++ .../artifacts/BridgeEscrow#GraphProxy.json | 177 ++ .../artifacts/Controller#Controller.json | 349 +++ .../artifacts/Curation#Curation.json | 707 +++++ .../artifacts/Curation#Curation_Instance.json | 707 +++++ .../Curation#GraphCurationToken.json | 414 +++ .../artifacts/Curation#GraphProxy.json | 177 ++ .../artifacts/EpochManager#EpochManager.json | 364 +++ .../EpochManager#EpochManager_Instance.json | 364 +++ .../artifacts/EpochManager#GraphProxy.json | 177 ++ .../GraphHorizon_Periphery#Dummy.json | 10 + .../GraphPayments#GraphPayments.json | 308 +++ .../GraphPayments#GraphPayments_Instance.json | 308 +++ .../GraphProxyAdmin#GraphProxyAdmin.json | 234 ++ .../artifacts/GraphToken#GraphProxy.json | 177 ++ .../artifacts/GraphToken#GraphToken.json | 750 ++++++ .../GraphToken#GraphToken_Instance.json | 750 ++++++ .../GraphTokenGateway#GraphProxy.json | 177 ++ .../GraphTokenGateway#GraphTokenGateway.json | 647 +++++ ...kenGateway#GraphTokenGateway_Instance.json | 647 +++++ ...izonProxies#GraphProxy_HorizonStaking.json | 177 ++ ...zonProxies#OZProxyDummy_GraphPayments.json | 10 + ...onProxies#OZProxyDummy_PaymentsEscrow.json | 10 + ...rizonProxies#ProxyAdmin_GraphPayments.json | 132 + ...izonProxies#ProxyAdmin_PaymentsEscrow.json | 132 + .../HorizonProxies#RegisteredDummy.json | 10 + ...sparentUpgradeableProxy_GraphPayments.json | 116 + ...parentUpgradeableProxy_PaymentsEscrow.json | 116 + .../HorizonStaking#HorizonStaking.json | 2280 +++++++++++++++++ ...orizonStaking#HorizonStaking_Instance.json | 2280 +++++++++++++++++ ...onStakingExtension#ExponentialRebates.json | 55 + ...kingExtension#HorizonStakingExtension.json | 1263 +++++++++ .../PaymentsEscrow#PaymentsEscrow.json | 769 ++++++ ...aymentsEscrow#PaymentsEscrow_Instance.json | 769 ++++++ .../artifacts/RewardsManager#GraphProxy.json | 177 ++ .../RewardsManager#RewardsManager.json | 635 +++++ ...ewardsManager#RewardsManager_Instance.json | 635 +++++ .../artifacts/TAPCollector#TAPCollector.json | 450 ++++ .../chain-421614/deployed_addresses.json | 41 + .../deployments/chain-421614/journal.jsonl | 328 +++ packages/horizon/ignition/modules/core.ts | 15 + .../ignition/modules/core/GraphPayments.ts | 31 + .../ignition/modules/core/HorizonProxies.ts | 42 + .../ignition/modules/core/HorizonStaking.ts | 38 + .../modules/core/HorizonStakingExtension.ts | 26 + .../ignition/modules/core/PaymentsEscrow.ts | 32 + .../ignition/modules/core/TAPCollector.ts | 18 + packages/horizon/ignition/modules/horizon.ts | 31 + .../horizon/ignition/modules/periphery.ts | 57 + .../modules/periphery/BridgeEscrow.ts | 18 + .../ignition/modules/periphery/Controller.ts | 17 + .../ignition/modules/periphery/Curation.ts | 23 + .../modules/periphery/EpochManager.ts | 19 + .../modules/periphery/GraphProxyAdmin.ts | 13 + .../ignition/modules/periphery/GraphToken.ts | 33 + .../modules/periphery/GraphTokenGateway.ts | 22 + .../modules/periphery/RewardsManager.ts | 26 + .../ignition/modules/proxy/GraphProxy.ts | 36 + .../proxy/TransparentUpgradeableProxy.ts | 33 + packages/horizon/package.json | 13 +- packages/horizon/scripts/deploy.ts | 16 + packages/horizon/tsconfig.json | 1 + packages/subgraph-service/hardhat.config.ts | 2 +- .../configs/subgraph-service.hardhat.json | 13 + .../ignition/modules/DisputeManager.ts | 36 + .../ignition/modules/Proxies.ts | 10 + .../ignition/modules/SubgraphService.ts | 34 + packages/subgraph-service/package.json | 9 +- packages/subgraph-service/scripts/deploy.ts | 117 +- packages/subgraph-service/tsconfig.json | 5 +- yarn.lock | 234 +- 118 files changed, 37341 insertions(+), 69 deletions(-) create mode 100644 packages/horizon/contracts/mocks/Dummy.sol create mode 100644 packages/horizon/ignition/configs/horizon.hardhat.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#BridgeEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#BridgeEscrow_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/Controller#Controller.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#Curation.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#Curation_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#GraphCurationToken.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#EpochManager.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#EpochManager_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphHorizon_Periphery#Dummy.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphPayments#GraphPayments.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphPayments#GraphPayments_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphProxyAdmin#GraphProxyAdmin.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphToken.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphToken_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphTokenGateway.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#RegisteredDummy.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStaking#HorizonStaking.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStaking#HorizonStaking_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStakingExtension#ExponentialRebates.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStakingExtension#HorizonStakingExtension.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/PaymentsEscrow#PaymentsEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#RewardsManager.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#RewardsManager_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/artifacts/TAPCollector#TAPCollector.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/deployed_addresses.json create mode 100644 packages/horizon/ignition/deployments/chain-11155111/journal.jsonl create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/Controller#Controller.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#Curation.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/deployed_addresses.json create mode 100644 packages/horizon/ignition/deployments/chain-421614/journal.jsonl create mode 100644 packages/horizon/ignition/modules/core.ts create mode 100644 packages/horizon/ignition/modules/core/GraphPayments.ts create mode 100644 packages/horizon/ignition/modules/core/HorizonProxies.ts create mode 100644 packages/horizon/ignition/modules/core/HorizonStaking.ts create mode 100644 packages/horizon/ignition/modules/core/HorizonStakingExtension.ts create mode 100644 packages/horizon/ignition/modules/core/PaymentsEscrow.ts create mode 100644 packages/horizon/ignition/modules/core/TAPCollector.ts create mode 100644 packages/horizon/ignition/modules/horizon.ts create mode 100644 packages/horizon/ignition/modules/periphery.ts create mode 100644 packages/horizon/ignition/modules/periphery/BridgeEscrow.ts create mode 100644 packages/horizon/ignition/modules/periphery/Controller.ts create mode 100644 packages/horizon/ignition/modules/periphery/Curation.ts create mode 100644 packages/horizon/ignition/modules/periphery/EpochManager.ts create mode 100644 packages/horizon/ignition/modules/periphery/GraphProxyAdmin.ts create mode 100644 packages/horizon/ignition/modules/periphery/GraphToken.ts create mode 100644 packages/horizon/ignition/modules/periphery/GraphTokenGateway.ts create mode 100644 packages/horizon/ignition/modules/periphery/RewardsManager.ts create mode 100644 packages/horizon/ignition/modules/proxy/GraphProxy.ts create mode 100644 packages/horizon/ignition/modules/proxy/TransparentUpgradeableProxy.ts create mode 100644 packages/horizon/scripts/deploy.ts create mode 100644 packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json create mode 100644 packages/subgraph-service/ignition/modules/DisputeManager.ts create mode 100644 packages/subgraph-service/ignition/modules/Proxies.ts create mode 100644 packages/subgraph-service/ignition/modules/SubgraphService.ts diff --git a/.gitignore b/.gitignore index 55602edb4..01a1de8c7 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,7 @@ cache_forge tx-builder-*.json !tx-builder-template.json + +# Hardhat Ignition +**/chain-31337/ +!**/ignition/**/artifacts/ diff --git a/packages/horizon/README.md b/packages/horizon/README.md index 7be82e5d6..d3a0d6200 100644 --- a/packages/horizon/README.md +++ b/packages/horizon/README.md @@ -1,13 +1,17 @@ -# Sample Hardhat Project +# 🌅 Graph Horizon 🌅 -This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract. +Graph Horizon is the next evolution of the Graph Protocol. -Try running some of the following tasks: +## Deployment -```shell -npx hardhat help -npx hardhat test -REPORT_GAS=true npx hardhat test -npx hardhat node -npx hardhat run scripts/deploy.ts +We use Hardhat Ignition to deploy the contracts. To build and deploy the contracts run the following commands: + +```bash +yarn install +yarn build +npx hardhat ignition deploy ./ignition/modules/horizon.ts \ + --parameters ./ignition/configs/graph.hardhat.json \ + --network hardhat ``` + +You can use any network defined in `hardhat.config.ts` by replacing `hardhat` with the network name. \ No newline at end of file diff --git a/packages/horizon/contracts/mocks/Dummy.sol b/packages/horizon/contracts/mocks/Dummy.sol new file mode 100644 index 000000000..e6a575d0f --- /dev/null +++ b/packages/horizon/contracts/mocks/Dummy.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +pragma solidity 0.8.27; + +contract Dummy {} diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index de221c723..57f1d8f89 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -1,5 +1,6 @@ import '@nomicfoundation/hardhat-foundry' import '@nomicfoundation/hardhat-toolbox' +import '@nomicfoundation/hardhat-ignition-ethers' import 'hardhat-storage-layout' import 'hardhat-contract-sizer' @@ -19,6 +20,34 @@ const config: HardhatUserConfig = { artifacts: './build/contracts', sources: './contracts', }, + networks: { + hardhat: { + accounts: { + mnemonic: 'myth like bonus scare over problem client lizard pioneer submit female collect', + }, + }, + arbitrumSepolia: { + url: 'https://sepolia-rollup.arbitrum.io/rpc', + accounts: { + mnemonic: process.env.MNEMONIC ?? '', + }, + }, + }, + etherscan: { + apiKey: { + arbitrumSepolia: process.env.ETHERSCAN_API_KEY ?? '', + }, + customChains: [ + { + network: 'arbitrumSepolia', + chainId: 421614, + urls: { + apiURL: 'https://api-sepolia.arbiscan.io/api', + browserURL: 'https://sepolia.arbiscan.io/', + }, + }, + ], + }, } export default config diff --git a/packages/horizon/ignition/configs/horizon.hardhat.json b/packages/horizon/ignition/configs/horizon.hardhat.json new file mode 100644 index 000000000..894a2ed59 --- /dev/null +++ b/packages/horizon/ignition/configs/horizon.hardhat.json @@ -0,0 +1,46 @@ +{ + "GraphProxyAdmin": { + "governor": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0" + }, + "Controller": { + "governor": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0", + "pauseGuardian": "0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC" + }, + "RewardsManager": { + "subgraphAvailabilityOracle": "0xd03ea8624C8C5987235048901fB614fDcA89b117", + "issuancePerBlock": "114155251141552511415n", + "subgraphServiceAddress": "0x0000000000000000000000000000000000000000" + }, + "EpochManager": { + "epochLength": 60 + }, + "GraphTokenGateway": { + "pauseGuardian": "0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC" + }, + "Curation": { + "curationTaxPercentage": 10000, + "minimumCurationDeposit": 1 + }, + "GraphToken": { + "initialSupply": "10000000000000000000000000000n", + "governor": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0" + }, + "HorizonStaking": { + "subgraphServiceAddress": "0x0000000000000000000000000000000000000000", + "maxThawingPeriod": 2419200 + }, + "HorizonStakingExtension": { + "subgraphServiceAddress": "0x0000000000000000000000000000000000000000" + }, + "GraphPayments": { + "protocolPaymentCut": 10000 + }, + "PaymentsEscrow": { + "revokeCollectorThawingPeriod": 10000, + "withdrawEscrowThawingPeriod": 10000 + }, + "TAPCollector": { + "eip712Name": "TAPCollector", + "eip712Version": "1" + } +} diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#BridgeEscrow.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#BridgeEscrow.json new file mode 100644 index 000000000..3e87653d9 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#BridgeEscrow.json @@ -0,0 +1,159 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BridgeEscrow", + "sourceName": "contracts/gateway/BridgeEscrow.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "approveAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "revokeAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#BridgeEscrow_Instance.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#BridgeEscrow_Instance.json new file mode 100644 index 000000000..3e87653d9 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#BridgeEscrow_Instance.json @@ -0,0 +1,159 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BridgeEscrow", + "sourceName": "contracts/gateway/BridgeEscrow.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "approveAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "revokeAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#GraphProxy.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/BridgeEscrow#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/Controller#Controller.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Controller#Controller.json new file mode 100644 index 000000000..c74445ff4 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Controller#Controller.json @@ -0,0 +1,349 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Controller", + "sourceName": "contracts/governance/Controller.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PartialPauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "SetContractProxy", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + } + ], + "name": "getContractProxy", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPausePartialTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "partialPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + } + ], + "name": "setContractProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_toPause", + "type": "bool" + } + ], + "name": "setPartialPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_toPause", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + } + ], + "name": "unsetContractProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "updateController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506100243361003360201b6109b21760201c565b61002e6001610055565b6100e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff1615158115151415610075576100e4565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff910416156100a157426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a15b50565b610ba0806100f66000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80636cda3798116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80636cda3798146101ce57806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b806348bde20c116100de57806348bde20c146101795780634fc07d751461019f57806356371bd8146101a75780635c975abb146101c65761010b565b80630c340a241461011057806316c38b3c1461013457806324a3d622146101555780632e292fc71461015d575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b6101536004803603602081101561014a57600080fd5b503515156102c7565b005b610118610331565b610165610340565b604080519115158252519081900360200190f35b6101536004803603602081101561018f57600080fd5b50356001600160a01b0316610350565b61011861040c565b610153600480360360208110156101bd57600080fd5b5035151561041b565b610165610482565b6101d6610492565b60408051918252519081900360200190f35b610153610498565b6101536004803603602081101561020657600080fd5b50356105a6565b6101d6610651565b6101536004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b6101536004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b6101536004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b6000546001600160a01b03163314806102ea57506004546001600160a01b031633145b6103255760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103a8576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610403576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61032e81610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061043e57506004546001600160a01b031633145b6104795760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e81610ab7565b600154600160a81b900460ff1690565b60025481565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f45761032e565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad75761032e565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca2646970667358221220c742dbbf8f38fda928d26053c584788bb7d7b003131594b9e14f1381ebbdbb3064736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80636cda3798116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80636cda3798146101ce57806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b806348bde20c116100de57806348bde20c146101795780634fc07d751461019f57806356371bd8146101a75780635c975abb146101c65761010b565b80630c340a241461011057806316c38b3c1461013457806324a3d622146101555780632e292fc71461015d575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b6101536004803603602081101561014a57600080fd5b503515156102c7565b005b610118610331565b610165610340565b604080519115158252519081900360200190f35b6101536004803603602081101561018f57600080fd5b50356001600160a01b0316610350565b61011861040c565b610153600480360360208110156101bd57600080fd5b5035151561041b565b610165610482565b6101d6610492565b60408051918252519081900360200190f35b610153610498565b6101536004803603602081101561020657600080fd5b50356105a6565b6101d6610651565b6101536004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b6101536004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b6101536004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b6000546001600160a01b03163314806102ea57506004546001600160a01b031633145b6103255760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103a8576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610403576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61032e81610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061043e57506004546001600160a01b031633145b6104795760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e81610ab7565b600154600160a81b900460ff1690565b60025481565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f45761032e565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad75761032e565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca2646970667358221220c742dbbf8f38fda928d26053c584788bb7d7b003131594b9e14f1381ebbdbb3064736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#Curation.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#Curation.json new file mode 100644 index 000000000..f9d96cee6 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#Curation.json @@ -0,0 +1,707 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2Curation", + "sourceName": "contracts/l2/curation/L2Curation.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + } + ], + "name": "Burned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Collected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationTax", + "type": "uint256" + } + ], + "name": "Signalled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "bondingCurve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_tokensOutMin", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTaxPercentage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTokenMaster", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultReserveRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCuratorSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_curationTaxPercentage", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isCurated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumCurationDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_signalOutMin", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "mintTaxFree", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pools", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "reserveRatio", + "type": "uint32" + }, + { + "internalType": "contract IGraphCurationToken", + "name": "gcs", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_percentage", + "type": "uint32" + } + ], + "name": "setCurationTaxPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + } + ], + "name": "setCurationTokenMaster", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "setDefaultReserveRatio", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "setMinimumCurationDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + } + ], + "name": "signalToTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalToTokensNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#Curation_Instance.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#Curation_Instance.json new file mode 100644 index 000000000..f9d96cee6 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#Curation_Instance.json @@ -0,0 +1,707 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2Curation", + "sourceName": "contracts/l2/curation/L2Curation.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + } + ], + "name": "Burned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Collected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationTax", + "type": "uint256" + } + ], + "name": "Signalled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "bondingCurve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_tokensOutMin", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTaxPercentage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTokenMaster", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultReserveRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCuratorSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_curationTaxPercentage", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isCurated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumCurationDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_signalOutMin", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "mintTaxFree", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pools", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "reserveRatio", + "type": "uint32" + }, + { + "internalType": "contract IGraphCurationToken", + "name": "gcs", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_percentage", + "type": "uint32" + } + ], + "name": "setCurationTaxPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + } + ], + "name": "setCurationTokenMaster", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "setDefaultReserveRatio", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "setMinimumCurationDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + } + ], + "name": "signalToTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalToTokensNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#GraphCurationToken.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#GraphCurationToken.json new file mode 100644 index 000000000..b7220dcc7 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#GraphCurationToken.json @@ -0,0 +1,414 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphCurationToken", + "sourceName": "contracts/curation/GraphCurationToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506114ec806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#GraphProxy.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/Curation#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#EpochManager.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#EpochManager.json new file mode 100644 index 000000000..cd09f36f8 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#EpochManager.json @@ -0,0 +1,364 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "EpochManager", + "sourceName": "contracts/epochs/EpochManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + } + ], + "name": "EpochLengthUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "EpochRun", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "blockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blockNum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlockSinceStart", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epoch", + "type": "uint256" + } + ], + "name": "epochsSince", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochsSinceUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isCurrentEpochRun", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastRunEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "runEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#EpochManager_Instance.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#EpochManager_Instance.json new file mode 100644 index 000000000..cd09f36f8 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#EpochManager_Instance.json @@ -0,0 +1,364 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "EpochManager", + "sourceName": "contracts/epochs/EpochManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + } + ], + "name": "EpochLengthUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "EpochRun", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "blockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blockNum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlockSinceStart", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epoch", + "type": "uint256" + } + ], + "name": "epochsSince", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochsSinceUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isCurrentEpochRun", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastRunEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "runEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#GraphProxy.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/EpochManager#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphHorizon_Periphery#Dummy.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphHorizon_Periphery#Dummy.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphHorizon_Periphery#Dummy.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphPayments#GraphPayments.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphPayments#GraphPayments.json new file mode 100644 index 000000000..d9b94acde --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphPayments#GraphPayments.json @@ -0,0 +1,308 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphPayments", + "sourceName": "contracts/payments/GraphPayments.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "GraphPaymentsInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "name": "GraphPaymentsInvalidProtocolPaymentCut", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationPool", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensProtocol", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [], + "name": "PROTOCOL_PAYMENT_CUT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphPayments#GraphPayments_Instance.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphPayments#GraphPayments_Instance.json new file mode 100644 index 000000000..d9b94acde --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphPayments#GraphPayments_Instance.json @@ -0,0 +1,308 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphPayments", + "sourceName": "contracts/payments/GraphPayments.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "GraphPaymentsInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "name": "GraphPaymentsInvalidProtocolPaymentCut", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationPool", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensProtocol", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [], + "name": "PROTOCOL_PAYMENT_CUT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphProxyAdmin#GraphProxyAdmin.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphProxyAdmin#GraphProxyAdmin.json new file mode 100644 index 000000000..07f0623c5 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphProxyAdmin#GraphProxyAdmin.json @@ -0,0 +1,234 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxyAdmin", + "sourceName": "contracts/upgrades/GraphProxyAdmin.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract GraphUpgradeable", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract GraphUpgradeable", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "getProxyPendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506100243361002960201b610a0c1760201c565b61004b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610a648061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphProxy.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphToken.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphToken.json new file mode 100644 index 000000000..5889eeaf0 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphToken.json @@ -0,0 +1,750 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphToken", + "sourceName": "contracts/l2/token/L2GraphToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeBurned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "gateway", + "type": "address" + } + ], + "name": "GatewaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Address", + "type": "address" + } + ], + "name": "L1AddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1Address", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_gw", + "type": "address" + } + ], + "name": "setGateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "setL1Address", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphToken_Instance.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphToken_Instance.json new file mode 100644 index 000000000..5889eeaf0 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphToken#GraphToken_Instance.json @@ -0,0 +1,750 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphToken", + "sourceName": "contracts/l2/token/L2GraphToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeBurned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "gateway", + "type": "address" + } + ], + "name": "GatewaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Address", + "type": "address" + } + ], + "name": "L1AddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1Address", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_gw", + "type": "address" + } + ], + "name": "setGateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "setL1Address", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphProxy.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphTokenGateway.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphTokenGateway.json new file mode 100644 index 000000000..a9c54a794 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphTokenGateway.json @@ -0,0 +1,647 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphTokenGateway", + "sourceName": "contracts/l2/gateway/L2GraphTokenGateway.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Counterpart", + "type": "address" + } + ], + "name": "L1CounterpartAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1GRT", + "type": "address" + } + ], + "name": "L1TokenAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Router", + "type": "address" + } + ], + "name": "L2RouterSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PartialPauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "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": "_id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "TxToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2ToL1Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "exitNum", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WithdrawalInitiated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l1ERC20", + "type": "address" + } + ], + "name": "calculateL2TokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "finalizeInboundTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "getOutboundCalldata", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1Counterpart", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1GRT", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPausePartialTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Counterpart", + "type": "address" + } + ], + "name": "setL1CounterpartAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1GRT", + "type": "address" + } + ], + "name": "setL1TokenAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2Router", + "type": "address" + } + ], + "name": "setL2Router", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_newPaused", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json new file mode 100644 index 000000000..a9c54a794 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json @@ -0,0 +1,647 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphTokenGateway", + "sourceName": "contracts/l2/gateway/L2GraphTokenGateway.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Counterpart", + "type": "address" + } + ], + "name": "L1CounterpartAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1GRT", + "type": "address" + } + ], + "name": "L1TokenAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Router", + "type": "address" + } + ], + "name": "L2RouterSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PartialPauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "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": "_id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "TxToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2ToL1Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "exitNum", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WithdrawalInitiated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l1ERC20", + "type": "address" + } + ], + "name": "calculateL2TokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "finalizeInboundTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "getOutboundCalldata", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1Counterpart", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1GRT", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPausePartialTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Counterpart", + "type": "address" + } + ], + "name": "setL1CounterpartAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1GRT", + "type": "address" + } + ], + "name": "setL1TokenAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2Router", + "type": "address" + } + ], + "name": "setL2Router", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_newPaused", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#RegisteredDummy.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#RegisteredDummy.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#RegisteredDummy.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json new file mode 100644 index 000000000..c7f1f49b4 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TransparentUpgradeableProxy", + "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "ERC1967InvalidAdmin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { + "inputs": [], + "name": "ERC1967NonPayable", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [], + "name": "ProxyDeniedAdminAccess", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json new file mode 100644 index 000000000..c7f1f49b4 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TransparentUpgradeableProxy", + "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "ERC1967InvalidAdmin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { + "inputs": [], + "name": "ERC1967NonPayable", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [], + "name": "ProxyDeniedAdminAccess", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStaking#HorizonStaking.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStaking#HorizonStaking.json new file mode 100644 index 000000000..e442f237e --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStaking#HorizonStaking.json @@ -0,0 +1,2280 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "HorizonStaking", + "sourceName": "contracts/staking/HorizonStaking.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "stakingExtensionAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "subgraphDataServiceAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingCallerIsServiceProvider", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientIdleStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientStakeForLegacyAllocations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minRequired", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "HorizonStakingInvalidDelegationFeeCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPoolState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxMaxVerifierCut", + "type": "uint32" + } + ], + "name": "HorizonStakingInvalidMaxVerifierCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidProvision", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "HorizonStakingInvalidThawingPeriod", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroShares", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingNotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingNothingThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingProvisionAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingSlippageProtection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "HorizonStakingStillThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingTooManyThawRequests", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingTooManyTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingVerifierNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyController", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyGovernor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "AllowedLockedVerifierSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegatedTokensWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "DelegationFeeCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "DelegationSlashingEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashingSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "MaxThawingPeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "OperatorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersStaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionThawed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "StakeLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "ThawRequestCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + } + ], + "name": "ThawRequestFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawRequestsFulfilled", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ThawRequestsFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "ThawingPeriodCleared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDeprovisioned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensToDelegationPoolAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensUndelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "VerifierTokensSent", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "acceptProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToDelegationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clearThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSharesOut", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "deprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAuthorized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provisionLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "reprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setAllowedLockedVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "setDelegationFeeCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setDelegationSlashingEnabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "setMaxThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperatorLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "setProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensVerifier", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifierDestination", + "type": "address" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minSharesForNewProvider", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b50604051615b2c380380615b2c8339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516155836105a960003960006102fb015260008181610dbf015281816115b60152818161166801528181612f5401528181613e120152614172015260005050600050506000505060005050600050506000612f0d015260005050600050506000505060008181610d89015281816117cd015281816125b2015281816128c80152818161295f01528181612ac00152818161380b015281816139cb01528181613d88015261401e01526155836000f3fe6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStaking#HorizonStaking_Instance.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStaking#HorizonStaking_Instance.json new file mode 100644 index 000000000..e442f237e --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStaking#HorizonStaking_Instance.json @@ -0,0 +1,2280 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "HorizonStaking", + "sourceName": "contracts/staking/HorizonStaking.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "stakingExtensionAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "subgraphDataServiceAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingCallerIsServiceProvider", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientIdleStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientStakeForLegacyAllocations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minRequired", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "HorizonStakingInvalidDelegationFeeCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPoolState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxMaxVerifierCut", + "type": "uint32" + } + ], + "name": "HorizonStakingInvalidMaxVerifierCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidProvision", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "HorizonStakingInvalidThawingPeriod", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroShares", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingNotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingNothingThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingProvisionAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingSlippageProtection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "HorizonStakingStillThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingTooManyThawRequests", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingTooManyTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingVerifierNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyController", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyGovernor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "AllowedLockedVerifierSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegatedTokensWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "DelegationFeeCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "DelegationSlashingEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashingSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "MaxThawingPeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "OperatorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersStaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionThawed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "StakeLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "ThawRequestCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + } + ], + "name": "ThawRequestFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawRequestsFulfilled", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ThawRequestsFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "ThawingPeriodCleared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDeprovisioned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensToDelegationPoolAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensUndelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "VerifierTokensSent", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "acceptProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToDelegationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clearThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSharesOut", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "deprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAuthorized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provisionLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "reprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setAllowedLockedVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "setDelegationFeeCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setDelegationSlashingEnabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "setMaxThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperatorLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "setProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensVerifier", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifierDestination", + "type": "address" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minSharesForNewProvider", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b50604051615b2c380380615b2c8339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516155836105a960003960006102fb015260008181610dbf015281816115b60152818161166801528181612f5401528181613e120152614172015260005050600050506000505060005050600050506000612f0d015260005050600050506000505060008181610d89015281816117cd015281816125b2015281816128c80152818161295f01528181612ac00152818161380b015281816139cb01528181613d88015261401e01526155836000f3fe6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStakingExtension#ExponentialRebates.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStakingExtension#ExponentialRebates.json new file mode 100644 index 000000000..fc0c0c29f --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStakingExtension#ExponentialRebates.json @@ -0,0 +1,55 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ExponentialRebates", + "sourceName": "contracts/staking/libraries/ExponentialRebates.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stake", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "alphaNumerator", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "alphaDenominator", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "lambdaNumerator", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "lambdaDenominator", + "type": "uint32" + } + ], + "name": "exponentialRebates", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x610c2d610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStakingExtension#HorizonStakingExtension.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStakingExtension#HorizonStakingExtension.json new file mode 100644 index 000000000..7cd249086 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/HorizonStakingExtension#HorizonStakingExtension.json @@ -0,0 +1,1263 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "HorizonStakingExtension", + "sourceName": "contracts/staking/HorizonStakingExtension.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "subgraphDataServiceAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyController", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyGovernor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "PPMMathInvalidPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isPublic", + "type": "bool" + } + ], + "name": "AllocationClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "counterpart", + "type": "address" + } + ], + "name": "CounterpartStakingAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "assetHolder", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolTax", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryRebates", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "delegationRewards", + "type": "uint256" + } + ], + "name": "RebateCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "StakeDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TransferredDelegationReturnedToDelegator", + "type": "event" + }, + { + "inputs": [], + "name": "__DEPRECATED_getThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + } + ], + "name": "closeAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "collectedFees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "__DEPRECATED_effectiveAllocation", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "distributedRebates", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingExtension.Allocation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocationData", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocationState", + "outputs": [ + { + "internalType": "enum IHorizonStakingExtension.AllocationState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "getIndexerStakedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getSubgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "hasStake", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "isActiveAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "isAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "isOperator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "onTokenTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "counterpart", + "type": "address" + } + ], + "name": "setCounterpartStakingAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x6101e060405234801561001157600080fd5b5060405161396738038061396783398101604081905261003091610411565b818181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610347565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610347565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610347565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610347565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610347565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610347565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610347565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610347565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610347565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b03166101c052506104b4915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038291815260200190565b602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c39190610444565b9050826001600160a01b0382166103ee5760405163218f5add60e11b81526004016100749190610466565b5092915050565b80516001600160a01b038116811461040c57600080fd5b919050565b6000806040838503121561042457600080fd5b61042d836103f5565b915061043b602084016103f5565b90509250929050565b60006020828403121561045657600080fd5b61045f826103f5565b9392505050565b602081526000825180602084015260005b818110156104945760208186018101516040868401015201610477565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516133d761059060003960008181611c3601528181611e3601526123f00152600061205b015260005050600061178501526000818161213d0152818161280501526129080152600081816112c70152611b6f015260008181610bbf01528181610cbc01528181610ed601526116dc015260005050600050506000505060008181611044015281816111fa01528181612023015281816121b20152818161239a015281816124c2015261263201526133d76000f3fe6080604052600436106101f25760003560e01c806398c657dc1161010d578063b6363cf2116100a0578063e2e1e8e91161006f578063e2e1e8e914610a0b578063e73e14bf14610a38578063f1d60d6614610a70578063fb744cc014610a90578063fc54fb2714610ab057600080fd5b8063b6363cf2146108dd578063b7ca724114610927578063c0641994146109c1578063ccebcabb146109dc57600080fd5b8063a4c0ed36116100dc578063a4c0ed3614610837578063a784d49814610857578063ac9650d814610877578063ae4fe67a146108a457600080fd5b806398c657dc1461072d5780639ce7abe51461075a578063a212daf81461077a578063a2594d821461081757600080fd5b8063561285e411610185578063872d048911610154578063872d04891461064c5780638cc01c861461066c5780638d3c100a146106ed5780639054e3431461070d57600080fd5b8063561285e4146105a95780636a3ca383146105fc5780637573ef4f1461062c5780637a7664601461031157600080fd5b806325d9897e116101c157806325d9897e1461036957806339514ad21461047957806344c32a61146104ab57806355c85269146104cb57600080fd5b806308ce5f68146102495780630e0229231461027c5780631787e69f146103115780631ae720451461034757600080fd5b366102445760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561025557600080fd5b50610269610264366004612bec565b610ac8565b6040519081526020015b60405180910390f35b34801561028857600080fd5b5061029c610297366004612c25565b610add565b604051610273919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561031d57600080fd5b5061026961032c366004612c25565b6001600160a01b03166000908152600e602052604090205490565b34801561035357600080fd5b50610367610362366004612c25565b610bbd565b005b34801561037557600080fd5b5061046c610384366004612bec565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516102739190612c42565b34801561048557600080fd5b50601a546001600160401b03165b6040516001600160401b039091168152602001610273565b3480156104b757600080fd5b506103676104c6366004612cd2565b610cba565b3480156104d757600080fd5b506105776104e6366004612c25565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610273565b3480156105b557600080fd5b506105c96105c4366004612bec565b610d68565b60405161027391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561060857600080fd5b5061061c610617366004612c25565b610df6565b6040519015158152602001610273565b34801561063857600080fd5b50610269610647366004612cfe565b610e1b565b34801561065857600080fd5b50610269610667366004612d4d565b610e7f565b34801561067857600080fd5b506106d2610687366004612c25565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b60408051825181526020928301519281019290925201610273565b3480156106f957600080fd5b50610367610708366004612d96565b610ed4565b34801561071957600080fd5b50610269610728366004612dbb565b6113a0565b34801561073957600080fd5b5061074d610748366004612c25565b611488565b6040516102739190612e11565b34801561076657600080fd5b50610367610775366004612e81565b611493565b34801561078657600080fd5b506105c9610795366004612dbb565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561082357600080fd5b50610367610832366004612c25565b6115be565b34801561084357600080fd5b50610367610852366004612ed5565b6116da565b34801561086357600080fd5b50610269610872366004612c25565b6118e7565b34801561088357600080fd5b50610897610892366004612f30565b6118f2565b6040516102739190612fc9565b3480156108b057600080fd5b5061061c6108bf366004612c25565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e957600080fd5b5061061c6108f8366004612bec565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093357600080fd5b50610996610942366004613049565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b0316908201529181015190820152606001610273565b3480156109cd57600080fd5b50600d5463ffffffff16610493565b3480156109e857600080fd5b506109fc6109f7366004612dbb565b6119d9565b60405190518152602001610273565b348015610a1757600080fd5b50610269610a26366004613049565b60009081526010602052604090205490565b348015610a4457600080fd5b5061061c610a53366004612c25565b6001600160a01b03166000908152600e6020526040902054151590565b348015610a7c57600080fd5b5061061c610a8b366004612c25565b611a2b565b348015610a9c57600080fd5b50610269610aab366004612bec565b611a50565b348015610abc57600080fd5b5060205460ff1661061c565b6000610ad48383611a5c565b90505b92915050565b610b3860405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190613062565b6001600160a01b0316336001600160a01b031614610c7057604051635d9044cd60e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040517f690e9b982dc9aefaa1cfed186a2d2045a638013d658104102c9437235bee4b6090600090a250565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061307f565b15610d5a57604051632b37d9d160e21b815260040160405180910390fd5b610d648282611a94565b5050565b610d936040518060800160405280600081526020016000815260200160008152602001600081525090565b610dbe6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000610dca8585611e32565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b60006001610e0383611eb6565b6002811115610e1457610e14612dfb565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610e5557610e55612dfb565b6002811115610e6657610e66612dfb565b81526020019081526020016000205490505b9392505050565b600080610e8c8585611a5c565b90506000610e9a8686611f0f565b90506000610eae63ffffffff8616846130b7565b90506000610ebc8383611f3a565b9050610ec881856130ce565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f56919061307f565b15610f7457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610fb35760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b604482015260640161023b565b6000610fbe82611eb6565b90506000816002811115610fd457610fd4612dfb565b0361100c5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b604482015260640161023b565b8260000361101957505050565b6001600160a01b0382166000908152600f6020526040812060018101549091859080808061107333867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611f51565b600d5461108e908690600160401b900463ffffffff1661200e565b935061109a84866130e1565b600d549095506110bb9087908790640100000000900463ffffffff16612047565b92506110c783866130e1565b94508487600501546110d991906130ce565b6005880155600287015460009015806110ff5750601954600160a01b900463ffffffff16155b6111ca5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273__$8eb3cac1482a31d7a7f2cbe7dc8bdcd821$__906349484d819060c401602060405180830381865af41580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c591906130f4565b6111cd565b60005b90506111dd81896008015461225a565b92506111e98387611f3a565b92506112296111f884886130e1565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690612274565b82156112915782886008015461123f91906130ce565b60088901558754611259906001600160a01b0316846122bc565b915061126582846130e1565b88546001600160a01b03908116600081815260176020526040902054929550611291928692161561234e565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134791906130f4565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e60209081526040808320868516845282528083209385168352929052908120600381015482036113e6576000915050610e78565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b801561147c576000818152601d602052604090206001810154426001600160401b039091161161146b5760028301546001840154825461145091906130b7565b61145a919061310d565b61146490856130ce565b9350611471565b5061147c565b600201549050611410565b50909695505050505050565b6000610ad782611eb6565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190613062565b6001600160a01b0316336001600160a01b0316146115585760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611586908690869060040161312f565b600060405180830381600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190613062565b6001600160a01b0316336001600160a01b0316146116835760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175c919061307f565b1561177a57604051632b37d9d160e21b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117e15760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015260640161023b565b6018546001600160a01b0385811691161461183e5760405162461bcd60e51b815260206004820152601e60248201527f4f4e4c595f4c315f5354414b494e475f5448524f5547485f4252494447450000604482015260640161023b565b60008061184d838501856131a4565b909250905060ff8216611882576000818060200190518101906118709190613255565b905061187c86826123c4565b506116d2565b60001960ff8316016118b0576000818060200190518101906118a491906132a2565b905061187c86826123d0565b60405162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f434f444560a01b604482015260640161023b565b6000610ad782612740565b604080516000815260208101909152606090826001600160401b0381111561191c5761191c61315e565b60405190808252806020026020018201604052801561194f57816020015b606081526020019060019003908161193a5790505b50915060005b838110156119d1576119ac3086868481811061197357611973613302565b90506020028101906119859190613318565b856040516020016119989392919061335e565b60405160208183030381529060405261278b565b8382815181106119be576119be613302565b6020908102919091010152600101611955565b505092915050565b6040805160208101909152600081526040805160208101909152600081526000611a038686611e32565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b600080611a3783611eb6565b6002811115611a4857611a48612dfb565b141592915050565b6000610ad48383611f0f565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610ad491906130e1565b6000611a9f83611eb6565b90506001816002811115611ab557611ab5612dfb565b14611aec5760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b604482015260640161023b565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef91906130f4565b608082018190526060820151600091611c079161225a565b9050600082600001516001600160a01b0316336001600160a01b03161480611c78575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff1682111580611c9b57506040830151155b15611cd55780611cd55760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b604482015260640161023b565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611db957808015611d0f57508415155b15611d2757611d22868460000151612801565b611d36565b611d3483602001516128e7565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611d6391906130e1565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611da391906130e1565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611e8b57506001600160a01b0382166000908152601460205260409020610ad7565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610ad7565b6001600160a01b038082166000908152600f6020526040812080549192909116611ee35750600092915050565b600381015415801590611ef857506004810154155b15611f065750600192915050565b50600292915050565b600080611f1c8484611e32565b905080600501548160020154611f3291906130e1565b949350505050565b600081831115611f4a5781610ad4565b5090919050565b8015612009576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd1919061307f565b6120095760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161023b565b505050565b60008061201b8484612975565b9050610ad4817f000000000000000000000000000000000000000000000000000000000000000061121a565b60008260000361205957506000610e78565b7f00000000000000000000000000000000000000000000000000000000000000006000831580159061209357506001600160a01b03821615155b90508080156121065750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612106919061307f565b1561224e5760006121178686612975565b90508015612244576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121aa91906130f4565b506121e283827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906129c7565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b15801561222b57600080fd5b505af115801561223f573d6000803e3d6000fd5b505050505b9250610e78915050565b50600095945050505050565b600081831161226a576000610ad4565b610ad482846130e1565b8015610d6457604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156116be57600080fd5b6001600160a01b03821660009081526014602052604081206002810154829190158015906122fb57508054600160401b900463ffffffff16620f424010155b156123465780546000906123219063ffffffff600160401b9091048116908790612a0216565b905061232d81866130e1565b925082826002015461233f91906130ce565b6002830155505b509392505050565b8260000361235b57505050565b801561236b576120098284612a69565b6001600160a01b03808316600090815260176020526040902054166123be81156123955781612397565b835b857f00000000000000000000000000000000000000000000000000000000000000006121d2565b50505050565b80516120098184612a69565b80516001600160a01b039081166000908152601b602090815260408083207f0000000000000000000000000000000000000000000000000000000000000000909416835292905290812060030154600160601b90046001600160401b031690036124695760405162461bcd60e51b815260206004820152600a60248201526910b83937bb34b9b4b7b760b11b604482015260640161023b565b80516001600160a01b03908116600090815260146020908152604080832082860151909416835260048401909152902060028201541580156124bb575060038201541515806124bb5750600682015415155b156125b5577f0000000000000000000000000000000000000000000000000000000000000000602084015160405163a9059cbb60e01b81526001600160a01b0391821660048201526024810187905291169063a9059cbb906044016020604051808303816000875af1158015612535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612559919061307f565b5082602001516001600160a01b031683600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de866040516125a791815260200190565b60405180910390a350505050565b60008260020154600014806125d1575082600501548360020154145b61260757826005015483600201546125e991906130e1565b60038401546125f890876130b7565b612602919061310d565b612609565b845b905080158061261f5750670de0b6b3a764000085105b156126ae576126548460200151866121d27f000000000000000000000000000000000000000000000000000000000000000090565b83602001516001600160a01b031684600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de876040516126a191815260200190565b60405180910390a3612739565b8483600201546126be91906130ce565b600284015560038301546126d39082906130ce565b600384015581546126e59082906130ce565b82556020808501518551604080518981529384018590526001600160a01b039283169391909216917fcd0366dce5247d874ffc60a762aa7abbb82c1695bbb171609c1b8861e279eb73910160405180910390a35b5050505050565b6001600160a01b0381166000908152600e6020526040812060028101546001820154600483015492549192909161277791906130e1565b61278191906130e1565b610ad791906130e1565b6060600080846001600160a01b0316846040516127a89190613385565b600060405180830381855af49150503d80600081146127e3576040519150601f19603f3d011682016040523d82523d6000602084013e6127e8565b606091505b50915091506127f8858383612ae8565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af115801561286e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289291906130f4565b9050806000036128a157505050565b60006128ad8383612b44565b905060006128bb82846130e1565b6001600160a01b038086166000908152601760205260409020549192506127399183918791161561234e565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612951573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad791906130f4565b600061298482620f4240101590565b82906129a657604051633dc311df60e01b815260040161023b91815260200190565b506129bd6129b783620f42406130e1565b84612a02565b610ad490846130e1565b80156120095760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611f8e565b6000612a1183620f4240101590565b80612a245750612a2482620f4240101590565b83839091612a4e5760405163768bf0eb60e11b81526004810192909252602482015260440161023b565b50620f42409050612a5f83856130b7565b610ad4919061310d565b6001600160a01b0382166000908152600e6020526040902054612a8d9082906130ce565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc290612adc9084815260200190565b60405180910390a25050565b606082612afd57612af882612bab565b610e78565b8151158015612b1457506001600160a01b0384163b155b15612b3d57604051639996b31560e01b81526001600160a01b038516600482015260240161023b565b5080610e78565b6001600160a01b0382166000908152601460205260408120600281015482919015801590612b8457508054640100000000900463ffffffff16620f424010155b156123465780546000906123219063ffffffff6401000000009091048116908790612a0216565b805115612bbb5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b0381168114612bd457600080fd5b60008060408385031215612bff57600080fd5b8235612c0a81612bd7565b91506020830135612c1a81612bd7565b809150509250929050565b600060208284031215612c3757600080fd5b8135610ad481612bd7565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151612cb060c084018263ffffffff169052565b5060e0830151612ccb60e08401826001600160401b03169052565b5092915050565b60008060408385031215612ce557600080fd5b8235612cf081612bd7565b946020939093013593505050565b600080600060608486031215612d1357600080fd5b8335612d1e81612bd7565b92506020840135612d2e81612bd7565b9150604084013560038110612d4257600080fd5b809150509250925092565b600080600060608486031215612d6257600080fd5b8335612d6d81612bd7565b92506020840135612d7d81612bd7565b9150604084013563ffffffff81168114612d4257600080fd5b60008060408385031215612da957600080fd5b823591506020830135612c1a81612bd7565b600080600060608486031215612dd057600080fd5b8335612ddb81612bd7565b92506020840135612deb81612bd7565b91506040840135612d4281612bd7565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e3357634e487b7160e01b600052602160045260246000fd5b91905290565b60008083601f840112612e4b57600080fd5b5081356001600160401b03811115612e6257600080fd5b602083019150836020828501011115612e7a57600080fd5b9250929050565b600080600060408486031215612e9657600080fd5b8335612ea181612bd7565b925060208401356001600160401b03811115612ebc57600080fd5b612ec886828701612e39565b9497909650939450505050565b60008060008060608587031215612eeb57600080fd5b8435612ef681612bd7565b93506020850135925060408501356001600160401b03811115612f1857600080fd5b612f2487828801612e39565b95989497509550505050565b60008060208385031215612f4357600080fd5b82356001600160401b03811115612f5957600080fd5b8301601f81018513612f6a57600080fd5b80356001600160401b03811115612f8057600080fd5b8560208260051b8401011115612f9557600080fd5b6020919091019590945092505050565b60005b83811015612fc0578181015183820152602001612fa8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561303d57603f198786030184528151805180875261301a816020890160208501612fa5565b601f01601f19169590950160209081019550938401939190910190600101612ff1565b50929695505050505050565b60006020828403121561305b57600080fd5b5035919050565b60006020828403121561307457600080fd5b8151610ad481612bd7565b60006020828403121561309157600080fd5b81518015158114610ad457600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad757610ad76130a1565b80820180821115610ad757610ad76130a1565b81810381811115610ad757610ad76130a1565b60006020828403121561310657600080fd5b5051919050565b60008261312a57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561319c5761319c61315e565b604052919050565b600080604083850312156131b757600080fd5b823560ff811681146131c857600080fd5b915060208301356001600160401b038111156131e357600080fd5b8301601f810185136131f457600080fd5b80356001600160401b0381111561320d5761320d61315e565b613220601f8201601f1916602001613174565b81815286602083850101111561323557600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602082840312801561326857600080fd5b50604051602081016001600160401b038111828210171561328b5761328b61315e565b604052825161329981612bd7565b81529392505050565b600060408284031280156132b557600080fd5b50604080519081016001600160401b03811182821017156132d8576132d861315e565b60405282516132e681612bd7565b815260208301516132f681612bd7565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332f57600080fd5b8301803591506001600160401b0382111561334957600080fd5b602001915036819003821315612e7a57600080fd5b82848237600083820160008152835161337b818360208801612fa5565b0195945050505050565b60008251613397818460208701612fa5565b919091019291505056fea264697066735822122038ad83d20c219353421029f1ad8c4f7667d5f0e86af1579c64603bb56827d86064736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106101f25760003560e01c806398c657dc1161010d578063b6363cf2116100a0578063e2e1e8e91161006f578063e2e1e8e914610a0b578063e73e14bf14610a38578063f1d60d6614610a70578063fb744cc014610a90578063fc54fb2714610ab057600080fd5b8063b6363cf2146108dd578063b7ca724114610927578063c0641994146109c1578063ccebcabb146109dc57600080fd5b8063a4c0ed36116100dc578063a4c0ed3614610837578063a784d49814610857578063ac9650d814610877578063ae4fe67a146108a457600080fd5b806398c657dc1461072d5780639ce7abe51461075a578063a212daf81461077a578063a2594d821461081757600080fd5b8063561285e411610185578063872d048911610154578063872d04891461064c5780638cc01c861461066c5780638d3c100a146106ed5780639054e3431461070d57600080fd5b8063561285e4146105a95780636a3ca383146105fc5780637573ef4f1461062c5780637a7664601461031157600080fd5b806325d9897e116101c157806325d9897e1461036957806339514ad21461047957806344c32a61146104ab57806355c85269146104cb57600080fd5b806308ce5f68146102495780630e0229231461027c5780631787e69f146103115780631ae720451461034757600080fd5b366102445760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561025557600080fd5b50610269610264366004612bec565b610ac8565b6040519081526020015b60405180910390f35b34801561028857600080fd5b5061029c610297366004612c25565b610add565b604051610273919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561031d57600080fd5b5061026961032c366004612c25565b6001600160a01b03166000908152600e602052604090205490565b34801561035357600080fd5b50610367610362366004612c25565b610bbd565b005b34801561037557600080fd5b5061046c610384366004612bec565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516102739190612c42565b34801561048557600080fd5b50601a546001600160401b03165b6040516001600160401b039091168152602001610273565b3480156104b757600080fd5b506103676104c6366004612cd2565b610cba565b3480156104d757600080fd5b506105776104e6366004612c25565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610273565b3480156105b557600080fd5b506105c96105c4366004612bec565b610d68565b60405161027391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561060857600080fd5b5061061c610617366004612c25565b610df6565b6040519015158152602001610273565b34801561063857600080fd5b50610269610647366004612cfe565b610e1b565b34801561065857600080fd5b50610269610667366004612d4d565b610e7f565b34801561067857600080fd5b506106d2610687366004612c25565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b60408051825181526020928301519281019290925201610273565b3480156106f957600080fd5b50610367610708366004612d96565b610ed4565b34801561071957600080fd5b50610269610728366004612dbb565b6113a0565b34801561073957600080fd5b5061074d610748366004612c25565b611488565b6040516102739190612e11565b34801561076657600080fd5b50610367610775366004612e81565b611493565b34801561078657600080fd5b506105c9610795366004612dbb565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561082357600080fd5b50610367610832366004612c25565b6115be565b34801561084357600080fd5b50610367610852366004612ed5565b6116da565b34801561086357600080fd5b50610269610872366004612c25565b6118e7565b34801561088357600080fd5b50610897610892366004612f30565b6118f2565b6040516102739190612fc9565b3480156108b057600080fd5b5061061c6108bf366004612c25565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e957600080fd5b5061061c6108f8366004612bec565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093357600080fd5b50610996610942366004613049565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b0316908201529181015190820152606001610273565b3480156109cd57600080fd5b50600d5463ffffffff16610493565b3480156109e857600080fd5b506109fc6109f7366004612dbb565b6119d9565b60405190518152602001610273565b348015610a1757600080fd5b50610269610a26366004613049565b60009081526010602052604090205490565b348015610a4457600080fd5b5061061c610a53366004612c25565b6001600160a01b03166000908152600e6020526040902054151590565b348015610a7c57600080fd5b5061061c610a8b366004612c25565b611a2b565b348015610a9c57600080fd5b50610269610aab366004612bec565b611a50565b348015610abc57600080fd5b5060205460ff1661061c565b6000610ad48383611a5c565b90505b92915050565b610b3860405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190613062565b6001600160a01b0316336001600160a01b031614610c7057604051635d9044cd60e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040517f690e9b982dc9aefaa1cfed186a2d2045a638013d658104102c9437235bee4b6090600090a250565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061307f565b15610d5a57604051632b37d9d160e21b815260040160405180910390fd5b610d648282611a94565b5050565b610d936040518060800160405280600081526020016000815260200160008152602001600081525090565b610dbe6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000610dca8585611e32565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b60006001610e0383611eb6565b6002811115610e1457610e14612dfb565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610e5557610e55612dfb565b6002811115610e6657610e66612dfb565b81526020019081526020016000205490505b9392505050565b600080610e8c8585611a5c565b90506000610e9a8686611f0f565b90506000610eae63ffffffff8616846130b7565b90506000610ebc8383611f3a565b9050610ec881856130ce565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f56919061307f565b15610f7457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610fb35760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b604482015260640161023b565b6000610fbe82611eb6565b90506000816002811115610fd457610fd4612dfb565b0361100c5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b604482015260640161023b565b8260000361101957505050565b6001600160a01b0382166000908152600f6020526040812060018101549091859080808061107333867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611f51565b600d5461108e908690600160401b900463ffffffff1661200e565b935061109a84866130e1565b600d549095506110bb9087908790640100000000900463ffffffff16612047565b92506110c783866130e1565b94508487600501546110d991906130ce565b6005880155600287015460009015806110ff5750601954600160a01b900463ffffffff16155b6111ca5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273__$8eb3cac1482a31d7a7f2cbe7dc8bdcd821$__906349484d819060c401602060405180830381865af41580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c591906130f4565b6111cd565b60005b90506111dd81896008015461225a565b92506111e98387611f3a565b92506112296111f884886130e1565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690612274565b82156112915782886008015461123f91906130ce565b60088901558754611259906001600160a01b0316846122bc565b915061126582846130e1565b88546001600160a01b03908116600081815260176020526040902054929550611291928692161561234e565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134791906130f4565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e60209081526040808320868516845282528083209385168352929052908120600381015482036113e6576000915050610e78565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b801561147c576000818152601d602052604090206001810154426001600160401b039091161161146b5760028301546001840154825461145091906130b7565b61145a919061310d565b61146490856130ce565b9350611471565b5061147c565b600201549050611410565b50909695505050505050565b6000610ad782611eb6565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190613062565b6001600160a01b0316336001600160a01b0316146115585760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611586908690869060040161312f565b600060405180830381600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190613062565b6001600160a01b0316336001600160a01b0316146116835760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175c919061307f565b1561177a57604051632b37d9d160e21b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117e15760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015260640161023b565b6018546001600160a01b0385811691161461183e5760405162461bcd60e51b815260206004820152601e60248201527f4f4e4c595f4c315f5354414b494e475f5448524f5547485f4252494447450000604482015260640161023b565b60008061184d838501856131a4565b909250905060ff8216611882576000818060200190518101906118709190613255565b905061187c86826123c4565b506116d2565b60001960ff8316016118b0576000818060200190518101906118a491906132a2565b905061187c86826123d0565b60405162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f434f444560a01b604482015260640161023b565b6000610ad782612740565b604080516000815260208101909152606090826001600160401b0381111561191c5761191c61315e565b60405190808252806020026020018201604052801561194f57816020015b606081526020019060019003908161193a5790505b50915060005b838110156119d1576119ac3086868481811061197357611973613302565b90506020028101906119859190613318565b856040516020016119989392919061335e565b60405160208183030381529060405261278b565b8382815181106119be576119be613302565b6020908102919091010152600101611955565b505092915050565b6040805160208101909152600081526040805160208101909152600081526000611a038686611e32565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b600080611a3783611eb6565b6002811115611a4857611a48612dfb565b141592915050565b6000610ad48383611f0f565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610ad491906130e1565b6000611a9f83611eb6565b90506001816002811115611ab557611ab5612dfb565b14611aec5760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b604482015260640161023b565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef91906130f4565b608082018190526060820151600091611c079161225a565b9050600082600001516001600160a01b0316336001600160a01b03161480611c78575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff1682111580611c9b57506040830151155b15611cd55780611cd55760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b604482015260640161023b565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611db957808015611d0f57508415155b15611d2757611d22868460000151612801565b611d36565b611d3483602001516128e7565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611d6391906130e1565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611da391906130e1565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611e8b57506001600160a01b0382166000908152601460205260409020610ad7565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610ad7565b6001600160a01b038082166000908152600f6020526040812080549192909116611ee35750600092915050565b600381015415801590611ef857506004810154155b15611f065750600192915050565b50600292915050565b600080611f1c8484611e32565b905080600501548160020154611f3291906130e1565b949350505050565b600081831115611f4a5781610ad4565b5090919050565b8015612009576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd1919061307f565b6120095760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161023b565b505050565b60008061201b8484612975565b9050610ad4817f000000000000000000000000000000000000000000000000000000000000000061121a565b60008260000361205957506000610e78565b7f00000000000000000000000000000000000000000000000000000000000000006000831580159061209357506001600160a01b03821615155b90508080156121065750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612106919061307f565b1561224e5760006121178686612975565b90508015612244576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121aa91906130f4565b506121e283827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906129c7565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b15801561222b57600080fd5b505af115801561223f573d6000803e3d6000fd5b505050505b9250610e78915050565b50600095945050505050565b600081831161226a576000610ad4565b610ad482846130e1565b8015610d6457604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156116be57600080fd5b6001600160a01b03821660009081526014602052604081206002810154829190158015906122fb57508054600160401b900463ffffffff16620f424010155b156123465780546000906123219063ffffffff600160401b9091048116908790612a0216565b905061232d81866130e1565b925082826002015461233f91906130ce565b6002830155505b509392505050565b8260000361235b57505050565b801561236b576120098284612a69565b6001600160a01b03808316600090815260176020526040902054166123be81156123955781612397565b835b857f00000000000000000000000000000000000000000000000000000000000000006121d2565b50505050565b80516120098184612a69565b80516001600160a01b039081166000908152601b602090815260408083207f0000000000000000000000000000000000000000000000000000000000000000909416835292905290812060030154600160601b90046001600160401b031690036124695760405162461bcd60e51b815260206004820152600a60248201526910b83937bb34b9b4b7b760b11b604482015260640161023b565b80516001600160a01b03908116600090815260146020908152604080832082860151909416835260048401909152902060028201541580156124bb575060038201541515806124bb5750600682015415155b156125b5577f0000000000000000000000000000000000000000000000000000000000000000602084015160405163a9059cbb60e01b81526001600160a01b0391821660048201526024810187905291169063a9059cbb906044016020604051808303816000875af1158015612535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612559919061307f565b5082602001516001600160a01b031683600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de866040516125a791815260200190565b60405180910390a350505050565b60008260020154600014806125d1575082600501548360020154145b61260757826005015483600201546125e991906130e1565b60038401546125f890876130b7565b612602919061310d565b612609565b845b905080158061261f5750670de0b6b3a764000085105b156126ae576126548460200151866121d27f000000000000000000000000000000000000000000000000000000000000000090565b83602001516001600160a01b031684600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de876040516126a191815260200190565b60405180910390a3612739565b8483600201546126be91906130ce565b600284015560038301546126d39082906130ce565b600384015581546126e59082906130ce565b82556020808501518551604080518981529384018590526001600160a01b039283169391909216917fcd0366dce5247d874ffc60a762aa7abbb82c1695bbb171609c1b8861e279eb73910160405180910390a35b5050505050565b6001600160a01b0381166000908152600e6020526040812060028101546001820154600483015492549192909161277791906130e1565b61278191906130e1565b610ad791906130e1565b6060600080846001600160a01b0316846040516127a89190613385565b600060405180830381855af49150503d80600081146127e3576040519150601f19603f3d011682016040523d82523d6000602084013e6127e8565b606091505b50915091506127f8858383612ae8565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af115801561286e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289291906130f4565b9050806000036128a157505050565b60006128ad8383612b44565b905060006128bb82846130e1565b6001600160a01b038086166000908152601760205260409020549192506127399183918791161561234e565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612951573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad791906130f4565b600061298482620f4240101590565b82906129a657604051633dc311df60e01b815260040161023b91815260200190565b506129bd6129b783620f42406130e1565b84612a02565b610ad490846130e1565b80156120095760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611f8e565b6000612a1183620f4240101590565b80612a245750612a2482620f4240101590565b83839091612a4e5760405163768bf0eb60e11b81526004810192909252602482015260440161023b565b50620f42409050612a5f83856130b7565b610ad4919061310d565b6001600160a01b0382166000908152600e6020526040902054612a8d9082906130ce565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc290612adc9084815260200190565b60405180910390a25050565b606082612afd57612af882612bab565b610e78565b8151158015612b1457506001600160a01b0384163b155b15612b3d57604051639996b31560e01b81526001600160a01b038516600482015260240161023b565b5080610e78565b6001600160a01b0382166000908152601460205260408120600281015482919015801590612b8457508054640100000000900463ffffffff16620f424010155b156123465780546000906123219063ffffffff6401000000009091048116908790612a0216565b805115612bbb5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b0381168114612bd457600080fd5b60008060408385031215612bff57600080fd5b8235612c0a81612bd7565b91506020830135612c1a81612bd7565b809150509250929050565b600060208284031215612c3757600080fd5b8135610ad481612bd7565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151612cb060c084018263ffffffff169052565b5060e0830151612ccb60e08401826001600160401b03169052565b5092915050565b60008060408385031215612ce557600080fd5b8235612cf081612bd7565b946020939093013593505050565b600080600060608486031215612d1357600080fd5b8335612d1e81612bd7565b92506020840135612d2e81612bd7565b9150604084013560038110612d4257600080fd5b809150509250925092565b600080600060608486031215612d6257600080fd5b8335612d6d81612bd7565b92506020840135612d7d81612bd7565b9150604084013563ffffffff81168114612d4257600080fd5b60008060408385031215612da957600080fd5b823591506020830135612c1a81612bd7565b600080600060608486031215612dd057600080fd5b8335612ddb81612bd7565b92506020840135612deb81612bd7565b91506040840135612d4281612bd7565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e3357634e487b7160e01b600052602160045260246000fd5b91905290565b60008083601f840112612e4b57600080fd5b5081356001600160401b03811115612e6257600080fd5b602083019150836020828501011115612e7a57600080fd5b9250929050565b600080600060408486031215612e9657600080fd5b8335612ea181612bd7565b925060208401356001600160401b03811115612ebc57600080fd5b612ec886828701612e39565b9497909650939450505050565b60008060008060608587031215612eeb57600080fd5b8435612ef681612bd7565b93506020850135925060408501356001600160401b03811115612f1857600080fd5b612f2487828801612e39565b95989497509550505050565b60008060208385031215612f4357600080fd5b82356001600160401b03811115612f5957600080fd5b8301601f81018513612f6a57600080fd5b80356001600160401b03811115612f8057600080fd5b8560208260051b8401011115612f9557600080fd5b6020919091019590945092505050565b60005b83811015612fc0578181015183820152602001612fa8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561303d57603f198786030184528151805180875261301a816020890160208501612fa5565b601f01601f19169590950160209081019550938401939190910190600101612ff1565b50929695505050505050565b60006020828403121561305b57600080fd5b5035919050565b60006020828403121561307457600080fd5b8151610ad481612bd7565b60006020828403121561309157600080fd5b81518015158114610ad457600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad757610ad76130a1565b80820180821115610ad757610ad76130a1565b81810381811115610ad757610ad76130a1565b60006020828403121561310657600080fd5b5051919050565b60008261312a57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561319c5761319c61315e565b604052919050565b600080604083850312156131b757600080fd5b823560ff811681146131c857600080fd5b915060208301356001600160401b038111156131e357600080fd5b8301601f810185136131f457600080fd5b80356001600160401b0381111561320d5761320d61315e565b613220601f8201601f1916602001613174565b81815286602083850101111561323557600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602082840312801561326857600080fd5b50604051602081016001600160401b038111828210171561328b5761328b61315e565b604052825161329981612bd7565b81529392505050565b600060408284031280156132b557600080fd5b50604080519081016001600160401b03811182821017156132d8576132d861315e565b60405282516132e681612bd7565b815260208301516132f681612bd7565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332f57600080fd5b8301803591506001600160401b0382111561334957600080fd5b602001915036819003821315612e7a57600080fd5b82848237600083820160008152835161337b818360208801612fa5565b0195945050505050565b60008251613397818460208701612fa5565b919091019291505056fea264697066735822122038ad83d20c219353421029f1ad8c4f7667d5f0e86af1579c64603bb56827d86064736f6c634300081b0033", + "linkReferences": { + "contracts/staking/libraries/ExponentialRebates.sol": { + "ExponentialRebates": [ + { + "length": 20, + "start": 5879 + } + ] + } + }, + "deployedLinkReferences": { + "contracts/staking/libraries/ExponentialRebates.sol": { + "ExponentialRebates": [ + { + "length": 20, + "start": 4455 + } + ] + } + } +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/PaymentsEscrow#PaymentsEscrow.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/PaymentsEscrow#PaymentsEscrow.json new file mode 100644 index 000000000..4f10cc208 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/PaymentsEscrow#PaymentsEscrow.json @@ -0,0 +1,769 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PaymentsEscrow", + "sourceName": "contracts/payments/PaymentsEscrow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "revokeCollectorThawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawEscrowThawingPeriod", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInconsistentCollection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAllowance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minBalance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowNotThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "PaymentsEscrowStillThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "thawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThawingPeriod", + "type": "uint256" + } + ], + "name": "PaymentsEscrowThawingPeriodTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "AuthorizedCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "CancelThaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "CancelThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "EscrowCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "RevokeCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "Thaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "ThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "REVOKE_COLLECTOR_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WITHDRAW_ESCROW_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + } + ], + "name": "approveCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "authorizedCollectors", + "outputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "cancelThawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "depositTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "escrowAccounts", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + } + ], + "name": "revokeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "thawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b506040516120c73803806120c78339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611ad26105f5600039600081816101e00152610abb015260008181610193015261039d01526000505060005050600050506000505060005050600081816102fa0152818161041601528181610589015281816106380152818161076e0152818161094901528181610b2d01528181610d71015261131b01526000505060008181610fa6015261104e015260005050600081816108da01528181610eea01528181610f77015281816110c401526114130152611ad26000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json new file mode 100644 index 000000000..4f10cc208 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json @@ -0,0 +1,769 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PaymentsEscrow", + "sourceName": "contracts/payments/PaymentsEscrow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "revokeCollectorThawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawEscrowThawingPeriod", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInconsistentCollection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAllowance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minBalance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowNotThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "PaymentsEscrowStillThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "thawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThawingPeriod", + "type": "uint256" + } + ], + "name": "PaymentsEscrowThawingPeriodTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "AuthorizedCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "CancelThaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "CancelThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "EscrowCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "RevokeCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "Thaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "ThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "REVOKE_COLLECTOR_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WITHDRAW_ESCROW_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + } + ], + "name": "approveCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "authorizedCollectors", + "outputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "cancelThawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "depositTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "escrowAccounts", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + } + ], + "name": "revokeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "thawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b506040516120c73803806120c78339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611ad26105f5600039600081816101e00152610abb015260008181610193015261039d01526000505060005050600050506000505060005050600081816102fa0152818161041601528181610589015281816106380152818161076e0152818161094901528181610b2d01528181610d71015261131b01526000505060008181610fa6015261104e015260005050600081816108da01528181610eea01528181610f77015281816110c401526114130152611ad26000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#GraphProxy.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#RewardsManager.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#RewardsManager.json new file mode 100644 index 000000000..87ac4c282 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#RewardsManager.json @@ -0,0 +1,635 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "RewardsManager", + "sourceName": "contracts/rewards/RewardsManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardsAssigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "RewardsDenied", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sinceBlock", + "type": "uint256" + } + ], + "name": "RewardsDenylistUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldSubgraphService", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [], + "name": "accRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accRewardsPerSignalLastBlockUpdated", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "name": "calcRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "denylist", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsForSubgraph", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsPerAllocatedToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNewRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "getRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isDenied", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "issuancePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumSubgraphSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphAllocationUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphSignalUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "_deny", + "type": "bool" + } + ], + "name": "setDenied", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_subgraphDeploymentID", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "_deny", + "type": "bool[]" + } + ], + "name": "setDeniedMany", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_issuancePerBlock", + "type": "uint256" + } + ], + "name": "setIssuancePerBlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumSubgraphSignal", + "type": "uint256" + } + ], + "name": "setMinimumSubgraphSignal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphAvailabilityOracle", + "type": "address" + } + ], + "name": "setSubgraphAvailabilityOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphAvailabilityOracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract IRewardsIssuer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "subgraphs", + "outputs": [ + { + "internalType": "uint256", + "name": "accRewardsForSubgraph", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsForSubgraphSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerSignalSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "takeRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#RewardsManager_Instance.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#RewardsManager_Instance.json new file mode 100644 index 000000000..87ac4c282 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/RewardsManager#RewardsManager_Instance.json @@ -0,0 +1,635 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "RewardsManager", + "sourceName": "contracts/rewards/RewardsManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardsAssigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "RewardsDenied", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sinceBlock", + "type": "uint256" + } + ], + "name": "RewardsDenylistUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldSubgraphService", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [], + "name": "accRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accRewardsPerSignalLastBlockUpdated", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "name": "calcRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "denylist", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsForSubgraph", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsPerAllocatedToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNewRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "getRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isDenied", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "issuancePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumSubgraphSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphAllocationUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphSignalUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "_deny", + "type": "bool" + } + ], + "name": "setDenied", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_subgraphDeploymentID", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "_deny", + "type": "bool[]" + } + ], + "name": "setDeniedMany", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_issuancePerBlock", + "type": "uint256" + } + ], + "name": "setIssuancePerBlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumSubgraphSignal", + "type": "uint256" + } + ], + "name": "setMinimumSubgraphSignal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphAvailabilityOracle", + "type": "address" + } + ], + "name": "setSubgraphAvailabilityOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphAvailabilityOracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract IRewardsIssuer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "subgraphs", + "outputs": [ + { + "internalType": "uint256", + "name": "accRewardsForSubgraph", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsForSubgraphSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerSignalSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "takeRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/artifacts/TAPCollector#TAPCollector.json b/packages/horizon/ignition/deployments/chain-11155111/artifacts/TAPCollector#TAPCollector.json new file mode 100644 index 000000000..94f0189f7 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/artifacts/TAPCollector#TAPCollector.json @@ -0,0 +1,450 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TAPCollector", + "sourceName": "contracts/payments/collectors/TAPCollector.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "eip712Name", + "type": "string" + }, + { + "internalType": "string", + "name": "eip712Version", + "type": "string" + }, + { + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + } + ], + "name": "TAPCollectorCallerNotDataService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensCollected", + "type": "uint256" + } + ], + "name": "TAPCollectorInconsistentRAVTokens", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", + "name": "rav", + "type": "tuple" + } + ], + "name": "encodeRAV", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", + "name": "rav", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.SignedRAV", + "name": "signedRAV", + "type": "tuple" + } + ], + "name": "recoverRAVSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "tokensCollected", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6102a060405234801561001157600080fd5b506040516119ae3803806119ae833981016040819052610030916105d9565b80838361003e8260006103db565b6101205261004d8160016103db565b61014052815160208084019190912060e052815190820120610100524660a0526100da60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03811661012c5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101e05260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526101649061040e565b6001600160a01b0316610160526040805180820190915260078152665374616b696e6760c81b60208201526101989061040e565b6001600160a01b03166101805260408051808201909152600d81526c47726170685061796d656e747360981b60208201526101d29061040e565b6001600160a01b03166101a05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261020d9061040e565b6001600160a01b03166101c05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526102469061040e565b6001600160a01b03166102005260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526102819061040e565b6001600160a01b0316610220526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102bf9061040e565b6001600160a01b03166102405260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102fb9061040e565b6001600160a01b03166102605260408051808201909152600881526721bab930ba34b7b760c11b60208201526103309061040e565b6001600160a01b039081166102808190526101e05161018051610160516101a0516101c0516102005161022051610240516102605160408051968c168752948b166020870152928a1685850152908916606085015288166080840152871660a083015260c0820195909552935192851694918216939116917fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a439181900360e00190a45050505061081e565b60006020835110156103f7576103f0836104bc565b9050610408565b8161040284826106db565b5060ff90505b92915050565b6000806101e0516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161044991815260200190565b602060405180830381865afa158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a9190610799565b9050826001600160a01b0382166104b55760405163218f5add60e11b815260040161012391906107e7565b5092915050565b600080829050601f815111156104e7578260405163305a27a960e01b815260040161012391906107e7565b80516104f2826107fa565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561052b578181015183820152602001610513565b50506000910152565b600082601f83011261054557600080fd5b81516001600160401b0381111561055e5761055e6104fa565b604051601f8201601f19908116603f011681016001600160401b038111828210171561058c5761058c6104fa565b6040528181528382016020018510156105a457600080fd5b6105b5826020830160208701610510565b949350505050565b80516001600160a01b03811681146105d457600080fd5b919050565b6000806000606084860312156105ee57600080fd5b83516001600160401b0381111561060457600080fd5b61061086828701610534565b602086015190945090506001600160401b0381111561062e57600080fd5b61063a86828701610534565b925050610649604085016105bd565b90509250925092565b600181811c9082168061066657607f821691505b60208210810361068657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106d657806000526020600020601f840160051c810160208510156106b35750805b601f840160051c820191505b818110156106d357600081556001016106bf565b50505b505050565b81516001600160401b038111156106f4576106f46104fa565b610708816107028454610652565b8461068c565b6020601f82116001811461073c57600083156107245750848201515b600019600385901b1c1916600184901b1784556106d3565b600084815260208120601f198516915b8281101561076c578785015182556020948501946001909201910161074c565b508482101561078a5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156107ab57600080fd5b6107b4826105bd565b9392505050565b600081518084526107d3816020860160208601610510565b601f01601f19169290920160200192915050565b6020815260006107b460208301846107bb565b805160208083015191908110156106865760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516110e36108cb600039600050506000505060005050600050506000505060005050600061024f0152600050506000505060005050600061049201526000610460015260006108940152600061086c015260006107c7015260006107f10152600061081b01526110e36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80631ef518f21461005c5780637f07d2831461008c57806384b0196e146100ad5780638821603c146100c8578063cfdb35bd146100db575b600080fd5b61006f61006a3660046109dc565b61010c565b6040516001600160a01b0390911681526020015b60405180910390f35b61009f61009a366004610b23565b610125565b604051908152602001610083565b6100b5610372565b6040516100839796959493929190610bc6565b61009f6100d6366004610c5e565b6103b8565b61009f6100e9366004610cb0565b600260209081526000938452604080852082529284528284209052825290205481565b600061011f61011a83610db8565b6103cb565b92915050565b60008060008380602001905181019061013e9190610e75565b815151919350915033906001600160a01b0381168214610189576040516347666ba360e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50508151516000610199846103cb565b84516020808201516060909201516001600160a01b038087166000908152600284526040808220838716835285528082209287168252919093529091205492935090916001600160801b03909116908181808211610213576040516308e467d960e31b815260048101929092526024820152604401610180565b50600090506102228284610fb1565b9050600061023082896103f2565b905081156102f3576040516343edff4160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906387dbfe829061028e908f908a908a9088908e908990600401610fda565b600060405180830381600087803b1580156102a857600080fd5b505af11580156102bc573d6000803e3d6000fd5b5050506001600160a01b0380891660009081526002602090815260408083208a851684528252808320938b16835292905220859055505b866001600160a01b0316866001600160a01b03168d600281111561031957610319610fc4565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4509a9950505050505050505050565b600060608060008060006060610386610459565b61038e61048b565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061011f6103c68361102e565b6104b8565b6000806103db83600001516104b8565b90506103eb81846020015161056f565b9392505050565b600061040183620f4240101590565b80610414575061041482620f4240101590565b8383909161043e5760405163768bf0eb60e11b815260048101929092526024820152604401610180565b50620f4240905061044f838561103a565b6103eb9190611051565b60606104867f00000000000000000000000000000000000000000000000000000000000000006000610599565b905090565b60606104867f00000000000000000000000000000000000000000000000000000000000000006001610599565b600061011f7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610554969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610644565b60008060008061057f8686610671565b92509250925061058f82826106be565b5090949350505050565b606060ff83146105b3576105ac8361077b565b905061011f565b8180546105bf90611073565b80601f01602080910402602001604051908101604052809291908181526020018280546105eb90611073565b80156106385780601f1061060d57610100808354040283529160200191610638565b820191906000526020600020905b81548152906001019060200180831161061b57829003601f168201915b5050505050905061011f565b600061011f6106516107ba565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600083516041036106ab5760208401516040850151606086015160001a61069d888285856108e5565b9550955095505050506106b7565b50508151600091506002905b9250925092565b60008260038111156106d2576106d2610fc4565b036106db575050565b60018260038111156106ef576106ef610fc4565b0361070d5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561072157610721610fc4565b036107425760405163fce698f760e01b815260048101829052602401610180565b600382600381111561075657610756610fc4565b03610777576040516335e2f38360e21b815260048101829052602401610180565b5050565b60606000610788836109b4565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561081357507f000000000000000000000000000000000000000000000000000000000000000046145b1561083d57507f000000000000000000000000000000000000000000000000000000000000000090565b610486604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561092057506000915060039050826109aa565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610974573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109a0575060009250600191508290506109aa565b9250600091508190505b9450945094915050565b600060ff8216601f81111561011f57604051632cd44ac360e21b815260040160405180910390fd5b6000602082840312156109ee57600080fd5b81356001600160401b03811115610a0457600080fd5b8201604081850312156103eb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715610a4e57610a4e610a16565b60405290565b604080519081016001600160401b0381118282101715610a4e57610a4e610a16565b604051601f8201601f191681016001600160401b0381118282101715610a9e57610a9e610a16565b604052919050565b60006001600160401b03821115610abf57610abf610a16565b50601f01601f191660200190565b600082601f830112610ade57600080fd5b8135610af1610aec82610aa6565b610a76565b818152846020838601011115610b0657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610b3657600080fd5b823560038110610b4557600080fd5b915060208301356001600160401b03811115610b6057600080fd5b610b6c85828601610acd565b9150509250929050565b60005b83811015610b91578181015183820152602001610b79565b50506000910152565b60008151808452610bb2816020860160208601610b76565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e060208201526000610be560e0830189610b9a565b8281036040840152610bf78189610b9a565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015610c4d578351835260209384019390920191600101610c2f565b50909b9a5050505050505050505050565b600060208284031215610c7057600080fd5b81356001600160401b03811115610c8657600080fd5b820160a081850312156103eb57600080fd5b6001600160a01b0381168114610cad57600080fd5b50565b600080600060608486031215610cc557600080fd5b8335610cd081610c98565b92506020840135610ce081610c98565b91506040840135610cf081610c98565b809150509250925092565b6001600160401b0381168114610cad57600080fd5b6001600160801b0381168114610cad57600080fd5b600060a08284031215610d3757600080fd5b610d3f610a2c565b90508135610d4c81610c98565b81526020820135610d5c81610c98565b60208201526040820135610d6f81610cfb565b60408201526060820135610d8281610d10565b606082015260808201356001600160401b03811115610da057600080fd5b610dac84828501610acd565b60808301525092915050565b600060408236031215610dca57600080fd5b610dd2610a54565b82356001600160401b03811115610de857600080fd5b610df436828601610d25565b82525060208301356001600160401b03811115610e1057600080fd5b610e1c36828601610acd565b60208301525092915050565b600082601f830112610e3957600080fd5b8151610e47610aec82610aa6565b818152846020838601011115610e5c57600080fd5b610e6d826020830160208701610b76565b949350505050565b60008060408385031215610e8857600080fd5b82516001600160401b03811115610e9e57600080fd5b830160408186031215610eb057600080fd5b610eb8610a54565b81516001600160401b03811115610ece57600080fd5b820160a08188031215610ee057600080fd5b610ee8610a2c565b8151610ef381610c98565b81526020820151610f0381610c98565b60208201526040820151610f1681610cfb565b60408201526060820151610f2981610d10565b606082015260808201516001600160401b03811115610f4757600080fd5b610f5389828501610e28565b60808301525082525060208201516001600160401b03811115610f7557600080fd5b610f8187828501610e28565b602083810191909152959095015190969095509350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561011f5761011f610f9b565b634e487b7160e01b600052602160045260246000fd5b60c0810160038810610ffc57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b600061011f3683610d25565b808202811582820484141761011f5761011f610f9b565b60008261106e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061108757607f821691505b6020821081036110a757634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212204ea11b7f590e7303a0b1850b4cd59148c357bb48498bdb2606c6e97c057012e264736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80631ef518f21461005c5780637f07d2831461008c57806384b0196e146100ad5780638821603c146100c8578063cfdb35bd146100db575b600080fd5b61006f61006a3660046109dc565b61010c565b6040516001600160a01b0390911681526020015b60405180910390f35b61009f61009a366004610b23565b610125565b604051908152602001610083565b6100b5610372565b6040516100839796959493929190610bc6565b61009f6100d6366004610c5e565b6103b8565b61009f6100e9366004610cb0565b600260209081526000938452604080852082529284528284209052825290205481565b600061011f61011a83610db8565b6103cb565b92915050565b60008060008380602001905181019061013e9190610e75565b815151919350915033906001600160a01b0381168214610189576040516347666ba360e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50508151516000610199846103cb565b84516020808201516060909201516001600160a01b038087166000908152600284526040808220838716835285528082209287168252919093529091205492935090916001600160801b03909116908181808211610213576040516308e467d960e31b815260048101929092526024820152604401610180565b50600090506102228284610fb1565b9050600061023082896103f2565b905081156102f3576040516343edff4160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906387dbfe829061028e908f908a908a9088908e908990600401610fda565b600060405180830381600087803b1580156102a857600080fd5b505af11580156102bc573d6000803e3d6000fd5b5050506001600160a01b0380891660009081526002602090815260408083208a851684528252808320938b16835292905220859055505b866001600160a01b0316866001600160a01b03168d600281111561031957610319610fc4565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4509a9950505050505050505050565b600060608060008060006060610386610459565b61038e61048b565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061011f6103c68361102e565b6104b8565b6000806103db83600001516104b8565b90506103eb81846020015161056f565b9392505050565b600061040183620f4240101590565b80610414575061041482620f4240101590565b8383909161043e5760405163768bf0eb60e11b815260048101929092526024820152604401610180565b50620f4240905061044f838561103a565b6103eb9190611051565b60606104867f00000000000000000000000000000000000000000000000000000000000000006000610599565b905090565b60606104867f00000000000000000000000000000000000000000000000000000000000000006001610599565b600061011f7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610554969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610644565b60008060008061057f8686610671565b92509250925061058f82826106be565b5090949350505050565b606060ff83146105b3576105ac8361077b565b905061011f565b8180546105bf90611073565b80601f01602080910402602001604051908101604052809291908181526020018280546105eb90611073565b80156106385780601f1061060d57610100808354040283529160200191610638565b820191906000526020600020905b81548152906001019060200180831161061b57829003601f168201915b5050505050905061011f565b600061011f6106516107ba565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600083516041036106ab5760208401516040850151606086015160001a61069d888285856108e5565b9550955095505050506106b7565b50508151600091506002905b9250925092565b60008260038111156106d2576106d2610fc4565b036106db575050565b60018260038111156106ef576106ef610fc4565b0361070d5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561072157610721610fc4565b036107425760405163fce698f760e01b815260048101829052602401610180565b600382600381111561075657610756610fc4565b03610777576040516335e2f38360e21b815260048101829052602401610180565b5050565b60606000610788836109b4565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561081357507f000000000000000000000000000000000000000000000000000000000000000046145b1561083d57507f000000000000000000000000000000000000000000000000000000000000000090565b610486604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561092057506000915060039050826109aa565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610974573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109a0575060009250600191508290506109aa565b9250600091508190505b9450945094915050565b600060ff8216601f81111561011f57604051632cd44ac360e21b815260040160405180910390fd5b6000602082840312156109ee57600080fd5b81356001600160401b03811115610a0457600080fd5b8201604081850312156103eb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715610a4e57610a4e610a16565b60405290565b604080519081016001600160401b0381118282101715610a4e57610a4e610a16565b604051601f8201601f191681016001600160401b0381118282101715610a9e57610a9e610a16565b604052919050565b60006001600160401b03821115610abf57610abf610a16565b50601f01601f191660200190565b600082601f830112610ade57600080fd5b8135610af1610aec82610aa6565b610a76565b818152846020838601011115610b0657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610b3657600080fd5b823560038110610b4557600080fd5b915060208301356001600160401b03811115610b6057600080fd5b610b6c85828601610acd565b9150509250929050565b60005b83811015610b91578181015183820152602001610b79565b50506000910152565b60008151808452610bb2816020860160208601610b76565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e060208201526000610be560e0830189610b9a565b8281036040840152610bf78189610b9a565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015610c4d578351835260209384019390920191600101610c2f565b50909b9a5050505050505050505050565b600060208284031215610c7057600080fd5b81356001600160401b03811115610c8657600080fd5b820160a081850312156103eb57600080fd5b6001600160a01b0381168114610cad57600080fd5b50565b600080600060608486031215610cc557600080fd5b8335610cd081610c98565b92506020840135610ce081610c98565b91506040840135610cf081610c98565b809150509250925092565b6001600160401b0381168114610cad57600080fd5b6001600160801b0381168114610cad57600080fd5b600060a08284031215610d3757600080fd5b610d3f610a2c565b90508135610d4c81610c98565b81526020820135610d5c81610c98565b60208201526040820135610d6f81610cfb565b60408201526060820135610d8281610d10565b606082015260808201356001600160401b03811115610da057600080fd5b610dac84828501610acd565b60808301525092915050565b600060408236031215610dca57600080fd5b610dd2610a54565b82356001600160401b03811115610de857600080fd5b610df436828601610d25565b82525060208301356001600160401b03811115610e1057600080fd5b610e1c36828601610acd565b60208301525092915050565b600082601f830112610e3957600080fd5b8151610e47610aec82610aa6565b818152846020838601011115610e5c57600080fd5b610e6d826020830160208701610b76565b949350505050565b60008060408385031215610e8857600080fd5b82516001600160401b03811115610e9e57600080fd5b830160408186031215610eb057600080fd5b610eb8610a54565b81516001600160401b03811115610ece57600080fd5b820160a08188031215610ee057600080fd5b610ee8610a2c565b8151610ef381610c98565b81526020820151610f0381610c98565b60208201526040820151610f1681610cfb565b60408201526060820151610f2981610d10565b606082015260808201516001600160401b03811115610f4757600080fd5b610f5389828501610e28565b60808301525082525060208201516001600160401b03811115610f7557600080fd5b610f8187828501610e28565b602083810191909152959095015190969095509350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561011f5761011f610f9b565b634e487b7160e01b600052602160045260246000fd5b60c0810160038810610ffc57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b600061011f3683610d25565b808202811582820484141761011f5761011f610f9b565b60008261106e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061108757607f821691505b6020821081036110a757634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212204ea11b7f590e7303a0b1850b4cd59148c357bb48498bdb2606c6e97c057012e264736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-11155111/deployed_addresses.json b/packages/horizon/ignition/deployments/chain-11155111/deployed_addresses.json new file mode 100644 index 000000000..07d87c022 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/deployed_addresses.json @@ -0,0 +1,41 @@ +{ + "BridgeEscrow#BridgeEscrow": "0xD1e69Dd541597F3a976ec34416F806322C560509", + "Controller#Controller": "0x9746Fb649B0AD9BA77201e9bf4e864B852e60841", + "HorizonProxies#OZProxyDummy_GraphPayments": "0x2366Bb0Ce360465153e0fF2945A14e820E6a1A14", + "Curation#Curation": "0xB20db0C5b472A25913f668bdAeE299880F3761e5", + "Curation#GraphCurationToken": "0x85820DB0AbC0f869fF5B8C47d80baD8ce8D23e36", + "EpochManager#EpochManager": "0xaBDda0b824b1581Ad6bE147AE5ED7E42B8D90602", + "GraphProxyAdmin#GraphProxyAdmin": "0x86e0221dBe437a67120BdBB8c53847Fb4D756416", + "GraphToken#GraphToken": "0xFBdc2dEbD9d3C57c5A61c958edcaA8C3a54c6188", + "GraphTokenGateway#GraphTokenGateway": "0x2e2a734Aad8Ff4B60E88b211B0daC398eCC2098c", + "HorizonProxies#OZProxyDummy_PaymentsEscrow": "0xC1Ce222a5A5f0e4CA5beF19cF6f53714288b9FFA", + "HorizonStakingExtension#ExponentialRebates": "0xA018c2419084c2DfC9C321103c2D5a98d4Db137c", + "RewardsManager#RewardsManager": "0x1c37C0725527C76B9B48DaFcE78673bB7354B3a1", + "HorizonProxies#TransparentUpgradeableProxy_GraphPayments": "0x5C72b84F619399087Df1e4b686050A5F336126D9", + "HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow": "0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53", + "BridgeEscrow#GraphProxy": "0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F", + "Curation#GraphProxy": "0xEC2ed45a73BD2A324739691eaf425aDD66918FAb", + "EpochManager#GraphProxy": "0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA", + "GraphToken#GraphProxy": "0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205", + "GraphTokenGateway#GraphProxy": "0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51", + "RewardsManager#GraphProxy": "0xCab63af715010d12dA2128777abB2103F9a0EF8F", + "BridgeEscrow#BridgeEscrow_Instance": "0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F", + "Curation#Curation_Instance": "0xEC2ed45a73BD2A324739691eaf425aDD66918FAb", + "EpochManager#EpochManager_Instance": "0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA", + "GraphToken#GraphToken_Instance": "0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205", + "GraphTokenGateway#GraphTokenGateway_Instance": "0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51", + "HorizonProxies#ProxyAdmin_GraphPayments": "0xaBE1e45c636a27aD02f0022e0AB32BF350702Df1", + "HorizonProxies#ProxyAdmin_PaymentsEscrow": "0x9fa225C2D4Cf40c8B0100Af7dacb8bCf84D822d0", + "RewardsManager#RewardsManager_Instance": "0xCab63af715010d12dA2128777abB2103F9a0EF8F", + "GraphHorizon_Periphery#Dummy": "0x31a62E69D8A4003365A97758091685eA72333155", + "HorizonProxies#GraphProxy_HorizonStaking": "0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2", + "HorizonProxies#RegisteredDummy": "0x73bb9ee763C815ae288f5c75187cb3Be2De1DA38", + "GraphPayments#GraphPayments_Instance": "0x5C72b84F619399087Df1e4b686050A5F336126D9", + "PaymentsEscrow#PaymentsEscrow_Instance": "0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53", + "GraphPayments#GraphPayments": "0x0E0e9AC171562b6d6141f69075DEd1E3922930B7", + "HorizonStakingExtension#HorizonStakingExtension": "0xeB436D1CF0d6EabC759EB3bCd96BdBA4cD208eb3", + "PaymentsEscrow#PaymentsEscrow": "0x834f7Fd38818dF6d79265e0BBb56A06168356231", + "TAPCollector#TAPCollector": "0xfd24C169Cb89c448aaeB570507aAF77ff9277E4f", + "HorizonStaking#HorizonStaking": "0x4C6301489267EA82BeDA87d4dabc50A210aBa275", + "HorizonStaking#HorizonStaking_Instance": "0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2" +} diff --git a/packages/horizon/ignition/deployments/chain-11155111/journal.jsonl b/packages/horizon/ignition/deployments/chain-11155111/journal.jsonl new file mode 100644 index 000000000..f2c983d93 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-11155111/journal.jsonl @@ -0,0 +1,318 @@ + +{"chainId":11155111,"type":"DEPLOYMENT_INITIALIZE"} +{"artifactId":"BridgeEscrow#BridgeEscrow","constructorArgs":[],"contractName":"BridgeEscrow","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"BridgeEscrow#BridgeEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"BridgeEscrow#BridgeEscrow","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"BridgeEscrow#BridgeEscrow","networkInteractionId":1,"nonce":235,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8613258860"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x1e244f483b0bae4940372bac6ff73138a3cbe8eb8b8ea82667f56e2e5250afd3"},"type":"TRANSACTION_SEND"} +{"artifactId":"Controller#Controller","constructorArgs":[],"contractName":"Controller","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"Controller#Controller","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506100243361003360201b6109b21760201c565b61002e6001610055565b6100e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff1615158115151415610075576100e4565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff910416156100a157426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a15b50565b610ba0806100f66000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80636cda3798116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80636cda3798146101ce57806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b806348bde20c116100de57806348bde20c146101795780634fc07d751461019f57806356371bd8146101a75780635c975abb146101c65761010b565b80630c340a241461011057806316c38b3c1461013457806324a3d622146101555780632e292fc71461015d575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b6101536004803603602081101561014a57600080fd5b503515156102c7565b005b610118610331565b610165610340565b604080519115158252519081900360200190f35b6101536004803603602081101561018f57600080fd5b50356001600160a01b0316610350565b61011861040c565b610153600480360360208110156101bd57600080fd5b5035151561041b565b610165610482565b6101d6610492565b60408051918252519081900360200190f35b610153610498565b6101536004803603602081101561020657600080fd5b50356105a6565b6101d6610651565b6101536004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b6101536004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b6101536004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b6000546001600160a01b03163314806102ea57506004546001600160a01b031633145b6103255760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103a8576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610403576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61032e81610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061043e57506004546001600160a01b031633145b6104795760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e81610ab7565b600154600160a81b900460ff1690565b60025481565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f45761032e565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad75761032e565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca2646970667358221220c742dbbf8f38fda928d26053c584788bb7d7b003131594b9e14f1381ebbdbb3064736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller","networkInteractionId":1,"nonce":236,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8613258860"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x8b933f38a21564afa1108579355a9b9425641c9a7a23948ab68b552486f14583"},"type":"TRANSACTION_SEND"} +{"artifactId":"Curation#Curation","constructorArgs":[],"contractName":"Curation","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"Curation#Curation","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#Curation","networkInteraction":{"data":"0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#Curation","networkInteractionId":1,"nonce":237,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8613258860"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xf48f23e53e8adc84dd2731b1223dbfc7a88aa1554a050dd886e4f32bf4b47252"},"type":"TRANSACTION_SEND"} +{"artifactId":"Curation#GraphCurationToken","constructorArgs":[],"contractName":"GraphCurationToken","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"Curation#GraphCurationToken","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#GraphCurationToken","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506114ec806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#GraphCurationToken","networkInteractionId":1,"nonce":238,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8613258860"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x42bb5c8a740352fe4ed4296d836ffac44d431f8f2ef3caef87a04f6b73c3a83b"},"type":"TRANSACTION_SEND"} +{"artifactId":"EpochManager#EpochManager","constructorArgs":[],"contractName":"EpochManager","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"EpochManager#EpochManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"EpochManager#EpochManager","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"EpochManager#EpochManager","networkInteractionId":1,"nonce":239,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8613258860"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x9cc51e406b48c153b346fcdd834ff65d3167ce1df8dd5596a07f02e139b92f77"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphProxyAdmin#GraphProxyAdmin","constructorArgs":[],"contractName":"GraphProxyAdmin","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"GraphProxyAdmin#GraphProxyAdmin","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506100243361002960201b610a0c1760201c565b61004b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610a648061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","networkInteractionId":1,"nonce":240,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8613258860"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x245dbac23a75574bbf072a23c55ece60c19fc4928f874704661c7770d4aaf676"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphToken#GraphToken","constructorArgs":[],"contractName":"GraphToken","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"GraphToken#GraphToken","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken","networkInteraction":{"data":"0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken","networkInteractionId":1,"nonce":241,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8613258860"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x0a085a815d30e599f281fbde7a0df8a8a9ee5090481a33ffc226166bbdf6061e"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphTokenGateway#GraphTokenGateway","constructorArgs":[],"contractName":"GraphTokenGateway","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"GraphTokenGateway#GraphTokenGateway","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphTokenGateway","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphTokenGateway","networkInteractionId":1,"nonce":242,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8613258860"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x4e38b4bf3a9619551af22cef109c26563a6dc71930e8a27277af36515e66e969"},"type":"TRANSACTION_SEND"} +{"artifactId":"HorizonProxies#OZProxyDummy_GraphPayments","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"HorizonProxies#OZProxyDummy_GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","networkInteractionId":1,"nonce":243,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8120140386"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x45a22a889928909c7dc20797225a885e24022bde79231ad84387574afae8303d"},"type":"TRANSACTION_SEND"} +{"artifactId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","networkInteractionId":1,"nonce":244,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8120140386"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xd25cc7260b9f404196709c9bfd8222de1ca28626fa44050d22983038e053de6e"},"type":"TRANSACTION_SEND"} +{"artifactId":"HorizonStakingExtension#ExponentialRebates","constructorArgs":[],"contractName":"ExponentialRebates","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"HorizonStakingExtension#ExponentialRebates","futureType":"LIBRARY_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStakingExtension#ExponentialRebates","networkInteraction":{"data":"0x610c2d610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStakingExtension#ExponentialRebates","networkInteractionId":1,"nonce":245,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8120140386"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x648676702a8f33c1289655be95cc8131cf9a1987fccc64da8ab5b7bcfd87743e"},"type":"TRANSACTION_SEND"} +{"artifactId":"RewardsManager#RewardsManager","constructorArgs":[],"contractName":"RewardsManager","dependencies":[],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"RewardsManager#RewardsManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager","networkInteractionId":1,"nonce":246,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"9046398448"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x9feb7887395ce34be9acdc287aa24f8bad99ddfa64dcde874322a0895769fc20"},"type":"TRANSACTION_SEND"} +{"futureId":"BridgeEscrow#BridgeEscrow","hash":"0x1e244f483b0bae4940372bac6ff73138a3cbe8eb8b8ea82667f56e2e5250afd3","networkInteractionId":1,"receipt":{"blockHash":"0x103bc987eaddc9dc5ff9838e8a9eb67527a3aef3ed085f29ff1e520c8f6af956","blockNumber":6722861,"contractAddress":"0xD1e69Dd541597F3a976ec34416F806322C560509","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"BridgeEscrow#BridgeEscrow","result":{"address":"0xD1e69Dd541597F3a976ec34416F806322C560509","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"Controller#Controller","hash":"0x8b933f38a21564afa1108579355a9b9425641c9a7a23948ab68b552486f14583","networkInteractionId":1,"receipt":{"blockHash":"0x103bc987eaddc9dc5ff9838e8a9eb67527a3aef3ed085f29ff1e520c8f6af956","blockNumber":6722861,"contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":324,"topics":["0x8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller","result":{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","hash":"0x45a22a889928909c7dc20797225a885e24022bde79231ad84387574afae8303d","networkInteractionId":1,"receipt":{"blockHash":"0x2c218ad7a7f3104edcb11c5fe04699b93a24e39a4f193cc981f8321d88baaacf","blockNumber":6722862,"contractAddress":"0x2366Bb0Ce360465153e0fF2945A14e820E6a1A14","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","result":{"address":"0x2366Bb0Ce360465153e0fF2945A14e820E6a1A14","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"Curation#Curation","hash":"0xf48f23e53e8adc84dd2731b1223dbfc7a88aa1554a050dd886e4f32bf4b47252","networkInteractionId":1,"receipt":{"blockHash":"0x2c218ad7a7f3104edcb11c5fe04699b93a24e39a4f193cc981f8321d88baaacf","blockNumber":6722862,"contractAddress":"0xB20db0C5b472A25913f668bdAeE299880F3761e5","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#Curation","result":{"address":"0xB20db0C5b472A25913f668bdAeE299880F3761e5","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"Curation#GraphCurationToken","hash":"0x42bb5c8a740352fe4ed4296d836ffac44d431f8f2ef3caef87a04f6b73c3a83b","networkInteractionId":1,"receipt":{"blockHash":"0x2c218ad7a7f3104edcb11c5fe04699b93a24e39a4f193cc981f8321d88baaacf","blockNumber":6722862,"contractAddress":"0x85820DB0AbC0f869fF5B8C47d80baD8ce8D23e36","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#GraphCurationToken","result":{"address":"0x85820DB0AbC0f869fF5B8C47d80baD8ce8D23e36","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"EpochManager#EpochManager","hash":"0x9cc51e406b48c153b346fcdd834ff65d3167ce1df8dd5596a07f02e139b92f77","networkInteractionId":1,"receipt":{"blockHash":"0x2c218ad7a7f3104edcb11c5fe04699b93a24e39a4f193cc981f8321d88baaacf","blockNumber":6722862,"contractAddress":"0xaBDda0b824b1581Ad6bE147AE5ED7E42B8D90602","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"EpochManager#EpochManager","result":{"address":"0xaBDda0b824b1581Ad6bE147AE5ED7E42B8D90602","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","hash":"0x245dbac23a75574bbf072a23c55ece60c19fc4928f874704661c7770d4aaf676","networkInteractionId":1,"receipt":{"blockHash":"0x2c218ad7a7f3104edcb11c5fe04699b93a24e39a4f193cc981f8321d88baaacf","blockNumber":6722862,"contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","result":{"address":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphToken","hash":"0x0a085a815d30e599f281fbde7a0df8a8a9ee5090481a33ffc226166bbdf6061e","networkInteractionId":1,"receipt":{"blockHash":"0x2c218ad7a7f3104edcb11c5fe04699b93a24e39a4f193cc981f8321d88baaacf","blockNumber":6722862,"contractAddress":"0xFBdc2dEbD9d3C57c5A61c958edcaA8C3a54c6188","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken","result":{"address":"0xFBdc2dEbD9d3C57c5A61c958edcaA8C3a54c6188","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphTokenGateway#GraphTokenGateway","hash":"0x4e38b4bf3a9619551af22cef109c26563a6dc71930e8a27277af36515e66e969","networkInteractionId":1,"receipt":{"blockHash":"0x2c218ad7a7f3104edcb11c5fe04699b93a24e39a4f193cc981f8321d88baaacf","blockNumber":6722862,"contractAddress":"0x2e2a734Aad8Ff4B60E88b211B0daC398eCC2098c","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphTokenGateway","result":{"address":"0x2e2a734Aad8Ff4B60E88b211B0daC398eCC2098c","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","hash":"0xd25cc7260b9f404196709c9bfd8222de1ca28626fa44050d22983038e053de6e","networkInteractionId":1,"receipt":{"blockHash":"0x598a3cf0cfa92908a08e04fab395f4f5fa4362cb73ce8efccd5a7d65e0ebb650","blockNumber":6722863,"contractAddress":"0xC1Ce222a5A5f0e4CA5beF19cF6f53714288b9FFA","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","result":{"address":"0xC1Ce222a5A5f0e4CA5beF19cF6f53714288b9FFA","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonStakingExtension#ExponentialRebates","hash":"0x648676702a8f33c1289655be95cc8131cf9a1987fccc64da8ab5b7bcfd87743e","networkInteractionId":1,"receipt":{"blockHash":"0x598a3cf0cfa92908a08e04fab395f4f5fa4362cb73ce8efccd5a7d65e0ebb650","blockNumber":6722863,"contractAddress":"0xA018c2419084c2DfC9C321103c2D5a98d4Db137c","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStakingExtension#ExponentialRebates","result":{"address":"0xA018c2419084c2DfC9C321103c2D5a98d4Db137c","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#RewardsManager","hash":"0x9feb7887395ce34be9acdc287aa24f8bad99ddfa64dcde874322a0895769fc20","networkInteractionId":1,"receipt":{"blockHash":"0x598a3cf0cfa92908a08e04fab395f4f5fa4362cb73ce8efccd5a7d65e0ebb650","blockNumber":6722863,"contractAddress":"0x1c37C0725527C76B9B48DaFcE78673bB7354B3a1","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager","result":{"address":"0x1c37C0725527C76B9B48DaFcE78673bB7354B3a1","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setPauseGuardian","futureId":"Controller#Controller.setPauseGuardian","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller.setPauseGuardian","networkInteraction":{"data":"0x48bde20c00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller.setPauseGuardian","networkInteractionId":1,"nonce":247,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8292233818"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x82a2cb419f3ad7da61f82d6e521e6ae8f19a2458d9e1011005362412fd4570a8"},"type":"TRANSACTION_SEND"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"transferOwnership","futureId":"Controller#Controller.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller.transferOwnership","networkInteractionId":1,"nonce":248,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8292233818"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x2d8d93226974aafffdeacc6e6be418cd8472f6ab42c211d3ef7658e80916b3a1"},"type":"TRANSACTION_SEND"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","dependencies":["GraphProxyAdmin#GraphProxyAdmin"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"transferOwnership","futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","networkInteractionId":1,"nonce":249,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8292233818"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x0a827a872f000619854e1d5e460db2c1411618130552970dfb12d0345253f4ec"},"type":"TRANSACTION_SEND"} +{"args":["0x559081d91f5ff43dfe51a07c216f8e6893805b35"],"artifactId":"GraphToken#GraphToken","dependencies":["GraphToken#GraphToken"],"functionName":"initialize","futureId":"GraphToken#encodeFunctionCall(GraphToken#GraphToken.initialize)","result":"0xc4d66de8000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b35","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","constructorArgs":["0x2366Bb0Ce360465153e0fF2945A14e820E6a1A14","0x559081d91f5ff43dfe51a07c216f8e6893805b35","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["HorizonProxies#OZProxyDummy_GraphPayments"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61030000000000000000000000002366bb0ce360465153e0ff2945a14e820e6a1a14000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","networkInteractionId":1,"nonce":250,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8530810126"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x19ff4d52201ce3f6f1d95b72fb8899c8d43797770abbb9f4ae0abedc2db2662a"},"type":"TRANSACTION_SEND"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","constructorArgs":["0xC1Ce222a5A5f0e4CA5beF19cF6f53714288b9FFA","0x559081d91f5ff43dfe51a07c216f8e6893805b35","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["HorizonProxies#OZProxyDummy_PaymentsEscrow"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000c1ce222a5a5f0e4ca5bef19cf6f53714288b9ffa000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b3500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","networkInteractionId":1,"nonce":251,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8530810126"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x42bf8596317bc2393e34ffebe49928d14bc6c34e67e299839abb86e0b134bb0a"},"type":"TRANSACTION_SEND"} +{"futureId":"Controller#Controller.setPauseGuardian","hash":"0x82a2cb419f3ad7da61f82d6e521e6ae8f19a2458d9e1011005362412fd4570a8","networkInteractionId":1,"receipt":{"blockHash":"0xf260409b3c19df19525b0420481a6647971e2a35465dc5b8a05fde789c1259a6","blockNumber":6722868,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x","logIndex":92,"topics":["0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller.setPauseGuardian","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"Controller#Controller.transferOwnership","hash":"0x2d8d93226974aafffdeacc6e6be418cd8472f6ab42c211d3ef7658e80916b3a1","networkInteractionId":1,"receipt":{"blockHash":"0xa59bf740f159ad108f273ba411d5cca144e9593b7af9bb99dc31eddde2a3c419","blockNumber":6722869,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x","logIndex":103,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","hash":"0x0a827a872f000619854e1d5e460db2c1411618130552970dfb12d0345253f4ec","networkInteractionId":1,"receipt":{"blockHash":"0xa59bf740f159ad108f273ba411d5cca144e9593b7af9bb99dc31eddde2a3c419","blockNumber":6722869,"logs":[{"address":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","data":"0x","logIndex":104,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","hash":"0x19ff4d52201ce3f6f1d95b72fb8899c8d43797770abbb9f4ae0abedc2db2662a","networkInteractionId":1,"receipt":{"blockHash":"0xa59bf740f159ad108f273ba411d5cca144e9593b7af9bb99dc31eddde2a3c419","blockNumber":6722869,"contractAddress":"0x5C72b84F619399087Df1e4b686050A5F336126D9","logs":[{"address":"0x5C72b84F619399087Df1e4b686050A5F336126D9","data":"0x","logIndex":105,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x0000000000000000000000002366bb0ce360465153e0ff2945a14e820e6a1a14"]},{"address":"0xaBE1e45c636a27aD02f0022e0AB32BF350702Df1","data":"0x","logIndex":106,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b35"]},{"address":"0x5C72b84F619399087Df1e4b686050A5F336126D9","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abe1e45c636a27ad02f0022e0ab32bf350702df1","logIndex":107,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","result":{"address":"0x5C72b84F619399087Df1e4b686050A5F336126D9","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","hash":"0x42bf8596317bc2393e34ffebe49928d14bc6c34e67e299839abb86e0b134bb0a","networkInteractionId":1,"receipt":{"blockHash":"0xa59bf740f159ad108f273ba411d5cca144e9593b7af9bb99dc31eddde2a3c419","blockNumber":6722869,"contractAddress":"0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53","logs":[{"address":"0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53","data":"0x","logIndex":108,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000c1ce222a5a5f0e4ca5bef19cf6f53714288b9ffa"]},{"address":"0x9fa225C2D4Cf40c8B0100Af7dacb8bCf84D822d0","data":"0x","logIndex":109,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b35"]},{"address":"0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53","data":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fa225c2d4cf40c8b0100af7dacb8bcf84d822d0","logIndex":110,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","result":{"address":"0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"BridgeEscrow#GraphProxy","constructorArgs":["0xD1e69Dd541597F3a976ec34416F806322C560509","0x86e0221dBe437a67120BdBB8c53847Fb4D756416"],"contractName":"GraphProxy","dependencies":["BridgeEscrow#BridgeEscrow","GraphProxyAdmin#GraphProxyAdmin"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"BridgeEscrow#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"BridgeEscrow#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000d1e69dd541597f3a976ec34416f806322c56050900000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"BridgeEscrow#GraphProxy","networkInteractionId":1,"nonce":252,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8259383240"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xaba3c4f45ab6210c8f50850dc6750ca5fb3eeb757662caf2b496954ddd41303f"},"type":"TRANSACTION_SEND"} +{"args":["0x9746Fb649B0AD9BA77201e9bf4e864B852e60841"],"artifactId":"BridgeEscrow#BridgeEscrow","dependencies":["BridgeEscrow#BridgeEscrow","Controller#Controller"],"functionName":"initialize","futureId":"BridgeEscrow#encodeFunctionCall(BridgeEscrow#BridgeEscrow.initialize)","result":"0xc4d66de80000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"Curation#GraphProxy","constructorArgs":["0xB20db0C5b472A25913f668bdAeE299880F3761e5","0x86e0221dBe437a67120BdBB8c53847Fb4D756416"],"contractName":"GraphProxy","dependencies":["Curation#Curation","GraphProxyAdmin#GraphProxyAdmin"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"Curation#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000b20db0c5b472a25913f668bdaee299880f3761e500000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#GraphProxy","networkInteractionId":1,"nonce":253,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8259383240"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x3559487111caf96c193099190a2f8e715045161ab114e6016603602bfa965d15"},"type":"TRANSACTION_SEND"} +{"args":["0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","0x85820DB0AbC0f869fF5B8C47d80baD8ce8D23e36",10000,1],"artifactId":"Curation#Curation","dependencies":["Curation#Curation","Controller#Controller","Curation#GraphCurationToken"],"functionName":"initialize","futureId":"Curation#encodeFunctionCall(Curation#Curation.initialize)","result":"0x4c8c7a440000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e6084100000000000000000000000085820db0abc0f869ff5b8c47d80bad8ce8d23e3600000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"EpochManager#GraphProxy","constructorArgs":["0xaBDda0b824b1581Ad6bE147AE5ED7E42B8D90602","0x86e0221dBe437a67120BdBB8c53847Fb4D756416"],"contractName":"GraphProxy","dependencies":["EpochManager#EpochManager","GraphProxyAdmin#GraphProxyAdmin"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"EpochManager#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"EpochManager#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000abdda0b824b1581ad6be147ae5ed7e42b8d9060200000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"EpochManager#GraphProxy","networkInteractionId":1,"nonce":254,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8107471538"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x745091e1d096c3931da1ca2a083308a61367ca0febeb3b45d791fe4ff0466f27"},"type":"TRANSACTION_SEND"} +{"args":["0x9746Fb649B0AD9BA77201e9bf4e864B852e60841",60],"artifactId":"EpochManager#EpochManager","dependencies":["EpochManager#EpochManager","Controller#Controller"],"functionName":"initialize","futureId":"EpochManager#encodeFunctionCall(EpochManager#EpochManager.initialize)","result":"0xcd6dc6870000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841000000000000000000000000000000000000000000000000000000000000003c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"args":["0xed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb","0x86e0221dBe437a67120BdBB8c53847Fb4D756416"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller","GraphProxyAdmin#GraphProxyAdmin"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","networkInteraction":{"data":"0xe0e99292ed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","networkInteractionId":1,"nonce":255,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8107471538"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x6c7d7a87d6e93a98eac74bd1174eb67be69e264ba30130faa3ef20985c4f840e"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphToken#GraphProxy","constructorArgs":["0xFBdc2dEbD9d3C57c5A61c958edcaA8C3a54c6188","0x86e0221dBe437a67120BdBB8c53847Fb4D756416"],"contractName":"GraphProxy","dependencies":["GraphToken#GraphToken","GraphProxyAdmin#GraphProxyAdmin"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"GraphToken#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000fbdc2debd9d3c57c5a61c958edcaa8c3a54c618800000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphProxy","networkInteractionId":1,"nonce":256,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8107471538"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xafd66ceed871485492119031b77cefbaab04cb4d7232abf6f964ec94db1b68db"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphTokenGateway#GraphProxy","constructorArgs":["0x2e2a734Aad8Ff4B60E88b211B0daC398eCC2098c","0x86e0221dBe437a67120BdBB8c53847Fb4D756416"],"contractName":"GraphProxy","dependencies":["GraphTokenGateway#GraphTokenGateway","GraphProxyAdmin#GraphProxyAdmin"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"GraphTokenGateway#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000002e2a734aad8ff4b60e88b211b0dac398ecc2098c00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphProxy","networkInteractionId":1,"nonce":257,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8107471538"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xa9f5e0d14952a90994039d47f916d22788c3f7ba63906a5082d57013cd8c2a30"},"type":"TRANSACTION_SEND"} +{"args":["0x9746Fb649B0AD9BA77201e9bf4e864B852e60841"],"artifactId":"GraphTokenGateway#GraphTokenGateway","dependencies":["GraphTokenGateway#GraphTokenGateway","Controller#Controller"],"functionName":"initialize","futureId":"GraphTokenGateway#encodeFunctionCall(GraphTokenGateway#GraphTokenGateway.initialize)","result":"0xc4d66de80000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"emitterAddress":"0x5C72b84F619399087Df1e4b686050A5F336126D9","eventIndex":0,"eventName":"AdminChanged","futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments_AdminChanged","nameOrIndex":"newAdmin","result":"0xaBE1e45c636a27aD02f0022e0AB32BF350702Df1","strategy":"basic","strategyConfig":{},"txToReadFrom":"0x19ff4d52201ce3f6f1d95b72fb8899c8d43797770abbb9f4ae0abedc2db2662a","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"emitterAddress":"0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53","eventIndex":0,"eventName":"AdminChanged","futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow_AdminChanged","nameOrIndex":"newAdmin","result":"0x9fa225C2D4Cf40c8B0100Af7dacb8bCf84D822d0","strategy":"basic","strategyConfig":{},"txToReadFrom":"0x42bf8596317bc2393e34ffebe49928d14bc6c34e67e299839abb86e0b134bb0a","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f","0x5C72b84F619399087Df1e4b686050A5F336126D9"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller","HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_GraphPayments","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","networkInteraction":{"data":"0xe0e9929288cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f0000000000000000000000005c72b84f619399087df1e4b686050a5f336126d9","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","networkInteractionId":1,"nonce":258,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"7657588232"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xf1a30501c799c04a49362aee92f8207b96e92163b923c47851fea6efc8ed03b7"},"type":"TRANSACTION_SEND"} +{"args":["0x628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9","0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller","HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","networkInteraction":{"data":"0xe0e99292628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc90000000000000000000000009e0730ef2971aa5a9fea13be01a7cbfdbf4b4c53","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","networkInteractionId":1,"nonce":259,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"7657588232"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x48d7e2b18b7d7ad9ad26a6d49fc1bc22c8dad2b92d09dc38328664b19777f726"},"type":"TRANSACTION_SEND"} +{"artifactId":"RewardsManager#GraphProxy","constructorArgs":["0x1c37C0725527C76B9B48DaFcE78673bB7354B3a1","0x86e0221dBe437a67120BdBB8c53847Fb4D756416"],"contractName":"GraphProxy","dependencies":["RewardsManager#RewardsManager","GraphProxyAdmin#GraphProxyAdmin"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"RewardsManager#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000001c37c0725527c76b9b48dafce78673bb7354b3a100000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#GraphProxy","networkInteractionId":1,"nonce":260,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"7657588232"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xee72027f07a720c2696d22ef0b2bdc0c82d8d1c0febc8f1e21e5a2b560712e9f"},"type":"TRANSACTION_SEND"} +{"args":["0x9746Fb649B0AD9BA77201e9bf4e864B852e60841"],"artifactId":"RewardsManager#RewardsManager","dependencies":["RewardsManager#RewardsManager","Controller#Controller"],"functionName":"initialize","futureId":"RewardsManager#encodeFunctionCall(RewardsManager#RewardsManager.initialize)","result":"0xc4d66de80000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"futureId":"BridgeEscrow#GraphProxy","hash":"0xaba3c4f45ab6210c8f50850dc6750ca5fb3eeb757662caf2b496954ddd41303f","networkInteractionId":1,"receipt":{"blockHash":"0x616cd1414f425239dc786292953e73fcff86c7f23fc3cca0f6feae4c33b423c1","blockNumber":6722875,"contractAddress":"0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F","logs":[{"address":"0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F","data":"0x","logIndex":124,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416"]},{"address":"0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F","data":"0x","logIndex":125,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000d1e69dd541597f3a976ec34416f806322c560509"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"BridgeEscrow#GraphProxy","result":{"address":"0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"Curation#GraphProxy","hash":"0x3559487111caf96c193099190a2f8e715045161ab114e6016603602bfa965d15","networkInteractionId":1,"receipt":{"blockHash":"0x616cd1414f425239dc786292953e73fcff86c7f23fc3cca0f6feae4c33b423c1","blockNumber":6722875,"contractAddress":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","logs":[{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","data":"0x","logIndex":132,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416"]},{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","data":"0x","logIndex":133,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000b20db0c5b472a25913f668bdaee299880f3761e5"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#GraphProxy","result":{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"EpochManager#GraphProxy","hash":"0x745091e1d096c3931da1ca2a083308a61367ca0febeb3b45d791fe4ff0466f27","networkInteractionId":1,"receipt":{"blockHash":"0x616cd1414f425239dc786292953e73fcff86c7f23fc3cca0f6feae4c33b423c1","blockNumber":6722875,"contractAddress":"0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","logs":[{"address":"0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","data":"0x","logIndex":135,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416"]},{"address":"0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","data":"0x","logIndex":136,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000abdda0b824b1581ad6be147ae5ed7e42b8d90602"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"EpochManager#GraphProxy","result":{"address":"0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","hash":"0x6c7d7a87d6e93a98eac74bd1174eb67be69e264ba30130faa3ef20985c4f840e","networkInteractionId":1,"receipt":{"blockHash":"0x616cd1414f425239dc786292953e73fcff86c7f23fc3cca0f6feae4c33b423c1","blockNumber":6722875,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416","logIndex":147,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphProxy","hash":"0xafd66ceed871485492119031b77cefbaab04cb4d7232abf6f964ec94db1b68db","networkInteractionId":1,"receipt":{"blockHash":"0xaa3a886e36c88d7260fd67dbe42ffb2f9133fbbba4bfe5ee3f10f0e8aafd280c","blockNumber":6722876,"contractAddress":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","logs":[{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x","logIndex":59,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416"]},{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x","logIndex":60,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fbdc2debd9d3c57c5a61c958edcaa8c3a54c6188"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphProxy","result":{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphTokenGateway#GraphProxy","hash":"0xa9f5e0d14952a90994039d47f916d22788c3f7ba63906a5082d57013cd8c2a30","networkInteractionId":1,"receipt":{"blockHash":"0xaa3a886e36c88d7260fd67dbe42ffb2f9133fbbba4bfe5ee3f10f0e8aafd280c","blockNumber":6722876,"contractAddress":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","logs":[{"address":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","data":"0x","logIndex":66,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416"]},{"address":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","data":"0x","logIndex":67,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000002e2a734aad8ff4b60e88b211b0dac398ecc2098c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphProxy","result":{"address":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","hash":"0xf1a30501c799c04a49362aee92f8207b96e92163b923c47851fea6efc8ed03b7","networkInteractionId":1,"receipt":{"blockHash":"0xaa3a886e36c88d7260fd67dbe42ffb2f9133fbbba4bfe5ee3f10f0e8aafd280c","blockNumber":6722876,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x0000000000000000000000005c72b84f619399087df1e4b686050a5f336126d9","logIndex":82,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","hash":"0x48d7e2b18b7d7ad9ad26a6d49fc1bc22c8dad2b92d09dc38328664b19777f726","networkInteractionId":1,"receipt":{"blockHash":"0xcf942f3624e64065cdb5338f1c83974ff859ee7a89ad9122eb69ad31de7ce4fa","blockNumber":6722877,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x0000000000000000000000009e0730ef2971aa5a9fea13be01a7cbfdbf4b4c53","logIndex":86,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#GraphProxy","hash":"0xee72027f07a720c2696d22ef0b2bdc0c82d8d1c0febc8f1e21e5a2b560712e9f","networkInteractionId":1,"receipt":{"blockHash":"0xcf942f3624e64065cdb5338f1c83974ff859ee7a89ad9122eb69ad31de7ce4fa","blockNumber":6722877,"contractAddress":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","logs":[{"address":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","data":"0x","logIndex":89,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416"]},{"address":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","data":"0x","logIndex":90,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000001c37c0725527c76b9b48dafce78673bb7354b3a1"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#GraphProxy","result":{"address":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"BridgeEscrow#BridgeEscrow_Instance","contractAddress":"0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F","contractName":"BridgeEscrow_Instance","dependencies":["BridgeEscrow#GraphProxy"],"futureId":"BridgeEscrow#BridgeEscrow_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0xD1e69Dd541597F3a976ec34416F806322C560509","0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F","0xc4d66de80000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","dependencies":["GraphProxyAdmin#GraphProxyAdmin","BridgeEscrow#BridgeEscrow","BridgeEscrow#GraphProxy","BridgeEscrow#encodeFunctionCall(BridgeEscrow#BridgeEscrow.initialize)"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"acceptProxyAndCall","futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000d1e69dd541597f3a976ec34416f806322c560509000000000000000000000000b8ee971f6281a2ec1634b80d6f9cea713847fa2f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e6084100000000000000000000000000000000000000000000000000000000","id":1,"to":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":261,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"6465951460"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x124fa6061847919087f7ef029b1aacbaf124047fa6840128e839acf417075aae"},"type":"TRANSACTION_SEND"} +{"artifactId":"Curation#Curation_Instance","contractAddress":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","contractName":"Curation_Instance","dependencies":["Curation#GraphProxy"],"futureId":"Curation#Curation_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0xB20db0C5b472A25913f668bdAeE299880F3761e5","0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","0x4c8c7a440000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e6084100000000000000000000000085820db0abc0f869ff5b8c47d80bad8ce8d23e3600000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","dependencies":["GraphProxyAdmin#GraphProxyAdmin","Curation#Curation","Curation#GraphProxy","Curation#encodeFunctionCall(Curation#Curation.initialize)"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"acceptProxyAndCall","futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000b20db0c5b472a25913f668bdaee299880f3761e5000000000000000000000000ec2ed45a73bd2a324739691eaf425add66918fab000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000844c8c7a440000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e6084100000000000000000000000085820db0abc0f869ff5b8c47d80bad8ce8d23e360000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000","id":1,"to":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":262,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"6465951460"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xc397b948ab0c4dfc91733b938d9ba9316eeeee5869bdfecbd08cc07da14bc4f1"},"type":"TRANSACTION_SEND"} +{"artifactId":"EpochManager#EpochManager_Instance","contractAddress":"0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","contractName":"EpochManager_Instance","dependencies":["EpochManager#GraphProxy"],"futureId":"EpochManager#EpochManager_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0xaBDda0b824b1581Ad6bE147AE5ED7E42B8D90602","0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","0xcd6dc6870000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841000000000000000000000000000000000000000000000000000000000000003c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","dependencies":["GraphProxyAdmin#GraphProxyAdmin","EpochManager#EpochManager","EpochManager#GraphProxy","EpochManager#encodeFunctionCall(EpochManager#EpochManager.initialize)"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"acceptProxyAndCall","futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000abdda0b824b1581ad6be147ae5ed7e42b8d90602000000000000000000000000c37fcccac63cc5eece1546ce4965651991b74fea00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044cd6dc6870000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":263,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"6401501702"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xe061aa58d3a2b55e78f31fcf2783d4ad3d1f1808d5d15d6fb269e215bfb31ac6"},"type":"TRANSACTION_SEND"} +{"args":["0xFBdc2dEbD9d3C57c5A61c958edcaA8C3a54c6188","0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","0xc4d66de8000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b35"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphToken#GraphToken","GraphToken#GraphProxy","GraphToken#encodeFunctionCall(GraphToken#GraphToken.initialize)"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"acceptProxyAndCall","futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000fbdc2debd9d3c57c5a61c958edcaa8c3a54c6188000000000000000000000000ec385b1c7e34e47a71e1cb326d172fdf2207f20500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b3500000000000000000000000000000000000000000000000000000000","id":1,"to":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":264,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"6401501702"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x571ffeec4054cefa882cd8eb66651c3acf82fd6eb8b6886540f26d22342d645a"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","contractName":"GraphToken_Instance","dependencies":["GraphToken#GraphProxy"],"futureId":"GraphToken#GraphToken_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x2e2a734Aad8Ff4B60E88b211B0daC398eCC2098c","0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","0xc4d66de80000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphTokenGateway#GraphTokenGateway","GraphTokenGateway#GraphProxy","GraphTokenGateway#encodeFunctionCall(GraphTokenGateway#GraphTokenGateway.initialize)"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"acceptProxyAndCall","futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000002e2a734aad8ff4b60e88b211b0dac398ecc2098c000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df5100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e6084100000000000000000000000000000000000000000000000000000000","id":1,"to":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":265,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"6401501702"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x22570f1c3113274e55b371d826ed28e5338a9b478bd6b100fab13f4b98bc8191"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphTokenGateway#GraphTokenGateway_Instance","contractAddress":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","contractName":"GraphTokenGateway_Instance","dependencies":["GraphTokenGateway#GraphProxy"],"futureId":"GraphTokenGateway#GraphTokenGateway_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#ProxyAdmin_GraphPayments","contractAddress":"0xaBE1e45c636a27aD02f0022e0AB32BF350702Df1","contractName":"ProxyAdmin","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments_AdminChanged"],"futureId":"HorizonProxies#ProxyAdmin_GraphPayments","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","contractAddress":"0x9fa225C2D4Cf40c8B0100Af7dacb8bCf84D822d0","contractName":"ProxyAdmin","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow_AdminChanged"],"futureId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x1c37C0725527C76B9B48DaFcE78673bB7354B3a1","0xCab63af715010d12dA2128777abB2103F9a0EF8F","0xc4d66de80000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","dependencies":["GraphProxyAdmin#GraphProxyAdmin","RewardsManager#RewardsManager","RewardsManager#GraphProxy","RewardsManager#encodeFunctionCall(RewardsManager#RewardsManager.initialize)"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"acceptProxyAndCall","futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000001c37c0725527c76b9b48dafce78673bb7354b3a1000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e6084100000000000000000000000000000000000000000000000000000000","id":1,"to":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":266,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"6401501702"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xcd06114d8a95ca26b65ea784390c3a8ba57e2ca7a5e3cf50a34a22488089bb8b"},"type":"TRANSACTION_SEND"} +{"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","contractName":"RewardsManager_Instance","dependencies":["RewardsManager#GraphProxy"],"futureId":"RewardsManager#RewardsManager_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x124fa6061847919087f7ef029b1aacbaf124047fa6840128e839acf417075aae","networkInteractionId":1,"receipt":{"blockHash":"0xfad0d04dab27357db193fa051a3cc2778870ae443464d0c6835efb32e8c74c77","blockNumber":6722882,"logs":[{"address":"0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F","data":"0x","logIndex":137,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000d1e69dd541597f3a976ec34416f806322c560509"]},{"address":"0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F","data":"0x","logIndex":138,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000d1e69dd541597f3a976ec34416f806322c560509","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xB8Ee971F6281a2ec1634b80d6F9CEA713847Fa2F","data":"0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841","logIndex":139,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xc397b948ab0c4dfc91733b938d9ba9316eeeee5869bdfecbd08cc07da14bc4f1","networkInteractionId":1,"receipt":{"blockHash":"0x148f5b2d08a53f325baee4f3ad775ebcdc997eaaa9483d03a5d9878597418bf2","blockNumber":6722883,"logs":[{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","data":"0x","logIndex":294,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000b20db0c5b472a25913f668bdaee299880f3761e5"]},{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","data":"0x","logIndex":295,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000b20db0c5b472a25913f668bdaee299880f3761e5","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","data":"0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841","logIndex":296,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]},{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001364656661756c7452657365727665526174696f00000000000000000000000000","logIndex":297,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000156375726174696f6e54617850657263656e746167650000000000000000000000","logIndex":298,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000166d696e696d756d4375726174696f6e4465706f73697400000000000000000000","logIndex":299,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0xEC2ed45a73BD2A324739691eaf425aDD66918FAb","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000136375726174696f6e546f6b656e4d617374657200000000000000000000000000","logIndex":300,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xe061aa58d3a2b55e78f31fcf2783d4ad3d1f1808d5d15d6fb269e215bfb31ac6","networkInteractionId":1,"receipt":{"blockHash":"0x148f5b2d08a53f325baee4f3ad775ebcdc997eaaa9483d03a5d9878597418bf2","blockNumber":6722883,"logs":[{"address":"0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","data":"0x","logIndex":325,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000abdda0b824b1581ad6be147ae5ed7e42b8d90602"]},{"address":"0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","data":"0x","logIndex":326,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000abdda0b824b1581ad6be147ae5ed7e42b8d90602","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","data":"0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841","logIndex":327,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]},{"address":"0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA","data":"0x000000000000000000000000000000000000000000000000000000000000003c","logIndex":328,"topics":["0x25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce2441","0x0000000000000000000000000000000000000000000000000000000000000001"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x571ffeec4054cefa882cd8eb66651c3acf82fd6eb8b6886540f26d22342d645a","networkInteractionId":1,"receipt":{"blockHash":"0x148f5b2d08a53f325baee4f3ad775ebcdc997eaaa9483d03a5d9878597418bf2","blockNumber":6722883,"logs":[{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x","logIndex":363,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fbdc2debd9d3c57c5a61c958edcaa8c3a54c6188"]},{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x","logIndex":364,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000fbdc2debd9d3c57c5a61c958edcaa8c3a54c6188","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x0000000000000000000000000000000000000000000000000000000000000000","logIndex":365,"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b35"]},{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x","logIndex":366,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b35"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x22570f1c3113274e55b371d826ed28e5338a9b478bd6b100fab13f4b98bc8191","networkInteractionId":1,"receipt":{"blockHash":"0x148f5b2d08a53f325baee4f3ad775ebcdc997eaaa9483d03a5d9878597418bf2","blockNumber":6722883,"logs":[{"address":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","data":"0x","logIndex":373,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000002e2a734aad8ff4b60e88b211b0dac398ecc2098c"]},{"address":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","data":"0x","logIndex":374,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000002e2a734aad8ff4b60e88b211b0dac398ecc2098c","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","data":"0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841","logIndex":375,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xcd06114d8a95ca26b65ea784390c3a8ba57e2ca7a5e3cf50a34a22488089bb8b","networkInteractionId":1,"receipt":{"blockHash":"0x148f5b2d08a53f325baee4f3ad775ebcdc997eaaa9483d03a5d9878597418bf2","blockNumber":6722883,"logs":[{"address":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","data":"0x","logIndex":379,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000001c37c0725527c76b9b48dafce78673bb7354b3a1"]},{"address":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","data":"0x","logIndex":380,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000001c37c0725527c76b9b48dafce78673bb7354b3a1","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","data":"0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841","logIndex":381,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f","0xEC2ed45a73BD2A324739691eaf425aDD66918FAb"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller","Curation#Curation_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_Curation","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","networkInteraction":{"data":"0xe0e99292e6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f000000000000000000000000ec2ed45a73bd2a324739691eaf425add66918fab","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","networkInteractionId":1,"nonce":267,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5967649936"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x9f89d2bf81ab5ac286033aff88987d90d1348afd64f486a2d2f23e7e8798fbbd"},"type":"TRANSACTION_SEND"} +{"args":["0xc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063","0xC37fccCAc63cC5EeCE1546cE4965651991B74FEA"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller","EpochManager#EpochManager_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","networkInteraction":{"data":"0xe0e99292c713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063000000000000000000000000c37fcccac63cc5eece1546ce4965651991b74fea","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","networkInteractionId":1,"nonce":268,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5967649936"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x04fb2e7adda06b235db1ba11dc6f4e4ccb6ef47f32d9941ba515c6c6cf1679be"},"type":"TRANSACTION_SEND"} +{"args":["0x559081d91f5ff43dfe51a07c216f8e6893805b35",{"_kind":"bigint","value":"10000000000000000000000000000"}],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","dependencies":["GraphToken#GraphToken_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"mint","futureId":"GraphToken#GraphToken_Instance.mint","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken_Instance.mint","networkInteraction":{"data":"0x40c10f19000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b350000000000000000000000000000000000000000204fce5e3e25026110000000","id":1,"to":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken_Instance.mint","networkInteractionId":1,"nonce":269,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5967649936"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xabe9021a26f23d28ec71012ac386d34fdea2ef7084efd35616121894f645c65a"},"type":"TRANSACTION_SEND"} +{"args":[],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","dependencies":["GraphToken#GraphToken_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"renounceMinter","futureId":"GraphToken#GraphToken_Instance.renounceMinter","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","networkInteraction":{"data":"0x98650275","id":1,"to":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","networkInteractionId":1,"nonce":270,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5967649936"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xdff51cf961951b65fefe3797283caca05d5f31af940cb1270f47b02cbce21ecd"},"type":"TRANSACTION_SEND"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","dependencies":["GraphToken#GraphToken_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"transferOwnership","futureId":"GraphToken#GraphToken_Instance.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","networkInteractionId":1,"nonce":271,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5967649936"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xadf29a070eb17da632bb1732743b5b1600a93420584dacf6ccea645937a35c87"},"type":"TRANSACTION_SEND"} +{"args":["0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC"],"artifactId":"GraphTokenGateway#GraphTokenGateway_Instance","contractAddress":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","dependencies":["GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setPauseGuardian","futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","networkInteraction":{"data":"0x48bde20c00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc","id":1,"to":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","networkInteractionId":1,"nonce":272,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5967649936"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x5ad72c15da902d4654d640998f7cabf0a5da9c7d59a6b3f90cf90fea180cf538"},"type":"TRANSACTION_SEND"} +{"args":[{"_kind":"bigint","value":"114155251141552511415"}],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setIssuancePerBlock","futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","networkInteraction":{"data":"0x1156bdc10000000000000000000000000000000000000000000000063038ec17c1be19b7","id":1,"to":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","networkInteractionId":1,"nonce":273,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5685787546"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x86215f9b3ea77233196ae624039bd1ef3626349789845ef23f6b223267d09fb6"},"type":"TRANSACTION_SEND"} +{"args":["0xd03ea8624C8C5987235048901fB614fDcA89b117"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setSubgraphAvailabilityOracle","futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","networkInteraction":{"data":"0x0903c094000000000000000000000000d03ea8624c8c5987235048901fb614fdca89b117","id":1,"to":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","networkInteractionId":1,"nonce":274,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5685787546"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x0db978a6567fb3d8e822a379f50e5007c2a6c99b6da8fd1c82e5fabe4e83f381"},"type":"TRANSACTION_SEND"} +{"args":["0x0000000000000000000000000000000000000000"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setSubgraphService","futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","networkInteraction":{"data":"0x93a90a1e0000000000000000000000000000000000000000000000000000000000000000","id":1,"to":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","networkInteractionId":1,"nonce":275,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5685787546"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xfd1398d59b8f2325ccc4591459416cf624b7de117009050c869cc5512c11d406"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","hash":"0x9f89d2bf81ab5ac286033aff88987d90d1348afd64f486a2d2f23e7e8798fbbd","networkInteractionId":1,"receipt":{"blockHash":"0x3dec6ec446a3e0bb8b7343115abddf21883724854f7a164a402dd6fe02da133f","blockNumber":6722888,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x000000000000000000000000ec2ed45a73bd2a324739691eaf425add66918fab","logIndex":171,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","hash":"0x04fb2e7adda06b235db1ba11dc6f4e4ccb6ef47f32d9941ba515c6c6cf1679be","networkInteractionId":1,"receipt":{"blockHash":"0x3dec6ec446a3e0bb8b7343115abddf21883724854f7a164a402dd6fe02da133f","blockNumber":6722888,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x000000000000000000000000c37fcccac63cc5eece1546ce4965651991b74fea","logIndex":172,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphToken_Instance.mint","hash":"0xabe9021a26f23d28ec71012ac386d34fdea2ef7084efd35616121894f645c65a","networkInteractionId":1,"receipt":{"blockHash":"0x3dec6ec446a3e0bb8b7343115abddf21883724854f7a164a402dd6fe02da133f","blockNumber":6722888,"logs":[{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x0000000000000000000000000000000000000000204fce5e3e25026110000000","logIndex":173,"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b35"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken_Instance.mint","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","hash":"0xdff51cf961951b65fefe3797283caca05d5f31af940cb1270f47b02cbce21ecd","networkInteractionId":1,"receipt":{"blockHash":"0x3dec6ec446a3e0bb8b7343115abddf21883724854f7a164a402dd6fe02da133f","blockNumber":6722888,"logs":[{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x","logIndex":174,"topics":["0xe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb66692","0x000000000000000000000000559081d91f5ff43dfe51a07c216f8e6893805b35"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","hash":"0xadf29a070eb17da632bb1732743b5b1600a93420584dacf6ccea645937a35c87","networkInteractionId":1,"receipt":{"blockHash":"0x5c67a0115a982045355c417af43b65a3396b770cd887d7cc8f146d1c20cce8c4","blockNumber":6722889,"logs":[{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x","logIndex":76,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","hash":"0x5ad72c15da902d4654d640998f7cabf0a5da9c7d59a6b3f90cf90fea180cf538","networkInteractionId":1,"receipt":{"blockHash":"0x5c67a0115a982045355c417af43b65a3396b770cd887d7cc8f146d1c20cce8c4","blockNumber":6722889,"logs":[{"address":"0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51","data":"0x","logIndex":83,"topics":["0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","hash":"0x86215f9b3ea77233196ae624039bd1ef3626349789845ef23f6b223267d09fb6","networkInteractionId":1,"receipt":{"blockHash":"0x5c67a0115a982045355c417af43b65a3396b770cd887d7cc8f146d1c20cce8c4","blockNumber":6722889,"logs":[{"address":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001069737375616e6365506572426c6f636b00000000000000000000000000000000","logIndex":87,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","hash":"0x0db978a6567fb3d8e822a379f50e5007c2a6c99b6da8fd1c82e5fabe4e83f381","networkInteractionId":1,"receipt":{"blockHash":"0x5c67a0115a982045355c417af43b65a3396b770cd887d7cc8f146d1c20cce8c4","blockNumber":6722889,"logs":[{"address":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a7375626772617068417661696c6162696c6974794f7261636c65000000000000","logIndex":95,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","hash":"0xfd1398d59b8f2325ccc4591459416cf624b7de117009050c869cc5512c11d406","networkInteractionId":1,"receipt":{"blockHash":"0xdf113cab335f161d85a31f21abbf0e3586a36b94094af6dce4af90db6f6d0633","blockNumber":6722891,"logs":[{"address":"0xCab63af715010d12dA2128777abB2103F9a0EF8F","data":"0x","logIndex":89,"topics":["0x97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0","0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller","GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","networkInteraction":{"data":"0xe0e99292d362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df51","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","networkInteractionId":1,"nonce":276,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"6928415834"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x822f9af7a805bf25b6478d2b8ffae452adc5b17b3bdf006f711e1a3e821925ad"},"type":"TRANSACTION_SEND"} +{"args":["0x966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761","0xCab63af715010d12dA2128777abB2103F9a0EF8F"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller","RewardsManager#RewardsManager_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","networkInteraction":{"data":"0xe0e99292966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","networkInteractionId":1,"nonce":277,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"6928415834"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x0aad2a8d6af0acb52bbfdb68eaf747dfb918ebe060794dd32432d51b694e3eda"},"type":"TRANSACTION_SEND"} +{"args":["0xB0F7E9E2cEcD3E93373DC3979f8108E4C595Df51"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","dependencies":["GraphToken#GraphToken_Instance","GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"addMinter","futureId":"GraphToken#addMinterGateway","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#addMinterGateway","networkInteraction":{"data":"0x983b2d56000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df51","id":1,"to":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#addMinterGateway","networkInteractionId":1,"nonce":278,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"7784085492"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xc7ea73b0f63ce90fe81dd9a64a9b62e803d4733536bc1fb7a4a92cd9117429e1"},"type":"TRANSACTION_SEND"} +{"args":["0xCab63af715010d12dA2128777abB2103F9a0EF8F"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","dependencies":["GraphToken#GraphToken_Instance","RewardsManager#RewardsManager_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"addMinter","futureId":"GraphToken#addMinterRewardsManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#addMinterRewardsManager","networkInteraction":{"data":"0x983b2d56000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f","id":1,"to":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#addMinterRewardsManager","networkInteractionId":1,"nonce":279,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"7784085492"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xf25f5506534737afc12ef13f2ce46d7bbefef65e4ae0e4051f0a545da5a66520"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","hash":"0x822f9af7a805bf25b6478d2b8ffae452adc5b17b3bdf006f711e1a3e821925ad","networkInteractionId":1,"receipt":{"blockHash":"0x311163e088954bb322ddc81e61ad733929129f310e4a01f9088f5cbefbf744ad","blockNumber":6722897,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df51","logIndex":143,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","hash":"0x0aad2a8d6af0acb52bbfdb68eaf747dfb918ebe060794dd32432d51b694e3eda","networkInteractionId":1,"receipt":{"blockHash":"0x311163e088954bb322ddc81e61ad733929129f310e4a01f9088f5cbefbf744ad","blockNumber":6722897,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f","logIndex":146,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#addMinterGateway","hash":"0xc7ea73b0f63ce90fe81dd9a64a9b62e803d4733536bc1fb7a4a92cd9117429e1","networkInteractionId":1,"receipt":{"blockHash":"0x311163e088954bb322ddc81e61ad733929129f310e4a01f9088f5cbefbf744ad","blockNumber":6722897,"logs":[{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x","logIndex":147,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df51"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#addMinterGateway","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#addMinterRewardsManager","hash":"0xf25f5506534737afc12ef13f2ce46d7bbefef65e4ae0e4051f0a545da5a66520","networkInteractionId":1,"receipt":{"blockHash":"0x417b6b008fcb87166d70b296900cb668a01ad4b4ce0ecf8bd46694eb5e7e286c","blockNumber":6722898,"logs":[{"address":"0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205","data":"0x","logIndex":79,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#addMinterRewardsManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247","0xeC385b1c7e34E47A71E1CB326D172Fdf2207F205"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller","GraphToken#GraphToken_Instance"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","networkInteraction":{"data":"0xe0e9929245fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247000000000000000000000000ec385b1c7e34e47a71e1cb326d172fdf2207f205","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","networkInteractionId":1,"nonce":280,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"8636477458"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x5d3310d0fe09bef38f2cfd5b1dc229af2fa7362bc43f78db3f3ec13149df17b9"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","hash":"0x5d3310d0fe09bef38f2cfd5b1dc229af2fa7362bc43f78db3f3ec13149df17b9","networkInteractionId":1,"receipt":{"blockHash":"0x43f6f070dfc12e319cecac0d5bd740accb53e00a25d01866dc46c87d35ecd2f8","blockNumber":6722903,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x000000000000000000000000ec385b1c7e34e47a71e1cb326d172fdf2207f205","logIndex":118,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphHorizon_Periphery#Dummy","constructorArgs":[],"contractName":"Dummy","dependencies":["GraphHorizon_Periphery#setContractProxy_EpochManager","GraphHorizon_Periphery#setContractProxy_RewardsManager","GraphHorizon_Periphery#setContractProxy_GraphToken","GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","GraphHorizon_Periphery#setContractProxy_Curation"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"GraphHorizon_Periphery#Dummy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#Dummy","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#Dummy","networkInteractionId":1,"nonce":281,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"7026461560"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x746c4897096ec80bb89d5bc684cd2a45293680779f1150fac7856ba71e8e5d25"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#Dummy","hash":"0x746c4897096ec80bb89d5bc684cd2a45293680779f1150fac7856ba71e8e5d25","networkInteractionId":1,"receipt":{"blockHash":"0xc19d57434203d1b45be2ee82dfd7360ae6ff772cb824d9bab62d60d139bec49e","blockNumber":6722908,"contractAddress":"0x31a62E69D8A4003365A97758091685eA72333155","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#Dummy","result":{"address":"0x31a62E69D8A4003365A97758091685eA72333155","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonProxies#GraphProxy_HorizonStaking","constructorArgs":["0x0000000000000000000000000000000000000000","0x86e0221dBe437a67120BdBB8c53847Fb4D756416"],"contractName":"GraphProxy","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphHorizon_Periphery#Dummy"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"HorizonProxies#GraphProxy_HorizonStaking","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","networkInteractionId":1,"nonce":282,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5646202602"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xde123168b7a62525b1bd57dfb48ff1d3665c85c624875cf36b488153359ab35f"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","hash":"0xde123168b7a62525b1bd57dfb48ff1d3665c85c624875cf36b488153359ab35f","networkInteractionId":1,"receipt":{"blockHash":"0x678427d0801a7b00fa93b3e19f2b9c7971dabcb924bc7e7cf67a173913ad458a","blockNumber":6722913,"contractAddress":"0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2","logs":[{"address":"0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2","data":"0x","logIndex":110,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416"]},{"address":"0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2","data":"0x","logIndex":111,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","result":{"address":"0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034","0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2"],"artifactId":"Controller#Controller","contractAddress":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","dependencies":["Controller#Controller","HorizonProxies#GraphProxy_HorizonStaking"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_HorizonStaking","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","networkInteraction":{"data":"0xe0e992921df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034000000000000000000000000563e880ec5a760fd6bd0deb2a035dffc71dbb8a2","id":1,"to":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","networkInteractionId":1,"nonce":283,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5297354030"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x49fb9949b5addf8193f55cd13c12a58721048dd388a0e9d0336d4fce275c239e"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","hash":"0x49fb9949b5addf8193f55cd13c12a58721048dd388a0e9d0336d4fce275c239e","networkInteractionId":1,"receipt":{"blockHash":"0xa5e3de6ec030830e11a3da3a3671194b2d541242bbee53d3f0db523b2ae7bc99","blockNumber":6722918,"logs":[{"address":"0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","data":"0x000000000000000000000000563e880ec5a760fd6bd0deb2a035dffc71dbb8a2","logIndex":235,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonProxies#RegisteredDummy","constructorArgs":[],"contractName":"Dummy","dependencies":["HorizonProxies#setContractProxy_HorizonStaking","HorizonProxies#setContractProxy_GraphPayments","HorizonProxies#setContractProxy_PaymentsEscrow"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"HorizonProxies#RegisteredDummy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#RegisteredDummy","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#RegisteredDummy","networkInteractionId":1,"nonce":284,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5396337696"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x0a1ef5a97280f780202692bf5fad5400a9b384cfcc559031f98529d1dd4688a2"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#RegisteredDummy","hash":"0x0a1ef5a97280f780202692bf5fad5400a9b384cfcc559031f98529d1dd4688a2","networkInteractionId":1,"receipt":{"blockHash":"0xdd4d44c64f6a0757998a4a81dfd077575d7cd8fe311513b4fd07bcea1e16414c","blockNumber":6722923,"contractAddress":"0x73bb9ee763C815ae288f5c75187cb3Be2De1DA38","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#RegisteredDummy","result":{"address":"0x73bb9ee763C815ae288f5c75187cb3Be2De1DA38","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphPayments#GraphPayments","constructorArgs":["0x9746Fb649B0AD9BA77201e9bf4e864B852e60841",10000],"contractName":"GraphPayments","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"GraphPayments#GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphPayments#GraphPayments","networkInteraction":{"data":"0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b00330000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e608410000000000000000000000000000000000000000000000000000000000002710","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphPayments#GraphPayments","networkInteractionId":1,"nonce":285,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"4889646478"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xfc719b86c2b331de4379e5cb9becd1543e98fdec066458bc4c99de313e15c47c"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphPayments#GraphPayments_Instance","contractAddress":"0x5C72b84F619399087Df1e4b686050A5F336126D9","contractName":"GraphPayments","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"futureId":"GraphPayments#GraphPayments_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonStakingExtension#HorizonStakingExtension","constructorArgs":["0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","0x0000000000000000000000000000000000000000"],"contractName":"HorizonStakingExtension","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy","HorizonStakingExtension#ExponentialRebates"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"HorizonStakingExtension#HorizonStakingExtension","futureType":"CONTRACT_DEPLOYMENT","libraries":{"ExponentialRebates":"0xA018c2419084c2DfC9C321103c2D5a98d4Db137c"},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","networkInteraction":{"data":"0x6101e060405234801561001157600080fd5b5060405161396738038061396783398101604081905261003091610411565b818181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610347565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610347565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610347565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610347565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610347565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610347565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610347565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610347565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610347565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b03166101c052506104b4915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038291815260200190565b602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c39190610444565b9050826001600160a01b0382166103ee5760405163218f5add60e11b81526004016100749190610466565b5092915050565b80516001600160a01b038116811461040c57600080fd5b919050565b6000806040838503121561042457600080fd5b61042d836103f5565b915061043b602084016103f5565b90509250929050565b60006020828403121561045657600080fd5b61045f826103f5565b9392505050565b602081526000825180602084015260005b818110156104945760208186018101516040868401015201610477565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516133d761059060003960008181611c3601528181611e3601526123f00152600061205b015260005050600061178501526000818161213d0152818161280501526129080152600081816112c70152611b6f015260008181610bbf01528181610cbc01528181610ed601526116dc015260005050600050506000505060008181611044015281816111fa01528181612023015281816121b20152818161239a015281816124c2015261263201526133d76000f3fe6080604052600436106101f25760003560e01c806398c657dc1161010d578063b6363cf2116100a0578063e2e1e8e91161006f578063e2e1e8e914610a0b578063e73e14bf14610a38578063f1d60d6614610a70578063fb744cc014610a90578063fc54fb2714610ab057600080fd5b8063b6363cf2146108dd578063b7ca724114610927578063c0641994146109c1578063ccebcabb146109dc57600080fd5b8063a4c0ed36116100dc578063a4c0ed3614610837578063a784d49814610857578063ac9650d814610877578063ae4fe67a146108a457600080fd5b806398c657dc1461072d5780639ce7abe51461075a578063a212daf81461077a578063a2594d821461081757600080fd5b8063561285e411610185578063872d048911610154578063872d04891461064c5780638cc01c861461066c5780638d3c100a146106ed5780639054e3431461070d57600080fd5b8063561285e4146105a95780636a3ca383146105fc5780637573ef4f1461062c5780637a7664601461031157600080fd5b806325d9897e116101c157806325d9897e1461036957806339514ad21461047957806344c32a61146104ab57806355c85269146104cb57600080fd5b806308ce5f68146102495780630e0229231461027c5780631787e69f146103115780631ae720451461034757600080fd5b366102445760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561025557600080fd5b50610269610264366004612bec565b610ac8565b6040519081526020015b60405180910390f35b34801561028857600080fd5b5061029c610297366004612c25565b610add565b604051610273919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561031d57600080fd5b5061026961032c366004612c25565b6001600160a01b03166000908152600e602052604090205490565b34801561035357600080fd5b50610367610362366004612c25565b610bbd565b005b34801561037557600080fd5b5061046c610384366004612bec565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516102739190612c42565b34801561048557600080fd5b50601a546001600160401b03165b6040516001600160401b039091168152602001610273565b3480156104b757600080fd5b506103676104c6366004612cd2565b610cba565b3480156104d757600080fd5b506105776104e6366004612c25565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610273565b3480156105b557600080fd5b506105c96105c4366004612bec565b610d68565b60405161027391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561060857600080fd5b5061061c610617366004612c25565b610df6565b6040519015158152602001610273565b34801561063857600080fd5b50610269610647366004612cfe565b610e1b565b34801561065857600080fd5b50610269610667366004612d4d565b610e7f565b34801561067857600080fd5b506106d2610687366004612c25565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b60408051825181526020928301519281019290925201610273565b3480156106f957600080fd5b50610367610708366004612d96565b610ed4565b34801561071957600080fd5b50610269610728366004612dbb565b6113a0565b34801561073957600080fd5b5061074d610748366004612c25565b611488565b6040516102739190612e11565b34801561076657600080fd5b50610367610775366004612e81565b611493565b34801561078657600080fd5b506105c9610795366004612dbb565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561082357600080fd5b50610367610832366004612c25565b6115be565b34801561084357600080fd5b50610367610852366004612ed5565b6116da565b34801561086357600080fd5b50610269610872366004612c25565b6118e7565b34801561088357600080fd5b50610897610892366004612f30565b6118f2565b6040516102739190612fc9565b3480156108b057600080fd5b5061061c6108bf366004612c25565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e957600080fd5b5061061c6108f8366004612bec565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093357600080fd5b50610996610942366004613049565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b0316908201529181015190820152606001610273565b3480156109cd57600080fd5b50600d5463ffffffff16610493565b3480156109e857600080fd5b506109fc6109f7366004612dbb565b6119d9565b60405190518152602001610273565b348015610a1757600080fd5b50610269610a26366004613049565b60009081526010602052604090205490565b348015610a4457600080fd5b5061061c610a53366004612c25565b6001600160a01b03166000908152600e6020526040902054151590565b348015610a7c57600080fd5b5061061c610a8b366004612c25565b611a2b565b348015610a9c57600080fd5b50610269610aab366004612bec565b611a50565b348015610abc57600080fd5b5060205460ff1661061c565b6000610ad48383611a5c565b90505b92915050565b610b3860405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190613062565b6001600160a01b0316336001600160a01b031614610c7057604051635d9044cd60e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040517f690e9b982dc9aefaa1cfed186a2d2045a638013d658104102c9437235bee4b6090600090a250565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061307f565b15610d5a57604051632b37d9d160e21b815260040160405180910390fd5b610d648282611a94565b5050565b610d936040518060800160405280600081526020016000815260200160008152602001600081525090565b610dbe6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000610dca8585611e32565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b60006001610e0383611eb6565b6002811115610e1457610e14612dfb565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610e5557610e55612dfb565b6002811115610e6657610e66612dfb565b81526020019081526020016000205490505b9392505050565b600080610e8c8585611a5c565b90506000610e9a8686611f0f565b90506000610eae63ffffffff8616846130b7565b90506000610ebc8383611f3a565b9050610ec881856130ce565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f56919061307f565b15610f7457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610fb35760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b604482015260640161023b565b6000610fbe82611eb6565b90506000816002811115610fd457610fd4612dfb565b0361100c5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b604482015260640161023b565b8260000361101957505050565b6001600160a01b0382166000908152600f6020526040812060018101549091859080808061107333867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611f51565b600d5461108e908690600160401b900463ffffffff1661200e565b935061109a84866130e1565b600d549095506110bb9087908790640100000000900463ffffffff16612047565b92506110c783866130e1565b94508487600501546110d991906130ce565b6005880155600287015460009015806110ff5750601954600160a01b900463ffffffff16155b6111ca5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273A018c2419084c2DfC9C321103c2D5a98d4Db137c906349484d819060c401602060405180830381865af41580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c591906130f4565b6111cd565b60005b90506111dd81896008015461225a565b92506111e98387611f3a565b92506112296111f884886130e1565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690612274565b82156112915782886008015461123f91906130ce565b60088901558754611259906001600160a01b0316846122bc565b915061126582846130e1565b88546001600160a01b03908116600081815260176020526040902054929550611291928692161561234e565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134791906130f4565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e60209081526040808320868516845282528083209385168352929052908120600381015482036113e6576000915050610e78565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b801561147c576000818152601d602052604090206001810154426001600160401b039091161161146b5760028301546001840154825461145091906130b7565b61145a919061310d565b61146490856130ce565b9350611471565b5061147c565b600201549050611410565b50909695505050505050565b6000610ad782611eb6565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190613062565b6001600160a01b0316336001600160a01b0316146115585760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611586908690869060040161312f565b600060405180830381600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190613062565b6001600160a01b0316336001600160a01b0316146116835760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175c919061307f565b1561177a57604051632b37d9d160e21b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117e15760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015260640161023b565b6018546001600160a01b0385811691161461183e5760405162461bcd60e51b815260206004820152601e60248201527f4f4e4c595f4c315f5354414b494e475f5448524f5547485f4252494447450000604482015260640161023b565b60008061184d838501856131a4565b909250905060ff8216611882576000818060200190518101906118709190613255565b905061187c86826123c4565b506116d2565b60001960ff8316016118b0576000818060200190518101906118a491906132a2565b905061187c86826123d0565b60405162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f434f444560a01b604482015260640161023b565b6000610ad782612740565b604080516000815260208101909152606090826001600160401b0381111561191c5761191c61315e565b60405190808252806020026020018201604052801561194f57816020015b606081526020019060019003908161193a5790505b50915060005b838110156119d1576119ac3086868481811061197357611973613302565b90506020028101906119859190613318565b856040516020016119989392919061335e565b60405160208183030381529060405261278b565b8382815181106119be576119be613302565b6020908102919091010152600101611955565b505092915050565b6040805160208101909152600081526040805160208101909152600081526000611a038686611e32565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b600080611a3783611eb6565b6002811115611a4857611a48612dfb565b141592915050565b6000610ad48383611f0f565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610ad491906130e1565b6000611a9f83611eb6565b90506001816002811115611ab557611ab5612dfb565b14611aec5760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b604482015260640161023b565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef91906130f4565b608082018190526060820151600091611c079161225a565b9050600082600001516001600160a01b0316336001600160a01b03161480611c78575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff1682111580611c9b57506040830151155b15611cd55780611cd55760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b604482015260640161023b565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611db957808015611d0f57508415155b15611d2757611d22868460000151612801565b611d36565b611d3483602001516128e7565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611d6391906130e1565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611da391906130e1565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611e8b57506001600160a01b0382166000908152601460205260409020610ad7565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610ad7565b6001600160a01b038082166000908152600f6020526040812080549192909116611ee35750600092915050565b600381015415801590611ef857506004810154155b15611f065750600192915050565b50600292915050565b600080611f1c8484611e32565b905080600501548160020154611f3291906130e1565b949350505050565b600081831115611f4a5781610ad4565b5090919050565b8015612009576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd1919061307f565b6120095760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161023b565b505050565b60008061201b8484612975565b9050610ad4817f000000000000000000000000000000000000000000000000000000000000000061121a565b60008260000361205957506000610e78565b7f00000000000000000000000000000000000000000000000000000000000000006000831580159061209357506001600160a01b03821615155b90508080156121065750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612106919061307f565b1561224e5760006121178686612975565b90508015612244576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121aa91906130f4565b506121e283827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906129c7565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b15801561222b57600080fd5b505af115801561223f573d6000803e3d6000fd5b505050505b9250610e78915050565b50600095945050505050565b600081831161226a576000610ad4565b610ad482846130e1565b8015610d6457604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156116be57600080fd5b6001600160a01b03821660009081526014602052604081206002810154829190158015906122fb57508054600160401b900463ffffffff16620f424010155b156123465780546000906123219063ffffffff600160401b9091048116908790612a0216565b905061232d81866130e1565b925082826002015461233f91906130ce565b6002830155505b509392505050565b8260000361235b57505050565b801561236b576120098284612a69565b6001600160a01b03808316600090815260176020526040902054166123be81156123955781612397565b835b857f00000000000000000000000000000000000000000000000000000000000000006121d2565b50505050565b80516120098184612a69565b80516001600160a01b039081166000908152601b602090815260408083207f0000000000000000000000000000000000000000000000000000000000000000909416835292905290812060030154600160601b90046001600160401b031690036124695760405162461bcd60e51b815260206004820152600a60248201526910b83937bb34b9b4b7b760b11b604482015260640161023b565b80516001600160a01b03908116600090815260146020908152604080832082860151909416835260048401909152902060028201541580156124bb575060038201541515806124bb5750600682015415155b156125b5577f0000000000000000000000000000000000000000000000000000000000000000602084015160405163a9059cbb60e01b81526001600160a01b0391821660048201526024810187905291169063a9059cbb906044016020604051808303816000875af1158015612535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612559919061307f565b5082602001516001600160a01b031683600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de866040516125a791815260200190565b60405180910390a350505050565b60008260020154600014806125d1575082600501548360020154145b61260757826005015483600201546125e991906130e1565b60038401546125f890876130b7565b612602919061310d565b612609565b845b905080158061261f5750670de0b6b3a764000085105b156126ae576126548460200151866121d27f000000000000000000000000000000000000000000000000000000000000000090565b83602001516001600160a01b031684600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de876040516126a191815260200190565b60405180910390a3612739565b8483600201546126be91906130ce565b600284015560038301546126d39082906130ce565b600384015581546126e59082906130ce565b82556020808501518551604080518981529384018590526001600160a01b039283169391909216917fcd0366dce5247d874ffc60a762aa7abbb82c1695bbb171609c1b8861e279eb73910160405180910390a35b5050505050565b6001600160a01b0381166000908152600e6020526040812060028101546001820154600483015492549192909161277791906130e1565b61278191906130e1565b610ad791906130e1565b6060600080846001600160a01b0316846040516127a89190613385565b600060405180830381855af49150503d80600081146127e3576040519150601f19603f3d011682016040523d82523d6000602084013e6127e8565b606091505b50915091506127f8858383612ae8565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af115801561286e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289291906130f4565b9050806000036128a157505050565b60006128ad8383612b44565b905060006128bb82846130e1565b6001600160a01b038086166000908152601760205260409020549192506127399183918791161561234e565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612951573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad791906130f4565b600061298482620f4240101590565b82906129a657604051633dc311df60e01b815260040161023b91815260200190565b506129bd6129b783620f42406130e1565b84612a02565b610ad490846130e1565b80156120095760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611f8e565b6000612a1183620f4240101590565b80612a245750612a2482620f4240101590565b83839091612a4e5760405163768bf0eb60e11b81526004810192909252602482015260440161023b565b50620f42409050612a5f83856130b7565b610ad4919061310d565b6001600160a01b0382166000908152600e6020526040902054612a8d9082906130ce565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc290612adc9084815260200190565b60405180910390a25050565b606082612afd57612af882612bab565b610e78565b8151158015612b1457506001600160a01b0384163b155b15612b3d57604051639996b31560e01b81526001600160a01b038516600482015260240161023b565b5080610e78565b6001600160a01b0382166000908152601460205260408120600281015482919015801590612b8457508054640100000000900463ffffffff16620f424010155b156123465780546000906123219063ffffffff6401000000009091048116908790612a0216565b805115612bbb5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b0381168114612bd457600080fd5b60008060408385031215612bff57600080fd5b8235612c0a81612bd7565b91506020830135612c1a81612bd7565b809150509250929050565b600060208284031215612c3757600080fd5b8135610ad481612bd7565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151612cb060c084018263ffffffff169052565b5060e0830151612ccb60e08401826001600160401b03169052565b5092915050565b60008060408385031215612ce557600080fd5b8235612cf081612bd7565b946020939093013593505050565b600080600060608486031215612d1357600080fd5b8335612d1e81612bd7565b92506020840135612d2e81612bd7565b9150604084013560038110612d4257600080fd5b809150509250925092565b600080600060608486031215612d6257600080fd5b8335612d6d81612bd7565b92506020840135612d7d81612bd7565b9150604084013563ffffffff81168114612d4257600080fd5b60008060408385031215612da957600080fd5b823591506020830135612c1a81612bd7565b600080600060608486031215612dd057600080fd5b8335612ddb81612bd7565b92506020840135612deb81612bd7565b91506040840135612d4281612bd7565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e3357634e487b7160e01b600052602160045260246000fd5b91905290565b60008083601f840112612e4b57600080fd5b5081356001600160401b03811115612e6257600080fd5b602083019150836020828501011115612e7a57600080fd5b9250929050565b600080600060408486031215612e9657600080fd5b8335612ea181612bd7565b925060208401356001600160401b03811115612ebc57600080fd5b612ec886828701612e39565b9497909650939450505050565b60008060008060608587031215612eeb57600080fd5b8435612ef681612bd7565b93506020850135925060408501356001600160401b03811115612f1857600080fd5b612f2487828801612e39565b95989497509550505050565b60008060208385031215612f4357600080fd5b82356001600160401b03811115612f5957600080fd5b8301601f81018513612f6a57600080fd5b80356001600160401b03811115612f8057600080fd5b8560208260051b8401011115612f9557600080fd5b6020919091019590945092505050565b60005b83811015612fc0578181015183820152602001612fa8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561303d57603f198786030184528151805180875261301a816020890160208501612fa5565b601f01601f19169590950160209081019550938401939190910190600101612ff1565b50929695505050505050565b60006020828403121561305b57600080fd5b5035919050565b60006020828403121561307457600080fd5b8151610ad481612bd7565b60006020828403121561309157600080fd5b81518015158114610ad457600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad757610ad76130a1565b80820180821115610ad757610ad76130a1565b81810381811115610ad757610ad76130a1565b60006020828403121561310657600080fd5b5051919050565b60008261312a57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561319c5761319c61315e565b604052919050565b600080604083850312156131b757600080fd5b823560ff811681146131c857600080fd5b915060208301356001600160401b038111156131e357600080fd5b8301601f810185136131f457600080fd5b80356001600160401b0381111561320d5761320d61315e565b613220601f8201601f1916602001613174565b81815286602083850101111561323557600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602082840312801561326857600080fd5b50604051602081016001600160401b038111828210171561328b5761328b61315e565b604052825161329981612bd7565b81529392505050565b600060408284031280156132b557600080fd5b50604080519081016001600160401b03811182821017156132d8576132d861315e565b60405282516132e681612bd7565b815260208301516132f681612bd7565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332f57600080fd5b8301803591506001600160401b0382111561334957600080fd5b602001915036819003821315612e7a57600080fd5b82848237600083820160008152835161337b818360208801612fa5565b0195945050505050565b60008251613397818460208701612fa5565b919091019291505056fea264697066735822122038ad83d20c219353421029f1ad8c4f7667d5f0e86af1579c64603bb56827d86064736f6c634300081b00330000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e608410000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","networkInteractionId":1,"nonce":286,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"4889646478"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x18975e149bf31183f4fc8afd92f745278a749a23ff0f45a78e3cb70f4382ab36"},"type":"TRANSACTION_SEND"} +{"artifactId":"PaymentsEscrow#PaymentsEscrow","constructorArgs":["0x9746Fb649B0AD9BA77201e9bf4e864B852e60841",10000,10000],"contractName":"PaymentsEscrow","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"PaymentsEscrow#PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"PaymentsEscrow#PaymentsEscrow","networkInteraction":{"data":"0x61020060405234801561001157600080fd5b506040516120c73803806120c78339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611ad26105f5600039600081816101e00152610abb015260008181610193015261039d01526000505060005050600050506000505060005050600081816102fa0152818161041601528181610589015281816106380152818161076e0152818161094901528181610b2d01528181610d71015261131b01526000505060008181610fa6015261104e015260005050600081816108da01528181610eea01528181610f77015281816110c401526114130152611ad26000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b00330000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e6084100000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002710","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"PaymentsEscrow#PaymentsEscrow","networkInteractionId":1,"nonce":287,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"4889646478"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0xcf1c5d16df8a1c2f970bf187c099a274b0c874fd4df369a1083f2cde2a1f916a"},"type":"TRANSACTION_SEND"} +{"artifactId":"PaymentsEscrow#PaymentsEscrow_Instance","contractAddress":"0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53","contractName":"PaymentsEscrow","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"futureId":"PaymentsEscrow#PaymentsEscrow_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"TAPCollector#TAPCollector","constructorArgs":["TAPCollector","1","0x9746Fb649B0AD9BA77201e9bf4e864B852e60841"],"contractName":"TAPCollector","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"TAPCollector#TAPCollector","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"TAPCollector#TAPCollector","networkInteraction":{"data":"0x6102a060405234801561001157600080fd5b506040516119ae3803806119ae833981016040819052610030916105d9565b80838361003e8260006103db565b6101205261004d8160016103db565b61014052815160208084019190912060e052815190820120610100524660a0526100da60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03811661012c5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101e05260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526101649061040e565b6001600160a01b0316610160526040805180820190915260078152665374616b696e6760c81b60208201526101989061040e565b6001600160a01b03166101805260408051808201909152600d81526c47726170685061796d656e747360981b60208201526101d29061040e565b6001600160a01b03166101a05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261020d9061040e565b6001600160a01b03166101c05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526102469061040e565b6001600160a01b03166102005260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526102819061040e565b6001600160a01b0316610220526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102bf9061040e565b6001600160a01b03166102405260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102fb9061040e565b6001600160a01b03166102605260408051808201909152600881526721bab930ba34b7b760c11b60208201526103309061040e565b6001600160a01b039081166102808190526101e05161018051610160516101a0516101c0516102005161022051610240516102605160408051968c168752948b166020870152928a1685850152908916606085015288166080840152871660a083015260c0820195909552935192851694918216939116917fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a439181900360e00190a45050505061081e565b60006020835110156103f7576103f0836104bc565b9050610408565b8161040284826106db565b5060ff90505b92915050565b6000806101e0516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161044991815260200190565b602060405180830381865afa158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a9190610799565b9050826001600160a01b0382166104b55760405163218f5add60e11b815260040161012391906107e7565b5092915050565b600080829050601f815111156104e7578260405163305a27a960e01b815260040161012391906107e7565b80516104f2826107fa565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561052b578181015183820152602001610513565b50506000910152565b600082601f83011261054557600080fd5b81516001600160401b0381111561055e5761055e6104fa565b604051601f8201601f19908116603f011681016001600160401b038111828210171561058c5761058c6104fa565b6040528181528382016020018510156105a457600080fd5b6105b5826020830160208701610510565b949350505050565b80516001600160a01b03811681146105d457600080fd5b919050565b6000806000606084860312156105ee57600080fd5b83516001600160401b0381111561060457600080fd5b61061086828701610534565b602086015190945090506001600160401b0381111561062e57600080fd5b61063a86828701610534565b925050610649604085016105bd565b90509250925092565b600181811c9082168061066657607f821691505b60208210810361068657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106d657806000526020600020601f840160051c810160208510156106b35750805b601f840160051c820191505b818110156106d357600081556001016106bf565b50505b505050565b81516001600160401b038111156106f4576106f46104fa565b610708816107028454610652565b8461068c565b6020601f82116001811461073c57600083156107245750848201515b600019600385901b1c1916600184901b1784556106d3565b600084815260208120601f198516915b8281101561076c578785015182556020948501946001909201910161074c565b508482101561078a5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156107ab57600080fd5b6107b4826105bd565b9392505050565b600081518084526107d3816020860160208601610510565b601f01601f19169290920160200192915050565b6020815260006107b460208301846107bb565b805160208083015191908110156106865760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516110e36108cb600039600050506000505060005050600050506000505060005050600061024f0152600050506000505060005050600061049201526000610460015260006108940152600061086c015260006107c7015260006107f10152600061081b01526110e36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80631ef518f21461005c5780637f07d2831461008c57806384b0196e146100ad5780638821603c146100c8578063cfdb35bd146100db575b600080fd5b61006f61006a3660046109dc565b61010c565b6040516001600160a01b0390911681526020015b60405180910390f35b61009f61009a366004610b23565b610125565b604051908152602001610083565b6100b5610372565b6040516100839796959493929190610bc6565b61009f6100d6366004610c5e565b6103b8565b61009f6100e9366004610cb0565b600260209081526000938452604080852082529284528284209052825290205481565b600061011f61011a83610db8565b6103cb565b92915050565b60008060008380602001905181019061013e9190610e75565b815151919350915033906001600160a01b0381168214610189576040516347666ba360e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50508151516000610199846103cb565b84516020808201516060909201516001600160a01b038087166000908152600284526040808220838716835285528082209287168252919093529091205492935090916001600160801b03909116908181808211610213576040516308e467d960e31b815260048101929092526024820152604401610180565b50600090506102228284610fb1565b9050600061023082896103f2565b905081156102f3576040516343edff4160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906387dbfe829061028e908f908a908a9088908e908990600401610fda565b600060405180830381600087803b1580156102a857600080fd5b505af11580156102bc573d6000803e3d6000fd5b5050506001600160a01b0380891660009081526002602090815260408083208a851684528252808320938b16835292905220859055505b866001600160a01b0316866001600160a01b03168d600281111561031957610319610fc4565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4509a9950505050505050505050565b600060608060008060006060610386610459565b61038e61048b565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061011f6103c68361102e565b6104b8565b6000806103db83600001516104b8565b90506103eb81846020015161056f565b9392505050565b600061040183620f4240101590565b80610414575061041482620f4240101590565b8383909161043e5760405163768bf0eb60e11b815260048101929092526024820152604401610180565b50620f4240905061044f838561103a565b6103eb9190611051565b60606104867f00000000000000000000000000000000000000000000000000000000000000006000610599565b905090565b60606104867f00000000000000000000000000000000000000000000000000000000000000006001610599565b600061011f7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610554969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610644565b60008060008061057f8686610671565b92509250925061058f82826106be565b5090949350505050565b606060ff83146105b3576105ac8361077b565b905061011f565b8180546105bf90611073565b80601f01602080910402602001604051908101604052809291908181526020018280546105eb90611073565b80156106385780601f1061060d57610100808354040283529160200191610638565b820191906000526020600020905b81548152906001019060200180831161061b57829003601f168201915b5050505050905061011f565b600061011f6106516107ba565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600083516041036106ab5760208401516040850151606086015160001a61069d888285856108e5565b9550955095505050506106b7565b50508151600091506002905b9250925092565b60008260038111156106d2576106d2610fc4565b036106db575050565b60018260038111156106ef576106ef610fc4565b0361070d5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561072157610721610fc4565b036107425760405163fce698f760e01b815260048101829052602401610180565b600382600381111561075657610756610fc4565b03610777576040516335e2f38360e21b815260048101829052602401610180565b5050565b60606000610788836109b4565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561081357507f000000000000000000000000000000000000000000000000000000000000000046145b1561083d57507f000000000000000000000000000000000000000000000000000000000000000090565b610486604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561092057506000915060039050826109aa565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610974573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109a0575060009250600191508290506109aa565b9250600091508190505b9450945094915050565b600060ff8216601f81111561011f57604051632cd44ac360e21b815260040160405180910390fd5b6000602082840312156109ee57600080fd5b81356001600160401b03811115610a0457600080fd5b8201604081850312156103eb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715610a4e57610a4e610a16565b60405290565b604080519081016001600160401b0381118282101715610a4e57610a4e610a16565b604051601f8201601f191681016001600160401b0381118282101715610a9e57610a9e610a16565b604052919050565b60006001600160401b03821115610abf57610abf610a16565b50601f01601f191660200190565b600082601f830112610ade57600080fd5b8135610af1610aec82610aa6565b610a76565b818152846020838601011115610b0657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610b3657600080fd5b823560038110610b4557600080fd5b915060208301356001600160401b03811115610b6057600080fd5b610b6c85828601610acd565b9150509250929050565b60005b83811015610b91578181015183820152602001610b79565b50506000910152565b60008151808452610bb2816020860160208601610b76565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e060208201526000610be560e0830189610b9a565b8281036040840152610bf78189610b9a565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015610c4d578351835260209384019390920191600101610c2f565b50909b9a5050505050505050505050565b600060208284031215610c7057600080fd5b81356001600160401b03811115610c8657600080fd5b820160a081850312156103eb57600080fd5b6001600160a01b0381168114610cad57600080fd5b50565b600080600060608486031215610cc557600080fd5b8335610cd081610c98565b92506020840135610ce081610c98565b91506040840135610cf081610c98565b809150509250925092565b6001600160401b0381168114610cad57600080fd5b6001600160801b0381168114610cad57600080fd5b600060a08284031215610d3757600080fd5b610d3f610a2c565b90508135610d4c81610c98565b81526020820135610d5c81610c98565b60208201526040820135610d6f81610cfb565b60408201526060820135610d8281610d10565b606082015260808201356001600160401b03811115610da057600080fd5b610dac84828501610acd565b60808301525092915050565b600060408236031215610dca57600080fd5b610dd2610a54565b82356001600160401b03811115610de857600080fd5b610df436828601610d25565b82525060208301356001600160401b03811115610e1057600080fd5b610e1c36828601610acd565b60208301525092915050565b600082601f830112610e3957600080fd5b8151610e47610aec82610aa6565b818152846020838601011115610e5c57600080fd5b610e6d826020830160208701610b76565b949350505050565b60008060408385031215610e8857600080fd5b82516001600160401b03811115610e9e57600080fd5b830160408186031215610eb057600080fd5b610eb8610a54565b81516001600160401b03811115610ece57600080fd5b820160a08188031215610ee057600080fd5b610ee8610a2c565b8151610ef381610c98565b81526020820151610f0381610c98565b60208201526040820151610f1681610cfb565b60408201526060820151610f2981610d10565b606082015260808201516001600160401b03811115610f4757600080fd5b610f5389828501610e28565b60808301525082525060208201516001600160401b03811115610f7557600080fd5b610f8187828501610e28565b602083810191909152959095015190969095509350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561011f5761011f610f9b565b634e487b7160e01b600052602160045260246000fd5b60c0810160038810610ffc57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b600061011f3683610d25565b808202811582820484141761011f5761011f610f9b565b60008261106e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061108757607f821691505b6020821081036110a757634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212204ea11b7f590e7303a0b1850b4cd59148c357bb48498bdb2606c6e97c057012e264736f6c634300081b0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841000000000000000000000000000000000000000000000000000000000000000c544150436f6c6c6563746f72000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"TAPCollector#TAPCollector","networkInteractionId":1,"nonce":288,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"4780551768"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x07ca2606b6b23a6d6a2c7bf5c8c23c0f38a8bed5e0855dc2b6a958927f33525e"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphPayments#GraphPayments","hash":"0xfc719b86c2b331de4379e5cb9becd1543e98fdec066458bc4c99de313e15c47c","networkInteractionId":1,"receipt":{"blockHash":"0x207188bd9996c6ec335ecbe34b12197408769971066826372a2ca124fe099a4a","blockNumber":6722929,"contractAddress":"0x0E0e9AC171562b6d6141f69075DEd1E3922930B7","logs":[{"address":"0x0E0e9AC171562b6d6141f69075DEd1E3922930B7","data":"0x0000000000000000000000005c72b84f619399087df1e4b686050a5f336126d90000000000000000000000009e0730ef2971aa5a9fea13be01a7cbfdbf4b4c53000000000000000000000000c37fcccac63cc5eece1546ce4965651991b74fea000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df5100000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416000000000000000000000000ec2ed45a73bd2a324739691eaf425add66918fab","logIndex":169,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000ec385b1c7e34e47a71e1cb326d172fdf2207f205","0x000000000000000000000000563e880ec5a760fd6bd0deb2a035dffc71dbb8a2","0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841"]},{"address":"0x0E0e9AC171562b6d6141f69075DEd1E3922930B7","data":"0x000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":170,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphPayments#GraphPayments","result":{"address":"0x0E0e9AC171562b6d6141f69075DEd1E3922930B7","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","hash":"0x18975e149bf31183f4fc8afd92f745278a749a23ff0f45a78e3cb70f4382ab36","networkInteractionId":1,"receipt":{"blockHash":"0x207188bd9996c6ec335ecbe34b12197408769971066826372a2ca124fe099a4a","blockNumber":6722929,"contractAddress":"0xeB436D1CF0d6EabC759EB3bCd96BdBA4cD208eb3","logs":[{"address":"0xeB436D1CF0d6EabC759EB3bCd96BdBA4cD208eb3","data":"0x0000000000000000000000005c72b84f619399087df1e4b686050a5f336126d90000000000000000000000009e0730ef2971aa5a9fea13be01a7cbfdbf4b4c53000000000000000000000000c37fcccac63cc5eece1546ce4965651991b74fea000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df5100000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416000000000000000000000000ec2ed45a73bd2a324739691eaf425add66918fab","logIndex":173,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000ec385b1c7e34e47a71e1cb326d172fdf2207f205","0x000000000000000000000000563e880ec5a760fd6bd0deb2a035dffc71dbb8a2","0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","result":{"address":"0xeB436D1CF0d6EabC759EB3bCd96BdBA4cD208eb3","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"PaymentsEscrow#PaymentsEscrow","hash":"0xcf1c5d16df8a1c2f970bf187c099a274b0c874fd4df369a1083f2cde2a1f916a","networkInteractionId":1,"receipt":{"blockHash":"0x207188bd9996c6ec335ecbe34b12197408769971066826372a2ca124fe099a4a","blockNumber":6722929,"contractAddress":"0x834f7Fd38818dF6d79265e0BBb56A06168356231","logs":[{"address":"0x834f7Fd38818dF6d79265e0BBb56A06168356231","data":"0x0000000000000000000000005c72b84f619399087df1e4b686050a5f336126d90000000000000000000000009e0730ef2971aa5a9fea13be01a7cbfdbf4b4c53000000000000000000000000c37fcccac63cc5eece1546ce4965651991b74fea000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df5100000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416000000000000000000000000ec2ed45a73bd2a324739691eaf425add66918fab","logIndex":188,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000ec385b1c7e34e47a71e1cb326d172fdf2207f205","0x000000000000000000000000563e880ec5a760fd6bd0deb2a035dffc71dbb8a2","0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"PaymentsEscrow#PaymentsEscrow","result":{"address":"0x834f7Fd38818dF6d79265e0BBb56A06168356231","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"TAPCollector#TAPCollector","hash":"0x07ca2606b6b23a6d6a2c7bf5c8c23c0f38a8bed5e0855dc2b6a958927f33525e","networkInteractionId":1,"receipt":{"blockHash":"0x207188bd9996c6ec335ecbe34b12197408769971066826372a2ca124fe099a4a","blockNumber":6722929,"contractAddress":"0xfd24C169Cb89c448aaeB570507aAF77ff9277E4f","logs":[{"address":"0xfd24C169Cb89c448aaeB570507aAF77ff9277E4f","data":"0x0000000000000000000000005c72b84f619399087df1e4b686050a5f336126d90000000000000000000000009e0730ef2971aa5a9fea13be01a7cbfdbf4b4c53000000000000000000000000c37fcccac63cc5eece1546ce4965651991b74fea000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df5100000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416000000000000000000000000ec2ed45a73bd2a324739691eaf425add66918fab","logIndex":201,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000ec385b1c7e34e47a71e1cb326d172fdf2207f205","0x000000000000000000000000563e880ec5a760fd6bd0deb2a035dffc71dbb8a2","0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"TAPCollector#TAPCollector","result":{"address":"0xfd24C169Cb89c448aaeB570507aAF77ff9277E4f","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":[],"artifactId":"GraphPayments#GraphPayments","dependencies":["GraphPayments#GraphPayments"],"functionName":"initialize","futureId":"GraphPayments#encodeFunctionCall(GraphPayments#GraphPayments.initialize)","result":"0x8129fc1c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonStaking#HorizonStaking","constructorArgs":["0x9746Fb649B0AD9BA77201e9bf4e864B852e60841","0xeB436D1CF0d6EabC759EB3bCd96BdBA4cD208eb3","0x0000000000000000000000000000000000000000"],"contractName":"HorizonStaking","dependencies":["Controller#Controller","HorizonStakingExtension#HorizonStakingExtension","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","futureId":"HorizonStaking#HorizonStaking","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#HorizonStaking","networkInteraction":{"data":"0x61020060405234801561001157600080fd5b50604051615b2c380380615b2c8339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516155836105a960003960006102fb015260008181610dbf015281816115b60152818161166801528181612f5401528181613e120152614172015260005050600050506000505060005050600050506000612f0d015260005050600050506000505060008181610d89015281816117cd015281816125b2015281816128c80152818161295f01528181612ac00152818161380b015281816139cb01528181613d88015261401e01526155836000f3fe6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b00330000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841000000000000000000000000eb436d1cf0d6eabc759eb3bcd96bdba4cd208eb30000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#HorizonStaking","networkInteractionId":1,"nonce":289,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"5078891980"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"82158962"}},"hash":"0x7d9698bd962a3dfddfebcd40600d3d1758b2d4a87ac31b85eee67578df1a46cd"},"type":"TRANSACTION_SEND"} +{"args":[],"artifactId":"PaymentsEscrow#PaymentsEscrow","dependencies":["PaymentsEscrow#PaymentsEscrow"],"functionName":"initialize","futureId":"PaymentsEscrow#encodeFunctionCall(PaymentsEscrow#PaymentsEscrow.initialize)","result":"0x8129fc1c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"futureId":"HorizonStaking#HorizonStaking","hash":"0x7d9698bd962a3dfddfebcd40600d3d1758b2d4a87ac31b85eee67578df1a46cd","networkInteractionId":1,"receipt":{"blockHash":"0xdd671f6e06f87a90cf31aa333dcff7fcc8ad47c08cf8834468f671df35013288","blockNumber":6722935,"contractAddress":"0x4C6301489267EA82BeDA87d4dabc50A210aBa275","logs":[{"address":"0x4C6301489267EA82BeDA87d4dabc50A210aBa275","data":"0x0000000000000000000000005c72b84f619399087df1e4b686050a5f336126d90000000000000000000000009e0730ef2971aa5a9fea13be01a7cbfdbf4b4c53000000000000000000000000c37fcccac63cc5eece1546ce4965651991b74fea000000000000000000000000cab63af715010d12da2128777abb2103f9a0ef8f000000000000000000000000b0f7e9e2cecd3e93373dc3979f8108e4c595df5100000000000000000000000086e0221dbe437a67120bdbb8c53847fb4d756416000000000000000000000000ec2ed45a73bd2a324739691eaf425add66918fab","logIndex":70,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000ec385b1c7e34e47a71e1cb326d172fdf2207f205","0x000000000000000000000000563e880ec5a760fd6bd0deb2a035dffc71dbb8a2","0x0000000000000000000000009746fb649b0ad9ba77201e9bf4e864b852e60841"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#HorizonStaking","result":{"address":"0x4C6301489267EA82BeDA87d4dabc50A210aBa275","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x5C72b84F619399087Df1e4b686050A5F336126D9","0x0E0e9AC171562b6d6141f69075DEd1E3922930B7","0x8129fc1c"],"artifactId":"HorizonProxies#ProxyAdmin_GraphPayments","contractAddress":"0xaBE1e45c636a27aD02f0022e0AB32BF350702Df1","dependencies":["HorizonProxies#ProxyAdmin_GraphPayments","HorizonProxies#TransparentUpgradeableProxy_GraphPayments","GraphPayments#GraphPayments","GraphPayments#encodeFunctionCall(GraphPayments#GraphPayments.initialize)"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"upgradeAndCall","futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","networkInteraction":{"data":"0x9623609d0000000000000000000000005c72b84f619399087df1e4b686050a5f336126d90000000000000000000000000e0e9ac171562b6d6141f69075ded1e3922930b7000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000048129fc1c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xaBE1e45c636a27aD02f0022e0AB32BF350702Df1","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","networkInteractionId":1,"nonce":290,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"4585008632"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"80053516"}},"hash":"0x277defd9bf19db0c341d8d7f061abd935d15782f55ef3743718ec97a0617eecc"},"type":"TRANSACTION_SEND"} +{"args":["0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2","0x4C6301489267EA82BeDA87d4dabc50A210aBa275"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","dependencies":["GraphProxyAdmin#GraphProxyAdmin","HorizonProxies#GraphProxy_HorizonStaking","HorizonStaking#HorizonStaking"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"upgrade","futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","networkInteraction":{"data":"0x99a88ec4000000000000000000000000563e880ec5a760fd6bd0deb2a035dffc71dbb8a20000000000000000000000004c6301489267ea82beda87d4dabc50a210aba275","id":1,"to":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","networkInteractionId":1,"nonce":291,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"4585008632"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"80053516"}},"hash":"0x2034b2e1eb795f3130b28bd62266fe4229d03458639a7b185b830fb5d2723cc9"},"type":"TRANSACTION_SEND"} +{"args":["0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53","0x834f7Fd38818dF6d79265e0BBb56A06168356231","0x8129fc1c"],"artifactId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","contractAddress":"0x9fa225C2D4Cf40c8B0100Af7dacb8bCf84D822d0","dependencies":["HorizonProxies#ProxyAdmin_PaymentsEscrow","HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","PaymentsEscrow#PaymentsEscrow","PaymentsEscrow#encodeFunctionCall(PaymentsEscrow#PaymentsEscrow.initialize)"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"upgradeAndCall","futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","networkInteraction":{"data":"0x9623609d0000000000000000000000009e0730ef2971aa5a9fea13be01a7cbfdbf4b4c53000000000000000000000000834f7fd38818df6d79265e0bbb56a06168356231000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000048129fc1c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x9fa225C2D4Cf40c8B0100Af7dacb8bCf84D822d0","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","networkInteractionId":1,"nonce":292,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"4587553518"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"80053516"}},"hash":"0x56a3ff9780ee42e491e8c3399c9e4730d2b921984799f8702471e67e91bc5b1e"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","hash":"0x277defd9bf19db0c341d8d7f061abd935d15782f55ef3743718ec97a0617eecc","networkInteractionId":1,"receipt":{"blockHash":"0x17722ef41c8b56c97813609053b9018a53dbcc126fe2b363affba47957099523","blockNumber":6722940,"logs":[{"address":"0x5C72b84F619399087Df1e4b686050A5F336126D9","data":"0x","logIndex":90,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x0000000000000000000000000e0e9ac171562b6d6141f69075ded1e3922930b7"]},{"address":"0x5C72b84F619399087Df1e4b686050A5F336126D9","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":91,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","hash":"0x2034b2e1eb795f3130b28bd62266fe4229d03458639a7b185b830fb5d2723cc9","networkInteractionId":1,"receipt":{"blockHash":"0xbc6a7f66d0e38e5410db6f0654fea5a7ed8e9633d78f2a12e33e40a76eaa533c","blockNumber":6722941,"logs":[{"address":"0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2","data":"0x","logIndex":88,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000004c6301489267ea82beda87d4dabc50a210aba275"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","hash":"0x56a3ff9780ee42e491e8c3399c9e4730d2b921984799f8702471e67e91bc5b1e","networkInteractionId":1,"receipt":{"blockHash":"0xbc6a7f66d0e38e5410db6f0654fea5a7ed8e9633d78f2a12e33e40a76eaa533c","blockNumber":6722941,"logs":[{"address":"0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53","data":"0x","logIndex":89,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000834f7fd38818df6d79265e0bbb56a06168356231"]},{"address":"0x9E0730ef2971AA5a9FEA13be01a7cbFDbf4b4c53","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":90,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x4C6301489267EA82BeDA87d4dabc50A210aBa275","0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","dependencies":["GraphProxyAdmin#GraphProxyAdmin","HorizonStaking#HorizonStaking","HorizonProxies#GraphProxy_HorizonStaking","HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade"],"from":"0x559081d91f5ff43dfe51a07c216f8e6893805b35","functionName":"acceptProxy","futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","networkInteraction":{"data":"0xeb451a020000000000000000000000004c6301489267ea82beda87d4dabc50a210aba275000000000000000000000000563e880ec5a760fd6bd0deb2a035dffc71dbb8a2","id":1,"to":"0x86e0221dBe437a67120BdBB8c53847Fb4D756416","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","networkInteractionId":1,"nonce":293,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"4389578713"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"71782375"}},"hash":"0x1e5c4a43e253faa884a1d9f0f3094df39c64d47073a9cf49bd21f0408c4d93d0"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","hash":"0x1e5c4a43e253faa884a1d9f0f3094df39c64d47073a9cf49bd21f0408c4d93d0","networkInteractionId":1,"receipt":{"blockHash":"0x6b48d4468568bb9f70df0ec66968790f3c8df8a8d975c3b8ca3473112538d36e","blockNumber":6722946,"logs":[{"address":"0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2","data":"0x","logIndex":183,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000004c6301489267ea82beda87d4dabc50a210aba275"]},{"address":"0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2","data":"0x","logIndex":184,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000004c6301489267ea82beda87d4dabc50a210aba275","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonStaking#HorizonStaking_Instance","contractAddress":"0x563E880Ec5A760FD6BD0dEB2a035dFfc71DBB8a2","contractName":"HorizonStaking","dependencies":["HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","HorizonProxies#GraphProxy_HorizonStaking"],"futureId":"HorizonStaking#HorizonStaking_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json new file mode 100644 index 000000000..3e87653d9 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json @@ -0,0 +1,159 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BridgeEscrow", + "sourceName": "contracts/gateway/BridgeEscrow.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "approveAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "revokeAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json new file mode 100644 index 000000000..3e87653d9 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json @@ -0,0 +1,159 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BridgeEscrow", + "sourceName": "contracts/gateway/BridgeEscrow.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "approveAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "revokeAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/Controller#Controller.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/Controller#Controller.json new file mode 100644 index 000000000..c74445ff4 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/Controller#Controller.json @@ -0,0 +1,349 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Controller", + "sourceName": "contracts/governance/Controller.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PartialPauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "SetContractProxy", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + } + ], + "name": "getContractProxy", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPausePartialTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "partialPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + } + ], + "name": "setContractProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_toPause", + "type": "bool" + } + ], + "name": "setPartialPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_toPause", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + } + ], + "name": "unsetContractProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "updateController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506100243361003360201b6109b21760201c565b61002e6001610055565b6100e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff1615158115151415610075576100e4565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff910416156100a157426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a15b50565b610ba0806100f66000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80636cda3798116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80636cda3798146101ce57806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b806348bde20c116100de57806348bde20c146101795780634fc07d751461019f57806356371bd8146101a75780635c975abb146101c65761010b565b80630c340a241461011057806316c38b3c1461013457806324a3d622146101555780632e292fc71461015d575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b6101536004803603602081101561014a57600080fd5b503515156102c7565b005b610118610331565b610165610340565b604080519115158252519081900360200190f35b6101536004803603602081101561018f57600080fd5b50356001600160a01b0316610350565b61011861040c565b610153600480360360208110156101bd57600080fd5b5035151561041b565b610165610482565b6101d6610492565b60408051918252519081900360200190f35b610153610498565b6101536004803603602081101561020657600080fd5b50356105a6565b6101d6610651565b6101536004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b6101536004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b6101536004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b6000546001600160a01b03163314806102ea57506004546001600160a01b031633145b6103255760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103a8576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610403576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61032e81610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061043e57506004546001600160a01b031633145b6104795760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e81610ab7565b600154600160a81b900460ff1690565b60025481565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f45761032e565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad75761032e565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca2646970667358221220c742dbbf8f38fda928d26053c584788bb7d7b003131594b9e14f1381ebbdbb3064736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80636cda3798116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80636cda3798146101ce57806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b806348bde20c116100de57806348bde20c146101795780634fc07d751461019f57806356371bd8146101a75780635c975abb146101c65761010b565b80630c340a241461011057806316c38b3c1461013457806324a3d622146101555780632e292fc71461015d575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b6101536004803603602081101561014a57600080fd5b503515156102c7565b005b610118610331565b610165610340565b604080519115158252519081900360200190f35b6101536004803603602081101561018f57600080fd5b50356001600160a01b0316610350565b61011861040c565b610153600480360360208110156101bd57600080fd5b5035151561041b565b610165610482565b6101d6610492565b60408051918252519081900360200190f35b610153610498565b6101536004803603602081101561020657600080fd5b50356105a6565b6101d6610651565b6101536004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b6101536004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b6101536004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b6000546001600160a01b03163314806102ea57506004546001600160a01b031633145b6103255760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103a8576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610403576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61032e81610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061043e57506004546001600160a01b031633145b6104795760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e81610ab7565b600154600160a81b900460ff1690565b60025481565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f45761032e565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad75761032e565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca2646970667358221220c742dbbf8f38fda928d26053c584788bb7d7b003131594b9e14f1381ebbdbb3064736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#Curation.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#Curation.json new file mode 100644 index 000000000..f9d96cee6 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#Curation.json @@ -0,0 +1,707 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2Curation", + "sourceName": "contracts/l2/curation/L2Curation.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + } + ], + "name": "Burned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Collected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationTax", + "type": "uint256" + } + ], + "name": "Signalled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "bondingCurve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_tokensOutMin", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTaxPercentage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTokenMaster", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultReserveRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCuratorSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_curationTaxPercentage", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isCurated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumCurationDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_signalOutMin", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "mintTaxFree", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pools", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "reserveRatio", + "type": "uint32" + }, + { + "internalType": "contract IGraphCurationToken", + "name": "gcs", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_percentage", + "type": "uint32" + } + ], + "name": "setCurationTaxPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + } + ], + "name": "setCurationTokenMaster", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "setDefaultReserveRatio", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "setMinimumCurationDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + } + ], + "name": "signalToTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalToTokensNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json new file mode 100644 index 000000000..f9d96cee6 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json @@ -0,0 +1,707 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2Curation", + "sourceName": "contracts/l2/curation/L2Curation.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + } + ], + "name": "Burned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Collected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationTax", + "type": "uint256" + } + ], + "name": "Signalled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "bondingCurve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_tokensOutMin", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTaxPercentage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTokenMaster", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultReserveRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCuratorSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_curationTaxPercentage", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isCurated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumCurationDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_signalOutMin", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "mintTaxFree", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pools", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "reserveRatio", + "type": "uint32" + }, + { + "internalType": "contract IGraphCurationToken", + "name": "gcs", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_percentage", + "type": "uint32" + } + ], + "name": "setCurationTaxPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + } + ], + "name": "setCurationTokenMaster", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "setDefaultReserveRatio", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "setMinimumCurationDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + } + ], + "name": "signalToTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalToTokensNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json new file mode 100644 index 000000000..b7220dcc7 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json @@ -0,0 +1,414 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphCurationToken", + "sourceName": "contracts/curation/GraphCurationToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506114ec806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json new file mode 100644 index 000000000..cd09f36f8 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json @@ -0,0 +1,364 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "EpochManager", + "sourceName": "contracts/epochs/EpochManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + } + ], + "name": "EpochLengthUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "EpochRun", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "blockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blockNum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlockSinceStart", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epoch", + "type": "uint256" + } + ], + "name": "epochsSince", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochsSinceUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isCurrentEpochRun", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastRunEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "runEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json new file mode 100644 index 000000000..cd09f36f8 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json @@ -0,0 +1,364 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "EpochManager", + "sourceName": "contracts/epochs/EpochManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + } + ], + "name": "EpochLengthUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "EpochRun", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "blockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blockNum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlockSinceStart", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epoch", + "type": "uint256" + } + ], + "name": "epochsSince", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochsSinceUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isCurrentEpochRun", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastRunEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "runEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json new file mode 100644 index 000000000..d9b94acde --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json @@ -0,0 +1,308 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphPayments", + "sourceName": "contracts/payments/GraphPayments.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "GraphPaymentsInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "name": "GraphPaymentsInvalidProtocolPaymentCut", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationPool", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensProtocol", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [], + "name": "PROTOCOL_PAYMENT_CUT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json new file mode 100644 index 000000000..d9b94acde --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json @@ -0,0 +1,308 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphPayments", + "sourceName": "contracts/payments/GraphPayments.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "GraphPaymentsInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "name": "GraphPaymentsInvalidProtocolPaymentCut", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationPool", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensProtocol", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [], + "name": "PROTOCOL_PAYMENT_CUT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json new file mode 100644 index 000000000..07f0623c5 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json @@ -0,0 +1,234 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxyAdmin", + "sourceName": "contracts/upgrades/GraphProxyAdmin.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract GraphUpgradeable", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract GraphUpgradeable", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "getProxyPendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506100243361002960201b610a0c1760201c565b61004b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610a648061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json new file mode 100644 index 000000000..5889eeaf0 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json @@ -0,0 +1,750 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphToken", + "sourceName": "contracts/l2/token/L2GraphToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeBurned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "gateway", + "type": "address" + } + ], + "name": "GatewaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Address", + "type": "address" + } + ], + "name": "L1AddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1Address", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_gw", + "type": "address" + } + ], + "name": "setGateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "setL1Address", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json new file mode 100644 index 000000000..5889eeaf0 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json @@ -0,0 +1,750 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphToken", + "sourceName": "contracts/l2/token/L2GraphToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeBurned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "gateway", + "type": "address" + } + ], + "name": "GatewaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Address", + "type": "address" + } + ], + "name": "L1AddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1Address", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_gw", + "type": "address" + } + ], + "name": "setGateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "setL1Address", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json new file mode 100644 index 000000000..a9c54a794 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json @@ -0,0 +1,647 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphTokenGateway", + "sourceName": "contracts/l2/gateway/L2GraphTokenGateway.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Counterpart", + "type": "address" + } + ], + "name": "L1CounterpartAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1GRT", + "type": "address" + } + ], + "name": "L1TokenAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Router", + "type": "address" + } + ], + "name": "L2RouterSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PartialPauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "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": "_id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "TxToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2ToL1Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "exitNum", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WithdrawalInitiated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l1ERC20", + "type": "address" + } + ], + "name": "calculateL2TokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "finalizeInboundTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "getOutboundCalldata", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1Counterpart", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1GRT", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPausePartialTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Counterpart", + "type": "address" + } + ], + "name": "setL1CounterpartAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1GRT", + "type": "address" + } + ], + "name": "setL1TokenAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2Router", + "type": "address" + } + ], + "name": "setL2Router", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_newPaused", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json new file mode 100644 index 000000000..a9c54a794 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json @@ -0,0 +1,647 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphTokenGateway", + "sourceName": "contracts/l2/gateway/L2GraphTokenGateway.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Counterpart", + "type": "address" + } + ], + "name": "L1CounterpartAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1GRT", + "type": "address" + } + ], + "name": "L1TokenAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Router", + "type": "address" + } + ], + "name": "L2RouterSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PartialPauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "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": "_id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "TxToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2ToL1Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "exitNum", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WithdrawalInitiated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l1ERC20", + "type": "address" + } + ], + "name": "calculateL2TokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "finalizeInboundTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "getOutboundCalldata", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1Counterpart", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1GRT", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPausePartialTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Counterpart", + "type": "address" + } + ], + "name": "setL1CounterpartAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1GRT", + "type": "address" + } + ], + "name": "setL1TokenAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2Router", + "type": "address" + } + ], + "name": "setL2Router", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_newPaused", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json new file mode 100644 index 000000000..c7f1f49b4 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TransparentUpgradeableProxy", + "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "ERC1967InvalidAdmin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { + "inputs": [], + "name": "ERC1967NonPayable", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [], + "name": "ProxyDeniedAdminAccess", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json new file mode 100644 index 000000000..c7f1f49b4 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TransparentUpgradeableProxy", + "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "ERC1967InvalidAdmin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { + "inputs": [], + "name": "ERC1967NonPayable", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [], + "name": "ProxyDeniedAdminAccess", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json new file mode 100644 index 000000000..e442f237e --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json @@ -0,0 +1,2280 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "HorizonStaking", + "sourceName": "contracts/staking/HorizonStaking.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "stakingExtensionAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "subgraphDataServiceAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingCallerIsServiceProvider", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientIdleStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientStakeForLegacyAllocations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minRequired", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "HorizonStakingInvalidDelegationFeeCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPoolState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxMaxVerifierCut", + "type": "uint32" + } + ], + "name": "HorizonStakingInvalidMaxVerifierCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidProvision", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "HorizonStakingInvalidThawingPeriod", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroShares", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingNotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingNothingThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingProvisionAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingSlippageProtection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "HorizonStakingStillThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingTooManyThawRequests", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingTooManyTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingVerifierNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyController", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyGovernor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "AllowedLockedVerifierSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegatedTokensWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "DelegationFeeCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "DelegationSlashingEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashingSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "MaxThawingPeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "OperatorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersStaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionThawed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "StakeLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "ThawRequestCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + } + ], + "name": "ThawRequestFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawRequestsFulfilled", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ThawRequestsFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "ThawingPeriodCleared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDeprovisioned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensToDelegationPoolAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensUndelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "VerifierTokensSent", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "acceptProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToDelegationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clearThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSharesOut", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "deprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAuthorized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provisionLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "reprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setAllowedLockedVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "setDelegationFeeCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setDelegationSlashingEnabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "setMaxThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperatorLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "setProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensVerifier", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifierDestination", + "type": "address" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minSharesForNewProvider", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b50604051615b2c380380615b2c8339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516155836105a960003960006102fb015260008181610dbf015281816115b60152818161166801528181612f5401528181613e120152614172015260005050600050506000505060005050600050506000612f0d015260005050600050506000505060008181610d89015281816117cd015281816125b2015281816128c80152818161295f01528181612ac00152818161380b015281816139cb01528181613d88015261401e01526155836000f3fe6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json new file mode 100644 index 000000000..e442f237e --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json @@ -0,0 +1,2280 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "HorizonStaking", + "sourceName": "contracts/staking/HorizonStaking.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "stakingExtensionAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "subgraphDataServiceAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingCallerIsServiceProvider", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientIdleStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientStakeForLegacyAllocations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minRequired", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "HorizonStakingInvalidDelegationFeeCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPoolState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxMaxVerifierCut", + "type": "uint32" + } + ], + "name": "HorizonStakingInvalidMaxVerifierCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidProvision", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "HorizonStakingInvalidThawingPeriod", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroShares", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingNotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingNothingThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingProvisionAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingSlippageProtection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "HorizonStakingStillThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingTooManyThawRequests", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingTooManyTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingVerifierNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyController", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyGovernor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "AllowedLockedVerifierSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegatedTokensWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "DelegationFeeCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "DelegationSlashingEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashingSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "MaxThawingPeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "OperatorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersStaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionThawed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "StakeLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "ThawRequestCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + } + ], + "name": "ThawRequestFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawRequestsFulfilled", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ThawRequestsFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "ThawingPeriodCleared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDeprovisioned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensToDelegationPoolAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensUndelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "VerifierTokensSent", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "acceptProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToDelegationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clearThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSharesOut", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "deprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAuthorized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provisionLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "reprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setAllowedLockedVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "setDelegationFeeCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setDelegationSlashingEnabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "setMaxThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperatorLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "setProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensVerifier", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifierDestination", + "type": "address" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minSharesForNewProvider", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b50604051615b2c380380615b2c8339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516155836105a960003960006102fb015260008181610dbf015281816115b60152818161166801528181612f5401528181613e120152614172015260005050600050506000505060005050600050506000612f0d015260005050600050506000505060008181610d89015281816117cd015281816125b2015281816128c80152818161295f01528181612ac00152818161380b015281816139cb01528181613d88015261401e01526155836000f3fe6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json new file mode 100644 index 000000000..fc0c0c29f --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json @@ -0,0 +1,55 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ExponentialRebates", + "sourceName": "contracts/staking/libraries/ExponentialRebates.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stake", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "alphaNumerator", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "alphaDenominator", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "lambdaNumerator", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "lambdaDenominator", + "type": "uint32" + } + ], + "name": "exponentialRebates", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x610c2d610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json new file mode 100644 index 000000000..7cd249086 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json @@ -0,0 +1,1263 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "HorizonStakingExtension", + "sourceName": "contracts/staking/HorizonStakingExtension.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "subgraphDataServiceAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyController", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyGovernor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "PPMMathInvalidPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isPublic", + "type": "bool" + } + ], + "name": "AllocationClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "counterpart", + "type": "address" + } + ], + "name": "CounterpartStakingAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "assetHolder", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolTax", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryRebates", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "delegationRewards", + "type": "uint256" + } + ], + "name": "RebateCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "StakeDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TransferredDelegationReturnedToDelegator", + "type": "event" + }, + { + "inputs": [], + "name": "__DEPRECATED_getThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + } + ], + "name": "closeAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "collectedFees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "__DEPRECATED_effectiveAllocation", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "distributedRebates", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingExtension.Allocation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocationData", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocationState", + "outputs": [ + { + "internalType": "enum IHorizonStakingExtension.AllocationState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "getIndexerStakedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getSubgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "hasStake", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "isActiveAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "isAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "isOperator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "onTokenTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "counterpart", + "type": "address" + } + ], + "name": "setCounterpartStakingAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x6101e060405234801561001157600080fd5b5060405161396738038061396783398101604081905261003091610411565b818181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610347565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610347565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610347565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610347565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610347565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610347565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610347565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610347565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610347565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b03166101c052506104b4915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038291815260200190565b602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c39190610444565b9050826001600160a01b0382166103ee5760405163218f5add60e11b81526004016100749190610466565b5092915050565b80516001600160a01b038116811461040c57600080fd5b919050565b6000806040838503121561042457600080fd5b61042d836103f5565b915061043b602084016103f5565b90509250929050565b60006020828403121561045657600080fd5b61045f826103f5565b9392505050565b602081526000825180602084015260005b818110156104945760208186018101516040868401015201610477565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516133d761059060003960008181611c3601528181611e3601526123f00152600061205b015260005050600061178501526000818161213d0152818161280501526129080152600081816112c70152611b6f015260008181610bbf01528181610cbc01528181610ed601526116dc015260005050600050506000505060008181611044015281816111fa01528181612023015281816121b20152818161239a015281816124c2015261263201526133d76000f3fe6080604052600436106101f25760003560e01c806398c657dc1161010d578063b6363cf2116100a0578063e2e1e8e91161006f578063e2e1e8e914610a0b578063e73e14bf14610a38578063f1d60d6614610a70578063fb744cc014610a90578063fc54fb2714610ab057600080fd5b8063b6363cf2146108dd578063b7ca724114610927578063c0641994146109c1578063ccebcabb146109dc57600080fd5b8063a4c0ed36116100dc578063a4c0ed3614610837578063a784d49814610857578063ac9650d814610877578063ae4fe67a146108a457600080fd5b806398c657dc1461072d5780639ce7abe51461075a578063a212daf81461077a578063a2594d821461081757600080fd5b8063561285e411610185578063872d048911610154578063872d04891461064c5780638cc01c861461066c5780638d3c100a146106ed5780639054e3431461070d57600080fd5b8063561285e4146105a95780636a3ca383146105fc5780637573ef4f1461062c5780637a7664601461031157600080fd5b806325d9897e116101c157806325d9897e1461036957806339514ad21461047957806344c32a61146104ab57806355c85269146104cb57600080fd5b806308ce5f68146102495780630e0229231461027c5780631787e69f146103115780631ae720451461034757600080fd5b366102445760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561025557600080fd5b50610269610264366004612bec565b610ac8565b6040519081526020015b60405180910390f35b34801561028857600080fd5b5061029c610297366004612c25565b610add565b604051610273919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561031d57600080fd5b5061026961032c366004612c25565b6001600160a01b03166000908152600e602052604090205490565b34801561035357600080fd5b50610367610362366004612c25565b610bbd565b005b34801561037557600080fd5b5061046c610384366004612bec565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516102739190612c42565b34801561048557600080fd5b50601a546001600160401b03165b6040516001600160401b039091168152602001610273565b3480156104b757600080fd5b506103676104c6366004612cd2565b610cba565b3480156104d757600080fd5b506105776104e6366004612c25565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610273565b3480156105b557600080fd5b506105c96105c4366004612bec565b610d68565b60405161027391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561060857600080fd5b5061061c610617366004612c25565b610df6565b6040519015158152602001610273565b34801561063857600080fd5b50610269610647366004612cfe565b610e1b565b34801561065857600080fd5b50610269610667366004612d4d565b610e7f565b34801561067857600080fd5b506106d2610687366004612c25565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b60408051825181526020928301519281019290925201610273565b3480156106f957600080fd5b50610367610708366004612d96565b610ed4565b34801561071957600080fd5b50610269610728366004612dbb565b6113a0565b34801561073957600080fd5b5061074d610748366004612c25565b611488565b6040516102739190612e11565b34801561076657600080fd5b50610367610775366004612e81565b611493565b34801561078657600080fd5b506105c9610795366004612dbb565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561082357600080fd5b50610367610832366004612c25565b6115be565b34801561084357600080fd5b50610367610852366004612ed5565b6116da565b34801561086357600080fd5b50610269610872366004612c25565b6118e7565b34801561088357600080fd5b50610897610892366004612f30565b6118f2565b6040516102739190612fc9565b3480156108b057600080fd5b5061061c6108bf366004612c25565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e957600080fd5b5061061c6108f8366004612bec565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093357600080fd5b50610996610942366004613049565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b0316908201529181015190820152606001610273565b3480156109cd57600080fd5b50600d5463ffffffff16610493565b3480156109e857600080fd5b506109fc6109f7366004612dbb565b6119d9565b60405190518152602001610273565b348015610a1757600080fd5b50610269610a26366004613049565b60009081526010602052604090205490565b348015610a4457600080fd5b5061061c610a53366004612c25565b6001600160a01b03166000908152600e6020526040902054151590565b348015610a7c57600080fd5b5061061c610a8b366004612c25565b611a2b565b348015610a9c57600080fd5b50610269610aab366004612bec565b611a50565b348015610abc57600080fd5b5060205460ff1661061c565b6000610ad48383611a5c565b90505b92915050565b610b3860405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190613062565b6001600160a01b0316336001600160a01b031614610c7057604051635d9044cd60e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040517f690e9b982dc9aefaa1cfed186a2d2045a638013d658104102c9437235bee4b6090600090a250565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061307f565b15610d5a57604051632b37d9d160e21b815260040160405180910390fd5b610d648282611a94565b5050565b610d936040518060800160405280600081526020016000815260200160008152602001600081525090565b610dbe6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000610dca8585611e32565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b60006001610e0383611eb6565b6002811115610e1457610e14612dfb565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610e5557610e55612dfb565b6002811115610e6657610e66612dfb565b81526020019081526020016000205490505b9392505050565b600080610e8c8585611a5c565b90506000610e9a8686611f0f565b90506000610eae63ffffffff8616846130b7565b90506000610ebc8383611f3a565b9050610ec881856130ce565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f56919061307f565b15610f7457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610fb35760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b604482015260640161023b565b6000610fbe82611eb6565b90506000816002811115610fd457610fd4612dfb565b0361100c5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b604482015260640161023b565b8260000361101957505050565b6001600160a01b0382166000908152600f6020526040812060018101549091859080808061107333867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611f51565b600d5461108e908690600160401b900463ffffffff1661200e565b935061109a84866130e1565b600d549095506110bb9087908790640100000000900463ffffffff16612047565b92506110c783866130e1565b94508487600501546110d991906130ce565b6005880155600287015460009015806110ff5750601954600160a01b900463ffffffff16155b6111ca5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273__$8eb3cac1482a31d7a7f2cbe7dc8bdcd821$__906349484d819060c401602060405180830381865af41580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c591906130f4565b6111cd565b60005b90506111dd81896008015461225a565b92506111e98387611f3a565b92506112296111f884886130e1565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690612274565b82156112915782886008015461123f91906130ce565b60088901558754611259906001600160a01b0316846122bc565b915061126582846130e1565b88546001600160a01b03908116600081815260176020526040902054929550611291928692161561234e565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134791906130f4565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e60209081526040808320868516845282528083209385168352929052908120600381015482036113e6576000915050610e78565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b801561147c576000818152601d602052604090206001810154426001600160401b039091161161146b5760028301546001840154825461145091906130b7565b61145a919061310d565b61146490856130ce565b9350611471565b5061147c565b600201549050611410565b50909695505050505050565b6000610ad782611eb6565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190613062565b6001600160a01b0316336001600160a01b0316146115585760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611586908690869060040161312f565b600060405180830381600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190613062565b6001600160a01b0316336001600160a01b0316146116835760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175c919061307f565b1561177a57604051632b37d9d160e21b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117e15760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015260640161023b565b6018546001600160a01b0385811691161461183e5760405162461bcd60e51b815260206004820152601e60248201527f4f4e4c595f4c315f5354414b494e475f5448524f5547485f4252494447450000604482015260640161023b565b60008061184d838501856131a4565b909250905060ff8216611882576000818060200190518101906118709190613255565b905061187c86826123c4565b506116d2565b60001960ff8316016118b0576000818060200190518101906118a491906132a2565b905061187c86826123d0565b60405162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f434f444560a01b604482015260640161023b565b6000610ad782612740565b604080516000815260208101909152606090826001600160401b0381111561191c5761191c61315e565b60405190808252806020026020018201604052801561194f57816020015b606081526020019060019003908161193a5790505b50915060005b838110156119d1576119ac3086868481811061197357611973613302565b90506020028101906119859190613318565b856040516020016119989392919061335e565b60405160208183030381529060405261278b565b8382815181106119be576119be613302565b6020908102919091010152600101611955565b505092915050565b6040805160208101909152600081526040805160208101909152600081526000611a038686611e32565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b600080611a3783611eb6565b6002811115611a4857611a48612dfb565b141592915050565b6000610ad48383611f0f565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610ad491906130e1565b6000611a9f83611eb6565b90506001816002811115611ab557611ab5612dfb565b14611aec5760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b604482015260640161023b565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef91906130f4565b608082018190526060820151600091611c079161225a565b9050600082600001516001600160a01b0316336001600160a01b03161480611c78575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff1682111580611c9b57506040830151155b15611cd55780611cd55760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b604482015260640161023b565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611db957808015611d0f57508415155b15611d2757611d22868460000151612801565b611d36565b611d3483602001516128e7565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611d6391906130e1565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611da391906130e1565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611e8b57506001600160a01b0382166000908152601460205260409020610ad7565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610ad7565b6001600160a01b038082166000908152600f6020526040812080549192909116611ee35750600092915050565b600381015415801590611ef857506004810154155b15611f065750600192915050565b50600292915050565b600080611f1c8484611e32565b905080600501548160020154611f3291906130e1565b949350505050565b600081831115611f4a5781610ad4565b5090919050565b8015612009576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd1919061307f565b6120095760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161023b565b505050565b60008061201b8484612975565b9050610ad4817f000000000000000000000000000000000000000000000000000000000000000061121a565b60008260000361205957506000610e78565b7f00000000000000000000000000000000000000000000000000000000000000006000831580159061209357506001600160a01b03821615155b90508080156121065750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612106919061307f565b1561224e5760006121178686612975565b90508015612244576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121aa91906130f4565b506121e283827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906129c7565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b15801561222b57600080fd5b505af115801561223f573d6000803e3d6000fd5b505050505b9250610e78915050565b50600095945050505050565b600081831161226a576000610ad4565b610ad482846130e1565b8015610d6457604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156116be57600080fd5b6001600160a01b03821660009081526014602052604081206002810154829190158015906122fb57508054600160401b900463ffffffff16620f424010155b156123465780546000906123219063ffffffff600160401b9091048116908790612a0216565b905061232d81866130e1565b925082826002015461233f91906130ce565b6002830155505b509392505050565b8260000361235b57505050565b801561236b576120098284612a69565b6001600160a01b03808316600090815260176020526040902054166123be81156123955781612397565b835b857f00000000000000000000000000000000000000000000000000000000000000006121d2565b50505050565b80516120098184612a69565b80516001600160a01b039081166000908152601b602090815260408083207f0000000000000000000000000000000000000000000000000000000000000000909416835292905290812060030154600160601b90046001600160401b031690036124695760405162461bcd60e51b815260206004820152600a60248201526910b83937bb34b9b4b7b760b11b604482015260640161023b565b80516001600160a01b03908116600090815260146020908152604080832082860151909416835260048401909152902060028201541580156124bb575060038201541515806124bb5750600682015415155b156125b5577f0000000000000000000000000000000000000000000000000000000000000000602084015160405163a9059cbb60e01b81526001600160a01b0391821660048201526024810187905291169063a9059cbb906044016020604051808303816000875af1158015612535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612559919061307f565b5082602001516001600160a01b031683600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de866040516125a791815260200190565b60405180910390a350505050565b60008260020154600014806125d1575082600501548360020154145b61260757826005015483600201546125e991906130e1565b60038401546125f890876130b7565b612602919061310d565b612609565b845b905080158061261f5750670de0b6b3a764000085105b156126ae576126548460200151866121d27f000000000000000000000000000000000000000000000000000000000000000090565b83602001516001600160a01b031684600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de876040516126a191815260200190565b60405180910390a3612739565b8483600201546126be91906130ce565b600284015560038301546126d39082906130ce565b600384015581546126e59082906130ce565b82556020808501518551604080518981529384018590526001600160a01b039283169391909216917fcd0366dce5247d874ffc60a762aa7abbb82c1695bbb171609c1b8861e279eb73910160405180910390a35b5050505050565b6001600160a01b0381166000908152600e6020526040812060028101546001820154600483015492549192909161277791906130e1565b61278191906130e1565b610ad791906130e1565b6060600080846001600160a01b0316846040516127a89190613385565b600060405180830381855af49150503d80600081146127e3576040519150601f19603f3d011682016040523d82523d6000602084013e6127e8565b606091505b50915091506127f8858383612ae8565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af115801561286e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289291906130f4565b9050806000036128a157505050565b60006128ad8383612b44565b905060006128bb82846130e1565b6001600160a01b038086166000908152601760205260409020549192506127399183918791161561234e565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612951573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad791906130f4565b600061298482620f4240101590565b82906129a657604051633dc311df60e01b815260040161023b91815260200190565b506129bd6129b783620f42406130e1565b84612a02565b610ad490846130e1565b80156120095760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611f8e565b6000612a1183620f4240101590565b80612a245750612a2482620f4240101590565b83839091612a4e5760405163768bf0eb60e11b81526004810192909252602482015260440161023b565b50620f42409050612a5f83856130b7565b610ad4919061310d565b6001600160a01b0382166000908152600e6020526040902054612a8d9082906130ce565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc290612adc9084815260200190565b60405180910390a25050565b606082612afd57612af882612bab565b610e78565b8151158015612b1457506001600160a01b0384163b155b15612b3d57604051639996b31560e01b81526001600160a01b038516600482015260240161023b565b5080610e78565b6001600160a01b0382166000908152601460205260408120600281015482919015801590612b8457508054640100000000900463ffffffff16620f424010155b156123465780546000906123219063ffffffff6401000000009091048116908790612a0216565b805115612bbb5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b0381168114612bd457600080fd5b60008060408385031215612bff57600080fd5b8235612c0a81612bd7565b91506020830135612c1a81612bd7565b809150509250929050565b600060208284031215612c3757600080fd5b8135610ad481612bd7565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151612cb060c084018263ffffffff169052565b5060e0830151612ccb60e08401826001600160401b03169052565b5092915050565b60008060408385031215612ce557600080fd5b8235612cf081612bd7565b946020939093013593505050565b600080600060608486031215612d1357600080fd5b8335612d1e81612bd7565b92506020840135612d2e81612bd7565b9150604084013560038110612d4257600080fd5b809150509250925092565b600080600060608486031215612d6257600080fd5b8335612d6d81612bd7565b92506020840135612d7d81612bd7565b9150604084013563ffffffff81168114612d4257600080fd5b60008060408385031215612da957600080fd5b823591506020830135612c1a81612bd7565b600080600060608486031215612dd057600080fd5b8335612ddb81612bd7565b92506020840135612deb81612bd7565b91506040840135612d4281612bd7565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e3357634e487b7160e01b600052602160045260246000fd5b91905290565b60008083601f840112612e4b57600080fd5b5081356001600160401b03811115612e6257600080fd5b602083019150836020828501011115612e7a57600080fd5b9250929050565b600080600060408486031215612e9657600080fd5b8335612ea181612bd7565b925060208401356001600160401b03811115612ebc57600080fd5b612ec886828701612e39565b9497909650939450505050565b60008060008060608587031215612eeb57600080fd5b8435612ef681612bd7565b93506020850135925060408501356001600160401b03811115612f1857600080fd5b612f2487828801612e39565b95989497509550505050565b60008060208385031215612f4357600080fd5b82356001600160401b03811115612f5957600080fd5b8301601f81018513612f6a57600080fd5b80356001600160401b03811115612f8057600080fd5b8560208260051b8401011115612f9557600080fd5b6020919091019590945092505050565b60005b83811015612fc0578181015183820152602001612fa8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561303d57603f198786030184528151805180875261301a816020890160208501612fa5565b601f01601f19169590950160209081019550938401939190910190600101612ff1565b50929695505050505050565b60006020828403121561305b57600080fd5b5035919050565b60006020828403121561307457600080fd5b8151610ad481612bd7565b60006020828403121561309157600080fd5b81518015158114610ad457600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad757610ad76130a1565b80820180821115610ad757610ad76130a1565b81810381811115610ad757610ad76130a1565b60006020828403121561310657600080fd5b5051919050565b60008261312a57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561319c5761319c61315e565b604052919050565b600080604083850312156131b757600080fd5b823560ff811681146131c857600080fd5b915060208301356001600160401b038111156131e357600080fd5b8301601f810185136131f457600080fd5b80356001600160401b0381111561320d5761320d61315e565b613220601f8201601f1916602001613174565b81815286602083850101111561323557600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602082840312801561326857600080fd5b50604051602081016001600160401b038111828210171561328b5761328b61315e565b604052825161329981612bd7565b81529392505050565b600060408284031280156132b557600080fd5b50604080519081016001600160401b03811182821017156132d8576132d861315e565b60405282516132e681612bd7565b815260208301516132f681612bd7565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332f57600080fd5b8301803591506001600160401b0382111561334957600080fd5b602001915036819003821315612e7a57600080fd5b82848237600083820160008152835161337b818360208801612fa5565b0195945050505050565b60008251613397818460208701612fa5565b919091019291505056fea264697066735822122038ad83d20c219353421029f1ad8c4f7667d5f0e86af1579c64603bb56827d86064736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106101f25760003560e01c806398c657dc1161010d578063b6363cf2116100a0578063e2e1e8e91161006f578063e2e1e8e914610a0b578063e73e14bf14610a38578063f1d60d6614610a70578063fb744cc014610a90578063fc54fb2714610ab057600080fd5b8063b6363cf2146108dd578063b7ca724114610927578063c0641994146109c1578063ccebcabb146109dc57600080fd5b8063a4c0ed36116100dc578063a4c0ed3614610837578063a784d49814610857578063ac9650d814610877578063ae4fe67a146108a457600080fd5b806398c657dc1461072d5780639ce7abe51461075a578063a212daf81461077a578063a2594d821461081757600080fd5b8063561285e411610185578063872d048911610154578063872d04891461064c5780638cc01c861461066c5780638d3c100a146106ed5780639054e3431461070d57600080fd5b8063561285e4146105a95780636a3ca383146105fc5780637573ef4f1461062c5780637a7664601461031157600080fd5b806325d9897e116101c157806325d9897e1461036957806339514ad21461047957806344c32a61146104ab57806355c85269146104cb57600080fd5b806308ce5f68146102495780630e0229231461027c5780631787e69f146103115780631ae720451461034757600080fd5b366102445760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561025557600080fd5b50610269610264366004612bec565b610ac8565b6040519081526020015b60405180910390f35b34801561028857600080fd5b5061029c610297366004612c25565b610add565b604051610273919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561031d57600080fd5b5061026961032c366004612c25565b6001600160a01b03166000908152600e602052604090205490565b34801561035357600080fd5b50610367610362366004612c25565b610bbd565b005b34801561037557600080fd5b5061046c610384366004612bec565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516102739190612c42565b34801561048557600080fd5b50601a546001600160401b03165b6040516001600160401b039091168152602001610273565b3480156104b757600080fd5b506103676104c6366004612cd2565b610cba565b3480156104d757600080fd5b506105776104e6366004612c25565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610273565b3480156105b557600080fd5b506105c96105c4366004612bec565b610d68565b60405161027391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561060857600080fd5b5061061c610617366004612c25565b610df6565b6040519015158152602001610273565b34801561063857600080fd5b50610269610647366004612cfe565b610e1b565b34801561065857600080fd5b50610269610667366004612d4d565b610e7f565b34801561067857600080fd5b506106d2610687366004612c25565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b60408051825181526020928301519281019290925201610273565b3480156106f957600080fd5b50610367610708366004612d96565b610ed4565b34801561071957600080fd5b50610269610728366004612dbb565b6113a0565b34801561073957600080fd5b5061074d610748366004612c25565b611488565b6040516102739190612e11565b34801561076657600080fd5b50610367610775366004612e81565b611493565b34801561078657600080fd5b506105c9610795366004612dbb565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561082357600080fd5b50610367610832366004612c25565b6115be565b34801561084357600080fd5b50610367610852366004612ed5565b6116da565b34801561086357600080fd5b50610269610872366004612c25565b6118e7565b34801561088357600080fd5b50610897610892366004612f30565b6118f2565b6040516102739190612fc9565b3480156108b057600080fd5b5061061c6108bf366004612c25565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e957600080fd5b5061061c6108f8366004612bec565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093357600080fd5b50610996610942366004613049565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b0316908201529181015190820152606001610273565b3480156109cd57600080fd5b50600d5463ffffffff16610493565b3480156109e857600080fd5b506109fc6109f7366004612dbb565b6119d9565b60405190518152602001610273565b348015610a1757600080fd5b50610269610a26366004613049565b60009081526010602052604090205490565b348015610a4457600080fd5b5061061c610a53366004612c25565b6001600160a01b03166000908152600e6020526040902054151590565b348015610a7c57600080fd5b5061061c610a8b366004612c25565b611a2b565b348015610a9c57600080fd5b50610269610aab366004612bec565b611a50565b348015610abc57600080fd5b5060205460ff1661061c565b6000610ad48383611a5c565b90505b92915050565b610b3860405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190613062565b6001600160a01b0316336001600160a01b031614610c7057604051635d9044cd60e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040517f690e9b982dc9aefaa1cfed186a2d2045a638013d658104102c9437235bee4b6090600090a250565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061307f565b15610d5a57604051632b37d9d160e21b815260040160405180910390fd5b610d648282611a94565b5050565b610d936040518060800160405280600081526020016000815260200160008152602001600081525090565b610dbe6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000610dca8585611e32565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b60006001610e0383611eb6565b6002811115610e1457610e14612dfb565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610e5557610e55612dfb565b6002811115610e6657610e66612dfb565b81526020019081526020016000205490505b9392505050565b600080610e8c8585611a5c565b90506000610e9a8686611f0f565b90506000610eae63ffffffff8616846130b7565b90506000610ebc8383611f3a565b9050610ec881856130ce565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f56919061307f565b15610f7457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610fb35760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b604482015260640161023b565b6000610fbe82611eb6565b90506000816002811115610fd457610fd4612dfb565b0361100c5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b604482015260640161023b565b8260000361101957505050565b6001600160a01b0382166000908152600f6020526040812060018101549091859080808061107333867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611f51565b600d5461108e908690600160401b900463ffffffff1661200e565b935061109a84866130e1565b600d549095506110bb9087908790640100000000900463ffffffff16612047565b92506110c783866130e1565b94508487600501546110d991906130ce565b6005880155600287015460009015806110ff5750601954600160a01b900463ffffffff16155b6111ca5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273__$8eb3cac1482a31d7a7f2cbe7dc8bdcd821$__906349484d819060c401602060405180830381865af41580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c591906130f4565b6111cd565b60005b90506111dd81896008015461225a565b92506111e98387611f3a565b92506112296111f884886130e1565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690612274565b82156112915782886008015461123f91906130ce565b60088901558754611259906001600160a01b0316846122bc565b915061126582846130e1565b88546001600160a01b03908116600081815260176020526040902054929550611291928692161561234e565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134791906130f4565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e60209081526040808320868516845282528083209385168352929052908120600381015482036113e6576000915050610e78565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b801561147c576000818152601d602052604090206001810154426001600160401b039091161161146b5760028301546001840154825461145091906130b7565b61145a919061310d565b61146490856130ce565b9350611471565b5061147c565b600201549050611410565b50909695505050505050565b6000610ad782611eb6565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190613062565b6001600160a01b0316336001600160a01b0316146115585760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611586908690869060040161312f565b600060405180830381600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190613062565b6001600160a01b0316336001600160a01b0316146116835760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175c919061307f565b1561177a57604051632b37d9d160e21b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117e15760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015260640161023b565b6018546001600160a01b0385811691161461183e5760405162461bcd60e51b815260206004820152601e60248201527f4f4e4c595f4c315f5354414b494e475f5448524f5547485f4252494447450000604482015260640161023b565b60008061184d838501856131a4565b909250905060ff8216611882576000818060200190518101906118709190613255565b905061187c86826123c4565b506116d2565b60001960ff8316016118b0576000818060200190518101906118a491906132a2565b905061187c86826123d0565b60405162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f434f444560a01b604482015260640161023b565b6000610ad782612740565b604080516000815260208101909152606090826001600160401b0381111561191c5761191c61315e565b60405190808252806020026020018201604052801561194f57816020015b606081526020019060019003908161193a5790505b50915060005b838110156119d1576119ac3086868481811061197357611973613302565b90506020028101906119859190613318565b856040516020016119989392919061335e565b60405160208183030381529060405261278b565b8382815181106119be576119be613302565b6020908102919091010152600101611955565b505092915050565b6040805160208101909152600081526040805160208101909152600081526000611a038686611e32565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b600080611a3783611eb6565b6002811115611a4857611a48612dfb565b141592915050565b6000610ad48383611f0f565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610ad491906130e1565b6000611a9f83611eb6565b90506001816002811115611ab557611ab5612dfb565b14611aec5760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b604482015260640161023b565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef91906130f4565b608082018190526060820151600091611c079161225a565b9050600082600001516001600160a01b0316336001600160a01b03161480611c78575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff1682111580611c9b57506040830151155b15611cd55780611cd55760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b604482015260640161023b565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611db957808015611d0f57508415155b15611d2757611d22868460000151612801565b611d36565b611d3483602001516128e7565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611d6391906130e1565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611da391906130e1565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611e8b57506001600160a01b0382166000908152601460205260409020610ad7565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610ad7565b6001600160a01b038082166000908152600f6020526040812080549192909116611ee35750600092915050565b600381015415801590611ef857506004810154155b15611f065750600192915050565b50600292915050565b600080611f1c8484611e32565b905080600501548160020154611f3291906130e1565b949350505050565b600081831115611f4a5781610ad4565b5090919050565b8015612009576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd1919061307f565b6120095760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161023b565b505050565b60008061201b8484612975565b9050610ad4817f000000000000000000000000000000000000000000000000000000000000000061121a565b60008260000361205957506000610e78565b7f00000000000000000000000000000000000000000000000000000000000000006000831580159061209357506001600160a01b03821615155b90508080156121065750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612106919061307f565b1561224e5760006121178686612975565b90508015612244576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121aa91906130f4565b506121e283827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906129c7565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b15801561222b57600080fd5b505af115801561223f573d6000803e3d6000fd5b505050505b9250610e78915050565b50600095945050505050565b600081831161226a576000610ad4565b610ad482846130e1565b8015610d6457604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156116be57600080fd5b6001600160a01b03821660009081526014602052604081206002810154829190158015906122fb57508054600160401b900463ffffffff16620f424010155b156123465780546000906123219063ffffffff600160401b9091048116908790612a0216565b905061232d81866130e1565b925082826002015461233f91906130ce565b6002830155505b509392505050565b8260000361235b57505050565b801561236b576120098284612a69565b6001600160a01b03808316600090815260176020526040902054166123be81156123955781612397565b835b857f00000000000000000000000000000000000000000000000000000000000000006121d2565b50505050565b80516120098184612a69565b80516001600160a01b039081166000908152601b602090815260408083207f0000000000000000000000000000000000000000000000000000000000000000909416835292905290812060030154600160601b90046001600160401b031690036124695760405162461bcd60e51b815260206004820152600a60248201526910b83937bb34b9b4b7b760b11b604482015260640161023b565b80516001600160a01b03908116600090815260146020908152604080832082860151909416835260048401909152902060028201541580156124bb575060038201541515806124bb5750600682015415155b156125b5577f0000000000000000000000000000000000000000000000000000000000000000602084015160405163a9059cbb60e01b81526001600160a01b0391821660048201526024810187905291169063a9059cbb906044016020604051808303816000875af1158015612535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612559919061307f565b5082602001516001600160a01b031683600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de866040516125a791815260200190565b60405180910390a350505050565b60008260020154600014806125d1575082600501548360020154145b61260757826005015483600201546125e991906130e1565b60038401546125f890876130b7565b612602919061310d565b612609565b845b905080158061261f5750670de0b6b3a764000085105b156126ae576126548460200151866121d27f000000000000000000000000000000000000000000000000000000000000000090565b83602001516001600160a01b031684600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de876040516126a191815260200190565b60405180910390a3612739565b8483600201546126be91906130ce565b600284015560038301546126d39082906130ce565b600384015581546126e59082906130ce565b82556020808501518551604080518981529384018590526001600160a01b039283169391909216917fcd0366dce5247d874ffc60a762aa7abbb82c1695bbb171609c1b8861e279eb73910160405180910390a35b5050505050565b6001600160a01b0381166000908152600e6020526040812060028101546001820154600483015492549192909161277791906130e1565b61278191906130e1565b610ad791906130e1565b6060600080846001600160a01b0316846040516127a89190613385565b600060405180830381855af49150503d80600081146127e3576040519150601f19603f3d011682016040523d82523d6000602084013e6127e8565b606091505b50915091506127f8858383612ae8565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af115801561286e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289291906130f4565b9050806000036128a157505050565b60006128ad8383612b44565b905060006128bb82846130e1565b6001600160a01b038086166000908152601760205260409020549192506127399183918791161561234e565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612951573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad791906130f4565b600061298482620f4240101590565b82906129a657604051633dc311df60e01b815260040161023b91815260200190565b506129bd6129b783620f42406130e1565b84612a02565b610ad490846130e1565b80156120095760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611f8e565b6000612a1183620f4240101590565b80612a245750612a2482620f4240101590565b83839091612a4e5760405163768bf0eb60e11b81526004810192909252602482015260440161023b565b50620f42409050612a5f83856130b7565b610ad4919061310d565b6001600160a01b0382166000908152600e6020526040902054612a8d9082906130ce565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc290612adc9084815260200190565b60405180910390a25050565b606082612afd57612af882612bab565b610e78565b8151158015612b1457506001600160a01b0384163b155b15612b3d57604051639996b31560e01b81526001600160a01b038516600482015260240161023b565b5080610e78565b6001600160a01b0382166000908152601460205260408120600281015482919015801590612b8457508054640100000000900463ffffffff16620f424010155b156123465780546000906123219063ffffffff6401000000009091048116908790612a0216565b805115612bbb5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b0381168114612bd457600080fd5b60008060408385031215612bff57600080fd5b8235612c0a81612bd7565b91506020830135612c1a81612bd7565b809150509250929050565b600060208284031215612c3757600080fd5b8135610ad481612bd7565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151612cb060c084018263ffffffff169052565b5060e0830151612ccb60e08401826001600160401b03169052565b5092915050565b60008060408385031215612ce557600080fd5b8235612cf081612bd7565b946020939093013593505050565b600080600060608486031215612d1357600080fd5b8335612d1e81612bd7565b92506020840135612d2e81612bd7565b9150604084013560038110612d4257600080fd5b809150509250925092565b600080600060608486031215612d6257600080fd5b8335612d6d81612bd7565b92506020840135612d7d81612bd7565b9150604084013563ffffffff81168114612d4257600080fd5b60008060408385031215612da957600080fd5b823591506020830135612c1a81612bd7565b600080600060608486031215612dd057600080fd5b8335612ddb81612bd7565b92506020840135612deb81612bd7565b91506040840135612d4281612bd7565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e3357634e487b7160e01b600052602160045260246000fd5b91905290565b60008083601f840112612e4b57600080fd5b5081356001600160401b03811115612e6257600080fd5b602083019150836020828501011115612e7a57600080fd5b9250929050565b600080600060408486031215612e9657600080fd5b8335612ea181612bd7565b925060208401356001600160401b03811115612ebc57600080fd5b612ec886828701612e39565b9497909650939450505050565b60008060008060608587031215612eeb57600080fd5b8435612ef681612bd7565b93506020850135925060408501356001600160401b03811115612f1857600080fd5b612f2487828801612e39565b95989497509550505050565b60008060208385031215612f4357600080fd5b82356001600160401b03811115612f5957600080fd5b8301601f81018513612f6a57600080fd5b80356001600160401b03811115612f8057600080fd5b8560208260051b8401011115612f9557600080fd5b6020919091019590945092505050565b60005b83811015612fc0578181015183820152602001612fa8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561303d57603f198786030184528151805180875261301a816020890160208501612fa5565b601f01601f19169590950160209081019550938401939190910190600101612ff1565b50929695505050505050565b60006020828403121561305b57600080fd5b5035919050565b60006020828403121561307457600080fd5b8151610ad481612bd7565b60006020828403121561309157600080fd5b81518015158114610ad457600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad757610ad76130a1565b80820180821115610ad757610ad76130a1565b81810381811115610ad757610ad76130a1565b60006020828403121561310657600080fd5b5051919050565b60008261312a57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561319c5761319c61315e565b604052919050565b600080604083850312156131b757600080fd5b823560ff811681146131c857600080fd5b915060208301356001600160401b038111156131e357600080fd5b8301601f810185136131f457600080fd5b80356001600160401b0381111561320d5761320d61315e565b613220601f8201601f1916602001613174565b81815286602083850101111561323557600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602082840312801561326857600080fd5b50604051602081016001600160401b038111828210171561328b5761328b61315e565b604052825161329981612bd7565b81529392505050565b600060408284031280156132b557600080fd5b50604080519081016001600160401b03811182821017156132d8576132d861315e565b60405282516132e681612bd7565b815260208301516132f681612bd7565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332f57600080fd5b8301803591506001600160401b0382111561334957600080fd5b602001915036819003821315612e7a57600080fd5b82848237600083820160008152835161337b818360208801612fa5565b0195945050505050565b60008251613397818460208701612fa5565b919091019291505056fea264697066735822122038ad83d20c219353421029f1ad8c4f7667d5f0e86af1579c64603bb56827d86064736f6c634300081b0033", + "linkReferences": { + "contracts/staking/libraries/ExponentialRebates.sol": { + "ExponentialRebates": [ + { + "length": 20, + "start": 5879 + } + ] + } + }, + "deployedLinkReferences": { + "contracts/staking/libraries/ExponentialRebates.sol": { + "ExponentialRebates": [ + { + "length": 20, + "start": 4455 + } + ] + } + } +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json new file mode 100644 index 000000000..4f10cc208 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json @@ -0,0 +1,769 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PaymentsEscrow", + "sourceName": "contracts/payments/PaymentsEscrow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "revokeCollectorThawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawEscrowThawingPeriod", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInconsistentCollection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAllowance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minBalance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowNotThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "PaymentsEscrowStillThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "thawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThawingPeriod", + "type": "uint256" + } + ], + "name": "PaymentsEscrowThawingPeriodTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "AuthorizedCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "CancelThaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "CancelThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "EscrowCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "RevokeCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "Thaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "ThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "REVOKE_COLLECTOR_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WITHDRAW_ESCROW_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + } + ], + "name": "approveCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "authorizedCollectors", + "outputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "cancelThawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "depositTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "escrowAccounts", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + } + ], + "name": "revokeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "thawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b506040516120c73803806120c78339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611ad26105f5600039600081816101e00152610abb015260008181610193015261039d01526000505060005050600050506000505060005050600081816102fa0152818161041601528181610589015281816106380152818161076e0152818161094901528181610b2d01528181610d71015261131b01526000505060008181610fa6015261104e015260005050600081816108da01528181610eea01528181610f77015281816110c401526114130152611ad26000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json new file mode 100644 index 000000000..4f10cc208 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json @@ -0,0 +1,769 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PaymentsEscrow", + "sourceName": "contracts/payments/PaymentsEscrow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "revokeCollectorThawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawEscrowThawingPeriod", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInconsistentCollection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAllowance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minBalance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowNotThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "PaymentsEscrowStillThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "thawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxThawingPeriod", + "type": "uint256" + } + ], + "name": "PaymentsEscrowThawingPeriodTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "AuthorizedCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "CancelThaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "CancelThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "EscrowCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "RevokeCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "Thaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "ThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "REVOKE_COLLECTOR_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WITHDRAW_ESCROW_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + } + ], + "name": "approveCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "authorizedCollectors", + "outputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "cancelThawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "depositTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "escrowAccounts", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + } + ], + "name": "revokeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "thawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b506040516120c73803806120c78339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611ad26105f5600039600081816101e00152610abb015260008181610193015261039d01526000505060005050600050506000505060005050600081816102fa0152818161041601528181610589015281816106380152818161076e0152818161094901528181610b2d01528181610d71015261131b01526000505060008181610fa6015261104e015260005050600081816108da01528181610eea01528181610f77015281816110c401526114130152611ad26000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json new file mode 100644 index 000000000..87ac4c282 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json @@ -0,0 +1,635 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "RewardsManager", + "sourceName": "contracts/rewards/RewardsManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardsAssigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "RewardsDenied", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sinceBlock", + "type": "uint256" + } + ], + "name": "RewardsDenylistUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldSubgraphService", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [], + "name": "accRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accRewardsPerSignalLastBlockUpdated", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "name": "calcRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "denylist", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsForSubgraph", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsPerAllocatedToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNewRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "getRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isDenied", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "issuancePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumSubgraphSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphAllocationUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphSignalUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "_deny", + "type": "bool" + } + ], + "name": "setDenied", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_subgraphDeploymentID", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "_deny", + "type": "bool[]" + } + ], + "name": "setDeniedMany", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_issuancePerBlock", + "type": "uint256" + } + ], + "name": "setIssuancePerBlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumSubgraphSignal", + "type": "uint256" + } + ], + "name": "setMinimumSubgraphSignal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphAvailabilityOracle", + "type": "address" + } + ], + "name": "setSubgraphAvailabilityOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphAvailabilityOracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract IRewardsIssuer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "subgraphs", + "outputs": [ + { + "internalType": "uint256", + "name": "accRewardsForSubgraph", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsForSubgraphSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerSignalSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "takeRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json new file mode 100644 index 000000000..87ac4c282 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json @@ -0,0 +1,635 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "RewardsManager", + "sourceName": "contracts/rewards/RewardsManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardsAssigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "RewardsDenied", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sinceBlock", + "type": "uint256" + } + ], + "name": "RewardsDenylistUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldSubgraphService", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [], + "name": "accRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accRewardsPerSignalLastBlockUpdated", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "name": "calcRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "denylist", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsForSubgraph", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsPerAllocatedToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNewRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "getRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isDenied", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "issuancePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumSubgraphSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphAllocationUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphSignalUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "_deny", + "type": "bool" + } + ], + "name": "setDenied", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_subgraphDeploymentID", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "_deny", + "type": "bool[]" + } + ], + "name": "setDeniedMany", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_issuancePerBlock", + "type": "uint256" + } + ], + "name": "setIssuancePerBlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumSubgraphSignal", + "type": "uint256" + } + ], + "name": "setMinimumSubgraphSignal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphAvailabilityOracle", + "type": "address" + } + ], + "name": "setSubgraphAvailabilityOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphAvailabilityOracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract IRewardsIssuer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "subgraphs", + "outputs": [ + { + "internalType": "uint256", + "name": "accRewardsForSubgraph", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsForSubgraphSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerSignalSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "takeRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json b/packages/horizon/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json new file mode 100644 index 000000000..94f0189f7 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json @@ -0,0 +1,450 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TAPCollector", + "sourceName": "contracts/payments/collectors/TAPCollector.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "eip712Name", + "type": "string" + }, + { + "internalType": "string", + "name": "eip712Version", + "type": "string" + }, + { + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + } + ], + "name": "TAPCollectorCallerNotDataService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensCollected", + "type": "uint256" + } + ], + "name": "TAPCollectorInconsistentRAVTokens", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", + "name": "rav", + "type": "tuple" + } + ], + "name": "encodeRAV", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", + "name": "rav", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.SignedRAV", + "name": "signedRAV", + "type": "tuple" + } + ], + "name": "recoverRAVSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "tokensCollected", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6102a060405234801561001157600080fd5b506040516119ae3803806119ae833981016040819052610030916105d9565b80838361003e8260006103db565b6101205261004d8160016103db565b61014052815160208084019190912060e052815190820120610100524660a0526100da60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03811661012c5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101e05260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526101649061040e565b6001600160a01b0316610160526040805180820190915260078152665374616b696e6760c81b60208201526101989061040e565b6001600160a01b03166101805260408051808201909152600d81526c47726170685061796d656e747360981b60208201526101d29061040e565b6001600160a01b03166101a05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261020d9061040e565b6001600160a01b03166101c05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526102469061040e565b6001600160a01b03166102005260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526102819061040e565b6001600160a01b0316610220526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102bf9061040e565b6001600160a01b03166102405260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102fb9061040e565b6001600160a01b03166102605260408051808201909152600881526721bab930ba34b7b760c11b60208201526103309061040e565b6001600160a01b039081166102808190526101e05161018051610160516101a0516101c0516102005161022051610240516102605160408051968c168752948b166020870152928a1685850152908916606085015288166080840152871660a083015260c0820195909552935192851694918216939116917fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a439181900360e00190a45050505061081e565b60006020835110156103f7576103f0836104bc565b9050610408565b8161040284826106db565b5060ff90505b92915050565b6000806101e0516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161044991815260200190565b602060405180830381865afa158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a9190610799565b9050826001600160a01b0382166104b55760405163218f5add60e11b815260040161012391906107e7565b5092915050565b600080829050601f815111156104e7578260405163305a27a960e01b815260040161012391906107e7565b80516104f2826107fa565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561052b578181015183820152602001610513565b50506000910152565b600082601f83011261054557600080fd5b81516001600160401b0381111561055e5761055e6104fa565b604051601f8201601f19908116603f011681016001600160401b038111828210171561058c5761058c6104fa565b6040528181528382016020018510156105a457600080fd5b6105b5826020830160208701610510565b949350505050565b80516001600160a01b03811681146105d457600080fd5b919050565b6000806000606084860312156105ee57600080fd5b83516001600160401b0381111561060457600080fd5b61061086828701610534565b602086015190945090506001600160401b0381111561062e57600080fd5b61063a86828701610534565b925050610649604085016105bd565b90509250925092565b600181811c9082168061066657607f821691505b60208210810361068657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106d657806000526020600020601f840160051c810160208510156106b35750805b601f840160051c820191505b818110156106d357600081556001016106bf565b50505b505050565b81516001600160401b038111156106f4576106f46104fa565b610708816107028454610652565b8461068c565b6020601f82116001811461073c57600083156107245750848201515b600019600385901b1c1916600184901b1784556106d3565b600084815260208120601f198516915b8281101561076c578785015182556020948501946001909201910161074c565b508482101561078a5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156107ab57600080fd5b6107b4826105bd565b9392505050565b600081518084526107d3816020860160208601610510565b601f01601f19169290920160200192915050565b6020815260006107b460208301846107bb565b805160208083015191908110156106865760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516110e36108cb600039600050506000505060005050600050506000505060005050600061024f0152600050506000505060005050600061049201526000610460015260006108940152600061086c015260006107c7015260006107f10152600061081b01526110e36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80631ef518f21461005c5780637f07d2831461008c57806384b0196e146100ad5780638821603c146100c8578063cfdb35bd146100db575b600080fd5b61006f61006a3660046109dc565b61010c565b6040516001600160a01b0390911681526020015b60405180910390f35b61009f61009a366004610b23565b610125565b604051908152602001610083565b6100b5610372565b6040516100839796959493929190610bc6565b61009f6100d6366004610c5e565b6103b8565b61009f6100e9366004610cb0565b600260209081526000938452604080852082529284528284209052825290205481565b600061011f61011a83610db8565b6103cb565b92915050565b60008060008380602001905181019061013e9190610e75565b815151919350915033906001600160a01b0381168214610189576040516347666ba360e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50508151516000610199846103cb565b84516020808201516060909201516001600160a01b038087166000908152600284526040808220838716835285528082209287168252919093529091205492935090916001600160801b03909116908181808211610213576040516308e467d960e31b815260048101929092526024820152604401610180565b50600090506102228284610fb1565b9050600061023082896103f2565b905081156102f3576040516343edff4160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906387dbfe829061028e908f908a908a9088908e908990600401610fda565b600060405180830381600087803b1580156102a857600080fd5b505af11580156102bc573d6000803e3d6000fd5b5050506001600160a01b0380891660009081526002602090815260408083208a851684528252808320938b16835292905220859055505b866001600160a01b0316866001600160a01b03168d600281111561031957610319610fc4565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4509a9950505050505050505050565b600060608060008060006060610386610459565b61038e61048b565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061011f6103c68361102e565b6104b8565b6000806103db83600001516104b8565b90506103eb81846020015161056f565b9392505050565b600061040183620f4240101590565b80610414575061041482620f4240101590565b8383909161043e5760405163768bf0eb60e11b815260048101929092526024820152604401610180565b50620f4240905061044f838561103a565b6103eb9190611051565b60606104867f00000000000000000000000000000000000000000000000000000000000000006000610599565b905090565b60606104867f00000000000000000000000000000000000000000000000000000000000000006001610599565b600061011f7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610554969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610644565b60008060008061057f8686610671565b92509250925061058f82826106be565b5090949350505050565b606060ff83146105b3576105ac8361077b565b905061011f565b8180546105bf90611073565b80601f01602080910402602001604051908101604052809291908181526020018280546105eb90611073565b80156106385780601f1061060d57610100808354040283529160200191610638565b820191906000526020600020905b81548152906001019060200180831161061b57829003601f168201915b5050505050905061011f565b600061011f6106516107ba565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600083516041036106ab5760208401516040850151606086015160001a61069d888285856108e5565b9550955095505050506106b7565b50508151600091506002905b9250925092565b60008260038111156106d2576106d2610fc4565b036106db575050565b60018260038111156106ef576106ef610fc4565b0361070d5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561072157610721610fc4565b036107425760405163fce698f760e01b815260048101829052602401610180565b600382600381111561075657610756610fc4565b03610777576040516335e2f38360e21b815260048101829052602401610180565b5050565b60606000610788836109b4565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561081357507f000000000000000000000000000000000000000000000000000000000000000046145b1561083d57507f000000000000000000000000000000000000000000000000000000000000000090565b610486604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561092057506000915060039050826109aa565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610974573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109a0575060009250600191508290506109aa565b9250600091508190505b9450945094915050565b600060ff8216601f81111561011f57604051632cd44ac360e21b815260040160405180910390fd5b6000602082840312156109ee57600080fd5b81356001600160401b03811115610a0457600080fd5b8201604081850312156103eb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715610a4e57610a4e610a16565b60405290565b604080519081016001600160401b0381118282101715610a4e57610a4e610a16565b604051601f8201601f191681016001600160401b0381118282101715610a9e57610a9e610a16565b604052919050565b60006001600160401b03821115610abf57610abf610a16565b50601f01601f191660200190565b600082601f830112610ade57600080fd5b8135610af1610aec82610aa6565b610a76565b818152846020838601011115610b0657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610b3657600080fd5b823560038110610b4557600080fd5b915060208301356001600160401b03811115610b6057600080fd5b610b6c85828601610acd565b9150509250929050565b60005b83811015610b91578181015183820152602001610b79565b50506000910152565b60008151808452610bb2816020860160208601610b76565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e060208201526000610be560e0830189610b9a565b8281036040840152610bf78189610b9a565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015610c4d578351835260209384019390920191600101610c2f565b50909b9a5050505050505050505050565b600060208284031215610c7057600080fd5b81356001600160401b03811115610c8657600080fd5b820160a081850312156103eb57600080fd5b6001600160a01b0381168114610cad57600080fd5b50565b600080600060608486031215610cc557600080fd5b8335610cd081610c98565b92506020840135610ce081610c98565b91506040840135610cf081610c98565b809150509250925092565b6001600160401b0381168114610cad57600080fd5b6001600160801b0381168114610cad57600080fd5b600060a08284031215610d3757600080fd5b610d3f610a2c565b90508135610d4c81610c98565b81526020820135610d5c81610c98565b60208201526040820135610d6f81610cfb565b60408201526060820135610d8281610d10565b606082015260808201356001600160401b03811115610da057600080fd5b610dac84828501610acd565b60808301525092915050565b600060408236031215610dca57600080fd5b610dd2610a54565b82356001600160401b03811115610de857600080fd5b610df436828601610d25565b82525060208301356001600160401b03811115610e1057600080fd5b610e1c36828601610acd565b60208301525092915050565b600082601f830112610e3957600080fd5b8151610e47610aec82610aa6565b818152846020838601011115610e5c57600080fd5b610e6d826020830160208701610b76565b949350505050565b60008060408385031215610e8857600080fd5b82516001600160401b03811115610e9e57600080fd5b830160408186031215610eb057600080fd5b610eb8610a54565b81516001600160401b03811115610ece57600080fd5b820160a08188031215610ee057600080fd5b610ee8610a2c565b8151610ef381610c98565b81526020820151610f0381610c98565b60208201526040820151610f1681610cfb565b60408201526060820151610f2981610d10565b606082015260808201516001600160401b03811115610f4757600080fd5b610f5389828501610e28565b60808301525082525060208201516001600160401b03811115610f7557600080fd5b610f8187828501610e28565b602083810191909152959095015190969095509350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561011f5761011f610f9b565b634e487b7160e01b600052602160045260246000fd5b60c0810160038810610ffc57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b600061011f3683610d25565b808202811582820484141761011f5761011f610f9b565b60008261106e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061108757607f821691505b6020821081036110a757634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212204ea11b7f590e7303a0b1850b4cd59148c357bb48498bdb2606c6e97c057012e264736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80631ef518f21461005c5780637f07d2831461008c57806384b0196e146100ad5780638821603c146100c8578063cfdb35bd146100db575b600080fd5b61006f61006a3660046109dc565b61010c565b6040516001600160a01b0390911681526020015b60405180910390f35b61009f61009a366004610b23565b610125565b604051908152602001610083565b6100b5610372565b6040516100839796959493929190610bc6565b61009f6100d6366004610c5e565b6103b8565b61009f6100e9366004610cb0565b600260209081526000938452604080852082529284528284209052825290205481565b600061011f61011a83610db8565b6103cb565b92915050565b60008060008380602001905181019061013e9190610e75565b815151919350915033906001600160a01b0381168214610189576040516347666ba360e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50508151516000610199846103cb565b84516020808201516060909201516001600160a01b038087166000908152600284526040808220838716835285528082209287168252919093529091205492935090916001600160801b03909116908181808211610213576040516308e467d960e31b815260048101929092526024820152604401610180565b50600090506102228284610fb1565b9050600061023082896103f2565b905081156102f3576040516343edff4160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906387dbfe829061028e908f908a908a9088908e908990600401610fda565b600060405180830381600087803b1580156102a857600080fd5b505af11580156102bc573d6000803e3d6000fd5b5050506001600160a01b0380891660009081526002602090815260408083208a851684528252808320938b16835292905220859055505b866001600160a01b0316866001600160a01b03168d600281111561031957610319610fc4565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4509a9950505050505050505050565b600060608060008060006060610386610459565b61038e61048b565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061011f6103c68361102e565b6104b8565b6000806103db83600001516104b8565b90506103eb81846020015161056f565b9392505050565b600061040183620f4240101590565b80610414575061041482620f4240101590565b8383909161043e5760405163768bf0eb60e11b815260048101929092526024820152604401610180565b50620f4240905061044f838561103a565b6103eb9190611051565b60606104867f00000000000000000000000000000000000000000000000000000000000000006000610599565b905090565b60606104867f00000000000000000000000000000000000000000000000000000000000000006001610599565b600061011f7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610554969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610644565b60008060008061057f8686610671565b92509250925061058f82826106be565b5090949350505050565b606060ff83146105b3576105ac8361077b565b905061011f565b8180546105bf90611073565b80601f01602080910402602001604051908101604052809291908181526020018280546105eb90611073565b80156106385780601f1061060d57610100808354040283529160200191610638565b820191906000526020600020905b81548152906001019060200180831161061b57829003601f168201915b5050505050905061011f565b600061011f6106516107ba565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600083516041036106ab5760208401516040850151606086015160001a61069d888285856108e5565b9550955095505050506106b7565b50508151600091506002905b9250925092565b60008260038111156106d2576106d2610fc4565b036106db575050565b60018260038111156106ef576106ef610fc4565b0361070d5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561072157610721610fc4565b036107425760405163fce698f760e01b815260048101829052602401610180565b600382600381111561075657610756610fc4565b03610777576040516335e2f38360e21b815260048101829052602401610180565b5050565b60606000610788836109b4565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561081357507f000000000000000000000000000000000000000000000000000000000000000046145b1561083d57507f000000000000000000000000000000000000000000000000000000000000000090565b610486604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561092057506000915060039050826109aa565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610974573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109a0575060009250600191508290506109aa565b9250600091508190505b9450945094915050565b600060ff8216601f81111561011f57604051632cd44ac360e21b815260040160405180910390fd5b6000602082840312156109ee57600080fd5b81356001600160401b03811115610a0457600080fd5b8201604081850312156103eb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715610a4e57610a4e610a16565b60405290565b604080519081016001600160401b0381118282101715610a4e57610a4e610a16565b604051601f8201601f191681016001600160401b0381118282101715610a9e57610a9e610a16565b604052919050565b60006001600160401b03821115610abf57610abf610a16565b50601f01601f191660200190565b600082601f830112610ade57600080fd5b8135610af1610aec82610aa6565b610a76565b818152846020838601011115610b0657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610b3657600080fd5b823560038110610b4557600080fd5b915060208301356001600160401b03811115610b6057600080fd5b610b6c85828601610acd565b9150509250929050565b60005b83811015610b91578181015183820152602001610b79565b50506000910152565b60008151808452610bb2816020860160208601610b76565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e060208201526000610be560e0830189610b9a565b8281036040840152610bf78189610b9a565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015610c4d578351835260209384019390920191600101610c2f565b50909b9a5050505050505050505050565b600060208284031215610c7057600080fd5b81356001600160401b03811115610c8657600080fd5b820160a081850312156103eb57600080fd5b6001600160a01b0381168114610cad57600080fd5b50565b600080600060608486031215610cc557600080fd5b8335610cd081610c98565b92506020840135610ce081610c98565b91506040840135610cf081610c98565b809150509250925092565b6001600160401b0381168114610cad57600080fd5b6001600160801b0381168114610cad57600080fd5b600060a08284031215610d3757600080fd5b610d3f610a2c565b90508135610d4c81610c98565b81526020820135610d5c81610c98565b60208201526040820135610d6f81610cfb565b60408201526060820135610d8281610d10565b606082015260808201356001600160401b03811115610da057600080fd5b610dac84828501610acd565b60808301525092915050565b600060408236031215610dca57600080fd5b610dd2610a54565b82356001600160401b03811115610de857600080fd5b610df436828601610d25565b82525060208301356001600160401b03811115610e1057600080fd5b610e1c36828601610acd565b60208301525092915050565b600082601f830112610e3957600080fd5b8151610e47610aec82610aa6565b818152846020838601011115610e5c57600080fd5b610e6d826020830160208701610b76565b949350505050565b60008060408385031215610e8857600080fd5b82516001600160401b03811115610e9e57600080fd5b830160408186031215610eb057600080fd5b610eb8610a54565b81516001600160401b03811115610ece57600080fd5b820160a08188031215610ee057600080fd5b610ee8610a2c565b8151610ef381610c98565b81526020820151610f0381610c98565b60208201526040820151610f1681610cfb565b60408201526060820151610f2981610d10565b606082015260808201516001600160401b03811115610f4757600080fd5b610f5389828501610e28565b60808301525082525060208201516001600160401b03811115610f7557600080fd5b610f8187828501610e28565b602083810191909152959095015190969095509350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561011f5761011f610f9b565b634e487b7160e01b600052602160045260246000fd5b60c0810160038810610ffc57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b600061011f3683610d25565b808202811582820484141761011f5761011f610f9b565b60008261106e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061108757607f821691505b6020821081036110a757634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212204ea11b7f590e7303a0b1850b4cd59148c357bb48498bdb2606c6e97c057012e264736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/horizon/ignition/deployments/chain-421614/deployed_addresses.json b/packages/horizon/ignition/deployments/chain-421614/deployed_addresses.json new file mode 100644 index 000000000..28984fbe8 --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/deployed_addresses.json @@ -0,0 +1,41 @@ +{ + "BridgeEscrow#BridgeEscrow": "0xbC846a82491A4b6Ee5fd841c60923019d99F6D0c", + "Curation#Curation": "0x73A09b3A9C5531da3374A12a1282e40C3e2B7FA0", + "Curation#GraphCurationToken": "0xF1c0D12b4b4f6f0d66CE0A18A16876c9ca6D2E92", + "EpochManager#EpochManager": "0x039B22cEd4cDbF6Cd153F38ba7ae2731471e0542", + "GraphProxyAdmin#GraphProxyAdmin": "0x0eb1325d7F1a188D5914fddb8566aE513A28D0da", + "GraphToken#GraphToken": "0x21Ee267Efe20A7E846964D3f9E28F7e81d72547e", + "HorizonProxies#OZProxyDummy_GraphPayments": "0x60eE16fc2C4729343C7B3Ab9B322b2C6CcfbC681", + "HorizonStakingExtension#ExponentialRebates": "0x5Ab8e4eDb2d068C9c1ab9c96bfb3abCAb96e1534", + "RewardsManager#RewardsManager": "0xE7ed8F3e83a10a74CBfaDdC7596CBb79c4eccA17", + "Controller#Controller": "0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa", + "GraphTokenGateway#GraphTokenGateway": "0x2f3f6fbAD807800da2d1ABC9c949c45Bc1C81541", + "HorizonProxies#OZProxyDummy_PaymentsEscrow": "0xF39FD65373870fcb5868F7458d8d84485E5Bf890", + "HorizonProxies#TransparentUpgradeableProxy_GraphPayments": "0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f", + "HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow": "0x5904ab9c7806FCC7634F1DcDBec544eEa7490634", + "BridgeEscrow#GraphProxy": "0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79", + "Curation#GraphProxy": "0x4594A5915B3AAa78CdF6273a76678855Ca675860", + "GraphTokenGateway#GraphProxy": "0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D", + "RewardsManager#GraphProxy": "0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75", + "EpochManager#GraphProxy": "0x7975475801BEf845f10Ce7784DC69aB1e0344f11", + "GraphToken#GraphProxy": "0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702", + "BridgeEscrow#BridgeEscrow_Instance": "0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79", + "Curation#Curation_Instance": "0x4594A5915B3AAa78CdF6273a76678855Ca675860", + "EpochManager#EpochManager_Instance": "0x7975475801BEf845f10Ce7784DC69aB1e0344f11", + "GraphToken#GraphToken_Instance": "0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702", + "GraphTokenGateway#GraphTokenGateway_Instance": "0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D", + "HorizonProxies#ProxyAdmin_GraphPayments": "0xbb29b876AA2faCEb3af83d768CB03dd3BFF03f5e", + "HorizonProxies#ProxyAdmin_PaymentsEscrow": "0x6D892d831196E1Ad3779B97320b7091dE7d45053", + "RewardsManager#RewardsManager_Instance": "0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75", + "GraphHorizon_Periphery#Dummy": "0x3141000ae37361a525863D5cc4886799ed3FAFca", + "HorizonProxies#GraphProxy_HorizonStaking": "0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf", + "HorizonProxies#RegisteredDummy": "0xbDc6798b71a3B57fc79eF346d065de7477D3c366", + "GraphPayments#GraphPayments": "0xf5B3661BbB8CD48571C7f41ba2D896a3589C9753", + "GraphPayments#GraphPayments_Instance": "0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f", + "HorizonStakingExtension#HorizonStakingExtension": "0xf203161Ba7e25263deB79a4478BE18644C2c5446", + "PaymentsEscrow#PaymentsEscrow": "0x09B985a2042848A08bA59060EaF0f07c6F5D4d54", + "PaymentsEscrow#PaymentsEscrow_Instance": "0x5904ab9c7806FCC7634F1DcDBec544eEa7490634", + "TAPCollector#TAPCollector": "0xacC71844EF6beEF70106ABe6E51013189A1f3738", + "HorizonStaking#HorizonStaking": "0xFf2Ee30de92F276018642A59Fb7Be95b3F9088Af", + "HorizonStaking#HorizonStaking_Instance": "0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf" +} diff --git a/packages/horizon/ignition/deployments/chain-421614/journal.jsonl b/packages/horizon/ignition/deployments/chain-421614/journal.jsonl new file mode 100644 index 000000000..4a141ae3a --- /dev/null +++ b/packages/horizon/ignition/deployments/chain-421614/journal.jsonl @@ -0,0 +1,328 @@ + +{"chainId":421614,"type":"DEPLOYMENT_INITIALIZE"} +{"artifactId":"BridgeEscrow#BridgeEscrow","constructorArgs":[],"contractName":"BridgeEscrow","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"BridgeEscrow#BridgeEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"BridgeEscrow#BridgeEscrow","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220db5bf6ed6a6394146ce0c6f8770a20ad4f778d16c74558284981457141097a0964736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"BridgeEscrow#BridgeEscrow","networkInteractionId":1,"nonce":540,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x13d14bc11804dbf49f9614ddaf091128170eb3f476918525d3446c48cfac26f7"},"type":"TRANSACTION_SEND"} +{"futureId":"BridgeEscrow#BridgeEscrow","hash":"0x13d14bc11804dbf49f9614ddaf091128170eb3f476918525d3446c48cfac26f7","networkInteractionId":1,"receipt":{"blockHash":"0x4e6a2163bf85dcff071956d9f18d3946b741934e1b5fabbe19eb0827f306d0f6","blockNumber":82177277,"contractAddress":"0xbC846a82491A4b6Ee5fd841c60923019d99F6D0c","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"BridgeEscrow#BridgeEscrow","result":{"address":"0xbC846a82491A4b6Ee5fd841c60923019d99F6D0c","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"Controller#Controller","constructorArgs":[],"contractName":"Controller","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Controller#Controller","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506100243361003360201b6109b21760201c565b61002e6001610055565b6100e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff1615158115151415610075576100e4565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff910416156100a157426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a15b50565b610ba0806100f66000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80636cda3798116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80636cda3798146101ce57806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b806348bde20c116100de57806348bde20c146101795780634fc07d751461019f57806356371bd8146101a75780635c975abb146101c65761010b565b80630c340a241461011057806316c38b3c1461013457806324a3d622146101555780632e292fc71461015d575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b6101536004803603602081101561014a57600080fd5b503515156102c7565b005b610118610331565b610165610340565b604080519115158252519081900360200190f35b6101536004803603602081101561018f57600080fd5b50356001600160a01b0316610350565b61011861040c565b610153600480360360208110156101bd57600080fd5b5035151561041b565b610165610482565b6101d6610492565b60408051918252519081900360200190f35b610153610498565b6101536004803603602081101561020657600080fd5b50356105a6565b6101d6610651565b6101536004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b6101536004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b6101536004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b6000546001600160a01b03163314806102ea57506004546001600160a01b031633145b6103255760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103a8576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610403576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61032e81610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061043e57506004546001600160a01b031633145b6104795760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61032e81610ab7565b600154600160a81b900460ff1690565b60025481565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f45761032e565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad75761032e565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca2646970667358221220c742dbbf8f38fda928d26053c584788bb7d7b003131594b9e14f1381ebbdbb3064736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller","networkInteractionId":1,"nonce":541,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x22f6e912acc9d7888fadcb3b37c4989b24c418547984408f34feccaad11edaab"},"type":"TRANSACTION_SEND"} +{"artifactId":"Curation#Curation","constructorArgs":[],"contractName":"Curation","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Curation#Curation","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#Curation","networkInteraction":{"data":"0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220a1d7866b5729d907dd1710f966a8454930b048b6c785a4ad687a5e1b7a901ea164736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#Curation","networkInteractionId":1,"nonce":542,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8f68c53238685f6e265aa509796a8eb579bef8ffe53ff6e3b7bcf42f099bcbe3"},"type":"TRANSACTION_SEND"} +{"futureId":"Curation#Curation","hash":"0x8f68c53238685f6e265aa509796a8eb579bef8ffe53ff6e3b7bcf42f099bcbe3","networkInteractionId":1,"receipt":{"blockHash":"0x953c311a7d515cf400dc15d21805d69060e4861943ad7f473bc653a9595880b8","blockNumber":82177307,"contractAddress":"0x73A09b3A9C5531da3374A12a1282e40C3e2B7FA0","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#Curation","result":{"address":"0x73A09b3A9C5531da3374A12a1282e40C3e2B7FA0","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"Curation#GraphCurationToken","constructorArgs":[],"contractName":"GraphCurationToken","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Curation#GraphCurationToken","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#GraphCurationToken","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506114ec806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#GraphCurationToken","networkInteractionId":1,"nonce":543,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xb5b516edbce5e30c09e2733b297aa9249e2319643e15264a1267abf097540d2d"},"type":"TRANSACTION_SEND"} +{"futureId":"Curation#GraphCurationToken","hash":"0xb5b516edbce5e30c09e2733b297aa9249e2319643e15264a1267abf097540d2d","networkInteractionId":1,"receipt":{"blockHash":"0x9c76d371c53140ff322e94744093507c5b8e8a4b69dc92857f68f5bede691dc4","blockNumber":82177320,"contractAddress":"0xF1c0D12b4b4f6f0d66CE0A18A16876c9ca6D2E92","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#GraphCurationToken","result":{"address":"0xF1c0D12b4b4f6f0d66CE0A18A16876c9ca6D2E92","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"EpochManager#EpochManager","constructorArgs":[],"contractName":"EpochManager","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"EpochManager#EpochManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"EpochManager#EpochManager","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a264697066735822122047006a21e84412eeff168d7feb465a4b7993ba048471f600407dddbf9d425b4764736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"EpochManager#EpochManager","networkInteractionId":1,"nonce":544,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xdfd7ab6b622201f1fdc28ee9efe48e408474e67f4cdc9b851750816ccb8fdc48"},"type":"TRANSACTION_SEND"} +{"futureId":"EpochManager#EpochManager","hash":"0xdfd7ab6b622201f1fdc28ee9efe48e408474e67f4cdc9b851750816ccb8fdc48","networkInteractionId":1,"receipt":{"blockHash":"0x4ed62d906394e8babe15813de784b6b9a645a8ddc7d59d0b4b937bacb8faee5b","blockNumber":82177335,"contractAddress":"0x039B22cEd4cDbF6Cd153F38ba7ae2731471e0542","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"EpochManager#EpochManager","result":{"address":"0x039B22cEd4cDbF6Cd153F38ba7ae2731471e0542","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphProxyAdmin#GraphProxyAdmin","constructorArgs":[],"contractName":"GraphProxyAdmin","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphProxyAdmin#GraphProxyAdmin","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506100243361002960201b610a0c1760201c565b61004b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610a648061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","networkInteractionId":1,"nonce":545,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x22a237b3b519d594d6d2f4c18440328ecc586f6eaba8f98cf74236d49679f6e2"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","hash":"0x22a237b3b519d594d6d2f4c18440328ecc586f6eaba8f98cf74236d49679f6e2","networkInteractionId":1,"receipt":{"blockHash":"0x598b54b384d008d77e508bfc62782ae2b6719ad7bd5a8cd1095da17ff079e2ce","blockNumber":82177351,"contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","result":{"address":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphToken#GraphToken","constructorArgs":[],"contractName":"GraphToken","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphToken#GraphToken","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken","networkInteraction":{"data":"0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken","networkInteractionId":1,"nonce":546,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"217400000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x00f6557a96a5ae41f6adec963655d4755afe277f26c9fe32135cde7765a81f65"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphToken#GraphToken","hash":"0x00f6557a96a5ae41f6adec963655d4755afe277f26c9fe32135cde7765a81f65","networkInteractionId":1,"receipt":{"blockHash":"0x088309bc6623f9e99cfd3785c785e61b0232ea8b254ece414d75a207ef8ce060","blockNumber":82177368,"contractAddress":"0x21Ee267Efe20A7E846964D3f9E28F7e81d72547e","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken","result":{"address":"0x21Ee267Efe20A7E846964D3f9E28F7e81d72547e","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphTokenGateway#GraphTokenGateway","constructorArgs":[],"contractName":"GraphTokenGateway","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphTokenGateway#GraphTokenGateway","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphTokenGateway","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b80634adc698a116101085780634adc698a146101e55780635c975abb146101fa57806369bc8cd41461021c5780636cda37981461023c5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec11461014557806316c38b3c1461016757806324a3d622146101875780632e567b36146101b257806348bde20c146101c5575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b50610165610182366004611da9565b610474565b34801561019357600080fd5b5061019c61056c565b6040516101a99190611e67565b60405180910390f35b6101656101c0366004611bb4565b61057b565b3480156101d157600080fd5b506101656101e0366004611b43565b6107b3565b3480156101f157600080fd5b5061019c61081f565b34801561020657600080fd5b5061020f61082e565b6040516101a99190611f43565b34801561022857600080fd5b50610165610237366004611b43565b61083c565b34801561024857600080fd5b506102516108b5565b6040516101a991906121a9565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101a99190611f4e565b34801561029757600080fd5b506102516108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b5061019c61033b366004611b43565b610bdf565b34801561034c57600080fd5b5061019c610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b5061019c611155565b3480156103de57600080fd5b5061019c611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d60208110156104e057600080fd5b50516001600160a01b031633148061050257506003546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105605761056061123d565b610569816112b5565b50565b6003546001600160a01b031681565b600260435414156105d3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e0611340565b6076546105f5906001600160a01b0316611391565b6001600160a01b0316336001600160a01b0316146106255760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106525760405162461bcd60e51b81526004016104159061214b565b34156106705760405162461bcd60e51b815260040161041590611fdd565b607554610685906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b2929190611ee2565b600060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505082159150610751905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed369061071e908890879087908790600401611efb565b600060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb28660405161079e91906121a9565b60405180910390a45050600160435550505050565b6107bb611173565b6001600160a01b038116610816576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b610569816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b610844611173565b6001600160a01b03811661086a5760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60015481565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b6105698161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d557610569565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b8015610569576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b60016043558015610569576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056957600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c46e838e84462780e008baa7cf28f077541133c7ed1702897fcb4896090a74b664736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphTokenGateway","networkInteractionId":1,"nonce":547,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"210780000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x6aa66e37bdd03eb8836ed26d2a842176829960acf04a874f046cab24afef832e"},"type":"TRANSACTION_SEND"} +{"artifactId":"HorizonProxies#OZProxyDummy_GraphPayments","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#OZProxyDummy_GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","networkInteractionId":1,"nonce":548,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"205960000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x2eb7594c75c7ff384ca16ebc397a76e273105b68085c08a6a2c387d46daca53f"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","hash":"0x2eb7594c75c7ff384ca16ebc397a76e273105b68085c08a6a2c387d46daca53f","networkInteractionId":1,"receipt":{"blockHash":"0xf0aa59865bc193adaf0dedbe871db594d0bcbf26d6d8f11fd4d56ed6b1e2cfe2","blockNumber":82177398,"contractAddress":"0x60eE16fc2C4729343C7B3Ab9B322b2C6CcfbC681","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","result":{"address":"0x60eE16fc2C4729343C7B3Ab9B322b2C6CcfbC681","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","networkInteractionId":1,"nonce":549,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"207060000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x9c845a67136d4e880d16a43ed03ef667077148a3b543613c7c4c0db6808ca10b"},"type":"TRANSACTION_SEND"} +{"artifactId":"HorizonStakingExtension#ExponentialRebates","constructorArgs":[],"contractName":"ExponentialRebates","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonStakingExtension#ExponentialRebates","futureType":"LIBRARY_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStakingExtension#ExponentialRebates","networkInteraction":{"data":"0x610c2d610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStakingExtension#ExponentialRebates","networkInteractionId":1,"nonce":550,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"215140000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xbb35e8b121d2a979dff148e7e9bad2860880ca8532c9eeea02b3dc7b98c9152c"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStakingExtension#ExponentialRebates","hash":"0xbb35e8b121d2a979dff148e7e9bad2860880ca8532c9eeea02b3dc7b98c9152c","networkInteractionId":1,"receipt":{"blockHash":"0x55cb8a0a9b4deecfb10db48511b1c625831831e917eb5dc2aca575e508baa5ae","blockNumber":82177430,"contractAddress":"0x5Ab8e4eDb2d068C9c1ab9c96bfb3abCAb96e1534","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStakingExtension#ExponentialRebates","result":{"address":"0x5Ab8e4eDb2d068C9c1ab9c96bfb3abCAb96e1534","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"RewardsManager#RewardsManager","constructorArgs":[],"contractName":"RewardsManager","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"RewardsManager#RewardsManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122065ddb3a88a231d6b2a7b9fa381d5dcb967f78c91305d391f4715ef7d2c04ab4764736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager","networkInteractionId":1,"nonce":551,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"221200000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xdb2ae2bd7ac518f58197eb2cb834add2982f44ec501652d7f91d14d2eb81b8c1"},"type":"TRANSACTION_SEND"} +{"futureId":"RewardsManager#RewardsManager","hash":"0xdb2ae2bd7ac518f58197eb2cb834add2982f44ec501652d7f91d14d2eb81b8c1","networkInteractionId":1,"receipt":{"blockHash":"0xac102f4a39375b63fbd580c45c6f05f8b6e2dcdbf1a6da09221688f7ba352b1a","blockNumber":82177446,"contractAddress":"0xE7ed8F3e83a10a74CBfaDdC7596CBb79c4eccA17","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager","result":{"address":"0xE7ed8F3e83a10a74CBfaDdC7596CBb79c4eccA17","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"Controller#Controller","hash":"0x22f6e912acc9d7888fadcb3b37c4989b24c418547984408f34feccaad11edaab","networkInteractionId":1,"receipt":{"blockHash":"0xa996896b33b1bca181707ccde90c8a26fbc03834c56ac7cf50750e55d2df256f","blockNumber":82177294,"contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":0,"topics":["0x8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller","result":{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphTokenGateway#GraphTokenGateway","hash":"0x6aa66e37bdd03eb8836ed26d2a842176829960acf04a874f046cab24afef832e","networkInteractionId":1,"receipt":{"blockHash":"0x93aaf290de7cae94b0fc57e22f469dffbd123951fed875ea89980819f2ed1164","blockNumber":82177383,"contractAddress":"0x2f3f6fbAD807800da2d1ABC9c949c45Bc1C81541","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphTokenGateway","result":{"address":"0x2f3f6fbAD807800da2d1ABC9c949c45Bc1C81541","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","hash":"0x9c845a67136d4e880d16a43ed03ef667077148a3b543613c7c4c0db6808ca10b","networkInteractionId":1,"receipt":{"blockHash":"0xa8e51d3cec86d0a8e35e739cafa1b01be1f42ad1766275f6ccba608ab1bbfde5","blockNumber":82177414,"contractAddress":"0xF39FD65373870fcb5868F7458d8d84485E5Bf890","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","result":{"address":"0xF39FD65373870fcb5868F7458d8d84485E5Bf890","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setPauseGuardian","futureId":"Controller#Controller.setPauseGuardian","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller.setPauseGuardian","networkInteraction":{"data":"0x48bde20c00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller.setPauseGuardian","networkInteractionId":1,"nonce":552,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"222360000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x926847427742ab0047f7056be7cae6a83e0f6fc537fb430bc50cdc719059f776"},"type":"TRANSACTION_SEND"} +{"futureId":"Controller#Controller.setPauseGuardian","hash":"0x926847427742ab0047f7056be7cae6a83e0f6fc537fb430bc50cdc719059f776","networkInteractionId":1,"receipt":{"blockHash":"0xb0f86a559682a45f56cb41041d8f932d3cdc905196d94ffe5407c5154c8d51c1","blockNumber":82177476,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x","logIndex":1,"topics":["0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller.setPauseGuardian","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"transferOwnership","futureId":"Controller#Controller.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller.transferOwnership","networkInteractionId":1,"nonce":553,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"217900000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8973c2ac20958068d8292af8587c979c3d504a55fb0165f835cac502918824ed"},"type":"TRANSACTION_SEND"} +{"futureId":"Controller#Controller.transferOwnership","hash":"0x8973c2ac20958068d8292af8587c979c3d504a55fb0165f835cac502918824ed","networkInteractionId":1,"receipt":{"blockHash":"0xd2308faec84b43992fc7ac43c75929ea587f9ed63dca3357d2685e11ec8f0c62","blockNumber":82177492,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x","logIndex":0,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","dependencies":["GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"transferOwnership","futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","networkInteractionId":1,"nonce":554,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"211820000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x94ba70c3305da1c2850e0fd0482ca86d033f91a6f82272a3fa8d7c03b1a19702"},"type":"TRANSACTION_SEND"} +{"args":["0xade6b8eb69a49b56929c1d4f4b428d791861db6f"],"artifactId":"GraphToken#GraphToken","dependencies":["GraphToken#GraphToken"],"functionName":"initialize","futureId":"GraphToken#encodeFunctionCall(GraphToken#GraphToken.initialize)","result":"0xc4d66de8000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","constructorArgs":["0x60eE16fc2C4729343C7B3Ab9B322b2C6CcfbC681","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["HorizonProxies#OZProxyDummy_GraphPayments"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000060ee16fc2c4729343c7b3ab9b322b2c6ccfbc681000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","networkInteractionId":1,"nonce":555,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"203040000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xab7001383d7cf18ec79633ba203778308bfe93999fcf5c33f100ea1eb728ffaa"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","hash":"0xab7001383d7cf18ec79633ba203778308bfe93999fcf5c33f100ea1eb728ffaa","networkInteractionId":1,"receipt":{"blockHash":"0x72df9ece6fcad9f332fc3a794990a9932c1e00ccf422e6d319961366c0383495","blockNumber":82177523,"contractAddress":"0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f","logs":[{"address":"0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f","data":"0x","logIndex":3,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x00000000000000000000000060ee16fc2c4729343c7b3ab9b322b2c6ccfbc681"]},{"address":"0xbb29b876AA2faCEb3af83d768CB03dd3BFF03f5e","data":"0x","logIndex":4,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb29b876aa2faceb3af83d768cb03dd3bff03f5e","logIndex":5,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","result":{"address":"0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","constructorArgs":["0xF39FD65373870fcb5868F7458d8d84485E5Bf890","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["HorizonProxies#OZProxyDummy_PaymentsEscrow"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000f39fd65373870fcb5868f7458d8d84485e5bf890000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","networkInteractionId":1,"nonce":556,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x4e06072395cbaa97b5684e02e90db9a90d627f28c7fba7bbc29395a6937ba71b"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","hash":"0x4e06072395cbaa97b5684e02e90db9a90d627f28c7fba7bbc29395a6937ba71b","networkInteractionId":1,"receipt":{"blockHash":"0xa7df78ebf3a95f01465193fabeb7cb5ef3c8a96b3f87bfc6e95f422b1e0a53cc","blockNumber":82177538,"contractAddress":"0x5904ab9c7806FCC7634F1DcDBec544eEa7490634","logs":[{"address":"0x5904ab9c7806FCC7634F1DcDBec544eEa7490634","data":"0x","logIndex":1,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000f39fd65373870fcb5868f7458d8d84485e5bf890"]},{"address":"0x6D892d831196E1Ad3779B97320b7091dE7d45053","data":"0x","logIndex":2,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0x5904ab9c7806FCC7634F1DcDBec544eEa7490634","data":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d892d831196e1ad3779b97320b7091de7d45053","logIndex":3,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","result":{"address":"0x5904ab9c7806FCC7634F1DcDBec544eEa7490634","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","hash":"0x94ba70c3305da1c2850e0fd0482ca86d033f91a6f82272a3fa8d7c03b1a19702","networkInteractionId":1,"receipt":{"blockHash":"0x409a8676bb58a489dc722e9d4c5b33c8fb4f06cad2eec0a2e4f31013d1d32c2e","blockNumber":82177508,"logs":[{"address":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","data":"0x","logIndex":2,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"BridgeEscrow#GraphProxy","constructorArgs":["0xbC846a82491A4b6Ee5fd841c60923019d99F6D0c","0x0eb1325d7F1a188D5914fddb8566aE513A28D0da"],"contractName":"GraphProxy","dependencies":["BridgeEscrow#BridgeEscrow","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"BridgeEscrow#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"BridgeEscrow#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000bc846a82491a4b6ee5fd841c60923019d99f6d0c0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"BridgeEscrow#GraphProxy","networkInteractionId":1,"nonce":557,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x6765e678edba8a194b3a5bc9fd849f45c11514154f7de24b9bf9c6d059478e35"},"type":"TRANSACTION_SEND"} +{"futureId":"BridgeEscrow#GraphProxy","hash":"0x6765e678edba8a194b3a5bc9fd849f45c11514154f7de24b9bf9c6d059478e35","networkInteractionId":1,"receipt":{"blockHash":"0xe5472a7a4abb34f9705684195f85064132ff47f6302a612573a002391ecaf5ad","blockNumber":82177562,"contractAddress":"0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79","logs":[{"address":"0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79","data":"0x","logIndex":2,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da"]},{"address":"0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79","data":"0x","logIndex":3,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000bc846a82491a4b6ee5fd841c60923019d99f6d0c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"BridgeEscrow#GraphProxy","result":{"address":"0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa"],"artifactId":"BridgeEscrow#BridgeEscrow","dependencies":["BridgeEscrow#BridgeEscrow","Controller#Controller"],"functionName":"initialize","futureId":"BridgeEscrow#encodeFunctionCall(BridgeEscrow#BridgeEscrow.initialize)","result":"0xc4d66de80000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"Curation#GraphProxy","constructorArgs":["0x73A09b3A9C5531da3374A12a1282e40C3e2B7FA0","0x0eb1325d7F1a188D5914fddb8566aE513A28D0da"],"contractName":"GraphProxy","dependencies":["Curation#Curation","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Curation#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c00000000000000000000000073a09b3a9c5531da3374a12a1282e40c3e2b7fa00000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#GraphProxy","networkInteractionId":1,"nonce":558,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc21dba5ebc3a1b84d0e6c979e0ee3f372c87f440355fcba23e7fd115870efada"},"type":"TRANSACTION_SEND"} +{"futureId":"Curation#GraphProxy","hash":"0xc21dba5ebc3a1b84d0e6c979e0ee3f372c87f440355fcba23e7fd115870efada","networkInteractionId":1,"receipt":{"blockHash":"0x52ed4a28b2c5b4bbc55bdc895f6409ab482ec27707afb17705c82435560e8301","blockNumber":82177577,"contractAddress":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","logs":[{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","data":"0x","logIndex":3,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da"]},{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","data":"0x","logIndex":4,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000073a09b3a9c5531da3374a12a1282e40c3e2b7fa0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#GraphProxy","result":{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","0xF1c0D12b4b4f6f0d66CE0A18A16876c9ca6D2E92",10000,1],"artifactId":"Curation#Curation","dependencies":["Curation#Curation","Controller#Controller","Curation#GraphCurationToken"],"functionName":"initialize","futureId":"Curation#encodeFunctionCall(Curation#Curation.initialize)","result":"0x4c8c7a440000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca000000000000000000000000f1c0d12b4b4f6f0d66ce0a18a16876c9ca6d2e9200000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"EpochManager#GraphProxy","constructorArgs":["0x039B22cEd4cDbF6Cd153F38ba7ae2731471e0542","0x0eb1325d7F1a188D5914fddb8566aE513A28D0da"],"contractName":"GraphProxy","dependencies":["EpochManager#EpochManager","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"EpochManager#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"EpochManager#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000039b22ced4cdbf6cd153f38ba7ae2731471e05420000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"EpochManager#GraphProxy","networkInteractionId":1,"nonce":559,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x6dc94e70324af84c4dc6148706d1bede53bef42d83fb701ebbd9149b4f26c666"},"type":"TRANSACTION_SEND"} +{"args":["0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa",60],"artifactId":"EpochManager#EpochManager","dependencies":["EpochManager#EpochManager","Controller#Controller"],"functionName":"initialize","futureId":"EpochManager#encodeFunctionCall(EpochManager#EpochManager.initialize)","result":"0xcd6dc6870000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca000000000000000000000000000000000000000000000000000000000000003c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"args":["0xed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb","0x0eb1325d7F1a188D5914fddb8566aE513A28D0da"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","networkInteraction":{"data":"0xe0e99292ed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","networkInteractionId":1,"nonce":560,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf45d81ed330840d6970a16933babea25a5af19dbeee69108dc986f7158d93356"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","hash":"0xf45d81ed330840d6970a16933babea25a5af19dbeee69108dc986f7158d93356","networkInteractionId":1,"receipt":{"blockHash":"0xc00e89b3c2298ee25569d2a9c2418bacf011a87ce00ac95f67322b27ef792f43","blockNumber":82177607,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da","logIndex":3,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphToken#GraphProxy","constructorArgs":["0x21Ee267Efe20A7E846964D3f9E28F7e81d72547e","0x0eb1325d7F1a188D5914fddb8566aE513A28D0da"],"contractName":"GraphProxy","dependencies":["GraphToken#GraphToken","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphToken#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c00000000000000000000000021ee267efe20a7e846964d3f9e28f7e81d72547e0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphProxy","networkInteractionId":1,"nonce":561,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8b106356a522f264deb4e9bf75f3f7f97fb484f8a9c9e915a591431fcdf13e56"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphTokenGateway#GraphProxy","constructorArgs":["0x2f3f6fbAD807800da2d1ABC9c949c45Bc1C81541","0x0eb1325d7F1a188D5914fddb8566aE513A28D0da"],"contractName":"GraphProxy","dependencies":["GraphTokenGateway#GraphTokenGateway","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphTokenGateway#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000002f3f6fbad807800da2d1abc9c949c45bc1c815410000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphProxy","networkInteractionId":1,"nonce":562,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x5dd8bf388f54a96838f1232e96a415f458b5a58ca729ce127e449de332ccbf8b"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphTokenGateway#GraphProxy","hash":"0x5dd8bf388f54a96838f1232e96a415f458b5a58ca729ce127e449de332ccbf8b","networkInteractionId":1,"receipt":{"blockHash":"0x5e42be7c912fa1eaf370a9e33204494538ec7c81f21eac861fb58673aba983bf","blockNumber":82177637,"contractAddress":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","logs":[{"address":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","data":"0x","logIndex":5,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da"]},{"address":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","data":"0x","logIndex":6,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000002f3f6fbad807800da2d1abc9c949c45bc1c81541"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphProxy","result":{"address":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa"],"artifactId":"GraphTokenGateway#GraphTokenGateway","dependencies":["GraphTokenGateway#GraphTokenGateway","Controller#Controller"],"functionName":"initialize","futureId":"GraphTokenGateway#encodeFunctionCall(GraphTokenGateway#GraphTokenGateway.initialize)","result":"0xc4d66de80000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"emitterAddress":"0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f","eventIndex":0,"eventName":"AdminChanged","futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments_AdminChanged","nameOrIndex":"newAdmin","result":"0xbb29b876AA2faCEb3af83d768CB03dd3BFF03f5e","strategy":"basic","strategyConfig":{},"txToReadFrom":"0xab7001383d7cf18ec79633ba203778308bfe93999fcf5c33f100ea1eb728ffaa","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"emitterAddress":"0x5904ab9c7806FCC7634F1DcDBec544eEa7490634","eventIndex":0,"eventName":"AdminChanged","futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow_AdminChanged","nameOrIndex":"newAdmin","result":"0x6D892d831196E1Ad3779B97320b7091dE7d45053","strategy":"basic","strategyConfig":{},"txToReadFrom":"0x4e06072395cbaa97b5684e02e90db9a90d627f28c7fba7bbc29395a6937ba71b","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f","0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller","HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_GraphPayments","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","networkInteraction":{"data":"0xe0e9929288cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f000000000000000000000000c2d72de802dedc8a539f7fd9ff39ad1aa89f7b3f","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","networkInteractionId":1,"nonce":563,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x9eb2502dab3d648c850fabd89bc1c3486fa63cbcae80944cb5db77c88bca3a63"},"type":"TRANSACTION_SEND"} +{"args":["0x628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9","0x5904ab9c7806FCC7634F1DcDBec544eEa7490634"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller","HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","networkInteraction":{"data":"0xe0e99292628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc90000000000000000000000005904ab9c7806fcc7634f1dcdbec544eea7490634","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","networkInteractionId":1,"nonce":564,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xaba39186fa8a30518e066c00ccd1eb3e0c2997d551988a7e530772c6c689cca1"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","hash":"0xaba39186fa8a30518e066c00ccd1eb3e0c2997d551988a7e530772c6c689cca1","networkInteractionId":1,"receipt":{"blockHash":"0x169f5fddc08f24923f0f20d168c3764088c670f6037890d2770633db034be2db","blockNumber":82177667,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x0000000000000000000000005904ab9c7806fcc7634f1dcdbec544eea7490634","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"RewardsManager#GraphProxy","constructorArgs":["0xE7ed8F3e83a10a74CBfaDdC7596CBb79c4eccA17","0x0eb1325d7F1a188D5914fddb8566aE513A28D0da"],"contractName":"GraphProxy","dependencies":["RewardsManager#RewardsManager","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"RewardsManager#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000e7ed8f3e83a10a74cbfaddc7596cbb79c4ecca170000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#GraphProxy","networkInteractionId":1,"nonce":565,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x20d17ae698896b0c0701926e86765b8b0c3e0c0d135d955f225a48d89132404a"},"type":"TRANSACTION_SEND"} +{"futureId":"RewardsManager#GraphProxy","hash":"0x20d17ae698896b0c0701926e86765b8b0c3e0c0d135d955f225a48d89132404a","networkInteractionId":1,"receipt":{"blockHash":"0x91fde94090b56e22f4c697c17da9743e4725a227d0466217005e12085cf699f9","blockNumber":82177682,"contractAddress":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","logs":[{"address":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da"]},{"address":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000e7ed8f3e83a10a74cbfaddc7596cbb79c4ecca17"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#GraphProxy","result":{"address":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa"],"artifactId":"RewardsManager#RewardsManager","dependencies":["RewardsManager#RewardsManager","Controller#Controller"],"functionName":"initialize","futureId":"RewardsManager#encodeFunctionCall(RewardsManager#RewardsManager.initialize)","result":"0xc4d66de80000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"futureId":"EpochManager#GraphProxy","hash":"0x6dc94e70324af84c4dc6148706d1bede53bef42d83fb701ebbd9149b4f26c666","networkInteractionId":1,"receipt":{"blockHash":"0xe9ddf67223f99e54a8f0a3b098e73dbe71fb3286da27272e3caa0bdb8b4eb76d","blockNumber":82177592,"contractAddress":"0x7975475801BEf845f10Ce7784DC69aB1e0344f11","logs":[{"address":"0x7975475801BEf845f10Ce7784DC69aB1e0344f11","data":"0x","logIndex":4,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da"]},{"address":"0x7975475801BEf845f10Ce7784DC69aB1e0344f11","data":"0x","logIndex":5,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000039b22ced4cdbf6cd153f38ba7ae2731471e0542"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"EpochManager#GraphProxy","result":{"address":"0x7975475801BEf845f10Ce7784DC69aB1e0344f11","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphProxy","hash":"0x8b106356a522f264deb4e9bf75f3f7f97fb484f8a9c9e915a591431fcdf13e56","networkInteractionId":1,"receipt":{"blockHash":"0x4c712f556a39a58da8fe9da1d73666c45b9e98e876700dedfba09801341cb67e","blockNumber":82177622,"contractAddress":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","logs":[{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x","logIndex":11,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da"]},{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x","logIndex":12,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000021ee267efe20a7e846964d3f9e28f7e81d72547e"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphProxy","result":{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","hash":"0x9eb2502dab3d648c850fabd89bc1c3486fa63cbcae80944cb5db77c88bca3a63","networkInteractionId":1,"receipt":{"blockHash":"0x377b496e138ad2f34a156ee77243204bcb6a14392f056a80c158538b49ac07a1","blockNumber":82177652,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x000000000000000000000000c2d72de802dedc8a539f7fd9ff39ad1aa89f7b3f","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"BridgeEscrow#BridgeEscrow_Instance","contractAddress":"0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79","contractName":"BridgeEscrow_Instance","dependencies":["BridgeEscrow#GraphProxy"],"futureId":"BridgeEscrow#BridgeEscrow_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0xbC846a82491A4b6Ee5fd841c60923019d99F6D0c","0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79","0xc4d66de80000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","dependencies":["GraphProxyAdmin#GraphProxyAdmin","BridgeEscrow#BridgeEscrow","BridgeEscrow#GraphProxy","BridgeEscrow#encodeFunctionCall(BridgeEscrow#BridgeEscrow.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000bc846a82491a4b6ee5fd841c60923019d99f6d0c000000000000000000000000d7c55208d82ea44386cbae9f64d6af60c6feea7900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":566,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x41e5f6ad996a801d1c91ce36afc151d525ee20003f423b66594a1a27d32b30b2"},"type":"TRANSACTION_SEND"} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x41e5f6ad996a801d1c91ce36afc151d525ee20003f423b66594a1a27d32b30b2","networkInteractionId":1,"receipt":{"blockHash":"0x6cd9a697e1ca8b0bdb978ae12806456e3b8950db7acfdef8a5ca2b5669cc743b","blockNumber":82177710,"logs":[{"address":"0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79","data":"0x","logIndex":3,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000bc846a82491a4b6ee5fd841c60923019d99f6d0c"]},{"address":"0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79","data":"0x","logIndex":4,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000bc846a82491a4b6ee5fd841c60923019d99f6d0c","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xd7c55208D82ea44386CbaE9f64D6af60c6Feea79","data":"0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca","logIndex":5,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"Curation#Curation_Instance","contractAddress":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","contractName":"Curation_Instance","dependencies":["Curation#GraphProxy"],"futureId":"Curation#Curation_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x73A09b3A9C5531da3374A12a1282e40C3e2B7FA0","0x4594A5915B3AAa78CdF6273a76678855Ca675860","0x4c8c7a440000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca000000000000000000000000f1c0d12b4b4f6f0d66ce0a18a16876c9ca6d2e9200000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","dependencies":["GraphProxyAdmin#GraphProxyAdmin","Curation#Curation","Curation#GraphProxy","Curation#encodeFunctionCall(Curation#Curation.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e00000000000000000000000073a09b3a9c5531da3374a12a1282e40c3e2b7fa00000000000000000000000004594a5915b3aaa78cdf6273a76678855ca675860000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000844c8c7a440000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca000000000000000000000000f1c0d12b4b4f6f0d66ce0a18a16876c9ca6d2e920000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000","id":1,"to":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":567,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x83fabf287402d1e1d759e417928c911c3253f4d8d64e4af799229026902fcd37"},"type":"TRANSACTION_SEND"} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x83fabf287402d1e1d759e417928c911c3253f4d8d64e4af799229026902fcd37","networkInteractionId":1,"receipt":{"blockHash":"0xb966d585029d67d6d0e7dec84cd1fbfaca6be4335327b24e3a787066b3a58016","blockNumber":82177726,"logs":[{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","data":"0x","logIndex":6,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000073a09b3a9c5531da3374a12a1282e40c3e2b7fa0"]},{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","data":"0x","logIndex":7,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x00000000000000000000000073a09b3a9c5531da3374a12a1282e40c3e2b7fa0","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","data":"0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca","logIndex":8,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]},{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001364656661756c7452657365727665526174696f00000000000000000000000000","logIndex":9,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000156375726174696f6e54617850657263656e746167650000000000000000000000","logIndex":10,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000166d696e696d756d4375726174696f6e4465706f73697400000000000000000000","logIndex":11,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0x4594A5915B3AAa78CdF6273a76678855Ca675860","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000136375726174696f6e546f6b656e4d617374657200000000000000000000000000","logIndex":12,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"EpochManager#EpochManager_Instance","contractAddress":"0x7975475801BEf845f10Ce7784DC69aB1e0344f11","contractName":"EpochManager_Instance","dependencies":["EpochManager#GraphProxy"],"futureId":"EpochManager#EpochManager_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x039B22cEd4cDbF6Cd153F38ba7ae2731471e0542","0x7975475801BEf845f10Ce7784DC69aB1e0344f11","0xcd6dc6870000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca000000000000000000000000000000000000000000000000000000000000003c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","dependencies":["GraphProxyAdmin#GraphProxyAdmin","EpochManager#EpochManager","EpochManager#GraphProxy","EpochManager#encodeFunctionCall(EpochManager#EpochManager.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000039b22ced4cdbf6cd153f38ba7ae2731471e05420000000000000000000000007975475801bef845f10ce7784dc69ab1e0344f1100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044cd6dc6870000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":568,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x143b4fe4bb79b41128ec9ab5541f3df8378b33ff00092740a8e8be83101e0862"},"type":"TRANSACTION_SEND"} +{"args":["0x21Ee267Efe20A7E846964D3f9E28F7e81d72547e","0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","0xc4d66de8000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphToken#GraphToken","GraphToken#GraphProxy","GraphToken#encodeFunctionCall(GraphToken#GraphToken.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e00000000000000000000000021ee267efe20a7e846964d3f9e28f7e81d72547e0000000000000000000000001a1af8b44fd59dd2bbeb456d1b7604c7bd34070200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":569,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xbd3ff6dc735aa70e940251a37bc52d1ad0e19b308a62bea4f371d5f8e2339f6e"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xbd3ff6dc735aa70e940251a37bc52d1ad0e19b308a62bea4f371d5f8e2339f6e","networkInteractionId":1,"receipt":{"blockHash":"0x19be0cd6a1bdb4f878577b5be434af6b01ad9c86253aa1f147ff5dc5d91d3635","blockNumber":82177756,"logs":[{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x","logIndex":1,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000021ee267efe20a7e846964d3f9e28f7e81d72547e"]},{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x","logIndex":2,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x00000000000000000000000021ee267efe20a7e846964d3f9e28f7e81d72547e","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x0000000000000000000000000000000000000000000000000000000000000000","logIndex":3,"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x","logIndex":4,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","contractName":"GraphToken_Instance","dependencies":["GraphToken#GraphProxy"],"futureId":"GraphToken#GraphToken_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x2f3f6fbAD807800da2d1ABC9c949c45Bc1C81541","0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","0xc4d66de80000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphTokenGateway#GraphTokenGateway","GraphTokenGateway#GraphProxy","GraphTokenGateway#encodeFunctionCall(GraphTokenGateway#GraphTokenGateway.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000002f3f6fbad807800da2d1abc9c949c45bc1c81541000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":570,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x1ad6220ccafc61a75a5666e6208851932c8d7e32dc22bcf149ac4c93abc3955a"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x1ad6220ccafc61a75a5666e6208851932c8d7e32dc22bcf149ac4c93abc3955a","networkInteractionId":1,"receipt":{"blockHash":"0x8255289694c31481a4d2f970b3fd8bd447e0e47f0d474f3a7b032b69fbdcb2d0","blockNumber":82177770,"logs":[{"address":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000002f3f6fbad807800da2d1abc9c949c45bc1c81541"]},{"address":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000002f3f6fbad807800da2d1abc9c949c45bc1c81541","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","data":"0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphTokenGateway#GraphTokenGateway_Instance","contractAddress":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","contractName":"GraphTokenGateway_Instance","dependencies":["GraphTokenGateway#GraphProxy"],"futureId":"GraphTokenGateway#GraphTokenGateway_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#ProxyAdmin_GraphPayments","contractAddress":"0xbb29b876AA2faCEb3af83d768CB03dd3BFF03f5e","contractName":"ProxyAdmin","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments_AdminChanged"],"futureId":"HorizonProxies#ProxyAdmin_GraphPayments","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","contractAddress":"0x6D892d831196E1Ad3779B97320b7091dE7d45053","contractName":"ProxyAdmin","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow_AdminChanged"],"futureId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0xE7ed8F3e83a10a74CBfaDdC7596CBb79c4eccA17","0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","0xc4d66de80000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","dependencies":["GraphProxyAdmin#GraphProxyAdmin","RewardsManager#RewardsManager","RewardsManager#GraphProxy","RewardsManager#encodeFunctionCall(RewardsManager#RewardsManager.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000e7ed8f3e83a10a74cbfaddc7596cbb79c4ecca17000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe7500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de80000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":571,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x3b2196e0f3f04807ac248fce393cc53b39e7cd015239e5ec583dfe4c21906a2c"},"type":"TRANSACTION_SEND"} +{"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","contractName":"RewardsManager_Instance","dependencies":["RewardsManager#GraphProxy"],"futureId":"RewardsManager#RewardsManager_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x143b4fe4bb79b41128ec9ab5541f3df8378b33ff00092740a8e8be83101e0862","networkInteractionId":1,"receipt":{"blockHash":"0x73d11df25f3b7d0afc5824cf20d631705ce1dc3e84859dcda3439d9d92996599","blockNumber":82177741,"logs":[{"address":"0x7975475801BEf845f10Ce7784DC69aB1e0344f11","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000039b22ced4cdbf6cd153f38ba7ae2731471e0542"]},{"address":"0x7975475801BEf845f10Ce7784DC69aB1e0344f11","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000039b22ced4cdbf6cd153f38ba7ae2731471e0542","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x7975475801BEf845f10Ce7784DC69aB1e0344f11","data":"0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]},{"address":"0x7975475801BEf845f10Ce7784DC69aB1e0344f11","data":"0x000000000000000000000000000000000000000000000000000000000000003c","logIndex":3,"topics":["0x25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce2441","0x0000000000000000000000000000000000000000000000000000000000000001"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x3b2196e0f3f04807ac248fce393cc53b39e7cd015239e5ec583dfe4c21906a2c","networkInteractionId":1,"receipt":{"blockHash":"0xea47da320ac27f7f45979aad62300a2b9cb8250a272fd16d7a766e8c1d3d8049","blockNumber":82177785,"logs":[{"address":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000e7ed8f3e83a10a74cbfaddc7596cbb79c4ecca17"]},{"address":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000e7ed8f3e83a10a74cbfaddc7596cbb79c4ecca17","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","data":"0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f","0x4594A5915B3AAa78CdF6273a76678855Ca675860"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller","Curation#Curation_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_Curation","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","networkInteraction":{"data":"0xe0e99292e6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f0000000000000000000000004594a5915b3aaa78cdf6273a76678855ca675860","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","networkInteractionId":1,"nonce":572,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xa5a9c473d42a65567e4fd38a90e0b5c15512ba417f1c4bffc4f28341f96c3e7f"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","hash":"0xa5a9c473d42a65567e4fd38a90e0b5c15512ba417f1c4bffc4f28341f96c3e7f","networkInteractionId":1,"receipt":{"blockHash":"0xdbc65ab325b085e410ad877403fdbcb21395a1bcf9ab8cd017143c23715c9c0c","blockNumber":82177811,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x0000000000000000000000004594a5915b3aaa78cdf6273a76678855ca675860","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063","0x7975475801BEf845f10Ce7784DC69aB1e0344f11"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller","EpochManager#EpochManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","networkInteraction":{"data":"0xe0e99292c713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f670630000000000000000000000007975475801bef845f10ce7784dc69ab1e0344f11","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","networkInteractionId":1,"nonce":573,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x3d94c728a1d4175b5b2955de279f7aa3d6b1ece3c2adea3297e43238157eb1ed"},"type":"TRANSACTION_SEND"} +{"args":["0xade6b8eb69a49b56929c1d4f4b428d791861db6f",{"_kind":"bigint","value":"10000000000000000000000000000"}],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","dependencies":["GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"mint","futureId":"GraphToken#GraphToken_Instance.mint","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken_Instance.mint","networkInteraction":{"data":"0x40c10f19000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f0000000000000000000000000000000000000000204fce5e3e25026110000000","id":1,"to":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken_Instance.mint","networkInteractionId":1,"nonce":574,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x2d833fa2b1148bc470e8743739c5877a34cda5b735d5014997e4d219d174804a"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphToken#GraphToken_Instance.mint","hash":"0x2d833fa2b1148bc470e8743739c5877a34cda5b735d5014997e4d219d174804a","networkInteractionId":1,"receipt":{"blockHash":"0x9f45c5fe448f38c5b686added8b8f23b09cfdc970a1546aea09f9275bd38e8be","blockNumber":82177841,"logs":[{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x0000000000000000000000000000000000000000204fce5e3e25026110000000","logIndex":0,"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken_Instance.mint","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":[],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","dependencies":["GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"renounceMinter","futureId":"GraphToken#GraphToken_Instance.renounceMinter","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","networkInteraction":{"data":"0x98650275","id":1,"to":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","networkInteractionId":1,"nonce":575,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xae0a40a2fadc29ff53ce697048a72d5e0b9a124c0c05ca4b59a56a16e9d2270b"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","hash":"0xae0a40a2fadc29ff53ce697048a72d5e0b9a124c0c05ca4b59a56a16e9d2270b","networkInteractionId":1,"receipt":{"blockHash":"0xbe7ab7e7674636bb1b28545388b6afafd829bfaaf3fb3ae86ec8a6dbcb4fe4e3","blockNumber":82177856,"logs":[{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x","logIndex":4,"topics":["0xe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb66692","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","dependencies":["GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"transferOwnership","futureId":"GraphToken#GraphToken_Instance.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","networkInteractionId":1,"nonce":576,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x45bafcda1fabc5ba82fc4aa2aa8f11fdffdf41e84f06c60aba1f521e8e393fd2"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","hash":"0x45bafcda1fabc5ba82fc4aa2aa8f11fdffdf41e84f06c60aba1f521e8e393fd2","networkInteractionId":1,"receipt":{"blockHash":"0x205ac6b84fdcc0e16b04ae8c408545384912f8ef5ba11e3bc0b461db02f8ac9e","blockNumber":82177871,"logs":[{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x","logIndex":0,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC"],"artifactId":"GraphTokenGateway#GraphTokenGateway_Instance","contractAddress":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","dependencies":["GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setPauseGuardian","futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","networkInteraction":{"data":"0x48bde20c00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc","id":1,"to":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","networkInteractionId":1,"nonce":577,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x5cc12d2309f4850d5a964f46c54a07382fff89dba7e591b3d280c3e370df4268"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","hash":"0x5cc12d2309f4850d5a964f46c54a07382fff89dba7e591b3d280c3e370df4268","networkInteractionId":1,"receipt":{"blockHash":"0x823c9ca81f046e8fb494e6a777f3dae9895f9883c77d73c239920dd64c532473","blockNumber":82177886,"logs":[{"address":"0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D","data":"0x","logIndex":0,"topics":["0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":[{"_kind":"bigint","value":"114155251141552511415"}],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setIssuancePerBlock","futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","networkInteraction":{"data":"0x1156bdc10000000000000000000000000000000000000000000000063038ec17c1be19b7","id":1,"to":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","networkInteractionId":1,"nonce":578,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x82db5ee4b00b8c346da57f15ed99ec28be01925a13982f92bf48092d6d7627be"},"type":"TRANSACTION_SEND"} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","hash":"0x82db5ee4b00b8c346da57f15ed99ec28be01925a13982f92bf48092d6d7627be","networkInteractionId":1,"receipt":{"blockHash":"0x15dfd982885eed8944fdab5e4995b31d1f2deb9eb4c4a0d07f2f9029490e6962","blockNumber":82177901,"logs":[{"address":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001069737375616e6365506572426c6f636b00000000000000000000000000000000","logIndex":0,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xd03ea8624C8C5987235048901fB614fDcA89b117"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setSubgraphAvailabilityOracle","futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","networkInteraction":{"data":"0x0903c094000000000000000000000000d03ea8624c8c5987235048901fb614fdca89b117","id":1,"to":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","networkInteractionId":1,"nonce":579,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf7cbe8cadc96b07c6986923c00168ee12c6ff1435330fed1af982858042b7852"},"type":"TRANSACTION_SEND"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","hash":"0xf7cbe8cadc96b07c6986923c00168ee12c6ff1435330fed1af982858042b7852","networkInteractionId":1,"receipt":{"blockHash":"0xf95b897a81bb7438d11c9c1bc54aa1b18a6b162126bf80e0d4a261df493391a5","blockNumber":82177916,"logs":[{"address":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a7375626772617068417661696c6162696c6974794f7261636c65000000000000","logIndex":3,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x0000000000000000000000000000000000000000"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setSubgraphService","futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","networkInteraction":{"data":"0x93a90a1e0000000000000000000000000000000000000000000000000000000000000000","id":1,"to":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","networkInteractionId":1,"nonce":580,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x257cb5b9342e5f80abc477541ee23abbc1598a334b3d591c8ac99110240ead2f"},"type":"TRANSACTION_SEND"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","hash":"0x257cb5b9342e5f80abc477541ee23abbc1598a334b3d591c8ac99110240ead2f","networkInteractionId":1,"receipt":{"blockHash":"0xc7e6de2316c21eb05ea2fcab1d8ed7bc112f08ef7cd934f9971311fd89bc2fc9","blockNumber":82177932,"logs":[{"address":"0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75","data":"0x","logIndex":0,"topics":["0x97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","hash":"0x3d94c728a1d4175b5b2955de279f7aa3d6b1ece3c2adea3297e43238157eb1ed","networkInteractionId":1,"receipt":{"blockHash":"0xb836f2900488a3ca46571b37ba80d65e45977a95502239d693cf7dcbad6b69e3","blockNumber":82177826,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x0000000000000000000000007975475801bef845f10ce7784dc69ab1e0344f11","logIndex":6,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0","0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller","GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","networkInteraction":{"data":"0xe0e99292d362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","networkInteractionId":1,"nonce":581,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8cf4ad7e1ae09e84d96aa3452b92113378935070c5367e6e0a52b0fcdc000ef6"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","hash":"0x8cf4ad7e1ae09e84d96aa3452b92113378935070c5367e6e0a52b0fcdc000ef6","networkInteractionId":1,"receipt":{"blockHash":"0xaa9d06da577568e972139e7f62c38d1dba246336063d014474209214cf2006a7","blockNumber":82177955,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d","logIndex":7,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761","0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller","RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","networkInteraction":{"data":"0xe0e99292966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe75","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","networkInteractionId":1,"nonce":582,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x76d9faa85811441e569c5b835ede5d416c3a3ba02921f1103d2cedaee62880fe"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","hash":"0x76d9faa85811441e569c5b835ede5d416c3a3ba02921f1103d2cedaee62880fe","networkInteractionId":1,"receipt":{"blockHash":"0xdfe1d7813754aed96a2ac85ad0df459d79472d57992a9be98a7dac6a0572c120","blockNumber":82177970,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe75","logIndex":3,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xdC427a9aD72C0D9636c7B375E14C3dc39fFaf35D"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","dependencies":["GraphToken#GraphToken_Instance","GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"addMinter","futureId":"GraphToken#addMinterGateway","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#addMinterGateway","networkInteraction":{"data":"0x983b2d56000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d","id":1,"to":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#addMinterGateway","networkInteractionId":1,"nonce":583,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x5bb5e556b904302181aeaa326938c45e905c5db3cd189f8d90fd5697d773c8d9"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphToken#addMinterGateway","hash":"0x5bb5e556b904302181aeaa326938c45e905c5db3cd189f8d90fd5697d773c8d9","networkInteractionId":1,"receipt":{"blockHash":"0xa62b35117f728f6d68228453bfb94f84285eef0584844d0a02305fd7ca73331c","blockNumber":82177984,"logs":[{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x","logIndex":0,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#addMinterGateway","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xfA8c011255E691aeeB57Caa63ccD181E93BEfE75"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","dependencies":["GraphToken#GraphToken_Instance","RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"addMinter","futureId":"GraphToken#addMinterRewardsManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#addMinterRewardsManager","networkInteraction":{"data":"0x983b2d56000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe75","id":1,"to":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#addMinterRewardsManager","networkInteractionId":1,"nonce":584,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xb80549eb2dea0fb34554bd97601b3ad22cc6474434483c7eccfc01e978d37685"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphToken#addMinterRewardsManager","hash":"0xb80549eb2dea0fb34554bd97601b3ad22cc6474434483c7eccfc01e978d37685","networkInteractionId":1,"receipt":{"blockHash":"0xf8fa0e81638cbe4dff59d9b5e8b853b5580a1e4ae6d39df8e818e1bad443ee2a","blockNumber":82177999,"logs":[{"address":"0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702","data":"0x","logIndex":23,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe75"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#addMinterRewardsManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247","0x1A1af8B44fD59dd2bbEb456D1b7604c7bd340702"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller","GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","networkInteraction":{"data":"0xe0e9929245fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc192470000000000000000000000001a1af8b44fd59dd2bbeb456d1b7604c7bd340702","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","networkInteractionId":1,"nonce":585,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x4ff4dc5450737eb36320a79880a5e365e61d244037637a250ba0569079507aaf"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","hash":"0x4ff4dc5450737eb36320a79880a5e365e61d244037637a250ba0569079507aaf","networkInteractionId":1,"receipt":{"blockHash":"0x99cc0429b200d5161fec9b32dbdcf4e708366c0ef66696660f3196a193d4817c","blockNumber":82178021,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x0000000000000000000000001a1af8b44fd59dd2bbeb456d1b7604c7bd340702","logIndex":9,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphHorizon_Periphery#Dummy","constructorArgs":[],"contractName":"Dummy","dependencies":["GraphHorizon_Periphery#setContractProxy_EpochManager","GraphHorizon_Periphery#setContractProxy_RewardsManager","GraphHorizon_Periphery#setContractProxy_GraphToken","GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","GraphHorizon_Periphery#setContractProxy_Curation"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphHorizon_Periphery#Dummy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#Dummy","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#Dummy","networkInteractionId":1,"nonce":586,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x950eac05b618a88ac09c2a5e4b022cf709ab46598bec57355323c5687fc38dd5"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#Dummy","hash":"0x950eac05b618a88ac09c2a5e4b022cf709ab46598bec57355323c5687fc38dd5","networkInteractionId":1,"receipt":{"blockHash":"0x810ceffc4b1418b9d282d414b465bb28e77cfe05a243c0ed7ac394255a98baed","blockNumber":82178038,"contractAddress":"0x3141000ae37361a525863D5cc4886799ed3FAFca","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#Dummy","result":{"address":"0x3141000ae37361a525863D5cc4886799ed3FAFca","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonProxies#GraphProxy_HorizonStaking","constructorArgs":["0x0000000000000000000000000000000000000000","0x0eb1325d7F1a188D5914fddb8566aE513A28D0da"],"contractName":"GraphProxy","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphHorizon_Periphery#Dummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#GraphProxy_HorizonStaking","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","networkInteractionId":1,"nonce":587,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x2d859ae24fcf0fad0c418daaeea6271d89dddb28d7c157b9f891cd5490ddb447"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","hash":"0x2d859ae24fcf0fad0c418daaeea6271d89dddb28d7c157b9f891cd5490ddb447","networkInteractionId":1,"receipt":{"blockHash":"0xb2fd4096ee4b0f99459c54fbca3166ea7a62c56bf16a5d3a649118a6c38a7bc5","blockNumber":82178055,"contractAddress":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","logs":[{"address":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","data":"0x","logIndex":1,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da"]},{"address":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","data":"0x","logIndex":2,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","result":{"address":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034","0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf"],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller","HorizonProxies#GraphProxy_HorizonStaking"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_HorizonStaking","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","networkInteraction":{"data":"0xe0e992921df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d1670340000000000000000000000003f53f9f9a5d7f36dcc869f8d2f227499c411c0cf","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","networkInteractionId":1,"nonce":588,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf80cfd15f181d133ae11a665d442403850ae1e33cece70ef661f41d35bac6103"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","hash":"0xf80cfd15f181d133ae11a665d442403850ae1e33cece70ef661f41d35bac6103","networkInteractionId":1,"receipt":{"blockHash":"0x2387a28cc054f3b0ae34f813d79b89f79132d42ed78f6ae45a2db8dcc69f5154","blockNumber":82178072,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x0000000000000000000000003f53f9f9a5d7f36dcc869f8d2f227499c411c0cf","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonProxies#RegisteredDummy","constructorArgs":[],"contractName":"Dummy","dependencies":["HorizonProxies#setContractProxy_HorizonStaking","HorizonProxies#setContractProxy_GraphPayments","HorizonProxies#setContractProxy_PaymentsEscrow"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#RegisteredDummy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#RegisteredDummy","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#RegisteredDummy","networkInteractionId":1,"nonce":589,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf8a3e92f747810a08eb6de451a84bfe638e548cec635ce6d5ed37368d7443994"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#RegisteredDummy","hash":"0xf8a3e92f747810a08eb6de451a84bfe638e548cec635ce6d5ed37368d7443994","networkInteractionId":1,"receipt":{"blockHash":"0x3d27c72dbf1468c20f60dd1c2fe28285bfd46e925b7cbb073490b7b4dd0fb906","blockNumber":82178088,"contractAddress":"0xbDc6798b71a3B57fc79eF346d065de7477D3c366","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#RegisteredDummy","result":{"address":"0xbDc6798b71a3B57fc79eF346d065de7477D3c366","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphPayments#GraphPayments","constructorArgs":["0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa",10000],"contractName":"GraphPayments","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphPayments#GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphPayments#GraphPayments","networkInteraction":{"data":"0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220014e32010460d303e4961788506a40f57bf919f7e64f17c1db1f5dcfec869fbd64736f6c634300081b00330000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca0000000000000000000000000000000000000000000000000000000000002710","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphPayments#GraphPayments","networkInteractionId":1,"nonce":590,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x9c9f5448c154a8d46b3d5935177638b8b3ad68325521636b16887406b2ba5048"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphPayments#GraphPayments","hash":"0x9c9f5448c154a8d46b3d5935177638b8b3ad68325521636b16887406b2ba5048","networkInteractionId":1,"receipt":{"blockHash":"0x2d9565b9d4e1f9fe534a94a47254da24c94f579027f4e9467e8012e7b11b350f","blockNumber":82178104,"contractAddress":"0xf5B3661BbB8CD48571C7f41ba2D896a3589C9753","logs":[{"address":"0xf5B3661BbB8CD48571C7f41ba2D896a3589C9753","data":"0x000000000000000000000000c2d72de802dedc8a539f7fd9ff39ad1aa89f7b3f0000000000000000000000005904ab9c7806fcc7634f1dcdbec544eea74906340000000000000000000000007975475801bef845f10ce7784dc69ab1e0344f11000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe75000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da0000000000000000000000004594a5915b3aaa78cdf6273a76678855ca675860","logIndex":1,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x0000000000000000000000001a1af8b44fd59dd2bbeb456d1b7604c7bd340702","0x0000000000000000000000003f53f9f9a5d7f36dcc869f8d2f227499c411c0cf","0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca"]},{"address":"0xf5B3661BbB8CD48571C7f41ba2D896a3589C9753","data":"0x000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":2,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphPayments#GraphPayments","result":{"address":"0xf5B3661BbB8CD48571C7f41ba2D896a3589C9753","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphPayments#GraphPayments_Instance","contractAddress":"0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f","contractName":"GraphPayments","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"futureId":"GraphPayments#GraphPayments_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonStakingExtension#HorizonStakingExtension","constructorArgs":["0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","0x0000000000000000000000000000000000000000"],"contractName":"HorizonStakingExtension","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy","HorizonStakingExtension#ExponentialRebates"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonStakingExtension#HorizonStakingExtension","futureType":"CONTRACT_DEPLOYMENT","libraries":{"ExponentialRebates":"0x5Ab8e4eDb2d068C9c1ab9c96bfb3abCAb96e1534"},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","networkInteraction":{"data":"0x6101e060405234801561001157600080fd5b5060405161396738038061396783398101604081905261003091610411565b818181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610347565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610347565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610347565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610347565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610347565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610347565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610347565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610347565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610347565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b03166101c052506104b4915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038291815260200190565b602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c39190610444565b9050826001600160a01b0382166103ee5760405163218f5add60e11b81526004016100749190610466565b5092915050565b80516001600160a01b038116811461040c57600080fd5b919050565b6000806040838503121561042457600080fd5b61042d836103f5565b915061043b602084016103f5565b90509250929050565b60006020828403121561045657600080fd5b61045f826103f5565b9392505050565b602081526000825180602084015260005b818110156104945760208186018101516040868401015201610477565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516133d761059060003960008181611c3601528181611e3601526123f00152600061205b015260005050600061178501526000818161213d0152818161280501526129080152600081816112c70152611b6f015260008181610bbf01528181610cbc01528181610ed601526116dc015260005050600050506000505060008181611044015281816111fa01528181612023015281816121b20152818161239a015281816124c2015261263201526133d76000f3fe6080604052600436106101f25760003560e01c806398c657dc1161010d578063b6363cf2116100a0578063e2e1e8e91161006f578063e2e1e8e914610a0b578063e73e14bf14610a38578063f1d60d6614610a70578063fb744cc014610a90578063fc54fb2714610ab057600080fd5b8063b6363cf2146108dd578063b7ca724114610927578063c0641994146109c1578063ccebcabb146109dc57600080fd5b8063a4c0ed36116100dc578063a4c0ed3614610837578063a784d49814610857578063ac9650d814610877578063ae4fe67a146108a457600080fd5b806398c657dc1461072d5780639ce7abe51461075a578063a212daf81461077a578063a2594d821461081757600080fd5b8063561285e411610185578063872d048911610154578063872d04891461064c5780638cc01c861461066c5780638d3c100a146106ed5780639054e3431461070d57600080fd5b8063561285e4146105a95780636a3ca383146105fc5780637573ef4f1461062c5780637a7664601461031157600080fd5b806325d9897e116101c157806325d9897e1461036957806339514ad21461047957806344c32a61146104ab57806355c85269146104cb57600080fd5b806308ce5f68146102495780630e0229231461027c5780631787e69f146103115780631ae720451461034757600080fd5b366102445760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561025557600080fd5b50610269610264366004612bec565b610ac8565b6040519081526020015b60405180910390f35b34801561028857600080fd5b5061029c610297366004612c25565b610add565b604051610273919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561031d57600080fd5b5061026961032c366004612c25565b6001600160a01b03166000908152600e602052604090205490565b34801561035357600080fd5b50610367610362366004612c25565b610bbd565b005b34801561037557600080fd5b5061046c610384366004612bec565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516102739190612c42565b34801561048557600080fd5b50601a546001600160401b03165b6040516001600160401b039091168152602001610273565b3480156104b757600080fd5b506103676104c6366004612cd2565b610cba565b3480156104d757600080fd5b506105776104e6366004612c25565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610273565b3480156105b557600080fd5b506105c96105c4366004612bec565b610d68565b60405161027391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561060857600080fd5b5061061c610617366004612c25565b610df6565b6040519015158152602001610273565b34801561063857600080fd5b50610269610647366004612cfe565b610e1b565b34801561065857600080fd5b50610269610667366004612d4d565b610e7f565b34801561067857600080fd5b506106d2610687366004612c25565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b60408051825181526020928301519281019290925201610273565b3480156106f957600080fd5b50610367610708366004612d96565b610ed4565b34801561071957600080fd5b50610269610728366004612dbb565b6113a0565b34801561073957600080fd5b5061074d610748366004612c25565b611488565b6040516102739190612e11565b34801561076657600080fd5b50610367610775366004612e81565b611493565b34801561078657600080fd5b506105c9610795366004612dbb565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561082357600080fd5b50610367610832366004612c25565b6115be565b34801561084357600080fd5b50610367610852366004612ed5565b6116da565b34801561086357600080fd5b50610269610872366004612c25565b6118e7565b34801561088357600080fd5b50610897610892366004612f30565b6118f2565b6040516102739190612fc9565b3480156108b057600080fd5b5061061c6108bf366004612c25565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e957600080fd5b5061061c6108f8366004612bec565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093357600080fd5b50610996610942366004613049565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b0316908201529181015190820152606001610273565b3480156109cd57600080fd5b50600d5463ffffffff16610493565b3480156109e857600080fd5b506109fc6109f7366004612dbb565b6119d9565b60405190518152602001610273565b348015610a1757600080fd5b50610269610a26366004613049565b60009081526010602052604090205490565b348015610a4457600080fd5b5061061c610a53366004612c25565b6001600160a01b03166000908152600e6020526040902054151590565b348015610a7c57600080fd5b5061061c610a8b366004612c25565b611a2b565b348015610a9c57600080fd5b50610269610aab366004612bec565b611a50565b348015610abc57600080fd5b5060205460ff1661061c565b6000610ad48383611a5c565b90505b92915050565b610b3860405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190613062565b6001600160a01b0316336001600160a01b031614610c7057604051635d9044cd60e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383169081179091556040517f690e9b982dc9aefaa1cfed186a2d2045a638013d658104102c9437235bee4b6090600090a250565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061307f565b15610d5a57604051632b37d9d160e21b815260040160405180910390fd5b610d648282611a94565b5050565b610d936040518060800160405280600081526020016000815260200160008152602001600081525090565b610dbe6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000610dca8585611e32565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b60006001610e0383611eb6565b6002811115610e1457610e14612dfb565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610e5557610e55612dfb565b6002811115610e6657610e66612dfb565b81526020019081526020016000205490505b9392505050565b600080610e8c8585611a5c565b90506000610e9a8686611f0f565b90506000610eae63ffffffff8616846130b7565b90506000610ebc8383611f3a565b9050610ec881856130ce565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f56919061307f565b15610f7457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610fb35760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b604482015260640161023b565b6000610fbe82611eb6565b90506000816002811115610fd457610fd4612dfb565b0361100c5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b604482015260640161023b565b8260000361101957505050565b6001600160a01b0382166000908152600f6020526040812060018101549091859080808061107333867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611f51565b600d5461108e908690600160401b900463ffffffff1661200e565b935061109a84866130e1565b600d549095506110bb9087908790640100000000900463ffffffff16612047565b92506110c783866130e1565b94508487600501546110d991906130ce565b6005880155600287015460009015806110ff5750601954600160a01b900463ffffffff16155b6111ca5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a4820152735Ab8e4eDb2d068C9c1ab9c96bfb3abCAb96e1534906349484d819060c401602060405180830381865af41580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c591906130f4565b6111cd565b60005b90506111dd81896008015461225a565b92506111e98387611f3a565b92506112296111f884886130e1565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690612274565b82156112915782886008015461123f91906130ce565b60088901558754611259906001600160a01b0316846122bc565b915061126582846130e1565b88546001600160a01b03908116600081815260176020526040902054929550611291928692161561234e565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134791906130f4565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e60209081526040808320868516845282528083209385168352929052908120600381015482036113e6576000915050610e78565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b801561147c576000818152601d602052604090206001810154426001600160401b039091161161146b5760028301546001840154825461145091906130b7565b61145a919061310d565b61146490856130ce565b9350611471565b5061147c565b600201549050611410565b50909695505050505050565b6000610ad782611eb6565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190613062565b6001600160a01b0316336001600160a01b0316146115585760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611586908690869060040161312f565b600060405180830381600087803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190613062565b6001600160a01b0316336001600160a01b0316146116835760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015260640161023b565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175c919061307f565b1561177a57604051632b37d9d160e21b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117e15760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015260640161023b565b6018546001600160a01b0385811691161461183e5760405162461bcd60e51b815260206004820152601e60248201527f4f4e4c595f4c315f5354414b494e475f5448524f5547485f4252494447450000604482015260640161023b565b60008061184d838501856131a4565b909250905060ff8216611882576000818060200190518101906118709190613255565b905061187c86826123c4565b506116d2565b60001960ff8316016118b0576000818060200190518101906118a491906132a2565b905061187c86826123d0565b60405162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f434f444560a01b604482015260640161023b565b6000610ad782612740565b604080516000815260208101909152606090826001600160401b0381111561191c5761191c61315e565b60405190808252806020026020018201604052801561194f57816020015b606081526020019060019003908161193a5790505b50915060005b838110156119d1576119ac3086868481811061197357611973613302565b90506020028101906119859190613318565b856040516020016119989392919061335e565b60405160208183030381529060405261278b565b8382815181106119be576119be613302565b6020908102919091010152600101611955565b505092915050565b6040805160208101909152600081526040805160208101909152600081526000611a038686611e32565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b600080611a3783611eb6565b6002811115611a4857611a48612dfb565b141592915050565b6000610ad48383611f0f565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610ad491906130e1565b6000611a9f83611eb6565b90506001816002811115611ab557611ab5612dfb565b14611aec5760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b604482015260640161023b565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef91906130f4565b608082018190526060820151600091611c079161225a565b9050600082600001516001600160a01b0316336001600160a01b03161480611c78575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff1682111580611c9b57506040830151155b15611cd55780611cd55760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b604482015260640161023b565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611db957808015611d0f57508415155b15611d2757611d22868460000151612801565b611d36565b611d3483602001516128e7565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611d6391906130e1565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611da391906130e1565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611e8b57506001600160a01b0382166000908152601460205260409020610ad7565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610ad7565b6001600160a01b038082166000908152600f6020526040812080549192909116611ee35750600092915050565b600381015415801590611ef857506004810154155b15611f065750600192915050565b50600292915050565b600080611f1c8484611e32565b905080600501548160020154611f3291906130e1565b949350505050565b600081831115611f4a5781610ad4565b5090919050565b8015612009576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd1919061307f565b6120095760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161023b565b505050565b60008061201b8484612975565b9050610ad4817f000000000000000000000000000000000000000000000000000000000000000061121a565b60008260000361205957506000610e78565b7f00000000000000000000000000000000000000000000000000000000000000006000831580159061209357506001600160a01b03821615155b90508080156121065750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612106919061307f565b1561224e5760006121178686612975565b90508015612244576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015612186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121aa91906130f4565b506121e283827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906129c7565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b15801561222b57600080fd5b505af115801561223f573d6000803e3d6000fd5b505050505b9250610e78915050565b50600095945050505050565b600081831161226a576000610ad4565b610ad482846130e1565b8015610d6457604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156116be57600080fd5b6001600160a01b03821660009081526014602052604081206002810154829190158015906122fb57508054600160401b900463ffffffff16620f424010155b156123465780546000906123219063ffffffff600160401b9091048116908790612a0216565b905061232d81866130e1565b925082826002015461233f91906130ce565b6002830155505b509392505050565b8260000361235b57505050565b801561236b576120098284612a69565b6001600160a01b03808316600090815260176020526040902054166123be81156123955781612397565b835b857f00000000000000000000000000000000000000000000000000000000000000006121d2565b50505050565b80516120098184612a69565b80516001600160a01b039081166000908152601b602090815260408083207f0000000000000000000000000000000000000000000000000000000000000000909416835292905290812060030154600160601b90046001600160401b031690036124695760405162461bcd60e51b815260206004820152600a60248201526910b83937bb34b9b4b7b760b11b604482015260640161023b565b80516001600160a01b03908116600090815260146020908152604080832082860151909416835260048401909152902060028201541580156124bb575060038201541515806124bb5750600682015415155b156125b5577f0000000000000000000000000000000000000000000000000000000000000000602084015160405163a9059cbb60e01b81526001600160a01b0391821660048201526024810187905291169063a9059cbb906044016020604051808303816000875af1158015612535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612559919061307f565b5082602001516001600160a01b031683600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de866040516125a791815260200190565b60405180910390a350505050565b60008260020154600014806125d1575082600501548360020154145b61260757826005015483600201546125e991906130e1565b60038401546125f890876130b7565b612602919061310d565b612609565b845b905080158061261f5750670de0b6b3a764000085105b156126ae576126548460200151866121d27f000000000000000000000000000000000000000000000000000000000000000090565b83602001516001600160a01b031684600001516001600160a01b03167f0921ebf1ba63d93aed0e18402fa38cb5515048daf6a04549c1bd1c1f560d72de876040516126a191815260200190565b60405180910390a3612739565b8483600201546126be91906130ce565b600284015560038301546126d39082906130ce565b600384015581546126e59082906130ce565b82556020808501518551604080518981529384018590526001600160a01b039283169391909216917fcd0366dce5247d874ffc60a762aa7abbb82c1695bbb171609c1b8861e279eb73910160405180910390a35b5050505050565b6001600160a01b0381166000908152600e6020526040812060028101546001820154600483015492549192909161277791906130e1565b61278191906130e1565b610ad791906130e1565b6060600080846001600160a01b0316846040516127a89190613385565b600060405180830381855af49150503d80600081146127e3576040519150601f19603f3d011682016040523d82523d6000602084013e6127e8565b606091505b50915091506127f8858383612ae8565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af115801561286e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289291906130f4565b9050806000036128a157505050565b60006128ad8383612b44565b905060006128bb82846130e1565b6001600160a01b038086166000908152601760205260409020549192506127399183918791161561234e565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612951573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad791906130f4565b600061298482620f4240101590565b82906129a657604051633dc311df60e01b815260040161023b91815260200190565b506129bd6129b783620f42406130e1565b84612a02565b610ad490846130e1565b80156120095760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611f8e565b6000612a1183620f4240101590565b80612a245750612a2482620f4240101590565b83839091612a4e5760405163768bf0eb60e11b81526004810192909252602482015260440161023b565b50620f42409050612a5f83856130b7565b610ad4919061310d565b6001600160a01b0382166000908152600e6020526040902054612a8d9082906130ce565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc290612adc9084815260200190565b60405180910390a25050565b606082612afd57612af882612bab565b610e78565b8151158015612b1457506001600160a01b0384163b155b15612b3d57604051639996b31560e01b81526001600160a01b038516600482015260240161023b565b5080610e78565b6001600160a01b0382166000908152601460205260408120600281015482919015801590612b8457508054640100000000900463ffffffff16620f424010155b156123465780546000906123219063ffffffff6401000000009091048116908790612a0216565b805115612bbb5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b0381168114612bd457600080fd5b60008060408385031215612bff57600080fd5b8235612c0a81612bd7565b91506020830135612c1a81612bd7565b809150509250929050565b600060208284031215612c3757600080fd5b8135610ad481612bd7565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151612cb060c084018263ffffffff169052565b5060e0830151612ccb60e08401826001600160401b03169052565b5092915050565b60008060408385031215612ce557600080fd5b8235612cf081612bd7565b946020939093013593505050565b600080600060608486031215612d1357600080fd5b8335612d1e81612bd7565b92506020840135612d2e81612bd7565b9150604084013560038110612d4257600080fd5b809150509250925092565b600080600060608486031215612d6257600080fd5b8335612d6d81612bd7565b92506020840135612d7d81612bd7565b9150604084013563ffffffff81168114612d4257600080fd5b60008060408385031215612da957600080fd5b823591506020830135612c1a81612bd7565b600080600060608486031215612dd057600080fd5b8335612ddb81612bd7565b92506020840135612deb81612bd7565b91506040840135612d4281612bd7565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e3357634e487b7160e01b600052602160045260246000fd5b91905290565b60008083601f840112612e4b57600080fd5b5081356001600160401b03811115612e6257600080fd5b602083019150836020828501011115612e7a57600080fd5b9250929050565b600080600060408486031215612e9657600080fd5b8335612ea181612bd7565b925060208401356001600160401b03811115612ebc57600080fd5b612ec886828701612e39565b9497909650939450505050565b60008060008060608587031215612eeb57600080fd5b8435612ef681612bd7565b93506020850135925060408501356001600160401b03811115612f1857600080fd5b612f2487828801612e39565b95989497509550505050565b60008060208385031215612f4357600080fd5b82356001600160401b03811115612f5957600080fd5b8301601f81018513612f6a57600080fd5b80356001600160401b03811115612f8057600080fd5b8560208260051b8401011115612f9557600080fd5b6020919091019590945092505050565b60005b83811015612fc0578181015183820152602001612fa8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561303d57603f198786030184528151805180875261301a816020890160208501612fa5565b601f01601f19169590950160209081019550938401939190910190600101612ff1565b50929695505050505050565b60006020828403121561305b57600080fd5b5035919050565b60006020828403121561307457600080fd5b8151610ad481612bd7565b60006020828403121561309157600080fd5b81518015158114610ad457600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ad757610ad76130a1565b80820180821115610ad757610ad76130a1565b81810381811115610ad757610ad76130a1565b60006020828403121561310657600080fd5b5051919050565b60008261312a57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561319c5761319c61315e565b604052919050565b600080604083850312156131b757600080fd5b823560ff811681146131c857600080fd5b915060208301356001600160401b038111156131e357600080fd5b8301601f810185136131f457600080fd5b80356001600160401b0381111561320d5761320d61315e565b613220601f8201601f1916602001613174565b81815286602083850101111561323557600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602082840312801561326857600080fd5b50604051602081016001600160401b038111828210171561328b5761328b61315e565b604052825161329981612bd7565b81529392505050565b600060408284031280156132b557600080fd5b50604080519081016001600160401b03811182821017156132d8576132d861315e565b60405282516132e681612bd7565b815260208301516132f681612bd7565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332f57600080fd5b8301803591506001600160401b0382111561334957600080fd5b602001915036819003821315612e7a57600080fd5b82848237600083820160008152835161337b818360208801612fa5565b0195945050505050565b60008251613397818460208701612fa5565b919091019291505056fea264697066735822122038ad83d20c219353421029f1ad8c4f7667d5f0e86af1579c64603bb56827d86064736f6c634300081b00330000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca0000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","networkInteractionId":1,"nonce":591,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xdc3e61147eae510ca156b998d535ab74b7b47007e313416d6b17a88048f1f51f"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","hash":"0xdc3e61147eae510ca156b998d535ab74b7b47007e313416d6b17a88048f1f51f","networkInteractionId":1,"receipt":{"blockHash":"0x5d0f2b163e68c20fa939b3e9f4e15938d06b356a60c7ff1c52692fa839b9206b","blockNumber":82178120,"contractAddress":"0xf203161Ba7e25263deB79a4478BE18644C2c5446","logs":[{"address":"0xf203161Ba7e25263deB79a4478BE18644C2c5446","data":"0x000000000000000000000000c2d72de802dedc8a539f7fd9ff39ad1aa89f7b3f0000000000000000000000005904ab9c7806fcc7634f1dcdbec544eea74906340000000000000000000000007975475801bef845f10ce7784dc69ab1e0344f11000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe75000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da0000000000000000000000004594a5915b3aaa78cdf6273a76678855ca675860","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x0000000000000000000000001a1af8b44fd59dd2bbeb456d1b7604c7bd340702","0x0000000000000000000000003f53f9f9a5d7f36dcc869f8d2f227499c411c0cf","0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","result":{"address":"0xf203161Ba7e25263deB79a4478BE18644C2c5446","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"PaymentsEscrow#PaymentsEscrow","constructorArgs":["0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa",10000,10000],"contractName":"PaymentsEscrow","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"PaymentsEscrow#PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"PaymentsEscrow#PaymentsEscrow","networkInteraction":{"data":"0x61020060405234801561001157600080fd5b506040516120c73803806120c78339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611ad26105f5600039600081816101e00152610abb015260008181610193015261039d01526000505060005050600050506000505060005050600081816102fa0152818161041601528181610589015281816106380152818161076e0152818161094901528181610b2d01528181610d71015261131b01526000505060008181610fa6015261104e015260005050600081816108da01528181610eea01528181610f77015281816110c401526114130152611ad26000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806378a24c54116100a257806388e584431161007157806388e584431461021d578063ac9650d81461026e578063beb6eceb1461028e578063d4fac45d146102d2578063f213159c146102e557600080fd5b806378a24c54146101c85780637b8ae6cf146101db5780638129fc1c1461020257806387dbfe821461020a57600080fd5b80634f9d392e116100de5780634f9d392e1461016857806351cff8d91461017b5780636cd476561461018e57806371ece3aa146101b557600080fd5b8063071b214c146101105780630ee36be31461012d57806332825b811461014257806347e7ef2414610155575b600080fd5b61011a6276a70081565b6040519081526020015b60405180910390f35b61014061013b3660046116df565b6102f8565b005b6101406101503660046116df565b610414565b6101406101633660046116fa565b610587565b6101406101763660046116fa565b610636565b6101406101893660046116df565b61076c565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b6101406101c33660046116fa565b610947565b6101406101d63660046116df565b610b2b565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b610140610c61565b610140610218366004611724565b610d6f565b61025361022b366004611792565b6001602081815260009384526040808520909152918352912080549181015460029091015483565b60408051938452602084019290925290820152606001610124565b61028161027c3660046117c5565b6111ee565b6040516101249190611860565b6102bd61029c366004611792565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610124565b61011a6102e0366004611792565b6112d7565b6101406102f33660046118e0565b611319565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037a919061191d565b1561039857604051639e68cf0b60e01b815260040160405180910390fd5b6103c27f000000000000000000000000000000000000000000000000000000000000000042611955565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610496919061191d565b156104b457604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060018101549091036104fa57604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061052f57604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061191d565b1561062757604051639e68cf0b60e01b815260040160405180910390fd5b6106323383836113c9565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b8919061191d565b156106d657604051639e68cf0b60e01b815260040160405180910390fd5b806000036106f757604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0386168452909152812080549091839183919061072c908490611955565b90915550506040516001600160a01b0384169033907f747c06b7cbf7a0f7fcab1fdf4f7429ac2afcdf5f0af97b9ef717110eef00eb9990600090a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061191d565b1561080c57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03851684529091528120600281015490910361085457604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061088457604051633c50db7960e11b815260048101929092526024820152604401610526565b5050600081600001548260010154116108a15781600101546108a4565b81545b9050808260000160008282546108ba9190611968565b909155505060006001830181905560028301556109016001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361147f565b6040518181526001600160a01b0384169033907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906020015b60405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061191d565b156109e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812090829003610a80578060010154600003610a3757604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a3505050565b80548280821015610aad57604051633db4e69160e01b815260048101929092526024820152604401610526565b505060018101829055610ae07f000000000000000000000000000000000000000000000000000000000000000042611955565b600282018190556040805184815260208101929092526001600160a01b0385169133917fe0158cfeff9c2315fdbefe5851ad77d36eb492293f2b6b3861a73fb4dff82451910161093a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad919061191d565b15610bcb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600101549003610c0f57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ca75750825b905060008267ffffffffffffffff166001148015610cc45750303b155b905081158015610cd2575080155b15610cf05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d1a57845460ff60401b1916600160401b1785555b610d22611531565b8315610d6857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061191d565b15610e0f57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610e5d5760405163b0b503e760e01b815260048101929092526024820152604401610526565b50506001600160a01b03808716600090815260016020908152604080832093891683529290522080548580821015610eb157604051633db4e69160e01b815260048101929092526024820152604401610526565b505084826000016000828254610ec79190611968565b9091555050805485908290600090610ee0908490611968565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061197b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015611012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611036919061191d565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a9061108b908c908b908b908b908b90600401611994565b600060405180830381600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b5050505060006110e67f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061197b565b905061115c8188611955565b821482828990919261119257604051631f82726b60e21b8152600481019390935260248301919091526044820152606401610526565b505050876001600160a01b0316896001600160a01b03167f8b0d8feeba4c6c21a8b1c772ccc0ec89892541c94a76b356c6a1035ec8f5b40d896040516111da91815260200190565b60405180910390a350505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115611219576112196119df565b60405190808252806020026020018201604052801561124c57816020015b60608152602001906001900390816112375790505b50915060005b838110156112ce576112a930868684818110611270576112706119f5565b90506020028101906112829190611a0b565b8560405160200161129593929190611a59565b60405160208183030381529060405261153b565b8382815181106112bb576112bb6119f5565b6020908102919091010152600101611252565b50505b92915050565b6001600160a01b03808316600090815260016020818152604080842094861684529390529181209182015482549192916113119190611968565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b919061191d565b156113b957604051639e68cf0b60e01b815260040160405180910390fd5b6113c48383836113c9565b505050565b6001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290611400908490611955565b9091555061143a90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836115b1565b816001600160a01b0316836001600160a01b03167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f628360405161093a91815260200190565b80156113c45760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f9919061191d565b6113c45760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610526565b6115396115f2565b565b6060600080846001600160a01b0316846040516115589190611a80565b600060405180830381855af49150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091506115a885838361163b565b95945050505050565b80156113c4576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016114b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661153957604051631afcd79f60e31b815260040160405180910390fd5b6060826116505761164b8261169a565b611693565b815115801561166757506001600160a01b0384163b155b1561169057604051639996b31560e01b81526001600160a01b0385166004820152602401610526565b50805b9392505050565b8051156116aa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146116da57600080fd5b919050565b6000602082840312156116f157600080fd5b611693826116c3565b6000806040838503121561170d57600080fd5b611716836116c3565b946020939093013593505050565b60008060008060008060c0878903121561173d57600080fd5b86356003811061174c57600080fd5b955061175a602088016116c3565b9450611768604088016116c3565b93506060870135925061177d608088016116c3565b9598949750929591949360a090920135925050565b600080604083850312156117a557600080fd5b6117ae836116c3565b91506117bc602084016116c3565b90509250929050565b600080602083850312156117d857600080fd5b823567ffffffffffffffff8111156117ef57600080fd5b8301601f8101851361180057600080fd5b803567ffffffffffffffff81111561181757600080fd5b8560208260051b840101111561182c57600080fd5b6020919091019590945092505050565b60005b8381101561185757818101518382015260200161183f565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156118d457603f19878603018452815180518087526118b181602089016020850161183c565b601f01601f19169590950160209081019550938401939190910190600101611888565b50929695505050505050565b6000806000606084860312156118f557600080fd5b6118fe846116c3565b925061190c602085016116c3565b929592945050506040919091013590565b60006020828403121561192f57600080fd5b8151801515811461169357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112d1576112d161193f565b818103818111156112d1576112d161193f565b60006020828403121561198d57600080fd5b5051919050565b60a08101600387106119b657634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611a2257600080fd5b83018035915067ffffffffffffffff821115611a3d57600080fd5b602001915036819003821315611a5257600080fd5b9250929050565b828482376000838201600081528351611a7681836020880161183c565b0195945050505050565b60008251611a9281846020870161183c565b919091019291505056fea2646970667358221220c747a690c4d61350849293110a4c3ac2070e62afe88696f58021adec428f19e564736f6c634300081b00330000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002710","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"PaymentsEscrow#PaymentsEscrow","networkInteractionId":1,"nonce":592,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x51d4e4c47fba62927e62668113a50c544749571902b2aff50096816224ec219b"},"type":"TRANSACTION_SEND"} +{"futureId":"PaymentsEscrow#PaymentsEscrow","hash":"0x51d4e4c47fba62927e62668113a50c544749571902b2aff50096816224ec219b","networkInteractionId":1,"receipt":{"blockHash":"0x6127edf707f7a533633004ad6ee427c65b06b5e5460f588388e56a540fe758b5","blockNumber":82178135,"contractAddress":"0x09B985a2042848A08bA59060EaF0f07c6F5D4d54","logs":[{"address":"0x09B985a2042848A08bA59060EaF0f07c6F5D4d54","data":"0x000000000000000000000000c2d72de802dedc8a539f7fd9ff39ad1aa89f7b3f0000000000000000000000005904ab9c7806fcc7634f1dcdbec544eea74906340000000000000000000000007975475801bef845f10ce7784dc69ab1e0344f11000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe75000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da0000000000000000000000004594a5915b3aaa78cdf6273a76678855ca675860","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x0000000000000000000000001a1af8b44fd59dd2bbeb456d1b7604c7bd340702","0x0000000000000000000000003f53f9f9a5d7f36dcc869f8d2f227499c411c0cf","0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"PaymentsEscrow#PaymentsEscrow","result":{"address":"0x09B985a2042848A08bA59060EaF0f07c6F5D4d54","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"PaymentsEscrow#PaymentsEscrow_Instance","contractAddress":"0x5904ab9c7806FCC7634F1DcDBec544eEa7490634","contractName":"PaymentsEscrow","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"futureId":"PaymentsEscrow#PaymentsEscrow_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"TAPCollector#TAPCollector","constructorArgs":["TAPCollector","1","0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa"],"contractName":"TAPCollector","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"TAPCollector#TAPCollector","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"TAPCollector#TAPCollector","networkInteraction":{"data":"0x6102a060405234801561001157600080fd5b506040516119ae3803806119ae833981016040819052610030916105d9565b80838361003e8260006103db565b6101205261004d8160016103db565b61014052815160208084019190912060e052815190820120610100524660a0526100da60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03811661012c5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101e05260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526101649061040e565b6001600160a01b0316610160526040805180820190915260078152665374616b696e6760c81b60208201526101989061040e565b6001600160a01b03166101805260408051808201909152600d81526c47726170685061796d656e747360981b60208201526101d29061040e565b6001600160a01b03166101a05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261020d9061040e565b6001600160a01b03166101c05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526102469061040e565b6001600160a01b03166102005260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526102819061040e565b6001600160a01b0316610220526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102bf9061040e565b6001600160a01b03166102405260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102fb9061040e565b6001600160a01b03166102605260408051808201909152600881526721bab930ba34b7b760c11b60208201526103309061040e565b6001600160a01b039081166102808190526101e05161018051610160516101a0516101c0516102005161022051610240516102605160408051968c168752948b166020870152928a1685850152908916606085015288166080840152871660a083015260c0820195909552935192851694918216939116917fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a439181900360e00190a45050505061081e565b60006020835110156103f7576103f0836104bc565b9050610408565b8161040284826106db565b5060ff90505b92915050565b6000806101e0516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161044991815260200190565b602060405180830381865afa158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a9190610799565b9050826001600160a01b0382166104b55760405163218f5add60e11b815260040161012391906107e7565b5092915050565b600080829050601f815111156104e7578260405163305a27a960e01b815260040161012391906107e7565b80516104f2826107fa565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561052b578181015183820152602001610513565b50506000910152565b600082601f83011261054557600080fd5b81516001600160401b0381111561055e5761055e6104fa565b604051601f8201601f19908116603f011681016001600160401b038111828210171561058c5761058c6104fa565b6040528181528382016020018510156105a457600080fd5b6105b5826020830160208701610510565b949350505050565b80516001600160a01b03811681146105d457600080fd5b919050565b6000806000606084860312156105ee57600080fd5b83516001600160401b0381111561060457600080fd5b61061086828701610534565b602086015190945090506001600160401b0381111561062e57600080fd5b61063a86828701610534565b925050610649604085016105bd565b90509250925092565b600181811c9082168061066657607f821691505b60208210810361068657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106d657806000526020600020601f840160051c810160208510156106b35750805b601f840160051c820191505b818110156106d357600081556001016106bf565b50505b505050565b81516001600160401b038111156106f4576106f46104fa565b610708816107028454610652565b8461068c565b6020601f82116001811461073c57600083156107245750848201515b600019600385901b1c1916600184901b1784556106d3565b600084815260208120601f198516915b8281101561076c578785015182556020948501946001909201910161074c565b508482101561078a5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156107ab57600080fd5b6107b4826105bd565b9392505050565b600081518084526107d3816020860160208601610510565b601f01601f19169290920160200192915050565b6020815260006107b460208301846107bb565b805160208083015191908110156106865760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516110e36108cb600039600050506000505060005050600050506000505060005050600061024f0152600050506000505060005050600061049201526000610460015260006108940152600061086c015260006107c7015260006107f10152600061081b01526110e36000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80631ef518f21461005c5780637f07d2831461008c57806384b0196e146100ad5780638821603c146100c8578063cfdb35bd146100db575b600080fd5b61006f61006a3660046109dc565b61010c565b6040516001600160a01b0390911681526020015b60405180910390f35b61009f61009a366004610b23565b610125565b604051908152602001610083565b6100b5610372565b6040516100839796959493929190610bc6565b61009f6100d6366004610c5e565b6103b8565b61009f6100e9366004610cb0565b600260209081526000938452604080852082529284528284209052825290205481565b600061011f61011a83610db8565b6103cb565b92915050565b60008060008380602001905181019061013e9190610e75565b815151919350915033906001600160a01b0381168214610189576040516347666ba360e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b50508151516000610199846103cb565b84516020808201516060909201516001600160a01b038087166000908152600284526040808220838716835285528082209287168252919093529091205492935090916001600160801b03909116908181808211610213576040516308e467d960e31b815260048101929092526024820152604401610180565b50600090506102228284610fb1565b9050600061023082896103f2565b905081156102f3576040516343edff4160e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906387dbfe829061028e908f908a908a9088908e908990600401610fda565b600060405180830381600087803b1580156102a857600080fd5b505af11580156102bc573d6000803e3d6000fd5b5050506001600160a01b0380891660009081526002602090815260408083208a851684528252808320938b16835292905220859055505b866001600160a01b0316866001600160a01b03168d600281111561031957610319610fc4565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4509a9950505050505050505050565b600060608060008060006060610386610459565b61038e61048b565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061011f6103c68361102e565b6104b8565b6000806103db83600001516104b8565b90506103eb81846020015161056f565b9392505050565b600061040183620f4240101590565b80610414575061041482620f4240101590565b8383909161043e5760405163768bf0eb60e11b815260048101929092526024820152604401610180565b50620f4240905061044f838561103a565b6103eb9190611051565b60606104867f00000000000000000000000000000000000000000000000000000000000000006000610599565b905090565b60606104867f00000000000000000000000000000000000000000000000000000000000000006001610599565b600061011f7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610554969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610644565b60008060008061057f8686610671565b92509250925061058f82826106be565b5090949350505050565b606060ff83146105b3576105ac8361077b565b905061011f565b8180546105bf90611073565b80601f01602080910402602001604051908101604052809291908181526020018280546105eb90611073565b80156106385780601f1061060d57610100808354040283529160200191610638565b820191906000526020600020905b81548152906001019060200180831161061b57829003601f168201915b5050505050905061011f565b600061011f6106516107ba565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600083516041036106ab5760208401516040850151606086015160001a61069d888285856108e5565b9550955095505050506106b7565b50508151600091506002905b9250925092565b60008260038111156106d2576106d2610fc4565b036106db575050565b60018260038111156106ef576106ef610fc4565b0361070d5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561072157610721610fc4565b036107425760405163fce698f760e01b815260048101829052602401610180565b600382600381111561075657610756610fc4565b03610777576040516335e2f38360e21b815260048101829052602401610180565b5050565b60606000610788836109b4565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561081357507f000000000000000000000000000000000000000000000000000000000000000046145b1561083d57507f000000000000000000000000000000000000000000000000000000000000000090565b610486604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561092057506000915060039050826109aa565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610974573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109a0575060009250600191508290506109aa565b9250600091508190505b9450945094915050565b600060ff8216601f81111561011f57604051632cd44ac360e21b815260040160405180910390fd5b6000602082840312156109ee57600080fd5b81356001600160401b03811115610a0457600080fd5b8201604081850312156103eb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715610a4e57610a4e610a16565b60405290565b604080519081016001600160401b0381118282101715610a4e57610a4e610a16565b604051601f8201601f191681016001600160401b0381118282101715610a9e57610a9e610a16565b604052919050565b60006001600160401b03821115610abf57610abf610a16565b50601f01601f191660200190565b600082601f830112610ade57600080fd5b8135610af1610aec82610aa6565b610a76565b818152846020838601011115610b0657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610b3657600080fd5b823560038110610b4557600080fd5b915060208301356001600160401b03811115610b6057600080fd5b610b6c85828601610acd565b9150509250929050565b60005b83811015610b91578181015183820152602001610b79565b50506000910152565b60008151808452610bb2816020860160208601610b76565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e060208201526000610be560e0830189610b9a565b8281036040840152610bf78189610b9a565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015610c4d578351835260209384019390920191600101610c2f565b50909b9a5050505050505050505050565b600060208284031215610c7057600080fd5b81356001600160401b03811115610c8657600080fd5b820160a081850312156103eb57600080fd5b6001600160a01b0381168114610cad57600080fd5b50565b600080600060608486031215610cc557600080fd5b8335610cd081610c98565b92506020840135610ce081610c98565b91506040840135610cf081610c98565b809150509250925092565b6001600160401b0381168114610cad57600080fd5b6001600160801b0381168114610cad57600080fd5b600060a08284031215610d3757600080fd5b610d3f610a2c565b90508135610d4c81610c98565b81526020820135610d5c81610c98565b60208201526040820135610d6f81610cfb565b60408201526060820135610d8281610d10565b606082015260808201356001600160401b03811115610da057600080fd5b610dac84828501610acd565b60808301525092915050565b600060408236031215610dca57600080fd5b610dd2610a54565b82356001600160401b03811115610de857600080fd5b610df436828601610d25565b82525060208301356001600160401b03811115610e1057600080fd5b610e1c36828601610acd565b60208301525092915050565b600082601f830112610e3957600080fd5b8151610e47610aec82610aa6565b818152846020838601011115610e5c57600080fd5b610e6d826020830160208701610b76565b949350505050565b60008060408385031215610e8857600080fd5b82516001600160401b03811115610e9e57600080fd5b830160408186031215610eb057600080fd5b610eb8610a54565b81516001600160401b03811115610ece57600080fd5b820160a08188031215610ee057600080fd5b610ee8610a2c565b8151610ef381610c98565b81526020820151610f0381610c98565b60208201526040820151610f1681610cfb565b60408201526060820151610f2981610d10565b606082015260808201516001600160401b03811115610f4757600080fd5b610f5389828501610e28565b60808301525082525060208201516001600160401b03811115610f7557600080fd5b610f8187828501610e28565b602083810191909152959095015190969095509350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561011f5761011f610f9b565b634e487b7160e01b600052602160045260246000fd5b60c0810160038810610ffc57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b600061011f3683610d25565b808202811582820484141761011f5761011f610f9b565b60008261106e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061108757607f821691505b6020821081036110a757634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212204ea11b7f590e7303a0b1850b4cd59148c357bb48498bdb2606c6e97c057012e264736f6c634300081b0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca000000000000000000000000000000000000000000000000000000000000000c544150436f6c6c6563746f72000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"TAPCollector#TAPCollector","networkInteractionId":1,"nonce":593,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xea63076f31f70c31ffd7c170d6d50962f7f5f465c5e556d221e4de6dbdc8175e"},"type":"TRANSACTION_SEND"} +{"futureId":"TAPCollector#TAPCollector","hash":"0xea63076f31f70c31ffd7c170d6d50962f7f5f465c5e556d221e4de6dbdc8175e","networkInteractionId":1,"receipt":{"blockHash":"0x683c27716ab788fe88104bd8ab560e75e6279df88f2ce4cd4072769e69bde2b1","blockNumber":82178150,"contractAddress":"0xacC71844EF6beEF70106ABe6E51013189A1f3738","logs":[{"address":"0xacC71844EF6beEF70106ABe6E51013189A1f3738","data":"0x000000000000000000000000c2d72de802dedc8a539f7fd9ff39ad1aa89f7b3f0000000000000000000000005904ab9c7806fcc7634f1dcdbec544eea74906340000000000000000000000007975475801bef845f10ce7784dc69ab1e0344f11000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe75000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da0000000000000000000000004594a5915b3aaa78cdf6273a76678855ca675860","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x0000000000000000000000001a1af8b44fd59dd2bbeb456d1b7604c7bd340702","0x0000000000000000000000003f53f9f9a5d7f36dcc869f8d2f227499c411c0cf","0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"TAPCollector#TAPCollector","result":{"address":"0xacC71844EF6beEF70106ABe6E51013189A1f3738","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":[],"artifactId":"GraphPayments#GraphPayments","dependencies":["GraphPayments#GraphPayments"],"functionName":"initialize","futureId":"GraphPayments#encodeFunctionCall(GraphPayments#GraphPayments.initialize)","result":"0x8129fc1c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonStaking#HorizonStaking","constructorArgs":["0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","0xf203161Ba7e25263deB79a4478BE18644C2c5446","0x0000000000000000000000000000000000000000"],"contractName":"HorizonStaking","dependencies":["Controller#Controller","HorizonStakingExtension#HorizonStakingExtension","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonStaking#HorizonStaking","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#HorizonStaking","networkInteraction":{"data":"0x61020060405234801561001157600080fd5b50604051615b2c380380615b2c8339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516155836105a960003960006102fb015260008181610dbf015281816115b60152818161166801528181612f5401528181613e120152614172015260005050600050506000505060005050600050506000612f0d015260005050600050506000505060008181610d89015281816117cd015281816125b2015281816128c80152818161295f01528181612ac00152818161380b015281816139cb01528181613d88015261401e01526155836000f3fe6080604052600436106102975760003560e01c80638cc01c861161015a578063b7ca7241116100c1578063ee6a17441161007a578063ee6a174414610b5a578063ef58bd6714610b7a578063f93f1cd014610b8f578063fb744cc014610baf578063fc54fb2714610bcf578063fecc9cc114610be7576102e9565b8063b7ca724114610a1c578063bc735d9014610ab6578063ca94b0e914610ad6578063ccebcabb14610af6578063e473522a14610b25578063e76fede614610b3a576102e9565b8063a2a3172211610113578063a2a3172214610936578063a694fc3a14610956578063a784d49814610976578063ac9650d814610996578063ad4d35b5146109c3578063ae4fe67a146109e3576102e9565b80638cc01c86146107985780639054e343146108195780639ce7abe514610839578063a02b942614610859578063a212daf814610879578063a2594d8214610916576102e9565b80634d99dd16116101fe5780637573ef4f116101b75780637573ef4f146106b25780637a766460146106d25780637c145cc71461070857806381e21b561461073857806382d66cb814610758578063872d048914610778576102e9565b80634d99dd16146105bf57806351a60b02146105df578063561285e4146105ff5780636230001a1461065257806372f2c2b5146106725780637461209214610692576102e9565b80632e17de78116102505780632e17de781461050257806339514ad2146105225780633a78b7321461054a5780633ccfd60b1461056a57806342c516931461057f5780634ca7ac221461059f576102e9565b8063010167e51461033f578063026e402b1461035f57806308ce5f681461037f57806321195373146103b2578063259bc435146103d257806325d9897e146103f2576102e9565b366102e95760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b3480156102f557600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e818015610339578184f35b8184fd5b005b34801561034b57600080fd5b5061033d61035a366004614caf565b610c07565b34801561036b57600080fd5b5061033d61037a366004614d11565b610cda565b34801561038b57600080fd5b5061039f61039a366004614d3d565b610dea565b6040519081526020015b60405180910390f35b3480156103be57600080fd5b5061033d6103cd366004614d76565b610dff565b3480156103de57600080fd5b5061033d6103ed366004614db7565b610ece565b3480156103fe57600080fd5b506104f561040d366004614d3d565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152506001600160a01b039182166000908152601b602090815260408083209390941682529182528290208251610100810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015290565b6040516103a99190614dd2565b34801561050e57600080fd5b5061033d61051d366004614e62565b610fbd565b34801561052e57600080fd5b50601a546040516001600160401b0390911681526020016103a9565b34801561055657600080fd5b5061033d610565366004614e7b565b611050565b34801561057657600080fd5b5061033d6111ec565b34801561058b57600080fd5b5061033d61059a366004614ea7565b61127e565b3480156105ab57600080fd5b5061033d6105ba366004614f04565b61142f565b3480156105cb57600080fd5b5061033d6105da366004614d11565b611529565b3480156105eb57600080fd5b5061033d6105fa366004614d3d565b6115db565b34801561060b57600080fd5b5061061f61061a366004614d3d565b611690565b6040516103a991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561065e57600080fd5b5061033d61066d366004614f32565b61171e565b34801561067e57600080fd5b5061033d61068d366004614f78565b611803565b34801561069e57600080fd5b5061033d6106ad366004614d76565b611917565b3480156106be57600080fd5b5061039f6106cd366004614fd3565b6119b3565b3480156106de57600080fd5b5061039f6106ed366004614e7b565b6001600160a01b03166000908152600e602052604090205490565b34801561071457600080fd5b5061072861072336600461501a565b611a17565b60405190151581526020016103a9565b34801561074457600080fd5b5061033d610753366004615065565b611a2c565b34801561076457600080fd5b5061033d610773366004614caf565b611c38565b34801561078457600080fd5b5061039f6107933660046150bd565b611d49565b3480156107a457600080fd5b506107fe6107b3366004614e7b565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103a9565b34801561082557600080fd5b5061039f61083436600461501a565b611d9e565b34801561084557600080fd5b5061033d6108543660046150fb565b611e86565b34801561086557600080fd5b5061039f610874366004614d76565b611fb1565b34801561088557600080fd5b5061061f61089436600461501a565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b34801561092257600080fd5b5061033d610931366004614e7b565b612045565b34801561094257600080fd5b5061033d610951366004614d11565b612161565b34801561096257600080fd5b5061033d610971366004614e62565b6121f2565b34801561098257600080fd5b5061039f610991366004614e7b565b612283565b3480156109a257600080fd5b506109b66109b1366004615180565b61228e565b6040516103a99190615219565b3480156109cf57600080fd5b5061033d6109de366004615299565b612375565b3480156109ef57600080fd5b506107286109fe366004614e7b565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610a2857600080fd5b50610a8b610a37366004614e62565b604080516060808201835260008083526020808401829052928401819052938452601d825292829020825193840183528054845260018101546001600160401b031691840191909152600201549082015290565b60408051825181526020808401516001600160401b03169082015291810151908201526060016103a9565b348015610ac257600080fd5b5061033d610ad1366004615299565b61244e565b348015610ae257600080fd5b5061033d610af1366004614d76565b6124e0565b348015610b0257600080fd5b50610b16610b1136600461501a565b612629565b604051905181526020016103a9565b348015610b3157600080fd5b5061033d61267b565b348015610b4657600080fd5b5061033d610b553660046152d9565b61274d565b348015610b6657600080fd5b5061033d610b75366004614f78565b612bf3565b348015610b8657600080fd5b5061033d612c87565b348015610b9b57600080fd5b5061039f610baa366004614d76565b612d63565b348015610bbb57600080fd5b5061039f610bca366004614d3d565b612e37565b348015610bdb57600080fd5b5060205460ff16610728565b348015610bf357600080fd5b5061033d610c02366004614d76565b612e43565b610c0f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190615323565b15610c8e57604051632b37d9d160e21b815260040160405180910390fd5b8484610c9b338383612f2f565b338383909192610cc157604051630c76b97b60e41b81526004016102e093929190615340565b505050610cd18786888787612ff3565b50505050505050565b610ce2612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190615323565b15610d6157604051632b37d9d160e21b815260040160405180910390fd5b80600003610d8257604051630a2a4e5b60e11b815260040160405180910390fd5b610db933827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613369565b610de6827f0000000000000000000000000000000000000000000000000000000000000000836000613421565b5050565b6000610df68383613656565b90505b92915050565b8282610e0c338383612f2f565b338383909192610e3257604051630c76b97b60e41b81526004016102e093929190615340565b505050610e3d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190615323565b15610ebc57604051632b37d9d160e21b815260040160405180910390fd5b610ec785858561368e565b5050505050565b610ed6612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615363565b6001600160a01b0316336001600160a01b031614610f6857604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b610fc5612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190615323565b1561104457604051632b37d9d160e21b815260040160405180910390fd5b61104d8161376b565b50565b611058612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190615323565b156110d757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061113d57506003810154600160c01b81046001600160401b039081166401000000009092041614155b156111e7576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a35b505050565b6111f4612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190615323565b1561127357604051632b37d9d160e21b815260040160405180910390fd5b61127c3361393e565b565b611286612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190615323565b1561130557604051632b37d9d160e21b815260040160405180910390fd5b8383611312338383612f2f565b33838390919261133857604051630c76b97b60e41b81526004016102e093929190615340565b50505061134883620f4240101590565b839061136a57604051631504950160e21b81526004016102e091815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156113a6576113a6615380565b60028111156113b7576113b7615380565b81526020810191909152604001600020558360028111156113da576113da615380565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161141f91815260200190565b60405180910390a4505050505050565b611437612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615363565b6001600160a01b0316336001600160a01b0316146114c957604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b611531612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615323565b156115b057604051632b37d9d160e21b815260040160405180910390fd5b6111e7827f000000000000000000000000000000000000000000000000000000000000000083613a37565b6115e3612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190615323565b1561166257604051632b37d9d160e21b815260040160405180910390fd5b610de6827f000000000000000000000000000000000000000000000000000000000000000083600080613cc8565b6116bb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6116e66040518060800160405280600081526020016000815260200160008152602001600081525090565b60006116f28585613e0e565b600281015483526003810154602084015260058101546040840152600601546060830152509392505050565b611726612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117879190615323565b156117a557604051632b37d9d160e21b815260040160405180910390fd5b816000036117c657604051630a2a4e5b60e11b815260040160405180910390fd5b6117f133837f0000000000000000000000000000000000000000000000000000000000000000610da9565b6117fd84848484613421565b50505050565b61180b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186c9190615323565b1561188a57604051632b37d9d160e21b815260040160405180910390fd5b8484611897338383612f2f565b3383839091926118bd57604051630c76b97b60e41b81526004016102e093929190615340565b50505086856118cd338383612f2f565b3383839091926118f357604051630c76b97b60e41b81526004016102e093929190615340565b50505061190189898761368e565b61190c898888613e92565b505050505050505050565b61191f612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190615323565b1561199e57604051632b37d9d160e21b815260040160405180910390fd5b6119a88382613ff6565b6111e7838383613e92565b6001600160a01b038084166000908152601c602090815260408083209386168352929052908120818360028111156119ed576119ed615380565b60028111156119fe576119fe615380565b81526020019081526020016000205490505b9392505050565b6000611a24848484612f2f565b949350505050565b611a34612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190615323565b15611ab357604051632b37d9d160e21b815260040160405180910390fd5b8383611ac0338383612f2f565b338383909192611ae657604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611b57576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600381015463ffffffff868116600160a01b90920416141580611b93575060038101546001600160401b03858116600160c01b9092041614155b15610cd1576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611c27908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611c40612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca19190615323565b15611cbf57604051632b37d9d160e21b815260040160405180910390fd5b8484611ccc338383612f2f565b338383909192611cf257604051630c76b97b60e41b81526004016102e093929190615340565b5050506001600160a01b038616600090815260226020526040902054869060ff16611d3b57604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b50610cd18786888787612ff3565b600080611d568585613656565b90506000611d64868661404c565b90506000611d7863ffffffff8616846153ac565b90506000611d86838361406f565b9050611d9281856153c3565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611de4576000915050611a10565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015611e7a576000818152601d602052604090206001810154426001600160401b0390911611611e6957600283015460018401548254611e4e91906153ac565b611e5891906153d6565b611e6290856153c3565b9350611e6f565b50611e7a565b600201549050611e0e565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190615363565b6001600160a01b0316336001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b60405163623faf6160e01b81526001600160a01b0385169063623faf6190611f7990869086906004016153f8565b600060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b5050505050505050565b6000611fbb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190615323565b1561203a57604051632b37d9d160e21b815260040160405180910390fd5b611a24848484613a37565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190615363565b6001600160a01b0316336001600160a01b03161461210a5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e000060448201526064016102e0565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050505050565b612169612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ca9190615323565b156121e857604051632b37d9d160e21b815260040160405180910390fd5b610de68282613ff6565b6121fa612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190615323565b1561227957604051632b37d9d160e21b815260040160405180910390fd5b61104d3382613ff6565b6000610df982614086565b604080516000815260208101909152606090826001600160401b038111156122b8576122b861543a565b6040519080825280602002602001820160405280156122eb57816020015b60608152602001906001900390816122d65790505b50915060005b8381101561236d576123483086868481811061230f5761230f615450565b90506020028101906123219190615466565b85604051602001612334939291906154ac565b6040516020818303038152906040526140d1565b83828151811061235a5761235a615450565b60209081029190910101526001016122f1565b505092915050565b61237d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190615323565b156123fc57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216600090815260226020526040902054829060ff1661244257604051622920f760e21b81526001600160a01b0390911660048201526024016102e0565b506111e7838383614147565b612456612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615323565b156124d557604051632b37d9d160e21b815260040160405180910390fd5b6111e7838383614147565b6124e8612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190615323565b1561256757604051632b37d9d160e21b815260040160405180910390fd5b8060000361258857604051630a2a4e5b60e11b815260040160405180910390fd5b60006125948484613e0e565b90508181600201546125a691906153c3565b60028201556125d633837f0000000000000000000000000000000000000000000000000000000000000000610da9565b826001600160a01b0316846001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a15115308460405161261b91815260200190565b60405180910390a350505050565b60408051602081019091526000815260408051602081019091526000815260006126538686613e0e565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612683612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190615363565b6001600160a01b0316336001600160a01b03161461271557604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612755612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b69190615323565b156127d457604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b60209081526040808320338085529252822090916128038784613e0e565b905060008160020154836000015461281b91906153c3565b90508087816128465760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506000612854888361406f565b9050600061286685600001548361406f565b90508015612a9d57600385015460009061288b90839063ffffffff9081169061427716565b90508881818110156128b957604051632f514d5760e21b8152600481019290925260248201526044016102e0565b50508815612950576128f8888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906142de565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c60405161294791815260200190565b60405180910390a45b61298e61295d8a84615427565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614319565b85546000906129a5670de0b6b3a7640000856153ac565b6129af91906153d6565b9050670de0b6b3a76400006129c48282615427565b88600101546129d391906153ac565b6129dd91906153d6565b600188015586546129ef908490615427565b87556001600160a01b038c166000908152600e6020526040902060040154612a18908490615427565b6001600160a01b038d166000908152600e60205260409020600481019190915554612a44908490615427565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612aa78183615427565b91508115612be75760205460ff1615612b9957612ae4827f000000000000000000000000000000000000000000000000000000000000000061297f565b6002840154600090612afe670de0b6b3a7640000856153ac565b612b0891906153d6565b9050828560020154612b1a9190615427565b6002860155670de0b6b3a7640000612b328282615427565b8660050154612b4191906153ac565b612b4b91906153d6565b60058601556040518381526001600160a01b0380891691908d16907fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7719060200160405180910390a350612be7565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b2484604051612bde91815260200190565b60405180910390a35b50505050505050505050565b612bfb612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615323565b15612c7a57604051632b37d9d160e21b815260040160405180910390fd5b610ec78585858585613cc8565b612c8f612f0b565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615363565b6001600160a01b0316336001600160a01b031614612d2157604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6000612d6d612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce9190615323565b15612dec57604051632b37d9d160e21b815260040160405180910390fd5b8383612df9338383612f2f565b338383909192612e1f57604051630c76b97b60e41b81526004016102e093929190615340565b505050612e2d868686614361565b9695505050505050565b6000610df6838361404c565b612e4b612f0b565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eac9190615323565b15612eca57604051632b37d9d160e21b815260040160405180910390fd5b8282612ed7338383612f2f565b338383909192612efd57604051630c76b97b60e41b81526004016102e093929190615340565b505050610ec7858585613e92565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000826001600160a01b0316846001600160a01b031603612f5257506001611a10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612fba57506001600160a01b0380831660009081526015602090815260408083209387168352929052205460ff16611a10565b506001600160a01b038083166000908152601f60209081526040808320858516845282528083209387168352929052205460ff16611a10565b6000841161301457604051630a2a4e5b60e11b815260040160405180910390fd5b81620f424063ffffffff821681101561305057604051633a50e6ff60e01b815263ffffffff9283166004820152911660248201526044016102e0565b5050601a5481906001600160401b039081169082168110156130985760405163ee5602e160e01b81526001600160401b039283166004820152911660248201526044016102e0565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156130f157604051632b542c0d60e11b815260040160405180910390fd5b60006130fc86614086565b905084818082111561312a5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b505060405180610100016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b0316815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b031602179055509050506000600e6000886001600160a01b03166001600160a01b03168152602001908152602001600020905085816004015461330691906153c3565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611c27565b80156111e7576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156133c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e99190615323565b6111e75760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b60448201526064016102e0565b81670de0b6b3a7640000808210156134555760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b03166134c4576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b505060006134d28585613e0e565b33600090815260048201602052604090206002820154919250901515806135085750600382015415801561350857506006820154155b8686909161353c57604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b5050600082600201546000148061355a575082600501548360020154145b61359057826005015483600201546135729190615427565b600384015461358190876153ac565b61358b91906153d6565b613592565b845b905080158015906135a35750838110155b818590916135cd57604051635d88e8d160e01b8152600481019290925260248201526044016102e0565b50508483600201546135df91906153c3565b600284015560038301546135f49082906153c3565b600384015581546136069082906153c3565b825560405185815233906001600160a01b0388811691908a16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a450505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610df69190615427565b6001600160a01b038084166000908152601b602090815260408083209386168352929052908120600281015460018201549192916136d087878184868a6144d6565b8654929550935091506136e4908490615427565b845560028401829055600184018190556001600160a01b0387166000908152600e60205260408120600401805485929061371f908490615427565b92505081905550856001600160a01b0316876001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051611c2791815260200190565b33600082900361378e57604051630a2a4e5b60e11b815260040160405180910390fd5b600061379982614086565b90508281808211156137c75760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613877576138028683615427565b835561382f85877f00000000000000000000000000000000000000000000000000000000000000006128e8565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8760405161386a91815260200190565b60405180910390a2612159565b60028301541580159061388e575082600301544310155b1561389c5761389c8561393e565b6002830154156138c6576138c36138b7846003015443614616565b84600201548389614630565b90505b8583600201546138d691906153c3565b60028401556138e581436153c3565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361397d57604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156139a657604051631d222f1b60e31b81526004016102e091815260200190565b50600060028301819055600383015581546139c2908290615427565b82556139ef83827f00000000000000000000000000000000000000000000000000000000000000006128e8565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc82604051613a2a91815260200190565b60405180910390a2505050565b6000808211613a5957604051637318ad9960e01b815260040160405180910390fd5b6000613a658585613e0e565b33600090815260048201602052604090208054919250908480821015613aa75760405163ab99793560e01b8152600481019290925260248201526044016102e0565b5050600282015486908690613ae257604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000826003015483600501548460020154613aff9190615427565b613b0990876153ac565b613b1391906153d6565b905060008360050154600014613b465760058401546006850154613b3790846153ac565b613b4191906153d6565b613b48565b815b6001600160a01b038981166000908152601b60209081526040808320938c1683529290529081206003015491925090613b929064010000000090046001600160401b0316426153c3565b9050868560030154613ba49190615427565b60038601556005850154613bb99084906153c3565b60058601556006850154613bce9083906153c3565b60068601558354613be0908890615427565b80855515613c53576000856003015486600501548760020154613c039190615427565b8654613c0f91906153ac565b613c1991906153d6565b905080670de0b6b3a764000080821015613c4f5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b5050505b6000613c628a8a338686614684565b9050336001600160a01b0316896001600160a01b03168b6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613cb391815260200190565b60405180910390a49998505050505050505050565b6000613cd48686613e0e565b905080600201546000141586869091613d1357604051631984edef60e31b81526001600160a01b039283166004820152911660248201526044016102e0565b50506006810154600582015460009190613d3189893384868a6144d6565b600287015492955093509150613d48908490615427565b600285015560068401829055600584018190558215613dac576001600160a01b03871615613d8157613d7c87898589613421565b613dac565b613dac33847f00000000000000000000000000000000000000000000000000000000000000006128e8565b336001600160a01b0316886001600160a01b03168a6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e86604051613dfb91815260200190565b60405180910390a4505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603613e6757506001600160a01b0382166000908152601460205260409020610df9565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610df9565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812090829003613eda57604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b0316613f23576040516330acea0d60e11b81526001600160a01b039283166004820152911660248201526044016102e0565b50506000613f3085614086565b9050828180821115613f5e5760405163ccaf28a960e01b8152600481019290925260248201526044016102e0565b50508154613f6d9084906153c3565b82556001600160a01b0385166000908152600e6020526040902060040154613f969084906153c3565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745910160405180910390a35050505050565b8060000361401757604051630a2a4e5b60e11b815260040160405180910390fd5b61404233827f0000000000000000000000000000000000000000000000000000000000000000610da9565b610de68282614824565b6000806140598484613e0e565b905080600501548160020154611a249190615427565b60008183111561407f5781610df6565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916140bd9190615427565b6140c79190615427565b610df99190615427565b6060600080846001600160a01b0316846040516140ee91906154d3565b600060405180830381855af49150503d8060008114614129576040519150601f19603f3d011682016040523d82523d6000602084013e61412e565b606091505b509150915061413e858383614897565b95945050505050565b336001600160a01b0384160361417057604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036141dd573360009081526015602090815260408083206001600160a01b03871684529091529020805460ff1916821515179055614219565b336000908152601f602090815260408083206001600160a01b03868116855290835281842090871684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f8460405161426a911515815260200190565b60405180910390a4505050565b600061428683620f4240101590565b80614299575061429982620f4240101590565b838390916142c35760405163768bf0eb60e11b8152600481019290925260248201526044016102e0565b50620f424090506142d483856153ac565b610df691906153d6565b80156111e75760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016133a6565b8015610de657604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561214557600080fd5b60008160000361438457604051630a2a4e5b60e11b815260040160405180910390fd5b60006143908585613656565b90508083808210156143be5760405163587ab9ab60e11b8152600481019290925260248201526044016102e0565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060028101549091901561441857816001015485836002015461440991906153ac565b61441391906153d6565b61441a565b845b60038301549091506000906144409064010000000090046001600160401b0316426153c3565b905085836001015461445291906153c3565b600184015560028301546144679083906153c3565b6002840155600061447b8989818686614684565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516144c291815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101548291829161452d576040516307e332c560e31b815260040160405180910390fd5b6000808061457e6148f3614908614a43868e8e604051602001614563939291909283526020830191909152604082015260600190565b60408051601f1981840301815291905288939291908d614a6d565b915091508080602001905181019061459691906154ef565b809b50819c508295505050508a6001600160a01b03168c6001600160a01b03168e6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d585876040516145fa929190918252602082015260400190565b60405180910390a450909b979a50959850959650505050505050565b6000818311614626576000610df6565b610df68284615427565b600061463c82856153c3565b600161464884876153c3565b6146529190615427565b61465c84866153ac565b61466687896153ac565b61467091906153c3565b61467a91906153c3565b61413e91906153d6565b6001600160a01b038086166000908152601e6020908152604080832088851684528252808320938716835292905290812060038101546064116146da5760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608a811b8216602084015289811b8216603484015288901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206060840183528884526001600160401b038881168386019081526000868601818152848252601d9095529490942094518555925160018501805467ffffffffffffffff19169190941617909255516002909201919091556003830154909150156147b35760018201546000908152601d602052604090206002018190555b6147bd8282614b27565b604080518681526001600160401b03861660208201529081018290526001600160a01b0380881691898216918b16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a4979650505050505050565b6001600160a01b0382166000908152600e60205260409020546148489082906153c3565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061151d9084815260200190565b6060826148ac576148a782614bba565b611a10565b81511580156148c357506001600160a01b0384163b155b156148ec57604051639996b31560e01b81526001600160a01b03851660048201526024016102e0565b5080611a10565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b03909116111561494b57505060408051602081019091526000815260019150614a3c565b60008060008680602001905181019061496491906154ef565b92509250925060008183866000015461497d91906153ac565b61498791906153d6565b90506149938184615427565b85549093506149a29083615427565b91506149ae81856153c3565b855460018701546040805185815260208101939093526001600160401b0390911682820152519195508a917f65662212afe828a9d3832eda69b6b7b2fb6a756c0f2a7420bf8b290dad84470f9181900360600190a260408051602081018690529081018490526060810183905260800160405160208183030381529060405297506000889650965050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff1916905560020155565b600060608760030154831115614a9657604051634a411b9d60e11b815260040160405180910390fd5b60008315614aa45783614aaa565b88600301545b89549094505b8015801590614abf5750600085115b15614b1857600080614ad583898c63ffffffff16565b915091508115614ae6575050614b18565b965086614af48c8c8b614be3565b925086614b008161551d565b9750508380614b0e90615534565b9450505050614ab0565b50989397509295505050505050565b612710826003015410614b4d576040516303a8c56b60e61b815260040160405180910390fd5b80614b6b57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614b879084906153c3565b90915550506003820154600003614b9c578082555b6001826003016000828254614bb191906153c3565b90915550505050565b805115614bca5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600080846003015411614c095760405163ddaf8f2160e01b815260040160405180910390fd5b6000614c1c85600001548563ffffffff16565b9050614c2f85600001548463ffffffff16565b6001856003016000828254614c449190615427565b90915550508085556003850154600003614c6057600060018601555b5050915492915050565b6001600160a01b038116811461104d57600080fd5b803563ffffffff81168114614c9357600080fd5b919050565b80356001600160401b0381168114614c9357600080fd5b600080600080600060a08688031215614cc757600080fd5b8535614cd281614c6a565b94506020860135614ce281614c6a565b935060408601359250614cf760608701614c7f565b9150614d0560808701614c98565b90509295509295909350565b60008060408385031215614d2457600080fd5b8235614d2f81614c6a565b946020939093013593505050565b60008060408385031215614d5057600080fd5b8235614d5b81614c6a565b91506020830135614d6b81614c6a565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d9681614c6a565b92506020840135614da681614c6a565b929592945050506040919091013590565b600060208284031215614dc957600080fd5b610df682614c98565b60006101008201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b0360808401511660808301526001600160401b0360a08401511660a083015260c0830151614e4060c084018263ffffffff169052565b5060e0830151614e5b60e08401826001600160401b03169052565b5092915050565b600060208284031215614e7457600080fd5b5035919050565b600060208284031215614e8d57600080fd5b8135611a1081614c6a565b803560038110614c9357600080fd5b60008060008060808587031215614ebd57600080fd5b8435614ec881614c6a565b93506020850135614ed881614c6a565b9250614ee660408601614e98565b9396929550929360600135925050565b801515811461104d57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614c6a565b91506020830135614d6b81614ef6565b60008060008060808587031215614f4857600080fd5b8435614f5381614c6a565b93506020850135614f6381614c6a565b93969395505050506040820135916060013590565b600080600080600060a08688031215614f9057600080fd5b8535614f9b81614c6a565b94506020860135614fab81614c6a565b93506040860135614fbb81614c6a565b94979396509394606081013594506080013592915050565b600080600060608486031215614fe857600080fd5b8335614ff381614c6a565b9250602084013561500381614c6a565b915061501160408501614e98565b90509250925092565b60008060006060848603121561502f57600080fd5b833561503a81614c6a565b9250602084013561504a81614c6a565b9150604084013561505a81614c6a565b809150509250925092565b6000806000806080858703121561507b57600080fd5b843561508681614c6a565b9350602085013561509681614c6a565b92506150a460408601614c7f565b91506150b260608601614c98565b905092959194509250565b6000806000606084860312156150d257600080fd5b83356150dd81614c6a565b925060208401356150ed81614c6a565b915061501160408501614c7f565b60008060006040848603121561511057600080fd5b833561511b81614c6a565b925060208401356001600160401b0381111561513657600080fd5b8401601f8101861361514757600080fd5b80356001600160401b0381111561515d57600080fd5b86602082840101111561516f57600080fd5b939660209190910195509293505050565b6000806020838503121561519357600080fd5b82356001600160401b038111156151a957600080fd5b8301601f810185136151ba57600080fd5b80356001600160401b038111156151d057600080fd5b8560208260051b84010111156151e557600080fd5b6020919091019590945092505050565b60005b838110156152105781810151838201526020016151f8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561528d57603f198786030184528151805180875261526a8160208901602085016151f5565b601f01601f19169590950160209081019550938401939190910190600101615241565b50929695505050505050565b6000806000606084860312156152ae57600080fd5b83356152b981614c6a565b925060208401356152c981614c6a565b9150604084013561505a81614ef6565b600080600080608085870312156152ef57600080fd5b84356152fa81614c6a565b93506020850135925060408501359150606085013561531881614c6a565b939692955090935050565b60006020828403121561533557600080fd5b8151611a1081614ef6565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561537557600080fd5b8151611a1081614c6a565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610df957610df9615396565b80820180821115610df957610df9615396565b6000826153f357634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610df957610df9615396565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261547d57600080fd5b8301803591506001600160401b0382111561549757600080fd5b602001915036819003821315614a3c57600080fd5b8284823760008382016000815283516154c98183602088016151f5565b0195945050505050565b600082516154e58184602087016151f5565b9190910192915050565b60008060006060848603121561550457600080fd5b5050815160208301516040909301519094929350919050565b60008161552c5761552c615396565b506000190190565b60006001820161554657615546615396565b506001019056fea264697066735822122006c6e4bfdc1de64a080ef26443cebb679f74b45bd0aaa62e574320a49283676164736f6c634300081b00330000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca000000000000000000000000f203161ba7e25263deb79a4478be18644c2c54460000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#HorizonStaking","networkInteractionId":1,"nonce":594,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xe526d7a57dfcc3b35230960b0593a00429db265e885d76401885b5365d11ad82"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStaking#HorizonStaking","hash":"0xe526d7a57dfcc3b35230960b0593a00429db265e885d76401885b5365d11ad82","networkInteractionId":1,"receipt":{"blockHash":"0x00aa4ab5d6b7e6d197d4e4a85b88f7663d5576fb0db3cef71211da87839c2aed","blockNumber":82178167,"contractAddress":"0xFf2Ee30de92F276018642A59Fb7Be95b3F9088Af","logs":[{"address":"0xFf2Ee30de92F276018642A59Fb7Be95b3F9088Af","data":"0x000000000000000000000000c2d72de802dedc8a539f7fd9ff39ad1aa89f7b3f0000000000000000000000005904ab9c7806fcc7634f1dcdbec544eea74906340000000000000000000000007975475801bef845f10ce7784dc69ab1e0344f11000000000000000000000000fa8c011255e691aeeb57caa63ccd181e93befe75000000000000000000000000dc427a9ad72c0d9636c7b375e14c3dc39ffaf35d0000000000000000000000000eb1325d7f1a188d5914fddb8566ae513a28d0da0000000000000000000000004594a5915b3aaa78cdf6273a76678855ca675860","logIndex":2,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x0000000000000000000000001a1af8b44fd59dd2bbeb456d1b7604c7bd340702","0x0000000000000000000000003f53f9f9a5d7f36dcc869f8d2f227499c411c0cf","0x0000000000000000000000004dbe1b10bc15d0f53ff508be01942198262ddfca"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#HorizonStaking","result":{"address":"0xFf2Ee30de92F276018642A59Fb7Be95b3F9088Af","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":[],"artifactId":"PaymentsEscrow#PaymentsEscrow","dependencies":["PaymentsEscrow#PaymentsEscrow"],"functionName":"initialize","futureId":"PaymentsEscrow#encodeFunctionCall(PaymentsEscrow#PaymentsEscrow.initialize)","result":"0x8129fc1c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"args":["0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f","0xf5B3661BbB8CD48571C7f41ba2D896a3589C9753","0x8129fc1c"],"artifactId":"HorizonProxies#ProxyAdmin_GraphPayments","contractAddress":"0xbb29b876AA2faCEb3af83d768CB03dd3BFF03f5e","dependencies":["HorizonProxies#ProxyAdmin_GraphPayments","HorizonProxies#TransparentUpgradeableProxy_GraphPayments","GraphPayments#GraphPayments","GraphPayments#encodeFunctionCall(GraphPayments#GraphPayments.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","networkInteraction":{"data":"0x9623609d000000000000000000000000c2d72de802dedc8a539f7fd9ff39ad1aa89f7b3f000000000000000000000000f5b3661bbb8cd48571c7f41ba2d896a3589c9753000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000048129fc1c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xbb29b876AA2faCEb3af83d768CB03dd3BFF03f5e","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","networkInteractionId":1,"nonce":595,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xed1cf6b814c8a31532b003821d02f969f902b550cd17a4df4f1119963222ff8f"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","hash":"0xed1cf6b814c8a31532b003821d02f969f902b550cd17a4df4f1119963222ff8f","networkInteractionId":1,"receipt":{"blockHash":"0xa69bfc6af51ef4a1230b0cbaa09adcecf9ad2216d6f5c4c3a373bd0ebfee8ef8","blockNumber":82178183,"logs":[{"address":"0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000f5b3661bbb8cd48571c7f41ba2d896a3589c9753"]},{"address":"0xC2D72de802deDC8A539F7FD9fF39aD1aA89F7b3f","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":1,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","0xFf2Ee30de92F276018642A59Fb7Be95b3F9088Af"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","dependencies":["GraphProxyAdmin#GraphProxyAdmin","HorizonProxies#GraphProxy_HorizonStaking","HorizonStaking#HorizonStaking"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgrade","futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","networkInteraction":{"data":"0x99a88ec40000000000000000000000003f53f9f9a5d7f36dcc869f8d2f227499c411c0cf000000000000000000000000ff2ee30de92f276018642a59fb7be95b3f9088af","id":1,"to":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","networkInteractionId":1,"nonce":596,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x7cf329f1474b4fe182d4364502f16e2b42ae1670df0a0b92efdf02f130612a28"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","hash":"0x7cf329f1474b4fe182d4364502f16e2b42ae1670df0a0b92efdf02f130612a28","networkInteractionId":1,"receipt":{"blockHash":"0x6a5bdf09bd426cb6eff2de4b276f8f7651b9f3545e439f1a09940361fc6d0db7","blockNumber":82178196,"logs":[{"address":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ff2ee30de92f276018642a59fb7be95b3f9088af"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x5904ab9c7806FCC7634F1DcDBec544eEa7490634","0x09B985a2042848A08bA59060EaF0f07c6F5D4d54","0x8129fc1c"],"artifactId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","contractAddress":"0x6D892d831196E1Ad3779B97320b7091dE7d45053","dependencies":["HorizonProxies#ProxyAdmin_PaymentsEscrow","HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","PaymentsEscrow#PaymentsEscrow","PaymentsEscrow#encodeFunctionCall(PaymentsEscrow#PaymentsEscrow.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","networkInteraction":{"data":"0x9623609d0000000000000000000000005904ab9c7806fcc7634f1dcdbec544eea749063400000000000000000000000009b985a2042848a08ba59060eaf0f07c6f5d4d54000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000048129fc1c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x6D892d831196E1Ad3779B97320b7091dE7d45053","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","networkInteractionId":1,"nonce":597,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x7f98e4168aa1e6306b2f3c93e340752a0cbaba45cc354d7a2703b943e5a370b4"},"type":"TRANSACTION_SEND"} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","hash":"0x7f98e4168aa1e6306b2f3c93e340752a0cbaba45cc354d7a2703b943e5a370b4","networkInteractionId":1,"receipt":{"blockHash":"0x6b4134d93d6088ca8f3c0c972217fc205da35723b88fc2c626a366cfae70b5da","blockNumber":82178210,"logs":[{"address":"0x5904ab9c7806FCC7634F1DcDBec544eEa7490634","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x00000000000000000000000009b985a2042848a08ba59060eaf0f07c6f5d4d54"]},{"address":"0x5904ab9c7806FCC7634F1DcDBec544eEa7490634","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":1,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xFf2Ee30de92F276018642A59Fb7Be95b3F9088Af","0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","dependencies":["GraphProxyAdmin#GraphProxyAdmin","HorizonStaking#HorizonStaking","HorizonProxies#GraphProxy_HorizonStaking","HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxy","futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","networkInteraction":{"data":"0xeb451a02000000000000000000000000ff2ee30de92f276018642a59fb7be95b3f9088af0000000000000000000000003f53f9f9a5d7f36dcc869f8d2f227499c411c0cf","id":1,"to":"0x0eb1325d7F1a188D5914fddb8566aE513A28D0da","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","networkInteractionId":1,"nonce":598,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x35fbdfb81b5a57e9dfd298d6b34183a2c34a929f83149518964bff0e6eefb8da"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","hash":"0x35fbdfb81b5a57e9dfd298d6b34183a2c34a929f83149518964bff0e6eefb8da","networkInteractionId":1,"receipt":{"blockHash":"0xe266d5efaaf677777116f93a2f74d85ba61e8da75da4e8ed8f4856bfc382faf5","blockNumber":82178231,"logs":[{"address":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ff2ee30de92f276018642a59fb7be95b3f9088af"]},{"address":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000ff2ee30de92f276018642a59fb7be95b3f9088af","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonStaking#HorizonStaking_Instance","contractAddress":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","contractName":"HorizonStaking","dependencies":["HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","HorizonProxies#GraphProxy_HorizonStaking"],"futureId":"HorizonStaking#HorizonStaking_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":[2419200],"artifactId":"HorizonStaking#HorizonStaking_Instance","contractAddress":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","dependencies":["HorizonStaking#HorizonStaking_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setMaxThawingPeriod","futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","networkInteraction":{"data":"0x259bc435000000000000000000000000000000000000000000000000000000000024ea00","id":1,"to":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","networkInteractionId":1,"nonce":601,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x9fd8876526dfaba8d3a68beec3849237f3c28e5f1456bec14dc462633b3c14b5"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","hash":"0x9fd8876526dfaba8d3a68beec3849237f3c28e5f1456bec14dc462633b3c14b5","networkInteractionId":1,"receipt":{"blockHash":"0xcd3553308f6e624653fa73232c1576e4e71fc925645eed70469412d5e3b2561b","blockNumber":83711037,"logs":[{"address":"0x3F53F9f9a5d7F36dCC869f8D2F227499c411c0cf","data":"0x000000000000000000000000000000000000000000000000000000000024ea00","logIndex":6,"topics":["0xe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":[false],"artifactId":"Controller#Controller","contractAddress":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","dependencies":["Controller#Controller"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setPaused","futureId":"Controller#Controller.setPaused","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller.setPaused","networkInteraction":{"data":"0x16c38b3c0000000000000000000000000000000000000000000000000000000000000000","id":1,"to":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller.setPaused","networkInteractionId":1,"nonce":602,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xd75a4e87b6a1b53ab1d9e9c010fc33ad70bb11812a9c7b7f2a590cfbf9fa82b6"},"type":"TRANSACTION_SEND"} +{"futureId":"Controller#Controller.setPaused","hash":"0xd75a4e87b6a1b53ab1d9e9c010fc33ad70bb11812a9c7b7f2a590cfbf9fa82b6","networkInteractionId":1,"receipt":{"blockHash":"0x7a0e9751569815a889ab35f9384aa9784369c8a50f4a3d8fb23568093e1ff514","blockNumber":83746020,"logs":[{"address":"0x4DbE1B10bc15D0F53fF508BE01942198262ddfCa","data":"0x0000000000000000000000000000000000000000000000000000000000000000","logIndex":3,"topics":["0x8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller.setPaused","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} \ No newline at end of file diff --git a/packages/horizon/ignition/modules/core.ts b/packages/horizon/ignition/modules/core.ts new file mode 100644 index 000000000..eb949e475 --- /dev/null +++ b/packages/horizon/ignition/modules/core.ts @@ -0,0 +1,15 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import GraphPaymentsModule from './core/GraphPayments' +import HorizonStakingModule from './core/HorizonStaking' +import PaymentsEscrowModule from './core/PaymentsEscrow' +import TAPCollectorModule from './core/TAPCollector' + +export default buildModule('GraphHorizon_Core', (m) => { + const { HorizonStaking } = m.useModule(HorizonStakingModule) + const { GraphPayments } = m.useModule(GraphPaymentsModule) + const { PaymentsEscrow } = m.useModule(PaymentsEscrowModule) + const { TAPCollector } = m.useModule(TAPCollectorModule) + + return { HorizonStaking, GraphPayments, PaymentsEscrow, TAPCollector } +}) diff --git a/packages/horizon/ignition/modules/core/GraphPayments.ts b/packages/horizon/ignition/modules/core/GraphPayments.ts new file mode 100644 index 000000000..43fcf5b55 --- /dev/null +++ b/packages/horizon/ignition/modules/core/GraphPayments.ts @@ -0,0 +1,31 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import GraphPeripheryModule from '../periphery' +import HorizonProxiesModule from './HorizonProxies' + +import GraphPaymentsArtifact from '../../../build/contracts/contracts/payments/GraphPayments.sol/GraphPayments.json' + +// TODO: transfer ownership of ProxyAdmin??? +export default buildModule('GraphPayments', (m) => { + const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule) + const { GraphPaymentsProxyAdmin, GraphPaymentsProxy, HorizonRegistered } = m.useModule(HorizonProxiesModule) + + const protocolPaymentCut = m.getParameter('protocolPaymentCut') + + // Deploy GraphPayments implementation + const GraphPaymentsImplementation = m.contract('GraphPayments', + GraphPaymentsArtifact, + [Controller, protocolPaymentCut], + { + after: [PeripheryRegistered, HorizonRegistered], + }, + ) + + // Upgrade proxy to implementation contract + m.call(GraphPaymentsProxyAdmin, 'upgradeAndCall', [GraphPaymentsProxy, GraphPaymentsImplementation, m.encodeFunctionCall(GraphPaymentsImplementation, 'initialize', [])]) + + // Load contract with implementation ABI + const GraphPayments = m.contractAt('GraphPayments', GraphPaymentsArtifact, GraphPaymentsProxy, { id: 'GraphPayments_Instance' }) + + return { GraphPayments } +}) diff --git a/packages/horizon/ignition/modules/core/HorizonProxies.ts b/packages/horizon/ignition/modules/core/HorizonProxies.ts new file mode 100644 index 000000000..8656571af --- /dev/null +++ b/packages/horizon/ignition/modules/core/HorizonProxies.ts @@ -0,0 +1,42 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' +import { deployWithOZProxy } from '../proxy/TransparentUpgradeableProxy' +import { ethers } from 'ethers' + +import GraphPeripheryModule from '../periphery' +import GraphProxyAdminModule from '../periphery/GraphProxyAdmin' + +import DummyArtifact from '../../../build/contracts/contracts/mocks/Dummy.sol/Dummy.json' +import GraphProxyArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxy.sol/GraphProxy.json' + +const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' + +// HorizonStaking, GraphPayments and PaymentsEscrow use GraphDirectory but they also in the directory. +// So we need to deploy their proxies, register them in the controller before being able to deploy the implementations +export default buildModule('HorizonProxies', (m) => { + const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule) + const { GraphProxyAdmin } = m.useModule(GraphProxyAdminModule) + + // Deploy HorizonStaking proxy without an implementation + const HorizonStakingProxy = m.contract('GraphProxy', GraphProxyArtifact, [ZERO_ADDRESS, GraphProxyAdmin], { after: [PeripheryRegistered], id: 'GraphProxy_HorizonStaking' }) + + // Deploy proxies for payments contracts using OZ TransparentUpgradeableProxy + const { Proxy: GraphPaymentsProxy, ProxyAdmin: GraphPaymentsProxyAdmin } = deployWithOZProxy(m, 'GraphPayments') + const { Proxy: PaymentsEscrowProxy, ProxyAdmin: PaymentsEscrowProxyAdmin } = deployWithOZProxy(m, 'PaymentsEscrow') + + // Register the proxies in the controller + const setProxyHorizonStaking = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('Staking')), HorizonStakingProxy], { id: 'setContractProxy_HorizonStaking' }) + const setProxyGraphPayments = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('GraphPayments')), GraphPaymentsProxy], { id: 'setContractProxy_GraphPayments' }) + const setProxyPaymentsEscrow = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('PaymentsEscrow')), PaymentsEscrowProxy], { id: 'setContractProxy_PaymentsEscrow' }) + + // Deploy dummy contract to signal that all periphery contracts are registered + const HorizonRegistered = m.contract('Dummy', DummyArtifact, [], { + id: 'RegisteredDummy', + after: [ + setProxyHorizonStaking, + setProxyGraphPayments, + setProxyPaymentsEscrow, + ], + }) + + return { HorizonStakingProxy, GraphPaymentsProxy, PaymentsEscrowProxy, HorizonRegistered, GraphPaymentsProxyAdmin, PaymentsEscrowProxyAdmin } +}) diff --git a/packages/horizon/ignition/modules/core/HorizonStaking.ts b/packages/horizon/ignition/modules/core/HorizonStaking.ts new file mode 100644 index 000000000..c412af887 --- /dev/null +++ b/packages/horizon/ignition/modules/core/HorizonStaking.ts @@ -0,0 +1,38 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import GraphPeripheryModule from '../periphery' +import HorizonProxiesModule from './HorizonProxies' +import HorizonStakingExtensionModule from './HorizonStakingExtension' + +import HorizonStakingArtifact from '../../../build/contracts/contracts/staking/HorizonStaking.sol/HorizonStaking.json' + +export default buildModule('HorizonStaking', (m) => { + const { Controller, GraphProxyAdmin, PeripheryRegistered } = m.useModule(GraphPeripheryModule) + const { HorizonStakingProxy, HorizonRegistered } = m.useModule(HorizonProxiesModule) + const { HorizonStakingExtension } = m.useModule(HorizonStakingExtensionModule) + + const subgraphServiceAddress = m.getParameter('subgraphServiceAddress') + + // Deploy HorizonStaking implementation + const HorizonStakingImplementation = m.contract('HorizonStaking', + HorizonStakingArtifact, + [ + Controller, + HorizonStakingExtension, + subgraphServiceAddress, + ], + { + after: [PeripheryRegistered, HorizonRegistered], + }, + ) + + // Upgrade proxy to implementation contract + const upgradeCall = m.call(GraphProxyAdmin, 'upgrade', [HorizonStakingProxy, HorizonStakingImplementation]) + const acceptCall = m.call(GraphProxyAdmin, 'acceptProxy', [HorizonStakingImplementation, HorizonStakingProxy], { after: [upgradeCall] }) + + // Load contract with implementation ABI + const HorizonStaking = m.contractAt('HorizonStaking', HorizonStakingArtifact, HorizonStakingProxy, { after: [acceptCall], id: 'HorizonStaking_Instance' }) + m.call(HorizonStaking, 'setMaxThawingPeriod', [m.getParameter('maxThawingPeriod')]) + + return { HorizonStakingProxy, HorizonStakingImplementation, HorizonStaking } +}) diff --git a/packages/horizon/ignition/modules/core/HorizonStakingExtension.ts b/packages/horizon/ignition/modules/core/HorizonStakingExtension.ts new file mode 100644 index 000000000..f1da04286 --- /dev/null +++ b/packages/horizon/ignition/modules/core/HorizonStakingExtension.ts @@ -0,0 +1,26 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import GraphPeripheryModule from '../periphery' +import HorizonProxiesModule from './HorizonProxies' + +import ExponentialRebatesArtifact from '../../../build/contracts/contracts/staking/libraries/ExponentialRebates.sol/ExponentialRebates.json' +import HorizonStakingExtensionArtifact from '../../../build/contracts/contracts/staking/HorizonStakingExtension.sol/HorizonStakingExtension.json' + +export default buildModule('HorizonStakingExtension', (m) => { + const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule) + const { HorizonRegistered } = m.useModule(HorizonProxiesModule) + + const subgraphServiceAddress = m.getParameter('subgraphServiceAddress') + + const ExponentialRebates = m.library('ExponentialRebates', ExponentialRebatesArtifact) + const HorizonStakingExtension = m.contract('HorizonStakingExtension', + HorizonStakingExtensionArtifact, + [Controller, subgraphServiceAddress], { + libraries: { + ExponentialRebates: ExponentialRebates, + }, + after: [PeripheryRegistered, HorizonRegistered], + }) + + return { HorizonStakingExtension } +}) diff --git a/packages/horizon/ignition/modules/core/PaymentsEscrow.ts b/packages/horizon/ignition/modules/core/PaymentsEscrow.ts new file mode 100644 index 000000000..1dbd07088 --- /dev/null +++ b/packages/horizon/ignition/modules/core/PaymentsEscrow.ts @@ -0,0 +1,32 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import GraphPeripheryModule from '../periphery' +import HorizonProxiesModule from './HorizonProxies' + +import PaymentsEscrowArtifact from '../../../build/contracts/contracts/payments/PaymentsEscrow.sol/PaymentsEscrow.json' + +// TODO: transfer ownership of ProxyAdmin??? +export default buildModule('PaymentsEscrow', (m) => { + const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule) + const { PaymentsEscrowProxyAdmin, PaymentsEscrowProxy, HorizonRegistered } = m.useModule(HorizonProxiesModule) + + const revokeCollectorThawingPeriod = m.getParameter('revokeCollectorThawingPeriod') + const withdrawEscrowThawingPeriod = m.getParameter('withdrawEscrowThawingPeriod') + + // Deploy PaymentsEscrow implementation + const PaymentsEscrowImplementation = m.contract('PaymentsEscrow', + PaymentsEscrowArtifact, + [Controller, revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod], + { + after: [PeripheryRegistered, HorizonRegistered], + }, + ) + + // Upgrade proxy to implementation contract + m.call(PaymentsEscrowProxyAdmin, 'upgradeAndCall', [PaymentsEscrowProxy, PaymentsEscrowImplementation, m.encodeFunctionCall(PaymentsEscrowImplementation, 'initialize', [])]) + + // Load contract with implementation ABI + const PaymentsEscrow = m.contractAt('PaymentsEscrow', PaymentsEscrowArtifact, PaymentsEscrowProxy, { id: 'PaymentsEscrow_Instance' }) + + return { PaymentsEscrow } +}) diff --git a/packages/horizon/ignition/modules/core/TAPCollector.ts b/packages/horizon/ignition/modules/core/TAPCollector.ts new file mode 100644 index 000000000..429dc5083 --- /dev/null +++ b/packages/horizon/ignition/modules/core/TAPCollector.ts @@ -0,0 +1,18 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import GraphPeripheryModule from '../periphery' +import HorizonProxiesModule from './HorizonProxies' + +import TAPCollectorArtifact from '../../../build/contracts/contracts/payments/collectors/TAPCollector.sol/TAPCollector.json' + +export default buildModule('TAPCollector', (m) => { + const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule) + const { HorizonRegistered } = m.useModule(HorizonProxiesModule) + + const name = m.getParameter('eip712Name') + const version = m.getParameter('eip712Version') + + const TAPCollector = m.contract('TAPCollector', TAPCollectorArtifact, [name, version, Controller], { after: [PeripheryRegistered, HorizonRegistered] }) + + return { TAPCollector } +}) diff --git a/packages/horizon/ignition/modules/horizon.ts b/packages/horizon/ignition/modules/horizon.ts new file mode 100644 index 000000000..c68ce88b4 --- /dev/null +++ b/packages/horizon/ignition/modules/horizon.ts @@ -0,0 +1,31 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import GraphHorizonCoreModule from './core' +import GraphPeripheryModule from './periphery' + +export default buildModule('GraphHorizon', (m) => { + const { + BridgeEscrow, + Controller, + EpochManager, + GraphProxyAdmin, + GraphTokenGateway, + RewardsManager, + Curation, + } = m.useModule(GraphPeripheryModule) + const { HorizonStaking, GraphPayments, PaymentsEscrow, TAPCollector } = m.useModule(GraphHorizonCoreModule) + + return { + BridgeEscrow, + Controller, + Curation, + EpochManager, + GraphProxyAdmin, + GraphTokenGateway, + RewardsManager, + HorizonStaking, + GraphPayments, + PaymentsEscrow, + TAPCollector, + } +}) diff --git a/packages/horizon/ignition/modules/periphery.ts b/packages/horizon/ignition/modules/periphery.ts new file mode 100644 index 000000000..2c358c74f --- /dev/null +++ b/packages/horizon/ignition/modules/periphery.ts @@ -0,0 +1,57 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' +import { ethers } from 'ethers' + +import BridgeEscrowModule from './periphery/BridgeEscrow' +import ControllerModule from './periphery/Controller' +import CurationModule from './periphery/Curation' +import EpochManagerModule from './periphery/EpochManager' +import GraphProxyAdminModule from './periphery/GraphProxyAdmin' +import GraphTokenGatewayModule from './periphery/GraphTokenGateway' +import GraphTokenModule from './periphery/GraphToken' +import RewardsManagerModule from './periphery/RewardsManager' + +import DummyArtifact from '../../build/contracts/contracts/mocks/Dummy.sol/Dummy.json' + +export default buildModule('GraphHorizon_Periphery', (m) => { + const { BridgeEscrow } = m.useModule(BridgeEscrowModule) + const { Controller } = m.useModule(ControllerModule) + const { EpochManager } = m.useModule(EpochManagerModule) + const { GraphProxyAdmin } = m.useModule(GraphProxyAdminModule) + const { GraphTokenGateway } = m.useModule(GraphTokenGatewayModule) + const { RewardsManager } = m.useModule(RewardsManagerModule) + const { GraphToken } = m.useModule(GraphTokenModule) + const { Curation } = m.useModule(CurationModule) + + // Register contracts in the Controller + const setProxyEpochManager = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('EpochManager')), EpochManager], { id: 'setContractProxy_EpochManager' }) + const setProxyRewardsManager = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('RewardsManager')), RewardsManager], { id: 'setContractProxy_RewardsManager' }) + const setProxyGraphToken = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('GraphToken')), GraphToken], { id: 'setContractProxy_GraphToken' }) + const setProxyGraphTokenGateway = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('GraphTokenGateway')), GraphTokenGateway], { id: 'setContractProxy_GraphTokenGateway' }) + // eslint-disable-next-line no-secrets/no-secrets + const setProxyGraphProxyAdmin = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('GraphProxyAdmin')), GraphProxyAdmin], { id: 'setContractProxy_GraphProxyAdmin' }) + const setProxyCuration = m.call(Controller, 'setContractProxy', [ethers.keccak256(ethers.toUtf8Bytes('Curation')), Curation], { id: 'setContractProxy_Curation' }) + + // Deploy dummy contract to signal that all periphery contracts are registered + const PeripheryRegistered = m.contract('Dummy', DummyArtifact, [], { + after: [ + setProxyEpochManager, + setProxyRewardsManager, + setProxyGraphToken, + setProxyGraphTokenGateway, + setProxyGraphProxyAdmin, + setProxyCuration, + ], + }) + + return { + BridgeEscrow, + Controller, + Curation, + EpochManager, + GraphProxyAdmin, + GraphToken, + GraphTokenGateway, + RewardsManager, + PeripheryRegistered, + } +}) diff --git a/packages/horizon/ignition/modules/periphery/BridgeEscrow.ts b/packages/horizon/ignition/modules/periphery/BridgeEscrow.ts new file mode 100644 index 000000000..6d9dd32ee --- /dev/null +++ b/packages/horizon/ignition/modules/periphery/BridgeEscrow.ts @@ -0,0 +1,18 @@ +import { buildModule } from '@nomicfoundation/ignition-core' + +import { deployWithGraphProxy } from '../proxy/GraphProxy' + +import BridgeEscrowArtifact from '@graphprotocol/contracts/build/contracts/contracts/gateway/BridgeEscrow.sol/BridgeEscrow.json' +import ControllerModule from '../periphery/Controller' + +export default buildModule('BridgeEscrow', (m) => { + const { Controller } = m.useModule(ControllerModule) + + const { instance: BridgeEscrow } = deployWithGraphProxy(m, { + name: 'BridgeEscrow', + artifact: BridgeEscrowArtifact, + args: [Controller], + }) + + return { BridgeEscrow } +}) diff --git a/packages/horizon/ignition/modules/periphery/Controller.ts b/packages/horizon/ignition/modules/periphery/Controller.ts new file mode 100644 index 000000000..41a3e6484 --- /dev/null +++ b/packages/horizon/ignition/modules/periphery/Controller.ts @@ -0,0 +1,17 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import ControllerArtifact from '@graphprotocol/contracts/build/contracts/contracts/governance/Controller.sol/Controller.json' + +// TODO: Ownership transfer is a two step process, the new owner needs to accept it by calling acceptOwnership +export default buildModule('Controller', (m) => { + const governor = m.getParameter('governor') + const pauseGuardian = m.getParameter('pauseGuardian') + + const Controller = m.contract('Controller', ControllerArtifact) + + m.call(Controller, 'setPauseGuardian', [pauseGuardian]) + m.call(Controller, 'transferOwnership', [governor]) + m.call(Controller, 'setPaused', [false]) + + return { Controller } +}) diff --git a/packages/horizon/ignition/modules/periphery/Curation.ts b/packages/horizon/ignition/modules/periphery/Curation.ts new file mode 100644 index 000000000..2a1516168 --- /dev/null +++ b/packages/horizon/ignition/modules/periphery/Curation.ts @@ -0,0 +1,23 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' +import { deployWithGraphProxy } from '../proxy/GraphProxy' + +import ControllerModule from './Controller' +import CurationArtifact from '@graphprotocol/contracts/build/contracts/contracts/l2/curation/L2Curation.sol/L2Curation.json' +import GraphCurationTokenArtifact from '@graphprotocol/contracts/build/contracts/contracts/curation/GraphCurationToken.sol/GraphCurationToken.json' + +export default buildModule('Curation', (m) => { + const { Controller } = m.useModule(ControllerModule) + + const curationTaxPercentage = m.getParameter('curationTaxPercentage') + const minimumCurationDeposit = m.getParameter('minimumCurationDeposit') + + const GraphCurationToken = m.contract('GraphCurationToken', GraphCurationTokenArtifact, []) + + const { instance: Curation } = deployWithGraphProxy(m, { + name: 'Curation', + artifact: CurationArtifact, + args: [Controller, GraphCurationToken, curationTaxPercentage, minimumCurationDeposit], + }) + + return { Curation } +}) diff --git a/packages/horizon/ignition/modules/periphery/EpochManager.ts b/packages/horizon/ignition/modules/periphery/EpochManager.ts new file mode 100644 index 000000000..e05792171 --- /dev/null +++ b/packages/horizon/ignition/modules/periphery/EpochManager.ts @@ -0,0 +1,19 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' +import { deployWithGraphProxy } from '../proxy/GraphProxy' + +import ControllerModule from './Controller' +import EpochManagerArtifact from '@graphprotocol/contracts/build/contracts/contracts/epochs/EpochManager.sol/EpochManager.json' + +export default buildModule('EpochManager', (m) => { + const { Controller } = m.useModule(ControllerModule) + + const epochLength = m.getParameter('epochLength') + + const { instance: EpochManager } = deployWithGraphProxy(m, { + name: 'EpochManager', + artifact: EpochManagerArtifact, + args: [Controller, epochLength], + }) + + return { EpochManager } +}) diff --git a/packages/horizon/ignition/modules/periphery/GraphProxyAdmin.ts b/packages/horizon/ignition/modules/periphery/GraphProxyAdmin.ts new file mode 100644 index 000000000..8715316c8 --- /dev/null +++ b/packages/horizon/ignition/modules/periphery/GraphProxyAdmin.ts @@ -0,0 +1,13 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import GraphProxyAdminArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxyAdmin.sol/GraphProxyAdmin.json' + +// TODO: Ownership transfer is a two step process, the new owner needs to accept it by calling acceptOwnership +export default buildModule('GraphProxyAdmin', (m) => { + const governor = m.getParameter('governor') + const GraphProxyAdmin = m.contract('GraphProxyAdmin', GraphProxyAdminArtifact) + + m.call(GraphProxyAdmin, 'transferOwnership', [governor]) + + return { GraphProxyAdmin } +}) diff --git a/packages/horizon/ignition/modules/periphery/GraphToken.ts b/packages/horizon/ignition/modules/periphery/GraphToken.ts new file mode 100644 index 000000000..955d95edb --- /dev/null +++ b/packages/horizon/ignition/modules/periphery/GraphToken.ts @@ -0,0 +1,33 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' +import { deployWithGraphProxy } from '../proxy/GraphProxy' + +import GraphTokenGatewayModule from '../periphery/GraphTokenGateway' +import RewardsManagerModule from '../periphery/RewardsManager' + +import GraphTokenArtifact from '@graphprotocol/contracts/build/contracts/contracts/l2/token/L2GraphToken.sol/L2GraphToken.json' + +// TODO: Ownership transfer is a two step process, the new owner needs to accept it by calling acceptOwnership +export default buildModule('GraphToken', (m) => { + const { RewardsManager } = m.useModule(RewardsManagerModule) + const { GraphTokenGateway } = m.useModule(GraphTokenGatewayModule) + + const deployer = m.getAccount(0) + const governor = m.getParameter('governor') + const initialSupply = m.getParameter('initialSupply') + + const { instance: GraphToken } = deployWithGraphProxy(m, { + name: 'GraphToken', + artifact: GraphTokenArtifact, + args: [deployer], + }) + + // TODO: move this mint to a testnet only module + // Note that this next mint would only be done in L1 + m.call(GraphToken, 'mint', [deployer, initialSupply]) + m.call(GraphToken, 'renounceMinter', []) + m.call(GraphToken, 'addMinter', [RewardsManager], { id: 'addMinterRewardsManager' }) + m.call(GraphToken, 'addMinter', [GraphTokenGateway], { id: 'addMinterGateway' }) + m.call(GraphToken, 'transferOwnership', [governor]) + + return { GraphToken } +}) diff --git a/packages/horizon/ignition/modules/periphery/GraphTokenGateway.ts b/packages/horizon/ignition/modules/periphery/GraphTokenGateway.ts new file mode 100644 index 000000000..2bb13a78e --- /dev/null +++ b/packages/horizon/ignition/modules/periphery/GraphTokenGateway.ts @@ -0,0 +1,22 @@ +import { buildModule } from '@nomicfoundation/ignition-core' + +import { deployWithGraphProxy } from '../proxy/GraphProxy' + +import ControllerModule from '../periphery/Controller' +import GraphTokenGatewayArtifact from '@graphprotocol/contracts/build/contracts/contracts/l2/gateway/L2GraphTokenGateway.sol/L2GraphTokenGateway.json' + +export default buildModule('GraphTokenGateway', (m) => { + const { Controller } = m.useModule(ControllerModule) + + const pauseGuardian = m.getParameter('pauseGuardian') + + const { instance: GraphTokenGateway } = deployWithGraphProxy(m, { + name: 'GraphTokenGateway', + artifact: GraphTokenGatewayArtifact, + args: [Controller], + }) + + m.call(GraphTokenGateway, 'setPauseGuardian', [pauseGuardian]) + + return { GraphTokenGateway } +}) diff --git a/packages/horizon/ignition/modules/periphery/RewardsManager.ts b/packages/horizon/ignition/modules/periphery/RewardsManager.ts new file mode 100644 index 000000000..3773933e9 --- /dev/null +++ b/packages/horizon/ignition/modules/periphery/RewardsManager.ts @@ -0,0 +1,26 @@ +import { buildModule } from '@nomicfoundation/ignition-core' + +import { deployWithGraphProxy } from '../proxy/GraphProxy' + +import ControllerModule from '../periphery/Controller' +import RewardsManagerArtifact from '@graphprotocol/contracts/build/contracts/contracts/rewards/RewardsManager.sol/RewardsManager.json' + +export default buildModule('RewardsManager', (m) => { + const { Controller } = m.useModule(ControllerModule) + + const issuancePerBlock = m.getParameter('issuancePerBlock') + const subgraphAvailabilityOracle = m.getParameter('subgraphAvailabilityOracle') + const subgraphServiceAddress = m.getParameter('subgraphServiceAddress') + + const { instance: RewardsManager } = deployWithGraphProxy(m, { + name: 'RewardsManager', + artifact: RewardsManagerArtifact, + args: [Controller], + }) + + m.call(RewardsManager, 'setSubgraphAvailabilityOracle', [subgraphAvailabilityOracle]) + m.call(RewardsManager, 'setIssuancePerBlock', [issuancePerBlock]) + m.call(RewardsManager, 'setSubgraphService', [subgraphServiceAddress]) + + return { RewardsManager } +}) diff --git a/packages/horizon/ignition/modules/proxy/GraphProxy.ts b/packages/horizon/ignition/modules/proxy/GraphProxy.ts new file mode 100644 index 000000000..85455977f --- /dev/null +++ b/packages/horizon/ignition/modules/proxy/GraphProxy.ts @@ -0,0 +1,36 @@ +import { ArgumentType, Artifact, ContractOptions, IgnitionModuleBuilder } from '@nomicfoundation/ignition-core' + +import GraphProxyAdminModule from '../periphery/GraphProxyAdmin' +import GraphProxyArtifact from '@graphprotocol/contracts/build/contracts/contracts/upgrades/GraphProxy.sol/GraphProxy.json' + +export function deployWithGraphProxy(m: IgnitionModuleBuilder, contract: { name: string, artifact?: Artifact, args?: ArgumentType[] }, options?: ContractOptions) { + const { GraphProxyAdmin } = m.useModule(GraphProxyAdminModule) + + options = options || {} + + // Deploy implementation + let implementation + if (contract.artifact === undefined) { + implementation = m.contract(contract.name, [], options) + } else { + implementation = m.contract(contract.name, contract.artifact, [], options) + } + + // Deploy proxy and initialize + const proxy = m.contract('GraphProxy', GraphProxyArtifact, [implementation, GraphProxyAdmin], options) + if (contract.args === undefined) { + m.call(GraphProxyAdmin, 'acceptProxy', [implementation, proxy], options) + } else { + m.call(GraphProxyAdmin, 'acceptProxyAndCall', [implementation, proxy, m.encodeFunctionCall(implementation, 'initialize', contract.args)], options) + } + + // Load proxy with implementation ABI + let instance + if (contract.artifact === undefined) { + instance = m.contractAt(contract.name, proxy, options) + } else { + instance = m.contractAt(`${contract.name}_Instance`, contract.artifact, proxy, options) + } + + return { proxy, implementation, instance } +} diff --git a/packages/horizon/ignition/modules/proxy/TransparentUpgradeableProxy.ts b/packages/horizon/ignition/modules/proxy/TransparentUpgradeableProxy.ts new file mode 100644 index 000000000..6de1f28ee --- /dev/null +++ b/packages/horizon/ignition/modules/proxy/TransparentUpgradeableProxy.ts @@ -0,0 +1,33 @@ +import { IgnitionModuleBuilder } from '@nomicfoundation/ignition-core' + +import DummyArtifact from '../../../build/contracts/contracts/mocks/Dummy.sol/Dummy.json' +import ProxyAdminArtifact from '@openzeppelin/contracts/build/contracts/ProxyAdmin.json' +import TransparentUpgradeableProxyArtifact from '@openzeppelin/contracts/build/contracts/TransparentUpgradeableProxy.json' + +// Deploy a TransparentUpgradeableProxy +// Note that this module uses a dummy contract as the implementation as the proxy requires a valid contract +// address to be deployed +export function deployWithOZProxy(m: IgnitionModuleBuilder, contractName: string) { + const deployer = m.getAccount(0) + + const dummy = m.contract('Dummy', DummyArtifact, [], { id: `OZProxyDummy_${contractName}` }) + const Proxy = m.contract('TransparentUpgradeableProxy', TransparentUpgradeableProxyArtifact, [ + dummy, + deployer, + '0x', + ], + { id: `TransparentUpgradeableProxy_${contractName}` }) + + const proxyAdminAddress = m.readEventArgument( + Proxy, + 'AdminChanged', + 'newAdmin', + { + id: `TransparentUpgradeableProxy_${contractName}_AdminChanged`, + }, + ) + + const ProxyAdmin = m.contractAt('ProxyAdmin', ProxyAdminArtifact, proxyAdminAddress, { id: `ProxyAdmin_${contractName}` }) + + return { ProxyAdmin, Proxy } +} diff --git a/packages/horizon/package.json b/packages/horizon/package.json index 064e7e1db..4c6624051 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -9,17 +9,20 @@ "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build cache typechain-types", - "build": "forge build contracts && hardhat compile", - "test": "FOUNDRY_PROFILE=test forge test -vvv && hardhat test" + "build": "forge build && hardhat compile", + "test": "forge test && hardhat test" }, "devDependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-foundry": "^1.1.1", + "@nomicfoundation/hardhat-ignition": "^0.15.5", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.10", + "@nomicfoundation/ignition-core": "^0.15.5", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", "@typechain/ethers-v6": "^0.5.0", @@ -30,7 +33,7 @@ "chai": "^4.2.0", "eslint": "^8.56.0", "eslint-graph-config": "workspace:^0.0.1", - "ethers": "^6.4.0", + "ethers": "^6.13.2", "hardhat": "^2.20.1", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.8", diff --git a/packages/horizon/scripts/deploy.ts b/packages/horizon/scripts/deploy.ts new file mode 100644 index 000000000..a7daff3d4 --- /dev/null +++ b/packages/horizon/scripts/deploy.ts @@ -0,0 +1,16 @@ +import { ignition } from 'hardhat' + +import Parameters from '../ignition/graph.hardhat.json' +import PeripheryModule from '../ignition/modules/periphery' + +async function main() { + await ignition.deploy(PeripheryModule, { + parameters: Parameters, + }) +} + +main() + .catch((error) => { + console.error(error) + process.exit(1) + }) diff --git a/packages/horizon/tsconfig.json b/packages/horizon/tsconfig.json index 143316f16..8de96f814 100644 --- a/packages/horizon/tsconfig.json +++ b/packages/horizon/tsconfig.json @@ -12,6 +12,7 @@ "hardhat.config.ts", "scripts/**/*.ts", "test/**/*.ts", + "ignition/**/*.ts", "eslint.config.js", "prettier.config.js" ] diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts index 17ebc2053..1e2dfc9fd 100644 --- a/packages/subgraph-service/hardhat.config.ts +++ b/packages/subgraph-service/hardhat.config.ts @@ -1,4 +1,5 @@ import '@nomicfoundation/hardhat-foundry' +import '@nomicfoundation/hardhat-ignition-ethers' import '@nomicfoundation/hardhat-toolbox' import 'hardhat-contract-sizer' import 'hardhat-storage-layout' @@ -10,7 +11,6 @@ const config: HardhatUserConfig = { solidity: { version: '0.8.27', settings: { - viaIR: true, optimizer: { enabled: true, runs: 200, diff --git a/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json b/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json new file mode 100644 index 000000000..83dfa1899 --- /dev/null +++ b/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json @@ -0,0 +1,13 @@ +{ + "DisputeManager": { + "arbitrator": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0", + "disputePeriod": 2419200, + "disputeDeposit": "10000000000000000000000n", + "fishermanRewardCut": 500000, + "maxSlashingCut": 1000000 + }, + "SubgraphService": { + "minimumProvisionTokens": "100000000000000000000000n", + "maximumDelegationRatio": 16 + } +} diff --git a/packages/subgraph-service/ignition/modules/DisputeManager.ts b/packages/subgraph-service/ignition/modules/DisputeManager.ts new file mode 100644 index 000000000..ff3921eca --- /dev/null +++ b/packages/subgraph-service/ignition/modules/DisputeManager.ts @@ -0,0 +1,36 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import ProxyAdminArtifact from '@openzeppelin/contracts/build/contracts/ProxyAdmin.json' + +// TODO: transfer ownership of ProxyAdmin??? +export default buildModule('DisputeManager', (m) => { + // Parameters - dynamically plugged in by the deploy script + const controllerAddress = m.getParameter('controllerAddress') + const disputeManagerProxyAddress = m.getParameter('disputeManagerProxyAddress') + const disputeManagerProxyAdminAddress = m.getParameter('disputeManagerProxyAdminAddress') + + // Parameters - config file + const arbitrator = m.getParameter('arbitrator') + const disputePeriod = m.getParameter('disputePeriod') + const disputeDeposit = m.getParameter('disputeDeposit') + const fishermanRewardCut = m.getParameter('fishermanRewardCut') + const maxSlashingCut = m.getParameter('maxSlashingCut') + + // Deploy implementation + const DisputeManagerImplementation = m.contract('DisputeManager', [controllerAddress]) + + // Upgrade implementation + const DisputeManagerProxyAdmin = m.contractAt('TransparentUpgradeableProxy', ProxyAdminArtifact, disputeManagerProxyAdminAddress) + const encodedCall = m.encodeFunctionCall(DisputeManagerImplementation, 'initialize', [ + arbitrator, + disputePeriod, + disputeDeposit, + fishermanRewardCut, + maxSlashingCut, + ]) + m.call(DisputeManagerProxyAdmin, 'upgradeAndCall', [disputeManagerProxyAddress, DisputeManagerImplementation, encodedCall]) + + const DisputeManager = m.contractAt('DisputeManager', disputeManagerProxyAddress, { id: 'DisputeManager_Instance' }) + + return { DisputeManager, DisputeManagerImplementation } +}) diff --git a/packages/subgraph-service/ignition/modules/Proxies.ts b/packages/subgraph-service/ignition/modules/Proxies.ts new file mode 100644 index 000000000..3ae5168b4 --- /dev/null +++ b/packages/subgraph-service/ignition/modules/Proxies.ts @@ -0,0 +1,10 @@ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' +import { deployWithOZProxy } from '@graphprotocol/horizon/ignition/modules/proxy/TransparentUpgradeableProxy' + +export default buildModule('SubgraphServiceProxies', (m) => { + // Deploy proxies contracts using OZ TransparentUpgradeableProxy + const { Proxy: DisputeManagerProxy, ProxyAdmin: DisputeManagerProxyAdmin } = deployWithOZProxy(m, 'DisputeManager') + const { Proxy: SubgraphServiceProxy, ProxyAdmin: SubgraphServiceProxyAdmin } = deployWithOZProxy(m, 'SubgraphService') + + return { DisputeManagerProxy, DisputeManagerProxyAdmin, SubgraphServiceProxy, SubgraphServiceProxyAdmin } +}) diff --git a/packages/subgraph-service/ignition/modules/SubgraphService.ts b/packages/subgraph-service/ignition/modules/SubgraphService.ts new file mode 100644 index 000000000..783cd7d15 --- /dev/null +++ b/packages/subgraph-service/ignition/modules/SubgraphService.ts @@ -0,0 +1,34 @@ +/* eslint-disable no-secrets/no-secrets */ +import { buildModule } from '@nomicfoundation/hardhat-ignition/modules' + +import ProxyAdminArtifact from '@openzeppelin/contracts/build/contracts/ProxyAdmin.json' + +// TODO: transfer ownership of ProxyAdmin??? +export default buildModule('SubgraphService', (m) => { + // Parameters - dynamically plugged in by the deploy script + const controllerAddress = m.getParameter('controllerAddress') + const subgraphServiceProxyAddress = m.getParameter('subgraphServiceProxyAddress') + const subgraphServiceProxyAdminAddress = m.getParameter('subgraphServiceProxyAdminAddress') + const disputeManagerAddress = m.getParameter('disputeManagerAddress') + const tapCollectorAddress = m.getParameter('tapCollectorAddress') + const curationAddress = m.getParameter('curationAddress') + + // Parameters - config file + const minimumProvisionTokens = m.getParameter('minimumProvisionTokens') + const maximumDelegationRatio = m.getParameter('maximumDelegationRatio') + + // Deploy implementation + const SubgraphServiceImplementation = m.contract('SubgraphService', [controllerAddress, disputeManagerAddress, tapCollectorAddress, curationAddress]) + + // Upgrade implementation + const SubgraphServiceProxyAdmin = m.contractAt('TransparentUpgradeableProxy', ProxyAdminArtifact, subgraphServiceProxyAdminAddress) + const encodedCall = m.encodeFunctionCall(SubgraphServiceImplementation, 'initialize', [ + minimumProvisionTokens, + maximumDelegationRatio, + ]) + m.call(SubgraphServiceProxyAdmin, 'upgradeAndCall', [subgraphServiceProxyAddress, SubgraphServiceImplementation, encodedCall]) + + const SubgraphService = m.contractAt('SubgraphService', subgraphServiceProxyAddress, { id: 'SubgraphService_Instance' }) + + return { SubgraphService, SubgraphServiceImplementation } +}) diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index bb5dd9ea9..419d5f160 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -16,11 +16,14 @@ "@graphprotocol/contracts": "workspace:^7.0.0", "@graphprotocol/horizon": "workspace:^0.0.1", "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-foundry": "^1.1.1", + "@nomicfoundation/hardhat-ignition": "^0.15.5", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.10", + "@nomicfoundation/ignition-core": "^0.15.5", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", "@typechain/ethers-v6": "^0.5.0", @@ -31,7 +34,7 @@ "chai": "^4.2.0", "eslint": "^8.56.0", "eslint-graph-config": "workspace:^0.0.1", - "ethers": "^6.4.0", + "ethers": "^6.13.2", "hardhat": "^2.20.1", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.8", diff --git a/packages/subgraph-service/scripts/deploy.ts b/packages/subgraph-service/scripts/deploy.ts index cf87ff10f..17ff2feb2 100644 --- a/packages/subgraph-service/scripts/deploy.ts +++ b/packages/subgraph-service/scripts/deploy.ts @@ -1,28 +1,107 @@ -import { ethers } from 'hardhat' +/* eslint-disable no-prototype-builtins */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { ignition } from 'hardhat' +import DisputeManagerModule from '../ignition/modules/DisputeManager' +import HorizonModule from '@graphprotocol/horizon/ignition/modules/horizon' +import SubgraphServiceModule from '../ignition/modules/SubgraphService' +import SubgraphServiceProxiesModule from '../ignition/modules/Proxies' + +// Horizon needs the SubgraphService proxy address before it can be deployed +// But SubgraphService and DisputeManager implementations need Horizon... +// So the deployment order is: +// - Deploy SubgraphService and DisputeManager proxies +// - Deploy Horizon +// - Deploy SubgraphService and DisputeManager implementations async function main() { - const currentTimestampInSeconds = Math.round(Date.now() / 1000) - const unlockTime = currentTimestampInSeconds + 60 - - const lockedAmount = ethers.parseEther('0.001') - const a = 1 - console.log(a) - const lock = await ethers.deployContract('Lock', [unlockTime], { - value: lockedAmount, + // TODO: Dynamically load config file based on the hardhat --network value + const HorizonConfig = removeNFromBigInts(require('@graphprotocol/horizon/ignition/configs/horizon.hardhat.json')) + const SubgraphServiceConfig = removeNFromBigInts(require('../ignition/configs/subgraph-service.hardhat.json')) + + // Deploy proxies + const { DisputeManagerProxy, DisputeManagerProxyAdmin, SubgraphServiceProxy, SubgraphServiceProxyAdmin } = await ignition.deploy(SubgraphServiceProxiesModule) + + // Deploy Horizon + const { Controller, TAPCollector, Curation } = await ignition.deploy(HorizonModule, { + parameters: patchSubgraphServiceAddress(HorizonConfig, SubgraphServiceProxy.target as string), }) - await lock.waitForDeployment() + // Deploy DisputeManager implementation + await ignition.deploy(DisputeManagerModule, { + parameters: deepMerge(SubgraphServiceConfig, { + DisputeManager: { + controllerAddress: Controller.target as string, + disputeManagerProxyAddress: DisputeManagerProxy.target as string, + disputeManagerProxyAdminAddress: DisputeManagerProxyAdmin.target as string, + }, + }), + }) - console.log( - `Lock with ${ethers.formatEther( - lockedAmount, - )}ETH and unlock timestamp ${unlockTime} deployed to ${typeof lock.target == 'string' ? lock.target : ''}`, - ) + // Deploy SubgraphService implementation + await ignition.deploy(SubgraphServiceModule, { + parameters: deepMerge(SubgraphServiceConfig, { + SubgraphService: { + controllerAddress: Controller.target as string, + subgraphServiceProxyAddress: SubgraphServiceProxy.target as string, + subgraphServiceProxyAdminAddress: SubgraphServiceProxyAdmin.target as string, + disputeManagerAddress: DisputeManagerProxy.target as string, + tapCollectorAddress: TAPCollector.target as string, + curationAddress: Curation.target as string, + }, + }), + }) } - -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. main().catch((error) => { console.error(error) - process.exitCode = 1 + process.exit(1) }) + +// -- Auxiliary functions - by GPT -- +function patchSubgraphServiceAddress(jsonData: any, newAddress: string) { + function recursivePatch(obj: any) { + if (typeof obj === 'object' && obj !== null) { + for (const key in obj) { + if (key === 'subgraphServiceAddress') { + obj[key] = newAddress + } else { + recursivePatch(obj[key]) + } + } + } + } + + recursivePatch(jsonData) + return jsonData +} + +function removeNFromBigInts(obj: any): any { + // Ignition requires "n" suffix for bigints, but not here + if (typeof obj === 'string') { + return obj.replace(/(\d+)n/g, '$1') + } else if (Array.isArray(obj)) { + return obj.map(removeNFromBigInts) + } else if (typeof obj === 'object' && obj !== null) { + for (const key in obj) { + obj[key] = removeNFromBigInts(obj[key]) + } + } + return obj +} + +function deepMerge(obj1: any, obj2: any) { + const merged = { ...obj1 } + + for (const key in obj2) { + if (obj2.hasOwnProperty(key)) { + if (typeof obj2[key] === 'object' && obj2[key] !== null && obj1[key]) { + merged[key] = deepMerge(obj1[key], obj2[key]) + } else { + merged[key] = obj2[key] + } + } + } + + return merged +} diff --git a/packages/subgraph-service/tsconfig.json b/packages/subgraph-service/tsconfig.json index adee669ce..8de96f814 100644 --- a/packages/subgraph-service/tsconfig.json +++ b/packages/subgraph-service/tsconfig.json @@ -10,9 +10,10 @@ }, "include": [ "hardhat.config.ts", - "prettier.config.js", "scripts/**/*.ts", "test/**/*.ts", - "eslint.config.js" + "ignition/**/*.ts", + "eslint.config.js", + "prettier.config.js" ] } diff --git a/yarn.lock b/yarn.lock index 4d5746433..4cfd396f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1843,6 +1843,19 @@ __metadata: languageName: node linkType: hard +"@ethersproject/address@npm:5.6.1": + version: 5.6.1 + resolution: "@ethersproject/address@npm:5.6.1" + dependencies: + "@ethersproject/bignumber": "npm:^5.6.2" + "@ethersproject/bytes": "npm:^5.6.1" + "@ethersproject/keccak256": "npm:^5.6.1" + "@ethersproject/logger": "npm:^5.6.0" + "@ethersproject/rlp": "npm:^5.6.1" + checksum: 7ac29a0abcb9970c6f5f9a2d2e8247d3c433ee9a022861cbf4f8d437f095a5293f3d323b8ec3433df622364071232b227248f1ac04c4ddea353bf18e2e4d76cf + languageName: node + linkType: hard + "@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:>=5.0.0-beta.128, @ethersproject/address@npm:^5.0.0, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.0.8, @ethersproject/address@npm:^5.6.0, @ethersproject/address@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/address@npm:5.7.0" @@ -1905,7 +1918,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:>=5.0.0-beta.130, @ethersproject/bignumber@npm:^5.0.0, @ethersproject/bignumber@npm:^5.1.1, @ethersproject/bignumber@npm:^5.6.0, @ethersproject/bignumber@npm:^5.7.0": +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:>=5.0.0-beta.130, @ethersproject/bignumber@npm:^5.0.0, @ethersproject/bignumber@npm:^5.1.1, @ethersproject/bignumber@npm:^5.6.0, @ethersproject/bignumber@npm:^5.6.2, @ethersproject/bignumber@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/bignumber@npm:5.7.0" dependencies: @@ -1925,7 +1938,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:>=5.0.0-beta.129, @ethersproject/bytes@npm:^5.0.0, @ethersproject/bytes@npm:^5.0.8, @ethersproject/bytes@npm:^5.6.0, @ethersproject/bytes@npm:^5.7.0": +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:>=5.0.0-beta.129, @ethersproject/bytes@npm:^5.0.0, @ethersproject/bytes@npm:^5.0.8, @ethersproject/bytes@npm:^5.6.0, @ethersproject/bytes@npm:^5.6.1, @ethersproject/bytes@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/bytes@npm:5.7.0" dependencies: @@ -2124,7 +2137,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:>=5.0.0-beta.127, @ethersproject/keccak256@npm:^5.6.0, @ethersproject/keccak256@npm:^5.7.0": +"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:>=5.0.0-beta.127, @ethersproject/keccak256@npm:^5.6.0, @ethersproject/keccak256@npm:^5.6.1, @ethersproject/keccak256@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/keccak256@npm:5.7.0" dependencies: @@ -2326,7 +2339,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.6.0, @ethersproject/rlp@npm:^5.7.0": +"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.6.0, @ethersproject/rlp@npm:^5.6.1, @ethersproject/rlp@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/rlp@npm:5.7.0" dependencies: @@ -2918,11 +2931,14 @@ __metadata: dependencies: "@graphprotocol/contracts": "workspace:^7.0.0" "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" - "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" + "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" + "@nomicfoundation/hardhat-ignition": "npm:^0.15.5" + "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.5" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" - "@nomicfoundation/hardhat-verify": "npm:^2.0.0" + "@nomicfoundation/hardhat-verify": "npm:^2.0.10" + "@nomicfoundation/ignition-core": "npm:^0.15.5" "@openzeppelin/contracts": "npm:^5.0.2" "@openzeppelin/contracts-upgradeable": "npm:^5.0.2" "@typechain/ethers-v6": "npm:^0.5.0" @@ -2933,7 +2949,7 @@ __metadata: chai: "npm:^4.2.0" eslint: "npm:^8.56.0" eslint-graph-config: "workspace:^0.0.1" - ethers: "npm:^6.4.0" + ethers: "npm:^6.13.2" hardhat: "npm:^2.20.1" hardhat-contract-sizer: "npm:^2.10.0" hardhat-gas-reporter: "npm:^1.0.8" @@ -3008,11 +3024,14 @@ __metadata: "@graphprotocol/contracts": "workspace:^7.0.0" "@graphprotocol/horizon": "workspace:^0.0.1" "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" - "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" + "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" + "@nomicfoundation/hardhat-ignition": "npm:^0.15.5" + "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.5" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" - "@nomicfoundation/hardhat-verify": "npm:^2.0.0" + "@nomicfoundation/hardhat-verify": "npm:^2.0.10" + "@nomicfoundation/ignition-core": "npm:^0.15.5" "@openzeppelin/contracts": "npm:^5.0.2" "@openzeppelin/contracts-upgradeable": "npm:^5.0.2" "@typechain/ethers-v6": "npm:^0.5.0" @@ -3023,7 +3042,7 @@ __metadata: chai: "npm:^4.2.0" eslint: "npm:^8.56.0" eslint-graph-config: "workspace:^0.0.1" - ethers: "npm:^6.4.0" + ethers: "npm:^6.13.2" hardhat: "npm:^2.20.1" hardhat-contract-sizer: "npm:^2.10.0" hardhat-gas-reporter: "npm:^1.0.8" @@ -4634,16 +4653,16 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/hardhat-ethers@npm:^3.0.0": - version: 3.0.6 - resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.6" +"@nomicfoundation/hardhat-ethers@npm:^3.0.8": + version: 3.0.8 + resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.8" dependencies: debug: "npm:^4.1.1" lodash.isequal: "npm:^4.5.0" peerDependencies: ethers: ^6.1.0 hardhat: ^2.0.0 - checksum: c7abe4234fae6422a357ef9e959cfe4183d5d7121d18e9f71b1659944419fde7d2a0290cd42fd5e85d855d8c83b86bbaed316f4950f0976015f941d958679a99 + checksum: 478b5d9607e7fc50377bec45ecebbf74240719c76aa08c81052d2a2174eee6f422db8cfd3f13fd17a080d8ff1046fac50dfffa3a2e57c9e3ed466932239e4af2 languageName: node linkType: hard @@ -4658,6 +4677,36 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/hardhat-ignition-ethers@npm:^0.15.5": + version: 0.15.5 + resolution: "@nomicfoundation/hardhat-ignition-ethers@npm:0.15.5" + peerDependencies: + "@nomicfoundation/hardhat-ethers": ^3.0.4 + "@nomicfoundation/hardhat-ignition": ^0.15.5 + "@nomicfoundation/ignition-core": ^0.15.5 + ethers: ^6.7.0 + hardhat: ^2.18.0 + checksum: 19f0e029a580dd4d27048f1e87f8111532684cf7f0a2b5c8d6ae8d811ff489629305e3a616cb89702421142c7c628f1efa389781414de1279689018c463cce60 + languageName: node + linkType: hard + +"@nomicfoundation/hardhat-ignition@npm:^0.15.5": + version: 0.15.5 + resolution: "@nomicfoundation/hardhat-ignition@npm:0.15.5" + dependencies: + "@nomicfoundation/ignition-core": "npm:^0.15.5" + "@nomicfoundation/ignition-ui": "npm:^0.15.5" + chalk: "npm:^4.0.0" + debug: "npm:^4.3.2" + fs-extra: "npm:^10.0.0" + prompts: "npm:^2.4.2" + peerDependencies: + "@nomicfoundation/hardhat-verify": ^2.0.1 + hardhat: ^2.18.0 + checksum: b3d9755f2bf89157b6ae0cb6cebea264f76f556ae0b3fc5a62afb5e0f6ed70b3d82d8f692b1c49b2ef2d60cdb45ee28fb148cfca1aa5a53bfe37772c71e75a08 + languageName: node + linkType: hard + "@nomicfoundation/hardhat-network-helpers@npm:^1.0.0, @nomicfoundation/hardhat-network-helpers@npm:^1.0.9": version: 1.0.10 resolution: "@nomicfoundation/hardhat-network-helpers@npm:1.0.10" @@ -4694,9 +4743,9 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/hardhat-verify@npm:^2.0.0": - version: 2.0.7 - resolution: "@nomicfoundation/hardhat-verify@npm:2.0.7" +"@nomicfoundation/hardhat-verify@npm:^2.0.10": + version: 2.0.10 + resolution: "@nomicfoundation/hardhat-verify@npm:2.0.10" dependencies: "@ethersproject/abi": "npm:^5.1.2" "@ethersproject/address": "npm:^5.0.2" @@ -4709,7 +4758,31 @@ __metadata: undici: "npm:^5.14.0" peerDependencies: hardhat: ^2.0.4 - checksum: a6b3b89d3d2a594c44b50832840deefd3261b158bde774319322859077637f656c2e436af21ca3ce10d60eac78e3a1fbfea02abfe20a4729f97b4f30515524a6 + checksum: c5b8e214f2dcdda0530dbb338f65e01bbb6e6b0f96930a88c01b1d1cf2def3f470e0bdb362807bb9a7dbe8216f937b55d14ab251d3cccd2208d6b60cebf2c358 + languageName: node + linkType: hard + +"@nomicfoundation/ignition-core@npm:^0.15.5": + version: 0.15.5 + resolution: "@nomicfoundation/ignition-core@npm:0.15.5" + dependencies: + "@ethersproject/address": "npm:5.6.1" + "@nomicfoundation/solidity-analyzer": "npm:^0.1.1" + cbor: "npm:^9.0.0" + debug: "npm:^4.3.2" + ethers: "npm:^6.7.0" + fs-extra: "npm:^10.0.0" + immer: "npm:10.0.2" + lodash: "npm:4.17.21" + ndjson: "npm:2.0.0" + checksum: ff14724d8e992dc54291da6e6a864f6b3db268b6725d0af6ecbf3f81ed65f6824441421b23129d118cd772efc8ab0275d1decf203019cb3049a48b37f9c15432 + languageName: node + linkType: hard + +"@nomicfoundation/ignition-ui@npm:^0.15.5": + version: 0.15.5 + resolution: "@nomicfoundation/ignition-ui@npm:0.15.5" + checksum: 7d10e30c3078731e4feb91bd7959dfb5a0eeac6f34f6261fada2bf330ff8057ecd576ce0fb3fe856867af2d7c67f31bd75a896110b58d93ff3f27f04f6771278 languageName: node linkType: hard @@ -4720,6 +4793,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.2" + checksum: ef3b13bb2133fea6621db98f991036a3a84d2b240160edec50beafa6ce821fe2f0f5cd4aa61adb9685aff60cd0425982ffd15e0b868b7c768e90e26b8135b825 + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1" @@ -4727,6 +4807,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.2" + checksum: 3cb6a00cd200b94efd6f59ed626c705c6f773b92ccf8b90471285cd0e81b35f01edb30c1aa5a4633393c2adb8f20fd34e90c51990dc4e30658e8a67c026d16c9 + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1" @@ -4741,6 +4828,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.2" + checksum: cb9725e7bdc3ba9c1feaef96dbf831c1a59c700ca633a9929fd97debdcb5ce06b5d7b4e6dbc076279978707214d01e2cd126d8e3f4cabc5c16525c031a47b95c + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1" @@ -4748,6 +4842,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.2" + checksum: 82a90b1d09ad266ddc510ece2e397f51fdaf29abf7263d2a3a85accddcba2ac24cceb670a3120800611cdcc552eed04919d071e259fdda7564818359ed541f5d + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1" @@ -4755,6 +4856,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.2" + checksum: d1f20d4d55683bd041ead957e5461b2e43a39e959f905e8866de1d65f8d96118e9b861e994604d9002cb7f056be0844e36c241a6bb531c336b399609977c0998 + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1" @@ -4762,6 +4870,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.2" + checksum: 6c17f9af3aaf184c0a217cf723076051c502d85e731dbc97f34b838f9ae1b597577abac54a2af49b3fd986b09131c52fa21fd5393b22d05e1ec7fee96a8249c2 + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1" @@ -4783,6 +4898,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.2": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.2" + checksum: da198464f5ee0d19b6decdfaa65ee0df3097b8960b8483bb7080931968815a5d60f27191229d47a198955784d763d5996f0b92bfde3551612ad972c160b0b000 + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer@npm:^0.1.0": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer@npm:0.1.1" @@ -4822,6 +4944,36 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/solidity-analyzer@npm:^0.1.1": + version: 0.1.2 + resolution: "@nomicfoundation/solidity-analyzer@npm:0.1.2" + dependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-darwin-x64": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "npm:0.1.2" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "npm:0.1.2" + dependenciesMeta: + "@nomicfoundation/solidity-analyzer-darwin-arm64": + optional: true + "@nomicfoundation/solidity-analyzer-darwin-x64": + optional: true + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": + optional: true + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": + optional: true + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": + optional: true + "@nomicfoundation/solidity-analyzer-linux-x64-musl": + optional: true + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": + optional: true + checksum: e4f503e9287e18967535af669ca7e26e2682203c45a34ea85da53122da1dee1278f2b8c76c20c67fadd7c1b1a98eeecffd2cbc136860665e3afa133817c0de54 + languageName: node + linkType: hard + "@nomiclabs/hardhat-ethers@npm:^2.0.0, @nomiclabs/hardhat-ethers@npm:^2.0.2, @nomiclabs/hardhat-ethers@npm:^2.1.1, @nomiclabs/hardhat-ethers@npm:^2.2.3": version: 2.2.3 resolution: "@nomiclabs/hardhat-ethers@npm:2.2.3" @@ -12084,9 +12236,9 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^6.4.0": - version: 6.12.1 - resolution: "ethers@npm:6.12.1" +"ethers@npm:^6.13.2, ethers@npm:^6.7.0": + version: 6.13.2 + resolution: "ethers@npm:6.13.2" dependencies: "@adraffy/ens-normalize": "npm:1.10.1" "@noble/curves": "npm:1.2.0" @@ -12094,8 +12246,8 @@ __metadata: "@types/node": "npm:18.15.13" aes-js: "npm:4.0.0-beta.5" tslib: "npm:2.4.0" - ws: "npm:8.5.0" - checksum: 7686e1efdb0a831578f35d69188783c225de5a6fbb1b422327bc45cee04d49a2707e73c9342a6a5eb2870ce35668c71372737439ec3993d31d83f4a0e2446cc7 + ws: "npm:8.17.1" + checksum: 5956389a180992f8b6d90bc21b2e0f28619a098513d3aeb7a350a0b7c5852d635a9d7fd4ced1af50c985dd88398716f66dfd4a2de96c5c3a67150b93543d92af languageName: node linkType: hard @@ -14774,6 +14926,13 @@ __metadata: languageName: node linkType: hard +"immer@npm:10.0.2": + version: 10.0.2 + resolution: "immer@npm:10.0.2" + checksum: b6c23538cd174a4cadd6f8d92bf0245e2c2a7bdabbd3200a08f1e99bb52e463fb552bb2d025ddd45f4e335390f8bd307e2c813e54a004dd651fe1ec161674e42 + languageName: node + linkType: hard + "immutable@npm:^4.0.0-rc.12": version: 4.3.6 resolution: "immutable@npm:4.3.6" @@ -16208,7 +16367,7 @@ __metadata: languageName: node linkType: hard -"json-stringify-safe@npm:~5.0.1": +"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" checksum: 7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 @@ -17008,7 +17167,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.14.2, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:~4.17.0": +"lodash@npm:4.17.21, lodash@npm:^4.14.2, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:~4.17.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -18287,6 +18446,21 @@ __metadata: languageName: node linkType: hard +"ndjson@npm:2.0.0": + version: 2.0.0 + resolution: "ndjson@npm:2.0.0" + dependencies: + json-stringify-safe: "npm:^5.0.1" + minimist: "npm:^1.2.5" + readable-stream: "npm:^3.6.0" + split2: "npm:^3.0.0" + through2: "npm:^4.0.0" + bin: + ndjson: cli.js + checksum: b7f3de5e12e0466cfa3688a3ba6cedec0ab54bd821f1b16926c9ef7017983b131832430061d25dfcb635f65a254b535681eca213c6feb5d1958bee8d35a04cc9 + languageName: node + linkType: hard + "negotiator@npm:0.6.3, negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" @@ -25472,18 +25646,18 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.5.0": - version: 8.5.0 - resolution: "ws@npm:8.5.0" +"ws@npm:8.17.1": + version: 8.17.1 + resolution: "ws@npm:8.17.1" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: 0baeee03e97865accda8fad51e8e5fa17d19b8e264529efdf662bbba2acc1c7f1de8316287e6df5cb639231a96009e6d5234b57e6ff36ee2d04e49a0995fec2f + checksum: f4a49064afae4500be772abdc2211c8518f39e1c959640457dcee15d4488628620625c783902a52af2dd02f68558da2868fd06e6fd0e67ebcd09e6881b1b5bfe languageName: node linkType: hard From 2f3a5e0d96cf0a2b780f2816149587ff9dc1f9bb Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Wed, 2 Oct 2024 06:45:53 +1000 Subject: [PATCH 250/343] chore(Horizon): reprovision only tokens thawed (#1046) * chore(Horizon): reprovision only tokens thawed * fix: rename variable --- .../internal/IHorizonStakingMain.sol | 3 +- .../contracts/staking/HorizonStaking.sol | 22 +++++---- .../HorizonStakingShared.t.sol | 9 ++-- .../test/staking/provision/reprovision.t.sol | 48 ++----------------- 4 files changed, 22 insertions(+), 60 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index eafce457a..6e0cc024f 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -614,13 +614,12 @@ interface IHorizonStakingMain { * @param serviceProvider The service provider address * @param oldVerifier The verifier address for which the tokens are currently provisioned * @param newVerifier The verifier address for which the tokens will be provisioned - * @param tokens The amount of tokens to move + * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests. */ function reprovision( address serviceProvider, address oldVerifier, address newVerifier, - uint256 tokens, uint256 nThawRequests ) external; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 982e06ae0..f49a3e566 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -209,7 +209,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address serviceProvider, address oldVerifier, address newVerifier, - uint256 tokens, uint256 nThawRequests ) external @@ -218,8 +217,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { onlyAuthorized(serviceProvider, oldVerifier) onlyAuthorized(serviceProvider, newVerifier) { - _deprovision(serviceProvider, oldVerifier, nThawRequests); - _addToProvision(serviceProvider, newVerifier, tokens); + uint256 tokensThawed = _deprovision(serviceProvider, oldVerifier, nThawRequests); + _addToProvision(serviceProvider, newVerifier, tokensThawed); } /** @@ -695,13 +694,17 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice See {IHorizonStakingMain-deprovision}. */ - function _deprovision(address _serviceProvider, address _verifier, uint256 _nThawRequests) private { + function _deprovision( + address _serviceProvider, + address _verifier, + uint256 _nThawRequests + ) private returns (uint256 tokensThawed) { Provision storage prov = _provisions[_serviceProvider][_verifier]; - uint256 tokensThawed = 0; + uint256 tokensThawed_ = 0; uint256 sharesThawing = prov.sharesThawing; uint256 tokensThawing = prov.tokensThawing; - (tokensThawed, tokensThawing, sharesThawing) = _fulfillThawRequests( + (tokensThawed_, tokensThawing, sharesThawing) = _fulfillThawRequests( _serviceProvider, _verifier, _serviceProvider, @@ -710,12 +713,13 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _nThawRequests ); - prov.tokens = prov.tokens - tokensThawed; + prov.tokens = prov.tokens - tokensThawed_; prov.sharesThawing = sharesThawing; prov.tokensThawing = tokensThawing; - _serviceProviders[_serviceProvider].tokensProvisioned -= tokensThawed; + _serviceProviders[_serviceProvider].tokensProvisioned -= tokensThawed_; - emit TokensDeprovisioned(_serviceProvider, _verifier, tokensThawed); + emit TokensDeprovisioned(_serviceProvider, _verifier, tokensThawed_); + return tokensThawed_; } /** diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index d9f300979..e171e455e 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -559,7 +559,6 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address serviceProvider, address verifier, address newVerifier, - uint256 tokens, uint256 nThawRequests ) internal { // before @@ -595,8 +594,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { vm.expectEmit(address(staking)); emit IHorizonStakingMain.TokensDeprovisioned(serviceProvider, verifier, calcValues.tokensThawed); vm.expectEmit(); - emit IHorizonStakingMain.ProvisionIncreased(serviceProvider, newVerifier, tokens); - staking.reprovision(serviceProvider, verifier, newVerifier, tokens, nThawRequests); + emit IHorizonStakingMain.ProvisionIncreased(serviceProvider, newVerifier, calcValues.tokensThawed); + staking.reprovision(serviceProvider, verifier, newVerifier, nThawRequests); // after Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); @@ -619,7 +618,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterProvision.thawingPeriodPending, beforeValues.provision.thawingPeriodPending); // assert: provision new verifier - assertEq(afterProvisionNewVerifier.tokens, beforeValues.provisionNewVerifier.tokens + tokens); + assertEq(afterProvisionNewVerifier.tokens, beforeValues.provisionNewVerifier.tokens + calcValues.tokensThawed); assertEq(afterProvisionNewVerifier.tokensThawing, beforeValues.provisionNewVerifier.tokensThawing); assertEq(afterProvisionNewVerifier.sharesThawing, beforeValues.provisionNewVerifier.sharesThawing); assertEq(afterProvisionNewVerifier.maxVerifierCut, beforeValues.provisionNewVerifier.maxVerifierCut); @@ -632,7 +631,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterServiceProvider.tokensStaked, beforeValues.serviceProvider.tokensStaked); assertEq( afterServiceProvider.tokensProvisioned, - beforeValues.serviceProvider.tokensProvisioned + tokens - calcValues.tokensThawed + beforeValues.serviceProvider.tokensProvisioned + calcValues.tokensThawed - calcValues.tokensThawed ); assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeValues.serviceProvider.__DEPRECATED_tokensAllocated); assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, beforeValues.serviceProvider.__DEPRECATED_tokensLocked); diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 6fd170e4b..722ecfe59 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -25,29 +25,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { _createProvision(users.indexer, newDataService, 1 ether, 0, thawingPeriod); - _reprovision(users.indexer, subgraphDataServiceAddress, newDataService, provisionAmount, 0); - } - - function testReprovision_TokensOverThawingTokens() public useIndexer { - uint64 thawingPeriod = 1 days; - - // create provision A, thaw 10 ether, skip time so they are fully thawed - _createProvision(users.indexer, subgraphDataServiceAddress, 100 ether, 0, thawingPeriod); - _thaw(users.indexer, subgraphDataServiceAddress, 10 ether); - skip(thawingPeriod + 1); - - // create provision B - _createProvision(users.indexer, newDataService, 1 ether, 0, thawingPeriod); - - // reprovision 100 ether from A to B - // this should revert because there are only 10 ether that thawed and the service provider - // doesn't have additional idle stake to cover the difference - vm.expectRevert(); - staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, 100 ether, 0); - - // now add some idle stake and try again, it should not revert - _stake(100 ether); - _reprovision(users.indexer, subgraphDataServiceAddress, newDataService, 100 ether, 0); + _reprovision(users.indexer, subgraphDataServiceAddress, newDataService, 0); } function testReprovision_OperatorMovingTokens( @@ -64,7 +42,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { // Switch back to operator vm.startPrank(users.operator); _createProvision(users.indexer, newDataService, 1 ether, 0, thawingPeriod); - _reprovision(users.indexer, subgraphDataServiceAddress, newDataService, provisionAmount, 0); + _reprovision(users.indexer, subgraphDataServiceAddress, newDataService, 0); } function testReprovision_RevertWhen_OperatorNotAuthorizedForNewDataService( @@ -85,30 +63,12 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { newDataService ); vm.expectRevert(expectedError); - staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, provisionAmount, 0); + staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, 0); } function testReprovision_RevertWhen_NoThawingTokens(uint256 amount) public useIndexer useProvision(amount, 0, 0) { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); - staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, amount, 0); - } - - function testReprovision_RevertWhen_StillThawing( - uint64 thawingPeriod, - uint256 provisionAmount - ) public useIndexer useProvision(provisionAmount, 0, thawingPeriod) { - vm.assume(thawingPeriod > 0); - _thaw(users.indexer, subgraphDataServiceAddress, provisionAmount); - - _createProvision(users.indexer, newDataService, 1 ether, 0, thawingPeriod); - - bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInsufficientIdleStake(uint256,uint256)", - provisionAmount, - 0 - ); - vm.expectRevert(expectedError); - staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, provisionAmount, 0); + staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, 0); } } From fe9d605a0e14dbb4fc519f3ab1c7a8674b7868f6 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Wed, 2 Oct 2024 06:46:17 +1000 Subject: [PATCH 251/343] chore(SubgraphService): allow force closing over allocated allocations (#1044) * chore(SubgraphService): allow force closing over allocated allocations * fix: merge close stale and over allocated functions * fix: removed unused error and fixed natspec for new error --- .../contracts/SubgraphService.sol | 23 +++++-- .../contracts/interfaces/ISubgraphService.sol | 31 +++++++--- .../contracts/utilities/AllocationManager.sol | 12 +++- .../subgraphService/SubgraphService.t.sol | 4 +- .../{closeStale.t.sol => forceClose.t.sol} | 60 ++++++++++++++----- .../collect/indexing/indexing.t.sol | 2 +- 6 files changed, 101 insertions(+), 31 deletions(-) rename packages/subgraph-service/test/subgraphService/allocation/{closeStale.t.sol => forceClose.t.sol} (63%) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 39b12a4c9..58c730f4d 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -312,12 +312,11 @@ contract SubgraphService is /** * @notice See {ISubgraphService.closeStaleAllocation} */ - function closeStaleAllocation(address allocationId) external override { + function forceCloseAllocation(address allocationId) external override { Allocation.State memory allocation = allocations.get(allocationId); - require( - allocation.isStale(maxPOIStaleness), - SubgraphServiceAllocationNotStale(allocationId, allocation.lastPOIPresentedAt) - ); + bool isStale = allocation.isStale(maxPOIStaleness); + bool isOverAllocated_ = _isOverAllocated(allocation.indexer, delegationRatio); + require(isStale || isOverAllocated_, SubgraphServiceCannotForceCloseAllocation(allocationId)); require(!allocation.isAltruistic(), SubgraphServiceAllocationIsAltruistic(allocationId)); _closeAllocation(allocationId); } @@ -476,6 +475,20 @@ contract SubgraphService is return _encodeAllocationProof(indexer, allocationId); } + /** + * @notice See {ISubgraphService.isStaleAllocation} + */ + function isStaleAllocation(address allocationId) external view override returns (bool) { + return allocations.get(allocationId).isStale(maxPOIStaleness); + } + + /** + * @notice See {ISubgraphService.isOverAllocated} + */ + function isOverAllocated(address indexer) external view override returns (bool) { + return _isOverAllocated(indexer, delegationRatio); + } + // -- Data service parameter getters -- /** * @notice Getter for the accepted thawing period range for provisions diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index b83d672f7..32ea9e8fb 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -110,11 +110,10 @@ interface ISubgraphService is IDataServiceFees { error SubgraphServiceInvalidRAV(address ravIndexer, address allocationIndexer); /** - * @notice Thrown when trying to force close an allocation that is not stale + * @notice Thrown when trying to force close an allocation that is not stale and the indexer is not over-allocated * @param allocationId The id of the allocation - * @param lastPOIPresentedAt The timestamp when the last POI was presented */ - error SubgraphServiceAllocationNotStale(address allocationId, uint256 lastPOIPresentedAt); + error SubgraphServiceCannotForceCloseAllocation(address allocationId); /** * @notice Thrown when trying to force close an altruistic allocation @@ -128,20 +127,22 @@ interface ISubgraphService is IDataServiceFees { error SubgraphServiceInvalidZeroStakeToFeesRatio(); /** - * @notice Close a stale allocation - * @dev This function can be permissionlessly called when the allocation is stale. - * This ensures rewards for other allocations are not diluted by an inactive allocation + * @notice Force close an allocation + * @dev This function can be permissionlessly called when the allocation is stale or + * if the indexer is over-allocated. This ensures that rewards for other allocations are + * not diluted by an inactive allocation, and that over-allocated indexers stop accumulating + * rewards with tokens they no longer have allocated. * * Requirements: * - Allocation must exist and be open - * - Allocation must be stale + * - Allocation must be stale or indexer must be over-allocated * - Allocation cannot be altruistic * * Emits a {AllocationClosed} event. * * @param allocationId The id of the allocation */ - function closeStaleAllocation(address allocationId) external; + function forceCloseAllocation(address allocationId) external; /** * @notice Change the amount of tokens in an allocation @@ -237,4 +238,18 @@ interface ISubgraphService is IDataServiceFees { * @param allocationId The id of the allocation */ function encodeAllocationProof(address indexer, address allocationId) external view returns (bytes32); + + /** + * @notice Checks if an allocation is stale + * @param allocationId The id of the allocation + * @return True if the allocation is stale, false otherwise + */ + function isStaleAllocation(address allocationId) external view returns (bool); + + /** + * @notice Checks if an indexer is over-allocated + * @param allocationId The id of the allocation + * @return True if the indexer is over-allocated, false otherwise + */ + function isOverAllocated(address allocationId) external view returns (bool); } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 97c3adf99..3d66224c3 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -322,7 +322,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca ); // Check if the indexer is over-allocated and close the allocation if necessary - if (!allocationProvisionTracker.check(_graphStaking(), allocation.indexer, _delegationRatio)) { + if (_isOverAllocated(allocation.indexer, _delegationRatio)) { _closeAllocation(_allocationId); } @@ -479,4 +479,14 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca function _encodeAllocationProof(address _indexer, address _allocationId) internal view returns (bytes32) { return _hashTypedDataV4(keccak256(abi.encode(EIP712_ALLOCATION_PROOF_TYPEHASH, _indexer, _allocationId))); } + + /** + * @notice Checks if an allocation is over-allocated + * @param _indexer The address of the indexer + * @param _delegationRatio The delegation ratio to consider when locking tokens + * @return True if the allocation is over-allocated, false otherwise + */ + function _isOverAllocated(address _indexer, uint32 _delegationRatio) internal view returns (bool) { + return !allocationProvisionTracker.check(_graphStaking(), _indexer, _delegationRatio); + } } diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index e62ce8211..f48235d48 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -151,7 +151,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { assertEq(afterSubgraphAllocatedTokens, _tokens); } - function _closeStaleAllocation(address _allocationId) internal { + function _forceCloseAllocation(address _allocationId) internal { assertTrue(subgraphService.isActiveAllocation(_allocationId)); Allocation.State memory allocation = subgraphService.getAllocation(_allocationId); @@ -168,7 +168,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { ); // close stale allocation - subgraphService.closeStaleAllocation(_allocationId); + subgraphService.forceCloseAllocation(_allocationId); // update allocation allocation = subgraphService.getAllocation(_allocationId); diff --git a/packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol b/packages/subgraph-service/test/subgraphService/allocation/forceClose.t.sol similarity index 63% rename from packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol rename to packages/subgraph-service/test/subgraphService/allocation/forceClose.t.sol index 68d736261..8817355f6 100644 --- a/packages/subgraph-service/test/subgraphService/allocation/closeStale.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/forceClose.t.sol @@ -14,7 +14,7 @@ import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService import { LegacyAllocation } from "../../../contracts/libraries/LegacyAllocation.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; -contract SubgraphServiceAllocationCloseStaleTest is SubgraphServiceTest { +contract SubgraphServiceAllocationForceCloseTest is SubgraphServiceTest { address private permissionlessBob = makeAddr("permissionlessBob"); @@ -22,17 +22,17 @@ contract SubgraphServiceAllocationCloseStaleTest is SubgraphServiceTest { * TESTS */ - function test_SubgraphService_Allocation_CloseStale( + function test_SubgraphService_Allocation_ForceClose_Stale( uint256 tokens - ) public useIndexer useAllocation(tokens) { - // Skip forward + ) public useIndexer useAllocation(tokens) { + // Skip forward skip(maxPOIStaleness + 1); resetPrank(permissionlessBob); - _closeStaleAllocation(allocationID); + _forceCloseAllocation(allocationID); } - function test_SubgraphService_Allocation_CloseStale_AfterCollecting( + function test_SubgraphService_Allocation_ForceClose_Stale_AfterCollecting( uint256 tokens ) public useIndexer useAllocation(tokens) { // Simulate POIs being submitted @@ -52,10 +52,43 @@ contract SubgraphServiceAllocationCloseStaleTest is SubgraphServiceTest { // Close the stale allocation resetPrank(permissionlessBob); - _closeStaleAllocation(allocationID); + _forceCloseAllocation(allocationID); + } + + function test_SubgraphService_Allocation_ForceClose_OverAllocated( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // thaw some tokens to become over allocated + staking.thaw(users.indexer, address(subgraphService), tokens / 2); + + resetPrank(permissionlessBob); + _forceCloseAllocation(allocationID); + } + + function test_SubgraphService_Allocation_ForceClose_OverAllocated_AfterCollecting( + uint256 tokens + ) public useIndexer useAllocation(tokens) { + // Simulate POIs being submitted + uint8 numberOfPOIs = 5; + uint256 timeBetweenPOIs = 5 days; + + for (uint8 i = 0; i < numberOfPOIs; i++) { + // Skip forward + skip(timeBetweenPOIs); + + bytes memory data = abi.encode(allocationID, bytes32("POI1")); + _collect(users.indexer, IGraphPayments.PaymentTypes.IndexingRewards, data); + } + + // thaw some tokens to become over allocated + staking.thaw(users.indexer, address(subgraphService), tokens / 2); + + // Close the over allocated allocation + resetPrank(permissionlessBob); + _forceCloseAllocation(allocationID); } - function test_SubgraphService_Allocation_CloseStale_RevertIf_NotStale( + function test_SubgraphService_Allocation_ForceClose_RevertIf_NotStaleOrOverAllocated( uint256 tokens ) public useIndexer useAllocation(tokens) { // Simulate POIs being submitted @@ -74,16 +107,15 @@ contract SubgraphServiceAllocationCloseStaleTest is SubgraphServiceTest { resetPrank(permissionlessBob); vm.expectRevert( abi.encodeWithSelector( - ISubgraphService.SubgraphServiceAllocationNotStale.selector, - allocationID, - block.timestamp + ISubgraphService.SubgraphServiceCannotForceCloseAllocation.selector, + allocationID ) ); - subgraphService.closeStaleAllocation(allocationID); + subgraphService.forceCloseAllocation(allocationID); } } - function test_SubgraphService_Allocation_CloseStale_RevertIf_Altruistic( + function test_SubgraphService_Allocation_ForceClose_RevertIf_Altruistic( uint256 tokens ) public useIndexer { tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); @@ -103,6 +135,6 @@ contract SubgraphServiceAllocationCloseStaleTest is SubgraphServiceTest { allocationID ) ); - subgraphService.closeStaleAllocation(allocationID); + subgraphService.forceCloseAllocation(allocationID); } } diff --git a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol index 38e9e7865..465f5c8cd 100644 --- a/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/indexing/indexing.t.sol @@ -109,7 +109,7 @@ contract SubgraphServiceCollectIndexingTest is SubgraphServiceTest { } } - function test_SubgraphService_Collect_Indexing_RevertWhen_OverAllocated(uint256 tokens) public useIndexer { + function test_SubgraphService_Collect_Indexing_OverAllocated(uint256 tokens) public useIndexer { tokens = bound(tokens, minimumProvisionTokens * 2, 10_000_000_000 ether); // setup allocation From e33bf12ae2fdbbac69700dc8dc08a04a5ac3f649 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Wed, 2 Oct 2024 10:18:36 +0100 Subject: [PATCH 252/343] fix: revert DisputeManager.sol to previous state --- .../contracts/disputes/DisputeManager.sol | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/contracts/contracts/disputes/DisputeManager.sol b/packages/contracts/contracts/disputes/DisputeManager.sol index fed301de0..6700ec341 100644 --- a/packages/contracts/contracts/disputes/DisputeManager.sol +++ b/packages/contracts/contracts/disputes/DisputeManager.sol @@ -29,7 +29,7 @@ import "./IDisputeManager.sol"; * Indexers present a Proof of Indexing (POI) when they close allocations to prove * they were indexing a subgraph. The Staking contract emits that proof with the format * keccak256(indexer.address, POI). - * Any fisherman can dispute the validity of a POI by submitting a dispute to this contract + * Any challenger can dispute the validity of a POI by submitting a dispute to this contract * along with a deposit. * * Arbitration: @@ -355,8 +355,8 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa * @param _deposit Amount of tokens staked as deposit */ function createQueryDispute(bytes calldata _attestationData, uint256 _deposit) external override returns (bytes32) { - // Get funds from fisherman - _pullFishermanDeposit(_deposit); + // Get funds from submitter + _pullSubmitterDeposit(_deposit); // Create a dispute return @@ -372,7 +372,7 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa * @dev Create query disputes for two conflicting attestations. * A conflicting attestation is a proof presented by two different indexers * where for the same request on a subgraph the response is different. - * For this type of dispute the fisherman is not required to present a deposit + * For this type of dispute the submitter is not required to present a deposit * as one of the attestation is considered to be right. * Two linked disputes will be created and if the arbitrator resolve one, the other * one will be automatically resolved. @@ -470,14 +470,14 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa /** * @dev Create an indexing dispute for the arbitrator to resolve. * The disputes are created in reference to an allocationID - * This function is called by a fisherman that will need to `_deposit` at + * This function is called by a challenger that will need to `_deposit` at * least `minimumDeposit` GRT tokens. * @param _allocationID The allocation to dispute * @param _deposit Amount of tokens staked as deposit */ function createIndexingDispute(address _allocationID, uint256 _deposit) external override returns (bytes32) { - // Get funds from fisherman - _pullFishermanDeposit(_deposit); + // Get funds from submitter + _pullSubmitterDeposit(_deposit); // Create a dispute return _createIndexingDisputeWithAllocation(msg.sender, _deposit, _allocationID); @@ -485,7 +485,7 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa /** * @dev Create indexing dispute internal function. - * @param _fisherman The fisherman creating the dispute + * @param _fisherman The challenger creating the dispute * @param _deposit Amount of tokens staked as deposit * @param _allocationID Allocation disputed */ @@ -606,7 +606,7 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa } /** - * @dev Draw the conflicting dispute if there is any for the one passed to this function. + * @dev Resolve the conflicting dispute if there is any for the one passed to this function. * @param _dispute Dispute * @return True if resolved */ @@ -621,10 +621,10 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa } /** - * @dev Pull deposit from fisherman account. + * @dev Pull deposit from submitter account. * @param _deposit Amount of tokens to deposit */ - function _pullFishermanDeposit(uint256 _deposit) private { + function _pullSubmitterDeposit(uint256 _deposit) private { // Ensure that fisherman has staked at least the minimum amount require(_deposit >= minimumDeposit, "Dispute deposit is under minimum required"); @@ -633,17 +633,17 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa } /** - * @dev Make the staking contract slash the indexer and reward the fisherman. - * Give the fisherman a reward equal to the fishermanRewardPercentage of slashed amount + * @dev Make the staking contract slash the indexer and reward the challenger. + * Give the challenger a reward equal to the fishermanRewardPercentage of slashed amount * @param _indexer Address of the indexer - * @param _fisherman Address of the fisherman + * @param _challenger Address of the challenger * @param _disputeType Type of dispute * @return slashAmount Dispute slash amount * @return rewardsAmount Dispute rewards amount */ function _slashIndexer( address _indexer, - address _fisherman, + address _challenger, DisputeType _disputeType ) private returns (uint256 slashAmount, uint256 rewardsAmount) { IStaking staking = staking(); @@ -660,7 +660,7 @@ contract DisputeManager is DisputeManagerV1Storage, GraphUpgradeable, IDisputeMa // Have staking contract slash the indexer and reward the fisherman // Give the fisherman a reward equal to the fishermanRewardPercentage of slashed amount - staking.slash(_indexer, slashAmount, rewardsAmount, _fisherman); + staking.slash(_indexer, slashAmount, rewardsAmount, _challenger); } /** From 2b79a69242553bb07102327b294670cb6db2be42 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:54:39 +1000 Subject: [PATCH 253/343] fix(Horizon): graph directory test (#1054) --- packages/horizon/test/utilities/GraphDirectory.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/test/utilities/GraphDirectory.t.sol b/packages/horizon/test/utilities/GraphDirectory.t.sol index ece4afe65..606933699 100644 --- a/packages/horizon/test/utilities/GraphDirectory.t.sol +++ b/packages/horizon/test/utilities/GraphDirectory.t.sol @@ -27,7 +27,7 @@ contract GraphDirectoryTest is GraphBaseTest { function test_RevertWhen_TheContractIsDeployedWithAnInvalidController(address controller_) external { vm.assume(controller_ != address(controller)); - vm.assume(controller_ != address(0)); + vm.assume(uint160(controller_) > 9); // Skip precompiled contracts vm.expectRevert(); // call to getContractProxy on a random address reverts _deployImplementation(controller_); From dcbcf7e5d001aa54c52575c3c5b6537ced6bec4e Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Wed, 2 Oct 2024 19:11:55 +0100 Subject: [PATCH 254/343] fix: fix broken test --- packages/horizon/test/escrow/collector.t.sol | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index 3e5b71bc0..ed5c05384 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -16,7 +16,12 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { function _approveCollector(uint256 tokens) internal { (uint256 beforeAllowance,) = escrow.authorizedCollectors(users.gateway, users.verifier); vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.AuthorizedCollector(users.gateway, users.verifier); + emit IPaymentsEscrow.AuthorizedCollector( + users.gateway, // payer + users.verifier, // collector + tokens, // addedAllowance + beforeAllowance + tokens // newTotalAllowance after the added allowance + ); escrow.approveCollector(users.verifier, tokens); (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); assertEq(allowance - beforeAllowance, tokens); From d459928cd7d05c3b1cf6aaa04905ddc76c8d6180 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 <67825802+MoonBoi9001@users.noreply.github.com> Date: Wed, 2 Oct 2024 19:23:43 +0100 Subject: [PATCH 255/343] Update packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tomás Migone --- .../contracts/data-service/interfaces/IDataServiceRescuable.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol index 67026f2d4..0c5b2c8f6 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServiceRescuable.sol @@ -16,7 +16,7 @@ interface IDataServiceRescuable is IDataService { * @param token The address of the token being rescued * @param tokens The amount of tokens rescued */ - event TokensRescued(address indexed from, address indexed to, address token, uint256 tokens); + event TokensRescued(address indexed from, address indexed to, address indexed token, uint256 tokens); /** * @notice Emitted when a rescuer is set. From 570b21e52afcefe66f14803402100f76dca3db90 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Thu, 3 Oct 2024 04:30:56 +1000 Subject: [PATCH 256/343] chore(Horizon): add a beneficiary address to undelegate (#1052) --- .../internal/IHorizonStakingMain.sol | 32 +++++++++++ .../contracts/staking/HorizonStaking.sol | 26 +++++++-- .../HorizonStakingShared.t.sol | 22 +++++--- .../test/staking/delegation/undelegate.t.sol | 22 ++++++++ .../test/staking/delegation/withdraw.t.sol | 53 +++++++++++++++++++ 5 files changed, 143 insertions(+), 12 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 6e0cc024f..c0d18366e 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -409,6 +409,11 @@ interface IHorizonStakingMain { */ error HorizonStakingInvalidDelegationPool(address serviceProvider, address verifier); + /** + * @notice Thrown when attempting to undelegate with a beneficiary that is the zero address. + */ + error HorizonStakingInvalidBeneficiaryZeroAddress(); + // -- Errors: thaw requests -- error HorizonStakingNothingThawing(); @@ -706,6 +711,33 @@ interface IHorizonStakingMain { */ function undelegate(address serviceProvider, address verifier, uint256 shares) external returns (bytes32); + /** + * @notice Undelegate tokens from a provision and start thawing them. + * The tokens will be withdrawable by the `beneficiary` after the thawing period. + * + * Note that undelegating tokens from a provision is a two step process: + * - First the tokens are thawed using this function. + * - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. + * + * Requirements: + * - `shares` cannot be zero. + * - `beneficiary` cannot be the zero address. + * + * Emits a {TokensUndelegated} and {ThawRequestCreated} event. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address + * @param shares The amount of shares to undelegate + * @param beneficiary The address where the tokens will be withdrawn after thawing + * @return The ID of the thaw request + */ + function undelegate( + address serviceProvider, + address verifier, + uint256 shares, + address beneficiary + ) external returns (bytes32); + /** * @notice Withdraw undelegated tokens from a provision after thawing. * Tokens can be automatically re-delegated to another provision by setting `newServiceProvider`. diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 22d7c221b..fa566563d 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -302,7 +302,20 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, uint256 shares ) external override notPaused returns (bytes32) { - return _undelegate(serviceProvider, verifier, shares); + return _undelegate(serviceProvider, verifier, shares, msg.sender); + } + + /** + * @notice See {IHorizonStakingMain-undelegate}. + */ + function undelegate( + address serviceProvider, + address verifier, + uint256 shares, + address beneficiary + ) external override notPaused returns (bytes32) { + require(beneficiary != address(0), HorizonStakingInvalidBeneficiaryZeroAddress()); + return _undelegate(serviceProvider, verifier, shares, beneficiary); } /** @@ -345,7 +358,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice See {IHorizonStakingMain-undelegate}. */ function undelegate(address serviceProvider, uint256 shares) external override notPaused { - _undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares); + _undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares, msg.sender); } /** @@ -762,7 +775,12 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @dev To allow delegation to be slashable even while thawing without breaking accounting * the delegation pool shares are burned and replaced with thawing pool shares. */ - function _undelegate(address _serviceProvider, address _verifier, uint256 _shares) private returns (bytes32) { + function _undelegate( + address _serviceProvider, + address _verifier, + uint256 _shares, + address beneficiary + ) private returns (bytes32) { require(_shares > 0, HorizonStakingInvalidZeroShares()); DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); DelegationInternal storage delegation = pool.delegators[msg.sender]; @@ -789,7 +807,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { bytes32 thawRequestId = _createThawRequest( _serviceProvider, _verifier, - msg.sender, + beneficiary, thawingShares, thawingUntil ); diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index e171e455e..fab804e67 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -853,11 +853,17 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { } function _undelegate(address serviceProvider, address verifier, uint256 shares) internal { - __undelegate(serviceProvider, verifier, shares, false); + (, address caller, ) = vm.readCallers(); + __undelegate(serviceProvider, verifier, shares, false, caller); + } + + function _undelegate(address serviceProvider, address verifier, uint256 shares, address beneficiary) internal { + __undelegate(serviceProvider, verifier, shares, false, beneficiary); } function _undelegate(address serviceProvider, uint256 shares) internal { - __undelegate(serviceProvider, subgraphDataServiceLegacyAddress, shares, true); + (, address caller, ) = vm.readCallers(); + __undelegate(serviceProvider, subgraphDataServiceLegacyAddress, shares, true, caller); } struct BeforeValues_Undelegate { @@ -873,7 +879,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { bytes32 thawRequestId; } - function __undelegate(address serviceProvider, address verifier, uint256 shares, bool legacy) private { + function __undelegate(address serviceProvider, address verifier, uint256 shares, bool legacy, address beneficiary) private { (, address delegator, ) = vm.readCallers(); // before @@ -893,7 +899,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { staking.getProvision(serviceProvider, verifier).thawingPeriod + uint64(block.timestamp); calcValues.thawRequestId = keccak256( - abi.encodePacked(serviceProvider, verifier, delegator, beforeValues.thawRequestList.nonce) + abi.encodePacked(serviceProvider, verifier, beneficiary, beforeValues.thawRequestList.nonce) ); // undelegate @@ -901,7 +907,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { emit IHorizonStakingMain.ThawRequestCreated( serviceProvider, verifier, - delegator, + beneficiary, calcValues.thawingShares, calcValues.thawingUntil, calcValues.thawRequestId @@ -911,7 +917,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { if (legacy) { staking.undelegate(serviceProvider, shares); } else { - staking.undelegate(serviceProvider, verifier, shares); + staking.undelegate(serviceProvider, verifier, shares, beneficiary); } // after @@ -923,10 +929,10 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { DelegationInternal memory afterDelegation = _getStorage_Delegation( serviceProvider, verifier, - delegator, + beneficiary, legacy ); - LinkedList.List memory afterThawRequestList = staking.getThawRequestList(serviceProvider, verifier, delegator); + LinkedList.List memory afterThawRequestList = staking.getThawRequestList(serviceProvider, verifier, beneficiary); ThawRequest memory afterThawRequest = staking.getThawRequest(calcValues.thawRequestId); uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index cc2492ba8..1ed6469b5 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -40,6 +40,17 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { } } + function testUndelegate_WithBeneficiary( + uint256 amount, + uint256 delegationAmount, + address beneficiary + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + vm.assume(beneficiary != address(0)); + resetPrank(users.delegator); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); + } + function testUndelegate_RevertWhen_TooManyUndelegations() public useIndexer @@ -133,4 +144,15 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { )); staking.undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); } + + function testUndelegate_RevertIf_BeneficiaryIsZero( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + resetPrank(users.delegator); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); + bytes memory expectedError = abi.encodeWithSelector(IHorizonStakingMain.HorizonStakingInvalidBeneficiaryZeroAddress.selector); + vm.expectRevert(expectedError); + staking.undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, address(0)); + } } diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index fc9072898..0419c85fc 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -176,4 +176,57 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { )); staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); } + + function testWithdrawDelegation_WithBeneficiary( + uint256 delegationAmount, + address beneficiary + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + { + vm.assume(beneficiary != address(0)); + + // Delegator undelegates to beneficiary + resetPrank(users.delegator); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); + + // Thawing period ends + LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceAddress, beneficiary); + ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + skip(thawRequest.thawingUntil + 1); + + // Beneficiary withdraws delegated tokens + resetPrank(beneficiary); + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 1); + } + + function testWithdrawDelegation_RevertWhen_PreviousOwnerAttemptsToWithdraw( + uint256 delegationAmount, + address beneficiary + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + { + vm.assume(beneficiary != address(0)); + + // Delegator undelegates to beneficiary + resetPrank(users.delegator); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); + + // Thawing period ends + LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceAddress, users.delegator); + ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + skip(thawRequest.thawingUntil + 1); + + // Delegator attempts to withdraw delegated tokens, should revert since beneficiary is the thaw request owner + bytes memory expectedError = abi.encodeWithSelector(IHorizonStakingMain.HorizonStakingNothingThawing.selector); + vm.expectRevert(expectedError); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 1); + } } \ No newline at end of file From 4e41890f691eac03fc0d66f0134b2e28abb15119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 3 Oct 2024 11:59:00 -0300 Subject: [PATCH 257/343] feat: remove transfer tools from horizon (#1053) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: remove transfer tools from horizon Signed-off-by: Tomás Migone * fix: deprecate storage variables Signed-off-by: Tomás Migone * fix: remove minimum delegation requirement from delegation flows Signed-off-by: Tomás Migone * fix: minor changes Signed-off-by: Tomás Migone --------- Signed-off-by: Tomás Migone --- .../internal/IHorizonStakingExtension.sol | 23 +-- .../contracts/staking/HorizonStaking.sol | 18 +- .../staking/HorizonStakingExtension.sol | 123 +------------ .../staking/HorizonStakingStorage.sol | 4 +- packages/horizon/test/GraphBase.t.sol | 6 +- packages/horizon/test/escrow/collect.t.sol | 3 +- .../horizon/test/payments/GraphPayments.t.sol | 3 +- .../HorizonStakingShared.t.sol | 107 ----------- .../horizon/test/staking/HorizonStaking.t.sol | 2 +- .../test/staking/allocation/close.t.sol | 2 +- .../test/staking/delegation/addToPool.t.sol | 3 +- .../test/staking/delegation/delegate.t.sol | 22 +-- .../test/staking/delegation/undelegate.t.sol | 25 +-- .../test/staking/delegation/withdraw.t.sol | 14 +- .../test/staking/governance/governance.t.sol | 12 -- .../horizon/test/staking/slash/slash.t.sol | 8 +- .../test/staking/transfer-tools/ttools.t.sol | 166 ------------------ packages/horizon/test/utils/Constants.sol | 1 - .../test/shared/SubgraphServiceShared.t.sol | 3 +- 19 files changed, 30 insertions(+), 515 deletions(-) delete mode 100644 packages/horizon/test/staking/transfer-tools/ttools.t.sol diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index fcf70cc32..a0b2dc1af 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -3,13 +3,12 @@ pragma solidity 0.8.27; import { IRewardsIssuer } from "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol"; -import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; /** * @title Interface for {HorizonStakingExtension} contract. - * @notice Provides functions for managing legacy allocations and transfer tools. + * @notice Provides functions for managing legacy allocations. */ -interface IHorizonStakingExtension is IRewardsIssuer, IL2StakingBase { +interface IHorizonStakingExtension is IRewardsIssuer { /** * @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment * An allocation is created in the allocate() function and closed in closeAllocation() @@ -39,15 +38,6 @@ interface IHorizonStakingExtension is IRewardsIssuer, IL2StakingBase { Closed } - /** - * @notice Emitted when a delegator delegates through the Graph Token Gateway using the transfer tools. - * @dev TODO(after transfer tools): delete - * @param serviceProvider The address of the service provider. - * @param delegator The address of the delegator. - * @param tokens The amount of tokens delegated. - */ - event StakeDelegated(address indexed serviceProvider, address indexed delegator, uint256 tokens, uint256 shares); - /** * @dev Emitted when `indexer` close an allocation in `epoch` for `allocationID`. * An amount of `tokens` get unallocated from `subgraphDeploymentID`. @@ -87,15 +77,6 @@ interface IHorizonStakingExtension is IRewardsIssuer, IL2StakingBase { uint256 delegationRewards ); - event CounterpartStakingAddressSet(address indexed counterpart); - - /** - * @notice Set the address of the counterpart (L1 or L2) staking contract. - * @dev This function can only be called by the governor. - * @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing. - */ - function setCounterpartStakingAddress(address counterpart) external; - /** * @notice Close an allocation and free the staked tokens. * To be eligible for rewards a proof of indexing must be presented. diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index fa566563d..325952ddd 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -22,8 +22,7 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; * It is designed to be deployed as an upgrade to the L2Staking contract from the legacy contracts package. * @dev It uses a {HorizonStakingExtension} contract to implement the full {IHorizonStaking} interface through delegatecalls. * This is due to the contract size limit on Arbitrum (24kB). The extension contract implements functionality to support - * the legacy staking functions and the transfer tools. Both can be eventually removed without affecting the main - * staking contract. + * the legacy staking functions. It can be eventually removed without affecting the main staking contract. * @custom:security-contact Please email security+contracts@thegraph.com if you find any * bugs. We may have an active bug bounty program. */ @@ -42,11 +41,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /// @dev Maximum number of simultaneous stake thaw requests (per provision) or undelegations (per delegation) uint256 private constant MAX_THAW_REQUESTS = 100; - /// @dev Minimum amount of delegation to prevent rounding attacks. - /// TODO: remove this after L2 transfer tool for delegation is removed - /// (delegation on L2 has its own slippage protection) - uint256 private constant MIN_DELEGATION = 1e18; - /// @dev Address of the staking extension contract address private immutable STAKING_EXTENSION_ADDRESS; @@ -741,8 +735,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * have been done before calling this function. */ function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) private { - // TODO: remove this after L2 transfer tool for delegation is removed - require(_tokens >= MIN_DELEGATION, HorizonStakingInsufficientTokens(_tokens, MIN_DELEGATION)); require( _provisions[_serviceProvider][_verifier].createdAt != 0, HorizonStakingInvalidProvision(_serviceProvider, _verifier) @@ -795,14 +787,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { pool.sharesThawing = pool.sharesThawing + thawingShares; delegation.shares = delegation.shares - _shares; - // TODO: remove this when L2 transfer tools are removed - if (delegation.shares != 0) { - uint256 remainingTokens = (delegation.shares * (pool.tokens - pool.tokensThawing)) / pool.shares; - require( - remainingTokens >= MIN_DELEGATION, - HorizonStakingInsufficientTokens(remainingTokens, MIN_DELEGATION) - ); - } bytes32 thawRequestId = _createThawRequest( _serviceProvider, diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index d1f08234b..bc878a4f5 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -5,9 +5,6 @@ pragma solidity 0.8.27; import { ICuration } from "@graphprotocol/contracts/contracts/curation/ICuration.sol"; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStakingExtension } from "../interfaces/internal/IHorizonStakingExtension.sol"; -import { IHorizonStakingTypes } from "../interfaces/internal/IHorizonStakingTypes.sol"; -import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; -import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { MathUtils } from "../libraries/MathUtils.sol"; @@ -22,18 +19,15 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; * to the Horizon Staking contract. It allows indexers to close allocations and collect pending query fees, but it * does not allow for the creation of new allocations. This should allow indexers to migrate to a subgraph data service * without losing rewards or having service interruptions. - * @dev TODO: Once the transition period and the transfer tools are deemed not necessary this contract - * can be removed. It's expected the transition period to last for a full allocation cycle (28 epochs). + * @dev TODO: Once the transition period passes this contract can be removed. It's expected the transition period to + * last for a full allocation cycle (28 epochs). * @custom:security-contact Please email security+contracts@thegraph.com if you find any * bugs. We may have an active bug bounty program. */ -contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizonStakingExtension { +contract HorizonStakingExtension is HorizonStakingBase, IHorizonStakingExtension { using TokenUtils for IGraphToken; using PPMMath for uint256; - /// @dev Minimum amount of tokens that can be delegated - uint256 private constant MINIMUM_DELEGATION = 1e18; - /** * @dev Checks that the sender is the L2GraphTokenGateway as configured on the Controller. */ @@ -53,52 +47,6 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon address subgraphDataServiceAddress ) HorizonStakingBase(controller, subgraphDataServiceAddress) {} - /** - * @notice Receive tokens with a callhook from the bridge. - * @dev The encoded _data can contain information about an service provider's stake - * or a delegator's delegation. - * See L1MessageCodes in IL2Staking for the supported messages. - * @dev "indexer" in this context refers to a service provider (legacy terminology for the bridge) - * @param from Token sender in L1 - * @param tokens Amount of tokens that were transferred - * @param data ABI-encoded callhook data which must include a uint8 code and either a ReceiveIndexerStakeData or ReceiveDelegationData struct. - */ - function onTokenTransfer( - address from, - uint256 tokens, - bytes calldata data - ) external override notPaused onlyL2Gateway { - require(from == _counterpartStakingAddress, "ONLY_L1_STAKING_THROUGH_BRIDGE"); - (uint8 code, bytes memory functionData) = abi.decode(data, (uint8, bytes)); - - if (code == uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_INDEXER_STAKE_CODE)) { - IL2StakingTypes.ReceiveIndexerStakeData memory indexerData = abi.decode( - functionData, - (IL2StakingTypes.ReceiveIndexerStakeData) - ); - _receiveIndexerStake(tokens, indexerData); - } else if (code == uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE)) { - IL2StakingTypes.ReceiveDelegationData memory delegationData = abi.decode( - functionData, - (IL2StakingTypes.ReceiveDelegationData) - ); - _receiveDelegation(tokens, delegationData); - } else { - revert("INVALID_CODE"); - } - } - - /** - * @notice Set the address of the counterpart (L1 or L2) staking contract. - * @dev This function can only be called by the governor. - * TODO: Remove after L2 transition period - * @param counterpart Address of the counterpart staking contract in the other chain, without any aliasing. - */ - function setCounterpartStakingAddress(address counterpart) external override onlyGovernor { - _counterpartStakingAddress = counterpart; - emit CounterpartStakingAddressSet(counterpart); - } - /** * @notice Close an allocation and free the staked tokens. * To be eligible for rewards a proof of indexing must be presented. @@ -318,71 +266,6 @@ contract HorizonStakingExtension is HorizonStakingBase, IL2StakingBase, IHorizon return _legacyOperatorAuth[serviceProvider][operator]; } - /** - * @dev Receive an Indexer's stake from L1. - * The specified amount is added to the indexer's stake; the indexer's - * address is specified in the _indexerData struct. - * @param _tokens Amount of tokens that were transferred - * @param _indexerData struct containing the indexer's address - */ - function _receiveIndexerStake( - uint256 _tokens, - IL2StakingTypes.ReceiveIndexerStakeData memory _indexerData - ) private { - address indexer = _indexerData.indexer; - // Deposit tokens into the indexer stake - _stake(indexer, _tokens); - } - - /** - * @dev Receive a Delegator's delegation from L1. - * The specified amount is added to the delegator's delegation; the delegator's - * address and the indexer's address are specified in the _delegationData struct. - * Note that no delegation tax is applied here. - * @dev Note that L1 staking contract only allows delegation transfer if the indexer has already transferred, - * this means the corresponding delegation pool exists. - * @param _tokens Amount of tokens that were transferred - * @param _delegationData struct containing the delegator's address and the indexer's address - */ - function _receiveDelegation( - uint256 _tokens, - IL2StakingTypes.ReceiveDelegationData memory _delegationData - ) private { - require(_provisions[_delegationData.indexer][SUBGRAPH_DATA_SERVICE_ADDRESS].createdAt != 0, "!provision"); - // Get the delegation pool of the indexer - DelegationPoolInternal storage pool = _legacyDelegationPools[_delegationData.indexer]; - IHorizonStakingTypes.DelegationInternal storage delegation = pool.delegators[_delegationData.delegator]; - - // If pool is in an invalid state, return the tokens to the delegator - if (pool.tokens == 0 && (pool.shares != 0 || pool.sharesThawing != 0)) { - _graphToken().transfer(_delegationData.delegator, _tokens); - emit TransferredDelegationReturnedToDelegator(_delegationData.indexer, _delegationData.delegator, _tokens); - return; - } - - // Calculate shares to issue (without applying any delegation tax) - uint256 shares = (pool.tokens == 0 || pool.tokens == pool.tokensThawing) - ? _tokens - : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); - - if (shares == 0 || _tokens < MINIMUM_DELEGATION) { - // If no shares would be issued (probably a rounding issue or attack), - // or if the amount is under the minimum delegation (which could be part of a rounding attack), - // return the tokens to the delegator - _graphToken().pushTokens(_delegationData.delegator, _tokens); - emit TransferredDelegationReturnedToDelegator(_delegationData.indexer, _delegationData.delegator, _tokens); - } else { - // Update the delegation pool - pool.tokens = pool.tokens + _tokens; - pool.shares = pool.shares + shares; - - // Update the individual delegation - delegation.shares = delegation.shares + shares; - - emit StakeDelegated(_delegationData.indexer, _delegationData.delegator, _tokens, shares); - } - } - /** * @dev Collect tax to burn for an amount of tokens. * @param _tokens Total tokens received used to calculate the amount of tax to collect diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index ff515962a..ce2755468 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -118,8 +118,8 @@ abstract contract HorizonStakingV1Storage { mapping(address serviceProvider => address rewardsDestination) internal __DEPRECATED_rewardsDestination; /// @dev Address of the counterpart Staking contract on L1/L2 - /// Used for the transfer tools. - address internal _counterpartStakingAddress; + /// Deprecated, transfer tools no longer enabled. + address internal __DEPRECATED_counterpartStakingAddress; /// @dev Address of the StakingExtension implementation /// This is now an immutable variable to save some gas. diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 3c2375b8d..f02733525 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -45,10 +45,8 @@ abstract contract GraphBaseTest is IHorizonStakingTypes, Utils, Constants { address subgraphDataServiceLegacyAddress = makeAddr("subgraphDataServiceLegacyAddress"); address subgraphDataServiceAddress = makeAddr("subgraphDataServiceAddress"); - - // We use these addresses to mock calls from the counterpart staking contract + address graphTokenGatewayAddress = makeAddr("GraphTokenGateway"); - address counterpartStaking = makeAddr("counterpartStaking"); /* Users */ @@ -188,8 +186,6 @@ abstract contract GraphBaseTest is IHorizonStakingTypes, Utils, Constants { proxyAdmin.upgrade(stakingProxy, address(stakingBase)); proxyAdmin.acceptProxy(stakingBase, stakingProxy); staking = IHorizonStaking(address(stakingProxy)); - - staking.setCounterpartStakingAddress(address(counterpartStaking)); } function setupProtocol() private { diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index cbf945515..d9b775b93 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -101,8 +101,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { uint256 tokensDelegatoion = tokens * delegationFeeCut / MAX_PPM; vm.assume(tokensDataService < tokens - tokensProtocol - tokensDelegatoion); - vm.assume(delegationTokens > MIN_DELEGATION); - vm.assume(delegationTokens <= MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 8b76678b4..19028bde1 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -119,8 +119,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { address escrowAddress = address(escrow); // Delegate tokens - vm.assume(tokensDelegate > MIN_DELEGATION); - vm.assume(tokensDelegate <= MAX_STAKING_TOKENS); + tokensDelegate = bound(tokensDelegate, 1, MAX_STAKING_TOKENS); vm.startPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, tokensDelegate, 0); diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index fab804e67..c0026c5f6 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -8,7 +8,6 @@ import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol import { IHorizonStakingBase } from "../../../contracts/interfaces/internal/IHorizonStakingBase.sol"; import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; -import { IL2StakingBase } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingBase.sol"; import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; import { MathUtils } from "../../../contracts/libraries/MathUtils.sol"; @@ -1233,107 +1232,6 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterMaxThawingPeriod, maxThawingPeriod); } - function _setCounterpartStakingAddress(address counterpartStakingAddress) internal { - // setCounterpartStakingAddress - vm.expectEmit(address(staking)); - emit IHorizonStakingExtension.CounterpartStakingAddressSet(counterpartStakingAddress); - staking.setCounterpartStakingAddress(counterpartStakingAddress); - - // after - address afterCounterpartStakingAddress = _getStorage_CounterpartStakingAddress(); - - // assert - assertEq(afterCounterpartStakingAddress, counterpartStakingAddress); - } - - struct BeforeValues_ReceiveDelegation { - DelegationPoolInternalTest pool; - DelegationInternal delegation; - uint256 delegatedTokens; - uint256 stakingBalance; - uint256 delegatorBalance; - } - function _onTokenTransfer_ReceiveDelegation(address from, uint256 tokens, bytes memory data) internal { - address serviceProvider; - address delegator; - { - (, bytes memory fnData) = abi.decode(data, (uint8, bytes)); - (serviceProvider, delegator) = abi.decode(fnData, (address, address)); - } - - // before - BeforeValues_ReceiveDelegation memory beforeValues; - beforeValues.pool = _getStorage_DelegationPoolInternal(serviceProvider, subgraphDataServiceLegacyAddress, true); - beforeValues.delegation = _getStorage_Delegation( - serviceProvider, - subgraphDataServiceLegacyAddress, - delegator, - true - ); - beforeValues.stakingBalance = token.balanceOf(address(staking)); - beforeValues.delegatorBalance = token.balanceOf(delegator); - beforeValues.delegatedTokens = staking.getDelegatedTokensAvailable( - serviceProvider, - subgraphDataServiceLegacyAddress - ); - - // calc - uint256 calcShares = (beforeValues.pool.tokens == 0 || beforeValues.pool.tokens == beforeValues.pool.tokensThawing) - ? tokens - : ((tokens * beforeValues.pool.shares) / (beforeValues.pool.tokens - beforeValues.pool.tokensThawing)); - - bool earlyExit = (calcShares == 0 || tokens < 1 ether) || - (beforeValues.pool.tokens == 0 && (beforeValues.pool.shares != 0 || beforeValues.pool.sharesThawing != 0)); - - // onTokenTransfer - if (earlyExit) { - vm.expectEmit(); - emit Transfer(address(staking), delegator, tokens); - vm.expectEmit(); - emit IL2StakingBase.TransferredDelegationReturnedToDelegator(serviceProvider, delegator, tokens); - } else { - vm.expectEmit(); - emit IHorizonStakingExtension.StakeDelegated(serviceProvider, delegator, tokens, calcShares); - } - staking.onTokenTransfer(from, tokens, data); - - // after - DelegationPoolInternalTest memory afterPool = _getStorage_DelegationPoolInternal(serviceProvider, subgraphDataServiceLegacyAddress, true); - DelegationInternal memory afterDelegation = _getStorage_Delegation( - serviceProvider, - subgraphDataServiceLegacyAddress, - delegator, - true - ); - uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable( - serviceProvider, - subgraphDataServiceLegacyAddress - ); - uint256 afterDelegatorBalance = token.balanceOf(delegator); - uint256 afterStakingBalance = token.balanceOf(address(staking)); - - // assertions - if (earlyExit) { - assertEq(beforeValues.pool.tokens, afterPool.tokens); - assertEq(beforeValues.pool.shares, afterPool.shares); - assertEq(beforeValues.pool.tokensThawing, afterPool.tokensThawing); - assertEq(beforeValues.pool.sharesThawing, afterPool.sharesThawing); - assertEq(0, afterDelegation.shares - beforeValues.delegation.shares); - assertEq(beforeValues.delegatedTokens, afterDelegatedTokens); - assertEq(beforeValues.delegatorBalance + tokens, afterDelegatorBalance); - assertEq(beforeValues.stakingBalance - tokens, afterStakingBalance); - } else { - assertEq(beforeValues.pool.tokens + tokens, afterPool.tokens); - assertEq(beforeValues.pool.shares + calcShares, afterPool.shares); - assertEq(beforeValues.pool.tokensThawing, afterPool.tokensThawing); - assertEq(beforeValues.pool.sharesThawing, afterPool.sharesThawing); - assertEq(calcShares, afterDelegation.shares - beforeValues.delegation.shares); - assertEq(beforeValues.delegatedTokens + tokens, afterDelegatedTokens); - assertEq(beforeValues.delegatorBalance, afterDelegatorBalance); - assertEq(beforeValues.stakingBalance, afterStakingBalance); - } - } - struct BeforeValues_Slash { Provision provision; DelegationPoolInternalTest pool; @@ -1928,11 +1826,6 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { return delegation; } - function _getStorage_CounterpartStakingAddress() internal view returns (address) { - uint256 slot = 24; - return address(uint160(uint256(vm.load(address(staking), bytes32(slot))))); - } - function _setStorage_allocation( IHorizonStakingExtension.Allocation memory allocation, address allocationId, diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index d846d1754..b1b45d118 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -31,7 +31,7 @@ contract HorizonStakingTest is HorizonStakingSharedTest { modifier useDelegation(uint256 delegationAmount) { address msgSender; (, msgSender, ) = vm.readCallers(); - vm.assume(delegationAmount > MIN_DELEGATION); + vm.assume(delegationAmount > 1); vm.assume(delegationAmount <= MAX_STAKING_TOKENS); vm.startPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); diff --git a/packages/horizon/test/staking/allocation/close.t.sol b/packages/horizon/test/staking/allocation/close.t.sol index 121307056..ce3cab273 100644 --- a/packages/horizon/test/staking/allocation/close.t.sol +++ b/packages/horizon/test/staking/allocation/close.t.sol @@ -71,7 +71,7 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingTest { function testCloseAllocation_WithDelegation(uint256 tokens, uint256 delegationTokens, uint32 indexingRewardCut) public useIndexer useAllocation(1 ether) { tokens = bound(tokens, 2, MAX_STAKING_TOKENS); - delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 0, MAX_STAKING_TOKENS); vm.assume(indexingRewardCut <= MAX_PPM); uint256 legacyAllocationTokens = tokens / 2; diff --git a/packages/horizon/test/staking/delegation/addToPool.t.sol b/packages/horizon/test/staking/delegation/addToPool.t.sol index b9a583ee8..de2647dfc 100644 --- a/packages/horizon/test/staking/delegation/addToPool.t.sol +++ b/packages/horizon/test/staking/delegation/addToPool.t.sol @@ -9,7 +9,6 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { modifier useValidDelegationAmount(uint256 tokens) { - vm.assume(tokens > MIN_DELEGATION); vm.assume(tokens <= MAX_STAKING_TOKENS); _; } @@ -29,6 +28,8 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { uint256 delegationAmount, uint256 addToPoolAmount ) public useIndexer useProvision(amount, 0, 0) useValidDelegationAmount(delegationAmount) useValidAddToPoolAmount(addToPoolAmount) { + delegationAmount = bound(delegationAmount, 1, MAX_STAKING_TOKENS); + // Initialize delegation pool resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index d5e101bca..5deb9b495 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -59,25 +59,9 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { staking.delegate(users.indexer, subgraphDataServiceAddress, 0, 0); } - function testDelegate_RevertWhen_BelowMinimum( - uint256 amount, - uint256 delegationAmount - ) public useIndexer useProvision(amount, 0, 0) { - vm.startPrank(users.delegator); - delegationAmount = bound(delegationAmount, 1, MIN_DELEGATION - 1); - token.approve(address(staking), delegationAmount); - bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInsufficientTokens(uint256,uint256)", - delegationAmount, - MIN_DELEGATION - ); - vm.expectRevert(expectedError); - staking.delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); - } - function testDelegate_LegacySubgraphService(uint256 amount, uint256 delegationAmount) public useIndexer { amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); - delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, 1, MAX_STAKING_TOKENS); _createProvision(users.indexer, subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); @@ -88,7 +72,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); @@ -109,7 +93,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 1ed6469b5..c5d61b6e5 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -27,14 +27,13 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 undelegateSteps ) public useIndexer useProvision(amount, 0, 0) { undelegateSteps = bound(undelegateSteps, 1, 10); - delegationAmount = bound(delegationAmount, MIN_DELEGATION + 10 wei, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, 10 wei, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); - // there is a min delegation amount of 1 ether after undelegating - uint256 undelegateAmount = (delegation.shares - 1 ether) / undelegateSteps; + uint256 undelegateAmount = delegation.shares / undelegateSteps; for (uint i = 0; i < undelegateSteps; i++) { _undelegate(users.indexer, subgraphDataServiceAddress, undelegateAmount); } @@ -96,25 +95,9 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { staking.undelegate(users.indexer, subgraphDataServiceAddress, overDelegationShares); } - function testUndelegate_RevertWhen_UndelegateLeavesInsufficientTokens( - uint256 delegationAmount, - uint256 withdrawShares - ) public useIndexer useProvision(10_000_000 ether, 0, 0) useDelegation(delegationAmount) { - resetPrank(users.delegator); - uint256 minShares = delegationAmount - MIN_DELEGATION + 1; - withdrawShares = bound(withdrawShares, minShares, delegationAmount - 1); - bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInsufficientTokens(uint256,uint256)", - delegationAmount - withdrawShares, - MIN_DELEGATION - ); - vm.expectRevert(expectedError); - staking.undelegate(users.indexer, subgraphDataServiceAddress, withdrawShares); - } - function testUndelegate_LegacySubgraphService(uint256 amount, uint256 delegationAmount) public useIndexer { amount = bound(amount, 1, MAX_STAKING_TOKENS); - delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, 1, MAX_STAKING_TOKENS); _createProvision(users.indexer, subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); @@ -128,7 +111,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 0419c85fc..866f49942 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -19,15 +19,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { vm.startPrank(users.delegator); DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); shares = bound(shares, 1, delegation.shares); - - if (shares != delegation.shares) { - DelegationPoolInternalTest memory pool = _getStorage_DelegationPoolInternal(users.indexer, subgraphDataServiceAddress, false); - uint256 tokens = (shares * (pool.tokens - pool.tokensThawing)) / pool.shares; - uint256 newTokensThawing = pool.tokensThawing + tokens; - uint256 remainingTokens = (delegation.shares * (pool.tokens - newTokensThawing)) / pool.shares; - vm.assume(remainingTokens >= MIN_DELEGATION); - } - + _undelegate(users.indexer, subgraphDataServiceAddress, shares); _; } @@ -137,7 +129,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { } function testWithdrawDelegation_LegacySubgraphService(uint256 delegationAmount) public useIndexer { - delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, 1, MAX_STAKING_TOKENS); _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 10_000_000 ether, 0, MAX_THAWING_PERIOD); resetPrank(users.delegator); @@ -157,7 +149,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, MAX_THAWING_PERIOD) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); diff --git a/packages/horizon/test/staking/governance/governance.t.sol b/packages/horizon/test/staking/governance/governance.t.sol index 401828a3e..434364a80 100644 --- a/packages/horizon/test/staking/governance/governance.t.sol +++ b/packages/horizon/test/staking/governance/governance.t.sol @@ -62,16 +62,4 @@ contract HorizonStakingGovernanceTest is HorizonStakingTest { vm.expectRevert(expectedError); staking.setMaxThawingPeriod(MAX_THAWING_PERIOD); } - - function testGovernance_SetCounterpartStakingAddress(address counterpartStakingAddress) public useGovernor { - _setCounterpartStakingAddress(counterpartStakingAddress); - } - - function testGovernance_RevertWhen_SetCounterpartStakingAddress_NotGovernor( - address counterpartStakingAddress - ) public useIndexer { - bytes memory expectedError = abi.encodeWithSignature("ManagedOnlyGovernor()"); - vm.expectRevert(expectedError); - staking.setCounterpartStakingAddress(counterpartStakingAddress); - } } \ No newline at end of file diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index bf1f2fb1e..aea8db986 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -54,7 +54,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 delegationTokens ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) { vm.assume(slashTokens > tokens); - delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); uint256 maxVerifierTokens = (tokens * MAX_MAX_VERIFIER_CUT) / MAX_PPM; vm.assume(verifierCutAmount <= maxVerifierTokens); @@ -72,8 +72,8 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 verifierCutAmount, uint256 delegationTokens ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); - slashTokens = bound(slashTokens, tokens + 1, tokens + delegationTokens); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + slashTokens = bound(slashTokens, tokens + 1, tokens + 1 + delegationTokens); verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); uint256 maxVerifierTokens = (tokens * MAX_MAX_VERIFIER_CUT) / MAX_PPM; vm.assume(verifierCutAmount <= maxVerifierTokens); @@ -90,7 +90,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 slashTokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) { - delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 0, MAX_STAKING_TOKENS); vm.assume(slashTokens > tokens + delegationTokens); vm.startPrank(subgraphDataServiceAddress); diff --git a/packages/horizon/test/staking/transfer-tools/ttools.t.sol b/packages/horizon/test/staking/transfer-tools/ttools.t.sol deleted file mode 100644 index 11bb6e62d..000000000 --- a/packages/horizon/test/staking/transfer-tools/ttools.t.sol +++ /dev/null @@ -1,166 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.27; - -import "forge-std/Test.sol"; - -import { HorizonStakingTest } from "../HorizonStaking.t.sol"; -import { IL2StakingTypes } from "@graphprotocol/contracts/contracts/l2/staking/IL2StakingTypes.sol"; - -contract HorizonStakingTransferToolsTest is HorizonStakingTest { - /* - * TESTS - */ - - function testOnTransfer_RevertWhen_InvalidCaller() public { - bytes memory data = abi.encode(uint8(0), new bytes(0)); // Valid codes are 0 and 1 - vm.expectRevert(bytes("ONLY_GATEWAY")); - staking.onTokenTransfer(counterpartStaking, 0, data); - } - - function testOnTransfer_RevertWhen_InvalidCounterpart() public { - resetPrank(graphTokenGatewayAddress); - - bytes memory data = abi.encode(uint8(0), new bytes(0)); // Valid codes are 0 and 1 - vm.expectRevert(bytes("ONLY_L1_STAKING_THROUGH_BRIDGE")); - staking.onTokenTransfer(address(staking), 0, data); - } - - function testOnTransfer_RevertWhen_InvalidData() public { - resetPrank(graphTokenGatewayAddress); - - vm.expectRevert(); - staking.onTokenTransfer(counterpartStaking, 0, new bytes(0)); - } - - function testOnTransfer_RevertWhen_InvalidCode() public { - resetPrank(graphTokenGatewayAddress); - - bytes memory data = abi.encode(uint8(2), new bytes(0)); // Valid codes are 0 and 1 - vm.expectRevert(bytes("INVALID_CODE")); - staking.onTokenTransfer(counterpartStaking, 0, data); - } - - function testOnTransfer_RevertWhen_ProvisionNotFound(uint256 amount) public { - amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); - - resetPrank(graphTokenGatewayAddress); - bytes memory data = abi.encode( - uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), - abi.encode(users.indexer, users.delegator) - ); - vm.expectRevert(bytes("!provision")); - staking.onTokenTransfer(counterpartStaking, amount, data); - } - - function testOnTransfer_ReceiveDelegation_RevertWhen_InvalidData() public { - resetPrank(graphTokenGatewayAddress); - - bytes memory data = abi.encode(uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), new bytes(0)); - vm.expectRevert(); - staking.onTokenTransfer(counterpartStaking, 0, data); - } - - function testOnTransfer_ReceiveDelegation(uint256 amount) public { - amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); - - // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 - resetPrank(users.indexer); - _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 100 ether, 0, 0); - - resetPrank(users.delegator); - _delegate(users.indexer, 1 ether); - - // send amount to staking contract - this should be done by the bridge - resetPrank(users.delegator); - token.transfer(address(staking), amount); - - resetPrank(graphTokenGatewayAddress); - bytes memory data = abi.encode( - uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), - abi.encode(users.indexer, users.delegator) - ); - _onTokenTransfer_ReceiveDelegation(counterpartStaking, amount, data); - } - - function testOnTransfer_ReceiveDelegation_WhenThawing(uint256 amount) public { - amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); - uint256 originalDelegationAmount = 10 ether; - - // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 - resetPrank(users.indexer); - _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 100 ether, 0, 1 days); - - resetPrank(users.delegator); - _delegate(users.indexer, originalDelegationAmount); - - // send amount to staking contract - this should be done by the bridge - resetPrank(users.delegator); - token.transfer(address(staking), amount); - - // thaw some delegation before receiving new delegation from L1 - resetPrank(users.delegator); - _undelegate(users.indexer, originalDelegationAmount / 10); - - resetPrank(graphTokenGatewayAddress); - bytes memory data = abi.encode( - uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), - abi.encode(users.indexer, users.delegator) - ); - _onTokenTransfer_ReceiveDelegation(counterpartStaking, amount, data); - } - - function testOnTransfer_ReceiveDelegation_WhenInvalidPool(uint256 amount) public useDelegationSlashing() { - amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); - uint256 originalDelegationAmount = 10 ether; - uint256 provisionSize = 100 ether; - - // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 - resetPrank(users.indexer); - _createProvision(users.indexer, subgraphDataServiceLegacyAddress, provisionSize, 0, 1 days); - - // initialize the delegation pool - resetPrank(users.delegator); - _delegate(users.indexer, originalDelegationAmount); - - // slash the entire provision - resetPrank(subgraphDataServiceLegacyAddress); - _slash(users.indexer, subgraphDataServiceLegacyAddress, provisionSize + originalDelegationAmount, 0); - - // send amount to staking contract - this should be done by the bridge - resetPrank(users.delegator); - token.transfer(address(staking), amount); - - resetPrank(graphTokenGatewayAddress); - bytes memory data = abi.encode( - uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), - abi.encode(users.indexer, users.delegator) - ); - _onTokenTransfer_ReceiveDelegation(counterpartStaking, amount, data); - } - function testOnTransfer_ReceiveDelegation_WhenAllThawing(uint256 amountReceived, uint256 amountDelegated) public { - amountReceived = bound(amountReceived, 1 ether, MAX_STAKING_TOKENS); - amountDelegated = bound(amountDelegated, 1 ether, MAX_STAKING_TOKENS); - - // create provision and legacy delegation pool - this is done by the bridge when indexers move to L2 - resetPrank(users.indexer); - _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 100 ether, 0, 1 days); - - resetPrank(users.delegator); - _delegate(users.indexer, amountDelegated); - - // send amount to staking contract - this should be done by the bridge - resetPrank(users.delegator); - token.transfer(address(staking), amountReceived); - - // thaw all delegation before receiving new delegation from L1 - resetPrank(users.delegator); - _undelegate(users.indexer, amountDelegated); - - resetPrank(graphTokenGatewayAddress); - bytes memory data = abi.encode( - uint8(IL2StakingTypes.L1MessageCodes.RECEIVE_DELEGATION_CODE), - abi.encode(users.indexer, users.delegator) - ); - _onTokenTransfer_ReceiveDelegation(counterpartStaking, amountReceived, data); - } -} diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index f08fa4ec1..270bb1e43 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -14,7 +14,6 @@ abstract contract Constants { uint256 internal constant MAX_THAW_REQUESTS = 100; uint32 internal constant MAX_MAX_VERIFIER_CUT = 1000000; // 100% in parts per million uint64 internal constant MAX_THAWING_PERIOD = 28 days; - uint256 internal constant MIN_DELEGATION = 1 ether; uint32 internal constant THAWING_PERIOD_IN_BLOCKS = 300; // Epoch manager uint256 internal constant EPOCH_LENGTH = 1; diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol index 089fdd9a9..d0f28fcec 100644 --- a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -41,8 +41,7 @@ abstract contract SubgraphServiceSharedTest is HorizonStakingSharedTest { } modifier useDelegation(uint256 tokens) { - // 1e18 is the minimum delegation amount until L2 transfers are removed - vm.assume(tokens > 1e18); + vm.assume(tokens > 1); vm.assume(tokens < 10_000_000_000 ether); (, address msgSender,) = vm.readCallers(); resetPrank(users.delegator); From 2284a3daf7fa19c2a790717290781b0e1ae32d15 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Fri, 4 Oct 2024 02:34:30 +1000 Subject: [PATCH 258/343] fix(Horizon): add input validation for set provision parameters (#1055) * fix(Horizon): add input validation for set provision parameters * fix: subgraph service tests * fix: use new parameter names * fix: subgraph-service tests --- .../internal/IHorizonStakingMain.sol | 5 +- .../contracts/staking/HorizonStaking.sol | 14 +++--- .../HorizonStakingShared.t.sol | 2 +- .../test/staking/provision/locked.t.sol | 6 +-- .../test/staking/provision/parameters.t.sol | 48 ++++++++++++++++++- .../test/staking/provision/provision.t.sol | 9 ++-- .../serviceProvider/serviceProvider.t.sol | 8 ++-- .../horizon/test/staking/slash/slash.t.sol | 15 +++--- packages/horizon/test/utils/Constants.sol | 3 +- .../subgraphService/provision/accept.t.sol | 4 +- .../subgraph-service/test/utils/Constants.sol | 2 +- 11 files changed, 76 insertions(+), 40 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index c0d18366e..210146bf4 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -341,9 +341,8 @@ interface IHorizonStakingMain { /** * @notice Thrown when attempting to create a provision with an invalid maximum verifier cut. * @param maxVerifierCut The maximum verifier cut - * @param maxMaxVerifierCut The maximum `maxVerifierCut` allowed */ - error HorizonStakingInvalidMaxVerifierCut(uint32 maxVerifierCut, uint32 maxMaxVerifierCut); + error HorizonStakingInvalidMaxVerifierCut(uint32 maxVerifierCut); /** * @notice Thrown when attempting to create a provision with an invalid thawing period. @@ -528,7 +527,7 @@ interface IHorizonStakingMain { * @dev Requirements: * - `tokens` cannot be zero. * - The `serviceProvider` must have enough idle stake to cover the tokens to provision. - * - `maxVerifierCut` must be less than or equal to `MAX_MAX_VERIFIER_CUT`. + * - `maxVerifierCut` must be a valid PPM. * - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. * * Emits a {ProvisionCreated} event. diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 325952ddd..a00cda8af 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -31,10 +31,6 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { using PPMMath for uint256; using LinkedList for LinkedList.List; - /// @dev Maximum value that can be set as the maxVerifierCut in a provision. - /// It is equivalent to 100% in parts-per-million - uint32 private constant MAX_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM); - /// @dev Fixed point precision uint256 private constant FIXED_POINT_PRECISION = 1e18; @@ -224,6 +220,11 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint32 newMaxVerifierCut, uint64 newThawingPeriod ) external override notPaused onlyAuthorized(serviceProvider, verifier) { + require(PPMMath.isValidPPM(newMaxVerifierCut), HorizonStakingInvalidMaxVerifierCut(newMaxVerifierCut)); + require( + newThawingPeriod <= _maxThawingPeriod, + HorizonStakingInvalidThawingPeriod(newThawingPeriod, _maxThawingPeriod) + ); Provision storage prov = _provisions[serviceProvider][verifier]; require(prov.createdAt != 0, HorizonStakingInvalidProvision(serviceProvider, verifier)); @@ -626,10 +627,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint64 _thawingPeriod ) private { require(_tokens > 0, HorizonStakingInvalidZeroTokens()); - require( - _maxVerifierCut <= MAX_MAX_VERIFIER_CUT, - HorizonStakingInvalidMaxVerifierCut(_maxVerifierCut, MAX_MAX_VERIFIER_CUT) - ); + require(PPMMath.isValidPPM(_maxVerifierCut), HorizonStakingInvalidMaxVerifierCut(_maxVerifierCut)); require( _thawingPeriod <= _maxThawingPeriod, HorizonStakingInvalidThawingPeriod(_thawingPeriod, _maxThawingPeriod) diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index c0026c5f6..f9796cf94 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -81,7 +81,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // use assume instead of bound to avoid the bounding falling out of scope vm.assume(tokens > 0); vm.assume(tokens <= MAX_STAKING_TOKENS); - vm.assume(maxVerifierCut <= MAX_MAX_VERIFIER_CUT); + vm.assume(maxVerifierCut <= MAX_PPM); vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); _createProvision(users.indexer, dataService, tokens, maxVerifierCut, thawingPeriod); diff --git a/packages/horizon/test/staking/provision/locked.t.sol b/packages/horizon/test/staking/provision/locked.t.sol index a8adfc774..a4d8eda92 100644 --- a/packages/horizon/test/staking/provision/locked.t.sol +++ b/packages/horizon/test/staking/provision/locked.t.sol @@ -24,7 +24,7 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { users.indexer, subgraphDataServiceAddress, amount, - MAX_MAX_VERIFIER_CUT, + MAX_PPM, MAX_THAWING_PERIOD ); @@ -52,7 +52,7 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { users.indexer, subgraphDataServiceAddress, amount, - MAX_MAX_VERIFIER_CUT, + MAX_PPM, MAX_THAWING_PERIOD ); } @@ -75,7 +75,7 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { users.indexer, subgraphDataServiceAddress, amount, - MAX_MAX_VERIFIER_CUT, + MAX_PPM, MAX_THAWING_PERIOD ); } diff --git a/packages/horizon/test/staking/provision/parameters.t.sol b/packages/horizon/test/staking/provision/parameters.t.sol index 8171f95b4..6eccca06e 100644 --- a/packages/horizon/test/staking/provision/parameters.t.sol +++ b/packages/horizon/test/staking/provision/parameters.t.sol @@ -7,6 +7,17 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; contract HorizonStakingProvisionParametersTest is HorizonStakingTest { + + /* + * MODIFIERS + */ + + modifier useValidParameters(uint32 maxVerifierCut, uint64 thawingPeriod) { + vm.assume(maxVerifierCut <= MAX_PPM); + vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); + _; + } + /* * TESTS */ @@ -15,14 +26,14 @@ contract HorizonStakingProvisionParametersTest is HorizonStakingTest { uint256 amount, uint32 maxVerifierCut, uint64 thawingPeriod - ) public useIndexer useProvision(amount, 0, 0) { + ) public useIndexer useProvision(amount, 0, 0) useValidParameters(maxVerifierCut, thawingPeriod) { _setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); } function test_ProvisionParametersSet_RevertWhen_ProvisionNotExists( uint32 maxVerifierCut, uint64 thawingPeriod - ) public useIndexer { + ) public useIndexer useValidParameters(maxVerifierCut, thawingPeriod) { vm.expectRevert( abi.encodeWithSignature( "HorizonStakingInvalidProvision(address,address)", @@ -71,4 +82,37 @@ contract HorizonStakingProvisionParametersTest is HorizonStakingTest { _acceptProvisionParameters(users.indexer); vm.stopPrank(); } + + function test_ProvisionParameters_RevertIf_InvalidMaxVerifierCut( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + maxVerifierCut = uint32(bound(maxVerifierCut, MAX_PPM + 1, type(uint32).max)); + vm.assume(thawingPeriod <= MAX_THAWING_PERIOD); + vm.expectRevert( + abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidMaxVerifierCut.selector, + maxVerifierCut + ) + ); + staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); + } + + function test_ProvisionParameters_RevertIf_InvalidThawingPeriod( + uint256 amount, + uint32 maxVerifierCut, + uint64 thawingPeriod + ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { + vm.assume(maxVerifierCut <= MAX_PPM); + thawingPeriod = uint64(bound(thawingPeriod, MAX_THAWING_PERIOD + 1, type(uint64).max)); + vm.expectRevert( + abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidThawingPeriod.selector, + thawingPeriod, + MAX_THAWING_PERIOD + ) + ); + staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); + } } diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol index 50dc12057..cabe2f25e 100644 --- a/packages/horizon/test/staking/provision/provision.t.sol +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -12,7 +12,7 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { function testProvision_Create(uint256 tokens, uint32 maxVerifierCut, uint64 thawingPeriod) public useIndexer { tokens = bound(tokens, 1, MAX_STAKING_TOKENS); - maxVerifierCut = uint32(bound(maxVerifierCut, 0, MAX_MAX_VERIFIER_CUT)); + maxVerifierCut = uint32(bound(maxVerifierCut, 0, MAX_PPM)); thawingPeriod = uint32(bound(thawingPeriod, 0, MAX_THAWING_PERIOD)); _createProvision(users.indexer, subgraphDataServiceAddress, tokens, maxVerifierCut, thawingPeriod); @@ -28,11 +28,10 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { uint256 amount, uint32 maxVerifierCut ) public useIndexer useStake(amount) { - vm.assume(maxVerifierCut > MAX_MAX_VERIFIER_CUT); + vm.assume(maxVerifierCut > MAX_PPM); bytes memory expectedError = abi.encodeWithSignature( - "HorizonStakingInvalidMaxVerifierCut(uint32,uint32)", - maxVerifierCut, - MAX_MAX_VERIFIER_CUT + "HorizonStakingInvalidMaxVerifierCut(uint32)", + maxVerifierCut ); vm.expectRevert(expectedError); staking.provision(users.indexer, subgraphDataServiceAddress, amount, maxVerifierCut, 0); diff --git a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol index 63578791a..7db480869 100644 --- a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol +++ b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol @@ -84,7 +84,7 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { uint256 amount, uint256 delegationAmount, uint32 delegationRatio - ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { + ) public useIndexer useProvision(amount, MAX_PPM, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { uint256 tokensAvailable = staking.getTokensAvailable(users.indexer, subgraphDataServiceAddress, delegationRatio); uint256 tokensDelegatedMax = amount * (uint256(delegationRatio)); @@ -95,7 +95,7 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { function testServiceProvider_GetProviderTokensAvailable( uint256 amount, uint256 delegationAmount - ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { + ) public useIndexer useProvision(amount, MAX_PPM, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { uint256 providerTokensAvailable = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); // Should not include delegated tokens assertEq(providerTokensAvailable, amount); @@ -103,7 +103,7 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { function testServiceProvider_HasStake( uint256 amount - ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) { + ) public useIndexer useProvision(amount, MAX_PPM, MAX_THAWING_PERIOD) { assertTrue(staking.hasStake(users.indexer)); _thaw(users.indexer, subgraphDataServiceAddress, amount); @@ -116,7 +116,7 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { function testServiceProvider_GetIndexerStakedTokens( uint256 amount - ) public useIndexer useProvision(amount, MAX_MAX_VERIFIER_CUT, MAX_THAWING_PERIOD) { + ) public useIndexer useProvision(amount, MAX_PPM, MAX_THAWING_PERIOD) { assertEq(staking.getIndexerStakedTokens(users.indexer), amount); _thaw(users.indexer, subgraphDataServiceAddress, amount); diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index aea8db986..66a645b7a 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -52,12 +52,11 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 slashTokens, uint256 verifierCutAmount, uint256 delegationTokens - ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) { + ) public useIndexer useProvision(tokens, MAX_PPM, 0) { vm.assume(slashTokens > tokens); delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); - verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); - uint256 maxVerifierTokens = (tokens * MAX_MAX_VERIFIER_CUT) / MAX_PPM; - vm.assume(verifierCutAmount <= maxVerifierTokens); + verifierCutAmount = bound(verifierCutAmount, 0, MAX_PPM); + vm.assume(verifierCutAmount <= tokens); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); @@ -71,12 +70,10 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 slashTokens, uint256 verifierCutAmount, uint256 delegationTokens - ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) useDelegationSlashing() { + ) public useIndexer useProvision(tokens, MAX_PPM, 0) useDelegationSlashing() { delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); slashTokens = bound(slashTokens, tokens + 1, tokens + 1 + delegationTokens); - verifierCutAmount = bound(verifierCutAmount, 0, MAX_MAX_VERIFIER_CUT); - uint256 maxVerifierTokens = (tokens * MAX_MAX_VERIFIER_CUT) / MAX_PPM; - vm.assume(verifierCutAmount <= maxVerifierTokens); + verifierCutAmount = bound(verifierCutAmount, 0, tokens); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); @@ -89,7 +86,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 tokens, uint256 slashTokens, uint256 delegationTokens - ) public useIndexer useProvision(tokens, MAX_MAX_VERIFIER_CUT, 0) { + ) public useIndexer useProvision(tokens, MAX_PPM, 0) { delegationTokens = bound(delegationTokens, 0, MAX_STAKING_TOKENS); vm.assume(slashTokens > tokens + delegationTokens); diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index 270bb1e43..5b1449ea7 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.27; abstract contract Constants { - uint256 internal constant MAX_PPM = 1000000; // 100% in parts per million + uint32 internal constant MAX_PPM = 1000000; // 100% in parts per million uint256 internal constant delegationFeeCut = 100000; // 10% in parts per million uint256 internal constant MAX_STAKING_TOKENS = 10_000_000_000 ether; // GraphEscrow parameters @@ -12,7 +12,6 @@ abstract contract Constants { uint256 internal constant protocolPaymentCut = 10000; // Staking constants uint256 internal constant MAX_THAW_REQUESTS = 100; - uint32 internal constant MAX_MAX_VERIFIER_CUT = 1000000; // 100% in parts per million uint64 internal constant MAX_THAWING_PERIOD = 28 days; uint32 internal constant THAWING_PERIOD_IN_BLOCKS = 300; // Epoch manager diff --git a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol index 44ce19b5f..812a27639 100644 --- a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol +++ b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol @@ -22,7 +22,7 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); vm.assume(newVerifierCut >= fishermanRewardPercentage); vm.assume(newVerifierCut <= MAX_PPM); - vm.assume(newDisputePeriod >= disputePeriod); + newDisputePeriod = uint64(bound(newDisputePeriod, disputePeriod, MAX_WAIT_PERIOD)); // Setup indexer _createProvision(users.indexer, tokens, fishermanRewardPercentage, disputePeriod); @@ -58,7 +58,7 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { uint32 newVerifierCut ) public useIndexer { tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); - vm.assume(newVerifierCut > MAX_PPM); + vm.assume(newVerifierCut < maxSlashingPercentage); // Setup indexer _createProvision(users.indexer, tokens, fishermanRewardPercentage, disputePeriod); diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index eabf5e7b2..f1aac3d16 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -6,7 +6,7 @@ abstract contract Constants { uint256 internal constant MAX_PPM = 1_000_000; uint256 internal constant EPOCH_LENGTH = 1; // Dispute Manager - uint64 internal constant disputePeriod = 300; // 5 minutes + uint64 internal constant disputePeriod = 7 days; uint256 internal constant disputeDeposit = 100 ether; // 100 GRT uint32 internal constant fishermanRewardPercentage = 500000; // 50% uint32 internal constant maxSlashingPercentage = 500000; // 50% From f88f33519f2e267ab623a98bf7dbd07177b37692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 4 Oct 2024 13:29:32 -0300 Subject: [PATCH 259/343] feat: add rav collected event (#1056) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/ITAPCollector.sol | 20 +++++++++++++++++++ .../payments/collectors/TAPCollector.sol | 9 +++++++++ 2 files changed, 29 insertions(+) diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index 6cfc16485..72a8dc0bc 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -34,6 +34,26 @@ interface ITAPCollector is IPaymentsCollector { bytes signature; } + /** + * @notice Emitted when a RAV is collected + * @param payer The address of the payer + * @param dataService The address of the data service + * @param serviceProvider The address of the service provider + * @param timestampNs The timestamp of the RAV + * @param valueAggregate The total amount owed to the service provider + * @param metadata Arbitrary metadata + * @param signature The signature of the RAV + */ + event RAVCollected( + address indexed payer, + address indexed dataService, + address indexed serviceProvider, + uint64 timestampNs, + uint128 valueAggregate, + bytes metadata, + bytes signature + ); + /** * Thrown when the caller is not the data service the RAV was issued to * @param caller The address of the caller diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index f9b228ead..91293af09 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -85,6 +85,15 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { } emit PaymentCollected(paymentType, payer, receiver, tokensToCollect, dataService, tokensDataService); + emit RAVCollected( + payer, + dataService, + receiver, + signedRAV.rav.timestampNs, + signedRAV.rav.valueAggregate, + signedRAV.rav.metadata, + signedRAV.signature + ); return tokensToCollect; } From e40c8fe49c25c3a119223f7aafeb8c677e95db5d Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Tue, 8 Oct 2024 01:03:45 +1100 Subject: [PATCH 260/343] fix(Horizon): withdraw delegation with beneficiary test fix (#1057) * fix(Horizon): withdraw delegation with beneficiary test fix * fix: skip addresses that will overflow --- packages/horizon/test/staking/delegation/withdraw.t.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 866f49942..b7644c62a 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -179,6 +179,8 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useDelegation(delegationAmount) { vm.assume(beneficiary != address(0)); + // Skip beneficiary if balance will overflow + vm.assume(token.balanceOf(beneficiary) < type(uint256).max - delegationAmount); // Delegator undelegates to beneficiary resetPrank(users.delegator); From 8b3a86b7d8a277b9761a94f43e3ae84e5b3e9568 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Thu, 3 Oct 2024 13:29:29 +0100 Subject: [PATCH 261/343] fix: apply consistent mapping order HorizonStakingNotAuthorized (OZ_N-05) --- .../contracts/interfaces/internal/IHorizonStakingMain.sol | 2 +- packages/horizon/contracts/staking/HorizonStaking.sol | 2 +- packages/horizon/test/staking/provision/deprovision.t.sol | 4 ++-- packages/horizon/test/staking/provision/locked.t.sol | 4 ++-- packages/horizon/test/staking/provision/parameters.t.sol | 4 ++-- packages/horizon/test/staking/provision/provision.t.sol | 4 ++-- packages/horizon/test/staking/provision/reprovision.t.sol | 4 ++-- packages/horizon/test/staking/provision/thaw.t.sol | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 210146bf4..002f9e9b3 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -336,7 +336,7 @@ interface IHorizonStakingMain { * @param serviceProvider The service provider address * @param verifier The verifier address */ - error HorizonStakingNotAuthorized(address caller, address serviceProvider, address verifier); + error HorizonStakingNotAuthorized(address serviceProvider, address verifier, address caller); /** * @notice Thrown when attempting to create a provision with an invalid maximum verifier cut. diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index a00cda8af..b6009043a 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -48,7 +48,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { modifier onlyAuthorized(address serviceProvider, address verifier) { require( _isAuthorized(msg.sender, serviceProvider, verifier), - HorizonStakingNotAuthorized(msg.sender, serviceProvider, verifier) + HorizonStakingNotAuthorized(serviceProvider, verifier, msg.sender) ); _; } diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol index 6d03c3f6e..376b05e14 100644 --- a/packages/horizon/test/staking/provision/deprovision.t.sol +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -75,9 +75,9 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { vm.startPrank(users.operator); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingNotAuthorized(address,address,address)", - users.operator, users.indexer, - subgraphDataServiceAddress + subgraphDataServiceAddress, + users.operator ); vm.expectRevert(expectedError); staking.deprovision(users.indexer, subgraphDataServiceAddress, 0); diff --git a/packages/horizon/test/staking/provision/locked.t.sol b/packages/horizon/test/staking/provision/locked.t.sol index a4d8eda92..66745839b 100644 --- a/packages/horizon/test/staking/provision/locked.t.sol +++ b/packages/horizon/test/staking/provision/locked.t.sol @@ -66,9 +66,9 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { vm.startPrank(users.operator); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingNotAuthorized(address,address,address)", - users.operator, users.indexer, - subgraphDataServiceAddress + subgraphDataServiceAddress, + users.operator ); vm.expectRevert(expectedError); staking.provisionLocked( diff --git a/packages/horizon/test/staking/provision/parameters.t.sol b/packages/horizon/test/staking/provision/parameters.t.sol index 6eccca06e..377684630 100644 --- a/packages/horizon/test/staking/provision/parameters.t.sol +++ b/packages/horizon/test/staking/provision/parameters.t.sol @@ -53,9 +53,9 @@ contract HorizonStakingProvisionParametersTest is HorizonStakingTest { vm.expectRevert( abi.encodeWithSignature( "HorizonStakingNotAuthorized(address,address,address)", - msg.sender, users.indexer, - subgraphDataServiceAddress + subgraphDataServiceAddress, + msg.sender ) ); staking.setProvisionParameters(users.indexer, subgraphDataServiceAddress, maxVerifierCut, thawingPeriod); diff --git a/packages/horizon/test/staking/provision/provision.t.sol b/packages/horizon/test/staking/provision/provision.t.sol index cabe2f25e..81ed628fd 100644 --- a/packages/horizon/test/staking/provision/provision.t.sol +++ b/packages/horizon/test/staking/provision/provision.t.sol @@ -101,9 +101,9 @@ contract HorizonStakingProvisionTest is HorizonStakingTest { vm.startPrank(users.operator); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingNotAuthorized(address,address,address)", - users.operator, users.indexer, - subgraphDataServiceAddress + subgraphDataServiceAddress, + users.operator ); vm.expectRevert(expectedError); staking.provision(users.indexer, subgraphDataServiceAddress, amount, maxVerifierCut, thawingPeriod); diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index 722ecfe59..cdcdb6237 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -58,9 +58,9 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { vm.startPrank(users.operator); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingNotAuthorized(address,address,address)", - users.operator, users.indexer, - newDataService + newDataService, + users.operator ); vm.expectRevert(expectedError); staking.reprovision(users.indexer, subgraphDataServiceAddress, newDataService, 0); diff --git a/packages/horizon/test/staking/provision/thaw.t.sol b/packages/horizon/test/staking/provision/thaw.t.sol index bb0b3409d..3672683ba 100644 --- a/packages/horizon/test/staking/provision/thaw.t.sol +++ b/packages/horizon/test/staking/provision/thaw.t.sol @@ -49,9 +49,9 @@ contract HorizonStakingThawTest is HorizonStakingTest { vm.startPrank(users.operator); bytes memory expectedError = abi.encodeWithSignature( "HorizonStakingNotAuthorized(address,address,address)", - users.operator, users.indexer, - subgraphDataServiceAddress + subgraphDataServiceAddress, + users.operator ); vm.expectRevert(expectedError); staking.thaw(users.indexer, subgraphDataServiceAddress, amount); From fa9da60ff285080cd22c45e2b94ac83f47904994 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 4 Oct 2024 11:56:13 +0100 Subject: [PATCH 262/343] fix: apply consistent mapping order ProvisionManagerNotAuthorized (OZ_N-05) --- .../contracts/data-service/utilities/ProvisionManager.sol | 4 ++-- .../test/subgraphService/allocation/start.t.sol | 4 ++-- .../test/subgraphService/allocation/stop.t.sol | 4 ++-- .../test/subgraphService/collect/query/query.t.sol | 4 ++-- .../test/subgraphService/provider/register.t.sol | 4 ++-- .../test/subgraphService/provision/accept.t.sol | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 845c1bdf6..02a51e4b6 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -79,7 +79,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa * @param caller The address of the caller. * @param serviceProvider The address of the service provider. */ - error ProvisionManagerNotAuthorized(address caller, address serviceProvider); + error ProvisionManagerNotAuthorized(address serviceProvider, address caller); /** * @notice Thrown when a provision is not found. @@ -93,7 +93,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa modifier onlyAuthorizedForProvision(address serviceProvider) { require( _graphStaking().isAuthorized(msg.sender, serviceProvider, address(this)), - ProvisionManagerNotAuthorized(msg.sender, serviceProvider) + ProvisionManagerNotAuthorized(serviceProvider, msg.sender) ); _; } diff --git a/packages/subgraph-service/test/subgraphService/allocation/start.t.sol b/packages/subgraph-service/test/subgraphService/allocation/start.t.sol index 9157444fb..f5d76a350 100644 --- a/packages/subgraph-service/test/subgraphService/allocation/start.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/start.t.sol @@ -60,8 +60,8 @@ contract SubgraphServiceAllocationStartTest is SubgraphServiceTest { bytes memory data = _generateData(tokens); vm.expectRevert(abi.encodeWithSelector( ProvisionManager.ProvisionManagerNotAuthorized.selector, - users.operator, - users.indexer + users.indexer, + users.operator )); subgraphService.startService(users.indexer, data); } diff --git a/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol b/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol index ee5958115..8a2b2a284 100644 --- a/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/stop.t.sol @@ -49,8 +49,8 @@ contract SubgraphServiceAllocationStopTest is SubgraphServiceTest { vm.expectRevert( abi.encodeWithSelector( ProvisionManager.ProvisionManagerNotAuthorized.selector, - users.operator, - users.indexer + users.indexer, + users.operator ) ); subgraphService.stopService(users.indexer, data); diff --git a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol index 6ad7b5347..7f57f06f8 100644 --- a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol @@ -112,8 +112,8 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { vm.expectRevert( abi.encodeWithSelector( ProvisionManager.ProvisionManagerNotAuthorized.selector, - users.operator, - users.indexer + users.indexer, + users.operator ) ); subgraphService.collect(users.indexer, paymentType, data); diff --git a/packages/subgraph-service/test/subgraphService/provider/register.t.sol b/packages/subgraph-service/test/subgraphService/provider/register.t.sol index 1df1f5571..6a4a36737 100644 --- a/packages/subgraph-service/test/subgraphService/provider/register.t.sol +++ b/packages/subgraph-service/test/subgraphService/provider/register.t.sol @@ -41,8 +41,8 @@ contract SubgraphServiceProviderRegisterTest is SubgraphServiceTest { resetPrank(users.operator); vm.expectRevert(abi.encodeWithSelector( ProvisionManager.ProvisionManagerNotAuthorized.selector, - users.operator, - users.indexer + users.indexer, + users.operator )); bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination); subgraphService.register(users.indexer, data); diff --git a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol index 812a27639..f89cb307e 100644 --- a/packages/subgraph-service/test/subgraphService/provision/accept.t.sol +++ b/packages/subgraph-service/test/subgraphService/provision/accept.t.sol @@ -47,8 +47,8 @@ contract SubgraphServiceProvisionAcceptTest is SubgraphServiceTest { resetPrank(users.operator); vm.expectRevert(abi.encodeWithSelector( ProvisionManager.ProvisionManagerNotAuthorized.selector, - users.operator, - users.indexer + users.indexer, + users.operator )); subgraphService.acceptProvisionPendingParameters(users.indexer, ""); } From b75154c6971d037ac8a828e40b5d572afb7d5c2a Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 4 Oct 2024 11:58:06 +0100 Subject: [PATCH 263/343] fix: apply consistent mapping order isAuthorized (OZ_N-05) --- .../contracts/interfaces/internal/IHorizonStakingMain.sol | 4 ++-- packages/horizon/contracts/staking/HorizonStaking.sol | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 002f9e9b3..f4fbe733b 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -912,10 +912,10 @@ interface IHorizonStakingMain { /** * @notice Check if an operator is authorized for the caller on a specific verifier / data service. - * @param operator The address to check for auth * @param serviceProvider The service provider on behalf of whom they're claiming to act * @param verifier The verifier / data service on which they're claiming to act + * @param operator The address to check for auth * @return Whether the operator is authorized or not */ - function isAuthorized(address operator, address serviceProvider, address verifier) external view returns (bool); + function isAuthorized(address serviceProvider, address verifier, address operator) external view returns (bool); } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index b6009043a..e838f3cf3 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -522,9 +522,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice See {IHorizonStakingMain-isAuthorized}. */ function isAuthorized( - address operator, address serviceProvider, - address verifier + address verifier, + address operator ) external view override returns (bool) { return _isAuthorized(operator, serviceProvider, verifier); } From cc14383bd5420bfd8ba7d6adc689f7d91375084a Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 4 Oct 2024 11:59:25 +0100 Subject: [PATCH 264/343] fix: apply consistent mapping order _isAuthorized (OZ_N-05) --- packages/horizon/contracts/staking/HorizonStaking.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index e838f3cf3..3f9653f95 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -47,7 +47,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { */ modifier onlyAuthorized(address serviceProvider, address verifier) { require( - _isAuthorized(msg.sender, serviceProvider, verifier), + _isAuthorized(serviceProvider, verifier, msg.sender), HorizonStakingNotAuthorized(serviceProvider, verifier, msg.sender) ); _; @@ -526,7 +526,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, address operator ) external view override returns (bool) { - return _isAuthorized(operator, serviceProvider, verifier); + return _isAuthorized(serviceProvider, verifier, operator); } /* @@ -975,7 +975,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @dev Note that this function handles the special case where the verifier is the subgraph data service, * where the operator settings are stored in the legacy mapping. */ - function _isAuthorized(address _operator, address _serviceProvider, address _verifier) private view returns (bool) { + function _isAuthorized(address _serviceProvider, address _verifier, address _operator) private view returns (bool) { if (_operator == _serviceProvider) { return true; } From 6af9e66f55d1bd680c61e3056c50decfa19671ee Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 4 Oct 2024 15:17:03 +0100 Subject: [PATCH 265/343] fix: apply consistent mapping order isAuthorized (OZ_N-05) --- .../contracts/data-service/utilities/ProvisionManager.sol | 2 +- .../shared/horizon-staking/HorizonStakingShared.t.sol | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 02a51e4b6..3b3ebd356 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -92,7 +92,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa */ modifier onlyAuthorizedForProvision(address serviceProvider) { require( - _graphStaking().isAuthorized(msg.sender, serviceProvider, address(this)), + _graphStaking().isAuthorized(serviceProvider, address(this), msg.sender), ProvisionManagerNotAuthorized(serviceProvider, msg.sender) ); _; diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index f9796cf94..d0c46a8dc 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -753,7 +753,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // before bool beforeOperatorAllowed = _getStorage_OperatorAuth(msgSender, operator, verifier, legacy); - bool beforeOperatorAllowedGetter = staking.isAuthorized(operator, msgSender, verifier); + bool beforeOperatorAllowedGetter = staking.isAuthorized(msgSender, verifier, operator); assertEq(beforeOperatorAllowed, beforeOperatorAllowedGetter); // setOperator @@ -767,7 +767,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // after bool afterOperatorAllowed = _getStorage_OperatorAuth(msgSender, operator, verifier, legacy); - bool afterOperatorAllowedGetter = staking.isAuthorized(operator, msgSender, verifier); + bool afterOperatorAllowedGetter = staking.isAuthorized(msgSender, verifier, operator); assertEq(afterOperatorAllowed, afterOperatorAllowedGetter); // assert @@ -1390,9 +1390,9 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { ); bool isAuth = staking.isAuthorized( - msgSender, beforeValues.allocation.indexer, - subgraphDataServiceLegacyAddress + subgraphDataServiceLegacyAddress, + msgSender ); address rewardsDestination = _getStorage_RewardsDestination(beforeValues.allocation.indexer); From ac965cda0c212f936ce380937341eb9c56ec2634 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Thu, 3 Oct 2024 13:24:00 +0100 Subject: [PATCH 266/343] fix: apply consistent mapping order _operatorAuth (OZ_N-05) --- packages/horizon/contracts/staking/HorizonStaking.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 3f9653f95..157a65a26 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -967,7 +967,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } else { _operatorAuth[msg.sender][_verifier][_operator] = _allowed; } - emit OperatorSet(msg.sender, _operator, _verifier, _allowed); + emit OperatorSet(msg.sender, _verifier, _operator, _allowed); } /** From 68157c0e1a21a63ab5ea978ae5c79ded52ccebbb Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Fri, 4 Oct 2024 16:30:51 +0100 Subject: [PATCH 267/343] fix: swap peram order _getStorage_OperatorAuth --- .../horizon-staking/HorizonStakingShared.t.sol | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index d0c46a8dc..4adf6fcd4 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -752,7 +752,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { bool legacy = verifier == subgraphDataServiceLegacyAddress; // before - bool beforeOperatorAllowed = _getStorage_OperatorAuth(msgSender, operator, verifier, legacy); + bool beforeOperatorAllowed = _getStorage_OperatorAuth(msgSender, verifier, operator, legacy); bool beforeOperatorAllowedGetter = staking.isAuthorized(msgSender, verifier, operator); assertEq(beforeOperatorAllowed, beforeOperatorAllowedGetter); @@ -766,9 +766,9 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { } // after - bool afterOperatorAllowed = _getStorage_OperatorAuth(msgSender, operator, verifier, legacy); + bool afterOperatorAllowed = _getStorage_OperatorAuth(msgSender, verifier, operator, legacy); bool afterOperatorAllowedGetter = staking.isAuthorized(msgSender, verifier, operator); - assertEq(afterOperatorAllowed, afterOperatorAllowedGetter); + assertEq(afterOperatorAllowed, afterOperatorAllowedGetter, "afterOperatorAllowedGetter FAIL"); // assert assertEq(afterOperatorAllowed, allow); @@ -1686,8 +1686,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { function _getStorage_OperatorAuth( address serviceProvider, - address operator, address verifier, + address operator, bool legacy ) internal view returns (bool) { uint256 slotNumber = legacy ? 21 : 31; @@ -1699,8 +1699,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { slot = uint256( keccak256( abi.encode( - operator, - keccak256(abi.encode(verifier, keccak256(abi.encode(serviceProvider, slotNumber)))) + verifier, + keccak256(abi.encode(operator, keccak256(abi.encode(serviceProvider, slotNumber)))) ) ) ); From 1693d7650192cf5490a5168be4dcdf9956e51ad8 Mon Sep 17 00:00:00 2001 From: MoonBoi9001 Date: Mon, 7 Oct 2024 13:19:57 +0100 Subject: [PATCH 268/343] fix: set new peram order various functions (OZ_N-05) --- .../internal/IHorizonStakingMain.sol | 12 +++++----- .../contracts/staking/HorizonStaking.sol | 10 ++++----- .../HorizonStakingShared.t.sol | 22 +++++++++---------- .../test/staking/operator/locked.t.sol | 8 +++---- .../test/staking/operator/operator.t.sol | 8 +++---- .../test/staking/provision/locked.t.sol | 4 ++-- .../test/staking/provision/reprovision.t.sol | 2 +- .../serviceProvider/serviceProvider.t.sol | 2 +- .../subgraphService/SubgraphService.t.sol | 2 +- 9 files changed, 35 insertions(+), 35 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index f4fbe733b..b6a787138 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -108,14 +108,14 @@ interface IHorizonStakingMain { /** * @dev Emitted when an operator is allowed or denied by a service provider for a particular verifier * @param serviceProvider The address of the service provider - * @param operator The address of the operator * @param verifier The address of the verifier + * @param operator The address of the operator * @param allowed Whether the operator is allowed or denied */ event OperatorSet( address indexed serviceProvider, - address indexed operator, address indexed verifier, + address indexed operator, bool allowed ); @@ -865,11 +865,11 @@ interface IHorizonStakingMain { * Additional requirements: * - The `verifier` must be allowed to be used for locked provisions. * - * @param operator Address to authorize or unauthorize * @param verifier The verifier / data service on which they'll be allowed to operate + * @param operator Address to authorize or unauthorize * @param allowed Whether the operator is authorized or not */ - function setOperatorLocked(address operator, address verifier, bool allowed) external; + function setOperatorLocked(address verifier, address operator, bool allowed) external; /** * @notice Sets a verifier as a globally allowed verifier for locked provisions. @@ -904,11 +904,11 @@ interface IHorizonStakingMain { /** * @notice Authorize or unauthorize an address to be an operator for the caller on a data service. * @dev Emits a {OperatorSet} event. - * @param operator Address to authorize or unauthorize * @param verifier The verifier / data service on which they'll be allowed to operate + * @param operator Address to authorize or unauthorize * @param allowed Whether the operator is authorized or not */ - function setOperator(address operator, address verifier, bool allowed) external; + function setOperator(address verifier, address operator, bool allowed) external; /** * @notice Check if an operator is authorized for the caller on a specific verifier / data service. diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 157a65a26..8f3fb524a 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -466,9 +466,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice See {IHorizonStakingMain-setOperatorLocked}. */ - function setOperatorLocked(address operator, address verifier, bool allowed) external override notPaused { + function setOperatorLocked(address verifier, address operator, bool allowed) external override notPaused { require(_allowedLockedVerifiers[verifier], HorizonStakingVerifierNotAllowed(verifier)); - _setOperator(operator, verifier, allowed); + _setOperator(verifier, operator, allowed); } /* @@ -514,8 +514,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice See {IHorizonStakingMain-setOperator}. */ - function setOperator(address operator, address verifier, bool allowed) external override notPaused { - _setOperator(operator, verifier, allowed); + function setOperator(address verifier, address operator, bool allowed) external override notPaused { + _setOperator(verifier, operator, allowed); } /** @@ -960,7 +960,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @dev Note that this function handles the special case where the verifier is the subgraph data service, * where the operator settings are stored in the legacy mapping. */ - function _setOperator(address _operator, address _verifier, bool _allowed) private { + function _setOperator(address _verifier, address _operator, bool _allowed) private { require(_operator != msg.sender, HorizonStakingCallerIsServiceProvider()); if (_verifier == SUBGRAPH_DATA_SERVICE_ADDRESS) { _legacyOperatorAuth[msg.sender][_operator] = _allowed; diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 4adf6fcd4..b13128c72 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -41,7 +41,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { modifier useOperator() { vm.startPrank(users.indexer); - _setOperator(users.operator, subgraphDataServiceAddress, true); + _setOperator(subgraphDataServiceAddress, users.operator, true); vm.startPrank(users.operator); _; vm.stopPrank(); @@ -736,15 +736,15 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterProvision.createdAt, beforeProvision.createdAt); } - function _setOperator(address operator, address verifier, bool allow) internal { - __setOperator(operator, verifier, allow, false); + function _setOperator(address verifier, address operator, bool allow) internal { + __setOperator(verifier, operator, allow, false); } - function _setOperatorLocked(address operator, address verifier, bool allow) internal { - __setOperator(operator, verifier, allow, true); + function _setOperatorLocked(address verifier, address operator, bool allow) internal { + __setOperator(verifier, operator, allow, true); } - function __setOperator(address operator, address verifier, bool allow, bool locked) private { + function __setOperator(address verifier, address operator, bool allow, bool locked) private { (, address msgSender, ) = vm.readCallers(); // staking contract knows the address of the legacy subgraph service @@ -758,11 +758,11 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // setOperator vm.expectEmit(address(staking)); - emit IHorizonStakingMain.OperatorSet(msgSender, operator, verifier, allow); + emit IHorizonStakingMain.OperatorSet(msgSender, verifier, operator, allow); if (locked) { - staking.setOperatorLocked(operator, verifier, allow); + staking.setOperatorLocked(verifier, operator, allow); } else { - staking.setOperator(operator, verifier, allow); + staking.setOperator(verifier, operator, allow); } // after @@ -1699,8 +1699,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { slot = uint256( keccak256( abi.encode( - verifier, - keccak256(abi.encode(operator, keccak256(abi.encode(serviceProvider, slotNumber)))) + operator, + keccak256(abi.encode(verifier, keccak256(abi.encode(serviceProvider, slotNumber)))) ) ) ); diff --git a/packages/horizon/test/staking/operator/locked.t.sol b/packages/horizon/test/staking/operator/locked.t.sol index 706b47a07..3d9b5f1e6 100644 --- a/packages/horizon/test/staking/operator/locked.t.sol +++ b/packages/horizon/test/staking/operator/locked.t.sol @@ -12,22 +12,22 @@ contract HorizonStakingOperatorLockedTest is HorizonStakingTest { */ function testOperatorLocked_Set() public useIndexer useLockedVerifier(subgraphDataServiceAddress) { - _setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + _setOperatorLocked(subgraphDataServiceAddress, users.operator, true); } function testOperatorLocked_RevertWhen_VerifierNotAllowed() public useIndexer { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingVerifierNotAllowed(address)", subgraphDataServiceAddress); vm.expectRevert(expectedError); - staking.setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + staking.setOperatorLocked(subgraphDataServiceAddress, users.operator, true); } function testOperatorLocked_RevertWhen_CallerIsServiceProvider() public useIndexer useLockedVerifier(subgraphDataServiceAddress) { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCallerIsServiceProvider()"); vm.expectRevert(expectedError); - staking.setOperatorLocked(users.indexer, subgraphDataServiceAddress, true); + staking.setOperatorLocked(subgraphDataServiceAddress, users.indexer, true); } function testOperatorLocked_SetLegacySubgraphService() public useIndexer useLockedVerifier(subgraphDataServiceLegacyAddress) { - _setOperatorLocked(users.operator, subgraphDataServiceLegacyAddress, true); + _setOperatorLocked(subgraphDataServiceLegacyAddress, users.operator, true); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/operator/operator.t.sol b/packages/horizon/test/staking/operator/operator.t.sol index 5d509ba68..a821e561d 100644 --- a/packages/horizon/test/staking/operator/operator.t.sol +++ b/packages/horizon/test/staking/operator/operator.t.sol @@ -12,17 +12,17 @@ contract HorizonStakingOperatorTest is HorizonStakingTest { */ function testOperator_SetOperator() public useIndexer { - _setOperator(users.operator, subgraphDataServiceAddress, true); + _setOperator(subgraphDataServiceAddress, users.operator, true); } function testOperator_RevertWhen_CallerIsServiceProvider() public useIndexer { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingCallerIsServiceProvider()"); vm.expectRevert(expectedError); - staking.setOperator(users.indexer, subgraphDataServiceAddress, true); + staking.setOperator(subgraphDataServiceAddress, users.indexer, true); } function testOperator_RemoveOperator() public useIndexer { - _setOperator(users.operator, subgraphDataServiceAddress, true); - _setOperator(users.operator, subgraphDataServiceAddress, false); + _setOperator(subgraphDataServiceAddress, users.operator, true); + _setOperator(subgraphDataServiceAddress, users.operator, false); } } \ No newline at end of file diff --git a/packages/horizon/test/staking/provision/locked.t.sol b/packages/horizon/test/staking/provision/locked.t.sol index 66745839b..2dcae964a 100644 --- a/packages/horizon/test/staking/provision/locked.t.sol +++ b/packages/horizon/test/staking/provision/locked.t.sol @@ -17,7 +17,7 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { uint256 provisionTokens = staking.getProviderTokensAvailable(users.indexer, subgraphDataServiceAddress); assertEq(provisionTokens, 0); - _setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + _setOperatorLocked(subgraphDataServiceAddress, users.operator, true); vm.startPrank(users.operator); _provisionLocked( @@ -39,7 +39,7 @@ contract HorizonStakingProvisionLockedTest is HorizonStakingTest { assertEq(provisionTokens, 0); // Set operator - _setOperatorLocked(users.operator, subgraphDataServiceAddress, true); + _setOperatorLocked(subgraphDataServiceAddress, users.operator, true); // Disable locked verifier vm.startPrank(users.governor); diff --git a/packages/horizon/test/staking/provision/reprovision.t.sol b/packages/horizon/test/staking/provision/reprovision.t.sol index cdcdb6237..be650019f 100644 --- a/packages/horizon/test/staking/provision/reprovision.t.sol +++ b/packages/horizon/test/staking/provision/reprovision.t.sol @@ -37,7 +37,7 @@ contract HorizonStakingReprovisionTest is HorizonStakingTest { // Switch to indexer to set operator for new data service vm.startPrank(users.indexer); - _setOperator(users.operator, newDataService, true); + _setOperator(newDataService, users.operator, true); // Switch back to operator vm.startPrank(users.operator); diff --git a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol index 7db480869..9f4893942 100644 --- a/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol +++ b/packages/horizon/test/staking/serviceProvider/serviceProvider.t.sol @@ -25,7 +25,7 @@ contract HorizonStakingServiceProviderTest is HorizonStakingTest { assertEq(sp.tokensStaked, amount); assertEq(sp.tokensProvisioned, amount); - _setOperator(users.operator, subgraphDataServiceAddress, true); + _setOperator(subgraphDataServiceAddress, users.operator, true); resetPrank(users.operator); _stakeTo(users.indexer, operatorAmount); sp = staking.getServiceProvider(users.indexer); diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index ce9810d81..013f869a8 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -39,7 +39,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { modifier useOperator() { resetPrank(users.indexer); - staking.setOperator(users.operator, address(subgraphService), true); + staking.setOperator(address(subgraphService), users.operator, true); resetPrank(users.operator); _; vm.stopPrank(); From 0f1522d58427e292aa8d596b8657e2c303a63f7d Mon Sep 17 00:00:00 2001 From: MoonBoi9001 <67825802+MoonBoi9001@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:34:20 +0100 Subject: [PATCH 269/343] Update packages/horizon/contracts/data-service/utilities/ProvisionManager.sol MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tomás Migone --- .../contracts/data-service/utilities/ProvisionManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index 3b3ebd356..a3f96794c 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -76,8 +76,8 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa /** * @notice Thrown when the caller is not authorized to manage the provision of a service provider. + * @param serviceProvider The address of the serviceProvider. * @param caller The address of the caller. - * @param serviceProvider The address of the service provider. */ error ProvisionManagerNotAuthorized(address serviceProvider, address caller); From a76a0d6bcf1ef25c11ddaa15d9616e6a33e38840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 8 Oct 2024 13:02:37 -0300 Subject: [PATCH 270/343] feat: separate escrow accounts for each collector (#1058) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: separate escrow accounts for each collector Signed-off-by: Tomás Migone * feat: escrow account per collector Signed-off-by: Tomás Migone --------- Signed-off-by: Tomás Migone --- .../contracts/interfaces/IPaymentsEscrow.sol | 61 ++++++++++++------- .../contracts/payments/PaymentsEscrow.sol | 49 ++++++++------- .../horizon/test/escrow/GraphEscrow.t.sol | 4 +- packages/horizon/test/escrow/collect.t.sol | 14 ++--- packages/horizon/test/escrow/deposit.t.sol | 2 +- packages/horizon/test/escrow/paused.t.sol | 8 +-- packages/horizon/test/escrow/thaw.t.sol | 16 ++--- packages/horizon/test/escrow/withdraw.t.sol | 8 +-- .../subgraphService/collect/query/query.t.sol | 2 +- 9 files changed, 91 insertions(+), 73 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index b480f3c31..c1eb7707a 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -15,9 +15,9 @@ import { IGraphPayments } from "./IGraphPayments.sol"; * collector contract which implements the {IPaymentsCollector} interface. */ interface IPaymentsEscrow { - /// @notice Escrow account for a payer-receiver pair + /// @notice Escrow account for a payer-collector-receiver tuple struct EscrowAccount { - // Total token balance for the payer-receiver pair + // Total token balance for the payer-collector-receiver tuple uint256 balance; // Amount of tokens currently being thawed uint256 tokensThawing; @@ -70,12 +70,13 @@ interface IPaymentsEscrow { event RevokeCollector(address indexed payer, address indexed collector); /** - * @notice Emitted when a payer deposits funds into the escrow for a payer-receiver pair + * @notice Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple * @param payer The address of the payer + * @param collector The address of the collector * @param receiver The address of the receiver * @param tokens The amount of tokens deposited */ - event Deposit(address indexed payer, address indexed receiver, uint256 tokens); + event Deposit(address indexed payer, address indexed collector, address indexed receiver, uint256 tokens); /** * @notice Emitted when a payer cancels an escrow thawing @@ -85,29 +86,38 @@ interface IPaymentsEscrow { event CancelThaw(address indexed payer, address indexed receiver); /** - * @notice Emitted when a payer thaws funds from the escrow for a payer-receiver pair + * @notice Emitted when a payer thaws funds from the escrow for a payer-collector-receiver tuple * @param payer The address of the payer + * @param collector The address of the collector * @param receiver The address of the receiver * @param tokens The amount of tokens being thawed * @param thawEndTimestamp The timestamp at which the thawing period ends */ - event Thaw(address indexed payer, address indexed receiver, uint256 tokens, uint256 thawEndTimestamp); + event Thaw( + address indexed payer, + address indexed collector, + address indexed receiver, + uint256 tokens, + uint256 thawEndTimestamp + ); /** - * @notice Emitted when a payer withdraws funds from the escrow for a payer-receiver pair + * @notice Emitted when a payer withdraws funds from the escrow for a payer-collector-receiver tuple * @param payer The address of the payer + * @param collector The address of the collector * @param receiver The address of the receiver * @param tokens The amount of tokens withdrawn */ - event Withdraw(address indexed payer, address indexed receiver, uint256 tokens); + event Withdraw(address indexed payer, address indexed collector, address indexed receiver, uint256 tokens); /** - * @notice Emitted when a collector collects funds from the escrow for a payer-receiver pair + * @notice Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple * @param payer The address of the payer + * @param collector The address of the collector * @param receiver The address of the receiver * @param tokens The amount of tokens collected */ - event EscrowCollected(address indexed payer, address indexed receiver, uint256 tokens); + event EscrowCollected(address indexed payer, address indexed collector, address indexed receiver, uint256 tokens); // -- Errors -- @@ -211,26 +221,28 @@ interface IPaymentsEscrow { function revokeCollector(address collector) external; /** - * @notice Deposits funds into the escrow for a payer-receiver pair, where + * @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where * the payer is the transaction caller. * @dev Emits a {Deposit} event + * @param collector The address of the collector * @param receiver The address of the receiver * @param tokens The amount of tokens to deposit */ - function deposit(address receiver, uint256 tokens) external; + function deposit(address collector, address receiver, uint256 tokens) external; /** - * @notice Deposits funds into the escrow for a payer-receiver pair, where + * @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where * the payer can be specified. * @dev Emits a {Deposit} event * @param payer The address of the payer + * @param collector The address of the collector * @param receiver The address of the receiver * @param tokens The amount of tokens to deposit */ - function depositTo(address payer, address receiver, uint256 tokens) external; + function depositTo(address payer, address collector, address receiver, uint256 tokens) external; /** - * @notice Thaw a specific amount of escrow from a payer-receiver's escrow account. + * @notice Thaw a specific amount of escrow from a payer-collector-receiver's escrow account. * The payer is the transaction caller. * If `tokens` is zero and funds were already thawing it will cancel the thawing. * Note that repeated calls to this function will overwrite the previous thawing amount @@ -240,13 +252,14 @@ interface IPaymentsEscrow { * * Emits a {Thaw} event. If `tokens` is zero it will emit a {CancelThaw} event. * + * @param collector The address of the collector * @param receiver The address of the receiver * @param tokens The amount of tokens to thaw */ - function thaw(address receiver, uint256 tokens) external; + function thaw(address collector, address receiver, uint256 tokens) external; /** - * @notice Withdraws all thawed escrow from a payer-receiver's escrow account. + * @notice Withdraws all thawed escrow from a payer-collector-receiver's escrow account. * The payer is the transaction caller. * Note that the withdrawn funds might be less than the thawed amount if there were * payment collections in the meantime. @@ -255,12 +268,13 @@ interface IPaymentsEscrow { * * Emits a {Withdraw} event * + * @param collector The address of the collector * @param receiver The address of the receiver */ - function withdraw(address receiver) external; + function withdraw(address collector, address receiver) external; /** - * @notice Collects funds from the payer-receiver's escrow and sends them to {GraphPayments} for + * @notice Collects funds from the payer-collector-receiver's escrow and sends them to {GraphPayments} for * distribution using the Graph Horizon Payments protocol. * The function will revert if there are not enough funds in the escrow. * @dev Requirements: @@ -272,7 +286,7 @@ interface IPaymentsEscrow { * @param payer The address of the payer * @param receiver The address of the receiver * @param tokens The amount of tokens to collect - * @param collector The address of the collector + * @param dataService The address of the data service * @param tokensDataService The amount of tokens that {GraphPayments} should send to the data service */ function collect( @@ -280,14 +294,15 @@ interface IPaymentsEscrow { address payer, address receiver, uint256 tokens, - address collector, + address dataService, uint256 tokensDataService ) external; /** - * @notice Get the balance of a payer-receiver pair + * @notice Get the balance of a payer-collector-receiver tuple * @param payer The address of the payer + * @param collector The address of the collector * @param receiver The address of the receiver */ - function getBalance(address payer, address receiver) external view returns (uint256); + function getBalance(address payer, address collector, address receiver) external view returns (uint256); } diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index bd6bd0ad1..7cf7e9e38 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -27,11 +27,11 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, mapping(address payer => mapping(address collector => IPaymentsEscrow.Collector collectorDetails)) public authorizedCollectors; - /// @notice Escrow account details for payer-receiver pairs - mapping(address payer => mapping(address receiver => IPaymentsEscrow.EscrowAccount escrowAccount)) + /// @notice Escrow account details for payer-collector-receiver tuples + mapping(address payer => mapping(address collector => mapping(address receiver => IPaymentsEscrow.EscrowAccount escrowAccount))) public escrowAccounts; - /// @notice The maximum thawing period (in seconds) for both escrow withdrawal and signer revocation + /// @notice The maximum thawing period (in seconds) for both escrow withdrawal and collector revocation /// @dev This is a precautionary measure to avoid inadvertedly locking funds for too long uint256 public constant MAX_WAIT_PERIOD = 90 days; @@ -126,22 +126,22 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, /** * @notice See {IPaymentsEscrow-deposit} */ - function deposit(address receiver, uint256 tokens) external override notPaused { - _deposit(msg.sender, receiver, tokens); + function deposit(address collector, address receiver, uint256 tokens) external override notPaused { + _deposit(msg.sender, collector, receiver, tokens); } /** * @notice See {IPaymentsEscrow-depositTo} */ - function depositTo(address payer, address receiver, uint256 tokens) external override notPaused { - _deposit(payer, receiver, tokens); + function depositTo(address payer, address collector, address receiver, uint256 tokens) external override notPaused { + _deposit(payer, collector, receiver, tokens); } /** * @notice See {IPaymentsEscrow-thaw} */ - function thaw(address receiver, uint256 tokens) external override notPaused { - EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; + function thaw(address collector, address receiver, uint256 tokens) external override notPaused { + EscrowAccount storage account = escrowAccounts[msg.sender][collector][receiver]; // if amount thawing is zero and requested amount is zero this is an invalid request. // otherwise if amount thawing is greater than zero and requested amount is zero this @@ -159,14 +159,14 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, account.tokensThawing = tokens; account.thawEndTimestamp = block.timestamp + WITHDRAW_ESCROW_THAWING_PERIOD; - emit Thaw(msg.sender, receiver, tokens, account.thawEndTimestamp); + emit Thaw(msg.sender, collector, receiver, tokens, account.thawEndTimestamp); } /** * @notice See {IPaymentsEscrow-withdraw} */ - function withdraw(address receiver) external override notPaused { - EscrowAccount storage account = escrowAccounts[msg.sender][receiver]; + function withdraw(address collector, address receiver) external override notPaused { + EscrowAccount storage account = escrowAccounts[msg.sender][collector][receiver]; require(account.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); require( account.thawEndTimestamp < block.timestamp, @@ -180,7 +180,7 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, account.tokensThawing = 0; account.thawEndTimestamp = 0; _graphToken().pushTokens(msg.sender, tokens); - emit Withdraw(msg.sender, receiver, tokens); + emit Withdraw(msg.sender, collector, receiver, tokens); } /** @@ -195,15 +195,18 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, uint256 tokensDataService ) external override notPaused { // Check if collector is authorized and has enough funds - Collector storage collector = authorizedCollectors[payer][msg.sender]; - require(collector.allowance >= tokens, PaymentsEscrowInsufficientAllowance(collector.allowance, tokens)); + Collector storage collectorDetails = authorizedCollectors[payer][msg.sender]; + require( + collectorDetails.allowance >= tokens, + PaymentsEscrowInsufficientAllowance(collectorDetails.allowance, tokens) + ); // Check if there are enough funds in the escrow account - EscrowAccount storage account = escrowAccounts[payer][receiver]; + EscrowAccount storage account = escrowAccounts[payer][msg.sender][receiver]; require(account.balance >= tokens, PaymentsEscrowInsufficientBalance(account.balance, tokens)); // Reduce amount from approved collector and account balance - collector.allowance -= tokens; + collectorDetails.allowance -= tokens; account.balance -= tokens; uint256 balanceBefore = _graphToken().balanceOf(address(this)); @@ -217,14 +220,14 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, PaymentsEscrowInconsistentCollection(balanceBefore, balanceAfter, tokens) ); - emit EscrowCollected(payer, receiver, tokens); + emit EscrowCollected(payer, msg.sender, receiver, tokens); } /** * @notice See {IPaymentsEscrow-getBalance} */ - function getBalance(address payer, address receiver) external view override returns (uint256) { - EscrowAccount storage account = escrowAccounts[payer][receiver]; + function getBalance(address payer, address collector, address receiver) external view override returns (uint256) { + EscrowAccount storage account = escrowAccounts[payer][collector][receiver]; return account.balance - account.tokensThawing; } @@ -234,9 +237,9 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, * @param _receiver The address of the receiver * @param _tokens The amount of tokens to deposit */ - function _deposit(address _payer, address _receiver, uint256 _tokens) private { - escrowAccounts[_payer][_receiver].balance += _tokens; + function _deposit(address _payer, address _collector, address _receiver, uint256 _tokens) private { + escrowAccounts[_payer][_collector][_receiver].balance += _tokens; _graphToken().pullTokens(msg.sender, _tokens); - emit Deposit(_payer, _receiver, _tokens); + emit Deposit(_payer, _collector, _receiver, _tokens); } } diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index 2421ea80c..75d0b55ae 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -39,7 +39,7 @@ contract GraphEscrowTest is HorizonStakingSharedTest { vm.assume(thawAmount > 0); vm.assume(amount > thawAmount); _depositTokens(amount); - escrow.thaw(users.indexer, thawAmount); + escrow.thaw(users.verifier, users.indexer, thawAmount); _; } @@ -49,7 +49,7 @@ contract GraphEscrowTest is HorizonStakingSharedTest { function _depositTokens(uint256 tokens) internal { token.approve(address(escrow), tokens); - escrow.deposit(users.indexer, tokens); + escrow.deposit(users.verifier, users.indexer, tokens); } function _approveEscrow(uint256 tokens) internal { diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index d9b775b93..db0c2c099 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -27,8 +27,10 @@ contract GraphEscrowCollectTest is GraphEscrowTest { address _dataService, uint256 _tokensDataService ) private { + (, address _collector, ) = vm.readCallers(); + // Previous balances - (uint256 previousPayerEscrowBalance,,) = escrow.escrowAccounts(_payer, _receiver); + (uint256 previousPayerEscrowBalance,,) = escrow.escrowAccounts(_payer, _collector, _receiver); CollectPaymentData memory previousBalances = CollectPaymentData({ escrowBalance: token.balanceOf(address(escrow)), paymentsBalance: token.balanceOf(address(payments)), @@ -41,7 +43,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { }); vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.EscrowCollected(_payer, _receiver, _tokens); + emit IPaymentsEscrow.EscrowCollected(_payer, _collector, _receiver, _tokens); escrow.collect(_paymentType, _payer, _receiver, _tokens, _dataService, _tokensDataService); // Calculate cuts @@ -51,11 +53,9 @@ contract GraphEscrowCollectTest is GraphEscrowTest { _dataService, _paymentType ); - uint256 tokensProtocol = _tokens * protocolPaymentCut / MAX_PPM; - uint256 tokensDelegation = _tokens * delegatorCut / MAX_PPM; // After balances - (uint256 afterPayerEscrowBalance,,) = escrow.escrowAccounts(_payer, _receiver); + (uint256 afterPayerEscrowBalance,,) = escrow.escrowAccounts(_payer, _collector, _receiver); CollectPaymentData memory afterBalances = CollectPaymentData({ escrowBalance: token.balanceOf(address(escrow)), paymentsBalance: token.balanceOf(address(payments)), @@ -68,12 +68,12 @@ contract GraphEscrowCollectTest is GraphEscrowTest { }); // Check receiver balance after payment - uint256 receiverExpectedPayment = _tokens - _tokensDataService - tokensProtocol - tokensDelegation; + uint256 receiverExpectedPayment = _tokens - _tokensDataService - _tokens * protocolPaymentCut / MAX_PPM - _tokens * delegatorCut / MAX_PPM; assertEq(afterBalances.receiverBalance - previousBalances.receiverBalance, receiverExpectedPayment); assertEq(token.balanceOf(address(payments)), 0); // Check delegation pool balance after payment - assertEq(afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance, tokensDelegation); + assertEq(afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance, _tokens * delegatorCut / MAX_PPM); // Check that the escrow account has been updated assertEq(previousBalances.escrowBalance, afterBalances.escrowBalance + _tokens); diff --git a/packages/horizon/test/escrow/deposit.t.sol b/packages/horizon/test/escrow/deposit.t.sol index 3ce341a1a..002d2b1a4 100644 --- a/packages/horizon/test/escrow/deposit.t.sol +++ b/packages/horizon/test/escrow/deposit.t.sol @@ -12,7 +12,7 @@ contract GraphEscrowDepositTest is GraphEscrowTest { */ function testDeposit_Tokens(uint256 amount) public useGateway useDeposit(amount) { - (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); + (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.verifier, users.indexer); assertEq(indexerEscrowBalance, amount); } } \ No newline at end of file diff --git a/packages/horizon/test/escrow/paused.t.sol b/packages/horizon/test/escrow/paused.t.sol index f6b65aa2b..a993da883 100644 --- a/packages/horizon/test/escrow/paused.t.sol +++ b/packages/horizon/test/escrow/paused.t.sol @@ -31,18 +31,18 @@ contract GraphEscrowPausedTest is GraphEscrowTest { function testPaused_RevertWhen_Deposit(uint256 tokens) public useGateway usePaused(true) { vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); - escrow.deposit(users.indexer, tokens); + escrow.deposit(users.verifier, users.indexer, tokens); } function testPaused_RevertWhen_DepositTo(uint256 tokens) public usePaused(true) { resetPrank(users.operator); vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); - escrow.depositTo(users.gateway, users.indexer, tokens); + escrow.depositTo(users.gateway, users.verifier, users.indexer, tokens); } function testPaused_RevertWhen_ThawTokens(uint256 tokens) public useGateway useDeposit(tokens) usePaused(true) { vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); - escrow.thaw(users.indexer, tokens); + escrow.thaw(users.verifier, users.indexer, tokens); } function testPaused_RevertWhen_WithdrawTokens( @@ -53,7 +53,7 @@ contract GraphEscrowPausedTest is GraphEscrowTest { skip(withdrawEscrowThawingPeriod + 1); vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); - escrow.withdraw(users.indexer); + escrow.withdraw(users.verifier, users.indexer); } // Collect diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index 36808602c..8e2674e00 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -16,10 +16,10 @@ contract GraphEscrowThawTest is GraphEscrowTest { function testThaw_Tokens(uint256 amount) public useGateway useDeposit(amount) { uint256 expectedThawEndTimestamp = block.timestamp + withdrawEscrowThawingPeriod; vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.Thaw(users.gateway, users.indexer, amount, expectedThawEndTimestamp); - escrow.thaw(users.indexer, amount); + emit IPaymentsEscrow.Thaw(users.gateway, users.verifier, users.indexer, amount, expectedThawEndTimestamp); + escrow.thaw(users.verifier, users.indexer, amount); - (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.indexer); + (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.verifier, users.indexer); assertEq(amountThawing, amount); assertEq(thawEndTimestamp, expectedThawEndTimestamp); } @@ -29,7 +29,7 @@ contract GraphEscrowThawTest is GraphEscrowTest { ) public useGateway useDeposit(amount) { bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowNotThawing()"); vm.expectRevert(expectedError); - escrow.thaw(users.indexer, 0); + escrow.thaw(users.verifier, users.indexer, 0); } function testThaw_RevertWhen_InsufficientAmount( @@ -39,14 +39,14 @@ contract GraphEscrowThawTest is GraphEscrowTest { overAmount = bound(overAmount, amount + 1, type(uint256).max); bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowInsufficientBalance(uint256,uint256)", amount, overAmount); vm.expectRevert(expectedError); - escrow.thaw(users.indexer, overAmount); + escrow.thaw(users.verifier, users.indexer, overAmount); } function testThaw_CancelRequest(uint256 amount) public useGateway useDeposit(amount) { - escrow.thaw(users.indexer, amount); - escrow.thaw(users.indexer, 0); + escrow.thaw(users.verifier, users.indexer, amount); + escrow.thaw(users.verifier, users.indexer, 0); - (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.indexer); + (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.verifier, users.indexer); assertEq(amountThawing, 0); assertEq(thawEndTimestamp, 0); } diff --git a/packages/horizon/test/escrow/withdraw.t.sol b/packages/horizon/test/escrow/withdraw.t.sol index 0e5670c7a..a141d039b 100644 --- a/packages/horizon/test/escrow/withdraw.t.sol +++ b/packages/horizon/test/escrow/withdraw.t.sol @@ -18,17 +18,17 @@ contract GraphEscrowWithdrawTest is GraphEscrowTest { // advance time skip(withdrawEscrowThawingPeriod + 1); - escrow.withdraw(users.indexer); + escrow.withdraw(users.verifier, users.indexer); vm.stopPrank(); - (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.indexer); + (uint256 indexerEscrowBalance,,) = escrow.escrowAccounts(users.gateway, users.verifier, users.indexer); assertEq(indexerEscrowBalance, amount - thawAmount); } function testWithdraw_RevertWhen_NotThawing(uint256 amount) public useGateway useDeposit(amount) { bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowNotThawing()"); vm.expectRevert(expectedError); - escrow.withdraw(users.indexer); + escrow.withdraw(users.verifier, users.indexer); } function testWithdraw_RevertWhen_StillThawing( @@ -37,6 +37,6 @@ contract GraphEscrowWithdrawTest is GraphEscrowTest { ) public useGateway depositAndThawTokens(amount, thawAmount) { bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + withdrawEscrowThawingPeriod); vm.expectRevert(expectedError); - escrow.withdraw(users.indexer); + escrow.withdraw(users.verifier, users.indexer); } } \ No newline at end of file diff --git a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol index 6ad7b5347..f39e6537b 100644 --- a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol @@ -53,7 +53,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { mint(signer, tokens); escrow.approveCollector(address(tapCollector), tokens); token.approve(address(escrow), tokens); - escrow.deposit(users.indexer, tokens); + escrow.deposit(address(tapCollector), users.indexer, tokens); resetPrank(msgSender); } From 70354033e076475937a53bfe7554c17900d2b6bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 9 Oct 2024 12:12:16 -0300 Subject: [PATCH 271/343] fix: tweaks to thawing pool management (#1048) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: wip tweaks to thawing pool management Signed-off-by: Tomás Migone * fix: handle edge cases for thawing pools Signed-off-by: Tomás Migone * fix: simplify some conditions and checks Signed-off-by: Tomás Migone * chore: fix test comment Signed-off-by: Tomás Migone * fix: typos and variable rename Signed-off-by: Tomás Migone * fix: merge conflicts Signed-off-by: Tomás Migone * fix: improve thawing pool reset condition Signed-off-by: Tomás Migone --------- Signed-off-by: Tomás Migone --- .../internal/IHorizonStakingMain.sol | 11 +- .../internal/IHorizonStakingTypes.sol | 8 + .../contracts/staking/HorizonStaking.sol | 125 +++++++++++--- .../contracts/staking/HorizonStakingBase.sol | 1 + .../HorizonStakingShared.t.sol | 155 ++++++++++++++---- .../test/staking/delegation/addToPool.t.sol | 61 ++++++- .../test/staking/delegation/delegate.t.sol | 41 ++++- .../test/staking/delegation/undelegate.t.sol | 116 +++++++++++-- .../test/staking/delegation/withdraw.t.sol | 108 +++++++++--- .../test/staking/provision/deprovision.t.sol | 45 +++++ .../horizon/test/staking/provision/thaw.t.sol | 41 +++++ .../horizon/test/staking/slash/slash.t.sol | 48 +++++- 12 files changed, 651 insertions(+), 109 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index b6a787138..8d047ac1d 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -254,8 +254,15 @@ interface IHorizonStakingMain { * @param tokens The amount of tokens being released * @param shares The amount of shares being released * @param thawingUntil The timestamp until the stake has thawed + * @param valid Whether the thaw request was valid at the time of fulfillment */ - event ThawRequestFulfilled(bytes32 indexed thawRequestId, uint256 tokens, uint256 shares, uint64 thawingUntil); + event ThawRequestFulfilled( + bytes32 indexed thawRequestId, + uint256 tokens, + uint256 shares, + uint64 thawingUntil, + bool valid + ); /** * @notice Emitted when a series of thaw requests are fulfilled. @@ -742,6 +749,8 @@ interface IHorizonStakingMain { * Tokens can be automatically re-delegated to another provision by setting `newServiceProvider`. * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw * requests in the event that fulfilling all of them results in a gas limit error. + * @dev If the delegation pool was completely slashed before withdrawing, calling this function will fulfill + * the thaw requests with an amount equal to zero. * * Requirements: * - Must have previously initiated a thaw request using {undelegate}. diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index 42b5588ef..0dfc6c774 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -32,6 +32,8 @@ interface IHorizonStakingTypes { uint32 maxVerifierCutPending; // Pending value for `thawingPeriod`. Verifier needs to accept it before it becomes active. uint64 thawingPeriodPending; + // Value of the current thawing nonce. Thaw requests with older nonces are invalid. + uint256 thawingNonce; } /** @@ -75,6 +77,8 @@ interface IHorizonStakingTypes { uint256 tokensThawing; // Shares representing the thawing tokens uint256 sharesThawing; + // Value of the current thawing nonce. Thaw requests with older nonces are invalid. + uint256 thawingNonce; } /** @@ -101,6 +105,8 @@ interface IHorizonStakingTypes { uint256 tokensThawing; // Shares representing the thawing tokens uint256 sharesThawing; + // Value of the current thawing nonce. Thaw requests with older nonces are invalid. + uint256 thawingNonce; } /** @@ -137,5 +143,7 @@ interface IHorizonStakingTypes { uint64 thawingUntil; // Id of the next thaw request in the linked list bytes32 next; + // Used to invalidate unfulfilled thaw requests + uint256 thawingNonce; } } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 8f3fb524a..476437ffb 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -411,6 +411,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { (FIXED_POINT_PRECISION); prov.tokens = prov.tokens - providerTokensSlashed; + // If the slashing leaves the thawing shares with no thawing tokens, cancel pending thawings by: + // - deleting all thawing shares + // - incrementing the nonce to invalidate pending thaw requests + if (prov.sharesThawing != 0 && prov.tokensThawing == 0) { + prov.sharesThawing = 0; + prov.thawingNonce++; + } + // Service provider accounting _serviceProviders[serviceProvider].tokensProvisioned = _serviceProviders[serviceProvider].tokensProvisioned - @@ -438,6 +446,16 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { (pool.tokensThawing * (FIXED_POINT_PRECISION - delegationFractionSlashed)) / FIXED_POINT_PRECISION; + // If the slashing leaves the thawing shares with no thawing tokens, cancel pending thawings by: + // - deleting all thawing shares + // - incrementing the nonce to invalidate pending thaw requests + // Note that thawing shares are completely lost, delegators won't get back the corresponding + // delegation pool shares. + if (pool.sharesThawing != 0 && pool.tokensThawing == 0) { + pool.sharesThawing = 0; + pool.thawingNonce++; + } + emit DelegationSlashed(serviceProvider, verifier, tokensToSlash); } else { emit DelegationSlashingSkipped(serviceProvider, verifier, tokensToSlash); @@ -644,7 +662,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { thawingPeriod: _thawingPeriod, createdAt: uint64(block.timestamp), maxVerifierCutPending: _maxVerifierCut, - thawingPeriodPending: _thawingPeriod + thawingPeriodPending: _thawingPeriod, + thawingNonce: 0 }); ServiceProviderInternal storage sp = _serviceProviders[_serviceProvider]; @@ -672,6 +691,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice See {IHorizonStakingMain-thaw}. + * @dev We use a thawing pool to keep track of tokens thawing for multiple thaw requests. + * If due to slashing the thawing pool loses all of its tokens, the pool is reset and all pending thaw + * requests are invalidated. */ function _thaw(address _serviceProvider, address _verifier, uint256 _tokens) private returns (bytes32) { require(_tokens != 0, HorizonStakingInvalidZeroTokens()); @@ -679,18 +701,24 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { require(tokensAvailable >= _tokens, HorizonStakingInsufficientTokens(tokensAvailable, _tokens)); Provision storage prov = _provisions[_serviceProvider][_verifier]; - uint256 thawingShares = prov.sharesThawing == 0 ? _tokens : (prov.sharesThawing * _tokens) / prov.tokensThawing; + + // Calculate shares to issue + // Thawing pool is reset/initialized when the pool is empty: prov.tokensThawing == 0 + uint256 thawingShares = prov.tokensThawing == 0 + ? _tokens + : ((prov.sharesThawing * _tokens) / prov.tokensThawing); uint64 thawingUntil = uint64(block.timestamp + uint256(prov.thawingPeriod)); - prov.tokensThawing = prov.tokensThawing + _tokens; prov.sharesThawing = prov.sharesThawing + thawingShares; + prov.tokensThawing = prov.tokensThawing + _tokens; bytes32 thawRequestId = _createThawRequest( _serviceProvider, _verifier, _serviceProvider, thawingShares, - thawingUntil + thawingUntil, + prov.thawingNonce ); emit ProvisionThawed(_serviceProvider, _verifier, _tokens); return thawRequestId; @@ -715,7 +743,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _serviceProvider, tokensThawing, sharesThawing, - _nThawRequests + _nThawRequests, + prov.thawingNonce ); prov.tokens = prov.tokens - tokensThawed_; @@ -741,15 +770,19 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); DelegationInternal storage delegation = pool.delegators[msg.sender]; + // An invalid delegation pool has shares but no tokens require( - pool.tokens != 0 || (pool.shares == 0 && pool.sharesThawing == 0), + pool.tokens != 0 || pool.shares == 0, HorizonStakingInvalidDelegationPoolState(_serviceProvider, _verifier) ); // Calculate shares to issue - uint256 shares = (pool.tokens == 0 || pool.tokens == pool.tokensThawing) - ? _tokens - : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); + // Delegation pool is reset/initialized in any of the following cases: + // - pool.tokens == 0 and pool.shares == 0, pool is completely empty. Note that we don't test shares == 0 because + // the invalid delegation pool check already ensures shares are 0 if tokens are 0 + // - pool.tokens == pool.tokensThawing, the entire pool is thawing + bool initializePool = pool.tokens == 0 || pool.tokens == pool.tokensThawing; + uint256 shares = initializePool ? _tokens : ((_tokens * pool.shares) / (pool.tokens - pool.tokensThawing)); require(shares != 0 && shares >= _minSharesOut, HorizonStakingSlippageProtection(shares, _minSharesOut)); pool.tokens = pool.tokens + _tokens; @@ -764,6 +797,12 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice See {IHorizonStakingMain-undelegate}. * @dev To allow delegation to be slashable even while thawing without breaking accounting * the delegation pool shares are burned and replaced with thawing pool shares. + * @dev Note that due to slashing the delegation pool can enter an invalid state if all it's tokens are slashed. + * An invalid pool can only be recovered by adding back tokens into the pool with {IHorizonStakingMain-addToDelegationPool}. + * Any time the delegation pool is invalidated, the thawing pool is also reset and any pending undelegate requests get + * invalidated. + * Note that delegation that is caught thawing when the pool is invalidated will be completely lost! However delegation shares + * that were not thawing will be preserved. */ function _undelegate( address _serviceProvider, @@ -775,15 +814,21 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); DelegationInternal storage delegation = pool.delegators[msg.sender]; require(delegation.shares >= _shares, HorizonStakingInsufficientShares(delegation.shares, _shares)); + + // An invalid delegation pool has shares but no tokens (previous require check ensures shares > 0) require(pool.tokens != 0, HorizonStakingInvalidDelegationPoolState(_serviceProvider, _verifier)); + // Calculate thawing shares to issue - convert delegation pool shares to thawing pool shares + // delegation pool shares -> delegation pool tokens -> thawing pool shares + // Thawing pool is reset/initialized when the pool is empty: prov.tokensThawing == 0 uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); uint64 thawingUntil = uint64(block.timestamp + uint256(_provisions[_serviceProvider][_verifier].thawingPeriod)); - pool.shares = pool.shares - _shares; + pool.tokensThawing = pool.tokensThawing + tokens; pool.sharesThawing = pool.sharesThawing + thawingShares; + pool.shares = pool.shares - _shares; delegation.shares = delegation.shares - _shares; bytes32 thawRequestId = _createThawRequest( @@ -791,7 +836,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _verifier, beneficiary, thawingShares, - thawingUntil + thawingUntil, + pool.thawingNonce ); emit TokensUndelegated(_serviceProvider, _verifier, msg.sender, tokens); @@ -809,7 +855,12 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 _nThawRequests ) private { DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); - require(pool.tokens != 0, HorizonStakingInvalidDelegationPoolState(_serviceProvider, _verifier)); + + // An invalid delegation pool has shares but no tokens + require( + pool.tokens != 0 || pool.shares == 0, + HorizonStakingInvalidDelegationPoolState(_serviceProvider, _verifier) + ); uint256 tokensThawed = 0; uint256 sharesThawing = pool.sharesThawing; @@ -820,9 +871,12 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { msg.sender, tokensThawing, sharesThawing, - _nThawRequests + _nThawRequests, + pool.thawingNonce ); + // The next subtraction should never revert becase: pool.tokens >= pool.tokensThawing and pool.tokensThawing >= tokensThawed + // In the event the pool gets completely slashed tokensThawed will fulfil to 0. pool.tokens = pool.tokens - tokensThawed; pool.sharesThawing = sharesThawing; pool.tokensThawing = tokensThawing; @@ -849,6 +903,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param _owner The address of the owner of the thaw request * @param _shares The number of shares to thaw * @param _thawingUntil The timestamp until which the shares are thawing + * @param _thawingNonce Owner's validity nonce for the thaw request * @return The ID of the thaw request */ function _createThawRequest( @@ -856,13 +911,19 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address _verifier, address _owner, uint256 _shares, - uint64 _thawingUntil + uint64 _thawingUntil, + uint256 _thawingNonce ) private returns (bytes32) { LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; require(thawRequestList.count < MAX_THAW_REQUESTS, HorizonStakingTooManyThawRequests()); bytes32 thawRequestId = keccak256(abi.encodePacked(_serviceProvider, _verifier, _owner, thawRequestList.nonce)); - _thawRequests[thawRequestId] = ThawRequest({ shares: _shares, thawingUntil: _thawingUntil, next: bytes32(0) }); + _thawRequests[thawRequestId] = ThawRequest({ + shares: _shares, + thawingUntil: _thawingUntil, + next: bytes32(0), + thawingNonce: _thawingNonce + }); if (thawRequestList.count != 0) _thawRequests[thawRequestList.tail].next = thawRequestId; thawRequestList.addTail(thawRequestId); @@ -880,6 +941,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param _tokensThawing The current amount of tokens already thawing * @param _sharesThawing The current amount of shares already thawing * @param _nThawRequests The number of thaw requests to fulfill. If set to 0, all thaw requests are fulfilled. + * @param _thawingNonce The current valid thawing nonce. Any thaw request with a different nonce is invalid and should be ignored. * @return The amount of thawed tokens * @return The amount of tokens still thawing * @return The amount of shares still thawing @@ -890,7 +952,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address _owner, uint256 _tokensThawing, uint256 _sharesThawing, - uint256 _nThawRequests + uint256 _nThawRequests, + uint256 _thawingNonce ) private returns (uint256, uint256, uint256) { LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; require(thawRequestList.count > 0, HorizonStakingNothingThawing()); @@ -900,7 +963,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _getNextThawRequest, _fulfillThawRequest, _deleteThawRequest, - abi.encode(tokensThawed, _tokensThawing, _sharesThawing), + abi.encode(tokensThawed, _tokensThawing, _sharesThawing, _thawingNonce), _nThawRequests ); @@ -929,20 +992,30 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } // decode - (uint256 tokensThawed, uint256 tokensThawing, uint256 sharesThawing) = abi.decode( + (uint256 tokensThawed, uint256 tokensThawing, uint256 sharesThawing, uint256 thawingNonce) = abi.decode( _acc, - (uint256, uint256, uint256) + (uint256, uint256, uint256, uint256) ); - // process - uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; - tokensThawing = tokensThawing - tokens; - sharesThawing = sharesThawing - thawRequest.shares; - tokensThawed = tokensThawed + tokens; - emit ThawRequestFulfilled(_thawRequestId, tokens, thawRequest.shares, thawRequest.thawingUntil); + // process - only fulfill thaw requests for the current valid nonce + uint256 tokens = 0; + bool validThawRequest = thawRequest.thawingNonce == thawingNonce; + if (validThawRequest) { + tokens = (thawRequest.shares * tokensThawing) / sharesThawing; + tokensThawing = tokensThawing - tokens; + sharesThawing = sharesThawing - thawRequest.shares; + tokensThawed = tokensThawed + tokens; + } + emit ThawRequestFulfilled( + _thawRequestId, + tokens, + thawRequest.shares, + thawRequest.thawingUntil, + validThawRequest + ); // encode - _acc = abi.encode(tokensThawed, tokensThawing, sharesThawing); + _acc = abi.encode(tokensThawed, tokensThawing, sharesThawing, thawingNonce); return (false, _acc); } diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index d9fb613c3..54e55e1cc 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -96,6 +96,7 @@ abstract contract HorizonStakingBase is pool.shares = poolInternal.shares; pool.tokensThawing = poolInternal.tokensThawing; pool.sharesThawing = poolInternal.sharesThawing; + pool.thawingNonce = poolInternal.thawingNonce; return pool; } diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index b13128c72..d6d88283f 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -351,6 +351,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterProvision.createdAt, uint64(block.timestamp)); assertEq(afterProvision.maxVerifierCutPending, maxVerifierCut); assertEq(afterProvision.thawingPeriodPending, thawingPeriod); + assertEq(afterProvision.thawingNonce, 0); assertEq(afterServiceProvider.tokensStaked, beforeServiceProvider.tokensStaked); assertEq(afterServiceProvider.tokensProvisioned, tokens + beforeServiceProvider.tokensProvisioned); assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeServiceProvider.__DEPRECATED_tokensAllocated); @@ -384,6 +385,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterProvision.createdAt, beforeProvision.createdAt); assertEq(afterProvision.maxVerifierCutPending, beforeProvision.maxVerifierCutPending); assertEq(afterProvision.thawingPeriodPending, beforeProvision.thawingPeriodPending); + assertEq(afterProvision.thawingNonce, beforeProvision.thawingNonce); assertEq(afterServiceProvider.tokensStaked, beforeServiceProvider.tokensStaked); assertEq(afterServiceProvider.tokensProvisioned, beforeServiceProvider.tokensProvisioned + tokens); assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeServiceProvider.__DEPRECATED_tokensAllocated); @@ -406,7 +408,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { bytes32 expectedThawRequestId = keccak256( abi.encodePacked(users.indexer, verifier, users.indexer, beforeThawRequestList.nonce) ); - uint256 thawingShares = beforeProvision.sharesThawing == 0 + uint256 thawingShares = beforeProvision.tokensThawing == 0 ? tokens : (beforeProvision.sharesThawing * tokens) / beforeProvision.tokensThawing; @@ -437,12 +439,16 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // assert assertEq(afterProvision.tokens, beforeProvision.tokens); assertEq(afterProvision.tokensThawing, beforeProvision.tokensThawing + tokens); - assertEq(afterProvision.sharesThawing, beforeProvision.sharesThawing + thawingShares); + assertEq( + afterProvision.sharesThawing, + beforeProvision.tokensThawing == 0 ? thawingShares : beforeProvision.sharesThawing + thawingShares + ); assertEq(afterProvision.maxVerifierCut, beforeProvision.maxVerifierCut); assertEq(afterProvision.thawingPeriod, beforeProvision.thawingPeriod); assertEq(afterProvision.createdAt, beforeProvision.createdAt); assertEq(afterProvision.maxVerifierCutPending, beforeProvision.maxVerifierCutPending); assertEq(afterProvision.thawingPeriodPending, beforeProvision.thawingPeriodPending); + assertEq(afterProvision.thawingNonce, beforeProvision.thawingNonce); assertEq(thawRequestId, expectedThawRequestId); assertEq(afterThawRequest.shares, thawingShares); assertEq(afterThawRequest.thawingUntil, block.timestamp + beforeProvision.thawingPeriod); @@ -471,7 +477,13 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { serviceProvider ); - CalcValues_ThawRequestData memory calcValues = calcThawRequestData(serviceProvider, verifier, serviceProvider, nThawRequests, false); + CalcValues_ThawRequestData memory calcValues = calcThawRequestData( + serviceProvider, + verifier, + serviceProvider, + nThawRequests, + false + ); // deprovision for (uint i = 0; i < calcValues.thawRequestsFulfilledList.length; i++) { @@ -481,7 +493,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { calcValues.thawRequestsFulfilledListIds[i], calcValues.thawRequestsFulfilledListTokens[i], thawRequest.shares, - thawRequest.thawingUntil + thawRequest.thawingUntil, + beforeProvision.thawingNonce == thawRequest.thawingNonce ); } vm.expectEmit(address(staking)); @@ -514,8 +527,12 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterProvision.createdAt, beforeProvision.createdAt); assertEq(afterProvision.maxVerifierCutPending, beforeProvision.maxVerifierCutPending); assertEq(afterProvision.thawingPeriodPending, beforeProvision.thawingPeriodPending); + assertEq(afterProvision.thawingNonce, beforeProvision.thawingNonce); assertEq(afterServiceProvider.tokensStaked, beforeServiceProvider.tokensStaked); - assertEq(afterServiceProvider.tokensProvisioned, beforeServiceProvider.tokensProvisioned - calcValues.tokensThawed); + assertEq( + afterServiceProvider.tokensProvisioned, + beforeServiceProvider.tokensProvisioned - calcValues.tokensThawed + ); assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeServiceProvider.__DEPRECATED_tokensAllocated); assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, beforeServiceProvider.__DEPRECATED_tokensLocked); assertEq( @@ -554,6 +571,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { ServiceProviderInternal serviceProvider; LinkedList.List thawRequestList; } + function _reprovision( address serviceProvider, address verifier, @@ -569,7 +587,13 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { }); // calc - CalcValues_ThawRequestData memory calcValues = calcThawRequestData(serviceProvider, verifier, serviceProvider, nThawRequests, false); + CalcValues_ThawRequestData memory calcValues = calcThawRequestData( + serviceProvider, + verifier, + serviceProvider, + nThawRequests, + false + ); // reprovision for (uint i = 0; i < calcValues.thawRequestsFulfilledList.length; i++) { @@ -579,7 +603,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { calcValues.thawRequestsFulfilledListIds[i], calcValues.thawRequestsFulfilledListTokens[i], thawRequest.shares, - thawRequest.thawingUntil + thawRequest.thawingUntil, + beforeValues.provision.thawingNonce == thawRequest.thawingNonce ); } vm.expectEmit(address(staking)); @@ -615,6 +640,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterProvision.createdAt, beforeValues.provision.createdAt); assertEq(afterProvision.maxVerifierCutPending, beforeValues.provision.maxVerifierCutPending); assertEq(afterProvision.thawingPeriodPending, beforeValues.provision.thawingPeriodPending); + assertEq(afterProvision.thawingNonce, beforeValues.provision.thawingNonce); // assert: provision new verifier assertEq(afterProvisionNewVerifier.tokens, beforeValues.provisionNewVerifier.tokens + calcValues.tokensThawed); @@ -623,8 +649,15 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterProvisionNewVerifier.maxVerifierCut, beforeValues.provisionNewVerifier.maxVerifierCut); assertEq(afterProvisionNewVerifier.thawingPeriod, beforeValues.provisionNewVerifier.thawingPeriod); assertEq(afterProvisionNewVerifier.createdAt, beforeValues.provisionNewVerifier.createdAt); - assertEq(afterProvisionNewVerifier.maxVerifierCutPending, beforeValues.provisionNewVerifier.maxVerifierCutPending); - assertEq(afterProvisionNewVerifier.thawingPeriodPending, beforeValues.provisionNewVerifier.thawingPeriodPending); + assertEq( + afterProvisionNewVerifier.maxVerifierCutPending, + beforeValues.provisionNewVerifier.maxVerifierCutPending + ); + assertEq( + afterProvisionNewVerifier.thawingPeriodPending, + beforeValues.provisionNewVerifier.thawingPeriodPending + ); + assertEq(afterProvisionNewVerifier.thawingNonce, beforeValues.provisionNewVerifier.thawingNonce); // assert: service provider assertEq(afterServiceProvider.tokensStaked, beforeValues.serviceProvider.tokensStaked); @@ -632,8 +665,14 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { afterServiceProvider.tokensProvisioned, beforeValues.serviceProvider.tokensProvisioned + calcValues.tokensThawed - calcValues.tokensThawed ); - assertEq(afterServiceProvider.__DEPRECATED_tokensAllocated, beforeValues.serviceProvider.__DEPRECATED_tokensAllocated); - assertEq(afterServiceProvider.__DEPRECATED_tokensLocked, beforeValues.serviceProvider.__DEPRECATED_tokensLocked); + assertEq( + afterServiceProvider.__DEPRECATED_tokensAllocated, + beforeValues.serviceProvider.__DEPRECATED_tokensAllocated + ); + assertEq( + afterServiceProvider.__DEPRECATED_tokensLocked, + beforeValues.serviceProvider.__DEPRECATED_tokensLocked + ); assertEq( afterServiceProvider.__DEPRECATED_tokensLockedUntil, beforeValues.serviceProvider.__DEPRECATED_tokensLockedUntil @@ -662,7 +701,10 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { ? bytes32(0) : beforeValues.thawRequestList.tail ); - assertEq(afterThawRequestList.count, beforeValues.thawRequestList.count - calcValues.thawRequestsFulfilledList.length); + assertEq( + afterThawRequestList.count, + beforeValues.thawRequestList.count - calcValues.thawRequestsFulfilledList.length + ); assertEq(afterThawRequestList.nonce, beforeValues.thawRequestList.nonce); } @@ -699,6 +741,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterProvision.createdAt, beforeProvision.createdAt); assertEq(afterProvision.maxVerifierCutPending, maxVerifierCut); assertEq(afterProvision.thawingPeriodPending, thawingPeriod); + assertEq(afterProvision.thawingNonce, beforeProvision.thawingNonce); } function _acceptProvisionParameters(address serviceProvider) internal { @@ -734,6 +777,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterProvision.thawingPeriod, beforeProvision.thawingPeriodPending); assertEq(afterProvision.thawingPeriod, afterProvision.thawingPeriodPending); assertEq(afterProvision.createdAt, beforeProvision.createdAt); + assertEq(afterProvision.thawingNonce, beforeProvision.thawingNonce); } function _setOperator(address verifier, address operator, bool allow) internal { @@ -842,6 +886,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(beforePool.shares + calcShares, afterPool.shares); assertEq(beforePool.tokensThawing, afterPool.tokensThawing); assertEq(beforePool.sharesThawing, afterPool.sharesThawing); + assertEq(beforePool.thawingNonce, afterPool.thawingNonce); assertEq(beforeDelegation.shares + calcShares, afterDelegation.shares); assertEq(beforeDelegation.__DEPRECATED_tokensLocked, afterDelegation.__DEPRECATED_tokensLocked); assertEq(beforeDelegation.__DEPRECATED_tokensLockedUntil, afterDelegation.__DEPRECATED_tokensLockedUntil); @@ -890,7 +935,9 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // calc CalcValues_Undelegate memory calcValues; - calcValues.tokens = ((beforeValues.pool.tokens - beforeValues.pool.tokensThawing) * shares) / beforeValues.pool.shares; + calcValues.tokens = + ((beforeValues.pool.tokens - beforeValues.pool.tokensThawing) * shares) / + beforeValues.pool.shares; calcValues.thawingShares = beforeValues.pool.tokensThawing == 0 ? calcValues.tokens : (beforeValues.pool.sharesThawing * calcValues.tokens) / beforeValues.pool.tokensThawing; @@ -939,7 +986,13 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(beforeValues.pool.shares, afterPool.shares + shares); assertEq(beforeValues.pool.tokens, afterPool.tokens); assertEq(beforeValues.pool.tokensThawing + calcValues.tokens, afterPool.tokensThawing); - assertEq(beforeValues.pool.sharesThawing + calcValues.thawingShares, afterPool.sharesThawing); + assertEq( + beforeValues.pool.tokensThawing == 0 + ? calcValues.thawingShares + : beforeValues.pool.sharesThawing + calcValues.thawingShares, + afterPool.sharesThawing + ); + assertEq(beforeValues.pool.thawingNonce, afterPool.thawingNonce); assertEq(beforeValues.delegation.shares - shares, afterDelegation.shares); assertEq(afterThawRequest.shares, calcValues.thawingShares); assertEq(afterThawRequest.thawingUntil, calcValues.thawingUntil); @@ -987,6 +1040,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256 senderBalance; uint256 stakingBalance; } + function __withdrawDelegated( address _serviceProvider, address _verifier, @@ -1024,7 +1078,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { calcValues.thawRequestsFulfilledListIds[i], calcValues.thawRequestsFulfilledListTokens[i], thawRequest.shares, - thawRequest.thawingUntil + thawRequest.thawingUntil, + beforeValues.pool.thawingNonce == thawRequest.thawingNonce ); } vm.expectEmit(address(staking)); @@ -1038,13 +1093,23 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { if (calcValues.tokensThawed != 0) { vm.expectEmit(); if (reDelegate) { - emit IHorizonStakingMain.TokensDelegated(_newServiceProvider, _verifier, msgSender, calcValues.tokensThawed); + emit IHorizonStakingMain.TokensDelegated( + _newServiceProvider, + _verifier, + msgSender, + calcValues.tokensThawed + ); } else { emit Transfer(address(staking), msgSender, calcValues.tokensThawed); } } vm.expectEmit(); - emit IHorizonStakingMain.DelegatedTokensWithdrawn(_serviceProvider, _verifier, msgSender, calcValues.tokensThawed); + emit IHorizonStakingMain.DelegatedTokensWithdrawn( + _serviceProvider, + _verifier, + msgSender, + calcValues.tokensThawed + ); staking.withdrawDelegated( _serviceProvider, _verifier, @@ -1067,6 +1132,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterValues.pool.shares, beforeValues.pool.shares); assertEq(afterValues.pool.tokensThawing, calcValues.tokensThawing); assertEq(afterValues.pool.sharesThawing, calcValues.sharesThawing); + assertEq(afterValues.pool.thawingNonce, beforeValues.pool.thawingNonce); for (uint i = 0; i < calcValues.thawRequestsFulfilledListIds.length; i++) { ThawRequest memory thawRequest = staking.getThawRequest(calcValues.thawRequestsFulfilledListIds[i]); @@ -1090,7 +1156,10 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { ? bytes32(0) : beforeValues.thawRequestList.tail ); - assertEq(afterValues.thawRequestList.count, beforeValues.thawRequestList.count - calcValues.thawRequestsFulfilledList.length); + assertEq( + afterValues.thawRequestList.count, + beforeValues.thawRequestList.count - calcValues.thawRequestsFulfilledList.length + ); assertEq(afterValues.thawRequestList.nonce, beforeValues.thawRequestList.nonce); if (reDelegate) { @@ -1106,7 +1175,10 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterValues.newPool.tokensThawing, beforeValues.newPool.tokensThawing); assertEq(afterValues.newPool.sharesThawing, beforeValues.newPool.sharesThawing); assertEq(afterValues.newDelegation.shares, beforeValues.newDelegation.shares + calcShares); - assertEq(afterValues.newDelegation.__DEPRECATED_tokensLocked, beforeValues.newDelegation.__DEPRECATED_tokensLocked); + assertEq( + afterValues.newDelegation.__DEPRECATED_tokensLocked, + beforeValues.newDelegation.__DEPRECATED_tokensLocked + ); assertEq( afterValues.newDelegation.__DEPRECATED_tokensLockedUntil, beforeValues.newDelegation.__DEPRECATED_tokensLockedUntil @@ -1160,6 +1232,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(beforePool.shares, afterPool.shares); assertEq(beforePool.tokensThawing, afterPool.tokensThawing); assertEq(beforePool.sharesThawing, afterPool.sharesThawing); + assertEq(beforePool.thawingNonce, afterPool.thawingNonce); } function _setDelegationFeeCut( @@ -1322,19 +1395,25 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // assert assertEq(afterProvision.tokens + calcValues.providerTokensSlashed, before.provision.tokens); assertEq(afterProvision.tokensThawing, provisionThawingTokens); - assertEq(afterProvision.sharesThawing, before.provision.sharesThawing); + assertEq( + afterProvision.sharesThawing, + afterProvision.tokensThawing == 0 ? 0 : before.provision.sharesThawing + ); assertEq(afterProvision.maxVerifierCut, before.provision.maxVerifierCut); assertEq(afterProvision.maxVerifierCutPending, before.provision.maxVerifierCutPending); assertEq(afterProvision.thawingPeriod, before.provision.thawingPeriod); assertEq(afterProvision.thawingPeriodPending, before.provision.thawingPeriodPending); - + assertEq( + afterProvision.thawingNonce, + (before.provision.sharesThawing != 0 && afterProvision.sharesThawing == 0) ? before.provision.thawingNonce + 1 : before.provision.thawingNonce); if (isDelegationSlashingEnabled) { uint256 poolThawingTokens = (before.pool.tokensThawing * (1e18 - ((calcValues.delegationTokensSlashed * 1e18) / before.pool.tokens))) / (1e18); assertEq(afterPool.tokens + calcValues.delegationTokensSlashed, before.pool.tokens); assertEq(afterPool.shares, before.pool.shares); assertEq(afterPool.tokensThawing, poolThawingTokens); - assertEq(afterPool.sharesThawing, before.pool.sharesThawing); + assertEq(afterPool.sharesThawing, afterPool.tokensThawing == 0 ? 0 : before.pool.sharesThawing); + assertEq(afterPool.thawingNonce, (before.pool.sharesThawing != 0 && afterPool.sharesThawing == 0) ? before.pool.thawingNonce + 1 : before.pool.thawingNonce); } assertEq(before.stakingBalance - tokensSlashed, afterStakingBalance); @@ -1652,6 +1731,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterValues.pool.shares, beforeValues.pool.shares); assertEq(afterValues.pool.tokensThawing, beforeValues.pool.tokensThawing); assertEq(afterValues.pool.sharesThawing, beforeValues.pool.sharesThawing); + assertEq(afterValues.pool.thawingNonce, beforeValues.pool.thawingNonce); assertEq(afterValues.serviceProvider.tokensProvisioned, beforeValues.serviceProvider.tokensProvisioned); if (rewardsDestination != address(0)) { @@ -1763,6 +1843,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256 tokensThawing; // Shares representing the thawing tokens uint256 sharesThawing; + // Thawing nonce + uint256 thawingNonce; } function _getStorage_DelegationPoolInternal( @@ -1789,7 +1871,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { shares: uint256(vm.load(address(staking), bytes32(baseSlot + 3))), _gap_delegators_mapping: uint256(vm.load(address(staking), bytes32(baseSlot + 4))), tokensThawing: uint256(vm.load(address(staking), bytes32(baseSlot + 5))), - sharesThawing: uint256(vm.load(address(staking), bytes32(baseSlot + 6))) + sharesThawing: uint256(vm.load(address(staking), bytes32(baseSlot + 6))), + thawingNonce: uint256(vm.load(address(staking), bytes32(baseSlot + 7))) }); return delegationPoolInternal; @@ -2120,14 +2203,17 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { bytes32 thawRequestId = thawRequestList.head; while (thawRequestId != bytes32(0) && (iterations == 0 || thawRequestsFulfilled < iterations)) { ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + bool isThawRequestValid = thawRequest.thawingNonce == (delegation ? pool.thawingNonce : prov.thawingNonce); if (thawRequest.thawingUntil <= block.timestamp) { thawRequestsFulfilled++; - uint256 tokens = delegation - ? (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing - : (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; - tokensThawed += tokens; - tokensThawing -= tokens; - sharesThawing -= thawRequest.shares; + if (isThawRequestValid) { + uint256 tokens = delegation + ? (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing + : (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; + tokensThawed += tokens; + tokensThawing -= tokens; + sharesThawing -= thawRequest.shares; + } } else { break; } @@ -2142,11 +2228,14 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { thawRequestId = thawRequestList.head; while (thawRequestId != bytes32(0) && (iterations == 0 || i < iterations)) { ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + bool isThawRequestValid = thawRequest.thawingNonce == (delegation ? pool.thawingNonce : prov.thawingNonce); + if (thawRequest.thawingUntil <= block.timestamp) { - uint256 tokens = delegation - ? (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing - : (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; - thawRequestsFulfilledListTokens[i] = tokens; + if (isThawRequestValid) { + thawRequestsFulfilledListTokens[i] = delegation + ? (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing + : (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; + } thawRequestsFulfilledListIds[i] = thawRequestId; thawRequestsFulfilledList[i] = staking.getThawRequest(thawRequestId); thawRequestId = thawRequestsFulfilledList[i].next; diff --git a/packages/horizon/test/staking/delegation/addToPool.t.sol b/packages/horizon/test/staking/delegation/addToPool.t.sol index de2647dfc..ff5b957ca 100644 --- a/packages/horizon/test/staking/delegation/addToPool.t.sol +++ b/packages/horizon/test/staking/delegation/addToPool.t.sol @@ -76,7 +76,7 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, 1); } - function test_Deletaion_AddToPool_RevertWhen_NoProvision() public { + function test_Delegation_AddToPool_RevertWhen_NoProvision() public { vm.startPrank(subgraphDataServiceAddress); bytes memory expectedError = abi.encodeWithSelector( IHorizonStakingMain.HorizonStakingInvalidProvision.selector, @@ -87,5 +87,62 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, 1); } - // TODO: test recovering an invalid delegation pool + function test_Delegation_AddToPool_WhenInvalidPool( + uint256 tokens, + uint256 delegationTokens, + uint256 recoverAmount + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { + recoverAmount = bound(recoverAmount, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + + // create delegation pool + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + // slash entire provision + pool + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); + + // recover pool by adding tokens + resetPrank(users.indexer); + token.approve(address(staking), recoverAmount); + _addToDelegationPool(users.indexer, subgraphDataServiceAddress, recoverAmount); + } + + + function test_Delegation_AddToPool_WhenInvalidPool_RevertWhen_PoolHasNoShares( + uint256 tokens, + uint256 delegationTokens, + uint256 recoverAmount + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { + recoverAmount = bound(recoverAmount, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + + // create delegation pool + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + // undelegate shares so we have thawing shares/tokens + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + resetPrank(users.delegator); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); + + // slash entire provision + pool + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); + + // addTokens + bytes memory expectedError = abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + users.indexer, + subgraphDataServiceAddress + ); + vm.expectRevert(expectedError); + staking.addToDelegationPool(users.indexer, subgraphDataServiceAddress, 1); + } } \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 5deb9b495..ab58e4bde 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -73,12 +73,15 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + // slash entire provision + pool resetPrank(subgraphDataServiceAddress); _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); + // attempt to delegate to a pool on invalid state, should revert resetPrank(users.delegator); token.approve(address(staking), delegationTokens); vm.expectRevert(abi.encodeWithSelector( @@ -93,15 +96,20 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 2, MAX_STAKING_TOKENS); + resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + // undelegate some shares but not all DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); - _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares / 2); + // slash entire provision + pool resetPrank(subgraphDataServiceAddress); _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); - + + // attempt to delegate to a pool on invalid state, should revert resetPrank(users.delegator); token.approve(address(staking), delegationTokens); vm.expectRevert(abi.encodeWithSelector( @@ -111,4 +119,31 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { )); staking.delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); } + + function testDelegate_AfterRecoveringPool( + uint256 tokens, + uint256 delegationTokens, + uint256 recoverAmount + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { + recoverAmount = bound(recoverAmount, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + + // create delegation pool + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + // slash entire provision + pool + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); + + // recover pool by adding tokens + resetPrank(users.indexer); + token.approve(address(staking), recoverAmount); + _addToDelegationPool(users.indexer, subgraphDataServiceAddress, recoverAmount); + + // delegate to pool - should be allowed now + vm.assume(delegationTokens >= recoverAmount); // to avoid getting issued 0 shares + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + } } diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index c5d61b6e5..4cad2e0c3 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -17,7 +17,12 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 delegationAmount ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); - DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); } @@ -31,7 +36,12 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); - DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); uint256 undelegateAmount = delegation.shares / undelegateSteps; for (uint i = 0; i < undelegateSteps; i++) { @@ -83,7 +93,12 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 overDelegationShares ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { resetPrank(users.delegator); - DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); overDelegationShares = bound(overDelegationShares, delegation.shares + 1, MAX_STAKING_TOKENS + 1); bytes memory expectedError = abi.encodeWithSignature( @@ -103,7 +118,12 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { resetPrank(users.delegator); _delegate(users.indexer, delegationAmount); - DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, true); + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + true + ); _undelegate(users.indexer, delegation.shares); } @@ -112,22 +132,98 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + // slash all of the provision + delegation resetPrank(subgraphDataServiceAddress); _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); - + + // attempt to undelegate - should revert resetPrank(users.delegator); - DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); - vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, + DelegationInternal memory delegation = _getStorage_Delegation( users.indexer, - subgraphDataServiceAddress - )); + subgraphDataServiceAddress, + users.delegator, + false + ); + vm.expectRevert( + abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, + users.indexer, + subgraphDataServiceAddress + ) + ); staking.undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); } + function testUndelegate_AfterRecoveringPool( + uint256 tokens, + uint256 delegationTokens + ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing { + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + + // delegate + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + // slash all of the provision + delegation + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); + + // recover the delegation pool + resetPrank(users.indexer); + token.approve(address(staking), delegationTokens); + _addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationTokens); + + // undelegate -- should now work + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + resetPrank(users.delegator); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); + } + + function testUndelegate_ThawingShares_AfterRecoveringPool() + public + useIndexer + useProvision(MAX_STAKING_TOKENS, 0, 0) + useDelegationSlashing + { + uint256 delegationTokens = MAX_STAKING_TOKENS / 10; + + // delegate + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + // undelegate half shares so we have some thawing shares/tokens + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + resetPrank(users.delegator); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares / 2); + + // slash all of the provision + delegation + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, MAX_STAKING_TOKENS + delegationTokens, 0); + + // recover the delegation pool + resetPrank(users.indexer); + token.approve(address(staking), delegationTokens); + _addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationTokens); + + // undelegate the rest + resetPrank(users.delegator); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares - delegation.shares / 2); + } + function testUndelegate_RevertIf_BeneficiaryIsZero( uint256 amount, uint256 delegationAmount diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index b7644c62a..c66126e1c 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -9,7 +9,6 @@ import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { - /* * MODIFIERS */ @@ -17,7 +16,12 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { modifier useUndelegate(uint256 shares) { vm.stopPrank(); vm.startPrank(users.delegator); - DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); shares = bound(shares, 1, delegation.shares); _undelegate(users.indexer, subgraphDataServiceAddress, shares); @@ -27,8 +31,8 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { /* * HELPERS */ - function _setupNewIndexer(uint256 tokens) private returns(address) { - (, address msgSender,) = vm.readCallers(); + function _setupNewIndexer(uint256 tokens) private returns (address) { + (, address msgSender, ) = vm.readCallers(); address newIndexer = createUser("newIndexer"); vm.startPrank(newIndexer); @@ -52,7 +56,11 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useDelegation(delegationAmount) useUndelegate(withdrawShares) { - LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceAddress, users.delegator); + LinkedList.List memory thawingRequests = staking.getThawRequestList( + users.indexer, + subgraphDataServiceAddress, + users.delegator + ); ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); skip(thawRequest.thawingUntil + 1); @@ -62,12 +70,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { function testWithdrawDelegation_RevertWhen_NotThawing( uint256 delegationAmount - ) - public - useIndexer - useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) - useDelegation(delegationAmount) - { + ) public useIndexer useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); @@ -100,7 +103,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { { uint256 previousBalance = token.balanceOf(users.delegator); _withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); - + // Nothing changed since thawing period haven't finished uint256 newBalance = token.balanceOf(users.delegator); assertEq(newBalance, previousBalance); @@ -120,7 +123,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { uint256 previousBalance = token.balanceOf(users.delegator); _withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0, 0); - + uint256 newBalance = token.balanceOf(users.delegator); assertEq(newBalance, previousBalance); @@ -134,10 +137,19 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { resetPrank(users.delegator); _delegate(users.indexer, delegationAmount); - DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, true); + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + true + ); _undelegate(users.indexer, delegation.shares); - LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceLegacyAddress, users.delegator); + LinkedList.List memory thawingRequests = staking.getThawRequestList( + users.indexer, + subgraphDataServiceLegacyAddress, + users.delegator + ); ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); skip(thawRequest.thawingUntil + 1); @@ -149,26 +161,70 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, MAX_THAWING_PERIOD) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, 2, MAX_STAKING_TOKENS); + resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); - DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); - _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); - skip(MAX_THAWING_PERIOD + 1); + // undelegate some shares + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares / 2); + // slash all of the provision + delegation resetPrank(subgraphDataServiceAddress); _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); - + + // fast forward in time and attempt to withdraw + skip(MAX_THAWING_PERIOD + 1); resetPrank(users.delegator); - vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, - users.indexer, - subgraphDataServiceAddress - )); + vm.expectRevert( + abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, + users.indexer, + subgraphDataServiceAddress + ) + ); staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); } + function testWithdrawDelegation_AfterRecoveringPool( + uint256 tokens + ) public useIndexer useProvision(tokens, 0, MAX_THAWING_PERIOD) useDelegationSlashing { + uint256 delegationTokens = MAX_STAKING_TOKENS / 10; + + // delegate + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + // undelegate some shares + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares / 2); + + // slash all of the provision + delegation + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); + + // recover the delegation pool + resetPrank(users.indexer); + token.approve(address(staking), delegationTokens); + _addToDelegationPool(users.indexer, subgraphDataServiceAddress, delegationTokens); + + // fast forward in time and withdraw - this withdraw will net 0 tokens + skip(MAX_THAWING_PERIOD + 1); + resetPrank(users.delegator); + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); + } + function testWithdrawDelegation_WithBeneficiary( uint256 delegationAmount, address beneficiary @@ -223,4 +279,4 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { vm.expectRevert(expectedError); staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 1); } -} \ No newline at end of file +} diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol index 376b05e14..ff022e1aa 100644 --- a/packages/horizon/test/staking/provision/deprovision.t.sol +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -104,4 +104,49 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { _deprovision(users.indexer, subgraphDataServiceAddress, 0); } + + function testDeprovision_AfterProvisionFullySlashed( + uint256 amount, + uint64 thawingPeriod, + uint256 thawAmount + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + // thaw some funds so there are some shares and tokens thawing + thawAmount = bound(thawAmount, 1, amount); + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + + // slash all of it + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, amount, 0); + + // now deprovision + resetPrank(users.indexer); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); + } + + function testDeprovision_AfterResetingThawingPool( + uint256 amount, + uint64 thawingPeriod, + uint256 thawAmount + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + // thaw some funds so there are some shares and tokens thawing + thawAmount = bound(thawAmount, 1, amount); + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + + // slash all of it + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, amount, 0); + + // put some funds back in + resetPrank(users.indexer); + _stake(amount); + _addToProvision(users.indexer, subgraphDataServiceAddress, amount); + + // thaw some funds again + resetPrank(users.indexer); + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + + // now deprovision + resetPrank(users.indexer); + _deprovision(users.indexer, subgraphDataServiceAddress, 0); + } } diff --git a/packages/horizon/test/staking/provision/thaw.t.sol b/packages/horizon/test/staking/provision/thaw.t.sol index 3672683ba..c3b4d6903 100644 --- a/packages/horizon/test/staking/provision/thaw.t.sol +++ b/packages/horizon/test/staking/provision/thaw.t.sol @@ -98,4 +98,45 @@ contract HorizonStakingThawTest is HorizonStakingTest { vm.expectRevert(expectedError); staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); } + + function testThaw_RevertWhen_ProvisionFullySlashed ( + uint256 amount, + uint64 thawingPeriod, + uint256 thawAmount + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + thawAmount = bound(thawAmount, 1, amount); + + // slash all of it + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, amount, 0); + + // Attempt to thaw on a provision that has been fully slashed + resetPrank(users.indexer); + bytes memory expectedError = abi.encodeWithSignature("HorizonStakingInsufficientTokens(uint256,uint256)", 0, thawAmount); + vm.expectRevert(expectedError); + staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + } + + function testThaw_AfterResetingThawingPool( + uint256 amount, + uint64 thawingPeriod, + uint256 thawAmount + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + // thaw some funds so there are some shares thawing and tokens thawing + thawAmount = bound(thawAmount, 1, amount); + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + + // slash all of it + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, amount, 0); + + // put some funds back in + resetPrank(users.indexer); + _stake(amount); + _addToProvision(users.indexer, subgraphDataServiceAddress, amount); + + // we should be able to thaw again + resetPrank(users.indexer); + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + } } diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 66a645b7a..7c7933419 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -21,7 +21,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { slashTokens = bound(slashTokens, 1, tokens); uint256 maxVerifierTokens = (slashTokens * maxVerifierCut) / MAX_PPM; vm.assume(verifierCutAmount <= maxVerifierTokens); - + vm.startPrank(subgraphDataServiceAddress); _slash(users.indexer, subgraphDataServiceAddress, slashTokens, verifierCutAmount); } @@ -35,7 +35,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { slashTokens = bound(slashTokens, 1, tokens); uint256 maxVerifierTokens = (slashTokens * maxVerifierCut) / MAX_PPM; vm.assume(verifierCutAmount > maxVerifierTokens); - + vm.startPrank(subgraphDataServiceAddress); vm.assume(slashTokens > 0); bytes memory expectedError = abi.encodeWithSelector( @@ -89,15 +89,12 @@ contract HorizonStakingSlashTest is HorizonStakingTest { ) public useIndexer useProvision(tokens, MAX_PPM, 0) { delegationTokens = bound(delegationTokens, 0, MAX_STAKING_TOKENS); vm.assume(slashTokens > tokens + delegationTokens); - + vm.startPrank(subgraphDataServiceAddress); _slash(users.indexer, subgraphDataServiceAddress, slashTokens, 0); } - function testSlash_RevertWhen_NoProvision( - uint256 tokens, - uint256 slashTokens - ) public useIndexer useStake(tokens) { + function testSlash_RevertWhen_NoProvision(uint256 tokens, uint256 slashTokens) public useIndexer useStake(tokens) { vm.assume(slashTokens > 0); bytes memory expectedError = abi.encodeWithSelector( IHorizonStakingMain.HorizonStakingInsufficientTokens.selector, @@ -108,4 +105,39 @@ contract HorizonStakingSlashTest is HorizonStakingTest { vm.startPrank(subgraphDataServiceAddress); staking.slash(users.indexer, slashTokens, 0, subgraphDataServiceAddress); } -} \ No newline at end of file + + function testSlash_Everything( + uint256 tokens, + uint256 delegationTokens + ) public useIndexer useProvision(tokens, MAX_PPM, 0) useDelegationSlashing { + delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + vm.startPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); + } + + function testSlash_Everything_WithUndelegation( + uint256 tokens + ) public useIndexer useProvision(tokens, MAX_PPM, 0) useDelegationSlashing { + uint256 delegationTokens = MAX_STAKING_TOKENS / 10; + + resetPrank(users.delegator); + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + // undelegate half shares so we have some thawing shares/tokens + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + resetPrank(users.delegator); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares / 2); + + vm.startPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); + } +} From 0f5ba68b0ad649b376344bf50c8a0928e5ca73ea Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Thu, 10 Oct 2024 03:02:53 +1100 Subject: [PATCH 272/343] chore(Horizon): add redelegate option (#1059) --- .../internal/IHorizonStakingMain.sol | 40 ++++- .../contracts/staking/HorizonStaking.sol | 37 ++++- .../HorizonStakingShared.t.sol | 55 +++++-- .../test/staking/delegation/redelegate.t.sol | 146 ++++++++++++++++++ .../test/staking/delegation/withdraw.t.sol | 85 ++-------- 5 files changed, 269 insertions(+), 94 deletions(-) create mode 100644 packages/horizon/test/staking/delegation/redelegate.t.sol diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 8d047ac1d..b144b0ce6 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -420,6 +420,16 @@ interface IHorizonStakingMain { */ error HorizonStakingInvalidBeneficiaryZeroAddress(); + /** + * @notice Thrown when attempting to redelegate with a serivce provider that is the zero address. + */ + error HorizonStakingInvalidServiceProviderZeroAddress(); + + /** + * @notice Thrown when attempting to redelegate with a verifier that is the zero address. + */ + error HorizonStakingInvalidVerifierZeroAddress(); + // -- Errors: thaw requests -- error HorizonStakingNothingThawing(); @@ -746,7 +756,6 @@ interface IHorizonStakingMain { /** * @notice Withdraw undelegated tokens from a provision after thawing. - * Tokens can be automatically re-delegated to another provision by setting `newServiceProvider`. * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw * requests in the event that fulfilling all of them results in a gas limit error. * @dev If the delegation pool was completely slashed before withdrawing, calling this function will fulfill @@ -754,20 +763,39 @@ interface IHorizonStakingMain { * * Requirements: * - Must have previously initiated a thaw request using {undelegate}. - * - `newServiceProvider` must either be zero address or have previously provisioned stake to `verifier`. * * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events. * * @param serviceProvider The service provider address * @param verifier The verifier address - * @param newServiceProvider The address of a new service provider, if the delegator wants to re-delegate + * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests. + */ + function withdrawDelegated(address serviceProvider, address verifier, uint256 nThawRequests) external; + + /** + * @notice Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`. + * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw + * requests in the event that fulfilling all of them results in a gas limit error. + * + * Requirements: + * - Must have previously initiated a thaw request using {undelegate}. + * - `newServiceProvider` and `newVerifier` must not be the zero address. + * - `newServiceProvider` must have previously provisioned stake to `newVerifier`. + * + * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events. + * + * @param oldServiceProvider The old service provider address + * @param oldVerifier The old verifier address + * @param newServiceProvider The address of a new service provider + * @param newVerifier The address of a new verifier * @param minSharesForNewProvider The minimum amount of shares to accept for the new service provider * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests. */ - function withdrawDelegated( - address serviceProvider, - address verifier, + function redelegate( + address oldServiceProvider, + address oldVerifier, address newServiceProvider, + address newVerifier, uint256 minSharesForNewProvider, uint256 nThawRequests ) external; diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 476437ffb..c46670dcb 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -319,11 +319,32 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { function withdrawDelegated( address serviceProvider, address verifier, + uint256 nThawRequests + ) external override notPaused { + _withdrawDelegated(serviceProvider, verifier, address(0), address(0), 0, nThawRequests); + } + + /** + * @notice See {IHorizonStakingMain-redelegate}. + */ + function redelegate( + address oldServiceProvider, + address oldVerifier, address newServiceProvider, + address newVerifier, uint256 minSharesForNewProvider, uint256 nThawRequests ) external override notPaused { - _withdrawDelegated(serviceProvider, verifier, newServiceProvider, minSharesForNewProvider, nThawRequests); + require(newServiceProvider != address(0), HorizonStakingInvalidServiceProviderZeroAddress()); + require(newVerifier != address(0), HorizonStakingInvalidVerifierZeroAddress()); + _withdrawDelegated( + oldServiceProvider, + oldVerifier, + newServiceProvider, + newVerifier, + minSharesForNewProvider, + nThawRequests + ); } /** @@ -360,7 +381,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice See {IHorizonStakingMain-withdrawDelegated}. */ function withdrawDelegated(address serviceProvider, address newServiceProvider) external override notPaused { - _withdrawDelegated(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, 0, 0); + _withdrawDelegated( + serviceProvider, + SUBGRAPH_DATA_SERVICE_ADDRESS, + newServiceProvider, + SUBGRAPH_DATA_SERVICE_ADDRESS, + 0, + 0 + ); } /* @@ -851,6 +879,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address _serviceProvider, address _verifier, address _newServiceProvider, + address _newVerifier, uint256 _minSharesForNewProvider, uint256 _nThawRequests ) private { @@ -882,8 +911,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { pool.tokensThawing = tokensThawing; if (tokensThawed != 0) { - if (_newServiceProvider != address(0)) { - _delegate(_newServiceProvider, _verifier, tokensThawed, _minSharesForNewProvider); + if (_newServiceProvider != address(0) && _newVerifier != address(0)) { + _delegate(_newServiceProvider, _newVerifier, tokensThawed, _minSharesForNewProvider); } else { _graphToken().pushTokens(msg.sender, tokensThawed); } diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index d6d88283f..1fe4ceba3 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -1004,9 +1004,26 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { } function _withdrawDelegated( + address serviceProvider, + address verifier, + uint256 nThawRequests + ) internal { + __withdrawDelegated( + serviceProvider, + verifier, + address(0), + address(0), + 0, + nThawRequests, + false + ); + } + + function _redelegate( address serviceProvider, address verifier, address newServiceProvider, + address newVerifier, uint256 minSharesForNewProvider, uint256 nThawRequests ) internal { @@ -1014,6 +1031,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { serviceProvider, verifier, newServiceProvider, + newVerifier, minSharesForNewProvider, nThawRequests, false @@ -1021,7 +1039,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { } function _withdrawDelegated(address serviceProvider, address newServiceProvider) internal { - __withdrawDelegated(serviceProvider, subgraphDataServiceLegacyAddress, newServiceProvider, 0, 0, true); + __withdrawDelegated(serviceProvider, subgraphDataServiceLegacyAddress, newServiceProvider, subgraphDataServiceLegacyAddress, 0, 0, true); } struct BeforeValues_WithdrawDelegated { @@ -1045,19 +1063,20 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address _serviceProvider, address _verifier, address _newServiceProvider, + address _newVerifier, uint256 _minSharesForNewProvider, uint256 _nThawRequests, bool legacy ) private { (, address msgSender, ) = vm.readCallers(); - bool reDelegate = _newServiceProvider != address(0); + bool reDelegate = _newServiceProvider != address(0) && _newVerifier != address(0); // before BeforeValues_WithdrawDelegated memory beforeValues; beforeValues.pool = _getStorage_DelegationPoolInternal(_serviceProvider, _verifier, legacy); - beforeValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _verifier, legacy); - beforeValues.newDelegation = _getStorage_Delegation(_serviceProvider, _verifier, msgSender, legacy); + beforeValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _newVerifier, legacy); + beforeValues.newDelegation = _getStorage_Delegation(_newServiceProvider, _newVerifier, msgSender, legacy); beforeValues.thawRequestList = staking.getThawRequestList(_serviceProvider, _verifier, msgSender); beforeValues.senderBalance = token.balanceOf(msgSender); beforeValues.stakingBalance = token.balanceOf(address(staking)); @@ -1095,7 +1114,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { if (reDelegate) { emit IHorizonStakingMain.TokensDelegated( _newServiceProvider, - _verifier, + _newVerifier, msgSender, calcValues.tokensThawed ); @@ -1104,25 +1123,33 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { } } vm.expectEmit(); + emit IHorizonStakingMain.DelegatedTokensWithdrawn( _serviceProvider, _verifier, msgSender, calcValues.tokensThawed ); - staking.withdrawDelegated( - _serviceProvider, - _verifier, - _newServiceProvider, - _minSharesForNewProvider, - _nThawRequests - ); + if (legacy) { + staking.withdrawDelegated(_serviceProvider, _newServiceProvider); + } else if (reDelegate) { + staking.redelegate( + _serviceProvider, + _verifier, + _newServiceProvider, + _newVerifier, + _minSharesForNewProvider, + _nThawRequests + ); + } else { + staking.withdrawDelegated(_serviceProvider, _verifier, _nThawRequests); + } // after AfterValues_WithdrawDelegated memory afterValues; afterValues.pool = _getStorage_DelegationPoolInternal(_serviceProvider, _verifier, legacy); - afterValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _verifier, legacy); - afterValues.newDelegation = _getStorage_Delegation(_newServiceProvider, _verifier, msgSender, legacy); + afterValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _newVerifier, legacy); + afterValues.newDelegation = _getStorage_Delegation(_newServiceProvider, _newVerifier, msgSender, legacy); afterValues.thawRequestList = staking.getThawRequestList(_serviceProvider, _verifier, msgSender); afterValues.senderBalance = token.balanceOf(msgSender); afterValues.stakingBalance = token.balanceOf(address(staking)); diff --git a/packages/horizon/test/staking/delegation/redelegate.t.sol b/packages/horizon/test/staking/delegation/redelegate.t.sol new file mode 100644 index 000000000..605e6601f --- /dev/null +++ b/packages/horizon/test/staking/delegation/redelegate.t.sol @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { + + /* + * MODIFIERS + */ + + modifier useUndelegate(uint256 shares) { + resetPrank(users.delegator); + DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); + shares = bound(shares, 1, delegation.shares); + + _undelegate(users.indexer, subgraphDataServiceAddress, shares); + _; + } + + /* + * HELPERS + */ + + function _setupNewIndexer(uint256 tokens) private returns(address) { + (, address msgSender, ) = vm.readCallers(); + + address newIndexer = createUser("newIndexer"); + vm.startPrank(newIndexer); + _createProvision(newIndexer, subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); + + vm.startPrank(msgSender); + return newIndexer; + } + + function _setupNewIndexerAndVerifier(uint256 tokens) private returns(address, address) { + (, address msgSender,) = vm.readCallers(); + + address newIndexer = createUser("newIndexer"); + address newVerifier = makeAddr("newVerifier"); + vm.startPrank(newIndexer); + _createProvision(newIndexer, newVerifier, tokens, 0, MAX_THAWING_PERIOD); + + vm.startPrank(msgSender); + return (newIndexer, newVerifier); + } + + /* + * TESTS + */ + + function testRedelegate_MoveToNewServiceProvider( + uint256 delegationAmount, + uint256 withdrawShares + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + useUndelegate(withdrawShares) + { + skip(MAX_THAWING_PERIOD + 1); + + // Setup new service provider + address newIndexer = _setupNewIndexer(10_000_000 ether); + _redelegate(users.indexer, subgraphDataServiceAddress, newIndexer, subgraphDataServiceAddress, 0, 0); + } + + function testRedelegate_MoveToNewServiceProviderAndNewVerifier( + uint256 delegationAmount, + uint256 withdrawShares + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + useUndelegate(withdrawShares) + { + skip(MAX_THAWING_PERIOD + 1); + + // Setup new service provider + (address newIndexer, address newVerifier) = _setupNewIndexerAndVerifier(10_000_000 ether); + _redelegate(users.indexer, subgraphDataServiceAddress, newIndexer, newVerifier, 0, 0); + } + + function testRedelegate_RevertWhen_VerifierZeroAddress( + uint256 delegationAmount + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + useUndelegate(delegationAmount) + { + skip(MAX_THAWING_PERIOD + 1); + + // Setup new service provider + address newIndexer = _setupNewIndexer(10_000_000 ether); + vm.expectRevert(abi.encodeWithSelector(IHorizonStakingMain.HorizonStakingInvalidVerifierZeroAddress.selector)); + staking.redelegate(users.indexer, subgraphDataServiceAddress, newIndexer, address(0), 0, 0); + } + + function testRedelegate_RevertWhen_ServiceProviderZeroAddress( + uint256 delegationAmount + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + useUndelegate(delegationAmount) + { + skip(MAX_THAWING_PERIOD + 1); + + // Setup new verifier + address newVerifier = makeAddr("newVerifier"); + vm.expectRevert(abi.encodeWithSelector(IHorizonStakingMain.HorizonStakingInvalidServiceProviderZeroAddress.selector)); + staking.redelegate(users.indexer, subgraphDataServiceAddress, address(0), newVerifier, 0, 0); + } + + function testRedelegate_MoveZeroTokensToNewServiceProviderAndVerifier( + uint256 delegationAmount, + uint256 withdrawShares + ) + public + useIndexer + useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) + useDelegation(delegationAmount) + useUndelegate(withdrawShares) + { + // Setup new service provider + (address newIndexer, address newVerifier) = _setupNewIndexerAndVerifier(10_000_000 ether); + + uint256 previousBalance = token.balanceOf(users.delegator); + _redelegate(users.indexer, subgraphDataServiceAddress, newIndexer, newVerifier, 0, 0); + + uint256 newBalance = token.balanceOf(users.delegator); + assertEq(newBalance, previousBalance); + + uint256 delegatedTokens = staking.getDelegatedTokensAvailable(newIndexer, newVerifier); + assertEq(delegatedTokens, 0); + } +} \ No newline at end of file diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index c66126e1c..2b6c7a76d 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -14,8 +14,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { */ modifier useUndelegate(uint256 shares) { - vm.stopPrank(); - vm.startPrank(users.delegator); + resetPrank(users.delegator); DelegationInternal memory delegation = _getStorage_Delegation( users.indexer, subgraphDataServiceAddress, @@ -28,20 +27,6 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { _; } - /* - * HELPERS - */ - function _setupNewIndexer(uint256 tokens) private returns (address) { - (, address msgSender, ) = vm.readCallers(); - - address newIndexer = createUser("newIndexer"); - vm.startPrank(newIndexer); - _createProvision(newIndexer, subgraphDataServiceAddress, tokens, 0, MAX_THAWING_PERIOD); - - vm.startPrank(msgSender); - return newIndexer; - } - /* * TESTS */ @@ -65,7 +50,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { skip(thawRequest.thawingUntil + 1); - _withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, 0); } function testWithdrawDelegation_RevertWhen_NotThawing( @@ -73,23 +58,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { ) public useIndexer useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) useDelegation(delegationAmount) { bytes memory expectedError = abi.encodeWithSignature("HorizonStakingNothingThawing()"); vm.expectRevert(expectedError); - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); - } - - function testWithdrawDelegation_MoveToNewServiceProvider( - uint256 delegationAmount - ) - public - useIndexer - useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) - useDelegation(delegationAmount) - useUndelegate(delegationAmount) - { - skip(MAX_THAWING_PERIOD + 1); - - // Setup new service provider - address newIndexer = _setupNewIndexer(10_000_000 ether); - _withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0, 0); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, 0); } function testWithdrawDelegation_ZeroTokens( @@ -102,33 +71,11 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useUndelegate(delegationAmount) { uint256 previousBalance = token.balanceOf(users.delegator); - _withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); - - // Nothing changed since thawing period haven't finished - uint256 newBalance = token.balanceOf(users.delegator); - assertEq(newBalance, previousBalance); - } - - function testWithdrawDelegation_MoveZeroTokensToNewServiceProvider( - uint256 delegationAmount - ) - public - useIndexer - useProvision(10_000_000 ether, 0, MAX_THAWING_PERIOD) - useDelegation(delegationAmount) - useUndelegate(delegationAmount) - { - // Setup new service provider - address newIndexer = _setupNewIndexer(10_000_000 ether); - - uint256 previousBalance = token.balanceOf(users.delegator); - _withdrawDelegated(users.indexer, subgraphDataServiceAddress, newIndexer, 0, 0); - + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, 0); + + // Nothing changed since thawing period hasn't finished uint256 newBalance = token.balanceOf(users.delegator); assertEq(newBalance, previousBalance); - - uint256 delegatedTokens = staking.getDelegatedTokensAvailable(newIndexer, subgraphDataServiceAddress); - assertEq(delegatedTokens, 0); } function testWithdrawDelegation_LegacySubgraphService(uint256 delegationAmount) public useIndexer { @@ -182,14 +129,12 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { // fast forward in time and attempt to withdraw skip(MAX_THAWING_PERIOD + 1); resetPrank(users.delegator); - vm.expectRevert( - abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, - users.indexer, - subgraphDataServiceAddress - ) - ); - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); + vm.expectRevert(abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPoolState.selector, + users.indexer, + subgraphDataServiceAddress + )); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, 0); } function testWithdrawDelegation_AfterRecoveringPool( @@ -222,7 +167,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { // fast forward in time and withdraw - this withdraw will net 0 tokens skip(MAX_THAWING_PERIOD + 1); resetPrank(users.delegator); - _withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 0); + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, 0); } function testWithdrawDelegation_WithBeneficiary( @@ -250,7 +195,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { // Beneficiary withdraws delegated tokens resetPrank(beneficiary); - _withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 1); + _withdrawDelegated(users.indexer, subgraphDataServiceAddress, 1); } function testWithdrawDelegation_RevertWhen_PreviousOwnerAttemptsToWithdraw( @@ -277,6 +222,6 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { // Delegator attempts to withdraw delegated tokens, should revert since beneficiary is the thaw request owner bytes memory expectedError = abi.encodeWithSelector(IHorizonStakingMain.HorizonStakingNothingThawing.selector); vm.expectRevert(expectedError); - staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, address(0), 0, 1); + staking.withdrawDelegated(users.indexer, subgraphDataServiceAddress, 1); } } From 36b81e3558d5de541eb6cad3ecad95ec4214865e Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 10 Oct 2024 13:38:42 -0300 Subject: [PATCH 273/343] fix: delegation withdraw test and typo in subgraph test name --- packages/horizon/test/staking/delegation/withdraw.t.sol | 1 + .../test/subgraphService/collect/query/query.t.sol | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 2b6c7a76d..c9aa04dbc 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -208,6 +208,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useDelegation(delegationAmount) { vm.assume(beneficiary != address(0)); + vm.assume(beneficiary != users.delegator); // Delegator undelegates to beneficiary resetPrank(users.delegator); diff --git a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol index f72885146..99bfab1ca 100644 --- a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol @@ -71,7 +71,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { * TESTS */ - function testCollect_QueryFees_ONLY_THIS( + function testCollect_QueryFees( uint256 tokensAllocated, uint256 tokensPayment ) public useIndexer useAllocation(tokensAllocated) { From 516ac3c8b34fa006c7c1f8059cedf3b23eaf3816 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 10 Oct 2024 13:39:58 -0300 Subject: [PATCH 274/343] chore: added unit tests for PPMMath --- packages/horizon/test/libraries/PPMMath.t.sol | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 packages/horizon/test/libraries/PPMMath.t.sol diff --git a/packages/horizon/test/libraries/PPMMath.t.sol b/packages/horizon/test/libraries/PPMMath.t.sol new file mode 100644 index 000000000..8aff288b5 --- /dev/null +++ b/packages/horizon/test/libraries/PPMMath.t.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.27; + +import "forge-std/console.sol"; +import { Test } from "forge-std/Test.sol"; +import { PPMMath } from "../../contracts/libraries/PPMMath.sol"; + +contract PPMMathTest is Test { + uint32 private constant MAX_PPM = 1000000; + + function test_mulPPM(uint256 a, uint256 b) public pure { + a = bound(a, 0, MAX_PPM); + b = bound(b, 0, type(uint256).max / MAX_PPM); + + uint256 result = PPMMath.mulPPM(a, b); + assertEq(result, (a * b) / MAX_PPM); + } + + function test_mulPPMRoundUp(uint256 a, uint256 b) public pure { + a = bound(a, 0, type(uint256).max / MAX_PPM); + b = bound(b, 0, MAX_PPM); + + uint256 result = PPMMath.mulPPMRoundUp(a, b); + assertEq(result, a - PPMMath.mulPPM(a, MAX_PPM - b)); + } + + function test_isValidPPM(uint256 value) public pure { + bool result = PPMMath.isValidPPM(value); + assert(result == (value <= MAX_PPM)); + } + + function test_mullPPM_RevertWhen_InvalidPPM(uint256 a, uint256 b) public { + a = bound(a, MAX_PPM + 1, type(uint256).max); + b = bound(b, MAX_PPM + 1, type(uint256).max); + bytes memory expectedError = abi.encodeWithSelector(PPMMath.PPMMathInvalidMulPPM.selector, a, b); + vm.expectRevert(expectedError); + PPMMath.mulPPM(a, b); + } + + function test_mullPPMRoundUp_RevertWhen_InvalidPPM(uint256 a, uint256 b) public { + b = bound(b, MAX_PPM + 1, type(uint256).max); + bytes memory expectedError = abi.encodeWithSelector(PPMMath.PPMMathInvalidPPM.selector, b); + vm.expectRevert(expectedError); + PPMMath.mulPPMRoundUp(a, b); + } +} From 971a5c5afd1a6caa88568932c68799cda3c87cab Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 10 Oct 2024 14:02:46 -0300 Subject: [PATCH 275/343] chore: added unit tests for TAPCollector --- packages/horizon/test/GraphBase.t.sol | 5 + .../horizon/test/escrow/GraphEscrow.t.sol | 12 +- packages/horizon/test/escrow/collect.t.sol | 6 +- packages/horizon/test/escrow/collector.t.sol | 17 +- .../horizon/test/payments/TAPCollector.t.sol | 167 ++++++++++++++++++ .../PaymentsEscrowShared.t.sol | 43 +++++ 6 files changed, 223 insertions(+), 27 deletions(-) create mode 100644 packages/horizon/test/payments/TAPCollector.t.sol create mode 100644 packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index f02733525..16c89e5c5 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -11,6 +11,7 @@ import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/trans import { PaymentsEscrow } from "contracts/payments/PaymentsEscrow.sol"; import { GraphPayments } from "contracts/payments/GraphPayments.sol"; +import { TAPCollector } from "contracts/payments/collectors/TAPCollector.sol"; import { IHorizonStaking } from "contracts/interfaces/IHorizonStaking.sol"; import { HorizonStaking } from "contracts/staking/HorizonStaking.sol"; import { HorizonStakingExtension } from "contracts/staking/HorizonStakingExtension.sol"; @@ -39,6 +40,7 @@ abstract contract GraphBaseTest is IHorizonStakingTypes, Utils, Constants { EpochManagerMock public epochManager; RewardsManagerMock public rewardsManager; CurationMock public curation; + TAPCollector tapCollector; HorizonStaking private stakingBase; HorizonStakingExtension private stakingExtension; @@ -84,6 +86,7 @@ abstract contract GraphBaseTest is IHorizonStakingTypes, Utils, Constants { vm.label({ account: address(escrow), newLabel: "PaymentsEscrow" }); vm.label({ account: address(staking), newLabel: "HorizonStaking" }); vm.label({ account: address(stakingExtension), newLabel: "HorizonStakingExtension" }); + vm.label({ account: address(tapCollector), newLabel: "TAPCollector" }); // Ensure caller is back to the original msg.sender vm.stopPrank(); @@ -182,6 +185,8 @@ abstract contract GraphBaseTest is IHorizonStakingTypes, Utils, Constants { subgraphDataServiceLegacyAddress ); + tapCollector = new TAPCollector("TAPCollector", "1", address(controller)); + resetPrank(users.governor); proxyAdmin.upgrade(stakingProxy, address(stakingBase)); proxyAdmin.acceptProxy(stakingBase, stakingProxy); diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index 75d0b55ae..a472162e9 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -4,8 +4,9 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; +import { PaymentsEscrowSharedTest } from "../shared/payments-escrow/PaymentsEscrowShared.t.sol"; -contract GraphEscrowTest is HorizonStakingSharedTest { +contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { /* * MODIFIERS @@ -25,7 +26,7 @@ contract GraphEscrowTest is HorizonStakingSharedTest { modifier useDeposit(uint256 tokens) { vm.assume(tokens > 0); vm.assume(tokens <= MAX_STAKING_TOKENS); - _depositTokens(tokens); + _depositTokens(users.verifier, users.indexer, tokens); _; } @@ -38,7 +39,7 @@ contract GraphEscrowTest is HorizonStakingSharedTest { modifier depositAndThawTokens(uint256 amount, uint256 thawAmount) { vm.assume(thawAmount > 0); vm.assume(amount > thawAmount); - _depositTokens(amount); + _depositTokens(users.verifier, users.indexer, amount); escrow.thaw(users.verifier, users.indexer, thawAmount); _; } @@ -47,11 +48,6 @@ contract GraphEscrowTest is HorizonStakingSharedTest { * HELPERS */ - function _depositTokens(uint256 tokens) internal { - token.approve(address(escrow), tokens); - escrow.deposit(users.verifier, users.indexer, tokens); - } - function _approveEscrow(uint256 tokens) internal { token.approve(address(escrow), tokens); } diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index db0c2c099..72b795ee9 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -107,7 +107,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { resetPrank(users.gateway); escrow.approveCollector(users.verifier, tokens); - _depositTokens(tokens); + _depositTokens(users.verifier, users.indexer, tokens); resetPrank(users.verifier); _collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, tokens, subgraphDataServiceAddress, tokensDataService); @@ -163,7 +163,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { resetPrank(users.gateway); escrow.approveCollector(users.verifier, amount); - _depositTokens(amount); + _depositTokens(users.verifier, users.indexer, amount); resetPrank(users.verifier); vm.expectRevert(abi.encodeWithSelector( @@ -182,7 +182,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { resetPrank(users.gateway); escrow.approveCollector(users.verifier, amount); - _depositTokens(amount); + _depositTokens(users.verifier, users.indexer, amount); resetPrank(users.verifier); vm.expectRevert(abi.encodeWithSelector( diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol index ed5c05384..d6cb3bc0f 100644 --- a/packages/horizon/test/escrow/collector.t.sol +++ b/packages/horizon/test/escrow/collector.t.sol @@ -13,21 +13,6 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { * HELPERS */ - function _approveCollector(uint256 tokens) internal { - (uint256 beforeAllowance,) = escrow.authorizedCollectors(users.gateway, users.verifier); - vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.AuthorizedCollector( - users.gateway, // payer - users.verifier, // collector - tokens, // addedAllowance - beforeAllowance + tokens // newTotalAllowance after the added allowance - ); - escrow.approveCollector(users.verifier, tokens); - (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(allowance - beforeAllowance, tokens); - assertEq(thawEndTimestamp, 0); - } - function _thawCollector() internal { (uint256 beforeAllowance,) = escrow.authorizedCollectors(users.gateway, users.verifier); vm.expectEmit(address(escrow)); @@ -74,7 +59,7 @@ contract GraphEscrowCollectorTest is GraphEscrowTest { uint256 approveTokens = tokens / approveSteps; for (uint i = 0; i < approveSteps; i++) { - _approveCollector(approveTokens); + _approveCollector(users.verifier, approveTokens); } } diff --git a/packages/horizon/test/payments/TAPCollector.t.sol b/packages/horizon/test/payments/TAPCollector.t.sol new file mode 100644 index 000000000..e1c177282 --- /dev/null +++ b/packages/horizon/test/payments/TAPCollector.t.sol @@ -0,0 +1,167 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; +import { ITAPCollector } from "../../contracts/interfaces/ITAPCollector.sol"; +import { IPaymentsCollector } from "../../contracts/interfaces/IPaymentsCollector.sol"; +import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; +import { TAPCollector } from "../../contracts/payments/collectors/TAPCollector.sol"; +import { PPMMath } from "../../contracts/libraries/PPMMath.sol"; + +import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; +import { PaymentsEscrowSharedTest } from "../shared/payments-escrow/PaymentsEscrowShared.t.sol"; + +contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { + using PPMMath for uint256; + + address payer; + uint256 payerPrivateKey; + + /* + * HELPERS + */ + + function _getQueryFeeEncodedData(address indexer, address collector, uint128 tokens) private view returns (bytes memory) { + ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(indexer, collector, tokens); + bytes32 messageHash = tapCollector.encodeRAV(rav); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(payerPrivateKey, messageHash); + bytes memory signature = abi.encodePacked(r, s, v); + ITAPCollector.SignedRAV memory signedRAV = ITAPCollector.SignedRAV(rav, signature); + return abi.encode(signedRAV); + } + + function _getRAV( + address indexer, + address collector, + uint128 tokens + ) private pure returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { + return + ITAPCollector.ReceiptAggregateVoucher({ + dataService: collector, + serviceProvider: indexer, + timestampNs: 0, + valueAggregate: tokens, + metadata: abi.encode("") + }); + } + + function _collect(IGraphPayments.PaymentTypes _paymentType, bytes memory _data) private { + (ITAPCollector.SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(_data, (ITAPCollector.SignedRAV, uint256)); + bytes32 messageHash = tapCollector.encodeRAV(signedRAV.rav); + address _payer = ECDSA.recover(messageHash, signedRAV.signature); + uint256 tokensAlreadyCollected = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); + uint256 tokensToCollect = signedRAV.rav.valueAggregate - tokensAlreadyCollected; + uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); + + vm.expectEmit(address(tapCollector)); + emit IPaymentsCollector.PaymentCollected( + _paymentType, + _payer, + signedRAV.rav.serviceProvider, + tokensToCollect, + signedRAV.rav.dataService, + tokensDataService + ); + emit ITAPCollector.RAVCollected( + _payer, + signedRAV.rav.dataService, + signedRAV.rav.serviceProvider, + signedRAV.rav.timestampNs, + signedRAV.rav.valueAggregate, + signedRAV.rav.metadata, + signedRAV.signature + ); + + uint256 tokensCollected = tapCollector.collect(_paymentType, _data); + assertEq(tokensCollected, tokensToCollect); + + uint256 tokensCollectedAfter = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); + assertEq(tokensCollectedAfter, signedRAV.rav.valueAggregate); + } + + /* + * SET UP + */ + + function setUp() public virtual override { + super.setUp(); + (payer, payerPrivateKey) = makeAddrAndKey("payer"); + vm.label({ account: payer, newLabel: "payer" }); + deal({ token: address(token), to: payer, give: type(uint256).max }); + } + + /* + * TESTS + */ + + function testCollect(uint256 tokens) public { + tokens = bound(tokens, 1, type(uint128).max); + + resetPrank(payer); + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + bytes memory data = _getQueryFeeEncodedData(users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + _collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testCollect_Multiple(uint256 tokens, uint8 steps) public { + steps = uint8(bound(steps, 1, 100)); + tokens = bound(tokens, steps, type(uint128).max); + + resetPrank(payer); + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + resetPrank(users.verifier); + uint256 payed = 0; + uint256 tokensPerStep = tokens / steps; + for (uint256 i = 0; i < steps; i++) { + bytes memory data = _getQueryFeeEncodedData(users.indexer, users.verifier, uint128(payed + tokensPerStep)); + _collect(IGraphPayments.PaymentTypes.QueryFee, data); + payed += tokensPerStep; + } + } + + function testCollect_RevertWhen_CallerNotDataService(uint256 tokens) public { + tokens = bound(tokens, 1, type(uint128).max); + + resetPrank(payer); + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + bytes memory data = _getQueryFeeEncodedData(users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.indexer); + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorCallerNotDataService.selector, + users.indexer, + users.verifier + ); + vm.expectRevert(expectedError); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testCollect_RevertWhen_InconsistentRAVTokens(uint256 tokens) public { + tokens = bound(tokens, 1, type(uint128).max); + + resetPrank(payer); + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + bytes memory data = _getQueryFeeEncodedData(users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + _collect(IGraphPayments.PaymentTypes.QueryFee, data); + + // Attempt to collect again + vm.expectRevert(abi.encodeWithSelector( + ITAPCollector.TAPCollectorInconsistentRAVTokens.selector, + tokens, + tokens + )); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } +} diff --git a/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol b/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol new file mode 100644 index 000000000..b7ee76839 --- /dev/null +++ b/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { IPaymentsEscrow } from "../../../contracts/interfaces/IPaymentsEscrow.sol"; +import { GraphBaseTest } from "../../GraphBase.t.sol"; + +abstract contract PaymentsEscrowSharedTest is GraphBaseTest { + + /* + * HELPERS + */ + + function _approveCollector(address _verifier, uint256 _tokens) internal { + (, address msgSender, ) = vm.readCallers(); + (uint256 beforeAllowance,) = escrow.authorizedCollectors(msgSender, _verifier); + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.AuthorizedCollector( + msgSender, // payer + _verifier, // collector + _tokens, // addedAllowance + beforeAllowance + _tokens // newTotalAllowance after the added allowance + ); + escrow.approveCollector(_verifier, _tokens); + (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(msgSender, _verifier); + assertEq(allowance - beforeAllowance, _tokens); + assertEq(thawEndTimestamp, 0); + } + + function _depositTokens(address _collector, address _receiver, uint256 _tokens) internal { + (, address msgSender, ) = vm.readCallers(); + (uint256 escrowBalanceBefore,,) = escrow.escrowAccounts(msgSender, _collector, _receiver); + token.approve(address(escrow), _tokens); + + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.Deposit(msgSender, _collector, _receiver, _tokens); + escrow.deposit(_collector, _receiver, _tokens); + + (uint256 escrowBalanceAfter,,) = escrow.escrowAccounts(msgSender, _collector, _receiver); + assertEq(escrowBalanceAfter - _tokens, escrowBalanceBefore); + } +} From 504fff197f07b27e82bb0dd2a1f63061f42eb490 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:28:06 +1100 Subject: [PATCH 276/343] chore(Horizon): add signers to TAPCollector (#1060) * chore(Horizon): add signers to TAPCollector * fix: collect multiple queries test * fix: rename events and change parameter order to make it consistent * fix: lint issues * chore: add tap collector signer unit tests --- .../interfaces/IPaymentsCollector.sol | 3 + .../contracts/interfaces/ITAPCollector.sol | 131 +++++++++++++ .../payments/collectors/TAPCollector.sol | 168 +++++++++++++--- packages/horizon/test/GraphBase.t.sol | 2 +- .../horizon/test/escrow/GraphEscrow.t.sol | 6 - .../horizon/test/payments/TAPCollector.t.sol | 167 ---------------- .../payments/tap-collector/TAPCollector.t.sol | 148 ++++++++++++++ .../tap-collector/collect/collect.t.sol | 180 ++++++++++++++++++ .../signer/authorizeSigner.t.sol | 66 +++++++ .../signer/cancelThawSigner.t.sol | 39 ++++ .../tap-collector/signer/revokeSigner.t.sol | 54 ++++++ .../tap-collector/signer/thawSigner.t.sol | 29 +++ .../PaymentsEscrowShared.t.sol | 10 + packages/horizon/test/utils/Constants.sol | 2 + .../test/SubgraphBaseTest.t.sol | 2 +- .../subgraphService/SubgraphService.t.sol | 2 +- .../subgraphService/collect/query/query.t.sol | 31 ++- .../subgraph-service/test/utils/Constants.sol | 2 + 18 files changed, 827 insertions(+), 215 deletions(-) delete mode 100644 packages/horizon/test/payments/TAPCollector.t.sol create mode 100644 packages/horizon/test/payments/tap-collector/TAPCollector.t.sol create mode 100644 packages/horizon/test/payments/tap-collector/collect/collect.t.sol create mode 100644 packages/horizon/test/payments/tap-collector/signer/authorizeSigner.t.sol create mode 100644 packages/horizon/test/payments/tap-collector/signer/cancelThawSigner.t.sol create mode 100644 packages/horizon/test/payments/tap-collector/signer/revokeSigner.t.sol create mode 100644 packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol diff --git a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol index bcd67df0a..85d09d59f 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol @@ -36,6 +36,9 @@ interface IPaymentsCollector { * @notice Initiate a payment collection through the payments protocol * @dev This function should require the caller to present some form of evidence of the payer's debt to * the receiver. The collector should validate this evidence and, if valid, collect the payment. + * Requirements: + * - The caller must be the data service the RAV was issued to + * - The signer of the RAV must be authorized to sign for the payer * * Emits a {PaymentCollected} event * diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index 72a8dc0bc..dd557de53 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -11,6 +11,15 @@ import { IPaymentsCollector } from "./IPaymentsCollector.sol"; * payments using a TAP RAV (Receipt Aggregate Voucher). */ interface ITAPCollector is IPaymentsCollector { + /// @notice Details for a payer-signer pair + /// @dev Signers can be removed only after a thawing period + struct PayerAuthorization { + // Payer the signer is authorized to sign for + address payer; + // Timestamp at which thawing period ends (zero if not thawing) + uint256 thawEndTimestamp; + } + /// @notice The Receipt Aggregate Voucher (RAV) struct struct ReceiptAggregateVoucher { // The address of the data service the RAV was issued to @@ -34,6 +43,36 @@ interface ITAPCollector is IPaymentsCollector { bytes signature; } + /** + * @notice Emitted when a signer is authorized to sign RAVs for a payer + * @param payer The address of the payer authorizing the signer + * @param authorizedSigner The address of the authorized signer + */ + event SignerAuthorized(address indexed payer, address indexed authorizedSigner); + + /** + * @notice Emitted when a signer is thawed to be removed from the authorized signers list + * @param payer The address of the payer thawing the signer + * @param authorizedSigner The address of the signer to thaw + * @param thawEndTimestamp The timestamp at which the thawing period ends + */ + event SignerThawing(address indexed payer, address indexed authorizedSigner, uint256 thawEndTimestamp); + + /** + * @dev Emitted when the thawing of a signer is cancelled + * @param payer The address of the payer cancelling the thawing + * @param authorizedSigner The address of the authorized signer + * @param thawEndTimestamp The timestamp at which the thawing period ends + */ + event SignerThawCanceled(address indexed payer, address indexed authorizedSigner, uint256 thawEndTimestamp); + + /** + * @dev Emitted when a authorized signer has been revoked + * @param payer The address of the payer revoking the signer + * @param authorizedSigner The address of the authorized signer + */ + event SignerRevoked(address indexed payer, address indexed authorizedSigner); + /** * @notice Emitted when a RAV is collected * @param payer The address of the payer @@ -54,6 +93,50 @@ interface ITAPCollector is IPaymentsCollector { bytes signature ); + /** + * Thrown when the signer is already authorized + * @param authorizingPayer The address of the payer authorizing the signer + * @param signer The address of the signer + */ + error TAPCollectorSignerAlreadyAuthorized(address authorizingPayer, address signer); + + /** + * Thrown when the signer proof deadline is invalid + * @param proofDeadline The deadline for the proof provided by the signer + * @param currentTimestamp The current timestamp + */ + error TAPCollectorInvalidSignerProofDeadline(uint256 proofDeadline, uint256 currentTimestamp); + + /** + * Thrown when the signer proof is invalid + */ + error TAPCollectorInvalidSignerProof(); + + /** + * Thrown when the signer is not authorized by the payer + * @param payer The address of the payer + * @param signer The address of the signer + */ + error TAPCollectorSignerNotAuthorizedByPayer(address payer, address signer); + + /** + * Thrown when the signer is not thawing + * @param signer The address of the signer + */ + error TAPCollectorSignerNotThawing(address signer); + + /** + * Thrown when the signer is still thawing + * @param currentTimestamp The current timestamp + * @param thawEndTimestamp The timestamp at which the thawing period ends + */ + error TAPCollectorSignerStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp); + + /** + * Thrown when the RAV signer is invalid + */ + error TAPCollectorInvalidRAVSigner(); + /** * Thrown when the caller is not the data service the RAV was issued to * @param caller The address of the caller @@ -69,6 +152,54 @@ interface ITAPCollector is IPaymentsCollector { */ error TAPCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected); + /** + * @notice Authorize a signer to sign on behalf of the payer + * @dev Requirements: + * - `signer` must not be already authorized + * - `proofDeadline` must be greater than the current timestamp + * - `proof` must be a valid signature from the signer being authorized + * + * Emits an {SignerAuthorized} event + * @param signer The addres of the authorized signer + * @param proofDeadline The deadline for the proof provided by the signer + * @param proof The proof provided by the signer to be authorized by the payer, consists of (chainID, proof deadline, sender address) + */ + function authorizeSigner(address signer, uint256 proofDeadline, bytes calldata proof) external; + + /** + * @notice Starts thawing a signer to be removed from the authorized signers list + * @dev Thawing a signer alerts receivers that signatures from that signer will soon be deemed invalid. + * Receivers without existing signed receipts or RAVs from this signer should treat them as unauthorized. + * Those with existing signed documents from this signer should work towards settling their engagements. + * Once a signer is thawed, they should be viewed as revoked regardless of their revocation status. + * Requirements: + * - `signer` must be authorized by the payer calling this function + * + * Emits a {SignerThawing} event + * @param signer The address of the signer to thaw + */ + function thawSigner(address signer) external; + + /** + * @notice Stops thawing a signer. + * @dev Requirements: + * - `signer` must be thawing and authorized by the payer calling this function + * + * Emits a {SignerThawCanceled} event + * @param signer The address of the signer to cancel thawing + */ + function cancelThawSigner(address signer) external; + + /** + * @notice Revokes a signer from the authorized signers list if thawed. + * @dev Requirements: + * - `signer` must be thawed and authorized by the payer calling this function + * + * Emits a {SignerRevoked} event + * @param signer The address of the signer + */ + function revokeAuthorizedSigner(address signer) external; + /** * @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV). * @param signedRAV The SignedRAV containing the RAV and its signature. diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 91293af09..57588a042 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -9,6 +9,7 @@ import { PPMMath } from "../../libraries/PPMMath.sol"; import { GraphDirectory } from "../../utilities/GraphDirectory.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; /** * @title TAPCollector contract @@ -29,21 +30,89 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { "ReceiptAggregateVoucher(address dataService,address serviceProvider,uint64 timestampNs,uint128 valueAggregate,bytes metadata)" ); + /// @notice Authorization details for payer-signer pairs + mapping(address signer => PayerAuthorization authorizedSigner) public authorizedSigners; + /// @notice Tracks the amount of tokens already collected by a data service from a payer to a receiver mapping(address dataService => mapping(address receiver => mapping(address payer => uint256 tokens))) public tokensCollected; + /// @notice The duration (in seconds) in which a signer is thawing before they can be revoked + uint256 public immutable REVOKE_SIGNER_THAWING_PERIOD; + /** * @notice Constructs a new instance of the TAPVerifier contract. * @param eip712Name The name of the EIP712 domain. * @param eip712Version The version of the EIP712 domain. * @param controller The address of the Graph controller. + * @param revokeSignerThawingPeriod The duration (in seconds) in which a signer is thawing before they can be revoked. */ constructor( string memory eip712Name, string memory eip712Version, - address controller - ) EIP712(eip712Name, eip712Version) GraphDirectory(controller) {} + address controller, + uint256 revokeSignerThawingPeriod + ) EIP712(eip712Name, eip712Version) GraphDirectory(controller) { + REVOKE_SIGNER_THAWING_PERIOD = revokeSignerThawingPeriod; + } + + /** + * See {ITAPCollector.authorizeSigner}. + */ + function authorizeSigner(address signer, uint256 proofDeadline, bytes calldata proof) external override { + require( + authorizedSigners[signer].payer == address(0), + TAPCollectorSignerAlreadyAuthorized(authorizedSigners[signer].payer, signer) + ); + + _verifyAuthorizedSignerProof(proof, proofDeadline, signer); + + authorizedSigners[signer].payer = msg.sender; + authorizedSigners[signer].thawEndTimestamp = 0; + emit SignerAuthorized(msg.sender, signer); + } + + /** + * See {ITAPCollector.thawSigner}. + */ + function thawSigner(address signer) external override { + PayerAuthorization storage authorization = authorizedSigners[signer]; + + require(authorization.payer == msg.sender, TAPCollectorSignerNotAuthorizedByPayer(msg.sender, signer)); + + authorization.thawEndTimestamp = block.timestamp + REVOKE_SIGNER_THAWING_PERIOD; + emit SignerThawing(msg.sender, signer, authorization.thawEndTimestamp); + } + + /** + * See {ITAPCollector.cancelThawSigner}. + */ + function cancelThawSigner(address signer) external override { + PayerAuthorization storage authorization = authorizedSigners[signer]; + + require(authorization.payer == msg.sender, TAPCollectorSignerNotAuthorizedByPayer(msg.sender, signer)); + require(authorization.thawEndTimestamp > 0, TAPCollectorSignerNotThawing(signer)); + + authorization.thawEndTimestamp = 0; + emit SignerThawCanceled(msg.sender, signer, 0); + } + + /** + * See {ITAPCollector.revokeAuthorizedSigner}. + */ + function revokeAuthorizedSigner(address signer) external override { + PayerAuthorization storage authorization = authorizedSigners[signer]; + + require(authorization.payer == msg.sender, TAPCollectorSignerNotAuthorizedByPayer(msg.sender, signer)); + require(authorization.thawEndTimestamp > 0, TAPCollectorSignerNotThawing(signer)); + require( + authorization.thawEndTimestamp <= block.timestamp, + TAPCollectorSignerStillThawing(block.timestamp, authorization.thawEndTimestamp) + ); + + delete authorizedSigners[signer]; + emit SignerRevoked(msg.sender, signer); + } /** * @notice Initiate a payment collection through the payments protocol @@ -58,59 +127,73 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { TAPCollectorCallerNotDataService(msg.sender, signedRAV.rav.dataService) ); - address dataService = signedRAV.rav.dataService; - address payer = _recoverRAVSigner(signedRAV); - address receiver = signedRAV.rav.serviceProvider; + address signer = _recoverRAVSigner(signedRAV); + require(authorizedSigners[signer].payer != address(0), TAPCollectorInvalidRAVSigner()); + + return _collect(paymentType, authorizedSigners[signer].payer, signedRAV, dataServiceCut); + } + + /** + * @notice See {ITAPCollector.recoverRAVSigner} + */ + function recoverRAVSigner(SignedRAV calldata signedRAV) external view override returns (address) { + return _recoverRAVSigner(signedRAV); + } + + /** + * @notice See {ITAPCollector.encodeRAV} + */ + function encodeRAV(ReceiptAggregateVoucher calldata rav) external view returns (bytes32) { + return _encodeRAV(rav); + } - uint256 tokensRAV = signedRAV.rav.valueAggregate; - uint256 tokensAlreadyCollected = tokensCollected[dataService][receiver][payer]; + /** + * @notice See {ITAPCollector.collect} + */ + function _collect( + IGraphPayments.PaymentTypes _paymentType, + address _payer, + SignedRAV memory _signedRAV, + uint256 _dataServiceCut + ) private returns (uint256) { + address dataService = _signedRAV.rav.dataService; + address receiver = _signedRAV.rav.serviceProvider; + + uint256 tokensRAV = _signedRAV.rav.valueAggregate; + uint256 tokensAlreadyCollected = tokensCollected[dataService][receiver][_payer]; require( tokensRAV > tokensAlreadyCollected, TAPCollectorInconsistentRAVTokens(tokensRAV, tokensAlreadyCollected) ); uint256 tokensToCollect = tokensRAV - tokensAlreadyCollected; - uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); + uint256 tokensDataService = tokensToCollect.mulPPM(_dataServiceCut); if (tokensToCollect > 0) { + tokensCollected[dataService][receiver][_payer] = tokensRAV; _graphPaymentsEscrow().collect( - paymentType, - payer, + _paymentType, + _payer, receiver, tokensToCollect, dataService, tokensDataService ); - tokensCollected[dataService][receiver][payer] = tokensRAV; } - emit PaymentCollected(paymentType, payer, receiver, tokensToCollect, dataService, tokensDataService); + emit PaymentCollected(_paymentType, _payer, receiver, tokensToCollect, dataService, tokensDataService); emit RAVCollected( - payer, + _payer, dataService, receiver, - signedRAV.rav.timestampNs, - signedRAV.rav.valueAggregate, - signedRAV.rav.metadata, - signedRAV.signature + _signedRAV.rav.timestampNs, + _signedRAV.rav.valueAggregate, + _signedRAV.rav.metadata, + _signedRAV.signature ); return tokensToCollect; } - /** - * @notice See {ITAPCollector.recoverRAVSigner} - */ - function recoverRAVSigner(SignedRAV calldata signedRAV) external view override returns (address) { - return _recoverRAVSigner(signedRAV); - } - - /** - * @notice See {ITAPCollector.encodeRAV} - */ - function encodeRAV(ReceiptAggregateVoucher calldata rav) external view returns (bytes32) { - return _encodeRAV(rav); - } - /** * @notice See {ITAPCollector.recoverRAVSigner} */ @@ -137,4 +220,27 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { ) ); } + + /** + * @notice Verify the proof provided by the payer authorizing the signer + * @param _proof The proof provided by the payer authorizing the signer + * @param _proofDeadline The deadline by which the proof must be verified + * @param _signer The signer to be authorized + */ + function _verifyAuthorizedSignerProof(bytes calldata _proof, uint256 _proofDeadline, address _signer) private view { + // Verify that the proofDeadline has not passed + require( + _proofDeadline > block.timestamp, + TAPCollectorInvalidSignerProofDeadline(_proofDeadline, block.timestamp) + ); + + // Generate the hash of the payer's address + bytes32 messageHash = keccak256(abi.encodePacked(block.chainid, _proofDeadline, msg.sender)); + + // Generate the digest to be signed by the signer + bytes32 digest = MessageHashUtils.toEthSignedMessageHash(messageHash); + + // Verify that the recovered signer matches the expected signer + require(ECDSA.recover(digest, _proof) == _signer, TAPCollectorInvalidSignerProof()); + } } diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 16c89e5c5..7aa44d6f5 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -185,7 +185,7 @@ abstract contract GraphBaseTest is IHorizonStakingTypes, Utils, Constants { subgraphDataServiceLegacyAddress ); - tapCollector = new TAPCollector("TAPCollector", "1", address(controller)); + tapCollector = new TAPCollector("TAPCollector", "1", address(controller), revokeSignerThawingPeriod); resetPrank(users.governor); proxyAdmin.upgrade(stakingProxy, address(stakingBase)); diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index a472162e9..d3ffd21da 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -12,12 +12,6 @@ contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { * MODIFIERS */ - modifier useGateway() { - vm.startPrank(users.gateway); - _; - vm.stopPrank(); - } - modifier approveEscrow(uint256 tokens) { _approveEscrow(tokens); _; diff --git a/packages/horizon/test/payments/TAPCollector.t.sol b/packages/horizon/test/payments/TAPCollector.t.sol deleted file mode 100644 index e1c177282..000000000 --- a/packages/horizon/test/payments/TAPCollector.t.sol +++ /dev/null @@ -1,167 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.27; - -import "forge-std/Test.sol"; - -import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; -import { ITAPCollector } from "../../contracts/interfaces/ITAPCollector.sol"; -import { IPaymentsCollector } from "../../contracts/interfaces/IPaymentsCollector.sol"; -import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; -import { TAPCollector } from "../../contracts/payments/collectors/TAPCollector.sol"; -import { PPMMath } from "../../contracts/libraries/PPMMath.sol"; - -import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; -import { PaymentsEscrowSharedTest } from "../shared/payments-escrow/PaymentsEscrowShared.t.sol"; - -contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { - using PPMMath for uint256; - - address payer; - uint256 payerPrivateKey; - - /* - * HELPERS - */ - - function _getQueryFeeEncodedData(address indexer, address collector, uint128 tokens) private view returns (bytes memory) { - ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(indexer, collector, tokens); - bytes32 messageHash = tapCollector.encodeRAV(rav); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(payerPrivateKey, messageHash); - bytes memory signature = abi.encodePacked(r, s, v); - ITAPCollector.SignedRAV memory signedRAV = ITAPCollector.SignedRAV(rav, signature); - return abi.encode(signedRAV); - } - - function _getRAV( - address indexer, - address collector, - uint128 tokens - ) private pure returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { - return - ITAPCollector.ReceiptAggregateVoucher({ - dataService: collector, - serviceProvider: indexer, - timestampNs: 0, - valueAggregate: tokens, - metadata: abi.encode("") - }); - } - - function _collect(IGraphPayments.PaymentTypes _paymentType, bytes memory _data) private { - (ITAPCollector.SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(_data, (ITAPCollector.SignedRAV, uint256)); - bytes32 messageHash = tapCollector.encodeRAV(signedRAV.rav); - address _payer = ECDSA.recover(messageHash, signedRAV.signature); - uint256 tokensAlreadyCollected = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); - uint256 tokensToCollect = signedRAV.rav.valueAggregate - tokensAlreadyCollected; - uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); - - vm.expectEmit(address(tapCollector)); - emit IPaymentsCollector.PaymentCollected( - _paymentType, - _payer, - signedRAV.rav.serviceProvider, - tokensToCollect, - signedRAV.rav.dataService, - tokensDataService - ); - emit ITAPCollector.RAVCollected( - _payer, - signedRAV.rav.dataService, - signedRAV.rav.serviceProvider, - signedRAV.rav.timestampNs, - signedRAV.rav.valueAggregate, - signedRAV.rav.metadata, - signedRAV.signature - ); - - uint256 tokensCollected = tapCollector.collect(_paymentType, _data); - assertEq(tokensCollected, tokensToCollect); - - uint256 tokensCollectedAfter = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); - assertEq(tokensCollectedAfter, signedRAV.rav.valueAggregate); - } - - /* - * SET UP - */ - - function setUp() public virtual override { - super.setUp(); - (payer, payerPrivateKey) = makeAddrAndKey("payer"); - vm.label({ account: payer, newLabel: "payer" }); - deal({ token: address(token), to: payer, give: type(uint256).max }); - } - - /* - * TESTS - */ - - function testCollect(uint256 tokens) public { - tokens = bound(tokens, 1, type(uint128).max); - - resetPrank(payer); - _approveCollector(address(tapCollector), tokens); - _depositTokens(address(tapCollector), users.indexer, tokens); - bytes memory data = _getQueryFeeEncodedData(users.indexer, users.verifier, uint128(tokens)); - - resetPrank(users.verifier); - _collect(IGraphPayments.PaymentTypes.QueryFee, data); - } - - function testCollect_Multiple(uint256 tokens, uint8 steps) public { - steps = uint8(bound(steps, 1, 100)); - tokens = bound(tokens, steps, type(uint128).max); - - resetPrank(payer); - _approveCollector(address(tapCollector), tokens); - _depositTokens(address(tapCollector), users.indexer, tokens); - - resetPrank(users.verifier); - uint256 payed = 0; - uint256 tokensPerStep = tokens / steps; - for (uint256 i = 0; i < steps; i++) { - bytes memory data = _getQueryFeeEncodedData(users.indexer, users.verifier, uint128(payed + tokensPerStep)); - _collect(IGraphPayments.PaymentTypes.QueryFee, data); - payed += tokensPerStep; - } - } - - function testCollect_RevertWhen_CallerNotDataService(uint256 tokens) public { - tokens = bound(tokens, 1, type(uint128).max); - - resetPrank(payer); - _approveCollector(address(tapCollector), tokens); - _depositTokens(address(tapCollector), users.indexer, tokens); - bytes memory data = _getQueryFeeEncodedData(users.indexer, users.verifier, uint128(tokens)); - - resetPrank(users.indexer); - bytes memory expectedError = abi.encodeWithSelector( - ITAPCollector.TAPCollectorCallerNotDataService.selector, - users.indexer, - users.verifier - ); - vm.expectRevert(expectedError); - tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); - } - - function testCollect_RevertWhen_InconsistentRAVTokens(uint256 tokens) public { - tokens = bound(tokens, 1, type(uint128).max); - - resetPrank(payer); - _approveCollector(address(tapCollector), tokens); - _depositTokens(address(tapCollector), users.indexer, tokens); - bytes memory data = _getQueryFeeEncodedData(users.indexer, users.verifier, uint128(tokens)); - - resetPrank(users.verifier); - _collect(IGraphPayments.PaymentTypes.QueryFee, data); - - // Attempt to collect again - vm.expectRevert(abi.encodeWithSelector( - ITAPCollector.TAPCollectorInconsistentRAVTokens.selector, - tokens, - tokens - )); - tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); - } -} diff --git a/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol b/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol new file mode 100644 index 000000000..25b4c901c --- /dev/null +++ b/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; +import { ITAPCollector } from "../../../contracts/interfaces/ITAPCollector.sol"; +import { IPaymentsCollector } from "../../../contracts/interfaces/IPaymentsCollector.sol"; +import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol"; +import { TAPCollector } from "../../../contracts/payments/collectors/TAPCollector.sol"; +import { PPMMath } from "../../../contracts/libraries/PPMMath.sol"; + +import { HorizonStakingSharedTest } from "../../shared/horizon-staking/HorizonStakingShared.t.sol"; +import { PaymentsEscrowSharedTest } from "../../shared/payments-escrow/PaymentsEscrowShared.t.sol"; + +contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { + using PPMMath for uint256; + + address signer; + uint256 signerPrivateKey; + + /* + * MODIFIERS + */ + + modifier useSigner() { + uint256 proofDeadline = block.timestamp + 1; + bytes memory signerProof = _getSignerProof(proofDeadline, signerPrivateKey); + _authorizeSigner(signer, proofDeadline, signerProof); + _; + } + + /* + * SET UP + */ + + function setUp() public virtual override { + super.setUp(); + (signer, signerPrivateKey) = makeAddrAndKey("signer"); + vm.label({ account: signer, newLabel: "signer" }); + } + + /* + * HELPERS + */ + + function _getSignerProof(uint256 _proofDeadline, uint256 _signer) internal returns (bytes memory) { + (, address msgSender, ) = vm.readCallers(); + bytes32 messageHash = keccak256(abi.encodePacked(block.chainid, _proofDeadline, msgSender)); + bytes32 proofToDigest = MessageHashUtils.toEthSignedMessageHash(messageHash); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(_signer, proofToDigest); + return abi.encodePacked(r, s, v); + } + + /* + * ACTIONS + */ + + function _authorizeSigner(address _signer, uint256 _proofDeadline, bytes memory _proof) internal { + (, address msgSender, ) = vm.readCallers(); + + vm.expectEmit(address(tapCollector)); + emit ITAPCollector.SignerAuthorized(msgSender, _signer); + + tapCollector.authorizeSigner(_signer, _proofDeadline, _proof); + + (address _payer, uint256 thawEndTimestamp) = tapCollector.authorizedSigners(_signer); + assertEq(_payer, msgSender); + assertEq(thawEndTimestamp, 0); + } + + function _thawSigner(address _signer) internal { + (, address msgSender, ) = vm.readCallers(); + uint256 expectedThawEndTimestamp = block.timestamp + revokeSignerThawingPeriod; + + vm.expectEmit(address(tapCollector)); + emit ITAPCollector.SignerThawing(msgSender, _signer, expectedThawEndTimestamp); + + tapCollector.thawSigner(_signer); + + (address _payer, uint256 thawEndTimestamp) = tapCollector.authorizedSigners(_signer); + assertEq(_payer, msgSender); + assertEq(thawEndTimestamp, expectedThawEndTimestamp); + } + + function _cancelThawSigner(address _signer) internal { + (, address msgSender, ) = vm.readCallers(); + + vm.expectEmit(address(tapCollector)); + emit ITAPCollector.SignerThawCanceled(msgSender, _signer, 0); + + tapCollector.cancelThawSigner(_signer); + + (address _payer, uint256 thawEndTimestamp) = tapCollector.authorizedSigners(_signer); + assertEq(_payer, msgSender); + assertEq(thawEndTimestamp, 0); + } + + function _revokeAuthorizedSigner(address _signer) internal { + (, address msgSender, ) = vm.readCallers(); + + vm.expectEmit(address(tapCollector)); + emit ITAPCollector.SignerRevoked(msgSender, _signer); + + tapCollector.revokeAuthorizedSigner(_signer); + + (address _payer, uint256 thawEndTimestamp) = tapCollector.authorizedSigners(_signer); + assertEq(_payer, address(0)); + assertEq(thawEndTimestamp, 0); + } + + function _collect(IGraphPayments.PaymentTypes _paymentType, bytes memory _data) internal { + (ITAPCollector.SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(_data, (ITAPCollector.SignedRAV, uint256)); + bytes32 messageHash = tapCollector.encodeRAV(signedRAV.rav); + address _signer = ECDSA.recover(messageHash, signedRAV.signature); + (address _payer, ) = tapCollector.authorizedSigners(_signer); + uint256 tokensAlreadyCollected = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); + uint256 tokensToCollect = signedRAV.rav.valueAggregate - tokensAlreadyCollected; + uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); + + vm.expectEmit(address(tapCollector)); + emit IPaymentsCollector.PaymentCollected( + _paymentType, + _payer, + signedRAV.rav.serviceProvider, + tokensToCollect, + signedRAV.rav.dataService, + tokensDataService + ); + emit ITAPCollector.RAVCollected( + _payer, + signedRAV.rav.dataService, + signedRAV.rav.serviceProvider, + signedRAV.rav.timestampNs, + signedRAV.rav.valueAggregate, + signedRAV.rav.metadata, + signedRAV.signature + ); + + uint256 tokensCollected = tapCollector.collect(_paymentType, _data); + assertEq(tokensCollected, tokensToCollect); + + uint256 tokensCollectedAfter = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); + assertEq(tokensCollectedAfter, signedRAV.rav.valueAggregate); + } +} diff --git a/packages/horizon/test/payments/tap-collector/collect/collect.t.sol b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol new file mode 100644 index 000000000..06b0e027a --- /dev/null +++ b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { ITAPCollector } from "../../../../contracts/interfaces/ITAPCollector.sol"; +import { IGraphPayments } from "../../../../contracts/interfaces/IGraphPayments.sol"; + +import { TAPCollectorTest } from "../TAPCollector.t.sol"; + +contract TAPCollectorCollectTest is TAPCollectorTest { + + /* + * HELPERS + */ + + function _getQueryFeeEncodedData( + uint256 _signerPrivateKey, + address _indexer, + address _collector, + uint128 _tokens + ) private view returns (bytes memory) { + ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(_indexer, _collector, _tokens); + bytes32 messageHash = tapCollector.encodeRAV(rav); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(_signerPrivateKey, messageHash); + bytes memory signature = abi.encodePacked(r, s, v); + ITAPCollector.SignedRAV memory signedRAV = ITAPCollector.SignedRAV(rav, signature); + return abi.encode(signedRAV); + } + + function _getRAV( + address _indexer, + address _collector, + uint128 _tokens + ) private pure returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { + return + ITAPCollector.ReceiptAggregateVoucher({ + dataService: _collector, + serviceProvider: _indexer, + timestampNs: 0, + valueAggregate: _tokens, + metadata: abi.encode("") + }); + } + + /* + * TESTS + */ + + function testTAPCollector_Collect(uint256 tokens) public useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + _collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testTAPCollector_Collect_Multiple(uint256 tokens, uint8 steps) public useGateway useSigner { + steps = uint8(bound(steps, 1, 100)); + tokens = bound(tokens, steps, type(uint128).max); + + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + resetPrank(users.verifier); + uint256 payed = 0; + uint256 tokensPerStep = tokens / steps; + for (uint256 i = 0; i < steps; i++) { + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(payed + tokensPerStep)); + _collect(IGraphPayments.PaymentTypes.QueryFee, data); + payed += tokensPerStep; + } + } + + function testTAPCollector_Collect_RevertWhen_CallerNotDataService(uint256 tokens) public useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + + resetPrank(users.gateway); + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.indexer); + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorCallerNotDataService.selector, + users.indexer, + users.verifier + ); + vm.expectRevert(expectedError); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testTAPCollector_Collect_RevertWhen_InconsistentRAVTokens(uint256 tokens) public useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + _collect(IGraphPayments.PaymentTypes.QueryFee, data); + + // Attempt to collect again + vm.expectRevert(abi.encodeWithSelector( + ITAPCollector.TAPCollectorInconsistentRAVTokens.selector, + tokens, + tokens + )); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testTAPCollector_Collect_RevertWhen_SignerNotAuthorized(uint256 tokens) public useGateway { + tokens = bound(tokens, 1, type(uint128).max); + + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + vm.expectRevert(abi.encodeWithSelector(ITAPCollector.TAPCollectorInvalidRAVSigner.selector)); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testTAPCollector_Collect_ThawingSigner(uint256 tokens) public useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + // Start thawing signer + _thawSigner(signer); + skip(revokeSignerThawingPeriod + 1); + + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + _collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testTAPCollector_Collect_RevertIf_SignerWasRevoked(uint256 tokens) public useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + // Start thawing signer + _thawSigner(signer); + skip(revokeSignerThawingPeriod + 1); + _revokeAuthorizedSigner(signer); + + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + vm.expectRevert(abi.encodeWithSelector(ITAPCollector.TAPCollectorInvalidRAVSigner.selector)); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testTAPCollector_Collect_ThawingSignerCanceled(uint256 tokens) public useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + // Start thawing signer + _thawSigner(signer); + skip(revokeSignerThawingPeriod + 1); + _cancelThawSigner(signer); + + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + _collect(IGraphPayments.PaymentTypes.QueryFee, data); + } +} diff --git a/packages/horizon/test/payments/tap-collector/signer/authorizeSigner.t.sol b/packages/horizon/test/payments/tap-collector/signer/authorizeSigner.t.sol new file mode 100644 index 000000000..b337c48c7 --- /dev/null +++ b/packages/horizon/test/payments/tap-collector/signer/authorizeSigner.t.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { ITAPCollector } from "../../../../contracts/interfaces/ITAPCollector.sol"; + +import { TAPCollectorTest } from "../TAPCollector.t.sol"; + +contract TAPCollectorAuthorizeSignerTest is TAPCollectorTest { + + uint256 constant SECP256K1_CURVE_ORDER = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141; + + /* + * TESTS + */ + + function testTAPCollector_AuthorizeSigner(uint256 signerKey) public useGateway { + signerKey = bound(signerKey, 1, SECP256K1_CURVE_ORDER - 1); + uint256 proofDeadline = block.timestamp + 1; + bytes memory signerProof = _getSignerProof(proofDeadline, signerKey); + _authorizeSigner(vm.addr(signerKey), proofDeadline, signerProof); + } + + function testTAPCollector_AuthorizeSigner_RevertWhen_Invalid() public useGateway { + // Sign proof with payer + uint256 proofDeadline = block.timestamp + 1; + bytes memory signerProof = _getSignerProof(proofDeadline, signerPrivateKey); + + // Attempt to authorize delegator with payer's proof + bytes memory expectedError = abi.encodeWithSelector(ITAPCollector.TAPCollectorInvalidSignerProof.selector); + vm.expectRevert(expectedError); + tapCollector.authorizeSigner(users.delegator, proofDeadline, signerProof); + } + + function testTAPCollector_AuthorizeSigner_RevertWhen_AlreadyAuthroized() public useGateway { + // Authorize signer + uint256 proofDeadline = block.timestamp + 1; + bytes memory signerProof = _getSignerProof(proofDeadline, signerPrivateKey); + _authorizeSigner(signer, proofDeadline, signerProof); + + // Attempt to authorize signer again + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorSignerAlreadyAuthorized.selector, + users.gateway, + signer + ); + vm.expectRevert(expectedError); + tapCollector.authorizeSigner(signer, proofDeadline, signerProof); + } + + function testTAPCollector_AuthorizeSigner_RevertWhen_ProofExpired() public useGateway { + // Sign proof with payer + uint256 proofDeadline = block.timestamp - 1; + bytes memory signerProof = _getSignerProof(proofDeadline, signerPrivateKey); + + // Attempt to authorize delegator with expired proof + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorInvalidSignerProofDeadline.selector, + proofDeadline, + block.timestamp + ); + vm.expectRevert(expectedError); + tapCollector.authorizeSigner(users.delegator, proofDeadline, signerProof); + } +} diff --git a/packages/horizon/test/payments/tap-collector/signer/cancelThawSigner.t.sol b/packages/horizon/test/payments/tap-collector/signer/cancelThawSigner.t.sol new file mode 100644 index 000000000..dc25da8cf --- /dev/null +++ b/packages/horizon/test/payments/tap-collector/signer/cancelThawSigner.t.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { ITAPCollector } from "../../../../contracts/interfaces/ITAPCollector.sol"; + +import { TAPCollectorTest } from "../TAPCollector.t.sol"; + +contract TAPCollectorCancelThawSignerTest is TAPCollectorTest { + + /* + * TESTS + */ + + function testTAPCollector_CancelThawSigner() public useGateway useSigner { + _thawSigner(signer); + _cancelThawSigner(signer); + } + + function testTAPCollector_CancelThawSigner_RevertWhen_NotAuthorized() public useGateway { + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorSignerNotAuthorizedByPayer.selector, + users.gateway, + signer + ); + vm.expectRevert(expectedError); + tapCollector.thawSigner(signer); + } + + function testTAPCollector_CancelThawSigner_RevertWhen_NotThawing() public useGateway useSigner { + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorSignerNotThawing.selector, + signer + ); + vm.expectRevert(expectedError); + tapCollector.cancelThawSigner(signer); + } +} diff --git a/packages/horizon/test/payments/tap-collector/signer/revokeSigner.t.sol b/packages/horizon/test/payments/tap-collector/signer/revokeSigner.t.sol new file mode 100644 index 000000000..8c03245f8 --- /dev/null +++ b/packages/horizon/test/payments/tap-collector/signer/revokeSigner.t.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { ITAPCollector } from "../../../../contracts/interfaces/ITAPCollector.sol"; + +import { TAPCollectorTest } from "../TAPCollector.t.sol"; + +contract TAPCollectorRevokeAuthorizedSignerTest is TAPCollectorTest { + + /* + * TESTS + */ + + function testTAPCollector_RevokeAuthorizedSigner() public useGateway useSigner { + _thawSigner(signer); + + // Advance time to thaw signer + skip(revokeSignerThawingPeriod + 1); + + _revokeAuthorizedSigner(signer); + } + + function testTAPCollector_RevokeAuthorizedSigner_RevertWhen_NotAuthorized() public useGateway { + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorSignerNotAuthorizedByPayer.selector, + users.gateway, + signer + ); + vm.expectRevert(expectedError); + tapCollector.revokeAuthorizedSigner(signer); + } + + function testTAPCollector_RevokeAuthorizedSigner_RevertWhen_NotThawing() public useGateway useSigner { + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorSignerNotThawing.selector, + signer + ); + vm.expectRevert(expectedError); + tapCollector.revokeAuthorizedSigner(signer); + } + + function testTAPCollector_RevokeAuthorizedSigner_RevertWhen_StillThawing() public useGateway useSigner { + _thawSigner(signer); + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorSignerStillThawing.selector, + block.timestamp, + block.timestamp + revokeSignerThawingPeriod + ); + vm.expectRevert(expectedError); + tapCollector.revokeAuthorizedSigner(signer); + } +} diff --git a/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol b/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol new file mode 100644 index 000000000..fb47c37fb --- /dev/null +++ b/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { ITAPCollector } from "../../../../contracts/interfaces/ITAPCollector.sol"; + +import { TAPCollectorTest } from "../TAPCollector.t.sol"; + +contract TAPCollectorThawSignerTest is TAPCollectorTest { + + /* + * TESTS + */ + + function testTAPCollector_ThawSigner() public useGateway useSigner { + _thawSigner(signer); + } + + function testTAPCollector_ThawSigner_RevertWhen_NotAuthorized() public useGateway { + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorSignerNotAuthorizedByPayer.selector, + users.gateway, + signer + ); + vm.expectRevert(expectedError); + tapCollector.thawSigner(signer); + } +} diff --git a/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol b/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol index b7ee76839..2bc435f7a 100644 --- a/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol +++ b/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol @@ -8,6 +8,16 @@ import { GraphBaseTest } from "../../GraphBase.t.sol"; abstract contract PaymentsEscrowSharedTest is GraphBaseTest { + /* + * MODIFIERS + */ + + modifier useGateway() { + vm.startPrank(users.gateway); + _; + vm.stopPrank(); + } + /* * HELPERS */ diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index 5b1449ea7..cd5cc2bfb 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -18,4 +18,6 @@ abstract contract Constants { uint256 internal constant EPOCH_LENGTH = 1; // Rewards manager uint256 internal constant ALLOCATIONS_REWARD_CUT = 100 ether; + // TAPCollector + uint256 internal constant revokeSignerThawingPeriod = 7 days; } \ No newline at end of file diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index 43065add6..099164473 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -147,7 +147,7 @@ abstract contract SubgraphBaseTest is Utils, Constants { disputeManager = DisputeManager(disputeManagerProxy); disputeManager.transferOwnership(users.governor); - tapCollector = new TAPCollector("TAPCollector", "1", address(controller)); + tapCollector = new TAPCollector("TAPCollector", "1", address(controller), revokeSignerThawingPeriod); address subgraphServiceImplementation = address( new SubgraphService(address(controller), address(disputeManager), address(tapCollector), address(curation)) ); diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 013f869a8..b417f30bf 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -232,7 +232,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { ITAPCollector.SignedRAV memory signedRav = abi.decode(_data, (ITAPCollector.SignedRAV)); allocationId = abi.decode(signedRav.rav.metadata, (address)); allocation = subgraphService.getAllocation(allocationId); - address payer = _recoverRAVSigner(signedRav); + (address payer, ) = tapCollector.authorizedSigners(_recoverRAVSigner(signedRav)); // Total amount of tokens collected for indexer uint256 tokensCollected = tapCollector.tokensCollected(address(subgraphService), _indexer, payer); diff --git a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol index 99bfab1ca..93972679f 100644 --- a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol @@ -3,11 +3,11 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; -// import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { ITAPCollector } from "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; +import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; import { ISubgraphService } from "../../../../contracts/interfaces/ISubgraphService.sol"; import { SubgraphServiceTest } from "../../SubgraphService.t.sol"; @@ -23,6 +23,14 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { * HELPERS */ + function _getSignerProof(uint256 _proofDeadline, uint256 _signer) private returns (bytes memory) { + (, address msgSender, ) = vm.readCallers(); + bytes32 messageHash = keccak256(abi.encodePacked(block.chainid, _proofDeadline, msgSender)); + bytes32 proofToDigest = MessageHashUtils.toEthSignedMessageHash(messageHash); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(_signer, proofToDigest); + return abi.encodePacked(r, s, v); + } + function _getQueryFeeEncodedData(address indexer, uint128 tokens) private view returns (bytes memory) { ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(indexer, tokens); bytes32 messageHash = tapCollector.encodeRAV(rav); @@ -47,14 +55,15 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { } function _approveCollector(uint256 tokens) private { - address msgSender; - (, msgSender, ) = vm.readCallers(); - resetPrank(signer); - mint(signer, tokens); escrow.approveCollector(address(tapCollector), tokens); token.approve(address(escrow), tokens); escrow.deposit(address(tapCollector), users.indexer, tokens); - resetPrank(msgSender); + } + + function _authorizeSigner() private { + uint256 proofDeadline = block.timestamp + 1; + bytes memory proof = _getSignerProof(proofDeadline, signerPrivateKey); + tapCollector.authorizeSigner(signer, proofDeadline, proof); } /* @@ -81,22 +90,28 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { : tokensAllocated / stakeToFeesRatio; tokensPayment = bound(tokensPayment, minimumProvisionTokens, maxTokensPayment); + resetPrank(users.gateway); _approveCollector(tokensPayment); + _authorizeSigner(); + resetPrank(users.indexer); bytes memory data = _getQueryFeeEncodedData(users.indexer, uint128(tokensPayment)); _collect(users.indexer, IGraphPayments.PaymentTypes.QueryFee, data); } function testCollect_MultipleQueryFees( uint256 tokensAllocated, - uint256 numPayments + uint8 numPayments ) public useIndexer useAllocation(tokensAllocated) { vm.assume(tokensAllocated > minimumProvisionTokens * stakeToFeesRatio); - numPayments = bound(numPayments, 1, 10); + numPayments = uint8(bound(numPayments, 2, 10)); uint256 tokensPayment = tokensAllocated / stakeToFeesRatio / numPayments; + resetPrank(users.gateway); _approveCollector(tokensAllocated); + _authorizeSigner(); + resetPrank(users.indexer); uint256 accTokensPayment = 0; for (uint i = 0; i < numPayments; i++) { accTokensPayment = accTokensPayment + tokensPayment; diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index f1aac3d16..76f864da1 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -27,4 +27,6 @@ abstract contract Constants { // RewardsMananger parameters uint256 public constant rewardsPerSignal = 10000; uint256 public constant rewardsPerSubgraphAllocationUpdate = 1000; + // TAPCollector parameters + uint256 public constant revokeSignerThawingPeriod = 7 days; } From 0c0d09090f6f8cff63a7cb4d499d94f579d159ba Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 10 Oct 2024 22:42:29 -0300 Subject: [PATCH 277/343] fix: lint errors --- .../libraries/ProvisionTracker.sol | 28 +++++++++---------- .../contracts/staking/HorizonStaking.sol | 4 +-- .../contracts/staking/HorizonStakingBase.sol | 16 +++++------ .../contracts/utilities/AllocationManager.sol | 28 +++++++++---------- 4 files changed, 38 insertions(+), 38 deletions(-) diff --git a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol index fef392302..25449909b 100644 --- a/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol +++ b/packages/horizon/contracts/data-service/libraries/ProvisionTracker.sol @@ -42,6 +42,20 @@ library ProvisionTracker { self[serviceProvider] += tokens; } + /** + * @notice Releases tokens for a service provider + * @dev Requirements: + * - `tokens` must be less than or equal to the amount of tokens locked for the service provider + * @param self The provision tracker mapping + * @param serviceProvider The service provider address + * @param tokens The amount of tokens to release + */ + function release(mapping(address => uint256) storage self, address serviceProvider, uint256 tokens) internal { + if (tokens == 0) return; + require(self[serviceProvider] >= tokens, ProvisionTrackerInsufficientTokens(self[serviceProvider], tokens)); + self[serviceProvider] -= tokens; + } + /** * @notice Checks if a service provider has enough tokens available to lock * @param self The provision tracker mapping @@ -58,18 +72,4 @@ library ProvisionTracker { uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio); return self[serviceProvider] <= tokensAvailable; } - - /** - * @notice Releases tokens for a service provider - * @dev Requirements: - * - `tokens` must be less than or equal to the amount of tokens locked for the service provider - * @param self The provision tracker mapping - * @param serviceProvider The service provider address - * @param tokens The amount of tokens to release - */ - function release(mapping(address => uint256) storage self, address serviceProvider, uint256 tokens) internal { - if (tokens == 0) return; - require(self[serviceProvider] >= tokens, ProvisionTrackerInsufficientTokens(self[serviceProvider], tokens)); - self[serviceProvider] -= tokens; - } } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index c46670dcb..8df8f20f6 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -836,7 +836,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address _serviceProvider, address _verifier, uint256 _shares, - address beneficiary + address _beneficiary ) private returns (bytes32) { require(_shares > 0, HorizonStakingInvalidZeroShares()); DelegationPoolInternal storage pool = _getDelegationPool(_serviceProvider, _verifier); @@ -862,7 +862,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { bytes32 thawRequestId = _createThawRequest( _serviceProvider, _verifier, - beneficiary, + _beneficiary, thawingShares, thawingUntil, pool.thawingNonce diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 54e55e1cc..d29d3edec 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -288,14 +288,6 @@ abstract contract HorizonStakingBase is return _provisions[_serviceProvider][_verifier].tokens - _provisions[_serviceProvider][_verifier].tokensThawing; } - /** - * @notice See {IHorizonStakingBase-getDelegatedTokensAvailable}. - */ - function _getDelegatedTokensAvailable(address _serviceProvider, address _verifier) private view returns (uint256) { - DelegationPoolInternal storage poolInternal = _getDelegationPool(_serviceProvider, _verifier); - return poolInternal.tokens - poolInternal.tokensThawing; - } - /** * @notice Gets the next thaw request after `_thawRequestId`. * @dev This function is used as a callback in the thaw requests linked list traversal. @@ -303,4 +295,12 @@ abstract contract HorizonStakingBase is function _getNextThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { return _thawRequests[_thawRequestId].next; } + + /** + * @notice See {IHorizonStakingBase-getDelegatedTokensAvailable}. + */ + function _getDelegatedTokensAvailable(address _serviceProvider, address _verifier) private view returns (uint256) { + DelegationPoolInternal storage poolInternal = _getDelegationPool(_serviceProvider, _verifier); + return poolInternal.tokens - poolInternal.tokensThawing; + } } diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 5da237ee6..669cd9bf8 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -457,20 +457,6 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca return legacyAllocations.get(_allocationId); } - /** - * @notice Verifies ownership of an allocation id by verifying an EIP712 allocation proof - * @dev Requirements: - * - Signer must be the allocation id address - * @param _indexer The address of the indexer - * @param _allocationId The id of the allocation - * @param _proof The EIP712 proof, an EIP712 signed message of (indexer,allocationId) - */ - function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) private view { - bytes32 digest = _encodeAllocationProof(_indexer, _allocationId); - address signer = ECDSA.recover(digest, _proof); - require(signer == _allocationId, AllocationManagerInvalidAllocationProof(signer, _allocationId)); - } - /** * @notice Encodes the allocation proof for EIP712 signing * @param _indexer The address of the indexer @@ -489,4 +475,18 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca function _isOverAllocated(address _indexer, uint32 _delegationRatio) internal view returns (bool) { return !allocationProvisionTracker.check(_graphStaking(), _indexer, _delegationRatio); } + + /** + * @notice Verifies ownership of an allocation id by verifying an EIP712 allocation proof + * @dev Requirements: + * - Signer must be the allocation id address + * @param _indexer The address of the indexer + * @param _allocationId The id of the allocation + * @param _proof The EIP712 proof, an EIP712 signed message of (indexer,allocationId) + */ + function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) private view { + bytes32 digest = _encodeAllocationProof(_indexer, _allocationId); + address signer = ECDSA.recover(digest, _proof); + require(signer == _allocationId, AllocationManagerInvalidAllocationProof(signer, _allocationId)); + } } From 5876cd562b2545168051cf580d320fd53decd4c4 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 17 Oct 2024 12:30:06 -0300 Subject: [PATCH 278/343] fix: added missing parameters to deploy script and reduced runs to 50 for SubgraphService --- packages/horizon/README.md | 2 +- packages/horizon/ignition/configs/horizon.hardhat.json | 3 ++- packages/horizon/ignition/modules/core/TAPCollector.ts | 3 ++- packages/horizon/scripts/deploy.ts | 2 +- packages/subgraph-service/contracts/SubgraphService.sol | 7 +++---- .../contracts/utilities/AllocationManager.sol | 3 +-- packages/subgraph-service/hardhat.config.ts | 2 +- .../ignition/configs/subgraph-service.hardhat.json | 3 ++- .../subgraph-service/ignition/modules/DisputeManager.ts | 2 +- .../subgraph-service/ignition/modules/SubgraphService.ts | 4 +++- 10 files changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/horizon/README.md b/packages/horizon/README.md index d3a0d6200..4b0954953 100644 --- a/packages/horizon/README.md +++ b/packages/horizon/README.md @@ -10,7 +10,7 @@ We use Hardhat Ignition to deploy the contracts. To build and deploy the contrac yarn install yarn build npx hardhat ignition deploy ./ignition/modules/horizon.ts \ - --parameters ./ignition/configs/graph.hardhat.json \ + --parameters ./ignition/configs/horizon.hardhat.json \ --network hardhat ``` diff --git a/packages/horizon/ignition/configs/horizon.hardhat.json b/packages/horizon/ignition/configs/horizon.hardhat.json index 894a2ed59..ef16c8136 100644 --- a/packages/horizon/ignition/configs/horizon.hardhat.json +++ b/packages/horizon/ignition/configs/horizon.hardhat.json @@ -41,6 +41,7 @@ }, "TAPCollector": { "eip712Name": "TAPCollector", - "eip712Version": "1" + "eip712Version": "1", + "revokeSignerThawingPeriod": 10000 } } diff --git a/packages/horizon/ignition/modules/core/TAPCollector.ts b/packages/horizon/ignition/modules/core/TAPCollector.ts index 429dc5083..2e8be4bfb 100644 --- a/packages/horizon/ignition/modules/core/TAPCollector.ts +++ b/packages/horizon/ignition/modules/core/TAPCollector.ts @@ -11,8 +11,9 @@ export default buildModule('TAPCollector', (m) => { const name = m.getParameter('eip712Name') const version = m.getParameter('eip712Version') + const revokeSignerThawingPeriod = m.getParameter('revokeSignerThawingPeriod') - const TAPCollector = m.contract('TAPCollector', TAPCollectorArtifact, [name, version, Controller], { after: [PeripheryRegistered, HorizonRegistered] }) + const TAPCollector = m.contract('TAPCollector', TAPCollectorArtifact, [name, version, Controller, revokeSignerThawingPeriod], { after: [PeripheryRegistered, HorizonRegistered] }) return { TAPCollector } }) diff --git a/packages/horizon/scripts/deploy.ts b/packages/horizon/scripts/deploy.ts index a7daff3d4..5a94398d2 100644 --- a/packages/horizon/scripts/deploy.ts +++ b/packages/horizon/scripts/deploy.ts @@ -1,6 +1,6 @@ import { ignition } from 'hardhat' -import Parameters from '../ignition/graph.hardhat.json' +import Parameters from '../ignition/configs/horizon.hardhat.json' import PeripheryModule from '../ignition/modules/periphery' async function main() { diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index a07463a25..5f45c0f96 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -77,6 +77,7 @@ contract SubgraphService is * on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges. * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation * @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation + * @param stakeToFeesRatio The ratio of stake to fees to lock when collecting query fees */ function initialize( uint256 minimumProvisionTokens, @@ -497,8 +498,7 @@ contract SubgraphService is * @return max The maximum is unbounded */ function _getThawingPeriodRange() internal view override returns (uint64 min, uint64 max) { - uint64 disputePeriod = _disputeManager().getDisputePeriod(); - return (disputePeriod, DEFAULT_MAX_THAWING_PERIOD); + return (_disputeManager().getDisputePeriod(), DEFAULT_MAX_THAWING_PERIOD); } /** @@ -507,8 +507,7 @@ contract SubgraphService is * @return max The maximum is 100% in PPM */ function _getVerifierCutRange() internal view override returns (uint32 min, uint32 max) { - uint32 verifierCut = _disputeManager().getVerifierCut(); - return (verifierCut, DEFAULT_MAX_VERIFIER_CUT); + return (_disputeManager().getVerifierCut(), DEFAULT_MAX_VERIFIER_CUT); } /** diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 669cd9bf8..37e57828f 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -485,8 +485,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca * @param _proof The EIP712 proof, an EIP712 signed message of (indexer,allocationId) */ function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) private view { - bytes32 digest = _encodeAllocationProof(_indexer, _allocationId); - address signer = ECDSA.recover(digest, _proof); + address signer = ECDSA.recover(_encodeAllocationProof(_indexer, _allocationId), _proof); require(signer == _allocationId, AllocationManagerInvalidAllocationProof(signer, _allocationId)); } } diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts index 1e2dfc9fd..b173873fb 100644 --- a/packages/subgraph-service/hardhat.config.ts +++ b/packages/subgraph-service/hardhat.config.ts @@ -13,7 +13,7 @@ const config: HardhatUserConfig = { settings: { optimizer: { enabled: true, - runs: 200, + runs: 50, }, }, }, diff --git a/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json b/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json index 83dfa1899..c1a248448 100644 --- a/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json +++ b/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json @@ -8,6 +8,7 @@ }, "SubgraphService": { "minimumProvisionTokens": "100000000000000000000000n", - "maximumDelegationRatio": 16 + "maximumDelegationRatio": 16, + "stakeToFeesRatio": 2 } } diff --git a/packages/subgraph-service/ignition/modules/DisputeManager.ts b/packages/subgraph-service/ignition/modules/DisputeManager.ts index ff3921eca..78692937c 100644 --- a/packages/subgraph-service/ignition/modules/DisputeManager.ts +++ b/packages/subgraph-service/ignition/modules/DisputeManager.ts @@ -20,7 +20,7 @@ export default buildModule('DisputeManager', (m) => { const DisputeManagerImplementation = m.contract('DisputeManager', [controllerAddress]) // Upgrade implementation - const DisputeManagerProxyAdmin = m.contractAt('TransparentUpgradeableProxy', ProxyAdminArtifact, disputeManagerProxyAdminAddress) + const DisputeManagerProxyAdmin = m.contractAt('ProxyAdmin', ProxyAdminArtifact, disputeManagerProxyAdminAddress) const encodedCall = m.encodeFunctionCall(DisputeManagerImplementation, 'initialize', [ arbitrator, disputePeriod, diff --git a/packages/subgraph-service/ignition/modules/SubgraphService.ts b/packages/subgraph-service/ignition/modules/SubgraphService.ts index 783cd7d15..0f17a5906 100644 --- a/packages/subgraph-service/ignition/modules/SubgraphService.ts +++ b/packages/subgraph-service/ignition/modules/SubgraphService.ts @@ -16,15 +16,17 @@ export default buildModule('SubgraphService', (m) => { // Parameters - config file const minimumProvisionTokens = m.getParameter('minimumProvisionTokens') const maximumDelegationRatio = m.getParameter('maximumDelegationRatio') + const stakeToFeesRatio = m.getParameter('stakeToFeesRatio') // Deploy implementation const SubgraphServiceImplementation = m.contract('SubgraphService', [controllerAddress, disputeManagerAddress, tapCollectorAddress, curationAddress]) // Upgrade implementation - const SubgraphServiceProxyAdmin = m.contractAt('TransparentUpgradeableProxy', ProxyAdminArtifact, subgraphServiceProxyAdminAddress) + const SubgraphServiceProxyAdmin = m.contractAt('ProxyAdmin', ProxyAdminArtifact, subgraphServiceProxyAdminAddress) const encodedCall = m.encodeFunctionCall(SubgraphServiceImplementation, 'initialize', [ minimumProvisionTokens, maximumDelegationRatio, + stakeToFeesRatio, ]) m.call(SubgraphServiceProxyAdmin, 'upgradeAndCall', [subgraphServiceProxyAddress, SubgraphServiceImplementation, encodedCall]) From a256d749275900dba4ea9b2f29c0e569e148e4ae Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 17 Oct 2024 14:20:38 -0300 Subject: [PATCH 279/343] fix: change foundry to use 50 runs for optimization --- packages/subgraph-service/foundry.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/subgraph-service/foundry.toml b/packages/subgraph-service/foundry.toml index 9f5c3a92a..90444cf44 100644 --- a/packages/subgraph-service/foundry.toml +++ b/packages/subgraph-service/foundry.toml @@ -6,4 +6,4 @@ test = 'test' cache_path = 'cache_forge' fs_permissions = [{ access = "read", path = "./"}] optimizer = true -optimizer-runs = 200 +optimizer-runs = 50 From ba40a741832f591fba21c16ccd8f7fbe183a9abe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 14 Nov 2024 15:10:15 -0300 Subject: [PATCH 280/343] chore: bump ignition version to 0.15.7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/README.md | 8 ++-- ...zon.hardhat.json => horizon.hardhat.json5} | 24 +++------- packages/horizon/package.json | 2 +- packages/horizon/scripts/deploy.ts | 16 ------- packages/subgraph-service/README.md | 22 ++++++---- ...at.json => subgraph-service.hardhat.json5} | 4 +- packages/subgraph-service/scripts/deploy.ts | 4 +- yarn.lock | 44 ++++++++++++++++++- 8 files changed, 74 insertions(+), 50 deletions(-) rename packages/horizon/ignition/configs/{horizon.hardhat.json => horizon.hardhat.json5} (59%) delete mode 100644 packages/horizon/scripts/deploy.ts rename packages/subgraph-service/ignition/configs/{subgraph-service.hardhat.json => subgraph-service.hardhat.json5} (79%) diff --git a/packages/horizon/README.md b/packages/horizon/README.md index 4b0954953..76ddbf9b9 100644 --- a/packages/horizon/README.md +++ b/packages/horizon/README.md @@ -4,14 +4,16 @@ Graph Horizon is the next evolution of the Graph Protocol. ## Deployment -We use Hardhat Ignition to deploy the contracts. To build and deploy the contracts run the following commands: +We use Hardhat Ignition to deploy the contracts. To build and deploy Graph Horizon run the following commands: ```bash yarn install yarn build npx hardhat ignition deploy ./ignition/modules/horizon.ts \ - --parameters ./ignition/configs/horizon.hardhat.json \ + --parameters ./ignition/configs/horizon.hardhat.json5 \ --network hardhat ``` -You can use any network defined in `hardhat.config.ts` by replacing `hardhat` with the network name. \ No newline at end of file +You can use any network defined in `hardhat.config.ts` by replacing `hardhat` with the network name. + +Note that this will deploy a standalone version of Graph Horizon contracts, meaning the Subgraph Service will not be deployed. If you want to deploy both please refer to the [Subgraph Service README](../subgraph-service/README.md) for deploy instructions. \ No newline at end of file diff --git a/packages/horizon/ignition/configs/horizon.hardhat.json b/packages/horizon/ignition/configs/horizon.hardhat.json5 similarity index 59% rename from packages/horizon/ignition/configs/horizon.hardhat.json rename to packages/horizon/ignition/configs/horizon.hardhat.json5 index ef16c8136..a0dcc4aee 100644 --- a/packages/horizon/ignition/configs/horizon.hardhat.json +++ b/packages/horizon/ignition/configs/horizon.hardhat.json5 @@ -1,37 +1,27 @@ { - "GraphProxyAdmin": { - "governor": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0" - }, - "Controller": { + "$global": { "governor": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0", - "pauseGuardian": "0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC" - }, - "RewardsManager": { + "pauseGuardian": "0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC", "subgraphAvailabilityOracle": "0xd03ea8624C8C5987235048901fB614fDcA89b117", - "issuancePerBlock": "114155251141552511415n", + // Placeholder address for a standalone Horizon deployment, see README.md for more detals "subgraphServiceAddress": "0x0000000000000000000000000000000000000000" }, + "RewardsManager": { + "issuancePerBlock": "114155251141552511415n" + }, "EpochManager": { "epochLength": 60 }, - "GraphTokenGateway": { - "pauseGuardian": "0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC" - }, "Curation": { "curationTaxPercentage": 10000, "minimumCurationDeposit": 1 }, "GraphToken": { - "initialSupply": "10000000000000000000000000000n", - "governor": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0" + "initialSupply": "10000000000000000000000000000n" }, "HorizonStaking": { - "subgraphServiceAddress": "0x0000000000000000000000000000000000000000", "maxThawingPeriod": 2419200 }, - "HorizonStakingExtension": { - "subgraphServiceAddress": "0x0000000000000000000000000000000000000000" - }, "GraphPayments": { "protocolPaymentCut": 10000 }, diff --git a/packages/horizon/package.json b/packages/horizon/package.json index 4c6624051..a43bf3f72 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -17,7 +17,7 @@ "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-foundry": "^1.1.1", - "@nomicfoundation/hardhat-ignition": "^0.15.5", + "@nomicfoundation/hardhat-ignition": "^0.15.7", "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", diff --git a/packages/horizon/scripts/deploy.ts b/packages/horizon/scripts/deploy.ts deleted file mode 100644 index 5a94398d2..000000000 --- a/packages/horizon/scripts/deploy.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ignition } from 'hardhat' - -import Parameters from '../ignition/configs/horizon.hardhat.json' -import PeripheryModule from '../ignition/modules/periphery' - -async function main() { - await ignition.deploy(PeripheryModule, { - parameters: Parameters, - }) -} - -main() - .catch((error) => { - console.error(error) - process.exit(1) - }) diff --git a/packages/subgraph-service/README.md b/packages/subgraph-service/README.md index 7be82e5d6..dbd580740 100644 --- a/packages/subgraph-service/README.md +++ b/packages/subgraph-service/README.md @@ -1,13 +1,17 @@ -# Sample Hardhat Project +# 🌅 Subgraph Service 🌅 -This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract. +The Subgraph Service is a data service designed to work with Graph Horizon that supports indexing subgraphs and serving queries to consumers. -Try running some of the following tasks: +## Deployment -```shell -npx hardhat help -npx hardhat test -REPORT_GAS=true npx hardhat test -npx hardhat node -npx hardhat run scripts/deploy.ts +We use Hardhat Ignition to deploy the contracts. To build and deploy the Subgraph Service run the following commands: + +```bash +yarn install +yarn build +npx hardhat run scripts/deploy.ts --network hardhat ``` + +You can use any network defined in `hardhat.config.ts` by replacing `hardhat` with the network name. + +Note that this will deploy and configure Graph Horizon contracts as well as the Subgraph Service. \ No newline at end of file diff --git a/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json b/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json5 similarity index 79% rename from packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json rename to packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json5 index c1a248448..12db4cf12 100644 --- a/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json +++ b/packages/subgraph-service/ignition/configs/subgraph-service.hardhat.json5 @@ -1,6 +1,8 @@ { + "$global": { + "arbitrator": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0" + }, "DisputeManager": { - "arbitrator": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0", "disputePeriod": 2419200, "disputeDeposit": "10000000000000000000000n", "fishermanRewardCut": 500000, diff --git a/packages/subgraph-service/scripts/deploy.ts b/packages/subgraph-service/scripts/deploy.ts index 17ff2feb2..32f798d6e 100644 --- a/packages/subgraph-service/scripts/deploy.ts +++ b/packages/subgraph-service/scripts/deploy.ts @@ -17,8 +17,8 @@ import SubgraphServiceProxiesModule from '../ignition/modules/Proxies' // - Deploy SubgraphService and DisputeManager implementations async function main() { // TODO: Dynamically load config file based on the hardhat --network value - const HorizonConfig = removeNFromBigInts(require('@graphprotocol/horizon/ignition/configs/horizon.hardhat.json')) - const SubgraphServiceConfig = removeNFromBigInts(require('../ignition/configs/subgraph-service.hardhat.json')) + const HorizonConfig = removeNFromBigInts(require('@graphprotocol/horizon/ignition/configs/horizon.hardhat.json5')) + const SubgraphServiceConfig = removeNFromBigInts(require('../ignition/configs/subgraph-service.hardhat.json5')) // Deploy proxies const { DisputeManagerProxy, DisputeManagerProxyAdmin, SubgraphServiceProxy, SubgraphServiceProxyAdmin } = await ignition.deploy(SubgraphServiceProxiesModule) diff --git a/yarn.lock b/yarn.lock index 4cfd396f1..b92bb282d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2933,7 +2933,7 @@ __metadata: "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" - "@nomicfoundation/hardhat-ignition": "npm:^0.15.5" + "@nomicfoundation/hardhat-ignition": "npm:^0.15.7" "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.5" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" @@ -4707,6 +4707,24 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/hardhat-ignition@npm:^0.15.7": + version: 0.15.7 + resolution: "@nomicfoundation/hardhat-ignition@npm:0.15.7" + dependencies: + "@nomicfoundation/ignition-core": "npm:^0.15.7" + "@nomicfoundation/ignition-ui": "npm:^0.15.7" + chalk: "npm:^4.0.0" + debug: "npm:^4.3.2" + fs-extra: "npm:^10.0.0" + json5: "npm:^2.2.3" + prompts: "npm:^2.4.2" + peerDependencies: + "@nomicfoundation/hardhat-verify": ^2.0.1 + hardhat: ^2.18.0 + checksum: a5ed2b4fb862185d25c7b718faacafb23b818bc22c4c80c9bab6baaa228cf430196058a9374649de99dd831b98b9088b7b337ef44e4cadbf370d75a8a325ced9 + languageName: node + linkType: hard + "@nomicfoundation/hardhat-network-helpers@npm:^1.0.0, @nomicfoundation/hardhat-network-helpers@npm:^1.0.9": version: 1.0.10 resolution: "@nomicfoundation/hardhat-network-helpers@npm:1.0.10" @@ -4779,6 +4797,23 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ignition-core@npm:^0.15.7": + version: 0.15.7 + resolution: "@nomicfoundation/ignition-core@npm:0.15.7" + dependencies: + "@ethersproject/address": "npm:5.6.1" + "@nomicfoundation/solidity-analyzer": "npm:^0.1.1" + cbor: "npm:^9.0.0" + debug: "npm:^4.3.2" + ethers: "npm:^6.7.0" + fs-extra: "npm:^10.0.0" + immer: "npm:10.0.2" + lodash: "npm:4.17.21" + ndjson: "npm:2.0.0" + checksum: b0d5717e7835da76595886e2729a0ee34536699091ad509b63fe2ec96b186495886c313c1c748dcc658524a5f409840031186f3af76975250be424248369c495 + languageName: node + linkType: hard + "@nomicfoundation/ignition-ui@npm:^0.15.5": version: 0.15.5 resolution: "@nomicfoundation/ignition-ui@npm:0.15.5" @@ -4786,6 +4821,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/ignition-ui@npm:^0.15.7": + version: 0.15.7 + resolution: "@nomicfoundation/ignition-ui@npm:0.15.7" + checksum: 4e53ff1e5267e9882ee3f7bae3d39c0e0552e9600fd2ff12ccc49f22436e1b97e9cec215999fda0ebcfbdf6db054a1ad8c0d940641d97de5998dbb4c864ce649 + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1" From 4f0a4792c654740e389ee55da94a0bbd39742094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 14 Nov 2024 16:00:17 -0300 Subject: [PATCH 281/343] chore: bump ignition in subgraph service package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/subgraph-service/package.json | 2 +- yarn.lock | 26 +------------------------- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 419d5f160..0c325a17f 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -18,7 +18,7 @@ "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-foundry": "^1.1.1", - "@nomicfoundation/hardhat-ignition": "^0.15.5", + "@nomicfoundation/hardhat-ignition": "^0.15.7", "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", diff --git a/yarn.lock b/yarn.lock index b92bb282d..6fc660114 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3026,7 +3026,7 @@ __metadata: "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" - "@nomicfoundation/hardhat-ignition": "npm:^0.15.5" + "@nomicfoundation/hardhat-ignition": "npm:^0.15.7" "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.5" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" @@ -4690,23 +4690,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/hardhat-ignition@npm:^0.15.5": - version: 0.15.5 - resolution: "@nomicfoundation/hardhat-ignition@npm:0.15.5" - dependencies: - "@nomicfoundation/ignition-core": "npm:^0.15.5" - "@nomicfoundation/ignition-ui": "npm:^0.15.5" - chalk: "npm:^4.0.0" - debug: "npm:^4.3.2" - fs-extra: "npm:^10.0.0" - prompts: "npm:^2.4.2" - peerDependencies: - "@nomicfoundation/hardhat-verify": ^2.0.1 - hardhat: ^2.18.0 - checksum: b3d9755f2bf89157b6ae0cb6cebea264f76f556ae0b3fc5a62afb5e0f6ed70b3d82d8f692b1c49b2ef2d60cdb45ee28fb148cfca1aa5a53bfe37772c71e75a08 - languageName: node - linkType: hard - "@nomicfoundation/hardhat-ignition@npm:^0.15.7": version: 0.15.7 resolution: "@nomicfoundation/hardhat-ignition@npm:0.15.7" @@ -4814,13 +4797,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ignition-ui@npm:^0.15.5": - version: 0.15.5 - resolution: "@nomicfoundation/ignition-ui@npm:0.15.5" - checksum: 7d10e30c3078731e4feb91bd7959dfb5a0eeac6f34f6261fada2bf330ff8057ecd576ce0fb3fe856867af2d7c67f31bd75a896110b58d93ff3f27f04f6771278 - languageName: node - linkType: hard - "@nomicfoundation/ignition-ui@npm:^0.15.7": version: 0.15.7 resolution: "@nomicfoundation/ignition-ui@npm:0.15.7" From 9ae3410b3544d1fc543c7ebf9a2b8b811f67fc4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 15 Nov 2024 16:51:16 -0300 Subject: [PATCH 282/343] chore: use hardhat-secure-accounts for non local chains MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/hardhat.config.ts | 10 +- packages/horizon/package.json | 1 + packages/subgraph-service/hardhat.config.ts | 17 + .../artifacts/BridgeEscrow#BridgeEscrow.json | 159 + .../BridgeEscrow#BridgeEscrow_Instance.json | 159 + .../artifacts/BridgeEscrow#GraphProxy.json | 177 + .../artifacts/Controller#Controller.json | 349 + .../artifacts/Curation#Curation.json | 707 + .../artifacts/Curation#Curation_Instance.json | 707 + .../Curation#GraphCurationToken.json | 414 + .../artifacts/Curation#GraphProxy.json | 177 + .../DisputeManager#DisputeManager.dbg.json | 4 + .../DisputeManager#DisputeManager.json | 1390 + ...teManager#DisputeManager_Instance.dbg.json | 4 + ...isputeManager#DisputeManager_Instance.json | 1390 + .../artifacts/DisputeManager#ProxyAdmin.json | 132 + .../artifacts/EpochManager#EpochManager.json | 364 + .../EpochManager#EpochManager_Instance.json | 364 + .../artifacts/EpochManager#GraphProxy.json | 177 + .../GraphHorizon_Periphery#Dummy.json | 10 + .../GraphPayments#GraphPayments.json | 308 + .../GraphPayments#GraphPayments_Instance.json | 308 + .../GraphProxyAdmin#GraphProxyAdmin.json | 234 + .../artifacts/GraphToken#GraphProxy.json | 177 + .../artifacts/GraphToken#GraphToken.json | 750 + .../GraphToken#GraphToken_Instance.json | 750 + .../GraphTokenGateway#GraphProxy.json | 177 + .../GraphTokenGateway#GraphTokenGateway.json | 647 + ...kenGateway#GraphTokenGateway_Instance.json | 647 + ...izonProxies#GraphProxy_HorizonStaking.json | 177 + ...zonProxies#OZProxyDummy_GraphPayments.json | 10 + ...onProxies#OZProxyDummy_PaymentsEscrow.json | 10 + ...rizonProxies#ProxyAdmin_GraphPayments.json | 132 + ...izonProxies#ProxyAdmin_PaymentsEscrow.json | 132 + .../HorizonProxies#RegisteredDummy.json | 10 + ...sparentUpgradeableProxy_GraphPayments.json | 116 + ...parentUpgradeableProxy_PaymentsEscrow.json | 116 + .../HorizonStaking#HorizonStaking.json | 2384 + ...orizonStaking#HorizonStaking_Instance.json | 2384 + ...onStakingExtension#ExponentialRebates.json | 55 + ...kingExtension#HorizonStakingExtension.json | 1173 + .../PaymentsEscrow#PaymentsEscrow.json | 835 + ...aymentsEscrow#PaymentsEscrow_Instance.json | 835 + .../artifacts/RewardsManager#GraphProxy.json | 177 + .../RewardsManager#RewardsManager.json | 635 + ...ewardsManager#RewardsManager_Instance.json | 635 + .../artifacts/SubgraphService#ProxyAdmin.json | 132 + .../SubgraphService#SubgraphService.dbg.json | 4 + .../SubgraphService#SubgraphService.json | 2393 + ...hService#SubgraphService_Instance.dbg.json | 4 + ...graphService#SubgraphService_Instance.json | 2393 + ...ceProxies#OZProxyDummy_DisputeManager.json | 10 + ...eProxies#OZProxyDummy_SubgraphService.json | 10 + ...viceProxies#ProxyAdmin_DisputeManager.json | 132 + ...iceProxies#ProxyAdmin_SubgraphService.json | 132 + ...parentUpgradeableProxy_DisputeManager.json | 116 + ...arentUpgradeableProxy_SubgraphService.json | 116 + .../artifacts/TAPCollector#TAPCollector.json | 776 + .../e51c04f0f0fdce5715962999616918b7.json | 254531 +++++++++++++++ .../chain-421614/deployed_addresses.json | 53 + .../deployments/chain-421614/journal.jsonl | 378 + packages/subgraph-service/package.json | 1 + yarn.lock | 18 + 63 files changed, 281722 insertions(+), 3 deletions(-) create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Controller#Controller.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.dbg.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.dbg.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#ProxyAdmin.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#ProxyAdmin.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.dbg.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.dbg.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_DisputeManager.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_SubgraphService.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_DisputeManager.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_SubgraphService.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/build-info/e51c04f0f0fdce5715962999616918b7.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/deployed_addresses.json create mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/journal.jsonl diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index 57f1d8f89..6a57472a5 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -3,6 +3,7 @@ import '@nomicfoundation/hardhat-toolbox' import '@nomicfoundation/hardhat-ignition-ethers' import 'hardhat-storage-layout' import 'hardhat-contract-sizer' +import 'hardhat-secure-accounts' import { HardhatUserConfig } from 'hardhat/config' @@ -20,17 +21,20 @@ const config: HardhatUserConfig = { artifacts: './build/contracts', sources: './contracts', }, + secureAccounts: { + enabled: true, + }, networks: { hardhat: { + secureAccounts: { + enabled: false, + }, accounts: { mnemonic: 'myth like bonus scare over problem client lizard pioneer submit female collect', }, }, arbitrumSepolia: { url: 'https://sepolia-rollup.arbitrum.io/rpc', - accounts: { - mnemonic: process.env.MNEMONIC ?? '', - }, }, }, etherscan: { diff --git a/packages/horizon/package.json b/packages/horizon/package.json index 4c6624051..7c3d26153 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -37,6 +37,7 @@ "hardhat": "^2.20.1", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.8", + "hardhat-secure-accounts": "^1.0.4", "hardhat-storage-layout": "^0.1.7", "lint-staged": "^15.2.2", "prettier": "^3.2.5", diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts index b173873fb..a1158bb8b 100644 --- a/packages/subgraph-service/hardhat.config.ts +++ b/packages/subgraph-service/hardhat.config.ts @@ -3,6 +3,7 @@ import '@nomicfoundation/hardhat-ignition-ethers' import '@nomicfoundation/hardhat-toolbox' import 'hardhat-contract-sizer' import 'hardhat-storage-layout' +import 'hardhat-secure-accounts' import 'solidity-docgen' import { HardhatUserConfig } from 'hardhat/config' @@ -21,6 +22,22 @@ const config: HardhatUserConfig = { artifacts: './build/contracts', sources: './contracts', }, + secureAccounts: { + enabled: true, + }, + networks: { + hardhat: { + secureAccounts: { + enabled: false, + }, + accounts: { + mnemonic: 'myth like bonus scare over problem client lizard pioneer submit female collect', + }, + }, + arbitrumSepolia: { + url: 'https://sepolia-rollup.arbitrum.io/rpc', + }, + }, } export default config diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json new file mode 100644 index 000000000..1264fb6e0 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json @@ -0,0 +1,159 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BridgeEscrow", + "sourceName": "contracts/gateway/BridgeEscrow.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "approveAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "revokeAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json new file mode 100644 index 000000000..1264fb6e0 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json @@ -0,0 +1,159 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BridgeEscrow", + "sourceName": "contracts/gateway/BridgeEscrow.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "approveAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "revokeAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Controller#Controller.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Controller#Controller.json new file mode 100644 index 000000000..6979339d2 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Controller#Controller.json @@ -0,0 +1,349 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Controller", + "sourceName": "contracts/governance/Controller.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PartialPauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "SetContractProxy", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + } + ], + "name": "getContractProxy", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPartialPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "partialPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + } + ], + "name": "setContractProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_toPartialPause", + "type": "bool" + } + ], + "name": "setPartialPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_toPause", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + } + ], + "name": "unsetContractProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "updateController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506100243361003360201b6109b21760201c565b61002e6001610055565b6100e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff1615158115151415610075576100e4565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff910416156100a157426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a15b50565b610ba0806100f66000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80635c975abb116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80635c975abb146101e057806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b80632e292fc7116100de5780632e292fc71461017757806348bde20c146101935780634fc07d75146101b957806356371bd8146101c15761010b565b80630c340a2414610110578063147ddef51461013457806316c38b3c1461014e57806324a3d6221461016f575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b61013c6102c7565b60408051918252519081900360200190f35b61016d6004803603602081101561016457600080fd5b503515156102cd565b005b610118610337565b61017f610346565b604080519115158252519081900360200190f35b61016d600480360360208110156101a957600080fd5b50356001600160a01b0316610356565b610118610412565b61016d600480360360208110156101d757600080fd5b50351515610421565b61017f610488565b61016d610498565b61016d6004803603602081101561020657600080fd5b50356105a6565b61013c610651565b61016d6004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b61016d6004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b61016d6004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b60025481565b6000546001600160a01b03163314806102f057506004546001600160a01b031633145b61032b5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b610334816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103ae576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610409576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61033481610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061044457506004546001600160a01b031633145b61047f5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61033481610ab7565b600154600160a81b900460ff1690565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f457610334565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad757610334565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca26469706673582212207cecec10a8617577e80b5c52f6cd82da5e5974468c039848ed5e90b25c8267c764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80635c975abb116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80635c975abb146101e057806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b80632e292fc7116100de5780632e292fc71461017757806348bde20c146101935780634fc07d75146101b957806356371bd8146101c15761010b565b80630c340a2414610110578063147ddef51461013457806316c38b3c1461014e57806324a3d6221461016f575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b61013c6102c7565b60408051918252519081900360200190f35b61016d6004803603602081101561016457600080fd5b503515156102cd565b005b610118610337565b61017f610346565b604080519115158252519081900360200190f35b61016d600480360360208110156101a957600080fd5b50356001600160a01b0316610356565b610118610412565b61016d600480360360208110156101d757600080fd5b50351515610421565b61017f610488565b61016d610498565b61016d6004803603602081101561020657600080fd5b50356105a6565b61013c610651565b61016d6004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b61016d6004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b61016d6004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b60025481565b6000546001600160a01b03163314806102f057506004546001600160a01b031633145b61032b5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b610334816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103ae576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610409576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61033481610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061044457506004546001600160a01b031633145b61047f5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61033481610ab7565b600154600160a81b900460ff1690565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f457610334565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad757610334565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca26469706673582212207cecec10a8617577e80b5c52f6cd82da5e5974468c039848ed5e90b25c8267c764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation.json new file mode 100644 index 000000000..134085c89 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation.json @@ -0,0 +1,707 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2Curation", + "sourceName": "contracts/l2/curation/L2Curation.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + } + ], + "name": "Burned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Collected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationTax", + "type": "uint256" + } + ], + "name": "Signalled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "bondingCurve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_tokensOutMin", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTaxPercentage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTokenMaster", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultReserveRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCuratorSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_curationTaxPercentage", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isCurated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumCurationDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_signalOutMin", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "mintTaxFree", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pools", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "reserveRatio", + "type": "uint32" + }, + { + "internalType": "contract IGraphCurationToken", + "name": "gcs", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_percentage", + "type": "uint32" + } + ], + "name": "setCurationTaxPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + } + ], + "name": "setCurationTokenMaster", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "setDefaultReserveRatio", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "setMinimumCurationDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + } + ], + "name": "signalToTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalToTokensNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json new file mode 100644 index 000000000..134085c89 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json @@ -0,0 +1,707 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2Curation", + "sourceName": "contracts/l2/curation/L2Curation.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + } + ], + "name": "Burned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Collected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "curator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "signal", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationTax", + "type": "uint256" + } + ], + "name": "Signalled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "bondingCurve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_tokensOutMin", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTaxPercentage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "curationTokenMaster", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultReserveRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCuratorSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_curationTaxPercentage", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isCurated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumCurationDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_signalOutMin", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "mintTaxFree", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pools", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "reserveRatio", + "type": "uint32" + }, + { + "internalType": "contract IGraphCurationToken", + "name": "gcs", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_percentage", + "type": "uint32" + } + ], + "name": "setCurationTaxPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + } + ], + "name": "setCurationTokenMaster", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "setDefaultReserveRatio", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "setMinimumCurationDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + } + ], + "name": "signalToTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignalToTokensNoTax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json new file mode 100644 index 000000000..b7220dcc7 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json @@ -0,0 +1,414 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphCurationToken", + "sourceName": "contracts/curation/GraphCurationToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506114ec806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.dbg.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.dbg.json new file mode 100644 index 000000000..4922c5523 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../build-info/e51c04f0f0fdce5715962999616918b7.json" +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.json new file mode 100644 index 000000000..b34c8dc47 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.json @@ -0,0 +1,1390 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "DisputeManager", + "sourceName": "contracts/DisputeManager.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expectedLength", + "type": "uint256" + } + ], + "name": "AttestationInvalidBytesLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerDisputeAlreadyCreated", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum IDisputeManager.DisputeStatus", + "name": "status", + "type": "uint8" + } + ], + "name": "DisputeManagerDisputeNotPending", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerDisputePeriodNotFinished", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerDisputePeriodZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "DisputeManagerIndexerNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerInvalidDispute", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "DisputeManagerInvalidDisputeDeposit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "cut", + "type": "uint32" + } + ], + "name": "DisputeManagerInvalidFishermanReward", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxSlashingCut", + "type": "uint32" + } + ], + "name": "DisputeManagerInvalidMaxSlashingCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokensSlash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokensSlash", + "type": "uint256" + } + ], + "name": "DisputeManagerInvalidTokensSlash", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "relatedDisputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerMustAcceptRelatedDispute", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "requestCID1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "requestCID2", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID2", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId2", + "type": "bytes32" + } + ], + "name": "DisputeManagerNonConflictingAttestations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId2", + "type": "bytes32" + } + ], + "name": "DisputeManagerNonMatchingSubgraphDeployment", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerNotArbitrator", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerNotFisherman", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "arbitrator", + "type": "address" + } + ], + "name": "ArbitratorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "DisputeDepositSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeDrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId1", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId2", + "type": "bytes32" + } + ], + "name": "DisputeLinked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + } + ], + "name": "DisputePeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeRejected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "fishermanRewardCut", + "type": "uint32" + } + ], + "name": "FishermanRewardCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "name": "IndexingDisputeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "maxSlashingCut", + "type": "uint32" + } + ], + "name": "MaxSlashingCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "attestation", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "name": "QueryDisputeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "subgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_FISHERMAN_REWARD_CUT", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokensSlash", + "type": "uint256" + } + ], + "name": "acceptDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "arbitrator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation2", + "type": "tuple" + } + ], + "name": "areConflictingAttestations", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "cancelDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + } + ], + "name": "createIndexingDispute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "name": "createQueryDispute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "attestationData1", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData2", + "type": "bytes" + } + ], + "name": "createQueryDisputeConflict", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disputeDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "disputePeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "disputes", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deposit", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "relatedDisputeId", + "type": "bytes32" + }, + { + "internalType": "enum IDisputeManager.DisputeType", + "name": "disputeType", + "type": "uint8" + }, + { + "internalType": "enum IDisputeManager.DisputeStatus", + "name": "status", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "drawDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "internalType": "struct Attestation.Receipt", + "name": "receipt", + "type": "tuple" + } + ], + "name": "encodeReceipt", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fishermanRewardCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation", + "type": "tuple" + } + ], + "name": "getAttestationIndexer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDisputePeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "getStakeSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "arbitrator", + "type": "address" + }, + { + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "fishermanRewardCut_", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxSlashingCut_", + "type": "uint32" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "isDisputeCreated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlashingCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "rejectDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "arbitrator", + "type": "address" + } + ], + "name": "setArbitrator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "setDisputeDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + } + ], + "name": "setDisputePeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "fishermanRewardCut_", + "type": "uint32" + } + ], + "name": "setFishermanRewardCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxSlashingCut_", + "type": "uint32" + } + ], + "name": "setMaxSlashingCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract ISubgraphService", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101c060405234801561001157600080fd5b506040516138243803806138248339810160408190526100309161049b565b806001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b29061033b565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e59061033b565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e9061033b565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b60208201526101589061033b565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526101909061033b565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb9061033b565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102099061033b565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102459061033b565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a9061033b565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a4506103356103e9565b50610519565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161037691815260200190565b602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b7919061049b565b9050826001600160a01b0382166103e25760405163218f5add60e11b815260040161007191906104cb565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104395760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104985780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156104ad57600080fd5b81516001600160a01b03811681146104c457600080fd5b9392505050565b602081526000825180602084015260005b818110156104f957602081860181015160408684010152016104dc565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516132a861057c60003960005050600050506000505060005050600050506000505060005050600050506000611fe30152600061160e01526132a86000f3fe608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.dbg.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.dbg.json new file mode 100644 index 000000000..4922c5523 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../build-info/e51c04f0f0fdce5715962999616918b7.json" +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.json new file mode 100644 index 000000000..b34c8dc47 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.json @@ -0,0 +1,1390 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "DisputeManager", + "sourceName": "contracts/DisputeManager.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expectedLength", + "type": "uint256" + } + ], + "name": "AttestationInvalidBytesLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerDisputeAlreadyCreated", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum IDisputeManager.DisputeStatus", + "name": "status", + "type": "uint8" + } + ], + "name": "DisputeManagerDisputeNotPending", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerDisputePeriodNotFinished", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerDisputePeriodZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "DisputeManagerIndexerNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerInvalidDispute", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "DisputeManagerInvalidDisputeDeposit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "cut", + "type": "uint32" + } + ], + "name": "DisputeManagerInvalidFishermanReward", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxSlashingCut", + "type": "uint32" + } + ], + "name": "DisputeManagerInvalidMaxSlashingCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokensSlash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokensSlash", + "type": "uint256" + } + ], + "name": "DisputeManagerInvalidTokensSlash", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "relatedDisputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerMustAcceptRelatedDispute", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "requestCID1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "requestCID2", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID2", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId2", + "type": "bytes32" + } + ], + "name": "DisputeManagerNonConflictingAttestations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId2", + "type": "bytes32" + } + ], + "name": "DisputeManagerNonMatchingSubgraphDeployment", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerNotArbitrator", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerNotFisherman", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "arbitrator", + "type": "address" + } + ], + "name": "ArbitratorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "DisputeDepositSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeDrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId1", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId2", + "type": "bytes32" + } + ], + "name": "DisputeLinked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + } + ], + "name": "DisputePeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeRejected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "fishermanRewardCut", + "type": "uint32" + } + ], + "name": "FishermanRewardCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "name": "IndexingDisputeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "maxSlashingCut", + "type": "uint32" + } + ], + "name": "MaxSlashingCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "attestation", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "name": "QueryDisputeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "subgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_FISHERMAN_REWARD_CUT", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokensSlash", + "type": "uint256" + } + ], + "name": "acceptDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "arbitrator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation2", + "type": "tuple" + } + ], + "name": "areConflictingAttestations", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "cancelDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + } + ], + "name": "createIndexingDispute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "name": "createQueryDispute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "attestationData1", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData2", + "type": "bytes" + } + ], + "name": "createQueryDisputeConflict", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disputeDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "disputePeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "disputes", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deposit", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "relatedDisputeId", + "type": "bytes32" + }, + { + "internalType": "enum IDisputeManager.DisputeType", + "name": "disputeType", + "type": "uint8" + }, + { + "internalType": "enum IDisputeManager.DisputeStatus", + "name": "status", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "drawDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "internalType": "struct Attestation.Receipt", + "name": "receipt", + "type": "tuple" + } + ], + "name": "encodeReceipt", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fishermanRewardCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation", + "type": "tuple" + } + ], + "name": "getAttestationIndexer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDisputePeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "getStakeSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "arbitrator", + "type": "address" + }, + { + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "fishermanRewardCut_", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxSlashingCut_", + "type": "uint32" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "isDisputeCreated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlashingCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "rejectDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "arbitrator", + "type": "address" + } + ], + "name": "setArbitrator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "setDisputeDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + } + ], + "name": "setDisputePeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "fishermanRewardCut_", + "type": "uint32" + } + ], + "name": "setFishermanRewardCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxSlashingCut_", + "type": "uint32" + } + ], + "name": "setMaxSlashingCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract ISubgraphService", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101c060405234801561001157600080fd5b506040516138243803806138248339810160408190526100309161049b565b806001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b29061033b565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e59061033b565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e9061033b565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b60208201526101589061033b565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526101909061033b565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb9061033b565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102099061033b565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102459061033b565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a9061033b565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a4506103356103e9565b50610519565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161037691815260200190565b602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b7919061049b565b9050826001600160a01b0382166103e25760405163218f5add60e11b815260040161007191906104cb565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104395760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104985780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156104ad57600080fd5b81516001600160a01b03811681146104c457600080fd5b9392505050565b602081526000825180602084015260005b818110156104f957602081860181015160408684010152016104dc565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516132a861057c60003960005050600050506000505060005050600050506000505060005050600050506000611fe30152600061160e01526132a86000f3fe608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#ProxyAdmin.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#ProxyAdmin.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#ProxyAdmin.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json new file mode 100644 index 000000000..359505960 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json @@ -0,0 +1,364 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "EpochManager", + "sourceName": "contracts/epochs/EpochManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + } + ], + "name": "EpochLengthUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "EpochRun", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "blockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blockNum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlockSinceStart", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epoch", + "type": "uint256" + } + ], + "name": "epochsSince", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochsSinceUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isCurrentEpochRun", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastRunEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "runEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json new file mode 100644 index 000000000..359505960 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json @@ -0,0 +1,364 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "EpochManager", + "sourceName": "contracts/epochs/EpochManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + } + ], + "name": "EpochLengthUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "EpochRun", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "blockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blockNum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlockSinceStart", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epoch", + "type": "uint256" + } + ], + "name": "epochsSince", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochsSinceUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isCurrentEpochRun", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastLengthUpdateEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastRunEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "runEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json new file mode 100644 index 000000000..9015bd053 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json @@ -0,0 +1,308 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphPayments", + "sourceName": "contracts/payments/GraphPayments.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "GraphPaymentsInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "name": "GraphPaymentsInvalidProtocolPaymentCut", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationPool", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensProtocol", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [], + "name": "PROTOCOL_PAYMENT_CUT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json new file mode 100644 index 000000000..9015bd053 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json @@ -0,0 +1,308 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphPayments", + "sourceName": "contracts/payments/GraphPayments.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "GraphPaymentsInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "name": "GraphPaymentsInvalidProtocolPaymentCut", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationPool", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensProtocol", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [], + "name": "PROTOCOL_PAYMENT_CUT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json new file mode 100644 index 000000000..07f0623c5 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json @@ -0,0 +1,234 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxyAdmin", + "sourceName": "contracts/upgrades/GraphProxyAdmin.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract GraphUpgradeable", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract GraphUpgradeable", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "getProxyPendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506100243361002960201b610a0c1760201c565b61004b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610a648061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json new file mode 100644 index 000000000..5889eeaf0 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json @@ -0,0 +1,750 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphToken", + "sourceName": "contracts/l2/token/L2GraphToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeBurned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "gateway", + "type": "address" + } + ], + "name": "GatewaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Address", + "type": "address" + } + ], + "name": "L1AddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1Address", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_gw", + "type": "address" + } + ], + "name": "setGateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "setL1Address", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json new file mode 100644 index 000000000..5889eeaf0 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json @@ -0,0 +1,750 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphToken", + "sourceName": "contracts/l2/token/L2GraphToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeBurned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BridgeMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "gateway", + "type": "address" + } + ], + "name": "GatewaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Address", + "type": "address" + } + ], + "name": "L1AddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MinterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "NewPendingOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1Address", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_gw", + "type": "address" + } + ], + "name": "setGateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + } + ], + "name": "setL1Address", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json new file mode 100644 index 000000000..0fa0a97d2 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json @@ -0,0 +1,647 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphTokenGateway", + "sourceName": "contracts/l2/gateway/L2GraphTokenGateway.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Counterpart", + "type": "address" + } + ], + "name": "L1CounterpartAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1GRT", + "type": "address" + } + ], + "name": "L1TokenAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Router", + "type": "address" + } + ], + "name": "L2RouterSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PartialPauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "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": "_id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "TxToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2ToL1Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "exitNum", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WithdrawalInitiated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l1ERC20", + "type": "address" + } + ], + "name": "calculateL2TokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "finalizeInboundTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "getOutboundCalldata", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1Counterpart", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1GRT", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPartialPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Counterpart", + "type": "address" + } + ], + "name": "setL1CounterpartAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1GRT", + "type": "address" + } + ], + "name": "setL1TokenAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2Router", + "type": "address" + } + ], + "name": "setL2Router", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_newPaused", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json new file mode 100644 index 000000000..0fa0a97d2 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json @@ -0,0 +1,647 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "L2GraphTokenGateway", + "sourceName": "contracts/l2/gateway/L2GraphTokenGateway.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Counterpart", + "type": "address" + } + ], + "name": "L1CounterpartAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1GRT", + "type": "address" + } + ], + "name": "L1TokenAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l2Router", + "type": "address" + } + ], + "name": "L2RouterSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PartialPauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + } + ], + "name": "PauseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "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": "_id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "TxToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2ToL1Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "exitNum", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WithdrawalInitiated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "l1ERC20", + "type": "address" + } + ], + "name": "calculateL2TokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "finalizeInboundTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "getOutboundCalldata", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1Counterpart", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1GRT", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPartialPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPauseTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Counterpart", + "type": "address" + } + ], + "name": "setL1CounterpartAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1GRT", + "type": "address" + } + ], + "name": "setL1TokenAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2Router", + "type": "address" + } + ], + "name": "setL2Router", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_newPaused", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json new file mode 100644 index 000000000..c7f1f49b4 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TransparentUpgradeableProxy", + "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "ERC1967InvalidAdmin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { + "inputs": [], + "name": "ERC1967NonPayable", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [], + "name": "ProxyDeniedAdminAccess", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json new file mode 100644 index 000000000..c7f1f49b4 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TransparentUpgradeableProxy", + "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "ERC1967InvalidAdmin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { + "inputs": [], + "name": "ERC1967NonPayable", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [], + "name": "ProxyDeniedAdminAccess", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json new file mode 100644 index 000000000..c619989d6 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json @@ -0,0 +1,2384 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "HorizonStaking", + "sourceName": "contracts/staking/HorizonStaking.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "stakingExtensionAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "subgraphDataServiceAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingCallerIsServiceProvider", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientIdleStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientStakeForLegacyAllocations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minRequired", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientTokens", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidBeneficiaryZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "HorizonStakingInvalidDelegationFeeCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPool", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPoolState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + } + ], + "name": "HorizonStakingInvalidMaxVerifierCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidProvision", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidServiceProviderZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "HorizonStakingInvalidThawingPeriod", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidVerifierZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroShares", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "HorizonStakingNotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingNothingThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingProvisionAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingSlippageProtection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "HorizonStakingStillThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingTooManyThawRequests", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingTooManyTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingVerifierNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyController", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyGovernor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "AllowedLockedVerifierSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegatedTokensWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "DelegationFeeCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "DelegationSlashingEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashingSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "MaxThawingPeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "OperatorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersStaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionThawed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "StakeLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "ThawRequestCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bool", + "name": "valid", + "type": "bool" + } + ], + "name": "ThawRequestFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawRequestsFulfilled", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ThawRequestsFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "ThawingPeriodCleared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDeprovisioned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensToDelegationPoolAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensUndelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "VerifierTokensSent", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "acceptProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToDelegationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clearThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSharesOut", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "deprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isAuthorized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provisionLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldServiceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minSharesForNewProvider", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "redelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "reprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setAllowedLockedVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "setDelegationFeeCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setDelegationSlashingEnabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "setMaxThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperatorLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "newMaxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "newThawingPeriod", + "type": "uint64" + } + ], + "name": "setProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensVerifier", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifierDestination", + "type": "address" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b506040516160913803806160918339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ae16105b06000396000610331015260008181610eb30152818161180b015281816118be015281816118e0015281816134240152818161425401526145900152600050506000505060005050600050506000505060006133dd015260005050600050506000505060008181610e7d01528181611a5c015281816129af01528181612cc601528181612d5d01528181612ef701528181613ec1015281816140d0015281816141e401526142fc0152615ae16000f3fe6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json new file mode 100644 index 000000000..c619989d6 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json @@ -0,0 +1,2384 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "HorizonStaking", + "sourceName": "contracts/staking/HorizonStaking.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "stakingExtensionAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "subgraphDataServiceAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingCallerIsServiceProvider", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientIdleStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientStakeForLegacyAllocations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minRequired", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientTokens", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidBeneficiaryZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "HorizonStakingInvalidDelegationFeeCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPool", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPoolState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + } + ], + "name": "HorizonStakingInvalidMaxVerifierCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidProvision", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidServiceProviderZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "HorizonStakingInvalidThawingPeriod", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidVerifierZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroShares", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "HorizonStakingNotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingNothingThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingProvisionAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingSlippageProtection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "HorizonStakingStillThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingTooManyThawRequests", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingTooManyTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingVerifierNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyController", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyGovernor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "AllowedLockedVerifierSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegatedTokensWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "DelegationFeeCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "DelegationSlashingEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashingSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "MaxThawingPeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "OperatorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersStaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionThawed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "StakeLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "ThawRequestCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bool", + "name": "valid", + "type": "bool" + } + ], + "name": "ThawRequestFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawRequestsFulfilled", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ThawRequestsFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "ThawingPeriodCleared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDeprovisioned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensToDelegationPoolAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensUndelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "VerifierTokensSent", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "acceptProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToDelegationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clearThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSharesOut", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "deprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isAuthorized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provisionLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldServiceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minSharesForNewProvider", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "redelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "reprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setAllowedLockedVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "setDelegationFeeCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setDelegationSlashingEnabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "setMaxThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperatorLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "newMaxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "newThawingPeriod", + "type": "uint64" + } + ], + "name": "setProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensVerifier", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifierDestination", + "type": "address" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b506040516160913803806160918339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ae16105b06000396000610331015260008181610eb30152818161180b015281816118be015281816118e0015281816134240152818161425401526145900152600050506000505060005050600050506000505060006133dd015260005050600050506000505060008181610e7d01528181611a5c015281816129af01528181612cc601528181612d5d01528181612ef701528181613ec1015281816140d0015281816141e401526142fc0152615ae16000f3fe6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json new file mode 100644 index 000000000..fc0c0c29f --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json @@ -0,0 +1,55 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ExponentialRebates", + "sourceName": "contracts/staking/libraries/ExponentialRebates.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stake", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "alphaNumerator", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "alphaDenominator", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "lambdaNumerator", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "lambdaDenominator", + "type": "uint32" + } + ], + "name": "exponentialRebates", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x610c2d610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json new file mode 100644 index 000000000..d773a8b94 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json @@ -0,0 +1,1173 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "HorizonStakingExtension", + "sourceName": "contracts/staking/HorizonStakingExtension.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "subgraphDataServiceAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyController", + "type": "error" + }, + { + "inputs": [], + "name": "ManagedOnlyGovernor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "PPMMathInvalidPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isPublic", + "type": "bool" + } + ], + "name": "AllocationClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "assetHolder", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolTax", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryRebates", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "delegationRewards", + "type": "uint256" + } + ], + "name": "RebateCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "inputs": [], + "name": "__DEPRECATED_getThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + } + ], + "name": "closeAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "collectedFees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "__DEPRECATED_effectiveAllocation", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "distributedRebates", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingExtension.Allocation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocationData", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocationState", + "outputs": [ + { + "internalType": "enum IHorizonStakingExtension.AllocationState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "getIndexerStakedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getSubgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "hasStake", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "isActiveAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "isAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "isOperator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x6101e060405234801561001157600080fd5b5060405161311a38038061311a83398101604081905261003091610411565b818181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610347565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610347565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610347565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610347565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610347565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610347565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610347565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610347565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610347565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b03166101c052506104b4915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038291815260200190565b602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c39190610444565b9050826001600160a01b0382166103ee5760405163218f5add60e11b81526004016100749190610466565b5092915050565b80516001600160a01b038116811461040c57600080fd5b919050565b6000806040838503121561042457600080fd5b61042d836103f5565b915061043b602084016103f5565b90509250929050565b60006020828403121561045657600080fd5b61045f826103f5565b9392505050565b602081526000825180602084015260005b818110156104945760208186018101516040868401015201610477565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612bb061056a6000396000818161196c0152611b6c01526000611d910152600050506000505060008181611e73015281816121bf01526122c901526000818161120a01526118a5015260008181610be70152610e19015260005050600050506000505060008181610f870152818161113d01528181611d5901528181611ee801526120d00152612bb06000f3fe6080604052600436106101dc5760003560e01c806398c657dc11610102578063b7ca724111610095578063e73e14bf11610064578063e73e14bf14610a60578063f1d60d6614610a98578063fb744cc014610ab8578063fc54fb2714610ad857600080fd5b8063b7ca724114610926578063c0641994146109e9578063ccebcabb14610a04578063e2e1e8e914610a3357600080fd5b8063a784d498116100d1578063a784d49814610856578063ac9650d814610876578063ae4fe67a146108a3578063b6363cf2146108dc57600080fd5b806398c657dc146107195780639ce7abe514610746578063a212daf814610766578063a2594d821461083657600080fd5b8063561285e41161017a578063872d048911610149578063872d0489146106385780638cc01c86146106585780638d3c100a146106d95780639054e343146106f957600080fd5b8063561285e4146105865780636a3ca383146105e85780637573ef4f146106185780637a766460146102fb57600080fd5b806325d9897e116101b657806325d9897e1461033157806339514ad21461045457806344c32a611461048657806355c85269146104a857600080fd5b806308ce5f68146102335780630e022923146102665780631787e69f146102fb57600080fd5b3661022e5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561023f57600080fd5b5061025361024e3660046125ad565b610af0565b6040519081526020015b60405180910390f35b34801561027257600080fd5b506102866102813660046125e6565b610b05565b60405161025d919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561030757600080fd5b506102536103163660046125e6565b6001600160a01b03166000908152600e602052604090205490565b34801561033d57600080fd5b5061044761034c3660046125ad565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b60405161025d9190612603565b34801561046057600080fd5b50601a546001600160401b03165b6040516001600160401b03909116815260200161025d565b34801561049257600080fd5b506104a66104a13660046126a4565b610be5565b005b3480156104b457600080fd5b506105546104c33660046125e6565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161025d565b34801561059257600080fd5b506105a66105a13660046125ad565b610c93565b60405161025d9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156105f457600080fd5b506106086106033660046125e6565b610d39565b604051901515815260200161025d565b34801561062457600080fd5b506102536106333660046126d0565b610d5e565b34801561064457600080fd5b5061025361065336600461271f565b610dc2565b34801561066457600080fd5b506106be6106733660046125e6565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b6040805182518152602092830151928101929092520161025d565b3480156106e557600080fd5b506104a66106f4366004612768565b610e17565b34801561070557600080fd5b5061025361071436600461278d565b6112e3565b34801561072557600080fd5b506107396107343660046125e6565b6113cb565b60405161025d91906127e3565b34801561075257600080fd5b506104a661076136600461280b565b6113d6565b34801561077257600080fd5b5061080361078136600461278d565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b60405161025d91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561084257600080fd5b506104a66108513660046125e6565b611501565b34801561086257600080fd5b506102536108713660046125e6565b61161d565b34801561088257600080fd5b50610896610891366004612890565b611628565b60405161025d9190612929565b3480156108af57600080fd5b506106086108be3660046125e6565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e857600080fd5b506106086108f73660046125ad565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093257600080fd5b506109ad6109413660046129a9565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b60405161025d9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b3480156109f557600080fd5b50600d5463ffffffff1661046e565b348015610a1057600080fd5b50610a24610a1f36600461278d565b61170f565b6040519051815260200161025d565b348015610a3f57600080fd5b50610253610a4e3660046129a9565b60009081526010602052604090205490565b348015610a6c57600080fd5b50610608610a7b3660046125e6565b6001600160a01b03166000908152600e6020526040902054151590565b348015610aa457600080fd5b50610608610ab33660046125e6565b611761565b348015610ac457600080fd5b50610253610ad33660046125ad565b611786565b348015610ae457600080fd5b5060205460ff16610608565b6000610afc8383611792565b90505b92915050565b610b6060405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906129c2565b15610c8557604051632b37d9d160e21b815260040160405180910390fd5b610c8f82826117ca565b5050565b610cc56040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b610cf76040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000610d038585611b68565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b60006001610d4683611bec565b6002811115610d5757610d576127cd565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610d9857610d986127cd565b6002811115610da957610da96127cd565b81526020019081526020016000205490505b9392505050565b600080610dcf8585611792565b90506000610ddd8686611c45565b90506000610df163ffffffff8616846129fa565b90506000610dff8383611c70565b9050610e0b8185612a11565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906129c2565b15610eb757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b6044820152606401610225565b6000610f0182611bec565b90506000816002811115610f1757610f176127cd565b03610f4f5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b6044820152606401610225565b82600003610f5c57505050565b6001600160a01b0382166000908152600f60205260408120600181015490918590808080610fb633867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611c87565b600d54610fd1908690600160401b900463ffffffff16611d44565b9350610fdd8486612a24565b600d54909550610ffe9087908790640100000000900463ffffffff16611d7d565b925061100a8386612a24565b945084876005015461101c9190612a11565b6005880155600287015460009015806110425750601954600160a01b900463ffffffff16155b61110d5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273__$8eb3cac1482a31d7a7f2cbe7dc8bdcd821$__906349484d819060c401602060405180830381865af41580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190612a37565b611110565b60005b9050611120818960080154611f90565b925061112c8387611c70565b925061116c61113b8488612a24565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690611faa565b82156111d4578288600801546111829190612a11565b6008890155875461119c906001600160a01b031684611ff2565b91506111a88284612a24565b88546001600160a01b039081166000818152601760205260409020549295506111d49286921615612084565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190612a37565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611329576000915050610dbb565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b80156113bf576000818152601d602052604090206001810154426001600160401b03909116116113ae5760028301546001840154825461139391906129fa565b61139d9190612a50565b6113a79085612a11565b93506113b4565b506113bf565b600201549050611353565b50909695505050505050565b6000610aff82611bec565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190612a72565b6001600160a01b0316336001600160a01b03161461149b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906114c99086908690600401612a8f565b600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190612a72565b6001600160a01b0316336001600160a01b0316146115c65760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505050565b6000610aff826120fa565b604080516000815260208101909152606090826001600160401b0381111561165257611652612abe565b60405190808252806020026020018201604052801561168557816020015b60608152602001906001900390816116705790505b50915060005b83811015611707576116e2308686848181106116a9576116a9612ad4565b90506020028101906116bb9190612aea565b856040516020016116ce93929190612b37565b604051602081830303815290604052612145565b8382815181106116f4576116f4612ad4565b602090810291909101015260010161168b565b505092915050565b60408051602081019091526000815260408051602081019091526000815260006117398686611b68565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b60008061176d83611bec565b600281111561177e5761177e6127cd565b141592915050565b6000610afc8383611c45565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610afc9190612a24565b60006117d583611bec565b905060018160028111156117eb576117eb6127cd565b146118225760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b6044820152606401610225565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190612a37565b60808201819052606082015160009161193d91611f90565b9050600082600001516001600160a01b0316336001600160a01b031614806119ae575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff16821115806119d157506040830151155b15611a0b5780611a0b5760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b6044820152606401610225565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611aef57808015611a4557508415155b15611a5d57611a588684600001516121bb565b611a6c565b611a6a83602001516122a8565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611a999190612a24565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611ad99190612a24565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611bc157506001600160a01b0382166000908152601460205260409020610aff565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610aff565b6001600160a01b038082166000908152600f6020526040812080549192909116611c195750600092915050565b600381015415801590611c2e57506004810154155b15611c3c5750600192915050565b50600292915050565b600080611c528484611b68565b905080600501548160020154611c689190612a24565b949350505050565b600081831115611c805781610afc565b5090919050565b8015611d3f576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0791906129c2565b611d3f5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610225565b505050565b600080611d518484612336565b9050610afc817f000000000000000000000000000000000000000000000000000000000000000061115d565b600082600003611d8f57506000610dbb565b7f000000000000000000000000000000000000000000000000000000000000000060008315801590611dc957506001600160a01b03821615155b9050808015611e3c5750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c91906129c2565b15611f84576000611e4d8686612336565b90508015611f7a576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190612a37565b50611f1883827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190612388565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050505b9250610dbb915050565b50600095945050505050565b6000818311611fa0576000610afc565b610afc8284612a24565b8015610c8f57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561160157600080fd5b6001600160a01b038216600090815260146020526040812060028101548291901580159061203157508054600160401b900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff600160401b90910481169087906123c316565b90506120638186612a24565b92508282600201546120759190612a11565b6002830155505b509392505050565b8260000361209157505050565b80156120a157611d3f828461242a565b6001600160a01b03808316600090815260176020526040902054166120f481156120cb57816120cd565b835b857f0000000000000000000000000000000000000000000000000000000000000000611f08565b50505050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916121319190612a24565b61213b9190612a24565b610aff9190612a24565b6060600080846001600160a01b0316846040516121629190612b5e565b600060405180830381855af49150503d806000811461219d576040519150601f19603f3d011682016040523d82523d6000602084013e6121a2565b606091505b50915091506121b28583836124a9565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af1158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c9190612a37565b90508060000361225b57505050565b60006122678383612505565b905060006122758284612a24565b6001600160a01b038086166000908152601760205260409020549192506122a191839187911615612084565b5050505050565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff9190612a37565b600061234582620f4240101590565b829061236757604051633dc311df60e01b815260040161022591815260200190565b5061237e8361237984620f4240612a24565b6123c3565b610afc9084612a24565b8015611d3f5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611cc4565b60006123d283620f4240101590565b806123e557506123e582620f4240101590565b8383909161240f5760405163768bf0eb60e11b815260048101929092526024820152604401610225565b50620f4240905061242083856129fa565b610afc9190612a50565b6001600160a01b0382166000908152600e602052604090205461244e908290612a11565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061249d9084815260200190565b60405180910390a25050565b6060826124be576124b98261256c565b610dbb565b81511580156124d557506001600160a01b0384163b155b156124fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610225565b5080610dbb565b6001600160a01b038216600090815260146020526040812060028101548291901580159061254557508054640100000000900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff64010000000090910481169087906123c316565b80511561257c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b038116811461259557600080fd5b600080604083850312156125c057600080fd5b82356125cb81612598565b915060208301356125db81612598565b809150509250929050565b6000602082840312156125f857600080fd5b8135610afc81612598565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a083015161266160a08401826001600160401b03169052565b5060c083015161267960c084018263ffffffff169052565b5060e083015161269460e08401826001600160401b03169052565b5061010092830151919092015290565b600080604083850312156126b757600080fd5b82356126c281612598565b946020939093013593505050565b6000806000606084860312156126e557600080fd5b83356126f081612598565b9250602084013561270081612598565b915060408401356003811061271457600080fd5b809150509250925092565b60008060006060848603121561273457600080fd5b833561273f81612598565b9250602084013561274f81612598565b9150604084013563ffffffff8116811461271457600080fd5b6000806040838503121561277b57600080fd5b8235915060208301356125db81612598565b6000806000606084860312156127a257600080fd5b83356127ad81612598565b925060208401356127bd81612598565b9150604084013561271481612598565b634e487b7160e01b600052602160045260246000fd5b602081016003831061280557634e487b7160e01b600052602160045260246000fd5b91905290565b60008060006040848603121561282057600080fd5b833561282b81612598565b925060208401356001600160401b0381111561284657600080fd5b8401601f8101861361285757600080fd5b80356001600160401b0381111561286d57600080fd5b86602082840101111561287f57600080fd5b939660209190910195509293505050565b600080602083850312156128a357600080fd5b82356001600160401b038111156128b957600080fd5b8301601f810185136128ca57600080fd5b80356001600160401b038111156128e057600080fd5b8560208260051b84010111156128f557600080fd5b6020919091019590945092505050565b60005b83811015612920578181015183820152602001612908565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561299d57603f198786030184528151805180875261297a816020890160208501612905565b601f01601f19169590950160209081019550938401939190910190600101612951565b50929695505050505050565b6000602082840312156129bb57600080fd5b5035919050565b6000602082840312156129d457600080fd5b81518015158114610afc57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610aff57610aff6129e4565b80820180821115610aff57610aff6129e4565b81810381811115610aff57610aff6129e4565b600060208284031215612a4957600080fd5b5051919050565b600082612a6d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a8457600080fd5b8151610afc81612598565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612b0157600080fd5b8301803591506001600160401b03821115612b1b57600080fd5b602001915036819003821315612b3057600080fd5b9250929050565b828482376000838201600081528351612b54818360208801612905565b0195945050505050565b60008251612b70818460208701612905565b919091019291505056fea26469706673582212202248057a8bce81db640fbc5d05cef1efff890ddbde3697383b1612b453370f4364736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106101dc5760003560e01c806398c657dc11610102578063b7ca724111610095578063e73e14bf11610064578063e73e14bf14610a60578063f1d60d6614610a98578063fb744cc014610ab8578063fc54fb2714610ad857600080fd5b8063b7ca724114610926578063c0641994146109e9578063ccebcabb14610a04578063e2e1e8e914610a3357600080fd5b8063a784d498116100d1578063a784d49814610856578063ac9650d814610876578063ae4fe67a146108a3578063b6363cf2146108dc57600080fd5b806398c657dc146107195780639ce7abe514610746578063a212daf814610766578063a2594d821461083657600080fd5b8063561285e41161017a578063872d048911610149578063872d0489146106385780638cc01c86146106585780638d3c100a146106d95780639054e343146106f957600080fd5b8063561285e4146105865780636a3ca383146105e85780637573ef4f146106185780637a766460146102fb57600080fd5b806325d9897e116101b657806325d9897e1461033157806339514ad21461045457806344c32a611461048657806355c85269146104a857600080fd5b806308ce5f68146102335780630e022923146102665780631787e69f146102fb57600080fd5b3661022e5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561023f57600080fd5b5061025361024e3660046125ad565b610af0565b6040519081526020015b60405180910390f35b34801561027257600080fd5b506102866102813660046125e6565b610b05565b60405161025d919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561030757600080fd5b506102536103163660046125e6565b6001600160a01b03166000908152600e602052604090205490565b34801561033d57600080fd5b5061044761034c3660046125ad565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b60405161025d9190612603565b34801561046057600080fd5b50601a546001600160401b03165b6040516001600160401b03909116815260200161025d565b34801561049257600080fd5b506104a66104a13660046126a4565b610be5565b005b3480156104b457600080fd5b506105546104c33660046125e6565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161025d565b34801561059257600080fd5b506105a66105a13660046125ad565b610c93565b60405161025d9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156105f457600080fd5b506106086106033660046125e6565b610d39565b604051901515815260200161025d565b34801561062457600080fd5b506102536106333660046126d0565b610d5e565b34801561064457600080fd5b5061025361065336600461271f565b610dc2565b34801561066457600080fd5b506106be6106733660046125e6565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b6040805182518152602092830151928101929092520161025d565b3480156106e557600080fd5b506104a66106f4366004612768565b610e17565b34801561070557600080fd5b5061025361071436600461278d565b6112e3565b34801561072557600080fd5b506107396107343660046125e6565b6113cb565b60405161025d91906127e3565b34801561075257600080fd5b506104a661076136600461280b565b6113d6565b34801561077257600080fd5b5061080361078136600461278d565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b60405161025d91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561084257600080fd5b506104a66108513660046125e6565b611501565b34801561086257600080fd5b506102536108713660046125e6565b61161d565b34801561088257600080fd5b50610896610891366004612890565b611628565b60405161025d9190612929565b3480156108af57600080fd5b506106086108be3660046125e6565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e857600080fd5b506106086108f73660046125ad565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093257600080fd5b506109ad6109413660046129a9565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b60405161025d9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b3480156109f557600080fd5b50600d5463ffffffff1661046e565b348015610a1057600080fd5b50610a24610a1f36600461278d565b61170f565b6040519051815260200161025d565b348015610a3f57600080fd5b50610253610a4e3660046129a9565b60009081526010602052604090205490565b348015610a6c57600080fd5b50610608610a7b3660046125e6565b6001600160a01b03166000908152600e6020526040902054151590565b348015610aa457600080fd5b50610608610ab33660046125e6565b611761565b348015610ac457600080fd5b50610253610ad33660046125ad565b611786565b348015610ae457600080fd5b5060205460ff16610608565b6000610afc8383611792565b90505b92915050565b610b6060405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906129c2565b15610c8557604051632b37d9d160e21b815260040160405180910390fd5b610c8f82826117ca565b5050565b610cc56040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b610cf76040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000610d038585611b68565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b60006001610d4683611bec565b6002811115610d5757610d576127cd565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610d9857610d986127cd565b6002811115610da957610da96127cd565b81526020019081526020016000205490505b9392505050565b600080610dcf8585611792565b90506000610ddd8686611c45565b90506000610df163ffffffff8616846129fa565b90506000610dff8383611c70565b9050610e0b8185612a11565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906129c2565b15610eb757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b6044820152606401610225565b6000610f0182611bec565b90506000816002811115610f1757610f176127cd565b03610f4f5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b6044820152606401610225565b82600003610f5c57505050565b6001600160a01b0382166000908152600f60205260408120600181015490918590808080610fb633867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611c87565b600d54610fd1908690600160401b900463ffffffff16611d44565b9350610fdd8486612a24565b600d54909550610ffe9087908790640100000000900463ffffffff16611d7d565b925061100a8386612a24565b945084876005015461101c9190612a11565b6005880155600287015460009015806110425750601954600160a01b900463ffffffff16155b61110d5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273__$8eb3cac1482a31d7a7f2cbe7dc8bdcd821$__906349484d819060c401602060405180830381865af41580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190612a37565b611110565b60005b9050611120818960080154611f90565b925061112c8387611c70565b925061116c61113b8488612a24565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690611faa565b82156111d4578288600801546111829190612a11565b6008890155875461119c906001600160a01b031684611ff2565b91506111a88284612a24565b88546001600160a01b039081166000818152601760205260409020549295506111d49286921615612084565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190612a37565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611329576000915050610dbb565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b80156113bf576000818152601d602052604090206001810154426001600160401b03909116116113ae5760028301546001840154825461139391906129fa565b61139d9190612a50565b6113a79085612a11565b93506113b4565b506113bf565b600201549050611353565b50909695505050505050565b6000610aff82611bec565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190612a72565b6001600160a01b0316336001600160a01b03161461149b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906114c99086908690600401612a8f565b600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190612a72565b6001600160a01b0316336001600160a01b0316146115c65760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505050565b6000610aff826120fa565b604080516000815260208101909152606090826001600160401b0381111561165257611652612abe565b60405190808252806020026020018201604052801561168557816020015b60608152602001906001900390816116705790505b50915060005b83811015611707576116e2308686848181106116a9576116a9612ad4565b90506020028101906116bb9190612aea565b856040516020016116ce93929190612b37565b604051602081830303815290604052612145565b8382815181106116f4576116f4612ad4565b602090810291909101015260010161168b565b505092915050565b60408051602081019091526000815260408051602081019091526000815260006117398686611b68565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b60008061176d83611bec565b600281111561177e5761177e6127cd565b141592915050565b6000610afc8383611c45565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610afc9190612a24565b60006117d583611bec565b905060018160028111156117eb576117eb6127cd565b146118225760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b6044820152606401610225565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190612a37565b60808201819052606082015160009161193d91611f90565b9050600082600001516001600160a01b0316336001600160a01b031614806119ae575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff16821115806119d157506040830151155b15611a0b5780611a0b5760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b6044820152606401610225565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611aef57808015611a4557508415155b15611a5d57611a588684600001516121bb565b611a6c565b611a6a83602001516122a8565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611a999190612a24565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611ad99190612a24565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611bc157506001600160a01b0382166000908152601460205260409020610aff565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610aff565b6001600160a01b038082166000908152600f6020526040812080549192909116611c195750600092915050565b600381015415801590611c2e57506004810154155b15611c3c5750600192915050565b50600292915050565b600080611c528484611b68565b905080600501548160020154611c689190612a24565b949350505050565b600081831115611c805781610afc565b5090919050565b8015611d3f576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0791906129c2565b611d3f5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610225565b505050565b600080611d518484612336565b9050610afc817f000000000000000000000000000000000000000000000000000000000000000061115d565b600082600003611d8f57506000610dbb565b7f000000000000000000000000000000000000000000000000000000000000000060008315801590611dc957506001600160a01b03821615155b9050808015611e3c5750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c91906129c2565b15611f84576000611e4d8686612336565b90508015611f7a576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190612a37565b50611f1883827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190612388565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050505b9250610dbb915050565b50600095945050505050565b6000818311611fa0576000610afc565b610afc8284612a24565b8015610c8f57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561160157600080fd5b6001600160a01b038216600090815260146020526040812060028101548291901580159061203157508054600160401b900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff600160401b90910481169087906123c316565b90506120638186612a24565b92508282600201546120759190612a11565b6002830155505b509392505050565b8260000361209157505050565b80156120a157611d3f828461242a565b6001600160a01b03808316600090815260176020526040902054166120f481156120cb57816120cd565b835b857f0000000000000000000000000000000000000000000000000000000000000000611f08565b50505050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916121319190612a24565b61213b9190612a24565b610aff9190612a24565b6060600080846001600160a01b0316846040516121629190612b5e565b600060405180830381855af49150503d806000811461219d576040519150601f19603f3d011682016040523d82523d6000602084013e6121a2565b606091505b50915091506121b28583836124a9565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af1158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c9190612a37565b90508060000361225b57505050565b60006122678383612505565b905060006122758284612a24565b6001600160a01b038086166000908152601760205260409020549192506122a191839187911615612084565b5050505050565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff9190612a37565b600061234582620f4240101590565b829061236757604051633dc311df60e01b815260040161022591815260200190565b5061237e8361237984620f4240612a24565b6123c3565b610afc9084612a24565b8015611d3f5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611cc4565b60006123d283620f4240101590565b806123e557506123e582620f4240101590565b8383909161240f5760405163768bf0eb60e11b815260048101929092526024820152604401610225565b50620f4240905061242083856129fa565b610afc9190612a50565b6001600160a01b0382166000908152600e602052604090205461244e908290612a11565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061249d9084815260200190565b60405180910390a25050565b6060826124be576124b98261256c565b610dbb565b81511580156124d557506001600160a01b0384163b155b156124fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610225565b5080610dbb565b6001600160a01b038216600090815260146020526040812060028101548291901580159061254557508054640100000000900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff64010000000090910481169087906123c316565b80511561257c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b038116811461259557600080fd5b600080604083850312156125c057600080fd5b82356125cb81612598565b915060208301356125db81612598565b809150509250929050565b6000602082840312156125f857600080fd5b8135610afc81612598565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a083015161266160a08401826001600160401b03169052565b5060c083015161267960c084018263ffffffff169052565b5060e083015161269460e08401826001600160401b03169052565b5061010092830151919092015290565b600080604083850312156126b757600080fd5b82356126c281612598565b946020939093013593505050565b6000806000606084860312156126e557600080fd5b83356126f081612598565b9250602084013561270081612598565b915060408401356003811061271457600080fd5b809150509250925092565b60008060006060848603121561273457600080fd5b833561273f81612598565b9250602084013561274f81612598565b9150604084013563ffffffff8116811461271457600080fd5b6000806040838503121561277b57600080fd5b8235915060208301356125db81612598565b6000806000606084860312156127a257600080fd5b83356127ad81612598565b925060208401356127bd81612598565b9150604084013561271481612598565b634e487b7160e01b600052602160045260246000fd5b602081016003831061280557634e487b7160e01b600052602160045260246000fd5b91905290565b60008060006040848603121561282057600080fd5b833561282b81612598565b925060208401356001600160401b0381111561284657600080fd5b8401601f8101861361285757600080fd5b80356001600160401b0381111561286d57600080fd5b86602082840101111561287f57600080fd5b939660209190910195509293505050565b600080602083850312156128a357600080fd5b82356001600160401b038111156128b957600080fd5b8301601f810185136128ca57600080fd5b80356001600160401b038111156128e057600080fd5b8560208260051b84010111156128f557600080fd5b6020919091019590945092505050565b60005b83811015612920578181015183820152602001612908565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561299d57603f198786030184528151805180875261297a816020890160208501612905565b601f01601f19169590950160209081019550938401939190910190600101612951565b50929695505050505050565b6000602082840312156129bb57600080fd5b5035919050565b6000602082840312156129d457600080fd5b81518015158114610afc57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610aff57610aff6129e4565b80820180821115610aff57610aff6129e4565b81810381811115610aff57610aff6129e4565b600060208284031215612a4957600080fd5b5051919050565b600082612a6d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a8457600080fd5b8151610afc81612598565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612b0157600080fd5b8301803591506001600160401b03821115612b1b57600080fd5b602001915036819003821315612b3057600080fd5b9250929050565b828482376000838201600081528351612b54818360208801612905565b0195945050505050565b60008251612b70818460208701612905565b919091019291505056fea26469706673582212202248057a8bce81db640fbc5d05cef1efff890ddbde3697383b1612b453370f4364736f6c634300081b0033", + "linkReferences": { + "contracts/staking/libraries/ExponentialRebates.sol": { + "ExponentialRebates": [ + { + "length": 20, + "start": 5652 + } + ] + } + }, + "deployedLinkReferences": { + "contracts/staking/libraries/ExponentialRebates.sol": { + "ExponentialRebates": [ + { + "length": 20, + "start": 4266 + } + ] + } + } +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json new file mode 100644 index 000000000..da4e99cc5 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json @@ -0,0 +1,835 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PaymentsEscrow", + "sourceName": "contracts/payments/PaymentsEscrow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "revokeCollectorThawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawEscrowThawingPeriod", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInconsistentCollection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAllowance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minBalance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowNotThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "PaymentsEscrowStillThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "thawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxWaitPeriod", + "type": "uint256" + } + ], + "name": "PaymentsEscrowThawingPeriodTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addedAllowance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalAllowance", + "type": "uint256" + } + ], + "name": "AuthorizedCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "CancelThaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "CancelThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "EscrowCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "RevokeCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "Thaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "ThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_WAIT_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "REVOKE_COLLECTOR_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WITHDRAW_ESCROW_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + } + ], + "name": "approveCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "authorizedCollectors", + "outputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "cancelThawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "depositTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "escrowAccounts", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + } + ], + "name": "revokeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "thawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b506040516121d83803806121d88339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611be36105f56000396000818161020801526111c801526000818161015001526103a401526000505060005050600050506000505060005050600081816103010152818161041d01528181610590015281816106d90152818161078b015281816109cf01528181610a8001528181611049015261124d01526000505060008181610cbd0152610d6501526000505060008181610c0101528181610c8e01528181610ddb015281816113c5015261148f0152611be36000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json new file mode 100644 index 000000000..da4e99cc5 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json @@ -0,0 +1,835 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PaymentsEscrow", + "sourceName": "contracts/payments/PaymentsEscrow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "revokeCollectorThawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawEscrowThawingPeriod", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInconsistentCollection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAllowance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minBalance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowNotThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "PaymentsEscrowStillThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "thawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxWaitPeriod", + "type": "uint256" + } + ], + "name": "PaymentsEscrowThawingPeriodTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addedAllowance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalAllowance", + "type": "uint256" + } + ], + "name": "AuthorizedCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "CancelThaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "CancelThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "EscrowCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "RevokeCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "Thaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "ThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_WAIT_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "REVOKE_COLLECTOR_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WITHDRAW_ESCROW_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + } + ], + "name": "approveCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "authorizedCollectors", + "outputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "cancelThawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "depositTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "escrowAccounts", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector_", + "type": "address" + } + ], + "name": "revokeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "thawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61020060405234801561001157600080fd5b506040516121d83803806121d88339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611be36105f56000396000818161020801526111c801526000818161015001526103a401526000505060005050600050506000505060005050600081816103010152818161041d01528181610590015281816106d90152818161078b015281816109cf01528181610a8001528181611049015261124d01526000505060008181610cbd0152610d6501526000505060008181610c0101528181610c8e01528181610ddb015281816113c5015261148f0152611be36000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json new file mode 100644 index 000000000..2cfb21e41 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json @@ -0,0 +1,177 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "GraphProxy", + "sourceName": "contracts/upgrades/GraphProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_impl", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "PendingImplementationUpdated", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptUpgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptUpgradeAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json new file mode 100644 index 000000000..909757608 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json @@ -0,0 +1,635 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "RewardsManager", + "sourceName": "contracts/rewards/RewardsManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardsAssigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "RewardsDenied", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sinceBlock", + "type": "uint256" + } + ], + "name": "RewardsDenylistUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldSubgraphService", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [], + "name": "accRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accRewardsPerSignalLastBlockUpdated", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "name": "calcRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "denylist", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsForSubgraph", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsPerAllocatedToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNewRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "getRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isDenied", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "issuancePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumSubgraphSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphAllocationUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphSignalUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "_deny", + "type": "bool" + } + ], + "name": "setDenied", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_subgraphDeploymentID", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "_deny", + "type": "bool[]" + } + ], + "name": "setDeniedMany", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_issuancePerBlock", + "type": "uint256" + } + ], + "name": "setIssuancePerBlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumSubgraphSignal", + "type": "uint256" + } + ], + "name": "setMinimumSubgraphSignal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphAvailabilityOracle", + "type": "address" + } + ], + "name": "setSubgraphAvailabilityOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphAvailabilityOracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract IRewardsIssuer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "subgraphs", + "outputs": [ + { + "internalType": "uint256", + "name": "accRewardsForSubgraph", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsForSubgraphSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerSignalSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "takeRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json new file mode 100644 index 000000000..909757608 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json @@ -0,0 +1,635 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "RewardsManager", + "sourceName": "contracts/rewards/RewardsManager.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nameHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractSynced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardsAssigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "RewardsDenied", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sinceBlock", + "type": "uint256" + } + ], + "name": "RewardsDenylistUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldSubgraphService", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newSubgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [], + "name": "accRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accRewardsPerSignalLastBlockUpdated", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + } + ], + "name": "acceptProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGraphProxy", + "name": "_proxy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "acceptProxyAndCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "name": "calcRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "denylist", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsForSubgraph", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsPerAllocatedToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNewRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "getRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isDenied", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "issuancePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumSubgraphSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphAllocationUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphSignalUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "_deny", + "type": "bool" + } + ], + "name": "setDenied", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_subgraphDeploymentID", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "_deny", + "type": "bool[]" + } + ], + "name": "setDeniedMany", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_issuancePerBlock", + "type": "uint256" + } + ], + "name": "setIssuancePerBlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumSubgraphSignal", + "type": "uint256" + } + ], + "name": "setMinimumSubgraphSignal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphAvailabilityOracle", + "type": "address" + } + ], + "name": "setSubgraphAvailabilityOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphAvailabilityOracle", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract IRewardsIssuer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "subgraphs", + "outputs": [ + { + "internalType": "uint256", + "name": "accRewardsForSubgraph", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsForSubgraphSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerSignalSnapshot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "syncAllContracts", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "takeRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#ProxyAdmin.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#ProxyAdmin.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#ProxyAdmin.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.dbg.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.dbg.json new file mode 100644 index 000000000..4922c5523 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../build-info/e51c04f0f0fdce5715962999616918b7.json" +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.json new file mode 100644 index 000000000..428ef34d9 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.json @@ -0,0 +1,2393 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SubgraphService", + "sourceName": "contracts/SubgraphService.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "internalType": "address", + "name": "disputeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "tapCollector", + "type": "address" + }, + { + "internalType": "address", + "name": "curation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + } + ], + "name": "AllocationClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationManagerAllocationClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationManagerAllocationSameSize", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationManagerInvalidAllocationProof", + "type": "error" + }, + { + "inputs": [], + "name": "AllocationManagerInvalidZeroAllocationId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "DataServiceFeesClaimNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "DataServiceFeesZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "DataServicePausableNotPauseGuardian", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "disputeManager", + "type": "address" + } + ], + "name": "DirectoryNotDisputeManager", + "type": "error" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [], + "name": "EnforcedPause", + "type": "error" + }, + { + "inputs": [], + "name": "ExpectedPause", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "LegacyAllocationAlreadyMigrated", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "LegacyAllocationExists", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "ProvisionManagerNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionManagerProvisionNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokensAvailable", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensRequired", + "type": "uint256" + } + ], + "name": "ProvisionTrackerInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceAllocationIsAltruistic", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceAllocationNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceCannotForceCloseAllocation", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceEmptyGeohash", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceEmptyUrl", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "SubgraphServiceInconsistentCollection", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceIndexerAlreadyRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "providedIndexer", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedIndexer", + "type": "address" + } + ], + "name": "SubgraphServiceIndexerMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "SubgraphServiceIndexerNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "SubgraphServiceInvalidCurationCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "SubgraphServiceInvalidPaymentType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ravIndexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationIndexer", + "type": "address" + } + ], + "name": "SubgraphServiceInvalidRAV", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "oldTokens", + "type": "uint256" + } + ], + "name": "AllocationResized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "CurationCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "ratio", + "type": "uint32" + } + ], + "name": "DelegationRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensIndexerRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "IndexingRewardsCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "LegacyAllocationMigrated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxPOIStaleness", + "type": "uint256" + } + ], + "name": "MaxPOIStalenessSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "PauseGuardianSet", + "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": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionTokensRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensCollected", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensCurators", + "type": "uint256" + } + ], + "name": "QueryFeesCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "rewardsDestination", + "type": "address" + } + ], + "name": "RewardsDestinationSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unlockTimestamp", + "type": "uint256" + } + ], + "name": "StakeClaimLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + } + ], + "name": "StakeClaimReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "claimsCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReleased", + "type": "uint256" + } + ], + "name": "StakeClaimsReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "StakeToFeesRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "subgraphService", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "disputeManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "tapCollector", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "curation", + "type": "address" + } + ], + "name": "SubgraphServiceDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "min", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "max", + "type": "uint64" + } + ], + "name": "ThawingPeriodRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "min", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "max", + "type": "uint32" + } + ], + "name": "VerifierCutRangeSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "allocationProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "allocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPOIPresentedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "claims", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nextClaim", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "claimsLists", + "outputs": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "curationFeesCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "encodeAllocationProof", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "feesProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "forceCloseAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPOIPresentedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "internalType": "struct Allocation.State", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocationData", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getLegacyAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "internalType": "struct LegacyAllocation.State", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "getSubgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "indexers", + "outputs": [ + { + "internalType": "uint256", + "name": "registeredAt", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "geoHash", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "minimumProvisionTokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maximumDelegationRatio", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "stakeToFeesRatio", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "isActiveAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "isOverAllocated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "isStaleAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "legacyAllocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxPOIStaleness", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "migrateLegacyAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "minimumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "pauseGuardians", + "outputs": [ + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numClaimsToRelease", + "type": "uint256" + } + ], + "name": "releaseStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "resizeAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "rewardsDestination", + "outputs": [ + { + "internalType": "address", + "name": "destination", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "setCurationCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "setDelegationRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxPOIStaleness", + "type": "uint256" + } + ], + "name": "setMaxPOIStaleness", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "minimumProvisionTokens", + "type": "uint256" + } + ], + "name": "setMinimumProvisionTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rewardsDestination", + "type": "address" + } + ], + "name": "setRewardsDestination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeToFeesRatio_", + "type": "uint256" + } + ], + "name": "setStakeToFeesRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeToFeesRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "subgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61024060405234801561001157600080fd5b5060405161668f38038061668f83398101604081905261003091610541565b3083838387806001600160a01b03811661007f5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b7906103c5565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100ea906103c5565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b6020820152610123906103c5565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015d906103c5565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610195906103c5565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101d0906103c5565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020e906103c5565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024a906103c5565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027f906103c5565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103299790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b038481166101c08190528482166101e08190528483166102008190529284166102208190526040805193845260208401929092529082019290925260608101919091527f4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda79060800160405180910390a1505050506103bc61047360201b60201c565b50505050610605565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161040091815260200190565b602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610595565b9050826001600160a01b03821661046c5760405163218f5add60e11b815260040161007691906105b7565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104c35760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146105225780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b038116811461053c57600080fd5b919050565b6000806000806080858703121561055757600080fd5b61056085610525565b935061056e60208601610525565b925061057c60408601610525565b915061058a60608601610525565b905092959194509250565b6000602082840312156105a757600080fd5b6105b082610525565b9392505050565b602081526000825180602084015260005b818110156105e557602081860181015160408684010152016105c8565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615ff161069e60003960006143f801526000612fa9015260008181611a1801526138d00152600050506000505060005050600050506000613fe6015260006137fd01526000505060005050600050506000612045015260006143d40152615ff16000f3fe608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.dbg.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.dbg.json new file mode 100644 index 000000000..4922c5523 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.dbg.json @@ -0,0 +1,4 @@ +{ + "_format": "hh-sol-dbg-1", + "buildInfo": "../build-info/e51c04f0f0fdce5715962999616918b7.json" +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.json new file mode 100644 index 000000000..428ef34d9 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.json @@ -0,0 +1,2393 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SubgraphService", + "sourceName": "contracts/SubgraphService.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "internalType": "address", + "name": "disputeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "tapCollector", + "type": "address" + }, + { + "internalType": "address", + "name": "curation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + } + ], + "name": "AllocationClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationManagerAllocationClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationManagerAllocationSameSize", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationManagerInvalidAllocationProof", + "type": "error" + }, + { + "inputs": [], + "name": "AllocationManagerInvalidZeroAllocationId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "DataServiceFeesClaimNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "DataServiceFeesZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "DataServicePausableNotPauseGuardian", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "disputeManager", + "type": "address" + } + ], + "name": "DirectoryNotDisputeManager", + "type": "error" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [], + "name": "EnforcedPause", + "type": "error" + }, + { + "inputs": [], + "name": "ExpectedPause", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "LegacyAllocationAlreadyMigrated", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "LegacyAllocationExists", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "ProvisionManagerNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionManagerProvisionNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokensAvailable", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensRequired", + "type": "uint256" + } + ], + "name": "ProvisionTrackerInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceAllocationIsAltruistic", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceAllocationNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceCannotForceCloseAllocation", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceEmptyGeohash", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceEmptyUrl", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "SubgraphServiceInconsistentCollection", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceIndexerAlreadyRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "providedIndexer", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedIndexer", + "type": "address" + } + ], + "name": "SubgraphServiceIndexerMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "SubgraphServiceIndexerNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "SubgraphServiceInvalidCurationCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "SubgraphServiceInvalidPaymentType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ravIndexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationIndexer", + "type": "address" + } + ], + "name": "SubgraphServiceInvalidRAV", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "oldTokens", + "type": "uint256" + } + ], + "name": "AllocationResized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "CurationCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "ratio", + "type": "uint32" + } + ], + "name": "DelegationRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensIndexerRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "IndexingRewardsCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "LegacyAllocationMigrated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxPOIStaleness", + "type": "uint256" + } + ], + "name": "MaxPOIStalenessSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "PauseGuardianSet", + "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": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionTokensRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensCollected", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensCurators", + "type": "uint256" + } + ], + "name": "QueryFeesCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "rewardsDestination", + "type": "address" + } + ], + "name": "RewardsDestinationSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unlockTimestamp", + "type": "uint256" + } + ], + "name": "StakeClaimLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + } + ], + "name": "StakeClaimReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "claimsCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReleased", + "type": "uint256" + } + ], + "name": "StakeClaimsReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "StakeToFeesRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "subgraphService", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "disputeManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "tapCollector", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "curation", + "type": "address" + } + ], + "name": "SubgraphServiceDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "min", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "max", + "type": "uint64" + } + ], + "name": "ThawingPeriodRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "min", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "max", + "type": "uint32" + } + ], + "name": "VerifierCutRangeSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "allocationProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "allocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPOIPresentedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "claims", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nextClaim", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "claimsLists", + "outputs": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "curationFeesCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "encodeAllocationProof", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "feesProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "forceCloseAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPOIPresentedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "internalType": "struct Allocation.State", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocationData", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getLegacyAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "internalType": "struct LegacyAllocation.State", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "getSubgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "indexers", + "outputs": [ + { + "internalType": "uint256", + "name": "registeredAt", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "geoHash", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "minimumProvisionTokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maximumDelegationRatio", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "stakeToFeesRatio", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "isActiveAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "isOverAllocated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "isStaleAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "legacyAllocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxPOIStaleness", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "migrateLegacyAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "minimumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "pauseGuardians", + "outputs": [ + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numClaimsToRelease", + "type": "uint256" + } + ], + "name": "releaseStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "resizeAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "rewardsDestination", + "outputs": [ + { + "internalType": "address", + "name": "destination", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "setCurationCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "setDelegationRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxPOIStaleness", + "type": "uint256" + } + ], + "name": "setMaxPOIStaleness", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "minimumProvisionTokens", + "type": "uint256" + } + ], + "name": "setMinimumProvisionTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rewardsDestination", + "type": "address" + } + ], + "name": "setRewardsDestination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeToFeesRatio_", + "type": "uint256" + } + ], + "name": "setStakeToFeesRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeToFeesRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "subgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x61024060405234801561001157600080fd5b5060405161668f38038061668f83398101604081905261003091610541565b3083838387806001600160a01b03811661007f5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b7906103c5565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100ea906103c5565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b6020820152610123906103c5565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015d906103c5565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610195906103c5565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101d0906103c5565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020e906103c5565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024a906103c5565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027f906103c5565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103299790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b038481166101c08190528482166101e08190528483166102008190529284166102208190526040805193845260208401929092529082019290925260608101919091527f4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda79060800160405180910390a1505050506103bc61047360201b60201c565b50505050610605565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161040091815260200190565b602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610595565b9050826001600160a01b03821661046c5760405163218f5add60e11b815260040161007691906105b7565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104c35760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146105225780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b038116811461053c57600080fd5b919050565b6000806000806080858703121561055757600080fd5b61056085610525565b935061056e60208601610525565b925061057c60408601610525565b915061058a60608601610525565b905092959194509250565b6000602082840312156105a757600080fd5b6105b082610525565b9392505050565b602081526000825180602084015260005b818110156105e557602081860181015160408684010152016105c8565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615ff161069e60003960006143f801526000612fa9015260008181611a1801526138d00152600050506000505060005050600050506000613fe6015260006137fd01526000505060005050600050506000612045015260006143d40152615ff16000f3fe608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_DisputeManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_DisputeManager.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_DisputeManager.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_SubgraphService.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_SubgraphService.json new file mode 100644 index 000000000..0d073cb30 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_SubgraphService.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dummy", + "sourceName": "contracts/mocks/Dummy.sol", + "abi": [], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_DisputeManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_DisputeManager.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_DisputeManager.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_SubgraphService.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_SubgraphService.json new file mode 100644 index 000000000..942e4b2e5 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_SubgraphService.json @@ -0,0 +1,132 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProxyAdmin", + "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ITransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager.json new file mode 100644 index 000000000..c7f1f49b4 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TransparentUpgradeableProxy", + "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "ERC1967InvalidAdmin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { + "inputs": [], + "name": "ERC1967NonPayable", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [], + "name": "ProxyDeniedAdminAccess", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService.json new file mode 100644 index 000000000..c7f1f49b4 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TransparentUpgradeableProxy", + "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "ERC1967InvalidAdmin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { + "inputs": [], + "name": "ERC1967NonPayable", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [], + "name": "ProxyDeniedAdminAccess", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json new file mode 100644 index 000000000..db45e3283 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json @@ -0,0 +1,776 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TAPCollector", + "sourceName": "contracts/payments/collectors/TAPCollector.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "eip712Name", + "type": "string" + }, + { + "internalType": "string", + "name": "eip712Version", + "type": "string" + }, + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "revokeSignerThawingPeriod", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + } + ], + "name": "TAPCollectorCallerNotDataService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensCollected", + "type": "uint256" + } + ], + "name": "TAPCollectorInconsistentRAVTokens", + "type": "error" + }, + { + "inputs": [], + "name": "TAPCollectorInvalidRAVSigner", + "type": "error" + }, + { + "inputs": [], + "name": "TAPCollectorInvalidSignerProof", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proofDeadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + } + ], + "name": "TAPCollectorInvalidSignerProofDeadline", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizingPayer", + "type": "address" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "TAPCollectorSignerAlreadyAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "TAPCollectorSignerNotAuthorizedByPayer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "TAPCollectorSignerNotThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "TAPCollectorSignerStillThawing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "RAVCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "authorizedSigner", + "type": "address" + } + ], + "name": "SignerAuthorized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "authorizedSigner", + "type": "address" + } + ], + "name": "SignerRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "authorizedSigner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "SignerThawCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "authorizedSigner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "SignerThawing", + "type": "event" + }, + { + "inputs": [], + "name": "REVOKE_SIGNER_THAWING_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "proofDeadline", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "proof", + "type": "bytes" + } + ], + "name": "authorizeSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "authorizedSigners", + "outputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "cancelThawSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", + "name": "rav", + "type": "tuple" + } + ], + "name": "encodeRAV", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", + "name": "rav", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.SignedRAV", + "name": "signedRAV", + "type": "tuple" + } + ], + "name": "recoverRAVSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "revokeAuthorizedSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "thawSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "tokensCollected", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6102c060405234801561001157600080fd5b50604051612162380380612162833981016040819052610030916105de565b81848461003e8260006103e0565b6101205261004d8160016103e0565b61014052815160208084019190912060e052815190820120610100524660a0526100da60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03811661012c5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101e05260408051808201909152600a81526923b930b8342a37b5b2b760b11b602082015261016490610413565b6001600160a01b0316610160526040805180820190915260078152665374616b696e6760c81b602082015261019890610413565b6001600160a01b03166101805260408051808201909152600d81526c47726170685061796d656e747360981b60208201526101d290610413565b6001600160a01b03166101a05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261020d90610413565b6001600160a01b03166101c05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261024690610413565b6001600160a01b03166102005260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b602082015261028190610413565b6001600160a01b0316610220526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102bf90610413565b6001600160a01b03166102405260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102fb90610413565b6001600160a01b03166102605260408051808201909152600881526721bab930ba34b7b760c11b602082015261033090610413565b6001600160a01b039081166102808190526101e05161018051610160516101a0516101c0516102005161022051610240516102605160408051968c168752948b166020870152928a1685850152908916606085015288166080840152871660a083015260c0820195909552935192851694918216939116917fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a439181900360e00190a4506102a0525061082b915050565b60006020835110156103fc576103f5836104c1565b905061040d565b8161040784826106e8565b5060ff90505b92915050565b6000806101e0516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161044e91815260200190565b602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f91906107a6565b9050826001600160a01b0382166104ba5760405163218f5add60e11b815260040161012391906107f4565b5092915050565b600080829050601f815111156104ec578260405163305a27a960e01b815260040161012391906107f4565b80516104f782610807565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610530578181015183820152602001610518565b50506000910152565b600082601f83011261054a57600080fd5b81516001600160401b03811115610563576105636104ff565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610591576105916104ff565b6040528181528382016020018510156105a957600080fd5b6105ba826020830160208701610515565b949350505050565b80516001600160a01b03811681146105d957600080fd5b919050565b600080600080608085870312156105f457600080fd5b84516001600160401b0381111561060a57600080fd5b61061687828801610539565b602087015190955090506001600160401b0381111561063457600080fd5b61064087828801610539565b93505061064f604086016105c2565b6060959095015193969295505050565b600181811c9082168061067357607f821691505b60208210810361069357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106e357806000526020600020601f840160051c810160208510156106c05750805b601f840160051c820191505b818110156106e057600081556001016106cc565b50505b505050565b81516001600160401b03811115610701576107016104ff565b6107158161070f845461065f565b84610699565b6020601f82116001811461074957600083156107315750848201515b600019600385901b1c1916600184901b1784556106e0565b600084815260208120601f198516915b828110156107795787850151825560209485019460019092019101610759565b50848210156107975786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156107b857600080fd5b6107c1826105c2565b9392505050565b600081518084526107e0816020860160208601610515565b601f01601f19169290920160200192915050565b6020815260006107c160208301846107c8565b805160208083015191908110156106935760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516118786108ea600039600081816101bf015261035e015260005050600050506000505060005050600050506000505060006107db015260005050600050506000505060006109900152600061095e01526000610f2101526000610ef901526000610e5401526000610e7e01526000610ea801526118786000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637f07d283116100715780637f07d2831461016b57806384b0196e1461018c5780638821603c146101a7578063960ba169146101ba578063cfdb35bd146101e1578063fee9f01f1461021257600080fd5b8063015cdd80146100ae5780631354f019146100c35780631ef518f2146100d657806339aa7416146101065780635d2b6a4e14610119575b600080fd5b6100c16100bc366004611081565b610225565b005b6100c16100d1366004611081565b610302565b6100e96100e436600461109e565b6103c7565b6040516001600160a01b0390911681526020015b60405180910390f35b6100c1610114366004611081565b6103e0565b61014c610127366004611081565b600260205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016100fd565b61017e6101793660046111e5565b6104f4565b6040519081526020016100fd565b6101946105cd565b6040516100fd9796959493929190611288565b61017e6101b5366004611320565b610613565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e6101ef36600461135a565b600360209081526000938452604080852082529284528284209052825290205481565b6100c16102203660046113a5565b610626565b6001600160a01b038082166000908152600260205260409020805490913391849116821461027e57604051630ad827d360e41b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b5050600081600101541182906102b357604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b506000600182018190556040519081526001600160a01b0383169033907f3b4432b11b66b46d9a7b190aa989c0ae85a5395b543540220596dd94dd405ceb906020015b60405180910390a35050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461035657604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b5061038390507f000000000000000000000000000000000000000000000000000000000000000042611445565b600182018190556040519081526001600160a01b0383169033907fd939049941f6a15381248e4ac0010f15efdf0f3221923711244c200b5ff2cddf906020016102f6565b60006103da6103d583611515565b6106e2565b92915050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461043457604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b50506000816001015411829061046957604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b50600181015442908181111561049b57604051631a42d0ab60e31b815260048101929092526024820152604401610275565b50506001600160a01b03821660008181526002602052604080822080546001600160a01b03191681556001018290555133917f2fc91dbd92d741cae16e0315578d7f6cf77043b771692c4bd993658ecfe8942291a35050565b60008060008380602001905181019061050d91906115d2565b815151919350915033906001600160a01b0381168214610553576040516347666ba360e11b81526001600160a01b03928316600482015291166024820152604401610275565b50506000610560836106e2565b6001600160a01b038082166000908152600260205260409020549192501661059b57604051630ef060dd60e01b815260040160405180910390fd5b6001600160a01b038082166000908152600260205260409020546105c3918891168585610709565b9695505050505050565b6000606080600080600060606105e1610957565b6105e9610989565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60006103da610621836116f8565b6109b6565b6001600160a01b03848116600090815260026020526040902054168481156106745760405163cb2320b760e01b81526001600160a01b03928316600482015291166024820152604401610275565b505061068282828587610a6d565b6001600160a01b03841660008181526002602052604080822080546001600160a01b0319163390811782556001909101839055905190917f6edcdd4150e63c6c36d965976c1c37375609c8b040c50d39e7156437b80e282891a350505050565b6000806106f283600001516109b6565b9050610702818460200151610b95565b9392505050565b815180516020808301516060909301516001600160a01b03808416600090815260038452604080822083881683528552808220928a168252919093528220549193916001600160801b03909116908181808211610782576040516308e467d960e31b815260048101929092526024820152604401610275565b50600090506107918284611704565b9050600061079f8289610bbf565b90508115610862576001600160a01b03868116600090815260036020908152604080832089851684528252808320938e168352929052208490557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387dbfe828c8c88868b876040518763ffffffff1660e01b815260040161082f9695949392919061172d565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b505050505b856001600160a01b03168a6001600160a01b03168c600281111561088857610888611717565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4846001600160a01b0316866001600160a01b03168b6001600160a01b03167f2d55f33a4a377f40129b217a6cf7a5022a112941b80cd589332abc245aa0a5c78c60000151604001518d60000151606001518e60000151608001518f602001516040516109419493929190611781565b60405180910390a4509998505050505050505050565b60606109847f00000000000000000000000000000000000000000000000000000000000000006000610c26565b905090565b60606109847f00000000000000000000000000000000000000000000000000000000000000006001610c26565b60006103da7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610a52969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610cd1565b8142808211610a98576040516343c042b360e01b815260048101929092526024820152604401610275565b50506040805146602082015290810183905233606090811b6bffffffffffffffffffffffff1916908201526000906074016040516020818303038152906040528051906020012090506000610b1a827f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b9050826001600160a01b0316610b668288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b9592505050565b6001600160a01b031614610b8d5760405163164f10af60e11b815260040160405180910390fd5b505050505050565b600080600080610ba58686610cfe565b925092509250610bb58282610d4b565b5090949350505050565b6000610bce83620f4240101590565b80610be15750610be182620f4240101590565b83839091610c0b5760405163768bf0eb60e11b815260048101929092526024820152604401610275565b50620f42409050610c1c83856117cf565b61070291906117e6565b606060ff8314610c4057610c3983610e08565b90506103da565b818054610c4c90611808565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7890611808565b8015610cc55780601f10610c9a57610100808354040283529160200191610cc5565b820191906000526020600020905b815481529060010190602001808311610ca857829003601f168201915b505050505090506103da565b60006103da610cde610e47565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008351604103610d385760208401516040850151606086015160001a610d2a88828585610f72565b955095509550505050610d44565b50508151600091506002905b9250925092565b6000826003811115610d5f57610d5f611717565b03610d68575050565b6001826003811115610d7c57610d7c611717565b03610d9a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610dae57610dae611717565b03610dcf5760405163fce698f760e01b815260048101829052602401610275565b6003826003811115610de357610de3611717565b03610e04576040516335e2f38360e21b815260048101829052602401610275565b5050565b60606000610e1583611041565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ea057507f000000000000000000000000000000000000000000000000000000000000000046145b15610eca57507f000000000000000000000000000000000000000000000000000000000000000090565b610984604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610fad5750600091506003905082611037565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611001573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661102d57506000925060019150829050611037565b9250600091508190505b9450945094915050565b600060ff8216601f8111156103da57604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b038116811461107e57600080fd5b50565b60006020828403121561109357600080fd5b813561070281611069565b6000602082840312156110b057600080fd5b81356001600160401b038111156110c657600080fd5b82016040818503121561070257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715611110576111106110d8565b60405290565b604080519081016001600160401b0381118282101715611110576111106110d8565b604051601f8201601f191681016001600160401b0381118282101715611160576111606110d8565b604052919050565b60006001600160401b03821115611181576111816110d8565b50601f01601f191660200190565b600082601f8301126111a057600080fd5b81356111b36111ae82611168565b611138565b8181528460208386010111156111c857600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156111f857600080fd5b82356003811061120757600080fd5b915060208301356001600160401b0381111561122257600080fd5b61122e8582860161118f565b9150509250929050565b60005b8381101561125357818101518382015260200161123b565b50506000910152565b60008151808452611274816020860160208601611238565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e0602082015260006112a760e083018961125c565b82810360408401526112b9818961125c565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561130f5783518352602093840193909201916001016112f1565b50909b9a5050505050505050505050565b60006020828403121561133257600080fd5b81356001600160401b0381111561134857600080fd5b820160a0818503121561070257600080fd5b60008060006060848603121561136f57600080fd5b833561137a81611069565b9250602084013561138a81611069565b9150604084013561139a81611069565b809150509250925092565b600080600080606085870312156113bb57600080fd5b84356113c681611069565b93506020850135925060408501356001600160401b038111156113e857600080fd5b8501601f810187136113f957600080fd5b80356001600160401b0381111561140f57600080fd5b87602082840101111561142157600080fd5b949793965060200194505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156103da576103da61142f565b6001600160401b038116811461107e57600080fd5b6001600160801b038116811461107e57600080fd5b600060a0828403121561149457600080fd5b61149c6110ee565b905081356114a981611069565b815260208201356114b981611069565b602082015260408201356114cc81611458565b604082015260608201356114df8161146d565b606082015260808201356001600160401b038111156114fd57600080fd5b6115098482850161118f565b60808301525092915050565b60006040823603121561152757600080fd5b61152f611116565b82356001600160401b0381111561154557600080fd5b61155136828601611482565b82525060208301356001600160401b0381111561156d57600080fd5b6115793682860161118f565b60208301525092915050565b600082601f83011261159657600080fd5b81516115a46111ae82611168565b8181528460208386010111156115b957600080fd5b6115ca826020830160208701611238565b949350505050565b600080604083850312156115e557600080fd5b82516001600160401b038111156115fb57600080fd5b83016040818603121561160d57600080fd5b611615611116565b81516001600160401b0381111561162b57600080fd5b820160a0818803121561163d57600080fd5b6116456110ee565b815161165081611069565b8152602082015161166081611069565b6020820152604082015161167381611458565b604082015260608201516116868161146d565b606082015260808201516001600160401b038111156116a457600080fd5b6116b089828501611585565b60808301525082525060208201516001600160401b038111156116d257600080fd5b6116de87828501611585565b602083810191909152959095015190969095509350505050565b60006103da3683611482565b818103818111156103da576103da61142f565b634e487b7160e01b600052602160045260246000fd5b60c081016003881061174f57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b6001600160401b03851681526001600160801b03841660208201526080604082015260006117b2608083018561125c565b82810360608401526117c4818561125c565b979650505050505050565b80820281158282048414176103da576103da61142f565b60008261180357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061181c57607f821691505b60208210810361183c57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220acb6bfec6d9c2f80f4ced26fd1055163ff8dce81039d2e933346d801e1bdbb3064736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637f07d283116100715780637f07d2831461016b57806384b0196e1461018c5780638821603c146101a7578063960ba169146101ba578063cfdb35bd146101e1578063fee9f01f1461021257600080fd5b8063015cdd80146100ae5780631354f019146100c35780631ef518f2146100d657806339aa7416146101065780635d2b6a4e14610119575b600080fd5b6100c16100bc366004611081565b610225565b005b6100c16100d1366004611081565b610302565b6100e96100e436600461109e565b6103c7565b6040516001600160a01b0390911681526020015b60405180910390f35b6100c1610114366004611081565b6103e0565b61014c610127366004611081565b600260205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016100fd565b61017e6101793660046111e5565b6104f4565b6040519081526020016100fd565b6101946105cd565b6040516100fd9796959493929190611288565b61017e6101b5366004611320565b610613565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e6101ef36600461135a565b600360209081526000938452604080852082529284528284209052825290205481565b6100c16102203660046113a5565b610626565b6001600160a01b038082166000908152600260205260409020805490913391849116821461027e57604051630ad827d360e41b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b5050600081600101541182906102b357604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b506000600182018190556040519081526001600160a01b0383169033907f3b4432b11b66b46d9a7b190aa989c0ae85a5395b543540220596dd94dd405ceb906020015b60405180910390a35050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461035657604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b5061038390507f000000000000000000000000000000000000000000000000000000000000000042611445565b600182018190556040519081526001600160a01b0383169033907fd939049941f6a15381248e4ac0010f15efdf0f3221923711244c200b5ff2cddf906020016102f6565b60006103da6103d583611515565b6106e2565b92915050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461043457604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b50506000816001015411829061046957604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b50600181015442908181111561049b57604051631a42d0ab60e31b815260048101929092526024820152604401610275565b50506001600160a01b03821660008181526002602052604080822080546001600160a01b03191681556001018290555133917f2fc91dbd92d741cae16e0315578d7f6cf77043b771692c4bd993658ecfe8942291a35050565b60008060008380602001905181019061050d91906115d2565b815151919350915033906001600160a01b0381168214610553576040516347666ba360e11b81526001600160a01b03928316600482015291166024820152604401610275565b50506000610560836106e2565b6001600160a01b038082166000908152600260205260409020549192501661059b57604051630ef060dd60e01b815260040160405180910390fd5b6001600160a01b038082166000908152600260205260409020546105c3918891168585610709565b9695505050505050565b6000606080600080600060606105e1610957565b6105e9610989565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60006103da610621836116f8565b6109b6565b6001600160a01b03848116600090815260026020526040902054168481156106745760405163cb2320b760e01b81526001600160a01b03928316600482015291166024820152604401610275565b505061068282828587610a6d565b6001600160a01b03841660008181526002602052604080822080546001600160a01b0319163390811782556001909101839055905190917f6edcdd4150e63c6c36d965976c1c37375609c8b040c50d39e7156437b80e282891a350505050565b6000806106f283600001516109b6565b9050610702818460200151610b95565b9392505050565b815180516020808301516060909301516001600160a01b03808416600090815260038452604080822083881683528552808220928a168252919093528220549193916001600160801b03909116908181808211610782576040516308e467d960e31b815260048101929092526024820152604401610275565b50600090506107918284611704565b9050600061079f8289610bbf565b90508115610862576001600160a01b03868116600090815260036020908152604080832089851684528252808320938e168352929052208490557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387dbfe828c8c88868b876040518763ffffffff1660e01b815260040161082f9695949392919061172d565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b505050505b856001600160a01b03168a6001600160a01b03168c600281111561088857610888611717565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4846001600160a01b0316866001600160a01b03168b6001600160a01b03167f2d55f33a4a377f40129b217a6cf7a5022a112941b80cd589332abc245aa0a5c78c60000151604001518d60000151606001518e60000151608001518f602001516040516109419493929190611781565b60405180910390a4509998505050505050505050565b60606109847f00000000000000000000000000000000000000000000000000000000000000006000610c26565b905090565b60606109847f00000000000000000000000000000000000000000000000000000000000000006001610c26565b60006103da7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610a52969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610cd1565b8142808211610a98576040516343c042b360e01b815260048101929092526024820152604401610275565b50506040805146602082015290810183905233606090811b6bffffffffffffffffffffffff1916908201526000906074016040516020818303038152906040528051906020012090506000610b1a827f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b9050826001600160a01b0316610b668288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b9592505050565b6001600160a01b031614610b8d5760405163164f10af60e11b815260040160405180910390fd5b505050505050565b600080600080610ba58686610cfe565b925092509250610bb58282610d4b565b5090949350505050565b6000610bce83620f4240101590565b80610be15750610be182620f4240101590565b83839091610c0b5760405163768bf0eb60e11b815260048101929092526024820152604401610275565b50620f42409050610c1c83856117cf565b61070291906117e6565b606060ff8314610c4057610c3983610e08565b90506103da565b818054610c4c90611808565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7890611808565b8015610cc55780601f10610c9a57610100808354040283529160200191610cc5565b820191906000526020600020905b815481529060010190602001808311610ca857829003601f168201915b505050505090506103da565b60006103da610cde610e47565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008351604103610d385760208401516040850151606086015160001a610d2a88828585610f72565b955095509550505050610d44565b50508151600091506002905b9250925092565b6000826003811115610d5f57610d5f611717565b03610d68575050565b6001826003811115610d7c57610d7c611717565b03610d9a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610dae57610dae611717565b03610dcf5760405163fce698f760e01b815260048101829052602401610275565b6003826003811115610de357610de3611717565b03610e04576040516335e2f38360e21b815260048101829052602401610275565b5050565b60606000610e1583611041565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ea057507f000000000000000000000000000000000000000000000000000000000000000046145b15610eca57507f000000000000000000000000000000000000000000000000000000000000000090565b610984604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610fad5750600091506003905082611037565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611001573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661102d57506000925060019150829050611037565b9250600091508190505b9450945094915050565b600060ff8216601f8111156103da57604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b038116811461107e57600080fd5b50565b60006020828403121561109357600080fd5b813561070281611069565b6000602082840312156110b057600080fd5b81356001600160401b038111156110c657600080fd5b82016040818503121561070257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715611110576111106110d8565b60405290565b604080519081016001600160401b0381118282101715611110576111106110d8565b604051601f8201601f191681016001600160401b0381118282101715611160576111606110d8565b604052919050565b60006001600160401b03821115611181576111816110d8565b50601f01601f191660200190565b600082601f8301126111a057600080fd5b81356111b36111ae82611168565b611138565b8181528460208386010111156111c857600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156111f857600080fd5b82356003811061120757600080fd5b915060208301356001600160401b0381111561122257600080fd5b61122e8582860161118f565b9150509250929050565b60005b8381101561125357818101518382015260200161123b565b50506000910152565b60008151808452611274816020860160208601611238565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e0602082015260006112a760e083018961125c565b82810360408401526112b9818961125c565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561130f5783518352602093840193909201916001016112f1565b50909b9a5050505050505050505050565b60006020828403121561133257600080fd5b81356001600160401b0381111561134857600080fd5b820160a0818503121561070257600080fd5b60008060006060848603121561136f57600080fd5b833561137a81611069565b9250602084013561138a81611069565b9150604084013561139a81611069565b809150509250925092565b600080600080606085870312156113bb57600080fd5b84356113c681611069565b93506020850135925060408501356001600160401b038111156113e857600080fd5b8501601f810187136113f957600080fd5b80356001600160401b0381111561140f57600080fd5b87602082840101111561142157600080fd5b949793965060200194505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156103da576103da61142f565b6001600160401b038116811461107e57600080fd5b6001600160801b038116811461107e57600080fd5b600060a0828403121561149457600080fd5b61149c6110ee565b905081356114a981611069565b815260208201356114b981611069565b602082015260408201356114cc81611458565b604082015260608201356114df8161146d565b606082015260808201356001600160401b038111156114fd57600080fd5b6115098482850161118f565b60808301525092915050565b60006040823603121561152757600080fd5b61152f611116565b82356001600160401b0381111561154557600080fd5b61155136828601611482565b82525060208301356001600160401b0381111561156d57600080fd5b6115793682860161118f565b60208301525092915050565b600082601f83011261159657600080fd5b81516115a46111ae82611168565b8181528460208386010111156115b957600080fd5b6115ca826020830160208701611238565b949350505050565b600080604083850312156115e557600080fd5b82516001600160401b038111156115fb57600080fd5b83016040818603121561160d57600080fd5b611615611116565b81516001600160401b0381111561162b57600080fd5b820160a0818803121561163d57600080fd5b6116456110ee565b815161165081611069565b8152602082015161166081611069565b6020820152604082015161167381611458565b604082015260608201516116868161146d565b606082015260808201516001600160401b038111156116a457600080fd5b6116b089828501611585565b60808301525082525060208201516001600160401b038111156116d257600080fd5b6116de87828501611585565b602083810191909152959095015190969095509350505050565b60006103da3683611482565b818103818111156103da576103da61142f565b634e487b7160e01b600052602160045260246000fd5b60c081016003881061174f57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b6001600160401b03851681526001600160801b03841660208201526080604082015260006117b2608083018561125c565b82810360608401526117c4818561125c565b979650505050505050565b80820281158282048414176103da576103da61142f565b60008261180357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061181c57607f821691505b60208210810361183c57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220acb6bfec6d9c2f80f4ced26fd1055163ff8dce81039d2e933346d801e1bdbb3064736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/build-info/e51c04f0f0fdce5715962999616918b7.json b/packages/subgraph-service/ignition/deployments/chain-421614/build-info/e51c04f0f0fdce5715962999616918b7.json new file mode 100644 index 000000000..327e64d9a --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/build-info/e51c04f0f0fdce5715962999616918b7.json @@ -0,0 +1,254531 @@ +{ + "id": "e51c04f0f0fdce5715962999616918b7", + "_format": "hh-sol-build-info-1", + "solcVersion": "0.8.27", + "solcLongVersion": "0.8.27+commit.40a35a09", + "input": { + "language": "Solidity", + "sources": { + "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\n\n/*\n * Copyright 2020, Offchain Labs, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Originally copied from:\n * https://github.com/OffchainLabs/arbitrum/tree/e3a6307ad8a2dc2cad35728a2a9908cfd8dd8ef9/packages/arb-bridge-peripherals\n *\n * MODIFIED from Offchain Labs' implementation:\n * - Changed solidity version to 0.7.6 (pablo@edgeandnode.com)\n *\n */\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface ITokenGateway {\n /// @notice event deprecated in favor of DepositInitiated and WithdrawalInitiated\n // event OutboundTransferInitiated(\n // address token,\n // address indexed _from,\n // address indexed _to,\n // uint256 indexed _transferId,\n // uint256 _amount,\n // bytes _data\n // );\n\n /// @notice event deprecated in favor of DepositFinalized and WithdrawalFinalized\n // event InboundTransferFinalized(\n // address token,\n // address indexed _from,\n // address indexed _to,\n // uint256 indexed _transferId,\n // uint256 _amount,\n // bytes _data\n // );\n\n function outboundTransfer(\n address token,\n address to,\n uint256 amunt,\n uint256 maxas,\n uint256 gasPiceBid,\n bytes calldata data\n ) external payable returns (bytes memory);\n\n function finalizeInboundTransfer(\n address token,\n address from,\n address to,\n uint256 amount,\n bytes calldata data\n ) external payable;\n\n /**\n * @notice Calculate the address used when bridging an ERC20 token\n * @dev the L1 and L2 address oracles may not always be in sync.\n * For example, a custom token may have been registered but not deployed or the contract self destructed.\n * @param l1ERC20 address of L1 token\n * @return L2 address of a bridged ERC20 token\n */\n function calculateL2TokenAddress(address l1ERC20) external view returns (address);\n}\n" + }, + "@graphprotocol/contracts/contracts/curation/ICuration.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\n/**\n * @title Curation Interface\n * @dev Interface for the Curation contract (and L2Curation too)\n */\ninterface ICuration {\n // -- Configuration --\n\n /**\n * @notice Update the default reserve ratio to `_defaultReserveRatio`\n * @param _defaultReserveRatio Reserve ratio (in PPM)\n */\n function setDefaultReserveRatio(uint32 _defaultReserveRatio) external;\n\n /**\n * @notice Update the minimum deposit amount needed to intialize a new subgraph\n * @param _minimumCurationDeposit Minimum amount of tokens required deposit\n */\n function setMinimumCurationDeposit(uint256 _minimumCurationDeposit) external;\n\n /**\n * @notice Set the curation tax percentage to charge when a curator deposits GRT tokens.\n * @param _percentage Curation tax percentage charged when depositing GRT tokens\n */\n function setCurationTaxPercentage(uint32 _percentage) external;\n\n /**\n * @notice Set the master copy to use as clones for the curation token.\n * @param _curationTokenMaster Address of implementation contract to use for curation tokens\n */\n function setCurationTokenMaster(address _curationTokenMaster) external;\n\n // -- Curation --\n\n /**\n * @notice Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool.\n * @param _subgraphDeploymentID Subgraph deployment pool from where to mint signal\n * @param _tokensIn Amount of Graph Tokens to deposit\n * @param _signalOutMin Expected minimum amount of signal to receive\n * @return Amount of signal minted\n * @return Amount of curation tax burned\n */\n function mint(\n bytes32 _subgraphDeploymentID,\n uint256 _tokensIn,\n uint256 _signalOutMin\n ) external returns (uint256, uint256);\n\n /**\n * @notice Burn _signal from the SubgraphDeployment curation pool\n * @param _subgraphDeploymentID SubgraphDeployment the curator is returning signal\n * @param _signalIn Amount of signal to return\n * @param _tokensOutMin Expected minimum amount of tokens to receive\n * @return Tokens returned\n */\n function burn(bytes32 _subgraphDeploymentID, uint256 _signalIn, uint256 _tokensOutMin) external returns (uint256);\n\n /**\n * @notice Assign Graph Tokens collected as curation fees to the curation pool reserve.\n * @param _subgraphDeploymentID SubgraphDeployment where funds should be allocated as reserves\n * @param _tokens Amount of Graph Tokens to add to reserves\n */\n function collect(bytes32 _subgraphDeploymentID, uint256 _tokens) external;\n\n // -- Getters --\n\n /**\n * @notice Check if any GRT tokens are deposited for a SubgraphDeployment.\n * @param _subgraphDeploymentID SubgraphDeployment to check if curated\n * @return True if curated, false otherwise\n */\n function isCurated(bytes32 _subgraphDeploymentID) external view returns (bool);\n\n /**\n * @notice Get the amount of signal a curator has in a curation pool.\n * @param _curator Curator owning the signal tokens\n * @param _subgraphDeploymentID Subgraph deployment curation pool\n * @return Amount of signal owned by a curator for the subgraph deployment\n */\n function getCuratorSignal(address _curator, bytes32 _subgraphDeploymentID) external view returns (uint256);\n\n /**\n * @notice Get the amount of signal in a curation pool.\n * @param _subgraphDeploymentID Subgraph deployment curation pool\n * @return Amount of signal minted for the subgraph deployment\n */\n function getCurationPoolSignal(bytes32 _subgraphDeploymentID) external view returns (uint256);\n\n /**\n * @notice Get the amount of token reserves in a curation pool.\n * @param _subgraphDeploymentID Subgraph deployment curation pool\n * @return Amount of token reserves in the curation pool\n */\n function getCurationPoolTokens(bytes32 _subgraphDeploymentID) external view returns (uint256);\n\n /**\n * @notice Calculate amount of signal that can be bought with tokens in a curation pool.\n * This function considers and excludes the deposit tax.\n * @param _subgraphDeploymentID Subgraph deployment to mint signal\n * @param _tokensIn Amount of tokens used to mint signal\n * @return Amount of signal that can be bought\n * @return Amount of tokens that will be burned as curation tax\n */\n function tokensToSignal(bytes32 _subgraphDeploymentID, uint256 _tokensIn) external view returns (uint256, uint256);\n\n /**\n * @notice Calculate number of tokens to get when burning signal from a curation pool.\n * @param _subgraphDeploymentID Subgraph deployment to burn signal\n * @param _signalIn Amount of signal to burn\n * @return Amount of tokens to get for the specified amount of signal\n */\n function signalToTokens(bytes32 _subgraphDeploymentID, uint256 _signalIn) external view returns (uint256);\n\n /**\n * @notice Tax charged when curators deposit funds.\n * Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%)\n * @return Curation tax percentage expressed in PPM\n */\n function curationTaxPercentage() external view returns (uint32);\n}\n" + }, + "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface IEpochManager {\n // -- Configuration --\n\n function setEpochLength(uint256 _epochLength) external;\n\n // -- Epochs\n\n function runEpoch() external;\n\n // -- Getters --\n\n function isCurrentEpochRun() external view returns (bool);\n\n function blockNum() external view returns (uint256);\n\n function blockHash(uint256 _block) external view returns (bytes32);\n\n function currentEpoch() external view returns (uint256);\n\n function currentEpochBlock() external view returns (uint256);\n\n function currentEpochBlockSinceStart() external view returns (uint256);\n\n function epochsSince(uint256 _epoch) external view returns (uint256);\n\n function epochsSinceUpdate() external view returns (uint256);\n}\n" + }, + "@graphprotocol/contracts/contracts/governance/IController.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface IController {\n function getGovernor() external view returns (address);\n\n // -- Registry --\n\n function setContractProxy(bytes32 _id, address _contractAddress) external;\n\n function unsetContractProxy(bytes32 _id) external;\n\n function updateController(bytes32 _id, address _controller) external;\n\n function getContractProxy(bytes32 _id) external view returns (address);\n\n // -- Pausing --\n\n function setPartialPaused(bool _partialPaused) external;\n\n function setPaused(bool _paused) external;\n\n function setPauseGuardian(address _newPauseGuardian) external;\n\n function paused() external view returns (bool);\n\n function partialPaused() external view returns (bool);\n}\n" + }, + "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface IRewardsIssuer {\n /**\n * @dev Get allocation data to calculate rewards issuance\n * @param allocationId The allocation Id\n * @return indexer The indexer address\n * @return subgraphDeploymentId Subgraph deployment id for the allocation\n * @return tokens Amount of allocated tokens\n * @return accRewardsPerAllocatedToken Rewards snapshot\n * @return accRewardsPending Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed\n */\n function getAllocationData(\n address allocationId\n )\n external\n view\n returns (\n address indexer,\n bytes32 subgraphDeploymentId,\n uint256 tokens,\n uint256 accRewardsPerAllocatedToken,\n uint256 accRewardsPending\n );\n\n /**\n * @notice Return the total amount of tokens allocated to subgraph.\n * @param _subgraphDeploymentId Deployment Id for the subgraph\n * @return Total tokens allocated to subgraph\n */\n function getSubgraphAllocatedTokens(bytes32 _subgraphDeploymentId) external view returns (uint256);\n\n /**\n * @notice Whether or not an allocation is active (i.e open)\n * @param _allocationId Allocation Id\n * @return Whether or not the allocation is active\n */\n function isActiveAllocation(address _allocationId) external view returns (bool);\n}\n" + }, + "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface IRewardsManager {\n /**\n * @dev Stores accumulated rewards and snapshots related to a particular SubgraphDeployment.\n */\n struct Subgraph {\n uint256 accRewardsForSubgraph;\n uint256 accRewardsForSubgraphSnapshot;\n uint256 accRewardsPerSignalSnapshot;\n uint256 accRewardsPerAllocatedToken;\n }\n\n // -- Config --\n\n function setIssuancePerBlock(uint256 _issuancePerBlock) external;\n\n function setMinimumSubgraphSignal(uint256 _minimumSubgraphSignal) external;\n\n function setSubgraphService(address _subgraphService) external;\n\n // -- Denylist --\n\n function setSubgraphAvailabilityOracle(address _subgraphAvailabilityOracle) external;\n\n function setDenied(bytes32 _subgraphDeploymentID, bool _deny) external;\n\n function setDeniedMany(bytes32[] calldata _subgraphDeploymentID, bool[] calldata _deny) external;\n\n function isDenied(bytes32 _subgraphDeploymentID) external view returns (bool);\n\n // -- Getters --\n\n function getNewRewardsPerSignal() external view returns (uint256);\n\n function getAccRewardsPerSignal() external view returns (uint256);\n\n function getAccRewardsForSubgraph(bytes32 _subgraphDeploymentID) external view returns (uint256);\n\n function getAccRewardsPerAllocatedToken(bytes32 _subgraphDeploymentID) external view returns (uint256, uint256);\n\n function getRewards(address _allocationID) external view returns (uint256);\n\n function calcRewards(uint256 _tokens, uint256 _accRewardsPerAllocatedToken) external pure returns (uint256);\n\n // -- Updates --\n\n function updateAccRewardsPerSignal() external returns (uint256);\n\n function takeRewards(address _allocationID) external returns (uint256);\n\n // -- Hooks --\n\n function onSubgraphSignalUpdate(bytes32 _subgraphDeploymentID) external returns (uint256);\n\n function onSubgraphAllocationUpdate(bytes32 _subgraphDeploymentID) external returns (uint256);\n}\n" + }, + "@graphprotocol/contracts/contracts/token/IGraphToken.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IGraphToken is IERC20 {\n // -- Mint and Burn --\n\n function burn(uint256 amount) external;\n\n function burnFrom(address _from, uint256 amount) external;\n\n function mint(address _to, uint256 _amount) external;\n\n // -- Mint Admin --\n\n function addMinter(address _account) external;\n\n function removeMinter(address _account) external;\n\n function renounceMinter() external;\n\n function isMinter(address _account) external view returns (bool);\n\n // -- Permit --\n\n function permit(\n address _owner,\n address _spender,\n uint256 _value,\n uint256 _deadline,\n uint8 _v,\n bytes32 _r,\n bytes32 _s\n ) external;\n\n // -- Allowance --\n\n function increaseAllowance(address spender, uint256 addedValue) external returns (bool);\n\n function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);\n}\n" + }, + "@graphprotocol/contracts/contracts/utils/TokenUtils.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\nimport \"../token/IGraphToken.sol\";\n\n/**\n * @title TokenUtils library\n * @notice This library contains utility functions for handling tokens (transfers and burns).\n * It is specifically adapted for the GraphToken, so does not need to handle edge cases\n * for other tokens.\n */\nlibrary TokenUtils {\n /**\n * @dev Pull tokens from an address to this contract.\n * @param _graphToken Token to transfer\n * @param _from Address sending the tokens\n * @param _amount Amount of tokens to transfer\n */\n function pullTokens(IGraphToken _graphToken, address _from, uint256 _amount) internal {\n if (_amount > 0) {\n require(_graphToken.transferFrom(_from, address(this), _amount), \"!transfer\");\n }\n }\n\n /**\n * @dev Push tokens from this contract to a receiving address.\n * @param _graphToken Token to transfer\n * @param _to Address receiving the tokens\n * @param _amount Amount of tokens to transfer\n */\n function pushTokens(IGraphToken _graphToken, address _to, uint256 _amount) internal {\n if (_amount > 0) {\n require(_graphToken.transfer(_to, _amount), \"!transfer\");\n }\n }\n\n /**\n * @dev Burn tokens held by this contract.\n * @param _graphToken Token to burn\n * @param _amount Amount of tokens to burn\n */\n function burnTokens(IGraphToken _graphToken, uint256 _amount) internal {\n if (_amount > 0) {\n _graphToken.burn(_amount);\n }\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/DataService.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataService } from \"./interfaces/IDataService.sol\";\n\nimport { DataServiceV1Storage } from \"./DataServiceStorage.sol\";\nimport { GraphDirectory } from \"../utilities/GraphDirectory.sol\";\nimport { ProvisionManager } from \"./utilities/ProvisionManager.sol\";\n\n/**\n * @title DataService contract\n * @dev Implementation of the {IDataService} interface.\n * @notice This implementation provides base functionality for a data service:\n * - GraphDirectory, allows the data service to interact with Graph Horizon contracts\n * - ProvisionManager, provides functionality to manage provisions\n *\n * The derived contract MUST implement all the interfaces described in {IDataService} and in\n * accordance with the Data Service framework.\n * @dev A note on upgradeability: this base contract can be inherited by upgradeable or non upgradeable\n * contracts.\n * - If the data service implementation is upgradeable, it must initialize the contract via an external\n * initializer function with the `initializer` modifier that calls {__DataService_init} or\n * {__DataService_init_unchained}. It's recommended the implementation constructor to also call\n * {_disableInitializers} to prevent the implementation from being initialized.\n * - If the data service implementation is NOT upgradeable, it must initialize the contract by calling\n * {__DataService_init} or {__DataService_init_unchained} in the constructor. Note that the `initializer`\n * will be required in the constructor.\n */\nabstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1Storage, IDataService {\n /**\n * @dev Addresses in GraphDirectory are immutables, they can only be set in this constructor.\n * @param controller The address of the Graph Horizon controller contract.\n */\n constructor(address controller) GraphDirectory(controller) {}\n\n /**\n * @notice Initializes the contract and any parent contracts.\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DataService_init() internal onlyInitializing {\n __ProvisionManager_init_unchained();\n __DataService_init_unchained();\n }\n\n /**\n * @notice Initializes the contract.\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DataService_init_unchained() internal onlyInitializing {}\n\n /**\n * @notice See {IDataService-getThawingPeriodRange}.\n */\n function getThawingPeriodRange() external view returns (uint64, uint64) {\n return _getThawingPeriodRange();\n }\n\n /**\n * @notice See {IDataService-getVerifierCutRange}.\n */\n function getVerifierCutRange() external view returns (uint32, uint32) {\n return _getVerifierCutRange();\n }\n\n /**\n * @notice See {IDataService-getProvisionTokensRange}.\n */\n function getProvisionTokensRange() external view returns (uint256, uint256) {\n return _getProvisionTokensRange();\n }\n\n /**\n * @notice See {IDataService-getDelegationRatio}.\n */\n function getDelegationRatio() external view returns (uint32) {\n return _getDelegationRatio();\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nabstract contract DataServiceV1Storage {\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataServiceFees } from \"../interfaces/IDataServiceFees.sol\";\n\nimport { ProvisionTracker } from \"../libraries/ProvisionTracker.sol\";\nimport { LinkedList } from \"../../libraries/LinkedList.sol\";\n\nimport { DataService } from \"../DataService.sol\";\nimport { DataServiceFeesV1Storage } from \"./DataServiceFeesStorage.sol\";\n\n/**\n * @title DataServiceFees contract\n * @dev Implementation of the {IDataServiceFees} interface.\n * @notice Extension for the {IDataService} contract to handle payment collateralization\n * using a Horizon provision. See {IDataServiceFees} for more details.\n */\nabstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees {\n using ProvisionTracker for mapping(address => uint256);\n using LinkedList for LinkedList.List;\n\n /**\n * @notice See {IDataServiceFees-releaseStake}\n */\n function releaseStake(uint256 numClaimsToRelease) external virtual override {\n _releaseStake(msg.sender, numClaimsToRelease);\n }\n\n /**\n * @notice Locks stake for a service provider to back a payment.\n * Creates a stake claim, which is stored in a linked list by service provider.\n * @dev Requirements:\n * - The associated provision must have enough available tokens to lock the stake.\n *\n * Emits a {StakeClaimLocked} event.\n *\n * @param _serviceProvider The address of the service provider\n * @param _tokens The amount of tokens to lock in the claim\n * @param _unlockTimestamp The timestamp when the tokens can be released\n */\n function _lockStake(address _serviceProvider, uint256 _tokens, uint256 _unlockTimestamp) internal {\n require(_tokens != 0, DataServiceFeesZeroTokens());\n feesProvisionTracker.lock(_graphStaking(), _serviceProvider, _tokens, delegationRatio);\n\n LinkedList.List storage claimsList = claimsLists[_serviceProvider];\n\n // Save item and add to list\n bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce);\n claims[claimId] = StakeClaim({\n tokens: _tokens,\n createdAt: block.timestamp,\n releasableAt: _unlockTimestamp,\n nextClaim: bytes32(0)\n });\n if (claimsList.count != 0) claims[claimsList.tail].nextClaim = claimId;\n claimsList.addTail(claimId);\n\n emit StakeClaimLocked(_serviceProvider, claimId, _tokens, _unlockTimestamp);\n }\n\n /**\n * @notice See {IDataServiceFees-releaseStake}\n */\n function _releaseStake(address _serviceProvider, uint256 _numClaimsToRelease) internal {\n LinkedList.List storage claimsList = claimsLists[_serviceProvider];\n (uint256 claimsReleased, bytes memory data) = claimsList.traverse(\n _getNextStakeClaim,\n _processStakeClaim,\n _deleteStakeClaim,\n abi.encode(0, _serviceProvider),\n _numClaimsToRelease\n );\n\n emit StakeClaimsReleased(_serviceProvider, claimsReleased, abi.decode(data, (uint256)));\n }\n\n /**\n * @notice Processes a stake claim, releasing the tokens if the claim has expired.\n * @dev This function is used as a callback in the stake claims linked list traversal.\n * @param _claimId The id of the stake claim\n * @param _acc The accumulator for the stake claims being processed\n * @return Wether the stake claim is still locked, indicating that the traversal should continue or stop.\n * @return The updated accumulator data\n */\n function _processStakeClaim(bytes32 _claimId, bytes memory _acc) private returns (bool, bytes memory) {\n StakeClaim memory claim = _getStakeClaim(_claimId);\n\n // early exit\n if (claim.releasableAt > block.timestamp) {\n return (true, LinkedList.NULL_BYTES);\n }\n\n // decode\n (uint256 tokensClaimed, address serviceProvider) = abi.decode(_acc, (uint256, address));\n\n // process\n feesProvisionTracker.release(serviceProvider, claim.tokens);\n emit StakeClaimReleased(serviceProvider, _claimId, claim.tokens, claim.releasableAt);\n\n // encode\n _acc = abi.encode(tokensClaimed + claim.tokens, serviceProvider);\n return (false, _acc);\n }\n\n /**\n * @notice Deletes a stake claim.\n * @dev This function is used as a callback in the stake claims linked list traversal.\n * @param _claimId The ID of the stake claim to delete\n */\n function _deleteStakeClaim(bytes32 _claimId) private {\n delete claims[_claimId];\n }\n\n /**\n * @notice Gets the details of a stake claim\n * @param _claimId The ID of the stake claim\n */\n function _getStakeClaim(bytes32 _claimId) private view returns (StakeClaim memory) {\n StakeClaim memory claim = claims[_claimId];\n require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId));\n return claim;\n }\n\n /**\n * @notice Gets the next stake claim in the linked list\n * @dev This function is used as a callback in the stake claims linked list traversal.\n * @param _claimId The ID of the stake claim\n */\n function _getNextStakeClaim(bytes32 _claimId) private view returns (bytes32) {\n StakeClaim memory claim = claims[_claimId];\n require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId));\n return claim.nextClaim;\n }\n\n /**\n * @notice Builds a stake claim ID\n * @param _serviceProvider The address of the service provider\n * @param _nonce A nonce of the stake claim\n */\n function _buildStakeClaimId(address _serviceProvider, uint256 _nonce) private view returns (bytes32) {\n return keccak256(abi.encodePacked(address(this), _serviceProvider, _nonce));\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataServiceFees } from \"../interfaces/IDataServiceFees.sol\";\n\nimport { LinkedList } from \"../../libraries/LinkedList.sol\";\n\n/**\n * @title Storage layout for the {DataServiceFees} extension contract.\n */\nabstract contract DataServiceFeesV1Storage {\n mapping(address serviceProvider => uint256 tokens) public feesProvisionTracker;\n\n /// @notice List of all locked stake claims to be released to service providers\n mapping(bytes32 claimId => IDataServiceFees.StakeClaim claim) public claims;\n\n /// @notice Service providers registered in the data service\n mapping(address serviceProvider => LinkedList.List list) public claimsLists;\n\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataServicePausable } from \"../interfaces/IDataServicePausable.sol\";\n\nimport { PausableUpgradeable } from \"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\";\nimport { DataService } from \"../DataService.sol\";\n\n/**\n * @title DataServicePausableUpgradeable contract\n * @dev Implementation of the {IDataServicePausable} interface.\n * @dev Upgradeable version of the {DataServicePausable} contract.\n */\nabstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataService, IDataServicePausable {\n /// @notice List of pause guardians and their allowed status\n mapping(address pauseGuardian => bool allowed) public pauseGuardians;\n\n /**\n * @notice Checks if the caller is a pause guardian.\n */\n modifier onlyPauseGuardian() {\n require(pauseGuardians[msg.sender], DataServicePausableNotPauseGuardian(msg.sender));\n _;\n }\n\n /**\n * @notice See {IDataServicePausable-pause}\n */\n function pause() external override onlyPauseGuardian whenNotPaused {\n _pause();\n }\n\n /**\n * @notice See {IDataServicePausable-pause}\n */\n function unpause() external override onlyPauseGuardian whenPaused {\n _unpause();\n }\n\n /**\n * @notice Initializes the contract and parent contracts\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DataServicePausable_init() internal onlyInitializing {\n __Pausable_init_unchained();\n __DataServicePausable_init_unchained();\n }\n\n /**\n * @notice Initializes the contract\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DataServicePausable_init_unchained() internal onlyInitializing {}\n\n /**\n * @notice Sets a pause guardian.\n * @dev Internal function to be used by the derived contract to set pause guardians.\n *\n * Emits a {PauseGuardianSet} event.\n *\n * @param _pauseGuardian The address of the pause guardian\n * @param _allowed The allowed status of the pause guardian\n */\n function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused {\n pauseGuardians[_pauseGuardian] = _allowed;\n emit PauseGuardianSet(_pauseGuardian, _allowed);\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"../../interfaces/IGraphPayments.sol\";\n\n/**\n * @title Interface of the base {DataService} contract as defined by the Graph Horizon specification.\n * @notice This interface provides a guardrail for contracts that use the Data Service framework\n * to implement a data service on Graph Horizon. Much of the specification is intentionally loose\n * to allow for greater flexibility when designing a data service. It's not possible to guarantee that\n * an implementation will honor the Data Service framework guidelines so it's advised to always review\n * the implementation code and the documentation.\n * @dev This interface is expected to be inherited and extended by a data service interface. It can be\n * used to interact with it however it's advised to use the more specific parent interface.\n */\ninterface IDataService {\n /**\n * @notice Emitted when a service provider is registered with the data service.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n event ServiceProviderRegistered(address indexed serviceProvider, bytes data);\n\n /**\n * @notice Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\n * @param serviceProvider The address of the service provider.\n */\n event ProvisionPendingParametersAccepted(address indexed serviceProvider);\n\n /**\n * @notice Emitted when a service provider starts providing the service.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n event ServiceStarted(address indexed serviceProvider, bytes data);\n\n /**\n * @notice Emitted when a service provider stops providing the service.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n event ServiceStopped(address indexed serviceProvider, bytes data);\n\n /**\n * @notice Emitted when a service provider collects payment.\n * @param serviceProvider The address of the service provider.\n * @param feeType The type of fee to collect as defined in {GraphPayments}.\n * @param tokens The amount of tokens collected.\n */\n event ServicePaymentCollected(\n address indexed serviceProvider,\n IGraphPayments.PaymentTypes indexed feeType,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when a service provider is slashed.\n * @param serviceProvider The address of the service provider.\n * @param tokens The amount of tokens slashed.\n */\n event ServiceProviderSlashed(address indexed serviceProvider, uint256 tokens);\n\n /**\n * @notice Registers a service provider with the data service. The service provider can now\n * start providing the service.\n * @dev Before registering, the service provider must have created a provision in the\n * Graph Horizon staking contract with parameters that are compatible with the data service.\n *\n * Verifies provision parameters and rejects registration in the event they are not valid.\n *\n * Emits a {ServiceProviderRegistered} event.\n *\n * NOTE: Failing to accept the provision will result in the service provider operating\n * on an unverified provision. Depending on of the data service this can be a security\n * risk as the protocol won't be able to guarantee economic security for the consumer.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function register(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking\n * contract}.\n * @dev Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}.\n *\n * Emits a {ProvisionPendingParametersAccepted} event.\n *\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function acceptProvisionPendingParameters(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice Service provider starts providing the service.\n * @dev Emits a {ServiceStarted} event.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function startService(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice Service provider stops providing the service.\n * @dev Emits a {ServiceStopped} event.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function stopService(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice Collects payment earnt by the service provider.\n * @dev The implementation of this function is expected to interact with {GraphPayments}\n * to collect payment from the service payer, which is done via {IGraphPayments-collect}.\n * @param serviceProvider The address of the service provider.\n *\n * Emits a {ServicePaymentCollected} event.\n *\n * NOTE: Data services that are vetted by the Graph Council might qualify for a portion of\n * protocol issuance to cover for these payments. In this case, the funds are taken by\n * interacting with the rewards manager contract instead of the {GraphPayments} contract.\n * @param serviceProvider The address of the service provider.\n * @param feeType The type of fee to collect as defined in {GraphPayments}.\n * @param data Custom data, usage defined by the data service.\n * @return The amount of tokens collected.\n */\n function collect(\n address serviceProvider,\n IGraphPayments.PaymentTypes feeType,\n bytes calldata data\n ) external returns (uint256);\n\n /**\n * @notice Slash a service provider for misbehaviour.\n * @dev To slash the service provider's provision the function should call\n * {Staking-slash}.\n *\n * Emits a {ServiceProviderSlashed} event.\n *\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function slash(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice External getter for the thawing period range\n * @return Minimum thawing period allowed\n * @return Maximum thawing period allowed\n */\n function getThawingPeriodRange() external view returns (uint64, uint64);\n\n /**\n * @notice External getter for the verifier cut range\n * @return Minimum verifier cut allowed\n * @return Maximum verifier cut allowed\n */\n function getVerifierCutRange() external view returns (uint32, uint32);\n\n /**\n * @notice External getter for the provision tokens range\n * @return Minimum provision tokens allowed\n * @return Maximum provision tokens allowed\n */\n function getProvisionTokensRange() external view returns (uint256, uint256);\n\n /**\n * @notice External getter for the delegation ratio\n * @return The delegation ratio\n */\n function getDelegationRatio() external view returns (uint32);\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataService } from \"./IDataService.sol\";\n\n/**\n * @title Interface for the {DataServiceFees} contract.\n * @notice Extension for the {IDataService} contract to handle payment collateralization\n * using a Horizon provision.\n *\n * It's designed to be used with the Data Service framework:\n * - When a service provider collects payment with {IDataService.collect} the data service should lock\n * stake to back the payment using {_lockStake}.\n * - Every time there is a payment collection with {IDataService.collect}, the data service should\n * attempt to release any expired stake claims by calling {_releaseStake}.\n * - Stake claims can also be manually released by calling {releaseStake} directly.\n *\n * @dev Note that this implementation uses the entire provisioned stake as collateral for the payment.\n * It can be used to provide economic security for the payments collected as long as the provisioned\n * stake is not being used for other purposes.\n */\ninterface IDataServiceFees is IDataService {\n /**\n * @notice A stake claim, representing provisioned stake that gets locked\n * to be released to a service provider.\n * @dev StakeClaims are stored in linked lists by service provider, ordered by\n * creation timestamp.\n */\n struct StakeClaim {\n // The amount of tokens to be locked in the claim\n uint256 tokens;\n // Timestamp when the claim was created\n uint256 createdAt;\n // Timestamp when the claim will expire and tokens can be released\n uint256 releasableAt;\n // Next claim in the linked list\n bytes32 nextClaim;\n }\n\n /**\n * @notice Emitted when a stake claim is created and stake is locked.\n * @param serviceProvider The address of the service provider\n * @param claimId The id of the stake claim\n * @param tokens The amount of tokens to lock in the claim\n * @param unlockTimestamp The timestamp when the tokens can be released\n */\n event StakeClaimLocked(\n address indexed serviceProvider,\n bytes32 indexed claimId,\n uint256 tokens,\n uint256 unlockTimestamp\n );\n\n /**\n * @notice Emitted when a stake claim is released and stake is unlocked.\n * @param serviceProvider The address of the service provider\n * @param claimId The id of the stake claim\n * @param tokens The amount of tokens released\n * @param releasableAt The timestamp when the tokens were released\n */\n event StakeClaimReleased(\n address indexed serviceProvider,\n bytes32 indexed claimId,\n uint256 tokens,\n uint256 releasableAt\n );\n\n /**\n * @notice Emitted when a series of stake claims are released.\n * @param serviceProvider The address of the service provider\n * @param claimsCount The number of stake claims being released\n * @param tokensReleased The total amount of tokens being released\n */\n event StakeClaimsReleased(address indexed serviceProvider, uint256 claimsCount, uint256 tokensReleased);\n\n /**\n * @notice Thrown when attempting to get a stake claim that does not exist.\n */\n error DataServiceFeesClaimNotFound(bytes32 claimId);\n\n /**\n * @notice Emitted when trying to lock zero tokens in a stake claim\n */\n error DataServiceFeesZeroTokens();\n\n /**\n * @notice Releases expired stake claims for the caller.\n * @dev This function is only meant to be called if the service provider has enough\n * stake claims that releasing them all at once would exceed the block gas limit.\n * @dev This function can be overriden and/or disabled.\n * @dev Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\n * @param numClaimsToRelease Amount of stake claims to process. If 0, all stake claims are processed.\n */\n function releaseStake(uint256 numClaimsToRelease) external;\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataService } from \"./IDataService.sol\";\n\n/**\n * @title Interface for the {DataServicePausable} contract.\n * @notice Extension for the {IDataService} contract, adds pausing functionality\n * to the data service. Pausing is controlled by privileged accounts called\n * pause guardians.\n */\ninterface IDataServicePausable is IDataService {\n /**\n * @notice Emitted when a pause guardian is set.\n * @param account The address of the pause guardian\n * @param allowed The allowed status of the pause guardian\n */\n event PauseGuardianSet(address indexed account, bool allowed);\n\n /**\n * @notice Emitted when a the caller is not a pause guardian\n * @param account The address of the pause guardian\n */\n error DataServicePausableNotPauseGuardian(address account);\n\n /**\n * @notice Pauses the data service.\n * @dev Note that only functions using the modifiers `whenNotPaused`\n * and `whenPaused` will be affected by the pause.\n *\n * Requirements:\n * - The contract must not be already paused\n */\n function pause() external;\n\n /**\n * @notice Unpauses the data service.\n * @dev Note that only functions using the modifiers `whenNotPaused`\n * and `whenPaused` will be affected by the pause.\n *\n * Requirements:\n * - The contract must be paused\n */\n function unpause() external;\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IHorizonStaking } from \"../../interfaces/IHorizonStaking.sol\";\n\n/**\n * @title ProvisionTracker library\n * @notice A library to facilitate tracking of \"used tokens\" on Graph Horizon provisions. This can be used to\n * ensure data services have enough economic security (provisioned stake) to back the payments they collect for\n * their services.\n * The library provides two primitives, lock and release to signal token usage and free up tokens respectively. It\n * does not make any assumptions about the conditions under which tokens are locked or released.\n */\nlibrary ProvisionTracker {\n /**\n * @notice Thrown when trying to lock more tokens than available\n */\n error ProvisionTrackerInsufficientTokens(uint256 tokensAvailable, uint256 tokensRequired);\n\n /**\n * @notice Locks tokens for a service provider\n * @dev Requirements:\n * - `tokens` must be less than or equal to the amount of tokens available, as reported by the HorizonStaking contract\n * @param self The provision tracker mapping\n * @param graphStaking The HorizonStaking contract\n * @param serviceProvider The service provider address\n * @param tokens The amount of tokens to lock\n * @param delegationRatio A delegation ratio to limit the amount of delegation that's usable\n */\n function lock(\n mapping(address => uint256) storage self,\n IHorizonStaking graphStaking,\n address serviceProvider,\n uint256 tokens,\n uint32 delegationRatio\n ) internal {\n if (tokens == 0) return;\n\n uint256 tokensRequired = self[serviceProvider] + tokens;\n uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio);\n require(tokensRequired <= tokensAvailable, ProvisionTrackerInsufficientTokens(tokensAvailable, tokensRequired));\n self[serviceProvider] += tokens;\n }\n\n /**\n * @notice Releases tokens for a service provider\n * @dev Requirements:\n * - `tokens` must be less than or equal to the amount of tokens locked for the service provider\n * @param self The provision tracker mapping\n * @param serviceProvider The service provider address\n * @param tokens The amount of tokens to release\n */\n function release(mapping(address => uint256) storage self, address serviceProvider, uint256 tokens) internal {\n if (tokens == 0) return;\n require(self[serviceProvider] >= tokens, ProvisionTrackerInsufficientTokens(self[serviceProvider], tokens));\n self[serviceProvider] -= tokens;\n }\n\n /**\n * @notice Checks if a service provider has enough tokens available to lock\n * @param self The provision tracker mapping\n * @param graphStaking The HorizonStaking contract\n * @param serviceProvider The service provider address\n * @param delegationRatio A delegation ratio to limit the amount of delegation that's usable\n */\n function check(\n mapping(address => uint256) storage self,\n IHorizonStaking graphStaking,\n address serviceProvider,\n uint32 delegationRatio\n ) internal view returns (bool) {\n uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio);\n return self[serviceProvider] <= tokensAvailable;\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IHorizonStaking } from \"../../interfaces/IHorizonStaking.sol\";\n\nimport { UintRange } from \"../../libraries/UintRange.sol\";\nimport { PPMMath } from \"../../libraries/PPMMath.sol\";\n\nimport { Initializable } from \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport { GraphDirectory } from \"../../utilities/GraphDirectory.sol\";\nimport { ProvisionManagerV1Storage } from \"./ProvisionManagerStorage.sol\";\n\n/**\n * @title ProvisionManager contract\n * @notice A helper contract that implements several provision management functions.\n * @dev Provides utilities to verify provision parameters are within an acceptable range. Each\n * parameter has an overridable setter and getter for the validity range, and a checker that reverts\n * if the parameter is out of range.\n * The parameters are:\n * - Provision parameters (thawing period and verifier cut)\n * - Provision tokens\n */\nabstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionManagerV1Storage {\n using UintRange for uint256;\n\n // Constants\n uint32 internal constant DEFAULT_MIN_VERIFIER_CUT = type(uint32).min;\n uint32 internal constant DEFAULT_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM);\n uint64 internal constant DEFAULT_MIN_THAWING_PERIOD = type(uint64).min;\n uint64 internal constant DEFAULT_MAX_THAWING_PERIOD = type(uint64).max;\n uint256 internal constant DEFAULT_MIN_PROVISION_TOKENS = type(uint256).min;\n uint256 internal constant DEFAULT_MAX_PROVISION_TOKENS = type(uint256).max;\n\n /**\n * @notice Emitted when the provision tokens range is set.\n * @param min The minimum allowed value for the provision tokens.\n * @param max The maximum allowed value for the provision tokens.\n */\n event ProvisionTokensRangeSet(uint256 min, uint256 max);\n\n /**\n * @notice Emitted when the delegation ratio is set.\n * @param ratio The delegation ratio\n */\n event DelegationRatioSet(uint32 ratio);\n\n /**\n * @notice Emitted when the verifier cut range is set.\n * @param min The minimum allowed value for the max verifier cut.\n * @param max The maximum allowed value for the max verifier cut.\n */\n event VerifierCutRangeSet(uint32 min, uint32 max);\n\n /**\n * @notice Emitted when the thawing period range is set.\n * @param min The minimum allowed value for the thawing period.\n * @param max The maximum allowed value for the thawing period.\n */\n event ThawingPeriodRangeSet(uint64 min, uint64 max);\n\n /**\n * @notice Thrown when a provision parameter is out of range.\n * @param message The error message.\n * @param value The value that is out of range.\n * @param min The minimum allowed value.\n * @param max The maximum allowed value.\n */\n error ProvisionManagerInvalidValue(bytes message, uint256 value, uint256 min, uint256 max);\n\n /**\n * @notice Thrown when attempting to set a range where min is greater than max.\n * @param min The minimum value.\n * @param max The maximum value.\n */\n error ProvisionManagerInvalidRange(uint256 min, uint256 max);\n\n /**\n * @notice Thrown when the caller is not authorized to manage the provision of a service provider.\n * @param serviceProvider The address of the serviceProvider.\n * @param caller The address of the caller.\n */\n error ProvisionManagerNotAuthorized(address serviceProvider, address caller);\n\n /**\n * @notice Thrown when a provision is not found.\n * @param serviceProvider The address of the service provider.\n */\n error ProvisionManagerProvisionNotFound(address serviceProvider);\n\n /**\n * @notice Checks if the caller is authorized to manage the provision of a service provider.\n */\n modifier onlyAuthorizedForProvision(address serviceProvider) {\n require(\n _graphStaking().isAuthorized(serviceProvider, address(this), msg.sender),\n ProvisionManagerNotAuthorized(serviceProvider, msg.sender)\n );\n _;\n }\n\n /**\n * @notice Checks if a provision of a service provider is valid according\n * to the parameter ranges established.\n */\n modifier onlyValidProvision(address serviceProvider) virtual {\n IHorizonStaking.Provision memory provision = _getProvision(serviceProvider);\n _checkProvisionTokens(provision);\n _checkProvisionParameters(provision, false);\n _;\n }\n\n /**\n * @notice Initializes the contract and any parent contracts.\n */\n // solhint-disable-next-line func-name-mixedcase\n function __ProvisionManager_init() internal onlyInitializing {\n __ProvisionManager_init_unchained();\n }\n\n /**\n * @notice Initializes the contract.\n * @dev All parameters set to their entire range as valid.\n */\n // solhint-disable-next-line func-name-mixedcase\n function __ProvisionManager_init_unchained() internal onlyInitializing {\n _setProvisionTokensRange(DEFAULT_MIN_PROVISION_TOKENS, DEFAULT_MAX_PROVISION_TOKENS);\n _setVerifierCutRange(DEFAULT_MIN_VERIFIER_CUT, DEFAULT_MAX_VERIFIER_CUT);\n _setThawingPeriodRange(DEFAULT_MIN_THAWING_PERIOD, DEFAULT_MAX_THAWING_PERIOD);\n }\n\n /**\n * @notice Verifies and accepts the provision parameters of a service provider in\n * the {HorizonStaking} contract.\n * @dev Checks the pending provision parameters, not the current ones.\n *\n * Emits a {ProvisionPendingParametersAccepted} event.\n *\n * @param _serviceProvider The address of the service provider.\n */\n function _acceptProvisionParameters(address _serviceProvider) internal {\n _checkProvisionParameters(_serviceProvider, true);\n _graphStaking().acceptProvisionParameters(_serviceProvider);\n }\n\n // -- setters --\n /**\n * @notice Sets the delegation ratio.\n * @param _ratio The delegation ratio to be set\n */\n function _setDelegationRatio(uint32 _ratio) internal {\n delegationRatio = _ratio;\n emit DelegationRatioSet(_ratio);\n }\n\n /**\n * @notice Sets the range for the provision tokens.\n * @param _min The minimum allowed value for the provision tokens.\n * @param _max The maximum allowed value for the provision tokens.\n */\n function _setProvisionTokensRange(uint256 _min, uint256 _max) internal {\n require(_min <= _max, ProvisionManagerInvalidRange(_min, _max));\n minimumProvisionTokens = _min;\n maximumProvisionTokens = _max;\n emit ProvisionTokensRangeSet(_min, _max);\n }\n\n /**\n * @notice Sets the range for the verifier cut.\n * @param _min The minimum allowed value for the max verifier cut.\n * @param _max The maximum allowed value for the max verifier cut.\n */\n function _setVerifierCutRange(uint32 _min, uint32 _max) internal {\n require(_min <= _max, ProvisionManagerInvalidRange(_min, _max));\n require(PPMMath.isValidPPM(_max), ProvisionManagerInvalidRange(_min, _max));\n minimumVerifierCut = _min;\n maximumVerifierCut = _max;\n emit VerifierCutRangeSet(_min, _max);\n }\n\n /**\n * @notice Sets the range for the thawing period.\n * @param _min The minimum allowed value for the thawing period.\n * @param _max The maximum allowed value for the thawing period.\n */\n function _setThawingPeriodRange(uint64 _min, uint64 _max) internal {\n require(_min <= _max, ProvisionManagerInvalidRange(_min, _max));\n minimumThawingPeriod = _min;\n maximumThawingPeriod = _max;\n emit ThawingPeriodRangeSet(_min, _max);\n }\n\n // -- checks --\n\n /**\n * @notice Checks if the provision tokens of a service provider are within the valid range.\n * @param _serviceProvider The address of the service provider.\n */\n function _checkProvisionTokens(address _serviceProvider) internal view virtual {\n IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider);\n _checkProvisionTokens(provision);\n }\n\n /**\n * @notice Checks if the provision tokens of a service provider are within the valid range.\n * @param _provision The provision to check.\n */\n function _checkProvisionTokens(IHorizonStaking.Provision memory _provision) internal view virtual {\n _checkValueInRange(_provision.tokens, minimumProvisionTokens, maximumProvisionTokens, \"tokens\");\n }\n\n /**\n * @notice Checks if the provision parameters of a service provider are within the valid range.\n * @param _serviceProvider The address of the service provider.\n * @param _checkPending If true, checks the pending provision parameters.\n */\n function _checkProvisionParameters(address _serviceProvider, bool _checkPending) internal view virtual {\n IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider);\n _checkProvisionParameters(provision, _checkPending);\n }\n\n /**\n * @notice Checks if the provision parameters of a service provider are within the valid range.\n * @param _provision The provision to check.\n * @param _checkPending If true, checks the pending provision parameters instead of the current ones.\n */\n function _checkProvisionParameters(\n IHorizonStaking.Provision memory _provision,\n bool _checkPending\n ) internal view virtual {\n (uint64 thawingPeriodMin, uint64 thawingPeriodMax) = _getThawingPeriodRange();\n uint64 thawingPeriodToCheck = _checkPending ? _provision.thawingPeriodPending : _provision.thawingPeriod;\n _checkValueInRange(thawingPeriodToCheck, thawingPeriodMin, thawingPeriodMax, \"thawingPeriod\");\n\n (uint32 verifierCutMin, uint32 verifierCutMax) = _getVerifierCutRange();\n uint32 maxVerifierCutToCheck = _checkPending ? _provision.maxVerifierCutPending : _provision.maxVerifierCut;\n _checkValueInRange(maxVerifierCutToCheck, verifierCutMin, verifierCutMax, \"maxVerifierCut\");\n }\n\n // -- getters --\n\n /**\n * @notice Gets the delegation ratio.\n * @return The delegation ratio\n */\n function _getDelegationRatio() internal view returns (uint32) {\n return delegationRatio;\n }\n\n /**\n * @notice Gets the range for the provision tokens.\n * @return min The minimum allowed value for the provision tokens.\n * @return max The maximum allowed value for the provision tokens.\n */\n function _getProvisionTokensRange() internal view virtual returns (uint256 min, uint256 max) {\n return (minimumProvisionTokens, maximumProvisionTokens);\n }\n\n /**\n * @notice Gets the range for the thawing period.\n * @return min The minimum allowed value for the thawing period.\n * @return max The maximum allowed value for the thawing period.\n */\n function _getThawingPeriodRange() internal view virtual returns (uint64 min, uint64 max) {\n return (minimumThawingPeriod, maximumThawingPeriod);\n }\n\n /**\n * @notice Gets the range for the verifier cut.\n * @return min The minimum allowed value for the max verifier cut.\n * @return max The maximum allowed value for the max verifier cut.\n */\n function _getVerifierCutRange() internal view virtual returns (uint32 min, uint32 max) {\n return (minimumVerifierCut, maximumVerifierCut);\n }\n\n /**\n * @notice Gets a provision from the {HorizonStaking} contract.\n * @dev Requirements:\n * - The provision must exist.\n * @param _serviceProvider The address of the service provider.\n */\n function _getProvision(address _serviceProvider) internal view returns (IHorizonStaking.Provision memory) {\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_serviceProvider, address(this));\n require(provision.createdAt != 0, ProvisionManagerProvisionNotFound(_serviceProvider));\n return provision;\n }\n\n /**\n * @notice Checks if a value is within a valid range.\n * @param _value The value to check.\n * @param _min The minimum allowed value.\n * @param _max The maximum allowed value.\n * @param _revertMessage The revert message to display if the value is out of range.\n */\n function _checkValueInRange(uint256 _value, uint256 _min, uint256 _max, bytes memory _revertMessage) private pure {\n require(_value.isInRange(_min, _max), ProvisionManagerInvalidValue(_revertMessage, _value, _min, _max));\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title Storage layout for the {ProvisionManager} helper contract.\n */\nabstract contract ProvisionManagerV1Storage {\n /// @notice The minimum amount of tokens required to register a provision in the data service\n uint256 public minimumProvisionTokens;\n\n /// @notice The maximum amount of tokens allowed to register a provision in the data service\n uint256 public maximumProvisionTokens;\n\n /// @notice The minimum thawing period required to register a provision in the data service\n uint64 public minimumThawingPeriod;\n\n /// @notice The maximum thawing period allowed to register a provision in the data service\n uint64 public maximumThawingPeriod;\n\n /// @notice The minimum verifier cut required to register a provision in the data service (in PPM)\n uint32 public minimumVerifierCut;\n\n /// @notice The maximum verifier cut allowed to register a provision in the data service (in PPM)\n uint32 public maximumVerifierCut;\n\n /// @notice How much delegation the service provider can effectively use\n /// @dev Max calculated as service provider's stake * delegationRatio\n uint32 public delegationRatio;\n\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title Interface for the {GraphPayments} contract\n * @notice This contract is part of the Graph Horizon payments protocol. It's designed\n * to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a\n * set of pre established rules.\n */\ninterface IGraphPayments {\n /**\n * @notice Types of payments that are supported by the payments protocol\n * @dev\n */\n enum PaymentTypes {\n QueryFee,\n IndexingFee,\n IndexingRewards\n }\n\n /**\n * @notice Emitted when a payment is collected\n * @param payer The address of the payer\n * @param receiver The address of the receiver\n * @param dataService The address of the data service\n * @param tokensReceiver Amount of tokens for the receiver\n * @param tokensDelegationPool Amount of tokens for delegators\n * @param tokensDataService Amount of tokens for the data service\n * @param tokensProtocol Amount of tokens charged as protocol tax\n */\n event PaymentCollected(\n address indexed payer,\n address indexed receiver,\n address indexed dataService,\n uint256 tokensReceiver,\n uint256 tokensDelegationPool,\n uint256 tokensDataService,\n uint256 tokensProtocol\n );\n\n /**\n * @notice Thrown when there are insufficient tokens to pay the required amount\n * @param tokens The amount of tokens available\n * @param minTokens The amount of tokens being collected\n */\n error GraphPaymentsInsufficientTokens(uint256 tokens, uint256 minTokens);\n\n /**\n * @notice Thrown when the protocol payment cut is invalid\n * @param protocolPaymentCut The protocol payment cut\n */\n error GraphPaymentsInvalidProtocolPaymentCut(uint256 protocolPaymentCut);\n\n /**\n * @notice Collects funds from a payer.\n * It will pay cuts to all relevant parties and forward the rest to the receiver.\n * @param paymentType The type of payment as defined in {IGraphPayments}\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens being collected\n * @param dataService The address of the data service\n * @param tokensDataService The amount of tokens that should be sent to the data service\n */\n function collect(\n PaymentTypes paymentType,\n address receiver,\n uint256 tokens,\n address dataService,\n uint256 tokensDataService\n ) external;\n}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\n/**\n * @title IGraphProxyAdmin\n * @dev Empty interface to allow the GraphProxyAdmin contract to be used\n * in the GraphDirectory contract.\n */\ninterface IGraphProxyAdmin {}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IHorizonStakingTypes } from \"./internal/IHorizonStakingTypes.sol\";\nimport { IHorizonStakingMain } from \"./internal/IHorizonStakingMain.sol\";\nimport { IHorizonStakingBase } from \"./internal/IHorizonStakingBase.sol\";\nimport { IHorizonStakingExtension } from \"./internal/IHorizonStakingExtension.sol\";\n\n/**\n * @title Complete interface for the Horizon Staking contract\n * @notice This interface exposes all functions implemented by the {HorizonStaking} contract and its extension\n * {HorizonStakingExtension} as well as the custom data types used by the contract.\n * @dev Use this interface to interact with the Horizon Staking contract.\n */\ninterface IHorizonStaking is IHorizonStakingTypes, IHorizonStakingBase, IHorizonStakingMain, IHorizonStakingExtension {}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IHorizonStakingTypes } from \"./IHorizonStakingTypes.sol\";\nimport { IGraphPayments } from \"../IGraphPayments.sol\";\n\nimport { LinkedList } from \"../../libraries/LinkedList.sol\";\n\n/**\n * @title Interface for the {HorizonStakingBase} contract.\n * @notice Provides getters for {HorizonStaking} and {HorizonStakingExtension} storage variables.\n * @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision\n * functions take `serviceProvider` and `verifier` addresses.\n */\ninterface IHorizonStakingBase {\n /**\n * @notice Emitted when a service provider stakes tokens.\n * @dev TODO: After transition period move to IHorizonStakingMain. Temporarily it\n * needs to be here since it's emitted by {_stake} which is used by both {HorizonStaking}\n * and {HorizonStakingExtension}.\n * @param serviceProvider The address of the service provider.\n * @param tokens The amount of tokens staked.\n */\n event StakeDeposited(address indexed serviceProvider, uint256 tokens);\n\n /**\n * @notice Gets the details of a service provider.\n * @param serviceProvider The address of the service provider.\n */\n function getServiceProvider(\n address serviceProvider\n ) external view returns (IHorizonStakingTypes.ServiceProvider memory);\n\n /**\n * @notice Gets the stake of a service provider.\n * @param serviceProvider The address of the service provider.\n * @return The amount of tokens staked.\n */\n function getStake(address serviceProvider) external view returns (uint256);\n\n /**\n * @notice Gets the service provider's idle stake which is the stake that is not being\n * used for any provision. Note that this only includes service provider's self stake.\n * @param serviceProvider The address of the service provider.\n * @return The amount of tokens that are idle.\n */\n function getIdleStake(address serviceProvider) external view returns (uint256);\n\n /**\n * @notice Gets the details of delegation pool.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @return The delegation pool details.\n */\n function getDelegationPool(\n address serviceProvider,\n address verifier\n ) external view returns (IHorizonStakingTypes.DelegationPool memory);\n\n /**\n * @notice Gets the details of a delegation.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param delegator The address of the delegator.\n * @return The delegation details.\n */\n function getDelegation(\n address serviceProvider,\n address verifier,\n address delegator\n ) external view returns (IHorizonStakingTypes.Delegation memory);\n\n /**\n * @notice Gets the delegation fee cut for a payment type.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param paymentType The payment type as defined by {IGraphPayments.PaymentTypes}.\n * @return The delegation fee cut in PPM.\n */\n function getDelegationFeeCut(\n address serviceProvider,\n address verifier,\n IGraphPayments.PaymentTypes paymentType\n ) external view returns (uint256);\n\n /**\n * @notice Gets the details of a provision.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @return The provision details.\n */\n function getProvision(\n address serviceProvider,\n address verifier\n ) external view returns (IHorizonStakingTypes.Provision memory);\n\n /**\n * @notice Gets the tokens available in a provision.\n * Tokens available are the tokens in a provision that are not thawing. Includes service\n * provider's and delegator's stake.\n *\n * Allows specifying a `delegationRatio` which caps the amount of delegated tokens that are\n * considered available.\n *\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param delegationRatio The delegation ratio.\n * @return The amount of tokens available.\n */\n function getTokensAvailable(\n address serviceProvider,\n address verifier,\n uint32 delegationRatio\n ) external view returns (uint256);\n\n /**\n * @notice Gets the service provider's tokens available in a provision.\n * @dev Calculated as the tokens available minus the tokens thawing.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @return The amount of tokens available.\n */\n function getProviderTokensAvailable(address serviceProvider, address verifier) external view returns (uint256);\n\n /**\n * @notice Gets the delegator's tokens available in a provision.\n * @dev Calculated as the tokens available minus the tokens thawing.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @return The amount of tokens available.\n */\n function getDelegatedTokensAvailable(address serviceProvider, address verifier) external view returns (uint256);\n\n /**\n * @notice Gets a thaw request.\n * @param thawRequestId The id of the thaw request.\n * @return The thaw request details.\n */\n function getThawRequest(bytes32 thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory);\n\n /**\n * @notice Gets the metadata of a thaw request list.\n * Service provider and delegators each have their own thaw request list per provision.\n * Metadata includes the head and tail of the list, plus the total number of thaw requests.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param owner The owner of the thaw requests. Use either the service provider or delegator address.\n * @return The thaw requests list metadata.\n */\n function getThawRequestList(\n address serviceProvider,\n address verifier,\n address owner\n ) external view returns (LinkedList.List memory);\n\n /**\n * @notice Gets the amount of thawed tokens for a given provision.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param owner The owner of the thaw requests. Use either the service provider or delegator address.\n * @return The amount of thawed tokens.\n */\n function getThawedTokens(address serviceProvider, address verifier, address owner) external view returns (uint256);\n\n /**\n * @notice Gets the maximum allowed thawing period for a provision.\n */\n function getMaxThawingPeriod() external view returns (uint64);\n\n /**\n * @notice Return true if the verifier is an allowed locked verifier.\n * @param verifier Address of the verifier\n * @return True if verifier is allowed locked verifier, false otherwise\n */\n function isAllowedLockedVerifier(address verifier) external view returns (bool);\n\n /**\n * @notice Return true if delegation slashing is enabled, false otherwise.\n */\n function isDelegationSlashingEnabled() external view returns (bool);\n}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IRewardsIssuer } from \"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\";\n\n/**\n * @title Interface for {HorizonStakingExtension} contract.\n * @notice Provides functions for managing legacy allocations.\n */\ninterface IHorizonStakingExtension is IRewardsIssuer {\n /**\n * @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment\n * An allocation is created in the allocate() function and closed in closeAllocation()\n */\n struct Allocation {\n address indexer;\n bytes32 subgraphDeploymentID;\n uint256 tokens; // Tokens allocated to a SubgraphDeployment\n uint256 createdAtEpoch; // Epoch when it was created\n uint256 closedAtEpoch; // Epoch when it was closed\n uint256 collectedFees; // Collected fees for the allocation\n uint256 __DEPRECATED_effectiveAllocation; // solhint-disable-line var-name-mixedcase\n uint256 accRewardsPerAllocatedToken; // Snapshot used for reward calc\n uint256 distributedRebates; // Collected rebates that have been rebated\n }\n\n /**\n * @dev Possible states an allocation can be.\n * States:\n * - Null = indexer == address(0)\n * - Active = not Null && tokens > 0\n * - Closed = Active && closedAtEpoch != 0\n */\n enum AllocationState {\n Null,\n Active,\n Closed\n }\n\n /**\n * @dev Emitted when `indexer` close an allocation in `epoch` for `allocationID`.\n * An amount of `tokens` get unallocated from `subgraphDeploymentID`.\n * This event also emits the POI (proof of indexing) submitted by the indexer.\n * `isPublic` is true if the sender was someone other than the indexer.\n */\n event AllocationClosed(\n address indexed indexer,\n bytes32 indexed subgraphDeploymentID,\n uint256 epoch,\n uint256 tokens,\n address indexed allocationID,\n address sender,\n bytes32 poi,\n bool isPublic\n );\n\n /**\n * @dev Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`.\n * `epoch` is the protocol epoch the rebate was collected on\n * The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees`\n * is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt.\n * `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected\n * and sent to the delegation pool.\n */\n event RebateCollected(\n address assetHolder,\n address indexed indexer,\n bytes32 indexed subgraphDeploymentID,\n address indexed allocationID,\n uint256 epoch,\n uint256 tokens,\n uint256 protocolTax,\n uint256 curationFees,\n uint256 queryFees,\n uint256 queryRebates,\n uint256 delegationRewards\n );\n\n /**\n * @notice Close an allocation and free the staked tokens.\n * To be eligible for rewards a proof of indexing must be presented.\n * Presenting a bad proof is subject to slashable condition.\n * To opt out of rewards set _poi to 0x0\n * @param allocationID The allocation identifier\n * @param poi Proof of indexing submitted for the allocated period\n */\n function closeAllocation(address allocationID, bytes32 poi) external;\n\n /**\n * @notice Collect query fees from state channels and assign them to an allocation.\n * Funds received are only accepted from a valid sender.\n * @dev To avoid reverting on the withdrawal from channel flow this function will:\n * 1) Accept calls with zero tokens.\n * 2) Accept calls after an allocation passed the dispute period, in that case, all\n * the received tokens are burned.\n * @param tokens Amount of tokens to collect\n * @param allocationID Allocation where the tokens will be assigned\n */\n function collect(uint256 tokens, address allocationID) external;\n\n /**\n * @notice Return true if operator is allowed for indexer.\n * @param operator Address of the operator\n * @param indexer Address of the indexer\n * @return True if operator is allowed for indexer, false otherwise\n */\n function isOperator(address operator, address indexer) external view returns (bool);\n\n /**\n * @notice Getter that returns if an indexer has any stake.\n * @param indexer Address of the indexer\n * @return True if indexer has staked tokens\n */\n function hasStake(address indexer) external view returns (bool);\n\n /**\n * @notice Get the total amount of tokens staked by the indexer.\n * @param indexer Address of the indexer\n * @return Amount of tokens staked by the indexer\n */\n function getIndexerStakedTokens(address indexer) external view returns (uint256);\n\n /**\n * @notice Return the allocation by ID.\n * @param allocationID Address used as allocation identifier\n * @return Allocation data\n */\n function getAllocation(address allocationID) external view returns (Allocation memory);\n\n /**\n * @notice Return the current state of an allocation\n * @param allocationID Allocation identifier\n * @return AllocationState enum with the state of the allocation\n */\n function getAllocationState(address allocationID) external view returns (AllocationState);\n\n /**\n * @notice Return if allocationID is used.\n * @param allocationID Address used as signer by the indexer for an allocation\n * @return True if allocationID already used\n */\n function isAllocation(address allocationID) external view returns (bool);\n\n /**\n * @notice Return the time in blocks to unstake\n * @return Thawing period in blocks\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DEPRECATED_getThawingPeriod() external view returns (uint64);\n}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"../../interfaces/IGraphPayments.sol\";\n\n/**\n * @title Inferface for the {HorizonStaking} contract.\n * @notice Provides functions for managing stake, provisions, delegations, and slashing.\n * @dev Note that this interface only includes the functions implemented by {HorizonStaking} contract,\n * and not those implemented by {HorizonStakingExtension}.\n * Do not use this interface to interface with the {HorizonStaking} contract, use {IHorizonStaking} for\n * the complete interface.\n * @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision\n * functions take `serviceProvider` and `verifier` addresses.\n */\ninterface IHorizonStakingMain {\n // -- Events: stake --\n\n /**\n * @notice Emitted when a service provider unstakes tokens during the transition period.\n * @param serviceProvider The address of the service provider\n * @param tokens The amount of tokens unstaked\n * @param until The block number until the stake is locked\n */\n event StakeLocked(address indexed serviceProvider, uint256 tokens, uint256 until);\n\n /**\n * @notice Emitted when a service provider withdraws tokens during the transition period.\n * @param serviceProvider The address of the service provider\n * @param tokens The amount of tokens withdrawn\n */\n event StakeWithdrawn(address indexed serviceProvider, uint256 tokens);\n\n // -- Events: provision --\n\n /**\n * @notice Emitted when a service provider provisions staked tokens to a verifier.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens provisioned\n * @param maxVerifierCut The maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\n * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision\n */\n event ProvisionCreated(\n address indexed serviceProvider,\n address indexed verifier,\n uint256 tokens,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n );\n\n /**\n * @notice Emitted whenever staked tokens are added to an existing provision\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens added to the provision\n */\n event ProvisionIncreased(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a service provider thaws tokens from a provision.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens thawed\n */\n event ProvisionThawed(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a service provider removes tokens from a provision.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens removed\n */\n event TokensDeprovisioned(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a service provider stages a provision parameter update.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for\n * themselves when slashing\n * @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from\n * the provision\n */\n event ProvisionParametersStaged(\n address indexed serviceProvider,\n address indexed verifier,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n );\n\n /**\n * @notice Emitted when a service provider accepts a staged provision parameter update.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param maxVerifierCut The new maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves\n * when slashing\n * @param thawingPeriod The new period in seconds that the tokens will be thawing before they can be removed from the provision\n */\n event ProvisionParametersSet(\n address indexed serviceProvider,\n address indexed verifier,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n );\n\n /**\n * @dev Emitted when an operator is allowed or denied by a service provider for a particular verifier\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param operator The address of the operator\n * @param allowed Whether the operator is allowed or denied\n */\n event OperatorSet(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed operator,\n bool allowed\n );\n\n // -- Events: slashing --\n\n /**\n * @notice Emitted when a provision is slashed by a verifier.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens slashed (note this only represents service provider's slashed stake)\n */\n event ProvisionSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a delegation pool is slashed by a verifier.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens slashed (note this only represents delegation pool's slashed stake)\n */\n event DelegationSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a delegation pool would have been slashed by a verifier, but the slashing was skipped\n * because delegation slashing global parameter is not enabled.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens that would have been slashed (note this only represents delegation pool's slashed stake)\n */\n event DelegationSlashingSkipped(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when the verifier cut is sent to the verifier after slashing a provision.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param destination The address where the verifier cut is sent\n * @param tokens The amount of tokens sent to the verifier\n */\n event VerifierTokensSent(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed destination,\n uint256 tokens\n );\n\n // -- Events: delegation --\n\n /**\n * @notice Emitted when tokens are delegated to a provision.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param delegator The address of the delegator\n * @param tokens The amount of tokens delegated\n */\n event TokensDelegated(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed delegator,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when a delegator undelegates tokens from a provision and starts\n * thawing them.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param delegator The address of the delegator\n * @param tokens The amount of tokens undelegated\n */\n event TokensUndelegated(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed delegator,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when a delegator withdraws tokens from a provision after thawing.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param delegator The address of the delegator\n * @param tokens The amount of tokens withdrawn\n */\n event DelegatedTokensWithdrawn(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed delegator,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when tokens are added to a delegation pool's reserve.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens withdrawn\n */\n event TokensToDelegationPoolAdded(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a service provider sets delegation fee cuts for a verifier.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments}\n * @param feeCut The fee cut set, in PPM\n */\n event DelegationFeeCutSet(\n address indexed serviceProvider,\n address indexed verifier,\n IGraphPayments.PaymentTypes indexed paymentType,\n uint256 feeCut\n );\n\n // -- Events: thawing --\n\n /**\n * @notice Emitted when a thaw request is created.\n * @dev Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param owner The address of the owner of the thaw request.\n * @param shares The amount of shares being thawed\n * @param thawingUntil The timestamp until the stake is thawed\n * @param thawRequestId The ID of the thaw request\n */\n event ThawRequestCreated(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed owner,\n uint256 shares,\n uint64 thawingUntil,\n bytes32 thawRequestId\n );\n\n /**\n * @notice Emitted when a thaw request is fulfilled, meaning the stake is released.\n * @param thawRequestId The ID of the thaw request\n * @param tokens The amount of tokens being released\n * @param shares The amount of shares being released\n * @param thawingUntil The timestamp until the stake has thawed\n * @param valid Whether the thaw request was valid at the time of fulfillment\n */\n event ThawRequestFulfilled(\n bytes32 indexed thawRequestId,\n uint256 tokens,\n uint256 shares,\n uint64 thawingUntil,\n bool valid\n );\n\n /**\n * @notice Emitted when a series of thaw requests are fulfilled.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param owner The address of the owner of the thaw requests\n * @param thawRequestsFulfilled The number of thaw requests fulfilled\n * @param tokens The total amount of tokens being released\n */\n event ThawRequestsFulfilled(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed owner,\n uint256 thawRequestsFulfilled,\n uint256 tokens\n );\n\n // -- Events: governance --\n\n /**\n * @notice Emitted when the global maximum thawing period allowed for provisions is set.\n * @param maxThawingPeriod The new maximum thawing period\n */\n event MaxThawingPeriodSet(uint64 maxThawingPeriod);\n\n /**\n * @notice Emitted when a verifier is allowed or disallowed to be used for locked provisions.\n * @param verifier The address of the verifier\n * @param allowed Whether the verifier is allowed or disallowed\n */\n event AllowedLockedVerifierSet(address indexed verifier, bool allowed);\n\n /**\n * @notice Emitted when the legacy global thawing period is set to zero.\n * @dev This marks the end of the transition period.\n */\n event ThawingPeriodCleared();\n\n /**\n * @notice Emitted when the delegation slashing global flag is set.\n * @param enabled Whether delegation slashing is enabled or disabled.\n */\n event DelegationSlashingEnabled(bool enabled);\n\n // -- Errors: tokens\n\n /**\n * @notice Thrown when operating a zero token amount is not allowed.\n */\n error HorizonStakingInvalidZeroTokens();\n\n /**\n * @notice Thrown when a minimum token amount is required to operate but it's not met.\n * @param tokens The actual token amount\n * @param minRequired The minimum required token amount\n */\n error HorizonStakingInsufficientTokens(uint256 tokens, uint256 minRequired);\n\n /**\n * @notice Thrown when the amount of tokens exceeds the maximum allowed to operate.\n * @param tokens The actual token amount\n * @param maxTokens The maximum allowed token amount\n */\n error HorizonStakingTooManyTokens(uint256 tokens, uint256 maxTokens);\n\n // -- Errors: provision --\n\n /**\n * @notice Thrown when attempting to operate with a provision that does not exist.\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n */\n error HorizonStakingInvalidProvision(address serviceProvider, address verifier);\n\n /**\n * @notice Thrown when the caller is not authorized to operate on a provision.\n * @param caller The caller address\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n */\n error HorizonStakingNotAuthorized(address serviceProvider, address verifier, address caller);\n\n /**\n * @notice Thrown when attempting to create a provision with an invalid maximum verifier cut.\n * @param maxVerifierCut The maximum verifier cut\n */\n error HorizonStakingInvalidMaxVerifierCut(uint32 maxVerifierCut);\n\n /**\n * @notice Thrown when attempting to create a provision with an invalid thawing period.\n * @param thawingPeriod The thawing period\n * @param maxThawingPeriod The maximum `thawingPeriod` allowed\n */\n error HorizonStakingInvalidThawingPeriod(uint64 thawingPeriod, uint64 maxThawingPeriod);\n\n /**\n * @notice Thrown when attempting to create a provision for a data service that already has a provision.\n */\n error HorizonStakingProvisionAlreadyExists();\n\n // -- Errors: stake --\n\n /**\n * @notice Thrown when the service provider has insufficient idle stake to operate.\n * @param tokens The actual token amount\n * @param minTokens The minimum required token amount\n */\n error HorizonStakingInsufficientIdleStake(uint256 tokens, uint256 minTokens);\n\n /**\n * @notice Thrown during the transition period when the service provider has insufficient stake to\n * cover their existing legacy allocations.\n * @param tokens The actual token amount\n * @param minTokens The minimum required token amount\n */\n error HorizonStakingInsufficientStakeForLegacyAllocations(uint256 tokens, uint256 minTokens);\n\n // -- Errors: delegation --\n\n /**\n * @notice Thrown when delegation shares obtained are below the expected amount.\n * @param shares The actual share amount\n * @param minShares The minimum required share amount\n */\n error HorizonStakingSlippageProtection(uint256 shares, uint256 minShares);\n\n /**\n * @notice Thrown when operating a zero share amount is not allowed.\n */\n error HorizonStakingInvalidZeroShares();\n\n /**\n * @notice Thrown when a minimum share amount is required to operate but it's not met.\n * @param shares The actual share amount\n * @param minShares The minimum required share amount\n */\n error HorizonStakingInsufficientShares(uint256 shares, uint256 minShares);\n\n /**\n * @notice Thrown when as a result of slashing delegation pool has no tokens but has shares.\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n */\n error HorizonStakingInvalidDelegationPoolState(address serviceProvider, address verifier);\n\n /**\n * @notice Thrown when attempting to operate with a delegation pool that does not exist.\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n */\n error HorizonStakingInvalidDelegationPool(address serviceProvider, address verifier);\n\n /**\n * @notice Thrown when attempting to undelegate with a beneficiary that is the zero address.\n */\n error HorizonStakingInvalidBeneficiaryZeroAddress();\n\n /**\n * @notice Thrown when attempting to redelegate with a serivce provider that is the zero address.\n */\n error HorizonStakingInvalidServiceProviderZeroAddress();\n\n /**\n * @notice Thrown when attempting to redelegate with a verifier that is the zero address.\n */\n error HorizonStakingInvalidVerifierZeroAddress();\n\n // -- Errors: thaw requests --\n\n error HorizonStakingNothingThawing();\n error HorizonStakingTooManyThawRequests();\n\n // -- Errors: misc --\n /**\n * @notice Thrown during the transition period when attempting to withdraw tokens that are still thawing.\n * @dev Note this thawing refers to the global thawing period applied to legacy allocated tokens,\n * it does not refer to thaw requests.\n * @param until The block number until the stake is locked\n */\n error HorizonStakingStillThawing(uint256 until);\n\n /**\n * @notice Thrown when a service provider attempts to operate on verifiers that are not allowed.\n * @dev Only applies to stake from locked wallets.\n */\n error HorizonStakingVerifierNotAllowed(address verifier);\n\n /**\n * @notice Thrown when a service provider attempts to change their own operator access.\n */\n error HorizonStakingCallerIsServiceProvider();\n\n /**\n * @notice Thrown when trying to set a delegation fee cut that is not valid.\n * @param feeCut The fee cut\n */\n error HorizonStakingInvalidDelegationFeeCut(uint256 feeCut);\n\n // -- Functions --\n\n /**\n * @notice Deposit tokens on the staking contract.\n * @dev Pulls tokens from the caller.\n *\n * Requirements:\n * - `_tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n *\n * Emits a {StakeDeposited} event.\n *\n * @param tokens Amount of tokens to stake\n */\n function stake(uint256 tokens) external;\n\n /**\n * @notice Deposit tokens on the service provider stake, on behalf of the service provider.\n * @dev Pulls tokens from the caller.\n *\n * Requirements:\n * - `_tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n *\n * Emits a {StakeDeposited} event.\n *\n * @param serviceProvider Address of the service provider\n * @param tokens Amount of tokens to stake\n */\n function stakeTo(address serviceProvider, uint256 tokens) external;\n\n // can be called by anyone if the service provider has provisioned stake to this verifier\n /**\n * @notice Deposit tokens on the service provider stake, on behalf of the service provider,\n * provisioned to a specific verifier.\n * @dev Requirements:\n * - The `serviceProvider` must have previously provisioned stake to `verifier`.\n * - `_tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n *\n * Emits {StakeDeposited} and {ProvisionIncreased} events.\n *\n * @param serviceProvider Address of the service provider\n * @param verifier Address of the verifier\n * @param tokens Amount of tokens to stake\n */\n function stakeToProvision(address serviceProvider, address verifier, uint256 tokens) external;\n\n /**\n * @notice Move idle stake back to the owner's account.\n * Stake is removed from the protocol:\n * - During the transition period it's locked for a period of time before it can be withdrawn\n * by calling {withdraw}.\n * - After the transition period it's immediately withdrawn.\n * @dev Requirements:\n * - `_tokens` cannot be zero.\n * - `_serviceProvider` must have enough idle stake to cover the staking amount and any\n * legacy allocation.\n *\n * Emits a {StakeLocked} event during the transition period.\n * Emits a {StakeWithdrawn} event after the transition period.\n *\n * @param tokens Amount of tokens to unstake\n */\n function unstake(uint256 tokens) external;\n\n /**\n * @notice Withdraw service provider tokens once the thawing period (initiated by {unstake}) has passed.\n * All thawed tokens are withdrawn.\n * @dev This is only needed during the transition period while we still have\n * a global lock. After that, unstake() will automatically withdraw.\n */\n function withdraw() external;\n\n /**\n * @notice Provision stake to a verifier. The tokens will be locked with a thawing period\n * and will be slashable by the verifier. This is the main mechanism to provision stake to a data\n * service, where the data service is the verifier.\n * This function can be called by the service provider or by an operator authorized by the provider\n * for this specific verifier.\n * @dev Requirements:\n * - `tokens` cannot be zero.\n * - The `serviceProvider` must have enough idle stake to cover the tokens to provision.\n * - `maxVerifierCut` must be a valid PPM.\n * - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`.\n *\n * Emits a {ProvisionCreated} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\n * @param tokens The amount of tokens that will be locked and slashable\n * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\n * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision\n */\n function provision(\n address serviceProvider,\n address verifier,\n uint256 tokens,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n ) external;\n\n /**\n * @notice Adds tokens from the service provider's idle stake to a provision\n * @dev\n *\n * Requirements:\n * - The `serviceProvider` must have previously provisioned stake to `verifier`.\n * - `tokens` cannot be zero.\n * - The `serviceProvider` must have enough idle stake to cover the tokens to add.\n *\n * Emits a {ProvisionIncreased} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param tokens The amount of tokens to add to the provision\n */\n function addToProvision(address serviceProvider, address verifier, uint256 tokens) external;\n\n /**\n * @notice Start thawing tokens to remove them from a provision.\n * This function can be called by the service provider or by an operator authorized by the provider\n * for this specific verifier.\n *\n * Note that removing tokens from a provision is a two step process:\n * - First the tokens are thawed using this function.\n * - Then after the thawing period, the tokens are removed from the provision using {deprovision}\n * or {reprovision}.\n *\n * @dev Requirements:\n * - The provision must have enough tokens available to thaw.\n * - `tokens` cannot be zero.\n *\n * Emits {ProvisionThawed} and {ThawRequestCreated} events.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address for which the tokens are provisioned\n * @param tokens The amount of tokens to thaw\n * @return The ID of the thaw request\n */\n function thaw(address serviceProvider, address verifier, uint256 tokens) external returns (bytes32);\n\n /**\n * @notice Remove tokens from a provision and move them back to the service provider's idle stake.\n * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n * requests in the event that fulfilling all of them results in a gas limit error.\n *\n * Requirements:\n * - Must have previously initiated a thaw request using {thaw}.\n *\n * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {TokensDeprovisioned} events.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\n */\n function deprovision(address serviceProvider, address verifier, uint256 nThawRequests) external;\n\n /**\n * @notice Move already thawed stake from one provision into another provision\n * This function can be called by the service provider or by an operator authorized by the provider\n * for the two corresponding verifiers.\n * @dev Requirements:\n * - Must have previously initiated a thaw request using {thaw}.\n * - `tokens` cannot be zero.\n * - The `serviceProvider` must have previously provisioned stake to `newVerifier`.\n * - The `serviceProvider` must have enough idle stake to cover the tokens to add.\n *\n * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled}, {TokensDeprovisioned} and {ProvisionIncreased}\n * events.\n *\n * @param serviceProvider The service provider address\n * @param oldVerifier The verifier address for which the tokens are currently provisioned\n * @param newVerifier The verifier address for which the tokens will be provisioned\n * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\n */\n function reprovision(\n address serviceProvider,\n address oldVerifier,\n address newVerifier,\n uint256 nThawRequests\n ) external;\n\n /**\n * @notice Stages a provision parameter update. Note that the change is not effective until the verifier calls\n * {acceptProvisionParameters}.\n * @dev This two step update process prevents the service provider from changing the parameters\n * without the verifier's consent.\n *\n * Emits a {ProvisionParametersStaged} event if at least one of the parameters changed.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for\n * themselves when slashing\n * @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from\n * the provision\n */\n function setProvisionParameters(\n address serviceProvider,\n address verifier,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n ) external;\n\n /**\n * @notice Accepts a staged provision parameter update.\n * @dev Only the provision's verifier can call this function.\n *\n * Emits a {ProvisionParametersSet} event.\n *\n * @param serviceProvider The service provider address\n */\n function acceptProvisionParameters(address serviceProvider) external;\n\n /**\n * @notice Delegate tokens to a provision.\n * @dev Requirements:\n * - `tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n * - The provision must exist.\n *\n * Emits a {TokensDelegated} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param tokens The amount of tokens to delegate\n * @param minSharesOut The minimum amount of shares to accept, slippage protection.\n */\n function delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) external;\n\n /**\n * @notice Add tokens to a delegation pool without issuing shares.\n * Used by data services to pay delegation fees/rewards.\n * Delegators SHOULD NOT call this function.\n *\n * @dev Requirements:\n * - `tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n *\n * Emits a {TokensToDelegationPoolAdded} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address for which the tokens are provisioned\n * @param tokens The amount of tokens to add to the delegation pool\n */\n function addToDelegationPool(address serviceProvider, address verifier, uint256 tokens) external;\n\n /**\n * @notice Undelegate tokens from a provision and start thawing them.\n * Note that undelegating tokens from a provision is a two step process:\n * - First the tokens are thawed using this function.\n * - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}.\n *\n * Requirements:\n * - `shares` cannot be zero.\n *\n * Emits a {TokensUndelegated} and {ThawRequestCreated} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param shares The amount of shares to undelegate\n * @return The ID of the thaw request\n */\n function undelegate(address serviceProvider, address verifier, uint256 shares) external returns (bytes32);\n\n /**\n * @notice Undelegate tokens from a provision and start thawing them.\n * The tokens will be withdrawable by the `beneficiary` after the thawing period.\n *\n * Note that undelegating tokens from a provision is a two step process:\n * - First the tokens are thawed using this function.\n * - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}.\n *\n * Requirements:\n * - `shares` cannot be zero.\n * - `beneficiary` cannot be the zero address.\n *\n * Emits a {TokensUndelegated} and {ThawRequestCreated} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param shares The amount of shares to undelegate\n * @param beneficiary The address where the tokens will be withdrawn after thawing\n * @return The ID of the thaw request\n */\n function undelegate(\n address serviceProvider,\n address verifier,\n uint256 shares,\n address beneficiary\n ) external returns (bytes32);\n\n /**\n * @notice Withdraw undelegated tokens from a provision after thawing.\n * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n * requests in the event that fulfilling all of them results in a gas limit error.\n * @dev If the delegation pool was completely slashed before withdrawing, calling this function will fulfill\n * the thaw requests with an amount equal to zero.\n *\n * Requirements:\n * - Must have previously initiated a thaw request using {undelegate}.\n *\n * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\n */\n function withdrawDelegated(address serviceProvider, address verifier, uint256 nThawRequests) external;\n\n /**\n * @notice Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`.\n * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n * requests in the event that fulfilling all of them results in a gas limit error.\n *\n * Requirements:\n * - Must have previously initiated a thaw request using {undelegate}.\n * - `newServiceProvider` and `newVerifier` must not be the zero address.\n * - `newServiceProvider` must have previously provisioned stake to `newVerifier`.\n *\n * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\n *\n * @param oldServiceProvider The old service provider address\n * @param oldVerifier The old verifier address\n * @param newServiceProvider The address of a new service provider\n * @param newVerifier The address of a new verifier\n * @param minSharesForNewProvider The minimum amount of shares to accept for the new service provider\n * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\n */\n function redelegate(\n address oldServiceProvider,\n address oldVerifier,\n address newServiceProvider,\n address newVerifier,\n uint256 minSharesForNewProvider,\n uint256 nThawRequests\n ) external;\n\n /**\n * @notice Set the fee cut for a verifier on a specific payment type.\n * @dev Emits a {DelegationFeeCutSet} event.\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments}\n * @param feeCut The fee cut to set, in PPM\n */\n function setDelegationFeeCut(\n address serviceProvider,\n address verifier,\n IGraphPayments.PaymentTypes paymentType,\n uint256 feeCut\n ) external;\n\n /**\n * @notice Delegate tokens to the subgraph data service provision.\n * This function is for backwards compatibility with the legacy staking contract.\n * It only allows delegating to the subgraph data service and DOES NOT have slippage protection.\n * @dev See {delegate}.\n * @param serviceProvider The service provider address\n * @param tokens The amount of tokens to delegate\n */\n function delegate(address serviceProvider, uint256 tokens) external;\n\n /**\n * @notice Undelegate tokens from the subgraph data service provision and start thawing them.\n * This function is for backwards compatibility with the legacy staking contract.\n * It only allows undelegating from the subgraph data service.\n * @dev See {undelegate}.\n * @param serviceProvider The service provider address\n * @param shares The amount of shares to undelegate\n */\n function undelegate(address serviceProvider, uint256 shares) external;\n\n /**\n * @notice Withdraw undelegated tokens from the subgraph data service provision after thawing.\n * This function is for backwards compatibility with the legacy staking contract.\n * It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in\n * case the caller opts for re-delegating.\n * @dev See {delegate}.\n * @param serviceProvider The service provider address\n * @param newServiceProvider The address of a new service provider, if the delegator wants to re-delegate\n */\n function withdrawDelegated(address serviceProvider, address newServiceProvider) external;\n\n /**\n * @notice Slash a service provider. This can only be called by a verifier to which\n * the provider has provisioned stake, and up to the amount of tokens they have provisioned.\n * If the service provider's stake is not enough, the associated delegation pool might be slashed\n * depending on the value of the global delegation slashing flag.\n *\n * Part of the slashed tokens are sent to the `verifierDestination` as a reward.\n *\n * @dev Requirements:\n * - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider.\n * - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut.\n *\n * Emits a {ProvisionSlashed} and {VerifierTokensSent} events.\n * Emits a {DelegationSlashed} or {DelegationSlashingSkipped} event depending on the global delegation slashing\n * flag.\n *\n * @param serviceProvider The service provider to slash\n * @param tokens The amount of tokens to slash\n * @param tokensVerifier The amount of tokens to transfer instead of burning\n * @param verifierDestination The address to transfer the verifier cut to\n */\n function slash(\n address serviceProvider,\n uint256 tokens,\n uint256 tokensVerifier,\n address verifierDestination\n ) external;\n\n /**\n * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets).\n * @dev See {provision}.\n *\n * Additional requirements:\n * - The `verifier` must be allowed to be used for locked provisions.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\n * @param tokens The amount of tokens that will be locked and slashable\n * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\n * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision\n */\n function provisionLocked(\n address serviceProvider,\n address verifier,\n uint256 tokens,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n ) external;\n\n /**\n * @notice Authorize or unauthorize an address to be an operator for the caller on a verifier.\n *\n * @dev See {setOperator}.\n * Additional requirements:\n * - The `verifier` must be allowed to be used for locked provisions.\n *\n * @param verifier The verifier / data service on which they'll be allowed to operate\n * @param operator Address to authorize or unauthorize\n * @param allowed Whether the operator is authorized or not\n */\n function setOperatorLocked(address verifier, address operator, bool allowed) external;\n\n /**\n * @notice Sets a verifier as a globally allowed verifier for locked provisions.\n * @dev This function can only be called by the contract governor, it's used to maintain\n * a whitelist of verifiers that do not allow the stake from a locked wallet to escape the lock.\n * @dev Emits a {AllowedLockedVerifierSet} event.\n * @param verifier The verifier address\n * @param allowed Whether the verifier is allowed or not\n */\n function setAllowedLockedVerifier(address verifier, bool allowed) external;\n\n /**\n * @notice Set the global delegation slashing flag to true.\n * @dev This function can only be called by the contract governor.\n */\n function setDelegationSlashingEnabled() external;\n\n /**\n * @notice Clear the legacy global thawing period.\n * This signifies the end of the transition period, after which no legacy allocations should be left.\n * @dev This function can only be called by the contract governor.\n * @dev Emits a {ThawingPeriodCleared} event.\n */\n function clearThawingPeriod() external;\n\n /**\n * @notice Sets the global maximum thawing period allowed for provisions.\n * @param maxThawingPeriod The new maximum thawing period, in seconds\n */\n function setMaxThawingPeriod(uint64 maxThawingPeriod) external;\n\n /**\n * @notice Authorize or unauthorize an address to be an operator for the caller on a data service.\n * @dev Emits a {OperatorSet} event.\n * @param verifier The verifier / data service on which they'll be allowed to operate\n * @param operator Address to authorize or unauthorize\n * @param allowed Whether the operator is authorized or not\n */\n function setOperator(address verifier, address operator, bool allowed) external;\n\n /**\n * @notice Check if an operator is authorized for the caller on a specific verifier / data service.\n * @param serviceProvider The service provider on behalf of whom they're claiming to act\n * @param verifier The verifier / data service on which they're claiming to act\n * @param operator The address to check for auth\n * @return Whether the operator is authorized or not\n */\n function isAuthorized(address serviceProvider, address verifier, address operator) external view returns (bool);\n}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\n/* solhint-disable var-name-mixedcase */ // TODO: create custom var-name-mixedcase\n\n/**\n * @title Defines the data types used in the Horizon staking contract\n * @dev In order to preserve storage compatibility some data structures keep deprecated fields.\n * These structures have then two representations, an internal one used by the contract storage and a public one.\n * Getter functions should retrieve internal representations, remove deprecated fields and return the public representation.\n */\ninterface IHorizonStakingTypes {\n /**\n * @notice Represents stake assigned to a specific verifier/data service.\n * Provisioned stake is locked and can be used as economic security by a data service.\n */\n struct Provision {\n // Service provider tokens in the provision (does not include delegated tokens)\n uint256 tokens;\n // Service provider tokens that are being thawed (and will stop being slashable soon)\n uint256 tokensThawing;\n // Shares representing the thawing tokens\n uint256 sharesThawing;\n // Max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed\n uint32 maxVerifierCut;\n // Time, in seconds, tokens must thaw before being withdrawn\n uint64 thawingPeriod;\n // Timestamp when the provision was created\n uint64 createdAt;\n // Pending value for `maxVerifierCut`. Verifier needs to accept it before it becomes active.\n uint32 maxVerifierCutPending;\n // Pending value for `thawingPeriod`. Verifier needs to accept it before it becomes active.\n uint64 thawingPeriodPending;\n // Value of the current thawing nonce. Thaw requests with older nonces are invalid.\n uint256 thawingNonce;\n }\n\n /**\n * @notice Public representation of a service provider.\n * @dev See {ServiceProviderInternal} for the actual storage representation\n */\n struct ServiceProvider {\n // Total amount of tokens on the provider stake (only staked by the provider, includes all provisions)\n uint256 tokensStaked;\n // Total amount of tokens locked in provisions (only staked by the provider)\n uint256 tokensProvisioned;\n }\n\n /**\n * @notice Internal representation of a service provider.\n * @dev It contains deprecated fields from the `Indexer` struct to maintain storage compatibility.\n */\n struct ServiceProviderInternal {\n // Total amount of tokens on the provider stake (only staked by the provider, includes all provisions)\n uint256 tokensStaked;\n // (Deprecated) Tokens used in allocations\n uint256 __DEPRECATED_tokensAllocated; // solhint-disable-line graph/leading-underscore\n // (Deprecated) Tokens locked for withdrawal subject to thawing period\n uint256 __DEPRECATED_tokensLocked;\n // (Deprecated) Block when locked tokens can be withdrawn\n uint256 __DEPRECATED_tokensLockedUntil;\n // Total amount of tokens locked in provisions (only staked by the provider)\n uint256 tokensProvisioned;\n }\n\n /**\n * @notice Public representation of a delegation pool.\n * @dev See {DelegationPoolInternal} for the actual storage representation\n */\n struct DelegationPool {\n // Total tokens as pool reserves\n uint256 tokens;\n // Total shares minted in the pool\n uint256 shares;\n // Tokens thawing in the pool\n uint256 tokensThawing;\n // Shares representing the thawing tokens\n uint256 sharesThawing;\n // Value of the current thawing nonce. Thaw requests with older nonces are invalid.\n uint256 thawingNonce;\n }\n\n /**\n * @notice Internal representation of a delegation pool.\n * @dev It contains deprecated fields from the previous version of the `DelegationPool` struct\n * to maintain storage compatibility.\n */\n struct DelegationPoolInternal {\n // (Deprecated) Time, in blocks, an indexer must wait before updating delegation parameters\n uint32 __DEPRECATED_cooldownBlocks;\n // (Deprecated) Percentage of indexing rewards for the service provider, in PPM\n uint32 __DEPRECATED_indexingRewardCut;\n // (Deprecated) Percentage of query fees for the service provider, in PPM\n uint32 __DEPRECATED_queryFeeCut;\n // (Deprecated) Block when the delegation parameters were last updated\n uint256 __DEPRECATED_updatedAtBlock;\n // Total tokens as pool reserves\n uint256 tokens;\n // Total shares minted in the pool\n uint256 shares;\n // Delegation details by delegator\n mapping(address delegator => DelegationInternal delegation) delegators;\n // Tokens thawing in the pool\n uint256 tokensThawing;\n // Shares representing the thawing tokens\n uint256 sharesThawing;\n // Value of the current thawing nonce. Thaw requests with older nonces are invalid.\n uint256 thawingNonce;\n }\n\n /**\n * @notice Public representation of delegation details.\n * @dev See {DelegationInternal} for the actual storage representation\n */\n struct Delegation {\n uint256 shares; // Shares owned by a delegator in the pool\n }\n\n /**\n * @notice Internal representation of delegation details.\n * @dev It contains deprecated fields from the previous version of the `Delegation` struct\n * to maintain storage compatibility.\n */\n struct DelegationInternal {\n // Shares owned by the delegator in the pool\n uint256 shares;\n // (Deprecated) Tokens locked for undelegation\n uint256 __DEPRECATED_tokensLocked;\n // (Deprecated) Epoch when locked tokens can be withdrawn\n uint256 __DEPRECATED_tokensLockedUntil;\n }\n\n /**\n * @notice Details of a stake thawing operation.\n * @dev ThawRequests are stored in linked lists by service provider/delegator,\n * ordered by creation timestamp.\n */\n struct ThawRequest {\n // Shares that represent the tokens being thawed\n uint256 shares;\n // The timestamp when the thawed funds can be removed from the provision\n uint64 thawingUntil;\n // Id of the next thaw request in the linked list\n bytes32 next;\n // Used to invalidate unfulfilled thaw requests\n uint256 thawingNonce;\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"./IGraphPayments.sol\";\n\n/**\n * @title Interface for a payments collector contract as defined by Graph Horizon payments protocol\n * @notice Contracts implementing this interface can be used with the payments protocol. First, a payer must\n * approve the collector to collect payments on their behalf. Only then can payment collection be initiated\n * using the collector contract.\n *\n * @dev It's important to note that it's the collector contract's responsibility to validate the payment\n * request is legitimate.\n */\ninterface IPaymentsCollector {\n /**\n * @notice Emitted when a payment is collected\n * @param paymentType The payment type collected as defined by {IGraphPayments}\n * @param payer The address of the payer\n * @param receiver The address of the receiver\n * @param tokensReceiver The amount of tokens received by the receiver\n * @param dataService The address of the data service\n * @param tokensDataService The amount of tokens received by the data service\n */\n event PaymentCollected(\n IGraphPayments.PaymentTypes indexed paymentType,\n address indexed payer,\n address receiver,\n uint256 tokensReceiver,\n address indexed dataService,\n uint256 tokensDataService\n );\n\n /**\n * @notice Initiate a payment collection through the payments protocol\n * @dev This function should require the caller to present some form of evidence of the payer's debt to\n * the receiver. The collector should validate this evidence and, if valid, collect the payment.\n * Requirements:\n * - The caller must be the data service the RAV was issued to\n * - The signer of the RAV must be authorized to sign for the payer\n *\n * Emits a {PaymentCollected} event\n *\n * @param paymentType The payment type to collect, as defined by {IGraphPayments}\n * @param data Additional data required for the payment collection. Will vary depending on the collector\n * implementation.\n */\n function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external returns (uint256);\n}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"./IGraphPayments.sol\";\n\n/**\n * @title Interface for the {PaymentsEscrow} contract\n * @notice This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT)\n * for payments made through the payments protocol for services provided\n * via a Graph Horizon data service.\n *\n * Payers deposit funds on the escrow, signalling their ability to pay for a service, and only\n * being able to retrieve them after a thawing period. Receivers collect funds from the escrow,\n * provided the payer has authorized them. The payer authorization is delegated to a payment\n * collector contract which implements the {IPaymentsCollector} interface.\n */\ninterface IPaymentsEscrow {\n /// @notice Escrow account for a payer-collector-receiver tuple\n struct EscrowAccount {\n // Total token balance for the payer-collector-receiver tuple\n uint256 balance;\n // Amount of tokens currently being thawed\n uint256 tokensThawing;\n // Timestamp at which thawing period ends (zero if not thawing)\n uint256 thawEndTimestamp;\n }\n\n /// @notice Details for a payer-collector pair\n /// @dev Collectors can be removed only after a thawing period\n struct Collector {\n // Amount of tokens the collector is allowed to collect\n uint256 allowance;\n // Timestamp at which the collector thawing period ends (zero if not thawing)\n uint256 thawEndTimestamp;\n }\n\n /**\n * @notice Emitted when a payer authorizes a collector to collect funds\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param addedAllowance The amount of tokens added to the collector's allowance\n * @param newTotalAllowance The new total allowance after addition\n */\n event AuthorizedCollector(\n address indexed payer,\n address indexed collector,\n uint256 addedAllowance,\n uint256 newTotalAllowance\n );\n\n /**\n * @notice Emitted when a payer thaws a collector\n * @param payer The address of the payer\n * @param collector The address of the collector\n */\n event ThawCollector(address indexed payer, address indexed collector);\n\n /**\n * @notice Emitted when a payer cancels the thawing of a collector\n * @param payer The address of the payer\n * @param collector The address of the collector\n */\n event CancelThawCollector(address indexed payer, address indexed collector);\n\n /**\n * @notice Emitted when a payer revokes a collector authorization.\n * @param payer The address of the payer\n * @param collector The address of the collector\n */\n event RevokeCollector(address indexed payer, address indexed collector);\n\n /**\n * @notice Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens deposited\n */\n event Deposit(address indexed payer, address indexed collector, address indexed receiver, uint256 tokens);\n\n /**\n * @notice Emitted when a payer cancels an escrow thawing\n * @param payer The address of the payer\n * @param receiver The address of the receiver\n */\n event CancelThaw(address indexed payer, address indexed receiver);\n\n /**\n * @notice Emitted when a payer thaws funds from the escrow for a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens being thawed\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n event Thaw(\n address indexed payer,\n address indexed collector,\n address indexed receiver,\n uint256 tokens,\n uint256 thawEndTimestamp\n );\n\n /**\n * @notice Emitted when a payer withdraws funds from the escrow for a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens withdrawn\n */\n event Withdraw(address indexed payer, address indexed collector, address indexed receiver, uint256 tokens);\n\n /**\n * @notice Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens collected\n */\n event EscrowCollected(address indexed payer, address indexed collector, address indexed receiver, uint256 tokens);\n\n // -- Errors --\n\n /**\n * @notice Thrown when a protected function is called and the contract is paused.\n */\n error PaymentsEscrowIsPaused();\n\n /**\n * @notice Thrown when the available balance is insufficient to perform an operation\n * @param balance The current balance\n * @param minBalance The minimum required balance\n */\n error PaymentsEscrowInsufficientBalance(uint256 balance, uint256 minBalance);\n\n /**\n * @notice Thrown when a thawing is expected to be in progress but it is not\n */\n error PaymentsEscrowNotThawing();\n\n /**\n * @notice Thrown when a thawing is still in progress\n * @param currentTimestamp The current timestamp\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n error PaymentsEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp);\n\n /**\n * @notice Thrown when setting the thawing period to a value greater than the maximum\n * @param thawingPeriod The thawing period\n * @param maxWaitPeriod The maximum wait period\n */\n error PaymentsEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxWaitPeriod);\n\n /**\n * @notice Thrown when a collector has insufficient allowance to collect funds\n * @param allowance The current allowance\n * @param minAllowance The minimum required allowance\n */\n error PaymentsEscrowInsufficientAllowance(uint256 allowance, uint256 minAllowance);\n\n /**\n * @notice Thrown when the contract balance is not consistent with the collection amount\n * @param balanceBefore The balance before the collection\n * @param balanceAfter The balance after the collection\n * @param tokens The amount of tokens collected\n */\n error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens);\n\n /**\n * @notice Thrown when operating a zero token amount is not allowed.\n */\n error PaymentsEscrowInvalidZeroTokens();\n\n /**\n * @notice Authorize a collector to collect funds from the payer's escrow\n * @dev This function can only be used to increase the allowance of a collector.\n * To reduce it the authorization must be revoked and a new one must be created.\n *\n * Requirements:\n * - `allowance` must be greater than zero\n *\n * Emits an {AuthorizedCollector} event\n *\n * @param collector The address of the collector\n * @param allowance The amount of tokens to add to the collector's allowance\n */\n function approveCollector(address collector, uint256 allowance) external;\n\n /**\n * @notice Thaw a collector's collector authorization\n * @dev The thawing period is defined by the `REVOKE_COLLECTOR_THAWING_PERIOD` constant\n *\n * Emits a {ThawCollector} event\n *\n * @param collector The address of the collector\n */\n function thawCollector(address collector) external;\n\n /**\n * @notice Cancel a collector's authorization thawing\n * @dev Requirements:\n * - `collector` must be thawing\n *\n * Emits a {CancelThawCollector} event\n *\n * @param collector The address of the collector\n */\n function cancelThawCollector(address collector) external;\n\n /**\n * @notice Revoke a collector's authorization.\n * Removes the collector from the list of authorized collectors.\n * @dev Requirements:\n * - `collector` must have thawed\n *\n * Emits a {RevokeCollector} event\n *\n * @param collector The address of the collector\n */\n function revokeCollector(address collector) external;\n\n /**\n * @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where\n * the payer is the transaction caller.\n * @dev Emits a {Deposit} event\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens to deposit\n */\n function deposit(address collector, address receiver, uint256 tokens) external;\n\n /**\n * @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where\n * the payer can be specified.\n * @dev Emits a {Deposit} event\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens to deposit\n */\n function depositTo(address payer, address collector, address receiver, uint256 tokens) external;\n\n /**\n * @notice Thaw a specific amount of escrow from a payer-collector-receiver's escrow account.\n * The payer is the transaction caller.\n * If `tokens` is zero and funds were already thawing it will cancel the thawing.\n * Note that repeated calls to this function will overwrite the previous thawing amount\n * and reset the thawing period.\n * @dev Requirements:\n * - `tokens` must be less than or equal to the available balance\n *\n * Emits a {Thaw} event. If `tokens` is zero it will emit a {CancelThaw} event.\n *\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens to thaw\n */\n function thaw(address collector, address receiver, uint256 tokens) external;\n\n /**\n * @notice Withdraws all thawed escrow from a payer-collector-receiver's escrow account.\n * The payer is the transaction caller.\n * Note that the withdrawn funds might be less than the thawed amount if there were\n * payment collections in the meantime.\n * @dev Requirements:\n * - Funds must be thawed\n *\n * Emits a {Withdraw} event\n *\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n */\n function withdraw(address collector, address receiver) external;\n\n /**\n * @notice Collects funds from the payer-collector-receiver's escrow and sends them to {GraphPayments} for\n * distribution using the Graph Horizon Payments protocol.\n * The function will revert if there are not enough funds in the escrow.\n * @dev Requirements:\n * - `collector` needs to be authorized by the payer and have enough allowance\n *\n * Emits an {EscrowCollected} event\n *\n * @param paymentType The type of payment being collected as defined in the {IGraphPayments} interface\n * @param payer The address of the payer\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens to collect\n * @param dataService The address of the data service\n * @param tokensDataService The amount of tokens that {GraphPayments} should send to the data service\n */\n function collect(\n IGraphPayments.PaymentTypes paymentType,\n address payer,\n address receiver,\n uint256 tokens,\n address dataService,\n uint256 tokensDataService\n ) external;\n\n /**\n * @notice Get the balance of a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n */\n function getBalance(address payer, address collector, address receiver) external view returns (uint256);\n}\n" + }, + "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IPaymentsCollector } from \"./IPaymentsCollector.sol\";\n\n/**\n * @title Interface for the {TAPCollector} contract\n * @dev Implements the {IPaymentCollector} interface as defined by the Graph\n * Horizon payments protocol.\n * @notice Implements a payments collector contract that can be used to collect\n * payments using a TAP RAV (Receipt Aggregate Voucher).\n */\ninterface ITAPCollector is IPaymentsCollector {\n /// @notice Details for a payer-signer pair\n /// @dev Signers can be removed only after a thawing period\n struct PayerAuthorization {\n // Payer the signer is authorized to sign for\n address payer;\n // Timestamp at which thawing period ends (zero if not thawing)\n uint256 thawEndTimestamp;\n }\n\n /// @notice The Receipt Aggregate Voucher (RAV) struct\n struct ReceiptAggregateVoucher {\n // The address of the data service the RAV was issued to\n address dataService;\n // The address of the service provider the RAV was issued to\n address serviceProvider;\n // The RAV timestamp, indicating the latest TAP Receipt in the RAV\n uint64 timestampNs;\n // Total amount owed to the service provider since the beginning of the\n // payer-service provider relationship, including all debt that is already paid for.\n uint128 valueAggregate;\n // Arbitrary metadata to extend functionality if a data service requires it\n bytes metadata;\n }\n\n /// @notice A struct representing a signed RAV\n struct SignedRAV {\n // The RAV\n ReceiptAggregateVoucher rav;\n // Signature - 65 bytes: r (32 Bytes) || s (32 Bytes) || v (1 Byte)\n bytes signature;\n }\n\n /**\n * @notice Emitted when a signer is authorized to sign RAVs for a payer\n * @param payer The address of the payer authorizing the signer\n * @param authorizedSigner The address of the authorized signer\n */\n event SignerAuthorized(address indexed payer, address indexed authorizedSigner);\n\n /**\n * @notice Emitted when a signer is thawed to be removed from the authorized signers list\n * @param payer The address of the payer thawing the signer\n * @param authorizedSigner The address of the signer to thaw\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n event SignerThawing(address indexed payer, address indexed authorizedSigner, uint256 thawEndTimestamp);\n\n /**\n * @dev Emitted when the thawing of a signer is cancelled\n * @param payer The address of the payer cancelling the thawing\n * @param authorizedSigner The address of the authorized signer\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n event SignerThawCanceled(address indexed payer, address indexed authorizedSigner, uint256 thawEndTimestamp);\n\n /**\n * @dev Emitted when a authorized signer has been revoked\n * @param payer The address of the payer revoking the signer\n * @param authorizedSigner The address of the authorized signer\n */\n event SignerRevoked(address indexed payer, address indexed authorizedSigner);\n\n /**\n * @notice Emitted when a RAV is collected\n * @param payer The address of the payer\n * @param dataService The address of the data service\n * @param serviceProvider The address of the service provider\n * @param timestampNs The timestamp of the RAV\n * @param valueAggregate The total amount owed to the service provider\n * @param metadata Arbitrary metadata\n * @param signature The signature of the RAV\n */\n event RAVCollected(\n address indexed payer,\n address indexed dataService,\n address indexed serviceProvider,\n uint64 timestampNs,\n uint128 valueAggregate,\n bytes metadata,\n bytes signature\n );\n\n /**\n * Thrown when the signer is already authorized\n * @param authorizingPayer The address of the payer authorizing the signer\n * @param signer The address of the signer\n */\n error TAPCollectorSignerAlreadyAuthorized(address authorizingPayer, address signer);\n\n /**\n * Thrown when the signer proof deadline is invalid\n * @param proofDeadline The deadline for the proof provided by the signer\n * @param currentTimestamp The current timestamp\n */\n error TAPCollectorInvalidSignerProofDeadline(uint256 proofDeadline, uint256 currentTimestamp);\n\n /**\n * Thrown when the signer proof is invalid\n */\n error TAPCollectorInvalidSignerProof();\n\n /**\n * Thrown when the signer is not authorized by the payer\n * @param payer The address of the payer\n * @param signer The address of the signer\n */\n error TAPCollectorSignerNotAuthorizedByPayer(address payer, address signer);\n\n /**\n * Thrown when the signer is not thawing\n * @param signer The address of the signer\n */\n error TAPCollectorSignerNotThawing(address signer);\n\n /**\n * Thrown when the signer is still thawing\n * @param currentTimestamp The current timestamp\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n error TAPCollectorSignerStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp);\n\n /**\n * Thrown when the RAV signer is invalid\n */\n error TAPCollectorInvalidRAVSigner();\n\n /**\n * Thrown when the caller is not the data service the RAV was issued to\n * @param caller The address of the caller\n * @param dataService The address of the data service\n */\n error TAPCollectorCallerNotDataService(address caller, address dataService);\n\n /**\n * @notice Thrown when the tokens collected are inconsistent with the collection history\n * Each RAV should have a value greater than the previous one\n * @param tokens The amount of tokens in the RAV\n * @param tokensCollected The amount of tokens already collected\n */\n error TAPCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected);\n\n /**\n * @notice Authorize a signer to sign on behalf of the payer\n * @dev Requirements:\n * - `signer` must not be already authorized\n * - `proofDeadline` must be greater than the current timestamp\n * - `proof` must be a valid signature from the signer being authorized\n *\n * Emits an {SignerAuthorized} event\n * @param signer The addres of the authorized signer\n * @param proofDeadline The deadline for the proof provided by the signer\n * @param proof The proof provided by the signer to be authorized by the payer, consists of (chainID, proof deadline, sender address)\n */\n function authorizeSigner(address signer, uint256 proofDeadline, bytes calldata proof) external;\n\n /**\n * @notice Starts thawing a signer to be removed from the authorized signers list\n * @dev Thawing a signer alerts receivers that signatures from that signer will soon be deemed invalid.\n * Receivers without existing signed receipts or RAVs from this signer should treat them as unauthorized.\n * Those with existing signed documents from this signer should work towards settling their engagements.\n * Once a signer is thawed, they should be viewed as revoked regardless of their revocation status.\n * Requirements:\n * - `signer` must be authorized by the payer calling this function\n *\n * Emits a {SignerThawing} event\n * @param signer The address of the signer to thaw\n */\n function thawSigner(address signer) external;\n\n /**\n * @notice Stops thawing a signer.\n * @dev Requirements:\n * - `signer` must be thawing and authorized by the payer calling this function\n *\n * Emits a {SignerThawCanceled} event\n * @param signer The address of the signer to cancel thawing\n */\n function cancelThawSigner(address signer) external;\n\n /**\n * @notice Revokes a signer from the authorized signers list if thawed.\n * @dev Requirements:\n * - `signer` must be thawed and authorized by the payer calling this function\n *\n * Emits a {SignerRevoked} event\n * @param signer The address of the signer\n */\n function revokeAuthorizedSigner(address signer) external;\n\n /**\n * @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV).\n * @param signedRAV The SignedRAV containing the RAV and its signature.\n * @return The address of the signer.\n */\n function recoverRAVSigner(SignedRAV calldata signedRAV) external view returns (address);\n\n /**\n * @dev Computes the hash of a ReceiptAggregateVoucher (RAV).\n * @param rav The RAV for which to compute the hash.\n * @return The hash of the RAV.\n */\n function encodeRAV(ReceiptAggregateVoucher calldata rav) external view returns (bytes32);\n}\n" + }, + "@graphprotocol/horizon/contracts/libraries/LinkedList.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\n/**\n * @title LinkedList library\n * @notice A library to manage singly linked lists.\n *\n * The library makes no assumptions about the contents of the items, the only\n * requirements on the items are:\n * - they must be represented by a unique bytes32 id\n * - the id of the item must not be bytes32(0)\n * - each item must have a reference to the next item in the list\n * - the list cannot have more than `MAX_ITEMS` items\n *\n * A contract using this library must store:\n * - a LinkedList.List to keep track of the list metadata\n * - a mapping from bytes32 to the item data\n */\nlibrary LinkedList {\n using LinkedList for List;\n\n /// @notice Represents a linked list\n struct List {\n // The head of the list\n bytes32 head;\n // The tail of the list\n bytes32 tail;\n // A nonce, which can optionally be used to generate unique ids\n uint256 nonce;\n // The number of items in the list\n uint256 count;\n }\n\n /// @notice Empty bytes constant\n bytes internal constant NULL_BYTES = bytes(\"\");\n\n /// @notice Maximum amount of items allowed in the list\n uint256 internal constant MAX_ITEMS = 10_000;\n\n /**\n * @notice Thrown when trying to remove an item from an empty list\n */\n error LinkedListEmptyList();\n\n /**\n * @notice Thrown when trying to add an item to a list that has reached the maximum number of elements\n */\n error LinkedListMaxElementsExceeded();\n\n /**\n * @notice Thrown when trying to traverse a list with more iterations than elements\n */\n error LinkedListInvalidIterations();\n\n /**\n * @notice Thrown when trying to add an item with id equal to bytes32(0)\n */\n error LinkedListInvalidZeroId();\n\n /**\n * @notice Adds an item to the list.\n * The item is added to the end of the list.\n * @dev Note that this function will not take care of linking the\n * old tail to the new item. The caller should take care of this.\n * It will also not ensure id uniqueness.\n * @dev There is a maximum number of elements that can be added to the list.\n * @param self The list metadata\n * @param id The id of the item to add\n */\n function addTail(List storage self, bytes32 id) internal {\n require(self.count < MAX_ITEMS, LinkedListMaxElementsExceeded());\n require(id != bytes32(0), LinkedListInvalidZeroId());\n self.tail = id;\n self.nonce += 1;\n if (self.count == 0) self.head = id;\n self.count += 1;\n }\n\n /**\n * @notice Removes an item from the list.\n * The item is removed from the beginning of the list.\n * @param self The list metadata\n * @param getNextItem A function to get the next item in the list. It should take\n * the id of the current item and return the id of the next item.\n * @param deleteItem A function to delete an item. This should delete the item from\n * the contract storage. It takes the id of the item to delete.\n */\n function removeHead(\n List storage self,\n function(bytes32) view returns (bytes32) getNextItem,\n function(bytes32) deleteItem\n ) internal returns (bytes32) {\n require(self.count > 0, LinkedListEmptyList());\n bytes32 nextItem = getNextItem(self.head);\n deleteItem(self.head);\n self.count -= 1;\n self.head = nextItem;\n if (self.count == 0) self.tail = bytes32(0);\n return self.head;\n }\n\n /**\n * @notice Traverses the list and processes each item.\n * It deletes the processed items from both the list and the storage mapping.\n * @param self The list metadata\n * @param getNextItem A function to get the next item in the list. It should take\n * the id of the current item and return the id of the next item.\n * @param processItem A function to process an item. The function should take the id of the item\n * and an accumulator, and return:\n * - a boolean indicating whether the traversal should stop\n * - an accumulator to pass data between iterations\n * @param deleteItem A function to delete an item. This should delete the item from\n * the contract storage. It takes the id of the item to delete.\n * @param processInitAcc The initial accumulator data\n * @param iterations The maximum number of iterations to perform. If 0, the traversal will continue\n * until the end of the list.\n */\n function traverse(\n List storage self,\n function(bytes32) view returns (bytes32) getNextItem,\n function(bytes32, bytes memory) returns (bool, bytes memory) processItem,\n function(bytes32) deleteItem,\n bytes memory processInitAcc,\n uint256 iterations\n ) internal returns (uint256, bytes memory) {\n require(iterations <= self.count, LinkedListInvalidIterations());\n\n uint256 itemCount = 0;\n iterations = (iterations == 0) ? self.count : iterations;\n\n bytes32 cursor = self.head;\n\n while (cursor != bytes32(0) && iterations > 0) {\n (bool shouldBreak, bytes memory acc_) = processItem(cursor, processInitAcc);\n\n if (shouldBreak) break;\n\n processInitAcc = acc_;\n cursor = self.removeHead(getNextItem, deleteItem);\n\n iterations--;\n itemCount++;\n }\n\n return (itemCount, processInitAcc);\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/libraries/MathUtils.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\n/**\n * @title MathUtils Library\n * @notice A collection of functions to perform math operations\n */\nlibrary MathUtils {\n /**\n * @dev Calculates the weighted average of two values pondering each of these\n * values based on configured weights. The contribution of each value N is\n * weightN/(weightA + weightB). The calculation rounds up to ensure the result\n * is always greater than the smallest of the two values.\n * @param valueA The amount for value A\n * @param weightA The weight to use for value A\n * @param valueB The amount for value B\n * @param weightB The weight to use for value B\n */\n function weightedAverageRoundingUp(\n uint256 valueA,\n uint256 weightA,\n uint256 valueB,\n uint256 weightB\n ) internal pure returns (uint256) {\n return ((valueA * weightA) + (valueB * weightB) + (weightA + weightB - 1)) / (weightA + weightB);\n }\n\n /**\n * @dev Returns the minimum of two numbers.\n */\n function min(uint256 x, uint256 y) internal pure returns (uint256) {\n return x <= y ? x : y;\n }\n\n /**\n * @dev Returns the difference between two numbers or zero if negative.\n */\n function diffOrZero(uint256 x, uint256 y) internal pure returns (uint256) {\n return (x > y) ? x - y : 0;\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/libraries/PPMMath.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title PPMMath library\n * @notice A library for handling calculations with parts per million (PPM) amounts.\n */\nlibrary PPMMath {\n /// @notice Maximum value (100%) in parts per million (PPM).\n uint256 internal constant MAX_PPM = 1_000_000;\n\n /**\n * @notice Thrown when a value is expected to be in PPM but is not.\n * @param value The value that is not in PPM.\n */\n error PPMMathInvalidPPM(uint256 value);\n\n /**\n * @notice Thrown when no value in a multiplication is in PPM.\n * @param a The first value in the multiplication.\n * @param b The second value in the multiplication.\n */\n error PPMMathInvalidMulPPM(uint256 a, uint256 b);\n\n /**\n * @notice Multiplies two values, one of which must be in PPM.\n * @param a The first value.\n * @param b The second value.\n * @return The result of the multiplication.\n */\n function mulPPM(uint256 a, uint256 b) internal pure returns (uint256) {\n require(isValidPPM(a) || isValidPPM(b), PPMMathInvalidMulPPM(a, b));\n return (a * b) / MAX_PPM;\n }\n\n /**\n * @notice Multiplies two values, the second one must be in PPM, and rounds up the result.\n * @dev requirements:\n * - The second value must be in PPM.\n * @param a The first value.\n * @param b The second value.\n */\n function mulPPMRoundUp(uint256 a, uint256 b) internal pure returns (uint256) {\n require(isValidPPM(b), PPMMathInvalidPPM(b));\n return a - mulPPM(a, MAX_PPM - b);\n }\n\n /**\n * @notice Checks if a value is in PPM.\n * @dev A valid PPM value is between 0 and MAX_PPM.\n * @param value The value to check.\n */\n function isValidPPM(uint256 value) internal pure returns (bool) {\n return value <= MAX_PPM;\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/libraries/UintRange.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title UintRange library\n * @notice A library for handling range checks on uint256 values.\n */\nlibrary UintRange {\n using UintRange for uint256;\n\n /**\n * @notice Checks if a value is in the range [`min`, `max`].\n * @param value The value to check.\n * @param min The minimum value of the range.\n * @param max The maximum value of the range.\n */\n function isInRange(uint256 value, uint256 min, uint256 max) internal pure returns (bool) {\n return value >= min && value <= max;\n }\n}\n" + }, + "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IGraphToken } from \"@graphprotocol/contracts/contracts/token/IGraphToken.sol\";\nimport { IHorizonStaking } from \"../interfaces/IHorizonStaking.sol\";\nimport { IGraphPayments } from \"../interfaces/IGraphPayments.sol\";\nimport { IPaymentsEscrow } from \"../interfaces/IPaymentsEscrow.sol\";\n\nimport { IController } from \"@graphprotocol/contracts/contracts/governance/IController.sol\";\nimport { IEpochManager } from \"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\";\nimport { IRewardsManager } from \"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\";\nimport { ITokenGateway } from \"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\";\nimport { IGraphProxyAdmin } from \"../interfaces/IGraphProxyAdmin.sol\";\n\nimport { ICuration } from \"@graphprotocol/contracts/contracts/curation/ICuration.sol\";\n\n/**\n * @title GraphDirectory contract\n * @notice This contract is meant to be inherited by other contracts that\n * need to keep track of the addresses in Graph Horizon contracts.\n * It fetches the addresses from the Controller supplied during construction,\n * and uses immutable variables to minimize gas costs.\n */\nabstract contract GraphDirectory {\n // -- Graph Horizon contracts --\n\n /// @notice The Graph Token contract address\n IGraphToken private immutable GRAPH_TOKEN;\n\n /// @notice The Horizon Staking contract address\n IHorizonStaking private immutable GRAPH_STAKING;\n\n /// @notice The Graph Payments contract address\n IGraphPayments private immutable GRAPH_PAYMENTS;\n\n /// @notice The Payments Escrow contract address\n IPaymentsEscrow private immutable GRAPH_PAYMENTS_ESCROW;\n\n // -- Graph periphery contracts --\n\n /// @notice The Graph Controller contract address\n IController private immutable GRAPH_CONTROLLER;\n\n /// @notice The Epoch Manager contract address\n IEpochManager private immutable GRAPH_EPOCH_MANAGER;\n\n /// @notice The Rewards Manager contract address\n IRewardsManager private immutable GRAPH_REWARDS_MANAGER;\n\n /// @notice The Token Gateway contract address\n ITokenGateway private immutable GRAPH_TOKEN_GATEWAY;\n\n /// @notice The Graph Proxy Admin contract address\n IGraphProxyAdmin private immutable GRAPH_PROXY_ADMIN;\n\n // -- Legacy Graph contracts --\n // These are required for backwards compatibility on HorizonStakingExtension\n // TODO: remove these once HorizonStakingExtension is removed\n ICuration private immutable GRAPH_CURATION;\n\n /**\n * @notice Emitted when the GraphDirectory is initialized\n * @param graphToken The Graph Token contract address\n * @param graphStaking The Horizon Staking contract address\n * @param graphPayments The Graph Payments contract address\n * @param graphEscrow The Payments Escrow contract address\n * @param graphController The Graph Controller contract address\n * @param graphEpochManager The Epoch Manager contract address\n * @param graphRewardsManager The Rewards Manager contract address\n * @param graphTokenGateway The Token Gateway contract address\n * @param graphProxyAdmin The Graph Proxy Admin contract address\n * @param graphCuration The Curation contract address\n */\n event GraphDirectoryInitialized(\n address indexed graphToken,\n address indexed graphStaking,\n address graphPayments,\n address graphEscrow,\n address indexed graphController,\n address graphEpochManager,\n address graphRewardsManager,\n address graphTokenGateway,\n address graphProxyAdmin,\n address graphCuration\n );\n\n /**\n * @notice Thrown when either the controller is the zero address or a contract address is not found\n * on the controller\n * @param contractName The name of the contract that was not found, or the controller\n */\n error GraphDirectoryInvalidZeroAddress(bytes contractName);\n\n /**\n * @notice Constructor for the GraphDirectory contract\n * @dev Requirements:\n * - `controller` cannot be zero address\n *\n * Emits a {GraphDirectoryInitialized} event\n *\n * @param controller The address of the Graph Controller contract.\n */\n constructor(address controller) {\n require(controller != address(0), GraphDirectoryInvalidZeroAddress(\"Controller\"));\n\n GRAPH_CONTROLLER = IController(controller);\n GRAPH_TOKEN = IGraphToken(_getContractFromController(\"GraphToken\"));\n GRAPH_STAKING = IHorizonStaking(_getContractFromController(\"Staking\"));\n GRAPH_PAYMENTS = IGraphPayments(_getContractFromController(\"GraphPayments\"));\n GRAPH_PAYMENTS_ESCROW = IPaymentsEscrow(_getContractFromController(\"PaymentsEscrow\"));\n GRAPH_EPOCH_MANAGER = IEpochManager(_getContractFromController(\"EpochManager\"));\n GRAPH_REWARDS_MANAGER = IRewardsManager(_getContractFromController(\"RewardsManager\"));\n GRAPH_TOKEN_GATEWAY = ITokenGateway(_getContractFromController(\"GraphTokenGateway\"));\n GRAPH_PROXY_ADMIN = IGraphProxyAdmin(_getContractFromController(\"GraphProxyAdmin\"));\n GRAPH_CURATION = ICuration(_getContractFromController(\"Curation\"));\n\n emit GraphDirectoryInitialized(\n address(GRAPH_TOKEN),\n address(GRAPH_STAKING),\n address(GRAPH_PAYMENTS),\n address(GRAPH_PAYMENTS_ESCROW),\n address(GRAPH_CONTROLLER),\n address(GRAPH_EPOCH_MANAGER),\n address(GRAPH_REWARDS_MANAGER),\n address(GRAPH_TOKEN_GATEWAY),\n address(GRAPH_PROXY_ADMIN),\n address(GRAPH_CURATION)\n );\n }\n\n /**\n * @notice Get the Graph Token contract\n */\n function _graphToken() internal view returns (IGraphToken) {\n return GRAPH_TOKEN;\n }\n\n /**\n * @notice Get the Horizon Staking contract\n */\n function _graphStaking() internal view returns (IHorizonStaking) {\n return GRAPH_STAKING;\n }\n\n /**\n * @notice Get the Graph Payments contract\n */\n function _graphPayments() internal view returns (IGraphPayments) {\n return GRAPH_PAYMENTS;\n }\n\n /**\n * @notice Get the Payments Escrow contract\n */\n function _graphPaymentsEscrow() internal view returns (IPaymentsEscrow) {\n return GRAPH_PAYMENTS_ESCROW;\n }\n\n /**\n * @notice Get the Graph Controller contract\n */\n function _graphController() internal view returns (IController) {\n return GRAPH_CONTROLLER;\n }\n\n /**\n * @notice Get the Epoch Manager contract\n */\n function _graphEpochManager() internal view returns (IEpochManager) {\n return GRAPH_EPOCH_MANAGER;\n }\n\n /**\n * @notice Get the Rewards Manager contract\n */\n function _graphRewardsManager() internal view returns (IRewardsManager) {\n return GRAPH_REWARDS_MANAGER;\n }\n\n /**\n * @notice Get the Graph Token Gateway contract\n */\n function _graphTokenGateway() internal view returns (ITokenGateway) {\n return GRAPH_TOKEN_GATEWAY;\n }\n\n /**\n * @notice Get the Graph Proxy Admin contract\n */\n function _graphProxyAdmin() internal view returns (IGraphProxyAdmin) {\n return GRAPH_PROXY_ADMIN;\n }\n\n /**\n * @notice Get the Curation contract\n */\n function _graphCuration() internal view returns (ICuration) {\n return GRAPH_CURATION;\n }\n\n /**\n * @notice Get a contract address from the controller\n * @dev Requirements:\n * - The `_contractName` must be registered in the controller\n * @param _contractName The name of the contract to fetch from the controller\n */\n function _getContractFromController(bytes memory _contractName) private view returns (address) {\n address contractAddress = GRAPH_CONTROLLER.getContractProxy(keccak256(_contractName));\n require(contractAddress != address(0), GraphDirectoryInvalidZeroAddress(_contractName));\n return contractAddress;\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\n struct OwnableStorage {\n address _owner;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\n\n function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\n assembly {\n $.slot := OwnableStorageLocation\n }\n }\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n function __Ownable_init(address initialOwner) internal onlyInitializing {\n __Ownable_init_unchained(initialOwner);\n }\n\n function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n OwnableStorage storage $ = _getOwnableStorage();\n return $._owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n OwnableStorage storage $ = _getOwnableStorage();\n address oldOwner = $._owner;\n $._owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Storage of the initializable contract.\n *\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n * when using with upgradeable contracts.\n *\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n */\n struct InitializableStorage {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n uint64 _initialized;\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool _initializing;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n /**\n * @dev The contract is already initialized.\n */\n error InvalidInitialization();\n\n /**\n * @dev The contract is not initializing.\n */\n error NotInitializing();\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint64 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts.\n *\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n * production.\n *\n * Emits an {Initialized} event.\n */\n modifier initializer() {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n // Cache values to avoid duplicated sloads\n bool isTopLevelCall = !$._initializing;\n uint64 initialized = $._initialized;\n\n // Allowed calls:\n // - initialSetup: the contract is not in the initializing state and no previous version was\n // initialized\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\n // current contract is just being deployed\n bool initialSetup = initialized == 0 && isTopLevelCall;\n bool construction = initialized == 1 && address(this).code.length == 0;\n\n if (!initialSetup && !construction) {\n revert InvalidInitialization();\n }\n $._initialized = 1;\n if (isTopLevelCall) {\n $._initializing = true;\n }\n _;\n if (isTopLevelCall) {\n $._initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n * are added through upgrades and that require initialization.\n *\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n * cannot be nested. If one is invoked in the context of another, execution will revert.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n *\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n *\n * Emits an {Initialized} event.\n */\n modifier reinitializer(uint64 version) {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing || $._initialized >= version) {\n revert InvalidInitialization();\n }\n $._initialized = version;\n $._initializing = true;\n _;\n $._initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n _checkInitializing();\n _;\n }\n\n /**\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n */\n function _checkInitializing() internal view virtual {\n if (!_isInitializing()) {\n revert NotInitializing();\n }\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n *\n * Emits an {Initialized} event the first time it is successfully executed.\n */\n function _disableInitializers() internal virtual {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing) {\n revert InvalidInitialization();\n }\n if ($._initialized != type(uint64).max) {\n $._initialized = type(uint64).max;\n emit Initialized(type(uint64).max);\n }\n }\n\n /**\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\n */\n function _getInitializedVersion() internal view returns (uint64) {\n return _getInitializableStorage()._initialized;\n }\n\n /**\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n */\n function _isInitializing() internal view returns (bool) {\n return _getInitializableStorage()._initializing;\n }\n\n /**\n * @dev Returns a pointer to the storage namespace.\n */\n // solhint-disable-next-line var-name-mixedcase\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n assembly {\n $.slot := INITIALIZABLE_STORAGE\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.20;\n\nimport {MessageHashUtils} from \"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\";\nimport {IERC5267} from \"@openzeppelin/contracts/interfaces/IERC5267.sol\";\nimport {Initializable} from \"../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n */\nabstract contract EIP712Upgradeable is Initializable, IERC5267 {\n bytes32 private constant TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n\n /// @custom:storage-location erc7201:openzeppelin.storage.EIP712\n struct EIP712Storage {\n /// @custom:oz-renamed-from _HASHED_NAME\n bytes32 _hashedName;\n /// @custom:oz-renamed-from _HASHED_VERSION\n bytes32 _hashedVersion;\n\n string _name;\n string _version;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.EIP712\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant EIP712StorageLocation = 0xa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100;\n\n function _getEIP712Storage() private pure returns (EIP712Storage storage $) {\n assembly {\n $.slot := EIP712StorageLocation\n }\n }\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal onlyInitializing {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal onlyInitializing {\n EIP712Storage storage $ = _getEIP712Storage();\n $._name = name;\n $._version = version;\n\n // Reset prior values in storage if upgrading\n $._hashedName = 0;\n $._hashedVersion = 0;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator();\n }\n\n function _buildDomainSeparator() private view returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash(), block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n\n /**\n * @dev See {IERC-5267}.\n */\n function eip712Domain()\n public\n view\n virtual\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n )\n {\n EIP712Storage storage $ = _getEIP712Storage();\n // If the hashed name and version in storage are non-zero, the contract hasn't been properly initialized\n // and the EIP712 domain is not reliable, as it will be missing name and version.\n require($._hashedName == 0 && $._hashedVersion == 0, \"EIP712: Uninitialized\");\n\n return (\n hex\"0f\", // 01111\n _EIP712Name(),\n _EIP712Version(),\n block.chainid,\n address(this),\n bytes32(0),\n new uint256[](0)\n );\n }\n\n /**\n * @dev The name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712Name() internal view virtual returns (string memory) {\n EIP712Storage storage $ = _getEIP712Storage();\n return $._name;\n }\n\n /**\n * @dev The version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712Version() internal view virtual returns (string memory) {\n EIP712Storage storage $ = _getEIP712Storage();\n return $._version;\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: In previous versions this function was virtual. In this version you should override `_EIP712Name` instead.\n */\n function _EIP712NameHash() internal view returns (bytes32) {\n EIP712Storage storage $ = _getEIP712Storage();\n string memory name = _EIP712Name();\n if (bytes(name).length > 0) {\n return keccak256(bytes(name));\n } else {\n // If the name is empty, the contract may have been upgraded without initializing the new storage.\n // We return the name hash in storage if non-zero, otherwise we assume the name is empty by design.\n bytes32 hashedName = $._hashedName;\n if (hashedName != 0) {\n return hashedName;\n } else {\n return keccak256(\"\");\n }\n }\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: In previous versions this function was virtual. In this version you should override `_EIP712Version` instead.\n */\n function _EIP712VersionHash() internal view returns (bytes32) {\n EIP712Storage storage $ = _getEIP712Storage();\n string memory version = _EIP712Version();\n if (bytes(version).length > 0) {\n return keccak256(bytes(version));\n } else {\n // If the version is empty, the contract may have been upgraded without initializing the new storage.\n // We return the version hash in storage if non-zero, otherwise we assume the version is empty by design.\n bytes32 hashedVersion = $._hashedVersion;\n if (hashedVersion != 0) {\n return hashedVersion;\n } else {\n return keccak256(\"\");\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Multicall.sol)\n\npragma solidity ^0.8.20;\n\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\nimport {ContextUpgradeable} from \"./ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides a function to batch together multiple calls in a single external call.\n *\n * Consider any assumption about calldata validation performed by the sender may be violated if it's not especially\n * careful about sending transactions invoking {multicall}. For example, a relay address that filters function\n * selectors won't filter calls nested within a {multicall} operation.\n *\n * NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {_msgSender}).\n * If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data`\n * to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of\n * {_msgSender} are not propagated to subcalls.\n */\nabstract contract MulticallUpgradeable is Initializable, ContextUpgradeable {\n function __Multicall_init() internal onlyInitializing {\n }\n\n function __Multicall_init_unchained() internal onlyInitializing {\n }\n /**\n * @dev Receives and executes a batch of function calls on this contract.\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\n function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {\n bytes memory context = msg.sender == _msgSender()\n ? new bytes(0)\n : msg.data[msg.data.length - _contextSuffixLength():];\n\n results = new bytes[](data.length);\n for (uint256 i = 0; i < data.length; i++) {\n results[i] = Address.functionDelegateCall(address(this), bytes.concat(data[i], context));\n }\n return results;\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract PausableUpgradeable is Initializable, ContextUpgradeable {\n /// @custom:storage-location erc7201:openzeppelin.storage.Pausable\n struct PausableStorage {\n bool _paused;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Pausable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300;\n\n function _getPausableStorage() private pure returns (PausableStorage storage $) {\n assembly {\n $.slot := PausableStorageLocation\n }\n }\n\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n /**\n * @dev The operation failed because the contract is paused.\n */\n error EnforcedPause();\n\n /**\n * @dev The operation failed because the contract is not paused.\n */\n error ExpectedPause();\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n function __Pausable_init() internal onlyInitializing {\n __Pausable_init_unchained();\n }\n\n function __Pausable_init_unchained() internal onlyInitializing {\n PausableStorage storage $ = _getPausableStorage();\n $._paused = false;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n _requireNotPaused();\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n _requirePaused();\n _;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n PausableStorage storage $ = _getPausableStorage();\n return $._paused;\n }\n\n /**\n * @dev Throws if the contract is paused.\n */\n function _requireNotPaused() internal view virtual {\n if (paused()) {\n revert EnforcedPause();\n }\n }\n\n /**\n * @dev Throws if the contract is not paused.\n */\n function _requirePaused() internal view virtual {\n if (!paused()) {\n revert ExpectedPause();\n }\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n PausableStorage storage $ = _getPausableStorage();\n $._paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n PausableStorage storage $ = _getPausableStorage();\n $._paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC5267.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\n\npragma solidity ^0.8.20;\n\ninterface IERC5267 {\n /**\n * @dev MAY be emitted to signal that the domain could have changed.\n */\n event EIP712DomainChanged();\n\n /**\n * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n * signature.\n */\n function eip712Domain()\n external\n view\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n );\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n */\n function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError, bytes32) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\n\npragma solidity ^0.8.20;\n\nimport {Strings} from \"../Strings.sol\";\n\n/**\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n *\n * The library provides methods for generating a hash of a message that conforms to the\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n * specifications.\n */\nlibrary MessageHashUtils {\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing a bytes32 `messageHash` with\n * `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n * keccak256, although any bytes32 value can be safely used because the final digest will\n * be re-hashed.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, \"\\x19Ethereum Signed Message:\\n32\") // 32 is the bytes-length of messageHash\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\n }\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing an arbitrary `message` with\n * `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\n return\n keccak256(bytes.concat(\"\\x19Ethereum Signed Message:\\n\", bytes(Strings.toString(message.length)), message));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x00` (data with intended validator).\n *\n * The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n * `validator` address. Then hashing the result.\n *\n * See {ECDSA-recover}.\n */\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(hex\"19_00\", validator, data));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n *\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n * `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n *\n * See {ECDSA-recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, hex\"19_01\")\n mstore(add(ptr, 0x02), domainSeparator)\n mstore(add(ptr, 0x22), structHash)\n digest := keccak256(ptr, 0x42)\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/Math.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Muldiv operation overflow.\n */\n error MathOverflowedMulDiv();\n\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n return a / b;\n }\n\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (denominator <= prod1) {\n revert MathOverflowedMulDiv();\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/SignedMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Strings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n" + }, + "contracts/DisputeManager.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphToken } from \"@graphprotocol/contracts/contracts/token/IGraphToken.sol\";\nimport { IHorizonStaking } from \"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\";\nimport { IDisputeManager } from \"./interfaces/IDisputeManager.sol\";\nimport { ISubgraphService } from \"./interfaces/ISubgraphService.sol\";\n\nimport { Math } from \"@openzeppelin/contracts/utils/math/Math.sol\";\nimport { TokenUtils } from \"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\";\nimport { PPMMath } from \"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\";\nimport { MathUtils } from \"@graphprotocol/horizon/contracts/libraries/MathUtils.sol\";\nimport { Allocation } from \"./libraries/Allocation.sol\";\nimport { Attestation } from \"./libraries/Attestation.sol\";\n\nimport { OwnableUpgradeable } from \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport { Initializable } from \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport { GraphDirectory } from \"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\";\nimport { DisputeManagerV1Storage } from \"./DisputeManagerStorage.sol\";\nimport { AttestationManager } from \"./utilities/AttestationManager.sol\";\n\n/**\n * @title DisputeManager\n * @notice Provides a way to permissionlessly create disputes for incorrect behavior in the Subgraph Service.\n *\n * There are two types of disputes that can be created: Query disputes and Indexing disputes.\n *\n * Query Disputes:\n * Graph nodes receive queries and return responses with signed receipts called attestations.\n * An attestation can be disputed if the consumer thinks the query response was invalid.\n * Indexers use the derived private key for an allocation to sign attestations.\n *\n * Indexing Disputes:\n * Indexers present a Proof of Indexing (POI) when they close allocations to prove\n * they were indexing a subgraph. The Staking contract emits that proof with the format\n * keccak256(indexer.address, POI).\n * Any fisherman can dispute the validity of a POI by submitting a dispute to this contract\n * along with a deposit.\n *\n * Arbitration:\n * Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated\n * to a EOA or DAO.\n * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\n */\ncontract DisputeManager is\n Initializable,\n OwnableUpgradeable,\n GraphDirectory,\n AttestationManager,\n DisputeManagerV1Storage,\n IDisputeManager\n{\n using TokenUtils for IGraphToken;\n using PPMMath for uint256;\n\n // -- Constants --\n\n // Maximum value for fisherman reward cut in PPM\n uint32 public constant MAX_FISHERMAN_REWARD_CUT = 500000;\n\n // -- Modifiers --\n\n /**\n * @notice Check if the caller is the arbitrator.\n */\n modifier onlyArbitrator() {\n require(msg.sender == arbitrator, DisputeManagerNotArbitrator());\n _;\n }\n\n /**\n * @notice Check if the dispute exists and is pending.\n * @param disputeId The dispute Id\n */\n modifier onlyPendingDispute(bytes32 disputeId) {\n require(isDisputeCreated(disputeId), DisputeManagerInvalidDispute(disputeId));\n require(\n disputes[disputeId].status == IDisputeManager.DisputeStatus.Pending,\n DisputeManagerDisputeNotPending(disputes[disputeId].status)\n );\n _;\n }\n\n /**\n * @notice Check if the caller is the fisherman of the dispute.\n * @param disputeId The dispute Id\n */\n modifier onlyFisherman(bytes32 disputeId) {\n require(isDisputeCreated(disputeId), DisputeManagerInvalidDispute(disputeId));\n require(msg.sender == disputes[disputeId].fisherman, DisputeManagerNotFisherman());\n _;\n }\n\n /**\n * @notice Contract constructor\n * @param controller Address of the controller\n */\n constructor(address controller) GraphDirectory(controller) {\n _disableInitializers();\n }\n\n /**\n * @notice Initialize this contract.\n * @param arbitrator Arbitrator role\n * @param disputePeriod Dispute period in seconds\n * @param disputeDeposit Deposit required to create a Dispute\n * @param fishermanRewardCut_ Percent of slashed funds for fisherman (ppm)\n * @param maxSlashingCut_ Maximum percentage of indexer stake that can be slashed (ppm)\n */\n function initialize(\n address arbitrator,\n uint64 disputePeriod,\n uint256 disputeDeposit,\n uint32 fishermanRewardCut_,\n uint32 maxSlashingCut_\n ) external initializer {\n __Ownable_init(msg.sender);\n __AttestationManager_init();\n\n _setArbitrator(arbitrator);\n _setDisputePeriod(disputePeriod);\n _setDisputeDeposit(disputeDeposit);\n _setFishermanRewardCut(fishermanRewardCut_);\n _setMaxSlashingCut(maxSlashingCut_);\n }\n\n /**\n * @notice Create an indexing dispute for the arbitrator to resolve.\n * The disputes are created in reference to an allocationId and specifically\n * a POI for that allocation.\n * This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens.\n *\n * Requirements:\n * - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n * of tokens from their balance.\n *\n * @param allocationId The allocation to dispute\n * @param poi The Proof of Indexing (POI) being disputed\n */\n function createIndexingDispute(address allocationId, bytes32 poi) external override returns (bytes32) {\n // Get funds from fisherman\n _pullFishermanDeposit();\n\n // Create a dispute\n return _createIndexingDisputeWithAllocation(msg.sender, disputeDeposit, allocationId, poi);\n }\n\n /**\n * @notice Create a query dispute for the arbitrator to resolve.\n * This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens.\n *\n * * Requirements:\n * - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n * of tokens from their balance.\n *\n * @param attestationData Attestation bytes submitted by the fisherman\n */\n function createQueryDispute(bytes calldata attestationData) external override returns (bytes32) {\n // Get funds from fisherman\n _pullFishermanDeposit();\n\n // Create a dispute\n return\n _createQueryDisputeWithAttestation(\n msg.sender,\n disputeDeposit,\n Attestation.parse(attestationData),\n attestationData\n );\n }\n\n /**\n * @notice Create query disputes for two conflicting attestations.\n * A conflicting attestation is a proof presented by two different indexers\n * where for the same request on a subgraph the response is different.\n * For this type of dispute the fisherman is not required to present a deposit\n * as one of the attestation is considered to be right.\n * Two linked disputes will be created and if the arbitrator resolve one, the other\n * one will be automatically resolved.\n * @param attestationData1 First attestation data submitted\n * @param attestationData2 Second attestation data submitted\n * @return DisputeId1, DisputeId2\n */\n function createQueryDisputeConflict(\n bytes calldata attestationData1,\n bytes calldata attestationData2\n ) external override returns (bytes32, bytes32) {\n address fisherman = msg.sender;\n\n // Parse each attestation\n Attestation.State memory attestation1 = Attestation.parse(attestationData1);\n Attestation.State memory attestation2 = Attestation.parse(attestationData2);\n\n // Test that attestations are conflicting\n require(\n Attestation.areConflicting(attestation1, attestation2),\n DisputeManagerNonConflictingAttestations(\n attestation1.requestCID,\n attestation1.responseCID,\n attestation1.subgraphDeploymentId,\n attestation2.requestCID,\n attestation2.responseCID,\n attestation2.subgraphDeploymentId\n )\n );\n\n // Create the disputes\n // The deposit is zero for conflicting attestations\n bytes32 dId1 = _createQueryDisputeWithAttestation(fisherman, 0, attestation1, attestationData1);\n bytes32 dId2 = _createQueryDisputeWithAttestation(fisherman, 0, attestation2, attestationData2);\n\n // Store the linked disputes to be resolved\n disputes[dId1].relatedDisputeId = dId2;\n disputes[dId2].relatedDisputeId = dId1;\n\n // Emit event that links the two created disputes\n emit DisputeLinked(dId1, dId2);\n\n return (dId1, dId2);\n }\n\n /**\n * @notice The arbitrator accepts a dispute as being valid.\n * This function will revert if the indexer is not slashable, whether because it does not have\n * any stake available or the slashing percentage is configured to be zero. In those cases\n * a dispute must be resolved using drawDispute or rejectDispute.\n * @dev Accept a dispute with Id `disputeId`\n * @param disputeId Id of the dispute to be accepted\n * @param tokensSlash Amount of tokens to slash from the indexer\n */\n function acceptDispute(\n bytes32 disputeId,\n uint256 tokensSlash\n ) external override onlyArbitrator onlyPendingDispute(disputeId) {\n Dispute storage dispute = disputes[disputeId];\n\n // store the dispute status\n dispute.status = IDisputeManager.DisputeStatus.Accepted;\n\n // Slash\n uint256 tokensToReward = _slashIndexer(dispute.indexer, tokensSlash, dispute.stakeSnapshot);\n\n // Give the fisherman their reward and their deposit back\n _graphToken().pushTokens(dispute.fisherman, tokensToReward + dispute.deposit);\n\n if (_isDisputeInConflict(dispute)) {\n rejectDispute(dispute.relatedDisputeId);\n }\n\n emit DisputeAccepted(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit + tokensToReward);\n }\n\n /**\n * @notice The arbitrator draws dispute.\n * @dev Ignore a dispute with Id `disputeId`\n * @param disputeId Id of the dispute to be disregarded\n */\n function drawDispute(bytes32 disputeId) external override onlyArbitrator onlyPendingDispute(disputeId) {\n Dispute storage dispute = disputes[disputeId];\n\n // Return deposit to the fisherman if any\n if (dispute.deposit > 0) {\n _graphToken().pushTokens(dispute.fisherman, dispute.deposit);\n }\n\n // resolve related dispute if any\n _drawDisputeInConflict(dispute);\n\n // store dispute status\n dispute.status = IDisputeManager.DisputeStatus.Drawn;\n\n emit DisputeDrawn(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit);\n }\n\n /**\n * @notice Once the dispute period ends, if the dispute status remains Pending,\n * the fisherman can cancel the dispute and get back their initial deposit.\n * @dev Cancel a dispute with Id `disputeId`\n * @param disputeId Id of the dispute to be cancelled\n */\n function cancelDispute(bytes32 disputeId) external override onlyFisherman(disputeId) onlyPendingDispute(disputeId) {\n Dispute storage dispute = disputes[disputeId];\n\n // Check if dispute period has finished\n require(dispute.createdAt + disputePeriod < block.timestamp, DisputeManagerDisputePeriodNotFinished());\n\n // Return deposit to the fisherman if any\n if (dispute.deposit > 0) {\n _graphToken().pushTokens(dispute.fisherman, dispute.deposit);\n }\n\n // resolve related dispute if any\n _cancelDisputeInConflict(dispute);\n\n // store dispute status\n dispute.status = IDisputeManager.DisputeStatus.Cancelled;\n\n emit DisputeCancelled(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit);\n }\n\n /**\n * @notice Set the arbitrator address.\n * @dev Update the arbitrator to `_arbitrator`\n * @param arbitrator The address of the arbitration contract or party\n */\n function setArbitrator(address arbitrator) external override onlyOwner {\n _setArbitrator(arbitrator);\n }\n\n /**\n * @notice Set the dispute period.\n * @dev Update the dispute period to `_disputePeriod` in seconds\n * @param disputePeriod Dispute period in seconds\n */\n function setDisputePeriod(uint64 disputePeriod) external override onlyOwner {\n _setDisputePeriod(disputePeriod);\n }\n\n /**\n * @notice Set the dispute deposit required to create a dispute.\n * @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens\n * @param disputeDeposit The dispute deposit in Graph Tokens\n */\n function setDisputeDeposit(uint256 disputeDeposit) external override onlyOwner {\n _setDisputeDeposit(disputeDeposit);\n }\n\n /**\n * @notice Set the percent reward that the fisherman gets when slashing occurs.\n * @dev Update the reward percentage to `_percentage`\n * @param fishermanRewardCut_ Reward as a percentage of indexer stake\n */\n function setFishermanRewardCut(uint32 fishermanRewardCut_) external override onlyOwner {\n _setFishermanRewardCut(fishermanRewardCut_);\n }\n\n /**\n * @notice Set the maximum percentage that can be used for slashing indexers.\n * @param maxSlashingCut_ Max percentage slashing for disputes\n */\n function setMaxSlashingCut(uint32 maxSlashingCut_) external override onlyOwner {\n _setMaxSlashingCut(maxSlashingCut_);\n }\n\n /**\n * @notice Set the subgraph service address.\n * @dev Update the subgraph service to `_subgraphService`\n * @param subgraphService The address of the subgraph service contract\n */\n function setSubgraphService(address subgraphService) external override onlyOwner {\n _setSubgraphService(subgraphService);\n }\n\n /**\n * @notice Get the message hash that a indexer used to sign the receipt.\n * Encodes a receipt using a domain separator, as described on\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\n * @dev Return the message hash used to sign the receipt\n * @param receipt Receipt returned by indexer and submitted by fisherman\n * @return Message hash used to sign the receipt\n */\n function encodeReceipt(Attestation.Receipt memory receipt) external view override returns (bytes32) {\n return _encodeReceipt(receipt);\n }\n\n /**\n * @notice Get the verifier cut.\n * @return Verifier cut in percentage (ppm)\n */\n function getVerifierCut() external view override returns (uint32) {\n return fishermanRewardCut;\n }\n\n /**\n * @notice Get the dispute period.\n * @return Dispute period in seconds\n */\n function getDisputePeriod() external view override returns (uint64) {\n return disputePeriod;\n }\n\n /**\n * @notice Get the stake snapshot for an indexer.\n * @param indexer The indexer address\n */\n function getStakeSnapshot(address indexer) external view override returns (uint256) {\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService));\n return _getStakeSnapshot(indexer, provision.tokens);\n }\n\n /**\n * @notice Checks if two attestations are conflicting.\n * @param attestation1 The first attestation\n * @param attestation2 The second attestation\n */\n function areConflictingAttestations(\n Attestation.State memory attestation1,\n Attestation.State memory attestation2\n ) external pure override returns (bool) {\n return Attestation.areConflicting(attestation1, attestation2);\n }\n\n /**\n * @notice The arbitrator rejects a dispute as being invalid.\n * @dev Reject a dispute with Id `disputeId`\n * @param disputeId Id of the dispute to be rejected\n */\n function rejectDispute(bytes32 disputeId) public override onlyArbitrator onlyPendingDispute(disputeId) {\n Dispute storage dispute = disputes[disputeId];\n\n // store dispute status\n dispute.status = IDisputeManager.DisputeStatus.Rejected;\n\n // For conflicting disputes, the related dispute must be accepted\n require(\n !_isDisputeInConflict(dispute),\n DisputeManagerMustAcceptRelatedDispute(disputeId, dispute.relatedDisputeId)\n );\n\n // Burn the fisherman's deposit\n _graphToken().burnTokens(dispute.deposit);\n\n emit DisputeRejected(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit);\n }\n\n /**\n * @notice Returns the indexer that signed an attestation.\n * @param attestation Attestation\n * @return indexer address\n */\n function getAttestationIndexer(Attestation.State memory attestation) public view returns (address) {\n // Get attestation signer. Indexers signs with the allocationId\n address allocationId = _recoverSigner(attestation);\n\n Allocation.State memory alloc = subgraphService.getAllocation(allocationId);\n require(alloc.indexer != address(0), DisputeManagerIndexerNotFound(allocationId));\n require(\n alloc.subgraphDeploymentId == attestation.subgraphDeploymentId,\n DisputeManagerNonMatchingSubgraphDeployment(alloc.subgraphDeploymentId, attestation.subgraphDeploymentId)\n );\n return alloc.indexer;\n }\n\n /**\n * @notice Return whether a dispute exists or not.\n * @dev Return if dispute with Id `disputeId` exists\n * @param disputeId True if dispute already exists\n */\n function isDisputeCreated(bytes32 disputeId) public view override returns (bool) {\n return disputes[disputeId].status != DisputeStatus.Null;\n }\n\n /**\n * @notice Create a query dispute passing the parsed attestation.\n * To be used in createQueryDispute() and createQueryDisputeConflict()\n * to avoid calling parseAttestation() multiple times\n * `attestationData` is only passed to be emitted\n * @param _fisherman Creator of dispute\n * @param _deposit Amount of tokens staked as deposit\n * @param _attestation Attestation struct parsed from bytes\n * @param _attestationData Attestation bytes submitted by the fisherman\n * @return DisputeId\n */\n function _createQueryDisputeWithAttestation(\n address _fisherman,\n uint256 _deposit,\n Attestation.State memory _attestation,\n bytes memory _attestationData\n ) private returns (bytes32) {\n // Get the indexer that signed the attestation\n address indexer = getAttestationIndexer(_attestation);\n\n // The indexer is disputable\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService));\n require(provision.tokens != 0, DisputeManagerZeroTokens());\n\n // Create a disputeId\n bytes32 disputeId = keccak256(\n abi.encodePacked(\n _attestation.requestCID,\n _attestation.responseCID,\n _attestation.subgraphDeploymentId,\n indexer,\n _fisherman\n )\n );\n\n // Only one dispute for a (indexer, subgraphDeploymentId) at a time\n require(!isDisputeCreated(disputeId), DisputeManagerDisputeAlreadyCreated(disputeId));\n\n // Store dispute\n uint256 stakeSnapshot = _getStakeSnapshot(indexer, provision.tokens);\n disputes[disputeId] = Dispute(\n indexer,\n _fisherman,\n _deposit,\n 0, // no related dispute,\n DisputeType.QueryDispute,\n IDisputeManager.DisputeStatus.Pending,\n block.timestamp,\n stakeSnapshot\n );\n\n emit QueryDisputeCreated(\n disputeId,\n indexer,\n _fisherman,\n _deposit,\n _attestation.subgraphDeploymentId,\n _attestationData,\n stakeSnapshot\n );\n\n return disputeId;\n }\n\n /**\n * @notice Create indexing dispute internal function.\n * @param _fisherman The fisherman creating the dispute\n * @param _deposit Amount of tokens staked as deposit\n * @param _allocationId Allocation disputed\n * @param _poi The POI being disputed\n */\n function _createIndexingDisputeWithAllocation(\n address _fisherman,\n uint256 _deposit,\n address _allocationId,\n bytes32 _poi\n ) private returns (bytes32) {\n // Create a disputeId\n bytes32 disputeId = keccak256(abi.encodePacked(_allocationId, _poi));\n\n // Only one dispute for an allocationId at a time\n require(!isDisputeCreated(disputeId), DisputeManagerDisputeAlreadyCreated(disputeId));\n\n // Allocation must exist\n Allocation.State memory alloc = subgraphService.getAllocation(_allocationId);\n address indexer = alloc.indexer;\n require(indexer != address(0), DisputeManagerIndexerNotFound(_allocationId));\n\n // The indexer must be disputable\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService));\n require(provision.tokens != 0, DisputeManagerZeroTokens());\n\n // Store dispute\n uint256 stakeSnapshot = _getStakeSnapshot(indexer, provision.tokens);\n disputes[disputeId] = Dispute(\n alloc.indexer,\n _fisherman,\n _deposit,\n 0,\n DisputeType.IndexingDispute,\n IDisputeManager.DisputeStatus.Pending,\n block.timestamp,\n stakeSnapshot\n );\n\n emit IndexingDisputeCreated(disputeId, alloc.indexer, _fisherman, _deposit, _allocationId, _poi, stakeSnapshot);\n\n return disputeId;\n }\n\n /**\n * @notice Draw the conflicting dispute if there is any for the one passed to this function.\n * @param _dispute Dispute\n * @return True if resolved\n */\n function _drawDisputeInConflict(Dispute memory _dispute) private returns (bool) {\n if (_isDisputeInConflict(_dispute)) {\n bytes32 relatedDisputeId = _dispute.relatedDisputeId;\n Dispute storage relatedDispute = disputes[relatedDisputeId];\n relatedDispute.status = IDisputeManager.DisputeStatus.Drawn;\n return true;\n }\n return false;\n }\n\n /**\n * @notice Cancel the conflicting dispute if there is any for the one passed to this function.\n * @param _dispute Dispute\n * @return True if cancelled\n */\n function _cancelDisputeInConflict(Dispute memory _dispute) private returns (bool) {\n if (_isDisputeInConflict(_dispute)) {\n bytes32 relatedDisputeId = _dispute.relatedDisputeId;\n Dispute storage relatedDispute = disputes[relatedDisputeId];\n relatedDispute.status = IDisputeManager.DisputeStatus.Cancelled;\n return true;\n }\n return false;\n }\n\n /**\n * @notice Pull `disputeDeposit` from fisherman account.\n */\n function _pullFishermanDeposit() private {\n // Transfer tokens to deposit from fisherman to this contract\n _graphToken().pullTokens(msg.sender, disputeDeposit);\n }\n\n /**\n * @notice Make the subgraph service contract slash the indexer and reward the fisherman.\n * Give the fisherman a reward equal to the fishermanRewardPercentage of slashed amount\n * @param _indexer Address of the indexer\n * @param _tokensSlash Amount of tokens to slash from the indexer\n * @param _tokensStakeSnapshot Snapshot of the indexer's stake at the time of the dispute creation\n */\n function _slashIndexer(\n address _indexer,\n uint256 _tokensSlash,\n uint256 _tokensStakeSnapshot\n ) private returns (uint256) {\n // Get slashable amount for indexer\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_indexer, address(subgraphService));\n\n // Ensure slash amount is within the cap\n uint256 maxTokensSlash = _tokensStakeSnapshot.mulPPM(maxSlashingCut);\n require(\n _tokensSlash != 0 && _tokensSlash <= maxTokensSlash,\n DisputeManagerInvalidTokensSlash(_tokensSlash, maxTokensSlash)\n );\n\n // Rewards amount can only be extracted from service provider tokens so\n // we grab the minimum between the slash amount and indexer's tokens\n uint256 maxRewardableTokens = Math.min(_tokensSlash, provision.tokens);\n uint256 tokensRewards = uint256(fishermanRewardCut).mulPPM(maxRewardableTokens);\n\n subgraphService.slash(_indexer, abi.encode(_tokensSlash, tokensRewards));\n return tokensRewards;\n }\n\n /**\n * @notice Internal: Set the arbitrator address.\n * @dev Update the arbitrator to `_arbitrator`\n * @param _arbitrator The address of the arbitration contract or party\n */\n function _setArbitrator(address _arbitrator) private {\n require(_arbitrator != address(0), DisputeManagerInvalidZeroAddress());\n arbitrator = _arbitrator;\n emit ArbitratorSet(_arbitrator);\n }\n\n /**\n * @notice Internal: Set the dispute period.\n * @dev Update the dispute period to `_disputePeriod` in seconds\n * @param _disputePeriod Dispute period in seconds\n */\n function _setDisputePeriod(uint64 _disputePeriod) private {\n require(_disputePeriod != 0, DisputeManagerDisputePeriodZero());\n disputePeriod = _disputePeriod;\n emit DisputePeriodSet(_disputePeriod);\n }\n\n /**\n * @notice Internal: Set the dispute deposit required to create a dispute.\n * @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens\n * @param _disputeDeposit The dispute deposit in Graph Tokens\n */\n function _setDisputeDeposit(uint256 _disputeDeposit) private {\n require(_disputeDeposit != 0, DisputeManagerInvalidDisputeDeposit(_disputeDeposit));\n disputeDeposit = _disputeDeposit;\n emit DisputeDepositSet(_disputeDeposit);\n }\n\n /**\n * @notice Internal: Set the percent reward that the fisherman gets when slashing occurs.\n * @dev Update the reward percentage to `_percentage`\n * @param _fishermanRewardCut Reward as a percentage of indexer stake\n */\n function _setFishermanRewardCut(uint32 _fishermanRewardCut) private {\n require(\n _fishermanRewardCut <= MAX_FISHERMAN_REWARD_CUT,\n DisputeManagerInvalidFishermanReward(_fishermanRewardCut)\n );\n fishermanRewardCut = _fishermanRewardCut;\n emit FishermanRewardCutSet(_fishermanRewardCut);\n }\n\n /**\n * @notice Internal: Set the maximum percentage that can be used for slashing indexers.\n * @param _maxSlashingCut Max percentage slashing for disputes\n */\n function _setMaxSlashingCut(uint32 _maxSlashingCut) private {\n // Must be within 0% to 100% (inclusive)\n require(PPMMath.isValidPPM(_maxSlashingCut), DisputeManagerInvalidMaxSlashingCut(_maxSlashingCut));\n maxSlashingCut = _maxSlashingCut;\n emit MaxSlashingCutSet(maxSlashingCut);\n }\n\n /**\n * @notice Internal: Set the subgraph service address.\n * @dev Update the subgraph service to `_subgraphService`\n * @param _subgraphService The address of the subgraph service contract\n */\n function _setSubgraphService(address _subgraphService) private {\n require(_subgraphService != address(0), DisputeManagerInvalidZeroAddress());\n subgraphService = ISubgraphService(_subgraphService);\n emit SubgraphServiceSet(_subgraphService);\n }\n\n /**\n * @notice Returns whether the dispute is for a conflicting attestation or not.\n * @param _dispute Dispute\n * @return True conflicting attestation dispute\n */\n function _isDisputeInConflict(Dispute memory _dispute) private view returns (bool) {\n bytes32 relatedId = _dispute.relatedDisputeId;\n // this is so the check returns false when rejecting the related dispute.\n return relatedId != 0 && disputes[relatedId].status == IDisputeManager.DisputeStatus.Pending;\n }\n\n /**\n * @notice Get the total stake snapshot for and indexer.\n * @dev A few considerations:\n * - We include both indexer and delegators stake.\n * - Thawing stake is not excluded from the snapshot.\n * - Delegators stake is capped at the delegation ratio to prevent delegators from inflating the snapshot\n * to increase the indexer slash amount.\n * @param _indexer Indexer address\n * @param _indexerStake Indexer's stake\n * @return Total stake snapshot\n */\n function _getStakeSnapshot(address _indexer, uint256 _indexerStake) private view returns (uint256) {\n uint256 delegatorsStake = _graphStaking().getDelegationPool(_indexer, address(subgraphService)).tokens;\n uint256 delegatorsStakeMax = _indexerStake * uint256(subgraphService.getDelegationRatio());\n uint256 stakeSnapshot = _indexerStake + MathUtils.min(delegatorsStake, delegatorsStakeMax);\n return stakeSnapshot;\n }\n}\n" + }, + "contracts/DisputeManagerStorage.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IDisputeManager } from \"./interfaces/IDisputeManager.sol\";\nimport { ISubgraphService } from \"./interfaces/ISubgraphService.sol\";\n\nabstract contract DisputeManagerV1Storage {\n /// @notice The Subgraph Service contract address\n ISubgraphService public subgraphService;\n\n /// @notice The arbitrator is solely in control of arbitrating disputes\n address public arbitrator;\n\n /// @notice dispute period in seconds\n uint64 public disputePeriod;\n\n /// @notice Deposit required to create a Dispute\n uint256 public disputeDeposit;\n\n /// @notice Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM.\n uint32 public fishermanRewardCut;\n\n /// @notice Maximum percentage of indexer stake that can be slashed on a dispute. In PPM.\n uint32 public maxSlashingCut;\n\n /// @notice List of disputes created\n mapping(bytes32 disputeId => IDisputeManager.Dispute dispute) public disputes;\n}\n" + }, + "contracts/interfaces/IDisputeManager.sol": { + "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { Attestation } from \"../libraries/Attestation.sol\";\n\ninterface IDisputeManager {\n /// @notice Types of disputes that can be created\n enum DisputeType {\n Null,\n IndexingDispute,\n QueryDispute\n }\n\n /// @notice Status of a dispute\n enum DisputeStatus {\n Null,\n Accepted,\n Rejected,\n Drawn,\n Pending,\n Cancelled\n }\n\n /// @notice Disputes contain info necessary for the Arbitrator to verify and resolve\n struct Dispute {\n // Indexer that is being disputed\n address indexer;\n // Fisherman that created the dispute\n address fisherman;\n // Amount of tokens deposited by the fisherman\n uint256 deposit;\n // Link to a related dispute, used when creating dispute via conflicting attestations\n bytes32 relatedDisputeId;\n // Type of dispute\n DisputeType disputeType;\n // Status of the dispute\n DisputeStatus status;\n // Timestamp when the dispute was created\n uint256 createdAt;\n // Stake snapshot of the indexer at the time of the dispute (includes delegation up to the delegation ratio)\n uint256 stakeSnapshot;\n }\n\n /**\n * @notice Emitted when arbitrator is set.\n * @param arbitrator The address of the arbitrator.\n */\n event ArbitratorSet(address indexed arbitrator);\n\n /**\n * @notice Emitted when dispute period is set.\n * @param disputePeriod The dispute period in seconds.\n */\n event DisputePeriodSet(uint64 disputePeriod);\n\n /**\n * @notice Emitted when dispute deposit is set.\n * @param disputeDeposit The dispute deposit required to create a dispute.\n */\n event DisputeDepositSet(uint256 disputeDeposit);\n\n /**\n * @notice Emitted when max slashing cut is set.\n * @param maxSlashingCut The maximum slashing cut that can be set.\n */\n event MaxSlashingCutSet(uint32 maxSlashingCut);\n\n /**\n * @notice Emitted when fisherman reward cut is set.\n * @param fishermanRewardCut The fisherman reward cut.\n */\n event FishermanRewardCutSet(uint32 fishermanRewardCut);\n\n /**\n * @notice Emitted when subgraph service is set.\n * @param subgraphService The address of the subgraph service.\n */\n event SubgraphServiceSet(address indexed subgraphService);\n\n /**\n * @dev Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer`\n * by `fisherman`.\n * The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted.\n */\n event QueryDisputeCreated(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens,\n bytes32 subgraphDeploymentId,\n bytes attestation,\n uint256 stakeSnapshot\n );\n\n /**\n * @dev Emitted when an indexing dispute is created for `allocationId` and `indexer`\n * by `fisherman`.\n * The event emits the amount of `tokens` deposited by the fisherman.\n */\n event IndexingDisputeCreated(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens,\n address allocationId,\n bytes32 poi,\n uint256 stakeSnapshot\n );\n\n /**\n * @dev Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`.\n * The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward.\n */\n event DisputeAccepted(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens\n );\n\n /**\n * @dev Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`.\n * The event emits the amount `tokens` burned from the fisherman deposit.\n */\n event DisputeRejected(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens\n );\n\n /**\n * @dev Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`.\n * The event emits the amount `tokens` used as deposit and returned to the fisherman.\n */\n event DisputeDrawn(bytes32 indexed disputeId, address indexed indexer, address indexed fisherman, uint256 tokens);\n\n /**\n * @dev Emitted when two disputes are in conflict to link them.\n * This event will be emitted after each DisputeCreated event is emitted\n * for each of the individual disputes.\n */\n event DisputeLinked(bytes32 indexed disputeId1, bytes32 indexed disputeId2);\n\n /**\n * @dev Emitted when a dispute is cancelled by the fisherman.\n * The event emits the amount `tokens` returned to the fisherman.\n */\n event DisputeCancelled(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens\n );\n\n // -- Errors --\n\n error DisputeManagerNotArbitrator();\n error DisputeManagerNotFisherman();\n error DisputeManagerInvalidZeroAddress();\n error DisputeManagerDisputePeriodZero();\n error DisputeManagerZeroTokens();\n error DisputeManagerInvalidDispute(bytes32 disputeId);\n error DisputeManagerInvalidDisputeDeposit(uint256 disputeDeposit);\n error DisputeManagerInvalidFishermanReward(uint32 cut);\n error DisputeManagerInvalidMaxSlashingCut(uint32 maxSlashingCut);\n error DisputeManagerInvalidTokensSlash(uint256 tokensSlash, uint256 maxTokensSlash);\n error DisputeManagerDisputeNotPending(IDisputeManager.DisputeStatus status);\n error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId);\n error DisputeManagerDisputePeriodNotFinished();\n error DisputeManagerMustAcceptRelatedDispute(bytes32 disputeId, bytes32 relatedDisputeId);\n error DisputeManagerIndexerNotFound(address allocationId);\n error DisputeManagerNonMatchingSubgraphDeployment(bytes32 subgraphDeploymentId1, bytes32 subgraphDeploymentId2);\n error DisputeManagerNonConflictingAttestations(\n bytes32 requestCID1,\n bytes32 responseCID1,\n bytes32 subgraphDeploymentId1,\n bytes32 requestCID2,\n bytes32 responseCID2,\n bytes32 subgraphDeploymentId2\n );\n\n function setDisputePeriod(uint64 disputePeriod) external;\n\n function setArbitrator(address arbitrator) external;\n\n function setDisputeDeposit(uint256 disputeDeposit) external;\n\n function setFishermanRewardCut(uint32 cut) external;\n\n function setMaxSlashingCut(uint32 maxCut) external;\n\n // -- Dispute --\n\n function createQueryDispute(bytes calldata attestationData) external returns (bytes32);\n\n function createQueryDisputeConflict(\n bytes calldata attestationData1,\n bytes calldata attestationData2\n ) external returns (bytes32, bytes32);\n\n function createIndexingDispute(address allocationId, bytes32 poi) external returns (bytes32);\n\n function acceptDispute(bytes32 disputeId, uint256 tokensSlash) external;\n\n function rejectDispute(bytes32 disputeId) external;\n\n function drawDispute(bytes32 disputeId) external;\n\n function cancelDispute(bytes32 disputeId) external;\n\n function setSubgraphService(address subgraphService) external;\n\n // -- Getters --\n\n function getVerifierCut() external view returns (uint32);\n\n function getDisputePeriod() external view returns (uint64);\n\n function isDisputeCreated(bytes32 disputeId) external view returns (bool);\n\n function encodeReceipt(Attestation.Receipt memory receipt) external view returns (bytes32);\n\n function getAttestationIndexer(Attestation.State memory attestation) external view returns (address);\n\n function getStakeSnapshot(address indexer) external view returns (uint256);\n\n function areConflictingAttestations(\n Attestation.State memory attestation1,\n Attestation.State memory attestation2\n ) external pure returns (bool);\n}\n" + }, + "contracts/interfaces/ISubgraphService.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataServiceFees } from \"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\";\nimport { IGraphPayments } from \"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\";\n\nimport { Allocation } from \"../libraries/Allocation.sol\";\nimport { LegacyAllocation } from \"../libraries/LegacyAllocation.sol\";\n\n/**\n * @title Interface for the {SubgraphService} contract\n * @dev This interface extends {IDataServiceFees} and {IDataService}.\n * @notice The Subgraph Service is a data service built on top of Graph Horizon that supports the use case of\n * subgraph indexing and querying. The {SubgraphService} contract implements the flows described in the Data\n * Service framework to allow indexers to register as subgraph service providers, create allocations to signal\n * their commitment to index a subgraph, and collect fees for indexing and querying services.\n */\ninterface ISubgraphService is IDataServiceFees {\n /// @notice Contains details for each indexer\n struct Indexer {\n // Timestamp when the indexer registered\n uint256 registeredAt;\n // The URL where the indexer can be reached at for queries\n string url;\n // The indexer's geo location, expressed as a geo hash\n string geoHash;\n }\n\n /**\n * @notice Emitted when a subgraph service collects query fees from Graph Payments\n * @param serviceProvider The address of the service provider\n * @param tokensCollected The amount of tokens collected\n * @param tokensCurators The amount of tokens curators receive\n */\n event QueryFeesCollected(address indexed serviceProvider, uint256 tokensCollected, uint256 tokensCurators);\n\n /**\n * @notice Emitted when the stake to fees ratio is set.\n * @param ratio The stake to fees ratio\n */\n event StakeToFeesRatioSet(uint256 ratio);\n\n /**\n * @notice Emitted when curator cuts are set\n * @param curationCut The curation cut\n */\n event CurationCutSet(uint256 curationCut);\n\n /**\n * Thrown when trying to set a curation cut that is not a valid PPM value\n * @param curationCut The curation cut value\n */\n error SubgraphServiceInvalidCurationCut(uint256 curationCut);\n\n /**\n * @notice Thrown when an indexer tries to register with an empty URL\n */\n error SubgraphServiceEmptyUrl();\n\n /**\n * @notice Thrown when an indexer tries to register with an empty geohash\n */\n error SubgraphServiceEmptyGeohash();\n\n /**\n * @notice Thrown when an indexer tries to register but they are already registered\n */\n error SubgraphServiceIndexerAlreadyRegistered();\n\n /**\n * @notice Thrown when an indexer tries to perform an operation but they are not registered\n * @param indexer The address of the indexer that is not registered\n */\n error SubgraphServiceIndexerNotRegistered(address indexer);\n\n /**\n * @notice Thrown when an indexer tries to collect fees for an unsupported payment type\n * @param paymentType The payment type that is not supported\n */\n error SubgraphServiceInvalidPaymentType(IGraphPayments.PaymentTypes paymentType);\n\n /**\n * @notice Thrown when the contract GRT balance is inconsistent with the payment amount collected\n * from Graph Payments\n * @param balanceBefore The contract GRT balance before the collection\n * @param balanceAfter The contract GRT balance after the collection\n * @param tokensDataService The amount of tokens sent to the subgraph service\n */\n error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensDataService);\n\n /**\n * @notice @notice Thrown when the service provider in the RAV does not match the expected indexer.\n * @param providedIndexer The address of the provided indexer.\n * @param expectedIndexer The address of the expected indexer.\n */\n error SubgraphServiceIndexerMismatch(address providedIndexer, address expectedIndexer);\n\n /**\n * @notice Thrown when the indexer in the allocation state does not match the expected indexer.\n * @param indexer The address of the expected indexer.\n * @param allocationId The id of the allocation.\n */\n error SubgraphServiceAllocationNotAuthorized(address indexer, address allocationId);\n\n /**\n * @notice Thrown when collecting a RAV where the RAV indexer is not the same as the allocation indexer\n * @param ravIndexer The address of the RAV indexer\n * @param allocationIndexer The address of the allocation indexer\n */\n error SubgraphServiceInvalidRAV(address ravIndexer, address allocationIndexer);\n\n /**\n * @notice Thrown when trying to force close an allocation that is not stale and the indexer is not over-allocated\n * @param allocationId The id of the allocation\n */\n error SubgraphServiceCannotForceCloseAllocation(address allocationId);\n\n /**\n * @notice Thrown when trying to force close an altruistic allocation\n * @param allocationId The id of the allocation\n */\n error SubgraphServiceAllocationIsAltruistic(address allocationId);\n\n /**\n * @notice Thrown when trying to set stake to fees ratio to zero\n */\n error SubgraphServiceInvalidZeroStakeToFeesRatio();\n\n /**\n * @notice Force close an allocation\n * @dev This function can be permissionlessly called when the allocation is stale or\n * if the indexer is over-allocated. This ensures that rewards for other allocations are\n * not diluted by an inactive allocation, and that over-allocated indexers stop accumulating\n * rewards with tokens they no longer have allocated.\n *\n * Requirements:\n * - Allocation must exist and be open\n * - Allocation must be stale or indexer must be over-allocated\n * - Allocation cannot be altruistic\n *\n * Emits a {AllocationClosed} event.\n *\n * @param allocationId The id of the allocation\n */\n function forceCloseAllocation(address allocationId) external;\n\n /**\n * @notice Change the amount of tokens in an allocation\n * @dev Requirements:\n * - The indexer must be registered\n * - The provision must be valid according to the subgraph service rules\n * - `tokens` must be different from the current allocation size\n * - The indexer must have enough available tokens to allocate if they are upsizing the allocation\n *\n * Emits a {AllocationResized} event.\n *\n * See {AllocationManager-_resizeAllocation} for more details.\n *\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param tokens The new amount of tokens in the allocation\n */\n function resizeAllocation(address indexer, address allocationId, uint256 tokens) external;\n\n /**\n * @notice Imports a legacy allocation id into the subgraph service\n * This is a governor only action that is required to prevent indexers from re-using allocation ids from the\n * legacy staking contract.\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n */\n function migrateLegacyAllocation(address indexer, address allocationId, bytes32 subgraphDeploymentId) external;\n\n /**\n * @notice Sets a pause guardian\n * @param pauseGuardian The address of the pause guardian\n * @param allowed True if the pause guardian is allowed to pause the contract, false otherwise\n */\n function setPauseGuardian(address pauseGuardian, bool allowed) external;\n\n /**\n * @notice Sets the minimum amount of provisioned tokens required to create an allocation\n * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation\n */\n function setMinimumProvisionTokens(uint256 minimumProvisionTokens) external;\n\n /**\n * @notice Sets the delegation ratio\n * @param delegationRatio The delegation ratio\n */\n function setDelegationRatio(uint32 delegationRatio) external;\n\n /**\n * @notice Sets the stake to fees ratio\n * @param stakeToFeesRatio The stake to fees ratio\n */\n function setStakeToFeesRatio(uint256 stakeToFeesRatio) external;\n\n /**\n * @notice Sets the max POI staleness\n * See {AllocationManagerV1Storage-maxPOIStaleness} for more details.\n * @param maxPOIStaleness The max POI staleness in seconds\n */\n function setMaxPOIStaleness(uint256 maxPOIStaleness) external;\n\n /**\n * @notice Sets the curators payment cut for query fees\n * @dev Emits a {CuratorCutSet} event\n * @param curationCut The curation cut for the payment type\n */\n function setCurationCut(uint256 curationCut) external;\n\n /**\n * @notice Sets the rewards destination for an indexer to receive indexing rewards\n * @dev Emits a {RewardsDestinationSet} event\n * @param rewardsDestination The address where indexing rewards should be sent\n */\n function setRewardsDestination(address rewardsDestination) external;\n\n /**\n * @notice Gets the details of an allocation\n * For legacy allocations use {getLegacyAllocation}\n * @param allocationId The id of the allocation\n */\n function getAllocation(address allocationId) external view returns (Allocation.State memory);\n\n /**\n * @notice Gets the details of a legacy allocation\n * For non-legacy allocations use {getAllocation}\n * @param allocationId The id of the allocation\n */\n function getLegacyAllocation(address allocationId) external view returns (LegacyAllocation.State memory);\n\n /**\n * @notice Encodes the allocation proof for EIP712 signing\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n */\n function encodeAllocationProof(address indexer, address allocationId) external view returns (bytes32);\n\n /**\n * @notice Checks if an allocation is stale\n * @param allocationId The id of the allocation\n * @return True if the allocation is stale, false otherwise\n */\n function isStaleAllocation(address allocationId) external view returns (bool);\n\n /**\n * @notice Checks if an indexer is over-allocated\n * @param allocationId The id of the allocation\n * @return True if the indexer is over-allocated, false otherwise\n */\n function isOverAllocated(address allocationId) external view returns (bool);\n}\n" + }, + "contracts/libraries/Allocation.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { Math } from \"@openzeppelin/contracts/utils/math/Math.sol\";\n\n/**\n * @title Allocation library\n * @notice A library to handle Allocations.\n */\nlibrary Allocation {\n using Allocation for State;\n\n /**\n * @notice Allocation details\n */\n struct State {\n // Indexer that owns the allocation\n address indexer;\n // Subgraph deployment id the allocation is for\n bytes32 subgraphDeploymentId;\n // Number of tokens allocated\n uint256 tokens;\n // Timestamp when the allocation was created\n uint256 createdAt;\n // Timestamp when the allocation was closed\n uint256 closedAt;\n // Timestamp when the last POI was presented\n uint256 lastPOIPresentedAt;\n // Accumulated rewards per allocated token\n uint256 accRewardsPerAllocatedToken;\n // Accumulated rewards that are pending to be claimed due allocation resize\n uint256 accRewardsPending;\n }\n\n /**\n * @notice Thrown when attempting to create an allocation with an existing id\n * @param allocationId The allocation id\n */\n error AllocationAlreadyExists(address allocationId);\n\n /**\n * @notice Thrown when trying to perform an operation on a non-existent allocation\n * @param allocationId The allocation id\n */\n error AllocationDoesNotExist(address allocationId);\n\n /**\n * @notice Thrown when trying to perform an operation on a closed allocation\n * @param allocationId The allocation id\n * @param closedAt The timestamp when the allocation was closed\n */\n error AllocationClosed(address allocationId, uint256 closedAt);\n\n /**\n * @notice Create a new allocation\n * @dev Requirements:\n * - The allocation must not exist\n * @param self The allocation list mapping\n * @param indexer The indexer that owns the allocation\n * @param allocationId The allocation id\n * @param subgraphDeploymentId The subgraph deployment id the allocation is for\n * @param tokens The number of tokens allocated\n * @param accRewardsPerAllocatedToken The initial accumulated rewards per allocated token\n */\n function create(\n mapping(address => State) storage self,\n address indexer,\n address allocationId,\n bytes32 subgraphDeploymentId,\n uint256 tokens,\n uint256 accRewardsPerAllocatedToken\n ) internal returns (State memory) {\n require(!self[allocationId].exists(), AllocationAlreadyExists(allocationId));\n\n State memory allocation = State({\n indexer: indexer,\n subgraphDeploymentId: subgraphDeploymentId,\n tokens: tokens,\n createdAt: block.timestamp,\n closedAt: 0,\n lastPOIPresentedAt: 0,\n accRewardsPerAllocatedToken: accRewardsPerAllocatedToken,\n accRewardsPending: 0\n });\n\n self[allocationId] = allocation;\n\n return allocation;\n }\n\n /**\n * @notice Present a POI for an allocation\n * @dev It only updates the last POI presented timestamp.\n * Requirements:\n * - The allocation must be open\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function presentPOI(mapping(address => State) storage self, address allocationId) internal {\n State storage allocation = _get(self, allocationId);\n require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt));\n allocation.lastPOIPresentedAt = block.timestamp;\n }\n\n /**\n * @notice Update the accumulated rewards per allocated token for an allocation\n * @dev Requirements:\n * - The allocation must be open\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n * @param accRewardsPerAllocatedToken The new accumulated rewards per allocated token\n */\n function snapshotRewards(\n mapping(address => State) storage self,\n address allocationId,\n uint256 accRewardsPerAllocatedToken\n ) internal {\n State storage allocation = _get(self, allocationId);\n require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt));\n allocation.accRewardsPerAllocatedToken = accRewardsPerAllocatedToken;\n }\n\n /**\n * @notice Update the accumulated rewards pending to be claimed for an allocation\n * @dev Requirements:\n * - The allocation must be open\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function clearPendingRewards(mapping(address => State) storage self, address allocationId) internal {\n State storage allocation = _get(self, allocationId);\n require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt));\n allocation.accRewardsPending = 0;\n }\n\n /**\n * @notice Close an allocation\n * @dev Requirements:\n * - The allocation must be open\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function close(mapping(address => State) storage self, address allocationId) internal {\n State storage allocation = _get(self, allocationId);\n require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt));\n allocation.closedAt = block.timestamp;\n }\n\n /**\n * @notice Get an allocation\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function get(mapping(address => State) storage self, address allocationId) internal view returns (State memory) {\n return _get(self, allocationId);\n }\n\n /**\n * @notice Checks if an allocation is stale\n * @param self The allocation\n * @param staleThreshold The time in blocks to consider an allocation stale\n */\n function isStale(State memory self, uint256 staleThreshold) internal view returns (bool) {\n uint256 timeSinceLastPOI = block.timestamp - Math.max(self.createdAt, self.lastPOIPresentedAt);\n return self.isOpen() && timeSinceLastPOI > staleThreshold;\n }\n\n /**\n * @notice Checks if an allocation exists\n * @param self The allocation\n */\n function exists(State memory self) internal pure returns (bool) {\n return self.createdAt != 0;\n }\n\n /**\n * @notice Checks if an allocation is open\n * @param self The allocation\n */\n function isOpen(State memory self) internal pure returns (bool) {\n return self.exists() && self.closedAt == 0;\n }\n\n /**\n * @notice Checks if an allocation is alturistic\n * @param self The allocation\n */\n function isAltruistic(State memory self) internal pure returns (bool) {\n return self.exists() && self.tokens == 0;\n }\n\n /**\n * @notice Get the allocation for an allocation id\n * @dev Reverts if the allocation does not exist\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) {\n State storage allocation = self[allocationId];\n require(allocation.exists(), AllocationDoesNotExist(allocationId));\n return allocation;\n }\n}\n" + }, + "contracts/libraries/Attestation.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title Attestation library\n * @notice A library to handle Attestation.\n */\nlibrary Attestation {\n /// @notice Receipt content sent from the service provider in response to request\n struct Receipt {\n bytes32 requestCID;\n bytes32 responseCID;\n bytes32 subgraphDeploymentId;\n }\n\n /// @notice Attestation sent from the service provider in response to a request\n struct State {\n bytes32 requestCID;\n bytes32 responseCID;\n bytes32 subgraphDeploymentId;\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n /// @notice Attestation size is the sum of the receipt (96) + signature (65)\n uint256 private constant RECEIPT_SIZE_BYTES = 96;\n\n uint256 private constant SIG_R_LENGTH = 32;\n uint256 private constant SIG_S_LENGTH = 32;\n uint256 private constant SIG_V_LENGTH = 1;\n uint256 private constant SIG_R_OFFSET = RECEIPT_SIZE_BYTES;\n uint256 private constant SIG_S_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH;\n uint256 private constant SIG_V_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH + SIG_S_LENGTH;\n uint256 private constant SIG_SIZE_BYTES = SIG_R_LENGTH + SIG_S_LENGTH + SIG_V_LENGTH;\n\n uint256 private constant ATTESTATION_SIZE_BYTES = RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES;\n\n uint256 private constant UINT8_BYTE_LENGTH = 1;\n uint256 private constant BYTES32_BYTE_LENGTH = 32;\n\n error AttestationInvalidBytesLength(uint256 length, uint256 expectedLength);\n\n /**\n * @dev Returns if two attestations are conflicting.\n * Everything must match except for the responseId.\n * @param _attestation1 Attestation\n * @param _attestation2 Attestation\n * @return True if the two attestations are conflicting\n */\n function areConflicting(\n Attestation.State memory _attestation1,\n Attestation.State memory _attestation2\n ) internal pure returns (bool) {\n return (_attestation1.requestCID == _attestation2.requestCID &&\n _attestation1.subgraphDeploymentId == _attestation2.subgraphDeploymentId &&\n _attestation1.responseCID != _attestation2.responseCID);\n }\n\n /**\n * @dev Parse the bytes attestation into a struct from `_data`.\n * @return Attestation struct\n */\n function parse(bytes memory _data) internal pure returns (State memory) {\n // Check attestation data length\n require(\n _data.length == ATTESTATION_SIZE_BYTES,\n AttestationInvalidBytesLength(_data.length, ATTESTATION_SIZE_BYTES)\n );\n\n // Decode receipt\n (bytes32 requestCID, bytes32 responseCID, bytes32 subgraphDeploymentId) = abi.decode(\n _data,\n (bytes32, bytes32, bytes32)\n );\n\n // Decode signature\n // Signature is expected to be in the order defined in the Attestation struct\n bytes32 r = _toBytes32(_data, SIG_R_OFFSET);\n bytes32 s = _toBytes32(_data, SIG_S_OFFSET);\n uint8 v = _toUint8(_data, SIG_V_OFFSET);\n\n return State(requestCID, responseCID, subgraphDeploymentId, r, s, v);\n }\n\n /**\n * @dev Parse a uint8 from `_bytes` starting at offset `_start`.\n * @return uint8 value\n */\n function _toUint8(bytes memory _bytes, uint256 _start) private pure returns (uint8) {\n require(\n _bytes.length >= _start + UINT8_BYTE_LENGTH,\n AttestationInvalidBytesLength(_bytes.length, _start + UINT8_BYTE_LENGTH)\n );\n uint8 tempUint;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Load the 32-byte word from memory starting at `_bytes + _start + 1`\n // The `0x1` accounts for the fact that we want only the first byte (uint8)\n // of the loaded 32 bytes.\n tempUint := mload(add(add(_bytes, 0x1), _start))\n }\n\n return tempUint;\n }\n\n /**\n * @dev Parse a bytes32 from `_bytes` starting at offset `_start`.\n * @return bytes32 value\n */\n function _toBytes32(bytes memory _bytes, uint256 _start) private pure returns (bytes32) {\n require(\n _bytes.length >= _start + BYTES32_BYTE_LENGTH,\n AttestationInvalidBytesLength(_bytes.length, _start + BYTES32_BYTE_LENGTH)\n );\n bytes32 tempBytes32;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n tempBytes32 := mload(add(add(_bytes, 0x20), _start))\n }\n\n return tempBytes32;\n }\n}\n" + }, + "contracts/libraries/LegacyAllocation.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title LegacyAllocation library\n * @notice A library to handle legacy Allocations.\n */\nlibrary LegacyAllocation {\n using LegacyAllocation for State;\n\n /**\n * @notice Legacy allocation details\n * @dev Note that we are only storing the indexer and subgraphDeploymentId. The main point of tracking legacy allocations\n * is to prevent them from being re used on the Subgraph Service. We don't need to store the rest of the allocation details.\n */\n struct State {\n address indexer;\n bytes32 subgraphDeploymentId;\n }\n\n /**\n * @notice Thrown when attempting to migrate an allocation with an existing id\n * @param allocationId The allocation id\n */\n error LegacyAllocationExists(address allocationId);\n\n /**\n * @notice Thrown when trying to get a non-existent allocation\n * @param allocationId The allocation id\n */\n error LegacyAllocationDoesNotExist(address allocationId);\n\n /**\n * @notice Thrown when trying to migrate an allocation that has already been migrated\n * @param allocationId The allocation id\n */\n error LegacyAllocationAlreadyMigrated(address allocationId);\n\n /**\n * @notice Migrate a legacy allocation\n * @dev Requirements:\n * - The allocation must not have been previously migrated\n * @param self The legacy allocation list mapping\n * @param indexer The indexer that owns the allocation\n * @param allocationId The allocation id\n * @param subgraphDeploymentId The subgraph deployment id the allocation is for\n * @custom:error LegacyAllocationAlreadyMigrated if the allocation has already been migrated\n */\n function migrate(\n mapping(address => State) storage self,\n address indexer,\n address allocationId,\n bytes32 subgraphDeploymentId\n ) internal {\n require(!self[allocationId].exists(), LegacyAllocationAlreadyMigrated(allocationId));\n\n State memory allocation = State({ indexer: indexer, subgraphDeploymentId: subgraphDeploymentId });\n self[allocationId] = allocation;\n }\n\n /**\n * @notice Get a legacy allocation\n * @param self The legacy allocation list mapping\n * @param allocationId The allocation id\n */\n function get(mapping(address => State) storage self, address allocationId) internal view returns (State memory) {\n return _get(self, allocationId);\n }\n\n /**\n * @notice Revert if a legacy allocation exists\n * @param self The legacy allocation list mapping\n * @param allocationId The allocation id\n */\n function revertIfExists(mapping(address => State) storage self, address allocationId) internal view {\n require(!self[allocationId].exists(), LegacyAllocationExists(allocationId));\n }\n\n /**\n * @notice Check if a legacy allocation exists\n * @param self The legacy allocation\n */\n function exists(State memory self) internal pure returns (bool) {\n return self.indexer != address(0);\n }\n\n /**\n * @notice Get a legacy allocation\n * @param self The legacy allocation list mapping\n * @param allocationId The allocation id\n */\n function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) {\n State storage allocation = self[allocationId];\n require(allocation.exists(), LegacyAllocationDoesNotExist(allocationId));\n return allocation;\n }\n}\n" + }, + "contracts/SubgraphService.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\";\nimport { IGraphToken } from \"@graphprotocol/contracts/contracts/token/IGraphToken.sol\";\nimport { ITAPCollector } from \"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\";\nimport { IRewardsIssuer } from \"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\";\nimport { ISubgraphService } from \"./interfaces/ISubgraphService.sol\";\n\nimport { OwnableUpgradeable } from \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport { MulticallUpgradeable } from \"@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol\";\nimport { Initializable } from \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport { DataServicePausableUpgradeable } from \"@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol\";\nimport { DataService } from \"@graphprotocol/horizon/contracts/data-service/DataService.sol\";\nimport { DataServiceFees } from \"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol\";\nimport { Directory } from \"./utilities/Directory.sol\";\nimport { AllocationManager } from \"./utilities/AllocationManager.sol\";\nimport { SubgraphServiceV1Storage } from \"./SubgraphServiceStorage.sol\";\n\nimport { TokenUtils } from \"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\";\nimport { PPMMath } from \"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\";\nimport { Allocation } from \"./libraries/Allocation.sol\";\nimport { LegacyAllocation } from \"./libraries/LegacyAllocation.sol\";\n\n/**\n * @title SubgraphService contract\n * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\n */\ncontract SubgraphService is\n Initializable,\n OwnableUpgradeable,\n MulticallUpgradeable,\n DataService,\n DataServicePausableUpgradeable,\n DataServiceFees,\n Directory,\n AllocationManager,\n SubgraphServiceV1Storage,\n IRewardsIssuer,\n ISubgraphService\n{\n using PPMMath for uint256;\n using Allocation for mapping(address => Allocation.State);\n using Allocation for Allocation.State;\n using TokenUtils for IGraphToken;\n\n /**\n * @notice Checks that an indexer is registered\n * @param indexer The address of the indexer\n */\n modifier onlyRegisteredIndexer(address indexer) {\n require(indexers[indexer].registeredAt != 0, SubgraphServiceIndexerNotRegistered(indexer));\n _;\n }\n\n /**\n * @notice Constructor for the SubgraphService contract\n * @dev DataService and Directory constructors set a bunch of immutable variables\n * @param graphController The address of the Graph Controller contract\n * @param disputeManager The address of the DisputeManager contract\n * @param tapCollector The address of the TAPCollector contract\n * @param curation The address of the Curation contract\n */\n constructor(\n address graphController,\n address disputeManager,\n address tapCollector,\n address curation\n ) DataService(graphController) Directory(address(this), disputeManager, tapCollector, curation) {\n _disableInitializers();\n }\n\n /**\n * @notice Initialize the contract\n * @dev The thawingPeriod and verifierCut ranges are not set here because they are variables\n * on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges.\n * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation\n * @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation\n * @param stakeToFeesRatio The ratio of stake to fees to lock when collecting query fees\n */\n function initialize(\n uint256 minimumProvisionTokens,\n uint32 maximumDelegationRatio,\n uint256 stakeToFeesRatio\n ) external initializer {\n __Ownable_init(msg.sender);\n __Multicall_init();\n __DataService_init();\n __DataServicePausable_init();\n __AllocationManager_init(\"SubgraphService\", \"1.0\");\n\n _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max);\n _setDelegationRatio(maximumDelegationRatio);\n _setStakeToFeesRatio(stakeToFeesRatio);\n }\n\n /**\n * @notice\n * @dev Implements {IDataService.register}\n *\n * Requirements:\n * - The indexer must not be already registered\n * - The URL must not be empty\n * - The provision must be valid according to the subgraph service rules\n *\n * Emits a {ServiceProviderRegistered} event\n *\n * @param indexer The address of the indexer to register\n * @param data Encoded registration data:\n * - address `url`: The URL of the indexer\n * - string `geohash`: The geohash of the indexer\n * - address `rewardsDestination`: The address where the indexer wants to receive indexing rewards.\n * Use zero address for automatic reprovisioning to the subgraph service.\n */\n function register(\n address indexer,\n bytes calldata data\n ) external override onlyAuthorizedForProvision(indexer) onlyValidProvision(indexer) whenNotPaused {\n (string memory url, string memory geohash, address rewardsDestination) = abi.decode(\n data,\n (string, string, address)\n );\n\n require(bytes(url).length > 0, SubgraphServiceEmptyUrl());\n require(bytes(geohash).length > 0, SubgraphServiceEmptyGeohash());\n require(indexers[indexer].registeredAt == 0, SubgraphServiceIndexerAlreadyRegistered());\n\n // Register the indexer\n indexers[indexer] = Indexer({ registeredAt: block.timestamp, url: url, geoHash: geohash });\n if (rewardsDestination != address(0)) {\n _setRewardsDestination(indexer, rewardsDestination);\n }\n\n emit ServiceProviderRegistered(indexer, data);\n }\n\n /**\n * @notice Accept staged parameters in the provision of a service provider\n * @dev Implements {IDataService-acceptProvisionPendingParameters}\n *\n * Requirements:\n * - The indexer must be registered\n * - Must have previously staged provision parameters, using {IHorizonStaking-setProvisionParameters}\n * - The new provision parameters must be valid according to the subgraph service rules\n *\n * Emits a {ProvisionPendingParametersAccepted} event\n *\n * @param indexer The address of the indexer to accept the provision for\n */\n function acceptProvisionPendingParameters(\n address indexer,\n bytes calldata\n ) external override onlyAuthorizedForProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused {\n _checkProvisionTokens(indexer);\n _acceptProvisionParameters(indexer);\n emit ProvisionPendingParametersAccepted(indexer);\n }\n\n /**\n * @notice Allocates tokens to subgraph deployment, manifesting the indexer's commitment to index it\n * @dev This is the equivalent of the `allocate` function in the legacy Staking contract.\n *\n * Requirements:\n * - The indexer must be registered\n * - The provision must be valid according to the subgraph service rules\n * - Allocation id cannot be zero\n * - Allocation id cannot be reused from the legacy staking contract\n * - The indexer must have enough available tokens to allocate\n *\n * The `allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`.\n *\n * See {AllocationManager-allocate} for more details.\n *\n * Emits {ServiceStarted} and {AllocationCreated} events\n *\n * @param indexer The address of the indexer\n * @param data Encoded data:\n * - bytes32 `subgraphDeploymentId`: The id of the subgraph deployment\n * - uint256 `tokens`: The amount of tokens to allocate\n * - address `allocationId`: The id of the allocation\n * - bytes `allocationProof`: Signed proof of the allocation id address ownership\n */\n function startService(\n address indexer,\n bytes calldata data\n )\n external\n override\n onlyAuthorizedForProvision(indexer)\n onlyValidProvision(indexer)\n onlyRegisteredIndexer(indexer)\n whenNotPaused\n {\n (bytes32 subgraphDeploymentId, uint256 tokens, address allocationId, bytes memory allocationProof) = abi.decode(\n data,\n (bytes32, uint256, address, bytes)\n );\n _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof, delegationRatio);\n emit ServiceStarted(indexer, data);\n }\n\n /**\n * @notice Close an allocation, indicating that the indexer has stopped indexing the subgraph deployment\n * @dev This is the equivalent of the `closeAllocation` function in the legacy Staking contract.\n * There are a few notable differences with the legacy function:\n * - allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically\n * without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated\n * tokens for other purposes.\n * - No POI is required to close an allocation. Indexers should present POIs to collect indexing rewards using {collect}.\n *\n * Requirements:\n * - The indexer must be registered\n * - Allocation must exist and be open\n *\n * Emits {ServiceStopped} and {AllocationClosed} events\n *\n * @param indexer The address of the indexer\n * @param data Encoded data:\n * - address `allocationId`: The id of the allocation\n */\n function stopService(\n address indexer,\n bytes calldata data\n ) external override onlyAuthorizedForProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused {\n address allocationId = abi.decode(data, (address));\n require(\n allocations.get(allocationId).indexer == indexer,\n SubgraphServiceAllocationNotAuthorized(indexer, allocationId)\n );\n _closeAllocation(allocationId);\n emit ServiceStopped(indexer, data);\n }\n\n /**\n * @notice Collects payment for the service provided by the indexer\n * Allows collecting different types of payments such as query fees and indexing rewards.\n * It uses Graph Horizon payments protocol to process payments.\n * Reverts if the payment type is not supported.\n * @dev This function is the equivalent of the `collect` function for query fees and the `closeAllocation` function\n * for indexing rewards in the legacy Staking contract.\n *\n * Requirements:\n * - The indexer must be registered\n * - The provision must be valid according to the subgraph service rules\n *\n * Emits a {ServicePaymentCollected} event. Emits payment type specific events.\n *\n * For query fees, see {SubgraphService-_collectQueryFees} for more details.\n * For indexing rewards, see {AllocationManager-_collectIndexingRewards} for more details.\n *\n * @param indexer The address of the indexer\n * @param paymentType The type of payment to collect as defined in {IGraphPayments}\n * @param data Encoded data to fulfill the payment. The structure of the data depends on the payment type. See above.\n */\n function collect(\n address indexer,\n IGraphPayments.PaymentTypes paymentType,\n bytes calldata data\n )\n external\n override\n onlyAuthorizedForProvision(indexer)\n onlyValidProvision(indexer)\n onlyRegisteredIndexer(indexer)\n whenNotPaused\n returns (uint256)\n {\n uint256 paymentCollected = 0;\n\n if (paymentType == IGraphPayments.PaymentTypes.QueryFee) {\n ITAPCollector.SignedRAV memory signedRav = abi.decode(data, (ITAPCollector.SignedRAV));\n require(\n signedRav.rav.serviceProvider == indexer,\n SubgraphServiceIndexerMismatch(signedRav.rav.serviceProvider, indexer)\n );\n paymentCollected = _collectQueryFees(signedRav);\n } else if (paymentType == IGraphPayments.PaymentTypes.IndexingRewards) {\n (address allocationId, bytes32 poi) = abi.decode(data, (address, bytes32));\n require(\n allocations.get(allocationId).indexer == indexer,\n SubgraphServiceAllocationNotAuthorized(indexer, allocationId)\n );\n paymentCollected = _collectIndexingRewards(allocationId, poi, delegationRatio);\n } else {\n revert SubgraphServiceInvalidPaymentType(paymentType);\n }\n\n emit ServicePaymentCollected(indexer, paymentType, paymentCollected);\n return paymentCollected;\n }\n\n /**\n * @notice Slash an indexer\n * @dev Slashing is delegated to the {DisputeManager} contract which is the only one that can call this\n * function.\n *\n * See {IHorizonStaking-slash} for more details.\n *\n * Emits a {ServiceProviderSlashed} event.\n *\n * @param indexer The address of the indexer to be slashed\n * @param data Encoded data:\n * - uint256 `tokens`: The amount of tokens to slash\n * - uint256 `reward`: The amount of tokens to reward the slasher\n */\n function slash(address indexer, bytes calldata data) external override onlyDisputeManager {\n (uint256 tokens, uint256 reward) = abi.decode(data, (uint256, uint256));\n _graphStaking().slash(indexer, tokens, reward, address(_disputeManager()));\n emit ServiceProviderSlashed(indexer, tokens);\n }\n\n /**\n * @notice See {ISubgraphService.closeStaleAllocation}\n */\n function forceCloseAllocation(address allocationId) external override {\n Allocation.State memory allocation = allocations.get(allocationId);\n bool isStale = allocation.isStale(maxPOIStaleness);\n bool isOverAllocated_ = _isOverAllocated(allocation.indexer, delegationRatio);\n require(isStale || isOverAllocated_, SubgraphServiceCannotForceCloseAllocation(allocationId));\n require(!allocation.isAltruistic(), SubgraphServiceAllocationIsAltruistic(allocationId));\n _closeAllocation(allocationId);\n }\n\n /**\n * @notice See {ISubgraphService.resizeAllocation}\n */\n function resizeAllocation(\n address indexer,\n address allocationId,\n uint256 tokens\n )\n external\n onlyAuthorizedForProvision(indexer)\n onlyValidProvision(indexer)\n onlyRegisteredIndexer(indexer)\n whenNotPaused\n {\n require(\n allocations.get(allocationId).indexer == indexer,\n SubgraphServiceAllocationNotAuthorized(indexer, allocationId)\n );\n _resizeAllocation(allocationId, tokens, delegationRatio);\n }\n\n /**\n * @notice See {ISubgraphService.migrateLegacyAllocation}\n */\n function migrateLegacyAllocation(\n address indexer,\n address allocationId,\n bytes32 subgraphDeploymentID\n ) external override onlyOwner {\n _migrateLegacyAllocation(indexer, allocationId, subgraphDeploymentID);\n }\n\n /**\n * @notice See {ISubgraphService.setPauseGuardian}\n */\n function setPauseGuardian(address pauseGuardian, bool allowed) external override onlyOwner {\n _setPauseGuardian(pauseGuardian, allowed);\n }\n\n /**\n * @notice See {ISubgraphService.setRewardsDestination}\n */\n function setRewardsDestination(address rewardsDestination) external override {\n _setRewardsDestination(msg.sender, rewardsDestination);\n }\n\n /**\n * @notice See {ISubgraphService.setMinimumProvisionTokens}\n */\n function setMinimumProvisionTokens(uint256 minimumProvisionTokens) external override onlyOwner {\n _setProvisionTokensRange(minimumProvisionTokens, DEFAULT_MAX_PROVISION_TOKENS);\n }\n\n /**\n * @notice See {ISubgraphService.setDelegationRatio}\n */\n function setDelegationRatio(uint32 delegationRatio) external override onlyOwner {\n _setDelegationRatio(delegationRatio);\n }\n\n /**\n * @notice See {ISubgraphService.setStakeToFeesRatio}\n */\n function setStakeToFeesRatio(uint256 stakeToFeesRatio_) external override onlyOwner {\n _setStakeToFeesRatio(stakeToFeesRatio_);\n }\n\n /**\n * @notice See {ISubgraphService.setMaxPOIStaleness}\n */\n function setMaxPOIStaleness(uint256 maxPOIStaleness) external override onlyOwner {\n _setMaxPOIStaleness(maxPOIStaleness);\n }\n\n /**\n * @notice See {ISubgraphService.setCurationCut}\n */\n function setCurationCut(uint256 curationCut) external override onlyOwner {\n require(PPMMath.isValidPPM(curationCut), SubgraphServiceInvalidCurationCut(curationCut));\n curationFeesCut = curationCut;\n emit CurationCutSet(curationCut);\n }\n\n /**\n * @notice See {ISubgraphService.getAllocation}\n */\n function getAllocation(address allocationId) external view override returns (Allocation.State memory) {\n return allocations[allocationId];\n }\n\n /**\n * @notice Get allocation data to calculate rewards issuance\n * @dev Implements {IRewardsIssuer.getAllocationData}\n * @dev Note that this is slightly different than {getAllocation}. It returns an\n * unstructured subset of the allocation data, which is the minimum required to mint rewards.\n *\n * Should only be used by the {RewardsManager}.\n *\n * @param allocationId The allocation Id\n * @return indexer The indexer address\n * @return subgraphDeploymentId Subgraph deployment id for the allocation\n * @return tokens Amount of allocated tokens\n * @return accRewardsPerAllocatedToken Rewards snapshot\n */\n function getAllocationData(\n address allocationId\n ) external view override returns (address, bytes32, uint256, uint256, uint256) {\n Allocation.State memory allo = allocations[allocationId];\n return (\n allo.indexer,\n allo.subgraphDeploymentId,\n allo.tokens,\n allo.accRewardsPerAllocatedToken,\n allo.accRewardsPending\n );\n }\n\n /**\n * @notice Return the total amount of tokens allocated to subgraph.\n * @dev Implements {IRewardsIssuer.getSubgraphAllocatedTokens}\n * @dev To be used by the {RewardsManager}.\n * @param subgraphDeploymentId Deployment Id for the subgraph\n * @return Total tokens allocated to subgraph\n */\n function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentId) external view override returns (uint256) {\n return subgraphAllocatedTokens[subgraphDeploymentId];\n }\n\n /**\n * @notice Check if an allocation is open\n * @dev Implements {IRewardsIssuer.isAllocationActive}\n * @dev To be used by the {RewardsManager}.\n *\n * @param allocationId The allocation Id\n * @return Wether or not the allocation is active\n */\n function isActiveAllocation(address allocationId) external view override returns (bool) {\n return allocations[allocationId].isOpen();\n }\n\n /**\n * @notice See {ISubgraphService.getLegacyAllocation}\n */\n function getLegacyAllocation(address allocationId) external view override returns (LegacyAllocation.State memory) {\n return legacyAllocations[allocationId];\n }\n\n /**\n * @notice See {ISubgraphService.encodeAllocationProof}\n */\n function encodeAllocationProof(address indexer, address allocationId) external view override returns (bytes32) {\n return _encodeAllocationProof(indexer, allocationId);\n }\n\n /**\n * @notice See {ISubgraphService.isStaleAllocation}\n */\n function isStaleAllocation(address allocationId) external view override returns (bool) {\n return allocations.get(allocationId).isStale(maxPOIStaleness);\n }\n\n /**\n * @notice See {ISubgraphService.isOverAllocated}\n */\n function isOverAllocated(address indexer) external view override returns (bool) {\n return _isOverAllocated(indexer, delegationRatio);\n }\n\n // -- Data service parameter getters --\n /**\n * @notice Getter for the accepted thawing period range for provisions\n * @dev This override ensures {ProvisionManager} uses the thawing period from the {DisputeManager}\n * @return min The minimum thawing period which is defined by {DisputeManager-getDisputePeriod}\n * @return max The maximum is unbounded\n */\n function _getThawingPeriodRange() internal view override returns (uint64 min, uint64 max) {\n return (_disputeManager().getDisputePeriod(), DEFAULT_MAX_THAWING_PERIOD);\n }\n\n /**\n * @notice Getter for the accepted verifier cut range for provisions\n * @return min The minimum verifier cut which is defined by {DisputeManager-getVerifierCut}\n * @return max The maximum is 100% in PPM\n */\n function _getVerifierCutRange() internal view override returns (uint32 min, uint32 max) {\n return (_disputeManager().getVerifierCut(), DEFAULT_MAX_VERIFIER_CUT);\n }\n\n /**\n * @notice Collect query fees\n * Stake equal to the amount being collected times the `stakeToFeesRatio` is locked into a stake claim.\n * This claim can be released at a later stage once expired.\n *\n * It's important to note that before collecting this function will attempt to release any expired stake claims.\n * This could lead to an out of gas error if there are too many expired claims. In that case, the indexer will need to\n * manually release the claims, see {IDataServiceFees-releaseStake}, before attempting to collect again.\n *\n * @dev This function is the equivalent of the legacy `collect` function for query fees.\n * @dev Uses the {TAPCollector} to collect payment from Graph Horizon payments protocol.\n * Fees are distributed to service provider and delegators by {GraphPayments}, though curators\n * share is distributed by this function.\n *\n * Query fees can be collected on closed allocations.\n *\n * Requirements:\n * - Indexer must have enough available tokens to lock as economic security for fees\n *\n * Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\n * Emits a {StakeClaimLocked} event.\n * Emits a {QueryFeesCollected} event.\n *\n * @param _signedRav Signed RAV\n */\n function _collectQueryFees(ITAPCollector.SignedRAV memory _signedRav) private returns (uint256 feesCollected) {\n address indexer = _signedRav.rav.serviceProvider;\n address allocationId = abi.decode(_signedRav.rav.metadata, (address));\n Allocation.State memory allocation = allocations.get(allocationId);\n\n // Check RAV is consistent - RAV indexer must match the allocation's indexer\n require(allocation.indexer == indexer, SubgraphServiceInvalidRAV(indexer, allocation.indexer));\n bytes32 subgraphDeploymentId = allocation.subgraphDeploymentId;\n\n // release expired stake claims\n _releaseStake(indexer, 0);\n\n // Collect from GraphPayments - only curators cut is sent back to the subgraph service\n uint256 balanceBefore = _graphToken().balanceOf(address(this));\n\n uint256 curationCut = _curation().isCurated(subgraphDeploymentId) ? curationFeesCut : 0;\n uint256 tokensCollected = _tapCollector().collect(\n IGraphPayments.PaymentTypes.QueryFee,\n abi.encode(_signedRav, curationCut)\n );\n uint256 tokensCurators = tokensCollected.mulPPM(curationCut);\n\n uint256 balanceAfter = _graphToken().balanceOf(address(this));\n require(\n balanceBefore + tokensCurators == balanceAfter,\n SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter, tokensCurators)\n );\n\n if (tokensCollected > 0) {\n // lock stake as economic security for fees\n uint256 tokensToLock = tokensCollected * stakeToFeesRatio;\n uint256 unlockTimestamp = block.timestamp + _disputeManager().getDisputePeriod();\n _lockStake(indexer, tokensToLock, unlockTimestamp);\n\n if (tokensCurators > 0) {\n // curation collection changes subgraph signal so we take rewards snapshot\n _graphRewardsManager().onSubgraphSignalUpdate(subgraphDeploymentId);\n\n // Send GRT and bookkeep by calling collect()\n _graphToken().pushTokens(address(_curation()), tokensCurators);\n _curation().collect(subgraphDeploymentId, tokensCurators);\n }\n }\n\n emit QueryFeesCollected(indexer, tokensCollected, tokensCurators);\n return tokensCollected;\n }\n\n function _setStakeToFeesRatio(uint256 _stakeToFeesRatio) private {\n require(_stakeToFeesRatio != 0, SubgraphServiceInvalidZeroStakeToFeesRatio());\n stakeToFeesRatio = _stakeToFeesRatio;\n emit StakeToFeesRatioSet(_stakeToFeesRatio);\n }\n}\n" + }, + "contracts/SubgraphServiceStorage.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { ISubgraphService } from \"./interfaces/ISubgraphService.sol\";\n\nabstract contract SubgraphServiceV1Storage {\n /// @notice Service providers registered in the data service\n mapping(address indexer => ISubgraphService.Indexer details) public indexers;\n\n ///@notice Multiplier for how many tokens back collected query fees\n uint256 public stakeToFeesRatio;\n\n /// @notice The cut curators take from query fee payments\n uint256 public curationFeesCut;\n}\n" + }, + "contracts/utilities/AllocationManager.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\";\nimport { IGraphToken } from \"@graphprotocol/contracts/contracts/token/IGraphToken.sol\";\nimport { IHorizonStakingTypes } from \"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\";\n\nimport { GraphDirectory } from \"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\";\nimport { AllocationManagerV1Storage } from \"./AllocationManagerStorage.sol\";\n\nimport { TokenUtils } from \"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\";\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { EIP712Upgradeable } from \"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\";\nimport { Allocation } from \"../libraries/Allocation.sol\";\nimport { LegacyAllocation } from \"../libraries/LegacyAllocation.sol\";\nimport { PPMMath } from \"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\";\nimport { ProvisionTracker } from \"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\";\n\n/**\n * @title AllocationManager contract\n * @notice A helper contract implementing allocation lifecycle management.\n * Allows opening, resizing, and closing allocations, as well as collecting indexing rewards by presenting a Proof\n * of Indexing (POI).\n */\nabstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, AllocationManagerV1Storage {\n using ProvisionTracker for mapping(address => uint256);\n using Allocation for mapping(address => Allocation.State);\n using Allocation for Allocation.State;\n using LegacyAllocation for mapping(address => LegacyAllocation.State);\n using PPMMath for uint256;\n using TokenUtils for IGraphToken;\n\n ///@dev EIP712 typehash for allocation proof\n bytes32 private constant EIP712_ALLOCATION_PROOF_TYPEHASH =\n keccak256(\"AllocationIdProof(address indexer,address allocationId)\");\n\n /**\n * @notice Emitted when an indexer creates an allocation\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n * @param tokens The amount of tokens allocated\n */\n event AllocationCreated(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when an indexer collects indexing rewards for an allocation\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n * @param tokensRewards The amount of tokens collected\n * @param tokensIndexerRewards The amount of tokens collected for the indexer\n * @param tokensDelegationRewards The amount of tokens collected for delegators\n * @param poi The POI presented\n * @param currentEpoch The current epoch\n */\n event IndexingRewardsCollected(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId,\n uint256 tokensRewards,\n uint256 tokensIndexerRewards,\n uint256 tokensDelegationRewards,\n bytes32 poi,\n uint256 currentEpoch\n );\n\n /**\n * @notice Emitted when an indexer resizes an allocation\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n * @param newTokens The new amount of tokens allocated\n * @param oldTokens The old amount of tokens allocated\n */\n event AllocationResized(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId,\n uint256 newTokens,\n uint256 oldTokens\n );\n\n /**\n * @dev Emitted when an indexer closes an allocation\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n * @param tokens The amount of tokens allocated\n */\n event AllocationClosed(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when a legacy allocation is migrated into the subgraph service\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n */\n event LegacyAllocationMigrated(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId\n );\n\n /**\n * @notice Emitted when an indexer sets a new indexing rewards destination\n * @param indexer The address of the indexer\n * @param rewardsDestination The address where indexing rewards should be sent\n */\n event RewardsDestinationSet(address indexed indexer, address indexed rewardsDestination);\n\n /**\n * @notice Emitted when the maximum POI staleness is updated\n * @param maxPOIStaleness The max POI staleness in seconds\n */\n event MaxPOIStalenessSet(uint256 maxPOIStaleness);\n\n /**\n * @notice Thrown when an allocation proof is invalid\n * Both `signer` and `allocationId` should match for a valid proof.\n * @param signer The address that signed the proof\n * @param allocationId The id of the allocation\n */\n error AllocationManagerInvalidAllocationProof(address signer, address allocationId);\n\n /**\n * @notice Thrown when attempting to create an allocation with a zero allocation id\n */\n error AllocationManagerInvalidZeroAllocationId();\n\n /**\n * @notice Thrown when attempting to collect indexing rewards on a closed allocationl\n * @param allocationId The id of the allocation\n */\n error AllocationManagerAllocationClosed(address allocationId);\n\n /**\n * @notice Thrown when attempting to resize an allocation with the same size\n * @param allocationId The id of the allocation\n * @param tokens The amount of tokens\n */\n error AllocationManagerAllocationSameSize(address allocationId, uint256 tokens);\n\n /**\n * @notice Initializes the contract and parent contracts\n */\n // solhint-disable-next-line func-name-mixedcase\n function __AllocationManager_init(string memory _name, string memory _version) internal onlyInitializing {\n __EIP712_init(_name, _version);\n __AllocationManager_init_unchained(_name, _version);\n }\n\n /**\n * @notice Initializes the contract\n */\n // solhint-disable-next-line func-name-mixedcase\n function __AllocationManager_init_unchained(\n string memory _name,\n string memory _version\n ) internal onlyInitializing {}\n\n /**\n * @notice Imports a legacy allocation id into the subgraph service\n * This is a governor only action that is required to prevent indexers from re-using allocation ids from the\n * legacy staking contract. It will revert with LegacyAllocationAlreadyMigrated if the allocation has already been migrated.\n * @param _indexer The address of the indexer\n * @param _allocationId The id of the allocation\n * @param _subgraphDeploymentId The id of the subgraph deployment\n */\n function _migrateLegacyAllocation(address _indexer, address _allocationId, bytes32 _subgraphDeploymentId) internal {\n legacyAllocations.migrate(_indexer, _allocationId, _subgraphDeploymentId);\n emit LegacyAllocationMigrated(_indexer, _allocationId, _subgraphDeploymentId);\n }\n\n /**\n * @notice Create an allocation\n * @dev The `_allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`\n *\n * Requirements:\n * - `_allocationId` must not be the zero address\n *\n * Emits a {AllocationCreated} event\n *\n * @param _indexer The address of the indexer\n * @param _allocationId The id of the allocation to be created\n * @param _subgraphDeploymentId The subgraph deployment Id\n * @param _tokens The amount of tokens to allocate\n * @param _allocationProof Signed proof of allocation id address ownership\n * @param _delegationRatio The delegation ratio to consider when locking tokens\n */\n function _allocate(\n address _indexer,\n address _allocationId,\n bytes32 _subgraphDeploymentId,\n uint256 _tokens,\n bytes memory _allocationProof,\n uint32 _delegationRatio\n ) internal returns (Allocation.State memory) {\n require(_allocationId != address(0), AllocationManagerInvalidZeroAllocationId());\n\n _verifyAllocationProof(_indexer, _allocationId, _allocationProof);\n\n // Ensure allocation id is not reused\n // need to check both subgraph service (on allocations.create()) and legacy allocations\n legacyAllocations.revertIfExists(_allocationId);\n Allocation.State memory allocation = allocations.create(\n _indexer,\n _allocationId,\n _subgraphDeploymentId,\n _tokens,\n _graphRewardsManager().onSubgraphAllocationUpdate(_subgraphDeploymentId)\n );\n\n // Check that the indexer has enough tokens available\n // Note that the delegation ratio ensures overdelegation cannot be used\n allocationProvisionTracker.lock(_graphStaking(), _indexer, _tokens, _delegationRatio);\n\n // Update total allocated tokens for the subgraph deployment\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] =\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] +\n allocation.tokens;\n\n emit AllocationCreated(_indexer, _allocationId, _subgraphDeploymentId, allocation.tokens);\n return allocation;\n }\n\n /**\n * @notice Present a POI to collect indexing rewards for an allocation\n * This function will mint indexing rewards using the {RewardsManager} and distribute them to the indexer and delegators.\n *\n * To qualify for indexing rewards:\n * - POI must be non-zero\n * - POI must not be stale, i.e: older than `maxPOIStaleness`\n * - allocation must not be altruistic (allocated tokens = 0)\n *\n * Note that indexers are required to periodically (at most every `maxPOIStaleness`) present POIs to collect rewards.\n * Rewards will not be issued to stale POIs, which means that indexers are advised to present a zero POI if they are\n * unable to present a valid one to prevent being locked out of future rewards.\n *\n * Emits a {IndexingRewardsCollected} event.\n *\n * @param _allocationId The id of the allocation to collect rewards for\n * @param _poi The POI being presented\n */\n function _collectIndexingRewards(\n address _allocationId,\n bytes32 _poi,\n uint32 _delegationRatio\n ) internal returns (uint256) {\n Allocation.State memory allocation = allocations.get(_allocationId);\n require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId));\n\n // Mint indexing rewards if all conditions are met\n uint256 tokensRewards = (!allocation.isStale(maxPOIStaleness) &&\n !allocation.isAltruistic() &&\n _poi != bytes32(0))\n ? _graphRewardsManager().takeRewards(_allocationId)\n : 0;\n\n // ... but we still take a snapshot to ensure the rewards are not accumulated for the next valid POI\n allocations.snapshotRewards(\n _allocationId,\n _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId)\n );\n allocations.presentPOI(_allocationId);\n\n // Any pending rewards should have been collected now\n allocations.clearPendingRewards(_allocationId);\n\n uint256 tokensIndexerRewards = 0;\n uint256 tokensDelegationRewards = 0;\n if (tokensRewards != 0) {\n // Distribute rewards to delegators\n uint256 delegatorCut = _graphStaking().getDelegationFeeCut(\n allocation.indexer,\n address(this),\n IGraphPayments.PaymentTypes.IndexingRewards\n );\n IHorizonStakingTypes.DelegationPool memory delegationPool = _graphStaking().getDelegationPool(\n allocation.indexer,\n address(this)\n );\n // If delegation pool has no shares then we don't need to distribute rewards to delegators\n tokensDelegationRewards = delegationPool.shares > 0 ? tokensRewards.mulPPM(delegatorCut) : 0;\n if (tokensDelegationRewards > 0) {\n _graphToken().approve(address(_graphStaking()), tokensDelegationRewards);\n _graphStaking().addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards);\n }\n\n // Distribute rewards to indexer\n tokensIndexerRewards = tokensRewards - tokensDelegationRewards;\n if (tokensIndexerRewards > 0) {\n address rewardsDestination = rewardsDestination[allocation.indexer];\n if (rewardsDestination == address(0)) {\n _graphToken().approve(address(_graphStaking()), tokensIndexerRewards);\n _graphStaking().stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards);\n } else {\n _graphToken().pushTokens(rewardsDestination, tokensIndexerRewards);\n }\n }\n }\n\n emit IndexingRewardsCollected(\n allocation.indexer,\n _allocationId,\n allocation.subgraphDeploymentId,\n tokensRewards,\n tokensIndexerRewards,\n tokensDelegationRewards,\n _poi,\n _graphEpochManager().currentEpoch()\n );\n\n // Check if the indexer is over-allocated and close the allocation if necessary\n if (_isOverAllocated(allocation.indexer, _delegationRatio)) {\n _closeAllocation(_allocationId);\n }\n\n return tokensRewards;\n }\n\n /**\n * @notice Resize an allocation\n * @dev Will lock or release tokens in the provision tracker depending on the new allocation size.\n * Rewards accrued but not issued before the resize will be accounted for as pending rewards.\n * These will be paid out when the indexer presents a POI.\n *\n * Requirements:\n * - `_indexer` must be the owner of the allocation\n * - Allocation must be open\n * - `_tokens` must be different from the current allocation size\n *\n * Emits a {AllocationResized} event.\n *\n * @param _allocationId The id of the allocation to be resized\n * @param _tokens The new amount of tokens to allocate\n * @param _delegationRatio The delegation ratio to consider when locking tokens\n */\n function _resizeAllocation(\n address _allocationId,\n uint256 _tokens,\n uint32 _delegationRatio\n ) internal returns (Allocation.State memory) {\n Allocation.State memory allocation = allocations.get(_allocationId);\n require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId));\n require(_tokens != allocation.tokens, AllocationManagerAllocationSameSize(_allocationId, _tokens));\n\n // Update provision tracker\n uint256 oldTokens = allocation.tokens;\n if (_tokens > oldTokens) {\n allocationProvisionTracker.lock(_graphStaking(), allocation.indexer, _tokens - oldTokens, _delegationRatio);\n } else {\n allocationProvisionTracker.release(allocation.indexer, oldTokens - _tokens);\n }\n\n // Calculate rewards that have been accrued since the last snapshot but not yet issued\n uint256 accRewardsPerAllocatedToken = _graphRewardsManager().onSubgraphAllocationUpdate(\n allocation.subgraphDeploymentId\n );\n uint256 accRewardsPerAllocatedTokenPending = !allocation.isAltruistic()\n ? accRewardsPerAllocatedToken - allocation.accRewardsPerAllocatedToken\n : 0;\n\n // Update the allocation\n allocations[_allocationId].tokens = _tokens;\n allocations[_allocationId].accRewardsPerAllocatedToken = accRewardsPerAllocatedToken;\n allocations[_allocationId].accRewardsPending += _graphRewardsManager().calcRewards(\n oldTokens,\n accRewardsPerAllocatedTokenPending\n );\n\n // Update total allocated tokens for the subgraph deployment\n if (_tokens > oldTokens) {\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] += (_tokens - oldTokens);\n } else {\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] -= (oldTokens - _tokens);\n }\n\n emit AllocationResized(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, _tokens, oldTokens);\n return allocations[_allocationId];\n }\n\n /**\n * @notice Close an allocation\n * Does not require presenting a POI, use {_collectIndexingRewards} to present a POI and collect rewards\n * @dev Note that allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically\n * without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated\n * tokens for other purposes.\n *\n * Emits a {AllocationClosed} event\n *\n * @param _allocationId The id of the allocation to be closed\n */\n function _closeAllocation(address _allocationId) internal {\n Allocation.State memory allocation = allocations.get(_allocationId);\n\n // Take rewards snapshot to prevent other allos from counting tokens from this allo\n allocations.snapshotRewards(\n _allocationId,\n _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId)\n );\n\n allocations.close(_allocationId);\n allocationProvisionTracker.release(allocation.indexer, allocation.tokens);\n\n // Update total allocated tokens for the subgraph deployment\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] =\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] -\n allocation.tokens;\n\n emit AllocationClosed(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, allocation.tokens);\n }\n\n /**\n * @notice Sets the rewards destination for an indexer to receive indexing rewards\n * @dev Emits a {RewardsDestinationSet} event\n * @param _rewardsDestination The address where indexing rewards should be sent\n */\n function _setRewardsDestination(address _indexer, address _rewardsDestination) internal {\n rewardsDestination[_indexer] = _rewardsDestination;\n emit RewardsDestinationSet(_indexer, _rewardsDestination);\n }\n\n /**\n * @notice Sets the maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\n * @dev Emits a {MaxPOIStalenessSet} event\n * @param _maxPOIStaleness The max POI staleness in seconds\n */\n function _setMaxPOIStaleness(uint256 _maxPOIStaleness) internal {\n maxPOIStaleness = _maxPOIStaleness;\n emit MaxPOIStalenessSet(_maxPOIStaleness);\n }\n\n /**\n * @notice Gets the details of an allocation\n * @param _allocationId The id of the allocation\n */\n function _getAllocation(address _allocationId) internal view returns (Allocation.State memory) {\n return allocations.get(_allocationId);\n }\n\n /**\n * @notice Gets the details of a legacy allocation\n * @param _allocationId The id of the legacy allocation\n */\n function _getLegacyAllocation(address _allocationId) internal view returns (LegacyAllocation.State memory) {\n return legacyAllocations.get(_allocationId);\n }\n\n /**\n * @notice Encodes the allocation proof for EIP712 signing\n * @param _indexer The address of the indexer\n * @param _allocationId The id of the allocation\n */\n function _encodeAllocationProof(address _indexer, address _allocationId) internal view returns (bytes32) {\n return _hashTypedDataV4(keccak256(abi.encode(EIP712_ALLOCATION_PROOF_TYPEHASH, _indexer, _allocationId)));\n }\n\n /**\n * @notice Checks if an allocation is over-allocated\n * @param _indexer The address of the indexer\n * @param _delegationRatio The delegation ratio to consider when locking tokens\n * @return True if the allocation is over-allocated, false otherwise\n */\n function _isOverAllocated(address _indexer, uint32 _delegationRatio) internal view returns (bool) {\n return !allocationProvisionTracker.check(_graphStaking(), _indexer, _delegationRatio);\n }\n\n /**\n * @notice Verifies ownership of an allocation id by verifying an EIP712 allocation proof\n * @dev Requirements:\n * - Signer must be the allocation id address\n * @param _indexer The address of the indexer\n * @param _allocationId The id of the allocation\n * @param _proof The EIP712 proof, an EIP712 signed message of (indexer,allocationId)\n */\n function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) private view {\n address signer = ECDSA.recover(_encodeAllocationProof(_indexer, _allocationId), _proof);\n require(signer == _allocationId, AllocationManagerInvalidAllocationProof(signer, _allocationId));\n }\n}\n" + }, + "contracts/utilities/AllocationManagerStorage.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { Allocation } from \"../libraries/Allocation.sol\";\nimport { LegacyAllocation } from \"../libraries/LegacyAllocation.sol\";\n\nabstract contract AllocationManagerV1Storage {\n /// @notice Allocation details\n mapping(address allocationId => Allocation.State allocation) public allocations;\n\n /// @notice Legacy allocation details\n mapping(address allocationId => LegacyAllocation.State allocation) public legacyAllocations;\n\n /// @notice Tracks allocated tokens per indexer\n mapping(address indexer => uint256 tokens) public allocationProvisionTracker;\n\n /// @notice Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\n uint256 public maxPOIStaleness;\n\n /// @notice Destination of accrued indexing rewards\n mapping(address indexer => address destination) public rewardsDestination;\n\n /// @notice Track total tokens allocated per subgraph deployment\n /// @dev Used to calculate indexing rewards\n mapping(bytes32 subgraphDeploymentId => uint256 tokens) public subgraphAllocatedTokens;\n\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" + }, + "contracts/utilities/AttestationManager.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { AttestationManagerV1Storage } from \"./AttestationManagerStorage.sol\";\n\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { Initializable } from \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport { Attestation } from \"../libraries/Attestation.sol\";\n\n/**\n * @title AttestationManager contract\n * @notice A helper contract implementing attestation verification.\n * Uses a custom implementation of EIP712 for backwards compatibility with attestations.\n */\nabstract contract AttestationManager is Initializable, AttestationManagerV1Storage {\n /// @notice EIP712 type hash for Receipt struct\n bytes32 private constant RECEIPT_TYPE_HASH =\n keccak256(\"Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)\");\n\n /// @notice EIP712 domain type hash\n bytes32 private constant DOMAIN_TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\");\n\n /// @notice EIP712 domain name\n bytes32 private constant DOMAIN_NAME_HASH = keccak256(\"Graph Protocol\");\n\n /// @notice EIP712 domain version\n bytes32 private constant DOMAIN_VERSION_HASH = keccak256(\"0\");\n\n /// @notice EIP712 domain salt\n bytes32 private constant DOMAIN_SALT = 0xa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c2;\n\n /**\n * @dev Initialize the AttestationManager contract and parent contracts\n */\n // solhint-disable-next-line func-name-mixedcase\n function __AttestationManager_init() internal onlyInitializing {\n __AttestationManager_init_unchained();\n }\n\n /**\n * @dev Initialize the AttestationManager contract\n */\n // solhint-disable-next-line func-name-mixedcase\n function __AttestationManager_init_unchained() internal onlyInitializing {\n _domainSeparator = keccak256(\n abi.encode(\n DOMAIN_TYPE_HASH,\n DOMAIN_NAME_HASH,\n DOMAIN_VERSION_HASH,\n block.chainid,\n address(this),\n DOMAIN_SALT\n )\n );\n }\n\n /**\n * @dev Recover the signer address of the `_attestation`.\n * @param _attestation The attestation struct\n * @return Signer address\n */\n function _recoverSigner(Attestation.State memory _attestation) internal view returns (address) {\n // Obtain the hash of the fully-encoded message, per EIP-712 encoding\n Attestation.Receipt memory receipt = Attestation.Receipt(\n _attestation.requestCID,\n _attestation.responseCID,\n _attestation.subgraphDeploymentId\n );\n bytes32 messageHash = _encodeReceipt(receipt);\n\n // Obtain the signer of the fully-encoded EIP-712 message hash\n // NOTE: The signer of the attestation is the indexer that served the request\n return ECDSA.recover(messageHash, abi.encodePacked(_attestation.r, _attestation.s, _attestation.v));\n }\n\n /**\n * @dev Get the message hash that a indexer used to sign the receipt.\n * Encodes a receipt using a domain separator, as described on\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\n * @notice Return the message hash used to sign the receipt\n * @param _receipt Receipt returned by indexer and submitted by fisherman\n * @return Message hash used to sign the receipt\n */\n function _encodeReceipt(Attestation.Receipt memory _receipt) internal view returns (bytes32) {\n return\n keccak256(\n abi.encodePacked(\n \"\\x19\\x01\", // EIP-191 encoding pad, EIP-712 version 1\n _domainSeparator,\n keccak256(\n abi.encode(\n RECEIPT_TYPE_HASH,\n _receipt.requestCID,\n _receipt.responseCID,\n _receipt.subgraphDeploymentId\n ) // EIP 712-encoded message hash\n )\n )\n );\n }\n}\n" + }, + "contracts/utilities/AttestationManagerStorage.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nabstract contract AttestationManagerV1Storage {\n /// @dev EIP712 domain separator\n bytes32 internal _domainSeparator;\n\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" + }, + "contracts/utilities/Directory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDisputeManager } from \"../interfaces/IDisputeManager.sol\";\nimport { ISubgraphService } from \"../interfaces/ISubgraphService.sol\";\nimport { ITAPCollector } from \"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\";\nimport { ICuration } from \"@graphprotocol/contracts/contracts/curation/ICuration.sol\";\n\n/**\n * @title Directory contract\n * @notice This contract is meant to be inherited by {SubgraphService} contract.\n * It contains the addresses of the contracts that the contract interacts with.\n * Uses immutable variables to minimize gas costs.\n */\nabstract contract Directory {\n /// @notice The Subgraph Service contract address\n ISubgraphService private immutable SUBGRAPH_SERVICE;\n\n /// @notice The Dispute Manager contract address\n IDisputeManager private immutable DISPUTE_MANAGER;\n\n /// @notice The TAP Collector contract address\n /// @dev Required to collect payments via Graph Horizon payments protocol\n ITAPCollector private immutable TAP_COLLECTOR;\n\n /// @notice The Curation contract address\n /// @dev Required for curation fees distribution\n ICuration private immutable CURATION;\n\n /**\n * @notice Emitted when the Directory is initialized\n * @param subgraphService The Subgraph Service contract address\n * @param disputeManager The Dispute Manager contract address\n * @param tapCollector The TAP Collector contract address\n * @param curation The Curation contract address\n */\n event SubgraphServiceDirectoryInitialized(\n address subgraphService,\n address disputeManager,\n address tapCollector,\n address curation\n );\n\n /**\n * @notice Thrown when the caller is not the Dispute Manager\n * @param caller The caller address\n * @param disputeManager The Dispute Manager address\n */\n error DirectoryNotDisputeManager(address caller, address disputeManager);\n\n /**\n * @notice Checks that the caller is the Dispute Manager\n */\n modifier onlyDisputeManager() {\n require(\n msg.sender == address(DISPUTE_MANAGER),\n DirectoryNotDisputeManager(msg.sender, address(DISPUTE_MANAGER))\n );\n _;\n }\n\n /**\n * @notice Constructor for the Directory contract\n * @param subgraphService The Subgraph Service contract address\n * @param disputeManager The Dispute Manager contract address\n * @param tapCollector The TAP Collector contract address\n * @param curation The Curation contract address\n */\n constructor(address subgraphService, address disputeManager, address tapCollector, address curation) {\n SUBGRAPH_SERVICE = ISubgraphService(subgraphService);\n DISPUTE_MANAGER = IDisputeManager(disputeManager);\n TAP_COLLECTOR = ITAPCollector(tapCollector);\n CURATION = ICuration(curation);\n\n emit SubgraphServiceDirectoryInitialized(subgraphService, disputeManager, tapCollector, curation);\n }\n\n /**\n * @notice Returns the Subgraph Service contract address\n */\n function _subgraphService() internal view returns (ISubgraphService) {\n return SUBGRAPH_SERVICE;\n }\n\n /**\n * @notice Returns the Dispute Manager contract address\n */\n function _disputeManager() internal view returns (IDisputeManager) {\n return DISPUTE_MANAGER;\n }\n\n /**\n * @notice Returns the TAP Collector contract address\n */\n function _tapCollector() internal view returns (ITAPCollector) {\n return TAP_COLLECTOR;\n }\n\n /**\n * @notice Returns the Curation contract address\n */\n function _curation() internal view returns (ICuration) {\n return CURATION;\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "output": { + "sources": { + "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol": { + "ast": { + "absolutePath": "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol", + "exportedSymbols": { + "ITokenGateway": [ + 41 + ] + }, + "id": 42, + "license": "Apache-2.0", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.7", + ".6", + "||", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "913:33:0" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "ITokenGateway", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 41, + "linearizedBaseContracts": [ + 41 + ], + "name": "ITokenGateway", + "nameLocation": "958:13:0", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 2, + "nodeType": "StructuredDocumentation", + "src": "1298:81:0", + "text": "@notice event deprecated in favor of DepositFinalized and WithdrawalFinalized" + }, + "functionSelector": "d2ce7d65", + "id": 19, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "outboundTransfer", + "nameLocation": "1626:16:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4, + "mutability": "mutable", + "name": "token", + "nameLocation": "1660:5:0", + "nodeType": "VariableDeclaration", + "scope": 19, + "src": "1652:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1652:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6, + "mutability": "mutable", + "name": "to", + "nameLocation": "1683:2:0", + "nodeType": "VariableDeclaration", + "scope": 19, + "src": "1675:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1675:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8, + "mutability": "mutable", + "name": "amunt", + "nameLocation": "1703:5:0", + "nodeType": "VariableDeclaration", + "scope": 19, + "src": "1695:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1695:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10, + "mutability": "mutable", + "name": "maxas", + "nameLocation": "1726:5:0", + "nodeType": "VariableDeclaration", + "scope": 19, + "src": "1718:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1718:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12, + "mutability": "mutable", + "name": "gasPiceBid", + "nameLocation": "1749:10:0", + "nodeType": "VariableDeclaration", + "scope": 19, + "src": "1741:18:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1741:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14, + "mutability": "mutable", + "name": "data", + "nameLocation": "1784:4:0", + "nodeType": "VariableDeclaration", + "scope": 19, + "src": "1769:19:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 13, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1769:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1642:152:0" + }, + "returnParameters": { + "id": 18, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 19, + "src": "1821:12:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1821:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1820:14:0" + }, + "scope": 41, + "src": "1617:218:0", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "2e567b36", + "id": 32, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "finalizeInboundTransfer", + "nameLocation": "1850:23:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 30, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 21, + "mutability": "mutable", + "name": "token", + "nameLocation": "1891:5:0", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "1883:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 20, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1883:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 23, + "mutability": "mutable", + "name": "from", + "nameLocation": "1914:4:0", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "1906:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 22, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1906:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25, + "mutability": "mutable", + "name": "to", + "nameLocation": "1936:2:0", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "1928:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 24, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1928:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 27, + "mutability": "mutable", + "name": "amount", + "nameLocation": "1956:6:0", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "1948:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1948:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 29, + "mutability": "mutable", + "name": "data", + "nameLocation": "1987:4:0", + "nodeType": "VariableDeclaration", + "scope": 32, + "src": "1972:19:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 28, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1972:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1873:124:0" + }, + "returnParameters": { + "id": 31, + "nodeType": "ParameterList", + "parameters": [], + "src": "2014:0:0" + }, + "scope": 41, + "src": "1841:174:0", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 33, + "nodeType": "StructuredDocumentation", + "src": "2021:354:0", + "text": " @notice Calculate the address used when bridging an ERC20 token\n @dev the L1 and L2 address oracles may not always be in sync.\n For example, a custom token may have been registered but not deployed or the contract self destructed.\n @param l1ERC20 address of L1 token\n @return L2 address of a bridged ERC20 token" + }, + "functionSelector": "a7e28d48", + "id": 40, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "calculateL2TokenAddress", + "nameLocation": "2389:23:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 36, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 35, + "mutability": "mutable", + "name": "l1ERC20", + "nameLocation": "2421:7:0", + "nodeType": "VariableDeclaration", + "scope": 40, + "src": "2413:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 34, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2413:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2412:17:0" + }, + "returnParameters": { + "id": 39, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 38, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 40, + "src": "2453:7:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 37, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2453:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2452:9:0" + }, + "scope": 41, + "src": "2380:82:0", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 42, + "src": "948:1516:0", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "913:1552:0" + }, + "id": 0 + }, + "@graphprotocol/contracts/contracts/curation/ICuration.sol": { + "ast": { + "absolutePath": "@graphprotocol/contracts/contracts/curation/ICuration.sol", + "exportedSymbols": { + "ICuration": [ + 165 + ] + }, + "id": 166, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 43, + "literals": [ + "solidity", + "^", + "0.7", + ".6", + "||", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:33:1" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "ICuration", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 44, + "nodeType": "StructuredDocumentation", + "src": "81:101:1", + "text": " @title Curation Interface\n @dev Interface for the Curation contract (and L2Curation too)" + }, + "fullyImplemented": false, + "id": 165, + "linearizedBaseContracts": [ + 165 + ], + "name": "ICuration", + "nameLocation": "193:9:1", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 45, + "nodeType": "StructuredDocumentation", + "src": "237:143:1", + "text": " @notice Update the default reserve ratio to `_defaultReserveRatio`\n @param _defaultReserveRatio Reserve ratio (in PPM)" + }, + "functionSelector": "cd0ad4a2", + "id": 50, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setDefaultReserveRatio", + "nameLocation": "394:22:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 48, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 47, + "mutability": "mutable", + "name": "_defaultReserveRatio", + "nameLocation": "424:20:1", + "nodeType": "VariableDeclaration", + "scope": 50, + "src": "417:27:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 46, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "417:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "416:29:1" + }, + "returnParameters": { + "id": 49, + "nodeType": "ParameterList", + "parameters": [], + "src": "454:0:1" + }, + "scope": 165, + "src": "385:70:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 51, + "nodeType": "StructuredDocumentation", + "src": "461:175:1", + "text": " @notice Update the minimum deposit amount needed to intialize a new subgraph\n @param _minimumCurationDeposit Minimum amount of tokens required deposit" + }, + "functionSelector": "6536fe32", + "id": 56, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setMinimumCurationDeposit", + "nameLocation": "650:25:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 54, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 53, + "mutability": "mutable", + "name": "_minimumCurationDeposit", + "nameLocation": "684:23:1", + "nodeType": "VariableDeclaration", + "scope": 56, + "src": "676:31:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 52, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "676:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "675:33:1" + }, + "returnParameters": { + "id": 55, + "nodeType": "ParameterList", + "parameters": [], + "src": "717:0:1" + }, + "scope": 165, + "src": "641:77:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 57, + "nodeType": "StructuredDocumentation", + "src": "724:189:1", + "text": " @notice Set the curation tax percentage to charge when a curator deposits GRT tokens.\n @param _percentage Curation tax percentage charged when depositing GRT tokens" + }, + "functionSelector": "cd18119e", + "id": 62, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setCurationTaxPercentage", + "nameLocation": "927:24:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 60, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59, + "mutability": "mutable", + "name": "_percentage", + "nameLocation": "959:11:1", + "nodeType": "VariableDeclaration", + "scope": 62, + "src": "952:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 58, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "952:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "951:20:1" + }, + "returnParameters": { + "id": 61, + "nodeType": "ParameterList", + "parameters": [], + "src": "980:0:1" + }, + "scope": 165, + "src": "918:63:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 63, + "nodeType": "StructuredDocumentation", + "src": "987:184:1", + "text": " @notice Set the master copy to use as clones for the curation token.\n @param _curationTokenMaster Address of implementation contract to use for curation tokens" + }, + "functionSelector": "9b4d9f33", + "id": 68, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setCurationTokenMaster", + "nameLocation": "1185:22:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 66, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 65, + "mutability": "mutable", + "name": "_curationTokenMaster", + "nameLocation": "1216:20:1", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "1208:28:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 64, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1208:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1207:30:1" + }, + "returnParameters": { + "id": 67, + "nodeType": "ParameterList", + "parameters": [], + "src": "1246:0:1" + }, + "scope": 165, + "src": "1176:71:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 69, + "nodeType": "StructuredDocumentation", + "src": "1276:411:1", + "text": " @notice Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool.\n @param _subgraphDeploymentID Subgraph deployment pool from where to mint signal\n @param _tokensIn Amount of Graph Tokens to deposit\n @param _signalOutMin Expected minimum amount of signal to receive\n @return Amount of signal minted\n @return Amount of curation tax burned" + }, + "functionSelector": "375a54ab", + "id": 82, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mint", + "nameLocation": "1701:4:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 76, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 71, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "1723:21:1", + "nodeType": "VariableDeclaration", + "scope": 82, + "src": "1715:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 70, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1715:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 73, + "mutability": "mutable", + "name": "_tokensIn", + "nameLocation": "1762:9:1", + "nodeType": "VariableDeclaration", + "scope": 82, + "src": "1754:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 72, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1754:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 75, + "mutability": "mutable", + "name": "_signalOutMin", + "nameLocation": "1789:13:1", + "nodeType": "VariableDeclaration", + "scope": 82, + "src": "1781:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 74, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1781:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1705:103:1" + }, + "returnParameters": { + "id": 81, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 82, + "src": "1827:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 77, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1827:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 80, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 82, + "src": "1836:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1836:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1826:18:1" + }, + "scope": 165, + "src": "1692:153:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 83, + "nodeType": "StructuredDocumentation", + "src": "1851:323:1", + "text": " @notice Burn _signal from the SubgraphDeployment curation pool\n @param _subgraphDeploymentID SubgraphDeployment the curator is returning signal\n @param _signalIn Amount of signal to return\n @param _tokensOutMin Expected minimum amount of tokens to receive\n @return Tokens returned" + }, + "functionSelector": "24bdeec7", + "id": 94, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "burn", + "nameLocation": "2188:4:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 90, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 85, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "2201:21:1", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "2193:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 84, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2193:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 87, + "mutability": "mutable", + "name": "_signalIn", + "nameLocation": "2232:9:1", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "2224:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 86, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2224:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 89, + "mutability": "mutable", + "name": "_tokensOutMin", + "nameLocation": "2251:13:1", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "2243:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 88, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2243:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2192:73:1" + }, + "returnParameters": { + "id": 93, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 92, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "2284:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 91, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2284:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2283:9:1" + }, + "scope": 165, + "src": "2179:114:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 95, + "nodeType": "StructuredDocumentation", + "src": "2299:266:1", + "text": " @notice Assign Graph Tokens collected as curation fees to the curation pool reserve.\n @param _subgraphDeploymentID SubgraphDeployment where funds should be allocated as reserves\n @param _tokens Amount of Graph Tokens to add to reserves" + }, + "functionSelector": "81573288", + "id": 102, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "collect", + "nameLocation": "2579:7:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 100, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 97, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "2595:21:1", + "nodeType": "VariableDeclaration", + "scope": 102, + "src": "2587:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 96, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2587:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 99, + "mutability": "mutable", + "name": "_tokens", + "nameLocation": "2626:7:1", + "nodeType": "VariableDeclaration", + "scope": 102, + "src": "2618:15:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 98, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2618:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2586:48:1" + }, + "returnParameters": { + "id": 101, + "nodeType": "ParameterList", + "parameters": [], + "src": "2643:0:1" + }, + "scope": 165, + "src": "2570:74:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 103, + "nodeType": "StructuredDocumentation", + "src": "2672:213:1", + "text": " @notice Check if any GRT tokens are deposited for a SubgraphDeployment.\n @param _subgraphDeploymentID SubgraphDeployment to check if curated\n @return True if curated, false otherwise" + }, + "functionSelector": "4c4ea0ed", + "id": 110, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isCurated", + "nameLocation": "2899:9:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 106, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 105, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "2917:21:1", + "nodeType": "VariableDeclaration", + "scope": 110, + "src": "2909:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 104, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2909:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2908:31:1" + }, + "returnParameters": { + "id": 109, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 108, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 110, + "src": "2963:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 107, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2963:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2962:6:1" + }, + "scope": 165, + "src": "2890:79:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 111, + "nodeType": "StructuredDocumentation", + "src": "2975:290:1", + "text": " @notice Get the amount of signal a curator has in a curation pool.\n @param _curator Curator owning the signal tokens\n @param _subgraphDeploymentID Subgraph deployment curation pool\n @return Amount of signal owned by a curator for the subgraph deployment" + }, + "functionSelector": "9f94c667", + "id": 120, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getCuratorSignal", + "nameLocation": "3279:16:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 116, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 113, + "mutability": "mutable", + "name": "_curator", + "nameLocation": "3304:8:1", + "nodeType": "VariableDeclaration", + "scope": 120, + "src": "3296:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 112, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3296:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 115, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "3322:21:1", + "nodeType": "VariableDeclaration", + "scope": 120, + "src": "3314:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 114, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3314:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3295:49:1" + }, + "returnParameters": { + "id": 119, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 118, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 120, + "src": "3368:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 117, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3368:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3367:9:1" + }, + "scope": 165, + "src": "3270:107:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 121, + "nodeType": "StructuredDocumentation", + "src": "3383:208:1", + "text": " @notice Get the amount of signal in a curation pool.\n @param _subgraphDeploymentID Subgraph deployment curation pool\n @return Amount of signal minted for the subgraph deployment" + }, + "functionSelector": "99439fee", + "id": 128, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getCurationPoolSignal", + "nameLocation": "3605:21:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 124, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 123, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "3635:21:1", + "nodeType": "VariableDeclaration", + "scope": 128, + "src": "3627:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 122, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3627:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3626:31:1" + }, + "returnParameters": { + "id": 127, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 126, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 128, + "src": "3681:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 125, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3681:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3680:9:1" + }, + "scope": 165, + "src": "3596:94:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 129, + "nodeType": "StructuredDocumentation", + "src": "3696:210:1", + "text": " @notice Get the amount of token reserves in a curation pool.\n @param _subgraphDeploymentID Subgraph deployment curation pool\n @return Amount of token reserves in the curation pool" + }, + "functionSelector": "46e855da", + "id": 136, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getCurationPoolTokens", + "nameLocation": "3920:21:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 132, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 131, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "3950:21:1", + "nodeType": "VariableDeclaration", + "scope": 136, + "src": "3942:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 130, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3942:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3941:31:1" + }, + "returnParameters": { + "id": 135, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 134, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 136, + "src": "3996:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 133, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3996:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3995:9:1" + }, + "scope": 165, + "src": "3911:94:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 137, + "nodeType": "StructuredDocumentation", + "src": "4011:416:1", + "text": " @notice Calculate amount of signal that can be bought with tokens in a curation pool.\n This function considers and excludes the deposit tax.\n @param _subgraphDeploymentID Subgraph deployment to mint signal\n @param _tokensIn Amount of tokens used to mint signal\n @return Amount of signal that can be bought\n @return Amount of tokens that will be burned as curation tax" + }, + "functionSelector": "f049b900", + "id": 148, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "tokensToSignal", + "nameLocation": "4441:14:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 139, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "4464:21:1", + "nodeType": "VariableDeclaration", + "scope": 148, + "src": "4456:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 138, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4456:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 141, + "mutability": "mutable", + "name": "_tokensIn", + "nameLocation": "4495:9:1", + "nodeType": "VariableDeclaration", + "scope": 148, + "src": "4487:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 140, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4487:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4455:50:1" + }, + "returnParameters": { + "id": 147, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 144, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 148, + "src": "4529:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 143, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4529:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 146, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 148, + "src": "4538:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 145, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4538:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4528:18:1" + }, + "scope": 165, + "src": "4432:115:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 149, + "nodeType": "StructuredDocumentation", + "src": "4553:296:1", + "text": " @notice Calculate number of tokens to get when burning signal from a curation pool.\n @param _subgraphDeploymentID Subgraph deployment to burn signal\n @param _signalIn Amount of signal to burn\n @return Amount of tokens to get for the specified amount of signal" + }, + "functionSelector": "0faaf87f", + "id": 158, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "signalToTokens", + "nameLocation": "4863:14:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 154, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 151, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "4886:21:1", + "nodeType": "VariableDeclaration", + "scope": 158, + "src": "4878:29:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 150, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4878:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 153, + "mutability": "mutable", + "name": "_signalIn", + "nameLocation": "4917:9:1", + "nodeType": "VariableDeclaration", + "scope": 158, + "src": "4909:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 152, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4909:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4877:50:1" + }, + "returnParameters": { + "id": 157, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 156, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 158, + "src": "4951:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 155, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4951:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4950:9:1" + }, + "scope": 165, + "src": "4854:106:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 159, + "nodeType": "StructuredDocumentation", + "src": "4966:199:1", + "text": " @notice Tax charged when curators deposit funds.\n Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%)\n @return Curation tax percentage expressed in PPM" + }, + "functionSelector": "f115c427", + "id": 164, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "curationTaxPercentage", + "nameLocation": "5179:21:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 160, + "nodeType": "ParameterList", + "parameters": [], + "src": "5200:2:1" + }, + "returnParameters": { + "id": 163, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 162, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 164, + "src": "5226:6:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 161, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5226:6:1", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "5225:8:1" + }, + "scope": 165, + "src": "5170:64:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 166, + "src": "183:5053:1", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:5191:1" + }, + "id": 1 + }, + "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol": { + "ast": { + "absolutePath": "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol", + "exportedSymbols": { + "IEpochManager": [ + 220 + ] + }, + "id": 221, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 167, + "literals": [ + "solidity", + "^", + "0.7", + ".6", + "||", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:33:2" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IEpochManager", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 220, + "linearizedBaseContracts": [ + 220 + ], + "name": "IEpochManager", + "nameLocation": "91:13:2", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "54eea796", + "id": 172, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setEpochLength", + "nameLocation": "148:14:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 170, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 169, + "mutability": "mutable", + "name": "_epochLength", + "nameLocation": "171:12:2", + "nodeType": "VariableDeclaration", + "scope": 172, + "src": "163:20:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 168, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "163:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "162:22:2" + }, + "returnParameters": { + "id": 171, + "nodeType": "ParameterList", + "parameters": [], + "src": "193:0:2" + }, + "scope": 220, + "src": "139:55:2", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "c46e58eb", + "id": 175, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "runEpoch", + "nameLocation": "227:8:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 173, + "nodeType": "ParameterList", + "parameters": [], + "src": "235:2:2" + }, + "returnParameters": { + "id": 174, + "nodeType": "ParameterList", + "parameters": [], + "src": "246:0:2" + }, + "scope": 220, + "src": "218:29:2", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "1ce05d38", + "id": 180, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isCurrentEpochRun", + "nameLocation": "284:17:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 176, + "nodeType": "ParameterList", + "parameters": [], + "src": "301:2:2" + }, + "returnParameters": { + "id": 179, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 178, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 180, + "src": "327:4:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 177, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "327:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "326:6:2" + }, + "scope": 220, + "src": "275:58:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "8ae63d6d", + "id": 185, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "blockNum", + "nameLocation": "348:8:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 181, + "nodeType": "ParameterList", + "parameters": [], + "src": "356:2:2" + }, + "returnParameters": { + "id": 184, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 183, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 185, + "src": "382:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 182, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "382:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "381:9:2" + }, + "scope": 220, + "src": "339:52:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "85df51fd", + "id": 192, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "blockHash", + "nameLocation": "406:9:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 188, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 187, + "mutability": "mutable", + "name": "_block", + "nameLocation": "424:6:2", + "nodeType": "VariableDeclaration", + "scope": 192, + "src": "416:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 186, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "416:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "415:16:2" + }, + "returnParameters": { + "id": 191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 190, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 192, + "src": "455:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 189, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "455:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "454:9:2" + }, + "scope": 220, + "src": "397:67:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "76671808", + "id": 197, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "currentEpoch", + "nameLocation": "479:12:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 193, + "nodeType": "ParameterList", + "parameters": [], + "src": "491:2:2" + }, + "returnParameters": { + "id": 196, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 195, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 197, + "src": "517:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 194, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "517:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "516:9:2" + }, + "scope": 220, + "src": "470:56:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "ab93122c", + "id": 202, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "currentEpochBlock", + "nameLocation": "541:17:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 198, + "nodeType": "ParameterList", + "parameters": [], + "src": "558:2:2" + }, + "returnParameters": { + "id": 201, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 200, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 202, + "src": "584:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 199, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "584:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "583:9:2" + }, + "scope": 220, + "src": "532:61:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d0cfa46e", + "id": 207, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "currentEpochBlockSinceStart", + "nameLocation": "608:27:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 203, + "nodeType": "ParameterList", + "parameters": [], + "src": "635:2:2" + }, + "returnParameters": { + "id": 206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 205, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 207, + "src": "661:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 204, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "661:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "660:9:2" + }, + "scope": 220, + "src": "599:71:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "1b28126d", + "id": 214, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "epochsSince", + "nameLocation": "685:11:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 210, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 209, + "mutability": "mutable", + "name": "_epoch", + "nameLocation": "705:6:2", + "nodeType": "VariableDeclaration", + "scope": 214, + "src": "697:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 208, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "697:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "696:16:2" + }, + "returnParameters": { + "id": 213, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 212, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 214, + "src": "736:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 211, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "736:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "735:9:2" + }, + "scope": 220, + "src": "676:69:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "19c3b82d", + "id": 219, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "epochsSinceUpdate", + "nameLocation": "760:17:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 215, + "nodeType": "ParameterList", + "parameters": [], + "src": "777:2:2" + }, + "returnParameters": { + "id": 218, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 217, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 219, + "src": "803:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 216, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "803:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "802:9:2" + }, + "scope": 220, + "src": "751:61:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 221, + "src": "81:733:2", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:769:2" + }, + "id": 2 + }, + "@graphprotocol/contracts/contracts/governance/IController.sol": { + "ast": { + "absolutePath": "@graphprotocol/contracts/contracts/governance/IController.sol", + "exportedSymbols": { + "IController": [ + 279 + ] + }, + "id": 280, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 222, + "literals": [ + "solidity", + "^", + "0.7", + ".6", + "||", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:33:3" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IController", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 279, + "linearizedBaseContracts": [ + 279 + ], + "name": "IController", + "nameLocation": "91:11:3", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "4fc07d75", + "id": 227, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGovernor", + "nameLocation": "118:11:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 223, + "nodeType": "ParameterList", + "parameters": [], + "src": "129:2:3" + }, + "returnParameters": { + "id": 226, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 225, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 227, + "src": "155:7:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 224, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "155:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "154:9:3" + }, + "scope": 279, + "src": "109:55:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "e0e99292", + "id": 234, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setContractProxy", + "nameLocation": "202:16:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 232, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 229, + "mutability": "mutable", + "name": "_id", + "nameLocation": "227:3:3", + "nodeType": "VariableDeclaration", + "scope": 234, + "src": "219:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 228, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "219:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 231, + "mutability": "mutable", + "name": "_contractAddress", + "nameLocation": "240:16:3", + "nodeType": "VariableDeclaration", + "scope": 234, + "src": "232:24:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 230, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "232:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "218:39:3" + }, + "returnParameters": { + "id": 233, + "nodeType": "ParameterList", + "parameters": [], + "src": "266:0:3" + }, + "scope": 279, + "src": "193:74:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "9181df9c", + "id": 239, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "unsetContractProxy", + "nameLocation": "282:18:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 237, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 236, + "mutability": "mutable", + "name": "_id", + "nameLocation": "309:3:3", + "nodeType": "VariableDeclaration", + "scope": 239, + "src": "301:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 235, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "301:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "300:13:3" + }, + "returnParameters": { + "id": 238, + "nodeType": "ParameterList", + "parameters": [], + "src": "322:0:3" + }, + "scope": 279, + "src": "273:50:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "eb5dd94f", + "id": 246, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "updateController", + "nameLocation": "338:16:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 244, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 241, + "mutability": "mutable", + "name": "_id", + "nameLocation": "363:3:3", + "nodeType": "VariableDeclaration", + "scope": 246, + "src": "355:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 240, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "355:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 243, + "mutability": "mutable", + "name": "_controller", + "nameLocation": "376:11:3", + "nodeType": "VariableDeclaration", + "scope": 246, + "src": "368:19:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 242, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "368:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "354:34:3" + }, + "returnParameters": { + "id": 245, + "nodeType": "ParameterList", + "parameters": [], + "src": "397:0:3" + }, + "scope": 279, + "src": "329:69:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "f7641a5e", + "id": 253, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getContractProxy", + "nameLocation": "413:16:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 249, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 248, + "mutability": "mutable", + "name": "_id", + "nameLocation": "438:3:3", + "nodeType": "VariableDeclaration", + "scope": 253, + "src": "430:11:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 247, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "430:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "429:13:3" + }, + "returnParameters": { + "id": 252, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 251, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 253, + "src": "466:7:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 250, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "466:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "465:9:3" + }, + "scope": 279, + "src": "404:71:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "56371bd8", + "id": 258, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setPartialPaused", + "nameLocation": "512:16:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 256, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 255, + "mutability": "mutable", + "name": "_partialPaused", + "nameLocation": "534:14:3", + "nodeType": "VariableDeclaration", + "scope": 258, + "src": "529:19:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 254, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "529:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "528:21:3" + }, + "returnParameters": { + "id": 257, + "nodeType": "ParameterList", + "parameters": [], + "src": "558:0:3" + }, + "scope": 279, + "src": "503:56:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "16c38b3c", + "id": 263, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setPaused", + "nameLocation": "574:9:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 261, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 260, + "mutability": "mutable", + "name": "_paused", + "nameLocation": "589:7:3", + "nodeType": "VariableDeclaration", + "scope": 263, + "src": "584:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 259, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "584:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "583:14:3" + }, + "returnParameters": { + "id": 262, + "nodeType": "ParameterList", + "parameters": [], + "src": "606:0:3" + }, + "scope": 279, + "src": "565:42:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "48bde20c", + "id": 268, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setPauseGuardian", + "nameLocation": "622:16:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 266, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 265, + "mutability": "mutable", + "name": "_newPauseGuardian", + "nameLocation": "647:17:3", + "nodeType": "VariableDeclaration", + "scope": 268, + "src": "639:25:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 264, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "639:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "638:27:3" + }, + "returnParameters": { + "id": 267, + "nodeType": "ParameterList", + "parameters": [], + "src": "674:0:3" + }, + "scope": 279, + "src": "613:62:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "5c975abb", + "id": 273, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "paused", + "nameLocation": "690:6:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 269, + "nodeType": "ParameterList", + "parameters": [], + "src": "696:2:3" + }, + "returnParameters": { + "id": 272, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 271, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 273, + "src": "722:4:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 270, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "722:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "721:6:3" + }, + "scope": 279, + "src": "681:47:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "2e292fc7", + "id": 278, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "partialPaused", + "nameLocation": "743:13:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 274, + "nodeType": "ParameterList", + "parameters": [], + "src": "756:2:3" + }, + "returnParameters": { + "id": 277, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 276, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 278, + "src": "782:4:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 275, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "782:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "781:6:3" + }, + "scope": 279, + "src": "734:54:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 280, + "src": "81:709:3", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:745:3" + }, + "id": 3 + }, + "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol": { + "ast": { + "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", + "exportedSymbols": { + "IRewardsIssuer": [ + 314 + ] + }, + "id": 315, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 281, + "literals": [ + "solidity", + "^", + "0.7", + ".6", + "||", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:33:4" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IRewardsIssuer", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 314, + "linearizedBaseContracts": [ + 314 + ], + "name": "IRewardsIssuer", + "nameLocation": "91:14:4", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 282, + "nodeType": "StructuredDocumentation", + "src": "112:470:4", + "text": " @dev Get allocation data to calculate rewards issuance\n @param allocationId The allocation Id\n @return indexer The indexer address\n @return subgraphDeploymentId Subgraph deployment id for the allocation\n @return tokens Amount of allocated tokens\n @return accRewardsPerAllocatedToken Rewards snapshot\n @return accRewardsPending Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed" + }, + "functionSelector": "55c85269", + "id": 297, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAllocationData", + "nameLocation": "596:17:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 285, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 284, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "631:12:4", + "nodeType": "VariableDeclaration", + "scope": 297, + "src": "623:20:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 283, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "623:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "613:36:4" + }, + "returnParameters": { + "id": 296, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 287, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "718:7:4", + "nodeType": "VariableDeclaration", + "scope": 297, + "src": "710:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 286, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "710:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 289, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "747:20:4", + "nodeType": "VariableDeclaration", + "scope": 297, + "src": "739:28:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 288, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "739:7:4", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 291, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "789:6:4", + "nodeType": "VariableDeclaration", + "scope": 297, + "src": "781:14:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 290, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "781:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 293, + "mutability": "mutable", + "name": "accRewardsPerAllocatedToken", + "nameLocation": "817:27:4", + "nodeType": "VariableDeclaration", + "scope": 297, + "src": "809:35:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 292, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "809:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 295, + "mutability": "mutable", + "name": "accRewardsPending", + "nameLocation": "866:17:4", + "nodeType": "VariableDeclaration", + "scope": 297, + "src": "858:25:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 294, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "858:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "696:197:4" + }, + "scope": 314, + "src": "587:307:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 298, + "nodeType": "StructuredDocumentation", + "src": "900:200:4", + "text": " @notice Return the total amount of tokens allocated to subgraph.\n @param _subgraphDeploymentId Deployment Id for the subgraph\n @return Total tokens allocated to subgraph" + }, + "functionSelector": "e2e1e8e9", + "id": 305, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getSubgraphAllocatedTokens", + "nameLocation": "1114:26:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 301, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 300, + "mutability": "mutable", + "name": "_subgraphDeploymentId", + "nameLocation": "1149:21:4", + "nodeType": "VariableDeclaration", + "scope": 305, + "src": "1141:29:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 299, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1141:7:4", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1140:31:4" + }, + "returnParameters": { + "id": 304, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 303, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 305, + "src": "1195:7:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 302, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1195:7:4", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1194:9:4" + }, + "scope": 314, + "src": "1105:99:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 306, + "nodeType": "StructuredDocumentation", + "src": "1210:173:4", + "text": " @notice Whether or not an allocation is active (i.e open)\n @param _allocationId Allocation Id\n @return Whether or not the allocation is active" + }, + "functionSelector": "6a3ca383", + "id": 313, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isActiveAllocation", + "nameLocation": "1397:18:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 309, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 308, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "1424:13:4", + "nodeType": "VariableDeclaration", + "scope": 313, + "src": "1416:21:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 307, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1416:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1415:23:4" + }, + "returnParameters": { + "id": 312, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 311, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 313, + "src": "1462:4:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 310, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1462:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1461:6:4" + }, + "scope": 314, + "src": "1388:80:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 315, + "src": "81:1389:4", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:1425:4" + }, + "id": 4 + }, + "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol": { + "ast": { + "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol", + "exportedSymbols": { + "IRewardsManager": [ + 438 + ] + }, + "id": 439, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 316, + "literals": [ + "solidity", + "^", + "0.7", + ".6", + "||", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:33:5" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IRewardsManager", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 438, + "linearizedBaseContracts": [ + 438 + ], + "name": "IRewardsManager", + "nameLocation": "91:15:5", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IRewardsManager.Subgraph", + "documentation": { + "id": 317, + "nodeType": "StructuredDocumentation", + "src": "113:108:5", + "text": " @dev Stores accumulated rewards and snapshots related to a particular SubgraphDeployment." + }, + "id": 326, + "members": [ + { + "constant": false, + "id": 319, + "mutability": "mutable", + "name": "accRewardsForSubgraph", + "nameLocation": "260:21:5", + "nodeType": "VariableDeclaration", + "scope": 326, + "src": "252:29:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 318, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "252:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 321, + "mutability": "mutable", + "name": "accRewardsForSubgraphSnapshot", + "nameLocation": "299:29:5", + "nodeType": "VariableDeclaration", + "scope": 326, + "src": "291:37:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 320, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "291:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 323, + "mutability": "mutable", + "name": "accRewardsPerSignalSnapshot", + "nameLocation": "346:27:5", + "nodeType": "VariableDeclaration", + "scope": 326, + "src": "338:35:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 322, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "338:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 325, + "mutability": "mutable", + "name": "accRewardsPerAllocatedToken", + "nameLocation": "391:27:5", + "nodeType": "VariableDeclaration", + "scope": 326, + "src": "383:35:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 324, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "383:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Subgraph", + "nameLocation": "233:8:5", + "nodeType": "StructDefinition", + "scope": 438, + "src": "226:199:5", + "visibility": "public" + }, + { + "functionSelector": "1156bdc1", + "id": 331, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setIssuancePerBlock", + "nameLocation": "461:19:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 329, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 328, + "mutability": "mutable", + "name": "_issuancePerBlock", + "nameLocation": "489:17:5", + "nodeType": "VariableDeclaration", + "scope": 331, + "src": "481:25:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 327, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "481:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "480:27:5" + }, + "returnParameters": { + "id": 330, + "nodeType": "ParameterList", + "parameters": [], + "src": "516:0:5" + }, + "scope": 438, + "src": "452:65:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "4bbfc1c5", + "id": 336, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setMinimumSubgraphSignal", + "nameLocation": "532:24:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 334, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 333, + "mutability": "mutable", + "name": "_minimumSubgraphSignal", + "nameLocation": "565:22:5", + "nodeType": "VariableDeclaration", + "scope": 336, + "src": "557:30:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 332, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "557:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "556:32:5" + }, + "returnParameters": { + "id": 335, + "nodeType": "ParameterList", + "parameters": [], + "src": "597:0:5" + }, + "scope": 438, + "src": "523:75:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "93a90a1e", + "id": 341, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setSubgraphService", + "nameLocation": "613:18:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 339, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 338, + "mutability": "mutable", + "name": "_subgraphService", + "nameLocation": "640:16:5", + "nodeType": "VariableDeclaration", + "scope": 341, + "src": "632:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 337, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "632:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "631:26:5" + }, + "returnParameters": { + "id": 340, + "nodeType": "ParameterList", + "parameters": [], + "src": "666:0:5" + }, + "scope": 438, + "src": "604:63:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "0903c094", + "id": 346, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setSubgraphAvailabilityOracle", + "nameLocation": "705:29:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 344, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 343, + "mutability": "mutable", + "name": "_subgraphAvailabilityOracle", + "nameLocation": "743:27:5", + "nodeType": "VariableDeclaration", + "scope": 346, + "src": "735:35:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 342, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "735:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "734:37:5" + }, + "returnParameters": { + "id": 345, + "nodeType": "ParameterList", + "parameters": [], + "src": "780:0:5" + }, + "scope": 438, + "src": "696:85:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "1324a506", + "id": 353, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setDenied", + "nameLocation": "796:9:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 351, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 348, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "814:21:5", + "nodeType": "VariableDeclaration", + "scope": 353, + "src": "806:29:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 347, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "806:7:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 350, + "mutability": "mutable", + "name": "_deny", + "nameLocation": "842:5:5", + "nodeType": "VariableDeclaration", + "scope": 353, + "src": "837:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 349, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "837:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "805:43:5" + }, + "returnParameters": { + "id": 352, + "nodeType": "ParameterList", + "parameters": [], + "src": "857:0:5" + }, + "scope": 438, + "src": "787:71:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "1debaded", + "id": 362, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setDeniedMany", + "nameLocation": "873:13:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 360, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 356, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "906:21:5", + "nodeType": "VariableDeclaration", + "scope": 362, + "src": "887:40:5", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 354, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "887:7:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 355, + "nodeType": "ArrayTypeName", + "src": "887:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 359, + "mutability": "mutable", + "name": "_deny", + "nameLocation": "945:5:5", + "nodeType": "VariableDeclaration", + "scope": 362, + "src": "929:21:5", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr", + "typeString": "bool[]" + }, + "typeName": { + "baseType": { + "id": 357, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "929:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 358, + "nodeType": "ArrayTypeName", + "src": "929:6:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + } + }, + "visibility": "internal" + } + ], + "src": "886:65:5" + }, + "returnParameters": { + "id": 361, + "nodeType": "ParameterList", + "parameters": [], + "src": "960:0:5" + }, + "scope": 438, + "src": "864:97:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "e820e284", + "id": 369, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isDenied", + "nameLocation": "976:8:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 365, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 364, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "993:21:5", + "nodeType": "VariableDeclaration", + "scope": 369, + "src": "985:29:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 363, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "985:7:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "984:31:5" + }, + "returnParameters": { + "id": 368, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 367, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 369, + "src": "1039:4:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 366, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1039:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1038:6:5" + }, + "scope": 438, + "src": "967:78:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "e284f848", + "id": 374, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getNewRewardsPerSignal", + "nameLocation": "1082:22:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 370, + "nodeType": "ParameterList", + "parameters": [], + "src": "1104:2:5" + }, + "returnParameters": { + "id": 373, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 372, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 374, + "src": "1130:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 371, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1130:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1129:9:5" + }, + "scope": 438, + "src": "1073:66:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "a8cc0ee2", + "id": 379, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAccRewardsPerSignal", + "nameLocation": "1154:22:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 375, + "nodeType": "ParameterList", + "parameters": [], + "src": "1176:2:5" + }, + "returnParameters": { + "id": 378, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 377, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 379, + "src": "1202:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 376, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1202:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1201:9:5" + }, + "scope": 438, + "src": "1145:66:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "5c6cbd59", + "id": 386, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAccRewardsForSubgraph", + "nameLocation": "1226:24:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 382, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 381, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "1259:21:5", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "1251:29:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 380, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1251:7:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1250:31:5" + }, + "returnParameters": { + "id": 385, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 384, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 386, + "src": "1305:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 383, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1305:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1304:9:5" + }, + "scope": 438, + "src": "1217:97:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "702a280e", + "id": 395, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAccRewardsPerAllocatedToken", + "nameLocation": "1329:30:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 389, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 388, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "1368:21:5", + "nodeType": "VariableDeclaration", + "scope": 395, + "src": "1360:29:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 387, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1360:7:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1359:31:5" + }, + "returnParameters": { + "id": 394, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 391, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 395, + "src": "1414:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 390, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1414:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 393, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 395, + "src": "1423:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 392, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1423:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1413:18:5" + }, + "scope": 438, + "src": "1320:112:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "79ee54f7", + "id": 402, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getRewards", + "nameLocation": "1447:10:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 398, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 397, + "mutability": "mutable", + "name": "_allocationID", + "nameLocation": "1466:13:5", + "nodeType": "VariableDeclaration", + "scope": 402, + "src": "1458:21:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 396, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1458:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1457:23:5" + }, + "returnParameters": { + "id": 401, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 400, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 402, + "src": "1504:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 399, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1504:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1503:9:5" + }, + "scope": 438, + "src": "1438:75:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "c8a5f81e", + "id": 411, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "calcRewards", + "nameLocation": "1528:11:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 407, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 404, + "mutability": "mutable", + "name": "_tokens", + "nameLocation": "1548:7:5", + "nodeType": "VariableDeclaration", + "scope": 411, + "src": "1540:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 403, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1540:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 406, + "mutability": "mutable", + "name": "_accRewardsPerAllocatedToken", + "nameLocation": "1565:28:5", + "nodeType": "VariableDeclaration", + "scope": 411, + "src": "1557:36:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 405, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1557:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1539:55:5" + }, + "returnParameters": { + "id": 410, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 409, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 411, + "src": "1618:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 408, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1618:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1617:9:5" + }, + "scope": 438, + "src": "1519:108:5", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "c7d1117d", + "id": 416, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "updateAccRewardsPerSignal", + "nameLocation": "1664:25:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 412, + "nodeType": "ParameterList", + "parameters": [], + "src": "1689:2:5" + }, + "returnParameters": { + "id": 415, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 414, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 416, + "src": "1710:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 413, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1710:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1709:9:5" + }, + "scope": 438, + "src": "1655:64:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "db750926", + "id": 423, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "takeRewards", + "nameLocation": "1734:11:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 419, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 418, + "mutability": "mutable", + "name": "_allocationID", + "nameLocation": "1754:13:5", + "nodeType": "VariableDeclaration", + "scope": 423, + "src": "1746:21:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 417, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1746:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1745:23:5" + }, + "returnParameters": { + "id": 422, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 421, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 423, + "src": "1787:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 420, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1787:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1786:9:5" + }, + "scope": 438, + "src": "1725:71:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "1d1c2fec", + "id": 430, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onSubgraphSignalUpdate", + "nameLocation": "1831:22:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 426, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 425, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "1862:21:5", + "nodeType": "VariableDeclaration", + "scope": 430, + "src": "1854:29:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 424, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1854:7:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1853:31:5" + }, + "returnParameters": { + "id": 429, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 428, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 430, + "src": "1903:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 427, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1903:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1902:9:5" + }, + "scope": 438, + "src": "1822:90:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "eeac3e0e", + "id": 437, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onSubgraphAllocationUpdate", + "nameLocation": "1927:26:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 433, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 432, + "mutability": "mutable", + "name": "_subgraphDeploymentID", + "nameLocation": "1962:21:5", + "nodeType": "VariableDeclaration", + "scope": 437, + "src": "1954:29:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 431, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1954:7:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1953:31:5" + }, + "returnParameters": { + "id": 436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 435, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 437, + "src": "2003:7:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 434, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2003:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2002:9:5" + }, + "scope": 438, + "src": "1918:94:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 439, + "src": "81:1933:5", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:1969:5" + }, + "id": 5 + }, + "@graphprotocol/contracts/contracts/token/IGraphToken.sol": { + "ast": { + "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "exportedSymbols": { + "IERC20": [ + 5874 + ], + "IGraphToken": [ + 518 + ] + }, + "id": 519, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 440, + "literals": [ + "solidity", + "^", + "0.7", + ".6", + "||", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:33:6" + }, + { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "id": 441, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 519, + "sourceUnit": 5875, + "src": "81:56:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 442, + "name": "IERC20", + "nameLocations": [ + "164:6:6" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5874, + "src": "164:6:6" + }, + "id": 443, + "nodeType": "InheritanceSpecifier", + "src": "164:6:6" + } + ], + "canonicalName": "IGraphToken", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 518, + "linearizedBaseContracts": [ + 518, + 5874 + ], + "name": "IGraphToken", + "nameLocation": "149:11:6", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "42966c68", + "id": 448, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "burn", + "nameLocation": "214:4:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 446, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 445, + "mutability": "mutable", + "name": "amount", + "nameLocation": "227:6:6", + "nodeType": "VariableDeclaration", + "scope": 448, + "src": "219:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 444, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "219:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "218:16:6" + }, + "returnParameters": { + "id": 447, + "nodeType": "ParameterList", + "parameters": [], + "src": "243:0:6" + }, + "scope": 518, + "src": "205:39:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "79cc6790", + "id": 455, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "burnFrom", + "nameLocation": "259:8:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 453, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 450, + "mutability": "mutable", + "name": "_from", + "nameLocation": "276:5:6", + "nodeType": "VariableDeclaration", + "scope": 455, + "src": "268:13:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 449, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "268:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 452, + "mutability": "mutable", + "name": "amount", + "nameLocation": "291:6:6", + "nodeType": "VariableDeclaration", + "scope": 455, + "src": "283:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 451, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "283:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "267:31:6" + }, + "returnParameters": { + "id": 454, + "nodeType": "ParameterList", + "parameters": [], + "src": "307:0:6" + }, + "scope": 518, + "src": "250:58:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "40c10f19", + "id": 462, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mint", + "nameLocation": "323:4:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 460, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 457, + "mutability": "mutable", + "name": "_to", + "nameLocation": "336:3:6", + "nodeType": "VariableDeclaration", + "scope": 462, + "src": "328:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 456, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "328:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 459, + "mutability": "mutable", + "name": "_amount", + "nameLocation": "349:7:6", + "nodeType": "VariableDeclaration", + "scope": 462, + "src": "341:15:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 458, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "341:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "327:30:6" + }, + "returnParameters": { + "id": 461, + "nodeType": "ParameterList", + "parameters": [], + "src": "366:0:6" + }, + "scope": 518, + "src": "314:53:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "983b2d56", + "id": 467, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "addMinter", + "nameLocation": "407:9:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 465, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 464, + "mutability": "mutable", + "name": "_account", + "nameLocation": "425:8:6", + "nodeType": "VariableDeclaration", + "scope": 467, + "src": "417:16:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 463, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "417:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "416:18:6" + }, + "returnParameters": { + "id": 466, + "nodeType": "ParameterList", + "parameters": [], + "src": "443:0:6" + }, + "scope": 518, + "src": "398:46:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "3092afd5", + "id": 472, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "removeMinter", + "nameLocation": "459:12:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 470, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 469, + "mutability": "mutable", + "name": "_account", + "nameLocation": "480:8:6", + "nodeType": "VariableDeclaration", + "scope": 472, + "src": "472:16:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 468, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "472:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "471:18:6" + }, + "returnParameters": { + "id": 471, + "nodeType": "ParameterList", + "parameters": [], + "src": "498:0:6" + }, + "scope": 518, + "src": "450:49:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "98650275", + "id": 475, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "renounceMinter", + "nameLocation": "514:14:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 473, + "nodeType": "ParameterList", + "parameters": [], + "src": "528:2:6" + }, + "returnParameters": { + "id": 474, + "nodeType": "ParameterList", + "parameters": [], + "src": "539:0:6" + }, + "scope": 518, + "src": "505:35:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "aa271e1a", + "id": 482, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isMinter", + "nameLocation": "555:8:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 478, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 477, + "mutability": "mutable", + "name": "_account", + "nameLocation": "572:8:6", + "nodeType": "VariableDeclaration", + "scope": 482, + "src": "564:16:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 476, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "564:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "563:18:6" + }, + "returnParameters": { + "id": 481, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 480, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 482, + "src": "605:4:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 479, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "605:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "604:6:6" + }, + "scope": 518, + "src": "546:65:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d505accf", + "id": 499, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "permit", + "nameLocation": "647:6:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 497, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 484, + "mutability": "mutable", + "name": "_owner", + "nameLocation": "671:6:6", + "nodeType": "VariableDeclaration", + "scope": 499, + "src": "663:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 483, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "663:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 486, + "mutability": "mutable", + "name": "_spender", + "nameLocation": "695:8:6", + "nodeType": "VariableDeclaration", + "scope": 499, + "src": "687:16:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 485, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "687:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 488, + "mutability": "mutable", + "name": "_value", + "nameLocation": "721:6:6", + "nodeType": "VariableDeclaration", + "scope": 499, + "src": "713:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 487, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "713:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 490, + "mutability": "mutable", + "name": "_deadline", + "nameLocation": "745:9:6", + "nodeType": "VariableDeclaration", + "scope": 499, + "src": "737:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 489, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "737:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 492, + "mutability": "mutable", + "name": "_v", + "nameLocation": "770:2:6", + "nodeType": "VariableDeclaration", + "scope": 499, + "src": "764:8:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 491, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "764:5:6", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 494, + "mutability": "mutable", + "name": "_r", + "nameLocation": "790:2:6", + "nodeType": "VariableDeclaration", + "scope": 499, + "src": "782:10:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 493, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "782:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 496, + "mutability": "mutable", + "name": "_s", + "nameLocation": "810:2:6", + "nodeType": "VariableDeclaration", + "scope": 499, + "src": "802:10:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 495, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "802:7:6", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "653:165:6" + }, + "returnParameters": { + "id": 498, + "nodeType": "ParameterList", + "parameters": [], + "src": "827:0:6" + }, + "scope": 518, + "src": "638:190:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "39509351", + "id": 508, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "increaseAllowance", + "nameLocation": "867:17:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 504, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 501, + "mutability": "mutable", + "name": "spender", + "nameLocation": "893:7:6", + "nodeType": "VariableDeclaration", + "scope": 508, + "src": "885:15:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 500, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "885:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 503, + "mutability": "mutable", + "name": "addedValue", + "nameLocation": "910:10:6", + "nodeType": "VariableDeclaration", + "scope": 508, + "src": "902:18:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 502, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "902:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "884:37:6" + }, + "returnParameters": { + "id": 507, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 506, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 508, + "src": "940:4:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 505, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "940:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "939:6:6" + }, + "scope": 518, + "src": "858:88:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "a457c2d7", + "id": 517, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "decreaseAllowance", + "nameLocation": "961:17:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 513, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 510, + "mutability": "mutable", + "name": "spender", + "nameLocation": "987:7:6", + "nodeType": "VariableDeclaration", + "scope": 517, + "src": "979:15:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 509, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "979:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 512, + "mutability": "mutable", + "name": "subtractedValue", + "nameLocation": "1004:15:6", + "nodeType": "VariableDeclaration", + "scope": 517, + "src": "996:23:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 511, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "996:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "978:42:6" + }, + "returnParameters": { + "id": 516, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 515, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 517, + "src": "1039:4:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 514, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1039:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1038:6:6" + }, + "scope": 518, + "src": "952:93:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 519, + "src": "139:908:6", + "usedErrors": [], + "usedEvents": [ + 5808, + 5817 + ] + } + ], + "src": "46:1002:6" + }, + "id": 6 + }, + "@graphprotocol/contracts/contracts/utils/TokenUtils.sol": { + "ast": { + "absolutePath": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", + "exportedSymbols": { + "IERC20": [ + 5874 + ], + "IGraphToken": [ + 518 + ], + "TokenUtils": [ + 600 + ] + }, + "id": 601, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 520, + "literals": [ + "solidity", + "^", + "0.7", + ".6", + "||", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:33:7" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "file": "../token/IGraphToken.sol", + "id": 521, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 601, + "sourceUnit": 519, + "src": "81:34:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "TokenUtils", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 522, + "nodeType": "StructuredDocumentation", + "src": "117:239:7", + "text": " @title TokenUtils library\n @notice This library contains utility functions for handling tokens (transfers and burns).\n It is specifically adapted for the GraphToken, so does not need to handle edge cases\n for other tokens." + }, + "fullyImplemented": true, + "id": 600, + "linearizedBaseContracts": [ + 600 + ], + "name": "TokenUtils", + "nameLocation": "365:10:7", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 551, + "nodeType": "Block", + "src": "684:135:7", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 533, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 530, + "src": "698:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 534, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "708:1:7", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "698:11:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 550, + "nodeType": "IfStatement", + "src": "694:119:7", + "trueBody": { + "id": 549, + "nodeType": "Block", + "src": "711:102:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 539, + "name": "_from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 528, + "src": "758:5:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 542, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "773:4:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TokenUtils_$600", + "typeString": "library TokenUtils" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_TokenUtils_$600", + "typeString": "library TokenUtils" + } + ], + "id": 541, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "765:7:7", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 540, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "765:7:7", + "typeDescriptions": {} + } + }, + "id": 543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "765:13:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 544, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 530, + "src": "780:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 537, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 526, + "src": "733:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 538, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "745:12:7", + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 5873, + "src": "733:24:7", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "733:55:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "217472616e73666572", + "id": 546, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "790:11:7", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50", + "typeString": "literal_string \"!transfer\"" + }, + "value": "!transfer" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50", + "typeString": "literal_string \"!transfer\"" + } + ], + "id": 536, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "725:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 547, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "725:77:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 548, + "nodeType": "ExpressionStatement", + "src": "725:77:7" + } + ] + } + } + ] + }, + "documentation": { + "id": 523, + "nodeType": "StructuredDocumentation", + "src": "382:211:7", + "text": " @dev Pull tokens from an address to this contract.\n @param _graphToken Token to transfer\n @param _from Address sending the tokens\n @param _amount Amount of tokens to transfer" + }, + "id": 552, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "pullTokens", + "nameLocation": "607:10:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 531, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 526, + "mutability": "mutable", + "name": "_graphToken", + "nameLocation": "630:11:7", + "nodeType": "VariableDeclaration", + "scope": 552, + "src": "618:23:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + }, + "typeName": { + "id": 525, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 524, + "name": "IGraphToken", + "nameLocations": [ + "618:11:7" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 518, + "src": "618:11:7" + }, + "referencedDeclaration": 518, + "src": "618:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 528, + "mutability": "mutable", + "name": "_from", + "nameLocation": "651:5:7", + "nodeType": "VariableDeclaration", + "scope": 552, + "src": "643:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 527, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "643:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 530, + "mutability": "mutable", + "name": "_amount", + "nameLocation": "666:7:7", + "nodeType": "VariableDeclaration", + "scope": 552, + "src": "658:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 529, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "658:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "617:57:7" + }, + "returnParameters": { + "id": 532, + "nodeType": "ParameterList", + "parameters": [], + "src": "684:0:7" + }, + "scope": 600, + "src": "598:221:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 577, + "nodeType": "Block", + "src": "1134:114:7", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 565, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 563, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 560, + "src": "1148:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 564, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1158:1:7", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1148:11:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 576, + "nodeType": "IfStatement", + "src": "1144:98:7", + "trueBody": { + "id": 575, + "nodeType": "Block", + "src": "1161:81:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 569, + "name": "_to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 558, + "src": "1204:3:7", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 570, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 560, + "src": "1209:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 567, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 556, + "src": "1183:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1195:8:7", + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 5841, + "src": "1183:20:7", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1183:34:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "217472616e73666572", + "id": 572, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1219:11:7", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50", + "typeString": "literal_string \"!transfer\"" + }, + "value": "!transfer" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50", + "typeString": "literal_string \"!transfer\"" + } + ], + "id": 566, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1175:7:7", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 573, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1175:56:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 574, + "nodeType": "ExpressionStatement", + "src": "1175:56:7" + } + ] + } + } + ] + }, + "documentation": { + "id": 553, + "nodeType": "StructuredDocumentation", + "src": "825:220:7", + "text": " @dev Push tokens from this contract to a receiving address.\n @param _graphToken Token to transfer\n @param _to Address receiving the tokens\n @param _amount Amount of tokens to transfer" + }, + "id": 578, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "pushTokens", + "nameLocation": "1059:10:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 561, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 556, + "mutability": "mutable", + "name": "_graphToken", + "nameLocation": "1082:11:7", + "nodeType": "VariableDeclaration", + "scope": 578, + "src": "1070:23:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + }, + "typeName": { + "id": 555, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 554, + "name": "IGraphToken", + "nameLocations": [ + "1070:11:7" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 518, + "src": "1070:11:7" + }, + "referencedDeclaration": 518, + "src": "1070:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 558, + "mutability": "mutable", + "name": "_to", + "nameLocation": "1103:3:7", + "nodeType": "VariableDeclaration", + "scope": 578, + "src": "1095:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 557, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1095:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 560, + "mutability": "mutable", + "name": "_amount", + "nameLocation": "1116:7:7", + "nodeType": "VariableDeclaration", + "scope": 578, + "src": "1108:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 559, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1108:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1069:55:7" + }, + "returnParameters": { + "id": 562, + "nodeType": "ParameterList", + "parameters": [], + "src": "1134:0:7" + }, + "scope": 600, + "src": "1050:198:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 598, + "nodeType": "Block", + "src": "1475:83:7", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 589, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 587, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 584, + "src": "1489:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 588, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1499:1:7", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1489:11:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 597, + "nodeType": "IfStatement", + "src": "1485:67:7", + "trueBody": { + "id": 596, + "nodeType": "Block", + "src": "1502:50:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 593, + "name": "_amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 584, + "src": "1533:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 590, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 582, + "src": "1516:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1528:4:7", + "memberName": "burn", + "nodeType": "MemberAccess", + "referencedDeclaration": 448, + "src": "1516:16:7", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256) external" + } + }, + "id": 594, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1516:25:7", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 595, + "nodeType": "ExpressionStatement", + "src": "1516:25:7" + } + ] + } + } + ] + }, + "documentation": { + "id": 579, + "nodeType": "StructuredDocumentation", + "src": "1254:145:7", + "text": " @dev Burn tokens held by this contract.\n @param _graphToken Token to burn\n @param _amount Amount of tokens to burn" + }, + "id": 599, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "burnTokens", + "nameLocation": "1413:10:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 585, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 582, + "mutability": "mutable", + "name": "_graphToken", + "nameLocation": "1436:11:7", + "nodeType": "VariableDeclaration", + "scope": 599, + "src": "1424:23:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + }, + "typeName": { + "id": 581, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 580, + "name": "IGraphToken", + "nameLocations": [ + "1424:11:7" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 518, + "src": "1424:11:7" + }, + "referencedDeclaration": 518, + "src": "1424:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 584, + "mutability": "mutable", + "name": "_amount", + "nameLocation": "1457:7:7", + "nodeType": "VariableDeclaration", + "scope": 599, + "src": "1449:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 583, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1449:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1423:42:7" + }, + "returnParameters": { + "id": 586, + "nodeType": "ParameterList", + "parameters": [], + "src": "1475:0:7" + }, + "scope": 600, + "src": "1404:154:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 601, + "src": "357:1203:7", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:1515:7" + }, + "id": 7 + }, + "@graphprotocol/horizon/contracts/data-service/DataService.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataService.sol", + "exportedSymbols": { + "DataService": [ + 696 + ], + "DataServiceV1Storage": [ + 704 + ], + "GraphDirectory": [ + 4653 + ], + "IDataService": [ + 1318 + ], + "ProvisionManager": [ + 2128 + ] + }, + "id": 697, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 602, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:8" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol", + "file": "./interfaces/IDataService.sol", + "id": 604, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 697, + "sourceUnit": 1319, + "src": "70:61:8", + "symbolAliases": [ + { + "foreign": { + "id": 603, + "name": "IDataService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1318, + "src": "79:12:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol", + "file": "./DataServiceStorage.sol", + "id": 606, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 697, + "sourceUnit": 705, + "src": "133:64:8", + "symbolAliases": [ + { + "foreign": { + "id": 605, + "name": "DataServiceV1Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 704, + "src": "142:20:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", + "file": "../utilities/GraphDirectory.sol", + "id": 608, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 697, + "sourceUnit": 4654, + "src": "198:65:8", + "symbolAliases": [ + { + "foreign": { + "id": 607, + "name": "GraphDirectory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4653, + "src": "207:14:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol", + "file": "./utilities/ProvisionManager.sol", + "id": 610, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 697, + "sourceUnit": 2129, + "src": "264:68:8", + "symbolAliases": [ + { + "foreign": { + "id": 609, + "name": "ProvisionManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2128, + "src": "273:16:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 612, + "name": "GraphDirectory", + "nameLocations": [ + "1575:14:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4653, + "src": "1575:14:8" + }, + "id": 613, + "nodeType": "InheritanceSpecifier", + "src": "1575:14:8" + }, + { + "baseName": { + "id": 614, + "name": "ProvisionManager", + "nameLocations": [ + "1591:16:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2128, + "src": "1591:16:8" + }, + "id": 615, + "nodeType": "InheritanceSpecifier", + "src": "1591:16:8" + }, + { + "baseName": { + "id": 616, + "name": "DataServiceV1Storage", + "nameLocations": [ + "1609:20:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 704, + "src": "1609:20:8" + }, + "id": 617, + "nodeType": "InheritanceSpecifier", + "src": "1609:20:8" + }, + { + "baseName": { + "id": 618, + "name": "IDataService", + "nameLocations": [ + "1631:12:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1318, + "src": "1631:12:8" + }, + "id": 619, + "nodeType": "InheritanceSpecifier", + "src": "1631:12:8" + } + ], + "canonicalName": "DataService", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 611, + "nodeType": "StructuredDocumentation", + "src": "334:1207:8", + "text": " @title DataService contract\n @dev Implementation of the {IDataService} interface.\n @notice This implementation provides base functionality for a data service:\n - GraphDirectory, allows the data service to interact with Graph Horizon contracts\n - ProvisionManager, provides functionality to manage provisions\n The derived contract MUST implement all the interfaces described in {IDataService} and in\n accordance with the Data Service framework.\n @dev A note on upgradeability: this base contract can be inherited by upgradeable or non upgradeable\n contracts.\n - If the data service implementation is upgradeable, it must initialize the contract via an external\n initializer function with the `initializer` modifier that calls {__DataService_init} or\n {__DataService_init_unchained}. It's recommended the implementation constructor to also call\n {_disableInitializers} to prevent the implementation from being initialized.\n - If the data service implementation is NOT upgradeable, it must initialize the contract by calling\n {__DataService_init} or {__DataService_init_unchained} in the constructor. Note that the `initializer`\n will be required in the constructor." + }, + "fullyImplemented": false, + "id": 696, + "linearizedBaseContracts": [ + 696, + 1318, + 704, + 2128, + 2158, + 4653, + 5102 + ], + "name": "DataService", + "nameLocation": "1560:11:8", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 628, + "nodeType": "Block", + "src": "1902:2:8", + "statements": [] + }, + "documentation": { + "id": 620, + "nodeType": "StructuredDocumentation", + "src": "1650:188:8", + "text": " @dev Addresses in GraphDirectory are immutables, they can only be set in this constructor.\n @param controller The address of the Graph Horizon controller contract." + }, + "id": 629, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 625, + "name": "controller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 622, + "src": "1890:10:8", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 626, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 624, + "name": "GraphDirectory", + "nameLocations": [ + "1875:14:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4653, + "src": "1875:14:8" + }, + "nodeType": "ModifierInvocation", + "src": "1875:26:8" + } + ], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 623, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 622, + "mutability": "mutable", + "name": "controller", + "nameLocation": "1863:10:8", + "nodeType": "VariableDeclaration", + "scope": 629, + "src": "1855:18:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 621, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1855:7:8", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1854:20:8" + }, + "returnParameters": { + "id": 627, + "nodeType": "ParameterList", + "parameters": [], + "src": "1902:0:8" + }, + "scope": 696, + "src": "1843:61:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 641, + "nodeType": "Block", + "src": "2101:92:8", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 635, + "name": "__ProvisionManager_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1760, + "src": "2111:33:8", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2111:35:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 637, + "nodeType": "ExpressionStatement", + "src": "2111:35:8" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 638, + "name": "__DataService_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 649, + "src": "2156:28:8", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2156:30:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 640, + "nodeType": "ExpressionStatement", + "src": "2156:30:8" + } + ] + }, + "documentation": { + "id": 630, + "nodeType": "StructuredDocumentation", + "src": "1910:77:8", + "text": " @notice Initializes the contract and any parent contracts." + }, + "id": 642, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 633, + "kind": "modifierInvocation", + "modifierName": { + "id": 632, + "name": "onlyInitializing", + "nameLocations": [ + "2084:16:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "2084:16:8" + }, + "nodeType": "ModifierInvocation", + "src": "2084:16:8" + } + ], + "name": "__DataService_init", + "nameLocation": "2054:18:8", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 631, + "nodeType": "ParameterList", + "parameters": [], + "src": "2072:2:8" + }, + "returnParameters": { + "id": 634, + "nodeType": "ParameterList", + "parameters": [], + "src": "2101:0:8" + }, + "scope": 696, + "src": "2045:148:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 648, + "nodeType": "Block", + "src": "2375:2:8", + "statements": [] + }, + "documentation": { + "id": 643, + "nodeType": "StructuredDocumentation", + "src": "2199:52:8", + "text": " @notice Initializes the contract." + }, + "id": 649, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 646, + "kind": "modifierInvocation", + "modifierName": { + "id": 645, + "name": "onlyInitializing", + "nameLocations": [ + "2358:16:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "2358:16:8" + }, + "nodeType": "ModifierInvocation", + "src": "2358:16:8" + } + ], + "name": "__DataService_init_unchained", + "nameLocation": "2318:28:8", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 644, + "nodeType": "ParameterList", + "parameters": [], + "src": "2346:2:8" + }, + "returnParameters": { + "id": 647, + "nodeType": "ParameterList", + "parameters": [], + "src": "2375:0:8" + }, + "scope": 696, + "src": "2309:68:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1295 + ], + "body": { + "id": 660, + "nodeType": "Block", + "src": "2528:48:8", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 657, + "name": "_getThawingPeriodRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2050, + "src": "2545:22:8", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$_t_uint64_$", + "typeString": "function () view returns (uint64,uint64)" + } + }, + "id": 658, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2545:24:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint64_$_t_uint64_$", + "typeString": "tuple(uint64,uint64)" + } + }, + "functionReturnParameters": 656, + "id": 659, + "nodeType": "Return", + "src": "2538:31:8" + } + ] + }, + "documentation": { + "id": 650, + "nodeType": "StructuredDocumentation", + "src": "2383:68:8", + "text": " @notice See {IDataService-getThawingPeriodRange}." + }, + "functionSelector": "71ce020a", + "id": 661, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getThawingPeriodRange", + "nameLocation": "2465:21:8", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 651, + "nodeType": "ParameterList", + "parameters": [], + "src": "2486:2:8" + }, + "returnParameters": { + "id": 656, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 653, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 661, + "src": "2512:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 652, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2512:6:8", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 655, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 661, + "src": "2520:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 654, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2520:6:8", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "2511:16:8" + }, + "scope": 696, + "src": "2456:120:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1303 + ], + "body": { + "id": 672, + "nodeType": "Block", + "src": "2723:46:8", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 669, + "name": "_getVerifierCutRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2063, + "src": "2740:20:8", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$_t_uint32_$", + "typeString": "function () view returns (uint32,uint32)" + } + }, + "id": 670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2740:22:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$", + "typeString": "tuple(uint32,uint32)" + } + }, + "functionReturnParameters": 668, + "id": 671, + "nodeType": "Return", + "src": "2733:29:8" + } + ] + }, + "documentation": { + "id": 662, + "nodeType": "StructuredDocumentation", + "src": "2582:66:8", + "text": " @notice See {IDataService-getVerifierCutRange}." + }, + "functionSelector": "482468b7", + "id": 673, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVerifierCutRange", + "nameLocation": "2662:19:8", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 663, + "nodeType": "ParameterList", + "parameters": [], + "src": "2681:2:8" + }, + "returnParameters": { + "id": 668, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 665, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 673, + "src": "2707:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 664, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2707:6:8", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 667, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 673, + "src": "2715:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 666, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2715:6:8", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "2706:16:8" + }, + "scope": 696, + "src": "2653:116:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1311 + ], + "body": { + "id": 684, + "nodeType": "Block", + "src": "2926:50:8", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 681, + "name": "_getProvisionTokensRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2037, + "src": "2943:24:8", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$", + "typeString": "function () view returns (uint256,uint256)" + } + }, + "id": 682, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2943:26:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 680, + "id": 683, + "nodeType": "Return", + "src": "2936:33:8" + } + ] + }, + "documentation": { + "id": 674, + "nodeType": "StructuredDocumentation", + "src": "2775:70:8", + "text": " @notice See {IDataService-getProvisionTokensRange}." + }, + "functionSelector": "819ba366", + "id": 685, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getProvisionTokensRange", + "nameLocation": "2859:23:8", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 675, + "nodeType": "ParameterList", + "parameters": [], + "src": "2882:2:8" + }, + "returnParameters": { + "id": 680, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 677, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 685, + "src": "2908:7:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 676, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2908:7:8", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 679, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 685, + "src": "2917:7:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 678, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2917:7:8", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2907:18:8" + }, + "scope": 696, + "src": "2850:126:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1317 + ], + "body": { + "id": 694, + "nodeType": "Block", + "src": "3113:45:8", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 691, + "name": "_getDelegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2024, + "src": "3130:19:8", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$", + "typeString": "function () view returns (uint32)" + } + }, + "id": 692, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3130:21:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "functionReturnParameters": 690, + "id": 693, + "nodeType": "Return", + "src": "3123:28:8" + } + ] + }, + "documentation": { + "id": 686, + "nodeType": "StructuredDocumentation", + "src": "2982:65:8", + "text": " @notice See {IDataService-getDelegationRatio}." + }, + "functionSelector": "1ebb7c30", + "id": 695, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDelegationRatio", + "nameLocation": "3061:18:8", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 687, + "nodeType": "ParameterList", + "parameters": [], + "src": "3079:2:8" + }, + "returnParameters": { + "id": 690, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 689, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 695, + "src": "3105:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 688, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "3105:6:8", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "3104:8:8" + }, + "scope": 696, + "src": "3052:106:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 697, + "src": "1542:1618:8", + "usedErrors": [ + 1658, + 1665, + 1672, + 1677, + 4380, + 4865, + 4868 + ], + "usedEvents": [ + 1198, + 1203, + 1210, + 1217, + 1227, + 1234, + 1628, + 1633, + 1640, + 1647, + 4375, + 4873 + ] + } + ], + "src": "45:3116:8" + }, + "id": 8 + }, + "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol", + "exportedSymbols": { + "DataServiceV1Storage": [ + 704 + ] + }, + "id": 705, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 698, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:9" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "DataServiceV1Storage", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 704, + "linearizedBaseContracts": [ + 704 + ], + "name": "DataServiceV1Storage", + "nameLocation": "88:20:9", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "documentation": { + "id": 699, + "nodeType": "StructuredDocumentation", + "src": "115:57:9", + "text": "@dev Gap to allow adding variables in future upgrades" + }, + "id": 703, + "mutability": "mutable", + "name": "__gap", + "nameLocation": "197:5:9", + "nodeType": "VariableDeclaration", + "scope": 704, + "src": "177:25:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 700, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "177:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 702, + "length": { + "hexValue": "3530", + "id": 701, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "185:2:9", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "177:11:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + } + ], + "scope": 705, + "src": "70:135:9", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "45:161:9" + }, + "id": 9 + }, + "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol", + "exportedSymbols": { + "DataService": [ + 696 + ], + "DataServiceFees": [ + 1052 + ], + "DataServiceFeesV1Storage": [ + 1081 + ], + "IDataServiceFees": [ + 1381 + ], + "LinkedList": [ + 4087 + ], + "ProvisionTracker": [ + 1555 + ] + }, + "id": 1053, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 706, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:10" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", + "file": "../interfaces/IDataServiceFees.sol", + "id": 708, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1053, + "sourceUnit": 1382, + "src": "70:70:10", + "symbolAliases": [ + { + "foreign": { + "id": 707, + "name": "IDataServiceFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1381, + "src": "79:16:10", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol", + "file": "../libraries/ProvisionTracker.sol", + "id": 710, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1053, + "sourceUnit": 1556, + "src": "142:69:10", + "symbolAliases": [ + { + "foreign": { + "id": 709, + "name": "ProvisionTracker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1555, + "src": "151:16:10", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/LinkedList.sol", + "file": "../../libraries/LinkedList.sol", + "id": 712, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1053, + "sourceUnit": 4088, + "src": "212:60:10", + "symbolAliases": [ + { + "foreign": { + "id": 711, + "name": "LinkedList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4087, + "src": "221:10:10", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataService.sol", + "file": "../DataService.sol", + "id": 714, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1053, + "sourceUnit": 697, + "src": "274:49:10", + "symbolAliases": [ + { + "foreign": { + "id": 713, + "name": "DataService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 696, + "src": "283:11:10", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol", + "file": "./DataServiceFeesStorage.sol", + "id": 716, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1053, + "sourceUnit": 1082, + "src": "324:72:10", + "symbolAliases": [ + { + "foreign": { + "id": 715, + "name": "DataServiceFeesV1Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1081, + "src": "333:24:10", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 718, + "name": "DataService", + "nameLocations": [ + "698:11:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 696, + "src": "698:11:10" + }, + "id": 719, + "nodeType": "InheritanceSpecifier", + "src": "698:11:10" + }, + { + "baseName": { + "id": 720, + "name": "DataServiceFeesV1Storage", + "nameLocations": [ + "711:24:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1081, + "src": "711:24:10" + }, + "id": 721, + "nodeType": "InheritanceSpecifier", + "src": "711:24:10" + }, + { + "baseName": { + "id": 722, + "name": "IDataServiceFees", + "nameLocations": [ + "737:16:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1381, + "src": "737:16:10" + }, + "id": 723, + "nodeType": "InheritanceSpecifier", + "src": "737:16:10" + } + ], + "canonicalName": "DataServiceFees", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 717, + "nodeType": "StructuredDocumentation", + "src": "398:262:10", + "text": " @title DataServiceFees contract\n @dev Implementation of the {IDataServiceFees} interface.\n @notice Extension for the {IDataService} contract to handle payment collateralization\n using a Horizon provision. See {IDataServiceFees} for more details." + }, + "fullyImplemented": false, + "id": 1052, + "internalFunctionIDs": { + "958": 1, + "970": 2, + "1028": 3 + }, + "linearizedBaseContracts": [ + 1052, + 1381, + 1081, + 696, + 1318, + 704, + 2128, + 2158, + 4653, + 5102 + ], + "name": "DataServiceFees", + "nameLocation": "679:15:10", + "nodeType": "ContractDefinition", + "nodes": [ + { + "global": false, + "id": 728, + "libraryName": { + "id": 724, + "name": "ProvisionTracker", + "nameLocations": [ + "766:16:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1555, + "src": "766:16:10" + }, + "nodeType": "UsingForDirective", + "src": "760:55:10", + "typeName": { + "id": 727, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 725, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "795:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "787:27:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 726, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "806:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + { + "global": false, + "id": 732, + "libraryName": { + "id": 729, + "name": "LinkedList", + "nameLocations": [ + "826:10:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4087, + "src": "826:10:10" + }, + "nodeType": "UsingForDirective", + "src": "820:37:10", + "typeName": { + "id": 731, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 730, + "name": "LinkedList.List", + "nameLocations": [ + "841:10:10", + "852:4:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3813, + "src": "841:15:10" + }, + "referencedDeclaration": 3813, + "src": "841:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + } + } + }, + { + "baseFunctions": [ + 1380 + ], + "body": { + "id": 745, + "nodeType": "Block", + "src": "1006:62:10", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 740, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1030:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1034:6:10", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1030:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 742, + "name": "numClaimsToRelease", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 735, + "src": "1042:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 739, + "name": "_releaseStake", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 880, + "src": "1016:13:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1016:45:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 744, + "nodeType": "ExpressionStatement", + "src": "1016:45:10" + } + ] + }, + "documentation": { + "id": 733, + "nodeType": "StructuredDocumentation", + "src": "863:62:10", + "text": " @notice See {IDataServiceFees-releaseStake}" + }, + "functionSelector": "45f54485", + "id": 746, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "releaseStake", + "nameLocation": "939:12:10", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 737, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "997:8:10" + }, + "parameters": { + "id": 736, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 735, + "mutability": "mutable", + "name": "numClaimsToRelease", + "nameLocation": "960:18:10", + "nodeType": "VariableDeclaration", + "scope": 746, + "src": "952:26:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 734, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "952:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "951:28:10" + }, + "returnParameters": { + "id": 738, + "nodeType": "ParameterList", + "parameters": [], + "src": "1006:0:10" + }, + "scope": 1052, + "src": "930:138:10", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "external" + }, + { + "body": { + "id": 832, + "nodeType": "Block", + "src": "1717:761:10", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 759, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 757, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 751, + "src": "1735:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 758, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1746:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1735:12:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 760, + "name": "DataServiceFeesZeroTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1374, + "src": "1749:25:10", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1749:27:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 756, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1727:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 762, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1727:50:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 763, + "nodeType": "ExpressionStatement", + "src": "1727:50:10" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 767, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "1813:13:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1813:15:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + { + "id": 769, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 749, + "src": "1830:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 770, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 751, + "src": "1848:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 771, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2152, + "src": "1857:15:10", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "id": 764, + "name": "feesProvisionTracker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1063, + "src": "1787:20:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1808:4:10", + "memberName": "lock", + "nodeType": "MemberAccess", + "referencedDeclaration": 1480, + "src": "1787:25:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_contract$_IHorizonStaking_$2235_$_t_address_$_t_uint256_$_t_uint32_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "function (mapping(address => uint256),contract IHorizonStaking,address,uint256,uint32)" + } + }, + "id": 772, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1787:86:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 773, + "nodeType": "ExpressionStatement", + "src": "1787:86:10" + }, + { + "assignments": [ + 778 + ], + "declarations": [ + { + "constant": false, + "id": 778, + "mutability": "mutable", + "name": "claimsList", + "nameLocation": "1908:10:10", + "nodeType": "VariableDeclaration", + "scope": 832, + "src": "1884:34:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + }, + "typeName": { + "id": 777, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 776, + "name": "LinkedList.List", + "nameLocations": [ + "1884:10:10", + "1895:4:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3813, + "src": "1884:15:10" + }, + "referencedDeclaration": 3813, + "src": "1884:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + } + }, + "visibility": "internal" + } + ], + "id": 782, + "initialValue": { + "baseExpression": { + "id": 779, + "name": "claimsLists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1075, + "src": "1921:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_List_$3813_storage_$", + "typeString": "mapping(address => struct LinkedList.List storage ref)" + } + }, + "id": 781, + "indexExpression": { + "id": 780, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 749, + "src": "1933:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1921:29:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage", + "typeString": "struct LinkedList.List storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1884:66:10" + }, + { + "assignments": [ + 784 + ], + "declarations": [ + { + "constant": false, + "id": 784, + "mutability": "mutable", + "name": "claimId", + "nameLocation": "2006:7:10", + "nodeType": "VariableDeclaration", + "scope": 832, + "src": "1998:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 783, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1998:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 790, + "initialValue": { + "arguments": [ + { + "id": 786, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 749, + "src": "2035:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 787, + "name": "claimsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 778, + "src": "2053:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 788, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2064:5:10", + "memberName": "nonce", + "nodeType": "MemberAccess", + "referencedDeclaration": 3810, + "src": "2053:16:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 785, + "name": "_buildStakeClaimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1051, + "src": "2016:18:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (address,uint256) view returns (bytes32)" + } + }, + "id": 789, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2016:54:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1998:72:10" + }, + { + "expression": { + "id": 804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 791, + "name": "claims", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1069, + "src": "2080:6:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", + "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" + } + }, + "id": 793, + "indexExpression": { + "id": 792, + "name": "claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 784, + "src": "2087:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2080:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", + "typeString": "struct IDataServiceFees.StakeClaim storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 795, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 751, + "src": "2131:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 796, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "2163:5:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2169:9:10", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "2163:15:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 798, + "name": "_unlockTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 753, + "src": "2206:16:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 801, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2255:1:10", + "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": 800, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2247:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 799, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2247:7:10", + "typeDescriptions": {} + } + }, + "id": 802, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2247:10:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 794, + "name": "StakeClaim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1335, + "src": "2098:10:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_StakeClaim_$1335_storage_ptr_$", + "typeString": "type(struct IDataServiceFees.StakeClaim storage pointer)" + } + }, + "id": 803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "2123:6:10", + "2152:9:10", + "2192:12:10", + "2236:9:10" + ], + "names": [ + "tokens", + "createdAt", + "releasableAt", + "nextClaim" + ], + "nodeType": "FunctionCall", + "src": "2098:170:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "src": "2080:188:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", + "typeString": "struct IDataServiceFees.StakeClaim storage ref" + } + }, + "id": 805, + "nodeType": "ExpressionStatement", + "src": "2080:188:10" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 809, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 806, + "name": "claimsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 778, + "src": "2282:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 807, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2293:5:10", + "memberName": "count", + "nodeType": "MemberAccess", + "referencedDeclaration": 3812, + "src": "2282:16:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 808, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2302:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2282:21:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 818, + "nodeType": "IfStatement", + "src": "2278:70:10", + "trueBody": { + "expression": { + "id": 816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 810, + "name": "claims", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1069, + "src": "2305:6:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", + "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" + } + }, + "id": 813, + "indexExpression": { + "expression": { + "id": 811, + "name": "claimsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 778, + "src": "2312:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 812, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2323:4:10", + "memberName": "tail", + "nodeType": "MemberAccess", + "referencedDeclaration": 3808, + "src": "2312:15:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2305:23:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", + "typeString": "struct IDataServiceFees.StakeClaim storage ref" + } + }, + "id": 814, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "2329:9:10", + "memberName": "nextClaim", + "nodeType": "MemberAccess", + "referencedDeclaration": 1334, + "src": "2305:33:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 815, + "name": "claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 784, + "src": "2341:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2305:43:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 817, + "nodeType": "ExpressionStatement", + "src": "2305:43:10" + } + }, + { + "expression": { + "arguments": [ + { + "id": 822, + "name": "claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 784, + "src": "2377:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 819, + "name": "claimsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 778, + "src": "2358:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 821, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2369:7:10", + "memberName": "addTail", + "nodeType": "MemberAccess", + "referencedDeclaration": 3895, + "src": "2358:18:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_List_$3813_storage_ptr_$_t_bytes32_$returns$__$attached_to$_t_struct$_List_$3813_storage_ptr_$", + "typeString": "function (struct LinkedList.List storage pointer,bytes32)" + } + }, + "id": 823, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2358:27:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 824, + "nodeType": "ExpressionStatement", + "src": "2358:27:10" + }, + { + "eventCall": { + "arguments": [ + { + "id": 826, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 749, + "src": "2418:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 827, + "name": "claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 784, + "src": "2436:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 828, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 751, + "src": "2445:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 829, + "name": "_unlockTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 753, + "src": "2454:16:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 825, + "name": "StakeClaimLocked", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1346, + "src": "2401:16:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,bytes32,uint256,uint256)" + } + }, + "id": 830, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2401:70:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 831, + "nodeType": "EmitStatement", + "src": "2396:75:10" + } + ] + }, + "documentation": { + "id": 747, + "nodeType": "StructuredDocumentation", + "src": "1074:540:10", + "text": " @notice Locks stake for a service provider to back a payment.\n Creates a stake claim, which is stored in a linked list by service provider.\n @dev Requirements:\n - The associated provision must have enough available tokens to lock the stake.\n Emits a {StakeClaimLocked} event.\n @param _serviceProvider The address of the service provider\n @param _tokens The amount of tokens to lock in the claim\n @param _unlockTimestamp The timestamp when the tokens can be released" + }, + "id": 833, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_lockStake", + "nameLocation": "1628:10:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 754, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 749, + "mutability": "mutable", + "name": "_serviceProvider", + "nameLocation": "1647:16:10", + "nodeType": "VariableDeclaration", + "scope": 833, + "src": "1639:24:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 748, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1639:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 751, + "mutability": "mutable", + "name": "_tokens", + "nameLocation": "1673:7:10", + "nodeType": "VariableDeclaration", + "scope": 833, + "src": "1665:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 750, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1665:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 753, + "mutability": "mutable", + "name": "_unlockTimestamp", + "nameLocation": "1690:16:10", + "nodeType": "VariableDeclaration", + "scope": 833, + "src": "1682:24:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 752, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1682:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1638:69:10" + }, + "returnParameters": { + "id": 755, + "nodeType": "ParameterList", + "parameters": [], + "src": "1717:0:10" + }, + "scope": 1052, + "src": "1619:859:10", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 879, + "nodeType": "Block", + "src": "2638:439:10", + "statements": [ + { + "assignments": [ + 845 + ], + "declarations": [ + { + "constant": false, + "id": 845, + "mutability": "mutable", + "name": "claimsList", + "nameLocation": "2672:10:10", + "nodeType": "VariableDeclaration", + "scope": 879, + "src": "2648:34:10", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + }, + "typeName": { + "id": 844, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 843, + "name": "LinkedList.List", + "nameLocations": [ + "2648:10:10", + "2659:4:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3813, + "src": "2648:15:10" + }, + "referencedDeclaration": 3813, + "src": "2648:15:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + } + }, + "visibility": "internal" + } + ], + "id": 849, + "initialValue": { + "baseExpression": { + "id": 846, + "name": "claimsLists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1075, + "src": "2685:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_List_$3813_storage_$", + "typeString": "mapping(address => struct LinkedList.List storage ref)" + } + }, + "id": 848, + "indexExpression": { + "id": 847, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 836, + "src": "2697:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2685:29:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage", + "typeString": "struct LinkedList.List storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2648:66:10" + }, + { + "assignments": [ + 851, + 853 + ], + "declarations": [ + { + "constant": false, + "id": 851, + "mutability": "mutable", + "name": "claimsReleased", + "nameLocation": "2733:14:10", + "nodeType": "VariableDeclaration", + "scope": 879, + "src": "2725:22:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 850, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2725:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 853, + "mutability": "mutable", + "name": "data", + "nameLocation": "2762:4:10", + "nodeType": "VariableDeclaration", + "scope": 879, + "src": "2749:17:10", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 852, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2749:5:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 866, + "initialValue": { + "arguments": [ + { + "id": 856, + "name": "_getNextStakeClaim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1028, + "src": "2803:18:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + } + }, + { + "id": 857, + "name": "_processStakeClaim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 958, + "src": "2835:18:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes32,bytes memory) returns (bool,bytes memory)" + } + }, + { + "id": 858, + "name": "_deleteStakeClaim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 970, + "src": "2867:17:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 861, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2909:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "id": 862, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 836, + "src": "2912:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 859, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2898:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 860, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2902:6:10", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "2898:10:10", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2898:31:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 864, + "name": "_numClaimsToRelease", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 838, + "src": "2943:19:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + }, + { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes32,bytes memory) returns (bool,bytes memory)" + }, + { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 854, + "name": "claimsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 845, + "src": "2770:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 855, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2781:8:10", + "memberName": "traverse", + "nodeType": "MemberAccess", + "referencedDeclaration": 4086, + "src": "2770:19:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_List_$3813_storage_ptr_$_t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$_$_t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$_$_t_function_internal_nonpayable$_t_bytes32_$returns$__$_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$_t_bytes_memory_ptr_$attached_to$_t_struct$_List_$3813_storage_ptr_$", + "typeString": "function (struct LinkedList.List storage pointer,function (bytes32) view returns (bytes32),function (bytes32,bytes memory) returns (bool,bytes memory),function (bytes32),bytes memory,uint256) returns (uint256,bytes memory)" + } + }, + "id": 865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2770:202:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bytes_memory_ptr_$", + "typeString": "tuple(uint256,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2724:248:10" + }, + { + "eventCall": { + "arguments": [ + { + "id": 868, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 836, + "src": "3008:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 869, + "name": "claimsReleased", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 851, + "src": "3026:14:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 872, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 853, + "src": "3053:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 874, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3060:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 873, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3060:7:10", + "typeDescriptions": {} + } + } + ], + "id": 875, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3059:9:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "expression": { + "id": 870, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3042:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3046:6:10", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "3042:10:10", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 876, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3042:27:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 867, + "name": "StakeClaimsReleased", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1366, + "src": "2988:19:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256,uint256)" + } + }, + "id": 877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2988:82:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 878, + "nodeType": "EmitStatement", + "src": "2983:87:10" + } + ] + }, + "documentation": { + "id": 834, + "nodeType": "StructuredDocumentation", + "src": "2484:62:10", + "text": " @notice See {IDataServiceFees-releaseStake}" + }, + "id": 880, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_releaseStake", + "nameLocation": "2560:13:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 839, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 836, + "mutability": "mutable", + "name": "_serviceProvider", + "nameLocation": "2582:16:10", + "nodeType": "VariableDeclaration", + "scope": 880, + "src": "2574:24:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 835, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2574:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 838, + "mutability": "mutable", + "name": "_numClaimsToRelease", + "nameLocation": "2608:19:10", + "nodeType": "VariableDeclaration", + "scope": 880, + "src": "2600:27:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 837, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2600:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2573:55:10" + }, + "returnParameters": { + "id": 840, + "nodeType": "ParameterList", + "parameters": [], + "src": "2638:0:10" + }, + "scope": 1052, + "src": "2551:526:10", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 957, + "nodeType": "Block", + "src": "3654:624:10", + "statements": [ + { + "assignments": [ + 894 + ], + "declarations": [ + { + "constant": false, + "id": 894, + "mutability": "mutable", + "name": "claim", + "nameLocation": "3682:5:10", + "nodeType": "VariableDeclaration", + "scope": 957, + "src": "3664:23:10", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim" + }, + "typeName": { + "id": 893, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 892, + "name": "StakeClaim", + "nameLocations": [ + "3664:10:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1335, + "src": "3664:10:10" + }, + "referencedDeclaration": 1335, + "src": "3664:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", + "typeString": "struct IDataServiceFees.StakeClaim" + } + }, + "visibility": "internal" + } + ], + "id": 898, + "initialValue": { + "arguments": [ + { + "id": 896, + "name": "_claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 883, + "src": "3705:8:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 895, + "name": "_getStakeClaim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 999, + "src": "3690:14:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_struct$_StakeClaim_$1335_memory_ptr_$", + "typeString": "function (bytes32) view returns (struct IDataServiceFees.StakeClaim memory)" + } + }, + "id": 897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3690:24:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3664:50:10" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 903, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 899, + "name": "claim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 894, + "src": "3751:5:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "id": 900, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3757:12:10", + "memberName": "releasableAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 1332, + "src": "3751:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 901, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "3772:5:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3778:9:10", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "3772:15:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3751:36:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 910, + "nodeType": "IfStatement", + "src": "3747:103:10", + "trueBody": { + "id": 909, + "nodeType": "Block", + "src": "3789:61:10", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 904, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3811:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "expression": { + "id": 905, + "name": "LinkedList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4087, + "src": "3817:10:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LinkedList_$4087_$", + "typeString": "type(library LinkedList)" + } + }, + "id": 906, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3828:10:10", + "memberName": "NULL_BYTES", + "nodeType": "MemberAccess", + "referencedDeclaration": 3820, + "src": "3817:21:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "id": 907, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3810:29:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "functionReturnParameters": 891, + "id": 908, + "nodeType": "Return", + "src": "3803:36:10" + } + ] + } + }, + { + "assignments": [ + 912, + 914 + ], + "declarations": [ + { + "constant": false, + "id": 912, + "mutability": "mutable", + "name": "tokensClaimed", + "nameLocation": "3887:13:10", + "nodeType": "VariableDeclaration", + "scope": 957, + "src": "3879:21:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 911, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3879:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 914, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3910:15:10", + "nodeType": "VariableDeclaration", + "scope": 957, + "src": "3902:23:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 913, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3902:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 924, + "initialValue": { + "arguments": [ + { + "id": 917, + "name": "_acc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 885, + "src": "3940:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 919, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3947:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 918, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3947:7:10", + "typeDescriptions": {} + } + }, + { + "id": 921, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3956:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 920, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3956:7:10", + "typeDescriptions": {} + } + } + ], + "id": 922, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3946:18:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_address_$_$", + "typeString": "tuple(type(uint256),type(address))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_address_$_$", + "typeString": "tuple(type(uint256),type(address))" + } + ], + "expression": { + "id": 915, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3929:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 916, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3933:6:10", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "3929:10:10", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3929:36:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_address_payable_$", + "typeString": "tuple(uint256,address payable)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3878:87:10" + }, + { + "expression": { + "arguments": [ + { + "id": 928, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 914, + "src": "4024:15:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 929, + "name": "claim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 894, + "src": "4041:5:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "id": 930, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4047:6:10", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 1328, + "src": "4041:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 925, + "name": "feesProvisionTracker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1063, + "src": "3995:20:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4016:7:10", + "memberName": "release", + "nodeType": "MemberAccess", + "referencedDeclaration": 1518, + "src": "3995:28:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "function (mapping(address => uint256),address,uint256)" + } + }, + "id": 931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3995:59:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 932, + "nodeType": "ExpressionStatement", + "src": "3995:59:10" + }, + { + "eventCall": { + "arguments": [ + { + "id": 934, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 914, + "src": "4088:15:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 935, + "name": "_claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 883, + "src": "4105:8:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 936, + "name": "claim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 894, + "src": "4115:5:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "id": 937, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4121:6:10", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 1328, + "src": "4115:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 938, + "name": "claim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 894, + "src": "4129:5:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "id": 939, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4135:12:10", + "memberName": "releasableAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 1332, + "src": "4129:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 933, + "name": "StakeClaimReleased", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1357, + "src": "4069:18:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,bytes32,uint256,uint256)" + } + }, + "id": 940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4069:79:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 941, + "nodeType": "EmitStatement", + "src": "4064:84:10" + }, + { + "expression": { + "id": 951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 942, + "name": "_acc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 885, + "src": "4177:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 948, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 945, + "name": "tokensClaimed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 912, + "src": "4195:13:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "expression": { + "id": 946, + "name": "claim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 894, + "src": "4211:5:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "id": 947, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4217:6:10", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 1328, + "src": "4211:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4195:28:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 949, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 914, + "src": "4225:15:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 943, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "4184:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 944, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "4188:6:10", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "4184:10:10", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4184:57:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "src": "4177:64:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 952, + "nodeType": "ExpressionStatement", + "src": "4177:64:10" + }, + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 953, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4259:5:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "id": 954, + "name": "_acc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 885, + "src": "4266:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "id": 955, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4258:13:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "functionReturnParameters": 891, + "id": 956, + "nodeType": "Return", + "src": "4251:20:10" + } + ] + }, + "documentation": { + "id": 881, + "nodeType": "StructuredDocumentation", + "src": "3083:464:10", + "text": " @notice Processes a stake claim, releasing the tokens if the claim has expired.\n @dev This function is used as a callback in the stake claims linked list traversal.\n @param _claimId The id of the stake claim\n @param _acc The accumulator for the stake claims being processed\n @return Wether the stake claim is still locked, indicating that the traversal should continue or stop.\n @return The updated accumulator data" + }, + "id": 958, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_processStakeClaim", + "nameLocation": "3561:18:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 886, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 883, + "mutability": "mutable", + "name": "_claimId", + "nameLocation": "3588:8:10", + "nodeType": "VariableDeclaration", + "scope": 958, + "src": "3580:16:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 882, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3580:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 885, + "mutability": "mutable", + "name": "_acc", + "nameLocation": "3611:4:10", + "nodeType": "VariableDeclaration", + "scope": 958, + "src": "3598:17:10", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 884, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3598:5:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3579:37:10" + }, + "returnParameters": { + "id": 891, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 888, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 958, + "src": "3634:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 887, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3634:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 890, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 958, + "src": "3640:12:10", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 889, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3640:5:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3633:20:10" + }, + "scope": 1052, + "src": "3552:726:10", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 969, + "nodeType": "Block", + "src": "4541:40:10", + "statements": [ + { + "expression": { + "id": 967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "4551:23:10", + "subExpression": { + "baseExpression": { + "id": 964, + "name": "claims", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1069, + "src": "4558:6:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", + "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" + } + }, + "id": 966, + "indexExpression": { + "id": 965, + "name": "_claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 961, + "src": "4565:8:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4558:16:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", + "typeString": "struct IDataServiceFees.StakeClaim storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 968, + "nodeType": "ExpressionStatement", + "src": "4551:23:10" + } + ] + }, + "documentation": { + "id": 959, + "nodeType": "StructuredDocumentation", + "src": "4284:199:10", + "text": " @notice Deletes a stake claim.\n @dev This function is used as a callback in the stake claims linked list traversal.\n @param _claimId The ID of the stake claim to delete" + }, + "id": 970, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_deleteStakeClaim", + "nameLocation": "4497:17:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 962, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 961, + "mutability": "mutable", + "name": "_claimId", + "nameLocation": "4523:8:10", + "nodeType": "VariableDeclaration", + "scope": 970, + "src": "4515:16:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 960, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4515:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4514:18:10" + }, + "returnParameters": { + "id": 963, + "nodeType": "ParameterList", + "parameters": [], + "src": "4541:0:10" + }, + "scope": 1052, + "src": "4488:93:10", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 998, + "nodeType": "Block", + "src": "4784:160:10", + "statements": [ + { + "assignments": [ + 981 + ], + "declarations": [ + { + "constant": false, + "id": 981, + "mutability": "mutable", + "name": "claim", + "nameLocation": "4812:5:10", + "nodeType": "VariableDeclaration", + "scope": 998, + "src": "4794:23:10", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim" + }, + "typeName": { + "id": 980, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 979, + "name": "StakeClaim", + "nameLocations": [ + "4794:10:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1335, + "src": "4794:10:10" + }, + "referencedDeclaration": 1335, + "src": "4794:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", + "typeString": "struct IDataServiceFees.StakeClaim" + } + }, + "visibility": "internal" + } + ], + "id": 985, + "initialValue": { + "baseExpression": { + "id": 982, + "name": "claims", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1069, + "src": "4820:6:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", + "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" + } + }, + "id": 984, + "indexExpression": { + "id": 983, + "name": "_claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 973, + "src": "4827:8:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4820:16:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", + "typeString": "struct IDataServiceFees.StakeClaim storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4794:42:10" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 987, + "name": "claim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 981, + "src": "4854:5:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "id": 988, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4860:9:10", + "memberName": "createdAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 1330, + "src": "4854:15:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 989, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4873:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4854:20:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 992, + "name": "_claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 973, + "src": "4905:8:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 991, + "name": "DataServiceFeesClaimNotFound", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1371, + "src": "4876:28:10", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32) pure returns (error)" + } + }, + "id": 993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4876:38:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 986, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4846:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4846:69:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 995, + "nodeType": "ExpressionStatement", + "src": "4846:69:10" + }, + { + "expression": { + "id": 996, + "name": "claim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 981, + "src": "4932:5:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "functionReturnParameters": 978, + "id": 997, + "nodeType": "Return", + "src": "4925:12:10" + } + ] + }, + "documentation": { + "id": 971, + "nodeType": "StructuredDocumentation", + "src": "4587:109:10", + "text": " @notice Gets the details of a stake claim\n @param _claimId The ID of the stake claim" + }, + "id": 999, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getStakeClaim", + "nameLocation": "4710:14:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 974, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 973, + "mutability": "mutable", + "name": "_claimId", + "nameLocation": "4733:8:10", + "nodeType": "VariableDeclaration", + "scope": 999, + "src": "4725:16:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 972, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4725:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4724:18:10" + }, + "returnParameters": { + "id": 978, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 977, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 999, + "src": "4765:17:10", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim" + }, + "typeName": { + "id": 976, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 975, + "name": "StakeClaim", + "nameLocations": [ + "4765:10:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1335, + "src": "4765:10:10" + }, + "referencedDeclaration": 1335, + "src": "4765:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", + "typeString": "struct IDataServiceFees.StakeClaim" + } + }, + "visibility": "internal" + } + ], + "src": "4764:19:10" + }, + "scope": 1052, + "src": "4701:243:10", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 1027, + "nodeType": "Block", + "src": "5243:170:10", + "statements": [ + { + "assignments": [ + 1009 + ], + "declarations": [ + { + "constant": false, + "id": 1009, + "mutability": "mutable", + "name": "claim", + "nameLocation": "5271:5:10", + "nodeType": "VariableDeclaration", + "scope": 1027, + "src": "5253:23:10", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim" + }, + "typeName": { + "id": 1008, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1007, + "name": "StakeClaim", + "nameLocations": [ + "5253:10:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1335, + "src": "5253:10:10" + }, + "referencedDeclaration": 1335, + "src": "5253:10:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", + "typeString": "struct IDataServiceFees.StakeClaim" + } + }, + "visibility": "internal" + } + ], + "id": 1013, + "initialValue": { + "baseExpression": { + "id": 1010, + "name": "claims", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1069, + "src": "5279:6:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", + "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" + } + }, + "id": 1012, + "indexExpression": { + "id": 1011, + "name": "_claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1002, + "src": "5286:8:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5279:16:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", + "typeString": "struct IDataServiceFees.StakeClaim storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5253:42:10" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1018, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 1015, + "name": "claim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1009, + "src": "5313:5:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "id": 1016, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5319:9:10", + "memberName": "createdAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 1330, + "src": "5313:15:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 1017, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5332:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5313:20:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 1020, + "name": "_claimId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1002, + "src": "5364:8:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 1019, + "name": "DataServiceFeesClaimNotFound", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1371, + "src": "5335:28:10", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32) pure returns (error)" + } + }, + "id": 1021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5335:38:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 1014, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5305:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 1022, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5305:69:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1023, + "nodeType": "ExpressionStatement", + "src": "5305:69:10" + }, + { + "expression": { + "expression": { + "id": 1024, + "name": "claim", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1009, + "src": "5391:5:10", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", + "typeString": "struct IDataServiceFees.StakeClaim memory" + } + }, + "id": 1025, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5397:9:10", + "memberName": "nextClaim", + "nodeType": "MemberAccess", + "referencedDeclaration": 1334, + "src": "5391:15:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 1006, + "id": 1026, + "nodeType": "Return", + "src": "5384:22:10" + } + ] + }, + "documentation": { + "id": 1000, + "nodeType": "StructuredDocumentation", + "src": "4950:211:10", + "text": " @notice Gets the next stake claim in the linked list\n @dev This function is used as a callback in the stake claims linked list traversal.\n @param _claimId The ID of the stake claim" + }, + "id": 1028, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getNextStakeClaim", + "nameLocation": "5175:18:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1003, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1002, + "mutability": "mutable", + "name": "_claimId", + "nameLocation": "5202:8:10", + "nodeType": "VariableDeclaration", + "scope": 1028, + "src": "5194:16:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1001, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5194:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5193:18:10" + }, + "returnParameters": { + "id": 1006, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1005, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1028, + "src": "5234:7:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1004, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5234:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5233:9:10" + }, + "scope": 1052, + "src": "5166:247:10", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 1050, + "nodeType": "Block", + "src": "5690:92:10", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 1043, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "5742:4:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DataServiceFees_$1052", + "typeString": "contract DataServiceFees" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_DataServiceFees_$1052", + "typeString": "contract DataServiceFees" + } + ], + "id": 1042, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5734:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1041, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5734:7:10", + "typeDescriptions": {} + } + }, + "id": 1044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5734:13:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1045, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1031, + "src": "5749:16:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1046, + "name": "_nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1033, + "src": "5767:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 1039, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "5717:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 1040, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5721:12:10", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "5717:16:10", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 1047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5717:57:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 1038, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "5707:9:10", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 1048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5707:68:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 1037, + "id": 1049, + "nodeType": "Return", + "src": "5700:75:10" + } + ] + }, + "documentation": { + "id": 1029, + "nodeType": "StructuredDocumentation", + "src": "5419:165:10", + "text": " @notice Builds a stake claim ID\n @param _serviceProvider The address of the service provider\n @param _nonce A nonce of the stake claim" + }, + "id": 1051, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_buildStakeClaimId", + "nameLocation": "5598:18:10", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1034, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1031, + "mutability": "mutable", + "name": "_serviceProvider", + "nameLocation": "5625:16:10", + "nodeType": "VariableDeclaration", + "scope": 1051, + "src": "5617:24:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1030, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5617:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1033, + "mutability": "mutable", + "name": "_nonce", + "nameLocation": "5651:6:10", + "nodeType": "VariableDeclaration", + "scope": 1051, + "src": "5643:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1032, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5643:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5616:42:10" + }, + "returnParameters": { + "id": 1037, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1036, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1051, + "src": "5681:7:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1035, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5681:7:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5680:9:10" + }, + "scope": 1052, + "src": "5589:193:10", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 1053, + "src": "661:5123:10", + "usedErrors": [ + 1371, + 1374, + 1421, + 1658, + 1665, + 1672, + 1677, + 3827, + 3833, + 4380, + 4865, + 4868 + ], + "usedEvents": [ + 1198, + 1203, + 1210, + 1217, + 1227, + 1234, + 1346, + 1357, + 1366, + 1628, + 1633, + 1640, + 1647, + 4375, + 4873 + ] + } + ], + "src": "45:5740:10" + }, + "id": 10 + }, + "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol", + "exportedSymbols": { + "DataServiceFeesV1Storage": [ + 1081 + ], + "IDataServiceFees": [ + 1381 + ], + "LinkedList": [ + 4087 + ] + }, + "id": 1082, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1054, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:11" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", + "file": "../interfaces/IDataServiceFees.sol", + "id": 1056, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1082, + "sourceUnit": 1382, + "src": "70:70:11", + "symbolAliases": [ + { + "foreign": { + "id": 1055, + "name": "IDataServiceFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1381, + "src": "79:16:11", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/LinkedList.sol", + "file": "../../libraries/LinkedList.sol", + "id": 1058, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1082, + "sourceUnit": 4088, + "src": "142:60:11", + "symbolAliases": [ + { + "foreign": { + "id": 1057, + "name": "LinkedList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4087, + "src": "151:10:11", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "DataServiceFeesV1Storage", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 1059, + "nodeType": "StructuredDocumentation", + "src": "204:78:11", + "text": " @title Storage layout for the {DataServiceFees} extension contract." + }, + "fullyImplemented": true, + "id": 1081, + "linearizedBaseContracts": [ + 1081 + ], + "name": "DataServiceFeesV1Storage", + "nameLocation": "301:24:11", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "functionSelector": "cbe5f3f2", + "id": 1063, + "mutability": "mutable", + "name": "feesProvisionTracker", + "nameLocation": "390:20:11", + "nodeType": "VariableDeclaration", + "scope": 1081, + "src": "332:78:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 1062, + "keyName": "serviceProvider", + "keyNameLocation": "348:15:11", + "keyType": { + "id": 1060, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "340:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "332:50:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "tokens", + "valueNameLocation": "375:6:11", + "valueType": { + "id": 1061, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "367:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 1064, + "nodeType": "StructuredDocumentation", + "src": "417:79:11", + "text": "@notice List of all locked stake claims to be released to service providers" + }, + "functionSelector": "eff0f592", + "id": 1069, + "mutability": "mutable", + "name": "claims", + "nameLocation": "570:6:11", + "nodeType": "VariableDeclaration", + "scope": 1081, + "src": "501:75:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", + "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)" + }, + "typeName": { + "id": 1068, + "keyName": "claimId", + "keyNameLocation": "517:7:11", + "keyType": { + "id": 1065, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "509:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "501:61:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", + "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)" + }, + "valueName": "claim", + "valueNameLocation": "556:5:11", + "valueType": { + "id": 1067, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1066, + "name": "IDataServiceFees.StakeClaim", + "nameLocations": [ + "528:16:11", + "545:10:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1335, + "src": "528:27:11" + }, + "referencedDeclaration": 1335, + "src": "528:27:11", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", + "typeString": "struct IDataServiceFees.StakeClaim" + } + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 1070, + "nodeType": "StructuredDocumentation", + "src": "583:60:11", + "text": "@notice Service providers registered in the data service" + }, + "functionSelector": "13c474c9", + "id": 1075, + "mutability": "mutable", + "name": "claimsLists", + "nameLocation": "712:11:11", + "nodeType": "VariableDeclaration", + "scope": 1081, + "src": "648:75:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_List_$3813_storage_$", + "typeString": "mapping(address => struct LinkedList.List)" + }, + "typeName": { + "id": 1074, + "keyName": "serviceProvider", + "keyNameLocation": "664:15:11", + "keyType": { + "id": 1071, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "656:7:11", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "648:56:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_List_$3813_storage_$", + "typeString": "mapping(address => struct LinkedList.List)" + }, + "valueName": "list", + "valueNameLocation": "699:4:11", + "valueType": { + "id": 1073, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1072, + "name": "LinkedList.List", + "nameLocations": [ + "683:10:11", + "694:4:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3813, + "src": "683:15:11" + }, + "referencedDeclaration": 3813, + "src": "683:15:11", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + } + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 1076, + "nodeType": "StructuredDocumentation", + "src": "730:57:11", + "text": "@dev Gap to allow adding variables in future upgrades" + }, + "id": 1080, + "mutability": "mutable", + "name": "__gap", + "nameLocation": "812:5:11", + "nodeType": "VariableDeclaration", + "scope": 1081, + "src": "792:25:11", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 1077, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "792:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1079, + "length": { + "hexValue": "3530", + "id": 1078, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "800:2:11", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "792:11:11", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + } + ], + "scope": 1082, + "src": "283:537:11", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "45:776:11" + }, + "id": 11 + }, + "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol", + "exportedSymbols": { + "DataService": [ + 696 + ], + "DataServicePausableUpgradeable": [ + 1186 + ], + "IDataServicePausable": [ + 1409 + ], + "PausableUpgradeable": [ + 5427 + ] + }, + "id": 1187, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1083, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:12" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol", + "file": "../interfaces/IDataServicePausable.sol", + "id": 1085, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1187, + "sourceUnit": 1410, + "src": "70:78:12", + "symbolAliases": [ + { + "foreign": { + "id": 1084, + "name": "IDataServicePausable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1409, + "src": "79:20:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "id": 1087, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1187, + "sourceUnit": 5428, + "src": "150:104:12", + "symbolAliases": [ + { + "foreign": { + "id": 1086, + "name": "PausableUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5427, + "src": "159:19:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataService.sol", + "file": "../DataService.sol", + "id": 1089, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1187, + "sourceUnit": 697, + "src": "255:49:12", + "symbolAliases": [ + { + "foreign": { + "id": 1088, + "name": "DataService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 696, + "src": "264:11:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 1091, + "name": "PausableUpgradeable", + "nameLocations": [ + "547:19:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5427, + "src": "547:19:12" + }, + "id": 1092, + "nodeType": "InheritanceSpecifier", + "src": "547:19:12" + }, + { + "baseName": { + "id": 1093, + "name": "DataService", + "nameLocations": [ + "568:11:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 696, + "src": "568:11:12" + }, + "id": 1094, + "nodeType": "InheritanceSpecifier", + "src": "568:11:12" + }, + { + "baseName": { + "id": 1095, + "name": "IDataServicePausable", + "nameLocations": [ + "581:20:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1409, + "src": "581:20:12" + }, + "id": 1096, + "nodeType": "InheritanceSpecifier", + "src": "581:20:12" + } + ], + "canonicalName": "DataServicePausableUpgradeable", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 1090, + "nodeType": "StructuredDocumentation", + "src": "306:188:12", + "text": " @title DataServicePausableUpgradeable contract\n @dev Implementation of the {IDataServicePausable} interface.\n @dev Upgradeable version of the {DataServicePausable} contract." + }, + "fullyImplemented": false, + "id": 1186, + "linearizedBaseContracts": [ + 1186, + 1409, + 696, + 1318, + 704, + 2128, + 2158, + 4653, + 5427, + 5148, + 5102 + ], + "name": "DataServicePausableUpgradeable", + "nameLocation": "513:30:12", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "documentation": { + "id": 1097, + "nodeType": "StructuredDocumentation", + "src": "608:60:12", + "text": "@notice List of pause guardians and their allowed status" + }, + "functionSelector": "9384e078", + "id": 1101, + "mutability": "mutable", + "name": "pauseGuardians", + "nameLocation": "727:14:12", + "nodeType": "VariableDeclaration", + "scope": 1186, + "src": "673:68:12", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 1100, + "keyName": "pauseGuardian", + "keyNameLocation": "689:13:12", + "keyType": { + "id": 1098, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "681:7:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "673:46:12", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueName": "allowed", + "valueNameLocation": "711:7:12", + "valueType": { + "id": 1099, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "706:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "public" + }, + { + "body": { + "id": 1116, + "nodeType": "Block", + "src": "850:112:12", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 1105, + "name": "pauseGuardians", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1101, + "src": "868:14:12", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1108, + "indexExpression": { + "expression": { + "id": 1106, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "883:3:12", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1107, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "887:6:12", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "883:10:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "868:26:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "expression": { + "id": 1110, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "932:3:12", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1111, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "936:6:12", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "932:10:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1109, + "name": "DataServicePausableNotPauseGuardian", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1400, + "src": "896:35:12", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 1112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "896:47:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 1104, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "860:7:12", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 1113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "860:84:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1114, + "nodeType": "ExpressionStatement", + "src": "860:84:12" + }, + { + "id": 1115, + "nodeType": "PlaceholderStatement", + "src": "954:1:12" + } + ] + }, + "documentation": { + "id": 1102, + "nodeType": "StructuredDocumentation", + "src": "748:68:12", + "text": " @notice Checks if the caller is a pause guardian." + }, + "id": 1117, + "name": "onlyPauseGuardian", + "nameLocation": "830:17:12", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 1103, + "nodeType": "ParameterList", + "parameters": [], + "src": "847:2:12" + }, + "src": "821:141:12", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1404 + ], + "body": { + "id": 1129, + "nodeType": "Block", + "src": "1099:25:12", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1126, + "name": "_pause", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5402, + "src": "1109:6:12", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 1127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1109:8:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1128, + "nodeType": "ExpressionStatement", + "src": "1109:8:12" + } + ] + }, + "documentation": { + "id": 1118, + "nodeType": "StructuredDocumentation", + "src": "968:59:12", + "text": " @notice See {IDataServicePausable-pause}" + }, + "functionSelector": "8456cb59", + "id": 1130, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 1122, + "kind": "modifierInvocation", + "modifierName": { + "id": 1121, + "name": "onlyPauseGuardian", + "nameLocations": [ + "1067:17:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1117, + "src": "1067:17:12" + }, + "nodeType": "ModifierInvocation", + "src": "1067:17:12" + }, + { + "id": 1124, + "kind": "modifierInvocation", + "modifierName": { + "id": 1123, + "name": "whenNotPaused", + "nameLocations": [ + "1085:13:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5329, + "src": "1085:13:12" + }, + "nodeType": "ModifierInvocation", + "src": "1085:13:12" + } + ], + "name": "pause", + "nameLocation": "1041:5:12", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 1120, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1058:8:12" + }, + "parameters": { + "id": 1119, + "nodeType": "ParameterList", + "parameters": [], + "src": "1046:2:12" + }, + "returnParameters": { + "id": 1125, + "nodeType": "ParameterList", + "parameters": [], + "src": "1099:0:12" + }, + "scope": 1186, + "src": "1032:92:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1408 + ], + "body": { + "id": 1142, + "nodeType": "Block", + "src": "1260:27:12", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1139, + "name": "_unpause", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5426, + "src": "1270:8:12", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 1140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1270:10:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1141, + "nodeType": "ExpressionStatement", + "src": "1270:10:12" + } + ] + }, + "documentation": { + "id": 1131, + "nodeType": "StructuredDocumentation", + "src": "1130:59:12", + "text": " @notice See {IDataServicePausable-pause}" + }, + "functionSelector": "3f4ba83a", + "id": 1143, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 1135, + "kind": "modifierInvocation", + "modifierName": { + "id": 1134, + "name": "onlyPauseGuardian", + "nameLocations": [ + "1231:17:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1117, + "src": "1231:17:12" + }, + "nodeType": "ModifierInvocation", + "src": "1231:17:12" + }, + { + "id": 1137, + "kind": "modifierInvocation", + "modifierName": { + "id": 1136, + "name": "whenPaused", + "nameLocations": [ + "1249:10:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5337, + "src": "1249:10:12" + }, + "nodeType": "ModifierInvocation", + "src": "1249:10:12" + } + ], + "name": "unpause", + "nameLocation": "1203:7:12", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 1133, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1222:8:12" + }, + "parameters": { + "id": 1132, + "nodeType": "ParameterList", + "parameters": [], + "src": "1210:2:12" + }, + "returnParameters": { + "id": 1138, + "nodeType": "ParameterList", + "parameters": [], + "src": "1260:0:12" + }, + "scope": 1186, + "src": "1194:93:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 1155, + "nodeType": "Block", + "src": "1487:92:12", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1149, + "name": "__Pausable_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5321, + "src": "1497:25:12", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 1150, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1497:27:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1151, + "nodeType": "ExpressionStatement", + "src": "1497:27:12" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1152, + "name": "__DataServicePausable_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1163, + "src": "1534:36:12", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 1153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1534:38:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1154, + "nodeType": "ExpressionStatement", + "src": "1534:38:12" + } + ] + }, + "documentation": { + "id": 1144, + "nodeType": "StructuredDocumentation", + "src": "1293:72:12", + "text": " @notice Initializes the contract and parent contracts" + }, + "id": 1156, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 1147, + "kind": "modifierInvocation", + "modifierName": { + "id": 1146, + "name": "onlyInitializing", + "nameLocations": [ + "1470:16:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "1470:16:12" + }, + "nodeType": "ModifierInvocation", + "src": "1470:16:12" + } + ], + "name": "__DataServicePausable_init", + "nameLocation": "1432:26:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1145, + "nodeType": "ParameterList", + "parameters": [], + "src": "1458:2:12" + }, + "returnParameters": { + "id": 1148, + "nodeType": "ParameterList", + "parameters": [], + "src": "1487:0:12" + }, + "scope": 1186, + "src": "1423:156:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1162, + "nodeType": "Block", + "src": "1768:2:12", + "statements": [] + }, + "documentation": { + "id": 1157, + "nodeType": "StructuredDocumentation", + "src": "1585:51:12", + "text": " @notice Initializes the contract" + }, + "id": 1163, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 1160, + "kind": "modifierInvocation", + "modifierName": { + "id": 1159, + "name": "onlyInitializing", + "nameLocations": [ + "1751:16:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "1751:16:12" + }, + "nodeType": "ModifierInvocation", + "src": "1751:16:12" + } + ], + "name": "__DataServicePausable_init_unchained", + "nameLocation": "1703:36:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1158, + "nodeType": "ParameterList", + "parameters": [], + "src": "1739:2:12" + }, + "returnParameters": { + "id": 1161, + "nodeType": "ParameterList", + "parameters": [], + "src": "1768:0:12" + }, + "scope": 1186, + "src": "1694:76:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1184, + "nodeType": "Block", + "src": "2190:115:12", + "statements": [ + { + "expression": { + "id": 1177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 1173, + "name": "pauseGuardians", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1101, + "src": "2200:14:12", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 1175, + "indexExpression": { + "id": 1174, + "name": "_pauseGuardian", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1166, + "src": "2215:14:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2200:30:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1176, + "name": "_allowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1168, + "src": "2233:8:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2200:41:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1178, + "nodeType": "ExpressionStatement", + "src": "2200:41:12" + }, + { + "eventCall": { + "arguments": [ + { + "id": 1180, + "name": "_pauseGuardian", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1166, + "src": "2273:14:12", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1181, + "name": "_allowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1168, + "src": "2289:8:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 1179, + "name": "PauseGuardianSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1395, + "src": "2256:16:12", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$", + "typeString": "function (address,bool)" + } + }, + "id": 1182, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2256:42:12", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1183, + "nodeType": "EmitStatement", + "src": "2251:47:12" + } + ] + }, + "documentation": { + "id": 1164, + "nodeType": "StructuredDocumentation", + "src": "1776:320:12", + "text": " @notice Sets a pause guardian.\n @dev Internal function to be used by the derived contract to set pause guardians.\n Emits a {PauseGuardianSet} event.\n @param _pauseGuardian The address of the pause guardian\n @param _allowed The allowed status of the pause guardian" + }, + "id": 1185, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 1171, + "kind": "modifierInvocation", + "modifierName": { + "id": 1170, + "name": "whenNotPaused", + "nameLocations": [ + "2176:13:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5329, + "src": "2176:13:12" + }, + "nodeType": "ModifierInvocation", + "src": "2176:13:12" + } + ], + "name": "_setPauseGuardian", + "nameLocation": "2110:17:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1166, + "mutability": "mutable", + "name": "_pauseGuardian", + "nameLocation": "2136:14:12", + "nodeType": "VariableDeclaration", + "scope": 1185, + "src": "2128:22:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1165, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2128:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1168, + "mutability": "mutable", + "name": "_allowed", + "nameLocation": "2157:8:12", + "nodeType": "VariableDeclaration", + "scope": 1185, + "src": "2152:13:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1167, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2152:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2127:39:12" + }, + "returnParameters": { + "id": 1172, + "nodeType": "ParameterList", + "parameters": [], + "src": "2190:0:12" + }, + "scope": 1186, + "src": "2101:204:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 1187, + "src": "495:1812:12", + "usedErrors": [ + 1400, + 1658, + 1665, + 1672, + 1677, + 4380, + 4865, + 4868, + 5290, + 5293 + ], + "usedEvents": [ + 1198, + 1203, + 1210, + 1217, + 1227, + 1234, + 1395, + 1628, + 1633, + 1640, + 1647, + 4375, + 4873, + 5282, + 5287 + ] + } + ], + "src": "45:2263:12" + }, + "id": 12 + }, + "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol", + "exportedSymbols": { + "IDataService": [ + 1318 + ], + "IGraphPayments": [ + 2211 + ] + }, + "id": 1319, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1188, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:13" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "file": "../../interfaces/IGraphPayments.sol", + "id": 1190, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1319, + "sourceUnit": 2212, + "src": "70:69:13", + "symbolAliases": [ + { + "foreign": { + "id": 1189, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "79:14:13", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IDataService", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1191, + "nodeType": "StructuredDocumentation", + "src": "141:755:13", + "text": " @title Interface of the base {DataService} contract as defined by the Graph Horizon specification.\n @notice This interface provides a guardrail for contracts that use the Data Service framework\n to implement a data service on Graph Horizon. Much of the specification is intentionally loose\n to allow for greater flexibility when designing a data service. It's not possible to guarantee that\n an implementation will honor the Data Service framework guidelines so it's advised to always review\n the implementation code and the documentation.\n @dev This interface is expected to be inherited and extended by a data service interface. It can be\n used to interact with it however it's advised to use the more specific parent interface." + }, + "fullyImplemented": false, + "id": 1318, + "linearizedBaseContracts": [ + 1318 + ], + "name": "IDataService", + "nameLocation": "907:12:13", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 1192, + "nodeType": "StructuredDocumentation", + "src": "926:229:13", + "text": " @notice Emitted when a service provider is registered with the data service.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." + }, + "eventSelector": "159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa", + "id": 1198, + "name": "ServiceProviderRegistered", + "nameLocation": "1166:25:13", + "nodeType": "EventDefinition", + "parameters": { + "id": 1197, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1194, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1208:15:13", + "nodeType": "VariableDeclaration", + "scope": 1198, + "src": "1192:31:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1193, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1192:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1196, + "indexed": false, + "mutability": "mutable", + "name": "data", + "nameLocation": "1231:4:13", + "nodeType": "VariableDeclaration", + "scope": 1198, + "src": "1225:10:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1195, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1225:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1191:45:13" + }, + "src": "1160:77:13" + }, + { + "anonymous": false, + "documentation": { + "id": 1199, + "nodeType": "StructuredDocumentation", + "src": "1243:182:13", + "text": " @notice Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\n @param serviceProvider The address of the service provider." + }, + "eventSelector": "f53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a939", + "id": 1203, + "name": "ProvisionPendingParametersAccepted", + "nameLocation": "1436:34:13", + "nodeType": "EventDefinition", + "parameters": { + "id": 1202, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1201, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1487:15:13", + "nodeType": "VariableDeclaration", + "scope": 1203, + "src": "1471:31:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1200, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1471:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1470:33:13" + }, + "src": "1430:74:13" + }, + { + "anonymous": false, + "documentation": { + "id": 1204, + "nodeType": "StructuredDocumentation", + "src": "1510:222:13", + "text": " @notice Emitted when a service provider starts providing the service.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." + }, + "eventSelector": "d3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e7", + "id": 1210, + "name": "ServiceStarted", + "nameLocation": "1743:14:13", + "nodeType": "EventDefinition", + "parameters": { + "id": 1209, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1206, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1774:15:13", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "1758:31:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1205, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1758:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1208, + "indexed": false, + "mutability": "mutable", + "name": "data", + "nameLocation": "1797:4:13", + "nodeType": "VariableDeclaration", + "scope": 1210, + "src": "1791:10:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1207, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1791:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1757:45:13" + }, + "src": "1737:66:13" + }, + { + "anonymous": false, + "documentation": { + "id": 1211, + "nodeType": "StructuredDocumentation", + "src": "1809:221:13", + "text": " @notice Emitted when a service provider stops providing the service.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." + }, + "eventSelector": "73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a", + "id": 1217, + "name": "ServiceStopped", + "nameLocation": "2041:14:13", + "nodeType": "EventDefinition", + "parameters": { + "id": 1216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1213, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2072:15:13", + "nodeType": "VariableDeclaration", + "scope": 1217, + "src": "2056:31:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1212, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2056:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1215, + "indexed": false, + "mutability": "mutable", + "name": "data", + "nameLocation": "2095:4:13", + "nodeType": "VariableDeclaration", + "scope": 1217, + "src": "2089:10:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1214, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2089:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2055:45:13" + }, + "src": "2035:66:13" + }, + { + "anonymous": false, + "documentation": { + "id": 1218, + "nodeType": "StructuredDocumentation", + "src": "2107:276:13", + "text": " @notice Emitted when a service provider collects payment.\n @param serviceProvider The address of the service provider.\n @param feeType The type of fee to collect as defined in {GraphPayments}.\n @param tokens The amount of tokens collected." + }, + "eventSelector": "54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5", + "id": 1227, + "name": "ServicePaymentCollected", + "nameLocation": "2394:23:13", + "nodeType": "EventDefinition", + "parameters": { + "id": 1226, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1220, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2443:15:13", + "nodeType": "VariableDeclaration", + "scope": 1227, + "src": "2427:31:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1219, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2427:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1223, + "indexed": true, + "mutability": "mutable", + "name": "feeType", + "nameLocation": "2504:7:13", + "nodeType": "VariableDeclaration", + "scope": 1227, + "src": "2468:43:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 1222, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1221, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "2468:14:13", + "2483:12:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "2468:27:13" + }, + "referencedDeclaration": 2166, + "src": "2468:27:13", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1225, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2529:6:13", + "nodeType": "VariableDeclaration", + "scope": 1227, + "src": "2521:14:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1224, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2521:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2417:124:13" + }, + "src": "2388:154:13" + }, + { + "anonymous": false, + "documentation": { + "id": 1228, + "nodeType": "StructuredDocumentation", + "src": "2548:188:13", + "text": " @notice Emitted when a service provider is slashed.\n @param serviceProvider The address of the service provider.\n @param tokens The amount of tokens slashed." + }, + "eventSelector": "02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c58", + "id": 1234, + "name": "ServiceProviderSlashed", + "nameLocation": "2747:22:13", + "nodeType": "EventDefinition", + "parameters": { + "id": 1233, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1230, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2786:15:13", + "nodeType": "VariableDeclaration", + "scope": 1234, + "src": "2770:31:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1229, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2770:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1232, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2811:6:13", + "nodeType": "VariableDeclaration", + "scope": 1234, + "src": "2803:14:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1231, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2803:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2769:49:13" + }, + "src": "2741:78:13" + }, + { + "documentation": { + "id": 1235, + "nodeType": "StructuredDocumentation", + "src": "2825:903:13", + "text": " @notice Registers a service provider with the data service. The service provider can now\n start providing the service.\n @dev Before registering, the service provider must have created a provision in the\n Graph Horizon staking contract with parameters that are compatible with the data service.\n Verifies provision parameters and rejects registration in the event they are not valid.\n Emits a {ServiceProviderRegistered} event.\n NOTE: Failing to accept the provision will result in the service provider operating\n on an unverified provision. Depending on of the data service this can be a security\n risk as the protocol won't be able to guarantee economic security for the consumer.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." + }, + "functionSelector": "24b8fbf6", + "id": 1242, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "register", + "nameLocation": "3742:8:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1240, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1237, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3759:15:13", + "nodeType": "VariableDeclaration", + "scope": 1242, + "src": "3751:23:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1236, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3751:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1239, + "mutability": "mutable", + "name": "data", + "nameLocation": "3791:4:13", + "nodeType": "VariableDeclaration", + "scope": 1242, + "src": "3776:19:13", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1238, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3776:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3750:46:13" + }, + "returnParameters": { + "id": 1241, + "nodeType": "ParameterList", + "parameters": [], + "src": "3805:0:13" + }, + "scope": 1318, + "src": "3733:73:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1243, + "nodeType": "StructuredDocumentation", + "src": "3812:472:13", + "text": " @notice Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking\n contract}.\n @dev Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}.\n Emits a {ProvisionPendingParametersAccepted} event.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." + }, + "functionSelector": "ce0fc0cc", + "id": 1250, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "acceptProvisionPendingParameters", + "nameLocation": "4298:32:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1248, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1245, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "4339:15:13", + "nodeType": "VariableDeclaration", + "scope": 1250, + "src": "4331:23:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1244, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4331:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1247, + "mutability": "mutable", + "name": "data", + "nameLocation": "4371:4:13", + "nodeType": "VariableDeclaration", + "scope": 1250, + "src": "4356:19:13", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1246, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4356:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4330:46:13" + }, + "returnParameters": { + "id": 1249, + "nodeType": "ParameterList", + "parameters": [], + "src": "4385:0:13" + }, + "scope": 1318, + "src": "4289:97:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1251, + "nodeType": "StructuredDocumentation", + "src": "4392:251:13", + "text": " @notice Service provider starts providing the service.\n @dev Emits a {ServiceStarted} event.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." + }, + "functionSelector": "dedf6726", + "id": 1258, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "startService", + "nameLocation": "4657:12:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1256, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1253, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "4678:15:13", + "nodeType": "VariableDeclaration", + "scope": 1258, + "src": "4670:23:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1252, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4670:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1255, + "mutability": "mutable", + "name": "data", + "nameLocation": "4710:4:13", + "nodeType": "VariableDeclaration", + "scope": 1258, + "src": "4695:19:13", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1254, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4695:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4669:46:13" + }, + "returnParameters": { + "id": 1257, + "nodeType": "ParameterList", + "parameters": [], + "src": "4724:0:13" + }, + "scope": 1318, + "src": "4648:77:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1259, + "nodeType": "StructuredDocumentation", + "src": "4731:250:13", + "text": " @notice Service provider stops providing the service.\n @dev Emits a {ServiceStopped} event.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." + }, + "functionSelector": "8180083b", + "id": 1266, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "stopService", + "nameLocation": "4995:11:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1264, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1261, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "5015:15:13", + "nodeType": "VariableDeclaration", + "scope": 1266, + "src": "5007:23:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1260, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5007:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1263, + "mutability": "mutable", + "name": "data", + "nameLocation": "5047:4:13", + "nodeType": "VariableDeclaration", + "scope": 1266, + "src": "5032:19:13", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1262, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5032:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5006:46:13" + }, + "returnParameters": { + "id": 1265, + "nodeType": "ParameterList", + "parameters": [], + "src": "5061:0:13" + }, + "scope": 1318, + "src": "4986:76:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1267, + "nodeType": "StructuredDocumentation", + "src": "5068:931:13", + "text": " @notice Collects payment earnt by the service provider.\n @dev The implementation of this function is expected to interact with {GraphPayments}\n to collect payment from the service payer, which is done via {IGraphPayments-collect}.\n @param serviceProvider The address of the service provider.\n Emits a {ServicePaymentCollected} event.\n NOTE: Data services that are vetted by the Graph Council might qualify for a portion of\n protocol issuance to cover for these payments. In this case, the funds are taken by\n interacting with the rewards manager contract instead of the {GraphPayments} contract.\n @param serviceProvider The address of the service provider.\n @param feeType The type of fee to collect as defined in {GraphPayments}.\n @param data Custom data, usage defined by the data service.\n @return The amount of tokens collected." + }, + "functionSelector": "b15d2a2c", + "id": 1279, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "collect", + "nameLocation": "6013:7:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1275, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1269, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "6038:15:13", + "nodeType": "VariableDeclaration", + "scope": 1279, + "src": "6030:23:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1268, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6030:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1272, + "mutability": "mutable", + "name": "feeType", + "nameLocation": "6091:7:13", + "nodeType": "VariableDeclaration", + "scope": 1279, + "src": "6063:35:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 1271, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1270, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "6063:14:13", + "6078:12:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "6063:27:13" + }, + "referencedDeclaration": 2166, + "src": "6063:27:13", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1274, + "mutability": "mutable", + "name": "data", + "nameLocation": "6123:4:13", + "nodeType": "VariableDeclaration", + "scope": 1279, + "src": "6108:19:13", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1273, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6108:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6020:113:13" + }, + "returnParameters": { + "id": 1278, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1277, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1279, + "src": "6152:7:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1276, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6152:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6151:9:13" + }, + "scope": 1318, + "src": "6004:157:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1280, + "nodeType": "StructuredDocumentation", + "src": "6167:367:13", + "text": " @notice Slash a service provider for misbehaviour.\n @dev To slash the service provider's provision the function should call\n {Staking-slash}.\n Emits a {ServiceProviderSlashed} event.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." + }, + "functionSelector": "cb8347fe", + "id": 1287, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "slash", + "nameLocation": "6548:5:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1285, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1282, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "6562:15:13", + "nodeType": "VariableDeclaration", + "scope": 1287, + "src": "6554:23:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1281, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6554:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1284, + "mutability": "mutable", + "name": "data", + "nameLocation": "6594:4:13", + "nodeType": "VariableDeclaration", + "scope": 1287, + "src": "6579:19:13", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1283, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6579:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6553:46:13" + }, + "returnParameters": { + "id": 1286, + "nodeType": "ParameterList", + "parameters": [], + "src": "6608:0:13" + }, + "scope": 1318, + "src": "6539:70:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1288, + "nodeType": "StructuredDocumentation", + "src": "6615:163:13", + "text": " @notice External getter for the thawing period range\n @return Minimum thawing period allowed\n @return Maximum thawing period allowed" + }, + "functionSelector": "71ce020a", + "id": 1295, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getThawingPeriodRange", + "nameLocation": "6792:21:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1289, + "nodeType": "ParameterList", + "parameters": [], + "src": "6813:2:13" + }, + "returnParameters": { + "id": 1294, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1291, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1295, + "src": "6839:6:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1290, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6839:6:13", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1293, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1295, + "src": "6847:6:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1292, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6847:6:13", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "6838:16:13" + }, + "scope": 1318, + "src": "6783:72:13", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1296, + "nodeType": "StructuredDocumentation", + "src": "6861:157:13", + "text": " @notice External getter for the verifier cut range\n @return Minimum verifier cut allowed\n @return Maximum verifier cut allowed" + }, + "functionSelector": "482468b7", + "id": 1303, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getVerifierCutRange", + "nameLocation": "7032:19:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1297, + "nodeType": "ParameterList", + "parameters": [], + "src": "7051:2:13" + }, + "returnParameters": { + "id": 1302, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1299, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1303, + "src": "7077:6:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1298, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "7077:6:13", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1301, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1303, + "src": "7085:6:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1300, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "7085:6:13", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "7076:16:13" + }, + "scope": 1318, + "src": "7023:70:13", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1304, + "nodeType": "StructuredDocumentation", + "src": "7099:169:13", + "text": " @notice External getter for the provision tokens range\n @return Minimum provision tokens allowed\n @return Maximum provision tokens allowed" + }, + "functionSelector": "819ba366", + "id": 1311, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getProvisionTokensRange", + "nameLocation": "7282:23:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1305, + "nodeType": "ParameterList", + "parameters": [], + "src": "7305:2:13" + }, + "returnParameters": { + "id": 1310, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1307, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1311, + "src": "7331:7:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1306, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7331:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1309, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1311, + "src": "7340:7:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1308, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7340:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7330:18:13" + }, + "scope": 1318, + "src": "7273:76:13", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1312, + "nodeType": "StructuredDocumentation", + "src": "7355:103:13", + "text": " @notice External getter for the delegation ratio\n @return The delegation ratio" + }, + "functionSelector": "1ebb7c30", + "id": 1317, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getDelegationRatio", + "nameLocation": "7472:18:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1313, + "nodeType": "ParameterList", + "parameters": [], + "src": "7490:2:13" + }, + "returnParameters": { + "id": 1316, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1315, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1317, + "src": "7516:6:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1314, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "7516:6:13", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "7515:8:13" + }, + "scope": 1318, + "src": "7463:61:13", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1319, + "src": "897:6629:13", + "usedErrors": [], + "usedEvents": [ + 1198, + 1203, + 1210, + 1217, + 1227, + 1234 + ] + } + ], + "src": "45:7482:13" + }, + "id": 13 + }, + "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", + "exportedSymbols": { + "IDataService": [ + 1318 + ], + "IDataServiceFees": [ + 1381 + ] + }, + "id": 1382, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1320, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:14" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol", + "file": "./IDataService.sol", + "id": 1322, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1382, + "sourceUnit": 1319, + "src": "70:50:14", + "symbolAliases": [ + { + "foreign": { + "id": 1321, + "name": "IDataService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1318, + "src": "79:12:14", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1324, + "name": "IDataService", + "nameLocations": [ + "1067:12:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1318, + "src": "1067:12:14" + }, + "id": 1325, + "nodeType": "InheritanceSpecifier", + "src": "1067:12:14" + } + ], + "canonicalName": "IDataServiceFees", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1323, + "nodeType": "StructuredDocumentation", + "src": "122:914:14", + "text": " @title Interface for the {DataServiceFees} contract.\n @notice Extension for the {IDataService} contract to handle payment collateralization\n using a Horizon provision.\n It's designed to be used with the Data Service framework:\n - When a service provider collects payment with {IDataService.collect} the data service should lock\n stake to back the payment using {_lockStake}.\n - Every time there is a payment collection with {IDataService.collect}, the data service should\n attempt to release any expired stake claims by calling {_releaseStake}.\n - Stake claims can also be manually released by calling {releaseStake} directly.\n @dev Note that this implementation uses the entire provisioned stake as collateral for the payment.\n It can be used to provide economic security for the payments collected as long as the provisioned\n stake is not being used for other purposes." + }, + "fullyImplemented": false, + "id": 1381, + "linearizedBaseContracts": [ + 1381, + 1318 + ], + "name": "IDataServiceFees", + "nameLocation": "1047:16:14", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IDataServiceFees.StakeClaim", + "documentation": { + "id": 1326, + "nodeType": "StructuredDocumentation", + "src": "1086:244:14", + "text": " @notice A stake claim, representing provisioned stake that gets locked\n to be released to a service provider.\n @dev StakeClaims are stored in linked lists by service provider, ordered by\n creation timestamp." + }, + "id": 1335, + "members": [ + { + "constant": false, + "id": 1328, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "1429:6:14", + "nodeType": "VariableDeclaration", + "scope": 1335, + "src": "1421:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1327, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1421:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1330, + "mutability": "mutable", + "name": "createdAt", + "nameLocation": "1501:9:14", + "nodeType": "VariableDeclaration", + "scope": 1335, + "src": "1493:17:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1329, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1493:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1332, + "mutability": "mutable", + "name": "releasableAt", + "nameLocation": "1603:12:14", + "nodeType": "VariableDeclaration", + "scope": 1335, + "src": "1595:20:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1331, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1595:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1334, + "mutability": "mutable", + "name": "nextClaim", + "nameLocation": "1674:9:14", + "nodeType": "VariableDeclaration", + "scope": 1335, + "src": "1666:17:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1333, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1666:7:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "name": "StakeClaim", + "nameLocation": "1342:10:14", + "nodeType": "StructDefinition", + "scope": 1381, + "src": "1335:355:14", + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 1336, + "nodeType": "StructuredDocumentation", + "src": "1696:338:14", + "text": " @notice Emitted when a stake claim is created and stake is locked.\n @param serviceProvider The address of the service provider\n @param claimId The id of the stake claim\n @param tokens The amount of tokens to lock in the claim\n @param unlockTimestamp The timestamp when the tokens can be released" + }, + "eventSelector": "5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f", + "id": 1346, + "name": "StakeClaimLocked", + "nameLocation": "2045:16:14", + "nodeType": "EventDefinition", + "parameters": { + "id": 1345, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1338, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2087:15:14", + "nodeType": "VariableDeclaration", + "scope": 1346, + "src": "2071:31:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1337, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2071:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1340, + "indexed": true, + "mutability": "mutable", + "name": "claimId", + "nameLocation": "2128:7:14", + "nodeType": "VariableDeclaration", + "scope": 1346, + "src": "2112:23:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1339, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2112:7:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1342, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2153:6:14", + "nodeType": "VariableDeclaration", + "scope": 1346, + "src": "2145:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1341, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2145:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1344, + "indexed": false, + "mutability": "mutable", + "name": "unlockTimestamp", + "nameLocation": "2177:15:14", + "nodeType": "VariableDeclaration", + "scope": 1346, + "src": "2169:23:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1343, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2169:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2061:137:14" + }, + "src": "2039:160:14" + }, + { + "anonymous": false, + "documentation": { + "id": 1347, + "nodeType": "StructuredDocumentation", + "src": "2205:324:14", + "text": " @notice Emitted when a stake claim is released and stake is unlocked.\n @param serviceProvider The address of the service provider\n @param claimId The id of the stake claim\n @param tokens The amount of tokens released\n @param releasableAt The timestamp when the tokens were released" + }, + "eventSelector": "4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44", + "id": 1357, + "name": "StakeClaimReleased", + "nameLocation": "2540:18:14", + "nodeType": "EventDefinition", + "parameters": { + "id": 1356, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1349, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2584:15:14", + "nodeType": "VariableDeclaration", + "scope": 1357, + "src": "2568:31:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1348, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2568:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1351, + "indexed": true, + "mutability": "mutable", + "name": "claimId", + "nameLocation": "2625:7:14", + "nodeType": "VariableDeclaration", + "scope": 1357, + "src": "2609:23:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1350, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2609:7:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1353, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2650:6:14", + "nodeType": "VariableDeclaration", + "scope": 1357, + "src": "2642:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1352, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2642:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1355, + "indexed": false, + "mutability": "mutable", + "name": "releasableAt", + "nameLocation": "2674:12:14", + "nodeType": "VariableDeclaration", + "scope": 1357, + "src": "2666:20:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1354, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2666:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2558:134:14" + }, + "src": "2534:159:14" + }, + { + "anonymous": false, + "documentation": { + "id": 1358, + "nodeType": "StructuredDocumentation", + "src": "2699:283:14", + "text": " @notice Emitted when a series of stake claims are released.\n @param serviceProvider The address of the service provider\n @param claimsCount The number of stake claims being released\n @param tokensReleased The total amount of tokens being released" + }, + "eventSelector": "13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb", + "id": 1366, + "name": "StakeClaimsReleased", + "nameLocation": "2993:19:14", + "nodeType": "EventDefinition", + "parameters": { + "id": 1365, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1360, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3029:15:14", + "nodeType": "VariableDeclaration", + "scope": 1366, + "src": "3013:31:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1359, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3013:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1362, + "indexed": false, + "mutability": "mutable", + "name": "claimsCount", + "nameLocation": "3054:11:14", + "nodeType": "VariableDeclaration", + "scope": 1366, + "src": "3046:19:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1361, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3046:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1364, + "indexed": false, + "mutability": "mutable", + "name": "tokensReleased", + "nameLocation": "3075:14:14", + "nodeType": "VariableDeclaration", + "scope": 1366, + "src": "3067:22:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1363, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3067:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3012:78:14" + }, + "src": "2987:104:14" + }, + { + "documentation": { + "id": 1367, + "nodeType": "StructuredDocumentation", + "src": "3097:91:14", + "text": " @notice Thrown when attempting to get a stake claim that does not exist." + }, + "errorSelector": "41cd26a4", + "id": 1371, + "name": "DataServiceFeesClaimNotFound", + "nameLocation": "3199:28:14", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1370, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1369, + "mutability": "mutable", + "name": "claimId", + "nameLocation": "3236:7:14", + "nodeType": "VariableDeclaration", + "scope": 1371, + "src": "3228:15:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1368, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3228:7:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3227:17:14" + }, + "src": "3193:52:14" + }, + { + "documentation": { + "id": 1372, + "nodeType": "StructuredDocumentation", + "src": "3251:83:14", + "text": " @notice Emitted when trying to lock zero tokens in a stake claim" + }, + "errorSelector": "8f4c63d9", + "id": 1374, + "name": "DataServiceFeesZeroTokens", + "nameLocation": "3345:25:14", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1373, + "nodeType": "ParameterList", + "parameters": [], + "src": "3370:2:14" + }, + "src": "3339:34:14" + }, + { + "documentation": { + "id": 1375, + "nodeType": "StructuredDocumentation", + "src": "3379:519:14", + "text": " @notice Releases expired stake claims for the caller.\n @dev This function is only meant to be called if the service provider has enough\n stake claims that releasing them all at once would exceed the block gas limit.\n @dev This function can be overriden and/or disabled.\n @dev Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\n @param numClaimsToRelease Amount of stake claims to process. If 0, all stake claims are processed." + }, + "functionSelector": "45f54485", + "id": 1380, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "releaseStake", + "nameLocation": "3912:12:14", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1378, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1377, + "mutability": "mutable", + "name": "numClaimsToRelease", + "nameLocation": "3933:18:14", + "nodeType": "VariableDeclaration", + "scope": 1380, + "src": "3925:26:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1376, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3925:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3924:28:14" + }, + "returnParameters": { + "id": 1379, + "nodeType": "ParameterList", + "parameters": [], + "src": "3961:0:14" + }, + "scope": 1381, + "src": "3903:59:14", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1382, + "src": "1037:2927:14", + "usedErrors": [ + 1371, + 1374 + ], + "usedEvents": [ + 1198, + 1203, + 1210, + 1217, + 1227, + 1234, + 1346, + 1357, + 1366 + ] + } + ], + "src": "45:3920:14" + }, + "id": 14 + }, + "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol", + "exportedSymbols": { + "IDataService": [ + 1318 + ], + "IDataServicePausable": [ + 1409 + ] + }, + "id": 1410, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1383, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:15" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol", + "file": "./IDataService.sol", + "id": 1385, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1410, + "sourceUnit": 1319, + "src": "70:50:15", + "symbolAliases": [ + { + "foreign": { + "id": 1384, + "name": "IDataService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1318, + "src": "79:12:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1387, + "name": "IDataService", + "nameLocations": [ + "401:12:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1318, + "src": "401:12:15" + }, + "id": 1388, + "nodeType": "InheritanceSpecifier", + "src": "401:12:15" + } + ], + "canonicalName": "IDataServicePausable", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1386, + "nodeType": "StructuredDocumentation", + "src": "122:244:15", + "text": " @title Interface for the {DataServicePausable} contract.\n @notice Extension for the {IDataService} contract, adds pausing functionality\n to the data service. Pausing is controlled by privileged accounts called\n pause guardians." + }, + "fullyImplemented": false, + "id": 1409, + "linearizedBaseContracts": [ + 1409, + 1318 + ], + "name": "IDataServicePausable", + "nameLocation": "377:20:15", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 1389, + "nodeType": "StructuredDocumentation", + "src": "420:183:15", + "text": " @notice Emitted when a pause guardian is set.\n @param account The address of the pause guardian\n @param allowed The allowed status of the pause guardian" + }, + "eventSelector": "a95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789", + "id": 1395, + "name": "PauseGuardianSet", + "nameLocation": "614:16:15", + "nodeType": "EventDefinition", + "parameters": { + "id": 1394, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1391, + "indexed": true, + "mutability": "mutable", + "name": "account", + "nameLocation": "647:7:15", + "nodeType": "VariableDeclaration", + "scope": 1395, + "src": "631:23:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1390, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "631:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1393, + "indexed": false, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "661:7:15", + "nodeType": "VariableDeclaration", + "scope": 1395, + "src": "656:12:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1392, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "656:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "630:39:15" + }, + "src": "608:62:15" + }, + { + "documentation": { + "id": 1396, + "nodeType": "StructuredDocumentation", + "src": "676:132:15", + "text": " @notice Emitted when a the caller is not a pause guardian\n @param account The address of the pause guardian" + }, + "errorSelector": "72e3ef97", + "id": 1400, + "name": "DataServicePausableNotPauseGuardian", + "nameLocation": "819:35:15", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1399, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1398, + "mutability": "mutable", + "name": "account", + "nameLocation": "863:7:15", + "nodeType": "VariableDeclaration", + "scope": 1400, + "src": "855:15:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1397, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "855:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "854:17:15" + }, + "src": "813:59:15" + }, + { + "documentation": { + "id": 1401, + "nodeType": "StructuredDocumentation", + "src": "878:256:15", + "text": " @notice Pauses the data service.\n @dev Note that only functions using the modifiers `whenNotPaused`\n and `whenPaused` will be affected by the pause.\n Requirements:\n - The contract must not be already paused" + }, + "functionSelector": "8456cb59", + "id": 1404, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "pause", + "nameLocation": "1148:5:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1402, + "nodeType": "ParameterList", + "parameters": [], + "src": "1153:2:15" + }, + "returnParameters": { + "id": 1403, + "nodeType": "ParameterList", + "parameters": [], + "src": "1164:0:15" + }, + "scope": 1409, + "src": "1139:26:15", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1405, + "nodeType": "StructuredDocumentation", + "src": "1171:246:15", + "text": " @notice Unpauses the data service.\n @dev Note that only functions using the modifiers `whenNotPaused`\n and `whenPaused` will be affected by the pause.\n Requirements:\n - The contract must be paused" + }, + "functionSelector": "3f4ba83a", + "id": 1408, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "unpause", + "nameLocation": "1431:7:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1406, + "nodeType": "ParameterList", + "parameters": [], + "src": "1438:2:15" + }, + "returnParameters": { + "id": 1407, + "nodeType": "ParameterList", + "parameters": [], + "src": "1449:0:15" + }, + "scope": 1409, + "src": "1422:28:15", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1410, + "src": "367:1085:15", + "usedErrors": [ + 1400 + ], + "usedEvents": [ + 1198, + 1203, + 1210, + 1217, + 1227, + 1234, + 1395 + ] + } + ], + "src": "45:1408:15" + }, + "id": 15 + }, + "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol", + "exportedSymbols": { + "IHorizonStaking": [ + 2235 + ], + "ProvisionTracker": [ + 1555 + ] + }, + "id": 1556, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1411, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:16" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", + "file": "../../interfaces/IHorizonStaking.sol", + "id": 1413, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1556, + "sourceUnit": 2236, + "src": "70:71:16", + "symbolAliases": [ + { + "foreign": { + "id": 1412, + "name": "IHorizonStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2235, + "src": "79:15:16", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "ProvisionTracker", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 1414, + "nodeType": "StructuredDocumentation", + "src": "143:495:16", + "text": " @title ProvisionTracker library\n @notice A library to facilitate tracking of \"used tokens\" on Graph Horizon provisions. This can be used to\n ensure data services have enough economic security (provisioned stake) to back the payments they collect for\n their services.\n The library provides two primitives, lock and release to signal token usage and free up tokens respectively. It\n does not make any assumptions about the conditions under which tokens are locked or released." + }, + "fullyImplemented": true, + "id": 1555, + "linearizedBaseContracts": [ + 1555 + ], + "name": "ProvisionTracker", + "nameLocation": "647:16:16", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1415, + "nodeType": "StructuredDocumentation", + "src": "670:80:16", + "text": " @notice Thrown when trying to lock more tokens than available" + }, + "errorSelector": "5f8ec709", + "id": 1421, + "name": "ProvisionTrackerInsufficientTokens", + "nameLocation": "761:34:16", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1420, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1417, + "mutability": "mutable", + "name": "tokensAvailable", + "nameLocation": "804:15:16", + "nodeType": "VariableDeclaration", + "scope": 1421, + "src": "796:23:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1416, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "796:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1419, + "mutability": "mutable", + "name": "tokensRequired", + "nameLocation": "829:14:16", + "nodeType": "VariableDeclaration", + "scope": 1421, + "src": "821:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1418, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "821:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "795:49:16" + }, + "src": "755:90:16" + }, + { + "body": { + "id": 1479, + "nodeType": "Block", + "src": "1583:384:16", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1440, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 1438, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1433, + "src": "1597:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 1439, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1607:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1597:11:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1442, + "nodeType": "IfStatement", + "src": "1593:24:16", + "trueBody": { + "functionReturnParameters": 1437, + "id": 1441, + "nodeType": "Return", + "src": "1610:7:16" + } + }, + { + "assignments": [ + 1444 + ], + "declarations": [ + { + "constant": false, + "id": 1444, + "mutability": "mutable", + "name": "tokensRequired", + "nameLocation": "1635:14:16", + "nodeType": "VariableDeclaration", + "scope": 1479, + "src": "1627:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1443, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1627:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 1450, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 1445, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1426, + "src": "1652:4:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 1447, + "indexExpression": { + "id": 1446, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1431, + "src": "1657:15:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1652:21:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 1448, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1433, + "src": "1676:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1652:30:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1627:55:16" + }, + { + "assignments": [ + 1452 + ], + "declarations": [ + { + "constant": false, + "id": 1452, + "mutability": "mutable", + "name": "tokensAvailable", + "nameLocation": "1700:15:16", + "nodeType": "VariableDeclaration", + "scope": 1479, + "src": "1692:23:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1451, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1692:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 1462, + "initialValue": { + "arguments": [ + { + "id": 1455, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1431, + "src": "1750:15:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 1458, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1775:4:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ProvisionTracker_$1555", + "typeString": "library ProvisionTracker" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ProvisionTracker_$1555", + "typeString": "library ProvisionTracker" + } + ], + "id": 1457, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1767:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1456, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1767:7:16", + "typeDescriptions": {} + } + }, + "id": 1459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1767:13:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1460, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1435, + "src": "1782:15:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "id": 1453, + "name": "graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1429, + "src": "1718:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 1454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1731:18:16", + "memberName": "getTokensAvailable", + "nodeType": "MemberAccess", + "referencedDeclaration": 2796, + "src": "1718:31:16", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint32_$returns$_t_uint256_$", + "typeString": "function (address,address,uint32) view external returns (uint256)" + } + }, + "id": 1461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1718:80:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1692:106:16" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1466, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 1464, + "name": "tokensRequired", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1444, + "src": "1816:14:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 1465, + "name": "tokensAvailable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1452, + "src": "1834:15:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1816:33:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 1468, + "name": "tokensAvailable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1452, + "src": "1886:15:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1469, + "name": "tokensRequired", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1444, + "src": "1903:14:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1467, + "name": "ProvisionTrackerInsufficientTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1421, + "src": "1851:34:16", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 1470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1851:67:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 1463, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1808:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 1471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1808:111:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1472, + "nodeType": "ExpressionStatement", + "src": "1808:111:16" + }, + { + "expression": { + "id": 1477, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 1473, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1426, + "src": "1929:4:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 1475, + "indexExpression": { + "id": 1474, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1431, + "src": "1934:15:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1929:21:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 1476, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1433, + "src": "1954:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1929:31:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1478, + "nodeType": "ExpressionStatement", + "src": "1929:31:16" + } + ] + }, + "documentation": { + "id": 1422, + "nodeType": "StructuredDocumentation", + "src": "851:521:16", + "text": " @notice Locks tokens for a service provider\n @dev Requirements:\n - `tokens` must be less than or equal to the amount of tokens available, as reported by the HorizonStaking contract\n @param self The provision tracker mapping\n @param graphStaking The HorizonStaking contract\n @param serviceProvider The service provider address\n @param tokens The amount of tokens to lock\n @param delegationRatio A delegation ratio to limit the amount of delegation that's usable" + }, + "id": 1480, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "lock", + "nameLocation": "1386:4:16", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1426, + "mutability": "mutable", + "name": "self", + "nameLocation": "1436:4:16", + "nodeType": "VariableDeclaration", + "scope": 1480, + "src": "1400:40:16", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 1425, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 1423, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1408:7:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1400:27:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 1424, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1419:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1429, + "mutability": "mutable", + "name": "graphStaking", + "nameLocation": "1466:12:16", + "nodeType": "VariableDeclaration", + "scope": 1480, + "src": "1450:28:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + }, + "typeName": { + "id": 1428, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1427, + "name": "IHorizonStaking", + "nameLocations": [ + "1450:15:16" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2235, + "src": "1450:15:16" + }, + "referencedDeclaration": 2235, + "src": "1450:15:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1431, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1496:15:16", + "nodeType": "VariableDeclaration", + "scope": 1480, + "src": "1488:23:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1430, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1488:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1433, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "1529:6:16", + "nodeType": "VariableDeclaration", + "scope": 1480, + "src": "1521:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1432, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1521:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1435, + "mutability": "mutable", + "name": "delegationRatio", + "nameLocation": "1552:15:16", + "nodeType": "VariableDeclaration", + "scope": 1480, + "src": "1545:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1434, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1545:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "1390:183:16" + }, + "returnParameters": { + "id": 1437, + "nodeType": "ParameterList", + "parameters": [], + "src": "1583:0:16" + }, + "scope": 1555, + "src": "1377:590:16", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1517, + "nodeType": "Block", + "src": "2440:198:16", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 1492, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1489, + "src": "2454:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 1493, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2464:1:16", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2454:11:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1496, + "nodeType": "IfStatement", + "src": "2450:24:16", + "trueBody": { + "functionReturnParameters": 1491, + "id": 1495, + "nodeType": "Return", + "src": "2467:7:16" + } + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 1498, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1485, + "src": "2491:4:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 1500, + "indexExpression": { + "id": 1499, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1487, + "src": "2496:15:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2491:21:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 1501, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1489, + "src": "2516:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2491:31:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "baseExpression": { + "id": 1504, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1485, + "src": "2559:4:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 1506, + "indexExpression": { + "id": 1505, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1487, + "src": "2564:15:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2559:21:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1507, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1489, + "src": "2582:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1503, + "name": "ProvisionTrackerInsufficientTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1421, + "src": "2524:34:16", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 1508, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2524:65:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 1497, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2483:7:16", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 1509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2483:107:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1510, + "nodeType": "ExpressionStatement", + "src": "2483:107:16" + }, + { + "expression": { + "id": 1515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 1511, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1485, + "src": "2600:4:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 1513, + "indexExpression": { + "id": 1512, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1487, + "src": "2605:15:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2600:21:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 1514, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1489, + "src": "2625:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2600:31:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1516, + "nodeType": "ExpressionStatement", + "src": "2600:31:16" + } + ] + }, + "documentation": { + "id": 1481, + "nodeType": "StructuredDocumentation", + "src": "1973:353:16", + "text": " @notice Releases tokens for a service provider\n @dev Requirements:\n - `tokens` must be less than or equal to the amount of tokens locked for the service provider\n @param self The provision tracker mapping\n @param serviceProvider The service provider address\n @param tokens The amount of tokens to release" + }, + "id": 1518, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "release", + "nameLocation": "2340:7:16", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1490, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1485, + "mutability": "mutable", + "name": "self", + "nameLocation": "2384:4:16", + "nodeType": "VariableDeclaration", + "scope": 1518, + "src": "2348:40:16", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 1484, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 1482, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2356:7:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2348:27:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 1483, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2367:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1487, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2398:15:16", + "nodeType": "VariableDeclaration", + "scope": 1518, + "src": "2390:23:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1486, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2390:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1489, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2423:6:16", + "nodeType": "VariableDeclaration", + "scope": 1518, + "src": "2415:14:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1488, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2415:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2347:83:16" + }, + "returnParameters": { + "id": 1491, + "nodeType": "ParameterList", + "parameters": [], + "src": "2440:0:16" + }, + "scope": 1555, + "src": "2331:307:16", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1553, + "nodeType": "Block", + "src": "3203:180:16", + "statements": [ + { + "assignments": [ + 1536 + ], + "declarations": [ + { + "constant": false, + "id": 1536, + "mutability": "mutable", + "name": "tokensAvailable", + "nameLocation": "3221:15:16", + "nodeType": "VariableDeclaration", + "scope": 1553, + "src": "3213:23:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1535, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3213:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 1546, + "initialValue": { + "arguments": [ + { + "id": 1539, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1528, + "src": "3271:15:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 1542, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3296:4:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ProvisionTracker_$1555", + "typeString": "library ProvisionTracker" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ProvisionTracker_$1555", + "typeString": "library ProvisionTracker" + } + ], + "id": 1541, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3288:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1540, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3288:7:16", + "typeDescriptions": {} + } + }, + "id": 1543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3288:13:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 1544, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1530, + "src": "3303:15:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "id": 1537, + "name": "graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1526, + "src": "3239:12:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 1538, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3252:18:16", + "memberName": "getTokensAvailable", + "nodeType": "MemberAccess", + "referencedDeclaration": 2796, + "src": "3239:31:16", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint32_$returns$_t_uint256_$", + "typeString": "function (address,address,uint32) view external returns (uint256)" + } + }, + "id": 1545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3239:80:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3213:106:16" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 1547, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1523, + "src": "3336:4:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 1549, + "indexExpression": { + "id": 1548, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1528, + "src": "3341:15:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3336:21:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 1550, + "name": "tokensAvailable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1536, + "src": "3361:15:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3336:40:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 1534, + "id": 1552, + "nodeType": "Return", + "src": "3329:47:16" + } + ] + }, + "documentation": { + "id": 1519, + "nodeType": "StructuredDocumentation", + "src": "2644:351:16", + "text": " @notice Checks if a service provider has enough tokens available to lock\n @param self The provision tracker mapping\n @param graphStaking The HorizonStaking contract\n @param serviceProvider The service provider address\n @param delegationRatio A delegation ratio to limit the amount of delegation that's usable" + }, + "id": 1554, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "check", + "nameLocation": "3009:5:16", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1531, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1523, + "mutability": "mutable", + "name": "self", + "nameLocation": "3060:4:16", + "nodeType": "VariableDeclaration", + "scope": 1554, + "src": "3024:40:16", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 1522, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 1520, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3032:7:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3024:27:16", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 1521, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3043:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1526, + "mutability": "mutable", + "name": "graphStaking", + "nameLocation": "3090:12:16", + "nodeType": "VariableDeclaration", + "scope": 1554, + "src": "3074:28:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + }, + "typeName": { + "id": 1525, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1524, + "name": "IHorizonStaking", + "nameLocations": [ + "3074:15:16" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2235, + "src": "3074:15:16" + }, + "referencedDeclaration": 2235, + "src": "3074:15:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1528, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3120:15:16", + "nodeType": "VariableDeclaration", + "scope": 1554, + "src": "3112:23:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1527, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3112:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1530, + "mutability": "mutable", + "name": "delegationRatio", + "nameLocation": "3152:15:16", + "nodeType": "VariableDeclaration", + "scope": 1554, + "src": "3145:22:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1529, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "3145:6:16", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "3014:159:16" + }, + "returnParameters": { + "id": 1534, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1533, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1554, + "src": "3197:4:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1532, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3197:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3196:6:16" + }, + "scope": 1555, + "src": "3000:383:16", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 1556, + "src": "639:2746:16", + "usedErrors": [ + 1421 + ], + "usedEvents": [] + } + ], + "src": "45:3341:16" + }, + "id": 16 + }, + "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol", + "exportedSymbols": { + "GraphDirectory": [ + 4653 + ], + "IHorizonStaking": [ + 2235 + ], + "Initializable": [ + 5102 + ], + "PPMMath": [ + 4262 + ], + "ProvisionManager": [ + 2128 + ], + "ProvisionManagerV1Storage": [ + 2158 + ], + "UintRange": [ + 4290 + ] + }, + "id": 2129, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1557, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:17" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", + "file": "../../interfaces/IHorizonStaking.sol", + "id": 1559, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2129, + "sourceUnit": 2236, + "src": "70:71:17", + "symbolAliases": [ + { + "foreign": { + "id": 1558, + "name": "IHorizonStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2235, + "src": "79:15:17", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/UintRange.sol", + "file": "../../libraries/UintRange.sol", + "id": 1561, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2129, + "sourceUnit": 4291, + "src": "143:58:17", + "symbolAliases": [ + { + "foreign": { + "id": 1560, + "name": "UintRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4290, + "src": "152:9:17", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", + "file": "../../libraries/PPMMath.sol", + "id": 1563, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2129, + "sourceUnit": 4263, + "src": "202:54:17", + "symbolAliases": [ + { + "foreign": { + "id": 1562, + "name": "PPMMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4262, + "src": "211:7:17", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "id": 1565, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2129, + "sourceUnit": 5103, + "src": "258:98:17", + "symbolAliases": [ + { + "foreign": { + "id": 1564, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "267:13:17", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", + "file": "../../utilities/GraphDirectory.sol", + "id": 1567, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2129, + "sourceUnit": 4654, + "src": "357:68:17", + "symbolAliases": [ + { + "foreign": { + "id": 1566, + "name": "GraphDirectory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4653, + "src": "366:14:17", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol", + "file": "./ProvisionManagerStorage.sol", + "id": 1569, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2129, + "sourceUnit": 2159, + "src": "426:74:17", + "symbolAliases": [ + { + "foreign": { + "id": 1568, + "name": "ProvisionManagerV1Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2158, + "src": "435:25:17", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 1571, + "name": "Initializable", + "nameLocations": [ + "1007:13:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5102, + "src": "1007:13:17" + }, + "id": 1572, + "nodeType": "InheritanceSpecifier", + "src": "1007:13:17" + }, + { + "baseName": { + "id": 1573, + "name": "GraphDirectory", + "nameLocations": [ + "1022:14:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4653, + "src": "1022:14:17" + }, + "id": 1574, + "nodeType": "InheritanceSpecifier", + "src": "1022:14:17" + }, + { + "baseName": { + "id": 1575, + "name": "ProvisionManagerV1Storage", + "nameLocations": [ + "1038:25:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2158, + "src": "1038:25:17" + }, + "id": 1576, + "nodeType": "InheritanceSpecifier", + "src": "1038:25:17" + } + ], + "canonicalName": "ProvisionManager", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 1570, + "nodeType": "StructuredDocumentation", + "src": "502:466:17", + "text": " @title ProvisionManager contract\n @notice A helper contract that implements several provision management functions.\n @dev Provides utilities to verify provision parameters are within an acceptable range. Each\n parameter has an overridable setter and getter for the validity range, and a checker that reverts\n if the parameter is out of range.\n The parameters are:\n - Provision parameters (thawing period and verifier cut)\n - Provision tokens" + }, + "fullyImplemented": true, + "id": 2128, + "linearizedBaseContracts": [ + 2128, + 2158, + 4653, + 5102 + ], + "name": "ProvisionManager", + "nameLocation": "987:16:17", + "nodeType": "ContractDefinition", + "nodes": [ + { + "global": false, + "id": 1579, + "libraryName": { + "id": 1577, + "name": "UintRange", + "nameLocations": [ + "1076:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4290, + "src": "1076:9:17" + }, + "nodeType": "UsingForDirective", + "src": "1070:28:17", + "typeName": { + "id": 1578, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1090:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": true, + "id": 1586, + "mutability": "constant", + "name": "DEFAULT_MIN_VERIFIER_CUT", + "nameLocation": "1146:24:17", + "nodeType": "VariableDeclaration", + "scope": 2128, + "src": "1121:68:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1580, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1121:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 1583, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1178:6:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint32_$", + "typeString": "type(uint32)" + }, + "typeName": { + "id": 1582, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1178:6:17", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint32_$", + "typeString": "type(uint32)" + } + ], + "id": 1581, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "1173:4:17", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 1584, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1173:12:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint32", + "typeString": "type(uint32)" + } + }, + "id": 1585, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1186:3:17", + "memberName": "min", + "nodeType": "MemberAccess", + "src": "1173:16:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1593, + "mutability": "constant", + "name": "DEFAULT_MAX_VERIFIER_CUT", + "nameLocation": "1220:24:17", + "nodeType": "VariableDeclaration", + "scope": 2128, + "src": "1195:75:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1587, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1195:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "arguments": [ + { + "expression": { + "id": 1590, + "name": "PPMMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4262, + "src": "1254:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_PPMMath_$4262_$", + "typeString": "type(library PPMMath)" + } + }, + "id": 1591, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1262:7:17", + "memberName": "MAX_PPM", + "nodeType": "MemberAccess", + "referencedDeclaration": 4175, + "src": "1254:15:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1589, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1247:6:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint32_$", + "typeString": "type(uint32)" + }, + "typeName": { + "id": 1588, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1247:6:17", + "typeDescriptions": {} + } + }, + "id": 1592, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1247:23:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1600, + "mutability": "constant", + "name": "DEFAULT_MIN_THAWING_PERIOD", + "nameLocation": "1301:26:17", + "nodeType": "VariableDeclaration", + "scope": 2128, + "src": "1276:70:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1594, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1276:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 1597, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1335:6:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 1596, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1335:6:17", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + } + ], + "id": 1595, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "1330:4:17", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 1598, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1330:12:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint64", + "typeString": "type(uint64)" + } + }, + "id": 1599, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1343:3:17", + "memberName": "min", + "nodeType": "MemberAccess", + "src": "1330:16:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1607, + "mutability": "constant", + "name": "DEFAULT_MAX_THAWING_PERIOD", + "nameLocation": "1377:26:17", + "nodeType": "VariableDeclaration", + "scope": 2128, + "src": "1352:70:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1601, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1352:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 1604, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1411:6:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 1603, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1411:6:17", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + } + ], + "id": 1602, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "1406:4:17", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 1605, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1406:12:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint64", + "typeString": "type(uint64)" + } + }, + "id": 1606, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1419:3:17", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "1406:16:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1614, + "mutability": "constant", + "name": "DEFAULT_MIN_PROVISION_TOKENS", + "nameLocation": "1454:28:17", + "nodeType": "VariableDeclaration", + "scope": 2128, + "src": "1428:74:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1608, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1428:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 1611, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1490:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 1610, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1490:7:17", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 1609, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "1485:4:17", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 1612, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1485:13:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 1613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1499:3:17", + "memberName": "min", + "nodeType": "MemberAccess", + "src": "1485:17:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1621, + "mutability": "constant", + "name": "DEFAULT_MAX_PROVISION_TOKENS", + "nameLocation": "1534:28:17", + "nodeType": "VariableDeclaration", + "scope": 2128, + "src": "1508:74:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1615, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1508:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 1618, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1570:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 1617, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1570:7:17", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 1616, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "1565:4:17", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 1619, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1565:13:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 1620, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1579:3:17", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "1565:17:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "anonymous": false, + "documentation": { + "id": 1622, + "nodeType": "StructuredDocumentation", + "src": "1589:214:17", + "text": " @notice Emitted when the provision tokens range is set.\n @param min The minimum allowed value for the provision tokens.\n @param max The maximum allowed value for the provision tokens." + }, + "eventSelector": "90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f568849", + "id": 1628, + "name": "ProvisionTokensRangeSet", + "nameLocation": "1814:23:17", + "nodeType": "EventDefinition", + "parameters": { + "id": 1627, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1624, + "indexed": false, + "mutability": "mutable", + "name": "min", + "nameLocation": "1846:3:17", + "nodeType": "VariableDeclaration", + "scope": 1628, + "src": "1838:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1623, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1838:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1626, + "indexed": false, + "mutability": "mutable", + "name": "max", + "nameLocation": "1859:3:17", + "nodeType": "VariableDeclaration", + "scope": 1628, + "src": "1851:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1625, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1851:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1837:26:17" + }, + "src": "1808:56:17" + }, + { + "anonymous": false, + "documentation": { + "id": 1629, + "nodeType": "StructuredDocumentation", + "src": "1870:109:17", + "text": " @notice Emitted when the delegation ratio is set.\n @param ratio The delegation ratio" + }, + "eventSelector": "472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f", + "id": 1633, + "name": "DelegationRatioSet", + "nameLocation": "1990:18:17", + "nodeType": "EventDefinition", + "parameters": { + "id": 1632, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1631, + "indexed": false, + "mutability": "mutable", + "name": "ratio", + "nameLocation": "2016:5:17", + "nodeType": "VariableDeclaration", + "scope": 1633, + "src": "2009:12:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1630, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2009:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "2008:14:17" + }, + "src": "1984:39:17" + }, + { + "anonymous": false, + "documentation": { + "id": 1634, + "nodeType": "StructuredDocumentation", + "src": "2029:210:17", + "text": " @notice Emitted when the verifier cut range is set.\n @param min The minimum allowed value for the max verifier cut.\n @param max The maximum allowed value for the max verifier cut." + }, + "eventSelector": "2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a36", + "id": 1640, + "name": "VerifierCutRangeSet", + "nameLocation": "2250:19:17", + "nodeType": "EventDefinition", + "parameters": { + "id": 1639, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1636, + "indexed": false, + "mutability": "mutable", + "name": "min", + "nameLocation": "2277:3:17", + "nodeType": "VariableDeclaration", + "scope": 1640, + "src": "2270:10:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1635, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2270:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1638, + "indexed": false, + "mutability": "mutable", + "name": "max", + "nameLocation": "2289:3:17", + "nodeType": "VariableDeclaration", + "scope": 1640, + "src": "2282:10:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1637, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2282:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "2269:24:17" + }, + "src": "2244:50:17" + }, + { + "anonymous": false, + "documentation": { + "id": 1641, + "nodeType": "StructuredDocumentation", + "src": "2300:208:17", + "text": " @notice Emitted when the thawing period range is set.\n @param min The minimum allowed value for the thawing period.\n @param max The maximum allowed value for the thawing period." + }, + "eventSelector": "2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d1", + "id": 1647, + "name": "ThawingPeriodRangeSet", + "nameLocation": "2519:21:17", + "nodeType": "EventDefinition", + "parameters": { + "id": 1646, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1643, + "indexed": false, + "mutability": "mutable", + "name": "min", + "nameLocation": "2548:3:17", + "nodeType": "VariableDeclaration", + "scope": 1647, + "src": "2541:10:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1642, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2541:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1645, + "indexed": false, + "mutability": "mutable", + "name": "max", + "nameLocation": "2560:3:17", + "nodeType": "VariableDeclaration", + "scope": 1647, + "src": "2553:10:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1644, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2553:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "2540:24:17" + }, + "src": "2513:52:17" + }, + { + "documentation": { + "id": 1648, + "nodeType": "StructuredDocumentation", + "src": "2571:260:17", + "text": " @notice Thrown when a provision parameter is out of range.\n @param message The error message.\n @param value The value that is out of range.\n @param min The minimum allowed value.\n @param max The maximum allowed value." + }, + "errorSelector": "0871e13d", + "id": 1658, + "name": "ProvisionManagerInvalidValue", + "nameLocation": "2842:28:17", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1657, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1650, + "mutability": "mutable", + "name": "message", + "nameLocation": "2877:7:17", + "nodeType": "VariableDeclaration", + "scope": 1658, + "src": "2871:13:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1649, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2871:5:17", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1652, + "mutability": "mutable", + "name": "value", + "nameLocation": "2894:5:17", + "nodeType": "VariableDeclaration", + "scope": 1658, + "src": "2886:13:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1651, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2886:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1654, + "mutability": "mutable", + "name": "min", + "nameLocation": "2909:3:17", + "nodeType": "VariableDeclaration", + "scope": 1658, + "src": "2901:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1653, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2901:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1656, + "mutability": "mutable", + "name": "max", + "nameLocation": "2922:3:17", + "nodeType": "VariableDeclaration", + "scope": 1658, + "src": "2914:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1655, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2914:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2870:56:17" + }, + "src": "2836:91:17" + }, + { + "documentation": { + "id": 1659, + "nodeType": "StructuredDocumentation", + "src": "2933:169:17", + "text": " @notice Thrown when attempting to set a range where min is greater than max.\n @param min The minimum value.\n @param max The maximum value." + }, + "errorSelector": "ccccdafb", + "id": 1665, + "name": "ProvisionManagerInvalidRange", + "nameLocation": "3113:28:17", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1664, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1661, + "mutability": "mutable", + "name": "min", + "nameLocation": "3150:3:17", + "nodeType": "VariableDeclaration", + "scope": 1665, + "src": "3142:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1660, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3142:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1663, + "mutability": "mutable", + "name": "max", + "nameLocation": "3163:3:17", + "nodeType": "VariableDeclaration", + "scope": 1665, + "src": "3155:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1662, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3155:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3141:26:17" + }, + "src": "3107:61:17" + }, + { + "documentation": { + "id": 1666, + "nodeType": "StructuredDocumentation", + "src": "3174:228:17", + "text": " @notice Thrown when the caller is not authorized to manage the provision of a service provider.\n @param serviceProvider The address of the serviceProvider.\n @param caller The address of the caller." + }, + "errorSelector": "cc5d3c8b", + "id": 1672, + "name": "ProvisionManagerNotAuthorized", + "nameLocation": "3413:29:17", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1671, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1668, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3451:15:17", + "nodeType": "VariableDeclaration", + "scope": 1672, + "src": "3443:23:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1667, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3443:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1670, + "mutability": "mutable", + "name": "caller", + "nameLocation": "3476:6:17", + "nodeType": "VariableDeclaration", + "scope": 1672, + "src": "3468:14:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1669, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3468:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3442:41:17" + }, + "src": "3407:77:17" + }, + { + "documentation": { + "id": 1673, + "nodeType": "StructuredDocumentation", + "src": "3490:131:17", + "text": " @notice Thrown when a provision is not found.\n @param serviceProvider The address of the service provider." + }, + "errorSelector": "7b3c09bf", + "id": 1677, + "name": "ProvisionManagerProvisionNotFound", + "nameLocation": "3632:33:17", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1676, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1675, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3674:15:17", + "nodeType": "VariableDeclaration", + "scope": 1677, + "src": "3666:23:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1674, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3666:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3665:25:17" + }, + "src": "3626:65:17" + }, + { + "body": { + "id": 1702, + "nodeType": "Block", + "src": "3871:203:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 1686, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1680, + "src": "3931:15:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 1689, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3956:4:17", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ProvisionManager_$2128", + "typeString": "contract ProvisionManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ProvisionManager_$2128", + "typeString": "contract ProvisionManager" + } + ], + "id": 1688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3948:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1687, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3948:7:17", + "typeDescriptions": {} + } + }, + "id": 1690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3948:13:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 1691, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3963:3:17", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1692, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3967:6:17", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3963:10:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1683, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "3902:13:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 1684, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3902:15:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 1685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3918:12:17", + "memberName": "isAuthorized", + "nodeType": "MemberAccess", + "referencedDeclaration": 3694, + "src": "3902:28:17", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (address,address,address) view external returns (bool)" + } + }, + "id": 1693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3902:72:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 1695, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1680, + "src": "4018:15:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 1696, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4035:3:17", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4039:6:17", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4035:10:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1694, + "name": "ProvisionManagerNotAuthorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1672, + "src": "3988:29:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", + "typeString": "function (address,address) pure returns (error)" + } + }, + "id": 1698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3988:58:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 1682, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3881:7:17", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 1699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3881:175:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1700, + "nodeType": "ExpressionStatement", + "src": "3881:175:17" + }, + { + "id": 1701, + "nodeType": "PlaceholderStatement", + "src": "4066:1:17" + } + ] + }, + "documentation": { + "id": 1678, + "nodeType": "StructuredDocumentation", + "src": "3697:108:17", + "text": " @notice Checks if the caller is authorized to manage the provision of a service provider." + }, + "id": 1703, + "name": "onlyAuthorizedForProvision", + "nameLocation": "3819:26:17", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 1681, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1680, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3854:15:17", + "nodeType": "VariableDeclaration", + "scope": 1703, + "src": "3846:23:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1679, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3846:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3845:25:17" + }, + "src": "3810:264:17", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1727, + "nodeType": "Block", + "src": "4279:198:17", + "statements": [ + { + "assignments": [ + 1712 + ], + "declarations": [ + { + "constant": false, + "id": 1712, + "mutability": "mutable", + "name": "provision", + "nameLocation": "4322:9:17", + "nodeType": "VariableDeclaration", + "scope": 1727, + "src": "4289:42:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 1711, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1710, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "4289:15:17", + "4305:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "4289:25:17" + }, + "referencedDeclaration": 3718, + "src": "4289:25:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "id": 1716, + "initialValue": { + "arguments": [ + { + "id": 1714, + "name": "serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1706, + "src": "4348:15:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1713, + "name": "_getProvision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2100, + "src": "4334:13:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", + "typeString": "function (address) view returns (struct IHorizonStakingTypes.Provision memory)" + } + }, + "id": 1715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4334:30:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4289:75:17" + }, + { + "expression": { + "arguments": [ + { + "id": 1718, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1712, + "src": "4396:9:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + ], + "id": 1717, + "name": "_checkProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1920, + 1936 + ], + "referencedDeclaration": 1936, + "src": "4374:21:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Provision_$3718_memory_ptr_$returns$__$", + "typeString": "function (struct IHorizonStakingTypes.Provision memory) view" + } + }, + "id": 1719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4374:32:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1720, + "nodeType": "ExpressionStatement", + "src": "4374:32:17" + }, + { + "expression": { + "arguments": [ + { + "id": 1722, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1712, + "src": "4442:9:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + { + "hexValue": "66616c7365", + "id": 1723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4453:5:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 1721, + "name": "_checkProvisionParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1959, + 2015 + ], + "referencedDeclaration": 2015, + "src": "4416:25:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Provision_$3718_memory_ptr_$_t_bool_$returns$__$", + "typeString": "function (struct IHorizonStakingTypes.Provision memory,bool) view" + } + }, + "id": 1724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4416:43:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1725, + "nodeType": "ExpressionStatement", + "src": "4416:43:17" + }, + { + "id": 1726, + "nodeType": "PlaceholderStatement", + "src": "4469:1:17" + } + ] + }, + "documentation": { + "id": 1704, + "nodeType": "StructuredDocumentation", + "src": "4080:133:17", + "text": " @notice Checks if a provision of a service provider is valid according\n to the parameter ranges established." + }, + "id": 1728, + "name": "onlyValidProvision", + "nameLocation": "4227:18:17", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 1707, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1706, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "4254:15:17", + "nodeType": "VariableDeclaration", + "scope": 1728, + "src": "4246:23:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1705, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4246:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4245:25:17" + }, + "src": "4218:259:17", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 1737, + "nodeType": "Block", + "src": "4679:52:17", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1734, + "name": "__ProvisionManager_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1760, + "src": "4689:33:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 1735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4689:35:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1736, + "nodeType": "ExpressionStatement", + "src": "4689:35:17" + } + ] + }, + "documentation": { + "id": 1729, + "nodeType": "StructuredDocumentation", + "src": "4483:77:17", + "text": " @notice Initializes the contract and any parent contracts." + }, + "id": 1738, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 1732, + "kind": "modifierInvocation", + "modifierName": { + "id": 1731, + "name": "onlyInitializing", + "nameLocations": [ + "4662:16:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "4662:16:17" + }, + "nodeType": "ModifierInvocation", + "src": "4662:16:17" + } + ], + "name": "__ProvisionManager_init", + "nameLocation": "4627:23:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1730, + "nodeType": "ParameterList", + "parameters": [], + "src": "4650:2:17" + }, + "returnParameters": { + "id": 1733, + "nodeType": "ParameterList", + "parameters": [], + "src": "4679:0:17" + }, + "scope": 2128, + "src": "4618:113:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1759, + "nodeType": "Block", + "src": "4981:271:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 1745, + "name": "DEFAULT_MIN_PROVISION_TOKENS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1614, + "src": "5016:28:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1746, + "name": "DEFAULT_MAX_PROVISION_TOKENS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1621, + "src": "5046:28:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1744, + "name": "_setProvisionTokensRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1825, + "src": "4991:24:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 1747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4991:84:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1748, + "nodeType": "ExpressionStatement", + "src": "4991:84:17" + }, + { + "expression": { + "arguments": [ + { + "id": 1750, + "name": "DEFAULT_MIN_VERIFIER_CUT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1586, + "src": "5106:24:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 1751, + "name": "DEFAULT_MAX_VERIFIER_CUT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1593, + "src": "5132:24:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 1749, + "name": "_setVerifierCutRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1868, + "src": "5085:20:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_uint32_$returns$__$", + "typeString": "function (uint32,uint32)" + } + }, + "id": 1752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5085:72:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1753, + "nodeType": "ExpressionStatement", + "src": "5085:72:17" + }, + { + "expression": { + "arguments": [ + { + "id": 1755, + "name": "DEFAULT_MIN_THAWING_PERIOD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1600, + "src": "5190:26:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 1756, + "name": "DEFAULT_MAX_THAWING_PERIOD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1607, + "src": "5218:26:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 1754, + "name": "_setThawingPeriodRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1900, + "src": "5167:22:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$_t_uint64_$returns$__$", + "typeString": "function (uint64,uint64)" + } + }, + "id": 1757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5167:78:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1758, + "nodeType": "ExpressionStatement", + "src": "5167:78:17" + } + ] + }, + "documentation": { + "id": 1739, + "nodeType": "StructuredDocumentation", + "src": "4737:115:17", + "text": " @notice Initializes the contract.\n @dev All parameters set to their entire range as valid." + }, + "id": 1760, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 1742, + "kind": "modifierInvocation", + "modifierName": { + "id": 1741, + "name": "onlyInitializing", + "nameLocations": [ + "4964:16:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "4964:16:17" + }, + "nodeType": "ModifierInvocation", + "src": "4964:16:17" + } + ], + "name": "__ProvisionManager_init_unchained", + "nameLocation": "4919:33:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1740, + "nodeType": "ParameterList", + "parameters": [], + "src": "4952:2:17" + }, + "returnParameters": { + "id": 1743, + "nodeType": "ParameterList", + "parameters": [], + "src": "4981:0:17" + }, + "scope": 2128, + "src": "4910:342:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1777, + "nodeType": "Block", + "src": "5685:135:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 1767, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1763, + "src": "5721:16:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "hexValue": "74727565", + "id": 1768, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5739:4:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 1766, + "name": "_checkProvisionParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1959, + 2015 + ], + "referencedDeclaration": 1959, + "src": "5695:25:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$returns$__$", + "typeString": "function (address,bool) view" + } + }, + "id": 1769, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5695:49:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1770, + "nodeType": "ExpressionStatement", + "src": "5695:49:17" + }, + { + "expression": { + "arguments": [ + { + "id": 1774, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1763, + "src": "5796:16:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1771, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "5754:13:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 1772, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5754:15:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 1773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5770:25:17", + "memberName": "acceptProvisionParameters", + "nodeType": "MemberAccess", + "referencedDeclaration": 3503, + "src": "5754:41:17", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", + "typeString": "function (address) external" + } + }, + "id": 1775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5754:59:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1776, + "nodeType": "ExpressionStatement", + "src": "5754:59:17" + } + ] + }, + "documentation": { + "id": 1761, + "nodeType": "StructuredDocumentation", + "src": "5258:351:17", + "text": " @notice Verifies and accepts the provision parameters of a service provider in\n the {HorizonStaking} contract.\n @dev Checks the pending provision parameters, not the current ones.\n Emits a {ProvisionPendingParametersAccepted} event.\n @param _serviceProvider The address of the service provider." + }, + "id": 1778, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_acceptProvisionParameters", + "nameLocation": "5623:26:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1764, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1763, + "mutability": "mutable", + "name": "_serviceProvider", + "nameLocation": "5658:16:17", + "nodeType": "VariableDeclaration", + "scope": 1778, + "src": "5650:24:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1762, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5650:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5649:26:17" + }, + "returnParameters": { + "id": 1765, + "nodeType": "ParameterList", + "parameters": [], + "src": "5685:0:17" + }, + "scope": 2128, + "src": "5614:206:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1792, + "nodeType": "Block", + "src": "6010:82:17", + "statements": [ + { + "expression": { + "id": 1786, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 1784, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2152, + "src": "6020:15:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1785, + "name": "_ratio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1781, + "src": "6038:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "6020:24:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 1787, + "nodeType": "ExpressionStatement", + "src": "6020:24:17" + }, + { + "eventCall": { + "arguments": [ + { + "id": 1789, + "name": "_ratio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1781, + "src": "6078:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 1788, + "name": "DelegationRatioSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1633, + "src": "6059:18:17", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$returns$__$", + "typeString": "function (uint32)" + } + }, + "id": 1790, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6059:26:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1791, + "nodeType": "EmitStatement", + "src": "6054:31:17" + } + ] + }, + "documentation": { + "id": 1779, + "nodeType": "StructuredDocumentation", + "src": "5847:105:17", + "text": " @notice Sets the delegation ratio.\n @param _ratio The delegation ratio to be set" + }, + "id": 1793, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setDelegationRatio", + "nameLocation": "5966:19:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1782, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1781, + "mutability": "mutable", + "name": "_ratio", + "nameLocation": "5993:6:17", + "nodeType": "VariableDeclaration", + "scope": 1793, + "src": "5986:13:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1780, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5986:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "5985:15:17" + }, + "returnParameters": { + "id": 1783, + "nodeType": "ParameterList", + "parameters": [], + "src": "6010:0:17" + }, + "scope": 2128, + "src": "5957:135:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1824, + "nodeType": "Block", + "src": "6383:208:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 1802, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1796, + "src": "6401:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 1803, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1798, + "src": "6409:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6401:12:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 1806, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1796, + "src": "6444:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1807, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1798, + "src": "6450:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1805, + "name": "ProvisionManagerInvalidRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1665, + "src": "6415:28:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 1808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6415:40:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 1801, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6393:7:17", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 1809, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6393:63:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1810, + "nodeType": "ExpressionStatement", + "src": "6393:63:17" + }, + { + "expression": { + "id": 1813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 1811, + "name": "minimumProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2134, + "src": "6466:22:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1812, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1796, + "src": "6491:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6466:29:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1814, + "nodeType": "ExpressionStatement", + "src": "6466:29:17" + }, + { + "expression": { + "id": 1817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 1815, + "name": "maximumProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2137, + "src": "6505:22:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1816, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1798, + "src": "6530:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6505:29:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1818, + "nodeType": "ExpressionStatement", + "src": "6505:29:17" + }, + { + "eventCall": { + "arguments": [ + { + "id": 1820, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1796, + "src": "6573:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1821, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1798, + "src": "6579:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1819, + "name": "ProvisionTokensRangeSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1628, + "src": "6549:23:17", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 1822, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6549:35:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1823, + "nodeType": "EmitStatement", + "src": "6544:40:17" + } + ] + }, + "documentation": { + "id": 1794, + "nodeType": "StructuredDocumentation", + "src": "6098:209:17", + "text": " @notice Sets the range for the provision tokens.\n @param _min The minimum allowed value for the provision tokens.\n @param _max The maximum allowed value for the provision tokens." + }, + "id": 1825, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setProvisionTokensRange", + "nameLocation": "6321:24:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1799, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1796, + "mutability": "mutable", + "name": "_min", + "nameLocation": "6354:4:17", + "nodeType": "VariableDeclaration", + "scope": 1825, + "src": "6346:12:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1795, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6346:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1798, + "mutability": "mutable", + "name": "_max", + "nameLocation": "6368:4:17", + "nodeType": "VariableDeclaration", + "scope": 1825, + "src": "6360:12:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1797, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6360:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6345:28:17" + }, + "returnParameters": { + "id": 1800, + "nodeType": "ParameterList", + "parameters": [], + "src": "6383:0:17" + }, + "scope": 2128, + "src": "6312:279:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1867, + "nodeType": "Block", + "src": "6872:281:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 1836, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 1834, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1828, + "src": "6890:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 1835, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1830, + "src": "6898:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "6890:12:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 1838, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1828, + "src": "6933:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 1839, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1830, + "src": "6939:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 1837, + "name": "ProvisionManagerInvalidRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1665, + "src": "6904:28:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 1840, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6904:40:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 1833, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6882:7:17", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 1841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6882:63:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1842, + "nodeType": "ExpressionStatement", + "src": "6882:63:17" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 1846, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1830, + "src": "6982:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "id": 1844, + "name": "PPMMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4262, + "src": "6963:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_PPMMath_$4262_$", + "typeString": "type(library PPMMath)" + } + }, + "id": 1845, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6971:10:17", + "memberName": "isValidPPM", + "nodeType": "MemberAccess", + "referencedDeclaration": 4261, + "src": "6963:18:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) pure returns (bool)" + } + }, + "id": 1847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6963:24:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 1849, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1828, + "src": "7018:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 1850, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1830, + "src": "7024:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 1848, + "name": "ProvisionManagerInvalidRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1665, + "src": "6989:28:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 1851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6989:40:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 1843, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6955:7:17", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 1852, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6955:75:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1853, + "nodeType": "ExpressionStatement", + "src": "6955:75:17" + }, + { + "expression": { + "id": 1856, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 1854, + "name": "minimumVerifierCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2146, + "src": "7040:18:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1855, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1828, + "src": "7061:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "7040:25:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 1857, + "nodeType": "ExpressionStatement", + "src": "7040:25:17" + }, + { + "expression": { + "id": 1860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 1858, + "name": "maximumVerifierCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2149, + "src": "7075:18:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1859, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1830, + "src": "7096:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "7075:25:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 1861, + "nodeType": "ExpressionStatement", + "src": "7075:25:17" + }, + { + "eventCall": { + "arguments": [ + { + "id": 1863, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1828, + "src": "7135:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 1864, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1830, + "src": "7141:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 1862, + "name": "VerifierCutRangeSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1640, + "src": "7115:19:17", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$", + "typeString": "function (uint32,uint32)" + } + }, + "id": 1865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7115:31:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1866, + "nodeType": "EmitStatement", + "src": "7110:36:17" + } + ] + }, + "documentation": { + "id": 1826, + "nodeType": "StructuredDocumentation", + "src": "6597:205:17", + "text": " @notice Sets the range for the verifier cut.\n @param _min The minimum allowed value for the max verifier cut.\n @param _max The maximum allowed value for the max verifier cut." + }, + "id": 1868, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setVerifierCutRange", + "nameLocation": "6816:20:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1831, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1828, + "mutability": "mutable", + "name": "_min", + "nameLocation": "6844:4:17", + "nodeType": "VariableDeclaration", + "scope": 1868, + "src": "6837:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1827, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "6837:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1830, + "mutability": "mutable", + "name": "_max", + "nameLocation": "6857:4:17", + "nodeType": "VariableDeclaration", + "scope": 1868, + "src": "6850:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1829, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "6850:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "6836:26:17" + }, + "returnParameters": { + "id": 1832, + "nodeType": "ParameterList", + "parameters": [], + "src": "6872:0:17" + }, + "scope": 2128, + "src": "6807:346:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1899, + "nodeType": "Block", + "src": "7434:202:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 1879, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 1877, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1871, + "src": "7452:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 1878, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1873, + "src": "7460:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "7452:12:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 1881, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1871, + "src": "7495:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 1882, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1873, + "src": "7501:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 1880, + "name": "ProvisionManagerInvalidRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1665, + "src": "7466:28:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 1883, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7466:40:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 1876, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7444:7:17", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 1884, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7444:63:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1885, + "nodeType": "ExpressionStatement", + "src": "7444:63:17" + }, + { + "expression": { + "id": 1888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 1886, + "name": "minimumThawingPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2140, + "src": "7517:20:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1887, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1871, + "src": "7540:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "7517:27:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 1889, + "nodeType": "ExpressionStatement", + "src": "7517:27:17" + }, + { + "expression": { + "id": 1892, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 1890, + "name": "maximumThawingPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2143, + "src": "7554:20:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 1891, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1873, + "src": "7577:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "7554:27:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 1893, + "nodeType": "ExpressionStatement", + "src": "7554:27:17" + }, + { + "eventCall": { + "arguments": [ + { + "id": 1895, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1871, + "src": "7618:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 1896, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1873, + "src": "7624:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 1894, + "name": "ThawingPeriodRangeSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1647, + "src": "7596:21:17", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$_t_uint64_$returns$__$", + "typeString": "function (uint64,uint64)" + } + }, + "id": 1897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7596:33:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1898, + "nodeType": "EmitStatement", + "src": "7591:38:17" + } + ] + }, + "documentation": { + "id": 1869, + "nodeType": "StructuredDocumentation", + "src": "7159:203:17", + "text": " @notice Sets the range for the thawing period.\n @param _min The minimum allowed value for the thawing period.\n @param _max The maximum allowed value for the thawing period." + }, + "id": 1900, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setThawingPeriodRange", + "nameLocation": "7376:22:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1874, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1871, + "mutability": "mutable", + "name": "_min", + "nameLocation": "7406:4:17", + "nodeType": "VariableDeclaration", + "scope": 1900, + "src": "7399:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1870, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "7399:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1873, + "mutability": "mutable", + "name": "_max", + "nameLocation": "7419:4:17", + "nodeType": "VariableDeclaration", + "scope": 1900, + "src": "7412:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1872, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "7412:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "7398:26:17" + }, + "returnParameters": { + "id": 1875, + "nodeType": "ParameterList", + "parameters": [], + "src": "7434:0:17" + }, + "scope": 2128, + "src": "7367:269:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1919, + "nodeType": "Block", + "src": "7922:135:17", + "statements": [ + { + "assignments": [ + 1910 + ], + "declarations": [ + { + "constant": false, + "id": 1910, + "mutability": "mutable", + "name": "provision", + "nameLocation": "7965:9:17", + "nodeType": "VariableDeclaration", + "scope": 1919, + "src": "7932:42:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 1909, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1908, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "7932:15:17", + "7948:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "7932:25:17" + }, + "referencedDeclaration": 3718, + "src": "7932:25:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "id": 1914, + "initialValue": { + "arguments": [ + { + "id": 1912, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1903, + "src": "7991:16:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1911, + "name": "_getProvision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2100, + "src": "7977:13:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", + "typeString": "function (address) view returns (struct IHorizonStakingTypes.Provision memory)" + } + }, + "id": 1913, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7977:31:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7932:76:17" + }, + { + "expression": { + "arguments": [ + { + "id": 1916, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1910, + "src": "8040:9:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + ], + "id": 1915, + "name": "_checkProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1920, + 1936 + ], + "referencedDeclaration": 1936, + "src": "8018:21:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Provision_$3718_memory_ptr_$returns$__$", + "typeString": "function (struct IHorizonStakingTypes.Provision memory) view" + } + }, + "id": 1917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8018:32:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1918, + "nodeType": "ExpressionStatement", + "src": "8018:32:17" + } + ] + }, + "documentation": { + "id": 1901, + "nodeType": "StructuredDocumentation", + "src": "7663:175:17", + "text": " @notice Checks if the provision tokens of a service provider are within the valid range.\n @param _serviceProvider The address of the service provider." + }, + "id": 1920, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkProvisionTokens", + "nameLocation": "7852:21:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1904, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1903, + "mutability": "mutable", + "name": "_serviceProvider", + "nameLocation": "7882:16:17", + "nodeType": "VariableDeclaration", + "scope": 1920, + "src": "7874:24:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1902, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7874:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7873:26:17" + }, + "returnParameters": { + "id": 1905, + "nodeType": "ParameterList", + "parameters": [], + "src": "7922:0:17" + }, + "scope": 2128, + "src": "7843:214:17", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 1935, + "nodeType": "Block", + "src": "8322:112:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 1928, + "name": "_provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1924, + "src": "8351:10:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 1929, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8362:6:17", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 3701, + "src": "8351:17:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1930, + "name": "minimumProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2134, + "src": "8370:22:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 1931, + "name": "maximumProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2137, + "src": "8394:22:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "746f6b656e73", + "id": 1932, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8418:8:17", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_680989b8ba4329dbb34fe099c4644fce6e521152facc82d70e978bdc51facd5c", + "typeString": "literal_string \"tokens\"" + }, + "value": "tokens" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_680989b8ba4329dbb34fe099c4644fce6e521152facc82d70e978bdc51facd5c", + "typeString": "literal_string \"tokens\"" + } + ], + "id": 1927, + "name": "_checkValueInRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2127, + "src": "8332:18:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (uint256,uint256,uint256,bytes memory) pure" + } + }, + "id": 1933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8332:95:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1934, + "nodeType": "ExpressionStatement", + "src": "8332:95:17" + } + ] + }, + "documentation": { + "id": 1921, + "nodeType": "StructuredDocumentation", + "src": "8063:156:17", + "text": " @notice Checks if the provision tokens of a service provider are within the valid range.\n @param _provision The provision to check." + }, + "id": 1936, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkProvisionTokens", + "nameLocation": "8233:21:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1925, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1924, + "mutability": "mutable", + "name": "_provision", + "nameLocation": "8288:10:17", + "nodeType": "VariableDeclaration", + "scope": 1936, + "src": "8255:43:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 1923, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1922, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "8255:15:17", + "8271:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "8255:25:17" + }, + "referencedDeclaration": 3718, + "src": "8255:25:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "src": "8254:45:17" + }, + "returnParameters": { + "id": 1926, + "nodeType": "ParameterList", + "parameters": [], + "src": "8322:0:17" + }, + "scope": 2128, + "src": "8224:210:17", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 1958, + "nodeType": "Block", + "src": "8805:154:17", + "statements": [ + { + "assignments": [ + 1948 + ], + "declarations": [ + { + "constant": false, + "id": 1948, + "mutability": "mutable", + "name": "provision", + "nameLocation": "8848:9:17", + "nodeType": "VariableDeclaration", + "scope": 1958, + "src": "8815:42:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 1947, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1946, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "8815:15:17", + "8831:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "8815:25:17" + }, + "referencedDeclaration": 3718, + "src": "8815:25:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "id": 1952, + "initialValue": { + "arguments": [ + { + "id": 1950, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1939, + "src": "8874:16:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1949, + "name": "_getProvision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2100, + "src": "8860:13:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", + "typeString": "function (address) view returns (struct IHorizonStakingTypes.Provision memory)" + } + }, + "id": 1951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8860:31:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8815:76:17" + }, + { + "expression": { + "arguments": [ + { + "id": 1954, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1948, + "src": "8927:9:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + { + "id": 1955, + "name": "_checkPending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1941, + "src": "8938:13:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 1953, + "name": "_checkProvisionParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1959, + 2015 + ], + "referencedDeclaration": 2015, + "src": "8901:25:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Provision_$3718_memory_ptr_$_t_bool_$returns$__$", + "typeString": "function (struct IHorizonStakingTypes.Provision memory,bool) view" + } + }, + "id": 1956, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8901:51:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1957, + "nodeType": "ExpressionStatement", + "src": "8901:51:17" + } + ] + }, + "documentation": { + "id": 1937, + "nodeType": "StructuredDocumentation", + "src": "8440:257:17", + "text": " @notice Checks if the provision parameters of a service provider are within the valid range.\n @param _serviceProvider The address of the service provider.\n @param _checkPending If true, checks the pending provision parameters." + }, + "id": 1959, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkProvisionParameters", + "nameLocation": "8711:25:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1942, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1939, + "mutability": "mutable", + "name": "_serviceProvider", + "nameLocation": "8745:16:17", + "nodeType": "VariableDeclaration", + "scope": 1959, + "src": "8737:24:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1938, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8737:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1941, + "mutability": "mutable", + "name": "_checkPending", + "nameLocation": "8768:13:17", + "nodeType": "VariableDeclaration", + "scope": 1959, + "src": "8763:18:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1940, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8763:4:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8736:46:17" + }, + "returnParameters": { + "id": 1943, + "nodeType": "ParameterList", + "parameters": [], + "src": "8805:0:17" + }, + "scope": 2128, + "src": "8702:257:17", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2014, + "nodeType": "Block", + "src": "9380:611:17", + "statements": [ + { + "assignments": [ + 1969, + 1971 + ], + "declarations": [ + { + "constant": false, + "id": 1969, + "mutability": "mutable", + "name": "thawingPeriodMin", + "nameLocation": "9398:16:17", + "nodeType": "VariableDeclaration", + "scope": 2014, + "src": "9391:23:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1968, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "9391:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1971, + "mutability": "mutable", + "name": "thawingPeriodMax", + "nameLocation": "9423:16:17", + "nodeType": "VariableDeclaration", + "scope": 2014, + "src": "9416:23:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1970, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "9416:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 1974, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1972, + "name": "_getThawingPeriodRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2050, + "src": "9443:22:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$_t_uint64_$", + "typeString": "function () view returns (uint64,uint64)" + } + }, + "id": 1973, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9443:24:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint64_$_t_uint64_$", + "typeString": "tuple(uint64,uint64)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9390:77:17" + }, + { + "assignments": [ + 1976 + ], + "declarations": [ + { + "constant": false, + "id": 1976, + "mutability": "mutable", + "name": "thawingPeriodToCheck", + "nameLocation": "9484:20:17", + "nodeType": "VariableDeclaration", + "scope": 2014, + "src": "9477:27:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 1975, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "9477:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 1983, + "initialValue": { + "condition": { + "id": 1977, + "name": "_checkPending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1965, + "src": "9507:13:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "expression": { + "id": 1980, + "name": "_provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1963, + "src": "9557:10:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 1981, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9568:13:17", + "memberName": "thawingPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 3709, + "src": "9557:24:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 1982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "9507:74:17", + "trueExpression": { + "expression": { + "id": 1978, + "name": "_provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1963, + "src": "9523:10:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 1979, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9534:20:17", + "memberName": "thawingPeriodPending", + "nodeType": "MemberAccess", + "referencedDeclaration": 3715, + "src": "9523:31:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9477:104:17" + }, + { + "expression": { + "arguments": [ + { + "id": 1985, + "name": "thawingPeriodToCheck", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1976, + "src": "9610:20:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 1986, + "name": "thawingPeriodMin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1969, + "src": "9632:16:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 1987, + "name": "thawingPeriodMax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1971, + "src": "9650:16:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "hexValue": "74686177696e67506572696f64", + "id": 1988, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9668:15:17", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_305ab1a02b7b2a803db444b8e35c7e19e6475b5dd6b215ff165ee071bbd360ee", + "typeString": "literal_string \"thawingPeriod\"" + }, + "value": "thawingPeriod" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_stringliteral_305ab1a02b7b2a803db444b8e35c7e19e6475b5dd6b215ff165ee071bbd360ee", + "typeString": "literal_string \"thawingPeriod\"" + } + ], + "id": 1984, + "name": "_checkValueInRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2127, + "src": "9591:18:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (uint256,uint256,uint256,bytes memory) pure" + } + }, + "id": 1989, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9591:93:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1990, + "nodeType": "ExpressionStatement", + "src": "9591:93:17" + }, + { + "assignments": [ + 1992, + 1994 + ], + "declarations": [ + { + "constant": false, + "id": 1992, + "mutability": "mutable", + "name": "verifierCutMin", + "nameLocation": "9703:14:17", + "nodeType": "VariableDeclaration", + "scope": 2014, + "src": "9696:21:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1991, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "9696:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1994, + "mutability": "mutable", + "name": "verifierCutMax", + "nameLocation": "9726:14:17", + "nodeType": "VariableDeclaration", + "scope": 2014, + "src": "9719:21:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1993, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "9719:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 1997, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1995, + "name": "_getVerifierCutRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2063, + "src": "9744:20:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$_t_uint32_$", + "typeString": "function () view returns (uint32,uint32)" + } + }, + "id": 1996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9744:22:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$", + "typeString": "tuple(uint32,uint32)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9695:71:17" + }, + { + "assignments": [ + 1999 + ], + "declarations": [ + { + "constant": false, + "id": 1999, + "mutability": "mutable", + "name": "maxVerifierCutToCheck", + "nameLocation": "9783:21:17", + "nodeType": "VariableDeclaration", + "scope": 2014, + "src": "9776:28:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1998, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "9776:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 2006, + "initialValue": { + "condition": { + "id": 2000, + "name": "_checkPending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1965, + "src": "9807:13:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "expression": { + "id": 2003, + "name": "_provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1963, + "src": "9858:10:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 2004, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9869:14:17", + "memberName": "maxVerifierCut", + "nodeType": "MemberAccess", + "referencedDeclaration": 3707, + "src": "9858:25:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 2005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "9807:76:17", + "trueExpression": { + "expression": { + "id": 2001, + "name": "_provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1963, + "src": "9823:10:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 2002, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9834:21:17", + "memberName": "maxVerifierCutPending", + "nodeType": "MemberAccess", + "referencedDeclaration": 3713, + "src": "9823:32:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9776:107:17" + }, + { + "expression": { + "arguments": [ + { + "id": 2008, + "name": "maxVerifierCutToCheck", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1999, + "src": "9912:21:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 2009, + "name": "verifierCutMin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1992, + "src": "9935:14:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 2010, + "name": "verifierCutMax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1994, + "src": "9951:14:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "hexValue": "6d61785665726966696572437574", + "id": 2011, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9967:16:17", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_68fc3345e83d56ef118660e3367c327aecf533ff1f8bdee8e3dd2ce1b31b5e0c", + "typeString": "literal_string \"maxVerifierCut\"" + }, + "value": "maxVerifierCut" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_stringliteral_68fc3345e83d56ef118660e3367c327aecf533ff1f8bdee8e3dd2ce1b31b5e0c", + "typeString": "literal_string \"maxVerifierCut\"" + } + ], + "id": 2007, + "name": "_checkValueInRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2127, + "src": "9893:18:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (uint256,uint256,uint256,bytes memory) pure" + } + }, + "id": 2012, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9893:91:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2013, + "nodeType": "ExpressionStatement", + "src": "9893:91:17" + } + ] + }, + "documentation": { + "id": 1960, + "nodeType": "StructuredDocumentation", + "src": "8965:266:17", + "text": " @notice Checks if the provision parameters of a service provider are within the valid range.\n @param _provision The provision to check.\n @param _checkPending If true, checks the pending provision parameters instead of the current ones." + }, + "id": 2015, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkProvisionParameters", + "nameLocation": "9245:25:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1966, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1963, + "mutability": "mutable", + "name": "_provision", + "nameLocation": "9313:10:17", + "nodeType": "VariableDeclaration", + "scope": 2015, + "src": "9280:43:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 1962, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1961, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "9280:15:17", + "9296:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "9280:25:17" + }, + "referencedDeclaration": 3718, + "src": "9280:25:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1965, + "mutability": "mutable", + "name": "_checkPending", + "nameLocation": "9338:13:17", + "nodeType": "VariableDeclaration", + "scope": 2015, + "src": "9333:18:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1964, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9333:4:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "9270:87:17" + }, + "returnParameters": { + "id": 1967, + "nodeType": "ParameterList", + "parameters": [], + "src": "9380:0:17" + }, + "scope": 2128, + "src": "9236:755:17", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2023, + "nodeType": "Block", + "src": "10175:39:17", + "statements": [ + { + "expression": { + "id": 2021, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2152, + "src": "10192:15:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "functionReturnParameters": 2020, + "id": 2022, + "nodeType": "Return", + "src": "10185:22:17" + } + ] + }, + "documentation": { + "id": 2016, + "nodeType": "StructuredDocumentation", + "src": "10019:89:17", + "text": " @notice Gets the delegation ratio.\n @return The delegation ratio" + }, + "id": 2024, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getDelegationRatio", + "nameLocation": "10122:19:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2017, + "nodeType": "ParameterList", + "parameters": [], + "src": "10141:2:17" + }, + "returnParameters": { + "id": 2020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2019, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2024, + "src": "10167:6:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2018, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "10167:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "10166:8:17" + }, + "scope": 2128, + "src": "10113:101:17", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2036, + "nodeType": "Block", + "src": "10527:72:17", + "statements": [ + { + "expression": { + "components": [ + { + "id": 2032, + "name": "minimumProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2134, + "src": "10545:22:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2033, + "name": "maximumProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2137, + "src": "10569:22:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 2034, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10544:48:17", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 2031, + "id": 2035, + "nodeType": "Return", + "src": "10537:55:17" + } + ] + }, + "documentation": { + "id": 2025, + "nodeType": "StructuredDocumentation", + "src": "10220:209:17", + "text": " @notice Gets the range for the provision tokens.\n @return min The minimum allowed value for the provision tokens.\n @return max The maximum allowed value for the provision tokens." + }, + "id": 2037, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getProvisionTokensRange", + "nameLocation": "10443:24:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2026, + "nodeType": "ParameterList", + "parameters": [], + "src": "10467:2:17" + }, + "returnParameters": { + "id": 2031, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2028, + "mutability": "mutable", + "name": "min", + "nameLocation": "10509:3:17", + "nodeType": "VariableDeclaration", + "scope": 2037, + "src": "10501:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2027, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10501:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2030, + "mutability": "mutable", + "name": "max", + "nameLocation": "10522:3:17", + "nodeType": "VariableDeclaration", + "scope": 2037, + "src": "10514:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2029, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10514:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10500:26:17" + }, + "scope": 2128, + "src": "10434:165:17", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2049, + "nodeType": "Block", + "src": "10903:68:17", + "statements": [ + { + "expression": { + "components": [ + { + "id": 2045, + "name": "minimumThawingPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2140, + "src": "10921:20:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 2046, + "name": "maximumThawingPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2143, + "src": "10943:20:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "id": 2047, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10920:44:17", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint64_$_t_uint64_$", + "typeString": "tuple(uint64,uint64)" + } + }, + "functionReturnParameters": 2044, + "id": 2048, + "nodeType": "Return", + "src": "10913:51:17" + } + ] + }, + "documentation": { + "id": 2038, + "nodeType": "StructuredDocumentation", + "src": "10605:204:17", + "text": " @notice Gets the range for the thawing period.\n @return min The minimum allowed value for the thawing period.\n @return max The maximum allowed value for the thawing period." + }, + "id": 2050, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getThawingPeriodRange", + "nameLocation": "10823:22:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2039, + "nodeType": "ParameterList", + "parameters": [], + "src": "10845:2:17" + }, + "returnParameters": { + "id": 2044, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2041, + "mutability": "mutable", + "name": "min", + "nameLocation": "10886:3:17", + "nodeType": "VariableDeclaration", + "scope": 2050, + "src": "10879:10:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2040, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "10879:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2043, + "mutability": "mutable", + "name": "max", + "nameLocation": "10898:3:17", + "nodeType": "VariableDeclaration", + "scope": 2050, + "src": "10891:10:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2042, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "10891:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "10878:24:17" + }, + "scope": 2128, + "src": "10814:157:17", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2062, + "nodeType": "Block", + "src": "11274:64:17", + "statements": [ + { + "expression": { + "components": [ + { + "id": 2058, + "name": "minimumVerifierCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2146, + "src": "11292:18:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 2059, + "name": "maximumVerifierCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2149, + "src": "11312:18:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "id": 2060, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11291:40:17", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$", + "typeString": "tuple(uint32,uint32)" + } + }, + "functionReturnParameters": 2057, + "id": 2061, + "nodeType": "Return", + "src": "11284:47:17" + } + ] + }, + "documentation": { + "id": 2051, + "nodeType": "StructuredDocumentation", + "src": "10977:205:17", + "text": " @notice Gets the range for the verifier cut.\n @return min The minimum allowed value for the max verifier cut.\n @return max The maximum allowed value for the max verifier cut." + }, + "id": 2063, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getVerifierCutRange", + "nameLocation": "11196:20:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2052, + "nodeType": "ParameterList", + "parameters": [], + "src": "11216:2:17" + }, + "returnParameters": { + "id": 2057, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2054, + "mutability": "mutable", + "name": "min", + "nameLocation": "11257:3:17", + "nodeType": "VariableDeclaration", + "scope": 2063, + "src": "11250:10:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2053, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "11250:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2056, + "mutability": "mutable", + "name": "max", + "nameLocation": "11269:3:17", + "nodeType": "VariableDeclaration", + "scope": 2063, + "src": "11262:10:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2055, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "11262:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "11249:24:17" + }, + "scope": 2128, + "src": "11187:151:17", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2099, + "nodeType": "Block", + "src": "11663:245:17", + "statements": [ + { + "assignments": [ + 2076 + ], + "declarations": [ + { + "constant": false, + "id": 2076, + "mutability": "mutable", + "name": "provision", + "nameLocation": "11706:9:17", + "nodeType": "VariableDeclaration", + "scope": 2099, + "src": "11673:42:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 2075, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2074, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "11673:15:17", + "11689:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "11673:25:17" + }, + "referencedDeclaration": 3718, + "src": "11673:25:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "id": 2086, + "initialValue": { + "arguments": [ + { + "id": 2080, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2066, + "src": "11747:16:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 2083, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "11773:4:17", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ProvisionManager_$2128", + "typeString": "contract ProvisionManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ProvisionManager_$2128", + "typeString": "contract ProvisionManager" + } + ], + "id": 2082, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11765:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2081, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11765:7:17", + "typeDescriptions": {} + } + }, + "id": 2084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11765:13:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2077, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "11718:13:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 2078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11718:15:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 2079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11734:12:17", + "memberName": "getProvision", + "nodeType": "MemberAccess", + "referencedDeclaration": 2784, + "src": "11718:28:17", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", + "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" + } + }, + "id": 2085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11718:61:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11673:106:17" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 2091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 2088, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2076, + "src": "11797:9:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 2089, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11807:9:17", + "memberName": "createdAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 3711, + "src": "11797:19:17", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 2090, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11820:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11797:24:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 2093, + "name": "_serviceProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2066, + "src": "11857:16:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2092, + "name": "ProvisionManagerProvisionNotFound", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1677, + "src": "11823:33:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 2094, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11823:51:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 2087, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "11789:7:17", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 2095, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11789:86:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2096, + "nodeType": "ExpressionStatement", + "src": "11789:86:17" + }, + { + "expression": { + "id": 2097, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2076, + "src": "11892:9:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "functionReturnParameters": 2071, + "id": 2098, + "nodeType": "Return", + "src": "11885:16:17" + } + ] + }, + "documentation": { + "id": 2064, + "nodeType": "StructuredDocumentation", + "src": "11344:208:17", + "text": " @notice Gets a provision from the {HorizonStaking} contract.\n @dev Requirements:\n - The provision must exist.\n @param _serviceProvider The address of the service provider." + }, + "id": 2100, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getProvision", + "nameLocation": "11566:13:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2067, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2066, + "mutability": "mutable", + "name": "_serviceProvider", + "nameLocation": "11588:16:17", + "nodeType": "VariableDeclaration", + "scope": 2100, + "src": "11580:24:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2065, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11580:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "11579:26:17" + }, + "returnParameters": { + "id": 2071, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2070, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2100, + "src": "11629:32:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 2069, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2068, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "11629:15:17", + "11645:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "11629:25:17" + }, + "referencedDeclaration": 3718, + "src": "11629:25:17", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "src": "11628:34:17" + }, + "scope": 2128, + "src": "11557:351:17", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2126, + "nodeType": "Block", + "src": "12324:120:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 2115, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2105, + "src": "12359:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2116, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2107, + "src": "12365:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 2113, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2103, + "src": "12342:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12349:9:17", + "memberName": "isInRange", + "nodeType": "MemberAccess", + "referencedDeclaration": 4289, + "src": "12342:16:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$attached_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (bool)" + } + }, + "id": 2117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12342:28:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 2119, + "name": "_revertMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2109, + "src": "12401:14:17", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 2120, + "name": "_value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2103, + "src": "12417:6:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2121, + "name": "_min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2105, + "src": "12425:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2122, + "name": "_max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2107, + "src": "12431:4:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2118, + "name": "ProvisionManagerInvalidValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1658, + "src": "12372:28:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (bytes memory,uint256,uint256,uint256) pure returns (error)" + } + }, + "id": 2123, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12372:64:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 2112, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "12334:7:17", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 2124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12334:103:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2125, + "nodeType": "ExpressionStatement", + "src": "12334:103:17" + } + ] + }, + "documentation": { + "id": 2101, + "nodeType": "StructuredDocumentation", + "src": "11914:291:17", + "text": " @notice Checks if a value is within a valid range.\n @param _value The value to check.\n @param _min The minimum allowed value.\n @param _max The maximum allowed value.\n @param _revertMessage The revert message to display if the value is out of range." + }, + "id": 2127, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkValueInRange", + "nameLocation": "12219:18:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2110, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2103, + "mutability": "mutable", + "name": "_value", + "nameLocation": "12246:6:17", + "nodeType": "VariableDeclaration", + "scope": 2127, + "src": "12238:14:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2102, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12238:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2105, + "mutability": "mutable", + "name": "_min", + "nameLocation": "12262:4:17", + "nodeType": "VariableDeclaration", + "scope": 2127, + "src": "12254:12:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2104, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12254:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2107, + "mutability": "mutable", + "name": "_max", + "nameLocation": "12276:4:17", + "nodeType": "VariableDeclaration", + "scope": 2127, + "src": "12268:12:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2106, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12268:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2109, + "mutability": "mutable", + "name": "_revertMessage", + "nameLocation": "12295:14:17", + "nodeType": "VariableDeclaration", + "scope": 2127, + "src": "12282:27:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2108, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "12282:5:17", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "12237:73:17" + }, + "returnParameters": { + "id": 2111, + "nodeType": "ParameterList", + "parameters": [], + "src": "12324:0:17" + }, + "scope": 2128, + "src": "12210:234:17", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 2129, + "src": "969:11477:17", + "usedErrors": [ + 1658, + 1665, + 1672, + 1677, + 4380, + 4865, + 4868 + ], + "usedEvents": [ + 1628, + 1633, + 1640, + 1647, + 4375, + 4873 + ] + } + ], + "src": "45:12402:17" + }, + "id": 17 + }, + "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol", + "exportedSymbols": { + "ProvisionManagerV1Storage": [ + 2158 + ] + }, + "id": 2159, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2130, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:18" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "ProvisionManagerV1Storage", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 2131, + "nodeType": "StructuredDocumentation", + "src": "70:76:18", + "text": " @title Storage layout for the {ProvisionManager} helper contract." + }, + "fullyImplemented": true, + "id": 2158, + "linearizedBaseContracts": [ + 2158 + ], + "name": "ProvisionManagerV1Storage", + "nameLocation": "165:25:18", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "documentation": { + "id": 2132, + "nodeType": "StructuredDocumentation", + "src": "197:93:18", + "text": "@notice The minimum amount of tokens required to register a provision in the data service" + }, + "functionSelector": "36fdd28a", + "id": 2134, + "mutability": "mutable", + "name": "minimumProvisionTokens", + "nameLocation": "310:22:18", + "nodeType": "VariableDeclaration", + "scope": 2158, + "src": "295:37:18", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2133, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "295:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2135, + "nodeType": "StructuredDocumentation", + "src": "339:92:18", + "text": "@notice The maximum amount of tokens allowed to register a provision in the data service" + }, + "functionSelector": "73371823", + "id": 2137, + "mutability": "mutable", + "name": "maximumProvisionTokens", + "nameLocation": "451:22:18", + "nodeType": "VariableDeclaration", + "scope": 2158, + "src": "436:37:18", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2136, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "436:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2138, + "nodeType": "StructuredDocumentation", + "src": "480:91:18", + "text": "@notice The minimum thawing period required to register a provision in the data service" + }, + "functionSelector": "8d2f2948", + "id": 2140, + "mutability": "mutable", + "name": "minimumThawingPeriod", + "nameLocation": "590:20:18", + "nodeType": "VariableDeclaration", + "scope": 2158, + "src": "576:34:18", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2139, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "576:6:18", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2141, + "nodeType": "StructuredDocumentation", + "src": "617:90:18", + "text": "@notice The maximum thawing period allowed to register a provision in the data service" + }, + "functionSelector": "9aafa5d1", + "id": 2143, + "mutability": "mutable", + "name": "maximumThawingPeriod", + "nameLocation": "726:20:18", + "nodeType": "VariableDeclaration", + "scope": 2158, + "src": "712:34:18", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2142, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "712:6:18", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2144, + "nodeType": "StructuredDocumentation", + "src": "753:98:18", + "text": "@notice The minimum verifier cut required to register a provision in the data service (in PPM)" + }, + "functionSelector": "88812583", + "id": 2146, + "mutability": "mutable", + "name": "minimumVerifierCut", + "nameLocation": "870:18:18", + "nodeType": "VariableDeclaration", + "scope": 2158, + "src": "856:32:18", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2145, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "856:6:18", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2147, + "nodeType": "StructuredDocumentation", + "src": "895:97:18", + "text": "@notice The maximum verifier cut allowed to register a provision in the data service (in PPM)" + }, + "functionSelector": "9249c5c1", + "id": 2149, + "mutability": "mutable", + "name": "maximumVerifierCut", + "nameLocation": "1011:18:18", + "nodeType": "VariableDeclaration", + "scope": 2158, + "src": "997:32:18", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2148, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "997:6:18", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2150, + "nodeType": "StructuredDocumentation", + "src": "1036:146:18", + "text": "@notice How much delegation the service provider can effectively use\n @dev Max calculated as service provider's stake * delegationRatio" + }, + "functionSelector": "bfdfa7af", + "id": 2152, + "mutability": "mutable", + "name": "delegationRatio", + "nameLocation": "1201:15:18", + "nodeType": "VariableDeclaration", + "scope": 2158, + "src": "1187:29:18", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2151, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1187:6:18", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2153, + "nodeType": "StructuredDocumentation", + "src": "1223:57:18", + "text": "@dev Gap to allow adding variables in future upgrades" + }, + "id": 2157, + "mutability": "mutable", + "name": "__gap", + "nameLocation": "1305:5:18", + "nodeType": "VariableDeclaration", + "scope": 2158, + "src": "1285:25:18", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 2154, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1285:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2156, + "length": { + "hexValue": "3530", + "id": 2155, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1293:2:18", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "1285:11:18", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + } + ], + "scope": 2159, + "src": "147:1166:18", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "45:1269:18" + }, + "id": 18 + }, + "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "exportedSymbols": { + "IGraphPayments": [ + 2211 + ] + }, + "id": 2212, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2160, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:19" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IGraphPayments", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2161, + "nodeType": "StructuredDocumentation", + "src": "70:264:19", + "text": " @title Interface for the {GraphPayments} contract\n @notice This contract is part of the Graph Horizon payments protocol. It's designed\n to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a\n set of pre established rules." + }, + "fullyImplemented": false, + "id": 2211, + "linearizedBaseContracts": [ + 2211 + ], + "name": "IGraphPayments", + "nameLocation": "345:14:19", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IGraphPayments.PaymentTypes", + "documentation": { + "id": 2162, + "nodeType": "StructuredDocumentation", + "src": "366:100:19", + "text": " @notice Types of payments that are supported by the payments protocol\n @dev" + }, + "id": 2166, + "members": [ + { + "id": 2163, + "name": "QueryFee", + "nameLocation": "499:8:19", + "nodeType": "EnumValue", + "src": "499:8:19" + }, + { + "id": 2164, + "name": "IndexingFee", + "nameLocation": "517:11:19", + "nodeType": "EnumValue", + "src": "517:11:19" + }, + { + "id": 2165, + "name": "IndexingRewards", + "nameLocation": "538:15:19", + "nodeType": "EnumValue", + "src": "538:15:19" + } + ], + "name": "PaymentTypes", + "nameLocation": "476:12:19", + "nodeType": "EnumDefinition", + "src": "471:88:19" + }, + { + "anonymous": false, + "documentation": { + "id": 2167, + "nodeType": "StructuredDocumentation", + "src": "565:486:19", + "text": " @notice Emitted when a payment is collected\n @param payer The address of the payer\n @param receiver The address of the receiver\n @param dataService The address of the data service\n @param tokensReceiver Amount of tokens for the receiver\n @param tokensDelegationPool Amount of tokens for delegators\n @param tokensDataService Amount of tokens for the data service\n @param tokensProtocol Amount of tokens charged as protocol tax" + }, + "eventSelector": "b6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca3", + "id": 2183, + "name": "PaymentCollected", + "nameLocation": "1062:16:19", + "nodeType": "EventDefinition", + "parameters": { + "id": 2182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2169, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "1104:5:19", + "nodeType": "VariableDeclaration", + "scope": 2183, + "src": "1088:21:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2168, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1088:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2171, + "indexed": true, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "1135:8:19", + "nodeType": "VariableDeclaration", + "scope": 2183, + "src": "1119:24:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2170, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1119:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2173, + "indexed": true, + "mutability": "mutable", + "name": "dataService", + "nameLocation": "1169:11:19", + "nodeType": "VariableDeclaration", + "scope": 2183, + "src": "1153:27:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2172, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1153:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2175, + "indexed": false, + "mutability": "mutable", + "name": "tokensReceiver", + "nameLocation": "1198:14:19", + "nodeType": "VariableDeclaration", + "scope": 2183, + "src": "1190:22:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2174, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1190:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2177, + "indexed": false, + "mutability": "mutable", + "name": "tokensDelegationPool", + "nameLocation": "1230:20:19", + "nodeType": "VariableDeclaration", + "scope": 2183, + "src": "1222:28:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2176, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1222:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2179, + "indexed": false, + "mutability": "mutable", + "name": "tokensDataService", + "nameLocation": "1268:17:19", + "nodeType": "VariableDeclaration", + "scope": 2183, + "src": "1260:25:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2178, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1260:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2181, + "indexed": false, + "mutability": "mutable", + "name": "tokensProtocol", + "nameLocation": "1303:14:19", + "nodeType": "VariableDeclaration", + "scope": 2183, + "src": "1295:22:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2180, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1295:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1078:245:19" + }, + "src": "1056:268:19" + }, + { + "documentation": { + "id": 2184, + "nodeType": "StructuredDocumentation", + "src": "1330:208:19", + "text": " @notice Thrown when there are insufficient tokens to pay the required amount\n @param tokens The amount of tokens available\n @param minTokens The amount of tokens being collected" + }, + "errorSelector": "8bd93bad", + "id": 2190, + "name": "GraphPaymentsInsufficientTokens", + "nameLocation": "1549:31:19", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2189, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2186, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "1589:6:19", + "nodeType": "VariableDeclaration", + "scope": 2190, + "src": "1581:14:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2185, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1581:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2188, + "mutability": "mutable", + "name": "minTokens", + "nameLocation": "1605:9:19", + "nodeType": "VariableDeclaration", + "scope": 2190, + "src": "1597:17:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2187, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1597:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1580:35:19" + }, + "src": "1543:73:19" + }, + { + "documentation": { + "id": 2191, + "nodeType": "StructuredDocumentation", + "src": "1622:132:19", + "text": " @notice Thrown when the protocol payment cut is invalid\n @param protocolPaymentCut The protocol payment cut" + }, + "errorSelector": "d3097bcb", + "id": 2195, + "name": "GraphPaymentsInvalidProtocolPaymentCut", + "nameLocation": "1765:38:19", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2193, + "mutability": "mutable", + "name": "protocolPaymentCut", + "nameLocation": "1812:18:19", + "nodeType": "VariableDeclaration", + "scope": 2195, + "src": "1804:26:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2192, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1804:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1803:28:19" + }, + "src": "1759:73:19" + }, + { + "documentation": { + "id": 2196, + "nodeType": "StructuredDocumentation", + "src": "1838:478:19", + "text": " @notice Collects funds from a payer.\n It will pay cuts to all relevant parties and forward the rest to the receiver.\n @param paymentType The type of payment as defined in {IGraphPayments}\n @param receiver The address of the receiver\n @param tokens The amount of tokens being collected\n @param dataService The address of the data service\n @param tokensDataService The amount of tokens that should be sent to the data service" + }, + "functionSelector": "6c69783a", + "id": 2210, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "collect", + "nameLocation": "2330:7:19", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2208, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2199, + "mutability": "mutable", + "name": "paymentType", + "nameLocation": "2360:11:19", + "nodeType": "VariableDeclaration", + "scope": 2210, + "src": "2347:24:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 2198, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2197, + "name": "PaymentTypes", + "nameLocations": [ + "2347:12:19" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "2347:12:19" + }, + "referencedDeclaration": 2166, + "src": "2347:12:19", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2201, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "2389:8:19", + "nodeType": "VariableDeclaration", + "scope": 2210, + "src": "2381:16:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2200, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2381:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2203, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2415:6:19", + "nodeType": "VariableDeclaration", + "scope": 2210, + "src": "2407:14:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2202, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2407:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2205, + "mutability": "mutable", + "name": "dataService", + "nameLocation": "2439:11:19", + "nodeType": "VariableDeclaration", + "scope": 2210, + "src": "2431:19:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2204, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2431:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2207, + "mutability": "mutable", + "name": "tokensDataService", + "nameLocation": "2468:17:19", + "nodeType": "VariableDeclaration", + "scope": 2210, + "src": "2460:25:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2206, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2460:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2337:154:19" + }, + "returnParameters": { + "id": 2209, + "nodeType": "ParameterList", + "parameters": [], + "src": "2500:0:19" + }, + "scope": 2211, + "src": "2321:180:19", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2212, + "src": "335:2168:19", + "usedErrors": [ + 2190, + 2195 + ], + "usedEvents": [ + 2183 + ] + } + ], + "src": "45:2459:19" + }, + "id": 19 + }, + "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol", + "exportedSymbols": { + "IGraphProxyAdmin": [ + 2215 + ] + }, + "id": 2216, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2213, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:20" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IGraphProxyAdmin", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2214, + "nodeType": "StructuredDocumentation", + "src": "71:142:20", + "text": " @title IGraphProxyAdmin\n @dev Empty interface to allow the GraphProxyAdmin contract to be used\n in the GraphDirectory contract." + }, + "fullyImplemented": true, + "id": 2215, + "linearizedBaseContracts": [ + 2215 + ], + "name": "IGraphProxyAdmin", + "nameLocation": "224:16:20", + "nodeType": "ContractDefinition", + "nodes": [], + "scope": 2216, + "src": "214:29:20", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:198:20" + }, + "id": 20 + }, + "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", + "exportedSymbols": { + "IHorizonStaking": [ + 2235 + ], + "IHorizonStakingBase": [ + 2871 + ], + "IHorizonStakingExtension": [ + 3022 + ], + "IHorizonStakingMain": [ + 3695 + ], + "IHorizonStakingTypes": [ + 3796 + ] + }, + "id": 2236, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2217, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:21" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", + "file": "./internal/IHorizonStakingTypes.sol", + "id": 2219, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2236, + "sourceUnit": 3797, + "src": "71:75:21", + "symbolAliases": [ + { + "foreign": { + "id": 2218, + "name": "IHorizonStakingTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3796, + "src": "80:20:21", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol", + "file": "./internal/IHorizonStakingMain.sol", + "id": 2221, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2236, + "sourceUnit": 3696, + "src": "147:73:21", + "symbolAliases": [ + { + "foreign": { + "id": 2220, + "name": "IHorizonStakingMain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3695, + "src": "156:19:21", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol", + "file": "./internal/IHorizonStakingBase.sol", + "id": 2223, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2236, + "sourceUnit": 2872, + "src": "221:73:21", + "symbolAliases": [ + { + "foreign": { + "id": 2222, + "name": "IHorizonStakingBase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2871, + "src": "230:19:21", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol", + "file": "./internal/IHorizonStakingExtension.sol", + "id": 2225, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2236, + "sourceUnit": 3023, + "src": "295:83:21", + "symbolAliases": [ + { + "foreign": { + "id": 2224, + "name": "IHorizonStakingExtension", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3022, + "src": "304:24:21", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 2227, + "name": "IHorizonStakingTypes", + "nameLocations": [ + "748:20:21" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3796, + "src": "748:20:21" + }, + "id": 2228, + "nodeType": "InheritanceSpecifier", + "src": "748:20:21" + }, + { + "baseName": { + "id": 2229, + "name": "IHorizonStakingBase", + "nameLocations": [ + "770:19:21" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2871, + "src": "770:19:21" + }, + "id": 2230, + "nodeType": "InheritanceSpecifier", + "src": "770:19:21" + }, + { + "baseName": { + "id": 2231, + "name": "IHorizonStakingMain", + "nameLocations": [ + "791:19:21" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3695, + "src": "791:19:21" + }, + "id": 2232, + "nodeType": "InheritanceSpecifier", + "src": "791:19:21" + }, + { + "baseName": { + "id": 2233, + "name": "IHorizonStakingExtension", + "nameLocations": [ + "812:24:21" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3022, + "src": "812:24:21" + }, + "id": 2234, + "nodeType": "InheritanceSpecifier", + "src": "812:24:21" + } + ], + "canonicalName": "IHorizonStaking", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2226, + "nodeType": "StructuredDocumentation", + "src": "380:338:21", + "text": " @title Complete interface for the Horizon Staking contract\n @notice This interface exposes all functions implemented by the {HorizonStaking} contract and its extension\n {HorizonStakingExtension} as well as the custom data types used by the contract.\n @dev Use this interface to interact with the Horizon Staking contract." + }, + "fullyImplemented": false, + "id": 2235, + "linearizedBaseContracts": [ + 2235, + 3022, + 314, + 3695, + 2871, + 3796 + ], + "name": "IHorizonStaking", + "nameLocation": "729:15:21", + "nodeType": "ContractDefinition", + "nodes": [], + "scope": 2236, + "src": "719:120:21", + "usedErrors": [ + 3272, + 3279, + 3286, + 3293, + 3302, + 3307, + 3314, + 3317, + 3324, + 3331, + 3338, + 3341, + 3348, + 3355, + 3362, + 3365, + 3368, + 3371, + 3373, + 3375, + 3380, + 3385, + 3388, + 3393 + ], + "usedEvents": [ + 2711, + 2922, + 2947, + 3036, + 3043, + 3056, + 3065, + 3074, + 3083, + 3094, + 3105, + 3116, + 3125, + 3134, + 3143, + 3154, + 3165, + 3176, + 3187, + 3196, + 3208, + 3223, + 3236, + 3249, + 3254, + 3261, + 3264, + 3269 + ] + } + ], + "src": "46:794:21" + }, + "id": 21 + }, + "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol", + "exportedSymbols": { + "IGraphPayments": [ + 2211 + ], + "IPaymentsCollector": [ + 2268 + ] + }, + "id": 2269, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2237, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:22" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "file": "./IGraphPayments.sol", + "id": 2239, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2269, + "sourceUnit": 2212, + "src": "71:54:22", + "symbolAliases": [ + { + "foreign": { + "id": 2238, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "80:14:22", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IPaymentsCollector", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2240, + "nodeType": "StructuredDocumentation", + "src": "127:491:22", + "text": " @title Interface for a payments collector contract as defined by Graph Horizon payments protocol\n @notice Contracts implementing this interface can be used with the payments protocol. First, a payer must\n approve the collector to collect payments on their behalf. Only then can payment collection be initiated\n using the collector contract.\n @dev It's important to note that it's the collector contract's responsibility to validate the payment\n request is legitimate." + }, + "fullyImplemented": false, + "id": 2268, + "linearizedBaseContracts": [ + 2268 + ], + "name": "IPaymentsCollector", + "nameLocation": "629:18:22", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 2241, + "nodeType": "StructuredDocumentation", + "src": "654:457:22", + "text": " @notice Emitted when a payment is collected\n @param paymentType The payment type collected as defined by {IGraphPayments}\n @param payer The address of the payer\n @param receiver The address of the receiver\n @param tokensReceiver The amount of tokens received by the receiver\n @param dataService The address of the data service\n @param tokensDataService The amount of tokens received by the data service" + }, + "eventSelector": "fadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd1", + "id": 2256, + "name": "PaymentCollected", + "nameLocation": "1122:16:22", + "nodeType": "EventDefinition", + "parameters": { + "id": 2255, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2244, + "indexed": true, + "mutability": "mutable", + "name": "paymentType", + "nameLocation": "1184:11:22", + "nodeType": "VariableDeclaration", + "scope": 2256, + "src": "1148:47:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 2243, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2242, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "1148:14:22", + "1163:12:22" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "1148:27:22" + }, + "referencedDeclaration": 2166, + "src": "1148:27:22", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2246, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "1221:5:22", + "nodeType": "VariableDeclaration", + "scope": 2256, + "src": "1205:21:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2245, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1205:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2248, + "indexed": false, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "1244:8:22", + "nodeType": "VariableDeclaration", + "scope": 2256, + "src": "1236:16:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2247, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1236:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2250, + "indexed": false, + "mutability": "mutable", + "name": "tokensReceiver", + "nameLocation": "1270:14:22", + "nodeType": "VariableDeclaration", + "scope": 2256, + "src": "1262:22:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2249, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1262:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2252, + "indexed": true, + "mutability": "mutable", + "name": "dataService", + "nameLocation": "1310:11:22", + "nodeType": "VariableDeclaration", + "scope": 2256, + "src": "1294:27:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2251, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1294:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2254, + "indexed": false, + "mutability": "mutable", + "name": "tokensDataService", + "nameLocation": "1339:17:22", + "nodeType": "VariableDeclaration", + "scope": 2256, + "src": "1331:25:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2253, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1331:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1138:224:22" + }, + "src": "1116:247:22" + }, + { + "documentation": { + "id": 2257, + "nodeType": "StructuredDocumentation", + "src": "1369:727:22", + "text": " @notice Initiate a payment collection through the payments protocol\n @dev This function should require the caller to present some form of evidence of the payer's debt to\n the receiver. The collector should validate this evidence and, if valid, collect the payment.\n Requirements:\n - The caller must be the data service the RAV was issued to\n - The signer of the RAV must be authorized to sign for the payer\n Emits a {PaymentCollected} event\n @param paymentType The payment type to collect, as defined by {IGraphPayments}\n @param data Additional data required for the payment collection. Will vary depending on the collector\n implementation." + }, + "functionSelector": "7f07d283", + "id": 2267, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "collect", + "nameLocation": "2110:7:22", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2263, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2260, + "mutability": "mutable", + "name": "paymentType", + "nameLocation": "2146:11:22", + "nodeType": "VariableDeclaration", + "scope": 2267, + "src": "2118:39:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 2259, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2258, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "2118:14:22", + "2133:12:22" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "2118:27:22" + }, + "referencedDeclaration": 2166, + "src": "2118:27:22", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2262, + "mutability": "mutable", + "name": "data", + "nameLocation": "2172:4:22", + "nodeType": "VariableDeclaration", + "scope": 2267, + "src": "2159:17:22", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2261, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2159:5:22", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2117:60:22" + }, + "returnParameters": { + "id": 2266, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2265, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2267, + "src": "2196:7:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2264, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2196:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2195:9:22" + }, + "scope": 2268, + "src": "2101:104:22", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2269, + "src": "619:1588:22", + "usedErrors": [], + "usedEvents": [ + 2256 + ] + } + ], + "src": "46:2162:22" + }, + "id": 22 + }, + "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol", + "exportedSymbols": { + "IGraphPayments": [ + 2211 + ], + "IPaymentsEscrow": [ + 2514 + ] + }, + "id": 2515, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2270, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:23" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "file": "./IGraphPayments.sol", + "id": 2272, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2515, + "sourceUnit": 2212, + "src": "70:54:23", + "symbolAliases": [ + { + "foreign": { + "id": 2271, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "79:14:23", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IPaymentsEscrow", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2273, + "nodeType": "StructuredDocumentation", + "src": "126:631:23", + "text": " @title Interface for the {PaymentsEscrow} contract\n @notice This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT)\n for payments made through the payments protocol for services provided\n via a Graph Horizon data service.\n Payers deposit funds on the escrow, signalling their ability to pay for a service, and only\n being able to retrieve them after a thawing period. Receivers collect funds from the escrow,\n provided the payer has authorized them. The payer authorization is delegated to a payment\n collector contract which implements the {IPaymentsCollector} interface." + }, + "fullyImplemented": false, + "id": 2514, + "linearizedBaseContracts": [ + 2514 + ], + "name": "IPaymentsEscrow", + "nameLocation": "768:15:23", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IPaymentsEscrow.EscrowAccount", + "documentation": { + "id": 2274, + "nodeType": "StructuredDocumentation", + "src": "790:63:23", + "text": "@notice Escrow account for a payer-collector-receiver tuple" + }, + "id": 2281, + "members": [ + { + "constant": false, + "id": 2276, + "mutability": "mutable", + "name": "balance", + "nameLocation": "967:7:23", + "nodeType": "VariableDeclaration", + "scope": 2281, + "src": "959:15:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2275, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "959:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2278, + "mutability": "mutable", + "name": "tokensThawing", + "nameLocation": "1043:13:23", + "nodeType": "VariableDeclaration", + "scope": 2281, + "src": "1035:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2277, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1035:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2280, + "mutability": "mutable", + "name": "thawEndTimestamp", + "nameLocation": "1146:16:23", + "nodeType": "VariableDeclaration", + "scope": 2281, + "src": "1138:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2279, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1138:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "EscrowAccount", + "nameLocation": "865:13:23", + "nodeType": "StructDefinition", + "scope": 2514, + "src": "858:311:23", + "visibility": "public" + }, + { + "canonicalName": "IPaymentsEscrow.Collector", + "documentation": { + "id": 2282, + "nodeType": "StructuredDocumentation", + "src": "1175:113:23", + "text": "@notice Details for a payer-collector pair\n @dev Collectors can be removed only after a thawing period" + }, + "id": 2287, + "members": [ + { + "constant": false, + "id": 2284, + "mutability": "mutable", + "name": "allowance", + "nameLocation": "1392:9:23", + "nodeType": "VariableDeclaration", + "scope": 2287, + "src": "1384:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2283, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1384:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2286, + "mutability": "mutable", + "name": "thawEndTimestamp", + "nameLocation": "1505:16:23", + "nodeType": "VariableDeclaration", + "scope": 2287, + "src": "1497:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2285, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1497:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Collector", + "nameLocation": "1300:9:23", + "nodeType": "StructDefinition", + "scope": 2514, + "src": "1293:235:23", + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 2288, + "nodeType": "StructuredDocumentation", + "src": "1534:341:23", + "text": " @notice Emitted when a payer authorizes a collector to collect funds\n @param payer The address of the payer\n @param collector The address of the collector\n @param addedAllowance The amount of tokens added to the collector's allowance\n @param newTotalAllowance The new total allowance after addition" + }, + "eventSelector": "61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d", + "id": 2298, + "name": "AuthorizedCollector", + "nameLocation": "1886:19:23", + "nodeType": "EventDefinition", + "parameters": { + "id": 2297, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2290, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "1931:5:23", + "nodeType": "VariableDeclaration", + "scope": 2298, + "src": "1915:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2289, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1915:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2292, + "indexed": true, + "mutability": "mutable", + "name": "collector", + "nameLocation": "1962:9:23", + "nodeType": "VariableDeclaration", + "scope": 2298, + "src": "1946:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2291, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1946:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2294, + "indexed": false, + "mutability": "mutable", + "name": "addedAllowance", + "nameLocation": "1989:14:23", + "nodeType": "VariableDeclaration", + "scope": 2298, + "src": "1981:22:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2293, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1981:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2296, + "indexed": false, + "mutability": "mutable", + "name": "newTotalAllowance", + "nameLocation": "2021:17:23", + "nodeType": "VariableDeclaration", + "scope": 2298, + "src": "2013:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2295, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2013:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1905:139:23" + }, + "src": "1880:165:23" + }, + { + "anonymous": false, + "documentation": { + "id": 2299, + "nodeType": "StructuredDocumentation", + "src": "2051:163:23", + "text": " @notice Emitted when a payer thaws a collector\n @param payer The address of the payer\n @param collector The address of the collector" + }, + "eventSelector": "47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff", + "id": 2305, + "name": "ThawCollector", + "nameLocation": "2225:13:23", + "nodeType": "EventDefinition", + "parameters": { + "id": 2304, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2301, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "2255:5:23", + "nodeType": "VariableDeclaration", + "scope": 2305, + "src": "2239:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2300, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2239:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2303, + "indexed": true, + "mutability": "mutable", + "name": "collector", + "nameLocation": "2278:9:23", + "nodeType": "VariableDeclaration", + "scope": 2305, + "src": "2262:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2302, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2262:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2238:50:23" + }, + "src": "2219:70:23" + }, + { + "anonymous": false, + "documentation": { + "id": 2306, + "nodeType": "StructuredDocumentation", + "src": "2295:180:23", + "text": " @notice Emitted when a payer cancels the thawing of a collector\n @param payer The address of the payer\n @param collector The address of the collector" + }, + "eventSelector": "988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d", + "id": 2312, + "name": "CancelThawCollector", + "nameLocation": "2486:19:23", + "nodeType": "EventDefinition", + "parameters": { + "id": 2311, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2308, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "2522:5:23", + "nodeType": "VariableDeclaration", + "scope": 2312, + "src": "2506:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2307, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2506:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2310, + "indexed": true, + "mutability": "mutable", + "name": "collector", + "nameLocation": "2545:9:23", + "nodeType": "VariableDeclaration", + "scope": 2312, + "src": "2529:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2309, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2529:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2505:50:23" + }, + "src": "2480:76:23" + }, + { + "anonymous": false, + "documentation": { + "id": 2313, + "nodeType": "StructuredDocumentation", + "src": "2562:180:23", + "text": " @notice Emitted when a payer revokes a collector authorization.\n @param payer The address of the payer\n @param collector The address of the collector" + }, + "eventSelector": "3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d90", + "id": 2319, + "name": "RevokeCollector", + "nameLocation": "2753:15:23", + "nodeType": "EventDefinition", + "parameters": { + "id": 2318, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2315, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "2785:5:23", + "nodeType": "VariableDeclaration", + "scope": 2319, + "src": "2769:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2314, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2769:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2317, + "indexed": true, + "mutability": "mutable", + "name": "collector", + "nameLocation": "2808:9:23", + "nodeType": "VariableDeclaration", + "scope": 2319, + "src": "2792:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2316, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2792:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2768:50:23" + }, + "src": "2747:72:23" + }, + { + "anonymous": false, + "documentation": { + "id": 2320, + "nodeType": "StructuredDocumentation", + "src": "2825:316:23", + "text": " @notice Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens deposited" + }, + "eventSelector": "7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96", + "id": 2330, + "name": "Deposit", + "nameLocation": "3152:7:23", + "nodeType": "EventDefinition", + "parameters": { + "id": 2329, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2322, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "3176:5:23", + "nodeType": "VariableDeclaration", + "scope": 2330, + "src": "3160:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2321, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3160:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2324, + "indexed": true, + "mutability": "mutable", + "name": "collector", + "nameLocation": "3199:9:23", + "nodeType": "VariableDeclaration", + "scope": 2330, + "src": "3183:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2323, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3183:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2326, + "indexed": true, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "3226:8:23", + "nodeType": "VariableDeclaration", + "scope": 2330, + "src": "3210:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2325, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3210:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2328, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "3244:6:23", + "nodeType": "VariableDeclaration", + "scope": 2330, + "src": "3236:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2327, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3236:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3159:92:23" + }, + "src": "3146:106:23" + }, + { + "anonymous": false, + "documentation": { + "id": 2331, + "nodeType": "StructuredDocumentation", + "src": "3258:169:23", + "text": " @notice Emitted when a payer cancels an escrow thawing\n @param payer The address of the payer\n @param receiver The address of the receiver" + }, + "eventSelector": "b2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c948", + "id": 2337, + "name": "CancelThaw", + "nameLocation": "3438:10:23", + "nodeType": "EventDefinition", + "parameters": { + "id": 2336, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2333, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "3465:5:23", + "nodeType": "VariableDeclaration", + "scope": 2337, + "src": "3449:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2332, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3449:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2335, + "indexed": true, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "3488:8:23", + "nodeType": "VariableDeclaration", + "scope": 2337, + "src": "3472:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2334, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3472:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3448:49:23" + }, + "src": "3432:66:23" + }, + { + "anonymous": false, + "documentation": { + "id": 2338, + "nodeType": "StructuredDocumentation", + "src": "3504:394:23", + "text": " @notice Emitted when a payer thaws funds from the escrow for a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens being thawed\n @param thawEndTimestamp The timestamp at which the thawing period ends" + }, + "eventSelector": "ba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc", + "id": 2350, + "name": "Thaw", + "nameLocation": "3909:4:23", + "nodeType": "EventDefinition", + "parameters": { + "id": 2349, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2340, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "3939:5:23", + "nodeType": "VariableDeclaration", + "scope": 2350, + "src": "3923:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2339, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3923:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2342, + "indexed": true, + "mutability": "mutable", + "name": "collector", + "nameLocation": "3970:9:23", + "nodeType": "VariableDeclaration", + "scope": 2350, + "src": "3954:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2341, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3954:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2344, + "indexed": true, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "4005:8:23", + "nodeType": "VariableDeclaration", + "scope": 2350, + "src": "3989:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2343, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3989:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2346, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "4031:6:23", + "nodeType": "VariableDeclaration", + "scope": 2350, + "src": "4023:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2345, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4023:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2348, + "indexed": false, + "mutability": "mutable", + "name": "thawEndTimestamp", + "nameLocation": "4055:16:23", + "nodeType": "VariableDeclaration", + "scope": 2350, + "src": "4047:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2347, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4047:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3913:164:23" + }, + "src": "3903:175:23" + }, + { + "anonymous": false, + "documentation": { + "id": 2351, + "nodeType": "StructuredDocumentation", + "src": "4084:317:23", + "text": " @notice Emitted when a payer withdraws funds from the escrow for a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens withdrawn" + }, + "eventSelector": "3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f7", + "id": 2361, + "name": "Withdraw", + "nameLocation": "4412:8:23", + "nodeType": "EventDefinition", + "parameters": { + "id": 2360, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2353, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "4437:5:23", + "nodeType": "VariableDeclaration", + "scope": 2361, + "src": "4421:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2352, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4421:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2355, + "indexed": true, + "mutability": "mutable", + "name": "collector", + "nameLocation": "4460:9:23", + "nodeType": "VariableDeclaration", + "scope": 2361, + "src": "4444:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2354, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4444:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2357, + "indexed": true, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "4487:8:23", + "nodeType": "VariableDeclaration", + "scope": 2361, + "src": "4471:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2356, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4471:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2359, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "4505:6:23", + "nodeType": "VariableDeclaration", + "scope": 2361, + "src": "4497:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2358, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4497:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4420:92:23" + }, + "src": "4406:107:23" + }, + { + "anonymous": false, + "documentation": { + "id": 2362, + "nodeType": "StructuredDocumentation", + "src": "4519:320:23", + "text": " @notice Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens collected" + }, + "eventSelector": "edeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd6", + "id": 2372, + "name": "EscrowCollected", + "nameLocation": "4850:15:23", + "nodeType": "EventDefinition", + "parameters": { + "id": 2371, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2364, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "4882:5:23", + "nodeType": "VariableDeclaration", + "scope": 2372, + "src": "4866:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2363, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4866:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2366, + "indexed": true, + "mutability": "mutable", + "name": "collector", + "nameLocation": "4905:9:23", + "nodeType": "VariableDeclaration", + "scope": 2372, + "src": "4889:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2365, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4889:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2368, + "indexed": true, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "4932:8:23", + "nodeType": "VariableDeclaration", + "scope": 2372, + "src": "4916:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2367, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4916:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2370, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "4950:6:23", + "nodeType": "VariableDeclaration", + "scope": 2372, + "src": "4942:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2369, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4942:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4865:92:23" + }, + "src": "4844:114:23" + }, + { + "documentation": { + "id": 2373, + "nodeType": "StructuredDocumentation", + "src": "4985:97:23", + "text": " @notice Thrown when a protected function is called and the contract is paused." + }, + "errorSelector": "9e68cf0b", + "id": 2375, + "name": "PaymentsEscrowIsPaused", + "nameLocation": "5093:22:23", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2374, + "nodeType": "ParameterList", + "parameters": [], + "src": "5115:2:23" + }, + "src": "5087:31:23" + }, + { + "documentation": { + "id": 2376, + "nodeType": "StructuredDocumentation", + "src": "5124:196:23", + "text": " @notice Thrown when the available balance is insufficient to perform an operation\n @param balance The current balance\n @param minBalance The minimum required balance" + }, + "errorSelector": "3db4e691", + "id": 2382, + "name": "PaymentsEscrowInsufficientBalance", + "nameLocation": "5331:33:23", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2381, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2378, + "mutability": "mutable", + "name": "balance", + "nameLocation": "5373:7:23", + "nodeType": "VariableDeclaration", + "scope": 2382, + "src": "5365:15:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2377, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5365:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2380, + "mutability": "mutable", + "name": "minBalance", + "nameLocation": "5390:10:23", + "nodeType": "VariableDeclaration", + "scope": 2382, + "src": "5382:18:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2379, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5382:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5364:37:23" + }, + "src": "5325:77:23" + }, + { + "documentation": { + "id": 2383, + "nodeType": "StructuredDocumentation", + "src": "5408:92:23", + "text": " @notice Thrown when a thawing is expected to be in progress but it is not" + }, + "errorSelector": "8cbd172f", + "id": 2385, + "name": "PaymentsEscrowNotThawing", + "nameLocation": "5511:24:23", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2384, + "nodeType": "ParameterList", + "parameters": [], + "src": "5535:2:23" + }, + "src": "5505:33:23" + }, + { + "documentation": { + "id": 2386, + "nodeType": "StructuredDocumentation", + "src": "5544:200:23", + "text": " @notice Thrown when a thawing is still in progress\n @param currentTimestamp The current timestamp\n @param thawEndTimestamp The timestamp at which the thawing period ends" + }, + "errorSelector": "78a1b6f2", + "id": 2392, + "name": "PaymentsEscrowStillThawing", + "nameLocation": "5755:26:23", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2391, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2388, + "mutability": "mutable", + "name": "currentTimestamp", + "nameLocation": "5790:16:23", + "nodeType": "VariableDeclaration", + "scope": 2392, + "src": "5782:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2387, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5782:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2390, + "mutability": "mutable", + "name": "thawEndTimestamp", + "nameLocation": "5816:16:23", + "nodeType": "VariableDeclaration", + "scope": 2392, + "src": "5808:24:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2389, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5808:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5781:52:23" + }, + "src": "5749:85:23" + }, + { + "documentation": { + "id": 2393, + "nodeType": "StructuredDocumentation", + "src": "5840:200:23", + "text": " @notice Thrown when setting the thawing period to a value greater than the maximum\n @param thawingPeriod The thawing period\n @param maxWaitPeriod The maximum wait period" + }, + "errorSelector": "5c0f65a1", + "id": 2399, + "name": "PaymentsEscrowThawingPeriodTooLong", + "nameLocation": "6051:34:23", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2398, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2395, + "mutability": "mutable", + "name": "thawingPeriod", + "nameLocation": "6094:13:23", + "nodeType": "VariableDeclaration", + "scope": 2399, + "src": "6086:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6086:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2397, + "mutability": "mutable", + "name": "maxWaitPeriod", + "nameLocation": "6117:13:23", + "nodeType": "VariableDeclaration", + "scope": 2399, + "src": "6109:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2396, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6109:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6085:46:23" + }, + "src": "6045:87:23" + }, + { + "documentation": { + "id": 2400, + "nodeType": "StructuredDocumentation", + "src": "6138:198:23", + "text": " @notice Thrown when a collector has insufficient allowance to collect funds\n @param allowance The current allowance\n @param minAllowance The minimum required allowance" + }, + "errorSelector": "b0b503e7", + "id": 2406, + "name": "PaymentsEscrowInsufficientAllowance", + "nameLocation": "6347:35:23", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2405, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2402, + "mutability": "mutable", + "name": "allowance", + "nameLocation": "6391:9:23", + "nodeType": "VariableDeclaration", + "scope": 2406, + "src": "6383:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2401, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6383:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2404, + "mutability": "mutable", + "name": "minAllowance", + "nameLocation": "6410:12:23", + "nodeType": "VariableDeclaration", + "scope": 2406, + "src": "6402:20:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2403, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6402:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6382:41:23" + }, + "src": "6341:83:23" + }, + { + "documentation": { + "id": 2407, + "nodeType": "StructuredDocumentation", + "src": "6430:278:23", + "text": " @notice Thrown when the contract balance is not consistent with the collection amount\n @param balanceBefore The balance before the collection\n @param balanceAfter The balance after the collection\n @param tokens The amount of tokens collected" + }, + "errorSelector": "7e09c9ac", + "id": 2415, + "name": "PaymentsEscrowInconsistentCollection", + "nameLocation": "6719:36:23", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2414, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2409, + "mutability": "mutable", + "name": "balanceBefore", + "nameLocation": "6764:13:23", + "nodeType": "VariableDeclaration", + "scope": 2415, + "src": "6756:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2408, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6756:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2411, + "mutability": "mutable", + "name": "balanceAfter", + "nameLocation": "6787:12:23", + "nodeType": "VariableDeclaration", + "scope": 2415, + "src": "6779:20:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2410, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6779:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2413, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "6809:6:23", + "nodeType": "VariableDeclaration", + "scope": 2415, + "src": "6801:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2412, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6801:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6755:61:23" + }, + "src": "6713:104:23" + }, + { + "documentation": { + "id": 2416, + "nodeType": "StructuredDocumentation", + "src": "6823:84:23", + "text": " @notice Thrown when operating a zero token amount is not allowed." + }, + "errorSelector": "ebfc7cdc", + "id": 2418, + "name": "PaymentsEscrowInvalidZeroTokens", + "nameLocation": "6918:31:23", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2417, + "nodeType": "ParameterList", + "parameters": [], + "src": "6949:2:23" + }, + "src": "6912:40:23" + }, + { + "documentation": { + "id": 2419, + "nodeType": "StructuredDocumentation", + "src": "6958:526:23", + "text": " @notice Authorize a collector to collect funds from the payer's escrow\n @dev This function can only be used to increase the allowance of a collector.\n To reduce it the authorization must be revoked and a new one must be created.\n Requirements:\n - `allowance` must be greater than zero\n Emits an {AuthorizedCollector} event\n @param collector The address of the collector\n @param allowance The amount of tokens to add to the collector's allowance" + }, + "functionSelector": "4f9d392e", + "id": 2426, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approveCollector", + "nameLocation": "7498:16:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2424, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2421, + "mutability": "mutable", + "name": "collector", + "nameLocation": "7523:9:23", + "nodeType": "VariableDeclaration", + "scope": 2426, + "src": "7515:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2420, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7515:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2423, + "mutability": "mutable", + "name": "allowance", + "nameLocation": "7542:9:23", + "nodeType": "VariableDeclaration", + "scope": 2426, + "src": "7534:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2422, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7534:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7514:38:23" + }, + "returnParameters": { + "id": 2425, + "nodeType": "ParameterList", + "parameters": [], + "src": "7561:0:23" + }, + "scope": 2514, + "src": "7489:73:23", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2427, + "nodeType": "StructuredDocumentation", + "src": "7568:265:23", + "text": " @notice Thaw a collector's collector authorization\n @dev The thawing period is defined by the `REVOKE_COLLECTOR_THAWING_PERIOD` constant\n Emits a {ThawCollector} event\n @param collector The address of the collector" + }, + "functionSelector": "0ee36be3", + "id": 2432, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "thawCollector", + "nameLocation": "7847:13:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2430, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2429, + "mutability": "mutable", + "name": "collector", + "nameLocation": "7869:9:23", + "nodeType": "VariableDeclaration", + "scope": 2432, + "src": "7861:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2428, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7861:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7860:19:23" + }, + "returnParameters": { + "id": 2431, + "nodeType": "ParameterList", + "parameters": [], + "src": "7888:0:23" + }, + "scope": 2514, + "src": "7838:51:23", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2433, + "nodeType": "StructuredDocumentation", + "src": "7895:242:23", + "text": " @notice Cancel a collector's authorization thawing\n @dev Requirements:\n - `collector` must be thawing\n Emits a {CancelThawCollector} event\n @param collector The address of the collector" + }, + "functionSelector": "78a24c54", + "id": 2438, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "cancelThawCollector", + "nameLocation": "8151:19:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2435, + "mutability": "mutable", + "name": "collector", + "nameLocation": "8179:9:23", + "nodeType": "VariableDeclaration", + "scope": 2438, + "src": "8171:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2434, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8171:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8170:19:23" + }, + "returnParameters": { + "id": 2437, + "nodeType": "ParameterList", + "parameters": [], + "src": "8198:0:23" + }, + "scope": 2514, + "src": "8142:57:23", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2439, + "nodeType": "StructuredDocumentation", + "src": "8205:301:23", + "text": " @notice Revoke a collector's authorization.\n Removes the collector from the list of authorized collectors.\n @dev Requirements:\n - `collector` must have thawed\n Emits a {RevokeCollector} event\n @param collector The address of the collector" + }, + "functionSelector": "32825b81", + "id": 2444, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "revokeCollector", + "nameLocation": "8520:15:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2442, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2441, + "mutability": "mutable", + "name": "collector", + "nameLocation": "8544:9:23", + "nodeType": "VariableDeclaration", + "scope": 2444, + "src": "8536:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2440, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8536:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8535:19:23" + }, + "returnParameters": { + "id": 2443, + "nodeType": "ParameterList", + "parameters": [], + "src": "8563:0:23" + }, + "scope": 2514, + "src": "8511:53:23", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2445, + "nodeType": "StructuredDocumentation", + "src": "8570:338:23", + "text": " @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where\n the payer is the transaction caller.\n @dev Emits a {Deposit} event\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens to deposit" + }, + "functionSelector": "8340f549", + "id": 2454, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nameLocation": "8922:7:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2452, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2447, + "mutability": "mutable", + "name": "collector", + "nameLocation": "8938:9:23", + "nodeType": "VariableDeclaration", + "scope": 2454, + "src": "8930:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2446, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8930:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2449, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "8957:8:23", + "nodeType": "VariableDeclaration", + "scope": 2454, + "src": "8949:16:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2448, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8949:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2451, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "8975:6:23", + "nodeType": "VariableDeclaration", + "scope": 2454, + "src": "8967:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2450, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8967:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8929:53:23" + }, + "returnParameters": { + "id": 2453, + "nodeType": "ParameterList", + "parameters": [], + "src": "8991:0:23" + }, + "scope": 2514, + "src": "8913:79:23", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2455, + "nodeType": "StructuredDocumentation", + "src": "8998:374:23", + "text": " @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where\n the payer can be specified.\n @dev Emits a {Deposit} event\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens to deposit" + }, + "functionSelector": "72eb521e", + "id": 2466, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "depositTo", + "nameLocation": "9386:9:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2464, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2457, + "mutability": "mutable", + "name": "payer", + "nameLocation": "9404:5:23", + "nodeType": "VariableDeclaration", + "scope": 2466, + "src": "9396:13:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2456, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9396:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2459, + "mutability": "mutable", + "name": "collector", + "nameLocation": "9419:9:23", + "nodeType": "VariableDeclaration", + "scope": 2466, + "src": "9411:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2458, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9411:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2461, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "9438:8:23", + "nodeType": "VariableDeclaration", + "scope": 2466, + "src": "9430:16:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2460, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9430:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2463, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "9456:6:23", + "nodeType": "VariableDeclaration", + "scope": 2466, + "src": "9448:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2462, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9448:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9395:68:23" + }, + "returnParameters": { + "id": 2465, + "nodeType": "ParameterList", + "parameters": [], + "src": "9472:0:23" + }, + "scope": 2514, + "src": "9377:96:23", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2467, + "nodeType": "StructuredDocumentation", + "src": "9479:716:23", + "text": " @notice Thaw a specific amount of escrow from a payer-collector-receiver's escrow account.\n The payer is the transaction caller.\n If `tokens` is zero and funds were already thawing it will cancel the thawing.\n Note that repeated calls to this function will overwrite the previous thawing amount\n and reset the thawing period.\n @dev Requirements:\n - `tokens` must be less than or equal to the available balance\n Emits a {Thaw} event. If `tokens` is zero it will emit a {CancelThaw} event.\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens to thaw" + }, + "functionSelector": "f93f1cd0", + "id": 2476, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "thaw", + "nameLocation": "10209:4:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2474, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2469, + "mutability": "mutable", + "name": "collector", + "nameLocation": "10222:9:23", + "nodeType": "VariableDeclaration", + "scope": 2476, + "src": "10214:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2468, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10214:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2471, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "10241:8:23", + "nodeType": "VariableDeclaration", + "scope": 2476, + "src": "10233:16:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2470, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10233:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2473, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "10259:6:23", + "nodeType": "VariableDeclaration", + "scope": 2476, + "src": "10251:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2472, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10251:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10213:53:23" + }, + "returnParameters": { + "id": 2475, + "nodeType": "ParameterList", + "parameters": [], + "src": "10275:0:23" + }, + "scope": 2514, + "src": "10200:76:23", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2477, + "nodeType": "StructuredDocumentation", + "src": "10282:486:23", + "text": " @notice Withdraws all thawed escrow from a payer-collector-receiver's escrow account.\n The payer is the transaction caller.\n Note that the withdrawn funds might be less than the thawed amount if there were\n payment collections in the meantime.\n @dev Requirements:\n - Funds must be thawed\n Emits a {Withdraw} event\n @param collector The address of the collector\n @param receiver The address of the receiver" + }, + "functionSelector": "f940e385", + "id": 2484, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nameLocation": "10782:8:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2482, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2479, + "mutability": "mutable", + "name": "collector", + "nameLocation": "10799:9:23", + "nodeType": "VariableDeclaration", + "scope": 2484, + "src": "10791:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2478, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10791:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2481, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "10818:8:23", + "nodeType": "VariableDeclaration", + "scope": 2484, + "src": "10810:16:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2480, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10810:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "10790:37:23" + }, + "returnParameters": { + "id": 2483, + "nodeType": "ParameterList", + "parameters": [], + "src": "10836:0:23" + }, + "scope": 2514, + "src": "10773:64:23", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2485, + "nodeType": "StructuredDocumentation", + "src": "10843:845:23", + "text": " @notice Collects funds from the payer-collector-receiver's escrow and sends them to {GraphPayments} for\n distribution using the Graph Horizon Payments protocol.\n The function will revert if there are not enough funds in the escrow.\n @dev Requirements:\n - `collector` needs to be authorized by the payer and have enough allowance\n Emits an {EscrowCollected} event\n @param paymentType The type of payment being collected as defined in the {IGraphPayments} interface\n @param payer The address of the payer\n @param receiver The address of the receiver\n @param tokens The amount of tokens to collect\n @param dataService The address of the data service\n @param tokensDataService The amount of tokens that {GraphPayments} should send to the data service" + }, + "functionSelector": "87dbfe82", + "id": 2501, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "collect", + "nameLocation": "11702:7:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2499, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2488, + "mutability": "mutable", + "name": "paymentType", + "nameLocation": "11747:11:23", + "nodeType": "VariableDeclaration", + "scope": 2501, + "src": "11719:39:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 2487, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2486, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "11719:14:23", + "11734:12:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "11719:27:23" + }, + "referencedDeclaration": 2166, + "src": "11719:27:23", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2490, + "mutability": "mutable", + "name": "payer", + "nameLocation": "11776:5:23", + "nodeType": "VariableDeclaration", + "scope": 2501, + "src": "11768:13:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2489, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11768:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2492, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "11799:8:23", + "nodeType": "VariableDeclaration", + "scope": 2501, + "src": "11791:16:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2491, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11791:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2494, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "11825:6:23", + "nodeType": "VariableDeclaration", + "scope": 2501, + "src": "11817:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2493, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11817:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2496, + "mutability": "mutable", + "name": "dataService", + "nameLocation": "11849:11:23", + "nodeType": "VariableDeclaration", + "scope": 2501, + "src": "11841:19:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2495, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11841:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2498, + "mutability": "mutable", + "name": "tokensDataService", + "nameLocation": "11878:17:23", + "nodeType": "VariableDeclaration", + "scope": 2501, + "src": "11870:25:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2497, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11870:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11709:192:23" + }, + "returnParameters": { + "id": 2500, + "nodeType": "ParameterList", + "parameters": [], + "src": "11910:0:23" + }, + "scope": 2514, + "src": "11693:218:23", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2502, + "nodeType": "StructuredDocumentation", + "src": "11917:227:23", + "text": " @notice Get the balance of a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver" + }, + "functionSelector": "d6bd603c", + "id": 2513, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBalance", + "nameLocation": "12158:10:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2509, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2504, + "mutability": "mutable", + "name": "payer", + "nameLocation": "12177:5:23", + "nodeType": "VariableDeclaration", + "scope": 2513, + "src": "12169:13:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2503, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12169:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2506, + "mutability": "mutable", + "name": "collector", + "nameLocation": "12192:9:23", + "nodeType": "VariableDeclaration", + "scope": 2513, + "src": "12184:17:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2505, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12184:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2508, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "12211:8:23", + "nodeType": "VariableDeclaration", + "scope": 2513, + "src": "12203:16:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2507, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12203:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "12168:52:23" + }, + "returnParameters": { + "id": 2512, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2511, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2513, + "src": "12244:7:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2510, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12244:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12243:9:23" + }, + "scope": 2514, + "src": "12149:104:23", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2515, + "src": "758:11497:23", + "usedErrors": [ + 2375, + 2382, + 2385, + 2392, + 2399, + 2406, + 2415, + 2418 + ], + "usedEvents": [ + 2298, + 2305, + 2312, + 2319, + 2330, + 2337, + 2350, + 2361, + 2372 + ] + } + ], + "src": "45:12211:23" + }, + "id": 23 + }, + "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", + "exportedSymbols": { + "IPaymentsCollector": [ + 2268 + ], + "ITAPCollector": [ + 2695 + ] + }, + "id": 2696, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2516, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:24" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol", + "file": "./IPaymentsCollector.sol", + "id": 2518, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2696, + "sourceUnit": 2269, + "src": "70:62:24", + "symbolAliases": [ + { + "foreign": { + "id": 2517, + "name": "IPaymentsCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2268, + "src": "79:18:24", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 2520, + "name": "IPaymentsCollector", + "nameLocations": [ + "465:18:24" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2268, + "src": "465:18:24" + }, + "id": 2521, + "nodeType": "InheritanceSpecifier", + "src": "465:18:24" + } + ], + "canonicalName": "ITAPCollector", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2519, + "nodeType": "StructuredDocumentation", + "src": "134:303:24", + "text": " @title Interface for the {TAPCollector} contract\n @dev Implements the {IPaymentCollector} interface as defined by the Graph\n Horizon payments protocol.\n @notice Implements a payments collector contract that can be used to collect\n payments using a TAP RAV (Receipt Aggregate Voucher)." + }, + "fullyImplemented": false, + "id": 2695, + "linearizedBaseContracts": [ + 2695, + 2268 + ], + "name": "ITAPCollector", + "nameLocation": "448:13:24", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "ITAPCollector.PayerAuthorization", + "documentation": { + "id": 2522, + "nodeType": "StructuredDocumentation", + "src": "490:107:24", + "text": "@notice Details for a payer-signer pair\n @dev Signers can be removed only after a thawing period" + }, + "id": 2527, + "members": [ + { + "constant": false, + "id": 2524, + "mutability": "mutable", + "name": "payer", + "nameLocation": "700:5:24", + "nodeType": "VariableDeclaration", + "scope": 2527, + "src": "692:13:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2523, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "692:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2526, + "mutability": "mutable", + "name": "thawEndTimestamp", + "nameLocation": "795:16:24", + "nodeType": "VariableDeclaration", + "scope": 2527, + "src": "787:24:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2525, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "787:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "PayerAuthorization", + "nameLocation": "609:18:24", + "nodeType": "StructDefinition", + "scope": 2695, + "src": "602:216:24", + "visibility": "public" + }, + { + "canonicalName": "ITAPCollector.ReceiptAggregateVoucher", + "documentation": { + "id": 2528, + "nodeType": "StructuredDocumentation", + "src": "824:54:24", + "text": "@notice The Receipt Aggregate Voucher (RAV) struct" + }, + "id": 2539, + "members": [ + { + "constant": false, + "id": 2530, + "mutability": "mutable", + "name": "dataService", + "nameLocation": "997:11:24", + "nodeType": "VariableDeclaration", + "scope": 2539, + "src": "989:19:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2529, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "989:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2532, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1095:15:24", + "nodeType": "VariableDeclaration", + "scope": 2539, + "src": "1087:23:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2531, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1087:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2534, + "mutability": "mutable", + "name": "timestampNs", + "nameLocation": "1202:11:24", + "nodeType": "VariableDeclaration", + "scope": 2539, + "src": "1195:18:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2533, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1195:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2536, + "mutability": "mutable", + "name": "valueAggregate", + "nameLocation": "1404:14:24", + "nodeType": "VariableDeclaration", + "scope": 2539, + "src": "1396:22:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + }, + "typeName": { + "id": 2535, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "1396:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2538, + "mutability": "mutable", + "name": "metadata", + "nameLocation": "1518:8:24", + "nodeType": "VariableDeclaration", + "scope": 2539, + "src": "1512:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2537, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1512:5:24", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "ReceiptAggregateVoucher", + "nameLocation": "890:23:24", + "nodeType": "StructDefinition", + "scope": 2695, + "src": "883:650:24", + "visibility": "public" + }, + { + "canonicalName": "ITAPCollector.SignedRAV", + "documentation": { + "id": 2540, + "nodeType": "StructuredDocumentation", + "src": "1539:46:24", + "text": "@notice A struct representing a signed RAV" + }, + "id": 2546, + "members": [ + { + "constant": false, + "id": 2543, + "mutability": "mutable", + "name": "rav", + "nameLocation": "1660:3:24", + "nodeType": "VariableDeclaration", + "scope": 2546, + "src": "1636:27:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_storage_ptr", + "typeString": "struct ITAPCollector.ReceiptAggregateVoucher" + }, + "typeName": { + "id": 2542, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2541, + "name": "ReceiptAggregateVoucher", + "nameLocations": [ + "1636:23:24" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2539, + "src": "1636:23:24" + }, + "referencedDeclaration": 2539, + "src": "1636:23:24", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_storage_ptr", + "typeString": "struct ITAPCollector.ReceiptAggregateVoucher" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2545, + "mutability": "mutable", + "name": "signature", + "nameLocation": "1755:9:24", + "nodeType": "VariableDeclaration", + "scope": 2546, + "src": "1749:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2544, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1749:5:24", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "SignedRAV", + "nameLocation": "1597:9:24", + "nodeType": "StructDefinition", + "scope": 2695, + "src": "1590:181:24", + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 2547, + "nodeType": "StructuredDocumentation", + "src": "1777:223:24", + "text": " @notice Emitted when a signer is authorized to sign RAVs for a payer\n @param payer The address of the payer authorizing the signer\n @param authorizedSigner The address of the authorized signer" + }, + "eventSelector": "6edcdd4150e63c6c36d965976c1c37375609c8b040c50d39e7156437b80e2828", + "id": 2553, + "name": "SignerAuthorized", + "nameLocation": "2011:16:24", + "nodeType": "EventDefinition", + "parameters": { + "id": 2552, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2549, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "2044:5:24", + "nodeType": "VariableDeclaration", + "scope": 2553, + "src": "2028:21:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2548, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2028:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2551, + "indexed": true, + "mutability": "mutable", + "name": "authorizedSigner", + "nameLocation": "2067:16:24", + "nodeType": "VariableDeclaration", + "scope": 2553, + "src": "2051:32:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2550, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2051:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2027:57:24" + }, + "src": "2005:80:24" + }, + { + "anonymous": false, + "documentation": { + "id": 2554, + "nodeType": "StructuredDocumentation", + "src": "2091:312:24", + "text": " @notice Emitted when a signer is thawed to be removed from the authorized signers list\n @param payer The address of the payer thawing the signer\n @param authorizedSigner The address of the signer to thaw\n @param thawEndTimestamp The timestamp at which the thawing period ends" + }, + "eventSelector": "d939049941f6a15381248e4ac0010f15efdf0f3221923711244c200b5ff2cddf", + "id": 2562, + "name": "SignerThawing", + "nameLocation": "2414:13:24", + "nodeType": "EventDefinition", + "parameters": { + "id": 2561, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2556, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "2444:5:24", + "nodeType": "VariableDeclaration", + "scope": 2562, + "src": "2428:21:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2555, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2428:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2558, + "indexed": true, + "mutability": "mutable", + "name": "authorizedSigner", + "nameLocation": "2467:16:24", + "nodeType": "VariableDeclaration", + "scope": 2562, + "src": "2451:32:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2557, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2451:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2560, + "indexed": false, + "mutability": "mutable", + "name": "thawEndTimestamp", + "nameLocation": "2493:16:24", + "nodeType": "VariableDeclaration", + "scope": 2562, + "src": "2485:24:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2559, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2485:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2427:83:24" + }, + "src": "2408:103:24" + }, + { + "anonymous": false, + "documentation": { + "id": 2563, + "nodeType": "StructuredDocumentation", + "src": "2517:287:24", + "text": " @dev Emitted when the thawing of a signer is cancelled\n @param payer The address of the payer cancelling the thawing\n @param authorizedSigner The address of the authorized signer\n @param thawEndTimestamp The timestamp at which the thawing period ends" + }, + "eventSelector": "3b4432b11b66b46d9a7b190aa989c0ae85a5395b543540220596dd94dd405ceb", + "id": 2571, + "name": "SignerThawCanceled", + "nameLocation": "2815:18:24", + "nodeType": "EventDefinition", + "parameters": { + "id": 2570, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2565, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "2850:5:24", + "nodeType": "VariableDeclaration", + "scope": 2571, + "src": "2834:21:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2564, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2834:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2567, + "indexed": true, + "mutability": "mutable", + "name": "authorizedSigner", + "nameLocation": "2873:16:24", + "nodeType": "VariableDeclaration", + "scope": 2571, + "src": "2857:32:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2566, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2857:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2569, + "indexed": false, + "mutability": "mutable", + "name": "thawEndTimestamp", + "nameLocation": "2899:16:24", + "nodeType": "VariableDeclaration", + "scope": 2571, + "src": "2891:24:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2568, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2891:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2833:83:24" + }, + "src": "2809:108:24" + }, + { + "anonymous": false, + "documentation": { + "id": 2572, + "nodeType": "StructuredDocumentation", + "src": "2923:206:24", + "text": " @dev Emitted when a authorized signer has been revoked\n @param payer The address of the payer revoking the signer\n @param authorizedSigner The address of the authorized signer" + }, + "eventSelector": "2fc91dbd92d741cae16e0315578d7f6cf77043b771692c4bd993658ecfe89422", + "id": 2578, + "name": "SignerRevoked", + "nameLocation": "3140:13:24", + "nodeType": "EventDefinition", + "parameters": { + "id": 2577, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2574, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "3170:5:24", + "nodeType": "VariableDeclaration", + "scope": 2578, + "src": "3154:21:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2573, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3154:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2576, + "indexed": true, + "mutability": "mutable", + "name": "authorizedSigner", + "nameLocation": "3193:16:24", + "nodeType": "VariableDeclaration", + "scope": 2578, + "src": "3177:32:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2575, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3177:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3153:57:24" + }, + "src": "3134:77:24" + }, + { + "anonymous": false, + "documentation": { + "id": 2579, + "nodeType": "StructuredDocumentation", + "src": "3217:444:24", + "text": " @notice Emitted when a RAV is collected\n @param payer The address of the payer\n @param dataService The address of the data service\n @param serviceProvider The address of the service provider\n @param timestampNs The timestamp of the RAV\n @param valueAggregate The total amount owed to the service provider\n @param metadata Arbitrary metadata\n @param signature The signature of the RAV" + }, + "eventSelector": "2d55f33a4a377f40129b217a6cf7a5022a112941b80cd589332abc245aa0a5c7", + "id": 2595, + "name": "RAVCollected", + "nameLocation": "3672:12:24", + "nodeType": "EventDefinition", + "parameters": { + "id": 2594, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2581, + "indexed": true, + "mutability": "mutable", + "name": "payer", + "nameLocation": "3710:5:24", + "nodeType": "VariableDeclaration", + "scope": 2595, + "src": "3694:21:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2580, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3694:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2583, + "indexed": true, + "mutability": "mutable", + "name": "dataService", + "nameLocation": "3741:11:24", + "nodeType": "VariableDeclaration", + "scope": 2595, + "src": "3725:27:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2582, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3725:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2585, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3778:15:24", + "nodeType": "VariableDeclaration", + "scope": 2595, + "src": "3762:31:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2584, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3762:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2587, + "indexed": false, + "mutability": "mutable", + "name": "timestampNs", + "nameLocation": "3810:11:24", + "nodeType": "VariableDeclaration", + "scope": 2595, + "src": "3803:18:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2586, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "3803:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2589, + "indexed": false, + "mutability": "mutable", + "name": "valueAggregate", + "nameLocation": "3839:14:24", + "nodeType": "VariableDeclaration", + "scope": 2595, + "src": "3831:22:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + }, + "typeName": { + "id": 2588, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "3831:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2591, + "indexed": false, + "mutability": "mutable", + "name": "metadata", + "nameLocation": "3869:8:24", + "nodeType": "VariableDeclaration", + "scope": 2595, + "src": "3863:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2590, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3863:5:24", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2593, + "indexed": false, + "mutability": "mutable", + "name": "signature", + "nameLocation": "3893:9:24", + "nodeType": "VariableDeclaration", + "scope": 2595, + "src": "3887:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2592, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3887:5:24", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3684:224:24" + }, + "src": "3666:243:24" + }, + { + "documentation": { + "id": 2596, + "nodeType": "StructuredDocumentation", + "src": "3915:189:24", + "text": " Thrown when the signer is already authorized\n @param authorizingPayer The address of the payer authorizing the signer\n @param signer The address of the signer" + }, + "errorSelector": "cb2320b7", + "id": 2602, + "name": "TAPCollectorSignerAlreadyAuthorized", + "nameLocation": "4115:35:24", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2601, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2598, + "mutability": "mutable", + "name": "authorizingPayer", + "nameLocation": "4159:16:24", + "nodeType": "VariableDeclaration", + "scope": 2602, + "src": "4151:24:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2597, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4151:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2600, + "mutability": "mutable", + "name": "signer", + "nameLocation": "4185:6:24", + "nodeType": "VariableDeclaration", + "scope": 2602, + "src": "4177:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2599, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4177:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4150:42:24" + }, + "src": "4109:84:24" + }, + { + "documentation": { + "id": 2603, + "nodeType": "StructuredDocumentation", + "src": "4199:198:24", + "text": " Thrown when the signer proof deadline is invalid\n @param proofDeadline The deadline for the proof provided by the signer\n @param currentTimestamp The current timestamp" + }, + "errorSelector": "43c042b3", + "id": 2609, + "name": "TAPCollectorInvalidSignerProofDeadline", + "nameLocation": "4408:38:24", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2608, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2605, + "mutability": "mutable", + "name": "proofDeadline", + "nameLocation": "4455:13:24", + "nodeType": "VariableDeclaration", + "scope": 2609, + "src": "4447:21:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2604, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4447:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2607, + "mutability": "mutable", + "name": "currentTimestamp", + "nameLocation": "4478:16:24", + "nodeType": "VariableDeclaration", + "scope": 2609, + "src": "4470:24:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2606, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4470:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4446:49:24" + }, + "src": "4402:94:24" + }, + { + "documentation": { + "id": 2610, + "nodeType": "StructuredDocumentation", + "src": "4502:58:24", + "text": " Thrown when the signer proof is invalid" + }, + "errorSelector": "2c9e215e", + "id": 2612, + "name": "TAPCollectorInvalidSignerProof", + "nameLocation": "4571:30:24", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2611, + "nodeType": "ParameterList", + "parameters": [], + "src": "4601:2:24" + }, + "src": "4565:39:24" + }, + { + "documentation": { + "id": 2613, + "nodeType": "StructuredDocumentation", + "src": "4610:164:24", + "text": " Thrown when the signer is not authorized by the payer\n @param payer The address of the payer\n @param signer The address of the signer" + }, + "errorSelector": "ad827d30", + "id": 2619, + "name": "TAPCollectorSignerNotAuthorizedByPayer", + "nameLocation": "4785:38:24", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2618, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2615, + "mutability": "mutable", + "name": "payer", + "nameLocation": "4832:5:24", + "nodeType": "VariableDeclaration", + "scope": 2619, + "src": "4824:13:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2614, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4824:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2617, + "mutability": "mutable", + "name": "signer", + "nameLocation": "4847:6:24", + "nodeType": "VariableDeclaration", + "scope": 2619, + "src": "4839:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2616, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4839:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4823:31:24" + }, + "src": "4779:76:24" + }, + { + "documentation": { + "id": 2620, + "nodeType": "StructuredDocumentation", + "src": "4861:103:24", + "text": " Thrown when the signer is not thawing\n @param signer The address of the signer" + }, + "errorSelector": "1885ecbd", + "id": 2624, + "name": "TAPCollectorSignerNotThawing", + "nameLocation": "4975:28:24", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2623, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2622, + "mutability": "mutable", + "name": "signer", + "nameLocation": "5012:6:24", + "nodeType": "VariableDeclaration", + "scope": 2624, + "src": "5004:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2621, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5004:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5003:16:24" + }, + "src": "4969:51:24" + }, + { + "documentation": { + "id": 2625, + "nodeType": "StructuredDocumentation", + "src": "5026:189:24", + "text": " Thrown when the signer is still thawing\n @param currentTimestamp The current timestamp\n @param thawEndTimestamp The timestamp at which the thawing period ends" + }, + "errorSelector": "d2168558", + "id": 2631, + "name": "TAPCollectorSignerStillThawing", + "nameLocation": "5226:30:24", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2630, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2627, + "mutability": "mutable", + "name": "currentTimestamp", + "nameLocation": "5265:16:24", + "nodeType": "VariableDeclaration", + "scope": 2631, + "src": "5257:24:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2626, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5257:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2629, + "mutability": "mutable", + "name": "thawEndTimestamp", + "nameLocation": "5291:16:24", + "nodeType": "VariableDeclaration", + "scope": 2631, + "src": "5283:24:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2628, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5283:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5256:52:24" + }, + "src": "5220:89:24" + }, + { + "documentation": { + "id": 2632, + "nodeType": "StructuredDocumentation", + "src": "5315:56:24", + "text": " Thrown when the RAV signer is invalid" + }, + "errorSelector": "0ef060dd", + "id": 2634, + "name": "TAPCollectorInvalidRAVSigner", + "nameLocation": "5382:28:24", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2633, + "nodeType": "ParameterList", + "parameters": [], + "src": "5410:2:24" + }, + "src": "5376:37:24" + }, + { + "documentation": { + "id": 2635, + "nodeType": "StructuredDocumentation", + "src": "5419:192:24", + "text": " Thrown when the caller is not the data service the RAV was issued to\n @param caller The address of the caller\n @param dataService The address of the data service" + }, + "errorSelector": "8eccd746", + "id": 2641, + "name": "TAPCollectorCallerNotDataService", + "nameLocation": "5622:32:24", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2640, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2637, + "mutability": "mutable", + "name": "caller", + "nameLocation": "5663:6:24", + "nodeType": "VariableDeclaration", + "scope": 2641, + "src": "5655:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2636, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5655:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2639, + "mutability": "mutable", + "name": "dataService", + "nameLocation": "5679:11:24", + "nodeType": "VariableDeclaration", + "scope": 2641, + "src": "5671:19:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2638, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5671:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5654:37:24" + }, + "src": "5616:76:24" + }, + { + "documentation": { + "id": 2642, + "nodeType": "StructuredDocumentation", + "src": "5698:292:24", + "text": " @notice Thrown when the tokens collected are inconsistent with the collection history\n Each RAV should have a value greater than the previous one\n @param tokens The amount of tokens in the RAV\n @param tokensCollected The amount of tokens already collected" + }, + "errorSelector": "47233ec8", + "id": 2648, + "name": "TAPCollectorInconsistentRAVTokens", + "nameLocation": "6001:33:24", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 2647, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2644, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "6043:6:24", + "nodeType": "VariableDeclaration", + "scope": 2648, + "src": "6035:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2643, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6035:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2646, + "mutability": "mutable", + "name": "tokensCollected", + "nameLocation": "6059:15:24", + "nodeType": "VariableDeclaration", + "scope": 2648, + "src": "6051:23:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2645, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6051:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6034:41:24" + }, + "src": "5995:81:24" + }, + { + "documentation": { + "id": 2649, + "nodeType": "StructuredDocumentation", + "src": "6082:616:24", + "text": " @notice Authorize a signer to sign on behalf of the payer\n @dev Requirements:\n - `signer` must not be already authorized\n - `proofDeadline` must be greater than the current timestamp\n - `proof` must be a valid signature from the signer being authorized\n Emits an {SignerAuthorized} event\n @param signer The addres of the authorized signer\n @param proofDeadline The deadline for the proof provided by the signer\n @param proof The proof provided by the signer to be authorized by the payer, consists of (chainID, proof deadline, sender address)" + }, + "functionSelector": "fee9f01f", + "id": 2658, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "authorizeSigner", + "nameLocation": "6712:15:24", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2656, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2651, + "mutability": "mutable", + "name": "signer", + "nameLocation": "6736:6:24", + "nodeType": "VariableDeclaration", + "scope": 2658, + "src": "6728:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2650, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6728:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2653, + "mutability": "mutable", + "name": "proofDeadline", + "nameLocation": "6752:13:24", + "nodeType": "VariableDeclaration", + "scope": 2658, + "src": "6744:21:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2652, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6744:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2655, + "mutability": "mutable", + "name": "proof", + "nameLocation": "6782:5:24", + "nodeType": "VariableDeclaration", + "scope": 2658, + "src": "6767:20:24", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2654, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6767:5:24", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6727:61:24" + }, + "returnParameters": { + "id": 2657, + "nodeType": "ParameterList", + "parameters": [], + "src": "6797:0:24" + }, + "scope": 2695, + "src": "6703:95:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2659, + "nodeType": "StructuredDocumentation", + "src": "6804:720:24", + "text": " @notice Starts thawing a signer to be removed from the authorized signers list\n @dev Thawing a signer alerts receivers that signatures from that signer will soon be deemed invalid.\n Receivers without existing signed receipts or RAVs from this signer should treat them as unauthorized.\n Those with existing signed documents from this signer should work towards settling their engagements.\n Once a signer is thawed, they should be viewed as revoked regardless of their revocation status.\n Requirements:\n - `signer` must be authorized by the payer calling this function\n Emits a {SignerThawing} event\n @param signer The address of the signer to thaw" + }, + "functionSelector": "1354f019", + "id": 2664, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "thawSigner", + "nameLocation": "7538:10:24", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2662, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2661, + "mutability": "mutable", + "name": "signer", + "nameLocation": "7557:6:24", + "nodeType": "VariableDeclaration", + "scope": 2664, + "src": "7549:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2660, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7549:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7548:16:24" + }, + "returnParameters": { + "id": 2663, + "nodeType": "ParameterList", + "parameters": [], + "src": "7573:0:24" + }, + "scope": 2695, + "src": "7529:45:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2665, + "nodeType": "StructuredDocumentation", + "src": "7580:274:24", + "text": " @notice Stops thawing a signer.\n @dev Requirements:\n - `signer` must be thawing and authorized by the payer calling this function\n Emits a {SignerThawCanceled} event\n @param signer The address of the signer to cancel thawing" + }, + "functionSelector": "015cdd80", + "id": 2670, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "cancelThawSigner", + "nameLocation": "7868:16:24", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2668, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2667, + "mutability": "mutable", + "name": "signer", + "nameLocation": "7893:6:24", + "nodeType": "VariableDeclaration", + "scope": 2670, + "src": "7885:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7885:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7884:16:24" + }, + "returnParameters": { + "id": 2669, + "nodeType": "ParameterList", + "parameters": [], + "src": "7909:0:24" + }, + "scope": 2695, + "src": "7859:51:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2671, + "nodeType": "StructuredDocumentation", + "src": "7916:287:24", + "text": " @notice Revokes a signer from the authorized signers list if thawed.\n @dev Requirements:\n - `signer` must be thawed and authorized by the payer calling this function\n Emits a {SignerRevoked} event\n @param signer The address of the signer" + }, + "functionSelector": "39aa7416", + "id": 2676, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "revokeAuthorizedSigner", + "nameLocation": "8217:22:24", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2674, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2673, + "mutability": "mutable", + "name": "signer", + "nameLocation": "8248:6:24", + "nodeType": "VariableDeclaration", + "scope": 2676, + "src": "8240:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2672, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8240:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8239:16:24" + }, + "returnParameters": { + "id": 2675, + "nodeType": "ParameterList", + "parameters": [], + "src": "8264:0:24" + }, + "scope": 2695, + "src": "8208:57:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2677, + "nodeType": "StructuredDocumentation", + "src": "8271:212:24", + "text": " @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV).\n @param signedRAV The SignedRAV containing the RAV and its signature.\n @return The address of the signer." + }, + "functionSelector": "1ef518f2", + "id": 2685, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "recoverRAVSigner", + "nameLocation": "8497:16:24", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2681, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2680, + "mutability": "mutable", + "name": "signedRAV", + "nameLocation": "8533:9:24", + "nodeType": "VariableDeclaration", + "scope": 2685, + "src": "8514:28:24", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_calldata_ptr", + "typeString": "struct ITAPCollector.SignedRAV" + }, + "typeName": { + "id": 2679, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2678, + "name": "SignedRAV", + "nameLocations": [ + "8514:9:24" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2546, + "src": "8514:9:24" + }, + "referencedDeclaration": 2546, + "src": "8514:9:24", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_storage_ptr", + "typeString": "struct ITAPCollector.SignedRAV" + } + }, + "visibility": "internal" + } + ], + "src": "8513:30:24" + }, + "returnParameters": { + "id": 2684, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2683, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2685, + "src": "8567:7:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2682, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8567:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8566:9:24" + }, + "scope": 2695, + "src": "8488:88:24", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2686, + "nodeType": "StructuredDocumentation", + "src": "8582:170:24", + "text": " @dev Computes the hash of a ReceiptAggregateVoucher (RAV).\n @param rav The RAV for which to compute the hash.\n @return The hash of the RAV." + }, + "functionSelector": "8821603c", + "id": 2694, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "encodeRAV", + "nameLocation": "8766:9:24", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2690, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2689, + "mutability": "mutable", + "name": "rav", + "nameLocation": "8809:3:24", + "nodeType": "VariableDeclaration", + "scope": 2694, + "src": "8776:36:24", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_calldata_ptr", + "typeString": "struct ITAPCollector.ReceiptAggregateVoucher" + }, + "typeName": { + "id": 2688, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2687, + "name": "ReceiptAggregateVoucher", + "nameLocations": [ + "8776:23:24" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2539, + "src": "8776:23:24" + }, + "referencedDeclaration": 2539, + "src": "8776:23:24", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_storage_ptr", + "typeString": "struct ITAPCollector.ReceiptAggregateVoucher" + } + }, + "visibility": "internal" + } + ], + "src": "8775:38:24" + }, + "returnParameters": { + "id": 2693, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2692, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2694, + "src": "8837:7:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2691, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8837:7:24", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "8836:9:24" + }, + "scope": 2695, + "src": "8757:89:24", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2696, + "src": "438:8410:24", + "usedErrors": [ + 2602, + 2609, + 2612, + 2619, + 2624, + 2631, + 2634, + 2641, + 2648 + ], + "usedEvents": [ + 2256, + 2553, + 2562, + 2571, + 2578, + 2595 + ] + } + ], + "src": "45:8804:24" + }, + "id": 24 + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol", + "exportedSymbols": { + "IGraphPayments": [ + 2211 + ], + "IHorizonStakingBase": [ + 2871 + ], + "IHorizonStakingTypes": [ + 3796 + ], + "LinkedList": [ + 4087 + ] + }, + "id": 2872, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2697, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:25" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", + "file": "./IHorizonStakingTypes.sol", + "id": 2699, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2872, + "sourceUnit": 3797, + "src": "71:66:25", + "symbolAliases": [ + { + "foreign": { + "id": 2698, + "name": "IHorizonStakingTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3796, + "src": "80:20:25", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "file": "../IGraphPayments.sol", + "id": 2701, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2872, + "sourceUnit": 2212, + "src": "138:55:25", + "symbolAliases": [ + { + "foreign": { + "id": 2700, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "147:14:25", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/LinkedList.sol", + "file": "../../libraries/LinkedList.sol", + "id": 2703, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2872, + "sourceUnit": 4088, + "src": "195:60:25", + "symbolAliases": [ + { + "foreign": { + "id": 2702, + "name": "LinkedList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4087, + "src": "204:10:25", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IHorizonStakingBase", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2704, + "nodeType": "StructuredDocumentation", + "src": "257:324:25", + "text": " @title Interface for the {HorizonStakingBase} contract.\n @notice Provides getters for {HorizonStaking} and {HorizonStakingExtension} storage variables.\n @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision\n functions take `serviceProvider` and `verifier` addresses." + }, + "fullyImplemented": false, + "id": 2871, + "linearizedBaseContracts": [ + 2871 + ], + "name": "IHorizonStakingBase", + "nameLocation": "592:19:25", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 2705, + "nodeType": "StructuredDocumentation", + "src": "618:408:25", + "text": " @notice Emitted when a service provider stakes tokens.\n @dev TODO: After transition period move to IHorizonStakingMain. Temporarily it\n needs to be here since it's emitted by {_stake} which is used by both {HorizonStaking}\n and {HorizonStakingExtension}.\n @param serviceProvider The address of the service provider.\n @param tokens The amount of tokens staked." + }, + "eventSelector": "0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2", + "id": 2711, + "name": "StakeDeposited", + "nameLocation": "1037:14:25", + "nodeType": "EventDefinition", + "parameters": { + "id": 2710, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2707, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1068:15:25", + "nodeType": "VariableDeclaration", + "scope": 2711, + "src": "1052:31:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2706, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1052:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2709, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "1093:6:25", + "nodeType": "VariableDeclaration", + "scope": 2711, + "src": "1085:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2708, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1085:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1051:49:25" + }, + "src": "1031:70:25" + }, + { + "documentation": { + "id": 2712, + "nodeType": "StructuredDocumentation", + "src": "1107:133:25", + "text": " @notice Gets the details of a service provider.\n @param serviceProvider The address of the service provider." + }, + "functionSelector": "8cc01c86", + "id": 2720, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getServiceProvider", + "nameLocation": "1254:18:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2715, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2714, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1290:15:25", + "nodeType": "VariableDeclaration", + "scope": 2720, + "src": "1282:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2713, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1282:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1272:39:25" + }, + "returnParameters": { + "id": 2719, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2718, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2720, + "src": "1335:43:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ServiceProvider_$3724_memory_ptr", + "typeString": "struct IHorizonStakingTypes.ServiceProvider" + }, + "typeName": { + "id": 2717, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2716, + "name": "IHorizonStakingTypes.ServiceProvider", + "nameLocations": [ + "1335:20:25", + "1356:15:25" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3724, + "src": "1335:36:25" + }, + "referencedDeclaration": 3724, + "src": "1335:36:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ServiceProvider_$3724_storage_ptr", + "typeString": "struct IHorizonStakingTypes.ServiceProvider" + } + }, + "visibility": "internal" + } + ], + "src": "1334:45:25" + }, + "scope": 2871, + "src": "1245:135:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2721, + "nodeType": "StructuredDocumentation", + "src": "1386:175:25", + "text": " @notice Gets the stake of a service provider.\n @param serviceProvider The address of the service provider.\n @return The amount of tokens staked." + }, + "functionSelector": "7a766460", + "id": 2728, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getStake", + "nameLocation": "1575:8:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2724, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2723, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1592:15:25", + "nodeType": "VariableDeclaration", + "scope": 2728, + "src": "1584:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2722, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1584:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1583:25:25" + }, + "returnParameters": { + "id": 2727, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2726, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2728, + "src": "1632:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2725, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1632:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1631:9:25" + }, + "scope": 2871, + "src": "1566:75:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2729, + "nodeType": "StructuredDocumentation", + "src": "1647:311:25", + "text": " @notice Gets the service provider's idle stake which is the stake that is not being\n used for any provision. Note that this only includes service provider's self stake.\n @param serviceProvider The address of the service provider.\n @return The amount of tokens that are idle." + }, + "functionSelector": "a784d498", + "id": 2736, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getIdleStake", + "nameLocation": "1972:12:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2731, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1993:15:25", + "nodeType": "VariableDeclaration", + "scope": 2736, + "src": "1985:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2730, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1985:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1984:25:25" + }, + "returnParameters": { + "id": 2735, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2734, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2736, + "src": "2033:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2733, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2033:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2032:9:25" + }, + "scope": 2871, + "src": "1963:79:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2737, + "nodeType": "StructuredDocumentation", + "src": "2048:226:25", + "text": " @notice Gets the details of delegation pool.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @return The delegation pool details." + }, + "functionSelector": "561285e4", + "id": 2747, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getDelegationPool", + "nameLocation": "2288:17:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2742, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2739, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2323:15:25", + "nodeType": "VariableDeclaration", + "scope": 2747, + "src": "2315:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2738, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2315:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2741, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "2356:8:25", + "nodeType": "VariableDeclaration", + "scope": 2747, + "src": "2348:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2740, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2348:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2305:65:25" + }, + "returnParameters": { + "id": 2746, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2745, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2747, + "src": "2394:42:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", + "typeString": "struct IHorizonStakingTypes.DelegationPool" + }, + "typeName": { + "id": 2744, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2743, + "name": "IHorizonStakingTypes.DelegationPool", + "nameLocations": [ + "2394:20:25", + "2415:14:25" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3748, + "src": "2394:35:25" + }, + "referencedDeclaration": 3748, + "src": "2394:35:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DelegationPool_$3748_storage_ptr", + "typeString": "struct IHorizonStakingTypes.DelegationPool" + } + }, + "visibility": "internal" + } + ], + "src": "2393:44:25" + }, + "scope": 2871, + "src": "2279:159:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2748, + "nodeType": "StructuredDocumentation", + "src": "2444:272:25", + "text": " @notice Gets the details of a delegation.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param delegator The address of the delegator.\n @return The delegation details." + }, + "functionSelector": "ccebcabb", + "id": 2760, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getDelegation", + "nameLocation": "2730:13:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2755, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2750, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2761:15:25", + "nodeType": "VariableDeclaration", + "scope": 2760, + "src": "2753:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2749, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2753:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2752, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "2794:8:25", + "nodeType": "VariableDeclaration", + "scope": 2760, + "src": "2786:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2751, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2786:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2754, + "mutability": "mutable", + "name": "delegator", + "nameLocation": "2820:9:25", + "nodeType": "VariableDeclaration", + "scope": 2760, + "src": "2812:17:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2753, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2812:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2743:92:25" + }, + "returnParameters": { + "id": 2759, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2758, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2760, + "src": "2859:38:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Delegation_$3777_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Delegation" + }, + "typeName": { + "id": 2757, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2756, + "name": "IHorizonStakingTypes.Delegation", + "nameLocations": [ + "2859:20:25", + "2880:10:25" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3777, + "src": "2859:31:25" + }, + "referencedDeclaration": 3777, + "src": "2859:31:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Delegation_$3777_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Delegation" + } + }, + "visibility": "internal" + } + ], + "src": "2858:40:25" + }, + "scope": 2871, + "src": "2721:178:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2761, + "nodeType": "StructuredDocumentation", + "src": "2905:327:25", + "text": " @notice Gets the delegation fee cut for a payment type.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param paymentType The payment type as defined by {IGraphPayments.PaymentTypes}.\n @return The delegation fee cut in PPM." + }, + "functionSelector": "7573ef4f", + "id": 2773, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getDelegationFeeCut", + "nameLocation": "3246:19:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2769, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2763, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3283:15:25", + "nodeType": "VariableDeclaration", + "scope": 2773, + "src": "3275:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2762, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3275:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2765, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "3316:8:25", + "nodeType": "VariableDeclaration", + "scope": 2773, + "src": "3308:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2764, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3308:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2768, + "mutability": "mutable", + "name": "paymentType", + "nameLocation": "3362:11:25", + "nodeType": "VariableDeclaration", + "scope": 2773, + "src": "3334:39:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 2767, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2766, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "3334:14:25", + "3349:12:25" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "3334:27:25" + }, + "referencedDeclaration": 2166, + "src": "3334:27:25", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + } + ], + "src": "3265:114:25" + }, + "returnParameters": { + "id": 2772, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2771, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2773, + "src": "3403:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2770, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3403:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3402:9:25" + }, + "scope": 2871, + "src": "3237:175:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2774, + "nodeType": "StructuredDocumentation", + "src": "3418:216:25", + "text": " @notice Gets the details of a provision.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @return The provision details." + }, + "functionSelector": "25d9897e", + "id": 2784, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getProvision", + "nameLocation": "3648:12:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2779, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2776, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3678:15:25", + "nodeType": "VariableDeclaration", + "scope": 2784, + "src": "3670:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2775, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3670:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2778, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "3711:8:25", + "nodeType": "VariableDeclaration", + "scope": 2784, + "src": "3703:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2777, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3703:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3660:65:25" + }, + "returnParameters": { + "id": 2783, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2782, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2784, + "src": "3749:37:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 2781, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2780, + "name": "IHorizonStakingTypes.Provision", + "nameLocations": [ + "3749:20:25", + "3770:9:25" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "3749:30:25" + }, + "referencedDeclaration": 3718, + "src": "3749:30:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "src": "3748:39:25" + }, + "scope": 2871, + "src": "3639:149:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2785, + "nodeType": "StructuredDocumentation", + "src": "3794:559:25", + "text": " @notice Gets the tokens available in a provision.\n Tokens available are the tokens in a provision that are not thawing. Includes service\n provider's and delegator's stake.\n Allows specifying a `delegationRatio` which caps the amount of delegated tokens that are\n considered available.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param delegationRatio The delegation ratio.\n @return The amount of tokens available." + }, + "functionSelector": "872d0489", + "id": 2796, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getTokensAvailable", + "nameLocation": "4367:18:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2792, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2787, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "4403:15:25", + "nodeType": "VariableDeclaration", + "scope": 2796, + "src": "4395:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2786, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4395:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2789, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "4436:8:25", + "nodeType": "VariableDeclaration", + "scope": 2796, + "src": "4428:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2788, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4428:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2791, + "mutability": "mutable", + "name": "delegationRatio", + "nameLocation": "4461:15:25", + "nodeType": "VariableDeclaration", + "scope": 2796, + "src": "4454:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2790, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4454:6:25", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "4385:97:25" + }, + "returnParameters": { + "id": 2795, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2794, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2796, + "src": "4506:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2793, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4506:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4505:9:25" + }, + "scope": 2871, + "src": "4358:157:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2797, + "nodeType": "StructuredDocumentation", + "src": "4521:326:25", + "text": " @notice Gets the service provider's tokens available in a provision.\n @dev Calculated as the tokens available minus the tokens thawing.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @return The amount of tokens available." + }, + "functionSelector": "08ce5f68", + "id": 2806, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getProviderTokensAvailable", + "nameLocation": "4861:26:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2802, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2799, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "4896:15:25", + "nodeType": "VariableDeclaration", + "scope": 2806, + "src": "4888:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2798, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4888:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2801, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "4921:8:25", + "nodeType": "VariableDeclaration", + "scope": 2806, + "src": "4913:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2800, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4913:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4887:43:25" + }, + "returnParameters": { + "id": 2805, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2804, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2806, + "src": "4954:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2803, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4954:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4953:9:25" + }, + "scope": 2871, + "src": "4852:111:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2807, + "nodeType": "StructuredDocumentation", + "src": "4969:319:25", + "text": " @notice Gets the delegator's tokens available in a provision.\n @dev Calculated as the tokens available minus the tokens thawing.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @return The amount of tokens available." + }, + "functionSelector": "fb744cc0", + "id": 2816, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getDelegatedTokensAvailable", + "nameLocation": "5302:27:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2812, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2809, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "5338:15:25", + "nodeType": "VariableDeclaration", + "scope": 2816, + "src": "5330:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2808, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5330:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2811, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "5363:8:25", + "nodeType": "VariableDeclaration", + "scope": 2816, + "src": "5355:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2810, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5355:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5329:43:25" + }, + "returnParameters": { + "id": 2815, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2814, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2816, + "src": "5396:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2813, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5396:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5395:9:25" + }, + "scope": 2871, + "src": "5293:112:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2817, + "nodeType": "StructuredDocumentation", + "src": "5411:144:25", + "text": " @notice Gets a thaw request.\n @param thawRequestId The id of the thaw request.\n @return The thaw request details." + }, + "functionSelector": "b7ca7241", + "id": 2825, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getThawRequest", + "nameLocation": "5569:14:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2820, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2819, + "mutability": "mutable", + "name": "thawRequestId", + "nameLocation": "5592:13:25", + "nodeType": "VariableDeclaration", + "scope": 2825, + "src": "5584:21:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2818, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5584:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5583:23:25" + }, + "returnParameters": { + "id": 2824, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2823, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2825, + "src": "5630:39:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ThawRequest_$3795_memory_ptr", + "typeString": "struct IHorizonStakingTypes.ThawRequest" + }, + "typeName": { + "id": 2822, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2821, + "name": "IHorizonStakingTypes.ThawRequest", + "nameLocations": [ + "5630:20:25", + "5651:11:25" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3795, + "src": "5630:32:25" + }, + "referencedDeclaration": 3795, + "src": "5630:32:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ThawRequest_$3795_storage_ptr", + "typeString": "struct IHorizonStakingTypes.ThawRequest" + } + }, + "visibility": "internal" + } + ], + "src": "5629:41:25" + }, + "scope": 2871, + "src": "5560:111:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2826, + "nodeType": "StructuredDocumentation", + "src": "5677:529:25", + "text": " @notice Gets the metadata of a thaw request list.\n Service provider and delegators each have their own thaw request list per provision.\n Metadata includes the head and tail of the list, plus the total number of thaw requests.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param owner The owner of the thaw requests. Use either the service provider or delegator address.\n @return The thaw requests list metadata." + }, + "functionSelector": "a212daf8", + "id": 2838, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getThawRequestList", + "nameLocation": "6220:18:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2833, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2828, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "6256:15:25", + "nodeType": "VariableDeclaration", + "scope": 2838, + "src": "6248:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2827, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6248:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2830, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "6289:8:25", + "nodeType": "VariableDeclaration", + "scope": 2838, + "src": "6281:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2829, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6281:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2832, + "mutability": "mutable", + "name": "owner", + "nameLocation": "6315:5:25", + "nodeType": "VariableDeclaration", + "scope": 2838, + "src": "6307:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2831, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6307:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6238:88:25" + }, + "returnParameters": { + "id": 2837, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2836, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2838, + "src": "6350:22:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_memory_ptr", + "typeString": "struct LinkedList.List" + }, + "typeName": { + "id": 2835, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2834, + "name": "LinkedList.List", + "nameLocations": [ + "6350:10:25", + "6361:4:25" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3813, + "src": "6350:15:25" + }, + "referencedDeclaration": 3813, + "src": "6350:15:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + } + }, + "visibility": "internal" + } + ], + "src": "6349:24:25" + }, + "scope": 2871, + "src": "6211:163:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2839, + "nodeType": "StructuredDocumentation", + "src": "6380:351:25", + "text": " @notice Gets the amount of thawed tokens for a given provision.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param owner The owner of the thaw requests. Use either the service provider or delegator address.\n @return The amount of thawed tokens." + }, + "functionSelector": "9054e343", + "id": 2850, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getThawedTokens", + "nameLocation": "6745:15:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2846, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2841, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "6769:15:25", + "nodeType": "VariableDeclaration", + "scope": 2850, + "src": "6761:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2840, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6761:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2843, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "6794:8:25", + "nodeType": "VariableDeclaration", + "scope": 2850, + "src": "6786:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2842, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6786:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2845, + "mutability": "mutable", + "name": "owner", + "nameLocation": "6812:5:25", + "nodeType": "VariableDeclaration", + "scope": 2850, + "src": "6804:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2844, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6804:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6760:58:25" + }, + "returnParameters": { + "id": 2849, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2848, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2850, + "src": "6842:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2847, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6842:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6841:9:25" + }, + "scope": 2871, + "src": "6736:115:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2851, + "nodeType": "StructuredDocumentation", + "src": "6857:83:25", + "text": " @notice Gets the maximum allowed thawing period for a provision." + }, + "functionSelector": "39514ad2", + "id": 2856, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getMaxThawingPeriod", + "nameLocation": "6954:19:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2852, + "nodeType": "ParameterList", + "parameters": [], + "src": "6973:2:25" + }, + "returnParameters": { + "id": 2855, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2854, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2856, + "src": "6999:6:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2853, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6999:6:25", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "6998:8:25" + }, + "scope": 2871, + "src": "6945:62:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2857, + "nodeType": "StructuredDocumentation", + "src": "7013:208:25", + "text": " @notice Return true if the verifier is an allowed locked verifier.\n @param verifier Address of the verifier\n @return True if verifier is allowed locked verifier, false otherwise" + }, + "functionSelector": "ae4fe67a", + "id": 2864, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isAllowedLockedVerifier", + "nameLocation": "7235:23:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2860, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2859, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "7267:8:25", + "nodeType": "VariableDeclaration", + "scope": 2864, + "src": "7259:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2858, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7259:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7258:18:25" + }, + "returnParameters": { + "id": 2863, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2862, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2864, + "src": "7300:4:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2861, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7300:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7299:6:25" + }, + "scope": 2871, + "src": "7226:80:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2865, + "nodeType": "StructuredDocumentation", + "src": "7312:90:25", + "text": " @notice Return true if delegation slashing is enabled, false otherwise." + }, + "functionSelector": "fc54fb27", + "id": 2870, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isDelegationSlashingEnabled", + "nameLocation": "7416:27:25", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2866, + "nodeType": "ParameterList", + "parameters": [], + "src": "7443:2:25" + }, + "returnParameters": { + "id": 2869, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2868, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2870, + "src": "7469:4:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2867, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7469:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7468:6:25" + }, + "scope": 2871, + "src": "7407:68:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2872, + "src": "582:6895:25", + "usedErrors": [], + "usedEvents": [ + 2711 + ] + } + ], + "src": "46:7432:25" + }, + "id": 25 + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol", + "exportedSymbols": { + "IHorizonStakingExtension": [ + 3022 + ], + "IRewardsIssuer": [ + 314 + ] + }, + "id": 3023, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2873, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:26" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", + "file": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", + "id": 2875, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3023, + "sourceUnit": 315, + "src": "71:95:26", + "symbolAliases": [ + { + "foreign": { + "id": 2874, + "name": "IRewardsIssuer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 314, + "src": "80:14:26", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 2877, + "name": "IRewardsIssuer", + "nameLocations": [ + "337:14:26" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 314, + "src": "337:14:26" + }, + "id": 2878, + "nodeType": "InheritanceSpecifier", + "src": "337:14:26" + } + ], + "canonicalName": "IHorizonStakingExtension", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2876, + "nodeType": "StructuredDocumentation", + "src": "168:130:26", + "text": " @title Interface for {HorizonStakingExtension} contract.\n @notice Provides functions for managing legacy allocations." + }, + "fullyImplemented": false, + "id": 3022, + "linearizedBaseContracts": [ + 3022, + 314 + ], + "name": "IHorizonStakingExtension", + "nameLocation": "309:24:26", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IHorizonStakingExtension.Allocation", + "documentation": { + "id": 2879, + "nodeType": "StructuredDocumentation", + "src": "358:194:26", + "text": " @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment\n An allocation is created in the allocate() function and closed in closeAllocation()" + }, + "id": 2898, + "members": [ + { + "constant": false, + "id": 2881, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "593:7:26", + "nodeType": "VariableDeclaration", + "scope": 2898, + "src": "585:15:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2880, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "585:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2883, + "mutability": "mutable", + "name": "subgraphDeploymentID", + "nameLocation": "618:20:26", + "nodeType": "VariableDeclaration", + "scope": 2898, + "src": "610:28:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2882, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "610:7:26", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2885, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "656:6:26", + "nodeType": "VariableDeclaration", + "scope": 2898, + "src": "648:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2884, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "648:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2887, + "mutability": "mutable", + "name": "createdAtEpoch", + "nameLocation": "724:14:26", + "nodeType": "VariableDeclaration", + "scope": 2898, + "src": "716:22:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2886, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "716:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2889, + "mutability": "mutable", + "name": "closedAtEpoch", + "nameLocation": "785:13:26", + "nodeType": "VariableDeclaration", + "scope": 2898, + "src": "777:21:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2888, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "777:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2891, + "mutability": "mutable", + "name": "collectedFees", + "nameLocation": "844:13:26", + "nodeType": "VariableDeclaration", + "scope": 2898, + "src": "836:21:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2890, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "836:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2893, + "mutability": "mutable", + "name": "__DEPRECATED_effectiveAllocation", + "nameLocation": "912:32:26", + "nodeType": "VariableDeclaration", + "scope": 2898, + "src": "904:40:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2892, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "904:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2895, + "mutability": "mutable", + "name": "accRewardsPerAllocatedToken", + "nameLocation": "1005:27:26", + "nodeType": "VariableDeclaration", + "scope": 2898, + "src": "997:35:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2894, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "997:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2897, + "mutability": "mutable", + "name": "distributedRebates", + "nameLocation": "1083:18:26", + "nodeType": "VariableDeclaration", + "scope": 2898, + "src": "1075:26:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2896, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1075:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Allocation", + "nameLocation": "564:10:26", + "nodeType": "StructDefinition", + "scope": 3022, + "src": "557:595:26", + "visibility": "public" + }, + { + "canonicalName": "IHorizonStakingExtension.AllocationState", + "documentation": { + "id": 2899, + "nodeType": "StructuredDocumentation", + "src": "1158:202:26", + "text": " @dev Possible states an allocation can be.\n States:\n - Null = indexer == address(0)\n - Active = not Null && tokens > 0\n - Closed = Active && closedAtEpoch != 0" + }, + "id": 2903, + "members": [ + { + "id": 2900, + "name": "Null", + "nameLocation": "1396:4:26", + "nodeType": "EnumValue", + "src": "1396:4:26" + }, + { + "id": 2901, + "name": "Active", + "nameLocation": "1410:6:26", + "nodeType": "EnumValue", + "src": "1410:6:26" + }, + { + "id": 2902, + "name": "Closed", + "nameLocation": "1426:6:26", + "nodeType": "EnumValue", + "src": "1426:6:26" + } + ], + "name": "AllocationState", + "nameLocation": "1370:15:26", + "nodeType": "EnumDefinition", + "src": "1365:73:26" + }, + { + "anonymous": false, + "documentation": { + "id": 2904, + "nodeType": "StructuredDocumentation", + "src": "1444:330:26", + "text": " @dev Emitted when `indexer` close an allocation in `epoch` for `allocationID`.\n An amount of `tokens` get unallocated from `subgraphDeploymentID`.\n This event also emits the POI (proof of indexing) submitted by the indexer.\n `isPublic` is true if the sender was someone other than the indexer." + }, + "eventSelector": "f6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce1403", + "id": 2922, + "name": "AllocationClosed", + "nameLocation": "1785:16:26", + "nodeType": "EventDefinition", + "parameters": { + "id": 2921, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2906, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "1827:7:26", + "nodeType": "VariableDeclaration", + "scope": 2922, + "src": "1811:23:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2905, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1811:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2908, + "indexed": true, + "mutability": "mutable", + "name": "subgraphDeploymentID", + "nameLocation": "1860:20:26", + "nodeType": "VariableDeclaration", + "scope": 2922, + "src": "1844:36:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2907, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1844:7:26", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2910, + "indexed": false, + "mutability": "mutable", + "name": "epoch", + "nameLocation": "1898:5:26", + "nodeType": "VariableDeclaration", + "scope": 2922, + "src": "1890:13:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2909, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1890:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2912, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "1921:6:26", + "nodeType": "VariableDeclaration", + "scope": 2922, + "src": "1913:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2911, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1913:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2914, + "indexed": true, + "mutability": "mutable", + "name": "allocationID", + "nameLocation": "1953:12:26", + "nodeType": "VariableDeclaration", + "scope": 2922, + "src": "1937:28:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2913, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1937:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2916, + "indexed": false, + "mutability": "mutable", + "name": "sender", + "nameLocation": "1983:6:26", + "nodeType": "VariableDeclaration", + "scope": 2922, + "src": "1975:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2915, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1975:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2918, + "indexed": false, + "mutability": "mutable", + "name": "poi", + "nameLocation": "2007:3:26", + "nodeType": "VariableDeclaration", + "scope": 2922, + "src": "1999:11:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2917, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1999:7:26", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2920, + "indexed": false, + "mutability": "mutable", + "name": "isPublic", + "nameLocation": "2025:8:26", + "nodeType": "VariableDeclaration", + "scope": 2922, + "src": "2020:13:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2919, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2020:4:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1801:238:26" + }, + "src": "1779:261:26" + }, + { + "anonymous": false, + "documentation": { + "id": 2923, + "nodeType": "StructuredDocumentation", + "src": "2046:508:26", + "text": " @dev Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`.\n `epoch` is the protocol epoch the rebate was collected on\n The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees`\n is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt.\n `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected\n and sent to the delegation pool." + }, + "eventSelector": "f5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b", + "id": 2947, + "name": "RebateCollected", + "nameLocation": "2565:15:26", + "nodeType": "EventDefinition", + "parameters": { + "id": 2946, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2925, + "indexed": false, + "mutability": "mutable", + "name": "assetHolder", + "nameLocation": "2598:11:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2590:19:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2924, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2590:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2927, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "2635:7:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2619:23:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2926, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2619:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2929, + "indexed": true, + "mutability": "mutable", + "name": "subgraphDeploymentID", + "nameLocation": "2668:20:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2652:36:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2928, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2652:7:26", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2931, + "indexed": true, + "mutability": "mutable", + "name": "allocationID", + "nameLocation": "2714:12:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2698:28:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2930, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2698:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2933, + "indexed": false, + "mutability": "mutable", + "name": "epoch", + "nameLocation": "2744:5:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2736:13:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2932, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2736:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2935, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2767:6:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2759:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2934, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2759:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2937, + "indexed": false, + "mutability": "mutable", + "name": "protocolTax", + "nameLocation": "2791:11:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2783:19:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2936, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2783:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2939, + "indexed": false, + "mutability": "mutable", + "name": "curationFees", + "nameLocation": "2820:12:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2812:20:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2938, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2812:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2941, + "indexed": false, + "mutability": "mutable", + "name": "queryFees", + "nameLocation": "2850:9:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2842:17:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2940, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2842:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2943, + "indexed": false, + "mutability": "mutable", + "name": "queryRebates", + "nameLocation": "2877:12:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2869:20:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2942, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2869:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2945, + "indexed": false, + "mutability": "mutable", + "name": "delegationRewards", + "nameLocation": "2907:17:26", + "nodeType": "VariableDeclaration", + "scope": 2947, + "src": "2899:25:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2944, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2899:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2580:350:26" + }, + "src": "2559:372:26" + }, + { + "documentation": { + "id": 2948, + "nodeType": "StructuredDocumentation", + "src": "2937:381:26", + "text": " @notice Close an allocation and free the staked tokens.\n To be eligible for rewards a proof of indexing must be presented.\n Presenting a bad proof is subject to slashable condition.\n To opt out of rewards set _poi to 0x0\n @param allocationID The allocation identifier\n @param poi Proof of indexing submitted for the allocated period" + }, + "functionSelector": "44c32a61", + "id": 2955, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "closeAllocation", + "nameLocation": "3332:15:26", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2953, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2950, + "mutability": "mutable", + "name": "allocationID", + "nameLocation": "3356:12:26", + "nodeType": "VariableDeclaration", + "scope": 2955, + "src": "3348:20:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2949, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3348:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2952, + "mutability": "mutable", + "name": "poi", + "nameLocation": "3378:3:26", + "nodeType": "VariableDeclaration", + "scope": 2955, + "src": "3370:11:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2951, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3370:7:26", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3347:35:26" + }, + "returnParameters": { + "id": 2954, + "nodeType": "ParameterList", + "parameters": [], + "src": "3391:0:26" + }, + "scope": 3022, + "src": "3323:69:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2956, + "nodeType": "StructuredDocumentation", + "src": "3398:539:26", + "text": " @notice Collect query fees from state channels and assign them to an allocation.\n Funds received are only accepted from a valid sender.\n @dev To avoid reverting on the withdrawal from channel flow this function will:\n 1) Accept calls with zero tokens.\n 2) Accept calls after an allocation passed the dispute period, in that case, all\n the received tokens are burned.\n @param tokens Amount of tokens to collect\n @param allocationID Allocation where the tokens will be assigned" + }, + "functionSelector": "8d3c100a", + "id": 2963, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "collect", + "nameLocation": "3951:7:26", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2961, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2958, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "3967:6:26", + "nodeType": "VariableDeclaration", + "scope": 2963, + "src": "3959:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2957, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3959:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2960, + "mutability": "mutable", + "name": "allocationID", + "nameLocation": "3983:12:26", + "nodeType": "VariableDeclaration", + "scope": 2963, + "src": "3975:20:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2959, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3975:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3958:38:26" + }, + "returnParameters": { + "id": 2962, + "nodeType": "ParameterList", + "parameters": [], + "src": "4005:0:26" + }, + "scope": 3022, + "src": "3942:64:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2964, + "nodeType": "StructuredDocumentation", + "src": "4012:238:26", + "text": " @notice Return true if operator is allowed for indexer.\n @param operator Address of the operator\n @param indexer Address of the indexer\n @return True if operator is allowed for indexer, false otherwise" + }, + "functionSelector": "b6363cf2", + "id": 2973, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isOperator", + "nameLocation": "4264:10:26", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2969, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2966, + "mutability": "mutable", + "name": "operator", + "nameLocation": "4283:8:26", + "nodeType": "VariableDeclaration", + "scope": 2973, + "src": "4275:16:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2965, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4275:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2968, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "4301:7:26", + "nodeType": "VariableDeclaration", + "scope": 2973, + "src": "4293:15:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2967, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4293:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4274:35:26" + }, + "returnParameters": { + "id": 2972, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2971, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2973, + "src": "4333:4:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2970, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4333:4:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4332:6:26" + }, + "scope": 3022, + "src": "4255:84:26", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2974, + "nodeType": "StructuredDocumentation", + "src": "4345:169:26", + "text": " @notice Getter that returns if an indexer has any stake.\n @param indexer Address of the indexer\n @return True if indexer has staked tokens" + }, + "functionSelector": "e73e14bf", + "id": 2981, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "hasStake", + "nameLocation": "4528:8:26", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2977, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2976, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "4545:7:26", + "nodeType": "VariableDeclaration", + "scope": 2981, + "src": "4537:15:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2975, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4537:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4536:17:26" + }, + "returnParameters": { + "id": 2980, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2979, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2981, + "src": "4577:4:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2978, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4577:4:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4576:6:26" + }, + "scope": 3022, + "src": "4519:64:26", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2982, + "nodeType": "StructuredDocumentation", + "src": "4589:179:26", + "text": " @notice Get the total amount of tokens staked by the indexer.\n @param indexer Address of the indexer\n @return Amount of tokens staked by the indexer" + }, + "functionSelector": "1787e69f", + "id": 2989, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getIndexerStakedTokens", + "nameLocation": "4782:22:26", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2985, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2984, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "4813:7:26", + "nodeType": "VariableDeclaration", + "scope": 2989, + "src": "4805:15:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2983, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4805:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4804:17:26" + }, + "returnParameters": { + "id": 2988, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2987, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2989, + "src": "4845:7:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2986, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4845:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4844:9:26" + }, + "scope": 3022, + "src": "4773:81:26", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2990, + "nodeType": "StructuredDocumentation", + "src": "4860:151:26", + "text": " @notice Return the allocation by ID.\n @param allocationID Address used as allocation identifier\n @return Allocation data" + }, + "functionSelector": "0e022923", + "id": 2998, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAllocation", + "nameLocation": "5025:13:26", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2993, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2992, + "mutability": "mutable", + "name": "allocationID", + "nameLocation": "5047:12:26", + "nodeType": "VariableDeclaration", + "scope": 2998, + "src": "5039:20:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2991, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5039:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5038:22:26" + }, + "returnParameters": { + "id": 2997, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2996, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2998, + "src": "5084:17:26", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Allocation_$2898_memory_ptr", + "typeString": "struct IHorizonStakingExtension.Allocation" + }, + "typeName": { + "id": 2995, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2994, + "name": "Allocation", + "nameLocations": [ + "5084:10:26" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2898, + "src": "5084:10:26" + }, + "referencedDeclaration": 2898, + "src": "5084:10:26", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Allocation_$2898_storage_ptr", + "typeString": "struct IHorizonStakingExtension.Allocation" + } + }, + "visibility": "internal" + } + ], + "src": "5083:19:26" + }, + "scope": 3022, + "src": "5016:87:26", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2999, + "nodeType": "StructuredDocumentation", + "src": "5109:186:26", + "text": " @notice Return the current state of an allocation\n @param allocationID Allocation identifier\n @return AllocationState enum with the state of the allocation" + }, + "functionSelector": "98c657dc", + "id": 3007, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAllocationState", + "nameLocation": "5309:18:26", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3002, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3001, + "mutability": "mutable", + "name": "allocationID", + "nameLocation": "5336:12:26", + "nodeType": "VariableDeclaration", + "scope": 3007, + "src": "5328:20:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3000, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5328:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5327:22:26" + }, + "returnParameters": { + "id": 3006, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3005, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3007, + "src": "5373:15:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AllocationState_$2903", + "typeString": "enum IHorizonStakingExtension.AllocationState" + }, + "typeName": { + "id": 3004, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3003, + "name": "AllocationState", + "nameLocations": [ + "5373:15:26" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2903, + "src": "5373:15:26" + }, + "referencedDeclaration": 2903, + "src": "5373:15:26", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AllocationState_$2903", + "typeString": "enum IHorizonStakingExtension.AllocationState" + } + }, + "visibility": "internal" + } + ], + "src": "5372:17:26" + }, + "scope": 3022, + "src": "5300:90:26", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3008, + "nodeType": "StructuredDocumentation", + "src": "5396:190:26", + "text": " @notice Return if allocationID is used.\n @param allocationID Address used as signer by the indexer for an allocation\n @return True if allocationID already used" + }, + "functionSelector": "f1d60d66", + "id": 3015, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isAllocation", + "nameLocation": "5600:12:26", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3011, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3010, + "mutability": "mutable", + "name": "allocationID", + "nameLocation": "5621:12:26", + "nodeType": "VariableDeclaration", + "scope": 3015, + "src": "5613:20:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3009, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5613:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5612:22:26" + }, + "returnParameters": { + "id": 3014, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3013, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3015, + "src": "5658:4:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3012, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5658:4:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5657:6:26" + }, + "scope": 3022, + "src": "5591:73:26", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3016, + "nodeType": "StructuredDocumentation", + "src": "5670:103:26", + "text": " @notice Return the time in blocks to unstake\n @return Thawing period in blocks" + }, + "functionSelector": "c0641994", + "id": 3021, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "__DEPRECATED_getThawingPeriod", + "nameLocation": "5840:29:26", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3017, + "nodeType": "ParameterList", + "parameters": [], + "src": "5869:2:26" + }, + "returnParameters": { + "id": 3020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3019, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3021, + "src": "5895:6:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3018, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "5895:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "5894:8:26" + }, + "scope": 3022, + "src": "5831:72:26", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 3023, + "src": "299:5606:26", + "usedErrors": [], + "usedEvents": [ + 2922, + 2947 + ] + } + ], + "src": "46:5860:26" + }, + "id": 26 + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol", + "exportedSymbols": { + "IGraphPayments": [ + 2211 + ], + "IHorizonStakingMain": [ + 3695 + ] + }, + "id": 3696, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3024, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:27" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "file": "../../interfaces/IGraphPayments.sol", + "id": 3026, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3696, + "sourceUnit": 2212, + "src": "71:69:27", + "symbolAliases": [ + { + "foreign": { + "id": 3025, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "80:14:27", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IHorizonStakingMain", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 3027, + "nodeType": "StructuredDocumentation", + "src": "142:604:27", + "text": " @title Inferface for the {HorizonStaking} contract.\n @notice Provides functions for managing stake, provisions, delegations, and slashing.\n @dev Note that this interface only includes the functions implemented by {HorizonStaking} contract,\n and not those implemented by {HorizonStakingExtension}.\n Do not use this interface to interface with the {HorizonStaking} contract, use {IHorizonStaking} for\n the complete interface.\n @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision\n functions take `serviceProvider` and `verifier` addresses." + }, + "fullyImplemented": false, + "id": 3695, + "linearizedBaseContracts": [ + 3695 + ], + "name": "IHorizonStakingMain", + "nameLocation": "757:19:27", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 3028, + "nodeType": "StructuredDocumentation", + "src": "811:284:27", + "text": " @notice Emitted when a service provider unstakes tokens during the transition period.\n @param serviceProvider The address of the service provider\n @param tokens The amount of tokens unstaked\n @param until The block number until the stake is locked" + }, + "eventSelector": "a5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "id": 3036, + "name": "StakeLocked", + "nameLocation": "1106:11:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3035, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3030, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1134:15:27", + "nodeType": "VariableDeclaration", + "scope": 3036, + "src": "1118:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3029, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1118:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3032, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "1159:6:27", + "nodeType": "VariableDeclaration", + "scope": 3036, + "src": "1151:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3031, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1151:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3034, + "indexed": false, + "mutability": "mutable", + "name": "until", + "nameLocation": "1175:5:27", + "nodeType": "VariableDeclaration", + "scope": 3036, + "src": "1167:13:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3033, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1167:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1117:64:27" + }, + "src": "1100:82:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3037, + "nodeType": "StructuredDocumentation", + "src": "1188:223:27", + "text": " @notice Emitted when a service provider withdraws tokens during the transition period.\n @param serviceProvider The address of the service provider\n @param tokens The amount of tokens withdrawn" + }, + "eventSelector": "8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc", + "id": 3043, + "name": "StakeWithdrawn", + "nameLocation": "1422:14:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3042, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3039, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1453:15:27", + "nodeType": "VariableDeclaration", + "scope": 3043, + "src": "1437:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3038, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1437:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3041, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "1478:6:27", + "nodeType": "VariableDeclaration", + "scope": 3043, + "src": "1470:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3040, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1470:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1436:49:27" + }, + "src": "1416:70:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3044, + "nodeType": "StructuredDocumentation", + "src": "1524:537:27", + "text": " @notice Emitted when a service provider provisions staked tokens to a verifier.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens provisioned\n @param maxVerifierCut The maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\n @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision" + }, + "eventSelector": "88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc25", + "id": 3056, + "name": "ProvisionCreated", + "nameLocation": "2072:16:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3055, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3046, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2114:15:27", + "nodeType": "VariableDeclaration", + "scope": 3056, + "src": "2098:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3045, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2098:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3048, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "2155:8:27", + "nodeType": "VariableDeclaration", + "scope": 3056, + "src": "2139:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3047, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2139:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3050, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2181:6:27", + "nodeType": "VariableDeclaration", + "scope": 3056, + "src": "2173:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3049, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2173:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3052, + "indexed": false, + "mutability": "mutable", + "name": "maxVerifierCut", + "nameLocation": "2204:14:27", + "nodeType": "VariableDeclaration", + "scope": 3056, + "src": "2197:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3051, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2197:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3054, + "indexed": false, + "mutability": "mutable", + "name": "thawingPeriod", + "nameLocation": "2235:13:27", + "nodeType": "VariableDeclaration", + "scope": 3056, + "src": "2228:20:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3053, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2228:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "2088:166:27" + }, + "src": "2066:189:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3057, + "nodeType": "StructuredDocumentation", + "src": "2261:274:27", + "text": " @notice Emitted whenever staked tokens are added to an existing provision\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens added to the provision" + }, + "eventSelector": "eaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745", + "id": 3065, + "name": "ProvisionIncreased", + "nameLocation": "2546:18:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3064, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3059, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2581:15:27", + "nodeType": "VariableDeclaration", + "scope": 3065, + "src": "2565:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3058, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2565:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3061, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "2614:8:27", + "nodeType": "VariableDeclaration", + "scope": 3065, + "src": "2598:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3060, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2598:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3063, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2632:6:27", + "nodeType": "VariableDeclaration", + "scope": 3065, + "src": "2624:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3062, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2624:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2564:75:27" + }, + "src": "2540:100:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3066, + "nodeType": "StructuredDocumentation", + "src": "2646:255:27", + "text": " @notice Emitted when a service provider thaws tokens from a provision.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens thawed" + }, + "eventSelector": "3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa", + "id": 3074, + "name": "ProvisionThawed", + "nameLocation": "2912:15:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3073, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3068, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "2944:15:27", + "nodeType": "VariableDeclaration", + "scope": 3074, + "src": "2928:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3067, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2928:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3070, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "2977:8:27", + "nodeType": "VariableDeclaration", + "scope": 3074, + "src": "2961:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3069, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2961:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3072, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2995:6:27", + "nodeType": "VariableDeclaration", + "scope": 3074, + "src": "2987:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3071, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2987:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2927:75:27" + }, + "src": "2906:97:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3075, + "nodeType": "StructuredDocumentation", + "src": "3009:258:27", + "text": " @notice Emitted when a service provider removes tokens from a provision.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens removed" + }, + "eventSelector": "9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d", + "id": 3083, + "name": "TokensDeprovisioned", + "nameLocation": "3278:19:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3082, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3077, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3314:15:27", + "nodeType": "VariableDeclaration", + "scope": 3083, + "src": "3298:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3076, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3298:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3079, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "3347:8:27", + "nodeType": "VariableDeclaration", + "scope": 3083, + "src": "3331:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3078, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3331:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3081, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "3365:6:27", + "nodeType": "VariableDeclaration", + "scope": 3083, + "src": "3357:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3080, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3357:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3297:75:27" + }, + "src": "3272:101:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3084, + "nodeType": "StructuredDocumentation", + "src": "3379:512:27", + "text": " @notice Emitted when a service provider stages a provision parameter update.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for\n themselves when slashing\n @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from\n the provision" + }, + "eventSelector": "e89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba", + "id": 3094, + "name": "ProvisionParametersStaged", + "nameLocation": "3902:25:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3086, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "3953:15:27", + "nodeType": "VariableDeclaration", + "scope": 3094, + "src": "3937:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3085, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3937:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3088, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "3994:8:27", + "nodeType": "VariableDeclaration", + "scope": 3094, + "src": "3978:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3087, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3978:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3090, + "indexed": false, + "mutability": "mutable", + "name": "maxVerifierCut", + "nameLocation": "4019:14:27", + "nodeType": "VariableDeclaration", + "scope": 3094, + "src": "4012:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3089, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4012:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3092, + "indexed": false, + "mutability": "mutable", + "name": "thawingPeriod", + "nameLocation": "4050:13:27", + "nodeType": "VariableDeclaration", + "scope": 3094, + "src": "4043:20:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3091, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4043:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "3927:142:27" + }, + "src": "3896:174:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3095, + "nodeType": "StructuredDocumentation", + "src": "4076:503:27", + "text": " @notice Emitted when a service provider accepts a staged provision parameter update.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param maxVerifierCut The new maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves\n when slashing\n @param thawingPeriod The new period in seconds that the tokens will be thawing before they can be removed from the provision" + }, + "eventSelector": "a4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6", + "id": 3105, + "name": "ProvisionParametersSet", + "nameLocation": "4590:22:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3104, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3097, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "4638:15:27", + "nodeType": "VariableDeclaration", + "scope": 3105, + "src": "4622:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3096, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4622:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3099, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "4679:8:27", + "nodeType": "VariableDeclaration", + "scope": 3105, + "src": "4663:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3098, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4663:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3101, + "indexed": false, + "mutability": "mutable", + "name": "maxVerifierCut", + "nameLocation": "4704:14:27", + "nodeType": "VariableDeclaration", + "scope": 3105, + "src": "4697:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3100, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4697:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3103, + "indexed": false, + "mutability": "mutable", + "name": "thawingPeriod", + "nameLocation": "4735:13:27", + "nodeType": "VariableDeclaration", + "scope": 3105, + "src": "4728:20:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3102, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4728:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "4612:142:27" + }, + "src": "4584:171:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3106, + "nodeType": "StructuredDocumentation", + "src": "4761:349:27", + "text": " @dev Emitted when an operator is allowed or denied by a service provider for a particular verifier\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param operator The address of the operator\n @param allowed Whether the operator is allowed or denied" + }, + "eventSelector": "aa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f", + "id": 3116, + "name": "OperatorSet", + "nameLocation": "5121:11:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3115, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3108, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "5158:15:27", + "nodeType": "VariableDeclaration", + "scope": 3116, + "src": "5142:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3107, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5142:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3110, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "5199:8:27", + "nodeType": "VariableDeclaration", + "scope": 3116, + "src": "5183:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3109, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5183:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3112, + "indexed": true, + "mutability": "mutable", + "name": "operator", + "nameLocation": "5233:8:27", + "nodeType": "VariableDeclaration", + "scope": 3116, + "src": "5217:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3111, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5217:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3114, + "indexed": false, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "5256:7:27", + "nodeType": "VariableDeclaration", + "scope": 3116, + "src": "5251:12:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3113, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5251:4:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5132:137:27" + }, + "src": "5115:155:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3117, + "nodeType": "StructuredDocumentation", + "src": "5307:305:27", + "text": " @notice Emitted when a provision is slashed by a verifier.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens slashed (note this only represents service provider's slashed stake)" + }, + "eventSelector": "e7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3", + "id": 3125, + "name": "ProvisionSlashed", + "nameLocation": "5623:16:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3124, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3119, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "5656:15:27", + "nodeType": "VariableDeclaration", + "scope": 3125, + "src": "5640:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3118, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5640:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3121, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "5689:8:27", + "nodeType": "VariableDeclaration", + "scope": 3125, + "src": "5673:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3120, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5673:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3123, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "5707:6:27", + "nodeType": "VariableDeclaration", + "scope": 3125, + "src": "5699:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3122, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5699:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5639:75:27" + }, + "src": "5617:98:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3126, + "nodeType": "StructuredDocumentation", + "src": "5721:310:27", + "text": " @notice Emitted when a delegation pool is slashed by a verifier.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens slashed (note this only represents delegation pool's slashed stake)" + }, + "eventSelector": "c5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b771", + "id": 3134, + "name": "DelegationSlashed", + "nameLocation": "6042:17:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3133, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3128, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "6076:15:27", + "nodeType": "VariableDeclaration", + "scope": 3134, + "src": "6060:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3127, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6060:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3130, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "6109:8:27", + "nodeType": "VariableDeclaration", + "scope": 3134, + "src": "6093:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3129, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6093:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3132, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "6127:6:27", + "nodeType": "VariableDeclaration", + "scope": 3134, + "src": "6119:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3131, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6119:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6059:75:27" + }, + "src": "6036:99:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3135, + "nodeType": "StructuredDocumentation", + "src": "6141:441:27", + "text": " @notice Emitted when a delegation pool would have been slashed by a verifier, but the slashing was skipped\n because delegation slashing global parameter is not enabled.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens that would have been slashed (note this only represents delegation pool's slashed stake)" + }, + "eventSelector": "dce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b24", + "id": 3143, + "name": "DelegationSlashingSkipped", + "nameLocation": "6593:25:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3137, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "6635:15:27", + "nodeType": "VariableDeclaration", + "scope": 3143, + "src": "6619:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3136, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6619:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3139, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "6668:8:27", + "nodeType": "VariableDeclaration", + "scope": 3143, + "src": "6652:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3138, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6652:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3141, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "6686:6:27", + "nodeType": "VariableDeclaration", + "scope": 3143, + "src": "6678:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3140, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6678:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6618:75:27" + }, + "src": "6587:107:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3144, + "nodeType": "StructuredDocumentation", + "src": "6700:357:27", + "text": " @notice Emitted when the verifier cut is sent to the verifier after slashing a provision.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param destination The address where the verifier cut is sent\n @param tokens The amount of tokens sent to the verifier" + }, + "eventSelector": "95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d582", + "id": 3154, + "name": "VerifierTokensSent", + "nameLocation": "7068:18:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3153, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3146, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "7112:15:27", + "nodeType": "VariableDeclaration", + "scope": 3154, + "src": "7096:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3145, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7096:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3148, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "7153:8:27", + "nodeType": "VariableDeclaration", + "scope": 3154, + "src": "7137:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3147, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7137:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3150, + "indexed": true, + "mutability": "mutable", + "name": "destination", + "nameLocation": "7187:11:27", + "nodeType": "VariableDeclaration", + "scope": 3154, + "src": "7171:27:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3149, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7171:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3152, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "7216:6:27", + "nodeType": "VariableDeclaration", + "scope": 3154, + "src": "7208:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3151, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7208:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7086:142:27" + }, + "src": "7062:167:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3155, + "nodeType": "StructuredDocumentation", + "src": "7268:298:27", + "text": " @notice Emitted when tokens are delegated to a provision.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param delegator The address of the delegator\n @param tokens The amount of tokens delegated" + }, + "eventSelector": "eaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf4", + "id": 3165, + "name": "TokensDelegated", + "nameLocation": "7577:15:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3164, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3157, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "7618:15:27", + "nodeType": "VariableDeclaration", + "scope": 3165, + "src": "7602:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3156, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7602:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3159, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "7659:8:27", + "nodeType": "VariableDeclaration", + "scope": 3165, + "src": "7643:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3158, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7643:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3161, + "indexed": true, + "mutability": "mutable", + "name": "delegator", + "nameLocation": "7693:9:27", + "nodeType": "VariableDeclaration", + "scope": 3165, + "src": "7677:25:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3160, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7677:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3163, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "7720:6:27", + "nodeType": "VariableDeclaration", + "scope": 3165, + "src": "7712:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3162, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7712:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7592:140:27" + }, + "src": "7571:162:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3166, + "nodeType": "StructuredDocumentation", + "src": "7739:343:27", + "text": " @notice Emitted when a delegator undelegates tokens from a provision and starts\n thawing them.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param delegator The address of the delegator\n @param tokens The amount of tokens undelegated" + }, + "eventSelector": "50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa", + "id": 3176, + "name": "TokensUndelegated", + "nameLocation": "8093:17:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3175, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3168, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "8136:15:27", + "nodeType": "VariableDeclaration", + "scope": 3176, + "src": "8120:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3167, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8120:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3170, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "8177:8:27", + "nodeType": "VariableDeclaration", + "scope": 3176, + "src": "8161:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3169, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8161:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3172, + "indexed": true, + "mutability": "mutable", + "name": "delegator", + "nameLocation": "8211:9:27", + "nodeType": "VariableDeclaration", + "scope": 3176, + "src": "8195:25:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3171, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8195:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3174, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "8238:6:27", + "nodeType": "VariableDeclaration", + "scope": 3176, + "src": "8230:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3173, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8230:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8110:140:27" + }, + "src": "8087:164:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3177, + "nodeType": "StructuredDocumentation", + "src": "8257:322:27", + "text": " @notice Emitted when a delegator withdraws tokens from a provision after thawing.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param delegator The address of the delegator\n @param tokens The amount of tokens withdrawn" + }, + "eventSelector": "305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e", + "id": 3187, + "name": "DelegatedTokensWithdrawn", + "nameLocation": "8590:24:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3186, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3179, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "8640:15:27", + "nodeType": "VariableDeclaration", + "scope": 3187, + "src": "8624:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3178, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8624:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3181, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "8681:8:27", + "nodeType": "VariableDeclaration", + "scope": 3187, + "src": "8665:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3180, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8665:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3183, + "indexed": true, + "mutability": "mutable", + "name": "delegator", + "nameLocation": "8715:9:27", + "nodeType": "VariableDeclaration", + "scope": 3187, + "src": "8699:25:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3182, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8699:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3185, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "8742:6:27", + "nodeType": "VariableDeclaration", + "scope": 3187, + "src": "8734:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3184, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8734:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8614:140:27" + }, + "src": "8584:171:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3188, + "nodeType": "StructuredDocumentation", + "src": "8761:257:27", + "text": " @notice Emitted when tokens are added to a delegation pool's reserve.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens withdrawn" + }, + "eventSelector": "673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a1511530", + "id": 3196, + "name": "TokensToDelegationPoolAdded", + "nameLocation": "9029:27:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3195, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3190, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "9073:15:27", + "nodeType": "VariableDeclaration", + "scope": 3196, + "src": "9057:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3189, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9057:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3192, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "9106:8:27", + "nodeType": "VariableDeclaration", + "scope": 3196, + "src": "9090:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3191, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9090:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3194, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "9124:6:27", + "nodeType": "VariableDeclaration", + "scope": 3196, + "src": "9116:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3193, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9116:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9056:75:27" + }, + "src": "9023:109:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3197, + "nodeType": "StructuredDocumentation", + "src": "9138:365:27", + "text": " @notice Emitted when a service provider sets delegation fee cuts for a verifier.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments}\n @param feeCut The fee cut set, in PPM" + }, + "eventSelector": "3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c5220", + "id": 3208, + "name": "DelegationFeeCutSet", + "nameLocation": "9514:19:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3207, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3199, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "9559:15:27", + "nodeType": "VariableDeclaration", + "scope": 3208, + "src": "9543:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3198, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9543:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3201, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "9600:8:27", + "nodeType": "VariableDeclaration", + "scope": 3208, + "src": "9584:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3200, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9584:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3204, + "indexed": true, + "mutability": "mutable", + "name": "paymentType", + "nameLocation": "9654:11:27", + "nodeType": "VariableDeclaration", + "scope": 3208, + "src": "9618:47:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 3203, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3202, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "9618:14:27", + "9633:12:27" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "9618:27:27" + }, + "referencedDeclaration": 2166, + "src": "9618:27:27", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3206, + "indexed": false, + "mutability": "mutable", + "name": "feeCut", + "nameLocation": "9683:6:27", + "nodeType": "VariableDeclaration", + "scope": 3208, + "src": "9675:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3205, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9675:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9533:162:27" + }, + "src": "9508:188:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3209, + "nodeType": "StructuredDocumentation", + "src": "9732:535:27", + "text": " @notice Emitted when a thaw request is created.\n @dev Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param owner The address of the owner of the thaw request.\n @param shares The amount of shares being thawed\n @param thawingUntil The timestamp until the stake is thawed\n @param thawRequestId The ID of the thaw request" + }, + "eventSelector": "434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea5", + "id": 3223, + "name": "ThawRequestCreated", + "nameLocation": "10278:18:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3222, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3211, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "10322:15:27", + "nodeType": "VariableDeclaration", + "scope": 3223, + "src": "10306:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3210, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10306:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3213, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "10363:8:27", + "nodeType": "VariableDeclaration", + "scope": 3223, + "src": "10347:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3212, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10347:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3215, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "10397:5:27", + "nodeType": "VariableDeclaration", + "scope": 3223, + "src": "10381:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3214, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10381:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3217, + "indexed": false, + "mutability": "mutable", + "name": "shares", + "nameLocation": "10420:6:27", + "nodeType": "VariableDeclaration", + "scope": 3223, + "src": "10412:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3216, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10412:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3219, + "indexed": false, + "mutability": "mutable", + "name": "thawingUntil", + "nameLocation": "10443:12:27", + "nodeType": "VariableDeclaration", + "scope": 3223, + "src": "10436:19:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3218, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "10436:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3221, + "indexed": false, + "mutability": "mutable", + "name": "thawRequestId", + "nameLocation": "10473:13:27", + "nodeType": "VariableDeclaration", + "scope": 3223, + "src": "10465:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3220, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10465:7:27", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "10296:196:27" + }, + "src": "10272:221:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3224, + "nodeType": "StructuredDocumentation", + "src": "10499:418:27", + "text": " @notice Emitted when a thaw request is fulfilled, meaning the stake is released.\n @param thawRequestId The ID of the thaw request\n @param tokens The amount of tokens being released\n @param shares The amount of shares being released\n @param thawingUntil The timestamp until the stake has thawed\n @param valid Whether the thaw request was valid at the time of fulfillment" + }, + "eventSelector": "be7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb7", + "id": 3236, + "name": "ThawRequestFulfilled", + "nameLocation": "10928:20:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3235, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3226, + "indexed": true, + "mutability": "mutable", + "name": "thawRequestId", + "nameLocation": "10974:13:27", + "nodeType": "VariableDeclaration", + "scope": 3236, + "src": "10958:29:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3225, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10958:7:27", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3228, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "11005:6:27", + "nodeType": "VariableDeclaration", + "scope": 3236, + "src": "10997:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3227, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10997:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3230, + "indexed": false, + "mutability": "mutable", + "name": "shares", + "nameLocation": "11029:6:27", + "nodeType": "VariableDeclaration", + "scope": 3236, + "src": "11021:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3229, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11021:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3232, + "indexed": false, + "mutability": "mutable", + "name": "thawingUntil", + "nameLocation": "11052:12:27", + "nodeType": "VariableDeclaration", + "scope": 3236, + "src": "11045:19:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3231, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "11045:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3234, + "indexed": false, + "mutability": "mutable", + "name": "valid", + "nameLocation": "11079:5:27", + "nodeType": "VariableDeclaration", + "scope": 3236, + "src": "11074:10:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3233, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11074:4:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10948:142:27" + }, + "src": "10922:169:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3237, + "nodeType": "StructuredDocumentation", + "src": "11097:400:27", + "text": " @notice Emitted when a series of thaw requests are fulfilled.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param owner The address of the owner of the thaw requests\n @param thawRequestsFulfilled The number of thaw requests fulfilled\n @param tokens The total amount of tokens being released" + }, + "eventSelector": "9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d5", + "id": 3249, + "name": "ThawRequestsFulfilled", + "nameLocation": "11508:21:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3248, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3239, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "11555:15:27", + "nodeType": "VariableDeclaration", + "scope": 3249, + "src": "11539:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3238, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11539:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3241, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "11596:8:27", + "nodeType": "VariableDeclaration", + "scope": 3249, + "src": "11580:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3240, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11580:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3243, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "11630:5:27", + "nodeType": "VariableDeclaration", + "scope": 3249, + "src": "11614:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3242, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11614:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3245, + "indexed": false, + "mutability": "mutable", + "name": "thawRequestsFulfilled", + "nameLocation": "11653:21:27", + "nodeType": "VariableDeclaration", + "scope": 3249, + "src": "11645:29:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3244, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11645:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3247, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "11692:6:27", + "nodeType": "VariableDeclaration", + "scope": 3249, + "src": "11684:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3246, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11684:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11529:175:27" + }, + "src": "11502:203:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3250, + "nodeType": "StructuredDocumentation", + "src": "11744:166:27", + "text": " @notice Emitted when the global maximum thawing period allowed for provisions is set.\n @param maxThawingPeriod The new maximum thawing period" + }, + "eventSelector": "e8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f", + "id": 3254, + "name": "MaxThawingPeriodSet", + "nameLocation": "11921:19:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3253, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3252, + "indexed": false, + "mutability": "mutable", + "name": "maxThawingPeriod", + "nameLocation": "11948:16:27", + "nodeType": "VariableDeclaration", + "scope": 3254, + "src": "11941:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3251, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "11941:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "11940:25:27" + }, + "src": "11915:51:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3255, + "nodeType": "StructuredDocumentation", + "src": "11972:228:27", + "text": " @notice Emitted when a verifier is allowed or disallowed to be used for locked provisions.\n @param verifier The address of the verifier\n @param allowed Whether the verifier is allowed or disallowed" + }, + "eventSelector": "4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb", + "id": 3261, + "name": "AllowedLockedVerifierSet", + "nameLocation": "12211:24:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3260, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3257, + "indexed": true, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "12252:8:27", + "nodeType": "VariableDeclaration", + "scope": 3261, + "src": "12236:24:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3256, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12236:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3259, + "indexed": false, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "12267:7:27", + "nodeType": "VariableDeclaration", + "scope": 3261, + "src": "12262:12:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3258, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12262:4:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "12235:40:27" + }, + "src": "12205:71:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3262, + "nodeType": "StructuredDocumentation", + "src": "12282:145:27", + "text": " @notice Emitted when the legacy global thawing period is set to zero.\n @dev This marks the end of the transition period." + }, + "eventSelector": "93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d109", + "id": 3264, + "name": "ThawingPeriodCleared", + "nameLocation": "12438:20:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3263, + "nodeType": "ParameterList", + "parameters": [], + "src": "12458:2:27" + }, + "src": "12432:29:27" + }, + { + "anonymous": false, + "documentation": { + "id": 3265, + "nodeType": "StructuredDocumentation", + "src": "12467:157:27", + "text": " @notice Emitted when the delegation slashing global flag is set.\n @param enabled Whether delegation slashing is enabled or disabled." + }, + "eventSelector": "78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194", + "id": 3269, + "name": "DelegationSlashingEnabled", + "nameLocation": "12635:25:27", + "nodeType": "EventDefinition", + "parameters": { + "id": 3268, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3267, + "indexed": false, + "mutability": "mutable", + "name": "enabled", + "nameLocation": "12666:7:27", + "nodeType": "VariableDeclaration", + "scope": 3269, + "src": "12661:12:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3266, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12661:4:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "12660:14:27" + }, + "src": "12629:46:27" + }, + { + "documentation": { + "id": 3270, + "nodeType": "StructuredDocumentation", + "src": "12707:84:27", + "text": " @notice Thrown when operating a zero token amount is not allowed." + }, + "errorSelector": "14549cb6", + "id": 3272, + "name": "HorizonStakingInvalidZeroTokens", + "nameLocation": "12802:31:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3271, + "nodeType": "ParameterList", + "parameters": [], + "src": "12833:2:27" + }, + "src": "12796:40:27" + }, + { + "documentation": { + "id": 3273, + "nodeType": "StructuredDocumentation", + "src": "12842:207:27", + "text": " @notice Thrown when a minimum token amount is required to operate but it's not met.\n @param tokens The actual token amount\n @param minRequired The minimum required token amount" + }, + "errorSelector": "b0f57356", + "id": 3279, + "name": "HorizonStakingInsufficientTokens", + "nameLocation": "13060:32:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3278, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3275, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "13101:6:27", + "nodeType": "VariableDeclaration", + "scope": 3279, + "src": "13093:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3274, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13093:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3277, + "mutability": "mutable", + "name": "minRequired", + "nameLocation": "13117:11:27", + "nodeType": "VariableDeclaration", + "scope": 3279, + "src": "13109:19:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3276, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13109:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13092:37:27" + }, + "src": "13054:76:27" + }, + { + "documentation": { + "id": 3280, + "nodeType": "StructuredDocumentation", + "src": "13136:201:27", + "text": " @notice Thrown when the amount of tokens exceeds the maximum allowed to operate.\n @param tokens The actual token amount\n @param maxTokens The maximum allowed token amount" + }, + "errorSelector": "bd45355c", + "id": 3286, + "name": "HorizonStakingTooManyTokens", + "nameLocation": "13348:27:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3285, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3282, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "13384:6:27", + "nodeType": "VariableDeclaration", + "scope": 3286, + "src": "13376:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3281, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13376:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3284, + "mutability": "mutable", + "name": "maxTokens", + "nameLocation": "13400:9:27", + "nodeType": "VariableDeclaration", + "scope": 3286, + "src": "13392:17:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3283, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13392:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13375:35:27" + }, + "src": "13342:69:27" + }, + { + "documentation": { + "id": 3287, + "nodeType": "StructuredDocumentation", + "src": "13449:201:27", + "text": " @notice Thrown when attempting to operate with a provision that does not exist.\n @param serviceProvider The service provider address\n @param verifier The verifier address" + }, + "errorSelector": "6159d41a", + "id": 3293, + "name": "HorizonStakingInvalidProvision", + "nameLocation": "13661:30:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3292, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3289, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "13700:15:27", + "nodeType": "VariableDeclaration", + "scope": 3293, + "src": "13692:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3288, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13692:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3291, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "13725:8:27", + "nodeType": "VariableDeclaration", + "scope": 3293, + "src": "13717:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3290, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13717:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "13691:43:27" + }, + "src": "13655:80:27" + }, + { + "documentation": { + "id": 3294, + "nodeType": "StructuredDocumentation", + "src": "13741:237:27", + "text": " @notice Thrown when the caller is not authorized to operate on a provision.\n @param caller The caller address\n @param serviceProvider The service provider address\n @param verifier The verifier address" + }, + "errorSelector": "c76b97b0", + "id": 3302, + "name": "HorizonStakingNotAuthorized", + "nameLocation": "13989:27:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3301, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3296, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "14025:15:27", + "nodeType": "VariableDeclaration", + "scope": 3302, + "src": "14017:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3295, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14017:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3298, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "14050:8:27", + "nodeType": "VariableDeclaration", + "scope": 3302, + "src": "14042:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3297, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14042:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3300, + "mutability": "mutable", + "name": "caller", + "nameLocation": "14068:6:27", + "nodeType": "VariableDeclaration", + "scope": 3302, + "src": "14060:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3299, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14060:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "14016:59:27" + }, + "src": "13983:93:27" + }, + { + "documentation": { + "id": 3303, + "nodeType": "StructuredDocumentation", + "src": "14082:163:27", + "text": " @notice Thrown when attempting to create a provision with an invalid maximum verifier cut.\n @param maxVerifierCut The maximum verifier cut" + }, + "errorSelector": "29bff5f5", + "id": 3307, + "name": "HorizonStakingInvalidMaxVerifierCut", + "nameLocation": "14256:35:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3306, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3305, + "mutability": "mutable", + "name": "maxVerifierCut", + "nameLocation": "14299:14:27", + "nodeType": "VariableDeclaration", + "scope": 3307, + "src": "14292:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3304, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "14292:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "14291:23:27" + }, + "src": "14250:65:27" + }, + { + "documentation": { + "id": 3308, + "nodeType": "StructuredDocumentation", + "src": "14321:217:27", + "text": " @notice Thrown when attempting to create a provision with an invalid thawing period.\n @param thawingPeriod The thawing period\n @param maxThawingPeriod The maximum `thawingPeriod` allowed" + }, + "errorSelector": "ee5602e1", + "id": 3314, + "name": "HorizonStakingInvalidThawingPeriod", + "nameLocation": "14549:34:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3313, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3310, + "mutability": "mutable", + "name": "thawingPeriod", + "nameLocation": "14591:13:27", + "nodeType": "VariableDeclaration", + "scope": 3314, + "src": "14584:20:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3309, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "14584:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3312, + "mutability": "mutable", + "name": "maxThawingPeriod", + "nameLocation": "14613:16:27", + "nodeType": "VariableDeclaration", + "scope": 3314, + "src": "14606:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3311, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "14606:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "14583:47:27" + }, + "src": "14543:88:27" + }, + { + "documentation": { + "id": 3315, + "nodeType": "StructuredDocumentation", + "src": "14637:120:27", + "text": " @notice Thrown when attempting to create a provision for a data service that already has a provision." + }, + "errorSelector": "56a8581a", + "id": 3317, + "name": "HorizonStakingProvisionAlreadyExists", + "nameLocation": "14768:36:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3316, + "nodeType": "ParameterList", + "parameters": [], + "src": "14804:2:27" + }, + "src": "14762:45:27" + }, + { + "documentation": { + "id": 3318, + "nodeType": "StructuredDocumentation", + "src": "14841:202:27", + "text": " @notice Thrown when the service provider has insufficient idle stake to operate.\n @param tokens The actual token amount\n @param minTokens The minimum required token amount" + }, + "errorSelector": "ccaf28a9", + "id": 3324, + "name": "HorizonStakingInsufficientIdleStake", + "nameLocation": "15054:35:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3320, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "15098:6:27", + "nodeType": "VariableDeclaration", + "scope": 3324, + "src": "15090:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3319, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15090:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3322, + "mutability": "mutable", + "name": "minTokens", + "nameLocation": "15114:9:27", + "nodeType": "VariableDeclaration", + "scope": 3324, + "src": "15106:17:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3321, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15106:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15089:35:27" + }, + "src": "15048:77:27" + }, + { + "documentation": { + "id": 3325, + "nodeType": "StructuredDocumentation", + "src": "15131:265:27", + "text": " @notice Thrown during the transition period when the service provider has insufficient stake to\n cover their existing legacy allocations.\n @param tokens The actual token amount\n @param minTokens The minimum required token amount" + }, + "errorSelector": "5dd9b9c7", + "id": 3331, + "name": "HorizonStakingInsufficientStakeForLegacyAllocations", + "nameLocation": "15407:51:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3330, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3327, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "15467:6:27", + "nodeType": "VariableDeclaration", + "scope": 3331, + "src": "15459:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3326, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15459:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3329, + "mutability": "mutable", + "name": "minTokens", + "nameLocation": "15483:9:27", + "nodeType": "VariableDeclaration", + "scope": 3331, + "src": "15475:17:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3328, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15475:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15458:35:27" + }, + "src": "15401:93:27" + }, + { + "documentation": { + "id": 3332, + "nodeType": "StructuredDocumentation", + "src": "15533:199:27", + "text": " @notice Thrown when delegation shares obtained are below the expected amount.\n @param shares The actual share amount\n @param minShares The minimum required share amount" + }, + "errorSelector": "5d88e8d1", + "id": 3338, + "name": "HorizonStakingSlippageProtection", + "nameLocation": "15743:32:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3337, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3334, + "mutability": "mutable", + "name": "shares", + "nameLocation": "15784:6:27", + "nodeType": "VariableDeclaration", + "scope": 3338, + "src": "15776:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3333, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15776:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3336, + "mutability": "mutable", + "name": "minShares", + "nameLocation": "15800:9:27", + "nodeType": "VariableDeclaration", + "scope": 3338, + "src": "15792:17:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3335, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15792:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15775:35:27" + }, + "src": "15737:74:27" + }, + { + "documentation": { + "id": 3339, + "nodeType": "StructuredDocumentation", + "src": "15817:84:27", + "text": " @notice Thrown when operating a zero share amount is not allowed." + }, + "errorSelector": "7318ad99", + "id": 3341, + "name": "HorizonStakingInvalidZeroShares", + "nameLocation": "15912:31:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3340, + "nodeType": "ParameterList", + "parameters": [], + "src": "15943:2:27" + }, + "src": "15906:40:27" + }, + { + "documentation": { + "id": 3342, + "nodeType": "StructuredDocumentation", + "src": "15952:205:27", + "text": " @notice Thrown when a minimum share amount is required to operate but it's not met.\n @param shares The actual share amount\n @param minShares The minimum required share amount" + }, + "errorSelector": "ab997935", + "id": 3348, + "name": "HorizonStakingInsufficientShares", + "nameLocation": "16168:32:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3347, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3344, + "mutability": "mutable", + "name": "shares", + "nameLocation": "16209:6:27", + "nodeType": "VariableDeclaration", + "scope": 3348, + "src": "16201:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3343, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16201:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3346, + "mutability": "mutable", + "name": "minShares", + "nameLocation": "16225:9:27", + "nodeType": "VariableDeclaration", + "scope": 3348, + "src": "16217:17:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3345, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16217:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16200:35:27" + }, + "src": "16162:74:27" + }, + { + "documentation": { + "id": 3349, + "nodeType": "StructuredDocumentation", + "src": "16242:211:27", + "text": " @notice Thrown when as a result of slashing delegation pool has no tokens but has shares.\n @param serviceProvider The service provider address\n @param verifier The verifier address" + }, + "errorSelector": "cc276f78", + "id": 3355, + "name": "HorizonStakingInvalidDelegationPoolState", + "nameLocation": "16464:40:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3354, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3351, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "16513:15:27", + "nodeType": "VariableDeclaration", + "scope": 3355, + "src": "16505:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3350, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16505:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3353, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "16538:8:27", + "nodeType": "VariableDeclaration", + "scope": 3355, + "src": "16530:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3352, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16530:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "16504:43:27" + }, + "src": "16458:90:27" + }, + { + "documentation": { + "id": 3356, + "nodeType": "StructuredDocumentation", + "src": "16554:207:27", + "text": " @notice Thrown when attempting to operate with a delegation pool that does not exist.\n @param serviceProvider The service provider address\n @param verifier The verifier address" + }, + "errorSelector": "b6a70b3b", + "id": 3362, + "name": "HorizonStakingInvalidDelegationPool", + "nameLocation": "16772:35:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3361, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3358, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "16816:15:27", + "nodeType": "VariableDeclaration", + "scope": 3362, + "src": "16808:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3357, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16808:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3360, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "16841:8:27", + "nodeType": "VariableDeclaration", + "scope": 3362, + "src": "16833:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3359, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16833:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "16807:43:27" + }, + "src": "16766:85:27" + }, + { + "documentation": { + "id": 3363, + "nodeType": "StructuredDocumentation", + "src": "16857:108:27", + "text": " @notice Thrown when attempting to undelegate with a beneficiary that is the zero address." + }, + "errorSelector": "f6ed23b4", + "id": 3365, + "name": "HorizonStakingInvalidBeneficiaryZeroAddress", + "nameLocation": "16976:43:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3364, + "nodeType": "ParameterList", + "parameters": [], + "src": "17019:2:27" + }, + "src": "16970:52:27" + }, + { + "documentation": { + "id": 3366, + "nodeType": "StructuredDocumentation", + "src": "17028:113:27", + "text": " @notice Thrown when attempting to redelegate with a serivce provider that is the zero address." + }, + "errorSelector": "88d1f59c", + "id": 3368, + "name": "HorizonStakingInvalidServiceProviderZeroAddress", + "nameLocation": "17152:47:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3367, + "nodeType": "ParameterList", + "parameters": [], + "src": "17199:2:27" + }, + "src": "17146:56:27" + }, + { + "documentation": { + "id": 3369, + "nodeType": "StructuredDocumentation", + "src": "17208:105:27", + "text": " @notice Thrown when attempting to redelegate with a verifier that is the zero address." + }, + "errorSelector": "a9626059", + "id": 3371, + "name": "HorizonStakingInvalidVerifierZeroAddress", + "nameLocation": "17324:40:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3370, + "nodeType": "ParameterList", + "parameters": [], + "src": "17364:2:27" + }, + "src": "17318:49:27" + }, + { + "errorSelector": "3f199628", + "id": 3373, + "name": "HorizonStakingNothingThawing", + "nameLocation": "17415:28:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3372, + "nodeType": "ParameterList", + "parameters": [], + "src": "17443:2:27" + }, + "src": "17409:37:27" + }, + { + "errorSelector": "66570a56", + "id": 3375, + "name": "HorizonStakingTooManyThawRequests", + "nameLocation": "17457:33:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3374, + "nodeType": "ParameterList", + "parameters": [], + "src": "17490:2:27" + }, + "src": "17451:42:27" + }, + { + "documentation": { + "id": 3376, + "nodeType": "StructuredDocumentation", + "src": "17525:329:27", + "text": " @notice Thrown during the transition period when attempting to withdraw tokens that are still thawing.\n @dev Note this thawing refers to the global thawing period applied to legacy allocated tokens,\n it does not refer to thaw requests.\n @param until The block number until the stake is locked" + }, + "errorSelector": "e91178d8", + "id": 3380, + "name": "HorizonStakingStillThawing", + "nameLocation": "17865:26:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3378, + "mutability": "mutable", + "name": "until", + "nameLocation": "17900:5:27", + "nodeType": "VariableDeclaration", + "scope": 3380, + "src": "17892:13:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3377, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17892:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17891:15:27" + }, + "src": "17859:48:27" + }, + { + "documentation": { + "id": 3381, + "nodeType": "StructuredDocumentation", + "src": "17913:167:27", + "text": " @notice Thrown when a service provider attempts to operate on verifiers that are not allowed.\n @dev Only applies to stake from locked wallets." + }, + "errorSelector": "00a483dc", + "id": 3385, + "name": "HorizonStakingVerifierNotAllowed", + "nameLocation": "18091:32:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3384, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3383, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "18132:8:27", + "nodeType": "VariableDeclaration", + "scope": 3385, + "src": "18124:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3382, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18124:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "18123:18:27" + }, + "src": "18085:57:27" + }, + { + "documentation": { + "id": 3386, + "nodeType": "StructuredDocumentation", + "src": "18148:103:27", + "text": " @notice Thrown when a service provider attempts to change their own operator access." + }, + "errorSelector": "01230653", + "id": 3388, + "name": "HorizonStakingCallerIsServiceProvider", + "nameLocation": "18262:37:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3387, + "nodeType": "ParameterList", + "parameters": [], + "src": "18299:2:27" + }, + "src": "18256:46:27" + }, + { + "documentation": { + "id": 3389, + "nodeType": "StructuredDocumentation", + "src": "18308:125:27", + "text": " @notice Thrown when trying to set a delegation fee cut that is not valid.\n @param feeCut The fee cut" + }, + "errorSelector": "54125404", + "id": 3393, + "name": "HorizonStakingInvalidDelegationFeeCut", + "nameLocation": "18444:37:27", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3392, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3391, + "mutability": "mutable", + "name": "feeCut", + "nameLocation": "18490:6:27", + "nodeType": "VariableDeclaration", + "scope": 3393, + "src": "18482:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3390, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18482:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18481:16:27" + }, + "src": "18438:60:27" + }, + { + "documentation": { + "id": 3394, + "nodeType": "StructuredDocumentation", + "src": "18528:366:27", + "text": " @notice Deposit tokens on the staking contract.\n @dev Pulls tokens from the caller.\n Requirements:\n - `_tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n Emits a {StakeDeposited} event.\n @param tokens Amount of tokens to stake" + }, + "functionSelector": "a694fc3a", + "id": 3399, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "stake", + "nameLocation": "18908:5:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3397, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3396, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "18922:6:27", + "nodeType": "VariableDeclaration", + "scope": 3399, + "src": "18914:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3395, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18914:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18913:16:27" + }, + "returnParameters": { + "id": 3398, + "nodeType": "ParameterList", + "parameters": [], + "src": "18938:0:27" + }, + "scope": 3695, + "src": "18899:40:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3400, + "nodeType": "StructuredDocumentation", + "src": "18945:469:27", + "text": " @notice Deposit tokens on the service provider stake, on behalf of the service provider.\n @dev Pulls tokens from the caller.\n Requirements:\n - `_tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n Emits a {StakeDeposited} event.\n @param serviceProvider Address of the service provider\n @param tokens Amount of tokens to stake" + }, + "functionSelector": "a2a31722", + "id": 3407, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "stakeTo", + "nameLocation": "19428:7:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3405, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3402, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "19444:15:27", + "nodeType": "VariableDeclaration", + "scope": 3407, + "src": "19436:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3401, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19436:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3404, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "19469:6:27", + "nodeType": "VariableDeclaration", + "scope": 3407, + "src": "19461:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3403, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19461:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "19435:41:27" + }, + "returnParameters": { + "id": 3406, + "nodeType": "ParameterList", + "parameters": [], + "src": "19485:0:27" + }, + "scope": 3695, + "src": "19419:67:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3408, + "nodeType": "StructuredDocumentation", + "src": "19586:624:27", + "text": " @notice Deposit tokens on the service provider stake, on behalf of the service provider,\n provisioned to a specific verifier.\n @dev Requirements:\n - The `serviceProvider` must have previously provisioned stake to `verifier`.\n - `_tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n Emits {StakeDeposited} and {ProvisionIncreased} events.\n @param serviceProvider Address of the service provider\n @param verifier Address of the verifier\n @param tokens Amount of tokens to stake" + }, + "functionSelector": "74612092", + "id": 3417, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "stakeToProvision", + "nameLocation": "20224:16:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3415, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3410, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "20249:15:27", + "nodeType": "VariableDeclaration", + "scope": 3417, + "src": "20241:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3409, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20241:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3412, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "20274:8:27", + "nodeType": "VariableDeclaration", + "scope": 3417, + "src": "20266:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3411, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20266:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3414, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "20292:6:27", + "nodeType": "VariableDeclaration", + "scope": 3417, + "src": "20284:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3413, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20284:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "20240:59:27" + }, + "returnParameters": { + "id": 3416, + "nodeType": "ParameterList", + "parameters": [], + "src": "20308:0:27" + }, + "scope": 3695, + "src": "20215:94:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3418, + "nodeType": "StructuredDocumentation", + "src": "20315:685:27", + "text": " @notice Move idle stake back to the owner's account.\n Stake is removed from the protocol:\n - During the transition period it's locked for a period of time before it can be withdrawn\n by calling {withdraw}.\n - After the transition period it's immediately withdrawn.\n @dev Requirements:\n - `_tokens` cannot be zero.\n - `_serviceProvider` must have enough idle stake to cover the staking amount and any\n legacy allocation.\n Emits a {StakeLocked} event during the transition period.\n Emits a {StakeWithdrawn} event after the transition period.\n @param tokens Amount of tokens to unstake" + }, + "functionSelector": "2e17de78", + "id": 3423, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "unstake", + "nameLocation": "21014:7:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3421, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3420, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "21030:6:27", + "nodeType": "VariableDeclaration", + "scope": 3423, + "src": "21022:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3419, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21022:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "21021:16:27" + }, + "returnParameters": { + "id": 3422, + "nodeType": "ParameterList", + "parameters": [], + "src": "21046:0:27" + }, + "scope": 3695, + "src": "21005:42:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3424, + "nodeType": "StructuredDocumentation", + "src": "21053:314:27", + "text": " @notice Withdraw service provider tokens once the thawing period (initiated by {unstake}) has passed.\n All thawed tokens are withdrawn.\n @dev This is only needed during the transition period while we still have\n a global lock. After that, unstake() will automatically withdraw." + }, + "functionSelector": "3ccfd60b", + "id": 3427, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nameLocation": "21381:8:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3425, + "nodeType": "ParameterList", + "parameters": [], + "src": "21389:2:27" + }, + "returnParameters": { + "id": 3426, + "nodeType": "ParameterList", + "parameters": [], + "src": "21400:0:27" + }, + "scope": 3695, + "src": "21372:29:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3428, + "nodeType": "StructuredDocumentation", + "src": "21407:1242:27", + "text": " @notice Provision stake to a verifier. The tokens will be locked with a thawing period\n and will be slashable by the verifier. This is the main mechanism to provision stake to a data\n service, where the data service is the verifier.\n This function can be called by the service provider or by an operator authorized by the provider\n for this specific verifier.\n @dev Requirements:\n - `tokens` cannot be zero.\n - The `serviceProvider` must have enough idle stake to cover the tokens to provision.\n - `maxVerifierCut` must be a valid PPM.\n - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`.\n Emits a {ProvisionCreated} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\n @param tokens The amount of tokens that will be locked and slashable\n @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\n @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision" + }, + "functionSelector": "010167e5", + "id": 3441, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "provision", + "nameLocation": "22663:9:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3439, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3430, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "22690:15:27", + "nodeType": "VariableDeclaration", + "scope": 3441, + "src": "22682:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3429, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22682:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3432, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "22723:8:27", + "nodeType": "VariableDeclaration", + "scope": 3441, + "src": "22715:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3431, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22715:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3434, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "22749:6:27", + "nodeType": "VariableDeclaration", + "scope": 3441, + "src": "22741:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3433, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22741:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3436, + "mutability": "mutable", + "name": "maxVerifierCut", + "nameLocation": "22772:14:27", + "nodeType": "VariableDeclaration", + "scope": 3441, + "src": "22765:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3435, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "22765:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3438, + "mutability": "mutable", + "name": "thawingPeriod", + "nameLocation": "22803:13:27", + "nodeType": "VariableDeclaration", + "scope": 3441, + "src": "22796:20:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3437, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "22796:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "22672:150:27" + }, + "returnParameters": { + "id": 3440, + "nodeType": "ParameterList", + "parameters": [], + "src": "22831:0:27" + }, + "scope": 3695, + "src": "22654:178:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3442, + "nodeType": "StructuredDocumentation", + "src": "22838:564:27", + "text": " @notice Adds tokens from the service provider's idle stake to a provision\n @dev\n Requirements:\n - The `serviceProvider` must have previously provisioned stake to `verifier`.\n - `tokens` cannot be zero.\n - The `serviceProvider` must have enough idle stake to cover the tokens to add.\n Emits a {ProvisionIncreased} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param tokens The amount of tokens to add to the provision" + }, + "functionSelector": "fecc9cc1", + "id": 3451, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "addToProvision", + "nameLocation": "23416:14:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3449, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3444, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "23439:15:27", + "nodeType": "VariableDeclaration", + "scope": 3451, + "src": "23431:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3443, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23431:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3446, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "23464:8:27", + "nodeType": "VariableDeclaration", + "scope": 3451, + "src": "23456:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3445, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23456:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3448, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "23482:6:27", + "nodeType": "VariableDeclaration", + "scope": 3451, + "src": "23474:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3447, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23474:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "23430:59:27" + }, + "returnParameters": { + "id": 3450, + "nodeType": "ParameterList", + "parameters": [], + "src": "23498:0:27" + }, + "scope": 3695, + "src": "23407:92:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3452, + "nodeType": "StructuredDocumentation", + "src": "23505:929:27", + "text": " @notice Start thawing tokens to remove them from a provision.\n This function can be called by the service provider or by an operator authorized by the provider\n for this specific verifier.\n Note that removing tokens from a provision is a two step process:\n - First the tokens are thawed using this function.\n - Then after the thawing period, the tokens are removed from the provision using {deprovision}\n or {reprovision}.\n @dev Requirements:\n - The provision must have enough tokens available to thaw.\n - `tokens` cannot be zero.\n Emits {ProvisionThawed} and {ThawRequestCreated} events.\n @param serviceProvider The service provider address\n @param verifier The verifier address for which the tokens are provisioned\n @param tokens The amount of tokens to thaw\n @return The ID of the thaw request" + }, + "functionSelector": "f93f1cd0", + "id": 3463, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "thaw", + "nameLocation": "24448:4:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3459, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3454, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "24461:15:27", + "nodeType": "VariableDeclaration", + "scope": 3463, + "src": "24453:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3453, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "24453:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3456, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "24486:8:27", + "nodeType": "VariableDeclaration", + "scope": 3463, + "src": "24478:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3455, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "24478:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3458, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "24504:6:27", + "nodeType": "VariableDeclaration", + "scope": 3463, + "src": "24496:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3457, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24496:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "24452:59:27" + }, + "returnParameters": { + "id": 3462, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3461, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3463, + "src": "24530:7:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3460, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "24530:7:27", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "24529:9:27" + }, + "scope": 3695, + "src": "24439:100:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3464, + "nodeType": "StructuredDocumentation", + "src": "24545:727:27", + "text": " @notice Remove tokens from a provision and move them back to the service provider's idle stake.\n @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n requests in the event that fulfilling all of them results in a gas limit error.\n Requirements:\n - Must have previously initiated a thaw request using {thaw}.\n Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {TokensDeprovisioned} events.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests." + }, + "functionSelector": "21195373", + "id": 3473, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deprovision", + "nameLocation": "25286:11:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3471, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3466, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "25306:15:27", + "nodeType": "VariableDeclaration", + "scope": 3473, + "src": "25298:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3465, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25298:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3468, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "25331:8:27", + "nodeType": "VariableDeclaration", + "scope": 3473, + "src": "25323:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3467, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25323:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3470, + "mutability": "mutable", + "name": "nThawRequests", + "nameLocation": "25349:13:27", + "nodeType": "VariableDeclaration", + "scope": 3473, + "src": "25341:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3469, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25341:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "25297:66:27" + }, + "returnParameters": { + "id": 3472, + "nodeType": "ParameterList", + "parameters": [], + "src": "25372:0:27" + }, + "scope": 3695, + "src": "25277:96:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3474, + "nodeType": "StructuredDocumentation", + "src": "25379:1032:27", + "text": " @notice Move already thawed stake from one provision into another provision\n This function can be called by the service provider or by an operator authorized by the provider\n for the two corresponding verifiers.\n @dev Requirements:\n - Must have previously initiated a thaw request using {thaw}.\n - `tokens` cannot be zero.\n - The `serviceProvider` must have previously provisioned stake to `newVerifier`.\n - The `serviceProvider` must have enough idle stake to cover the tokens to add.\n Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled}, {TokensDeprovisioned} and {ProvisionIncreased}\n events.\n @param serviceProvider The service provider address\n @param oldVerifier The verifier address for which the tokens are currently provisioned\n @param newVerifier The verifier address for which the tokens will be provisioned\n @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests." + }, + "functionSelector": "ba7fb0b4", + "id": 3485, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "reprovision", + "nameLocation": "26425:11:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3483, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3476, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "26454:15:27", + "nodeType": "VariableDeclaration", + "scope": 3485, + "src": "26446:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3475, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26446:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3478, + "mutability": "mutable", + "name": "oldVerifier", + "nameLocation": "26487:11:27", + "nodeType": "VariableDeclaration", + "scope": 3485, + "src": "26479:19:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3477, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26479:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3480, + "mutability": "mutable", + "name": "newVerifier", + "nameLocation": "26516:11:27", + "nodeType": "VariableDeclaration", + "scope": 3485, + "src": "26508:19:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3479, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26508:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3482, + "mutability": "mutable", + "name": "nThawRequests", + "nameLocation": "26545:13:27", + "nodeType": "VariableDeclaration", + "scope": 3485, + "src": "26537:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3481, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26537:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26436:128:27" + }, + "returnParameters": { + "id": 3484, + "nodeType": "ParameterList", + "parameters": [], + "src": "26573:0:27" + }, + "scope": 3695, + "src": "26416:158:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3486, + "nodeType": "StructuredDocumentation", + "src": "26580:810:27", + "text": " @notice Stages a provision parameter update. Note that the change is not effective until the verifier calls\n {acceptProvisionParameters}.\n @dev This two step update process prevents the service provider from changing the parameters\n without the verifier's consent.\n Emits a {ProvisionParametersStaged} event if at least one of the parameters changed.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for\n themselves when slashing\n @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from\n the provision" + }, + "functionSelector": "81e21b56", + "id": 3497, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setProvisionParameters", + "nameLocation": "27404:22:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3495, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3488, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "27444:15:27", + "nodeType": "VariableDeclaration", + "scope": 3497, + "src": "27436:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3487, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27436:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3490, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "27477:8:27", + "nodeType": "VariableDeclaration", + "scope": 3497, + "src": "27469:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3489, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27469:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3492, + "mutability": "mutable", + "name": "maxVerifierCut", + "nameLocation": "27502:14:27", + "nodeType": "VariableDeclaration", + "scope": 3497, + "src": "27495:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3491, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "27495:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3494, + "mutability": "mutable", + "name": "thawingPeriod", + "nameLocation": "27533:13:27", + "nodeType": "VariableDeclaration", + "scope": 3497, + "src": "27526:20:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3493, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "27526:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "27426:126:27" + }, + "returnParameters": { + "id": 3496, + "nodeType": "ParameterList", + "parameters": [], + "src": "27561:0:27" + }, + "scope": 3695, + "src": "27395:167:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3498, + "nodeType": "StructuredDocumentation", + "src": "27568:257:27", + "text": " @notice Accepts a staged provision parameter update.\n @dev Only the provision's verifier can call this function.\n Emits a {ProvisionParametersSet} event.\n @param serviceProvider The service provider address" + }, + "functionSelector": "3a78b732", + "id": 3503, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "acceptProvisionParameters", + "nameLocation": "27839:25:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3501, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3500, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "27873:15:27", + "nodeType": "VariableDeclaration", + "scope": 3503, + "src": "27865:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3499, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27865:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "27864:25:27" + }, + "returnParameters": { + "id": 3502, + "nodeType": "ParameterList", + "parameters": [], + "src": "27898:0:27" + }, + "scope": 3695, + "src": "27830:69:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3504, + "nodeType": "StructuredDocumentation", + "src": "27905:547:27", + "text": " @notice Delegate tokens to a provision.\n @dev Requirements:\n - `tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n - The provision must exist.\n Emits a {TokensDelegated} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param tokens The amount of tokens to delegate\n @param minSharesOut The minimum amount of shares to accept, slippage protection." + }, + "functionSelector": "6230001a", + "id": 3515, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "delegate", + "nameLocation": "28466:8:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3513, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3506, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "28483:15:27", + "nodeType": "VariableDeclaration", + "scope": 3515, + "src": "28475:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3505, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "28475:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3508, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "28508:8:27", + "nodeType": "VariableDeclaration", + "scope": 3515, + "src": "28500:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3507, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "28500:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3510, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "28526:6:27", + "nodeType": "VariableDeclaration", + "scope": 3515, + "src": "28518:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3509, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28518:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3512, + "mutability": "mutable", + "name": "minSharesOut", + "nameLocation": "28542:12:27", + "nodeType": "VariableDeclaration", + "scope": 3515, + "src": "28534:20:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3511, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28534:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "28474:81:27" + }, + "returnParameters": { + "id": 3514, + "nodeType": "ParameterList", + "parameters": [], + "src": "28564:0:27" + }, + "scope": 3695, + "src": "28457:108:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3516, + "nodeType": "StructuredDocumentation", + "src": "28571:632:27", + "text": " @notice Add tokens to a delegation pool without issuing shares.\n Used by data services to pay delegation fees/rewards.\n Delegators SHOULD NOT call this function.\n @dev Requirements:\n - `tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n Emits a {TokensToDelegationPoolAdded} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address for which the tokens are provisioned\n @param tokens The amount of tokens to add to the delegation pool" + }, + "functionSelector": "ca94b0e9", + "id": 3525, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "addToDelegationPool", + "nameLocation": "29217:19:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3523, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3518, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "29245:15:27", + "nodeType": "VariableDeclaration", + "scope": 3525, + "src": "29237:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3517, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "29237:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3520, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "29270:8:27", + "nodeType": "VariableDeclaration", + "scope": 3525, + "src": "29262:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3519, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "29262:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3522, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "29288:6:27", + "nodeType": "VariableDeclaration", + "scope": 3525, + "src": "29280:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3521, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29280:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "29236:59:27" + }, + "returnParameters": { + "id": 3524, + "nodeType": "ParameterList", + "parameters": [], + "src": "29304:0:27" + }, + "scope": 3695, + "src": "29208:97:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3526, + "nodeType": "StructuredDocumentation", + "src": "29311:673:27", + "text": " @notice Undelegate tokens from a provision and start thawing them.\n Note that undelegating tokens from a provision is a two step process:\n - First the tokens are thawed using this function.\n - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}.\n Requirements:\n - `shares` cannot be zero.\n Emits a {TokensUndelegated} and {ThawRequestCreated} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param shares The amount of shares to undelegate\n @return The ID of the thaw request" + }, + "functionSelector": "a02b9426", + "id": 3537, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "undelegate", + "nameLocation": "29998:10:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3533, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3528, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "30017:15:27", + "nodeType": "VariableDeclaration", + "scope": 3537, + "src": "30009:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3527, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "30009:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3530, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "30042:8:27", + "nodeType": "VariableDeclaration", + "scope": 3537, + "src": "30034:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3529, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "30034:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3532, + "mutability": "mutable", + "name": "shares", + "nameLocation": "30060:6:27", + "nodeType": "VariableDeclaration", + "scope": 3537, + "src": "30052:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3531, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30052:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "30008:59:27" + }, + "returnParameters": { + "id": 3536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3535, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3537, + "src": "30086:7:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3534, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "30086:7:27", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "30085:9:27" + }, + "scope": 3695, + "src": "29989:106:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3538, + "nodeType": "StructuredDocumentation", + "src": "30101:904:27", + "text": " @notice Undelegate tokens from a provision and start thawing them.\n The tokens will be withdrawable by the `beneficiary` after the thawing period.\n Note that undelegating tokens from a provision is a two step process:\n - First the tokens are thawed using this function.\n - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}.\n Requirements:\n - `shares` cannot be zero.\n - `beneficiary` cannot be the zero address.\n Emits a {TokensUndelegated} and {ThawRequestCreated} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param shares The amount of shares to undelegate\n @param beneficiary The address where the tokens will be withdrawn after thawing\n @return The ID of the thaw request" + }, + "functionSelector": "162ea5ed", + "id": 3551, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "undelegate", + "nameLocation": "31019:10:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3547, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3540, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "31047:15:27", + "nodeType": "VariableDeclaration", + "scope": 3551, + "src": "31039:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3539, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "31039:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3542, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "31080:8:27", + "nodeType": "VariableDeclaration", + "scope": 3551, + "src": "31072:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3541, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "31072:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3544, + "mutability": "mutable", + "name": "shares", + "nameLocation": "31106:6:27", + "nodeType": "VariableDeclaration", + "scope": 3551, + "src": "31098:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3543, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31098:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3546, + "mutability": "mutable", + "name": "beneficiary", + "nameLocation": "31130:11:27", + "nodeType": "VariableDeclaration", + "scope": 3551, + "src": "31122:19:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3545, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "31122:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "31029:118:27" + }, + "returnParameters": { + "id": 3550, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3549, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3551, + "src": "31166:7:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3548, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "31166:7:27", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "31165:9:27" + }, + "scope": 3695, + "src": "31010:165:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3552, + "nodeType": "StructuredDocumentation", + "src": "31181:878:27", + "text": " @notice Withdraw undelegated tokens from a provision after thawing.\n @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n requests in the event that fulfilling all of them results in a gas limit error.\n @dev If the delegation pool was completely slashed before withdrawing, calling this function will fulfill\n the thaw requests with an amount equal to zero.\n Requirements:\n - Must have previously initiated a thaw request using {undelegate}.\n Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests." + }, + "functionSelector": "3993d849", + "id": 3561, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdrawDelegated", + "nameLocation": "32073:17:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3559, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3554, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "32099:15:27", + "nodeType": "VariableDeclaration", + "scope": 3561, + "src": "32091:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3553, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "32091:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3556, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "32124:8:27", + "nodeType": "VariableDeclaration", + "scope": 3561, + "src": "32116:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3555, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "32116:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3558, + "mutability": "mutable", + "name": "nThawRequests", + "nameLocation": "32142:13:27", + "nodeType": "VariableDeclaration", + "scope": 3561, + "src": "32134:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3557, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32134:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "32090:66:27" + }, + "returnParameters": { + "id": 3560, + "nodeType": "ParameterList", + "parameters": [], + "src": "32165:0:27" + }, + "scope": 3695, + "src": "32064:102:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3562, + "nodeType": "StructuredDocumentation", + "src": "32172:1169:27", + "text": " @notice Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`.\n @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n requests in the event that fulfilling all of them results in a gas limit error.\n Requirements:\n - Must have previously initiated a thaw request using {undelegate}.\n - `newServiceProvider` and `newVerifier` must not be the zero address.\n - `newServiceProvider` must have previously provisioned stake to `newVerifier`.\n Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\n @param oldServiceProvider The old service provider address\n @param oldVerifier The old verifier address\n @param newServiceProvider The address of a new service provider\n @param newVerifier The address of a new verifier\n @param minSharesForNewProvider The minimum amount of shares to accept for the new service provider\n @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests." + }, + "functionSelector": "f64b3598", + "id": 3577, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "redelegate", + "nameLocation": "33355:10:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3575, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3564, + "mutability": "mutable", + "name": "oldServiceProvider", + "nameLocation": "33383:18:27", + "nodeType": "VariableDeclaration", + "scope": 3577, + "src": "33375:26:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3563, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "33375:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3566, + "mutability": "mutable", + "name": "oldVerifier", + "nameLocation": "33419:11:27", + "nodeType": "VariableDeclaration", + "scope": 3577, + "src": "33411:19:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3565, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "33411:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3568, + "mutability": "mutable", + "name": "newServiceProvider", + "nameLocation": "33448:18:27", + "nodeType": "VariableDeclaration", + "scope": 3577, + "src": "33440:26:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3567, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "33440:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3570, + "mutability": "mutable", + "name": "newVerifier", + "nameLocation": "33484:11:27", + "nodeType": "VariableDeclaration", + "scope": 3577, + "src": "33476:19:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3569, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "33476:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3572, + "mutability": "mutable", + "name": "minSharesForNewProvider", + "nameLocation": "33513:23:27", + "nodeType": "VariableDeclaration", + "scope": 3577, + "src": "33505:31:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3571, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33505:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3574, + "mutability": "mutable", + "name": "nThawRequests", + "nameLocation": "33554:13:27", + "nodeType": "VariableDeclaration", + "scope": 3577, + "src": "33546:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3573, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33546:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "33365:208:27" + }, + "returnParameters": { + "id": 3576, + "nodeType": "ParameterList", + "parameters": [], + "src": "33582:0:27" + }, + "scope": 3695, + "src": "33346:237:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3578, + "nodeType": "StructuredDocumentation", + "src": "33589:389:27", + "text": " @notice Set the fee cut for a verifier on a specific payment type.\n @dev Emits a {DelegationFeeCutSet} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments}\n @param feeCut The fee cut to set, in PPM" + }, + "functionSelector": "42c51693", + "id": 3590, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setDelegationFeeCut", + "nameLocation": "33992:19:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3588, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3580, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "34029:15:27", + "nodeType": "VariableDeclaration", + "scope": 3590, + "src": "34021:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3579, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "34021:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3582, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "34062:8:27", + "nodeType": "VariableDeclaration", + "scope": 3590, + "src": "34054:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3581, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "34054:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3585, + "mutability": "mutable", + "name": "paymentType", + "nameLocation": "34108:11:27", + "nodeType": "VariableDeclaration", + "scope": 3590, + "src": "34080:39:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 3584, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3583, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "34080:14:27", + "34095:12:27" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "34080:27:27" + }, + "referencedDeclaration": 2166, + "src": "34080:27:27", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3587, + "mutability": "mutable", + "name": "feeCut", + "nameLocation": "34137:6:27", + "nodeType": "VariableDeclaration", + "scope": 3590, + "src": "34129:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3586, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "34129:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "34011:138:27" + }, + "returnParameters": { + "id": 3589, + "nodeType": "ParameterList", + "parameters": [], + "src": "34158:0:27" + }, + "scope": 3695, + "src": "33983:176:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3591, + "nodeType": "StructuredDocumentation", + "src": "34165:410:27", + "text": " @notice Delegate tokens to the subgraph data service provision.\n This function is for backwards compatibility with the legacy staking contract.\n It only allows delegating to the subgraph data service and DOES NOT have slippage protection.\n @dev See {delegate}.\n @param serviceProvider The service provider address\n @param tokens The amount of tokens to delegate" + }, + "functionSelector": "026e402b", + "id": 3598, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "delegate", + "nameLocation": "34589:8:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3596, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3593, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "34606:15:27", + "nodeType": "VariableDeclaration", + "scope": 3598, + "src": "34598:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3592, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "34598:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3595, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "34631:6:27", + "nodeType": "VariableDeclaration", + "scope": 3598, + "src": "34623:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3594, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "34623:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "34597:41:27" + }, + "returnParameters": { + "id": 3597, + "nodeType": "ParameterList", + "parameters": [], + "src": "34647:0:27" + }, + "scope": 3695, + "src": "34580:68:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3599, + "nodeType": "StructuredDocumentation", + "src": "34654:407:27", + "text": " @notice Undelegate tokens from the subgraph data service provision and start thawing them.\n This function is for backwards compatibility with the legacy staking contract.\n It only allows undelegating from the subgraph data service.\n @dev See {undelegate}.\n @param serviceProvider The service provider address\n @param shares The amount of shares to undelegate" + }, + "functionSelector": "4d99dd16", + "id": 3606, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "undelegate", + "nameLocation": "35075:10:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3604, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3601, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "35094:15:27", + "nodeType": "VariableDeclaration", + "scope": 3606, + "src": "35086:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3600, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "35086:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3603, + "mutability": "mutable", + "name": "shares", + "nameLocation": "35119:6:27", + "nodeType": "VariableDeclaration", + "scope": 3606, + "src": "35111:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3602, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35111:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "35085:41:27" + }, + "returnParameters": { + "id": 3605, + "nodeType": "ParameterList", + "parameters": [], + "src": "35135:0:27" + }, + "scope": 3695, + "src": "35066:70:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3607, + "nodeType": "StructuredDocumentation", + "src": "35142:546:27", + "text": " @notice Withdraw undelegated tokens from the subgraph data service provision after thawing.\n This function is for backwards compatibility with the legacy staking contract.\n It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in\n case the caller opts for re-delegating.\n @dev See {delegate}.\n @param serviceProvider The service provider address\n @param newServiceProvider The address of a new service provider, if the delegator wants to re-delegate" + }, + "functionSelector": "51a60b02", + "id": 3614, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdrawDelegated", + "nameLocation": "35702:17:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3612, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3609, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "35728:15:27", + "nodeType": "VariableDeclaration", + "scope": 3614, + "src": "35720:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3608, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "35720:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3611, + "mutability": "mutable", + "name": "newServiceProvider", + "nameLocation": "35753:18:27", + "nodeType": "VariableDeclaration", + "scope": 3614, + "src": "35745:26:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3610, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "35745:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "35719:53:27" + }, + "returnParameters": { + "id": 3613, + "nodeType": "ParameterList", + "parameters": [], + "src": "35781:0:27" + }, + "scope": 3695, + "src": "35693:89:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3615, + "nodeType": "StructuredDocumentation", + "src": "35788:1190:27", + "text": " @notice Slash a service provider. This can only be called by a verifier to which\n the provider has provisioned stake, and up to the amount of tokens they have provisioned.\n If the service provider's stake is not enough, the associated delegation pool might be slashed\n depending on the value of the global delegation slashing flag.\n Part of the slashed tokens are sent to the `verifierDestination` as a reward.\n @dev Requirements:\n - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider.\n - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut.\n Emits a {ProvisionSlashed} and {VerifierTokensSent} events.\n Emits a {DelegationSlashed} or {DelegationSlashingSkipped} event depending on the global delegation slashing\n flag.\n @param serviceProvider The service provider to slash\n @param tokens The amount of tokens to slash\n @param tokensVerifier The amount of tokens to transfer instead of burning\n @param verifierDestination The address to transfer the verifier cut to" + }, + "functionSelector": "e76fede6", + "id": 3626, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "slash", + "nameLocation": "36992:5:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3624, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3617, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "37015:15:27", + "nodeType": "VariableDeclaration", + "scope": 3626, + "src": "37007:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3616, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "37007:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3619, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "37048:6:27", + "nodeType": "VariableDeclaration", + "scope": 3626, + "src": "37040:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3618, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37040:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3621, + "mutability": "mutable", + "name": "tokensVerifier", + "nameLocation": "37072:14:27", + "nodeType": "VariableDeclaration", + "scope": 3626, + "src": "37064:22:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3620, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37064:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3623, + "mutability": "mutable", + "name": "verifierDestination", + "nameLocation": "37104:19:27", + "nodeType": "VariableDeclaration", + "scope": 3626, + "src": "37096:27:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3622, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "37096:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "36997:132:27" + }, + "returnParameters": { + "id": 3625, + "nodeType": "ParameterList", + "parameters": [], + "src": "37138:0:27" + }, + "scope": 3695, + "src": "36983:156:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3627, + "nodeType": "StructuredDocumentation", + "src": "37145:769:27", + "text": " @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets).\n @dev See {provision}.\n Additional requirements:\n - The `verifier` must be allowed to be used for locked provisions.\n @param serviceProvider The service provider address\n @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\n @param tokens The amount of tokens that will be locked and slashable\n @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\n @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision" + }, + "functionSelector": "82d66cb8", + "id": 3640, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "provisionLocked", + "nameLocation": "37928:15:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3638, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3629, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "37961:15:27", + "nodeType": "VariableDeclaration", + "scope": 3640, + "src": "37953:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3628, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "37953:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3631, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "37994:8:27", + "nodeType": "VariableDeclaration", + "scope": 3640, + "src": "37986:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3630, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "37986:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3633, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "38020:6:27", + "nodeType": "VariableDeclaration", + "scope": 3640, + "src": "38012:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3632, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "38012:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3635, + "mutability": "mutable", + "name": "maxVerifierCut", + "nameLocation": "38043:14:27", + "nodeType": "VariableDeclaration", + "scope": 3640, + "src": "38036:21:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3634, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "38036:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3637, + "mutability": "mutable", + "name": "thawingPeriod", + "nameLocation": "38074:13:27", + "nodeType": "VariableDeclaration", + "scope": 3640, + "src": "38067:20:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3636, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "38067:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "37943:150:27" + }, + "returnParameters": { + "id": 3639, + "nodeType": "ParameterList", + "parameters": [], + "src": "38102:0:27" + }, + "scope": 3695, + "src": "37919:184:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3641, + "nodeType": "StructuredDocumentation", + "src": "38109:474:27", + "text": " @notice Authorize or unauthorize an address to be an operator for the caller on a verifier.\n @dev See {setOperator}.\n Additional requirements:\n - The `verifier` must be allowed to be used for locked provisions.\n @param verifier The verifier / data service on which they'll be allowed to operate\n @param operator Address to authorize or unauthorize\n @param allowed Whether the operator is authorized or not" + }, + "functionSelector": "ad4d35b5", + "id": 3650, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setOperatorLocked", + "nameLocation": "38597:17:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3648, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3643, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "38623:8:27", + "nodeType": "VariableDeclaration", + "scope": 3650, + "src": "38615:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3642, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "38615:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3645, + "mutability": "mutable", + "name": "operator", + "nameLocation": "38641:8:27", + "nodeType": "VariableDeclaration", + "scope": 3650, + "src": "38633:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3644, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "38633:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3647, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "38656:7:27", + "nodeType": "VariableDeclaration", + "scope": 3650, + "src": "38651:12:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3646, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "38651:4:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "38614:50:27" + }, + "returnParameters": { + "id": 3649, + "nodeType": "ParameterList", + "parameters": [], + "src": "38673:0:27" + }, + "scope": 3695, + "src": "38588:86:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3651, + "nodeType": "StructuredDocumentation", + "src": "38680:449:27", + "text": " @notice Sets a verifier as a globally allowed verifier for locked provisions.\n @dev This function can only be called by the contract governor, it's used to maintain\n a whitelist of verifiers that do not allow the stake from a locked wallet to escape the lock.\n @dev Emits a {AllowedLockedVerifierSet} event.\n @param verifier The verifier address\n @param allowed Whether the verifier is allowed or not" + }, + "functionSelector": "4ca7ac22", + "id": 3658, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setAllowedLockedVerifier", + "nameLocation": "39143:24:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3656, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3653, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "39176:8:27", + "nodeType": "VariableDeclaration", + "scope": 3658, + "src": "39168:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3652, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "39168:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3655, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "39191:7:27", + "nodeType": "VariableDeclaration", + "scope": 3658, + "src": "39186:12:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3654, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "39186:4:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "39167:32:27" + }, + "returnParameters": { + "id": 3657, + "nodeType": "ParameterList", + "parameters": [], + "src": "39208:0:27" + }, + "scope": 3695, + "src": "39134:75:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3659, + "nodeType": "StructuredDocumentation", + "src": "39215:146:27", + "text": " @notice Set the global delegation slashing flag to true.\n @dev This function can only be called by the contract governor." + }, + "functionSelector": "ef58bd67", + "id": 3662, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setDelegationSlashingEnabled", + "nameLocation": "39375:28:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3660, + "nodeType": "ParameterList", + "parameters": [], + "src": "39403:2:27" + }, + "returnParameters": { + "id": 3661, + "nodeType": "ParameterList", + "parameters": [], + "src": "39414:0:27" + }, + "scope": 3695, + "src": "39366:49:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3663, + "nodeType": "StructuredDocumentation", + "src": "39421:293:27", + "text": " @notice Clear the legacy global thawing period.\n This signifies the end of the transition period, after which no legacy allocations should be left.\n @dev This function can only be called by the contract governor.\n @dev Emits a {ThawingPeriodCleared} event." + }, + "functionSelector": "e473522a", + "id": 3666, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "clearThawingPeriod", + "nameLocation": "39728:18:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3664, + "nodeType": "ParameterList", + "parameters": [], + "src": "39746:2:27" + }, + "returnParameters": { + "id": 3665, + "nodeType": "ParameterList", + "parameters": [], + "src": "39757:0:27" + }, + "scope": 3695, + "src": "39719:39:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3667, + "nodeType": "StructuredDocumentation", + "src": "39764:163:27", + "text": " @notice Sets the global maximum thawing period allowed for provisions.\n @param maxThawingPeriod The new maximum thawing period, in seconds" + }, + "functionSelector": "259bc435", + "id": 3672, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setMaxThawingPeriod", + "nameLocation": "39941:19:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3670, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3669, + "mutability": "mutable", + "name": "maxThawingPeriod", + "nameLocation": "39968:16:27", + "nodeType": "VariableDeclaration", + "scope": 3672, + "src": "39961:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3668, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "39961:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "39960:25:27" + }, + "returnParameters": { + "id": 3671, + "nodeType": "ParameterList", + "parameters": [], + "src": "39994:0:27" + }, + "scope": 3695, + "src": "39932:63:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3673, + "nodeType": "StructuredDocumentation", + "src": "40001:368:27", + "text": " @notice Authorize or unauthorize an address to be an operator for the caller on a data service.\n @dev Emits a {OperatorSet} event.\n @param verifier The verifier / data service on which they'll be allowed to operate\n @param operator Address to authorize or unauthorize\n @param allowed Whether the operator is authorized or not" + }, + "functionSelector": "bc735d90", + "id": 3682, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setOperator", + "nameLocation": "40383:11:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3680, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3675, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "40403:8:27", + "nodeType": "VariableDeclaration", + "scope": 3682, + "src": "40395:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3674, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "40395:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3677, + "mutability": "mutable", + "name": "operator", + "nameLocation": "40421:8:27", + "nodeType": "VariableDeclaration", + "scope": 3682, + "src": "40413:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3676, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "40413:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3679, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "40436:7:27", + "nodeType": "VariableDeclaration", + "scope": 3682, + "src": "40431:12:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3678, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "40431:4:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "40394:50:27" + }, + "returnParameters": { + "id": 3681, + "nodeType": "ParameterList", + "parameters": [], + "src": "40453:0:27" + }, + "scope": 3695, + "src": "40374:80:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3683, + "nodeType": "StructuredDocumentation", + "src": "40460:402:27", + "text": " @notice Check if an operator is authorized for the caller on a specific verifier / data service.\n @param serviceProvider The service provider on behalf of whom they're claiming to act\n @param verifier The verifier / data service on which they're claiming to act\n @param operator The address to check for auth\n @return Whether the operator is authorized or not" + }, + "functionSelector": "7c145cc7", + "id": 3694, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isAuthorized", + "nameLocation": "40876:12:27", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3690, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3685, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "40897:15:27", + "nodeType": "VariableDeclaration", + "scope": 3694, + "src": "40889:23:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3684, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "40889:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3687, + "mutability": "mutable", + "name": "verifier", + "nameLocation": "40922:8:27", + "nodeType": "VariableDeclaration", + "scope": 3694, + "src": "40914:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3686, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "40914:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3689, + "mutability": "mutable", + "name": "operator", + "nameLocation": "40940:8:27", + "nodeType": "VariableDeclaration", + "scope": 3694, + "src": "40932:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3688, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "40932:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "40888:61:27" + }, + "returnParameters": { + "id": 3693, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3692, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3694, + "src": "40973:4:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3691, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "40973:4:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "40972:6:27" + }, + "scope": 3695, + "src": "40867:112:27", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 3696, + "src": "747:40234:27", + "usedErrors": [ + 3272, + 3279, + 3286, + 3293, + 3302, + 3307, + 3314, + 3317, + 3324, + 3331, + 3338, + 3341, + 3348, + 3355, + 3362, + 3365, + 3368, + 3371, + 3373, + 3375, + 3380, + 3385, + 3388, + 3393 + ], + "usedEvents": [ + 3036, + 3043, + 3056, + 3065, + 3074, + 3083, + 3094, + 3105, + 3116, + 3125, + 3134, + 3143, + 3154, + 3165, + 3176, + 3187, + 3196, + 3208, + 3223, + 3236, + 3249, + 3254, + 3261, + 3264, + 3269 + ] + } + ], + "src": "46:40936:27" + }, + "id": 27 + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", + "exportedSymbols": { + "IHorizonStakingTypes": [ + 3796 + ] + }, + "id": 3797, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3697, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:28" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IHorizonStakingTypes", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 3698, + "nodeType": "StructuredDocumentation", + "src": "155:412:28", + "text": " @title Defines the data types used in the Horizon staking contract\n @dev In order to preserve storage compatibility some data structures keep deprecated fields.\n These structures have then two representations, an internal one used by the contract storage and a public one.\n Getter functions should retrieve internal representations, remove deprecated fields and return the public representation." + }, + "fullyImplemented": true, + "id": 3796, + "linearizedBaseContracts": [ + 3796 + ], + "name": "IHorizonStakingTypes", + "nameLocation": "578:20:28", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IHorizonStakingTypes.Provision", + "documentation": { + "id": 3699, + "nodeType": "StructuredDocumentation", + "src": "605:180:28", + "text": " @notice Represents stake assigned to a specific verifier/data service.\n Provisioned stake is locked and can be used as economic security by a data service." + }, + "id": 3718, + "members": [ + { + "constant": false, + "id": 3701, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "913:6:28", + "nodeType": "VariableDeclaration", + "scope": 3718, + "src": "905:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3700, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "905:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3703, + "mutability": "mutable", + "name": "tokensThawing", + "nameLocation": "1031:13:28", + "nodeType": "VariableDeclaration", + "scope": 3718, + "src": "1023:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3702, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1023:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3705, + "mutability": "mutable", + "name": "sharesThawing", + "nameLocation": "1112:13:28", + "nodeType": "VariableDeclaration", + "scope": 3718, + "src": "1104:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3704, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1104:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3707, + "mutability": "mutable", + "name": "maxVerifierCut", + "nameLocation": "1266:14:28", + "nodeType": "VariableDeclaration", + "scope": 3718, + "src": "1259:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3706, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1259:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3709, + "mutability": "mutable", + "name": "thawingPeriod", + "nameLocation": "1366:13:28", + "nodeType": "VariableDeclaration", + "scope": 3718, + "src": "1359:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3708, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1359:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3711, + "mutability": "mutable", + "name": "createdAt", + "nameLocation": "1448:9:28", + "nodeType": "VariableDeclaration", + "scope": 3718, + "src": "1441:16:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3710, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1441:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3713, + "mutability": "mutable", + "name": "maxVerifierCutPending", + "nameLocation": "1575:21:28", + "nodeType": "VariableDeclaration", + "scope": 3718, + "src": "1568:28:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3712, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1568:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3715, + "mutability": "mutable", + "name": "thawingPeriodPending", + "nameLocation": "1713:20:28", + "nodeType": "VariableDeclaration", + "scope": 3718, + "src": "1706:27:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3714, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1706:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3717, + "mutability": "mutable", + "name": "thawingNonce", + "nameLocation": "1843:12:28", + "nodeType": "VariableDeclaration", + "scope": 3718, + "src": "1835:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3716, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1835:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Provision", + "nameLocation": "797:9:28", + "nodeType": "StructDefinition", + "scope": 3796, + "src": "790:1072:28", + "visibility": "public" + }, + { + "canonicalName": "IHorizonStakingTypes.ServiceProvider", + "documentation": { + "id": 3719, + "nodeType": "StructuredDocumentation", + "src": "1868:151:28", + "text": " @notice Public representation of a service provider.\n @dev See {ServiceProviderInternal} for the actual storage representation" + }, + "id": 3724, + "members": [ + { + "constant": false, + "id": 3721, + "mutability": "mutable", + "name": "tokensStaked", + "nameLocation": "2176:12:28", + "nodeType": "VariableDeclaration", + "scope": 3724, + "src": "2168:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3720, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2168:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3723, + "mutability": "mutable", + "name": "tokensProvisioned", + "nameLocation": "2291:17:28", + "nodeType": "VariableDeclaration", + "scope": 3724, + "src": "2283:25:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3722, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2283:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "ServiceProvider", + "nameLocation": "2031:15:28", + "nodeType": "StructDefinition", + "scope": 3796, + "src": "2024:291:28", + "visibility": "public" + }, + { + "canonicalName": "IHorizonStakingTypes.ServiceProviderInternal", + "documentation": { + "id": 3725, + "nodeType": "StructuredDocumentation", + "src": "2321:176:28", + "text": " @notice Internal representation of a service provider.\n @dev It contains deprecated fields from the `Indexer` struct to maintain storage compatibility." + }, + "id": 3736, + "members": [ + { + "constant": false, + "id": 3727, + "mutability": "mutable", + "name": "tokensStaked", + "nameLocation": "2662:12:28", + "nodeType": "VariableDeclaration", + "scope": 3736, + "src": "2654:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3726, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2654:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3729, + "mutability": "mutable", + "name": "__DEPRECATED_tokensAllocated", + "nameLocation": "2743:28:28", + "nodeType": "VariableDeclaration", + "scope": 3736, + "src": "2735:36:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3728, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2735:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3731, + "mutability": "mutable", + "name": "__DEPRECATED_tokensLocked", + "nameLocation": "2917:25:28", + "nodeType": "VariableDeclaration", + "scope": 3736, + "src": "2909:33:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3730, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2909:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3733, + "mutability": "mutable", + "name": "__DEPRECATED_tokensLockedUntil", + "nameLocation": "3026:30:28", + "nodeType": "VariableDeclaration", + "scope": 3736, + "src": "3018:38:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3732, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3018:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3735, + "mutability": "mutable", + "name": "tokensProvisioned", + "nameLocation": "3159:17:28", + "nodeType": "VariableDeclaration", + "scope": 3736, + "src": "3151:25:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3734, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3151:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "ServiceProviderInternal", + "nameLocation": "2509:23:28", + "nodeType": "StructDefinition", + "scope": 3796, + "src": "2502:681:28", + "visibility": "public" + }, + { + "canonicalName": "IHorizonStakingTypes.DelegationPool", + "documentation": { + "id": 3737, + "nodeType": "StructuredDocumentation", + "src": "3189:149:28", + "text": " @notice Public representation of a delegation pool.\n @dev See {DelegationPoolInternal} for the actual storage representation" + }, + "id": 3748, + "members": [ + { + "constant": false, + "id": 3739, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "3424:6:28", + "nodeType": "VariableDeclaration", + "scope": 3748, + "src": "3416:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3738, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3416:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3741, + "mutability": "mutable", + "name": "shares", + "nameLocation": "3491:6:28", + "nodeType": "VariableDeclaration", + "scope": 3748, + "src": "3483:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3740, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3483:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3743, + "mutability": "mutable", + "name": "tokensThawing", + "nameLocation": "3553:13:28", + "nodeType": "VariableDeclaration", + "scope": 3748, + "src": "3545:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3742, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3545:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3745, + "mutability": "mutable", + "name": "sharesThawing", + "nameLocation": "3634:13:28", + "nodeType": "VariableDeclaration", + "scope": 3748, + "src": "3626:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3744, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3626:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3747, + "mutability": "mutable", + "name": "thawingNonce", + "nameLocation": "3757:12:28", + "nodeType": "VariableDeclaration", + "scope": 3748, + "src": "3749:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3746, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3749:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "DelegationPool", + "nameLocation": "3350:14:28", + "nodeType": "StructDefinition", + "scope": 3796, + "src": "3343:433:28", + "visibility": "public" + }, + { + "canonicalName": "IHorizonStakingTypes.DelegationPoolInternal", + "documentation": { + "id": 3749, + "nodeType": "StructuredDocumentation", + "src": "3782:213:28", + "text": " @notice Internal representation of a delegation pool.\n @dev It contains deprecated fields from the previous version of the `DelegationPool` struct\n to maintain storage compatibility." + }, + "id": 3773, + "members": [ + { + "constant": false, + "id": 3751, + "mutability": "mutable", + "name": "__DEPRECATED_cooldownBlocks", + "nameLocation": "4147:27:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "4140:34:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3750, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4140:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3753, + "mutability": "mutable", + "name": "__DEPRECATED_indexingRewardCut", + "nameLocation": "4279:30:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "4272:37:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3752, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4272:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3755, + "mutability": "mutable", + "name": "__DEPRECATED_queryFeeCut", + "nameLocation": "4408:24:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "4401:31:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 3754, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4401:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3757, + "mutability": "mutable", + "name": "__DEPRECATED_updatedAtBlock", + "nameLocation": "4529:27:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "4521:35:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3756, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4521:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3759, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "4615:6:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "4607:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3758, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4607:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3761, + "mutability": "mutable", + "name": "shares", + "nameLocation": "4682:6:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "4674:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3760, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4674:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3766, + "mutability": "mutable", + "name": "delegators", + "nameLocation": "4801:10:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "4741:70:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DelegationInternal_$3785_storage_$", + "typeString": "mapping(address => struct IHorizonStakingTypes.DelegationInternal)" + }, + "typeName": { + "id": 3765, + "keyName": "delegator", + "keyNameLocation": "4757:9:28", + "keyType": { + "id": 3762, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4749:7:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "4741:59:28", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DelegationInternal_$3785_storage_$", + "typeString": "mapping(address => struct IHorizonStakingTypes.DelegationInternal)" + }, + "valueName": "delegation", + "valueNameLocation": "4789:10:28", + "valueType": { + "id": 3764, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3763, + "name": "DelegationInternal", + "nameLocations": [ + "4770:18:28" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3785, + "src": "4770:18:28" + }, + "referencedDeclaration": 3785, + "src": "4770:18:28", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DelegationInternal_$3785_storage_ptr", + "typeString": "struct IHorizonStakingTypes.DelegationInternal" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3768, + "mutability": "mutable", + "name": "tokensThawing", + "nameLocation": "4867:13:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "4859:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3767, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4859:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3770, + "mutability": "mutable", + "name": "sharesThawing", + "nameLocation": "4948:13:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "4940:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3769, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4940:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3772, + "mutability": "mutable", + "name": "thawingNonce", + "nameLocation": "5071:12:28", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "5063:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3771, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5063:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "DelegationPoolInternal", + "nameLocation": "4007:22:28", + "nodeType": "StructDefinition", + "scope": 3796, + "src": "4000:1090:28", + "visibility": "public" + }, + { + "canonicalName": "IHorizonStakingTypes.Delegation", + "documentation": { + "id": 3774, + "nodeType": "StructuredDocumentation", + "src": "5096:146:28", + "text": " @notice Public representation of delegation details.\n @dev See {DelegationInternal} for the actual storage representation" + }, + "id": 3777, + "members": [ + { + "constant": false, + "id": 3776, + "mutability": "mutable", + "name": "shares", + "nameLocation": "5283:6:28", + "nodeType": "VariableDeclaration", + "scope": 3777, + "src": "5275:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3775, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5275:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Delegation", + "nameLocation": "5254:10:28", + "nodeType": "StructDefinition", + "scope": 3796, + "src": "5247:92:28", + "visibility": "public" + }, + { + "canonicalName": "IHorizonStakingTypes.DelegationInternal", + "documentation": { + "id": 3778, + "nodeType": "StructuredDocumentation", + "src": "5345:210:28", + "text": " @notice Internal representation of delegation details.\n @dev It contains deprecated fields from the previous version of the `Delegation` struct\n to maintain storage compatibility." + }, + "id": 3785, + "members": [ + { + "constant": false, + "id": 3780, + "mutability": "mutable", + "name": "shares", + "nameLocation": "5657:6:28", + "nodeType": "VariableDeclaration", + "scope": 3785, + "src": "5649:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3779, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5649:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3782, + "mutability": "mutable", + "name": "__DEPRECATED_tokensLocked", + "nameLocation": "5736:25:28", + "nodeType": "VariableDeclaration", + "scope": 3785, + "src": "5728:33:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3781, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5728:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3784, + "mutability": "mutable", + "name": "__DEPRECATED_tokensLockedUntil", + "nameLocation": "5845:30:28", + "nodeType": "VariableDeclaration", + "scope": 3785, + "src": "5837:38:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3783, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5837:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "DelegationInternal", + "nameLocation": "5567:18:28", + "nodeType": "StructDefinition", + "scope": 3796, + "src": "5560:322:28", + "visibility": "public" + }, + { + "canonicalName": "IHorizonStakingTypes.ThawRequest", + "documentation": { + "id": 3786, + "nodeType": "StructuredDocumentation", + "src": "5888:185:28", + "text": " @notice Details of a stake thawing operation.\n @dev ThawRequests are stored in linked lists by service provider/delegator,\n ordered by creation timestamp." + }, + "id": 3795, + "members": [ + { + "constant": false, + "id": 3788, + "mutability": "mutable", + "name": "shares", + "nameLocation": "6172:6:28", + "nodeType": "VariableDeclaration", + "scope": 3795, + "src": "6164:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3787, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6164:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3790, + "mutability": "mutable", + "name": "thawingUntil", + "nameLocation": "6276:12:28", + "nodeType": "VariableDeclaration", + "scope": 3795, + "src": "6269:19:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 3789, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6269:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3792, + "mutability": "mutable", + "name": "next", + "nameLocation": "6364:4:28", + "nodeType": "VariableDeclaration", + "scope": 3795, + "src": "6356:12:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3791, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6356:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3794, + "mutability": "mutable", + "name": "thawingNonce", + "nameLocation": "6442:12:28", + "nodeType": "VariableDeclaration", + "scope": 3795, + "src": "6434:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3793, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6434:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "ThawRequest", + "nameLocation": "6085:11:28", + "nodeType": "StructDefinition", + "scope": 3796, + "src": "6078:383:28", + "visibility": "public" + } + ], + "scope": 3797, + "src": "568:5895:28", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:6418:28" + }, + "id": 28 + }, + "@graphprotocol/horizon/contracts/libraries/LinkedList.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/LinkedList.sol", + "exportedSymbols": { + "LinkedList": [ + 4087 + ] + }, + "id": 4088, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3798, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:29" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "LinkedList", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 3799, + "nodeType": "StructuredDocumentation", + "src": "71:574:29", + "text": " @title LinkedList library\n @notice A library to manage singly linked lists.\n The library makes no assumptions about the contents of the items, the only\n requirements on the items are:\n - they must be represented by a unique bytes32 id\n - the id of the item must not be bytes32(0)\n - each item must have a reference to the next item in the list\n - the list cannot have more than `MAX_ITEMS` items\n A contract using this library must store:\n - a LinkedList.List to keep track of the list metadata\n - a mapping from bytes32 to the item data" + }, + "fullyImplemented": true, + "id": 4087, + "linearizedBaseContracts": [ + 4087 + ], + "name": "LinkedList", + "nameLocation": "654:10:29", + "nodeType": "ContractDefinition", + "nodes": [ + { + "global": false, + "id": 3803, + "libraryName": { + "id": 3800, + "name": "LinkedList", + "nameLocations": [ + "677:10:29" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4087, + "src": "677:10:29" + }, + "nodeType": "UsingForDirective", + "src": "671:26:29", + "typeName": { + "id": 3802, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3801, + "name": "List", + "nameLocations": [ + "692:4:29" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3813, + "src": "692:4:29" + }, + "referencedDeclaration": 3813, + "src": "692:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + } + } + }, + { + "canonicalName": "LinkedList.List", + "documentation": { + "id": 3804, + "nodeType": "StructuredDocumentation", + "src": "703:36:29", + "text": "@notice Represents a linked list" + }, + "id": 3813, + "members": [ + { + "constant": false, + "id": 3806, + "mutability": "mutable", + "name": "head", + "nameLocation": "806:4:29", + "nodeType": "VariableDeclaration", + "scope": 3813, + "src": "798:12:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3805, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "798:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3808, + "mutability": "mutable", + "name": "tail", + "nameLocation": "860:4:29", + "nodeType": "VariableDeclaration", + "scope": 3813, + "src": "852:12:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3807, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "852:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3810, + "mutability": "mutable", + "name": "nonce", + "nameLocation": "954:5:29", + "nodeType": "VariableDeclaration", + "scope": 3813, + "src": "946:13:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3809, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "946:7:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3812, + "mutability": "mutable", + "name": "count", + "nameLocation": "1020:5:29", + "nodeType": "VariableDeclaration", + "scope": 3813, + "src": "1012:13:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3811, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1012:7:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "List", + "nameLocation": "751:4:29", + "nodeType": "StructDefinition", + "scope": 4087, + "src": "744:288:29", + "visibility": "public" + }, + { + "constant": true, + "documentation": { + "id": 3814, + "nodeType": "StructuredDocumentation", + "src": "1038:32:29", + "text": "@notice Empty bytes constant" + }, + "id": 3820, + "mutability": "constant", + "name": "NULL_BYTES", + "nameLocation": "1099:10:29", + "nodeType": "VariableDeclaration", + "scope": 4087, + "src": "1075:46:29", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3815, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1075:5:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": { + "arguments": [ + { + "hexValue": "", + "id": 3818, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1118:2:29", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "id": 3817, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1112:5:29", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 3816, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1112:5:29", + "typeDescriptions": {} + } + }, + "id": 3819, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1112:9:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "documentation": { + "id": 3821, + "nodeType": "StructuredDocumentation", + "src": "1128:55:29", + "text": "@notice Maximum amount of items allowed in the list" + }, + "id": 3824, + "mutability": "constant", + "name": "MAX_ITEMS", + "nameLocation": "1214:9:29", + "nodeType": "VariableDeclaration", + "scope": 4087, + "src": "1188:44:29", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3822, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1188:7:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31305f303030", + "id": 3823, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1226:6:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000_by_1", + "typeString": "int_const 10000" + }, + "value": "10_000" + }, + "visibility": "internal" + }, + { + "documentation": { + "id": 3825, + "nodeType": "StructuredDocumentation", + "src": "1239:82:29", + "text": " @notice Thrown when trying to remove an item from an empty list" + }, + "errorSelector": "ddaf8f21", + "id": 3827, + "name": "LinkedListEmptyList", + "nameLocation": "1332:19:29", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3826, + "nodeType": "ParameterList", + "parameters": [], + "src": "1351:2:29" + }, + "src": "1326:28:29" + }, + { + "documentation": { + "id": 3828, + "nodeType": "StructuredDocumentation", + "src": "1360:118:29", + "text": " @notice Thrown when trying to add an item to a list that has reached the maximum number of elements" + }, + "errorSelector": "ea315ac0", + "id": 3830, + "name": "LinkedListMaxElementsExceeded", + "nameLocation": "1489:29:29", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3829, + "nodeType": "ParameterList", + "parameters": [], + "src": "1518:2:29" + }, + "src": "1483:38:29" + }, + { + "documentation": { + "id": 3831, + "nodeType": "StructuredDocumentation", + "src": "1527:99:29", + "text": " @notice Thrown when trying to traverse a list with more iterations than elements" + }, + "errorSelector": "9482373a", + "id": 3833, + "name": "LinkedListInvalidIterations", + "nameLocation": "1637:27:29", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3832, + "nodeType": "ParameterList", + "parameters": [], + "src": "1664:2:29" + }, + "src": "1631:36:29" + }, + { + "documentation": { + "id": 3834, + "nodeType": "StructuredDocumentation", + "src": "1673:88:29", + "text": " @notice Thrown when trying to add an item with id equal to bytes32(0)" + }, + "errorSelector": "8f4a893d", + "id": 3836, + "name": "LinkedListInvalidZeroId", + "nameLocation": "1772:23:29", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3835, + "nodeType": "ParameterList", + "parameters": [], + "src": "1795:2:29" + }, + "src": "1766:32:29" + }, + { + "body": { + "id": 3894, + "nodeType": "Block", + "src": "2314:262:29", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3846, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3840, + "src": "2332:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3847, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2337:5:29", + "memberName": "count", + "nodeType": "MemberAccess", + "referencedDeclaration": 3812, + "src": "2332:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 3848, + "name": "MAX_ITEMS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3824, + "src": "2345:9:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2332:22:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3850, + "name": "LinkedListMaxElementsExceeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3830, + "src": "2356:29:29", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 3851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2356:31:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 3845, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2324:7:29", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 3852, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2324:64:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3853, + "nodeType": "ExpressionStatement", + "src": "2324:64:29" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 3860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3855, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3842, + "src": "2406:2:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 3858, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2420:1:29", + "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": 3857, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2412:7:29", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 3856, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2412:7:29", + "typeDescriptions": {} + } + }, + "id": 3859, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2412:10:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2406:16:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3861, + "name": "LinkedListInvalidZeroId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3836, + "src": "2424:23:29", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 3862, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2424:25:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 3854, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2398:7:29", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 3863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2398:52:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3864, + "nodeType": "ExpressionStatement", + "src": "2398:52:29" + }, + { + "expression": { + "id": 3869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 3865, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3840, + "src": "2460:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3867, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "2465:4:29", + "memberName": "tail", + "nodeType": "MemberAccess", + "referencedDeclaration": 3808, + "src": "2460:9:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3868, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3842, + "src": "2472:2:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2460:14:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 3870, + "nodeType": "ExpressionStatement", + "src": "2460:14:29" + }, + { + "expression": { + "id": 3875, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 3871, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3840, + "src": "2484:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3873, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "2489:5:29", + "memberName": "nonce", + "nodeType": "MemberAccess", + "referencedDeclaration": 3810, + "src": "2484:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 3874, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2498:1:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2484:15:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3876, + "nodeType": "ExpressionStatement", + "src": "2484:15:29" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3877, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3840, + "src": "2513:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3878, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2518:5:29", + "memberName": "count", + "nodeType": "MemberAccess", + "referencedDeclaration": 3812, + "src": "2513:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 3879, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2527:1:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2513:15:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3887, + "nodeType": "IfStatement", + "src": "2509:35:29", + "trueBody": { + "expression": { + "id": 3885, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 3881, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3840, + "src": "2530:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3883, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "2535:4:29", + "memberName": "head", + "nodeType": "MemberAccess", + "referencedDeclaration": 3806, + "src": "2530:9:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3884, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3842, + "src": "2542:2:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2530:14:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 3886, + "nodeType": "ExpressionStatement", + "src": "2530:14:29" + } + }, + { + "expression": { + "id": 3892, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 3888, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3840, + "src": "2554:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3890, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "2559:5:29", + "memberName": "count", + "nodeType": "MemberAccess", + "referencedDeclaration": 3812, + "src": "2554:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 3891, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2568:1:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2554:15:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3893, + "nodeType": "ExpressionStatement", + "src": "2554:15:29" + } + ] + }, + "documentation": { + "id": 3837, + "nodeType": "StructuredDocumentation", + "src": "1804:448:29", + "text": " @notice Adds an item to the list.\n The item is added to the end of the list.\n @dev Note that this function will not take care of linking the\n old tail to the new item. The caller should take care of this.\n It will also not ensure id uniqueness.\n @dev There is a maximum number of elements that can be added to the list.\n @param self The list metadata\n @param id The id of the item to add" + }, + "id": 3895, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "addTail", + "nameLocation": "2266:7:29", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3843, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3840, + "mutability": "mutable", + "name": "self", + "nameLocation": "2287:4:29", + "nodeType": "VariableDeclaration", + "scope": 3895, + "src": "2274:17:29", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + }, + "typeName": { + "id": 3839, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3838, + "name": "List", + "nameLocations": [ + "2274:4:29" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3813, + "src": "2274:4:29" + }, + "referencedDeclaration": 3813, + "src": "2274:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3842, + "mutability": "mutable", + "name": "id", + "nameLocation": "2301:2:29", + "nodeType": "VariableDeclaration", + "scope": 3895, + "src": "2293:10:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3841, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2293:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2273:31:29" + }, + "returnParameters": { + "id": 3844, + "nodeType": "ParameterList", + "parameters": [], + "src": "2314:0:29" + }, + "scope": 4087, + "src": "2257:319:29", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3968, + "nodeType": "Block", + "src": "3232:279:29", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3919, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3899, + "src": "3250:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3920, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3255:5:29", + "memberName": "count", + "nodeType": "MemberAccess", + "referencedDeclaration": 3812, + "src": "3250:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 3921, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3263:1:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3250:14:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3923, + "name": "LinkedListEmptyList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3827, + "src": "3266:19:29", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 3924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3266:21:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 3918, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3242:7:29", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 3925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3242:46:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3926, + "nodeType": "ExpressionStatement", + "src": "3242:46:29" + }, + { + "assignments": [ + 3928 + ], + "declarations": [ + { + "constant": false, + "id": 3928, + "mutability": "mutable", + "name": "nextItem", + "nameLocation": "3306:8:29", + "nodeType": "VariableDeclaration", + "scope": 3968, + "src": "3298:16:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3927, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3298:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 3933, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 3930, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3899, + "src": "3329:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3931, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3334:4:29", + "memberName": "head", + "nodeType": "MemberAccess", + "referencedDeclaration": 3806, + "src": "3329:9:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 3929, + "name": "getNextItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3907, + "src": "3317:11:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + } + }, + "id": 3932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3317:22:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3298:41:29" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 3935, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3899, + "src": "3360:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3936, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3365:4:29", + "memberName": "head", + "nodeType": "MemberAccess", + "referencedDeclaration": 3806, + "src": "3360:9:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 3934, + "name": "deleteItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3913, + "src": "3349:10:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + }, + "id": 3937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3349:21:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3938, + "nodeType": "ExpressionStatement", + "src": "3349:21:29" + }, + { + "expression": { + "id": 3943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 3939, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3899, + "src": "3380:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3941, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3385:5:29", + "memberName": "count", + "nodeType": "MemberAccess", + "referencedDeclaration": 3812, + "src": "3380:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "hexValue": "31", + "id": 3942, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3394:1:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3380:15:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3944, + "nodeType": "ExpressionStatement", + "src": "3380:15:29" + }, + { + "expression": { + "id": 3949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 3945, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3899, + "src": "3405:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3947, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3410:4:29", + "memberName": "head", + "nodeType": "MemberAccess", + "referencedDeclaration": 3806, + "src": "3405:9:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3948, + "name": "nextItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3928, + "src": "3417:8:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "3405:20:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 3950, + "nodeType": "ExpressionStatement", + "src": "3405:20:29" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3954, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3951, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3899, + "src": "3439:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3952, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3444:5:29", + "memberName": "count", + "nodeType": "MemberAccess", + "referencedDeclaration": 3812, + "src": "3439:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 3953, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3453:1:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3439:15:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3964, + "nodeType": "IfStatement", + "src": "3435:43:29", + "trueBody": { + "expression": { + "id": 3962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 3955, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3899, + "src": "3456:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3957, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3461:4:29", + "memberName": "tail", + "nodeType": "MemberAccess", + "referencedDeclaration": 3808, + "src": "3456:9:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "hexValue": "30", + "id": 3960, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3476:1:29", + "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": 3959, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3468:7:29", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 3958, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3468:7:29", + "typeDescriptions": {} + } + }, + "id": 3961, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3468:10:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "3456:22:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 3963, + "nodeType": "ExpressionStatement", + "src": "3456:22:29" + } + }, + { + "expression": { + "expression": { + "id": 3965, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3899, + "src": "3495:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 3966, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3500:4:29", + "memberName": "head", + "nodeType": "MemberAccess", + "referencedDeclaration": 3806, + "src": "3495:9:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 3917, + "id": 3967, + "nodeType": "Return", + "src": "3488:16:29" + } + ] + }, + "documentation": { + "id": 3896, + "nodeType": "StructuredDocumentation", + "src": "2582:465:29", + "text": " @notice Removes an item from the list.\n The item is removed from the beginning of the list.\n @param self The list metadata\n @param getNextItem A function to get the next item in the list. It should take\n the id of the current item and return the id of the next item.\n @param deleteItem A function to delete an item. This should delete the item from\n the contract storage. It takes the id of the item to delete." + }, + "id": 3969, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "removeHead", + "nameLocation": "3061:10:29", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3914, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3899, + "mutability": "mutable", + "name": "self", + "nameLocation": "3094:4:29", + "nodeType": "VariableDeclaration", + "scope": 3969, + "src": "3081:17:29", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + }, + "typeName": { + "id": 3898, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3897, + "name": "List", + "nameLocations": [ + "3081:4:29" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3813, + "src": "3081:4:29" + }, + "referencedDeclaration": 3813, + "src": "3081:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3907, + "mutability": "mutable", + "name": "getNextItem", + "nameLocation": "3149:11:29", + "nodeType": "VariableDeclaration", + "scope": 3969, + "src": "3108:52:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + }, + "typeName": { + "id": 3906, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 3902, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3901, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3906, + "src": "3117:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3900, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3117:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3116:9:29" + }, + "returnParameterTypes": { + "id": 3905, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3904, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3906, + "src": "3140:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3903, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3140:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3139:9:29" + }, + "src": "3108:52:29", + "stateMutability": "view", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + }, + "visibility": "internal" + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3913, + "mutability": "mutable", + "name": "deleteItem", + "nameLocation": "3188:10:29", + "nodeType": "VariableDeclaration", + "scope": 3969, + "src": "3170:28:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + }, + "typeName": { + "id": 3912, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 3910, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3909, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3912, + "src": "3179:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3908, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3179:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3178:9:29" + }, + "returnParameterTypes": { + "id": 3911, + "nodeType": "ParameterList", + "parameters": [], + "src": "3188:0:29" + }, + "src": "3170:28:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + }, + "visibility": "internal" + }, + "visibility": "internal" + } + ], + "src": "3071:133:29" + }, + "returnParameters": { + "id": 3917, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3916, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3969, + "src": "3223:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3915, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3223:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3222:9:29" + }, + "scope": 4087, + "src": "3052:459:29", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4085, + "nodeType": "Block", + "src": "4818:606:29", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4011, + "name": "iterations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4003, + "src": "4836:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "id": 4012, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3973, + "src": "4850:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 4013, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4855:5:29", + "memberName": "count", + "nodeType": "MemberAccess", + "referencedDeclaration": 3812, + "src": "4850:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4836:24:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4015, + "name": "LinkedListInvalidIterations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3833, + "src": "4862:27:29", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 4016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4862:29:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 4010, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4828:7:29", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 4017, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4828:64:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4018, + "nodeType": "ExpressionStatement", + "src": "4828:64:29" + }, + { + "assignments": [ + 4020 + ], + "declarations": [ + { + "constant": false, + "id": 4020, + "mutability": "mutable", + "name": "itemCount", + "nameLocation": "4911:9:29", + "nodeType": "VariableDeclaration", + "scope": 4085, + "src": "4903:17:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4019, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4903:7:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4022, + "initialValue": { + "hexValue": "30", + "id": 4021, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4923:1:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "4903:21:29" + }, + { + "expression": { + "id": 4032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4023, + "name": "iterations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4003, + "src": "4934:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4024, + "name": "iterations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4003, + "src": "4948:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4025, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4962:1:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4948:15:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 4027, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4947:17:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 4030, + "name": "iterations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4003, + "src": "4980:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "4947:43:29", + "trueExpression": { + "expression": { + "id": 4028, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3973, + "src": "4967:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 4029, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4972:5:29", + "memberName": "count", + "nodeType": "MemberAccess", + "referencedDeclaration": 3812, + "src": "4967:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4934:56:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4033, + "nodeType": "ExpressionStatement", + "src": "4934:56:29" + }, + { + "assignments": [ + 4035 + ], + "declarations": [ + { + "constant": false, + "id": 4035, + "mutability": "mutable", + "name": "cursor", + "nameLocation": "5009:6:29", + "nodeType": "VariableDeclaration", + "scope": 4085, + "src": "5001:14:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4034, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5001:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 4038, + "initialValue": { + "expression": { + "id": 4036, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3973, + "src": "5018:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 4037, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5023:4:29", + "memberName": "head", + "nodeType": "MemberAccess", + "referencedDeclaration": 3806, + "src": "5018:9:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5001:26:29" + }, + { + "body": { + "id": 4079, + "nodeType": "Block", + "src": "5085:288:29", + "statements": [ + { + "assignments": [ + 4050, + 4052 + ], + "declarations": [ + { + "constant": false, + "id": 4050, + "mutability": "mutable", + "name": "shouldBreak", + "nameLocation": "5105:11:29", + "nodeType": "VariableDeclaration", + "scope": 4079, + "src": "5100:16:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4049, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5100:4:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4052, + "mutability": "mutable", + "name": "acc_", + "nameLocation": "5131:4:29", + "nodeType": "VariableDeclaration", + "scope": 4079, + "src": "5118:17:29", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4051, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5118:5:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 4057, + "initialValue": { + "arguments": [ + { + "id": 4054, + "name": "cursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4035, + "src": "5151:6:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 4055, + "name": "processInitAcc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4001, + "src": "5159:14:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4053, + "name": "processItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3993, + "src": "5139:11:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes32,bytes memory) returns (bool,bytes memory)" + } + }, + "id": 4056, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5139:35:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5099:75:29" + }, + { + "condition": { + "id": 4058, + "name": "shouldBreak", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4050, + "src": "5193:11:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4060, + "nodeType": "IfStatement", + "src": "5189:22:29", + "trueBody": { + "id": 4059, + "nodeType": "Break", + "src": "5206:5:29" + } + }, + { + "expression": { + "id": 4063, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4061, + "name": "processInitAcc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4001, + "src": "5226:14:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4062, + "name": "acc_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4052, + "src": "5243:4:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "src": "5226:21:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 4064, + "nodeType": "ExpressionStatement", + "src": "5226:21:29" + }, + { + "expression": { + "id": 4071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4065, + "name": "cursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4035, + "src": "5261:6:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 4068, + "name": "getNextItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3981, + "src": "5286:11:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + } + }, + { + "id": 4069, + "name": "deleteItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3999, + "src": "5299:10:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + }, + { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + ], + "expression": { + "id": 4066, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3973, + "src": "5270:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List storage pointer" + } + }, + "id": 4067, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5275:10:29", + "memberName": "removeHead", + "nodeType": "MemberAccess", + "referencedDeclaration": 3969, + "src": "5270:15:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_List_$3813_storage_ptr_$_t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$_$_t_function_internal_nonpayable$_t_bytes32_$returns$__$_$returns$_t_bytes32_$attached_to$_t_struct$_List_$3813_storage_ptr_$", + "typeString": "function (struct LinkedList.List storage pointer,function (bytes32) view returns (bytes32),function (bytes32)) returns (bytes32)" + } + }, + "id": 4070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5270:40:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "5261:49:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4072, + "nodeType": "ExpressionStatement", + "src": "5261:49:29" + }, + { + "expression": { + "id": 4074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "--", + "prefix": false, + "src": "5325:12:29", + "subExpression": { + "id": 4073, + "name": "iterations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4003, + "src": "5325:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4075, + "nodeType": "ExpressionStatement", + "src": "5325:12:29" + }, + { + "expression": { + "id": 4077, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "5351:11:29", + "subExpression": { + "id": 4076, + "name": "itemCount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4020, + "src": "5351:9:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4078, + "nodeType": "ExpressionStatement", + "src": "5351:11:29" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 4044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4039, + "name": "cursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4035, + "src": "5045:6:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 4042, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5063:1:29", + "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": 4041, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5055:7:29", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 4040, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5055:7:29", + "typeDescriptions": {} + } + }, + "id": 4043, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5055:10:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "5045:20:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4045, + "name": "iterations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4003, + "src": "5069:10:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 4046, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5082:1:29", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5069:14:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5045:38:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4080, + "nodeType": "WhileStatement", + "src": "5038:335:29" + }, + { + "expression": { + "components": [ + { + "id": 4081, + "name": "itemCount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4020, + "src": "5391:9:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4082, + "name": "processInitAcc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4001, + "src": "5402:14:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "id": 4083, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5390:27:29", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bytes_memory_ptr_$", + "typeString": "tuple(uint256,bytes memory)" + } + }, + "functionReturnParameters": 4009, + "id": 4084, + "nodeType": "Return", + "src": "5383:34:29" + } + ] + }, + "documentation": { + "id": 3970, + "nodeType": "StructuredDocumentation", + "src": "3517:957:29", + "text": " @notice Traverses the list and processes each item.\n It deletes the processed items from both the list and the storage mapping.\n @param self The list metadata\n @param getNextItem A function to get the next item in the list. It should take\n the id of the current item and return the id of the next item.\n @param processItem A function to process an item. The function should take the id of the item\n and an accumulator, and return:\n - a boolean indicating whether the traversal should stop\n - an accumulator to pass data between iterations\n @param deleteItem A function to delete an item. This should delete the item from\n the contract storage. It takes the id of the item to delete.\n @param processInitAcc The initial accumulator data\n @param iterations The maximum number of iterations to perform. If 0, the traversal will continue\n until the end of the list." + }, + "id": 4086, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "traverse", + "nameLocation": "4488:8:29", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4004, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3973, + "mutability": "mutable", + "name": "self", + "nameLocation": "4519:4:29", + "nodeType": "VariableDeclaration", + "scope": 4086, + "src": "4506:17:29", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + }, + "typeName": { + "id": 3972, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3971, + "name": "List", + "nameLocations": [ + "4506:4:29" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3813, + "src": "4506:4:29" + }, + "referencedDeclaration": 3813, + "src": "4506:4:29", + "typeDescriptions": { + "typeIdentifier": "t_struct$_List_$3813_storage_ptr", + "typeString": "struct LinkedList.List" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3981, + "mutability": "mutable", + "name": "getNextItem", + "nameLocation": "4574:11:29", + "nodeType": "VariableDeclaration", + "scope": 4086, + "src": "4533:52:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + }, + "typeName": { + "id": 3980, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 3976, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3975, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3980, + "src": "4542:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3974, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4542:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4541:9:29" + }, + "returnParameterTypes": { + "id": 3979, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3978, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3980, + "src": "4565:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3977, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4565:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4564:9:29" + }, + "src": "4533:52:29", + "stateMutability": "view", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + }, + "visibility": "internal" + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3993, + "mutability": "mutable", + "name": "processItem", + "nameLocation": "4656:11:29", + "nodeType": "VariableDeclaration", + "scope": 4086, + "src": "4595:72:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes32,bytes) returns (bool,bytes)" + }, + "typeName": { + "id": 3992, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 3986, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3983, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3992, + "src": "4604:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3982, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4604:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3985, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3992, + "src": "4613:12:29", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3984, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4613:5:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4603:23:29" + }, + "returnParameterTypes": { + "id": 3991, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3988, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3992, + "src": "4636:4:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3987, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4636:4:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3990, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3992, + "src": "4642:12:29", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3989, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4642:5:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4635:20:29" + }, + "src": "4595:72:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes32,bytes) returns (bool,bytes)" + }, + "visibility": "internal" + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3999, + "mutability": "mutable", + "name": "deleteItem", + "nameLocation": "4695:10:29", + "nodeType": "VariableDeclaration", + "scope": 4086, + "src": "4677:28:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + }, + "typeName": { + "id": 3998, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 3996, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3995, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3998, + "src": "4686:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3994, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4686:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4685:9:29" + }, + "returnParameterTypes": { + "id": 3997, + "nodeType": "ParameterList", + "parameters": [], + "src": "4695:0:29" + }, + "src": "4677:28:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + }, + "visibility": "internal" + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4001, + "mutability": "mutable", + "name": "processInitAcc", + "nameLocation": "4728:14:29", + "nodeType": "VariableDeclaration", + "scope": 4086, + "src": "4715:27:29", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4000, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4715:5:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4003, + "mutability": "mutable", + "name": "iterations", + "nameLocation": "4760:10:29", + "nodeType": "VariableDeclaration", + "scope": 4086, + "src": "4752:18:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4002, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4752:7:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4496:280:29" + }, + "returnParameters": { + "id": 4009, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4006, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4086, + "src": "4795:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4005, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4795:7:29", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4008, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4086, + "src": "4804:12:29", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4007, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4804:5:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4794:23:29" + }, + "scope": 4087, + "src": "4479:945:29", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4088, + "src": "646:4780:29", + "usedErrors": [ + 3827, + 3830, + 3833, + 3836 + ], + "usedEvents": [] + } + ], + "src": "46:5381:29" + }, + "id": 29 + }, + "@graphprotocol/horizon/contracts/libraries/MathUtils.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/MathUtils.sol", + "exportedSymbols": { + "MathUtils": [ + 4168 + ] + }, + "id": 4169, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4089, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:30" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "MathUtils", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 4090, + "nodeType": "StructuredDocumentation", + "src": "71:99:30", + "text": " @title MathUtils Library\n @notice A collection of functions to perform math operations" + }, + "fullyImplemented": true, + "id": 4168, + "linearizedBaseContracts": [ + 4168 + ], + "name": "MathUtils", + "nameLocation": "179:9:30", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 4127, + "nodeType": "Block", + "src": "880:113:30", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4104, + "name": "valueA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4093, + "src": "899:6:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 4105, + "name": "weightA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4095, + "src": "908:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "899:16:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 4107, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "898:18:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4110, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4108, + "name": "valueB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4097, + "src": "920:6:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 4109, + "name": "weightB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4099, + "src": "929:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "920:16:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 4111, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "919:18:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "898:39:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4113, + "name": "weightA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4095, + "src": "941:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 4114, + "name": "weightB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4099, + "src": "951:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "941:17:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 4116, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "961:1:30", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "941:21:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 4118, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "940:23:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "898:65:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 4120, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "897:67:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4123, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4121, + "name": "weightA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4095, + "src": "968:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 4122, + "name": "weightB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4099, + "src": "978:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "968:17:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 4124, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "967:19:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "897:89:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4103, + "id": 4126, + "nodeType": "Return", + "src": "890:96:30" + } + ] + }, + "documentation": { + "id": 4091, + "nodeType": "StructuredDocumentation", + "src": "195:509:30", + "text": " @dev Calculates the weighted average of two values pondering each of these\n values based on configured weights. The contribution of each value N is\n weightN/(weightA + weightB). The calculation rounds up to ensure the result\n is always greater than the smallest of the two values.\n @param valueA The amount for value A\n @param weightA The weight to use for value A\n @param valueB The amount for value B\n @param weightB The weight to use for value B" + }, + "id": 4128, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "weightedAverageRoundingUp", + "nameLocation": "718:25:30", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4100, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4093, + "mutability": "mutable", + "name": "valueA", + "nameLocation": "761:6:30", + "nodeType": "VariableDeclaration", + "scope": 4128, + "src": "753:14:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4092, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "753:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4095, + "mutability": "mutable", + "name": "weightA", + "nameLocation": "785:7:30", + "nodeType": "VariableDeclaration", + "scope": 4128, + "src": "777:15:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4094, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "777:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4097, + "mutability": "mutable", + "name": "valueB", + "nameLocation": "810:6:30", + "nodeType": "VariableDeclaration", + "scope": 4128, + "src": "802:14:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4096, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "802:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4099, + "mutability": "mutable", + "name": "weightB", + "nameLocation": "834:7:30", + "nodeType": "VariableDeclaration", + "scope": 4128, + "src": "826:15:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4098, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "826:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "743:104:30" + }, + "returnParameters": { + "id": 4103, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4102, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4128, + "src": "871:7:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4101, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "871:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "870:9:30" + }, + "scope": 4168, + "src": "709:284:30", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4145, + "nodeType": "Block", + "src": "1130:38:30", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4138, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4131, + "src": "1147:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 4139, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4133, + "src": "1152:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1147:6:30", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 4142, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4133, + "src": "1160:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1147:14:30", + "trueExpression": { + "id": 4141, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4131, + "src": "1156:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4137, + "id": 4144, + "nodeType": "Return", + "src": "1140:21:30" + } + ] + }, + "documentation": { + "id": 4129, + "nodeType": "StructuredDocumentation", + "src": "999:59:30", + "text": " @dev Returns the minimum of two numbers." + }, + "id": 4146, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "min", + "nameLocation": "1072:3:30", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4134, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4131, + "mutability": "mutable", + "name": "x", + "nameLocation": "1084:1:30", + "nodeType": "VariableDeclaration", + "scope": 4146, + "src": "1076:9:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4130, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1076:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4133, + "mutability": "mutable", + "name": "y", + "nameLocation": "1095:1:30", + "nodeType": "VariableDeclaration", + "scope": 4146, + "src": "1087:9:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4132, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1087:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1075:22:30" + }, + "returnParameters": { + "id": 4137, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4136, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4146, + "src": "1121:7:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4135, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1121:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1120:9:30" + }, + "scope": 4168, + "src": "1063:105:30", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4166, + "nodeType": "Block", + "src": "1340:43:30", + "statements": [ + { + "expression": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4158, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4156, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4149, + "src": "1358:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 4157, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4151, + "src": "1362:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1358:5:30", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 4159, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1357:7:30", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 4163, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1375:1:30", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 4164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1357:19:30", + "trueExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4160, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4149, + "src": "1367:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 4161, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4151, + "src": "1371:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1367:5:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4155, + "id": 4165, + "nodeType": "Return", + "src": "1350:26:30" + } + ] + }, + "documentation": { + "id": 4147, + "nodeType": "StructuredDocumentation", + "src": "1174:87:30", + "text": " @dev Returns the difference between two numbers or zero if negative." + }, + "id": 4167, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "diffOrZero", + "nameLocation": "1275:10:30", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4152, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4149, + "mutability": "mutable", + "name": "x", + "nameLocation": "1294:1:30", + "nodeType": "VariableDeclaration", + "scope": 4167, + "src": "1286:9:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4148, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1286:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4151, + "mutability": "mutable", + "name": "y", + "nameLocation": "1305:1:30", + "nodeType": "VariableDeclaration", + "scope": 4167, + "src": "1297:9:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4150, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1297:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1285:22:30" + }, + "returnParameters": { + "id": 4155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4154, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4167, + "src": "1331:7:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4153, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1331:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1330:9:30" + }, + "scope": 4168, + "src": "1266:117:30", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4169, + "src": "171:1214:30", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:1340:30" + }, + "id": 30 + }, + "@graphprotocol/horizon/contracts/libraries/PPMMath.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", + "exportedSymbols": { + "PPMMath": [ + 4262 + ] + }, + "id": 4263, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4170, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:31" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "PPMMath", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 4171, + "nodeType": "StructuredDocumentation", + "src": "70:118:31", + "text": " @title PPMMath library\n @notice A library for handling calculations with parts per million (PPM) amounts." + }, + "fullyImplemented": true, + "id": 4262, + "linearizedBaseContracts": [ + 4262 + ], + "name": "PPMMath", + "nameLocation": "197:7:31", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "documentation": { + "id": 4172, + "nodeType": "StructuredDocumentation", + "src": "211:60:31", + "text": "@notice Maximum value (100%) in parts per million (PPM)." + }, + "id": 4175, + "mutability": "constant", + "name": "MAX_PPM", + "nameLocation": "302:7:31", + "nodeType": "VariableDeclaration", + "scope": 4262, + "src": "276:45:31", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4173, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "276:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "315f3030305f303030", + "id": 4174, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "312:9:31", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000_by_1", + "typeString": "int_const 1000000" + }, + "value": "1_000_000" + }, + "visibility": "internal" + }, + { + "documentation": { + "id": 4176, + "nodeType": "StructuredDocumentation", + "src": "328:133:31", + "text": " @notice Thrown when a value is expected to be in PPM but is not.\n @param value The value that is not in PPM." + }, + "errorSelector": "3dc311df", + "id": 4180, + "name": "PPMMathInvalidPPM", + "nameLocation": "472:17:31", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 4179, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4178, + "mutability": "mutable", + "name": "value", + "nameLocation": "498:5:31", + "nodeType": "VariableDeclaration", + "scope": 4180, + "src": "490:13:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4177, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "490:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "489:15:31" + }, + "src": "466:39:31" + }, + { + "documentation": { + "id": 4181, + "nodeType": "StructuredDocumentation", + "src": "511:189:31", + "text": " @notice Thrown when no value in a multiplication is in PPM.\n @param a The first value in the multiplication.\n @param b The second value in the multiplication." + }, + "errorSelector": "ed17e1d6", + "id": 4187, + "name": "PPMMathInvalidMulPPM", + "nameLocation": "711:20:31", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 4186, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4183, + "mutability": "mutable", + "name": "a", + "nameLocation": "740:1:31", + "nodeType": "VariableDeclaration", + "scope": 4187, + "src": "732:9:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4182, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "732:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4185, + "mutability": "mutable", + "name": "b", + "nameLocation": "751:1:31", + "nodeType": "VariableDeclaration", + "scope": 4187, + "src": "743:9:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4184, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "743:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "731:22:31" + }, + "src": "705:49:31" + }, + { + "body": { + "id": 4218, + "nodeType": "Block", + "src": "1029:118:31", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4204, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 4199, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4190, + "src": "1058:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4198, + "name": "isValidPPM", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4261, + "src": "1047:10:31", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) pure returns (bool)" + } + }, + "id": 4200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1047:13:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "arguments": [ + { + "id": 4202, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "1075:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4201, + "name": "isValidPPM", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4261, + "src": "1064:10:31", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) pure returns (bool)" + } + }, + "id": 4203, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1064:13:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1047:30:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 4206, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4190, + "src": "1100:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4207, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "1103:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4205, + "name": "PPMMathInvalidMulPPM", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4187, + "src": "1079:20:31", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 4208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1079:26:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 4197, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1039:7:31", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 4209, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1039:67:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4210, + "nodeType": "ExpressionStatement", + "src": "1039:67:31" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4211, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4190, + "src": "1124:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 4212, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "1128:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1124:5:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 4214, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1123:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 4215, + "name": "MAX_PPM", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4175, + "src": "1133:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1123:17:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4196, + "id": 4217, + "nodeType": "Return", + "src": "1116:24:31" + } + ] + }, + "documentation": { + "id": 4188, + "nodeType": "StructuredDocumentation", + "src": "760:194:31", + "text": " @notice Multiplies two values, one of which must be in PPM.\n @param a The first value.\n @param b The second value.\n @return The result of the multiplication." + }, + "id": 4219, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mulPPM", + "nameLocation": "968:6:31", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4193, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4190, + "mutability": "mutable", + "name": "a", + "nameLocation": "983:1:31", + "nodeType": "VariableDeclaration", + "scope": 4219, + "src": "975:9:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4189, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "975:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4192, + "mutability": "mutable", + "name": "b", + "nameLocation": "994:1:31", + "nodeType": "VariableDeclaration", + "scope": 4219, + "src": "986:9:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4191, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "986:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "974:22:31" + }, + "returnParameters": { + "id": 4196, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4195, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4219, + "src": "1020:7:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4194, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1020:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1019:9:31" + }, + "scope": 4262, + "src": "959:188:31", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4247, + "nodeType": "Block", + "src": "1476:104:31", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4231, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4224, + "src": "1505:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4230, + "name": "isValidPPM", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4261, + "src": "1494:10:31", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) pure returns (bool)" + } + }, + "id": 4232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1494:13:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 4234, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4224, + "src": "1527:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4233, + "name": "PPMMathInvalidPPM", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4180, + "src": "1509:17:31", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256) pure returns (error)" + } + }, + "id": 4235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1509:20:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 4229, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1486:7:31", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 4236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1486:44:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4237, + "nodeType": "ExpressionStatement", + "src": "1486:44:31" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4238, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4222, + "src": "1547:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "arguments": [ + { + "id": 4240, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4222, + "src": "1558:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4241, + "name": "MAX_PPM", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4175, + "src": "1561:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 4242, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4224, + "src": "1571:1:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1561:11:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4239, + "name": "mulPPM", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4219, + "src": "1551:6:31", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 4244, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1551:22:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1547:26:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4228, + "id": 4246, + "nodeType": "Return", + "src": "1540:33:31" + } + ] + }, + "documentation": { + "id": 4220, + "nodeType": "StructuredDocumentation", + "src": "1153:241:31", + "text": " @notice Multiplies two values, the second one must be in PPM, and rounds up the result.\n @dev requirements:\n - The second value must be in PPM.\n @param a The first value.\n @param b The second value." + }, + "id": 4248, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mulPPMRoundUp", + "nameLocation": "1408:13:31", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4222, + "mutability": "mutable", + "name": "a", + "nameLocation": "1430:1:31", + "nodeType": "VariableDeclaration", + "scope": 4248, + "src": "1422:9:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4221, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1422:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4224, + "mutability": "mutable", + "name": "b", + "nameLocation": "1441:1:31", + "nodeType": "VariableDeclaration", + "scope": 4248, + "src": "1433:9:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1433:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1421:22:31" + }, + "returnParameters": { + "id": 4228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4227, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4248, + "src": "1467:7:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4226, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1467:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1466:9:31" + }, + "scope": 4262, + "src": "1399:181:31", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4260, + "nodeType": "Block", + "src": "1806:40:31", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4256, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4251, + "src": "1823:5:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 4257, + "name": "MAX_PPM", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4175, + "src": "1832:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1823:16:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 4255, + "id": 4259, + "nodeType": "Return", + "src": "1816:23:31" + } + ] + }, + "documentation": { + "id": 4249, + "nodeType": "StructuredDocumentation", + "src": "1586:151:31", + "text": " @notice Checks if a value is in PPM.\n @dev A valid PPM value is between 0 and MAX_PPM.\n @param value The value to check." + }, + "id": 4261, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isValidPPM", + "nameLocation": "1751:10:31", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4252, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4251, + "mutability": "mutable", + "name": "value", + "nameLocation": "1770:5:31", + "nodeType": "VariableDeclaration", + "scope": 4261, + "src": "1762:13:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4250, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1762:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1761:15:31" + }, + "returnParameters": { + "id": 4255, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4254, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4261, + "src": "1800:4:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4253, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1800:4:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1799:6:31" + }, + "scope": 4262, + "src": "1742:104:31", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4263, + "src": "189:1659:31", + "usedErrors": [ + 4180, + 4187 + ], + "usedEvents": [] + } + ], + "src": "45:1804:31" + }, + "id": 31 + }, + "@graphprotocol/horizon/contracts/libraries/UintRange.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/UintRange.sol", + "exportedSymbols": { + "UintRange": [ + 4290 + ] + }, + "id": 4291, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4264, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:32" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "UintRange", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 4265, + "nodeType": "StructuredDocumentation", + "src": "70:101:32", + "text": " @title UintRange library\n @notice A library for handling range checks on uint256 values." + }, + "fullyImplemented": true, + "id": 4290, + "linearizedBaseContracts": [ + 4290 + ], + "name": "UintRange", + "nameLocation": "180:9:32", + "nodeType": "ContractDefinition", + "nodes": [ + { + "global": false, + "id": 4268, + "libraryName": { + "id": 4266, + "name": "UintRange", + "nameLocations": [ + "202:9:32" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4290, + "src": "202:9:32" + }, + "nodeType": "UsingForDirective", + "src": "196:28:32", + "typeName": { + "id": 4267, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "216:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "body": { + "id": 4288, + "nodeType": "Block", + "src": "540:52:32", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4286, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4280, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4271, + "src": "557:5:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 4281, + "name": "min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4273, + "src": "566:3:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "557:12:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4285, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4283, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4271, + "src": "573:5:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 4284, + "name": "max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4275, + "src": "582:3:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "573:12:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "557:28:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 4279, + "id": 4287, + "nodeType": "Return", + "src": "550:35:32" + } + ] + }, + "documentation": { + "id": 4269, + "nodeType": "StructuredDocumentation", + "src": "230:216:32", + "text": " @notice Checks if a value is in the range [`min`, `max`].\n @param value The value to check.\n @param min The minimum value of the range.\n @param max The maximum value of the range." + }, + "id": 4289, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isInRange", + "nameLocation": "460:9:32", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4276, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4271, + "mutability": "mutable", + "name": "value", + "nameLocation": "478:5:32", + "nodeType": "VariableDeclaration", + "scope": 4289, + "src": "470:13:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4270, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "470:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4273, + "mutability": "mutable", + "name": "min", + "nameLocation": "493:3:32", + "nodeType": "VariableDeclaration", + "scope": 4289, + "src": "485:11:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4272, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "485:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4275, + "mutability": "mutable", + "name": "max", + "nameLocation": "506:3:32", + "nodeType": "VariableDeclaration", + "scope": 4289, + "src": "498:11:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4274, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "498:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "469:41:32" + }, + "returnParameters": { + "id": 4279, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4278, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4289, + "src": "534:4:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4277, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "534:4:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "533:6:32" + }, + "scope": 4290, + "src": "451:141:32", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4291, + "src": "172:422:32", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "45:550:32" + }, + "id": 32 + }, + "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol": { + "ast": { + "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", + "exportedSymbols": { + "GraphDirectory": [ + 4653 + ], + "IController": [ + 279 + ], + "ICuration": [ + 165 + ], + "IEpochManager": [ + 220 + ], + "IGraphPayments": [ + 2211 + ], + "IGraphProxyAdmin": [ + 2215 + ], + "IGraphToken": [ + 518 + ], + "IHorizonStaking": [ + 2235 + ], + "IPaymentsEscrow": [ + 2514 + ], + "IRewardsManager": [ + 438 + ], + "ITokenGateway": [ + 41 + ] + }, + "id": 4654, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4292, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:33" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "file": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "id": 4294, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 519, + "src": "71:87:33", + "symbolAliases": [ + { + "foreign": { + "id": 4293, + "name": "IGraphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 518, + "src": "80:11:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", + "file": "../interfaces/IHorizonStaking.sol", + "id": 4296, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 2236, + "src": "159:68:33", + "symbolAliases": [ + { + "foreign": { + "id": 4295, + "name": "IHorizonStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2235, + "src": "168:15:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "file": "../interfaces/IGraphPayments.sol", + "id": 4298, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 2212, + "src": "228:66:33", + "symbolAliases": [ + { + "foreign": { + "id": 4297, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "237:14:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol", + "file": "../interfaces/IPaymentsEscrow.sol", + "id": 4300, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 2515, + "src": "295:68:33", + "symbolAliases": [ + { + "foreign": { + "id": 4299, + "name": "IPaymentsEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2514, + "src": "304:15:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/governance/IController.sol", + "file": "@graphprotocol/contracts/contracts/governance/IController.sol", + "id": 4302, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 280, + "src": "365:92:33", + "symbolAliases": [ + { + "foreign": { + "id": 4301, + "name": "IController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 279, + "src": "374:11:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol", + "file": "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol", + "id": 4304, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 221, + "src": "458:92:33", + "symbolAliases": [ + { + "foreign": { + "id": 4303, + "name": "IEpochManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 220, + "src": "467:13:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol", + "file": "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol", + "id": 4306, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 439, + "src": "551:97:33", + "symbolAliases": [ + { + "foreign": { + "id": 4305, + "name": "IRewardsManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 438, + "src": "560:15:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol", + "file": "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol", + "id": 4308, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 42, + "src": "649:94:33", + "symbolAliases": [ + { + "foreign": { + "id": 4307, + "name": "ITokenGateway", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 41, + "src": "658:13:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol", + "file": "../interfaces/IGraphProxyAdmin.sol", + "id": 4310, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 2216, + "src": "744:70:33", + "symbolAliases": [ + { + "foreign": { + "id": 4309, + "name": "IGraphProxyAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2215, + "src": "753:16:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/curation/ICuration.sol", + "file": "@graphprotocol/contracts/contracts/curation/ICuration.sol", + "id": 4312, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4654, + "sourceUnit": 166, + "src": "816:86:33", + "symbolAliases": [ + { + "foreign": { + "id": 4311, + "name": "ICuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 165, + "src": "825:9:33", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "GraphDirectory", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 4313, + "nodeType": "StructuredDocumentation", + "src": "904:315:33", + "text": " @title GraphDirectory contract\n @notice This contract is meant to be inherited by other contracts that\n need to keep track of the addresses in Graph Horizon contracts.\n It fetches the addresses from the Controller supplied during construction,\n and uses immutable variables to minimize gas costs." + }, + "fullyImplemented": true, + "id": 4653, + "linearizedBaseContracts": [ + 4653 + ], + "name": "GraphDirectory", + "nameLocation": "1238:14:33", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "documentation": { + "id": 4314, + "nodeType": "StructuredDocumentation", + "src": "1297:44:33", + "text": "@notice The Graph Token contract address" + }, + "id": 4317, + "mutability": "immutable", + "name": "GRAPH_TOKEN", + "nameLocation": "1376:11:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "1346:41:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + }, + "typeName": { + "id": 4316, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4315, + "name": "IGraphToken", + "nameLocations": [ + "1346:11:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 518, + "src": "1346:11:33" + }, + "referencedDeclaration": 518, + "src": "1346:11:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 4318, + "nodeType": "StructuredDocumentation", + "src": "1394:48:33", + "text": "@notice The Horizon Staking contract address" + }, + "id": 4321, + "mutability": "immutable", + "name": "GRAPH_STAKING", + "nameLocation": "1481:13:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "1447:47:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + }, + "typeName": { + "id": 4320, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4319, + "name": "IHorizonStaking", + "nameLocations": [ + "1447:15:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2235, + "src": "1447:15:33" + }, + "referencedDeclaration": 2235, + "src": "1447:15:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 4322, + "nodeType": "StructuredDocumentation", + "src": "1501:47:33", + "text": "@notice The Graph Payments contract address" + }, + "id": 4325, + "mutability": "immutable", + "name": "GRAPH_PAYMENTS", + "nameLocation": "1586:14:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "1553:47:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + }, + "typeName": { + "id": 4324, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4323, + "name": "IGraphPayments", + "nameLocations": [ + "1553:14:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2211, + "src": "1553:14:33" + }, + "referencedDeclaration": 2211, + "src": "1553:14:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 4326, + "nodeType": "StructuredDocumentation", + "src": "1607:48:33", + "text": "@notice The Payments Escrow contract address" + }, + "id": 4329, + "mutability": "immutable", + "name": "GRAPH_PAYMENTS_ESCROW", + "nameLocation": "1694:21:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "1660:55:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + }, + "typeName": { + "id": 4328, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4327, + "name": "IPaymentsEscrow", + "nameLocations": [ + "1660:15:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2514, + "src": "1660:15:33" + }, + "referencedDeclaration": 2514, + "src": "1660:15:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 4330, + "nodeType": "StructuredDocumentation", + "src": "1762:49:33", + "text": "@notice The Graph Controller contract address" + }, + "id": 4333, + "mutability": "immutable", + "name": "GRAPH_CONTROLLER", + "nameLocation": "1846:16:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "1816:46:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + }, + "typeName": { + "id": 4332, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4331, + "name": "IController", + "nameLocations": [ + "1816:11:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 279, + "src": "1816:11:33" + }, + "referencedDeclaration": 279, + "src": "1816:11:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 4334, + "nodeType": "StructuredDocumentation", + "src": "1869:46:33", + "text": "@notice The Epoch Manager contract address" + }, + "id": 4337, + "mutability": "immutable", + "name": "GRAPH_EPOCH_MANAGER", + "nameLocation": "1952:19:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "1920:51:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + }, + "typeName": { + "id": 4336, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4335, + "name": "IEpochManager", + "nameLocations": [ + "1920:13:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 220, + "src": "1920:13:33" + }, + "referencedDeclaration": 220, + "src": "1920:13:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 4338, + "nodeType": "StructuredDocumentation", + "src": "1978:48:33", + "text": "@notice The Rewards Manager contract address" + }, + "id": 4341, + "mutability": "immutable", + "name": "GRAPH_REWARDS_MANAGER", + "nameLocation": "2065:21:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "2031:55:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + }, + "typeName": { + "id": 4340, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4339, + "name": "IRewardsManager", + "nameLocations": [ + "2031:15:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 438, + "src": "2031:15:33" + }, + "referencedDeclaration": 438, + "src": "2031:15:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 4342, + "nodeType": "StructuredDocumentation", + "src": "2093:46:33", + "text": "@notice The Token Gateway contract address" + }, + "id": 4345, + "mutability": "immutable", + "name": "GRAPH_TOKEN_GATEWAY", + "nameLocation": "2176:19:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "2144:51:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + }, + "typeName": { + "id": 4344, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4343, + "name": "ITokenGateway", + "nameLocations": [ + "2144:13:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 41, + "src": "2144:13:33" + }, + "referencedDeclaration": 41, + "src": "2144:13:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 4346, + "nodeType": "StructuredDocumentation", + "src": "2202:50:33", + "text": "@notice The Graph Proxy Admin contract address" + }, + "id": 4349, + "mutability": "immutable", + "name": "GRAPH_PROXY_ADMIN", + "nameLocation": "2292:17:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "2257:52:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + }, + "typeName": { + "id": 4348, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4347, + "name": "IGraphProxyAdmin", + "nameLocations": [ + "2257:16:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2215, + "src": "2257:16:33" + }, + "referencedDeclaration": 2215, + "src": "2257:16:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4352, + "mutability": "immutable", + "name": "GRAPH_CURATION", + "nameLocation": "2527:14:33", + "nodeType": "VariableDeclaration", + "scope": 4653, + "src": "2499:42:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + }, + "typeName": { + "id": 4351, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4350, + "name": "ICuration", + "nameLocations": [ + "2499:9:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 165, + "src": "2499:9:33" + }, + "referencedDeclaration": 165, + "src": "2499:9:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "documentation": { + "id": 4353, + "nodeType": "StructuredDocumentation", + "src": "2548:722:33", + "text": " @notice Emitted when the GraphDirectory is initialized\n @param graphToken The Graph Token contract address\n @param graphStaking The Horizon Staking contract address\n @param graphPayments The Graph Payments contract address\n @param graphEscrow The Payments Escrow contract address\n @param graphController The Graph Controller contract address\n @param graphEpochManager The Epoch Manager contract address\n @param graphRewardsManager The Rewards Manager contract address\n @param graphTokenGateway The Token Gateway contract address\n @param graphProxyAdmin The Graph Proxy Admin contract address\n @param graphCuration The Curation contract address" + }, + "eventSelector": "ef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43", + "id": 4375, + "name": "GraphDirectoryInitialized", + "nameLocation": "3281:25:33", + "nodeType": "EventDefinition", + "parameters": { + "id": 4374, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4355, + "indexed": true, + "mutability": "mutable", + "name": "graphToken", + "nameLocation": "3332:10:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3316:26:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4354, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3316:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4357, + "indexed": true, + "mutability": "mutable", + "name": "graphStaking", + "nameLocation": "3368:12:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3352:28:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4356, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3352:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4359, + "indexed": false, + "mutability": "mutable", + "name": "graphPayments", + "nameLocation": "3398:13:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3390:21:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4358, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3390:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4361, + "indexed": false, + "mutability": "mutable", + "name": "graphEscrow", + "nameLocation": "3429:11:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3421:19:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4360, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3421:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4363, + "indexed": true, + "mutability": "mutable", + "name": "graphController", + "nameLocation": "3466:15:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3450:31:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4362, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3450:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4365, + "indexed": false, + "mutability": "mutable", + "name": "graphEpochManager", + "nameLocation": "3499:17:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3491:25:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4364, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3491:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4367, + "indexed": false, + "mutability": "mutable", + "name": "graphRewardsManager", + "nameLocation": "3534:19:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3526:27:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4366, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3526:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4369, + "indexed": false, + "mutability": "mutable", + "name": "graphTokenGateway", + "nameLocation": "3571:17:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3563:25:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4368, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3563:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4371, + "indexed": false, + "mutability": "mutable", + "name": "graphProxyAdmin", + "nameLocation": "3606:15:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3598:23:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4370, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3598:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4373, + "indexed": false, + "mutability": "mutable", + "name": "graphCuration", + "nameLocation": "3639:13:33", + "nodeType": "VariableDeclaration", + "scope": 4375, + "src": "3631:21:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4372, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3631:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3306:352:33" + }, + "src": "3275:384:33" + }, + { + "documentation": { + "id": 4376, + "nodeType": "StructuredDocumentation", + "src": "3665:230:33", + "text": " @notice Thrown when either the controller is the zero address or a contract address is not found\n on the controller\n @param contractName The name of the contract that was not found, or the controller" + }, + "errorSelector": "431eb5ba", + "id": 4380, + "name": "GraphDirectoryInvalidZeroAddress", + "nameLocation": "3906:32:33", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 4379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4378, + "mutability": "mutable", + "name": "contractName", + "nameLocation": "3945:12:33", + "nodeType": "VariableDeclaration", + "scope": 4380, + "src": "3939:18:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4377, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3939:5:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3938:20:33" + }, + "src": "3900:59:33" + }, + { + "body": { + "id": 4519, + "nodeType": "Block", + "src": "4277:1382:33", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4387, + "name": "controller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4383, + "src": "4295:10:33", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 4390, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4317:1:33", + "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": 4389, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4309:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4388, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4309:7:33", + "typeDescriptions": {} + } + }, + "id": 4391, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4309:10:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4295:24:33", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "hexValue": "436f6e74726f6c6c6572", + "id": 4394, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4354:12:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "typeString": "literal_string \"Controller\"" + }, + "value": "Controller" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "typeString": "literal_string \"Controller\"" + } + ], + "id": 4393, + "name": "GraphDirectoryInvalidZeroAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4380, + "src": "4321:32:33", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$", + "typeString": "function (bytes memory) pure returns (error)" + } + }, + "id": 4395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4321:46:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 4386, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4287:7:33", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 4396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4287:81:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4397, + "nodeType": "ExpressionStatement", + "src": "4287:81:33" + }, + { + "expression": { + "id": 4402, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4398, + "name": "GRAPH_CONTROLLER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4333, + "src": "4379:16:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 4400, + "name": "controller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4383, + "src": "4410:10:33", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4399, + "name": "IController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 279, + "src": "4398:11:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IController_$279_$", + "typeString": "type(contract IController)" + } + }, + "id": 4401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4398:23:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + } + }, + "src": "4379:42:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + } + }, + "id": 4403, + "nodeType": "ExpressionStatement", + "src": "4379:42:33" + }, + { + "expression": { + "id": 4410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4404, + "name": "GRAPH_TOKEN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4317, + "src": "4431:11:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "4772617068546f6b656e", + "id": 4407, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4484:12:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247", + "typeString": "literal_string \"GraphToken\"" + }, + "value": "GraphToken" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247", + "typeString": "literal_string \"GraphToken\"" + } + ], + "id": 4406, + "name": "_getContractFromController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4652, + "src": "4457:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) view returns (address)" + } + }, + "id": 4408, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4457:40:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4405, + "name": "IGraphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 518, + "src": "4445:11:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IGraphToken_$518_$", + "typeString": "type(contract IGraphToken)" + } + }, + "id": 4409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4445:53:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "src": "4431:67:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 4411, + "nodeType": "ExpressionStatement", + "src": "4431:67:33" + }, + { + "expression": { + "id": 4418, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4412, + "name": "GRAPH_STAKING", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4321, + "src": "4508:13:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "5374616b696e67", + "id": 4415, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4567:9:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034", + "typeString": "literal_string \"Staking\"" + }, + "value": "Staking" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034", + "typeString": "literal_string \"Staking\"" + } + ], + "id": 4414, + "name": "_getContractFromController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4652, + "src": "4540:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) view returns (address)" + } + }, + "id": 4416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4540:37:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4413, + "name": "IHorizonStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2235, + "src": "4524:15:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "type(contract IHorizonStaking)" + } + }, + "id": 4417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4524:54:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "src": "4508:70:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 4419, + "nodeType": "ExpressionStatement", + "src": "4508:70:33" + }, + { + "expression": { + "id": 4426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4420, + "name": "GRAPH_PAYMENTS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4325, + "src": "4588:14:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "47726170685061796d656e7473", + "id": 4423, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4647:15:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f", + "typeString": "literal_string \"GraphPayments\"" + }, + "value": "GraphPayments" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f", + "typeString": "literal_string \"GraphPayments\"" + } + ], + "id": 4422, + "name": "_getContractFromController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4652, + "src": "4620:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) view returns (address)" + } + }, + "id": 4424, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4620:43:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4421, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "4605:14:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", + "typeString": "type(contract IGraphPayments)" + } + }, + "id": 4425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4605:59:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + } + }, + "src": "4588:76:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + } + }, + "id": 4427, + "nodeType": "ExpressionStatement", + "src": "4588:76:33" + }, + { + "expression": { + "id": 4434, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4428, + "name": "GRAPH_PAYMENTS_ESCROW", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4329, + "src": "4674:21:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "5061796d656e7473457363726f77", + "id": 4431, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4741:16:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9", + "typeString": "literal_string \"PaymentsEscrow\"" + }, + "value": "PaymentsEscrow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9", + "typeString": "literal_string \"PaymentsEscrow\"" + } + ], + "id": 4430, + "name": "_getContractFromController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4652, + "src": "4714:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) view returns (address)" + } + }, + "id": 4432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4714:44:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4429, + "name": "IPaymentsEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2514, + "src": "4698:15:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IPaymentsEscrow_$2514_$", + "typeString": "type(contract IPaymentsEscrow)" + } + }, + "id": 4433, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4698:61:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + } + }, + "src": "4674:85:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + } + }, + "id": 4435, + "nodeType": "ExpressionStatement", + "src": "4674:85:33" + }, + { + "expression": { + "id": 4442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4436, + "name": "GRAPH_EPOCH_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4337, + "src": "4769:19:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "45706f63684d616e61676572", + "id": 4439, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4832:14:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063", + "typeString": "literal_string \"EpochManager\"" + }, + "value": "EpochManager" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063", + "typeString": "literal_string \"EpochManager\"" + } + ], + "id": 4438, + "name": "_getContractFromController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4652, + "src": "4805:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) view returns (address)" + } + }, + "id": 4440, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4805:42:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4437, + "name": "IEpochManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 220, + "src": "4791:13:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IEpochManager_$220_$", + "typeString": "type(contract IEpochManager)" + } + }, + "id": 4441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4791:57:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + } + }, + "src": "4769:79:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + } + }, + "id": 4443, + "nodeType": "ExpressionStatement", + "src": "4769:79:33" + }, + { + "expression": { + "id": 4450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4444, + "name": "GRAPH_REWARDS_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4341, + "src": "4858:21:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "526577617264734d616e61676572", + "id": 4447, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4925:16:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761", + "typeString": "literal_string \"RewardsManager\"" + }, + "value": "RewardsManager" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761", + "typeString": "literal_string \"RewardsManager\"" + } + ], + "id": 4446, + "name": "_getContractFromController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4652, + "src": "4898:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) view returns (address)" + } + }, + "id": 4448, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4898:44:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4445, + "name": "IRewardsManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 438, + "src": "4882:15:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRewardsManager_$438_$", + "typeString": "type(contract IRewardsManager)" + } + }, + "id": 4449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4882:61:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "src": "4858:85:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "id": 4451, + "nodeType": "ExpressionStatement", + "src": "4858:85:33" + }, + { + "expression": { + "id": 4458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4452, + "name": "GRAPH_TOKEN_GATEWAY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4345, + "src": "4953:19:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "4772617068546f6b656e47617465776179", + "id": 4455, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5016:19:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0", + "typeString": "literal_string \"GraphTokenGateway\"" + }, + "value": "GraphTokenGateway" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_d362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0", + "typeString": "literal_string \"GraphTokenGateway\"" + } + ], + "id": 4454, + "name": "_getContractFromController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4652, + "src": "4989:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) view returns (address)" + } + }, + "id": 4456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4989:47:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4453, + "name": "ITokenGateway", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 41, + "src": "4975:13:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ITokenGateway_$41_$", + "typeString": "type(contract ITokenGateway)" + } + }, + "id": 4457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4975:62:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + } + }, + "src": "4953:84:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + } + }, + "id": 4459, + "nodeType": "ExpressionStatement", + "src": "4953:84:33" + }, + { + "expression": { + "id": 4466, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4460, + "name": "GRAPH_PROXY_ADMIN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4349, + "src": "5047:17:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "477261706850726f787941646d696e", + "id": 4463, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5111:17:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb", + "typeString": "literal_string \"GraphProxyAdmin\"" + }, + "value": "GraphProxyAdmin" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_ed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb", + "typeString": "literal_string \"GraphProxyAdmin\"" + } + ], + "id": 4462, + "name": "_getContractFromController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4652, + "src": "5084:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) view returns (address)" + } + }, + "id": 4464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5084:45:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4461, + "name": "IGraphProxyAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2215, + "src": "5067:16:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IGraphProxyAdmin_$2215_$", + "typeString": "type(contract IGraphProxyAdmin)" + } + }, + "id": 4465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5067:63:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + } + }, + "src": "5047:83:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + } + }, + "id": 4467, + "nodeType": "ExpressionStatement", + "src": "5047:83:33" + }, + { + "expression": { + "id": 4474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4468, + "name": "GRAPH_CURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4352, + "src": "5140:14:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "4375726174696f6e", + "id": 4471, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5194:10:33", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f", + "typeString": "literal_string \"Curation\"" + }, + "value": "Curation" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_e6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f", + "typeString": "literal_string \"Curation\"" + } + ], + "id": 4470, + "name": "_getContractFromController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4652, + "src": "5167:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) view returns (address)" + } + }, + "id": 4472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5167:38:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4469, + "name": "ICuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 165, + "src": "5157:9:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ICuration_$165_$", + "typeString": "type(contract ICuration)" + } + }, + "id": 4473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5157:49:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "src": "5140:66:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "id": 4475, + "nodeType": "ExpressionStatement", + "src": "5140:66:33" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [ + { + "id": 4479, + "name": "GRAPH_TOKEN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4317, + "src": "5269:11:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + ], + "id": 4478, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5261:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4477, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5261:7:33", + "typeDescriptions": {} + } + }, + "id": 4480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5261:20:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 4483, + "name": "GRAPH_STAKING", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4321, + "src": "5303:13:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + ], + "id": 4482, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5295:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4481, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5295:7:33", + "typeDescriptions": {} + } + }, + "id": 4484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5295:22:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 4487, + "name": "GRAPH_PAYMENTS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4325, + "src": "5339:14:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + } + ], + "id": 4486, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5331:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4485, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5331:7:33", + "typeDescriptions": {} + } + }, + "id": 4488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5331:23:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 4491, + "name": "GRAPH_PAYMENTS_ESCROW", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4329, + "src": "5376:21:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + } + ], + "id": 4490, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5368:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4489, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5368:7:33", + "typeDescriptions": {} + } + }, + "id": 4492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5368:30:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 4495, + "name": "GRAPH_CONTROLLER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4333, + "src": "5420:16:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + } + ], + "id": 4494, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5412:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4493, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5412:7:33", + "typeDescriptions": {} + } + }, + "id": 4496, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5412:25:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 4499, + "name": "GRAPH_EPOCH_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4337, + "src": "5459:19:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + } + ], + "id": 4498, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5451:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4497, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5451:7:33", + "typeDescriptions": {} + } + }, + "id": 4500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5451:28:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 4503, + "name": "GRAPH_REWARDS_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4341, + "src": "5501:21:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + ], + "id": 4502, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5493:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4501, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5493:7:33", + "typeDescriptions": {} + } + }, + "id": 4504, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5493:30:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 4507, + "name": "GRAPH_TOKEN_GATEWAY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4345, + "src": "5545:19:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + } + ], + "id": 4506, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5537:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4505, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5537:7:33", + "typeDescriptions": {} + } + }, + "id": 4508, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5537:28:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 4511, + "name": "GRAPH_PROXY_ADMIN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4349, + "src": "5587:17:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + } + ], + "id": 4510, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5579:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4509, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5579:7:33", + "typeDescriptions": {} + } + }, + "id": 4512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5579:26:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 4515, + "name": "GRAPH_CURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4352, + "src": "5627:14:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + ], + "id": 4514, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5619:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4513, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5619:7:33", + "typeDescriptions": {} + } + }, + "id": 4516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5619:23:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4476, + "name": "GraphDirectoryInitialized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4375, + "src": "5222:25:33", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address,address,address,address,address,address,address,address,address)" + } + }, + "id": 4517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5222:430:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4518, + "nodeType": "EmitStatement", + "src": "5217:435:33" + } + ] + }, + "documentation": { + "id": 4381, + "nodeType": "StructuredDocumentation", + "src": "3965:275:33", + "text": " @notice Constructor for the GraphDirectory contract\n @dev Requirements:\n - `controller` cannot be zero address\n Emits a {GraphDirectoryInitialized} event\n @param controller The address of the Graph Controller contract." + }, + "id": 4520, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4384, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4383, + "mutability": "mutable", + "name": "controller", + "nameLocation": "4265:10:33", + "nodeType": "VariableDeclaration", + "scope": 4520, + "src": "4257:18:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4382, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4257:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4256:20:33" + }, + "returnParameters": { + "id": 4385, + "nodeType": "ParameterList", + "parameters": [], + "src": "4277:0:33" + }, + "scope": 4653, + "src": "4245:1414:33", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4529, + "nodeType": "Block", + "src": "5784:35:33", + "statements": [ + { + "expression": { + "id": 4527, + "name": "GRAPH_TOKEN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4317, + "src": "5801:11:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "functionReturnParameters": 4526, + "id": 4528, + "nodeType": "Return", + "src": "5794:18:33" + } + ] + }, + "documentation": { + "id": 4521, + "nodeType": "StructuredDocumentation", + "src": "5665:55:33", + "text": " @notice Get the Graph Token contract" + }, + "id": 4530, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphToken", + "nameLocation": "5734:11:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4522, + "nodeType": "ParameterList", + "parameters": [], + "src": "5745:2:33" + }, + "returnParameters": { + "id": 4526, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4525, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4530, + "src": "5771:11:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + }, + "typeName": { + "id": 4524, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4523, + "name": "IGraphToken", + "nameLocations": [ + "5771:11:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 518, + "src": "5771:11:33" + }, + "referencedDeclaration": 518, + "src": "5771:11:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "visibility": "internal" + } + ], + "src": "5770:13:33" + }, + "scope": 4653, + "src": "5725:94:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4539, + "nodeType": "Block", + "src": "5954:37:33", + "statements": [ + { + "expression": { + "id": 4537, + "name": "GRAPH_STAKING", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4321, + "src": "5971:13:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "functionReturnParameters": 4536, + "id": 4538, + "nodeType": "Return", + "src": "5964:20:33" + } + ] + }, + "documentation": { + "id": 4531, + "nodeType": "StructuredDocumentation", + "src": "5825:59:33", + "text": " @notice Get the Horizon Staking contract" + }, + "id": 4540, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphStaking", + "nameLocation": "5898:13:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4532, + "nodeType": "ParameterList", + "parameters": [], + "src": "5911:2:33" + }, + "returnParameters": { + "id": 4536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4535, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4540, + "src": "5937:15:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + }, + "typeName": { + "id": 4534, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4533, + "name": "IHorizonStaking", + "nameLocations": [ + "5937:15:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2235, + "src": "5937:15:33" + }, + "referencedDeclaration": 2235, + "src": "5937:15:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "visibility": "internal" + } + ], + "src": "5936:17:33" + }, + "scope": 4653, + "src": "5889:102:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4549, + "nodeType": "Block", + "src": "6125:38:33", + "statements": [ + { + "expression": { + "id": 4547, + "name": "GRAPH_PAYMENTS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4325, + "src": "6142:14:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + } + }, + "functionReturnParameters": 4546, + "id": 4548, + "nodeType": "Return", + "src": "6135:21:33" + } + ] + }, + "documentation": { + "id": 4541, + "nodeType": "StructuredDocumentation", + "src": "5997:58:33", + "text": " @notice Get the Graph Payments contract" + }, + "id": 4550, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphPayments", + "nameLocation": "6069:14:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4542, + "nodeType": "ParameterList", + "parameters": [], + "src": "6083:2:33" + }, + "returnParameters": { + "id": 4546, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4545, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4550, + "src": "6109:14:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + }, + "typeName": { + "id": 4544, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4543, + "name": "IGraphPayments", + "nameLocations": [ + "6109:14:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2211, + "src": "6109:14:33" + }, + "referencedDeclaration": 2211, + "src": "6109:14:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphPayments_$2211", + "typeString": "contract IGraphPayments" + } + }, + "visibility": "internal" + } + ], + "src": "6108:16:33" + }, + "scope": 4653, + "src": "6060:103:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4559, + "nodeType": "Block", + "src": "6305:45:33", + "statements": [ + { + "expression": { + "id": 4557, + "name": "GRAPH_PAYMENTS_ESCROW", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4329, + "src": "6322:21:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + } + }, + "functionReturnParameters": 4556, + "id": 4558, + "nodeType": "Return", + "src": "6315:28:33" + } + ] + }, + "documentation": { + "id": 4551, + "nodeType": "StructuredDocumentation", + "src": "6169:59:33", + "text": " @notice Get the Payments Escrow contract" + }, + "id": 4560, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphPaymentsEscrow", + "nameLocation": "6242:20:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4552, + "nodeType": "ParameterList", + "parameters": [], + "src": "6262:2:33" + }, + "returnParameters": { + "id": 4556, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4555, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4560, + "src": "6288:15:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + }, + "typeName": { + "id": 4554, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4553, + "name": "IPaymentsEscrow", + "nameLocations": [ + "6288:15:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2514, + "src": "6288:15:33" + }, + "referencedDeclaration": 2514, + "src": "6288:15:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", + "typeString": "contract IPaymentsEscrow" + } + }, + "visibility": "internal" + } + ], + "src": "6287:17:33" + }, + "scope": 4653, + "src": "6233:117:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4569, + "nodeType": "Block", + "src": "6485:40:33", + "statements": [ + { + "expression": { + "id": 4567, + "name": "GRAPH_CONTROLLER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4333, + "src": "6502:16:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + } + }, + "functionReturnParameters": 4566, + "id": 4568, + "nodeType": "Return", + "src": "6495:23:33" + } + ] + }, + "documentation": { + "id": 4561, + "nodeType": "StructuredDocumentation", + "src": "6356:60:33", + "text": " @notice Get the Graph Controller contract" + }, + "id": 4570, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphController", + "nameLocation": "6430:16:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4562, + "nodeType": "ParameterList", + "parameters": [], + "src": "6446:2:33" + }, + "returnParameters": { + "id": 4566, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4565, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4570, + "src": "6472:11:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + }, + "typeName": { + "id": 4564, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4563, + "name": "IController", + "nameLocations": [ + "6472:11:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 279, + "src": "6472:11:33" + }, + "referencedDeclaration": 279, + "src": "6472:11:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + } + }, + "visibility": "internal" + } + ], + "src": "6471:13:33" + }, + "scope": 4653, + "src": "6421:104:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4579, + "nodeType": "Block", + "src": "6661:43:33", + "statements": [ + { + "expression": { + "id": 4577, + "name": "GRAPH_EPOCH_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4337, + "src": "6678:19:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + } + }, + "functionReturnParameters": 4576, + "id": 4578, + "nodeType": "Return", + "src": "6671:26:33" + } + ] + }, + "documentation": { + "id": 4571, + "nodeType": "StructuredDocumentation", + "src": "6531:57:33", + "text": " @notice Get the Epoch Manager contract" + }, + "id": 4580, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphEpochManager", + "nameLocation": "6602:18:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4572, + "nodeType": "ParameterList", + "parameters": [], + "src": "6620:2:33" + }, + "returnParameters": { + "id": 4576, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4575, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4580, + "src": "6646:13:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + }, + "typeName": { + "id": 4574, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4573, + "name": "IEpochManager", + "nameLocations": [ + "6646:13:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 220, + "src": "6646:13:33" + }, + "referencedDeclaration": 220, + "src": "6646:13:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + } + }, + "visibility": "internal" + } + ], + "src": "6645:15:33" + }, + "scope": 4653, + "src": "6593:111:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4589, + "nodeType": "Block", + "src": "6846:45:33", + "statements": [ + { + "expression": { + "id": 4587, + "name": "GRAPH_REWARDS_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4341, + "src": "6863:21:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "functionReturnParameters": 4586, + "id": 4588, + "nodeType": "Return", + "src": "6856:28:33" + } + ] + }, + "documentation": { + "id": 4581, + "nodeType": "StructuredDocumentation", + "src": "6710:59:33", + "text": " @notice Get the Rewards Manager contract" + }, + "id": 4590, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphRewardsManager", + "nameLocation": "6783:20:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4582, + "nodeType": "ParameterList", + "parameters": [], + "src": "6803:2:33" + }, + "returnParameters": { + "id": 4586, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4585, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4590, + "src": "6829:15:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + }, + "typeName": { + "id": 4584, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4583, + "name": "IRewardsManager", + "nameLocations": [ + "6829:15:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 438, + "src": "6829:15:33" + }, + "referencedDeclaration": 438, + "src": "6829:15:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "visibility": "internal" + } + ], + "src": "6828:17:33" + }, + "scope": 4653, + "src": "6774:117:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4599, + "nodeType": "Block", + "src": "7033:43:33", + "statements": [ + { + "expression": { + "id": 4597, + "name": "GRAPH_TOKEN_GATEWAY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4345, + "src": "7050:19:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + } + }, + "functionReturnParameters": 4596, + "id": 4598, + "nodeType": "Return", + "src": "7043:26:33" + } + ] + }, + "documentation": { + "id": 4591, + "nodeType": "StructuredDocumentation", + "src": "6897:63:33", + "text": " @notice Get the Graph Token Gateway contract" + }, + "id": 4600, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphTokenGateway", + "nameLocation": "6974:18:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4592, + "nodeType": "ParameterList", + "parameters": [], + "src": "6992:2:33" + }, + "returnParameters": { + "id": 4596, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4595, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4600, + "src": "7018:13:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + }, + "typeName": { + "id": 4594, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4593, + "name": "ITokenGateway", + "nameLocations": [ + "7018:13:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 41, + "src": "7018:13:33" + }, + "referencedDeclaration": 41, + "src": "7018:13:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITokenGateway_$41", + "typeString": "contract ITokenGateway" + } + }, + "visibility": "internal" + } + ], + "src": "7017:15:33" + }, + "scope": 4653, + "src": "6965:111:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4609, + "nodeType": "Block", + "src": "7217:41:33", + "statements": [ + { + "expression": { + "id": 4607, + "name": "GRAPH_PROXY_ADMIN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4349, + "src": "7234:17:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + } + }, + "functionReturnParameters": 4606, + "id": 4608, + "nodeType": "Return", + "src": "7227:24:33" + } + ] + }, + "documentation": { + "id": 4601, + "nodeType": "StructuredDocumentation", + "src": "7082:61:33", + "text": " @notice Get the Graph Proxy Admin contract" + }, + "id": 4610, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphProxyAdmin", + "nameLocation": "7157:16:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4602, + "nodeType": "ParameterList", + "parameters": [], + "src": "7173:2:33" + }, + "returnParameters": { + "id": 4606, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4605, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4610, + "src": "7199:16:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + }, + "typeName": { + "id": 4604, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4603, + "name": "IGraphProxyAdmin", + "nameLocations": [ + "7199:16:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2215, + "src": "7199:16:33" + }, + "referencedDeclaration": 2215, + "src": "7199:16:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", + "typeString": "contract IGraphProxyAdmin" + } + }, + "visibility": "internal" + } + ], + "src": "7198:18:33" + }, + "scope": 4653, + "src": "7148:110:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4619, + "nodeType": "Block", + "src": "7381:38:33", + "statements": [ + { + "expression": { + "id": 4617, + "name": "GRAPH_CURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4352, + "src": "7398:14:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "functionReturnParameters": 4616, + "id": 4618, + "nodeType": "Return", + "src": "7391:21:33" + } + ] + }, + "documentation": { + "id": 4611, + "nodeType": "StructuredDocumentation", + "src": "7264:52:33", + "text": " @notice Get the Curation contract" + }, + "id": 4620, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_graphCuration", + "nameLocation": "7330:14:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4612, + "nodeType": "ParameterList", + "parameters": [], + "src": "7344:2:33" + }, + "returnParameters": { + "id": 4616, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4615, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4620, + "src": "7370:9:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + }, + "typeName": { + "id": 4614, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4613, + "name": "ICuration", + "nameLocations": [ + "7370:9:33" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 165, + "src": "7370:9:33" + }, + "referencedDeclaration": 165, + "src": "7370:9:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "visibility": "internal" + } + ], + "src": "7369:11:33" + }, + "scope": 4653, + "src": "7321:98:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4651, + "nodeType": "Block", + "src": "7768:231:33", + "statements": [ + { + "assignments": [ + 4629 + ], + "declarations": [ + { + "constant": false, + "id": 4629, + "mutability": "mutable", + "name": "contractAddress", + "nameLocation": "7786:15:33", + "nodeType": "VariableDeclaration", + "scope": 4651, + "src": "7778:23:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4628, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7778:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4636, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 4633, + "name": "_contractName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4623, + "src": "7848:13:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4632, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "7838:9:33", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 4634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7838:24:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 4630, + "name": "GRAPH_CONTROLLER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4333, + "src": "7804:16:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IController_$279", + "typeString": "contract IController" + } + }, + "id": 4631, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7821:16:33", + "memberName": "getContractProxy", + "nodeType": "MemberAccess", + "referencedDeclaration": 253, + "src": "7804:33:33", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) view external returns (address)" + } + }, + "id": 4635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7804:59:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7778:85:33" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4638, + "name": "contractAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4629, + "src": "7881:15:33", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 4641, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7908:1:33", + "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": 4640, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7900:7:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4639, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7900:7:33", + "typeDescriptions": {} + } + }, + "id": 4642, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7900:10:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "7881:29:33", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 4645, + "name": "_contractName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4623, + "src": "7945:13:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4644, + "name": "GraphDirectoryInvalidZeroAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4380, + "src": "7912:32:33", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$", + "typeString": "function (bytes memory) pure returns (error)" + } + }, + "id": 4646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7912:47:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 4637, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7873:7:33", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 4647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7873:87:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4648, + "nodeType": "ExpressionStatement", + "src": "7873:87:33" + }, + { + "expression": { + "id": 4649, + "name": "contractAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4629, + "src": "7977:15:33", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4627, + "id": 4650, + "nodeType": "Return", + "src": "7970:22:33" + } + ] + }, + "documentation": { + "id": 4621, + "nodeType": "StructuredDocumentation", + "src": "7425:243:33", + "text": " @notice Get a contract address from the controller\n @dev Requirements:\n - The `_contractName` must be registered in the controller\n @param _contractName The name of the contract to fetch from the controller" + }, + "id": 4652, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getContractFromController", + "nameLocation": "7682:26:33", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4624, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4623, + "mutability": "mutable", + "name": "_contractName", + "nameLocation": "7722:13:33", + "nodeType": "VariableDeclaration", + "scope": 4652, + "src": "7709:26:33", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4622, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7709:5:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "7708:28:33" + }, + "returnParameters": { + "id": 4627, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4626, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4652, + "src": "7759:7:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4625, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7759:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7758:9:33" + }, + "scope": 4653, + "src": "7673:326:33", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 4654, + "src": "1220:6781:33", + "usedErrors": [ + 4380 + ], + "usedEvents": [ + 4375 + ] + } + ], + "src": "46:7956:33" + }, + "id": 33 + }, + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "exportedSymbols": { + "ContextUpgradeable": [ + 5148 + ], + "Initializable": [ + 5102 + ], + "OwnableUpgradeable": [ + 4848 + ] + }, + "id": 4849, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4655, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "102:24:34" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", + "file": "../utils/ContextUpgradeable.sol", + "id": 4657, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4849, + "sourceUnit": 5149, + "src": "128:67:34", + "symbolAliases": [ + { + "foreign": { + "id": 4656, + "name": "ContextUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5148, + "src": "136:18:34", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "file": "../proxy/utils/Initializable.sol", + "id": 4659, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4849, + "sourceUnit": 5103, + "src": "196:63:34", + "symbolAliases": [ + { + "foreign": { + "id": 4658, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "204:13:34", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 4661, + "name": "Initializable", + "nameLocations": [ + "789:13:34" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5102, + "src": "789:13:34" + }, + "id": 4662, + "nodeType": "InheritanceSpecifier", + "src": "789:13:34" + }, + { + "baseName": { + "id": 4663, + "name": "ContextUpgradeable", + "nameLocations": [ + "804:18:34" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5148, + "src": "804:18:34" + }, + "id": 4664, + "nodeType": "InheritanceSpecifier", + "src": "804:18:34" + } + ], + "canonicalName": "OwnableUpgradeable", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 4660, + "nodeType": "StructuredDocumentation", + "src": "261:487:34", + "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner." + }, + "fullyImplemented": true, + "id": 4848, + "linearizedBaseContracts": [ + 4848, + 5148, + 5102 + ], + "name": "OwnableUpgradeable", + "nameLocation": "767:18:34", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "OwnableUpgradeable.OwnableStorage", + "documentation": { + "id": 4665, + "nodeType": "StructuredDocumentation", + "src": "829:65:34", + "text": "@custom:storage-location erc7201:openzeppelin.storage.Ownable" + }, + "id": 4668, + "members": [ + { + "constant": false, + "id": 4667, + "mutability": "mutable", + "name": "_owner", + "nameLocation": "939:6:34", + "nodeType": "VariableDeclaration", + "scope": 4668, + "src": "931:14:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "931:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "name": "OwnableStorage", + "nameLocation": "906:14:34", + "nodeType": "StructDefinition", + "scope": 4848, + "src": "899:53:34", + "visibility": "public" + }, + { + "constant": true, + "id": 4671, + "mutability": "constant", + "name": "OwnableStorageLocation", + "nameLocation": "1094:22:34", + "nodeType": "VariableDeclaration", + "scope": 4848, + "src": "1069:116:34", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4669, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1069:7:34", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "hexValue": "307839303136643039643732643430666461653266643863656163366236323334633737303632313466643339633163643165363039613035323863313939333030", + "id": 4670, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1119:66:34", + "typeDescriptions": { + "typeIdentifier": "t_rational_65173360639460082030725920392146925864023520599682862633725751242436743107328_by_1", + "typeString": "int_const 6517...(69 digits omitted)...7328" + }, + "value": "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" + }, + "visibility": "private" + }, + { + "body": { + "id": 4678, + "nodeType": "Block", + "src": "1270:81:34", + "statements": [ + { + "AST": { + "nativeSrc": "1289:56:34", + "nodeType": "YulBlock", + "src": "1289:56:34", + "statements": [ + { + "nativeSrc": "1303:32:34", + "nodeType": "YulAssignment", + "src": "1303:32:34", + "value": { + "name": "OwnableStorageLocation", + "nativeSrc": "1313:22:34", + "nodeType": "YulIdentifier", + "src": "1313:22:34" + }, + "variableNames": [ + { + "name": "$.slot", + "nativeSrc": "1303:6:34", + "nodeType": "YulIdentifier", + "src": "1303:6:34" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 4675, + "isOffset": false, + "isSlot": true, + "src": "1303:6:34", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 4671, + "isOffset": false, + "isSlot": false, + "src": "1313:22:34", + "valueSize": 1 + } + ], + "id": 4677, + "nodeType": "InlineAssembly", + "src": "1280:65:34" + } + ] + }, + "id": 4679, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getOwnableStorage", + "nameLocation": "1201:18:34", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4672, + "nodeType": "ParameterList", + "parameters": [], + "src": "1219:2:34" + }, + "returnParameters": { + "id": 4676, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4675, + "mutability": "mutable", + "name": "$", + "nameLocation": "1267:1:34", + "nodeType": "VariableDeclaration", + "scope": 4679, + "src": "1244:24:34", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage" + }, + "typeName": { + "id": 4674, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4673, + "name": "OwnableStorage", + "nameLocations": [ + "1244:14:34" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4668, + "src": "1244:14:34" + }, + "referencedDeclaration": 4668, + "src": "1244:14:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage" + } + }, + "visibility": "internal" + } + ], + "src": "1243:26:34" + }, + "scope": 4848, + "src": "1192:159:34", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "documentation": { + "id": 4680, + "nodeType": "StructuredDocumentation", + "src": "1357:85:34", + "text": " @dev The caller account is not authorized to perform an operation." + }, + "errorSelector": "118cdaa7", + "id": 4684, + "name": "OwnableUnauthorizedAccount", + "nameLocation": "1453:26:34", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 4683, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4682, + "mutability": "mutable", + "name": "account", + "nameLocation": "1488:7:34", + "nodeType": "VariableDeclaration", + "scope": 4684, + "src": "1480:15:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4681, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1480:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1479:17:34" + }, + "src": "1447:50:34" + }, + { + "documentation": { + "id": 4685, + "nodeType": "StructuredDocumentation", + "src": "1503:82:34", + "text": " @dev The owner is not a valid owner account. (eg. `address(0)`)" + }, + "errorSelector": "1e4fbdf7", + "id": 4689, + "name": "OwnableInvalidOwner", + "nameLocation": "1596:19:34", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 4688, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4687, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1624:5:34", + "nodeType": "VariableDeclaration", + "scope": 4689, + "src": "1616:13:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4686, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1616:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1615:15:34" + }, + "src": "1590:41:34" + }, + { + "anonymous": false, + "eventSelector": "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "id": 4695, + "name": "OwnershipTransferred", + "nameLocation": "1643:20:34", + "nodeType": "EventDefinition", + "parameters": { + "id": 4694, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4691, + "indexed": true, + "mutability": "mutable", + "name": "previousOwner", + "nameLocation": "1680:13:34", + "nodeType": "VariableDeclaration", + "scope": 4695, + "src": "1664:29:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4690, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1664:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4693, + "indexed": true, + "mutability": "mutable", + "name": "newOwner", + "nameLocation": "1711:8:34", + "nodeType": "VariableDeclaration", + "scope": 4695, + "src": "1695:24:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4692, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1695:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1663:57:34" + }, + "src": "1637:84:34" + }, + { + "body": { + "id": 4707, + "nodeType": "Block", + "src": "1919:55:34", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4704, + "name": "initialOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4698, + "src": "1954:12:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4703, + "name": "__Ownable_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4735, + "src": "1929:24:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 4705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1929:38:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4706, + "nodeType": "ExpressionStatement", + "src": "1929:38:34" + } + ] + }, + "documentation": { + "id": 4696, + "nodeType": "StructuredDocumentation", + "src": "1727:115:34", + "text": " @dev Initializes the contract setting the address provided by the deployer as the initial owner." + }, + "id": 4708, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 4701, + "kind": "modifierInvocation", + "modifierName": { + "id": 4700, + "name": "onlyInitializing", + "nameLocations": [ + "1902:16:34" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "1902:16:34" + }, + "nodeType": "ModifierInvocation", + "src": "1902:16:34" + } + ], + "name": "__Ownable_init", + "nameLocation": "1856:14:34", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4699, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4698, + "mutability": "mutable", + "name": "initialOwner", + "nameLocation": "1879:12:34", + "nodeType": "VariableDeclaration", + "scope": 4708, + "src": "1871:20:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4697, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1871:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1870:22:34" + }, + "returnParameters": { + "id": 4702, + "nodeType": "ParameterList", + "parameters": [], + "src": "1919:0:34" + }, + "scope": 4848, + "src": "1847:127:34", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4734, + "nodeType": "Block", + "src": "2062:153:34", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4715, + "name": "initialOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4710, + "src": "2076:12:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 4718, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2100:1:34", + "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": 4717, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2092:7:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4716, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2092:7:34", + "typeDescriptions": {} + } + }, + "id": 4719, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2092:10:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2076:26:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4729, + "nodeType": "IfStatement", + "src": "2072:95:34", + "trueBody": { + "id": 4728, + "nodeType": "Block", + "src": "2104:63:34", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 4724, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2153:1:34", + "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": 4723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2145:7:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4722, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2145:7:34", + "typeDescriptions": {} + } + }, + "id": 4725, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2145:10:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4721, + "name": "OwnableInvalidOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4689, + "src": "2125:19:34", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 4726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2125:31:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 4727, + "nodeType": "RevertStatement", + "src": "2118:38:34" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 4731, + "name": "initialOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4710, + "src": "2195:12:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4730, + "name": "_transferOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4847, + "src": "2176:18:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 4732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2176:32:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4733, + "nodeType": "ExpressionStatement", + "src": "2176:32:34" + } + ] + }, + "id": 4735, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 4713, + "kind": "modifierInvocation", + "modifierName": { + "id": 4712, + "name": "onlyInitializing", + "nameLocations": [ + "2045:16:34" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "2045:16:34" + }, + "nodeType": "ModifierInvocation", + "src": "2045:16:34" + } + ], + "name": "__Ownable_init_unchained", + "nameLocation": "1989:24:34", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4711, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4710, + "mutability": "mutable", + "name": "initialOwner", + "nameLocation": "2022:12:34", + "nodeType": "VariableDeclaration", + "scope": 4735, + "src": "2014:20:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4709, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2014:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2013:22:34" + }, + "returnParameters": { + "id": 4714, + "nodeType": "ParameterList", + "parameters": [], + "src": "2062:0:34" + }, + "scope": 4848, + "src": "1980:235:34", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4742, + "nodeType": "Block", + "src": "2324:41:34", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4738, + "name": "_checkOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4776, + "src": "2334:11:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 4739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2334:13:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4740, + "nodeType": "ExpressionStatement", + "src": "2334:13:34" + }, + { + "id": 4741, + "nodeType": "PlaceholderStatement", + "src": "2357:1:34" + } + ] + }, + "documentation": { + "id": 4736, + "nodeType": "StructuredDocumentation", + "src": "2221:77:34", + "text": " @dev Throws if called by any account other than the owner." + }, + "id": 4743, + "name": "onlyOwner", + "nameLocation": "2312:9:34", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 4737, + "nodeType": "ParameterList", + "parameters": [], + "src": "2321:2:34" + }, + "src": "2303:62:34", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4758, + "nodeType": "Block", + "src": "2496:89:34", + "statements": [ + { + "assignments": [ + 4751 + ], + "declarations": [ + { + "constant": false, + "id": 4751, + "mutability": "mutable", + "name": "$", + "nameLocation": "2529:1:34", + "nodeType": "VariableDeclaration", + "scope": 4758, + "src": "2506:24:34", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage" + }, + "typeName": { + "id": 4750, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4749, + "name": "OwnableStorage", + "nameLocations": [ + "2506:14:34" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4668, + "src": "2506:14:34" + }, + "referencedDeclaration": 4668, + "src": "2506:14:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage" + } + }, + "visibility": "internal" + } + ], + "id": 4754, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4752, + "name": "_getOwnableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4679, + "src": "2533:18:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_OwnableStorage_$4668_storage_ptr_$", + "typeString": "function () pure returns (struct OwnableUpgradeable.OwnableStorage storage pointer)" + } + }, + "id": 4753, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2533:20:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2506:47:34" + }, + { + "expression": { + "expression": { + "id": 4755, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4751, + "src": "2570:1:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" + } + }, + "id": 4756, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2572:6:34", + "memberName": "_owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 4667, + "src": "2570:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4748, + "id": 4757, + "nodeType": "Return", + "src": "2563:15:34" + } + ] + }, + "documentation": { + "id": 4744, + "nodeType": "StructuredDocumentation", + "src": "2371:65:34", + "text": " @dev Returns the address of the current owner." + }, + "functionSelector": "8da5cb5b", + "id": 4759, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "owner", + "nameLocation": "2450:5:34", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4745, + "nodeType": "ParameterList", + "parameters": [], + "src": "2455:2:34" + }, + "returnParameters": { + "id": 4748, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4747, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4759, + "src": "2487:7:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4746, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2487:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2486:9:34" + }, + "scope": 4848, + "src": "2441:144:34", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 4775, + "nodeType": "Block", + "src": "2703:117:34", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4767, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4763, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4759, + "src": "2717:5:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 4764, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2717:7:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4765, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5130, + "src": "2728:10:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 4766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2728:12:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2717:23:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4774, + "nodeType": "IfStatement", + "src": "2713:101:34", + "trueBody": { + "id": 4773, + "nodeType": "Block", + "src": "2742:72:34", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4769, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5130, + "src": "2790:10:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 4770, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2790:12:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4768, + "name": "OwnableUnauthorizedAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4684, + "src": "2763:26:34", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 4771, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2763:40:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 4772, + "nodeType": "RevertStatement", + "src": "2756:47:34" + } + ] + } + } + ] + }, + "documentation": { + "id": 4760, + "nodeType": "StructuredDocumentation", + "src": "2591:62:34", + "text": " @dev Throws if the sender is not the owner." + }, + "id": 4776, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkOwner", + "nameLocation": "2667:11:34", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4761, + "nodeType": "ParameterList", + "parameters": [], + "src": "2678:2:34" + }, + "returnParameters": { + "id": 4762, + "nodeType": "ParameterList", + "parameters": [], + "src": "2703:0:34" + }, + "scope": 4848, + "src": "2658:162:34", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 4789, + "nodeType": "Block", + "src": "3209:47:34", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 4785, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3246:1:34", + "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": 4784, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3238:7:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4783, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3238:7:34", + "typeDescriptions": {} + } + }, + "id": 4786, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3238:10:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4782, + "name": "_transferOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4847, + "src": "3219:18:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 4787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3219:30:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4788, + "nodeType": "ExpressionStatement", + "src": "3219:30:34" + } + ] + }, + "documentation": { + "id": 4777, + "nodeType": "StructuredDocumentation", + "src": "2826:324:34", + "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner." + }, + "functionSelector": "715018a6", + "id": 4790, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 4780, + "kind": "modifierInvocation", + "modifierName": { + "id": 4779, + "name": "onlyOwner", + "nameLocations": [ + "3199:9:34" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "3199:9:34" + }, + "nodeType": "ModifierInvocation", + "src": "3199:9:34" + } + ], + "name": "renounceOwnership", + "nameLocation": "3164:17:34", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4778, + "nodeType": "ParameterList", + "parameters": [], + "src": "3181:2:34" + }, + "returnParameters": { + "id": 4781, + "nodeType": "ParameterList", + "parameters": [], + "src": "3209:0:34" + }, + "scope": 4848, + "src": "3155:101:34", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 4817, + "nodeType": "Block", + "src": "3475:145:34", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4798, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4793, + "src": "3489:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 4801, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3509:1:34", + "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": 4800, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3501:7:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4799, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3501:7:34", + "typeDescriptions": {} + } + }, + "id": 4802, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3501:10:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3489:22:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4812, + "nodeType": "IfStatement", + "src": "3485:91:34", + "trueBody": { + "id": 4811, + "nodeType": "Block", + "src": "3513:63:34", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 4807, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3562:1:34", + "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": 4806, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3554:7:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4805, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3554:7:34", + "typeDescriptions": {} + } + }, + "id": 4808, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3554:10:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4804, + "name": "OwnableInvalidOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4689, + "src": "3534:19:34", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 4809, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3534:31:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 4810, + "nodeType": "RevertStatement", + "src": "3527:38:34" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 4814, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4793, + "src": "3604:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4813, + "name": "_transferOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4847, + "src": "3585:18:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 4815, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3585:28:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4816, + "nodeType": "ExpressionStatement", + "src": "3585:28:34" + } + ] + }, + "documentation": { + "id": 4791, + "nodeType": "StructuredDocumentation", + "src": "3262:138:34", + "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner." + }, + "functionSelector": "f2fde38b", + "id": 4818, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 4796, + "kind": "modifierInvocation", + "modifierName": { + "id": 4795, + "name": "onlyOwner", + "nameLocations": [ + "3465:9:34" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "3465:9:34" + }, + "nodeType": "ModifierInvocation", + "src": "3465:9:34" + } + ], + "name": "transferOwnership", + "nameLocation": "3414:17:34", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4794, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4793, + "mutability": "mutable", + "name": "newOwner", + "nameLocation": "3440:8:34", + "nodeType": "VariableDeclaration", + "scope": 4818, + "src": "3432:16:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4792, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3432:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3431:18:34" + }, + "returnParameters": { + "id": 4797, + "nodeType": "ParameterList", + "parameters": [], + "src": "3475:0:34" + }, + "scope": 4848, + "src": "3405:215:34", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 4846, + "nodeType": "Block", + "src": "3837:185:34", + "statements": [ + { + "assignments": [ + 4826 + ], + "declarations": [ + { + "constant": false, + "id": 4826, + "mutability": "mutable", + "name": "$", + "nameLocation": "3870:1:34", + "nodeType": "VariableDeclaration", + "scope": 4846, + "src": "3847:24:34", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage" + }, + "typeName": { + "id": 4825, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4824, + "name": "OwnableStorage", + "nameLocations": [ + "3847:14:34" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4668, + "src": "3847:14:34" + }, + "referencedDeclaration": 4668, + "src": "3847:14:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage" + } + }, + "visibility": "internal" + } + ], + "id": 4829, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4827, + "name": "_getOwnableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4679, + "src": "3874:18:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_OwnableStorage_$4668_storage_ptr_$", + "typeString": "function () pure returns (struct OwnableUpgradeable.OwnableStorage storage pointer)" + } + }, + "id": 4828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3874:20:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3847:47:34" + }, + { + "assignments": [ + 4831 + ], + "declarations": [ + { + "constant": false, + "id": 4831, + "mutability": "mutable", + "name": "oldOwner", + "nameLocation": "3912:8:34", + "nodeType": "VariableDeclaration", + "scope": 4846, + "src": "3904:16:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4830, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3904:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4834, + "initialValue": { + "expression": { + "id": 4832, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4826, + "src": "3923:1:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" + } + }, + "id": 4833, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3925:6:34", + "memberName": "_owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 4667, + "src": "3923:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3904:27:34" + }, + { + "expression": { + "id": 4839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4835, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4826, + "src": "3941:1:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", + "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" + } + }, + "id": 4837, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3943:6:34", + "memberName": "_owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 4667, + "src": "3941:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4838, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4821, + "src": "3952:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3941:19:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4840, + "nodeType": "ExpressionStatement", + "src": "3941:19:34" + }, + { + "eventCall": { + "arguments": [ + { + "id": 4842, + "name": "oldOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4831, + "src": "3996:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4843, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4821, + "src": "4006:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4841, + "name": "OwnershipTransferred", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4695, + "src": "3975:20:34", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 4844, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3975:40:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4845, + "nodeType": "EmitStatement", + "src": "3970:45:34" + } + ] + }, + "documentation": { + "id": 4819, + "nodeType": "StructuredDocumentation", + "src": "3626:143:34", + "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction." + }, + "id": 4847, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transferOwnership", + "nameLocation": "3783:18:34", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4822, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4821, + "mutability": "mutable", + "name": "newOwner", + "nameLocation": "3810:8:34", + "nodeType": "VariableDeclaration", + "scope": 4847, + "src": "3802:16:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4820, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3802:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3801:18:34" + }, + "returnParameters": { + "id": 4823, + "nodeType": "ParameterList", + "parameters": [], + "src": "3837:0:34" + }, + "scope": 4848, + "src": "3774:248:34", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 4849, + "src": "749:3275:34", + "usedErrors": [ + 4684, + 4689, + 4865, + 4868 + ], + "usedEvents": [ + 4695, + 4873 + ] + } + ], + "src": "102:3923:34" + }, + "id": 34 + }, + "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "exportedSymbols": { + "Initializable": [ + 5102 + ] + }, + "id": 5103, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4850, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "113:24:35" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "Initializable", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 4851, + "nodeType": "StructuredDocumentation", + "src": "139:2209:35", + "text": " @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n case an upgrade adds a module that needs to be initialized.\n For example:\n [.hljs-theme-light.nopadding]\n ```solidity\n contract MyToken is ERC20Upgradeable {\n function initialize() initializer public {\n __ERC20_init(\"MyToken\", \"MTK\");\n }\n }\n contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n function initializeV2() reinitializer(2) public {\n __ERC20Permit_init(\"MyToken\");\n }\n }\n ```\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n _disableInitializers();\n }\n ```\n ====" + }, + "fullyImplemented": true, + "id": 5102, + "linearizedBaseContracts": [ + 5102 + ], + "name": "Initializable", + "nameLocation": "2367:13:35", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "Initializable.InitializableStorage", + "documentation": { + "id": 4852, + "nodeType": "StructuredDocumentation", + "src": "2387:293:35", + "text": " @dev Storage of the initializable contract.\n It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n when using with upgradeable contracts.\n @custom:storage-location erc7201:openzeppelin.storage.Initializable" + }, + "id": 4859, + "members": [ + { + "constant": false, + "id": 4855, + "mutability": "mutable", + "name": "_initialized", + "nameLocation": "2820:12:35", + "nodeType": "VariableDeclaration", + "scope": 4859, + "src": "2813:19:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 4854, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2813:6:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4858, + "mutability": "mutable", + "name": "_initializing", + "nameLocation": "2955:13:35", + "nodeType": "VariableDeclaration", + "scope": 4859, + "src": "2950:18:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4857, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2950:4:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "InitializableStorage", + "nameLocation": "2692:20:35", + "nodeType": "StructDefinition", + "scope": 5102, + "src": "2685:290:35", + "visibility": "public" + }, + { + "constant": true, + "id": 4862, + "mutability": "constant", + "name": "INITIALIZABLE_STORAGE", + "nameLocation": "3123:21:35", + "nodeType": "VariableDeclaration", + "scope": 5102, + "src": "3098:115:35", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4860, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3098:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "hexValue": "307866306335376531363834306466303430663135303838646332663831666533393163333932336265633733653233613936363265666339633232396336613030", + "id": 4861, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3147:66:35", + "typeDescriptions": { + "typeIdentifier": "t_rational_108904022758810753673719992590105913556127789646572562039383141376366747609600_by_1", + "typeString": "int_const 1089...(70 digits omitted)...9600" + }, + "value": "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00" + }, + "visibility": "private" + }, + { + "documentation": { + "id": 4863, + "nodeType": "StructuredDocumentation", + "src": "3220:60:35", + "text": " @dev The contract is already initialized." + }, + "errorSelector": "f92ee8a9", + "id": 4865, + "name": "InvalidInitialization", + "nameLocation": "3291:21:35", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 4864, + "nodeType": "ParameterList", + "parameters": [], + "src": "3312:2:35" + }, + "src": "3285:30:35" + }, + { + "documentation": { + "id": 4866, + "nodeType": "StructuredDocumentation", + "src": "3321:57:35", + "text": " @dev The contract is not initializing." + }, + "errorSelector": "d7e6bcf8", + "id": 4868, + "name": "NotInitializing", + "nameLocation": "3389:15:35", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 4867, + "nodeType": "ParameterList", + "parameters": [], + "src": "3404:2:35" + }, + "src": "3383:24:35" + }, + { + "anonymous": false, + "documentation": { + "id": 4869, + "nodeType": "StructuredDocumentation", + "src": "3413:90:35", + "text": " @dev Triggered when the contract has been initialized or reinitialized." + }, + "eventSelector": "c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2", + "id": 4873, + "name": "Initialized", + "nameLocation": "3514:11:35", + "nodeType": "EventDefinition", + "parameters": { + "id": 4872, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4871, + "indexed": false, + "mutability": "mutable", + "name": "version", + "nameLocation": "3533:7:35", + "nodeType": "VariableDeclaration", + "scope": 4873, + "src": "3526:14:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 4870, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "3526:6:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "3525:16:35" + }, + "src": "3508:34:35" + }, + { + "body": { + "id": 4955, + "nodeType": "Block", + "src": "4092:1081:35", + "statements": [ + { + "assignments": [ + 4878 + ], + "declarations": [ + { + "constant": false, + "id": 4878, + "mutability": "mutable", + "name": "$", + "nameLocation": "4187:1:35", + "nodeType": "VariableDeclaration", + "scope": 4955, + "src": "4158:30:35", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage" + }, + "typeName": { + "id": 4877, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4876, + "name": "InitializableStorage", + "nameLocations": [ + "4158:20:35" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4859, + "src": "4158:20:35" + }, + "referencedDeclaration": 4859, + "src": "4158:20:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage" + } + }, + "visibility": "internal" + } + ], + "id": 4881, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4879, + "name": "_getInitializableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5101, + "src": "4191:24:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", + "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" + } + }, + "id": 4880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4191:26:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4158:59:35" + }, + { + "assignments": [ + 4883 + ], + "declarations": [ + { + "constant": false, + "id": 4883, + "mutability": "mutable", + "name": "isTopLevelCall", + "nameLocation": "4284:14:35", + "nodeType": "VariableDeclaration", + "scope": 4955, + "src": "4279:19:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4882, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4279:4:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 4887, + "initialValue": { + "id": 4886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4301:16:35", + "subExpression": { + "expression": { + "id": 4884, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4878, + "src": "4302:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4885, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4304:13:35", + "memberName": "_initializing", + "nodeType": "MemberAccess", + "referencedDeclaration": 4858, + "src": "4302:15:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4279:38:35" + }, + { + "assignments": [ + 4889 + ], + "declarations": [ + { + "constant": false, + "id": 4889, + "mutability": "mutable", + "name": "initialized", + "nameLocation": "4334:11:35", + "nodeType": "VariableDeclaration", + "scope": 4955, + "src": "4327:18:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 4888, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4327:6:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 4892, + "initialValue": { + "expression": { + "id": 4890, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4878, + "src": "4348:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4891, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4350:12:35", + "memberName": "_initialized", + "nodeType": "MemberAccess", + "referencedDeclaration": 4855, + "src": "4348:14:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4327:35:35" + }, + { + "assignments": [ + 4894 + ], + "declarations": [ + { + "constant": false, + "id": 4894, + "mutability": "mutable", + "name": "initialSetup", + "nameLocation": "4711:12:35", + "nodeType": "VariableDeclaration", + "scope": 4955, + "src": "4706:17:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4893, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4706:4:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 4900, + "initialValue": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 4897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4895, + "name": "initialized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4889, + "src": "4726:11:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4896, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4741:1:35", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4726:16:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 4898, + "name": "isTopLevelCall", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4883, + "src": "4746:14:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "4726:34:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4706:54:35" + }, + { + "assignments": [ + 4902 + ], + "declarations": [ + { + "constant": false, + "id": 4902, + "mutability": "mutable", + "name": "construction", + "nameLocation": "4775:12:35", + "nodeType": "VariableDeclaration", + "scope": 4955, + "src": "4770:17:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4901, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4770:4:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 4915, + "initialValue": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 4905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4903, + "name": "initialized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4889, + "src": "4790:11:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "31", + "id": 4904, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4805:1:35", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "4790:16:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4913, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "arguments": [ + { + "id": 4908, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "4818:4:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Initializable_$5102", + "typeString": "contract Initializable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Initializable_$5102", + "typeString": "contract Initializable" + } + ], + "id": 4907, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4810:7:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4906, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4810:7:35", + "typeDescriptions": {} + } + }, + "id": 4909, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4810:13:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4824:4:35", + "memberName": "code", + "nodeType": "MemberAccess", + "src": "4810:18:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 4911, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4829:6:35", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4810:25:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4912, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4839:1:35", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4810:30:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "4790:50:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4770:70:35" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4855:13:35", + "subExpression": { + "id": 4916, + "name": "initialSetup", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4894, + "src": "4856:12:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 4919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4872:13:35", + "subExpression": { + "id": 4918, + "name": "construction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4902, + "src": "4873:12:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "4855:30:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4925, + "nodeType": "IfStatement", + "src": "4851:91:35", + "trueBody": { + "id": 4924, + "nodeType": "Block", + "src": "4887:55:35", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4921, + "name": "InvalidInitialization", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4865, + "src": "4908:21:35", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 4922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4908:23:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 4923, + "nodeType": "RevertStatement", + "src": "4901:30:35" + } + ] + } + }, + { + "expression": { + "id": 4930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4926, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4878, + "src": "4951:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4928, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4953:12:35", + "memberName": "_initialized", + "nodeType": "MemberAccess", + "referencedDeclaration": 4855, + "src": "4951:14:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "31", + "id": 4929, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4968:1:35", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "4951:18:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 4931, + "nodeType": "ExpressionStatement", + "src": "4951:18:35" + }, + { + "condition": { + "id": 4932, + "name": "isTopLevelCall", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4883, + "src": "4983:14:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4940, + "nodeType": "IfStatement", + "src": "4979:67:35", + "trueBody": { + "id": 4939, + "nodeType": "Block", + "src": "4999:47:35", + "statements": [ + { + "expression": { + "id": 4937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4933, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4878, + "src": "5013:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4935, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "5015:13:35", + "memberName": "_initializing", + "nodeType": "MemberAccess", + "referencedDeclaration": 4858, + "src": "5013:15:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 4936, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5031:4:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "5013:22:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4938, + "nodeType": "ExpressionStatement", + "src": "5013:22:35" + } + ] + } + }, + { + "id": 4941, + "nodeType": "PlaceholderStatement", + "src": "5055:1:35" + }, + { + "condition": { + "id": 4942, + "name": "isTopLevelCall", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4883, + "src": "5070:14:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4954, + "nodeType": "IfStatement", + "src": "5066:101:35", + "trueBody": { + "id": 4953, + "nodeType": "Block", + "src": "5086:81:35", + "statements": [ + { + "expression": { + "id": 4947, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4943, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4878, + "src": "5100:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4945, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "5102:13:35", + "memberName": "_initializing", + "nodeType": "MemberAccess", + "referencedDeclaration": 4858, + "src": "5100:15:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "66616c7365", + "id": 4946, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5118:5:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "5100:23:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4948, + "nodeType": "ExpressionStatement", + "src": "5100:23:35" + }, + { + "eventCall": { + "arguments": [ + { + "hexValue": "31", + "id": 4950, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5154:1:35", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "id": 4949, + "name": "Initialized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4873, + "src": "5142:11:35", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$", + "typeString": "function (uint64)" + } + }, + "id": 4951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5142:14:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4952, + "nodeType": "EmitStatement", + "src": "5137:19:35" + } + ] + } + } + ] + }, + "documentation": { + "id": 4874, + "nodeType": "StructuredDocumentation", + "src": "3548:516:35", + "text": " @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n `onlyInitializing` functions can be used to initialize parent contracts.\n Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n production.\n Emits an {Initialized} event." + }, + "id": 4956, + "name": "initializer", + "nameLocation": "4078:11:35", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 4875, + "nodeType": "ParameterList", + "parameters": [], + "src": "4089:2:35" + }, + "src": "4069:1104:35", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5002, + "nodeType": "Block", + "src": "6291:392:35", + "statements": [ + { + "assignments": [ + 4963 + ], + "declarations": [ + { + "constant": false, + "id": 4963, + "mutability": "mutable", + "name": "$", + "nameLocation": "6386:1:35", + "nodeType": "VariableDeclaration", + "scope": 5002, + "src": "6357:30:35", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage" + }, + "typeName": { + "id": 4962, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4961, + "name": "InitializableStorage", + "nameLocations": [ + "6357:20:35" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4859, + "src": "6357:20:35" + }, + "referencedDeclaration": 4859, + "src": "6357:20:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage" + } + }, + "visibility": "internal" + } + ], + "id": 4966, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4964, + "name": "_getInitializableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5101, + "src": "6390:24:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", + "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" + } + }, + "id": 4965, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6390:26:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6357:59:35" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4973, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 4967, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4963, + "src": "6431:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4968, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6433:13:35", + "memberName": "_initializing", + "nodeType": "MemberAccess", + "referencedDeclaration": 4858, + "src": "6431:15:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 4972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 4969, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4963, + "src": "6450:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4970, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6452:12:35", + "memberName": "_initialized", + "nodeType": "MemberAccess", + "referencedDeclaration": 4855, + "src": "6450:14:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 4971, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4959, + "src": "6468:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "6450:25:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6431:44:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4978, + "nodeType": "IfStatement", + "src": "6427:105:35", + "trueBody": { + "id": 4977, + "nodeType": "Block", + "src": "6477:55:35", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4974, + "name": "InvalidInitialization", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4865, + "src": "6498:21:35", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 4975, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6498:23:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 4976, + "nodeType": "RevertStatement", + "src": "6491:30:35" + } + ] + } + }, + { + "expression": { + "id": 4983, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4979, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4963, + "src": "6541:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4981, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6543:12:35", + "memberName": "_initialized", + "nodeType": "MemberAccess", + "referencedDeclaration": 4855, + "src": "6541:14:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4982, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4959, + "src": "6558:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "6541:24:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 4984, + "nodeType": "ExpressionStatement", + "src": "6541:24:35" + }, + { + "expression": { + "id": 4989, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4985, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4963, + "src": "6575:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4987, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6577:13:35", + "memberName": "_initializing", + "nodeType": "MemberAccess", + "referencedDeclaration": 4858, + "src": "6575:15:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 4988, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6593:4:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "6575:22:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4990, + "nodeType": "ExpressionStatement", + "src": "6575:22:35" + }, + { + "id": 4991, + "nodeType": "PlaceholderStatement", + "src": "6607:1:35" + }, + { + "expression": { + "id": 4996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4992, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4963, + "src": "6618:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 4994, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6620:13:35", + "memberName": "_initializing", + "nodeType": "MemberAccess", + "referencedDeclaration": 4858, + "src": "6618:15:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "66616c7365", + "id": 4995, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6636:5:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "6618:23:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4997, + "nodeType": "ExpressionStatement", + "src": "6618:23:35" + }, + { + "eventCall": { + "arguments": [ + { + "id": 4999, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4959, + "src": "6668:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 4998, + "name": "Initialized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4873, + "src": "6656:11:35", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$", + "typeString": "function (uint64)" + } + }, + "id": 5000, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6656:20:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5001, + "nodeType": "EmitStatement", + "src": "6651:25:35" + } + ] + }, + "documentation": { + "id": 4957, + "nodeType": "StructuredDocumentation", + "src": "5179:1068:35", + "text": " @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n used to initialize parent contracts.\n A reinitializer may be used after the original initialization step. This is essential to configure modules that\n are added through upgrades and that require initialization.\n When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n cannot be nested. If one is invoked in the context of another, execution will revert.\n Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n a contract, executing them in the right order is up to the developer or operator.\n WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n Emits an {Initialized} event." + }, + "id": 5003, + "name": "reinitializer", + "nameLocation": "6261:13:35", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 4960, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4959, + "mutability": "mutable", + "name": "version", + "nameLocation": "6282:7:35", + "nodeType": "VariableDeclaration", + "scope": 5003, + "src": "6275:14:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 4958, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6275:6:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "6274:16:35" + }, + "src": "6252:431:35", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5010, + "nodeType": "Block", + "src": "6921:48:35", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5006, + "name": "_checkInitializing", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5024, + "src": "6931:18:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 5007, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6931:20:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5008, + "nodeType": "ExpressionStatement", + "src": "6931:20:35" + }, + { + "id": 5009, + "nodeType": "PlaceholderStatement", + "src": "6961:1:35" + } + ] + }, + "documentation": { + "id": 5004, + "nodeType": "StructuredDocumentation", + "src": "6689:199:35", + "text": " @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} and {reinitializer} modifiers, directly or indirectly." + }, + "id": 5011, + "name": "onlyInitializing", + "nameLocation": "6902:16:35", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 5005, + "nodeType": "ParameterList", + "parameters": [], + "src": "6918:2:35" + }, + "src": "6893:76:35", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5023, + "nodeType": "Block", + "src": "7136:89:35", + "statements": [ + { + "condition": { + "id": 5017, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7150:18:35", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5015, + "name": "_isInitializing", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5092, + "src": "7151:15:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 5016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7151:17:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5022, + "nodeType": "IfStatement", + "src": "7146:73:35", + "trueBody": { + "id": 5021, + "nodeType": "Block", + "src": "7170:49:35", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5018, + "name": "NotInitializing", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4868, + "src": "7191:15:35", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 5019, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7191:17:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 5020, + "nodeType": "RevertStatement", + "src": "7184:24:35" + } + ] + } + } + ] + }, + "documentation": { + "id": 5012, + "nodeType": "StructuredDocumentation", + "src": "6975:104:35", + "text": " @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}." + }, + "id": 5024, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkInitializing", + "nameLocation": "7093:18:35", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5013, + "nodeType": "ParameterList", + "parameters": [], + "src": "7111:2:35" + }, + "returnParameters": { + "id": 5014, + "nodeType": "ParameterList", + "parameters": [], + "src": "7136:0:35" + }, + "scope": 5102, + "src": "7084:141:35", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5069, + "nodeType": "Block", + "src": "7760:373:35", + "statements": [ + { + "assignments": [ + 5030 + ], + "declarations": [ + { + "constant": false, + "id": 5030, + "mutability": "mutable", + "name": "$", + "nameLocation": "7855:1:35", + "nodeType": "VariableDeclaration", + "scope": 5069, + "src": "7826:30:35", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage" + }, + "typeName": { + "id": 5029, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5028, + "name": "InitializableStorage", + "nameLocations": [ + "7826:20:35" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4859, + "src": "7826:20:35" + }, + "referencedDeclaration": 4859, + "src": "7826:20:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage" + } + }, + "visibility": "internal" + } + ], + "id": 5033, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5031, + "name": "_getInitializableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5101, + "src": "7859:24:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", + "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" + } + }, + "id": 5032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7859:26:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7826:59:35" + }, + { + "condition": { + "expression": { + "id": 5034, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5030, + "src": "7900:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 5035, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7902:13:35", + "memberName": "_initializing", + "nodeType": "MemberAccess", + "referencedDeclaration": 4858, + "src": "7900:15:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5040, + "nodeType": "IfStatement", + "src": "7896:76:35", + "trueBody": { + "id": 5039, + "nodeType": "Block", + "src": "7917:55:35", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5036, + "name": "InvalidInitialization", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4865, + "src": "7938:21:35", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 5037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7938:23:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 5038, + "nodeType": "RevertStatement", + "src": "7931:30:35" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 5048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5041, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5030, + "src": "7985:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 5042, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7987:12:35", + "memberName": "_initialized", + "nodeType": "MemberAccess", + "referencedDeclaration": 4855, + "src": "7985:14:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 5045, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8008:6:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 5044, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "8008:6:35", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + } + ], + "id": 5043, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "8003:4:35", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 5046, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8003:12:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint64", + "typeString": "type(uint64)" + } + }, + "id": 5047, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8016:3:35", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "8003:16:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "7985:34:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5068, + "nodeType": "IfStatement", + "src": "7981:146:35", + "trueBody": { + "id": 5067, + "nodeType": "Block", + "src": "8021:106:35", + "statements": [ + { + "expression": { + "id": 5057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 5049, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5030, + "src": "8035:1:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 5051, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "8037:12:35", + "memberName": "_initialized", + "nodeType": "MemberAccess", + "referencedDeclaration": 4855, + "src": "8035:14:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "arguments": [ + { + "id": 5054, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8057:6:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 5053, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "8057:6:35", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + } + ], + "id": 5052, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "8052:4:35", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 5055, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8052:12:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint64", + "typeString": "type(uint64)" + } + }, + "id": 5056, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8065:3:35", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "8052:16:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "8035:33:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 5058, + "nodeType": "ExpressionStatement", + "src": "8035:33:35" + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "arguments": [ + { + "id": 5062, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8104:6:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 5061, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "8104:6:35", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + } + ], + "id": 5060, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "8099:4:35", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 5063, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8099:12:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint64", + "typeString": "type(uint64)" + } + }, + "id": 5064, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8112:3:35", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "8099:16:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 5059, + "name": "Initialized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4873, + "src": "8087:11:35", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$", + "typeString": "function (uint64)" + } + }, + "id": 5065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8087:29:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5066, + "nodeType": "EmitStatement", + "src": "8082:34:35" + } + ] + } + } + ] + }, + "documentation": { + "id": 5025, + "nodeType": "StructuredDocumentation", + "src": "7231:475:35", + "text": " @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n through proxies.\n Emits an {Initialized} event the first time it is successfully executed." + }, + "id": 5070, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_disableInitializers", + "nameLocation": "7720:20:35", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5026, + "nodeType": "ParameterList", + "parameters": [], + "src": "7740:2:35" + }, + "returnParameters": { + "id": 5027, + "nodeType": "ParameterList", + "parameters": [], + "src": "7760:0:35" + }, + "scope": 5102, + "src": "7711:422:35", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5080, + "nodeType": "Block", + "src": "8308:63:35", + "statements": [ + { + "expression": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5076, + "name": "_getInitializableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5101, + "src": "8325:24:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", + "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" + } + }, + "id": 5077, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8325:26:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 5078, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8352:12:35", + "memberName": "_initialized", + "nodeType": "MemberAccess", + "referencedDeclaration": 4855, + "src": "8325:39:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 5075, + "id": 5079, + "nodeType": "Return", + "src": "8318:46:35" + } + ] + }, + "documentation": { + "id": 5071, + "nodeType": "StructuredDocumentation", + "src": "8139:99:35", + "text": " @dev Returns the highest version that has been initialized. See {reinitializer}." + }, + "id": 5081, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getInitializedVersion", + "nameLocation": "8252:22:35", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5072, + "nodeType": "ParameterList", + "parameters": [], + "src": "8274:2:35" + }, + "returnParameters": { + "id": 5075, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5074, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5081, + "src": "8300:6:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 5073, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "8300:6:35", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "8299:8:35" + }, + "scope": 5102, + "src": "8243:128:35", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5091, + "nodeType": "Block", + "src": "8543:64:35", + "statements": [ + { + "expression": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5087, + "name": "_getInitializableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5101, + "src": "8560:24:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", + "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" + } + }, + "id": 5088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8560:26:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage storage pointer" + } + }, + "id": 5089, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8587:13:35", + "memberName": "_initializing", + "nodeType": "MemberAccess", + "referencedDeclaration": 4858, + "src": "8560:40:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 5086, + "id": 5090, + "nodeType": "Return", + "src": "8553:47:35" + } + ] + }, + "documentation": { + "id": 5082, + "nodeType": "StructuredDocumentation", + "src": "8377:105:35", + "text": " @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}." + }, + "id": 5092, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isInitializing", + "nameLocation": "8496:15:35", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5083, + "nodeType": "ParameterList", + "parameters": [], + "src": "8511:2:35" + }, + "returnParameters": { + "id": 5086, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5085, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5092, + "src": "8537:4:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5084, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8537:4:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8536:6:35" + }, + "scope": 5102, + "src": "8487:120:35", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5100, + "nodeType": "Block", + "src": "8827:80:35", + "statements": [ + { + "AST": { + "nativeSrc": "8846:55:35", + "nodeType": "YulBlock", + "src": "8846:55:35", + "statements": [ + { + "nativeSrc": "8860:31:35", + "nodeType": "YulAssignment", + "src": "8860:31:35", + "value": { + "name": "INITIALIZABLE_STORAGE", + "nativeSrc": "8870:21:35", + "nodeType": "YulIdentifier", + "src": "8870:21:35" + }, + "variableNames": [ + { + "name": "$.slot", + "nativeSrc": "8860:6:35", + "nodeType": "YulIdentifier", + "src": "8860:6:35" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 5097, + "isOffset": false, + "isSlot": true, + "src": "8860:6:35", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 4862, + "isOffset": false, + "isSlot": false, + "src": "8870:21:35", + "valueSize": 1 + } + ], + "id": 5099, + "nodeType": "InlineAssembly", + "src": "8837:64:35" + } + ] + }, + "documentation": { + "id": 5093, + "nodeType": "StructuredDocumentation", + "src": "8613:67:35", + "text": " @dev Returns a pointer to the storage namespace." + }, + "id": 5101, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getInitializableStorage", + "nameLocation": "8746:24:35", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5094, + "nodeType": "ParameterList", + "parameters": [], + "src": "8770:2:35" + }, + "returnParameters": { + "id": 5098, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5097, + "mutability": "mutable", + "name": "$", + "nameLocation": "8824:1:35", + "nodeType": "VariableDeclaration", + "scope": 5101, + "src": "8795:30:35", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage" + }, + "typeName": { + "id": 5096, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5095, + "name": "InitializableStorage", + "nameLocations": [ + "8795:20:35" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4859, + "src": "8795:20:35" + }, + "referencedDeclaration": 4859, + "src": "8795:20:35", + "typeDescriptions": { + "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", + "typeString": "struct Initializable.InitializableStorage" + } + }, + "visibility": "internal" + } + ], + "src": "8794:32:35" + }, + "scope": 5102, + "src": "8737:170:35", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 5103, + "src": "2349:6560:35", + "usedErrors": [ + 4865, + 4868 + ], + "usedEvents": [ + 4873 + ] + } + ], + "src": "113:8797:35" + }, + "id": 35 + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", + "exportedSymbols": { + "ContextUpgradeable": [ + 5148 + ], + "Initializable": [ + 5102 + ] + }, + "id": 5149, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5104, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "101:24:36" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "file": "../proxy/utils/Initializable.sol", + "id": 5106, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 5149, + "sourceUnit": 5103, + "src": "126:63:36", + "symbolAliases": [ + { + "foreign": { + "id": 5105, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "134:13:36", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 5108, + "name": "Initializable", + "nameLocations": [ + "728:13:36" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5102, + "src": "728:13:36" + }, + "id": 5109, + "nodeType": "InheritanceSpecifier", + "src": "728:13:36" + } + ], + "canonicalName": "ContextUpgradeable", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 5107, + "nodeType": "StructuredDocumentation", + "src": "191:496:36", + "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts." + }, + "fullyImplemented": true, + "id": 5148, + "linearizedBaseContracts": [ + 5148, + 5102 + ], + "name": "ContextUpgradeable", + "nameLocation": "706:18:36", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 5114, + "nodeType": "Block", + "src": "800:7:36", + "statements": [] + }, + "id": 5115, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5112, + "kind": "modifierInvocation", + "modifierName": { + "id": 5111, + "name": "onlyInitializing", + "nameLocations": [ + "783:16:36" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "783:16:36" + }, + "nodeType": "ModifierInvocation", + "src": "783:16:36" + } + ], + "name": "__Context_init", + "nameLocation": "757:14:36", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5110, + "nodeType": "ParameterList", + "parameters": [], + "src": "771:2:36" + }, + "returnParameters": { + "id": 5113, + "nodeType": "ParameterList", + "parameters": [], + "src": "800:0:36" + }, + "scope": 5148, + "src": "748:59:36", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5120, + "nodeType": "Block", + "src": "875:7:36", + "statements": [] + }, + "id": 5121, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5118, + "kind": "modifierInvocation", + "modifierName": { + "id": 5117, + "name": "onlyInitializing", + "nameLocations": [ + "858:16:36" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "858:16:36" + }, + "nodeType": "ModifierInvocation", + "src": "858:16:36" + } + ], + "name": "__Context_init_unchained", + "nameLocation": "822:24:36", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5116, + "nodeType": "ParameterList", + "parameters": [], + "src": "846:2:36" + }, + "returnParameters": { + "id": 5119, + "nodeType": "ParameterList", + "parameters": [], + "src": "875:0:36" + }, + "scope": 5148, + "src": "813:69:36", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5129, + "nodeType": "Block", + "src": "949:34:36", + "statements": [ + { + "expression": { + "expression": { + "id": 5126, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "966:3:36", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "970:6:36", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "966:10:36", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 5125, + "id": 5128, + "nodeType": "Return", + "src": "959:17:36" + } + ] + }, + "id": 5130, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_msgSender", + "nameLocation": "896:10:36", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5122, + "nodeType": "ParameterList", + "parameters": [], + "src": "906:2:36" + }, + "returnParameters": { + "id": 5125, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5124, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5130, + "src": "940:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5123, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "940:7:36", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "939:9:36" + }, + "scope": 5148, + "src": "887:96:36", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5138, + "nodeType": "Block", + "src": "1056:32:36", + "statements": [ + { + "expression": { + "expression": { + "id": 5135, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1073:3:36", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1077:4:36", + "memberName": "data", + "nodeType": "MemberAccess", + "src": "1073:8:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "functionReturnParameters": 5134, + "id": 5137, + "nodeType": "Return", + "src": "1066:15:36" + } + ] + }, + "id": 5139, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_msgData", + "nameLocation": "998:8:36", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5131, + "nodeType": "ParameterList", + "parameters": [], + "src": "1006:2:36" + }, + "returnParameters": { + "id": 5134, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5133, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5139, + "src": "1040:14:36", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5132, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1040:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1039:16:36" + }, + "scope": 5148, + "src": "989:99:36", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5146, + "nodeType": "Block", + "src": "1166:25:36", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 5144, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1183:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 5143, + "id": 5145, + "nodeType": "Return", + "src": "1176:8:36" + } + ] + }, + "id": 5147, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_contextSuffixLength", + "nameLocation": "1103:20:36", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5140, + "nodeType": "ParameterList", + "parameters": [], + "src": "1123:2:36" + }, + "returnParameters": { + "id": 5143, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5142, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5147, + "src": "1157:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5141, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1157:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1156:9:36" + }, + "scope": 5148, + "src": "1094:97:36", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 5149, + "src": "688:505:36", + "usedErrors": [ + 4865, + 4868 + ], + "usedEvents": [ + 4873 + ] + } + ], + "src": "101:1093:36" + }, + "id": 36 + }, + "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol", + "exportedSymbols": { + "Address": [ + 6127 + ], + "ContextUpgradeable": [ + 5148 + ], + "Initializable": [ + 5102 + ], + "MulticallUpgradeable": [ + 5251 + ] + }, + "id": 5252, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5150, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "103:24:37" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/Address.sol", + "file": "@openzeppelin/contracts/utils/Address.sol", + "id": 5152, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 5252, + "sourceUnit": 6128, + "src": "129:66:37", + "symbolAliases": [ + { + "foreign": { + "id": 5151, + "name": "Address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6127, + "src": "137:7:37", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", + "file": "./ContextUpgradeable.sol", + "id": 5154, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 5252, + "sourceUnit": 5149, + "src": "196:60:37", + "symbolAliases": [ + { + "foreign": { + "id": 5153, + "name": "ContextUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5148, + "src": "204:18:37", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "file": "../proxy/utils/Initializable.sol", + "id": 5156, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 5252, + "sourceUnit": 5103, + "src": "257:63:37", + "symbolAliases": [ + { + "foreign": { + "id": 5155, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "265:13:37", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 5158, + "name": "Initializable", + "nameLocations": [ + "1162:13:37" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5102, + "src": "1162:13:37" + }, + "id": 5159, + "nodeType": "InheritanceSpecifier", + "src": "1162:13:37" + }, + { + "baseName": { + "id": 5160, + "name": "ContextUpgradeable", + "nameLocations": [ + "1177:18:37" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5148, + "src": "1177:18:37" + }, + "id": 5161, + "nodeType": "InheritanceSpecifier", + "src": "1177:18:37" + } + ], + "canonicalName": "MulticallUpgradeable", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 5157, + "nodeType": "StructuredDocumentation", + "src": "322:797:37", + "text": " @dev Provides a function to batch together multiple calls in a single external call.\n Consider any assumption about calldata validation performed by the sender may be violated if it's not especially\n careful about sending transactions invoking {multicall}. For example, a relay address that filters function\n selectors won't filter calls nested within a {multicall} operation.\n NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {_msgSender}).\n If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data`\n to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of\n {_msgSender} are not propagated to subcalls." + }, + "fullyImplemented": true, + "id": 5251, + "linearizedBaseContracts": [ + 5251, + 5148, + 5102 + ], + "name": "MulticallUpgradeable", + "nameLocation": "1138:20:37", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 5166, + "nodeType": "Block", + "src": "1256:7:37", + "statements": [] + }, + "id": 5167, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5164, + "kind": "modifierInvocation", + "modifierName": { + "id": 5163, + "name": "onlyInitializing", + "nameLocations": [ + "1239:16:37" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "1239:16:37" + }, + "nodeType": "ModifierInvocation", + "src": "1239:16:37" + } + ], + "name": "__Multicall_init", + "nameLocation": "1211:16:37", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5162, + "nodeType": "ParameterList", + "parameters": [], + "src": "1227:2:37" + }, + "returnParameters": { + "id": 5165, + "nodeType": "ParameterList", + "parameters": [], + "src": "1256:0:37" + }, + "scope": 5251, + "src": "1202:61:37", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5172, + "nodeType": "Block", + "src": "1333:7:37", + "statements": [] + }, + "id": 5173, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5170, + "kind": "modifierInvocation", + "modifierName": { + "id": 5169, + "name": "onlyInitializing", + "nameLocations": [ + "1316:16:37" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "1316:16:37" + }, + "nodeType": "ModifierInvocation", + "src": "1316:16:37" + } + ], + "name": "__Multicall_init_unchained", + "nameLocation": "1278:26:37", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5168, + "nodeType": "ParameterList", + "parameters": [], + "src": "1304:2:37" + }, + "returnParameters": { + "id": 5171, + "nodeType": "ParameterList", + "parameters": [], + "src": "1333:0:37" + }, + "scope": 5251, + "src": "1269:71:37", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5249, + "nodeType": "Block", + "src": "1594:392:37", + "statements": [ + { + "assignments": [ + 5184 + ], + "declarations": [ + { + "constant": false, + "id": 5184, + "mutability": "mutable", + "name": "context", + "nameLocation": "1617:7:37", + "nodeType": "VariableDeclaration", + "scope": 5249, + "src": "1604:20:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5183, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1604:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 5204, + "initialValue": { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 5189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5185, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1627:3:37", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1631:6:37", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1627:10:37", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5187, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5130, + "src": "1641:10:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 5188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1641:12:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1627:26:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "baseExpression": { + "expression": { + "id": 5194, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1695:3:37", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5195, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1699:4:37", + "memberName": "data", + "nodeType": "MemberAccess", + "src": "1695:8:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "id": 5202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexRangeAccess", + "src": "1695:51:37", + "startExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 5196, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1704:3:37", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1708:4:37", + "memberName": "data", + "nodeType": "MemberAccess", + "src": "1704:8:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "id": 5198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1713:6:37", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1704:15:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5199, + "name": "_contextSuffixLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5147, + "src": "1722:20:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 5200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1722:22:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1704:40:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr_slice", + "typeString": "bytes calldata slice" + } + }, + "id": 5203, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1627:119:37", + "trueExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 5192, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1678:1:37", + "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": 5191, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1668:9:37", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (uint256) pure returns (bytes memory)" + }, + "typeName": { + "id": 5190, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1672:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + "id": 5193, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1668:12:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1604:142:37" + }, + { + "expression": { + "id": 5212, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5205, + "name": "results", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5181, + "src": "1757:7:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "typeString": "bytes memory[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 5209, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5177, + "src": "1779:4:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + "id": 5210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1784:6:37", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1779:11:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5208, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1767:11:37", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (bytes memory[] memory)" + }, + "typeName": { + "baseType": { + "id": 5206, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1771:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 5207, + "nodeType": "ArrayTypeName", + "src": "1771:7:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + } + }, + "id": 5211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1767:24:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "typeString": "bytes memory[] memory" + } + }, + "src": "1757:34:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "typeString": "bytes memory[] memory" + } + }, + "id": 5213, + "nodeType": "ExpressionStatement", + "src": "1757:34:37" + }, + { + "body": { + "id": 5245, + "nodeType": "Block", + "src": "1843:113:37", + "statements": [ + { + "expression": { + "id": 5243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5225, + "name": "results", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5181, + "src": "1857:7:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "typeString": "bytes memory[] memory" + } + }, + "id": 5227, + "indexExpression": { + "id": 5226, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5215, + "src": "1865:1:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1857:10:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 5232, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1907:4:37", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MulticallUpgradeable_$5251", + "typeString": "contract MulticallUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MulticallUpgradeable_$5251", + "typeString": "contract MulticallUpgradeable" + } + ], + "id": 5231, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1899:7:37", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5230, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1899:7:37", + "typeDescriptions": {} + } + }, + "id": 5233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1899:13:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "baseExpression": { + "id": 5237, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5177, + "src": "1927:4:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + "id": 5239, + "indexExpression": { + "id": 5238, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5215, + "src": "1932:1:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1927:7:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "id": 5240, + "name": "context", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5184, + "src": "1936:7:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 5235, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1914:5:37", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 5234, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1914:5:37", + "typeDescriptions": {} + } + }, + "id": 5236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1920:6:37", + "memberName": "concat", + "nodeType": "MemberAccess", + "src": "1914:12:37", + "typeDescriptions": { + "typeIdentifier": "t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 5241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1914:30:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 5228, + "name": "Address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6127, + "src": "1870:7:37", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Address_$6127_$", + "typeString": "type(library Address)" + } + }, + "id": 5229, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1878:20:37", + "memberName": "functionDelegateCall", + "nodeType": "MemberAccess", + "referencedDeclaration": 6046, + "src": "1870:28:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (address,bytes memory) returns (bytes memory)" + } + }, + "id": 5242, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1870:75:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "src": "1857:88:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 5244, + "nodeType": "ExpressionStatement", + "src": "1857:88:37" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5218, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5215, + "src": "1821:1:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 5219, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5177, + "src": "1825:4:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + "id": 5220, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1830:6:37", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1825:11:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1821:15:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5246, + "initializationExpression": { + "assignments": [ + 5215 + ], + "declarations": [ + { + "constant": false, + "id": 5215, + "mutability": "mutable", + "name": "i", + "nameLocation": "1814:1:37", + "nodeType": "VariableDeclaration", + "scope": 5246, + "src": "1806:9:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5214, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1806:7:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5217, + "initialValue": { + "hexValue": "30", + "id": 5216, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1818:1:37", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "1806:13:37" + }, + "isSimpleCounterLoop": true, + "loopExpression": { + "expression": { + "id": 5223, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "1838:3:37", + "subExpression": { + "id": 5222, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5215, + "src": "1838:1:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5224, + "nodeType": "ExpressionStatement", + "src": "1838:3:37" + }, + "nodeType": "ForStatement", + "src": "1801:155:37" + }, + { + "expression": { + "id": 5247, + "name": "results", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5181, + "src": "1972:7:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "typeString": "bytes memory[] memory" + } + }, + "functionReturnParameters": 5182, + "id": 5248, + "nodeType": "Return", + "src": "1965:14:37" + } + ] + }, + "documentation": { + "id": 5174, + "nodeType": "StructuredDocumentation", + "src": "1345:152:37", + "text": " @dev Receives and executes a batch of function calls on this contract.\n @custom:oz-upgrades-unsafe-allow-reachable delegatecall" + }, + "functionSelector": "ac9650d8", + "id": 5250, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "multicall", + "nameLocation": "1511:9:37", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5178, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5177, + "mutability": "mutable", + "name": "data", + "nameLocation": "1538:4:37", + "nodeType": "VariableDeclaration", + "scope": 5250, + "src": "1521:21:37", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 5175, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1521:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 5176, + "nodeType": "ArrayTypeName", + "src": "1521:7:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + } + ], + "src": "1520:23:37" + }, + "returnParameters": { + "id": 5182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5181, + "mutability": "mutable", + "name": "results", + "nameLocation": "1585:7:37", + "nodeType": "VariableDeclaration", + "scope": 5250, + "src": "1570:22:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 5179, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1570:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 5180, + "nodeType": "ArrayTypeName", + "src": "1570:7:37", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + } + ], + "src": "1569:24:37" + }, + "scope": 5251, + "src": "1502:484:37", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "external" + } + ], + "scope": 5252, + "src": "1120:868:37", + "usedErrors": [ + 4865, + 4868, + 5887, + 5890 + ], + "usedEvents": [ + 4873 + ] + } + ], + "src": "103:1886:37" + }, + "id": 37 + }, + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "exportedSymbols": { + "ContextUpgradeable": [ + 5148 + ], + "Initializable": [ + 5102 + ], + "PausableUpgradeable": [ + 5427 + ] + }, + "id": 5428, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5253, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "102:24:38" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", + "file": "../utils/ContextUpgradeable.sol", + "id": 5255, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 5428, + "sourceUnit": 5149, + "src": "128:67:38", + "symbolAliases": [ + { + "foreign": { + "id": 5254, + "name": "ContextUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5148, + "src": "136:18:38", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "file": "../proxy/utils/Initializable.sol", + "id": 5257, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 5428, + "sourceUnit": 5103, + "src": "196:63:38", + "symbolAliases": [ + { + "foreign": { + "id": 5256, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "204:13:38", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 5259, + "name": "Initializable", + "nameLocations": [ + "742:13:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5102, + "src": "742:13:38" + }, + "id": 5260, + "nodeType": "InheritanceSpecifier", + "src": "742:13:38" + }, + { + "baseName": { + "id": 5261, + "name": "ContextUpgradeable", + "nameLocations": [ + "757:18:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5148, + "src": "757:18:38" + }, + "id": 5262, + "nodeType": "InheritanceSpecifier", + "src": "757:18:38" + } + ], + "canonicalName": "PausableUpgradeable", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 5258, + "nodeType": "StructuredDocumentation", + "src": "261:439:38", + "text": " @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place." + }, + "fullyImplemented": true, + "id": 5427, + "linearizedBaseContracts": [ + 5427, + 5148, + 5102 + ], + "name": "PausableUpgradeable", + "nameLocation": "719:19:38", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "PausableUpgradeable.PausableStorage", + "documentation": { + "id": 5263, + "nodeType": "StructuredDocumentation", + "src": "782:66:38", + "text": "@custom:storage-location erc7201:openzeppelin.storage.Pausable" + }, + "id": 5266, + "members": [ + { + "constant": false, + "id": 5265, + "mutability": "mutable", + "name": "_paused", + "nameLocation": "891:7:38", + "nodeType": "VariableDeclaration", + "scope": 5266, + "src": "886:12:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5264, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "886:4:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "PausableStorage", + "nameLocation": "860:15:38", + "nodeType": "StructDefinition", + "scope": 5427, + "src": "853:52:38", + "visibility": "public" + }, + { + "constant": true, + "id": 5269, + "mutability": "constant", + "name": "PausableStorageLocation", + "nameLocation": "1048:23:38", + "nodeType": "VariableDeclaration", + "scope": 5427, + "src": "1023:117:38", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5267, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1023:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "hexValue": "307863643565643135633665313837653737653961656538383138346332316634663231383261623538323763623362376530376662656463643633663033333030", + "id": 5268, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1074:66:38", + "typeDescriptions": { + "typeIdentifier": "t_rational_92891662540554778686986514950364265630913525426840345632122912437671245656832_by_1", + "typeString": "int_const 9289...(69 digits omitted)...6832" + }, + "value": "0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300" + }, + "visibility": "private" + }, + { + "body": { + "id": 5276, + "nodeType": "Block", + "src": "1227:82:38", + "statements": [ + { + "AST": { + "nativeSrc": "1246:57:38", + "nodeType": "YulBlock", + "src": "1246:57:38", + "statements": [ + { + "nativeSrc": "1260:33:38", + "nodeType": "YulAssignment", + "src": "1260:33:38", + "value": { + "name": "PausableStorageLocation", + "nativeSrc": "1270:23:38", + "nodeType": "YulIdentifier", + "src": "1270:23:38" + }, + "variableNames": [ + { + "name": "$.slot", + "nativeSrc": "1260:6:38", + "nodeType": "YulIdentifier", + "src": "1260:6:38" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 5273, + "isOffset": false, + "isSlot": true, + "src": "1260:6:38", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 5269, + "isOffset": false, + "isSlot": false, + "src": "1270:23:38", + "valueSize": 1 + } + ], + "id": 5275, + "nodeType": "InlineAssembly", + "src": "1237:66:38" + } + ] + }, + "id": 5277, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getPausableStorage", + "nameLocation": "1156:19:38", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5270, + "nodeType": "ParameterList", + "parameters": [], + "src": "1175:2:38" + }, + "returnParameters": { + "id": 5274, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5273, + "mutability": "mutable", + "name": "$", + "nameLocation": "1224:1:38", + "nodeType": "VariableDeclaration", + "scope": 5277, + "src": "1200:25:38", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + }, + "typeName": { + "id": 5272, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5271, + "name": "PausableStorage", + "nameLocations": [ + "1200:15:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5266, + "src": "1200:15:38" + }, + "referencedDeclaration": 5266, + "src": "1200:15:38", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + } + }, + "visibility": "internal" + } + ], + "src": "1199:27:38" + }, + "scope": 5427, + "src": "1147:162:38", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "anonymous": false, + "documentation": { + "id": 5278, + "nodeType": "StructuredDocumentation", + "src": "1315:73:38", + "text": " @dev Emitted when the pause is triggered by `account`." + }, + "eventSelector": "62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258", + "id": 5282, + "name": "Paused", + "nameLocation": "1399:6:38", + "nodeType": "EventDefinition", + "parameters": { + "id": 5281, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5280, + "indexed": false, + "mutability": "mutable", + "name": "account", + "nameLocation": "1414:7:38", + "nodeType": "VariableDeclaration", + "scope": 5282, + "src": "1406:15:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5279, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1406:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1405:17:38" + }, + "src": "1393:30:38" + }, + { + "anonymous": false, + "documentation": { + "id": 5283, + "nodeType": "StructuredDocumentation", + "src": "1429:70:38", + "text": " @dev Emitted when the pause is lifted by `account`." + }, + "eventSelector": "5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa", + "id": 5287, + "name": "Unpaused", + "nameLocation": "1510:8:38", + "nodeType": "EventDefinition", + "parameters": { + "id": 5286, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5285, + "indexed": false, + "mutability": "mutable", + "name": "account", + "nameLocation": "1527:7:38", + "nodeType": "VariableDeclaration", + "scope": 5287, + "src": "1519:15:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5284, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1519:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1518:17:38" + }, + "src": "1504:32:38" + }, + { + "documentation": { + "id": 5288, + "nodeType": "StructuredDocumentation", + "src": "1542:76:38", + "text": " @dev The operation failed because the contract is paused." + }, + "errorSelector": "d93c0665", + "id": 5290, + "name": "EnforcedPause", + "nameLocation": "1629:13:38", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 5289, + "nodeType": "ParameterList", + "parameters": [], + "src": "1642:2:38" + }, + "src": "1623:22:38" + }, + { + "documentation": { + "id": 5291, + "nodeType": "StructuredDocumentation", + "src": "1651:80:38", + "text": " @dev The operation failed because the contract is not paused." + }, + "errorSelector": "8dfc202b", + "id": 5293, + "name": "ExpectedPause", + "nameLocation": "1742:13:38", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 5292, + "nodeType": "ParameterList", + "parameters": [], + "src": "1755:2:38" + }, + "src": "1736:22:38" + }, + { + "body": { + "id": 5302, + "nodeType": "Block", + "src": "1889:44:38", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5299, + "name": "__Pausable_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5321, + "src": "1899:25:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 5300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1899:27:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5301, + "nodeType": "ExpressionStatement", + "src": "1899:27:38" + } + ] + }, + "documentation": { + "id": 5294, + "nodeType": "StructuredDocumentation", + "src": "1764:67:38", + "text": " @dev Initializes the contract in unpaused state." + }, + "id": 5303, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5297, + "kind": "modifierInvocation", + "modifierName": { + "id": 5296, + "name": "onlyInitializing", + "nameLocations": [ + "1872:16:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "1872:16:38" + }, + "nodeType": "ModifierInvocation", + "src": "1872:16:38" + } + ], + "name": "__Pausable_init", + "nameLocation": "1845:15:38", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5295, + "nodeType": "ParameterList", + "parameters": [], + "src": "1860:2:38" + }, + "returnParameters": { + "id": 5298, + "nodeType": "ParameterList", + "parameters": [], + "src": "1889:0:38" + }, + "scope": 5427, + "src": "1836:97:38", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5320, + "nodeType": "Block", + "src": "2002:93:38", + "statements": [ + { + "assignments": [ + 5310 + ], + "declarations": [ + { + "constant": false, + "id": 5310, + "mutability": "mutable", + "name": "$", + "nameLocation": "2036:1:38", + "nodeType": "VariableDeclaration", + "scope": 5320, + "src": "2012:25:38", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + }, + "typeName": { + "id": 5309, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5308, + "name": "PausableStorage", + "nameLocations": [ + "2012:15:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5266, + "src": "2012:15:38" + }, + "referencedDeclaration": 5266, + "src": "2012:15:38", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + } + }, + "visibility": "internal" + } + ], + "id": 5313, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5311, + "name": "_getPausableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5277, + "src": "2040:19:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$5266_storage_ptr_$", + "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)" + } + }, + "id": 5312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2040:21:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2012:49:38" + }, + { + "expression": { + "id": 5318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 5314, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5310, + "src": "2071:1:38", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" + } + }, + "id": 5316, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "2073:7:38", + "memberName": "_paused", + "nodeType": "MemberAccess", + "referencedDeclaration": 5265, + "src": "2071:9:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "66616c7365", + "id": 5317, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2083:5:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "2071:17:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5319, + "nodeType": "ExpressionStatement", + "src": "2071:17:38" + } + ] + }, + "id": 5321, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5306, + "kind": "modifierInvocation", + "modifierName": { + "id": 5305, + "name": "onlyInitializing", + "nameLocations": [ + "1985:16:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "1985:16:38" + }, + "nodeType": "ModifierInvocation", + "src": "1985:16:38" + } + ], + "name": "__Pausable_init_unchained", + "nameLocation": "1948:25:38", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5304, + "nodeType": "ParameterList", + "parameters": [], + "src": "1973:2:38" + }, + "returnParameters": { + "id": 5307, + "nodeType": "ParameterList", + "parameters": [], + "src": "2002:0:38" + }, + "scope": 5427, + "src": "1939:156:38", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5328, + "nodeType": "Block", + "src": "2306:47:38", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5324, + "name": "_requireNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5365, + "src": "2316:17:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 5325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2316:19:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5326, + "nodeType": "ExpressionStatement", + "src": "2316:19:38" + }, + { + "id": 5327, + "nodeType": "PlaceholderStatement", + "src": "2345:1:38" + } + ] + }, + "documentation": { + "id": 5322, + "nodeType": "StructuredDocumentation", + "src": "2101:175:38", + "text": " @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused." + }, + "id": 5329, + "name": "whenNotPaused", + "nameLocation": "2290:13:38", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 5323, + "nodeType": "ParameterList", + "parameters": [], + "src": "2303:2:38" + }, + "src": "2281:72:38", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5336, + "nodeType": "Block", + "src": "2553:44:38", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5332, + "name": "_requirePaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5378, + "src": "2563:14:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 5333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2563:16:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5334, + "nodeType": "ExpressionStatement", + "src": "2563:16:38" + }, + { + "id": 5335, + "nodeType": "PlaceholderStatement", + "src": "2589:1:38" + } + ] + }, + "documentation": { + "id": 5330, + "nodeType": "StructuredDocumentation", + "src": "2359:167:38", + "text": " @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused." + }, + "id": 5337, + "name": "whenPaused", + "nameLocation": "2540:10:38", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 5331, + "nodeType": "ParameterList", + "parameters": [], + "src": "2550:2:38" + }, + "src": "2531:66:38", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5352, + "nodeType": "Block", + "src": "2745:92:38", + "statements": [ + { + "assignments": [ + 5345 + ], + "declarations": [ + { + "constant": false, + "id": 5345, + "mutability": "mutable", + "name": "$", + "nameLocation": "2779:1:38", + "nodeType": "VariableDeclaration", + "scope": 5352, + "src": "2755:25:38", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + }, + "typeName": { + "id": 5344, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5343, + "name": "PausableStorage", + "nameLocations": [ + "2755:15:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5266, + "src": "2755:15:38" + }, + "referencedDeclaration": 5266, + "src": "2755:15:38", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + } + }, + "visibility": "internal" + } + ], + "id": 5348, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5346, + "name": "_getPausableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5277, + "src": "2783:19:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$5266_storage_ptr_$", + "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)" + } + }, + "id": 5347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2783:21:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2755:49:38" + }, + { + "expression": { + "expression": { + "id": 5349, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5345, + "src": "2821:1:38", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" + } + }, + "id": 5350, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2823:7:38", + "memberName": "_paused", + "nodeType": "MemberAccess", + "referencedDeclaration": 5265, + "src": "2821:9:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 5342, + "id": 5351, + "nodeType": "Return", + "src": "2814:16:38" + } + ] + }, + "documentation": { + "id": 5338, + "nodeType": "StructuredDocumentation", + "src": "2603:84:38", + "text": " @dev Returns true if the contract is paused, and false otherwise." + }, + "functionSelector": "5c975abb", + "id": 5353, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "paused", + "nameLocation": "2701:6:38", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5339, + "nodeType": "ParameterList", + "parameters": [], + "src": "2707:2:38" + }, + "returnParameters": { + "id": 5342, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5341, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5353, + "src": "2739:4:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5340, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2739:4:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2738:6:38" + }, + "scope": 5427, + "src": "2692:145:38", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 5364, + "nodeType": "Block", + "src": "2956:77:38", + "statements": [ + { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5357, + "name": "paused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5353, + "src": "2970:6:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 5358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2970:8:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5363, + "nodeType": "IfStatement", + "src": "2966:61:38", + "trueBody": { + "id": 5362, + "nodeType": "Block", + "src": "2980:47:38", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5359, + "name": "EnforcedPause", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5290, + "src": "3001:13:38", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 5360, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3001:15:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 5361, + "nodeType": "RevertStatement", + "src": "2994:22:38" + } + ] + } + } + ] + }, + "documentation": { + "id": 5354, + "nodeType": "StructuredDocumentation", + "src": "2843:57:38", + "text": " @dev Throws if the contract is paused." + }, + "id": 5365, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_requireNotPaused", + "nameLocation": "2914:17:38", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5355, + "nodeType": "ParameterList", + "parameters": [], + "src": "2931:2:38" + }, + "returnParameters": { + "id": 5356, + "nodeType": "ParameterList", + "parameters": [], + "src": "2956:0:38" + }, + "scope": 5427, + "src": "2905:128:38", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5377, + "nodeType": "Block", + "src": "3153:78:38", + "statements": [ + { + "condition": { + "id": 5371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "3167:9:38", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5369, + "name": "paused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5353, + "src": "3168:6:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 5370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3168:8:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5376, + "nodeType": "IfStatement", + "src": "3163:62:38", + "trueBody": { + "id": 5375, + "nodeType": "Block", + "src": "3178:47:38", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5372, + "name": "ExpectedPause", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5293, + "src": "3199:13:38", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 5373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3199:15:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 5374, + "nodeType": "RevertStatement", + "src": "3192:22:38" + } + ] + } + } + ] + }, + "documentation": { + "id": 5366, + "nodeType": "StructuredDocumentation", + "src": "3039:61:38", + "text": " @dev Throws if the contract is not paused." + }, + "id": 5378, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_requirePaused", + "nameLocation": "3114:14:38", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5367, + "nodeType": "ParameterList", + "parameters": [], + "src": "3128:2:38" + }, + "returnParameters": { + "id": 5368, + "nodeType": "ParameterList", + "parameters": [], + "src": "3153:0:38" + }, + "scope": 5427, + "src": "3105:126:38", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5401, + "nodeType": "Block", + "src": "3415:127:38", + "statements": [ + { + "assignments": [ + 5386 + ], + "declarations": [ + { + "constant": false, + "id": 5386, + "mutability": "mutable", + "name": "$", + "nameLocation": "3449:1:38", + "nodeType": "VariableDeclaration", + "scope": 5401, + "src": "3425:25:38", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + }, + "typeName": { + "id": 5385, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5384, + "name": "PausableStorage", + "nameLocations": [ + "3425:15:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5266, + "src": "3425:15:38" + }, + "referencedDeclaration": 5266, + "src": "3425:15:38", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + } + }, + "visibility": "internal" + } + ], + "id": 5389, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5387, + "name": "_getPausableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5277, + "src": "3453:19:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$5266_storage_ptr_$", + "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)" + } + }, + "id": 5388, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3453:21:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3425:49:38" + }, + { + "expression": { + "id": 5394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 5390, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5386, + "src": "3484:1:38", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" + } + }, + "id": 5392, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3486:7:38", + "memberName": "_paused", + "nodeType": "MemberAccess", + "referencedDeclaration": 5265, + "src": "3484:9:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 5393, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3496:4:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "3484:16:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5395, + "nodeType": "ExpressionStatement", + "src": "3484:16:38" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5397, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5130, + "src": "3522:10:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 5398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3522:12:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 5396, + "name": "Paused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5282, + "src": "3515:6:38", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 5399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3515:20:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5400, + "nodeType": "EmitStatement", + "src": "3510:25:38" + } + ] + }, + "documentation": { + "id": 5379, + "nodeType": "StructuredDocumentation", + "src": "3237:124:38", + "text": " @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused." + }, + "id": 5402, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5382, + "kind": "modifierInvocation", + "modifierName": { + "id": 5381, + "name": "whenNotPaused", + "nameLocations": [ + "3401:13:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5329, + "src": "3401:13:38" + }, + "nodeType": "ModifierInvocation", + "src": "3401:13:38" + } + ], + "name": "_pause", + "nameLocation": "3375:6:38", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5380, + "nodeType": "ParameterList", + "parameters": [], + "src": "3381:2:38" + }, + "returnParameters": { + "id": 5383, + "nodeType": "ParameterList", + "parameters": [], + "src": "3415:0:38" + }, + "scope": 5427, + "src": "3366:176:38", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5425, + "nodeType": "Block", + "src": "3722:130:38", + "statements": [ + { + "assignments": [ + 5410 + ], + "declarations": [ + { + "constant": false, + "id": 5410, + "mutability": "mutable", + "name": "$", + "nameLocation": "3756:1:38", + "nodeType": "VariableDeclaration", + "scope": 5425, + "src": "3732:25:38", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + }, + "typeName": { + "id": 5409, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5408, + "name": "PausableStorage", + "nameLocations": [ + "3732:15:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5266, + "src": "3732:15:38" + }, + "referencedDeclaration": 5266, + "src": "3732:15:38", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage" + } + }, + "visibility": "internal" + } + ], + "id": 5413, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5411, + "name": "_getPausableStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5277, + "src": "3760:19:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$5266_storage_ptr_$", + "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)" + } + }, + "id": 5412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3760:21:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3732:49:38" + }, + { + "expression": { + "id": 5418, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 5414, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5410, + "src": "3791:1:38", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", + "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" + } + }, + "id": 5416, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3793:7:38", + "memberName": "_paused", + "nodeType": "MemberAccess", + "referencedDeclaration": 5265, + "src": "3791:9:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "66616c7365", + "id": 5417, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3803:5:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "3791:17:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5419, + "nodeType": "ExpressionStatement", + "src": "3791:17:38" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5421, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5130, + "src": "3832:10:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 5422, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3832:12:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 5420, + "name": "Unpaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5287, + "src": "3823:8:38", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 5423, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3823:22:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5424, + "nodeType": "EmitStatement", + "src": "3818:27:38" + } + ] + }, + "documentation": { + "id": 5403, + "nodeType": "StructuredDocumentation", + "src": "3548:121:38", + "text": " @dev Returns to normal state.\n Requirements:\n - The contract must be paused." + }, + "id": 5426, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5406, + "kind": "modifierInvocation", + "modifierName": { + "id": 5405, + "name": "whenPaused", + "nameLocations": [ + "3711:10:38" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5337, + "src": "3711:10:38" + }, + "nodeType": "ModifierInvocation", + "src": "3711:10:38" + } + ], + "name": "_unpause", + "nameLocation": "3683:8:38", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5404, + "nodeType": "ParameterList", + "parameters": [], + "src": "3691:2:38" + }, + "returnParameters": { + "id": 5407, + "nodeType": "ParameterList", + "parameters": [], + "src": "3722:0:38" + }, + "scope": 5427, + "src": "3674:178:38", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 5428, + "src": "701:3153:38", + "usedErrors": [ + 4865, + 4868, + 5290, + 5293 + ], + "usedEvents": [ + 4873, + 5282, + 5287 + ] + } + ], + "src": "102:3753:38" + }, + "id": 38 + }, + "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol", + "exportedSymbols": { + "EIP712Upgradeable": [ + 5771 + ], + "IERC5267": [ + 5796 + ], + "Initializable": [ + 5102 + ], + "MessageHashUtils": [ + 6804 + ] + }, + "id": 5772, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5429, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "113:24:39" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol", + "file": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol", + "id": 5431, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 5772, + "sourceUnit": 6805, + "src": "139:97:39", + "symbolAliases": [ + { + "foreign": { + "id": 5430, + "name": "MessageHashUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6804, + "src": "147:16:39", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/interfaces/IERC5267.sol", + "file": "@openzeppelin/contracts/interfaces/IERC5267.sol", + "id": 5433, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 5772, + "sourceUnit": 5797, + "src": "237:73:39", + "symbolAliases": [ + { + "foreign": { + "id": 5432, + "name": "IERC5267", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5796, + "src": "245:8:39", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "file": "../../proxy/utils/Initializable.sol", + "id": 5435, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 5772, + "sourceUnit": 5103, + "src": "311:66:39", + "symbolAliases": [ + { + "foreign": { + "id": 5434, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "319:13:39", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 5437, + "name": "Initializable", + "nameLocations": [ + "1998:13:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5102, + "src": "1998:13:39" + }, + "id": 5438, + "nodeType": "InheritanceSpecifier", + "src": "1998:13:39" + }, + { + "baseName": { + "id": 5439, + "name": "IERC5267", + "nameLocations": [ + "2013:8:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5796, + "src": "2013:8:39" + }, + "id": 5440, + "nodeType": "InheritanceSpecifier", + "src": "2013:8:39" + } + ], + "canonicalName": "EIP712Upgradeable", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 5436, + "nodeType": "StructuredDocumentation", + "src": "379:1579:39", + "text": " @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n ({_hashTypedDataV4}).\n The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n the chain id to protect against replay attacks on an eventual fork of the chain.\n NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n separator from the immutable values, which is cheaper than accessing a cached version in cold storage." + }, + "fullyImplemented": true, + "id": 5771, + "linearizedBaseContracts": [ + 5771, + 5796, + 5102 + ], + "name": "EIP712Upgradeable", + "nameLocation": "1977:17:39", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 5445, + "mutability": "constant", + "name": "TYPE_HASH", + "nameLocation": "2053:9:39", + "nodeType": "VariableDeclaration", + "scope": 5771, + "src": "2028:140:39", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5441, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2028:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", + "id": 5443, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2083:84:39", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", + "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" + }, + "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", + "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" + } + ], + "id": 5442, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2073:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 5444, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2073:95:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "canonicalName": "EIP712Upgradeable.EIP712Storage", + "documentation": { + "id": 5446, + "nodeType": "StructuredDocumentation", + "src": "2175:64:39", + "text": "@custom:storage-location erc7201:openzeppelin.storage.EIP712" + }, + "id": 5457, + "members": [ + { + "constant": false, + "id": 5449, + "mutability": "mutable", + "name": "_hashedName", + "nameLocation": "2332:11:39", + "nodeType": "VariableDeclaration", + "scope": 5457, + "src": "2324:19:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5448, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2324:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5452, + "mutability": "mutable", + "name": "_hashedVersion", + "nameLocation": "2413:14:39", + "nodeType": "VariableDeclaration", + "scope": 5457, + "src": "2405:22:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5451, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2405:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5454, + "mutability": "mutable", + "name": "_name", + "nameLocation": "2445:5:39", + "nodeType": "VariableDeclaration", + "scope": 5457, + "src": "2438:12:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5453, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2438:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5456, + "mutability": "mutable", + "name": "_version", + "nameLocation": "2467:8:39", + "nodeType": "VariableDeclaration", + "scope": 5457, + "src": "2460:15:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5455, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2460:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "name": "EIP712Storage", + "nameLocation": "2251:13:39", + "nodeType": "StructDefinition", + "scope": 5771, + "src": "2244:238:39", + "visibility": "public" + }, + { + "constant": true, + "id": 5460, + "mutability": "constant", + "name": "EIP712StorageLocation", + "nameLocation": "2623:21:39", + "nodeType": "VariableDeclaration", + "scope": 5771, + "src": "2598:115:39", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5458, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2598:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "hexValue": "307861313661343664393432363163373531376363386666383966363163306365393335393865336338343938303130313164656536343961366135353764313030", + "id": 5459, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2647:66:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_73010143390315934406010559831118728393600729754696197287367516085911467577600_by_1", + "typeString": "int_const 7301...(69 digits omitted)...7600" + }, + "value": "0xa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100" + }, + "visibility": "private" + }, + { + "body": { + "id": 5467, + "nodeType": "Block", + "src": "2796:80:39", + "statements": [ + { + "AST": { + "nativeSrc": "2815:55:39", + "nodeType": "YulBlock", + "src": "2815:55:39", + "statements": [ + { + "nativeSrc": "2829:31:39", + "nodeType": "YulAssignment", + "src": "2829:31:39", + "value": { + "name": "EIP712StorageLocation", + "nativeSrc": "2839:21:39", + "nodeType": "YulIdentifier", + "src": "2839:21:39" + }, + "variableNames": [ + { + "name": "$.slot", + "nativeSrc": "2829:6:39", + "nodeType": "YulIdentifier", + "src": "2829:6:39" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 5464, + "isOffset": false, + "isSlot": true, + "src": "2829:6:39", + "suffix": "slot", + "valueSize": 1 + }, + { + "declaration": 5460, + "isOffset": false, + "isSlot": false, + "src": "2839:21:39", + "valueSize": 1 + } + ], + "id": 5466, + "nodeType": "InlineAssembly", + "src": "2806:64:39" + } + ] + }, + "id": 5468, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getEIP712Storage", + "nameLocation": "2729:17:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5461, + "nodeType": "ParameterList", + "parameters": [], + "src": "2746:2:39" + }, + "returnParameters": { + "id": 5465, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5464, + "mutability": "mutable", + "name": "$", + "nameLocation": "2793:1:39", + "nodeType": "VariableDeclaration", + "scope": 5468, + "src": "2771:23:39", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + }, + "typeName": { + "id": 5463, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5462, + "name": "EIP712Storage", + "nameLocations": [ + "2771:13:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5457, + "src": "2771:13:39" + }, + "referencedDeclaration": 5457, + "src": "2771:13:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + } + }, + "visibility": "internal" + } + ], + "src": "2770:25:39" + }, + "scope": 5771, + "src": "2720:156:39", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 5483, + "nodeType": "Block", + "src": "3538:55:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5479, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5471, + "src": "3572:4:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 5480, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5473, + "src": "3578:7:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 5478, + "name": "__EIP712_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5524, + "src": "3548:23:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory,string memory)" + } + }, + "id": 5481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3548:38:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5482, + "nodeType": "ExpressionStatement", + "src": "3548:38:39" + } + ] + }, + "documentation": { + "id": 5469, + "nodeType": "StructuredDocumentation", + "src": "2882:559:39", + "text": " @dev Initializes the domain separator and parameter caches.\n The meaning of `name` and `version` is specified in\n https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n - `version`: the current major version of the signing domain.\n NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n contract upgrade]." + }, + "id": 5484, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5476, + "kind": "modifierInvocation", + "modifierName": { + "id": 5475, + "name": "onlyInitializing", + "nameLocations": [ + "3521:16:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "3521:16:39" + }, + "nodeType": "ModifierInvocation", + "src": "3521:16:39" + } + ], + "name": "__EIP712_init", + "nameLocation": "3455:13:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5474, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5471, + "mutability": "mutable", + "name": "name", + "nameLocation": "3483:4:39", + "nodeType": "VariableDeclaration", + "scope": 5484, + "src": "3469:18:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5470, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3469:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5473, + "mutability": "mutable", + "name": "version", + "nameLocation": "3503:7:39", + "nodeType": "VariableDeclaration", + "scope": 5484, + "src": "3489:21:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5472, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3489:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "3468:43:39" + }, + "returnParameters": { + "id": 5477, + "nodeType": "ParameterList", + "parameters": [], + "src": "3538:0:39" + }, + "scope": 5771, + "src": "3446:147:39", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5523, + "nodeType": "Block", + "src": "3701:228:39", + "statements": [ + { + "assignments": [ + 5495 + ], + "declarations": [ + { + "constant": false, + "id": 5495, + "mutability": "mutable", + "name": "$", + "nameLocation": "3733:1:39", + "nodeType": "VariableDeclaration", + "scope": 5523, + "src": "3711:23:39", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + }, + "typeName": { + "id": 5494, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5493, + "name": "EIP712Storage", + "nameLocations": [ + "3711:13:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5457, + "src": "3711:13:39" + }, + "referencedDeclaration": 5457, + "src": "3711:13:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + } + }, + "visibility": "internal" + } + ], + "id": 5498, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5496, + "name": "_getEIP712Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5468, + "src": "3737:17:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", + "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" + } + }, + "id": 5497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3737:19:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3711:45:39" + }, + { + "expression": { + "id": 5503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 5499, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5495, + "src": "3766:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5501, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3768:5:39", + "memberName": "_name", + "nodeType": "MemberAccess", + "referencedDeclaration": 5454, + "src": "3766:7:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5502, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5486, + "src": "3776:4:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "3766:14:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 5504, + "nodeType": "ExpressionStatement", + "src": "3766:14:39" + }, + { + "expression": { + "id": 5509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 5505, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5495, + "src": "3790:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5507, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3792:8:39", + "memberName": "_version", + "nodeType": "MemberAccess", + "referencedDeclaration": 5456, + "src": "3790:10:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5508, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5488, + "src": "3803:7:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "3790:20:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 5510, + "nodeType": "ExpressionStatement", + "src": "3790:20:39" + }, + { + "expression": { + "id": 5515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 5511, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5495, + "src": "3875:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5513, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3877:11:39", + "memberName": "_hashedName", + "nodeType": "MemberAccess", + "referencedDeclaration": 5449, + "src": "3875:13:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "30", + "id": 5514, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3891:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3875:17:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 5516, + "nodeType": "ExpressionStatement", + "src": "3875:17:39" + }, + { + "expression": { + "id": 5521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 5517, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5495, + "src": "3902:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5519, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3904:14:39", + "memberName": "_hashedVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 5452, + "src": "3902:16:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "30", + "id": 5520, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3921:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3902:20:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 5522, + "nodeType": "ExpressionStatement", + "src": "3902:20:39" + } + ] + }, + "id": 5524, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5491, + "kind": "modifierInvocation", + "modifierName": { + "id": 5490, + "name": "onlyInitializing", + "nameLocations": [ + "3684:16:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "3684:16:39" + }, + "nodeType": "ModifierInvocation", + "src": "3684:16:39" + } + ], + "name": "__EIP712_init_unchained", + "nameLocation": "3608:23:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5489, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5486, + "mutability": "mutable", + "name": "name", + "nameLocation": "3646:4:39", + "nodeType": "VariableDeclaration", + "scope": 5524, + "src": "3632:18:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5485, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3632:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5488, + "mutability": "mutable", + "name": "version", + "nameLocation": "3666:7:39", + "nodeType": "VariableDeclaration", + "scope": 5524, + "src": "3652:21:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5487, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3652:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "3631:43:39" + }, + "returnParameters": { + "id": 5492, + "nodeType": "ParameterList", + "parameters": [], + "src": "3701:0:39" + }, + "scope": 5771, + "src": "3599:330:39", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5533, + "nodeType": "Block", + "src": "4077:47:39", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5530, + "name": "_buildDomainSeparator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5557, + "src": "4094:21:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 5531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4094:23:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5529, + "id": 5532, + "nodeType": "Return", + "src": "4087:30:39" + } + ] + }, + "documentation": { + "id": 5525, + "nodeType": "StructuredDocumentation", + "src": "3935:75:39", + "text": " @dev Returns the domain separator for the current chain." + }, + "id": 5534, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_domainSeparatorV4", + "nameLocation": "4024:18:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5526, + "nodeType": "ParameterList", + "parameters": [], + "src": "4042:2:39" + }, + "returnParameters": { + "id": 5529, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5528, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5534, + "src": "4068:7:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5527, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4068:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4067:9:39" + }, + "scope": 5771, + "src": "4015:109:39", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5556, + "nodeType": "Block", + "src": "4194:127:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 5542, + "name": "TYPE_HASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5445, + "src": "4232:9:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5543, + "name": "_EIP712NameHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5718, + "src": "4243:15:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 5544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4243:17:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5545, + "name": "_EIP712VersionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5770, + "src": "4262:18:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 5546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4262:20:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 5547, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "4284:5:39", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 5548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4290:7:39", + "memberName": "chainid", + "nodeType": "MemberAccess", + "src": "4284:13:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 5551, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "4307:4:39", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EIP712Upgradeable_$5771", + "typeString": "contract EIP712Upgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_EIP712Upgradeable_$5771", + "typeString": "contract EIP712Upgradeable" + } + ], + "id": 5550, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4299:7:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5549, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4299:7:39", + "typeDescriptions": {} + } + }, + "id": 5552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4299:13:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5540, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "4221:3:39", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 5541, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "4225:6:39", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "4221:10:39", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 5553, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4221:92:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 5539, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "4211:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 5554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4211:103:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5538, + "id": 5555, + "nodeType": "Return", + "src": "4204:110:39" + } + ] + }, + "id": 5557, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_buildDomainSeparator", + "nameLocation": "4139:21:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5535, + "nodeType": "ParameterList", + "parameters": [], + "src": "4160:2:39" + }, + "returnParameters": { + "id": 5538, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5537, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5557, + "src": "4185:7:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5536, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4185:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4184:9:39" + }, + "scope": 5771, + "src": "4130:191:39", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 5572, + "nodeType": "Block", + "src": "5032:90:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5567, + "name": "_domainSeparatorV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5534, + "src": "5082:18:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 5568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5082:20:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5569, + "name": "structHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5560, + "src": "5104:10:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 5565, + "name": "MessageHashUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6804, + "src": "5049:16:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_MessageHashUtils_$6804_$", + "typeString": "type(library MessageHashUtils)" + } + }, + "id": 5566, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5066:15:39", + "memberName": "toTypedDataHash", + "nodeType": "MemberAccess", + "referencedDeclaration": 6803, + "src": "5049:32:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32,bytes32) pure returns (bytes32)" + } + }, + "id": 5570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5049:66:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5564, + "id": 5571, + "nodeType": "Return", + "src": "5042:73:39" + } + ] + }, + "documentation": { + "id": 5558, + "nodeType": "StructuredDocumentation", + "src": "4327:614:39", + "text": " @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n function returns the hash of the fully encoded EIP712 message for this domain.\n This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n ```solidity\n bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n keccak256(\"Mail(address to,string contents)\"),\n mailTo,\n keccak256(bytes(mailContents))\n )));\n address signer = ECDSA.recover(digest, signature);\n ```" + }, + "id": 5573, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_hashTypedDataV4", + "nameLocation": "4955:16:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5561, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5560, + "mutability": "mutable", + "name": "structHash", + "nameLocation": "4980:10:39", + "nodeType": "VariableDeclaration", + "scope": 5573, + "src": "4972:18:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5559, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4972:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4971:20:39" + }, + "returnParameters": { + "id": 5564, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5563, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5573, + "src": "5023:7:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5562, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5023:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5022:9:39" + }, + "scope": 5771, + "src": "4946:176:39", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 5795 + ], + "body": { + "id": 5633, + "nodeType": "Block", + "src": "5501:575:39", + "statements": [ + { + "assignments": [ + 5594 + ], + "declarations": [ + { + "constant": false, + "id": 5594, + "mutability": "mutable", + "name": "$", + "nameLocation": "5533:1:39", + "nodeType": "VariableDeclaration", + "scope": 5633, + "src": "5511:23:39", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + }, + "typeName": { + "id": 5593, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5592, + "name": "EIP712Storage", + "nameLocations": [ + "5511:13:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5457, + "src": "5511:13:39" + }, + "referencedDeclaration": 5457, + "src": "5511:13:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + } + }, + "visibility": "internal" + } + ], + "id": 5597, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5595, + "name": "_getEIP712Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5468, + "src": "5537:17:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", + "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" + } + }, + "id": 5596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5537:19:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5511:45:39" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 5607, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 5602, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5599, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5594, + "src": "5777:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5600, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5779:11:39", + "memberName": "_hashedName", + "nodeType": "MemberAccess", + "referencedDeclaration": 5449, + "src": "5777:13:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 5601, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5794:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5777:18:39", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 5606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5603, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5594, + "src": "5799:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5604, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5801:14:39", + "memberName": "_hashedVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 5452, + "src": "5799:16:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 5605, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5819:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5799:21:39", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5777:43:39", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4549503731323a20556e696e697469616c697a6564", + "id": 5608, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5822:23:39", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade", + "typeString": "literal_string \"EIP712: Uninitialized\"" + }, + "value": "EIP712: Uninitialized" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade", + "typeString": "literal_string \"EIP712: Uninitialized\"" + } + ], + "id": 5598, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5769:7:39", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5609, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5769:77:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5610, + "nodeType": "ExpressionStatement", + "src": "5769:77:39" + }, + { + "expression": { + "components": [ + { + "hexValue": "0f", + "id": 5611, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "hexString", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5878:7:39", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c", + "typeString": "literal_string hex\"0f\"" + }, + "value": "\u000f" + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5612, + "name": "_EIP712Name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5650, + "src": "5908:11:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$", + "typeString": "function () view returns (string memory)" + } + }, + "id": 5613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5908:13:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5614, + "name": "_EIP712Version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5666, + "src": "5935:14:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$", + "typeString": "function () view returns (string memory)" + } + }, + "id": 5615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5935:16:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "expression": { + "id": 5616, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5965:5:39", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 5617, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5971:7:39", + "memberName": "chainid", + "nodeType": "MemberAccess", + "src": "5965:13:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 5620, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "6000:4:39", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EIP712Upgradeable_$5771", + "typeString": "contract EIP712Upgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_EIP712Upgradeable_$5771", + "typeString": "contract EIP712Upgradeable" + } + ], + "id": 5619, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5992:7:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5618, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5992:7:39", + "typeDescriptions": {} + } + }, + "id": 5621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5992:13:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 5624, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6027:1:39", + "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": 5623, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6019:7:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 5622, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6019:7:39", + "typeDescriptions": {} + } + }, + "id": 5625, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6019:10:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 5629, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6057:1:39", + "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": 5628, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "6043:13:39", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 5626, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6047:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5627, + "nodeType": "ArrayTypeName", + "src": "6047:9:39", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 5630, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6043:16:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 5631, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5864:205:39", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(literal_string hex\"0f\",string memory,string memory,uint256,address,bytes32,uint256[] memory)" + } + }, + "functionReturnParameters": 5591, + "id": 5632, + "nodeType": "Return", + "src": "5857:212:39" + } + ] + }, + "documentation": { + "id": 5574, + "nodeType": "StructuredDocumentation", + "src": "5128:40:39", + "text": " @dev See {IERC-5267}." + }, + "functionSelector": "84b0196e", + "id": 5634, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "eip712Domain", + "nameLocation": "5182:12:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5575, + "nodeType": "ParameterList", + "parameters": [], + "src": "5194:2:39" + }, + "returnParameters": { + "id": 5591, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5577, + "mutability": "mutable", + "name": "fields", + "nameLocation": "5278:6:39", + "nodeType": "VariableDeclaration", + "scope": 5634, + "src": "5271:13:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + "typeName": { + "id": 5576, + "name": "bytes1", + "nodeType": "ElementaryTypeName", + "src": "5271:6:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5579, + "mutability": "mutable", + "name": "name", + "nameLocation": "5312:4:39", + "nodeType": "VariableDeclaration", + "scope": 5634, + "src": "5298:18:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5578, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5298:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5581, + "mutability": "mutable", + "name": "version", + "nameLocation": "5344:7:39", + "nodeType": "VariableDeclaration", + "scope": 5634, + "src": "5330:21:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5580, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5330:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5583, + "mutability": "mutable", + "name": "chainId", + "nameLocation": "5373:7:39", + "nodeType": "VariableDeclaration", + "scope": 5634, + "src": "5365:15:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5582, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5365:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5585, + "mutability": "mutable", + "name": "verifyingContract", + "nameLocation": "5402:17:39", + "nodeType": "VariableDeclaration", + "scope": 5634, + "src": "5394:25:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5584, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5394:7:39", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5587, + "mutability": "mutable", + "name": "salt", + "nameLocation": "5441:4:39", + "nodeType": "VariableDeclaration", + "scope": 5634, + "src": "5433:12:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5586, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5433:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5590, + "mutability": "mutable", + "name": "extensions", + "nameLocation": "5476:10:39", + "nodeType": "VariableDeclaration", + "scope": 5634, + "src": "5459:27:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 5588, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5459:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5589, + "nodeType": "ArrayTypeName", + "src": "5459:9:39", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "5257:239:39" + }, + "scope": 5771, + "src": "5173:903:39", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 5649, + "nodeType": "Block", + "src": "6369:86:39", + "statements": [ + { + "assignments": [ + 5642 + ], + "declarations": [ + { + "constant": false, + "id": 5642, + "mutability": "mutable", + "name": "$", + "nameLocation": "6401:1:39", + "nodeType": "VariableDeclaration", + "scope": 5649, + "src": "6379:23:39", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + }, + "typeName": { + "id": 5641, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5640, + "name": "EIP712Storage", + "nameLocations": [ + "6379:13:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5457, + "src": "6379:13:39" + }, + "referencedDeclaration": 5457, + "src": "6379:13:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + } + }, + "visibility": "internal" + } + ], + "id": 5645, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5643, + "name": "_getEIP712Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5468, + "src": "6405:17:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", + "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" + } + }, + "id": 5644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6405:19:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6379:45:39" + }, + { + "expression": { + "expression": { + "id": 5646, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5642, + "src": "6441:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5647, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6443:5:39", + "memberName": "_name", + "nodeType": "MemberAccess", + "referencedDeclaration": 5454, + "src": "6441:7:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 5639, + "id": 5648, + "nodeType": "Return", + "src": "6434:14:39" + } + ] + }, + "documentation": { + "id": 5635, + "nodeType": "StructuredDocumentation", + "src": "6082:213:39", + "text": " @dev The name parameter for the EIP712 domain.\n NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n are a concern." + }, + "id": 5650, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_EIP712Name", + "nameLocation": "6309:11:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5636, + "nodeType": "ParameterList", + "parameters": [], + "src": "6320:2:39" + }, + "returnParameters": { + "id": 5639, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5638, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5650, + "src": "6354:13:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5637, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6354:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "6353:15:39" + }, + "scope": 5771, + "src": "6300:155:39", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5665, + "nodeType": "Block", + "src": "6754:89:39", + "statements": [ + { + "assignments": [ + 5658 + ], + "declarations": [ + { + "constant": false, + "id": 5658, + "mutability": "mutable", + "name": "$", + "nameLocation": "6786:1:39", + "nodeType": "VariableDeclaration", + "scope": 5665, + "src": "6764:23:39", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + }, + "typeName": { + "id": 5657, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5656, + "name": "EIP712Storage", + "nameLocations": [ + "6764:13:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5457, + "src": "6764:13:39" + }, + "referencedDeclaration": 5457, + "src": "6764:13:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + } + }, + "visibility": "internal" + } + ], + "id": 5661, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5659, + "name": "_getEIP712Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5468, + "src": "6790:17:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", + "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" + } + }, + "id": 5660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6790:19:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6764:45:39" + }, + { + "expression": { + "expression": { + "id": 5662, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5658, + "src": "6826:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5663, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6828:8:39", + "memberName": "_version", + "nodeType": "MemberAccess", + "referencedDeclaration": 5456, + "src": "6826:10:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 5655, + "id": 5664, + "nodeType": "Return", + "src": "6819:17:39" + } + ] + }, + "documentation": { + "id": 5651, + "nodeType": "StructuredDocumentation", + "src": "6461:216:39", + "text": " @dev The version parameter for the EIP712 domain.\n NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n are a concern." + }, + "id": 5666, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_EIP712Version", + "nameLocation": "6691:14:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5652, + "nodeType": "ParameterList", + "parameters": [], + "src": "6705:2:39" + }, + "returnParameters": { + "id": 5655, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5654, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5666, + "src": "6739:13:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5653, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6739:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "6738:15:39" + }, + "scope": 5771, + "src": "6682:161:39", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5717, + "nodeType": "Block", + "src": "7117:628:39", + "statements": [ + { + "assignments": [ + 5674 + ], + "declarations": [ + { + "constant": false, + "id": 5674, + "mutability": "mutable", + "name": "$", + "nameLocation": "7149:1:39", + "nodeType": "VariableDeclaration", + "scope": 5717, + "src": "7127:23:39", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + }, + "typeName": { + "id": 5673, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5672, + "name": "EIP712Storage", + "nameLocations": [ + "7127:13:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5457, + "src": "7127:13:39" + }, + "referencedDeclaration": 5457, + "src": "7127:13:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + } + }, + "visibility": "internal" + } + ], + "id": 5677, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5675, + "name": "_getEIP712Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5468, + "src": "7153:17:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", + "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" + } + }, + "id": 5676, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7153:19:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7127:45:39" + }, + { + "assignments": [ + 5679 + ], + "declarations": [ + { + "constant": false, + "id": 5679, + "mutability": "mutable", + "name": "name", + "nameLocation": "7196:4:39", + "nodeType": "VariableDeclaration", + "scope": 5717, + "src": "7182:18:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5678, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "7182:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 5682, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5680, + "name": "_EIP712Name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5650, + "src": "7203:11:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$", + "typeString": "function () view returns (string memory)" + } + }, + "id": 5681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7203:13:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7182:34:39" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 5685, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5679, + "src": "7236:4:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 5684, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7230:5:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 5683, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7230:5:39", + "typeDescriptions": {} + } + }, + "id": 5686, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7230:11:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 5687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7242:6:39", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "7230:18:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 5688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7251:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7230:22:39", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 5715, + "nodeType": "Block", + "src": "7314:425:39", + "statements": [ + { + "assignments": [ + 5699 + ], + "declarations": [ + { + "constant": false, + "id": 5699, + "mutability": "mutable", + "name": "hashedName", + "nameLocation": "7559:10:39", + "nodeType": "VariableDeclaration", + "scope": 5715, + "src": "7551:18:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5698, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7551:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5702, + "initialValue": { + "expression": { + "id": 5700, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5674, + "src": "7572:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5701, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7574:11:39", + "memberName": "_hashedName", + "nodeType": "MemberAccess", + "referencedDeclaration": 5449, + "src": "7572:13:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7551:34:39" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 5705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5703, + "name": "hashedName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5699, + "src": "7603:10:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 5704, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7617:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7603:15:39", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 5713, + "nodeType": "Block", + "src": "7676:53:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "", + "id": 5710, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7711:2:39", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "id": 5709, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "7701:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 5711, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7701:13:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5671, + "id": 5712, + "nodeType": "Return", + "src": "7694:20:39" + } + ] + }, + "id": 5714, + "nodeType": "IfStatement", + "src": "7599:130:39", + "trueBody": { + "id": 5708, + "nodeType": "Block", + "src": "7620:50:39", + "statements": [ + { + "expression": { + "id": 5706, + "name": "hashedName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5699, + "src": "7645:10:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5671, + "id": 5707, + "nodeType": "Return", + "src": "7638:17:39" + } + ] + } + } + ] + }, + "id": 5716, + "nodeType": "IfStatement", + "src": "7226:513:39", + "trueBody": { + "id": 5697, + "nodeType": "Block", + "src": "7254:54:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 5693, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5679, + "src": "7291:4:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 5692, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7285:5:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 5691, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7285:5:39", + "typeDescriptions": {} + } + }, + "id": 5694, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7285:11:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 5690, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "7275:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 5695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7275:22:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5671, + "id": 5696, + "nodeType": "Return", + "src": "7268:29:39" + } + ] + } + } + ] + }, + "documentation": { + "id": 5667, + "nodeType": "StructuredDocumentation", + "src": "6849:204:39", + "text": " @dev The hash of the name parameter for the EIP712 domain.\n NOTE: In previous versions this function was virtual. In this version you should override `_EIP712Name` instead." + }, + "id": 5718, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_EIP712NameHash", + "nameLocation": "7067:15:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5668, + "nodeType": "ParameterList", + "parameters": [], + "src": "7082:2:39" + }, + "returnParameters": { + "id": 5671, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5670, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5718, + "src": "7108:7:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5669, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7108:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7107:9:39" + }, + "scope": 5771, + "src": "7058:687:39", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5769, + "nodeType": "Block", + "src": "8028:661:39", + "statements": [ + { + "assignments": [ + 5726 + ], + "declarations": [ + { + "constant": false, + "id": 5726, + "mutability": "mutable", + "name": "$", + "nameLocation": "8060:1:39", + "nodeType": "VariableDeclaration", + "scope": 5769, + "src": "8038:23:39", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + }, + "typeName": { + "id": 5725, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 5724, + "name": "EIP712Storage", + "nameLocations": [ + "8038:13:39" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5457, + "src": "8038:13:39" + }, + "referencedDeclaration": 5457, + "src": "8038:13:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage" + } + }, + "visibility": "internal" + } + ], + "id": 5729, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5727, + "name": "_getEIP712Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5468, + "src": "8064:17:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", + "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" + } + }, + "id": 5728, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8064:19:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8038:45:39" + }, + { + "assignments": [ + 5731 + ], + "declarations": [ + { + "constant": false, + "id": 5731, + "mutability": "mutable", + "name": "version", + "nameLocation": "8107:7:39", + "nodeType": "VariableDeclaration", + "scope": 5769, + "src": "8093:21:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5730, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "8093:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 5734, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5732, + "name": "_EIP712Version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5666, + "src": "8117:14:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$", + "typeString": "function () view returns (string memory)" + } + }, + "id": 5733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8117:16:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8093:40:39" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 5737, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5731, + "src": "8153:7:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 5736, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8147:5:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 5735, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8147:5:39", + "typeDescriptions": {} + } + }, + "id": 5738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8147:14:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 5739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8162:6:39", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "8147:21:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 5740, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8171:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8147:25:39", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 5767, + "nodeType": "Block", + "src": "8237:446:39", + "statements": [ + { + "assignments": [ + 5751 + ], + "declarations": [ + { + "constant": false, + "id": 5751, + "mutability": "mutable", + "name": "hashedVersion", + "nameLocation": "8491:13:39", + "nodeType": "VariableDeclaration", + "scope": 5767, + "src": "8483:21:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5750, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8483:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5754, + "initialValue": { + "expression": { + "id": 5752, + "name": "$", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5726, + "src": "8507:1:39", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", + "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" + } + }, + "id": 5753, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8509:14:39", + "memberName": "_hashedVersion", + "nodeType": "MemberAccess", + "referencedDeclaration": 5452, + "src": "8507:16:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8483:40:39" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 5757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5755, + "name": "hashedVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5751, + "src": "8541:13:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 5756, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8558:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8541:18:39", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 5765, + "nodeType": "Block", + "src": "8620:53:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "", + "id": 5762, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8655:2:39", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "id": 5761, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "8645:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 5763, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8645:13:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5723, + "id": 5764, + "nodeType": "Return", + "src": "8638:20:39" + } + ] + }, + "id": 5766, + "nodeType": "IfStatement", + "src": "8537:136:39", + "trueBody": { + "id": 5760, + "nodeType": "Block", + "src": "8561:53:39", + "statements": [ + { + "expression": { + "id": 5758, + "name": "hashedVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5751, + "src": "8586:13:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5723, + "id": 5759, + "nodeType": "Return", + "src": "8579:20:39" + } + ] + } + } + ] + }, + "id": 5768, + "nodeType": "IfStatement", + "src": "8143:540:39", + "trueBody": { + "id": 5749, + "nodeType": "Block", + "src": "8174:57:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 5745, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5731, + "src": "8211:7:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 5744, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8205:5:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 5743, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8205:5:39", + "typeDescriptions": {} + } + }, + "id": 5746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8205:14:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 5742, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "8195:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 5747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8195:25:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5723, + "id": 5748, + "nodeType": "Return", + "src": "8188:32:39" + } + ] + } + } + ] + }, + "documentation": { + "id": 5719, + "nodeType": "StructuredDocumentation", + "src": "7751:210:39", + "text": " @dev The hash of the version parameter for the EIP712 domain.\n NOTE: In previous versions this function was virtual. In this version you should override `_EIP712Version` instead." + }, + "id": 5770, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_EIP712VersionHash", + "nameLocation": "7975:18:39", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5720, + "nodeType": "ParameterList", + "parameters": [], + "src": "7993:2:39" + }, + "returnParameters": { + "id": 5723, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5722, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5770, + "src": "8019:7:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5721, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8019:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "8018:9:39" + }, + "scope": 5771, + "src": "7966:723:39", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 5772, + "src": "1959:6732:39", + "usedErrors": [ + 4865, + 4868 + ], + "usedEvents": [ + 4873, + 5776 + ] + } + ], + "src": "113:8579:39" + }, + "id": 39 + }, + "@openzeppelin/contracts/interfaces/IERC5267.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/interfaces/IERC5267.sol", + "exportedSymbols": { + "IERC5267": [ + 5796 + ] + }, + "id": 5797, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5773, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "107:24:40" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IERC5267", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 5796, + "linearizedBaseContracts": [ + 5796 + ], + "name": "IERC5267", + "nameLocation": "143:8:40", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 5774, + "nodeType": "StructuredDocumentation", + "src": "158:84:40", + "text": " @dev MAY be emitted to signal that the domain could have changed." + }, + "eventSelector": "0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31", + "id": 5776, + "name": "EIP712DomainChanged", + "nameLocation": "253:19:40", + "nodeType": "EventDefinition", + "parameters": { + "id": 5775, + "nodeType": "ParameterList", + "parameters": [], + "src": "272:2:40" + }, + "src": "247:28:40" + }, + { + "documentation": { + "id": 5777, + "nodeType": "StructuredDocumentation", + "src": "281:140:40", + "text": " @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n signature." + }, + "functionSelector": "84b0196e", + "id": 5795, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "eip712Domain", + "nameLocation": "435:12:40", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5778, + "nodeType": "ParameterList", + "parameters": [], + "src": "447:2:40" + }, + "returnParameters": { + "id": 5794, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5780, + "mutability": "mutable", + "name": "fields", + "nameLocation": "517:6:40", + "nodeType": "VariableDeclaration", + "scope": 5795, + "src": "510:13:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + "typeName": { + "id": 5779, + "name": "bytes1", + "nodeType": "ElementaryTypeName", + "src": "510:6:40", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5782, + "mutability": "mutable", + "name": "name", + "nameLocation": "551:4:40", + "nodeType": "VariableDeclaration", + "scope": 5795, + "src": "537:18:40", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5781, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "537:6:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5784, + "mutability": "mutable", + "name": "version", + "nameLocation": "583:7:40", + "nodeType": "VariableDeclaration", + "scope": 5795, + "src": "569:21:40", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 5783, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "569:6:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5786, + "mutability": "mutable", + "name": "chainId", + "nameLocation": "612:7:40", + "nodeType": "VariableDeclaration", + "scope": 5795, + "src": "604:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5785, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "604:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5788, + "mutability": "mutable", + "name": "verifyingContract", + "nameLocation": "641:17:40", + "nodeType": "VariableDeclaration", + "scope": 5795, + "src": "633:25:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5787, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "633:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5790, + "mutability": "mutable", + "name": "salt", + "nameLocation": "680:4:40", + "nodeType": "VariableDeclaration", + "scope": 5795, + "src": "672:12:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5789, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "672:7:40", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5793, + "mutability": "mutable", + "name": "extensions", + "nameLocation": "715:10:40", + "nodeType": "VariableDeclaration", + "scope": 5795, + "src": "698:27:40", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 5791, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "698:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5792, + "nodeType": "ArrayTypeName", + "src": "698:9:40", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "496:239:40" + }, + "scope": 5796, + "src": "426:310:40", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 5797, + "src": "133:605:40", + "usedErrors": [], + "usedEvents": [ + 5776 + ] + } + ], + "src": "107:632:40" + }, + "id": 40 + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "exportedSymbols": { + "IERC20": [ + 5874 + ] + }, + "id": 5875, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5798, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "106:24:41" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IERC20", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 5799, + "nodeType": "StructuredDocumentation", + "src": "132:70:41", + "text": " @dev Interface of the ERC20 standard as defined in the EIP." + }, + "fullyImplemented": false, + "id": 5874, + "linearizedBaseContracts": [ + 5874 + ], + "name": "IERC20", + "nameLocation": "213:6:41", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 5800, + "nodeType": "StructuredDocumentation", + "src": "226:158:41", + "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero." + }, + "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "id": 5808, + "name": "Transfer", + "nameLocation": "395:8:41", + "nodeType": "EventDefinition", + "parameters": { + "id": 5807, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5802, + "indexed": true, + "mutability": "mutable", + "name": "from", + "nameLocation": "420:4:41", + "nodeType": "VariableDeclaration", + "scope": 5808, + "src": "404:20:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5801, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "404:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5804, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nameLocation": "442:2:41", + "nodeType": "VariableDeclaration", + "scope": 5808, + "src": "426:18:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5803, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "426:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5806, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nameLocation": "454:5:41", + "nodeType": "VariableDeclaration", + "scope": 5808, + "src": "446:13:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5805, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "446:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "403:57:41" + }, + "src": "389:72:41" + }, + { + "anonymous": false, + "documentation": { + "id": 5809, + "nodeType": "StructuredDocumentation", + "src": "467:148:41", + "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance." + }, + "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "id": 5817, + "name": "Approval", + "nameLocation": "626:8:41", + "nodeType": "EventDefinition", + "parameters": { + "id": 5816, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5811, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "651:5:41", + "nodeType": "VariableDeclaration", + "scope": 5817, + "src": "635:21:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5810, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "635:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5813, + "indexed": true, + "mutability": "mutable", + "name": "spender", + "nameLocation": "674:7:41", + "nodeType": "VariableDeclaration", + "scope": 5817, + "src": "658:23:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5812, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "658:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5815, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nameLocation": "691:5:41", + "nodeType": "VariableDeclaration", + "scope": 5817, + "src": "683:13:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5814, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "683:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "634:63:41" + }, + "src": "620:78:41" + }, + { + "documentation": { + "id": 5818, + "nodeType": "StructuredDocumentation", + "src": "704:65:41", + "text": " @dev Returns the value of tokens in existence." + }, + "functionSelector": "18160ddd", + "id": 5823, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nameLocation": "783:11:41", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5819, + "nodeType": "ParameterList", + "parameters": [], + "src": "794:2:41" + }, + "returnParameters": { + "id": 5822, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5821, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5823, + "src": "820:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5820, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "820:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "819:9:41" + }, + "scope": 5874, + "src": "774:55:41", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 5824, + "nodeType": "StructuredDocumentation", + "src": "835:71:41", + "text": " @dev Returns the value of tokens owned by `account`." + }, + "functionSelector": "70a08231", + "id": 5831, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nameLocation": "920:9:41", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5827, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5826, + "mutability": "mutable", + "name": "account", + "nameLocation": "938:7:41", + "nodeType": "VariableDeclaration", + "scope": 5831, + "src": "930:15:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5825, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "930:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "929:17:41" + }, + "returnParameters": { + "id": 5830, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5829, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5831, + "src": "970:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5828, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "970:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "969:9:41" + }, + "scope": 5874, + "src": "911:68:41", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 5832, + "nodeType": "StructuredDocumentation", + "src": "985:213:41", + "text": " @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." + }, + "functionSelector": "a9059cbb", + "id": 5841, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nameLocation": "1212:8:41", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5837, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5834, + "mutability": "mutable", + "name": "to", + "nameLocation": "1229:2:41", + "nodeType": "VariableDeclaration", + "scope": 5841, + "src": "1221:10:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5833, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1221:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5836, + "mutability": "mutable", + "name": "value", + "nameLocation": "1241:5:41", + "nodeType": "VariableDeclaration", + "scope": 5841, + "src": "1233:13:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5835, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1233:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1220:27:41" + }, + "returnParameters": { + "id": 5840, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5839, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5841, + "src": "1266:4:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5838, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1266:4:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1265:6:41" + }, + "scope": 5874, + "src": "1203:69:41", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 5842, + "nodeType": "StructuredDocumentation", + "src": "1278:264:41", + "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called." + }, + "functionSelector": "dd62ed3e", + "id": 5851, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nameLocation": "1556:9:41", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5847, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5844, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1574:5:41", + "nodeType": "VariableDeclaration", + "scope": 5851, + "src": "1566:13:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5843, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1566:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5846, + "mutability": "mutable", + "name": "spender", + "nameLocation": "1589:7:41", + "nodeType": "VariableDeclaration", + "scope": 5851, + "src": "1581:15:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5845, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1581:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1565:32:41" + }, + "returnParameters": { + "id": 5850, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5849, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5851, + "src": "1621:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5848, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1621:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1620:9:41" + }, + "scope": 5874, + "src": "1547:83:41", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 5852, + "nodeType": "StructuredDocumentation", + "src": "1636:667:41", + "text": " @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event." + }, + "functionSelector": "095ea7b3", + "id": 5861, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approve", + "nameLocation": "2317:7:41", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5857, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5854, + "mutability": "mutable", + "name": "spender", + "nameLocation": "2333:7:41", + "nodeType": "VariableDeclaration", + "scope": 5861, + "src": "2325:15:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5853, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2325:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5856, + "mutability": "mutable", + "name": "value", + "nameLocation": "2350:5:41", + "nodeType": "VariableDeclaration", + "scope": 5861, + "src": "2342:13:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5855, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2342:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2324:32:41" + }, + "returnParameters": { + "id": 5860, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5859, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5861, + "src": "2375:4:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5858, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2375:4:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2374:6:41" + }, + "scope": 5874, + "src": "2308:73:41", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 5862, + "nodeType": "StructuredDocumentation", + "src": "2387:297:41", + "text": " @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." + }, + "functionSelector": "23b872dd", + "id": 5873, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nameLocation": "2698:12:41", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5869, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5864, + "mutability": "mutable", + "name": "from", + "nameLocation": "2719:4:41", + "nodeType": "VariableDeclaration", + "scope": 5873, + "src": "2711:12:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5863, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2711:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5866, + "mutability": "mutable", + "name": "to", + "nameLocation": "2733:2:41", + "nodeType": "VariableDeclaration", + "scope": 5873, + "src": "2725:10:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5865, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2725:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5868, + "mutability": "mutable", + "name": "value", + "nameLocation": "2745:5:41", + "nodeType": "VariableDeclaration", + "scope": 5873, + "src": "2737:13:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5867, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2737:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2710:41:41" + }, + "returnParameters": { + "id": 5872, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5871, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5873, + "src": "2770:4:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5870, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2770:4:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2769:6:41" + }, + "scope": 5874, + "src": "2689:87:41", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 5875, + "src": "203:2575:41", + "usedErrors": [], + "usedEvents": [ + 5808, + 5817 + ] + } + ], + "src": "106:2673:41" + }, + "id": 41 + }, + "@openzeppelin/contracts/utils/Address.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/Address.sol", + "exportedSymbols": { + "Address": [ + 6127 + ] + }, + "id": 6128, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5876, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "101:24:42" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "Address", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 5877, + "nodeType": "StructuredDocumentation", + "src": "127:67:42", + "text": " @dev Collection of functions related to the address type" + }, + "fullyImplemented": true, + "id": 6127, + "linearizedBaseContracts": [ + 6127 + ], + "name": "Address", + "nameLocation": "203:7:42", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 5878, + "nodeType": "StructuredDocumentation", + "src": "217:94:42", + "text": " @dev The ETH balance of the account is not enough to perform the operation." + }, + "errorSelector": "cd786059", + "id": 5882, + "name": "AddressInsufficientBalance", + "nameLocation": "322:26:42", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 5881, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5880, + "mutability": "mutable", + "name": "account", + "nameLocation": "357:7:42", + "nodeType": "VariableDeclaration", + "scope": 5882, + "src": "349:15:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5879, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "349:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "348:17:42" + }, + "src": "316:50:42" + }, + { + "documentation": { + "id": 5883, + "nodeType": "StructuredDocumentation", + "src": "372:75:42", + "text": " @dev There's no code at `target` (it is not a contract)." + }, + "errorSelector": "9996b315", + "id": 5887, + "name": "AddressEmptyCode", + "nameLocation": "458:16:42", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 5886, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5885, + "mutability": "mutable", + "name": "target", + "nameLocation": "483:6:42", + "nodeType": "VariableDeclaration", + "scope": 5887, + "src": "475:14:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5884, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "475:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "474:16:42" + }, + "src": "452:39:42" + }, + { + "documentation": { + "id": 5888, + "nodeType": "StructuredDocumentation", + "src": "497:89:42", + "text": " @dev A call to an address target failed. The target may have reverted." + }, + "errorSelector": "1425ea42", + "id": 5890, + "name": "FailedInnerCall", + "nameLocation": "597:15:42", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 5889, + "nodeType": "ParameterList", + "parameters": [], + "src": "612:2:42" + }, + "src": "591:24:42" + }, + { + "body": { + "id": 5930, + "nodeType": "Block", + "src": "1602:260:42", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 5900, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1624:4:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Address_$6127", + "typeString": "library Address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Address_$6127", + "typeString": "library Address" + } + ], + "id": 5899, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1616:7:42", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5898, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1616:7:42", + "typeDescriptions": {} + } + }, + "id": 5901, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1616:13:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1630:7:42", + "memberName": "balance", + "nodeType": "MemberAccess", + "src": "1616:21:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5903, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5895, + "src": "1640:6:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1616:30:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5913, + "nodeType": "IfStatement", + "src": "1612:109:42", + "trueBody": { + "id": 5912, + "nodeType": "Block", + "src": "1648:73:42", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 5908, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1704:4:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Address_$6127", + "typeString": "library Address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Address_$6127", + "typeString": "library Address" + } + ], + "id": 5907, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1696:7:42", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5906, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1696:7:42", + "typeDescriptions": {} + } + }, + "id": 5909, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1696:13:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 5905, + "name": "AddressInsufficientBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5882, + "src": "1669:26:42", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 5910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1669:41:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 5911, + "nodeType": "RevertStatement", + "src": "1662:48:42" + } + ] + } + }, + { + "assignments": [ + 5915, + null + ], + "declarations": [ + { + "constant": false, + "id": 5915, + "mutability": "mutable", + "name": "success", + "nameLocation": "1737:7:42", + "nodeType": "VariableDeclaration", + "scope": 5930, + "src": "1732:12:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5914, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1732:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 5922, + "initialValue": { + "arguments": [ + { + "hexValue": "", + "id": 5920, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1780:2:42", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "id": 5916, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5893, + "src": "1750:9:42", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 5917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1760:4:42", + "memberName": "call", + "nodeType": "MemberAccess", + "src": "1750:14:42", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 5919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 5918, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5895, + "src": "1772:6:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "1750:29:42", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 5921, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1750:33:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1731:52:42" + }, + { + "condition": { + "id": 5924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "1797:8:42", + "subExpression": { + "id": 5923, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5915, + "src": "1798:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5929, + "nodeType": "IfStatement", + "src": "1793:63:42", + "trueBody": { + "id": 5928, + "nodeType": "Block", + "src": "1807:49:42", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5925, + "name": "FailedInnerCall", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5890, + "src": "1828:15:42", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 5926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1828:17:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 5927, + "nodeType": "RevertStatement", + "src": "1821:24:42" + } + ] + } + } + ] + }, + "documentation": { + "id": 5891, + "nodeType": "StructuredDocumentation", + "src": "621:905:42", + "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]." + }, + "id": 5931, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sendValue", + "nameLocation": "1540:9:42", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5896, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5893, + "mutability": "mutable", + "name": "recipient", + "nameLocation": "1566:9:42", + "nodeType": "VariableDeclaration", + "scope": 5931, + "src": "1550:25:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 5892, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1550:15:42", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5895, + "mutability": "mutable", + "name": "amount", + "nameLocation": "1585:6:42", + "nodeType": "VariableDeclaration", + "scope": 5931, + "src": "1577:14:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5894, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1577:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1549:43:42" + }, + "returnParameters": { + "id": 5897, + "nodeType": "ParameterList", + "parameters": [], + "src": "1602:0:42" + }, + "scope": 6127, + "src": "1531:331:42", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5947, + "nodeType": "Block", + "src": "2794:62:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5942, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5934, + "src": "2833:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5943, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5936, + "src": "2841:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "hexValue": "30", + "id": 5944, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2847:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 5941, + "name": "functionCallWithValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "2811:21:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (address,bytes memory,uint256) returns (bytes memory)" + } + }, + "id": 5945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2811:38:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 5940, + "id": 5946, + "nodeType": "Return", + "src": "2804:45:42" + } + ] + }, + "documentation": { + "id": 5932, + "nodeType": "StructuredDocumentation", + "src": "1868:832:42", + "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {FailedInnerCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert." + }, + "id": 5948, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "functionCall", + "nameLocation": "2714:12:42", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5937, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5934, + "mutability": "mutable", + "name": "target", + "nameLocation": "2735:6:42", + "nodeType": "VariableDeclaration", + "scope": 5948, + "src": "2727:14:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5933, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2727:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5936, + "mutability": "mutable", + "name": "data", + "nameLocation": "2756:4:42", + "nodeType": "VariableDeclaration", + "scope": 5948, + "src": "2743:17:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5935, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2743:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2726:35:42" + }, + "returnParameters": { + "id": 5940, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5939, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5948, + "src": "2780:12:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5938, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2780:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2779:14:42" + }, + "scope": 6127, + "src": "2705:151:42", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5993, + "nodeType": "Block", + "src": "3293:279:42", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5966, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 5962, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3315:4:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Address_$6127", + "typeString": "library Address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Address_$6127", + "typeString": "library Address" + } + ], + "id": 5961, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3307:7:42", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5960, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3307:7:42", + "typeDescriptions": {} + } + }, + "id": 5963, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3307:13:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3321:7:42", + "memberName": "balance", + "nodeType": "MemberAccess", + "src": "3307:21:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5965, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5955, + "src": "3331:5:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3307:29:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5975, + "nodeType": "IfStatement", + "src": "3303:108:42", + "trueBody": { + "id": 5974, + "nodeType": "Block", + "src": "3338:73:42", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 5970, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3394:4:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Address_$6127", + "typeString": "library Address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Address_$6127", + "typeString": "library Address" + } + ], + "id": 5969, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3386:7:42", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5968, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3386:7:42", + "typeDescriptions": {} + } + }, + "id": 5971, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3386:13:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 5967, + "name": "AddressInsufficientBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5882, + "src": "3359:26:42", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 5972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3359:41:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 5973, + "nodeType": "RevertStatement", + "src": "3352:48:42" + } + ] + } + }, + { + "assignments": [ + 5977, + 5979 + ], + "declarations": [ + { + "constant": false, + "id": 5977, + "mutability": "mutable", + "name": "success", + "nameLocation": "3426:7:42", + "nodeType": "VariableDeclaration", + "scope": 5993, + "src": "3421:12:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5976, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3421:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5979, + "mutability": "mutable", + "name": "returndata", + "nameLocation": "3448:10:42", + "nodeType": "VariableDeclaration", + "scope": 5993, + "src": "3435:23:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5978, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3435:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 5986, + "initialValue": { + "arguments": [ + { + "id": 5984, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5953, + "src": "3488:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 5980, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5951, + "src": "3462:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3469:4:42", + "memberName": "call", + "nodeType": "MemberAccess", + "src": "3462:11:42", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 5983, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 5982, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5955, + "src": "3481:5:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "3462:25:42", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 5985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3462:31:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3420:73:42" + }, + { + "expression": { + "arguments": [ + { + "id": 5988, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5951, + "src": "3537:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5989, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5977, + "src": "3545:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 5990, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5979, + "src": "3554:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 5987, + "name": "verifyCallResultFromTarget", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6086, + "src": "3510:26:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (address,bool,bytes memory) view returns (bytes memory)" + } + }, + "id": 5991, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3510:55:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 5959, + "id": 5992, + "nodeType": "Return", + "src": "3503:62:42" + } + ] + }, + "documentation": { + "id": 5949, + "nodeType": "StructuredDocumentation", + "src": "2862:313:42", + "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`." + }, + "id": 5994, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "functionCallWithValue", + "nameLocation": "3189:21:42", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5956, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5951, + "mutability": "mutable", + "name": "target", + "nameLocation": "3219:6:42", + "nodeType": "VariableDeclaration", + "scope": 5994, + "src": "3211:14:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5950, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3211:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5953, + "mutability": "mutable", + "name": "data", + "nameLocation": "3240:4:42", + "nodeType": "VariableDeclaration", + "scope": 5994, + "src": "3227:17:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5952, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3227:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5955, + "mutability": "mutable", + "name": "value", + "nameLocation": "3254:5:42", + "nodeType": "VariableDeclaration", + "scope": 5994, + "src": "3246:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5954, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3246:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3210:50:42" + }, + "returnParameters": { + "id": 5959, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5958, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 5994, + "src": "3279:12:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5957, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3279:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3278:14:42" + }, + "scope": 6127, + "src": "3180:392:42", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6019, + "nodeType": "Block", + "src": "3811:154:42", + "statements": [ + { + "assignments": [ + 6005, + 6007 + ], + "declarations": [ + { + "constant": false, + "id": 6005, + "mutability": "mutable", + "name": "success", + "nameLocation": "3827:7:42", + "nodeType": "VariableDeclaration", + "scope": 6019, + "src": "3822:12:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6004, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3822:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6007, + "mutability": "mutable", + "name": "returndata", + "nameLocation": "3849:10:42", + "nodeType": "VariableDeclaration", + "scope": 6019, + "src": "3836:23:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6006, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3836:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 6012, + "initialValue": { + "arguments": [ + { + "id": 6010, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5999, + "src": "3881:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 6008, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5997, + "src": "3863:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 6009, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3870:10:42", + "memberName": "staticcall", + "nodeType": "MemberAccess", + "src": "3863:17:42", + "typeDescriptions": { + "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) view returns (bool,bytes memory)" + } + }, + "id": 6011, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3863:23:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3821:65:42" + }, + { + "expression": { + "arguments": [ + { + "id": 6014, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5997, + "src": "3930:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 6015, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6005, + "src": "3938:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 6016, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6007, + "src": "3947:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6013, + "name": "verifyCallResultFromTarget", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6086, + "src": "3903:26:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (address,bool,bytes memory) view returns (bytes memory)" + } + }, + "id": 6017, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3903:55:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6003, + "id": 6018, + "nodeType": "Return", + "src": "3896:62:42" + } + ] + }, + "documentation": { + "id": 5995, + "nodeType": "StructuredDocumentation", + "src": "3578:128:42", + "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call." + }, + "id": 6020, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "functionStaticCall", + "nameLocation": "3720:18:42", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6000, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5997, + "mutability": "mutable", + "name": "target", + "nameLocation": "3747:6:42", + "nodeType": "VariableDeclaration", + "scope": 6020, + "src": "3739:14:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5996, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3739:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5999, + "mutability": "mutable", + "name": "data", + "nameLocation": "3768:4:42", + "nodeType": "VariableDeclaration", + "scope": 6020, + "src": "3755:17:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5998, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3755:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3738:35:42" + }, + "returnParameters": { + "id": 6003, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6002, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6020, + "src": "3797:12:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6001, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3797:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3796:14:42" + }, + "scope": 6127, + "src": "3711:254:42", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6045, + "nodeType": "Block", + "src": "4203:156:42", + "statements": [ + { + "assignments": [ + 6031, + 6033 + ], + "declarations": [ + { + "constant": false, + "id": 6031, + "mutability": "mutable", + "name": "success", + "nameLocation": "4219:7:42", + "nodeType": "VariableDeclaration", + "scope": 6045, + "src": "4214:12:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6030, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4214:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6033, + "mutability": "mutable", + "name": "returndata", + "nameLocation": "4241:10:42", + "nodeType": "VariableDeclaration", + "scope": 6045, + "src": "4228:23:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6032, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4228:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 6038, + "initialValue": { + "arguments": [ + { + "id": 6036, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6025, + "src": "4275:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 6034, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6023, + "src": "4255:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 6035, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4262:12:42", + "memberName": "delegatecall", + "nodeType": "MemberAccess", + "src": "4255:19:42", + "typeDescriptions": { + "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) returns (bool,bytes memory)" + } + }, + "id": 6037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4255:25:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4213:67:42" + }, + { + "expression": { + "arguments": [ + { + "id": 6040, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6023, + "src": "4324:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 6041, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6031, + "src": "4332:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 6042, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6033, + "src": "4341:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6039, + "name": "verifyCallResultFromTarget", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6086, + "src": "4297:26:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (address,bool,bytes memory) view returns (bytes memory)" + } + }, + "id": 6043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4297:55:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6029, + "id": 6044, + "nodeType": "Return", + "src": "4290:62:42" + } + ] + }, + "documentation": { + "id": 6021, + "nodeType": "StructuredDocumentation", + "src": "3971:130:42", + "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call." + }, + "id": 6046, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "functionDelegateCall", + "nameLocation": "4115:20:42", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6026, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6023, + "mutability": "mutable", + "name": "target", + "nameLocation": "4144:6:42", + "nodeType": "VariableDeclaration", + "scope": 6046, + "src": "4136:14:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6022, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4136:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6025, + "mutability": "mutable", + "name": "data", + "nameLocation": "4165:4:42", + "nodeType": "VariableDeclaration", + "scope": 6046, + "src": "4152:17:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6024, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4152:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4135:35:42" + }, + "returnParameters": { + "id": 6029, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6028, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6046, + "src": "4189:12:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6027, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4189:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4188:14:42" + }, + "scope": 6127, + "src": "4106:253:42", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6085, + "nodeType": "Block", + "src": "4783:424:42", + "statements": [ + { + "condition": { + "id": 6059, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4797:8:42", + "subExpression": { + "id": 6058, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6051, + "src": "4798:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 6083, + "nodeType": "Block", + "src": "4857:344:42", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 6074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6068, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 6065, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6053, + "src": "5045:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6066, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5056:6:42", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5045:17:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6067, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5066:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5045:22:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 6069, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6049, + "src": "5071:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 6070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5078:4:42", + "memberName": "code", + "nodeType": "MemberAccess", + "src": "5071:11:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5083:6:42", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5071:18:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6072, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5093:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5071:23:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5045:49:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6080, + "nodeType": "IfStatement", + "src": "5041:119:42", + "trueBody": { + "id": 6079, + "nodeType": "Block", + "src": "5096:64:42", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 6076, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6049, + "src": "5138:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6075, + "name": "AddressEmptyCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5887, + "src": "5121:16:42", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 6077, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5121:24:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 6078, + "nodeType": "RevertStatement", + "src": "5114:31:42" + } + ] + } + }, + { + "expression": { + "id": 6081, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6053, + "src": "5180:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6057, + "id": 6082, + "nodeType": "Return", + "src": "5173:17:42" + } + ] + }, + "id": 6084, + "nodeType": "IfStatement", + "src": "4793:408:42", + "trueBody": { + "id": 6064, + "nodeType": "Block", + "src": "4807:44:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6061, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6053, + "src": "4829:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6060, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6126, + "src": "4821:7:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (bytes memory) pure" + } + }, + "id": 6062, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4821:19:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6063, + "nodeType": "ExpressionStatement", + "src": "4821:19:42" + } + ] + } + } + ] + }, + "documentation": { + "id": 6047, + "nodeType": "StructuredDocumentation", + "src": "4365:255:42", + "text": " @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n unsuccessful call." + }, + "id": 6086, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "verifyCallResultFromTarget", + "nameLocation": "4634:26:42", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6054, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6049, + "mutability": "mutable", + "name": "target", + "nameLocation": "4678:6:42", + "nodeType": "VariableDeclaration", + "scope": 6086, + "src": "4670:14:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6048, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4670:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6051, + "mutability": "mutable", + "name": "success", + "nameLocation": "4699:7:42", + "nodeType": "VariableDeclaration", + "scope": 6086, + "src": "4694:12:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6050, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4694:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6053, + "mutability": "mutable", + "name": "returndata", + "nameLocation": "4729:10:42", + "nodeType": "VariableDeclaration", + "scope": 6086, + "src": "4716:23:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6052, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4716:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4660:85:42" + }, + "returnParameters": { + "id": 6057, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6056, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6086, + "src": "4769:12:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6055, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4769:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4768:14:42" + }, + "scope": 6127, + "src": "4625:582:42", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6107, + "nodeType": "Block", + "src": "5509:122:42", + "statements": [ + { + "condition": { + "id": 6097, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "5523:8:42", + "subExpression": { + "id": 6096, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6089, + "src": "5524:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 6105, + "nodeType": "Block", + "src": "5583:42:42", + "statements": [ + { + "expression": { + "id": 6103, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6091, + "src": "5604:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6095, + "id": 6104, + "nodeType": "Return", + "src": "5597:17:42" + } + ] + }, + "id": 6106, + "nodeType": "IfStatement", + "src": "5519:106:42", + "trueBody": { + "id": 6102, + "nodeType": "Block", + "src": "5533:44:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6099, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6091, + "src": "5555:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6098, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6126, + "src": "5547:7:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (bytes memory) pure" + } + }, + "id": 6100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5547:19:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6101, + "nodeType": "ExpressionStatement", + "src": "5547:19:42" + } + ] + } + } + ] + }, + "documentation": { + "id": 6087, + "nodeType": "StructuredDocumentation", + "src": "5213:189:42", + "text": " @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {FailedInnerCall} error." + }, + "id": 6108, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "verifyCallResult", + "nameLocation": "5416:16:42", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6092, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6089, + "mutability": "mutable", + "name": "success", + "nameLocation": "5438:7:42", + "nodeType": "VariableDeclaration", + "scope": 6108, + "src": "5433:12:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6088, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5433:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6091, + "mutability": "mutable", + "name": "returndata", + "nameLocation": "5460:10:42", + "nodeType": "VariableDeclaration", + "scope": 6108, + "src": "5447:23:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6090, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5447:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5432:39:42" + }, + "returnParameters": { + "id": 6095, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6094, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6108, + "src": "5495:12:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6093, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5495:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5494:14:42" + }, + "scope": 6127, + "src": "5407:224:42", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6125, + "nodeType": "Block", + "src": "5798:461:42", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 6114, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6111, + "src": "5874:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5885:6:42", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5874:17:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 6116, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5894:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5874:21:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 6123, + "nodeType": "Block", + "src": "6204:49:42", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6120, + "name": "FailedInnerCall", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5890, + "src": "6225:15:42", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 6121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6225:17:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 6122, + "nodeType": "RevertStatement", + "src": "6218:24:42" + } + ] + }, + "id": 6124, + "nodeType": "IfStatement", + "src": "5870:383:42", + "trueBody": { + "id": 6119, + "nodeType": "Block", + "src": "5897:301:42", + "statements": [ + { + "AST": { + "nativeSrc": "6055:133:42", + "nodeType": "YulBlock", + "src": "6055:133:42", + "statements": [ + { + "nativeSrc": "6073:40:42", + "nodeType": "YulVariableDeclaration", + "src": "6073:40:42", + "value": { + "arguments": [ + { + "name": "returndata", + "nativeSrc": "6102:10:42", + "nodeType": "YulIdentifier", + "src": "6102:10:42" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "6096:5:42", + "nodeType": "YulIdentifier", + "src": "6096:5:42" + }, + "nativeSrc": "6096:17:42", + "nodeType": "YulFunctionCall", + "src": "6096:17:42" + }, + "variables": [ + { + "name": "returndata_size", + "nativeSrc": "6077:15:42", + "nodeType": "YulTypedName", + "src": "6077:15:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6141:2:42", + "nodeType": "YulLiteral", + "src": "6141:2:42", + "type": "", + "value": "32" + }, + { + "name": "returndata", + "nativeSrc": "6145:10:42", + "nodeType": "YulIdentifier", + "src": "6145:10:42" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6137:3:42", + "nodeType": "YulIdentifier", + "src": "6137:3:42" + }, + "nativeSrc": "6137:19:42", + "nodeType": "YulFunctionCall", + "src": "6137:19:42" + }, + { + "name": "returndata_size", + "nativeSrc": "6158:15:42", + "nodeType": "YulIdentifier", + "src": "6158:15:42" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "6130:6:42", + "nodeType": "YulIdentifier", + "src": "6130:6:42" + }, + "nativeSrc": "6130:44:42", + "nodeType": "YulFunctionCall", + "src": "6130:44:42" + }, + "nativeSrc": "6130:44:42", + "nodeType": "YulExpressionStatement", + "src": "6130:44:42" + } + ] + }, + "documentation": "@solidity memory-safe-assembly", + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 6111, + "isOffset": false, + "isSlot": false, + "src": "6102:10:42", + "valueSize": 1 + }, + { + "declaration": 6111, + "isOffset": false, + "isSlot": false, + "src": "6145:10:42", + "valueSize": 1 + } + ], + "id": 6118, + "nodeType": "InlineAssembly", + "src": "6046:142:42" + } + ] + } + } + ] + }, + "documentation": { + "id": 6109, + "nodeType": "StructuredDocumentation", + "src": "5637:101:42", + "text": " @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}." + }, + "id": 6126, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_revert", + "nameLocation": "5752:7:42", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6112, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6111, + "mutability": "mutable", + "name": "returndata", + "nameLocation": "5773:10:42", + "nodeType": "VariableDeclaration", + "scope": 6126, + "src": "5760:23:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6110, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5760:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5759:25:42" + }, + "returnParameters": { + "id": 6113, + "nodeType": "ParameterList", + "parameters": [], + "src": "5798:0:42" + }, + "scope": 6127, + "src": "5743:516:42", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 6128, + "src": "195:6066:42", + "usedErrors": [ + 5882, + 5887, + 5890 + ], + "usedEvents": [] + } + ], + "src": "101:6161:42" + }, + "id": 42 + }, + "@openzeppelin/contracts/utils/Strings.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/Strings.sol", + "exportedSymbols": { + "Math": [ + 7858 + ], + "SignedMath": [ + 7963 + ], + "Strings": [ + 6382 + ] + }, + "id": 6383, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6129, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "101:24:43" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol", + "file": "./math/Math.sol", + "id": 6131, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 6383, + "sourceUnit": 7859, + "src": "127:37:43", + "symbolAliases": [ + { + "foreign": { + "id": 6130, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7858, + "src": "135:4:43", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol", + "file": "./math/SignedMath.sol", + "id": 6133, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 6383, + "sourceUnit": 7964, + "src": "165:49:43", + "symbolAliases": [ + { + "foreign": { + "id": 6132, + "name": "SignedMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7963, + "src": "173:10:43", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "Strings", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 6134, + "nodeType": "StructuredDocumentation", + "src": "216:34:43", + "text": " @dev String operations." + }, + "fullyImplemented": true, + "id": 6382, + "linearizedBaseContracts": [ + 6382 + ], + "name": "Strings", + "nameLocation": "259:7:43", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 6137, + "mutability": "constant", + "name": "HEX_DIGITS", + "nameLocation": "298:10:43", + "nodeType": "VariableDeclaration", + "scope": 6382, + "src": "273:56:43", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes16", + "typeString": "bytes16" + }, + "typeName": { + "id": 6135, + "name": "bytes16", + "nodeType": "ElementaryTypeName", + "src": "273:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes16", + "typeString": "bytes16" + } + }, + "value": { + "hexValue": "30313233343536373839616263646566", + "id": 6136, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "311:18:43", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f", + "typeString": "literal_string \"0123456789abcdef\"" + }, + "value": "0123456789abcdef" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 6140, + "mutability": "constant", + "name": "ADDRESS_LENGTH", + "nameLocation": "358:14:43", + "nodeType": "VariableDeclaration", + "scope": 6382, + "src": "335:42:43", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 6138, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "335:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": { + "hexValue": "3230", + "id": 6139, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "375:2:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_20_by_1", + "typeString": "int_const 20" + }, + "value": "20" + }, + "visibility": "private" + }, + { + "documentation": { + "id": 6141, + "nodeType": "StructuredDocumentation", + "src": "384:81:43", + "text": " @dev The `value` string doesn't fit in the specified `length`." + }, + "errorSelector": "e22e27eb", + "id": 6147, + "name": "StringsInsufficientHexLength", + "nameLocation": "476:28:43", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 6146, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6143, + "mutability": "mutable", + "name": "value", + "nameLocation": "513:5:43", + "nodeType": "VariableDeclaration", + "scope": 6147, + "src": "505:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6142, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "505:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6145, + "mutability": "mutable", + "name": "length", + "nameLocation": "528:6:43", + "nodeType": "VariableDeclaration", + "scope": 6147, + "src": "520:14:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6144, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "520:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "504:31:43" + }, + "src": "470:66:43" + }, + { + "body": { + "id": 6194, + "nodeType": "Block", + "src": "708:627:43", + "statements": [ + { + "id": 6193, + "nodeType": "UncheckedBlock", + "src": "718:611:43", + "statements": [ + { + "assignments": [ + 6156 + ], + "declarations": [ + { + "constant": false, + "id": 6156, + "mutability": "mutable", + "name": "length", + "nameLocation": "750:6:43", + "nodeType": "VariableDeclaration", + "scope": 6193, + "src": "742:14:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6155, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "742:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6163, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6159, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6150, + "src": "770:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6157, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7858, + "src": "759:4:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$7858_$", + "typeString": "type(library Math)" + } + }, + "id": 6158, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "764:5:43", + "memberName": "log10", + "nodeType": "MemberAccess", + "referencedDeclaration": 7678, + "src": "759:10:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 6160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "759:17:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 6161, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "779:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "759:21:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "742:38:43" + }, + { + "assignments": [ + 6165 + ], + "declarations": [ + { + "constant": false, + "id": 6165, + "mutability": "mutable", + "name": "buffer", + "nameLocation": "808:6:43", + "nodeType": "VariableDeclaration", + "scope": 6193, + "src": "794:20:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 6164, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "794:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 6170, + "initialValue": { + "arguments": [ + { + "id": 6168, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6156, + "src": "828:6:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6167, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "817:10:43", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$", + "typeString": "function (uint256) pure returns (string memory)" + }, + "typeName": { + "id": 6166, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "821:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + "id": 6169, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "817:18:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "794:41:43" + }, + { + "assignments": [ + 6172 + ], + "declarations": [ + { + "constant": false, + "id": 6172, + "mutability": "mutable", + "name": "ptr", + "nameLocation": "857:3:43", + "nodeType": "VariableDeclaration", + "scope": 6193, + "src": "849:11:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6171, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "849:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6173, + "nodeType": "VariableDeclarationStatement", + "src": "849:11:43" + }, + { + "AST": { + "nativeSrc": "930:67:43", + "nodeType": "YulBlock", + "src": "930:67:43", + "statements": [ + { + "nativeSrc": "948:35:43", + "nodeType": "YulAssignment", + "src": "948:35:43", + "value": { + "arguments": [ + { + "name": "buffer", + "nativeSrc": "959:6:43", + "nodeType": "YulIdentifier", + "src": "959:6:43" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "971:2:43", + "nodeType": "YulLiteral", + "src": "971:2:43", + "type": "", + "value": "32" + }, + { + "name": "length", + "nativeSrc": "975:6:43", + "nodeType": "YulIdentifier", + "src": "975:6:43" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "967:3:43", + "nodeType": "YulIdentifier", + "src": "967:3:43" + }, + "nativeSrc": "967:15:43", + "nodeType": "YulFunctionCall", + "src": "967:15:43" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "955:3:43", + "nodeType": "YulIdentifier", + "src": "955:3:43" + }, + "nativeSrc": "955:28:43", + "nodeType": "YulFunctionCall", + "src": "955:28:43" + }, + "variableNames": [ + { + "name": "ptr", + "nativeSrc": "948:3:43", + "nodeType": "YulIdentifier", + "src": "948:3:43" + } + ] + } + ] + }, + "documentation": "@solidity memory-safe-assembly", + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 6165, + "isOffset": false, + "isSlot": false, + "src": "959:6:43", + "valueSize": 1 + }, + { + "declaration": 6156, + "isOffset": false, + "isSlot": false, + "src": "975:6:43", + "valueSize": 1 + }, + { + "declaration": 6172, + "isOffset": false, + "isSlot": false, + "src": "948:3:43", + "valueSize": 1 + } + ], + "id": 6174, + "nodeType": "InlineAssembly", + "src": "921:76:43" + }, + { + "body": { + "id": 6189, + "nodeType": "Block", + "src": "1023:269:43", + "statements": [ + { + "expression": { + "id": 6177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "--", + "prefix": false, + "src": "1041:5:43", + "subExpression": { + "id": 6176, + "name": "ptr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6172, + "src": "1041:3:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6178, + "nodeType": "ExpressionStatement", + "src": "1041:5:43" + }, + { + "AST": { + "nativeSrc": "1124:86:43", + "nodeType": "YulBlock", + "src": "1124:86:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "ptr", + "nativeSrc": "1154:3:43", + "nodeType": "YulIdentifier", + "src": "1154:3:43" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1168:5:43", + "nodeType": "YulIdentifier", + "src": "1168:5:43" + }, + { + "kind": "number", + "nativeSrc": "1175:2:43", + "nodeType": "YulLiteral", + "src": "1175:2:43", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "mod", + "nativeSrc": "1164:3:43", + "nodeType": "YulIdentifier", + "src": "1164:3:43" + }, + "nativeSrc": "1164:14:43", + "nodeType": "YulFunctionCall", + "src": "1164:14:43" + }, + { + "name": "HEX_DIGITS", + "nativeSrc": "1180:10:43", + "nodeType": "YulIdentifier", + "src": "1180:10:43" + } + ], + "functionName": { + "name": "byte", + "nativeSrc": "1159:4:43", + "nodeType": "YulIdentifier", + "src": "1159:4:43" + }, + "nativeSrc": "1159:32:43", + "nodeType": "YulFunctionCall", + "src": "1159:32:43" + } + ], + "functionName": { + "name": "mstore8", + "nativeSrc": "1146:7:43", + "nodeType": "YulIdentifier", + "src": "1146:7:43" + }, + "nativeSrc": "1146:46:43", + "nodeType": "YulFunctionCall", + "src": "1146:46:43" + }, + "nativeSrc": "1146:46:43", + "nodeType": "YulExpressionStatement", + "src": "1146:46:43" + } + ] + }, + "documentation": "@solidity memory-safe-assembly", + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 6137, + "isOffset": false, + "isSlot": false, + "src": "1180:10:43", + "valueSize": 1 + }, + { + "declaration": 6172, + "isOffset": false, + "isSlot": false, + "src": "1154:3:43", + "valueSize": 1 + }, + { + "declaration": 6150, + "isOffset": false, + "isSlot": false, + "src": "1168:5:43", + "valueSize": 1 + } + ], + "id": 6179, + "nodeType": "InlineAssembly", + "src": "1115:95:43" + }, + { + "expression": { + "id": 6182, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6180, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6150, + "src": "1227:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "hexValue": "3130", + "id": 6181, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1236:2:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "src": "1227:11:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6183, + "nodeType": "ExpressionStatement", + "src": "1227:11:43" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6184, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6150, + "src": "1260:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6185, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1269:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1260:10:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6188, + "nodeType": "IfStatement", + "src": "1256:21:43", + "trueBody": { + "id": 6187, + "nodeType": "Break", + "src": "1272:5:43" + } + } + ] + }, + "condition": { + "hexValue": "74727565", + "id": 6175, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1017:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "id": 6190, + "nodeType": "WhileStatement", + "src": "1010:282:43" + }, + { + "expression": { + "id": 6191, + "name": "buffer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6165, + "src": "1312:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 6154, + "id": 6192, + "nodeType": "Return", + "src": "1305:13:43" + } + ] + } + ] + }, + "documentation": { + "id": 6148, + "nodeType": "StructuredDocumentation", + "src": "542:90:43", + "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation." + }, + "id": 6195, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toString", + "nameLocation": "646:8:43", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6151, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6150, + "mutability": "mutable", + "name": "value", + "nameLocation": "663:5:43", + "nodeType": "VariableDeclaration", + "scope": 6195, + "src": "655:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6149, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "655:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "654:15:43" + }, + "returnParameters": { + "id": 6154, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6153, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6195, + "src": "693:13:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 6152, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "693:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "692:15:43" + }, + "scope": 6382, + "src": "637:698:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6220, + "nodeType": "Block", + "src": "1511:92:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 6208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6206, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6198, + "src": "1542:5:43", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "30", + "id": 6207, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1550:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1542:9:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "", + "id": 6210, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1560:2:43", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + }, + "id": 6211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1542:20:43", + "trueExpression": { + "hexValue": "2d", + "id": 6209, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1554:3:43", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561", + "typeString": "literal_string \"-\"" + }, + "value": "-" + }, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 6215, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6198, + "src": "1588:5:43", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "expression": { + "id": 6213, + "name": "SignedMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7963, + "src": "1573:10:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_SignedMath_$7963_$", + "typeString": "type(library SignedMath)" + } + }, + "id": 6214, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1584:3:43", + "memberName": "abs", + "nodeType": "MemberAccess", + "referencedDeclaration": 7962, + "src": "1573:14:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$", + "typeString": "function (int256) pure returns (uint256)" + } + }, + "id": 6216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1573:21:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6212, + "name": "toString", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6195, + "src": "1564:8:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$", + "typeString": "function (uint256) pure returns (string memory)" + } + }, + "id": 6217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1564:31:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 6204, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1528:6:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 6203, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1528:6:43", + "typeDescriptions": {} + } + }, + "id": 6205, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1535:6:43", + "memberName": "concat", + "nodeType": "MemberAccess", + "src": "1528:13:43", + "typeDescriptions": { + "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$", + "typeString": "function () pure returns (string memory)" + } + }, + "id": 6218, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1528:68:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 6202, + "id": 6219, + "nodeType": "Return", + "src": "1521:75:43" + } + ] + }, + "documentation": { + "id": 6196, + "nodeType": "StructuredDocumentation", + "src": "1341:89:43", + "text": " @dev Converts a `int256` to its ASCII `string` decimal representation." + }, + "id": 6221, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toStringSigned", + "nameLocation": "1444:14:43", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6199, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6198, + "mutability": "mutable", + "name": "value", + "nameLocation": "1466:5:43", + "nodeType": "VariableDeclaration", + "scope": 6221, + "src": "1459:12:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 6197, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1459:6:43", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "1458:14:43" + }, + "returnParameters": { + "id": 6202, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6201, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6221, + "src": "1496:13:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 6200, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1496:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1495:15:43" + }, + "scope": 6382, + "src": "1435:168:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6240, + "nodeType": "Block", + "src": "1782:100:43", + "statements": [ + { + "id": 6239, + "nodeType": "UncheckedBlock", + "src": "1792:84:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6230, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6224, + "src": "1835:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6233, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6224, + "src": "1854:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6231, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7858, + "src": "1842:4:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$7858_$", + "typeString": "type(library Math)" + } + }, + "id": 6232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1847:6:43", + "memberName": "log256", + "nodeType": "MemberAccess", + "referencedDeclaration": 7800, + "src": "1842:11:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 6234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1842:18:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 6235, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1863:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1842:22:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6229, + "name": "toHexString", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6241, + 6324, + 6344 + ], + "referencedDeclaration": 6324, + "src": "1823:11:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$", + "typeString": "function (uint256,uint256) pure returns (string memory)" + } + }, + "id": 6237, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1823:42:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 6228, + "id": 6238, + "nodeType": "Return", + "src": "1816:49:43" + } + ] + } + ] + }, + "documentation": { + "id": 6222, + "nodeType": "StructuredDocumentation", + "src": "1609:94:43", + "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation." + }, + "id": 6241, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toHexString", + "nameLocation": "1717:11:43", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6224, + "mutability": "mutable", + "name": "value", + "nameLocation": "1737:5:43", + "nodeType": "VariableDeclaration", + "scope": 6241, + "src": "1729:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1729:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1728:15:43" + }, + "returnParameters": { + "id": 6228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6227, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6241, + "src": "1767:13:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 6226, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1767:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1766:15:43" + }, + "scope": 6382, + "src": "1708:174:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6323, + "nodeType": "Block", + "src": "2095:435:43", + "statements": [ + { + "assignments": [ + 6252 + ], + "declarations": [ + { + "constant": false, + "id": 6252, + "mutability": "mutable", + "name": "localValue", + "nameLocation": "2113:10:43", + "nodeType": "VariableDeclaration", + "scope": 6323, + "src": "2105:18:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6251, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2105:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6254, + "initialValue": { + "id": 6253, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6244, + "src": "2126:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2105:26:43" + }, + { + "assignments": [ + 6256 + ], + "declarations": [ + { + "constant": false, + "id": 6256, + "mutability": "mutable", + "name": "buffer", + "nameLocation": "2154:6:43", + "nodeType": "VariableDeclaration", + "scope": 6323, + "src": "2141:19:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6255, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2141:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 6265, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 6259, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2173:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 6260, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6246, + "src": "2177:6:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2173:10:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "32", + "id": 6262, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2186:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "2173:14:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6258, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "2163:9:43", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (uint256) pure returns (bytes memory)" + }, + "typeName": { + "id": 6257, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2167:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + "id": 6264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2163:25:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2141:47:43" + }, + { + "expression": { + "id": 6270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 6266, + "name": "buffer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6256, + "src": "2198:6:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6268, + "indexExpression": { + "hexValue": "30", + "id": 6267, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2205:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2198:9:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "30", + "id": 6269, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2210:3:43", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", + "typeString": "literal_string \"0\"" + }, + "value": "0" + }, + "src": "2198:15:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "id": 6271, + "nodeType": "ExpressionStatement", + "src": "2198:15:43" + }, + { + "expression": { + "id": 6276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 6272, + "name": "buffer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6256, + "src": "2223:6:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6274, + "indexExpression": { + "hexValue": "31", + "id": 6273, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2230:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2223:9:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "78", + "id": 6275, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2235:3:43", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83", + "typeString": "literal_string \"x\"" + }, + "value": "x" + }, + "src": "2223:15:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "id": 6277, + "nodeType": "ExpressionStatement", + "src": "2223:15:43" + }, + { + "body": { + "id": 6306, + "nodeType": "Block", + "src": "2293:95:43", + "statements": [ + { + "expression": { + "id": 6300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 6292, + "name": "buffer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6256, + "src": "2307:6:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6294, + "indexExpression": { + "id": 6293, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6279, + "src": "2314:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2307:9:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 6295, + "name": "HEX_DIGITS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6137, + "src": "2319:10:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes16", + "typeString": "bytes16" + } + }, + "id": 6299, + "indexExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6296, + "name": "localValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6252, + "src": "2330:10:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "hexValue": "307866", + "id": 6297, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2343:3:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_15_by_1", + "typeString": "int_const 15" + }, + "value": "0xf" + }, + "src": "2330:16:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2319:28:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "src": "2307:40:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "id": 6301, + "nodeType": "ExpressionStatement", + "src": "2307:40:43" + }, + { + "expression": { + "id": 6304, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6302, + "name": "localValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6252, + "src": "2361:10:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "34", + "id": 6303, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2376:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "2361:16:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6305, + "nodeType": "ExpressionStatement", + "src": "2361:16:43" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6288, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6286, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6279, + "src": "2281:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "31", + "id": 6287, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2285:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2281:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6307, + "initializationExpression": { + "assignments": [ + 6279 + ], + "declarations": [ + { + "constant": false, + "id": 6279, + "mutability": "mutable", + "name": "i", + "nameLocation": "2261:1:43", + "nodeType": "VariableDeclaration", + "scope": 6307, + "src": "2253:9:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6278, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2253:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6285, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6284, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 6280, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2265:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 6281, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6246, + "src": "2269:6:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2265:10:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 6283, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2278:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2265:14:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2253:26:43" + }, + "isSimpleCounterLoop": false, + "loopExpression": { + "expression": { + "id": 6290, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "--", + "prefix": true, + "src": "2288:3:43", + "subExpression": { + "id": 6289, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6279, + "src": "2290:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6291, + "nodeType": "ExpressionStatement", + "src": "2288:3:43" + }, + "nodeType": "ForStatement", + "src": "2248:140:43" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6308, + "name": "localValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6252, + "src": "2401:10:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 6309, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2415:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2401:15:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6317, + "nodeType": "IfStatement", + "src": "2397:96:43", + "trueBody": { + "id": 6316, + "nodeType": "Block", + "src": "2418:75:43", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 6312, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6244, + "src": "2468:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6313, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6246, + "src": "2475:6:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6311, + "name": "StringsInsufficientHexLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6147, + "src": "2439:28:43", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 6314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2439:43:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 6315, + "nodeType": "RevertStatement", + "src": "2432:50:43" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 6320, + "name": "buffer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6256, + "src": "2516:6:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6319, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2509:6:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 6318, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2509:6:43", + "typeDescriptions": {} + } + }, + "id": 6321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2509:14:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 6250, + "id": 6322, + "nodeType": "Return", + "src": "2502:21:43" + } + ] + }, + "documentation": { + "id": 6242, + "nodeType": "StructuredDocumentation", + "src": "1888:112:43", + "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length." + }, + "id": 6324, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toHexString", + "nameLocation": "2014:11:43", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6247, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6244, + "mutability": "mutable", + "name": "value", + "nameLocation": "2034:5:43", + "nodeType": "VariableDeclaration", + "scope": 6324, + "src": "2026:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6243, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2026:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6246, + "mutability": "mutable", + "name": "length", + "nameLocation": "2049:6:43", + "nodeType": "VariableDeclaration", + "scope": 6324, + "src": "2041:14:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6245, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2041:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2025:31:43" + }, + "returnParameters": { + "id": 6250, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6249, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6324, + "src": "2080:13:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 6248, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2080:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2079:15:43" + }, + "scope": 6382, + "src": "2005:525:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6343, + "nodeType": "Block", + "src": "2762:75:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 6337, + "name": "addr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6327, + "src": "2807:4:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6336, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2799:7:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint160_$", + "typeString": "type(uint160)" + }, + "typeName": { + "id": 6335, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "2799:7:43", + "typeDescriptions": {} + } + }, + "id": 6338, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2799:13:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + ], + "id": 6334, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2791:7:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6333, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2791:7:43", + "typeDescriptions": {} + } + }, + "id": 6339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2791:22:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6340, + "name": "ADDRESS_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6140, + "src": "2815:14:43", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + ], + "id": 6332, + "name": "toHexString", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6241, + 6324, + 6344 + ], + "referencedDeclaration": 6324, + "src": "2779:11:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$", + "typeString": "function (uint256,uint256) pure returns (string memory)" + } + }, + "id": 6341, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2779:51:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 6331, + "id": 6342, + "nodeType": "Return", + "src": "2772:58:43" + } + ] + }, + "documentation": { + "id": 6325, + "nodeType": "StructuredDocumentation", + "src": "2536:148:43", + "text": " @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n representation." + }, + "id": 6344, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toHexString", + "nameLocation": "2698:11:43", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6328, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6327, + "mutability": "mutable", + "name": "addr", + "nameLocation": "2718:4:43", + "nodeType": "VariableDeclaration", + "scope": 6344, + "src": "2710:12:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6326, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2710:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2709:14:43" + }, + "returnParameters": { + "id": 6331, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6330, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6344, + "src": "2747:13:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 6329, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2747:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2746:15:43" + }, + "scope": 6382, + "src": "2689:148:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6380, + "nodeType": "Block", + "src": "2992:104:43", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 6378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6364, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 6356, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6347, + "src": "3015:1:43", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 6355, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3009:5:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 6354, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3009:5:43", + "typeDescriptions": {} + } + }, + "id": 6357, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3009:8:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3018:6:43", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "3009:15:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 6361, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6349, + "src": "3034:1:43", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 6360, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3028:5:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 6359, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3028:5:43", + "typeDescriptions": {} + } + }, + "id": 6362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3028:8:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3037:6:43", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "3028:15:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3009:34:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "arguments": [ + { + "id": 6368, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6347, + "src": "3063:1:43", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 6367, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3057:5:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 6366, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3057:5:43", + "typeDescriptions": {} + } + }, + "id": 6369, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3057:8:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6365, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "3047:9:43", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 6370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3047:19:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "arguments": [ + { + "id": 6374, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6349, + "src": "3086:1:43", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 6373, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3080:5:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 6372, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3080:5:43", + "typeDescriptions": {} + } + }, + "id": 6375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3080:8:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6371, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "3070:9:43", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 6376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3070:19:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "3047:42:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "3009:80:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 6353, + "id": 6379, + "nodeType": "Return", + "src": "3002:87:43" + } + ] + }, + "documentation": { + "id": 6345, + "nodeType": "StructuredDocumentation", + "src": "2843:66:43", + "text": " @dev Returns true if the two strings are equal." + }, + "id": 6381, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "equal", + "nameLocation": "2923:5:43", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6350, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6347, + "mutability": "mutable", + "name": "a", + "nameLocation": "2943:1:43", + "nodeType": "VariableDeclaration", + "scope": 6381, + "src": "2929:15:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 6346, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2929:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6349, + "mutability": "mutable", + "name": "b", + "nameLocation": "2960:1:43", + "nodeType": "VariableDeclaration", + "scope": 6381, + "src": "2946:15:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 6348, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2946:6:43", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2928:34:43" + }, + "returnParameters": { + "id": 6353, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6352, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6381, + "src": "2986:4:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6351, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2986:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2985:6:43" + }, + "scope": 6382, + "src": "2914:182:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 6383, + "src": "251:2847:43", + "usedErrors": [ + 6147 + ], + "usedEvents": [] + } + ], + "src": "101:2998:43" + }, + "id": 43 + }, + "@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "exportedSymbols": { + "ECDSA": [ + 6730 + ] + }, + "id": 6731, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6384, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "112:24:44" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "ECDSA", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 6385, + "nodeType": "StructuredDocumentation", + "src": "138:205:44", + "text": " @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address." + }, + "fullyImplemented": true, + "id": 6730, + "linearizedBaseContracts": [ + 6730 + ], + "name": "ECDSA", + "nameLocation": "352:5:44", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "ECDSA.RecoverError", + "id": 6390, + "members": [ + { + "id": 6386, + "name": "NoError", + "nameLocation": "392:7:44", + "nodeType": "EnumValue", + "src": "392:7:44" + }, + { + "id": 6387, + "name": "InvalidSignature", + "nameLocation": "409:16:44", + "nodeType": "EnumValue", + "src": "409:16:44" + }, + { + "id": 6388, + "name": "InvalidSignatureLength", + "nameLocation": "435:22:44", + "nodeType": "EnumValue", + "src": "435:22:44" + }, + { + "id": 6389, + "name": "InvalidSignatureS", + "nameLocation": "467:17:44", + "nodeType": "EnumValue", + "src": "467:17:44" + } + ], + "name": "RecoverError", + "nameLocation": "369:12:44", + "nodeType": "EnumDefinition", + "src": "364:126:44" + }, + { + "documentation": { + "id": 6391, + "nodeType": "StructuredDocumentation", + "src": "496:63:44", + "text": " @dev The signature derives the `address(0)`." + }, + "errorSelector": "f645eedf", + "id": 6393, + "name": "ECDSAInvalidSignature", + "nameLocation": "570:21:44", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 6392, + "nodeType": "ParameterList", + "parameters": [], + "src": "591:2:44" + }, + "src": "564:30:44" + }, + { + "documentation": { + "id": 6394, + "nodeType": "StructuredDocumentation", + "src": "600:60:44", + "text": " @dev The signature has an invalid length." + }, + "errorSelector": "fce698f7", + "id": 6398, + "name": "ECDSAInvalidSignatureLength", + "nameLocation": "671:27:44", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 6397, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6396, + "mutability": "mutable", + "name": "length", + "nameLocation": "707:6:44", + "nodeType": "VariableDeclaration", + "scope": 6398, + "src": "699:14:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6395, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "699:7:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "698:16:44" + }, + "src": "665:50:44" + }, + { + "documentation": { + "id": 6399, + "nodeType": "StructuredDocumentation", + "src": "721:85:44", + "text": " @dev The signature has an S value that is in the upper half order." + }, + "errorSelector": "d78bce0c", + "id": 6403, + "name": "ECDSAInvalidSignatureS", + "nameLocation": "817:22:44", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 6402, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6401, + "mutability": "mutable", + "name": "s", + "nameLocation": "848:1:44", + "nodeType": "VariableDeclaration", + "scope": 6403, + "src": "840:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6400, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "840:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "839:11:44" + }, + "src": "811:40:44" + }, + { + "body": { + "id": 6455, + "nodeType": "Block", + "src": "2242:653:44", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 6418, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6408, + "src": "2256:9:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2266:6:44", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2256:16:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "3635", + "id": 6420, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2276:2:44", + "typeDescriptions": { + "typeIdentifier": "t_rational_65_by_1", + "typeString": "int_const 65" + }, + "value": "65" + }, + "src": "2256:22:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 6453, + "nodeType": "Block", + "src": "2781:108:44", + "statements": [ + { + "expression": { + "components": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 6442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2811:1:44", + "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": 6441, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2803:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6440, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2803:7:44", + "typeDescriptions": {} + } + }, + "id": 6443, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2803:10:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 6444, + "name": "RecoverError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6390, + "src": "2815:12:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", + "typeString": "type(enum ECDSA.RecoverError)" + } + }, + "id": 6445, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2828:22:44", + "memberName": "InvalidSignatureLength", + "nodeType": "MemberAccess", + "referencedDeclaration": 6388, + "src": "2815:35:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + { + "arguments": [ + { + "expression": { + "id": 6448, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6408, + "src": "2860:9:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2870:6:44", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2860:16:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6447, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2852:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6446, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2852:7:44", + "typeDescriptions": {} + } + }, + "id": 6450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2852:25:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 6451, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2802:76:44", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" + } + }, + "functionReturnParameters": 6417, + "id": 6452, + "nodeType": "Return", + "src": "2795:83:44" + } + ] + }, + "id": 6454, + "nodeType": "IfStatement", + "src": "2252:637:44", + "trueBody": { + "id": 6439, + "nodeType": "Block", + "src": "2280:495:44", + "statements": [ + { + "assignments": [ + 6423 + ], + "declarations": [ + { + "constant": false, + "id": 6423, + "mutability": "mutable", + "name": "r", + "nameLocation": "2302:1:44", + "nodeType": "VariableDeclaration", + "scope": 6439, + "src": "2294:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6422, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2294:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6424, + "nodeType": "VariableDeclarationStatement", + "src": "2294:9:44" + }, + { + "assignments": [ + 6426 + ], + "declarations": [ + { + "constant": false, + "id": 6426, + "mutability": "mutable", + "name": "s", + "nameLocation": "2325:1:44", + "nodeType": "VariableDeclaration", + "scope": 6439, + "src": "2317:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6425, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2317:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6427, + "nodeType": "VariableDeclarationStatement", + "src": "2317:9:44" + }, + { + "assignments": [ + 6429 + ], + "declarations": [ + { + "constant": false, + "id": 6429, + "mutability": "mutable", + "name": "v", + "nameLocation": "2346:1:44", + "nodeType": "VariableDeclaration", + "scope": 6439, + "src": "2340:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 6428, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "2340:5:44", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "id": 6430, + "nodeType": "VariableDeclarationStatement", + "src": "2340:7:44" + }, + { + "AST": { + "nativeSrc": "2548:171:44", + "nodeType": "YulBlock", + "src": "2548:171:44", + "statements": [ + { + "nativeSrc": "2566:32:44", + "nodeType": "YulAssignment", + "src": "2566:32:44", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "signature", + "nativeSrc": "2581:9:44", + "nodeType": "YulIdentifier", + "src": "2581:9:44" + }, + { + "kind": "number", + "nativeSrc": "2592:4:44", + "nodeType": "YulLiteral", + "src": "2592:4:44", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2577:3:44", + "nodeType": "YulIdentifier", + "src": "2577:3:44" + }, + "nativeSrc": "2577:20:44", + "nodeType": "YulFunctionCall", + "src": "2577:20:44" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "2571:5:44", + "nodeType": "YulIdentifier", + "src": "2571:5:44" + }, + "nativeSrc": "2571:27:44", + "nodeType": "YulFunctionCall", + "src": "2571:27:44" + }, + "variableNames": [ + { + "name": "r", + "nativeSrc": "2566:1:44", + "nodeType": "YulIdentifier", + "src": "2566:1:44" + } + ] + }, + { + "nativeSrc": "2615:32:44", + "nodeType": "YulAssignment", + "src": "2615:32:44", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "signature", + "nativeSrc": "2630:9:44", + "nodeType": "YulIdentifier", + "src": "2630:9:44" + }, + { + "kind": "number", + "nativeSrc": "2641:4:44", + "nodeType": "YulLiteral", + "src": "2641:4:44", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2626:3:44", + "nodeType": "YulIdentifier", + "src": "2626:3:44" + }, + "nativeSrc": "2626:20:44", + "nodeType": "YulFunctionCall", + "src": "2626:20:44" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "2620:5:44", + "nodeType": "YulIdentifier", + "src": "2620:5:44" + }, + "nativeSrc": "2620:27:44", + "nodeType": "YulFunctionCall", + "src": "2620:27:44" + }, + "variableNames": [ + { + "name": "s", + "nativeSrc": "2615:1:44", + "nodeType": "YulIdentifier", + "src": "2615:1:44" + } + ] + }, + { + "nativeSrc": "2664:41:44", + "nodeType": "YulAssignment", + "src": "2664:41:44", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2674:1:44", + "nodeType": "YulLiteral", + "src": "2674:1:44", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "signature", + "nativeSrc": "2687:9:44", + "nodeType": "YulIdentifier", + "src": "2687:9:44" + }, + { + "kind": "number", + "nativeSrc": "2698:4:44", + "nodeType": "YulLiteral", + "src": "2698:4:44", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2683:3:44", + "nodeType": "YulIdentifier", + "src": "2683:3:44" + }, + "nativeSrc": "2683:20:44", + "nodeType": "YulFunctionCall", + "src": "2683:20:44" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "2677:5:44", + "nodeType": "YulIdentifier", + "src": "2677:5:44" + }, + "nativeSrc": "2677:27:44", + "nodeType": "YulFunctionCall", + "src": "2677:27:44" + } + ], + "functionName": { + "name": "byte", + "nativeSrc": "2669:4:44", + "nodeType": "YulIdentifier", + "src": "2669:4:44" + }, + "nativeSrc": "2669:36:44", + "nodeType": "YulFunctionCall", + "src": "2669:36:44" + }, + "variableNames": [ + { + "name": "v", + "nativeSrc": "2664:1:44", + "nodeType": "YulIdentifier", + "src": "2664:1:44" + } + ] + } + ] + }, + "documentation": "@solidity memory-safe-assembly", + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 6423, + "isOffset": false, + "isSlot": false, + "src": "2566:1:44", + "valueSize": 1 + }, + { + "declaration": 6426, + "isOffset": false, + "isSlot": false, + "src": "2615:1:44", + "valueSize": 1 + }, + { + "declaration": 6408, + "isOffset": false, + "isSlot": false, + "src": "2581:9:44", + "valueSize": 1 + }, + { + "declaration": 6408, + "isOffset": false, + "isSlot": false, + "src": "2630:9:44", + "valueSize": 1 + }, + { + "declaration": 6408, + "isOffset": false, + "isSlot": false, + "src": "2687:9:44", + "valueSize": 1 + }, + { + "declaration": 6429, + "isOffset": false, + "isSlot": false, + "src": "2664:1:44", + "valueSize": 1 + } + ], + "id": 6431, + "nodeType": "InlineAssembly", + "src": "2539:180:44" + }, + { + "expression": { + "arguments": [ + { + "id": 6433, + "name": "hash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6406, + "src": "2750:4:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6434, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6429, + "src": "2756:1:44", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 6435, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6423, + "src": "2759:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6436, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6426, + "src": "2762:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6432, + "name": "tryRecover", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6456, + 6536, + 6644 + ], + "referencedDeclaration": 6644, + "src": "2739:10:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)" + } + }, + "id": 6437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2739:25:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" + } + }, + "functionReturnParameters": 6417, + "id": 6438, + "nodeType": "Return", + "src": "2732:32:44" + } + ] + } + } + ] + }, + "documentation": { + "id": 6404, + "nodeType": "StructuredDocumentation", + "src": "857:1267:44", + "text": " @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n return address(0) without also returning an error description. Errors are documented using an enum (error type)\n and a bytes32 providing additional information about the error.\n If no error is returned, then the address can be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n Documentation for signature generation:\n - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]" + }, + "id": 6456, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tryRecover", + "nameLocation": "2138:10:44", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6409, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6406, + "mutability": "mutable", + "name": "hash", + "nameLocation": "2157:4:44", + "nodeType": "VariableDeclaration", + "scope": 6456, + "src": "2149:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6405, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2149:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6408, + "mutability": "mutable", + "name": "signature", + "nameLocation": "2176:9:44", + "nodeType": "VariableDeclaration", + "scope": 6456, + "src": "2163:22:44", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6407, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2163:5:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2148:38:44" + }, + "returnParameters": { + "id": 6417, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6411, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6456, + "src": "2210:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6410, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2210:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6414, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6456, + "src": "2219:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "typeName": { + "id": 6413, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 6412, + "name": "RecoverError", + "nameLocations": [ + "2219:12:44" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6390, + "src": "2219:12:44" + }, + "referencedDeclaration": 6390, + "src": "2219:12:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6416, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6456, + "src": "2233:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6415, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2233:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2209:32:44" + }, + "scope": 6730, + "src": "2129:766:44", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6485, + "nodeType": "Block", + "src": "3789:168:44", + "statements": [ + { + "assignments": [ + 6467, + 6470, + 6472 + ], + "declarations": [ + { + "constant": false, + "id": 6467, + "mutability": "mutable", + "name": "recovered", + "nameLocation": "3808:9:44", + "nodeType": "VariableDeclaration", + "scope": 6485, + "src": "3800:17:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6466, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3800:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6470, + "mutability": "mutable", + "name": "error", + "nameLocation": "3832:5:44", + "nodeType": "VariableDeclaration", + "scope": 6485, + "src": "3819:18:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "typeName": { + "id": 6469, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 6468, + "name": "RecoverError", + "nameLocations": [ + "3819:12:44" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6390, + "src": "3819:12:44" + }, + "referencedDeclaration": 6390, + "src": "3819:12:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6472, + "mutability": "mutable", + "name": "errorArg", + "nameLocation": "3847:8:44", + "nodeType": "VariableDeclaration", + "scope": 6485, + "src": "3839:16:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6471, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3839:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6477, + "initialValue": { + "arguments": [ + { + "id": 6474, + "name": "hash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6459, + "src": "3870:4:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6475, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6461, + "src": "3876:9:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6473, + "name": "tryRecover", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6456, + 6536, + 6644 + ], + "referencedDeclaration": 6456, + "src": "3859:10:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "function (bytes32,bytes memory) pure returns (address,enum ECDSA.RecoverError,bytes32)" + } + }, + "id": 6476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3859:27:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3799:87:44" + }, + { + "expression": { + "arguments": [ + { + "id": 6479, + "name": "error", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6470, + "src": "3908:5:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + { + "id": 6480, + "name": "errorArg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6472, + "src": "3915:8:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6478, + "name": "_throwError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6729, + "src": "3896:11:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$6390_$_t_bytes32_$returns$__$", + "typeString": "function (enum ECDSA.RecoverError,bytes32) pure" + } + }, + "id": 6481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3896:28:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6482, + "nodeType": "ExpressionStatement", + "src": "3896:28:44" + }, + { + "expression": { + "id": 6483, + "name": "recovered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6467, + "src": "3941:9:44", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 6465, + "id": 6484, + "nodeType": "Return", + "src": "3934:16:44" + } + ] + }, + "documentation": { + "id": 6457, + "nodeType": "StructuredDocumentation", + "src": "2901:796:44", + "text": " @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it." + }, + "id": 6486, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "recover", + "nameLocation": "3711:7:44", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6462, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6459, + "mutability": "mutable", + "name": "hash", + "nameLocation": "3727:4:44", + "nodeType": "VariableDeclaration", + "scope": 6486, + "src": "3719:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6458, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3719:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6461, + "mutability": "mutable", + "name": "signature", + "nameLocation": "3746:9:44", + "nodeType": "VariableDeclaration", + "scope": 6486, + "src": "3733:22:44", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6460, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3733:5:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3718:38:44" + }, + "returnParameters": { + "id": 6465, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6464, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6486, + "src": "3780:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6463, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3780:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3779:9:44" + }, + "scope": 6730, + "src": "3702:255:44", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6535, + "nodeType": "Block", + "src": "4285:342:44", + "statements": [ + { + "id": 6534, + "nodeType": "UncheckedBlock", + "src": "4295:326:44", + "statements": [ + { + "assignments": [ + 6504 + ], + "declarations": [ + { + "constant": false, + "id": 6504, + "mutability": "mutable", + "name": "s", + "nameLocation": "4327:1:44", + "nodeType": "VariableDeclaration", + "scope": 6534, + "src": "4319:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6503, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4319:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6511, + "initialValue": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6510, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6505, + "name": "vs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6493, + "src": "4331:2:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "arguments": [ + { + "hexValue": "307837666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666", + "id": 6508, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4344:66:44", + "typeDescriptions": { + "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1", + "typeString": "int_const 5789...(69 digits omitted)...9967" + }, + "value": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1", + "typeString": "int_const 5789...(69 digits omitted)...9967" + } + ], + "id": 6507, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4336:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6506, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4336:7:44", + "typeDescriptions": {} + } + }, + "id": 6509, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4336:75:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "4331:80:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4319:92:44" + }, + { + "assignments": [ + 6513 + ], + "declarations": [ + { + "constant": false, + "id": 6513, + "mutability": "mutable", + "name": "v", + "nameLocation": "4528:1:44", + "nodeType": "VariableDeclaration", + "scope": 6534, + "src": "4522:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 6512, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "4522:5:44", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "id": 6526, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6518, + "name": "vs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6493, + "src": "4547:2:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6517, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4539:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6516, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4539:7:44", + "typeDescriptions": {} + } + }, + "id": 6519, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4539:11:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "323535", + "id": 6520, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4554:3:44", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "src": "4539:18:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6522, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4538:20:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "3237", + "id": 6523, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4561:2:44", + "typeDescriptions": { + "typeIdentifier": "t_rational_27_by_1", + "typeString": "int_const 27" + }, + "value": "27" + }, + "src": "4538:25:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6515, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4532:5:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + }, + "typeName": { + "id": 6514, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "4532:5:44", + "typeDescriptions": {} + } + }, + "id": 6525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4532:32:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4522:42:44" + }, + { + "expression": { + "arguments": [ + { + "id": 6528, + "name": "hash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6489, + "src": "4596:4:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6529, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6513, + "src": "4602:1:44", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 6530, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6491, + "src": "4605:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6531, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6504, + "src": "4608:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6527, + "name": "tryRecover", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6456, + 6536, + 6644 + ], + "referencedDeclaration": 6644, + "src": "4585:10:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)" + } + }, + "id": 6532, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4585:25:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" + } + }, + "functionReturnParameters": 6502, + "id": 6533, + "nodeType": "Return", + "src": "4578:32:44" + } + ] + } + ] + }, + "documentation": { + "id": 6487, + "nodeType": "StructuredDocumentation", + "src": "3963:205:44", + "text": " @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]" + }, + "id": 6536, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tryRecover", + "nameLocation": "4182:10:44", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6494, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6489, + "mutability": "mutable", + "name": "hash", + "nameLocation": "4201:4:44", + "nodeType": "VariableDeclaration", + "scope": 6536, + "src": "4193:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6488, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4193:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6491, + "mutability": "mutable", + "name": "r", + "nameLocation": "4215:1:44", + "nodeType": "VariableDeclaration", + "scope": 6536, + "src": "4207:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6490, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4207:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6493, + "mutability": "mutable", + "name": "vs", + "nameLocation": "4226:2:44", + "nodeType": "VariableDeclaration", + "scope": 6536, + "src": "4218:10:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6492, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4218:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4192:37:44" + }, + "returnParameters": { + "id": 6502, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6496, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6536, + "src": "4253:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6495, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4253:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6499, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6536, + "src": "4262:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "typeName": { + "id": 6498, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 6497, + "name": "RecoverError", + "nameLocations": [ + "4262:12:44" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6390, + "src": "4262:12:44" + }, + "referencedDeclaration": 6390, + "src": "4262:12:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6501, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6536, + "src": "4276:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6500, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4276:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4252:32:44" + }, + "scope": 6730, + "src": "4173:454:44", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6568, + "nodeType": "Block", + "src": "4840:164:44", + "statements": [ + { + "assignments": [ + 6549, + 6552, + 6554 + ], + "declarations": [ + { + "constant": false, + "id": 6549, + "mutability": "mutable", + "name": "recovered", + "nameLocation": "4859:9:44", + "nodeType": "VariableDeclaration", + "scope": 6568, + "src": "4851:17:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6548, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4851:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6552, + "mutability": "mutable", + "name": "error", + "nameLocation": "4883:5:44", + "nodeType": "VariableDeclaration", + "scope": 6568, + "src": "4870:18:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "typeName": { + "id": 6551, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 6550, + "name": "RecoverError", + "nameLocations": [ + "4870:12:44" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6390, + "src": "4870:12:44" + }, + "referencedDeclaration": 6390, + "src": "4870:12:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6554, + "mutability": "mutable", + "name": "errorArg", + "nameLocation": "4898:8:44", + "nodeType": "VariableDeclaration", + "scope": 6568, + "src": "4890:16:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6553, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4890:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6560, + "initialValue": { + "arguments": [ + { + "id": 6556, + "name": "hash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6539, + "src": "4921:4:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6557, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6541, + "src": "4927:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6558, + "name": "vs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6543, + "src": "4930:2:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6555, + "name": "tryRecover", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6456, + 6536, + 6644 + ], + "referencedDeclaration": 6536, + "src": "4910:10:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "function (bytes32,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)" + } + }, + "id": 6559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4910:23:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4850:83:44" + }, + { + "expression": { + "arguments": [ + { + "id": 6562, + "name": "error", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6552, + "src": "4955:5:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + { + "id": 6563, + "name": "errorArg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6554, + "src": "4962:8:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6561, + "name": "_throwError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6729, + "src": "4943:11:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$6390_$_t_bytes32_$returns$__$", + "typeString": "function (enum ECDSA.RecoverError,bytes32) pure" + } + }, + "id": 6564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4943:28:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6565, + "nodeType": "ExpressionStatement", + "src": "4943:28:44" + }, + { + "expression": { + "id": 6566, + "name": "recovered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6549, + "src": "4988:9:44", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 6547, + "id": 6567, + "nodeType": "Return", + "src": "4981:16:44" + } + ] + }, + "documentation": { + "id": 6537, + "nodeType": "StructuredDocumentation", + "src": "4633:116:44", + "text": " @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately." + }, + "id": 6569, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "recover", + "nameLocation": "4763:7:44", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6544, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6539, + "mutability": "mutable", + "name": "hash", + "nameLocation": "4779:4:44", + "nodeType": "VariableDeclaration", + "scope": 6569, + "src": "4771:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6538, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4771:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6541, + "mutability": "mutable", + "name": "r", + "nameLocation": "4793:1:44", + "nodeType": "VariableDeclaration", + "scope": 6569, + "src": "4785:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6540, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4785:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6543, + "mutability": "mutable", + "name": "vs", + "nameLocation": "4804:2:44", + "nodeType": "VariableDeclaration", + "scope": 6569, + "src": "4796:10:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6542, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4796:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4770:37:44" + }, + "returnParameters": { + "id": 6547, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6546, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6569, + "src": "4831:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6545, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4831:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4830:9:44" + }, + "scope": 6730, + "src": "4754:250:44", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6643, + "nodeType": "Block", + "src": "5298:1372:44", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6590, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6578, + "src": "6194:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6589, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6186:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6588, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6186:7:44", + "typeDescriptions": {} + } + }, + "id": 6591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6186:10:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130", + "id": 6592, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6199:66:44", + "typeDescriptions": { + "typeIdentifier": "t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1", + "typeString": "int_const 5789...(69 digits omitted)...7168" + }, + "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0" + }, + "src": "6186:79:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6604, + "nodeType": "IfStatement", + "src": "6182:164:44", + "trueBody": { + "id": 6603, + "nodeType": "Block", + "src": "6267:79:44", + "statements": [ + { + "expression": { + "components": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 6596, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6297:1:44", + "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": 6595, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6289:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6594, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6289:7:44", + "typeDescriptions": {} + } + }, + "id": 6597, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6289:10:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 6598, + "name": "RecoverError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6390, + "src": "6301:12:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", + "typeString": "type(enum ECDSA.RecoverError)" + } + }, + "id": 6599, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "6314:17:44", + "memberName": "InvalidSignatureS", + "nodeType": "MemberAccess", + "referencedDeclaration": 6389, + "src": "6301:30:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + { + "id": 6600, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6578, + "src": "6333:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 6601, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6288:47:44", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" + } + }, + "functionReturnParameters": 6587, + "id": 6602, + "nodeType": "Return", + "src": "6281:54:44" + } + ] + } + }, + { + "assignments": [ + 6606 + ], + "declarations": [ + { + "constant": false, + "id": 6606, + "mutability": "mutable", + "name": "signer", + "nameLocation": "6448:6:44", + "nodeType": "VariableDeclaration", + "scope": 6643, + "src": "6440:14:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6605, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6440:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 6613, + "initialValue": { + "arguments": [ + { + "id": 6608, + "name": "hash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6572, + "src": "6467:4:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6609, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6574, + "src": "6473:1:44", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 6610, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6576, + "src": "6476:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6611, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6578, + "src": "6479:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6607, + "name": "ecrecover", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -6, + "src": "6457:9:44", + "typeDescriptions": { + "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" + } + }, + "id": 6612, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6457:24:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6440:41:44" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 6619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6614, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6606, + "src": "6495:6:44", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 6617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6513:1:44", + "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": 6616, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6505:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6615, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6505:7:44", + "typeDescriptions": {} + } + }, + "id": 6618, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6505:10:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6495:20:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6633, + "nodeType": "IfStatement", + "src": "6491:113:44", + "trueBody": { + "id": 6632, + "nodeType": "Block", + "src": "6517:87:44", + "statements": [ + { + "expression": { + "components": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 6622, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6547:1:44", + "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": 6621, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6539:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6620, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6539:7:44", + "typeDescriptions": {} + } + }, + "id": 6623, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6539:10:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 6624, + "name": "RecoverError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6390, + "src": "6551:12:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", + "typeString": "type(enum ECDSA.RecoverError)" + } + }, + "id": 6625, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "6564:16:44", + "memberName": "InvalidSignature", + "nodeType": "MemberAccess", + "referencedDeclaration": 6387, + "src": "6551:29:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 6628, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6590:1:44", + "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": 6627, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6582:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6626, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6582:7:44", + "typeDescriptions": {} + } + }, + "id": 6629, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6582:10:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 6630, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6538:55:44", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" + } + }, + "functionReturnParameters": 6587, + "id": 6631, + "nodeType": "Return", + "src": "6531:62:44" + } + ] + } + }, + { + "expression": { + "components": [ + { + "id": 6634, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6606, + "src": "6622:6:44", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 6635, + "name": "RecoverError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6390, + "src": "6630:12:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", + "typeString": "type(enum ECDSA.RecoverError)" + } + }, + "id": 6636, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "6643:7:44", + "memberName": "NoError", + "nodeType": "MemberAccess", + "referencedDeclaration": 6386, + "src": "6630:20:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 6639, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6660:1:44", + "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": 6638, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6652:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6637, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6652:7:44", + "typeDescriptions": {} + } + }, + "id": 6640, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6652:10:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 6641, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6621:42:44", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" + } + }, + "functionReturnParameters": 6587, + "id": 6642, + "nodeType": "Return", + "src": "6614:49:44" + } + ] + }, + "documentation": { + "id": 6570, + "nodeType": "StructuredDocumentation", + "src": "5010:125:44", + "text": " @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n `r` and `s` signature fields separately." + }, + "id": 6644, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tryRecover", + "nameLocation": "5149:10:44", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6579, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6572, + "mutability": "mutable", + "name": "hash", + "nameLocation": "5177:4:44", + "nodeType": "VariableDeclaration", + "scope": 6644, + "src": "5169:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6571, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5169:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6574, + "mutability": "mutable", + "name": "v", + "nameLocation": "5197:1:44", + "nodeType": "VariableDeclaration", + "scope": 6644, + "src": "5191:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 6573, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "5191:5:44", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6576, + "mutability": "mutable", + "name": "r", + "nameLocation": "5216:1:44", + "nodeType": "VariableDeclaration", + "scope": 6644, + "src": "5208:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6575, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5208:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6578, + "mutability": "mutable", + "name": "s", + "nameLocation": "5235:1:44", + "nodeType": "VariableDeclaration", + "scope": 6644, + "src": "5227:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6577, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5227:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5159:83:44" + }, + "returnParameters": { + "id": 6587, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6581, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6644, + "src": "5266:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6580, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5266:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6584, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6644, + "src": "5275:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "typeName": { + "id": 6583, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 6582, + "name": "RecoverError", + "nameLocations": [ + "5275:12:44" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6390, + "src": "5275:12:44" + }, + "referencedDeclaration": 6390, + "src": "5275:12:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6586, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6644, + "src": "5289:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6585, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5289:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5265:32:44" + }, + "scope": 6730, + "src": "5140:1530:44", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6679, + "nodeType": "Block", + "src": "6897:166:44", + "statements": [ + { + "assignments": [ + 6659, + 6662, + 6664 + ], + "declarations": [ + { + "constant": false, + "id": 6659, + "mutability": "mutable", + "name": "recovered", + "nameLocation": "6916:9:44", + "nodeType": "VariableDeclaration", + "scope": 6679, + "src": "6908:17:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6658, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6908:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6662, + "mutability": "mutable", + "name": "error", + "nameLocation": "6940:5:44", + "nodeType": "VariableDeclaration", + "scope": 6679, + "src": "6927:18:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "typeName": { + "id": 6661, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 6660, + "name": "RecoverError", + "nameLocations": [ + "6927:12:44" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6390, + "src": "6927:12:44" + }, + "referencedDeclaration": 6390, + "src": "6927:12:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6664, + "mutability": "mutable", + "name": "errorArg", + "nameLocation": "6955:8:44", + "nodeType": "VariableDeclaration", + "scope": 6679, + "src": "6947:16:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6663, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6947:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6671, + "initialValue": { + "arguments": [ + { + "id": 6666, + "name": "hash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6647, + "src": "6978:4:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6667, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6649, + "src": "6984:1:44", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 6668, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6651, + "src": "6987:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6669, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6653, + "src": "6990:1:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6665, + "name": "tryRecover", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6456, + 6536, + 6644 + ], + "referencedDeclaration": 6644, + "src": "6967:10:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)" + } + }, + "id": 6670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6967:25:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", + "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6907:85:44" + }, + { + "expression": { + "arguments": [ + { + "id": 6673, + "name": "error", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6662, + "src": "7014:5:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + { + "id": 6674, + "name": "errorArg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6664, + "src": "7021:8:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6672, + "name": "_throwError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6729, + "src": "7002:11:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$6390_$_t_bytes32_$returns$__$", + "typeString": "function (enum ECDSA.RecoverError,bytes32) pure" + } + }, + "id": 6675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7002:28:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6676, + "nodeType": "ExpressionStatement", + "src": "7002:28:44" + }, + { + "expression": { + "id": 6677, + "name": "recovered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6659, + "src": "7047:9:44", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 6657, + "id": 6678, + "nodeType": "Return", + "src": "7040:16:44" + } + ] + }, + "documentation": { + "id": 6645, + "nodeType": "StructuredDocumentation", + "src": "6676:122:44", + "text": " @dev Overload of {ECDSA-recover} that receives the `v`,\n `r` and `s` signature fields separately." + }, + "id": 6680, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "recover", + "nameLocation": "6812:7:44", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6654, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6647, + "mutability": "mutable", + "name": "hash", + "nameLocation": "6828:4:44", + "nodeType": "VariableDeclaration", + "scope": 6680, + "src": "6820:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6646, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6820:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6649, + "mutability": "mutable", + "name": "v", + "nameLocation": "6840:1:44", + "nodeType": "VariableDeclaration", + "scope": 6680, + "src": "6834:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 6648, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "6834:5:44", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6651, + "mutability": "mutable", + "name": "r", + "nameLocation": "6851:1:44", + "nodeType": "VariableDeclaration", + "scope": 6680, + "src": "6843:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6650, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6843:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6653, + "mutability": "mutable", + "name": "s", + "nameLocation": "6862:1:44", + "nodeType": "VariableDeclaration", + "scope": 6680, + "src": "6854:9:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6652, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6854:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6819:45:44" + }, + "returnParameters": { + "id": 6657, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6656, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6680, + "src": "6888:7:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6655, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6888:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6887:9:44" + }, + "scope": 6730, + "src": "6803:260:44", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6728, + "nodeType": "Block", + "src": "7268:460:44", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "id": 6692, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6689, + "name": "error", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6684, + "src": "7282:5:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 6690, + "name": "RecoverError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6390, + "src": "7291:12:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", + "typeString": "type(enum ECDSA.RecoverError)" + } + }, + "id": 6691, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7304:7:44", + "memberName": "NoError", + "nodeType": "MemberAccess", + "referencedDeclaration": 6386, + "src": "7291:20:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "src": "7282:29:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "id": 6698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6695, + "name": "error", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6684, + "src": "7378:5:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 6696, + "name": "RecoverError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6390, + "src": "7387:12:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", + "typeString": "type(enum ECDSA.RecoverError)" + } + }, + "id": 6697, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7400:16:44", + "memberName": "InvalidSignature", + "nodeType": "MemberAccess", + "referencedDeclaration": 6387, + "src": "7387:29:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "src": "7378:38:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "id": 6706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6703, + "name": "error", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6684, + "src": "7483:5:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 6704, + "name": "RecoverError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6390, + "src": "7492:12:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", + "typeString": "type(enum ECDSA.RecoverError)" + } + }, + "id": 6705, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7505:22:44", + "memberName": "InvalidSignatureLength", + "nodeType": "MemberAccess", + "referencedDeclaration": 6388, + "src": "7492:35:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "src": "7483:44:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "id": 6718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6715, + "name": "error", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6684, + "src": "7617:5:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 6716, + "name": "RecoverError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6390, + "src": "7626:12:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", + "typeString": "type(enum ECDSA.RecoverError)" + } + }, + "id": 6717, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7639:17:44", + "memberName": "InvalidSignatureS", + "nodeType": "MemberAccess", + "referencedDeclaration": 6389, + "src": "7626:30:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "src": "7617:39:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6724, + "nodeType": "IfStatement", + "src": "7613:109:44", + "trueBody": { + "id": 6723, + "nodeType": "Block", + "src": "7658:64:44", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 6720, + "name": "errorArg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6686, + "src": "7702:8:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6719, + "name": "ECDSAInvalidSignatureS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6403, + "src": "7679:22:44", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32) pure returns (error)" + } + }, + "id": 6721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7679:32:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 6722, + "nodeType": "RevertStatement", + "src": "7672:39:44" + } + ] + } + }, + "id": 6725, + "nodeType": "IfStatement", + "src": "7479:243:44", + "trueBody": { + "id": 6714, + "nodeType": "Block", + "src": "7529:78:44", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 6710, + "name": "errorArg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6686, + "src": "7586:8:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6709, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7578:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6708, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7578:7:44", + "typeDescriptions": {} + } + }, + "id": 6711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7578:17:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6707, + "name": "ECDSAInvalidSignatureLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6398, + "src": "7550:27:44", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256) pure returns (error)" + } + }, + "id": 6712, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7550:46:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 6713, + "nodeType": "RevertStatement", + "src": "7543:53:44" + } + ] + } + }, + "id": 6726, + "nodeType": "IfStatement", + "src": "7374:348:44", + "trueBody": { + "id": 6702, + "nodeType": "Block", + "src": "7418:55:44", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6699, + "name": "ECDSAInvalidSignature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6393, + "src": "7439:21:44", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 6700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7439:23:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 6701, + "nodeType": "RevertStatement", + "src": "7432:30:44" + } + ] + } + }, + "id": 6727, + "nodeType": "IfStatement", + "src": "7278:444:44", + "trueBody": { + "id": 6694, + "nodeType": "Block", + "src": "7313:55:44", + "statements": [ + { + "functionReturnParameters": 6688, + "id": 6693, + "nodeType": "Return", + "src": "7327:7:44" + } + ] + } + } + ] + }, + "documentation": { + "id": 6681, + "nodeType": "StructuredDocumentation", + "src": "7069:122:44", + "text": " @dev Optionally reverts with the corresponding custom error according to the `error` argument provided." + }, + "id": 6729, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_throwError", + "nameLocation": "7205:11:44", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6687, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6684, + "mutability": "mutable", + "name": "error", + "nameLocation": "7230:5:44", + "nodeType": "VariableDeclaration", + "scope": 6729, + "src": "7217:18:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + }, + "typeName": { + "id": 6683, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 6682, + "name": "RecoverError", + "nameLocations": [ + "7217:12:44" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6390, + "src": "7217:12:44" + }, + "referencedDeclaration": 6390, + "src": "7217:12:44", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RecoverError_$6390", + "typeString": "enum ECDSA.RecoverError" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6686, + "mutability": "mutable", + "name": "errorArg", + "nameLocation": "7245:8:44", + "nodeType": "VariableDeclaration", + "scope": 6729, + "src": "7237:16:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6685, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7237:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7216:38:44" + }, + "returnParameters": { + "id": 6688, + "nodeType": "ParameterList", + "parameters": [], + "src": "7268:0:44" + }, + "scope": 6730, + "src": "7196:532:44", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 6731, + "src": "344:7386:44", + "usedErrors": [ + 6393, + 6398, + 6403 + ], + "usedEvents": [] + } + ], + "src": "112:7619:44" + }, + "id": 44 + }, + "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol", + "exportedSymbols": { + "MessageHashUtils": [ + 6804 + ], + "Strings": [ + 6382 + ] + }, + "id": 6805, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6732, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "123:24:45" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/Strings.sol", + "file": "../Strings.sol", + "id": 6734, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 6805, + "sourceUnit": 6383, + "src": "149:39:45", + "symbolAliases": [ + { + "foreign": { + "id": 6733, + "name": "Strings", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6382, + "src": "157:7:45", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "MessageHashUtils", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 6735, + "nodeType": "StructuredDocumentation", + "src": "190:330:45", + "text": " @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n The library provides methods for generating a hash of a message that conforms to the\n https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n specifications." + }, + "fullyImplemented": true, + "id": 6804, + "linearizedBaseContracts": [ + 6804 + ], + "name": "MessageHashUtils", + "nameLocation": "529:16:45", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 6744, + "nodeType": "Block", + "src": "1314:368:45", + "statements": [ + { + "AST": { + "nativeSrc": "1376:300:45", + "nodeType": "YulBlock", + "src": "1376:300:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1397:4:45", + "nodeType": "YulLiteral", + "src": "1397:4:45", + "type": "", + "value": "0x00" + }, + { + "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332", + "kind": "string", + "nativeSrc": "1403:34:45", + "nodeType": "YulLiteral", + "src": "1403:34:45", + "type": "", + "value": "\u0019Ethereum Signed Message:\n32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1390:6:45", + "nodeType": "YulIdentifier", + "src": "1390:6:45" + }, + "nativeSrc": "1390:48:45", + "nodeType": "YulFunctionCall", + "src": "1390:48:45" + }, + "nativeSrc": "1390:48:45", + "nodeType": "YulExpressionStatement", + "src": "1390:48:45" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1499:4:45", + "nodeType": "YulLiteral", + "src": "1499:4:45", + "type": "", + "value": "0x1c" + }, + { + "name": "messageHash", + "nativeSrc": "1505:11:45", + "nodeType": "YulIdentifier", + "src": "1505:11:45" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1492:6:45", + "nodeType": "YulIdentifier", + "src": "1492:6:45" + }, + "nativeSrc": "1492:25:45", + "nodeType": "YulFunctionCall", + "src": "1492:25:45" + }, + "nativeSrc": "1492:25:45", + "nodeType": "YulExpressionStatement", + "src": "1492:25:45" + }, + { + "nativeSrc": "1571:31:45", + "nodeType": "YulAssignment", + "src": "1571:31:45", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1591:4:45", + "nodeType": "YulLiteral", + "src": "1591:4:45", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nativeSrc": "1597:4:45", + "nodeType": "YulLiteral", + "src": "1597:4:45", + "type": "", + "value": "0x3c" + } + ], + "functionName": { + "name": "keccak256", + "nativeSrc": "1581:9:45", + "nodeType": "YulIdentifier", + "src": "1581:9:45" + }, + "nativeSrc": "1581:21:45", + "nodeType": "YulFunctionCall", + "src": "1581:21:45" + }, + "variableNames": [ + { + "name": "digest", + "nativeSrc": "1571:6:45", + "nodeType": "YulIdentifier", + "src": "1571:6:45" + } + ] + } + ] + }, + "documentation": "@solidity memory-safe-assembly", + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 6741, + "isOffset": false, + "isSlot": false, + "src": "1571:6:45", + "valueSize": 1 + }, + { + "declaration": 6738, + "isOffset": false, + "isSlot": false, + "src": "1505:11:45", + "valueSize": 1 + } + ], + "id": 6743, + "nodeType": "InlineAssembly", + "src": "1367:309:45" + } + ] + }, + "documentation": { + "id": 6736, + "nodeType": "StructuredDocumentation", + "src": "552:665:45", + "text": " @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing a bytes32 `messageHash` with\n `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n keccak256, although any bytes32 value can be safely used because the final digest will\n be re-hashed.\n See {ECDSA-recover}." + }, + "id": 6745, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toEthSignedMessageHash", + "nameLocation": "1231:22:45", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6739, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6738, + "mutability": "mutable", + "name": "messageHash", + "nameLocation": "1262:11:45", + "nodeType": "VariableDeclaration", + "scope": 6745, + "src": "1254:19:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6737, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1254:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1253:21:45" + }, + "returnParameters": { + "id": 6742, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6741, + "mutability": "mutable", + "name": "digest", + "nameLocation": "1306:6:45", + "nodeType": "VariableDeclaration", + "scope": 6745, + "src": "1298:14:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6740, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1298:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1297:16:45" + }, + "scope": 6804, + "src": "1222:460:45", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6770, + "nodeType": "Block", + "src": "2234:143:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a", + "id": 6757, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2286:32:45", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4", + "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\"" + }, + "value": "\u0019Ethereum Signed Message:\n" + }, + { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 6762, + "name": "message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6748, + "src": "2343:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2351:6:45", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2343:14:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6760, + "name": "Strings", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6382, + "src": "2326:7:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Strings_$6382_$", + "typeString": "type(library Strings)" + } + }, + "id": 6761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2334:8:45", + "memberName": "toString", + "nodeType": "MemberAccess", + "referencedDeclaration": 6195, + "src": "2326:16:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$", + "typeString": "function (uint256) pure returns (string memory)" + } + }, + "id": 6764, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2326:32:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 6759, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2320:5:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 6758, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2320:5:45", + "typeDescriptions": {} + } + }, + "id": 6765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2320:39:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 6766, + "name": "message", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6748, + "src": "2361:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4", + "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\"" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 6755, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2273:5:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 6754, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2273:5:45", + "typeDescriptions": {} + } + }, + "id": 6756, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2279:6:45", + "memberName": "concat", + "nodeType": "MemberAccess", + "src": "2273:12:45", + "typeDescriptions": { + "typeIdentifier": "t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 6767, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2273:96:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6753, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2263:9:45", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 6768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2263:107:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6752, + "id": 6769, + "nodeType": "Return", + "src": "2244:126:45" + } + ] + }, + "documentation": { + "id": 6746, + "nodeType": "StructuredDocumentation", + "src": "1688:455:45", + "text": " @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing an arbitrary `message` with\n `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n See {ECDSA-recover}." + }, + "id": 6771, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toEthSignedMessageHash", + "nameLocation": "2157:22:45", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6749, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6748, + "mutability": "mutable", + "name": "message", + "nameLocation": "2193:7:45", + "nodeType": "VariableDeclaration", + "scope": 6771, + "src": "2180:20:45", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6747, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2180:5:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2179:22:45" + }, + "returnParameters": { + "id": 6752, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6751, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6771, + "src": "2225:7:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6750, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2225:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2224:9:45" + }, + "scope": 6804, + "src": "2148:229:45", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6790, + "nodeType": "Block", + "src": "2831:80:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "1900", + "id": 6784, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "hexString", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2875:10:45", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a", + "typeString": "literal_string hex\"1900\"" + }, + "value": "\u0019\u0000" + }, + { + "id": 6785, + "name": "validator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6774, + "src": "2887:9:45", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 6786, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6776, + "src": "2898:4:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a", + "typeString": "literal_string hex\"1900\"" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 6782, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2858:3:45", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6783, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2862:12:45", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "2858:16:45", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 6787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2858:45:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6781, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2848:9:45", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 6788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2848:56:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6780, + "id": 6789, + "nodeType": "Return", + "src": "2841:63:45" + } + ] + }, + "documentation": { + "id": 6772, + "nodeType": "StructuredDocumentation", + "src": "2383:332:45", + "text": " @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x00` (data with intended validator).\n The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n `validator` address. Then hashing the result.\n See {ECDSA-recover}." + }, + "id": 6791, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toDataWithIntendedValidatorHash", + "nameLocation": "2729:31:45", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6777, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6774, + "mutability": "mutable", + "name": "validator", + "nameLocation": "2769:9:45", + "nodeType": "VariableDeclaration", + "scope": 6791, + "src": "2761:17:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6773, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2761:7:45", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6776, + "mutability": "mutable", + "name": "data", + "nameLocation": "2793:4:45", + "nodeType": "VariableDeclaration", + "scope": 6791, + "src": "2780:17:45", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6775, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2780:5:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2760:38:45" + }, + "returnParameters": { + "id": 6780, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6779, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6791, + "src": "2822:7:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6778, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2822:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2821:9:45" + }, + "scope": 6804, + "src": "2720:191:45", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6802, + "nodeType": "Block", + "src": "3462:292:45", + "statements": [ + { + "AST": { + "nativeSrc": "3524:224:45", + "nodeType": "YulBlock", + "src": "3524:224:45", + "statements": [ + { + "nativeSrc": "3538:22:45", + "nodeType": "YulVariableDeclaration", + "src": "3538:22:45", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3555:4:45", + "nodeType": "YulLiteral", + "src": "3555:4:45", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3549:5:45", + "nodeType": "YulIdentifier", + "src": "3549:5:45" + }, + "nativeSrc": "3549:11:45", + "nodeType": "YulFunctionCall", + "src": "3549:11:45" + }, + "variables": [ + { + "name": "ptr", + "nativeSrc": "3542:3:45", + "nodeType": "YulTypedName", + "src": "3542:3:45", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "ptr", + "nativeSrc": "3580:3:45", + "nodeType": "YulIdentifier", + "src": "3580:3:45" + }, + { + "hexValue": "1901", + "kind": "string", + "nativeSrc": "3585:10:45", + "nodeType": "YulLiteral", + "src": "3585:10:45", + "type": "", + "value": "\u0019\u0001" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3573:6:45", + "nodeType": "YulIdentifier", + "src": "3573:6:45" + }, + "nativeSrc": "3573:23:45", + "nodeType": "YulFunctionCall", + "src": "3573:23:45" + }, + "nativeSrc": "3573:23:45", + "nodeType": "YulExpressionStatement", + "src": "3573:23:45" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nativeSrc": "3620:3:45", + "nodeType": "YulIdentifier", + "src": "3620:3:45" + }, + { + "kind": "number", + "nativeSrc": "3625:4:45", + "nodeType": "YulLiteral", + "src": "3625:4:45", + "type": "", + "value": "0x02" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3616:3:45", + "nodeType": "YulIdentifier", + "src": "3616:3:45" + }, + "nativeSrc": "3616:14:45", + "nodeType": "YulFunctionCall", + "src": "3616:14:45" + }, + { + "name": "domainSeparator", + "nativeSrc": "3632:15:45", + "nodeType": "YulIdentifier", + "src": "3632:15:45" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3609:6:45", + "nodeType": "YulIdentifier", + "src": "3609:6:45" + }, + "nativeSrc": "3609:39:45", + "nodeType": "YulFunctionCall", + "src": "3609:39:45" + }, + "nativeSrc": "3609:39:45", + "nodeType": "YulExpressionStatement", + "src": "3609:39:45" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nativeSrc": "3672:3:45", + "nodeType": "YulIdentifier", + "src": "3672:3:45" + }, + { + "kind": "number", + "nativeSrc": "3677:4:45", + "nodeType": "YulLiteral", + "src": "3677:4:45", + "type": "", + "value": "0x22" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3668:3:45", + "nodeType": "YulIdentifier", + "src": "3668:3:45" + }, + "nativeSrc": "3668:14:45", + "nodeType": "YulFunctionCall", + "src": "3668:14:45" + }, + { + "name": "structHash", + "nativeSrc": "3684:10:45", + "nodeType": "YulIdentifier", + "src": "3684:10:45" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3661:6:45", + "nodeType": "YulIdentifier", + "src": "3661:6:45" + }, + "nativeSrc": "3661:34:45", + "nodeType": "YulFunctionCall", + "src": "3661:34:45" + }, + "nativeSrc": "3661:34:45", + "nodeType": "YulExpressionStatement", + "src": "3661:34:45" + }, + { + "nativeSrc": "3708:30:45", + "nodeType": "YulAssignment", + "src": "3708:30:45", + "value": { + "arguments": [ + { + "name": "ptr", + "nativeSrc": "3728:3:45", + "nodeType": "YulIdentifier", + "src": "3728:3:45" + }, + { + "kind": "number", + "nativeSrc": "3733:4:45", + "nodeType": "YulLiteral", + "src": "3733:4:45", + "type": "", + "value": "0x42" + } + ], + "functionName": { + "name": "keccak256", + "nativeSrc": "3718:9:45", + "nodeType": "YulIdentifier", + "src": "3718:9:45" + }, + "nativeSrc": "3718:20:45", + "nodeType": "YulFunctionCall", + "src": "3718:20:45" + }, + "variableNames": [ + { + "name": "digest", + "nativeSrc": "3708:6:45", + "nodeType": "YulIdentifier", + "src": "3708:6:45" + } + ] + } + ] + }, + "documentation": "@solidity memory-safe-assembly", + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 6799, + "isOffset": false, + "isSlot": false, + "src": "3708:6:45", + "valueSize": 1 + }, + { + "declaration": 6794, + "isOffset": false, + "isSlot": false, + "src": "3632:15:45", + "valueSize": 1 + }, + { + "declaration": 6796, + "isOffset": false, + "isSlot": false, + "src": "3684:10:45", + "valueSize": 1 + } + ], + "id": 6801, + "nodeType": "InlineAssembly", + "src": "3515:233:45" + } + ] + }, + "documentation": { + "id": 6792, + "nodeType": "StructuredDocumentation", + "src": "2917:431:45", + "text": " @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n See {ECDSA-recover}." + }, + "id": 6803, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toTypedDataHash", + "nameLocation": "3362:15:45", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6797, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6794, + "mutability": "mutable", + "name": "domainSeparator", + "nameLocation": "3386:15:45", + "nodeType": "VariableDeclaration", + "scope": 6803, + "src": "3378:23:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6793, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3378:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6796, + "mutability": "mutable", + "name": "structHash", + "nameLocation": "3411:10:45", + "nodeType": "VariableDeclaration", + "scope": 6803, + "src": "3403:18:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6795, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3403:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3377:45:45" + }, + "returnParameters": { + "id": 6800, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6799, + "mutability": "mutable", + "name": "digest", + "nameLocation": "3454:6:45", + "nodeType": "VariableDeclaration", + "scope": 6803, + "src": "3446:14:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6798, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3446:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3445:16:45" + }, + "scope": 6804, + "src": "3353:401:45", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 6805, + "src": "521:3235:45", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "123:3634:45" + }, + "id": 45 + }, + "@openzeppelin/contracts/utils/math/Math.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol", + "exportedSymbols": { + "Math": [ + 7858 + ] + }, + "id": 7859, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6806, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "103:24:46" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "Math", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 6807, + "nodeType": "StructuredDocumentation", + "src": "129:73:46", + "text": " @dev Standard math utilities missing in the Solidity language." + }, + "fullyImplemented": true, + "id": 7858, + "linearizedBaseContracts": [ + 7858 + ], + "name": "Math", + "nameLocation": "211:4:46", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 6808, + "nodeType": "StructuredDocumentation", + "src": "222:50:46", + "text": " @dev Muldiv operation overflow." + }, + "errorSelector": "227bc153", + "id": 6810, + "name": "MathOverflowedMulDiv", + "nameLocation": "283:20:46", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 6809, + "nodeType": "ParameterList", + "parameters": [], + "src": "303:2:46" + }, + "src": "277:29:46" + }, + { + "canonicalName": "Math.Rounding", + "id": 6815, + "members": [ + { + "id": 6811, + "name": "Floor", + "nameLocation": "336:5:46", + "nodeType": "EnumValue", + "src": "336:5:46" + }, + { + "id": 6812, + "name": "Ceil", + "nameLocation": "379:4:46", + "nodeType": "EnumValue", + "src": "379:4:46" + }, + { + "id": 6813, + "name": "Trunc", + "nameLocation": "421:5:46", + "nodeType": "EnumValue", + "src": "421:5:46" + }, + { + "id": 6814, + "name": "Expand", + "nameLocation": "451:6:46", + "nodeType": "EnumValue", + "src": "451:6:46" + } + ], + "name": "Rounding", + "nameLocation": "317:8:46", + "nodeType": "EnumDefinition", + "src": "312:169:46" + }, + { + "body": { + "id": 6846, + "nodeType": "Block", + "src": "661:140:46", + "statements": [ + { + "id": 6845, + "nodeType": "UncheckedBlock", + "src": "671:124:46", + "statements": [ + { + "assignments": [ + 6828 + ], + "declarations": [ + { + "constant": false, + "id": 6828, + "mutability": "mutable", + "name": "c", + "nameLocation": "703:1:46", + "nodeType": "VariableDeclaration", + "scope": 6845, + "src": "695:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6827, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "695:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6832, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6831, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6829, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6818, + "src": "707:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 6830, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6820, + "src": "711:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "707:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "695:17:46" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6833, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6828, + "src": "730:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 6834, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6818, + "src": "734:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "730:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6840, + "nodeType": "IfStatement", + "src": "726:28:46", + "trueBody": { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 6836, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "745:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 6837, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "752:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 6838, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "744:10:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0)" + } + }, + "functionReturnParameters": 6826, + "id": 6839, + "nodeType": "Return", + "src": "737:17:46" + } + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 6841, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "776:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 6842, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6828, + "src": "782:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6843, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "775:9:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", + "typeString": "tuple(bool,uint256)" + } + }, + "functionReturnParameters": 6826, + "id": 6844, + "nodeType": "Return", + "src": "768:16:46" + } + ] + } + ] + }, + "documentation": { + "id": 6816, + "nodeType": "StructuredDocumentation", + "src": "487:93:46", + "text": " @dev Returns the addition of two unsigned integers, with an overflow flag." + }, + "id": 6847, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tryAdd", + "nameLocation": "594:6:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6821, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6818, + "mutability": "mutable", + "name": "a", + "nameLocation": "609:1:46", + "nodeType": "VariableDeclaration", + "scope": 6847, + "src": "601:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6817, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "601:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6820, + "mutability": "mutable", + "name": "b", + "nameLocation": "620:1:46", + "nodeType": "VariableDeclaration", + "scope": 6847, + "src": "612:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6819, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "612:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "600:22:46" + }, + "returnParameters": { + "id": 6826, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6823, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6847, + "src": "646:4:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6822, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "646:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6825, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6847, + "src": "652:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6824, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "652:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "645:15:46" + }, + "scope": 7858, + "src": "585:216:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6874, + "nodeType": "Block", + "src": "984:113:46", + "statements": [ + { + "id": 6873, + "nodeType": "UncheckedBlock", + "src": "994:97:46", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6861, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6859, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6852, + "src": "1022:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 6860, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6850, + "src": "1026:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1022:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6866, + "nodeType": "IfStatement", + "src": "1018:28:46", + "trueBody": { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 6862, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1037:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 6863, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1044:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 6864, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1036:10:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0)" + } + }, + "functionReturnParameters": 6858, + "id": 6865, + "nodeType": "Return", + "src": "1029:17:46" + } + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 6867, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1068:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6868, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6850, + "src": "1074:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 6869, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6852, + "src": "1078:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1074:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6871, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1067:13:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", + "typeString": "tuple(bool,uint256)" + } + }, + "functionReturnParameters": 6858, + "id": 6872, + "nodeType": "Return", + "src": "1060:20:46" + } + ] + } + ] + }, + "documentation": { + "id": 6848, + "nodeType": "StructuredDocumentation", + "src": "807:96:46", + "text": " @dev Returns the subtraction of two unsigned integers, with an overflow flag." + }, + "id": 6875, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "trySub", + "nameLocation": "917:6:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6853, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6850, + "mutability": "mutable", + "name": "a", + "nameLocation": "932:1:46", + "nodeType": "VariableDeclaration", + "scope": 6875, + "src": "924:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6849, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "924:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6852, + "mutability": "mutable", + "name": "b", + "nameLocation": "943:1:46", + "nodeType": "VariableDeclaration", + "scope": 6875, + "src": "935:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6851, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "935:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "923:22:46" + }, + "returnParameters": { + "id": 6858, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6855, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6875, + "src": "969:4:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6854, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "969:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6857, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6875, + "src": "975:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6856, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "975:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "968:15:46" + }, + "scope": 7858, + "src": "908:189:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6916, + "nodeType": "Block", + "src": "1283:417:46", + "statements": [ + { + "id": 6915, + "nodeType": "UncheckedBlock", + "src": "1293:401:46", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6887, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6878, + "src": "1551:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6888, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1556:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1551:6:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6894, + "nodeType": "IfStatement", + "src": "1547:28:46", + "trueBody": { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 6890, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1567:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "hexValue": "30", + "id": 6891, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1573:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 6892, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1566:9:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0)" + } + }, + "functionReturnParameters": 6886, + "id": 6893, + "nodeType": "Return", + "src": "1559:16:46" + } + }, + { + "assignments": [ + 6896 + ], + "declarations": [ + { + "constant": false, + "id": 6896, + "mutability": "mutable", + "name": "c", + "nameLocation": "1597:1:46", + "nodeType": "VariableDeclaration", + "scope": 6915, + "src": "1589:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6895, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1589:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6900, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6897, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6878, + "src": "1601:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 6898, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6880, + "src": "1605:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1601:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1589:17:46" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6903, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6901, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6896, + "src": "1624:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 6902, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6878, + "src": "1628:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1624:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 6904, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6880, + "src": "1633:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1624:10:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6910, + "nodeType": "IfStatement", + "src": "1620:33:46", + "trueBody": { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 6906, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1644:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 6907, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1651:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 6908, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1643:10:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0)" + } + }, + "functionReturnParameters": 6886, + "id": 6909, + "nodeType": "Return", + "src": "1636:17:46" + } + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 6911, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1675:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 6912, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6896, + "src": "1681:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6913, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1674:9:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", + "typeString": "tuple(bool,uint256)" + } + }, + "functionReturnParameters": 6886, + "id": 6914, + "nodeType": "Return", + "src": "1667:16:46" + } + ] + } + ] + }, + "documentation": { + "id": 6876, + "nodeType": "StructuredDocumentation", + "src": "1103:99:46", + "text": " @dev Returns the multiplication of two unsigned integers, with an overflow flag." + }, + "id": 6917, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tryMul", + "nameLocation": "1216:6:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6881, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6878, + "mutability": "mutable", + "name": "a", + "nameLocation": "1231:1:46", + "nodeType": "VariableDeclaration", + "scope": 6917, + "src": "1223:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6877, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1223:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6880, + "mutability": "mutable", + "name": "b", + "nameLocation": "1242:1:46", + "nodeType": "VariableDeclaration", + "scope": 6917, + "src": "1234:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6879, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1234:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1222:22:46" + }, + "returnParameters": { + "id": 6886, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6883, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6917, + "src": "1268:4:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6882, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1268:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6885, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6917, + "src": "1274:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6884, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1274:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1267:15:46" + }, + "scope": 7858, + "src": "1207:493:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6944, + "nodeType": "Block", + "src": "1887:114:46", + "statements": [ + { + "id": 6943, + "nodeType": "UncheckedBlock", + "src": "1897:98:46", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6929, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6922, + "src": "1925:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6930, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1930:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1925:6:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6936, + "nodeType": "IfStatement", + "src": "1921:29:46", + "trueBody": { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 6932, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1941:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 6933, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1948:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 6934, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1940:10:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0)" + } + }, + "functionReturnParameters": 6928, + "id": 6935, + "nodeType": "Return", + "src": "1933:17:46" + } + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 6937, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1972:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6938, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6920, + "src": "1978:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 6939, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6922, + "src": "1982:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1978:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6941, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1971:13:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", + "typeString": "tuple(bool,uint256)" + } + }, + "functionReturnParameters": 6928, + "id": 6942, + "nodeType": "Return", + "src": "1964:20:46" + } + ] + } + ] + }, + "documentation": { + "id": 6918, + "nodeType": "StructuredDocumentation", + "src": "1706:100:46", + "text": " @dev Returns the division of two unsigned integers, with a division by zero flag." + }, + "id": 6945, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tryDiv", + "nameLocation": "1820:6:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6923, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6920, + "mutability": "mutable", + "name": "a", + "nameLocation": "1835:1:46", + "nodeType": "VariableDeclaration", + "scope": 6945, + "src": "1827:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6919, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1827:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6922, + "mutability": "mutable", + "name": "b", + "nameLocation": "1846:1:46", + "nodeType": "VariableDeclaration", + "scope": 6945, + "src": "1838:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6921, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1838:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1826:22:46" + }, + "returnParameters": { + "id": 6928, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6925, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6945, + "src": "1872:4:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6924, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1872:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6927, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6945, + "src": "1878:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6926, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1878:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1871:15:46" + }, + "scope": 7858, + "src": "1811:190:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6972, + "nodeType": "Block", + "src": "2198:114:46", + "statements": [ + { + "id": 6971, + "nodeType": "UncheckedBlock", + "src": "2208:98:46", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6959, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6957, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6950, + "src": "2236:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6958, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2241:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2236:6:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6964, + "nodeType": "IfStatement", + "src": "2232:29:46", + "trueBody": { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 6960, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2252:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 6961, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2259:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 6962, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2251:10:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0)" + } + }, + "functionReturnParameters": 6956, + "id": 6963, + "nodeType": "Return", + "src": "2244:17:46" + } + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 6965, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2283:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6968, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6966, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6948, + "src": "2289:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "%", + "rightExpression": { + "id": 6967, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6950, + "src": "2293:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2289:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6969, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2282:13:46", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", + "typeString": "tuple(bool,uint256)" + } + }, + "functionReturnParameters": 6956, + "id": 6970, + "nodeType": "Return", + "src": "2275:20:46" + } + ] + } + ] + }, + "documentation": { + "id": 6946, + "nodeType": "StructuredDocumentation", + "src": "2007:110:46", + "text": " @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag." + }, + "id": 6973, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tryMod", + "nameLocation": "2131:6:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6951, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6948, + "mutability": "mutable", + "name": "a", + "nameLocation": "2146:1:46", + "nodeType": "VariableDeclaration", + "scope": 6973, + "src": "2138:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6947, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2138:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6950, + "mutability": "mutable", + "name": "b", + "nameLocation": "2157:1:46", + "nodeType": "VariableDeclaration", + "scope": 6973, + "src": "2149:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6949, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2149:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2137:22:46" + }, + "returnParameters": { + "id": 6956, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6953, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6973, + "src": "2183:4:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6952, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2183:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6955, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6973, + "src": "2189:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6954, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2189:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2182:15:46" + }, + "scope": 7858, + "src": "2122:190:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6990, + "nodeType": "Block", + "src": "2449:37:46", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6983, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6976, + "src": "2466:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 6984, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6978, + "src": "2470:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2466:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 6987, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6978, + "src": "2478:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "2466:13:46", + "trueExpression": { + "id": 6986, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6976, + "src": "2474:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6982, + "id": 6989, + "nodeType": "Return", + "src": "2459:20:46" + } + ] + }, + "documentation": { + "id": 6974, + "nodeType": "StructuredDocumentation", + "src": "2318:59:46", + "text": " @dev Returns the largest of two numbers." + }, + "id": 6991, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "max", + "nameLocation": "2391:3:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6979, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6976, + "mutability": "mutable", + "name": "a", + "nameLocation": "2403:1:46", + "nodeType": "VariableDeclaration", + "scope": 6991, + "src": "2395:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6975, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2395:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6978, + "mutability": "mutable", + "name": "b", + "nameLocation": "2414:1:46", + "nodeType": "VariableDeclaration", + "scope": 6991, + "src": "2406:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6977, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2406:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2394:22:46" + }, + "returnParameters": { + "id": 6982, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6981, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 6991, + "src": "2440:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6980, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2440:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2439:9:46" + }, + "scope": 7858, + "src": "2382:104:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7008, + "nodeType": "Block", + "src": "2624:37:46", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7001, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6994, + "src": "2641:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7002, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6996, + "src": "2645:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2641:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 7005, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6996, + "src": "2653:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7006, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "2641:13:46", + "trueExpression": { + "id": 7004, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6994, + "src": "2649:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7000, + "id": 7007, + "nodeType": "Return", + "src": "2634:20:46" + } + ] + }, + "documentation": { + "id": 6992, + "nodeType": "StructuredDocumentation", + "src": "2492:60:46", + "text": " @dev Returns the smallest of two numbers." + }, + "id": 7009, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "min", + "nameLocation": "2566:3:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6997, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6994, + "mutability": "mutable", + "name": "a", + "nameLocation": "2578:1:46", + "nodeType": "VariableDeclaration", + "scope": 7009, + "src": "2570:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6993, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2570:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6996, + "mutability": "mutable", + "name": "b", + "nameLocation": "2589:1:46", + "nodeType": "VariableDeclaration", + "scope": 7009, + "src": "2581:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6995, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2581:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2569:22:46" + }, + "returnParameters": { + "id": 7000, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6999, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7009, + "src": "2615:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6998, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2615:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2614:9:46" + }, + "scope": 7858, + "src": "2557:104:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7031, + "nodeType": "Block", + "src": "2845:82:46", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7029, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7019, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7012, + "src": "2900:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 7020, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7014, + "src": "2904:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2900:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7022, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2899:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7028, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7023, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7012, + "src": "2910:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "^", + "rightExpression": { + "id": 7024, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7014, + "src": "2914:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2910:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7026, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2909:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "32", + "id": 7027, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2919:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "2909:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2899:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7018, + "id": 7030, + "nodeType": "Return", + "src": "2892:28:46" + } + ] + }, + "documentation": { + "id": 7010, + "nodeType": "StructuredDocumentation", + "src": "2667:102:46", + "text": " @dev Returns the average of two numbers. The result is rounded towards\n zero." + }, + "id": 7032, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "average", + "nameLocation": "2783:7:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7015, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7012, + "mutability": "mutable", + "name": "a", + "nameLocation": "2799:1:46", + "nodeType": "VariableDeclaration", + "scope": 7032, + "src": "2791:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7011, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2791:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7014, + "mutability": "mutable", + "name": "b", + "nameLocation": "2810:1:46", + "nodeType": "VariableDeclaration", + "scope": 7032, + "src": "2802:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7013, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2802:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2790:22:46" + }, + "returnParameters": { + "id": 7018, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7017, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7032, + "src": "2836:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7016, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2836:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2835:9:46" + }, + "scope": 7858, + "src": "2774:153:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7065, + "nodeType": "Block", + "src": "3219:260:46", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7042, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7037, + "src": "3233:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 7043, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3238:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3233:6:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7050, + "nodeType": "IfStatement", + "src": "3229:127:46", + "trueBody": { + "id": 7049, + "nodeType": "Block", + "src": "3241:115:46", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7045, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7035, + "src": "3340:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7046, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7037, + "src": "3344:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3340:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7041, + "id": 7048, + "nodeType": "Return", + "src": "3333:12:46" + } + ] + } + }, + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7053, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7051, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7035, + "src": "3444:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 7052, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3449:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3444:6:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7062, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7055, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7035, + "src": "3458:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 7056, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3462:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3458:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7058, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3457:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7059, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7037, + "src": "3467:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3457:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 7061, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3471:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3457:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7063, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "3444:28:46", + "trueExpression": { + "hexValue": "30", + "id": 7054, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3453:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7041, + "id": 7064, + "nodeType": "Return", + "src": "3437:35:46" + } + ] + }, + "documentation": { + "id": 7033, + "nodeType": "StructuredDocumentation", + "src": "2933:210:46", + "text": " @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero." + }, + "id": 7066, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ceilDiv", + "nameLocation": "3157:7:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7038, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7035, + "mutability": "mutable", + "name": "a", + "nameLocation": "3173:1:46", + "nodeType": "VariableDeclaration", + "scope": 7066, + "src": "3165:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7034, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3165:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7037, + "mutability": "mutable", + "name": "b", + "nameLocation": "3184:1:46", + "nodeType": "VariableDeclaration", + "scope": 7066, + "src": "3176:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7036, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3176:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3164:22:46" + }, + "returnParameters": { + "id": 7041, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7040, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7066, + "src": "3210:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7039, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3210:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3209:9:46" + }, + "scope": 7858, + "src": "3148:331:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7191, + "nodeType": "Block", + "src": "3901:4018:46", + "statements": [ + { + "id": 7190, + "nodeType": "UncheckedBlock", + "src": "3911:4002:46", + "statements": [ + { + "assignments": [ + 7079 + ], + "declarations": [ + { + "constant": false, + "id": 7079, + "mutability": "mutable", + "name": "prod0", + "nameLocation": "4240:5:46", + "nodeType": "VariableDeclaration", + "scope": 7190, + "src": "4232:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7078, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4232:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7083, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7080, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7069, + "src": "4248:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7081, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7071, + "src": "4252:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4248:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4232:21:46" + }, + { + "assignments": [ + 7085 + ], + "declarations": [ + { + "constant": false, + "id": 7085, + "mutability": "mutable", + "name": "prod1", + "nameLocation": "4320:5:46", + "nodeType": "VariableDeclaration", + "scope": 7190, + "src": "4312:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7084, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4312:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7086, + "nodeType": "VariableDeclarationStatement", + "src": "4312:13:46" + }, + { + "AST": { + "nativeSrc": "4392:122:46", + "nodeType": "YulBlock", + "src": "4392:122:46", + "statements": [ + { + "nativeSrc": "4410:30:46", + "nodeType": "YulVariableDeclaration", + "src": "4410:30:46", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "4427:1:46", + "nodeType": "YulIdentifier", + "src": "4427:1:46" + }, + { + "name": "y", + "nativeSrc": "4430:1:46", + "nodeType": "YulIdentifier", + "src": "4430:1:46" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4437:1:46", + "nodeType": "YulLiteral", + "src": "4437:1:46", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "4433:3:46", + "nodeType": "YulIdentifier", + "src": "4433:3:46" + }, + "nativeSrc": "4433:6:46", + "nodeType": "YulFunctionCall", + "src": "4433:6:46" + } + ], + "functionName": { + "name": "mulmod", + "nativeSrc": "4420:6:46", + "nodeType": "YulIdentifier", + "src": "4420:6:46" + }, + "nativeSrc": "4420:20:46", + "nodeType": "YulFunctionCall", + "src": "4420:20:46" + }, + "variables": [ + { + "name": "mm", + "nativeSrc": "4414:2:46", + "nodeType": "YulTypedName", + "src": "4414:2:46", + "type": "" + } + ] + }, + { + "nativeSrc": "4457:43:46", + "nodeType": "YulAssignment", + "src": "4457:43:46", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "mm", + "nativeSrc": "4474:2:46", + "nodeType": "YulIdentifier", + "src": "4474:2:46" + }, + { + "name": "prod0", + "nativeSrc": "4478:5:46", + "nodeType": "YulIdentifier", + "src": "4478:5:46" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "4470:3:46", + "nodeType": "YulIdentifier", + "src": "4470:3:46" + }, + "nativeSrc": "4470:14:46", + "nodeType": "YulFunctionCall", + "src": "4470:14:46" + }, + { + "arguments": [ + { + "name": "mm", + "nativeSrc": "4489:2:46", + "nodeType": "YulIdentifier", + "src": "4489:2:46" + }, + { + "name": "prod0", + "nativeSrc": "4493:5:46", + "nodeType": "YulIdentifier", + "src": "4493:5:46" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "4486:2:46", + "nodeType": "YulIdentifier", + "src": "4486:2:46" + }, + "nativeSrc": "4486:13:46", + "nodeType": "YulFunctionCall", + "src": "4486:13:46" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "4466:3:46", + "nodeType": "YulIdentifier", + "src": "4466:3:46" + }, + "nativeSrc": "4466:34:46", + "nodeType": "YulFunctionCall", + "src": "4466:34:46" + }, + "variableNames": [ + { + "name": "prod1", + "nativeSrc": "4457:5:46", + "nodeType": "YulIdentifier", + "src": "4457:5:46" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 7079, + "isOffset": false, + "isSlot": false, + "src": "4478:5:46", + "valueSize": 1 + }, + { + "declaration": 7079, + "isOffset": false, + "isSlot": false, + "src": "4493:5:46", + "valueSize": 1 + }, + { + "declaration": 7085, + "isOffset": false, + "isSlot": false, + "src": "4457:5:46", + "valueSize": 1 + }, + { + "declaration": 7069, + "isOffset": false, + "isSlot": false, + "src": "4427:1:46", + "valueSize": 1 + }, + { + "declaration": 7071, + "isOffset": false, + "isSlot": false, + "src": "4430:1:46", + "valueSize": 1 + } + ], + "id": 7087, + "nodeType": "InlineAssembly", + "src": "4383:131:46" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7090, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7088, + "name": "prod1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7085, + "src": "4595:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 7089, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4604:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4595:10:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7096, + "nodeType": "IfStatement", + "src": "4591:368:46", + "trueBody": { + "id": 7095, + "nodeType": "Block", + "src": "4607:352:46", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7091, + "name": "prod0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7079, + "src": "4925:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7092, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "4933:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4925:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7077, + "id": 7094, + "nodeType": "Return", + "src": "4918:26:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7099, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7097, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "5065:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 7098, + "name": "prod1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7085, + "src": "5080:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5065:20:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7104, + "nodeType": "IfStatement", + "src": "5061:88:46", + "trueBody": { + "id": 7103, + "nodeType": "Block", + "src": "5087:62:46", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 7100, + "name": "MathOverflowedMulDiv", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6810, + "src": "5112:20:46", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 7101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5112:22:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 7102, + "nodeType": "RevertStatement", + "src": "5105:29:46" + } + ] + } + }, + { + "assignments": [ + 7106 + ], + "declarations": [ + { + "constant": false, + "id": 7106, + "mutability": "mutable", + "name": "remainder", + "nameLocation": "5412:9:46", + "nodeType": "VariableDeclaration", + "scope": 7190, + "src": "5404:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7105, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5404:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7107, + "nodeType": "VariableDeclarationStatement", + "src": "5404:17:46" + }, + { + "AST": { + "nativeSrc": "5444:291:46", + "nodeType": "YulBlock", + "src": "5444:291:46", + "statements": [ + { + "nativeSrc": "5513:38:46", + "nodeType": "YulAssignment", + "src": "5513:38:46", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "5533:1:46", + "nodeType": "YulIdentifier", + "src": "5533:1:46" + }, + { + "name": "y", + "nativeSrc": "5536:1:46", + "nodeType": "YulIdentifier", + "src": "5536:1:46" + }, + { + "name": "denominator", + "nativeSrc": "5539:11:46", + "nodeType": "YulIdentifier", + "src": "5539:11:46" + } + ], + "functionName": { + "name": "mulmod", + "nativeSrc": "5526:6:46", + "nodeType": "YulIdentifier", + "src": "5526:6:46" + }, + "nativeSrc": "5526:25:46", + "nodeType": "YulFunctionCall", + "src": "5526:25:46" + }, + "variableNames": [ + { + "name": "remainder", + "nativeSrc": "5513:9:46", + "nodeType": "YulIdentifier", + "src": "5513:9:46" + } + ] + }, + { + "nativeSrc": "5633:41:46", + "nodeType": "YulAssignment", + "src": "5633:41:46", + "value": { + "arguments": [ + { + "name": "prod1", + "nativeSrc": "5646:5:46", + "nodeType": "YulIdentifier", + "src": "5646:5:46" + }, + { + "arguments": [ + { + "name": "remainder", + "nativeSrc": "5656:9:46", + "nodeType": "YulIdentifier", + "src": "5656:9:46" + }, + { + "name": "prod0", + "nativeSrc": "5667:5:46", + "nodeType": "YulIdentifier", + "src": "5667:5:46" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "5653:2:46", + "nodeType": "YulIdentifier", + "src": "5653:2:46" + }, + "nativeSrc": "5653:20:46", + "nodeType": "YulFunctionCall", + "src": "5653:20:46" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "5642:3:46", + "nodeType": "YulIdentifier", + "src": "5642:3:46" + }, + "nativeSrc": "5642:32:46", + "nodeType": "YulFunctionCall", + "src": "5642:32:46" + }, + "variableNames": [ + { + "name": "prod1", + "nativeSrc": "5633:5:46", + "nodeType": "YulIdentifier", + "src": "5633:5:46" + } + ] + }, + { + "nativeSrc": "5691:30:46", + "nodeType": "YulAssignment", + "src": "5691:30:46", + "value": { + "arguments": [ + { + "name": "prod0", + "nativeSrc": "5704:5:46", + "nodeType": "YulIdentifier", + "src": "5704:5:46" + }, + { + "name": "remainder", + "nativeSrc": "5711:9:46", + "nodeType": "YulIdentifier", + "src": "5711:9:46" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "5700:3:46", + "nodeType": "YulIdentifier", + "src": "5700:3:46" + }, + "nativeSrc": "5700:21:46", + "nodeType": "YulFunctionCall", + "src": "5700:21:46" + }, + "variableNames": [ + { + "name": "prod0", + "nativeSrc": "5691:5:46", + "nodeType": "YulIdentifier", + "src": "5691:5:46" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 7073, + "isOffset": false, + "isSlot": false, + "src": "5539:11:46", + "valueSize": 1 + }, + { + "declaration": 7079, + "isOffset": false, + "isSlot": false, + "src": "5667:5:46", + "valueSize": 1 + }, + { + "declaration": 7079, + "isOffset": false, + "isSlot": false, + "src": "5691:5:46", + "valueSize": 1 + }, + { + "declaration": 7079, + "isOffset": false, + "isSlot": false, + "src": "5704:5:46", + "valueSize": 1 + }, + { + "declaration": 7085, + "isOffset": false, + "isSlot": false, + "src": "5633:5:46", + "valueSize": 1 + }, + { + "declaration": 7085, + "isOffset": false, + "isSlot": false, + "src": "5646:5:46", + "valueSize": 1 + }, + { + "declaration": 7106, + "isOffset": false, + "isSlot": false, + "src": "5513:9:46", + "valueSize": 1 + }, + { + "declaration": 7106, + "isOffset": false, + "isSlot": false, + "src": "5656:9:46", + "valueSize": 1 + }, + { + "declaration": 7106, + "isOffset": false, + "isSlot": false, + "src": "5711:9:46", + "valueSize": 1 + }, + { + "declaration": 7069, + "isOffset": false, + "isSlot": false, + "src": "5533:1:46", + "valueSize": 1 + }, + { + "declaration": 7071, + "isOffset": false, + "isSlot": false, + "src": "5536:1:46", + "valueSize": 1 + } + ], + "id": 7108, + "nodeType": "InlineAssembly", + "src": "5435:300:46" + }, + { + "assignments": [ + 7110 + ], + "declarations": [ + { + "constant": false, + "id": 7110, + "mutability": "mutable", + "name": "twos", + "nameLocation": "5947:4:46", + "nodeType": "VariableDeclaration", + "scope": 7190, + "src": "5939:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7109, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5939:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7117, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7111, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "5954:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "30", + "id": 7112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5969:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 7113, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "5973:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5969:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7115, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5968:17:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5954:31:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5939:46:46" + }, + { + "AST": { + "nativeSrc": "6008:362:46", + "nodeType": "YulBlock", + "src": "6008:362:46", + "statements": [ + { + "nativeSrc": "6073:37:46", + "nodeType": "YulAssignment", + "src": "6073:37:46", + "value": { + "arguments": [ + { + "name": "denominator", + "nativeSrc": "6092:11:46", + "nodeType": "YulIdentifier", + "src": "6092:11:46" + }, + { + "name": "twos", + "nativeSrc": "6105:4:46", + "nodeType": "YulIdentifier", + "src": "6105:4:46" + } + ], + "functionName": { + "name": "div", + "nativeSrc": "6088:3:46", + "nodeType": "YulIdentifier", + "src": "6088:3:46" + }, + "nativeSrc": "6088:22:46", + "nodeType": "YulFunctionCall", + "src": "6088:22:46" + }, + "variableNames": [ + { + "name": "denominator", + "nativeSrc": "6073:11:46", + "nodeType": "YulIdentifier", + "src": "6073:11:46" + } + ] + }, + { + "nativeSrc": "6177:25:46", + "nodeType": "YulAssignment", + "src": "6177:25:46", + "value": { + "arguments": [ + { + "name": "prod0", + "nativeSrc": "6190:5:46", + "nodeType": "YulIdentifier", + "src": "6190:5:46" + }, + { + "name": "twos", + "nativeSrc": "6197:4:46", + "nodeType": "YulIdentifier", + "src": "6197:4:46" + } + ], + "functionName": { + "name": "div", + "nativeSrc": "6186:3:46", + "nodeType": "YulIdentifier", + "src": "6186:3:46" + }, + "nativeSrc": "6186:16:46", + "nodeType": "YulFunctionCall", + "src": "6186:16:46" + }, + "variableNames": [ + { + "name": "prod0", + "nativeSrc": "6177:5:46", + "nodeType": "YulIdentifier", + "src": "6177:5:46" + } + ] + }, + { + "nativeSrc": "6317:39:46", + "nodeType": "YulAssignment", + "src": "6317:39:46", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6337:1:46", + "nodeType": "YulLiteral", + "src": "6337:1:46", + "type": "", + "value": "0" + }, + { + "name": "twos", + "nativeSrc": "6340:4:46", + "nodeType": "YulIdentifier", + "src": "6340:4:46" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "6333:3:46", + "nodeType": "YulIdentifier", + "src": "6333:3:46" + }, + "nativeSrc": "6333:12:46", + "nodeType": "YulFunctionCall", + "src": "6333:12:46" + }, + { + "name": "twos", + "nativeSrc": "6347:4:46", + "nodeType": "YulIdentifier", + "src": "6347:4:46" + } + ], + "functionName": { + "name": "div", + "nativeSrc": "6329:3:46", + "nodeType": "YulIdentifier", + "src": "6329:3:46" + }, + "nativeSrc": "6329:23:46", + "nodeType": "YulFunctionCall", + "src": "6329:23:46" + }, + { + "kind": "number", + "nativeSrc": "6354:1:46", + "nodeType": "YulLiteral", + "src": "6354:1:46", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6325:3:46", + "nodeType": "YulIdentifier", + "src": "6325:3:46" + }, + "nativeSrc": "6325:31:46", + "nodeType": "YulFunctionCall", + "src": "6325:31:46" + }, + "variableNames": [ + { + "name": "twos", + "nativeSrc": "6317:4:46", + "nodeType": "YulIdentifier", + "src": "6317:4:46" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 7073, + "isOffset": false, + "isSlot": false, + "src": "6073:11:46", + "valueSize": 1 + }, + { + "declaration": 7073, + "isOffset": false, + "isSlot": false, + "src": "6092:11:46", + "valueSize": 1 + }, + { + "declaration": 7079, + "isOffset": false, + "isSlot": false, + "src": "6177:5:46", + "valueSize": 1 + }, + { + "declaration": 7079, + "isOffset": false, + "isSlot": false, + "src": "6190:5:46", + "valueSize": 1 + }, + { + "declaration": 7110, + "isOffset": false, + "isSlot": false, + "src": "6105:4:46", + "valueSize": 1 + }, + { + "declaration": 7110, + "isOffset": false, + "isSlot": false, + "src": "6197:4:46", + "valueSize": 1 + }, + { + "declaration": 7110, + "isOffset": false, + "isSlot": false, + "src": "6317:4:46", + "valueSize": 1 + }, + { + "declaration": 7110, + "isOffset": false, + "isSlot": false, + "src": "6340:4:46", + "valueSize": 1 + }, + { + "declaration": 7110, + "isOffset": false, + "isSlot": false, + "src": "6347:4:46", + "valueSize": 1 + } + ], + "id": 7118, + "nodeType": "InlineAssembly", + "src": "5999:371:46" + }, + { + "expression": { + "id": 7123, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7119, + "name": "prod0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7079, + "src": "6436:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "|=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7122, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7120, + "name": "prod1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7085, + "src": "6445:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7121, + "name": "twos", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7110, + "src": "6453:4:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6445:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6436:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7124, + "nodeType": "ExpressionStatement", + "src": "6436:21:46" + }, + { + "assignments": [ + 7126 + ], + "declarations": [ + { + "constant": false, + "id": 7126, + "mutability": "mutable", + "name": "inverse", + "nameLocation": "6783:7:46", + "nodeType": "VariableDeclaration", + "scope": 7190, + "src": "6775:15:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7125, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6775:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7133, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "33", + "id": 7127, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6794:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7128, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "6798:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6794:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7130, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6793:17:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "^", + "rightExpression": { + "hexValue": "32", + "id": 7131, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6813:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "6793:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6775:39:46" + }, + { + "expression": { + "id": 7140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7134, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7031:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 7135, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7042:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7138, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7136, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "7046:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7137, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7060:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7046:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7042:25:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7031:36:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7141, + "nodeType": "ExpressionStatement", + "src": "7031:36:46" + }, + { + "expression": { + "id": 7148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7142, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7100:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 7143, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7111:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7144, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "7115:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7145, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7129:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7115:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7111:25:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7100:36:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7149, + "nodeType": "ExpressionStatement", + "src": "7100:36:46" + }, + { + "expression": { + "id": 7156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7150, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7170:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 7151, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7181:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7152, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "7185:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7153, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7199:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7185:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7181:25:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7170:36:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7157, + "nodeType": "ExpressionStatement", + "src": "7170:36:46" + }, + { + "expression": { + "id": 7164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7158, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7240:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 7159, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7251:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7160, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "7255:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7161, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7269:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7255:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7251:25:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7240:36:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7165, + "nodeType": "ExpressionStatement", + "src": "7240:36:46" + }, + { + "expression": { + "id": 7172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7166, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7310:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7171, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 7167, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7321:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7170, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7168, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "7325:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7169, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7339:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7325:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7321:25:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7310:36:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7173, + "nodeType": "ExpressionStatement", + "src": "7310:36:46" + }, + { + "expression": { + "id": 7180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7174, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7381:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7179, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 7175, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7392:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7176, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7073, + "src": "7396:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7177, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7410:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7396:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7392:25:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7381:36:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7181, + "nodeType": "ExpressionStatement", + "src": "7381:36:46" + }, + { + "expression": { + "id": 7186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7182, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7076, + "src": "7851:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7183, + "name": "prod0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7079, + "src": "7860:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7184, + "name": "inverse", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7126, + "src": "7868:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7860:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7851:24:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7187, + "nodeType": "ExpressionStatement", + "src": "7851:24:46" + }, + { + "expression": { + "id": 7188, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7076, + "src": "7896:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7077, + "id": 7189, + "nodeType": "Return", + "src": "7889:13:46" + } + ] + } + ] + }, + "documentation": { + "id": 7067, + "nodeType": "StructuredDocumentation", + "src": "3485:313:46", + "text": " @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license." + }, + "id": 7192, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mulDiv", + "nameLocation": "3812:6:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7074, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7069, + "mutability": "mutable", + "name": "x", + "nameLocation": "3827:1:46", + "nodeType": "VariableDeclaration", + "scope": 7192, + "src": "3819:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7068, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3819:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7071, + "mutability": "mutable", + "name": "y", + "nameLocation": "3838:1:46", + "nodeType": "VariableDeclaration", + "scope": 7192, + "src": "3830:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7070, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3830:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7073, + "mutability": "mutable", + "name": "denominator", + "nameLocation": "3849:11:46", + "nodeType": "VariableDeclaration", + "scope": 7192, + "src": "3841:19:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7072, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3841:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3818:43:46" + }, + "returnParameters": { + "id": 7077, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7076, + "mutability": "mutable", + "name": "result", + "nameLocation": "3893:6:46", + "nodeType": "VariableDeclaration", + "scope": 7192, + "src": "3885:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7075, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3885:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3884:16:46" + }, + "scope": 7858, + "src": "3803:4116:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7234, + "nodeType": "Block", + "src": "8161:192:46", + "statements": [ + { + "assignments": [ + 7208 + ], + "declarations": [ + { + "constant": false, + "id": 7208, + "mutability": "mutable", + "name": "result", + "nameLocation": "8179:6:46", + "nodeType": "VariableDeclaration", + "scope": 7234, + "src": "8171:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7207, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8171:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7214, + "initialValue": { + "arguments": [ + { + "id": 7210, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7195, + "src": "8195:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7211, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7197, + "src": "8198:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7212, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7199, + "src": "8201:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7209, + "name": "mulDiv", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 7192, + 7235 + ], + "referencedDeclaration": 7192, + "src": "8188:6:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 7213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8188:25:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8171:42:46" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7216, + "name": "rounding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7202, + "src": "8244:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + ], + "id": 7215, + "name": "unsignedRoundsUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7857, + "src": "8227:16:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", + "typeString": "function (enum Math.Rounding) pure returns (bool)" + } + }, + "id": 7217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8227:26:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7219, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7195, + "src": "8264:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7220, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7197, + "src": "8267:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7221, + "name": "denominator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7199, + "src": "8270:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7218, + "name": "mulmod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -16, + "src": "8257:6:46", + "typeDescriptions": { + "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 7222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8257:25:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7223, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8285:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8257:29:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8227:59:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7231, + "nodeType": "IfStatement", + "src": "8223:101:46", + "trueBody": { + "id": 7230, + "nodeType": "Block", + "src": "8288:36:46", + "statements": [ + { + "expression": { + "id": 7228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7226, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7208, + "src": "8302:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 7227, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8312:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "8302:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7229, + "nodeType": "ExpressionStatement", + "src": "8302:11:46" + } + ] + } + }, + { + "expression": { + "id": 7232, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7208, + "src": "8340:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7206, + "id": 7233, + "nodeType": "Return", + "src": "8333:13:46" + } + ] + }, + "documentation": { + "id": 7193, + "nodeType": "StructuredDocumentation", + "src": "7925:121:46", + "text": " @notice Calculates x * y / denominator with full precision, following the selected rounding direction." + }, + "id": 7235, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mulDiv", + "nameLocation": "8060:6:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7203, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7195, + "mutability": "mutable", + "name": "x", + "nameLocation": "8075:1:46", + "nodeType": "VariableDeclaration", + "scope": 7235, + "src": "8067:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7194, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8067:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7197, + "mutability": "mutable", + "name": "y", + "nameLocation": "8086:1:46", + "nodeType": "VariableDeclaration", + "scope": 7235, + "src": "8078:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7196, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8078:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7199, + "mutability": "mutable", + "name": "denominator", + "nameLocation": "8097:11:46", + "nodeType": "VariableDeclaration", + "scope": 7235, + "src": "8089:19:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7198, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8089:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7202, + "mutability": "mutable", + "name": "rounding", + "nameLocation": "8119:8:46", + "nodeType": "VariableDeclaration", + "scope": 7235, + "src": "8110:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + }, + "typeName": { + "id": 7201, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 7200, + "name": "Rounding", + "nameLocations": [ + "8110:8:46" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6815, + "src": "8110:8:46" + }, + "referencedDeclaration": 6815, + "src": "8110:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + }, + "visibility": "internal" + } + ], + "src": "8066:62:46" + }, + "returnParameters": { + "id": 7206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7205, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7235, + "src": "8152:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7204, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8152:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8151:9:46" + }, + "scope": 7858, + "src": "8051:302:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7346, + "nodeType": "Block", + "src": "8644:1585:46", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7243, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "8658:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 7244, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8663:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8658:6:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7249, + "nodeType": "IfStatement", + "src": "8654:45:46", + "trueBody": { + "id": 7248, + "nodeType": "Block", + "src": "8666:33:46", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 7246, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8687:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 7242, + "id": 7247, + "nodeType": "Return", + "src": "8680:8:46" + } + ] + } + }, + { + "assignments": [ + 7251 + ], + "declarations": [ + { + "constant": false, + "id": 7251, + "mutability": "mutable", + "name": "result", + "nameLocation": "9386:6:46", + "nodeType": "VariableDeclaration", + "scope": 7346, + "src": "9378:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7250, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9378:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7260, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7259, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 7252, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9395:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7257, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7254, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "9406:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7253, + "name": "log2", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 7514, + 7549 + ], + "referencedDeclaration": 7514, + "src": "9401:4:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 7255, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9401:7:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7256, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9412:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "9401:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7258, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9400:14:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9395:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9378:36:46" + }, + { + "id": 7345, + "nodeType": "UncheckedBlock", + "src": "9815:408:46", + "statements": [ + { + "expression": { + "id": 7270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7261, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9839:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7262, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9849:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7265, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7263, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "9858:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7264, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9862:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9858:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9849:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7267, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9848:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7268, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9873:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "9848:26:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9839:35:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7271, + "nodeType": "ExpressionStatement", + "src": "9839:35:46" + }, + { + "expression": { + "id": 7281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7272, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9888:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7273, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9898:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7274, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "9907:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7275, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9911:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9907:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9898:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7278, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9897:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7279, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9922:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "9897:26:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9888:35:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7282, + "nodeType": "ExpressionStatement", + "src": "9888:35:46" + }, + { + "expression": { + "id": 7292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7283, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9937:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7288, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7284, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9947:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7287, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7285, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "9956:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7286, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9960:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9956:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9947:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7289, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9946:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7290, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9971:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "9946:26:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9937:35:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7293, + "nodeType": "ExpressionStatement", + "src": "9937:35:46" + }, + { + "expression": { + "id": 7303, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7294, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9986:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7295, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "9996:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7296, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "10005:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7297, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10009:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10005:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9996:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7300, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9995:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7301, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10020:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "9995:26:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9986:35:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7304, + "nodeType": "ExpressionStatement", + "src": "9986:35:46" + }, + { + "expression": { + "id": 7314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7305, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10035:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7306, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10045:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7309, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7307, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "10054:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7308, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10058:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10054:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10045:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7311, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10044:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7312, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10069:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "10044:26:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10035:35:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7315, + "nodeType": "ExpressionStatement", + "src": "10035:35:46" + }, + { + "expression": { + "id": 7325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7316, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10084:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7317, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10094:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7320, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7318, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "10103:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7319, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10107:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10103:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10094:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7322, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10093:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7323, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10118:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "10093:26:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10084:35:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7326, + "nodeType": "ExpressionStatement", + "src": "10084:35:46" + }, + { + "expression": { + "id": 7336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7327, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10133:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7328, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10143:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7329, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "10152:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7330, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10156:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10152:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10143:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7333, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10142:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7334, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10167:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "10142:26:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10133:35:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7337, + "nodeType": "ExpressionStatement", + "src": "10133:35:46" + }, + { + "expression": { + "arguments": [ + { + "id": 7339, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10193:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7340, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7238, + "src": "10201:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7341, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7251, + "src": "10205:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10201:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7338, + "name": "min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7009, + "src": "10189:3:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10189:23:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7242, + "id": 7344, + "nodeType": "Return", + "src": "10182:30:46" + } + ] + } + ] + }, + "documentation": { + "id": 7236, + "nodeType": "StructuredDocumentation", + "src": "8359:223:46", + "text": " @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11)." + }, + "id": 7347, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sqrt", + "nameLocation": "8596:4:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7239, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7238, + "mutability": "mutable", + "name": "a", + "nameLocation": "8609:1:46", + "nodeType": "VariableDeclaration", + "scope": 7347, + "src": "8601:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7237, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8601:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8600:11:46" + }, + "returnParameters": { + "id": 7242, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7241, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7347, + "src": "8635:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7240, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8635:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8634:9:46" + }, + "scope": 7858, + "src": "8587:1642:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7381, + "nodeType": "Block", + "src": "10405:164:46", + "statements": [ + { + "id": 7380, + "nodeType": "UncheckedBlock", + "src": "10415:148:46", + "statements": [ + { + "assignments": [ + 7359 + ], + "declarations": [ + { + "constant": false, + "id": 7359, + "mutability": "mutable", + "name": "result", + "nameLocation": "10447:6:46", + "nodeType": "VariableDeclaration", + "scope": 7380, + "src": "10439:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7358, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10439:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7363, + "initialValue": { + "arguments": [ + { + "id": 7361, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7350, + "src": "10461:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7360, + "name": "sqrt", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 7347, + 7382 + ], + "referencedDeclaration": 7347, + "src": "10456:4:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 7362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10456:7:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10439:24:46" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7364, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7359, + "src": "10484:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "components": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7366, + "name": "rounding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7353, + "src": "10511:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + ], + "id": 7365, + "name": "unsignedRoundsUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7857, + "src": "10494:16:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", + "typeString": "function (enum Math.Rounding) pure returns (bool)" + } + }, + "id": 7367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10494:26:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7368, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7359, + "src": "10524:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7369, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7359, + "src": "10533:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10524:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7371, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7350, + "src": "10542:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10524:19:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "10494:49:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 7375, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10550:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 7376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "10494:57:46", + "trueExpression": { + "hexValue": "31", + "id": 7374, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10546:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "id": 7377, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10493:59:46", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "10484:68:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7357, + "id": 7379, + "nodeType": "Return", + "src": "10477:75:46" + } + ] + } + ] + }, + "documentation": { + "id": 7348, + "nodeType": "StructuredDocumentation", + "src": "10235:89:46", + "text": " @notice Calculates sqrt(a), following the selected rounding direction." + }, + "id": 7382, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sqrt", + "nameLocation": "10338:4:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7354, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7350, + "mutability": "mutable", + "name": "a", + "nameLocation": "10351:1:46", + "nodeType": "VariableDeclaration", + "scope": 7382, + "src": "10343:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7349, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10343:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7353, + "mutability": "mutable", + "name": "rounding", + "nameLocation": "10363:8:46", + "nodeType": "VariableDeclaration", + "scope": 7382, + "src": "10354:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + }, + "typeName": { + "id": 7352, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 7351, + "name": "Rounding", + "nameLocations": [ + "10354:8:46" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6815, + "src": "10354:8:46" + }, + "referencedDeclaration": 6815, + "src": "10354:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + }, + "visibility": "internal" + } + ], + "src": "10342:30:46" + }, + "returnParameters": { + "id": 7357, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7356, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7382, + "src": "10396:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7355, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10396:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10395:9:46" + }, + "scope": 7858, + "src": "10329:240:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7513, + "nodeType": "Block", + "src": "10760:922:46", + "statements": [ + { + "assignments": [ + 7391 + ], + "declarations": [ + { + "constant": false, + "id": 7391, + "mutability": "mutable", + "name": "result", + "nameLocation": "10778:6:46", + "nodeType": "VariableDeclaration", + "scope": 7513, + "src": "10770:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7390, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10770:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7393, + "initialValue": { + "hexValue": "30", + "id": 7392, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10787:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "10770:18:46" + }, + { + "id": 7510, + "nodeType": "UncheckedBlock", + "src": "10798:855:46", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7394, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "10826:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "313238", + "id": 7395, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10835:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_128_by_1", + "typeString": "int_const 128" + }, + "value": "128" + }, + "src": "10826:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7397, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10841:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "10826:16:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7408, + "nodeType": "IfStatement", + "src": "10822:99:46", + "trueBody": { + "id": 7407, + "nodeType": "Block", + "src": "10844:77:46", + "statements": [ + { + "expression": { + "id": 7401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7399, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "10862:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "313238", + "id": 7400, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10872:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_128_by_1", + "typeString": "int_const 128" + }, + "value": "128" + }, + "src": "10862:13:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7402, + "nodeType": "ExpressionStatement", + "src": "10862:13:46" + }, + { + "expression": { + "id": 7405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7403, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7391, + "src": "10893:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "313238", + "id": 7404, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10903:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_128_by_1", + "typeString": "int_const 128" + }, + "value": "128" + }, + "src": "10893:13:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7406, + "nodeType": "ExpressionStatement", + "src": "10893:13:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7409, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "10938:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3634", + "id": 7410, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10947:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "src": "10938:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7412, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10952:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "10938:15:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7423, + "nodeType": "IfStatement", + "src": "10934:96:46", + "trueBody": { + "id": 7422, + "nodeType": "Block", + "src": "10955:75:46", + "statements": [ + { + "expression": { + "id": 7416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7414, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "10973:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "3634", + "id": 7415, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10983:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "src": "10973:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7417, + "nodeType": "ExpressionStatement", + "src": "10973:12:46" + }, + { + "expression": { + "id": 7420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7418, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7391, + "src": "11003:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "3634", + "id": 7419, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11013:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "src": "11003:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7421, + "nodeType": "ExpressionStatement", + "src": "11003:12:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7428, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7424, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11047:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3332", + "id": 7425, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11056:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "11047:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7427, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11061:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11047:15:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7438, + "nodeType": "IfStatement", + "src": "11043:96:46", + "trueBody": { + "id": 7437, + "nodeType": "Block", + "src": "11064:75:46", + "statements": [ + { + "expression": { + "id": 7431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7429, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11082:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "3332", + "id": 7430, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11092:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "11082:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7432, + "nodeType": "ExpressionStatement", + "src": "11082:12:46" + }, + { + "expression": { + "id": 7435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7433, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7391, + "src": "11112:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "3332", + "id": 7434, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11122:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "11112:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7436, + "nodeType": "ExpressionStatement", + "src": "11112:12:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7439, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11156:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3136", + "id": 7440, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11165:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "11156:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11170:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11156:15:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7453, + "nodeType": "IfStatement", + "src": "11152:96:46", + "trueBody": { + "id": 7452, + "nodeType": "Block", + "src": "11173:75:46", + "statements": [ + { + "expression": { + "id": 7446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7444, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11191:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "3136", + "id": 7445, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11201:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "11191:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7447, + "nodeType": "ExpressionStatement", + "src": "11191:12:46" + }, + { + "expression": { + "id": 7450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7448, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7391, + "src": "11221:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "3136", + "id": 7449, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11231:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "11221:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7451, + "nodeType": "ExpressionStatement", + "src": "11221:12:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7454, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11265:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "38", + "id": 7455, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11274:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "11265:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7457, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11278:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11265:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7468, + "nodeType": "IfStatement", + "src": "11261:93:46", + "trueBody": { + "id": 7467, + "nodeType": "Block", + "src": "11281:73:46", + "statements": [ + { + "expression": { + "id": 7461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7459, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11299:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "38", + "id": 7460, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11309:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "11299:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7462, + "nodeType": "ExpressionStatement", + "src": "11299:11:46" + }, + { + "expression": { + "id": 7465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7463, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7391, + "src": "11328:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "38", + "id": 7464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11338:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "11328:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7466, + "nodeType": "ExpressionStatement", + "src": "11328:11:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7469, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11371:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "34", + "id": 7470, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11380:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "11371:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7472, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11384:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11371:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7483, + "nodeType": "IfStatement", + "src": "11367:93:46", + "trueBody": { + "id": 7482, + "nodeType": "Block", + "src": "11387:73:46", + "statements": [ + { + "expression": { + "id": 7476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7474, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11405:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "34", + "id": 7475, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11415:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "11405:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7477, + "nodeType": "ExpressionStatement", + "src": "11405:11:46" + }, + { + "expression": { + "id": 7480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7478, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7391, + "src": "11434:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "34", + "id": 7479, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11444:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "11434:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7481, + "nodeType": "ExpressionStatement", + "src": "11434:11:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7484, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11477:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "32", + "id": 7485, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11486:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "11477:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7487, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11490:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11477:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7498, + "nodeType": "IfStatement", + "src": "11473:93:46", + "trueBody": { + "id": 7497, + "nodeType": "Block", + "src": "11493:73:46", + "statements": [ + { + "expression": { + "id": 7491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7489, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11511:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "32", + "id": 7490, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11521:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "11511:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7492, + "nodeType": "ExpressionStatement", + "src": "11511:11:46" + }, + { + "expression": { + "id": 7495, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7493, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7391, + "src": "11540:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "32", + "id": 7494, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11550:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "11540:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7496, + "nodeType": "ExpressionStatement", + "src": "11540:11:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7499, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7385, + "src": "11583:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7500, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11592:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "11583:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7502, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11596:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11583:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7509, + "nodeType": "IfStatement", + "src": "11579:64:46", + "trueBody": { + "id": 7508, + "nodeType": "Block", + "src": "11599:44:46", + "statements": [ + { + "expression": { + "id": 7506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7504, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7391, + "src": "11617:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 7505, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11627:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "11617:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7507, + "nodeType": "ExpressionStatement", + "src": "11617:11:46" + } + ] + } + } + ] + }, + { + "expression": { + "id": 7511, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7391, + "src": "11669:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7389, + "id": 7512, + "nodeType": "Return", + "src": "11662:13:46" + } + ] + }, + "documentation": { + "id": 7383, + "nodeType": "StructuredDocumentation", + "src": "10575:119:46", + "text": " @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0." + }, + "id": 7514, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "log2", + "nameLocation": "10708:4:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7386, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7385, + "mutability": "mutable", + "name": "value", + "nameLocation": "10721:5:46", + "nodeType": "VariableDeclaration", + "scope": 7514, + "src": "10713:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7384, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10713:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10712:15:46" + }, + "returnParameters": { + "id": 7389, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7388, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7514, + "src": "10751:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7387, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10751:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10750:9:46" + }, + "scope": 7858, + "src": "10699:983:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7548, + "nodeType": "Block", + "src": "11915:168:46", + "statements": [ + { + "id": 7547, + "nodeType": "UncheckedBlock", + "src": "11925:152:46", + "statements": [ + { + "assignments": [ + 7526 + ], + "declarations": [ + { + "constant": false, + "id": 7526, + "mutability": "mutable", + "name": "result", + "nameLocation": "11957:6:46", + "nodeType": "VariableDeclaration", + "scope": 7547, + "src": "11949:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7525, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11949:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7530, + "initialValue": { + "arguments": [ + { + "id": 7528, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7517, + "src": "11971:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7527, + "name": "log2", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 7514, + 7549 + ], + "referencedDeclaration": 7514, + "src": "11966:4:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 7529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11966:11:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11949:28:46" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7531, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7526, + "src": "11998:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "components": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7533, + "name": "rounding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7520, + "src": "12025:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + ], + "id": 7532, + "name": "unsignedRoundsUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7857, + "src": "12008:16:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", + "typeString": "function (enum Math.Rounding) pure returns (bool)" + } + }, + "id": 7534, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12008:26:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 7535, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12038:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 7536, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7526, + "src": "12043:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12038:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7538, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7517, + "src": "12052:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12038:19:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "12008:49:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 7542, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12064:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 7543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "12008:57:46", + "trueExpression": { + "hexValue": "31", + "id": 7541, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12060:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "id": 7544, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12007:59:46", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "11998:68:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7524, + "id": 7546, + "nodeType": "Return", + "src": "11991:75:46" + } + ] + } + ] + }, + "documentation": { + "id": 7515, + "nodeType": "StructuredDocumentation", + "src": "11688:142:46", + "text": " @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0." + }, + "id": 7549, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "log2", + "nameLocation": "11844:4:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7521, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7517, + "mutability": "mutable", + "name": "value", + "nameLocation": "11857:5:46", + "nodeType": "VariableDeclaration", + "scope": 7549, + "src": "11849:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7516, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11849:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7520, + "mutability": "mutable", + "name": "rounding", + "nameLocation": "11873:8:46", + "nodeType": "VariableDeclaration", + "scope": 7549, + "src": "11864:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + }, + "typeName": { + "id": 7519, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 7518, + "name": "Rounding", + "nameLocations": [ + "11864:8:46" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6815, + "src": "11864:8:46" + }, + "referencedDeclaration": 6815, + "src": "11864:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + }, + "visibility": "internal" + } + ], + "src": "11848:34:46" + }, + "returnParameters": { + "id": 7524, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7523, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7549, + "src": "11906:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7522, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11906:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11905:9:46" + }, + "scope": 7858, + "src": "11835:248:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7677, + "nodeType": "Block", + "src": "12276:854:46", + "statements": [ + { + "assignments": [ + 7558 + ], + "declarations": [ + { + "constant": false, + "id": 7558, + "mutability": "mutable", + "name": "result", + "nameLocation": "12294:6:46", + "nodeType": "VariableDeclaration", + "scope": 7677, + "src": "12286:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7557, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12286:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7560, + "initialValue": { + "hexValue": "30", + "id": 7559, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12303:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "12286:18:46" + }, + { + "id": 7674, + "nodeType": "UncheckedBlock", + "src": "12314:787:46", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7565, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7561, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12342:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1", + "typeString": "int_const 1000...(57 digits omitted)...0000" + }, + "id": 7564, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7562, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12351:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "3634", + "id": 7563, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12357:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "src": "12351:8:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1", + "typeString": "int_const 1000...(57 digits omitted)...0000" + } + }, + "src": "12342:17:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7577, + "nodeType": "IfStatement", + "src": "12338:103:46", + "trueBody": { + "id": 7576, + "nodeType": "Block", + "src": "12361:80:46", + "statements": [ + { + "expression": { + "id": 7570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7566, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12379:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1", + "typeString": "int_const 1000...(57 digits omitted)...0000" + }, + "id": 7569, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7567, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12388:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "3634", + "id": 7568, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12394:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "src": "12388:8:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1", + "typeString": "int_const 1000...(57 digits omitted)...0000" + } + }, + "src": "12379:17:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7571, + "nodeType": "ExpressionStatement", + "src": "12379:17:46" + }, + { + "expression": { + "id": 7574, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7572, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "12414:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "3634", + "id": 7573, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12424:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "src": "12414:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7575, + "nodeType": "ExpressionStatement", + "src": "12414:12:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7578, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12458:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1", + "typeString": "int_const 1000...(25 digits omitted)...0000" + }, + "id": 7581, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7579, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12467:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "3332", + "id": 7580, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12473:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "12467:8:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1", + "typeString": "int_const 1000...(25 digits omitted)...0000" + } + }, + "src": "12458:17:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7594, + "nodeType": "IfStatement", + "src": "12454:103:46", + "trueBody": { + "id": 7593, + "nodeType": "Block", + "src": "12477:80:46", + "statements": [ + { + "expression": { + "id": 7587, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7583, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12495:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1", + "typeString": "int_const 1000...(25 digits omitted)...0000" + }, + "id": 7586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7584, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12504:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "3332", + "id": 7585, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12510:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "12504:8:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1", + "typeString": "int_const 1000...(25 digits omitted)...0000" + } + }, + "src": "12495:17:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7588, + "nodeType": "ExpressionStatement", + "src": "12495:17:46" + }, + { + "expression": { + "id": 7591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7589, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "12530:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "3332", + "id": 7590, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12540:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "12530:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7592, + "nodeType": "ExpressionStatement", + "src": "12530:12:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7595, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12574:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_10000000000000000_by_1", + "typeString": "int_const 10000000000000000" + }, + "id": 7598, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7596, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12583:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "3136", + "id": 7597, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12589:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "12583:8:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000000000000000_by_1", + "typeString": "int_const 10000000000000000" + } + }, + "src": "12574:17:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7611, + "nodeType": "IfStatement", + "src": "12570:103:46", + "trueBody": { + "id": 7610, + "nodeType": "Block", + "src": "12593:80:46", + "statements": [ + { + "expression": { + "id": 7604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7600, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12611:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_rational_10000000000000000_by_1", + "typeString": "int_const 10000000000000000" + }, + "id": 7603, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7601, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12620:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "3136", + "id": 7602, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12626:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "12620:8:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000000000000000_by_1", + "typeString": "int_const 10000000000000000" + } + }, + "src": "12611:17:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7605, + "nodeType": "ExpressionStatement", + "src": "12611:17:46" + }, + { + "expression": { + "id": 7608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7606, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "12646:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "3136", + "id": 7607, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12656:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "12646:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7609, + "nodeType": "ExpressionStatement", + "src": "12646:12:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7612, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12690:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_100000000_by_1", + "typeString": "int_const 100000000" + }, + "id": 7615, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12699:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "38", + "id": 7614, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12705:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "12699:7:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000_by_1", + "typeString": "int_const 100000000" + } + }, + "src": "12690:16:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7628, + "nodeType": "IfStatement", + "src": "12686:100:46", + "trueBody": { + "id": 7627, + "nodeType": "Block", + "src": "12708:78:46", + "statements": [ + { + "expression": { + "id": 7621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7617, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12726:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_rational_100000000_by_1", + "typeString": "int_const 100000000" + }, + "id": 7620, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7618, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12735:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "38", + "id": 7619, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12741:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "12735:7:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000_by_1", + "typeString": "int_const 100000000" + } + }, + "src": "12726:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7622, + "nodeType": "ExpressionStatement", + "src": "12726:16:46" + }, + { + "expression": { + "id": 7625, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7623, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "12760:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "38", + "id": 7624, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12770:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "12760:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7626, + "nodeType": "ExpressionStatement", + "src": "12760:11:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7633, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7629, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12803:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_10000_by_1", + "typeString": "int_const 10000" + }, + "id": 7632, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7630, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12812:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "34", + "id": 7631, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12818:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "12812:7:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000_by_1", + "typeString": "int_const 10000" + } + }, + "src": "12803:16:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7645, + "nodeType": "IfStatement", + "src": "12799:100:46", + "trueBody": { + "id": 7644, + "nodeType": "Block", + "src": "12821:78:46", + "statements": [ + { + "expression": { + "id": 7638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7634, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12839:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_rational_10000_by_1", + "typeString": "int_const 10000" + }, + "id": 7637, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7635, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12848:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "34", + "id": 7636, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12854:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "12848:7:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000_by_1", + "typeString": "int_const 10000" + } + }, + "src": "12839:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7639, + "nodeType": "ExpressionStatement", + "src": "12839:16:46" + }, + { + "expression": { + "id": 7642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7640, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "12873:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "34", + "id": 7641, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12883:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "12873:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7643, + "nodeType": "ExpressionStatement", + "src": "12873:11:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7650, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7646, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12916:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + }, + "id": 7649, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7647, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12925:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "32", + "id": 7648, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12931:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "12925:7:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + } + }, + "src": "12916:16:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7662, + "nodeType": "IfStatement", + "src": "12912:100:46", + "trueBody": { + "id": 7661, + "nodeType": "Block", + "src": "12934:78:46", + "statements": [ + { + "expression": { + "id": 7655, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7651, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "12952:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + }, + "id": 7654, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7652, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12961:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "32", + "id": 7653, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12967:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "12961:7:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + } + }, + "src": "12952:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7656, + "nodeType": "ExpressionStatement", + "src": "12952:16:46" + }, + { + "expression": { + "id": 7659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7657, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "12986:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "32", + "id": 7658, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12996:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "12986:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7660, + "nodeType": "ExpressionStatement", + "src": "12986:11:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7667, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7663, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7552, + "src": "13029:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "id": 7666, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7664, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13038:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "31", + "id": 7665, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13044:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "13038:7:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + } + }, + "src": "13029:16:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7673, + "nodeType": "IfStatement", + "src": "13025:66:46", + "trueBody": { + "id": 7672, + "nodeType": "Block", + "src": "13047:44:46", + "statements": [ + { + "expression": { + "id": 7670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7668, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "13065:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 7669, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13075:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "13065:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7671, + "nodeType": "ExpressionStatement", + "src": "13065:11:46" + } + ] + } + } + ] + }, + { + "expression": { + "id": 7675, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "13117:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7556, + "id": 7676, + "nodeType": "Return", + "src": "13110:13:46" + } + ] + }, + "documentation": { + "id": 7550, + "nodeType": "StructuredDocumentation", + "src": "12089:120:46", + "text": " @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0." + }, + "id": 7678, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "log10", + "nameLocation": "12223:5:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7553, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7552, + "mutability": "mutable", + "name": "value", + "nameLocation": "12237:5:46", + "nodeType": "VariableDeclaration", + "scope": 7678, + "src": "12229:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7551, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12229:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12228:15:46" + }, + "returnParameters": { + "id": 7556, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7555, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7678, + "src": "12267:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7554, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12267:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12266:9:46" + }, + "scope": 7858, + "src": "12214:916:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7712, + "nodeType": "Block", + "src": "13365:170:46", + "statements": [ + { + "id": 7711, + "nodeType": "UncheckedBlock", + "src": "13375:154:46", + "statements": [ + { + "assignments": [ + 7690 + ], + "declarations": [ + { + "constant": false, + "id": 7690, + "mutability": "mutable", + "name": "result", + "nameLocation": "13407:6:46", + "nodeType": "VariableDeclaration", + "scope": 7711, + "src": "13399:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7689, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13399:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7694, + "initialValue": { + "arguments": [ + { + "id": 7692, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7681, + "src": "13422:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7691, + "name": "log10", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 7678, + 7713 + ], + "referencedDeclaration": 7678, + "src": "13416:5:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 7693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13416:12:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13399:29:46" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7695, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7690, + "src": "13449:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "components": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7704, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7697, + "name": "rounding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7684, + "src": "13476:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + ], + "id": 7696, + "name": "unsignedRoundsUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7857, + "src": "13459:16:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", + "typeString": "function (enum Math.Rounding) pure returns (bool)" + } + }, + "id": 7698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13459:26:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 7699, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13489:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "id": 7700, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7690, + "src": "13495:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13489:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7702, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7681, + "src": "13504:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13489:20:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "13459:50:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 7706, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13516:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 7707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "13459:58:46", + "trueExpression": { + "hexValue": "31", + "id": 7705, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13512:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "id": 7708, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "13458:60:46", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "13449:69:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7688, + "id": 7710, + "nodeType": "Return", + "src": "13442:76:46" + } + ] + } + ] + }, + "documentation": { + "id": 7679, + "nodeType": "StructuredDocumentation", + "src": "13136:143:46", + "text": " @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0." + }, + "id": 7713, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "log10", + "nameLocation": "13293:5:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7685, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7681, + "mutability": "mutable", + "name": "value", + "nameLocation": "13307:5:46", + "nodeType": "VariableDeclaration", + "scope": 7713, + "src": "13299:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7680, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13299:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7684, + "mutability": "mutable", + "name": "rounding", + "nameLocation": "13323:8:46", + "nodeType": "VariableDeclaration", + "scope": 7713, + "src": "13314:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + }, + "typeName": { + "id": 7683, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 7682, + "name": "Rounding", + "nameLocations": [ + "13314:8:46" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6815, + "src": "13314:8:46" + }, + "referencedDeclaration": 6815, + "src": "13314:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + }, + "visibility": "internal" + } + ], + "src": "13298:34:46" + }, + "returnParameters": { + "id": 7688, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7687, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7713, + "src": "13356:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7686, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13356:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13355:9:46" + }, + "scope": 7858, + "src": "13284:251:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7799, + "nodeType": "Block", + "src": "13855:600:46", + "statements": [ + { + "assignments": [ + 7722 + ], + "declarations": [ + { + "constant": false, + "id": 7722, + "mutability": "mutable", + "name": "result", + "nameLocation": "13873:6:46", + "nodeType": "VariableDeclaration", + "scope": 7799, + "src": "13865:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7721, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13865:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7724, + "initialValue": { + "hexValue": "30", + "id": 7723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13882:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13865:18:46" + }, + { + "id": 7796, + "nodeType": "UncheckedBlock", + "src": "13893:533:46", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7725, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7716, + "src": "13921:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "313238", + "id": 7726, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13930:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_128_by_1", + "typeString": "int_const 128" + }, + "value": "128" + }, + "src": "13921:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7728, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13936:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "13921:16:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7739, + "nodeType": "IfStatement", + "src": "13917:98:46", + "trueBody": { + "id": 7738, + "nodeType": "Block", + "src": "13939:76:46", + "statements": [ + { + "expression": { + "id": 7732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7730, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7716, + "src": "13957:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "313238", + "id": 7731, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13967:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_128_by_1", + "typeString": "int_const 128" + }, + "value": "128" + }, + "src": "13957:13:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7733, + "nodeType": "ExpressionStatement", + "src": "13957:13:46" + }, + { + "expression": { + "id": 7736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7734, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7722, + "src": "13988:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "3136", + "id": 7735, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13998:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "13988:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7737, + "nodeType": "ExpressionStatement", + "src": "13988:12:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7744, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7740, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7716, + "src": "14032:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3634", + "id": 7741, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14041:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "src": "14032:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7743, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14046:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "14032:15:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7754, + "nodeType": "IfStatement", + "src": "14028:95:46", + "trueBody": { + "id": 7753, + "nodeType": "Block", + "src": "14049:74:46", + "statements": [ + { + "expression": { + "id": 7747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7745, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7716, + "src": "14067:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "3634", + "id": 7746, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14077:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "src": "14067:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7748, + "nodeType": "ExpressionStatement", + "src": "14067:12:46" + }, + { + "expression": { + "id": 7751, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7749, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7722, + "src": "14097:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "38", + "id": 7750, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14107:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "14097:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7752, + "nodeType": "ExpressionStatement", + "src": "14097:11:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7759, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7755, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7716, + "src": "14140:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3332", + "id": 7756, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14149:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "14140:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7758, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14154:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "14140:15:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7769, + "nodeType": "IfStatement", + "src": "14136:95:46", + "trueBody": { + "id": 7768, + "nodeType": "Block", + "src": "14157:74:46", + "statements": [ + { + "expression": { + "id": 7762, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7760, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7716, + "src": "14175:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "3332", + "id": 7761, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14185:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "14175:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7763, + "nodeType": "ExpressionStatement", + "src": "14175:12:46" + }, + { + "expression": { + "id": 7766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7764, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7722, + "src": "14205:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "34", + "id": 7765, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14215:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "14205:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7767, + "nodeType": "ExpressionStatement", + "src": "14205:11:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7774, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7772, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7770, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7716, + "src": "14248:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3136", + "id": 7771, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14257:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "14248:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7773, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14262:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "14248:15:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7784, + "nodeType": "IfStatement", + "src": "14244:95:46", + "trueBody": { + "id": 7783, + "nodeType": "Block", + "src": "14265:74:46", + "statements": [ + { + "expression": { + "id": 7777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7775, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7716, + "src": "14283:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": ">>=", + "rightHandSide": { + "hexValue": "3136", + "id": 7776, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14293:2:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "14283:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7778, + "nodeType": "ExpressionStatement", + "src": "14283:12:46" + }, + { + "expression": { + "id": 7781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7779, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7722, + "src": "14313:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "32", + "id": 7780, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14323:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "14313:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7782, + "nodeType": "ExpressionStatement", + "src": "14313:11:46" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7789, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7785, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7716, + "src": "14356:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "38", + "id": 7786, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14365:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "14356:10:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7788, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14369:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "14356:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7795, + "nodeType": "IfStatement", + "src": "14352:64:46", + "trueBody": { + "id": 7794, + "nodeType": "Block", + "src": "14372:44:46", + "statements": [ + { + "expression": { + "id": 7792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7790, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7722, + "src": "14390:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 7791, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14400:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "14390:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7793, + "nodeType": "ExpressionStatement", + "src": "14390:11:46" + } + ] + } + } + ] + }, + { + "expression": { + "id": 7797, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7722, + "src": "14442:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7720, + "id": 7798, + "nodeType": "Return", + "src": "14435:13:46" + } + ] + }, + "documentation": { + "id": 7714, + "nodeType": "StructuredDocumentation", + "src": "13541:246:46", + "text": " @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string." + }, + "id": 7800, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "log256", + "nameLocation": "13801:6:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7717, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7716, + "mutability": "mutable", + "name": "value", + "nameLocation": "13816:5:46", + "nodeType": "VariableDeclaration", + "scope": 7800, + "src": "13808:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7715, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13808:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13807:15:46" + }, + "returnParameters": { + "id": 7720, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7719, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7800, + "src": "13846:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7718, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13846:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13845:9:46" + }, + "scope": 7858, + "src": "13792:663:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7837, + "nodeType": "Block", + "src": "14692:177:46", + "statements": [ + { + "id": 7836, + "nodeType": "UncheckedBlock", + "src": "14702:161:46", + "statements": [ + { + "assignments": [ + 7812 + ], + "declarations": [ + { + "constant": false, + "id": 7812, + "mutability": "mutable", + "name": "result", + "nameLocation": "14734:6:46", + "nodeType": "VariableDeclaration", + "scope": 7836, + "src": "14726:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7811, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14726:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7816, + "initialValue": { + "arguments": [ + { + "id": 7814, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7803, + "src": "14750:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7813, + "name": "log256", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 7800, + 7838 + ], + "referencedDeclaration": 7800, + "src": "14743:6:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 7815, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14743:13:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14726:30:46" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7834, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7817, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7812, + "src": "14777:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "components": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7819, + "name": "rounding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7806, + "src": "14804:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + ], + "id": 7818, + "name": "unsignedRoundsUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7857, + "src": "14787:16:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", + "typeString": "function (enum Math.Rounding) pure returns (bool)" + } + }, + "id": 7820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14787:26:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7826, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 7821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14817:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7824, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7822, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7812, + "src": "14823:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "hexValue": "33", + "id": 7823, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14833:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "14823:11:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7825, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14822:13:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14817:18:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7827, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7803, + "src": "14838:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14817:26:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "14787:56:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 7831, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14850:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 7832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "14787:64:46", + "trueExpression": { + "hexValue": "31", + "id": 7830, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14846:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "id": 7833, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14786:66:46", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "14777:75:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7810, + "id": 7835, + "nodeType": "Return", + "src": "14770:82:46" + } + ] + } + ] + }, + "documentation": { + "id": 7801, + "nodeType": "StructuredDocumentation", + "src": "14461:144:46", + "text": " @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0." + }, + "id": 7838, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "log256", + "nameLocation": "14619:6:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7807, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7803, + "mutability": "mutable", + "name": "value", + "nameLocation": "14634:5:46", + "nodeType": "VariableDeclaration", + "scope": 7838, + "src": "14626:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7802, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14626:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7806, + "mutability": "mutable", + "name": "rounding", + "nameLocation": "14650:8:46", + "nodeType": "VariableDeclaration", + "scope": 7838, + "src": "14641:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + }, + "typeName": { + "id": 7805, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 7804, + "name": "Rounding", + "nameLocations": [ + "14641:8:46" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6815, + "src": "14641:8:46" + }, + "referencedDeclaration": 6815, + "src": "14641:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + }, + "visibility": "internal" + } + ], + "src": "14625:34:46" + }, + "returnParameters": { + "id": 7810, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7809, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7838, + "src": "14683:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7808, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14683:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "14682:9:46" + }, + "scope": 7858, + "src": "14610:259:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7856, + "nodeType": "Block", + "src": "15067:48:46", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "id": 7854, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "id": 7852, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7849, + "name": "rounding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7842, + "src": "15090:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + ], + "id": 7848, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15084:5:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + }, + "typeName": { + "id": 7847, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "15084:5:46", + "typeDescriptions": {} + } + }, + "id": 7850, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15084:15:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "BinaryOperation", + "operator": "%", + "rightExpression": { + "hexValue": "32", + "id": 7851, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15102:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "15084:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "31", + "id": 7853, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15107:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "15084:24:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 7846, + "id": 7855, + "nodeType": "Return", + "src": "15077:31:46" + } + ] + }, + "documentation": { + "id": 7839, + "nodeType": "StructuredDocumentation", + "src": "14875:113:46", + "text": " @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers." + }, + "id": 7857, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "unsignedRoundsUp", + "nameLocation": "15002:16:46", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7843, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7842, + "mutability": "mutable", + "name": "rounding", + "nameLocation": "15028:8:46", + "nodeType": "VariableDeclaration", + "scope": 7857, + "src": "15019:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + }, + "typeName": { + "id": 7841, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 7840, + "name": "Rounding", + "nameLocations": [ + "15019:8:46" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 6815, + "src": "15019:8:46" + }, + "referencedDeclaration": 6815, + "src": "15019:8:46", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Rounding_$6815", + "typeString": "enum Math.Rounding" + } + }, + "visibility": "internal" + } + ], + "src": "15018:19:46" + }, + "returnParameters": { + "id": 7846, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7845, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7857, + "src": "15061:4:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 7844, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15061:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "15060:6:46" + }, + "scope": 7858, + "src": "14993:122:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 7859, + "src": "203:14914:46", + "usedErrors": [ + 6810 + ], + "usedEvents": [] + } + ], + "src": "103:15015:46" + }, + "id": 46 + }, + "@openzeppelin/contracts/utils/math/SignedMath.sol": { + "ast": { + "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol", + "exportedSymbols": { + "SignedMath": [ + 7963 + ] + }, + "id": 7964, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 7860, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "109:24:47" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "SignedMath", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 7861, + "nodeType": "StructuredDocumentation", + "src": "135:80:47", + "text": " @dev Standard signed math utilities missing in the Solidity language." + }, + "fullyImplemented": true, + "id": 7963, + "linearizedBaseContracts": [ + 7963 + ], + "name": "SignedMath", + "nameLocation": "224:10:47", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 7878, + "nodeType": "Block", + "src": "376:37:47", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7873, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7871, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7864, + "src": "393:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 7872, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7866, + "src": "397:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "393:5:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 7875, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7866, + "src": "405:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7876, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "393:13:47", + "trueExpression": { + "id": 7874, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7864, + "src": "401:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 7870, + "id": 7877, + "nodeType": "Return", + "src": "386:20:47" + } + ] + }, + "documentation": { + "id": 7862, + "nodeType": "StructuredDocumentation", + "src": "241:66:47", + "text": " @dev Returns the largest of two signed numbers." + }, + "id": 7879, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "max", + "nameLocation": "321:3:47", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7867, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7864, + "mutability": "mutable", + "name": "a", + "nameLocation": "332:1:47", + "nodeType": "VariableDeclaration", + "scope": 7879, + "src": "325:8:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7863, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "325:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7866, + "mutability": "mutable", + "name": "b", + "nameLocation": "342:1:47", + "nodeType": "VariableDeclaration", + "scope": 7879, + "src": "335:8:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7865, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "335:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "324:20:47" + }, + "returnParameters": { + "id": 7870, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7869, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7879, + "src": "368:6:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7868, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "368:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "367:8:47" + }, + "scope": 7963, + "src": "312:101:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7896, + "nodeType": "Block", + "src": "555:37:47", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7891, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7889, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7882, + "src": "572:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7890, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7884, + "src": "576:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "572:5:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 7893, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7884, + "src": "584:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "572:13:47", + "trueExpression": { + "id": 7892, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7882, + "src": "580:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 7888, + "id": 7895, + "nodeType": "Return", + "src": "565:20:47" + } + ] + }, + "documentation": { + "id": 7880, + "nodeType": "StructuredDocumentation", + "src": "419:67:47", + "text": " @dev Returns the smallest of two signed numbers." + }, + "id": 7897, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "min", + "nameLocation": "500:3:47", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7885, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7882, + "mutability": "mutable", + "name": "a", + "nameLocation": "511:1:47", + "nodeType": "VariableDeclaration", + "scope": 7897, + "src": "504:8:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7881, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "504:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7884, + "mutability": "mutable", + "name": "b", + "nameLocation": "521:1:47", + "nodeType": "VariableDeclaration", + "scope": 7897, + "src": "514:8:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7883, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "514:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "503:20:47" + }, + "returnParameters": { + "id": 7888, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7887, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7897, + "src": "547:6:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7886, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "547:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "546:8:47" + }, + "scope": 7963, + "src": "491:101:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7940, + "nodeType": "Block", + "src": "797:162:47", + "statements": [ + { + "assignments": [ + 7908 + ], + "declarations": [ + { + "constant": false, + "id": 7908, + "mutability": "mutable", + "name": "x", + "nameLocation": "866:1:47", + "nodeType": "VariableDeclaration", + "scope": 7940, + "src": "859:8:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7907, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "859:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7921, + "initialValue": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7911, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7909, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7900, + "src": "871:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 7910, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7902, + "src": "875:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "871:5:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7912, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "870:7:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7915, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7913, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7900, + "src": "882:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "^", + "rightExpression": { + "id": 7914, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7902, + "src": "886:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "882:5:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7916, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "881:7:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "31", + "id": 7917, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "892:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "881:12:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7919, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "880:14:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "870:24:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "859:35:47" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7938, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7922, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7908, + "src": "911:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7927, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7908, + "src": "931:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7926, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "923:7:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 7925, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "923:7:47", + "typeDescriptions": {} + } + }, + "id": 7928, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "923:10:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "323535", + "id": 7929, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "937:3:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "src": "923:17:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7924, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "916:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 7923, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "916:6:47", + "typeDescriptions": {} + } + }, + "id": 7931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "916:25:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7934, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7932, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7900, + "src": "945:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "^", + "rightExpression": { + "id": 7933, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7902, + "src": "949:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "945:5:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7935, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "944:7:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "916:35:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7937, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "915:37:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "911:41:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 7906, + "id": 7939, + "nodeType": "Return", + "src": "904:48:47" + } + ] + }, + "documentation": { + "id": 7898, + "nodeType": "StructuredDocumentation", + "src": "598:126:47", + "text": " @dev Returns the average of two signed numbers without overflow.\n The result is rounded towards zero." + }, + "id": 7941, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "average", + "nameLocation": "738:7:47", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7903, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7900, + "mutability": "mutable", + "name": "a", + "nameLocation": "753:1:47", + "nodeType": "VariableDeclaration", + "scope": 7941, + "src": "746:8:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7899, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "746:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7902, + "mutability": "mutable", + "name": "b", + "nameLocation": "763:1:47", + "nodeType": "VariableDeclaration", + "scope": 7941, + "src": "756:8:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7901, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "756:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "745:20:47" + }, + "returnParameters": { + "id": 7906, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7905, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7941, + "src": "789:6:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7904, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "789:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "788:8:47" + }, + "scope": 7963, + "src": "729:230:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7961, + "nodeType": "Block", + "src": "1103:158:47", + "statements": [ + { + "id": 7960, + "nodeType": "UncheckedBlock", + "src": "1113:142:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7953, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7951, + "name": "n", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7944, + "src": "1228:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "30", + "id": 7952, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1233:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1228:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 7956, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "1241:2:47", + "subExpression": { + "id": 7955, + "name": "n", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7944, + "src": "1242:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1228:15:47", + "trueExpression": { + "id": 7954, + "name": "n", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7944, + "src": "1237:1:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7950, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1220:7:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 7949, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1220:7:47", + "typeDescriptions": {} + } + }, + "id": 7958, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1220:24:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7948, + "id": 7959, + "nodeType": "Return", + "src": "1213:31:47" + } + ] + } + ] + }, + "documentation": { + "id": 7942, + "nodeType": "StructuredDocumentation", + "src": "965:78:47", + "text": " @dev Returns the absolute unsigned value of a signed value." + }, + "id": 7962, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "abs", + "nameLocation": "1057:3:47", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7945, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7944, + "mutability": "mutable", + "name": "n", + "nameLocation": "1068:1:47", + "nodeType": "VariableDeclaration", + "scope": 7962, + "src": "1061:8:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7943, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1061:6:47", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "1060:10:47" + }, + "returnParameters": { + "id": 7948, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7947, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 7962, + "src": "1094:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7946, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1094:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1093:9:47" + }, + "scope": 7963, + "src": "1048:213:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 7964, + "src": "216:1047:47", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "109:1155:47" + }, + "id": 47 + }, + "contracts/DisputeManager.sol": { + "ast": { + "absolutePath": "contracts/DisputeManager.sol", + "exportedSymbols": { + "Allocation": [ + 11674 + ], + "Attestation": [ + 11920 + ], + "AttestationManager": [ + 13226 + ], + "DisputeManager": [ + 9438 + ], + "DisputeManagerV1Storage": [ + 9470 + ], + "GraphDirectory": [ + 4653 + ], + "IDisputeManager": [ + 11057 + ], + "IGraphToken": [ + 518 + ], + "IHorizonStaking": [ + 2235 + ], + "ISubgraphService": [ + 11280 + ], + "Initializable": [ + 5102 + ], + "Math": [ + 7858 + ], + "MathUtils": [ + 4168 + ], + "OwnableUpgradeable": [ + 4848 + ], + "PPMMath": [ + 4262 + ], + "TokenUtils": [ + 600 + ] + }, + "id": 9439, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 7965, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:48" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "file": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "id": 7967, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 519, + "src": "70:87:48", + "symbolAliases": [ + { + "foreign": { + "id": 7966, + "name": "IGraphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 518, + "src": "79:11:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", + "file": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", + "id": 7969, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 2236, + "src": "158:98:48", + "symbolAliases": [ + { + "foreign": { + "id": 7968, + "name": "IHorizonStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2235, + "src": "167:15:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/interfaces/IDisputeManager.sol", + "file": "./interfaces/IDisputeManager.sol", + "id": 7971, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 11058, + "src": "257:67:48", + "symbolAliases": [ + { + "foreign": { + "id": 7970, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "266:15:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/interfaces/ISubgraphService.sol", + "file": "./interfaces/ISubgraphService.sol", + "id": 7973, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 11281, + "src": "325:69:48", + "symbolAliases": [ + { + "foreign": { + "id": 7972, + "name": "ISubgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11280, + "src": "334:16:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol", + "file": "@openzeppelin/contracts/utils/math/Math.sol", + "id": 7975, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 7859, + "src": "396:67:48", + "symbolAliases": [ + { + "foreign": { + "id": 7974, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7858, + "src": "405:4:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", + "file": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", + "id": 7977, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 601, + "src": "464:85:48", + "symbolAliases": [ + { + "foreign": { + "id": 7976, + "name": "TokenUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 600, + "src": "473:10:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", + "file": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", + "id": 7979, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 4263, + "src": "550:81:48", + "symbolAliases": [ + { + "foreign": { + "id": 7978, + "name": "PPMMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4262, + "src": "559:7:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/MathUtils.sol", + "file": "@graphprotocol/horizon/contracts/libraries/MathUtils.sol", + "id": 7981, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 4169, + "src": "632:85:48", + "symbolAliases": [ + { + "foreign": { + "id": 7980, + "name": "MathUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4168, + "src": "641:9:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/Allocation.sol", + "file": "./libraries/Allocation.sol", + "id": 7983, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 11675, + "src": "718:56:48", + "symbolAliases": [ + { + "foreign": { + "id": 7982, + "name": "Allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11674, + "src": "727:10:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/Attestation.sol", + "file": "./libraries/Attestation.sol", + "id": 7985, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 11921, + "src": "775:58:48", + "symbolAliases": [ + { + "foreign": { + "id": 7984, + "name": "Attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11920, + "src": "784:11:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "id": 7987, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 4849, + "src": "835:103:48", + "symbolAliases": [ + { + "foreign": { + "id": 7986, + "name": "OwnableUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4848, + "src": "844:18:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "id": 7989, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 5103, + "src": "939:98:48", + "symbolAliases": [ + { + "foreign": { + "id": 7988, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "948:13:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", + "file": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", + "id": 7991, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 4654, + "src": "1038:95:48", + "symbolAliases": [ + { + "foreign": { + "id": 7990, + "name": "GraphDirectory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4653, + "src": "1047:14:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/DisputeManagerStorage.sol", + "file": "./DisputeManagerStorage.sol", + "id": 7993, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 9471, + "src": "1134:70:48", + "symbolAliases": [ + { + "foreign": { + "id": 7992, + "name": "DisputeManagerV1Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9470, + "src": "1143:23:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/utilities/AttestationManager.sol", + "file": "./utilities/AttestationManager.sol", + "id": 7995, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9439, + "sourceUnit": 13227, + "src": "1205:72:48", + "symbolAliases": [ + { + "foreign": { + "id": 7994, + "name": "AttestationManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13226, + "src": "1214:18:48", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 7997, + "name": "Initializable", + "nameLocations": [ + "2460:13:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5102, + "src": "2460:13:48" + }, + "id": 7998, + "nodeType": "InheritanceSpecifier", + "src": "2460:13:48" + }, + { + "baseName": { + "id": 7999, + "name": "OwnableUpgradeable", + "nameLocations": [ + "2479:18:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4848, + "src": "2479:18:48" + }, + "id": 8000, + "nodeType": "InheritanceSpecifier", + "src": "2479:18:48" + }, + { + "baseName": { + "id": 8001, + "name": "GraphDirectory", + "nameLocations": [ + "2503:14:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4653, + "src": "2503:14:48" + }, + "id": 8002, + "nodeType": "InheritanceSpecifier", + "src": "2503:14:48" + }, + { + "baseName": { + "id": 8003, + "name": "AttestationManager", + "nameLocations": [ + "2523:18:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 13226, + "src": "2523:18:48" + }, + "id": 8004, + "nodeType": "InheritanceSpecifier", + "src": "2523:18:48" + }, + { + "baseName": { + "id": 8005, + "name": "DisputeManagerV1Storage", + "nameLocations": [ + "2547:23:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 9470, + "src": "2547:23:48" + }, + "id": 8006, + "nodeType": "InheritanceSpecifier", + "src": "2547:23:48" + }, + { + "baseName": { + "id": 8007, + "name": "IDisputeManager", + "nameLocations": [ + "2576:15:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11057, + "src": "2576:15:48" + }, + "id": 8008, + "nodeType": "InheritanceSpecifier", + "src": "2576:15:48" + } + ], + "canonicalName": "DisputeManager", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 7996, + "nodeType": "StructuredDocumentation", + "src": "1279:1149:48", + "text": " @title DisputeManager\n @notice Provides a way to permissionlessly create disputes for incorrect behavior in the Subgraph Service.\n There are two types of disputes that can be created: Query disputes and Indexing disputes.\n Query Disputes:\n Graph nodes receive queries and return responses with signed receipts called attestations.\n An attestation can be disputed if the consumer thinks the query response was invalid.\n Indexers use the derived private key for an allocation to sign attestations.\n Indexing Disputes:\n Indexers present a Proof of Indexing (POI) when they close allocations to prove\n they were indexing a subgraph. The Staking contract emits that proof with the format\n keccak256(indexer.address, POI).\n Any fisherman can dispute the validity of a POI by submitting a dispute to this contract\n along with a deposit.\n Arbitration:\n Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated\n to a EOA or DAO.\n @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program." + }, + "fullyImplemented": true, + "id": 9438, + "linearizedBaseContracts": [ + 9438, + 11057, + 9470, + 13226, + 13237, + 4653, + 4848, + 5148, + 5102 + ], + "name": "DisputeManager", + "nameLocation": "2438:14:48", + "nodeType": "ContractDefinition", + "nodes": [ + { + "global": false, + "id": 8012, + "libraryName": { + "id": 8009, + "name": "TokenUtils", + "nameLocations": [ + "2604:10:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 600, + "src": "2604:10:48" + }, + "nodeType": "UsingForDirective", + "src": "2598:33:48", + "typeName": { + "id": 8011, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8010, + "name": "IGraphToken", + "nameLocations": [ + "2619:11:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 518, + "src": "2619:11:48" + }, + "referencedDeclaration": 518, + "src": "2619:11:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + } + }, + { + "global": false, + "id": 8015, + "libraryName": { + "id": 8013, + "name": "PPMMath", + "nameLocations": [ + "2642:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4262, + "src": "2642:7:48" + }, + "nodeType": "UsingForDirective", + "src": "2636:26:48", + "typeName": { + "id": 8014, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2654:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": true, + "functionSelector": "17337b46", + "id": 8018, + "mutability": "constant", + "name": "MAX_FISHERMAN_REWARD_CUT", + "nameLocation": "2768:24:48", + "nodeType": "VariableDeclaration", + "scope": 9438, + "src": "2745:56:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 8016, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2745:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "hexValue": "353030303030", + "id": 8017, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2795:6:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_500000_by_1", + "typeString": "int_const 500000" + }, + "value": "500000" + }, + "visibility": "public" + }, + { + "body": { + "id": 8031, + "nodeType": "Block", + "src": "2928:92:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 8025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8022, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2946:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8023, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2950:6:48", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2946:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 8024, + "name": "arbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9451, + "src": "2960:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2946:24:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8026, + "name": "DisputeManagerNotArbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10855, + "src": "2972:27:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 8027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2972:29:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8021, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2938:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8028, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2938:64:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8029, + "nodeType": "ExpressionStatement", + "src": "2938:64:48" + }, + { + "id": 8030, + "nodeType": "PlaceholderStatement", + "src": "3012:1:48" + } + ] + }, + "documentation": { + "id": 8019, + "nodeType": "StructuredDocumentation", + "src": "2832:65:48", + "text": " @notice Check if the caller is the arbitrator." + }, + "id": 8032, + "name": "onlyArbitrator", + "nameLocation": "2911:14:48", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 8020, + "nodeType": "ParameterList", + "parameters": [], + "src": "2925:2:48" + }, + "src": "2902:118:48", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8064, + "nodeType": "Block", + "src": "3187:286:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 8039, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "3222:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8038, + "name": "isDisputeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8801, + "src": "3205:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 8040, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3205:27:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 8042, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "3263:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8041, + "name": "DisputeManagerInvalidDispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10867, + "src": "3234:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32) pure returns (error)" + } + }, + "id": 8043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3234:39:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8037, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3197:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3197:77:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8045, + "nodeType": "ExpressionStatement", + "src": "3197:77:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + }, + "id": 8054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "id": 8047, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "3305:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8049, + "indexExpression": { + "id": 8048, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "3314:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3305:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "id": 8050, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3325:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "3305:26:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 8051, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "3335:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 8052, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3351:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "3335:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 8053, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3365:7:48", + "memberName": "Pending", + "nodeType": "MemberAccess", + "referencedDeclaration": 10716, + "src": "3335:37:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "src": "3305:67:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 8056, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "3418:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8058, + "indexExpression": { + "id": 8057, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "3427:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3418:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "id": 8059, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3438:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "3418:26:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + ], + "id": 8055, + "name": "DisputeManagerDisputeNotPending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10890, + "src": "3386:31:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_enum$_DisputeStatus_$10718_$returns$_t_error_$", + "typeString": "function (enum IDisputeManager.DisputeStatus) pure returns (error)" + } + }, + "id": 8060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3386:59:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8046, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3284:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8061, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3284:171:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8062, + "nodeType": "ExpressionStatement", + "src": "3284:171:48" + }, + { + "id": 8063, + "nodeType": "PlaceholderStatement", + "src": "3465:1:48" + } + ] + }, + "documentation": { + "id": 8033, + "nodeType": "StructuredDocumentation", + "src": "3026:109:48", + "text": " @notice Check if the dispute exists and is pending.\n @param disputeId The dispute Id" + }, + "id": 8065, + "name": "onlyPendingDispute", + "nameLocation": "3149:18:48", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 8036, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8035, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "3176:9:48", + "nodeType": "VariableDeclaration", + "scope": 8065, + "src": "3168:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8034, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3168:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3167:19:48" + }, + "src": "3140:333:48", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8092, + "nodeType": "Block", + "src": "3644:197:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 8072, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8068, + "src": "3679:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8071, + "name": "isDisputeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8801, + "src": "3662:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 8073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3662:27:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 8075, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8068, + "src": "3720:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8074, + "name": "DisputeManagerInvalidDispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10867, + "src": "3691:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32) pure returns (error)" + } + }, + "id": 8076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3691:39:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8070, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3654:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8077, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3654:77:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8078, + "nodeType": "ExpressionStatement", + "src": "3654:77:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 8086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8080, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3749:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8081, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3753:6:48", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3749:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "baseExpression": { + "id": 8082, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "3763:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8084, + "indexExpression": { + "id": 8083, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8068, + "src": "3772:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3763:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "id": 8085, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3783:9:48", + "memberName": "fisherman", + "nodeType": "MemberAccess", + "referencedDeclaration": 10723, + "src": "3763:29:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3749:43:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8087, + "name": "DisputeManagerNotFisherman", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10857, + "src": "3794:26:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 8088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3794:28:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8079, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3741:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3741:82:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8090, + "nodeType": "ExpressionStatement", + "src": "3741:82:48" + }, + { + "id": 8091, + "nodeType": "PlaceholderStatement", + "src": "3833:1:48" + } + ] + }, + "documentation": { + "id": 8066, + "nodeType": "StructuredDocumentation", + "src": "3479:118:48", + "text": " @notice Check if the caller is the fisherman of the dispute.\n @param disputeId The dispute Id" + }, + "id": 8093, + "name": "onlyFisherman", + "nameLocation": "3611:13:48", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 8069, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8068, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "3633:9:48", + "nodeType": "VariableDeclaration", + "scope": 8093, + "src": "3625:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8067, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3625:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3624:19:48" + }, + "src": "3602:239:48", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8105, + "nodeType": "Block", + "src": "4009:39:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8102, + "name": "_disableInitializers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5070, + "src": "4019:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8103, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4019:22:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8104, + "nodeType": "ExpressionStatement", + "src": "4019:22:48" + } + ] + }, + "documentation": { + "id": 8094, + "nodeType": "StructuredDocumentation", + "src": "3847:98:48", + "text": " @notice Contract constructor\n @param controller Address of the controller" + }, + "id": 8106, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 8099, + "name": "controller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8096, + "src": "3997:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 8100, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 8098, + "name": "GraphDirectory", + "nameLocations": [ + "3982:14:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4653, + "src": "3982:14:48" + }, + "nodeType": "ModifierInvocation", + "src": "3982:26:48" + } + ], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8097, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8096, + "mutability": "mutable", + "name": "controller", + "nameLocation": "3970:10:48", + "nodeType": "VariableDeclaration", + "scope": 8106, + "src": "3962:18:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8095, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3962:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3961:20:48" + }, + "returnParameters": { + "id": 8101, + "nodeType": "ParameterList", + "parameters": [], + "src": "4009:0:48" + }, + "scope": 9438, + "src": "3950:98:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 8150, + "nodeType": "Block", + "src": "4648:301:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 8123, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4673:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4677:6:48", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4673:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8122, + "name": "__Ownable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4708, + "src": "4658:14:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 8125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4658:26:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8126, + "nodeType": "ExpressionStatement", + "src": "4658:26:48" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8127, + "name": "__AttestationManager_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13125, + "src": "4694:25:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4694:27:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8129, + "nodeType": "ExpressionStatement", + "src": "4694:27:48" + }, + { + "expression": { + "arguments": [ + { + "id": 8131, + "name": "arbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8109, + "src": "4747:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8130, + "name": "_setArbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9238, + "src": "4732:14:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 8132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4732:26:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8133, + "nodeType": "ExpressionStatement", + "src": "4732:26:48" + }, + { + "expression": { + "arguments": [ + { + "id": 8135, + "name": "disputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8111, + "src": "4786:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 8134, + "name": "_setDisputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "4768:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$", + "typeString": "function (uint64)" + } + }, + "id": 8136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4768:32:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8137, + "nodeType": "ExpressionStatement", + "src": "4768:32:48" + }, + { + "expression": { + "arguments": [ + { + "id": 8139, + "name": "disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8113, + "src": "4829:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8138, + "name": "_setDisputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9285, + "src": "4810:18:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 8140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4810:34:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8141, + "nodeType": "ExpressionStatement", + "src": "4810:34:48" + }, + { + "expression": { + "arguments": [ + { + "id": 8143, + "name": "fishermanRewardCut_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8115, + "src": "4877:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 8142, + "name": "_setFishermanRewardCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9309, + "src": "4854:22:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", + "typeString": "function (uint32)" + } + }, + "id": 8144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4854:43:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8145, + "nodeType": "ExpressionStatement", + "src": "4854:43:48" + }, + { + "expression": { + "arguments": [ + { + "id": 8147, + "name": "maxSlashingCut_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8117, + "src": "4926:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 8146, + "name": "_setMaxSlashingCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9334, + "src": "4907:18:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", + "typeString": "function (uint32)" + } + }, + "id": 8148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4907:35:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8149, + "nodeType": "ExpressionStatement", + "src": "4907:35:48" + } + ] + }, + "documentation": { + "id": 8107, + "nodeType": "StructuredDocumentation", + "src": "4054:384:48", + "text": " @notice Initialize this contract.\n @param arbitrator Arbitrator role\n @param disputePeriod Dispute period in seconds\n @param disputeDeposit Deposit required to create a Dispute\n @param fishermanRewardCut_ Percent of slashed funds for fisherman (ppm)\n @param maxSlashingCut_ Maximum percentage of indexer stake that can be slashed (ppm)" + }, + "functionSelector": "5ed2c96c", + "id": 8151, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8120, + "kind": "modifierInvocation", + "modifierName": { + "id": 8119, + "name": "initializer", + "nameLocations": [ + "4636:11:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4956, + "src": "4636:11:48" + }, + "nodeType": "ModifierInvocation", + "src": "4636:11:48" + } + ], + "name": "initialize", + "nameLocation": "4452:10:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8118, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8109, + "mutability": "mutable", + "name": "arbitrator", + "nameLocation": "4480:10:48", + "nodeType": "VariableDeclaration", + "scope": 8151, + "src": "4472:18:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8108, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4472:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8111, + "mutability": "mutable", + "name": "disputePeriod", + "nameLocation": "4507:13:48", + "nodeType": "VariableDeclaration", + "scope": 8151, + "src": "4500:20:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 8110, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4500:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8113, + "mutability": "mutable", + "name": "disputeDeposit", + "nameLocation": "4538:14:48", + "nodeType": "VariableDeclaration", + "scope": 8151, + "src": "4530:22:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8112, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4530:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8115, + "mutability": "mutable", + "name": "fishermanRewardCut_", + "nameLocation": "4569:19:48", + "nodeType": "VariableDeclaration", + "scope": 8151, + "src": "4562:26:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 8114, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4562:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8117, + "mutability": "mutable", + "name": "maxSlashingCut_", + "nameLocation": "4605:15:48", + "nodeType": "VariableDeclaration", + "scope": 8151, + "src": "4598:22:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 8116, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4598:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "4462:164:48" + }, + "returnParameters": { + "id": 8121, + "nodeType": "ParameterList", + "parameters": [], + "src": "4648:0:48" + }, + "scope": 9438, + "src": "4443:506:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10978 + ], + "body": { + "id": 8173, + "nodeType": "Block", + "src": "5636:205:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8162, + "name": "_pullFishermanDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9131, + "src": "5682:21:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5682:23:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8164, + "nodeType": "ExpressionStatement", + "src": "5682:23:48" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 8166, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5788:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5792:6:48", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5788:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8168, + "name": "disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9457, + "src": "5800:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8169, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8154, + "src": "5816:12:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8170, + "name": "poi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8156, + "src": "5830:3:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8165, + "name": "_createIndexingDisputeWithAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9040, + "src": "5751:36:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (address,uint256,address,bytes32) returns (bytes32)" + } + }, + "id": 8171, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5751:83:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 8161, + "id": 8172, + "nodeType": "Return", + "src": "5744:90:48" + } + ] + }, + "documentation": { + "id": 8152, + "nodeType": "StructuredDocumentation", + "src": "4955:574:48", + "text": " @notice Create an indexing dispute for the arbitrator to resolve.\n The disputes are created in reference to an allocationId and specifically\n a POI for that allocation.\n This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens.\n Requirements:\n - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n of tokens from their balance.\n @param allocationId The allocation to dispute\n @param poi The Proof of Indexing (POI) being disputed" + }, + "functionSelector": "4bc5839a", + "id": 8174, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "createIndexingDispute", + "nameLocation": "5543:21:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8158, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5609:8:48" + }, + "parameters": { + "id": 8157, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8154, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "5573:12:48", + "nodeType": "VariableDeclaration", + "scope": 8174, + "src": "5565:20:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8153, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5565:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8156, + "mutability": "mutable", + "name": "poi", + "nameLocation": "5595:3:48", + "nodeType": "VariableDeclaration", + "scope": 8174, + "src": "5587:11:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8155, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5587:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5564:35:48" + }, + "returnParameters": { + "id": 8161, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8160, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8174, + "src": "5627:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8159, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5627:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5626:9:48" + }, + "scope": 9438, + "src": "5534:307:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10958 + ], + "body": { + "id": 8197, + "nodeType": "Block", + "src": "6366:327:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8183, + "name": "_pullFishermanDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9131, + "src": "6412:21:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6412:23:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8185, + "nodeType": "ExpressionStatement", + "src": "6412:23:48" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 8187, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "6545:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6549:6:48", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "6545:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8189, + "name": "disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9457, + "src": "6573:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 8192, + "name": "attestationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8177, + "src": "6623:15:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "expression": { + "id": 8190, + "name": "Attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11920, + "src": "6605:11:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", + "typeString": "type(library Attestation)" + } + }, + "id": 8191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6617:5:48", + "memberName": "parse", + "nodeType": "MemberAccess", + "referencedDeclaration": 11853, + "src": "6605:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_State_$11699_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (struct Attestation.State memory)" + } + }, + "id": 8193, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6605:34:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + { + "id": 8194, + "name": "attestationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8177, + "src": "6657:15:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 8186, + "name": "_createQueryDisputeWithAttestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8913, + "src": "6493:34:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_struct$_State_$11699_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (address,uint256,struct Attestation.State memory,bytes memory) returns (bytes32)" + } + }, + "id": 8195, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6493:193:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 8182, + "id": 8196, + "nodeType": "Return", + "src": "6474:212:48" + } + ] + }, + "documentation": { + "id": 8175, + "nodeType": "StructuredDocumentation", + "src": "5847:418:48", + "text": " @notice Create a query dispute for the arbitrator to resolve.\n This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens.\n * Requirements:\n - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n of tokens from their balance.\n @param attestationData Attestation bytes submitted by the fisherman" + }, + "functionSelector": "c50a77b1", + "id": 8198, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "createQueryDispute", + "nameLocation": "6279:18:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8179, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6339:8:48" + }, + "parameters": { + "id": 8178, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8177, + "mutability": "mutable", + "name": "attestationData", + "nameLocation": "6313:15:48", + "nodeType": "VariableDeclaration", + "scope": 8198, + "src": "6298:30:48", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8176, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6298:5:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6297:32:48" + }, + "returnParameters": { + "id": 8182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8181, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8198, + "src": "6357:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8180, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6357:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6356:9:48" + }, + "scope": 9438, + "src": "6270:423:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10969 + ], + "body": { + "id": 8299, + "nodeType": "Block", + "src": "7551:1314:48", + "statements": [ + { + "assignments": [ + 8212 + ], + "declarations": [ + { + "constant": false, + "id": 8212, + "mutability": "mutable", + "name": "fisherman", + "nameLocation": "7569:9:48", + "nodeType": "VariableDeclaration", + "scope": 8299, + "src": "7561:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8211, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7561:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 8215, + "initialValue": { + "expression": { + "id": 8213, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "7581:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 8214, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7585:6:48", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "7581:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7561:30:48" + }, + { + "assignments": [ + 8220 + ], + "declarations": [ + { + "constant": false, + "id": 8220, + "mutability": "mutable", + "name": "attestation1", + "nameLocation": "7661:12:48", + "nodeType": "VariableDeclaration", + "scope": 8299, + "src": "7636:37:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 8219, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8218, + "name": "Attestation.State", + "nameLocations": [ + "7636:11:48", + "7648:5:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "7636:17:48" + }, + "referencedDeclaration": 11699, + "src": "7636:17:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + } + ], + "id": 8225, + "initialValue": { + "arguments": [ + { + "id": 8223, + "name": "attestationData1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8201, + "src": "7694:16:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "expression": { + "id": 8221, + "name": "Attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11920, + "src": "7676:11:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", + "typeString": "type(library Attestation)" + } + }, + "id": 8222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7688:5:48", + "memberName": "parse", + "nodeType": "MemberAccess", + "referencedDeclaration": 11853, + "src": "7676:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_State_$11699_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (struct Attestation.State memory)" + } + }, + "id": 8224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7676:35:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7636:75:48" + }, + { + "assignments": [ + 8230 + ], + "declarations": [ + { + "constant": false, + "id": 8230, + "mutability": "mutable", + "name": "attestation2", + "nameLocation": "7746:12:48", + "nodeType": "VariableDeclaration", + "scope": 8299, + "src": "7721:37:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 8229, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8228, + "name": "Attestation.State", + "nameLocations": [ + "7721:11:48", + "7733:5:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "7721:17:48" + }, + "referencedDeclaration": 11699, + "src": "7721:17:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + } + ], + "id": 8235, + "initialValue": { + "arguments": [ + { + "id": 8233, + "name": "attestationData2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8203, + "src": "7779:16:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "expression": { + "id": 8231, + "name": "Attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11920, + "src": "7761:11:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", + "typeString": "type(library Attestation)" + } + }, + "id": 8232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7773:5:48", + "memberName": "parse", + "nodeType": "MemberAccess", + "referencedDeclaration": 11853, + "src": "7761:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_State_$11699_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (struct Attestation.State memory)" + } + }, + "id": 8234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7761:35:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7721:75:48" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 8239, + "name": "attestation1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8220, + "src": "7905:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + { + "id": 8240, + "name": "attestation2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8230, + "src": "7919:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + }, + { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + ], + "expression": { + "id": 8237, + "name": "Attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11920, + "src": "7878:11:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", + "typeString": "type(library Attestation)" + } + }, + "id": 8238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7890:14:48", + "memberName": "areConflicting", + "nodeType": "MemberAccess", + "referencedDeclaration": 11783, + "src": "7878:26:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11699_memory_ptr_$_t_struct$_State_$11699_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct Attestation.State memory,struct Attestation.State memory) pure returns (bool)" + } + }, + "id": 8241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7878:54:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "expression": { + "id": 8243, + "name": "attestation1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8220, + "src": "8004:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8244, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8017:10:48", + "memberName": "requestCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11688, + "src": "8004:23:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8245, + "name": "attestation1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8220, + "src": "8045:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8246, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8058:11:48", + "memberName": "responseCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11690, + "src": "8045:24:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8247, + "name": "attestation1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8220, + "src": "8087:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8248, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8100:20:48", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11692, + "src": "8087:33:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8249, + "name": "attestation2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8230, + "src": "8138:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8250, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8151:10:48", + "memberName": "requestCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11688, + "src": "8138:23:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8251, + "name": "attestation2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8230, + "src": "8179:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8252, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8192:11:48", + "memberName": "responseCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11690, + "src": "8179:24:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8253, + "name": "attestation2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8230, + "src": "8221:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8254, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8234:20:48", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11692, + "src": "8221:33:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8242, + "name": "DisputeManagerNonConflictingAttestations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10926, + "src": "7946:40:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32,bytes32,bytes32,bytes32,bytes32,bytes32) pure returns (error)" + } + }, + "id": 8255, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7946:322:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8236, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7857:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7857:421:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8257, + "nodeType": "ExpressionStatement", + "src": "7857:421:48" + }, + { + "assignments": [ + 8259 + ], + "declarations": [ + { + "constant": false, + "id": 8259, + "mutability": "mutable", + "name": "dId1", + "nameLocation": "8388:4:48", + "nodeType": "VariableDeclaration", + "scope": 8299, + "src": "8380:12:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8258, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8380:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 8266, + "initialValue": { + "arguments": [ + { + "id": 8261, + "name": "fisherman", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8212, + "src": "8430:9:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "hexValue": "30", + "id": 8262, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8441:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "id": 8263, + "name": "attestation1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8220, + "src": "8444:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + { + "id": 8264, + "name": "attestationData1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8201, + "src": "8458:16:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 8260, + "name": "_createQueryDisputeWithAttestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8913, + "src": "8395:34:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_struct$_State_$11699_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (address,uint256,struct Attestation.State memory,bytes memory) returns (bytes32)" + } + }, + "id": 8265, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8395:80:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8380:95:48" + }, + { + "assignments": [ + 8268 + ], + "declarations": [ + { + "constant": false, + "id": 8268, + "mutability": "mutable", + "name": "dId2", + "nameLocation": "8493:4:48", + "nodeType": "VariableDeclaration", + "scope": 8299, + "src": "8485:12:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8267, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8485:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 8275, + "initialValue": { + "arguments": [ + { + "id": 8270, + "name": "fisherman", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8212, + "src": "8535:9:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "hexValue": "30", + "id": 8271, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8546:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "id": 8272, + "name": "attestation2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8230, + "src": "8549:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + { + "id": 8273, + "name": "attestationData2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8203, + "src": "8563:16:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 8269, + "name": "_createQueryDisputeWithAttestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8913, + "src": "8500:34:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_struct$_State_$11699_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (address,uint256,struct Attestation.State memory,bytes memory) returns (bytes32)" + } + }, + "id": 8274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8500:80:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8485:95:48" + }, + { + "expression": { + "id": 8281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 8276, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "8643:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8278, + "indexExpression": { + "id": 8277, + "name": "dId1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8259, + "src": "8652:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8643:14:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "id": 8279, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "8658:16:48", + "memberName": "relatedDisputeId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10727, + "src": "8643:31:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8280, + "name": "dId2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8268, + "src": "8677:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8643:38:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 8282, + "nodeType": "ExpressionStatement", + "src": "8643:38:48" + }, + { + "expression": { + "id": 8288, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 8283, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "8691:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8285, + "indexExpression": { + "id": 8284, + "name": "dId2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8268, + "src": "8700:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8691:14:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "id": 8286, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "8706:16:48", + "memberName": "relatedDisputeId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10727, + "src": "8691:31:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8287, + "name": "dId1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8259, + "src": "8725:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8691:38:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 8289, + "nodeType": "ExpressionStatement", + "src": "8691:38:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 8291, + "name": "dId1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8259, + "src": "8817:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 8292, + "name": "dId2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8268, + "src": "8823:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8290, + "name": "DisputeLinked", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10842, + "src": "8803:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$", + "typeString": "function (bytes32,bytes32)" + } + }, + "id": 8293, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8803:25:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8294, + "nodeType": "EmitStatement", + "src": "8798:30:48" + }, + { + "expression": { + "components": [ + { + "id": 8295, + "name": "dId1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8259, + "src": "8847:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 8296, + "name": "dId2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8268, + "src": "8853:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 8297, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "8846:12:48", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$", + "typeString": "tuple(bytes32,bytes32)" + } + }, + "functionReturnParameters": 8210, + "id": 8298, + "nodeType": "Return", + "src": "8839:19:48" + } + ] + }, + "documentation": { + "id": 8199, + "nodeType": "StructuredDocumentation", + "src": "6699:678:48", + "text": " @notice Create query disputes for two conflicting attestations.\n A conflicting attestation is a proof presented by two different indexers\n where for the same request on a subgraph the response is different.\n For this type of dispute the fisherman is not required to present a deposit\n as one of the attestation is considered to be right.\n Two linked disputes will be created and if the arbitrator resolve one, the other\n one will be automatically resolved.\n @param attestationData1 First attestation data submitted\n @param attestationData2 Second attestation data submitted\n @return DisputeId1, DisputeId2" + }, + "functionSelector": "c894222e", + "id": 8300, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "createQueryDisputeConflict", + "nameLocation": "7391:26:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8205, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "7515:8:48" + }, + "parameters": { + "id": 8204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8201, + "mutability": "mutable", + "name": "attestationData1", + "nameLocation": "7442:16:48", + "nodeType": "VariableDeclaration", + "scope": 8300, + "src": "7427:31:48", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8200, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7427:5:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8203, + "mutability": "mutable", + "name": "attestationData2", + "nameLocation": "7483:16:48", + "nodeType": "VariableDeclaration", + "scope": 8300, + "src": "7468:31:48", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8202, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7468:5:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "7417:88:48" + }, + "returnParameters": { + "id": 8210, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8207, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8300, + "src": "7533:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8206, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7533:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8209, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8300, + "src": "7542:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8208, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7542:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7532:18:48" + }, + "scope": 9438, + "src": "7382:1483:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10985 + ], + "body": { + "id": 8372, + "nodeType": "Block", + "src": "9538:658:48", + "statements": [ + { + "assignments": [ + 8316 + ], + "declarations": [ + { + "constant": false, + "id": 8316, + "mutability": "mutable", + "name": "dispute", + "nameLocation": "9564:7:48", + "nodeType": "VariableDeclaration", + "scope": 8372, + "src": "9548:23:48", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + }, + "typeName": { + "id": 8315, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8314, + "name": "Dispute", + "nameLocations": [ + "9548:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "9548:7:48" + }, + "referencedDeclaration": 10738, + "src": "9548:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + }, + "visibility": "internal" + } + ], + "id": 8320, + "initialValue": { + "baseExpression": { + "id": 8317, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "9574:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8319, + "indexExpression": { + "id": 8318, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8303, + "src": "9583:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9574:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9548:45:48" + }, + { + "expression": { + "id": 8327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8321, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "9640:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8323, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "9648:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "9640:14:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "id": 8324, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "9657:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 8325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9673:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "9657:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 8326, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "9687:8:48", + "memberName": "Accepted", + "nodeType": "MemberAccess", + "referencedDeclaration": 10713, + "src": "9657:38:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "src": "9640:55:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "id": 8328, + "nodeType": "ExpressionStatement", + "src": "9640:55:48" + }, + { + "assignments": [ + 8330 + ], + "declarations": [ + { + "constant": false, + "id": 8330, + "mutability": "mutable", + "name": "tokensToReward", + "nameLocation": "9731:14:48", + "nodeType": "VariableDeclaration", + "scope": 8372, + "src": "9723:22:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8329, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9723:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8338, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 8332, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "9762:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8333, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9770:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 10721, + "src": "9762:15:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8334, + "name": "tokensSlash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8305, + "src": "9779:11:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 8335, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "9792:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8336, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9800:13:48", + "memberName": "stakeSnapshot", + "nodeType": "MemberAccess", + "referencedDeclaration": 10737, + "src": "9792:21:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8331, + "name": "_slashIndexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9212, + "src": "9748:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (address,uint256,uint256) returns (uint256)" + } + }, + "id": 8337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9748:66:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9723:91:48" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 8342, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "9916:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8343, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9924:9:48", + "memberName": "fisherman", + "nodeType": "MemberAccess", + "referencedDeclaration": 10723, + "src": "9916:17:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8344, + "name": "tokensToReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8330, + "src": "9935:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "expression": { + "id": 8345, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "9952:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8346, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9960:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "9952:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9935:32:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8339, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "9891:11:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 8340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9891:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 8341, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9905:10:48", + "memberName": "pushTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 578, + "src": "9891:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", + "typeString": "function (contract IGraphToken,address,uint256)" + } + }, + "id": 8348, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9891:77:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8349, + "nodeType": "ExpressionStatement", + "src": "9891:77:48" + }, + { + "condition": { + "arguments": [ + { + "id": 8351, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "10004:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + ], + "id": 8350, + "name": "_isDisputeInConflict", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9390, + "src": "9983:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct IDisputeManager.Dispute memory) view returns (bool)" + } + }, + "id": 8352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9983:29:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8359, + "nodeType": "IfStatement", + "src": "9979:99:48", + "trueBody": { + "id": 8358, + "nodeType": "Block", + "src": "10014:64:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 8354, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "10042:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8355, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10050:16:48", + "memberName": "relatedDisputeId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10727, + "src": "10042:24:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8353, + "name": "rejectDispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8727, + "src": "10028:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + }, + "id": 8356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10028:39:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8357, + "nodeType": "ExpressionStatement", + "src": "10028:39:48" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 8361, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8303, + "src": "10109:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8362, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "10120:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8363, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10128:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 10721, + "src": "10120:15:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8364, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "10137:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8365, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10145:9:48", + "memberName": "fisherman", + "nodeType": "MemberAccess", + "referencedDeclaration": 10723, + "src": "10137:17:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8369, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8366, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8316, + "src": "10156:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8367, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10164:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "10156:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 8368, + "name": "tokensToReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8330, + "src": "10174:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10156:32:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8360, + "name": "DisputeAccepted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10813, + "src": "10093:15:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (bytes32,address,address,uint256)" + } + }, + "id": 8370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10093:96:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8371, + "nodeType": "EmitStatement", + "src": "10088:101:48" + } + ] + }, + "documentation": { + "id": 8301, + "nodeType": "StructuredDocumentation", + "src": "8871:514:48", + "text": " @notice The arbitrator accepts a dispute as being valid.\n This function will revert if the indexer is not slashable, whether because it does not have\n any stake available or the slashing percentage is configured to be zero. In those cases\n a dispute must be resolved using drawDispute or rejectDispute.\n @dev Accept a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be accepted\n @param tokensSlash Amount of tokens to slash from the indexer" + }, + "functionSelector": "050b17ad", + "id": 8373, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8309, + "kind": "modifierInvocation", + "modifierName": { + "id": 8308, + "name": "onlyArbitrator", + "nameLocations": [ + "9493:14:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 8032, + "src": "9493:14:48" + }, + "nodeType": "ModifierInvocation", + "src": "9493:14:48" + }, + { + "arguments": [ + { + "id": 8311, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8303, + "src": "9527:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 8312, + "kind": "modifierInvocation", + "modifierName": { + "id": 8310, + "name": "onlyPendingDispute", + "nameLocations": [ + "9508:18:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 8065, + "src": "9508:18:48" + }, + "nodeType": "ModifierInvocation", + "src": "9508:29:48" + } + ], + "name": "acceptDispute", + "nameLocation": "9399:13:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8307, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "9484:8:48" + }, + "parameters": { + "id": 8306, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8303, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "9430:9:48", + "nodeType": "VariableDeclaration", + "scope": 8373, + "src": "9422:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8302, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9422:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8305, + "mutability": "mutable", + "name": "tokensSlash", + "nameLocation": "9457:11:48", + "nodeType": "VariableDeclaration", + "scope": 8373, + "src": "9449:19:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8304, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9449:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9412:62:48" + }, + "returnParameters": { + "id": 8313, + "nodeType": "ParameterList", + "parameters": [], + "src": "9538:0:48" + }, + "scope": 9438, + "src": "9390:806:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10995 + ], + "body": { + "id": 8429, + "nodeType": "Block", + "src": "10475:503:48", + "statements": [ + { + "assignments": [ + 8387 + ], + "declarations": [ + { + "constant": false, + "id": 8387, + "mutability": "mutable", + "name": "dispute", + "nameLocation": "10501:7:48", + "nodeType": "VariableDeclaration", + "scope": 8429, + "src": "10485:23:48", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + }, + "typeName": { + "id": 8386, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8385, + "name": "Dispute", + "nameLocations": [ + "10485:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "10485:7:48" + }, + "referencedDeclaration": 10738, + "src": "10485:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + }, + "visibility": "internal" + } + ], + "id": 8391, + "initialValue": { + "baseExpression": { + "id": 8388, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "10511:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8390, + "indexExpression": { + "id": 8389, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8376, + "src": "10520:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10511:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10485:45:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8392, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8387, + "src": "10595:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8393, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10603:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "10595:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8394, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10613:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "10595:19:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8406, + "nodeType": "IfStatement", + "src": "10591:110:48", + "trueBody": { + "id": 8405, + "nodeType": "Block", + "src": "10616:85:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 8399, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8387, + "src": "10655:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8400, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10663:9:48", + "memberName": "fisherman", + "nodeType": "MemberAccess", + "referencedDeclaration": 10723, + "src": "10655:17:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8401, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8387, + "src": "10674:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8402, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10682:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "10674:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8396, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "10630:11:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 8397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10630:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 8398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10644:10:48", + "memberName": "pushTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 578, + "src": "10630:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", + "typeString": "function (contract IGraphToken,address,uint256)" + } + }, + "id": 8403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10630:60:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8404, + "nodeType": "ExpressionStatement", + "src": "10630:60:48" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 8408, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8387, + "src": "10776:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + ], + "id": 8407, + "name": "_drawDisputeInConflict", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9079, + "src": "10753:22:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct IDisputeManager.Dispute memory) returns (bool)" + } + }, + "id": 8409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10753:31:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8410, + "nodeType": "ExpressionStatement", + "src": "10753:31:48" + }, + { + "expression": { + "id": 8417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8411, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8387, + "src": "10827:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8413, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "10835:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "10827:14:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "id": 8414, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "10844:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 8415, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10860:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "10844:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 8416, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "10874:5:48", + "memberName": "Drawn", + "nodeType": "MemberAccess", + "referencedDeclaration": 10715, + "src": "10844:35:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "src": "10827:52:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "id": 8418, + "nodeType": "ExpressionStatement", + "src": "10827:52:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 8420, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8376, + "src": "10908:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8421, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8387, + "src": "10919:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8422, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10927:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 10721, + "src": "10919:15:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8423, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8387, + "src": "10936:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8424, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10944:9:48", + "memberName": "fisherman", + "nodeType": "MemberAccess", + "referencedDeclaration": 10723, + "src": "10936:17:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8425, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8387, + "src": "10955:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8426, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10963:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "10955:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8419, + "name": "DisputeDrawn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10835, + "src": "10895:12:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (bytes32,address,address,uint256)" + } + }, + "id": 8427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10895:76:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8428, + "nodeType": "EmitStatement", + "src": "10890:81:48" + } + ] + }, + "documentation": { + "id": 8374, + "nodeType": "StructuredDocumentation", + "src": "10202:165:48", + "text": " @notice The arbitrator draws dispute.\n @dev Ignore a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be disregarded" + }, + "functionSelector": "9334ea52", + "id": 8430, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8380, + "kind": "modifierInvocation", + "modifierName": { + "id": 8379, + "name": "onlyArbitrator", + "nameLocations": [ + "10430:14:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 8032, + "src": "10430:14:48" + }, + "nodeType": "ModifierInvocation", + "src": "10430:14:48" + }, + { + "arguments": [ + { + "id": 8382, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8376, + "src": "10464:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 8383, + "kind": "modifierInvocation", + "modifierName": { + "id": 8381, + "name": "onlyPendingDispute", + "nameLocations": [ + "10445:18:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 8065, + "src": "10445:18:48" + }, + "nodeType": "ModifierInvocation", + "src": "10445:29:48" + } + ], + "name": "drawDispute", + "nameLocation": "10381:11:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8378, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10421:8:48" + }, + "parameters": { + "id": 8377, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8376, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "10401:9:48", + "nodeType": "VariableDeclaration", + "scope": 8430, + "src": "10393:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8375, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10393:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "10392:19:48" + }, + "returnParameters": { + "id": 8384, + "nodeType": "ParameterList", + "parameters": [], + "src": "10475:0:48" + }, + "scope": 9438, + "src": "10372:606:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11000 + ], + "body": { + "id": 8499, + "nodeType": "Block", + "src": "11386:674:48", + "statements": [ + { + "assignments": [ + 8445 + ], + "declarations": [ + { + "constant": false, + "id": 8445, + "mutability": "mutable", + "name": "dispute", + "nameLocation": "11412:7:48", + "nodeType": "VariableDeclaration", + "scope": 8499, + "src": "11396:23:48", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + }, + "typeName": { + "id": 8444, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8443, + "name": "Dispute", + "nameLocations": [ + "11396:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "11396:7:48" + }, + "referencedDeclaration": 10738, + "src": "11396:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + }, + "visibility": "internal" + } + ], + "id": 8449, + "initialValue": { + "baseExpression": { + "id": 8446, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "11422:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8448, + "indexExpression": { + "id": 8447, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8433, + "src": "11431:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11422:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11396:45:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8451, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8445, + "src": "11508:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8452, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11516:9:48", + "memberName": "createdAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 10735, + "src": "11508:17:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 8453, + "name": "disputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9454, + "src": "11528:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "11508:33:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 8455, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "11544:5:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11550:9:48", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "11544:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11508:51:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8458, + "name": "DisputeManagerDisputePeriodNotFinished", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10896, + "src": "11561:38:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 8459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11561:40:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8450, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "11500:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11500:102:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8461, + "nodeType": "ExpressionStatement", + "src": "11500:102:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8462, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8445, + "src": "11667:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8463, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11675:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "11667:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11685:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11667:19:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8476, + "nodeType": "IfStatement", + "src": "11663:110:48", + "trueBody": { + "id": 8475, + "nodeType": "Block", + "src": "11688:85:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 8469, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8445, + "src": "11727:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8470, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11735:9:48", + "memberName": "fisherman", + "nodeType": "MemberAccess", + "referencedDeclaration": 10723, + "src": "11727:17:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8471, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8445, + "src": "11746:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8472, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11754:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "11746:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8466, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "11702:11:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 8467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11702:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 8468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11716:10:48", + "memberName": "pushTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 578, + "src": "11702:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", + "typeString": "function (contract IGraphToken,address,uint256)" + } + }, + "id": 8473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11702:60:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8474, + "nodeType": "ExpressionStatement", + "src": "11702:60:48" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 8478, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8445, + "src": "11850:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + ], + "id": 8477, + "name": "_cancelDisputeInConflict", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9118, + "src": "11825:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct IDisputeManager.Dispute memory) returns (bool)" + } + }, + "id": 8479, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11825:33:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8480, + "nodeType": "ExpressionStatement", + "src": "11825:33:48" + }, + { + "expression": { + "id": 8487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8481, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8445, + "src": "11901:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8483, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "11909:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "11901:14:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "id": 8484, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "11918:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 8485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11934:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "11918:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 8486, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "11948:9:48", + "memberName": "Cancelled", + "nodeType": "MemberAccess", + "referencedDeclaration": 10717, + "src": "11918:39:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "src": "11901:56:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "id": 8488, + "nodeType": "ExpressionStatement", + "src": "11901:56:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 8490, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8433, + "src": "11990:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8491, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8445, + "src": "12001:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8492, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12009:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 10721, + "src": "12001:15:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8493, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8445, + "src": "12018:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8494, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12026:9:48", + "memberName": "fisherman", + "nodeType": "MemberAccess", + "referencedDeclaration": 10723, + "src": "12018:17:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8495, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8445, + "src": "12037:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8496, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12045:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "12037:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8489, + "name": "DisputeCancelled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10853, + "src": "11973:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (bytes32,address,address,uint256)" + } + }, + "id": 8497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11973:80:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8498, + "nodeType": "EmitStatement", + "src": "11968:85:48" + } + ] + }, + "documentation": { + "id": 8431, + "nodeType": "StructuredDocumentation", + "src": "10984:282:48", + "text": " @notice Once the dispute period ends, if the dispute status remains Pending,\n the fisherman can cancel the dispute and get back their initial deposit.\n @dev Cancel a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be cancelled" + }, + "functionSelector": "1792f194", + "id": 8500, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 8437, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8433, + "src": "11345:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 8438, + "kind": "modifierInvocation", + "modifierName": { + "id": 8436, + "name": "onlyFisherman", + "nameLocations": [ + "11331:13:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 8093, + "src": "11331:13:48" + }, + "nodeType": "ModifierInvocation", + "src": "11331:24:48" + }, + { + "arguments": [ + { + "id": 8440, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8433, + "src": "11375:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 8441, + "kind": "modifierInvocation", + "modifierName": { + "id": 8439, + "name": "onlyPendingDispute", + "nameLocations": [ + "11356:18:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 8065, + "src": "11356:18:48" + }, + "nodeType": "ModifierInvocation", + "src": "11356:29:48" + } + ], + "name": "cancelDispute", + "nameLocation": "11280:13:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8435, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11322:8:48" + }, + "parameters": { + "id": 8434, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8433, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "11302:9:48", + "nodeType": "VariableDeclaration", + "scope": 8500, + "src": "11294:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8432, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11294:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "11293:19:48" + }, + "returnParameters": { + "id": 8442, + "nodeType": "ParameterList", + "parameters": [], + "src": "11386:0:48" + }, + "scope": 9438, + "src": "11271:789:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10936 + ], + "body": { + "id": 8513, + "nodeType": "Block", + "src": "12321:43:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8510, + "name": "arbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8503, + "src": "12346:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8509, + "name": "_setArbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9238, + "src": "12331:14:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 8511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12331:26:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8512, + "nodeType": "ExpressionStatement", + "src": "12331:26:48" + } + ] + }, + "documentation": { + "id": 8501, + "nodeType": "StructuredDocumentation", + "src": "12066:179:48", + "text": " @notice Set the arbitrator address.\n @dev Update the arbitrator to `_arbitrator`\n @param arbitrator The address of the arbitration contract or party" + }, + "functionSelector": "b0eefabe", + "id": 8514, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8507, + "kind": "modifierInvocation", + "modifierName": { + "id": 8506, + "name": "onlyOwner", + "nameLocations": [ + "12311:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "12311:9:48" + }, + "nodeType": "ModifierInvocation", + "src": "12311:9:48" + } + ], + "name": "setArbitrator", + "nameLocation": "12259:13:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8505, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "12302:8:48" + }, + "parameters": { + "id": 8504, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8503, + "mutability": "mutable", + "name": "arbitrator", + "nameLocation": "12281:10:48", + "nodeType": "VariableDeclaration", + "scope": 8514, + "src": "12273:18:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8502, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12273:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "12272:20:48" + }, + "returnParameters": { + "id": 8508, + "nodeType": "ParameterList", + "parameters": [], + "src": "12321:0:48" + }, + "scope": 9438, + "src": "12250:114:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10931 + ], + "body": { + "id": 8527, + "nodeType": "Block", + "src": "12624:49:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8524, + "name": "disputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8517, + "src": "12652:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 8523, + "name": "_setDisputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "12634:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$", + "typeString": "function (uint64)" + } + }, + "id": 8525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12634:32:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8526, + "nodeType": "ExpressionStatement", + "src": "12634:32:48" + } + ] + }, + "documentation": { + "id": 8515, + "nodeType": "StructuredDocumentation", + "src": "12370:173:48", + "text": " @notice Set the dispute period.\n @dev Update the dispute period to `_disputePeriod` in seconds\n @param disputePeriod Dispute period in seconds" + }, + "functionSelector": "d76f62d1", + "id": 8528, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8521, + "kind": "modifierInvocation", + "modifierName": { + "id": 8520, + "name": "onlyOwner", + "nameLocations": [ + "12614:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "12614:9:48" + }, + "nodeType": "ModifierInvocation", + "src": "12614:9:48" + } + ], + "name": "setDisputePeriod", + "nameLocation": "12557:16:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8519, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "12605:8:48" + }, + "parameters": { + "id": 8518, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8517, + "mutability": "mutable", + "name": "disputePeriod", + "nameLocation": "12581:13:48", + "nodeType": "VariableDeclaration", + "scope": 8528, + "src": "12574:20:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 8516, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "12574:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "12573:22:48" + }, + "returnParameters": { + "id": 8522, + "nodeType": "ParameterList", + "parameters": [], + "src": "12624:0:48" + }, + "scope": 9438, + "src": "12548:125:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10941 + ], + "body": { + "id": 8541, + "nodeType": "Block", + "src": "12981:51:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8538, + "name": "disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8531, + "src": "13010:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8537, + "name": "_setDisputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9285, + "src": "12991:18:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 8539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12991:34:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8540, + "nodeType": "ExpressionStatement", + "src": "12991:34:48" + } + ] + }, + "documentation": { + "id": 8529, + "nodeType": "StructuredDocumentation", + "src": "12679:218:48", + "text": " @notice Set the dispute deposit required to create a dispute.\n @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens\n @param disputeDeposit The dispute deposit in Graph Tokens" + }, + "functionSelector": "16972978", + "id": 8542, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8535, + "kind": "modifierInvocation", + "modifierName": { + "id": 8534, + "name": "onlyOwner", + "nameLocations": [ + "12971:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "12971:9:48" + }, + "nodeType": "ModifierInvocation", + "src": "12971:9:48" + } + ], + "name": "setDisputeDeposit", + "nameLocation": "12911:17:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8533, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "12962:8:48" + }, + "parameters": { + "id": 8532, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8531, + "mutability": "mutable", + "name": "disputeDeposit", + "nameLocation": "12937:14:48", + "nodeType": "VariableDeclaration", + "scope": 8542, + "src": "12929:22:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8530, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12929:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12928:24:48" + }, + "returnParameters": { + "id": 8536, + "nodeType": "ParameterList", + "parameters": [], + "src": "12981:0:48" + }, + "scope": 9438, + "src": "12902:130:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10946 + ], + "body": { + "id": 8555, + "nodeType": "Block", + "src": "13357:60:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8552, + "name": "fishermanRewardCut_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8545, + "src": "13390:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 8551, + "name": "_setFishermanRewardCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9309, + "src": "13367:22:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", + "typeString": "function (uint32)" + } + }, + "id": 8553, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13367:43:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8554, + "nodeType": "ExpressionStatement", + "src": "13367:43:48" + } + ] + }, + "documentation": { + "id": 8543, + "nodeType": "StructuredDocumentation", + "src": "13038:227:48", + "text": " @notice Set the percent reward that the fisherman gets when slashing occurs.\n @dev Update the reward percentage to `_percentage`\n @param fishermanRewardCut_ Reward as a percentage of indexer stake" + }, + "functionSelector": "76c993ae", + "id": 8556, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8549, + "kind": "modifierInvocation", + "modifierName": { + "id": 8548, + "name": "onlyOwner", + "nameLocations": [ + "13347:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "13347:9:48" + }, + "nodeType": "ModifierInvocation", + "src": "13347:9:48" + } + ], + "name": "setFishermanRewardCut", + "nameLocation": "13279:21:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8547, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "13338:8:48" + }, + "parameters": { + "id": 8546, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8545, + "mutability": "mutable", + "name": "fishermanRewardCut_", + "nameLocation": "13308:19:48", + "nodeType": "VariableDeclaration", + "scope": 8556, + "src": "13301:26:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 8544, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "13301:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "13300:28:48" + }, + "returnParameters": { + "id": 8550, + "nodeType": "ParameterList", + "parameters": [], + "src": "13357:0:48" + }, + "scope": 9438, + "src": "13270:147:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10951 + ], + "body": { + "id": 8569, + "nodeType": "Block", + "src": "13667:52:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8566, + "name": "maxSlashingCut_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "13696:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 8565, + "name": "_setMaxSlashingCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9334, + "src": "13677:18:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", + "typeString": "function (uint32)" + } + }, + "id": 8567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13677:35:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8568, + "nodeType": "ExpressionStatement", + "src": "13677:35:48" + } + ] + }, + "documentation": { + "id": 8557, + "nodeType": "StructuredDocumentation", + "src": "13423:160:48", + "text": " @notice Set the maximum percentage that can be used for slashing indexers.\n @param maxSlashingCut_ Max percentage slashing for disputes" + }, + "functionSelector": "9f81a7cf", + "id": 8570, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8563, + "kind": "modifierInvocation", + "modifierName": { + "id": 8562, + "name": "onlyOwner", + "nameLocations": [ + "13657:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "13657:9:48" + }, + "nodeType": "ModifierInvocation", + "src": "13657:9:48" + } + ], + "name": "setMaxSlashingCut", + "nameLocation": "13597:17:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8561, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "13648:8:48" + }, + "parameters": { + "id": 8560, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8559, + "mutability": "mutable", + "name": "maxSlashingCut_", + "nameLocation": "13622:15:48", + "nodeType": "VariableDeclaration", + "scope": 8570, + "src": "13615:22:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 8558, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "13615:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "13614:24:48" + }, + "returnParameters": { + "id": 8564, + "nodeType": "ParameterList", + "parameters": [], + "src": "13667:0:48" + }, + "scope": 9438, + "src": "13588:131:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11005 + ], + "body": { + "id": 8583, + "nodeType": "Block", + "src": "14008:53:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8580, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8573, + "src": "14038:15:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8579, + "name": "_setSubgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9362, + "src": "14018:19:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 8581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14018:36:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8582, + "nodeType": "ExpressionStatement", + "src": "14018:36:48" + } + ] + }, + "documentation": { + "id": 8571, + "nodeType": "StructuredDocumentation", + "src": "13725:197:48", + "text": " @notice Set the subgraph service address.\n @dev Update the subgraph service to `_subgraphService`\n @param subgraphService The address of the subgraph service contract" + }, + "functionSelector": "93a90a1e", + "id": 8584, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8577, + "kind": "modifierInvocation", + "modifierName": { + "id": 8576, + "name": "onlyOwner", + "nameLocations": [ + "13998:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "13998:9:48" + }, + "nodeType": "ModifierInvocation", + "src": "13998:9:48" + } + ], + "name": "setSubgraphService", + "nameLocation": "13936:18:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8575, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "13989:8:48" + }, + "parameters": { + "id": 8574, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8573, + "mutability": "mutable", + "name": "subgraphService", + "nameLocation": "13963:15:48", + "nodeType": "VariableDeclaration", + "scope": 8584, + "src": "13955:23:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8572, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13955:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "13954:25:48" + }, + "returnParameters": { + "id": 8578, + "nodeType": "ParameterList", + "parameters": [], + "src": "14008:0:48" + }, + "scope": 9438, + "src": "13927:134:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11030 + ], + "body": { + "id": 8598, + "nodeType": "Block", + "src": "14601:47:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8595, + "name": "receipt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8588, + "src": "14633:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt memory" + } + ], + "id": 8594, + "name": "_encodeReceipt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13225, + "src": "14618:14:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Receipt_$11685_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (struct Attestation.Receipt memory) view returns (bytes32)" + } + }, + "id": 8596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14618:23:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 8593, + "id": 8597, + "nodeType": "Return", + "src": "14611:30:48" + } + ] + }, + "documentation": { + "id": 8585, + "nodeType": "StructuredDocumentation", + "src": "14067:429:48", + "text": " @notice Get the message hash that a indexer used to sign the receipt.\n Encodes a receipt using a domain separator, as described on\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\n @dev Return the message hash used to sign the receipt\n @param receipt Receipt returned by indexer and submitted by fisherman\n @return Message hash used to sign the receipt" + }, + "functionSelector": "6369df6b", + "id": 8599, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeReceipt", + "nameLocation": "14510:13:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8590, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "14574:8:48" + }, + "parameters": { + "id": 8589, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8588, + "mutability": "mutable", + "name": "receipt", + "nameLocation": "14551:7:48", + "nodeType": "VariableDeclaration", + "scope": 8599, + "src": "14524:34:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt" + }, + "typeName": { + "id": 8587, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8586, + "name": "Attestation.Receipt", + "nameLocations": [ + "14524:11:48", + "14536:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11685, + "src": "14524:19:48" + }, + "referencedDeclaration": 11685, + "src": "14524:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_storage_ptr", + "typeString": "struct Attestation.Receipt" + } + }, + "visibility": "internal" + } + ], + "src": "14523:36:48" + }, + "returnParameters": { + "id": 8593, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8592, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8599, + "src": "14592:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8591, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "14592:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "14591:9:48" + }, + "scope": 9438, + "src": "14501:147:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11010 + ], + "body": { + "id": 8608, + "nodeType": "Block", + "src": "14821:42:48", + "statements": [ + { + "expression": { + "id": 8606, + "name": "fishermanRewardCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9460, + "src": "14838:18:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "functionReturnParameters": 8605, + "id": 8607, + "nodeType": "Return", + "src": "14831:25:48" + } + ] + }, + "documentation": { + "id": 8600, + "nodeType": "StructuredDocumentation", + "src": "14654:96:48", + "text": " @notice Get the verifier cut.\n @return Verifier cut in percentage (ppm)" + }, + "functionSelector": "84633713", + "id": 8609, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVerifierCut", + "nameLocation": "14764:14:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8602, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "14795:8:48" + }, + "parameters": { + "id": 8601, + "nodeType": "ParameterList", + "parameters": [], + "src": "14778:2:48" + }, + "returnParameters": { + "id": 8605, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8604, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8609, + "src": "14813:6:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 8603, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "14813:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "14812:8:48" + }, + "scope": 9438, + "src": "14755:108:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11015 + ], + "body": { + "id": 8618, + "nodeType": "Block", + "src": "15033:37:48", + "statements": [ + { + "expression": { + "id": 8616, + "name": "disputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9454, + "src": "15050:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 8615, + "id": 8617, + "nodeType": "Return", + "src": "15043:20:48" + } + ] + }, + "documentation": { + "id": 8610, + "nodeType": "StructuredDocumentation", + "src": "14869:91:48", + "text": " @notice Get the dispute period.\n @return Dispute period in seconds" + }, + "functionSelector": "5aea0ec4", + "id": 8619, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDisputePeriod", + "nameLocation": "14974:16:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8612, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "15007:8:48" + }, + "parameters": { + "id": 8611, + "nodeType": "ParameterList", + "parameters": [], + "src": "14990:2:48" + }, + "returnParameters": { + "id": 8615, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8614, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8619, + "src": "15025:6:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 8613, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "15025:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "15024:8:48" + }, + "scope": 9438, + "src": "14965:105:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11045 + ], + "body": { + "id": 8649, + "nodeType": "Block", + "src": "15272:186:48", + "statements": [ + { + "assignments": [ + 8632 + ], + "declarations": [ + { + "constant": false, + "id": 8632, + "mutability": "mutable", + "name": "provision", + "nameLocation": "15315:9:48", + "nodeType": "VariableDeclaration", + "scope": 8649, + "src": "15282:42:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 8631, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8630, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "15282:15:48", + "15298:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "15282:25:48" + }, + "referencedDeclaration": 3718, + "src": "15282:25:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "id": 8642, + "initialValue": { + "arguments": [ + { + "id": 8636, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8622, + "src": "15356:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 8639, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "15373:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + ], + "id": 8638, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15365:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8637, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15365:7:48", + "typeDescriptions": {} + } + }, + "id": 8640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15365:24:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8633, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "15327:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 8634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15327:15:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 8635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15343:12:48", + "memberName": "getProvision", + "nodeType": "MemberAccess", + "referencedDeclaration": 2784, + "src": "15327:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", + "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" + } + }, + "id": 8641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15327:63:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15282:108:48" + }, + { + "expression": { + "arguments": [ + { + "id": 8644, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8622, + "src": "15425:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8645, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8632, + "src": "15434:9:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 8646, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15444:6:48", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 3701, + "src": "15434:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8643, + "name": "_getStakeSnapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9437, + "src": "15407:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (address,uint256) view returns (uint256)" + } + }, + "id": 8647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15407:44:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8627, + "id": 8648, + "nodeType": "Return", + "src": "15400:51:48" + } + ] + }, + "documentation": { + "id": 8620, + "nodeType": "StructuredDocumentation", + "src": "15076:107:48", + "text": " @notice Get the stake snapshot for an indexer.\n @param indexer The indexer address" + }, + "functionSelector": "c133b429", + "id": 8650, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getStakeSnapshot", + "nameLocation": "15197:16:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8624, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "15245:8:48" + }, + "parameters": { + "id": 8623, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8622, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "15222:7:48", + "nodeType": "VariableDeclaration", + "scope": 8650, + "src": "15214:15:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8621, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15214:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "15213:17:48" + }, + "returnParameters": { + "id": 8627, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8626, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8650, + "src": "15263:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8625, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15263:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15262:9:48" + }, + "scope": 9438, + "src": "15188:270:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11056 + ], + "body": { + "id": 8669, + "nodeType": "Block", + "src": "15812:78:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8665, + "name": "attestation1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8654, + "src": "15856:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + { + "id": 8666, + "name": "attestation2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8657, + "src": "15870:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + }, + { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + ], + "expression": { + "id": 8663, + "name": "Attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11920, + "src": "15829:11:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", + "typeString": "type(library Attestation)" + } + }, + "id": 8664, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15841:14:48", + "memberName": "areConflicting", + "nodeType": "MemberAccess", + "referencedDeclaration": 11783, + "src": "15829:26:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11699_memory_ptr_$_t_struct$_State_$11699_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct Attestation.State memory,struct Attestation.State memory) pure returns (bool)" + } + }, + "id": 8667, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15829:54:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 8662, + "id": 8668, + "nodeType": "Return", + "src": "15822:61:48" + } + ] + }, + "documentation": { + "id": 8651, + "nodeType": "StructuredDocumentation", + "src": "15464:169:48", + "text": " @notice Checks if two attestations are conflicting.\n @param attestation1 The first attestation\n @param attestation2 The second attestation" + }, + "functionSelector": "d36fc9d4", + "id": 8670, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "areConflictingAttestations", + "nameLocation": "15647:26:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8659, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "15788:8:48" + }, + "parameters": { + "id": 8658, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8654, + "mutability": "mutable", + "name": "attestation1", + "nameLocation": "15708:12:48", + "nodeType": "VariableDeclaration", + "scope": 8670, + "src": "15683:37:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 8653, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8652, + "name": "Attestation.State", + "nameLocations": [ + "15683:11:48", + "15695:5:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "15683:17:48" + }, + "referencedDeclaration": 11699, + "src": "15683:17:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8657, + "mutability": "mutable", + "name": "attestation2", + "nameLocation": "15755:12:48", + "nodeType": "VariableDeclaration", + "scope": 8670, + "src": "15730:37:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 8656, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8655, + "name": "Attestation.State", + "nameLocations": [ + "15730:11:48", + "15742:5:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "15730:17:48" + }, + "referencedDeclaration": 11699, + "src": "15730:17:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + } + ], + "src": "15673:100:48" + }, + "returnParameters": { + "id": 8662, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8661, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8670, + "src": "15806:4:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8660, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15806:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "15805:6:48" + }, + "scope": 9438, + "src": "15638:252:48", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10990 + ], + "body": { + "id": 8726, + "nodeType": "Block", + "src": "16187:582:48", + "statements": [ + { + "assignments": [ + 8684 + ], + "declarations": [ + { + "constant": false, + "id": 8684, + "mutability": "mutable", + "name": "dispute", + "nameLocation": "16213:7:48", + "nodeType": "VariableDeclaration", + "scope": 8726, + "src": "16197:23:48", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + }, + "typeName": { + "id": 8683, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8682, + "name": "Dispute", + "nameLocations": [ + "16197:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "16197:7:48" + }, + "referencedDeclaration": 10738, + "src": "16197:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + }, + "visibility": "internal" + } + ], + "id": 8688, + "initialValue": { + "baseExpression": { + "id": 8685, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "16223:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8687, + "indexExpression": { + "id": 8686, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8673, + "src": "16232:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16223:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16197:45:48" + }, + { + "expression": { + "id": 8695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8689, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8684, + "src": "16285:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8691, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "16293:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "16285:14:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "id": 8692, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "16302:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 8693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16318:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "16302:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 8694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "16332:8:48", + "memberName": "Rejected", + "nodeType": "MemberAccess", + "referencedDeclaration": 10714, + "src": "16302:38:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "src": "16285:55:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "id": 8696, + "nodeType": "ExpressionStatement", + "src": "16285:55:48" + }, + { + "expression": { + "arguments": [ + { + "id": 8701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "16446:30:48", + "subExpression": { + "arguments": [ + { + "id": 8699, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8684, + "src": "16468:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + ], + "id": 8698, + "name": "_isDisputeInConflict", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9390, + "src": "16447:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct IDisputeManager.Dispute memory) view returns (bool)" + } + }, + "id": 8700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16447:29:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 8703, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8673, + "src": "16529:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8704, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8684, + "src": "16540:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8705, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16548:16:48", + "memberName": "relatedDisputeId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10727, + "src": "16540:24:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8702, + "name": "DisputeManagerMustAcceptRelatedDispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10902, + "src": "16490:38:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32,bytes32) pure returns (error)" + } + }, + "id": 8706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16490:75:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8697, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "16425:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16425:150:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8708, + "nodeType": "ExpressionStatement", + "src": "16425:150:48" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 8712, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8684, + "src": "16651:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8713, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16659:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "16651:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8709, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "16626:11:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 8710, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16626:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 8711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16640:10:48", + "memberName": "burnTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "16626:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", + "typeString": "function (contract IGraphToken,uint256)" + } + }, + "id": 8714, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16626:41:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8715, + "nodeType": "ExpressionStatement", + "src": "16626:41:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 8717, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8673, + "src": "16699:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8718, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8684, + "src": "16710:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8719, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16718:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 10721, + "src": "16710:15:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8720, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8684, + "src": "16727:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8721, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16735:9:48", + "memberName": "fisherman", + "nodeType": "MemberAccess", + "referencedDeclaration": 10723, + "src": "16727:17:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8722, + "name": "dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8684, + "src": "16746:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 8723, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16754:7:48", + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "16746:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8716, + "name": "DisputeRejected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10824, + "src": "16683:15:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (bytes32,address,address,uint256)" + } + }, + "id": 8724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16683:79:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8725, + "nodeType": "EmitStatement", + "src": "16678:84:48" + } + ] + }, + "documentation": { + "id": 8671, + "nodeType": "StructuredDocumentation", + "src": "15896:183:48", + "text": " @notice The arbitrator rejects a dispute as being invalid.\n @dev Reject a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be rejected" + }, + "functionSelector": "36167e03", + "id": 8727, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8677, + "kind": "modifierInvocation", + "modifierName": { + "id": 8676, + "name": "onlyArbitrator", + "nameLocations": [ + "16142:14:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 8032, + "src": "16142:14:48" + }, + "nodeType": "ModifierInvocation", + "src": "16142:14:48" + }, + { + "arguments": [ + { + "id": 8679, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8673, + "src": "16176:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 8680, + "kind": "modifierInvocation", + "modifierName": { + "id": 8678, + "name": "onlyPendingDispute", + "nameLocations": [ + "16157:18:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 8065, + "src": "16157:18:48" + }, + "nodeType": "ModifierInvocation", + "src": "16157:29:48" + } + ], + "name": "rejectDispute", + "nameLocation": "16093:13:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8675, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "16133:8:48" + }, + "parameters": { + "id": 8674, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8673, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "16115:9:48", + "nodeType": "VariableDeclaration", + "scope": 8727, + "src": "16107:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8672, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "16107:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "16106:19:48" + }, + "returnParameters": { + "id": 8681, + "nodeType": "ParameterList", + "parameters": [], + "src": "16187:0:48" + }, + "scope": 9438, + "src": "16084:685:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 11038 + ], + "body": { + "id": 8782, + "nodeType": "Block", + "src": "17022:568:48", + "statements": [ + { + "assignments": [ + 8737 + ], + "declarations": [ + { + "constant": false, + "id": 8737, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "17112:12:48", + "nodeType": "VariableDeclaration", + "scope": 8782, + "src": "17104:20:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8736, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17104:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 8741, + "initialValue": { + "arguments": [ + { + "id": 8739, + "name": "attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8731, + "src": "17142:11:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + ], + "id": 8738, + "name": "_recoverSigner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13195, + "src": "17127:14:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11699_memory_ptr_$returns$_t_address_$", + "typeString": "function (struct Attestation.State memory) view returns (address)" + } + }, + "id": 8740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "17127:27:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17104:50:48" + }, + { + "assignments": [ + 8746 + ], + "declarations": [ + { + "constant": false, + "id": 8746, + "mutability": "mutable", + "name": "alloc", + "nameLocation": "17189:5:48", + "nodeType": "VariableDeclaration", + "scope": 8782, + "src": "17165:29:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 8745, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8744, + "name": "Allocation.State", + "nameLocations": [ + "17165:10:48", + "17176:5:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "17165:16:48" + }, + "referencedDeclaration": 11307, + "src": "17165:16:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 8751, + "initialValue": { + "arguments": [ + { + "id": 8749, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8737, + "src": "17227:12:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 8747, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "17197:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "id": 8748, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17213:13:48", + "memberName": "getAllocation", + "nodeType": "MemberAccess", + "referencedDeclaration": 11244, + "src": "17197:29:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (address) view external returns (struct Allocation.State memory)" + } + }, + "id": 8750, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "17197:43:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17165:75:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 8759, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8753, + "name": "alloc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8746, + "src": "17258:5:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 8754, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17264:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "17258:13:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 8757, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17283:1:48", + "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": 8756, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17275:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8755, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17275:7:48", + "typeDescriptions": {} + } + }, + "id": 8758, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "17275:10:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "17258:27:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 8761, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8737, + "src": "17317:12:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8760, + "name": "DisputeManagerIndexerNotFound", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10906, + "src": "17287:29:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 8762, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "17287:43:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8752, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "17250:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "17250:81:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8764, + "nodeType": "ExpressionStatement", + "src": "17250:81:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 8770, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8766, + "name": "alloc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8746, + "src": "17362:5:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 8767, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17368:20:48", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "17362:26:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8768, + "name": "attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8731, + "src": "17392:11:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8769, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17404:20:48", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11692, + "src": "17392:32:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "17362:62:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "expression": { + "id": 8772, + "name": "alloc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8746, + "src": "17482:5:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 8773, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17488:20:48", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "17482:26:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8774, + "name": "attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8731, + "src": "17510:11:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8775, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17522:20:48", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11692, + "src": "17510:32:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8771, + "name": "DisputeManagerNonMatchingSubgraphDeployment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10912, + "src": "17438:43:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32,bytes32) pure returns (error)" + } + }, + "id": 8776, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "17438:105:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8765, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "17341:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "17341:212:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8778, + "nodeType": "ExpressionStatement", + "src": "17341:212:48" + }, + { + "expression": { + "expression": { + "id": 8779, + "name": "alloc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8746, + "src": "17570:5:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 8780, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17576:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "17570:13:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 8735, + "id": 8781, + "nodeType": "Return", + "src": "17563:20:48" + } + ] + }, + "documentation": { + "id": 8728, + "nodeType": "StructuredDocumentation", + "src": "16775:143:48", + "text": " @notice Returns the indexer that signed an attestation.\n @param attestation Attestation\n @return indexer address" + }, + "functionSelector": "c9747f51", + "id": 8783, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAttestationIndexer", + "nameLocation": "16932:21:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8731, + "mutability": "mutable", + "name": "attestation", + "nameLocation": "16979:11:48", + "nodeType": "VariableDeclaration", + "scope": 8783, + "src": "16954:36:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 8730, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8729, + "name": "Attestation.State", + "nameLocations": [ + "16954:11:48", + "16966:5:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "16954:17:48" + }, + "referencedDeclaration": 11699, + "src": "16954:17:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + } + ], + "src": "16953:38:48" + }, + "returnParameters": { + "id": 8735, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8734, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8783, + "src": "17013:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8733, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17013:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "17012:9:48" + }, + "scope": 9438, + "src": "16923:667:48", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 11022 + ], + "body": { + "id": 8800, + "nodeType": "Block", + "src": "17860:72:48", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + }, + "id": 8798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "id": 8792, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "17877:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8794, + "indexExpression": { + "id": 8793, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8786, + "src": "17886:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "17877:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "id": 8795, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17897:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "17877:26:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "expression": { + "id": 8796, + "name": "DisputeStatus", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10718, + "src": "17907:13:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 8797, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "17921:4:48", + "memberName": "Null", + "nodeType": "MemberAccess", + "referencedDeclaration": 10712, + "src": "17907:18:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "src": "17877:48:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 8791, + "id": 8799, + "nodeType": "Return", + "src": "17870:55:48" + } + ] + }, + "documentation": { + "id": 8784, + "nodeType": "StructuredDocumentation", + "src": "17596:178:48", + "text": " @notice Return whether a dispute exists or not.\n @dev Return if dispute with Id `disputeId` exists\n @param disputeId True if dispute already exists" + }, + "functionSelector": "be41f384", + "id": 8801, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isDisputeCreated", + "nameLocation": "17788:16:48", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8788, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "17836:8:48" + }, + "parameters": { + "id": 8787, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8786, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "17813:9:48", + "nodeType": "VariableDeclaration", + "scope": 8801, + "src": "17805:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8785, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "17805:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "17804:19:48" + }, + "returnParameters": { + "id": 8791, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8790, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8801, + "src": "17854:4:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8789, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "17854:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "17853:6:48" + }, + "scope": 9438, + "src": "17779:153:48", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 8912, + "nodeType": "Block", + "src": "18694:1501:48", + "statements": [ + { + "assignments": [ + 8817 + ], + "declarations": [ + { + "constant": false, + "id": 8817, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "18767:7:48", + "nodeType": "VariableDeclaration", + "scope": 8912, + "src": "18759:15:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8816, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18759:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 8821, + "initialValue": { + "arguments": [ + { + "id": 8819, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8809, + "src": "18799:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + ], + "id": 8818, + "name": "getAttestationIndexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8783, + "src": "18777:21:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11699_memory_ptr_$returns$_t_address_$", + "typeString": "function (struct Attestation.State memory) view returns (address)" + } + }, + "id": 8820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18777:35:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18759:53:48" + }, + { + "assignments": [ + 8826 + ], + "declarations": [ + { + "constant": false, + "id": 8826, + "mutability": "mutable", + "name": "provision", + "nameLocation": "18893:9:48", + "nodeType": "VariableDeclaration", + "scope": 8912, + "src": "18860:42:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 8825, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8824, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "18860:15:48", + "18876:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "18860:25:48" + }, + "referencedDeclaration": 3718, + "src": "18860:25:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "id": 8836, + "initialValue": { + "arguments": [ + { + "id": 8830, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8817, + "src": "18934:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 8833, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "18951:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + ], + "id": 8832, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "18943:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8831, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18943:7:48", + "typeDescriptions": {} + } + }, + "id": 8834, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18943:24:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8827, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "18905:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 8828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18905:15:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 8829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18921:12:48", + "memberName": "getProvision", + "nodeType": "MemberAccess", + "referencedDeclaration": 2784, + "src": "18905:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", + "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" + } + }, + "id": 8835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18905:63:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18860:108:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8838, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8826, + "src": "18986:9:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 8839, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18996:6:48", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 3701, + "src": "18986:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 8840, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19006:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "18986:21:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8842, + "name": "DisputeManagerZeroTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10863, + "src": "19009:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 8843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19009:26:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8837, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "18978:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8844, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18978:58:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8845, + "nodeType": "ExpressionStatement", + "src": "18978:58:48" + }, + { + "assignments": [ + 8847 + ], + "declarations": [ + { + "constant": false, + "id": 8847, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "19085:9:48", + "nodeType": "VariableDeclaration", + "scope": 8912, + "src": "19077:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8846, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "19077:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 8861, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 8851, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8809, + "src": "19154:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8852, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19167:10:48", + "memberName": "requestCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11688, + "src": "19154:23:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8853, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8809, + "src": "19195:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8854, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19208:11:48", + "memberName": "responseCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11690, + "src": "19195:24:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 8855, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8809, + "src": "19237:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8856, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19250:20:48", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11692, + "src": "19237:33:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 8857, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8817, + "src": "19288:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8858, + "name": "_fisherman", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8804, + "src": "19313:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 8849, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "19120:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 8850, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "19124:12:48", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "19120:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 8859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19120:217:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 8848, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "19097:9:48", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 8860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19097:250:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19077:270:48" + }, + { + "expression": { + "arguments": [ + { + "id": 8866, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "19442:28:48", + "subExpression": { + "arguments": [ + { + "id": 8864, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8847, + "src": "19460:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8863, + "name": "isDisputeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8801, + "src": "19443:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 8865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19443:27:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 8868, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8847, + "src": "19508:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8867, + "name": "DisputeManagerDisputeAlreadyCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10894, + "src": "19472:35:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32) pure returns (error)" + } + }, + "id": 8869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19472:46:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8862, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "19434:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19434:85:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8871, + "nodeType": "ExpressionStatement", + "src": "19434:85:48" + }, + { + "assignments": [ + 8873 + ], + "declarations": [ + { + "constant": false, + "id": 8873, + "mutability": "mutable", + "name": "stakeSnapshot", + "nameLocation": "19563:13:48", + "nodeType": "VariableDeclaration", + "scope": 8912, + "src": "19555:21:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8872, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19555:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8879, + "initialValue": { + "arguments": [ + { + "id": 8875, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8817, + "src": "19597:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 8876, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8826, + "src": "19606:9:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 8877, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19616:6:48", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 3701, + "src": "19606:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8874, + "name": "_getStakeSnapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9437, + "src": "19579:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (address,uint256) view returns (uint256)" + } + }, + "id": 8878, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19579:44:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19555:68:48" + }, + { + "expression": { + "id": 8897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 8880, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "19633:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 8882, + "indexExpression": { + "id": 8881, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8847, + "src": "19642:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "19633:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8884, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8817, + "src": "19676:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8885, + "name": "_fisherman", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8804, + "src": "19697:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8886, + "name": "_deposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8806, + "src": "19721:8:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "30", + "id": 8887, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19743:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "expression": { + "id": 8888, + "name": "DisputeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10710, + "src": "19781:11:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeType_$10710_$", + "typeString": "type(enum IDisputeManager.DisputeType)" + } + }, + "id": 8889, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "19793:12:48", + "memberName": "QueryDispute", + "nodeType": "MemberAccess", + "referencedDeclaration": 10709, + "src": "19781:24:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeType_$10710", + "typeString": "enum IDisputeManager.DisputeType" + } + }, + { + "expression": { + "expression": { + "id": 8890, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "19819:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 8891, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19835:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "19819:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 8892, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "19849:7:48", + "memberName": "Pending", + "nodeType": "MemberAccess", + "referencedDeclaration": 10716, + "src": "19819:37:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + { + "expression": { + "id": 8893, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "19870:5:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19876:9:48", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "19870:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8895, + "name": "stakeSnapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8873, + "src": "19899:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_enum$_DisputeType_$10710", + "typeString": "enum IDisputeManager.DisputeType" + }, + { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8883, + "name": "Dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10738, + "src": "19655:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Dispute_$10738_storage_ptr_$", + "typeString": "type(struct IDisputeManager.Dispute storage pointer)" + } + }, + "id": 8896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19655:267:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute memory" + } + }, + "src": "19633:289:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "id": 8898, + "nodeType": "ExpressionStatement", + "src": "19633:289:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 8900, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8847, + "src": "19971:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 8901, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8817, + "src": "19994:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8902, + "name": "_fisherman", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8804, + "src": "20015:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8903, + "name": "_deposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8806, + "src": "20039:8:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 8904, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8809, + "src": "20061:12:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 8905, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "20074:20:48", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11692, + "src": "20061:33:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 8906, + "name": "_attestationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8811, + "src": "20108:16:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 8907, + "name": "stakeSnapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8873, + "src": "20138:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8899, + "name": "QueryDisputeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10785, + "src": "19938:19:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$", + "typeString": "function (bytes32,address,address,uint256,bytes32,bytes memory,uint256)" + } + }, + "id": 8908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19938:223:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8909, + "nodeType": "EmitStatement", + "src": "19933:228:48" + }, + { + "expression": { + "id": 8910, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8847, + "src": "20179:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 8815, + "id": 8911, + "nodeType": "Return", + "src": "20172:16:48" + } + ] + }, + "documentation": { + "id": 8802, + "nodeType": "StructuredDocumentation", + "src": "17938:535:48", + "text": " @notice Create a query dispute passing the parsed attestation.\n To be used in createQueryDispute() and createQueryDisputeConflict()\n to avoid calling parseAttestation() multiple times\n `attestationData` is only passed to be emitted\n @param _fisherman Creator of dispute\n @param _deposit Amount of tokens staked as deposit\n @param _attestation Attestation struct parsed from bytes\n @param _attestationData Attestation bytes submitted by the fisherman\n @return DisputeId" + }, + "id": 8913, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_createQueryDisputeWithAttestation", + "nameLocation": "18487:34:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8812, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8804, + "mutability": "mutable", + "name": "_fisherman", + "nameLocation": "18539:10:48", + "nodeType": "VariableDeclaration", + "scope": 8913, + "src": "18531:18:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8803, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18531:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8806, + "mutability": "mutable", + "name": "_deposit", + "nameLocation": "18567:8:48", + "nodeType": "VariableDeclaration", + "scope": 8913, + "src": "18559:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8805, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18559:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8809, + "mutability": "mutable", + "name": "_attestation", + "nameLocation": "18610:12:48", + "nodeType": "VariableDeclaration", + "scope": 8913, + "src": "18585:37:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 8808, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8807, + "name": "Attestation.State", + "nameLocations": [ + "18585:11:48", + "18597:5:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "18585:17:48" + }, + "referencedDeclaration": 11699, + "src": "18585:17:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8811, + "mutability": "mutable", + "name": "_attestationData", + "nameLocation": "18645:16:48", + "nodeType": "VariableDeclaration", + "scope": 8913, + "src": "18632:29:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8810, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "18632:5:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "18521:146:48" + }, + "returnParameters": { + "id": 8815, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8814, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 8913, + "src": "18685:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8813, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "18685:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "18684:9:48" + }, + "scope": 9438, + "src": "18478:1717:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9039, + "nodeType": "Block", + "src": "20668:1283:48", + "statements": [ + { + "assignments": [ + 8928 + ], + "declarations": [ + { + "constant": false, + "id": 8928, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "20716:9:48", + "nodeType": "VariableDeclaration", + "scope": 9039, + "src": "20708:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8927, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "20708:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 8936, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 8932, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8920, + "src": "20755:13:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8933, + "name": "_poi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8922, + "src": "20770:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 8930, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "20738:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 8931, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "20742:12:48", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "20738:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 8934, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20738:37:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 8929, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "20728:9:48", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 8935, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20728:48:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20708:68:48" + }, + { + "expression": { + "arguments": [ + { + "id": 8941, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "20853:28:48", + "subExpression": { + "arguments": [ + { + "id": 8939, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8928, + "src": "20871:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8938, + "name": "isDisputeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8801, + "src": "20854:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 8940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20854:27:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 8943, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8928, + "src": "20919:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 8942, + "name": "DisputeManagerDisputeAlreadyCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10894, + "src": "20883:35:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", + "typeString": "function (bytes32) pure returns (error)" + } + }, + "id": 8944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20883:46:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8937, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "20845:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20845:85:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8946, + "nodeType": "ExpressionStatement", + "src": "20845:85:48" + }, + { + "assignments": [ + 8951 + ], + "declarations": [ + { + "constant": false, + "id": 8951, + "mutability": "mutable", + "name": "alloc", + "nameLocation": "20998:5:48", + "nodeType": "VariableDeclaration", + "scope": 9039, + "src": "20974:29:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 8950, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8949, + "name": "Allocation.State", + "nameLocations": [ + "20974:10:48", + "20985:5:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "20974:16:48" + }, + "referencedDeclaration": 11307, + "src": "20974:16:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 8956, + "initialValue": { + "arguments": [ + { + "id": 8954, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8920, + "src": "21036:13:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 8952, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "21006:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "id": 8953, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21022:13:48", + "memberName": "getAllocation", + "nodeType": "MemberAccess", + "referencedDeclaration": 11244, + "src": "21006:29:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (address) view external returns (struct Allocation.State memory)" + } + }, + "id": 8955, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21006:44:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20974:76:48" + }, + { + "assignments": [ + 8958 + ], + "declarations": [ + { + "constant": false, + "id": 8958, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "21068:7:48", + "nodeType": "VariableDeclaration", + "scope": 9039, + "src": "21060:15:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8957, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21060:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 8961, + "initialValue": { + "expression": { + "id": 8959, + "name": "alloc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8951, + "src": "21078:5:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 8960, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21084:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "21078:13:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21060:31:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 8968, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8963, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8958, + "src": "21109:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 8966, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21128:1:48", + "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": 8965, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "21120:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8964, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21120:7:48", + "typeDescriptions": {} + } + }, + "id": 8967, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21120:10:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "21109:21:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 8970, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8920, + "src": "21162:13:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8969, + "name": "DisputeManagerIndexerNotFound", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10906, + "src": "21132:29:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 8971, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21132:44:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8962, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "21101:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21101:76:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8973, + "nodeType": "ExpressionStatement", + "src": "21101:76:48" + }, + { + "assignments": [ + 8978 + ], + "declarations": [ + { + "constant": false, + "id": 8978, + "mutability": "mutable", + "name": "provision", + "nameLocation": "21263:9:48", + "nodeType": "VariableDeclaration", + "scope": 9039, + "src": "21230:42:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 8977, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 8976, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "21230:15:48", + "21246:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "21230:25:48" + }, + "referencedDeclaration": 3718, + "src": "21230:25:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "id": 8988, + "initialValue": { + "arguments": [ + { + "id": 8982, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8958, + "src": "21304:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 8985, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "21321:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + ], + "id": 8984, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "21313:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8983, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21313:7:48", + "typeDescriptions": {} + } + }, + "id": 8986, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21313:24:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8979, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "21275:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 8980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21275:15:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 8981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21291:12:48", + "memberName": "getProvision", + "nodeType": "MemberAccess", + "referencedDeclaration": 2784, + "src": "21275:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", + "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" + } + }, + "id": 8987, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21275:63:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21230:108:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8990, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8978, + "src": "21356:9:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 8991, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21366:6:48", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 3701, + "src": "21356:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 8992, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21376:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "21356:21:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8994, + "name": "DisputeManagerZeroTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10863, + "src": "21379:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 8995, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21379:26:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 8989, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "21348:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 8996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21348:58:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8997, + "nodeType": "ExpressionStatement", + "src": "21348:58:48" + }, + { + "assignments": [ + 8999 + ], + "declarations": [ + { + "constant": false, + "id": 8999, + "mutability": "mutable", + "name": "stakeSnapshot", + "nameLocation": "21450:13:48", + "nodeType": "VariableDeclaration", + "scope": 9039, + "src": "21442:21:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8998, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21442:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9005, + "initialValue": { + "arguments": [ + { + "id": 9001, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8958, + "src": "21484:7:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 9002, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8978, + "src": "21493:9:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 9003, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21503:6:48", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 3701, + "src": "21493:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9000, + "name": "_getStakeSnapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9437, + "src": "21466:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (address,uint256) view returns (uint256)" + } + }, + "id": 9004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21466:44:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21442:68:48" + }, + { + "expression": { + "id": 9024, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 9006, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "21520:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 9008, + "indexExpression": { + "id": 9007, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8928, + "src": "21529:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "21520:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 9010, + "name": "alloc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8951, + "src": "21563:5:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 9011, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21569:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "21563:13:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9012, + "name": "_fisherman", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8916, + "src": "21590:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9013, + "name": "_deposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8918, + "src": "21614:8:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "30", + "id": 9014, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21636:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "expression": { + "id": 9015, + "name": "DisputeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10710, + "src": "21651:11:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeType_$10710_$", + "typeString": "type(enum IDisputeManager.DisputeType)" + } + }, + "id": 9016, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "21663:15:48", + "memberName": "IndexingDispute", + "nodeType": "MemberAccess", + "referencedDeclaration": 10708, + "src": "21651:27:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeType_$10710", + "typeString": "enum IDisputeManager.DisputeType" + } + }, + { + "expression": { + "expression": { + "id": 9017, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "21692:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 9018, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21708:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "21692:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 9019, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "21722:7:48", + "memberName": "Pending", + "nodeType": "MemberAccess", + "referencedDeclaration": 10716, + "src": "21692:37:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + { + "expression": { + "id": 9020, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "21743:5:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 9021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21749:9:48", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "21743:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9022, + "name": "stakeSnapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8999, + "src": "21772:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_enum$_DisputeType_$10710", + "typeString": "enum IDisputeManager.DisputeType" + }, + { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9009, + "name": "Dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10738, + "src": "21542:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Dispute_$10738_storage_ptr_$", + "typeString": "type(struct IDisputeManager.Dispute storage pointer)" + } + }, + "id": 9023, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21542:253:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute memory" + } + }, + "src": "21520:275:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "id": 9025, + "nodeType": "ExpressionStatement", + "src": "21520:275:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9027, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8928, + "src": "21834:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 9028, + "name": "alloc", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8951, + "src": "21845:5:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 9029, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21851:7:48", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "21845:13:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9030, + "name": "_fisherman", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8916, + "src": "21860:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9031, + "name": "_deposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8918, + "src": "21872:8:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9032, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8920, + "src": "21882:13:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9033, + "name": "_poi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8922, + "src": "21897:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 9034, + "name": "stakeSnapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8999, + "src": "21903:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9026, + "name": "IndexingDisputeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10802, + "src": "21811:22:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes32_$_t_uint256_$returns$__$", + "typeString": "function (bytes32,address,address,uint256,address,bytes32,uint256)" + } + }, + "id": 9035, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21811:106:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9036, + "nodeType": "EmitStatement", + "src": "21806:111:48" + }, + { + "expression": { + "id": 9037, + "name": "disputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8928, + "src": "21935:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 8926, + "id": 9038, + "nodeType": "Return", + "src": "21928:16:48" + } + ] + }, + "documentation": { + "id": 8914, + "nodeType": "StructuredDocumentation", + "src": "20201:277:48", + "text": " @notice Create indexing dispute internal function.\n @param _fisherman The fisherman creating the dispute\n @param _deposit Amount of tokens staked as deposit\n @param _allocationId Allocation disputed\n @param _poi The POI being disputed" + }, + "id": 9040, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_createIndexingDisputeWithAllocation", + "nameLocation": "20492:36:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8923, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8916, + "mutability": "mutable", + "name": "_fisherman", + "nameLocation": "20546:10:48", + "nodeType": "VariableDeclaration", + "scope": 9040, + "src": "20538:18:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8915, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20538:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8918, + "mutability": "mutable", + "name": "_deposit", + "nameLocation": "20574:8:48", + "nodeType": "VariableDeclaration", + "scope": 9040, + "src": "20566:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8917, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20566:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8920, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "20600:13:48", + "nodeType": "VariableDeclaration", + "scope": 9040, + "src": "20592:21:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8919, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20592:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8922, + "mutability": "mutable", + "name": "_poi", + "nameLocation": "20631:4:48", + "nodeType": "VariableDeclaration", + "scope": 9040, + "src": "20623:12:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8921, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "20623:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "20528:113:48" + }, + "returnParameters": { + "id": 8926, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8925, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 9040, + "src": "20659:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8924, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "20659:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "20658:9:48" + }, + "scope": 9438, + "src": "20483:1468:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9078, + "nodeType": "Block", + "src": "22213:322:48", + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 9050, + "name": "_dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "22248:8:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute memory" + } + ], + "id": 9049, + "name": "_isDisputeInConflict", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9390, + "src": "22227:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct IDisputeManager.Dispute memory) view returns (bool)" + } + }, + "id": 9051, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "22227:30:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9075, + "nodeType": "IfStatement", + "src": "22223:284:48", + "trueBody": { + "id": 9074, + "nodeType": "Block", + "src": "22259:248:48", + "statements": [ + { + "assignments": [ + 9053 + ], + "declarations": [ + { + "constant": false, + "id": 9053, + "mutability": "mutable", + "name": "relatedDisputeId", + "nameLocation": "22281:16:48", + "nodeType": "VariableDeclaration", + "scope": 9074, + "src": "22273:24:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9052, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "22273:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 9056, + "initialValue": { + "expression": { + "id": 9054, + "name": "_dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "22300:8:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute memory" + } + }, + "id": 9055, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "22309:16:48", + "memberName": "relatedDisputeId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10727, + "src": "22300:25:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22273:52:48" + }, + { + "assignments": [ + 9059 + ], + "declarations": [ + { + "constant": false, + "id": 9059, + "mutability": "mutable", + "name": "relatedDispute", + "nameLocation": "22355:14:48", + "nodeType": "VariableDeclaration", + "scope": 9074, + "src": "22339:30:48", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + }, + "typeName": { + "id": 9058, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9057, + "name": "Dispute", + "nameLocations": [ + "22339:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "22339:7:48" + }, + "referencedDeclaration": 10738, + "src": "22339:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + }, + "visibility": "internal" + } + ], + "id": 9063, + "initialValue": { + "baseExpression": { + "id": 9060, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "22372:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 9062, + "indexExpression": { + "id": 9061, + "name": "relatedDisputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9053, + "src": "22381:16:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "22372:26:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22339:59:48" + }, + { + "expression": { + "id": 9070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 9064, + "name": "relatedDispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9059, + "src": "22412:14:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 9066, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "22427:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "22412:21:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "id": 9067, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "22436:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 9068, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "22452:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "22436:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 9069, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "22466:5:48", + "memberName": "Drawn", + "nodeType": "MemberAccess", + "referencedDeclaration": 10715, + "src": "22436:35:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "src": "22412:59:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "id": 9071, + "nodeType": "ExpressionStatement", + "src": "22412:59:48" + }, + { + "expression": { + "hexValue": "74727565", + "id": 9072, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22492:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 9048, + "id": 9073, + "nodeType": "Return", + "src": "22485:11:48" + } + ] + } + }, + { + "expression": { + "hexValue": "66616c7365", + "id": 9076, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22523:5:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 9048, + "id": 9077, + "nodeType": "Return", + "src": "22516:12:48" + } + ] + }, + "documentation": { + "id": 9041, + "nodeType": "StructuredDocumentation", + "src": "21957:171:48", + "text": " @notice Draw the conflicting dispute if there is any for the one passed to this function.\n @param _dispute Dispute\n @return True if resolved" + }, + "id": 9079, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_drawDisputeInConflict", + "nameLocation": "22142:22:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9045, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9044, + "mutability": "mutable", + "name": "_dispute", + "nameLocation": "22180:8:48", + "nodeType": "VariableDeclaration", + "scope": 9079, + "src": "22165:23:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute" + }, + "typeName": { + "id": 9043, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9042, + "name": "Dispute", + "nameLocations": [ + "22165:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "22165:7:48" + }, + "referencedDeclaration": 10738, + "src": "22165:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + }, + "visibility": "internal" + } + ], + "src": "22164:25:48" + }, + "returnParameters": { + "id": 9048, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9047, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 9079, + "src": "22207:4:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9046, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "22207:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "22206:6:48" + }, + "scope": 9438, + "src": "22133:402:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9117, + "nodeType": "Block", + "src": "22802:326:48", + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 9089, + "name": "_dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9083, + "src": "22837:8:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute memory" + } + ], + "id": 9088, + "name": "_isDisputeInConflict", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9390, + "src": "22816:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct IDisputeManager.Dispute memory) view returns (bool)" + } + }, + "id": 9090, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "22816:30:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9114, + "nodeType": "IfStatement", + "src": "22812:288:48", + "trueBody": { + "id": 9113, + "nodeType": "Block", + "src": "22848:252:48", + "statements": [ + { + "assignments": [ + 9092 + ], + "declarations": [ + { + "constant": false, + "id": 9092, + "mutability": "mutable", + "name": "relatedDisputeId", + "nameLocation": "22870:16:48", + "nodeType": "VariableDeclaration", + "scope": 9113, + "src": "22862:24:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9091, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "22862:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 9095, + "initialValue": { + "expression": { + "id": 9093, + "name": "_dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9083, + "src": "22889:8:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute memory" + } + }, + "id": 9094, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "22898:16:48", + "memberName": "relatedDisputeId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10727, + "src": "22889:25:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22862:52:48" + }, + { + "assignments": [ + 9098 + ], + "declarations": [ + { + "constant": false, + "id": 9098, + "mutability": "mutable", + "name": "relatedDispute", + "nameLocation": "22944:14:48", + "nodeType": "VariableDeclaration", + "scope": 9113, + "src": "22928:30:48", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + }, + "typeName": { + "id": 9097, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9096, + "name": "Dispute", + "nameLocations": [ + "22928:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "22928:7:48" + }, + "referencedDeclaration": 10738, + "src": "22928:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + }, + "visibility": "internal" + } + ], + "id": 9102, + "initialValue": { + "baseExpression": { + "id": 9099, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "22961:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 9101, + "indexExpression": { + "id": 9100, + "name": "relatedDisputeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9092, + "src": "22970:16:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "22961:26:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22928:59:48" + }, + { + "expression": { + "id": 9109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 9103, + "name": "relatedDispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9098, + "src": "23001:14:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute storage pointer" + } + }, + "id": 9105, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "23016:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "23001:21:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "id": 9106, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "23025:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 9107, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23041:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "23025:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 9108, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "23055:9:48", + "memberName": "Cancelled", + "nodeType": "MemberAccess", + "referencedDeclaration": 10717, + "src": "23025:39:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "src": "23001:63:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "id": 9110, + "nodeType": "ExpressionStatement", + "src": "23001:63:48" + }, + { + "expression": { + "hexValue": "74727565", + "id": 9111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23085:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 9087, + "id": 9112, + "nodeType": "Return", + "src": "23078:11:48" + } + ] + } + }, + { + "expression": { + "hexValue": "66616c7365", + "id": 9115, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23116:5:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 9087, + "id": 9116, + "nodeType": "Return", + "src": "23109:12:48" + } + ] + }, + "documentation": { + "id": 9080, + "nodeType": "StructuredDocumentation", + "src": "22541:174:48", + "text": " @notice Cancel the conflicting dispute if there is any for the one passed to this function.\n @param _dispute Dispute\n @return True if cancelled" + }, + "id": 9118, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_cancelDisputeInConflict", + "nameLocation": "22729:24:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9084, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9083, + "mutability": "mutable", + "name": "_dispute", + "nameLocation": "22769:8:48", + "nodeType": "VariableDeclaration", + "scope": 9118, + "src": "22754:23:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute" + }, + "typeName": { + "id": 9082, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9081, + "name": "Dispute", + "nameLocations": [ + "22754:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "22754:7:48" + }, + "referencedDeclaration": 10738, + "src": "22754:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + }, + "visibility": "internal" + } + ], + "src": "22753:25:48" + }, + "returnParameters": { + "id": 9087, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9086, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 9118, + "src": "22796:4:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9085, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "22796:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "22795:6:48" + }, + "scope": 9438, + "src": "22720:408:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9130, + "nodeType": "Block", + "src": "23252:139:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 9125, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "23357:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9126, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23361:6:48", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "23357:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9127, + "name": "disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9457, + "src": "23369:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9122, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "23332:11:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 9123, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23332:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 9124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23346:10:48", + "memberName": "pullTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 552, + "src": "23332:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", + "typeString": "function (contract IGraphToken,address,uint256)" + } + }, + "id": 9128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23332:52:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9129, + "nodeType": "ExpressionStatement", + "src": "23332:52:48" + } + ] + }, + "documentation": { + "id": 9119, + "nodeType": "StructuredDocumentation", + "src": "23134:72:48", + "text": " @notice Pull `disputeDeposit` from fisherman account." + }, + "id": 9131, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_pullFishermanDeposit", + "nameLocation": "23220:21:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9120, + "nodeType": "ParameterList", + "parameters": [], + "src": "23241:2:48" + }, + "returnParameters": { + "id": 9121, + "nodeType": "ParameterList", + "parameters": [], + "src": "23252:0:48" + }, + "scope": 9438, + "src": "23211:180:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9211, + "nodeType": "Block", + "src": "23967:906:48", + "statements": [ + { + "assignments": [ + 9147 + ], + "declarations": [ + { + "constant": false, + "id": 9147, + "mutability": "mutable", + "name": "provision", + "nameLocation": "24054:9:48", + "nodeType": "VariableDeclaration", + "scope": 9211, + "src": "24021:42:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + }, + "typeName": { + "id": 9146, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9145, + "name": "IHorizonStaking.Provision", + "nameLocations": [ + "24021:15:48", + "24037:9:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3718, + "src": "24021:25:48" + }, + "referencedDeclaration": 3718, + "src": "24021:25:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", + "typeString": "struct IHorizonStakingTypes.Provision" + } + }, + "visibility": "internal" + } + ], + "id": 9157, + "initialValue": { + "arguments": [ + { + "id": 9151, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9134, + "src": "24095:8:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 9154, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "24113:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + ], + "id": 9153, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24105:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9152, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "24105:7:48", + "typeDescriptions": {} + } + }, + "id": 9155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24105:24:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9148, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "24066:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 9149, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24066:15:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 9150, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24082:12:48", + "memberName": "getProvision", + "nodeType": "MemberAccess", + "referencedDeclaration": 2784, + "src": "24066:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", + "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" + } + }, + "id": 9156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24066:64:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24021:109:48" + }, + { + "assignments": [ + 9159 + ], + "declarations": [ + { + "constant": false, + "id": 9159, + "mutability": "mutable", + "name": "maxTokensSlash", + "nameLocation": "24198:14:48", + "nodeType": "VariableDeclaration", + "scope": 9211, + "src": "24190:22:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9158, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24190:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9164, + "initialValue": { + "arguments": [ + { + "id": 9162, + "name": "maxSlashingCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9463, + "src": "24243:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "id": 9160, + "name": "_tokensStakeSnapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9138, + "src": "24215:20:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9161, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24236:6:48", + "memberName": "mulPPM", + "nodeType": "MemberAccess", + "referencedDeclaration": 4219, + "src": "24215:27:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24215:43:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24190:68:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9166, + "name": "_tokensSlash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9136, + "src": "24289:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 9167, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "24305:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "24289:17:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9171, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9169, + "name": "_tokensSlash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9136, + "src": "24310:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 9170, + "name": "maxTokensSlash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9159, + "src": "24326:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "24310:30:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "24289:51:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 9174, + "name": "_tokensSlash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9136, + "src": "24387:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9175, + "name": "maxTokensSlash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9159, + "src": "24401:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9173, + "name": "DisputeManagerInvalidTokensSlash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10885, + "src": "24354:32:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 9176, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24354:62:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9165, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "24268:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24268:158:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9178, + "nodeType": "ExpressionStatement", + "src": "24268:158:48" + }, + { + "assignments": [ + 9180 + ], + "declarations": [ + { + "constant": false, + "id": 9180, + "mutability": "mutable", + "name": "maxRewardableTokens", + "nameLocation": "24602:19:48", + "nodeType": "VariableDeclaration", + "scope": 9211, + "src": "24594:27:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9179, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24594:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9187, + "initialValue": { + "arguments": [ + { + "id": 9183, + "name": "_tokensSlash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9136, + "src": "24633:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9184, + "name": "provision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9147, + "src": "24647:9:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", + "typeString": "struct IHorizonStakingTypes.Provision memory" + } + }, + "id": 9185, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24657:6:48", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 3701, + "src": "24647:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9181, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7858, + "src": "24624:4:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$7858_$", + "typeString": "type(library Math)" + } + }, + "id": 9182, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24629:3:48", + "memberName": "min", + "nodeType": "MemberAccess", + "referencedDeclaration": 7009, + "src": "24624:8:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24624:40:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24594:70:48" + }, + { + "assignments": [ + 9189 + ], + "declarations": [ + { + "constant": false, + "id": 9189, + "mutability": "mutable", + "name": "tokensRewards", + "nameLocation": "24682:13:48", + "nodeType": "VariableDeclaration", + "scope": 9211, + "src": "24674:21:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9188, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24674:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9197, + "initialValue": { + "arguments": [ + { + "id": 9195, + "name": "maxRewardableTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9180, + "src": "24733:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 9192, + "name": "fishermanRewardCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9460, + "src": "24706:18:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 9191, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24698:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 9190, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24698:7:48", + "typeDescriptions": {} + } + }, + "id": 9193, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24698:27:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24726:6:48", + "memberName": "mulPPM", + "nodeType": "MemberAccess", + "referencedDeclaration": 4219, + "src": "24698:34:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24698:55:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24674:79:48" + }, + { + "expression": { + "arguments": [ + { + "id": 9201, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9134, + "src": "24786:8:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 9204, + "name": "_tokensSlash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9136, + "src": "24807:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9205, + "name": "tokensRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9189, + "src": "24821:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9202, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "24796:3:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9203, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "24800:6:48", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "24796:10:48", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 9206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24796:39:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 9198, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "24764:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "id": 9200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24780:5:48", + "memberName": "slash", + "nodeType": "MemberAccess", + "referencedDeclaration": 1287, + "src": "24764:21:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,bytes memory) external" + } + }, + "id": 9207, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24764:72:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9208, + "nodeType": "ExpressionStatement", + "src": "24764:72:48" + }, + { + "expression": { + "id": 9209, + "name": "tokensRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9189, + "src": "24853:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9142, + "id": 9210, + "nodeType": "Return", + "src": "24846:20:48" + } + ] + }, + "documentation": { + "id": 9132, + "nodeType": "StructuredDocumentation", + "src": "23397:416:48", + "text": " @notice Make the subgraph service contract slash the indexer and reward the fisherman.\n Give the fisherman a reward equal to the fishermanRewardPercentage of slashed amount\n @param _indexer Address of the indexer\n @param _tokensSlash Amount of tokens to slash from the indexer\n @param _tokensStakeSnapshot Snapshot of the indexer's stake at the time of the dispute creation" + }, + "id": 9212, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_slashIndexer", + "nameLocation": "23827:13:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9139, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9134, + "mutability": "mutable", + "name": "_indexer", + "nameLocation": "23858:8:48", + "nodeType": "VariableDeclaration", + "scope": 9212, + "src": "23850:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9133, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23850:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9136, + "mutability": "mutable", + "name": "_tokensSlash", + "nameLocation": "23884:12:48", + "nodeType": "VariableDeclaration", + "scope": 9212, + "src": "23876:20:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9135, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23876:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9138, + "mutability": "mutable", + "name": "_tokensStakeSnapshot", + "nameLocation": "23914:20:48", + "nodeType": "VariableDeclaration", + "scope": 9212, + "src": "23906:28:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9137, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23906:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "23840:100:48" + }, + "returnParameters": { + "id": 9142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9141, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 9212, + "src": "23958:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9140, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23958:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "23957:9:48" + }, + "scope": 9438, + "src": "23818:1055:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9237, + "nodeType": "Block", + "src": "25127:162:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9219, + "name": "_arbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9215, + "src": "25145:11:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 9222, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25168:1:48", + "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": 9221, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "25160:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9220, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25160:7:48", + "typeDescriptions": {} + } + }, + "id": 9223, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "25160:10:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "25145:25:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9225, + "name": "DisputeManagerInvalidZeroAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10859, + "src": "25172:32:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 9226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "25172:34:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9218, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "25137:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "25137:70:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9228, + "nodeType": "ExpressionStatement", + "src": "25137:70:48" + }, + { + "expression": { + "id": 9231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9229, + "name": "arbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9451, + "src": "25217:10:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9230, + "name": "_arbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9215, + "src": "25230:11:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "25217:24:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9232, + "nodeType": "ExpressionStatement", + "src": "25217:24:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9234, + "name": "_arbitrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9215, + "src": "25270:11:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9233, + "name": "ArbitratorSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10743, + "src": "25256:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 9235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "25256:26:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9236, + "nodeType": "EmitStatement", + "src": "25251:31:48" + } + ] + }, + "documentation": { + "id": 9213, + "nodeType": "StructuredDocumentation", + "src": "24879:190:48", + "text": " @notice Internal: Set the arbitrator address.\n @dev Update the arbitrator to `_arbitrator`\n @param _arbitrator The address of the arbitration contract or party" + }, + "id": 9238, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setArbitrator", + "nameLocation": "25083:14:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9215, + "mutability": "mutable", + "name": "_arbitrator", + "nameLocation": "25106:11:48", + "nodeType": "VariableDeclaration", + "scope": 9238, + "src": "25098:19:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9214, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25098:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "25097:21:48" + }, + "returnParameters": { + "id": 9217, + "nodeType": "ParameterList", + "parameters": [], + "src": "25127:0:48" + }, + "scope": 9438, + "src": "25074:215:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9260, + "nodeType": "Block", + "src": "25542:167:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 9247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9245, + "name": "_disputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9241, + "src": "25560:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 9246, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25578:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "25560:19:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9248, + "name": "DisputeManagerDisputePeriodZero", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10861, + "src": "25581:31:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 9249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "25581:33:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9244, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "25552:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "25552:63:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9251, + "nodeType": "ExpressionStatement", + "src": "25552:63:48" + }, + { + "expression": { + "id": 9254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9252, + "name": "disputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9454, + "src": "25625:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9253, + "name": "_disputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9241, + "src": "25641:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "25625:30:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 9255, + "nodeType": "ExpressionStatement", + "src": "25625:30:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9257, + "name": "_disputePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9241, + "src": "25687:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 9256, + "name": "DisputePeriodSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10748, + "src": "25670:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$", + "typeString": "function (uint64)" + } + }, + "id": 9258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "25670:32:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9259, + "nodeType": "EmitStatement", + "src": "25665:37:48" + } + ] + }, + "documentation": { + "id": 9239, + "nodeType": "StructuredDocumentation", + "src": "25295:184:48", + "text": " @notice Internal: Set the dispute period.\n @dev Update the dispute period to `_disputePeriod` in seconds\n @param _disputePeriod Dispute period in seconds" + }, + "id": 9261, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setDisputePeriod", + "nameLocation": "25493:17:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9242, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9241, + "mutability": "mutable", + "name": "_disputePeriod", + "nameLocation": "25518:14:48", + "nodeType": "VariableDeclaration", + "scope": 9261, + "src": "25511:21:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 9240, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "25511:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "25510:23:48" + }, + "returnParameters": { + "id": 9243, + "nodeType": "ParameterList", + "parameters": [], + "src": "25542:0:48" + }, + "scope": 9438, + "src": "25484:225:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9284, + "nodeType": "Block", + "src": "26010:191:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9268, + "name": "_disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9264, + "src": "26028:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 9269, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26047:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "26028:20:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 9272, + "name": "_disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9264, + "src": "26086:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9271, + "name": "DisputeManagerInvalidDisputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10871, + "src": "26050:35:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256) pure returns (error)" + } + }, + "id": 9273, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "26050:52:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9267, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "26020:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "26020:83:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9275, + "nodeType": "ExpressionStatement", + "src": "26020:83:48" + }, + { + "expression": { + "id": 9278, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9276, + "name": "disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9457, + "src": "26113:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9277, + "name": "_disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9264, + "src": "26130:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26113:32:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9279, + "nodeType": "ExpressionStatement", + "src": "26113:32:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9281, + "name": "_disputeDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9264, + "src": "26178:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9280, + "name": "DisputeDepositSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10753, + "src": "26160:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 9282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "26160:34:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9283, + "nodeType": "EmitStatement", + "src": "26155:39:48" + } + ] + }, + "documentation": { + "id": 9262, + "nodeType": "StructuredDocumentation", + "src": "25715:229:48", + "text": " @notice Internal: Set the dispute deposit required to create a dispute.\n @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens\n @param _disputeDeposit The dispute deposit in Graph Tokens" + }, + "id": 9285, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setDisputeDeposit", + "nameLocation": "25958:18:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9265, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9264, + "mutability": "mutable", + "name": "_disputeDeposit", + "nameLocation": "25985:15:48", + "nodeType": "VariableDeclaration", + "scope": 9285, + "src": "25977:23:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9263, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25977:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "25976:25:48" + }, + "returnParameters": { + "id": 9266, + "nodeType": "ParameterList", + "parameters": [], + "src": "26010:0:48" + }, + "scope": 9438, + "src": "25949:252:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9308, + "nodeType": "Block", + "src": "26517:273:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 9294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9292, + "name": "_fishermanRewardCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9288, + "src": "26548:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 9293, + "name": "MAX_FISHERMAN_REWARD_CUT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8018, + "src": "26571:24:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "26548:47:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 9296, + "name": "_fishermanRewardCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9288, + "src": "26646:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 9295, + "name": "DisputeManagerInvalidFishermanReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10875, + "src": "26609:36:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint32_$returns$_t_error_$", + "typeString": "function (uint32) pure returns (error)" + } + }, + "id": 9297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "26609:57:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9291, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "26527:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "26527:149:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9299, + "nodeType": "ExpressionStatement", + "src": "26527:149:48" + }, + { + "expression": { + "id": 9302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9300, + "name": "fishermanRewardCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9460, + "src": "26686:18:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9301, + "name": "_fishermanRewardCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9288, + "src": "26707:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "26686:40:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 9303, + "nodeType": "ExpressionStatement", + "src": "26686:40:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9305, + "name": "_fishermanRewardCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9288, + "src": "26763:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 9304, + "name": "FishermanRewardCutSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10763, + "src": "26741:21:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$returns$__$", + "typeString": "function (uint32)" + } + }, + "id": 9306, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "26741:42:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9307, + "nodeType": "EmitStatement", + "src": "26736:47:48" + } + ] + }, + "documentation": { + "id": 9286, + "nodeType": "StructuredDocumentation", + "src": "26207:237:48", + "text": " @notice Internal: Set the percent reward that the fisherman gets when slashing occurs.\n @dev Update the reward percentage to `_percentage`\n @param _fishermanRewardCut Reward as a percentage of indexer stake" + }, + "id": 9309, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setFishermanRewardCut", + "nameLocation": "26458:22:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9289, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9288, + "mutability": "mutable", + "name": "_fishermanRewardCut", + "nameLocation": "26488:19:48", + "nodeType": "VariableDeclaration", + "scope": 9309, + "src": "26481:26:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 9287, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "26481:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "26480:28:48" + }, + "returnParameters": { + "id": 9290, + "nodeType": "ParameterList", + "parameters": [], + "src": "26517:0:48" + }, + "scope": 9438, + "src": "26449:341:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9333, + "nodeType": "Block", + "src": "27031:254:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9318, + "name": "_maxSlashingCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9312, + "src": "27117:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "id": 9316, + "name": "PPMMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4262, + "src": "27098:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_PPMMath_$4262_$", + "typeString": "type(library PPMMath)" + } + }, + "id": 9317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "27106:10:48", + "memberName": "isValidPPM", + "nodeType": "MemberAccess", + "referencedDeclaration": 4261, + "src": "27098:18:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) pure returns (bool)" + } + }, + "id": 9319, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "27098:35:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 9321, + "name": "_maxSlashingCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9312, + "src": "27171:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 9320, + "name": "DisputeManagerInvalidMaxSlashingCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10879, + "src": "27135:35:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint32_$returns$_t_error_$", + "typeString": "function (uint32) pure returns (error)" + } + }, + "id": 9322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "27135:52:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9315, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "27090:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "27090:98:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9324, + "nodeType": "ExpressionStatement", + "src": "27090:98:48" + }, + { + "expression": { + "id": 9327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9325, + "name": "maxSlashingCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9463, + "src": "27198:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9326, + "name": "_maxSlashingCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9312, + "src": "27215:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "27198:32:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 9328, + "nodeType": "ExpressionStatement", + "src": "27198:32:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9330, + "name": "maxSlashingCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9463, + "src": "27263:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 9329, + "name": "MaxSlashingCutSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10758, + "src": "27245:17:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$returns$__$", + "typeString": "function (uint32)" + } + }, + "id": 9331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "27245:33:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9332, + "nodeType": "EmitStatement", + "src": "27240:38:48" + } + ] + }, + "documentation": { + "id": 9310, + "nodeType": "StructuredDocumentation", + "src": "26796:170:48", + "text": " @notice Internal: Set the maximum percentage that can be used for slashing indexers.\n @param _maxSlashingCut Max percentage slashing for disputes" + }, + "id": 9334, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setMaxSlashingCut", + "nameLocation": "26980:18:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9313, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9312, + "mutability": "mutable", + "name": "_maxSlashingCut", + "nameLocation": "27006:15:48", + "nodeType": "VariableDeclaration", + "scope": 9334, + "src": "26999:22:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 9311, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "26999:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "26998:24:48" + }, + "returnParameters": { + "id": 9314, + "nodeType": "ParameterList", + "parameters": [], + "src": "27031:0:48" + }, + "scope": 9438, + "src": "26971:314:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9361, + "nodeType": "Block", + "src": "27567:205:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9341, + "name": "_subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9337, + "src": "27585:16:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 9344, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27613:1:48", + "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": 9343, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "27605:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9342, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27605:7:48", + "typeDescriptions": {} + } + }, + "id": 9345, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "27605:10:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "27585:30:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9347, + "name": "DisputeManagerInvalidZeroAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10859, + "src": "27617:32:48", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 9348, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "27617:34:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9340, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "27577:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "27577:75:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9350, + "nodeType": "ExpressionStatement", + "src": "27577:75:48" + }, + { + "expression": { + "id": 9355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9351, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "27662:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9353, + "name": "_subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9337, + "src": "27697:16:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9352, + "name": "ISubgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11280, + "src": "27680:16:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ISubgraphService_$11280_$", + "typeString": "type(contract ISubgraphService)" + } + }, + "id": 9354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "27680:34:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "src": "27662:52:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "id": 9356, + "nodeType": "ExpressionStatement", + "src": "27662:52:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9358, + "name": "_subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9337, + "src": "27748:16:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9357, + "name": "SubgraphServiceSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10768, + "src": "27729:18:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 9359, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "27729:36:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9360, + "nodeType": "EmitStatement", + "src": "27724:41:48" + } + ] + }, + "documentation": { + "id": 9335, + "nodeType": "StructuredDocumentation", + "src": "27291:208:48", + "text": " @notice Internal: Set the subgraph service address.\n @dev Update the subgraph service to `_subgraphService`\n @param _subgraphService The address of the subgraph service contract" + }, + "id": 9362, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setSubgraphService", + "nameLocation": "27513:19:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9338, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9337, + "mutability": "mutable", + "name": "_subgraphService", + "nameLocation": "27541:16:48", + "nodeType": "VariableDeclaration", + "scope": 9362, + "src": "27533:24:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9336, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27533:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "27532:26:48" + }, + "returnParameters": { + "id": 9339, + "nodeType": "ParameterList", + "parameters": [], + "src": "27567:0:48" + }, + "scope": 9438, + "src": "27504:268:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9389, + "nodeType": "Block", + "src": "28044:246:48", + "statements": [ + { + "assignments": [ + 9372 + ], + "declarations": [ + { + "constant": false, + "id": 9372, + "mutability": "mutable", + "name": "relatedId", + "nameLocation": "28062:9:48", + "nodeType": "VariableDeclaration", + "scope": 9389, + "src": "28054:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9371, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "28054:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 9375, + "initialValue": { + "expression": { + "id": 9373, + "name": "_dispute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9366, + "src": "28074:8:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute memory" + } + }, + "id": 9374, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "28083:16:48", + "memberName": "relatedDisputeId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10727, + "src": "28074:25:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28054:45:48" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 9378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9376, + "name": "relatedId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9372, + "src": "28198:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 9377, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "28211:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "28198:14:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + }, + "id": 9386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "id": 9379, + "name": "disputes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "28216:8:48", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" + } + }, + "id": 9381, + "indexExpression": { + "id": 9380, + "name": "relatedId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9372, + "src": "28225:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "28216:19:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage", + "typeString": "struct IDisputeManager.Dispute storage ref" + } + }, + "id": 9382, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "28236:6:48", + "memberName": "status", + "nodeType": "MemberAccess", + "referencedDeclaration": 10733, + "src": "28216:26:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 9383, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "28246:15:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 9384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "28262:13:48", + "memberName": "DisputeStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 10718, + "src": "28246:29:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", + "typeString": "type(enum IDisputeManager.DisputeStatus)" + } + }, + "id": 9385, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "28276:7:48", + "memberName": "Pending", + "nodeType": "MemberAccess", + "referencedDeclaration": 10716, + "src": "28246:37:48", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "src": "28216:67:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "28198:85:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 9370, + "id": 9388, + "nodeType": "Return", + "src": "28191:92:48" + } + ] + }, + "documentation": { + "id": 9363, + "nodeType": "StructuredDocumentation", + "src": "27778:178:48", + "text": " @notice Returns whether the dispute is for a conflicting attestation or not.\n @param _dispute Dispute\n @return True conflicting attestation dispute" + }, + "id": 9390, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isDisputeInConflict", + "nameLocation": "27970:20:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9367, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9366, + "mutability": "mutable", + "name": "_dispute", + "nameLocation": "28006:8:48", + "nodeType": "VariableDeclaration", + "scope": 9390, + "src": "27991:23:48", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", + "typeString": "struct IDisputeManager.Dispute" + }, + "typeName": { + "id": 9365, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9364, + "name": "Dispute", + "nameLocations": [ + "27991:7:48" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "27991:7:48" + }, + "referencedDeclaration": 10738, + "src": "27991:7:48", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + }, + "visibility": "internal" + } + ], + "src": "27990:25:48" + }, + "returnParameters": { + "id": 9370, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9369, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 9390, + "src": "28038:4:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9368, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "28038:4:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "28037:6:48" + }, + "scope": 9438, + "src": "27961:329:48", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9436, + "nodeType": "Block", + "src": "28895:349:48", + "statements": [ + { + "assignments": [ + 9401 + ], + "declarations": [ + { + "constant": false, + "id": 9401, + "mutability": "mutable", + "name": "delegatorsStake", + "nameLocation": "28913:15:48", + "nodeType": "VariableDeclaration", + "scope": 9436, + "src": "28905:23:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9400, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28905:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9412, + "initialValue": { + "expression": { + "arguments": [ + { + "id": 9405, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9393, + "src": "28965:8:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 9408, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "28983:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + ], + "id": 9407, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "28975:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9406, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "28975:7:48", + "typeDescriptions": {} + } + }, + "id": 9409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "28975:24:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9402, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "28931:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 9403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "28931:15:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 9404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "28947:17:48", + "memberName": "getDelegationPool", + "nodeType": "MemberAccess", + "referencedDeclaration": 2747, + "src": "28931:33:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_DelegationPool_$3748_memory_ptr_$", + "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.DelegationPool memory)" + } + }, + "id": 9410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "28931:69:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", + "typeString": "struct IHorizonStakingTypes.DelegationPool memory" + } + }, + "id": 9411, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "29001:6:48", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 3739, + "src": "28931:76:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28905:102:48" + }, + { + "assignments": [ + 9414 + ], + "declarations": [ + { + "constant": false, + "id": 9414, + "mutability": "mutable", + "name": "delegatorsStakeMax", + "nameLocation": "29025:18:48", + "nodeType": "VariableDeclaration", + "scope": 9436, + "src": "29017:26:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9413, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29017:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9423, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9422, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9415, + "name": "_indexerStake", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "29046:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9418, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "29070:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "id": 9419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "29086:18:48", + "memberName": "getDelegationRatio", + "nodeType": "MemberAccess", + "referencedDeclaration": 1317, + "src": "29070:34:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint32_$", + "typeString": "function () view external returns (uint32)" + } + }, + "id": 9420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "29070:36:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 9417, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "29062:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 9416, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29062:7:48", + "typeDescriptions": {} + } + }, + "id": 9421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "29062:45:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "29046:61:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "29017:90:48" + }, + { + "assignments": [ + 9425 + ], + "declarations": [ + { + "constant": false, + "id": 9425, + "mutability": "mutable", + "name": "stakeSnapshot", + "nameLocation": "29125:13:48", + "nodeType": "VariableDeclaration", + "scope": 9436, + "src": "29117:21:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9424, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29117:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9433, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9426, + "name": "_indexerStake", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "29141:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "arguments": [ + { + "id": 9429, + "name": "delegatorsStake", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9401, + "src": "29171:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9430, + "name": "delegatorsStakeMax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9414, + "src": "29188:18:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9427, + "name": "MathUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4168, + "src": "29157:9:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_MathUtils_$4168_$", + "typeString": "type(library MathUtils)" + } + }, + "id": 9428, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "29167:3:48", + "memberName": "min", + "nodeType": "MemberAccess", + "referencedDeclaration": 4146, + "src": "29157:13:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "29157:50:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "29141:66:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "29117:90:48" + }, + { + "expression": { + "id": 9434, + "name": "stakeSnapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9425, + "src": "29224:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9399, + "id": 9435, + "nodeType": "Return", + "src": "29217:20:48" + } + ] + }, + "documentation": { + "id": 9391, + "nodeType": "StructuredDocumentation", + "src": "28296:495:48", + "text": " @notice Get the total stake snapshot for and indexer.\n @dev A few considerations:\n - We include both indexer and delegators stake.\n - Thawing stake is not excluded from the snapshot.\n - Delegators stake is capped at the delegation ratio to prevent delegators from inflating the snapshot\n to increase the indexer slash amount.\n @param _indexer Indexer address\n @param _indexerStake Indexer's stake\n @return Total stake snapshot" + }, + "id": 9437, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getStakeSnapshot", + "nameLocation": "28805:17:48", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9396, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9393, + "mutability": "mutable", + "name": "_indexer", + "nameLocation": "28831:8:48", + "nodeType": "VariableDeclaration", + "scope": 9437, + "src": "28823:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9392, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "28823:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9395, + "mutability": "mutable", + "name": "_indexerStake", + "nameLocation": "28849:13:48", + "nodeType": "VariableDeclaration", + "scope": 9437, + "src": "28841:21:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28841:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "28822:41:48" + }, + "returnParameters": { + "id": 9399, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9398, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 9437, + "src": "28886:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9397, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28886:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "28885:9:48" + }, + "scope": 9438, + "src": "28796:448:48", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 9439, + "src": "2429:26817:48", + "usedErrors": [ + 4187, + 4380, + 4684, + 4689, + 4865, + 4868, + 6393, + 6398, + 6403, + 10855, + 10857, + 10859, + 10861, + 10863, + 10867, + 10871, + 10875, + 10879, + 10885, + 10890, + 10894, + 10896, + 10902, + 10906, + 10912, + 10926, + 11751 + ], + "usedEvents": [ + 4375, + 4695, + 4873, + 10743, + 10748, + 10753, + 10758, + 10763, + 10768, + 10785, + 10802, + 10813, + 10824, + 10835, + 10842, + 10853 + ] + } + ], + "src": "45:29202:48" + }, + "id": 48 + }, + "contracts/DisputeManagerStorage.sol": { + "ast": { + "absolutePath": "contracts/DisputeManagerStorage.sol", + "exportedSymbols": { + "DisputeManagerV1Storage": [ + 9470 + ], + "IDisputeManager": [ + 11057 + ], + "ISubgraphService": [ + 11280 + ] + }, + "id": 9471, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9440, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:49" + }, + { + "absolutePath": "contracts/interfaces/IDisputeManager.sol", + "file": "./interfaces/IDisputeManager.sol", + "id": 9442, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9471, + "sourceUnit": 11058, + "src": "71:67:49", + "symbolAliases": [ + { + "foreign": { + "id": 9441, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "80:15:49", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/interfaces/ISubgraphService.sol", + "file": "./interfaces/ISubgraphService.sol", + "id": 9444, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 9471, + "sourceUnit": 11281, + "src": "139:69:49", + "symbolAliases": [ + { + "foreign": { + "id": 9443, + "name": "ISubgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11280, + "src": "148:16:49", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "DisputeManagerV1Storage", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 9470, + "linearizedBaseContracts": [ + 9470 + ], + "name": "DisputeManagerV1Storage", + "nameLocation": "228:23:49", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "documentation": { + "id": 9445, + "nodeType": "StructuredDocumentation", + "src": "258:49:49", + "text": "@notice The Subgraph Service contract address" + }, + "functionSelector": "26058249", + "id": 9448, + "mutability": "mutable", + "name": "subgraphService", + "nameLocation": "336:15:49", + "nodeType": "VariableDeclaration", + "scope": 9470, + "src": "312:39:49", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + }, + "typeName": { + "id": 9447, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9446, + "name": "ISubgraphService", + "nameLocations": [ + "312:16:49" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11280, + "src": "312:16:49" + }, + "referencedDeclaration": 11280, + "src": "312:16:49", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 9449, + "nodeType": "StructuredDocumentation", + "src": "358:71:49", + "text": "@notice The arbitrator is solely in control of arbitrating disputes" + }, + "functionSelector": "6cc6cde1", + "id": 9451, + "mutability": "mutable", + "name": "arbitrator", + "nameLocation": "449:10:49", + "nodeType": "VariableDeclaration", + "scope": 9470, + "src": "434:25:49", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9450, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "434:7:49", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 9452, + "nodeType": "StructuredDocumentation", + "src": "466:37:49", + "text": "@notice dispute period in seconds" + }, + "functionSelector": "5bf31d4d", + "id": 9454, + "mutability": "mutable", + "name": "disputePeriod", + "nameLocation": "522:13:49", + "nodeType": "VariableDeclaration", + "scope": 9470, + "src": "508:27:49", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 9453, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "508:6:49", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 9455, + "nodeType": "StructuredDocumentation", + "src": "542:48:49", + "text": "@notice Deposit required to create a Dispute" + }, + "functionSelector": "29e03ff1", + "id": 9457, + "mutability": "mutable", + "name": "disputeDeposit", + "nameLocation": "610:14:49", + "nodeType": "VariableDeclaration", + "scope": 9470, + "src": "595:29:49", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9456, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "595:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 9458, + "nodeType": "StructuredDocumentation", + "src": "631:113:49", + "text": "@notice Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM." + }, + "functionSelector": "902a4938", + "id": 9460, + "mutability": "mutable", + "name": "fishermanRewardCut", + "nameLocation": "763:18:49", + "nodeType": "VariableDeclaration", + "scope": 9470, + "src": "749:32:49", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 9459, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "749:6:49", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 9461, + "nodeType": "StructuredDocumentation", + "src": "788:89:49", + "text": "@notice Maximum percentage of indexer stake that can be slashed on a dispute. In PPM." + }, + "functionSelector": "0533e1ba", + "id": 9463, + "mutability": "mutable", + "name": "maxSlashingCut", + "nameLocation": "896:14:49", + "nodeType": "VariableDeclaration", + "scope": 9470, + "src": "882:28:49", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 9462, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "882:6:49", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 9464, + "nodeType": "StructuredDocumentation", + "src": "917:36:49", + "text": "@notice List of disputes created" + }, + "functionSelector": "11be1997", + "id": 9469, + "mutability": "mutable", + "name": "disputes", + "nameLocation": "1027:8:49", + "nodeType": "VariableDeclaration", + "scope": 9470, + "src": "958:77:49", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute)" + }, + "typeName": { + "id": 9468, + "keyName": "disputeId", + "keyNameLocation": "974:9:49", + "keyType": { + "id": 9465, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "966:7:49", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "958:61:49", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", + "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute)" + }, + "valueName": "dispute", + "valueNameLocation": "1011:7:49", + "valueType": { + "id": 9467, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9466, + "name": "IDisputeManager.Dispute", + "nameLocations": [ + "987:15:49", + "1003:7:49" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10738, + "src": "987:23:49" + }, + "referencedDeclaration": 10738, + "src": "987:23:49", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", + "typeString": "struct IDisputeManager.Dispute" + } + } + }, + "visibility": "public" + } + ], + "scope": 9471, + "src": "210:828:49", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "46:993:49" + }, + "id": 49 + }, + "contracts/SubgraphService.sol": { + "ast": { + "absolutePath": "contracts/SubgraphService.sol", + "exportedSymbols": { + "Allocation": [ + 11674 + ], + "AllocationManager": [ + 13030 + ], + "DataService": [ + 696 + ], + "DataServiceFees": [ + 1052 + ], + "DataServicePausableUpgradeable": [ + 1186 + ], + "Directory": [ + 13390 + ], + "IGraphPayments": [ + 2211 + ], + "IGraphToken": [ + 518 + ], + "IRewardsIssuer": [ + 314 + ], + "ISubgraphService": [ + 11280 + ], + "ITAPCollector": [ + 2695 + ], + "Initializable": [ + 5102 + ], + "LegacyAllocation": [ + 12086 + ], + "MulticallUpgradeable": [ + 5251 + ], + "OwnableUpgradeable": [ + 4848 + ], + "PPMMath": [ + 4262 + ], + "SubgraphService": [ + 10684 + ], + "SubgraphServiceV1Storage": [ + 10701 + ], + "TokenUtils": [ + 600 + ] + }, + "id": 10685, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9472, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:50" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "file": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "id": 9474, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 2212, + "src": "70:96:50", + "symbolAliases": [ + { + "foreign": { + "id": 9473, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "79:14:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "file": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "id": 9476, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 519, + "src": "167:87:50", + "symbolAliases": [ + { + "foreign": { + "id": 9475, + "name": "IGraphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 518, + "src": "176:11:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", + "file": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", + "id": 9478, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 2696, + "src": "255:94:50", + "symbolAliases": [ + { + "foreign": { + "id": 9477, + "name": "ITAPCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2695, + "src": "264:13:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", + "file": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", + "id": 9480, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 315, + "src": "350:95:50", + "symbolAliases": [ + { + "foreign": { + "id": 9479, + "name": "IRewardsIssuer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 314, + "src": "359:14:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/interfaces/ISubgraphService.sol", + "file": "./interfaces/ISubgraphService.sol", + "id": 9482, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 11281, + "src": "446:69:50", + "symbolAliases": [ + { + "foreign": { + "id": 9481, + "name": "ISubgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11280, + "src": "455:16:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "id": 9484, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 4849, + "src": "517:103:50", + "symbolAliases": [ + { + "foreign": { + "id": 9483, + "name": "OwnableUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4848, + "src": "526:18:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol", + "id": 9486, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 5252, + "src": "621:106:50", + "symbolAliases": [ + { + "foreign": { + "id": 9485, + "name": "MulticallUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5251, + "src": "630:20:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "id": 9488, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 5103, + "src": "728:98:50", + "symbolAliases": [ + { + "foreign": { + "id": 9487, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "737:13:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol", + "file": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol", + "id": 9490, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 1187, + "src": "827:141:50", + "symbolAliases": [ + { + "foreign": { + "id": 9489, + "name": "DataServicePausableUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1186, + "src": "836:30:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataService.sol", + "file": "@graphprotocol/horizon/contracts/data-service/DataService.sol", + "id": 9492, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 697, + "src": "969:92:50", + "symbolAliases": [ + { + "foreign": { + "id": 9491, + "name": "DataService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 696, + "src": "978:11:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol", + "file": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol", + "id": 9494, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 1053, + "src": "1062:111:50", + "symbolAliases": [ + { + "foreign": { + "id": 9493, + "name": "DataServiceFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1052, + "src": "1071:15:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/utilities/Directory.sol", + "file": "./utilities/Directory.sol", + "id": 9496, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 13391, + "src": "1174:54:50", + "symbolAliases": [ + { + "foreign": { + "id": 9495, + "name": "Directory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13390, + "src": "1183:9:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/utilities/AllocationManager.sol", + "file": "./utilities/AllocationManager.sol", + "id": 9498, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 13031, + "src": "1229:70:50", + "symbolAliases": [ + { + "foreign": { + "id": 9497, + "name": "AllocationManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13030, + "src": "1238:17:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/SubgraphServiceStorage.sol", + "file": "./SubgraphServiceStorage.sol", + "id": 9500, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 10702, + "src": "1300:72:50", + "symbolAliases": [ + { + "foreign": { + "id": 9499, + "name": "SubgraphServiceV1Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10701, + "src": "1309:24:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", + "file": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", + "id": 9502, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 601, + "src": "1374:85:50", + "symbolAliases": [ + { + "foreign": { + "id": 9501, + "name": "TokenUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 600, + "src": "1383:10:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", + "file": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", + "id": 9504, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 4263, + "src": "1460:81:50", + "symbolAliases": [ + { + "foreign": { + "id": 9503, + "name": "PPMMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4262, + "src": "1469:7:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/Allocation.sol", + "file": "./libraries/Allocation.sol", + "id": 9506, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 11675, + "src": "1542:56:50", + "symbolAliases": [ + { + "foreign": { + "id": 9505, + "name": "Allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11674, + "src": "1551:10:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/LegacyAllocation.sol", + "file": "./libraries/LegacyAllocation.sol", + "id": 9508, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10685, + "sourceUnit": 12087, + "src": "1599:68:50", + "symbolAliases": [ + { + "foreign": { + "id": 9507, + "name": "LegacyAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12086, + "src": "1608:16:50", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 9510, + "name": "Initializable", + "nameLocations": [ + "1884:13:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5102, + "src": "1884:13:50" + }, + "id": 9511, + "nodeType": "InheritanceSpecifier", + "src": "1884:13:50" + }, + { + "baseName": { + "id": 9512, + "name": "OwnableUpgradeable", + "nameLocations": [ + "1903:18:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4848, + "src": "1903:18:50" + }, + "id": 9513, + "nodeType": "InheritanceSpecifier", + "src": "1903:18:50" + }, + { + "baseName": { + "id": 9514, + "name": "MulticallUpgradeable", + "nameLocations": [ + "1927:20:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5251, + "src": "1927:20:50" + }, + "id": 9515, + "nodeType": "InheritanceSpecifier", + "src": "1927:20:50" + }, + { + "baseName": { + "id": 9516, + "name": "DataService", + "nameLocations": [ + "1953:11:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 696, + "src": "1953:11:50" + }, + "id": 9517, + "nodeType": "InheritanceSpecifier", + "src": "1953:11:50" + }, + { + "baseName": { + "id": 9518, + "name": "DataServicePausableUpgradeable", + "nameLocations": [ + "1970:30:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1186, + "src": "1970:30:50" + }, + "id": 9519, + "nodeType": "InheritanceSpecifier", + "src": "1970:30:50" + }, + { + "baseName": { + "id": 9520, + "name": "DataServiceFees", + "nameLocations": [ + "2006:15:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1052, + "src": "2006:15:50" + }, + "id": 9521, + "nodeType": "InheritanceSpecifier", + "src": "2006:15:50" + }, + { + "baseName": { + "id": 9522, + "name": "Directory", + "nameLocations": [ + "2027:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 13390, + "src": "2027:9:50" + }, + "id": 9523, + "nodeType": "InheritanceSpecifier", + "src": "2027:9:50" + }, + { + "baseName": { + "id": 9524, + "name": "AllocationManager", + "nameLocations": [ + "2042:17:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 13030, + "src": "2042:17:50" + }, + "id": 9525, + "nodeType": "InheritanceSpecifier", + "src": "2042:17:50" + }, + { + "baseName": { + "id": 9526, + "name": "SubgraphServiceV1Storage", + "nameLocations": [ + "2065:24:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10701, + "src": "2065:24:50" + }, + "id": 9527, + "nodeType": "InheritanceSpecifier", + "src": "2065:24:50" + }, + { + "baseName": { + "id": 9528, + "name": "IRewardsIssuer", + "nameLocations": [ + "2095:14:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 314, + "src": "2095:14:50" + }, + "id": 9529, + "nodeType": "InheritanceSpecifier", + "src": "2095:14:50" + }, + { + "baseName": { + "id": 9530, + "name": "ISubgraphService", + "nameLocations": [ + "2115:16:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11280, + "src": "2115:16:50" + }, + "id": 9531, + "nodeType": "InheritanceSpecifier", + "src": "2115:16:50" + } + ], + "canonicalName": "SubgraphService", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 9509, + "nodeType": "StructuredDocumentation", + "src": "1669:182:50", + "text": " @title SubgraphService contract\n @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program." + }, + "fullyImplemented": true, + "id": 10684, + "internalFunctionIDs": { + "958": 1, + "970": 2, + "1028": 3 + }, + "linearizedBaseContracts": [ + 10684, + 11280, + 314, + 10701, + 13030, + 13072, + 13390, + 1052, + 1381, + 1081, + 1186, + 1409, + 696, + 1318, + 704, + 2128, + 2158, + 4653, + 5771, + 5796, + 5427, + 5251, + 4848, + 5148, + 5102 + ], + "name": "SubgraphService", + "nameLocation": "1861:15:50", + "nodeType": "ContractDefinition", + "nodes": [ + { + "global": false, + "id": 9534, + "libraryName": { + "id": 9532, + "name": "PPMMath", + "nameLocations": [ + "2144:7:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4262, + "src": "2144:7:50" + }, + "nodeType": "UsingForDirective", + "src": "2138:26:50", + "typeName": { + "id": 9533, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2156:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "global": false, + "id": 9540, + "libraryName": { + "id": 9535, + "name": "Allocation", + "nameLocations": [ + "2175:10:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11674, + "src": "2175:10:50" + }, + "nodeType": "UsingForDirective", + "src": "2169:58:50", + "typeName": { + "id": 9539, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 9536, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2198:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2190:36:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 9538, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9537, + "name": "Allocation.State", + "nameLocations": [ + "2209:10:50", + "2220:5:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "2209:16:50" + }, + "referencedDeclaration": 11307, + "src": "2209:16:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + } + }, + { + "global": false, + "id": 9544, + "libraryName": { + "id": 9541, + "name": "Allocation", + "nameLocations": [ + "2238:10:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11674, + "src": "2238:10:50" + }, + "nodeType": "UsingForDirective", + "src": "2232:38:50", + "typeName": { + "id": 9543, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9542, + "name": "Allocation.State", + "nameLocations": [ + "2253:10:50", + "2264:5:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "2253:16:50" + }, + "referencedDeclaration": 11307, + "src": "2253:16:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + { + "global": false, + "id": 9548, + "libraryName": { + "id": 9545, + "name": "TokenUtils", + "nameLocations": [ + "2281:10:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 600, + "src": "2281:10:50" + }, + "nodeType": "UsingForDirective", + "src": "2275:33:50", + "typeName": { + "id": 9547, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9546, + "name": "IGraphToken", + "nameLocations": [ + "2296:11:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 518, + "src": "2296:11:50" + }, + "referencedDeclaration": 518, + "src": "2296:11:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + } + }, + { + "body": { + "id": 9566, + "nodeType": "Block", + "src": "2479:118:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "id": 9554, + "name": "indexers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10694, + "src": "2497:8:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", + "typeString": "mapping(address => struct ISubgraphService.Indexer storage ref)" + } + }, + "id": 9556, + "indexExpression": { + "id": 9555, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9551, + "src": "2506:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2497:17:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Indexer_$11078_storage", + "typeString": "struct ISubgraphService.Indexer storage ref" + } + }, + "id": 9557, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2515:12:50", + "memberName": "registeredAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11073, + "src": "2497:30:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 9558, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2531:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2497:35:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 9561, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9551, + "src": "2570:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9560, + "name": "SubgraphServiceIndexerNotRegistered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11116, + "src": "2534:35:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 9562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2534:44:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9553, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2489:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2489:90:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9564, + "nodeType": "ExpressionStatement", + "src": "2489:90:50" + }, + { + "id": 9565, + "nodeType": "PlaceholderStatement", + "src": "2589:1:50" + } + ] + }, + "documentation": { + "id": 9549, + "nodeType": "StructuredDocumentation", + "src": "2314:112:50", + "text": " @notice Checks that an indexer is registered\n @param indexer The address of the indexer" + }, + "id": 9567, + "name": "onlyRegisteredIndexer", + "nameLocation": "2440:21:50", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 9552, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9551, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "2470:7:50", + "nodeType": "VariableDeclaration", + "scope": 9567, + "src": "2462:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9550, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2462:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2461:17:50" + }, + "src": "2431:166:50", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9594, + "nodeType": "Block", + "src": "3273:39:50", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9591, + "name": "_disableInitializers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5070, + "src": "3283:20:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3283:22:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9593, + "nodeType": "ExpressionStatement", + "src": "3283:22:50" + } + ] + }, + "documentation": { + "id": 9568, + "nodeType": "StructuredDocumentation", + "src": "2603:432:50", + "text": " @notice Constructor for the SubgraphService contract\n @dev DataService and Directory constructors set a bunch of immutable variables\n @param graphController The address of the Graph Controller contract\n @param disputeManager The address of the DisputeManager contract\n @param tapCollector The address of the TAPCollector contract\n @param curation The address of the Curation contract" + }, + "id": 9595, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 9579, + "name": "graphController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9570, + "src": "3191:15:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9580, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 9578, + "name": "DataService", + "nameLocations": [ + "3179:11:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 696, + "src": "3179:11:50" + }, + "nodeType": "ModifierInvocation", + "src": "3179:28:50" + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 9584, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3226:4:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SubgraphService_$10684", + "typeString": "contract SubgraphService" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_SubgraphService_$10684", + "typeString": "contract SubgraphService" + } + ], + "id": 9583, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3218:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9582, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3218:7:50", + "typeDescriptions": {} + } + }, + "id": 9585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3218:13:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9586, + "name": "disputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9572, + "src": "3233:14:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9587, + "name": "tapCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9574, + "src": "3249:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9588, + "name": "curation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9576, + "src": "3263:8:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9589, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 9581, + "name": "Directory", + "nameLocations": [ + "3208:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 13390, + "src": "3208:9:50" + }, + "nodeType": "ModifierInvocation", + "src": "3208:64:50" + } + ], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9577, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9570, + "mutability": "mutable", + "name": "graphController", + "nameLocation": "3069:15:50", + "nodeType": "VariableDeclaration", + "scope": 9595, + "src": "3061:23:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9569, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3061:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9572, + "mutability": "mutable", + "name": "disputeManager", + "nameLocation": "3102:14:50", + "nodeType": "VariableDeclaration", + "scope": 9595, + "src": "3094:22:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9571, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3094:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9574, + "mutability": "mutable", + "name": "tapCollector", + "nameLocation": "3134:12:50", + "nodeType": "VariableDeclaration", + "scope": 9595, + "src": "3126:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9573, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3126:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9576, + "mutability": "mutable", + "name": "curation", + "nameLocation": "3164:8:50", + "nodeType": "VariableDeclaration", + "scope": 9595, + "src": "3156:16:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9575, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3156:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3051:127:50" + }, + "returnParameters": { + "id": 9590, + "nodeType": "ParameterList", + "parameters": [], + "src": "3273:0:50" + }, + "scope": 10684, + "src": "3040:272:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 9643, + "nodeType": "Block", + "src": "4026:378:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 9608, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4051:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9609, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4055:6:50", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4051:10:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9607, + "name": "__Ownable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4708, + "src": "4036:14:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 9610, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4036:26:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9611, + "nodeType": "ExpressionStatement", + "src": "4036:26:50" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9612, + "name": "__Multicall_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5167, + "src": "4072:16:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4072:18:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9614, + "nodeType": "ExpressionStatement", + "src": "4072:18:50" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9615, + "name": "__DataService_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 642, + "src": "4100:18:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4100:20:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9617, + "nodeType": "ExpressionStatement", + "src": "4100:20:50" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9618, + "name": "__DataServicePausable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1156, + "src": "4130:26:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4130:28:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9620, + "nodeType": "ExpressionStatement", + "src": "4130:28:50" + }, + { + "expression": { + "arguments": [ + { + "hexValue": "537562677261706853657276696365", + "id": 9622, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4193:17:50", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_de968410163c85e985eeb4fbd7957aae2a5a7499745e7a8f1fd22402a4e5c8b0", + "typeString": "literal_string \"SubgraphService\"" + }, + "value": "SubgraphService" + }, + { + "hexValue": "312e30", + "id": 9623, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4212:5:50", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e6bbd6277e1bf288eed5e8d1780f9a50b239e86b153736bceebccf4ea79d90b3", + "typeString": "literal_string \"1.0\"" + }, + "value": "1.0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_de968410163c85e985eeb4fbd7957aae2a5a7499745e7a8f1fd22402a4e5c8b0", + "typeString": "literal_string \"SubgraphService\"" + }, + { + "typeIdentifier": "t_stringliteral_e6bbd6277e1bf288eed5e8d1780f9a50b239e86b153736bceebccf4ea79d90b3", + "typeString": "literal_string \"1.0\"" + } + ], + "id": 9621, + "name": "__AllocationManager_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12271, + "src": "4168:24:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory,string memory)" + } + }, + "id": 9624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4168:50:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9625, + "nodeType": "ExpressionStatement", + "src": "4168:50:50" + }, + { + "expression": { + "arguments": [ + { + "id": 9627, + "name": "minimumProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9598, + "src": "4254:22:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "arguments": [ + { + "id": 9630, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4283:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 9629, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4283:7:50", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 9628, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "4278:4:50", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9631, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4278:13:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 9632, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "4292:3:50", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "4278:17:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9626, + "name": "_setProvisionTokensRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1825, + "src": "4229:24:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 9633, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4229:67:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9634, + "nodeType": "ExpressionStatement", + "src": "4229:67:50" + }, + { + "expression": { + "arguments": [ + { + "id": 9636, + "name": "maximumDelegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9600, + "src": "4326:22:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 9635, + "name": "_setDelegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1793, + "src": "4306:19:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", + "typeString": "function (uint32)" + } + }, + "id": 9637, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4306:43:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9638, + "nodeType": "ExpressionStatement", + "src": "4306:43:50" + }, + { + "expression": { + "arguments": [ + { + "id": 9640, + "name": "stakeToFeesRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9602, + "src": "4380:16:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9639, + "name": "_setStakeToFeesRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10683, + "src": "4359:20:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 9641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4359:38:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9642, + "nodeType": "ExpressionStatement", + "src": "4359:38:50" + } + ] + }, + "documentation": { + "id": 9596, + "nodeType": "StructuredDocumentation", + "src": "3318:543:50", + "text": " @notice Initialize the contract\n @dev The thawingPeriod and verifierCut ranges are not set here because they are variables\n on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges.\n @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation\n @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation\n @param stakeToFeesRatio The ratio of stake to fees to lock when collecting query fees" + }, + "functionSelector": "1cafa218", + "id": 9644, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 9605, + "kind": "modifierInvocation", + "modifierName": { + "id": 9604, + "name": "initializer", + "nameLocations": [ + "4014:11:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4956, + "src": "4014:11:50" + }, + "nodeType": "ModifierInvocation", + "src": "4014:11:50" + } + ], + "name": "initialize", + "nameLocation": "3875:10:50", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9603, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9598, + "mutability": "mutable", + "name": "minimumProvisionTokens", + "nameLocation": "3903:22:50", + "nodeType": "VariableDeclaration", + "scope": 9644, + "src": "3895:30:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9597, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3895:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9600, + "mutability": "mutable", + "name": "maximumDelegationRatio", + "nameLocation": "3942:22:50", + "nodeType": "VariableDeclaration", + "scope": 9644, + "src": "3935:29:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 9599, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "3935:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9602, + "mutability": "mutable", + "name": "stakeToFeesRatio", + "nameLocation": "3982:16:50", + "nodeType": "VariableDeclaration", + "scope": 9644, + "src": "3974:24:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9601, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3974:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3885:119:50" + }, + "returnParameters": { + "id": 9606, + "nodeType": "ParameterList", + "parameters": [], + "src": "4026:0:50" + }, + "scope": 10684, + "src": "3866:538:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1242 + ], + "body": { + "id": 9743, + "nodeType": "Block", + "src": "5313:719:50", + "statements": [ + { + "assignments": [ + 9662, + 9664, + 9666 + ], + "declarations": [ + { + "constant": false, + "id": 9662, + "mutability": "mutable", + "name": "url", + "nameLocation": "5338:3:50", + "nodeType": "VariableDeclaration", + "scope": 9743, + "src": "5324:17:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 9661, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5324:6:50", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9664, + "mutability": "mutable", + "name": "geohash", + "nameLocation": "5357:7:50", + "nodeType": "VariableDeclaration", + "scope": 9743, + "src": "5343:21:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 9663, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5343:6:50", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9666, + "mutability": "mutable", + "name": "rewardsDestination", + "nameLocation": "5374:18:50", + "nodeType": "VariableDeclaration", + "scope": 9743, + "src": "5366:26:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9665, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5366:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 9678, + "initialValue": { + "arguments": [ + { + "id": 9669, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9649, + "src": "5420:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "components": [ + { + "id": 9671, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5439:6:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 9670, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5439:6:50", + "typeDescriptions": {} + } + }, + { + "id": 9673, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5447:6:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 9672, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5447:6:50", + "typeDescriptions": {} + } + }, + { + "id": 9675, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5455:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9674, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5455:7:50", + "typeDescriptions": {} + } + } + ], + "id": 9676, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5438:25:50", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_string_storage_ptr_$_$_t_type$_t_string_storage_ptr_$_$_t_type$_t_address_$_$", + "typeString": "tuple(type(string storage pointer),type(string storage pointer),type(address))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_string_storage_ptr_$_$_t_type$_t_string_storage_ptr_$_$_t_type$_t_address_$_$", + "typeString": "tuple(type(string storage pointer),type(string storage pointer),type(address))" + } + ], + "expression": { + "id": 9667, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "5396:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9668, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5400:6:50", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "5396:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5396:77:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_payable_$", + "typeString": "tuple(string memory,string memory,address payable)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5323:150:50" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9686, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 9682, + "name": "url", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9662, + "src": "5498:3:50", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 9681, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5492:5:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 9680, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5492:5:50", + "typeDescriptions": {} + } + }, + "id": 9683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5492:10:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 9684, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5503:6:50", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5492:17:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9685, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5512:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5492:21:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9687, + "name": "SubgraphServiceEmptyUrl", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11105, + "src": "5515:23:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 9688, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5515:25:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9679, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5484:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5484:57:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9690, + "nodeType": "ExpressionStatement", + "src": "5484:57:50" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 9694, + "name": "geohash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9664, + "src": "5565:7:50", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 9693, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5559:5:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 9692, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5559:5:50", + "typeDescriptions": {} + } + }, + "id": 9695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5559:14:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 9696, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5574:6:50", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5559:21:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9697, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5583:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5559:25:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9699, + "name": "SubgraphServiceEmptyGeohash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11108, + "src": "5586:27:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 9700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5586:29:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9691, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5551:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5551:65:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9702, + "nodeType": "ExpressionStatement", + "src": "5551:65:50" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "id": 9704, + "name": "indexers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10694, + "src": "5634:8:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", + "typeString": "mapping(address => struct ISubgraphService.Indexer storage ref)" + } + }, + "id": 9706, + "indexExpression": { + "id": 9705, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9647, + "src": "5643:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5634:17:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Indexer_$11078_storage", + "typeString": "struct ISubgraphService.Indexer storage ref" + } + }, + "id": 9707, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5652:12:50", + "memberName": "registeredAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11073, + "src": "5634:30:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 9708, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5668:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5634:35:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9710, + "name": "SubgraphServiceIndexerAlreadyRegistered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11111, + "src": "5671:39:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 9711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5671:41:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9703, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5626:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9712, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5626:87:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9713, + "nodeType": "ExpressionStatement", + "src": "5626:87:50" + }, + { + "expression": { + "id": 9723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 9714, + "name": "indexers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10694, + "src": "5756:8:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", + "typeString": "mapping(address => struct ISubgraphService.Indexer storage ref)" + } + }, + "id": 9716, + "indexExpression": { + "id": 9715, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9647, + "src": "5765:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5756:17:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Indexer_$11078_storage", + "typeString": "struct ISubgraphService.Indexer storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 9718, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5800:5:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 9719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5806:9:50", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "5800:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9720, + "name": "url", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9662, + "src": "5822:3:50", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 9721, + "name": "geohash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9664, + "src": "5836:7:50", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 9717, + "name": "Indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11078, + "src": "5776:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Indexer_$11078_storage_ptr_$", + "typeString": "type(struct ISubgraphService.Indexer storage pointer)" + } + }, + "id": 9722, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "5786:12:50", + "5817:3:50", + "5827:7:50" + ], + "names": [ + "registeredAt", + "url", + "geoHash" + ], + "nodeType": "FunctionCall", + "src": "5776:70:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Indexer_$11078_memory_ptr", + "typeString": "struct ISubgraphService.Indexer memory" + } + }, + "src": "5756:90:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Indexer_$11078_storage", + "typeString": "struct ISubgraphService.Indexer storage ref" + } + }, + "id": 9724, + "nodeType": "ExpressionStatement", + "src": "5756:90:50" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9725, + "name": "rewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9666, + "src": "5860:18:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 9728, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5890:1:50", + "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": 9727, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5882:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9726, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5882:7:50", + "typeDescriptions": {} + } + }, + "id": 9729, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5882:10:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5860:32:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9737, + "nodeType": "IfStatement", + "src": "5856:114:50", + "trueBody": { + "id": 9736, + "nodeType": "Block", + "src": "5894:76:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9732, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9647, + "src": "5931:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9733, + "name": "rewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9666, + "src": "5940:18:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9731, + "name": "_setRewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12910, + "src": "5908:22:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 9734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5908:51:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9735, + "nodeType": "ExpressionStatement", + "src": "5908:51:50" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 9739, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9647, + "src": "6011:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9740, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9649, + "src": "6020:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 9738, + "name": "ServiceProviderRegistered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1198, + "src": "5985:25:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,bytes memory)" + } + }, + "id": 9741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5985:40:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9742, + "nodeType": "EmitStatement", + "src": "5980:45:50" + } + ] + }, + "documentation": { + "id": 9645, + "nodeType": "StructuredDocumentation", + "src": "4410:724:50", + "text": " @notice\n @dev Implements {IDataService.register}\n Requirements:\n - The indexer must not be already registered\n - The URL must not be empty\n - The provision must be valid according to the subgraph service rules\n Emits a {ServiceProviderRegistered} event\n @param indexer The address of the indexer to register\n @param data Encoded registration data:\n - address `url`: The URL of the indexer\n - string `geohash`: The geohash of the indexer\n - address `rewardsDestination`: The address where the indexer wants to receive indexing rewards.\n Use zero address for automatic reprovisioning to the subgraph service." + }, + "functionSelector": "24b8fbf6", + "id": 9744, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 9653, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9647, + "src": "5262:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9654, + "kind": "modifierInvocation", + "modifierName": { + "id": 9652, + "name": "onlyAuthorizedForProvision", + "nameLocations": [ + "5235:26:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1703, + "src": "5235:26:50" + }, + "nodeType": "ModifierInvocation", + "src": "5235:35:50" + }, + { + "arguments": [ + { + "id": 9656, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9647, + "src": "5290:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9657, + "kind": "modifierInvocation", + "modifierName": { + "id": 9655, + "name": "onlyValidProvision", + "nameLocations": [ + "5271:18:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1728, + "src": "5271:18:50" + }, + "nodeType": "ModifierInvocation", + "src": "5271:27:50" + }, + { + "id": 9659, + "kind": "modifierInvocation", + "modifierName": { + "id": 9658, + "name": "whenNotPaused", + "nameLocations": [ + "5299:13:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5329, + "src": "5299:13:50" + }, + "nodeType": "ModifierInvocation", + "src": "5299:13:50" + } + ], + "name": "register", + "nameLocation": "5148:8:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9651, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5226:8:50" + }, + "parameters": { + "id": 9650, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9647, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "5174:7:50", + "nodeType": "VariableDeclaration", + "scope": 9744, + "src": "5166:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9646, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5166:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9649, + "mutability": "mutable", + "name": "data", + "nameLocation": "5206:4:50", + "nodeType": "VariableDeclaration", + "scope": 9744, + "src": "5191:19:50", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9648, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5191:5:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5156:60:50" + }, + "returnParameters": { + "id": 9660, + "nodeType": "ParameterList", + "parameters": [], + "src": "5313:0:50" + }, + "scope": 10684, + "src": "5139:893:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1250 + ], + "body": { + "id": 9773, + "nodeType": "Block", + "src": "6815:150:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9762, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9747, + "src": "6847:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9761, + "name": "_checkProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1920, + 1936 + ], + "referencedDeclaration": 1920, + "src": "6825:21:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$", + "typeString": "function (address) view" + } + }, + "id": 9763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6825:30:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9764, + "nodeType": "ExpressionStatement", + "src": "6825:30:50" + }, + { + "expression": { + "arguments": [ + { + "id": 9766, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9747, + "src": "6892:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9765, + "name": "_acceptProvisionParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1778, + "src": "6865:26:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 9767, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6865:35:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9768, + "nodeType": "ExpressionStatement", + "src": "6865:35:50" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9770, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9747, + "src": "6950:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9769, + "name": "ProvisionPendingParametersAccepted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1203, + "src": "6915:34:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 9771, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6915:43:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9772, + "nodeType": "EmitStatement", + "src": "6910:48:50" + } + ] + }, + "documentation": { + "id": 9745, + "nodeType": "StructuredDocumentation", + "src": "6038:576:50", + "text": " @notice Accept staged parameters in the provision of a service provider\n @dev Implements {IDataService-acceptProvisionPendingParameters}\n Requirements:\n - The indexer must be registered\n - Must have previously staged provision parameters, using {IHorizonStaking-setProvisionParameters}\n - The new provision parameters must be valid according to the subgraph service rules\n Emits a {ProvisionPendingParametersAccepted} event\n @param indexer The address of the indexer to accept the provision for" + }, + "functionSelector": "ce0fc0cc", + "id": 9774, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 9753, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9747, + "src": "6761:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9754, + "kind": "modifierInvocation", + "modifierName": { + "id": 9752, + "name": "onlyAuthorizedForProvision", + "nameLocations": [ + "6734:26:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1703, + "src": "6734:26:50" + }, + "nodeType": "ModifierInvocation", + "src": "6734:35:50" + }, + { + "arguments": [ + { + "id": 9756, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9747, + "src": "6792:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9757, + "kind": "modifierInvocation", + "modifierName": { + "id": 9755, + "name": "onlyRegisteredIndexer", + "nameLocations": [ + "6770:21:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 9567, + "src": "6770:21:50" + }, + "nodeType": "ModifierInvocation", + "src": "6770:30:50" + }, + { + "id": 9759, + "kind": "modifierInvocation", + "modifierName": { + "id": 9758, + "name": "whenNotPaused", + "nameLocations": [ + "6801:13:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5329, + "src": "6801:13:50" + }, + "nodeType": "ModifierInvocation", + "src": "6801:13:50" + } + ], + "name": "acceptProvisionPendingParameters", + "nameLocation": "6628:32:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9751, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6725:8:50" + }, + "parameters": { + "id": 9750, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9747, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "6678:7:50", + "nodeType": "VariableDeclaration", + "scope": 9774, + "src": "6670:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9746, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6670:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9749, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 9774, + "src": "6695:14:50", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9748, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6695:5:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6660:55:50" + }, + "returnParameters": { + "id": 9760, + "nodeType": "ParameterList", + "parameters": [], + "src": "6815:0:50" + }, + "scope": 10684, + "src": "6619:346:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1258 + ], + "body": { + "id": 9830, + "nodeType": "Block", + "src": "8390:354:50", + "statements": [ + { + "assignments": [ + 9795, + 9797, + 9799, + 9801 + ], + "declarations": [ + { + "constant": false, + "id": 9795, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "8409:20:50", + "nodeType": "VariableDeclaration", + "scope": 9830, + "src": "8401:28:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9794, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8401:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9797, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "8439:6:50", + "nodeType": "VariableDeclaration", + "scope": 9830, + "src": "8431:14:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9796, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8431:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9799, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "8455:12:50", + "nodeType": "VariableDeclaration", + "scope": 9830, + "src": "8447:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9798, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8447:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9801, + "mutability": "mutable", + "name": "allocationProof", + "nameLocation": "8482:15:50", + "nodeType": "VariableDeclaration", + "scope": 9830, + "src": "8469:28:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9800, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8469:5:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 9815, + "initialValue": { + "arguments": [ + { + "id": 9804, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9779, + "src": "8525:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "components": [ + { + "id": 9806, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8544:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 9805, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8544:7:50", + "typeDescriptions": {} + } + }, + { + "id": 9808, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8553:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 9807, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8553:7:50", + "typeDescriptions": {} + } + }, + { + "id": 9810, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8562:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9809, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8562:7:50", + "typeDescriptions": {} + } + }, + { + "id": 9812, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8571:5:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 9811, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8571:5:50", + "typeDescriptions": {} + } + } + ], + "id": 9813, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "8543:34:50", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_uint256_$_$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$", + "typeString": "tuple(type(bytes32),type(uint256),type(address),type(bytes storage pointer))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_uint256_$_$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$", + "typeString": "tuple(type(bytes32),type(uint256),type(address),type(bytes storage pointer))" + } + ], + "expression": { + "id": 9802, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "8501:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9803, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8505:6:50", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "8501:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9814, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8501:86:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes32_$_t_uint256_$_t_address_payable_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bytes32,uint256,address payable,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8400:187:50" + }, + { + "expression": { + "arguments": [ + { + "id": 9817, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9777, + "src": "8607:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9818, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9799, + "src": "8616:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9819, + "name": "subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9795, + "src": "8630:20:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 9820, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9797, + "src": "8652:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9821, + "name": "allocationProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9801, + "src": "8660:15:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 9822, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2152, + "src": "8677:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 9816, + "name": "_allocate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12401, + "src": "8597:9:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint32_$returns$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (address,address,bytes32,uint256,bytes memory,uint32) returns (struct Allocation.State memory)" + } + }, + "id": 9823, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8597:96:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 9824, + "nodeType": "ExpressionStatement", + "src": "8597:96:50" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9826, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9777, + "src": "8723:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9827, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9779, + "src": "8732:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 9825, + "name": "ServiceStarted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1210, + "src": "8708:14:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,bytes memory)" + } + }, + "id": 9828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8708:29:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9829, + "nodeType": "EmitStatement", + "src": "8703:34:50" + } + ] + }, + "documentation": { + "id": 9775, + "nodeType": "StructuredDocumentation", + "src": "6971:1153:50", + "text": " @notice Allocates tokens to subgraph deployment, manifesting the indexer's commitment to index it\n @dev This is the equivalent of the `allocate` function in the legacy Staking contract.\n Requirements:\n - The indexer must be registered\n - The provision must be valid according to the subgraph service rules\n - Allocation id cannot be zero\n - Allocation id cannot be reused from the legacy staking contract\n - The indexer must have enough available tokens to allocate\n The `allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`.\n See {AllocationManager-allocate} for more details.\n Emits {ServiceStarted} and {AllocationCreated} events\n @param indexer The address of the indexer\n @param data Encoded data:\n - bytes32 `subgraphDeploymentId`: The id of the subgraph deployment\n - uint256 `tokens`: The amount of tokens to allocate\n - address `allocationId`: The id of the allocation\n - bytes `allocationProof`: Signed proof of the allocation id address ownership" + }, + "functionSelector": "dedf6726", + "id": 9831, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 9783, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9777, + "src": "8280:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9784, + "kind": "modifierInvocation", + "modifierName": { + "id": 9782, + "name": "onlyAuthorizedForProvision", + "nameLocations": [ + "8253:26:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1703, + "src": "8253:26:50" + }, + "nodeType": "ModifierInvocation", + "src": "8253:35:50" + }, + { + "arguments": [ + { + "id": 9786, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9777, + "src": "8316:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9787, + "kind": "modifierInvocation", + "modifierName": { + "id": 9785, + "name": "onlyValidProvision", + "nameLocations": [ + "8297:18:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1728, + "src": "8297:18:50" + }, + "nodeType": "ModifierInvocation", + "src": "8297:27:50" + }, + { + "arguments": [ + { + "id": 9789, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9777, + "src": "8355:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9790, + "kind": "modifierInvocation", + "modifierName": { + "id": 9788, + "name": "onlyRegisteredIndexer", + "nameLocations": [ + "8333:21:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 9567, + "src": "8333:21:50" + }, + "nodeType": "ModifierInvocation", + "src": "8333:30:50" + }, + { + "id": 9792, + "kind": "modifierInvocation", + "modifierName": { + "id": 9791, + "name": "whenNotPaused", + "nameLocations": [ + "8372:13:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5329, + "src": "8372:13:50" + }, + "nodeType": "ModifierInvocation", + "src": "8372:13:50" + } + ], + "name": "startService", + "nameLocation": "8138:12:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9781, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "8236:8:50" + }, + "parameters": { + "id": 9780, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9777, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "8168:7:50", + "nodeType": "VariableDeclaration", + "scope": 9831, + "src": "8160:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9776, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8160:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9779, + "mutability": "mutable", + "name": "data", + "nameLocation": "8200:4:50", + "nodeType": "VariableDeclaration", + "scope": 9831, + "src": "8185:19:50", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9778, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8185:5:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "8150:60:50" + }, + "returnParameters": { + "id": 9793, + "nodeType": "ParameterList", + "parameters": [], + "src": "8390:0:50" + }, + "scope": 10684, + "src": "8129:615:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1266 + ], + "body": { + "id": 9881, + "nodeType": "Block", + "src": "9962:315:50", + "statements": [ + { + "assignments": [ + 9849 + ], + "declarations": [ + { + "constant": false, + "id": 9849, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "9980:12:50", + "nodeType": "VariableDeclaration", + "scope": 9881, + "src": "9972:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9848, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9972:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 9857, + "initialValue": { + "arguments": [ + { + "id": 9852, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9836, + "src": "10006:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "components": [ + { + "id": 9854, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10013:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9853, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10013:7:50", + "typeDescriptions": {} + } + } + ], + "id": 9855, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10012:9:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + } + ], + "expression": { + "id": 9850, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "9995:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9851, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "9999:6:50", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "9995:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9856, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9995:27:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9972:50:50" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 9861, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9849, + "src": "10069:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 9859, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "10053:11:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 9860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10065:3:50", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "10053:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 9862, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10053:29:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 9863, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10083:7:50", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "10053:37:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 9864, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9834, + "src": "10094:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "10053:48:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 9867, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9834, + "src": "10154:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9868, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9849, + "src": "10163:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9866, + "name": "SubgraphServiceAllocationNotAuthorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11145, + "src": "10115:38:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", + "typeString": "function (address,address) pure returns (error)" + } + }, + "id": 9869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10115:61:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9858, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "10032:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10032:154:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9871, + "nodeType": "ExpressionStatement", + "src": "10032:154:50" + }, + { + "expression": { + "arguments": [ + { + "id": 9873, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9849, + "src": "10213:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9872, + "name": "_closeAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12890, + "src": "10196:16:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 9874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10196:30:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9875, + "nodeType": "ExpressionStatement", + "src": "10196:30:50" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9877, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9834, + "src": "10256:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9878, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9836, + "src": "10265:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "id": 9876, + "name": "ServiceStopped", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1217, + "src": "10241:14:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,bytes memory)" + } + }, + "id": 9879, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10241:29:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9880, + "nodeType": "EmitStatement", + "src": "10236:34:50" + } + ] + }, + "documentation": { + "id": 9832, + "nodeType": "StructuredDocumentation", + "src": "8750:1027:50", + "text": " @notice Close an allocation, indicating that the indexer has stopped indexing the subgraph deployment\n @dev This is the equivalent of the `closeAllocation` function in the legacy Staking contract.\n There are a few notable differences with the legacy function:\n - allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically\n without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated\n tokens for other purposes.\n - No POI is required to close an allocation. Indexers should present POIs to collect indexing rewards using {collect}.\n Requirements:\n - The indexer must be registered\n - Allocation must exist and be open\n Emits {ServiceStopped} and {AllocationClosed} events\n @param indexer The address of the indexer\n @param data Encoded data:\n - address `allocationId`: The id of the allocation" + }, + "functionSelector": "8180083b", + "id": 9882, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 9840, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9834, + "src": "9908:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9841, + "kind": "modifierInvocation", + "modifierName": { + "id": 9839, + "name": "onlyAuthorizedForProvision", + "nameLocations": [ + "9881:26:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1703, + "src": "9881:26:50" + }, + "nodeType": "ModifierInvocation", + "src": "9881:35:50" + }, + { + "arguments": [ + { + "id": 9843, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9834, + "src": "9939:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9844, + "kind": "modifierInvocation", + "modifierName": { + "id": 9842, + "name": "onlyRegisteredIndexer", + "nameLocations": [ + "9917:21:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 9567, + "src": "9917:21:50" + }, + "nodeType": "ModifierInvocation", + "src": "9917:30:50" + }, + { + "id": 9846, + "kind": "modifierInvocation", + "modifierName": { + "id": 9845, + "name": "whenNotPaused", + "nameLocations": [ + "9948:13:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5329, + "src": "9948:13:50" + }, + "nodeType": "ModifierInvocation", + "src": "9948:13:50" + } + ], + "name": "stopService", + "nameLocation": "9791:11:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9838, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "9872:8:50" + }, + "parameters": { + "id": 9837, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9834, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "9820:7:50", + "nodeType": "VariableDeclaration", + "scope": 9882, + "src": "9812:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9833, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9812:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9836, + "mutability": "mutable", + "name": "data", + "nameLocation": "9852:4:50", + "nodeType": "VariableDeclaration", + "scope": 9882, + "src": "9837:19:50", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9835, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "9837:5:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "9802:60:50" + }, + "returnParameters": { + "id": 9847, + "nodeType": "ParameterList", + "parameters": [], + "src": "9962:0:50" + }, + "scope": 10684, + "src": "9782:495:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1279 + ], + "body": { + "id": 10007, + "nodeType": "Block", + "src": "11782:1102:50", + "statements": [ + { + "assignments": [ + 9908 + ], + "declarations": [ + { + "constant": false, + "id": 9908, + "mutability": "mutable", + "name": "paymentCollected", + "nameLocation": "11800:16:50", + "nodeType": "VariableDeclaration", + "scope": 10007, + "src": "11792:24:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9907, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11792:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9910, + "initialValue": { + "hexValue": "30", + "id": 9909, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11819:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "11792:28:50" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "id": 9915, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9911, + "name": "paymentType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9888, + "src": "11835:11:50", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 9912, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "11850:14:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", + "typeString": "type(contract IGraphPayments)" + } + }, + "id": 9913, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11865:12:50", + "memberName": "PaymentTypes", + "nodeType": "MemberAccess", + "referencedDeclaration": 2166, + "src": "11850:27:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_PaymentTypes_$2166_$", + "typeString": "type(enum IGraphPayments.PaymentTypes)" + } + }, + "id": 9914, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "11878:8:50", + "memberName": "QueryFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 2163, + "src": "11850:36:50", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "src": "11835:51:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "id": 9954, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9950, + "name": "paymentType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9888, + "src": "12251:11:50", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 9951, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "12266:14:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", + "typeString": "type(contract IGraphPayments)" + } + }, + "id": 9952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12281:12:50", + "memberName": "PaymentTypes", + "nodeType": "MemberAccess", + "referencedDeclaration": 2166, + "src": "12266:27:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_PaymentTypes_$2166_$", + "typeString": "type(enum IGraphPayments.PaymentTypes)" + } + }, + "id": 9953, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "12294:15:50", + "memberName": "IndexingRewards", + "nodeType": "MemberAccess", + "referencedDeclaration": 2165, + "src": "12266:43:50", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "src": "12251:58:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9996, + "nodeType": "Block", + "src": "12688:78:50", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 9993, + "name": "paymentType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9888, + "src": "12743:11:50", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + ], + "id": 9992, + "name": "SubgraphServiceInvalidPaymentType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11122, + "src": "12709:33:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_enum$_PaymentTypes_$2166_$returns$_t_error_$", + "typeString": "function (enum IGraphPayments.PaymentTypes) pure returns (error)" + } + }, + "id": 9994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12709:46:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 9995, + "nodeType": "RevertStatement", + "src": "12702:53:50" + } + ] + }, + "id": 9997, + "nodeType": "IfStatement", + "src": "12247:519:50", + "trueBody": { + "id": 9991, + "nodeType": "Block", + "src": "12311:371:50", + "statements": [ + { + "assignments": [ + 9956, + 9958 + ], + "declarations": [ + { + "constant": false, + "id": 9956, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "12334:12:50", + "nodeType": "VariableDeclaration", + "scope": 9991, + "src": "12326:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9955, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12326:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9958, + "mutability": "mutable", + "name": "poi", + "nameLocation": "12356:3:50", + "nodeType": "VariableDeclaration", + "scope": 9991, + "src": "12348:11:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9957, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12348:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 9968, + "initialValue": { + "arguments": [ + { + "id": 9961, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9890, + "src": "12374:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "components": [ + { + "id": 9963, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12381:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9962, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12381:7:50", + "typeDescriptions": {} + } + }, + { + "id": 9965, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12390:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 9964, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12390:7:50", + "typeDescriptions": {} + } + } + ], + "id": 9966, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12380:18:50", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes32_$_$", + "typeString": "tuple(type(address),type(bytes32))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes32_$_$", + "typeString": "tuple(type(address),type(bytes32))" + } + ], + "expression": { + "id": 9959, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "12363:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9960, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "12367:6:50", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "12363:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12363:36:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_payable_$_t_bytes32_$", + "typeString": "tuple(address payable,bytes32)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12325:74:50" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9976, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 9972, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "12454:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 9970, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "12438:11:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 9971, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12450:3:50", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "12438:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 9973, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12438:29:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 9974, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12468:7:50", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "12438:37:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 9975, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "12479:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "12438:48:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 9978, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "12543:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9979, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "12552:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9977, + "name": "SubgraphServiceAllocationNotAuthorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11145, + "src": "12504:38:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", + "typeString": "function (address,address) pure returns (error)" + } + }, + "id": 9980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12504:61:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9969, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "12413:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12413:166:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9982, + "nodeType": "ExpressionStatement", + "src": "12413:166:50" + }, + { + "expression": { + "id": 9989, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9983, + "name": "paymentCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9908, + "src": "12593:16:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9985, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "12636:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9986, + "name": "poi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9958, + "src": "12650:3:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 9987, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2152, + "src": "12655:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 9984, + "name": "_collectIndexingRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12657, + "src": "12612:23:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$_t_uint32_$returns$_t_uint256_$", + "typeString": "function (address,bytes32,uint32) returns (uint256)" + } + }, + "id": 9988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12612:59:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12593:78:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9990, + "nodeType": "ExpressionStatement", + "src": "12593:78:50" + } + ] + } + }, + "id": 9998, + "nodeType": "IfStatement", + "src": "11831:935:50", + "trueBody": { + "id": 9949, + "nodeType": "Block", + "src": "11888:353:50", + "statements": [ + { + "assignments": [ + 9920 + ], + "declarations": [ + { + "constant": false, + "id": 9920, + "mutability": "mutable", + "name": "signedRav", + "nameLocation": "11933:9:50", + "nodeType": "VariableDeclaration", + "scope": 9949, + "src": "11902:40:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV" + }, + "typeName": { + "id": 9919, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9918, + "name": "ITAPCollector.SignedRAV", + "nameLocations": [ + "11902:13:50", + "11916:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2546, + "src": "11902:23:50" + }, + "referencedDeclaration": 2546, + "src": "11902:23:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_storage_ptr", + "typeString": "struct ITAPCollector.SignedRAV" + } + }, + "visibility": "internal" + } + ], + "id": 9928, + "initialValue": { + "arguments": [ + { + "id": 9923, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9890, + "src": "11956:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "components": [ + { + "expression": { + "id": 9924, + "name": "ITAPCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2695, + "src": "11963:13:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ITAPCollector_$2695_$", + "typeString": "type(contract ITAPCollector)" + } + }, + "id": 9925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11977:9:50", + "memberName": "SignedRAV", + "nodeType": "MemberAccess", + "referencedDeclaration": 2546, + "src": "11963:23:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_SignedRAV_$2546_storage_ptr_$", + "typeString": "type(struct ITAPCollector.SignedRAV storage pointer)" + } + } + ], + "id": 9926, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11962:25:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_SignedRAV_$2546_storage_ptr_$", + "typeString": "type(struct ITAPCollector.SignedRAV storage pointer)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_type$_t_struct$_SignedRAV_$2546_storage_ptr_$", + "typeString": "type(struct ITAPCollector.SignedRAV storage pointer)" + } + ], + "expression": { + "id": 9921, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "11945:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9922, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "11949:6:50", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "11945:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11945:43:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11902:86:50" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9934, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 9930, + "name": "signedRav", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9920, + "src": "12027:9:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV memory" + } + }, + "id": 9931, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12037:3:50", + "memberName": "rav", + "nodeType": "MemberAccess", + "referencedDeclaration": 2543, + "src": "12027:13:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_memory_ptr", + "typeString": "struct ITAPCollector.ReceiptAggregateVoucher memory" + } + }, + "id": 9932, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12041:15:50", + "memberName": "serviceProvider", + "nodeType": "MemberAccess", + "referencedDeclaration": 2532, + "src": "12027:29:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 9933, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "12060:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "12027:40:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "expression": { + "expression": { + "id": 9936, + "name": "signedRav", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9920, + "src": "12116:9:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV memory" + } + }, + "id": 9937, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12126:3:50", + "memberName": "rav", + "nodeType": "MemberAccess", + "referencedDeclaration": 2543, + "src": "12116:13:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_memory_ptr", + "typeString": "struct ITAPCollector.ReceiptAggregateVoucher memory" + } + }, + "id": 9938, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12130:15:50", + "memberName": "serviceProvider", + "nodeType": "MemberAccess", + "referencedDeclaration": 2532, + "src": "12116:29:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9939, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "12147:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9935, + "name": "SubgraphServiceIndexerMismatch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11138, + "src": "12085:30:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", + "typeString": "function (address,address) pure returns (error)" + } + }, + "id": 9940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12085:70:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 9929, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "12002:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 9941, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12002:167:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9942, + "nodeType": "ExpressionStatement", + "src": "12002:167:50" + }, + { + "expression": { + "id": 9947, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9943, + "name": "paymentCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9908, + "src": "12183:16:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9945, + "name": "signedRav", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9920, + "src": "12220:9:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV memory" + } + ], + "id": 9944, + "name": "_collectQueryFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10661, + "src": "12202:17:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SignedRAV_$2546_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct ITAPCollector.SignedRAV memory) returns (uint256)" + } + }, + "id": 9946, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12202:28:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12183:47:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9948, + "nodeType": "ExpressionStatement", + "src": "12183:47:50" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 10000, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "12805:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10001, + "name": "paymentType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9888, + "src": "12814:11:50", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + { + "id": 10002, + "name": "paymentCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9908, + "src": "12827:16:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9999, + "name": "ServicePaymentCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1227, + "src": "12781:23:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_enum$_PaymentTypes_$2166_$_t_uint256_$returns$__$", + "typeString": "function (address,enum IGraphPayments.PaymentTypes,uint256)" + } + }, + "id": 10003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12781:63:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10004, + "nodeType": "EmitStatement", + "src": "12776:68:50" + }, + { + "expression": { + "id": 10005, + "name": "paymentCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9908, + "src": "12861:16:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9906, + "id": 10006, + "nodeType": "Return", + "src": "12854:23:50" + } + ] + }, + "documentation": { + "id": 9883, + "nodeType": "StructuredDocumentation", + "src": "10283:1163:50", + "text": " @notice Collects payment for the service provided by the indexer\n Allows collecting different types of payments such as query fees and indexing rewards.\n It uses Graph Horizon payments protocol to process payments.\n Reverts if the payment type is not supported.\n @dev This function is the equivalent of the `collect` function for query fees and the `closeAllocation` function\n for indexing rewards in the legacy Staking contract.\n Requirements:\n - The indexer must be registered\n - The provision must be valid according to the subgraph service rules\n Emits a {ServicePaymentCollected} event. Emits payment type specific events.\n For query fees, see {SubgraphService-_collectQueryFees} for more details.\n For indexing rewards, see {AllocationManager-_collectIndexingRewards} for more details.\n @param indexer The address of the indexer\n @param paymentType The type of payment to collect as defined in {IGraphPayments}\n @param data Encoded data to fulfill the payment. The structure of the data depends on the payment type. See above." + }, + "functionSelector": "b15d2a2c", + "id": 10008, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 9894, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "11646:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9895, + "kind": "modifierInvocation", + "modifierName": { + "id": 9893, + "name": "onlyAuthorizedForProvision", + "nameLocations": [ + "11619:26:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1703, + "src": "11619:26:50" + }, + "nodeType": "ModifierInvocation", + "src": "11619:35:50" + }, + { + "arguments": [ + { + "id": 9897, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "11682:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9898, + "kind": "modifierInvocation", + "modifierName": { + "id": 9896, + "name": "onlyValidProvision", + "nameLocations": [ + "11663:18:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1728, + "src": "11663:18:50" + }, + "nodeType": "ModifierInvocation", + "src": "11663:27:50" + }, + { + "arguments": [ + { + "id": 9900, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "11721:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9901, + "kind": "modifierInvocation", + "modifierName": { + "id": 9899, + "name": "onlyRegisteredIndexer", + "nameLocations": [ + "11699:21:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 9567, + "src": "11699:21:50" + }, + "nodeType": "ModifierInvocation", + "src": "11699:30:50" + }, + { + "id": 9903, + "kind": "modifierInvocation", + "modifierName": { + "id": 9902, + "name": "whenNotPaused", + "nameLocations": [ + "11738:13:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5329, + "src": "11738:13:50" + }, + "nodeType": "ModifierInvocation", + "src": "11738:13:50" + } + ], + "name": "collect", + "nameLocation": "11460:7:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9892, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11602:8:50" + }, + "parameters": { + "id": 9891, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9885, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "11485:7:50", + "nodeType": "VariableDeclaration", + "scope": 10008, + "src": "11477:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9884, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11477:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9888, + "mutability": "mutable", + "name": "paymentType", + "nameLocation": "11530:11:50", + "nodeType": "VariableDeclaration", + "scope": 10008, + "src": "11502:39:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 9887, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 9886, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "11502:14:50", + "11517:12:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "11502:27:50" + }, + "referencedDeclaration": 2166, + "src": "11502:27:50", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9890, + "mutability": "mutable", + "name": "data", + "nameLocation": "11566:4:50", + "nodeType": "VariableDeclaration", + "scope": 10008, + "src": "11551:19:50", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9889, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "11551:5:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "11467:109:50" + }, + "returnParameters": { + "id": 9906, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9905, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10008, + "src": "11769:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9904, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11769:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11768:9:50" + }, + "scope": 10684, + "src": "11451:1433:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1287 + ], + "body": { + "id": 10051, + "nodeType": "Block", + "src": "13497:226:50", + "statements": [ + { + "assignments": [ + 10020, + 10022 + ], + "declarations": [ + { + "constant": false, + "id": 10020, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "13516:6:50", + "nodeType": "VariableDeclaration", + "scope": 10051, + "src": "13508:14:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10019, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13508:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10022, + "mutability": "mutable", + "name": "reward", + "nameLocation": "13532:6:50", + "nodeType": "VariableDeclaration", + "scope": 10051, + "src": "13524:14:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10021, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13524:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10032, + "initialValue": { + "arguments": [ + { + "id": 10025, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10013, + "src": "13553:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "components": [ + { + "id": 10027, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13560:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 10026, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13560:7:50", + "typeDescriptions": {} + } + }, + { + "id": 10029, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13569:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 10028, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13569:7:50", + "typeDescriptions": {} + } + } + ], + "id": 10030, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "13559:18:50", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(uint256),type(uint256))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(uint256),type(uint256))" + } + ], + "expression": { + "id": 10023, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "13542:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 10024, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "13546:6:50", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "13542:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 10031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13542:36:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13507:71:50" + }, + { + "expression": { + "arguments": [ + { + "id": 10036, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10011, + "src": "13610:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10037, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10020, + "src": "13619:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10038, + "name": "reward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10022, + "src": "13627:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10041, + "name": "_disputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13369, + "src": "13643:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IDisputeManager_$11057_$", + "typeString": "function () view returns (contract IDisputeManager)" + } + }, + "id": 10042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13643:17:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + ], + "id": 10040, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13635:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10039, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13635:7:50", + "typeDescriptions": {} + } + }, + "id": 10043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13635:26:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10033, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "13588:13:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 10034, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13588:15:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 10035, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13604:5:50", + "memberName": "slash", + "nodeType": "MemberAccess", + "referencedDeclaration": 3626, + "src": "13588:21:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (address,uint256,uint256,address) external" + } + }, + "id": 10044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13588:74:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10045, + "nodeType": "ExpressionStatement", + "src": "13588:74:50" + }, + { + "eventCall": { + "arguments": [ + { + "id": 10047, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10011, + "src": "13700:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10048, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10020, + "src": "13709:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10046, + "name": "ServiceProviderSlashed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1234, + "src": "13677:22:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 10049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13677:39:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10050, + "nodeType": "EmitStatement", + "src": "13672:44:50" + } + ] + }, + "documentation": { + "id": 10009, + "nodeType": "StructuredDocumentation", + "src": "12890:512:50", + "text": " @notice Slash an indexer\n @dev Slashing is delegated to the {DisputeManager} contract which is the only one that can call this\n function.\n See {IHorizonStaking-slash} for more details.\n Emits a {ServiceProviderSlashed} event.\n @param indexer The address of the indexer to be slashed\n @param data Encoded data:\n - uint256 `tokens`: The amount of tokens to slash\n - uint256 `reward`: The amount of tokens to reward the slasher" + }, + "functionSelector": "cb8347fe", + "id": 10052, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10017, + "kind": "modifierInvocation", + "modifierName": { + "id": 10016, + "name": "onlyDisputeManager", + "nameLocations": [ + "13478:18:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 13305, + "src": "13478:18:50" + }, + "nodeType": "ModifierInvocation", + "src": "13478:18:50" + } + ], + "name": "slash", + "nameLocation": "13416:5:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10015, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "13469:8:50" + }, + "parameters": { + "id": 10014, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10011, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "13430:7:50", + "nodeType": "VariableDeclaration", + "scope": 10052, + "src": "13422:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10010, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13422:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10013, + "mutability": "mutable", + "name": "data", + "nameLocation": "13454:4:50", + "nodeType": "VariableDeclaration", + "scope": 10052, + "src": "13439:19:50", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10012, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "13439:5:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "13421:38:50" + }, + "returnParameters": { + "id": 10018, + "nodeType": "ParameterList", + "parameters": [], + "src": "13497:0:50" + }, + "scope": 10684, + "src": "13407:316:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11171 + ], + "body": { + "id": 10107, + "nodeType": "Block", + "src": "13874:471:50", + "statements": [ + { + "assignments": [ + 10063 + ], + "declarations": [ + { + "constant": false, + "id": 10063, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "13908:10:50", + "nodeType": "VariableDeclaration", + "scope": 10107, + "src": "13884:34:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 10062, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10061, + "name": "Allocation.State", + "nameLocations": [ + "13884:10:50", + "13895:5:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "13884:16:50" + }, + "referencedDeclaration": 11307, + "src": "13884:16:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 10068, + "initialValue": { + "arguments": [ + { + "id": 10066, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10055, + "src": "13937:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 10064, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "13921:11:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 10065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13933:3:50", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "13921:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 10067, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13921:29:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13884:66:50" + }, + { + "assignments": [ + 10070 + ], + "declarations": [ + { + "constant": false, + "id": 10070, + "mutability": "mutable", + "name": "isStale", + "nameLocation": "13965:7:50", + "nodeType": "VariableDeclaration", + "scope": 10107, + "src": "13960:12:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10069, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "13960:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 10075, + "initialValue": { + "arguments": [ + { + "id": 10073, + "name": "maxPOIStaleness", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13056, + "src": "13994:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10071, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10063, + "src": "13975:10:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10072, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13986:7:50", + "memberName": "isStale", + "nodeType": "MemberAccess", + "referencedDeclaration": 11587, + "src": "13975:18:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11307_memory_ptr_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory,uint256) view returns (bool)" + } + }, + "id": 10074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13975:35:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13960:50:50" + }, + { + "assignments": [ + 10077 + ], + "declarations": [ + { + "constant": false, + "id": 10077, + "mutability": "mutable", + "name": "isOverAllocated_", + "nameLocation": "14025:16:50", + "nodeType": "VariableDeclaration", + "scope": 10107, + "src": "14020:21:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10076, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "14020:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 10083, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10079, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10063, + "src": "14061:10:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10080, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "14072:7:50", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "14061:18:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10081, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2152, + "src": "14081:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 10078, + "name": "_isOverAllocated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12997, + "src": "14044:16:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint32_$returns$_t_bool_$", + "typeString": "function (address,uint32) view returns (bool)" + } + }, + "id": 10082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14044:53:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14020:77:50" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 10087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10085, + "name": "isStale", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10070, + "src": "14115:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "id": 10086, + "name": "isOverAllocated_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10077, + "src": "14126:16:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "14115:27:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 10089, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10055, + "src": "14186:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10088, + "name": "SubgraphServiceCannotForceCloseAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11157, + "src": "14144:41:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 10090, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14144:55:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 10084, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "14107:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 10091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14107:93:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10092, + "nodeType": "ExpressionStatement", + "src": "14107:93:50" + }, + { + "expression": { + "arguments": [ + { + "id": 10097, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "14218:26:50", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 10094, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10063, + "src": "14219:10:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10095, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "14230:12:50", + "memberName": "isAltruistic", + "nodeType": "MemberAccess", + "referencedDeclaration": 11640, + "src": "14219:23:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 10096, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14219:25:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 10099, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10055, + "src": "14284:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10098, + "name": "SubgraphServiceAllocationIsAltruistic", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11162, + "src": "14246:37:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 10100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14246:51:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 10093, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "14210:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 10101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14210:88:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10102, + "nodeType": "ExpressionStatement", + "src": "14210:88:50" + }, + { + "expression": { + "arguments": [ + { + "id": 10104, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10055, + "src": "14325:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10103, + "name": "_closeAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12890, + "src": "14308:16:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 10105, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14308:30:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10106, + "nodeType": "ExpressionStatement", + "src": "14308:30:50" + } + ] + }, + "documentation": { + "id": 10053, + "nodeType": "StructuredDocumentation", + "src": "13729:70:50", + "text": " @notice See {ISubgraphService.closeStaleAllocation}" + }, + "functionSelector": "a827a90c", + "id": 10108, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "forceCloseAllocation", + "nameLocation": "13813:20:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10057, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "13865:8:50" + }, + "parameters": { + "id": 10056, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10055, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "13842:12:50", + "nodeType": "VariableDeclaration", + "scope": 10108, + "src": "13834:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10054, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13834:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "13833:22:50" + }, + "returnParameters": { + "id": 10058, + "nodeType": "ParameterList", + "parameters": [], + "src": "13874:0:50" + }, + "scope": 10684, + "src": "13804:541:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11181 + ], + "body": { + "id": 10149, + "nodeType": "Block", + "src": "14695:237:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 10132, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10113, + "src": "14742:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 10130, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "14726:11:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 10131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "14738:3:50", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "14726:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 10133, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14726:29:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10134, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "14756:7:50", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "14726:37:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 10135, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10111, + "src": "14767:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "14726:48:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 10138, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10111, + "src": "14827:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10139, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10113, + "src": "14836:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10137, + "name": "SubgraphServiceAllocationNotAuthorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11145, + "src": "14788:38:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", + "typeString": "function (address,address) pure returns (error)" + } + }, + "id": 10140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14788:61:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 10129, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "14705:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 10141, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14705:154:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10142, + "nodeType": "ExpressionStatement", + "src": "14705:154:50" + }, + { + "expression": { + "arguments": [ + { + "id": 10144, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10113, + "src": "14887:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10145, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10115, + "src": "14901:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10146, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2152, + "src": "14909:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 10143, + "name": "_resizeAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12823, + "src": "14869:17:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint32_$returns$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (address,uint256,uint32) returns (struct Allocation.State memory)" + } + }, + "id": 10147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14869:56:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10148, + "nodeType": "ExpressionStatement", + "src": "14869:56:50" + } + ] + }, + "documentation": { + "id": 10109, + "nodeType": "StructuredDocumentation", + "src": "14351:66:50", + "text": " @notice See {ISubgraphService.resizeAllocation}" + }, + "functionSelector": "81e777a7", + "id": 10150, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 10118, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10111, + "src": "14585:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 10119, + "kind": "modifierInvocation", + "modifierName": { + "id": 10117, + "name": "onlyAuthorizedForProvision", + "nameLocations": [ + "14558:26:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1703, + "src": "14558:26:50" + }, + "nodeType": "ModifierInvocation", + "src": "14558:35:50" + }, + { + "arguments": [ + { + "id": 10121, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10111, + "src": "14621:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 10122, + "kind": "modifierInvocation", + "modifierName": { + "id": 10120, + "name": "onlyValidProvision", + "nameLocations": [ + "14602:18:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1728, + "src": "14602:18:50" + }, + "nodeType": "ModifierInvocation", + "src": "14602:27:50" + }, + { + "arguments": [ + { + "id": 10124, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10111, + "src": "14660:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 10125, + "kind": "modifierInvocation", + "modifierName": { + "id": 10123, + "name": "onlyRegisteredIndexer", + "nameLocations": [ + "14638:21:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 9567, + "src": "14638:21:50" + }, + "nodeType": "ModifierInvocation", + "src": "14638:30:50" + }, + { + "id": 10127, + "kind": "modifierInvocation", + "modifierName": { + "id": 10126, + "name": "whenNotPaused", + "nameLocations": [ + "14677:13:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5329, + "src": "14677:13:50" + }, + "nodeType": "ModifierInvocation", + "src": "14677:13:50" + } + ], + "name": "resizeAllocation", + "nameLocation": "14431:16:50", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10116, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10111, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "14465:7:50", + "nodeType": "VariableDeclaration", + "scope": 10150, + "src": "14457:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10110, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14457:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10113, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "14490:12:50", + "nodeType": "VariableDeclaration", + "scope": 10150, + "src": "14482:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10112, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14482:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10115, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "14520:6:50", + "nodeType": "VariableDeclaration", + "scope": 10150, + "src": "14512:14:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10114, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14512:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "14447:85:50" + }, + "returnParameters": { + "id": 10128, + "nodeType": "ParameterList", + "parameters": [], + "src": "14695:0:50" + }, + "scope": 10684, + "src": "14422:510:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11191 + ], + "body": { + "id": 10169, + "nodeType": "Block", + "src": "15176:86:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10164, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10153, + "src": "15211:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10165, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10155, + "src": "15220:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10166, + "name": "subgraphDeploymentID", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10157, + "src": "15234:20:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 10163, + "name": "_migrateLegacyAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12307, + "src": "15186:24:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$", + "typeString": "function (address,address,bytes32)" + } + }, + "id": 10167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15186:69:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10168, + "nodeType": "ExpressionStatement", + "src": "15186:69:50" + } + ] + }, + "documentation": { + "id": 10151, + "nodeType": "StructuredDocumentation", + "src": "14938:73:50", + "text": " @notice See {ISubgraphService.migrateLegacyAllocation}" + }, + "functionSelector": "7dfe6d28", + "id": 10170, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10161, + "kind": "modifierInvocation", + "modifierName": { + "id": 10160, + "name": "onlyOwner", + "nameLocations": [ + "15166:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "15166:9:50" + }, + "nodeType": "ModifierInvocation", + "src": "15166:9:50" + } + ], + "name": "migrateLegacyAllocation", + "nameLocation": "15025:23:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10159, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "15157:8:50" + }, + "parameters": { + "id": 10158, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10153, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "15066:7:50", + "nodeType": "VariableDeclaration", + "scope": 10170, + "src": "15058:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10152, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15058:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10155, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "15091:12:50", + "nodeType": "VariableDeclaration", + "scope": 10170, + "src": "15083:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10154, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15083:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10157, + "mutability": "mutable", + "name": "subgraphDeploymentID", + "nameLocation": "15121:20:50", + "nodeType": "VariableDeclaration", + "scope": 10170, + "src": "15113:28:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10156, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "15113:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "15048:99:50" + }, + "returnParameters": { + "id": 10162, + "nodeType": "ParameterList", + "parameters": [], + "src": "15176:0:50" + }, + "scope": 10684, + "src": "15016:246:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11199 + ], + "body": { + "id": 10186, + "nodeType": "Block", + "src": "15430:58:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10182, + "name": "pauseGuardian", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10173, + "src": "15458:13:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10183, + "name": "allowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10175, + "src": "15473:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 10181, + "name": "_setPauseGuardian", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1185, + "src": "15440:17:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$", + "typeString": "function (address,bool)" + } + }, + "id": 10184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15440:41:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10185, + "nodeType": "ExpressionStatement", + "src": "15440:41:50" + } + ] + }, + "documentation": { + "id": 10171, + "nodeType": "StructuredDocumentation", + "src": "15268:66:50", + "text": " @notice See {ISubgraphService.setPauseGuardian}" + }, + "functionSelector": "35577962", + "id": 10187, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10179, + "kind": "modifierInvocation", + "modifierName": { + "id": 10178, + "name": "onlyOwner", + "nameLocations": [ + "15420:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "15420:9:50" + }, + "nodeType": "ModifierInvocation", + "src": "15420:9:50" + } + ], + "name": "setPauseGuardian", + "nameLocation": "15348:16:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10177, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "15411:8:50" + }, + "parameters": { + "id": 10176, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10173, + "mutability": "mutable", + "name": "pauseGuardian", + "nameLocation": "15373:13:50", + "nodeType": "VariableDeclaration", + "scope": 10187, + "src": "15365:21:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10172, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15365:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10175, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "15393:7:50", + "nodeType": "VariableDeclaration", + "scope": 10187, + "src": "15388:12:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10174, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15388:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "15364:37:50" + }, + "returnParameters": { + "id": 10180, + "nodeType": "ParameterList", + "parameters": [], + "src": "15430:0:50" + }, + "scope": 10684, + "src": "15339:149:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11235 + ], + "body": { + "id": 10200, + "nodeType": "Block", + "src": "15647:71:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 10195, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "15680:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 10196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15684:6:50", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "15680:10:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10197, + "name": "rewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10190, + "src": "15692:18:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10194, + "name": "_setRewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12910, + "src": "15657:22:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 10198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15657:54:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10199, + "nodeType": "ExpressionStatement", + "src": "15657:54:50" + } + ] + }, + "documentation": { + "id": 10188, + "nodeType": "StructuredDocumentation", + "src": "15494:71:50", + "text": " @notice See {ISubgraphService.setRewardsDestination}" + }, + "functionSelector": "772495c3", + "id": 10201, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "setRewardsDestination", + "nameLocation": "15579:21:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10192, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "15638:8:50" + }, + "parameters": { + "id": 10191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10190, + "mutability": "mutable", + "name": "rewardsDestination", + "nameLocation": "15609:18:50", + "nodeType": "VariableDeclaration", + "scope": 10201, + "src": "15601:26:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10189, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15601:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "15600:28:50" + }, + "returnParameters": { + "id": 10193, + "nodeType": "ParameterList", + "parameters": [], + "src": "15647:0:50" + }, + "scope": 10684, + "src": "15570:148:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11205 + ], + "body": { + "id": 10215, + "nodeType": "Block", + "src": "15899:95:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10211, + "name": "minimumProvisionTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10204, + "src": "15934:22:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10212, + "name": "DEFAULT_MAX_PROVISION_TOKENS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1621, + "src": "15958:28:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10210, + "name": "_setProvisionTokensRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1825, + "src": "15909:24:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 10213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15909:78:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10214, + "nodeType": "ExpressionStatement", + "src": "15909:78:50" + } + ] + }, + "documentation": { + "id": 10202, + "nodeType": "StructuredDocumentation", + "src": "15724:75:50", + "text": " @notice See {ISubgraphService.setMinimumProvisionTokens}" + }, + "functionSelector": "832bc923", + "id": 10216, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10208, + "kind": "modifierInvocation", + "modifierName": { + "id": 10207, + "name": "onlyOwner", + "nameLocations": [ + "15889:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "15889:9:50" + }, + "nodeType": "ModifierInvocation", + "src": "15889:9:50" + } + ], + "name": "setMinimumProvisionTokens", + "nameLocation": "15813:25:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10206, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "15880:8:50" + }, + "parameters": { + "id": 10205, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10204, + "mutability": "mutable", + "name": "minimumProvisionTokens", + "nameLocation": "15847:22:50", + "nodeType": "VariableDeclaration", + "scope": 10216, + "src": "15839:30:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10203, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15839:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15838:32:50" + }, + "returnParameters": { + "id": 10209, + "nodeType": "ParameterList", + "parameters": [], + "src": "15899:0:50" + }, + "scope": 10684, + "src": "15804:190:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11211 + ], + "body": { + "id": 10229, + "nodeType": "Block", + "src": "16153:53:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10226, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10219, + "src": "16183:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 10225, + "name": "_setDelegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1793, + "src": "16163:19:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", + "typeString": "function (uint32)" + } + }, + "id": 10227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16163:36:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10228, + "nodeType": "ExpressionStatement", + "src": "16163:36:50" + } + ] + }, + "documentation": { + "id": 10217, + "nodeType": "StructuredDocumentation", + "src": "16000:68:50", + "text": " @notice See {ISubgraphService.setDelegationRatio}" + }, + "functionSelector": "1dd42f60", + "id": 10230, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10223, + "kind": "modifierInvocation", + "modifierName": { + "id": 10222, + "name": "onlyOwner", + "nameLocations": [ + "16143:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "16143:9:50" + }, + "nodeType": "ModifierInvocation", + "src": "16143:9:50" + } + ], + "name": "setDelegationRatio", + "nameLocation": "16082:18:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10221, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "16134:8:50" + }, + "parameters": { + "id": 10220, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10219, + "mutability": "mutable", + "name": "delegationRatio", + "nameLocation": "16108:15:50", + "nodeType": "VariableDeclaration", + "scope": 10230, + "src": "16101:22:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 10218, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "16101:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "16100:24:50" + }, + "returnParameters": { + "id": 10224, + "nodeType": "ParameterList", + "parameters": [], + "src": "16153:0:50" + }, + "scope": 10684, + "src": "16073:133:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11217 + ], + "body": { + "id": 10243, + "nodeType": "Block", + "src": "16370:56:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10240, + "name": "stakeToFeesRatio_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10233, + "src": "16401:17:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10239, + "name": "_setStakeToFeesRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10683, + "src": "16380:20:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 10241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16380:39:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10242, + "nodeType": "ExpressionStatement", + "src": "16380:39:50" + } + ] + }, + "documentation": { + "id": 10231, + "nodeType": "StructuredDocumentation", + "src": "16212:69:50", + "text": " @notice See {ISubgraphService.setStakeToFeesRatio}" + }, + "functionSelector": "e6f50054", + "id": 10244, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10237, + "kind": "modifierInvocation", + "modifierName": { + "id": 10236, + "name": "onlyOwner", + "nameLocations": [ + "16360:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "16360:9:50" + }, + "nodeType": "ModifierInvocation", + "src": "16360:9:50" + } + ], + "name": "setStakeToFeesRatio", + "nameLocation": "16295:19:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10235, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "16351:8:50" + }, + "parameters": { + "id": 10234, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10233, + "mutability": "mutable", + "name": "stakeToFeesRatio_", + "nameLocation": "16323:17:50", + "nodeType": "VariableDeclaration", + "scope": 10244, + "src": "16315:25:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10232, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16315:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16314:27:50" + }, + "returnParameters": { + "id": 10238, + "nodeType": "ParameterList", + "parameters": [], + "src": "16370:0:50" + }, + "scope": 10684, + "src": "16286:140:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11223 + ], + "body": { + "id": 10257, + "nodeType": "Block", + "src": "16586:53:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10254, + "name": "maxPOIStaleness", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10247, + "src": "16616:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10253, + "name": "_setMaxPOIStaleness", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12925, + "src": "16596:19:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 10255, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16596:36:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10256, + "nodeType": "ExpressionStatement", + "src": "16596:36:50" + } + ] + }, + "documentation": { + "id": 10245, + "nodeType": "StructuredDocumentation", + "src": "16432:68:50", + "text": " @notice See {ISubgraphService.setMaxPOIStaleness}" + }, + "functionSelector": "7aa31bce", + "id": 10258, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10251, + "kind": "modifierInvocation", + "modifierName": { + "id": 10250, + "name": "onlyOwner", + "nameLocations": [ + "16576:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "16576:9:50" + }, + "nodeType": "ModifierInvocation", + "src": "16576:9:50" + } + ], + "name": "setMaxPOIStaleness", + "nameLocation": "16514:18:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10249, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "16567:8:50" + }, + "parameters": { + "id": 10248, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10247, + "mutability": "mutable", + "name": "maxPOIStaleness", + "nameLocation": "16541:15:50", + "nodeType": "VariableDeclaration", + "scope": 10258, + "src": "16533:23:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10246, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16533:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16532:25:50" + }, + "returnParameters": { + "id": 10252, + "nodeType": "ParameterList", + "parameters": [], + "src": "16586:0:50" + }, + "scope": 10684, + "src": "16505:134:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11229 + ], + "body": { + "id": 10285, + "nodeType": "Block", + "src": "16787:186:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 10270, + "name": "curationCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10261, + "src": "16824:11:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10268, + "name": "PPMMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4262, + "src": "16805:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_PPMMath_$4262_$", + "typeString": "type(library PPMMath)" + } + }, + "id": 10269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16813:10:50", + "memberName": "isValidPPM", + "nodeType": "MemberAccess", + "referencedDeclaration": 4261, + "src": "16805:18:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) pure returns (bool)" + } + }, + "id": 10271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16805:31:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 10273, + "name": "curationCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10261, + "src": "16872:11:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10272, + "name": "SubgraphServiceInvalidCurationCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11102, + "src": "16838:33:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256) pure returns (error)" + } + }, + "id": 10274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16838:46:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 10267, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "16797:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 10275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16797:88:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10276, + "nodeType": "ExpressionStatement", + "src": "16797:88:50" + }, + { + "expression": { + "id": 10279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10277, + "name": "curationFeesCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10700, + "src": "16895:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10278, + "name": "curationCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10261, + "src": "16913:11:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16895:29:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10280, + "nodeType": "ExpressionStatement", + "src": "16895:29:50" + }, + { + "eventCall": { + "arguments": [ + { + "id": 10282, + "name": "curationCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10261, + "src": "16954:11:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10281, + "name": "CurationCutSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11097, + "src": "16939:14:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 10283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16939:27:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10284, + "nodeType": "EmitStatement", + "src": "16934:32:50" + } + ] + }, + "documentation": { + "id": 10259, + "nodeType": "StructuredDocumentation", + "src": "16645:64:50", + "text": " @notice See {ISubgraphService.setCurationCut}" + }, + "functionSelector": "7e89bac3", + "id": 10286, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10265, + "kind": "modifierInvocation", + "modifierName": { + "id": 10264, + "name": "onlyOwner", + "nameLocations": [ + "16777:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4743, + "src": "16777:9:50" + }, + "nodeType": "ModifierInvocation", + "src": "16777:9:50" + } + ], + "name": "setCurationCut", + "nameLocation": "16723:14:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10263, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "16768:8:50" + }, + "parameters": { + "id": 10262, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10261, + "mutability": "mutable", + "name": "curationCut", + "nameLocation": "16746:11:50", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "16738:19:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10260, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16738:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16737:21:50" + }, + "returnParameters": { + "id": 10266, + "nodeType": "ParameterList", + "parameters": [], + "src": "16787:0:50" + }, + "scope": 10684, + "src": "16714:259:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11244 + ], + "body": { + "id": 10300, + "nodeType": "Block", + "src": "17149:49:50", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 10296, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "17166:11:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 10298, + "indexExpression": { + "id": 10297, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10289, + "src": "17178:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "17166:25:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "functionReturnParameters": 10295, + "id": 10299, + "nodeType": "Return", + "src": "17159:32:50" + } + ] + }, + "documentation": { + "id": 10287, + "nodeType": "StructuredDocumentation", + "src": "16979:63:50", + "text": " @notice See {ISubgraphService.getAllocation}" + }, + "functionSelector": "0e022923", + "id": 10301, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAllocation", + "nameLocation": "17056:13:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10291, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "17106:8:50" + }, + "parameters": { + "id": 10290, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10289, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "17078:12:50", + "nodeType": "VariableDeclaration", + "scope": 10301, + "src": "17070:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10288, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17070:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "17069:22:50" + }, + "returnParameters": { + "id": 10295, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10294, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10301, + "src": "17124:23:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 10293, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10292, + "name": "Allocation.State", + "nameLocations": [ + "17124:10:50", + "17135:5:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "17124:16:50" + }, + "referencedDeclaration": 11307, + "src": "17124:16:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "17123:25:50" + }, + "scope": 10684, + "src": "17047:151:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 297 + ], + "body": { + "id": 10339, + "nodeType": "Block", + "src": "18007:272:50", + "statements": [ + { + "assignments": [ + 10322 + ], + "declarations": [ + { + "constant": false, + "id": 10322, + "mutability": "mutable", + "name": "allo", + "nameLocation": "18041:4:50", + "nodeType": "VariableDeclaration", + "scope": 10339, + "src": "18017:28:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 10321, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10320, + "name": "Allocation.State", + "nameLocations": [ + "18017:10:50", + "18028:5:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "18017:16:50" + }, + "referencedDeclaration": 11307, + "src": "18017:16:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 10326, + "initialValue": { + "baseExpression": { + "id": 10323, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "18048:11:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 10325, + "indexExpression": { + "id": 10324, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10304, + "src": "18060:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "18048:25:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18017:56:50" + }, + { + "expression": { + "components": [ + { + "expression": { + "id": 10327, + "name": "allo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10322, + "src": "18104:4:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10328, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18109:7:50", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "18104:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 10329, + "name": "allo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10322, + "src": "18130:4:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10330, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18135:20:50", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "18130:25:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 10331, + "name": "allo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10322, + "src": "18169:4:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10332, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18174:6:50", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "18169:11:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10333, + "name": "allo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10322, + "src": "18194:4:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10334, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18199:27:50", + "memberName": "accRewardsPerAllocatedToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 11304, + "src": "18194:32:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10335, + "name": "allo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10322, + "src": "18240:4:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10336, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18245:17:50", + "memberName": "accRewardsPending", + "nodeType": "MemberAccess", + "referencedDeclaration": 11306, + "src": "18240:22:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 10337, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18090:182:50", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(address,bytes32,uint256,uint256,uint256)" + } + }, + "functionReturnParameters": 10317, + "id": 10338, + "nodeType": "Return", + "src": "18083:189:50" + } + ] + }, + "documentation": { + "id": 10302, + "nodeType": "StructuredDocumentation", + "src": "17204:658:50", + "text": " @notice Get allocation data to calculate rewards issuance\n @dev Implements {IRewardsIssuer.getAllocationData}\n @dev Note that this is slightly different than {getAllocation}. It returns an\n unstructured subset of the allocation data, which is the minimum required to mint rewards.\n Should only be used by the {RewardsManager}.\n @param allocationId The allocation Id\n @return indexer The indexer address\n @return subgraphDeploymentId Subgraph deployment id for the allocation\n @return tokens Amount of allocated tokens\n @return accRewardsPerAllocatedToken Rewards snapshot" + }, + "functionSelector": "55c85269", + "id": 10340, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAllocationData", + "nameLocation": "17876:17:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10306, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "17944:8:50" + }, + "parameters": { + "id": 10305, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10304, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "17911:12:50", + "nodeType": "VariableDeclaration", + "scope": 10340, + "src": "17903:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10303, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17903:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "17893:36:50" + }, + "returnParameters": { + "id": 10317, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10308, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10340, + "src": "17962:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10307, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17962:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10310, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10340, + "src": "17971:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10309, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "17971:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10312, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10340, + "src": "17980:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10311, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17980:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10314, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10340, + "src": "17989:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10313, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17989:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10316, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10340, + "src": "17998:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10315, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17998:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17961:45:50" + }, + "scope": 10684, + "src": "17867:412:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 305 + ], + "body": { + "id": 10353, + "nodeType": "Block", + "src": "18711:69:50", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 10349, + "name": "subgraphAllocatedTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13066, + "src": "18728:23:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 10351, + "indexExpression": { + "id": 10350, + "name": "subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10343, + "src": "18752:20:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "18728:45:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10348, + "id": 10352, + "nodeType": "Return", + "src": "18721:52:50" + } + ] + }, + "documentation": { + "id": 10341, + "nodeType": "StructuredDocumentation", + "src": "18285:314:50", + "text": " @notice Return the total amount of tokens allocated to subgraph.\n @dev Implements {IRewardsIssuer.getSubgraphAllocatedTokens}\n @dev To be used by the {RewardsManager}.\n @param subgraphDeploymentId Deployment Id for the subgraph\n @return Total tokens allocated to subgraph" + }, + "functionSelector": "e2e1e8e9", + "id": 10354, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getSubgraphAllocatedTokens", + "nameLocation": "18613:26:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10345, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "18684:8:50" + }, + "parameters": { + "id": 10344, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10343, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "18648:20:50", + "nodeType": "VariableDeclaration", + "scope": 10354, + "src": "18640:28:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10342, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "18640:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "18639:30:50" + }, + "returnParameters": { + "id": 10348, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10347, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10354, + "src": "18702:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10346, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18702:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18701:9:50" + }, + "scope": 10684, + "src": "18604:176:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 313 + ], + "body": { + "id": 10369, + "nodeType": "Block", + "src": "19149:58:50", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "baseExpression": { + "id": 10363, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "19166:11:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 10365, + "indexExpression": { + "id": 10364, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10357, + "src": "19178:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "19166:25:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "id": 10366, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19192:6:50", + "memberName": "isOpen", + "nodeType": "MemberAccess", + "referencedDeclaration": 11621, + "src": "19166:32:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 10367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19166:34:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 10362, + "id": 10368, + "nodeType": "Return", + "src": "19159:41:50" + } + ] + }, + "documentation": { + "id": 10355, + "nodeType": "StructuredDocumentation", + "src": "18786:270:50", + "text": " @notice Check if an allocation is open\n @dev Implements {IRewardsIssuer.isAllocationActive}\n @dev To be used by the {RewardsManager}.\n @param allocationId The allocation Id\n @return Wether or not the allocation is active" + }, + "functionSelector": "6a3ca383", + "id": 10370, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isActiveAllocation", + "nameLocation": "19070:18:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10359, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "19125:8:50" + }, + "parameters": { + "id": 10358, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10357, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "19097:12:50", + "nodeType": "VariableDeclaration", + "scope": 10370, + "src": "19089:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10356, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19089:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "19088:22:50" + }, + "returnParameters": { + "id": 10362, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10361, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10370, + "src": "19143:4:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10360, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "19143:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "19142:6:50" + }, + "scope": 10684, + "src": "19061:146:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11253 + ], + "body": { + "id": 10384, + "nodeType": "Block", + "src": "19401:55:50", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 10380, + "name": "legacyAllocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13048, + "src": "19418:17:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + } + }, + "id": 10382, + "indexExpression": { + "id": 10381, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10373, + "src": "19436:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "19418:31:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage", + "typeString": "struct LegacyAllocation.State storage ref" + } + }, + "functionReturnParameters": 10379, + "id": 10383, + "nodeType": "Return", + "src": "19411:38:50" + } + ] + }, + "documentation": { + "id": 10371, + "nodeType": "StructuredDocumentation", + "src": "19213:69:50", + "text": " @notice See {ISubgraphService.getLegacyAllocation}" + }, + "functionSelector": "6d9a3951", + "id": 10385, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getLegacyAllocation", + "nameLocation": "19296:19:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10375, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "19352:8:50" + }, + "parameters": { + "id": 10374, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10373, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "19324:12:50", + "nodeType": "VariableDeclaration", + "scope": 10385, + "src": "19316:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10372, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19316:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "19315:22:50" + }, + "returnParameters": { + "id": 10379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10378, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10385, + "src": "19370:29:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State" + }, + "typeName": { + "id": 10377, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10376, + "name": "LegacyAllocation.State", + "nameLocations": [ + "19370:16:50", + "19387:5:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "19370:22:50" + }, + "referencedDeclaration": 11933, + "src": "19370:22:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "19369:31:50" + }, + "scope": 10684, + "src": "19287:169:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11263 + ], + "body": { + "id": 10401, + "nodeType": "Block", + "src": "19649:69:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10397, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10388, + "src": "19689:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10398, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10390, + "src": "19698:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10396, + "name": "_encodeAllocationProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12977, + "src": "19666:22:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bytes32_$", + "typeString": "function (address,address) view returns (bytes32)" + } + }, + "id": 10399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19666:45:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 10395, + "id": 10400, + "nodeType": "Return", + "src": "19659:52:50" + } + ] + }, + "documentation": { + "id": 10386, + "nodeType": "StructuredDocumentation", + "src": "19462:71:50", + "text": " @notice See {ISubgraphService.encodeAllocationProof}" + }, + "functionSelector": "ce56c98b", + "id": 10402, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeAllocationProof", + "nameLocation": "19547:21:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10392, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "19622:8:50" + }, + "parameters": { + "id": 10391, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10388, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "19577:7:50", + "nodeType": "VariableDeclaration", + "scope": 10402, + "src": "19569:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10387, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19569:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10390, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "19594:12:50", + "nodeType": "VariableDeclaration", + "scope": 10402, + "src": "19586:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10389, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19586:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "19568:39:50" + }, + "returnParameters": { + "id": 10395, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10394, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10402, + "src": "19640:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10393, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "19640:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "19639:9:50" + }, + "scope": 10684, + "src": "19538:180:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11271 + ], + "body": { + "id": 10419, + "nodeType": "Block", + "src": "19883:78:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10416, + "name": "maxPOIStaleness", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13056, + "src": "19938:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 10413, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10405, + "src": "19916:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 10411, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "19900:11:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 10412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19912:3:50", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "19900:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 10414, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19900:29:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10415, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19930:7:50", + "memberName": "isStale", + "nodeType": "MemberAccess", + "referencedDeclaration": 11587, + "src": "19900:37:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11307_memory_ptr_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory,uint256) view returns (bool)" + } + }, + "id": 10417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19900:54:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 10410, + "id": 10418, + "nodeType": "Return", + "src": "19893:61:50" + } + ] + }, + "documentation": { + "id": 10403, + "nodeType": "StructuredDocumentation", + "src": "19724:67:50", + "text": " @notice See {ISubgraphService.isStaleAllocation}" + }, + "functionSelector": "3f0ed79d", + "id": 10420, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isStaleAllocation", + "nameLocation": "19805:17:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10407, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "19859:8:50" + }, + "parameters": { + "id": 10406, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10405, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "19831:12:50", + "nodeType": "VariableDeclaration", + "scope": 10420, + "src": "19823:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10404, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19823:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "19822:22:50" + }, + "returnParameters": { + "id": 10410, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10409, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10420, + "src": "19877:4:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10408, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "19877:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "19876:6:50" + }, + "scope": 10684, + "src": "19796:165:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 11279 + ], + "body": { + "id": 10434, + "nodeType": "Block", + "src": "20117:66:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10430, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10423, + "src": "20151:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10431, + "name": "delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2152, + "src": "20160:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 10429, + "name": "_isOverAllocated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12997, + "src": "20134:16:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint32_$returns$_t_bool_$", + "typeString": "function (address,uint32) view returns (bool)" + } + }, + "id": 10432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20134:42:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 10428, + "id": 10433, + "nodeType": "Return", + "src": "20127:49:50" + } + ] + }, + "documentation": { + "id": 10421, + "nodeType": "StructuredDocumentation", + "src": "19967:65:50", + "text": " @notice See {ISubgraphService.isOverAllocated}" + }, + "functionSelector": "ba38f67d", + "id": 10435, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isOverAllocated", + "nameLocation": "20046:15:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10425, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "20093:8:50" + }, + "parameters": { + "id": 10424, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10423, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "20070:7:50", + "nodeType": "VariableDeclaration", + "scope": 10435, + "src": "20062:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10422, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20062:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "20061:17:50" + }, + "returnParameters": { + "id": 10428, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10427, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10435, + "src": "20111:4:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10426, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "20111:4:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "20110:6:50" + }, + "scope": 10684, + "src": "20037:146:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 2050 + ], + "body": { + "id": 10451, + "nodeType": "Block", + "src": "20661:90:50", + "statements": [ + { + "expression": { + "components": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10444, + "name": "_disputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13369, + "src": "20679:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IDisputeManager_$11057_$", + "typeString": "function () view returns (contract IDisputeManager)" + } + }, + "id": 10445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20679:17:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + }, + "id": 10446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "20697:16:50", + "memberName": "getDisputePeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 11015, + "src": "20679:34:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$", + "typeString": "function () view external returns (uint64)" + } + }, + "id": 10447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20679:36:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 10448, + "name": "DEFAULT_MAX_THAWING_PERIOD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1607, + "src": "20717:26:50", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "id": 10449, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20678:66:50", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint64_$_t_uint64_$", + "typeString": "tuple(uint64,uint64)" + } + }, + "functionReturnParameters": 10443, + "id": 10450, + "nodeType": "Return", + "src": "20671:73:50" + } + ] + }, + "documentation": { + "id": 10436, + "nodeType": "StructuredDocumentation", + "src": "20233:333:50", + "text": " @notice Getter for the accepted thawing period range for provisions\n @dev This override ensures {ProvisionManager} uses the thawing period from the {DisputeManager}\n @return min The minimum thawing period which is defined by {DisputeManager-getDisputePeriod}\n @return max The maximum is unbounded" + }, + "id": 10452, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getThawingPeriodRange", + "nameLocation": "20580:22:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10438, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "20619:8:50" + }, + "parameters": { + "id": 10437, + "nodeType": "ParameterList", + "parameters": [], + "src": "20602:2:50" + }, + "returnParameters": { + "id": 10443, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10440, + "mutability": "mutable", + "name": "min", + "nameLocation": "20644:3:50", + "nodeType": "VariableDeclaration", + "scope": 10452, + "src": "20637:10:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10439, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "20637:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10442, + "mutability": "mutable", + "name": "max", + "nameLocation": "20656:3:50", + "nodeType": "VariableDeclaration", + "scope": 10452, + "src": "20649:10:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10441, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "20649:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "20636:24:50" + }, + "scope": 10684, + "src": "20571:180:50", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 2063 + ], + "body": { + "id": 10468, + "nodeType": "Block", + "src": "21076:86:50", + "statements": [ + { + "expression": { + "components": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10461, + "name": "_disputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13369, + "src": "21094:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IDisputeManager_$11057_$", + "typeString": "function () view returns (contract IDisputeManager)" + } + }, + "id": 10462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21094:17:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + }, + "id": 10463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21112:14:50", + "memberName": "getVerifierCut", + "nodeType": "MemberAccess", + "referencedDeclaration": 11010, + "src": "21094:32:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint32_$", + "typeString": "function () view external returns (uint32)" + } + }, + "id": 10464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21094:34:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 10465, + "name": "DEFAULT_MAX_VERIFIER_CUT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1593, + "src": "21130:24:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "id": 10466, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "21093:62:50", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$", + "typeString": "tuple(uint32,uint32)" + } + }, + "functionReturnParameters": 10460, + "id": 10467, + "nodeType": "Return", + "src": "21086:69:50" + } + ] + }, + "documentation": { + "id": 10453, + "nodeType": "StructuredDocumentation", + "src": "20757:226:50", + "text": " @notice Getter for the accepted verifier cut range for provisions\n @return min The minimum verifier cut which is defined by {DisputeManager-getVerifierCut}\n @return max The maximum is 100% in PPM" + }, + "id": 10469, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getVerifierCutRange", + "nameLocation": "20997:20:50", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10455, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "21034:8:50" + }, + "parameters": { + "id": 10454, + "nodeType": "ParameterList", + "parameters": [], + "src": "21017:2:50" + }, + "returnParameters": { + "id": 10460, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10457, + "mutability": "mutable", + "name": "min", + "nameLocation": "21059:3:50", + "nodeType": "VariableDeclaration", + "scope": 10469, + "src": "21052:10:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 10456, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "21052:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10459, + "mutability": "mutable", + "name": "max", + "nameLocation": "21071:3:50", + "nodeType": "VariableDeclaration", + "scope": 10469, + "src": "21064:10:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 10458, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "21064:6:50", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "21051:24:50" + }, + "scope": 10684, + "src": "20988:174:50", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10660, + "nodeType": "Block", + "src": "22613:2203:50", + "statements": [ + { + "assignments": [ + 10479 + ], + "declarations": [ + { + "constant": false, + "id": 10479, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "22631:7:50", + "nodeType": "VariableDeclaration", + "scope": 10660, + "src": "22623:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10478, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22623:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 10483, + "initialValue": { + "expression": { + "expression": { + "id": 10480, + "name": "_signedRav", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10473, + "src": "22641:10:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV memory" + } + }, + "id": 10481, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "22652:3:50", + "memberName": "rav", + "nodeType": "MemberAccess", + "referencedDeclaration": 2543, + "src": "22641:14:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_memory_ptr", + "typeString": "struct ITAPCollector.ReceiptAggregateVoucher memory" + } + }, + "id": 10482, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "22656:15:50", + "memberName": "serviceProvider", + "nodeType": "MemberAccess", + "referencedDeclaration": 2532, + "src": "22641:30:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22623:48:50" + }, + { + "assignments": [ + 10485 + ], + "declarations": [ + { + "constant": false, + "id": 10485, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "22689:12:50", + "nodeType": "VariableDeclaration", + "scope": 10660, + "src": "22681:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10484, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22681:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 10495, + "initialValue": { + "arguments": [ + { + "expression": { + "expression": { + "id": 10488, + "name": "_signedRav", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10473, + "src": "22715:10:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV memory" + } + }, + "id": 10489, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "22726:3:50", + "memberName": "rav", + "nodeType": "MemberAccess", + "referencedDeclaration": 2543, + "src": "22715:14:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_memory_ptr", + "typeString": "struct ITAPCollector.ReceiptAggregateVoucher memory" + } + }, + "id": 10490, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "22730:8:50", + "memberName": "metadata", + "nodeType": "MemberAccess", + "referencedDeclaration": 2538, + "src": "22715:23:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 10492, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22741:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10491, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22741:7:50", + "typeDescriptions": {} + } + } + ], + "id": 10493, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "22740:9:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + } + ], + "expression": { + "id": 10486, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "22704:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 10487, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "22708:6:50", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "22704:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 10494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "22704:46:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22681:69:50" + }, + { + "assignments": [ + 10500 + ], + "declarations": [ + { + "constant": false, + "id": 10500, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "22784:10:50", + "nodeType": "VariableDeclaration", + "scope": 10660, + "src": "22760:34:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 10499, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10498, + "name": "Allocation.State", + "nameLocations": [ + "22760:10:50", + "22771:5:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "22760:16:50" + }, + "referencedDeclaration": 11307, + "src": "22760:16:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 10505, + "initialValue": { + "arguments": [ + { + "id": 10503, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10485, + "src": "22813:12:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 10501, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "22797:11:50", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 10502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "22809:3:50", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "22797:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 10504, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "22797:29:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22760:66:50" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10510, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10507, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10500, + "src": "22930:10:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10508, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "22941:7:50", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "22930:18:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 10509, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10479, + "src": "22952:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "22930:29:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 10512, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10479, + "src": "22987:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 10513, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10500, + "src": "22996:10:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10514, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23007:7:50", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "22996:18:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10511, + "name": "SubgraphServiceInvalidRAV", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11152, + "src": "22961:25:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", + "typeString": "function (address,address) pure returns (error)" + } + }, + "id": 10515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "22961:54:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 10506, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "22922:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 10516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "22922:94:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10517, + "nodeType": "ExpressionStatement", + "src": "22922:94:50" + }, + { + "assignments": [ + 10519 + ], + "declarations": [ + { + "constant": false, + "id": 10519, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "23034:20:50", + "nodeType": "VariableDeclaration", + "scope": 10660, + "src": "23026:28:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10518, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "23026:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 10522, + "initialValue": { + "expression": { + "id": 10520, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10500, + "src": "23057:10:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 10521, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23068:20:50", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "23057:31:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23026:62:50" + }, + { + "expression": { + "arguments": [ + { + "id": 10524, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10479, + "src": "23153:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "hexValue": "30", + "id": 10525, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23162:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 10523, + "name": "_releaseStake", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 880, + "src": "23139:13:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 10526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23139:25:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10527, + "nodeType": "ExpressionStatement", + "src": "23139:25:50" + }, + { + "assignments": [ + 10529 + ], + "declarations": [ + { + "constant": false, + "id": 10529, + "mutability": "mutable", + "name": "balanceBefore", + "nameLocation": "23278:13:50", + "nodeType": "VariableDeclaration", + "scope": 10660, + "src": "23270:21:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10528, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23270:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10538, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 10535, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "23326:4:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SubgraphService_$10684", + "typeString": "contract SubgraphService" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_SubgraphService_$10684", + "typeString": "contract SubgraphService" + } + ], + "id": 10534, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23318:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10533, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23318:7:50", + "typeDescriptions": {} + } + }, + "id": 10536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23318:13:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10530, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "23294:11:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 10531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23294:13:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 10532, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23308:9:50", + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 5831, + "src": "23294:23:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 10537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23294:38:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23270:62:50" + }, + { + "assignments": [ + 10540 + ], + "declarations": [ + { + "constant": false, + "id": 10540, + "mutability": "mutable", + "name": "curationCut", + "nameLocation": "23351:11:50", + "nodeType": "VariableDeclaration", + "scope": 10660, + "src": "23343:19:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10539, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23343:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10549, + "initialValue": { + "condition": { + "arguments": [ + { + "id": 10544, + "name": "subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10519, + "src": "23387:20:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10541, + "name": "_curation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13389, + "src": "23365:9:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ICuration_$165_$", + "typeString": "function () view returns (contract ICuration)" + } + }, + "id": 10542, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23365:11:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "id": 10543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23377:9:50", + "memberName": "isCurated", + "nodeType": "MemberAccess", + "referencedDeclaration": 110, + "src": "23365:21:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view external returns (bool)" + } + }, + "id": 10545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23365:43:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 10547, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23429:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 10548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "23365:65:50", + "trueExpression": { + "id": 10546, + "name": "curationFeesCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10700, + "src": "23411:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23343:87:50" + }, + { + "assignments": [ + 10551 + ], + "declarations": [ + { + "constant": false, + "id": 10551, + "mutability": "mutable", + "name": "tokensCollected", + "nameLocation": "23448:15:50", + "nodeType": "VariableDeclaration", + "scope": 10660, + "src": "23440:23:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10550, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23440:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10564, + "initialValue": { + "arguments": [ + { + "expression": { + "expression": { + "id": 10555, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "23503:14:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", + "typeString": "type(contract IGraphPayments)" + } + }, + "id": 10556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23518:12:50", + "memberName": "PaymentTypes", + "nodeType": "MemberAccess", + "referencedDeclaration": 2166, + "src": "23503:27:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_PaymentTypes_$2166_$", + "typeString": "type(enum IGraphPayments.PaymentTypes)" + } + }, + "id": 10557, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "23531:8:50", + "memberName": "QueryFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 2163, + "src": "23503:36:50", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + { + "arguments": [ + { + "id": 10560, + "name": "_signedRav", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10473, + "src": "23564:10:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV memory" + } + }, + { + "id": 10561, + "name": "curationCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10540, + "src": "23576:11:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10558, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "23553:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 10559, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "23557:6:50", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "23553:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 10562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23553:35:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10552, + "name": "_tapCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13379, + "src": "23466:13:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ITAPCollector_$2695_$", + "typeString": "function () view returns (contract ITAPCollector)" + } + }, + "id": 10553, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23466:15:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITAPCollector_$2695", + "typeString": "contract ITAPCollector" + } + }, + "id": 10554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23482:7:50", + "memberName": "collect", + "nodeType": "MemberAccess", + "referencedDeclaration": 2267, + "src": "23466:23:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_enum$_PaymentTypes_$2166_$_t_bytes_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (enum IGraphPayments.PaymentTypes,bytes memory) external returns (uint256)" + } + }, + "id": 10563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23466:132:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23440:158:50" + }, + { + "assignments": [ + 10566 + ], + "declarations": [ + { + "constant": false, + "id": 10566, + "mutability": "mutable", + "name": "tokensCurators", + "nameLocation": "23616:14:50", + "nodeType": "VariableDeclaration", + "scope": 10660, + "src": "23608:22:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10565, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23608:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10571, + "initialValue": { + "arguments": [ + { + "id": 10569, + "name": "curationCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10540, + "src": "23656:11:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10567, + "name": "tokensCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10551, + "src": "23633:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23649:6:50", + "memberName": "mulPPM", + "nodeType": "MemberAccess", + "referencedDeclaration": 4219, + "src": "23633:22:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23633:35:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23608:60:50" + }, + { + "assignments": [ + 10573 + ], + "declarations": [ + { + "constant": false, + "id": 10573, + "mutability": "mutable", + "name": "balanceAfter", + "nameLocation": "23687:12:50", + "nodeType": "VariableDeclaration", + "scope": 10660, + "src": "23679:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10572, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23679:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10582, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 10579, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "23734:4:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SubgraphService_$10684", + "typeString": "contract SubgraphService" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_SubgraphService_$10684", + "typeString": "contract SubgraphService" + } + ], + "id": 10578, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23726:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10577, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23726:7:50", + "typeDescriptions": {} + } + }, + "id": 10580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23726:13:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10574, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "23702:11:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 10575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23702:13:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 10576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "23716:9:50", + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 5831, + "src": "23702:23:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 10581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23702:38:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23679:61:50" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10584, + "name": "balanceBefore", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10529, + "src": "23771:13:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 10585, + "name": "tokensCurators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10566, + "src": "23787:14:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "23771:30:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 10587, + "name": "balanceAfter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10573, + "src": "23805:12:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "23771:46:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 10590, + "name": "balanceBefore", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10529, + "src": "23869:13:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10591, + "name": "balanceAfter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10573, + "src": "23884:12:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10592, + "name": "tokensCurators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10566, + "src": "23898:14:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10589, + "name": "SubgraphServiceInconsistentCollection", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11131, + "src": "23831:37:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256,uint256) pure returns (error)" + } + }, + "id": 10593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23831:82:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 10583, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "23750:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 10594, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "23750:173:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10595, + "nodeType": "ExpressionStatement", + "src": "23750:173:50" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10596, + "name": "tokensCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10551, + "src": "23938:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 10597, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23956:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "23938:19:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10651, + "nodeType": "IfStatement", + "src": "23934:768:50", + "trueBody": { + "id": 10650, + "nodeType": "Block", + "src": "23959:743:50", + "statements": [ + { + "assignments": [ + 10600 + ], + "declarations": [ + { + "constant": false, + "id": 10600, + "mutability": "mutable", + "name": "tokensToLock", + "nameLocation": "24037:12:50", + "nodeType": "VariableDeclaration", + "scope": 10650, + "src": "24029:20:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10599, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24029:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10604, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10603, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10601, + "name": "tokensCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10551, + "src": "24052:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 10602, + "name": "stakeToFeesRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10697, + "src": "24070:16:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "24052:34:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24029:57:50" + }, + { + "assignments": [ + 10606 + ], + "declarations": [ + { + "constant": false, + "id": 10606, + "mutability": "mutable", + "name": "unlockTimestamp", + "nameLocation": "24108:15:50", + "nodeType": "VariableDeclaration", + "scope": 10650, + "src": "24100:23:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10605, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24100:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10614, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10607, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "24126:5:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 10608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24132:9:50", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "24126:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10609, + "name": "_disputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13369, + "src": "24144:15:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IDisputeManager_$11057_$", + "typeString": "function () view returns (contract IDisputeManager)" + } + }, + "id": 10610, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24144:17:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + }, + "id": 10611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24162:16:50", + "memberName": "getDisputePeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 11015, + "src": "24144:34:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$", + "typeString": "function () view external returns (uint64)" + } + }, + "id": 10612, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24144:36:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "24126:54:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24100:80:50" + }, + { + "expression": { + "arguments": [ + { + "id": 10616, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10479, + "src": "24205:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10617, + "name": "tokensToLock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10600, + "src": "24214:12:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10618, + "name": "unlockTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10606, + "src": "24228:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10615, + "name": "_lockStake", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 833, + "src": "24194:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256,uint256)" + } + }, + "id": 10619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24194:50:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10620, + "nodeType": "ExpressionStatement", + "src": "24194:50:50" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10623, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10621, + "name": "tokensCurators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10566, + "src": "24263:14:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 10622, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "24280:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "24263:18:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10649, + "nodeType": "IfStatement", + "src": "24259:433:50", + "trueBody": { + "id": 10648, + "nodeType": "Block", + "src": "24283:409:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10627, + "name": "subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10519, + "src": "24438:20:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10624, + "name": "_graphRewardsManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4590, + "src": "24392:20:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", + "typeString": "function () view returns (contract IRewardsManager)" + } + }, + "id": 10625, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24392:22:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "id": 10626, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24415:22:50", + "memberName": "onSubgraphSignalUpdate", + "nodeType": "MemberAccess", + "referencedDeclaration": 430, + "src": "24392:45:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) external returns (uint256)" + } + }, + "id": 10628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24392:67:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10629, + "nodeType": "ExpressionStatement", + "src": "24392:67:50" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10635, + "name": "_curation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13389, + "src": "24573:9:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ICuration_$165_$", + "typeString": "function () view returns (contract ICuration)" + } + }, + "id": 10636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24573:11:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + ], + "id": 10634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24565:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10633, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "24565:7:50", + "typeDescriptions": {} + } + }, + "id": 10637, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24565:20:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10638, + "name": "tokensCurators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10566, + "src": "24587:14:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10630, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "24540:11:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 10631, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24540:13:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 10632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24554:10:50", + "memberName": "pushTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 578, + "src": "24540:24:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", + "typeString": "function (contract IGraphToken,address,uint256)" + } + }, + "id": 10639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24540:62:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10640, + "nodeType": "ExpressionStatement", + "src": "24540:62:50" + }, + { + "expression": { + "arguments": [ + { + "id": 10644, + "name": "subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10519, + "src": "24640:20:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 10645, + "name": "tokensCurators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10566, + "src": "24662:14:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10641, + "name": "_curation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13389, + "src": "24620:9:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ICuration_$165_$", + "typeString": "function () view returns (contract ICuration)" + } + }, + "id": 10642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24620:11:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "id": 10643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "24632:7:50", + "memberName": "collect", + "nodeType": "MemberAccess", + "referencedDeclaration": 102, + "src": "24620:19:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$returns$__$", + "typeString": "function (bytes32,uint256) external" + } + }, + "id": 10646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24620:57:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10647, + "nodeType": "ExpressionStatement", + "src": "24620:57:50" + } + ] + } + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 10653, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10479, + "src": "24736:7:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10654, + "name": "tokensCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10551, + "src": "24745:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10655, + "name": "tokensCurators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10566, + "src": "24762:14:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10652, + "name": "QueryFeesCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11087, + "src": "24717:18:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256,uint256)" + } + }, + "id": 10656, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24717:60:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10657, + "nodeType": "EmitStatement", + "src": "24712:65:50" + }, + { + "expression": { + "id": 10658, + "name": "tokensCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10551, + "src": "24794:15:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10477, + "id": 10659, + "nodeType": "Return", + "src": "24787:22:50" + } + ] + }, + "documentation": { + "id": 10470, + "nodeType": "StructuredDocumentation", + "src": "21168:1330:50", + "text": " @notice Collect query fees\n Stake equal to the amount being collected times the `stakeToFeesRatio` is locked into a stake claim.\n This claim can be released at a later stage once expired.\n It's important to note that before collecting this function will attempt to release any expired stake claims.\n This could lead to an out of gas error if there are too many expired claims. In that case, the indexer will need to\n manually release the claims, see {IDataServiceFees-releaseStake}, before attempting to collect again.\n @dev This function is the equivalent of the legacy `collect` function for query fees.\n @dev Uses the {TAPCollector} to collect payment from Graph Horizon payments protocol.\n Fees are distributed to service provider and delegators by {GraphPayments}, though curators\n share is distributed by this function.\n Query fees can be collected on closed allocations.\n Requirements:\n - Indexer must have enough available tokens to lock as economic security for fees\n Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\n Emits a {StakeClaimLocked} event.\n Emits a {QueryFeesCollected} event.\n @param _signedRav Signed RAV" + }, + "id": 10661, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_collectQueryFees", + "nameLocation": "22512:17:50", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10474, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10473, + "mutability": "mutable", + "name": "_signedRav", + "nameLocation": "22561:10:50", + "nodeType": "VariableDeclaration", + "scope": 10661, + "src": "22530:41:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", + "typeString": "struct ITAPCollector.SignedRAV" + }, + "typeName": { + "id": 10472, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10471, + "name": "ITAPCollector.SignedRAV", + "nameLocations": [ + "22530:13:50", + "22544:9:50" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2546, + "src": "22530:23:50" + }, + "referencedDeclaration": 2546, + "src": "22530:23:50", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SignedRAV_$2546_storage_ptr", + "typeString": "struct ITAPCollector.SignedRAV" + } + }, + "visibility": "internal" + } + ], + "src": "22529:43:50" + }, + "returnParameters": { + "id": 10477, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10476, + "mutability": "mutable", + "name": "feesCollected", + "nameLocation": "22598:13:50", + "nodeType": "VariableDeclaration", + "scope": 10661, + "src": "22590:21:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10475, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22590:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "22589:23:50" + }, + "scope": 10684, + "src": "22503:2313:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 10682, + "nodeType": "Block", + "src": "24887:193:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10669, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10667, + "name": "_stakeToFeesRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10663, + "src": "24905:17:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 10668, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "24926:1:50", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "24905:22:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10670, + "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11165, + "src": "24929:42:50", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 10671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24929:44:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 10666, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "24897:7:50", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 10672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "24897:77:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10673, + "nodeType": "ExpressionStatement", + "src": "24897:77:50" + }, + { + "expression": { + "id": 10676, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10674, + "name": "stakeToFeesRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10697, + "src": "24984:16:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10675, + "name": "_stakeToFeesRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10663, + "src": "25003:17:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "24984:36:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10677, + "nodeType": "ExpressionStatement", + "src": "24984:36:50" + }, + { + "eventCall": { + "arguments": [ + { + "id": 10679, + "name": "_stakeToFeesRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10663, + "src": "25055:17:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10678, + "name": "StakeToFeesRatioSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11092, + "src": "25035:19:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 10680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "25035:38:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10681, + "nodeType": "EmitStatement", + "src": "25030:43:50" + } + ] + }, + "id": 10683, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setStakeToFeesRatio", + "nameLocation": "24831:20:50", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10664, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10663, + "mutability": "mutable", + "name": "_stakeToFeesRatio", + "nameLocation": "24860:17:50", + "nodeType": "VariableDeclaration", + "scope": 10683, + "src": "24852:25:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10662, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24852:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "24851:27:50" + }, + "returnParameters": { + "id": 10665, + "nodeType": "ParameterList", + "parameters": [], + "src": "24887:0:50" + }, + "scope": 10684, + "src": "24822:258:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 10685, + "src": "1852:23230:50", + "usedErrors": [ + 1371, + 1374, + 1400, + 1421, + 1658, + 1665, + 1672, + 1677, + 3827, + 3830, + 3833, + 3836, + 4187, + 4380, + 4684, + 4689, + 4865, + 4868, + 5290, + 5293, + 5887, + 5890, + 6393, + 6398, + 6403, + 11102, + 11105, + 11108, + 11111, + 11116, + 11122, + 11131, + 11138, + 11145, + 11152, + 11157, + 11162, + 11165, + 11312, + 11317, + 11324, + 11938, + 11948, + 12235, + 12238, + 12243, + 12250, + 13282 + ], + "usedEvents": [ + 1198, + 1203, + 1210, + 1217, + 1227, + 1234, + 1346, + 1357, + 1366, + 1395, + 1628, + 1633, + 1640, + 1647, + 4375, + 4695, + 4873, + 5282, + 5287, + 5776, + 11087, + 11092, + 11097, + 12164, + 12183, + 12196, + 12207, + 12216, + 12223, + 12228, + 13275 + ] + } + ], + "src": "45:25038:50" + }, + "id": 50 + }, + "contracts/SubgraphServiceStorage.sol": { + "ast": { + "absolutePath": "contracts/SubgraphServiceStorage.sol", + "exportedSymbols": { + "ISubgraphService": [ + 11280 + ], + "SubgraphServiceV1Storage": [ + 10701 + ] + }, + "id": 10702, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10686, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:51" + }, + { + "absolutePath": "contracts/interfaces/ISubgraphService.sol", + "file": "./interfaces/ISubgraphService.sol", + "id": 10688, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 10702, + "sourceUnit": 11281, + "src": "70:69:51", + "symbolAliases": [ + { + "foreign": { + "id": 10687, + "name": "ISubgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11280, + "src": "79:16:51", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "SubgraphServiceV1Storage", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 10701, + "linearizedBaseContracts": [ + 10701 + ], + "name": "SubgraphServiceV1Storage", + "nameLocation": "159:24:51", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "documentation": { + "id": 10689, + "nodeType": "StructuredDocumentation", + "src": "190:60:51", + "text": "@notice Service providers registered in the data service" + }, + "functionSelector": "4f793cdc", + "id": 10694, + "mutability": "mutable", + "name": "indexers", + "nameLocation": "323:8:51", + "nodeType": "VariableDeclaration", + "scope": 10701, + "src": "255:76:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", + "typeString": "mapping(address => struct ISubgraphService.Indexer)" + }, + "typeName": { + "id": 10693, + "keyName": "indexer", + "keyNameLocation": "271:7:51", + "keyType": { + "id": 10690, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "263:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "255:60:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", + "typeString": "mapping(address => struct ISubgraphService.Indexer)" + }, + "valueName": "details", + "valueNameLocation": "307:7:51", + "valueType": { + "id": 10692, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10691, + "name": "ISubgraphService.Indexer", + "nameLocations": [ + "282:16:51", + "299:7:51" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11078, + "src": "282:24:51" + }, + "referencedDeclaration": 11078, + "src": "282:24:51", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Indexer_$11078_storage_ptr", + "typeString": "struct ISubgraphService.Indexer" + } + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 10695, + "nodeType": "StructuredDocumentation", + "src": "338:67:51", + "text": "@notice Multiplier for how many tokens back collected query fees" + }, + "functionSelector": "d07a7a84", + "id": 10697, + "mutability": "mutable", + "name": "stakeToFeesRatio", + "nameLocation": "425:16:51", + "nodeType": "VariableDeclaration", + "scope": 10701, + "src": "410:31:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10696, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "410:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 10698, + "nodeType": "StructuredDocumentation", + "src": "448:57:51", + "text": "@notice The cut curators take from query fee payments" + }, + "functionSelector": "138dea08", + "id": 10700, + "mutability": "mutable", + "name": "curationFeesCut", + "nameLocation": "525:15:51", + "nodeType": "VariableDeclaration", + "scope": 10701, + "src": "510:30:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10699, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "510:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + } + ], + "scope": 10702, + "src": "141:402:51", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "45:499:51" + }, + "id": 51 + }, + "contracts/interfaces/IDisputeManager.sol": { + "ast": { + "absolutePath": "contracts/interfaces/IDisputeManager.sol", + "exportedSymbols": { + "Attestation": [ + 11920 + ], + "IDisputeManager": [ + 11057 + ] + }, + "id": 11058, + "license": "GPL-2.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10703, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "46:23:52" + }, + { + "absolutePath": "contracts/libraries/Attestation.sol", + "file": "../libraries/Attestation.sol", + "id": 10705, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 11058, + "sourceUnit": 11921, + "src": "71:59:52", + "symbolAliases": [ + { + "foreign": { + "id": 10704, + "name": "Attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11920, + "src": "80:11:52", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IDisputeManager", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 11057, + "linearizedBaseContracts": [ + 11057 + ], + "name": "IDisputeManager", + "nameLocation": "142:15:52", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IDisputeManager.DisputeType", + "documentation": { + "id": 10706, + "nodeType": "StructuredDocumentation", + "src": "164:49:52", + "text": "@notice Types of disputes that can be created" + }, + "id": 10710, + "members": [ + { + "id": 10707, + "name": "Null", + "nameLocation": "245:4:52", + "nodeType": "EnumValue", + "src": "245:4:52" + }, + { + "id": 10708, + "name": "IndexingDispute", + "nameLocation": "259:15:52", + "nodeType": "EnumValue", + "src": "259:15:52" + }, + { + "id": 10709, + "name": "QueryDispute", + "nameLocation": "284:12:52", + "nodeType": "EnumValue", + "src": "284:12:52" + } + ], + "name": "DisputeType", + "nameLocation": "223:11:52", + "nodeType": "EnumDefinition", + "src": "218:84:52" + }, + { + "canonicalName": "IDisputeManager.DisputeStatus", + "documentation": { + "id": 10711, + "nodeType": "StructuredDocumentation", + "src": "308:31:52", + "text": "@notice Status of a dispute" + }, + "id": 10718, + "members": [ + { + "id": 10712, + "name": "Null", + "nameLocation": "373:4:52", + "nodeType": "EnumValue", + "src": "373:4:52" + }, + { + "id": 10713, + "name": "Accepted", + "nameLocation": "387:8:52", + "nodeType": "EnumValue", + "src": "387:8:52" + }, + { + "id": 10714, + "name": "Rejected", + "nameLocation": "405:8:52", + "nodeType": "EnumValue", + "src": "405:8:52" + }, + { + "id": 10715, + "name": "Drawn", + "nameLocation": "423:5:52", + "nodeType": "EnumValue", + "src": "423:5:52" + }, + { + "id": 10716, + "name": "Pending", + "nameLocation": "438:7:52", + "nodeType": "EnumValue", + "src": "438:7:52" + }, + { + "id": 10717, + "name": "Cancelled", + "nameLocation": "455:9:52", + "nodeType": "EnumValue", + "src": "455:9:52" + } + ], + "name": "DisputeStatus", + "nameLocation": "349:13:52", + "nodeType": "EnumDefinition", + "src": "344:126:52" + }, + { + "canonicalName": "IDisputeManager.Dispute", + "documentation": { + "id": 10719, + "nodeType": "StructuredDocumentation", + "src": "476:84:52", + "text": "@notice Disputes contain info necessary for the Arbitrator to verify and resolve" + }, + "id": 10738, + "members": [ + { + "constant": false, + "id": 10721, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "640:7:52", + "nodeType": "VariableDeclaration", + "scope": 10738, + "src": "632:15:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10720, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "632:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10723, + "mutability": "mutable", + "name": "fisherman", + "nameLocation": "711:9:52", + "nodeType": "VariableDeclaration", + "scope": 10738, + "src": "703:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10722, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "703:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10725, + "mutability": "mutable", + "name": "deposit", + "nameLocation": "793:7:52", + "nodeType": "VariableDeclaration", + "scope": 10738, + "src": "785:15:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10724, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "785:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10727, + "mutability": "mutable", + "name": "relatedDisputeId", + "nameLocation": "912:16:52", + "nodeType": "VariableDeclaration", + "scope": 10738, + "src": "904:24:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10726, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "904:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10730, + "mutability": "mutable", + "name": "disputeType", + "nameLocation": "977:11:52", + "nodeType": "VariableDeclaration", + "scope": 10738, + "src": "965:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeType_$10710", + "typeString": "enum IDisputeManager.DisputeType" + }, + "typeName": { + "id": 10729, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10728, + "name": "DisputeType", + "nameLocations": [ + "965:11:52" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10710, + "src": "965:11:52" + }, + "referencedDeclaration": 10710, + "src": "965:11:52", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeType_$10710", + "typeString": "enum IDisputeManager.DisputeType" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10733, + "mutability": "mutable", + "name": "status", + "nameLocation": "1045:6:52", + "nodeType": "VariableDeclaration", + "scope": 10738, + "src": "1031:20:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + }, + "typeName": { + "id": 10732, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10731, + "name": "DisputeStatus", + "nameLocations": [ + "1031:13:52" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10718, + "src": "1031:13:52" + }, + "referencedDeclaration": 10718, + "src": "1031:13:52", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10735, + "mutability": "mutable", + "name": "createdAt", + "nameLocation": "1119:9:52", + "nodeType": "VariableDeclaration", + "scope": 10738, + "src": "1111:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10734, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1111:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10737, + "mutability": "mutable", + "name": "stakeSnapshot", + "nameLocation": "1263:13:52", + "nodeType": "VariableDeclaration", + "scope": 10738, + "src": "1255:21:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10736, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1255:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Dispute", + "nameLocation": "572:7:52", + "nodeType": "StructDefinition", + "scope": 11057, + "src": "565:718:52", + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 10739, + "nodeType": "StructuredDocumentation", + "src": "1289:114:52", + "text": " @notice Emitted when arbitrator is set.\n @param arbitrator The address of the arbitrator." + }, + "eventSelector": "51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e", + "id": 10743, + "name": "ArbitratorSet", + "nameLocation": "1414:13:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10742, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10741, + "indexed": true, + "mutability": "mutable", + "name": "arbitrator", + "nameLocation": "1444:10:52", + "nodeType": "VariableDeclaration", + "scope": 10743, + "src": "1428:26:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10740, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1428:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1427:28:52" + }, + "src": "1408:48:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10744, + "nodeType": "StructuredDocumentation", + "src": "1462:121:52", + "text": " @notice Emitted when dispute period is set.\n @param disputePeriod The dispute period in seconds." + }, + "eventSelector": "310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6", + "id": 10748, + "name": "DisputePeriodSet", + "nameLocation": "1594:16:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10747, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10746, + "indexed": false, + "mutability": "mutable", + "name": "disputePeriod", + "nameLocation": "1618:13:52", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "1611:20:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10745, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1611:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "1610:22:52" + }, + "src": "1588:45:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10749, + "nodeType": "StructuredDocumentation", + "src": "1639:142:52", + "text": " @notice Emitted when dispute deposit is set.\n @param disputeDeposit The dispute deposit required to create a dispute." + }, + "eventSelector": "97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8", + "id": 10753, + "name": "DisputeDepositSet", + "nameLocation": "1792:17:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10752, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10751, + "indexed": false, + "mutability": "mutable", + "name": "disputeDeposit", + "nameLocation": "1818:14:52", + "nodeType": "VariableDeclaration", + "scope": 10753, + "src": "1810:22:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10750, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1810:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1809:24:52" + }, + "src": "1786:48:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10754, + "nodeType": "StructuredDocumentation", + "src": "1840:135:52", + "text": " @notice Emitted when max slashing cut is set.\n @param maxSlashingCut The maximum slashing cut that can be set." + }, + "eventSelector": "7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502", + "id": 10758, + "name": "MaxSlashingCutSet", + "nameLocation": "1986:17:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10757, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10756, + "indexed": false, + "mutability": "mutable", + "name": "maxSlashingCut", + "nameLocation": "2011:14:52", + "nodeType": "VariableDeclaration", + "scope": 10758, + "src": "2004:21:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 10755, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2004:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "2003:23:52" + }, + "src": "1980:47:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10759, + "nodeType": "StructuredDocumentation", + "src": "2033:127:52", + "text": " @notice Emitted when fisherman reward cut is set.\n @param fishermanRewardCut The fisherman reward cut." + }, + "eventSelector": "c573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab", + "id": 10763, + "name": "FishermanRewardCutSet", + "nameLocation": "2171:21:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10762, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10761, + "indexed": false, + "mutability": "mutable", + "name": "fishermanRewardCut", + "nameLocation": "2200:18:52", + "nodeType": "VariableDeclaration", + "scope": 10763, + "src": "2193:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 10760, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2193:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "2192:27:52" + }, + "src": "2165:55:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10764, + "nodeType": "StructuredDocumentation", + "src": "2226:131:52", + "text": " @notice Emitted when subgraph service is set.\n @param subgraphService The address of the subgraph service." + }, + "eventSelector": "81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c7", + "id": 10768, + "name": "SubgraphServiceSet", + "nameLocation": "2368:18:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10766, + "indexed": true, + "mutability": "mutable", + "name": "subgraphService", + "nameLocation": "2403:15:52", + "nodeType": "VariableDeclaration", + "scope": 10768, + "src": "2387:31:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10765, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2387:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2386:33:52" + }, + "src": "2362:58:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10769, + "nodeType": "StructuredDocumentation", + "src": "2426:229:52", + "text": " @dev Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer`\n by `fisherman`.\n The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted." + }, + "eventSelector": "fb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb14", + "id": 10785, + "name": "QueryDisputeCreated", + "nameLocation": "2666:19:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10784, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10771, + "indexed": true, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "2711:9:52", + "nodeType": "VariableDeclaration", + "scope": 10785, + "src": "2695:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10770, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2695:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10773, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "2746:7:52", + "nodeType": "VariableDeclaration", + "scope": 10785, + "src": "2730:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10772, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2730:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10775, + "indexed": true, + "mutability": "mutable", + "name": "fisherman", + "nameLocation": "2779:9:52", + "nodeType": "VariableDeclaration", + "scope": 10785, + "src": "2763:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10774, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2763:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10777, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2806:6:52", + "nodeType": "VariableDeclaration", + "scope": 10785, + "src": "2798:14:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10776, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2798:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10779, + "indexed": false, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "2830:20:52", + "nodeType": "VariableDeclaration", + "scope": 10785, + "src": "2822:28:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10778, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2822:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10781, + "indexed": false, + "mutability": "mutable", + "name": "attestation", + "nameLocation": "2866:11:52", + "nodeType": "VariableDeclaration", + "scope": 10785, + "src": "2860:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10780, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2860:5:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10783, + "indexed": false, + "mutability": "mutable", + "name": "stakeSnapshot", + "nameLocation": "2895:13:52", + "nodeType": "VariableDeclaration", + "scope": 10785, + "src": "2887:21:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10782, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2887:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2685:229:52" + }, + "src": "2660:255:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10786, + "nodeType": "StructuredDocumentation", + "src": "2921:197:52", + "text": " @dev Emitted when an indexing dispute is created for `allocationId` and `indexer`\n by `fisherman`.\n The event emits the amount of `tokens` deposited by the fisherman." + }, + "eventSelector": "bfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d", + "id": 10802, + "name": "IndexingDisputeCreated", + "nameLocation": "3129:22:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10801, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10788, + "indexed": true, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "3177:9:52", + "nodeType": "VariableDeclaration", + "scope": 10802, + "src": "3161:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10787, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3161:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10790, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "3212:7:52", + "nodeType": "VariableDeclaration", + "scope": 10802, + "src": "3196:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10789, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3196:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10792, + "indexed": true, + "mutability": "mutable", + "name": "fisherman", + "nameLocation": "3245:9:52", + "nodeType": "VariableDeclaration", + "scope": 10802, + "src": "3229:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10791, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3229:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10794, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "3272:6:52", + "nodeType": "VariableDeclaration", + "scope": 10802, + "src": "3264:14:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10793, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3264:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10796, + "indexed": false, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "3296:12:52", + "nodeType": "VariableDeclaration", + "scope": 10802, + "src": "3288:20:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10795, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3288:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10798, + "indexed": false, + "mutability": "mutable", + "name": "poi", + "nameLocation": "3326:3:52", + "nodeType": "VariableDeclaration", + "scope": 10802, + "src": "3318:11:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10797, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3318:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10800, + "indexed": false, + "mutability": "mutable", + "name": "stakeSnapshot", + "nameLocation": "3347:13:52", + "nodeType": "VariableDeclaration", + "scope": 10802, + "src": "3339:21:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10799, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3339:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3151:215:52" + }, + "src": "3123:244:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10803, + "nodeType": "StructuredDocumentation", + "src": "3373:204:52", + "text": " @dev Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`.\n The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward." + }, + "eventSelector": "6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c4", + "id": 10813, + "name": "DisputeAccepted", + "nameLocation": "3588:15:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10812, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10805, + "indexed": true, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "3629:9:52", + "nodeType": "VariableDeclaration", + "scope": 10813, + "src": "3613:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10804, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3613:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10807, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "3664:7:52", + "nodeType": "VariableDeclaration", + "scope": 10813, + "src": "3648:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10806, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3648:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10809, + "indexed": true, + "mutability": "mutable", + "name": "fisherman", + "nameLocation": "3697:9:52", + "nodeType": "VariableDeclaration", + "scope": 10813, + "src": "3681:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10808, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3681:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10811, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "3724:6:52", + "nodeType": "VariableDeclaration", + "scope": 10813, + "src": "3716:14:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10810, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3716:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3603:133:52" + }, + "src": "3582:155:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10814, + "nodeType": "StructuredDocumentation", + "src": "3743:185:52", + "text": " @dev Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`.\n The event emits the amount `tokens` burned from the fisherman deposit." + }, + "eventSelector": "2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d", + "id": 10824, + "name": "DisputeRejected", + "nameLocation": "3939:15:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10823, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10816, + "indexed": true, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "3980:9:52", + "nodeType": "VariableDeclaration", + "scope": 10824, + "src": "3964:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10815, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3964:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10818, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "4015:7:52", + "nodeType": "VariableDeclaration", + "scope": 10824, + "src": "3999:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10817, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3999:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10820, + "indexed": true, + "mutability": "mutable", + "name": "fisherman", + "nameLocation": "4048:9:52", + "nodeType": "VariableDeclaration", + "scope": 10824, + "src": "4032:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10819, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4032:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10822, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "4075:6:52", + "nodeType": "VariableDeclaration", + "scope": 10824, + "src": "4067:14:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10821, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4067:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3954:133:52" + }, + "src": "3933:155:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10825, + "nodeType": "StructuredDocumentation", + "src": "4094:194:52", + "text": " @dev Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`.\n The event emits the amount `tokens` used as deposit and returned to the fisherman." + }, + "eventSelector": "f0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b7", + "id": 10835, + "name": "DisputeDrawn", + "nameLocation": "4299:12:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10834, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10827, + "indexed": true, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "4328:9:52", + "nodeType": "VariableDeclaration", + "scope": 10835, + "src": "4312:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10826, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4312:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10829, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "4355:7:52", + "nodeType": "VariableDeclaration", + "scope": 10835, + "src": "4339:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10828, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4339:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10831, + "indexed": true, + "mutability": "mutable", + "name": "fisherman", + "nameLocation": "4380:9:52", + "nodeType": "VariableDeclaration", + "scope": 10835, + "src": "4364:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10830, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4364:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10833, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "4399:6:52", + "nodeType": "VariableDeclaration", + "scope": 10835, + "src": "4391:14:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10832, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4391:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4311:95:52" + }, + "src": "4293:114:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10836, + "nodeType": "StructuredDocumentation", + "src": "4413:200:52", + "text": " @dev Emitted when two disputes are in conflict to link them.\n This event will be emitted after each DisputeCreated event is emitted\n for each of the individual disputes." + }, + "eventSelector": "fec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba81407", + "id": 10842, + "name": "DisputeLinked", + "nameLocation": "4624:13:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10841, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10838, + "indexed": true, + "mutability": "mutable", + "name": "disputeId1", + "nameLocation": "4654:10:52", + "nodeType": "VariableDeclaration", + "scope": 10842, + "src": "4638:26:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10837, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4638:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10840, + "indexed": true, + "mutability": "mutable", + "name": "disputeId2", + "nameLocation": "4682:10:52", + "nodeType": "VariableDeclaration", + "scope": 10842, + "src": "4666:26:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10839, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4666:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4637:56:52" + }, + "src": "4618:76:52" + }, + { + "anonymous": false, + "documentation": { + "id": 10843, + "nodeType": "StructuredDocumentation", + "src": "4700:147:52", + "text": " @dev Emitted when a dispute is cancelled by the fisherman.\n The event emits the amount `tokens` returned to the fisherman." + }, + "eventSelector": "223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2", + "id": 10853, + "name": "DisputeCancelled", + "nameLocation": "4858:16:52", + "nodeType": "EventDefinition", + "parameters": { + "id": 10852, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10845, + "indexed": true, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "4900:9:52", + "nodeType": "VariableDeclaration", + "scope": 10853, + "src": "4884:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10844, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4884:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10847, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "4935:7:52", + "nodeType": "VariableDeclaration", + "scope": 10853, + "src": "4919:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10846, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4919:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10849, + "indexed": true, + "mutability": "mutable", + "name": "fisherman", + "nameLocation": "4968:9:52", + "nodeType": "VariableDeclaration", + "scope": 10853, + "src": "4952:25:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10848, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4952:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10851, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "4995:6:52", + "nodeType": "VariableDeclaration", + "scope": 10853, + "src": "4987:14:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10850, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4987:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4874:133:52" + }, + "src": "4852:156:52" + }, + { + "errorSelector": "a8baf3bb", + "id": 10855, + "name": "DisputeManagerNotArbitrator", + "nameLocation": "5041:27:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10854, + "nodeType": "ParameterList", + "parameters": [], + "src": "5068:2:52" + }, + "src": "5035:36:52" + }, + { + "errorSelector": "82c00550", + "id": 10857, + "name": "DisputeManagerNotFisherman", + "nameLocation": "5082:26:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10856, + "nodeType": "ParameterList", + "parameters": [], + "src": "5108:2:52" + }, + "src": "5076:35:52" + }, + { + "errorSelector": "c2d78882", + "id": 10859, + "name": "DisputeManagerInvalidZeroAddress", + "nameLocation": "5122:32:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10858, + "nodeType": "ParameterList", + "parameters": [], + "src": "5154:2:52" + }, + "src": "5116:41:52" + }, + { + "errorSelector": "c4411f11", + "id": 10861, + "name": "DisputeManagerDisputePeriodZero", + "nameLocation": "5168:31:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10860, + "nodeType": "ParameterList", + "parameters": [], + "src": "5199:2:52" + }, + "src": "5162:40:52" + }, + { + "errorSelector": "60fdfb6e", + "id": 10863, + "name": "DisputeManagerZeroTokens", + "nameLocation": "5213:24:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10862, + "nodeType": "ParameterList", + "parameters": [], + "src": "5237:2:52" + }, + "src": "5207:33:52" + }, + { + "errorSelector": "5280eef4", + "id": 10867, + "name": "DisputeManagerInvalidDispute", + "nameLocation": "5251:28:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10866, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10865, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "5288:9:52", + "nodeType": "VariableDeclaration", + "scope": 10867, + "src": "5280:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10864, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5280:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5279:19:52" + }, + "src": "5245:54:52" + }, + { + "errorSelector": "033f4e05", + "id": 10871, + "name": "DisputeManagerInvalidDisputeDeposit", + "nameLocation": "5310:35:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10870, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10869, + "mutability": "mutable", + "name": "disputeDeposit", + "nameLocation": "5354:14:52", + "nodeType": "VariableDeclaration", + "scope": 10871, + "src": "5346:22:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10868, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5346:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5345:24:52" + }, + "src": "5304:66:52" + }, + { + "errorSelector": "865ccc86", + "id": 10875, + "name": "DisputeManagerInvalidFishermanReward", + "nameLocation": "5381:36:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10874, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10873, + "mutability": "mutable", + "name": "cut", + "nameLocation": "5425:3:52", + "nodeType": "VariableDeclaration", + "scope": 10875, + "src": "5418:10:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 10872, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5418:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "5417:12:52" + }, + "src": "5375:55:52" + }, + { + "errorSelector": "9d26e9f6", + "id": 10879, + "name": "DisputeManagerInvalidMaxSlashingCut", + "nameLocation": "5441:35:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10878, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10877, + "mutability": "mutable", + "name": "maxSlashingCut", + "nameLocation": "5484:14:52", + "nodeType": "VariableDeclaration", + "scope": 10879, + "src": "5477:21:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 10876, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5477:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "5476:23:52" + }, + "src": "5435:65:52" + }, + { + "errorSelector": "cc6b7c41", + "id": 10885, + "name": "DisputeManagerInvalidTokensSlash", + "nameLocation": "5511:32:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10884, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10881, + "mutability": "mutable", + "name": "tokensSlash", + "nameLocation": "5552:11:52", + "nodeType": "VariableDeclaration", + "scope": 10885, + "src": "5544:19:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10880, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5544:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10883, + "mutability": "mutable", + "name": "maxTokensSlash", + "nameLocation": "5573:14:52", + "nodeType": "VariableDeclaration", + "scope": 10885, + "src": "5565:22:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10882, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5565:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5543:45:52" + }, + "src": "5505:84:52" + }, + { + "errorSelector": "51b9503c", + "id": 10890, + "name": "DisputeManagerDisputeNotPending", + "nameLocation": "5600:31:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10889, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10888, + "mutability": "mutable", + "name": "status", + "nameLocation": "5662:6:52", + "nodeType": "VariableDeclaration", + "scope": 10890, + "src": "5632:36:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + }, + "typeName": { + "id": 10887, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 10886, + "name": "IDisputeManager.DisputeStatus", + "nameLocations": [ + "5632:15:52", + "5648:13:52" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 10718, + "src": "5632:29:52" + }, + "referencedDeclaration": 10718, + "src": "5632:29:52", + "typeDescriptions": { + "typeIdentifier": "t_enum$_DisputeStatus_$10718", + "typeString": "enum IDisputeManager.DisputeStatus" + } + }, + "visibility": "internal" + } + ], + "src": "5631:38:52" + }, + "src": "5594:76:52" + }, + { + "errorSelector": "249447e2", + "id": 10894, + "name": "DisputeManagerDisputeAlreadyCreated", + "nameLocation": "5681:35:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10893, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10892, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "5725:9:52", + "nodeType": "VariableDeclaration", + "scope": 10894, + "src": "5717:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10891, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5717:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5716:19:52" + }, + "src": "5675:61:52" + }, + { + "errorSelector": "3aeea7aa", + "id": 10896, + "name": "DisputeManagerDisputePeriodNotFinished", + "nameLocation": "5747:38:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10895, + "nodeType": "ParameterList", + "parameters": [], + "src": "5785:2:52" + }, + "src": "5741:47:52" + }, + { + "errorSelector": "826e2b26", + "id": 10902, + "name": "DisputeManagerMustAcceptRelatedDispute", + "nameLocation": "5799:38:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10901, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10898, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "5846:9:52", + "nodeType": "VariableDeclaration", + "scope": 10902, + "src": "5838:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10897, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5838:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10900, + "mutability": "mutable", + "name": "relatedDisputeId", + "nameLocation": "5865:16:52", + "nodeType": "VariableDeclaration", + "scope": 10902, + "src": "5857:24:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10899, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5857:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5837:45:52" + }, + "src": "5793:90:52" + }, + { + "errorSelector": "d1e2762c", + "id": 10906, + "name": "DisputeManagerIndexerNotFound", + "nameLocation": "5894:29:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10905, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10904, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "5932:12:52", + "nodeType": "VariableDeclaration", + "scope": 10906, + "src": "5924:20:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10903, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5924:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5923:22:52" + }, + "src": "5888:58:52" + }, + { + "errorSelector": "28933f94", + "id": 10912, + "name": "DisputeManagerNonMatchingSubgraphDeployment", + "nameLocation": "5957:43:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10911, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10908, + "mutability": "mutable", + "name": "subgraphDeploymentId1", + "nameLocation": "6009:21:52", + "nodeType": "VariableDeclaration", + "scope": 10912, + "src": "6001:29:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10907, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6001:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10910, + "mutability": "mutable", + "name": "subgraphDeploymentId2", + "nameLocation": "6040:21:52", + "nodeType": "VariableDeclaration", + "scope": 10912, + "src": "6032:29:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10909, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6032:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6000:62:52" + }, + "src": "5951:112:52" + }, + { + "errorSelector": "d574a52e", + "id": 10926, + "name": "DisputeManagerNonConflictingAttestations", + "nameLocation": "6074:40:52", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 10925, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10914, + "mutability": "mutable", + "name": "requestCID1", + "nameLocation": "6132:11:52", + "nodeType": "VariableDeclaration", + "scope": 10926, + "src": "6124:19:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10913, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6124:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10916, + "mutability": "mutable", + "name": "responseCID1", + "nameLocation": "6161:12:52", + "nodeType": "VariableDeclaration", + "scope": 10926, + "src": "6153:20:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10915, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6153:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10918, + "mutability": "mutable", + "name": "subgraphDeploymentId1", + "nameLocation": "6191:21:52", + "nodeType": "VariableDeclaration", + "scope": 10926, + "src": "6183:29:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10917, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6183:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10920, + "mutability": "mutable", + "name": "requestCID2", + "nameLocation": "6230:11:52", + "nodeType": "VariableDeclaration", + "scope": 10926, + "src": "6222:19:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10919, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6222:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10922, + "mutability": "mutable", + "name": "responseCID2", + "nameLocation": "6259:12:52", + "nodeType": "VariableDeclaration", + "scope": 10926, + "src": "6251:20:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10921, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6251:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10924, + "mutability": "mutable", + "name": "subgraphDeploymentId2", + "nameLocation": "6289:21:52", + "nodeType": "VariableDeclaration", + "scope": 10926, + "src": "6281:29:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10923, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6281:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6114:202:52" + }, + "src": "6068:249:52" + }, + { + "functionSelector": "d76f62d1", + "id": 10931, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setDisputePeriod", + "nameLocation": "6332:16:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10929, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10928, + "mutability": "mutable", + "name": "disputePeriod", + "nameLocation": "6356:13:52", + "nodeType": "VariableDeclaration", + "scope": 10931, + "src": "6349:20:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10927, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6349:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "6348:22:52" + }, + "returnParameters": { + "id": 10930, + "nodeType": "ParameterList", + "parameters": [], + "src": "6379:0:52" + }, + "scope": 11057, + "src": "6323:57:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "b0eefabe", + "id": 10936, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setArbitrator", + "nameLocation": "6395:13:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10934, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10933, + "mutability": "mutable", + "name": "arbitrator", + "nameLocation": "6417:10:52", + "nodeType": "VariableDeclaration", + "scope": 10936, + "src": "6409:18:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10932, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6409:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6408:20:52" + }, + "returnParameters": { + "id": 10935, + "nodeType": "ParameterList", + "parameters": [], + "src": "6437:0:52" + }, + "scope": 11057, + "src": "6386:52:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "16972978", + "id": 10941, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setDisputeDeposit", + "nameLocation": "6453:17:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10939, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10938, + "mutability": "mutable", + "name": "disputeDeposit", + "nameLocation": "6479:14:52", + "nodeType": "VariableDeclaration", + "scope": 10941, + "src": "6471:22:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10937, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6471:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6470:24:52" + }, + "returnParameters": { + "id": 10940, + "nodeType": "ParameterList", + "parameters": [], + "src": "6503:0:52" + }, + "scope": 11057, + "src": "6444:60:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "76c993ae", + "id": 10946, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setFishermanRewardCut", + "nameLocation": "6519:21:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10944, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10943, + "mutability": "mutable", + "name": "cut", + "nameLocation": "6548:3:52", + "nodeType": "VariableDeclaration", + "scope": 10946, + "src": "6541:10:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 10942, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "6541:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "6540:12:52" + }, + "returnParameters": { + "id": 10945, + "nodeType": "ParameterList", + "parameters": [], + "src": "6561:0:52" + }, + "scope": 11057, + "src": "6510:52:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "9f81a7cf", + "id": 10951, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setMaxSlashingCut", + "nameLocation": "6577:17:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10949, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10948, + "mutability": "mutable", + "name": "maxCut", + "nameLocation": "6602:6:52", + "nodeType": "VariableDeclaration", + "scope": 10951, + "src": "6595:13:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 10947, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "6595:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "6594:15:52" + }, + "returnParameters": { + "id": 10950, + "nodeType": "ParameterList", + "parameters": [], + "src": "6618:0:52" + }, + "scope": 11057, + "src": "6568:51:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "c50a77b1", + "id": 10958, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "createQueryDispute", + "nameLocation": "6656:18:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10954, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10953, + "mutability": "mutable", + "name": "attestationData", + "nameLocation": "6690:15:52", + "nodeType": "VariableDeclaration", + "scope": 10958, + "src": "6675:30:52", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10952, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6675:5:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6674:32:52" + }, + "returnParameters": { + "id": 10957, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10956, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10958, + "src": "6725:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10955, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6725:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6724:9:52" + }, + "scope": 11057, + "src": "6647:87:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "c894222e", + "id": 10969, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "createQueryDisputeConflict", + "nameLocation": "6749:26:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10963, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10960, + "mutability": "mutable", + "name": "attestationData1", + "nameLocation": "6800:16:52", + "nodeType": "VariableDeclaration", + "scope": 10969, + "src": "6785:31:52", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10959, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6785:5:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10962, + "mutability": "mutable", + "name": "attestationData2", + "nameLocation": "6841:16:52", + "nodeType": "VariableDeclaration", + "scope": 10969, + "src": "6826:31:52", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10961, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6826:5:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6775:88:52" + }, + "returnParameters": { + "id": 10968, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10965, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10969, + "src": "6882:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10964, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6882:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10967, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10969, + "src": "6891:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10966, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6891:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6881:18:52" + }, + "scope": 11057, + "src": "6740:160:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "4bc5839a", + "id": 10978, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "createIndexingDispute", + "nameLocation": "6915:21:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10974, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10971, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "6945:12:52", + "nodeType": "VariableDeclaration", + "scope": 10978, + "src": "6937:20:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10970, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6937:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10973, + "mutability": "mutable", + "name": "poi", + "nameLocation": "6967:3:52", + "nodeType": "VariableDeclaration", + "scope": 10978, + "src": "6959:11:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10972, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6959:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6936:35:52" + }, + "returnParameters": { + "id": 10977, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10976, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 10978, + "src": "6990:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10975, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6990:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6989:9:52" + }, + "scope": 11057, + "src": "6906:93:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "050b17ad", + "id": 10985, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "acceptDispute", + "nameLocation": "7014:13:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10983, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10980, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "7036:9:52", + "nodeType": "VariableDeclaration", + "scope": 10985, + "src": "7028:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10979, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7028:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10982, + "mutability": "mutable", + "name": "tokensSlash", + "nameLocation": "7055:11:52", + "nodeType": "VariableDeclaration", + "scope": 10985, + "src": "7047:19:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10981, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7047:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7027:40:52" + }, + "returnParameters": { + "id": 10984, + "nodeType": "ParameterList", + "parameters": [], + "src": "7076:0:52" + }, + "scope": 11057, + "src": "7005:72:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "36167e03", + "id": 10990, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "rejectDispute", + "nameLocation": "7092:13:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10988, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10987, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "7114:9:52", + "nodeType": "VariableDeclaration", + "scope": 10990, + "src": "7106:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10986, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7106:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7105:19:52" + }, + "returnParameters": { + "id": 10989, + "nodeType": "ParameterList", + "parameters": [], + "src": "7133:0:52" + }, + "scope": 11057, + "src": "7083:51:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "9334ea52", + "id": 10995, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "drawDispute", + "nameLocation": "7149:11:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10993, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10992, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "7169:9:52", + "nodeType": "VariableDeclaration", + "scope": 10995, + "src": "7161:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10991, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7161:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7160:19:52" + }, + "returnParameters": { + "id": 10994, + "nodeType": "ParameterList", + "parameters": [], + "src": "7188:0:52" + }, + "scope": 11057, + "src": "7140:49:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "1792f194", + "id": 11000, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "cancelDispute", + "nameLocation": "7204:13:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10998, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10997, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "7226:9:52", + "nodeType": "VariableDeclaration", + "scope": 11000, + "src": "7218:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10996, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7218:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7217:19:52" + }, + "returnParameters": { + "id": 10999, + "nodeType": "ParameterList", + "parameters": [], + "src": "7245:0:52" + }, + "scope": 11057, + "src": "7195:51:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "93a90a1e", + "id": 11005, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setSubgraphService", + "nameLocation": "7261:18:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11003, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11002, + "mutability": "mutable", + "name": "subgraphService", + "nameLocation": "7288:15:52", + "nodeType": "VariableDeclaration", + "scope": 11005, + "src": "7280:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11001, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7280:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7279:25:52" + }, + "returnParameters": { + "id": 11004, + "nodeType": "ParameterList", + "parameters": [], + "src": "7313:0:52" + }, + "scope": 11057, + "src": "7252:62:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "84633713", + "id": 11010, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getVerifierCut", + "nameLocation": "7351:14:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11006, + "nodeType": "ParameterList", + "parameters": [], + "src": "7365:2:52" + }, + "returnParameters": { + "id": 11009, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11008, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11010, + "src": "7391:6:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 11007, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "7391:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "7390:8:52" + }, + "scope": 11057, + "src": "7342:57:52", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "5aea0ec4", + "id": 11015, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getDisputePeriod", + "nameLocation": "7414:16:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11011, + "nodeType": "ParameterList", + "parameters": [], + "src": "7430:2:52" + }, + "returnParameters": { + "id": 11014, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11013, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11015, + "src": "7456:6:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 11012, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "7456:6:52", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "7455:8:52" + }, + "scope": 11057, + "src": "7405:59:52", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "be41f384", + "id": 11022, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isDisputeCreated", + "nameLocation": "7479:16:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11018, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11017, + "mutability": "mutable", + "name": "disputeId", + "nameLocation": "7504:9:52", + "nodeType": "VariableDeclaration", + "scope": 11022, + "src": "7496:17:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11016, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7496:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7495:19:52" + }, + "returnParameters": { + "id": 11021, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11020, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11022, + "src": "7538:4:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11019, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7538:4:52", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7537:6:52" + }, + "scope": 11057, + "src": "7470:74:52", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "6369df6b", + "id": 11030, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "encodeReceipt", + "nameLocation": "7559:13:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11026, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11025, + "mutability": "mutable", + "name": "receipt", + "nameLocation": "7600:7:52", + "nodeType": "VariableDeclaration", + "scope": 11030, + "src": "7573:34:52", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt" + }, + "typeName": { + "id": 11024, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11023, + "name": "Attestation.Receipt", + "nameLocations": [ + "7573:11:52", + "7585:7:52" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11685, + "src": "7573:19:52" + }, + "referencedDeclaration": 11685, + "src": "7573:19:52", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_storage_ptr", + "typeString": "struct Attestation.Receipt" + } + }, + "visibility": "internal" + } + ], + "src": "7572:36:52" + }, + "returnParameters": { + "id": 11029, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11028, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11030, + "src": "7632:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11027, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7632:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7631:9:52" + }, + "scope": 11057, + "src": "7550:91:52", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "c9747f51", + "id": 11038, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAttestationIndexer", + "nameLocation": "7656:21:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11034, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11033, + "mutability": "mutable", + "name": "attestation", + "nameLocation": "7703:11:52", + "nodeType": "VariableDeclaration", + "scope": 11038, + "src": "7678:36:52", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 11032, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11031, + "name": "Attestation.State", + "nameLocations": [ + "7678:11:52", + "7690:5:52" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "7678:17:52" + }, + "referencedDeclaration": 11699, + "src": "7678:17:52", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + } + ], + "src": "7677:38:52" + }, + "returnParameters": { + "id": 11037, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11036, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11038, + "src": "7739:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11035, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7739:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7738:9:52" + }, + "scope": 11057, + "src": "7647:101:52", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "c133b429", + "id": 11045, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getStakeSnapshot", + "nameLocation": "7763:16:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11041, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11040, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "7788:7:52", + "nodeType": "VariableDeclaration", + "scope": 11045, + "src": "7780:15:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11039, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7780:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7779:17:52" + }, + "returnParameters": { + "id": 11044, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11043, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11045, + "src": "7820:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11042, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7820:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7819:9:52" + }, + "scope": 11057, + "src": "7754:75:52", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d36fc9d4", + "id": 11056, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "areConflictingAttestations", + "nameLocation": "7844:26:52", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11052, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11048, + "mutability": "mutable", + "name": "attestation1", + "nameLocation": "7905:12:52", + "nodeType": "VariableDeclaration", + "scope": 11056, + "src": "7880:37:52", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 11047, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11046, + "name": "Attestation.State", + "nameLocations": [ + "7880:11:52", + "7892:5:52" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "7880:17:52" + }, + "referencedDeclaration": 11699, + "src": "7880:17:52", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11051, + "mutability": "mutable", + "name": "attestation2", + "nameLocation": "7952:12:52", + "nodeType": "VariableDeclaration", + "scope": 11056, + "src": "7927:37:52", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 11050, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11049, + "name": "Attestation.State", + "nameLocations": [ + "7927:11:52", + "7939:5:52" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "7927:17:52" + }, + "referencedDeclaration": 11699, + "src": "7927:17:52", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + } + ], + "src": "7870:100:52" + }, + "returnParameters": { + "id": 11055, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11054, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11056, + "src": "7994:4:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11053, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7994:4:52", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7993:6:52" + }, + "scope": 11057, + "src": "7835:165:52", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + } + ], + "scope": 11058, + "src": "132:7870:52", + "usedErrors": [ + 10855, + 10857, + 10859, + 10861, + 10863, + 10867, + 10871, + 10875, + 10879, + 10885, + 10890, + 10894, + 10896, + 10902, + 10906, + 10912, + 10926 + ], + "usedEvents": [ + 10743, + 10748, + 10753, + 10758, + 10763, + 10768, + 10785, + 10802, + 10813, + 10824, + 10835, + 10842, + 10853 + ] + } + ], + "src": "46:7957:52" + }, + "id": 52 + }, + "contracts/interfaces/ISubgraphService.sol": { + "ast": { + "absolutePath": "contracts/interfaces/ISubgraphService.sol", + "exportedSymbols": { + "Allocation": [ + 11674 + ], + "IDataServiceFees": [ + 1381 + ], + "IGraphPayments": [ + 2211 + ], + "ISubgraphService": [ + 11280 + ], + "LegacyAllocation": [ + 12086 + ] + }, + "id": 11281, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11059, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:53" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", + "file": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", + "id": 11061, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 11281, + "sourceUnit": 1382, + "src": "70:113:53", + "symbolAliases": [ + { + "foreign": { + "id": 11060, + "name": "IDataServiceFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1381, + "src": "79:16:53", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "file": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "id": 11063, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 11281, + "sourceUnit": 2212, + "src": "184:96:53", + "symbolAliases": [ + { + "foreign": { + "id": 11062, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "193:14:53", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/Allocation.sol", + "file": "../libraries/Allocation.sol", + "id": 11065, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 11281, + "sourceUnit": 11675, + "src": "282:57:53", + "symbolAliases": [ + { + "foreign": { + "id": 11064, + "name": "Allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11674, + "src": "291:10:53", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/LegacyAllocation.sol", + "file": "../libraries/LegacyAllocation.sol", + "id": 11067, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 11281, + "sourceUnit": 12087, + "src": "340:69:53", + "symbolAliases": [ + { + "foreign": { + "id": 11066, + "name": "LegacyAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12086, + "src": "349:16:53", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 11069, + "name": "IDataServiceFees", + "nameLocations": [ + "998:16:53" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1381, + "src": "998:16:53" + }, + "id": 11070, + "nodeType": "InheritanceSpecifier", + "src": "998:16:53" + } + ], + "canonicalName": "ISubgraphService", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 11068, + "nodeType": "StructuredDocumentation", + "src": "411:556:53", + "text": " @title Interface for the {SubgraphService} contract\n @dev This interface extends {IDataServiceFees} and {IDataService}.\n @notice The Subgraph Service is a data service built on top of Graph Horizon that supports the use case of\n subgraph indexing and querying. The {SubgraphService} contract implements the flows described in the Data\n Service framework to allow indexers to register as subgraph service providers, create allocations to signal\n their commitment to index a subgraph, and collect fees for indexing and querying services." + }, + "fullyImplemented": false, + "id": 11280, + "linearizedBaseContracts": [ + 11280, + 1381, + 1318 + ], + "name": "ISubgraphService", + "nameLocation": "978:16:53", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "ISubgraphService.Indexer", + "documentation": { + "id": 11071, + "nodeType": "StructuredDocumentation", + "src": "1021:45:53", + "text": "@notice Contains details for each indexer" + }, + "id": 11078, + "members": [ + { + "constant": false, + "id": 11073, + "mutability": "mutable", + "name": "registeredAt", + "nameLocation": "1153:12:53", + "nodeType": "VariableDeclaration", + "scope": 11078, + "src": "1145:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11072, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1145:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11075, + "mutability": "mutable", + "name": "url", + "nameLocation": "1249:3:53", + "nodeType": "VariableDeclaration", + "scope": 11078, + "src": "1242:10:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11074, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1242:6:53", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11077, + "mutability": "mutable", + "name": "geoHash", + "nameLocation": "1332:7:53", + "nodeType": "VariableDeclaration", + "scope": 11078, + "src": "1325:14:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11076, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1325:6:53", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "name": "Indexer", + "nameLocation": "1078:7:53", + "nodeType": "StructDefinition", + "scope": 11280, + "src": "1071:275:53", + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 11079, + "nodeType": "StructuredDocumentation", + "src": "1352:292:53", + "text": " @notice Emitted when a subgraph service collects query fees from Graph Payments\n @param serviceProvider The address of the service provider\n @param tokensCollected The amount of tokens collected\n @param tokensCurators The amount of tokens curators receive" + }, + "eventSelector": "60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36", + "id": 11087, + "name": "QueryFeesCollected", + "nameLocation": "1655:18:53", + "nodeType": "EventDefinition", + "parameters": { + "id": 11086, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11081, + "indexed": true, + "mutability": "mutable", + "name": "serviceProvider", + "nameLocation": "1690:15:53", + "nodeType": "VariableDeclaration", + "scope": 11087, + "src": "1674:31:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11080, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1674:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11083, + "indexed": false, + "mutability": "mutable", + "name": "tokensCollected", + "nameLocation": "1715:15:53", + "nodeType": "VariableDeclaration", + "scope": 11087, + "src": "1707:23:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11082, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1707:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11085, + "indexed": false, + "mutability": "mutable", + "name": "tokensCurators", + "nameLocation": "1740:14:53", + "nodeType": "VariableDeclaration", + "scope": 11087, + "src": "1732:22:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11084, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1732:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1673:82:53" + }, + "src": "1649:107:53" + }, + { + "anonymous": false, + "documentation": { + "id": 11088, + "nodeType": "StructuredDocumentation", + "src": "1762:115:53", + "text": " @notice Emitted when the stake to fees ratio is set.\n @param ratio The stake to fees ratio" + }, + "eventSelector": "2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23", + "id": 11092, + "name": "StakeToFeesRatioSet", + "nameLocation": "1888:19:53", + "nodeType": "EventDefinition", + "parameters": { + "id": 11091, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11090, + "indexed": false, + "mutability": "mutable", + "name": "ratio", + "nameLocation": "1916:5:53", + "nodeType": "VariableDeclaration", + "scope": 11092, + "src": "1908:13:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11089, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1908:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1907:15:53" + }, + "src": "1882:41:53" + }, + { + "anonymous": false, + "documentation": { + "id": 11093, + "nodeType": "StructuredDocumentation", + "src": "1929:103:53", + "text": " @notice Emitted when curator cuts are set\n @param curationCut The curation cut" + }, + "eventSelector": "6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9", + "id": 11097, + "name": "CurationCutSet", + "nameLocation": "2043:14:53", + "nodeType": "EventDefinition", + "parameters": { + "id": 11096, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11095, + "indexed": false, + "mutability": "mutable", + "name": "curationCut", + "nameLocation": "2066:11:53", + "nodeType": "VariableDeclaration", + "scope": 11097, + "src": "2058:19:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11094, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2058:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2057:21:53" + }, + "src": "2037:42:53" + }, + { + "documentation": { + "id": 11098, + "nodeType": "StructuredDocumentation", + "src": "2085:138:53", + "text": " Thrown when trying to set a curation cut that is not a valid PPM value\n @param curationCut The curation cut value" + }, + "errorSelector": "1c9c717b", + "id": 11102, + "name": "SubgraphServiceInvalidCurationCut", + "nameLocation": "2234:33:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11101, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11100, + "mutability": "mutable", + "name": "curationCut", + "nameLocation": "2276:11:53", + "nodeType": "VariableDeclaration", + "scope": 11102, + "src": "2268:19:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11099, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2268:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2267:21:53" + }, + "src": "2228:61:53" + }, + { + "documentation": { + "id": 11103, + "nodeType": "StructuredDocumentation", + "src": "2295:85:53", + "text": " @notice Thrown when an indexer tries to register with an empty URL" + }, + "errorSelector": "f0708720", + "id": 11105, + "name": "SubgraphServiceEmptyUrl", + "nameLocation": "2391:23:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11104, + "nodeType": "ParameterList", + "parameters": [], + "src": "2414:2:53" + }, + "src": "2385:32:53" + }, + { + "documentation": { + "id": 11106, + "nodeType": "StructuredDocumentation", + "src": "2423:89:53", + "text": " @notice Thrown when an indexer tries to register with an empty geohash" + }, + "errorSelector": "798ef654", + "id": 11108, + "name": "SubgraphServiceEmptyGeohash", + "nameLocation": "2523:27:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11107, + "nodeType": "ParameterList", + "parameters": [], + "src": "2550:2:53" + }, + "src": "2517:36:53" + }, + { + "documentation": { + "id": 11109, + "nodeType": "StructuredDocumentation", + "src": "2559:99:53", + "text": " @notice Thrown when an indexer tries to register but they are already registered" + }, + "errorSelector": "341a19b4", + "id": 11111, + "name": "SubgraphServiceIndexerAlreadyRegistered", + "nameLocation": "2669:39:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11110, + "nodeType": "ParameterList", + "parameters": [], + "src": "2708:2:53" + }, + "src": "2663:48:53" + }, + { + "documentation": { + "id": 11112, + "nodeType": "StructuredDocumentation", + "src": "2717:179:53", + "text": " @notice Thrown when an indexer tries to perform an operation but they are not registered\n @param indexer The address of the indexer that is not registered" + }, + "errorSelector": "ee271899", + "id": 11116, + "name": "SubgraphServiceIndexerNotRegistered", + "nameLocation": "2907:35:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11115, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11114, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "2951:7:53", + "nodeType": "VariableDeclaration", + "scope": 11116, + "src": "2943:15:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11113, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2943:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2942:17:53" + }, + "src": "2901:59:53" + }, + { + "documentation": { + "id": 11117, + "nodeType": "StructuredDocumentation", + "src": "2966:168:53", + "text": " @notice Thrown when an indexer tries to collect fees for an unsupported payment type\n @param paymentType The payment type that is not supported" + }, + "errorSelector": "47031cf0", + "id": 11122, + "name": "SubgraphServiceInvalidPaymentType", + "nameLocation": "3145:33:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11121, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11120, + "mutability": "mutable", + "name": "paymentType", + "nameLocation": "3207:11:53", + "nodeType": "VariableDeclaration", + "scope": 11122, + "src": "3179:39:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + }, + "typeName": { + "id": 11119, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11118, + "name": "IGraphPayments.PaymentTypes", + "nameLocations": [ + "3179:14:53", + "3194:12:53" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2166, + "src": "3179:27:53" + }, + "referencedDeclaration": 2166, + "src": "3179:27:53", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + }, + "visibility": "internal" + } + ], + "src": "3178:41:53" + }, + "src": "3139:81:53" + }, + { + "documentation": { + "id": 11123, + "nodeType": "StructuredDocumentation", + "src": "3226:370:53", + "text": " @notice Thrown when the contract GRT balance is inconsistent with the payment amount collected\n from Graph Payments\n @param balanceBefore The contract GRT balance before the collection\n @param balanceAfter The contract GRT balance after the collection\n @param tokensDataService The amount of tokens sent to the subgraph service" + }, + "errorSelector": "361af23e", + "id": 11131, + "name": "SubgraphServiceInconsistentCollection", + "nameLocation": "3607:37:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11130, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11125, + "mutability": "mutable", + "name": "balanceBefore", + "nameLocation": "3653:13:53", + "nodeType": "VariableDeclaration", + "scope": 11131, + "src": "3645:21:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11124, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3645:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11127, + "mutability": "mutable", + "name": "balanceAfter", + "nameLocation": "3676:12:53", + "nodeType": "VariableDeclaration", + "scope": 11131, + "src": "3668:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11126, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3668:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11129, + "mutability": "mutable", + "name": "tokensDataService", + "nameLocation": "3698:17:53", + "nodeType": "VariableDeclaration", + "scope": 11131, + "src": "3690:25:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11128, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3690:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3644:72:53" + }, + "src": "3601:116:53" + }, + { + "documentation": { + "id": 11132, + "nodeType": "StructuredDocumentation", + "src": "3723:249:53", + "text": " @notice @notice Thrown when the service provider in the RAV does not match the expected indexer.\n @param providedIndexer The address of the provided indexer.\n @param expectedIndexer The address of the expected indexer." + }, + "errorSelector": "1a071d07", + "id": 11138, + "name": "SubgraphServiceIndexerMismatch", + "nameLocation": "3983:30:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11137, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11134, + "mutability": "mutable", + "name": "providedIndexer", + "nameLocation": "4022:15:53", + "nodeType": "VariableDeclaration", + "scope": 11138, + "src": "4014:23:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11133, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4014:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11136, + "mutability": "mutable", + "name": "expectedIndexer", + "nameLocation": "4047:15:53", + "nodeType": "VariableDeclaration", + "scope": 11138, + "src": "4039:23:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11135, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4039:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4013:50:53" + }, + "src": "3977:87:53" + }, + { + "documentation": { + "id": 11139, + "nodeType": "StructuredDocumentation", + "src": "4070:223:53", + "text": " @notice Thrown when the indexer in the allocation state does not match the expected indexer.\n @param indexer The address of the expected indexer.\n @param allocationId The id of the allocation." + }, + "errorSelector": "c0bbff13", + "id": 11145, + "name": "SubgraphServiceAllocationNotAuthorized", + "nameLocation": "4304:38:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11144, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11141, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "4351:7:53", + "nodeType": "VariableDeclaration", + "scope": 11145, + "src": "4343:15:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11140, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4343:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11143, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "4368:12:53", + "nodeType": "VariableDeclaration", + "scope": 11145, + "src": "4360:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11142, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4360:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4342:39:53" + }, + "src": "4298:84:53" + }, + { + "documentation": { + "id": 11146, + "nodeType": "StructuredDocumentation", + "src": "4388:245:53", + "text": " @notice Thrown when collecting a RAV where the RAV indexer is not the same as the allocation indexer\n @param ravIndexer The address of the RAV indexer\n @param allocationIndexer The address of the allocation indexer" + }, + "errorSelector": "8a11f7ee", + "id": 11152, + "name": "SubgraphServiceInvalidRAV", + "nameLocation": "4644:25:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11151, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11148, + "mutability": "mutable", + "name": "ravIndexer", + "nameLocation": "4678:10:53", + "nodeType": "VariableDeclaration", + "scope": 11152, + "src": "4670:18:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11147, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4670:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11150, + "mutability": "mutable", + "name": "allocationIndexer", + "nameLocation": "4698:17:53", + "nodeType": "VariableDeclaration", + "scope": 11152, + "src": "4690:25:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11149, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4690:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4669:47:53" + }, + "src": "4638:79:53" + }, + { + "documentation": { + "id": 11153, + "nodeType": "StructuredDocumentation", + "src": "4723:182:53", + "text": " @notice Thrown when trying to force close an allocation that is not stale and the indexer is not over-allocated\n @param allocationId The id of the allocation" + }, + "errorSelector": "068ef6a0", + "id": 11157, + "name": "SubgraphServiceCannotForceCloseAllocation", + "nameLocation": "4916:41:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11156, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11155, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "4966:12:53", + "nodeType": "VariableDeclaration", + "scope": 11157, + "src": "4958:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11154, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4958:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4957:22:53" + }, + "src": "4910:70:53" + }, + { + "documentation": { + "id": 11158, + "nodeType": "StructuredDocumentation", + "src": "4986:137:53", + "text": " @notice Thrown when trying to force close an altruistic allocation\n @param allocationId The id of the allocation" + }, + "errorSelector": "be3d9ae8", + "id": 11162, + "name": "SubgraphServiceAllocationIsAltruistic", + "nameLocation": "5134:37:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11161, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11160, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "5180:12:53", + "nodeType": "VariableDeclaration", + "scope": 11162, + "src": "5172:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11159, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5172:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5171:22:53" + }, + "src": "5128:66:53" + }, + { + "documentation": { + "id": 11163, + "nodeType": "StructuredDocumentation", + "src": "5200:80:53", + "text": " @notice Thrown when trying to set stake to fees ratio to zero" + }, + "errorSelector": "bc71a043", + "id": 11165, + "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", + "nameLocation": "5291:42:53", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11164, + "nodeType": "ParameterList", + "parameters": [], + "src": "5333:2:53" + }, + "src": "5285:51:53" + }, + { + "documentation": { + "id": 11166, + "nodeType": "StructuredDocumentation", + "src": "5342:676:53", + "text": " @notice Force close an allocation\n @dev This function can be permissionlessly called when the allocation is stale or\n if the indexer is over-allocated. This ensures that rewards for other allocations are\n not diluted by an inactive allocation, and that over-allocated indexers stop accumulating\n rewards with tokens they no longer have allocated.\n Requirements:\n - Allocation must exist and be open\n - Allocation must be stale or indexer must be over-allocated\n - Allocation cannot be altruistic\n Emits a {AllocationClosed} event.\n @param allocationId The id of the allocation" + }, + "functionSelector": "a827a90c", + "id": 11171, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "forceCloseAllocation", + "nameLocation": "6032:20:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11168, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "6061:12:53", + "nodeType": "VariableDeclaration", + "scope": 11171, + "src": "6053:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11167, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6053:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6052:22:53" + }, + "returnParameters": { + "id": 11170, + "nodeType": "ParameterList", + "parameters": [], + "src": "6083:0:53" + }, + "scope": 11280, + "src": "6023:61:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11172, + "nodeType": "StructuredDocumentation", + "src": "6090:681:53", + "text": " @notice Change the amount of tokens in an allocation\n @dev Requirements:\n - The indexer must be registered\n - The provision must be valid according to the subgraph service rules\n - `tokens` must be different from the current allocation size\n - The indexer must have enough available tokens to allocate if they are upsizing the allocation\n Emits a {AllocationResized} event.\n See {AllocationManager-_resizeAllocation} for more details.\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param tokens The new amount of tokens in the allocation" + }, + "functionSelector": "81e777a7", + "id": 11181, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "resizeAllocation", + "nameLocation": "6785:16:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11179, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11174, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "6810:7:53", + "nodeType": "VariableDeclaration", + "scope": 11181, + "src": "6802:15:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11173, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6802:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11176, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "6827:12:53", + "nodeType": "VariableDeclaration", + "scope": 11181, + "src": "6819:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11175, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6819:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11178, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "6849:6:53", + "nodeType": "VariableDeclaration", + "scope": 11181, + "src": "6841:14:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11177, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6841:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6801:55:53" + }, + "returnParameters": { + "id": 11180, + "nodeType": "ParameterList", + "parameters": [], + "src": "6865:0:53" + }, + "scope": 11280, + "src": "6776:90:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11182, + "nodeType": "StructuredDocumentation", + "src": "6872:398:53", + "text": " @notice Imports a legacy allocation id into the subgraph service\n This is a governor only action that is required to prevent indexers from re-using allocation ids from the\n legacy staking contract.\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment" + }, + "functionSelector": "7dfe6d28", + "id": 11191, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "migrateLegacyAllocation", + "nameLocation": "7284:23:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11189, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11184, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "7316:7:53", + "nodeType": "VariableDeclaration", + "scope": 11191, + "src": "7308:15:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11183, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7308:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11186, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "7333:12:53", + "nodeType": "VariableDeclaration", + "scope": 11191, + "src": "7325:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11185, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7325:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11188, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "7355:20:53", + "nodeType": "VariableDeclaration", + "scope": 11191, + "src": "7347:28:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11187, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7347:7:53", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7307:69:53" + }, + "returnParameters": { + "id": 11190, + "nodeType": "ParameterList", + "parameters": [], + "src": "7385:0:53" + }, + "scope": 11280, + "src": "7275:111:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11192, + "nodeType": "StructuredDocumentation", + "src": "7392:209:53", + "text": " @notice Sets a pause guardian\n @param pauseGuardian The address of the pause guardian\n @param allowed True if the pause guardian is allowed to pause the contract, false otherwise" + }, + "functionSelector": "35577962", + "id": 11199, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setPauseGuardian", + "nameLocation": "7615:16:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11197, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11194, + "mutability": "mutable", + "name": "pauseGuardian", + "nameLocation": "7640:13:53", + "nodeType": "VariableDeclaration", + "scope": 11199, + "src": "7632:21:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11193, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7632:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11196, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "7660:7:53", + "nodeType": "VariableDeclaration", + "scope": 11199, + "src": "7655:12:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11195, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7655:4:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7631:37:53" + }, + "returnParameters": { + "id": 11198, + "nodeType": "ParameterList", + "parameters": [], + "src": "7677:0:53" + }, + "scope": 11280, + "src": "7606:72:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11200, + "nodeType": "StructuredDocumentation", + "src": "7684:216:53", + "text": " @notice Sets the minimum amount of provisioned tokens required to create an allocation\n @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation" + }, + "functionSelector": "832bc923", + "id": 11205, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setMinimumProvisionTokens", + "nameLocation": "7914:25:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11203, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11202, + "mutability": "mutable", + "name": "minimumProvisionTokens", + "nameLocation": "7948:22:53", + "nodeType": "VariableDeclaration", + "scope": 11205, + "src": "7940:30:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11201, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7940:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7939:32:53" + }, + "returnParameters": { + "id": 11204, + "nodeType": "ParameterList", + "parameters": [], + "src": "7980:0:53" + }, + "scope": 11280, + "src": "7905:76:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11206, + "nodeType": "StructuredDocumentation", + "src": "7987:103:53", + "text": " @notice Sets the delegation ratio\n @param delegationRatio The delegation ratio" + }, + "functionSelector": "1dd42f60", + "id": 11211, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setDelegationRatio", + "nameLocation": "8104:18:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11209, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11208, + "mutability": "mutable", + "name": "delegationRatio", + "nameLocation": "8130:15:53", + "nodeType": "VariableDeclaration", + "scope": 11211, + "src": "8123:22:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 11207, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "8123:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "8122:24:53" + }, + "returnParameters": { + "id": 11210, + "nodeType": "ParameterList", + "parameters": [], + "src": "8155:0:53" + }, + "scope": 11280, + "src": "8095:61:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11212, + "nodeType": "StructuredDocumentation", + "src": "8162:110:53", + "text": " @notice Sets the stake to fees ratio\n @param stakeToFeesRatio The stake to fees ratio" + }, + "functionSelector": "e6f50054", + "id": 11217, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setStakeToFeesRatio", + "nameLocation": "8286:19:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11215, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11214, + "mutability": "mutable", + "name": "stakeToFeesRatio", + "nameLocation": "8314:16:53", + "nodeType": "VariableDeclaration", + "scope": 11217, + "src": "8306:24:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11213, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8306:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8305:26:53" + }, + "returnParameters": { + "id": 11216, + "nodeType": "ParameterList", + "parameters": [], + "src": "8340:0:53" + }, + "scope": 11280, + "src": "8277:64:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11218, + "nodeType": "StructuredDocumentation", + "src": "8347:190:53", + "text": " @notice Sets the max POI staleness\n See {AllocationManagerV1Storage-maxPOIStaleness} for more details.\n @param maxPOIStaleness The max POI staleness in seconds" + }, + "functionSelector": "7aa31bce", + "id": 11223, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setMaxPOIStaleness", + "nameLocation": "8551:18:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11221, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11220, + "mutability": "mutable", + "name": "maxPOIStaleness", + "nameLocation": "8578:15:53", + "nodeType": "VariableDeclaration", + "scope": 11223, + "src": "8570:23:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11219, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8570:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8569:25:53" + }, + "returnParameters": { + "id": 11222, + "nodeType": "ParameterList", + "parameters": [], + "src": "8603:0:53" + }, + "scope": 11280, + "src": "8542:62:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11224, + "nodeType": "StructuredDocumentation", + "src": "8610:177:53", + "text": " @notice Sets the curators payment cut for query fees\n @dev Emits a {CuratorCutSet} event\n @param curationCut The curation cut for the payment type" + }, + "functionSelector": "7e89bac3", + "id": 11229, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setCurationCut", + "nameLocation": "8801:14:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11227, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11226, + "mutability": "mutable", + "name": "curationCut", + "nameLocation": "8824:11:53", + "nodeType": "VariableDeclaration", + "scope": 11229, + "src": "8816:19:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11225, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8816:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8815:21:53" + }, + "returnParameters": { + "id": 11228, + "nodeType": "ParameterList", + "parameters": [], + "src": "8845:0:53" + }, + "scope": 11280, + "src": "8792:54:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11230, + "nodeType": "StructuredDocumentation", + "src": "8852:231:53", + "text": " @notice Sets the rewards destination for an indexer to receive indexing rewards\n @dev Emits a {RewardsDestinationSet} event\n @param rewardsDestination The address where indexing rewards should be sent" + }, + "functionSelector": "772495c3", + "id": 11235, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setRewardsDestination", + "nameLocation": "9097:21:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11233, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11232, + "mutability": "mutable", + "name": "rewardsDestination", + "nameLocation": "9127:18:53", + "nodeType": "VariableDeclaration", + "scope": 11235, + "src": "9119:26:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11231, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9119:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9118:28:53" + }, + "returnParameters": { + "id": 11234, + "nodeType": "ParameterList", + "parameters": [], + "src": "9155:0:53" + }, + "scope": 11280, + "src": "9088:68:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11236, + "nodeType": "StructuredDocumentation", + "src": "9162:168:53", + "text": " @notice Gets the details of an allocation\n For legacy allocations use {getLegacyAllocation}\n @param allocationId The id of the allocation" + }, + "functionSelector": "0e022923", + "id": 11244, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAllocation", + "nameLocation": "9344:13:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11239, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11238, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "9366:12:53", + "nodeType": "VariableDeclaration", + "scope": 11244, + "src": "9358:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11237, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9358:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9357:22:53" + }, + "returnParameters": { + "id": 11243, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11242, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11244, + "src": "9403:23:53", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11241, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11240, + "name": "Allocation.State", + "nameLocations": [ + "9403:10:53", + "9414:5:53" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "9403:16:53" + }, + "referencedDeclaration": 11307, + "src": "9403:16:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "9402:25:53" + }, + "scope": 11280, + "src": "9335:93:53", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11245, + "nodeType": "StructuredDocumentation", + "src": "9434:172:53", + "text": " @notice Gets the details of a legacy allocation\n For non-legacy allocations use {getAllocation}\n @param allocationId The id of the allocation" + }, + "functionSelector": "6d9a3951", + "id": 11253, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getLegacyAllocation", + "nameLocation": "9620:19:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11248, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11247, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "9648:12:53", + "nodeType": "VariableDeclaration", + "scope": 11253, + "src": "9640:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11246, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9640:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9639:22:53" + }, + "returnParameters": { + "id": 11252, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11251, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11253, + "src": "9685:29:53", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State" + }, + "typeName": { + "id": 11250, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11249, + "name": "LegacyAllocation.State", + "nameLocations": [ + "9685:16:53", + "9702:5:53" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "9685:22:53" + }, + "referencedDeclaration": 11933, + "src": "9685:22:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "9684:31:53" + }, + "scope": 11280, + "src": "9611:105:53", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11254, + "nodeType": "StructuredDocumentation", + "src": "9722:175:53", + "text": " @notice Encodes the allocation proof for EIP712 signing\n @param indexer The address of the indexer\n @param allocationId The id of the allocation" + }, + "functionSelector": "ce56c98b", + "id": 11263, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "encodeAllocationProof", + "nameLocation": "9911:21:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11259, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11256, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "9941:7:53", + "nodeType": "VariableDeclaration", + "scope": 11263, + "src": "9933:15:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11255, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9933:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11258, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "9958:12:53", + "nodeType": "VariableDeclaration", + "scope": 11263, + "src": "9950:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11257, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9950:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9932:39:53" + }, + "returnParameters": { + "id": 11262, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11261, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11263, + "src": "9995:7:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11260, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9995:7:53", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "9994:9:53" + }, + "scope": 11280, + "src": "9902:102:53", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11264, + "nodeType": "StructuredDocumentation", + "src": "10010:175:53", + "text": " @notice Checks if an allocation is stale\n @param allocationId The id of the allocation\n @return True if the allocation is stale, false otherwise" + }, + "functionSelector": "3f0ed79d", + "id": 11271, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isStaleAllocation", + "nameLocation": "10199:17:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11266, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "10225:12:53", + "nodeType": "VariableDeclaration", + "scope": 11271, + "src": "10217:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11265, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10217:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "10216:22:53" + }, + "returnParameters": { + "id": 11270, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11269, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11271, + "src": "10262:4:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11268, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10262:4:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10261:6:53" + }, + "scope": 11280, + "src": "10190:78:53", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 11272, + "nodeType": "StructuredDocumentation", + "src": "10274:187:53", + "text": " @notice Checks if an indexer is over-allocated\n @param allocationId The id of the allocation\n @return True if the indexer is over-allocated, false otherwise" + }, + "functionSelector": "ba38f67d", + "id": 11279, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isOverAllocated", + "nameLocation": "10475:15:53", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11275, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11274, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "10499:12:53", + "nodeType": "VariableDeclaration", + "scope": 11279, + "src": "10491:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11273, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10491:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "10490:22:53" + }, + "returnParameters": { + "id": 11278, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11277, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11279, + "src": "10536:4:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11276, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10536:4:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10535:6:53" + }, + "scope": 11280, + "src": "10466:76:53", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 11281, + "src": "968:9576:53", + "usedErrors": [ + 1371, + 1374, + 11102, + 11105, + 11108, + 11111, + 11116, + 11122, + 11131, + 11138, + 11145, + 11152, + 11157, + 11162, + 11165 + ], + "usedEvents": [ + 1198, + 1203, + 1210, + 1217, + 1227, + 1234, + 1346, + 1357, + 1366, + 11087, + 11092, + 11097 + ] + } + ], + "src": "45:10500:53" + }, + "id": 53 + }, + "contracts/libraries/Allocation.sol": { + "ast": { + "absolutePath": "contracts/libraries/Allocation.sol", + "exportedSymbols": { + "Allocation": [ + 11674 + ], + "Math": [ + 7858 + ] + }, + "id": 11675, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11282, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:54" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol", + "file": "@openzeppelin/contracts/utils/math/Math.sol", + "id": 11284, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 11675, + "sourceUnit": 7859, + "src": "70:67:54", + "symbolAliases": [ + { + "foreign": { + "id": 11283, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7858, + "src": "79:4:54", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "Allocation", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 11285, + "nodeType": "StructuredDocumentation", + "src": "139:80:54", + "text": " @title Allocation library\n @notice A library to handle Allocations." + }, + "fullyImplemented": true, + "id": 11674, + "linearizedBaseContracts": [ + 11674 + ], + "name": "Allocation", + "nameLocation": "228:10:54", + "nodeType": "ContractDefinition", + "nodes": [ + { + "global": false, + "id": 11289, + "libraryName": { + "id": 11286, + "name": "Allocation", + "nameLocations": [ + "251:10:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11674, + "src": "251:10:54" + }, + "nodeType": "UsingForDirective", + "src": "245:27:54", + "typeName": { + "id": 11288, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11287, + "name": "State", + "nameLocations": [ + "266:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "266:5:54" + }, + "referencedDeclaration": 11307, + "src": "266:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + { + "canonicalName": "Allocation.State", + "documentation": { + "id": 11290, + "nodeType": "StructuredDocumentation", + "src": "278:45:54", + "text": " @notice Allocation details" + }, + "id": 11307, + "members": [ + { + "constant": false, + "id": 11292, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "403:7:54", + "nodeType": "VariableDeclaration", + "scope": 11307, + "src": "395:15:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11291, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "395:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11294, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "484:20:54", + "nodeType": "VariableDeclaration", + "scope": 11307, + "src": "476:28:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11293, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "476:7:54", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11296, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "560:6:54", + "nodeType": "VariableDeclaration", + "scope": 11307, + "src": "552:14:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11295, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "552:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11298, + "mutability": "mutable", + "name": "createdAt", + "nameLocation": "637:9:54", + "nodeType": "VariableDeclaration", + "scope": 11307, + "src": "629:17:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11297, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "629:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11300, + "mutability": "mutable", + "name": "closedAt", + "nameLocation": "716:8:54", + "nodeType": "VariableDeclaration", + "scope": 11307, + "src": "708:16:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11299, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "708:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11302, + "mutability": "mutable", + "name": "lastPOIPresentedAt", + "nameLocation": "795:18:54", + "nodeType": "VariableDeclaration", + "scope": 11307, + "src": "787:26:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11301, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "787:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11304, + "mutability": "mutable", + "name": "accRewardsPerAllocatedToken", + "nameLocation": "882:27:54", + "nodeType": "VariableDeclaration", + "scope": 11307, + "src": "874:35:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11303, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "874:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11306, + "mutability": "mutable", + "name": "accRewardsPending", + "nameLocation": "1011:17:54", + "nodeType": "VariableDeclaration", + "scope": 11307, + "src": "1003:25:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11305, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1003:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "State", + "nameLocation": "335:5:54", + "nodeType": "StructDefinition", + "scope": 11674, + "src": "328:707:54", + "visibility": "public" + }, + { + "documentation": { + "id": 11308, + "nodeType": "StructuredDocumentation", + "src": "1041:138:54", + "text": " @notice Thrown when attempting to create an allocation with an existing id\n @param allocationId The allocation id" + }, + "errorSelector": "0bc4def5", + "id": 11312, + "name": "AllocationAlreadyExists", + "nameLocation": "1190:23:54", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11311, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11310, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "1222:12:54", + "nodeType": "VariableDeclaration", + "scope": 11312, + "src": "1214:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11309, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1214:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1213:22:54" + }, + "src": "1184:52:54" + }, + { + "documentation": { + "id": 11313, + "nodeType": "StructuredDocumentation", + "src": "1242:143:54", + "text": " @notice Thrown when trying to perform an operation on a non-existent allocation\n @param allocationId The allocation id" + }, + "errorSelector": "42daadaf", + "id": 11317, + "name": "AllocationDoesNotExist", + "nameLocation": "1396:22:54", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11316, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11315, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "1427:12:54", + "nodeType": "VariableDeclaration", + "scope": 11317, + "src": "1419:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11314, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1419:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1418:22:54" + }, + "src": "1390:51:54" + }, + { + "documentation": { + "id": 11318, + "nodeType": "StructuredDocumentation", + "src": "1447:205:54", + "text": " @notice Thrown when trying to perform an operation on a closed allocation\n @param allocationId The allocation id\n @param closedAt The timestamp when the allocation was closed" + }, + "errorSelector": "61b66e0d", + "id": 11324, + "name": "AllocationClosed", + "nameLocation": "1663:16:54", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11320, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "1688:12:54", + "nodeType": "VariableDeclaration", + "scope": 11324, + "src": "1680:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11319, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1680:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11322, + "mutability": "mutable", + "name": "closedAt", + "nameLocation": "1710:8:54", + "nodeType": "VariableDeclaration", + "scope": 11324, + "src": "1702:16:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11321, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1702:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1679:40:54" + }, + "src": "1657:63:54" + }, + { + "body": { + "id": 11381, + "nodeType": "Block", + "src": "2491:535:54", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "2509:28:54", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "baseExpression": { + "id": 11347, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11330, + "src": "2510:4:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 11349, + "indexExpression": { + "id": 11348, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11334, + "src": "2515:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2510:18:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "id": 11350, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2529:6:54", + "memberName": "exists", + "nodeType": "MemberAccess", + "referencedDeclaration": 11602, + "src": "2510:25:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 11351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2510:27:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 11354, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11334, + "src": "2563:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11353, + "name": "AllocationAlreadyExists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11312, + "src": "2539:23:54", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 11355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2539:37:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11346, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2501:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2501:76:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11357, + "nodeType": "ExpressionStatement", + "src": "2501:76:54" + }, + { + "assignments": [ + 11360 + ], + "declarations": [ + { + "constant": false, + "id": 11360, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "2601:10:54", + "nodeType": "VariableDeclaration", + "scope": 11381, + "src": "2588:23:54", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11359, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11358, + "name": "State", + "nameLocations": [ + "2588:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "2588:5:54" + }, + "referencedDeclaration": 11307, + "src": "2588:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 11372, + "initialValue": { + "arguments": [ + { + "id": 11362, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11332, + "src": "2643:7:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 11363, + "name": "subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11336, + "src": "2686:20:54", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11364, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11338, + "src": "2728:6:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 11365, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "2759:5:54", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 11366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2765:9:54", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "2759:15:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "30", + "id": 11367, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2798:1:54", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 11368, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2833:1:54", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "id": 11369, + "name": "accRewardsPerAllocatedToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11340, + "src": "2877:27:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "30", + "id": 11370, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2937:1:54", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 11361, + "name": "State", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11307, + "src": "2614:5:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_State_$11307_storage_ptr_$", + "typeString": "type(struct Allocation.State storage pointer)" + } + }, + "id": 11371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "2634:7:54", + "2664:20:54", + "2720:6:54", + "2748:9:54", + "2788:8:54", + "2813:18:54", + "2848:27:54", + "2918:17:54" + ], + "names": [ + "indexer", + "subgraphDeploymentId", + "tokens", + "createdAt", + "closedAt", + "lastPOIPresentedAt", + "accRewardsPerAllocatedToken", + "accRewardsPending" + ], + "nodeType": "FunctionCall", + "src": "2614:335:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2588:361:54" + }, + { + "expression": { + "id": 11377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11373, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11330, + "src": "2960:4:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 11375, + "indexExpression": { + "id": 11374, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11334, + "src": "2965:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2960:18:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11376, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11360, + "src": "2981:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "src": "2960:31:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "id": 11378, + "nodeType": "ExpressionStatement", + "src": "2960:31:54" + }, + { + "expression": { + "id": 11379, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11360, + "src": "3009:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "functionReturnParameters": 11345, + "id": 11380, + "nodeType": "Return", + "src": "3002:17:54" + } + ] + }, + "documentation": { + "id": 11325, + "nodeType": "StructuredDocumentation", + "src": "1726:496:54", + "text": " @notice Create a new allocation\n @dev Requirements:\n - The allocation must not exist\n @param self The allocation list mapping\n @param indexer The indexer that owns the allocation\n @param allocationId The allocation id\n @param subgraphDeploymentId The subgraph deployment id the allocation is for\n @param tokens The number of tokens allocated\n @param accRewardsPerAllocatedToken The initial accumulated rewards per allocated token" + }, + "id": 11382, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "create", + "nameLocation": "2236:6:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11341, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11330, + "mutability": "mutable", + "name": "self", + "nameLocation": "2286:4:54", + "nodeType": "VariableDeclaration", + "scope": 11382, + "src": "2252:38:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "typeName": { + "id": 11329, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 11326, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2260:7:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2252:25:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 11328, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11327, + "name": "State", + "nameLocations": [ + "2271:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "2271:5:54" + }, + "referencedDeclaration": 11307, + "src": "2271:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11332, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "2308:7:54", + "nodeType": "VariableDeclaration", + "scope": 11382, + "src": "2300:15:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11331, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2300:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11334, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "2333:12:54", + "nodeType": "VariableDeclaration", + "scope": 11382, + "src": "2325:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11333, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2325:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11336, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "2363:20:54", + "nodeType": "VariableDeclaration", + "scope": 11382, + "src": "2355:28:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11335, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2355:7:54", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11338, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2401:6:54", + "nodeType": "VariableDeclaration", + "scope": 11382, + "src": "2393:14:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11337, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2393:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11340, + "mutability": "mutable", + "name": "accRewardsPerAllocatedToken", + "nameLocation": "2425:27:54", + "nodeType": "VariableDeclaration", + "scope": 11382, + "src": "2417:35:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11339, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2417:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2242:216:54" + }, + "returnParameters": { + "id": 11345, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11344, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11382, + "src": "2477:12:54", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11343, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11342, + "name": "State", + "nameLocations": [ + "2477:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "2477:5:54" + }, + "referencedDeclaration": 11307, + "src": "2477:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "2476:14:54" + }, + "scope": 11674, + "src": "2227:799:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11419, + "nodeType": "Block", + "src": "3398:216:54", + "statements": [ + { + "assignments": [ + 11395 + ], + "declarations": [ + { + "constant": false, + "id": 11395, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "3422:10:54", + "nodeType": "VariableDeclaration", + "scope": 11419, + "src": "3408:24:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11394, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11393, + "name": "State", + "nameLocations": [ + "3408:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "3408:5:54" + }, + "referencedDeclaration": 11307, + "src": "3408:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 11400, + "initialValue": { + "arguments": [ + { + "id": 11397, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11388, + "src": "3440:4:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + { + "id": 11398, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11390, + "src": "3446:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11396, + "name": "_get", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11673, + "src": "3435:4:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" + } + }, + "id": 11399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3435:24:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3408:51:54" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11402, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11395, + "src": "3477:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11403, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3488:6:54", + "memberName": "isOpen", + "nodeType": "MemberAccess", + "referencedDeclaration": 11621, + "src": "3477:17:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 11404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3477:19:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 11406, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11390, + "src": "3515:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 11407, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11395, + "src": "3529:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11408, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3540:8:54", + "memberName": "closedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11300, + "src": "3529:19:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11405, + "name": "AllocationClosed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11324, + "src": "3498:16:54", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", + "typeString": "function (address,uint256) pure returns (error)" + } + }, + "id": 11409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3498:51:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11401, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3469:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3469:81:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11411, + "nodeType": "ExpressionStatement", + "src": "3469:81:54" + }, + { + "expression": { + "id": 11417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 11412, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11395, + "src": "3560:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11414, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3571:18:54", + "memberName": "lastPOIPresentedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11302, + "src": "3560:29:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 11415, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "3592:5:54", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 11416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3598:9:54", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "3592:15:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3560:47:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11418, + "nodeType": "ExpressionStatement", + "src": "3560:47:54" + } + ] + }, + "documentation": { + "id": 11383, + "nodeType": "StructuredDocumentation", + "src": "3032:270:54", + "text": " @notice Present a POI for an allocation\n @dev It only updates the last POI presented timestamp.\n Requirements:\n - The allocation must be open\n @param self The allocation list mapping\n @param allocationId The allocation id" + }, + "id": 11420, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "presentPOI", + "nameLocation": "3316:10:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11391, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11388, + "mutability": "mutable", + "name": "self", + "nameLocation": "3361:4:54", + "nodeType": "VariableDeclaration", + "scope": 11420, + "src": "3327:38:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "typeName": { + "id": 11387, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 11384, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3335:7:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3327:25:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 11386, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11385, + "name": "State", + "nameLocations": [ + "3346:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "3346:5:54" + }, + "referencedDeclaration": 11307, + "src": "3346:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11390, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "3375:12:54", + "nodeType": "VariableDeclaration", + "scope": 11420, + "src": "3367:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11389, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3367:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3326:62:54" + }, + "returnParameters": { + "id": 11392, + "nodeType": "ParameterList", + "parameters": [], + "src": "3398:0:54" + }, + "scope": 11674, + "src": "3307:307:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11458, + "nodeType": "Block", + "src": "4128:237:54", + "statements": [ + { + "assignments": [ + 11435 + ], + "declarations": [ + { + "constant": false, + "id": 11435, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "4152:10:54", + "nodeType": "VariableDeclaration", + "scope": 11458, + "src": "4138:24:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11434, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11433, + "name": "State", + "nameLocations": [ + "4138:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "4138:5:54" + }, + "referencedDeclaration": 11307, + "src": "4138:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 11440, + "initialValue": { + "arguments": [ + { + "id": 11437, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11426, + "src": "4170:4:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + { + "id": 11438, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11428, + "src": "4176:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11436, + "name": "_get", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11673, + "src": "4165:4:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" + } + }, + "id": 11439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4165:24:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4138:51:54" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11442, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11435, + "src": "4207:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11443, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4218:6:54", + "memberName": "isOpen", + "nodeType": "MemberAccess", + "referencedDeclaration": 11621, + "src": "4207:17:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 11444, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4207:19:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 11446, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11428, + "src": "4245:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 11447, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11435, + "src": "4259:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11448, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4270:8:54", + "memberName": "closedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11300, + "src": "4259:19:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11445, + "name": "AllocationClosed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11324, + "src": "4228:16:54", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", + "typeString": "function (address,uint256) pure returns (error)" + } + }, + "id": 11449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4228:51:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11441, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4199:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4199:81:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11451, + "nodeType": "ExpressionStatement", + "src": "4199:81:54" + }, + { + "expression": { + "id": 11456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 11452, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11435, + "src": "4290:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11454, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4301:27:54", + "memberName": "accRewardsPerAllocatedToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 11304, + "src": "4290:38:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11455, + "name": "accRewardsPerAllocatedToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11430, + "src": "4331:27:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4290:68:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11457, + "nodeType": "ExpressionStatement", + "src": "4290:68:54" + } + ] + }, + "documentation": { + "id": 11421, + "nodeType": "StructuredDocumentation", + "src": "3620:340:54", + "text": " @notice Update the accumulated rewards per allocated token for an allocation\n @dev Requirements:\n - The allocation must be open\n @param self The allocation list mapping\n @param allocationId The allocation id\n @param accRewardsPerAllocatedToken The new accumulated rewards per allocated token" + }, + "id": 11459, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "snapshotRewards", + "nameLocation": "3974:15:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11431, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11426, + "mutability": "mutable", + "name": "self", + "nameLocation": "4033:4:54", + "nodeType": "VariableDeclaration", + "scope": 11459, + "src": "3999:38:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "typeName": { + "id": 11425, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 11422, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4007:7:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3999:25:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 11424, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11423, + "name": "State", + "nameLocations": [ + "4018:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "4018:5:54" + }, + "referencedDeclaration": 11307, + "src": "4018:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11428, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "4055:12:54", + "nodeType": "VariableDeclaration", + "scope": 11459, + "src": "4047:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11427, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4047:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11430, + "mutability": "mutable", + "name": "accRewardsPerAllocatedToken", + "nameLocation": "4085:27:54", + "nodeType": "VariableDeclaration", + "scope": 11459, + "src": "4077:35:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11429, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4077:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3989:129:54" + }, + "returnParameters": { + "id": 11432, + "nodeType": "ParameterList", + "parameters": [], + "src": "4128:0:54" + }, + "scope": 11674, + "src": "3965:400:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11495, + "nodeType": "Block", + "src": "4728:201:54", + "statements": [ + { + "assignments": [ + 11472 + ], + "declarations": [ + { + "constant": false, + "id": 11472, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "4752:10:54", + "nodeType": "VariableDeclaration", + "scope": 11495, + "src": "4738:24:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11471, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11470, + "name": "State", + "nameLocations": [ + "4738:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "4738:5:54" + }, + "referencedDeclaration": 11307, + "src": "4738:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 11477, + "initialValue": { + "arguments": [ + { + "id": 11474, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11465, + "src": "4770:4:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + { + "id": 11475, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11467, + "src": "4776:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11473, + "name": "_get", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11673, + "src": "4765:4:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" + } + }, + "id": 11476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4765:24:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4738:51:54" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11479, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11472, + "src": "4807:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11480, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4818:6:54", + "memberName": "isOpen", + "nodeType": "MemberAccess", + "referencedDeclaration": 11621, + "src": "4807:17:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 11481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4807:19:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 11483, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11467, + "src": "4845:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 11484, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11472, + "src": "4859:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11485, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4870:8:54", + "memberName": "closedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11300, + "src": "4859:19:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11482, + "name": "AllocationClosed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11324, + "src": "4828:16:54", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", + "typeString": "function (address,uint256) pure returns (error)" + } + }, + "id": 11486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4828:51:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11478, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4799:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4799:81:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11488, + "nodeType": "ExpressionStatement", + "src": "4799:81:54" + }, + { + "expression": { + "id": 11493, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 11489, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11472, + "src": "4890:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11491, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4901:17:54", + "memberName": "accRewardsPending", + "nodeType": "MemberAccess", + "referencedDeclaration": 11306, + "src": "4890:28:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "30", + "id": 11492, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4921:1:54", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4890:32:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11494, + "nodeType": "ExpressionStatement", + "src": "4890:32:54" + } + ] + }, + "documentation": { + "id": 11460, + "nodeType": "StructuredDocumentation", + "src": "4371:252:54", + "text": " @notice Update the accumulated rewards pending to be claimed for an allocation\n @dev Requirements:\n - The allocation must be open\n @param self The allocation list mapping\n @param allocationId The allocation id" + }, + "id": 11496, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "clearPendingRewards", + "nameLocation": "4637:19:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11468, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11465, + "mutability": "mutable", + "name": "self", + "nameLocation": "4691:4:54", + "nodeType": "VariableDeclaration", + "scope": 11496, + "src": "4657:38:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "typeName": { + "id": 11464, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 11461, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4665:7:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "4657:25:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 11463, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11462, + "name": "State", + "nameLocations": [ + "4676:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "4676:5:54" + }, + "referencedDeclaration": 11307, + "src": "4676:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11467, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "4705:12:54", + "nodeType": "VariableDeclaration", + "scope": 11496, + "src": "4697:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11466, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4697:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4656:62:54" + }, + "returnParameters": { + "id": 11469, + "nodeType": "ParameterList", + "parameters": [], + "src": "4728:0:54" + }, + "scope": 11674, + "src": "4628:301:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11533, + "nodeType": "Block", + "src": "5227:206:54", + "statements": [ + { + "assignments": [ + 11509 + ], + "declarations": [ + { + "constant": false, + "id": 11509, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "5251:10:54", + "nodeType": "VariableDeclaration", + "scope": 11533, + "src": "5237:24:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11508, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11507, + "name": "State", + "nameLocations": [ + "5237:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "5237:5:54" + }, + "referencedDeclaration": 11307, + "src": "5237:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 11514, + "initialValue": { + "arguments": [ + { + "id": 11511, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11502, + "src": "5269:4:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + { + "id": 11512, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11504, + "src": "5275:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11510, + "name": "_get", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11673, + "src": "5264:4:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" + } + }, + "id": 11513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5264:24:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5237:51:54" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11516, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11509, + "src": "5306:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11517, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5317:6:54", + "memberName": "isOpen", + "nodeType": "MemberAccess", + "referencedDeclaration": 11621, + "src": "5306:17:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 11518, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5306:19:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 11520, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11504, + "src": "5344:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 11521, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11509, + "src": "5358:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11522, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5369:8:54", + "memberName": "closedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11300, + "src": "5358:19:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11519, + "name": "AllocationClosed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11324, + "src": "5327:16:54", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", + "typeString": "function (address,uint256) pure returns (error)" + } + }, + "id": 11523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5327:51:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11515, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5298:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5298:81:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11525, + "nodeType": "ExpressionStatement", + "src": "5298:81:54" + }, + { + "expression": { + "id": 11531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 11526, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11509, + "src": "5389:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11528, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "5400:8:54", + "memberName": "closedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11300, + "src": "5389:19:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 11529, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5411:5:54", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 11530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5417:9:54", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "5411:15:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5389:37:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11532, + "nodeType": "ExpressionStatement", + "src": "5389:37:54" + } + ] + }, + "documentation": { + "id": 11497, + "nodeType": "StructuredDocumentation", + "src": "4935:201:54", + "text": " @notice Close an allocation\n @dev Requirements:\n - The allocation must be open\n @param self The allocation list mapping\n @param allocationId The allocation id" + }, + "id": 11534, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "close", + "nameLocation": "5150:5:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11505, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11502, + "mutability": "mutable", + "name": "self", + "nameLocation": "5190:4:54", + "nodeType": "VariableDeclaration", + "scope": 11534, + "src": "5156:38:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "typeName": { + "id": 11501, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 11498, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5164:7:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "5156:25:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 11500, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11499, + "name": "State", + "nameLocations": [ + "5175:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "5175:5:54" + }, + "referencedDeclaration": 11307, + "src": "5175:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11504, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "5204:12:54", + "nodeType": "VariableDeclaration", + "scope": 11534, + "src": "5196:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11503, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5196:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5155:62:54" + }, + "returnParameters": { + "id": 11506, + "nodeType": "ParameterList", + "parameters": [], + "src": "5227:0:54" + }, + "scope": 11674, + "src": "5141:292:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11553, + "nodeType": "Block", + "src": "5692:48:54", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11549, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11540, + "src": "5714:4:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + { + "id": 11550, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11542, + "src": "5720:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11548, + "name": "_get", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11673, + "src": "5709:4:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" + } + }, + "id": 11551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5709:24:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "functionReturnParameters": 11547, + "id": 11552, + "nodeType": "Return", + "src": "5702:31:54" + } + ] + }, + "documentation": { + "id": 11535, + "nodeType": "StructuredDocumentation", + "src": "5439:136:54", + "text": " @notice Get an allocation\n @param self The allocation list mapping\n @param allocationId The allocation id" + }, + "id": 11554, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "get", + "nameLocation": "5589:3:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11543, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11540, + "mutability": "mutable", + "name": "self", + "nameLocation": "5627:4:54", + "nodeType": "VariableDeclaration", + "scope": 11554, + "src": "5593:38:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "typeName": { + "id": 11539, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 11536, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5601:7:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "5593:25:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 11538, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11537, + "name": "State", + "nameLocations": [ + "5612:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "5612:5:54" + }, + "referencedDeclaration": 11307, + "src": "5612:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11542, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "5641:12:54", + "nodeType": "VariableDeclaration", + "scope": 11554, + "src": "5633:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11541, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5633:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5592:62:54" + }, + "returnParameters": { + "id": 11547, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11546, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11554, + "src": "5678:12:54", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11545, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11544, + "name": "State", + "nameLocations": [ + "5678:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "5678:5:54" + }, + "referencedDeclaration": 11307, + "src": "5678:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "5677:14:54" + }, + "scope": 11674, + "src": "5580:160:54", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11586, + "nodeType": "Block", + "src": "6013:178:54", + "statements": [ + { + "assignments": [ + 11566 + ], + "declarations": [ + { + "constant": false, + "id": 11566, + "mutability": "mutable", + "name": "timeSinceLastPOI", + "nameLocation": "6031:16:54", + "nodeType": "VariableDeclaration", + "scope": 11586, + "src": "6023:24:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11565, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6023:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11577, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11567, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "6050:5:54", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 11568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6056:9:54", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "6050:15:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "arguments": [ + { + "expression": { + "id": 11571, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11558, + "src": "6077:4:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 11572, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6082:9:54", + "memberName": "createdAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11298, + "src": "6077:14:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 11573, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11558, + "src": "6093:4:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 11574, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6098:18:54", + "memberName": "lastPOIPresentedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11302, + "src": "6093:23:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11569, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7858, + "src": "6068:4:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$7858_$", + "typeString": "type(library Math)" + } + }, + "id": 11570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6073:3:54", + "memberName": "max", + "nodeType": "MemberAccess", + "referencedDeclaration": 6991, + "src": "6068:8:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 11575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6068:49:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6050:67:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6023:94:54" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 11584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11578, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11558, + "src": "6134:4:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 11579, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6139:6:54", + "memberName": "isOpen", + "nodeType": "MemberAccess", + "referencedDeclaration": 11621, + "src": "6134:11:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 11580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6134:13:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11581, + "name": "timeSinceLastPOI", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11566, + "src": "6151:16:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 11582, + "name": "staleThreshold", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11560, + "src": "6170:14:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6151:33:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6134:50:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 11564, + "id": 11585, + "nodeType": "Return", + "src": "6127:57:54" + } + ] + }, + "documentation": { + "id": 11555, + "nodeType": "StructuredDocumentation", + "src": "5746:173:54", + "text": " @notice Checks if an allocation is stale\n @param self The allocation\n @param staleThreshold The time in blocks to consider an allocation stale" + }, + "id": 11587, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isStale", + "nameLocation": "5933:7:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11561, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11558, + "mutability": "mutable", + "name": "self", + "nameLocation": "5954:4:54", + "nodeType": "VariableDeclaration", + "scope": 11587, + "src": "5941:17:54", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11557, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11556, + "name": "State", + "nameLocations": [ + "5941:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "5941:5:54" + }, + "referencedDeclaration": 11307, + "src": "5941:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11560, + "mutability": "mutable", + "name": "staleThreshold", + "nameLocation": "5968:14:54", + "nodeType": "VariableDeclaration", + "scope": 11587, + "src": "5960:22:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11559, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5960:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5940:43:54" + }, + "returnParameters": { + "id": 11564, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11563, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11587, + "src": "6007:4:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11562, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6007:4:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6006:6:54" + }, + "scope": 11674, + "src": "5924:267:54", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11601, + "nodeType": "Block", + "src": "6357:43:54", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11596, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11591, + "src": "6374:4:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 11597, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6379:9:54", + "memberName": "createdAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11298, + "src": "6374:14:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 11598, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6392:1:54", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6374:19:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 11595, + "id": 11600, + "nodeType": "Return", + "src": "6367:26:54" + } + ] + }, + "documentation": { + "id": 11588, + "nodeType": "StructuredDocumentation", + "src": "6197:91:54", + "text": " @notice Checks if an allocation exists\n @param self The allocation" + }, + "id": 11602, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "exists", + "nameLocation": "6302:6:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11592, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11591, + "mutability": "mutable", + "name": "self", + "nameLocation": "6322:4:54", + "nodeType": "VariableDeclaration", + "scope": 11602, + "src": "6309:17:54", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11590, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11589, + "name": "State", + "nameLocations": [ + "6309:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "6309:5:54" + }, + "referencedDeclaration": 11307, + "src": "6309:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "6308:19:54" + }, + "returnParameters": { + "id": 11595, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11594, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11602, + "src": "6351:4:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11593, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6351:4:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6350:6:54" + }, + "scope": 11674, + "src": "6293:107:54", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11620, + "nodeType": "Block", + "src": "6567:59:54", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 11618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11611, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11606, + "src": "6584:4:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 11612, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6589:6:54", + "memberName": "exists", + "nodeType": "MemberAccess", + "referencedDeclaration": 11602, + "src": "6584:11:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 11613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6584:13:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11617, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11614, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11606, + "src": "6601:4:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 11615, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6606:8:54", + "memberName": "closedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11300, + "src": "6601:13:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 11616, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6618:1:54", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6601:18:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6584:35:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 11610, + "id": 11619, + "nodeType": "Return", + "src": "6577:42:54" + } + ] + }, + "documentation": { + "id": 11603, + "nodeType": "StructuredDocumentation", + "src": "6406:92:54", + "text": " @notice Checks if an allocation is open\n @param self The allocation" + }, + "id": 11621, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isOpen", + "nameLocation": "6512:6:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11607, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11606, + "mutability": "mutable", + "name": "self", + "nameLocation": "6532:4:54", + "nodeType": "VariableDeclaration", + "scope": 11621, + "src": "6519:17:54", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11605, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11604, + "name": "State", + "nameLocations": [ + "6519:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "6519:5:54" + }, + "referencedDeclaration": 11307, + "src": "6519:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "6518:19:54" + }, + "returnParameters": { + "id": 11610, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11609, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11621, + "src": "6561:4:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11608, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6561:4:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6560:6:54" + }, + "scope": 11674, + "src": "6503:123:54", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11639, + "nodeType": "Block", + "src": "6805:57:54", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 11637, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11630, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11625, + "src": "6822:4:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 11631, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6827:6:54", + "memberName": "exists", + "nodeType": "MemberAccess", + "referencedDeclaration": 11602, + "src": "6822:11:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 11632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6822:13:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11633, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11625, + "src": "6839:4:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 11634, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6844:6:54", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "6839:11:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 11635, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6854:1:54", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6839:16:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6822:33:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 11629, + "id": 11638, + "nodeType": "Return", + "src": "6815:40:54" + } + ] + }, + "documentation": { + "id": 11622, + "nodeType": "StructuredDocumentation", + "src": "6632:98:54", + "text": " @notice Checks if an allocation is alturistic\n @param self The allocation" + }, + "id": 11640, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isAltruistic", + "nameLocation": "6744:12:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11626, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11625, + "mutability": "mutable", + "name": "self", + "nameLocation": "6770:4:54", + "nodeType": "VariableDeclaration", + "scope": 11640, + "src": "6757:17:54", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11624, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11623, + "name": "State", + "nameLocations": [ + "6757:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "6757:5:54" + }, + "referencedDeclaration": 11307, + "src": "6757:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "6756:19:54" + }, + "returnParameters": { + "id": 11629, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11628, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11640, + "src": "6799:4:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11627, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6799:4:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6798:6:54" + }, + "scope": 11674, + "src": "6735:127:54", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11672, + "nodeType": "Block", + "src": "7197:165:54", + "statements": [ + { + "assignments": [ + 11656 + ], + "declarations": [ + { + "constant": false, + "id": 11656, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "7221:10:54", + "nodeType": "VariableDeclaration", + "scope": 11672, + "src": "7207:24:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11655, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11654, + "name": "State", + "nameLocations": [ + "7207:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "7207:5:54" + }, + "referencedDeclaration": 11307, + "src": "7207:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 11660, + "initialValue": { + "baseExpression": { + "id": 11657, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11646, + "src": "7234:4:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 11659, + "indexExpression": { + "id": 11658, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11648, + "src": "7239:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7234:18:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7207:45:54" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11662, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11656, + "src": "7270:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "id": 11663, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7281:6:54", + "memberName": "exists", + "nodeType": "MemberAccess", + "referencedDeclaration": 11602, + "src": "7270:17:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 11664, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7270:19:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 11666, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11648, + "src": "7314:12:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11665, + "name": "AllocationDoesNotExist", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11317, + "src": "7291:22:54", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 11667, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7291:36:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11661, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7262:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7262:66:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11669, + "nodeType": "ExpressionStatement", + "src": "7262:66:54" + }, + { + "expression": { + "id": 11670, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11656, + "src": "7345:10:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State storage pointer" + } + }, + "functionReturnParameters": 11653, + "id": 11671, + "nodeType": "Return", + "src": "7338:17:54" + } + ] + }, + "documentation": { + "id": 11641, + "nodeType": "StructuredDocumentation", + "src": "6868:211:54", + "text": " @notice Get the allocation for an allocation id\n @dev Reverts if the allocation does not exist\n @param self The allocation list mapping\n @param allocationId The allocation id" + }, + "id": 11673, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_get", + "nameLocation": "7093:4:54", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11649, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11646, + "mutability": "mutable", + "name": "self", + "nameLocation": "7132:4:54", + "nodeType": "VariableDeclaration", + "scope": 11673, + "src": "7098:38:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "typeName": { + "id": 11645, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 11642, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7106:7:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "7098:25:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 11644, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11643, + "name": "State", + "nameLocations": [ + "7117:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "7117:5:54" + }, + "referencedDeclaration": 11307, + "src": "7117:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11648, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "7146:12:54", + "nodeType": "VariableDeclaration", + "scope": 11673, + "src": "7138:20:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11647, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7138:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7097:62:54" + }, + "returnParameters": { + "id": 11653, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11652, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11673, + "src": "7182:13:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 11651, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11650, + "name": "State", + "nameLocations": [ + "7182:5:54" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "7182:5:54" + }, + "referencedDeclaration": 11307, + "src": "7182:5:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "7181:15:54" + }, + "scope": 11674, + "src": "7084:278:54", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 11675, + "src": "220:7144:54", + "usedErrors": [ + 11312, + 11317, + 11324 + ], + "usedEvents": [] + } + ], + "src": "45:7320:54" + }, + "id": 54 + }, + "contracts/libraries/Attestation.sol": { + "ast": { + "absolutePath": "contracts/libraries/Attestation.sol", + "exportedSymbols": { + "Attestation": [ + 11920 + ] + }, + "id": 11921, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11676, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:55" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "Attestation", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 11677, + "nodeType": "StructuredDocumentation", + "src": "70:81:55", + "text": " @title Attestation library\n @notice A library to handle Attestation." + }, + "fullyImplemented": true, + "id": 11920, + "linearizedBaseContracts": [ + 11920 + ], + "name": "Attestation", + "nameLocation": "160:11:55", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "Attestation.Receipt", + "documentation": { + "id": 11678, + "nodeType": "StructuredDocumentation", + "src": "178:81:55", + "text": "@notice Receipt content sent from the service provider in response to request" + }, + "id": 11685, + "members": [ + { + "constant": false, + "id": 11680, + "mutability": "mutable", + "name": "requestCID", + "nameLocation": "297:10:55", + "nodeType": "VariableDeclaration", + "scope": 11685, + "src": "289:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11679, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "289:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11682, + "mutability": "mutable", + "name": "responseCID", + "nameLocation": "325:11:55", + "nodeType": "VariableDeclaration", + "scope": 11685, + "src": "317:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11681, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "317:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11684, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "354:20:55", + "nodeType": "VariableDeclaration", + "scope": 11685, + "src": "346:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11683, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "346:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "name": "Receipt", + "nameLocation": "271:7:55", + "nodeType": "StructDefinition", + "scope": 11920, + "src": "264:117:55", + "visibility": "public" + }, + { + "canonicalName": "Attestation.State", + "documentation": { + "id": 11686, + "nodeType": "StructuredDocumentation", + "src": "387:79:55", + "text": "@notice Attestation sent from the service provider in response to a request" + }, + "id": 11699, + "members": [ + { + "constant": false, + "id": 11688, + "mutability": "mutable", + "name": "requestCID", + "nameLocation": "502:10:55", + "nodeType": "VariableDeclaration", + "scope": 11699, + "src": "494:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11687, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "494:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11690, + "mutability": "mutable", + "name": "responseCID", + "nameLocation": "530:11:55", + "nodeType": "VariableDeclaration", + "scope": 11699, + "src": "522:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11689, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "522:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11692, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "559:20:55", + "nodeType": "VariableDeclaration", + "scope": 11699, + "src": "551:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11691, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "551:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11694, + "mutability": "mutable", + "name": "r", + "nameLocation": "597:1:55", + "nodeType": "VariableDeclaration", + "scope": 11699, + "src": "589:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11693, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "589:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11696, + "mutability": "mutable", + "name": "s", + "nameLocation": "616:1:55", + "nodeType": "VariableDeclaration", + "scope": 11699, + "src": "608:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11695, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "608:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11698, + "mutability": "mutable", + "name": "v", + "nameLocation": "633:1:55", + "nodeType": "VariableDeclaration", + "scope": 11699, + "src": "627:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 11697, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "627:5:55", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "name": "State", + "nameLocation": "478:5:55", + "nodeType": "StructDefinition", + "scope": 11920, + "src": "471:170:55", + "visibility": "public" + }, + { + "constant": true, + "documentation": { + "id": 11700, + "nodeType": "StructuredDocumentation", + "src": "647:76:55", + "text": "@notice Attestation size is the sum of the receipt (96) + signature (65)" + }, + "id": 11703, + "mutability": "constant", + "name": "RECEIPT_SIZE_BYTES", + "nameLocation": "753:18:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "728:48:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11701, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "728:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3936", + "id": 11702, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "774:2:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_96_by_1", + "typeString": "int_const 96" + }, + "value": "96" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11706, + "mutability": "constant", + "name": "SIG_R_LENGTH", + "nameLocation": "808:12:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "783:42:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11704, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "783:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3332", + "id": 11705, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "823:2:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11709, + "mutability": "constant", + "name": "SIG_S_LENGTH", + "nameLocation": "856:12:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "831:42:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11707, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "831:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3332", + "id": 11708, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "871:2:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11712, + "mutability": "constant", + "name": "SIG_V_LENGTH", + "nameLocation": "904:12:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "879:41:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11710, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "879:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 11711, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "919:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11715, + "mutability": "constant", + "name": "SIG_R_OFFSET", + "nameLocation": "951:12:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "926:58:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11713, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "926:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "id": 11714, + "name": "RECEIPT_SIZE_BYTES", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11703, + "src": "966:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11720, + "mutability": "constant", + "name": "SIG_S_OFFSET", + "nameLocation": "1015:12:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "990:73:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11716, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "990:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11719, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 11717, + "name": "RECEIPT_SIZE_BYTES", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11703, + "src": "1030:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11718, + "name": "SIG_R_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11706, + "src": "1051:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1030:33:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11727, + "mutability": "constant", + "name": "SIG_V_OFFSET", + "nameLocation": "1094:12:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "1069:88:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11721, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1069:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11726, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11724, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 11722, + "name": "RECEIPT_SIZE_BYTES", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11703, + "src": "1109:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11723, + "name": "SIG_R_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11706, + "src": "1130:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1109:33:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11725, + "name": "SIG_S_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11709, + "src": "1145:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1109:48:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11734, + "mutability": "constant", + "name": "SIG_SIZE_BYTES", + "nameLocation": "1188:14:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "1163:84:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11728, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1163:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11733, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11731, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 11729, + "name": "SIG_R_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11706, + "src": "1205:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11730, + "name": "SIG_S_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11709, + "src": "1220:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1205:27:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11732, + "name": "SIG_V_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11712, + "src": "1235:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1205:42:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11739, + "mutability": "constant", + "name": "ATTESTATION_SIZE_BYTES", + "nameLocation": "1279:22:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "1254:85:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11735, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1254:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11738, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 11736, + "name": "RECEIPT_SIZE_BYTES", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11703, + "src": "1304:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11737, + "name": "SIG_SIZE_BYTES", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11734, + "src": "1325:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1304:35:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11742, + "mutability": "constant", + "name": "UINT8_BYTE_LENGTH", + "nameLocation": "1371:17:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "1346:46:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11740, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1346:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 11741, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1391:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 11745, + "mutability": "constant", + "name": "BYTES32_BYTE_LENGTH", + "nameLocation": "1423:19:55", + "nodeType": "VariableDeclaration", + "scope": 11920, + "src": "1398:49:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11743, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1398:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3332", + "id": 11744, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1445:2:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "visibility": "private" + }, + { + "errorSelector": "3fdf3423", + "id": 11751, + "name": "AttestationInvalidBytesLength", + "nameLocation": "1460:29:55", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11750, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11747, + "mutability": "mutable", + "name": "length", + "nameLocation": "1498:6:55", + "nodeType": "VariableDeclaration", + "scope": 11751, + "src": "1490:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11746, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1490:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11749, + "mutability": "mutable", + "name": "expectedLength", + "nameLocation": "1514:14:55", + "nodeType": "VariableDeclaration", + "scope": 11751, + "src": "1506:22:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11748, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1506:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1489:40:55" + }, + "src": "1454:76:55" + }, + { + "body": { + "id": 11782, + "nodeType": "Block", + "src": "1960:236:55", + "statements": [ + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 11779, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 11773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 11767, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11763, + "name": "_attestation1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11755, + "src": "1978:13:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 11764, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1992:10:55", + "memberName": "requestCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11688, + "src": "1978:24:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11765, + "name": "_attestation2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11758, + "src": "2006:13:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 11766, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2020:10:55", + "memberName": "requestCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11688, + "src": "2006:24:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "1978:52:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 11772, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11768, + "name": "_attestation1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11755, + "src": "2046:13:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 11769, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2060:20:55", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11692, + "src": "2046:34:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11770, + "name": "_attestation2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11758, + "src": "2084:13:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 11771, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2098:20:55", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11692, + "src": "2084:34:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2046:72:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1978:140:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 11778, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11774, + "name": "_attestation1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11755, + "src": "2134:13:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 11775, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2148:11:55", + "memberName": "responseCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11690, + "src": "2134:25:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "expression": { + "id": 11776, + "name": "_attestation2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11758, + "src": "2163:13:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 11777, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2177:11:55", + "memberName": "responseCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11690, + "src": "2163:25:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2134:54:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1978:210:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 11780, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1977:212:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 11762, + "id": 11781, + "nodeType": "Return", + "src": "1970:219:55" + } + ] + }, + "documentation": { + "id": 11752, + "nodeType": "StructuredDocumentation", + "src": "1536:264:55", + "text": " @dev Returns if two attestations are conflicting.\n Everything must match except for the responseId.\n @param _attestation1 Attestation\n @param _attestation2 Attestation\n @return True if the two attestations are conflicting" + }, + "id": 11783, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "areConflicting", + "nameLocation": "1814:14:55", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11759, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11755, + "mutability": "mutable", + "name": "_attestation1", + "nameLocation": "1863:13:55", + "nodeType": "VariableDeclaration", + "scope": 11783, + "src": "1838:38:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 11754, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11753, + "name": "Attestation.State", + "nameLocations": [ + "1838:11:55", + "1850:5:55" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "1838:17:55" + }, + "referencedDeclaration": 11699, + "src": "1838:17:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11758, + "mutability": "mutable", + "name": "_attestation2", + "nameLocation": "1911:13:55", + "nodeType": "VariableDeclaration", + "scope": 11783, + "src": "1886:38:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 11757, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11756, + "name": "Attestation.State", + "nameLocations": [ + "1886:11:55", + "1898:5:55" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "1886:17:55" + }, + "referencedDeclaration": 11699, + "src": "1886:17:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + } + ], + "src": "1828:102:55" + }, + "returnParameters": { + "id": 11762, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11761, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11783, + "src": "1954:4:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11760, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1954:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1953:6:55" + }, + "scope": 11920, + "src": "1805:391:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11852, + "nodeType": "Block", + "src": "2392:748:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11796, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11793, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11786, + "src": "2464:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2470:6:55", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2464:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 11795, + "name": "ATTESTATION_SIZE_BYTES", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11739, + "src": "2480:22:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2464:38:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "expression": { + "id": 11798, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11786, + "src": "2546:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11799, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2552:6:55", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2546:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11800, + "name": "ATTESTATION_SIZE_BYTES", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11739, + "src": "2560:22:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11797, + "name": "AttestationInvalidBytesLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11751, + "src": "2516:29:55", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 11801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2516:67:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11792, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2443:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11802, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2443:150:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11803, + "nodeType": "ExpressionStatement", + "src": "2443:150:55" + }, + { + "assignments": [ + 11805, + 11807, + 11809 + ], + "declarations": [ + { + "constant": false, + "id": 11805, + "mutability": "mutable", + "name": "requestCID", + "nameLocation": "2639:10:55", + "nodeType": "VariableDeclaration", + "scope": 11852, + "src": "2631:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11804, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2631:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11807, + "mutability": "mutable", + "name": "responseCID", + "nameLocation": "2659:11:55", + "nodeType": "VariableDeclaration", + "scope": 11852, + "src": "2651:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11806, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2651:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11809, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "2680:20:55", + "nodeType": "VariableDeclaration", + "scope": 11852, + "src": "2672:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11808, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2672:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 11821, + "initialValue": { + "arguments": [ + { + "id": 11812, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11786, + "src": "2728:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 11814, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2748:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 11813, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2748:7:55", + "typeDescriptions": {} + } + }, + { + "id": 11816, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2757:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 11815, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2757:7:55", + "typeDescriptions": {} + } + }, + { + "id": 11818, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2766:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 11817, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2766:7:55", + "typeDescriptions": {} + } + } + ], + "id": 11819, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2747:27:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$", + "typeString": "tuple(type(bytes32),type(bytes32),type(bytes32))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$", + "typeString": "tuple(type(bytes32),type(bytes32),type(bytes32))" + } + ], + "expression": { + "id": 11810, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2704:3:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 11811, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2708:6:55", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "2704:10:55", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 11820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2704:80:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$_t_bytes32_$", + "typeString": "tuple(bytes32,bytes32,bytes32)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2630:154:55" + }, + { + "assignments": [ + 11823 + ], + "declarations": [ + { + "constant": false, + "id": 11823, + "mutability": "mutable", + "name": "r", + "nameLocation": "2917:1:55", + "nodeType": "VariableDeclaration", + "scope": 11852, + "src": "2909:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11822, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2909:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 11828, + "initialValue": { + "arguments": [ + { + "id": 11825, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11786, + "src": "2932:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 11826, + "name": "SIG_R_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11715, + "src": "2939:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11824, + "name": "_toBytes32", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11919, + "src": "2921:10:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (bytes memory,uint256) pure returns (bytes32)" + } + }, + "id": 11827, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2921:31:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2909:43:55" + }, + { + "assignments": [ + 11830 + ], + "declarations": [ + { + "constant": false, + "id": 11830, + "mutability": "mutable", + "name": "s", + "nameLocation": "2970:1:55", + "nodeType": "VariableDeclaration", + "scope": 11852, + "src": "2962:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11829, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2962:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 11835, + "initialValue": { + "arguments": [ + { + "id": 11832, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11786, + "src": "2985:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 11833, + "name": "SIG_S_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11720, + "src": "2992:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11831, + "name": "_toBytes32", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11919, + "src": "2974:10:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (bytes memory,uint256) pure returns (bytes32)" + } + }, + "id": 11834, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2974:31:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2962:43:55" + }, + { + "assignments": [ + 11837 + ], + "declarations": [ + { + "constant": false, + "id": 11837, + "mutability": "mutable", + "name": "v", + "nameLocation": "3021:1:55", + "nodeType": "VariableDeclaration", + "scope": 11852, + "src": "3015:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 11836, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3015:5:55", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "id": 11842, + "initialValue": { + "arguments": [ + { + "id": 11839, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11786, + "src": "3034:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 11840, + "name": "SIG_V_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11727, + "src": "3041:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11838, + "name": "_toUint8", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11886, + "src": "3025:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$", + "typeString": "function (bytes memory,uint256) pure returns (uint8)" + } + }, + "id": 11841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3025:29:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3015:39:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11844, + "name": "requestCID", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11805, + "src": "3078:10:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11845, + "name": "responseCID", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11807, + "src": "3090:11:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11846, + "name": "subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11809, + "src": "3103:20:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11847, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11823, + "src": "3125:1:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11848, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11830, + "src": "3128:1:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11849, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11837, + "src": "3131:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + ], + "id": 11843, + "name": "State", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11699, + "src": "3072:5:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_State_$11699_storage_ptr_$", + "typeString": "type(struct Attestation.State storage pointer)" + } + }, + "id": 11850, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3072:61:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "functionReturnParameters": 11791, + "id": 11851, + "nodeType": "Return", + "src": "3065:68:55" + } + ] + }, + "documentation": { + "id": 11784, + "nodeType": "StructuredDocumentation", + "src": "2202:113:55", + "text": " @dev Parse the bytes attestation into a struct from `_data`.\n @return Attestation struct" + }, + "id": 11853, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "parse", + "nameLocation": "2329:5:55", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11787, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11786, + "mutability": "mutable", + "name": "_data", + "nameLocation": "2348:5:55", + "nodeType": "VariableDeclaration", + "scope": 11853, + "src": "2335:18:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11785, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2335:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2334:20:55" + }, + "returnParameters": { + "id": 11791, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11790, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11853, + "src": "2378:12:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 11789, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11788, + "name": "State", + "nameLocations": [ + "2378:5:55" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "2378:5:55" + }, + "referencedDeclaration": 11699, + "src": "2378:5:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + } + ], + "src": "2377:14:55" + }, + "scope": 11920, + "src": "2320:820:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11885, + "nodeType": "Block", + "src": "3342:584:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11864, + "name": "_bytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11856, + "src": "3373:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3380:6:55", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "3373:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11866, + "name": "_start", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11858, + "src": "3390:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11867, + "name": "UINT8_BYTE_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11742, + "src": "3399:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3390:26:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3373:43:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "expression": { + "id": 11871, + "name": "_bytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11856, + "src": "3460:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11872, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3467:6:55", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "3460:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11875, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11873, + "name": "_start", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11858, + "src": "3475:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11874, + "name": "UINT8_BYTE_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11742, + "src": "3484:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3475:26:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11870, + "name": "AttestationInvalidBytesLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11751, + "src": "3430:29:55", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 11876, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3430:72:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11863, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3352:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3352:160:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11878, + "nodeType": "ExpressionStatement", + "src": "3352:160:55" + }, + { + "assignments": [ + 11880 + ], + "declarations": [ + { + "constant": false, + "id": 11880, + "mutability": "mutable", + "name": "tempUint", + "nameLocation": "3528:8:55", + "nodeType": "VariableDeclaration", + "scope": 11885, + "src": "3522:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 11879, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3522:5:55", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "id": 11881, + "nodeType": "VariableDeclarationStatement", + "src": "3522:14:55" + }, + { + "AST": { + "nativeSrc": "3612:282:55", + "nodeType": "YulBlock", + "src": "3612:282:55", + "statements": [ + { + "nativeSrc": "3836:48:55", + "nodeType": "YulAssignment", + "src": "3836:48:55", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_bytes", + "nativeSrc": "3862:6:55", + "nodeType": "YulIdentifier", + "src": "3862:6:55" + }, + { + "kind": "number", + "nativeSrc": "3870:3:55", + "nodeType": "YulLiteral", + "src": "3870:3:55", + "type": "", + "value": "0x1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3858:3:55", + "nodeType": "YulIdentifier", + "src": "3858:3:55" + }, + "nativeSrc": "3858:16:55", + "nodeType": "YulFunctionCall", + "src": "3858:16:55" + }, + { + "name": "_start", + "nativeSrc": "3876:6:55", + "nodeType": "YulIdentifier", + "src": "3876:6:55" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3854:3:55", + "nodeType": "YulIdentifier", + "src": "3854:3:55" + }, + "nativeSrc": "3854:29:55", + "nodeType": "YulFunctionCall", + "src": "3854:29:55" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3848:5:55", + "nodeType": "YulIdentifier", + "src": "3848:5:55" + }, + "nativeSrc": "3848:36:55", + "nodeType": "YulFunctionCall", + "src": "3848:36:55" + }, + "variableNames": [ + { + "name": "tempUint", + "nativeSrc": "3836:8:55", + "nodeType": "YulIdentifier", + "src": "3836:8:55" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 11856, + "isOffset": false, + "isSlot": false, + "src": "3862:6:55", + "valueSize": 1 + }, + { + "declaration": 11858, + "isOffset": false, + "isSlot": false, + "src": "3876:6:55", + "valueSize": 1 + }, + { + "declaration": 11880, + "isOffset": false, + "isSlot": false, + "src": "3836:8:55", + "valueSize": 1 + } + ], + "id": 11882, + "nodeType": "InlineAssembly", + "src": "3603:291:55" + }, + { + "expression": { + "id": 11883, + "name": "tempUint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11880, + "src": "3911:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "functionReturnParameters": 11862, + "id": 11884, + "nodeType": "Return", + "src": "3904:15:55" + } + ] + }, + "documentation": { + "id": 11854, + "nodeType": "StructuredDocumentation", + "src": "3146:107:55", + "text": " @dev Parse a uint8 from `_bytes` starting at offset `_start`.\n @return uint8 value" + }, + "id": 11886, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_toUint8", + "nameLocation": "3267:8:55", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11859, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11856, + "mutability": "mutable", + "name": "_bytes", + "nameLocation": "3289:6:55", + "nodeType": "VariableDeclaration", + "scope": 11886, + "src": "3276:19:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11855, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3276:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11858, + "mutability": "mutable", + "name": "_start", + "nameLocation": "3305:6:55", + "nodeType": "VariableDeclaration", + "scope": 11886, + "src": "3297:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11857, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3297:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3275:37:55" + }, + "returnParameters": { + "id": 11862, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11861, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11886, + "src": "3335:5:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 11860, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3335:5:55", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "3334:7:55" + }, + "scope": 11920, + "src": "3258:668:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 11918, + "nodeType": "Block", + "src": "4136:390:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 11897, + "name": "_bytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11889, + "src": "4167:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4174:6:55", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4167:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11901, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11899, + "name": "_start", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11891, + "src": "4184:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11900, + "name": "BYTES32_BYTE_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11745, + "src": "4193:19:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4184:28:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4167:45:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "expression": { + "id": 11904, + "name": "_bytes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11889, + "src": "4256:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4263:6:55", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4256:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11906, + "name": "_start", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11891, + "src": "4271:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 11907, + "name": "BYTES32_BYTE_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11745, + "src": "4280:19:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4271:28:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11903, + "name": "AttestationInvalidBytesLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11751, + "src": "4226:29:55", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 11909, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4226:74:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11896, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4146:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4146:164:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11911, + "nodeType": "ExpressionStatement", + "src": "4146:164:55" + }, + { + "assignments": [ + 11913 + ], + "declarations": [ + { + "constant": false, + "id": 11913, + "mutability": "mutable", + "name": "tempBytes32", + "nameLocation": "4328:11:55", + "nodeType": "VariableDeclaration", + "scope": 11918, + "src": "4320:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11912, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4320:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 11914, + "nodeType": "VariableDeclarationStatement", + "src": "4320:19:55" + }, + { + "AST": { + "nativeSrc": "4415:76:55", + "nodeType": "YulBlock", + "src": "4415:76:55", + "statements": [ + { + "nativeSrc": "4429:52:55", + "nodeType": "YulAssignment", + "src": "4429:52:55", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_bytes", + "nativeSrc": "4458:6:55", + "nodeType": "YulIdentifier", + "src": "4458:6:55" + }, + { + "kind": "number", + "nativeSrc": "4466:4:55", + "nodeType": "YulLiteral", + "src": "4466:4:55", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4454:3:55", + "nodeType": "YulIdentifier", + "src": "4454:3:55" + }, + "nativeSrc": "4454:17:55", + "nodeType": "YulFunctionCall", + "src": "4454:17:55" + }, + { + "name": "_start", + "nativeSrc": "4473:6:55", + "nodeType": "YulIdentifier", + "src": "4473:6:55" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4450:3:55", + "nodeType": "YulIdentifier", + "src": "4450:3:55" + }, + "nativeSrc": "4450:30:55", + "nodeType": "YulFunctionCall", + "src": "4450:30:55" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "4444:5:55", + "nodeType": "YulIdentifier", + "src": "4444:5:55" + }, + "nativeSrc": "4444:37:55", + "nodeType": "YulFunctionCall", + "src": "4444:37:55" + }, + "variableNames": [ + { + "name": "tempBytes32", + "nativeSrc": "4429:11:55", + "nodeType": "YulIdentifier", + "src": "4429:11:55" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 11889, + "isOffset": false, + "isSlot": false, + "src": "4458:6:55", + "valueSize": 1 + }, + { + "declaration": 11891, + "isOffset": false, + "isSlot": false, + "src": "4473:6:55", + "valueSize": 1 + }, + { + "declaration": 11913, + "isOffset": false, + "isSlot": false, + "src": "4429:11:55", + "valueSize": 1 + } + ], + "id": 11915, + "nodeType": "InlineAssembly", + "src": "4406:85:55" + }, + { + "expression": { + "id": 11916, + "name": "tempBytes32", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11913, + "src": "4508:11:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 11895, + "id": 11917, + "nodeType": "Return", + "src": "4501:18:55" + } + ] + }, + "documentation": { + "id": 11887, + "nodeType": "StructuredDocumentation", + "src": "3932:111:55", + "text": " @dev Parse a bytes32 from `_bytes` starting at offset `_start`.\n @return bytes32 value" + }, + "id": 11919, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_toBytes32", + "nameLocation": "4057:10:55", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11892, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11889, + "mutability": "mutable", + "name": "_bytes", + "nameLocation": "4081:6:55", + "nodeType": "VariableDeclaration", + "scope": 11919, + "src": "4068:19:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11888, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4068:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11891, + "mutability": "mutable", + "name": "_start", + "nameLocation": "4097:6:55", + "nodeType": "VariableDeclaration", + "scope": 11919, + "src": "4089:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11890, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4089:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4067:37:55" + }, + "returnParameters": { + "id": 11895, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11894, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 11919, + "src": "4127:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11893, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4127:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4126:9:55" + }, + "scope": 11920, + "src": "4048:478:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 11921, + "src": "152:4376:55", + "usedErrors": [ + 11751 + ], + "usedEvents": [] + } + ], + "src": "45:4484:55" + }, + "id": 55 + }, + "contracts/libraries/LegacyAllocation.sol": { + "ast": { + "absolutePath": "contracts/libraries/LegacyAllocation.sol", + "exportedSymbols": { + "LegacyAllocation": [ + 12086 + ] + }, + "id": 12087, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11922, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:56" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "LegacyAllocation", + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 11923, + "nodeType": "StructuredDocumentation", + "src": "70:93:56", + "text": " @title LegacyAllocation library\n @notice A library to handle legacy Allocations." + }, + "fullyImplemented": true, + "id": 12086, + "linearizedBaseContracts": [ + 12086 + ], + "name": "LegacyAllocation", + "nameLocation": "172:16:56", + "nodeType": "ContractDefinition", + "nodes": [ + { + "global": false, + "id": 11927, + "libraryName": { + "id": 11924, + "name": "LegacyAllocation", + "nameLocations": [ + "201:16:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 12086, + "src": "201:16:56" + }, + "nodeType": "UsingForDirective", + "src": "195:33:56", + "typeName": { + "id": 11926, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11925, + "name": "State", + "nameLocations": [ + "222:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "222:5:56" + }, + "referencedDeclaration": 11933, + "src": "222:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + } + }, + { + "canonicalName": "LegacyAllocation.State", + "documentation": { + "id": 11928, + "nodeType": "StructuredDocumentation", + "src": "234:307:56", + "text": " @notice Legacy allocation details\n @dev Note that we are only storing the indexer and subgraphDeploymentId. The main point of tracking legacy allocations\n is to prevent them from being re used on the Subgraph Service. We don't need to store the rest of the allocation details." + }, + "id": 11933, + "members": [ + { + "constant": false, + "id": 11930, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "577:7:56", + "nodeType": "VariableDeclaration", + "scope": 11933, + "src": "569:15:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11929, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "569:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11932, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "602:20:56", + "nodeType": "VariableDeclaration", + "scope": 11933, + "src": "594:28:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11931, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "594:7:56", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "name": "State", + "nameLocation": "553:5:56", + "nodeType": "StructDefinition", + "scope": 12086, + "src": "546:83:56", + "visibility": "public" + }, + { + "documentation": { + "id": 11934, + "nodeType": "StructuredDocumentation", + "src": "635:139:56", + "text": " @notice Thrown when attempting to migrate an allocation with an existing id\n @param allocationId The allocation id" + }, + "errorSelector": "81736271", + "id": 11938, + "name": "LegacyAllocationExists", + "nameLocation": "785:22:56", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11937, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11936, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "816:12:56", + "nodeType": "VariableDeclaration", + "scope": 11938, + "src": "808:20:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11935, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "808:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "807:22:56" + }, + "src": "779:51:56" + }, + { + "documentation": { + "id": 11939, + "nodeType": "StructuredDocumentation", + "src": "836:123:56", + "text": " @notice Thrown when trying to get a non-existent allocation\n @param allocationId The allocation id" + }, + "errorSelector": "40e1fd4a", + "id": 11943, + "name": "LegacyAllocationDoesNotExist", + "nameLocation": "970:28:56", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11942, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11941, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "1007:12:56", + "nodeType": "VariableDeclaration", + "scope": 11943, + "src": "999:20:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11940, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "999:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "998:22:56" + }, + "src": "964:57:56" + }, + { + "documentation": { + "id": 11944, + "nodeType": "StructuredDocumentation", + "src": "1027:146:56", + "text": " @notice Thrown when trying to migrate an allocation that has already been migrated\n @param allocationId The allocation id" + }, + "errorSelector": "2d3e5fb9", + "id": 11948, + "name": "LegacyAllocationAlreadyMigrated", + "nameLocation": "1184:31:56", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 11947, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11946, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "1224:12:56", + "nodeType": "VariableDeclaration", + "scope": 11948, + "src": "1216:20:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11945, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1216:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1215:22:56" + }, + "src": "1178:60:56" + }, + { + "body": { + "id": 11989, + "nodeType": "Block", + "src": "1904:250:56", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11969, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "1922:28:56", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "baseExpression": { + "id": 11964, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11954, + "src": "1923:4:56", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + } + }, + "id": 11966, + "indexExpression": { + "id": 11965, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11958, + "src": "1928:12:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1923:18:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage", + "typeString": "struct LegacyAllocation.State storage ref" + } + }, + "id": 11967, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1942:6:56", + "memberName": "exists", + "nodeType": "MemberAccess", + "referencedDeclaration": 12052, + "src": "1923:25:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11933_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11933_memory_ptr_$", + "typeString": "function (struct LegacyAllocation.State memory) pure returns (bool)" + } + }, + "id": 11968, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1923:27:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 11971, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11958, + "src": "1984:12:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11970, + "name": "LegacyAllocationAlreadyMigrated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11948, + "src": "1952:31:56", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 11972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1952:45:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 11963, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1914:7:56", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 11973, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1914:84:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11974, + "nodeType": "ExpressionStatement", + "src": "1914:84:56" + }, + { + "assignments": [ + 11977 + ], + "declarations": [ + { + "constant": false, + "id": 11977, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "2022:10:56", + "nodeType": "VariableDeclaration", + "scope": 11989, + "src": "2009:23:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State" + }, + "typeName": { + "id": 11976, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11975, + "name": "State", + "nameLocations": [ + "2009:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "2009:5:56" + }, + "referencedDeclaration": 11933, + "src": "2009:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 11982, + "initialValue": { + "arguments": [ + { + "id": 11979, + "name": "indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11956, + "src": "2052:7:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 11980, + "name": "subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11960, + "src": "2083:20:56", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 11978, + "name": "State", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11933, + "src": "2035:5:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_State_$11933_storage_ptr_$", + "typeString": "type(struct LegacyAllocation.State storage pointer)" + } + }, + "id": 11981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "2043:7:56", + "2061:20:56" + ], + "names": [ + "indexer", + "subgraphDeploymentId" + ], + "nodeType": "FunctionCall", + "src": "2035:71:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2009:97:56" + }, + { + "expression": { + "id": 11987, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11983, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11954, + "src": "2116:4:56", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + } + }, + "id": 11985, + "indexExpression": { + "id": 11984, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11958, + "src": "2121:12:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2116:18:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage", + "typeString": "struct LegacyAllocation.State storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11986, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11977, + "src": "2137:10:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State memory" + } + }, + "src": "2116:31:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage", + "typeString": "struct LegacyAllocation.State storage ref" + } + }, + "id": 11988, + "nodeType": "ExpressionStatement", + "src": "2116:31:56" + } + ] + }, + "documentation": { + "id": 11949, + "nodeType": "StructuredDocumentation", + "src": "1244:482:56", + "text": " @notice Migrate a legacy allocation\n @dev Requirements:\n - The allocation must not have been previously migrated\n @param self The legacy allocation list mapping\n @param indexer The indexer that owns the allocation\n @param allocationId The allocation id\n @param subgraphDeploymentId The subgraph deployment id the allocation is for\n @custom:error LegacyAllocationAlreadyMigrated if the allocation has already been migrated" + }, + "id": 11990, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "migrate", + "nameLocation": "1740:7:56", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11961, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11954, + "mutability": "mutable", + "name": "self", + "nameLocation": "1791:4:56", + "nodeType": "VariableDeclaration", + "scope": 11990, + "src": "1757:38:56", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "typeName": { + "id": 11953, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 11950, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1765:7:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1757:25:56", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 11952, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11951, + "name": "State", + "nameLocations": [ + "1776:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "1776:5:56" + }, + "referencedDeclaration": 11933, + "src": "1776:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11956, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "1813:7:56", + "nodeType": "VariableDeclaration", + "scope": 11990, + "src": "1805:15:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11955, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1805:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11958, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "1838:12:56", + "nodeType": "VariableDeclaration", + "scope": 11990, + "src": "1830:20:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11957, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1830:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11960, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "1868:20:56", + "nodeType": "VariableDeclaration", + "scope": 11990, + "src": "1860:28:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11959, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1860:7:56", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1747:147:56" + }, + "returnParameters": { + "id": 11962, + "nodeType": "ParameterList", + "parameters": [], + "src": "1904:0:56" + }, + "scope": 12086, + "src": "1731:423:56", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12009, + "nodeType": "Block", + "src": "2426:48:56", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12005, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11996, + "src": "2448:4:56", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + } + }, + { + "id": 12006, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11998, + "src": "2454:12:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 12004, + "name": "_get", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12085, + "src": "2443:4:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$_t_address_$returns$_t_struct$_State_$11933_storage_ptr_$", + "typeString": "function (mapping(address => struct LegacyAllocation.State storage ref),address) view returns (struct LegacyAllocation.State storage pointer)" + } + }, + "id": 12007, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2443:24:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State storage pointer" + } + }, + "functionReturnParameters": 12003, + "id": 12008, + "nodeType": "Return", + "src": "2436:31:56" + } + ] + }, + "documentation": { + "id": 11991, + "nodeType": "StructuredDocumentation", + "src": "2160:149:56", + "text": " @notice Get a legacy allocation\n @param self The legacy allocation list mapping\n @param allocationId The allocation id" + }, + "id": 12010, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "get", + "nameLocation": "2323:3:56", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11999, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11996, + "mutability": "mutable", + "name": "self", + "nameLocation": "2361:4:56", + "nodeType": "VariableDeclaration", + "scope": 12010, + "src": "2327:38:56", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "typeName": { + "id": 11995, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 11992, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2335:7:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2327:25:56", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 11994, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 11993, + "name": "State", + "nameLocations": [ + "2346:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "2346:5:56" + }, + "referencedDeclaration": 11933, + "src": "2346:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11998, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "2375:12:56", + "nodeType": "VariableDeclaration", + "scope": 12010, + "src": "2367:20:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11997, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2367:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2326:62:56" + }, + "returnParameters": { + "id": 12003, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12002, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12010, + "src": "2412:12:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State" + }, + "typeName": { + "id": 12001, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12000, + "name": "State", + "nameLocations": [ + "2412:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "2412:5:56" + }, + "referencedDeclaration": 11933, + "src": "2412:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "2411:14:56" + }, + "scope": 12086, + "src": "2314:160:56", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12033, + "nodeType": "Block", + "src": "2747:92:56", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "2765:28:56", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "baseExpression": { + "id": 12022, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12016, + "src": "2766:4:56", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + } + }, + "id": 12024, + "indexExpression": { + "id": 12023, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12018, + "src": "2771:12:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2766:18:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage", + "typeString": "struct LegacyAllocation.State storage ref" + } + }, + "id": 12025, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2785:6:56", + "memberName": "exists", + "nodeType": "MemberAccess", + "referencedDeclaration": 12052, + "src": "2766:25:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11933_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11933_memory_ptr_$", + "typeString": "function (struct LegacyAllocation.State memory) pure returns (bool)" + } + }, + "id": 12026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2766:27:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 12029, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12018, + "src": "2818:12:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 12028, + "name": "LegacyAllocationExists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11938, + "src": "2795:22:56", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 12030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2795:36:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 12021, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2757:7:56", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 12031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2757:75:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12032, + "nodeType": "ExpressionStatement", + "src": "2757:75:56" + } + ] + }, + "documentation": { + "id": 12011, + "nodeType": "StructuredDocumentation", + "src": "2480:162:56", + "text": " @notice Revert if a legacy allocation exists\n @param self The legacy allocation list mapping\n @param allocationId The allocation id" + }, + "id": 12034, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "revertIfExists", + "nameLocation": "2656:14:56", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12019, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12016, + "mutability": "mutable", + "name": "self", + "nameLocation": "2705:4:56", + "nodeType": "VariableDeclaration", + "scope": 12034, + "src": "2671:38:56", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "typeName": { + "id": 12015, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 12012, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2679:7:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2671:25:56", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 12014, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12013, + "name": "State", + "nameLocations": [ + "2690:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "2690:5:56" + }, + "referencedDeclaration": 11933, + "src": "2690:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12018, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "2719:12:56", + "nodeType": "VariableDeclaration", + "scope": 12034, + "src": "2711:20:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12017, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2711:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2670:62:56" + }, + "returnParameters": { + "id": 12020, + "nodeType": "ParameterList", + "parameters": [], + "src": "2747:0:56" + }, + "scope": 12086, + "src": "2647:192:56", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12051, + "nodeType": "Block", + "src": "3017:50:56", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 12049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 12043, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12038, + "src": "3034:4:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State memory" + } + }, + "id": 12044, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3039:7:56", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11930, + "src": "3034:12:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12047, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3058:1:56", + "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": 12046, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3050:7:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12045, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3050:7:56", + "typeDescriptions": {} + } + }, + "id": 12048, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3050:10:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3034:26:56", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 12042, + "id": 12050, + "nodeType": "Return", + "src": "3027:33:56" + } + ] + }, + "documentation": { + "id": 12035, + "nodeType": "StructuredDocumentation", + "src": "2845:103:56", + "text": " @notice Check if a legacy allocation exists\n @param self The legacy allocation" + }, + "id": 12052, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "exists", + "nameLocation": "2962:6:56", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12039, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12038, + "mutability": "mutable", + "name": "self", + "nameLocation": "2982:4:56", + "nodeType": "VariableDeclaration", + "scope": 12052, + "src": "2969:17:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State" + }, + "typeName": { + "id": 12037, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12036, + "name": "State", + "nameLocations": [ + "2969:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "2969:5:56" + }, + "referencedDeclaration": 11933, + "src": "2969:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "2968:19:56" + }, + "returnParameters": { + "id": 12042, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12041, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12052, + "src": "3011:4:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 12040, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3011:4:56", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3010:6:56" + }, + "scope": 12086, + "src": "2953:114:56", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12084, + "nodeType": "Block", + "src": "3340:171:56", + "statements": [ + { + "assignments": [ + 12068 + ], + "declarations": [ + { + "constant": false, + "id": 12068, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "3364:10:56", + "nodeType": "VariableDeclaration", + "scope": 12084, + "src": "3350:24:56", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + }, + "typeName": { + "id": 12067, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12066, + "name": "State", + "nameLocations": [ + "3350:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "3350:5:56" + }, + "referencedDeclaration": 11933, + "src": "3350:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 12072, + "initialValue": { + "baseExpression": { + "id": 12069, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12058, + "src": "3377:4:56", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + } + }, + "id": 12071, + "indexExpression": { + "id": 12070, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12060, + "src": "3382:12:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3377:18:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage", + "typeString": "struct LegacyAllocation.State storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3350:45:56" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12074, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12068, + "src": "3413:10:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State storage pointer" + } + }, + "id": 12075, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3424:6:56", + "memberName": "exists", + "nodeType": "MemberAccess", + "referencedDeclaration": 12052, + "src": "3413:17:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11933_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11933_memory_ptr_$", + "typeString": "function (struct LegacyAllocation.State memory) pure returns (bool)" + } + }, + "id": 12076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3413:19:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 12078, + "name": "allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12060, + "src": "3463:12:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 12077, + "name": "LegacyAllocationDoesNotExist", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11943, + "src": "3434:28:56", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 12079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3434:42:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 12073, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3405:7:56", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 12080, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3405:72:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12081, + "nodeType": "ExpressionStatement", + "src": "3405:72:56" + }, + { + "expression": { + "id": 12082, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12068, + "src": "3494:10:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State storage pointer" + } + }, + "functionReturnParameters": 12065, + "id": 12083, + "nodeType": "Return", + "src": "3487:17:56" + } + ] + }, + "documentation": { + "id": 12053, + "nodeType": "StructuredDocumentation", + "src": "3073:149:56", + "text": " @notice Get a legacy allocation\n @param self The legacy allocation list mapping\n @param allocationId The allocation id" + }, + "id": 12085, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_get", + "nameLocation": "3236:4:56", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12061, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12058, + "mutability": "mutable", + "name": "self", + "nameLocation": "3275:4:56", + "nodeType": "VariableDeclaration", + "scope": 12085, + "src": "3241:38:56", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "typeName": { + "id": 12057, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 12054, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3249:7:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3241:25:56", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 12056, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12055, + "name": "State", + "nameLocations": [ + "3260:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "3260:5:56" + }, + "referencedDeclaration": 11933, + "src": "3260:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12060, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "3289:12:56", + "nodeType": "VariableDeclaration", + "scope": 12085, + "src": "3281:20:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12059, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3281:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3240:62:56" + }, + "returnParameters": { + "id": 12065, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12064, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12085, + "src": "3325:13:56", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + }, + "typeName": { + "id": 12063, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12062, + "name": "State", + "nameLocations": [ + "3325:5:56" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "3325:5:56" + }, + "referencedDeclaration": 11933, + "src": "3325:5:56", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "3324:15:56" + }, + "scope": 12086, + "src": "3227:284:56", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 12087, + "src": "164:3349:56", + "usedErrors": [ + 11938, + 11943, + 11948 + ], + "usedEvents": [] + } + ], + "src": "45:3469:56" + }, + "id": 56 + }, + "contracts/utilities/AllocationManager.sol": { + "ast": { + "absolutePath": "contracts/utilities/AllocationManager.sol", + "exportedSymbols": { + "Allocation": [ + 11674 + ], + "AllocationManager": [ + 13030 + ], + "AllocationManagerV1Storage": [ + 13072 + ], + "ECDSA": [ + 6730 + ], + "EIP712Upgradeable": [ + 5771 + ], + "GraphDirectory": [ + 4653 + ], + "IGraphPayments": [ + 2211 + ], + "IGraphToken": [ + 518 + ], + "IHorizonStakingTypes": [ + 3796 + ], + "LegacyAllocation": [ + 12086 + ], + "PPMMath": [ + 4262 + ], + "ProvisionTracker": [ + 1555 + ], + "TokenUtils": [ + 600 + ] + }, + "id": 13031, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 12088, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:57" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "file": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", + "id": 12090, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 2212, + "src": "70:96:57", + "symbolAliases": [ + { + "foreign": { + "id": 12089, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "79:14:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "file": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", + "id": 12092, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 519, + "src": "167:87:57", + "symbolAliases": [ + { + "foreign": { + "id": 12091, + "name": "IGraphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 518, + "src": "176:11:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", + "file": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", + "id": 12094, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 3797, + "src": "255:117:57", + "symbolAliases": [ + { + "foreign": { + "id": 12093, + "name": "IHorizonStakingTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3796, + "src": "264:20:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", + "file": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", + "id": 12096, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 4654, + "src": "374:95:57", + "symbolAliases": [ + { + "foreign": { + "id": 12095, + "name": "GraphDirectory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4653, + "src": "383:14:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/utilities/AllocationManagerStorage.sol", + "file": "./AllocationManagerStorage.sol", + "id": 12098, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 13073, + "src": "470:76:57", + "symbolAliases": [ + { + "foreign": { + "id": 12097, + "name": "AllocationManagerV1Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13072, + "src": "479:26:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", + "file": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", + "id": 12100, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 601, + "src": "548:85:57", + "symbolAliases": [ + { + "foreign": { + "id": 12099, + "name": "TokenUtils", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 600, + "src": "557:10:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "id": 12102, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 6731, + "src": "634:77:57", + "symbolAliases": [ + { + "foreign": { + "id": 12101, + "name": "ECDSA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6730, + "src": "643:5:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol", + "id": 12104, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 5772, + "src": "712:113:57", + "symbolAliases": [ + { + "foreign": { + "id": 12103, + "name": "EIP712Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5771, + "src": "721:17:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/Allocation.sol", + "file": "../libraries/Allocation.sol", + "id": 12106, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 11675, + "src": "826:57:57", + "symbolAliases": [ + { + "foreign": { + "id": 12105, + "name": "Allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11674, + "src": "835:10:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/LegacyAllocation.sol", + "file": "../libraries/LegacyAllocation.sol", + "id": 12108, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 12087, + "src": "884:69:57", + "symbolAliases": [ + { + "foreign": { + "id": 12107, + "name": "LegacyAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12086, + "src": "893:16:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", + "file": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", + "id": 12110, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 4263, + "src": "954:81:57", + "symbolAliases": [ + { + "foreign": { + "id": 12109, + "name": "PPMMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4262, + "src": "963:7:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol", + "file": "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol", + "id": 12112, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13031, + "sourceUnit": 1556, + "src": "1036:112:57", + "symbolAliases": [ + { + "foreign": { + "id": 12111, + "name": "ProvisionTracker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1555, + "src": "1045:16:57", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 12114, + "name": "EIP712Upgradeable", + "nameLocations": [ + "1446:17:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5771, + "src": "1446:17:57" + }, + "id": 12115, + "nodeType": "InheritanceSpecifier", + "src": "1446:17:57" + }, + { + "baseName": { + "id": 12116, + "name": "GraphDirectory", + "nameLocations": [ + "1465:14:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4653, + "src": "1465:14:57" + }, + "id": 12117, + "nodeType": "InheritanceSpecifier", + "src": "1465:14:57" + }, + { + "baseName": { + "id": 12118, + "name": "AllocationManagerV1Storage", + "nameLocations": [ + "1481:26:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 13072, + "src": "1481:26:57" + }, + "id": 12119, + "nodeType": "InheritanceSpecifier", + "src": "1481:26:57" + } + ], + "canonicalName": "AllocationManager", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 12113, + "nodeType": "StructuredDocumentation", + "src": "1150:256:57", + "text": " @title AllocationManager contract\n @notice A helper contract implementing allocation lifecycle management.\n Allows opening, resizing, and closing allocations, as well as collecting indexing rewards by presenting a Proof\n of Indexing (POI)." + }, + "fullyImplemented": true, + "id": 13030, + "linearizedBaseContracts": [ + 13030, + 13072, + 4653, + 5771, + 5796, + 5102 + ], + "name": "AllocationManager", + "nameLocation": "1425:17:57", + "nodeType": "ContractDefinition", + "nodes": [ + { + "global": false, + "id": 12124, + "libraryName": { + "id": 12120, + "name": "ProvisionTracker", + "nameLocations": [ + "1520:16:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1555, + "src": "1520:16:57" + }, + "nodeType": "UsingForDirective", + "src": "1514:55:57", + "typeName": { + "id": 12123, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 12121, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1549:7:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1541:27:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 12122, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1560:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + { + "global": false, + "id": 12130, + "libraryName": { + "id": 12125, + "name": "Allocation", + "nameLocations": [ + "1580:10:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11674, + "src": "1580:10:57" + }, + "nodeType": "UsingForDirective", + "src": "1574:58:57", + "typeName": { + "id": 12129, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 12126, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1603:7:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1595:36:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 12128, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12127, + "name": "Allocation.State", + "nameLocations": [ + "1614:10:57", + "1625:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "1614:16:57" + }, + "referencedDeclaration": 11307, + "src": "1614:16:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + } + }, + { + "global": false, + "id": 12134, + "libraryName": { + "id": 12131, + "name": "Allocation", + "nameLocations": [ + "1643:10:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11674, + "src": "1643:10:57" + }, + "nodeType": "UsingForDirective", + "src": "1637:38:57", + "typeName": { + "id": 12133, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12132, + "name": "Allocation.State", + "nameLocations": [ + "1658:10:57", + "1669:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "1658:16:57" + }, + "referencedDeclaration": 11307, + "src": "1658:16:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + { + "global": false, + "id": 12140, + "libraryName": { + "id": 12135, + "name": "LegacyAllocation", + "nameLocations": [ + "1686:16:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 12086, + "src": "1686:16:57" + }, + "nodeType": "UsingForDirective", + "src": "1680:70:57", + "typeName": { + "id": 12139, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 12136, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1715:7:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1707:42:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 12138, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12137, + "name": "LegacyAllocation.State", + "nameLocations": [ + "1726:16:57", + "1743:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "1726:22:57" + }, + "referencedDeclaration": 11933, + "src": "1726:22:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + } + } + }, + { + "global": false, + "id": 12143, + "libraryName": { + "id": 12141, + "name": "PPMMath", + "nameLocations": [ + "1761:7:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4262, + "src": "1761:7:57" + }, + "nodeType": "UsingForDirective", + "src": "1755:26:57", + "typeName": { + "id": 12142, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1773:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "global": false, + "id": 12147, + "libraryName": { + "id": 12144, + "name": "TokenUtils", + "nameLocations": [ + "1792:10:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 600, + "src": "1792:10:57" + }, + "nodeType": "UsingForDirective", + "src": "1786:33:57", + "typeName": { + "id": 12146, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12145, + "name": "IGraphToken", + "nameLocations": [ + "1807:11:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 518, + "src": "1807:11:57" + }, + "referencedDeclaration": 518, + "src": "1807:11:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + } + }, + { + "constant": true, + "documentation": { + "id": 12148, + "nodeType": "StructuredDocumentation", + "src": "1825:44:57", + "text": "@dev EIP712 typehash for allocation proof" + }, + "id": 12153, + "mutability": "constant", + "name": "EIP712_ALLOCATION_PROOF_TYPEHASH", + "nameLocation": "1899:32:57", + "nodeType": "VariableDeclaration", + "scope": 13030, + "src": "1874:136:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12149, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1874:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "416c6c6f636174696f6e496450726f6f66286164647265737320696e64657865722c6164647265737320616c6c6f636174696f6e496429", + "id": 12151, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1952:57:57", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f74673", + "typeString": "literal_string \"AllocationIdProof(address indexer,address allocationId)\"" + }, + "value": "AllocationIdProof(address indexer,address allocationId)" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f74673", + "typeString": "literal_string \"AllocationIdProof(address indexer,address allocationId)\"" + } + ], + "id": 12150, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1942:9:57", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 12152, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1942:68:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "documentation": { + "id": 12154, + "nodeType": "StructuredDocumentation", + "src": "2017:294:57", + "text": " @notice Emitted when an indexer creates an allocation\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment\n @param tokens The amount of tokens allocated" + }, + "eventSelector": "3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf2", + "id": 12164, + "name": "AllocationCreated", + "nameLocation": "2322:17:57", + "nodeType": "EventDefinition", + "parameters": { + "id": 12163, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12156, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "2365:7:57", + "nodeType": "VariableDeclaration", + "scope": 12164, + "src": "2349:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12155, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2349:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12158, + "indexed": true, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "2398:12:57", + "nodeType": "VariableDeclaration", + "scope": 12164, + "src": "2382:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12157, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2382:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12160, + "indexed": true, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "2436:20:57", + "nodeType": "VariableDeclaration", + "scope": 12164, + "src": "2420:36:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12159, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2420:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12162, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "2474:6:57", + "nodeType": "VariableDeclaration", + "scope": 12164, + "src": "2466:14:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12161, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2466:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2339:147:57" + }, + "src": "2316:171:57" + }, + { + "anonymous": false, + "documentation": { + "id": 12165, + "nodeType": "StructuredDocumentation", + "src": "2493:570:57", + "text": " @notice Emitted when an indexer collects indexing rewards for an allocation\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment\n @param tokensRewards The amount of tokens collected\n @param tokensIndexerRewards The amount of tokens collected for the indexer\n @param tokensDelegationRewards The amount of tokens collected for delegators\n @param poi The POI presented\n @param currentEpoch The current epoch" + }, + "eventSelector": "7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e31", + "id": 12183, + "name": "IndexingRewardsCollected", + "nameLocation": "3074:24:57", + "nodeType": "EventDefinition", + "parameters": { + "id": 12182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12167, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "3124:7:57", + "nodeType": "VariableDeclaration", + "scope": 12183, + "src": "3108:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12166, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3108:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12169, + "indexed": true, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "3157:12:57", + "nodeType": "VariableDeclaration", + "scope": 12183, + "src": "3141:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12168, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3141:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12171, + "indexed": true, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "3195:20:57", + "nodeType": "VariableDeclaration", + "scope": 12183, + "src": "3179:36:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12170, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3179:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12173, + "indexed": false, + "mutability": "mutable", + "name": "tokensRewards", + "nameLocation": "3233:13:57", + "nodeType": "VariableDeclaration", + "scope": 12183, + "src": "3225:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12172, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3225:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12175, + "indexed": false, + "mutability": "mutable", + "name": "tokensIndexerRewards", + "nameLocation": "3264:20:57", + "nodeType": "VariableDeclaration", + "scope": 12183, + "src": "3256:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12174, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3256:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12177, + "indexed": false, + "mutability": "mutable", + "name": "tokensDelegationRewards", + "nameLocation": "3302:23:57", + "nodeType": "VariableDeclaration", + "scope": 12183, + "src": "3294:31:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12176, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3294:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12179, + "indexed": false, + "mutability": "mutable", + "name": "poi", + "nameLocation": "3343:3:57", + "nodeType": "VariableDeclaration", + "scope": 12183, + "src": "3335:11:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12178, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3335:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12181, + "indexed": false, + "mutability": "mutable", + "name": "currentEpoch", + "nameLocation": "3364:12:57", + "nodeType": "VariableDeclaration", + "scope": 12183, + "src": "3356:20:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12180, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3356:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3098:284:57" + }, + "src": "3068:315:57" + }, + { + "anonymous": false, + "documentation": { + "id": 12184, + "nodeType": "StructuredDocumentation", + "src": "3389:360:57", + "text": " @notice Emitted when an indexer resizes an allocation\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment\n @param newTokens The new amount of tokens allocated\n @param oldTokens The old amount of tokens allocated" + }, + "eventSelector": "6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f", + "id": 12196, + "name": "AllocationResized", + "nameLocation": "3760:17:57", + "nodeType": "EventDefinition", + "parameters": { + "id": 12195, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12186, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "3803:7:57", + "nodeType": "VariableDeclaration", + "scope": 12196, + "src": "3787:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12185, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3787:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12188, + "indexed": true, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "3836:12:57", + "nodeType": "VariableDeclaration", + "scope": 12196, + "src": "3820:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12187, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3820:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12190, + "indexed": true, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "3874:20:57", + "nodeType": "VariableDeclaration", + "scope": 12196, + "src": "3858:36:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12189, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3858:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12192, + "indexed": false, + "mutability": "mutable", + "name": "newTokens", + "nameLocation": "3912:9:57", + "nodeType": "VariableDeclaration", + "scope": 12196, + "src": "3904:17:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12191, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3904:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12194, + "indexed": false, + "mutability": "mutable", + "name": "oldTokens", + "nameLocation": "3939:9:57", + "nodeType": "VariableDeclaration", + "scope": 12196, + "src": "3931:17:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12193, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3931:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3777:177:57" + }, + "src": "3754:201:57" + }, + { + "anonymous": false, + "documentation": { + "id": 12197, + "nodeType": "StructuredDocumentation", + "src": "3961:290:57", + "text": " @dev Emitted when an indexer closes an allocation\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment\n @param tokens The amount of tokens allocated" + }, + "eventSelector": "663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b", + "id": 12207, + "name": "AllocationClosed", + "nameLocation": "4262:16:57", + "nodeType": "EventDefinition", + "parameters": { + "id": 12206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12199, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "4304:7:57", + "nodeType": "VariableDeclaration", + "scope": 12207, + "src": "4288:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12198, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4288:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12201, + "indexed": true, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "4337:12:57", + "nodeType": "VariableDeclaration", + "scope": 12207, + "src": "4321:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12200, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4321:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12203, + "indexed": true, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "4375:20:57", + "nodeType": "VariableDeclaration", + "scope": 12207, + "src": "4359:36:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12202, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4359:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12205, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "4413:6:57", + "nodeType": "VariableDeclaration", + "scope": 12207, + "src": "4405:14:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12204, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4405:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4278:147:57" + }, + "src": "4256:170:57" + }, + { + "anonymous": false, + "documentation": { + "id": 12208, + "nodeType": "StructuredDocumentation", + "src": "4432:267:57", + "text": " @notice Emitted when a legacy allocation is migrated into the subgraph service\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment" + }, + "eventSelector": "d54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e19", + "id": 12216, + "name": "LegacyAllocationMigrated", + "nameLocation": "4710:24:57", + "nodeType": "EventDefinition", + "parameters": { + "id": 12215, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12210, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "4760:7:57", + "nodeType": "VariableDeclaration", + "scope": 12216, + "src": "4744:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12209, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4744:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12212, + "indexed": true, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "4793:12:57", + "nodeType": "VariableDeclaration", + "scope": 12216, + "src": "4777:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12211, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4777:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12214, + "indexed": true, + "mutability": "mutable", + "name": "subgraphDeploymentId", + "nameLocation": "4831:20:57", + "nodeType": "VariableDeclaration", + "scope": 12216, + "src": "4815:36:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12213, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4815:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4734:123:57" + }, + "src": "4704:154:57" + }, + { + "anonymous": false, + "documentation": { + "id": 12217, + "nodeType": "StructuredDocumentation", + "src": "4864:222:57", + "text": " @notice Emitted when an indexer sets a new indexing rewards destination\n @param indexer The address of the indexer\n @param rewardsDestination The address where indexing rewards should be sent" + }, + "eventSelector": "3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b31", + "id": 12223, + "name": "RewardsDestinationSet", + "nameLocation": "5097:21:57", + "nodeType": "EventDefinition", + "parameters": { + "id": 12222, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12219, + "indexed": true, + "mutability": "mutable", + "name": "indexer", + "nameLocation": "5135:7:57", + "nodeType": "VariableDeclaration", + "scope": 12223, + "src": "5119:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12218, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5119:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12221, + "indexed": true, + "mutability": "mutable", + "name": "rewardsDestination", + "nameLocation": "5160:18:57", + "nodeType": "VariableDeclaration", + "scope": 12223, + "src": "5144:34:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12220, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5144:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5118:61:57" + }, + "src": "5091:89:57" + }, + { + "anonymous": false, + "documentation": { + "id": 12224, + "nodeType": "StructuredDocumentation", + "src": "5186:139:57", + "text": " @notice Emitted when the maximum POI staleness is updated\n @param maxPOIStaleness The max POI staleness in seconds" + }, + "eventSelector": "21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba", + "id": 12228, + "name": "MaxPOIStalenessSet", + "nameLocation": "5336:18:57", + "nodeType": "EventDefinition", + "parameters": { + "id": 12227, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12226, + "indexed": false, + "mutability": "mutable", + "name": "maxPOIStaleness", + "nameLocation": "5363:15:57", + "nodeType": "VariableDeclaration", + "scope": 12228, + "src": "5355:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12225, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5355:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5354:25:57" + }, + "src": "5330:50:57" + }, + { + "documentation": { + "id": 12229, + "nodeType": "StructuredDocumentation", + "src": "5386:248:57", + "text": " @notice Thrown when an allocation proof is invalid\n Both `signer` and `allocationId` should match for a valid proof.\n @param signer The address that signed the proof\n @param allocationId The id of the allocation" + }, + "errorSelector": "8c5b935d", + "id": 12235, + "name": "AllocationManagerInvalidAllocationProof", + "nameLocation": "5645:39:57", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 12234, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12231, + "mutability": "mutable", + "name": "signer", + "nameLocation": "5693:6:57", + "nodeType": "VariableDeclaration", + "scope": 12235, + "src": "5685:14:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12230, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5685:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12233, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "5709:12:57", + "nodeType": "VariableDeclaration", + "scope": 12235, + "src": "5701:20:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12232, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5701:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5684:38:57" + }, + "src": "5639:84:57" + }, + { + "documentation": { + "id": 12236, + "nodeType": "StructuredDocumentation", + "src": "5729:99:57", + "text": " @notice Thrown when attempting to create an allocation with a zero allocation id" + }, + "errorSelector": "9ffbebde", + "id": 12238, + "name": "AllocationManagerInvalidZeroAllocationId", + "nameLocation": "5839:40:57", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 12237, + "nodeType": "ParameterList", + "parameters": [], + "src": "5879:2:57" + }, + "src": "5833:49:57" + }, + { + "documentation": { + "id": 12239, + "nodeType": "StructuredDocumentation", + "src": "5888:153:57", + "text": " @notice Thrown when attempting to collect indexing rewards on a closed allocationl\n @param allocationId The id of the allocation" + }, + "errorSelector": "1eb5ff95", + "id": 12243, + "name": "AllocationManagerAllocationClosed", + "nameLocation": "6052:33:57", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 12242, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12241, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "6094:12:57", + "nodeType": "VariableDeclaration", + "scope": 12243, + "src": "6086:20:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12240, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6086:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6085:22:57" + }, + "src": "6046:62:57" + }, + { + "documentation": { + "id": 12244, + "nodeType": "StructuredDocumentation", + "src": "6114:186:57", + "text": " @notice Thrown when attempting to resize an allocation with the same size\n @param allocationId The id of the allocation\n @param tokens The amount of tokens" + }, + "errorSelector": "f32518cd", + "id": 12250, + "name": "AllocationManagerAllocationSameSize", + "nameLocation": "6311:35:57", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 12249, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12246, + "mutability": "mutable", + "name": "allocationId", + "nameLocation": "6355:12:57", + "nodeType": "VariableDeclaration", + "scope": 12250, + "src": "6347:20:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12245, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6347:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12248, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "6377:6:57", + "nodeType": "VariableDeclaration", + "scope": 12250, + "src": "6369:14:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12247, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6369:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6346:38:57" + }, + "src": "6305:80:57" + }, + { + "body": { + "id": 12270, + "nodeType": "Block", + "src": "6626:108:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12261, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12253, + "src": "6650:5:57", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 12262, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12255, + "src": "6657:8:57", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 12260, + "name": "__EIP712_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5484, + "src": "6636:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory,string memory)" + } + }, + "id": 12263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6636:30:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12264, + "nodeType": "ExpressionStatement", + "src": "6636:30:57" + }, + { + "expression": { + "arguments": [ + { + "id": 12266, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12253, + "src": "6711:5:57", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 12267, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12255, + "src": "6718:8:57", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 12265, + "name": "__AllocationManager_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12282, + "src": "6676:34:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory,string memory)" + } + }, + "id": 12268, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6676:51:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12269, + "nodeType": "ExpressionStatement", + "src": "6676:51:57" + } + ] + }, + "documentation": { + "id": 12251, + "nodeType": "StructuredDocumentation", + "src": "6391:72:57", + "text": " @notice Initializes the contract and parent contracts" + }, + "id": 12271, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 12258, + "kind": "modifierInvocation", + "modifierName": { + "id": 12257, + "name": "onlyInitializing", + "nameLocations": [ + "6609:16:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "6609:16:57" + }, + "nodeType": "ModifierInvocation", + "src": "6609:16:57" + } + ], + "name": "__AllocationManager_init", + "nameLocation": "6530:24:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12256, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12253, + "mutability": "mutable", + "name": "_name", + "nameLocation": "6569:5:57", + "nodeType": "VariableDeclaration", + "scope": 12271, + "src": "6555:19:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 12252, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6555:6:57", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12255, + "mutability": "mutable", + "name": "_version", + "nameLocation": "6590:8:57", + "nodeType": "VariableDeclaration", + "scope": 12271, + "src": "6576:22:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 12254, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6576:6:57", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "6554:45:57" + }, + "returnParameters": { + "id": 12259, + "nodeType": "ParameterList", + "parameters": [], + "src": "6626:0:57" + }, + "scope": 13030, + "src": "6521:213:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12281, + "nodeType": "Block", + "src": "6986:2:57", + "statements": [] + }, + "documentation": { + "id": 12272, + "nodeType": "StructuredDocumentation", + "src": "6740:51:57", + "text": " @notice Initializes the contract" + }, + "id": 12282, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 12279, + "kind": "modifierInvocation", + "modifierName": { + "id": 12278, + "name": "onlyInitializing", + "nameLocations": [ + "6969:16:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "6969:16:57" + }, + "nodeType": "ModifierInvocation", + "src": "6969:16:57" + } + ], + "name": "__AllocationManager_init_unchained", + "nameLocation": "6858:34:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12277, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12274, + "mutability": "mutable", + "name": "_name", + "nameLocation": "6916:5:57", + "nodeType": "VariableDeclaration", + "scope": 12282, + "src": "6902:19:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 12273, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6902:6:57", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12276, + "mutability": "mutable", + "name": "_version", + "nameLocation": "6945:8:57", + "nodeType": "VariableDeclaration", + "scope": 12282, + "src": "6931:22:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 12275, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6931:6:57", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "6892:67:57" + }, + "returnParameters": { + "id": 12280, + "nodeType": "ParameterList", + "parameters": [], + "src": "6986:0:57" + }, + "scope": 13030, + "src": "6849:139:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12306, + "nodeType": "Block", + "src": "7612:177:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12295, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12285, + "src": "7648:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12296, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12287, + "src": "7658:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12297, + "name": "_subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12289, + "src": "7673:21:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 12292, + "name": "legacyAllocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13048, + "src": "7622:17:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + } + }, + "id": 12294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7640:7:57", + "memberName": "migrate", + "nodeType": "MemberAccess", + "referencedDeclaration": 11990, + "src": "7622:25:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$_t_address_$_t_address_$_t_bytes32_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$", + "typeString": "function (mapping(address => struct LegacyAllocation.State storage ref),address,address,bytes32)" + } + }, + "id": 12298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7622:73:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12299, + "nodeType": "ExpressionStatement", + "src": "7622:73:57" + }, + { + "eventCall": { + "arguments": [ + { + "id": 12301, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12285, + "src": "7735:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12302, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12287, + "src": "7745:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12303, + "name": "_subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12289, + "src": "7760:21:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 12300, + "name": "LegacyAllocationMigrated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12216, + "src": "7710:24:57", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$", + "typeString": "function (address,address,bytes32)" + } + }, + "id": 12304, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7710:72:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12305, + "nodeType": "EmitStatement", + "src": "7705:77:57" + } + ] + }, + "documentation": { + "id": 12283, + "nodeType": "StructuredDocumentation", + "src": "6994:498:57", + "text": " @notice Imports a legacy allocation id into the subgraph service\n This is a governor only action that is required to prevent indexers from re-using allocation ids from the\n legacy staking contract. It will revert with LegacyAllocationAlreadyMigrated if the allocation has already been migrated.\n @param _indexer The address of the indexer\n @param _allocationId The id of the allocation\n @param _subgraphDeploymentId The id of the subgraph deployment" + }, + "id": 12307, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_migrateLegacyAllocation", + "nameLocation": "7506:24:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12290, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12285, + "mutability": "mutable", + "name": "_indexer", + "nameLocation": "7539:8:57", + "nodeType": "VariableDeclaration", + "scope": 12307, + "src": "7531:16:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12284, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7531:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12287, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "7557:13:57", + "nodeType": "VariableDeclaration", + "scope": 12307, + "src": "7549:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12286, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7549:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12289, + "mutability": "mutable", + "name": "_subgraphDeploymentId", + "nameLocation": "7580:21:57", + "nodeType": "VariableDeclaration", + "scope": 12307, + "src": "7572:29:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12288, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7572:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7530:72:57" + }, + "returnParameters": { + "id": 12291, + "nodeType": "ParameterList", + "parameters": [], + "src": "7612:0:57" + }, + "scope": 13030, + "src": "7497:292:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12400, + "nodeType": "Block", + "src": "8760:1243:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 12332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12327, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12312, + "src": "8778:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12330, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8803:1:57", + "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": 12329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8795:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12328, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8795:7:57", + "typeDescriptions": {} + } + }, + "id": 12331, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8795:10:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "8778:27:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12333, + "name": "AllocationManagerInvalidZeroAllocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12238, + "src": "8807:40:57", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 12334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8807:42:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 12326, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "8770:7:57", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 12335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8770:80:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12336, + "nodeType": "ExpressionStatement", + "src": "8770:80:57" + }, + { + "expression": { + "arguments": [ + { + "id": 12338, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12310, + "src": "8884:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12339, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12312, + "src": "8894:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12340, + "name": "_allocationProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12318, + "src": "8909:16:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 12337, + "name": "_verifyAllocationProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13029, + "src": "8861:22:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,address,bytes memory) view" + } + }, + "id": 12341, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8861:65:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12342, + "nodeType": "ExpressionStatement", + "src": "8861:65:57" + }, + { + "expression": { + "arguments": [ + { + "id": 12346, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12312, + "src": "9112:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12343, + "name": "legacyAllocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13048, + "src": "9079:17:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + } + }, + "id": 12345, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9097:14:57", + "memberName": "revertIfExists", + "nodeType": "MemberAccess", + "referencedDeclaration": 12034, + "src": "9079:32:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$_t_address_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$", + "typeString": "function (mapping(address => struct LegacyAllocation.State storage ref),address) view" + } + }, + "id": 12347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9079:47:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12348, + "nodeType": "ExpressionStatement", + "src": "9079:47:57" + }, + { + "assignments": [ + 12353 + ], + "declarations": [ + { + "constant": false, + "id": 12353, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "9160:10:57", + "nodeType": "VariableDeclaration", + "scope": 12400, + "src": "9136:34:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 12352, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12351, + "name": "Allocation.State", + "nameLocations": [ + "9136:10:57", + "9147:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "9136:16:57" + }, + "referencedDeclaration": 11307, + "src": "9136:16:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 12366, + "initialValue": { + "arguments": [ + { + "id": 12356, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12310, + "src": "9205:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12357, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12312, + "src": "9227:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12358, + "name": "_subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12314, + "src": "9254:21:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 12359, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12316, + "src": "9289:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 12363, + "name": "_subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12314, + "src": "9360:21:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12360, + "name": "_graphRewardsManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4590, + "src": "9310:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", + "typeString": "function () view returns (contract IRewardsManager)" + } + }, + "id": 12361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9310:22:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "id": 12362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9333:26:57", + "memberName": "onSubgraphAllocationUpdate", + "nodeType": "MemberAccess", + "referencedDeclaration": 437, + "src": "9310:49:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) external returns (uint256)" + } + }, + "id": 12364, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9310:72:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12354, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "9173:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9185:6:57", + "memberName": "create", + "nodeType": "MemberAccess", + "referencedDeclaration": 11382, + "src": "9173:18:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address,address,bytes32,uint256,uint256) returns (struct Allocation.State memory)" + } + }, + "id": 12365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9173:219:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9136:256:57" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12370, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "9577:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 12371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9577:15:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + { + "id": 12372, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12310, + "src": "9594:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12373, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12316, + "src": "9604:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12374, + "name": "_delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12320, + "src": "9613:16:57", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "id": 12367, + "name": "allocationProvisionTracker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13053, + "src": "9545:26:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 12369, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9572:4:57", + "memberName": "lock", + "nodeType": "MemberAccess", + "referencedDeclaration": 1480, + "src": "9545:31:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_contract$_IHorizonStaking_$2235_$_t_address_$_t_uint256_$_t_uint32_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "function (mapping(address => uint256),contract IHorizonStaking,address,uint256,uint32)" + } + }, + "id": 12375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9545:85:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12376, + "nodeType": "ExpressionStatement", + "src": "9545:85:57" + }, + { + "expression": { + "id": 12388, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 12377, + "name": "subgraphAllocatedTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13066, + "src": "9710:23:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 12380, + "indexExpression": { + "expression": { + "id": 12378, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12353, + "src": "9734:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12379, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9745:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "9734:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "9710:56:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 12381, + "name": "subgraphAllocatedTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13066, + "src": "9781:23:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 12384, + "indexExpression": { + "expression": { + "id": 12382, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12353, + "src": "9805:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12383, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9816:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "9805:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9781:56:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "expression": { + "id": 12385, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12353, + "src": "9852:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12386, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9863:6:57", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "9852:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9781:88:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9710:159:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12389, + "nodeType": "ExpressionStatement", + "src": "9710:159:57" + }, + { + "eventCall": { + "arguments": [ + { + "id": 12391, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12310, + "src": "9903:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12392, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12312, + "src": "9913:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12393, + "name": "_subgraphDeploymentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12314, + "src": "9928:21:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 12394, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12353, + "src": "9951:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12395, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9962:6:57", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "9951:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12390, + "name": "AllocationCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12164, + "src": "9885:17:57", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$returns$__$", + "typeString": "function (address,address,bytes32,uint256)" + } + }, + "id": 12396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9885:84:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12397, + "nodeType": "EmitStatement", + "src": "9880:89:57" + }, + { + "expression": { + "id": 12398, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12353, + "src": "9986:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "functionReturnParameters": 12325, + "id": 12399, + "nodeType": "Return", + "src": "9979:17:57" + } + ] + }, + "documentation": { + "id": 12308, + "nodeType": "StructuredDocumentation", + "src": "7795:699:57", + "text": " @notice Create an allocation\n @dev The `_allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`\n Requirements:\n - `_allocationId` must not be the zero address\n Emits a {AllocationCreated} event\n @param _indexer The address of the indexer\n @param _allocationId The id of the allocation to be created\n @param _subgraphDeploymentId The subgraph deployment Id\n @param _tokens The amount of tokens to allocate\n @param _allocationProof Signed proof of allocation id address ownership\n @param _delegationRatio The delegation ratio to consider when locking tokens" + }, + "id": 12401, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_allocate", + "nameLocation": "8508:9:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12321, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12310, + "mutability": "mutable", + "name": "_indexer", + "nameLocation": "8535:8:57", + "nodeType": "VariableDeclaration", + "scope": 12401, + "src": "8527:16:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12309, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8527:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12312, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "8561:13:57", + "nodeType": "VariableDeclaration", + "scope": 12401, + "src": "8553:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12311, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8553:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12314, + "mutability": "mutable", + "name": "_subgraphDeploymentId", + "nameLocation": "8592:21:57", + "nodeType": "VariableDeclaration", + "scope": 12401, + "src": "8584:29:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12313, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8584:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12316, + "mutability": "mutable", + "name": "_tokens", + "nameLocation": "8631:7:57", + "nodeType": "VariableDeclaration", + "scope": 12401, + "src": "8623:15:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12315, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8623:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12318, + "mutability": "mutable", + "name": "_allocationProof", + "nameLocation": "8661:16:57", + "nodeType": "VariableDeclaration", + "scope": 12401, + "src": "8648:29:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 12317, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8648:5:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12320, + "mutability": "mutable", + "name": "_delegationRatio", + "nameLocation": "8694:16:57", + "nodeType": "VariableDeclaration", + "scope": 12401, + "src": "8687:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 12319, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "8687:6:57", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "8517:199:57" + }, + "returnParameters": { + "id": 12325, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12324, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12401, + "src": "8735:23:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 12323, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12322, + "name": "Allocation.State", + "nameLocations": [ + "8735:10:57", + "8746:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "8735:16:57" + }, + "referencedDeclaration": 11307, + "src": "8735:16:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "8734:25:57" + }, + "scope": 13030, + "src": "8499:1504:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12656, + "nodeType": "Block", + "src": "11103:3179:57", + "statements": [ + { + "assignments": [ + 12417 + ], + "declarations": [ + { + "constant": false, + "id": 12417, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "11137:10:57", + "nodeType": "VariableDeclaration", + "scope": 12656, + "src": "11113:34:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 12416, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12415, + "name": "Allocation.State", + "nameLocations": [ + "11113:10:57", + "11124:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "11113:16:57" + }, + "referencedDeclaration": 11307, + "src": "11113:16:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 12422, + "initialValue": { + "arguments": [ + { + "id": 12420, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12404, + "src": "11166:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12418, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "11150:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11162:3:57", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "11150:15:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 12421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11150:30:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11113:67:57" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12424, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "11198:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12425, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11209:6:57", + "memberName": "isOpen", + "nodeType": "MemberAccess", + "referencedDeclaration": 11621, + "src": "11198:17:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 12426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11198:19:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 12428, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12404, + "src": "11253:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 12427, + "name": "AllocationManagerAllocationClosed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12243, + "src": "11219:33:57", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 12429, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11219:48:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 12423, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "11190:7:57", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 12430, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11190:78:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12431, + "nodeType": "ExpressionStatement", + "src": "11190:78:57" + }, + { + "assignments": [ + 12433 + ], + "declarations": [ + { + "constant": false, + "id": 12433, + "mutability": "mutable", + "name": "tokensRewards", + "nameLocation": "11346:13:57", + "nodeType": "VariableDeclaration", + "scope": 12656, + "src": "11338:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12432, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11338:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12459, + "initialValue": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 12450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 12443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "11363:36:57", + "subExpression": { + "arguments": [ + { + "id": 12436, + "name": "maxPOIStaleness", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13056, + "src": "11383:15:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12434, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "11364:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12435, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11375:7:57", + "memberName": "isStale", + "nodeType": "MemberAccess", + "referencedDeclaration": 11587, + "src": "11364:18:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11307_memory_ptr_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory,uint256) view returns (bool)" + } + }, + "id": 12437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11364:35:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 12442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "11415:26:57", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12439, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "11416:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12440, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11427:12:57", + "memberName": "isAltruistic", + "nodeType": "MemberAccess", + "referencedDeclaration": 11640, + "src": "11416:23:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 12441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11416:25:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "11363:78:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 12449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12444, + "name": "_poi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12406, + "src": "11457:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12447, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11473:1:57", + "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": 12446, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11465:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 12445, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11465:7:57", + "typeDescriptions": {} + } + }, + "id": 12448, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11465:10:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "11457:18:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "11363:112:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 12451, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11362:114:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 12457, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11555:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 12458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "11362:194:57", + "trueExpression": { + "arguments": [ + { + "id": 12455, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12404, + "src": "11526:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12452, + "name": "_graphRewardsManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4590, + "src": "11491:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", + "typeString": "function () view returns (contract IRewardsManager)" + } + }, + "id": 12453, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11491:22:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "id": 12454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11514:11:57", + "memberName": "takeRewards", + "nodeType": "MemberAccess", + "referencedDeclaration": 423, + "src": "11491:34:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) external returns (uint256)" + } + }, + "id": 12456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11491:49:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11338:218:57" + }, + { + "expression": { + "arguments": [ + { + "id": 12463, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12404, + "src": "11717:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "id": 12467, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "11794:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12468, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11805:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "11794:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12464, + "name": "_graphRewardsManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4590, + "src": "11744:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", + "typeString": "function () view returns (contract IRewardsManager)" + } + }, + "id": 12465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11744:22:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "id": 12466, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11767:26:57", + "memberName": "onSubgraphAllocationUpdate", + "nodeType": "MemberAccess", + "referencedDeclaration": 437, + "src": "11744:49:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) external returns (uint256)" + } + }, + "id": 12469, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11744:82:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12460, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "11676:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11688:15:57", + "memberName": "snapshotRewards", + "nodeType": "MemberAccess", + "referencedDeclaration": 11459, + "src": "11676:27:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address,uint256)" + } + }, + "id": 12470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11676:160:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12471, + "nodeType": "ExpressionStatement", + "src": "11676:160:57" + }, + { + "expression": { + "arguments": [ + { + "id": 12475, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12404, + "src": "11869:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12472, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "11846:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11858:10:57", + "memberName": "presentPOI", + "nodeType": "MemberAccess", + "referencedDeclaration": 11420, + "src": "11846:22:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address)" + } + }, + "id": 12476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11846:37:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12477, + "nodeType": "ExpressionStatement", + "src": "11846:37:57" + }, + { + "expression": { + "arguments": [ + { + "id": 12481, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12404, + "src": "11988:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12478, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "11956:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11968:19:57", + "memberName": "clearPendingRewards", + "nodeType": "MemberAccess", + "referencedDeclaration": 11496, + "src": "11956:31:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address)" + } + }, + "id": 12482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11956:46:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12483, + "nodeType": "ExpressionStatement", + "src": "11956:46:57" + }, + { + "assignments": [ + 12485 + ], + "declarations": [ + { + "constant": false, + "id": 12485, + "mutability": "mutable", + "name": "tokensIndexerRewards", + "nameLocation": "12021:20:57", + "nodeType": "VariableDeclaration", + "scope": 12656, + "src": "12013:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12484, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12013:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12487, + "initialValue": { + "hexValue": "30", + "id": 12486, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12044:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "12013:32:57" + }, + { + "assignments": [ + 12489 + ], + "declarations": [ + { + "constant": false, + "id": 12489, + "mutability": "mutable", + "name": "tokensDelegationRewards", + "nameLocation": "12063:23:57", + "nodeType": "VariableDeclaration", + "scope": 12656, + "src": "12055:31:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12488, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12055:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12491, + "initialValue": { + "hexValue": "30", + "id": 12490, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12089:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "12055:35:57" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12492, + "name": "tokensRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12433, + "src": "12104:13:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 12493, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12121:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "12104:18:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12626, + "nodeType": "IfStatement", + "src": "12100:1612:57", + "trueBody": { + "id": 12625, + "nodeType": "Block", + "src": "12124:1588:57", + "statements": [ + { + "assignments": [ + 12496 + ], + "declarations": [ + { + "constant": false, + "id": 12496, + "mutability": "mutable", + "name": "delegatorCut", + "nameLocation": "12194:12:57", + "nodeType": "VariableDeclaration", + "scope": 12625, + "src": "12186:20:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12495, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12186:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12510, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 12500, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "12262:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12501, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12273:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "12262:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 12504, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "12306:4:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_AllocationManager_$13030", + "typeString": "contract AllocationManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_AllocationManager_$13030", + "typeString": "contract AllocationManager" + } + ], + "id": 12503, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12298:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12502, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12298:7:57", + "typeDescriptions": {} + } + }, + "id": 12505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12298:13:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "expression": { + "id": 12506, + "name": "IGraphPayments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2211, + "src": "12329:14:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", + "typeString": "type(contract IGraphPayments)" + } + }, + "id": 12507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12344:12:57", + "memberName": "PaymentTypes", + "nodeType": "MemberAccess", + "referencedDeclaration": 2166, + "src": "12329:27:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_PaymentTypes_$2166_$", + "typeString": "type(enum IGraphPayments.PaymentTypes)" + } + }, + "id": 12508, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "12357:15:57", + "memberName": "IndexingRewards", + "nodeType": "MemberAccess", + "referencedDeclaration": 2165, + "src": "12329:43:57", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_enum$_PaymentTypes_$2166", + "typeString": "enum IGraphPayments.PaymentTypes" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12497, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "12209:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 12498, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12209:15:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 12499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12225:19:57", + "memberName": "getDelegationFeeCut", + "nodeType": "MemberAccess", + "referencedDeclaration": 2773, + "src": "12209:35:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_enum$_PaymentTypes_$2166_$returns$_t_uint256_$", + "typeString": "function (address,address,enum IGraphPayments.PaymentTypes) view external returns (uint256)" + } + }, + "id": 12509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12209:177:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12186:200:57" + }, + { + "assignments": [ + 12515 + ], + "declarations": [ + { + "constant": false, + "id": 12515, + "mutability": "mutable", + "name": "delegationPool", + "nameLocation": "12443:14:57", + "nodeType": "VariableDeclaration", + "scope": 12625, + "src": "12400:57:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", + "typeString": "struct IHorizonStakingTypes.DelegationPool" + }, + "typeName": { + "id": 12514, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12513, + "name": "IHorizonStakingTypes.DelegationPool", + "nameLocations": [ + "12400:20:57", + "12421:14:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3748, + "src": "12400:35:57" + }, + "referencedDeclaration": 3748, + "src": "12400:35:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DelegationPool_$3748_storage_ptr", + "typeString": "struct IHorizonStakingTypes.DelegationPool" + } + }, + "visibility": "internal" + } + ], + "id": 12526, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 12519, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "12511:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12520, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12522:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "12511:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 12523, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "12555:4:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_AllocationManager_$13030", + "typeString": "contract AllocationManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_AllocationManager_$13030", + "typeString": "contract AllocationManager" + } + ], + "id": 12522, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12547:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12521, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12547:7:57", + "typeDescriptions": {} + } + }, + "id": 12524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12547:13:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12516, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "12460:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 12517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12460:15:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 12518, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12476:17:57", + "memberName": "getDelegationPool", + "nodeType": "MemberAccess", + "referencedDeclaration": 2747, + "src": "12460:33:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_DelegationPool_$3748_memory_ptr_$", + "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.DelegationPool memory)" + } + }, + "id": 12525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12460:114:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", + "typeString": "struct IHorizonStakingTypes.DelegationPool memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12400:174:57" + }, + { + "expression": { + "id": 12538, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12527, + "name": "tokensDelegationRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12489, + "src": "12691:23:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 12528, + "name": "delegationPool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12515, + "src": "12717:14:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", + "typeString": "struct IHorizonStakingTypes.DelegationPool memory" + } + }, + "id": 12529, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12732:6:57", + "memberName": "shares", + "nodeType": "MemberAccess", + "referencedDeclaration": 3741, + "src": "12717:21:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 12530, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12741:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "12717:25:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 12536, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12782:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 12537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "12717:66:57", + "trueExpression": { + "arguments": [ + { + "id": 12534, + "name": "delegatorCut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12496, + "src": "12766:12:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12532, + "name": "tokensRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12433, + "src": "12745:13:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12533, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12759:6:57", + "memberName": "mulPPM", + "nodeType": "MemberAccess", + "referencedDeclaration": 4219, + "src": "12745:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12745:34:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12691:92:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12539, + "nodeType": "ExpressionStatement", + "src": "12691:92:57" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12542, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12540, + "name": "tokensDelegationRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12489, + "src": "12801:23:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 12541, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12827:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "12801:27:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12567, + "nodeType": "IfStatement", + "src": "12797:251:57", + "trueBody": { + "id": 12566, + "nodeType": "Block", + "src": "12830:218:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12548, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "12878:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 12549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12878:15:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + ], + "id": 12547, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12870:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12546, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12870:7:57", + "typeDescriptions": {} + } + }, + "id": 12550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12870:24:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12551, + "name": "tokensDelegationRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12489, + "src": "12896:23:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12543, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "12848:11:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 12544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12848:13:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 12545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12862:7:57", + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 5861, + "src": "12848:21:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 12552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12848:72:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12553, + "nodeType": "ExpressionStatement", + "src": "12848:72:57" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 12557, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "12974:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12558, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12985:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "12974:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 12561, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "13002:4:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_AllocationManager_$13030", + "typeString": "contract AllocationManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_AllocationManager_$13030", + "typeString": "contract AllocationManager" + } + ], + "id": 12560, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12994:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12559, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12994:7:57", + "typeDescriptions": {} + } + }, + "id": 12562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12994:13:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12563, + "name": "tokensDelegationRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12489, + "src": "13009:23:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12554, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "12938:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 12555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12938:15:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 12556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12954:19:57", + "memberName": "addToDelegationPool", + "nodeType": "MemberAccess", + "referencedDeclaration": 3525, + "src": "12938:35:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256) external" + } + }, + "id": 12564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12938:95:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12565, + "nodeType": "ExpressionStatement", + "src": "12938:95:57" + } + ] + } + }, + { + "expression": { + "id": 12572, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12568, + "name": "tokensIndexerRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12485, + "src": "13107:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12569, + "name": "tokensRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12433, + "src": "13130:13:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 12570, + "name": "tokensDelegationRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12489, + "src": "13146:23:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13130:39:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13107:62:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12573, + "nodeType": "ExpressionStatement", + "src": "13107:62:57" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12574, + "name": "tokensIndexerRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12485, + "src": "13187:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 12575, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13210:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "13187:24:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12624, + "nodeType": "IfStatement", + "src": "13183:519:57", + "trueBody": { + "id": 12623, + "nodeType": "Block", + "src": "13213:489:57", + "statements": [ + { + "assignments": [ + 12578 + ], + "declarations": [ + { + "constant": false, + "id": 12578, + "mutability": "mutable", + "name": "rewardsDestination", + "nameLocation": "13239:18:57", + "nodeType": "VariableDeclaration", + "scope": 12623, + "src": "13231:26:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12577, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13231:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 12583, + "initialValue": { + "baseExpression": { + "id": 12579, + "name": "rewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13061, + "src": "13260:18:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 12582, + "indexExpression": { + "expression": { + "id": 12580, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "13279:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12581, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13290:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "13279:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13260:38:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13231:67:57" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 12589, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12584, + "name": "rewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12578, + "src": "13320:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12587, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13350:1:57", + "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": 12586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13342:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12585, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13342:7:57", + "typeDescriptions": {} + } + }, + "id": 12588, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13342:10:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "13320:32:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 12621, + "nodeType": "Block", + "src": "13581:107:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12617, + "name": "rewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12578, + "src": "13628:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12618, + "name": "tokensIndexerRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12485, + "src": "13648:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12614, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "13603:11:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 12615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13603:13:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 12616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13617:10:57", + "memberName": "pushTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 578, + "src": "13603:24:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", + "typeString": "function (contract IGraphToken,address,uint256)" + } + }, + "id": 12619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13603:66:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12620, + "nodeType": "ExpressionStatement", + "src": "13603:66:57" + } + ] + }, + "id": 12622, + "nodeType": "IfStatement", + "src": "13316:372:57", + "trueBody": { + "id": 12613, + "nodeType": "Block", + "src": "13354:221:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12595, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "13406:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 12596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13406:15:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + ], + "id": 12594, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13398:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12593, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13398:7:57", + "typeDescriptions": {} + } + }, + "id": 12597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13398:24:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12598, + "name": "tokensIndexerRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12485, + "src": "13424:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12590, + "name": "_graphToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "13376:11:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", + "typeString": "function () view returns (contract IGraphToken)" + } + }, + "id": 12591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13376:13:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGraphToken_$518", + "typeString": "contract IGraphToken" + } + }, + "id": 12592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13390:7:57", + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 5861, + "src": "13376:21:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 12599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13376:69:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12600, + "nodeType": "ExpressionStatement", + "src": "13376:69:57" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 12604, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "13500:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12605, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13511:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "13500:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 12608, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "13528:4:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_AllocationManager_$13030", + "typeString": "contract AllocationManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_AllocationManager_$13030", + "typeString": "contract AllocationManager" + } + ], + "id": 12607, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13520:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12606, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13520:7:57", + "typeDescriptions": {} + } + }, + "id": 12609, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13520:13:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12610, + "name": "tokensIndexerRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12485, + "src": "13535:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12601, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "13467:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 12602, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13467:15:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + "id": 12603, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13483:16:57", + "memberName": "stakeToProvision", + "nodeType": "MemberAccess", + "referencedDeclaration": 3417, + "src": "13467:32:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256) external" + } + }, + "id": 12611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13467:89:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12612, + "nodeType": "ExpressionStatement", + "src": "13467:89:57" + } + ] + } + } + ] + } + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "id": 12628, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "13765:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12629, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13776:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "13765:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12630, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12404, + "src": "13797:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 12631, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "13824:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12632, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13835:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "13824:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 12633, + "name": "tokensRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12433, + "src": "13869:13:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12634, + "name": "tokensIndexerRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12485, + "src": "13896:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12635, + "name": "tokensDelegationRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12489, + "src": "13930:23:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12636, + "name": "_poi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12406, + "src": "13967:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12637, + "name": "_graphEpochManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4580, + "src": "13985:18:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IEpochManager_$220_$", + "typeString": "function () view returns (contract IEpochManager)" + } + }, + "id": 12638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13985:20:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IEpochManager_$220", + "typeString": "contract IEpochManager" + } + }, + "id": 12639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "14006:12:57", + "memberName": "currentEpoch", + "nodeType": "MemberAccess", + "referencedDeclaration": 197, + "src": "13985:33:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", + "typeString": "function () view external returns (uint256)" + } + }, + "id": 12640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13985:35:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12627, + "name": "IndexingRewardsCollected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12183, + "src": "13727:24:57", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$__$", + "typeString": "function (address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)" + } + }, + "id": 12641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13727:303:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12642, + "nodeType": "EmitStatement", + "src": "13722:308:57" + }, + { + "condition": { + "arguments": [ + { + "expression": { + "id": 12644, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12417, + "src": "14150:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12645, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "14161:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "14150:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12646, + "name": "_delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12408, + "src": "14170:16:57", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 12643, + "name": "_isOverAllocated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12997, + "src": "14133:16:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint32_$returns$_t_bool_$", + "typeString": "function (address,uint32) view returns (bool)" + } + }, + "id": 12647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14133:54:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12653, + "nodeType": "IfStatement", + "src": "14129:116:57", + "trueBody": { + "id": 12652, + "nodeType": "Block", + "src": "14189:56:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12649, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12404, + "src": "14220:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 12648, + "name": "_closeAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12890, + "src": "14203:16:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 12650, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14203:31:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12651, + "nodeType": "ExpressionStatement", + "src": "14203:31:57" + } + ] + } + }, + { + "expression": { + "id": 12654, + "name": "tokensRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12433, + "src": "14262:13:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 12412, + "id": 12655, + "nodeType": "Return", + "src": "14255:20:57" + } + ] + }, + "documentation": { + "id": 12402, + "nodeType": "StructuredDocumentation", + "src": "10009:937:57", + "text": " @notice Present a POI to collect indexing rewards for an allocation\n This function will mint indexing rewards using the {RewardsManager} and distribute them to the indexer and delegators.\n To qualify for indexing rewards:\n - POI must be non-zero\n - POI must not be stale, i.e: older than `maxPOIStaleness`\n - allocation must not be altruistic (allocated tokens = 0)\n Note that indexers are required to periodically (at most every `maxPOIStaleness`) present POIs to collect rewards.\n Rewards will not be issued to stale POIs, which means that indexers are advised to present a zero POI if they are\n unable to present a valid one to prevent being locked out of future rewards.\n Emits a {IndexingRewardsCollected} event.\n @param _allocationId The id of the allocation to collect rewards for\n @param _poi The POI being presented" + }, + "id": 12657, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_collectIndexingRewards", + "nameLocation": "10960:23:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12409, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12404, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "11001:13:57", + "nodeType": "VariableDeclaration", + "scope": 12657, + "src": "10993:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12403, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10993:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12406, + "mutability": "mutable", + "name": "_poi", + "nameLocation": "11032:4:57", + "nodeType": "VariableDeclaration", + "scope": 12657, + "src": "11024:12:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12405, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11024:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12408, + "mutability": "mutable", + "name": "_delegationRatio", + "nameLocation": "11053:16:57", + "nodeType": "VariableDeclaration", + "scope": 12657, + "src": "11046:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 12407, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "11046:6:57", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "10983:92:57" + }, + "returnParameters": { + "id": 12412, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12411, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12657, + "src": "11094:7:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12410, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11094:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11093:9:57" + }, + "scope": 13030, + "src": "10951:3331:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12822, + "nodeType": "Block", + "src": "15222:1904:57", + "statements": [ + { + "assignments": [ + 12674 + ], + "declarations": [ + { + "constant": false, + "id": 12674, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "15256:10:57", + "nodeType": "VariableDeclaration", + "scope": 12822, + "src": "15232:34:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 12673, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12672, + "name": "Allocation.State", + "nameLocations": [ + "15232:10:57", + "15243:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "15232:16:57" + }, + "referencedDeclaration": 11307, + "src": "15232:16:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 12679, + "initialValue": { + "arguments": [ + { + "id": 12677, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12660, + "src": "15285:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12675, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "15269:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12676, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15281:3:57", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "15269:15:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 12678, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15269:30:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15232:67:57" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12681, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "15317:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12682, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15328:6:57", + "memberName": "isOpen", + "nodeType": "MemberAccess", + "referencedDeclaration": 11621, + "src": "15317:17:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 12683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15317:19:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 12685, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12660, + "src": "15372:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 12684, + "name": "AllocationManagerAllocationClosed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12243, + "src": "15338:33:57", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 12686, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15338:48:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 12680, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "15309:7:57", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 12687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15309:78:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12688, + "nodeType": "ExpressionStatement", + "src": "15309:78:57" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12690, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "15405:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "expression": { + "id": 12691, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "15416:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12692, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15427:6:57", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "15416:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15405:28:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 12695, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12660, + "src": "15471:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12696, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "15486:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12694, + "name": "AllocationManagerAllocationSameSize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12250, + "src": "15435:35:57", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", + "typeString": "function (address,uint256) pure returns (error)" + } + }, + "id": 12697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15435:59:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 12689, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "15397:7:57", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 12698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15397:98:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12699, + "nodeType": "ExpressionStatement", + "src": "15397:98:57" + }, + { + "assignments": [ + 12701 + ], + "declarations": [ + { + "constant": false, + "id": 12701, + "mutability": "mutable", + "name": "oldTokens", + "nameLocation": "15550:9:57", + "nodeType": "VariableDeclaration", + "scope": 12822, + "src": "15542:17:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12700, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15542:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12704, + "initialValue": { + "expression": { + "id": 12702, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "15562:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12703, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15573:6:57", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "15562:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15542:37:57" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12705, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "15593:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 12706, + "name": "oldTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12701, + "src": "15603:9:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15593:19:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 12732, + "nodeType": "Block", + "src": "15752:100:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 12725, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "15801:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12726, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15812:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "15801:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12727, + "name": "oldTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12701, + "src": "15821:9:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 12728, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "15833:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15821:19:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12722, + "name": "allocationProvisionTracker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13053, + "src": "15766:26:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 12724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15793:7:57", + "memberName": "release", + "nodeType": "MemberAccess", + "referencedDeclaration": 1518, + "src": "15766:34:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "function (mapping(address => uint256),address,uint256)" + } + }, + "id": 12730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15766:75:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12731, + "nodeType": "ExpressionStatement", + "src": "15766:75:57" + } + ] + }, + "id": 12733, + "nodeType": "IfStatement", + "src": "15589:263:57", + "trueBody": { + "id": 12721, + "nodeType": "Block", + "src": "15614:132:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12711, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "15660:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 12712, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15660:15:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + { + "expression": { + "id": 12713, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "15677:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12714, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15688:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "15677:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12715, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "15697:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 12716, + "name": "oldTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12701, + "src": "15707:9:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15697:19:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12718, + "name": "_delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12664, + "src": "15718:16:57", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "id": 12708, + "name": "allocationProvisionTracker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13053, + "src": "15628:26:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 12710, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "15655:4:57", + "memberName": "lock", + "nodeType": "MemberAccess", + "referencedDeclaration": 1480, + "src": "15628:31:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_contract$_IHorizonStaking_$2235_$_t_address_$_t_uint256_$_t_uint32_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "function (mapping(address => uint256),contract IHorizonStaking,address,uint256,uint32)" + } + }, + "id": 12719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15628:107:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12720, + "nodeType": "ExpressionStatement", + "src": "15628:107:57" + } + ] + } + }, + { + "assignments": [ + 12735 + ], + "declarations": [ + { + "constant": false, + "id": 12735, + "mutability": "mutable", + "name": "accRewardsPerAllocatedToken", + "nameLocation": "15965:27:57", + "nodeType": "VariableDeclaration", + "scope": 12822, + "src": "15957:35:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12734, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15957:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12742, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 12739, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "16058:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12740, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16069:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "16058:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12736, + "name": "_graphRewardsManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4590, + "src": "15995:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", + "typeString": "function () view returns (contract IRewardsManager)" + } + }, + "id": 12737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15995:22:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "id": 12738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16018:26:57", + "memberName": "onSubgraphAllocationUpdate", + "nodeType": "MemberAccess", + "referencedDeclaration": 437, + "src": "15995:49:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) external returns (uint256)" + } + }, + "id": 12741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "15995:104:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15957:142:57" + }, + { + "assignments": [ + 12744 + ], + "declarations": [ + { + "constant": false, + "id": 12744, + "mutability": "mutable", + "name": "accRewardsPerAllocatedTokenPending", + "nameLocation": "16117:34:57", + "nodeType": "VariableDeclaration", + "scope": 12822, + "src": "16109:42:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12743, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16109:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12755, + "initialValue": { + "condition": { + "id": 12748, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "16154:26:57", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12745, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "16155:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12746, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16166:12:57", + "memberName": "isAltruistic", + "nodeType": "MemberAccess", + "referencedDeclaration": 11640, + "src": "16155:23:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", + "typeString": "function (struct Allocation.State memory) pure returns (bool)" + } + }, + "id": 12747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16155:25:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 12753, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16278:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 12754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "16154:125:57", + "trueExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12749, + "name": "accRewardsPerAllocatedToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12735, + "src": "16195:27:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "expression": { + "id": 12750, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "16225:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12751, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16236:27:57", + "memberName": "accRewardsPerAllocatedToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 11304, + "src": "16225:38:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16195:68:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16109:170:57" + }, + { + "expression": { + "id": 12761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 12756, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "16323:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12758, + "indexExpression": { + "id": 12757, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12660, + "src": "16335:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16323:26:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "id": 12759, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "16350:6:57", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "16323:33:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 12760, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "16359:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16323:43:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12762, + "nodeType": "ExpressionStatement", + "src": "16323:43:57" + }, + { + "expression": { + "id": 12768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 12763, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "16376:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12765, + "indexExpression": { + "id": 12764, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12660, + "src": "16388:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16376:26:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "id": 12766, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "16403:27:57", + "memberName": "accRewardsPerAllocatedToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 11304, + "src": "16376:54:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 12767, + "name": "accRewardsPerAllocatedToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12735, + "src": "16433:27:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16376:84:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12769, + "nodeType": "ExpressionStatement", + "src": "16376:84:57" + }, + { + "expression": { + "id": 12780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 12770, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "16470:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12772, + "indexExpression": { + "id": 12771, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12660, + "src": "16482:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16470:26:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "id": 12773, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "16497:17:57", + "memberName": "accRewardsPending", + "nodeType": "MemberAccess", + "referencedDeclaration": 11306, + "src": "16470:44:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "arguments": [ + { + "id": 12777, + "name": "oldTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12701, + "src": "16566:9:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12778, + "name": "accRewardsPerAllocatedTokenPending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12744, + "src": "16589:34:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12774, + "name": "_graphRewardsManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4590, + "src": "16518:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", + "typeString": "function () view returns (contract IRewardsManager)" + } + }, + "id": 12775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16518:22:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "id": 12776, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16541:11:57", + "memberName": "calcRewards", + "nodeType": "MemberAccess", + "referencedDeclaration": 411, + "src": "16518:34:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure external returns (uint256)" + } + }, + "id": 12779, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16518:115:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16470:163:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12781, + "nodeType": "ExpressionStatement", + "src": "16470:163:57" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12784, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12782, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "16717:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 12783, + "name": "oldTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12701, + "src": "16727:9:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16717:19:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 12806, + "nodeType": "Block", + "src": "16850:106:57", + "statements": [ + { + "expression": { + "id": 12804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 12796, + "name": "subgraphAllocatedTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13066, + "src": "16864:23:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 12799, + "indexExpression": { + "expression": { + "id": 12797, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "16888:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12798, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16899:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "16888:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "16864:56:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12802, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12800, + "name": "oldTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12701, + "src": "16925:9:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 12801, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "16937:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16925:19:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 12803, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16924:21:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16864:81:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12805, + "nodeType": "ExpressionStatement", + "src": "16864:81:57" + } + ] + }, + "id": 12807, + "nodeType": "IfStatement", + "src": "16713:243:57", + "trueBody": { + "id": 12795, + "nodeType": "Block", + "src": "16738:106:57", + "statements": [ + { + "expression": { + "id": 12793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 12785, + "name": "subgraphAllocatedTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13066, + "src": "16752:23:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 12788, + "indexExpression": { + "expression": { + "id": 12786, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "16776:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12787, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "16787:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "16776:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "16752:56:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12791, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12789, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "16813:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 12790, + "name": "oldTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12701, + "src": "16823:9:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16813:19:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 12792, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16812:21:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16752:81:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12794, + "nodeType": "ExpressionStatement", + "src": "16752:81:57" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "id": 12809, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "16989:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12810, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17000:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "16989:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12811, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12660, + "src": "17009:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 12812, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12674, + "src": "17024:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12813, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17035:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "17024:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 12814, + "name": "_tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12662, + "src": "17057:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12815, + "name": "oldTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12701, + "src": "17066:9:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12808, + "name": "AllocationResized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12196, + "src": "16971:17:57", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,address,bytes32,uint256,uint256)" + } + }, + "id": 12816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "16971:105:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12817, + "nodeType": "EmitStatement", + "src": "16966:110:57" + }, + { + "expression": { + "baseExpression": { + "id": 12818, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "17093:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12820, + "indexExpression": { + "id": 12819, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12660, + "src": "17105:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "17093:26:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage", + "typeString": "struct Allocation.State storage ref" + } + }, + "functionReturnParameters": 12669, + "id": 12821, + "nodeType": "Return", + "src": "17086:33:57" + } + ] + }, + "documentation": { + "id": 12658, + "nodeType": "StructuredDocumentation", + "src": "14288:764:57", + "text": " @notice Resize an allocation\n @dev Will lock or release tokens in the provision tracker depending on the new allocation size.\n Rewards accrued but not issued before the resize will be accounted for as pending rewards.\n These will be paid out when the indexer presents a POI.\n Requirements:\n - `_indexer` must be the owner of the allocation\n - Allocation must be open\n - `_tokens` must be different from the current allocation size\n Emits a {AllocationResized} event.\n @param _allocationId The id of the allocation to be resized\n @param _tokens The new amount of tokens to allocate\n @param _delegationRatio The delegation ratio to consider when locking tokens" + }, + "id": 12823, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_resizeAllocation", + "nameLocation": "15066:17:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12665, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12660, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "15101:13:57", + "nodeType": "VariableDeclaration", + "scope": 12823, + "src": "15093:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12659, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15093:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12662, + "mutability": "mutable", + "name": "_tokens", + "nameLocation": "15132:7:57", + "nodeType": "VariableDeclaration", + "scope": 12823, + "src": "15124:15:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12661, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15124:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12664, + "mutability": "mutable", + "name": "_delegationRatio", + "nameLocation": "15156:16:57", + "nodeType": "VariableDeclaration", + "scope": 12823, + "src": "15149:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 12663, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "15149:6:57", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "15083:95:57" + }, + "returnParameters": { + "id": 12669, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12668, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12823, + "src": "15197:23:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 12667, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12666, + "name": "Allocation.State", + "nameLocations": [ + "15197:10:57", + "15208:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "15197:16:57" + }, + "referencedDeclaration": 11307, + "src": "15197:16:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "15196:25:57" + }, + "scope": 13030, + "src": "15057:2069:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12889, + "nodeType": "Block", + "src": "17769:831:57", + "statements": [ + { + "assignments": [ + 12833 + ], + "declarations": [ + { + "constant": false, + "id": 12833, + "mutability": "mutable", + "name": "allocation", + "nameLocation": "17803:10:57", + "nodeType": "VariableDeclaration", + "scope": 12889, + "src": "17779:34:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 12832, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12831, + "name": "Allocation.State", + "nameLocations": [ + "17779:10:57", + "17790:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "17779:16:57" + }, + "referencedDeclaration": 11307, + "src": "17779:16:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "id": 12838, + "initialValue": { + "arguments": [ + { + "id": 12836, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12826, + "src": "17832:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12834, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "17816:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17828:3:57", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "17816:15:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 12837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "17816:30:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17779:67:57" + }, + { + "expression": { + "arguments": [ + { + "id": 12842, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12826, + "src": "17990:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "id": 12846, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12833, + "src": "18067:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12847, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18078:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "18067:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12843, + "name": "_graphRewardsManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4590, + "src": "18017:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", + "typeString": "function () view returns (contract IRewardsManager)" + } + }, + "id": 12844, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18017:22:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsManager_$438", + "typeString": "contract IRewardsManager" + } + }, + "id": 12845, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18040:26:57", + "memberName": "onSubgraphAllocationUpdate", + "nodeType": "MemberAccess", + "referencedDeclaration": 437, + "src": "18017:49:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) external returns (uint256)" + } + }, + "id": 12848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18017:82:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12839, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "17949:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "17961:15:57", + "memberName": "snapshotRewards", + "nodeType": "MemberAccess", + "referencedDeclaration": 11459, + "src": "17949:27:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address,uint256)" + } + }, + "id": 12849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "17949:160:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12850, + "nodeType": "ExpressionStatement", + "src": "17949:160:57" + }, + { + "expression": { + "arguments": [ + { + "id": 12854, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12826, + "src": "18138:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12851, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "18120:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12853, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18132:5:57", + "memberName": "close", + "nodeType": "MemberAccess", + "referencedDeclaration": 11534, + "src": "18120:17:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address)" + } + }, + "id": 12855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18120:32:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12856, + "nodeType": "ExpressionStatement", + "src": "18120:32:57" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 12860, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12833, + "src": "18197:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12861, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18208:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "18197:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 12862, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12833, + "src": "18217:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12863, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18228:6:57", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "18217:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12857, + "name": "allocationProvisionTracker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13053, + "src": "18162:26:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 12859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18189:7:57", + "memberName": "release", + "nodeType": "MemberAccess", + "referencedDeclaration": 1518, + "src": "18162:34:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "function (mapping(address => uint256),address,uint256)" + } + }, + "id": 12864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18162:73:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12865, + "nodeType": "ExpressionStatement", + "src": "18162:73:57" + }, + { + "expression": { + "id": 12877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 12866, + "name": "subgraphAllocatedTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13066, + "src": "18315:23:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 12869, + "indexExpression": { + "expression": { + "id": 12867, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12833, + "src": "18339:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12868, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18350:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "18339:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "18315:56:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12876, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 12870, + "name": "subgraphAllocatedTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13066, + "src": "18386:23:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 12873, + "indexExpression": { + "expression": { + "id": 12871, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12833, + "src": "18410:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12872, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18421:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "18410:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "18386:56:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "expression": { + "id": 12874, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12833, + "src": "18457:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12875, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18468:6:57", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "18457:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18386:88:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18315:159:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12878, + "nodeType": "ExpressionStatement", + "src": "18315:159:57" + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "id": 12880, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12833, + "src": "18507:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12881, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18518:7:57", + "memberName": "indexer", + "nodeType": "MemberAccess", + "referencedDeclaration": 11292, + "src": "18507:18:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12882, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12826, + "src": "18527:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 12883, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12833, + "src": "18542:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12884, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18553:20:57", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11294, + "src": "18542:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 12885, + "name": "allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12833, + "src": "18575:10:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "id": 12886, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "18586:6:57", + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 11296, + "src": "18575:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12879, + "name": "AllocationClosed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12207, + "src": "18490:16:57", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$returns$__$", + "typeString": "function (address,address,bytes32,uint256)" + } + }, + "id": 12887, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "18490:103:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12888, + "nodeType": "EmitStatement", + "src": "18485:108:57" + } + ] + }, + "documentation": { + "id": 12824, + "nodeType": "StructuredDocumentation", + "src": "17132:574:57", + "text": " @notice Close an allocation\n Does not require presenting a POI, use {_collectIndexingRewards} to present a POI and collect rewards\n @dev Note that allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically\n without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated\n tokens for other purposes.\n Emits a {AllocationClosed} event\n @param _allocationId The id of the allocation to be closed" + }, + "id": 12890, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_closeAllocation", + "nameLocation": "17720:16:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12827, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12826, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "17745:13:57", + "nodeType": "VariableDeclaration", + "scope": 12890, + "src": "17737:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12825, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17737:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "17736:23:57" + }, + "returnParameters": { + "id": 12828, + "nodeType": "ParameterList", + "parameters": [], + "src": "17769:0:57" + }, + "scope": 13030, + "src": "17711:889:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12909, + "nodeType": "Block", + "src": "18931:134:57", + "statements": [ + { + "expression": { + "id": 12902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 12898, + "name": "rewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13061, + "src": "18941:18:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 12900, + "indexExpression": { + "id": 12899, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12893, + "src": "18960:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "18941:28:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 12901, + "name": "_rewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12895, + "src": "18972:19:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "18941:50:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 12903, + "nodeType": "ExpressionStatement", + "src": "18941:50:57" + }, + { + "eventCall": { + "arguments": [ + { + "id": 12905, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12893, + "src": "19028:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12906, + "name": "_rewardsDestination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12895, + "src": "19038:19:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 12904, + "name": "RewardsDestinationSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12223, + "src": "19006:21:57", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 12907, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19006:52:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12908, + "nodeType": "EmitStatement", + "src": "19001:57:57" + } + ] + }, + "documentation": { + "id": 12891, + "nodeType": "StructuredDocumentation", + "src": "18606:232:57", + "text": " @notice Sets the rewards destination for an indexer to receive indexing rewards\n @dev Emits a {RewardsDestinationSet} event\n @param _rewardsDestination The address where indexing rewards should be sent" + }, + "id": 12910, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setRewardsDestination", + "nameLocation": "18852:22:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12896, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12893, + "mutability": "mutable", + "name": "_indexer", + "nameLocation": "18883:8:57", + "nodeType": "VariableDeclaration", + "scope": 12910, + "src": "18875:16:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12892, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18875:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12895, + "mutability": "mutable", + "name": "_rewardsDestination", + "nameLocation": "18901:19:57", + "nodeType": "VariableDeclaration", + "scope": 12910, + "src": "18893:27:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12894, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18893:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "18874:47:57" + }, + "returnParameters": { + "id": 12897, + "nodeType": "ParameterList", + "parameters": [], + "src": "18931:0:57" + }, + "scope": 13030, + "src": "18843:222:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12924, + "nodeType": "Block", + "src": "19386:102:57", + "statements": [ + { + "expression": { + "id": 12918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12916, + "name": "maxPOIStaleness", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13056, + "src": "19396:15:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 12917, + "name": "_maxPOIStaleness", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12913, + "src": "19414:16:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19396:34:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12919, + "nodeType": "ExpressionStatement", + "src": "19396:34:57" + }, + { + "eventCall": { + "arguments": [ + { + "id": 12921, + "name": "_maxPOIStaleness", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12913, + "src": "19464:16:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12920, + "name": "MaxPOIStalenessSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12228, + "src": "19445:18:57", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 12922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19445:36:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12923, + "nodeType": "EmitStatement", + "src": "19440:41:57" + } + ] + }, + "documentation": { + "id": 12911, + "nodeType": "StructuredDocumentation", + "src": "19071:246:57", + "text": " @notice Sets the maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\n @dev Emits a {MaxPOIStalenessSet} event\n @param _maxPOIStaleness The max POI staleness in seconds" + }, + "id": 12925, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setMaxPOIStaleness", + "nameLocation": "19331:19:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12914, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12913, + "mutability": "mutable", + "name": "_maxPOIStaleness", + "nameLocation": "19359:16:57", + "nodeType": "VariableDeclaration", + "scope": 12925, + "src": "19351:24:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12912, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19351:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "19350:26:57" + }, + "returnParameters": { + "id": 12915, + "nodeType": "ParameterList", + "parameters": [], + "src": "19386:0:57" + }, + "scope": 13030, + "src": "19322:166:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12939, + "nodeType": "Block", + "src": "19707:54:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12936, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12928, + "src": "19740:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12934, + "name": "allocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13042, + "src": "19724:11:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State storage ref)" + } + }, + "id": 12935, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "19736:3:57", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 11554, + "src": "19724:15:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", + "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" + } + }, + "id": 12937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "19724:30:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State memory" + } + }, + "functionReturnParameters": 12933, + "id": 12938, + "nodeType": "Return", + "src": "19717:37:57" + } + ] + }, + "documentation": { + "id": 12926, + "nodeType": "StructuredDocumentation", + "src": "19494:113:57", + "text": " @notice Gets the details of an allocation\n @param _allocationId The id of the allocation" + }, + "id": 12940, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getAllocation", + "nameLocation": "19621:14:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12929, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12928, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "19644:13:57", + "nodeType": "VariableDeclaration", + "scope": 12940, + "src": "19636:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12927, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19636:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "19635:23:57" + }, + "returnParameters": { + "id": 12933, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12932, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12940, + "src": "19682:23:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_memory_ptr", + "typeString": "struct Allocation.State" + }, + "typeName": { + "id": 12931, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12930, + "name": "Allocation.State", + "nameLocations": [ + "19682:10:57", + "19693:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "19682:16:57" + }, + "referencedDeclaration": 11307, + "src": "19682:16:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "19681:25:57" + }, + "scope": 13030, + "src": "19612:149:57", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12954, + "nodeType": "Block", + "src": "20005:60:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12951, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12943, + "src": "20044:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12949, + "name": "legacyAllocations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13048, + "src": "20022:17:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" + } + }, + "id": 12950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "20040:3:57", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 12010, + "src": "20022:21:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$_t_address_$returns$_t_struct$_State_$11933_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$", + "typeString": "function (mapping(address => struct LegacyAllocation.State storage ref),address) view returns (struct LegacyAllocation.State memory)" + } + }, + "id": 12952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20022:36:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State memory" + } + }, + "functionReturnParameters": 12948, + "id": 12953, + "nodeType": "Return", + "src": "20015:43:57" + } + ] + }, + "documentation": { + "id": 12941, + "nodeType": "StructuredDocumentation", + "src": "19767:126:57", + "text": " @notice Gets the details of a legacy allocation\n @param _allocationId The id of the legacy allocation" + }, + "id": 12955, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getLegacyAllocation", + "nameLocation": "19907:20:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12944, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12943, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "19936:13:57", + "nodeType": "VariableDeclaration", + "scope": 12955, + "src": "19928:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12942, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19928:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "19927:23:57" + }, + "returnParameters": { + "id": 12948, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12947, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12955, + "src": "19974:29:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_memory_ptr", + "typeString": "struct LegacyAllocation.State" + }, + "typeName": { + "id": 12946, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 12945, + "name": "LegacyAllocation.State", + "nameLocations": [ + "19974:16:57", + "19991:5:57" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "19974:22:57" + }, + "referencedDeclaration": 11933, + "src": "19974:22:57", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + }, + "visibility": "internal" + } + ], + "src": "19973:31:57" + }, + "scope": 13030, + "src": "19898:167:57", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12976, + "nodeType": "Block", + "src": "20358:122:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 12969, + "name": "EIP712_ALLOCATION_PROOF_TYPEHASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12153, + "src": "20413:32:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 12970, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12958, + "src": "20447:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12971, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12960, + "src": "20457:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 12967, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "20402:3:57", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 12968, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "20406:6:57", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "20402:10:57", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 12972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20402:69:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 12966, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "20392:9:57", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 12973, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20392:80:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 12965, + "name": "_hashTypedDataV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5573, + "src": "20375:16:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + } + }, + "id": 12974, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20375:98:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 12964, + "id": 12975, + "nodeType": "Return", + "src": "20368:105:57" + } + ] + }, + "documentation": { + "id": 12956, + "nodeType": "StructuredDocumentation", + "src": "20071:177:57", + "text": " @notice Encodes the allocation proof for EIP712 signing\n @param _indexer The address of the indexer\n @param _allocationId The id of the allocation" + }, + "id": 12977, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_encodeAllocationProof", + "nameLocation": "20262:22:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12961, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12958, + "mutability": "mutable", + "name": "_indexer", + "nameLocation": "20293:8:57", + "nodeType": "VariableDeclaration", + "scope": 12977, + "src": "20285:16:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12957, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20285:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12960, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "20311:13:57", + "nodeType": "VariableDeclaration", + "scope": 12977, + "src": "20303:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12959, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20303:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "20284:41:57" + }, + "returnParameters": { + "id": 12964, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12963, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12977, + "src": "20349:7:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12962, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "20349:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "20348:9:57" + }, + "scope": 13030, + "src": "20253:227:57", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12996, + "nodeType": "Block", + "src": "20864:102:57", + "statements": [ + { + "expression": { + "id": 12994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "20881:78:57", + "subExpression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12989, + "name": "_graphStaking", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4540, + "src": "20915:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", + "typeString": "function () view returns (contract IHorizonStaking)" + } + }, + "id": 12990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20915:15:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + } + }, + { + "id": 12991, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12980, + "src": "20932:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 12992, + "name": "_delegationRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12982, + "src": "20942:16:57", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IHorizonStaking_$2235", + "typeString": "contract IHorizonStaking" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "id": 12987, + "name": "allocationProvisionTracker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13053, + "src": "20882:26:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 12988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "20909:5:57", + "memberName": "check", + "nodeType": "MemberAccess", + "referencedDeclaration": 1554, + "src": "20882:32:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_uint256_$_$_t_contract$_IHorizonStaking_$2235_$_t_address_$_t_uint32_$returns$_t_bool_$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "function (mapping(address => uint256),contract IHorizonStaking,address,uint32) view returns (bool)" + } + }, + "id": 12993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "20882:77:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 12986, + "id": 12995, + "nodeType": "Return", + "src": "20874:85:57" + } + ] + }, + "documentation": { + "id": 12978, + "nodeType": "StructuredDocumentation", + "src": "20486:275:57", + "text": " @notice Checks if an allocation is over-allocated\n @param _indexer The address of the indexer\n @param _delegationRatio The delegation ratio to consider when locking tokens\n @return True if the allocation is over-allocated, false otherwise" + }, + "id": 12997, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isOverAllocated", + "nameLocation": "20775:16:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12983, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12980, + "mutability": "mutable", + "name": "_indexer", + "nameLocation": "20800:8:57", + "nodeType": "VariableDeclaration", + "scope": 12997, + "src": "20792:16:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12979, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20792:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12982, + "mutability": "mutable", + "name": "_delegationRatio", + "nameLocation": "20817:16:57", + "nodeType": "VariableDeclaration", + "scope": 12997, + "src": "20810:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 12981, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "20810:6:57", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "20791:43:57" + }, + "returnParameters": { + "id": 12986, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12985, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 12997, + "src": "20858:4:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 12984, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "20858:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "20857:6:57" + }, + "scope": 13030, + "src": "20766:200:57", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13028, + "nodeType": "Block", + "src": "21458:210:57", + "statements": [ + { + "assignments": [ + 13008 + ], + "declarations": [ + { + "constant": false, + "id": 13008, + "mutability": "mutable", + "name": "signer", + "nameLocation": "21476:6:57", + "nodeType": "VariableDeclaration", + "scope": 13028, + "src": "21468:14:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13007, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21468:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 13017, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 13012, + "name": "_indexer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13000, + "src": "21522:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 13013, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13002, + "src": "21532:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 13011, + "name": "_encodeAllocationProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12977, + "src": "21499:22:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bytes32_$", + "typeString": "function (address,address) view returns (bytes32)" + } + }, + "id": 13014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21499:47:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 13015, + "name": "_proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13004, + "src": "21548:6:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 13009, + "name": "ECDSA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6730, + "src": "21485:5:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ECDSA_$6730_$", + "typeString": "type(library ECDSA)" + } + }, + "id": 13010, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "21491:7:57", + "memberName": "recover", + "nodeType": "MemberAccess", + "referencedDeclaration": 6486, + "src": "21485:13:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes32,bytes memory) pure returns (address)" + } + }, + "id": 13016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21485:70:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21468:87:57" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 13021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13019, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13008, + "src": "21573:6:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 13020, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13002, + "src": "21583:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "21573:23:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 13023, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13008, + "src": "21638:6:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 13024, + "name": "_allocationId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13002, + "src": "21646:13:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 13022, + "name": "AllocationManagerInvalidAllocationProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12235, + "src": "21598:39:57", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", + "typeString": "function (address,address) pure returns (error)" + } + }, + "id": 13025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21598:62:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 13018, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "21565:7:57", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 13026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "21565:96:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13027, + "nodeType": "ExpressionStatement", + "src": "21565:96:57" + } + ] + }, + "documentation": { + "id": 12998, + "nodeType": "StructuredDocumentation", + "src": "20972:374:57", + "text": " @notice Verifies ownership of an allocation id by verifying an EIP712 allocation proof\n @dev Requirements:\n - Signer must be the allocation id address\n @param _indexer The address of the indexer\n @param _allocationId The id of the allocation\n @param _proof The EIP712 proof, an EIP712 signed message of (indexer,allocationId)" + }, + "id": 13029, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_verifyAllocationProof", + "nameLocation": "21360:22:57", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13005, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13000, + "mutability": "mutable", + "name": "_indexer", + "nameLocation": "21391:8:57", + "nodeType": "VariableDeclaration", + "scope": 13029, + "src": "21383:16:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 12999, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21383:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13002, + "mutability": "mutable", + "name": "_allocationId", + "nameLocation": "21409:13:57", + "nodeType": "VariableDeclaration", + "scope": 13029, + "src": "21401:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13001, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21401:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13004, + "mutability": "mutable", + "name": "_proof", + "nameLocation": "21437:6:57", + "nodeType": "VariableDeclaration", + "scope": 13029, + "src": "21424:19:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 13003, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "21424:5:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "21382:62:57" + }, + "returnParameters": { + "id": 13006, + "nodeType": "ParameterList", + "parameters": [], + "src": "21458:0:57" + }, + "scope": 13030, + "src": "21351:317:57", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 13031, + "src": "1407:20263:57", + "usedErrors": [ + 4380, + 4865, + 4868, + 12235, + 12238, + 12243, + 12250 + ], + "usedEvents": [ + 4375, + 4873, + 5776, + 12164, + 12183, + 12196, + 12207, + 12216, + 12223, + 12228 + ] + } + ], + "src": "45:21626:57" + }, + "id": 57 + }, + "contracts/utilities/AllocationManagerStorage.sol": { + "ast": { + "absolutePath": "contracts/utilities/AllocationManagerStorage.sol", + "exportedSymbols": { + "Allocation": [ + 11674 + ], + "AllocationManagerV1Storage": [ + 13072 + ], + "LegacyAllocation": [ + 12086 + ] + }, + "id": 13073, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 13032, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:58" + }, + { + "absolutePath": "contracts/libraries/Allocation.sol", + "file": "../libraries/Allocation.sol", + "id": 13034, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13073, + "sourceUnit": 11675, + "src": "70:57:58", + "symbolAliases": [ + { + "foreign": { + "id": 13033, + "name": "Allocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11674, + "src": "79:10:58", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/LegacyAllocation.sol", + "file": "../libraries/LegacyAllocation.sol", + "id": 13036, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13073, + "sourceUnit": 12087, + "src": "128:69:58", + "symbolAliases": [ + { + "foreign": { + "id": 13035, + "name": "LegacyAllocation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12086, + "src": "137:16:58", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "AllocationManagerV1Storage", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 13072, + "linearizedBaseContracts": [ + 13072 + ], + "name": "AllocationManagerV1Storage", + "nameLocation": "217:26:58", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "documentation": { + "id": 13037, + "nodeType": "StructuredDocumentation", + "src": "250:30:58", + "text": "@notice Allocation details" + }, + "functionSelector": "52a9039c", + "id": 13042, + "mutability": "mutable", + "name": "allocations", + "nameLocation": "353:11:58", + "nodeType": "VariableDeclaration", + "scope": 13072, + "src": "285:79:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "typeName": { + "id": 13041, + "keyName": "allocationId", + "keyNameLocation": "301:12:58", + "keyType": { + "id": 13038, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "293:7:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "285:60:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", + "typeString": "mapping(address => struct Allocation.State)" + }, + "valueName": "allocation", + "valueNameLocation": "334:10:58", + "valueType": { + "id": 13040, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13039, + "name": "Allocation.State", + "nameLocations": [ + "317:10:58", + "328:5:58" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11307, + "src": "317:16:58" + }, + "referencedDeclaration": 11307, + "src": "317:16:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11307_storage_ptr", + "typeString": "struct Allocation.State" + } + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 13043, + "nodeType": "StructuredDocumentation", + "src": "371:37:58", + "text": "@notice Legacy allocation details" + }, + "functionSelector": "93d4e7cb", + "id": 13048, + "mutability": "mutable", + "name": "legacyAllocations", + "nameLocation": "487:17:58", + "nodeType": "VariableDeclaration", + "scope": 13072, + "src": "413:91:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "typeName": { + "id": 13047, + "keyName": "allocationId", + "keyNameLocation": "429:12:58", + "keyType": { + "id": 13044, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "421:7:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "413:66:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", + "typeString": "mapping(address => struct LegacyAllocation.State)" + }, + "valueName": "allocation", + "valueNameLocation": "468:10:58", + "valueType": { + "id": 13046, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13045, + "name": "LegacyAllocation.State", + "nameLocations": [ + "445:16:58", + "462:5:58" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11933, + "src": "445:22:58" + }, + "referencedDeclaration": 11933, + "src": "445:22:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11933_storage_ptr", + "typeString": "struct LegacyAllocation.State" + } + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 13049, + "nodeType": "StructuredDocumentation", + "src": "511:47:58", + "text": "@notice Tracks allocated tokens per indexer" + }, + "functionSelector": "6234e216", + "id": 13053, + "mutability": "mutable", + "name": "allocationProvisionTracker", + "nameLocation": "613:26:58", + "nodeType": "VariableDeclaration", + "scope": 13072, + "src": "563:76:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 13052, + "keyName": "indexer", + "keyNameLocation": "579:7:58", + "keyType": { + "id": 13050, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "571:7:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "563:42:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "tokens", + "valueNameLocation": "598:6:58", + "valueType": { + "id": 13051, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "590:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 13054, + "nodeType": "StructuredDocumentation", + "src": "646:111:58", + "text": "@notice Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards" + }, + "functionSelector": "85e82baf", + "id": 13056, + "mutability": "mutable", + "name": "maxPOIStaleness", + "nameLocation": "777:15:58", + "nodeType": "VariableDeclaration", + "scope": 13072, + "src": "762:30:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13055, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "762:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 13057, + "nodeType": "StructuredDocumentation", + "src": "799:51:58", + "text": "@notice Destination of accrued indexing rewards" + }, + "functionSelector": "7203ca78", + "id": 13061, + "mutability": "mutable", + "name": "rewardsDestination", + "nameLocation": "910:18:58", + "nodeType": "VariableDeclaration", + "scope": 13072, + "src": "855:73:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "typeName": { + "id": 13060, + "keyName": "indexer", + "keyNameLocation": "871:7:58", + "keyType": { + "id": 13058, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "863:7:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "855:47:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "valueName": "destination", + "valueNameLocation": "890:11:58", + "valueType": { + "id": 13059, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "882:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 13062, + "nodeType": "StructuredDocumentation", + "src": "935:112:58", + "text": "@notice Track total tokens allocated per subgraph deployment\n @dev Used to calculate indexing rewards" + }, + "functionSelector": "3afd23fe", + "id": 13066, + "mutability": "mutable", + "name": "subgraphAllocatedTokens", + "nameLocation": "1115:23:58", + "nodeType": "VariableDeclaration", + "scope": 13072, + "src": "1052:86:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 13065, + "keyName": "subgraphDeploymentId", + "keyNameLocation": "1068:20:58", + "keyType": { + "id": 13063, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1060:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "1052:55:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueName": "tokens", + "valueNameLocation": "1100:6:58", + "valueType": { + "id": 13064, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1092:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 13067, + "nodeType": "StructuredDocumentation", + "src": "1145:57:58", + "text": "@dev Gap to allow adding variables in future upgrades" + }, + "id": 13071, + "mutability": "mutable", + "name": "__gap", + "nameLocation": "1227:5:58", + "nodeType": "VariableDeclaration", + "scope": 13072, + "src": "1207:25:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 13068, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1207:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13070, + "length": { + "hexValue": "3530", + "id": 13069, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1215:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "1207:11:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + } + ], + "scope": 13073, + "src": "199:1036:58", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "45:1191:58" + }, + "id": 58 + }, + "contracts/utilities/AttestationManager.sol": { + "ast": { + "absolutePath": "contracts/utilities/AttestationManager.sol", + "exportedSymbols": { + "Attestation": [ + 11920 + ], + "AttestationManager": [ + 13226 + ], + "AttestationManagerV1Storage": [ + 13237 + ], + "ECDSA": [ + 6730 + ], + "Initializable": [ + 5102 + ] + }, + "id": 13227, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 13074, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:59" + }, + { + "absolutePath": "contracts/utilities/AttestationManagerStorage.sol", + "file": "./AttestationManagerStorage.sol", + "id": 13076, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13227, + "sourceUnit": 13238, + "src": "70:78:59", + "symbolAliases": [ + { + "foreign": { + "id": 13075, + "name": "AttestationManagerV1Storage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13237, + "src": "79:27:59", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "id": 13078, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13227, + "sourceUnit": 6731, + "src": "150:77:59", + "symbolAliases": [ + { + "foreign": { + "id": 13077, + "name": "ECDSA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6730, + "src": "159:5:59", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "id": 13080, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13227, + "sourceUnit": 5103, + "src": "228:98:59", + "symbolAliases": [ + { + "foreign": { + "id": 13079, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5102, + "src": "237:13:59", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/Attestation.sol", + "file": "../libraries/Attestation.sol", + "id": 13082, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13227, + "sourceUnit": 11921, + "src": "327:59:59", + "symbolAliases": [ + { + "foreign": { + "id": 13081, + "name": "Attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11920, + "src": "336:11:59", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 13084, + "name": "Initializable", + "nameLocations": [ + "631:13:59" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5102, + "src": "631:13:59" + }, + "id": 13085, + "nodeType": "InheritanceSpecifier", + "src": "631:13:59" + }, + { + "baseName": { + "id": 13086, + "name": "AttestationManagerV1Storage", + "nameLocations": [ + "646:27:59" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 13237, + "src": "646:27:59" + }, + "id": 13087, + "nodeType": "InheritanceSpecifier", + "src": "646:27:59" + } + ], + "canonicalName": "AttestationManager", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 13083, + "nodeType": "StructuredDocumentation", + "src": "388:202:59", + "text": " @title AttestationManager contract\n @notice A helper contract implementing attestation verification.\n Uses a custom implementation of EIP712 for backwards compatibility with attestations." + }, + "fullyImplemented": true, + "id": 13226, + "linearizedBaseContracts": [ + 13226, + 13237, + 5102 + ], + "name": "AttestationManager", + "nameLocation": "609:18:59", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "documentation": { + "id": 13088, + "nodeType": "StructuredDocumentation", + "src": "680:47:59", + "text": "@notice EIP712 type hash for Receipt struct" + }, + "id": 13093, + "mutability": "constant", + "name": "RECEIPT_TYPE_HASH", + "nameLocation": "757:17:59", + "nodeType": "VariableDeclaration", + "scope": 13226, + "src": "732:142:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13089, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "732:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "52656365697074286279746573333220726571756573744349442c6279746573333220726573706f6e73654349442c627974657333322073756267726170684465706c6f796d656e74494429", + "id": 13091, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "795:78:59", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6", + "typeString": "literal_string \"Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)\"" + }, + "value": "Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6", + "typeString": "literal_string \"Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)\"" + } + ], + "id": 13090, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "785:9:59", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 13092, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "785:89:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": true, + "documentation": { + "id": 13094, + "nodeType": "StructuredDocumentation", + "src": "881:35:59", + "text": "@notice EIP712 domain type hash" + }, + "id": 13099, + "mutability": "constant", + "name": "DOMAIN_TYPE_HASH", + "nameLocation": "946:16:59", + "nodeType": "VariableDeclaration", + "scope": 13226, + "src": "921:160:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13095, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "921:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429", + "id": 13097, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "983:97:59", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472", + "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\"" + }, + "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_d87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472", + "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\"" + } + ], + "id": 13096, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "973:9:59", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 13098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "973:108:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": true, + "documentation": { + "id": 13100, + "nodeType": "StructuredDocumentation", + "src": "1088:30:59", + "text": "@notice EIP712 domain name" + }, + "id": 13105, + "mutability": "constant", + "name": "DOMAIN_NAME_HASH", + "nameLocation": "1148:16:59", + "nodeType": "VariableDeclaration", + "scope": 13226, + "src": "1123:71:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13101, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1123:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "47726170682050726f746f636f6c", + "id": 13103, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1177:16:59", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4", + "typeString": "literal_string \"Graph Protocol\"" + }, + "value": "Graph Protocol" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4", + "typeString": "literal_string \"Graph Protocol\"" + } + ], + "id": 13102, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1167:9:59", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 13104, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1167:27:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": true, + "documentation": { + "id": 13106, + "nodeType": "StructuredDocumentation", + "src": "1201:33:59", + "text": "@notice EIP712 domain version" + }, + "id": 13111, + "mutability": "constant", + "name": "DOMAIN_VERSION_HASH", + "nameLocation": "1264:19:59", + "nodeType": "VariableDeclaration", + "scope": 13226, + "src": "1239:61:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13107, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1239:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "30", + "id": 13109, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1296:3:59", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", + "typeString": "literal_string \"0\"" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", + "typeString": "literal_string \"0\"" + } + ], + "id": 13108, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1286:9:59", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 13110, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1286:14:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": true, + "documentation": { + "id": 13112, + "nodeType": "StructuredDocumentation", + "src": "1307:30:59", + "text": "@notice EIP712 domain salt" + }, + "id": 13115, + "mutability": "constant", + "name": "DOMAIN_SALT", + "nameLocation": "1367:11:59", + "nodeType": "VariableDeclaration", + "scope": 13226, + "src": "1342:105:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13113, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1342:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "hexValue": "307861303730666662316364373430393634396266373738323263636537343439353436386530366462666165663039353536383338626631383836373962396332", + "id": 13114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1381:66:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_72569707383443547382267636376646613935103975378761491950889697921835323734466_by_1", + "typeString": "int_const 7256...(69 digits omitted)...4466" + }, + "value": "0xa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c2" + }, + "visibility": "private" + }, + { + "body": { + "id": 13124, + "nodeType": "Block", + "src": "1662:54:59", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13121, + "name": "__AttestationManager_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13150, + "src": "1672:35:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 13122, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1672:37:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13123, + "nodeType": "ExpressionStatement", + "src": "1672:37:59" + } + ] + }, + "documentation": { + "id": 13116, + "nodeType": "StructuredDocumentation", + "src": "1454:87:59", + "text": " @dev Initialize the AttestationManager contract and parent contracts" + }, + "id": 13125, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 13119, + "kind": "modifierInvocation", + "modifierName": { + "id": 13118, + "name": "onlyInitializing", + "nameLocations": [ + "1645:16:59" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "1645:16:59" + }, + "nodeType": "ModifierInvocation", + "src": "1645:16:59" + } + ], + "name": "__AttestationManager_init", + "nameLocation": "1608:25:59", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13117, + "nodeType": "ParameterList", + "parameters": [], + "src": "1633:2:59" + }, + "returnParameters": { + "id": 13120, + "nodeType": "ParameterList", + "parameters": [], + "src": "1662:0:59" + }, + "scope": 13226, + "src": "1599:117:59", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13149, + "nodeType": "Block", + "src": "1919:289:59", + "statements": [ + { + "expression": { + "id": 13147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13131, + "name": "_domainSeparator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13231, + "src": "1929:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 13135, + "name": "DOMAIN_TYPE_HASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13099, + "src": "1999:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 13136, + "name": "DOMAIN_NAME_HASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13105, + "src": "2033:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 13137, + "name": "DOMAIN_VERSION_HASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13111, + "src": "2067:19:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 13138, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "2104:5:59", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 13139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2110:7:59", + "memberName": "chainid", + "nodeType": "MemberAccess", + "src": "2104:13:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 13142, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2143:4:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_AttestationManager_$13226", + "typeString": "contract AttestationManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_AttestationManager_$13226", + "typeString": "contract AttestationManager" + } + ], + "id": 13141, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2135:7:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 13140, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2135:7:59", + "typeDescriptions": {} + } + }, + "id": 13143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2135:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 13144, + "name": "DOMAIN_SALT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13115, + "src": "2166:11:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 13133, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1971:3:59", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 13134, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1975:6:59", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "1971:10:59", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 13145, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1971:220:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 13132, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1948:9:59", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 13146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1948:253:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "1929:272:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13148, + "nodeType": "ExpressionStatement", + "src": "1929:272:59" + } + ] + }, + "documentation": { + "id": 13126, + "nodeType": "StructuredDocumentation", + "src": "1722:66:59", + "text": " @dev Initialize the AttestationManager contract" + }, + "id": 13150, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 13129, + "kind": "modifierInvocation", + "modifierName": { + "id": 13128, + "name": "onlyInitializing", + "nameLocations": [ + "1902:16:59" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 5011, + "src": "1902:16:59" + }, + "nodeType": "ModifierInvocation", + "src": "1902:16:59" + } + ], + "name": "__AttestationManager_init_unchained", + "nameLocation": "1855:35:59", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13127, + "nodeType": "ParameterList", + "parameters": [], + "src": "1890:2:59" + }, + "returnParameters": { + "id": 13130, + "nodeType": "ParameterList", + "parameters": [], + "src": "1919:0:59" + }, + "scope": 13226, + "src": "1846:362:59", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13194, + "nodeType": "Block", + "src": "2467:605:59", + "statements": [ + { + "assignments": [ + 13163 + ], + "declarations": [ + { + "constant": false, + "id": 13163, + "mutability": "mutable", + "name": "receipt", + "nameLocation": "2582:7:59", + "nodeType": "VariableDeclaration", + "scope": 13194, + "src": "2555:34:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt" + }, + "typeName": { + "id": 13162, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13161, + "name": "Attestation.Receipt", + "nameLocations": [ + "2555:11:59", + "2567:7:59" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11685, + "src": "2555:19:59" + }, + "referencedDeclaration": 11685, + "src": "2555:19:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_storage_ptr", + "typeString": "struct Attestation.Receipt" + } + }, + "visibility": "internal" + } + ], + "id": 13173, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 13166, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13154, + "src": "2625:12:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 13167, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2638:10:59", + "memberName": "requestCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11688, + "src": "2625:23:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 13168, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13154, + "src": "2662:12:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 13169, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2675:11:59", + "memberName": "responseCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11690, + "src": "2662:24:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 13170, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13154, + "src": "2700:12:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 13171, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2713:20:59", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11692, + "src": "2700:33:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 13164, + "name": "Attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11920, + "src": "2592:11:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", + "typeString": "type(library Attestation)" + } + }, + "id": 13165, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2604:7:59", + "memberName": "Receipt", + "nodeType": "MemberAccess", + "referencedDeclaration": 11685, + "src": "2592:19:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Receipt_$11685_storage_ptr_$", + "typeString": "type(struct Attestation.Receipt storage pointer)" + } + }, + "id": 13172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2592:151:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2555:188:59" + }, + { + "assignments": [ + 13175 + ], + "declarations": [ + { + "constant": false, + "id": 13175, + "mutability": "mutable", + "name": "messageHash", + "nameLocation": "2761:11:59", + "nodeType": "VariableDeclaration", + "scope": 13194, + "src": "2753:19:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13174, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2753:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 13179, + "initialValue": { + "arguments": [ + { + "id": 13177, + "name": "receipt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13163, + "src": "2790:7:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt memory" + } + ], + "id": 13176, + "name": "_encodeReceipt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13225, + "src": "2775:14:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Receipt_$11685_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (struct Attestation.Receipt memory) view returns (bytes32)" + } + }, + "id": 13178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2775:23:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2753:45:59" + }, + { + "expression": { + "arguments": [ + { + "id": 13182, + "name": "messageHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13175, + "src": "2987:11:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "expression": { + "id": 13185, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13154, + "src": "3017:12:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 13186, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3030:1:59", + "memberName": "r", + "nodeType": "MemberAccess", + "referencedDeclaration": 11694, + "src": "3017:14:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 13187, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13154, + "src": "3033:12:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 13188, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3046:1:59", + "memberName": "s", + "nodeType": "MemberAccess", + "referencedDeclaration": 11696, + "src": "3033:14:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 13189, + "name": "_attestation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13154, + "src": "3049:12:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State memory" + } + }, + "id": 13190, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3062:1:59", + "memberName": "v", + "nodeType": "MemberAccess", + "referencedDeclaration": 11698, + "src": "3049:14:59", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + ], + "expression": { + "id": 13183, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3000:3:59", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 13184, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3004:12:59", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "3000:16:59", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 13191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3000:64:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 13180, + "name": "ECDSA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6730, + "src": "2973:5:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ECDSA_$6730_$", + "typeString": "type(library ECDSA)" + } + }, + "id": 13181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2979:7:59", + "memberName": "recover", + "nodeType": "MemberAccess", + "referencedDeclaration": 6486, + "src": "2973:13:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes32,bytes memory) pure returns (address)" + } + }, + "id": 13192, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2973:92:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 13158, + "id": 13193, + "nodeType": "Return", + "src": "2966:99:59" + } + ] + }, + "documentation": { + "id": 13151, + "nodeType": "StructuredDocumentation", + "src": "2214:153:59", + "text": " @dev Recover the signer address of the `_attestation`.\n @param _attestation The attestation struct\n @return Signer address" + }, + "id": 13195, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_recoverSigner", + "nameLocation": "2381:14:59", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13154, + "mutability": "mutable", + "name": "_attestation", + "nameLocation": "2421:12:59", + "nodeType": "VariableDeclaration", + "scope": 13195, + "src": "2396:37:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_memory_ptr", + "typeString": "struct Attestation.State" + }, + "typeName": { + "id": 13153, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13152, + "name": "Attestation.State", + "nameLocations": [ + "2396:11:59", + "2408:5:59" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11699, + "src": "2396:17:59" + }, + "referencedDeclaration": 11699, + "src": "2396:17:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_State_$11699_storage_ptr", + "typeString": "struct Attestation.State" + } + }, + "visibility": "internal" + } + ], + "src": "2395:39:59" + }, + "returnParameters": { + "id": 13158, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13157, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 13195, + "src": "2458:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13156, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2458:7:59", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2457:9:59" + }, + "scope": 13226, + "src": "2372:700:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13224, + "nodeType": "Block", + "src": "3606:576:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "1901", + "id": 13207, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3700:10:59", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", + "typeString": "literal_string hex\"1901\"" + }, + "value": "\u0019\u0001" + }, + { + "id": 13208, + "name": "_domainSeparator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13231, + "src": "3775:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 13212, + "name": "RECEIPT_TYPE_HASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13093, + "src": "3888:17:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 13213, + "name": "_receipt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13199, + "src": "3935:8:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt memory" + } + }, + "id": 13214, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3944:10:59", + "memberName": "requestCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11680, + "src": "3935:19:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 13215, + "name": "_receipt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13199, + "src": "3984:8:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt memory" + } + }, + "id": 13216, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3993:11:59", + "memberName": "responseCID", + "nodeType": "MemberAccess", + "referencedDeclaration": 11682, + "src": "3984:20:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 13217, + "name": "_receipt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13199, + "src": "4034:8:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt memory" + } + }, + "id": 13218, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4043:20:59", + "memberName": "subgraphDeploymentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 11684, + "src": "4034:29:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 13210, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3848:3:59", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 13211, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3852:6:59", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "3848:10:59", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 13219, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3848:241:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 13209, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "3813:9:59", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 13220, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3813:330:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", + "typeString": "literal_string hex\"1901\"" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 13205, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3662:3:59", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 13206, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3666:12:59", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "3662:16:59", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 13221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3662:499:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 13204, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "3635:9:59", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 13222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3635:540:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 13203, + "id": 13223, + "nodeType": "Return", + "src": "3616:559:59" + } + ] + }, + "documentation": { + "id": 13196, + "nodeType": "StructuredDocumentation", + "src": "3078:430:59", + "text": " @dev Get the message hash that a indexer used to sign the receipt.\n Encodes a receipt using a domain separator, as described on\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\n @notice Return the message hash used to sign the receipt\n @param _receipt Receipt returned by indexer and submitted by fisherman\n @return Message hash used to sign the receipt" + }, + "id": 13225, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_encodeReceipt", + "nameLocation": "3522:14:59", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13200, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13199, + "mutability": "mutable", + "name": "_receipt", + "nameLocation": "3564:8:59", + "nodeType": "VariableDeclaration", + "scope": 13225, + "src": "3537:35:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", + "typeString": "struct Attestation.Receipt" + }, + "typeName": { + "id": 13198, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13197, + "name": "Attestation.Receipt", + "nameLocations": [ + "3537:11:59", + "3549:7:59" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11685, + "src": "3537:19:59" + }, + "referencedDeclaration": 11685, + "src": "3537:19:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Receipt_$11685_storage_ptr", + "typeString": "struct Attestation.Receipt" + } + }, + "visibility": "internal" + } + ], + "src": "3536:37:59" + }, + "returnParameters": { + "id": 13203, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13202, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 13225, + "src": "3597:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13201, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3597:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3596:9:59" + }, + "scope": 13226, + "src": "3513:669:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 13227, + "src": "591:3593:59", + "usedErrors": [ + 4865, + 4868 + ], + "usedEvents": [ + 4873 + ] + } + ], + "src": "45:4140:59" + }, + "id": 59 + }, + "contracts/utilities/AttestationManagerStorage.sol": { + "ast": { + "absolutePath": "contracts/utilities/AttestationManagerStorage.sol", + "exportedSymbols": { + "AttestationManagerV1Storage": [ + 13237 + ] + }, + "id": 13238, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 13228, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:60" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "AttestationManagerV1Storage", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 13237, + "linearizedBaseContracts": [ + 13237 + ], + "name": "AttestationManagerV1Storage", + "nameLocation": "88:27:60", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "documentation": { + "id": 13229, + "nodeType": "StructuredDocumentation", + "src": "122:32:60", + "text": "@dev EIP712 domain separator" + }, + "id": 13231, + "mutability": "mutable", + "name": "_domainSeparator", + "nameLocation": "176:16:60", + "nodeType": "VariableDeclaration", + "scope": 13237, + "src": "159:33:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13230, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "159:7:60", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "documentation": { + "id": 13232, + "nodeType": "StructuredDocumentation", + "src": "199:57:60", + "text": "@dev Gap to allow adding variables in future upgrades" + }, + "id": 13236, + "mutability": "mutable", + "name": "__gap", + "nameLocation": "281:5:60", + "nodeType": "VariableDeclaration", + "scope": 13237, + "src": "261:25:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 13233, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "261:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13235, + "length": { + "hexValue": "3530", + "id": 13234, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "269:2:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "261:11:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + } + ], + "scope": 13238, + "src": "70:219:60", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "45:245:60" + }, + "id": 60 + }, + "contracts/utilities/Directory.sol": { + "ast": { + "absolutePath": "contracts/utilities/Directory.sol", + "exportedSymbols": { + "Directory": [ + 13390 + ], + "ICuration": [ + 165 + ], + "IDisputeManager": [ + 11057 + ], + "ISubgraphService": [ + 11280 + ], + "ITAPCollector": [ + 2695 + ] + }, + "id": 13391, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 13239, + "literals": [ + "solidity", + "0.8", + ".27" + ], + "nodeType": "PragmaDirective", + "src": "45:23:61" + }, + { + "absolutePath": "contracts/interfaces/IDisputeManager.sol", + "file": "../interfaces/IDisputeManager.sol", + "id": 13241, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13391, + "sourceUnit": 11058, + "src": "70:68:61", + "symbolAliases": [ + { + "foreign": { + "id": 13240, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "79:15:61", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "contracts/interfaces/ISubgraphService.sol", + "file": "../interfaces/ISubgraphService.sol", + "id": 13243, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13391, + "sourceUnit": 11281, + "src": "139:70:61", + "symbolAliases": [ + { + "foreign": { + "id": 13242, + "name": "ISubgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11280, + "src": "148:16:61", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", + "file": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", + "id": 13245, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13391, + "sourceUnit": 2696, + "src": "210:94:61", + "symbolAliases": [ + { + "foreign": { + "id": 13244, + "name": "ITAPCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2695, + "src": "219:13:61", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "@graphprotocol/contracts/contracts/curation/ICuration.sol", + "file": "@graphprotocol/contracts/contracts/curation/ICuration.sol", + "id": 13247, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 13391, + "sourceUnit": 166, + "src": "305:86:61", + "symbolAliases": [ + { + "foreign": { + "id": 13246, + "name": "ICuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 165, + "src": "314:9:61", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "Directory", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 13248, + "nodeType": "StructuredDocumentation", + "src": "393:248:61", + "text": " @title Directory contract\n @notice This contract is meant to be inherited by {SubgraphService} contract.\n It contains the addresses of the contracts that the contract interacts with.\n Uses immutable variables to minimize gas costs." + }, + "fullyImplemented": true, + "id": 13390, + "linearizedBaseContracts": [ + 13390 + ], + "name": "Directory", + "nameLocation": "660:9:61", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "documentation": { + "id": 13249, + "nodeType": "StructuredDocumentation", + "src": "676:49:61", + "text": "@notice The Subgraph Service contract address" + }, + "id": 13252, + "mutability": "immutable", + "name": "SUBGRAPH_SERVICE", + "nameLocation": "765:16:61", + "nodeType": "VariableDeclaration", + "scope": 13390, + "src": "730:51:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + }, + "typeName": { + "id": 13251, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13250, + "name": "ISubgraphService", + "nameLocations": [ + "730:16:61" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11280, + "src": "730:16:61" + }, + "referencedDeclaration": 11280, + "src": "730:16:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 13253, + "nodeType": "StructuredDocumentation", + "src": "788:48:61", + "text": "@notice The Dispute Manager contract address" + }, + "id": 13256, + "mutability": "immutable", + "name": "DISPUTE_MANAGER", + "nameLocation": "875:15:61", + "nodeType": "VariableDeclaration", + "scope": 13390, + "src": "841:49:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + }, + "typeName": { + "id": 13255, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13254, + "name": "IDisputeManager", + "nameLocations": [ + "841:15:61" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11057, + "src": "841:15:61" + }, + "referencedDeclaration": 11057, + "src": "841:15:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 13257, + "nodeType": "StructuredDocumentation", + "src": "897:124:61", + "text": "@notice The TAP Collector contract address\n @dev Required to collect payments via Graph Horizon payments protocol" + }, + "id": 13260, + "mutability": "immutable", + "name": "TAP_COLLECTOR", + "nameLocation": "1058:13:61", + "nodeType": "VariableDeclaration", + "scope": 13390, + "src": "1026:45:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITAPCollector_$2695", + "typeString": "contract ITAPCollector" + }, + "typeName": { + "id": 13259, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13258, + "name": "ITAPCollector", + "nameLocations": [ + "1026:13:61" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2695, + "src": "1026:13:61" + }, + "referencedDeclaration": 2695, + "src": "1026:13:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITAPCollector_$2695", + "typeString": "contract ITAPCollector" + } + }, + "visibility": "private" + }, + { + "constant": false, + "documentation": { + "id": 13261, + "nodeType": "StructuredDocumentation", + "src": "1078:94:61", + "text": "@notice The Curation contract address\n @dev Required for curation fees distribution" + }, + "id": 13264, + "mutability": "immutable", + "name": "CURATION", + "nameLocation": "1205:8:61", + "nodeType": "VariableDeclaration", + "scope": 13390, + "src": "1177:36:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + }, + "typeName": { + "id": 13263, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13262, + "name": "ICuration", + "nameLocations": [ + "1177:9:61" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 165, + "src": "1177:9:61" + }, + "referencedDeclaration": 165, + "src": "1177:9:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "documentation": { + "id": 13265, + "nodeType": "StructuredDocumentation", + "src": "1220:317:61", + "text": " @notice Emitted when the Directory is initialized\n @param subgraphService The Subgraph Service contract address\n @param disputeManager The Dispute Manager contract address\n @param tapCollector The TAP Collector contract address\n @param curation The Curation contract address" + }, + "eventSelector": "4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda7", + "id": 13275, + "name": "SubgraphServiceDirectoryInitialized", + "nameLocation": "1548:35:61", + "nodeType": "EventDefinition", + "parameters": { + "id": 13274, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13267, + "indexed": false, + "mutability": "mutable", + "name": "subgraphService", + "nameLocation": "1601:15:61", + "nodeType": "VariableDeclaration", + "scope": 13275, + "src": "1593:23:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13266, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1593:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13269, + "indexed": false, + "mutability": "mutable", + "name": "disputeManager", + "nameLocation": "1634:14:61", + "nodeType": "VariableDeclaration", + "scope": 13275, + "src": "1626:22:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13268, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1626:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13271, + "indexed": false, + "mutability": "mutable", + "name": "tapCollector", + "nameLocation": "1666:12:61", + "nodeType": "VariableDeclaration", + "scope": 13275, + "src": "1658:20:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13270, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1658:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13273, + "indexed": false, + "mutability": "mutable", + "name": "curation", + "nameLocation": "1696:8:61", + "nodeType": "VariableDeclaration", + "scope": 13275, + "src": "1688:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13272, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1688:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1583:127:61" + }, + "src": "1542:169:61" + }, + { + "documentation": { + "id": 13276, + "nodeType": "StructuredDocumentation", + "src": "1717:173:61", + "text": " @notice Thrown when the caller is not the Dispute Manager\n @param caller The caller address\n @param disputeManager The Dispute Manager address" + }, + "errorSelector": "cdc0567f", + "id": 13282, + "name": "DirectoryNotDisputeManager", + "nameLocation": "1901:26:61", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 13281, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13278, + "mutability": "mutable", + "name": "caller", + "nameLocation": "1936:6:61", + "nodeType": "VariableDeclaration", + "scope": 13282, + "src": "1928:14:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13277, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1928:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13280, + "mutability": "mutable", + "name": "disputeManager", + "nameLocation": "1952:14:61", + "nodeType": "VariableDeclaration", + "scope": 13282, + "src": "1944:22:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13279, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1944:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1927:40:61" + }, + "src": "1895:73:61" + }, + { + "body": { + "id": 13304, + "nodeType": "Block", + "src": "2081:175:61", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 13292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 13286, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2112:3:61", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 13287, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2116:6:61", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2112:10:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 13290, + "name": "DISPUTE_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13256, + "src": "2134:15:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + ], + "id": 13289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2126:7:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 13288, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2126:7:61", + "typeDescriptions": {} + } + }, + "id": 13291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2126:24:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2112:38:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "expression": { + "id": 13294, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2191:3:61", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 13295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2195:6:61", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2191:10:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 13298, + "name": "DISPUTE_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13256, + "src": "2211:15:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + ], + "id": 13297, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2203:7:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 13296, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2203:7:61", + "typeDescriptions": {} + } + }, + "id": 13299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2203:24:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 13293, + "name": "DirectoryNotDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13282, + "src": "2164:26:61", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", + "typeString": "function (address,address) pure returns (error)" + } + }, + "id": 13300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2164:64:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 13285, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2091:7:61", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 13301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2091:147:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13302, + "nodeType": "ExpressionStatement", + "src": "2091:147:61" + }, + { + "id": 13303, + "nodeType": "PlaceholderStatement", + "src": "2248:1:61" + } + ] + }, + "documentation": { + "id": 13283, + "nodeType": "StructuredDocumentation", + "src": "1974:72:61", + "text": " @notice Checks that the caller is the Dispute Manager" + }, + "id": 13305, + "name": "onlyDisputeManager", + "nameLocation": "2060:18:61", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 13284, + "nodeType": "ParameterList", + "parameters": [], + "src": "2078:2:61" + }, + "src": "2051:205:61", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13348, + "nodeType": "Block", + "src": "2682:329:61", + "statements": [ + { + "expression": { + "id": 13321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13317, + "name": "SUBGRAPH_SERVICE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13252, + "src": "2692:16:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 13319, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13308, + "src": "2728:15:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 13318, + "name": "ISubgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11280, + "src": "2711:16:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ISubgraphService_$11280_$", + "typeString": "type(contract ISubgraphService)" + } + }, + "id": 13320, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2711:33:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "src": "2692:52:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "id": 13322, + "nodeType": "ExpressionStatement", + "src": "2692:52:61" + }, + { + "expression": { + "id": 13327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13323, + "name": "DISPUTE_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13256, + "src": "2754:15:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 13325, + "name": "disputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13310, + "src": "2788:14:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 13324, + "name": "IDisputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "2772:15:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", + "typeString": "type(contract IDisputeManager)" + } + }, + "id": 13326, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2772:31:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + }, + "src": "2754:49:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + }, + "id": 13328, + "nodeType": "ExpressionStatement", + "src": "2754:49:61" + }, + { + "expression": { + "id": 13333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13329, + "name": "TAP_COLLECTOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13260, + "src": "2813:13:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITAPCollector_$2695", + "typeString": "contract ITAPCollector" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 13331, + "name": "tapCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13312, + "src": "2843:12:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 13330, + "name": "ITAPCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2695, + "src": "2829:13:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ITAPCollector_$2695_$", + "typeString": "type(contract ITAPCollector)" + } + }, + "id": 13332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2829:27:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITAPCollector_$2695", + "typeString": "contract ITAPCollector" + } + }, + "src": "2813:43:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITAPCollector_$2695", + "typeString": "contract ITAPCollector" + } + }, + "id": 13334, + "nodeType": "ExpressionStatement", + "src": "2813:43:61" + }, + { + "expression": { + "id": 13339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13335, + "name": "CURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13264, + "src": "2866:8:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 13337, + "name": "curation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13314, + "src": "2887:8:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 13336, + "name": "ICuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 165, + "src": "2877:9:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ICuration_$165_$", + "typeString": "type(contract ICuration)" + } + }, + "id": 13338, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2877:19:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "src": "2866:30:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "id": 13340, + "nodeType": "ExpressionStatement", + "src": "2866:30:61" + }, + { + "eventCall": { + "arguments": [ + { + "id": 13342, + "name": "subgraphService", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13308, + "src": "2948:15:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 13343, + "name": "disputeManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13310, + "src": "2965:14:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 13344, + "name": "tapCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13312, + "src": "2981:12:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 13345, + "name": "curation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13314, + "src": "2995:8:61", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 13341, + "name": "SubgraphServiceDirectoryInitialized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13275, + "src": "2912:35:61", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address,address,address)" + } + }, + "id": 13346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2912:92:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13347, + "nodeType": "EmitStatement", + "src": "2907:97:61" + } + ] + }, + "documentation": { + "id": 13306, + "nodeType": "StructuredDocumentation", + "src": "2262:314:61", + "text": " @notice Constructor for the Directory contract\n @param subgraphService The Subgraph Service contract address\n @param disputeManager The Dispute Manager contract address\n @param tapCollector The TAP Collector contract address\n @param curation The Curation contract address" + }, + "id": 13349, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13315, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13308, + "mutability": "mutable", + "name": "subgraphService", + "nameLocation": "2601:15:61", + "nodeType": "VariableDeclaration", + "scope": 13349, + "src": "2593:23:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13307, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2593:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13310, + "mutability": "mutable", + "name": "disputeManager", + "nameLocation": "2626:14:61", + "nodeType": "VariableDeclaration", + "scope": 13349, + "src": "2618:22:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13309, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2618:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13312, + "mutability": "mutable", + "name": "tapCollector", + "nameLocation": "2650:12:61", + "nodeType": "VariableDeclaration", + "scope": 13349, + "src": "2642:20:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13311, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2642:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13314, + "mutability": "mutable", + "name": "curation", + "nameLocation": "2672:8:61", + "nodeType": "VariableDeclaration", + "scope": 13349, + "src": "2664:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 13313, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2664:7:61", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2592:89:61" + }, + "returnParameters": { + "id": 13316, + "nodeType": "ParameterList", + "parameters": [], + "src": "2682:0:61" + }, + "scope": 13390, + "src": "2581:430:61", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13358, + "nodeType": "Block", + "src": "3163:40:61", + "statements": [ + { + "expression": { + "id": 13356, + "name": "SUBGRAPH_SERVICE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13252, + "src": "3180:16:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "functionReturnParameters": 13355, + "id": 13357, + "nodeType": "Return", + "src": "3173:23:61" + } + ] + }, + "documentation": { + "id": 13350, + "nodeType": "StructuredDocumentation", + "src": "3017:72:61", + "text": " @notice Returns the Subgraph Service contract address" + }, + "id": 13359, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_subgraphService", + "nameLocation": "3103:16:61", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13351, + "nodeType": "ParameterList", + "parameters": [], + "src": "3119:2:61" + }, + "returnParameters": { + "id": 13355, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13354, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 13359, + "src": "3145:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + }, + "typeName": { + "id": 13353, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13352, + "name": "ISubgraphService", + "nameLocations": [ + "3145:16:61" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11280, + "src": "3145:16:61" + }, + "referencedDeclaration": 11280, + "src": "3145:16:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISubgraphService_$11280", + "typeString": "contract ISubgraphService" + } + }, + "visibility": "internal" + } + ], + "src": "3144:18:61" + }, + "scope": 13390, + "src": "3094:109:61", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13368, + "nodeType": "Block", + "src": "3352:39:61", + "statements": [ + { + "expression": { + "id": 13366, + "name": "DISPUTE_MANAGER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13256, + "src": "3369:15:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + }, + "functionReturnParameters": 13365, + "id": 13367, + "nodeType": "Return", + "src": "3362:22:61" + } + ] + }, + "documentation": { + "id": 13360, + "nodeType": "StructuredDocumentation", + "src": "3209:71:61", + "text": " @notice Returns the Dispute Manager contract address" + }, + "id": 13369, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_disputeManager", + "nameLocation": "3294:15:61", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13361, + "nodeType": "ParameterList", + "parameters": [], + "src": "3309:2:61" + }, + "returnParameters": { + "id": 13365, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13364, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 13369, + "src": "3335:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + }, + "typeName": { + "id": 13363, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13362, + "name": "IDisputeManager", + "nameLocations": [ + "3335:15:61" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 11057, + "src": "3335:15:61" + }, + "referencedDeclaration": 11057, + "src": "3335:15:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IDisputeManager_$11057", + "typeString": "contract IDisputeManager" + } + }, + "visibility": "internal" + } + ], + "src": "3334:17:61" + }, + "scope": 13390, + "src": "3285:106:61", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13378, + "nodeType": "Block", + "src": "3534:37:61", + "statements": [ + { + "expression": { + "id": 13376, + "name": "TAP_COLLECTOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13260, + "src": "3551:13:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITAPCollector_$2695", + "typeString": "contract ITAPCollector" + } + }, + "functionReturnParameters": 13375, + "id": 13377, + "nodeType": "Return", + "src": "3544:20:61" + } + ] + }, + "documentation": { + "id": 13370, + "nodeType": "StructuredDocumentation", + "src": "3397:69:61", + "text": " @notice Returns the TAP Collector contract address" + }, + "id": 13379, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_tapCollector", + "nameLocation": "3480:13:61", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13371, + "nodeType": "ParameterList", + "parameters": [], + "src": "3493:2:61" + }, + "returnParameters": { + "id": 13375, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13374, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 13379, + "src": "3519:13:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITAPCollector_$2695", + "typeString": "contract ITAPCollector" + }, + "typeName": { + "id": 13373, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13372, + "name": "ITAPCollector", + "nameLocations": [ + "3519:13:61" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2695, + "src": "3519:13:61" + }, + "referencedDeclaration": 2695, + "src": "3519:13:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITAPCollector_$2695", + "typeString": "contract ITAPCollector" + } + }, + "visibility": "internal" + } + ], + "src": "3518:15:61" + }, + "scope": 13390, + "src": "3471:100:61", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13388, + "nodeType": "Block", + "src": "3701:32:61", + "statements": [ + { + "expression": { + "id": 13386, + "name": "CURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13264, + "src": "3718:8:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "functionReturnParameters": 13385, + "id": 13387, + "nodeType": "Return", + "src": "3711:15:61" + } + ] + }, + "documentation": { + "id": 13380, + "nodeType": "StructuredDocumentation", + "src": "3577:64:61", + "text": " @notice Returns the Curation contract address" + }, + "id": 13389, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_curation", + "nameLocation": "3655:9:61", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13381, + "nodeType": "ParameterList", + "parameters": [], + "src": "3664:2:61" + }, + "returnParameters": { + "id": 13385, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13384, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 13389, + "src": "3690:9:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + }, + "typeName": { + "id": 13383, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 13382, + "name": "ICuration", + "nameLocations": [ + "3690:9:61" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 165, + "src": "3690:9:61" + }, + "referencedDeclaration": 165, + "src": "3690:9:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ICuration_$165", + "typeString": "contract ICuration" + } + }, + "visibility": "internal" + } + ], + "src": "3689:11:61" + }, + "scope": 13390, + "src": "3646:87:61", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 13391, + "src": "642:3093:61", + "usedErrors": [ + 13282 + ], + "usedEvents": [ + 13275 + ] + } + ], + "src": "45:3691:61" + }, + "id": 61 + } + }, + "contracts": { + "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol": { + "ITokenGateway": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "l1ERC20", + "type": "address" + } + ], + "name": "calculateL2TokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "finalizeInboundTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amunt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPiceBid", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "calculateL2TokenAddress(address)": "a7e28d48", + "finalizeInboundTransfer(address,address,address,uint256,bytes)": "2e567b36", + "outboundTransfer(address,address,uint256,uint256,uint256,bytes)": "d2ce7d65" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l1ERC20\",\"type\":\"address\"}],\"name\":\"calculateL2TokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"finalizeInboundTransfer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amunt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPiceBid\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"outboundTransfer\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"calculateL2TokenAddress(address)\":{\"details\":\"the L1 and L2 address oracles may not always be in sync. For example, a custom token may have been registered but not deployed or the contract self destructed.\",\"params\":{\"l1ERC20\":\"address of L1 token\"},\"returns\":{\"_0\":\"L2 address of a bridged ERC20 token\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"calculateL2TokenAddress(address)\":{\"notice\":\"Calculate the address used when bridging an ERC20 token\"},\"outboundTransfer(address,address,uint256,uint256,uint256,bytes)\":{\"notice\":\"event deprecated in favor of DepositFinalized and WithdrawalFinalized\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":\"ITokenGateway\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/contracts/contracts/curation/ICuration.sol": { + "ICuration": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_tokensOutMin", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "curationTaxPercentage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCurationPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getCuratorSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isCurated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_signalOutMin", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_percentage", + "type": "uint32" + } + ], + "name": "setCurationTaxPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_curationTokenMaster", + "type": "address" + } + ], + "name": "setCurationTokenMaster", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_defaultReserveRatio", + "type": "uint32" + } + ], + "name": "setDefaultReserveRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumCurationDeposit", + "type": "uint256" + } + ], + "name": "setMinimumCurationDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_signalIn", + "type": "uint256" + } + ], + "name": "signalToTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_tokensIn", + "type": "uint256" + } + ], + "name": "tokensToSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "burn(bytes32,uint256,uint256)": "24bdeec7", + "collect(bytes32,uint256)": "81573288", + "curationTaxPercentage()": "f115c427", + "getCurationPoolSignal(bytes32)": "99439fee", + "getCurationPoolTokens(bytes32)": "46e855da", + "getCuratorSignal(address,bytes32)": "9f94c667", + "isCurated(bytes32)": "4c4ea0ed", + "mint(bytes32,uint256,uint256)": "375a54ab", + "setCurationTaxPercentage(uint32)": "cd18119e", + "setCurationTokenMaster(address)": "9b4d9f33", + "setDefaultReserveRatio(uint32)": "cd0ad4a2", + "setMinimumCurationDeposit(uint256)": "6536fe32", + "signalToTokens(bytes32,uint256)": "0faaf87f", + "tokensToSignal(bytes32,uint256)": "f049b900" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_signalIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokensOutMin\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_tokens\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curationTaxPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getCurationPoolSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getCurationPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_curator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getCuratorSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"isCurated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_tokensIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_signalOutMin\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_percentage\",\"type\":\"uint32\"}],\"name\":\"setCurationTaxPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_curationTokenMaster\",\"type\":\"address\"}],\"name\":\"setCurationTokenMaster\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_defaultReserveRatio\",\"type\":\"uint32\"}],\"name\":\"setDefaultReserveRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minimumCurationDeposit\",\"type\":\"uint256\"}],\"name\":\"setMinimumCurationDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_signalIn\",\"type\":\"uint256\"}],\"name\":\"signalToTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_tokensIn\",\"type\":\"uint256\"}],\"name\":\"tokensToSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the Curation contract (and L2Curation too)\",\"kind\":\"dev\",\"methods\":{\"burn(bytes32,uint256,uint256)\":{\"params\":{\"_signalIn\":\"Amount of signal to return\",\"_subgraphDeploymentID\":\"SubgraphDeployment the curator is returning signal\",\"_tokensOutMin\":\"Expected minimum amount of tokens to receive\"},\"returns\":{\"_0\":\"Tokens returned\"}},\"collect(bytes32,uint256)\":{\"params\":{\"_subgraphDeploymentID\":\"SubgraphDeployment where funds should be allocated as reserves\",\"_tokens\":\"Amount of Graph Tokens to add to reserves\"}},\"curationTaxPercentage()\":{\"returns\":{\"_0\":\"Curation tax percentage expressed in PPM\"}},\"getCurationPoolSignal(bytes32)\":{\"params\":{\"_subgraphDeploymentID\":\"Subgraph deployment curation pool\"},\"returns\":{\"_0\":\"Amount of signal minted for the subgraph deployment\"}},\"getCurationPoolTokens(bytes32)\":{\"params\":{\"_subgraphDeploymentID\":\"Subgraph deployment curation pool\"},\"returns\":{\"_0\":\"Amount of token reserves in the curation pool\"}},\"getCuratorSignal(address,bytes32)\":{\"params\":{\"_curator\":\"Curator owning the signal tokens\",\"_subgraphDeploymentID\":\"Subgraph deployment curation pool\"},\"returns\":{\"_0\":\"Amount of signal owned by a curator for the subgraph deployment\"}},\"isCurated(bytes32)\":{\"params\":{\"_subgraphDeploymentID\":\"SubgraphDeployment to check if curated\"},\"returns\":{\"_0\":\"True if curated, false otherwise\"}},\"mint(bytes32,uint256,uint256)\":{\"params\":{\"_signalOutMin\":\"Expected minimum amount of signal to receive\",\"_subgraphDeploymentID\":\"Subgraph deployment pool from where to mint signal\",\"_tokensIn\":\"Amount of Graph Tokens to deposit\"},\"returns\":{\"_0\":\"Amount of signal minted\",\"_1\":\"Amount of curation tax burned\"}},\"setCurationTaxPercentage(uint32)\":{\"params\":{\"_percentage\":\"Curation tax percentage charged when depositing GRT tokens\"}},\"setCurationTokenMaster(address)\":{\"params\":{\"_curationTokenMaster\":\"Address of implementation contract to use for curation tokens\"}},\"setDefaultReserveRatio(uint32)\":{\"params\":{\"_defaultReserveRatio\":\"Reserve ratio (in PPM)\"}},\"setMinimumCurationDeposit(uint256)\":{\"params\":{\"_minimumCurationDeposit\":\"Minimum amount of tokens required deposit\"}},\"signalToTokens(bytes32,uint256)\":{\"params\":{\"_signalIn\":\"Amount of signal to burn\",\"_subgraphDeploymentID\":\"Subgraph deployment to burn signal\"},\"returns\":{\"_0\":\"Amount of tokens to get for the specified amount of signal\"}},\"tokensToSignal(bytes32,uint256)\":{\"params\":{\"_subgraphDeploymentID\":\"Subgraph deployment to mint signal\",\"_tokensIn\":\"Amount of tokens used to mint signal\"},\"returns\":{\"_0\":\"Amount of signal that can be bought\",\"_1\":\"Amount of tokens that will be burned as curation tax\"}}},\"title\":\"Curation Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burn(bytes32,uint256,uint256)\":{\"notice\":\"Burn _signal from the SubgraphDeployment curation pool\"},\"collect(bytes32,uint256)\":{\"notice\":\"Assign Graph Tokens collected as curation fees to the curation pool reserve.\"},\"curationTaxPercentage()\":{\"notice\":\"Tax charged when curators deposit funds. Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%)\"},\"getCurationPoolSignal(bytes32)\":{\"notice\":\"Get the amount of signal in a curation pool.\"},\"getCurationPoolTokens(bytes32)\":{\"notice\":\"Get the amount of token reserves in a curation pool.\"},\"getCuratorSignal(address,bytes32)\":{\"notice\":\"Get the amount of signal a curator has in a curation pool.\"},\"isCurated(bytes32)\":{\"notice\":\"Check if any GRT tokens are deposited for a SubgraphDeployment.\"},\"mint(bytes32,uint256,uint256)\":{\"notice\":\"Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool.\"},\"setCurationTaxPercentage(uint32)\":{\"notice\":\"Set the curation tax percentage to charge when a curator deposits GRT tokens.\"},\"setCurationTokenMaster(address)\":{\"notice\":\"Set the master copy to use as clones for the curation token.\"},\"setDefaultReserveRatio(uint32)\":{\"notice\":\"Update the default reserve ratio to `_defaultReserveRatio`\"},\"setMinimumCurationDeposit(uint256)\":{\"notice\":\"Update the minimum deposit amount needed to intialize a new subgraph\"},\"signalToTokens(bytes32,uint256)\":{\"notice\":\"Calculate number of tokens to get when burning signal from a curation pool.\"},\"tokensToSignal(bytes32,uint256)\":{\"notice\":\"Calculate amount of signal that can be bought with tokens in a curation pool. This function considers and excludes the deposit tax.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":\"ICuration\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol": { + "IEpochManager": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "blockHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blockNum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentEpochBlockSinceStart", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epoch", + "type": "uint256" + } + ], + "name": "epochsSince", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochsSinceUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isCurrentEpochRun", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "runEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_epochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "blockHash(uint256)": "85df51fd", + "blockNum()": "8ae63d6d", + "currentEpoch()": "76671808", + "currentEpochBlock()": "ab93122c", + "currentEpochBlockSinceStart()": "d0cfa46e", + "epochsSince(uint256)": "1b28126d", + "epochsSinceUpdate()": "19c3b82d", + "isCurrentEpochRun()": "1ce05d38", + "runEpoch()": "c46e58eb", + "setEpochLength(uint256)": "54eea796" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"blockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentEpochBlockSinceStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"epochsSince\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochsSinceUpdate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCurrentEpochRun\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"runEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epochLength\",\"type\":\"uint256\"}],\"name\":\"setEpochLength\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":\"IEpochManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/contracts/contracts/governance/IController.sol": { + "IController": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + } + ], + "name": "getContractProxy", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGovernor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "partialPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + } + ], + "name": "setContractProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_partialPaused", + "type": "bool" + } + ], + "name": "setPartialPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauseGuardian", + "type": "address" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_paused", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + } + ], + "name": "unsetContractProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "updateController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getContractProxy(bytes32)": "f7641a5e", + "getGovernor()": "4fc07d75", + "partialPaused()": "2e292fc7", + "paused()": "5c975abb", + "setContractProxy(bytes32,address)": "e0e99292", + "setPartialPaused(bool)": "56371bd8", + "setPauseGuardian(address)": "48bde20c", + "setPaused(bool)": "16c38b3c", + "unsetContractProxy(bytes32)": "9181df9c", + "updateController(bytes32,address)": "eb5dd94f" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"}],\"name\":\"getContractProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGovernor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"partialPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_contractAddress\",\"type\":\"address\"}],\"name\":\"setContractProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_partialPaused\",\"type\":\"bool\"}],\"name\":\"setPartialPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newPauseGuardian\",\"type\":\"address\"}],\"name\":\"setPauseGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"}],\"name\":\"unsetContractProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"updateController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/governance/IController.sol\":\"IController\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol": { + "IRewardsIssuer": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocationData", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "getSubgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationId", + "type": "address" + } + ], + "name": "isActiveAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getAllocationData(address)": "55c85269", + "getSubgraphAllocatedTokens(bytes32)": "e2e1e8e9", + "isActiveAllocation(address)": "6a3ca383" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationId\",\"type\":\"address\"}],\"name\":\"isActiveAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getAllocationData(address)\":{\"details\":\"Get allocation data to calculate rewards issuance\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"accRewardsPending\":\"Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed\",\"accRewardsPerAllocatedToken\":\"Rewards snapshot\",\"indexer\":\"The indexer address\",\"subgraphDeploymentId\":\"Subgraph deployment id for the allocation\",\"tokens\":\"Amount of allocated tokens\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"params\":{\"_subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"isActiveAllocation(address)\":{\"params\":{\"_allocationId\":\"Allocation Id\"},\"returns\":{\"_0\":\"Whether or not the allocation is active\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"isActiveAllocation(address)\":{\"notice\":\"Whether or not an allocation is active (i.e open)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":\"IRewardsIssuer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol": { + "IRewardsManager": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_accRewardsPerAllocatedToken", + "type": "uint256" + } + ], + "name": "calcRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsForSubgraph", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "getAccRewardsPerAllocatedToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNewRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "getRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "isDenied", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphAllocationUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "onSubgraphSignalUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "_deny", + "type": "bool" + } + ], + "name": "setDenied", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_subgraphDeploymentID", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "_deny", + "type": "bool[]" + } + ], + "name": "setDeniedMany", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_issuancePerBlock", + "type": "uint256" + } + ], + "name": "setIssuancePerBlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minimumSubgraphSignal", + "type": "uint256" + } + ], + "name": "setMinimumSubgraphSignal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphAvailabilityOracle", + "type": "address" + } + ], + "name": "setSubgraphAvailabilityOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationID", + "type": "address" + } + ], + "name": "takeRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateAccRewardsPerSignal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "calcRewards(uint256,uint256)": "c8a5f81e", + "getAccRewardsForSubgraph(bytes32)": "5c6cbd59", + "getAccRewardsPerAllocatedToken(bytes32)": "702a280e", + "getAccRewardsPerSignal()": "a8cc0ee2", + "getNewRewardsPerSignal()": "e284f848", + "getRewards(address)": "79ee54f7", + "isDenied(bytes32)": "e820e284", + "onSubgraphAllocationUpdate(bytes32)": "eeac3e0e", + "onSubgraphSignalUpdate(bytes32)": "1d1c2fec", + "setDenied(bytes32,bool)": "1324a506", + "setDeniedMany(bytes32[],bool[])": "1debaded", + "setIssuancePerBlock(uint256)": "1156bdc1", + "setMinimumSubgraphSignal(uint256)": "4bbfc1c5", + "setSubgraphAvailabilityOracle(address)": "0903c094", + "setSubgraphService(address)": "93a90a1e", + "takeRewards(address)": "db750926", + "updateAccRewardsPerSignal()": "c7d1117d" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_accRewardsPerAllocatedToken\",\"type\":\"uint256\"}],\"name\":\"calcRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getAccRewardsForSubgraph\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getAccRewardsPerAllocatedToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAccRewardsPerSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewRewardsPerSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationID\",\"type\":\"address\"}],\"name\":\"getRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"isDenied\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"onSubgraphAllocationUpdate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"onSubgraphSignalUpdate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_deny\",\"type\":\"bool\"}],\"name\":\"setDenied\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32[]\"},{\"internalType\":\"bool[]\",\"name\":\"_deny\",\"type\":\"bool[]\"}],\"name\":\"setDeniedMany\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_issuancePerBlock\",\"type\":\"uint256\"}],\"name\":\"setIssuancePerBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minimumSubgraphSignal\",\"type\":\"uint256\"}],\"name\":\"setMinimumSubgraphSignal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_subgraphAvailabilityOracle\",\"type\":\"address\"}],\"name\":\"setSubgraphAvailabilityOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_subgraphService\",\"type\":\"address\"}],\"name\":\"setSubgraphService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationID\",\"type\":\"address\"}],\"name\":\"takeRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateAccRewardsPerSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":\"IRewardsManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/contracts/contracts/token/IGraphToken.sol": { + "IGraphToken": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "addMinter(address)": "983b2d56", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "burn(uint256)": "42966c68", + "burnFrom(address,uint256)": "79cc6790", + "decreaseAllowance(address,uint256)": "a457c2d7", + "increaseAllowance(address,uint256)": "39509351", + "isMinter(address)": "aa271e1a", + "mint(address,uint256)": "40c10f19", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "removeMinter(address)": "3092afd5", + "renounceMinter()": "98650275", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":\"IGraphToken\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/contracts/contracts/utils/TokenUtils.sol": { + "TokenUtils": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201c1aca3d33c0081dcadf834ba40cbb01ef858105de15d5ed6c82f51ded094d7564736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR BYTE 0xCA RETURNDATASIZE CALLER 0xC0 ADDMOD SAR 0xCA 0xDF DUP4 0x4B LOG4 0xC 0xBB ADD 0xEF DUP6 DUP2 SDIV 0xDE ISZERO 0xD5 0xED PUSH13 0x82F51DED094D7564736F6C6343 STOP ADDMOD SHL STOP CALLER ", + "sourceMap": "357:1203:7:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;357:1203:7;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201c1aca3d33c0081dcadf834ba40cbb01ef858105de15d5ed6c82f51ded094d7564736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR BYTE 0xCA RETURNDATASIZE CALLER 0xC0 ADDMOD SAR 0xCA 0xDF DUP4 0x4B LOG4 0xC 0xBB ADD 0xEF DUP6 DUP2 SDIV 0xDE ISZERO 0xD5 0xED PUSH13 0x82F51DED094D7564736F6C6343 STOP ADDMOD SHL STOP CALLER ", + "sourceMap": "357:1203:7:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"TokenUtils library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library contains utility functions for handling tokens (transfers and burns). It is specifically adapted for the GraphToken, so does not need to handle edge cases for other tokens.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":\"TokenUtils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":{\"keccak256\":\"0x7bd336193785ed6f09a3bd847f9208f64aa9b87ad67c40838d00fec41bb153d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d96d83cdb9bbb567e4eafac8bdef3ff6bdaf426338baf76bae277c11afb33cee\",\"dweb:/ipfs/QmNjr4PiJ76Wc5mFqa9H88BjsEMrUfy1jiftNHYTgd6Mp5\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/data-service/DataService.sol": { + "DataService": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "ProvisionManagerNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionManagerProvisionNotFound", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "ratio", + "type": "uint32" + } + ], + "name": "DelegationRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionTokensRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "min", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "max", + "type": "uint64" + } + ], + "name": "ThawingPeriodRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "min", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "max", + "type": "uint32" + } + ], + "name": "VerifierCutRangeSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", + "collect(address,uint8,bytes)": "b15d2a2c", + "delegationRatio()": "bfdfa7af", + "getDelegationRatio()": "1ebb7c30", + "getProvisionTokensRange()": "819ba366", + "getThawingPeriodRange()": "71ce020a", + "getVerifierCutRange()": "482468b7", + "maximumProvisionTokens()": "73371823", + "maximumThawingPeriod()": "9aafa5d1", + "maximumVerifierCut()": "9249c5c1", + "minimumProvisionTokens()": "36fdd28a", + "minimumThawingPeriod()": "8d2f2948", + "minimumVerifierCut()": "88812583", + "register(address,bytes)": "24b8fbf6", + "slash(address,bytes)": "cb8347fe", + "startService(address,bytes)": "dedf6726", + "stopService(address,bytes)": "8180083b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IDataService} interface.A note on upgradeability: this base contract can be inherited by upgradeable or non upgradeable contracts. - If the data service implementation is upgradeable, it must initialize the contract via an external initializer function with the `initializer` modifier that calls {__DataService_init} or {__DataService_init_unchained}. It's recommended the implementation constructor to also call {_disableInitializers} to prevent the implementation from being initialized. - If the data service implementation is NOT upgradeable, it must initialize the contract by calling {__DataService_init} or {__DataService_init_unchained} in the constructor. Note that the `initializer` will be required in the constructor.\",\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"constructor\":{\"details\":\"Addresses in GraphDirectory are immutables, they can only be set in this constructor.\",\"params\":{\"controller\":\"The address of the Graph Horizon controller contract.\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"DataService contract\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"getDelegationRatio()\":{\"notice\":\"See {IDataService-getDelegationRatio}.\"},\"getProvisionTokensRange()\":{\"notice\":\"See {IDataService-getProvisionTokensRange}.\"},\"getThawingPeriodRange()\":{\"notice\":\"See {IDataService-getThawingPeriodRange}.\"},\"getVerifierCutRange()\":{\"notice\":\"See {IDataService-getVerifierCutRange}.\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"This implementation provides base functionality for a data service: - GraphDirectory, allows the data service to interact with Graph Horizon contracts - ProvisionManager, provides functionality to manage provisions The derived contract MUST implement all the interfaces described in {IDataService} and in accordance with the Data Service framework.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":\"DataService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":{\"keccak256\":\"0x72d1f60db2ba0d65de99869a98ee0ae43dab30a474415c3ee349458b71f97439\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f59f760342a177e107bd1323ad62a0346d2845ea49554380d625107aafd69a30\",\"dweb:/ipfs/QmaovA9tVpp3yS3KtWqsRQwWK5TNyJeF1BZFuTFR6mhCiL\"]},\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 2134, + "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", + "label": "minimumProvisionTokens", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 2137, + "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", + "label": "maximumProvisionTokens", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 2140, + "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", + "label": "minimumThawingPeriod", + "offset": 0, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2143, + "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", + "label": "maximumThawingPeriod", + "offset": 8, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2146, + "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", + "label": "minimumVerifierCut", + "offset": 16, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2149, + "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", + "label": "maximumVerifierCut", + "offset": 20, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2152, + "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", + "label": "delegationRatio", + "offset": 24, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2157, + "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", + "label": "__gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 703, + "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", + "label": "__gap", + "offset": 0, + "slot": "53", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + } + } + }, + "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol": { + "DataServiceV1Storage": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":\"DataServiceV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 703, + "contract": "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol:DataServiceV1Storage", + "label": "__gap", + "offset": 0, + "slot": "0", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } + } + }, + "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol": { + "DataServiceFees": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "DataServiceFeesClaimNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "DataServiceFeesZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "ProvisionManagerNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionManagerProvisionNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokensAvailable", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensRequired", + "type": "uint256" + } + ], + "name": "ProvisionTrackerInsufficientTokens", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "ratio", + "type": "uint32" + } + ], + "name": "DelegationRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionTokensRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unlockTimestamp", + "type": "uint256" + } + ], + "name": "StakeClaimLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + } + ], + "name": "StakeClaimReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "claimsCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReleased", + "type": "uint256" + } + ], + "name": "StakeClaimsReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "min", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "max", + "type": "uint64" + } + ], + "name": "ThawingPeriodRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "min", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "max", + "type": "uint32" + } + ], + "name": "VerifierCutRangeSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "claims", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nextClaim", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "claimsLists", + "outputs": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "feesProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numClaimsToRelease", + "type": "uint256" + } + ], + "name": "releaseStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", + "claims(bytes32)": "eff0f592", + "claimsLists(address)": "13c474c9", + "collect(address,uint8,bytes)": "b15d2a2c", + "delegationRatio()": "bfdfa7af", + "feesProvisionTracker(address)": "cbe5f3f2", + "getDelegationRatio()": "1ebb7c30", + "getProvisionTokensRange()": "819ba366", + "getThawingPeriodRange()": "71ce020a", + "getVerifierCutRange()": "482468b7", + "maximumProvisionTokens()": "73371823", + "maximumThawingPeriod()": "9aafa5d1", + "maximumVerifierCut()": "9249c5c1", + "minimumProvisionTokens()": "36fdd28a", + "minimumThawingPeriod()": "8d2f2948", + "minimumVerifierCut()": "88812583", + "register(address,bytes)": "24b8fbf6", + "releaseStake(uint256)": "45f54485", + "slash(address,bytes)": "cb8347fe", + "startService(address,bytes)": "dedf6726", + "stopService(address,bytes)": "8180083b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"DataServiceFeesClaimNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataServiceFeesZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListEmptyList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidIterations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensAvailable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensRequired\",\"type\":\"uint256\"}],\"name\":\"ProvisionTrackerInsufficientTokens\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}],\"name\":\"StakeClaimLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"}],\"name\":\"StakeClaimReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"claimsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReleased\",\"type\":\"uint256\"}],\"name\":\"StakeClaimsReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"claims\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nextClaim\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"claimsLists\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"feesProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numClaimsToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IDataServiceFees} interface.\",\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens to lock in the claim\",\"unlockTimestamp\":\"The timestamp when the tokens can be released\"}},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"releasableAt\":\"The timestamp when the tokens were released\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens released\"}},\"StakeClaimsReleased(address,uint256,uint256)\":{\"params\":{\"claimsCount\":\"The number of stake claims being released\",\"serviceProvider\":\"The address of the service provider\",\"tokensReleased\":\"The total amount of tokens being released\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"DataServiceFees contract\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServiceFeesClaimNotFound(bytes32)\":[{\"notice\":\"Thrown when attempting to get a stake claim that does not exist.\"}],\"DataServiceFeesZeroTokens()\":[{\"notice\":\"Emitted when trying to lock zero tokens in a stake claim\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"LinkedListEmptyList()\":[{\"notice\":\"Thrown when trying to remove an item from an empty list\"}],\"LinkedListInvalidIterations()\":[{\"notice\":\"Thrown when trying to traverse a list with more iterations than elements\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}],\"ProvisionTrackerInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when trying to lock more tokens than available\"}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is created and stake is locked.\"},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is released and stake is unlocked.\"},\"StakeClaimsReleased(address,uint256,uint256)\":{\"notice\":\"Emitted when a series of stake claims are released.\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"claims(bytes32)\":{\"notice\":\"List of all locked stake claims to be released to service providers\"},\"claimsLists(address)\":{\"notice\":\"Service providers registered in the data service\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"getDelegationRatio()\":{\"notice\":\"See {IDataService-getDelegationRatio}.\"},\"getProvisionTokensRange()\":{\"notice\":\"See {IDataService-getProvisionTokensRange}.\"},\"getThawingPeriodRange()\":{\"notice\":\"See {IDataService-getThawingPeriodRange}.\"},\"getVerifierCutRange()\":{\"notice\":\"See {IDataService-getVerifierCutRange}.\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"releaseStake(uint256)\":{\"notice\":\"See {IDataServiceFees-releaseStake}\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"Extension for the {IDataService} contract to handle payment collateralization using a Horizon provision. See {IDataServiceFees} for more details.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol\":\"DataServiceFees\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":{\"keccak256\":\"0x72d1f60db2ba0d65de99869a98ee0ae43dab30a474415c3ee349458b71f97439\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f59f760342a177e107bd1323ad62a0346d2845ea49554380d625107aafd69a30\",\"dweb:/ipfs/QmaovA9tVpp3yS3KtWqsRQwWK5TNyJeF1BZFuTFR6mhCiL\"]},\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol\":{\"keccak256\":\"0x136536e55b4a7ee042b368f32e771e6fe5aa512d89e3eb3e53bc65133a61ec7e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4cd6aa727129b4d30db958f0fb814fe9313da691340af3998baa283bd0c0d3a4\",\"dweb:/ipfs/QmZfakV8Gemw3o6SLQJjZ3m4gYkaFi4VMuQ5jnDJzyhia4\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol\":{\"keccak256\":\"0xfc2ead98c0a29cf14523745ccb07cbd568ba3299bffe5f9c3bec9dad7bf00562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a27545f89d99c54e8acd01d510b31e97500c75a4ace58f2986ab01eb1f0ff13\",\"dweb:/ipfs/QmeBPV1QfdTM6M9q478k512hKSr7kWsKwfEESdDimHQaoH\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":{\"keccak256\":\"0x9012127a1b1dc8a3f75ad49925632faecca8bcb46f42ab7d1ac0af83a7514f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b002f1f6759e7ced37f161706bc4b787ba7534fb4326ae7ab395270926292c42\",\"dweb:/ipfs/QmRVDPWMbrijk14sywXTbnKdueVBgADBB7h8F9aGA4DgSZ\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 2134, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "minimumProvisionTokens", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 2137, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "maximumProvisionTokens", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 2140, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "minimumThawingPeriod", + "offset": 0, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2143, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "maximumThawingPeriod", + "offset": 8, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2146, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "minimumVerifierCut", + "offset": 16, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2149, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "maximumVerifierCut", + "offset": 20, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2152, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "delegationRatio", + "offset": 24, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2157, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "__gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 703, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "__gap", + "offset": 0, + "slot": "53", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 1063, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "feesProvisionTracker", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 1069, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "claims", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)" + }, + { + "astId": 1075, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "claimsLists", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_address,t_struct(List)3813_storage)" + }, + { + "astId": 1080, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "__gap", + "offset": 0, + "slot": "106", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(List)3813_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct LinkedList.List)", + "numberOfBytes": "32", + "value": "t_struct(List)3813_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)", + "numberOfBytes": "32", + "value": "t_struct(StakeClaim)1335_storage" + }, + "t_struct(List)3813_storage": { + "encoding": "inplace", + "label": "struct LinkedList.List", + "members": [ + { + "astId": 3806, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "head", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 3808, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "tail", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + }, + { + "astId": 3810, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "nonce", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 3812, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "count", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(StakeClaim)1335_storage": { + "encoding": "inplace", + "label": "struct IDataServiceFees.StakeClaim", + "members": [ + { + "astId": 1328, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "tokens", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 1330, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "createdAt", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 1332, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "releasableAt", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 1334, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", + "label": "nextClaim", + "offset": 0, + "slot": "3", + "type": "t_bytes32" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + } + } + }, + "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol": { + "DataServiceFeesV1Storage": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "claims", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nextClaim", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "claimsLists", + "outputs": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "feesProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "claims(bytes32)": "eff0f592", + "claimsLists(address)": "13c474c9", + "feesProvisionTracker(address)": "cbe5f3f2" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"claims\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nextClaim\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"claimsLists\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"feesProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"}},\"title\":\"Storage layout for the {DataServiceFees} extension contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"claims(bytes32)\":{\"notice\":\"List of all locked stake claims to be released to service providers\"},\"claimsLists(address)\":{\"notice\":\"Service providers registered in the data service\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol\":\"DataServiceFeesV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol\":{\"keccak256\":\"0xfc2ead98c0a29cf14523745ccb07cbd568ba3299bffe5f9c3bec9dad7bf00562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a27545f89d99c54e8acd01d510b31e97500c75a4ace58f2986ab01eb1f0ff13\",\"dweb:/ipfs/QmeBPV1QfdTM6M9q478k512hKSr7kWsKwfEESdDimHQaoH\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 1063, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "feesProvisionTracker", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 1069, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "claims", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)" + }, + { + "astId": 1075, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "claimsLists", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_struct(List)3813_storage)" + }, + { + "astId": 1080, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "__gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(List)3813_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct LinkedList.List)", + "numberOfBytes": "32", + "value": "t_struct(List)3813_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)", + "numberOfBytes": "32", + "value": "t_struct(StakeClaim)1335_storage" + }, + "t_struct(List)3813_storage": { + "encoding": "inplace", + "label": "struct LinkedList.List", + "members": [ + { + "astId": 3806, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "head", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 3808, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "tail", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + }, + { + "astId": 3810, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "nonce", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 3812, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "count", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(StakeClaim)1335_storage": { + "encoding": "inplace", + "label": "struct IDataServiceFees.StakeClaim", + "members": [ + { + "astId": 1328, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "tokens", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 1330, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "createdAt", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 1332, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "releasableAt", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 1334, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", + "label": "nextClaim", + "offset": 0, + "slot": "3", + "type": "t_bytes32" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } + } + }, + "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol": { + "DataServicePausableUpgradeable": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "DataServicePausableNotPauseGuardian", + "type": "error" + }, + { + "inputs": [], + "name": "EnforcedPause", + "type": "error" + }, + { + "inputs": [], + "name": "ExpectedPause", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "ProvisionManagerNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionManagerProvisionNotFound", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "ratio", + "type": "uint32" + } + ], + "name": "DelegationRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "PauseGuardianSet", + "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": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionTokensRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "min", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "max", + "type": "uint64" + } + ], + "name": "ThawingPeriodRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "min", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "max", + "type": "uint32" + } + ], + "name": "VerifierCutRangeSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "pauseGuardians", + "outputs": [ + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", + "collect(address,uint8,bytes)": "b15d2a2c", + "delegationRatio()": "bfdfa7af", + "getDelegationRatio()": "1ebb7c30", + "getProvisionTokensRange()": "819ba366", + "getThawingPeriodRange()": "71ce020a", + "getVerifierCutRange()": "482468b7", + "maximumProvisionTokens()": "73371823", + "maximumThawingPeriod()": "9aafa5d1", + "maximumVerifierCut()": "9249c5c1", + "minimumProvisionTokens()": "36fdd28a", + "minimumThawingPeriod()": "8d2f2948", + "minimumVerifierCut()": "88812583", + "pause()": "8456cb59", + "pauseGuardians(address)": "9384e078", + "paused()": "5c975abb", + "register(address,bytes)": "24b8fbf6", + "slash(address,bytes)": "cb8347fe", + "startService(address,bytes)": "dedf6726", + "stopService(address,bytes)": "8180083b", + "unpause()": "3f4ba83a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DataServicePausableNotPauseGuardian\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"PauseGuardianSet\",\"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\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pauseGuardian\",\"type\":\"address\"}],\"name\":\"pauseGuardians\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IDataServicePausable} interface.Upgradeable version of the {DataServicePausable} contract.\",\"errors\":{\"DataServicePausableNotPauseGuardian(address)\":[{\"params\":{\"account\":\"The address of the pause guardian\"}}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"PauseGuardianSet(address,bool)\":{\"params\":{\"account\":\"The address of the pause guardian\",\"allowed\":\"The allowed status of the pause guardian\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"DataServicePausableUpgradeable contract\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServicePausableNotPauseGuardian(address)\":[{\"notice\":\"Emitted when a the caller is not a pause guardian\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"PauseGuardianSet(address,bool)\":{\"notice\":\"Emitted when a pause guardian is set.\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"getDelegationRatio()\":{\"notice\":\"See {IDataService-getDelegationRatio}.\"},\"getProvisionTokensRange()\":{\"notice\":\"See {IDataService-getProvisionTokensRange}.\"},\"getThawingPeriodRange()\":{\"notice\":\"See {IDataService-getThawingPeriodRange}.\"},\"getVerifierCutRange()\":{\"notice\":\"See {IDataService-getVerifierCutRange}.\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"},\"pause()\":{\"notice\":\"See {IDataServicePausable-pause}\"},\"pauseGuardians(address)\":{\"notice\":\"List of pause guardians and their allowed status\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"},\"unpause()\":{\"notice\":\"See {IDataServicePausable-pause}\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol\":\"DataServicePausableUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":{\"keccak256\":\"0x72d1f60db2ba0d65de99869a98ee0ae43dab30a474415c3ee349458b71f97439\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f59f760342a177e107bd1323ad62a0346d2845ea49554380d625107aafd69a30\",\"dweb:/ipfs/QmaovA9tVpp3yS3KtWqsRQwWK5TNyJeF1BZFuTFR6mhCiL\"]},\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol\":{\"keccak256\":\"0xbb8e8d819d97570ccdcd5a6fafd8c43880016f71f6ce1eb4a2f260a1eaf6da5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9f72b98fb9e707e88da2bd496102f0142e55a614c1b65319d4a09ee28b73f227\",\"dweb:/ipfs/Qma93cnXPBKf8qoVbWnQpKiffPwpzE837WncTo3Mx3v42H\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol\":{\"keccak256\":\"0xdf6f1f87857eaa5824747e81aed89f11d52e34400077d341f66165631772ccd2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5fd53c4e7571f1efe15ef3fdf291cec2cb282f5a617c8986eae00f56741b4c6\",\"dweb:/ipfs/QmX1WQNc5XJDgDT6aEv779DAgWzY7Uby8obF2Fey3m1WnE\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 2134, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "minimumProvisionTokens", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 2137, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "maximumProvisionTokens", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 2140, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "minimumThawingPeriod", + "offset": 0, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2143, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "maximumThawingPeriod", + "offset": 8, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2146, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "minimumVerifierCut", + "offset": 16, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2149, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "maximumVerifierCut", + "offset": 20, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2152, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "delegationRatio", + "offset": 24, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2157, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "__gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 703, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "__gap", + "offset": 0, + "slot": "53", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 1101, + "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", + "label": "pauseGuardians", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + } + } + }, + "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol": { + "IDataService": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", + "collect(address,uint8,bytes)": "b15d2a2c", + "getDelegationRatio()": "1ebb7c30", + "getProvisionTokensRange()": "819ba366", + "getThawingPeriodRange()": "71ce020a", + "getVerifierCutRange()": "482468b7", + "register(address,bytes)": "24b8fbf6", + "slash(address,bytes)": "cb8347fe", + "startService(address,bytes)": "dedf6726", + "stopService(address,bytes)": "8180083b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This interface is expected to be inherited and extended by a data service interface. It can be used to interact with it however it's advised to use the more specific parent interface.\",\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getProvisionTokensRange()\":{\"returns\":{\"_0\":\"Minimum provision tokens allowed\",\"_1\":\"Maximum provision tokens allowed\"}},\"getThawingPeriodRange()\":{\"returns\":{\"_0\":\"Minimum thawing period allowed\",\"_1\":\"Maximum thawing period allowed\"}},\"getVerifierCutRange()\":{\"returns\":{\"_0\":\"Minimum verifier cut allowed\",\"_1\":\"Maximum verifier cut allowed\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"Interface of the base {DataService} contract as defined by the Graph Horizon specification.\",\"version\":1},\"userdoc\":{\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getProvisionTokensRange()\":{\"notice\":\"External getter for the provision tokens range\"},\"getThawingPeriodRange()\":{\"notice\":\"External getter for the thawing period range\"},\"getVerifierCutRange()\":{\"notice\":\"External getter for the verifier cut range\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"This interface provides a guardrail for contracts that use the Data Service framework to implement a data service on Graph Horizon. Much of the specification is intentionally loose to allow for greater flexibility when designing a data service. It's not possible to guarantee that an implementation will honor the Data Service framework guidelines so it's advised to always review the implementation code and the documentation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":\"IDataService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol": { + "IDataServiceFees": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "DataServiceFeesClaimNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "DataServiceFeesZeroTokens", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unlockTimestamp", + "type": "uint256" + } + ], + "name": "StakeClaimLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + } + ], + "name": "StakeClaimReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "claimsCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReleased", + "type": "uint256" + } + ], + "name": "StakeClaimsReleased", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numClaimsToRelease", + "type": "uint256" + } + ], + "name": "releaseStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", + "collect(address,uint8,bytes)": "b15d2a2c", + "getDelegationRatio()": "1ebb7c30", + "getProvisionTokensRange()": "819ba366", + "getThawingPeriodRange()": "71ce020a", + "getVerifierCutRange()": "482468b7", + "register(address,bytes)": "24b8fbf6", + "releaseStake(uint256)": "45f54485", + "slash(address,bytes)": "cb8347fe", + "startService(address,bytes)": "dedf6726", + "stopService(address,bytes)": "8180083b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"DataServiceFeesClaimNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataServiceFeesZeroTokens\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}],\"name\":\"StakeClaimLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"}],\"name\":\"StakeClaimReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"claimsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReleased\",\"type\":\"uint256\"}],\"name\":\"StakeClaimsReleased\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numClaimsToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Note that this implementation uses the entire provisioned stake as collateral for the payment. It can be used to provide economic security for the payments collected as long as the provisioned stake is not being used for other purposes.\",\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens to lock in the claim\",\"unlockTimestamp\":\"The timestamp when the tokens can be released\"}},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"releasableAt\":\"The timestamp when the tokens were released\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens released\"}},\"StakeClaimsReleased(address,uint256,uint256)\":{\"params\":{\"claimsCount\":\"The number of stake claims being released\",\"serviceProvider\":\"The address of the service provider\",\"tokensReleased\":\"The total amount of tokens being released\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getProvisionTokensRange()\":{\"returns\":{\"_0\":\"Minimum provision tokens allowed\",\"_1\":\"Maximum provision tokens allowed\"}},\"getThawingPeriodRange()\":{\"returns\":{\"_0\":\"Minimum thawing period allowed\",\"_1\":\"Maximum thawing period allowed\"}},\"getVerifierCutRange()\":{\"returns\":{\"_0\":\"Minimum verifier cut allowed\",\"_1\":\"Maximum verifier cut allowed\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"releaseStake(uint256)\":{\"details\":\"This function is only meant to be called if the service provider has enough stake claims that releasing them all at once would exceed the block gas limit.This function can be overriden and/or disabled.Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\",\"params\":{\"numClaimsToRelease\":\"Amount of stake claims to process. If 0, all stake claims are processed.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"Interface for the {DataServiceFees} contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServiceFeesClaimNotFound(bytes32)\":[{\"notice\":\"Thrown when attempting to get a stake claim that does not exist.\"}],\"DataServiceFeesZeroTokens()\":[{\"notice\":\"Emitted when trying to lock zero tokens in a stake claim\"}]},\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is created and stake is locked.\"},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is released and stake is unlocked.\"},\"StakeClaimsReleased(address,uint256,uint256)\":{\"notice\":\"Emitted when a series of stake claims are released.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getProvisionTokensRange()\":{\"notice\":\"External getter for the provision tokens range\"},\"getThawingPeriodRange()\":{\"notice\":\"External getter for the thawing period range\"},\"getVerifierCutRange()\":{\"notice\":\"External getter for the verifier cut range\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"releaseStake(uint256)\":{\"notice\":\"Releases expired stake claims for the caller.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"Extension for the {IDataService} contract to handle payment collateralization using a Horizon provision. It's designed to be used with the Data Service framework: - When a service provider collects payment with {IDataService.collect} the data service should lock stake to back the payment using {_lockStake}. - Every time there is a payment collection with {IDataService.collect}, the data service should attempt to release any expired stake claims by calling {_releaseStake}. - Stake claims can also be manually released by calling {releaseStake} directly.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":\"IDataServiceFees\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol": { + "IDataServicePausable": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "DataServicePausableNotPauseGuardian", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "PauseGuardianSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", + "collect(address,uint8,bytes)": "b15d2a2c", + "getDelegationRatio()": "1ebb7c30", + "getProvisionTokensRange()": "819ba366", + "getThawingPeriodRange()": "71ce020a", + "getVerifierCutRange()": "482468b7", + "pause()": "8456cb59", + "register(address,bytes)": "24b8fbf6", + "slash(address,bytes)": "cb8347fe", + "startService(address,bytes)": "dedf6726", + "stopService(address,bytes)": "8180083b", + "unpause()": "3f4ba83a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DataServicePausableNotPauseGuardian\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"PauseGuardianSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"DataServicePausableNotPauseGuardian(address)\":[{\"params\":{\"account\":\"The address of the pause guardian\"}}]},\"events\":{\"PauseGuardianSet(address,bool)\":{\"params\":{\"account\":\"The address of the pause guardian\",\"allowed\":\"The allowed status of the pause guardian\"}},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getProvisionTokensRange()\":{\"returns\":{\"_0\":\"Minimum provision tokens allowed\",\"_1\":\"Maximum provision tokens allowed\"}},\"getThawingPeriodRange()\":{\"returns\":{\"_0\":\"Minimum thawing period allowed\",\"_1\":\"Maximum thawing period allowed\"}},\"getVerifierCutRange()\":{\"returns\":{\"_0\":\"Minimum verifier cut allowed\",\"_1\":\"Maximum verifier cut allowed\"}},\"pause()\":{\"details\":\"Note that only functions using the modifiers `whenNotPaused` and `whenPaused` will be affected by the pause. Requirements: - The contract must not be already paused\"},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"unpause()\":{\"details\":\"Note that only functions using the modifiers `whenNotPaused` and `whenPaused` will be affected by the pause. Requirements: - The contract must be paused\"}},\"title\":\"Interface for the {DataServicePausable} contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServicePausableNotPauseGuardian(address)\":[{\"notice\":\"Emitted when a the caller is not a pause guardian\"}]},\"events\":{\"PauseGuardianSet(address,bool)\":{\"notice\":\"Emitted when a pause guardian is set.\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getProvisionTokensRange()\":{\"notice\":\"External getter for the provision tokens range\"},\"getThawingPeriodRange()\":{\"notice\":\"External getter for the thawing period range\"},\"getVerifierCutRange()\":{\"notice\":\"External getter for the verifier cut range\"},\"pause()\":{\"notice\":\"Pauses the data service.\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"},\"unpause()\":{\"notice\":\"Unpauses the data service.\"}},\"notice\":\"Extension for the {IDataService} contract, adds pausing functionality to the data service. Pausing is controlled by privileged accounts called pause guardians.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol\":\"IDataServicePausable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol\":{\"keccak256\":\"0xdf6f1f87857eaa5824747e81aed89f11d52e34400077d341f66165631772ccd2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5fd53c4e7571f1efe15ef3fdf291cec2cb282f5a617c8986eae00f56741b4c6\",\"dweb:/ipfs/QmX1WQNc5XJDgDT6aEv779DAgWzY7Uby8obF2Fey3m1WnE\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol": { + "ProvisionTracker": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokensAvailable", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensRequired", + "type": "uint256" + } + ], + "name": "ProvisionTrackerInsufficientTokens", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208f431a5ba6a6ac3d7ca1fb0f10a15390bac52fb5e28c8b8ae63afb4d5842ba5164736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 NUMBER BYTE JUMPDEST 0xA6 0xA6 0xAC RETURNDATASIZE PUSH29 0xA1FB0F10A15390BAC52FB5E28C8B8AE63AFB4D5842BA5164736F6C6343 STOP ADDMOD SHL STOP CALLER ", + "sourceMap": "639:2746:16:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;639:2746:16;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208f431a5ba6a6ac3d7ca1fb0f10a15390bac52fb5e28c8b8ae63afb4d5842ba5164736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 NUMBER BYTE JUMPDEST 0xA6 0xA6 0xAC RETURNDATASIZE PUSH29 0xA1FB0F10A15390BAC52FB5E28C8B8AE63AFB4D5842BA5164736F6C6343 STOP ADDMOD SHL STOP CALLER ", + "sourceMap": "639:2746:16:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensAvailable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensRequired\",\"type\":\"uint256\"}],\"name\":\"ProvisionTrackerInsufficientTokens\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"ProvisionTracker library\",\"version\":1},\"userdoc\":{\"errors\":{\"ProvisionTrackerInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when trying to lock more tokens than available\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to facilitate tracking of \\\"used tokens\\\" on Graph Horizon provisions. This can be used to ensure data services have enough economic security (provisioned stake) to back the payments they collect for their services. The library provides two primitives, lock and release to signal token usage and free up tokens respectively. It does not make any assumptions about the conditions under which tokens are locked or released.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":\"ProvisionTracker\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":{\"keccak256\":\"0x9012127a1b1dc8a3f75ad49925632faecca8bcb46f42ab7d1ac0af83a7514f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b002f1f6759e7ced37f161706bc4b787ba7534fb4326ae7ab395270926292c42\",\"dweb:/ipfs/QmRVDPWMbrijk14sywXTbnKdueVBgADBB7h8F9aGA4DgSZ\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol": { + "ProvisionManager": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "ProvisionManagerNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionManagerProvisionNotFound", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "ratio", + "type": "uint32" + } + ], + "name": "DelegationRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionTokensRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "min", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "max", + "type": "uint64" + } + ], + "name": "ThawingPeriodRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "min", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "max", + "type": "uint32" + } + ], + "name": "VerifierCutRangeSet", + "type": "event" + }, + { + "inputs": [], + "name": "delegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "delegationRatio()": "bfdfa7af", + "maximumProvisionTokens()": "73371823", + "maximumThawingPeriod()": "9aafa5d1", + "maximumVerifierCut()": "9249c5c1", + "minimumProvisionTokens()": "36fdd28a", + "minimumThawingPeriod()": "8d2f2948", + "minimumVerifierCut()": "88812583" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Provides utilities to verify provision parameters are within an acceptable range. Each parameter has an overridable setter and getter for the validity range, and a checker that reverts if the parameter is out of range. The parameters are: - Provision parameters (thawing period and verifier cut) - Provision tokens\",\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{},\"title\":\"ProvisionManager contract\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"}},\"notice\":\"A helper contract that implements several provision management functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":\"ProvisionManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 2134, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", + "label": "minimumProvisionTokens", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 2137, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", + "label": "maximumProvisionTokens", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 2140, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", + "label": "minimumThawingPeriod", + "offset": 0, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2143, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", + "label": "maximumThawingPeriod", + "offset": 8, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2146, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", + "label": "minimumVerifierCut", + "offset": 16, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2149, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", + "label": "maximumVerifierCut", + "offset": 20, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2152, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", + "label": "delegationRatio", + "offset": 24, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2157, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", + "label": "__gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + } + } + }, + "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol": { + "ProvisionManagerV1Storage": { + "abi": [ + { + "inputs": [], + "name": "delegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "delegationRatio()": "bfdfa7af", + "maximumProvisionTokens()": "73371823", + "maximumThawingPeriod()": "9aafa5d1", + "maximumVerifierCut()": "9249c5c1", + "minimumProvisionTokens()": "36fdd28a", + "minimumThawingPeriod()": "8d2f2948", + "minimumVerifierCut()": "88812583" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"},\"delegationRatio\":{\"details\":\"Max calculated as service provider's stake * delegationRatio\"}},\"title\":\"Storage layout for the {ProvisionManager} helper contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":\"ProvisionManagerV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 2134, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", + "label": "minimumProvisionTokens", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 2137, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", + "label": "maximumProvisionTokens", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 2140, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", + "label": "minimumThawingPeriod", + "offset": 0, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2143, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", + "label": "maximumThawingPeriod", + "offset": 8, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2146, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", + "label": "minimumVerifierCut", + "offset": 16, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2149, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", + "label": "maximumVerifierCut", + "offset": 20, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2152, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", + "label": "delegationRatio", + "offset": 24, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2157, + "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", + "label": "__gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol": { + "IGraphPayments": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "GraphPaymentsInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "protocolPaymentCut", + "type": "uint256" + } + ], + "name": "GraphPaymentsInvalidProtocolPaymentCut", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationPool", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensProtocol", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "collect(uint8,address,uint256,address,uint256)": "6c69783a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"GraphPaymentsInsufficientTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolPaymentCut\",\"type\":\"uint256\"}],\"name\":\"GraphPaymentsInvalidProtocolPaymentCut\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReceiver\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDelegationPool\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensProtocol\",\"type\":\"uint256\"}],\"name\":\"PaymentCollected\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"GraphPaymentsInsufficientTokens(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The amount of tokens being collected\",\"tokens\":\"The amount of tokens available\"}}],\"GraphPaymentsInvalidProtocolPaymentCut(uint256)\":[{\"params\":{\"protocolPaymentCut\":\"The protocol payment cut\"}}]},\"events\":{\"PaymentCollected(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"dataService\":\"The address of the data service\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokensDataService\":\"Amount of tokens for the data service\",\"tokensDelegationPool\":\"Amount of tokens for delegators\",\"tokensProtocol\":\"Amount of tokens charged as protocol tax\",\"tokensReceiver\":\"Amount of tokens for the receiver\"}}},\"kind\":\"dev\",\"methods\":{\"collect(uint8,address,uint256,address,uint256)\":{\"params\":{\"dataService\":\"The address of the data service\",\"paymentType\":\"The type of payment as defined in {IGraphPayments}\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens being collected\",\"tokensDataService\":\"The amount of tokens that should be sent to the data service\"}}},\"title\":\"Interface for the {GraphPayments} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphPaymentsInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when there are insufficient tokens to pay the required amount\"}],\"GraphPaymentsInvalidProtocolPaymentCut(uint256)\":[{\"notice\":\"Thrown when the protocol payment cut is invalid\"}]},\"events\":{\"PaymentCollected(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted when a payment is collected\"}},\"kind\":\"user\",\"methods\":{\"collect(uint8,address,uint256,address,uint256)\":{\"notice\":\"Collects funds from a payer. It will pay cuts to all relevant parties and forward the rest to the receiver.\"}},\"notice\":\"This contract is part of the Graph Horizon payments protocol. It's designed to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a set of pre established rules.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":\"IGraphPayments\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol": { + "IGraphProxyAdmin": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Empty interface to allow the GraphProxyAdmin contract to be used in the GraphDirectory contract.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IGraphProxyAdmin\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":\"IGraphProxyAdmin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol": { + "IHorizonStaking": { + "abi": [ + { + "inputs": [], + "name": "HorizonStakingCallerIsServiceProvider", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientIdleStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientStakeForLegacyAllocations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minRequired", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientTokens", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidBeneficiaryZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "HorizonStakingInvalidDelegationFeeCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPool", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPoolState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + } + ], + "name": "HorizonStakingInvalidMaxVerifierCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidProvision", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidServiceProviderZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "HorizonStakingInvalidThawingPeriod", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidVerifierZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroShares", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "HorizonStakingNotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingNothingThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingProvisionAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingSlippageProtection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "HorizonStakingStillThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingTooManyThawRequests", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingTooManyTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingVerifierNotAllowed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isPublic", + "type": "bool" + } + ], + "name": "AllocationClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "AllowedLockedVerifierSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegatedTokensWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "DelegationFeeCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "DelegationSlashingEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashingSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "MaxThawingPeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "OperatorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersStaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionThawed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "assetHolder", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolTax", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryRebates", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "delegationRewards", + "type": "uint256" + } + ], + "name": "RebateCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "StakeLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "ThawRequestCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bool", + "name": "valid", + "type": "bool" + } + ], + "name": "ThawRequestFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawRequestsFulfilled", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ThawRequestsFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "ThawingPeriodCleared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDeprovisioned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensToDelegationPoolAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensUndelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "VerifierTokensSent", + "type": "event" + }, + { + "inputs": [], + "name": "__DEPRECATED_getThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "acceptProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToDelegationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clearThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + } + ], + "name": "closeAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSharesOut", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "deprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "collectedFees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "__DEPRECATED_effectiveAllocation", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "distributedRebates", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingExtension.Allocation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocationData", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocationState", + "outputs": [ + { + "internalType": "enum IHorizonStakingExtension.AllocationState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "getIndexerStakedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "getSubgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "hasStake", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationId", + "type": "address" + } + ], + "name": "isActiveAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "isAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isAuthorized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "isOperator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provisionLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldServiceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minSharesForNewProvider", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "redelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "reprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setAllowedLockedVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "setDelegationFeeCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setDelegationSlashingEnabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "setMaxThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperatorLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "setProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensVerifier", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifierDestination", + "type": "address" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "__DEPRECATED_getThawingPeriod()": "c0641994", + "acceptProvisionParameters(address)": "3a78b732", + "addToDelegationPool(address,address,uint256)": "ca94b0e9", + "addToProvision(address,address,uint256)": "fecc9cc1", + "clearThawingPeriod()": "e473522a", + "closeAllocation(address,bytes32)": "44c32a61", + "collect(uint256,address)": "8d3c100a", + "delegate(address,address,uint256,uint256)": "6230001a", + "delegate(address,uint256)": "026e402b", + "deprovision(address,address,uint256)": "21195373", + "getAllocation(address)": "0e022923", + "getAllocationData(address)": "55c85269", + "getAllocationState(address)": "98c657dc", + "getDelegatedTokensAvailable(address,address)": "fb744cc0", + "getDelegation(address,address,address)": "ccebcabb", + "getDelegationFeeCut(address,address,uint8)": "7573ef4f", + "getDelegationPool(address,address)": "561285e4", + "getIdleStake(address)": "a784d498", + "getIndexerStakedTokens(address)": "1787e69f", + "getMaxThawingPeriod()": "39514ad2", + "getProviderTokensAvailable(address,address)": "08ce5f68", + "getProvision(address,address)": "25d9897e", + "getServiceProvider(address)": "8cc01c86", + "getStake(address)": "7a766460", + "getSubgraphAllocatedTokens(bytes32)": "e2e1e8e9", + "getThawRequest(bytes32)": "b7ca7241", + "getThawRequestList(address,address,address)": "a212daf8", + "getThawedTokens(address,address,address)": "9054e343", + "getTokensAvailable(address,address,uint32)": "872d0489", + "hasStake(address)": "e73e14bf", + "isActiveAllocation(address)": "6a3ca383", + "isAllocation(address)": "f1d60d66", + "isAllowedLockedVerifier(address)": "ae4fe67a", + "isAuthorized(address,address,address)": "7c145cc7", + "isDelegationSlashingEnabled()": "fc54fb27", + "isOperator(address,address)": "b6363cf2", + "provision(address,address,uint256,uint32,uint64)": "010167e5", + "provisionLocked(address,address,uint256,uint32,uint64)": "82d66cb8", + "redelegate(address,address,address,address,uint256,uint256)": "f64b3598", + "reprovision(address,address,address,uint256)": "ba7fb0b4", + "setAllowedLockedVerifier(address,bool)": "4ca7ac22", + "setDelegationFeeCut(address,address,uint8,uint256)": "42c51693", + "setDelegationSlashingEnabled()": "ef58bd67", + "setMaxThawingPeriod(uint64)": "259bc435", + "setOperator(address,address,bool)": "bc735d90", + "setOperatorLocked(address,address,bool)": "ad4d35b5", + "setProvisionParameters(address,address,uint32,uint64)": "81e21b56", + "slash(address,uint256,uint256,address)": "e76fede6", + "stake(uint256)": "a694fc3a", + "stakeTo(address,uint256)": "a2a31722", + "stakeToProvision(address,address,uint256)": "74612092", + "thaw(address,address,uint256)": "f93f1cd0", + "undelegate(address,address,uint256)": "a02b9426", + "undelegate(address,address,uint256,address)": "162ea5ed", + "undelegate(address,uint256)": "4d99dd16", + "unstake(uint256)": "2e17de78", + "withdraw()": "3ccfd60b", + "withdrawDelegated(address,address)": "51a60b02", + "withdrawDelegated(address,address,uint256)": "3993d849" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"HorizonStakingCallerIsServiceProvider\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientIdleStake\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minShares\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientStakeForLegacyAllocations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minRequired\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidBeneficiaryZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInvalidDelegationFeeCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidDelegationPool\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidDelegationPoolState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"}],\"name\":\"HorizonStakingInvalidMaxVerifierCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidProvision\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidServiceProviderZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"HorizonStakingInvalidThawingPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidVerifierZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"HorizonStakingNotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingNothingThawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingProvisionAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minShares\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingSlippageProtection\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingStillThawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingTooManyThawRequests\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingTooManyTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingVerifierNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"AllocationClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"AllowedLockedVerifierSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegatedTokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"DelegationFeeCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegationSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"DelegationSlashingEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegationSlashingSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"MaxThawingPeriodSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"OperatorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionParametersSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionParametersStaged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionThawed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolTax\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"curationFees\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"queryFees\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"queryRebates\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"delegationRewards\",\"type\":\"uint256\"}],\"name\":\"RebateCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"StakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"}],\"name\":\"ThawRequestCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"ThawRequestFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawRequestsFulfilled\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ThawRequestsFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ThawingPeriodCleared\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensDeprovisioned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensToDelegationPoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensUndelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"VerifierTokensSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__DEPRECATED_getThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"acceptProvisionParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"addToDelegationPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"addToProvision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"}],\"name\":\"closeAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minSharesOut\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"deprovision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAtEpoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAtEpoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collectedFees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"__DEPRECATED_effectiveAllocation\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"distributedRebates\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingExtension.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocationState\",\"outputs\":[{\"internalType\":\"enum IHorizonStakingExtension.AllocationState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getDelegatedTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"getDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.Delegation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"}],\"name\":\"getDelegationFeeCut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getDelegationPool\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sharesThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.DelegationPool\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getIdleStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getIndexerStakedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getProviderTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getProvision\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sharesThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAt\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCutPending\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriodPending\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.Provision\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getServiceProvider\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokensStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensProvisioned\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ServiceProvider\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"}],\"name\":\"getThawRequest\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"next\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ThawRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getThawRequestList\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"internalType\":\"struct LinkedList.List\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getThawedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"}],\"name\":\"getTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"hasStake\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationId\",\"type\":\"address\"}],\"name\":\"isActiveAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"isAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"isAllowedLockedVerifier\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isAuthorized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDelegationSlashingEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"provision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"provisionLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldServiceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newServiceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minSharesForNewProvider\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"redelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"reprovision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setAllowedLockedVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"setDelegationFeeCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setDelegationSlashingEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"setMaxThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperatorLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"setProvisionParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensVerifier\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifierDestination\",\"type\":\"address\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeToProvision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"thaw\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"withdrawDelegated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newServiceProvider\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Use this interface to interact with the Horizon Staking contract.\",\"errors\":{\"HorizonStakingInsufficientIdleStake(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInsufficientShares(uint256,uint256)\":[{\"params\":{\"minShares\":\"The minimum required share amount\",\"shares\":\"The actual share amount\"}}],\"HorizonStakingInsufficientStakeForLegacyAllocations(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInsufficientTokens(uint256,uint256)\":[{\"params\":{\"minRequired\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInvalidDelegationFeeCut(uint256)\":[{\"params\":{\"feeCut\":\"The fee cut\"}}],\"HorizonStakingInvalidDelegationPool(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidDelegationPoolState(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidMaxVerifierCut(uint32)\":[{\"params\":{\"maxVerifierCut\":\"The maximum verifier cut\"}}],\"HorizonStakingInvalidProvision(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"params\":{\"maxThawingPeriod\":\"The maximum `thawingPeriod` allowed\",\"thawingPeriod\":\"The thawing period\"}}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"params\":{\"caller\":\"The caller address\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingSlippageProtection(uint256,uint256)\":[{\"params\":{\"minShares\":\"The minimum required share amount\",\"shares\":\"The actual share amount\"}}],\"HorizonStakingStillThawing(uint256)\":[{\"details\":\"Note this thawing refers to the global thawing period applied to legacy allocated tokens, it does not refer to thaw requests.\",\"params\":{\"until\":\"The block number until the stake is locked\"}}],\"HorizonStakingTooManyTokens(uint256,uint256)\":[{\"params\":{\"maxTokens\":\"The maximum allowed token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingVerifierNotAllowed(address)\":[{\"details\":\"Only applies to stake from locked wallets.\"}]},\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"details\":\"Emitted when `indexer` close an allocation in `epoch` for `allocationID`. An amount of `tokens` get unallocated from `subgraphDeploymentID`. This event also emits the POI (proof of indexing) submitted by the indexer. `isPublic` is true if the sender was someone other than the indexer.\"},\"AllowedLockedVerifierSet(address,bool)\":{\"params\":{\"allowed\":\"Whether the verifier is allowed or disallowed\",\"verifier\":\"The address of the verifier\"}},\"DelegatedTokensWithdrawn(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\",\"verifier\":\"The address of the verifier\"}},\"DelegationFeeCutSet(address,address,uint8,uint256)\":{\"params\":{\"feeCut\":\"The fee cut set, in PPM\",\"paymentType\":\"The payment type for which the fee cut is set, as defined in {IGraphPayments}\",\"serviceProvider\":\"The address of the service provider\",\"verifier\":\"The address of the verifier\"}},\"DelegationSlashed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens slashed (note this only represents delegation pool's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"DelegationSlashingEnabled(bool)\":{\"params\":{\"enabled\":\"Whether delegation slashing is enabled or disabled.\"}},\"DelegationSlashingSkipped(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens that would have been slashed (note this only represents delegation pool's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"MaxThawingPeriodSet(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period\"}},\"OperatorSet(address,address,address,bool)\":{\"details\":\"Emitted when an operator is allowed or denied by a service provider for a particular verifier\",\"params\":{\"allowed\":\"Whether the operator is allowed or denied\",\"operator\":\"The address of the operator\",\"serviceProvider\":\"The address of the service provider\",\"verifier\":\"The address of the verifier\"}},\"ProvisionCreated(address,address,uint256,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens provisioned\",\"verifier\":\"The address of the verifier\"}},\"ProvisionIncreased(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens added to the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionParametersSet(address,address,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The new maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The new period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionParametersStaged(address,address,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The proposed period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionSlashed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens slashed (note this only represents service provider's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"ProvisionThawed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens thawed\",\"verifier\":\"The address of the verifier\"}},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`. `epoch` is the protocol epoch the rebate was collected on The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees` is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt. `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected and sent to the delegation pool.\"},\"StakeDeposited(address,uint256)\":{\"details\":\"TODO: After transition period move to IHorizonStakingMain. Temporarily it needs to be here since it's emitted by {_stake} which is used by both {HorizonStaking} and {HorizonStakingExtension}.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens staked.\"}},\"StakeLocked(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens unstaked\",\"until\":\"The block number until the stake is locked\"}},\"StakeWithdrawn(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\"}},\"ThawRequestCreated(address,address,address,uint256,uint64,bytes32)\":{\"details\":\"Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\",\"params\":{\"owner\":\"The address of the owner of the thaw request.\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares being thawed\",\"thawRequestId\":\"The ID of the thaw request\",\"thawingUntil\":\"The timestamp until the stake is thawed\",\"verifier\":\"The address of the verifier\"}},\"ThawRequestFulfilled(bytes32,uint256,uint256,uint64,bool)\":{\"params\":{\"shares\":\"The amount of shares being released\",\"thawRequestId\":\"The ID of the thaw request\",\"thawingUntil\":\"The timestamp until the stake has thawed\",\"tokens\":\"The amount of tokens being released\",\"valid\":\"Whether the thaw request was valid at the time of fulfillment\"}},\"ThawRequestsFulfilled(address,address,address,uint256,uint256)\":{\"params\":{\"owner\":\"The address of the owner of the thaw requests\",\"serviceProvider\":\"The address of the service provider\",\"thawRequestsFulfilled\":\"The number of thaw requests fulfilled\",\"tokens\":\"The total amount of tokens being released\",\"verifier\":\"The address of the verifier\"}},\"ThawingPeriodCleared()\":{\"details\":\"This marks the end of the transition period.\"},\"TokensDelegated(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens delegated\",\"verifier\":\"The address of the verifier\"}},\"TokensDeprovisioned(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens removed\",\"verifier\":\"The address of the verifier\"}},\"TokensToDelegationPoolAdded(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\",\"verifier\":\"The address of the verifier\"}},\"TokensUndelegated(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens undelegated\",\"verifier\":\"The address of the verifier\"}},\"VerifierTokensSent(address,address,address,uint256)\":{\"params\":{\"destination\":\"The address where the verifier cut is sent\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens sent to the verifier\",\"verifier\":\"The address of the verifier\"}}},\"kind\":\"dev\",\"methods\":{\"__DEPRECATED_getThawingPeriod()\":{\"returns\":{\"_0\":\"Thawing period in blocks\"}},\"acceptProvisionParameters(address)\":{\"details\":\"Only the provision's verifier can call this function. Emits a {ProvisionParametersSet} event.\",\"params\":{\"serviceProvider\":\"The service provider address\"}},\"addToDelegationPool(address,address,uint256)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {TokensToDelegationPoolAdded} event.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to add to the delegation pool\",\"verifier\":\"The verifier address for which the tokens are provisioned\"}},\"addToProvision(address,address,uint256)\":{\"details\":\"Requirements: - The `serviceProvider` must have previously provisioned stake to `verifier`. - `tokens` cannot be zero. - The `serviceProvider` must have enough idle stake to cover the tokens to add. Emits a {ProvisionIncreased} event.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to add to the provision\",\"verifier\":\"The verifier address\"}},\"clearThawingPeriod()\":{\"details\":\"This function can only be called by the contract governor.Emits a {ThawingPeriodCleared} event.\"},\"closeAllocation(address,bytes32)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"poi\":\"Proof of indexing submitted for the allocated period\"}},\"collect(uint256,address)\":{\"details\":\"To avoid reverting on the withdrawal from channel flow this function will: 1) Accept calls with zero tokens. 2) Accept calls after an allocation passed the dispute period, in that case, all the received tokens are burned.\",\"params\":{\"allocationID\":\"Allocation where the tokens will be assigned\",\"tokens\":\"Amount of tokens to collect\"}},\"delegate(address,address,uint256,uint256)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. - The provision must exist. Emits a {TokensDelegated} event.\",\"params\":{\"minSharesOut\":\"The minimum amount of shares to accept, slippage protection.\",\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to delegate\",\"verifier\":\"The verifier address\"}},\"delegate(address,uint256)\":{\"details\":\"See {delegate}.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to delegate\"}},\"deprovision(address,address,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error. Requirements: - Must have previously initiated a thaw request using {thaw}. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {TokensDeprovisioned} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}},\"getAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as allocation identifier\"},\"returns\":{\"_0\":\"Allocation data\"}},\"getAllocationData(address)\":{\"details\":\"Get allocation data to calculate rewards issuance\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"accRewardsPending\":\"Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed\",\"accRewardsPerAllocatedToken\":\"Rewards snapshot\",\"indexer\":\"The indexer address\",\"subgraphDeploymentId\":\"Subgraph deployment id for the allocation\",\"tokens\":\"Amount of allocated tokens\"}},\"getAllocationState(address)\":{\"params\":{\"allocationID\":\"Allocation identifier\"},\"returns\":{\"_0\":\"AllocationState enum with the state of the allocation\"}},\"getDelegatedTokensAvailable(address,address)\":{\"details\":\"Calculated as the tokens available minus the tokens thawing.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"getDelegation(address,address,address)\":{\"params\":{\"delegator\":\"The address of the delegator.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation details.\"}},\"getDelegationFeeCut(address,address,uint8)\":{\"params\":{\"paymentType\":\"The payment type as defined by {IGraphPayments.PaymentTypes}.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation fee cut in PPM.\"}},\"getDelegationPool(address,address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation pool details.\"}},\"getIdleStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens that are idle.\"}},\"getIndexerStakedTokens(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"Amount of tokens staked by the indexer\"}},\"getProviderTokensAvailable(address,address)\":{\"details\":\"Calculated as the tokens available minus the tokens thawing.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"getProvision(address,address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The provision details.\"}},\"getServiceProvider(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"getStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens staked.\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"params\":{\"_subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"getThawRequest(bytes32)\":{\"params\":{\"thawRequestId\":\"The id of the thaw request.\"},\"returns\":{\"_0\":\"The thaw request details.\"}},\"getThawRequestList(address,address,address)\":{\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The thaw requests list metadata.\"}},\"getThawedTokens(address,address,address)\":{\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of thawed tokens.\"}},\"getTokensAvailable(address,address,uint32)\":{\"params\":{\"delegationRatio\":\"The delegation ratio.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"hasStake(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if indexer has staked tokens\"}},\"isActiveAllocation(address)\":{\"params\":{\"_allocationId\":\"Allocation Id\"},\"returns\":{\"_0\":\"Whether or not the allocation is active\"}},\"isAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as signer by the indexer for an allocation\"},\"returns\":{\"_0\":\"True if allocationID already used\"}},\"isAllowedLockedVerifier(address)\":{\"params\":{\"verifier\":\"Address of the verifier\"},\"returns\":{\"_0\":\"True if verifier is allowed locked verifier, false otherwise\"}},\"isAuthorized(address,address,address)\":{\"params\":{\"operator\":\"The address to check for auth\",\"serviceProvider\":\"The service provider on behalf of whom they're claiming to act\",\"verifier\":\"The verifier / data service on which they're claiming to act\"},\"returns\":{\"_0\":\"Whether the operator is authorized or not\"}},\"isOperator(address,address)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"operator\":\"Address of the operator\"},\"returns\":{\"_0\":\"True if operator is allowed for indexer, false otherwise\"}},\"provision(address,address,uint256,uint32,uint64)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - The `serviceProvider` must have enough idle stake to cover the tokens to provision. - `maxVerifierCut` must be a valid PPM. - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. Emits a {ProvisionCreated} event.\",\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens that will be locked and slashable\",\"verifier\":\"The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\"}},\"provisionLocked(address,address,uint256,uint32,uint64)\":{\"details\":\"See {provision}. Additional requirements: - The `verifier` must be allowed to be used for locked provisions.\",\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens that will be locked and slashable\",\"verifier\":\"The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\"}},\"redelegate(address,address,address,address,uint256,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error. Requirements: - Must have previously initiated a thaw request using {undelegate}. - `newServiceProvider` and `newVerifier` must not be the zero address. - `newServiceProvider` must have previously provisioned stake to `newVerifier`. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\",\"params\":{\"minSharesForNewProvider\":\"The minimum amount of shares to accept for the new service provider\",\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"newServiceProvider\":\"The address of a new service provider\",\"newVerifier\":\"The address of a new verifier\",\"oldServiceProvider\":\"The old service provider address\",\"oldVerifier\":\"The old verifier address\"}},\"reprovision(address,address,address,uint256)\":{\"details\":\"Requirements: - Must have previously initiated a thaw request using {thaw}. - `tokens` cannot be zero. - The `serviceProvider` must have previously provisioned stake to `newVerifier`. - The `serviceProvider` must have enough idle stake to cover the tokens to add. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled}, {TokensDeprovisioned} and {ProvisionIncreased} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"newVerifier\":\"The verifier address for which the tokens will be provisioned\",\"oldVerifier\":\"The verifier address for which the tokens are currently provisioned\",\"serviceProvider\":\"The service provider address\"}},\"setAllowedLockedVerifier(address,bool)\":{\"details\":\"This function can only be called by the contract governor, it's used to maintain a whitelist of verifiers that do not allow the stake from a locked wallet to escape the lock.Emits a {AllowedLockedVerifierSet} event.\",\"params\":{\"allowed\":\"Whether the verifier is allowed or not\",\"verifier\":\"The verifier address\"}},\"setDelegationFeeCut(address,address,uint8,uint256)\":{\"details\":\"Emits a {DelegationFeeCutSet} event.\",\"params\":{\"feeCut\":\"The fee cut to set, in PPM\",\"paymentType\":\"The payment type for which the fee cut is set, as defined in {IGraphPayments}\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}},\"setDelegationSlashingEnabled()\":{\"details\":\"This function can only be called by the contract governor.\"},\"setMaxThawingPeriod(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period, in seconds\"}},\"setOperator(address,address,bool)\":{\"details\":\"Emits a {OperatorSet} event.\",\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\",\"verifier\":\"The verifier / data service on which they'll be allowed to operate\"}},\"setOperatorLocked(address,address,bool)\":{\"details\":\"See {setOperator}. Additional requirements: - The `verifier` must be allowed to be used for locked provisions.\",\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\",\"verifier\":\"The verifier / data service on which they'll be allowed to operate\"}},\"setProvisionParameters(address,address,uint32,uint64)\":{\"details\":\"This two step update process prevents the service provider from changing the parameters without the verifier's consent. Emits a {ProvisionParametersStaged} event if at least one of the parameters changed.\",\"params\":{\"maxVerifierCut\":\"The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The proposed period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The verifier address\"}},\"slash(address,uint256,uint256,address)\":{\"details\":\"Requirements: - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider. - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut. Emits a {ProvisionSlashed} and {VerifierTokensSent} events. Emits a {DelegationSlashed} or {DelegationSlashingSkipped} event depending on the global delegation slashing flag.\",\"params\":{\"serviceProvider\":\"The service provider to slash\",\"tokens\":\"The amount of tokens to slash\",\"tokensVerifier\":\"The amount of tokens to transfer instead of burning\",\"verifierDestination\":\"The address to transfer the verifier cut to\"}},\"stake(uint256)\":{\"details\":\"Pulls tokens from the caller. Requirements: - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {StakeDeposited} event.\",\"params\":{\"tokens\":\"Amount of tokens to stake\"}},\"stakeTo(address,uint256)\":{\"details\":\"Pulls tokens from the caller. Requirements: - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {StakeDeposited} event.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\"}},\"stakeToProvision(address,address,uint256)\":{\"details\":\"Requirements: - The `serviceProvider` must have previously provisioned stake to `verifier`. - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits {StakeDeposited} and {ProvisionIncreased} events.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\",\"verifier\":\"Address of the verifier\"}},\"thaw(address,address,uint256)\":{\"details\":\"Requirements: - The provision must have enough tokens available to thaw. - `tokens` cannot be zero. Emits {ProvisionThawed} and {ThawRequestCreated} events.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to thaw\",\"verifier\":\"The verifier address for which the tokens are provisioned\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\",\"verifier\":\"The verifier address\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,address,uint256,address)\":{\"params\":{\"beneficiary\":\"The address where the tokens will be withdrawn after thawing\",\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\",\"verifier\":\"The verifier address\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,uint256)\":{\"details\":\"See {undelegate}.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\"}},\"unstake(uint256)\":{\"details\":\"Requirements: - `_tokens` cannot be zero. - `_serviceProvider` must have enough idle stake to cover the staking amount and any legacy allocation. Emits a {StakeLocked} event during the transition period. Emits a {StakeWithdrawn} event after the transition period.\",\"params\":{\"tokens\":\"Amount of tokens to unstake\"}},\"withdraw()\":{\"details\":\"This is only needed during the transition period while we still have a global lock. After that, unstake() will automatically withdraw.\"},\"withdrawDelegated(address,address)\":{\"details\":\"See {delegate}.\",\"params\":{\"newServiceProvider\":\"The address of a new service provider, if the delegator wants to re-delegate\",\"serviceProvider\":\"The service provider address\"}},\"withdrawDelegated(address,address,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error.If the delegation pool was completely slashed before withdrawing, calling this function will fulfill the thaw requests with an amount equal to zero. Requirements: - Must have previously initiated a thaw request using {undelegate}. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}},\"title\":\"Complete interface for the Horizon Staking contract\",\"version\":1},\"userdoc\":{\"errors\":{\"HorizonStakingCallerIsServiceProvider()\":[{\"notice\":\"Thrown when a service provider attempts to change their own operator access.\"}],\"HorizonStakingInsufficientIdleStake(uint256,uint256)\":[{\"notice\":\"Thrown when the service provider has insufficient idle stake to operate.\"}],\"HorizonStakingInsufficientShares(uint256,uint256)\":[{\"notice\":\"Thrown when a minimum share amount is required to operate but it's not met.\"}],\"HorizonStakingInsufficientStakeForLegacyAllocations(uint256,uint256)\":[{\"notice\":\"Thrown during the transition period when the service provider has insufficient stake to cover their existing legacy allocations.\"}],\"HorizonStakingInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when a minimum token amount is required to operate but it's not met.\"}],\"HorizonStakingInvalidBeneficiaryZeroAddress()\":[{\"notice\":\"Thrown when attempting to undelegate with a beneficiary that is the zero address.\"}],\"HorizonStakingInvalidDelegationFeeCut(uint256)\":[{\"notice\":\"Thrown when trying to set a delegation fee cut that is not valid.\"}],\"HorizonStakingInvalidDelegationPool(address,address)\":[{\"notice\":\"Thrown when attempting to operate with a delegation pool that does not exist.\"}],\"HorizonStakingInvalidDelegationPoolState(address,address)\":[{\"notice\":\"Thrown when as a result of slashing delegation pool has no tokens but has shares.\"}],\"HorizonStakingInvalidMaxVerifierCut(uint32)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid maximum verifier cut.\"}],\"HorizonStakingInvalidProvision(address,address)\":[{\"notice\":\"Thrown when attempting to operate with a provision that does not exist.\"}],\"HorizonStakingInvalidServiceProviderZeroAddress()\":[{\"notice\":\"Thrown when attempting to redelegate with a serivce provider that is the zero address.\"}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid thawing period.\"}],\"HorizonStakingInvalidVerifierZeroAddress()\":[{\"notice\":\"Thrown when attempting to redelegate with a verifier that is the zero address.\"}],\"HorizonStakingInvalidZeroShares()\":[{\"notice\":\"Thrown when operating a zero share amount is not allowed.\"}],\"HorizonStakingInvalidZeroTokens()\":[{\"notice\":\"Thrown when operating a zero token amount is not allowed.\"}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to operate on a provision.\"}],\"HorizonStakingProvisionAlreadyExists()\":[{\"notice\":\"Thrown when attempting to create a provision for a data service that already has a provision.\"}],\"HorizonStakingSlippageProtection(uint256,uint256)\":[{\"notice\":\"Thrown when delegation shares obtained are below the expected amount.\"}],\"HorizonStakingStillThawing(uint256)\":[{\"notice\":\"Thrown during the transition period when attempting to withdraw tokens that are still thawing.\"}],\"HorizonStakingTooManyTokens(uint256,uint256)\":[{\"notice\":\"Thrown when the amount of tokens exceeds the maximum allowed to operate.\"}],\"HorizonStakingVerifierNotAllowed(address)\":[{\"notice\":\"Thrown when a service provider attempts to operate on verifiers that are not allowed.\"}]},\"events\":{\"AllowedLockedVerifierSet(address,bool)\":{\"notice\":\"Emitted when a verifier is allowed or disallowed to be used for locked provisions.\"},\"DelegatedTokensWithdrawn(address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator withdraws tokens from a provision after thawing.\"},\"DelegationFeeCutSet(address,address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider sets delegation fee cuts for a verifier.\"},\"DelegationSlashed(address,address,uint256)\":{\"notice\":\"Emitted when a delegation pool is slashed by a verifier.\"},\"DelegationSlashingEnabled(bool)\":{\"notice\":\"Emitted when the delegation slashing global flag is set.\"},\"DelegationSlashingSkipped(address,address,uint256)\":{\"notice\":\"Emitted when a delegation pool would have been slashed by a verifier, but the slashing was skipped because delegation slashing global parameter is not enabled.\"},\"MaxThawingPeriodSet(uint64)\":{\"notice\":\"Emitted when the global maximum thawing period allowed for provisions is set.\"},\"ProvisionCreated(address,address,uint256,uint32,uint64)\":{\"notice\":\"Emitted when a service provider provisions staked tokens to a verifier.\"},\"ProvisionIncreased(address,address,uint256)\":{\"notice\":\"Emitted whenever staked tokens are added to an existing provision\"},\"ProvisionParametersSet(address,address,uint32,uint64)\":{\"notice\":\"Emitted when a service provider accepts a staged provision parameter update.\"},\"ProvisionParametersStaged(address,address,uint32,uint64)\":{\"notice\":\"Emitted when a service provider stages a provision parameter update.\"},\"ProvisionSlashed(address,address,uint256)\":{\"notice\":\"Emitted when a provision is slashed by a verifier.\"},\"ProvisionThawed(address,address,uint256)\":{\"notice\":\"Emitted when a service provider thaws tokens from a provision.\"},\"StakeDeposited(address,uint256)\":{\"notice\":\"Emitted when a service provider stakes tokens.\"},\"StakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when a service provider unstakes tokens during the transition period.\"},\"StakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when a service provider withdraws tokens during the transition period.\"},\"ThawRequestCreated(address,address,address,uint256,uint64,bytes32)\":{\"notice\":\"Emitted when a thaw request is created.\"},\"ThawRequestFulfilled(bytes32,uint256,uint256,uint64,bool)\":{\"notice\":\"Emitted when a thaw request is fulfilled, meaning the stake is released.\"},\"ThawRequestsFulfilled(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a series of thaw requests are fulfilled.\"},\"ThawingPeriodCleared()\":{\"notice\":\"Emitted when the legacy global thawing period is set to zero.\"},\"TokensDelegated(address,address,address,uint256)\":{\"notice\":\"Emitted when tokens are delegated to a provision.\"},\"TokensDeprovisioned(address,address,uint256)\":{\"notice\":\"Emitted when a service provider removes tokens from a provision.\"},\"TokensToDelegationPoolAdded(address,address,uint256)\":{\"notice\":\"Emitted when tokens are added to a delegation pool's reserve.\"},\"TokensUndelegated(address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator undelegates tokens from a provision and starts thawing them.\"},\"VerifierTokensSent(address,address,address,uint256)\":{\"notice\":\"Emitted when the verifier cut is sent to the verifier after slashing a provision.\"}},\"kind\":\"user\",\"methods\":{\"__DEPRECATED_getThawingPeriod()\":{\"notice\":\"Return the time in blocks to unstake\"},\"acceptProvisionParameters(address)\":{\"notice\":\"Accepts a staged provision parameter update.\"},\"addToDelegationPool(address,address,uint256)\":{\"notice\":\"Add tokens to a delegation pool without issuing shares. Used by data services to pay delegation fees/rewards. Delegators SHOULD NOT call this function.\"},\"addToProvision(address,address,uint256)\":{\"notice\":\"Adds tokens from the service provider's idle stake to a provision\"},\"clearThawingPeriod()\":{\"notice\":\"Clear the legacy global thawing period. This signifies the end of the transition period, after which no legacy allocations should be left.\"},\"closeAllocation(address,bytes32)\":{\"notice\":\"Close an allocation and free the staked tokens. To be eligible for rewards a proof of indexing must be presented. Presenting a bad proof is subject to slashable condition. To opt out of rewards set _poi to 0x0\"},\"collect(uint256,address)\":{\"notice\":\"Collect query fees from state channels and assign them to an allocation. Funds received are only accepted from a valid sender.\"},\"delegate(address,address,uint256,uint256)\":{\"notice\":\"Delegate tokens to a provision.\"},\"delegate(address,uint256)\":{\"notice\":\"Delegate tokens to the subgraph data service provision. This function is for backwards compatibility with the legacy staking contract. It only allows delegating to the subgraph data service and DOES NOT have slippage protection.\"},\"deprovision(address,address,uint256)\":{\"notice\":\"Remove tokens from a provision and move them back to the service provider's idle stake.\"},\"getAllocation(address)\":{\"notice\":\"Return the allocation by ID.\"},\"getAllocationState(address)\":{\"notice\":\"Return the current state of an allocation\"},\"getDelegatedTokensAvailable(address,address)\":{\"notice\":\"Gets the delegator's tokens available in a provision.\"},\"getDelegation(address,address,address)\":{\"notice\":\"Gets the details of a delegation.\"},\"getDelegationFeeCut(address,address,uint8)\":{\"notice\":\"Gets the delegation fee cut for a payment type.\"},\"getDelegationPool(address,address)\":{\"notice\":\"Gets the details of delegation pool.\"},\"getIdleStake(address)\":{\"notice\":\"Gets the service provider's idle stake which is the stake that is not being used for any provision. Note that this only includes service provider's self stake.\"},\"getIndexerStakedTokens(address)\":{\"notice\":\"Get the total amount of tokens staked by the indexer.\"},\"getMaxThawingPeriod()\":{\"notice\":\"Gets the maximum allowed thawing period for a provision.\"},\"getProviderTokensAvailable(address,address)\":{\"notice\":\"Gets the service provider's tokens available in a provision.\"},\"getProvision(address,address)\":{\"notice\":\"Gets the details of a provision.\"},\"getServiceProvider(address)\":{\"notice\":\"Gets the details of a service provider.\"},\"getStake(address)\":{\"notice\":\"Gets the stake of a service provider.\"},\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"getThawRequest(bytes32)\":{\"notice\":\"Gets a thaw request.\"},\"getThawRequestList(address,address,address)\":{\"notice\":\"Gets the metadata of a thaw request list. Service provider and delegators each have their own thaw request list per provision. Metadata includes the head and tail of the list, plus the total number of thaw requests.\"},\"getThawedTokens(address,address,address)\":{\"notice\":\"Gets the amount of thawed tokens for a given provision.\"},\"getTokensAvailable(address,address,uint32)\":{\"notice\":\"Gets the tokens available in a provision. Tokens available are the tokens in a provision that are not thawing. Includes service provider's and delegator's stake. Allows specifying a `delegationRatio` which caps the amount of delegated tokens that are considered available.\"},\"hasStake(address)\":{\"notice\":\"Getter that returns if an indexer has any stake.\"},\"isActiveAllocation(address)\":{\"notice\":\"Whether or not an allocation is active (i.e open)\"},\"isAllocation(address)\":{\"notice\":\"Return if allocationID is used.\"},\"isAllowedLockedVerifier(address)\":{\"notice\":\"Return true if the verifier is an allowed locked verifier.\"},\"isAuthorized(address,address,address)\":{\"notice\":\"Check if an operator is authorized for the caller on a specific verifier / data service.\"},\"isDelegationSlashingEnabled()\":{\"notice\":\"Return true if delegation slashing is enabled, false otherwise.\"},\"isOperator(address,address)\":{\"notice\":\"Return true if operator is allowed for indexer.\"},\"provision(address,address,uint256,uint32,uint64)\":{\"notice\":\"Provision stake to a verifier. The tokens will be locked with a thawing period and will be slashable by the verifier. This is the main mechanism to provision stake to a data service, where the data service is the verifier. This function can be called by the service provider or by an operator authorized by the provider for this specific verifier.\"},\"provisionLocked(address,address,uint256,uint32,uint64)\":{\"notice\":\"Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets).\"},\"redelegate(address,address,address,address,uint256,uint256)\":{\"notice\":\"Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`.\"},\"reprovision(address,address,address,uint256)\":{\"notice\":\"Move already thawed stake from one provision into another provision This function can be called by the service provider or by an operator authorized by the provider for the two corresponding verifiers.\"},\"setAllowedLockedVerifier(address,bool)\":{\"notice\":\"Sets a verifier as a globally allowed verifier for locked provisions.\"},\"setDelegationFeeCut(address,address,uint8,uint256)\":{\"notice\":\"Set the fee cut for a verifier on a specific payment type.\"},\"setDelegationSlashingEnabled()\":{\"notice\":\"Set the global delegation slashing flag to true.\"},\"setMaxThawingPeriod(uint64)\":{\"notice\":\"Sets the global maximum thawing period allowed for provisions.\"},\"setOperator(address,address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller on a data service.\"},\"setOperatorLocked(address,address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller on a verifier.\"},\"setProvisionParameters(address,address,uint32,uint64)\":{\"notice\":\"Stages a provision parameter update. Note that the change is not effective until the verifier calls {acceptProvisionParameters}.\"},\"slash(address,uint256,uint256,address)\":{\"notice\":\"Slash a service provider. This can only be called by a verifier to which the provider has provisioned stake, and up to the amount of tokens they have provisioned. If the service provider's stake is not enough, the associated delegation pool might be slashed depending on the value of the global delegation slashing flag. Part of the slashed tokens are sent to the `verifierDestination` as a reward.\"},\"stake(uint256)\":{\"notice\":\"Deposit tokens on the staking contract.\"},\"stakeTo(address,uint256)\":{\"notice\":\"Deposit tokens on the service provider stake, on behalf of the service provider.\"},\"stakeToProvision(address,address,uint256)\":{\"notice\":\"Deposit tokens on the service provider stake, on behalf of the service provider, provisioned to a specific verifier.\"},\"thaw(address,address,uint256)\":{\"notice\":\"Start thawing tokens to remove them from a provision. This function can be called by the service provider or by an operator authorized by the provider for this specific verifier. Note that removing tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {deprovision} or {reprovision}.\"},\"undelegate(address,address,uint256)\":{\"notice\":\"Undelegate tokens from a provision and start thawing them. Note that undelegating tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. Requirements: - `shares` cannot be zero. Emits a {TokensUndelegated} and {ThawRequestCreated} event.\"},\"undelegate(address,address,uint256,address)\":{\"notice\":\"Undelegate tokens from a provision and start thawing them. The tokens will be withdrawable by the `beneficiary` after the thawing period. Note that undelegating tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. Requirements: - `shares` cannot be zero. - `beneficiary` cannot be the zero address. Emits a {TokensUndelegated} and {ThawRequestCreated} event.\"},\"undelegate(address,uint256)\":{\"notice\":\"Undelegate tokens from the subgraph data service provision and start thawing them. This function is for backwards compatibility with the legacy staking contract. It only allows undelegating from the subgraph data service.\"},\"unstake(uint256)\":{\"notice\":\"Move idle stake back to the owner's account. Stake is removed from the protocol: - During the transition period it's locked for a period of time before it can be withdrawn by calling {withdraw}. - After the transition period it's immediately withdrawn.\"},\"withdraw()\":{\"notice\":\"Withdraw service provider tokens once the thawing period (initiated by {unstake}) has passed. All thawed tokens are withdrawn.\"},\"withdrawDelegated(address,address)\":{\"notice\":\"Withdraw undelegated tokens from the subgraph data service provision after thawing. This function is for backwards compatibility with the legacy staking contract. It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in case the caller opts for re-delegating.\"},\"withdrawDelegated(address,address,uint256)\":{\"notice\":\"Withdraw undelegated tokens from a provision after thawing.\"}},\"notice\":\"This interface exposes all functions implemented by the {HorizonStaking} contract and its extension {HorizonStakingExtension} as well as the custom data types used by the contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":\"IHorizonStaking\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol": { + "IPaymentsCollector": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "collect(uint8,bytes)": "7f07d283" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReceiver\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"PaymentCollected\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"It's important to note that it's the collector contract's responsibility to validate the payment request is legitimate.\",\"events\":{\"PaymentCollected(uint8,address,address,uint256,address,uint256)\":{\"params\":{\"dataService\":\"The address of the data service\",\"payer\":\"The address of the payer\",\"paymentType\":\"The payment type collected as defined by {IGraphPayments}\",\"receiver\":\"The address of the receiver\",\"tokensDataService\":\"The amount of tokens received by the data service\",\"tokensReceiver\":\"The amount of tokens received by the receiver\"}}},\"kind\":\"dev\",\"methods\":{\"collect(uint8,bytes)\":{\"details\":\"This function should require the caller to present some form of evidence of the payer's debt to the receiver. The collector should validate this evidence and, if valid, collect the payment. Requirements: - The caller must be the data service the RAV was issued to - The signer of the RAV must be authorized to sign for the payer Emits a {PaymentCollected} event\",\"params\":{\"data\":\"Additional data required for the payment collection. Will vary depending on the collector implementation.\",\"paymentType\":\"The payment type to collect, as defined by {IGraphPayments}\"}}},\"title\":\"Interface for a payments collector contract as defined by Graph Horizon payments protocol\",\"version\":1},\"userdoc\":{\"events\":{\"PaymentCollected(uint8,address,address,uint256,address,uint256)\":{\"notice\":\"Emitted when a payment is collected\"}},\"kind\":\"user\",\"methods\":{\"collect(uint8,bytes)\":{\"notice\":\"Initiate a payment collection through the payments protocol\"}},\"notice\":\"Contracts implementing this interface can be used with the payments protocol. First, a payer must approve the collector to collect payments on their behalf. Only then can payment collection be initiated using the collector contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":\"IPaymentsCollector\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":{\"keccak256\":\"0x86f3cfc8eaac309e99018dda796248fb44130b09c2e5bcfc6c63c0e568803bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://176a017cb5c677222ac6a82fecd798292f5f41b4dcb9e16768fbf87816381010\",\"dweb:/ipfs/QmNuLfA5nZptMzWPuvDzJnm7Pwt7uYn1A7G8fwTWPy5Ybm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol": { + "IPaymentsEscrow": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInconsistentCollection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAllowance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minBalance", + "type": "uint256" + } + ], + "name": "PaymentsEscrowInsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "PaymentsEscrowNotThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "PaymentsEscrowStillThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "thawingPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxWaitPeriod", + "type": "uint256" + } + ], + "name": "PaymentsEscrowThawingPeriodTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addedAllowance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalAllowance", + "type": "uint256" + } + ], + "name": "AuthorizedCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "CancelThaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "CancelThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "EscrowCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "RevokeCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "Thaw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "ThawCollector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + } + ], + "name": "approveCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "cancelThawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "depositTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "revokeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + } + ], + "name": "thawCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "collector", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "approveCollector(address,uint256)": "4f9d392e", + "cancelThawCollector(address)": "78a24c54", + "collect(uint8,address,address,uint256,address,uint256)": "87dbfe82", + "deposit(address,address,uint256)": "8340f549", + "depositTo(address,address,address,uint256)": "72eb521e", + "getBalance(address,address,address)": "d6bd603c", + "revokeCollector(address)": "32825b81", + "thaw(address,address,uint256)": "f93f1cd0", + "thawCollector(address)": "0ee36be3", + "withdraw(address,address)": "f940e385" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balanceBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowInconsistentCollection\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAllowance\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowInsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBalance\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentsEscrowInvalidZeroTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentsEscrowIsPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentsEscrowNotThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowStillThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"thawingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxWaitPeriod\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowThawingPeriodTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"addedAllowance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalAllowance\",\"type\":\"uint256\"}],\"name\":\"AuthorizedCollector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"CancelThaw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"CancelThawCollector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"EscrowCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"RevokeCollector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"Thaw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"ThawCollector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"}],\"name\":\"approveCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"cancelThawCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"depositTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"revokeCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"thaw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"thawCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"PaymentsEscrowInconsistentCollection(uint256,uint256,uint256)\":[{\"params\":{\"balanceAfter\":\"The balance after the collection\",\"balanceBefore\":\"The balance before the collection\",\"tokens\":\"The amount of tokens collected\"}}],\"PaymentsEscrowInsufficientAllowance(uint256,uint256)\":[{\"params\":{\"allowance\":\"The current allowance\",\"minAllowance\":\"The minimum required allowance\"}}],\"PaymentsEscrowInsufficientBalance(uint256,uint256)\":[{\"params\":{\"balance\":\"The current balance\",\"minBalance\":\"The minimum required balance\"}}],\"PaymentsEscrowStillThawing(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}],\"PaymentsEscrowThawingPeriodTooLong(uint256,uint256)\":[{\"params\":{\"maxWaitPeriod\":\"The maximum wait period\",\"thawingPeriod\":\"The thawing period\"}}]},\"events\":{\"AuthorizedCollector(address,address,uint256,uint256)\":{\"params\":{\"addedAllowance\":\"The amount of tokens added to the collector's allowance\",\"collector\":\"The address of the collector\",\"newTotalAllowance\":\"The new total allowance after addition\",\"payer\":\"The address of the payer\"}},\"CancelThaw(address,address)\":{\"params\":{\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\"}},\"CancelThawCollector(address,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\"}},\"Deposit(address,address,address,uint256)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens deposited\"}},\"EscrowCollected(address,address,address,uint256)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens collected\"}},\"RevokeCollector(address,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\"}},\"Thaw(address,address,address,uint256,uint256)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\",\"tokens\":\"The amount of tokens being thawed\"}},\"ThawCollector(address,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\"}},\"Withdraw(address,address,address,uint256)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens withdrawn\"}}},\"kind\":\"dev\",\"methods\":{\"approveCollector(address,uint256)\":{\"details\":\"This function can only be used to increase the allowance of a collector. To reduce it the authorization must be revoked and a new one must be created. Requirements: - `allowance` must be greater than zero Emits an {AuthorizedCollector} event\",\"params\":{\"allowance\":\"The amount of tokens to add to the collector's allowance\",\"collector\":\"The address of the collector\"}},\"cancelThawCollector(address)\":{\"details\":\"Requirements: - `collector` must be thawing Emits a {CancelThawCollector} event\",\"params\":{\"collector\":\"The address of the collector\"}},\"collect(uint8,address,address,uint256,address,uint256)\":{\"details\":\"Requirements: - `collector` needs to be authorized by the payer and have enough allowance Emits an {EscrowCollected} event\",\"params\":{\"dataService\":\"The address of the data service\",\"payer\":\"The address of the payer\",\"paymentType\":\"The type of payment being collected as defined in the {IGraphPayments} interface\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to collect\",\"tokensDataService\":\"The amount of tokens that {GraphPayments} should send to the data service\"}},\"deposit(address,address,uint256)\":{\"details\":\"Emits a {Deposit} event\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to deposit\"}},\"depositTo(address,address,address,uint256)\":{\"details\":\"Emits a {Deposit} event\",\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to deposit\"}},\"getBalance(address,address,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\"}},\"revokeCollector(address)\":{\"details\":\"Requirements: - `collector` must have thawed Emits a {RevokeCollector} event\",\"params\":{\"collector\":\"The address of the collector\"}},\"thaw(address,address,uint256)\":{\"details\":\"Requirements: - `tokens` must be less than or equal to the available balance Emits a {Thaw} event. If `tokens` is zero it will emit a {CancelThaw} event.\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to thaw\"}},\"thawCollector(address)\":{\"details\":\"The thawing period is defined by the `REVOKE_COLLECTOR_THAWING_PERIOD` constant Emits a {ThawCollector} event\",\"params\":{\"collector\":\"The address of the collector\"}},\"withdraw(address,address)\":{\"details\":\"Requirements: - Funds must be thawed Emits a {Withdraw} event\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\"}}},\"title\":\"Interface for the {PaymentsEscrow} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"PaymentsEscrowInconsistentCollection(uint256,uint256,uint256)\":[{\"notice\":\"Thrown when the contract balance is not consistent with the collection amount\"}],\"PaymentsEscrowInsufficientAllowance(uint256,uint256)\":[{\"notice\":\"Thrown when a collector has insufficient allowance to collect funds\"}],\"PaymentsEscrowInsufficientBalance(uint256,uint256)\":[{\"notice\":\"Thrown when the available balance is insufficient to perform an operation\"}],\"PaymentsEscrowInvalidZeroTokens()\":[{\"notice\":\"Thrown when operating a zero token amount is not allowed.\"}],\"PaymentsEscrowIsPaused()\":[{\"notice\":\"Thrown when a protected function is called and the contract is paused.\"}],\"PaymentsEscrowNotThawing()\":[{\"notice\":\"Thrown when a thawing is expected to be in progress but it is not\"}],\"PaymentsEscrowStillThawing(uint256,uint256)\":[{\"notice\":\"Thrown when a thawing is still in progress\"}],\"PaymentsEscrowThawingPeriodTooLong(uint256,uint256)\":[{\"notice\":\"Thrown when setting the thawing period to a value greater than the maximum\"}]},\"events\":{\"AuthorizedCollector(address,address,uint256,uint256)\":{\"notice\":\"Emitted when a payer authorizes a collector to collect funds\"},\"CancelThaw(address,address)\":{\"notice\":\"Emitted when a payer cancels an escrow thawing\"},\"CancelThawCollector(address,address)\":{\"notice\":\"Emitted when a payer cancels the thawing of a collector\"},\"Deposit(address,address,address,uint256)\":{\"notice\":\"Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple\"},\"EscrowCollected(address,address,address,uint256)\":{\"notice\":\"Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple\"},\"RevokeCollector(address,address)\":{\"notice\":\"Emitted when a payer revokes a collector authorization.\"},\"Thaw(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a payer thaws funds from the escrow for a payer-collector-receiver tuple\"},\"ThawCollector(address,address)\":{\"notice\":\"Emitted when a payer thaws a collector\"},\"Withdraw(address,address,address,uint256)\":{\"notice\":\"Emitted when a payer withdraws funds from the escrow for a payer-collector-receiver tuple\"}},\"kind\":\"user\",\"methods\":{\"approveCollector(address,uint256)\":{\"notice\":\"Authorize a collector to collect funds from the payer's escrow\"},\"cancelThawCollector(address)\":{\"notice\":\"Cancel a collector's authorization thawing\"},\"collect(uint8,address,address,uint256,address,uint256)\":{\"notice\":\"Collects funds from the payer-collector-receiver's escrow and sends them to {GraphPayments} for distribution using the Graph Horizon Payments protocol. The function will revert if there are not enough funds in the escrow.\"},\"deposit(address,address,uint256)\":{\"notice\":\"Deposits funds into the escrow for a payer-collector-receiver tuple, where the payer is the transaction caller.\"},\"depositTo(address,address,address,uint256)\":{\"notice\":\"Deposits funds into the escrow for a payer-collector-receiver tuple, where the payer can be specified.\"},\"getBalance(address,address,address)\":{\"notice\":\"Get the balance of a payer-collector-receiver tuple\"},\"revokeCollector(address)\":{\"notice\":\"Revoke a collector's authorization. Removes the collector from the list of authorized collectors.\"},\"thaw(address,address,uint256)\":{\"notice\":\"Thaw a specific amount of escrow from a payer-collector-receiver's escrow account. The payer is the transaction caller. If `tokens` is zero and funds were already thawing it will cancel the thawing. Note that repeated calls to this function will overwrite the previous thawing amount and reset the thawing period.\"},\"thawCollector(address)\":{\"notice\":\"Thaw a collector's collector authorization\"},\"withdraw(address,address)\":{\"notice\":\"Withdraws all thawed escrow from a payer-collector-receiver's escrow account. The payer is the transaction caller. Note that the withdrawn funds might be less than the thawed amount if there were payment collections in the meantime.\"}},\"notice\":\"This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT) for payments made through the payments protocol for services provided via a Graph Horizon data service. Payers deposit funds on the escrow, signalling their ability to pay for a service, and only being able to retrieve them after a thawing period. Receivers collect funds from the escrow, provided the payer has authorized them. The payer authorization is delegated to a payment collector contract which implements the {IPaymentsCollector} interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":\"IPaymentsEscrow\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol": { + "ITAPCollector": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "dataService", + "type": "address" + } + ], + "name": "TAPCollectorCallerNotDataService", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensCollected", + "type": "uint256" + } + ], + "name": "TAPCollectorInconsistentRAVTokens", + "type": "error" + }, + { + "inputs": [], + "name": "TAPCollectorInvalidRAVSigner", + "type": "error" + }, + { + "inputs": [], + "name": "TAPCollectorInvalidSignerProof", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proofDeadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + } + ], + "name": "TAPCollectorInvalidSignerProofDeadline", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizingPayer", + "type": "address" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "TAPCollectorSignerAlreadyAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "TAPCollectorSignerNotAuthorizedByPayer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "TAPCollectorSignerNotThawing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "TAPCollectorSignerStillThawing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReceiver", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "PaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "RAVCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "authorizedSigner", + "type": "address" + } + ], + "name": "SignerAuthorized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "authorizedSigner", + "type": "address" + } + ], + "name": "SignerRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "authorizedSigner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "SignerThawCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "authorizedSigner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawEndTimestamp", + "type": "uint256" + } + ], + "name": "SignerThawing", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "proofDeadline", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "proof", + "type": "bytes" + } + ], + "name": "authorizeSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "cancelThawSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", + "name": "rav", + "type": "tuple" + } + ], + "name": "encodeRAV", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "dataService", + "type": "address" + }, + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint64", + "name": "timestampNs", + "type": "uint64" + }, + { + "internalType": "uint128", + "name": "valueAggregate", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", + "name": "rav", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct ITAPCollector.SignedRAV", + "name": "signedRAV", + "type": "tuple" + } + ], + "name": "recoverRAVSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "revokeAuthorizedSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + } + ], + "name": "thawSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "authorizeSigner(address,uint256,bytes)": "fee9f01f", + "cancelThawSigner(address)": "015cdd80", + "collect(uint8,bytes)": "7f07d283", + "encodeRAV((address,address,uint64,uint128,bytes))": "8821603c", + "recoverRAVSigner(((address,address,uint64,uint128,bytes),bytes))": "1ef518f2", + "revokeAuthorizedSigner(address)": "39aa7416", + "thawSigner(address)": "1354f019" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"}],\"name\":\"TAPCollectorCallerNotDataService\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensCollected\",\"type\":\"uint256\"}],\"name\":\"TAPCollectorInconsistentRAVTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TAPCollectorInvalidRAVSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TAPCollectorInvalidSignerProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"}],\"name\":\"TAPCollectorInvalidSignerProofDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizingPayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"TAPCollectorSignerAlreadyAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"TAPCollectorSignerNotAuthorizedByPayer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"TAPCollectorSignerNotThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"TAPCollectorSignerStillThawing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReceiver\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"PaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"RAVCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizedSigner\",\"type\":\"address\"}],\"name\":\"SignerAuthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizedSigner\",\"type\":\"address\"}],\"name\":\"SignerRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizedSigner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizedSigner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawing\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"proofDeadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"authorizeSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"cancelThawSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct ITAPCollector.ReceiptAggregateVoucher\",\"name\":\"rav\",\"type\":\"tuple\"}],\"name\":\"encodeRAV\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct ITAPCollector.ReceiptAggregateVoucher\",\"name\":\"rav\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct ITAPCollector.SignedRAV\",\"name\":\"signedRAV\",\"type\":\"tuple\"}],\"name\":\"recoverRAVSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"revokeAuthorizedSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"thawSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implements the {IPaymentCollector} interface as defined by the Graph Horizon payments protocol.\",\"errors\":{\"TAPCollectorCallerNotDataService(address,address)\":[{\"params\":{\"caller\":\"The address of the caller\",\"dataService\":\"The address of the data service\"}}],\"TAPCollectorInconsistentRAVTokens(uint256,uint256)\":[{\"params\":{\"tokens\":\"The amount of tokens in the RAV\",\"tokensCollected\":\"The amount of tokens already collected\"}}],\"TAPCollectorInvalidSignerProofDeadline(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"proofDeadline\":\"The deadline for the proof provided by the signer\"}}],\"TAPCollectorSignerAlreadyAuthorized(address,address)\":[{\"params\":{\"authorizingPayer\":\"The address of the payer authorizing the signer\",\"signer\":\"The address of the signer\"}}],\"TAPCollectorSignerNotAuthorizedByPayer(address,address)\":[{\"params\":{\"payer\":\"The address of the payer\",\"signer\":\"The address of the signer\"}}],\"TAPCollectorSignerNotThawing(address)\":[{\"params\":{\"signer\":\"The address of the signer\"}}],\"TAPCollectorSignerStillThawing(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}]},\"events\":{\"PaymentCollected(uint8,address,address,uint256,address,uint256)\":{\"params\":{\"dataService\":\"The address of the data service\",\"payer\":\"The address of the payer\",\"paymentType\":\"The payment type collected as defined by {IGraphPayments}\",\"receiver\":\"The address of the receiver\",\"tokensDataService\":\"The amount of tokens received by the data service\",\"tokensReceiver\":\"The amount of tokens received by the receiver\"}},\"RAVCollected(address,address,address,uint64,uint128,bytes,bytes)\":{\"params\":{\"dataService\":\"The address of the data service\",\"metadata\":\"Arbitrary metadata\",\"payer\":\"The address of the payer\",\"serviceProvider\":\"The address of the service provider\",\"signature\":\"The signature of the RAV\",\"timestampNs\":\"The timestamp of the RAV\",\"valueAggregate\":\"The total amount owed to the service provider\"}},\"SignerAuthorized(address,address)\":{\"params\":{\"authorizedSigner\":\"The address of the authorized signer\",\"payer\":\"The address of the payer authorizing the signer\"}},\"SignerRevoked(address,address)\":{\"details\":\"Emitted when a authorized signer has been revoked\",\"params\":{\"authorizedSigner\":\"The address of the authorized signer\",\"payer\":\"The address of the payer revoking the signer\"}},\"SignerThawCanceled(address,address,uint256)\":{\"details\":\"Emitted when the thawing of a signer is cancelled\",\"params\":{\"authorizedSigner\":\"The address of the authorized signer\",\"payer\":\"The address of the payer cancelling the thawing\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}},\"SignerThawing(address,address,uint256)\":{\"params\":{\"authorizedSigner\":\"The address of the signer to thaw\",\"payer\":\"The address of the payer thawing the signer\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}},\"kind\":\"dev\",\"methods\":{\"authorizeSigner(address,uint256,bytes)\":{\"details\":\"Requirements: - `signer` must not be already authorized - `proofDeadline` must be greater than the current timestamp - `proof` must be a valid signature from the signer being authorized Emits an {SignerAuthorized} event\",\"params\":{\"proof\":\"The proof provided by the signer to be authorized by the payer, consists of (chainID, proof deadline, sender address)\",\"proofDeadline\":\"The deadline for the proof provided by the signer\",\"signer\":\"The addres of the authorized signer\"}},\"cancelThawSigner(address)\":{\"details\":\"Requirements: - `signer` must be thawing and authorized by the payer calling this function Emits a {SignerThawCanceled} event\",\"params\":{\"signer\":\"The address of the signer to cancel thawing\"}},\"collect(uint8,bytes)\":{\"details\":\"This function should require the caller to present some form of evidence of the payer's debt to the receiver. The collector should validate this evidence and, if valid, collect the payment. Requirements: - The caller must be the data service the RAV was issued to - The signer of the RAV must be authorized to sign for the payer Emits a {PaymentCollected} event\",\"params\":{\"data\":\"Additional data required for the payment collection. Will vary depending on the collector implementation.\",\"paymentType\":\"The payment type to collect, as defined by {IGraphPayments}\"}},\"encodeRAV((address,address,uint64,uint128,bytes))\":{\"details\":\"Computes the hash of a ReceiptAggregateVoucher (RAV).\",\"params\":{\"rav\":\"The RAV for which to compute the hash.\"},\"returns\":{\"_0\":\"The hash of the RAV.\"}},\"recoverRAVSigner(((address,address,uint64,uint128,bytes),bytes))\":{\"details\":\"Recovers the signer address of a signed ReceiptAggregateVoucher (RAV).\",\"params\":{\"signedRAV\":\"The SignedRAV containing the RAV and its signature.\"},\"returns\":{\"_0\":\"The address of the signer.\"}},\"revokeAuthorizedSigner(address)\":{\"details\":\"Requirements: - `signer` must be thawed and authorized by the payer calling this function Emits a {SignerRevoked} event\",\"params\":{\"signer\":\"The address of the signer\"}},\"thawSigner(address)\":{\"details\":\"Thawing a signer alerts receivers that signatures from that signer will soon be deemed invalid. Receivers without existing signed receipts or RAVs from this signer should treat them as unauthorized. Those with existing signed documents from this signer should work towards settling their engagements. Once a signer is thawed, they should be viewed as revoked regardless of their revocation status. Requirements: - `signer` must be authorized by the payer calling this function Emits a {SignerThawing} event\",\"params\":{\"signer\":\"The address of the signer to thaw\"}}},\"title\":\"Interface for the {TAPCollector} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"TAPCollectorCallerNotDataService(address,address)\":[{\"notice\":\"Thrown when the caller is not the data service the RAV was issued to\"}],\"TAPCollectorInconsistentRAVTokens(uint256,uint256)\":[{\"notice\":\"Thrown when the tokens collected are inconsistent with the collection history Each RAV should have a value greater than the previous one\"}],\"TAPCollectorInvalidRAVSigner()\":[{\"notice\":\"Thrown when the RAV signer is invalid\"}],\"TAPCollectorInvalidSignerProof()\":[{\"notice\":\"Thrown when the signer proof is invalid\"}],\"TAPCollectorInvalidSignerProofDeadline(uint256,uint256)\":[{\"notice\":\"Thrown when the signer proof deadline is invalid\"}],\"TAPCollectorSignerAlreadyAuthorized(address,address)\":[{\"notice\":\"Thrown when the signer is already authorized\"}],\"TAPCollectorSignerNotAuthorizedByPayer(address,address)\":[{\"notice\":\"Thrown when the signer is not authorized by the payer\"}],\"TAPCollectorSignerNotThawing(address)\":[{\"notice\":\"Thrown when the signer is not thawing\"}],\"TAPCollectorSignerStillThawing(uint256,uint256)\":[{\"notice\":\"Thrown when the signer is still thawing\"}]},\"events\":{\"PaymentCollected(uint8,address,address,uint256,address,uint256)\":{\"notice\":\"Emitted when a payment is collected\"},\"RAVCollected(address,address,address,uint64,uint128,bytes,bytes)\":{\"notice\":\"Emitted when a RAV is collected\"},\"SignerAuthorized(address,address)\":{\"notice\":\"Emitted when a signer is authorized to sign RAVs for a payer\"},\"SignerThawing(address,address,uint256)\":{\"notice\":\"Emitted when a signer is thawed to be removed from the authorized signers list\"}},\"kind\":\"user\",\"methods\":{\"authorizeSigner(address,uint256,bytes)\":{\"notice\":\"Authorize a signer to sign on behalf of the payer\"},\"cancelThawSigner(address)\":{\"notice\":\"Stops thawing a signer.\"},\"collect(uint8,bytes)\":{\"notice\":\"Initiate a payment collection through the payments protocol\"},\"revokeAuthorizedSigner(address)\":{\"notice\":\"Revokes a signer from the authorized signers list if thawed.\"},\"thawSigner(address)\":{\"notice\":\"Starts thawing a signer to be removed from the authorized signers list\"}},\"notice\":\"Implements a payments collector contract that can be used to collect payments using a TAP RAV (Receipt Aggregate Voucher).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\":\"ITAPCollector\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":{\"keccak256\":\"0x86f3cfc8eaac309e99018dda796248fb44130b09c2e5bcfc6c63c0e568803bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://176a017cb5c677222ac6a82fecd798292f5f41b4dcb9e16768fbf87816381010\",\"dweb:/ipfs/QmNuLfA5nZptMzWPuvDzJnm7Pwt7uYn1A7G8fwTWPy5Ybm\"]},\"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\":{\"keccak256\":\"0xa5a882c413c68bfe914bad5e419c0340d7d6a6aef453894ea10b7b96458932bc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5dfc1a11d94b22db5a9262b7038c2fb9c69616f47a11507f59efcc5aa1dcf9b\",\"dweb:/ipfs/QmQ8ahkkfm8PXTuZc5Q8zX2RzXHoSi9btYc57KMvtCrLMU\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol": { + "IHorizonStakingBase": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeDeposited", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegatedTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "delegator", + "type": "address" + } + ], + "name": "getDelegation", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Delegation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "getDelegationFeeCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getDelegationPool", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.DelegationPool", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getIdleStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProviderTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "getProvision", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensThawing", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesThawing", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "createdAt", + "type": "uint64" + }, + { + "internalType": "uint32", + "name": "maxVerifierCutPending", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriodPending", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.Provision", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getServiceProvider", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokensStaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensProvisioned", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ServiceProvider", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "getStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "getThawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "next", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "thawingNonce", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingTypes.ThawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawRequestList", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "internalType": "struct LinkedList.List", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getThawedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "getTokensAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "isAllowedLockedVerifier", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDelegationSlashingEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getDelegatedTokensAvailable(address,address)": "fb744cc0", + "getDelegation(address,address,address)": "ccebcabb", + "getDelegationFeeCut(address,address,uint8)": "7573ef4f", + "getDelegationPool(address,address)": "561285e4", + "getIdleStake(address)": "a784d498", + "getMaxThawingPeriod()": "39514ad2", + "getProviderTokensAvailable(address,address)": "08ce5f68", + "getProvision(address,address)": "25d9897e", + "getServiceProvider(address)": "8cc01c86", + "getStake(address)": "7a766460", + "getThawRequest(bytes32)": "b7ca7241", + "getThawRequestList(address,address,address)": "a212daf8", + "getThawedTokens(address,address,address)": "9054e343", + "getTokensAvailable(address,address,uint32)": "872d0489", + "isAllowedLockedVerifier(address)": "ae4fe67a", + "isDelegationSlashingEnabled()": "fc54fb27" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDeposited\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getDelegatedTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"getDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.Delegation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"}],\"name\":\"getDelegationFeeCut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getDelegationPool\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sharesThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.DelegationPool\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getIdleStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getProviderTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getProvision\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sharesThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAt\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCutPending\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriodPending\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.Provision\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getServiceProvider\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokensStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensProvisioned\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ServiceProvider\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"}],\"name\":\"getThawRequest\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"next\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ThawRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getThawRequestList\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"internalType\":\"struct LinkedList.List\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getThawedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"}],\"name\":\"getTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"isAllowedLockedVerifier\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDelegationSlashingEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision functions take `serviceProvider` and `verifier` addresses.\",\"events\":{\"StakeDeposited(address,uint256)\":{\"details\":\"TODO: After transition period move to IHorizonStakingMain. Temporarily it needs to be here since it's emitted by {_stake} which is used by both {HorizonStaking} and {HorizonStakingExtension}.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens staked.\"}}},\"kind\":\"dev\",\"methods\":{\"getDelegatedTokensAvailable(address,address)\":{\"details\":\"Calculated as the tokens available minus the tokens thawing.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"getDelegation(address,address,address)\":{\"params\":{\"delegator\":\"The address of the delegator.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation details.\"}},\"getDelegationFeeCut(address,address,uint8)\":{\"params\":{\"paymentType\":\"The payment type as defined by {IGraphPayments.PaymentTypes}.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation fee cut in PPM.\"}},\"getDelegationPool(address,address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation pool details.\"}},\"getIdleStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens that are idle.\"}},\"getProviderTokensAvailable(address,address)\":{\"details\":\"Calculated as the tokens available minus the tokens thawing.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"getProvision(address,address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The provision details.\"}},\"getServiceProvider(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"getStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens staked.\"}},\"getThawRequest(bytes32)\":{\"params\":{\"thawRequestId\":\"The id of the thaw request.\"},\"returns\":{\"_0\":\"The thaw request details.\"}},\"getThawRequestList(address,address,address)\":{\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The thaw requests list metadata.\"}},\"getThawedTokens(address,address,address)\":{\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of thawed tokens.\"}},\"getTokensAvailable(address,address,uint32)\":{\"params\":{\"delegationRatio\":\"The delegation ratio.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"isAllowedLockedVerifier(address)\":{\"params\":{\"verifier\":\"Address of the verifier\"},\"returns\":{\"_0\":\"True if verifier is allowed locked verifier, false otherwise\"}}},\"title\":\"Interface for the {HorizonStakingBase} contract.\",\"version\":1},\"userdoc\":{\"events\":{\"StakeDeposited(address,uint256)\":{\"notice\":\"Emitted when a service provider stakes tokens.\"}},\"kind\":\"user\",\"methods\":{\"getDelegatedTokensAvailable(address,address)\":{\"notice\":\"Gets the delegator's tokens available in a provision.\"},\"getDelegation(address,address,address)\":{\"notice\":\"Gets the details of a delegation.\"},\"getDelegationFeeCut(address,address,uint8)\":{\"notice\":\"Gets the delegation fee cut for a payment type.\"},\"getDelegationPool(address,address)\":{\"notice\":\"Gets the details of delegation pool.\"},\"getIdleStake(address)\":{\"notice\":\"Gets the service provider's idle stake which is the stake that is not being used for any provision. Note that this only includes service provider's self stake.\"},\"getMaxThawingPeriod()\":{\"notice\":\"Gets the maximum allowed thawing period for a provision.\"},\"getProviderTokensAvailable(address,address)\":{\"notice\":\"Gets the service provider's tokens available in a provision.\"},\"getProvision(address,address)\":{\"notice\":\"Gets the details of a provision.\"},\"getServiceProvider(address)\":{\"notice\":\"Gets the details of a service provider.\"},\"getStake(address)\":{\"notice\":\"Gets the stake of a service provider.\"},\"getThawRequest(bytes32)\":{\"notice\":\"Gets a thaw request.\"},\"getThawRequestList(address,address,address)\":{\"notice\":\"Gets the metadata of a thaw request list. Service provider and delegators each have their own thaw request list per provision. Metadata includes the head and tail of the list, plus the total number of thaw requests.\"},\"getThawedTokens(address,address,address)\":{\"notice\":\"Gets the amount of thawed tokens for a given provision.\"},\"getTokensAvailable(address,address,uint32)\":{\"notice\":\"Gets the tokens available in a provision. Tokens available are the tokens in a provision that are not thawing. Includes service provider's and delegator's stake. Allows specifying a `delegationRatio` which caps the amount of delegated tokens that are considered available.\"},\"isAllowedLockedVerifier(address)\":{\"notice\":\"Return true if the verifier is an allowed locked verifier.\"},\"isDelegationSlashingEnabled()\":{\"notice\":\"Return true if delegation slashing is enabled, false otherwise.\"}},\"notice\":\"Provides getters for {HorizonStaking} and {HorizonStakingExtension} storage variables.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":\"IHorizonStakingBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol": { + "IHorizonStakingExtension": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isPublic", + "type": "bool" + } + ], + "name": "AllocationClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "assetHolder", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolTax", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "curationFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryFees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "queryRebates", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "delegationRewards", + "type": "uint256" + } + ], + "name": "RebateCollected", + "type": "event" + }, + { + "inputs": [], + "name": "__DEPRECATED_getThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + } + ], + "name": "closeAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "collect", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAtEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "collectedFees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "__DEPRECATED_effectiveAllocation", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "distributedRebates", + "type": "uint256" + } + ], + "internalType": "struct IHorizonStakingExtension.Allocation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocationData", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "getAllocationState", + "outputs": [ + { + "internalType": "enum IHorizonStakingExtension.AllocationState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "getIndexerStakedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "getSubgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "hasStake", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allocationId", + "type": "address" + } + ], + "name": "isActiveAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationID", + "type": "address" + } + ], + "name": "isAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "isOperator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "__DEPRECATED_getThawingPeriod()": "c0641994", + "closeAllocation(address,bytes32)": "44c32a61", + "collect(uint256,address)": "8d3c100a", + "getAllocation(address)": "0e022923", + "getAllocationData(address)": "55c85269", + "getAllocationState(address)": "98c657dc", + "getIndexerStakedTokens(address)": "1787e69f", + "getSubgraphAllocatedTokens(bytes32)": "e2e1e8e9", + "hasStake(address)": "e73e14bf", + "isActiveAllocation(address)": "6a3ca383", + "isAllocation(address)": "f1d60d66", + "isOperator(address,address)": "b6363cf2" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"AllocationClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolTax\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"curationFees\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"queryFees\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"queryRebates\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"delegationRewards\",\"type\":\"uint256\"}],\"name\":\"RebateCollected\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__DEPRECATED_getThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"}],\"name\":\"closeAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAtEpoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAtEpoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collectedFees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"__DEPRECATED_effectiveAllocation\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"distributedRebates\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingExtension.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocationState\",\"outputs\":[{\"internalType\":\"enum IHorizonStakingExtension.AllocationState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getIndexerStakedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"hasStake\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationId\",\"type\":\"address\"}],\"name\":\"isActiveAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"isAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"details\":\"Emitted when `indexer` close an allocation in `epoch` for `allocationID`. An amount of `tokens` get unallocated from `subgraphDeploymentID`. This event also emits the POI (proof of indexing) submitted by the indexer. `isPublic` is true if the sender was someone other than the indexer.\"},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`. `epoch` is the protocol epoch the rebate was collected on The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees` is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt. `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected and sent to the delegation pool.\"}},\"kind\":\"dev\",\"methods\":{\"__DEPRECATED_getThawingPeriod()\":{\"returns\":{\"_0\":\"Thawing period in blocks\"}},\"closeAllocation(address,bytes32)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"poi\":\"Proof of indexing submitted for the allocated period\"}},\"collect(uint256,address)\":{\"details\":\"To avoid reverting on the withdrawal from channel flow this function will: 1) Accept calls with zero tokens. 2) Accept calls after an allocation passed the dispute period, in that case, all the received tokens are burned.\",\"params\":{\"allocationID\":\"Allocation where the tokens will be assigned\",\"tokens\":\"Amount of tokens to collect\"}},\"getAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as allocation identifier\"},\"returns\":{\"_0\":\"Allocation data\"}},\"getAllocationData(address)\":{\"details\":\"Get allocation data to calculate rewards issuance\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"accRewardsPending\":\"Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed\",\"accRewardsPerAllocatedToken\":\"Rewards snapshot\",\"indexer\":\"The indexer address\",\"subgraphDeploymentId\":\"Subgraph deployment id for the allocation\",\"tokens\":\"Amount of allocated tokens\"}},\"getAllocationState(address)\":{\"params\":{\"allocationID\":\"Allocation identifier\"},\"returns\":{\"_0\":\"AllocationState enum with the state of the allocation\"}},\"getIndexerStakedTokens(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"Amount of tokens staked by the indexer\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"params\":{\"_subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"hasStake(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if indexer has staked tokens\"}},\"isActiveAllocation(address)\":{\"params\":{\"_allocationId\":\"Allocation Id\"},\"returns\":{\"_0\":\"Whether or not the allocation is active\"}},\"isAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as signer by the indexer for an allocation\"},\"returns\":{\"_0\":\"True if allocationID already used\"}},\"isOperator(address,address)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"operator\":\"Address of the operator\"},\"returns\":{\"_0\":\"True if operator is allowed for indexer, false otherwise\"}}},\"title\":\"Interface for {HorizonStakingExtension} contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"__DEPRECATED_getThawingPeriod()\":{\"notice\":\"Return the time in blocks to unstake\"},\"closeAllocation(address,bytes32)\":{\"notice\":\"Close an allocation and free the staked tokens. To be eligible for rewards a proof of indexing must be presented. Presenting a bad proof is subject to slashable condition. To opt out of rewards set _poi to 0x0\"},\"collect(uint256,address)\":{\"notice\":\"Collect query fees from state channels and assign them to an allocation. Funds received are only accepted from a valid sender.\"},\"getAllocation(address)\":{\"notice\":\"Return the allocation by ID.\"},\"getAllocationState(address)\":{\"notice\":\"Return the current state of an allocation\"},\"getIndexerStakedTokens(address)\":{\"notice\":\"Get the total amount of tokens staked by the indexer.\"},\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"hasStake(address)\":{\"notice\":\"Getter that returns if an indexer has any stake.\"},\"isActiveAllocation(address)\":{\"notice\":\"Whether or not an allocation is active (i.e open)\"},\"isAllocation(address)\":{\"notice\":\"Return if allocationID is used.\"},\"isOperator(address,address)\":{\"notice\":\"Return true if operator is allowed for indexer.\"}},\"notice\":\"Provides functions for managing legacy allocations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":\"IHorizonStakingExtension\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol": { + "IHorizonStakingMain": { + "abi": [ + { + "inputs": [], + "name": "HorizonStakingCallerIsServiceProvider", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientIdleStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientStakeForLegacyAllocations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minRequired", + "type": "uint256" + } + ], + "name": "HorizonStakingInsufficientTokens", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidBeneficiaryZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "HorizonStakingInvalidDelegationFeeCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPool", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidDelegationPoolState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + } + ], + "name": "HorizonStakingInvalidMaxVerifierCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingInvalidProvision", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidServiceProviderZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "HorizonStakingInvalidThawingPeriod", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidVerifierZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroShares", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingInvalidZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "HorizonStakingNotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingNothingThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingProvisionAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minShares", + "type": "uint256" + } + ], + "name": "HorizonStakingSlippageProtection", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "HorizonStakingStillThawing", + "type": "error" + }, + { + "inputs": [], + "name": "HorizonStakingTooManyThawRequests", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + } + ], + "name": "HorizonStakingTooManyTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "HorizonStakingVerifierNotAllowed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "AllowedLockedVerifierSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegatedTokensWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "DelegationFeeCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "DelegationSlashingEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DelegationSlashingSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "MaxThawingPeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "OperatorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "ProvisionParametersStaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ProvisionThawed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "until", + "type": "uint256" + } + ], + "name": "StakeLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "StakeWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + } + ], + "name": "ThawRequestCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "thawRequestId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "thawingUntil", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bool", + "name": "valid", + "type": "bool" + } + ], + "name": "ThawRequestFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thawRequestsFulfilled", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ThawRequestsFulfilled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "ThawingPeriodCleared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensDeprovisioned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensToDelegationPoolAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "TokensUndelegated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "VerifierTokensSent", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "acceptProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToDelegationPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "addToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clearThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSharesOut", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "deprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isAuthorized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "provisionLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldServiceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minSharesForNewProvider", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "redelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "oldVerifier", + "type": "address" + }, + { + "internalType": "address", + "name": "newVerifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "reprovision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setAllowedLockedVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "feeCut", + "type": "uint256" + } + ], + "name": "setDelegationFeeCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setDelegationSlashingEnabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxThawingPeriod", + "type": "uint64" + } + ], + "name": "setMaxThawingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setOperatorLocked", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint32", + "name": "maxVerifierCut", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "thawingPeriod", + "type": "uint64" + } + ], + "name": "setProvisionParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensVerifier", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifierDestination", + "type": "address" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "stakeToProvision", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "thaw", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "undelegate", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "unstake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nThawRequests", + "type": "uint256" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "newServiceProvider", + "type": "address" + } + ], + "name": "withdrawDelegated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "acceptProvisionParameters(address)": "3a78b732", + "addToDelegationPool(address,address,uint256)": "ca94b0e9", + "addToProvision(address,address,uint256)": "fecc9cc1", + "clearThawingPeriod()": "e473522a", + "delegate(address,address,uint256,uint256)": "6230001a", + "delegate(address,uint256)": "026e402b", + "deprovision(address,address,uint256)": "21195373", + "isAuthorized(address,address,address)": "7c145cc7", + "provision(address,address,uint256,uint32,uint64)": "010167e5", + "provisionLocked(address,address,uint256,uint32,uint64)": "82d66cb8", + "redelegate(address,address,address,address,uint256,uint256)": "f64b3598", + "reprovision(address,address,address,uint256)": "ba7fb0b4", + "setAllowedLockedVerifier(address,bool)": "4ca7ac22", + "setDelegationFeeCut(address,address,uint8,uint256)": "42c51693", + "setDelegationSlashingEnabled()": "ef58bd67", + "setMaxThawingPeriod(uint64)": "259bc435", + "setOperator(address,address,bool)": "bc735d90", + "setOperatorLocked(address,address,bool)": "ad4d35b5", + "setProvisionParameters(address,address,uint32,uint64)": "81e21b56", + "slash(address,uint256,uint256,address)": "e76fede6", + "stake(uint256)": "a694fc3a", + "stakeTo(address,uint256)": "a2a31722", + "stakeToProvision(address,address,uint256)": "74612092", + "thaw(address,address,uint256)": "f93f1cd0", + "undelegate(address,address,uint256)": "a02b9426", + "undelegate(address,address,uint256,address)": "162ea5ed", + "undelegate(address,uint256)": "4d99dd16", + "unstake(uint256)": "2e17de78", + "withdraw()": "3ccfd60b", + "withdrawDelegated(address,address)": "51a60b02", + "withdrawDelegated(address,address,uint256)": "3993d849" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"HorizonStakingCallerIsServiceProvider\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientIdleStake\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minShares\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientStakeForLegacyAllocations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minRequired\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidBeneficiaryZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInvalidDelegationFeeCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidDelegationPool\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidDelegationPoolState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"}],\"name\":\"HorizonStakingInvalidMaxVerifierCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidProvision\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidServiceProviderZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"HorizonStakingInvalidThawingPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidVerifierZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"HorizonStakingNotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingNothingThawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingProvisionAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minShares\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingSlippageProtection\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingStillThawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingTooManyThawRequests\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingTooManyTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingVerifierNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"AllowedLockedVerifierSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegatedTokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"DelegationFeeCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegationSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"DelegationSlashingEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegationSlashingSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"MaxThawingPeriodSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"OperatorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionParametersSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionParametersStaged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionThawed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"StakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"}],\"name\":\"ThawRequestCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"ThawRequestFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawRequestsFulfilled\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ThawRequestsFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ThawingPeriodCleared\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensDeprovisioned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensToDelegationPoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensUndelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"VerifierTokensSent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"acceptProvisionParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"addToDelegationPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"addToProvision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minSharesOut\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"deprovision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isAuthorized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"provision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"provisionLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldServiceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newServiceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minSharesForNewProvider\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"redelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"reprovision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setAllowedLockedVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"setDelegationFeeCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setDelegationSlashingEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"setMaxThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperatorLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"setProvisionParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensVerifier\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifierDestination\",\"type\":\"address\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeToProvision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"thaw\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"withdrawDelegated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newServiceProvider\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Note that this interface only includes the functions implemented by {HorizonStaking} contract, and not those implemented by {HorizonStakingExtension}. Do not use this interface to interface with the {HorizonStaking} contract, use {IHorizonStaking} for the complete interface.Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision functions take `serviceProvider` and `verifier` addresses.\",\"errors\":{\"HorizonStakingInsufficientIdleStake(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInsufficientShares(uint256,uint256)\":[{\"params\":{\"minShares\":\"The minimum required share amount\",\"shares\":\"The actual share amount\"}}],\"HorizonStakingInsufficientStakeForLegacyAllocations(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInsufficientTokens(uint256,uint256)\":[{\"params\":{\"minRequired\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInvalidDelegationFeeCut(uint256)\":[{\"params\":{\"feeCut\":\"The fee cut\"}}],\"HorizonStakingInvalidDelegationPool(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidDelegationPoolState(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidMaxVerifierCut(uint32)\":[{\"params\":{\"maxVerifierCut\":\"The maximum verifier cut\"}}],\"HorizonStakingInvalidProvision(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"params\":{\"maxThawingPeriod\":\"The maximum `thawingPeriod` allowed\",\"thawingPeriod\":\"The thawing period\"}}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"params\":{\"caller\":\"The caller address\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingSlippageProtection(uint256,uint256)\":[{\"params\":{\"minShares\":\"The minimum required share amount\",\"shares\":\"The actual share amount\"}}],\"HorizonStakingStillThawing(uint256)\":[{\"details\":\"Note this thawing refers to the global thawing period applied to legacy allocated tokens, it does not refer to thaw requests.\",\"params\":{\"until\":\"The block number until the stake is locked\"}}],\"HorizonStakingTooManyTokens(uint256,uint256)\":[{\"params\":{\"maxTokens\":\"The maximum allowed token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingVerifierNotAllowed(address)\":[{\"details\":\"Only applies to stake from locked wallets.\"}]},\"events\":{\"AllowedLockedVerifierSet(address,bool)\":{\"params\":{\"allowed\":\"Whether the verifier is allowed or disallowed\",\"verifier\":\"The address of the verifier\"}},\"DelegatedTokensWithdrawn(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\",\"verifier\":\"The address of the verifier\"}},\"DelegationFeeCutSet(address,address,uint8,uint256)\":{\"params\":{\"feeCut\":\"The fee cut set, in PPM\",\"paymentType\":\"The payment type for which the fee cut is set, as defined in {IGraphPayments}\",\"serviceProvider\":\"The address of the service provider\",\"verifier\":\"The address of the verifier\"}},\"DelegationSlashed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens slashed (note this only represents delegation pool's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"DelegationSlashingEnabled(bool)\":{\"params\":{\"enabled\":\"Whether delegation slashing is enabled or disabled.\"}},\"DelegationSlashingSkipped(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens that would have been slashed (note this only represents delegation pool's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"MaxThawingPeriodSet(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period\"}},\"OperatorSet(address,address,address,bool)\":{\"details\":\"Emitted when an operator is allowed or denied by a service provider for a particular verifier\",\"params\":{\"allowed\":\"Whether the operator is allowed or denied\",\"operator\":\"The address of the operator\",\"serviceProvider\":\"The address of the service provider\",\"verifier\":\"The address of the verifier\"}},\"ProvisionCreated(address,address,uint256,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens provisioned\",\"verifier\":\"The address of the verifier\"}},\"ProvisionIncreased(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens added to the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionParametersSet(address,address,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The new maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The new period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionParametersStaged(address,address,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The proposed period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionSlashed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens slashed (note this only represents service provider's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"ProvisionThawed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens thawed\",\"verifier\":\"The address of the verifier\"}},\"StakeLocked(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens unstaked\",\"until\":\"The block number until the stake is locked\"}},\"StakeWithdrawn(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\"}},\"ThawRequestCreated(address,address,address,uint256,uint64,bytes32)\":{\"details\":\"Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\",\"params\":{\"owner\":\"The address of the owner of the thaw request.\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares being thawed\",\"thawRequestId\":\"The ID of the thaw request\",\"thawingUntil\":\"The timestamp until the stake is thawed\",\"verifier\":\"The address of the verifier\"}},\"ThawRequestFulfilled(bytes32,uint256,uint256,uint64,bool)\":{\"params\":{\"shares\":\"The amount of shares being released\",\"thawRequestId\":\"The ID of the thaw request\",\"thawingUntil\":\"The timestamp until the stake has thawed\",\"tokens\":\"The amount of tokens being released\",\"valid\":\"Whether the thaw request was valid at the time of fulfillment\"}},\"ThawRequestsFulfilled(address,address,address,uint256,uint256)\":{\"params\":{\"owner\":\"The address of the owner of the thaw requests\",\"serviceProvider\":\"The address of the service provider\",\"thawRequestsFulfilled\":\"The number of thaw requests fulfilled\",\"tokens\":\"The total amount of tokens being released\",\"verifier\":\"The address of the verifier\"}},\"ThawingPeriodCleared()\":{\"details\":\"This marks the end of the transition period.\"},\"TokensDelegated(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens delegated\",\"verifier\":\"The address of the verifier\"}},\"TokensDeprovisioned(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens removed\",\"verifier\":\"The address of the verifier\"}},\"TokensToDelegationPoolAdded(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\",\"verifier\":\"The address of the verifier\"}},\"TokensUndelegated(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens undelegated\",\"verifier\":\"The address of the verifier\"}},\"VerifierTokensSent(address,address,address,uint256)\":{\"params\":{\"destination\":\"The address where the verifier cut is sent\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens sent to the verifier\",\"verifier\":\"The address of the verifier\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionParameters(address)\":{\"details\":\"Only the provision's verifier can call this function. Emits a {ProvisionParametersSet} event.\",\"params\":{\"serviceProvider\":\"The service provider address\"}},\"addToDelegationPool(address,address,uint256)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {TokensToDelegationPoolAdded} event.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to add to the delegation pool\",\"verifier\":\"The verifier address for which the tokens are provisioned\"}},\"addToProvision(address,address,uint256)\":{\"details\":\"Requirements: - The `serviceProvider` must have previously provisioned stake to `verifier`. - `tokens` cannot be zero. - The `serviceProvider` must have enough idle stake to cover the tokens to add. Emits a {ProvisionIncreased} event.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to add to the provision\",\"verifier\":\"The verifier address\"}},\"clearThawingPeriod()\":{\"details\":\"This function can only be called by the contract governor.Emits a {ThawingPeriodCleared} event.\"},\"delegate(address,address,uint256,uint256)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. - The provision must exist. Emits a {TokensDelegated} event.\",\"params\":{\"minSharesOut\":\"The minimum amount of shares to accept, slippage protection.\",\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to delegate\",\"verifier\":\"The verifier address\"}},\"delegate(address,uint256)\":{\"details\":\"See {delegate}.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to delegate\"}},\"deprovision(address,address,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error. Requirements: - Must have previously initiated a thaw request using {thaw}. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {TokensDeprovisioned} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}},\"isAuthorized(address,address,address)\":{\"params\":{\"operator\":\"The address to check for auth\",\"serviceProvider\":\"The service provider on behalf of whom they're claiming to act\",\"verifier\":\"The verifier / data service on which they're claiming to act\"},\"returns\":{\"_0\":\"Whether the operator is authorized or not\"}},\"provision(address,address,uint256,uint32,uint64)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - The `serviceProvider` must have enough idle stake to cover the tokens to provision. - `maxVerifierCut` must be a valid PPM. - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. Emits a {ProvisionCreated} event.\",\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens that will be locked and slashable\",\"verifier\":\"The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\"}},\"provisionLocked(address,address,uint256,uint32,uint64)\":{\"details\":\"See {provision}. Additional requirements: - The `verifier` must be allowed to be used for locked provisions.\",\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens that will be locked and slashable\",\"verifier\":\"The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\"}},\"redelegate(address,address,address,address,uint256,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error. Requirements: - Must have previously initiated a thaw request using {undelegate}. - `newServiceProvider` and `newVerifier` must not be the zero address. - `newServiceProvider` must have previously provisioned stake to `newVerifier`. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\",\"params\":{\"minSharesForNewProvider\":\"The minimum amount of shares to accept for the new service provider\",\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"newServiceProvider\":\"The address of a new service provider\",\"newVerifier\":\"The address of a new verifier\",\"oldServiceProvider\":\"The old service provider address\",\"oldVerifier\":\"The old verifier address\"}},\"reprovision(address,address,address,uint256)\":{\"details\":\"Requirements: - Must have previously initiated a thaw request using {thaw}. - `tokens` cannot be zero. - The `serviceProvider` must have previously provisioned stake to `newVerifier`. - The `serviceProvider` must have enough idle stake to cover the tokens to add. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled}, {TokensDeprovisioned} and {ProvisionIncreased} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"newVerifier\":\"The verifier address for which the tokens will be provisioned\",\"oldVerifier\":\"The verifier address for which the tokens are currently provisioned\",\"serviceProvider\":\"The service provider address\"}},\"setAllowedLockedVerifier(address,bool)\":{\"details\":\"This function can only be called by the contract governor, it's used to maintain a whitelist of verifiers that do not allow the stake from a locked wallet to escape the lock.Emits a {AllowedLockedVerifierSet} event.\",\"params\":{\"allowed\":\"Whether the verifier is allowed or not\",\"verifier\":\"The verifier address\"}},\"setDelegationFeeCut(address,address,uint8,uint256)\":{\"details\":\"Emits a {DelegationFeeCutSet} event.\",\"params\":{\"feeCut\":\"The fee cut to set, in PPM\",\"paymentType\":\"The payment type for which the fee cut is set, as defined in {IGraphPayments}\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}},\"setDelegationSlashingEnabled()\":{\"details\":\"This function can only be called by the contract governor.\"},\"setMaxThawingPeriod(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period, in seconds\"}},\"setOperator(address,address,bool)\":{\"details\":\"Emits a {OperatorSet} event.\",\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\",\"verifier\":\"The verifier / data service on which they'll be allowed to operate\"}},\"setOperatorLocked(address,address,bool)\":{\"details\":\"See {setOperator}. Additional requirements: - The `verifier` must be allowed to be used for locked provisions.\",\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\",\"verifier\":\"The verifier / data service on which they'll be allowed to operate\"}},\"setProvisionParameters(address,address,uint32,uint64)\":{\"details\":\"This two step update process prevents the service provider from changing the parameters without the verifier's consent. Emits a {ProvisionParametersStaged} event if at least one of the parameters changed.\",\"params\":{\"maxVerifierCut\":\"The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The proposed period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The verifier address\"}},\"slash(address,uint256,uint256,address)\":{\"details\":\"Requirements: - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider. - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut. Emits a {ProvisionSlashed} and {VerifierTokensSent} events. Emits a {DelegationSlashed} or {DelegationSlashingSkipped} event depending on the global delegation slashing flag.\",\"params\":{\"serviceProvider\":\"The service provider to slash\",\"tokens\":\"The amount of tokens to slash\",\"tokensVerifier\":\"The amount of tokens to transfer instead of burning\",\"verifierDestination\":\"The address to transfer the verifier cut to\"}},\"stake(uint256)\":{\"details\":\"Pulls tokens from the caller. Requirements: - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {StakeDeposited} event.\",\"params\":{\"tokens\":\"Amount of tokens to stake\"}},\"stakeTo(address,uint256)\":{\"details\":\"Pulls tokens from the caller. Requirements: - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {StakeDeposited} event.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\"}},\"stakeToProvision(address,address,uint256)\":{\"details\":\"Requirements: - The `serviceProvider` must have previously provisioned stake to `verifier`. - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits {StakeDeposited} and {ProvisionIncreased} events.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\",\"verifier\":\"Address of the verifier\"}},\"thaw(address,address,uint256)\":{\"details\":\"Requirements: - The provision must have enough tokens available to thaw. - `tokens` cannot be zero. Emits {ProvisionThawed} and {ThawRequestCreated} events.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to thaw\",\"verifier\":\"The verifier address for which the tokens are provisioned\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\",\"verifier\":\"The verifier address\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,address,uint256,address)\":{\"params\":{\"beneficiary\":\"The address where the tokens will be withdrawn after thawing\",\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\",\"verifier\":\"The verifier address\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,uint256)\":{\"details\":\"See {undelegate}.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\"}},\"unstake(uint256)\":{\"details\":\"Requirements: - `_tokens` cannot be zero. - `_serviceProvider` must have enough idle stake to cover the staking amount and any legacy allocation. Emits a {StakeLocked} event during the transition period. Emits a {StakeWithdrawn} event after the transition period.\",\"params\":{\"tokens\":\"Amount of tokens to unstake\"}},\"withdraw()\":{\"details\":\"This is only needed during the transition period while we still have a global lock. After that, unstake() will automatically withdraw.\"},\"withdrawDelegated(address,address)\":{\"details\":\"See {delegate}.\",\"params\":{\"newServiceProvider\":\"The address of a new service provider, if the delegator wants to re-delegate\",\"serviceProvider\":\"The service provider address\"}},\"withdrawDelegated(address,address,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error.If the delegation pool was completely slashed before withdrawing, calling this function will fulfill the thaw requests with an amount equal to zero. Requirements: - Must have previously initiated a thaw request using {undelegate}. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}},\"title\":\"Inferface for the {HorizonStaking} contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"HorizonStakingCallerIsServiceProvider()\":[{\"notice\":\"Thrown when a service provider attempts to change their own operator access.\"}],\"HorizonStakingInsufficientIdleStake(uint256,uint256)\":[{\"notice\":\"Thrown when the service provider has insufficient idle stake to operate.\"}],\"HorizonStakingInsufficientShares(uint256,uint256)\":[{\"notice\":\"Thrown when a minimum share amount is required to operate but it's not met.\"}],\"HorizonStakingInsufficientStakeForLegacyAllocations(uint256,uint256)\":[{\"notice\":\"Thrown during the transition period when the service provider has insufficient stake to cover their existing legacy allocations.\"}],\"HorizonStakingInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when a minimum token amount is required to operate but it's not met.\"}],\"HorizonStakingInvalidBeneficiaryZeroAddress()\":[{\"notice\":\"Thrown when attempting to undelegate with a beneficiary that is the zero address.\"}],\"HorizonStakingInvalidDelegationFeeCut(uint256)\":[{\"notice\":\"Thrown when trying to set a delegation fee cut that is not valid.\"}],\"HorizonStakingInvalidDelegationPool(address,address)\":[{\"notice\":\"Thrown when attempting to operate with a delegation pool that does not exist.\"}],\"HorizonStakingInvalidDelegationPoolState(address,address)\":[{\"notice\":\"Thrown when as a result of slashing delegation pool has no tokens but has shares.\"}],\"HorizonStakingInvalidMaxVerifierCut(uint32)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid maximum verifier cut.\"}],\"HorizonStakingInvalidProvision(address,address)\":[{\"notice\":\"Thrown when attempting to operate with a provision that does not exist.\"}],\"HorizonStakingInvalidServiceProviderZeroAddress()\":[{\"notice\":\"Thrown when attempting to redelegate with a serivce provider that is the zero address.\"}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid thawing period.\"}],\"HorizonStakingInvalidVerifierZeroAddress()\":[{\"notice\":\"Thrown when attempting to redelegate with a verifier that is the zero address.\"}],\"HorizonStakingInvalidZeroShares()\":[{\"notice\":\"Thrown when operating a zero share amount is not allowed.\"}],\"HorizonStakingInvalidZeroTokens()\":[{\"notice\":\"Thrown when operating a zero token amount is not allowed.\"}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to operate on a provision.\"}],\"HorizonStakingProvisionAlreadyExists()\":[{\"notice\":\"Thrown when attempting to create a provision for a data service that already has a provision.\"}],\"HorizonStakingSlippageProtection(uint256,uint256)\":[{\"notice\":\"Thrown when delegation shares obtained are below the expected amount.\"}],\"HorizonStakingStillThawing(uint256)\":[{\"notice\":\"Thrown during the transition period when attempting to withdraw tokens that are still thawing.\"}],\"HorizonStakingTooManyTokens(uint256,uint256)\":[{\"notice\":\"Thrown when the amount of tokens exceeds the maximum allowed to operate.\"}],\"HorizonStakingVerifierNotAllowed(address)\":[{\"notice\":\"Thrown when a service provider attempts to operate on verifiers that are not allowed.\"}]},\"events\":{\"AllowedLockedVerifierSet(address,bool)\":{\"notice\":\"Emitted when a verifier is allowed or disallowed to be used for locked provisions.\"},\"DelegatedTokensWithdrawn(address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator withdraws tokens from a provision after thawing.\"},\"DelegationFeeCutSet(address,address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider sets delegation fee cuts for a verifier.\"},\"DelegationSlashed(address,address,uint256)\":{\"notice\":\"Emitted when a delegation pool is slashed by a verifier.\"},\"DelegationSlashingEnabled(bool)\":{\"notice\":\"Emitted when the delegation slashing global flag is set.\"},\"DelegationSlashingSkipped(address,address,uint256)\":{\"notice\":\"Emitted when a delegation pool would have been slashed by a verifier, but the slashing was skipped because delegation slashing global parameter is not enabled.\"},\"MaxThawingPeriodSet(uint64)\":{\"notice\":\"Emitted when the global maximum thawing period allowed for provisions is set.\"},\"ProvisionCreated(address,address,uint256,uint32,uint64)\":{\"notice\":\"Emitted when a service provider provisions staked tokens to a verifier.\"},\"ProvisionIncreased(address,address,uint256)\":{\"notice\":\"Emitted whenever staked tokens are added to an existing provision\"},\"ProvisionParametersSet(address,address,uint32,uint64)\":{\"notice\":\"Emitted when a service provider accepts a staged provision parameter update.\"},\"ProvisionParametersStaged(address,address,uint32,uint64)\":{\"notice\":\"Emitted when a service provider stages a provision parameter update.\"},\"ProvisionSlashed(address,address,uint256)\":{\"notice\":\"Emitted when a provision is slashed by a verifier.\"},\"ProvisionThawed(address,address,uint256)\":{\"notice\":\"Emitted when a service provider thaws tokens from a provision.\"},\"StakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when a service provider unstakes tokens during the transition period.\"},\"StakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when a service provider withdraws tokens during the transition period.\"},\"ThawRequestCreated(address,address,address,uint256,uint64,bytes32)\":{\"notice\":\"Emitted when a thaw request is created.\"},\"ThawRequestFulfilled(bytes32,uint256,uint256,uint64,bool)\":{\"notice\":\"Emitted when a thaw request is fulfilled, meaning the stake is released.\"},\"ThawRequestsFulfilled(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a series of thaw requests are fulfilled.\"},\"ThawingPeriodCleared()\":{\"notice\":\"Emitted when the legacy global thawing period is set to zero.\"},\"TokensDelegated(address,address,address,uint256)\":{\"notice\":\"Emitted when tokens are delegated to a provision.\"},\"TokensDeprovisioned(address,address,uint256)\":{\"notice\":\"Emitted when a service provider removes tokens from a provision.\"},\"TokensToDelegationPoolAdded(address,address,uint256)\":{\"notice\":\"Emitted when tokens are added to a delegation pool's reserve.\"},\"TokensUndelegated(address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator undelegates tokens from a provision and starts thawing them.\"},\"VerifierTokensSent(address,address,address,uint256)\":{\"notice\":\"Emitted when the verifier cut is sent to the verifier after slashing a provision.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionParameters(address)\":{\"notice\":\"Accepts a staged provision parameter update.\"},\"addToDelegationPool(address,address,uint256)\":{\"notice\":\"Add tokens to a delegation pool without issuing shares. Used by data services to pay delegation fees/rewards. Delegators SHOULD NOT call this function.\"},\"addToProvision(address,address,uint256)\":{\"notice\":\"Adds tokens from the service provider's idle stake to a provision\"},\"clearThawingPeriod()\":{\"notice\":\"Clear the legacy global thawing period. This signifies the end of the transition period, after which no legacy allocations should be left.\"},\"delegate(address,address,uint256,uint256)\":{\"notice\":\"Delegate tokens to a provision.\"},\"delegate(address,uint256)\":{\"notice\":\"Delegate tokens to the subgraph data service provision. This function is for backwards compatibility with the legacy staking contract. It only allows delegating to the subgraph data service and DOES NOT have slippage protection.\"},\"deprovision(address,address,uint256)\":{\"notice\":\"Remove tokens from a provision and move them back to the service provider's idle stake.\"},\"isAuthorized(address,address,address)\":{\"notice\":\"Check if an operator is authorized for the caller on a specific verifier / data service.\"},\"provision(address,address,uint256,uint32,uint64)\":{\"notice\":\"Provision stake to a verifier. The tokens will be locked with a thawing period and will be slashable by the verifier. This is the main mechanism to provision stake to a data service, where the data service is the verifier. This function can be called by the service provider or by an operator authorized by the provider for this specific verifier.\"},\"provisionLocked(address,address,uint256,uint32,uint64)\":{\"notice\":\"Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets).\"},\"redelegate(address,address,address,address,uint256,uint256)\":{\"notice\":\"Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`.\"},\"reprovision(address,address,address,uint256)\":{\"notice\":\"Move already thawed stake from one provision into another provision This function can be called by the service provider or by an operator authorized by the provider for the two corresponding verifiers.\"},\"setAllowedLockedVerifier(address,bool)\":{\"notice\":\"Sets a verifier as a globally allowed verifier for locked provisions.\"},\"setDelegationFeeCut(address,address,uint8,uint256)\":{\"notice\":\"Set the fee cut for a verifier on a specific payment type.\"},\"setDelegationSlashingEnabled()\":{\"notice\":\"Set the global delegation slashing flag to true.\"},\"setMaxThawingPeriod(uint64)\":{\"notice\":\"Sets the global maximum thawing period allowed for provisions.\"},\"setOperator(address,address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller on a data service.\"},\"setOperatorLocked(address,address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller on a verifier.\"},\"setProvisionParameters(address,address,uint32,uint64)\":{\"notice\":\"Stages a provision parameter update. Note that the change is not effective until the verifier calls {acceptProvisionParameters}.\"},\"slash(address,uint256,uint256,address)\":{\"notice\":\"Slash a service provider. This can only be called by a verifier to which the provider has provisioned stake, and up to the amount of tokens they have provisioned. If the service provider's stake is not enough, the associated delegation pool might be slashed depending on the value of the global delegation slashing flag. Part of the slashed tokens are sent to the `verifierDestination` as a reward.\"},\"stake(uint256)\":{\"notice\":\"Deposit tokens on the staking contract.\"},\"stakeTo(address,uint256)\":{\"notice\":\"Deposit tokens on the service provider stake, on behalf of the service provider.\"},\"stakeToProvision(address,address,uint256)\":{\"notice\":\"Deposit tokens on the service provider stake, on behalf of the service provider, provisioned to a specific verifier.\"},\"thaw(address,address,uint256)\":{\"notice\":\"Start thawing tokens to remove them from a provision. This function can be called by the service provider or by an operator authorized by the provider for this specific verifier. Note that removing tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {deprovision} or {reprovision}.\"},\"undelegate(address,address,uint256)\":{\"notice\":\"Undelegate tokens from a provision and start thawing them. Note that undelegating tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. Requirements: - `shares` cannot be zero. Emits a {TokensUndelegated} and {ThawRequestCreated} event.\"},\"undelegate(address,address,uint256,address)\":{\"notice\":\"Undelegate tokens from a provision and start thawing them. The tokens will be withdrawable by the `beneficiary` after the thawing period. Note that undelegating tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. Requirements: - `shares` cannot be zero. - `beneficiary` cannot be the zero address. Emits a {TokensUndelegated} and {ThawRequestCreated} event.\"},\"undelegate(address,uint256)\":{\"notice\":\"Undelegate tokens from the subgraph data service provision and start thawing them. This function is for backwards compatibility with the legacy staking contract. It only allows undelegating from the subgraph data service.\"},\"unstake(uint256)\":{\"notice\":\"Move idle stake back to the owner's account. Stake is removed from the protocol: - During the transition period it's locked for a period of time before it can be withdrawn by calling {withdraw}. - After the transition period it's immediately withdrawn.\"},\"withdraw()\":{\"notice\":\"Withdraw service provider tokens once the thawing period (initiated by {unstake}) has passed. All thawed tokens are withdrawn.\"},\"withdrawDelegated(address,address)\":{\"notice\":\"Withdraw undelegated tokens from the subgraph data service provision after thawing. This function is for backwards compatibility with the legacy staking contract. It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in case the caller opts for re-delegating.\"},\"withdrawDelegated(address,address,uint256)\":{\"notice\":\"Withdraw undelegated tokens from a provision after thawing.\"}},\"notice\":\"Provides functions for managing stake, provisions, delegations, and slashing.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":\"IHorizonStakingMain\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol": { + "IHorizonStakingTypes": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"In order to preserve storage compatibility some data structures keep deprecated fields. These structures have then two representations, an internal one used by the contract storage and a public one. Getter functions should retrieve internal representations, remove deprecated fields and return the public representation.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Defines the data types used in the Horizon staking contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":\"IHorizonStakingTypes\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/libraries/LinkedList.sol": { + "LinkedList": { + "abi": [ + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122046bf94561b4edd4bcb4d05c7fa400e3bea62c5f830d5ae4896d3c844466cc09d64736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CHAINID 0xBF SWAP5 JUMP SHL 0x4E 0xDD 0x4B 0xCB 0x4D SDIV 0xC7 STATICCALL BLOCKHASH 0xE EXTCODESIZE 0xEA PUSH3 0xC5F830 0xD5 0xAE BASEFEE SWAP7 0xD3 0xC8 PREVRANDAO CHAINID PUSH13 0xC09D64736F6C634300081B0033 ", + "sourceMap": "646:4780:29:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;646:4780:29;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122046bf94561b4edd4bcb4d05c7fa400e3bea62c5f830d5ae4896d3c844466cc09d64736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CHAINID 0xBF SWAP5 JUMP SHL 0x4E 0xDD 0x4B 0xCB 0x4D SDIV 0xC7 STATICCALL BLOCKHASH 0xE EXTCODESIZE 0xEA PUSH3 0xC5F830 0xD5 0xAE BASEFEE SWAP7 0xD3 0xC8 PREVRANDAO CHAINID PUSH13 0xC09D64736F6C634300081B0033 ", + "sourceMap": "646:4780:29:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LinkedListEmptyList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidIterations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidZeroId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListMaxElementsExceeded\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"LinkedList library\",\"version\":1},\"userdoc\":{\"errors\":{\"LinkedListEmptyList()\":[{\"notice\":\"Thrown when trying to remove an item from an empty list\"}],\"LinkedListInvalidIterations()\":[{\"notice\":\"Thrown when trying to traverse a list with more iterations than elements\"}],\"LinkedListInvalidZeroId()\":[{\"notice\":\"Thrown when trying to add an item with id equal to bytes32(0)\"}],\"LinkedListMaxElementsExceeded()\":[{\"notice\":\"Thrown when trying to add an item to a list that has reached the maximum number of elements\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to manage singly linked lists. The library makes no assumptions about the contents of the items, the only requirements on the items are: - they must be represented by a unique bytes32 id - the id of the item must not be bytes32(0) - each item must have a reference to the next item in the list - the list cannot have more than `MAX_ITEMS` items A contract using this library must store: - a LinkedList.List to keep track of the list metadata - a mapping from bytes32 to the item data\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":\"LinkedList\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/libraries/MathUtils.sol": { + "MathUtils": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206851dc21501ea948eeda92c5be24d7ab740711ef1bc0163d266c2040a522d1b964736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x51DC21501EA948EEDA SWAP3 0xC5 0xBE 0x24 0xD7 0xAB PUSH21 0x711EF1BC0163D266C2040A522D1B964736F6C6343 STOP ADDMOD SHL STOP CALLER ", + "sourceMap": "171:1214:30:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;171:1214:30;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206851dc21501ea948eeda92c5be24d7ab740711ef1bc0163d266c2040a522d1b964736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x51DC21501EA948EEDA SWAP3 0xC5 0xBE 0x24 0xD7 0xAB PUSH21 0x711EF1BC0163D266C2040A522D1B964736F6C6343 STOP ADDMOD SHL STOP CALLER ", + "sourceMap": "171:1214:30:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"MathUtils Library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A collection of functions to perform math operations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/libraries/MathUtils.sol\":\"MathUtils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/libraries/MathUtils.sol\":{\"keccak256\":\"0xfb077625fde8c7bb17ba4674956099673bd144546d90d2a91a8463d17b625b0e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6ed606a9a5652778589ae03495af5c344fed262157dd372d8c0e1757c80713b0\",\"dweb:/ipfs/QmTePK9JT74GsWj4rxL2H7hUyuM3LeMrnojLvehU8yiD5r\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/libraries/PPMMath.sol": { + "PPMMath": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "PPMMathInvalidPPM", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220260488b607a9b82e78a0a2b98d50d4664075e936d8003c5815c84e1ae5aa902164736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 DIV DUP9 0xB6 SMOD 0xA9 0xB8 0x2E PUSH25 0xA0A2B98D50D4664075E936D8003C5815C84E1AE5AA90216473 PUSH16 0x6C634300081B00330000000000000000 ", + "sourceMap": "189:1659:31:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;189:1659:31;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220260488b607a9b82e78a0a2b98d50d4664075e936d8003c5815c84e1ae5aa902164736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 DIV DUP9 0xB6 SMOD 0xA9 0xB8 0x2E PUSH25 0xA0A2B98D50D4664075E936D8003C5815C84E1AE5AA90216473 PUSH16 0x6C634300081B00330000000000000000 ", + "sourceMap": "189:1659:31:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"PPMMathInvalidMulPPM\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"PPMMathInvalidPPM\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"params\":{\"a\":\"The first value in the multiplication.\",\"b\":\"The second value in the multiplication.\"}}],\"PPMMathInvalidPPM(uint256)\":[{\"params\":{\"value\":\"The value that is not in PPM.\"}}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"PPMMath library\",\"version\":1},\"userdoc\":{\"errors\":{\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"notice\":\"Thrown when no value in a multiplication is in PPM.\"}],\"PPMMathInvalidPPM(uint256)\":[{\"notice\":\"Thrown when a value is expected to be in PPM but is not.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library for handling calculations with parts per million (PPM) amounts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":\"PPMMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/libraries/UintRange.sol": { + "UintRange": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a3b0e5a455e6e95b509ac321ae127ac8b24c00757baae31a6e3b07d611430d2964736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 0xB0 0xE5 LOG4 SSTORE 0xE6 0xE9 JUMPDEST POP SWAP11 0xC3 0x21 0xAE SLT PUSH27 0xC8B24C00757BAAE31A6E3B07D611430D2964736F6C634300081B00 CALLER ", + "sourceMap": "172:422:32:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;172:422:32;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a3b0e5a455e6e95b509ac321ae127ac8b24c00757baae31a6e3b07d611430d2964736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 0xB0 0xE5 LOG4 SSTORE 0xE6 0xE9 JUMPDEST POP SWAP11 0xC3 0x21 0xAE SLT PUSH27 0xC8B24C00757BAAE31A6E3B07D611430D2964736F6C634300081B00 CALLER ", + "sourceMap": "172:422:32:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"UintRange library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library for handling range checks on uint256 values.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":\"UintRange\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol": { + "GraphDirectory": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"}],\"devdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}]},\"events\":{\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Requirements: - `controller` cannot be zero address Emits a {GraphDirectoryInitialized} event\",\"params\":{\"controller\":\"The address of the Graph Controller contract.\"}}},\"title\":\"GraphDirectory contract\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}]},\"events\":{\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor for the GraphDirectory contract\"}},\"notice\":\"This contract is meant to be inherited by other contracts that need to keep track of the addresses in Graph Horizon contracts. It fetches the addresses from the Controller supplied during construction, and uses immutable variables to minimize gas costs.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":\"GraphDirectory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "OwnableUpgradeable": { + "abi": [ + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":\"OwnableUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": { + "Initializable": { + "abi": [ + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() { _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ```solidity contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\\\"MyToken\\\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "ContextUpgradeable": { + "abi": [ + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":\"ContextUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol": { + "MulticallUpgradeable": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "multicall(bytes[])": "ac9650d8" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Provides a function to batch together multiple calls in a single external call. Consider any assumption about calldata validation performed by the sender may be violated if it's not especially careful about sending transactions invoking {multicall}. For example, a relay address that filters function selectors won't filter calls nested within a {multicall} operation. NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {_msgSender}). If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data` to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of {_msgSender} are not propagated to subcalls.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"multicall(bytes[])\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Receives and executes a batch of function calls on this contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol\":\"MulticallUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol\":{\"keccak256\":\"0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300\",\"dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": { + "PausableUpgradeable": { + "abi": [ + { + "inputs": [], + "name": "EnforcedPause", + "type": "error" + }, + { + "inputs": [], + "name": "ExpectedPause", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "paused()": "5c975abb" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":\"PausableUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol": { + "EIP712Upgradeable": { + "abi": [ + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "eip712Domain()": "84b0196e" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to produce the hash of their typed data using a combination of `abi.encode` and `keccak256`. This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\":\"EIP712Upgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts/interfaces/IERC5267.sol": { + "IERC5267": { + "abi": [ + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "eip712Domain()": "84b0196e" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"}},\"kind\":\"dev\",\"methods\":{\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":\"IERC5267\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "IERC20": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts/utils/Address.sol": { + "Address": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "AddressInsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fe3e609d11a8fa71bf67e2e54692a25b51e329a03cd611c68726ec87e804639b64736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID RETURNDATACOPY PUSH1 0x9D GT 0xA8 STATICCALL PUSH18 0xBF67E2E54692A25B51E329A03CD611C68726 0xEC DUP8 0xE8 DIV PUSH4 0x9B64736F PUSH13 0x634300081B0033000000000000 ", + "sourceMap": "195:6066:42:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;195:6066:42;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fe3e609d11a8fa71bf67e2e54692a25b51e329a03cd611c68726ec87e804639b64736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID RETURNDATACOPY PUSH1 0x9D GT 0xA8 STATICCALL PUSH18 0xBF67E2E54692A25B51E329A03CD611C68726 0xEC DUP8 0xE8 DIV PUSH4 0x9B64736F PUSH13 0x634300081B0033000000000000 ", + "sourceMap": "195:6066:42:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts/utils/Strings.sol": { + "Strings": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "StringsInsufficientHexLength", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c2e72d0c4d10d8f74a441104075ed67673ad32e8e2a4dda4052c8aceaba1f7764736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 0x2E PUSH19 0xD0C4D10D8F74A441104075ED67673AD32E8E2A 0x4D 0xDA BLOCKHASH MSTORE 0xC8 0xAC 0xEA 0xBA 0x1F PUSH24 0x64736F6C634300081B003300000000000000000000000000 ", + "sourceMap": "251:2847:43:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;251:2847:43;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c2e72d0c4d10d8f74a441104075ed67673ad32e8e2a4dda4052c8aceaba1f7764736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 0x2E PUSH19 0xD0C4D10D8F74A441104075ED67673AD32E8E2A 0x4D 0xDA BLOCKHASH MSTORE 0xC8 0xAC 0xEA 0xBA 0x1F PUSH24 0x64736F6C634300081B003300000000000000000000000000 ", + "sourceMap": "251:2847:43:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"String operations.\",\"errors\":{\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { + "ECDSA": { + "abi": [ + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208c4e42b0cde479b6c802c7da1632c355d9591fad4b53006c3ab6a2e63e5e422764736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0x4E TIMESTAMP 0xB0 0xCD 0xE4 PUSH26 0xB6C802C7DA1632C355D9591FAD4B53006C3AB6A2E63E5E422764 PUSH20 0x6F6C634300081B00330000000000000000000000 ", + "sourceMap": "344:7386:44:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;344:7386:44;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208c4e42b0cde479b6c802c7da1632c355d9591fad4b53006c3ab6a2e63e5e422764736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0x4E TIMESTAMP 0xB0 0xCD 0xE4 PUSH26 0xB6C802C7DA1632C355D9591FAD4B53006C3AB6A2E63E5E422764 PUSH20 0x6F6C634300081B00330000000000000000000000 ", + "sourceMap": "344:7386:44:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { + "MessageHashUtils": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ddd23abf32dcf872cabe5e1ace71e769357d61e045ae071e589e695df433315b64736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0xD2 GASPRICE 0xBF ORIGIN 0xDC 0xF8 PUSH19 0xCABE5E1ACE71E769357D61E045AE071E589E69 TSTORE DELEGATECALL CALLER BALANCE JUMPDEST PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ", + "sourceMap": "521:3235:45:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;521:3235:45;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ddd23abf32dcf872cabe5e1ace71e769357d61e045ae071e589e695df433315b64736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0xD2 GASPRICE 0xBF ORIGIN 0xDC 0xF8 PUSH19 0xCABE5E1ACE71E769357D61E045AE071E589E69 TSTORE DELEGATECALL CALLER BALANCE JUMPDEST PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ", + "sourceMap": "521:3235:45:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing. The library provides methods for generating a hash of a message that conforms to the https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712] specifications.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":\"MessageHashUtils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts/utils/math/Math.sol": { + "Math": { + "abi": [ + { + "inputs": [], + "name": "MathOverflowedMulDiv", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a1120efff84bae0cea4edd0fdde61e0b306e3d58aaa2cb2d77c1fa36fb63808164736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 SLT 0xE SELFDESTRUCT 0xF8 0x4B 0xAE 0xC 0xEA 0x4E 0xDD 0xF 0xDD 0xE6 0x1E SIGNEXTEND ADDRESS PUSH15 0x3D58AAA2CB2D77C1FA36FB63808164 PUSH20 0x6F6C634300081B00330000000000000000000000 ", + "sourceMap": "203:14914:46:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;203:14914:46;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a1120efff84bae0cea4edd0fdde61e0b306e3d58aaa2cb2d77c1fa36fb63808164736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 SLT 0xE SELFDESTRUCT 0xF8 0x4B 0xAE 0xC 0xEA 0x4E 0xDD 0xF 0xDD 0xE6 0x1E SIGNEXTEND ADDRESS PUSH15 0x3D58AAA2CB2D77C1FA36FB63808164 PUSH20 0x6F6C634300081B00330000000000000000000000 ", + "sourceMap": "203:14914:46:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MathOverflowedMulDiv\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"errors\":{\"MathOverflowedMulDiv()\":[{\"details\":\"Muldiv operation overflow.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "@openzeppelin/contracts/utils/math/SignedMath.sol": { + "SignedMath": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fdb970fc41318ccc2cf9b4d9f0f54635efbc9112788a867d21c127642b0246bd64736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT 0xB9 PUSH17 0xFC41318CCC2CF9B4D9F0F54635EFBC9112 PUSH25 0x8A867D21C127642B0246BD64736F6C634300081B0033000000 ", + "sourceMap": "216:1047:47:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;216:1047:47;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fdb970fc41318ccc2cf9b4d9f0f54635efbc9112788a867d21c127642b0246bd64736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT 0xB9 PUSH17 0xFC41318CCC2CF9B4D9F0F54635EFBC9112 PUSH25 0x8A867D21C127642B0246BD64736F6C634300081B0033000000 ", + "sourceMap": "216:1047:47:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "contracts/DisputeManager.sol": { + "DisputeManager": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expectedLength", + "type": "uint256" + } + ], + "name": "AttestationInvalidBytesLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerDisputeAlreadyCreated", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum IDisputeManager.DisputeStatus", + "name": "status", + "type": "uint8" + } + ], + "name": "DisputeManagerDisputeNotPending", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerDisputePeriodNotFinished", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerDisputePeriodZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "DisputeManagerIndexerNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerInvalidDispute", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "DisputeManagerInvalidDisputeDeposit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "cut", + "type": "uint32" + } + ], + "name": "DisputeManagerInvalidFishermanReward", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxSlashingCut", + "type": "uint32" + } + ], + "name": "DisputeManagerInvalidMaxSlashingCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokensSlash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokensSlash", + "type": "uint256" + } + ], + "name": "DisputeManagerInvalidTokensSlash", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "relatedDisputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerMustAcceptRelatedDispute", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "requestCID1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "requestCID2", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID2", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId2", + "type": "bytes32" + } + ], + "name": "DisputeManagerNonConflictingAttestations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId2", + "type": "bytes32" + } + ], + "name": "DisputeManagerNonMatchingSubgraphDeployment", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerNotArbitrator", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerNotFisherman", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerZeroTokens", + "type": "error" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "arbitrator", + "type": "address" + } + ], + "name": "ArbitratorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "DisputeDepositSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeDrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId1", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId2", + "type": "bytes32" + } + ], + "name": "DisputeLinked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + } + ], + "name": "DisputePeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeRejected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "fishermanRewardCut", + "type": "uint32" + } + ], + "name": "FishermanRewardCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "name": "IndexingDisputeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "maxSlashingCut", + "type": "uint32" + } + ], + "name": "MaxSlashingCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "attestation", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "name": "QueryDisputeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "subgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_FISHERMAN_REWARD_CUT", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokensSlash", + "type": "uint256" + } + ], + "name": "acceptDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "arbitrator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation2", + "type": "tuple" + } + ], + "name": "areConflictingAttestations", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "cancelDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + } + ], + "name": "createIndexingDispute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "name": "createQueryDispute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "attestationData1", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData2", + "type": "bytes" + } + ], + "name": "createQueryDisputeConflict", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disputeDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "disputePeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "disputes", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deposit", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "relatedDisputeId", + "type": "bytes32" + }, + { + "internalType": "enum IDisputeManager.DisputeType", + "name": "disputeType", + "type": "uint8" + }, + { + "internalType": "enum IDisputeManager.DisputeStatus", + "name": "status", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "drawDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "internalType": "struct Attestation.Receipt", + "name": "receipt", + "type": "tuple" + } + ], + "name": "encodeReceipt", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fishermanRewardCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation", + "type": "tuple" + } + ], + "name": "getAttestationIndexer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDisputePeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "getStakeSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "arbitrator", + "type": "address" + }, + { + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "fishermanRewardCut_", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "maxSlashingCut_", + "type": "uint32" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "isDisputeCreated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlashingCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "rejectDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "arbitrator", + "type": "address" + } + ], + "name": "setArbitrator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "setDisputeDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + } + ], + "name": "setDisputePeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "fishermanRewardCut_", + "type": "uint32" + } + ], + "name": "setFishermanRewardCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxSlashingCut_", + "type": "uint32" + } + ], + "name": "setMaxSlashingCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract ISubgraphService", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": { + "@_4520": { + "entryPoint": null, + "id": 4520, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_8106": { + "entryPoint": null, + "id": 8106, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_disableInitializers_5070": { + "entryPoint": 1001, + "id": 5070, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_getContractFromController_4652": { + "entryPoint": 827, + "id": 4652, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_getInitializableStorage_5101": { + "entryPoint": null, + "id": 5101, + "parameterSlots": 0, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address_fromMemory": { + "entryPoint": 1179, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 8, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 1227, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:2355:62", + "nodeType": "YulBlock", + "src": "0:2355:62", + "statements": [ + { + "nativeSrc": "6:3:62", + "nodeType": "YulBlock", + "src": "6:3:62", + "statements": [] + }, + { + "body": { + "nativeSrc": "95:209:62", + "nodeType": "YulBlock", + "src": "95:209:62", + "statements": [ + { + "body": { + "nativeSrc": "141:16:62", + "nodeType": "YulBlock", + "src": "141:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "150:1:62", + "nodeType": "YulLiteral", + "src": "150:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "153:1:62", + "nodeType": "YulLiteral", + "src": "153:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "143:6:62", + "nodeType": "YulIdentifier", + "src": "143:6:62" + }, + "nativeSrc": "143:12:62", + "nodeType": "YulFunctionCall", + "src": "143:12:62" + }, + "nativeSrc": "143:12:62", + "nodeType": "YulExpressionStatement", + "src": "143:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "116:7:62", + "nodeType": "YulIdentifier", + "src": "116:7:62" + }, + { + "name": "headStart", + "nativeSrc": "125:9:62", + "nodeType": "YulIdentifier", + "src": "125:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "112:3:62", + "nodeType": "YulIdentifier", + "src": "112:3:62" + }, + "nativeSrc": "112:23:62", + "nodeType": "YulFunctionCall", + "src": "112:23:62" + }, + { + "kind": "number", + "nativeSrc": "137:2:62", + "nodeType": "YulLiteral", + "src": "137:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "108:3:62", + "nodeType": "YulIdentifier", + "src": "108:3:62" + }, + "nativeSrc": "108:32:62", + "nodeType": "YulFunctionCall", + "src": "108:32:62" + }, + "nativeSrc": "105:52:62", + "nodeType": "YulIf", + "src": "105:52:62" + }, + { + "nativeSrc": "166:29:62", + "nodeType": "YulVariableDeclaration", + "src": "166:29:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "185:9:62", + "nodeType": "YulIdentifier", + "src": "185:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "179:5:62", + "nodeType": "YulIdentifier", + "src": "179:5:62" + }, + "nativeSrc": "179:16:62", + "nodeType": "YulFunctionCall", + "src": "179:16:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "170:5:62", + "nodeType": "YulTypedName", + "src": "170:5:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "258:16:62", + "nodeType": "YulBlock", + "src": "258:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "267:1:62", + "nodeType": "YulLiteral", + "src": "267:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "270:1:62", + "nodeType": "YulLiteral", + "src": "270:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "260:6:62", + "nodeType": "YulIdentifier", + "src": "260:6:62" + }, + "nativeSrc": "260:12:62", + "nodeType": "YulFunctionCall", + "src": "260:12:62" + }, + "nativeSrc": "260:12:62", + "nodeType": "YulExpressionStatement", + "src": "260:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "217:5:62", + "nodeType": "YulIdentifier", + "src": "217:5:62" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "228:5:62", + "nodeType": "YulIdentifier", + "src": "228:5:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "243:3:62", + "nodeType": "YulLiteral", + "src": "243:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "248:1:62", + "nodeType": "YulLiteral", + "src": "248:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "239:3:62", + "nodeType": "YulIdentifier", + "src": "239:3:62" + }, + "nativeSrc": "239:11:62", + "nodeType": "YulFunctionCall", + "src": "239:11:62" + }, + { + "kind": "number", + "nativeSrc": "252:1:62", + "nodeType": "YulLiteral", + "src": "252:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "235:3:62", + "nodeType": "YulIdentifier", + "src": "235:3:62" + }, + "nativeSrc": "235:19:62", + "nodeType": "YulFunctionCall", + "src": "235:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "224:3:62", + "nodeType": "YulIdentifier", + "src": "224:3:62" + }, + "nativeSrc": "224:31:62", + "nodeType": "YulFunctionCall", + "src": "224:31:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "214:2:62", + "nodeType": "YulIdentifier", + "src": "214:2:62" + }, + "nativeSrc": "214:42:62", + "nodeType": "YulFunctionCall", + "src": "214:42:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "207:6:62", + "nodeType": "YulIdentifier", + "src": "207:6:62" + }, + "nativeSrc": "207:50:62", + "nodeType": "YulFunctionCall", + "src": "207:50:62" + }, + "nativeSrc": "204:70:62", + "nodeType": "YulIf", + "src": "204:70:62" + }, + { + "nativeSrc": "283:15:62", + "nodeType": "YulAssignment", + "src": "283:15:62", + "value": { + "name": "value", + "nativeSrc": "293:5:62", + "nodeType": "YulIdentifier", + "src": "293:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "283:6:62", + "nodeType": "YulIdentifier", + "src": "283:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address_fromMemory", + "nativeSrc": "14:290:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "61:9:62", + "nodeType": "YulTypedName", + "src": "61:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "72:7:62", + "nodeType": "YulTypedName", + "src": "72:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "84:6:62", + "nodeType": "YulTypedName", + "src": "84:6:62", + "type": "" + } + ], + "src": "14:290:62" + }, + { + "body": { + "nativeSrc": "482:160:62", + "nodeType": "YulBlock", + "src": "482:160:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "499:9:62", + "nodeType": "YulIdentifier", + "src": "499:9:62" + }, + { + "kind": "number", + "nativeSrc": "510:2:62", + "nodeType": "YulLiteral", + "src": "510:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "492:6:62", + "nodeType": "YulIdentifier", + "src": "492:6:62" + }, + "nativeSrc": "492:21:62", + "nodeType": "YulFunctionCall", + "src": "492:21:62" + }, + "nativeSrc": "492:21:62", + "nodeType": "YulExpressionStatement", + "src": "492:21:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "533:9:62", + "nodeType": "YulIdentifier", + "src": "533:9:62" + }, + { + "kind": "number", + "nativeSrc": "544:2:62", + "nodeType": "YulLiteral", + "src": "544:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "529:3:62", + "nodeType": "YulIdentifier", + "src": "529:3:62" + }, + "nativeSrc": "529:18:62", + "nodeType": "YulFunctionCall", + "src": "529:18:62" + }, + { + "kind": "number", + "nativeSrc": "549:2:62", + "nodeType": "YulLiteral", + "src": "549:2:62", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "522:6:62", + "nodeType": "YulIdentifier", + "src": "522:6:62" + }, + "nativeSrc": "522:30:62", + "nodeType": "YulFunctionCall", + "src": "522:30:62" + }, + "nativeSrc": "522:30:62", + "nodeType": "YulExpressionStatement", + "src": "522:30:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "572:9:62", + "nodeType": "YulIdentifier", + "src": "572:9:62" + }, + { + "kind": "number", + "nativeSrc": "583:2:62", + "nodeType": "YulLiteral", + "src": "583:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "568:3:62", + "nodeType": "YulIdentifier", + "src": "568:3:62" + }, + "nativeSrc": "568:18:62", + "nodeType": "YulFunctionCall", + "src": "568:18:62" + }, + { + "hexValue": "436f6e74726f6c6c6572", + "kind": "string", + "nativeSrc": "588:12:62", + "nodeType": "YulLiteral", + "src": "588:12:62", + "type": "", + "value": "Controller" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "561:6:62", + "nodeType": "YulIdentifier", + "src": "561:6:62" + }, + "nativeSrc": "561:40:62", + "nodeType": "YulFunctionCall", + "src": "561:40:62" + }, + "nativeSrc": "561:40:62", + "nodeType": "YulExpressionStatement", + "src": "561:40:62" + }, + { + "nativeSrc": "610:26:62", + "nodeType": "YulAssignment", + "src": "610:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "622:9:62", + "nodeType": "YulIdentifier", + "src": "622:9:62" + }, + { + "kind": "number", + "nativeSrc": "633:2:62", + "nodeType": "YulLiteral", + "src": "633:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "618:3:62", + "nodeType": "YulIdentifier", + "src": "618:3:62" + }, + "nativeSrc": "618:18:62", + "nodeType": "YulFunctionCall", + "src": "618:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "610:4:62", + "nodeType": "YulIdentifier", + "src": "610:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "309:333:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "459:9:62", + "nodeType": "YulTypedName", + "src": "459:9:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "473:4:62", + "nodeType": "YulTypedName", + "src": "473:4:62", + "type": "" + } + ], + "src": "309:333:62" + }, + { + "body": { + "nativeSrc": "916:520:62", + "nodeType": "YulBlock", + "src": "916:520:62", + "statements": [ + { + "nativeSrc": "926:27:62", + "nodeType": "YulAssignment", + "src": "926:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "938:9:62", + "nodeType": "YulIdentifier", + "src": "938:9:62" + }, + { + "kind": "number", + "nativeSrc": "949:3:62", + "nodeType": "YulLiteral", + "src": "949:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "934:3:62", + "nodeType": "YulIdentifier", + "src": "934:3:62" + }, + "nativeSrc": "934:19:62", + "nodeType": "YulFunctionCall", + "src": "934:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "926:4:62", + "nodeType": "YulIdentifier", + "src": "926:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "969:9:62", + "nodeType": "YulIdentifier", + "src": "969:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "984:6:62", + "nodeType": "YulIdentifier", + "src": "984:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1000:3:62", + "nodeType": "YulLiteral", + "src": "1000:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1005:1:62", + "nodeType": "YulLiteral", + "src": "1005:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "996:3:62", + "nodeType": "YulIdentifier", + "src": "996:3:62" + }, + "nativeSrc": "996:11:62", + "nodeType": "YulFunctionCall", + "src": "996:11:62" + }, + { + "kind": "number", + "nativeSrc": "1009:1:62", + "nodeType": "YulLiteral", + "src": "1009:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "992:3:62", + "nodeType": "YulIdentifier", + "src": "992:3:62" + }, + "nativeSrc": "992:19:62", + "nodeType": "YulFunctionCall", + "src": "992:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "980:3:62", + "nodeType": "YulIdentifier", + "src": "980:3:62" + }, + "nativeSrc": "980:32:62", + "nodeType": "YulFunctionCall", + "src": "980:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "962:6:62", + "nodeType": "YulIdentifier", + "src": "962:6:62" + }, + "nativeSrc": "962:51:62", + "nodeType": "YulFunctionCall", + "src": "962:51:62" + }, + "nativeSrc": "962:51:62", + "nodeType": "YulExpressionStatement", + "src": "962:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1033:9:62", + "nodeType": "YulIdentifier", + "src": "1033:9:62" + }, + { + "kind": "number", + "nativeSrc": "1044:2:62", + "nodeType": "YulLiteral", + "src": "1044:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1029:3:62", + "nodeType": "YulIdentifier", + "src": "1029:3:62" + }, + "nativeSrc": "1029:18:62", + "nodeType": "YulFunctionCall", + "src": "1029:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "1053:6:62", + "nodeType": "YulIdentifier", + "src": "1053:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1069:3:62", + "nodeType": "YulLiteral", + "src": "1069:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1074:1:62", + "nodeType": "YulLiteral", + "src": "1074:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1065:3:62", + "nodeType": "YulIdentifier", + "src": "1065:3:62" + }, + "nativeSrc": "1065:11:62", + "nodeType": "YulFunctionCall", + "src": "1065:11:62" + }, + { + "kind": "number", + "nativeSrc": "1078:1:62", + "nodeType": "YulLiteral", + "src": "1078:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1061:3:62", + "nodeType": "YulIdentifier", + "src": "1061:3:62" + }, + "nativeSrc": "1061:19:62", + "nodeType": "YulFunctionCall", + "src": "1061:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1049:3:62", + "nodeType": "YulIdentifier", + "src": "1049:3:62" + }, + "nativeSrc": "1049:32:62", + "nodeType": "YulFunctionCall", + "src": "1049:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1022:6:62", + "nodeType": "YulIdentifier", + "src": "1022:6:62" + }, + "nativeSrc": "1022:60:62", + "nodeType": "YulFunctionCall", + "src": "1022:60:62" + }, + "nativeSrc": "1022:60:62", + "nodeType": "YulExpressionStatement", + "src": "1022:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1102:9:62", + "nodeType": "YulIdentifier", + "src": "1102:9:62" + }, + { + "kind": "number", + "nativeSrc": "1113:2:62", + "nodeType": "YulLiteral", + "src": "1113:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1098:3:62", + "nodeType": "YulIdentifier", + "src": "1098:3:62" + }, + "nativeSrc": "1098:18:62", + "nodeType": "YulFunctionCall", + "src": "1098:18:62" + }, + { + "arguments": [ + { + "name": "value2", + "nativeSrc": "1122:6:62", + "nodeType": "YulIdentifier", + "src": "1122:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1138:3:62", + "nodeType": "YulLiteral", + "src": "1138:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1143:1:62", + "nodeType": "YulLiteral", + "src": "1143:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1134:3:62", + "nodeType": "YulIdentifier", + "src": "1134:3:62" + }, + "nativeSrc": "1134:11:62", + "nodeType": "YulFunctionCall", + "src": "1134:11:62" + }, + { + "kind": "number", + "nativeSrc": "1147:1:62", + "nodeType": "YulLiteral", + "src": "1147:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1130:3:62", + "nodeType": "YulIdentifier", + "src": "1130:3:62" + }, + "nativeSrc": "1130:19:62", + "nodeType": "YulFunctionCall", + "src": "1130:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1118:3:62", + "nodeType": "YulIdentifier", + "src": "1118:3:62" + }, + "nativeSrc": "1118:32:62", + "nodeType": "YulFunctionCall", + "src": "1118:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1091:6:62", + "nodeType": "YulIdentifier", + "src": "1091:6:62" + }, + "nativeSrc": "1091:60:62", + "nodeType": "YulFunctionCall", + "src": "1091:60:62" + }, + "nativeSrc": "1091:60:62", + "nodeType": "YulExpressionStatement", + "src": "1091:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1171:9:62", + "nodeType": "YulIdentifier", + "src": "1171:9:62" + }, + { + "kind": "number", + "nativeSrc": "1182:2:62", + "nodeType": "YulLiteral", + "src": "1182:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1167:3:62", + "nodeType": "YulIdentifier", + "src": "1167:3:62" + }, + "nativeSrc": "1167:18:62", + "nodeType": "YulFunctionCall", + "src": "1167:18:62" + }, + { + "arguments": [ + { + "name": "value3", + "nativeSrc": "1191:6:62", + "nodeType": "YulIdentifier", + "src": "1191:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1207:3:62", + "nodeType": "YulLiteral", + "src": "1207:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1212:1:62", + "nodeType": "YulLiteral", + "src": "1212:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1203:3:62", + "nodeType": "YulIdentifier", + "src": "1203:3:62" + }, + "nativeSrc": "1203:11:62", + "nodeType": "YulFunctionCall", + "src": "1203:11:62" + }, + { + "kind": "number", + "nativeSrc": "1216:1:62", + "nodeType": "YulLiteral", + "src": "1216:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1199:3:62", + "nodeType": "YulIdentifier", + "src": "1199:3:62" + }, + "nativeSrc": "1199:19:62", + "nodeType": "YulFunctionCall", + "src": "1199:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1187:3:62", + "nodeType": "YulIdentifier", + "src": "1187:3:62" + }, + "nativeSrc": "1187:32:62", + "nodeType": "YulFunctionCall", + "src": "1187:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1160:6:62", + "nodeType": "YulIdentifier", + "src": "1160:6:62" + }, + "nativeSrc": "1160:60:62", + "nodeType": "YulFunctionCall", + "src": "1160:60:62" + }, + "nativeSrc": "1160:60:62", + "nodeType": "YulExpressionStatement", + "src": "1160:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1240:9:62", + "nodeType": "YulIdentifier", + "src": "1240:9:62" + }, + { + "kind": "number", + "nativeSrc": "1251:3:62", + "nodeType": "YulLiteral", + "src": "1251:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1236:3:62", + "nodeType": "YulIdentifier", + "src": "1236:3:62" + }, + "nativeSrc": "1236:19:62", + "nodeType": "YulFunctionCall", + "src": "1236:19:62" + }, + { + "arguments": [ + { + "name": "value4", + "nativeSrc": "1261:6:62", + "nodeType": "YulIdentifier", + "src": "1261:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1277:3:62", + "nodeType": "YulLiteral", + "src": "1277:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1282:1:62", + "nodeType": "YulLiteral", + "src": "1282:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1273:3:62", + "nodeType": "YulIdentifier", + "src": "1273:3:62" + }, + "nativeSrc": "1273:11:62", + "nodeType": "YulFunctionCall", + "src": "1273:11:62" + }, + { + "kind": "number", + "nativeSrc": "1286:1:62", + "nodeType": "YulLiteral", + "src": "1286:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1269:3:62", + "nodeType": "YulIdentifier", + "src": "1269:3:62" + }, + "nativeSrc": "1269:19:62", + "nodeType": "YulFunctionCall", + "src": "1269:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1257:3:62", + "nodeType": "YulIdentifier", + "src": "1257:3:62" + }, + "nativeSrc": "1257:32:62", + "nodeType": "YulFunctionCall", + "src": "1257:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1229:6:62", + "nodeType": "YulIdentifier", + "src": "1229:6:62" + }, + "nativeSrc": "1229:61:62", + "nodeType": "YulFunctionCall", + "src": "1229:61:62" + }, + "nativeSrc": "1229:61:62", + "nodeType": "YulExpressionStatement", + "src": "1229:61:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1310:9:62", + "nodeType": "YulIdentifier", + "src": "1310:9:62" + }, + { + "kind": "number", + "nativeSrc": "1321:3:62", + "nodeType": "YulLiteral", + "src": "1321:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1306:3:62", + "nodeType": "YulIdentifier", + "src": "1306:3:62" + }, + "nativeSrc": "1306:19:62", + "nodeType": "YulFunctionCall", + "src": "1306:19:62" + }, + { + "arguments": [ + { + "name": "value5", + "nativeSrc": "1331:6:62", + "nodeType": "YulIdentifier", + "src": "1331:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1347:3:62", + "nodeType": "YulLiteral", + "src": "1347:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1352:1:62", + "nodeType": "YulLiteral", + "src": "1352:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1343:3:62", + "nodeType": "YulIdentifier", + "src": "1343:3:62" + }, + "nativeSrc": "1343:11:62", + "nodeType": "YulFunctionCall", + "src": "1343:11:62" + }, + { + "kind": "number", + "nativeSrc": "1356:1:62", + "nodeType": "YulLiteral", + "src": "1356:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1339:3:62", + "nodeType": "YulIdentifier", + "src": "1339:3:62" + }, + "nativeSrc": "1339:19:62", + "nodeType": "YulFunctionCall", + "src": "1339:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1327:3:62", + "nodeType": "YulIdentifier", + "src": "1327:3:62" + }, + "nativeSrc": "1327:32:62", + "nodeType": "YulFunctionCall", + "src": "1327:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1299:6:62", + "nodeType": "YulIdentifier", + "src": "1299:6:62" + }, + "nativeSrc": "1299:61:62", + "nodeType": "YulFunctionCall", + "src": "1299:61:62" + }, + "nativeSrc": "1299:61:62", + "nodeType": "YulExpressionStatement", + "src": "1299:61:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1380:9:62", + "nodeType": "YulIdentifier", + "src": "1380:9:62" + }, + { + "kind": "number", + "nativeSrc": "1391:3:62", + "nodeType": "YulLiteral", + "src": "1391:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1376:3:62", + "nodeType": "YulIdentifier", + "src": "1376:3:62" + }, + "nativeSrc": "1376:19:62", + "nodeType": "YulFunctionCall", + "src": "1376:19:62" + }, + { + "arguments": [ + { + "name": "value6", + "nativeSrc": "1401:6:62", + "nodeType": "YulIdentifier", + "src": "1401:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1417:3:62", + "nodeType": "YulLiteral", + "src": "1417:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1422:1:62", + "nodeType": "YulLiteral", + "src": "1422:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1413:3:62", + "nodeType": "YulIdentifier", + "src": "1413:3:62" + }, + "nativeSrc": "1413:11:62", + "nodeType": "YulFunctionCall", + "src": "1413:11:62" + }, + { + "kind": "number", + "nativeSrc": "1426:1:62", + "nodeType": "YulLiteral", + "src": "1426:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1409:3:62", + "nodeType": "YulIdentifier", + "src": "1409:3:62" + }, + "nativeSrc": "1409:19:62", + "nodeType": "YulFunctionCall", + "src": "1409:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1397:3:62", + "nodeType": "YulIdentifier", + "src": "1397:3:62" + }, + "nativeSrc": "1397:32:62", + "nodeType": "YulFunctionCall", + "src": "1397:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1369:6:62", + "nodeType": "YulIdentifier", + "src": "1369:6:62" + }, + "nativeSrc": "1369:61:62", + "nodeType": "YulFunctionCall", + "src": "1369:61:62" + }, + "nativeSrc": "1369:61:62", + "nodeType": "YulExpressionStatement", + "src": "1369:61:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed", + "nativeSrc": "647:789:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "837:9:62", + "nodeType": "YulTypedName", + "src": "837:9:62", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "848:6:62", + "nodeType": "YulTypedName", + "src": "848:6:62", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "856:6:62", + "nodeType": "YulTypedName", + "src": "856:6:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "864:6:62", + "nodeType": "YulTypedName", + "src": "864:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "872:6:62", + "nodeType": "YulTypedName", + "src": "872:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "880:6:62", + "nodeType": "YulTypedName", + "src": "880:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "888:6:62", + "nodeType": "YulTypedName", + "src": "888:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "896:6:62", + "nodeType": "YulTypedName", + "src": "896:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "907:4:62", + "nodeType": "YulTypedName", + "src": "907:4:62", + "type": "" + } + ], + "src": "647:789:62" + }, + { + "body": { + "nativeSrc": "1542:76:62", + "nodeType": "YulBlock", + "src": "1542:76:62", + "statements": [ + { + "nativeSrc": "1552:26:62", + "nodeType": "YulAssignment", + "src": "1552:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1564:9:62", + "nodeType": "YulIdentifier", + "src": "1564:9:62" + }, + { + "kind": "number", + "nativeSrc": "1575:2:62", + "nodeType": "YulLiteral", + "src": "1575:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1560:3:62", + "nodeType": "YulIdentifier", + "src": "1560:3:62" + }, + "nativeSrc": "1560:18:62", + "nodeType": "YulFunctionCall", + "src": "1560:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1552:4:62", + "nodeType": "YulIdentifier", + "src": "1552:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1594:9:62", + "nodeType": "YulIdentifier", + "src": "1594:9:62" + }, + { + "name": "value0", + "nativeSrc": "1605:6:62", + "nodeType": "YulIdentifier", + "src": "1605:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1587:6:62", + "nodeType": "YulIdentifier", + "src": "1587:6:62" + }, + "nativeSrc": "1587:25:62", + "nodeType": "YulFunctionCall", + "src": "1587:25:62" + }, + "nativeSrc": "1587:25:62", + "nodeType": "YulExpressionStatement", + "src": "1587:25:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", + "nativeSrc": "1441:177:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1511:9:62", + "nodeType": "YulTypedName", + "src": "1511:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1522:6:62", + "nodeType": "YulTypedName", + "src": "1522:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1533:4:62", + "nodeType": "YulTypedName", + "src": "1533:4:62", + "type": "" + } + ], + "src": "1441:177:62" + }, + { + "body": { + "nativeSrc": "1742:406:62", + "nodeType": "YulBlock", + "src": "1742:406:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1759:9:62", + "nodeType": "YulIdentifier", + "src": "1759:9:62" + }, + { + "kind": "number", + "nativeSrc": "1770:2:62", + "nodeType": "YulLiteral", + "src": "1770:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1752:6:62", + "nodeType": "YulIdentifier", + "src": "1752:6:62" + }, + "nativeSrc": "1752:21:62", + "nodeType": "YulFunctionCall", + "src": "1752:21:62" + }, + "nativeSrc": "1752:21:62", + "nodeType": "YulExpressionStatement", + "src": "1752:21:62" + }, + { + "nativeSrc": "1782:27:62", + "nodeType": "YulVariableDeclaration", + "src": "1782:27:62", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1802:6:62", + "nodeType": "YulIdentifier", + "src": "1802:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1796:5:62", + "nodeType": "YulIdentifier", + "src": "1796:5:62" + }, + "nativeSrc": "1796:13:62", + "nodeType": "YulFunctionCall", + "src": "1796:13:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "1786:6:62", + "nodeType": "YulTypedName", + "src": "1786:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1829:9:62", + "nodeType": "YulIdentifier", + "src": "1829:9:62" + }, + { + "kind": "number", + "nativeSrc": "1840:2:62", + "nodeType": "YulLiteral", + "src": "1840:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1825:3:62", + "nodeType": "YulIdentifier", + "src": "1825:3:62" + }, + "nativeSrc": "1825:18:62", + "nodeType": "YulFunctionCall", + "src": "1825:18:62" + }, + { + "name": "length", + "nativeSrc": "1845:6:62", + "nodeType": "YulIdentifier", + "src": "1845:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1818:6:62", + "nodeType": "YulIdentifier", + "src": "1818:6:62" + }, + "nativeSrc": "1818:34:62", + "nodeType": "YulFunctionCall", + "src": "1818:34:62" + }, + "nativeSrc": "1818:34:62", + "nodeType": "YulExpressionStatement", + "src": "1818:34:62" + }, + { + "nativeSrc": "1861:10:62", + "nodeType": "YulVariableDeclaration", + "src": "1861:10:62", + "value": { + "kind": "number", + "nativeSrc": "1870:1:62", + "nodeType": "YulLiteral", + "src": "1870:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "1865:1:62", + "nodeType": "YulTypedName", + "src": "1865:1:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1930:90:62", + "nodeType": "YulBlock", + "src": "1930:90:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1959:9:62", + "nodeType": "YulIdentifier", + "src": "1959:9:62" + }, + { + "name": "i", + "nativeSrc": "1970:1:62", + "nodeType": "YulIdentifier", + "src": "1970:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1955:3:62", + "nodeType": "YulIdentifier", + "src": "1955:3:62" + }, + "nativeSrc": "1955:17:62", + "nodeType": "YulFunctionCall", + "src": "1955:17:62" + }, + { + "kind": "number", + "nativeSrc": "1974:2:62", + "nodeType": "YulLiteral", + "src": "1974:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1951:3:62", + "nodeType": "YulIdentifier", + "src": "1951:3:62" + }, + "nativeSrc": "1951:26:62", + "nodeType": "YulFunctionCall", + "src": "1951:26:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1993:6:62", + "nodeType": "YulIdentifier", + "src": "1993:6:62" + }, + { + "name": "i", + "nativeSrc": "2001:1:62", + "nodeType": "YulIdentifier", + "src": "2001:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1989:3:62", + "nodeType": "YulIdentifier", + "src": "1989:3:62" + }, + "nativeSrc": "1989:14:62", + "nodeType": "YulFunctionCall", + "src": "1989:14:62" + }, + { + "kind": "number", + "nativeSrc": "2005:2:62", + "nodeType": "YulLiteral", + "src": "2005:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1985:3:62", + "nodeType": "YulIdentifier", + "src": "1985:3:62" + }, + "nativeSrc": "1985:23:62", + "nodeType": "YulFunctionCall", + "src": "1985:23:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1979:5:62", + "nodeType": "YulIdentifier", + "src": "1979:5:62" + }, + "nativeSrc": "1979:30:62", + "nodeType": "YulFunctionCall", + "src": "1979:30:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1944:6:62", + "nodeType": "YulIdentifier", + "src": "1944:6:62" + }, + "nativeSrc": "1944:66:62", + "nodeType": "YulFunctionCall", + "src": "1944:66:62" + }, + "nativeSrc": "1944:66:62", + "nodeType": "YulExpressionStatement", + "src": "1944:66:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "1891:1:62", + "nodeType": "YulIdentifier", + "src": "1891:1:62" + }, + { + "name": "length", + "nativeSrc": "1894:6:62", + "nodeType": "YulIdentifier", + "src": "1894:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "1888:2:62", + "nodeType": "YulIdentifier", + "src": "1888:2:62" + }, + "nativeSrc": "1888:13:62", + "nodeType": "YulFunctionCall", + "src": "1888:13:62" + }, + "nativeSrc": "1880:140:62", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "1902:19:62", + "nodeType": "YulBlock", + "src": "1902:19:62", + "statements": [ + { + "nativeSrc": "1904:15:62", + "nodeType": "YulAssignment", + "src": "1904:15:62", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "1913:1:62", + "nodeType": "YulIdentifier", + "src": "1913:1:62" + }, + { + "kind": "number", + "nativeSrc": "1916:2:62", + "nodeType": "YulLiteral", + "src": "1916:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1909:3:62", + "nodeType": "YulIdentifier", + "src": "1909:3:62" + }, + "nativeSrc": "1909:10:62", + "nodeType": "YulFunctionCall", + "src": "1909:10:62" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "1904:1:62", + "nodeType": "YulIdentifier", + "src": "1904:1:62" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "1884:3:62", + "nodeType": "YulBlock", + "src": "1884:3:62", + "statements": [] + }, + "src": "1880:140:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2044:9:62", + "nodeType": "YulIdentifier", + "src": "2044:9:62" + }, + { + "name": "length", + "nativeSrc": "2055:6:62", + "nodeType": "YulIdentifier", + "src": "2055:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2040:3:62", + "nodeType": "YulIdentifier", + "src": "2040:3:62" + }, + "nativeSrc": "2040:22:62", + "nodeType": "YulFunctionCall", + "src": "2040:22:62" + }, + { + "kind": "number", + "nativeSrc": "2064:2:62", + "nodeType": "YulLiteral", + "src": "2064:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2036:3:62", + "nodeType": "YulIdentifier", + "src": "2036:3:62" + }, + "nativeSrc": "2036:31:62", + "nodeType": "YulFunctionCall", + "src": "2036:31:62" + }, + { + "kind": "number", + "nativeSrc": "2069:1:62", + "nodeType": "YulLiteral", + "src": "2069:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2029:6:62", + "nodeType": "YulIdentifier", + "src": "2029:6:62" + }, + "nativeSrc": "2029:42:62", + "nodeType": "YulFunctionCall", + "src": "2029:42:62" + }, + "nativeSrc": "2029:42:62", + "nodeType": "YulExpressionStatement", + "src": "2029:42:62" + }, + { + "nativeSrc": "2080:62:62", + "nodeType": "YulAssignment", + "src": "2080:62:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2096:9:62", + "nodeType": "YulIdentifier", + "src": "2096:9:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "2115:6:62", + "nodeType": "YulIdentifier", + "src": "2115:6:62" + }, + { + "kind": "number", + "nativeSrc": "2123:2:62", + "nodeType": "YulLiteral", + "src": "2123:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2111:3:62", + "nodeType": "YulIdentifier", + "src": "2111:3:62" + }, + "nativeSrc": "2111:15:62", + "nodeType": "YulFunctionCall", + "src": "2111:15:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2132:2:62", + "nodeType": "YulLiteral", + "src": "2132:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "2128:3:62", + "nodeType": "YulIdentifier", + "src": "2128:3:62" + }, + "nativeSrc": "2128:7:62", + "nodeType": "YulFunctionCall", + "src": "2128:7:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2107:3:62", + "nodeType": "YulIdentifier", + "src": "2107:3:62" + }, + "nativeSrc": "2107:29:62", + "nodeType": "YulFunctionCall", + "src": "2107:29:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2092:3:62", + "nodeType": "YulIdentifier", + "src": "2092:3:62" + }, + "nativeSrc": "2092:45:62", + "nodeType": "YulFunctionCall", + "src": "2092:45:62" + }, + { + "kind": "number", + "nativeSrc": "2139:2:62", + "nodeType": "YulLiteral", + "src": "2139:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2088:3:62", + "nodeType": "YulIdentifier", + "src": "2088:3:62" + }, + "nativeSrc": "2088:54:62", + "nodeType": "YulFunctionCall", + "src": "2088:54:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2080:4:62", + "nodeType": "YulIdentifier", + "src": "2080:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "1623:525:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1711:9:62", + "nodeType": "YulTypedName", + "src": "1711:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1722:6:62", + "nodeType": "YulTypedName", + "src": "1722:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1733:4:62", + "nodeType": "YulTypedName", + "src": "1733:4:62", + "type": "" + } + ], + "src": "1623:525:62" + }, + { + "body": { + "nativeSrc": "2252:101:62", + "nodeType": "YulBlock", + "src": "2252:101:62", + "statements": [ + { + "nativeSrc": "2262:26:62", + "nodeType": "YulAssignment", + "src": "2262:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2274:9:62", + "nodeType": "YulIdentifier", + "src": "2274:9:62" + }, + { + "kind": "number", + "nativeSrc": "2285:2:62", + "nodeType": "YulLiteral", + "src": "2285:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2270:3:62", + "nodeType": "YulIdentifier", + "src": "2270:3:62" + }, + "nativeSrc": "2270:18:62", + "nodeType": "YulFunctionCall", + "src": "2270:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2262:4:62", + "nodeType": "YulIdentifier", + "src": "2262:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2304:9:62", + "nodeType": "YulIdentifier", + "src": "2304:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "2319:6:62", + "nodeType": "YulIdentifier", + "src": "2319:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2335:2:62", + "nodeType": "YulLiteral", + "src": "2335:2:62", + "type": "", + "value": "64" + }, + { + "kind": "number", + "nativeSrc": "2339:1:62", + "nodeType": "YulLiteral", + "src": "2339:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2331:3:62", + "nodeType": "YulIdentifier", + "src": "2331:3:62" + }, + "nativeSrc": "2331:10:62", + "nodeType": "YulFunctionCall", + "src": "2331:10:62" + }, + { + "kind": "number", + "nativeSrc": "2343:1:62", + "nodeType": "YulLiteral", + "src": "2343:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2327:3:62", + "nodeType": "YulIdentifier", + "src": "2327:3:62" + }, + "nativeSrc": "2327:18:62", + "nodeType": "YulFunctionCall", + "src": "2327:18:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2315:3:62", + "nodeType": "YulIdentifier", + "src": "2315:3:62" + }, + "nativeSrc": "2315:31:62", + "nodeType": "YulFunctionCall", + "src": "2315:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2297:6:62", + "nodeType": "YulIdentifier", + "src": "2297:6:62" + }, + "nativeSrc": "2297:50:62", + "nodeType": "YulFunctionCall", + "src": "2297:50:62" + }, + "nativeSrc": "2297:50:62", + "nodeType": "YulExpressionStatement", + "src": "2297:50:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", + "nativeSrc": "2153:200:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2221:9:62", + "nodeType": "YulTypedName", + "src": "2221:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2232:6:62", + "nodeType": "YulTypedName", + "src": "2232:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2243:4:62", + "nodeType": "YulTypedName", + "src": "2243:4:62", + "type": "" + } + ], + "src": "2153:200:62" + } + ] + }, + "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 10)\n mstore(add(headStart, 64), \"Controller\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 224)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 160), and(value5, sub(shl(160, 1), 1)))\n mstore(add(headStart, 192), and(value6, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), 32)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(64, 1), 1)))\n }\n}", + "id": 62, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "6101c060405234801561001157600080fd5b506040516138243803806138248339810160408190526100309161049b565b806001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b29061033b565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e59061033b565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e9061033b565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b60208201526101589061033b565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526101909061033b565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb9061033b565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102099061033b565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102459061033b565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a9061033b565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a4506103356103e9565b50610519565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161037691815260200190565b602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b7919061049b565b9050826001600160a01b0382166103e25760405163218f5add60e11b815260040161007191906104cb565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104395760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104985780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156104ad57600080fd5b81516001600160a01b03811681146104c457600080fd5b9392505050565b602081526000825180602084015260005b818110156104f957602081860181015160408684010152016104dc565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516132a861057c60003960005050600050506000505060005050600050506000505060005050600050506000611fe30152600061160e01526132a86000f3fe608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", + "opcodes": "PUSH2 0x1C0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x3824 CODESIZE SUB DUP1 PUSH2 0x3824 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x30 SWAP2 PUSH2 0x49B JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7A JUMPI PUSH1 0x40 MLOAD PUSH4 0x218F5ADD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x21B7B73A3937B63632B9 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xA DUP2 MSTORE PUSH10 0x23B930B8342A37B5B2B7 PUSH1 0xB1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xB2 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x5374616B696E67 PUSH1 0xC8 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xE5 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xD DUP2 MSTORE PUSH13 0x47726170685061796D656E7473 PUSH1 0x98 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x11E SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH14 0x5061796D656E7473457363726F77 PUSH1 0x90 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x158 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xC DUP2 MSTORE PUSH12 0x22B837B1B426B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x190 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH14 0x2932BBB0B93239A6B0B730B3B2B9 PUSH1 0x91 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1CB SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH17 0x4772617068546F6B656E47617465776179 PUSH1 0x78 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x209 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x160 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xF DUP2 MSTORE PUSH15 0x23B930B834283937BC3CA0B236B4B7 PUSH1 0x89 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x245 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x180 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x8 DUP2 MSTORE PUSH8 0x21BAB930BA34B7B7 PUSH1 0xC1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x27A SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x1A0 DUP2 SWAP1 MSTORE PUSH2 0x100 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x80 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH1 0x40 MLOAD SWAP9 DUP12 AND SWAP11 SWAP8 DUP9 AND SWAP10 SWAP7 SWAP1 SWAP8 AND SWAP8 PUSH32 0xEF5021414834D86E36470F5C1CECF6544FB2BB723F2CA51A4C86FCD8C5919A43 SWAP8 PUSH2 0x324 SWAP8 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 DUP8 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP4 DUP7 AND PUSH1 0x40 DUP7 ADD MSTORE SWAP2 DUP6 AND PUSH1 0x60 DUP6 ADD MSTORE DUP5 AND PUSH1 0x80 DUP5 ADD MSTORE DUP4 AND PUSH1 0xA0 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP PUSH2 0x335 PUSH2 0x3E9 JUMP JUMPDEST POP PUSH2 0x519 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x100 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7641A5E DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x376 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x393 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B7 SWAP2 SWAP1 PUSH2 0x49B JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x218F5ADD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x4CB JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x439 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND EQ PUSH2 0x498 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4F9 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD PUSH1 0x40 DUP7 DUP5 ADD ADD MSTORE ADD PUSH2 0x4DC JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP6 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH2 0x32A8 PUSH2 0x57C PUSH1 0x0 CODECOPY PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 PUSH2 0x1FE3 ADD MSTORE PUSH1 0x0 PUSH2 0x160E ADD MSTORE PUSH2 0x32A8 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1B0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x76C993AE GT PUSH2 0xEF JUMPI DUP1 PUSH4 0xBE41F384 GT PUSH2 0x92 JUMPI DUP1 PUSH4 0xBE41F384 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0xC133B429 EQ PUSH2 0x42E JUMPI DUP1 PUSH4 0xC50A77B1 EQ PUSH2 0x441 JUMPI DUP1 PUSH4 0xC894222E EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0xC9747F51 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xD36FC9D4 EQ PUSH2 0x48F JUMPI DUP1 PUSH4 0xD76F62D1 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x4B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x76C993AE EQ PUSH2 0x386 JUMPI DUP1 PUSH4 0x84633713 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3A7 JUMPI DUP1 PUSH4 0x902A4938 EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0x9334EA52 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x93A90A1E EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x9F81A7CF EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0xB0EEFABE EQ PUSH2 0x3F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x36167E03 GT PUSH2 0x157 JUMPI DUP1 PUSH4 0x36167E03 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x4BC5839A EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x5AEA0EC4 EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x5BF31D4D EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x5ED2C96C EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x6369DF6B EQ PUSH2 0x358 JUMPI DUP1 PUSH4 0x6CC6CDE1 EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x50B17AD EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x533E1BA EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x11BE1997 EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0x16972978 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0x17337B46 EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0x1792F194 EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0x26058249 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x29E03FF1 EQ PUSH2 0x2C2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C8 PUSH2 0x1C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A74 JUMP JUMPDEST PUSH2 0x4C8 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x1E1 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25E PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 SWAP1 SWAP7 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND SWAP7 SWAP6 SWAP1 SWAP5 AND SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 PUSH1 0xFF DUP1 DUP4 AND SWAP4 PUSH2 0x100 SWAP1 SWAP4 DIV AND SWAP2 DUP9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F2 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x280 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0x74B JUMP JUMPDEST PUSH2 0x1E1 PUSH3 0x7A120 DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0x75F JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH2 0x2B5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F2 SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x2CB PUSH1 0x35 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2B62 JUMP JUMPDEST PUSH2 0xBEF JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH2 0x313 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BB5 JUMP JUMPDEST PUSH2 0xC10 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x366 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CB5 JUMP JUMPDEST PUSH2 0xD43 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH2 0x2B5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0xD4E JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x394 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D20 JUMP JUMPDEST PUSH2 0xD62 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x1E1 SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xD8E JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0xFAE JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D20 JUMP JUMPDEST PUSH2 0xFBF JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x406 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0xFD0 JUMP JUMPDEST PUSH2 0x41E PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xFE1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x43C CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0x1017 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x2DA2 JUMP JUMPDEST PUSH2 0x10AF JUMP JUMPDEST PUSH2 0x467 PUSH2 0x462 CALLDATASIZE PUSH1 0x4 PUSH2 0x2DE3 JUMP JUMPDEST PUSH2 0x113B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x2EB9 JUMP JUMPDEST PUSH2 0x1320 JUMP JUMPDEST PUSH2 0x41E PUSH2 0x49D CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED5 JUMP JUMPDEST PUSH2 0x1411 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F0B JUMP JUMPDEST PUSH2 0x141D JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x4C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0x142E JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x4FD DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x528 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x556 JUMPI PUSH2 0x556 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE DUP1 SLOAD PUSH1 0x6 DUP3 ADD SLOAD SWAP2 SWAP3 SWAP2 PUSH2 0x5CF SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP7 SWAP1 PUSH2 0x1469 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x2 DUP5 ADD SLOAD SWAP2 SWAP3 POP PUSH2 0x60E SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH2 0x5F6 SWAP1 DUP5 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP6 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP6 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP5 ADD SLOAD PUSH2 0x6D6 SWAP3 DUP6 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x66F JUMPI PUSH2 0x66F PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x680 JUMPI PUSH2 0x680 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x6A8 JUMPI PUSH2 0x6A8 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x6B9 JUMPI PUSH2 0x6B9 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x6E8 JUMPI PUSH2 0x6E8 DUP3 PUSH1 0x3 ADD SLOAD PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD DUP3 SLOAD PUSH1 0x2 DUP5 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP8 SWAP1 PUSH32 0x6D800AAAF64B9A1F321DCD63DA04369D33D8A0D49AD0FBBA085AAB4A98BF31C4 SWAP1 PUSH2 0x733 SWAP1 DUP7 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x753 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1760 JUMP JUMPDEST POP JUMP JUMPDEST DUP1 PUSH2 0x769 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x78B JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x82C0055 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x7D0 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x7F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x820 JUMPI PUSH2 0x820 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0x85A JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x34 SLOAD PUSH1 0x5 DUP3 ADD SLOAD TIMESTAMP SWAP2 PUSH2 0x88E SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 PUSH2 0x2F4C JUMP JUMPDEST LT PUSH2 0x8AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1D7753D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD ISZERO PUSH2 0x8D6 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH2 0x8D6 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP5 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH2 0x99E SWAP3 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x937 JUMPI PUSH2 0x937 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x948 JUMPI PUSH2 0x948 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x970 JUMPI PUSH2 0x970 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x981 JUMPI PUSH2 0x981 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x17BF JUMP JUMPDEST POP PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x500 OR SWAP1 SSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND SWAP4 SWAP1 SWAP3 AND SWAP2 DUP8 SWAP2 PUSH32 0x223103F8EB52E5F43A75655152ACD882A605D70DF57A5C0FEFD30F516B1756D2 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA32 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xA3C DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0xA5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xA8C JUMPI PUSH2 0xA8C PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0xAC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0x200 PUSH2 0xFF00 NOT DUP3 AND OR SWAP1 SWAP2 SSTORE DUP4 MLOAD PUSH2 0x100 DUP2 ADD DUP6 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP5 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE SWAP1 SWAP3 PUSH2 0xB49 SWAP3 SWAP2 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x66F JUMPI PUSH2 0x66F PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD DUP5 SWAP2 ISZERO PUSH2 0xB77 JUMPI PUSH1 0x40 MLOAD PUSH4 0x41371593 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH2 0xB98 DUP2 PUSH1 0x2 ADD SLOAD PUSH2 0xB89 PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x180D JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH32 0x2226EBD23625A7938FB786DF2248BD171D2E6AD70CB2B654EA1BE830CA17224D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBF9 PUSH2 0x1872 JUMP JUMPDEST PUSH2 0xC07 CALLER PUSH1 0x35 SLOAD DUP6 DUP6 PUSH2 0x1891 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1A PUSH2 0x1BD3 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xC41 JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xC5D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xC6B JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xC89 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xCB3 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH2 0xCBC CALLER PUSH2 0x1BF7 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x1C08 JUMP JUMPDEST PUSH2 0xCCD DUP11 PUSH2 0x1C18 JUMP JUMPDEST PUSH2 0xCD6 DUP10 PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0xCDF DUP9 PUSH2 0x1760 JUMP JUMPDEST PUSH2 0xCE8 DUP8 PUSH2 0x1D0E JUMP JUMPDEST PUSH2 0xCF1 DUP7 PUSH2 0x1D8B JUMP JUMPDEST DUP4 ISZERO PUSH2 0xD37 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC0A DUP3 PUSH2 0x1E18 JUMP JUMPDEST PUSH2 0xD56 PUSH2 0x172E JUMP JUMPDEST PUSH2 0xD60 PUSH1 0x0 PUSH2 0x1EB5 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xD6A PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1D0E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD7E PUSH2 0x1F11 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDB9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xDC3 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0xDE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xE13 JUMPI PUSH2 0xE13 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0xE4D JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD SLOAD ISZERO PUSH2 0xE86 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH2 0xE86 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP5 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH2 0xF4E SWAP3 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xEE7 JUMPI PUSH2 0xEE7 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xEF8 JUMPI PUSH2 0xEF8 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF20 JUMPI PUSH2 0xF20 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF31 JUMPI PUSH2 0xF31 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x1F35 JUMP JUMPDEST POP PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x300 OR SWAP1 SSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH32 0xF0912EFB86EA1D65A17D64D48393CDB1CA0EA5220DD2BBE438621199D30955B7 SWAP1 PUSH1 0x20 ADD PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0xFB6 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1F70 JUMP JUMPDEST PUSH2 0xFC7 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1D8B JUMP JUMPDEST PUSH2 0xFD8 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1C18 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x100F JUMPI PUSH2 0x100F PUSH2 0x2AAF JUMP JUMPDEST EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1022 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x1056 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1074 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1098 SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST SWAP1 POP PUSH2 0x10A8 DUP4 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B9 PUSH2 0x1872 JUMP JUMPDEST PUSH2 0xC07 CALLER PUSH1 0x35 SLOAD PUSH2 0x10FF DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 PUSH2 0x1184 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11C7 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x11D3 DUP3 DUP3 PUSH2 0x2532 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD MLOAD PUSH1 0x40 DUP1 DUP8 ADD MLOAD DUP7 MLOAD SWAP4 DUP8 ADD MLOAD SWAP2 DUP8 ADD MLOAD SWAP5 SWAP6 SWAP3 SWAP5 SWAP1 SWAP4 SWAP3 PUSH2 0x1232 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6ABA5297 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x24 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC4 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP POP POP POP PUSH1 0x0 PUSH2 0x127D DUP5 PUSH1 0x0 DUP6 DUP14 DUP14 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12C4 DUP6 PUSH1 0x0 DUP6 DUP13 DUP13 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x3 SWAP1 DUP2 ADD DUP5 SWAP1 SSTORE DUP4 DUP4 MSTORE DUP2 DUP4 KECCAK256 ADD DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 POP DUP3 SWAP2 DUP5 SWAP2 PUSH32 0xFEC135A4CF8E5C6E13DEA23BE058BF03A8BF8F1F6FB0A021B0A5AEDDFBA81407 SWAP2 LOG3 SWAP1 SWAP11 SWAP1 SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x132C DUP4 PUSH2 0x2563 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0xE022923 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xE022923 SWAP1 PUSH2 0x1362 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1380 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A4 SWAP2 SWAP1 PUSH2 0x3036 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x34789D8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD SWAP1 DUP2 DUP2 EQ PUSH2 0x1407 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA24CFE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC07 DUP4 DUP4 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x1425 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0x1436 PUSH2 0x172E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1460 JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1EB5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1474 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x14A8 SWAP3 DUP11 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14EA SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x150F SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP1 PUSH2 0x25F4 AND JUMP JUMPDEST SWAP1 POP DUP5 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1520 JUMPI POP DUP1 DUP6 GT ISZERO JUMPDEST DUP6 DUP3 SWAP1 SWAP2 PUSH2 0x154A JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC6B7C41 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH1 0x0 PUSH2 0x155C DUP7 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x265B JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x157A SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x25F4 AND JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP3 SUB DUP4 ADD DUP2 MSTORE PUSH1 0x60 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x65C1A3FF PUSH1 0xE1 SHL SWAP1 SWAP3 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xCB8347FE SWAP2 PUSH2 0x15CE SWAP2 DUP13 SWAP2 SWAP1 PUSH1 0x64 ADD PUSH2 0x30F9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP3 SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16AA SWAP2 SWAP1 PUSH2 0x311D JUMP JUMPDEST PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10BA3930B739B332B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10A8 JUMPI POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1726 JUMPI PUSH2 0x1726 PUSH2 0x2AAF JUMP JUMPDEST EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH2 0x1737 PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD60 JUMPI CALLER PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST DUP1 DUP1 PUSH2 0x1782 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F4E05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x35 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x97896B9DA0F97F36BF3011570BCFF930069299DE4B1E89C9CB44909841CAC2F8 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17CA DUP3 PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x1805 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0x5 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x186E JUMPI PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1869 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xD60 CALLER PUSH1 0x35 SLOAD PUSH2 0x1881 PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x2671 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 SWAP1 SHL AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x34 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x54 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x18D8 DUP2 PUSH2 0xFE1 JUMP JUMPDEST ISZERO DUP2 SWAP1 PUSH2 0x18FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x124A23F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0xE022923 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE022923 SWAP1 PUSH2 0x192D SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x194B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196F SWAP2 SWAP1 PUSH2 0x3036 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x199D JUMPI PUSH1 0x40 MLOAD PUSH4 0x34789D8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x19A8 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x19DC SWAP3 DUP8 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A1E SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SUB PUSH2 0x1A43 JUMPI PUSH1 0x40 MLOAD PUSH4 0x307EFDB7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1A53 DUP4 DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x80 DUP2 ADD PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x37 DUP3 MSTORE DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR DUP4 SSTORE SWAP3 DUP6 ADD MLOAD PUSH1 0x1 DUP1 DUP5 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP5 AND OR SWAP1 SSTORE SWAP2 DUP4 ADD MLOAD PUSH1 0x2 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x3 DUP5 ADD SSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x4 DUP5 ADD DUP1 SLOAD SWAP2 SWAP4 SWAP1 SWAP3 PUSH1 0xFF NOT SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x1B23 JUMPI PUSH2 0x1B23 PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1B4D JUMPI PUSH2 0x1B4D PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x5 DUP3 ADD SSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x6 SWAP1 SWAP2 ADD SSTORE DUP4 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 DUP14 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP8 SWAP1 PUSH32 0xBFD6E5F61B4AA04B088A513A833705C7C703B907516C1DBFA66F93D1F725D33D SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 JUMP JUMPDEST PUSH2 0x1BFF PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x26D7 JUMP JUMPDEST PUSH2 0x1C10 PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0xD60 PUSH2 0x26DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x616BC441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x51744122301B50E919F4E3D22ADF8C53ABC92195B8C667EDA98C6EF20375672E SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x1CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC4411F11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x310462A9BF49FFF4A57910EC647C77CBF8AAF2F13394554AC6CDF14FC68DB7E6 SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST DUP1 PUSH3 0x7A120 PUSH4 0xFFFFFFFF DUP3 AND GT ISZERO PUSH2 0x1D42 JUMPI PUSH1 0x40 MLOAD PUSH4 0x432E6643 PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH1 0x36 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC573DC0F869F6A1D0A74FC7712A63BAABCB5567131D2D98005E163924EDDCBAB SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST DUP1 PUSH4 0xFFFFFFFF DUP2 AND PUSH3 0xF4240 LT ISZERO PUSH2 0x1DBF JUMPI PUSH1 0x40 MLOAD PUSH4 0x4E9374FB PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH1 0x36 DUP1 SLOAD PUSH8 0xFFFFFFFF00000000 NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH4 0xFFFFFFFF DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP3 DIV AND DUP2 MSTORE PUSH32 0x7EFAF01BEC3CDA8D104163BB466D01D7E16F68848301C7EB0749CFA59D680502 SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 SWAP5 DUP6 ADD MLOAD DUP6 MLOAD PUSH32 0x32DD026408194A0D7E54CC66A2AB6C856EFC55CFCD4DD258FDE5B1A55222BAA6 DUP2 DUP6 ADD MSTORE DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP4 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC2 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xE2 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP4 ADD DUP4 MSTORE PUSH2 0x102 SWAP1 SWAP2 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EBF PUSH2 0x1F11 JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP5 POP SWAP2 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F40 DUP3 PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x1805 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0x3 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH2 0x17F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F97 JUMPI PUSH1 0x40 MLOAD PUSH4 0x616BC441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x81DCB738DA3DABD5BB2ADBC7DD107FBBFCA936E9C8AECAB25F5B17A710A784C7 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2010 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1584A179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x561285E4 SWAP3 PUSH2 0x2044 SWAP3 DUP10 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2061 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2085 SWAP2 SWAP1 PUSH2 0x313F JUMP JUMPDEST PUSH1 0x0 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x33 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1EBB7C30 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2104 SWAP2 SWAP1 PUSH2 0x31BE JUMP JUMPDEST PUSH2 0x2114 SWAP1 PUSH4 0xFFFFFFFF AND DUP6 PUSH2 0x31DB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2122 DUP4 DUP4 PUSH2 0x27B1 JUMP JUMPDEST PUSH2 0x212C SWAP1 DUP7 PUSH2 0x2F4C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH2 0x2175 PUSH1 0x20 DUP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x217F SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x218A SWAP1 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST DUP3 MLOAD SWAP1 DUP2 EQ SWAP1 PUSH1 0x1 PUSH2 0x219D PUSH1 0x20 DUP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x21A7 SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x21B2 SWAP1 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x21DA JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x21F5 SWAP2 SWAP1 PUSH2 0x31F2 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2208 DUP7 PUSH1 0x60 PUSH2 0x27C1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2221 DUP8 PUSH2 0x221C PUSH1 0x20 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x27C1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2245 DUP9 PUSH1 0x20 PUSH2 0x2236 DUP2 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x2240 SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x2813 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE SWAP8 DUP9 MSTORE PUSH1 0x20 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP5 ADD MSTORE POP PUSH1 0xFF AND PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2289 DUP5 PUSH2 0x1320 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2295 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x22C9 SWAP3 DUP8 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x230B SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SUB PUSH2 0x2330 JUMPI PUSH1 0x40 MLOAD PUSH4 0x307EFDB7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x20 DUP1 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD DUP2 MLOAD SWAP4 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT DUP5 DUP4 SHL DUP2 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP2 DUP10 SWAP1 SHL SWAP1 SWAP2 AND PUSH1 0x94 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0xA8 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x2399 DUP2 PUSH2 0xFE1 JUMP JUMPDEST ISZERO DUP2 SWAP1 PUSH2 0x23BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x124A23F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x23CD DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP3 MSTORE DUP13 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE DUP4 DUP6 ADD DUP15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x80 DUP9 ADD DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0xA0 DUP11 ADD DUP2 SWAP1 MSTORE TIMESTAMP PUSH1 0xC0 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD DUP13 SWAP1 MSTORE DUP14 DUP6 MSTORE PUSH1 0x37 SWAP1 SWAP7 MSTORE SWAP9 SWAP1 SWAP3 KECCAK256 DUP8 MLOAD DUP2 SLOAD SWAP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR DUP3 SSTORE SWAP6 MLOAD PUSH1 0x1 DUP1 DUP4 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP10 AND SWAP2 SWAP1 SWAP8 AND OR SWAP1 SWAP7 SSTORE SWAP2 MLOAD DUP6 DUP3 ADD SSTORE SWAP1 MLOAD PUSH1 0x3 DUP6 ADD SSTORE SWAP5 MLOAD SWAP1 DUP4 ADD DUP1 SLOAD SWAP7 SWAP8 POP SWAP4 SWAP6 SWAP3 SWAP5 SWAP1 SWAP4 SWAP3 PUSH1 0xFF NOT AND SWAP2 SWAP1 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x248A JUMPI PUSH2 0x248A PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x24B4 JUMPI PUSH2 0x24B4 PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD SSTORE PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD SSTORE SWAP1 POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0xFB609A7FD5EB7947365D2F96D051030CAC33A27E3E4923F97EA4E03AAA2BCB14 DUP12 DUP12 PUSH1 0x40 ADD MLOAD DUP12 DUP8 PUSH1 0x40 MLOAD PUSH2 0x251E SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3220 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 EQ DUP1 ISZERO PUSH2 0x254D JUMPI POP DUP2 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0xC07 JUMPI POP POP PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MLOAD EQ ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE DUP3 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP1 DUP2 PUSH2 0x2593 DUP3 PUSH2 0x1E18 JUMP JUMPDEST SWAP1 POP PUSH2 0x25EC DUP2 DUP6 PUSH1 0x60 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x25D8 SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x41 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x2865 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2603 DUP4 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x2616 JUMPI POP PUSH2 0x2616 DUP3 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP4 DUP4 SWAP1 SWAP2 PUSH2 0x2640 JUMPI PUSH1 0x40 MLOAD PUSH4 0x768BF0EB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH3 0xF4240 SWAP1 POP PUSH2 0x2651 DUP4 DUP6 PUSH2 0x31DB JUMP JUMPDEST PUSH2 0xC07 SWAP2 SWAP1 PUSH2 0x3250 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x266A JUMPI DUP2 PUSH2 0xC07 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH2 0x1667 JUMP JUMPDEST PUSH2 0x26BA PUSH2 0x288F JUMP JUMPDEST PUSH2 0xD60 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1436 PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x26E7 PUSH2 0x26B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD87CD6EF79D4E2B95E15CE8ABF732DB51EC771F1CA2EDCCF22A46C729AC56472 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x171A7FA058648750A8C5AAE430F30DB8D0100EFC3A5E1B2E8054B1C1CE28B6B4 SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x44852B2A670ADE5407E78FB2863C51DE9FCB96542A07186FE3AEDA6BB8A116D PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH32 0xA070FFB1CD7409649BF77822CCE74495468E06DBFAEF09556838BF188679B9C2 PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x266A JUMPI DUP2 PUSH2 0xC07 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27CE PUSH1 0x20 DUP4 PUSH2 0x2F4C JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP2 LT ISZERO SWAP1 PUSH2 0x27E0 PUSH1 0x20 DUP6 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x2808 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2820 PUSH1 0x1 DUP4 PUSH2 0x2F4C JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP2 LT ISZERO SWAP1 PUSH2 0x2832 PUSH1 0x1 DUP6 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x285A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP ADD PUSH1 0x1 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2875 DUP7 DUP7 PUSH2 0x28A9 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x2885 DUP3 DUP3 PUSH2 0x28F6 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2899 PUSH2 0x1BD3 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x41 SUB PUSH2 0x28E3 JUMPI PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x28D5 DUP9 DUP3 DUP6 DUP6 PUSH2 0x29AF JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x28EF JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x0 SWAP2 POP PUSH1 0x2 SWAP1 JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x290A JUMPI PUSH2 0x290A PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x2913 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2927 JUMPI PUSH2 0x2927 PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x2945 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF645EEDF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2959 JUMPI PUSH2 0x2959 PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x297A JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCE698F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST PUSH1 0x3 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x298E JUMPI PUSH2 0x298E PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x186E JUMPI PUSH1 0x40 MLOAD PUSH4 0x35E2F383 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH16 0xA2A8918CA85BAFE22016D0B997E4DF60 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP5 GT ISZERO PUSH2 0x29E0 JUMPI POP PUSH1 0x0 SWAP2 POP PUSH1 0x3 SWAP1 POP DUP3 PUSH2 0x2A6A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP11 SWAP1 MSTORE PUSH1 0xFF DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A34 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2A60 JUMPI POP PUSH1 0x0 SWAP3 POP PUSH1 0x1 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x2A6A JUMP JUMPDEST SWAP3 POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x6 DUP2 LT PUSH2 0x2AD5 JUMPI PUSH2 0x2AD5 PUSH2 0x2AAF JUMP JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND DUP3 MSTORE DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD PUSH1 0x3 DUP7 LT PUSH2 0x2B10 JUMPI PUSH2 0x2B10 PUSH2 0x2AAF JUMP JUMPDEST DUP6 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x2B23 PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x2AC5 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xE0 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2B80 DUP2 PUSH2 0x2B4D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2BCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x2BD8 DUP2 PUSH2 0x2B4D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x2BE8 DUP2 PUSH2 0x2B8E JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x2BFF DUP2 PUSH2 0x2BA3 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x2C0F DUP2 PUSH2 0x2BA3 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x100 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x2CC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2CFA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 SWAP1 DUP2 MSTORE DUP5 CALLDATALOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE SWAP4 DUP5 ADD CALLDATALOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2B4D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2D9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2DCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DD7 DUP6 DUP3 DUP7 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2DF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E1B DUP8 DUP3 DUP9 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E46 DUP8 DUP3 DUP9 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6C PUSH2 0x2C1D JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE SWAP1 POP PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2ECB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC07 DUP4 DUP4 PUSH2 0x2E52 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x180 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2EE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2EF3 DUP5 DUP5 PUSH2 0x2E52 JUMP JUMPDEST SWAP2 POP PUSH2 0x2F02 DUP5 PUSH1 0xC0 DUP6 ADD PUSH2 0x2E52 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xC0A DUP3 DUP5 PUSH2 0x2AC5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xC0A JUMPI PUSH2 0xC0A PUSH2 0x2F36 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2F84 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2F84 DUP2 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x2FA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2FB3 PUSH2 0x2C53 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x2FD7 PUSH1 0x60 DUP6 ADD PUSH2 0x2F79 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2FE8 PUSH1 0x80 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2FF9 PUSH1 0xA0 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x300A PUSH1 0xC0 DUP6 ADD PUSH2 0x2F79 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x301B PUSH1 0xE0 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x304A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x3055 PUSH2 0x2C84 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x3060 DUP2 PUSH2 0x2B4D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xE0 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x30D9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x30BD JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x25EC SWAP1 DUP4 ADD DUP5 PUSH2 0x30B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x312F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x3152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3184 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 SWAP1 DUP2 MSTORE DUP5 MLOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD MLOAD SWAP1 DUP4 ADD MSTORE DUP5 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x10A8 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xC0A JUMPI PUSH2 0xC0A PUSH2 0x2F36 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 SWAP1 SWAP4 ADD MLOAD SWAP1 SWAP5 SWAP3 SWAP4 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x323F PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x326D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xFC MLOAD 0xA7 SWAP3 SELFBALANCE 0xA9 0xED CALLCODE PUSH12 0xDAF727EA63DE7398A97BC3A2 PUSH27 0xD1E74C0FF8BF34282E64736F6C634300081B003300000000000000 ", + "sourceMap": "2429:26817:48:-:0;;;3950:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3997:10;-1:-1:-1;;;;;4295:24:33;;4287:81;;;;-1:-1:-1;;;4287:81:33;;510:2:62;4287:81:33;;;492:21:62;549:2;529:18;;;522:30;-1:-1:-1;;;568:18:62;;;561:40;618:18;;4287:81:33;;;;;;;;;-1:-1:-1;;;;;4379:42:33;;;;4457:40;;;;;;;;;;;;-1:-1:-1;;;4457:40:33;;;;;;:26;:40::i;:::-;-1:-1:-1;;;;;4431:67:33;;;4540:37;;;;;;;;;;;;-1:-1:-1;;;4540:37:33;;;;;;:26;:37::i;:::-;-1:-1:-1;;;;;4508:70:33;;;4620:43;;;;;;;;;;;;-1:-1:-1;;;4620:43:33;;;;;;:26;:43::i;:::-;-1:-1:-1;;;;;4588:76:33;;;4714:44;;;;;;;;;;;;-1:-1:-1;;;4714:44:33;;;;;;:26;:44::i;:::-;-1:-1:-1;;;;;4674:85:33;;;4805:42;;;;;;;;;;;;-1:-1:-1;;;4805:42:33;;;;;;:26;:42::i;:::-;-1:-1:-1;;;;;4769:79:33;;;4898:44;;;;;;;;;;;;-1:-1:-1;;;4898:44:33;;;;;;:26;:44::i;:::-;-1:-1:-1;;;;;4858:85:33;;;4989:47;;;;;;;;;;;;-1:-1:-1;;;4989:47:33;;;;;;:26;:47::i;:::-;-1:-1:-1;;;;;4953:84:33;;;5084:45;;;;;;;;;;;;-1:-1:-1;;;5084:45:33;;;;;;:26;:45::i;:::-;-1:-1:-1;;;;;5047:83:33;;;5167:38;;;;;;;;;;;;-1:-1:-1;;;5167:38:33;;;;;;:26;:38::i;:::-;-1:-1:-1;;;;;5140:66:33;;;;;;;5420:16;;5303:13;;5269:11;;5339:14;;5376:21;;5459:19;;5501:21;;5545:19;;5587:17;;5222:430;;;;;;;;;;;;;;;;;;;5587:17;;-1:-1:-1;;;;;980:32:62;;;962:51;;1049:32;;;1044:2;1029:18;;1022:60;1118:32;;;1113:2;1098:18;;1091:60;1187:32;;;1182:2;1167:18;;1160:60;1257:32;;1251:3;1236:19;;1229:61;1327:32;;1000:3;1306:19;;1299:61;1397:32;;;1391:3;1376:19;;1369:61;949:3;934:19;;647:789;5222:430:33;;;;;;;;-1:-1:-1;4019:22:48::1;:20;:22::i;:::-;3950:98:::0;2429:26817;;7673:326:33;7759:7;7778:23;7804:16;;-1:-1:-1;;;;;7804:33:33;;7848:13;7838:24;;;;;;7804:59;;;;;;;;;;;;;1587:25:62;;1575:2;1560:18;;1441:177;7804:59:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7778:85;-1:-1:-1;7945:13:33;-1:-1:-1;;;;;7881:29:33;;7873:87;;;;-1:-1:-1;;;7873:87:33;;;;;;;;:::i;:::-;-1:-1:-1;7977:15:33;7673:326;-1:-1:-1;;7673:326:33:o;7711:422:35:-;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:35;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:35;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:35;-1:-1:-1;;;;;8035:33:35;;;;;8087:29;;2297:50:62;;;8087:29:35;;2285:2:62;2270:18;8087:29:35;;;;;;;7981:146;7760:373;7711:422::o;14:290:62:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:62;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:62:o;1623:525::-;1770:2;1759:9;1752:21;1733:4;1802:6;1796:13;1845:6;1840:2;1829:9;1825:18;1818:34;1870:1;1880:140;1894:6;1891:1;1888:13;1880:140;;;2005:2;1989:14;;;1985:23;;1979:30;1974:2;1955:17;;;1951:26;1944:66;1909:10;1880:140;;;1884:3;2069:1;2064:2;2055:6;2044:9;2040:22;2036:31;2029:42;2139:2;2132;2128:7;2123:2;2115:6;2111:15;2107:29;2096:9;2092:45;2088:54;2080:62;;;1623:525;;;;:::o;2153:200::-;2429:26817:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@MAX_FISHERMAN_REWARD_CUT_8018": { + "entryPoint": null, + "id": 8018, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@__AttestationManager_init_13125": { + "entryPoint": 7176, + "id": 13125, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@__AttestationManager_init_unchained_13150": { + "entryPoint": 9951, + "id": 13150, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@__Ownable_init_4708": { + "entryPoint": 7159, + "id": 4708, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@__Ownable_init_unchained_4735": { + "entryPoint": 9943, + "id": 4735, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_cancelDisputeInConflict_9118": { + "entryPoint": 6079, + "id": 9118, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_checkInitializing_5024": { + "entryPoint": 9906, + "id": 5024, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_checkOwner_4776": { + "entryPoint": 5934, + "id": 4776, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_createIndexingDisputeWithAllocation_9040": { + "entryPoint": 6289, + "id": 9040, + "parameterSlots": 4, + "returnSlots": 1 + }, + "@_createQueryDisputeWithAttestation_8913": { + "entryPoint": 8829, + "id": 8913, + "parameterSlots": 4, + "returnSlots": 1 + }, + "@_drawDisputeInConflict_9079": { + "entryPoint": 7989, + "id": 9079, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_encodeReceipt_13225": { + "entryPoint": 7704, + "id": 13225, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_getInitializableStorage_5101": { + "entryPoint": 7123, + "id": 5101, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_getOwnableStorage_4679": { + "entryPoint": 7953, + "id": 4679, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_getStakeSnapshot_9437": { + "entryPoint": 8197, + "id": 9437, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@_graphStaking_4540": { + "entryPoint": 8161, + "id": 4540, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_graphToken_4530": { + "entryPoint": 5644, + "id": 4530, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_isDisputeInConflict_9390": { + "entryPoint": 5863, + "id": 9390, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_isInitializing_5092": { + "entryPoint": 10383, + "id": 5092, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_msgSender_5130": { + "entryPoint": null, + "id": 5130, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_pullFishermanDeposit_9131": { + "entryPoint": 6258, + "id": 9131, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_recoverSigner_13195": { + "entryPoint": 9571, + "id": 13195, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_setArbitrator_9238": { + "entryPoint": 7192, + "id": 9238, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_setDisputeDeposit_9285": { + "entryPoint": 5984, + "id": 9285, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_setDisputePeriod_9261": { + "entryPoint": 7305, + "id": 9261, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_setFishermanRewardCut_9309": { + "entryPoint": 7438, + "id": 9309, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_setMaxSlashingCut_9334": { + "entryPoint": 7563, + "id": 9334, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_setSubgraphService_9362": { + "entryPoint": 8048, + "id": 9362, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_slashIndexer_9212": { + "entryPoint": 5225, + "id": 9212, + "parameterSlots": 3, + "returnSlots": 1 + }, + "@_throwError_6729": { + "entryPoint": 10486, + "id": 6729, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_toBytes32_11919": { + "entryPoint": 10177, + "id": 11919, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@_toUint8_11886": { + "entryPoint": 10259, + "id": 11886, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@_transferOwnership_4847": { + "entryPoint": 7861, + "id": 4847, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@acceptDispute_8373": { + "entryPoint": 1224, + "id": 8373, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@arbitrator_9451": { + "entryPoint": null, + "id": 9451, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@areConflictingAttestations_8670": { + "entryPoint": 5137, + "id": 8670, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@areConflicting_11783": { + "entryPoint": 9522, + "id": 11783, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@burnTokens_599": { + "entryPoint": 6157, + "id": 599, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@cancelDispute_8500": { + "entryPoint": 1887, + "id": 8500, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@createIndexingDispute_8174": { + "entryPoint": 3055, + "id": 8174, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@createQueryDisputeConflict_8300": { + "entryPoint": 4411, + "id": 8300, + "parameterSlots": 4, + "returnSlots": 2 + }, + "@createQueryDispute_8198": { + "entryPoint": 4271, + "id": 8198, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@disputeDeposit_9457": { + "entryPoint": null, + "id": 9457, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@disputePeriod_9454": { + "entryPoint": null, + "id": 9454, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@disputes_9469": { + "entryPoint": null, + "id": 9469, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@drawDispute_8430": { + "entryPoint": 3470, + "id": 8430, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@encodeReceipt_8599": { + "entryPoint": 3395, + "id": 8599, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@fishermanRewardCut_9460": { + "entryPoint": null, + "id": 9460, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@getAttestationIndexer_8783": { + "entryPoint": 4896, + "id": 8783, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@getDisputePeriod_8619": { + "entryPoint": null, + "id": 8619, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@getStakeSnapshot_8650": { + "entryPoint": 4119, + "id": 8650, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@getVerifierCut_8609": { + "entryPoint": null, + "id": 8609, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@initialize_8151": { + "entryPoint": 3088, + "id": 8151, + "parameterSlots": 5, + "returnSlots": 0 + }, + "@isDisputeCreated_8801": { + "entryPoint": 4065, + "id": 8801, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@isValidPPM_4261": { + "entryPoint": null, + "id": 4261, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@maxSlashingCut_9463": { + "entryPoint": null, + "id": 9463, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@min_4146": { + "entryPoint": 10161, + "id": 4146, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@min_7009": { + "entryPoint": 9819, + "id": 7009, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@mulPPM_4219": { + "entryPoint": 9716, + "id": 4219, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@owner_4759": { + "entryPoint": 3443, + "id": 4759, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@parse_11853": { + "entryPoint": 8502, + "id": 11853, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@pullTokens_552": { + "entryPoint": 9841, + "id": 552, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@pushTokens_578": { + "entryPoint": 5680, + "id": 578, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@recover_6486": { + "entryPoint": 10341, + "id": 6486, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@rejectDispute_8727": { + "entryPoint": 2567, + "id": 8727, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@renounceOwnership_4790": { + "entryPoint": 3406, + "id": 4790, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@setArbitrator_8514": { + "entryPoint": 4048, + "id": 8514, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setDisputeDeposit_8542": { + "entryPoint": 1867, + "id": 8542, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setDisputePeriod_8528": { + "entryPoint": 5149, + "id": 8528, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setFishermanRewardCut_8556": { + "entryPoint": 3426, + "id": 8556, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setMaxSlashingCut_8570": { + "entryPoint": 4031, + "id": 8570, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setSubgraphService_8584": { + "entryPoint": 4014, + "id": 8584, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@subgraphService_9448": { + "entryPoint": null, + "id": 9448, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@transferOwnership_4818": { + "entryPoint": 5166, + "id": 4818, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@tryRecover_6456": { + "entryPoint": 10409, + "id": 6456, + "parameterSlots": 2, + "returnSlots": 3 + }, + "@tryRecover_6644": { + "entryPoint": 10671, + "id": 6644, + "parameterSlots": 4, + "returnSlots": 3 + }, + "abi_decode_bytes_calldata": { + "entryPoint": 11610, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_struct_State": { + "entryPoint": 11858, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address": { + "entryPoint": 11581, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_addresst_bytes32": { + "entryPoint": 11106, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_addresst_uint64t_uint256t_uint32t_uint32": { + "entryPoint": 11189, + "id": null, + "parameterSlots": 2, + "returnSlots": 5 + }, + "abi_decode_tuple_t_bool_fromMemory": { + "entryPoint": 12573, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_bytes32": { + "entryPoint": 10902, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_bytes32t_bytes32t_bytes32_fromMemory": { + "entryPoint": 12786, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_bytes32t_uint256": { + "entryPoint": 10868, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_bytes_calldata_ptr": { + "entryPoint": 11682, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_bytes_calldata_ptrt_bytes_calldata_ptr": { + "entryPoint": 11747, + "id": null, + "parameterSlots": 2, + "returnSlots": 4 + }, + "abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory": { + "entryPoint": 12607, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory": { + "entryPoint": 12180, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_struct$_Receipt_$11685_memory_ptr": { + "entryPoint": 11445, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_struct$_State_$11307_memory_ptr_fromMemory": { + "entryPoint": 12342, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_struct$_State_$11699_memory_ptr": { + "entryPoint": 11961, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_struct$_State_$11699_memory_ptrt_struct$_State_$11699_memory_ptr": { + "entryPoint": 11989, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_uint256": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint32": { + "entryPoint": 11552, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint32_fromMemory": { + "entryPoint": 12734, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint64": { + "entryPoint": 12043, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_uint32_fromMemory": { + "entryPoint": 12153, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_uint64_fromMemory": { + "entryPoint": 12169, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_bytes": { + "entryPoint": 12467, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_enum_DisputeStatus": { + "entryPoint": 10949, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_packed_t_address_t_bytes32__to_t_address_t_bytes32__nonPadded_inplace_fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__nonPadded_inplace_fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 6, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_bytes32_t_bytes32_t_uint8__to_t_bytes32_t_bytes32_t_uint8__nonPadded_inplace_fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { + "entryPoint": 12127, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes32_t_enum$_DisputeType_$10710_t_enum$_DisputeStatus_$10718_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_bytes32_t_uint8_t_uint8_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": 10969, + "id": null, + "parameterSlots": 9, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 12537, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 7, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 7, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_contract$_ISubgraphService_$11280__to_t_address__fromStack_reversed": { + "entryPoint": 11065, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_enum$_DisputeStatus_$10718__to_t_uint8__fromStack_reversed": { + "entryPoint": 12072, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_address_t_bytes32_t_uint256__to_t_uint256_t_address_t_bytes32_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__to_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__fromStack_reversed": { + "entryPoint": 12832, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_memory": { + "entryPoint": 11347, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "allocate_memory_2163": { + "entryPoint": 11293, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "allocate_memory_2167": { + "entryPoint": 11396, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "checked_add_t_uint256": { + "entryPoint": 12108, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_div_t_uint256": { + "entryPoint": 12880, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_mul_t_uint256": { + "entryPoint": 12763, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 12086, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x21": { + "entryPoint": 10927, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_address": { + "entryPoint": 11085, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_uint32": { + "entryPoint": 11171, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_uint64": { + "entryPoint": 11150, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:23206:62", + "nodeType": "YulBlock", + "src": "0:23206:62", + "statements": [ + { + "nativeSrc": "6:3:62", + "nodeType": "YulBlock", + "src": "6:3:62", + "statements": [] + }, + { + "body": { + "nativeSrc": "101:259:62", + "nodeType": "YulBlock", + "src": "101:259:62", + "statements": [ + { + "body": { + "nativeSrc": "147:16:62", + "nodeType": "YulBlock", + "src": "147:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "156:1:62", + "nodeType": "YulLiteral", + "src": "156:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "159:1:62", + "nodeType": "YulLiteral", + "src": "159:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "149:6:62", + "nodeType": "YulIdentifier", + "src": "149:6:62" + }, + "nativeSrc": "149:12:62", + "nodeType": "YulFunctionCall", + "src": "149:12:62" + }, + "nativeSrc": "149:12:62", + "nodeType": "YulExpressionStatement", + "src": "149:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "122:7:62", + "nodeType": "YulIdentifier", + "src": "122:7:62" + }, + { + "name": "headStart", + "nativeSrc": "131:9:62", + "nodeType": "YulIdentifier", + "src": "131:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "118:3:62", + "nodeType": "YulIdentifier", + "src": "118:3:62" + }, + "nativeSrc": "118:23:62", + "nodeType": "YulFunctionCall", + "src": "118:23:62" + }, + { + "kind": "number", + "nativeSrc": "143:2:62", + "nodeType": "YulLiteral", + "src": "143:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "114:3:62", + "nodeType": "YulIdentifier", + "src": "114:3:62" + }, + "nativeSrc": "114:32:62", + "nodeType": "YulFunctionCall", + "src": "114:32:62" + }, + "nativeSrc": "111:52:62", + "nodeType": "YulIf", + "src": "111:52:62" + }, + { + "nativeSrc": "172:14:62", + "nodeType": "YulVariableDeclaration", + "src": "172:14:62", + "value": { + "kind": "number", + "nativeSrc": "185:1:62", + "nodeType": "YulLiteral", + "src": "185:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "176:5:62", + "nodeType": "YulTypedName", + "src": "176:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "195:32:62", + "nodeType": "YulAssignment", + "src": "195:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "217:9:62", + "nodeType": "YulIdentifier", + "src": "217:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "204:12:62", + "nodeType": "YulIdentifier", + "src": "204:12:62" + }, + "nativeSrc": "204:23:62", + "nodeType": "YulFunctionCall", + "src": "204:23:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "195:5:62", + "nodeType": "YulIdentifier", + "src": "195:5:62" + } + ] + }, + { + "nativeSrc": "236:15:62", + "nodeType": "YulAssignment", + "src": "236:15:62", + "value": { + "name": "value", + "nativeSrc": "246:5:62", + "nodeType": "YulIdentifier", + "src": "246:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "236:6:62", + "nodeType": "YulIdentifier", + "src": "236:6:62" + } + ] + }, + { + "nativeSrc": "260:16:62", + "nodeType": "YulVariableDeclaration", + "src": "260:16:62", + "value": { + "kind": "number", + "nativeSrc": "275:1:62", + "nodeType": "YulLiteral", + "src": "275:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "264:7:62", + "nodeType": "YulTypedName", + "src": "264:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "285:43:62", + "nodeType": "YulAssignment", + "src": "285:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "313:9:62", + "nodeType": "YulIdentifier", + "src": "313:9:62" + }, + { + "kind": "number", + "nativeSrc": "324:2:62", + "nodeType": "YulLiteral", + "src": "324:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "309:3:62", + "nodeType": "YulIdentifier", + "src": "309:3:62" + }, + "nativeSrc": "309:18:62", + "nodeType": "YulFunctionCall", + "src": "309:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "296:12:62", + "nodeType": "YulIdentifier", + "src": "296:12:62" + }, + "nativeSrc": "296:32:62", + "nodeType": "YulFunctionCall", + "src": "296:32:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "285:7:62", + "nodeType": "YulIdentifier", + "src": "285:7:62" + } + ] + }, + { + "nativeSrc": "337:17:62", + "nodeType": "YulAssignment", + "src": "337:17:62", + "value": { + "name": "value_1", + "nativeSrc": "347:7:62", + "nodeType": "YulIdentifier", + "src": "347:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "337:6:62", + "nodeType": "YulIdentifier", + "src": "337:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32t_uint256", + "nativeSrc": "14:346:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "59:9:62", + "nodeType": "YulTypedName", + "src": "59:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "70:7:62", + "nodeType": "YulTypedName", + "src": "70:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "82:6:62", + "nodeType": "YulTypedName", + "src": "82:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "90:6:62", + "nodeType": "YulTypedName", + "src": "90:6:62", + "type": "" + } + ], + "src": "14:346:62" + }, + { + "body": { + "nativeSrc": "464:93:62", + "nodeType": "YulBlock", + "src": "464:93:62", + "statements": [ + { + "nativeSrc": "474:26:62", + "nodeType": "YulAssignment", + "src": "474:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "486:9:62", + "nodeType": "YulIdentifier", + "src": "486:9:62" + }, + { + "kind": "number", + "nativeSrc": "497:2:62", + "nodeType": "YulLiteral", + "src": "497:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "482:3:62", + "nodeType": "YulIdentifier", + "src": "482:3:62" + }, + "nativeSrc": "482:18:62", + "nodeType": "YulFunctionCall", + "src": "482:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "474:4:62", + "nodeType": "YulIdentifier", + "src": "474:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "516:9:62", + "nodeType": "YulIdentifier", + "src": "516:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "531:6:62", + "nodeType": "YulIdentifier", + "src": "531:6:62" + }, + { + "kind": "number", + "nativeSrc": "539:10:62", + "nodeType": "YulLiteral", + "src": "539:10:62", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "527:3:62", + "nodeType": "YulIdentifier", + "src": "527:3:62" + }, + "nativeSrc": "527:23:62", + "nodeType": "YulFunctionCall", + "src": "527:23:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "509:6:62", + "nodeType": "YulIdentifier", + "src": "509:6:62" + }, + "nativeSrc": "509:42:62", + "nodeType": "YulFunctionCall", + "src": "509:42:62" + }, + "nativeSrc": "509:42:62", + "nodeType": "YulExpressionStatement", + "src": "509:42:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed", + "nativeSrc": "365:192:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "433:9:62", + "nodeType": "YulTypedName", + "src": "433:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "444:6:62", + "nodeType": "YulTypedName", + "src": "444:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "455:4:62", + "nodeType": "YulTypedName", + "src": "455:4:62", + "type": "" + } + ], + "src": "365:192:62" + }, + { + "body": { + "nativeSrc": "632:156:62", + "nodeType": "YulBlock", + "src": "632:156:62", + "statements": [ + { + "body": { + "nativeSrc": "678:16:62", + "nodeType": "YulBlock", + "src": "678:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "687:1:62", + "nodeType": "YulLiteral", + "src": "687:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "690:1:62", + "nodeType": "YulLiteral", + "src": "690:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "680:6:62", + "nodeType": "YulIdentifier", + "src": "680:6:62" + }, + "nativeSrc": "680:12:62", + "nodeType": "YulFunctionCall", + "src": "680:12:62" + }, + "nativeSrc": "680:12:62", + "nodeType": "YulExpressionStatement", + "src": "680:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "653:7:62", + "nodeType": "YulIdentifier", + "src": "653:7:62" + }, + { + "name": "headStart", + "nativeSrc": "662:9:62", + "nodeType": "YulIdentifier", + "src": "662:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "649:3:62", + "nodeType": "YulIdentifier", + "src": "649:3:62" + }, + "nativeSrc": "649:23:62", + "nodeType": "YulFunctionCall", + "src": "649:23:62" + }, + { + "kind": "number", + "nativeSrc": "674:2:62", + "nodeType": "YulLiteral", + "src": "674:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "645:3:62", + "nodeType": "YulIdentifier", + "src": "645:3:62" + }, + "nativeSrc": "645:32:62", + "nodeType": "YulFunctionCall", + "src": "645:32:62" + }, + "nativeSrc": "642:52:62", + "nodeType": "YulIf", + "src": "642:52:62" + }, + { + "nativeSrc": "703:14:62", + "nodeType": "YulVariableDeclaration", + "src": "703:14:62", + "value": { + "kind": "number", + "nativeSrc": "716:1:62", + "nodeType": "YulLiteral", + "src": "716:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "707:5:62", + "nodeType": "YulTypedName", + "src": "707:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "726:32:62", + "nodeType": "YulAssignment", + "src": "726:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "748:9:62", + "nodeType": "YulIdentifier", + "src": "748:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "735:12:62", + "nodeType": "YulIdentifier", + "src": "735:12:62" + }, + "nativeSrc": "735:23:62", + "nodeType": "YulFunctionCall", + "src": "735:23:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "726:5:62", + "nodeType": "YulIdentifier", + "src": "726:5:62" + } + ] + }, + { + "nativeSrc": "767:15:62", + "nodeType": "YulAssignment", + "src": "767:15:62", + "value": { + "name": "value", + "nativeSrc": "777:5:62", + "nodeType": "YulIdentifier", + "src": "777:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "767:6:62", + "nodeType": "YulIdentifier", + "src": "767:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32", + "nativeSrc": "562:226:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "598:9:62", + "nodeType": "YulTypedName", + "src": "598:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "609:7:62", + "nodeType": "YulTypedName", + "src": "609:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "621:6:62", + "nodeType": "YulTypedName", + "src": "621:6:62", + "type": "" + } + ], + "src": "562:226:62" + }, + { + "body": { + "nativeSrc": "825:95:62", + "nodeType": "YulBlock", + "src": "825:95:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "842:1:62", + "nodeType": "YulLiteral", + "src": "842:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "849:3:62", + "nodeType": "YulLiteral", + "src": "849:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "854:10:62", + "nodeType": "YulLiteral", + "src": "854:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "845:3:62", + "nodeType": "YulIdentifier", + "src": "845:3:62" + }, + "nativeSrc": "845:20:62", + "nodeType": "YulFunctionCall", + "src": "845:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "835:6:62", + "nodeType": "YulIdentifier", + "src": "835:6:62" + }, + "nativeSrc": "835:31:62", + "nodeType": "YulFunctionCall", + "src": "835:31:62" + }, + "nativeSrc": "835:31:62", + "nodeType": "YulExpressionStatement", + "src": "835:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "882:1:62", + "nodeType": "YulLiteral", + "src": "882:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "885:4:62", + "nodeType": "YulLiteral", + "src": "885:4:62", + "type": "", + "value": "0x21" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "875:6:62", + "nodeType": "YulIdentifier", + "src": "875:6:62" + }, + "nativeSrc": "875:15:62", + "nodeType": "YulFunctionCall", + "src": "875:15:62" + }, + "nativeSrc": "875:15:62", + "nodeType": "YulExpressionStatement", + "src": "875:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "906:1:62", + "nodeType": "YulLiteral", + "src": "906:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "909:4:62", + "nodeType": "YulLiteral", + "src": "909:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "899:6:62", + "nodeType": "YulIdentifier", + "src": "899:6:62" + }, + "nativeSrc": "899:15:62", + "nodeType": "YulFunctionCall", + "src": "899:15:62" + }, + "nativeSrc": "899:15:62", + "nodeType": "YulExpressionStatement", + "src": "899:15:62" + } + ] + }, + "name": "panic_error_0x21", + "nativeSrc": "793:127:62", + "nodeType": "YulFunctionDefinition", + "src": "793:127:62" + }, + { + "body": { + "nativeSrc": "980:89:62", + "nodeType": "YulBlock", + "src": "980:89:62", + "statements": [ + { + "body": { + "nativeSrc": "1014:22:62", + "nodeType": "YulBlock", + "src": "1014:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x21", + "nativeSrc": "1016:16:62", + "nodeType": "YulIdentifier", + "src": "1016:16:62" + }, + "nativeSrc": "1016:18:62", + "nodeType": "YulFunctionCall", + "src": "1016:18:62" + }, + "nativeSrc": "1016:18:62", + "nodeType": "YulExpressionStatement", + "src": "1016:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1003:5:62", + "nodeType": "YulIdentifier", + "src": "1003:5:62" + }, + { + "kind": "number", + "nativeSrc": "1010:1:62", + "nodeType": "YulLiteral", + "src": "1010:1:62", + "type": "", + "value": "6" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "1000:2:62", + "nodeType": "YulIdentifier", + "src": "1000:2:62" + }, + "nativeSrc": "1000:12:62", + "nodeType": "YulFunctionCall", + "src": "1000:12:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "993:6:62", + "nodeType": "YulIdentifier", + "src": "993:6:62" + }, + "nativeSrc": "993:20:62", + "nodeType": "YulFunctionCall", + "src": "993:20:62" + }, + "nativeSrc": "990:46:62", + "nodeType": "YulIf", + "src": "990:46:62" + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "1052:3:62", + "nodeType": "YulIdentifier", + "src": "1052:3:62" + }, + { + "name": "value", + "nativeSrc": "1057:5:62", + "nodeType": "YulIdentifier", + "src": "1057:5:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1045:6:62", + "nodeType": "YulIdentifier", + "src": "1045:6:62" + }, + "nativeSrc": "1045:18:62", + "nodeType": "YulFunctionCall", + "src": "1045:18:62" + }, + "nativeSrc": "1045:18:62", + "nodeType": "YulExpressionStatement", + "src": "1045:18:62" + } + ] + }, + "name": "abi_encode_enum_DisputeStatus", + "nativeSrc": "925:144:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "964:5:62", + "nodeType": "YulTypedName", + "src": "964:5:62", + "type": "" + }, + { + "name": "pos", + "nativeSrc": "971:3:62", + "nodeType": "YulTypedName", + "src": "971:3:62", + "type": "" + } + ], + "src": "925:144:62" + }, + { + "body": { + "nativeSrc": "1403:513:62", + "nodeType": "YulBlock", + "src": "1403:513:62", + "statements": [ + { + "nativeSrc": "1413:27:62", + "nodeType": "YulAssignment", + "src": "1413:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1425:9:62", + "nodeType": "YulIdentifier", + "src": "1425:9:62" + }, + { + "kind": "number", + "nativeSrc": "1436:3:62", + "nodeType": "YulLiteral", + "src": "1436:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1421:3:62", + "nodeType": "YulIdentifier", + "src": "1421:3:62" + }, + "nativeSrc": "1421:19:62", + "nodeType": "YulFunctionCall", + "src": "1421:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1413:4:62", + "nodeType": "YulIdentifier", + "src": "1413:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1456:9:62", + "nodeType": "YulIdentifier", + "src": "1456:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1471:6:62", + "nodeType": "YulIdentifier", + "src": "1471:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1487:3:62", + "nodeType": "YulLiteral", + "src": "1487:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1492:1:62", + "nodeType": "YulLiteral", + "src": "1492:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1483:3:62", + "nodeType": "YulIdentifier", + "src": "1483:3:62" + }, + "nativeSrc": "1483:11:62", + "nodeType": "YulFunctionCall", + "src": "1483:11:62" + }, + { + "kind": "number", + "nativeSrc": "1496:1:62", + "nodeType": "YulLiteral", + "src": "1496:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1479:3:62", + "nodeType": "YulIdentifier", + "src": "1479:3:62" + }, + "nativeSrc": "1479:19:62", + "nodeType": "YulFunctionCall", + "src": "1479:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1467:3:62", + "nodeType": "YulIdentifier", + "src": "1467:3:62" + }, + "nativeSrc": "1467:32:62", + "nodeType": "YulFunctionCall", + "src": "1467:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1449:6:62", + "nodeType": "YulIdentifier", + "src": "1449:6:62" + }, + "nativeSrc": "1449:51:62", + "nodeType": "YulFunctionCall", + "src": "1449:51:62" + }, + "nativeSrc": "1449:51:62", + "nodeType": "YulExpressionStatement", + "src": "1449:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1520:9:62", + "nodeType": "YulIdentifier", + "src": "1520:9:62" + }, + { + "kind": "number", + "nativeSrc": "1531:2:62", + "nodeType": "YulLiteral", + "src": "1531:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1516:3:62", + "nodeType": "YulIdentifier", + "src": "1516:3:62" + }, + "nativeSrc": "1516:18:62", + "nodeType": "YulFunctionCall", + "src": "1516:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "1540:6:62", + "nodeType": "YulIdentifier", + "src": "1540:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1556:3:62", + "nodeType": "YulLiteral", + "src": "1556:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1561:1:62", + "nodeType": "YulLiteral", + "src": "1561:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1552:3:62", + "nodeType": "YulIdentifier", + "src": "1552:3:62" + }, + "nativeSrc": "1552:11:62", + "nodeType": "YulFunctionCall", + "src": "1552:11:62" + }, + { + "kind": "number", + "nativeSrc": "1565:1:62", + "nodeType": "YulLiteral", + "src": "1565:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1548:3:62", + "nodeType": "YulIdentifier", + "src": "1548:3:62" + }, + "nativeSrc": "1548:19:62", + "nodeType": "YulFunctionCall", + "src": "1548:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1536:3:62", + "nodeType": "YulIdentifier", + "src": "1536:3:62" + }, + "nativeSrc": "1536:32:62", + "nodeType": "YulFunctionCall", + "src": "1536:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1509:6:62", + "nodeType": "YulIdentifier", + "src": "1509:6:62" + }, + "nativeSrc": "1509:60:62", + "nodeType": "YulFunctionCall", + "src": "1509:60:62" + }, + "nativeSrc": "1509:60:62", + "nodeType": "YulExpressionStatement", + "src": "1509:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1589:9:62", + "nodeType": "YulIdentifier", + "src": "1589:9:62" + }, + { + "kind": "number", + "nativeSrc": "1600:2:62", + "nodeType": "YulLiteral", + "src": "1600:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1585:3:62", + "nodeType": "YulIdentifier", + "src": "1585:3:62" + }, + "nativeSrc": "1585:18:62", + "nodeType": "YulFunctionCall", + "src": "1585:18:62" + }, + { + "name": "value2", + "nativeSrc": "1605:6:62", + "nodeType": "YulIdentifier", + "src": "1605:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1578:6:62", + "nodeType": "YulIdentifier", + "src": "1578:6:62" + }, + "nativeSrc": "1578:34:62", + "nodeType": "YulFunctionCall", + "src": "1578:34:62" + }, + "nativeSrc": "1578:34:62", + "nodeType": "YulExpressionStatement", + "src": "1578:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1632:9:62", + "nodeType": "YulIdentifier", + "src": "1632:9:62" + }, + { + "kind": "number", + "nativeSrc": "1643:2:62", + "nodeType": "YulLiteral", + "src": "1643:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1628:3:62", + "nodeType": "YulIdentifier", + "src": "1628:3:62" + }, + "nativeSrc": "1628:18:62", + "nodeType": "YulFunctionCall", + "src": "1628:18:62" + }, + { + "name": "value3", + "nativeSrc": "1648:6:62", + "nodeType": "YulIdentifier", + "src": "1648:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1621:6:62", + "nodeType": "YulIdentifier", + "src": "1621:6:62" + }, + "nativeSrc": "1621:34:62", + "nodeType": "YulFunctionCall", + "src": "1621:34:62" + }, + "nativeSrc": "1621:34:62", + "nodeType": "YulExpressionStatement", + "src": "1621:34:62" + }, + { + "body": { + "nativeSrc": "1689:22:62", + "nodeType": "YulBlock", + "src": "1689:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x21", + "nativeSrc": "1691:16:62", + "nodeType": "YulIdentifier", + "src": "1691:16:62" + }, + "nativeSrc": "1691:18:62", + "nodeType": "YulFunctionCall", + "src": "1691:18:62" + }, + "nativeSrc": "1691:18:62", + "nodeType": "YulExpressionStatement", + "src": "1691:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value4", + "nativeSrc": "1677:6:62", + "nodeType": "YulIdentifier", + "src": "1677:6:62" + }, + { + "kind": "number", + "nativeSrc": "1685:1:62", + "nodeType": "YulLiteral", + "src": "1685:1:62", + "type": "", + "value": "3" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "1674:2:62", + "nodeType": "YulIdentifier", + "src": "1674:2:62" + }, + "nativeSrc": "1674:13:62", + "nodeType": "YulFunctionCall", + "src": "1674:13:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1667:6:62", + "nodeType": "YulIdentifier", + "src": "1667:6:62" + }, + "nativeSrc": "1667:21:62", + "nodeType": "YulFunctionCall", + "src": "1667:21:62" + }, + "nativeSrc": "1664:47:62", + "nodeType": "YulIf", + "src": "1664:47:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1731:9:62", + "nodeType": "YulIdentifier", + "src": "1731:9:62" + }, + { + "kind": "number", + "nativeSrc": "1742:3:62", + "nodeType": "YulLiteral", + "src": "1742:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1727:3:62", + "nodeType": "YulIdentifier", + "src": "1727:3:62" + }, + "nativeSrc": "1727:19:62", + "nodeType": "YulFunctionCall", + "src": "1727:19:62" + }, + { + "name": "value4", + "nativeSrc": "1748:6:62", + "nodeType": "YulIdentifier", + "src": "1748:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1720:6:62", + "nodeType": "YulIdentifier", + "src": "1720:6:62" + }, + "nativeSrc": "1720:35:62", + "nodeType": "YulFunctionCall", + "src": "1720:35:62" + }, + "nativeSrc": "1720:35:62", + "nodeType": "YulExpressionStatement", + "src": "1720:35:62" + }, + { + "expression": { + "arguments": [ + { + "name": "value5", + "nativeSrc": "1794:6:62", + "nodeType": "YulIdentifier", + "src": "1794:6:62" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1806:9:62", + "nodeType": "YulIdentifier", + "src": "1806:9:62" + }, + { + "kind": "number", + "nativeSrc": "1817:3:62", + "nodeType": "YulLiteral", + "src": "1817:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1802:3:62", + "nodeType": "YulIdentifier", + "src": "1802:3:62" + }, + "nativeSrc": "1802:19:62", + "nodeType": "YulFunctionCall", + "src": "1802:19:62" + } + ], + "functionName": { + "name": "abi_encode_enum_DisputeStatus", + "nativeSrc": "1764:29:62", + "nodeType": "YulIdentifier", + "src": "1764:29:62" + }, + "nativeSrc": "1764:58:62", + "nodeType": "YulFunctionCall", + "src": "1764:58:62" + }, + "nativeSrc": "1764:58:62", + "nodeType": "YulExpressionStatement", + "src": "1764:58:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1842:9:62", + "nodeType": "YulIdentifier", + "src": "1842:9:62" + }, + { + "kind": "number", + "nativeSrc": "1853:3:62", + "nodeType": "YulLiteral", + "src": "1853:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1838:3:62", + "nodeType": "YulIdentifier", + "src": "1838:3:62" + }, + "nativeSrc": "1838:19:62", + "nodeType": "YulFunctionCall", + "src": "1838:19:62" + }, + { + "name": "value6", + "nativeSrc": "1859:6:62", + "nodeType": "YulIdentifier", + "src": "1859:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1831:6:62", + "nodeType": "YulIdentifier", + "src": "1831:6:62" + }, + "nativeSrc": "1831:35:62", + "nodeType": "YulFunctionCall", + "src": "1831:35:62" + }, + "nativeSrc": "1831:35:62", + "nodeType": "YulExpressionStatement", + "src": "1831:35:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1886:9:62", + "nodeType": "YulIdentifier", + "src": "1886:9:62" + }, + { + "kind": "number", + "nativeSrc": "1897:3:62", + "nodeType": "YulLiteral", + "src": "1897:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1882:3:62", + "nodeType": "YulIdentifier", + "src": "1882:3:62" + }, + "nativeSrc": "1882:19:62", + "nodeType": "YulFunctionCall", + "src": "1882:19:62" + }, + { + "name": "value7", + "nativeSrc": "1903:6:62", + "nodeType": "YulIdentifier", + "src": "1903:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1875:6:62", + "nodeType": "YulIdentifier", + "src": "1875:6:62" + }, + "nativeSrc": "1875:35:62", + "nodeType": "YulFunctionCall", + "src": "1875:35:62" + }, + "nativeSrc": "1875:35:62", + "nodeType": "YulExpressionStatement", + "src": "1875:35:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes32_t_enum$_DisputeType_$10710_t_enum$_DisputeStatus_$10718_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_bytes32_t_uint8_t_uint8_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "1074:842:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1316:9:62", + "nodeType": "YulTypedName", + "src": "1316:9:62", + "type": "" + }, + { + "name": "value7", + "nativeSrc": "1327:6:62", + "nodeType": "YulTypedName", + "src": "1327:6:62", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "1335:6:62", + "nodeType": "YulTypedName", + "src": "1335:6:62", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "1343:6:62", + "nodeType": "YulTypedName", + "src": "1343:6:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "1351:6:62", + "nodeType": "YulTypedName", + "src": "1351:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "1359:6:62", + "nodeType": "YulTypedName", + "src": "1359:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1367:6:62", + "nodeType": "YulTypedName", + "src": "1367:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1375:6:62", + "nodeType": "YulTypedName", + "src": "1375:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1383:6:62", + "nodeType": "YulTypedName", + "src": "1383:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1394:4:62", + "nodeType": "YulTypedName", + "src": "1394:4:62", + "type": "" + } + ], + "src": "1074:842:62" + }, + { + "body": { + "nativeSrc": "1991:156:62", + "nodeType": "YulBlock", + "src": "1991:156:62", + "statements": [ + { + "body": { + "nativeSrc": "2037:16:62", + "nodeType": "YulBlock", + "src": "2037:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2046:1:62", + "nodeType": "YulLiteral", + "src": "2046:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2049:1:62", + "nodeType": "YulLiteral", + "src": "2049:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2039:6:62", + "nodeType": "YulIdentifier", + "src": "2039:6:62" + }, + "nativeSrc": "2039:12:62", + "nodeType": "YulFunctionCall", + "src": "2039:12:62" + }, + "nativeSrc": "2039:12:62", + "nodeType": "YulExpressionStatement", + "src": "2039:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "2012:7:62", + "nodeType": "YulIdentifier", + "src": "2012:7:62" + }, + { + "name": "headStart", + "nativeSrc": "2021:9:62", + "nodeType": "YulIdentifier", + "src": "2021:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2008:3:62", + "nodeType": "YulIdentifier", + "src": "2008:3:62" + }, + "nativeSrc": "2008:23:62", + "nodeType": "YulFunctionCall", + "src": "2008:23:62" + }, + { + "kind": "number", + "nativeSrc": "2033:2:62", + "nodeType": "YulLiteral", + "src": "2033:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "2004:3:62", + "nodeType": "YulIdentifier", + "src": "2004:3:62" + }, + "nativeSrc": "2004:32:62", + "nodeType": "YulFunctionCall", + "src": "2004:32:62" + }, + "nativeSrc": "2001:52:62", + "nodeType": "YulIf", + "src": "2001:52:62" + }, + { + "nativeSrc": "2062:14:62", + "nodeType": "YulVariableDeclaration", + "src": "2062:14:62", + "value": { + "kind": "number", + "nativeSrc": "2075:1:62", + "nodeType": "YulLiteral", + "src": "2075:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "2066:5:62", + "nodeType": "YulTypedName", + "src": "2066:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "2085:32:62", + "nodeType": "YulAssignment", + "src": "2085:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2107:9:62", + "nodeType": "YulIdentifier", + "src": "2107:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2094:12:62", + "nodeType": "YulIdentifier", + "src": "2094:12:62" + }, + "nativeSrc": "2094:23:62", + "nodeType": "YulFunctionCall", + "src": "2094:23:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "2085:5:62", + "nodeType": "YulIdentifier", + "src": "2085:5:62" + } + ] + }, + { + "nativeSrc": "2126:15:62", + "nodeType": "YulAssignment", + "src": "2126:15:62", + "value": { + "name": "value", + "nativeSrc": "2136:5:62", + "nodeType": "YulIdentifier", + "src": "2136:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2126:6:62", + "nodeType": "YulIdentifier", + "src": "2126:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nativeSrc": "1921:226:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1957:9:62", + "nodeType": "YulTypedName", + "src": "1957:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1968:7:62", + "nodeType": "YulTypedName", + "src": "1968:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1980:6:62", + "nodeType": "YulTypedName", + "src": "1980:6:62", + "type": "" + } + ], + "src": "1921:226:62" + }, + { + "body": { + "nativeSrc": "2279:102:62", + "nodeType": "YulBlock", + "src": "2279:102:62", + "statements": [ + { + "nativeSrc": "2289:26:62", + "nodeType": "YulAssignment", + "src": "2289:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2301:9:62", + "nodeType": "YulIdentifier", + "src": "2301:9:62" + }, + { + "kind": "number", + "nativeSrc": "2312:2:62", + "nodeType": "YulLiteral", + "src": "2312:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2297:3:62", + "nodeType": "YulIdentifier", + "src": "2297:3:62" + }, + "nativeSrc": "2297:18:62", + "nodeType": "YulFunctionCall", + "src": "2297:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2289:4:62", + "nodeType": "YulIdentifier", + "src": "2289:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2331:9:62", + "nodeType": "YulIdentifier", + "src": "2331:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "2346:6:62", + "nodeType": "YulIdentifier", + "src": "2346:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2362:3:62", + "nodeType": "YulLiteral", + "src": "2362:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2367:1:62", + "nodeType": "YulLiteral", + "src": "2367:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2358:3:62", + "nodeType": "YulIdentifier", + "src": "2358:3:62" + }, + "nativeSrc": "2358:11:62", + "nodeType": "YulFunctionCall", + "src": "2358:11:62" + }, + { + "kind": "number", + "nativeSrc": "2371:1:62", + "nodeType": "YulLiteral", + "src": "2371:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2354:3:62", + "nodeType": "YulIdentifier", + "src": "2354:3:62" + }, + "nativeSrc": "2354:19:62", + "nodeType": "YulFunctionCall", + "src": "2354:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2342:3:62", + "nodeType": "YulIdentifier", + "src": "2342:3:62" + }, + "nativeSrc": "2342:32:62", + "nodeType": "YulFunctionCall", + "src": "2342:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2324:6:62", + "nodeType": "YulIdentifier", + "src": "2324:6:62" + }, + "nativeSrc": "2324:51:62", + "nodeType": "YulFunctionCall", + "src": "2324:51:62" + }, + "nativeSrc": "2324:51:62", + "nodeType": "YulExpressionStatement", + "src": "2324:51:62" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_ISubgraphService_$11280__to_t_address__fromStack_reversed", + "nativeSrc": "2152:229:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2248:9:62", + "nodeType": "YulTypedName", + "src": "2248:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2259:6:62", + "nodeType": "YulTypedName", + "src": "2259:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2270:4:62", + "nodeType": "YulTypedName", + "src": "2270:4:62", + "type": "" + } + ], + "src": "2152:229:62" + }, + { + "body": { + "nativeSrc": "2487:76:62", + "nodeType": "YulBlock", + "src": "2487:76:62", + "statements": [ + { + "nativeSrc": "2497:26:62", + "nodeType": "YulAssignment", + "src": "2497:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2509:9:62", + "nodeType": "YulIdentifier", + "src": "2509:9:62" + }, + { + "kind": "number", + "nativeSrc": "2520:2:62", + "nodeType": "YulLiteral", + "src": "2520:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2505:3:62", + "nodeType": "YulIdentifier", + "src": "2505:3:62" + }, + "nativeSrc": "2505:18:62", + "nodeType": "YulFunctionCall", + "src": "2505:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2497:4:62", + "nodeType": "YulIdentifier", + "src": "2497:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2539:9:62", + "nodeType": "YulIdentifier", + "src": "2539:9:62" + }, + { + "name": "value0", + "nativeSrc": "2550:6:62", + "nodeType": "YulIdentifier", + "src": "2550:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2532:6:62", + "nodeType": "YulIdentifier", + "src": "2532:6:62" + }, + "nativeSrc": "2532:25:62", + "nodeType": "YulFunctionCall", + "src": "2532:25:62" + }, + "nativeSrc": "2532:25:62", + "nodeType": "YulExpressionStatement", + "src": "2532:25:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nativeSrc": "2386:177:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2456:9:62", + "nodeType": "YulTypedName", + "src": "2456:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2467:6:62", + "nodeType": "YulTypedName", + "src": "2467:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2478:4:62", + "nodeType": "YulTypedName", + "src": "2478:4:62", + "type": "" + } + ], + "src": "2386:177:62" + }, + { + "body": { + "nativeSrc": "2613:86:62", + "nodeType": "YulBlock", + "src": "2613:86:62", + "statements": [ + { + "body": { + "nativeSrc": "2677:16:62", + "nodeType": "YulBlock", + "src": "2677:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2686:1:62", + "nodeType": "YulLiteral", + "src": "2686:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2689:1:62", + "nodeType": "YulLiteral", + "src": "2689:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2679:6:62", + "nodeType": "YulIdentifier", + "src": "2679:6:62" + }, + "nativeSrc": "2679:12:62", + "nodeType": "YulFunctionCall", + "src": "2679:12:62" + }, + "nativeSrc": "2679:12:62", + "nodeType": "YulExpressionStatement", + "src": "2679:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "2636:5:62", + "nodeType": "YulIdentifier", + "src": "2636:5:62" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "2647:5:62", + "nodeType": "YulIdentifier", + "src": "2647:5:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2662:3:62", + "nodeType": "YulLiteral", + "src": "2662:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2667:1:62", + "nodeType": "YulLiteral", + "src": "2667:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2658:3:62", + "nodeType": "YulIdentifier", + "src": "2658:3:62" + }, + "nativeSrc": "2658:11:62", + "nodeType": "YulFunctionCall", + "src": "2658:11:62" + }, + { + "kind": "number", + "nativeSrc": "2671:1:62", + "nodeType": "YulLiteral", + "src": "2671:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2654:3:62", + "nodeType": "YulIdentifier", + "src": "2654:3:62" + }, + "nativeSrc": "2654:19:62", + "nodeType": "YulFunctionCall", + "src": "2654:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2643:3:62", + "nodeType": "YulIdentifier", + "src": "2643:3:62" + }, + "nativeSrc": "2643:31:62", + "nodeType": "YulFunctionCall", + "src": "2643:31:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "2633:2:62", + "nodeType": "YulIdentifier", + "src": "2633:2:62" + }, + "nativeSrc": "2633:42:62", + "nodeType": "YulFunctionCall", + "src": "2633:42:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "2626:6:62", + "nodeType": "YulIdentifier", + "src": "2626:6:62" + }, + "nativeSrc": "2626:50:62", + "nodeType": "YulFunctionCall", + "src": "2626:50:62" + }, + "nativeSrc": "2623:70:62", + "nodeType": "YulIf", + "src": "2623:70:62" + } + ] + }, + "name": "validator_revert_address", + "nativeSrc": "2568:131:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "2602:5:62", + "nodeType": "YulTypedName", + "src": "2602:5:62", + "type": "" + } + ], + "src": "2568:131:62" + }, + { + "body": { + "nativeSrc": "2791:280:62", + "nodeType": "YulBlock", + "src": "2791:280:62", + "statements": [ + { + "body": { + "nativeSrc": "2837:16:62", + "nodeType": "YulBlock", + "src": "2837:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2846:1:62", + "nodeType": "YulLiteral", + "src": "2846:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2849:1:62", + "nodeType": "YulLiteral", + "src": "2849:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2839:6:62", + "nodeType": "YulIdentifier", + "src": "2839:6:62" + }, + "nativeSrc": "2839:12:62", + "nodeType": "YulFunctionCall", + "src": "2839:12:62" + }, + "nativeSrc": "2839:12:62", + "nodeType": "YulExpressionStatement", + "src": "2839:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "2812:7:62", + "nodeType": "YulIdentifier", + "src": "2812:7:62" + }, + { + "name": "headStart", + "nativeSrc": "2821:9:62", + "nodeType": "YulIdentifier", + "src": "2821:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2808:3:62", + "nodeType": "YulIdentifier", + "src": "2808:3:62" + }, + "nativeSrc": "2808:23:62", + "nodeType": "YulFunctionCall", + "src": "2808:23:62" + }, + { + "kind": "number", + "nativeSrc": "2833:2:62", + "nodeType": "YulLiteral", + "src": "2833:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "2804:3:62", + "nodeType": "YulIdentifier", + "src": "2804:3:62" + }, + "nativeSrc": "2804:32:62", + "nodeType": "YulFunctionCall", + "src": "2804:32:62" + }, + "nativeSrc": "2801:52:62", + "nodeType": "YulIf", + "src": "2801:52:62" + }, + { + "nativeSrc": "2862:36:62", + "nodeType": "YulVariableDeclaration", + "src": "2862:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2888:9:62", + "nodeType": "YulIdentifier", + "src": "2888:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2875:12:62", + "nodeType": "YulIdentifier", + "src": "2875:12:62" + }, + "nativeSrc": "2875:23:62", + "nodeType": "YulFunctionCall", + "src": "2875:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "2866:5:62", + "nodeType": "YulTypedName", + "src": "2866:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "2932:5:62", + "nodeType": "YulIdentifier", + "src": "2932:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "2907:24:62", + "nodeType": "YulIdentifier", + "src": "2907:24:62" + }, + "nativeSrc": "2907:31:62", + "nodeType": "YulFunctionCall", + "src": "2907:31:62" + }, + "nativeSrc": "2907:31:62", + "nodeType": "YulExpressionStatement", + "src": "2907:31:62" + }, + { + "nativeSrc": "2947:15:62", + "nodeType": "YulAssignment", + "src": "2947:15:62", + "value": { + "name": "value", + "nativeSrc": "2957:5:62", + "nodeType": "YulIdentifier", + "src": "2957:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2947:6:62", + "nodeType": "YulIdentifier", + "src": "2947:6:62" + } + ] + }, + { + "nativeSrc": "2971:16:62", + "nodeType": "YulVariableDeclaration", + "src": "2971:16:62", + "value": { + "kind": "number", + "nativeSrc": "2986:1:62", + "nodeType": "YulLiteral", + "src": "2986:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "2975:7:62", + "nodeType": "YulTypedName", + "src": "2975:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "2996:43:62", + "nodeType": "YulAssignment", + "src": "2996:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3024:9:62", + "nodeType": "YulIdentifier", + "src": "3024:9:62" + }, + { + "kind": "number", + "nativeSrc": "3035:2:62", + "nodeType": "YulLiteral", + "src": "3035:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3020:3:62", + "nodeType": "YulIdentifier", + "src": "3020:3:62" + }, + "nativeSrc": "3020:18:62", + "nodeType": "YulFunctionCall", + "src": "3020:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "3007:12:62", + "nodeType": "YulIdentifier", + "src": "3007:12:62" + }, + "nativeSrc": "3007:32:62", + "nodeType": "YulFunctionCall", + "src": "3007:32:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "2996:7:62", + "nodeType": "YulIdentifier", + "src": "2996:7:62" + } + ] + }, + { + "nativeSrc": "3048:17:62", + "nodeType": "YulAssignment", + "src": "3048:17:62", + "value": { + "name": "value_1", + "nativeSrc": "3058:7:62", + "nodeType": "YulIdentifier", + "src": "3058:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "3048:6:62", + "nodeType": "YulIdentifier", + "src": "3048:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_bytes32", + "nativeSrc": "2704:367:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2749:9:62", + "nodeType": "YulTypedName", + "src": "2749:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "2760:7:62", + "nodeType": "YulTypedName", + "src": "2760:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "2772:6:62", + "nodeType": "YulTypedName", + "src": "2772:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "2780:6:62", + "nodeType": "YulTypedName", + "src": "2780:6:62", + "type": "" + } + ], + "src": "2704:367:62" + }, + { + "body": { + "nativeSrc": "3177:76:62", + "nodeType": "YulBlock", + "src": "3177:76:62", + "statements": [ + { + "nativeSrc": "3187:26:62", + "nodeType": "YulAssignment", + "src": "3187:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3199:9:62", + "nodeType": "YulIdentifier", + "src": "3199:9:62" + }, + { + "kind": "number", + "nativeSrc": "3210:2:62", + "nodeType": "YulLiteral", + "src": "3210:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3195:3:62", + "nodeType": "YulIdentifier", + "src": "3195:3:62" + }, + "nativeSrc": "3195:18:62", + "nodeType": "YulFunctionCall", + "src": "3195:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3187:4:62", + "nodeType": "YulIdentifier", + "src": "3187:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3229:9:62", + "nodeType": "YulIdentifier", + "src": "3229:9:62" + }, + { + "name": "value0", + "nativeSrc": "3240:6:62", + "nodeType": "YulIdentifier", + "src": "3240:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3222:6:62", + "nodeType": "YulIdentifier", + "src": "3222:6:62" + }, + "nativeSrc": "3222:25:62", + "nodeType": "YulFunctionCall", + "src": "3222:25:62" + }, + "nativeSrc": "3222:25:62", + "nodeType": "YulExpressionStatement", + "src": "3222:25:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", + "nativeSrc": "3076:177:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3146:9:62", + "nodeType": "YulTypedName", + "src": "3146:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "3157:6:62", + "nodeType": "YulTypedName", + "src": "3157:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3168:4:62", + "nodeType": "YulTypedName", + "src": "3168:4:62", + "type": "" + } + ], + "src": "3076:177:62" + }, + { + "body": { + "nativeSrc": "3357:101:62", + "nodeType": "YulBlock", + "src": "3357:101:62", + "statements": [ + { + "nativeSrc": "3367:26:62", + "nodeType": "YulAssignment", + "src": "3367:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3379:9:62", + "nodeType": "YulIdentifier", + "src": "3379:9:62" + }, + { + "kind": "number", + "nativeSrc": "3390:2:62", + "nodeType": "YulLiteral", + "src": "3390:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3375:3:62", + "nodeType": "YulIdentifier", + "src": "3375:3:62" + }, + "nativeSrc": "3375:18:62", + "nodeType": "YulFunctionCall", + "src": "3375:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3367:4:62", + "nodeType": "YulIdentifier", + "src": "3367:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3409:9:62", + "nodeType": "YulIdentifier", + "src": "3409:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "3424:6:62", + "nodeType": "YulIdentifier", + "src": "3424:6:62" + }, + { + "kind": "number", + "nativeSrc": "3432:18:62", + "nodeType": "YulLiteral", + "src": "3432:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3420:3:62", + "nodeType": "YulIdentifier", + "src": "3420:3:62" + }, + "nativeSrc": "3420:31:62", + "nodeType": "YulFunctionCall", + "src": "3420:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3402:6:62", + "nodeType": "YulIdentifier", + "src": "3402:6:62" + }, + "nativeSrc": "3402:50:62", + "nodeType": "YulFunctionCall", + "src": "3402:50:62" + }, + "nativeSrc": "3402:50:62", + "nodeType": "YulExpressionStatement", + "src": "3402:50:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", + "nativeSrc": "3258:200:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3326:9:62", + "nodeType": "YulTypedName", + "src": "3326:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "3337:6:62", + "nodeType": "YulTypedName", + "src": "3337:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3348:4:62", + "nodeType": "YulTypedName", + "src": "3348:4:62", + "type": "" + } + ], + "src": "3258:200:62" + }, + { + "body": { + "nativeSrc": "3507:85:62", + "nodeType": "YulBlock", + "src": "3507:85:62", + "statements": [ + { + "body": { + "nativeSrc": "3570:16:62", + "nodeType": "YulBlock", + "src": "3570:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3579:1:62", + "nodeType": "YulLiteral", + "src": "3579:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3582:1:62", + "nodeType": "YulLiteral", + "src": "3582:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3572:6:62", + "nodeType": "YulIdentifier", + "src": "3572:6:62" + }, + "nativeSrc": "3572:12:62", + "nodeType": "YulFunctionCall", + "src": "3572:12:62" + }, + "nativeSrc": "3572:12:62", + "nodeType": "YulExpressionStatement", + "src": "3572:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3530:5:62", + "nodeType": "YulIdentifier", + "src": "3530:5:62" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3541:5:62", + "nodeType": "YulIdentifier", + "src": "3541:5:62" + }, + { + "kind": "number", + "nativeSrc": "3548:18:62", + "nodeType": "YulLiteral", + "src": "3548:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3537:3:62", + "nodeType": "YulIdentifier", + "src": "3537:3:62" + }, + "nativeSrc": "3537:30:62", + "nodeType": "YulFunctionCall", + "src": "3537:30:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "3527:2:62", + "nodeType": "YulIdentifier", + "src": "3527:2:62" + }, + "nativeSrc": "3527:41:62", + "nodeType": "YulFunctionCall", + "src": "3527:41:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3520:6:62", + "nodeType": "YulIdentifier", + "src": "3520:6:62" + }, + "nativeSrc": "3520:49:62", + "nodeType": "YulFunctionCall", + "src": "3520:49:62" + }, + "nativeSrc": "3517:69:62", + "nodeType": "YulIf", + "src": "3517:69:62" + } + ] + }, + "name": "validator_revert_uint64", + "nativeSrc": "3463:129:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "3496:5:62", + "nodeType": "YulTypedName", + "src": "3496:5:62", + "type": "" + } + ], + "src": "3463:129:62" + }, + { + "body": { + "nativeSrc": "3641:77:62", + "nodeType": "YulBlock", + "src": "3641:77:62", + "statements": [ + { + "body": { + "nativeSrc": "3696:16:62", + "nodeType": "YulBlock", + "src": "3696:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3705:1:62", + "nodeType": "YulLiteral", + "src": "3705:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3708:1:62", + "nodeType": "YulLiteral", + "src": "3708:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3698:6:62", + "nodeType": "YulIdentifier", + "src": "3698:6:62" + }, + "nativeSrc": "3698:12:62", + "nodeType": "YulFunctionCall", + "src": "3698:12:62" + }, + "nativeSrc": "3698:12:62", + "nodeType": "YulExpressionStatement", + "src": "3698:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3664:5:62", + "nodeType": "YulIdentifier", + "src": "3664:5:62" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3675:5:62", + "nodeType": "YulIdentifier", + "src": "3675:5:62" + }, + { + "kind": "number", + "nativeSrc": "3682:10:62", + "nodeType": "YulLiteral", + "src": "3682:10:62", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3671:3:62", + "nodeType": "YulIdentifier", + "src": "3671:3:62" + }, + "nativeSrc": "3671:22:62", + "nodeType": "YulFunctionCall", + "src": "3671:22:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "3661:2:62", + "nodeType": "YulIdentifier", + "src": "3661:2:62" + }, + "nativeSrc": "3661:33:62", + "nodeType": "YulFunctionCall", + "src": "3661:33:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3654:6:62", + "nodeType": "YulIdentifier", + "src": "3654:6:62" + }, + "nativeSrc": "3654:41:62", + "nodeType": "YulFunctionCall", + "src": "3654:41:62" + }, + "nativeSrc": "3651:61:62", + "nodeType": "YulIf", + "src": "3651:61:62" + } + ] + }, + "name": "validator_revert_uint32", + "nativeSrc": "3597:121:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "3630:5:62", + "nodeType": "YulTypedName", + "src": "3630:5:62", + "type": "" + } + ], + "src": "3597:121:62" + }, + { + "body": { + "nativeSrc": "3858:651:62", + "nodeType": "YulBlock", + "src": "3858:651:62", + "statements": [ + { + "body": { + "nativeSrc": "3905:16:62", + "nodeType": "YulBlock", + "src": "3905:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3914:1:62", + "nodeType": "YulLiteral", + "src": "3914:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3917:1:62", + "nodeType": "YulLiteral", + "src": "3917:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3907:6:62", + "nodeType": "YulIdentifier", + "src": "3907:6:62" + }, + "nativeSrc": "3907:12:62", + "nodeType": "YulFunctionCall", + "src": "3907:12:62" + }, + "nativeSrc": "3907:12:62", + "nodeType": "YulExpressionStatement", + "src": "3907:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "3879:7:62", + "nodeType": "YulIdentifier", + "src": "3879:7:62" + }, + { + "name": "headStart", + "nativeSrc": "3888:9:62", + "nodeType": "YulIdentifier", + "src": "3888:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3875:3:62", + "nodeType": "YulIdentifier", + "src": "3875:3:62" + }, + "nativeSrc": "3875:23:62", + "nodeType": "YulFunctionCall", + "src": "3875:23:62" + }, + { + "kind": "number", + "nativeSrc": "3900:3:62", + "nodeType": "YulLiteral", + "src": "3900:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "3871:3:62", + "nodeType": "YulIdentifier", + "src": "3871:3:62" + }, + "nativeSrc": "3871:33:62", + "nodeType": "YulFunctionCall", + "src": "3871:33:62" + }, + "nativeSrc": "3868:53:62", + "nodeType": "YulIf", + "src": "3868:53:62" + }, + { + "nativeSrc": "3930:36:62", + "nodeType": "YulVariableDeclaration", + "src": "3930:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3956:9:62", + "nodeType": "YulIdentifier", + "src": "3956:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "3943:12:62", + "nodeType": "YulIdentifier", + "src": "3943:12:62" + }, + "nativeSrc": "3943:23:62", + "nodeType": "YulFunctionCall", + "src": "3943:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "3934:5:62", + "nodeType": "YulTypedName", + "src": "3934:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "4000:5:62", + "nodeType": "YulIdentifier", + "src": "4000:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "3975:24:62", + "nodeType": "YulIdentifier", + "src": "3975:24:62" + }, + "nativeSrc": "3975:31:62", + "nodeType": "YulFunctionCall", + "src": "3975:31:62" + }, + "nativeSrc": "3975:31:62", + "nodeType": "YulExpressionStatement", + "src": "3975:31:62" + }, + { + "nativeSrc": "4015:15:62", + "nodeType": "YulAssignment", + "src": "4015:15:62", + "value": { + "name": "value", + "nativeSrc": "4025:5:62", + "nodeType": "YulIdentifier", + "src": "4025:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "4015:6:62", + "nodeType": "YulIdentifier", + "src": "4015:6:62" + } + ] + }, + { + "nativeSrc": "4039:47:62", + "nodeType": "YulVariableDeclaration", + "src": "4039:47:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4071:9:62", + "nodeType": "YulIdentifier", + "src": "4071:9:62" + }, + { + "kind": "number", + "nativeSrc": "4082:2:62", + "nodeType": "YulLiteral", + "src": "4082:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4067:3:62", + "nodeType": "YulIdentifier", + "src": "4067:3:62" + }, + "nativeSrc": "4067:18:62", + "nodeType": "YulFunctionCall", + "src": "4067:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "4054:12:62", + "nodeType": "YulIdentifier", + "src": "4054:12:62" + }, + "nativeSrc": "4054:32:62", + "nodeType": "YulFunctionCall", + "src": "4054:32:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "4043:7:62", + "nodeType": "YulTypedName", + "src": "4043:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "4119:7:62", + "nodeType": "YulIdentifier", + "src": "4119:7:62" + } + ], + "functionName": { + "name": "validator_revert_uint64", + "nativeSrc": "4095:23:62", + "nodeType": "YulIdentifier", + "src": "4095:23:62" + }, + "nativeSrc": "4095:32:62", + "nodeType": "YulFunctionCall", + "src": "4095:32:62" + }, + "nativeSrc": "4095:32:62", + "nodeType": "YulExpressionStatement", + "src": "4095:32:62" + }, + { + "nativeSrc": "4136:17:62", + "nodeType": "YulAssignment", + "src": "4136:17:62", + "value": { + "name": "value_1", + "nativeSrc": "4146:7:62", + "nodeType": "YulIdentifier", + "src": "4146:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "4136:6:62", + "nodeType": "YulIdentifier", + "src": "4136:6:62" + } + ] + }, + { + "nativeSrc": "4162:16:62", + "nodeType": "YulVariableDeclaration", + "src": "4162:16:62", + "value": { + "kind": "number", + "nativeSrc": "4177:1:62", + "nodeType": "YulLiteral", + "src": "4177:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "4166:7:62", + "nodeType": "YulTypedName", + "src": "4166:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "4187:43:62", + "nodeType": "YulAssignment", + "src": "4187:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4215:9:62", + "nodeType": "YulIdentifier", + "src": "4215:9:62" + }, + { + "kind": "number", + "nativeSrc": "4226:2:62", + "nodeType": "YulLiteral", + "src": "4226:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4211:3:62", + "nodeType": "YulIdentifier", + "src": "4211:3:62" + }, + "nativeSrc": "4211:18:62", + "nodeType": "YulFunctionCall", + "src": "4211:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "4198:12:62", + "nodeType": "YulIdentifier", + "src": "4198:12:62" + }, + "nativeSrc": "4198:32:62", + "nodeType": "YulFunctionCall", + "src": "4198:32:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "4187:7:62", + "nodeType": "YulIdentifier", + "src": "4187:7:62" + } + ] + }, + { + "nativeSrc": "4239:17:62", + "nodeType": "YulAssignment", + "src": "4239:17:62", + "value": { + "name": "value_2", + "nativeSrc": "4249:7:62", + "nodeType": "YulIdentifier", + "src": "4249:7:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "4239:6:62", + "nodeType": "YulIdentifier", + "src": "4239:6:62" + } + ] + }, + { + "nativeSrc": "4265:47:62", + "nodeType": "YulVariableDeclaration", + "src": "4265:47:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4297:9:62", + "nodeType": "YulIdentifier", + "src": "4297:9:62" + }, + { + "kind": "number", + "nativeSrc": "4308:2:62", + "nodeType": "YulLiteral", + "src": "4308:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4293:3:62", + "nodeType": "YulIdentifier", + "src": "4293:3:62" + }, + "nativeSrc": "4293:18:62", + "nodeType": "YulFunctionCall", + "src": "4293:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "4280:12:62", + "nodeType": "YulIdentifier", + "src": "4280:12:62" + }, + "nativeSrc": "4280:32:62", + "nodeType": "YulFunctionCall", + "src": "4280:32:62" + }, + "variables": [ + { + "name": "value_3", + "nativeSrc": "4269:7:62", + "nodeType": "YulTypedName", + "src": "4269:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_3", + "nativeSrc": "4345:7:62", + "nodeType": "YulIdentifier", + "src": "4345:7:62" + } + ], + "functionName": { + "name": "validator_revert_uint32", + "nativeSrc": "4321:23:62", + "nodeType": "YulIdentifier", + "src": "4321:23:62" + }, + "nativeSrc": "4321:32:62", + "nodeType": "YulFunctionCall", + "src": "4321:32:62" + }, + "nativeSrc": "4321:32:62", + "nodeType": "YulExpressionStatement", + "src": "4321:32:62" + }, + { + "nativeSrc": "4362:17:62", + "nodeType": "YulAssignment", + "src": "4362:17:62", + "value": { + "name": "value_3", + "nativeSrc": "4372:7:62", + "nodeType": "YulIdentifier", + "src": "4372:7:62" + }, + "variableNames": [ + { + "name": "value3", + "nativeSrc": "4362:6:62", + "nodeType": "YulIdentifier", + "src": "4362:6:62" + } + ] + }, + { + "nativeSrc": "4388:48:62", + "nodeType": "YulVariableDeclaration", + "src": "4388:48:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4420:9:62", + "nodeType": "YulIdentifier", + "src": "4420:9:62" + }, + { + "kind": "number", + "nativeSrc": "4431:3:62", + "nodeType": "YulLiteral", + "src": "4431:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4416:3:62", + "nodeType": "YulIdentifier", + "src": "4416:3:62" + }, + "nativeSrc": "4416:19:62", + "nodeType": "YulFunctionCall", + "src": "4416:19:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "4403:12:62", + "nodeType": "YulIdentifier", + "src": "4403:12:62" + }, + "nativeSrc": "4403:33:62", + "nodeType": "YulFunctionCall", + "src": "4403:33:62" + }, + "variables": [ + { + "name": "value_4", + "nativeSrc": "4392:7:62", + "nodeType": "YulTypedName", + "src": "4392:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_4", + "nativeSrc": "4469:7:62", + "nodeType": "YulIdentifier", + "src": "4469:7:62" + } + ], + "functionName": { + "name": "validator_revert_uint32", + "nativeSrc": "4445:23:62", + "nodeType": "YulIdentifier", + "src": "4445:23:62" + }, + "nativeSrc": "4445:32:62", + "nodeType": "YulFunctionCall", + "src": "4445:32:62" + }, + "nativeSrc": "4445:32:62", + "nodeType": "YulExpressionStatement", + "src": "4445:32:62" + }, + { + "nativeSrc": "4486:17:62", + "nodeType": "YulAssignment", + "src": "4486:17:62", + "value": { + "name": "value_4", + "nativeSrc": "4496:7:62", + "nodeType": "YulIdentifier", + "src": "4496:7:62" + }, + "variableNames": [ + { + "name": "value4", + "nativeSrc": "4486:6:62", + "nodeType": "YulIdentifier", + "src": "4486:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_uint64t_uint256t_uint32t_uint32", + "nativeSrc": "3723:786:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3792:9:62", + "nodeType": "YulTypedName", + "src": "3792:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "3803:7:62", + "nodeType": "YulTypedName", + "src": "3803:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "3815:6:62", + "nodeType": "YulTypedName", + "src": "3815:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "3823:6:62", + "nodeType": "YulTypedName", + "src": "3823:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "3831:6:62", + "nodeType": "YulTypedName", + "src": "3831:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "3839:6:62", + "nodeType": "YulTypedName", + "src": "3839:6:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "3847:6:62", + "nodeType": "YulTypedName", + "src": "3847:6:62", + "type": "" + } + ], + "src": "3723:786:62" + }, + { + "body": { + "nativeSrc": "4560:304:62", + "nodeType": "YulBlock", + "src": "4560:304:62", + "statements": [ + { + "nativeSrc": "4570:19:62", + "nodeType": "YulAssignment", + "src": "4570:19:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4586:2:62", + "nodeType": "YulLiteral", + "src": "4586:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "4580:5:62", + "nodeType": "YulIdentifier", + "src": "4580:5:62" + }, + "nativeSrc": "4580:9:62", + "nodeType": "YulFunctionCall", + "src": "4580:9:62" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "4570:6:62", + "nodeType": "YulIdentifier", + "src": "4570:6:62" + } + ] + }, + { + "nativeSrc": "4598:35:62", + "nodeType": "YulVariableDeclaration", + "src": "4598:35:62", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "4620:6:62", + "nodeType": "YulIdentifier", + "src": "4620:6:62" + }, + { + "kind": "number", + "nativeSrc": "4628:4:62", + "nodeType": "YulLiteral", + "src": "4628:4:62", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4616:3:62", + "nodeType": "YulIdentifier", + "src": "4616:3:62" + }, + "nativeSrc": "4616:17:62", + "nodeType": "YulFunctionCall", + "src": "4616:17:62" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "4602:10:62", + "nodeType": "YulTypedName", + "src": "4602:10:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "4716:111:62", + "nodeType": "YulBlock", + "src": "4716:111:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4737:1:62", + "nodeType": "YulLiteral", + "src": "4737:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4744:3:62", + "nodeType": "YulLiteral", + "src": "4744:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "4749:10:62", + "nodeType": "YulLiteral", + "src": "4749:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "4740:3:62", + "nodeType": "YulIdentifier", + "src": "4740:3:62" + }, + "nativeSrc": "4740:20:62", + "nodeType": "YulFunctionCall", + "src": "4740:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4730:6:62", + "nodeType": "YulIdentifier", + "src": "4730:6:62" + }, + "nativeSrc": "4730:31:62", + "nodeType": "YulFunctionCall", + "src": "4730:31:62" + }, + "nativeSrc": "4730:31:62", + "nodeType": "YulExpressionStatement", + "src": "4730:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4781:1:62", + "nodeType": "YulLiteral", + "src": "4781:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "4784:4:62", + "nodeType": "YulLiteral", + "src": "4784:4:62", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4774:6:62", + "nodeType": "YulIdentifier", + "src": "4774:6:62" + }, + "nativeSrc": "4774:15:62", + "nodeType": "YulFunctionCall", + "src": "4774:15:62" + }, + "nativeSrc": "4774:15:62", + "nodeType": "YulExpressionStatement", + "src": "4774:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4809:1:62", + "nodeType": "YulLiteral", + "src": "4809:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "4812:4:62", + "nodeType": "YulLiteral", + "src": "4812:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "4802:6:62", + "nodeType": "YulIdentifier", + "src": "4802:6:62" + }, + "nativeSrc": "4802:15:62", + "nodeType": "YulFunctionCall", + "src": "4802:15:62" + }, + "nativeSrc": "4802:15:62", + "nodeType": "YulExpressionStatement", + "src": "4802:15:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "4651:10:62", + "nodeType": "YulIdentifier", + "src": "4651:10:62" + }, + { + "kind": "number", + "nativeSrc": "4663:18:62", + "nodeType": "YulLiteral", + "src": "4663:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "4648:2:62", + "nodeType": "YulIdentifier", + "src": "4648:2:62" + }, + "nativeSrc": "4648:34:62", + "nodeType": "YulFunctionCall", + "src": "4648:34:62" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "4687:10:62", + "nodeType": "YulIdentifier", + "src": "4687:10:62" + }, + { + "name": "memPtr", + "nativeSrc": "4699:6:62", + "nodeType": "YulIdentifier", + "src": "4699:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "4684:2:62", + "nodeType": "YulIdentifier", + "src": "4684:2:62" + }, + "nativeSrc": "4684:22:62", + "nodeType": "YulFunctionCall", + "src": "4684:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "4645:2:62", + "nodeType": "YulIdentifier", + "src": "4645:2:62" + }, + "nativeSrc": "4645:62:62", + "nodeType": "YulFunctionCall", + "src": "4645:62:62" + }, + "nativeSrc": "4642:185:62", + "nodeType": "YulIf", + "src": "4642:185:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4843:2:62", + "nodeType": "YulLiteral", + "src": "4843:2:62", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "4847:10:62", + "nodeType": "YulIdentifier", + "src": "4847:10:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4836:6:62", + "nodeType": "YulIdentifier", + "src": "4836:6:62" + }, + "nativeSrc": "4836:22:62", + "nodeType": "YulFunctionCall", + "src": "4836:22:62" + }, + "nativeSrc": "4836:22:62", + "nodeType": "YulExpressionStatement", + "src": "4836:22:62" + } + ] + }, + "name": "allocate_memory_2163", + "nativeSrc": "4514:350:62", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nativeSrc": "4549:6:62", + "nodeType": "YulTypedName", + "src": "4549:6:62", + "type": "" + } + ], + "src": "4514:350:62" + }, + { + "body": { + "nativeSrc": "4910:303:62", + "nodeType": "YulBlock", + "src": "4910:303:62", + "statements": [ + { + "nativeSrc": "4920:19:62", + "nodeType": "YulAssignment", + "src": "4920:19:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4936:2:62", + "nodeType": "YulLiteral", + "src": "4936:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "4930:5:62", + "nodeType": "YulIdentifier", + "src": "4930:5:62" + }, + "nativeSrc": "4930:9:62", + "nodeType": "YulFunctionCall", + "src": "4930:9:62" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "4920:6:62", + "nodeType": "YulIdentifier", + "src": "4920:6:62" + } + ] + }, + { + "nativeSrc": "4948:34:62", + "nodeType": "YulVariableDeclaration", + "src": "4948:34:62", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "4970:6:62", + "nodeType": "YulIdentifier", + "src": "4970:6:62" + }, + { + "kind": "number", + "nativeSrc": "4978:3:62", + "nodeType": "YulLiteral", + "src": "4978:3:62", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4966:3:62", + "nodeType": "YulIdentifier", + "src": "4966:3:62" + }, + "nativeSrc": "4966:16:62", + "nodeType": "YulFunctionCall", + "src": "4966:16:62" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "4952:10:62", + "nodeType": "YulTypedName", + "src": "4952:10:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "5065:111:62", + "nodeType": "YulBlock", + "src": "5065:111:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5086:1:62", + "nodeType": "YulLiteral", + "src": "5086:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5093:3:62", + "nodeType": "YulLiteral", + "src": "5093:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "5098:10:62", + "nodeType": "YulLiteral", + "src": "5098:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5089:3:62", + "nodeType": "YulIdentifier", + "src": "5089:3:62" + }, + "nativeSrc": "5089:20:62", + "nodeType": "YulFunctionCall", + "src": "5089:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5079:6:62", + "nodeType": "YulIdentifier", + "src": "5079:6:62" + }, + "nativeSrc": "5079:31:62", + "nodeType": "YulFunctionCall", + "src": "5079:31:62" + }, + "nativeSrc": "5079:31:62", + "nodeType": "YulExpressionStatement", + "src": "5079:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5130:1:62", + "nodeType": "YulLiteral", + "src": "5130:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "5133:4:62", + "nodeType": "YulLiteral", + "src": "5133:4:62", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5123:6:62", + "nodeType": "YulIdentifier", + "src": "5123:6:62" + }, + "nativeSrc": "5123:15:62", + "nodeType": "YulFunctionCall", + "src": "5123:15:62" + }, + "nativeSrc": "5123:15:62", + "nodeType": "YulExpressionStatement", + "src": "5123:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5158:1:62", + "nodeType": "YulLiteral", + "src": "5158:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "5161:4:62", + "nodeType": "YulLiteral", + "src": "5161:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "5151:6:62", + "nodeType": "YulIdentifier", + "src": "5151:6:62" + }, + "nativeSrc": "5151:15:62", + "nodeType": "YulFunctionCall", + "src": "5151:15:62" + }, + "nativeSrc": "5151:15:62", + "nodeType": "YulExpressionStatement", + "src": "5151:15:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "5000:10:62", + "nodeType": "YulIdentifier", + "src": "5000:10:62" + }, + { + "kind": "number", + "nativeSrc": "5012:18:62", + "nodeType": "YulLiteral", + "src": "5012:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "4997:2:62", + "nodeType": "YulIdentifier", + "src": "4997:2:62" + }, + "nativeSrc": "4997:34:62", + "nodeType": "YulFunctionCall", + "src": "4997:34:62" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "5036:10:62", + "nodeType": "YulIdentifier", + "src": "5036:10:62" + }, + { + "name": "memPtr", + "nativeSrc": "5048:6:62", + "nodeType": "YulIdentifier", + "src": "5048:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "5033:2:62", + "nodeType": "YulIdentifier", + "src": "5033:2:62" + }, + "nativeSrc": "5033:22:62", + "nodeType": "YulFunctionCall", + "src": "5033:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "4994:2:62", + "nodeType": "YulIdentifier", + "src": "4994:2:62" + }, + "nativeSrc": "4994:62:62", + "nodeType": "YulFunctionCall", + "src": "4994:62:62" + }, + "nativeSrc": "4991:185:62", + "nodeType": "YulIf", + "src": "4991:185:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5192:2:62", + "nodeType": "YulLiteral", + "src": "5192:2:62", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "5196:10:62", + "nodeType": "YulIdentifier", + "src": "5196:10:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5185:6:62", + "nodeType": "YulIdentifier", + "src": "5185:6:62" + }, + "nativeSrc": "5185:22:62", + "nodeType": "YulFunctionCall", + "src": "5185:22:62" + }, + "nativeSrc": "5185:22:62", + "nodeType": "YulExpressionStatement", + "src": "5185:22:62" + } + ] + }, + "name": "allocate_memory", + "nativeSrc": "4869:344:62", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nativeSrc": "4899:6:62", + "nodeType": "YulTypedName", + "src": "4899:6:62", + "type": "" + } + ], + "src": "4869:344:62" + }, + { + "body": { + "nativeSrc": "5264:303:62", + "nodeType": "YulBlock", + "src": "5264:303:62", + "statements": [ + { + "nativeSrc": "5274:19:62", + "nodeType": "YulAssignment", + "src": "5274:19:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5290:2:62", + "nodeType": "YulLiteral", + "src": "5290:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "5284:5:62", + "nodeType": "YulIdentifier", + "src": "5284:5:62" + }, + "nativeSrc": "5284:9:62", + "nodeType": "YulFunctionCall", + "src": "5284:9:62" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "5274:6:62", + "nodeType": "YulIdentifier", + "src": "5274:6:62" + } + ] + }, + { + "nativeSrc": "5302:34:62", + "nodeType": "YulVariableDeclaration", + "src": "5302:34:62", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "5324:6:62", + "nodeType": "YulIdentifier", + "src": "5324:6:62" + }, + { + "kind": "number", + "nativeSrc": "5332:3:62", + "nodeType": "YulLiteral", + "src": "5332:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5320:3:62", + "nodeType": "YulIdentifier", + "src": "5320:3:62" + }, + "nativeSrc": "5320:16:62", + "nodeType": "YulFunctionCall", + "src": "5320:16:62" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "5306:10:62", + "nodeType": "YulTypedName", + "src": "5306:10:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "5419:111:62", + "nodeType": "YulBlock", + "src": "5419:111:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5440:1:62", + "nodeType": "YulLiteral", + "src": "5440:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5447:3:62", + "nodeType": "YulLiteral", + "src": "5447:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "5452:10:62", + "nodeType": "YulLiteral", + "src": "5452:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5443:3:62", + "nodeType": "YulIdentifier", + "src": "5443:3:62" + }, + "nativeSrc": "5443:20:62", + "nodeType": "YulFunctionCall", + "src": "5443:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5433:6:62", + "nodeType": "YulIdentifier", + "src": "5433:6:62" + }, + "nativeSrc": "5433:31:62", + "nodeType": "YulFunctionCall", + "src": "5433:31:62" + }, + "nativeSrc": "5433:31:62", + "nodeType": "YulExpressionStatement", + "src": "5433:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5484:1:62", + "nodeType": "YulLiteral", + "src": "5484:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "5487:4:62", + "nodeType": "YulLiteral", + "src": "5487:4:62", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5477:6:62", + "nodeType": "YulIdentifier", + "src": "5477:6:62" + }, + "nativeSrc": "5477:15:62", + "nodeType": "YulFunctionCall", + "src": "5477:15:62" + }, + "nativeSrc": "5477:15:62", + "nodeType": "YulExpressionStatement", + "src": "5477:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5512:1:62", + "nodeType": "YulLiteral", + "src": "5512:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "5515:4:62", + "nodeType": "YulLiteral", + "src": "5515:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "5505:6:62", + "nodeType": "YulIdentifier", + "src": "5505:6:62" + }, + "nativeSrc": "5505:15:62", + "nodeType": "YulFunctionCall", + "src": "5505:15:62" + }, + "nativeSrc": "5505:15:62", + "nodeType": "YulExpressionStatement", + "src": "5505:15:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "5354:10:62", + "nodeType": "YulIdentifier", + "src": "5354:10:62" + }, + { + "kind": "number", + "nativeSrc": "5366:18:62", + "nodeType": "YulLiteral", + "src": "5366:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "5351:2:62", + "nodeType": "YulIdentifier", + "src": "5351:2:62" + }, + "nativeSrc": "5351:34:62", + "nodeType": "YulFunctionCall", + "src": "5351:34:62" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "5390:10:62", + "nodeType": "YulIdentifier", + "src": "5390:10:62" + }, + { + "name": "memPtr", + "nativeSrc": "5402:6:62", + "nodeType": "YulIdentifier", + "src": "5402:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "5387:2:62", + "nodeType": "YulIdentifier", + "src": "5387:2:62" + }, + "nativeSrc": "5387:22:62", + "nodeType": "YulFunctionCall", + "src": "5387:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "5348:2:62", + "nodeType": "YulIdentifier", + "src": "5348:2:62" + }, + "nativeSrc": "5348:62:62", + "nodeType": "YulFunctionCall", + "src": "5348:62:62" + }, + "nativeSrc": "5345:185:62", + "nodeType": "YulIf", + "src": "5345:185:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5546:2:62", + "nodeType": "YulLiteral", + "src": "5546:2:62", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "5550:10:62", + "nodeType": "YulIdentifier", + "src": "5550:10:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5539:6:62", + "nodeType": "YulIdentifier", + "src": "5539:6:62" + }, + "nativeSrc": "5539:22:62", + "nodeType": "YulFunctionCall", + "src": "5539:22:62" + }, + "nativeSrc": "5539:22:62", + "nodeType": "YulExpressionStatement", + "src": "5539:22:62" + } + ] + }, + "name": "allocate_memory_2167", + "nativeSrc": "5218:349:62", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nativeSrc": "5253:6:62", + "nodeType": "YulTypedName", + "src": "5253:6:62", + "type": "" + } + ], + "src": "5218:349:62" + }, + { + "body": { + "nativeSrc": "5668:785:62", + "nodeType": "YulBlock", + "src": "5668:785:62", + "statements": [ + { + "nativeSrc": "5678:42:62", + "nodeType": "YulVariableDeclaration", + "src": "5678:42:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "5696:7:62", + "nodeType": "YulIdentifier", + "src": "5696:7:62" + }, + { + "name": "headStart", + "nativeSrc": "5705:9:62", + "nodeType": "YulIdentifier", + "src": "5705:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "5692:3:62", + "nodeType": "YulIdentifier", + "src": "5692:3:62" + }, + "nativeSrc": "5692:23:62", + "nodeType": "YulFunctionCall", + "src": "5692:23:62" + }, + { + "kind": "number", + "nativeSrc": "5717:2:62", + "nodeType": "YulLiteral", + "src": "5717:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "5688:3:62", + "nodeType": "YulIdentifier", + "src": "5688:3:62" + }, + "nativeSrc": "5688:32:62", + "nodeType": "YulFunctionCall", + "src": "5688:32:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "5682:2:62", + "nodeType": "YulTypedName", + "src": "5682:2:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "5735:16:62", + "nodeType": "YulBlock", + "src": "5735:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5744:1:62", + "nodeType": "YulLiteral", + "src": "5744:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "5747:1:62", + "nodeType": "YulLiteral", + "src": "5747:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "5737:6:62", + "nodeType": "YulIdentifier", + "src": "5737:6:62" + }, + "nativeSrc": "5737:12:62", + "nodeType": "YulFunctionCall", + "src": "5737:12:62" + }, + "nativeSrc": "5737:12:62", + "nodeType": "YulExpressionStatement", + "src": "5737:12:62" + } + ] + }, + "condition": { + "name": "_1", + "nativeSrc": "5732:2:62", + "nodeType": "YulIdentifier", + "src": "5732:2:62" + }, + "nativeSrc": "5729:22:62", + "nodeType": "YulIf", + "src": "5729:22:62" + }, + { + "nativeSrc": "5760:7:62", + "nodeType": "YulAssignment", + "src": "5760:7:62", + "value": { + "kind": "number", + "nativeSrc": "5766:1:62", + "nodeType": "YulLiteral", + "src": "5766:1:62", + "type": "", + "value": "0" + }, + "variableNames": [ + { + "name": "_1", + "nativeSrc": "5760:2:62", + "nodeType": "YulIdentifier", + "src": "5760:2:62" + } + ] + }, + { + "nativeSrc": "5776:16:62", + "nodeType": "YulVariableDeclaration", + "src": "5776:16:62", + "value": { + "name": "_1", + "nativeSrc": "5790:2:62", + "nodeType": "YulIdentifier", + "src": "5790:2:62" + }, + "variables": [ + { + "name": "memPtr", + "nativeSrc": "5780:6:62", + "nodeType": "YulTypedName", + "src": "5780:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "5801:19:62", + "nodeType": "YulAssignment", + "src": "5801:19:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5817:2:62", + "nodeType": "YulLiteral", + "src": "5817:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "5811:5:62", + "nodeType": "YulIdentifier", + "src": "5811:5:62" + }, + "nativeSrc": "5811:9:62", + "nodeType": "YulFunctionCall", + "src": "5811:9:62" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "5801:6:62", + "nodeType": "YulIdentifier", + "src": "5801:6:62" + } + ] + }, + { + "nativeSrc": "5829:33:62", + "nodeType": "YulVariableDeclaration", + "src": "5829:33:62", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "5851:6:62", + "nodeType": "YulIdentifier", + "src": "5851:6:62" + }, + { + "kind": "number", + "nativeSrc": "5859:2:62", + "nodeType": "YulLiteral", + "src": "5859:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5847:3:62", + "nodeType": "YulIdentifier", + "src": "5847:3:62" + }, + "nativeSrc": "5847:15:62", + "nodeType": "YulFunctionCall", + "src": "5847:15:62" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "5833:10:62", + "nodeType": "YulTypedName", + "src": "5833:10:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "5945:113:62", + "nodeType": "YulBlock", + "src": "5945:113:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "5966:2:62", + "nodeType": "YulIdentifier", + "src": "5966:2:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5974:3:62", + "nodeType": "YulLiteral", + "src": "5974:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "5979:10:62", + "nodeType": "YulLiteral", + "src": "5979:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5970:3:62", + "nodeType": "YulIdentifier", + "src": "5970:3:62" + }, + "nativeSrc": "5970:20:62", + "nodeType": "YulFunctionCall", + "src": "5970:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5959:6:62", + "nodeType": "YulIdentifier", + "src": "5959:6:62" + }, + "nativeSrc": "5959:32:62", + "nodeType": "YulFunctionCall", + "src": "5959:32:62" + }, + "nativeSrc": "5959:32:62", + "nodeType": "YulExpressionStatement", + "src": "5959:32:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6011:1:62", + "nodeType": "YulLiteral", + "src": "6011:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "6014:4:62", + "nodeType": "YulLiteral", + "src": "6014:4:62", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6004:6:62", + "nodeType": "YulIdentifier", + "src": "6004:6:62" + }, + "nativeSrc": "6004:15:62", + "nodeType": "YulFunctionCall", + "src": "6004:15:62" + }, + "nativeSrc": "6004:15:62", + "nodeType": "YulExpressionStatement", + "src": "6004:15:62" + }, + { + "expression": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "6039:2:62", + "nodeType": "YulIdentifier", + "src": "6039:2:62" + }, + { + "kind": "number", + "nativeSrc": "6043:4:62", + "nodeType": "YulLiteral", + "src": "6043:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "6032:6:62", + "nodeType": "YulIdentifier", + "src": "6032:6:62" + }, + "nativeSrc": "6032:16:62", + "nodeType": "YulFunctionCall", + "src": "6032:16:62" + }, + "nativeSrc": "6032:16:62", + "nodeType": "YulExpressionStatement", + "src": "6032:16:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "5880:10:62", + "nodeType": "YulIdentifier", + "src": "5880:10:62" + }, + { + "kind": "number", + "nativeSrc": "5892:18:62", + "nodeType": "YulLiteral", + "src": "5892:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "5877:2:62", + "nodeType": "YulIdentifier", + "src": "5877:2:62" + }, + "nativeSrc": "5877:34:62", + "nodeType": "YulFunctionCall", + "src": "5877:34:62" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "5916:10:62", + "nodeType": "YulIdentifier", + "src": "5916:10:62" + }, + { + "name": "memPtr", + "nativeSrc": "5928:6:62", + "nodeType": "YulIdentifier", + "src": "5928:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "5913:2:62", + "nodeType": "YulIdentifier", + "src": "5913:2:62" + }, + "nativeSrc": "5913:22:62", + "nodeType": "YulFunctionCall", + "src": "5913:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "5874:2:62", + "nodeType": "YulIdentifier", + "src": "5874:2:62" + }, + "nativeSrc": "5874:62:62", + "nodeType": "YulFunctionCall", + "src": "5874:62:62" + }, + "nativeSrc": "5871:187:62", + "nodeType": "YulIf", + "src": "5871:187:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6074:2:62", + "nodeType": "YulLiteral", + "src": "6074:2:62", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "6078:10:62", + "nodeType": "YulIdentifier", + "src": "6078:10:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6067:6:62", + "nodeType": "YulIdentifier", + "src": "6067:6:62" + }, + "nativeSrc": "6067:22:62", + "nodeType": "YulFunctionCall", + "src": "6067:22:62" + }, + "nativeSrc": "6067:22:62", + "nodeType": "YulExpressionStatement", + "src": "6067:22:62" + }, + { + "nativeSrc": "6098:15:62", + "nodeType": "YulVariableDeclaration", + "src": "6098:15:62", + "value": { + "name": "_1", + "nativeSrc": "6111:2:62", + "nodeType": "YulIdentifier", + "src": "6111:2:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "6102:5:62", + "nodeType": "YulTypedName", + "src": "6102:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "6122:32:62", + "nodeType": "YulAssignment", + "src": "6122:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6144:9:62", + "nodeType": "YulIdentifier", + "src": "6144:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "6131:12:62", + "nodeType": "YulIdentifier", + "src": "6131:12:62" + }, + "nativeSrc": "6131:23:62", + "nodeType": "YulFunctionCall", + "src": "6131:23:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "6122:5:62", + "nodeType": "YulIdentifier", + "src": "6122:5:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "6170:6:62", + "nodeType": "YulIdentifier", + "src": "6170:6:62" + }, + { + "name": "value", + "nativeSrc": "6178:5:62", + "nodeType": "YulIdentifier", + "src": "6178:5:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6163:6:62", + "nodeType": "YulIdentifier", + "src": "6163:6:62" + }, + "nativeSrc": "6163:21:62", + "nodeType": "YulFunctionCall", + "src": "6163:21:62" + }, + "nativeSrc": "6163:21:62", + "nodeType": "YulExpressionStatement", + "src": "6163:21:62" + }, + { + "nativeSrc": "6193:17:62", + "nodeType": "YulVariableDeclaration", + "src": "6193:17:62", + "value": { + "name": "_1", + "nativeSrc": "6208:2:62", + "nodeType": "YulIdentifier", + "src": "6208:2:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "6197:7:62", + "nodeType": "YulTypedName", + "src": "6197:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "6219:43:62", + "nodeType": "YulAssignment", + "src": "6219:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6247:9:62", + "nodeType": "YulIdentifier", + "src": "6247:9:62" + }, + { + "kind": "number", + "nativeSrc": "6258:2:62", + "nodeType": "YulLiteral", + "src": "6258:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6243:3:62", + "nodeType": "YulIdentifier", + "src": "6243:3:62" + }, + "nativeSrc": "6243:18:62", + "nodeType": "YulFunctionCall", + "src": "6243:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "6230:12:62", + "nodeType": "YulIdentifier", + "src": "6230:12:62" + }, + "nativeSrc": "6230:32:62", + "nodeType": "YulFunctionCall", + "src": "6230:32:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "6219:7:62", + "nodeType": "YulIdentifier", + "src": "6219:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "6282:6:62", + "nodeType": "YulIdentifier", + "src": "6282:6:62" + }, + { + "kind": "number", + "nativeSrc": "6290:2:62", + "nodeType": "YulLiteral", + "src": "6290:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6278:3:62", + "nodeType": "YulIdentifier", + "src": "6278:3:62" + }, + "nativeSrc": "6278:15:62", + "nodeType": "YulFunctionCall", + "src": "6278:15:62" + }, + { + "name": "value_1", + "nativeSrc": "6295:7:62", + "nodeType": "YulIdentifier", + "src": "6295:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6271:6:62", + "nodeType": "YulIdentifier", + "src": "6271:6:62" + }, + "nativeSrc": "6271:32:62", + "nodeType": "YulFunctionCall", + "src": "6271:32:62" + }, + "nativeSrc": "6271:32:62", + "nodeType": "YulExpressionStatement", + "src": "6271:32:62" + }, + { + "nativeSrc": "6312:17:62", + "nodeType": "YulVariableDeclaration", + "src": "6312:17:62", + "value": { + "name": "_1", + "nativeSrc": "6327:2:62", + "nodeType": "YulIdentifier", + "src": "6327:2:62" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "6316:7:62", + "nodeType": "YulTypedName", + "src": "6316:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "6338:43:62", + "nodeType": "YulAssignment", + "src": "6338:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6366:9:62", + "nodeType": "YulIdentifier", + "src": "6366:9:62" + }, + { + "kind": "number", + "nativeSrc": "6377:2:62", + "nodeType": "YulLiteral", + "src": "6377:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6362:3:62", + "nodeType": "YulIdentifier", + "src": "6362:3:62" + }, + "nativeSrc": "6362:18:62", + "nodeType": "YulFunctionCall", + "src": "6362:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "6349:12:62", + "nodeType": "YulIdentifier", + "src": "6349:12:62" + }, + "nativeSrc": "6349:32:62", + "nodeType": "YulFunctionCall", + "src": "6349:32:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "6338:7:62", + "nodeType": "YulIdentifier", + "src": "6338:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "6401:6:62", + "nodeType": "YulIdentifier", + "src": "6401:6:62" + }, + { + "kind": "number", + "nativeSrc": "6409:2:62", + "nodeType": "YulLiteral", + "src": "6409:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6397:3:62", + "nodeType": "YulIdentifier", + "src": "6397:3:62" + }, + "nativeSrc": "6397:15:62", + "nodeType": "YulFunctionCall", + "src": "6397:15:62" + }, + { + "name": "value_2", + "nativeSrc": "6414:7:62", + "nodeType": "YulIdentifier", + "src": "6414:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6390:6:62", + "nodeType": "YulIdentifier", + "src": "6390:6:62" + }, + "nativeSrc": "6390:32:62", + "nodeType": "YulFunctionCall", + "src": "6390:32:62" + }, + "nativeSrc": "6390:32:62", + "nodeType": "YulExpressionStatement", + "src": "6390:32:62" + }, + { + "nativeSrc": "6431:16:62", + "nodeType": "YulAssignment", + "src": "6431:16:62", + "value": { + "name": "memPtr", + "nativeSrc": "6441:6:62", + "nodeType": "YulIdentifier", + "src": "6441:6:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "6431:6:62", + "nodeType": "YulIdentifier", + "src": "6431:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Receipt_$11685_memory_ptr", + "nativeSrc": "5572:881:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "5634:9:62", + "nodeType": "YulTypedName", + "src": "5634:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "5645:7:62", + "nodeType": "YulTypedName", + "src": "5645:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "5657:6:62", + "nodeType": "YulTypedName", + "src": "5657:6:62", + "type": "" + } + ], + "src": "5572:881:62" + }, + { + "body": { + "nativeSrc": "6559:102:62", + "nodeType": "YulBlock", + "src": "6559:102:62", + "statements": [ + { + "nativeSrc": "6569:26:62", + "nodeType": "YulAssignment", + "src": "6569:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6581:9:62", + "nodeType": "YulIdentifier", + "src": "6581:9:62" + }, + { + "kind": "number", + "nativeSrc": "6592:2:62", + "nodeType": "YulLiteral", + "src": "6592:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6577:3:62", + "nodeType": "YulIdentifier", + "src": "6577:3:62" + }, + "nativeSrc": "6577:18:62", + "nodeType": "YulFunctionCall", + "src": "6577:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "6569:4:62", + "nodeType": "YulIdentifier", + "src": "6569:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6611:9:62", + "nodeType": "YulIdentifier", + "src": "6611:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "6626:6:62", + "nodeType": "YulIdentifier", + "src": "6626:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6642:3:62", + "nodeType": "YulLiteral", + "src": "6642:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "6647:1:62", + "nodeType": "YulLiteral", + "src": "6647:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "6638:3:62", + "nodeType": "YulIdentifier", + "src": "6638:3:62" + }, + "nativeSrc": "6638:11:62", + "nodeType": "YulFunctionCall", + "src": "6638:11:62" + }, + { + "kind": "number", + "nativeSrc": "6651:1:62", + "nodeType": "YulLiteral", + "src": "6651:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "6634:3:62", + "nodeType": "YulIdentifier", + "src": "6634:3:62" + }, + "nativeSrc": "6634:19:62", + "nodeType": "YulFunctionCall", + "src": "6634:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "6622:3:62", + "nodeType": "YulIdentifier", + "src": "6622:3:62" + }, + "nativeSrc": "6622:32:62", + "nodeType": "YulFunctionCall", + "src": "6622:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6604:6:62", + "nodeType": "YulIdentifier", + "src": "6604:6:62" + }, + "nativeSrc": "6604:51:62", + "nodeType": "YulFunctionCall", + "src": "6604:51:62" + }, + "nativeSrc": "6604:51:62", + "nodeType": "YulExpressionStatement", + "src": "6604:51:62" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "6458:203:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "6528:9:62", + "nodeType": "YulTypedName", + "src": "6528:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "6539:6:62", + "nodeType": "YulTypedName", + "src": "6539:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "6550:4:62", + "nodeType": "YulTypedName", + "src": "6550:4:62", + "type": "" + } + ], + "src": "6458:203:62" + }, + { + "body": { + "nativeSrc": "6735:176:62", + "nodeType": "YulBlock", + "src": "6735:176:62", + "statements": [ + { + "body": { + "nativeSrc": "6781:16:62", + "nodeType": "YulBlock", + "src": "6781:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6790:1:62", + "nodeType": "YulLiteral", + "src": "6790:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "6793:1:62", + "nodeType": "YulLiteral", + "src": "6793:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "6783:6:62", + "nodeType": "YulIdentifier", + "src": "6783:6:62" + }, + "nativeSrc": "6783:12:62", + "nodeType": "YulFunctionCall", + "src": "6783:12:62" + }, + "nativeSrc": "6783:12:62", + "nodeType": "YulExpressionStatement", + "src": "6783:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "6756:7:62", + "nodeType": "YulIdentifier", + "src": "6756:7:62" + }, + { + "name": "headStart", + "nativeSrc": "6765:9:62", + "nodeType": "YulIdentifier", + "src": "6765:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "6752:3:62", + "nodeType": "YulIdentifier", + "src": "6752:3:62" + }, + "nativeSrc": "6752:23:62", + "nodeType": "YulFunctionCall", + "src": "6752:23:62" + }, + { + "kind": "number", + "nativeSrc": "6777:2:62", + "nodeType": "YulLiteral", + "src": "6777:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "6748:3:62", + "nodeType": "YulIdentifier", + "src": "6748:3:62" + }, + "nativeSrc": "6748:32:62", + "nodeType": "YulFunctionCall", + "src": "6748:32:62" + }, + "nativeSrc": "6745:52:62", + "nodeType": "YulIf", + "src": "6745:52:62" + }, + { + "nativeSrc": "6806:36:62", + "nodeType": "YulVariableDeclaration", + "src": "6806:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6832:9:62", + "nodeType": "YulIdentifier", + "src": "6832:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "6819:12:62", + "nodeType": "YulIdentifier", + "src": "6819:12:62" + }, + "nativeSrc": "6819:23:62", + "nodeType": "YulFunctionCall", + "src": "6819:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "6810:5:62", + "nodeType": "YulTypedName", + "src": "6810:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "6875:5:62", + "nodeType": "YulIdentifier", + "src": "6875:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint32", + "nativeSrc": "6851:23:62", + "nodeType": "YulIdentifier", + "src": "6851:23:62" + }, + "nativeSrc": "6851:30:62", + "nodeType": "YulFunctionCall", + "src": "6851:30:62" + }, + "nativeSrc": "6851:30:62", + "nodeType": "YulExpressionStatement", + "src": "6851:30:62" + }, + { + "nativeSrc": "6890:15:62", + "nodeType": "YulAssignment", + "src": "6890:15:62", + "value": { + "name": "value", + "nativeSrc": "6900:5:62", + "nodeType": "YulIdentifier", + "src": "6900:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "6890:6:62", + "nodeType": "YulIdentifier", + "src": "6890:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint32", + "nativeSrc": "6666:245:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "6701:9:62", + "nodeType": "YulTypedName", + "src": "6701:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "6712:7:62", + "nodeType": "YulTypedName", + "src": "6712:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "6724:6:62", + "nodeType": "YulTypedName", + "src": "6724:6:62", + "type": "" + } + ], + "src": "6666:245:62" + }, + { + "body": { + "nativeSrc": "6986:177:62", + "nodeType": "YulBlock", + "src": "6986:177:62", + "statements": [ + { + "body": { + "nativeSrc": "7032:16:62", + "nodeType": "YulBlock", + "src": "7032:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7041:1:62", + "nodeType": "YulLiteral", + "src": "7041:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "7044:1:62", + "nodeType": "YulLiteral", + "src": "7044:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "7034:6:62", + "nodeType": "YulIdentifier", + "src": "7034:6:62" + }, + "nativeSrc": "7034:12:62", + "nodeType": "YulFunctionCall", + "src": "7034:12:62" + }, + "nativeSrc": "7034:12:62", + "nodeType": "YulExpressionStatement", + "src": "7034:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "7007:7:62", + "nodeType": "YulIdentifier", + "src": "7007:7:62" + }, + { + "name": "headStart", + "nativeSrc": "7016:9:62", + "nodeType": "YulIdentifier", + "src": "7016:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "7003:3:62", + "nodeType": "YulIdentifier", + "src": "7003:3:62" + }, + "nativeSrc": "7003:23:62", + "nodeType": "YulFunctionCall", + "src": "7003:23:62" + }, + { + "kind": "number", + "nativeSrc": "7028:2:62", + "nodeType": "YulLiteral", + "src": "7028:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "6999:3:62", + "nodeType": "YulIdentifier", + "src": "6999:3:62" + }, + "nativeSrc": "6999:32:62", + "nodeType": "YulFunctionCall", + "src": "6999:32:62" + }, + "nativeSrc": "6996:52:62", + "nodeType": "YulIf", + "src": "6996:52:62" + }, + { + "nativeSrc": "7057:36:62", + "nodeType": "YulVariableDeclaration", + "src": "7057:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7083:9:62", + "nodeType": "YulIdentifier", + "src": "7083:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "7070:12:62", + "nodeType": "YulIdentifier", + "src": "7070:12:62" + }, + "nativeSrc": "7070:23:62", + "nodeType": "YulFunctionCall", + "src": "7070:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "7061:5:62", + "nodeType": "YulTypedName", + "src": "7061:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "7127:5:62", + "nodeType": "YulIdentifier", + "src": "7127:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "7102:24:62", + "nodeType": "YulIdentifier", + "src": "7102:24:62" + }, + "nativeSrc": "7102:31:62", + "nodeType": "YulFunctionCall", + "src": "7102:31:62" + }, + "nativeSrc": "7102:31:62", + "nodeType": "YulExpressionStatement", + "src": "7102:31:62" + }, + { + "nativeSrc": "7142:15:62", + "nodeType": "YulAssignment", + "src": "7142:15:62", + "value": { + "name": "value", + "nativeSrc": "7152:5:62", + "nodeType": "YulIdentifier", + "src": "7152:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "7142:6:62", + "nodeType": "YulIdentifier", + "src": "7142:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nativeSrc": "6916:247:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "6952:9:62", + "nodeType": "YulTypedName", + "src": "6952:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "6963:7:62", + "nodeType": "YulTypedName", + "src": "6963:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "6975:6:62", + "nodeType": "YulTypedName", + "src": "6975:6:62", + "type": "" + } + ], + "src": "6916:247:62" + }, + { + "body": { + "nativeSrc": "7263:92:62", + "nodeType": "YulBlock", + "src": "7263:92:62", + "statements": [ + { + "nativeSrc": "7273:26:62", + "nodeType": "YulAssignment", + "src": "7273:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7285:9:62", + "nodeType": "YulIdentifier", + "src": "7285:9:62" + }, + { + "kind": "number", + "nativeSrc": "7296:2:62", + "nodeType": "YulLiteral", + "src": "7296:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7281:3:62", + "nodeType": "YulIdentifier", + "src": "7281:3:62" + }, + "nativeSrc": "7281:18:62", + "nodeType": "YulFunctionCall", + "src": "7281:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "7273:4:62", + "nodeType": "YulIdentifier", + "src": "7273:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7315:9:62", + "nodeType": "YulIdentifier", + "src": "7315:9:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "7340:6:62", + "nodeType": "YulIdentifier", + "src": "7340:6:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "7333:6:62", + "nodeType": "YulIdentifier", + "src": "7333:6:62" + }, + "nativeSrc": "7333:14:62", + "nodeType": "YulFunctionCall", + "src": "7333:14:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "7326:6:62", + "nodeType": "YulIdentifier", + "src": "7326:6:62" + }, + "nativeSrc": "7326:22:62", + "nodeType": "YulFunctionCall", + "src": "7326:22:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7308:6:62", + "nodeType": "YulIdentifier", + "src": "7308:6:62" + }, + "nativeSrc": "7308:41:62", + "nodeType": "YulFunctionCall", + "src": "7308:41:62" + }, + "nativeSrc": "7308:41:62", + "nodeType": "YulExpressionStatement", + "src": "7308:41:62" + } + ] + }, + "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", + "nativeSrc": "7168:187:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "7232:9:62", + "nodeType": "YulTypedName", + "src": "7232:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "7243:6:62", + "nodeType": "YulTypedName", + "src": "7243:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "7254:4:62", + "nodeType": "YulTypedName", + "src": "7254:4:62", + "type": "" + } + ], + "src": "7168:187:62" + }, + { + "body": { + "nativeSrc": "7432:275:62", + "nodeType": "YulBlock", + "src": "7432:275:62", + "statements": [ + { + "body": { + "nativeSrc": "7481:16:62", + "nodeType": "YulBlock", + "src": "7481:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7490:1:62", + "nodeType": "YulLiteral", + "src": "7490:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "7493:1:62", + "nodeType": "YulLiteral", + "src": "7493:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "7483:6:62", + "nodeType": "YulIdentifier", + "src": "7483:6:62" + }, + "nativeSrc": "7483:12:62", + "nodeType": "YulFunctionCall", + "src": "7483:12:62" + }, + "nativeSrc": "7483:12:62", + "nodeType": "YulExpressionStatement", + "src": "7483:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "7460:6:62", + "nodeType": "YulIdentifier", + "src": "7460:6:62" + }, + { + "kind": "number", + "nativeSrc": "7468:4:62", + "nodeType": "YulLiteral", + "src": "7468:4:62", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7456:3:62", + "nodeType": "YulIdentifier", + "src": "7456:3:62" + }, + "nativeSrc": "7456:17:62", + "nodeType": "YulFunctionCall", + "src": "7456:17:62" + }, + { + "name": "end", + "nativeSrc": "7475:3:62", + "nodeType": "YulIdentifier", + "src": "7475:3:62" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "7452:3:62", + "nodeType": "YulIdentifier", + "src": "7452:3:62" + }, + "nativeSrc": "7452:27:62", + "nodeType": "YulFunctionCall", + "src": "7452:27:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "7445:6:62", + "nodeType": "YulIdentifier", + "src": "7445:6:62" + }, + "nativeSrc": "7445:35:62", + "nodeType": "YulFunctionCall", + "src": "7445:35:62" + }, + "nativeSrc": "7442:55:62", + "nodeType": "YulIf", + "src": "7442:55:62" + }, + { + "nativeSrc": "7506:30:62", + "nodeType": "YulAssignment", + "src": "7506:30:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "7529:6:62", + "nodeType": "YulIdentifier", + "src": "7529:6:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "7516:12:62", + "nodeType": "YulIdentifier", + "src": "7516:12:62" + }, + "nativeSrc": "7516:20:62", + "nodeType": "YulFunctionCall", + "src": "7516:20:62" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "7506:6:62", + "nodeType": "YulIdentifier", + "src": "7506:6:62" + } + ] + }, + { + "body": { + "nativeSrc": "7579:16:62", + "nodeType": "YulBlock", + "src": "7579:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7588:1:62", + "nodeType": "YulLiteral", + "src": "7588:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "7591:1:62", + "nodeType": "YulLiteral", + "src": "7591:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "7581:6:62", + "nodeType": "YulIdentifier", + "src": "7581:6:62" + }, + "nativeSrc": "7581:12:62", + "nodeType": "YulFunctionCall", + "src": "7581:12:62" + }, + "nativeSrc": "7581:12:62", + "nodeType": "YulExpressionStatement", + "src": "7581:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nativeSrc": "7551:6:62", + "nodeType": "YulIdentifier", + "src": "7551:6:62" + }, + { + "kind": "number", + "nativeSrc": "7559:18:62", + "nodeType": "YulLiteral", + "src": "7559:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "7548:2:62", + "nodeType": "YulIdentifier", + "src": "7548:2:62" + }, + "nativeSrc": "7548:30:62", + "nodeType": "YulFunctionCall", + "src": "7548:30:62" + }, + "nativeSrc": "7545:50:62", + "nodeType": "YulIf", + "src": "7545:50:62" + }, + { + "nativeSrc": "7604:29:62", + "nodeType": "YulAssignment", + "src": "7604:29:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "7620:6:62", + "nodeType": "YulIdentifier", + "src": "7620:6:62" + }, + { + "kind": "number", + "nativeSrc": "7628:4:62", + "nodeType": "YulLiteral", + "src": "7628:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7616:3:62", + "nodeType": "YulIdentifier", + "src": "7616:3:62" + }, + "nativeSrc": "7616:17:62", + "nodeType": "YulFunctionCall", + "src": "7616:17:62" + }, + "variableNames": [ + { + "name": "arrayPos", + "nativeSrc": "7604:8:62", + "nodeType": "YulIdentifier", + "src": "7604:8:62" + } + ] + }, + { + "body": { + "nativeSrc": "7685:16:62", + "nodeType": "YulBlock", + "src": "7685:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7694:1:62", + "nodeType": "YulLiteral", + "src": "7694:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "7697:1:62", + "nodeType": "YulLiteral", + "src": "7697:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "7687:6:62", + "nodeType": "YulIdentifier", + "src": "7687:6:62" + }, + "nativeSrc": "7687:12:62", + "nodeType": "YulFunctionCall", + "src": "7687:12:62" + }, + "nativeSrc": "7687:12:62", + "nodeType": "YulExpressionStatement", + "src": "7687:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "7656:6:62", + "nodeType": "YulIdentifier", + "src": "7656:6:62" + }, + { + "name": "length", + "nativeSrc": "7664:6:62", + "nodeType": "YulIdentifier", + "src": "7664:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7652:3:62", + "nodeType": "YulIdentifier", + "src": "7652:3:62" + }, + "nativeSrc": "7652:19:62", + "nodeType": "YulFunctionCall", + "src": "7652:19:62" + }, + { + "kind": "number", + "nativeSrc": "7673:4:62", + "nodeType": "YulLiteral", + "src": "7673:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7648:3:62", + "nodeType": "YulIdentifier", + "src": "7648:3:62" + }, + "nativeSrc": "7648:30:62", + "nodeType": "YulFunctionCall", + "src": "7648:30:62" + }, + { + "name": "end", + "nativeSrc": "7680:3:62", + "nodeType": "YulIdentifier", + "src": "7680:3:62" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "7645:2:62", + "nodeType": "YulIdentifier", + "src": "7645:2:62" + }, + "nativeSrc": "7645:39:62", + "nodeType": "YulFunctionCall", + "src": "7645:39:62" + }, + "nativeSrc": "7642:59:62", + "nodeType": "YulIf", + "src": "7642:59:62" + } + ] + }, + "name": "abi_decode_bytes_calldata", + "nativeSrc": "7360:347:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "7395:6:62", + "nodeType": "YulTypedName", + "src": "7395:6:62", + "type": "" + }, + { + "name": "end", + "nativeSrc": "7403:3:62", + "nodeType": "YulTypedName", + "src": "7403:3:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "arrayPos", + "nativeSrc": "7411:8:62", + "nodeType": "YulTypedName", + "src": "7411:8:62", + "type": "" + }, + { + "name": "length", + "nativeSrc": "7421:6:62", + "nodeType": "YulTypedName", + "src": "7421:6:62", + "type": "" + } + ], + "src": "7360:347:62" + }, + { + "body": { + "nativeSrc": "7801:320:62", + "nodeType": "YulBlock", + "src": "7801:320:62", + "statements": [ + { + "body": { + "nativeSrc": "7847:16:62", + "nodeType": "YulBlock", + "src": "7847:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7856:1:62", + "nodeType": "YulLiteral", + "src": "7856:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "7859:1:62", + "nodeType": "YulLiteral", + "src": "7859:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "7849:6:62", + "nodeType": "YulIdentifier", + "src": "7849:6:62" + }, + "nativeSrc": "7849:12:62", + "nodeType": "YulFunctionCall", + "src": "7849:12:62" + }, + "nativeSrc": "7849:12:62", + "nodeType": "YulExpressionStatement", + "src": "7849:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "7822:7:62", + "nodeType": "YulIdentifier", + "src": "7822:7:62" + }, + { + "name": "headStart", + "nativeSrc": "7831:9:62", + "nodeType": "YulIdentifier", + "src": "7831:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "7818:3:62", + "nodeType": "YulIdentifier", + "src": "7818:3:62" + }, + "nativeSrc": "7818:23:62", + "nodeType": "YulFunctionCall", + "src": "7818:23:62" + }, + { + "kind": "number", + "nativeSrc": "7843:2:62", + "nodeType": "YulLiteral", + "src": "7843:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "7814:3:62", + "nodeType": "YulIdentifier", + "src": "7814:3:62" + }, + "nativeSrc": "7814:32:62", + "nodeType": "YulFunctionCall", + "src": "7814:32:62" + }, + "nativeSrc": "7811:52:62", + "nodeType": "YulIf", + "src": "7811:52:62" + }, + { + "nativeSrc": "7872:37:62", + "nodeType": "YulVariableDeclaration", + "src": "7872:37:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7899:9:62", + "nodeType": "YulIdentifier", + "src": "7899:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "7886:12:62", + "nodeType": "YulIdentifier", + "src": "7886:12:62" + }, + "nativeSrc": "7886:23:62", + "nodeType": "YulFunctionCall", + "src": "7886:23:62" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "7876:6:62", + "nodeType": "YulTypedName", + "src": "7876:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "7952:16:62", + "nodeType": "YulBlock", + "src": "7952:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7961:1:62", + "nodeType": "YulLiteral", + "src": "7961:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "7964:1:62", + "nodeType": "YulLiteral", + "src": "7964:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "7954:6:62", + "nodeType": "YulIdentifier", + "src": "7954:6:62" + }, + "nativeSrc": "7954:12:62", + "nodeType": "YulFunctionCall", + "src": "7954:12:62" + }, + "nativeSrc": "7954:12:62", + "nodeType": "YulExpressionStatement", + "src": "7954:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "7924:6:62", + "nodeType": "YulIdentifier", + "src": "7924:6:62" + }, + { + "kind": "number", + "nativeSrc": "7932:18:62", + "nodeType": "YulLiteral", + "src": "7932:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "7921:2:62", + "nodeType": "YulIdentifier", + "src": "7921:2:62" + }, + "nativeSrc": "7921:30:62", + "nodeType": "YulFunctionCall", + "src": "7921:30:62" + }, + "nativeSrc": "7918:50:62", + "nodeType": "YulIf", + "src": "7918:50:62" + }, + { + "nativeSrc": "7977:84:62", + "nodeType": "YulVariableDeclaration", + "src": "7977:84:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8033:9:62", + "nodeType": "YulIdentifier", + "src": "8033:9:62" + }, + { + "name": "offset", + "nativeSrc": "8044:6:62", + "nodeType": "YulIdentifier", + "src": "8044:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8029:3:62", + "nodeType": "YulIdentifier", + "src": "8029:3:62" + }, + "nativeSrc": "8029:22:62", + "nodeType": "YulFunctionCall", + "src": "8029:22:62" + }, + { + "name": "dataEnd", + "nativeSrc": "8053:7:62", + "nodeType": "YulIdentifier", + "src": "8053:7:62" + } + ], + "functionName": { + "name": "abi_decode_bytes_calldata", + "nativeSrc": "8003:25:62", + "nodeType": "YulIdentifier", + "src": "8003:25:62" + }, + "nativeSrc": "8003:58:62", + "nodeType": "YulFunctionCall", + "src": "8003:58:62" + }, + "variables": [ + { + "name": "value0_1", + "nativeSrc": "7981:8:62", + "nodeType": "YulTypedName", + "src": "7981:8:62", + "type": "" + }, + { + "name": "value1_1", + "nativeSrc": "7991:8:62", + "nodeType": "YulTypedName", + "src": "7991:8:62", + "type": "" + } + ] + }, + { + "nativeSrc": "8070:18:62", + "nodeType": "YulAssignment", + "src": "8070:18:62", + "value": { + "name": "value0_1", + "nativeSrc": "8080:8:62", + "nodeType": "YulIdentifier", + "src": "8080:8:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "8070:6:62", + "nodeType": "YulIdentifier", + "src": "8070:6:62" + } + ] + }, + { + "nativeSrc": "8097:18:62", + "nodeType": "YulAssignment", + "src": "8097:18:62", + "value": { + "name": "value1_1", + "nativeSrc": "8107:8:62", + "nodeType": "YulIdentifier", + "src": "8107:8:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "8097:6:62", + "nodeType": "YulIdentifier", + "src": "8097:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes_calldata_ptr", + "nativeSrc": "7712:409:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "7759:9:62", + "nodeType": "YulTypedName", + "src": "7759:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "7770:7:62", + "nodeType": "YulTypedName", + "src": "7770:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "7782:6:62", + "nodeType": "YulTypedName", + "src": "7782:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "7790:6:62", + "nodeType": "YulTypedName", + "src": "7790:6:62", + "type": "" + } + ], + "src": "7712:409:62" + }, + { + "body": { + "nativeSrc": "8251:587:62", + "nodeType": "YulBlock", + "src": "8251:587:62", + "statements": [ + { + "body": { + "nativeSrc": "8297:16:62", + "nodeType": "YulBlock", + "src": "8297:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8306:1:62", + "nodeType": "YulLiteral", + "src": "8306:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "8309:1:62", + "nodeType": "YulLiteral", + "src": "8309:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "8299:6:62", + "nodeType": "YulIdentifier", + "src": "8299:6:62" + }, + "nativeSrc": "8299:12:62", + "nodeType": "YulFunctionCall", + "src": "8299:12:62" + }, + "nativeSrc": "8299:12:62", + "nodeType": "YulExpressionStatement", + "src": "8299:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "8272:7:62", + "nodeType": "YulIdentifier", + "src": "8272:7:62" + }, + { + "name": "headStart", + "nativeSrc": "8281:9:62", + "nodeType": "YulIdentifier", + "src": "8281:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "8268:3:62", + "nodeType": "YulIdentifier", + "src": "8268:3:62" + }, + "nativeSrc": "8268:23:62", + "nodeType": "YulFunctionCall", + "src": "8268:23:62" + }, + { + "kind": "number", + "nativeSrc": "8293:2:62", + "nodeType": "YulLiteral", + "src": "8293:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "8264:3:62", + "nodeType": "YulIdentifier", + "src": "8264:3:62" + }, + "nativeSrc": "8264:32:62", + "nodeType": "YulFunctionCall", + "src": "8264:32:62" + }, + "nativeSrc": "8261:52:62", + "nodeType": "YulIf", + "src": "8261:52:62" + }, + { + "nativeSrc": "8322:37:62", + "nodeType": "YulVariableDeclaration", + "src": "8322:37:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8349:9:62", + "nodeType": "YulIdentifier", + "src": "8349:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "8336:12:62", + "nodeType": "YulIdentifier", + "src": "8336:12:62" + }, + "nativeSrc": "8336:23:62", + "nodeType": "YulFunctionCall", + "src": "8336:23:62" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "8326:6:62", + "nodeType": "YulTypedName", + "src": "8326:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "8402:16:62", + "nodeType": "YulBlock", + "src": "8402:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8411:1:62", + "nodeType": "YulLiteral", + "src": "8411:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "8414:1:62", + "nodeType": "YulLiteral", + "src": "8414:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "8404:6:62", + "nodeType": "YulIdentifier", + "src": "8404:6:62" + }, + "nativeSrc": "8404:12:62", + "nodeType": "YulFunctionCall", + "src": "8404:12:62" + }, + "nativeSrc": "8404:12:62", + "nodeType": "YulExpressionStatement", + "src": "8404:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "8374:6:62", + "nodeType": "YulIdentifier", + "src": "8374:6:62" + }, + { + "kind": "number", + "nativeSrc": "8382:18:62", + "nodeType": "YulLiteral", + "src": "8382:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "8371:2:62", + "nodeType": "YulIdentifier", + "src": "8371:2:62" + }, + "nativeSrc": "8371:30:62", + "nodeType": "YulFunctionCall", + "src": "8371:30:62" + }, + "nativeSrc": "8368:50:62", + "nodeType": "YulIf", + "src": "8368:50:62" + }, + { + "nativeSrc": "8427:84:62", + "nodeType": "YulVariableDeclaration", + "src": "8427:84:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8483:9:62", + "nodeType": "YulIdentifier", + "src": "8483:9:62" + }, + { + "name": "offset", + "nativeSrc": "8494:6:62", + "nodeType": "YulIdentifier", + "src": "8494:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8479:3:62", + "nodeType": "YulIdentifier", + "src": "8479:3:62" + }, + "nativeSrc": "8479:22:62", + "nodeType": "YulFunctionCall", + "src": "8479:22:62" + }, + { + "name": "dataEnd", + "nativeSrc": "8503:7:62", + "nodeType": "YulIdentifier", + "src": "8503:7:62" + } + ], + "functionName": { + "name": "abi_decode_bytes_calldata", + "nativeSrc": "8453:25:62", + "nodeType": "YulIdentifier", + "src": "8453:25:62" + }, + "nativeSrc": "8453:58:62", + "nodeType": "YulFunctionCall", + "src": "8453:58:62" + }, + "variables": [ + { + "name": "value0_1", + "nativeSrc": "8431:8:62", + "nodeType": "YulTypedName", + "src": "8431:8:62", + "type": "" + }, + { + "name": "value1_1", + "nativeSrc": "8441:8:62", + "nodeType": "YulTypedName", + "src": "8441:8:62", + "type": "" + } + ] + }, + { + "nativeSrc": "8520:18:62", + "nodeType": "YulAssignment", + "src": "8520:18:62", + "value": { + "name": "value0_1", + "nativeSrc": "8530:8:62", + "nodeType": "YulIdentifier", + "src": "8530:8:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "8520:6:62", + "nodeType": "YulIdentifier", + "src": "8520:6:62" + } + ] + }, + { + "nativeSrc": "8547:18:62", + "nodeType": "YulAssignment", + "src": "8547:18:62", + "value": { + "name": "value1_1", + "nativeSrc": "8557:8:62", + "nodeType": "YulIdentifier", + "src": "8557:8:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "8547:6:62", + "nodeType": "YulIdentifier", + "src": "8547:6:62" + } + ] + }, + { + "nativeSrc": "8574:48:62", + "nodeType": "YulVariableDeclaration", + "src": "8574:48:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8607:9:62", + "nodeType": "YulIdentifier", + "src": "8607:9:62" + }, + { + "kind": "number", + "nativeSrc": "8618:2:62", + "nodeType": "YulLiteral", + "src": "8618:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8603:3:62", + "nodeType": "YulIdentifier", + "src": "8603:3:62" + }, + "nativeSrc": "8603:18:62", + "nodeType": "YulFunctionCall", + "src": "8603:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "8590:12:62", + "nodeType": "YulIdentifier", + "src": "8590:12:62" + }, + "nativeSrc": "8590:32:62", + "nodeType": "YulFunctionCall", + "src": "8590:32:62" + }, + "variables": [ + { + "name": "offset_1", + "nativeSrc": "8578:8:62", + "nodeType": "YulTypedName", + "src": "8578:8:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "8667:16:62", + "nodeType": "YulBlock", + "src": "8667:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8676:1:62", + "nodeType": "YulLiteral", + "src": "8676:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "8679:1:62", + "nodeType": "YulLiteral", + "src": "8679:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "8669:6:62", + "nodeType": "YulIdentifier", + "src": "8669:6:62" + }, + "nativeSrc": "8669:12:62", + "nodeType": "YulFunctionCall", + "src": "8669:12:62" + }, + "nativeSrc": "8669:12:62", + "nodeType": "YulExpressionStatement", + "src": "8669:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nativeSrc": "8637:8:62", + "nodeType": "YulIdentifier", + "src": "8637:8:62" + }, + { + "kind": "number", + "nativeSrc": "8647:18:62", + "nodeType": "YulLiteral", + "src": "8647:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "8634:2:62", + "nodeType": "YulIdentifier", + "src": "8634:2:62" + }, + "nativeSrc": "8634:32:62", + "nodeType": "YulFunctionCall", + "src": "8634:32:62" + }, + "nativeSrc": "8631:52:62", + "nodeType": "YulIf", + "src": "8631:52:62" + }, + { + "nativeSrc": "8692:86:62", + "nodeType": "YulVariableDeclaration", + "src": "8692:86:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8748:9:62", + "nodeType": "YulIdentifier", + "src": "8748:9:62" + }, + { + "name": "offset_1", + "nativeSrc": "8759:8:62", + "nodeType": "YulIdentifier", + "src": "8759:8:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8744:3:62", + "nodeType": "YulIdentifier", + "src": "8744:3:62" + }, + "nativeSrc": "8744:24:62", + "nodeType": "YulFunctionCall", + "src": "8744:24:62" + }, + { + "name": "dataEnd", + "nativeSrc": "8770:7:62", + "nodeType": "YulIdentifier", + "src": "8770:7:62" + } + ], + "functionName": { + "name": "abi_decode_bytes_calldata", + "nativeSrc": "8718:25:62", + "nodeType": "YulIdentifier", + "src": "8718:25:62" + }, + "nativeSrc": "8718:60:62", + "nodeType": "YulFunctionCall", + "src": "8718:60:62" + }, + "variables": [ + { + "name": "value2_1", + "nativeSrc": "8696:8:62", + "nodeType": "YulTypedName", + "src": "8696:8:62", + "type": "" + }, + { + "name": "value3_1", + "nativeSrc": "8706:8:62", + "nodeType": "YulTypedName", + "src": "8706:8:62", + "type": "" + } + ] + }, + { + "nativeSrc": "8787:18:62", + "nodeType": "YulAssignment", + "src": "8787:18:62", + "value": { + "name": "value2_1", + "nativeSrc": "8797:8:62", + "nodeType": "YulIdentifier", + "src": "8797:8:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "8787:6:62", + "nodeType": "YulIdentifier", + "src": "8787:6:62" + } + ] + }, + { + "nativeSrc": "8814:18:62", + "nodeType": "YulAssignment", + "src": "8814:18:62", + "value": { + "name": "value3_1", + "nativeSrc": "8824:8:62", + "nodeType": "YulIdentifier", + "src": "8824:8:62" + }, + "variableNames": [ + { + "name": "value3", + "nativeSrc": "8814:6:62", + "nodeType": "YulIdentifier", + "src": "8814:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes_calldata_ptrt_bytes_calldata_ptr", + "nativeSrc": "8126:712:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "8193:9:62", + "nodeType": "YulTypedName", + "src": "8193:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "8204:7:62", + "nodeType": "YulTypedName", + "src": "8204:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "8216:6:62", + "nodeType": "YulTypedName", + "src": "8216:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "8224:6:62", + "nodeType": "YulTypedName", + "src": "8224:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "8232:6:62", + "nodeType": "YulTypedName", + "src": "8232:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "8240:6:62", + "nodeType": "YulTypedName", + "src": "8240:6:62", + "type": "" + } + ], + "src": "8126:712:62" + }, + { + "body": { + "nativeSrc": "8972:119:62", + "nodeType": "YulBlock", + "src": "8972:119:62", + "statements": [ + { + "nativeSrc": "8982:26:62", + "nodeType": "YulAssignment", + "src": "8982:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8994:9:62", + "nodeType": "YulIdentifier", + "src": "8994:9:62" + }, + { + "kind": "number", + "nativeSrc": "9005:2:62", + "nodeType": "YulLiteral", + "src": "9005:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8990:3:62", + "nodeType": "YulIdentifier", + "src": "8990:3:62" + }, + "nativeSrc": "8990:18:62", + "nodeType": "YulFunctionCall", + "src": "8990:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "8982:4:62", + "nodeType": "YulIdentifier", + "src": "8982:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9024:9:62", + "nodeType": "YulIdentifier", + "src": "9024:9:62" + }, + { + "name": "value0", + "nativeSrc": "9035:6:62", + "nodeType": "YulIdentifier", + "src": "9035:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9017:6:62", + "nodeType": "YulIdentifier", + "src": "9017:6:62" + }, + "nativeSrc": "9017:25:62", + "nodeType": "YulFunctionCall", + "src": "9017:25:62" + }, + "nativeSrc": "9017:25:62", + "nodeType": "YulExpressionStatement", + "src": "9017:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9062:9:62", + "nodeType": "YulIdentifier", + "src": "9062:9:62" + }, + { + "kind": "number", + "nativeSrc": "9073:2:62", + "nodeType": "YulLiteral", + "src": "9073:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9058:3:62", + "nodeType": "YulIdentifier", + "src": "9058:3:62" + }, + "nativeSrc": "9058:18:62", + "nodeType": "YulFunctionCall", + "src": "9058:18:62" + }, + { + "name": "value1", + "nativeSrc": "9078:6:62", + "nodeType": "YulIdentifier", + "src": "9078:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9051:6:62", + "nodeType": "YulIdentifier", + "src": "9051:6:62" + }, + "nativeSrc": "9051:34:62", + "nodeType": "YulFunctionCall", + "src": "9051:34:62" + }, + "nativeSrc": "9051:34:62", + "nodeType": "YulExpressionStatement", + "src": "9051:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed", + "nativeSrc": "8843:248:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "8933:9:62", + "nodeType": "YulTypedName", + "src": "8933:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "8944:6:62", + "nodeType": "YulTypedName", + "src": "8944:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "8952:6:62", + "nodeType": "YulTypedName", + "src": "8952:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "8963:4:62", + "nodeType": "YulTypedName", + "src": "8963:4:62", + "type": "" + } + ], + "src": "8843:248:62" + }, + { + "body": { + "nativeSrc": "9158:841:62", + "nodeType": "YulBlock", + "src": "9158:841:62", + "statements": [ + { + "body": { + "nativeSrc": "9202:16:62", + "nodeType": "YulBlock", + "src": "9202:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "9211:1:62", + "nodeType": "YulLiteral", + "src": "9211:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "9214:1:62", + "nodeType": "YulLiteral", + "src": "9214:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "9204:6:62", + "nodeType": "YulIdentifier", + "src": "9204:6:62" + }, + "nativeSrc": "9204:12:62", + "nodeType": "YulFunctionCall", + "src": "9204:12:62" + }, + "nativeSrc": "9204:12:62", + "nodeType": "YulExpressionStatement", + "src": "9204:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nativeSrc": "9179:3:62", + "nodeType": "YulIdentifier", + "src": "9179:3:62" + }, + { + "name": "headStart", + "nativeSrc": "9184:9:62", + "nodeType": "YulIdentifier", + "src": "9184:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "9175:3:62", + "nodeType": "YulIdentifier", + "src": "9175:3:62" + }, + "nativeSrc": "9175:19:62", + "nodeType": "YulFunctionCall", + "src": "9175:19:62" + }, + { + "kind": "number", + "nativeSrc": "9196:4:62", + "nodeType": "YulLiteral", + "src": "9196:4:62", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "9171:3:62", + "nodeType": "YulIdentifier", + "src": "9171:3:62" + }, + "nativeSrc": "9171:30:62", + "nodeType": "YulFunctionCall", + "src": "9171:30:62" + }, + "nativeSrc": "9168:50:62", + "nodeType": "YulIf", + "src": "9168:50:62" + }, + { + "nativeSrc": "9227:31:62", + "nodeType": "YulAssignment", + "src": "9227:31:62", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_memory_2163", + "nativeSrc": "9236:20:62", + "nodeType": "YulIdentifier", + "src": "9236:20:62" + }, + "nativeSrc": "9236:22:62", + "nodeType": "YulFunctionCall", + "src": "9236:22:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "9227:5:62", + "nodeType": "YulIdentifier", + "src": "9227:5:62" + } + ] + }, + { + "nativeSrc": "9267:16:62", + "nodeType": "YulVariableDeclaration", + "src": "9267:16:62", + "value": { + "kind": "number", + "nativeSrc": "9282:1:62", + "nodeType": "YulLiteral", + "src": "9282:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "9271:7:62", + "nodeType": "YulTypedName", + "src": "9271:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "9292:34:62", + "nodeType": "YulAssignment", + "src": "9292:34:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9316:9:62", + "nodeType": "YulIdentifier", + "src": "9316:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "9303:12:62", + "nodeType": "YulIdentifier", + "src": "9303:12:62" + }, + "nativeSrc": "9303:23:62", + "nodeType": "YulFunctionCall", + "src": "9303:23:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "9292:7:62", + "nodeType": "YulIdentifier", + "src": "9292:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "9342:5:62", + "nodeType": "YulIdentifier", + "src": "9342:5:62" + }, + { + "name": "value_1", + "nativeSrc": "9349:7:62", + "nodeType": "YulIdentifier", + "src": "9349:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9335:6:62", + "nodeType": "YulIdentifier", + "src": "9335:6:62" + }, + "nativeSrc": "9335:22:62", + "nodeType": "YulFunctionCall", + "src": "9335:22:62" + }, + "nativeSrc": "9335:22:62", + "nodeType": "YulExpressionStatement", + "src": "9335:22:62" + }, + { + "nativeSrc": "9366:16:62", + "nodeType": "YulVariableDeclaration", + "src": "9366:16:62", + "value": { + "kind": "number", + "nativeSrc": "9381:1:62", + "nodeType": "YulLiteral", + "src": "9381:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "9370:7:62", + "nodeType": "YulTypedName", + "src": "9370:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "9391:43:62", + "nodeType": "YulAssignment", + "src": "9391:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9419:9:62", + "nodeType": "YulIdentifier", + "src": "9419:9:62" + }, + { + "kind": "number", + "nativeSrc": "9430:2:62", + "nodeType": "YulLiteral", + "src": "9430:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9415:3:62", + "nodeType": "YulIdentifier", + "src": "9415:3:62" + }, + "nativeSrc": "9415:18:62", + "nodeType": "YulFunctionCall", + "src": "9415:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "9402:12:62", + "nodeType": "YulIdentifier", + "src": "9402:12:62" + }, + "nativeSrc": "9402:32:62", + "nodeType": "YulFunctionCall", + "src": "9402:32:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "9391:7:62", + "nodeType": "YulIdentifier", + "src": "9391:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "9454:5:62", + "nodeType": "YulIdentifier", + "src": "9454:5:62" + }, + { + "kind": "number", + "nativeSrc": "9461:2:62", + "nodeType": "YulLiteral", + "src": "9461:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9450:3:62", + "nodeType": "YulIdentifier", + "src": "9450:3:62" + }, + "nativeSrc": "9450:14:62", + "nodeType": "YulFunctionCall", + "src": "9450:14:62" + }, + { + "name": "value_2", + "nativeSrc": "9466:7:62", + "nodeType": "YulIdentifier", + "src": "9466:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9443:6:62", + "nodeType": "YulIdentifier", + "src": "9443:6:62" + }, + "nativeSrc": "9443:31:62", + "nodeType": "YulFunctionCall", + "src": "9443:31:62" + }, + "nativeSrc": "9443:31:62", + "nodeType": "YulExpressionStatement", + "src": "9443:31:62" + }, + { + "nativeSrc": "9483:16:62", + "nodeType": "YulVariableDeclaration", + "src": "9483:16:62", + "value": { + "kind": "number", + "nativeSrc": "9498:1:62", + "nodeType": "YulLiteral", + "src": "9498:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_3", + "nativeSrc": "9487:7:62", + "nodeType": "YulTypedName", + "src": "9487:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "9508:43:62", + "nodeType": "YulAssignment", + "src": "9508:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9536:9:62", + "nodeType": "YulIdentifier", + "src": "9536:9:62" + }, + { + "kind": "number", + "nativeSrc": "9547:2:62", + "nodeType": "YulLiteral", + "src": "9547:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9532:3:62", + "nodeType": "YulIdentifier", + "src": "9532:3:62" + }, + "nativeSrc": "9532:18:62", + "nodeType": "YulFunctionCall", + "src": "9532:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "9519:12:62", + "nodeType": "YulIdentifier", + "src": "9519:12:62" + }, + "nativeSrc": "9519:32:62", + "nodeType": "YulFunctionCall", + "src": "9519:32:62" + }, + "variableNames": [ + { + "name": "value_3", + "nativeSrc": "9508:7:62", + "nodeType": "YulIdentifier", + "src": "9508:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "9571:5:62", + "nodeType": "YulIdentifier", + "src": "9571:5:62" + }, + { + "kind": "number", + "nativeSrc": "9578:2:62", + "nodeType": "YulLiteral", + "src": "9578:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9567:3:62", + "nodeType": "YulIdentifier", + "src": "9567:3:62" + }, + "nativeSrc": "9567:14:62", + "nodeType": "YulFunctionCall", + "src": "9567:14:62" + }, + { + "name": "value_3", + "nativeSrc": "9583:7:62", + "nodeType": "YulIdentifier", + "src": "9583:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9560:6:62", + "nodeType": "YulIdentifier", + "src": "9560:6:62" + }, + "nativeSrc": "9560:31:62", + "nodeType": "YulFunctionCall", + "src": "9560:31:62" + }, + "nativeSrc": "9560:31:62", + "nodeType": "YulExpressionStatement", + "src": "9560:31:62" + }, + { + "nativeSrc": "9600:16:62", + "nodeType": "YulVariableDeclaration", + "src": "9600:16:62", + "value": { + "kind": "number", + "nativeSrc": "9615:1:62", + "nodeType": "YulLiteral", + "src": "9615:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_4", + "nativeSrc": "9604:7:62", + "nodeType": "YulTypedName", + "src": "9604:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "9625:43:62", + "nodeType": "YulAssignment", + "src": "9625:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9653:9:62", + "nodeType": "YulIdentifier", + "src": "9653:9:62" + }, + { + "kind": "number", + "nativeSrc": "9664:2:62", + "nodeType": "YulLiteral", + "src": "9664:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9649:3:62", + "nodeType": "YulIdentifier", + "src": "9649:3:62" + }, + "nativeSrc": "9649:18:62", + "nodeType": "YulFunctionCall", + "src": "9649:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "9636:12:62", + "nodeType": "YulIdentifier", + "src": "9636:12:62" + }, + "nativeSrc": "9636:32:62", + "nodeType": "YulFunctionCall", + "src": "9636:32:62" + }, + "variableNames": [ + { + "name": "value_4", + "nativeSrc": "9625:7:62", + "nodeType": "YulIdentifier", + "src": "9625:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "9688:5:62", + "nodeType": "YulIdentifier", + "src": "9688:5:62" + }, + { + "kind": "number", + "nativeSrc": "9695:2:62", + "nodeType": "YulLiteral", + "src": "9695:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9684:3:62", + "nodeType": "YulIdentifier", + "src": "9684:3:62" + }, + "nativeSrc": "9684:14:62", + "nodeType": "YulFunctionCall", + "src": "9684:14:62" + }, + { + "name": "value_4", + "nativeSrc": "9700:7:62", + "nodeType": "YulIdentifier", + "src": "9700:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9677:6:62", + "nodeType": "YulIdentifier", + "src": "9677:6:62" + }, + "nativeSrc": "9677:31:62", + "nodeType": "YulFunctionCall", + "src": "9677:31:62" + }, + "nativeSrc": "9677:31:62", + "nodeType": "YulExpressionStatement", + "src": "9677:31:62" + }, + { + "nativeSrc": "9717:16:62", + "nodeType": "YulVariableDeclaration", + "src": "9717:16:62", + "value": { + "kind": "number", + "nativeSrc": "9732:1:62", + "nodeType": "YulLiteral", + "src": "9732:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_5", + "nativeSrc": "9721:7:62", + "nodeType": "YulTypedName", + "src": "9721:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "9742:44:62", + "nodeType": "YulAssignment", + "src": "9742:44:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9770:9:62", + "nodeType": "YulIdentifier", + "src": "9770:9:62" + }, + { + "kind": "number", + "nativeSrc": "9781:3:62", + "nodeType": "YulLiteral", + "src": "9781:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9766:3:62", + "nodeType": "YulIdentifier", + "src": "9766:3:62" + }, + "nativeSrc": "9766:19:62", + "nodeType": "YulFunctionCall", + "src": "9766:19:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "9753:12:62", + "nodeType": "YulIdentifier", + "src": "9753:12:62" + }, + "nativeSrc": "9753:33:62", + "nodeType": "YulFunctionCall", + "src": "9753:33:62" + }, + "variableNames": [ + { + "name": "value_5", + "nativeSrc": "9742:7:62", + "nodeType": "YulIdentifier", + "src": "9742:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "9806:5:62", + "nodeType": "YulIdentifier", + "src": "9806:5:62" + }, + { + "kind": "number", + "nativeSrc": "9813:3:62", + "nodeType": "YulLiteral", + "src": "9813:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9802:3:62", + "nodeType": "YulIdentifier", + "src": "9802:3:62" + }, + "nativeSrc": "9802:15:62", + "nodeType": "YulFunctionCall", + "src": "9802:15:62" + }, + { + "name": "value_5", + "nativeSrc": "9819:7:62", + "nodeType": "YulIdentifier", + "src": "9819:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9795:6:62", + "nodeType": "YulIdentifier", + "src": "9795:6:62" + }, + "nativeSrc": "9795:32:62", + "nodeType": "YulFunctionCall", + "src": "9795:32:62" + }, + "nativeSrc": "9795:32:62", + "nodeType": "YulExpressionStatement", + "src": "9795:32:62" + }, + { + "nativeSrc": "9836:48:62", + "nodeType": "YulVariableDeclaration", + "src": "9836:48:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9868:9:62", + "nodeType": "YulIdentifier", + "src": "9868:9:62" + }, + { + "kind": "number", + "nativeSrc": "9879:3:62", + "nodeType": "YulLiteral", + "src": "9879:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9864:3:62", + "nodeType": "YulIdentifier", + "src": "9864:3:62" + }, + "nativeSrc": "9864:19:62", + "nodeType": "YulFunctionCall", + "src": "9864:19:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "9851:12:62", + "nodeType": "YulIdentifier", + "src": "9851:12:62" + }, + "nativeSrc": "9851:33:62", + "nodeType": "YulFunctionCall", + "src": "9851:33:62" + }, + "variables": [ + { + "name": "value_6", + "nativeSrc": "9840:7:62", + "nodeType": "YulTypedName", + "src": "9840:7:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "9936:16:62", + "nodeType": "YulBlock", + "src": "9936:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "9945:1:62", + "nodeType": "YulLiteral", + "src": "9945:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "9948:1:62", + "nodeType": "YulLiteral", + "src": "9948:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "9938:6:62", + "nodeType": "YulIdentifier", + "src": "9938:6:62" + }, + "nativeSrc": "9938:12:62", + "nodeType": "YulFunctionCall", + "src": "9938:12:62" + }, + "nativeSrc": "9938:12:62", + "nodeType": "YulExpressionStatement", + "src": "9938:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value_6", + "nativeSrc": "9906:7:62", + "nodeType": "YulIdentifier", + "src": "9906:7:62" + }, + { + "arguments": [ + { + "name": "value_6", + "nativeSrc": "9919:7:62", + "nodeType": "YulIdentifier", + "src": "9919:7:62" + }, + { + "kind": "number", + "nativeSrc": "9928:4:62", + "nodeType": "YulLiteral", + "src": "9928:4:62", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "9915:3:62", + "nodeType": "YulIdentifier", + "src": "9915:3:62" + }, + "nativeSrc": "9915:18:62", + "nodeType": "YulFunctionCall", + "src": "9915:18:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "9903:2:62", + "nodeType": "YulIdentifier", + "src": "9903:2:62" + }, + "nativeSrc": "9903:31:62", + "nodeType": "YulFunctionCall", + "src": "9903:31:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "9896:6:62", + "nodeType": "YulIdentifier", + "src": "9896:6:62" + }, + "nativeSrc": "9896:39:62", + "nodeType": "YulFunctionCall", + "src": "9896:39:62" + }, + "nativeSrc": "9893:59:62", + "nodeType": "YulIf", + "src": "9893:59:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "9972:5:62", + "nodeType": "YulIdentifier", + "src": "9972:5:62" + }, + { + "kind": "number", + "nativeSrc": "9979:3:62", + "nodeType": "YulLiteral", + "src": "9979:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9968:3:62", + "nodeType": "YulIdentifier", + "src": "9968:3:62" + }, + "nativeSrc": "9968:15:62", + "nodeType": "YulFunctionCall", + "src": "9968:15:62" + }, + { + "name": "value_6", + "nativeSrc": "9985:7:62", + "nodeType": "YulIdentifier", + "src": "9985:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9961:6:62", + "nodeType": "YulIdentifier", + "src": "9961:6:62" + }, + "nativeSrc": "9961:32:62", + "nodeType": "YulFunctionCall", + "src": "9961:32:62" + }, + "nativeSrc": "9961:32:62", + "nodeType": "YulExpressionStatement", + "src": "9961:32:62" + } + ] + }, + "name": "abi_decode_struct_State", + "nativeSrc": "9096:903:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "9129:9:62", + "nodeType": "YulTypedName", + "src": "9129:9:62", + "type": "" + }, + { + "name": "end", + "nativeSrc": "9140:3:62", + "nodeType": "YulTypedName", + "src": "9140:3:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "9148:5:62", + "nodeType": "YulTypedName", + "src": "9148:5:62", + "type": "" + } + ], + "src": "9096:903:62" + }, + { + "body": { + "nativeSrc": "10098:131:62", + "nodeType": "YulBlock", + "src": "10098:131:62", + "statements": [ + { + "body": { + "nativeSrc": "10145:16:62", + "nodeType": "YulBlock", + "src": "10145:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10154:1:62", + "nodeType": "YulLiteral", + "src": "10154:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "10157:1:62", + "nodeType": "YulLiteral", + "src": "10157:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "10147:6:62", + "nodeType": "YulIdentifier", + "src": "10147:6:62" + }, + "nativeSrc": "10147:12:62", + "nodeType": "YulFunctionCall", + "src": "10147:12:62" + }, + "nativeSrc": "10147:12:62", + "nodeType": "YulExpressionStatement", + "src": "10147:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "10119:7:62", + "nodeType": "YulIdentifier", + "src": "10119:7:62" + }, + { + "name": "headStart", + "nativeSrc": "10128:9:62", + "nodeType": "YulIdentifier", + "src": "10128:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "10115:3:62", + "nodeType": "YulIdentifier", + "src": "10115:3:62" + }, + "nativeSrc": "10115:23:62", + "nodeType": "YulFunctionCall", + "src": "10115:23:62" + }, + { + "kind": "number", + "nativeSrc": "10140:3:62", + "nodeType": "YulLiteral", + "src": "10140:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "10111:3:62", + "nodeType": "YulIdentifier", + "src": "10111:3:62" + }, + "nativeSrc": "10111:33:62", + "nodeType": "YulFunctionCall", + "src": "10111:33:62" + }, + "nativeSrc": "10108:53:62", + "nodeType": "YulIf", + "src": "10108:53:62" + }, + { + "nativeSrc": "10170:53:62", + "nodeType": "YulAssignment", + "src": "10170:53:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10204:9:62", + "nodeType": "YulIdentifier", + "src": "10204:9:62" + }, + { + "name": "dataEnd", + "nativeSrc": "10215:7:62", + "nodeType": "YulIdentifier", + "src": "10215:7:62" + } + ], + "functionName": { + "name": "abi_decode_struct_State", + "nativeSrc": "10180:23:62", + "nodeType": "YulIdentifier", + "src": "10180:23:62" + }, + "nativeSrc": "10180:43:62", + "nodeType": "YulFunctionCall", + "src": "10180:43:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "10170:6:62", + "nodeType": "YulIdentifier", + "src": "10170:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_State_$11699_memory_ptr", + "nativeSrc": "10004:225:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "10064:9:62", + "nodeType": "YulTypedName", + "src": "10064:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "10075:7:62", + "nodeType": "YulTypedName", + "src": "10075:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "10087:6:62", + "nodeType": "YulTypedName", + "src": "10087:6:62", + "type": "" + } + ], + "src": "10004:225:62" + }, + { + "body": { + "nativeSrc": "10369:203:62", + "nodeType": "YulBlock", + "src": "10369:203:62", + "statements": [ + { + "body": { + "nativeSrc": "10416:16:62", + "nodeType": "YulBlock", + "src": "10416:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10425:1:62", + "nodeType": "YulLiteral", + "src": "10425:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "10428:1:62", + "nodeType": "YulLiteral", + "src": "10428:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "10418:6:62", + "nodeType": "YulIdentifier", + "src": "10418:6:62" + }, + "nativeSrc": "10418:12:62", + "nodeType": "YulFunctionCall", + "src": "10418:12:62" + }, + "nativeSrc": "10418:12:62", + "nodeType": "YulExpressionStatement", + "src": "10418:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "10390:7:62", + "nodeType": "YulIdentifier", + "src": "10390:7:62" + }, + { + "name": "headStart", + "nativeSrc": "10399:9:62", + "nodeType": "YulIdentifier", + "src": "10399:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "10386:3:62", + "nodeType": "YulIdentifier", + "src": "10386:3:62" + }, + "nativeSrc": "10386:23:62", + "nodeType": "YulFunctionCall", + "src": "10386:23:62" + }, + { + "kind": "number", + "nativeSrc": "10411:3:62", + "nodeType": "YulLiteral", + "src": "10411:3:62", + "type": "", + "value": "384" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "10382:3:62", + "nodeType": "YulIdentifier", + "src": "10382:3:62" + }, + "nativeSrc": "10382:33:62", + "nodeType": "YulFunctionCall", + "src": "10382:33:62" + }, + "nativeSrc": "10379:53:62", + "nodeType": "YulIf", + "src": "10379:53:62" + }, + { + "nativeSrc": "10441:53:62", + "nodeType": "YulAssignment", + "src": "10441:53:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10475:9:62", + "nodeType": "YulIdentifier", + "src": "10475:9:62" + }, + { + "name": "dataEnd", + "nativeSrc": "10486:7:62", + "nodeType": "YulIdentifier", + "src": "10486:7:62" + } + ], + "functionName": { + "name": "abi_decode_struct_State", + "nativeSrc": "10451:23:62", + "nodeType": "YulIdentifier", + "src": "10451:23:62" + }, + "nativeSrc": "10451:43:62", + "nodeType": "YulFunctionCall", + "src": "10451:43:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "10441:6:62", + "nodeType": "YulIdentifier", + "src": "10441:6:62" + } + ] + }, + { + "nativeSrc": "10503:63:62", + "nodeType": "YulAssignment", + "src": "10503:63:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10541:9:62", + "nodeType": "YulIdentifier", + "src": "10541:9:62" + }, + { + "kind": "number", + "nativeSrc": "10552:3:62", + "nodeType": "YulLiteral", + "src": "10552:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10537:3:62", + "nodeType": "YulIdentifier", + "src": "10537:3:62" + }, + "nativeSrc": "10537:19:62", + "nodeType": "YulFunctionCall", + "src": "10537:19:62" + }, + { + "name": "dataEnd", + "nativeSrc": "10558:7:62", + "nodeType": "YulIdentifier", + "src": "10558:7:62" + } + ], + "functionName": { + "name": "abi_decode_struct_State", + "nativeSrc": "10513:23:62", + "nodeType": "YulIdentifier", + "src": "10513:23:62" + }, + "nativeSrc": "10513:53:62", + "nodeType": "YulFunctionCall", + "src": "10513:53:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "10503:6:62", + "nodeType": "YulIdentifier", + "src": "10503:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_State_$11699_memory_ptrt_struct$_State_$11699_memory_ptr", + "nativeSrc": "10234:338:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "10327:9:62", + "nodeType": "YulTypedName", + "src": "10327:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "10338:7:62", + "nodeType": "YulTypedName", + "src": "10338:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "10350:6:62", + "nodeType": "YulTypedName", + "src": "10350:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "10358:6:62", + "nodeType": "YulTypedName", + "src": "10358:6:62", + "type": "" + } + ], + "src": "10234:338:62" + }, + { + "body": { + "nativeSrc": "10646:176:62", + "nodeType": "YulBlock", + "src": "10646:176:62", + "statements": [ + { + "body": { + "nativeSrc": "10692:16:62", + "nodeType": "YulBlock", + "src": "10692:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10701:1:62", + "nodeType": "YulLiteral", + "src": "10701:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "10704:1:62", + "nodeType": "YulLiteral", + "src": "10704:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "10694:6:62", + "nodeType": "YulIdentifier", + "src": "10694:6:62" + }, + "nativeSrc": "10694:12:62", + "nodeType": "YulFunctionCall", + "src": "10694:12:62" + }, + "nativeSrc": "10694:12:62", + "nodeType": "YulExpressionStatement", + "src": "10694:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "10667:7:62", + "nodeType": "YulIdentifier", + "src": "10667:7:62" + }, + { + "name": "headStart", + "nativeSrc": "10676:9:62", + "nodeType": "YulIdentifier", + "src": "10676:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "10663:3:62", + "nodeType": "YulIdentifier", + "src": "10663:3:62" + }, + "nativeSrc": "10663:23:62", + "nodeType": "YulFunctionCall", + "src": "10663:23:62" + }, + { + "kind": "number", + "nativeSrc": "10688:2:62", + "nodeType": "YulLiteral", + "src": "10688:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "10659:3:62", + "nodeType": "YulIdentifier", + "src": "10659:3:62" + }, + "nativeSrc": "10659:32:62", + "nodeType": "YulFunctionCall", + "src": "10659:32:62" + }, + "nativeSrc": "10656:52:62", + "nodeType": "YulIf", + "src": "10656:52:62" + }, + { + "nativeSrc": "10717:36:62", + "nodeType": "YulVariableDeclaration", + "src": "10717:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10743:9:62", + "nodeType": "YulIdentifier", + "src": "10743:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "10730:12:62", + "nodeType": "YulIdentifier", + "src": "10730:12:62" + }, + "nativeSrc": "10730:23:62", + "nodeType": "YulFunctionCall", + "src": "10730:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "10721:5:62", + "nodeType": "YulTypedName", + "src": "10721:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "10786:5:62", + "nodeType": "YulIdentifier", + "src": "10786:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint64", + "nativeSrc": "10762:23:62", + "nodeType": "YulIdentifier", + "src": "10762:23:62" + }, + "nativeSrc": "10762:30:62", + "nodeType": "YulFunctionCall", + "src": "10762:30:62" + }, + "nativeSrc": "10762:30:62", + "nodeType": "YulExpressionStatement", + "src": "10762:30:62" + }, + { + "nativeSrc": "10801:15:62", + "nodeType": "YulAssignment", + "src": "10801:15:62", + "value": { + "name": "value", + "nativeSrc": "10811:5:62", + "nodeType": "YulIdentifier", + "src": "10811:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "10801:6:62", + "nodeType": "YulIdentifier", + "src": "10801:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint64", + "nativeSrc": "10577:245:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "10612:9:62", + "nodeType": "YulTypedName", + "src": "10612:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "10623:7:62", + "nodeType": "YulTypedName", + "src": "10623:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "10635:6:62", + "nodeType": "YulTypedName", + "src": "10635:6:62", + "type": "" + } + ], + "src": "10577:245:62" + }, + { + "body": { + "nativeSrc": "10945:99:62", + "nodeType": "YulBlock", + "src": "10945:99:62", + "statements": [ + { + "nativeSrc": "10955:26:62", + "nodeType": "YulAssignment", + "src": "10955:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10967:9:62", + "nodeType": "YulIdentifier", + "src": "10967:9:62" + }, + { + "kind": "number", + "nativeSrc": "10978:2:62", + "nodeType": "YulLiteral", + "src": "10978:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10963:3:62", + "nodeType": "YulIdentifier", + "src": "10963:3:62" + }, + "nativeSrc": "10963:18:62", + "nodeType": "YulFunctionCall", + "src": "10963:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "10955:4:62", + "nodeType": "YulIdentifier", + "src": "10955:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "11020:6:62", + "nodeType": "YulIdentifier", + "src": "11020:6:62" + }, + { + "name": "headStart", + "nativeSrc": "11028:9:62", + "nodeType": "YulIdentifier", + "src": "11028:9:62" + } + ], + "functionName": { + "name": "abi_encode_enum_DisputeStatus", + "nativeSrc": "10990:29:62", + "nodeType": "YulIdentifier", + "src": "10990:29:62" + }, + "nativeSrc": "10990:48:62", + "nodeType": "YulFunctionCall", + "src": "10990:48:62" + }, + "nativeSrc": "10990:48:62", + "nodeType": "YulExpressionStatement", + "src": "10990:48:62" + } + ] + }, + "name": "abi_encode_tuple_t_enum$_DisputeStatus_$10718__to_t_uint8__fromStack_reversed", + "nativeSrc": "10827:217:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "10914:9:62", + "nodeType": "YulTypedName", + "src": "10914:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "10925:6:62", + "nodeType": "YulTypedName", + "src": "10925:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "10936:4:62", + "nodeType": "YulTypedName", + "src": "10936:4:62", + "type": "" + } + ], + "src": "10827:217:62" + }, + { + "body": { + "nativeSrc": "11081:95:62", + "nodeType": "YulBlock", + "src": "11081:95:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11098:1:62", + "nodeType": "YulLiteral", + "src": "11098:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11105:3:62", + "nodeType": "YulLiteral", + "src": "11105:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "11110:10:62", + "nodeType": "YulLiteral", + "src": "11110:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "11101:3:62", + "nodeType": "YulIdentifier", + "src": "11101:3:62" + }, + "nativeSrc": "11101:20:62", + "nodeType": "YulFunctionCall", + "src": "11101:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11091:6:62", + "nodeType": "YulIdentifier", + "src": "11091:6:62" + }, + "nativeSrc": "11091:31:62", + "nodeType": "YulFunctionCall", + "src": "11091:31:62" + }, + "nativeSrc": "11091:31:62", + "nodeType": "YulExpressionStatement", + "src": "11091:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11138:1:62", + "nodeType": "YulLiteral", + "src": "11138:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "11141:4:62", + "nodeType": "YulLiteral", + "src": "11141:4:62", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11131:6:62", + "nodeType": "YulIdentifier", + "src": "11131:6:62" + }, + "nativeSrc": "11131:15:62", + "nodeType": "YulFunctionCall", + "src": "11131:15:62" + }, + "nativeSrc": "11131:15:62", + "nodeType": "YulExpressionStatement", + "src": "11131:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11162:1:62", + "nodeType": "YulLiteral", + "src": "11162:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "11165:4:62", + "nodeType": "YulLiteral", + "src": "11165:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "11155:6:62", + "nodeType": "YulIdentifier", + "src": "11155:6:62" + }, + "nativeSrc": "11155:15:62", + "nodeType": "YulFunctionCall", + "src": "11155:15:62" + }, + "nativeSrc": "11155:15:62", + "nodeType": "YulExpressionStatement", + "src": "11155:15:62" + } + ] + }, + "name": "panic_error_0x11", + "nativeSrc": "11049:127:62", + "nodeType": "YulFunctionDefinition", + "src": "11049:127:62" + }, + { + "body": { + "nativeSrc": "11229:77:62", + "nodeType": "YulBlock", + "src": "11229:77:62", + "statements": [ + { + "nativeSrc": "11239:16:62", + "nodeType": "YulAssignment", + "src": "11239:16:62", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "11250:1:62", + "nodeType": "YulIdentifier", + "src": "11250:1:62" + }, + { + "name": "y", + "nativeSrc": "11253:1:62", + "nodeType": "YulIdentifier", + "src": "11253:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11246:3:62", + "nodeType": "YulIdentifier", + "src": "11246:3:62" + }, + "nativeSrc": "11246:9:62", + "nodeType": "YulFunctionCall", + "src": "11246:9:62" + }, + "variableNames": [ + { + "name": "sum", + "nativeSrc": "11239:3:62", + "nodeType": "YulIdentifier", + "src": "11239:3:62" + } + ] + }, + { + "body": { + "nativeSrc": "11278:22:62", + "nodeType": "YulBlock", + "src": "11278:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nativeSrc": "11280:16:62", + "nodeType": "YulIdentifier", + "src": "11280:16:62" + }, + "nativeSrc": "11280:18:62", + "nodeType": "YulFunctionCall", + "src": "11280:18:62" + }, + "nativeSrc": "11280:18:62", + "nodeType": "YulExpressionStatement", + "src": "11280:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nativeSrc": "11270:1:62", + "nodeType": "YulIdentifier", + "src": "11270:1:62" + }, + { + "name": "sum", + "nativeSrc": "11273:3:62", + "nodeType": "YulIdentifier", + "src": "11273:3:62" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "11267:2:62", + "nodeType": "YulIdentifier", + "src": "11267:2:62" + }, + "nativeSrc": "11267:10:62", + "nodeType": "YulFunctionCall", + "src": "11267:10:62" + }, + "nativeSrc": "11264:36:62", + "nodeType": "YulIf", + "src": "11264:36:62" + } + ] + }, + "name": "checked_add_t_uint256", + "nativeSrc": "11181:125:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nativeSrc": "11212:1:62", + "nodeType": "YulTypedName", + "src": "11212:1:62", + "type": "" + }, + { + "name": "y", + "nativeSrc": "11215:1:62", + "nodeType": "YulTypedName", + "src": "11215:1:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nativeSrc": "11221:3:62", + "nodeType": "YulTypedName", + "src": "11221:3:62", + "type": "" + } + ], + "src": "11181:125:62" + }, + { + "body": { + "nativeSrc": "11419:101:62", + "nodeType": "YulBlock", + "src": "11419:101:62", + "statements": [ + { + "nativeSrc": "11429:26:62", + "nodeType": "YulAssignment", + "src": "11429:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11441:9:62", + "nodeType": "YulIdentifier", + "src": "11441:9:62" + }, + { + "kind": "number", + "nativeSrc": "11452:2:62", + "nodeType": "YulLiteral", + "src": "11452:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11437:3:62", + "nodeType": "YulIdentifier", + "src": "11437:3:62" + }, + "nativeSrc": "11437:18:62", + "nodeType": "YulFunctionCall", + "src": "11437:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "11429:4:62", + "nodeType": "YulIdentifier", + "src": "11429:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11471:9:62", + "nodeType": "YulIdentifier", + "src": "11471:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "11486:6:62", + "nodeType": "YulIdentifier", + "src": "11486:6:62" + }, + { + "kind": "number", + "nativeSrc": "11494:18:62", + "nodeType": "YulLiteral", + "src": "11494:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "11482:3:62", + "nodeType": "YulIdentifier", + "src": "11482:3:62" + }, + "nativeSrc": "11482:31:62", + "nodeType": "YulFunctionCall", + "src": "11482:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11464:6:62", + "nodeType": "YulIdentifier", + "src": "11464:6:62" + }, + "nativeSrc": "11464:50:62", + "nodeType": "YulFunctionCall", + "src": "11464:50:62" + }, + "nativeSrc": "11464:50:62", + "nodeType": "YulExpressionStatement", + "src": "11464:50:62" + } + ] + }, + "name": "abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed", + "nativeSrc": "11311:209:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "11388:9:62", + "nodeType": "YulTypedName", + "src": "11388:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "11399:6:62", + "nodeType": "YulTypedName", + "src": "11399:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "11410:4:62", + "nodeType": "YulTypedName", + "src": "11410:4:62", + "type": "" + } + ], + "src": "11311:209:62" + }, + { + "body": { + "nativeSrc": "11654:171:62", + "nodeType": "YulBlock", + "src": "11654:171:62", + "statements": [ + { + "nativeSrc": "11664:26:62", + "nodeType": "YulAssignment", + "src": "11664:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11676:9:62", + "nodeType": "YulIdentifier", + "src": "11676:9:62" + }, + { + "kind": "number", + "nativeSrc": "11687:2:62", + "nodeType": "YulLiteral", + "src": "11687:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11672:3:62", + "nodeType": "YulIdentifier", + "src": "11672:3:62" + }, + "nativeSrc": "11672:18:62", + "nodeType": "YulFunctionCall", + "src": "11672:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "11664:4:62", + "nodeType": "YulIdentifier", + "src": "11664:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11706:9:62", + "nodeType": "YulIdentifier", + "src": "11706:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "11721:6:62", + "nodeType": "YulIdentifier", + "src": "11721:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11737:3:62", + "nodeType": "YulLiteral", + "src": "11737:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "11742:1:62", + "nodeType": "YulLiteral", + "src": "11742:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "11733:3:62", + "nodeType": "YulIdentifier", + "src": "11733:3:62" + }, + "nativeSrc": "11733:11:62", + "nodeType": "YulFunctionCall", + "src": "11733:11:62" + }, + { + "kind": "number", + "nativeSrc": "11746:1:62", + "nodeType": "YulLiteral", + "src": "11746:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "11729:3:62", + "nodeType": "YulIdentifier", + "src": "11729:3:62" + }, + "nativeSrc": "11729:19:62", + "nodeType": "YulFunctionCall", + "src": "11729:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "11717:3:62", + "nodeType": "YulIdentifier", + "src": "11717:3:62" + }, + "nativeSrc": "11717:32:62", + "nodeType": "YulFunctionCall", + "src": "11717:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11699:6:62", + "nodeType": "YulIdentifier", + "src": "11699:6:62" + }, + "nativeSrc": "11699:51:62", + "nodeType": "YulFunctionCall", + "src": "11699:51:62" + }, + "nativeSrc": "11699:51:62", + "nodeType": "YulExpressionStatement", + "src": "11699:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11770:9:62", + "nodeType": "YulIdentifier", + "src": "11770:9:62" + }, + { + "kind": "number", + "nativeSrc": "11781:2:62", + "nodeType": "YulLiteral", + "src": "11781:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11766:3:62", + "nodeType": "YulIdentifier", + "src": "11766:3:62" + }, + "nativeSrc": "11766:18:62", + "nodeType": "YulFunctionCall", + "src": "11766:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "11790:6:62", + "nodeType": "YulIdentifier", + "src": "11790:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11806:3:62", + "nodeType": "YulLiteral", + "src": "11806:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "11811:1:62", + "nodeType": "YulLiteral", + "src": "11811:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "11802:3:62", + "nodeType": "YulIdentifier", + "src": "11802:3:62" + }, + "nativeSrc": "11802:11:62", + "nodeType": "YulFunctionCall", + "src": "11802:11:62" + }, + { + "kind": "number", + "nativeSrc": "11815:1:62", + "nodeType": "YulLiteral", + "src": "11815:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "11798:3:62", + "nodeType": "YulIdentifier", + "src": "11798:3:62" + }, + "nativeSrc": "11798:19:62", + "nodeType": "YulFunctionCall", + "src": "11798:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "11786:3:62", + "nodeType": "YulIdentifier", + "src": "11786:3:62" + }, + "nativeSrc": "11786:32:62", + "nodeType": "YulFunctionCall", + "src": "11786:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11759:6:62", + "nodeType": "YulIdentifier", + "src": "11759:6:62" + }, + "nativeSrc": "11759:60:62", + "nodeType": "YulFunctionCall", + "src": "11759:60:62" + }, + "nativeSrc": "11759:60:62", + "nodeType": "YulExpressionStatement", + "src": "11759:60:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", + "nativeSrc": "11525:300:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "11615:9:62", + "nodeType": "YulTypedName", + "src": "11615:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "11626:6:62", + "nodeType": "YulTypedName", + "src": "11626:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "11634:6:62", + "nodeType": "YulTypedName", + "src": "11634:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "11645:4:62", + "nodeType": "YulTypedName", + "src": "11645:4:62", + "type": "" + } + ], + "src": "11525:300:62" + }, + { + "body": { + "nativeSrc": "11889:77:62", + "nodeType": "YulBlock", + "src": "11889:77:62", + "statements": [ + { + "nativeSrc": "11899:22:62", + "nodeType": "YulAssignment", + "src": "11899:22:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "11914:6:62", + "nodeType": "YulIdentifier", + "src": "11914:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "11908:5:62", + "nodeType": "YulIdentifier", + "src": "11908:5:62" + }, + "nativeSrc": "11908:13:62", + "nodeType": "YulFunctionCall", + "src": "11908:13:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "11899:5:62", + "nodeType": "YulIdentifier", + "src": "11899:5:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "11954:5:62", + "nodeType": "YulIdentifier", + "src": "11954:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint32", + "nativeSrc": "11930:23:62", + "nodeType": "YulIdentifier", + "src": "11930:23:62" + }, + "nativeSrc": "11930:30:62", + "nodeType": "YulFunctionCall", + "src": "11930:30:62" + }, + "nativeSrc": "11930:30:62", + "nodeType": "YulExpressionStatement", + "src": "11930:30:62" + } + ] + }, + "name": "abi_decode_uint32_fromMemory", + "nativeSrc": "11830:136:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "11868:6:62", + "nodeType": "YulTypedName", + "src": "11868:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "11879:5:62", + "nodeType": "YulTypedName", + "src": "11879:5:62", + "type": "" + } + ], + "src": "11830:136:62" + }, + { + "body": { + "nativeSrc": "12030:77:62", + "nodeType": "YulBlock", + "src": "12030:77:62", + "statements": [ + { + "nativeSrc": "12040:22:62", + "nodeType": "YulAssignment", + "src": "12040:22:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "12055:6:62", + "nodeType": "YulIdentifier", + "src": "12055:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "12049:5:62", + "nodeType": "YulIdentifier", + "src": "12049:5:62" + }, + "nativeSrc": "12049:13:62", + "nodeType": "YulFunctionCall", + "src": "12049:13:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "12040:5:62", + "nodeType": "YulIdentifier", + "src": "12040:5:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "12095:5:62", + "nodeType": "YulIdentifier", + "src": "12095:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint64", + "nativeSrc": "12071:23:62", + "nodeType": "YulIdentifier", + "src": "12071:23:62" + }, + "nativeSrc": "12071:30:62", + "nodeType": "YulFunctionCall", + "src": "12071:30:62" + }, + "nativeSrc": "12071:30:62", + "nodeType": "YulExpressionStatement", + "src": "12071:30:62" + } + ] + }, + "name": "abi_decode_uint64_fromMemory", + "nativeSrc": "11971:136:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "12009:6:62", + "nodeType": "YulTypedName", + "src": "12009:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "12020:5:62", + "nodeType": "YulTypedName", + "src": "12020:5:62", + "type": "" + } + ], + "src": "11971:136:62" + }, + { + "body": { + "nativeSrc": "12220:1010:62", + "nodeType": "YulBlock", + "src": "12220:1010:62", + "statements": [ + { + "nativeSrc": "12230:43:62", + "nodeType": "YulVariableDeclaration", + "src": "12230:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "12248:7:62", + "nodeType": "YulIdentifier", + "src": "12248:7:62" + }, + { + "name": "headStart", + "nativeSrc": "12257:9:62", + "nodeType": "YulIdentifier", + "src": "12257:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "12244:3:62", + "nodeType": "YulIdentifier", + "src": "12244:3:62" + }, + "nativeSrc": "12244:23:62", + "nodeType": "YulFunctionCall", + "src": "12244:23:62" + }, + { + "kind": "number", + "nativeSrc": "12269:3:62", + "nodeType": "YulLiteral", + "src": "12269:3:62", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "12240:3:62", + "nodeType": "YulIdentifier", + "src": "12240:3:62" + }, + "nativeSrc": "12240:33:62", + "nodeType": "YulFunctionCall", + "src": "12240:33:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "12234:2:62", + "nodeType": "YulTypedName", + "src": "12234:2:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "12288:16:62", + "nodeType": "YulBlock", + "src": "12288:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12297:1:62", + "nodeType": "YulLiteral", + "src": "12297:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "12300:1:62", + "nodeType": "YulLiteral", + "src": "12300:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "12290:6:62", + "nodeType": "YulIdentifier", + "src": "12290:6:62" + }, + "nativeSrc": "12290:12:62", + "nodeType": "YulFunctionCall", + "src": "12290:12:62" + }, + "nativeSrc": "12290:12:62", + "nodeType": "YulExpressionStatement", + "src": "12290:12:62" + } + ] + }, + "condition": { + "name": "_1", + "nativeSrc": "12285:2:62", + "nodeType": "YulIdentifier", + "src": "12285:2:62" + }, + "nativeSrc": "12282:22:62", + "nodeType": "YulIf", + "src": "12282:22:62" + }, + { + "nativeSrc": "12313:7:62", + "nodeType": "YulAssignment", + "src": "12313:7:62", + "value": { + "kind": "number", + "nativeSrc": "12319:1:62", + "nodeType": "YulLiteral", + "src": "12319:1:62", + "type": "", + "value": "0" + }, + "variableNames": [ + { + "name": "_1", + "nativeSrc": "12313:2:62", + "nodeType": "YulIdentifier", + "src": "12313:2:62" + } + ] + }, + { + "nativeSrc": "12329:30:62", + "nodeType": "YulVariableDeclaration", + "src": "12329:30:62", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_memory", + "nativeSrc": "12342:15:62", + "nodeType": "YulIdentifier", + "src": "12342:15:62" + }, + "nativeSrc": "12342:17:62", + "nodeType": "YulFunctionCall", + "src": "12342:17:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "12333:5:62", + "nodeType": "YulTypedName", + "src": "12333:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "12368:17:62", + "nodeType": "YulVariableDeclaration", + "src": "12368:17:62", + "value": { + "name": "_1", + "nativeSrc": "12383:2:62", + "nodeType": "YulIdentifier", + "src": "12383:2:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "12372:7:62", + "nodeType": "YulTypedName", + "src": "12372:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "12394:27:62", + "nodeType": "YulAssignment", + "src": "12394:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12411:9:62", + "nodeType": "YulIdentifier", + "src": "12411:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "12405:5:62", + "nodeType": "YulIdentifier", + "src": "12405:5:62" + }, + "nativeSrc": "12405:16:62", + "nodeType": "YulFunctionCall", + "src": "12405:16:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "12394:7:62", + "nodeType": "YulIdentifier", + "src": "12394:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "12437:5:62", + "nodeType": "YulIdentifier", + "src": "12437:5:62" + }, + { + "name": "value_1", + "nativeSrc": "12444:7:62", + "nodeType": "YulIdentifier", + "src": "12444:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12430:6:62", + "nodeType": "YulIdentifier", + "src": "12430:6:62" + }, + "nativeSrc": "12430:22:62", + "nodeType": "YulFunctionCall", + "src": "12430:22:62" + }, + "nativeSrc": "12430:22:62", + "nodeType": "YulExpressionStatement", + "src": "12430:22:62" + }, + { + "nativeSrc": "12461:17:62", + "nodeType": "YulVariableDeclaration", + "src": "12461:17:62", + "value": { + "name": "_1", + "nativeSrc": "12476:2:62", + "nodeType": "YulIdentifier", + "src": "12476:2:62" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "12465:7:62", + "nodeType": "YulTypedName", + "src": "12465:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "12487:36:62", + "nodeType": "YulAssignment", + "src": "12487:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12508:9:62", + "nodeType": "YulIdentifier", + "src": "12508:9:62" + }, + { + "kind": "number", + "nativeSrc": "12519:2:62", + "nodeType": "YulLiteral", + "src": "12519:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12504:3:62", + "nodeType": "YulIdentifier", + "src": "12504:3:62" + }, + "nativeSrc": "12504:18:62", + "nodeType": "YulFunctionCall", + "src": "12504:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "12498:5:62", + "nodeType": "YulIdentifier", + "src": "12498:5:62" + }, + "nativeSrc": "12498:25:62", + "nodeType": "YulFunctionCall", + "src": "12498:25:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "12487:7:62", + "nodeType": "YulIdentifier", + "src": "12487:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "12543:5:62", + "nodeType": "YulIdentifier", + "src": "12543:5:62" + }, + { + "kind": "number", + "nativeSrc": "12550:2:62", + "nodeType": "YulLiteral", + "src": "12550:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12539:3:62", + "nodeType": "YulIdentifier", + "src": "12539:3:62" + }, + "nativeSrc": "12539:14:62", + "nodeType": "YulFunctionCall", + "src": "12539:14:62" + }, + { + "name": "value_2", + "nativeSrc": "12555:7:62", + "nodeType": "YulIdentifier", + "src": "12555:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12532:6:62", + "nodeType": "YulIdentifier", + "src": "12532:6:62" + }, + "nativeSrc": "12532:31:62", + "nodeType": "YulFunctionCall", + "src": "12532:31:62" + }, + "nativeSrc": "12532:31:62", + "nodeType": "YulExpressionStatement", + "src": "12532:31:62" + }, + { + "nativeSrc": "12572:17:62", + "nodeType": "YulVariableDeclaration", + "src": "12572:17:62", + "value": { + "name": "_1", + "nativeSrc": "12587:2:62", + "nodeType": "YulIdentifier", + "src": "12587:2:62" + }, + "variables": [ + { + "name": "value_3", + "nativeSrc": "12576:7:62", + "nodeType": "YulTypedName", + "src": "12576:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "12598:36:62", + "nodeType": "YulAssignment", + "src": "12598:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12619:9:62", + "nodeType": "YulIdentifier", + "src": "12619:9:62" + }, + { + "kind": "number", + "nativeSrc": "12630:2:62", + "nodeType": "YulLiteral", + "src": "12630:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12615:3:62", + "nodeType": "YulIdentifier", + "src": "12615:3:62" + }, + "nativeSrc": "12615:18:62", + "nodeType": "YulFunctionCall", + "src": "12615:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "12609:5:62", + "nodeType": "YulIdentifier", + "src": "12609:5:62" + }, + "nativeSrc": "12609:25:62", + "nodeType": "YulFunctionCall", + "src": "12609:25:62" + }, + "variableNames": [ + { + "name": "value_3", + "nativeSrc": "12598:7:62", + "nodeType": "YulIdentifier", + "src": "12598:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "12654:5:62", + "nodeType": "YulIdentifier", + "src": "12654:5:62" + }, + { + "kind": "number", + "nativeSrc": "12661:2:62", + "nodeType": "YulLiteral", + "src": "12661:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12650:3:62", + "nodeType": "YulIdentifier", + "src": "12650:3:62" + }, + "nativeSrc": "12650:14:62", + "nodeType": "YulFunctionCall", + "src": "12650:14:62" + }, + { + "name": "value_3", + "nativeSrc": "12666:7:62", + "nodeType": "YulIdentifier", + "src": "12666:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12643:6:62", + "nodeType": "YulIdentifier", + "src": "12643:6:62" + }, + "nativeSrc": "12643:31:62", + "nodeType": "YulFunctionCall", + "src": "12643:31:62" + }, + "nativeSrc": "12643:31:62", + "nodeType": "YulExpressionStatement", + "src": "12643:31:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "12694:5:62", + "nodeType": "YulIdentifier", + "src": "12694:5:62" + }, + { + "kind": "number", + "nativeSrc": "12701:2:62", + "nodeType": "YulLiteral", + "src": "12701:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12690:3:62", + "nodeType": "YulIdentifier", + "src": "12690:3:62" + }, + "nativeSrc": "12690:14:62", + "nodeType": "YulFunctionCall", + "src": "12690:14:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12739:9:62", + "nodeType": "YulIdentifier", + "src": "12739:9:62" + }, + { + "kind": "number", + "nativeSrc": "12750:2:62", + "nodeType": "YulLiteral", + "src": "12750:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12735:3:62", + "nodeType": "YulIdentifier", + "src": "12735:3:62" + }, + "nativeSrc": "12735:18:62", + "nodeType": "YulFunctionCall", + "src": "12735:18:62" + } + ], + "functionName": { + "name": "abi_decode_uint32_fromMemory", + "nativeSrc": "12706:28:62", + "nodeType": "YulIdentifier", + "src": "12706:28:62" + }, + "nativeSrc": "12706:48:62", + "nodeType": "YulFunctionCall", + "src": "12706:48:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12683:6:62", + "nodeType": "YulIdentifier", + "src": "12683:6:62" + }, + "nativeSrc": "12683:72:62", + "nodeType": "YulFunctionCall", + "src": "12683:72:62" + }, + "nativeSrc": "12683:72:62", + "nodeType": "YulExpressionStatement", + "src": "12683:72:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "12775:5:62", + "nodeType": "YulIdentifier", + "src": "12775:5:62" + }, + { + "kind": "number", + "nativeSrc": "12782:3:62", + "nodeType": "YulLiteral", + "src": "12782:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12771:3:62", + "nodeType": "YulIdentifier", + "src": "12771:3:62" + }, + "nativeSrc": "12771:15:62", + "nodeType": "YulFunctionCall", + "src": "12771:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12821:9:62", + "nodeType": "YulIdentifier", + "src": "12821:9:62" + }, + { + "kind": "number", + "nativeSrc": "12832:3:62", + "nodeType": "YulLiteral", + "src": "12832:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12817:3:62", + "nodeType": "YulIdentifier", + "src": "12817:3:62" + }, + "nativeSrc": "12817:19:62", + "nodeType": "YulFunctionCall", + "src": "12817:19:62" + } + ], + "functionName": { + "name": "abi_decode_uint64_fromMemory", + "nativeSrc": "12788:28:62", + "nodeType": "YulIdentifier", + "src": "12788:28:62" + }, + "nativeSrc": "12788:49:62", + "nodeType": "YulFunctionCall", + "src": "12788:49:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12764:6:62", + "nodeType": "YulIdentifier", + "src": "12764:6:62" + }, + "nativeSrc": "12764:74:62", + "nodeType": "YulFunctionCall", + "src": "12764:74:62" + }, + "nativeSrc": "12764:74:62", + "nodeType": "YulExpressionStatement", + "src": "12764:74:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "12858:5:62", + "nodeType": "YulIdentifier", + "src": "12858:5:62" + }, + { + "kind": "number", + "nativeSrc": "12865:3:62", + "nodeType": "YulLiteral", + "src": "12865:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12854:3:62", + "nodeType": "YulIdentifier", + "src": "12854:3:62" + }, + "nativeSrc": "12854:15:62", + "nodeType": "YulFunctionCall", + "src": "12854:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12904:9:62", + "nodeType": "YulIdentifier", + "src": "12904:9:62" + }, + { + "kind": "number", + "nativeSrc": "12915:3:62", + "nodeType": "YulLiteral", + "src": "12915:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12900:3:62", + "nodeType": "YulIdentifier", + "src": "12900:3:62" + }, + "nativeSrc": "12900:19:62", + "nodeType": "YulFunctionCall", + "src": "12900:19:62" + } + ], + "functionName": { + "name": "abi_decode_uint64_fromMemory", + "nativeSrc": "12871:28:62", + "nodeType": "YulIdentifier", + "src": "12871:28:62" + }, + "nativeSrc": "12871:49:62", + "nodeType": "YulFunctionCall", + "src": "12871:49:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12847:6:62", + "nodeType": "YulIdentifier", + "src": "12847:6:62" + }, + "nativeSrc": "12847:74:62", + "nodeType": "YulFunctionCall", + "src": "12847:74:62" + }, + "nativeSrc": "12847:74:62", + "nodeType": "YulExpressionStatement", + "src": "12847:74:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "12941:5:62", + "nodeType": "YulIdentifier", + "src": "12941:5:62" + }, + { + "kind": "number", + "nativeSrc": "12948:3:62", + "nodeType": "YulLiteral", + "src": "12948:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12937:3:62", + "nodeType": "YulIdentifier", + "src": "12937:3:62" + }, + "nativeSrc": "12937:15:62", + "nodeType": "YulFunctionCall", + "src": "12937:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12987:9:62", + "nodeType": "YulIdentifier", + "src": "12987:9:62" + }, + { + "kind": "number", + "nativeSrc": "12998:3:62", + "nodeType": "YulLiteral", + "src": "12998:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12983:3:62", + "nodeType": "YulIdentifier", + "src": "12983:3:62" + }, + "nativeSrc": "12983:19:62", + "nodeType": "YulFunctionCall", + "src": "12983:19:62" + } + ], + "functionName": { + "name": "abi_decode_uint32_fromMemory", + "nativeSrc": "12954:28:62", + "nodeType": "YulIdentifier", + "src": "12954:28:62" + }, + "nativeSrc": "12954:49:62", + "nodeType": "YulFunctionCall", + "src": "12954:49:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12930:6:62", + "nodeType": "YulIdentifier", + "src": "12930:6:62" + }, + "nativeSrc": "12930:74:62", + "nodeType": "YulFunctionCall", + "src": "12930:74:62" + }, + "nativeSrc": "12930:74:62", + "nodeType": "YulExpressionStatement", + "src": "12930:74:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "13024:5:62", + "nodeType": "YulIdentifier", + "src": "13024:5:62" + }, + { + "kind": "number", + "nativeSrc": "13031:3:62", + "nodeType": "YulLiteral", + "src": "13031:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13020:3:62", + "nodeType": "YulIdentifier", + "src": "13020:3:62" + }, + "nativeSrc": "13020:15:62", + "nodeType": "YulFunctionCall", + "src": "13020:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13070:9:62", + "nodeType": "YulIdentifier", + "src": "13070:9:62" + }, + { + "kind": "number", + "nativeSrc": "13081:3:62", + "nodeType": "YulLiteral", + "src": "13081:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13066:3:62", + "nodeType": "YulIdentifier", + "src": "13066:3:62" + }, + "nativeSrc": "13066:19:62", + "nodeType": "YulFunctionCall", + "src": "13066:19:62" + } + ], + "functionName": { + "name": "abi_decode_uint64_fromMemory", + "nativeSrc": "13037:28:62", + "nodeType": "YulIdentifier", + "src": "13037:28:62" + }, + "nativeSrc": "13037:49:62", + "nodeType": "YulFunctionCall", + "src": "13037:49:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13013:6:62", + "nodeType": "YulIdentifier", + "src": "13013:6:62" + }, + "nativeSrc": "13013:74:62", + "nodeType": "YulFunctionCall", + "src": "13013:74:62" + }, + "nativeSrc": "13013:74:62", + "nodeType": "YulExpressionStatement", + "src": "13013:74:62" + }, + { + "nativeSrc": "13096:17:62", + "nodeType": "YulVariableDeclaration", + "src": "13096:17:62", + "value": { + "name": "_1", + "nativeSrc": "13111:2:62", + "nodeType": "YulIdentifier", + "src": "13111:2:62" + }, + "variables": [ + { + "name": "value_4", + "nativeSrc": "13100:7:62", + "nodeType": "YulTypedName", + "src": "13100:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "13122:37:62", + "nodeType": "YulAssignment", + "src": "13122:37:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13143:9:62", + "nodeType": "YulIdentifier", + "src": "13143:9:62" + }, + { + "kind": "number", + "nativeSrc": "13154:3:62", + "nodeType": "YulLiteral", + "src": "13154:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13139:3:62", + "nodeType": "YulIdentifier", + "src": "13139:3:62" + }, + "nativeSrc": "13139:19:62", + "nodeType": "YulFunctionCall", + "src": "13139:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "13133:5:62", + "nodeType": "YulIdentifier", + "src": "13133:5:62" + }, + "nativeSrc": "13133:26:62", + "nodeType": "YulFunctionCall", + "src": "13133:26:62" + }, + "variableNames": [ + { + "name": "value_4", + "nativeSrc": "13122:7:62", + "nodeType": "YulIdentifier", + "src": "13122:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "13179:5:62", + "nodeType": "YulIdentifier", + "src": "13179:5:62" + }, + { + "kind": "number", + "nativeSrc": "13186:3:62", + "nodeType": "YulLiteral", + "src": "13186:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13175:3:62", + "nodeType": "YulIdentifier", + "src": "13175:3:62" + }, + "nativeSrc": "13175:15:62", + "nodeType": "YulFunctionCall", + "src": "13175:15:62" + }, + { + "name": "value_4", + "nativeSrc": "13192:7:62", + "nodeType": "YulIdentifier", + "src": "13192:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13168:6:62", + "nodeType": "YulIdentifier", + "src": "13168:6:62" + }, + "nativeSrc": "13168:32:62", + "nodeType": "YulFunctionCall", + "src": "13168:32:62" + }, + "nativeSrc": "13168:32:62", + "nodeType": "YulExpressionStatement", + "src": "13168:32:62" + }, + { + "nativeSrc": "13209:15:62", + "nodeType": "YulAssignment", + "src": "13209:15:62", + "value": { + "name": "value", + "nativeSrc": "13219:5:62", + "nodeType": "YulIdentifier", + "src": "13219:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "13209:6:62", + "nodeType": "YulIdentifier", + "src": "13209:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory", + "nativeSrc": "12112:1118:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "12186:9:62", + "nodeType": "YulTypedName", + "src": "12186:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "12197:7:62", + "nodeType": "YulTypedName", + "src": "12197:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "12209:6:62", + "nodeType": "YulTypedName", + "src": "12209:6:62", + "type": "" + } + ], + "src": "12112:1118:62" + }, + { + "body": { + "nativeSrc": "13476:294:62", + "nodeType": "YulBlock", + "src": "13476:294:62", + "statements": [ + { + "nativeSrc": "13486:27:62", + "nodeType": "YulAssignment", + "src": "13486:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13498:9:62", + "nodeType": "YulIdentifier", + "src": "13498:9:62" + }, + { + "kind": "number", + "nativeSrc": "13509:3:62", + "nodeType": "YulLiteral", + "src": "13509:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13494:3:62", + "nodeType": "YulIdentifier", + "src": "13494:3:62" + }, + "nativeSrc": "13494:19:62", + "nodeType": "YulFunctionCall", + "src": "13494:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "13486:4:62", + "nodeType": "YulIdentifier", + "src": "13486:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13529:9:62", + "nodeType": "YulIdentifier", + "src": "13529:9:62" + }, + { + "name": "value0", + "nativeSrc": "13540:6:62", + "nodeType": "YulIdentifier", + "src": "13540:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13522:6:62", + "nodeType": "YulIdentifier", + "src": "13522:6:62" + }, + "nativeSrc": "13522:25:62", + "nodeType": "YulFunctionCall", + "src": "13522:25:62" + }, + "nativeSrc": "13522:25:62", + "nodeType": "YulExpressionStatement", + "src": "13522:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13567:9:62", + "nodeType": "YulIdentifier", + "src": "13567:9:62" + }, + { + "kind": "number", + "nativeSrc": "13578:2:62", + "nodeType": "YulLiteral", + "src": "13578:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13563:3:62", + "nodeType": "YulIdentifier", + "src": "13563:3:62" + }, + "nativeSrc": "13563:18:62", + "nodeType": "YulFunctionCall", + "src": "13563:18:62" + }, + { + "name": "value1", + "nativeSrc": "13583:6:62", + "nodeType": "YulIdentifier", + "src": "13583:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13556:6:62", + "nodeType": "YulIdentifier", + "src": "13556:6:62" + }, + "nativeSrc": "13556:34:62", + "nodeType": "YulFunctionCall", + "src": "13556:34:62" + }, + "nativeSrc": "13556:34:62", + "nodeType": "YulExpressionStatement", + "src": "13556:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13610:9:62", + "nodeType": "YulIdentifier", + "src": "13610:9:62" + }, + { + "kind": "number", + "nativeSrc": "13621:2:62", + "nodeType": "YulLiteral", + "src": "13621:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13606:3:62", + "nodeType": "YulIdentifier", + "src": "13606:3:62" + }, + "nativeSrc": "13606:18:62", + "nodeType": "YulFunctionCall", + "src": "13606:18:62" + }, + { + "name": "value2", + "nativeSrc": "13626:6:62", + "nodeType": "YulIdentifier", + "src": "13626:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13599:6:62", + "nodeType": "YulIdentifier", + "src": "13599:6:62" + }, + "nativeSrc": "13599:34:62", + "nodeType": "YulFunctionCall", + "src": "13599:34:62" + }, + "nativeSrc": "13599:34:62", + "nodeType": "YulExpressionStatement", + "src": "13599:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13653:9:62", + "nodeType": "YulIdentifier", + "src": "13653:9:62" + }, + { + "kind": "number", + "nativeSrc": "13664:2:62", + "nodeType": "YulLiteral", + "src": "13664:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13649:3:62", + "nodeType": "YulIdentifier", + "src": "13649:3:62" + }, + "nativeSrc": "13649:18:62", + "nodeType": "YulFunctionCall", + "src": "13649:18:62" + }, + { + "name": "value3", + "nativeSrc": "13669:6:62", + "nodeType": "YulIdentifier", + "src": "13669:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13642:6:62", + "nodeType": "YulIdentifier", + "src": "13642:6:62" + }, + "nativeSrc": "13642:34:62", + "nodeType": "YulFunctionCall", + "src": "13642:34:62" + }, + "nativeSrc": "13642:34:62", + "nodeType": "YulExpressionStatement", + "src": "13642:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13696:9:62", + "nodeType": "YulIdentifier", + "src": "13696:9:62" + }, + { + "kind": "number", + "nativeSrc": "13707:3:62", + "nodeType": "YulLiteral", + "src": "13707:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13692:3:62", + "nodeType": "YulIdentifier", + "src": "13692:3:62" + }, + "nativeSrc": "13692:19:62", + "nodeType": "YulFunctionCall", + "src": "13692:19:62" + }, + { + "name": "value4", + "nativeSrc": "13713:6:62", + "nodeType": "YulIdentifier", + "src": "13713:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13685:6:62", + "nodeType": "YulIdentifier", + "src": "13685:6:62" + }, + "nativeSrc": "13685:35:62", + "nodeType": "YulFunctionCall", + "src": "13685:35:62" + }, + "nativeSrc": "13685:35:62", + "nodeType": "YulExpressionStatement", + "src": "13685:35:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13740:9:62", + "nodeType": "YulIdentifier", + "src": "13740:9:62" + }, + { + "kind": "number", + "nativeSrc": "13751:3:62", + "nodeType": "YulLiteral", + "src": "13751:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13736:3:62", + "nodeType": "YulIdentifier", + "src": "13736:3:62" + }, + "nativeSrc": "13736:19:62", + "nodeType": "YulFunctionCall", + "src": "13736:19:62" + }, + { + "name": "value5", + "nativeSrc": "13757:6:62", + "nodeType": "YulIdentifier", + "src": "13757:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13729:6:62", + "nodeType": "YulIdentifier", + "src": "13729:6:62" + }, + "nativeSrc": "13729:35:62", + "nodeType": "YulFunctionCall", + "src": "13729:35:62" + }, + "nativeSrc": "13729:35:62", + "nodeType": "YulExpressionStatement", + "src": "13729:35:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed", + "nativeSrc": "13235:535:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "13405:9:62", + "nodeType": "YulTypedName", + "src": "13405:9:62", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "13416:6:62", + "nodeType": "YulTypedName", + "src": "13416:6:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "13424:6:62", + "nodeType": "YulTypedName", + "src": "13424:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "13432:6:62", + "nodeType": "YulTypedName", + "src": "13432:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "13440:6:62", + "nodeType": "YulTypedName", + "src": "13440:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "13448:6:62", + "nodeType": "YulTypedName", + "src": "13448:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "13456:6:62", + "nodeType": "YulTypedName", + "src": "13456:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "13467:4:62", + "nodeType": "YulTypedName", + "src": "13467:4:62", + "type": "" + } + ], + "src": "13235:535:62" + }, + { + "body": { + "nativeSrc": "13880:1072:62", + "nodeType": "YulBlock", + "src": "13880:1072:62", + "statements": [ + { + "nativeSrc": "13890:43:62", + "nodeType": "YulVariableDeclaration", + "src": "13890:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "13908:7:62", + "nodeType": "YulIdentifier", + "src": "13908:7:62" + }, + { + "name": "headStart", + "nativeSrc": "13917:9:62", + "nodeType": "YulIdentifier", + "src": "13917:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "13904:3:62", + "nodeType": "YulIdentifier", + "src": "13904:3:62" + }, + "nativeSrc": "13904:23:62", + "nodeType": "YulFunctionCall", + "src": "13904:23:62" + }, + { + "kind": "number", + "nativeSrc": "13929:3:62", + "nodeType": "YulLiteral", + "src": "13929:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "13900:3:62", + "nodeType": "YulIdentifier", + "src": "13900:3:62" + }, + "nativeSrc": "13900:33:62", + "nodeType": "YulFunctionCall", + "src": "13900:33:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "13894:2:62", + "nodeType": "YulTypedName", + "src": "13894:2:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "13948:16:62", + "nodeType": "YulBlock", + "src": "13948:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "13957:1:62", + "nodeType": "YulLiteral", + "src": "13957:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "13960:1:62", + "nodeType": "YulLiteral", + "src": "13960:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "13950:6:62", + "nodeType": "YulIdentifier", + "src": "13950:6:62" + }, + "nativeSrc": "13950:12:62", + "nodeType": "YulFunctionCall", + "src": "13950:12:62" + }, + "nativeSrc": "13950:12:62", + "nodeType": "YulExpressionStatement", + "src": "13950:12:62" + } + ] + }, + "condition": { + "name": "_1", + "nativeSrc": "13945:2:62", + "nodeType": "YulIdentifier", + "src": "13945:2:62" + }, + "nativeSrc": "13942:22:62", + "nodeType": "YulIf", + "src": "13942:22:62" + }, + { + "nativeSrc": "13973:7:62", + "nodeType": "YulAssignment", + "src": "13973:7:62", + "value": { + "kind": "number", + "nativeSrc": "13979:1:62", + "nodeType": "YulLiteral", + "src": "13979:1:62", + "type": "", + "value": "0" + }, + "variableNames": [ + { + "name": "_1", + "nativeSrc": "13973:2:62", + "nodeType": "YulIdentifier", + "src": "13973:2:62" + } + ] + }, + { + "nativeSrc": "13989:35:62", + "nodeType": "YulVariableDeclaration", + "src": "13989:35:62", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_memory_2167", + "nativeSrc": "14002:20:62", + "nodeType": "YulIdentifier", + "src": "14002:20:62" + }, + "nativeSrc": "14002:22:62", + "nodeType": "YulFunctionCall", + "src": "14002:22:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "13993:5:62", + "nodeType": "YulTypedName", + "src": "13993:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "14033:31:62", + "nodeType": "YulVariableDeclaration", + "src": "14033:31:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14054:9:62", + "nodeType": "YulIdentifier", + "src": "14054:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "14048:5:62", + "nodeType": "YulIdentifier", + "src": "14048:5:62" + }, + "nativeSrc": "14048:16:62", + "nodeType": "YulFunctionCall", + "src": "14048:16:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "14037:7:62", + "nodeType": "YulTypedName", + "src": "14037:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "14098:7:62", + "nodeType": "YulIdentifier", + "src": "14098:7:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "14073:24:62", + "nodeType": "YulIdentifier", + "src": "14073:24:62" + }, + "nativeSrc": "14073:33:62", + "nodeType": "YulFunctionCall", + "src": "14073:33:62" + }, + "nativeSrc": "14073:33:62", + "nodeType": "YulExpressionStatement", + "src": "14073:33:62" + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "14122:5:62", + "nodeType": "YulIdentifier", + "src": "14122:5:62" + }, + { + "name": "value_1", + "nativeSrc": "14129:7:62", + "nodeType": "YulIdentifier", + "src": "14129:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14115:6:62", + "nodeType": "YulIdentifier", + "src": "14115:6:62" + }, + "nativeSrc": "14115:22:62", + "nodeType": "YulFunctionCall", + "src": "14115:22:62" + }, + "nativeSrc": "14115:22:62", + "nodeType": "YulExpressionStatement", + "src": "14115:22:62" + }, + { + "nativeSrc": "14146:17:62", + "nodeType": "YulVariableDeclaration", + "src": "14146:17:62", + "value": { + "name": "_1", + "nativeSrc": "14161:2:62", + "nodeType": "YulIdentifier", + "src": "14161:2:62" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "14150:7:62", + "nodeType": "YulTypedName", + "src": "14150:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "14172:36:62", + "nodeType": "YulAssignment", + "src": "14172:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14193:9:62", + "nodeType": "YulIdentifier", + "src": "14193:9:62" + }, + { + "kind": "number", + "nativeSrc": "14204:2:62", + "nodeType": "YulLiteral", + "src": "14204:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14189:3:62", + "nodeType": "YulIdentifier", + "src": "14189:3:62" + }, + "nativeSrc": "14189:18:62", + "nodeType": "YulFunctionCall", + "src": "14189:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "14183:5:62", + "nodeType": "YulIdentifier", + "src": "14183:5:62" + }, + "nativeSrc": "14183:25:62", + "nodeType": "YulFunctionCall", + "src": "14183:25:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "14172:7:62", + "nodeType": "YulIdentifier", + "src": "14172:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "14228:5:62", + "nodeType": "YulIdentifier", + "src": "14228:5:62" + }, + { + "kind": "number", + "nativeSrc": "14235:2:62", + "nodeType": "YulLiteral", + "src": "14235:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14224:3:62", + "nodeType": "YulIdentifier", + "src": "14224:3:62" + }, + "nativeSrc": "14224:14:62", + "nodeType": "YulFunctionCall", + "src": "14224:14:62" + }, + { + "name": "value_2", + "nativeSrc": "14240:7:62", + "nodeType": "YulIdentifier", + "src": "14240:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14217:6:62", + "nodeType": "YulIdentifier", + "src": "14217:6:62" + }, + "nativeSrc": "14217:31:62", + "nodeType": "YulFunctionCall", + "src": "14217:31:62" + }, + "nativeSrc": "14217:31:62", + "nodeType": "YulExpressionStatement", + "src": "14217:31:62" + }, + { + "nativeSrc": "14257:17:62", + "nodeType": "YulVariableDeclaration", + "src": "14257:17:62", + "value": { + "name": "_1", + "nativeSrc": "14272:2:62", + "nodeType": "YulIdentifier", + "src": "14272:2:62" + }, + "variables": [ + { + "name": "value_3", + "nativeSrc": "14261:7:62", + "nodeType": "YulTypedName", + "src": "14261:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "14283:36:62", + "nodeType": "YulAssignment", + "src": "14283:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14304:9:62", + "nodeType": "YulIdentifier", + "src": "14304:9:62" + }, + { + "kind": "number", + "nativeSrc": "14315:2:62", + "nodeType": "YulLiteral", + "src": "14315:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14300:3:62", + "nodeType": "YulIdentifier", + "src": "14300:3:62" + }, + "nativeSrc": "14300:18:62", + "nodeType": "YulFunctionCall", + "src": "14300:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "14294:5:62", + "nodeType": "YulIdentifier", + "src": "14294:5:62" + }, + "nativeSrc": "14294:25:62", + "nodeType": "YulFunctionCall", + "src": "14294:25:62" + }, + "variableNames": [ + { + "name": "value_3", + "nativeSrc": "14283:7:62", + "nodeType": "YulIdentifier", + "src": "14283:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "14339:5:62", + "nodeType": "YulIdentifier", + "src": "14339:5:62" + }, + { + "kind": "number", + "nativeSrc": "14346:2:62", + "nodeType": "YulLiteral", + "src": "14346:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14335:3:62", + "nodeType": "YulIdentifier", + "src": "14335:3:62" + }, + "nativeSrc": "14335:14:62", + "nodeType": "YulFunctionCall", + "src": "14335:14:62" + }, + { + "name": "value_3", + "nativeSrc": "14351:7:62", + "nodeType": "YulIdentifier", + "src": "14351:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14328:6:62", + "nodeType": "YulIdentifier", + "src": "14328:6:62" + }, + "nativeSrc": "14328:31:62", + "nodeType": "YulFunctionCall", + "src": "14328:31:62" + }, + "nativeSrc": "14328:31:62", + "nodeType": "YulExpressionStatement", + "src": "14328:31:62" + }, + { + "nativeSrc": "14368:17:62", + "nodeType": "YulVariableDeclaration", + "src": "14368:17:62", + "value": { + "name": "_1", + "nativeSrc": "14383:2:62", + "nodeType": "YulIdentifier", + "src": "14383:2:62" + }, + "variables": [ + { + "name": "value_4", + "nativeSrc": "14372:7:62", + "nodeType": "YulTypedName", + "src": "14372:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "14394:36:62", + "nodeType": "YulAssignment", + "src": "14394:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14415:9:62", + "nodeType": "YulIdentifier", + "src": "14415:9:62" + }, + { + "kind": "number", + "nativeSrc": "14426:2:62", + "nodeType": "YulLiteral", + "src": "14426:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14411:3:62", + "nodeType": "YulIdentifier", + "src": "14411:3:62" + }, + "nativeSrc": "14411:18:62", + "nodeType": "YulFunctionCall", + "src": "14411:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "14405:5:62", + "nodeType": "YulIdentifier", + "src": "14405:5:62" + }, + "nativeSrc": "14405:25:62", + "nodeType": "YulFunctionCall", + "src": "14405:25:62" + }, + "variableNames": [ + { + "name": "value_4", + "nativeSrc": "14394:7:62", + "nodeType": "YulIdentifier", + "src": "14394:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "14450:5:62", + "nodeType": "YulIdentifier", + "src": "14450:5:62" + }, + { + "kind": "number", + "nativeSrc": "14457:2:62", + "nodeType": "YulLiteral", + "src": "14457:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14446:3:62", + "nodeType": "YulIdentifier", + "src": "14446:3:62" + }, + "nativeSrc": "14446:14:62", + "nodeType": "YulFunctionCall", + "src": "14446:14:62" + }, + { + "name": "value_4", + "nativeSrc": "14462:7:62", + "nodeType": "YulIdentifier", + "src": "14462:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14439:6:62", + "nodeType": "YulIdentifier", + "src": "14439:6:62" + }, + "nativeSrc": "14439:31:62", + "nodeType": "YulFunctionCall", + "src": "14439:31:62" + }, + "nativeSrc": "14439:31:62", + "nodeType": "YulExpressionStatement", + "src": "14439:31:62" + }, + { + "nativeSrc": "14479:17:62", + "nodeType": "YulVariableDeclaration", + "src": "14479:17:62", + "value": { + "name": "_1", + "nativeSrc": "14494:2:62", + "nodeType": "YulIdentifier", + "src": "14494:2:62" + }, + "variables": [ + { + "name": "value_5", + "nativeSrc": "14483:7:62", + "nodeType": "YulTypedName", + "src": "14483:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "14505:37:62", + "nodeType": "YulAssignment", + "src": "14505:37:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14526:9:62", + "nodeType": "YulIdentifier", + "src": "14526:9:62" + }, + { + "kind": "number", + "nativeSrc": "14537:3:62", + "nodeType": "YulLiteral", + "src": "14537:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14522:3:62", + "nodeType": "YulIdentifier", + "src": "14522:3:62" + }, + "nativeSrc": "14522:19:62", + "nodeType": "YulFunctionCall", + "src": "14522:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "14516:5:62", + "nodeType": "YulIdentifier", + "src": "14516:5:62" + }, + "nativeSrc": "14516:26:62", + "nodeType": "YulFunctionCall", + "src": "14516:26:62" + }, + "variableNames": [ + { + "name": "value_5", + "nativeSrc": "14505:7:62", + "nodeType": "YulIdentifier", + "src": "14505:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "14562:5:62", + "nodeType": "YulIdentifier", + "src": "14562:5:62" + }, + { + "kind": "number", + "nativeSrc": "14569:3:62", + "nodeType": "YulLiteral", + "src": "14569:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14558:3:62", + "nodeType": "YulIdentifier", + "src": "14558:3:62" + }, + "nativeSrc": "14558:15:62", + "nodeType": "YulFunctionCall", + "src": "14558:15:62" + }, + { + "name": "value_5", + "nativeSrc": "14575:7:62", + "nodeType": "YulIdentifier", + "src": "14575:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14551:6:62", + "nodeType": "YulIdentifier", + "src": "14551:6:62" + }, + "nativeSrc": "14551:32:62", + "nodeType": "YulFunctionCall", + "src": "14551:32:62" + }, + "nativeSrc": "14551:32:62", + "nodeType": "YulExpressionStatement", + "src": "14551:32:62" + }, + { + "nativeSrc": "14592:17:62", + "nodeType": "YulVariableDeclaration", + "src": "14592:17:62", + "value": { + "name": "_1", + "nativeSrc": "14607:2:62", + "nodeType": "YulIdentifier", + "src": "14607:2:62" + }, + "variables": [ + { + "name": "value_6", + "nativeSrc": "14596:7:62", + "nodeType": "YulTypedName", + "src": "14596:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "14618:37:62", + "nodeType": "YulAssignment", + "src": "14618:37:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14639:9:62", + "nodeType": "YulIdentifier", + "src": "14639:9:62" + }, + { + "kind": "number", + "nativeSrc": "14650:3:62", + "nodeType": "YulLiteral", + "src": "14650:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14635:3:62", + "nodeType": "YulIdentifier", + "src": "14635:3:62" + }, + "nativeSrc": "14635:19:62", + "nodeType": "YulFunctionCall", + "src": "14635:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "14629:5:62", + "nodeType": "YulIdentifier", + "src": "14629:5:62" + }, + "nativeSrc": "14629:26:62", + "nodeType": "YulFunctionCall", + "src": "14629:26:62" + }, + "variableNames": [ + { + "name": "value_6", + "nativeSrc": "14618:7:62", + "nodeType": "YulIdentifier", + "src": "14618:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "14675:5:62", + "nodeType": "YulIdentifier", + "src": "14675:5:62" + }, + { + "kind": "number", + "nativeSrc": "14682:3:62", + "nodeType": "YulLiteral", + "src": "14682:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14671:3:62", + "nodeType": "YulIdentifier", + "src": "14671:3:62" + }, + "nativeSrc": "14671:15:62", + "nodeType": "YulFunctionCall", + "src": "14671:15:62" + }, + { + "name": "value_6", + "nativeSrc": "14688:7:62", + "nodeType": "YulIdentifier", + "src": "14688:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14664:6:62", + "nodeType": "YulIdentifier", + "src": "14664:6:62" + }, + "nativeSrc": "14664:32:62", + "nodeType": "YulFunctionCall", + "src": "14664:32:62" + }, + "nativeSrc": "14664:32:62", + "nodeType": "YulExpressionStatement", + "src": "14664:32:62" + }, + { + "nativeSrc": "14705:17:62", + "nodeType": "YulVariableDeclaration", + "src": "14705:17:62", + "value": { + "name": "_1", + "nativeSrc": "14720:2:62", + "nodeType": "YulIdentifier", + "src": "14720:2:62" + }, + "variables": [ + { + "name": "value_7", + "nativeSrc": "14709:7:62", + "nodeType": "YulTypedName", + "src": "14709:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "14731:37:62", + "nodeType": "YulAssignment", + "src": "14731:37:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14752:9:62", + "nodeType": "YulIdentifier", + "src": "14752:9:62" + }, + { + "kind": "number", + "nativeSrc": "14763:3:62", + "nodeType": "YulLiteral", + "src": "14763:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14748:3:62", + "nodeType": "YulIdentifier", + "src": "14748:3:62" + }, + "nativeSrc": "14748:19:62", + "nodeType": "YulFunctionCall", + "src": "14748:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "14742:5:62", + "nodeType": "YulIdentifier", + "src": "14742:5:62" + }, + "nativeSrc": "14742:26:62", + "nodeType": "YulFunctionCall", + "src": "14742:26:62" + }, + "variableNames": [ + { + "name": "value_7", + "nativeSrc": "14731:7:62", + "nodeType": "YulIdentifier", + "src": "14731:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "14788:5:62", + "nodeType": "YulIdentifier", + "src": "14788:5:62" + }, + { + "kind": "number", + "nativeSrc": "14795:3:62", + "nodeType": "YulLiteral", + "src": "14795:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14784:3:62", + "nodeType": "YulIdentifier", + "src": "14784:3:62" + }, + "nativeSrc": "14784:15:62", + "nodeType": "YulFunctionCall", + "src": "14784:15:62" + }, + { + "name": "value_7", + "nativeSrc": "14801:7:62", + "nodeType": "YulIdentifier", + "src": "14801:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14777:6:62", + "nodeType": "YulIdentifier", + "src": "14777:6:62" + }, + "nativeSrc": "14777:32:62", + "nodeType": "YulFunctionCall", + "src": "14777:32:62" + }, + "nativeSrc": "14777:32:62", + "nodeType": "YulExpressionStatement", + "src": "14777:32:62" + }, + { + "nativeSrc": "14818:17:62", + "nodeType": "YulVariableDeclaration", + "src": "14818:17:62", + "value": { + "name": "_1", + "nativeSrc": "14833:2:62", + "nodeType": "YulIdentifier", + "src": "14833:2:62" + }, + "variables": [ + { + "name": "value_8", + "nativeSrc": "14822:7:62", + "nodeType": "YulTypedName", + "src": "14822:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "14844:37:62", + "nodeType": "YulAssignment", + "src": "14844:37:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14865:9:62", + "nodeType": "YulIdentifier", + "src": "14865:9:62" + }, + { + "kind": "number", + "nativeSrc": "14876:3:62", + "nodeType": "YulLiteral", + "src": "14876:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14861:3:62", + "nodeType": "YulIdentifier", + "src": "14861:3:62" + }, + "nativeSrc": "14861:19:62", + "nodeType": "YulFunctionCall", + "src": "14861:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "14855:5:62", + "nodeType": "YulIdentifier", + "src": "14855:5:62" + }, + "nativeSrc": "14855:26:62", + "nodeType": "YulFunctionCall", + "src": "14855:26:62" + }, + "variableNames": [ + { + "name": "value_8", + "nativeSrc": "14844:7:62", + "nodeType": "YulIdentifier", + "src": "14844:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "14901:5:62", + "nodeType": "YulIdentifier", + "src": "14901:5:62" + }, + { + "kind": "number", + "nativeSrc": "14908:3:62", + "nodeType": "YulLiteral", + "src": "14908:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14897:3:62", + "nodeType": "YulIdentifier", + "src": "14897:3:62" + }, + "nativeSrc": "14897:15:62", + "nodeType": "YulFunctionCall", + "src": "14897:15:62" + }, + { + "name": "value_8", + "nativeSrc": "14914:7:62", + "nodeType": "YulIdentifier", + "src": "14914:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14890:6:62", + "nodeType": "YulIdentifier", + "src": "14890:6:62" + }, + "nativeSrc": "14890:32:62", + "nodeType": "YulFunctionCall", + "src": "14890:32:62" + }, + "nativeSrc": "14890:32:62", + "nodeType": "YulExpressionStatement", + "src": "14890:32:62" + }, + { + "nativeSrc": "14931:15:62", + "nodeType": "YulAssignment", + "src": "14931:15:62", + "value": { + "name": "value", + "nativeSrc": "14941:5:62", + "nodeType": "YulIdentifier", + "src": "14941:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "14931:6:62", + "nodeType": "YulIdentifier", + "src": "14931:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_State_$11307_memory_ptr_fromMemory", + "nativeSrc": "13775:1177:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "13846:9:62", + "nodeType": "YulTypedName", + "src": "13846:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "13857:7:62", + "nodeType": "YulTypedName", + "src": "13857:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "13869:6:62", + "nodeType": "YulTypedName", + "src": "13869:6:62", + "type": "" + } + ], + "src": "13775:1177:62" + }, + { + "body": { + "nativeSrc": "15086:119:62", + "nodeType": "YulBlock", + "src": "15086:119:62", + "statements": [ + { + "nativeSrc": "15096:26:62", + "nodeType": "YulAssignment", + "src": "15096:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15108:9:62", + "nodeType": "YulIdentifier", + "src": "15108:9:62" + }, + { + "kind": "number", + "nativeSrc": "15119:2:62", + "nodeType": "YulLiteral", + "src": "15119:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15104:3:62", + "nodeType": "YulIdentifier", + "src": "15104:3:62" + }, + "nativeSrc": "15104:18:62", + "nodeType": "YulFunctionCall", + "src": "15104:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "15096:4:62", + "nodeType": "YulIdentifier", + "src": "15096:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15138:9:62", + "nodeType": "YulIdentifier", + "src": "15138:9:62" + }, + { + "name": "value0", + "nativeSrc": "15149:6:62", + "nodeType": "YulIdentifier", + "src": "15149:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15131:6:62", + "nodeType": "YulIdentifier", + "src": "15131:6:62" + }, + "nativeSrc": "15131:25:62", + "nodeType": "YulFunctionCall", + "src": "15131:25:62" + }, + "nativeSrc": "15131:25:62", + "nodeType": "YulExpressionStatement", + "src": "15131:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15176:9:62", + "nodeType": "YulIdentifier", + "src": "15176:9:62" + }, + { + "kind": "number", + "nativeSrc": "15187:2:62", + "nodeType": "YulLiteral", + "src": "15187:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15172:3:62", + "nodeType": "YulIdentifier", + "src": "15172:3:62" + }, + "nativeSrc": "15172:18:62", + "nodeType": "YulFunctionCall", + "src": "15172:18:62" + }, + { + "name": "value1", + "nativeSrc": "15192:6:62", + "nodeType": "YulIdentifier", + "src": "15192:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15165:6:62", + "nodeType": "YulIdentifier", + "src": "15165:6:62" + }, + "nativeSrc": "15165:34:62", + "nodeType": "YulFunctionCall", + "src": "15165:34:62" + }, + "nativeSrc": "15165:34:62", + "nodeType": "YulExpressionStatement", + "src": "15165:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "14957:248:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "15047:9:62", + "nodeType": "YulTypedName", + "src": "15047:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "15058:6:62", + "nodeType": "YulTypedName", + "src": "15058:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "15066:6:62", + "nodeType": "YulTypedName", + "src": "15066:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "15077:4:62", + "nodeType": "YulTypedName", + "src": "15077:4:62", + "type": "" + } + ], + "src": "14957:248:62" + }, + { + "body": { + "nativeSrc": "15259:350:62", + "nodeType": "YulBlock", + "src": "15259:350:62", + "statements": [ + { + "nativeSrc": "15269:26:62", + "nodeType": "YulVariableDeclaration", + "src": "15269:26:62", + "value": { + "arguments": [ + { + "name": "value", + "nativeSrc": "15289:5:62", + "nodeType": "YulIdentifier", + "src": "15289:5:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "15283:5:62", + "nodeType": "YulIdentifier", + "src": "15283:5:62" + }, + "nativeSrc": "15283:12:62", + "nodeType": "YulFunctionCall", + "src": "15283:12:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "15273:6:62", + "nodeType": "YulTypedName", + "src": "15273:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "15311:3:62", + "nodeType": "YulIdentifier", + "src": "15311:3:62" + }, + { + "name": "length", + "nativeSrc": "15316:6:62", + "nodeType": "YulIdentifier", + "src": "15316:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15304:6:62", + "nodeType": "YulIdentifier", + "src": "15304:6:62" + }, + "nativeSrc": "15304:19:62", + "nodeType": "YulFunctionCall", + "src": "15304:19:62" + }, + "nativeSrc": "15304:19:62", + "nodeType": "YulExpressionStatement", + "src": "15304:19:62" + }, + { + "nativeSrc": "15332:10:62", + "nodeType": "YulVariableDeclaration", + "src": "15332:10:62", + "value": { + "kind": "number", + "nativeSrc": "15341:1:62", + "nodeType": "YulLiteral", + "src": "15341:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "15336:1:62", + "nodeType": "YulTypedName", + "src": "15336:1:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "15403:87:62", + "nodeType": "YulBlock", + "src": "15403:87:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "15432:3:62", + "nodeType": "YulIdentifier", + "src": "15432:3:62" + }, + { + "name": "i", + "nativeSrc": "15437:1:62", + "nodeType": "YulIdentifier", + "src": "15437:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15428:3:62", + "nodeType": "YulIdentifier", + "src": "15428:3:62" + }, + "nativeSrc": "15428:11:62", + "nodeType": "YulFunctionCall", + "src": "15428:11:62" + }, + { + "kind": "number", + "nativeSrc": "15441:4:62", + "nodeType": "YulLiteral", + "src": "15441:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15424:3:62", + "nodeType": "YulIdentifier", + "src": "15424:3:62" + }, + "nativeSrc": "15424:22:62", + "nodeType": "YulFunctionCall", + "src": "15424:22:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "15462:5:62", + "nodeType": "YulIdentifier", + "src": "15462:5:62" + }, + { + "name": "i", + "nativeSrc": "15469:1:62", + "nodeType": "YulIdentifier", + "src": "15469:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15458:3:62", + "nodeType": "YulIdentifier", + "src": "15458:3:62" + }, + "nativeSrc": "15458:13:62", + "nodeType": "YulFunctionCall", + "src": "15458:13:62" + }, + { + "kind": "number", + "nativeSrc": "15473:4:62", + "nodeType": "YulLiteral", + "src": "15473:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15454:3:62", + "nodeType": "YulIdentifier", + "src": "15454:3:62" + }, + "nativeSrc": "15454:24:62", + "nodeType": "YulFunctionCall", + "src": "15454:24:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "15448:5:62", + "nodeType": "YulIdentifier", + "src": "15448:5:62" + }, + "nativeSrc": "15448:31:62", + "nodeType": "YulFunctionCall", + "src": "15448:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15417:6:62", + "nodeType": "YulIdentifier", + "src": "15417:6:62" + }, + "nativeSrc": "15417:63:62", + "nodeType": "YulFunctionCall", + "src": "15417:63:62" + }, + "nativeSrc": "15417:63:62", + "nodeType": "YulExpressionStatement", + "src": "15417:63:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "15362:1:62", + "nodeType": "YulIdentifier", + "src": "15362:1:62" + }, + { + "name": "length", + "nativeSrc": "15365:6:62", + "nodeType": "YulIdentifier", + "src": "15365:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "15359:2:62", + "nodeType": "YulIdentifier", + "src": "15359:2:62" + }, + "nativeSrc": "15359:13:62", + "nodeType": "YulFunctionCall", + "src": "15359:13:62" + }, + "nativeSrc": "15351:139:62", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "15373:21:62", + "nodeType": "YulBlock", + "src": "15373:21:62", + "statements": [ + { + "nativeSrc": "15375:17:62", + "nodeType": "YulAssignment", + "src": "15375:17:62", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "15384:1:62", + "nodeType": "YulIdentifier", + "src": "15384:1:62" + }, + { + "kind": "number", + "nativeSrc": "15387:4:62", + "nodeType": "YulLiteral", + "src": "15387:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15380:3:62", + "nodeType": "YulIdentifier", + "src": "15380:3:62" + }, + "nativeSrc": "15380:12:62", + "nodeType": "YulFunctionCall", + "src": "15380:12:62" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "15375:1:62", + "nodeType": "YulIdentifier", + "src": "15375:1:62" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "15355:3:62", + "nodeType": "YulBlock", + "src": "15355:3:62", + "statements": [] + }, + "src": "15351:139:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "15514:3:62", + "nodeType": "YulIdentifier", + "src": "15514:3:62" + }, + { + "name": "length", + "nativeSrc": "15519:6:62", + "nodeType": "YulIdentifier", + "src": "15519:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15510:3:62", + "nodeType": "YulIdentifier", + "src": "15510:3:62" + }, + "nativeSrc": "15510:16:62", + "nodeType": "YulFunctionCall", + "src": "15510:16:62" + }, + { + "kind": "number", + "nativeSrc": "15528:4:62", + "nodeType": "YulLiteral", + "src": "15528:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15506:3:62", + "nodeType": "YulIdentifier", + "src": "15506:3:62" + }, + "nativeSrc": "15506:27:62", + "nodeType": "YulFunctionCall", + "src": "15506:27:62" + }, + { + "kind": "number", + "nativeSrc": "15535:1:62", + "nodeType": "YulLiteral", + "src": "15535:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15499:6:62", + "nodeType": "YulIdentifier", + "src": "15499:6:62" + }, + "nativeSrc": "15499:38:62", + "nodeType": "YulFunctionCall", + "src": "15499:38:62" + }, + "nativeSrc": "15499:38:62", + "nodeType": "YulExpressionStatement", + "src": "15499:38:62" + }, + { + "nativeSrc": "15546:57:62", + "nodeType": "YulAssignment", + "src": "15546:57:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "15561:3:62", + "nodeType": "YulIdentifier", + "src": "15561:3:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "15574:6:62", + "nodeType": "YulIdentifier", + "src": "15574:6:62" + }, + { + "kind": "number", + "nativeSrc": "15582:2:62", + "nodeType": "YulLiteral", + "src": "15582:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15570:3:62", + "nodeType": "YulIdentifier", + "src": "15570:3:62" + }, + "nativeSrc": "15570:15:62", + "nodeType": "YulFunctionCall", + "src": "15570:15:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15591:2:62", + "nodeType": "YulLiteral", + "src": "15591:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "15587:3:62", + "nodeType": "YulIdentifier", + "src": "15587:3:62" + }, + "nativeSrc": "15587:7:62", + "nodeType": "YulFunctionCall", + "src": "15587:7:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "15566:3:62", + "nodeType": "YulIdentifier", + "src": "15566:3:62" + }, + "nativeSrc": "15566:29:62", + "nodeType": "YulFunctionCall", + "src": "15566:29:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15557:3:62", + "nodeType": "YulIdentifier", + "src": "15557:3:62" + }, + "nativeSrc": "15557:39:62", + "nodeType": "YulFunctionCall", + "src": "15557:39:62" + }, + { + "kind": "number", + "nativeSrc": "15598:4:62", + "nodeType": "YulLiteral", + "src": "15598:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15553:3:62", + "nodeType": "YulIdentifier", + "src": "15553:3:62" + }, + "nativeSrc": "15553:50:62", + "nodeType": "YulFunctionCall", + "src": "15553:50:62" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "15546:3:62", + "nodeType": "YulIdentifier", + "src": "15546:3:62" + } + ] + } + ] + }, + "name": "abi_encode_bytes", + "nativeSrc": "15210:399:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "15236:5:62", + "nodeType": "YulTypedName", + "src": "15236:5:62", + "type": "" + }, + { + "name": "pos", + "nativeSrc": "15243:3:62", + "nodeType": "YulTypedName", + "src": "15243:3:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "15251:3:62", + "nodeType": "YulTypedName", + "src": "15251:3:62", + "type": "" + } + ], + "src": "15210:399:62" + }, + { + "body": { + "nativeSrc": "15761:167:62", + "nodeType": "YulBlock", + "src": "15761:167:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15778:9:62", + "nodeType": "YulIdentifier", + "src": "15778:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "15793:6:62", + "nodeType": "YulIdentifier", + "src": "15793:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15809:3:62", + "nodeType": "YulLiteral", + "src": "15809:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "15814:1:62", + "nodeType": "YulLiteral", + "src": "15814:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "15805:3:62", + "nodeType": "YulIdentifier", + "src": "15805:3:62" + }, + "nativeSrc": "15805:11:62", + "nodeType": "YulFunctionCall", + "src": "15805:11:62" + }, + { + "kind": "number", + "nativeSrc": "15818:1:62", + "nodeType": "YulLiteral", + "src": "15818:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "15801:3:62", + "nodeType": "YulIdentifier", + "src": "15801:3:62" + }, + "nativeSrc": "15801:19:62", + "nodeType": "YulFunctionCall", + "src": "15801:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "15789:3:62", + "nodeType": "YulIdentifier", + "src": "15789:3:62" + }, + "nativeSrc": "15789:32:62", + "nodeType": "YulFunctionCall", + "src": "15789:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15771:6:62", + "nodeType": "YulIdentifier", + "src": "15771:6:62" + }, + "nativeSrc": "15771:51:62", + "nodeType": "YulFunctionCall", + "src": "15771:51:62" + }, + "nativeSrc": "15771:51:62", + "nodeType": "YulExpressionStatement", + "src": "15771:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15842:9:62", + "nodeType": "YulIdentifier", + "src": "15842:9:62" + }, + { + "kind": "number", + "nativeSrc": "15853:2:62", + "nodeType": "YulLiteral", + "src": "15853:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15838:3:62", + "nodeType": "YulIdentifier", + "src": "15838:3:62" + }, + "nativeSrc": "15838:18:62", + "nodeType": "YulFunctionCall", + "src": "15838:18:62" + }, + { + "kind": "number", + "nativeSrc": "15858:2:62", + "nodeType": "YulLiteral", + "src": "15858:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15831:6:62", + "nodeType": "YulIdentifier", + "src": "15831:6:62" + }, + "nativeSrc": "15831:30:62", + "nodeType": "YulFunctionCall", + "src": "15831:30:62" + }, + "nativeSrc": "15831:30:62", + "nodeType": "YulExpressionStatement", + "src": "15831:30:62" + }, + { + "nativeSrc": "15870:52:62", + "nodeType": "YulAssignment", + "src": "15870:52:62", + "value": { + "arguments": [ + { + "name": "value1", + "nativeSrc": "15895:6:62", + "nodeType": "YulIdentifier", + "src": "15895:6:62" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15907:9:62", + "nodeType": "YulIdentifier", + "src": "15907:9:62" + }, + { + "kind": "number", + "nativeSrc": "15918:2:62", + "nodeType": "YulLiteral", + "src": "15918:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15903:3:62", + "nodeType": "YulIdentifier", + "src": "15903:3:62" + }, + "nativeSrc": "15903:18:62", + "nodeType": "YulFunctionCall", + "src": "15903:18:62" + } + ], + "functionName": { + "name": "abi_encode_bytes", + "nativeSrc": "15878:16:62", + "nodeType": "YulIdentifier", + "src": "15878:16:62" + }, + "nativeSrc": "15878:44:62", + "nodeType": "YulFunctionCall", + "src": "15878:44:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "15870:4:62", + "nodeType": "YulIdentifier", + "src": "15870:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "15614:314:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "15722:9:62", + "nodeType": "YulTypedName", + "src": "15722:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "15733:6:62", + "nodeType": "YulTypedName", + "src": "15733:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "15741:6:62", + "nodeType": "YulTypedName", + "src": "15741:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "15752:4:62", + "nodeType": "YulTypedName", + "src": "15752:4:62", + "type": "" + } + ], + "src": "15614:314:62" + }, + { + "body": { + "nativeSrc": "16062:145:62", + "nodeType": "YulBlock", + "src": "16062:145:62", + "statements": [ + { + "nativeSrc": "16072:26:62", + "nodeType": "YulAssignment", + "src": "16072:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "16084:9:62", + "nodeType": "YulIdentifier", + "src": "16084:9:62" + }, + { + "kind": "number", + "nativeSrc": "16095:2:62", + "nodeType": "YulLiteral", + "src": "16095:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16080:3:62", + "nodeType": "YulIdentifier", + "src": "16080:3:62" + }, + "nativeSrc": "16080:18:62", + "nodeType": "YulFunctionCall", + "src": "16080:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "16072:4:62", + "nodeType": "YulIdentifier", + "src": "16072:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "16114:9:62", + "nodeType": "YulIdentifier", + "src": "16114:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "16129:6:62", + "nodeType": "YulIdentifier", + "src": "16129:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16145:3:62", + "nodeType": "YulLiteral", + "src": "16145:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "16150:1:62", + "nodeType": "YulLiteral", + "src": "16150:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "16141:3:62", + "nodeType": "YulIdentifier", + "src": "16141:3:62" + }, + "nativeSrc": "16141:11:62", + "nodeType": "YulFunctionCall", + "src": "16141:11:62" + }, + { + "kind": "number", + "nativeSrc": "16154:1:62", + "nodeType": "YulLiteral", + "src": "16154:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "16137:3:62", + "nodeType": "YulIdentifier", + "src": "16137:3:62" + }, + "nativeSrc": "16137:19:62", + "nodeType": "YulFunctionCall", + "src": "16137:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "16125:3:62", + "nodeType": "YulIdentifier", + "src": "16125:3:62" + }, + "nativeSrc": "16125:32:62", + "nodeType": "YulFunctionCall", + "src": "16125:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16107:6:62", + "nodeType": "YulIdentifier", + "src": "16107:6:62" + }, + "nativeSrc": "16107:51:62", + "nodeType": "YulFunctionCall", + "src": "16107:51:62" + }, + "nativeSrc": "16107:51:62", + "nodeType": "YulExpressionStatement", + "src": "16107:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "16178:9:62", + "nodeType": "YulIdentifier", + "src": "16178:9:62" + }, + { + "kind": "number", + "nativeSrc": "16189:2:62", + "nodeType": "YulLiteral", + "src": "16189:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16174:3:62", + "nodeType": "YulIdentifier", + "src": "16174:3:62" + }, + "nativeSrc": "16174:18:62", + "nodeType": "YulFunctionCall", + "src": "16174:18:62" + }, + { + "name": "value1", + "nativeSrc": "16194:6:62", + "nodeType": "YulIdentifier", + "src": "16194:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16167:6:62", + "nodeType": "YulIdentifier", + "src": "16167:6:62" + }, + "nativeSrc": "16167:34:62", + "nodeType": "YulFunctionCall", + "src": "16167:34:62" + }, + "nativeSrc": "16167:34:62", + "nodeType": "YulExpressionStatement", + "src": "16167:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", + "nativeSrc": "15933:274:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "16023:9:62", + "nodeType": "YulTypedName", + "src": "16023:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "16034:6:62", + "nodeType": "YulTypedName", + "src": "16034:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "16042:6:62", + "nodeType": "YulTypedName", + "src": "16042:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "16053:4:62", + "nodeType": "YulTypedName", + "src": "16053:4:62", + "type": "" + } + ], + "src": "15933:274:62" + }, + { + "body": { + "nativeSrc": "16290:199:62", + "nodeType": "YulBlock", + "src": "16290:199:62", + "statements": [ + { + "body": { + "nativeSrc": "16336:16:62", + "nodeType": "YulBlock", + "src": "16336:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16345:1:62", + "nodeType": "YulLiteral", + "src": "16345:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "16348:1:62", + "nodeType": "YulLiteral", + "src": "16348:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "16338:6:62", + "nodeType": "YulIdentifier", + "src": "16338:6:62" + }, + "nativeSrc": "16338:12:62", + "nodeType": "YulFunctionCall", + "src": "16338:12:62" + }, + "nativeSrc": "16338:12:62", + "nodeType": "YulExpressionStatement", + "src": "16338:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "16311:7:62", + "nodeType": "YulIdentifier", + "src": "16311:7:62" + }, + { + "name": "headStart", + "nativeSrc": "16320:9:62", + "nodeType": "YulIdentifier", + "src": "16320:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "16307:3:62", + "nodeType": "YulIdentifier", + "src": "16307:3:62" + }, + "nativeSrc": "16307:23:62", + "nodeType": "YulFunctionCall", + "src": "16307:23:62" + }, + { + "kind": "number", + "nativeSrc": "16332:2:62", + "nodeType": "YulLiteral", + "src": "16332:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "16303:3:62", + "nodeType": "YulIdentifier", + "src": "16303:3:62" + }, + "nativeSrc": "16303:32:62", + "nodeType": "YulFunctionCall", + "src": "16303:32:62" + }, + "nativeSrc": "16300:52:62", + "nodeType": "YulIf", + "src": "16300:52:62" + }, + { + "nativeSrc": "16361:29:62", + "nodeType": "YulVariableDeclaration", + "src": "16361:29:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "16380:9:62", + "nodeType": "YulIdentifier", + "src": "16380:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "16374:5:62", + "nodeType": "YulIdentifier", + "src": "16374:5:62" + }, + "nativeSrc": "16374:16:62", + "nodeType": "YulFunctionCall", + "src": "16374:16:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "16365:5:62", + "nodeType": "YulTypedName", + "src": "16365:5:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "16443:16:62", + "nodeType": "YulBlock", + "src": "16443:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16452:1:62", + "nodeType": "YulLiteral", + "src": "16452:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "16455:1:62", + "nodeType": "YulLiteral", + "src": "16455:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "16445:6:62", + "nodeType": "YulIdentifier", + "src": "16445:6:62" + }, + "nativeSrc": "16445:12:62", + "nodeType": "YulFunctionCall", + "src": "16445:12:62" + }, + "nativeSrc": "16445:12:62", + "nodeType": "YulExpressionStatement", + "src": "16445:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "16412:5:62", + "nodeType": "YulIdentifier", + "src": "16412:5:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "16433:5:62", + "nodeType": "YulIdentifier", + "src": "16433:5:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "16426:6:62", + "nodeType": "YulIdentifier", + "src": "16426:6:62" + }, + "nativeSrc": "16426:13:62", + "nodeType": "YulFunctionCall", + "src": "16426:13:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "16419:6:62", + "nodeType": "YulIdentifier", + "src": "16419:6:62" + }, + "nativeSrc": "16419:21:62", + "nodeType": "YulFunctionCall", + "src": "16419:21:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "16409:2:62", + "nodeType": "YulIdentifier", + "src": "16409:2:62" + }, + "nativeSrc": "16409:32:62", + "nodeType": "YulFunctionCall", + "src": "16409:32:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "16402:6:62", + "nodeType": "YulIdentifier", + "src": "16402:6:62" + }, + "nativeSrc": "16402:40:62", + "nodeType": "YulFunctionCall", + "src": "16402:40:62" + }, + "nativeSrc": "16399:60:62", + "nodeType": "YulIf", + "src": "16399:60:62" + }, + { + "nativeSrc": "16468:15:62", + "nodeType": "YulAssignment", + "src": "16468:15:62", + "value": { + "name": "value", + "nativeSrc": "16478:5:62", + "nodeType": "YulIdentifier", + "src": "16478:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "16468:6:62", + "nodeType": "YulIdentifier", + "src": "16468:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool_fromMemory", + "nativeSrc": "16212:277:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "16256:9:62", + "nodeType": "YulTypedName", + "src": "16256:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "16267:7:62", + "nodeType": "YulTypedName", + "src": "16267:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "16279:6:62", + "nodeType": "YulTypedName", + "src": "16279:6:62", + "type": "" + } + ], + "src": "16212:277:62" + }, + { + "body": { + "nativeSrc": "16668:158:62", + "nodeType": "YulBlock", + "src": "16668:158:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "16685:9:62", + "nodeType": "YulIdentifier", + "src": "16685:9:62" + }, + { + "kind": "number", + "nativeSrc": "16696:2:62", + "nodeType": "YulLiteral", + "src": "16696:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16678:6:62", + "nodeType": "YulIdentifier", + "src": "16678:6:62" + }, + "nativeSrc": "16678:21:62", + "nodeType": "YulFunctionCall", + "src": "16678:21:62" + }, + "nativeSrc": "16678:21:62", + "nodeType": "YulExpressionStatement", + "src": "16678:21:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "16719:9:62", + "nodeType": "YulIdentifier", + "src": "16719:9:62" + }, + { + "kind": "number", + "nativeSrc": "16730:2:62", + "nodeType": "YulLiteral", + "src": "16730:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16715:3:62", + "nodeType": "YulIdentifier", + "src": "16715:3:62" + }, + "nativeSrc": "16715:18:62", + "nodeType": "YulFunctionCall", + "src": "16715:18:62" + }, + { + "kind": "number", + "nativeSrc": "16735:1:62", + "nodeType": "YulLiteral", + "src": "16735:1:62", + "type": "", + "value": "9" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16708:6:62", + "nodeType": "YulIdentifier", + "src": "16708:6:62" + }, + "nativeSrc": "16708:29:62", + "nodeType": "YulFunctionCall", + "src": "16708:29:62" + }, + "nativeSrc": "16708:29:62", + "nodeType": "YulExpressionStatement", + "src": "16708:29:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "16757:9:62", + "nodeType": "YulIdentifier", + "src": "16757:9:62" + }, + { + "kind": "number", + "nativeSrc": "16768:2:62", + "nodeType": "YulLiteral", + "src": "16768:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16753:3:62", + "nodeType": "YulIdentifier", + "src": "16753:3:62" + }, + "nativeSrc": "16753:18:62", + "nodeType": "YulFunctionCall", + "src": "16753:18:62" + }, + { + "hexValue": "217472616e73666572", + "kind": "string", + "nativeSrc": "16773:11:62", + "nodeType": "YulLiteral", + "src": "16773:11:62", + "type": "", + "value": "!transfer" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16746:6:62", + "nodeType": "YulIdentifier", + "src": "16746:6:62" + }, + "nativeSrc": "16746:39:62", + "nodeType": "YulFunctionCall", + "src": "16746:39:62" + }, + "nativeSrc": "16746:39:62", + "nodeType": "YulExpressionStatement", + "src": "16746:39:62" + }, + { + "nativeSrc": "16794:26:62", + "nodeType": "YulAssignment", + "src": "16794:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "16806:9:62", + "nodeType": "YulIdentifier", + "src": "16806:9:62" + }, + { + "kind": "number", + "nativeSrc": "16817:2:62", + "nodeType": "YulLiteral", + "src": "16817:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16802:3:62", + "nodeType": "YulIdentifier", + "src": "16802:3:62" + }, + "nativeSrc": "16802:18:62", + "nodeType": "YulFunctionCall", + "src": "16802:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "16794:4:62", + "nodeType": "YulIdentifier", + "src": "16794:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "16494:332:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "16645:9:62", + "nodeType": "YulTypedName", + "src": "16645:9:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "16659:4:62", + "nodeType": "YulTypedName", + "src": "16659:4:62", + "type": "" + } + ], + "src": "16494:332:62" + }, + { + "body": { + "nativeSrc": "16978:139:62", + "nodeType": "YulBlock", + "src": "16978:139:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "16995:3:62", + "nodeType": "YulIdentifier", + "src": "16995:3:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "17008:2:62", + "nodeType": "YulLiteral", + "src": "17008:2:62", + "type": "", + "value": "96" + }, + { + "name": "value0", + "nativeSrc": "17012:6:62", + "nodeType": "YulIdentifier", + "src": "17012:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "17004:3:62", + "nodeType": "YulIdentifier", + "src": "17004:3:62" + }, + "nativeSrc": "17004:15:62", + "nodeType": "YulFunctionCall", + "src": "17004:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "17033:2:62", + "nodeType": "YulLiteral", + "src": "17033:2:62", + "type": "", + "value": "96" + }, + { + "kind": "number", + "nativeSrc": "17037:1:62", + "nodeType": "YulLiteral", + "src": "17037:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "17029:3:62", + "nodeType": "YulIdentifier", + "src": "17029:3:62" + }, + "nativeSrc": "17029:10:62", + "nodeType": "YulFunctionCall", + "src": "17029:10:62" + }, + { + "kind": "number", + "nativeSrc": "17041:1:62", + "nodeType": "YulLiteral", + "src": "17041:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "17025:3:62", + "nodeType": "YulIdentifier", + "src": "17025:3:62" + }, + "nativeSrc": "17025:18:62", + "nodeType": "YulFunctionCall", + "src": "17025:18:62" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "17021:3:62", + "nodeType": "YulIdentifier", + "src": "17021:3:62" + }, + "nativeSrc": "17021:23:62", + "nodeType": "YulFunctionCall", + "src": "17021:23:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "17000:3:62", + "nodeType": "YulIdentifier", + "src": "17000:3:62" + }, + "nativeSrc": "17000:45:62", + "nodeType": "YulFunctionCall", + "src": "17000:45:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16988:6:62", + "nodeType": "YulIdentifier", + "src": "16988:6:62" + }, + "nativeSrc": "16988:58:62", + "nodeType": "YulFunctionCall", + "src": "16988:58:62" + }, + "nativeSrc": "16988:58:62", + "nodeType": "YulExpressionStatement", + "src": "16988:58:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "17066:3:62", + "nodeType": "YulIdentifier", + "src": "17066:3:62" + }, + { + "kind": "number", + "nativeSrc": "17071:2:62", + "nodeType": "YulLiteral", + "src": "17071:2:62", + "type": "", + "value": "20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17062:3:62", + "nodeType": "YulIdentifier", + "src": "17062:3:62" + }, + "nativeSrc": "17062:12:62", + "nodeType": "YulFunctionCall", + "src": "17062:12:62" + }, + { + "name": "value1", + "nativeSrc": "17076:6:62", + "nodeType": "YulIdentifier", + "src": "17076:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17055:6:62", + "nodeType": "YulIdentifier", + "src": "17055:6:62" + }, + "nativeSrc": "17055:28:62", + "nodeType": "YulFunctionCall", + "src": "17055:28:62" + }, + "nativeSrc": "17055:28:62", + "nodeType": "YulExpressionStatement", + "src": "17055:28:62" + }, + { + "nativeSrc": "17092:19:62", + "nodeType": "YulAssignment", + "src": "17092:19:62", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "17103:3:62", + "nodeType": "YulIdentifier", + "src": "17103:3:62" + }, + { + "kind": "number", + "nativeSrc": "17108:2:62", + "nodeType": "YulLiteral", + "src": "17108:2:62", + "type": "", + "value": "52" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17099:3:62", + "nodeType": "YulIdentifier", + "src": "17099:3:62" + }, + "nativeSrc": "17099:12:62", + "nodeType": "YulFunctionCall", + "src": "17099:12:62" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "17092:3:62", + "nodeType": "YulIdentifier", + "src": "17092:3:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_address_t_bytes32__to_t_address_t_bytes32__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "16831:286:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "16946:3:62", + "nodeType": "YulTypedName", + "src": "16946:3:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "16951:6:62", + "nodeType": "YulTypedName", + "src": "16951:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "16959:6:62", + "nodeType": "YulTypedName", + "src": "16959:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "16970:3:62", + "nodeType": "YulTypedName", + "src": "16970:3:62", + "type": "" + } + ], + "src": "16831:286:62" + }, + { + "body": { + "nativeSrc": "17307:232:62", + "nodeType": "YulBlock", + "src": "17307:232:62", + "statements": [ + { + "nativeSrc": "17317:27:62", + "nodeType": "YulAssignment", + "src": "17317:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17329:9:62", + "nodeType": "YulIdentifier", + "src": "17329:9:62" + }, + { + "kind": "number", + "nativeSrc": "17340:3:62", + "nodeType": "YulLiteral", + "src": "17340:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17325:3:62", + "nodeType": "YulIdentifier", + "src": "17325:3:62" + }, + "nativeSrc": "17325:19:62", + "nodeType": "YulFunctionCall", + "src": "17325:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "17317:4:62", + "nodeType": "YulIdentifier", + "src": "17317:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17360:9:62", + "nodeType": "YulIdentifier", + "src": "17360:9:62" + }, + { + "name": "value0", + "nativeSrc": "17371:6:62", + "nodeType": "YulIdentifier", + "src": "17371:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17353:6:62", + "nodeType": "YulIdentifier", + "src": "17353:6:62" + }, + "nativeSrc": "17353:25:62", + "nodeType": "YulFunctionCall", + "src": "17353:25:62" + }, + "nativeSrc": "17353:25:62", + "nodeType": "YulExpressionStatement", + "src": "17353:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17398:9:62", + "nodeType": "YulIdentifier", + "src": "17398:9:62" + }, + { + "kind": "number", + "nativeSrc": "17409:2:62", + "nodeType": "YulLiteral", + "src": "17409:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17394:3:62", + "nodeType": "YulIdentifier", + "src": "17394:3:62" + }, + "nativeSrc": "17394:18:62", + "nodeType": "YulFunctionCall", + "src": "17394:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "17418:6:62", + "nodeType": "YulIdentifier", + "src": "17418:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "17434:3:62", + "nodeType": "YulLiteral", + "src": "17434:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "17439:1:62", + "nodeType": "YulLiteral", + "src": "17439:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "17430:3:62", + "nodeType": "YulIdentifier", + "src": "17430:3:62" + }, + "nativeSrc": "17430:11:62", + "nodeType": "YulFunctionCall", + "src": "17430:11:62" + }, + { + "kind": "number", + "nativeSrc": "17443:1:62", + "nodeType": "YulLiteral", + "src": "17443:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "17426:3:62", + "nodeType": "YulIdentifier", + "src": "17426:3:62" + }, + "nativeSrc": "17426:19:62", + "nodeType": "YulFunctionCall", + "src": "17426:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "17414:3:62", + "nodeType": "YulIdentifier", + "src": "17414:3:62" + }, + "nativeSrc": "17414:32:62", + "nodeType": "YulFunctionCall", + "src": "17414:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17387:6:62", + "nodeType": "YulIdentifier", + "src": "17387:6:62" + }, + "nativeSrc": "17387:60:62", + "nodeType": "YulFunctionCall", + "src": "17387:60:62" + }, + "nativeSrc": "17387:60:62", + "nodeType": "YulExpressionStatement", + "src": "17387:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17467:9:62", + "nodeType": "YulIdentifier", + "src": "17467:9:62" + }, + { + "kind": "number", + "nativeSrc": "17478:2:62", + "nodeType": "YulLiteral", + "src": "17478:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17463:3:62", + "nodeType": "YulIdentifier", + "src": "17463:3:62" + }, + "nativeSrc": "17463:18:62", + "nodeType": "YulFunctionCall", + "src": "17463:18:62" + }, + { + "name": "value2", + "nativeSrc": "17483:6:62", + "nodeType": "YulIdentifier", + "src": "17483:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17456:6:62", + "nodeType": "YulIdentifier", + "src": "17456:6:62" + }, + "nativeSrc": "17456:34:62", + "nodeType": "YulFunctionCall", + "src": "17456:34:62" + }, + "nativeSrc": "17456:34:62", + "nodeType": "YulExpressionStatement", + "src": "17456:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17510:9:62", + "nodeType": "YulIdentifier", + "src": "17510:9:62" + }, + { + "kind": "number", + "nativeSrc": "17521:2:62", + "nodeType": "YulLiteral", + "src": "17521:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17506:3:62", + "nodeType": "YulIdentifier", + "src": "17506:3:62" + }, + "nativeSrc": "17506:18:62", + "nodeType": "YulFunctionCall", + "src": "17506:18:62" + }, + { + "name": "value3", + "nativeSrc": "17526:6:62", + "nodeType": "YulIdentifier", + "src": "17526:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17499:6:62", + "nodeType": "YulIdentifier", + "src": "17499:6:62" + }, + "nativeSrc": "17499:34:62", + "nodeType": "YulFunctionCall", + "src": "17499:34:62" + }, + "nativeSrc": "17499:34:62", + "nodeType": "YulExpressionStatement", + "src": "17499:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_address_t_bytes32_t_uint256__to_t_uint256_t_address_t_bytes32_t_uint256__fromStack_reversed", + "nativeSrc": "17122:417:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "17252:9:62", + "nodeType": "YulTypedName", + "src": "17252:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "17263:6:62", + "nodeType": "YulTypedName", + "src": "17263:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "17271:6:62", + "nodeType": "YulTypedName", + "src": "17271:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "17279:6:62", + "nodeType": "YulTypedName", + "src": "17279:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "17287:6:62", + "nodeType": "YulTypedName", + "src": "17287:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "17298:4:62", + "nodeType": "YulTypedName", + "src": "17298:4:62", + "type": "" + } + ], + "src": "17122:417:62" + }, + { + "body": { + "nativeSrc": "17729:206:62", + "nodeType": "YulBlock", + "src": "17729:206:62", + "statements": [ + { + "nativeSrc": "17739:27:62", + "nodeType": "YulAssignment", + "src": "17739:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17751:9:62", + "nodeType": "YulIdentifier", + "src": "17751:9:62" + }, + { + "kind": "number", + "nativeSrc": "17762:3:62", + "nodeType": "YulLiteral", + "src": "17762:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17747:3:62", + "nodeType": "YulIdentifier", + "src": "17747:3:62" + }, + "nativeSrc": "17747:19:62", + "nodeType": "YulFunctionCall", + "src": "17747:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "17739:4:62", + "nodeType": "YulIdentifier", + "src": "17739:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17782:9:62", + "nodeType": "YulIdentifier", + "src": "17782:9:62" + }, + { + "name": "value0", + "nativeSrc": "17793:6:62", + "nodeType": "YulIdentifier", + "src": "17793:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17775:6:62", + "nodeType": "YulIdentifier", + "src": "17775:6:62" + }, + "nativeSrc": "17775:25:62", + "nodeType": "YulFunctionCall", + "src": "17775:25:62" + }, + "nativeSrc": "17775:25:62", + "nodeType": "YulExpressionStatement", + "src": "17775:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17820:9:62", + "nodeType": "YulIdentifier", + "src": "17820:9:62" + }, + { + "kind": "number", + "nativeSrc": "17831:2:62", + "nodeType": "YulLiteral", + "src": "17831:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17816:3:62", + "nodeType": "YulIdentifier", + "src": "17816:3:62" + }, + "nativeSrc": "17816:18:62", + "nodeType": "YulFunctionCall", + "src": "17816:18:62" + }, + { + "name": "value1", + "nativeSrc": "17836:6:62", + "nodeType": "YulIdentifier", + "src": "17836:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17809:6:62", + "nodeType": "YulIdentifier", + "src": "17809:6:62" + }, + "nativeSrc": "17809:34:62", + "nodeType": "YulFunctionCall", + "src": "17809:34:62" + }, + "nativeSrc": "17809:34:62", + "nodeType": "YulExpressionStatement", + "src": "17809:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17863:9:62", + "nodeType": "YulIdentifier", + "src": "17863:9:62" + }, + { + "kind": "number", + "nativeSrc": "17874:2:62", + "nodeType": "YulLiteral", + "src": "17874:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17859:3:62", + "nodeType": "YulIdentifier", + "src": "17859:3:62" + }, + "nativeSrc": "17859:18:62", + "nodeType": "YulFunctionCall", + "src": "17859:18:62" + }, + { + "name": "value2", + "nativeSrc": "17879:6:62", + "nodeType": "YulIdentifier", + "src": "17879:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17852:6:62", + "nodeType": "YulIdentifier", + "src": "17852:6:62" + }, + "nativeSrc": "17852:34:62", + "nodeType": "YulFunctionCall", + "src": "17852:34:62" + }, + "nativeSrc": "17852:34:62", + "nodeType": "YulExpressionStatement", + "src": "17852:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17906:9:62", + "nodeType": "YulIdentifier", + "src": "17906:9:62" + }, + { + "kind": "number", + "nativeSrc": "17917:2:62", + "nodeType": "YulLiteral", + "src": "17917:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17902:3:62", + "nodeType": "YulIdentifier", + "src": "17902:3:62" + }, + "nativeSrc": "17902:18:62", + "nodeType": "YulFunctionCall", + "src": "17902:18:62" + }, + { + "name": "value3", + "nativeSrc": "17922:6:62", + "nodeType": "YulIdentifier", + "src": "17922:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17895:6:62", + "nodeType": "YulIdentifier", + "src": "17895:6:62" + }, + "nativeSrc": "17895:34:62", + "nodeType": "YulFunctionCall", + "src": "17895:34:62" + }, + "nativeSrc": "17895:34:62", + "nodeType": "YulExpressionStatement", + "src": "17895:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed", + "nativeSrc": "17544:391:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "17674:9:62", + "nodeType": "YulTypedName", + "src": "17674:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "17685:6:62", + "nodeType": "YulTypedName", + "src": "17685:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "17693:6:62", + "nodeType": "YulTypedName", + "src": "17693:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "17701:6:62", + "nodeType": "YulTypedName", + "src": "17701:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "17709:6:62", + "nodeType": "YulTypedName", + "src": "17709:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "17720:4:62", + "nodeType": "YulTypedName", + "src": "17720:4:62", + "type": "" + } + ], + "src": "17544:391:62" + }, + { + "body": { + "nativeSrc": "18188:144:62", + "nodeType": "YulBlock", + "src": "18188:144:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "18205:3:62", + "nodeType": "YulIdentifier", + "src": "18205:3:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18214:3:62", + "nodeType": "YulLiteral", + "src": "18214:3:62", + "type": "", + "value": "240" + }, + { + "kind": "number", + "nativeSrc": "18219:4:62", + "nodeType": "YulLiteral", + "src": "18219:4:62", + "type": "", + "value": "6401" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "18210:3:62", + "nodeType": "YulIdentifier", + "src": "18210:3:62" + }, + "nativeSrc": "18210:14:62", + "nodeType": "YulFunctionCall", + "src": "18210:14:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18198:6:62", + "nodeType": "YulIdentifier", + "src": "18198:6:62" + }, + "nativeSrc": "18198:27:62", + "nodeType": "YulFunctionCall", + "src": "18198:27:62" + }, + "nativeSrc": "18198:27:62", + "nodeType": "YulExpressionStatement", + "src": "18198:27:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "18245:3:62", + "nodeType": "YulIdentifier", + "src": "18245:3:62" + }, + { + "kind": "number", + "nativeSrc": "18250:1:62", + "nodeType": "YulLiteral", + "src": "18250:1:62", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "18241:3:62", + "nodeType": "YulIdentifier", + "src": "18241:3:62" + }, + "nativeSrc": "18241:11:62", + "nodeType": "YulFunctionCall", + "src": "18241:11:62" + }, + { + "name": "value0", + "nativeSrc": "18254:6:62", + "nodeType": "YulIdentifier", + "src": "18254:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18234:6:62", + "nodeType": "YulIdentifier", + "src": "18234:6:62" + }, + "nativeSrc": "18234:27:62", + "nodeType": "YulFunctionCall", + "src": "18234:27:62" + }, + "nativeSrc": "18234:27:62", + "nodeType": "YulExpressionStatement", + "src": "18234:27:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "18281:3:62", + "nodeType": "YulIdentifier", + "src": "18281:3:62" + }, + { + "kind": "number", + "nativeSrc": "18286:2:62", + "nodeType": "YulLiteral", + "src": "18286:2:62", + "type": "", + "value": "34" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "18277:3:62", + "nodeType": "YulIdentifier", + "src": "18277:3:62" + }, + "nativeSrc": "18277:12:62", + "nodeType": "YulFunctionCall", + "src": "18277:12:62" + }, + { + "name": "value1", + "nativeSrc": "18291:6:62", + "nodeType": "YulIdentifier", + "src": "18291:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18270:6:62", + "nodeType": "YulIdentifier", + "src": "18270:6:62" + }, + "nativeSrc": "18270:28:62", + "nodeType": "YulFunctionCall", + "src": "18270:28:62" + }, + "nativeSrc": "18270:28:62", + "nodeType": "YulExpressionStatement", + "src": "18270:28:62" + }, + { + "nativeSrc": "18307:19:62", + "nodeType": "YulAssignment", + "src": "18307:19:62", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "18318:3:62", + "nodeType": "YulIdentifier", + "src": "18318:3:62" + }, + { + "kind": "number", + "nativeSrc": "18323:2:62", + "nodeType": "YulLiteral", + "src": "18323:2:62", + "type": "", + "value": "66" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "18314:3:62", + "nodeType": "YulIdentifier", + "src": "18314:3:62" + }, + "nativeSrc": "18314:12:62", + "nodeType": "YulFunctionCall", + "src": "18314:12:62" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "18307:3:62", + "nodeType": "YulIdentifier", + "src": "18307:3:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "17940:392:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "18156:3:62", + "nodeType": "YulTypedName", + "src": "18156:3:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "18161:6:62", + "nodeType": "YulTypedName", + "src": "18161:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "18169:6:62", + "nodeType": "YulTypedName", + "src": "18169:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "18180:3:62", + "nodeType": "YulTypedName", + "src": "18180:3:62", + "type": "" + } + ], + "src": "17940:392:62" + }, + { + "body": { + "nativeSrc": "18450:992:62", + "nodeType": "YulBlock", + "src": "18450:992:62", + "statements": [ + { + "nativeSrc": "18460:43:62", + "nodeType": "YulVariableDeclaration", + "src": "18460:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "18478:7:62", + "nodeType": "YulIdentifier", + "src": "18478:7:62" + }, + { + "name": "headStart", + "nativeSrc": "18487:9:62", + "nodeType": "YulIdentifier", + "src": "18487:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "18474:3:62", + "nodeType": "YulIdentifier", + "src": "18474:3:62" + }, + "nativeSrc": "18474:23:62", + "nodeType": "YulFunctionCall", + "src": "18474:23:62" + }, + { + "kind": "number", + "nativeSrc": "18499:3:62", + "nodeType": "YulLiteral", + "src": "18499:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "18470:3:62", + "nodeType": "YulIdentifier", + "src": "18470:3:62" + }, + "nativeSrc": "18470:33:62", + "nodeType": "YulFunctionCall", + "src": "18470:33:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "18464:2:62", + "nodeType": "YulTypedName", + "src": "18464:2:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "18518:16:62", + "nodeType": "YulBlock", + "src": "18518:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18527:1:62", + "nodeType": "YulLiteral", + "src": "18527:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "18530:1:62", + "nodeType": "YulLiteral", + "src": "18530:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "18520:6:62", + "nodeType": "YulIdentifier", + "src": "18520:6:62" + }, + "nativeSrc": "18520:12:62", + "nodeType": "YulFunctionCall", + "src": "18520:12:62" + }, + "nativeSrc": "18520:12:62", + "nodeType": "YulExpressionStatement", + "src": "18520:12:62" + } + ] + }, + "condition": { + "name": "_1", + "nativeSrc": "18515:2:62", + "nodeType": "YulIdentifier", + "src": "18515:2:62" + }, + "nativeSrc": "18512:22:62", + "nodeType": "YulIf", + "src": "18512:22:62" + }, + { + "nativeSrc": "18543:7:62", + "nodeType": "YulAssignment", + "src": "18543:7:62", + "value": { + "kind": "number", + "nativeSrc": "18549:1:62", + "nodeType": "YulLiteral", + "src": "18549:1:62", + "type": "", + "value": "0" + }, + "variableNames": [ + { + "name": "_1", + "nativeSrc": "18543:2:62", + "nodeType": "YulIdentifier", + "src": "18543:2:62" + } + ] + }, + { + "nativeSrc": "18559:16:62", + "nodeType": "YulVariableDeclaration", + "src": "18559:16:62", + "value": { + "name": "_1", + "nativeSrc": "18573:2:62", + "nodeType": "YulIdentifier", + "src": "18573:2:62" + }, + "variables": [ + { + "name": "memPtr", + "nativeSrc": "18563:6:62", + "nodeType": "YulTypedName", + "src": "18563:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "18584:19:62", + "nodeType": "YulAssignment", + "src": "18584:19:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18600:2:62", + "nodeType": "YulLiteral", + "src": "18600:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "18594:5:62", + "nodeType": "YulIdentifier", + "src": "18594:5:62" + }, + "nativeSrc": "18594:9:62", + "nodeType": "YulFunctionCall", + "src": "18594:9:62" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "18584:6:62", + "nodeType": "YulIdentifier", + "src": "18584:6:62" + } + ] + }, + { + "nativeSrc": "18612:34:62", + "nodeType": "YulVariableDeclaration", + "src": "18612:34:62", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "18634:6:62", + "nodeType": "YulIdentifier", + "src": "18634:6:62" + }, + { + "kind": "number", + "nativeSrc": "18642:3:62", + "nodeType": "YulLiteral", + "src": "18642:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "18630:3:62", + "nodeType": "YulIdentifier", + "src": "18630:3:62" + }, + "nativeSrc": "18630:16:62", + "nodeType": "YulFunctionCall", + "src": "18630:16:62" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "18616:10:62", + "nodeType": "YulTypedName", + "src": "18616:10:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "18729:113:62", + "nodeType": "YulBlock", + "src": "18729:113:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "18750:2:62", + "nodeType": "YulIdentifier", + "src": "18750:2:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18758:3:62", + "nodeType": "YulLiteral", + "src": "18758:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "18763:10:62", + "nodeType": "YulLiteral", + "src": "18763:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "18754:3:62", + "nodeType": "YulIdentifier", + "src": "18754:3:62" + }, + "nativeSrc": "18754:20:62", + "nodeType": "YulFunctionCall", + "src": "18754:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18743:6:62", + "nodeType": "YulIdentifier", + "src": "18743:6:62" + }, + "nativeSrc": "18743:32:62", + "nodeType": "YulFunctionCall", + "src": "18743:32:62" + }, + "nativeSrc": "18743:32:62", + "nodeType": "YulExpressionStatement", + "src": "18743:32:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18795:1:62", + "nodeType": "YulLiteral", + "src": "18795:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "18798:4:62", + "nodeType": "YulLiteral", + "src": "18798:4:62", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18788:6:62", + "nodeType": "YulIdentifier", + "src": "18788:6:62" + }, + "nativeSrc": "18788:15:62", + "nodeType": "YulFunctionCall", + "src": "18788:15:62" + }, + "nativeSrc": "18788:15:62", + "nodeType": "YulExpressionStatement", + "src": "18788:15:62" + }, + { + "expression": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "18823:2:62", + "nodeType": "YulIdentifier", + "src": "18823:2:62" + }, + { + "kind": "number", + "nativeSrc": "18827:4:62", + "nodeType": "YulLiteral", + "src": "18827:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "18816:6:62", + "nodeType": "YulIdentifier", + "src": "18816:6:62" + }, + "nativeSrc": "18816:16:62", + "nodeType": "YulFunctionCall", + "src": "18816:16:62" + }, + "nativeSrc": "18816:16:62", + "nodeType": "YulExpressionStatement", + "src": "18816:16:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "18664:10:62", + "nodeType": "YulIdentifier", + "src": "18664:10:62" + }, + { + "kind": "number", + "nativeSrc": "18676:18:62", + "nodeType": "YulLiteral", + "src": "18676:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "18661:2:62", + "nodeType": "YulIdentifier", + "src": "18661:2:62" + }, + "nativeSrc": "18661:34:62", + "nodeType": "YulFunctionCall", + "src": "18661:34:62" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "18700:10:62", + "nodeType": "YulIdentifier", + "src": "18700:10:62" + }, + { + "name": "memPtr", + "nativeSrc": "18712:6:62", + "nodeType": "YulIdentifier", + "src": "18712:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "18697:2:62", + "nodeType": "YulIdentifier", + "src": "18697:2:62" + }, + "nativeSrc": "18697:22:62", + "nodeType": "YulFunctionCall", + "src": "18697:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "18658:2:62", + "nodeType": "YulIdentifier", + "src": "18658:2:62" + }, + "nativeSrc": "18658:62:62", + "nodeType": "YulFunctionCall", + "src": "18658:62:62" + }, + "nativeSrc": "18655:187:62", + "nodeType": "YulIf", + "src": "18655:187:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18858:2:62", + "nodeType": "YulLiteral", + "src": "18858:2:62", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "18862:10:62", + "nodeType": "YulIdentifier", + "src": "18862:10:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18851:6:62", + "nodeType": "YulIdentifier", + "src": "18851:6:62" + }, + "nativeSrc": "18851:22:62", + "nodeType": "YulFunctionCall", + "src": "18851:22:62" + }, + "nativeSrc": "18851:22:62", + "nodeType": "YulExpressionStatement", + "src": "18851:22:62" + }, + { + "nativeSrc": "18882:15:62", + "nodeType": "YulVariableDeclaration", + "src": "18882:15:62", + "value": { + "name": "_1", + "nativeSrc": "18895:2:62", + "nodeType": "YulIdentifier", + "src": "18895:2:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "18886:5:62", + "nodeType": "YulTypedName", + "src": "18886:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "18906:25:62", + "nodeType": "YulAssignment", + "src": "18906:25:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "18921:9:62", + "nodeType": "YulIdentifier", + "src": "18921:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "18915:5:62", + "nodeType": "YulIdentifier", + "src": "18915:5:62" + }, + "nativeSrc": "18915:16:62", + "nodeType": "YulFunctionCall", + "src": "18915:16:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "18906:5:62", + "nodeType": "YulIdentifier", + "src": "18906:5:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "18947:6:62", + "nodeType": "YulIdentifier", + "src": "18947:6:62" + }, + { + "name": "value", + "nativeSrc": "18955:5:62", + "nodeType": "YulIdentifier", + "src": "18955:5:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18940:6:62", + "nodeType": "YulIdentifier", + "src": "18940:6:62" + }, + "nativeSrc": "18940:21:62", + "nodeType": "YulFunctionCall", + "src": "18940:21:62" + }, + "nativeSrc": "18940:21:62", + "nodeType": "YulExpressionStatement", + "src": "18940:21:62" + }, + { + "nativeSrc": "18970:17:62", + "nodeType": "YulVariableDeclaration", + "src": "18970:17:62", + "value": { + "name": "_1", + "nativeSrc": "18985:2:62", + "nodeType": "YulIdentifier", + "src": "18985:2:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "18974:7:62", + "nodeType": "YulTypedName", + "src": "18974:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "18996:36:62", + "nodeType": "YulAssignment", + "src": "18996:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "19017:9:62", + "nodeType": "YulIdentifier", + "src": "19017:9:62" + }, + { + "kind": "number", + "nativeSrc": "19028:2:62", + "nodeType": "YulLiteral", + "src": "19028:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19013:3:62", + "nodeType": "YulIdentifier", + "src": "19013:3:62" + }, + "nativeSrc": "19013:18:62", + "nodeType": "YulFunctionCall", + "src": "19013:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "19007:5:62", + "nodeType": "YulIdentifier", + "src": "19007:5:62" + }, + "nativeSrc": "19007:25:62", + "nodeType": "YulFunctionCall", + "src": "19007:25:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "18996:7:62", + "nodeType": "YulIdentifier", + "src": "18996:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "19052:6:62", + "nodeType": "YulIdentifier", + "src": "19052:6:62" + }, + { + "kind": "number", + "nativeSrc": "19060:2:62", + "nodeType": "YulLiteral", + "src": "19060:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19048:3:62", + "nodeType": "YulIdentifier", + "src": "19048:3:62" + }, + "nativeSrc": "19048:15:62", + "nodeType": "YulFunctionCall", + "src": "19048:15:62" + }, + { + "name": "value_1", + "nativeSrc": "19065:7:62", + "nodeType": "YulIdentifier", + "src": "19065:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "19041:6:62", + "nodeType": "YulIdentifier", + "src": "19041:6:62" + }, + "nativeSrc": "19041:32:62", + "nodeType": "YulFunctionCall", + "src": "19041:32:62" + }, + "nativeSrc": "19041:32:62", + "nodeType": "YulExpressionStatement", + "src": "19041:32:62" + }, + { + "nativeSrc": "19082:17:62", + "nodeType": "YulVariableDeclaration", + "src": "19082:17:62", + "value": { + "name": "_1", + "nativeSrc": "19097:2:62", + "nodeType": "YulIdentifier", + "src": "19097:2:62" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "19086:7:62", + "nodeType": "YulTypedName", + "src": "19086:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "19108:36:62", + "nodeType": "YulAssignment", + "src": "19108:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "19129:9:62", + "nodeType": "YulIdentifier", + "src": "19129:9:62" + }, + { + "kind": "number", + "nativeSrc": "19140:2:62", + "nodeType": "YulLiteral", + "src": "19140:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19125:3:62", + "nodeType": "YulIdentifier", + "src": "19125:3:62" + }, + "nativeSrc": "19125:18:62", + "nodeType": "YulFunctionCall", + "src": "19125:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "19119:5:62", + "nodeType": "YulIdentifier", + "src": "19119:5:62" + }, + "nativeSrc": "19119:25:62", + "nodeType": "YulFunctionCall", + "src": "19119:25:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "19108:7:62", + "nodeType": "YulIdentifier", + "src": "19108:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "19164:6:62", + "nodeType": "YulIdentifier", + "src": "19164:6:62" + }, + { + "kind": "number", + "nativeSrc": "19172:2:62", + "nodeType": "YulLiteral", + "src": "19172:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19160:3:62", + "nodeType": "YulIdentifier", + "src": "19160:3:62" + }, + "nativeSrc": "19160:15:62", + "nodeType": "YulFunctionCall", + "src": "19160:15:62" + }, + { + "name": "value_2", + "nativeSrc": "19177:7:62", + "nodeType": "YulIdentifier", + "src": "19177:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "19153:6:62", + "nodeType": "YulIdentifier", + "src": "19153:6:62" + }, + "nativeSrc": "19153:32:62", + "nodeType": "YulFunctionCall", + "src": "19153:32:62" + }, + "nativeSrc": "19153:32:62", + "nodeType": "YulExpressionStatement", + "src": "19153:32:62" + }, + { + "nativeSrc": "19194:17:62", + "nodeType": "YulVariableDeclaration", + "src": "19194:17:62", + "value": { + "name": "_1", + "nativeSrc": "19209:2:62", + "nodeType": "YulIdentifier", + "src": "19209:2:62" + }, + "variables": [ + { + "name": "value_3", + "nativeSrc": "19198:7:62", + "nodeType": "YulTypedName", + "src": "19198:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "19220:36:62", + "nodeType": "YulAssignment", + "src": "19220:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "19241:9:62", + "nodeType": "YulIdentifier", + "src": "19241:9:62" + }, + { + "kind": "number", + "nativeSrc": "19252:2:62", + "nodeType": "YulLiteral", + "src": "19252:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19237:3:62", + "nodeType": "YulIdentifier", + "src": "19237:3:62" + }, + "nativeSrc": "19237:18:62", + "nodeType": "YulFunctionCall", + "src": "19237:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "19231:5:62", + "nodeType": "YulIdentifier", + "src": "19231:5:62" + }, + "nativeSrc": "19231:25:62", + "nodeType": "YulFunctionCall", + "src": "19231:25:62" + }, + "variableNames": [ + { + "name": "value_3", + "nativeSrc": "19220:7:62", + "nodeType": "YulIdentifier", + "src": "19220:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "19276:6:62", + "nodeType": "YulIdentifier", + "src": "19276:6:62" + }, + { + "kind": "number", + "nativeSrc": "19284:2:62", + "nodeType": "YulLiteral", + "src": "19284:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19272:3:62", + "nodeType": "YulIdentifier", + "src": "19272:3:62" + }, + "nativeSrc": "19272:15:62", + "nodeType": "YulFunctionCall", + "src": "19272:15:62" + }, + { + "name": "value_3", + "nativeSrc": "19289:7:62", + "nodeType": "YulIdentifier", + "src": "19289:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "19265:6:62", + "nodeType": "YulIdentifier", + "src": "19265:6:62" + }, + "nativeSrc": "19265:32:62", + "nodeType": "YulFunctionCall", + "src": "19265:32:62" + }, + "nativeSrc": "19265:32:62", + "nodeType": "YulExpressionStatement", + "src": "19265:32:62" + }, + { + "nativeSrc": "19306:17:62", + "nodeType": "YulVariableDeclaration", + "src": "19306:17:62", + "value": { + "name": "_1", + "nativeSrc": "19321:2:62", + "nodeType": "YulIdentifier", + "src": "19321:2:62" + }, + "variables": [ + { + "name": "value_4", + "nativeSrc": "19310:7:62", + "nodeType": "YulTypedName", + "src": "19310:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "19332:37:62", + "nodeType": "YulAssignment", + "src": "19332:37:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "19353:9:62", + "nodeType": "YulIdentifier", + "src": "19353:9:62" + }, + { + "kind": "number", + "nativeSrc": "19364:3:62", + "nodeType": "YulLiteral", + "src": "19364:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19349:3:62", + "nodeType": "YulIdentifier", + "src": "19349:3:62" + }, + "nativeSrc": "19349:19:62", + "nodeType": "YulFunctionCall", + "src": "19349:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "19343:5:62", + "nodeType": "YulIdentifier", + "src": "19343:5:62" + }, + "nativeSrc": "19343:26:62", + "nodeType": "YulFunctionCall", + "src": "19343:26:62" + }, + "variableNames": [ + { + "name": "value_4", + "nativeSrc": "19332:7:62", + "nodeType": "YulIdentifier", + "src": "19332:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "19389:6:62", + "nodeType": "YulIdentifier", + "src": "19389:6:62" + }, + { + "kind": "number", + "nativeSrc": "19397:3:62", + "nodeType": "YulLiteral", + "src": "19397:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19385:3:62", + "nodeType": "YulIdentifier", + "src": "19385:3:62" + }, + "nativeSrc": "19385:16:62", + "nodeType": "YulFunctionCall", + "src": "19385:16:62" + }, + { + "name": "value_4", + "nativeSrc": "19403:7:62", + "nodeType": "YulIdentifier", + "src": "19403:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "19378:6:62", + "nodeType": "YulIdentifier", + "src": "19378:6:62" + }, + "nativeSrc": "19378:33:62", + "nodeType": "YulFunctionCall", + "src": "19378:33:62" + }, + "nativeSrc": "19378:33:62", + "nodeType": "YulExpressionStatement", + "src": "19378:33:62" + }, + { + "nativeSrc": "19420:16:62", + "nodeType": "YulAssignment", + "src": "19420:16:62", + "value": { + "name": "memPtr", + "nativeSrc": "19430:6:62", + "nodeType": "YulIdentifier", + "src": "19430:6:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "19420:6:62", + "nodeType": "YulIdentifier", + "src": "19420:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory", + "nativeSrc": "18337:1105:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "18416:9:62", + "nodeType": "YulTypedName", + "src": "18416:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "18427:7:62", + "nodeType": "YulTypedName", + "src": "18427:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "18439:6:62", + "nodeType": "YulTypedName", + "src": "18439:6:62", + "type": "" + } + ], + "src": "18337:1105:62" + }, + { + "body": { + "nativeSrc": "19527:169:62", + "nodeType": "YulBlock", + "src": "19527:169:62", + "statements": [ + { + "body": { + "nativeSrc": "19573:16:62", + "nodeType": "YulBlock", + "src": "19573:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "19582:1:62", + "nodeType": "YulLiteral", + "src": "19582:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "19585:1:62", + "nodeType": "YulLiteral", + "src": "19585:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "19575:6:62", + "nodeType": "YulIdentifier", + "src": "19575:6:62" + }, + "nativeSrc": "19575:12:62", + "nodeType": "YulFunctionCall", + "src": "19575:12:62" + }, + "nativeSrc": "19575:12:62", + "nodeType": "YulExpressionStatement", + "src": "19575:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "19548:7:62", + "nodeType": "YulIdentifier", + "src": "19548:7:62" + }, + { + "name": "headStart", + "nativeSrc": "19557:9:62", + "nodeType": "YulIdentifier", + "src": "19557:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "19544:3:62", + "nodeType": "YulIdentifier", + "src": "19544:3:62" + }, + "nativeSrc": "19544:23:62", + "nodeType": "YulFunctionCall", + "src": "19544:23:62" + }, + { + "kind": "number", + "nativeSrc": "19569:2:62", + "nodeType": "YulLiteral", + "src": "19569:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "19540:3:62", + "nodeType": "YulIdentifier", + "src": "19540:3:62" + }, + "nativeSrc": "19540:32:62", + "nodeType": "YulFunctionCall", + "src": "19540:32:62" + }, + "nativeSrc": "19537:52:62", + "nodeType": "YulIf", + "src": "19537:52:62" + }, + { + "nativeSrc": "19598:29:62", + "nodeType": "YulVariableDeclaration", + "src": "19598:29:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "19617:9:62", + "nodeType": "YulIdentifier", + "src": "19617:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "19611:5:62", + "nodeType": "YulIdentifier", + "src": "19611:5:62" + }, + "nativeSrc": "19611:16:62", + "nodeType": "YulFunctionCall", + "src": "19611:16:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "19602:5:62", + "nodeType": "YulTypedName", + "src": "19602:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "19660:5:62", + "nodeType": "YulIdentifier", + "src": "19660:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint32", + "nativeSrc": "19636:23:62", + "nodeType": "YulIdentifier", + "src": "19636:23:62" + }, + "nativeSrc": "19636:30:62", + "nodeType": "YulFunctionCall", + "src": "19636:30:62" + }, + "nativeSrc": "19636:30:62", + "nodeType": "YulExpressionStatement", + "src": "19636:30:62" + }, + { + "nativeSrc": "19675:15:62", + "nodeType": "YulAssignment", + "src": "19675:15:62", + "value": { + "name": "value", + "nativeSrc": "19685:5:62", + "nodeType": "YulIdentifier", + "src": "19685:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "19675:6:62", + "nodeType": "YulIdentifier", + "src": "19675:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint32_fromMemory", + "nativeSrc": "19447:249:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "19493:9:62", + "nodeType": "YulTypedName", + "src": "19493:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "19504:7:62", + "nodeType": "YulTypedName", + "src": "19504:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "19516:6:62", + "nodeType": "YulTypedName", + "src": "19516:6:62", + "type": "" + } + ], + "src": "19447:249:62" + }, + { + "body": { + "nativeSrc": "19753:116:62", + "nodeType": "YulBlock", + "src": "19753:116:62", + "statements": [ + { + "nativeSrc": "19763:20:62", + "nodeType": "YulAssignment", + "src": "19763:20:62", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "19778:1:62", + "nodeType": "YulIdentifier", + "src": "19778:1:62" + }, + { + "name": "y", + "nativeSrc": "19781:1:62", + "nodeType": "YulIdentifier", + "src": "19781:1:62" + } + ], + "functionName": { + "name": "mul", + "nativeSrc": "19774:3:62", + "nodeType": "YulIdentifier", + "src": "19774:3:62" + }, + "nativeSrc": "19774:9:62", + "nodeType": "YulFunctionCall", + "src": "19774:9:62" + }, + "variableNames": [ + { + "name": "product", + "nativeSrc": "19763:7:62", + "nodeType": "YulIdentifier", + "src": "19763:7:62" + } + ] + }, + { + "body": { + "nativeSrc": "19841:22:62", + "nodeType": "YulBlock", + "src": "19841:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nativeSrc": "19843:16:62", + "nodeType": "YulIdentifier", + "src": "19843:16:62" + }, + "nativeSrc": "19843:18:62", + "nodeType": "YulFunctionCall", + "src": "19843:18:62" + }, + "nativeSrc": "19843:18:62", + "nodeType": "YulExpressionStatement", + "src": "19843:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "x", + "nativeSrc": "19812:1:62", + "nodeType": "YulIdentifier", + "src": "19812:1:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "19805:6:62", + "nodeType": "YulIdentifier", + "src": "19805:6:62" + }, + "nativeSrc": "19805:9:62", + "nodeType": "YulFunctionCall", + "src": "19805:9:62" + }, + { + "arguments": [ + { + "name": "y", + "nativeSrc": "19819:1:62", + "nodeType": "YulIdentifier", + "src": "19819:1:62" + }, + { + "arguments": [ + { + "name": "product", + "nativeSrc": "19826:7:62", + "nodeType": "YulIdentifier", + "src": "19826:7:62" + }, + { + "name": "x", + "nativeSrc": "19835:1:62", + "nodeType": "YulIdentifier", + "src": "19835:1:62" + } + ], + "functionName": { + "name": "div", + "nativeSrc": "19822:3:62", + "nodeType": "YulIdentifier", + "src": "19822:3:62" + }, + "nativeSrc": "19822:15:62", + "nodeType": "YulFunctionCall", + "src": "19822:15:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "19816:2:62", + "nodeType": "YulIdentifier", + "src": "19816:2:62" + }, + "nativeSrc": "19816:22:62", + "nodeType": "YulFunctionCall", + "src": "19816:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "19802:2:62", + "nodeType": "YulIdentifier", + "src": "19802:2:62" + }, + "nativeSrc": "19802:37:62", + "nodeType": "YulFunctionCall", + "src": "19802:37:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "19795:6:62", + "nodeType": "YulIdentifier", + "src": "19795:6:62" + }, + "nativeSrc": "19795:45:62", + "nodeType": "YulFunctionCall", + "src": "19795:45:62" + }, + "nativeSrc": "19792:71:62", + "nodeType": "YulIf", + "src": "19792:71:62" + } + ] + }, + "name": "checked_mul_t_uint256", + "nativeSrc": "19701:168:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nativeSrc": "19732:1:62", + "nodeType": "YulTypedName", + "src": "19732:1:62", + "type": "" + }, + { + "name": "y", + "nativeSrc": "19735:1:62", + "nodeType": "YulTypedName", + "src": "19735:1:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "product", + "nativeSrc": "19741:7:62", + "nodeType": "YulTypedName", + "src": "19741:7:62", + "type": "" + } + ], + "src": "19701:168:62" + }, + { + "body": { + "nativeSrc": "19989:341:62", + "nodeType": "YulBlock", + "src": "19989:341:62", + "statements": [ + { + "body": { + "nativeSrc": "20035:16:62", + "nodeType": "YulBlock", + "src": "20035:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20044:1:62", + "nodeType": "YulLiteral", + "src": "20044:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "20047:1:62", + "nodeType": "YulLiteral", + "src": "20047:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "20037:6:62", + "nodeType": "YulIdentifier", + "src": "20037:6:62" + }, + "nativeSrc": "20037:12:62", + "nodeType": "YulFunctionCall", + "src": "20037:12:62" + }, + "nativeSrc": "20037:12:62", + "nodeType": "YulExpressionStatement", + "src": "20037:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "20010:7:62", + "nodeType": "YulIdentifier", + "src": "20010:7:62" + }, + { + "name": "headStart", + "nativeSrc": "20019:9:62", + "nodeType": "YulIdentifier", + "src": "20019:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "20006:3:62", + "nodeType": "YulIdentifier", + "src": "20006:3:62" + }, + "nativeSrc": "20006:23:62", + "nodeType": "YulFunctionCall", + "src": "20006:23:62" + }, + { + "kind": "number", + "nativeSrc": "20031:2:62", + "nodeType": "YulLiteral", + "src": "20031:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "20002:3:62", + "nodeType": "YulIdentifier", + "src": "20002:3:62" + }, + "nativeSrc": "20002:32:62", + "nodeType": "YulFunctionCall", + "src": "20002:32:62" + }, + "nativeSrc": "19999:52:62", + "nodeType": "YulIf", + "src": "19999:52:62" + }, + { + "nativeSrc": "20060:14:62", + "nodeType": "YulVariableDeclaration", + "src": "20060:14:62", + "value": { + "kind": "number", + "nativeSrc": "20073:1:62", + "nodeType": "YulLiteral", + "src": "20073:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "20064:5:62", + "nodeType": "YulTypedName", + "src": "20064:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "20083:25:62", + "nodeType": "YulAssignment", + "src": "20083:25:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "20098:9:62", + "nodeType": "YulIdentifier", + "src": "20098:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "20092:5:62", + "nodeType": "YulIdentifier", + "src": "20092:5:62" + }, + "nativeSrc": "20092:16:62", + "nodeType": "YulFunctionCall", + "src": "20092:16:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "20083:5:62", + "nodeType": "YulIdentifier", + "src": "20083:5:62" + } + ] + }, + { + "nativeSrc": "20117:15:62", + "nodeType": "YulAssignment", + "src": "20117:15:62", + "value": { + "name": "value", + "nativeSrc": "20127:5:62", + "nodeType": "YulIdentifier", + "src": "20127:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "20117:6:62", + "nodeType": "YulIdentifier", + "src": "20117:6:62" + } + ] + }, + { + "nativeSrc": "20141:16:62", + "nodeType": "YulVariableDeclaration", + "src": "20141:16:62", + "value": { + "kind": "number", + "nativeSrc": "20156:1:62", + "nodeType": "YulLiteral", + "src": "20156:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "20145:7:62", + "nodeType": "YulTypedName", + "src": "20145:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "20166:36:62", + "nodeType": "YulAssignment", + "src": "20166:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "20187:9:62", + "nodeType": "YulIdentifier", + "src": "20187:9:62" + }, + { + "kind": "number", + "nativeSrc": "20198:2:62", + "nodeType": "YulLiteral", + "src": "20198:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20183:3:62", + "nodeType": "YulIdentifier", + "src": "20183:3:62" + }, + "nativeSrc": "20183:18:62", + "nodeType": "YulFunctionCall", + "src": "20183:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "20177:5:62", + "nodeType": "YulIdentifier", + "src": "20177:5:62" + }, + "nativeSrc": "20177:25:62", + "nodeType": "YulFunctionCall", + "src": "20177:25:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "20166:7:62", + "nodeType": "YulIdentifier", + "src": "20166:7:62" + } + ] + }, + { + "nativeSrc": "20211:17:62", + "nodeType": "YulAssignment", + "src": "20211:17:62", + "value": { + "name": "value_1", + "nativeSrc": "20221:7:62", + "nodeType": "YulIdentifier", + "src": "20221:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "20211:6:62", + "nodeType": "YulIdentifier", + "src": "20211:6:62" + } + ] + }, + { + "nativeSrc": "20237:16:62", + "nodeType": "YulVariableDeclaration", + "src": "20237:16:62", + "value": { + "kind": "number", + "nativeSrc": "20252:1:62", + "nodeType": "YulLiteral", + "src": "20252:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "20241:7:62", + "nodeType": "YulTypedName", + "src": "20241:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "20262:36:62", + "nodeType": "YulAssignment", + "src": "20262:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "20283:9:62", + "nodeType": "YulIdentifier", + "src": "20283:9:62" + }, + { + "kind": "number", + "nativeSrc": "20294:2:62", + "nodeType": "YulLiteral", + "src": "20294:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20279:3:62", + "nodeType": "YulIdentifier", + "src": "20279:3:62" + }, + "nativeSrc": "20279:18:62", + "nodeType": "YulFunctionCall", + "src": "20279:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "20273:5:62", + "nodeType": "YulIdentifier", + "src": "20273:5:62" + }, + "nativeSrc": "20273:25:62", + "nodeType": "YulFunctionCall", + "src": "20273:25:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "20262:7:62", + "nodeType": "YulIdentifier", + "src": "20262:7:62" + } + ] + }, + { + "nativeSrc": "20307:17:62", + "nodeType": "YulAssignment", + "src": "20307:17:62", + "value": { + "name": "value_2", + "nativeSrc": "20317:7:62", + "nodeType": "YulIdentifier", + "src": "20317:7:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "20307:6:62", + "nodeType": "YulIdentifier", + "src": "20307:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32t_bytes32t_bytes32_fromMemory", + "nativeSrc": "19874:456:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "19939:9:62", + "nodeType": "YulTypedName", + "src": "19939:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "19950:7:62", + "nodeType": "YulTypedName", + "src": "19950:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "19962:6:62", + "nodeType": "YulTypedName", + "src": "19962:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "19970:6:62", + "nodeType": "YulTypedName", + "src": "19970:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "19978:6:62", + "nodeType": "YulTypedName", + "src": "19978:6:62", + "type": "" + } + ], + "src": "19874:456:62" + }, + { + "body": { + "nativeSrc": "20566:291:62", + "nodeType": "YulBlock", + "src": "20566:291:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "20583:3:62", + "nodeType": "YulIdentifier", + "src": "20583:3:62" + }, + { + "name": "value0", + "nativeSrc": "20588:6:62", + "nodeType": "YulIdentifier", + "src": "20588:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "20576:6:62", + "nodeType": "YulIdentifier", + "src": "20576:6:62" + }, + "nativeSrc": "20576:19:62", + "nodeType": "YulFunctionCall", + "src": "20576:19:62" + }, + "nativeSrc": "20576:19:62", + "nodeType": "YulExpressionStatement", + "src": "20576:19:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "20615:3:62", + "nodeType": "YulIdentifier", + "src": "20615:3:62" + }, + { + "kind": "number", + "nativeSrc": "20620:2:62", + "nodeType": "YulLiteral", + "src": "20620:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20611:3:62", + "nodeType": "YulIdentifier", + "src": "20611:3:62" + }, + "nativeSrc": "20611:12:62", + "nodeType": "YulFunctionCall", + "src": "20611:12:62" + }, + { + "name": "value1", + "nativeSrc": "20625:6:62", + "nodeType": "YulIdentifier", + "src": "20625:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "20604:6:62", + "nodeType": "YulIdentifier", + "src": "20604:6:62" + }, + "nativeSrc": "20604:28:62", + "nodeType": "YulFunctionCall", + "src": "20604:28:62" + }, + "nativeSrc": "20604:28:62", + "nodeType": "YulExpressionStatement", + "src": "20604:28:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "20652:3:62", + "nodeType": "YulIdentifier", + "src": "20652:3:62" + }, + { + "kind": "number", + "nativeSrc": "20657:2:62", + "nodeType": "YulLiteral", + "src": "20657:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20648:3:62", + "nodeType": "YulIdentifier", + "src": "20648:3:62" + }, + "nativeSrc": "20648:12:62", + "nodeType": "YulFunctionCall", + "src": "20648:12:62" + }, + { + "name": "value2", + "nativeSrc": "20662:6:62", + "nodeType": "YulIdentifier", + "src": "20662:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "20641:6:62", + "nodeType": "YulIdentifier", + "src": "20641:6:62" + }, + "nativeSrc": "20641:28:62", + "nodeType": "YulFunctionCall", + "src": "20641:28:62" + }, + "nativeSrc": "20641:28:62", + "nodeType": "YulExpressionStatement", + "src": "20641:28:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "20689:3:62", + "nodeType": "YulIdentifier", + "src": "20689:3:62" + }, + { + "kind": "number", + "nativeSrc": "20694:2:62", + "nodeType": "YulLiteral", + "src": "20694:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20685:3:62", + "nodeType": "YulIdentifier", + "src": "20685:3:62" + }, + "nativeSrc": "20685:12:62", + "nodeType": "YulFunctionCall", + "src": "20685:12:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20707:2:62", + "nodeType": "YulLiteral", + "src": "20707:2:62", + "type": "", + "value": "96" + }, + { + "name": "value3", + "nativeSrc": "20711:6:62", + "nodeType": "YulIdentifier", + "src": "20711:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "20703:3:62", + "nodeType": "YulIdentifier", + "src": "20703:3:62" + }, + "nativeSrc": "20703:15:62", + "nodeType": "YulFunctionCall", + "src": "20703:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20732:2:62", + "nodeType": "YulLiteral", + "src": "20732:2:62", + "type": "", + "value": "96" + }, + { + "kind": "number", + "nativeSrc": "20736:1:62", + "nodeType": "YulLiteral", + "src": "20736:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "20728:3:62", + "nodeType": "YulIdentifier", + "src": "20728:3:62" + }, + "nativeSrc": "20728:10:62", + "nodeType": "YulFunctionCall", + "src": "20728:10:62" + }, + { + "kind": "number", + "nativeSrc": "20740:1:62", + "nodeType": "YulLiteral", + "src": "20740:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "20724:3:62", + "nodeType": "YulIdentifier", + "src": "20724:3:62" + }, + "nativeSrc": "20724:18:62", + "nodeType": "YulFunctionCall", + "src": "20724:18:62" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "20720:3:62", + "nodeType": "YulIdentifier", + "src": "20720:3:62" + }, + "nativeSrc": "20720:23:62", + "nodeType": "YulFunctionCall", + "src": "20720:23:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "20699:3:62", + "nodeType": "YulIdentifier", + "src": "20699:3:62" + }, + "nativeSrc": "20699:45:62", + "nodeType": "YulFunctionCall", + "src": "20699:45:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "20678:6:62", + "nodeType": "YulIdentifier", + "src": "20678:6:62" + }, + "nativeSrc": "20678:67:62", + "nodeType": "YulFunctionCall", + "src": "20678:67:62" + }, + "nativeSrc": "20678:67:62", + "nodeType": "YulExpressionStatement", + "src": "20678:67:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "20765:3:62", + "nodeType": "YulIdentifier", + "src": "20765:3:62" + }, + { + "kind": "number", + "nativeSrc": "20770:3:62", + "nodeType": "YulLiteral", + "src": "20770:3:62", + "type": "", + "value": "116" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20761:3:62", + "nodeType": "YulIdentifier", + "src": "20761:3:62" + }, + "nativeSrc": "20761:13:62", + "nodeType": "YulFunctionCall", + "src": "20761:13:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20784:2:62", + "nodeType": "YulLiteral", + "src": "20784:2:62", + "type": "", + "value": "96" + }, + { + "name": "value4", + "nativeSrc": "20788:6:62", + "nodeType": "YulIdentifier", + "src": "20788:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "20780:3:62", + "nodeType": "YulIdentifier", + "src": "20780:3:62" + }, + "nativeSrc": "20780:15:62", + "nodeType": "YulFunctionCall", + "src": "20780:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20809:2:62", + "nodeType": "YulLiteral", + "src": "20809:2:62", + "type": "", + "value": "96" + }, + { + "kind": "number", + "nativeSrc": "20813:1:62", + "nodeType": "YulLiteral", + "src": "20813:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "20805:3:62", + "nodeType": "YulIdentifier", + "src": "20805:3:62" + }, + "nativeSrc": "20805:10:62", + "nodeType": "YulFunctionCall", + "src": "20805:10:62" + }, + { + "kind": "number", + "nativeSrc": "20817:1:62", + "nodeType": "YulLiteral", + "src": "20817:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "20801:3:62", + "nodeType": "YulIdentifier", + "src": "20801:3:62" + }, + "nativeSrc": "20801:18:62", + "nodeType": "YulFunctionCall", + "src": "20801:18:62" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "20797:3:62", + "nodeType": "YulIdentifier", + "src": "20797:3:62" + }, + "nativeSrc": "20797:23:62", + "nodeType": "YulFunctionCall", + "src": "20797:23:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "20776:3:62", + "nodeType": "YulIdentifier", + "src": "20776:3:62" + }, + "nativeSrc": "20776:45:62", + "nodeType": "YulFunctionCall", + "src": "20776:45:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "20754:6:62", + "nodeType": "YulIdentifier", + "src": "20754:6:62" + }, + "nativeSrc": "20754:68:62", + "nodeType": "YulFunctionCall", + "src": "20754:68:62" + }, + "nativeSrc": "20754:68:62", + "nodeType": "YulExpressionStatement", + "src": "20754:68:62" + }, + { + "nativeSrc": "20831:20:62", + "nodeType": "YulAssignment", + "src": "20831:20:62", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "20842:3:62", + "nodeType": "YulIdentifier", + "src": "20842:3:62" + }, + { + "kind": "number", + "nativeSrc": "20847:3:62", + "nodeType": "YulLiteral", + "src": "20847:3:62", + "type": "", + "value": "136" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20838:3:62", + "nodeType": "YulIdentifier", + "src": "20838:3:62" + }, + "nativeSrc": "20838:13:62", + "nodeType": "YulFunctionCall", + "src": "20838:13:62" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "20831:3:62", + "nodeType": "YulIdentifier", + "src": "20831:3:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "20335:522:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "20510:3:62", + "nodeType": "YulTypedName", + "src": "20510:3:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "20515:6:62", + "nodeType": "YulTypedName", + "src": "20515:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "20523:6:62", + "nodeType": "YulTypedName", + "src": "20523:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "20531:6:62", + "nodeType": "YulTypedName", + "src": "20531:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "20539:6:62", + "nodeType": "YulTypedName", + "src": "20539:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "20547:6:62", + "nodeType": "YulTypedName", + "src": "20547:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "20558:3:62", + "nodeType": "YulTypedName", + "src": "20558:3:62", + "type": "" + } + ], + "src": "20335:522:62" + }, + { + "body": { + "nativeSrc": "21065:229:62", + "nodeType": "YulBlock", + "src": "21065:229:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "21082:9:62", + "nodeType": "YulIdentifier", + "src": "21082:9:62" + }, + { + "name": "value0", + "nativeSrc": "21093:6:62", + "nodeType": "YulIdentifier", + "src": "21093:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21075:6:62", + "nodeType": "YulIdentifier", + "src": "21075:6:62" + }, + "nativeSrc": "21075:25:62", + "nodeType": "YulFunctionCall", + "src": "21075:25:62" + }, + "nativeSrc": "21075:25:62", + "nodeType": "YulExpressionStatement", + "src": "21075:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "21120:9:62", + "nodeType": "YulIdentifier", + "src": "21120:9:62" + }, + { + "kind": "number", + "nativeSrc": "21131:2:62", + "nodeType": "YulLiteral", + "src": "21131:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21116:3:62", + "nodeType": "YulIdentifier", + "src": "21116:3:62" + }, + "nativeSrc": "21116:18:62", + "nodeType": "YulFunctionCall", + "src": "21116:18:62" + }, + { + "name": "value1", + "nativeSrc": "21136:6:62", + "nodeType": "YulIdentifier", + "src": "21136:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21109:6:62", + "nodeType": "YulIdentifier", + "src": "21109:6:62" + }, + "nativeSrc": "21109:34:62", + "nodeType": "YulFunctionCall", + "src": "21109:34:62" + }, + "nativeSrc": "21109:34:62", + "nodeType": "YulExpressionStatement", + "src": "21109:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "21163:9:62", + "nodeType": "YulIdentifier", + "src": "21163:9:62" + }, + { + "kind": "number", + "nativeSrc": "21174:2:62", + "nodeType": "YulLiteral", + "src": "21174:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21159:3:62", + "nodeType": "YulIdentifier", + "src": "21159:3:62" + }, + "nativeSrc": "21159:18:62", + "nodeType": "YulFunctionCall", + "src": "21159:18:62" + }, + { + "kind": "number", + "nativeSrc": "21179:3:62", + "nodeType": "YulLiteral", + "src": "21179:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21152:6:62", + "nodeType": "YulIdentifier", + "src": "21152:6:62" + }, + "nativeSrc": "21152:31:62", + "nodeType": "YulFunctionCall", + "src": "21152:31:62" + }, + "nativeSrc": "21152:31:62", + "nodeType": "YulExpressionStatement", + "src": "21152:31:62" + }, + { + "nativeSrc": "21192:53:62", + "nodeType": "YulAssignment", + "src": "21192:53:62", + "value": { + "arguments": [ + { + "name": "value2", + "nativeSrc": "21217:6:62", + "nodeType": "YulIdentifier", + "src": "21217:6:62" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "21229:9:62", + "nodeType": "YulIdentifier", + "src": "21229:9:62" + }, + { + "kind": "number", + "nativeSrc": "21240:3:62", + "nodeType": "YulLiteral", + "src": "21240:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21225:3:62", + "nodeType": "YulIdentifier", + "src": "21225:3:62" + }, + "nativeSrc": "21225:19:62", + "nodeType": "YulFunctionCall", + "src": "21225:19:62" + } + ], + "functionName": { + "name": "abi_encode_bytes", + "nativeSrc": "21200:16:62", + "nodeType": "YulIdentifier", + "src": "21200:16:62" + }, + "nativeSrc": "21200:45:62", + "nodeType": "YulFunctionCall", + "src": "21200:45:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "21192:4:62", + "nodeType": "YulIdentifier", + "src": "21192:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "21265:9:62", + "nodeType": "YulIdentifier", + "src": "21265:9:62" + }, + { + "kind": "number", + "nativeSrc": "21276:2:62", + "nodeType": "YulLiteral", + "src": "21276:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21261:3:62", + "nodeType": "YulIdentifier", + "src": "21261:3:62" + }, + "nativeSrc": "21261:18:62", + "nodeType": "YulFunctionCall", + "src": "21261:18:62" + }, + { + "name": "value3", + "nativeSrc": "21281:6:62", + "nodeType": "YulIdentifier", + "src": "21281:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21254:6:62", + "nodeType": "YulIdentifier", + "src": "21254:6:62" + }, + "nativeSrc": "21254:34:62", + "nodeType": "YulFunctionCall", + "src": "21254:34:62" + }, + "nativeSrc": "21254:34:62", + "nodeType": "YulExpressionStatement", + "src": "21254:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__to_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__fromStack_reversed", + "nativeSrc": "20862:432:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "21010:9:62", + "nodeType": "YulTypedName", + "src": "21010:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "21021:6:62", + "nodeType": "YulTypedName", + "src": "21021:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "21029:6:62", + "nodeType": "YulTypedName", + "src": "21029:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "21037:6:62", + "nodeType": "YulTypedName", + "src": "21037:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "21045:6:62", + "nodeType": "YulTypedName", + "src": "21045:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "21056:4:62", + "nodeType": "YulTypedName", + "src": "21056:4:62", + "type": "" + } + ], + "src": "20862:432:62" + }, + { + "body": { + "nativeSrc": "21470:167:62", + "nodeType": "YulBlock", + "src": "21470:167:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "21487:3:62", + "nodeType": "YulIdentifier", + "src": "21487:3:62" + }, + { + "name": "value0", + "nativeSrc": "21492:6:62", + "nodeType": "YulIdentifier", + "src": "21492:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21480:6:62", + "nodeType": "YulIdentifier", + "src": "21480:6:62" + }, + "nativeSrc": "21480:19:62", + "nodeType": "YulFunctionCall", + "src": "21480:19:62" + }, + "nativeSrc": "21480:19:62", + "nodeType": "YulExpressionStatement", + "src": "21480:19:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "21519:3:62", + "nodeType": "YulIdentifier", + "src": "21519:3:62" + }, + { + "kind": "number", + "nativeSrc": "21524:2:62", + "nodeType": "YulLiteral", + "src": "21524:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21515:3:62", + "nodeType": "YulIdentifier", + "src": "21515:3:62" + }, + "nativeSrc": "21515:12:62", + "nodeType": "YulFunctionCall", + "src": "21515:12:62" + }, + { + "name": "value1", + "nativeSrc": "21529:6:62", + "nodeType": "YulIdentifier", + "src": "21529:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21508:6:62", + "nodeType": "YulIdentifier", + "src": "21508:6:62" + }, + "nativeSrc": "21508:28:62", + "nodeType": "YulFunctionCall", + "src": "21508:28:62" + }, + "nativeSrc": "21508:28:62", + "nodeType": "YulExpressionStatement", + "src": "21508:28:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "21556:3:62", + "nodeType": "YulIdentifier", + "src": "21556:3:62" + }, + { + "kind": "number", + "nativeSrc": "21561:2:62", + "nodeType": "YulLiteral", + "src": "21561:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21552:3:62", + "nodeType": "YulIdentifier", + "src": "21552:3:62" + }, + "nativeSrc": "21552:12:62", + "nodeType": "YulFunctionCall", + "src": "21552:12:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21574:3:62", + "nodeType": "YulLiteral", + "src": "21574:3:62", + "type": "", + "value": "248" + }, + { + "name": "value2", + "nativeSrc": "21579:6:62", + "nodeType": "YulIdentifier", + "src": "21579:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "21570:3:62", + "nodeType": "YulIdentifier", + "src": "21570:3:62" + }, + "nativeSrc": "21570:16:62", + "nodeType": "YulFunctionCall", + "src": "21570:16:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21592:3:62", + "nodeType": "YulLiteral", + "src": "21592:3:62", + "type": "", + "value": "248" + }, + { + "kind": "number", + "nativeSrc": "21597:3:62", + "nodeType": "YulLiteral", + "src": "21597:3:62", + "type": "", + "value": "255" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "21588:3:62", + "nodeType": "YulIdentifier", + "src": "21588:3:62" + }, + "nativeSrc": "21588:13:62", + "nodeType": "YulFunctionCall", + "src": "21588:13:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "21566:3:62", + "nodeType": "YulIdentifier", + "src": "21566:3:62" + }, + "nativeSrc": "21566:36:62", + "nodeType": "YulFunctionCall", + "src": "21566:36:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21545:6:62", + "nodeType": "YulIdentifier", + "src": "21545:6:62" + }, + "nativeSrc": "21545:58:62", + "nodeType": "YulFunctionCall", + "src": "21545:58:62" + }, + "nativeSrc": "21545:58:62", + "nodeType": "YulExpressionStatement", + "src": "21545:58:62" + }, + { + "nativeSrc": "21612:19:62", + "nodeType": "YulAssignment", + "src": "21612:19:62", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "21623:3:62", + "nodeType": "YulIdentifier", + "src": "21623:3:62" + }, + { + "kind": "number", + "nativeSrc": "21628:2:62", + "nodeType": "YulLiteral", + "src": "21628:2:62", + "type": "", + "value": "65" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21619:3:62", + "nodeType": "YulIdentifier", + "src": "21619:3:62" + }, + "nativeSrc": "21619:12:62", + "nodeType": "YulFunctionCall", + "src": "21619:12:62" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "21612:3:62", + "nodeType": "YulIdentifier", + "src": "21612:3:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes32_t_bytes32_t_uint8__to_t_bytes32_t_bytes32_t_uint8__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "21299:338:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "21430:3:62", + "nodeType": "YulTypedName", + "src": "21430:3:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "21435:6:62", + "nodeType": "YulTypedName", + "src": "21435:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "21443:6:62", + "nodeType": "YulTypedName", + "src": "21443:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "21451:6:62", + "nodeType": "YulTypedName", + "src": "21451:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "21462:3:62", + "nodeType": "YulTypedName", + "src": "21462:3:62", + "type": "" + } + ], + "src": "21299:338:62" + }, + { + "body": { + "nativeSrc": "21688:171:62", + "nodeType": "YulBlock", + "src": "21688:171:62", + "statements": [ + { + "body": { + "nativeSrc": "21719:111:62", + "nodeType": "YulBlock", + "src": "21719:111:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21740:1:62", + "nodeType": "YulLiteral", + "src": "21740:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21747:3:62", + "nodeType": "YulLiteral", + "src": "21747:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "21752:10:62", + "nodeType": "YulLiteral", + "src": "21752:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "21743:3:62", + "nodeType": "YulIdentifier", + "src": "21743:3:62" + }, + "nativeSrc": "21743:20:62", + "nodeType": "YulFunctionCall", + "src": "21743:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21733:6:62", + "nodeType": "YulIdentifier", + "src": "21733:6:62" + }, + "nativeSrc": "21733:31:62", + "nodeType": "YulFunctionCall", + "src": "21733:31:62" + }, + "nativeSrc": "21733:31:62", + "nodeType": "YulExpressionStatement", + "src": "21733:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21784:1:62", + "nodeType": "YulLiteral", + "src": "21784:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "21787:4:62", + "nodeType": "YulLiteral", + "src": "21787:4:62", + "type": "", + "value": "0x12" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21777:6:62", + "nodeType": "YulIdentifier", + "src": "21777:6:62" + }, + "nativeSrc": "21777:15:62", + "nodeType": "YulFunctionCall", + "src": "21777:15:62" + }, + "nativeSrc": "21777:15:62", + "nodeType": "YulExpressionStatement", + "src": "21777:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21812:1:62", + "nodeType": "YulLiteral", + "src": "21812:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "21815:4:62", + "nodeType": "YulLiteral", + "src": "21815:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "21805:6:62", + "nodeType": "YulIdentifier", + "src": "21805:6:62" + }, + "nativeSrc": "21805:15:62", + "nodeType": "YulFunctionCall", + "src": "21805:15:62" + }, + "nativeSrc": "21805:15:62", + "nodeType": "YulExpressionStatement", + "src": "21805:15:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "y", + "nativeSrc": "21708:1:62", + "nodeType": "YulIdentifier", + "src": "21708:1:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "21701:6:62", + "nodeType": "YulIdentifier", + "src": "21701:6:62" + }, + "nativeSrc": "21701:9:62", + "nodeType": "YulFunctionCall", + "src": "21701:9:62" + }, + "nativeSrc": "21698:132:62", + "nodeType": "YulIf", + "src": "21698:132:62" + }, + { + "nativeSrc": "21839:14:62", + "nodeType": "YulAssignment", + "src": "21839:14:62", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "21848:1:62", + "nodeType": "YulIdentifier", + "src": "21848:1:62" + }, + { + "name": "y", + "nativeSrc": "21851:1:62", + "nodeType": "YulIdentifier", + "src": "21851:1:62" + } + ], + "functionName": { + "name": "div", + "nativeSrc": "21844:3:62", + "nodeType": "YulIdentifier", + "src": "21844:3:62" + }, + "nativeSrc": "21844:9:62", + "nodeType": "YulFunctionCall", + "src": "21844:9:62" + }, + "variableNames": [ + { + "name": "r", + "nativeSrc": "21839:1:62", + "nodeType": "YulIdentifier", + "src": "21839:1:62" + } + ] + } + ] + }, + "name": "checked_div_t_uint256", + "nativeSrc": "21642:217:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nativeSrc": "21673:1:62", + "nodeType": "YulTypedName", + "src": "21673:1:62", + "type": "" + }, + { + "name": "y", + "nativeSrc": "21676:1:62", + "nodeType": "YulTypedName", + "src": "21676:1:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "r", + "nativeSrc": "21682:1:62", + "nodeType": "YulTypedName", + "src": "21682:1:62", + "type": "" + } + ], + "src": "21642:217:62" + }, + { + "body": { + "nativeSrc": "22021:214:62", + "nodeType": "YulBlock", + "src": "22021:214:62", + "statements": [ + { + "nativeSrc": "22031:26:62", + "nodeType": "YulAssignment", + "src": "22031:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22043:9:62", + "nodeType": "YulIdentifier", + "src": "22043:9:62" + }, + { + "kind": "number", + "nativeSrc": "22054:2:62", + "nodeType": "YulLiteral", + "src": "22054:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22039:3:62", + "nodeType": "YulIdentifier", + "src": "22039:3:62" + }, + "nativeSrc": "22039:18:62", + "nodeType": "YulFunctionCall", + "src": "22039:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "22031:4:62", + "nodeType": "YulIdentifier", + "src": "22031:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22073:9:62", + "nodeType": "YulIdentifier", + "src": "22073:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "22088:6:62", + "nodeType": "YulIdentifier", + "src": "22088:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22104:3:62", + "nodeType": "YulLiteral", + "src": "22104:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "22109:1:62", + "nodeType": "YulLiteral", + "src": "22109:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "22100:3:62", + "nodeType": "YulIdentifier", + "src": "22100:3:62" + }, + "nativeSrc": "22100:11:62", + "nodeType": "YulFunctionCall", + "src": "22100:11:62" + }, + { + "kind": "number", + "nativeSrc": "22113:1:62", + "nodeType": "YulLiteral", + "src": "22113:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "22096:3:62", + "nodeType": "YulIdentifier", + "src": "22096:3:62" + }, + "nativeSrc": "22096:19:62", + "nodeType": "YulFunctionCall", + "src": "22096:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "22084:3:62", + "nodeType": "YulIdentifier", + "src": "22084:3:62" + }, + "nativeSrc": "22084:32:62", + "nodeType": "YulFunctionCall", + "src": "22084:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22066:6:62", + "nodeType": "YulIdentifier", + "src": "22066:6:62" + }, + "nativeSrc": "22066:51:62", + "nodeType": "YulFunctionCall", + "src": "22066:51:62" + }, + "nativeSrc": "22066:51:62", + "nodeType": "YulExpressionStatement", + "src": "22066:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22137:9:62", + "nodeType": "YulIdentifier", + "src": "22137:9:62" + }, + { + "kind": "number", + "nativeSrc": "22148:2:62", + "nodeType": "YulLiteral", + "src": "22148:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22133:3:62", + "nodeType": "YulIdentifier", + "src": "22133:3:62" + }, + "nativeSrc": "22133:18:62", + "nodeType": "YulFunctionCall", + "src": "22133:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "22157:6:62", + "nodeType": "YulIdentifier", + "src": "22157:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22173:3:62", + "nodeType": "YulLiteral", + "src": "22173:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "22178:1:62", + "nodeType": "YulLiteral", + "src": "22178:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "22169:3:62", + "nodeType": "YulIdentifier", + "src": "22169:3:62" + }, + "nativeSrc": "22169:11:62", + "nodeType": "YulFunctionCall", + "src": "22169:11:62" + }, + { + "kind": "number", + "nativeSrc": "22182:1:62", + "nodeType": "YulLiteral", + "src": "22182:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "22165:3:62", + "nodeType": "YulIdentifier", + "src": "22165:3:62" + }, + "nativeSrc": "22165:19:62", + "nodeType": "YulFunctionCall", + "src": "22165:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "22153:3:62", + "nodeType": "YulIdentifier", + "src": "22153:3:62" + }, + "nativeSrc": "22153:32:62", + "nodeType": "YulFunctionCall", + "src": "22153:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22126:6:62", + "nodeType": "YulIdentifier", + "src": "22126:6:62" + }, + "nativeSrc": "22126:60:62", + "nodeType": "YulFunctionCall", + "src": "22126:60:62" + }, + "nativeSrc": "22126:60:62", + "nodeType": "YulExpressionStatement", + "src": "22126:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22206:9:62", + "nodeType": "YulIdentifier", + "src": "22206:9:62" + }, + { + "kind": "number", + "nativeSrc": "22217:2:62", + "nodeType": "YulLiteral", + "src": "22217:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22202:3:62", + "nodeType": "YulIdentifier", + "src": "22202:3:62" + }, + "nativeSrc": "22202:18:62", + "nodeType": "YulFunctionCall", + "src": "22202:18:62" + }, + { + "name": "value2", + "nativeSrc": "22222:6:62", + "nodeType": "YulIdentifier", + "src": "22222:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22195:6:62", + "nodeType": "YulIdentifier", + "src": "22195:6:62" + }, + "nativeSrc": "22195:34:62", + "nodeType": "YulFunctionCall", + "src": "22195:34:62" + }, + "nativeSrc": "22195:34:62", + "nodeType": "YulExpressionStatement", + "src": "22195:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", + "nativeSrc": "21864:371:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "21974:9:62", + "nodeType": "YulTypedName", + "src": "21974:9:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "21985:6:62", + "nodeType": "YulTypedName", + "src": "21985:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "21993:6:62", + "nodeType": "YulTypedName", + "src": "21993:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "22001:6:62", + "nodeType": "YulTypedName", + "src": "22001:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "22012:4:62", + "nodeType": "YulTypedName", + "src": "22012:4:62", + "type": "" + } + ], + "src": "21864:371:62" + }, + { + "body": { + "nativeSrc": "22481:320:62", + "nodeType": "YulBlock", + "src": "22481:320:62", + "statements": [ + { + "nativeSrc": "22491:27:62", + "nodeType": "YulAssignment", + "src": "22491:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22503:9:62", + "nodeType": "YulIdentifier", + "src": "22503:9:62" + }, + { + "kind": "number", + "nativeSrc": "22514:3:62", + "nodeType": "YulLiteral", + "src": "22514:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22499:3:62", + "nodeType": "YulIdentifier", + "src": "22499:3:62" + }, + "nativeSrc": "22499:19:62", + "nodeType": "YulFunctionCall", + "src": "22499:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "22491:4:62", + "nodeType": "YulIdentifier", + "src": "22491:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22534:9:62", + "nodeType": "YulIdentifier", + "src": "22534:9:62" + }, + { + "name": "value0", + "nativeSrc": "22545:6:62", + "nodeType": "YulIdentifier", + "src": "22545:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22527:6:62", + "nodeType": "YulIdentifier", + "src": "22527:6:62" + }, + "nativeSrc": "22527:25:62", + "nodeType": "YulFunctionCall", + "src": "22527:25:62" + }, + "nativeSrc": "22527:25:62", + "nodeType": "YulExpressionStatement", + "src": "22527:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22572:9:62", + "nodeType": "YulIdentifier", + "src": "22572:9:62" + }, + { + "kind": "number", + "nativeSrc": "22583:2:62", + "nodeType": "YulLiteral", + "src": "22583:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22568:3:62", + "nodeType": "YulIdentifier", + "src": "22568:3:62" + }, + "nativeSrc": "22568:18:62", + "nodeType": "YulFunctionCall", + "src": "22568:18:62" + }, + { + "name": "value1", + "nativeSrc": "22588:6:62", + "nodeType": "YulIdentifier", + "src": "22588:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22561:6:62", + "nodeType": "YulIdentifier", + "src": "22561:6:62" + }, + "nativeSrc": "22561:34:62", + "nodeType": "YulFunctionCall", + "src": "22561:34:62" + }, + "nativeSrc": "22561:34:62", + "nodeType": "YulExpressionStatement", + "src": "22561:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22615:9:62", + "nodeType": "YulIdentifier", + "src": "22615:9:62" + }, + { + "kind": "number", + "nativeSrc": "22626:2:62", + "nodeType": "YulLiteral", + "src": "22626:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22611:3:62", + "nodeType": "YulIdentifier", + "src": "22611:3:62" + }, + "nativeSrc": "22611:18:62", + "nodeType": "YulFunctionCall", + "src": "22611:18:62" + }, + { + "name": "value2", + "nativeSrc": "22631:6:62", + "nodeType": "YulIdentifier", + "src": "22631:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22604:6:62", + "nodeType": "YulIdentifier", + "src": "22604:6:62" + }, + "nativeSrc": "22604:34:62", + "nodeType": "YulFunctionCall", + "src": "22604:34:62" + }, + "nativeSrc": "22604:34:62", + "nodeType": "YulExpressionStatement", + "src": "22604:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22658:9:62", + "nodeType": "YulIdentifier", + "src": "22658:9:62" + }, + { + "kind": "number", + "nativeSrc": "22669:2:62", + "nodeType": "YulLiteral", + "src": "22669:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22654:3:62", + "nodeType": "YulIdentifier", + "src": "22654:3:62" + }, + "nativeSrc": "22654:18:62", + "nodeType": "YulFunctionCall", + "src": "22654:18:62" + }, + { + "name": "value3", + "nativeSrc": "22674:6:62", + "nodeType": "YulIdentifier", + "src": "22674:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22647:6:62", + "nodeType": "YulIdentifier", + "src": "22647:6:62" + }, + "nativeSrc": "22647:34:62", + "nodeType": "YulFunctionCall", + "src": "22647:34:62" + }, + "nativeSrc": "22647:34:62", + "nodeType": "YulExpressionStatement", + "src": "22647:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22701:9:62", + "nodeType": "YulIdentifier", + "src": "22701:9:62" + }, + { + "kind": "number", + "nativeSrc": "22712:3:62", + "nodeType": "YulLiteral", + "src": "22712:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22697:3:62", + "nodeType": "YulIdentifier", + "src": "22697:3:62" + }, + "nativeSrc": "22697:19:62", + "nodeType": "YulFunctionCall", + "src": "22697:19:62" + }, + { + "arguments": [ + { + "name": "value4", + "nativeSrc": "22722:6:62", + "nodeType": "YulIdentifier", + "src": "22722:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22738:3:62", + "nodeType": "YulLiteral", + "src": "22738:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "22743:1:62", + "nodeType": "YulLiteral", + "src": "22743:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "22734:3:62", + "nodeType": "YulIdentifier", + "src": "22734:3:62" + }, + "nativeSrc": "22734:11:62", + "nodeType": "YulFunctionCall", + "src": "22734:11:62" + }, + { + "kind": "number", + "nativeSrc": "22747:1:62", + "nodeType": "YulLiteral", + "src": "22747:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "22730:3:62", + "nodeType": "YulIdentifier", + "src": "22730:3:62" + }, + "nativeSrc": "22730:19:62", + "nodeType": "YulFunctionCall", + "src": "22730:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "22718:3:62", + "nodeType": "YulIdentifier", + "src": "22718:3:62" + }, + "nativeSrc": "22718:32:62", + "nodeType": "YulFunctionCall", + "src": "22718:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22690:6:62", + "nodeType": "YulIdentifier", + "src": "22690:6:62" + }, + "nativeSrc": "22690:61:62", + "nodeType": "YulFunctionCall", + "src": "22690:61:62" + }, + "nativeSrc": "22690:61:62", + "nodeType": "YulExpressionStatement", + "src": "22690:61:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "22771:9:62", + "nodeType": "YulIdentifier", + "src": "22771:9:62" + }, + { + "kind": "number", + "nativeSrc": "22782:3:62", + "nodeType": "YulLiteral", + "src": "22782:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22767:3:62", + "nodeType": "YulIdentifier", + "src": "22767:3:62" + }, + "nativeSrc": "22767:19:62", + "nodeType": "YulFunctionCall", + "src": "22767:19:62" + }, + { + "name": "value5", + "nativeSrc": "22788:6:62", + "nodeType": "YulIdentifier", + "src": "22788:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22760:6:62", + "nodeType": "YulIdentifier", + "src": "22760:6:62" + }, + "nativeSrc": "22760:35:62", + "nodeType": "YulFunctionCall", + "src": "22760:35:62" + }, + "nativeSrc": "22760:35:62", + "nodeType": "YulExpressionStatement", + "src": "22760:35:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__fromStack_reversed", + "nativeSrc": "22240:561:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "22410:9:62", + "nodeType": "YulTypedName", + "src": "22410:9:62", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "22421:6:62", + "nodeType": "YulTypedName", + "src": "22421:6:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "22429:6:62", + "nodeType": "YulTypedName", + "src": "22429:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "22437:6:62", + "nodeType": "YulTypedName", + "src": "22437:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "22445:6:62", + "nodeType": "YulTypedName", + "src": "22445:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "22453:6:62", + "nodeType": "YulTypedName", + "src": "22453:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "22461:6:62", + "nodeType": "YulTypedName", + "src": "22461:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "22472:4:62", + "nodeType": "YulTypedName", + "src": "22472:4:62", + "type": "" + } + ], + "src": "22240:561:62" + }, + { + "body": { + "nativeSrc": "22987:217:62", + "nodeType": "YulBlock", + "src": "22987:217:62", + "statements": [ + { + "nativeSrc": "22997:27:62", + "nodeType": "YulAssignment", + "src": "22997:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "23009:9:62", + "nodeType": "YulIdentifier", + "src": "23009:9:62" + }, + { + "kind": "number", + "nativeSrc": "23020:3:62", + "nodeType": "YulLiteral", + "src": "23020:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "23005:3:62", + "nodeType": "YulIdentifier", + "src": "23005:3:62" + }, + "nativeSrc": "23005:19:62", + "nodeType": "YulFunctionCall", + "src": "23005:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "22997:4:62", + "nodeType": "YulIdentifier", + "src": "22997:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "23040:9:62", + "nodeType": "YulIdentifier", + "src": "23040:9:62" + }, + { + "name": "value0", + "nativeSrc": "23051:6:62", + "nodeType": "YulIdentifier", + "src": "23051:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "23033:6:62", + "nodeType": "YulIdentifier", + "src": "23033:6:62" + }, + "nativeSrc": "23033:25:62", + "nodeType": "YulFunctionCall", + "src": "23033:25:62" + }, + "nativeSrc": "23033:25:62", + "nodeType": "YulExpressionStatement", + "src": "23033:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "23078:9:62", + "nodeType": "YulIdentifier", + "src": "23078:9:62" + }, + { + "kind": "number", + "nativeSrc": "23089:2:62", + "nodeType": "YulLiteral", + "src": "23089:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "23074:3:62", + "nodeType": "YulIdentifier", + "src": "23074:3:62" + }, + "nativeSrc": "23074:18:62", + "nodeType": "YulFunctionCall", + "src": "23074:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "23098:6:62", + "nodeType": "YulIdentifier", + "src": "23098:6:62" + }, + { + "kind": "number", + "nativeSrc": "23106:4:62", + "nodeType": "YulLiteral", + "src": "23106:4:62", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "23094:3:62", + "nodeType": "YulIdentifier", + "src": "23094:3:62" + }, + "nativeSrc": "23094:17:62", + "nodeType": "YulFunctionCall", + "src": "23094:17:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "23067:6:62", + "nodeType": "YulIdentifier", + "src": "23067:6:62" + }, + "nativeSrc": "23067:45:62", + "nodeType": "YulFunctionCall", + "src": "23067:45:62" + }, + "nativeSrc": "23067:45:62", + "nodeType": "YulExpressionStatement", + "src": "23067:45:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "23132:9:62", + "nodeType": "YulIdentifier", + "src": "23132:9:62" + }, + { + "kind": "number", + "nativeSrc": "23143:2:62", + "nodeType": "YulLiteral", + "src": "23143:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "23128:3:62", + "nodeType": "YulIdentifier", + "src": "23128:3:62" + }, + "nativeSrc": "23128:18:62", + "nodeType": "YulFunctionCall", + "src": "23128:18:62" + }, + { + "name": "value2", + "nativeSrc": "23148:6:62", + "nodeType": "YulIdentifier", + "src": "23148:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "23121:6:62", + "nodeType": "YulIdentifier", + "src": "23121:6:62" + }, + "nativeSrc": "23121:34:62", + "nodeType": "YulFunctionCall", + "src": "23121:34:62" + }, + "nativeSrc": "23121:34:62", + "nodeType": "YulExpressionStatement", + "src": "23121:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "23175:9:62", + "nodeType": "YulIdentifier", + "src": "23175:9:62" + }, + { + "kind": "number", + "nativeSrc": "23186:2:62", + "nodeType": "YulLiteral", + "src": "23186:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "23171:3:62", + "nodeType": "YulIdentifier", + "src": "23171:3:62" + }, + "nativeSrc": "23171:18:62", + "nodeType": "YulFunctionCall", + "src": "23171:18:62" + }, + { + "name": "value3", + "nativeSrc": "23191:6:62", + "nodeType": "YulIdentifier", + "src": "23191:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "23164:6:62", + "nodeType": "YulIdentifier", + "src": "23164:6:62" + }, + "nativeSrc": "23164:34:62", + "nodeType": "YulFunctionCall", + "src": "23164:34:62" + }, + "nativeSrc": "23164:34:62", + "nodeType": "YulExpressionStatement", + "src": "23164:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed", + "nativeSrc": "22806:398:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "22932:9:62", + "nodeType": "YulTypedName", + "src": "22932:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "22943:6:62", + "nodeType": "YulTypedName", + "src": "22943:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "22951:6:62", + "nodeType": "YulTypedName", + "src": "22951:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "22959:6:62", + "nodeType": "YulTypedName", + "src": "22959:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "22967:6:62", + "nodeType": "YulTypedName", + "src": "22967:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "22978:4:62", + "nodeType": "YulTypedName", + "src": "22978:4:62", + "type": "" + } + ], + "src": "22806:398:62" + } + ] + }, + "contents": "{\n { }\n function abi_decode_tuple_t_bytes32t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n }\n function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff))\n }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function panic_error_0x21()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function abi_encode_enum_DisputeStatus(value, pos)\n {\n if iszero(lt(value, 6)) { panic_error_0x21() }\n mstore(pos, value)\n }\n function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes32_t_enum$_DisputeType_$10710_t_enum$_DisputeStatus_$10718_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_bytes32_t_uint8_t_uint8_t_uint256_t_uint256__fromStack_reversed(headStart, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 256)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n if iszero(lt(value4, 3)) { panic_error_0x21() }\n mstore(add(headStart, 128), value4)\n abi_encode_enum_DisputeStatus(value5, add(headStart, 160))\n mstore(add(headStart, 192), value6)\n mstore(add(headStart, 224), value7)\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_contract$_ISubgraphService_$11280__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_bytes32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function validator_revert_uint64(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffff))) { revert(0, 0) }\n }\n function validator_revert_uint32(value)\n {\n if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint64t_uint256t_uint32t_uint32(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_uint64(value_1)\n value1 := value_1\n let value_2 := 0\n value_2 := calldataload(add(headStart, 64))\n value2 := value_2\n let value_3 := calldataload(add(headStart, 96))\n validator_revert_uint32(value_3)\n value3 := value_3\n let value_4 := calldataload(add(headStart, 128))\n validator_revert_uint32(value_4)\n value4 := value_4\n }\n function allocate_memory_2163() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 0xc0)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function allocate_memory() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 288)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function allocate_memory_2167() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 256)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function abi_decode_tuple_t_struct$_Receipt_$11685_memory_ptr(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 96)\n if _1 { revert(0, 0) }\n _1 := 0\n let memPtr := _1\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 96)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(_1, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(_1, 0x24)\n }\n mstore(64, newFreePtr)\n let value := _1\n value := calldataload(headStart)\n mstore(memPtr, value)\n let value_1 := _1\n value_1 := calldataload(add(headStart, 32))\n mstore(add(memPtr, 32), value_1)\n let value_2 := _1\n value_2 := calldataload(add(headStart, 64))\n mstore(add(memPtr, 64), value_2)\n value0 := memPtr\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_uint32(value)\n value0 := value\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n }\n function abi_decode_tuple_t_bytes_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n let offset_1 := calldataload(add(headStart, 32))\n if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_struct_State(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0xc0) { revert(0, 0) }\n value := allocate_memory_2163()\n let value_1 := 0\n value_1 := calldataload(headStart)\n mstore(value, value_1)\n let value_2 := 0\n value_2 := calldataload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := 0\n value_3 := calldataload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n let value_4 := 0\n value_4 := calldataload(add(headStart, 96))\n mstore(add(value, 96), value_4)\n let value_5 := 0\n value_5 := calldataload(add(headStart, 128))\n mstore(add(value, 128), value_5)\n let value_6 := calldataload(add(headStart, 160))\n if iszero(eq(value_6, and(value_6, 0xff))) { revert(0, 0) }\n mstore(add(value, 160), value_6)\n }\n function abi_decode_tuple_t_struct$_State_$11699_memory_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n value0 := abi_decode_struct_State(headStart, dataEnd)\n }\n function abi_decode_tuple_t_struct$_State_$11699_memory_ptrt_struct$_State_$11699_memory_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 384) { revert(0, 0) }\n value0 := abi_decode_struct_State(headStart, dataEnd)\n value1 := abi_decode_struct_State(add(headStart, 192), dataEnd)\n }\n function abi_decode_tuple_t_uint64(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_uint64(value)\n value0 := value\n }\n function abi_encode_tuple_t_enum$_DisputeStatus_$10718__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n abi_encode_enum_DisputeStatus(value0, headStart)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function abi_decode_uint32_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_uint32(value)\n }\n function abi_decode_uint64_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_uint64(value)\n }\n function abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 288)\n if _1 { revert(0, 0) }\n _1 := 0\n let value := allocate_memory()\n let value_1 := _1\n value_1 := mload(headStart)\n mstore(value, value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n mstore(add(value, 96), abi_decode_uint32_fromMemory(add(headStart, 96)))\n mstore(add(value, 128), abi_decode_uint64_fromMemory(add(headStart, 128)))\n mstore(add(value, 160), abi_decode_uint64_fromMemory(add(headStart, 160)))\n mstore(add(value, 192), abi_decode_uint32_fromMemory(add(headStart, 192)))\n mstore(add(value, 224), abi_decode_uint64_fromMemory(add(headStart, 224)))\n let value_4 := _1\n value_4 := mload(add(headStart, 256))\n mstore(add(value, 256), value_4)\n value0 := value\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 192)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), value5)\n }\n function abi_decode_tuple_t_struct$_State_$11307_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 256)\n if _1 { revert(0, 0) }\n _1 := 0\n let value := allocate_memory_2167()\n let value_1 := mload(headStart)\n validator_revert_address(value_1)\n mstore(value, value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n let value_4 := _1\n value_4 := mload(add(headStart, 96))\n mstore(add(value, 96), value_4)\n let value_5 := _1\n value_5 := mload(add(headStart, 128))\n mstore(add(value, 128), value_5)\n let value_6 := _1\n value_6 := mload(add(headStart, 160))\n mstore(add(value, 160), value_6)\n let value_7 := _1\n value_7 := mload(add(headStart, 192))\n mstore(add(value, 192), value_7)\n let value_8 := _1\n value_8 := mload(add(headStart, 224))\n mstore(add(value, 224), value_8)\n value0 := value\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n mstore(add(add(pos, i), 0x20), mload(add(add(value, i), 0x20)))\n }\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), 64)\n tail := abi_encode_bytes(value1, add(headStart, 64))\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 9)\n mstore(add(headStart, 64), \"!transfer\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_address_t_bytes32__to_t_address_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, and(shl(96, value0), not(sub(shl(96, 1), 1))))\n mstore(add(pos, 20), value1)\n end := add(pos, 52)\n }\n function abi_encode_tuple_t_uint256_t_address_t_bytes32_t_uint256__to_t_uint256_t_address_t_bytes32_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, shl(240, 6401))\n mstore(add(pos, 2), value0)\n mstore(add(pos, 34), value1)\n end := add(pos, 66)\n }\n function abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 160)\n if _1 { revert(0, 0) }\n _1 := 0\n let memPtr := _1\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 160)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(_1, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(_1, 0x24)\n }\n mstore(64, newFreePtr)\n let value := _1\n value := mload(headStart)\n mstore(memPtr, value)\n let value_1 := _1\n value_1 := mload(add(headStart, 32))\n mstore(add(memPtr, 32), value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 64))\n mstore(add(memPtr, 64), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 96))\n mstore(add(memPtr, 96), value_3)\n let value_4 := _1\n value_4 := mload(add(headStart, 128))\n mstore(add(memPtr, 128), value_4)\n value0 := memPtr\n }\n function abi_decode_tuple_t_uint32_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_uint32(value)\n value0 := value\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function abi_decode_tuple_t_bytes32t_bytes32t_bytes32_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := 0\n value := mload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := mload(add(headStart, 32))\n value1 := value_1\n let value_2 := 0\n value_2 := mload(add(headStart, 64))\n value2 := value_2\n }\n function abi_encode_tuple_packed_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__nonPadded_inplace_fromStack_reversed(pos, value4, value3, value2, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), value1)\n mstore(add(pos, 64), value2)\n mstore(add(pos, 96), and(shl(96, value3), not(sub(shl(96, 1), 1))))\n mstore(add(pos, 116), and(shl(96, value4), not(sub(shl(96, 1), 1))))\n end := add(pos, 136)\n }\n function abi_encode_tuple_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__to_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), 128)\n tail := abi_encode_bytes(value2, add(headStart, 128))\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_packed_t_bytes32_t_bytes32_t_uint8__to_t_bytes32_t_bytes32_t_uint8__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), value1)\n mstore(add(pos, 64), and(shl(248, value2), shl(248, 255)))\n end := add(pos, 65)\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 192)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 160), value5)\n }\n function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xff))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n}", + "id": 62, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": { + "4317": [ + { + "length": 32, + "start": 5646 + } + ], + "4321": [ + { + "length": 32, + "start": 8163 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1B0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x76C993AE GT PUSH2 0xEF JUMPI DUP1 PUSH4 0xBE41F384 GT PUSH2 0x92 JUMPI DUP1 PUSH4 0xBE41F384 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0xC133B429 EQ PUSH2 0x42E JUMPI DUP1 PUSH4 0xC50A77B1 EQ PUSH2 0x441 JUMPI DUP1 PUSH4 0xC894222E EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0xC9747F51 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xD36FC9D4 EQ PUSH2 0x48F JUMPI DUP1 PUSH4 0xD76F62D1 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x4B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x76C993AE EQ PUSH2 0x386 JUMPI DUP1 PUSH4 0x84633713 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3A7 JUMPI DUP1 PUSH4 0x902A4938 EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0x9334EA52 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x93A90A1E EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x9F81A7CF EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0xB0EEFABE EQ PUSH2 0x3F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x36167E03 GT PUSH2 0x157 JUMPI DUP1 PUSH4 0x36167E03 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x4BC5839A EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x5AEA0EC4 EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x5BF31D4D EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x5ED2C96C EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x6369DF6B EQ PUSH2 0x358 JUMPI DUP1 PUSH4 0x6CC6CDE1 EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x50B17AD EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x533E1BA EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x11BE1997 EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0x16972978 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0x17337B46 EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0x1792F194 EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0x26058249 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x29E03FF1 EQ PUSH2 0x2C2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C8 PUSH2 0x1C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A74 JUMP JUMPDEST PUSH2 0x4C8 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x1E1 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25E PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 SWAP1 SWAP7 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND SWAP7 SWAP6 SWAP1 SWAP5 AND SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 PUSH1 0xFF DUP1 DUP4 AND SWAP4 PUSH2 0x100 SWAP1 SWAP4 DIV AND SWAP2 DUP9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F2 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x280 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0x74B JUMP JUMPDEST PUSH2 0x1E1 PUSH3 0x7A120 DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0x75F JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH2 0x2B5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F2 SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x2CB PUSH1 0x35 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2B62 JUMP JUMPDEST PUSH2 0xBEF JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH2 0x313 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BB5 JUMP JUMPDEST PUSH2 0xC10 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x366 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CB5 JUMP JUMPDEST PUSH2 0xD43 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH2 0x2B5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0xD4E JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x394 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D20 JUMP JUMPDEST PUSH2 0xD62 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x1E1 SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xD8E JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0xFAE JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D20 JUMP JUMPDEST PUSH2 0xFBF JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x406 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0xFD0 JUMP JUMPDEST PUSH2 0x41E PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xFE1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x43C CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0x1017 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x2DA2 JUMP JUMPDEST PUSH2 0x10AF JUMP JUMPDEST PUSH2 0x467 PUSH2 0x462 CALLDATASIZE PUSH1 0x4 PUSH2 0x2DE3 JUMP JUMPDEST PUSH2 0x113B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x2EB9 JUMP JUMPDEST PUSH2 0x1320 JUMP JUMPDEST PUSH2 0x41E PUSH2 0x49D CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED5 JUMP JUMPDEST PUSH2 0x1411 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F0B JUMP JUMPDEST PUSH2 0x141D JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x4C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0x142E JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x4FD DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x528 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x556 JUMPI PUSH2 0x556 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE DUP1 SLOAD PUSH1 0x6 DUP3 ADD SLOAD SWAP2 SWAP3 SWAP2 PUSH2 0x5CF SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP7 SWAP1 PUSH2 0x1469 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x2 DUP5 ADD SLOAD SWAP2 SWAP3 POP PUSH2 0x60E SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH2 0x5F6 SWAP1 DUP5 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP6 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP6 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP5 ADD SLOAD PUSH2 0x6D6 SWAP3 DUP6 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x66F JUMPI PUSH2 0x66F PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x680 JUMPI PUSH2 0x680 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x6A8 JUMPI PUSH2 0x6A8 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x6B9 JUMPI PUSH2 0x6B9 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x6E8 JUMPI PUSH2 0x6E8 DUP3 PUSH1 0x3 ADD SLOAD PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD DUP3 SLOAD PUSH1 0x2 DUP5 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP8 SWAP1 PUSH32 0x6D800AAAF64B9A1F321DCD63DA04369D33D8A0D49AD0FBBA085AAB4A98BF31C4 SWAP1 PUSH2 0x733 SWAP1 DUP7 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x753 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1760 JUMP JUMPDEST POP JUMP JUMPDEST DUP1 PUSH2 0x769 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x78B JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x82C0055 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x7D0 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x7F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x820 JUMPI PUSH2 0x820 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0x85A JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x34 SLOAD PUSH1 0x5 DUP3 ADD SLOAD TIMESTAMP SWAP2 PUSH2 0x88E SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 PUSH2 0x2F4C JUMP JUMPDEST LT PUSH2 0x8AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1D7753D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD ISZERO PUSH2 0x8D6 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH2 0x8D6 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP5 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH2 0x99E SWAP3 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x937 JUMPI PUSH2 0x937 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x948 JUMPI PUSH2 0x948 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x970 JUMPI PUSH2 0x970 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x981 JUMPI PUSH2 0x981 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x17BF JUMP JUMPDEST POP PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x500 OR SWAP1 SSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND SWAP4 SWAP1 SWAP3 AND SWAP2 DUP8 SWAP2 PUSH32 0x223103F8EB52E5F43A75655152ACD882A605D70DF57A5C0FEFD30F516B1756D2 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA32 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xA3C DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0xA5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xA8C JUMPI PUSH2 0xA8C PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0xAC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0x200 PUSH2 0xFF00 NOT DUP3 AND OR SWAP1 SWAP2 SSTORE DUP4 MLOAD PUSH2 0x100 DUP2 ADD DUP6 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP5 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE SWAP1 SWAP3 PUSH2 0xB49 SWAP3 SWAP2 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x66F JUMPI PUSH2 0x66F PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD DUP5 SWAP2 ISZERO PUSH2 0xB77 JUMPI PUSH1 0x40 MLOAD PUSH4 0x41371593 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH2 0xB98 DUP2 PUSH1 0x2 ADD SLOAD PUSH2 0xB89 PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x180D JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH32 0x2226EBD23625A7938FB786DF2248BD171D2E6AD70CB2B654EA1BE830CA17224D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBF9 PUSH2 0x1872 JUMP JUMPDEST PUSH2 0xC07 CALLER PUSH1 0x35 SLOAD DUP6 DUP6 PUSH2 0x1891 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1A PUSH2 0x1BD3 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xC41 JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xC5D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xC6B JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xC89 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xCB3 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH2 0xCBC CALLER PUSH2 0x1BF7 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x1C08 JUMP JUMPDEST PUSH2 0xCCD DUP11 PUSH2 0x1C18 JUMP JUMPDEST PUSH2 0xCD6 DUP10 PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0xCDF DUP9 PUSH2 0x1760 JUMP JUMPDEST PUSH2 0xCE8 DUP8 PUSH2 0x1D0E JUMP JUMPDEST PUSH2 0xCF1 DUP7 PUSH2 0x1D8B JUMP JUMPDEST DUP4 ISZERO PUSH2 0xD37 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC0A DUP3 PUSH2 0x1E18 JUMP JUMPDEST PUSH2 0xD56 PUSH2 0x172E JUMP JUMPDEST PUSH2 0xD60 PUSH1 0x0 PUSH2 0x1EB5 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xD6A PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1D0E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD7E PUSH2 0x1F11 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDB9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xDC3 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0xDE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xE13 JUMPI PUSH2 0xE13 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0xE4D JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD SLOAD ISZERO PUSH2 0xE86 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH2 0xE86 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP5 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH2 0xF4E SWAP3 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xEE7 JUMPI PUSH2 0xEE7 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xEF8 JUMPI PUSH2 0xEF8 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF20 JUMPI PUSH2 0xF20 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF31 JUMPI PUSH2 0xF31 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x1F35 JUMP JUMPDEST POP PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x300 OR SWAP1 SSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH32 0xF0912EFB86EA1D65A17D64D48393CDB1CA0EA5220DD2BBE438621199D30955B7 SWAP1 PUSH1 0x20 ADD PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0xFB6 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1F70 JUMP JUMPDEST PUSH2 0xFC7 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1D8B JUMP JUMPDEST PUSH2 0xFD8 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1C18 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x100F JUMPI PUSH2 0x100F PUSH2 0x2AAF JUMP JUMPDEST EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1022 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x1056 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1074 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1098 SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST SWAP1 POP PUSH2 0x10A8 DUP4 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B9 PUSH2 0x1872 JUMP JUMPDEST PUSH2 0xC07 CALLER PUSH1 0x35 SLOAD PUSH2 0x10FF DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 PUSH2 0x1184 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11C7 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x11D3 DUP3 DUP3 PUSH2 0x2532 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD MLOAD PUSH1 0x40 DUP1 DUP8 ADD MLOAD DUP7 MLOAD SWAP4 DUP8 ADD MLOAD SWAP2 DUP8 ADD MLOAD SWAP5 SWAP6 SWAP3 SWAP5 SWAP1 SWAP4 SWAP3 PUSH2 0x1232 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6ABA5297 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x24 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC4 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP POP POP POP PUSH1 0x0 PUSH2 0x127D DUP5 PUSH1 0x0 DUP6 DUP14 DUP14 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12C4 DUP6 PUSH1 0x0 DUP6 DUP13 DUP13 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x3 SWAP1 DUP2 ADD DUP5 SWAP1 SSTORE DUP4 DUP4 MSTORE DUP2 DUP4 KECCAK256 ADD DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 POP DUP3 SWAP2 DUP5 SWAP2 PUSH32 0xFEC135A4CF8E5C6E13DEA23BE058BF03A8BF8F1F6FB0A021B0A5AEDDFBA81407 SWAP2 LOG3 SWAP1 SWAP11 SWAP1 SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x132C DUP4 PUSH2 0x2563 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0xE022923 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xE022923 SWAP1 PUSH2 0x1362 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1380 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A4 SWAP2 SWAP1 PUSH2 0x3036 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x34789D8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD SWAP1 DUP2 DUP2 EQ PUSH2 0x1407 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA24CFE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC07 DUP4 DUP4 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x1425 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0x1436 PUSH2 0x172E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1460 JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1EB5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1474 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x14A8 SWAP3 DUP11 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14EA SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x150F SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP1 PUSH2 0x25F4 AND JUMP JUMPDEST SWAP1 POP DUP5 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1520 JUMPI POP DUP1 DUP6 GT ISZERO JUMPDEST DUP6 DUP3 SWAP1 SWAP2 PUSH2 0x154A JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC6B7C41 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH1 0x0 PUSH2 0x155C DUP7 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x265B JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x157A SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x25F4 AND JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP3 SUB DUP4 ADD DUP2 MSTORE PUSH1 0x60 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x65C1A3FF PUSH1 0xE1 SHL SWAP1 SWAP3 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xCB8347FE SWAP2 PUSH2 0x15CE SWAP2 DUP13 SWAP2 SWAP1 PUSH1 0x64 ADD PUSH2 0x30F9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP3 SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16AA SWAP2 SWAP1 PUSH2 0x311D JUMP JUMPDEST PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10BA3930B739B332B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10A8 JUMPI POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1726 JUMPI PUSH2 0x1726 PUSH2 0x2AAF JUMP JUMPDEST EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH2 0x1737 PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD60 JUMPI CALLER PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST DUP1 DUP1 PUSH2 0x1782 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F4E05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x35 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x97896B9DA0F97F36BF3011570BCFF930069299DE4B1E89C9CB44909841CAC2F8 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17CA DUP3 PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x1805 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0x5 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x186E JUMPI PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1869 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xD60 CALLER PUSH1 0x35 SLOAD PUSH2 0x1881 PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x2671 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 SWAP1 SHL AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x34 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x54 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x18D8 DUP2 PUSH2 0xFE1 JUMP JUMPDEST ISZERO DUP2 SWAP1 PUSH2 0x18FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x124A23F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0xE022923 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE022923 SWAP1 PUSH2 0x192D SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x194B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196F SWAP2 SWAP1 PUSH2 0x3036 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x199D JUMPI PUSH1 0x40 MLOAD PUSH4 0x34789D8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x19A8 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x19DC SWAP3 DUP8 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A1E SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SUB PUSH2 0x1A43 JUMPI PUSH1 0x40 MLOAD PUSH4 0x307EFDB7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1A53 DUP4 DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x80 DUP2 ADD PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x37 DUP3 MSTORE DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR DUP4 SSTORE SWAP3 DUP6 ADD MLOAD PUSH1 0x1 DUP1 DUP5 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP5 AND OR SWAP1 SSTORE SWAP2 DUP4 ADD MLOAD PUSH1 0x2 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x3 DUP5 ADD SSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x4 DUP5 ADD DUP1 SLOAD SWAP2 SWAP4 SWAP1 SWAP3 PUSH1 0xFF NOT SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x1B23 JUMPI PUSH2 0x1B23 PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1B4D JUMPI PUSH2 0x1B4D PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x5 DUP3 ADD SSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x6 SWAP1 SWAP2 ADD SSTORE DUP4 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 DUP14 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP8 SWAP1 PUSH32 0xBFD6E5F61B4AA04B088A513A833705C7C703B907516C1DBFA66F93D1F725D33D SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 JUMP JUMPDEST PUSH2 0x1BFF PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x26D7 JUMP JUMPDEST PUSH2 0x1C10 PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0xD60 PUSH2 0x26DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x616BC441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x51744122301B50E919F4E3D22ADF8C53ABC92195B8C667EDA98C6EF20375672E SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x1CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC4411F11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x310462A9BF49FFF4A57910EC647C77CBF8AAF2F13394554AC6CDF14FC68DB7E6 SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST DUP1 PUSH3 0x7A120 PUSH4 0xFFFFFFFF DUP3 AND GT ISZERO PUSH2 0x1D42 JUMPI PUSH1 0x40 MLOAD PUSH4 0x432E6643 PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH1 0x36 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC573DC0F869F6A1D0A74FC7712A63BAABCB5567131D2D98005E163924EDDCBAB SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST DUP1 PUSH4 0xFFFFFFFF DUP2 AND PUSH3 0xF4240 LT ISZERO PUSH2 0x1DBF JUMPI PUSH1 0x40 MLOAD PUSH4 0x4E9374FB PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH1 0x36 DUP1 SLOAD PUSH8 0xFFFFFFFF00000000 NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH4 0xFFFFFFFF DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP3 DIV AND DUP2 MSTORE PUSH32 0x7EFAF01BEC3CDA8D104163BB466D01D7E16F68848301C7EB0749CFA59D680502 SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 SWAP5 DUP6 ADD MLOAD DUP6 MLOAD PUSH32 0x32DD026408194A0D7E54CC66A2AB6C856EFC55CFCD4DD258FDE5B1A55222BAA6 DUP2 DUP6 ADD MSTORE DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP4 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC2 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xE2 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP4 ADD DUP4 MSTORE PUSH2 0x102 SWAP1 SWAP2 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EBF PUSH2 0x1F11 JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP5 POP SWAP2 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F40 DUP3 PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x1805 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0x3 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH2 0x17F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F97 JUMPI PUSH1 0x40 MLOAD PUSH4 0x616BC441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x81DCB738DA3DABD5BB2ADBC7DD107FBBFCA936E9C8AECAB25F5B17A710A784C7 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2010 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1584A179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x561285E4 SWAP3 PUSH2 0x2044 SWAP3 DUP10 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2061 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2085 SWAP2 SWAP1 PUSH2 0x313F JUMP JUMPDEST PUSH1 0x0 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x33 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1EBB7C30 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2104 SWAP2 SWAP1 PUSH2 0x31BE JUMP JUMPDEST PUSH2 0x2114 SWAP1 PUSH4 0xFFFFFFFF AND DUP6 PUSH2 0x31DB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2122 DUP4 DUP4 PUSH2 0x27B1 JUMP JUMPDEST PUSH2 0x212C SWAP1 DUP7 PUSH2 0x2F4C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH2 0x2175 PUSH1 0x20 DUP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x217F SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x218A SWAP1 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST DUP3 MLOAD SWAP1 DUP2 EQ SWAP1 PUSH1 0x1 PUSH2 0x219D PUSH1 0x20 DUP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x21A7 SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x21B2 SWAP1 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x21DA JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x21F5 SWAP2 SWAP1 PUSH2 0x31F2 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2208 DUP7 PUSH1 0x60 PUSH2 0x27C1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2221 DUP8 PUSH2 0x221C PUSH1 0x20 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x27C1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2245 DUP9 PUSH1 0x20 PUSH2 0x2236 DUP2 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x2240 SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x2813 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE SWAP8 DUP9 MSTORE PUSH1 0x20 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP5 ADD MSTORE POP PUSH1 0xFF AND PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2289 DUP5 PUSH2 0x1320 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2295 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x22C9 SWAP3 DUP8 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x230B SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SUB PUSH2 0x2330 JUMPI PUSH1 0x40 MLOAD PUSH4 0x307EFDB7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x20 DUP1 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD DUP2 MLOAD SWAP4 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT DUP5 DUP4 SHL DUP2 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP2 DUP10 SWAP1 SHL SWAP1 SWAP2 AND PUSH1 0x94 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0xA8 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x2399 DUP2 PUSH2 0xFE1 JUMP JUMPDEST ISZERO DUP2 SWAP1 PUSH2 0x23BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x124A23F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x23CD DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP3 MSTORE DUP13 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE DUP4 DUP6 ADD DUP15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x80 DUP9 ADD DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0xA0 DUP11 ADD DUP2 SWAP1 MSTORE TIMESTAMP PUSH1 0xC0 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD DUP13 SWAP1 MSTORE DUP14 DUP6 MSTORE PUSH1 0x37 SWAP1 SWAP7 MSTORE SWAP9 SWAP1 SWAP3 KECCAK256 DUP8 MLOAD DUP2 SLOAD SWAP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR DUP3 SSTORE SWAP6 MLOAD PUSH1 0x1 DUP1 DUP4 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP10 AND SWAP2 SWAP1 SWAP8 AND OR SWAP1 SWAP7 SSTORE SWAP2 MLOAD DUP6 DUP3 ADD SSTORE SWAP1 MLOAD PUSH1 0x3 DUP6 ADD SSTORE SWAP5 MLOAD SWAP1 DUP4 ADD DUP1 SLOAD SWAP7 SWAP8 POP SWAP4 SWAP6 SWAP3 SWAP5 SWAP1 SWAP4 SWAP3 PUSH1 0xFF NOT AND SWAP2 SWAP1 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x248A JUMPI PUSH2 0x248A PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x24B4 JUMPI PUSH2 0x24B4 PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD SSTORE PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD SSTORE SWAP1 POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0xFB609A7FD5EB7947365D2F96D051030CAC33A27E3E4923F97EA4E03AAA2BCB14 DUP12 DUP12 PUSH1 0x40 ADD MLOAD DUP12 DUP8 PUSH1 0x40 MLOAD PUSH2 0x251E SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3220 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 EQ DUP1 ISZERO PUSH2 0x254D JUMPI POP DUP2 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0xC07 JUMPI POP POP PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MLOAD EQ ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE DUP3 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP1 DUP2 PUSH2 0x2593 DUP3 PUSH2 0x1E18 JUMP JUMPDEST SWAP1 POP PUSH2 0x25EC DUP2 DUP6 PUSH1 0x60 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x25D8 SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x41 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x2865 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2603 DUP4 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x2616 JUMPI POP PUSH2 0x2616 DUP3 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP4 DUP4 SWAP1 SWAP2 PUSH2 0x2640 JUMPI PUSH1 0x40 MLOAD PUSH4 0x768BF0EB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH3 0xF4240 SWAP1 POP PUSH2 0x2651 DUP4 DUP6 PUSH2 0x31DB JUMP JUMPDEST PUSH2 0xC07 SWAP2 SWAP1 PUSH2 0x3250 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x266A JUMPI DUP2 PUSH2 0xC07 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH2 0x1667 JUMP JUMPDEST PUSH2 0x26BA PUSH2 0x288F JUMP JUMPDEST PUSH2 0xD60 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1436 PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x26E7 PUSH2 0x26B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD87CD6EF79D4E2B95E15CE8ABF732DB51EC771F1CA2EDCCF22A46C729AC56472 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x171A7FA058648750A8C5AAE430F30DB8D0100EFC3A5E1B2E8054B1C1CE28B6B4 SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x44852B2A670ADE5407E78FB2863C51DE9FCB96542A07186FE3AEDA6BB8A116D PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH32 0xA070FFB1CD7409649BF77822CCE74495468E06DBFAEF09556838BF188679B9C2 PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x266A JUMPI DUP2 PUSH2 0xC07 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27CE PUSH1 0x20 DUP4 PUSH2 0x2F4C JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP2 LT ISZERO SWAP1 PUSH2 0x27E0 PUSH1 0x20 DUP6 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x2808 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2820 PUSH1 0x1 DUP4 PUSH2 0x2F4C JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP2 LT ISZERO SWAP1 PUSH2 0x2832 PUSH1 0x1 DUP6 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x285A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP ADD PUSH1 0x1 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2875 DUP7 DUP7 PUSH2 0x28A9 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x2885 DUP3 DUP3 PUSH2 0x28F6 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2899 PUSH2 0x1BD3 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x41 SUB PUSH2 0x28E3 JUMPI PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x28D5 DUP9 DUP3 DUP6 DUP6 PUSH2 0x29AF JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x28EF JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x0 SWAP2 POP PUSH1 0x2 SWAP1 JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x290A JUMPI PUSH2 0x290A PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x2913 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2927 JUMPI PUSH2 0x2927 PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x2945 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF645EEDF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2959 JUMPI PUSH2 0x2959 PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x297A JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCE698F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST PUSH1 0x3 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x298E JUMPI PUSH2 0x298E PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x186E JUMPI PUSH1 0x40 MLOAD PUSH4 0x35E2F383 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH16 0xA2A8918CA85BAFE22016D0B997E4DF60 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP5 GT ISZERO PUSH2 0x29E0 JUMPI POP PUSH1 0x0 SWAP2 POP PUSH1 0x3 SWAP1 POP DUP3 PUSH2 0x2A6A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP11 SWAP1 MSTORE PUSH1 0xFF DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A34 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2A60 JUMPI POP PUSH1 0x0 SWAP3 POP PUSH1 0x1 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x2A6A JUMP JUMPDEST SWAP3 POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x6 DUP2 LT PUSH2 0x2AD5 JUMPI PUSH2 0x2AD5 PUSH2 0x2AAF JUMP JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND DUP3 MSTORE DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD PUSH1 0x3 DUP7 LT PUSH2 0x2B10 JUMPI PUSH2 0x2B10 PUSH2 0x2AAF JUMP JUMPDEST DUP6 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x2B23 PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x2AC5 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xE0 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2B80 DUP2 PUSH2 0x2B4D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2BCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x2BD8 DUP2 PUSH2 0x2B4D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x2BE8 DUP2 PUSH2 0x2B8E JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x2BFF DUP2 PUSH2 0x2BA3 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x2C0F DUP2 PUSH2 0x2BA3 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x100 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x2CC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2CFA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 SWAP1 DUP2 MSTORE DUP5 CALLDATALOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE SWAP4 DUP5 ADD CALLDATALOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2B4D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2D9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2DCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DD7 DUP6 DUP3 DUP7 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2DF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E1B DUP8 DUP3 DUP9 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E46 DUP8 DUP3 DUP9 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6C PUSH2 0x2C1D JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE SWAP1 POP PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2ECB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC07 DUP4 DUP4 PUSH2 0x2E52 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x180 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2EE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2EF3 DUP5 DUP5 PUSH2 0x2E52 JUMP JUMPDEST SWAP2 POP PUSH2 0x2F02 DUP5 PUSH1 0xC0 DUP6 ADD PUSH2 0x2E52 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xC0A DUP3 DUP5 PUSH2 0x2AC5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xC0A JUMPI PUSH2 0xC0A PUSH2 0x2F36 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2F84 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2F84 DUP2 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x2FA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2FB3 PUSH2 0x2C53 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x2FD7 PUSH1 0x60 DUP6 ADD PUSH2 0x2F79 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2FE8 PUSH1 0x80 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2FF9 PUSH1 0xA0 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x300A PUSH1 0xC0 DUP6 ADD PUSH2 0x2F79 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x301B PUSH1 0xE0 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x304A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x3055 PUSH2 0x2C84 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x3060 DUP2 PUSH2 0x2B4D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xE0 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x30D9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x30BD JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x25EC SWAP1 DUP4 ADD DUP5 PUSH2 0x30B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x312F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x3152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3184 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 SWAP1 DUP2 MSTORE DUP5 MLOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD MLOAD SWAP1 DUP4 ADD MSTORE DUP5 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x10A8 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xC0A JUMPI PUSH2 0xC0A PUSH2 0x2F36 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 SWAP1 SWAP4 ADD MLOAD SWAP1 SWAP5 SWAP3 SWAP4 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x323F PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x326D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xFC MLOAD 0xA7 SWAP3 SELFBALANCE 0xA9 0xED CALLCODE PUSH12 0xDAF727EA63DE7398A97BC3A2 PUSH27 0xD1E74C0FF8BF34282E64736F6C634300081B003300000000000000 ", + "sourceMap": "2429:26817:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9390:806;;;;;;:::i;:::-;;:::i;:::-;;882:28:49;;;;;-1:-1:-1;;;882:28:49;;;;;;;;;539:10:62;527:23;;;509:42;;497:2;482:18;882:28:49;;;;;;;;958:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;958:77:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12902:130:48:-;;;;;;:::i;:::-;;:::i;2745:56::-;;2795:6;2745:56;;11271:789;;;;;;:::i;:::-;;:::i;312:39:49:-;;;;;-1:-1:-1;;;;;312:39:49;;;;;;;;;;:::i;595:29::-;;;;;;;;;2532:25:62;;;2520:2;2505:18;595:29:49;2386:177:62;16084:685:48;;;;;;:::i;:::-;;:::i;5534:307::-;;;;;;:::i;:::-;;:::i;14965:105::-;15050:13;;-1:-1:-1;;;15050:13:48;;-1:-1:-1;;;;;15050:13:48;14965:105;;;-1:-1:-1;;;;;3420:31:62;;;3402:50;;3390:2;3375:18;14965:105:48;3258:200:62;508:27:49;;;;;-1:-1:-1;;;508:27:49;;-1:-1:-1;;;;;508:27:49;;;4443:506:48;;;;;;:::i;:::-;;:::i;14501:147::-;;;;;;:::i;:::-;;:::i;434:25:49:-;;;;;-1:-1:-1;;;;;434:25:49;;;3155:101:34;;;:::i;13270:147:48:-;;;;;;:::i;:::-;;:::i;14755:108::-;14838:18;;;;14755:108;;2441:144:34;;;:::i;749:32:49:-;;;;;;;;;10372:606:48;;;;;;:::i;:::-;;:::i;13927:134::-;;;;;;:::i;:::-;;:::i;13588:131::-;;;;;;:::i;:::-;;:::i;12250:114::-;;;;;;:::i;:::-;;:::i;17779:153::-;;;;;;:::i;:::-;;:::i;:::-;;;7333:14:62;;7326:22;7308:41;;7296:2;7281:18;17779:153:48;7168:187:62;15188:270:48;;;;;;:::i;:::-;;:::i;6270:423::-;;;;;;:::i;:::-;;:::i;7382:1483::-;;;;;;:::i;:::-;;:::i;:::-;;;;9017:25:62;;;9073:2;9058:18;;9051:34;;;;8990:18;7382:1483:48;8843:248:62;16923:667:48;;;;;;:::i;:::-;;:::i;15638:252::-;;;;;;:::i;:::-;;:::i;12548:125::-;;;;;;:::i;:::-;;:::i;3405:215:34:-;;;;;;:::i;:::-;;:::i;9390:806:48:-;2960:10;;-1:-1:-1;;;;;2960:10:48;2946;:24;2938:64;;;;-1:-1:-1;;;2938:64:48;;;;;;;;;;;;9527:9:::1;3205:27;3222:9;3205:16;:27::i;:::-;3263:9;3197:77;;;;;-1:-1:-1::0;;;3197:77:48::1;;;;;;2532:25:62::0;;2520:2;2505:18;;2386:177;3197:77:48::1;;;;;;;;;-1:-1:-1::0;3335:37:48::1;3305:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;:67;::::0;::::1;;;;;;:::i;:::-;3418:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;::::0;3305:67:::1;3284:171;;;;-1:-1:-1::0;;;3284:171:48::1;;;;;;;;:::i;:::-;-1:-1:-1::0;9548:23:48::2;9574:19:::0;;;:8:::2;:19;::::0;;;;9640:14:::2;::::0;::::2;:55:::0;;-1:-1:-1;;9640:55:48::2;;;::::0;;9762:15;;9792:21:::2;::::0;::::2;::::0;9574:19;;9548:23;9748:66:::2;::::0;-1:-1:-1;;;;;9762:15:48::2;::::0;9779:11;;9748:13:::2;:66::i;:::-;9916:17;::::0;::::2;::::0;9952:15:::2;::::0;::::2;::::0;9723:91;;-1:-1:-1;9891:77:48::2;::::0;-1:-1:-1;;;;;9916:17:48;;::::2;::::0;9935:32:::2;::::0;9723:91;9935:32:::2;:::i;:::-;9891:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;9891:24:48::2;::::0;:77;:24:::2;:77::i;:::-;9983:29;::::0;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;9983:29:48;;::::2;::::0;;;;::::2;::::0;::::2;;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;10004:7;;9983:29;;;;::::2;::::0;;::::2;::::0;;::::2;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;:20;:29::i;:::-;9979:99;;;10028:39;10042:7;:24;;;10028:13;:39::i;:::-;10137:17;::::0;::::2;::::0;10120:15;;10156::::2;::::0;::::2;::::0;-1:-1:-1;;;;;10137:17:48;;::::2;::::0;10120:15;;::::2;::::0;10109:9;;10093:96:::2;::::0;10156:32:::2;::::0;10174:14;;10156:32:::2;:::i;:::-;10093:96;::::0;2532:25:62;;;2520:2;2505:18;10093:96:48::2;;;;;;;9538:658;;3012:1:::1;9390:806:::0;;:::o;12902:130::-;2334:13:34;:11;:13::i;:::-;12991:34:48::1;13010:14;12991:18;:34::i;:::-;12902:130:::0;:::o;11271:789::-;11345:9;3662:27;3679:9;3662:16;:27::i;:::-;3720:9;3654:77;;;;;-1:-1:-1;;;3654:77:48;;;;;;2532:25:62;;2520:2;2505:18;;2386:177;3654:77:48;-1:-1:-1;3763:19:48;;;;:8;:19;;;;;:29;;;-1:-1:-1;;;;;3763:29:48;3749:10;:43;3741:82;;;;-1:-1:-1;;;3741:82:48;;;;;;;;;;;;11375:9:::1;3205:27;3222:9;3205:16;:27::i;:::-;3263:9;3197:77;;;;;-1:-1:-1::0;;;3197:77:48::1;;;;;;2532:25:62::0;;2520:2;2505:18;;2386:177;3197:77:48::1;-1:-1:-1::0;3335:37:48::1;3305:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;:67;::::0;::::1;;;;;;:::i;:::-;3418:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;::::0;3305:67:::1;3284:171;;;;-1:-1:-1::0;;;3284:171:48::1;;;;;;;;:::i;:::-;-1:-1:-1::0;11396:23:48::2;11422:19:::0;;;:8:::2;:19;::::0;;;;11528:13:::2;::::0;11508:17:::2;::::0;::::2;::::0;11544:15:::2;::::0;11508:33:::2;::::0;-1:-1:-1;;;11528:13:48;;::::2;-1:-1:-1::0;;;;;11528:13:48::2;::::0;11508:33:::2;:::i;:::-;:51;11500:102;;;;-1:-1:-1::0;;;11500:102:48::2;;;;;;;;;;;;11667:15;::::0;::::2;::::0;:19;11663:110:::2;;11727:17;::::0;::::2;::::0;11746:15:::2;::::0;::::2;::::0;11702:60:::2;::::0;-1:-1:-1;;;;;11727:17:48::2;::::0;11702:13:::2;:11;:13::i;:60::-;11825:33;::::0;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;11825:33:48;;::::2;::::0;;;;::::2;::::0;::::2;;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;11850:7;;11825:33;;;;::::2;::::0;;::::2;::::0;;::::2;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;:24;:33::i;:::-;-1:-1:-1::0;11901:14:48::2;::::0;::::2;:56:::0;;-1:-1:-1;;11901:56:48::2;::::0;::::2;::::0;;-1:-1:-1;12018:17:48;::::2;::::0;12001:15;;12037::::2;::::0;::::2;::::0;11973:80:::2;::::0;;2532:25:62;;;11973:80:48;-1:-1:-1;;;;;12018:17:48;;::::2;::::0;12001:15;;::::2;::::0;11990:9;;11973:80:::2;::::0;;;;;2520:2:62;11973:80:48;;::::2;11386:674;3833:1:::1;11271:789:::0;;:::o;16084:685::-;2960:10;;-1:-1:-1;;;;;2960:10:48;2946;:24;2938:64;;;;-1:-1:-1;;;2938:64:48;;;;;;;;;;;;16176:9:::1;3205:27;3222:9;3205:16;:27::i;:::-;3263:9;3197:77;;;;;-1:-1:-1::0;;;3197:77:48::1;;;;;;2532:25:62::0;;2520:2;2505:18;;2386:177;3197:77:48::1;-1:-1:-1::0;3335:37:48::1;3305:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;:67;::::0;::::1;;;;;;:::i;:::-;3418:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;::::0;3305:67:::1;3284:171;;;;-1:-1:-1::0;;;3284:171:48::1;;;;;;;;:::i;:::-;-1:-1:-1::0;16197:23:48::2;16223:19:::0;;;:8:::2;:19;::::0;;;;;;;;16285:14:::2;::::0;::::2;:55:::0;;;-1:-1:-1;;16285:55:48;::::2;;::::0;;;16447:29;;16285:55:::2;16447:29:::0;::::2;::::0;;;;-1:-1:-1;;;;;16447:29:48;;::::2;::::0;;-1:-1:-1;16447:29:48;::::2;::::0;::::2;::::0;;::::2;::::0;;;;16302:38:::2;16447:29:::0;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;16223:19;;16447:29:::2;::::0;;16223:19;;16447:29;;;;::::2;::::0;;;::::2;;;;;;:::i;:::-;16540:24;::::0;::::2;::::0;16529:9;;16446:30:::2;16425:150;;;::::0;-1:-1:-1;;;16425:150:48;;::::2;::::0;::::2;9017:25:62::0;;;;9058:18;;;9051:34;8990:18;;16425:150:48::2;8843:248:62::0;16425:150:48::2;;;16626:41;16651:7;:15;;;16626:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;16626:24:48::2;::::0;::::2;:41::i;:::-;16727:17;::::0;::::2;::::0;16710:15;;16746::::2;::::0;::::2;::::0;16683:79:::2;::::0;2532:25:62;;;-1:-1:-1;;;;;16727:17:48;;::::2;::::0;16710:15;;::::2;::::0;16699:9;;16683:79:::2;::::0;2520:2:62;2505:18;16683:79:48::2;;;;;;;;16187:582;3012:1:::1;16084:685:::0;:::o;5534:307::-;5627:7;5682:23;:21;:23::i;:::-;5751:83;5788:10;5800:14;;5816:12;5830:3;5751:36;:83::i;:::-;5744:90;;5534:307;;;;;:::o;4443:506::-;4158:30:35;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:35;-1:-1:-1;;;4302:15:35;;;4301:16;;-1:-1:-1;;;;;4348:14:35;4279:19;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:35;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:35;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:35;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:35;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:35;-1:-1:-1;;;5013:22:35;;;4979:67;4658:26:48::1;4673:10;4658:14;:26::i;:::-;4694:27;:25;:27::i;:::-;4732:26;4747:10;4732:14;:26::i;:::-;4768:32;4786:13;4768:17;:32::i;:::-;4810:34;4829:14;4810:18;:34::i;:::-;4854:43;4877:19;4854:22;:43::i;:::-;4907:35;4926:15;4907:18;:35::i;:::-;5070:14:35::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:35;;;5142:14;;-1:-1:-1;3402:50:62;;5142:14:35;;3390:2:62;3375:18;5142:14:35;;;;;;;5066:101;4092:1081;;;;;4443:506:48;;;;;:::o;14501:147::-;14592:7;14618:23;14633:7;14618:14;:23::i;3155:101:34:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;13270:147:48:-;2334:13:34;:11;:13::i;:::-;13367:43:48::1;13390:19;13367:22;:43::i;2441:144:34:-:0;2487:7;2506:24;2533:20;:18;:20::i;:::-;2570:8;-1:-1:-1;;;;;2570:8:34;;2441:144;-1:-1:-1;;2441:144:34:o;10372:606:48:-;2960:10;;-1:-1:-1;;;;;2960:10:48;2946;:24;2938:64;;;;-1:-1:-1;;;2938:64:48;;;;;;;;;;;;10464:9:::1;3205:27;3222:9;3205:16;:27::i;:::-;3263:9;3197:77;;;;;-1:-1:-1::0;;;3197:77:48::1;;;;;;2532:25:62::0;;2520:2;2505:18;;2386:177;3197:77:48::1;-1:-1:-1::0;3335:37:48::1;3305:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;:67;::::0;::::1;;;;;;:::i;:::-;3418:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;::::0;3305:67:::1;3284:171;;;;-1:-1:-1::0;;;3284:171:48::1;;;;;;;;:::i;:::-;-1:-1:-1::0;10485:23:48::2;10511:19:::0;;;:8:::2;:19;::::0;;;;10595:15:::2;::::0;::::2;::::0;:19;10591:110:::2;;10655:17;::::0;::::2;::::0;10674:15:::2;::::0;::::2;::::0;10630:60:::2;::::0;-1:-1:-1;;;;;10655:17:48::2;::::0;10630:13:::2;:11;:13::i;:60::-;10753:31;::::0;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;10753:31:48;;::::2;::::0;;;;::::2;::::0;::::2;;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;10776:7;;10753:31;;;;::::2;::::0;;::::2;::::0;;::::2;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;:22;:31::i;:::-;-1:-1:-1::0;10827:14:48::2;::::0;::::2;:52:::0;;-1:-1:-1;;10827:52:48::2;::::0;::::2;::::0;;-1:-1:-1;10936:17:48;::::2;::::0;10919:15;;10955::::2;::::0;::::2;::::0;10895:76:::2;::::0;2532:25:62;;;-1:-1:-1;;;;;10936:17:48;;::::2;::::0;10919:15;;::::2;::::0;10908:9;;10895:76:::2;::::0;2520:2:62;2505:18;10895:76:48::2;2386:177:62::0;13927:134:48;2334:13:34;:11;:13::i;:::-;14018:36:48::1;14038:15;14018:19;:36::i;13588:131::-:0;2334:13:34;:11;:13::i;:::-;13677:35:48::1;13696:15;13677:18;:35::i;12250:114::-:0;2334:13:34;:11;:13::i;:::-;12331:26:48::1;12346:10;12331:14;:26::i;17779:153::-:0;17854:4;;17877:19;;;;:8;:19;;;;;:26;;;;;;;;:48;;;;;;;;:::i;:::-;;;;17779:153;-1:-1:-1;;17779:153:48:o;15188:270::-;15263:7;15282:42;15327:15;:13;:15::i;:::-;15373;;15327:63;;-1:-1:-1;;;15327:63:48;;-1:-1:-1;;;;;15327:28:48;;;;;;:63;;15356:7;;15373:15;;;;15327:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15282:108;;15407:44;15425:7;15434:9;:16;;;15407:17;:44::i;:::-;15400:51;15188:270;-1:-1:-1;;;15188:270:48:o;6270:423::-;6357:7;6412:23;:21;:23::i;:::-;6493:193;6545:10;6573:14;;6605:34;6623:15;;6605:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6605:17:48;;-1:-1:-1;;;6605:34:48:i;:::-;6657:15;;6493:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6493:34:48;;-1:-1:-1;;;6493:193:48:i;7382:1483::-;7533:7;7542;7561:17;7581:10;7561:30;;7636:37;7676:35;7694:16;;7676:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7676:17:48;;-1:-1:-1;;;7676:35:48:i;:::-;7636:75;;7721:37;7761:35;7779:16;;7761:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7761:17:48;;-1:-1:-1;;;7761:35:48:i;:::-;7721:75;;7878:54;7905:12;7919;7878:26;:54::i;:::-;8004:23;;8045:24;;;;;8087:33;;;;;8138:23;;8179:24;;;;8221:33;;;;8004:23;;8045:24;;8087:33;;8138:23;7857:421;;;;-1:-1:-1;;;7857:421:48;;;;;13522:25:62;;;;13563:18;;;13556:34;;;;13606:18;;;13599:34;;;;13649:18;;;13642:34;13692:19;;;13685:35;13736:19;;;13729:35;13494:19;;7857:421:48;13235:535:62;7857:421:48;;;;;;;8380:12;8395:80;8430:9;8441:1;8444:12;8458:16;;8395:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8395:34:48;;-1:-1:-1;;;8395:80:48:i;:::-;8380:95;;8485:12;8500:80;8535:9;8546:1;8549:12;8563:16;;8500:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8500:34:48;;-1:-1:-1;;;8500:80:48:i;:::-;8643:14;;;;:8;:14;;;;;;:31;;;;:38;;;8691:14;;;;;;:31;:38;;;8803:25;8485:95;;-1:-1:-1;8485:95:48;;8652:4;;8803:25;;;8847:4;;;;-1:-1:-1;7382:1483:48;-1:-1:-1;;;;;;;;7382:1483:48:o;16923:667::-;17013:7;17104:20;17127:27;17142:11;17127:14;:27::i;:::-;17197:15;;:43;;-1:-1:-1;;;17197:43:48;;17104:50;;-1:-1:-1;17165:29:48;;-1:-1:-1;;;;;17197:15:48;;;;:29;;:43;;17104:50;;17197:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17258:13;;17165:75;;-1:-1:-1;17317:12:48;;-1:-1:-1;;;;;17258:27:48;17250:81;;;;-1:-1:-1;;;17250:81:48;;;;;;;;:::i;:::-;-1:-1:-1;17392:32:48;;;;17362:26;;;;;:62;;;17341:212;;;;-1:-1:-1;;;17341:212:48;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;17341:212:48;8843:248:62;17341:212:48;-1:-1:-1;;17570:13:48;;16923:667;-1:-1:-1;;;16923:667:48:o;15638:252::-;15806:4;15829:54;15856:12;15870;15829:26;:54::i;12548:125::-;2334:13:34;:11;:13::i;:::-;12634:32:48::1;12652:13;12634:17;:32::i;3405:215:34:-:0;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:34;::::1;3485:91;;3562:1;3534:31;;-1:-1:-1::0;;;3534:31:34::1;;;;;;;;:::i;3485:91::-;3585:28;3604:8;3585:18;:28::i;23818:1055:48:-:0;23958:7;24021:42;24066:15;:13;:15::i;:::-;24113;;24066:64;;-1:-1:-1;;;24066:64:48;;-1:-1:-1;;;;;24066:28:48;;;;;;:64;;24095:8;;24113:15;;;;24066:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24243:14;;24021:109;;-1:-1:-1;24190:22:48;;24215:43;;:20;;24243:14;-1:-1:-1;;;24243:14:48;;;;;;24215:27;:43;:::i;:::-;24190:68;-1:-1:-1;24289:17:48;;;;;:51;;;24326:14;24310:12;:30;;24289:51;24387:12;24401:14;24268:158;;;;;;-1:-1:-1;;;24268:158:48;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;24268:158:48;8843:248:62;24268:158:48;;;24594:27;24624:40;24633:12;24647:9;:16;;;24624:8;:40::i;:::-;24706:18;;24594:70;;-1:-1:-1;24674:21:48;;24698:55;;24706:18;;;;;24594:70;;24698:34;:55;:::i;:::-;24764:15;;24796:39;;;;;;9017:25:62;;;9058:18;;;9051:34;;;24796:39:48;;;;;;;;;8990:18:62;;;24796:39:48;;;;-1:-1:-1;;;24764:72:48;;;9051:34:62;;-1:-1:-1;;;;;;24764:15:48;;;;:21;;:72;;24786:8;;24796:39;24764:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24853:13:48;;23818:1055;-1:-1:-1;;;;;;;;;;23818:1055:48:o;5725:94:33:-;5801:11;;5725:94::o;1050:198:7:-;1148:11;;1144:98;;1183:34;;-1:-1:-1;;;1183:34:7;;-1:-1:-1;;;;;16125:32:62;;;1183:34:7;;;16107:51:62;16174:18;;;16167:34;;;1183:20:7;;;;;16080:18:62;;1183:34:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1175:56;;;;-1:-1:-1;;;1175:56:7;;16696:2:62;1175:56:7;;;16678:21:62;16735:1;16715:18;;;16708:29;-1:-1:-1;;;16753:18:62;;;16746:39;16802:18;;1175:56:7;16494:332:62;1175:56:7;1050:198;;;:::o;27961:329:48:-;28074:25;;;;28038:4;;28198:14;;;;;:85;;-1:-1:-1;28246:37:48;28216:19;;;;:8;:19;;;;;:26;;;;;;;;:67;;;;;;;;:::i;:::-;;28191:92;27961:329;-1:-1:-1;;;27961:329:48:o;2658:162:34:-;966:10:36;2717:7:34;:5;:7::i;:::-;-1:-1:-1;;;;;2717:23:34;;2713:101;;966:10:36;2763:40:34;;-1:-1:-1;;;2763:40:34;;;;;;;;:::i;25949:252:48:-;26028:15;:20;26020:83;;;;-1:-1:-1;;;26020:83:48;;;;;;2532:25:62;;2520:2;2505:18;;2386:177;26020:83:48;-1:-1:-1;26113:14:48;:32;;;26160:34;;2532:25:62;;;26160:34:48;;2520:2:62;2505:18;26160:34:48;;;;;;;;25949:252;:::o;22720:408::-;22796:4;22816:30;22837:8;22816:20;:30::i;:::-;22812:288;;;22889:25;;;;22862:24;22961:26;;;:8;:26;;;;;23001:21;;;:63;;23025:39;;23001:21;-1:-1:-1;;23001:63:48;;23025:39;23001:63;;;;;-1:-1:-1;23085:4:48;;22720:408;-1:-1:-1;;;;22720:408:48:o;22812:288::-;-1:-1:-1;23116:5:48;;22720:408;-1:-1:-1;22720:408:48:o;1404:154:7:-;1489:11;;1485:67;;1516:25;;-1:-1:-1;;;1516:25:7;;;;;2532::62;;;-1:-1:-1;;;;;1516:16:7;;;;;2505:18:62;;1516:25:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1485:67;1404:154;;:::o;23211:180:48:-;23332:52;23357:10;23369:14;;23332:13;:11;:13::i;:::-;-1:-1:-1;;;;;23332:24:48;;:52;:24;:52::i;20483:1468::-;20738:37;;-1:-1:-1;;;;;;17033:2:62;17004:15;;;17000:45;20738:37:48;;;16988:58:62;17062:12;;;17055:28;;;20659:7:48;;;;17099:12:62;;20738:37:48;;;;;;;;;;;;20728:48;;;;;;20708:68;;20854:27;20871:9;20854:16;:27::i;:::-;20853:28;20919:9;20845:85;;;;;-1:-1:-1;;;20845:85:48;;;;;;2532:25:62;;2520:2;2505:18;;2386:177;20845:85:48;-1:-1:-1;21006:15:48;;:44;;-1:-1:-1;;;21006:44:48;;20974:29;;-1:-1:-1;;;;;21006:15:48;;:29;;:44;;21036:13;;21006:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21078:13;;20974:76;;-1:-1:-1;21162:13:48;-1:-1:-1;;;;;21109:21:48;;21101:76;;;;-1:-1:-1;;;21101:76:48;;;;;;;;:::i;:::-;;21230:42;21275:15;:13;:15::i;:::-;21321;;21275:63;;-1:-1:-1;;;21275:63:48;;-1:-1:-1;;;;;21275:28:48;;;;;;:63;;21304:7;;21321:15;;;;21275:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21356:16;;21230:108;;-1:-1:-1;21356:16:48;:21;21348:58;;;;-1:-1:-1;;;21348:58:48;;;;;;;;;;;;21442:21;21466:44;21484:7;21493:9;:16;;;21466:17;:44::i;:::-;21542:253;;;;;;;;21563:13;;-1:-1:-1;;;;;21542:253:48;;;;;;;;;;;;;;;;;-1:-1:-1;21542:253:48;;;;21442:68;;-1:-1:-1;21542:253:48;;;21651:27;21542:253;;;;21692:37;21542:253;;21743:15;21542:253;;;;;;;;;;;;;;;-1:-1:-1;21520:19:48;;;:8;:19;;;;;:275;;;;-1:-1:-1;;;;;21520:275:48;;;-1:-1:-1;;;;;;21520:275:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21520:275:48;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;21520:275:48;;;;;;;;;-1:-1:-1;;21520:275:48;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;21520:275:48;;;;;;;;;;;;;;;;;;21845:13;;21811:106;;;17353:25:62;;;-1:-1:-1;;;;;17414:32:62;;;17409:2;17394:18;;17387:60;17463:18;;;17456:34;;;17521:2;17506:18;;17499:34;;;21811:106:48;;;;;;;;21834:9;;21811:106;;17340:3:62;17325:19;21811:106:48;;;;;;;-1:-1:-1;21935:9:48;;20483:1468;-1:-1:-1;;;;;;;;20483:1468:48:o;8737:170:35:-;8870:21;;8737:170::o;1847:127:34:-;6931:20:35;:18;:20::i;:::-;1929:38:34::1;1954:12;1929:24;:38::i;1599:117:59:-:0;6931:20:35;:18;:20::i;:::-;1672:37:59::1;:35;:37::i;25074:215:48:-:0;-1:-1:-1;;;;;25145:25:48;;25137:70;;;;-1:-1:-1;;;25137:70:48;;;;;;;;;;;;25217:10;:24;;-1:-1:-1;;;;;;25217:24:48;-1:-1:-1;;;;;25217:24:48;;;;;;;;25256:26;;;;-1:-1:-1;;25256:26:48;25074:215;:::o;25484:225::-;25560:14;-1:-1:-1;;;;;25560:19:48;25578:1;25560:19;25552:63;;;;-1:-1:-1;;;25552:63:48;;;;;;;;;;;;25625:13;:30;;-1:-1:-1;;;;25625:30:48;-1:-1:-1;;;;;;;;25625:30:48;;;;;;;;;;;;25670:32;;3402:50:62;;;25670:32:48;;3390:2:62;3375:18;25670:32:48;3258:200:62;26449:341:48;26548:19;2795:6;26548:47;;;;;26527:149;;;;-1:-1:-1;;;26527:149:48;;539:10:62;527:23;;;26527:149:48;;;509:42:62;482:18;;26527:149:48;365:192:62;26527:149:48;-1:-1:-1;26686:18:48;:40;;-1:-1:-1;;26686:40:48;;;;;;;;;;26741:42;;509::62;;;26741::48;;497:2:62;482:18;26741:42:48;365:192:62;26971:314:48;27098:35;;;;312:9:31;-1:-1:-1;1823:16:31;27090:98:48;;;;-1:-1:-1;;;27090:98:48;;539:10:62;527:23;;;27090:98:48;;;509:42:62;482:18;;27090:98:48;365:192:62;27090:98:48;-1:-1:-1;27198:14:48;:32;;-1:-1:-1;;27198:32:48;-1:-1:-1;;;27198:32:48;;;;;;;;;;;;;;27245:33;;27263:14;;;509:42:62;;27245:33:48;;497:2:62;482:18;27245:33:48;365:192:62;3513:669:59;3597:7;3775:16;3935:19;;3984:20;;;;;4034:29;;;;;3848:241;;785:89;3848:241;;;17775:25:62;17816:18;;;17809:34;;;;17859:18;;;17852:34;;;;17902:18;;;;17895:34;;;;3848:241:59;;;;;;;;;;17747:19:62;;;3848:241:59;;3813:330;;;;;;-1:-1:-1;;;3662:499:59;;;18198:27:62;18241:11;;;18234:27;;;;18277:12;;;;18270:28;;;;3662:499:59;;;;;;;;;;18314:12:62;;;;3662:499:59;;;3635:540;;;;;;3513:669::o;3774:248:34:-;3847:24;3874:20;:18;:20::i;:::-;3923:8;;-1:-1:-1;;;;;3941:19:34;;;-1:-1:-1;;;;;;3941:19:34;;;;;;3975:40;;3847:47;;-1:-1:-1;3923:8:34;;;;;3975:40;;3904:16;;3975:40;3837:185;;3774:248;:::o;1192:159::-;1313:22;;1192:159::o;22133:402:48:-;22207:4;22227:30;22248:8;22227:20;:30::i;:::-;22223:284;;;22300:25;;;;22273:24;22372:26;;;:8;:26;;;;;22412:21;;;:59;;22436:35;;22412:21;-1:-1:-1;;22412:59:48;;22436:35;22412:59;;27504:268;-1:-1:-1;;;;;27585:30:48;;27577:75;;;;-1:-1:-1;;;27577:75:48;;;;;;;;;;;;27662:15;:52;;-1:-1:-1;;;;;;27662:52:48;-1:-1:-1;;;;;27662:52:48;;;;;;;;27729:36;;;;-1:-1:-1;;27729:36:48;27504:268;:::o;5889:102:33:-;5971:13;;5889:102::o;28796:448:48:-;28886:7;28905:23;28931:15;:13;:15::i;:::-;28983;;28931:69;;-1:-1:-1;;;28931:69:48;;-1:-1:-1;;;;;28931:33:48;;;;;;:69;;28965:8;;28983:15;;;;28931:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;;28905:102;;29017:26;29070:15;;;;;;;;;-1:-1:-1;;;;;29070:15:48;-1:-1:-1;;;;;29070:34:48;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29046:61;;29062:45;;29046:13;:61;:::i;:::-;29017:90;;29117:21;29157:50;29171:15;29188:18;29157:13;:50::i;:::-;29141:66;;:13;:66;:::i;:::-;29117:90;28796:448;-1:-1:-1;;;;;;28796:448:48:o;2320:820:55:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;919:1:55;1205:27;871:2;;1205:27;:::i;:::-;:42;;;;:::i;:::-;1304:35;;774:2;1304:35;:::i;:::-;2464:12;;:38;;;;919:1;1205:27;871:2;;1205:27;:::i;:::-;:42;;;;:::i;:::-;1304:35;;774:2;1304:35;:::i;:::-;2443:150;;;;;;-1:-1:-1;;;2443:150:55;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;2443:150:55;8843:248:62;2443:150:55;;;2631:18;2651:19;2672:28;2728:5;2704:80;;;;;;;;;;;;:::i;:::-;2630:154;;;;;;2909:9;2921:31;2932:5;774:2;2921:10;:31::i;:::-;2909:43;-1:-1:-1;2962:9:55;2974:31;2985:5;1030:33;823:2;774;1030:33;:::i;:::-;2974:10;:31::i;:::-;2962:43;-1:-1:-1;3015:7:55;3025:29;3034:5;871:2;1109:33;871:2;774;1109:33;:::i;:::-;:48;;;;:::i;:::-;3025:8;:29::i;:::-;3072:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3072:61:55;;;;;;;2320:820;-1:-1:-1;;2320:820:55:o;18478:1717:48:-;18685:7;18759:15;18777:35;18799:12;18777:21;:35::i;:::-;18759:53;;18860:42;18905:15;:13;:15::i;:::-;18951;;18905:63;;-1:-1:-1;;;18905:63:48;;-1:-1:-1;;;;;18905:28:48;;;;;;:63;;18934:7;;18951:15;;;;18905:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18986:16;;18860:108;;-1:-1:-1;18986:16:48;:21;18978:58;;;;-1:-1:-1;;;18978:58:48;;;;;;;;;;;;19154:23;;19195:24;;;;;19237:33;;;;;19120:217;;;;;20576:19:62;;;;20611:12;;20604:28;20648:12;;;;20641:28;;;;-1:-1:-1;;;;;;20703:15:62;;;20699:45;;20685:12;;;20678:67;20780:15;;;;20776:45;;;20761:13;;;20754:68;19077:17:48;;20838:13:62;;19120:217:48;;;;;;;;;;;;19097:250;;;;;;19077:270;;19443:27;19460:9;19443:16;:27::i;:::-;19442:28;19508:9;19434:85;;;;;-1:-1:-1;;;19434:85:48;;;;;;2532:25:62;;2520:2;2505:18;;2386:177;19434:85:48;;19555:21;19579:44;19597:7;19606:9;:16;;;19579:17;:44::i;:::-;19655:267;;;;;;;;-1:-1:-1;;;;;19655:267:48;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19655:267:48;;;;;;19781:24;19655:267;;;;;;19819:37;19655:267;;;;;;19870:15;19655:267;;;;;;;;;;19633:19;;;:8;:19;;;;;;;:289;;;;;;;-1:-1:-1;;;;;;19633:289:48;;;;;;;;-1:-1:-1;19633:289:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19655:267;;-1:-1:-1;19655:267:48;;19633:19;;:289;;;-1:-1:-1;;19633:289:48;;-1:-1:-1;19633:289:48;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;19633:289:48;;;;;;;;;-1:-1:-1;;19633:289:48;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;20015:10;-1:-1:-1;;;;;19938:223:48;19994:7;-1:-1:-1;;;;;19938:223:48;19971:9;19938:223;20039:8;20061:12;:33;;;20108:16;20138:13;19938:223;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;20179:9:48;18478:1717;-1:-1:-1;;;;;;;18478:1717:48:o;1805:391:55:-;2006:24;;1978;;1954:4;;1978:52;:140;;;;;2084:13;:34;;;2046:13;:34;;;:72;1978:140;:210;;;;-1:-1:-1;;2163:25:55;;;;;2134;;;:54;;;1805:391::o;2372:700:59:-;2592:151;;;;;;;;2625:23;;2592:151;;;2662:24;;;;2592:151;;;;2700:33;;;;2592:151;;;;;;;2458:7;;;2775:23;2592:151;2775:14;:23::i;:::-;2753:45;;2973:92;2987:11;3017:12;:14;;;3033:12;:14;;;3049:12;:14;;;3000:64;;;;;;;;;21480:19:62;;;21524:2;21515:12;;21508:28;;;;21592:3;21570:16;-1:-1:-1;;;;;;21566:36:62;21561:2;21552:12;;21545:58;21628:2;21619:12;;21299:338;3000:64:59;;;;;;;;;;;;;2973:13;:92::i;:::-;2966:99;2372:700;-1:-1:-1;;;;2372:700:59:o;959:188:31:-;1020:7;1047:13;1058:1;312:9;-1:-1:-1;1823:16:31;;1742:104;1047:13;:30;;;;1064:13;1075:1;312:9;-1:-1:-1;1823:16:31;;1742:104;1064:13;1100:1;1103;1039:67;;;;;;-1:-1:-1;;;1039:67:31;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;1039:67:31;8843:248:62;1039:67:31;-1:-1:-1;312:9:31;;-1:-1:-1;1124:5:31;1128:1;1124;:5;:::i;:::-;1123:17;;;;:::i;2557:104:46:-;2615:7;2645:1;2641;:5;:13;;2653:1;2641:13;;;-1:-1:-1;2649:1:46;;2557:104;-1:-1:-1;2557:104:46:o;598:221:7:-;698:11;;694:119;;733:55;;-1:-1:-1;;;733:55:7;;-1:-1:-1;;;;;22084:32:62;;;733:55:7;;;22066:51:62;773:4:7;22133:18:62;;;22126:60;22202:18;;;22195:34;;;733:24:7;;;;;22039:18:62;;733:55:7;21864:371:62;7084:141:35;7151:17;:15;:17::i;:::-;7146:73;;7191:17;;-1:-1:-1;;;7191:17:35;;;;;;;;;;;1980:235:34;6931:20:35;:18;:20::i;1846:362:59:-;6931:20:35;:18;:20::i;:::-;1971:220:59::1;::::0;;973:108:::1;1971:220;::::0;::::1;22527:25:62::0;1167:27:59::1;22568:18:62::0;;;22561:34;;;;1286:14:59::1;22611:18:62::0;;;22604:34;2104:13:59::1;22654:18:62::0;;;22647:34;2143:4:59::1;22697:19:62::0;;;22690:61;1381:66:59::1;22767:19:62::0;;;22760:35;22499:19;;1971:220:59::1;::::0;;-1:-1:-1;;1971:220:59;;::::1;::::0;;;;;;1948:253;;1971:220:::1;1948:253:::0;;::::1;::::0;1929:16:::1;:272:::0;1846:362::o;1063:105:30:-;1121:7;1152:1;1147;:6;;:14;;1160:1;1147:14;;4048:478:55;4127:7;4184:28;1445:2;4184:6;:28;:::i;:::-;4167:13;;:45;;;;;4271:28;1445:2;4271:6;:28;:::i;:::-;4146:164;;;;;;-1:-1:-1;;;4146:164:55;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;4146:164:55;8843:248:62;4146:164:55;-1:-1:-1;;;4450:30:55;4466:4;4450:30;4444:37;;4048:478::o;3258:668::-;3335:5;3390:26;1391:1;3390:6;:26;:::i;:::-;3373:13;;:43;;;;;3475:26;1391:1;3475:6;:26;:::i;:::-;3352:160;;;;;;-1:-1:-1;;;3352:160:55;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;3352:160:55;8843:248:62;3352:160:55;-1:-1:-1;;;3854:29:55;3870:3;3854:29;3848:36;;3258:668::o;3702:255:44:-;3780:7;3800:17;3819:18;3839:16;3859:27;3870:4;3876:9;3859:10;:27::i;:::-;3799:87;;;;;;3896:28;3908:5;3915:8;3896:11;:28::i;:::-;-1:-1:-1;3941:9:44;;3702:255;-1:-1:-1;;;;3702:255:44:o;8487:120:35:-;8537:4;8560:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8560:40:35;;;;;;-1:-1:-1;8487:120:35:o;2129:766:44:-;2210:7;2219:12;2233:7;2256:9;:16;2276:2;2256:22;2252:637;;2592:4;2577:20;;2571:27;2641:4;2626:20;;2620:27;2698:4;2683:20;;2677:27;2294:9;2669:36;2739:25;2750:4;2669:36;2571:27;2620;2739:10;:25::i;:::-;2732:32;;;;;;;;;;;2252:637;-1:-1:-1;;2860:16:44;;2811:1;;-1:-1:-1;2815:35:44;;2252:637;2129:766;;;;;:::o;7196:532::-;7291:20;7282:5;:29;;;;;;;;:::i;:::-;;7278:444;;7196:532;;:::o;7278:444::-;7387:29;7378:5;:38;;;;;;;;:::i;:::-;;7374:348;;7439:23;;-1:-1:-1;;;7439:23:44;;;;;;;;;;;7374:348;7492:35;7483:5;:44;;;;;;;;:::i;:::-;;7479:243;;7550:46;;-1:-1:-1;;;7550:46:44;;;;;2532:25:62;;;2505:18;;7550:46:44;2386:177:62;7479:243:44;7626:30;7617:5;:39;;;;;;;;:::i;:::-;;7613:109;;7679:32;;-1:-1:-1;;;7679:32:44;;;;;2532:25:62;;;2505:18;;7679:32:44;2386:177:62;5140:1530:44;5266:7;;;-1:-1:-1;;;;;6186:79:44;;6182:164;;;-1:-1:-1;6297:1:44;;-1:-1:-1;6301:30:44;;-1:-1:-1;6333:1:44;6281:54;;6182:164;6457:24;;;6440:14;6457:24;;;;;;;;;23033:25:62;;;23106:4;23094:17;;23074:18;;;23067:45;;;;23128:18;;;23121:34;;;23171:18;;;23164:34;;;6457:24:44;;23005:19:62;;6457:24:44;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6457:24:44;;-1:-1:-1;;6457:24:44;;;-1:-1:-1;;;;;;;6495:20:44;;6491:113;;-1:-1:-1;6547:1:44;;-1:-1:-1;6551:29:44;;-1:-1:-1;6547:1:44;;-1:-1:-1;6531:62:44;;6491:113;6622:6;-1:-1:-1;6630:20:44;;-1:-1:-1;6630:20:44;;-1:-1:-1;5140:1530:44;;;;;;;;;:::o;14:346:62:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;204:23:62;;;324:2;309:18;;;296:32;;-1:-1:-1;14:346:62:o;562:226::-;621:6;674:2;662:9;653:7;649:23;645:32;642:52;;;690:1;687;680:12;642:52;-1:-1:-1;735:23:62;;562:226;-1:-1:-1;562:226:62:o;793:127::-;854:10;849:3;845:20;842:1;835:31;885:4;882:1;875:15;909:4;906:1;899:15;925:144;1010:1;1003:5;1000:12;990:46;;1016:18;;:::i;:::-;1045;;925:144::o;1074:842::-;-1:-1:-1;;;;;1467:32:62;;;1449:51;;1536:32;;1531:2;1516:18;;1509:60;1600:2;1585:18;;1578:34;;;1643:2;1628:18;;1621:34;;;1436:3;1421:19;;1685:1;1674:13;;1664:47;;1691:18;;:::i;:::-;1748:6;1742:3;1731:9;1727:19;1720:35;1764:58;1817:3;1806:9;1802:19;1794:6;1764:58;:::i;:::-;1853:3;1838:19;;1831:35;;;;1897:3;1882:19;1875:35;1074:842;;-1:-1:-1;;;;;;1074:842:62:o;2152:229::-;-1:-1:-1;;;;;2342:32:62;;;;2324:51;;2312:2;2297:18;;2152:229::o;2568:131::-;-1:-1:-1;;;;;2643:31:62;;2633:42;;2623:70;;2689:1;2686;2679:12;2704:367;2772:6;2780;2833:2;2821:9;2812:7;2808:23;2804:32;2801:52;;;2849:1;2846;2839:12;2801:52;2888:9;2875:23;2907:31;2932:5;2907:31;:::i;:::-;2957:5;3035:2;3020:18;;;;3007:32;;-1:-1:-1;;;2704:367:62:o;3463:129::-;-1:-1:-1;;;;;3541:5:62;3537:30;3530:5;3527:41;3517:69;;3582:1;3579;3572:12;3597:121;3682:10;3675:5;3671:22;3664:5;3661:33;3651:61;;3708:1;3705;3698:12;3723:786;3815:6;3823;3831;3839;3847;3900:3;3888:9;3879:7;3875:23;3871:33;3868:53;;;3917:1;3914;3907:12;3868:53;3956:9;3943:23;3975:31;4000:5;3975:31;:::i;:::-;4025:5;-1:-1:-1;4082:2:62;4067:18;;4054:32;4095;4054;4095;:::i;:::-;4146:7;-1:-1:-1;4226:2:62;4211:18;;4198:32;;-1:-1:-1;4308:2:62;4293:18;;4280:32;4321;4280;4321;:::i;:::-;4372:7;-1:-1:-1;4431:3:62;4416:19;;4403:33;4445:32;4403:33;4445:32;:::i;:::-;4496:7;4486:17;;;3723:786;;;;;;;;:::o;4514:350::-;4586:2;4580:9;4628:4;4616:17;;-1:-1:-1;;;;;4648:34:62;;4684:22;;;4645:62;4642:185;;;4749:10;4744:3;4740:20;4737:1;4730:31;4784:4;4781:1;4774:15;4812:4;4809:1;4802:15;4642:185;4843:2;4836:22;4514:350;:::o;4869:344::-;4936:2;4930:9;4978:3;4966:16;;-1:-1:-1;;;;;4997:34:62;;5033:22;;;4994:62;4991:185;;;5098:10;5093:3;5089:20;5086:1;5079:31;5133:4;5130:1;5123:15;5161:4;5158:1;5151:15;5218:349;5290:2;5284:9;5332:3;5320:16;;-1:-1:-1;;;;;5351:34:62;;5387:22;;;5348:62;5345:185;;;5452:10;5447:3;5443:20;5440:1;5433:31;5487:4;5484:1;5477:15;5515:4;5512:1;5505:15;5572:881;5657:6;5717:2;5705:9;5696:7;5692:23;5688:32;5732:2;5729:22;;;5747:1;5744;5737:12;5729:22;-1:-1:-1;5817:2:62;5811:9;5766:1;;5859:2;5847:15;;-1:-1:-1;;;;;5877:34:62;;5913:22;;;5874:62;5871:187;;;-1:-1:-1;;;5959:32:62;;6014:4;6011:1;6004:15;6043:4;5966:2;6032:16;5871:187;6074:2;6067:22;;;6131:23;;6163:21;;6258:2;6243:18;;;6230:32;6278:15;;;6271:32;6362:18;;;6349:32;6397:15;;;6390:32;;;;-1:-1:-1;6170:6:62;;5572:881;-1:-1:-1;;5572:881:62:o;6666:245::-;6724:6;6777:2;6765:9;6756:7;6752:23;6748:32;6745:52;;;6793:1;6790;6783:12;6745:52;6832:9;6819:23;6851:30;6875:5;6851:30;:::i;6916:247::-;6975:6;7028:2;7016:9;7007:7;7003:23;6999:32;6996:52;;;7044:1;7041;7034:12;6996:52;7083:9;7070:23;7102:31;7127:5;7102:31;:::i;7360:347::-;7411:8;7421:6;7475:3;7468:4;7460:6;7456:17;7452:27;7442:55;;7493:1;7490;7483:12;7442:55;-1:-1:-1;7516:20:62;;-1:-1:-1;;;;;7548:30:62;;7545:50;;;7591:1;7588;7581:12;7545:50;7628:4;7620:6;7616:17;7604:29;;7680:3;7673:4;7664:6;7656;7652:19;7648:30;7645:39;7642:59;;;7697:1;7694;7687:12;7642:59;7360:347;;;;;:::o;7712:409::-;7782:6;7790;7843:2;7831:9;7822:7;7818:23;7814:32;7811:52;;;7859:1;7856;7849:12;7811:52;7899:9;7886:23;-1:-1:-1;;;;;7924:6:62;7921:30;7918:50;;;7964:1;7961;7954:12;7918:50;8003:58;8053:7;8044:6;8033:9;8029:22;8003:58;:::i;:::-;8080:8;;7977:84;;-1:-1:-1;7712:409:62;-1:-1:-1;;;;7712:409:62:o;8126:712::-;8216:6;8224;8232;8240;8293:2;8281:9;8272:7;8268:23;8264:32;8261:52;;;8309:1;8306;8299:12;8261:52;8349:9;8336:23;-1:-1:-1;;;;;8374:6:62;8371:30;8368:50;;;8414:1;8411;8404:12;8368:50;8453:58;8503:7;8494:6;8483:9;8479:22;8453:58;:::i;:::-;8530:8;;-1:-1:-1;8427:84:62;-1:-1:-1;;8618:2:62;8603:18;;8590:32;-1:-1:-1;;;;;8634:32:62;;8631:52;;;8679:1;8676;8669:12;8631:52;8718:60;8770:7;8759:8;8748:9;8744:24;8718:60;:::i;:::-;8126:712;;;;-1:-1:-1;8797:8:62;-1:-1:-1;;;;8126:712:62:o;9096:903::-;9148:5;9196:4;9184:9;9179:3;9175:19;9171:30;9168:50;;;9214:1;9211;9204:12;9168:50;9236:22;;:::i;:::-;9303:23;;9335:22;;9430:2;9415:18;;;9402:32;9450:14;;;9443:31;9547:2;9532:18;;;9519:32;9567:14;;;9560:31;9664:2;9649:18;;;9636:32;9684:14;;;9677:31;9781:3;9766:19;;;9753:33;9802:15;;;9795:32;9227:31;-1:-1:-1;9879:3:62;9864:19;;9851:33;9928:4;9915:18;;9903:31;;9893:59;;9948:1;9945;9938:12;9893:59;9979:3;9968:15;;9961:32;9972:5;9096:903;-1:-1:-1;;9096:903:62:o;10004:225::-;10087:6;10140:3;10128:9;10119:7;10115:23;10111:33;10108:53;;;10157:1;10154;10147:12;10108:53;10180:43;10215:7;10204:9;10180:43;:::i;10234:338::-;10350:6;10358;10411:3;10399:9;10390:7;10386:23;10382:33;10379:53;;;10428:1;10425;10418:12;10379:53;10451:43;10486:7;10475:9;10451:43;:::i;:::-;10441:53;;10513;10558:7;10552:3;10541:9;10537:19;10513:53;:::i;:::-;10503:63;;10234:338;;;;;:::o;10577:245::-;10635:6;10688:2;10676:9;10667:7;10663:23;10659:32;10656:52;;;10704:1;10701;10694:12;10656:52;10743:9;10730:23;10762:30;10786:5;10762:30;:::i;10827:217::-;10978:2;10963:18;;10990:48;10967:9;11020:6;10990:48;:::i;11049:127::-;11110:10;11105:3;11101:20;11098:1;11091:31;11141:4;11138:1;11131:15;11165:4;11162:1;11155:15;11181:125;11246:9;;;11267:10;;;11264:36;;;11280:18;;:::i;11525:300::-;-1:-1:-1;;;;;11717:32:62;;;11699:51;;11786:32;;11781:2;11766:18;;11759:60;11687:2;11672:18;;11525:300::o;11830:136::-;11908:13;;11930:30;11908:13;11930:30;:::i;:::-;11830:136;;;:::o;11971:::-;12049:13;;12071:30;12049:13;12071:30;:::i;12112:1118::-;12209:6;12269:3;12257:9;12248:7;12244:23;12240:33;12285:2;12282:22;;;12300:1;12297;12290:12;12282:22;-1:-1:-1;12319:1:62;12342:17;;:::i;:::-;12405:16;;12430:22;;12519:2;12504:18;;;12498:25;12539:14;;;12532:31;12630:2;12615:18;;;12609:25;12650:14;;;12643:31;12706:48;12750:2;12735:18;;12706:48;:::i;:::-;12701:2;12694:5;12690:14;12683:72;12788:49;12832:3;12821:9;12817:19;12788:49;:::i;:::-;12782:3;12775:5;12771:15;12764:74;12871:49;12915:3;12904:9;12900:19;12871:49;:::i;:::-;12865:3;12858:5;12854:15;12847:74;12954:49;12998:3;12987:9;12983:19;12954:49;:::i;:::-;12948:3;12941:5;12937:15;12930:74;13037:49;13081:3;13070:9;13066:19;13037:49;:::i;:::-;13031:3;13020:15;;13013:74;13154:3;13139:19;;;13133:26;13175:15;;;13168:32;;;;-1:-1:-1;13024:5:62;;12112:1118;-1:-1:-1;;12112:1118:62:o;13775:1177::-;13869:6;13929:3;13917:9;13908:7;13904:23;13900:33;13945:2;13942:22;;;13960:1;13957;13950:12;13942:22;-1:-1:-1;13979:1:62;14002:22;;:::i;:::-;14054:9;14048:16;14073:33;14098:7;14073:33;:::i;:::-;14115:22;;14204:2;14189:18;;;14183:25;14224:14;;;14217:31;14315:2;14300:18;;;14294:25;14335:14;;;14328:31;14426:2;14411:18;;;14405:25;14446:14;;;14439:31;14537:3;14522:19;;;14516:26;14558:15;;;14551:32;14650:3;14635:19;;;14629:26;14671:15;;;14664:32;14763:3;14748:19;;;14742:26;14784:15;;;14777:32;14876:3;14861:19;;;14855:26;14897:15;;;14890:32;;;;-1:-1:-1;14122:5:62;;13775:1177;-1:-1:-1;;13775:1177:62:o;15210:399::-;15251:3;15289:5;15283:12;15316:6;15311:3;15304:19;15341:1;15351:139;15365:6;15362:1;15359:13;15351:139;;;15473:4;15458:13;;;15454:24;;15448:31;15428:11;;;15424:22;;15417:63;15380:12;15351:139;;;15355:3;15535:1;15528:4;15519:6;15514:3;15510:16;15506:27;15499:38;15598:4;15591:2;15587:7;15582:2;15574:6;15570:15;15566:29;15561:3;15557:39;15553:50;15546:57;;;15210:399;;;;:::o;15614:314::-;-1:-1:-1;;;;;15789:32:62;;15771:51;;15858:2;15853;15838:18;;15831:30;;;-1:-1:-1;;15878:44:62;;15903:18;;15895:6;15878:44;:::i;16212:277::-;16279:6;16332:2;16320:9;16311:7;16307:23;16303:32;16300:52;;;16348:1;16345;16338:12;16300:52;16380:9;16374:16;16433:5;16426:13;16419:21;16412:5;16409:32;16399:60;;16455:1;16452;16445:12;18337:1105;18439:6;18499:3;18487:9;18478:7;18474:23;18470:33;18515:2;18512:22;;;18530:1;18527;18520:12;18512:22;-1:-1:-1;18600:2:62;18594:9;18549:1;;18642:3;18630:16;;-1:-1:-1;;;;;18661:34:62;;18697:22;;;18658:62;18655:187;;;-1:-1:-1;;;18743:32:62;;18798:4;18795:1;18788:15;18827:4;18750:2;18816:16;18655:187;18858:2;18851:22;;;18915:16;;18940:21;;19028:2;19013:18;;;19007:25;19048:15;;;19041:32;19125:18;;;19119:25;19160:15;;;19153:32;19252:2;19237:18;;;19231:25;19272:15;;;19265:32;19364:3;19349:19;;;19343:26;19385:16;;;19378:33;;;;-1:-1:-1;18947:6:62;;18337:1105;-1:-1:-1;;18337:1105:62:o;19447:249::-;19516:6;19569:2;19557:9;19548:7;19544:23;19540:32;19537:52;;;19585:1;19582;19575:12;19537:52;19617:9;19611:16;19636:30;19660:5;19636:30;:::i;19701:168::-;19774:9;;;19805;;19822:15;;;19816:22;;19802:37;19792:71;;19843:18;;:::i;19874:456::-;19962:6;19970;19978;20031:2;20019:9;20010:7;20006:23;20002:32;19999:52;;;20047:1;20044;20037:12;19999:52;-1:-1:-1;;20092:16:62;;20198:2;20183:18;;20177:25;20294:2;20279:18;;;20273:25;20092:16;;20177:25;;-1:-1:-1;20273:25:62;19874:456;-1:-1:-1;19874:456:62:o;20862:432::-;21093:6;21082:9;21075:25;21136:6;21131:2;21120:9;21116:18;21109:34;21179:3;21174:2;21163:9;21159:18;21152:31;21056:4;21200:45;21240:3;21229:9;21225:19;21217:6;21200:45;:::i;:::-;21192:53;;21281:6;21276:2;21265:9;21261:18;21254:34;20862:432;;;;;;;:::o;21642:217::-;21682:1;21708;21698:132;;21752:10;21747:3;21743:20;21740:1;21733:31;21787:4;21784:1;21777:15;21815:4;21812:1;21805:15;21698:132;-1:-1:-1;21844:9:62;;21642:217::o" + }, + "methodIdentifiers": { + "MAX_FISHERMAN_REWARD_CUT()": "17337b46", + "acceptDispute(bytes32,uint256)": "050b17ad", + "arbitrator()": "6cc6cde1", + "areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))": "d36fc9d4", + "cancelDispute(bytes32)": "1792f194", + "createIndexingDispute(address,bytes32)": "4bc5839a", + "createQueryDispute(bytes)": "c50a77b1", + "createQueryDisputeConflict(bytes,bytes)": "c894222e", + "disputeDeposit()": "29e03ff1", + "disputePeriod()": "5bf31d4d", + "disputes(bytes32)": "11be1997", + "drawDispute(bytes32)": "9334ea52", + "encodeReceipt((bytes32,bytes32,bytes32))": "6369df6b", + "fishermanRewardCut()": "902a4938", + "getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))": "c9747f51", + "getDisputePeriod()": "5aea0ec4", + "getStakeSnapshot(address)": "c133b429", + "getVerifierCut()": "84633713", + "initialize(address,uint64,uint256,uint32,uint32)": "5ed2c96c", + "isDisputeCreated(bytes32)": "be41f384", + "maxSlashingCut()": "0533e1ba", + "owner()": "8da5cb5b", + "rejectDispute(bytes32)": "36167e03", + "renounceOwnership()": "715018a6", + "setArbitrator(address)": "b0eefabe", + "setDisputeDeposit(uint256)": "16972978", + "setDisputePeriod(uint64)": "d76f62d1", + "setFishermanRewardCut(uint32)": "76c993ae", + "setMaxSlashingCut(uint32)": "9f81a7cf", + "setSubgraphService(address)": "93a90a1e", + "subgraphService()": "26058249", + "transferOwnership(address)": "f2fde38b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLength\",\"type\":\"uint256\"}],\"name\":\"AttestationInvalidBytesLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerDisputeAlreadyCreated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IDisputeManager.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"DisputeManagerDisputeNotPending\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerDisputePeriodNotFinished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerDisputePeriodZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"DisputeManagerIndexerNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerInvalidDispute\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"DisputeManagerInvalidDisputeDeposit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"cut\",\"type\":\"uint32\"}],\"name\":\"DisputeManagerInvalidFishermanReward\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxSlashingCut\",\"type\":\"uint32\"}],\"name\":\"DisputeManagerInvalidMaxSlashingCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokensSlash\",\"type\":\"uint256\"}],\"name\":\"DisputeManagerInvalidTokensSlash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"relatedDisputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerMustAcceptRelatedDispute\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"requestCID2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerNonConflictingAttestations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerNonMatchingSubgraphDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerNotArbitrator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerNotFisherman\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerZeroTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"PPMMathInvalidMulPPM\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"}],\"name\":\"ArbitratorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"DisputeDepositSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeDrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId1\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeLinked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"}],\"name\":\"DisputePeriodSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"fishermanRewardCut\",\"type\":\"uint32\"}],\"name\":\"FishermanRewardCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"name\":\"IndexingDisputeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxSlashingCut\",\"type\":\"uint32\"}],\"name\":\"MaxSlashingCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"attestation\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"name\":\"QueryDisputeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"}],\"name\":\"SubgraphServiceSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_FISHERMAN_REWARD_CUT\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"}],\"name\":\"acceptDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation2\",\"type\":\"tuple\"}],\"name\":\"areConflictingAttestations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"cancelDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"}],\"name\":\"createIndexingDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"attestationData\",\"type\":\"bytes\"}],\"name\":\"createQueryDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"attestationData1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"attestationData2\",\"type\":\"bytes\"}],\"name\":\"createQueryDisputeConflict\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputePeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"relatedDisputeId\",\"type\":\"bytes32\"},{\"internalType\":\"enum IDisputeManager.DisputeType\",\"name\":\"disputeType\",\"type\":\"uint8\"},{\"internalType\":\"enum IDisputeManager.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"drawDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"internalType\":\"struct Attestation.Receipt\",\"name\":\"receipt\",\"type\":\"tuple\"}],\"name\":\"encodeReceipt\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fishermanRewardCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"getAttestationIndexer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputePeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getStakeSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"fishermanRewardCut_\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxSlashingCut_\",\"type\":\"uint32\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"isDisputeCreated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSlashingCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"rejectDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"}],\"name\":\"setArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"setDisputeDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"}],\"name\":\"setDisputePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"fishermanRewardCut_\",\"type\":\"uint32\"}],\"name\":\"setFishermanRewardCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxSlashingCut_\",\"type\":\"uint32\"}],\"name\":\"setMaxSlashingCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"}],\"name\":\"setSubgraphService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subgraphService\",\"outputs\":[{\"internalType\":\"contract ISubgraphService\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"params\":{\"a\":\"The first value in the multiplication.\",\"b\":\"The second value in the multiplication.\"}}]},\"events\":{\"ArbitratorSet(address)\":{\"params\":{\"arbitrator\":\"The address of the arbitrator.\"}},\"DisputeAccepted(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`. The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward.\"},\"DisputeCancelled(bytes32,address,address,uint256)\":{\"details\":\"Emitted when a dispute is cancelled by the fisherman. The event emits the amount `tokens` returned to the fisherman.\"},\"DisputeDepositSet(uint256)\":{\"params\":{\"disputeDeposit\":\"The dispute deposit required to create a dispute.\"}},\"DisputeDrawn(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` used as deposit and returned to the fisherman.\"},\"DisputeLinked(bytes32,bytes32)\":{\"details\":\"Emitted when two disputes are in conflict to link them. This event will be emitted after each DisputeCreated event is emitted for each of the individual disputes.\"},\"DisputePeriodSet(uint64)\":{\"params\":{\"disputePeriod\":\"The dispute period in seconds.\"}},\"DisputeRejected(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` burned from the fisherman deposit.\"},\"FishermanRewardCutSet(uint32)\":{\"params\":{\"fishermanRewardCut\":\"The fisherman reward cut.\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"IndexingDisputeCreated(bytes32,address,address,uint256,address,bytes32,uint256)\":{\"details\":\"Emitted when an indexing dispute is created for `allocationId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"MaxSlashingCutSet(uint32)\":{\"params\":{\"maxSlashingCut\":\"The maximum slashing cut that can be set.\"}},\"QueryDisputeCreated(bytes32,address,address,uint256,bytes32,bytes,uint256)\":{\"details\":\"Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted.\"},\"SubgraphServiceSet(address)\":{\"params\":{\"subgraphService\":\"The address of the subgraph service.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptDispute(bytes32,uint256)\":{\"details\":\"Accept a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be accepted\",\"tokensSlash\":\"Amount of tokens to slash from the indexer\"}},\"areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"params\":{\"attestation1\":\"The first attestation\",\"attestation2\":\"The second attestation\"}},\"cancelDispute(bytes32)\":{\"details\":\"Cancel a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be cancelled\"}},\"constructor\":{\"params\":{\"controller\":\"Address of the controller\"}},\"createIndexingDispute(address,bytes32)\":{\"params\":{\"allocationId\":\"The allocation to dispute\",\"poi\":\"The Proof of Indexing (POI) being disputed\"}},\"createQueryDispute(bytes)\":{\"params\":{\"attestationData\":\"Attestation bytes submitted by the fisherman\"}},\"createQueryDisputeConflict(bytes,bytes)\":{\"params\":{\"attestationData1\":\"First attestation data submitted\",\"attestationData2\":\"Second attestation data submitted\"},\"returns\":{\"_0\":\"DisputeId1, DisputeId2\"}},\"drawDispute(bytes32)\":{\"details\":\"Ignore a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be disregarded\"}},\"encodeReceipt((bytes32,bytes32,bytes32))\":{\"details\":\"Return the message hash used to sign the receipt\",\"params\":{\"receipt\":\"Receipt returned by indexer and submitted by fisherman\"},\"returns\":{\"_0\":\"Message hash used to sign the receipt\"}},\"getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"params\":{\"attestation\":\"Attestation\"},\"returns\":{\"_0\":\"indexer address\"}},\"getDisputePeriod()\":{\"returns\":{\"_0\":\"Dispute period in seconds\"}},\"getStakeSnapshot(address)\":{\"params\":{\"indexer\":\"The indexer address\"}},\"getVerifierCut()\":{\"returns\":{\"_0\":\"Verifier cut in percentage (ppm)\"}},\"initialize(address,uint64,uint256,uint32,uint32)\":{\"params\":{\"arbitrator\":\"Arbitrator role\",\"disputeDeposit\":\"Deposit required to create a Dispute\",\"disputePeriod\":\"Dispute period in seconds\",\"fishermanRewardCut_\":\"Percent of slashed funds for fisherman (ppm)\",\"maxSlashingCut_\":\"Maximum percentage of indexer stake that can be slashed (ppm)\"}},\"isDisputeCreated(bytes32)\":{\"details\":\"Return if dispute with Id `disputeId` exists\",\"params\":{\"disputeId\":\"True if dispute already exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"rejectDispute(bytes32)\":{\"details\":\"Reject a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be rejected\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setArbitrator(address)\":{\"details\":\"Update the arbitrator to `_arbitrator`\",\"params\":{\"arbitrator\":\"The address of the arbitration contract or party\"}},\"setDisputeDeposit(uint256)\":{\"details\":\"Update the dispute deposit to `_disputeDeposit` Graph Tokens\",\"params\":{\"disputeDeposit\":\"The dispute deposit in Graph Tokens\"}},\"setDisputePeriod(uint64)\":{\"details\":\"Update the dispute period to `_disputePeriod` in seconds\",\"params\":{\"disputePeriod\":\"Dispute period in seconds\"}},\"setFishermanRewardCut(uint32)\":{\"details\":\"Update the reward percentage to `_percentage`\",\"params\":{\"fishermanRewardCut_\":\"Reward as a percentage of indexer stake\"}},\"setMaxSlashingCut(uint32)\":{\"params\":{\"maxSlashingCut_\":\"Max percentage slashing for disputes\"}},\"setSubgraphService(address)\":{\"details\":\"Update the subgraph service to `_subgraphService`\",\"params\":{\"subgraphService\":\"The address of the subgraph service contract\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"DisputeManager\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"notice\":\"Thrown when no value in a multiplication is in PPM.\"}]},\"events\":{\"ArbitratorSet(address)\":{\"notice\":\"Emitted when arbitrator is set.\"},\"DisputeDepositSet(uint256)\":{\"notice\":\"Emitted when dispute deposit is set.\"},\"DisputePeriodSet(uint64)\":{\"notice\":\"Emitted when dispute period is set.\"},\"FishermanRewardCutSet(uint32)\":{\"notice\":\"Emitted when fisherman reward cut is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"MaxSlashingCutSet(uint32)\":{\"notice\":\"Emitted when max slashing cut is set.\"},\"SubgraphServiceSet(address)\":{\"notice\":\"Emitted when subgraph service is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptDispute(bytes32,uint256)\":{\"notice\":\"The arbitrator accepts a dispute as being valid. This function will revert if the indexer is not slashable, whether because it does not have any stake available or the slashing percentage is configured to be zero. In those cases a dispute must be resolved using drawDispute or rejectDispute.\"},\"arbitrator()\":{\"notice\":\"The arbitrator is solely in control of arbitrating disputes\"},\"areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"notice\":\"Checks if two attestations are conflicting.\"},\"cancelDispute(bytes32)\":{\"notice\":\"Once the dispute period ends, if the dispute status remains Pending, the fisherman can cancel the dispute and get back their initial deposit.\"},\"constructor\":{\"notice\":\"Contract constructor\"},\"createIndexingDispute(address,bytes32)\":{\"notice\":\"Create an indexing dispute for the arbitrator to resolve. The disputes are created in reference to an allocationId and specifically a POI for that allocation. This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens. Requirements: - fisherman must have previously approved this contract to pull `disputeDeposit` amount of tokens from their balance.\"},\"createQueryDispute(bytes)\":{\"notice\":\"Create a query dispute for the arbitrator to resolve. This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens. * Requirements: - fisherman must have previously approved this contract to pull `disputeDeposit` amount of tokens from their balance.\"},\"createQueryDisputeConflict(bytes,bytes)\":{\"notice\":\"Create query disputes for two conflicting attestations. A conflicting attestation is a proof presented by two different indexers where for the same request on a subgraph the response is different. For this type of dispute the fisherman is not required to present a deposit as one of the attestation is considered to be right. Two linked disputes will be created and if the arbitrator resolve one, the other one will be automatically resolved.\"},\"disputeDeposit()\":{\"notice\":\"Deposit required to create a Dispute\"},\"disputePeriod()\":{\"notice\":\"dispute period in seconds\"},\"disputes(bytes32)\":{\"notice\":\"List of disputes created\"},\"drawDispute(bytes32)\":{\"notice\":\"The arbitrator draws dispute.\"},\"encodeReceipt((bytes32,bytes32,bytes32))\":{\"notice\":\"Get the message hash that a indexer used to sign the receipt. Encodes a receipt using a domain separator, as described on https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\"},\"fishermanRewardCut()\":{\"notice\":\"Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM.\"},\"getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"notice\":\"Returns the indexer that signed an attestation.\"},\"getDisputePeriod()\":{\"notice\":\"Get the dispute period.\"},\"getStakeSnapshot(address)\":{\"notice\":\"Get the stake snapshot for an indexer.\"},\"getVerifierCut()\":{\"notice\":\"Get the verifier cut.\"},\"initialize(address,uint64,uint256,uint32,uint32)\":{\"notice\":\"Initialize this contract.\"},\"isDisputeCreated(bytes32)\":{\"notice\":\"Return whether a dispute exists or not.\"},\"maxSlashingCut()\":{\"notice\":\"Maximum percentage of indexer stake that can be slashed on a dispute. In PPM.\"},\"rejectDispute(bytes32)\":{\"notice\":\"The arbitrator rejects a dispute as being invalid.\"},\"setArbitrator(address)\":{\"notice\":\"Set the arbitrator address.\"},\"setDisputeDeposit(uint256)\":{\"notice\":\"Set the dispute deposit required to create a dispute.\"},\"setDisputePeriod(uint64)\":{\"notice\":\"Set the dispute period.\"},\"setFishermanRewardCut(uint32)\":{\"notice\":\"Set the percent reward that the fisherman gets when slashing occurs.\"},\"setMaxSlashingCut(uint32)\":{\"notice\":\"Set the maximum percentage that can be used for slashing indexers.\"},\"setSubgraphService(address)\":{\"notice\":\"Set the subgraph service address.\"},\"subgraphService()\":{\"notice\":\"The Subgraph Service contract address\"}},\"notice\":\"Provides a way to permissionlessly create disputes for incorrect behavior in the Subgraph Service. There are two types of disputes that can be created: Query disputes and Indexing disputes. Query Disputes: Graph nodes receive queries and return responses with signed receipts called attestations. An attestation can be disputed if the consumer thinks the query response was invalid. Indexers use the derived private key for an allocation to sign attestations. Indexing Disputes: Indexers present a Proof of Indexing (POI) when they close allocations to prove they were indexing a subgraph. The Staking contract emits that proof with the format keccak256(indexer.address, POI). Any fisherman can dispute the validity of a POI by submitting a dispute to this contract along with a deposit. Arbitration: Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated to a EOA or DAO.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/DisputeManager.sol\":\"DisputeManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":{\"keccak256\":\"0x7bd336193785ed6f09a3bd847f9208f64aa9b87ad67c40838d00fec41bb153d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d96d83cdb9bbb567e4eafac8bdef3ff6bdaf426338baf76bae277c11afb33cee\",\"dweb:/ipfs/QmNjr4PiJ76Wc5mFqa9H88BjsEMrUfy1jiftNHYTgd6Mp5\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/MathUtils.sol\":{\"keccak256\":\"0xfb077625fde8c7bb17ba4674956099673bd144546d90d2a91a8463d17b625b0e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6ed606a9a5652778589ae03495af5c344fed262157dd372d8c0e1757c80713b0\",\"dweb:/ipfs/QmTePK9JT74GsWj4rxL2H7hUyuM3LeMrnojLvehU8yiD5r\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/DisputeManager.sol\":{\"keccak256\":\"0x4d8936e9370d025aedeaac856c11dc15f6fbd43e59a713d6a3b679aea5588d05\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3696d5f3084bf697cf27a78e1f8dd9b451a63ee853946c8cb7916d91ae7180cb\",\"dweb:/ipfs/QmSJV3D56pfMEa47Hxet2nu6PpYazHojXE1DHvuzEfVbn6\"]},\"contracts/DisputeManagerStorage.sol\":{\"keccak256\":\"0x0b9007663146b3feed1e671a5a28b3c99aeba2c29b0aefa7be39c7dad4347e05\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8019924a92649c8ac72ba83c08869dbce2a67f969f4dfb02113a1713bce6af6c\",\"dweb:/ipfs/QmUGCnj8cB3ccQAVXuG1mM1h7eGiD66zMHn9NaLbq7atz1\"]},\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/AttestationManager.sol\":{\"keccak256\":\"0xb50da53c59205cf06bec2263238d89d6df6d72522a1e555bfe2c3ca8558c8f88\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://18241c6b621d825234a62dc08a7f7e87b2e3e23caa5f618a74a1c48cde46052e\",\"dweb:/ipfs/QmWvo16uoasqBMVVLr557gyMsCq2Nts7EakgkdwJZuRHiF\"]},\"contracts/utilities/AttestationManagerStorage.sol\":{\"keccak256\":\"0xc14058d90b97806df0f43acfce6bc984c17ded00511ea9d7dd559d897fed7cf7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://df851043d7e2b5f0eaa611141cbc2b594c3ece4ba4e7f040215095d7bdef7ea0\",\"dweb:/ipfs/Qmf5PBxRP4dCtPonNdeoHrgmCYZDogzx4vMEsLM3h5JQDs\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 13231, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "_domainSeparator", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 13236, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 9448, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "subgraphService", + "offset": 0, + "slot": "51", + "type": "t_contract(ISubgraphService)11280" + }, + { + "astId": 9451, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "arbitrator", + "offset": 0, + "slot": "52", + "type": "t_address" + }, + { + "astId": 9454, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "disputePeriod", + "offset": 20, + "slot": "52", + "type": "t_uint64" + }, + { + "astId": 9457, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "disputeDeposit", + "offset": 0, + "slot": "53", + "type": "t_uint256" + }, + { + "astId": 9460, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "fishermanRewardCut", + "offset": 0, + "slot": "54", + "type": "t_uint32" + }, + { + "astId": 9463, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "maxSlashingCut", + "offset": 4, + "slot": "54", + "type": "t_uint32" + }, + { + "astId": 9469, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "disputes", + "offset": 0, + "slot": "55", + "type": "t_mapping(t_bytes32,t_struct(Dispute)10738_storage)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(ISubgraphService)11280": { + "encoding": "inplace", + "label": "contract ISubgraphService", + "numberOfBytes": "20" + }, + "t_enum(DisputeStatus)10718": { + "encoding": "inplace", + "label": "enum IDisputeManager.DisputeStatus", + "numberOfBytes": "1" + }, + "t_enum(DisputeType)10710": { + "encoding": "inplace", + "label": "enum IDisputeManager.DisputeType", + "numberOfBytes": "1" + }, + "t_mapping(t_bytes32,t_struct(Dispute)10738_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct IDisputeManager.Dispute)", + "numberOfBytes": "32", + "value": "t_struct(Dispute)10738_storage" + }, + "t_struct(Dispute)10738_storage": { + "encoding": "inplace", + "label": "struct IDisputeManager.Dispute", + "members": [ + { + "astId": 10721, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "indexer", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 10723, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "fisherman", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 10725, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "deposit", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 10727, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "relatedDisputeId", + "offset": 0, + "slot": "3", + "type": "t_bytes32" + }, + { + "astId": 10730, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "disputeType", + "offset": 0, + "slot": "4", + "type": "t_enum(DisputeType)10710" + }, + { + "astId": 10733, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "status", + "offset": 1, + "slot": "4", + "type": "t_enum(DisputeStatus)10718" + }, + { + "astId": 10735, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "createdAt", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 10737, + "contract": "contracts/DisputeManager.sol:DisputeManager", + "label": "stakeSnapshot", + "offset": 0, + "slot": "6", + "type": "t_uint256" + } + ], + "numberOfBytes": "224" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + } + } + }, + "contracts/DisputeManagerStorage.sol": { + "DisputeManagerV1Storage": { + "abi": [ + { + "inputs": [], + "name": "arbitrator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "disputeDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "disputePeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "disputes", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deposit", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "relatedDisputeId", + "type": "bytes32" + }, + { + "internalType": "enum IDisputeManager.DisputeType", + "name": "disputeType", + "type": "uint8" + }, + { + "internalType": "enum IDisputeManager.DisputeStatus", + "name": "status", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fishermanRewardCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxSlashingCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "subgraphService", + "outputs": [ + { + "internalType": "contract ISubgraphService", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "arbitrator()": "6cc6cde1", + "disputeDeposit()": "29e03ff1", + "disputePeriod()": "5bf31d4d", + "disputes(bytes32)": "11be1997", + "fishermanRewardCut()": "902a4938", + "maxSlashingCut()": "0533e1ba", + "subgraphService()": "26058249" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputePeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"relatedDisputeId\",\"type\":\"bytes32\"},{\"internalType\":\"enum IDisputeManager.DisputeType\",\"name\":\"disputeType\",\"type\":\"uint8\"},{\"internalType\":\"enum IDisputeManager.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fishermanRewardCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSlashingCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subgraphService\",\"outputs\":[{\"internalType\":\"contract ISubgraphService\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"arbitrator()\":{\"notice\":\"The arbitrator is solely in control of arbitrating disputes\"},\"disputeDeposit()\":{\"notice\":\"Deposit required to create a Dispute\"},\"disputePeriod()\":{\"notice\":\"dispute period in seconds\"},\"disputes(bytes32)\":{\"notice\":\"List of disputes created\"},\"fishermanRewardCut()\":{\"notice\":\"Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM.\"},\"maxSlashingCut()\":{\"notice\":\"Maximum percentage of indexer stake that can be slashed on a dispute. In PPM.\"},\"subgraphService()\":{\"notice\":\"The Subgraph Service contract address\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/DisputeManagerStorage.sol\":\"DisputeManagerV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/DisputeManagerStorage.sol\":{\"keccak256\":\"0x0b9007663146b3feed1e671a5a28b3c99aeba2c29b0aefa7be39c7dad4347e05\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8019924a92649c8ac72ba83c08869dbce2a67f969f4dfb02113a1713bce6af6c\",\"dweb:/ipfs/QmUGCnj8cB3ccQAVXuG1mM1h7eGiD66zMHn9NaLbq7atz1\"]},\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 9448, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "subgraphService", + "offset": 0, + "slot": "0", + "type": "t_contract(ISubgraphService)11280" + }, + { + "astId": 9451, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "arbitrator", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 9454, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "disputePeriod", + "offset": 20, + "slot": "1", + "type": "t_uint64" + }, + { + "astId": 9457, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "disputeDeposit", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 9460, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "fishermanRewardCut", + "offset": 0, + "slot": "3", + "type": "t_uint32" + }, + { + "astId": 9463, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "maxSlashingCut", + "offset": 4, + "slot": "3", + "type": "t_uint32" + }, + { + "astId": 9469, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "disputes", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_bytes32,t_struct(Dispute)10738_storage)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(ISubgraphService)11280": { + "encoding": "inplace", + "label": "contract ISubgraphService", + "numberOfBytes": "20" + }, + "t_enum(DisputeStatus)10718": { + "encoding": "inplace", + "label": "enum IDisputeManager.DisputeStatus", + "numberOfBytes": "1" + }, + "t_enum(DisputeType)10710": { + "encoding": "inplace", + "label": "enum IDisputeManager.DisputeType", + "numberOfBytes": "1" + }, + "t_mapping(t_bytes32,t_struct(Dispute)10738_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct IDisputeManager.Dispute)", + "numberOfBytes": "32", + "value": "t_struct(Dispute)10738_storage" + }, + "t_struct(Dispute)10738_storage": { + "encoding": "inplace", + "label": "struct IDisputeManager.Dispute", + "members": [ + { + "astId": 10721, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "indexer", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 10723, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "fisherman", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 10725, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "deposit", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 10727, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "relatedDisputeId", + "offset": 0, + "slot": "3", + "type": "t_bytes32" + }, + { + "astId": 10730, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "disputeType", + "offset": 0, + "slot": "4", + "type": "t_enum(DisputeType)10710" + }, + { + "astId": 10733, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "status", + "offset": 1, + "slot": "4", + "type": "t_enum(DisputeStatus)10718" + }, + { + "astId": 10735, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "createdAt", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 10737, + "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", + "label": "stakeSnapshot", + "offset": 0, + "slot": "6", + "type": "t_uint256" + } + ], + "numberOfBytes": "224" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + } + } + }, + "contracts/SubgraphService.sol": { + "SubgraphService": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "internalType": "address", + "name": "disputeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "tapCollector", + "type": "address" + }, + { + "internalType": "address", + "name": "curation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + } + ], + "name": "AllocationClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationManagerAllocationClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationManagerAllocationSameSize", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationManagerInvalidAllocationProof", + "type": "error" + }, + { + "inputs": [], + "name": "AllocationManagerInvalidZeroAllocationId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "DataServiceFeesClaimNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "DataServiceFeesZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "DataServicePausableNotPauseGuardian", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "disputeManager", + "type": "address" + } + ], + "name": "DirectoryNotDisputeManager", + "type": "error" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [], + "name": "EnforcedPause", + "type": "error" + }, + { + "inputs": [], + "name": "ExpectedPause", + "type": "error" + }, + { + "inputs": [], + "name": "FailedInnerCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "LegacyAllocationAlreadyMigrated", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "LegacyAllocationExists", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListEmptyList", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidIterations", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListInvalidZeroId", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedListMaxElementsExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "b", + "type": "uint256" + } + ], + "name": "PPMMathInvalidMulPPM", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionManagerInvalidValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "ProvisionManagerNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionManagerProvisionNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokensAvailable", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensRequired", + "type": "uint256" + } + ], + "name": "ProvisionTrackerInsufficientTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceAllocationIsAltruistic", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceAllocationNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceCannotForceCloseAllocation", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceEmptyGeohash", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceEmptyUrl", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "SubgraphServiceInconsistentCollection", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceIndexerAlreadyRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "providedIndexer", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedIndexer", + "type": "address" + } + ], + "name": "SubgraphServiceIndexerMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "SubgraphServiceIndexerNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "SubgraphServiceInvalidCurationCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "SubgraphServiceInvalidPaymentType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ravIndexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationIndexer", + "type": "address" + } + ], + "name": "SubgraphServiceInvalidRAV", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "oldTokens", + "type": "uint256" + } + ], + "name": "AllocationResized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "CurationCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "ratio", + "type": "uint32" + } + ], + "name": "DelegationRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensIndexerRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "IndexingRewardsCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "LegacyAllocationMigrated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxPOIStaleness", + "type": "uint256" + } + ], + "name": "MaxPOIStalenessSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "PauseGuardianSet", + "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": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "name": "ProvisionTokensRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensCollected", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensCurators", + "type": "uint256" + } + ], + "name": "QueryFeesCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "rewardsDestination", + "type": "address" + } + ], + "name": "RewardsDestinationSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unlockTimestamp", + "type": "uint256" + } + ], + "name": "StakeClaimLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + } + ], + "name": "StakeClaimReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "claimsCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReleased", + "type": "uint256" + } + ], + "name": "StakeClaimsReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "StakeToFeesRatioSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "subgraphService", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "disputeManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "tapCollector", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "curation", + "type": "address" + } + ], + "name": "SubgraphServiceDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "min", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "max", + "type": "uint64" + } + ], + "name": "ThawingPeriodRangeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "min", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "max", + "type": "uint32" + } + ], + "name": "VerifierCutRangeSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "allocationProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "allocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPOIPresentedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "claims", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nextClaim", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "claimsLists", + "outputs": [ + { + "internalType": "bytes32", + "name": "head", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tail", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "curationFeesCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "encodeAllocationProof", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "feesProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "forceCloseAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPOIPresentedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "internalType": "struct Allocation.State", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocationData", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getLegacyAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "internalType": "struct LegacyAllocation.State", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "getSubgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "indexers", + "outputs": [ + { + "internalType": "uint256", + "name": "registeredAt", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "geoHash", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "minimumProvisionTokens", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "maximumDelegationRatio", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "stakeToFeesRatio", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "isActiveAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "isOverAllocated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "isStaleAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "legacyAllocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxPOIStaleness", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maximumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentID", + "type": "bytes32" + } + ], + "name": "migrateLegacyAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "minimumProvisionTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumThawingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimumVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + } + ], + "name": "pauseGuardians", + "outputs": [ + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numClaimsToRelease", + "type": "uint256" + } + ], + "name": "releaseStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "resizeAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "rewardsDestination", + "outputs": [ + { + "internalType": "address", + "name": "destination", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "setCurationCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "setDelegationRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxPOIStaleness", + "type": "uint256" + } + ], + "name": "setMaxPOIStaleness", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "minimumProvisionTokens", + "type": "uint256" + } + ], + "name": "setMinimumProvisionTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rewardsDestination", + "type": "address" + } + ], + "name": "setRewardsDestination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeToFeesRatio_", + "type": "uint256" + } + ], + "name": "setStakeToFeesRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeToFeesRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "subgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": { + "@_13349": { + "entryPoint": null, + "id": 13349, + "parameterSlots": 4, + "returnSlots": 0 + }, + "@_4520": { + "entryPoint": null, + "id": 4520, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_629": { + "entryPoint": null, + "id": 629, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_9595": { + "entryPoint": null, + "id": 9595, + "parameterSlots": 4, + "returnSlots": 0 + }, + "@_disableInitializers_5070": { + "entryPoint": 1139, + "id": 5070, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_getContractFromController_4652": { + "entryPoint": 965, + "id": 4652, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_getInitializableStorage_5101": { + "entryPoint": null, + "id": 5101, + "parameterSlots": 0, + "returnSlots": 1 + }, + "abi_decode_address_fromMemory": { + "entryPoint": 1317, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address_fromMemory": { + "entryPoint": 1429, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": { + "entryPoint": 1345, + "id": null, + "parameterSlots": 2, + "returnSlots": 4 + }, + "abi_encode_tuple_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 8, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 1463, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:3424:62", + "nodeType": "YulBlock", + "src": "0:3424:62", + "statements": [ + { + "nativeSrc": "6:3:62", + "nodeType": "YulBlock", + "src": "6:3:62", + "statements": [] + }, + { + "body": { + "nativeSrc": "74:117:62", + "nodeType": "YulBlock", + "src": "74:117:62", + "statements": [ + { + "nativeSrc": "84:22:62", + "nodeType": "YulAssignment", + "src": "84:22:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "99:6:62", + "nodeType": "YulIdentifier", + "src": "99:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "93:5:62", + "nodeType": "YulIdentifier", + "src": "93:5:62" + }, + "nativeSrc": "93:13:62", + "nodeType": "YulFunctionCall", + "src": "93:13:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "84:5:62", + "nodeType": "YulIdentifier", + "src": "84:5:62" + } + ] + }, + { + "body": { + "nativeSrc": "169:16:62", + "nodeType": "YulBlock", + "src": "169:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "178:1:62", + "nodeType": "YulLiteral", + "src": "178:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "181:1:62", + "nodeType": "YulLiteral", + "src": "181:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "171:6:62", + "nodeType": "YulIdentifier", + "src": "171:6:62" + }, + "nativeSrc": "171:12:62", + "nodeType": "YulFunctionCall", + "src": "171:12:62" + }, + "nativeSrc": "171:12:62", + "nodeType": "YulExpressionStatement", + "src": "171:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "128:5:62", + "nodeType": "YulIdentifier", + "src": "128:5:62" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "139:5:62", + "nodeType": "YulIdentifier", + "src": "139:5:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "154:3:62", + "nodeType": "YulLiteral", + "src": "154:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "159:1:62", + "nodeType": "YulLiteral", + "src": "159:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "150:3:62", + "nodeType": "YulIdentifier", + "src": "150:3:62" + }, + "nativeSrc": "150:11:62", + "nodeType": "YulFunctionCall", + "src": "150:11:62" + }, + { + "kind": "number", + "nativeSrc": "163:1:62", + "nodeType": "YulLiteral", + "src": "163:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "146:3:62", + "nodeType": "YulIdentifier", + "src": "146:3:62" + }, + "nativeSrc": "146:19:62", + "nodeType": "YulFunctionCall", + "src": "146:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "135:3:62", + "nodeType": "YulIdentifier", + "src": "135:3:62" + }, + "nativeSrc": "135:31:62", + "nodeType": "YulFunctionCall", + "src": "135:31:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "125:2:62", + "nodeType": "YulIdentifier", + "src": "125:2:62" + }, + "nativeSrc": "125:42:62", + "nodeType": "YulFunctionCall", + "src": "125:42:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "118:6:62", + "nodeType": "YulIdentifier", + "src": "118:6:62" + }, + "nativeSrc": "118:50:62", + "nodeType": "YulFunctionCall", + "src": "118:50:62" + }, + "nativeSrc": "115:70:62", + "nodeType": "YulIf", + "src": "115:70:62" + } + ] + }, + "name": "abi_decode_address_fromMemory", + "nativeSrc": "14:177:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "53:6:62", + "nodeType": "YulTypedName", + "src": "53:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "64:5:62", + "nodeType": "YulTypedName", + "src": "64:5:62", + "type": "" + } + ], + "src": "14:177:62" + }, + { + "body": { + "nativeSrc": "328:332:62", + "nodeType": "YulBlock", + "src": "328:332:62", + "statements": [ + { + "body": { + "nativeSrc": "375:16:62", + "nodeType": "YulBlock", + "src": "375:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "384:1:62", + "nodeType": "YulLiteral", + "src": "384:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "387:1:62", + "nodeType": "YulLiteral", + "src": "387:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "377:6:62", + "nodeType": "YulIdentifier", + "src": "377:6:62" + }, + "nativeSrc": "377:12:62", + "nodeType": "YulFunctionCall", + "src": "377:12:62" + }, + "nativeSrc": "377:12:62", + "nodeType": "YulExpressionStatement", + "src": "377:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "349:7:62", + "nodeType": "YulIdentifier", + "src": "349:7:62" + }, + { + "name": "headStart", + "nativeSrc": "358:9:62", + "nodeType": "YulIdentifier", + "src": "358:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "345:3:62", + "nodeType": "YulIdentifier", + "src": "345:3:62" + }, + "nativeSrc": "345:23:62", + "nodeType": "YulFunctionCall", + "src": "345:23:62" + }, + { + "kind": "number", + "nativeSrc": "370:3:62", + "nodeType": "YulLiteral", + "src": "370:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "341:3:62", + "nodeType": "YulIdentifier", + "src": "341:3:62" + }, + "nativeSrc": "341:33:62", + "nodeType": "YulFunctionCall", + "src": "341:33:62" + }, + "nativeSrc": "338:53:62", + "nodeType": "YulIf", + "src": "338:53:62" + }, + { + "nativeSrc": "400:50:62", + "nodeType": "YulAssignment", + "src": "400:50:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "440:9:62", + "nodeType": "YulIdentifier", + "src": "440:9:62" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "410:29:62", + "nodeType": "YulIdentifier", + "src": "410:29:62" + }, + "nativeSrc": "410:40:62", + "nodeType": "YulFunctionCall", + "src": "410:40:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "400:6:62", + "nodeType": "YulIdentifier", + "src": "400:6:62" + } + ] + }, + { + "nativeSrc": "459:59:62", + "nodeType": "YulAssignment", + "src": "459:59:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "503:9:62", + "nodeType": "YulIdentifier", + "src": "503:9:62" + }, + { + "kind": "number", + "nativeSrc": "514:2:62", + "nodeType": "YulLiteral", + "src": "514:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "499:3:62", + "nodeType": "YulIdentifier", + "src": "499:3:62" + }, + "nativeSrc": "499:18:62", + "nodeType": "YulFunctionCall", + "src": "499:18:62" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "469:29:62", + "nodeType": "YulIdentifier", + "src": "469:29:62" + }, + "nativeSrc": "469:49:62", + "nodeType": "YulFunctionCall", + "src": "469:49:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "459:6:62", + "nodeType": "YulIdentifier", + "src": "459:6:62" + } + ] + }, + { + "nativeSrc": "527:59:62", + "nodeType": "YulAssignment", + "src": "527:59:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "571:9:62", + "nodeType": "YulIdentifier", + "src": "571:9:62" + }, + { + "kind": "number", + "nativeSrc": "582:2:62", + "nodeType": "YulLiteral", + "src": "582:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "567:3:62", + "nodeType": "YulIdentifier", + "src": "567:3:62" + }, + "nativeSrc": "567:18:62", + "nodeType": "YulFunctionCall", + "src": "567:18:62" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "537:29:62", + "nodeType": "YulIdentifier", + "src": "537:29:62" + }, + "nativeSrc": "537:49:62", + "nodeType": "YulFunctionCall", + "src": "537:49:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "527:6:62", + "nodeType": "YulIdentifier", + "src": "527:6:62" + } + ] + }, + { + "nativeSrc": "595:59:62", + "nodeType": "YulAssignment", + "src": "595:59:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "639:9:62", + "nodeType": "YulIdentifier", + "src": "639:9:62" + }, + { + "kind": "number", + "nativeSrc": "650:2:62", + "nodeType": "YulLiteral", + "src": "650:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "635:3:62", + "nodeType": "YulIdentifier", + "src": "635:3:62" + }, + "nativeSrc": "635:18:62", + "nodeType": "YulFunctionCall", + "src": "635:18:62" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "605:29:62", + "nodeType": "YulIdentifier", + "src": "605:29:62" + }, + "nativeSrc": "605:49:62", + "nodeType": "YulFunctionCall", + "src": "605:49:62" + }, + "variableNames": [ + { + "name": "value3", + "nativeSrc": "595:6:62", + "nodeType": "YulIdentifier", + "src": "595:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory", + "nativeSrc": "196:464:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "270:9:62", + "nodeType": "YulTypedName", + "src": "270:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "281:7:62", + "nodeType": "YulTypedName", + "src": "281:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "293:6:62", + "nodeType": "YulTypedName", + "src": "293:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "301:6:62", + "nodeType": "YulTypedName", + "src": "301:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "309:6:62", + "nodeType": "YulTypedName", + "src": "309:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "317:6:62", + "nodeType": "YulTypedName", + "src": "317:6:62", + "type": "" + } + ], + "src": "196:464:62" + }, + { + "body": { + "nativeSrc": "838:160:62", + "nodeType": "YulBlock", + "src": "838:160:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "855:9:62", + "nodeType": "YulIdentifier", + "src": "855:9:62" + }, + { + "kind": "number", + "nativeSrc": "866:2:62", + "nodeType": "YulLiteral", + "src": "866:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "848:6:62", + "nodeType": "YulIdentifier", + "src": "848:6:62" + }, + "nativeSrc": "848:21:62", + "nodeType": "YulFunctionCall", + "src": "848:21:62" + }, + "nativeSrc": "848:21:62", + "nodeType": "YulExpressionStatement", + "src": "848:21:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "889:9:62", + "nodeType": "YulIdentifier", + "src": "889:9:62" + }, + { + "kind": "number", + "nativeSrc": "900:2:62", + "nodeType": "YulLiteral", + "src": "900:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "885:3:62", + "nodeType": "YulIdentifier", + "src": "885:3:62" + }, + "nativeSrc": "885:18:62", + "nodeType": "YulFunctionCall", + "src": "885:18:62" + }, + { + "kind": "number", + "nativeSrc": "905:2:62", + "nodeType": "YulLiteral", + "src": "905:2:62", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "878:6:62", + "nodeType": "YulIdentifier", + "src": "878:6:62" + }, + "nativeSrc": "878:30:62", + "nodeType": "YulFunctionCall", + "src": "878:30:62" + }, + "nativeSrc": "878:30:62", + "nodeType": "YulExpressionStatement", + "src": "878:30:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "928:9:62", + "nodeType": "YulIdentifier", + "src": "928:9:62" + }, + { + "kind": "number", + "nativeSrc": "939:2:62", + "nodeType": "YulLiteral", + "src": "939:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "924:3:62", + "nodeType": "YulIdentifier", + "src": "924:3:62" + }, + "nativeSrc": "924:18:62", + "nodeType": "YulFunctionCall", + "src": "924:18:62" + }, + { + "hexValue": "436f6e74726f6c6c6572", + "kind": "string", + "nativeSrc": "944:12:62", + "nodeType": "YulLiteral", + "src": "944:12:62", + "type": "", + "value": "Controller" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "917:6:62", + "nodeType": "YulIdentifier", + "src": "917:6:62" + }, + "nativeSrc": "917:40:62", + "nodeType": "YulFunctionCall", + "src": "917:40:62" + }, + "nativeSrc": "917:40:62", + "nodeType": "YulExpressionStatement", + "src": "917:40:62" + }, + { + "nativeSrc": "966:26:62", + "nodeType": "YulAssignment", + "src": "966:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "978:9:62", + "nodeType": "YulIdentifier", + "src": "978:9:62" + }, + { + "kind": "number", + "nativeSrc": "989:2:62", + "nodeType": "YulLiteral", + "src": "989:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "974:3:62", + "nodeType": "YulIdentifier", + "src": "974:3:62" + }, + "nativeSrc": "974:18:62", + "nodeType": "YulFunctionCall", + "src": "974:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "966:4:62", + "nodeType": "YulIdentifier", + "src": "966:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "665:333:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "815:9:62", + "nodeType": "YulTypedName", + "src": "815:9:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "829:4:62", + "nodeType": "YulTypedName", + "src": "829:4:62", + "type": "" + } + ], + "src": "665:333:62" + }, + { + "body": { + "nativeSrc": "1272:520:62", + "nodeType": "YulBlock", + "src": "1272:520:62", + "statements": [ + { + "nativeSrc": "1282:27:62", + "nodeType": "YulAssignment", + "src": "1282:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1294:9:62", + "nodeType": "YulIdentifier", + "src": "1294:9:62" + }, + { + "kind": "number", + "nativeSrc": "1305:3:62", + "nodeType": "YulLiteral", + "src": "1305:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1290:3:62", + "nodeType": "YulIdentifier", + "src": "1290:3:62" + }, + "nativeSrc": "1290:19:62", + "nodeType": "YulFunctionCall", + "src": "1290:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1282:4:62", + "nodeType": "YulIdentifier", + "src": "1282:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1325:9:62", + "nodeType": "YulIdentifier", + "src": "1325:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1340:6:62", + "nodeType": "YulIdentifier", + "src": "1340:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1356:3:62", + "nodeType": "YulLiteral", + "src": "1356:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1361:1:62", + "nodeType": "YulLiteral", + "src": "1361:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1352:3:62", + "nodeType": "YulIdentifier", + "src": "1352:3:62" + }, + "nativeSrc": "1352:11:62", + "nodeType": "YulFunctionCall", + "src": "1352:11:62" + }, + { + "kind": "number", + "nativeSrc": "1365:1:62", + "nodeType": "YulLiteral", + "src": "1365:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1348:3:62", + "nodeType": "YulIdentifier", + "src": "1348:3:62" + }, + "nativeSrc": "1348:19:62", + "nodeType": "YulFunctionCall", + "src": "1348:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1336:3:62", + "nodeType": "YulIdentifier", + "src": "1336:3:62" + }, + "nativeSrc": "1336:32:62", + "nodeType": "YulFunctionCall", + "src": "1336:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1318:6:62", + "nodeType": "YulIdentifier", + "src": "1318:6:62" + }, + "nativeSrc": "1318:51:62", + "nodeType": "YulFunctionCall", + "src": "1318:51:62" + }, + "nativeSrc": "1318:51:62", + "nodeType": "YulExpressionStatement", + "src": "1318:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1389:9:62", + "nodeType": "YulIdentifier", + "src": "1389:9:62" + }, + { + "kind": "number", + "nativeSrc": "1400:2:62", + "nodeType": "YulLiteral", + "src": "1400:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1385:3:62", + "nodeType": "YulIdentifier", + "src": "1385:3:62" + }, + "nativeSrc": "1385:18:62", + "nodeType": "YulFunctionCall", + "src": "1385:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "1409:6:62", + "nodeType": "YulIdentifier", + "src": "1409:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1425:3:62", + "nodeType": "YulLiteral", + "src": "1425:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1430:1:62", + "nodeType": "YulLiteral", + "src": "1430:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1421:3:62", + "nodeType": "YulIdentifier", + "src": "1421:3:62" + }, + "nativeSrc": "1421:11:62", + "nodeType": "YulFunctionCall", + "src": "1421:11:62" + }, + { + "kind": "number", + "nativeSrc": "1434:1:62", + "nodeType": "YulLiteral", + "src": "1434:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1417:3:62", + "nodeType": "YulIdentifier", + "src": "1417:3:62" + }, + "nativeSrc": "1417:19:62", + "nodeType": "YulFunctionCall", + "src": "1417:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1405:3:62", + "nodeType": "YulIdentifier", + "src": "1405:3:62" + }, + "nativeSrc": "1405:32:62", + "nodeType": "YulFunctionCall", + "src": "1405:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1378:6:62", + "nodeType": "YulIdentifier", + "src": "1378:6:62" + }, + "nativeSrc": "1378:60:62", + "nodeType": "YulFunctionCall", + "src": "1378:60:62" + }, + "nativeSrc": "1378:60:62", + "nodeType": "YulExpressionStatement", + "src": "1378:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1458:9:62", + "nodeType": "YulIdentifier", + "src": "1458:9:62" + }, + { + "kind": "number", + "nativeSrc": "1469:2:62", + "nodeType": "YulLiteral", + "src": "1469:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1454:3:62", + "nodeType": "YulIdentifier", + "src": "1454:3:62" + }, + "nativeSrc": "1454:18:62", + "nodeType": "YulFunctionCall", + "src": "1454:18:62" + }, + { + "arguments": [ + { + "name": "value2", + "nativeSrc": "1478:6:62", + "nodeType": "YulIdentifier", + "src": "1478:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1494:3:62", + "nodeType": "YulLiteral", + "src": "1494:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1499:1:62", + "nodeType": "YulLiteral", + "src": "1499:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1490:3:62", + "nodeType": "YulIdentifier", + "src": "1490:3:62" + }, + "nativeSrc": "1490:11:62", + "nodeType": "YulFunctionCall", + "src": "1490:11:62" + }, + { + "kind": "number", + "nativeSrc": "1503:1:62", + "nodeType": "YulLiteral", + "src": "1503:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1486:3:62", + "nodeType": "YulIdentifier", + "src": "1486:3:62" + }, + "nativeSrc": "1486:19:62", + "nodeType": "YulFunctionCall", + "src": "1486:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1474:3:62", + "nodeType": "YulIdentifier", + "src": "1474:3:62" + }, + "nativeSrc": "1474:32:62", + "nodeType": "YulFunctionCall", + "src": "1474:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1447:6:62", + "nodeType": "YulIdentifier", + "src": "1447:6:62" + }, + "nativeSrc": "1447:60:62", + "nodeType": "YulFunctionCall", + "src": "1447:60:62" + }, + "nativeSrc": "1447:60:62", + "nodeType": "YulExpressionStatement", + "src": "1447:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1527:9:62", + "nodeType": "YulIdentifier", + "src": "1527:9:62" + }, + { + "kind": "number", + "nativeSrc": "1538:2:62", + "nodeType": "YulLiteral", + "src": "1538:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1523:3:62", + "nodeType": "YulIdentifier", + "src": "1523:3:62" + }, + "nativeSrc": "1523:18:62", + "nodeType": "YulFunctionCall", + "src": "1523:18:62" + }, + { + "arguments": [ + { + "name": "value3", + "nativeSrc": "1547:6:62", + "nodeType": "YulIdentifier", + "src": "1547:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1563:3:62", + "nodeType": "YulLiteral", + "src": "1563:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1568:1:62", + "nodeType": "YulLiteral", + "src": "1568:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1559:3:62", + "nodeType": "YulIdentifier", + "src": "1559:3:62" + }, + "nativeSrc": "1559:11:62", + "nodeType": "YulFunctionCall", + "src": "1559:11:62" + }, + { + "kind": "number", + "nativeSrc": "1572:1:62", + "nodeType": "YulLiteral", + "src": "1572:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1555:3:62", + "nodeType": "YulIdentifier", + "src": "1555:3:62" + }, + "nativeSrc": "1555:19:62", + "nodeType": "YulFunctionCall", + "src": "1555:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1543:3:62", + "nodeType": "YulIdentifier", + "src": "1543:3:62" + }, + "nativeSrc": "1543:32:62", + "nodeType": "YulFunctionCall", + "src": "1543:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1516:6:62", + "nodeType": "YulIdentifier", + "src": "1516:6:62" + }, + "nativeSrc": "1516:60:62", + "nodeType": "YulFunctionCall", + "src": "1516:60:62" + }, + "nativeSrc": "1516:60:62", + "nodeType": "YulExpressionStatement", + "src": "1516:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1596:9:62", + "nodeType": "YulIdentifier", + "src": "1596:9:62" + }, + { + "kind": "number", + "nativeSrc": "1607:3:62", + "nodeType": "YulLiteral", + "src": "1607:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1592:3:62", + "nodeType": "YulIdentifier", + "src": "1592:3:62" + }, + "nativeSrc": "1592:19:62", + "nodeType": "YulFunctionCall", + "src": "1592:19:62" + }, + { + "arguments": [ + { + "name": "value4", + "nativeSrc": "1617:6:62", + "nodeType": "YulIdentifier", + "src": "1617:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1633:3:62", + "nodeType": "YulLiteral", + "src": "1633:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1638:1:62", + "nodeType": "YulLiteral", + "src": "1638:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1629:3:62", + "nodeType": "YulIdentifier", + "src": "1629:3:62" + }, + "nativeSrc": "1629:11:62", + "nodeType": "YulFunctionCall", + "src": "1629:11:62" + }, + { + "kind": "number", + "nativeSrc": "1642:1:62", + "nodeType": "YulLiteral", + "src": "1642:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1625:3:62", + "nodeType": "YulIdentifier", + "src": "1625:3:62" + }, + "nativeSrc": "1625:19:62", + "nodeType": "YulFunctionCall", + "src": "1625:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1613:3:62", + "nodeType": "YulIdentifier", + "src": "1613:3:62" + }, + "nativeSrc": "1613:32:62", + "nodeType": "YulFunctionCall", + "src": "1613:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1585:6:62", + "nodeType": "YulIdentifier", + "src": "1585:6:62" + }, + "nativeSrc": "1585:61:62", + "nodeType": "YulFunctionCall", + "src": "1585:61:62" + }, + "nativeSrc": "1585:61:62", + "nodeType": "YulExpressionStatement", + "src": "1585:61:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1666:9:62", + "nodeType": "YulIdentifier", + "src": "1666:9:62" + }, + { + "kind": "number", + "nativeSrc": "1677:3:62", + "nodeType": "YulLiteral", + "src": "1677:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1662:3:62", + "nodeType": "YulIdentifier", + "src": "1662:3:62" + }, + "nativeSrc": "1662:19:62", + "nodeType": "YulFunctionCall", + "src": "1662:19:62" + }, + { + "arguments": [ + { + "name": "value5", + "nativeSrc": "1687:6:62", + "nodeType": "YulIdentifier", + "src": "1687:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1703:3:62", + "nodeType": "YulLiteral", + "src": "1703:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1708:1:62", + "nodeType": "YulLiteral", + "src": "1708:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1699:3:62", + "nodeType": "YulIdentifier", + "src": "1699:3:62" + }, + "nativeSrc": "1699:11:62", + "nodeType": "YulFunctionCall", + "src": "1699:11:62" + }, + { + "kind": "number", + "nativeSrc": "1712:1:62", + "nodeType": "YulLiteral", + "src": "1712:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1695:3:62", + "nodeType": "YulIdentifier", + "src": "1695:3:62" + }, + "nativeSrc": "1695:19:62", + "nodeType": "YulFunctionCall", + "src": "1695:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1683:3:62", + "nodeType": "YulIdentifier", + "src": "1683:3:62" + }, + "nativeSrc": "1683:32:62", + "nodeType": "YulFunctionCall", + "src": "1683:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1655:6:62", + "nodeType": "YulIdentifier", + "src": "1655:6:62" + }, + "nativeSrc": "1655:61:62", + "nodeType": "YulFunctionCall", + "src": "1655:61:62" + }, + "nativeSrc": "1655:61:62", + "nodeType": "YulExpressionStatement", + "src": "1655:61:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1736:9:62", + "nodeType": "YulIdentifier", + "src": "1736:9:62" + }, + { + "kind": "number", + "nativeSrc": "1747:3:62", + "nodeType": "YulLiteral", + "src": "1747:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1732:3:62", + "nodeType": "YulIdentifier", + "src": "1732:3:62" + }, + "nativeSrc": "1732:19:62", + "nodeType": "YulFunctionCall", + "src": "1732:19:62" + }, + { + "arguments": [ + { + "name": "value6", + "nativeSrc": "1757:6:62", + "nodeType": "YulIdentifier", + "src": "1757:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1773:3:62", + "nodeType": "YulLiteral", + "src": "1773:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1778:1:62", + "nodeType": "YulLiteral", + "src": "1778:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1769:3:62", + "nodeType": "YulIdentifier", + "src": "1769:3:62" + }, + "nativeSrc": "1769:11:62", + "nodeType": "YulFunctionCall", + "src": "1769:11:62" + }, + { + "kind": "number", + "nativeSrc": "1782:1:62", + "nodeType": "YulLiteral", + "src": "1782:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1765:3:62", + "nodeType": "YulIdentifier", + "src": "1765:3:62" + }, + "nativeSrc": "1765:19:62", + "nodeType": "YulFunctionCall", + "src": "1765:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1753:3:62", + "nodeType": "YulIdentifier", + "src": "1753:3:62" + }, + "nativeSrc": "1753:32:62", + "nodeType": "YulFunctionCall", + "src": "1753:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1725:6:62", + "nodeType": "YulIdentifier", + "src": "1725:6:62" + }, + "nativeSrc": "1725:61:62", + "nodeType": "YulFunctionCall", + "src": "1725:61:62" + }, + "nativeSrc": "1725:61:62", + "nodeType": "YulExpressionStatement", + "src": "1725:61:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed", + "nativeSrc": "1003:789:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1193:9:62", + "nodeType": "YulTypedName", + "src": "1193:9:62", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "1204:6:62", + "nodeType": "YulTypedName", + "src": "1204:6:62", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "1212:6:62", + "nodeType": "YulTypedName", + "src": "1212:6:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "1220:6:62", + "nodeType": "YulTypedName", + "src": "1220:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "1228:6:62", + "nodeType": "YulTypedName", + "src": "1228:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1236:6:62", + "nodeType": "YulTypedName", + "src": "1236:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1244:6:62", + "nodeType": "YulTypedName", + "src": "1244:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1252:6:62", + "nodeType": "YulTypedName", + "src": "1252:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1263:4:62", + "nodeType": "YulTypedName", + "src": "1263:4:62", + "type": "" + } + ], + "src": "1003:789:62" + }, + { + "body": { + "nativeSrc": "1982:310:62", + "nodeType": "YulBlock", + "src": "1982:310:62", + "statements": [ + { + "nativeSrc": "1992:27:62", + "nodeType": "YulAssignment", + "src": "1992:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2004:9:62", + "nodeType": "YulIdentifier", + "src": "2004:9:62" + }, + { + "kind": "number", + "nativeSrc": "2015:3:62", + "nodeType": "YulLiteral", + "src": "2015:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2000:3:62", + "nodeType": "YulIdentifier", + "src": "2000:3:62" + }, + "nativeSrc": "2000:19:62", + "nodeType": "YulFunctionCall", + "src": "2000:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1992:4:62", + "nodeType": "YulIdentifier", + "src": "1992:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2035:9:62", + "nodeType": "YulIdentifier", + "src": "2035:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "2050:6:62", + "nodeType": "YulIdentifier", + "src": "2050:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2066:3:62", + "nodeType": "YulLiteral", + "src": "2066:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2071:1:62", + "nodeType": "YulLiteral", + "src": "2071:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2062:3:62", + "nodeType": "YulIdentifier", + "src": "2062:3:62" + }, + "nativeSrc": "2062:11:62", + "nodeType": "YulFunctionCall", + "src": "2062:11:62" + }, + { + "kind": "number", + "nativeSrc": "2075:1:62", + "nodeType": "YulLiteral", + "src": "2075:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2058:3:62", + "nodeType": "YulIdentifier", + "src": "2058:3:62" + }, + "nativeSrc": "2058:19:62", + "nodeType": "YulFunctionCall", + "src": "2058:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2046:3:62", + "nodeType": "YulIdentifier", + "src": "2046:3:62" + }, + "nativeSrc": "2046:32:62", + "nodeType": "YulFunctionCall", + "src": "2046:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2028:6:62", + "nodeType": "YulIdentifier", + "src": "2028:6:62" + }, + "nativeSrc": "2028:51:62", + "nodeType": "YulFunctionCall", + "src": "2028:51:62" + }, + "nativeSrc": "2028:51:62", + "nodeType": "YulExpressionStatement", + "src": "2028:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2099:9:62", + "nodeType": "YulIdentifier", + "src": "2099:9:62" + }, + { + "kind": "number", + "nativeSrc": "2110:2:62", + "nodeType": "YulLiteral", + "src": "2110:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2095:3:62", + "nodeType": "YulIdentifier", + "src": "2095:3:62" + }, + "nativeSrc": "2095:18:62", + "nodeType": "YulFunctionCall", + "src": "2095:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "2119:6:62", + "nodeType": "YulIdentifier", + "src": "2119:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2135:3:62", + "nodeType": "YulLiteral", + "src": "2135:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2140:1:62", + "nodeType": "YulLiteral", + "src": "2140:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2131:3:62", + "nodeType": "YulIdentifier", + "src": "2131:3:62" + }, + "nativeSrc": "2131:11:62", + "nodeType": "YulFunctionCall", + "src": "2131:11:62" + }, + { + "kind": "number", + "nativeSrc": "2144:1:62", + "nodeType": "YulLiteral", + "src": "2144:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2127:3:62", + "nodeType": "YulIdentifier", + "src": "2127:3:62" + }, + "nativeSrc": "2127:19:62", + "nodeType": "YulFunctionCall", + "src": "2127:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2115:3:62", + "nodeType": "YulIdentifier", + "src": "2115:3:62" + }, + "nativeSrc": "2115:32:62", + "nodeType": "YulFunctionCall", + "src": "2115:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2088:6:62", + "nodeType": "YulIdentifier", + "src": "2088:6:62" + }, + "nativeSrc": "2088:60:62", + "nodeType": "YulFunctionCall", + "src": "2088:60:62" + }, + "nativeSrc": "2088:60:62", + "nodeType": "YulExpressionStatement", + "src": "2088:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2168:9:62", + "nodeType": "YulIdentifier", + "src": "2168:9:62" + }, + { + "kind": "number", + "nativeSrc": "2179:2:62", + "nodeType": "YulLiteral", + "src": "2179:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2164:3:62", + "nodeType": "YulIdentifier", + "src": "2164:3:62" + }, + "nativeSrc": "2164:18:62", + "nodeType": "YulFunctionCall", + "src": "2164:18:62" + }, + { + "arguments": [ + { + "name": "value2", + "nativeSrc": "2188:6:62", + "nodeType": "YulIdentifier", + "src": "2188:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2204:3:62", + "nodeType": "YulLiteral", + "src": "2204:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2209:1:62", + "nodeType": "YulLiteral", + "src": "2209:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2200:3:62", + "nodeType": "YulIdentifier", + "src": "2200:3:62" + }, + "nativeSrc": "2200:11:62", + "nodeType": "YulFunctionCall", + "src": "2200:11:62" + }, + { + "kind": "number", + "nativeSrc": "2213:1:62", + "nodeType": "YulLiteral", + "src": "2213:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2196:3:62", + "nodeType": "YulIdentifier", + "src": "2196:3:62" + }, + "nativeSrc": "2196:19:62", + "nodeType": "YulFunctionCall", + "src": "2196:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2184:3:62", + "nodeType": "YulIdentifier", + "src": "2184:3:62" + }, + "nativeSrc": "2184:32:62", + "nodeType": "YulFunctionCall", + "src": "2184:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2157:6:62", + "nodeType": "YulIdentifier", + "src": "2157:6:62" + }, + "nativeSrc": "2157:60:62", + "nodeType": "YulFunctionCall", + "src": "2157:60:62" + }, + "nativeSrc": "2157:60:62", + "nodeType": "YulExpressionStatement", + "src": "2157:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2237:9:62", + "nodeType": "YulIdentifier", + "src": "2237:9:62" + }, + { + "kind": "number", + "nativeSrc": "2248:2:62", + "nodeType": "YulLiteral", + "src": "2248:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2233:3:62", + "nodeType": "YulIdentifier", + "src": "2233:3:62" + }, + "nativeSrc": "2233:18:62", + "nodeType": "YulFunctionCall", + "src": "2233:18:62" + }, + { + "arguments": [ + { + "name": "value3", + "nativeSrc": "2257:6:62", + "nodeType": "YulIdentifier", + "src": "2257:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2273:3:62", + "nodeType": "YulLiteral", + "src": "2273:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2278:1:62", + "nodeType": "YulLiteral", + "src": "2278:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2269:3:62", + "nodeType": "YulIdentifier", + "src": "2269:3:62" + }, + "nativeSrc": "2269:11:62", + "nodeType": "YulFunctionCall", + "src": "2269:11:62" + }, + { + "kind": "number", + "nativeSrc": "2282:1:62", + "nodeType": "YulLiteral", + "src": "2282:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2265:3:62", + "nodeType": "YulIdentifier", + "src": "2265:3:62" + }, + "nativeSrc": "2265:19:62", + "nodeType": "YulFunctionCall", + "src": "2265:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2253:3:62", + "nodeType": "YulIdentifier", + "src": "2253:3:62" + }, + "nativeSrc": "2253:32:62", + "nodeType": "YulFunctionCall", + "src": "2253:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2226:6:62", + "nodeType": "YulIdentifier", + "src": "2226:6:62" + }, + "nativeSrc": "2226:60:62", + "nodeType": "YulFunctionCall", + "src": "2226:60:62" + }, + "nativeSrc": "2226:60:62", + "nodeType": "YulExpressionStatement", + "src": "2226:60:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address__fromStack_reversed", + "nativeSrc": "1797:495:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1927:9:62", + "nodeType": "YulTypedName", + "src": "1927:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "1938:6:62", + "nodeType": "YulTypedName", + "src": "1938:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1946:6:62", + "nodeType": "YulTypedName", + "src": "1946:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1954:6:62", + "nodeType": "YulTypedName", + "src": "1954:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1962:6:62", + "nodeType": "YulTypedName", + "src": "1962:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1973:4:62", + "nodeType": "YulTypedName", + "src": "1973:4:62", + "type": "" + } + ], + "src": "1797:495:62" + }, + { + "body": { + "nativeSrc": "2398:76:62", + "nodeType": "YulBlock", + "src": "2398:76:62", + "statements": [ + { + "nativeSrc": "2408:26:62", + "nodeType": "YulAssignment", + "src": "2408:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2420:9:62", + "nodeType": "YulIdentifier", + "src": "2420:9:62" + }, + { + "kind": "number", + "nativeSrc": "2431:2:62", + "nodeType": "YulLiteral", + "src": "2431:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2416:3:62", + "nodeType": "YulIdentifier", + "src": "2416:3:62" + }, + "nativeSrc": "2416:18:62", + "nodeType": "YulFunctionCall", + "src": "2416:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2408:4:62", + "nodeType": "YulIdentifier", + "src": "2408:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2450:9:62", + "nodeType": "YulIdentifier", + "src": "2450:9:62" + }, + { + "name": "value0", + "nativeSrc": "2461:6:62", + "nodeType": "YulIdentifier", + "src": "2461:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2443:6:62", + "nodeType": "YulIdentifier", + "src": "2443:6:62" + }, + "nativeSrc": "2443:25:62", + "nodeType": "YulFunctionCall", + "src": "2443:25:62" + }, + "nativeSrc": "2443:25:62", + "nodeType": "YulExpressionStatement", + "src": "2443:25:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", + "nativeSrc": "2297:177:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2367:9:62", + "nodeType": "YulTypedName", + "src": "2367:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2378:6:62", + "nodeType": "YulTypedName", + "src": "2378:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2389:4:62", + "nodeType": "YulTypedName", + "src": "2389:4:62", + "type": "" + } + ], + "src": "2297:177:62" + }, + { + "body": { + "nativeSrc": "2560:127:62", + "nodeType": "YulBlock", + "src": "2560:127:62", + "statements": [ + { + "body": { + "nativeSrc": "2606:16:62", + "nodeType": "YulBlock", + "src": "2606:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2615:1:62", + "nodeType": "YulLiteral", + "src": "2615:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2618:1:62", + "nodeType": "YulLiteral", + "src": "2618:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2608:6:62", + "nodeType": "YulIdentifier", + "src": "2608:6:62" + }, + "nativeSrc": "2608:12:62", + "nodeType": "YulFunctionCall", + "src": "2608:12:62" + }, + "nativeSrc": "2608:12:62", + "nodeType": "YulExpressionStatement", + "src": "2608:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "2581:7:62", + "nodeType": "YulIdentifier", + "src": "2581:7:62" + }, + { + "name": "headStart", + "nativeSrc": "2590:9:62", + "nodeType": "YulIdentifier", + "src": "2590:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2577:3:62", + "nodeType": "YulIdentifier", + "src": "2577:3:62" + }, + "nativeSrc": "2577:23:62", + "nodeType": "YulFunctionCall", + "src": "2577:23:62" + }, + { + "kind": "number", + "nativeSrc": "2602:2:62", + "nodeType": "YulLiteral", + "src": "2602:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "2573:3:62", + "nodeType": "YulIdentifier", + "src": "2573:3:62" + }, + "nativeSrc": "2573:32:62", + "nodeType": "YulFunctionCall", + "src": "2573:32:62" + }, + "nativeSrc": "2570:52:62", + "nodeType": "YulIf", + "src": "2570:52:62" + }, + { + "nativeSrc": "2631:50:62", + "nodeType": "YulAssignment", + "src": "2631:50:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2671:9:62", + "nodeType": "YulIdentifier", + "src": "2671:9:62" + } + ], + "functionName": { + "name": "abi_decode_address_fromMemory", + "nativeSrc": "2641:29:62", + "nodeType": "YulIdentifier", + "src": "2641:29:62" + }, + "nativeSrc": "2641:40:62", + "nodeType": "YulFunctionCall", + "src": "2641:40:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2631:6:62", + "nodeType": "YulIdentifier", + "src": "2631:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address_fromMemory", + "nativeSrc": "2479:208:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2526:9:62", + "nodeType": "YulTypedName", + "src": "2526:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "2537:7:62", + "nodeType": "YulTypedName", + "src": "2537:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "2549:6:62", + "nodeType": "YulTypedName", + "src": "2549:6:62", + "type": "" + } + ], + "src": "2479:208:62" + }, + { + "body": { + "nativeSrc": "2811:406:62", + "nodeType": "YulBlock", + "src": "2811:406:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2828:9:62", + "nodeType": "YulIdentifier", + "src": "2828:9:62" + }, + { + "kind": "number", + "nativeSrc": "2839:2:62", + "nodeType": "YulLiteral", + "src": "2839:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2821:6:62", + "nodeType": "YulIdentifier", + "src": "2821:6:62" + }, + "nativeSrc": "2821:21:62", + "nodeType": "YulFunctionCall", + "src": "2821:21:62" + }, + "nativeSrc": "2821:21:62", + "nodeType": "YulExpressionStatement", + "src": "2821:21:62" + }, + { + "nativeSrc": "2851:27:62", + "nodeType": "YulVariableDeclaration", + "src": "2851:27:62", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "2871:6:62", + "nodeType": "YulIdentifier", + "src": "2871:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "2865:5:62", + "nodeType": "YulIdentifier", + "src": "2865:5:62" + }, + "nativeSrc": "2865:13:62", + "nodeType": "YulFunctionCall", + "src": "2865:13:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "2855:6:62", + "nodeType": "YulTypedName", + "src": "2855:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2898:9:62", + "nodeType": "YulIdentifier", + "src": "2898:9:62" + }, + { + "kind": "number", + "nativeSrc": "2909:2:62", + "nodeType": "YulLiteral", + "src": "2909:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2894:3:62", + "nodeType": "YulIdentifier", + "src": "2894:3:62" + }, + "nativeSrc": "2894:18:62", + "nodeType": "YulFunctionCall", + "src": "2894:18:62" + }, + { + "name": "length", + "nativeSrc": "2914:6:62", + "nodeType": "YulIdentifier", + "src": "2914:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2887:6:62", + "nodeType": "YulIdentifier", + "src": "2887:6:62" + }, + "nativeSrc": "2887:34:62", + "nodeType": "YulFunctionCall", + "src": "2887:34:62" + }, + "nativeSrc": "2887:34:62", + "nodeType": "YulExpressionStatement", + "src": "2887:34:62" + }, + { + "nativeSrc": "2930:10:62", + "nodeType": "YulVariableDeclaration", + "src": "2930:10:62", + "value": { + "kind": "number", + "nativeSrc": "2939:1:62", + "nodeType": "YulLiteral", + "src": "2939:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "2934:1:62", + "nodeType": "YulTypedName", + "src": "2934:1:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "2999:90:62", + "nodeType": "YulBlock", + "src": "2999:90:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3028:9:62", + "nodeType": "YulIdentifier", + "src": "3028:9:62" + }, + { + "name": "i", + "nativeSrc": "3039:1:62", + "nodeType": "YulIdentifier", + "src": "3039:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3024:3:62", + "nodeType": "YulIdentifier", + "src": "3024:3:62" + }, + "nativeSrc": "3024:17:62", + "nodeType": "YulFunctionCall", + "src": "3024:17:62" + }, + { + "kind": "number", + "nativeSrc": "3043:2:62", + "nodeType": "YulLiteral", + "src": "3043:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3020:3:62", + "nodeType": "YulIdentifier", + "src": "3020:3:62" + }, + "nativeSrc": "3020:26:62", + "nodeType": "YulFunctionCall", + "src": "3020:26:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "3062:6:62", + "nodeType": "YulIdentifier", + "src": "3062:6:62" + }, + { + "name": "i", + "nativeSrc": "3070:1:62", + "nodeType": "YulIdentifier", + "src": "3070:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3058:3:62", + "nodeType": "YulIdentifier", + "src": "3058:3:62" + }, + "nativeSrc": "3058:14:62", + "nodeType": "YulFunctionCall", + "src": "3058:14:62" + }, + { + "kind": "number", + "nativeSrc": "3074:2:62", + "nodeType": "YulLiteral", + "src": "3074:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3054:3:62", + "nodeType": "YulIdentifier", + "src": "3054:3:62" + }, + "nativeSrc": "3054:23:62", + "nodeType": "YulFunctionCall", + "src": "3054:23:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3048:5:62", + "nodeType": "YulIdentifier", + "src": "3048:5:62" + }, + "nativeSrc": "3048:30:62", + "nodeType": "YulFunctionCall", + "src": "3048:30:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3013:6:62", + "nodeType": "YulIdentifier", + "src": "3013:6:62" + }, + "nativeSrc": "3013:66:62", + "nodeType": "YulFunctionCall", + "src": "3013:66:62" + }, + "nativeSrc": "3013:66:62", + "nodeType": "YulExpressionStatement", + "src": "3013:66:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "2960:1:62", + "nodeType": "YulIdentifier", + "src": "2960:1:62" + }, + { + "name": "length", + "nativeSrc": "2963:6:62", + "nodeType": "YulIdentifier", + "src": "2963:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "2957:2:62", + "nodeType": "YulIdentifier", + "src": "2957:2:62" + }, + "nativeSrc": "2957:13:62", + "nodeType": "YulFunctionCall", + "src": "2957:13:62" + }, + "nativeSrc": "2949:140:62", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "2971:19:62", + "nodeType": "YulBlock", + "src": "2971:19:62", + "statements": [ + { + "nativeSrc": "2973:15:62", + "nodeType": "YulAssignment", + "src": "2973:15:62", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "2982:1:62", + "nodeType": "YulIdentifier", + "src": "2982:1:62" + }, + { + "kind": "number", + "nativeSrc": "2985:2:62", + "nodeType": "YulLiteral", + "src": "2985:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2978:3:62", + "nodeType": "YulIdentifier", + "src": "2978:3:62" + }, + "nativeSrc": "2978:10:62", + "nodeType": "YulFunctionCall", + "src": "2978:10:62" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "2973:1:62", + "nodeType": "YulIdentifier", + "src": "2973:1:62" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "2953:3:62", + "nodeType": "YulBlock", + "src": "2953:3:62", + "statements": [] + }, + "src": "2949:140:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3113:9:62", + "nodeType": "YulIdentifier", + "src": "3113:9:62" + }, + { + "name": "length", + "nativeSrc": "3124:6:62", + "nodeType": "YulIdentifier", + "src": "3124:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3109:3:62", + "nodeType": "YulIdentifier", + "src": "3109:3:62" + }, + "nativeSrc": "3109:22:62", + "nodeType": "YulFunctionCall", + "src": "3109:22:62" + }, + { + "kind": "number", + "nativeSrc": "3133:2:62", + "nodeType": "YulLiteral", + "src": "3133:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3105:3:62", + "nodeType": "YulIdentifier", + "src": "3105:3:62" + }, + "nativeSrc": "3105:31:62", + "nodeType": "YulFunctionCall", + "src": "3105:31:62" + }, + { + "kind": "number", + "nativeSrc": "3138:1:62", + "nodeType": "YulLiteral", + "src": "3138:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3098:6:62", + "nodeType": "YulIdentifier", + "src": "3098:6:62" + }, + "nativeSrc": "3098:42:62", + "nodeType": "YulFunctionCall", + "src": "3098:42:62" + }, + "nativeSrc": "3098:42:62", + "nodeType": "YulExpressionStatement", + "src": "3098:42:62" + }, + { + "nativeSrc": "3149:62:62", + "nodeType": "YulAssignment", + "src": "3149:62:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3165:9:62", + "nodeType": "YulIdentifier", + "src": "3165:9:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "3184:6:62", + "nodeType": "YulIdentifier", + "src": "3184:6:62" + }, + { + "kind": "number", + "nativeSrc": "3192:2:62", + "nodeType": "YulLiteral", + "src": "3192:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3180:3:62", + "nodeType": "YulIdentifier", + "src": "3180:3:62" + }, + "nativeSrc": "3180:15:62", + "nodeType": "YulFunctionCall", + "src": "3180:15:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3201:2:62", + "nodeType": "YulLiteral", + "src": "3201:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "3197:3:62", + "nodeType": "YulIdentifier", + "src": "3197:3:62" + }, + "nativeSrc": "3197:7:62", + "nodeType": "YulFunctionCall", + "src": "3197:7:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3176:3:62", + "nodeType": "YulIdentifier", + "src": "3176:3:62" + }, + "nativeSrc": "3176:29:62", + "nodeType": "YulFunctionCall", + "src": "3176:29:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3161:3:62", + "nodeType": "YulIdentifier", + "src": "3161:3:62" + }, + "nativeSrc": "3161:45:62", + "nodeType": "YulFunctionCall", + "src": "3161:45:62" + }, + { + "kind": "number", + "nativeSrc": "3208:2:62", + "nodeType": "YulLiteral", + "src": "3208:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3157:3:62", + "nodeType": "YulIdentifier", + "src": "3157:3:62" + }, + "nativeSrc": "3157:54:62", + "nodeType": "YulFunctionCall", + "src": "3157:54:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3149:4:62", + "nodeType": "YulIdentifier", + "src": "3149:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "2692:525:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2780:9:62", + "nodeType": "YulTypedName", + "src": "2780:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2791:6:62", + "nodeType": "YulTypedName", + "src": "2791:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2802:4:62", + "nodeType": "YulTypedName", + "src": "2802:4:62", + "type": "" + } + ], + "src": "2692:525:62" + }, + { + "body": { + "nativeSrc": "3321:101:62", + "nodeType": "YulBlock", + "src": "3321:101:62", + "statements": [ + { + "nativeSrc": "3331:26:62", + "nodeType": "YulAssignment", + "src": "3331:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3343:9:62", + "nodeType": "YulIdentifier", + "src": "3343:9:62" + }, + { + "kind": "number", + "nativeSrc": "3354:2:62", + "nodeType": "YulLiteral", + "src": "3354:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3339:3:62", + "nodeType": "YulIdentifier", + "src": "3339:3:62" + }, + "nativeSrc": "3339:18:62", + "nodeType": "YulFunctionCall", + "src": "3339:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3331:4:62", + "nodeType": "YulIdentifier", + "src": "3331:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3373:9:62", + "nodeType": "YulIdentifier", + "src": "3373:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "3388:6:62", + "nodeType": "YulIdentifier", + "src": "3388:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3404:2:62", + "nodeType": "YulLiteral", + "src": "3404:2:62", + "type": "", + "value": "64" + }, + { + "kind": "number", + "nativeSrc": "3408:1:62", + "nodeType": "YulLiteral", + "src": "3408:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3400:3:62", + "nodeType": "YulIdentifier", + "src": "3400:3:62" + }, + "nativeSrc": "3400:10:62", + "nodeType": "YulFunctionCall", + "src": "3400:10:62" + }, + { + "kind": "number", + "nativeSrc": "3412:1:62", + "nodeType": "YulLiteral", + "src": "3412:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3396:3:62", + "nodeType": "YulIdentifier", + "src": "3396:3:62" + }, + "nativeSrc": "3396:18:62", + "nodeType": "YulFunctionCall", + "src": "3396:18:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3384:3:62", + "nodeType": "YulIdentifier", + "src": "3384:3:62" + }, + "nativeSrc": "3384:31:62", + "nodeType": "YulFunctionCall", + "src": "3384:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3366:6:62", + "nodeType": "YulIdentifier", + "src": "3366:6:62" + }, + "nativeSrc": "3366:50:62", + "nodeType": "YulFunctionCall", + "src": "3366:50:62" + }, + "nativeSrc": "3366:50:62", + "nodeType": "YulExpressionStatement", + "src": "3366:50:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", + "nativeSrc": "3222:200:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3290:9:62", + "nodeType": "YulTypedName", + "src": "3290:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "3301:6:62", + "nodeType": "YulTypedName", + "src": "3301:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3312:4:62", + "nodeType": "YulTypedName", + "src": "3312:4:62", + "type": "" + } + ], + "src": "3222:200:62" + } + ] + }, + "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n value2 := abi_decode_address_fromMemory(add(headStart, 64))\n value3 := abi_decode_address_fromMemory(add(headStart, 96))\n }\n function abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 10)\n mstore(add(headStart, 64), \"Controller\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 224)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 160), and(value5, sub(shl(160, 1), 1)))\n mstore(add(headStart, 192), and(value6, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), 32)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(64, 1), 1)))\n }\n}", + "id": 62, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "61024060405234801561001157600080fd5b5060405161668f38038061668f83398101604081905261003091610541565b3083838387806001600160a01b03811661007f5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b7906103c5565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100ea906103c5565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b6020820152610123906103c5565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015d906103c5565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610195906103c5565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101d0906103c5565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020e906103c5565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024a906103c5565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027f906103c5565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103299790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b038481166101c08190528482166101e08190528483166102008190529284166102208190526040805193845260208401929092529082019290925260608101919091527f4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda79060800160405180910390a1505050506103bc61047360201b60201c565b50505050610605565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161040091815260200190565b602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610595565b9050826001600160a01b03821661046c5760405163218f5add60e11b815260040161007691906105b7565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104c35760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146105225780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b038116811461053c57600080fd5b919050565b6000806000806080858703121561055757600080fd5b61056085610525565b935061056e60208601610525565b925061057c60408601610525565b915061058a60608601610525565b905092959194509250565b6000602082840312156105a757600080fd5b6105b082610525565b9392505050565b602081526000825180602084015260005b818110156105e557602081860181015160408684010152016105c8565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615ff161069e60003960006143f801526000612fa9015260008181611a1801526138d00152600050506000505060005050600050506000613fe6015260006137fd01526000505060005050600050506000612045015260006143d40152615ff16000f3fe608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", + "opcodes": "PUSH2 0x240 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x668F CODESIZE SUB DUP1 PUSH2 0x668F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x30 SWAP2 PUSH2 0x541 JUMP JUMPDEST ADDRESS DUP4 DUP4 DUP4 DUP8 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7F JUMPI PUSH1 0x40 MLOAD PUSH4 0x218F5ADD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x21B7B73A3937B63632B9 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xA DUP2 MSTORE PUSH10 0x23B930B8342A37B5B2B7 PUSH1 0xB1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xB7 SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x5374616B696E67 PUSH1 0xC8 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xEA SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xD DUP2 MSTORE PUSH13 0x47726170685061796D656E7473 PUSH1 0x98 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x123 SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH14 0x5061796D656E7473457363726F77 PUSH1 0x90 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x15D SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xC DUP2 MSTORE PUSH12 0x22B837B1B426B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x195 SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH14 0x2932BBB0B93239A6B0B730B3B2B9 PUSH1 0x91 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1D0 SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH17 0x4772617068546F6B656E47617465776179 PUSH1 0x78 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x20E SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x160 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xF DUP2 MSTORE PUSH15 0x23B930B834283937BC3CA0B236B4B7 PUSH1 0x89 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x24A SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x180 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x8 DUP2 MSTORE PUSH8 0x21BAB930BA34B7B7 PUSH1 0xC1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x27F SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x1A0 DUP2 SWAP1 MSTORE PUSH2 0x100 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x80 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH1 0x40 MLOAD SWAP9 DUP12 AND SWAP11 SWAP8 DUP9 AND SWAP10 SWAP7 SWAP1 SWAP8 AND SWAP8 PUSH32 0xEF5021414834D86E36470F5C1CECF6544FB2BB723F2CA51A4C86FCD8C5919A43 SWAP8 PUSH2 0x329 SWAP8 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 DUP8 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP4 DUP7 AND PUSH1 0x40 DUP7 ADD MSTORE SWAP2 DUP6 AND PUSH1 0x60 DUP6 ADD MSTORE DUP5 AND PUSH1 0x80 DUP5 ADD MSTORE DUP4 AND PUSH1 0xA0 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH2 0x1C0 DUP2 SWAP1 MSTORE DUP5 DUP3 AND PUSH2 0x1E0 DUP2 SWAP1 MSTORE DUP5 DUP4 AND PUSH2 0x200 DUP2 SWAP1 MSTORE SWAP3 DUP5 AND PUSH2 0x220 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x4175B2C37456DBAC494E08DE8666D31BB8F3F2AEE36EA5D9E06894FF3E4DDDA7 SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP PUSH2 0x3BC PUSH2 0x473 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP PUSH2 0x605 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x100 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7641A5E DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x400 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x41D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x441 SWAP2 SWAP1 PUSH2 0x595 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x46C JUMPI PUSH1 0x40 MLOAD PUSH4 0x218F5ADD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76 SWAP2 SWAP1 PUSH2 0x5B7 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND EQ PUSH2 0x522 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x53C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x557 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x560 DUP6 PUSH2 0x525 JUMP JUMPDEST SWAP4 POP PUSH2 0x56E PUSH1 0x20 DUP7 ADD PUSH2 0x525 JUMP JUMPDEST SWAP3 POP PUSH2 0x57C PUSH1 0x40 DUP7 ADD PUSH2 0x525 JUMP JUMPDEST SWAP2 POP PUSH2 0x58A PUSH1 0x60 DUP7 ADD PUSH2 0x525 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5B0 DUP3 PUSH2 0x525 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5E5 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD PUSH1 0x40 DUP7 DUP5 ADD ADD MSTORE ADD PUSH2 0x5C8 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP6 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0x200 MLOAD PUSH2 0x220 MLOAD PUSH2 0x5FF1 PUSH2 0x69E PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x43F8 ADD MSTORE PUSH1 0x0 PUSH2 0x2FA9 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1A18 ADD MSTORE PUSH2 0x38D0 ADD MSTORE PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 PUSH2 0x3FE6 ADD MSTORE PUSH1 0x0 PUSH2 0x37FD ADD MSTORE PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 PUSH2 0x2045 ADD MSTORE PUSH1 0x0 PUSH2 0x43D4 ADD MSTORE PUSH2 0x5FF1 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2CE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8180083B GT PUSH2 0x17E JUMPI DUP1 PUSH4 0xA827A90C GT PUSH2 0xDF JUMPI DUP1 PUSH4 0xA827A90C EQ PUSH2 0x8F6 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x909 JUMPI DUP1 PUSH4 0xB15D2A2C EQ PUSH2 0x929 JUMPI DUP1 PUSH4 0xBA38F67D EQ PUSH2 0x93C JUMPI DUP1 PUSH4 0xBFDFA7AF EQ PUSH2 0x94F JUMPI DUP1 PUSH4 0xCB8347FE EQ PUSH2 0x966 JUMPI DUP1 PUSH4 0xCBE5F3F2 EQ PUSH2 0x979 JUMPI DUP1 PUSH4 0xCE0FC0CC EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xCE56C98B EQ PUSH2 0x9AC JUMPI DUP1 PUSH4 0xD07A7A84 EQ PUSH2 0x9BF JUMPI DUP1 PUSH4 0xDEDF6726 EQ PUSH2 0x9C8 JUMPI DUP1 PUSH4 0xE2E1E8E9 EQ PUSH2 0x9DB JUMPI DUP1 PUSH4 0xE6F50054 EQ PUSH2 0x9FB JUMPI DUP1 PUSH4 0xEFF0F592 EQ PUSH2 0xA0E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8180083B EQ PUSH2 0x795 JUMPI DUP1 PUSH4 0x819BA366 EQ PUSH2 0x7A8 JUMPI DUP1 PUSH4 0x81E777A7 EQ PUSH2 0x7C5 JUMPI DUP1 PUSH4 0x832BC923 EQ PUSH2 0x7D8 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x7EB JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x7F3 JUMPI DUP1 PUSH4 0x85E82BAF EQ PUSH2 0x80E JUMPI DUP1 PUSH4 0x88812583 EQ PUSH2 0x817 JUMPI DUP1 PUSH4 0x8D2F2948 EQ PUSH2 0x82E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x859 JUMPI DUP1 PUSH4 0x9249C5C1 EQ PUSH2 0x861 JUMPI DUP1 PUSH4 0x9384E078 EQ PUSH2 0x878 JUMPI DUP1 PUSH4 0x93D4E7CB EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x9AAFA5D1 EQ PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F793CDC GT PUSH2 0x233 JUMPI DUP1 PUSH4 0x4F793CDC EQ PUSH2 0x4B1 JUMPI DUP1 PUSH4 0x52A9039C EQ PUSH2 0x4D3 JUMPI DUP1 PUSH4 0x55C85269 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0x6234E216 EQ PUSH2 0x63E JUMPI DUP1 PUSH4 0x6A3CA383 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x6D9A3951 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0x71CE020A EQ PUSH2 0x6F4 JUMPI DUP1 PUSH4 0x7203CA78 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0x73371823 EQ PUSH2 0x740 JUMPI DUP1 PUSH4 0x772495C3 EQ PUSH2 0x749 JUMPI DUP1 PUSH4 0x7AA31BCE EQ PUSH2 0x75C JUMPI DUP1 PUSH4 0x7DFE6D28 EQ PUSH2 0x76F JUMPI DUP1 PUSH4 0x7E89BAC3 EQ PUSH2 0x782 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE022923 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0x138DEA08 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x13C474C9 EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x1CAFA218 EQ PUSH2 0x3C0 JUMPI DUP1 PUSH4 0x1DD42F60 EQ PUSH2 0x3D5 JUMPI DUP1 PUSH4 0x1EBB7C30 EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0x24B8FBF6 EQ PUSH2 0x40E JUMPI DUP1 PUSH4 0x35577962 EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x36FDD28A EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x3AFD23FE EQ PUSH2 0x43D JUMPI DUP1 PUSH4 0x3F0ED79D EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0x45F54485 EQ PUSH2 0x488 JUMPI DUP1 PUSH4 0x482468B7 EQ PUSH2 0x49B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6 PUSH2 0x2E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xE0 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x35D PUSH1 0xD7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3A0 PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x6A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x3CE CALLDATASIZE PUSH1 0x4 PUSH2 0x5180 JUMP JUMPDEST PUSH2 0xAD8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3D3 PUSH2 0x3E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B8 JUMP JUMPDEST PUSH2 0xC56 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x41C CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x42F CALLDATASIZE PUSH1 0x4 PUSH2 0x5278 JUMP JUMPDEST PUSH2 0xE9A JUMP JUMPDEST PUSH2 0x35D PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x44B CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xEB0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xED1 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0xF15 JUMP JUMPDEST PUSH2 0x4A3 PUSH2 0xF1F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST PUSH2 0x4C4 PUSH2 0x4BF CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xF32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5331 JUMP JUMPDEST PUSH2 0x52E PUSH2 0x4E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP7 SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP10 AND DUP10 MSTORE PUSH1 0x20 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE SWAP6 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x604 PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP6 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP6 ADD DUP5 SWAP1 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x7 SWAP1 SWAP3 ADD SLOAD PUSH1 0xE0 SWAP1 SWAP6 ADD DUP6 SWAP1 MSTORE SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x470 PUSH2 0x1065 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x64C CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9F PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x107A JUMP JUMPDEST PUSH2 0x6C8 PUSH2 0x67F CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE PUSH1 0x9E DUP3 MSTORE DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP3 MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x10F6 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x1108 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x5366 JUMP JUMPDEST PUSH2 0x733 PUSH2 0x718 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0x35D PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x757 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x1113 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x76A CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x111D JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x77D CALLDATASIZE PUSH1 0x4 PUSH2 0x5394 JUMP JUMPDEST PUSH2 0x112E JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x790 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x1146 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x11BA JUMP JUMPDEST PUSH2 0x7B0 PUSH2 0x1345 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5394 JUMP JUMPDEST PUSH2 0x1355 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x14BB JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x14CF JUMP JUMPDEST PUSH2 0x7FB PUSH2 0x1511 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53C4 JUMP JUMPDEST PUSH2 0x35D PUSH1 0xA0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x841 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x733 PUSH2 0x15BA JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x886 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x8CE PUSH2 0x8A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9E PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x841 SWAP1 PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x904 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x15D5 JUMP JUMPDEST PUSH2 0x91C PUSH2 0x917 CALLDATASIZE PUSH1 0x4 PUSH2 0x5475 JUMP JUMPDEST PUSH2 0x1682 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x54EA JUMP JUMPDEST PUSH2 0x35D PUSH2 0x937 CALLDATASIZE PUSH1 0x4 PUSH2 0x554F JUMP JUMPDEST PUSH2 0x1769 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x94A CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x19F7 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x974 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1A15 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x987 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x68 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x9A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1B54 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x55B7 JUMP JUMPDEST PUSH2 0x1C83 JUMP JUMPDEST PUSH2 0x35D PUSH1 0xD6 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x9D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1C96 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x9E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xA09 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x1E24 JUMP JUMPDEST PUSH2 0x3A0 PUSH2 0xA1C CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP5 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xA51 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x1E35 JUMP JUMPDEST PUSH2 0xA5E PUSH2 0x50EB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAE2 PUSH2 0x1E70 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xB09 JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xB25 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xB33 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xB51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xB7B JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH2 0xB84 CALLER PUSH2 0x1E94 JUMP JUMPDEST PUSH2 0xB8C PUSH2 0x1EA5 JUMP JUMPDEST PUSH2 0xB94 PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0xB9C PUSH2 0x1EC5 JUMP JUMPDEST PUSH2 0xBE8 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x537562677261706853657276696365 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x312E3 PUSH1 0xEC SHL DUP2 MSTORE POP PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0xBF4 DUP9 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0xBFD DUP8 PUSH2 0x1F67 JUMP JUMPDEST PUSH2 0xC06 DUP7 PUSH2 0x1FBB JUMP JUMPDEST DUP4 ISZERO PUSH2 0xC4C JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC5E PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x1F67 JUMP JUMPDEST POP JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 PUSH2 0xC78 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCA7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCE8 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0xD14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0xD22 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0xD2D DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xD38 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH2 0xD40 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xD50 DUP8 DUP10 ADD DUP10 PUSH2 0x5756 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP4 MLOAD GT PUSH2 0xD78 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7838439 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD GT PUSH2 0xD9A JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E63BD95 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xDD1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD06866D PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE TIMESTAMP DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 DUP2 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 SWAP1 SWAP3 MSTORE SWAP3 SWAP1 KECCAK256 DUP2 MLOAD DUP2 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 PUSH2 0xE1B SWAP1 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x2 DUP3 ADD SWAP1 PUSH2 0xE30 SWAP1 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0xE4C JUMPI PUSH2 0xE4C DUP10 DUP3 PUSH2 0x229A JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x159567BEA25499A91F60E1FBB349FF2A1F8C1B2883198F25C1E12C99EDDB44FA DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0xE87 SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xEA2 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x22F1 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xA0 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xECB SWAP1 PUSH2 0xEC5 PUSH1 0x9D DUP6 PUSH2 0x2358 JUMP JUMPDEST SWAP1 PUSH2 0x23D2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x72E3EF97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0xF0B PUSH2 0x240F JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x2434 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xC67 CALLER DUP3 PUSH2 0x2480 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH2 0x252D JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP2 SWAP3 SWAP2 PUSH2 0xF54 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xF80 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xFCD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xFA2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xFCD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xFB0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 DUP1 PUSH1 0x2 ADD DUP1 SLOAD PUSH2 0xFE2 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x100E SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x105B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1030 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x105B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x103E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1070 PUSH2 0x25A4 JUMP JUMPDEST SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP3 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE SWAP1 PUSH2 0xECB SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH2 0x10FE PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xF13 PUSH1 0x0 PUSH2 0x25E7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH2 0x2643 JUMP JUMPDEST PUSH2 0xC67 CALLER DUP3 PUSH2 0x229A JUMP JUMPDEST PUSH2 0x1125 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x26BE JUMP JUMPDEST PUSH2 0x1136 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0x1141 DUP4 DUP4 DUP4 PUSH2 0x26F3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x114E PUSH2 0x2011 JUMP JUMPDEST PUSH2 0x115B DUP2 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x117D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1C9C717B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0xD7 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x6DEEF78FFE3DF79AE5CD8E40B842C36AC6077E13746B9B68A9F327537B01E4E9 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST DUP3 PUSH2 0x11C3 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11F2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x120F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1233 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1256 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP1 DUP2 SWAP1 PUSH2 0x1293 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x129C PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12AA DUP5 DUP7 ADD DUP7 PUSH2 0x5151 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x12C1 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP8 SWAP2 DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x12EF JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x12FA DUP2 PUSH2 0x2746 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x73330C218A680717E9EEE625C262DF66EDDFDF99ECB388D25F6B32D66B9A318A DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x1335 SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD SWAP1 SWAP2 JUMP JUMPDEST DUP3 PUSH2 0x135E PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x138D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13CE SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x13F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0x13FF DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x140A DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x1415 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 SWAP1 DUP2 SWAP1 PUSH2 0x1450 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1459 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH2 0x146E PUSH1 0x9D DUP9 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP9 SWAP2 DUP9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x149C JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0xC4C DUP7 DUP7 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x289C JUMP JUMPDEST PUSH2 0x14C3 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1500 JUMPI PUSH1 0x40 MLOAD PUSH4 0x72E3EF97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1509 PUSH2 0x2274 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x2C28 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x1527 PUSH2 0x2C6F JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP ISZERO DUP1 ISZERO PUSH2 0x153B JUMPI POP PUSH1 0x1 DUP2 ADD SLOAD ISZERO JUMPDEST PUSH2 0x157F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1152540DCC4C8E88155B9A5B9A5D1A585B1A5E9959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH2 0x1587 PUSH2 0x2C93 JUMP JUMPDEST PUSH2 0x158F PUSH2 0x2D34 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0xF PUSH1 0xF8 SHL SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP CHAINID SWAP9 POP ADDRESS SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x15C5 PUSH2 0x2D51 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E2 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x15FB PUSH1 0xA0 SLOAD DUP4 PUSH2 0x23D2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 SLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x161D SWAP2 SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2D75 JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x1628 JUMPI POP DUP1 JUMPDEST DUP5 SWAP1 PUSH2 0x1647 JUMPI PUSH1 0x40 MLOAD PUSH3 0x3477B5 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1651 DUP4 PUSH2 0x2D94 JUMP JUMPDEST ISZERO DUP5 SWAP1 PUSH2 0x1672 JUMPI PUSH1 0x40 MLOAD PUSH4 0x17C7B35D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x167C DUP5 PUSH2 0x2746 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x16AC JUMPI PUSH2 0x16AC PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x16DF JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x16CA JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1761 JUMPI PUSH2 0x173C ADDRESS DUP7 DUP7 DUP5 DUP2 DUP2 LT PUSH2 0x1703 JUMPI PUSH2 0x1703 PUSH2 0x5968 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1715 SWAP2 SWAP1 PUSH2 0x597E JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1728 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x2DB3 JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x174E JUMPI PUSH2 0x174E PUSH2 0x5968 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x16E5 JUMP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0x1774 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17A3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17E4 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1807 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP6 PUSH1 0x0 PUSH2 0x1815 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1820 DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x182B DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP9 SWAP1 DUP2 SWAP1 PUSH2 0x1866 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x186F PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1884 JUMPI PUSH2 0x1884 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x18E2 JUMPI PUSH1 0x0 PUSH2 0x1897 DUP9 DUP11 ADD DUP11 PUSH2 0x5A16 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP2 POP DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP1 DUP3 AND EQ PUSH2 0x18CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x1A071D07 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x18DA DUP2 PUSH2 0x2E29 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1995 JUMP JUMPDEST PUSH1 0x2 DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x18F6 JUMPI PUSH2 0x18F6 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x197A JUMPI PUSH1 0x0 DUP1 PUSH2 0x190A DUP10 DUP12 ADD DUP12 PUSH2 0x5B3B JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH2 0x1924 PUSH1 0x9D DUP5 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP14 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1952 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x1971 DUP3 DUP3 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x332E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1995 JUMP JUMPDEST DUP9 PUSH1 0x40 MLOAD PUSH4 0x47031CF PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5B89 JUMP JUMPDEST DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x19A7 JUMPI PUSH2 0x19A7 PUSH2 0x59EB JUMP JUMPDEST DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x54FE682BFB66381A9382E13E4B95A3DD4F960EAFBAE063FDEA3539D144FF3FF5 DUP4 PUSH1 0x40 MLOAD PUSH2 0x19E2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xECB DUP3 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2D75 JUMP JUMPDEST CALLER PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP3 EQ PUSH2 0x1A62 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCDC0567F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 PUSH2 0x1A74 DUP4 DUP6 ADD DUP6 PUSH2 0x5B97 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1A80 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE76FEDE6 DUP7 DUP5 DUP5 PUSH2 0x1A99 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP7 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B06 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2F2E74A11116E05B39159372CCEB6739257B08D72F7171D208FF27BB6466C58 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1B45 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x1B5D PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B8C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BCD SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1BF0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP1 DUP2 SWAP1 PUSH2 0x1C2D JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1C36 PUSH2 0x2274 JUMP JUMPDEST PUSH2 0x1C3F DUP6 PUSH2 0x38F2 JUMP JUMPDEST PUSH2 0x1C48 DUP6 PUSH2 0x3908 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH32 0xF53CF6521A1B5FC0C04BFFA70374A4DC2E3474F2B2AC1643C3BCC54E2DB4A939 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8F DUP4 DUP4 PUSH2 0x397B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x1C9F PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CCE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CEB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D0F SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1D32 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0x1D40 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D4B DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x1D56 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 SWAP1 DUP2 SWAP1 PUSH2 0x1D91 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1D9A PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x1DAB DUP10 DUP12 ADD DUP12 PUSH2 0x5BB9 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x1DD3 DUP12 DUP4 DUP7 DUP7 DUP6 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x39EA JUMP JUMPDEST POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD3803EB82EF5B4CDFF8646734EBBAF5B37441E96314B27FFD3D0940F12A038E7 DUP12 DUP12 PUSH1 0x40 MLOAD PUSH2 0x1E0F SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1E2C PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x1FBB JUMP JUMPDEST PUSH2 0x1E3D PUSH2 0x2011 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1E67 JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x25E7 JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 JUMP JUMPDEST PUSH2 0x1E9C PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x3B98 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EB5 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EBD PUSH2 0x3BA0 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x1EA5 JUMP JUMPDEST PUSH2 0x1ECD PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EBD PUSH2 0x3BD5 JUMP JUMPDEST PUSH2 0x1EDD PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EE7 DUP3 DUP3 PUSH2 0x3BF2 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x3C04 JUMP JUMPDEST DUP2 DUP2 DUP1 DUP3 GT ISZERO PUSH2 0x1F1D JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x0 DUP3 SWAP1 SSTORE PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x90699B8B4BF48918FEA1129C85F9BC7B51285DF7ECC982910813C7805F568849 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0xC0 SHL NOT AND PUSH1 0x1 PUSH1 0xC0 SHL PUSH4 0xFFFFFFFF DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x472ABA493F9FD1D136EC54986F619F3AA5CAFF964F0E731A9909FB9A1270211F SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1FDC JUMPI PUSH1 0x40 MLOAD PUSH4 0xBC71A043 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xD6 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x2AAAF20B08565EEBC0C962CD7C568E54C3C0C2B85A1F942B82CD1BD730FDCD23 SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST CALLER PUSH2 0x201A PUSH2 0x15BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xF13 JUMPI CALLER PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x20B8 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x25D9897E DUP5 ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E5 SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2103 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2127 SWAP2 SWAP1 PUSH2 0x5C36 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 EQ ISZERO DUP4 SWAP1 PUSH2 0x215B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B3C09BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x746F6B656E73 PUSH1 0xD0 SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x219F PUSH2 0x2643 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP4 PUSH2 0x21B4 JUMPI DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x21BA JUMP JUMPDEST DUP5 PUSH1 0xE0 ADD MLOAD JUMPDEST SWAP1 POP PUSH2 0x2208 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD DUP2 MSTORE PUSH1 0x20 ADD PUSH13 0x1D1A185DDA5B99D4195C9A5BD9 PUSH1 0x9A SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2213 PUSH2 0x252D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP7 PUSH2 0x2228 JUMPI DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x222E JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD MLOAD JUMPDEST SWAP1 POP PUSH2 0xC4C DUP2 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xE DUP2 MSTORE PUSH1 0x20 ADD PUSH14 0x1B585E15995C9A599A595C90DD5D PUSH1 0x92 SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH2 0x227C PUSH2 0x1065 JUMP JUMPDEST ISZERO PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD93C0665 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x3349D2E561F8C23A3FF42257745C8FB53E4BF3CBD4046672A3C4A0C7EE8A7B31 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x22F9 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xA95BAC2F3DF0D40E8278281C1D39D53C60E4F2BF3550CA5665738D0916E89789 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x2360 PUSH2 0x50EB JUMP JUMPDEST PUSH2 0x236A DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 SWAP1 SWAP2 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x23E7 DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0xA0 ADD MLOAD PUSH2 0x3CE8 JUMP JUMPDEST PUSH2 0x23F1 SWAP1 TIMESTAMP PUSH2 0x5955 JUMP JUMPDEST SWAP1 POP PUSH2 0x23FC DUP5 PUSH2 0x25C8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2407 JUMPI POP DUP3 DUP2 GT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2417 PUSH2 0x1065 JUMP JUMPDEST PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8DFC202B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x243C PUSH2 0x240F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2446 PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 SSTORE SWAP1 POP PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x11AF SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD DUP5 SWAP1 MSTORE DUP3 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP1 MLOAD DUP1 DUP4 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP2 SWAP1 PUSH2 0x24D4 SWAP1 DUP5 SWAP1 PUSH2 0x3CFE SWAP1 PUSH2 0x3D69 SWAP1 PUSH2 0x3E62 SWAP1 DUP10 PUSH2 0x3E87 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x13F3FA9F0E54AF1AF76D8B5D11C3973D7C2AED6312B61EFFF2F7B49D73AD67EB DUP4 DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2518 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1B45 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2538 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x84633713 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2575 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2599 SWAP2 SWAP1 PUSH2 0x5CF1 JUMP JUMPDEST SWAP3 PUSH3 0xF4240 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25D7 DUP3 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xECB JUMPI POP POP PUSH1 0x80 ADD MLOAD ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F1 PUSH2 0x2D51 JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP5 POP SWAP2 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x264E PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5AEA0EC4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x268B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26AF SWAP2 SWAP1 PUSH2 0x5D0E JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0xA0 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x21774046E2611DDB52C8C46E1AD97524EEB2E3FDA7DCD9428867868B4C4D06BA SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST PUSH2 0x2700 PUSH1 0x9E DUP5 DUP5 DUP5 PUSH2 0x3F41 JUMP JUMPDEST DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD54C7ABC930F6D506DA2D08AA7AEAD4F2443E1DB6D5F560384A2F652FF893E19 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2753 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x27DE DUP3 PUSH2 0x2761 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2792 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27D5 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x9D SWAP2 SWAP1 PUSH2 0x4008 JUMP JUMPDEST PUSH2 0x27E9 PUSH1 0x9D DUP4 PUSH2 0x40B0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x27FC SWAP2 PUSH1 0x9F SWAP2 PUSH2 0x415B JUMP JUMPDEST DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x2823 SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x663A6F978DE61DC3E2441026C082BE709377B083AB642A8CE71386F8B91C710B DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2890 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH2 0x28A4 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28B1 PUSH1 0x9D DUP7 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x28BC DUP2 PUSH2 0x25C8 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x28DC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1EB5FF95 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP DUP1 PUSH1 0x40 ADD MLOAD DUP5 EQ ISZERO DUP6 DUP6 SWAP1 SWAP2 PUSH2 0x2908 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF32518CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x40 DUP2 ADD MLOAD DUP1 DUP6 GT ISZERO PUSH2 0x293E JUMPI PUSH2 0x2939 PUSH2 0x2922 PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x292E DUP5 DUP10 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x9F SWAP3 SWAP2 SWAP1 DUP9 PUSH2 0x41E0 JUMP JUMPDEST PUSH2 0x2957 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x2957 SWAP1 PUSH2 0x294E DUP8 DUP5 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x9F SWAP2 SWAP1 PUSH2 0x415B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2961 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2992 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x29B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29D5 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x29E2 DUP5 PUSH2 0x2D94 JUMP JUMPDEST ISZERO PUSH2 0x29EE JUMPI PUSH1 0x0 PUSH2 0x29FD JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x29FD SWAP1 DUP4 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD DUP10 SWAP1 SSTORE PUSH1 0x6 ADD DUP4 SWAP1 SSTORE SWAP1 POP PUSH2 0x2A2C PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6452FC0F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC8A5F81E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A7A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A9E SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2AC9 SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP DUP3 DUP8 GT ISZERO PUSH2 0x2B11 JUMPI PUSH2 0x2AE0 DUP4 DUP9 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2B06 SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x2B47 SWAP1 POP JUMP JUMPDEST PUSH2 0x2B1B DUP8 DUP5 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2B41 SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6DB4A6F9BE2D5E72EB2A2AF2374AC487971BF342A261BA0BC1CF471BF2A2C31F DUP11 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2B9E SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP8 AND DUP8 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP6 ADD MSTORE POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2C30 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C3A PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR DUP2 SSTORE SWAP1 POP PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x2473 CALLER SWAP1 JUMP JUMPDEST PUSH32 0xA16A46D94261C7517CC8FF89F61C0CE93598E3C849801011DEE649A6A557D100 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2C9F PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x2 ADD DUP1 SLOAD PUSH2 0x2CB0 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2CDC SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2D29 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2CFE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D29 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2D0C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2D40 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x3 ADD DUP1 SLOAD PUSH2 0x2CB0 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D8C PUSH2 0x2D82 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x9F SWAP1 DUP6 DUP6 PUSH2 0x42E5 JUMP JUMPDEST ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2DA3 DUP3 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xECB JUMPI POP POP PUSH1 0x40 ADD MLOAD ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2DD0 SWAP2 SWAP1 PUSH2 0x5D3E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2E0B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E10 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2E20 DUP6 DUP4 DUP4 PUSH2 0x437F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD DUP1 MLOAD PUSH1 0x0 SWAP4 SWAP3 DUP5 SWAP3 PUSH2 0x2E4E SWAP3 DUP2 ADD DUP3 ADD SWAP2 ADD PUSH2 0x5D5A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E5D PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x2E92 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4508FBF7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2EA4 DUP5 PUSH1 0x0 PUSH2 0x2480 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EAE PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2ED9 SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F1A SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2F26 PUSH2 0x43F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C4EA0ED DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2F53 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F94 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST PUSH2 0x2F9F JUMPI PUSH1 0x0 PUSH2 0x2FA3 JUMP JUMPDEST PUSH1 0xD7 SLOAD JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7F07D283 PUSH1 0x0 DUP12 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2FEB SWAP3 SWAP2 SWAP1 PUSH2 0x5D77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3017 SWAP3 SWAP2 SWAP1 PUSH2 0x5E16 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3036 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x305A SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3068 DUP3 DUP5 PUSH2 0x441A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3074 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x309F SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30E0 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x30ED DUP4 DUP8 PUSH2 0x5D2B JUMP JUMPDEST EQ DUP6 DUP3 DUP5 SWAP1 SWAP2 SWAP3 PUSH2 0x3122 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B0D791F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP DUP4 ISZERO SWAP1 POP PUSH2 0x32DB JUMPI PUSH1 0x0 PUSH1 0xD6 SLOAD DUP5 PUSH2 0x313C SWAP2 SWAP1 PUSH2 0x5E36 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3148 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5AEA0EC4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3185 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31A9 SWAP2 SWAP1 PUSH2 0x5D0E JUMP JUMPDEST PUSH2 0x31BC SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND TIMESTAMP PUSH2 0x5D2B JUMP JUMPDEST SWAP1 POP PUSH2 0x31C9 DUP12 DUP4 DUP4 PUSH2 0x4481 JUMP JUMPDEST DUP4 ISZERO PUSH2 0x32D8 JUMPI PUSH2 0x31D7 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1D1C2FEC DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3204 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3223 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3247 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST POP PUSH2 0x326C PUSH2 0x3253 PUSH2 0x43F6 JUMP JUMPDEST DUP6 PUSH2 0x325C PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x45F3 JUMP JUMPDEST PUSH2 0x3274 PUSH2 0x43F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x102AE651 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x81573288 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x32D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 PUSH32 0x60A56D4D503735B4848FEB6F491F14D7415262346B820D3B5A3D2733201BDA36 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x333C PUSH1 0x9D DUP7 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x3347 DUP2 PUSH2 0x25C8 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x3367 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1EB5FF95 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x337F PUSH1 0xA0 SLOAD DUP4 PUSH2 0x23D2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x3392 JUMPI POP PUSH2 0x3390 DUP3 PUSH2 0x2D94 JUMP JUMPDEST ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x339D JUMPI POP DUP5 ISZERO ISZERO JUMPDEST PUSH2 0x33A8 JUMPI PUSH1 0x0 PUSH2 0x341E JUMP JUMPDEST PUSH2 0x33B0 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDB750926 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x33DB SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x33FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x341E SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH2 0x345D DUP7 PUSH2 0x342C PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2792 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x3468 PUSH1 0x9D DUP8 PUSH2 0x46A2 JUMP JUMPDEST PUSH2 0x3473 PUSH1 0x9D DUP8 PUSH2 0x474D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 ISZERO PUSH2 0x37C2 JUMPI PUSH1 0x0 PUSH2 0x3486 PUSH2 0x2043 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x40 MLOAD PUSH4 0x7573EF4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x7573EF4F SWAP2 PUSH2 0x34B9 SWAP2 ADDRESS SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5E4D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34FA SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3506 PUSH2 0x2043 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1584A179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x561285E4 SWAP2 PUSH2 0x3536 SWAP2 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5625 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3577 SWAP2 SWAP1 PUSH2 0x5E72 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD GT PUSH2 0x358C JUMPI PUSH1 0x0 PUSH2 0x3596 JUMP JUMPDEST PUSH2 0x3596 DUP6 DUP4 PUSH2 0x441A JUMP JUMPDEST SWAP3 POP DUP3 ISZERO PUSH2 0x368B JUMPI PUSH2 0x35A6 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95EA7B3 PUSH2 0x35BC PUSH2 0x2043 JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x35DA SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x35F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x361D SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST POP PUSH2 0x3626 PUSH2 0x2043 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD PUSH4 0xCA94B0E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0xCA94B0E9 SWAP2 PUSH2 0x3658 SWAP2 ADDRESS SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5EC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3672 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x3695 DUP4 DUP7 PUSH2 0x5955 JUMP JUMPDEST SWAP4 POP DUP4 ISZERO PUSH2 0x37BF JUMPI DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x37B0 JUMPI PUSH2 0x36C7 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95EA7B3 PUSH2 0x36DD PUSH2 0x2043 JUMP JUMPDEST DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x36FB SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x371A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x373E SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST POP PUSH2 0x3747 PUSH2 0x2043 JUMP JUMPDEST DUP8 MLOAD PUSH1 0x40 MLOAD PUSH4 0x3A309049 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x74612092 SWAP2 PUSH2 0x3779 SWAP2 ADDRESS SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5EC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x37BD JUMP JUMPDEST PUSH2 0x37BD DUP2 DUP7 PUSH2 0x325C PUSH2 0x43D2 JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP2 AND PUSH32 0x7DF4DBB3B3C999CA3E143D3FE67ABFA22078FD572D49D411278648C773912E31 DUP7 DUP7 DUP7 DUP14 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x76671808 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3859 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x387D SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP4 MLOAD PUSH2 0x38B4 SWAP1 DUP8 PUSH2 0x2D75 JUMP JUMPDEST ISZERO PUSH2 0x38C2 JUMPI PUSH2 0x38C2 DUP9 PUSH2 0x2746 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38FD DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0xEAC DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x3913 DUP2 PUSH1 0x1 PUSH2 0x47F9 JUMP JUMPDEST PUSH2 0x391B PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3A78B732 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3946 SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3960 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3974 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8F PUSH32 0x4BDEE85C4B4A268F4895D1096D553C3E57BB2433C380E7B7EC8CB56CC4F74673 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x39CF SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x4810 JUMP JUMPDEST PUSH2 0x39F2 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x3A19 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FFDF5EF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3A24 DUP8 DUP8 DUP6 PUSH2 0x483D JUMP JUMPDEST PUSH2 0x3A2F PUSH1 0x9E DUP8 PUSH2 0x488C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3ABC DUP9 DUP9 DUP9 DUP9 PUSH2 0x3A40 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP13 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A6D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AB0 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x9D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x48E1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AD4 PUSH2 0x3AC9 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x9F SWAP1 DUP11 DUP9 DUP8 PUSH2 0x41E0 JUMP JUMPDEST DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x3AFB SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP6 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3BD4419F8DEFEC88DD042E31B8E8743F00803AED288FE7C31C9CF0689D295CF2 DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x3B60 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3B7B PUSH2 0x4A2E JUMP JUMPDEST PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1E3D PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3BA8 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3BB5 PUSH1 0x0 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0x3BC3 PUSH1 0x0 PUSH3 0xF4240 PUSH2 0x4A48 JUMP JUMPDEST PUSH2 0xF13 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH2 0x4B1A JUMP JUMPDEST PUSH2 0x3BDD PUSH2 0x3B73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BE7 PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x3BFA PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x4BA7 JUMP JUMPDEST PUSH2 0xEAC PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3C17 DUP5 DUP5 DUP5 PUSH2 0x4BE8 JUMP JUMPDEST DUP2 DUP6 DUP6 DUP6 SWAP1 SWAP2 SWAP3 SWAP4 PUSH2 0xC4C JUMPI PUSH1 0x40 MLOAD PUSH4 0x871E13D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP3 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP2 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE SWAP1 SWAP2 PUSH2 0x3CC0 SWAP1 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x3CE0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42DAADAF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT PUSH2 0x3CF7 JUMPI DUP2 PUSH2 0x1C8F JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x80 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP1 DUP4 SWAP1 PUSH2 0x3D5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x107349A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x60 ADD MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3D78 DUP6 PUSH2 0x4BFF JUMP JUMPDEST SWAP1 POP TIMESTAMP DUP2 PUSH1 0x40 ADD MLOAD GT ISZERO PUSH2 0x3DA0 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x1 SWAP2 POP PUSH2 0x3E5B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3DB7 SWAP2 SWAP1 PUSH2 0x5F1A JUMP JUMPDEST DUP5 MLOAD SWAP2 SWAP4 POP SWAP2 POP PUSH2 0x3DCC SWAP1 PUSH1 0x68 SWAP1 DUP4 SWAP1 PUSH2 0x415B JUMP JUMPDEST DUP3 MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD DUP2 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH32 0x4C06B68820628A39C787D2DB1FAA0EEACD7B9474847B198B1E871FE6E5B93F44 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP3 MLOAD PUSH2 0x3E22 SWAP1 DUP4 PUSH2 0x5D2B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP6 POP PUSH1 0x0 DUP7 SWAP5 POP SWAP5 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP8 PUSH1 0x3 ADD SLOAD DUP4 GT ISZERO PUSH2 0x3EB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A411B9D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 ISZERO PUSH2 0x3EBE JUMPI DUP4 PUSH2 0x3EC4 JUMP JUMPDEST DUP9 PUSH1 0x3 ADD SLOAD JUMPDEST DUP10 SLOAD SWAP1 SWAP5 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3ED9 JUMPI POP PUSH1 0x0 DUP6 GT JUMPDEST ISZERO PUSH2 0x3F32 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3EEF DUP4 DUP10 DUP13 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x3F00 JUMPI POP POP PUSH2 0x3F32 JUMP JUMPDEST SWAP7 POP DUP7 PUSH2 0x3F0E DUP13 DUP13 DUP12 PUSH2 0x4C8D JUMP JUMPDEST SWAP3 POP DUP7 PUSH2 0x3F1A DUP2 PUSH2 0x5F40 JUMP JUMPDEST SWAP8 POP POP DUP4 DUP1 PUSH2 0x3F28 SWAP1 PUSH2 0x5F57 JUMP JUMPDEST SWAP5 POP POP POP POP PUSH2 0x3ECA JUMP JUMPDEST POP SWAP9 SWAP4 SWAP8 POP SWAP3 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SLOAD SWAP2 ADD MSTORE DUP3 SWAP1 ISZERO PUSH2 0x3F96 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2D3E5FB9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP4 DUP5 MSTORE SWAP4 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP6 SWAP1 SWAP4 MSTORE SWAP1 SWAP4 KECCAK256 SWAP1 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP1 MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4014 DUP5 DUP5 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x4080 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP5 SWAP2 PUSH2 0x40A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x6 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40BC DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x4128 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x414E JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP TIMESTAMP PUSH1 0x4 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x4168 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP1 DUP3 LT ISZERO PUSH2 0x41AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x5F8EC709 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x41D6 SWAP1 DUP5 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST DUP2 ISZERO PUSH2 0x3974 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x420A SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x872D0489 DUP7 ADDRESS DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x423E SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F70 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x425B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427F SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 DUP2 GT ISZERO PUSH2 0x42AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x5F8EC709 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP7 SWAP3 SWAP1 PUSH2 0x42D7 SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x872D0489 DUP6 ADDRESS DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4318 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F70 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4335 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4359 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x4394 JUMPI PUSH2 0x438F DUP3 PUSH2 0x4D14 JUMP JUMPDEST PUSH2 0x1C8F JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x43AB JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x43CB JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP DUP1 PUSH2 0x1C8F JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4429 DUP4 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x443C JUMPI POP PUSH2 0x443C DUP3 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP4 DUP4 SWAP1 SWAP2 PUSH2 0x4466 JUMPI PUSH1 0x40 MLOAD PUSH4 0x768BF0EB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP PUSH3 0xF4240 SWAP1 POP PUSH2 0x4477 DUP4 DUP6 PUSH2 0x5E36 JUMP JUMPDEST PUSH2 0x1C8F SWAP2 SWAP1 PUSH2 0x5F99 JUMP JUMPDEST DUP2 PUSH1 0x0 SUB PUSH2 0x44A2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F4C63D9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x44CE PUSH2 0x44AD PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x68 SWAP2 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP1 PUSH2 0x41E0 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x2 DUP1 DUP3 ADD SLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT ADDRESS PUSH1 0x60 SWAP1 DUP2 SHL DUP3 AND DUP4 DUP10 ADD MSTORE DUP12 SWAP1 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x48 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD DUP1 DUP3 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0x68 DUP2 ADD DUP1 DUP7 MSTORE DUP3 MLOAD SWAP3 DUP8 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0xE8 DUP3 ADD DUP7 MSTORE DUP10 DUP4 MSTORE TIMESTAMP PUSH1 0x88 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0xA8 DUP4 ADD DUP11 DUP2 MSTORE PUSH1 0xC8 SWAP1 SWAP4 ADD DUP10 DUP2 MSTORE DUP3 DUP11 MSTORE PUSH1 0x69 SWAP1 SWAP9 MSTORE SWAP6 SWAP1 SWAP8 KECCAK256 SWAP2 MLOAD DUP3 SSTORE SWAP4 MLOAD PUSH1 0x1 DUP3 ADD SSTORE SWAP3 MLOAD SWAP1 DUP4 ADD SSTORE SWAP2 MLOAD PUSH1 0x3 SWAP2 DUP3 ADD SSTORE DUP2 ADD SLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0x459C JUMPI PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD DUP2 SWAP1 SSTORE JUMPDEST PUSH2 0x45A6 DUP3 DUP3 PUSH2 0x4D3D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0x5D9E2C5278E41138269F5F980CFBEA016D8C59816754502ABC4D2F87AAEA987F SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH2 0x4627 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4646 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x466A SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10BA3930B739B332B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46AE DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x471A SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x4740 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP TIMESTAMP PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4759 DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x47C5 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x47EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x0 PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4804 DUP4 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1141 DUP2 DUP4 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xECB PUSH2 0x481D PUSH2 0x4DD0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4852 PUSH2 0x484C DUP6 DUP6 PUSH2 0x397B JUMP JUMPDEST DUP4 PUSH2 0x4DDA JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP3 AND EQ PUSH2 0x4884 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8C5B935D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SLOAD SWAP2 ADD MSTORE DUP2 SWAP1 ISZERO PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0x81736271 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0x48E9 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x496A SWAP1 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO DUP6 SWAP1 PUSH2 0x498B JUMPI PUSH1 0x40 MLOAD PUSH4 0xBC4DEF5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP6 DUP7 MSTORE DUP2 DUP4 ADD SWAP5 DUP6 MSTORE TIMESTAMP PUSH1 0x60 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH1 0x80 DUP5 ADD DUP2 DUP2 MSTORE PUSH1 0xA0 DUP6 ADD DUP3 DUP2 MSTORE PUSH1 0xC0 DUP7 ADD SWAP8 DUP9 MSTORE PUSH1 0xE0 DUP7 ADD DUP4 DUP2 MSTORE SWAP11 DUP13 AND DUP4 MSTORE SWAP12 SWAP1 SWAP4 MSTORE SWAP4 SWAP1 SWAP4 KECCAK256 DUP3 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP10 AND SWAP9 SWAP1 SWAP9 OR DUP9 SSTORE SWAP5 MLOAD PUSH1 0x1 DUP9 ADD SSTORE SWAP3 MLOAD PUSH1 0x2 DUP8 ADD SSTORE MLOAD PUSH1 0x3 DUP7 ADD SSTORE SWAP2 MLOAD PUSH1 0x4 DUP6 ADD SSTORE SWAP4 MLOAD PUSH1 0x5 DUP5 ADD SSTORE MLOAD PUSH1 0x6 DUP4 ADD SSTORE MLOAD PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4A38 PUSH2 0x1E70 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF DUP1 DUP3 AND SWAP1 DUP4 AND GT ISZERO PUSH2 0x4A76 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST POP DUP3 SWAP1 POP DUP2 PUSH4 0xFFFFFFFF DUP2 AND PUSH3 0xF4240 LT ISZERO PUSH2 0x4AA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH4 0xFFFFFFFF DUP4 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH4 0xFFFFFFFF PUSH1 0xA0 SHL NOT SWAP2 DUP7 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 SWAP1 SWAP2 AND PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2FE5A7039987697813605CC0B9D6DB7AAB575408E3FC59E8A457BEF8D7BC0A36 SWAP1 PUSH2 0x1F5B SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x52CA JUMP JUMPDEST DUP2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 AND SWAP1 DUP4 AND GT ISZERO PUSH2 0x4B4B JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5366 JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x40 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND SWAP1 DUP6 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2867E04C500E438761486B78021D4F9EB97C77FF45D10C1183F5583BA4CBF7D1 SWAP1 PUSH2 0x1F5B SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x5366 JUMP JUMPDEST PUSH2 0x4BAF PUSH2 0x3B73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4BB9 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x2 DUP2 ADD PUSH2 0x4BC9 DUP5 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x3 DUP2 ADD PUSH2 0x4BD8 DUP4 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x0 DUP1 DUP3 SSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 LT ISZERO DUP1 ISZERO PUSH2 0x2407 JUMPI POP POP SWAP1 SWAP2 GT ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4C2D PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE DUP4 SWAP1 PUSH2 0x215B JUMPI PUSH1 0x40 MLOAD PUSH4 0x107349A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x3 ADD SLOAD GT PUSH2 0x4CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDDAF8F21 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4CC6 DUP6 PUSH1 0x0 ADD SLOAD DUP6 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x4CD9 DUP6 PUSH1 0x0 ADD SLOAD DUP5 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 DUP6 PUSH1 0x3 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x4CEE SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP DUP1 DUP6 SSTORE PUSH1 0x3 DUP6 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x4D0A JUMPI PUSH1 0x0 PUSH1 0x1 DUP7 ADD SSTORE JUMPDEST POP POP SWAP2 SLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x4D24 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA12F521 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP3 PUSH1 0x3 ADD SLOAD LT PUSH2 0x4D63 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A8C56B PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x4D81 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F4A893D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 DUP4 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP4 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4D9D SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x4DB2 JUMPI DUP1 DUP3 SSTORE JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x4DC7 SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC6A PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x4DEA DUP7 DUP7 PUSH2 0x4E78 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x4DFA DUP3 DUP3 PUSH2 0x4EC5 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x4E2F PUSH2 0x4F7E JUMP JUMPDEST PUSH2 0x4E37 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x41 SUB PUSH2 0x4EB2 JUMPI PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x4EA4 DUP9 DUP3 DUP6 DUP6 PUSH2 0x5026 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x4EBE JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x0 SWAP2 POP PUSH1 0x2 SWAP1 JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4ED9 JUMPI PUSH2 0x4ED9 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4EE2 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4EF6 JUMPI PUSH2 0x4EF6 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4F14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF645EEDF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4F28 JUMPI PUSH2 0x4F28 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4F49 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCE698F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x3 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4F5D JUMPI PUSH2 0x4F5D PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0xEAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x35E2F383 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4F89 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F95 PUSH2 0x2C93 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x4FAD JUMPI DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 SLOAD DUP1 ISZERO PUSH2 0x4FBC JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4FF0 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4FFC PUSH2 0x2D34 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x5014 JUMPI DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD DUP1 ISZERO PUSH2 0x4FBC JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH16 0xA2A8918CA85BAFE22016D0B997E4DF60 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP5 GT ISZERO PUSH2 0x5057 JUMPI POP PUSH1 0x0 SWAP2 POP PUSH1 0x3 SWAP1 POP DUP3 PUSH2 0x50E1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP11 SWAP1 MSTORE PUSH1 0xFF DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x50AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x50D7 JUMPI POP PUSH1 0x0 SWAP3 POP PUSH1 0x1 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x50E1 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C8F DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x51A7 DUP2 PUSH2 0x516E JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x51CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C8F DUP2 PUSH2 0x516E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x51E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x51FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x522B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5236 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x525D DUP7 DUP3 DUP8 ADD PUSH2 0x51D5 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x528B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5296 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x52A6 DUP2 PUSH2 0x526A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x52FC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x52E4 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x531D DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x52E1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x534A PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x5305 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x535C DUP2 DUP6 PUSH2 0x5305 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x53A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x53B4 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x51A7 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0xFF PUSH1 0xF8 SHL DUP9 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x53E3 PUSH1 0xE0 DUP4 ADD DUP10 PUSH2 0x5305 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x53F5 DUP2 DUP10 PUSH2 0x5305 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD DUP7 SWAP1 MSTORE DUP4 DUP2 SUB PUSH1 0xC0 DUP6 ADD MSTORE DUP5 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP4 POP SWAP1 SWAP2 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x544B JUMPI DUP4 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x542D JUMP JUMPDEST POP SWAP1 SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x549E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x54AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x54C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP5 ADD ADD GT ISZERO PUSH2 0x54DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP1 DUP5 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP6 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP PUSH1 0x20 DUP7 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5543 JUMPI PUSH1 0x3F NOT DUP8 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x552E DUP6 DUP4 MLOAD PUSH2 0x5305 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5512 JUMP JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5565 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5570 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x5584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x559F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55AB DUP8 DUP3 DUP9 ADD PUSH2 0x51D5 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x55CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x55D5 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x52A6 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x561A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x526A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 DUP4 ADD PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 GT ISZERO PUSH2 0x56F3 JUMPI PUSH2 0x56F3 PUSH2 0x563F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x5721 JUMPI PUSH2 0x5721 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE SWAP1 POP DUP1 DUP3 DUP5 ADD DUP8 LT ISZERO PUSH2 0x5739 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP4 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x576B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x578D DUP7 DUP3 DUP8 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x57A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x57B5 DUP7 DUP3 DUP8 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x57C6 DUP2 PUSH2 0x513C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x57E5 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x5805 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1141 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x5832 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3974 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x583E JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x586B JUMPI PUSH2 0x586B PUSH2 0x563F JUMP JUMPDEST PUSH2 0x587F DUP2 PUSH2 0x5879 DUP5 SLOAD PUSH2 0x57D1 JUMP JUMPDEST DUP5 PUSH2 0x580B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 DUP2 EQ PUSH2 0x58B3 JUMPI PUSH1 0x0 DUP4 ISZERO PUSH2 0x589B JUMPI POP DUP5 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP6 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP5 SWAP1 SHL OR DUP5 SSTORE PUSH2 0x3974 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP6 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x58E3 JUMPI DUP8 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x58C3 JUMP JUMPDEST POP DUP5 DUP3 LT ISZERO PUSH2 0x5901 JUMPI DUP7 DUP5 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE DUP2 PUSH1 0x20 DUP3 ADD MSTORE DUP2 DUP4 PUSH1 0x40 DUP4 ADD CALLDATACOPY PUSH1 0x0 DUP2 DUP4 ADD PUSH1 0x40 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT AND ADD ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x5995 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x59AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP5 DUP3 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD PUSH1 0x0 DUP2 MSTORE DUP4 MLOAD PUSH2 0x59E1 DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0x52E1 JUMP JUMPDEST ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5A3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x40 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x5A50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A58 PUSH2 0x5655 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5A6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xA0 DUP2 DUP8 SUB SLT ISZERO PUSH2 0x5A80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A88 PUSH2 0x567D JUMP JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5A93 DUP2 PUSH2 0x513C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH2 0x5AA3 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH2 0x5AB6 DUP2 PUSH2 0x5A01 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5AF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5AFF DUP9 DUP3 DUP6 ADD PUSH2 0x56C2 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP DUP3 MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5B21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5B2D DUP7 DUP3 DUP6 ADD PUSH2 0x56C2 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5B59 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x5B85 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xECB DUP3 DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5BAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5BCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x5BE8 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5C0F DUP8 DUP3 DUP9 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5C26 DUP2 PUSH2 0x516E JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5C26 DUP2 PUSH2 0x5A01 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x5C4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x5C55 PUSH2 0x569F JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x5C79 PUSH1 0x60 DUP6 ADD PUSH2 0x5C1B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x5C8A PUSH1 0x80 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x5C9B PUSH1 0xA0 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x5CAC PUSH1 0xC0 DUP6 ADD PUSH2 0x5C1B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x5CBD PUSH1 0xE0 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5CEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x516E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x5A01 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5D50 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x52E1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH1 0x40 DUP1 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0x80 SHL SUB PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD SWAP1 POP PUSH1 0xA0 PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x5DE8 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x5305 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x5E05 DUP3 DUP3 PUSH2 0x5305 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5E20 DUP2 DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2407 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5305 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MSTORE DUP4 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD PUSH2 0x2407 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x5E85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x5E90 PUSH2 0x567D JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x5EFE PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x5305 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE POP PUSH1 0x40 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP1 SWAP2 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5F2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x52A6 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x5F4F JUMPI PUSH2 0x5F4F PUSH2 0x593F JUMP JUMPDEST POP PUSH1 0x0 NOT ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x5F69 JUMPI PUSH2 0x5F69 PUSH2 0x593F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5FB6 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 SDIV 0xE4 SWAP11 PUSH30 0x3D7F3015873A2C41E2F68419180F16CEF8FD91645F14BC8E8B733264736F PUSH13 0x634300081B0033000000000000 ", + "sourceMap": "1852:23230:50:-:0;;;3040:272;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3226:4;3233:14;3249:12;3263:8;3191:15;;-1:-1:-1;;;;;4295:24:33;;4287:81;;;;-1:-1:-1;;;4287:81:33;;866:2:62;4287:81:33;;;848:21:62;905:2;885:18;;;878:30;-1:-1:-1;;;924:18:62;;;917:40;974:18;;4287:81:33;;;;;;;;;-1:-1:-1;;;;;4379:42:33;;;;4457:40;;;;;;;;;;;;-1:-1:-1;;;4457:40:33;;;;;;:26;:40::i;:::-;-1:-1:-1;;;;;4431:67:33;;;4540:37;;;;;;;;;;;;-1:-1:-1;;;4540:37:33;;;;;;:26;:37::i;:::-;-1:-1:-1;;;;;4508:70:33;;;4620:43;;;;;;;;;;;;-1:-1:-1;;;4620:43:33;;;;;;:26;:43::i;:::-;-1:-1:-1;;;;;4588:76:33;;;4714:44;;;;;;;;;;;;-1:-1:-1;;;4714:44:33;;;;;;:26;:44::i;:::-;-1:-1:-1;;;;;4674:85:33;;;4805:42;;;;;;;;;;;;-1:-1:-1;;;4805:42:33;;;;;;:26;:42::i;:::-;-1:-1:-1;;;;;4769:79:33;;;4898:44;;;;;;;;;;;;-1:-1:-1;;;4898:44:33;;;;;;:26;:44::i;:::-;-1:-1:-1;;;;;4858:85:33;;;4989:47;;;;;;;;;;;;-1:-1:-1;;;4989:47:33;;;;;;:26;:47::i;:::-;-1:-1:-1;;;;;4953:84:33;;;5084:45;;;;;;;;;;;;-1:-1:-1;;;5084:45:33;;;;;;:26;:45::i;:::-;-1:-1:-1;;;;;5047:83:33;;;5167:38;;;;;;;;;;;;-1:-1:-1;;;5167:38:33;;;;;;:26;:38::i;:::-;-1:-1:-1;;;;;5140:66:33;;;;;;;5420:16;;5303:13;;5269:11;;5339:14;;5376:21;;5459:19;;5501:21;;5545:19;;5587:17;;5222:430;;;;;;;;;;;;;;;;;;;5587:17;;-1:-1:-1;;;;;1336:32:62;;;1318:51;;1405:32;;;1400:2;1385:18;;1378:60;1474:32;;;1469:2;1454:18;;1447:60;1543:32;;;1538:2;1523:18;;1516:60;1613:32;;1607:3;1592:19;;1585:61;1683:32;;1356:3;1662:19;;1655:61;1753:32;;;1747:3;1732:19;;1725:61;1305:3;1290:19;;1003:789;5222:430:33;;;;;;;;-1:-1:-1;;;;;;;2692:52:61;;;;;;;2754:49;;;;;;;2813:43;;;;;;;2866:30;;;;;;;2912:92;;;2028:51:62;;;2110:2;2095:18;;2088:60;;;;2164:18;;;2157:60;;;;2248:2;2233:18;;2226:60;;;;2912:92:61;;2015:3:62;2000:19;2912:92:61;;;;;;;2581:430;;;;3283:22:50::2;:20;;;:22;;:::i;:::-;3040:272:::0;;;;1852:23230;;7673:326:33;7759:7;7778:23;7804:16;;-1:-1:-1;;;;;7804:33:33;;7848:13;7838:24;;;;;;7804:59;;;;;;;;;;;;;2443:25:62;;2431:2;2416:18;;2297:177;7804:59:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7778:85;-1:-1:-1;7945:13:33;-1:-1:-1;;;;;7881:29:33;;7873:87;;;;-1:-1:-1;;;7873:87:33;;;;;;;;:::i;:::-;-1:-1:-1;7977:15:33;7673:326;-1:-1:-1;;7673:326:33:o;7711:422:35:-;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:35;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:35;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:35;-1:-1:-1;;;;;8035:33:35;;;;;8087:29;;3366:50:62;;;8087:29:35;;3354:2:62;3339:18;8087:29:35;;;;;;;7981:146;7760:373;7711:422::o;14:177:62:-;93:13;;-1:-1:-1;;;;;135:31:62;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;2479:208::-;2549:6;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2641:40;2671:9;2641:40;:::i;:::-;2631:50;2479:208;-1:-1:-1;;;2479:208:62:o;2692:525::-;2839:2;2828:9;2821:21;2802:4;2871:6;2865:13;2914:6;2909:2;2898:9;2894:18;2887:34;2939:1;2949:140;2963:6;2960:1;2957:13;2949:140;;;3074:2;3058:14;;;3054:23;;3048:30;3043:2;3024:17;;;3020:26;3013:66;2978:10;2949:140;;;2953:3;3138:1;3133:2;3124:6;3113:9;3109:22;3105:31;3098:42;3208:2;3201;3197:7;3192:2;3184:6;3180:15;3176:29;3165:9;3161:45;3157:54;3149:62;;;2692:525;;;;:::o;3222:200::-;1852:23230:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@_EIP712NameHash_5718": { + "entryPoint": 20350, + "id": 5718, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_EIP712Name_5650": { + "entryPoint": 11411, + "id": 5650, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_EIP712VersionHash_5770": { + "entryPoint": 20453, + "id": 5770, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_EIP712Version_5666": { + "entryPoint": 11572, + "id": 5666, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@__AllocationManager_init_12271": { + "entryPoint": 7893, + "id": 12271, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@__AllocationManager_init_unchained_12282": { + "entryPoint": 15364, + "id": 12282, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@__DataServicePausable_init_1156": { + "entryPoint": 7877, + "id": 1156, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@__DataServicePausable_init_unchained_1163": { + "entryPoint": null, + "id": 1163, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@__DataService_init_642": { + "entryPoint": 7853, + "id": 642, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@__DataService_init_unchained_649": { + "entryPoint": null, + "id": 649, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@__EIP712_init_5484": { + "entryPoint": 15346, + "id": 5484, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@__EIP712_init_unchained_5524": { + "entryPoint": 19367, + "id": 5524, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@__Multicall_init_5167": { + "entryPoint": 7845, + "id": 5167, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@__Ownable_init_4708": { + "entryPoint": 7828, + "id": 4708, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@__Ownable_init_unchained_4735": { + "entryPoint": 15256, + "id": 4735, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@__Pausable_init_unchained_5321": { + "entryPoint": 15317, + "id": 5321, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@__ProvisionManager_init_unchained_1760": { + "entryPoint": 15264, + "id": 1760, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_acceptProvisionParameters_1778": { + "entryPoint": 14600, + "id": 1778, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_allocate_12401": { + "entryPoint": 14826, + "id": 12401, + "parameterSlots": 6, + "returnSlots": 1 + }, + "@_buildDomainSeparator_5557": { + "entryPoint": 19972, + "id": 5557, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_buildStakeClaimId_1051": { + "entryPoint": null, + "id": 1051, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@_checkInitializing_5024": { + "entryPoint": 15219, + "id": 5024, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_checkOwner_4776": { + "entryPoint": 8209, + "id": 4776, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_checkProvisionParameters_1959": { + "entryPoint": 18425, + "id": 1959, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_checkProvisionParameters_2015": { + "entryPoint": 8596, + "id": 2015, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_checkProvisionTokens_1920": { + "entryPoint": 14578, + "id": 1920, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_checkProvisionTokens_1936": { + "entryPoint": 8546, + "id": 1936, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_checkValueInRange_2127": { + "entryPoint": 15372, + "id": 2127, + "parameterSlots": 4, + "returnSlots": 0 + }, + "@_closeAllocation_12890": { + "entryPoint": 10054, + "id": 12890, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_collectIndexingRewards_12657": { + "entryPoint": 13102, + "id": 12657, + "parameterSlots": 3, + "returnSlots": 1 + }, + "@_collectQueryFees_10661": { + "entryPoint": 11817, + "id": 10661, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_contextSuffixLength_5147": { + "entryPoint": null, + "id": 5147, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_curation_13389": { + "entryPoint": 17398, + "id": 13389, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_deleteStakeClaim_970": { + "entryPoint": 15970, + "id": 970, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_disputeManager_13369": { + "entryPoint": 14542, + "id": 13369, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_domainSeparatorV4_5534": { + "entryPoint": 19920, + "id": 5534, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_encodeAllocationProof_12977": { + "entryPoint": 14715, + "id": 12977, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@_getDelegationRatio_2024": { + "entryPoint": null, + "id": 2024, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_getEIP712Storage_5468": { + "entryPoint": 11375, + "id": 5468, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_getInitializableStorage_5101": { + "entryPoint": 7792, + "id": 5101, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_getNextStakeClaim_1028": { + "entryPoint": 15614, + "id": 1028, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_getOwnableStorage_4679": { + "entryPoint": 11601, + "id": 4679, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_getPausableStorage_5277": { + "entryPoint": 9636, + "id": 5277, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_getProvisionTokensRange_2037": { + "entryPoint": null, + "id": 2037, + "parameterSlots": 0, + "returnSlots": 2 + }, + "@_getProvision_2100": { + "entryPoint": 8295, + "id": 2100, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_getStakeClaim_999": { + "entryPoint": 19455, + "id": 999, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_getThawingPeriodRange_10452": { + "entryPoint": 9795, + "id": 10452, + "parameterSlots": 0, + "returnSlots": 2 + }, + "@_getVerifierCutRange_10469": { + "entryPoint": 9517, + "id": 10469, + "parameterSlots": 0, + "returnSlots": 2 + }, + "@_get_11673": { + "entryPoint": 15424, + "id": 11673, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@_graphEpochManager_4580": { + "entryPoint": null, + "id": 4580, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_graphRewardsManager_4590": { + "entryPoint": 16356, + "id": 4590, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_graphStaking_4540": { + "entryPoint": 8259, + "id": 4540, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_graphToken_4530": { + "entryPoint": 17362, + "id": 4530, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_hashTypedDataV4_5573": { + "entryPoint": 18448, + "id": 5573, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@_isInitializing_5092": { + "entryPoint": 18990, + "id": 5092, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_isOverAllocated_12997": { + "entryPoint": 11637, + "id": 12997, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@_lockStake_833": { + "entryPoint": 17537, + "id": 833, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@_migrateLegacyAllocation_12307": { + "entryPoint": 9971, + "id": 12307, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@_msgSender_5130": { + "entryPoint": null, + "id": 5130, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_pause_5402": { + "entryPoint": 11304, + "id": 5402, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_processStakeClaim_958": { + "entryPoint": 15721, + "id": 958, + "parameterSlots": 2, + "returnSlots": 2 + }, + "@_releaseStake_880": { + "entryPoint": 9344, + "id": 880, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_requireNotPaused_5365": { + "entryPoint": 8820, + "id": 5365, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_requirePaused_5378": { + "entryPoint": 9231, + "id": 5378, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_resizeAllocation_12823": { + "entryPoint": 10396, + "id": 12823, + "parameterSlots": 3, + "returnSlots": 1 + }, + "@_revert_6126": { + "entryPoint": 19732, + "id": 6126, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_setDelegationRatio_1793": { + "entryPoint": 8039, + "id": 1793, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_setMaxPOIStaleness_12925": { + "entryPoint": 9918, + "id": 12925, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_setPauseGuardian_1185": { + "entryPoint": 8945, + "id": 1185, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_setProvisionTokensRange_1825": { + "entryPoint": 7921, + "id": 1825, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_setRewardsDestination_12910": { + "entryPoint": 8858, + "id": 12910, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_setStakeToFeesRatio_10683": { + "entryPoint": 8123, + "id": 10683, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_setThawingPeriodRange_1900": { + "entryPoint": 19226, + "id": 1900, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_setVerifierCutRange_1868": { + "entryPoint": 19016, + "id": 1868, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_tapCollector_13379": { + "entryPoint": null, + "id": 13379, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_throwError_6729": { + "entryPoint": 20165, + "id": 6729, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_transferOwnership_4847": { + "entryPoint": 9703, + "id": 4847, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_unpause_5426": { + "entryPoint": 9268, + "id": 5426, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_verifyAllocationProof_13029": { + "entryPoint": 18493, + "id": 13029, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@acceptProvisionPendingParameters_9774": { + "entryPoint": 6996, + "id": 9774, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@addTail_3895": { + "entryPoint": 19773, + "id": 3895, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@allocationProvisionTracker_13053": { + "entryPoint": null, + "id": 13053, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@allocations_13042": { + "entryPoint": null, + "id": 13042, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@check_1554": { + "entryPoint": 17125, + "id": 1554, + "parameterSlots": 4, + "returnSlots": 1 + }, + "@claimsLists_1075": { + "entryPoint": null, + "id": 1075, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@claims_1069": { + "entryPoint": null, + "id": 1069, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@clearPendingRewards_11496": { + "entryPoint": 18253, + "id": 11496, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@close_11534": { + "entryPoint": 16560, + "id": 11534, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@collect_10008": { + "entryPoint": 5993, + "id": 10008, + "parameterSlots": 4, + "returnSlots": 1 + }, + "@create_11382": { + "entryPoint": 18657, + "id": 11382, + "parameterSlots": 6, + "returnSlots": 1 + }, + "@curationFeesCut_10700": { + "entryPoint": null, + "id": 10700, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@delegationRatio_2152": { + "entryPoint": null, + "id": 2152, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@eip712Domain_5634": { + "entryPoint": 5393, + "id": 5634, + "parameterSlots": 0, + "returnSlots": 7 + }, + "@encodeAllocationProof_10402": { + "entryPoint": 7299, + "id": 10402, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@exists_11602": { + "entryPoint": null, + "id": 11602, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@exists_12052": { + "entryPoint": null, + "id": 12052, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@feesProvisionTracker_1063": { + "entryPoint": null, + "id": 1063, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@forceCloseAllocation_10108": { + "entryPoint": 5589, + "id": 10108, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@functionDelegateCall_6046": { + "entryPoint": 11699, + "id": 6046, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@getAllocationData_10340": { + "entryPoint": null, + "id": 10340, + "parameterSlots": 1, + "returnSlots": 5 + }, + "@getAllocation_10301": { + "entryPoint": 2646, + "id": 10301, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@getDelegationRatio_695": { + "entryPoint": null, + "id": 695, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@getLegacyAllocation_10385": { + "entryPoint": null, + "id": 10385, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@getProvisionTokensRange_685": { + "entryPoint": 4933, + "id": 685, + "parameterSlots": 0, + "returnSlots": 2 + }, + "@getSubgraphAllocatedTokens_10354": { + "entryPoint": null, + "id": 10354, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@getThawingPeriodRange_661": { + "entryPoint": 4360, + "id": 661, + "parameterSlots": 0, + "returnSlots": 2 + }, + "@getVerifierCutRange_673": { + "entryPoint": 3871, + "id": 673, + "parameterSlots": 0, + "returnSlots": 2 + }, + "@get_11554": { + "entryPoint": 9048, + "id": 11554, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@indexers_10694": { + "entryPoint": 3890, + "id": 10694, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@initialize_9644": { + "entryPoint": 2776, + "id": 9644, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@isActiveAllocation_10370": { + "entryPoint": 4218, + "id": 10370, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@isAltruistic_11640": { + "entryPoint": 11668, + "id": 11640, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@isInRange_4289": { + "entryPoint": 19432, + "id": 4289, + "parameterSlots": 3, + "returnSlots": 1 + }, + "@isOpen_11621": { + "entryPoint": 9672, + "id": 11621, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@isOverAllocated_10435": { + "entryPoint": 6647, + "id": 10435, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@isStaleAllocation_10420": { + "entryPoint": 3760, + "id": 10420, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@isStale_11587": { + "entryPoint": 9170, + "id": 11587, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@isValidPPM_4261": { + "entryPoint": null, + "id": 4261, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@legacyAllocations_13048": { + "entryPoint": null, + "id": 13048, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@lock_1480": { + "entryPoint": 16864, + "id": 1480, + "parameterSlots": 5, + "returnSlots": 0 + }, + "@maxPOIStaleness_13056": { + "entryPoint": null, + "id": 13056, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@max_6991": { + "entryPoint": 15592, + "id": 6991, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@maximumProvisionTokens_2137": { + "entryPoint": null, + "id": 2137, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@maximumThawingPeriod_2143": { + "entryPoint": null, + "id": 2143, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@maximumVerifierCut_2149": { + "entryPoint": null, + "id": 2149, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@migrateLegacyAllocation_10170": { + "entryPoint": 4398, + "id": 10170, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@migrate_11990": { + "entryPoint": 16193, + "id": 11990, + "parameterSlots": 4, + "returnSlots": 0 + }, + "@minimumProvisionTokens_2134": { + "entryPoint": null, + "id": 2134, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@minimumThawingPeriod_2140": { + "entryPoint": null, + "id": 2140, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@minimumVerifierCut_2146": { + "entryPoint": null, + "id": 2146, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@mulPPM_4219": { + "entryPoint": 17434, + "id": 4219, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@multicall_5250": { + "entryPoint": 5762, + "id": 5250, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@owner_4759": { + "entryPoint": 5562, + "id": 4759, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@pauseGuardians_1101": { + "entryPoint": null, + "id": 1101, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@pause_1130": { + "entryPoint": 5327, + "id": 1130, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@paused_5353": { + "entryPoint": 4197, + "id": 5353, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@presentPOI_11420": { + "entryPoint": 18082, + "id": 11420, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@pushTokens_578": { + "entryPoint": 17907, + "id": 578, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@recover_6486": { + "entryPoint": 19930, + "id": 6486, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@register_9744": { + "entryPoint": 3183, + "id": 9744, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@releaseStake_746": { + "entryPoint": 3861, + "id": 746, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@release_1518": { + "entryPoint": 16731, + "id": 1518, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@removeHead_3969": { + "entryPoint": 19597, + "id": 3969, + "parameterSlots": 3, + "returnSlots": 1 + }, + "@renounceOwnership_4790": { + "entryPoint": 4342, + "id": 4790, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@resizeAllocation_10150": { + "entryPoint": 4949, + "id": 10150, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@revertIfExists_12034": { + "entryPoint": 18572, + "id": 12034, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@rewardsDestination_13061": { + "entryPoint": null, + "id": 13061, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@setCurationCut_10286": { + "entryPoint": 4422, + "id": 10286, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setDelegationRatio_10230": { + "entryPoint": 3158, + "id": 10230, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setMaxPOIStaleness_10258": { + "entryPoint": 4381, + "id": 10258, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setMinimumProvisionTokens_10216": { + "entryPoint": 5307, + "id": 10216, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setPauseGuardian_10187": { + "entryPoint": 3738, + "id": 10187, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@setRewardsDestination_10201": { + "entryPoint": 4371, + "id": 10201, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@setStakeToFeesRatio_10244": { + "entryPoint": 7716, + "id": 10244, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@slash_10052": { + "entryPoint": 6677, + "id": 10052, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@snapshotRewards_11459": { + "entryPoint": 16392, + "id": 11459, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@stakeToFeesRatio_10697": { + "entryPoint": null, + "id": 10697, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@startService_9831": { + "entryPoint": 7318, + "id": 9831, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@stopService_9882": { + "entryPoint": 4538, + "id": 9882, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@subgraphAllocatedTokens_13066": { + "entryPoint": null, + "id": 13066, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@toTypedDataHash_6803": { + "entryPoint": null, + "id": 6803, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@transferOwnership_4818": { + "entryPoint": 7733, + "id": 4818, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@traverse_4086": { + "entryPoint": 16007, + "id": 4086, + "parameterSlots": 6, + "returnSlots": 2 + }, + "@tryRecover_6456": { + "entryPoint": 20088, + "id": 6456, + "parameterSlots": 2, + "returnSlots": 3 + }, + "@tryRecover_6644": { + "entryPoint": 20518, + "id": 6644, + "parameterSlots": 4, + "returnSlots": 3 + }, + "@unpause_1143": { + "entryPoint": 3793, + "id": 1143, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@verifyCallResultFromTarget_6086": { + "entryPoint": 17279, + "id": 6086, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_decode_bytes_calldata": { + "entryPoint": 20949, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_string": { + "entryPoint": 22210, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address": { + "entryPoint": 20817, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address_payable": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address_payable_fromMemory": { + "entryPoint": 23898, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address_payablet_bytes32": { + "entryPoint": 23355, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_addresst_address": { + "entryPoint": 21943, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_addresst_addresst_bytes32": { + "entryPoint": 21396, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_addresst_addresst_uint256": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_addresst_bool": { + "entryPoint": 21112, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { + "entryPoint": 21014, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_addresst_enum$_PaymentTypes_$2166t_bytes_calldata_ptr": { + "entryPoint": 21839, + "id": null, + "parameterSlots": 2, + "returnSlots": 4 + }, + "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr": { + "entryPoint": 21621, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_bool_fromMemory": { + "entryPoint": 22024, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_bytes32": { + "entryPoint": 21169, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_bytes32t_uint256t_address_payablet_bytes_memory_ptr": { + "entryPoint": 23481, + "id": null, + "parameterSlots": 2, + "returnSlots": 4 + }, + "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_payable": { + "entryPoint": 22358, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory": { + "entryPoint": 24178, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory": { + "entryPoint": 23606, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_struct$_SignedRAV_$2546_memory_ptr": { + "entryPoint": 23062, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 23768, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256t_address_payable_fromMemory": { + "entryPoint": 24346, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_uint256t_uint256": { + "entryPoint": 23447, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_uint256t_uint32t_uint256": { + "entryPoint": 20864, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_uint32": { + "entryPoint": 20920, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint32_fromMemory": { + "entryPoint": 23793, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint64_fromMemory": { + "entryPoint": 23822, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_uint32_fromMemory": { + "entryPoint": 23579, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_uint64_fromMemory": { + "entryPoint": 23595, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_enum_PaymentTypes": { + "entryPoint": 23399, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_string": { + "entryPoint": 21253, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__nonPadded_inplace_fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_bytes_calldata_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { + "entryPoint": 22980, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { + "entryPoint": 23870, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { + "entryPoint": 21376, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { + "entryPoint": 22053, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed": { + "entryPoint": 21989, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address_t_enum$_PaymentTypes_$2166__to_t_address_t_address_t_uint8__fromStack_reversed": { + "entryPoint": 24141, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": { + "entryPoint": 24263, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address_t_uint32__to_t_address_t_address_t_uint32__fromStack_reversed": { + "entryPoint": 24432, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_bytes32__to_t_address_t_bytes32__fromStack_reversed": { + "entryPoint": 21596, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 6, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 9, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { + "entryPoint": 21738, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__to_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed": { + "entryPoint": 21444, + "id": null, + "parameterSlots": 8, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_address_t_address__to_t_bytes32_t_address_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 6, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_uint256__to_t_bytes32_t_bytes32_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 22800, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__to_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": 24299, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_enum$_PaymentTypes_$2166__to_t_uint8__fromStack_reversed": { + "entryPoint": 23433, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_enum$_PaymentTypes_$2166_t_bytes_memory_ptr__to_t_uint8_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 24086, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_rational_0_by_1_t_address__to_t_uint8_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__to_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__fromStack_reversed": { + "entryPoint": 23927, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_struct$_State_$11307_memory_ptr__to_t_struct$_State_$11307_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_struct$_State_$11933_memory_ptr__to_t_struct$_State_$11933_memory_ptr__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_string_memory_ptr_t_string_memory_ptr__to_t_uint256_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 21297, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32__to_t_uint256_t_uint256_t_uint256_t_bytes32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 6, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint32_t_uint32__to_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint32_t_uint32__to_t_uint32_t_uint32__fromStack_reversed": { + "entryPoint": 21194, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint64_t_uint64__to_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": null, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed": { + "entryPoint": 21350, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "access_calldata_tail_t_bytes_calldata_ptr": { + "entryPoint": 22910, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "allocate_memory": { + "entryPoint": 22141, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "allocate_memory_4281": { + "entryPoint": 22101, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "allocate_memory_4284": { + "entryPoint": 22175, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "array_dataslot_string_storage": { + "entryPoint": null, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "calldata_array_index_range_access_t_bytes_calldata_ptr": { + "entryPoint": null, + "id": null, + "parameterSlots": 4, + "returnSlots": 2 + }, + "checked_add_t_uint256": { + "entryPoint": 23851, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_div_t_uint256": { + "entryPoint": 24473, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_mul_t_uint256": { + "entryPoint": 24118, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_sub_t_uint256": { + "entryPoint": 22869, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "clean_up_bytearray_end_slots_string_storage": { + "entryPoint": 22539, + "id": null, + "parameterSlots": 3, + "returnSlots": 0 + }, + "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": { + "entryPoint": 22610, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "copy_memory_to_memory_with_cleanup": { + "entryPoint": 21217, + "id": null, + "parameterSlots": 3, + "returnSlots": 0 + }, + "decrement_t_uint256": { + "entryPoint": 24384, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "extract_byte_array_length": { + "entryPoint": 22481, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "extract_used_part_and_set_length_of_short_byte_array": { + "entryPoint": null, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "increment_t_uint256": { + "entryPoint": 24407, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 22847, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x21": { + "entryPoint": 23019, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x32": { + "entryPoint": 22888, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x41": { + "entryPoint": 22079, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_address": { + "entryPoint": 20796, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_bool": { + "entryPoint": 21098, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_uint32": { + "entryPoint": 20846, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_uint64": { + "entryPoint": 23041, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nativeSrc": "0:39589:62", + "nodeType": "YulBlock", + "src": "0:39589:62", + "statements": [ + { + "nativeSrc": "6:3:62", + "nodeType": "YulBlock", + "src": "6:3:62", + "statements": [] + }, + { + "body": { + "nativeSrc": "59:86:62", + "nodeType": "YulBlock", + "src": "59:86:62", + "statements": [ + { + "body": { + "nativeSrc": "123:16:62", + "nodeType": "YulBlock", + "src": "123:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "132:1:62", + "nodeType": "YulLiteral", + "src": "132:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "135:1:62", + "nodeType": "YulLiteral", + "src": "135:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "125:6:62", + "nodeType": "YulIdentifier", + "src": "125:6:62" + }, + "nativeSrc": "125:12:62", + "nodeType": "YulFunctionCall", + "src": "125:12:62" + }, + "nativeSrc": "125:12:62", + "nodeType": "YulExpressionStatement", + "src": "125:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "82:5:62", + "nodeType": "YulIdentifier", + "src": "82:5:62" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "93:5:62", + "nodeType": "YulIdentifier", + "src": "93:5:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "108:3:62", + "nodeType": "YulLiteral", + "src": "108:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "113:1:62", + "nodeType": "YulLiteral", + "src": "113:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "104:3:62", + "nodeType": "YulIdentifier", + "src": "104:3:62" + }, + "nativeSrc": "104:11:62", + "nodeType": "YulFunctionCall", + "src": "104:11:62" + }, + { + "kind": "number", + "nativeSrc": "117:1:62", + "nodeType": "YulLiteral", + "src": "117:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "100:3:62", + "nodeType": "YulIdentifier", + "src": "100:3:62" + }, + "nativeSrc": "100:19:62", + "nodeType": "YulFunctionCall", + "src": "100:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "89:3:62", + "nodeType": "YulIdentifier", + "src": "89:3:62" + }, + "nativeSrc": "89:31:62", + "nodeType": "YulFunctionCall", + "src": "89:31:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "79:2:62", + "nodeType": "YulIdentifier", + "src": "79:2:62" + }, + "nativeSrc": "79:42:62", + "nodeType": "YulFunctionCall", + "src": "79:42:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "72:6:62", + "nodeType": "YulIdentifier", + "src": "72:6:62" + }, + "nativeSrc": "72:50:62", + "nodeType": "YulFunctionCall", + "src": "72:50:62" + }, + "nativeSrc": "69:70:62", + "nodeType": "YulIf", + "src": "69:70:62" + } + ] + }, + "name": "validator_revert_address", + "nativeSrc": "14:131:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "48:5:62", + "nodeType": "YulTypedName", + "src": "48:5:62", + "type": "" + } + ], + "src": "14:131:62" + }, + { + "body": { + "nativeSrc": "220:177:62", + "nodeType": "YulBlock", + "src": "220:177:62", + "statements": [ + { + "body": { + "nativeSrc": "266:16:62", + "nodeType": "YulBlock", + "src": "266:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "275:1:62", + "nodeType": "YulLiteral", + "src": "275:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "278:1:62", + "nodeType": "YulLiteral", + "src": "278:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "268:6:62", + "nodeType": "YulIdentifier", + "src": "268:6:62" + }, + "nativeSrc": "268:12:62", + "nodeType": "YulFunctionCall", + "src": "268:12:62" + }, + "nativeSrc": "268:12:62", + "nodeType": "YulExpressionStatement", + "src": "268:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "241:7:62", + "nodeType": "YulIdentifier", + "src": "241:7:62" + }, + { + "name": "headStart", + "nativeSrc": "250:9:62", + "nodeType": "YulIdentifier", + "src": "250:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "237:3:62", + "nodeType": "YulIdentifier", + "src": "237:3:62" + }, + "nativeSrc": "237:23:62", + "nodeType": "YulFunctionCall", + "src": "237:23:62" + }, + { + "kind": "number", + "nativeSrc": "262:2:62", + "nodeType": "YulLiteral", + "src": "262:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "233:3:62", + "nodeType": "YulIdentifier", + "src": "233:3:62" + }, + "nativeSrc": "233:32:62", + "nodeType": "YulFunctionCall", + "src": "233:32:62" + }, + "nativeSrc": "230:52:62", + "nodeType": "YulIf", + "src": "230:52:62" + }, + { + "nativeSrc": "291:36:62", + "nodeType": "YulVariableDeclaration", + "src": "291:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "317:9:62", + "nodeType": "YulIdentifier", + "src": "317:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "304:12:62", + "nodeType": "YulIdentifier", + "src": "304:12:62" + }, + "nativeSrc": "304:23:62", + "nodeType": "YulFunctionCall", + "src": "304:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "295:5:62", + "nodeType": "YulTypedName", + "src": "295:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "361:5:62", + "nodeType": "YulIdentifier", + "src": "361:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "336:24:62", + "nodeType": "YulIdentifier", + "src": "336:24:62" + }, + "nativeSrc": "336:31:62", + "nodeType": "YulFunctionCall", + "src": "336:31:62" + }, + "nativeSrc": "336:31:62", + "nodeType": "YulExpressionStatement", + "src": "336:31:62" + }, + { + "nativeSrc": "376:15:62", + "nodeType": "YulAssignment", + "src": "376:15:62", + "value": { + "name": "value", + "nativeSrc": "386:5:62", + "nodeType": "YulIdentifier", + "src": "386:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "376:6:62", + "nodeType": "YulIdentifier", + "src": "376:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nativeSrc": "150:247:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "186:9:62", + "nodeType": "YulTypedName", + "src": "186:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "197:7:62", + "nodeType": "YulTypedName", + "src": "197:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "209:6:62", + "nodeType": "YulTypedName", + "src": "209:6:62", + "type": "" + } + ], + "src": "150:247:62" + }, + { + "body": { + "nativeSrc": "551:551:62", + "nodeType": "YulBlock", + "src": "551:551:62", + "statements": [ + { + "nativeSrc": "561:27:62", + "nodeType": "YulAssignment", + "src": "561:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "573:9:62", + "nodeType": "YulIdentifier", + "src": "573:9:62" + }, + { + "kind": "number", + "nativeSrc": "584:3:62", + "nodeType": "YulLiteral", + "src": "584:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "569:3:62", + "nodeType": "YulIdentifier", + "src": "569:3:62" + }, + "nativeSrc": "569:19:62", + "nodeType": "YulFunctionCall", + "src": "569:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "561:4:62", + "nodeType": "YulIdentifier", + "src": "561:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "604:9:62", + "nodeType": "YulIdentifier", + "src": "604:9:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "625:6:62", + "nodeType": "YulIdentifier", + "src": "625:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "619:5:62", + "nodeType": "YulIdentifier", + "src": "619:5:62" + }, + "nativeSrc": "619:13:62", + "nodeType": "YulFunctionCall", + "src": "619:13:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "642:3:62", + "nodeType": "YulLiteral", + "src": "642:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "647:1:62", + "nodeType": "YulLiteral", + "src": "647:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "638:3:62", + "nodeType": "YulIdentifier", + "src": "638:3:62" + }, + "nativeSrc": "638:11:62", + "nodeType": "YulFunctionCall", + "src": "638:11:62" + }, + { + "kind": "number", + "nativeSrc": "651:1:62", + "nodeType": "YulLiteral", + "src": "651:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "634:3:62", + "nodeType": "YulIdentifier", + "src": "634:3:62" + }, + "nativeSrc": "634:19:62", + "nodeType": "YulFunctionCall", + "src": "634:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "615:3:62", + "nodeType": "YulIdentifier", + "src": "615:3:62" + }, + "nativeSrc": "615:39:62", + "nodeType": "YulFunctionCall", + "src": "615:39:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "597:6:62", + "nodeType": "YulIdentifier", + "src": "597:6:62" + }, + "nativeSrc": "597:58:62", + "nodeType": "YulFunctionCall", + "src": "597:58:62" + }, + "nativeSrc": "597:58:62", + "nodeType": "YulExpressionStatement", + "src": "597:58:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "675:9:62", + "nodeType": "YulIdentifier", + "src": "675:9:62" + }, + { + "kind": "number", + "nativeSrc": "686:4:62", + "nodeType": "YulLiteral", + "src": "686:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "671:3:62", + "nodeType": "YulIdentifier", + "src": "671:3:62" + }, + "nativeSrc": "671:20:62", + "nodeType": "YulFunctionCall", + "src": "671:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "703:6:62", + "nodeType": "YulIdentifier", + "src": "703:6:62" + }, + { + "kind": "number", + "nativeSrc": "711:4:62", + "nodeType": "YulLiteral", + "src": "711:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "699:3:62", + "nodeType": "YulIdentifier", + "src": "699:3:62" + }, + "nativeSrc": "699:17:62", + "nodeType": "YulFunctionCall", + "src": "699:17:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "693:5:62", + "nodeType": "YulIdentifier", + "src": "693:5:62" + }, + "nativeSrc": "693:24:62", + "nodeType": "YulFunctionCall", + "src": "693:24:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "664:6:62", + "nodeType": "YulIdentifier", + "src": "664:6:62" + }, + "nativeSrc": "664:54:62", + "nodeType": "YulFunctionCall", + "src": "664:54:62" + }, + "nativeSrc": "664:54:62", + "nodeType": "YulExpressionStatement", + "src": "664:54:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "738:9:62", + "nodeType": "YulIdentifier", + "src": "738:9:62" + }, + { + "kind": "number", + "nativeSrc": "749:4:62", + "nodeType": "YulLiteral", + "src": "749:4:62", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "734:3:62", + "nodeType": "YulIdentifier", + "src": "734:3:62" + }, + "nativeSrc": "734:20:62", + "nodeType": "YulFunctionCall", + "src": "734:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "766:6:62", + "nodeType": "YulIdentifier", + "src": "766:6:62" + }, + { + "kind": "number", + "nativeSrc": "774:4:62", + "nodeType": "YulLiteral", + "src": "774:4:62", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "762:3:62", + "nodeType": "YulIdentifier", + "src": "762:3:62" + }, + "nativeSrc": "762:17:62", + "nodeType": "YulFunctionCall", + "src": "762:17:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "756:5:62", + "nodeType": "YulIdentifier", + "src": "756:5:62" + }, + "nativeSrc": "756:24:62", + "nodeType": "YulFunctionCall", + "src": "756:24:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "727:6:62", + "nodeType": "YulIdentifier", + "src": "727:6:62" + }, + "nativeSrc": "727:54:62", + "nodeType": "YulFunctionCall", + "src": "727:54:62" + }, + "nativeSrc": "727:54:62", + "nodeType": "YulExpressionStatement", + "src": "727:54:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "801:9:62", + "nodeType": "YulIdentifier", + "src": "801:9:62" + }, + { + "kind": "number", + "nativeSrc": "812:4:62", + "nodeType": "YulLiteral", + "src": "812:4:62", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "797:3:62", + "nodeType": "YulIdentifier", + "src": "797:3:62" + }, + "nativeSrc": "797:20:62", + "nodeType": "YulFunctionCall", + "src": "797:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "829:6:62", + "nodeType": "YulIdentifier", + "src": "829:6:62" + }, + { + "kind": "number", + "nativeSrc": "837:4:62", + "nodeType": "YulLiteral", + "src": "837:4:62", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "825:3:62", + "nodeType": "YulIdentifier", + "src": "825:3:62" + }, + "nativeSrc": "825:17:62", + "nodeType": "YulFunctionCall", + "src": "825:17:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "819:5:62", + "nodeType": "YulIdentifier", + "src": "819:5:62" + }, + "nativeSrc": "819:24:62", + "nodeType": "YulFunctionCall", + "src": "819:24:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "790:6:62", + "nodeType": "YulIdentifier", + "src": "790:6:62" + }, + "nativeSrc": "790:54:62", + "nodeType": "YulFunctionCall", + "src": "790:54:62" + }, + "nativeSrc": "790:54:62", + "nodeType": "YulExpressionStatement", + "src": "790:54:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "864:9:62", + "nodeType": "YulIdentifier", + "src": "864:9:62" + }, + { + "kind": "number", + "nativeSrc": "875:4:62", + "nodeType": "YulLiteral", + "src": "875:4:62", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "860:3:62", + "nodeType": "YulIdentifier", + "src": "860:3:62" + }, + "nativeSrc": "860:20:62", + "nodeType": "YulFunctionCall", + "src": "860:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "892:6:62", + "nodeType": "YulIdentifier", + "src": "892:6:62" + }, + { + "kind": "number", + "nativeSrc": "900:4:62", + "nodeType": "YulLiteral", + "src": "900:4:62", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "888:3:62", + "nodeType": "YulIdentifier", + "src": "888:3:62" + }, + "nativeSrc": "888:17:62", + "nodeType": "YulFunctionCall", + "src": "888:17:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "882:5:62", + "nodeType": "YulIdentifier", + "src": "882:5:62" + }, + "nativeSrc": "882:24:62", + "nodeType": "YulFunctionCall", + "src": "882:24:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "853:6:62", + "nodeType": "YulIdentifier", + "src": "853:6:62" + }, + "nativeSrc": "853:54:62", + "nodeType": "YulFunctionCall", + "src": "853:54:62" + }, + "nativeSrc": "853:54:62", + "nodeType": "YulExpressionStatement", + "src": "853:54:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "927:9:62", + "nodeType": "YulIdentifier", + "src": "927:9:62" + }, + { + "kind": "number", + "nativeSrc": "938:4:62", + "nodeType": "YulLiteral", + "src": "938:4:62", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "923:3:62", + "nodeType": "YulIdentifier", + "src": "923:3:62" + }, + "nativeSrc": "923:20:62", + "nodeType": "YulFunctionCall", + "src": "923:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "955:6:62", + "nodeType": "YulIdentifier", + "src": "955:6:62" + }, + { + "kind": "number", + "nativeSrc": "963:4:62", + "nodeType": "YulLiteral", + "src": "963:4:62", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "951:3:62", + "nodeType": "YulIdentifier", + "src": "951:3:62" + }, + "nativeSrc": "951:17:62", + "nodeType": "YulFunctionCall", + "src": "951:17:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "945:5:62", + "nodeType": "YulIdentifier", + "src": "945:5:62" + }, + "nativeSrc": "945:24:62", + "nodeType": "YulFunctionCall", + "src": "945:24:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "916:6:62", + "nodeType": "YulIdentifier", + "src": "916:6:62" + }, + "nativeSrc": "916:54:62", + "nodeType": "YulFunctionCall", + "src": "916:54:62" + }, + "nativeSrc": "916:54:62", + "nodeType": "YulExpressionStatement", + "src": "916:54:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "990:9:62", + "nodeType": "YulIdentifier", + "src": "990:9:62" + }, + { + "kind": "number", + "nativeSrc": "1001:4:62", + "nodeType": "YulLiteral", + "src": "1001:4:62", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "986:3:62", + "nodeType": "YulIdentifier", + "src": "986:3:62" + }, + "nativeSrc": "986:20:62", + "nodeType": "YulFunctionCall", + "src": "986:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1018:6:62", + "nodeType": "YulIdentifier", + "src": "1018:6:62" + }, + { + "kind": "number", + "nativeSrc": "1026:4:62", + "nodeType": "YulLiteral", + "src": "1026:4:62", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1014:3:62", + "nodeType": "YulIdentifier", + "src": "1014:3:62" + }, + "nativeSrc": "1014:17:62", + "nodeType": "YulFunctionCall", + "src": "1014:17:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1008:5:62", + "nodeType": "YulIdentifier", + "src": "1008:5:62" + }, + "nativeSrc": "1008:24:62", + "nodeType": "YulFunctionCall", + "src": "1008:24:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "979:6:62", + "nodeType": "YulIdentifier", + "src": "979:6:62" + }, + "nativeSrc": "979:54:62", + "nodeType": "YulFunctionCall", + "src": "979:54:62" + }, + "nativeSrc": "979:54:62", + "nodeType": "YulExpressionStatement", + "src": "979:54:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1053:9:62", + "nodeType": "YulIdentifier", + "src": "1053:9:62" + }, + { + "kind": "number", + "nativeSrc": "1064:4:62", + "nodeType": "YulLiteral", + "src": "1064:4:62", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1049:3:62", + "nodeType": "YulIdentifier", + "src": "1049:3:62" + }, + "nativeSrc": "1049:20:62", + "nodeType": "YulFunctionCall", + "src": "1049:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1081:6:62", + "nodeType": "YulIdentifier", + "src": "1081:6:62" + }, + { + "kind": "number", + "nativeSrc": "1089:4:62", + "nodeType": "YulLiteral", + "src": "1089:4:62", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1077:3:62", + "nodeType": "YulIdentifier", + "src": "1077:3:62" + }, + "nativeSrc": "1077:17:62", + "nodeType": "YulFunctionCall", + "src": "1077:17:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1071:5:62", + "nodeType": "YulIdentifier", + "src": "1071:5:62" + }, + "nativeSrc": "1071:24:62", + "nodeType": "YulFunctionCall", + "src": "1071:24:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1042:6:62", + "nodeType": "YulIdentifier", + "src": "1042:6:62" + }, + "nativeSrc": "1042:54:62", + "nodeType": "YulFunctionCall", + "src": "1042:54:62" + }, + "nativeSrc": "1042:54:62", + "nodeType": "YulExpressionStatement", + "src": "1042:54:62" + } + ] + }, + "name": "abi_encode_tuple_t_struct$_State_$11307_memory_ptr__to_t_struct$_State_$11307_memory_ptr__fromStack_reversed", + "nativeSrc": "402:700:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "520:9:62", + "nodeType": "YulTypedName", + "src": "520:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "531:6:62", + "nodeType": "YulTypedName", + "src": "531:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "542:4:62", + "nodeType": "YulTypedName", + "src": "542:4:62", + "type": "" + } + ], + "src": "402:700:62" + }, + { + "body": { + "nativeSrc": "1208:76:62", + "nodeType": "YulBlock", + "src": "1208:76:62", + "statements": [ + { + "nativeSrc": "1218:26:62", + "nodeType": "YulAssignment", + "src": "1218:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1230:9:62", + "nodeType": "YulIdentifier", + "src": "1230:9:62" + }, + { + "kind": "number", + "nativeSrc": "1241:2:62", + "nodeType": "YulLiteral", + "src": "1241:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1226:3:62", + "nodeType": "YulIdentifier", + "src": "1226:3:62" + }, + "nativeSrc": "1226:18:62", + "nodeType": "YulFunctionCall", + "src": "1226:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1218:4:62", + "nodeType": "YulIdentifier", + "src": "1218:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1260:9:62", + "nodeType": "YulIdentifier", + "src": "1260:9:62" + }, + { + "name": "value0", + "nativeSrc": "1271:6:62", + "nodeType": "YulIdentifier", + "src": "1271:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1253:6:62", + "nodeType": "YulIdentifier", + "src": "1253:6:62" + }, + "nativeSrc": "1253:25:62", + "nodeType": "YulFunctionCall", + "src": "1253:25:62" + }, + "nativeSrc": "1253:25:62", + "nodeType": "YulExpressionStatement", + "src": "1253:25:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nativeSrc": "1107:177:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1177:9:62", + "nodeType": "YulTypedName", + "src": "1177:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1188:6:62", + "nodeType": "YulTypedName", + "src": "1188:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1199:4:62", + "nodeType": "YulTypedName", + "src": "1199:4:62", + "type": "" + } + ], + "src": "1107:177:62" + }, + { + "body": { + "nativeSrc": "1474:206:62", + "nodeType": "YulBlock", + "src": "1474:206:62", + "statements": [ + { + "nativeSrc": "1484:27:62", + "nodeType": "YulAssignment", + "src": "1484:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1496:9:62", + "nodeType": "YulIdentifier", + "src": "1496:9:62" + }, + { + "kind": "number", + "nativeSrc": "1507:3:62", + "nodeType": "YulLiteral", + "src": "1507:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1492:3:62", + "nodeType": "YulIdentifier", + "src": "1492:3:62" + }, + "nativeSrc": "1492:19:62", + "nodeType": "YulFunctionCall", + "src": "1492:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1484:4:62", + "nodeType": "YulIdentifier", + "src": "1484:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1527:9:62", + "nodeType": "YulIdentifier", + "src": "1527:9:62" + }, + { + "name": "value0", + "nativeSrc": "1538:6:62", + "nodeType": "YulIdentifier", + "src": "1538:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1520:6:62", + "nodeType": "YulIdentifier", + "src": "1520:6:62" + }, + "nativeSrc": "1520:25:62", + "nodeType": "YulFunctionCall", + "src": "1520:25:62" + }, + "nativeSrc": "1520:25:62", + "nodeType": "YulExpressionStatement", + "src": "1520:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1565:9:62", + "nodeType": "YulIdentifier", + "src": "1565:9:62" + }, + { + "kind": "number", + "nativeSrc": "1576:2:62", + "nodeType": "YulLiteral", + "src": "1576:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1561:3:62", + "nodeType": "YulIdentifier", + "src": "1561:3:62" + }, + "nativeSrc": "1561:18:62", + "nodeType": "YulFunctionCall", + "src": "1561:18:62" + }, + { + "name": "value1", + "nativeSrc": "1581:6:62", + "nodeType": "YulIdentifier", + "src": "1581:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1554:6:62", + "nodeType": "YulIdentifier", + "src": "1554:6:62" + }, + "nativeSrc": "1554:34:62", + "nodeType": "YulFunctionCall", + "src": "1554:34:62" + }, + "nativeSrc": "1554:34:62", + "nodeType": "YulExpressionStatement", + "src": "1554:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1608:9:62", + "nodeType": "YulIdentifier", + "src": "1608:9:62" + }, + { + "kind": "number", + "nativeSrc": "1619:2:62", + "nodeType": "YulLiteral", + "src": "1619:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1604:3:62", + "nodeType": "YulIdentifier", + "src": "1604:3:62" + }, + "nativeSrc": "1604:18:62", + "nodeType": "YulFunctionCall", + "src": "1604:18:62" + }, + { + "name": "value2", + "nativeSrc": "1624:6:62", + "nodeType": "YulIdentifier", + "src": "1624:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1597:6:62", + "nodeType": "YulIdentifier", + "src": "1597:6:62" + }, + "nativeSrc": "1597:34:62", + "nodeType": "YulFunctionCall", + "src": "1597:34:62" + }, + "nativeSrc": "1597:34:62", + "nodeType": "YulExpressionStatement", + "src": "1597:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1651:9:62", + "nodeType": "YulIdentifier", + "src": "1651:9:62" + }, + { + "kind": "number", + "nativeSrc": "1662:2:62", + "nodeType": "YulLiteral", + "src": "1662:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1647:3:62", + "nodeType": "YulIdentifier", + "src": "1647:3:62" + }, + "nativeSrc": "1647:18:62", + "nodeType": "YulFunctionCall", + "src": "1647:18:62" + }, + { + "name": "value3", + "nativeSrc": "1667:6:62", + "nodeType": "YulIdentifier", + "src": "1667:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1640:6:62", + "nodeType": "YulIdentifier", + "src": "1640:6:62" + }, + "nativeSrc": "1640:34:62", + "nodeType": "YulFunctionCall", + "src": "1640:34:62" + }, + "nativeSrc": "1640:34:62", + "nodeType": "YulExpressionStatement", + "src": "1640:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_uint256__to_t_bytes32_t_bytes32_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "1289:391:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1419:9:62", + "nodeType": "YulTypedName", + "src": "1419:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "1430:6:62", + "nodeType": "YulTypedName", + "src": "1430:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1438:6:62", + "nodeType": "YulTypedName", + "src": "1438:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1446:6:62", + "nodeType": "YulTypedName", + "src": "1446:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1454:6:62", + "nodeType": "YulTypedName", + "src": "1454:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1465:4:62", + "nodeType": "YulTypedName", + "src": "1465:4:62", + "type": "" + } + ], + "src": "1289:391:62" + }, + { + "body": { + "nativeSrc": "1729:77:62", + "nodeType": "YulBlock", + "src": "1729:77:62", + "statements": [ + { + "body": { + "nativeSrc": "1784:16:62", + "nodeType": "YulBlock", + "src": "1784:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1793:1:62", + "nodeType": "YulLiteral", + "src": "1793:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1796:1:62", + "nodeType": "YulLiteral", + "src": "1796:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1786:6:62", + "nodeType": "YulIdentifier", + "src": "1786:6:62" + }, + "nativeSrc": "1786:12:62", + "nodeType": "YulFunctionCall", + "src": "1786:12:62" + }, + "nativeSrc": "1786:12:62", + "nodeType": "YulExpressionStatement", + "src": "1786:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1752:5:62", + "nodeType": "YulIdentifier", + "src": "1752:5:62" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1763:5:62", + "nodeType": "YulIdentifier", + "src": "1763:5:62" + }, + { + "kind": "number", + "nativeSrc": "1770:10:62", + "nodeType": "YulLiteral", + "src": "1770:10:62", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1759:3:62", + "nodeType": "YulIdentifier", + "src": "1759:3:62" + }, + "nativeSrc": "1759:22:62", + "nodeType": "YulFunctionCall", + "src": "1759:22:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "1749:2:62", + "nodeType": "YulIdentifier", + "src": "1749:2:62" + }, + "nativeSrc": "1749:33:62", + "nodeType": "YulFunctionCall", + "src": "1749:33:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1742:6:62", + "nodeType": "YulIdentifier", + "src": "1742:6:62" + }, + "nativeSrc": "1742:41:62", + "nodeType": "YulFunctionCall", + "src": "1742:41:62" + }, + "nativeSrc": "1739:61:62", + "nodeType": "YulIf", + "src": "1739:61:62" + } + ] + }, + "name": "validator_revert_uint32", + "nativeSrc": "1685:121:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "1718:5:62", + "nodeType": "YulTypedName", + "src": "1718:5:62", + "type": "" + } + ], + "src": "1685:121:62" + }, + { + "body": { + "nativeSrc": "1914:382:62", + "nodeType": "YulBlock", + "src": "1914:382:62", + "statements": [ + { + "body": { + "nativeSrc": "1960:16:62", + "nodeType": "YulBlock", + "src": "1960:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1969:1:62", + "nodeType": "YulLiteral", + "src": "1969:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1972:1:62", + "nodeType": "YulLiteral", + "src": "1972:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1962:6:62", + "nodeType": "YulIdentifier", + "src": "1962:6:62" + }, + "nativeSrc": "1962:12:62", + "nodeType": "YulFunctionCall", + "src": "1962:12:62" + }, + "nativeSrc": "1962:12:62", + "nodeType": "YulExpressionStatement", + "src": "1962:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1935:7:62", + "nodeType": "YulIdentifier", + "src": "1935:7:62" + }, + { + "name": "headStart", + "nativeSrc": "1944:9:62", + "nodeType": "YulIdentifier", + "src": "1944:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1931:3:62", + "nodeType": "YulIdentifier", + "src": "1931:3:62" + }, + "nativeSrc": "1931:23:62", + "nodeType": "YulFunctionCall", + "src": "1931:23:62" + }, + { + "kind": "number", + "nativeSrc": "1956:2:62", + "nodeType": "YulLiteral", + "src": "1956:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1927:3:62", + "nodeType": "YulIdentifier", + "src": "1927:3:62" + }, + "nativeSrc": "1927:32:62", + "nodeType": "YulFunctionCall", + "src": "1927:32:62" + }, + "nativeSrc": "1924:52:62", + "nodeType": "YulIf", + "src": "1924:52:62" + }, + { + "nativeSrc": "1985:14:62", + "nodeType": "YulVariableDeclaration", + "src": "1985:14:62", + "value": { + "kind": "number", + "nativeSrc": "1998:1:62", + "nodeType": "YulLiteral", + "src": "1998:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "1989:5:62", + "nodeType": "YulTypedName", + "src": "1989:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "2008:32:62", + "nodeType": "YulAssignment", + "src": "2008:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2030:9:62", + "nodeType": "YulIdentifier", + "src": "2030:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2017:12:62", + "nodeType": "YulIdentifier", + "src": "2017:12:62" + }, + "nativeSrc": "2017:23:62", + "nodeType": "YulFunctionCall", + "src": "2017:23:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "2008:5:62", + "nodeType": "YulIdentifier", + "src": "2008:5:62" + } + ] + }, + { + "nativeSrc": "2049:15:62", + "nodeType": "YulAssignment", + "src": "2049:15:62", + "value": { + "name": "value", + "nativeSrc": "2059:5:62", + "nodeType": "YulIdentifier", + "src": "2059:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2049:6:62", + "nodeType": "YulIdentifier", + "src": "2049:6:62" + } + ] + }, + { + "nativeSrc": "2073:47:62", + "nodeType": "YulVariableDeclaration", + "src": "2073:47:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2105:9:62", + "nodeType": "YulIdentifier", + "src": "2105:9:62" + }, + { + "kind": "number", + "nativeSrc": "2116:2:62", + "nodeType": "YulLiteral", + "src": "2116:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2101:3:62", + "nodeType": "YulIdentifier", + "src": "2101:3:62" + }, + "nativeSrc": "2101:18:62", + "nodeType": "YulFunctionCall", + "src": "2101:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2088:12:62", + "nodeType": "YulIdentifier", + "src": "2088:12:62" + }, + "nativeSrc": "2088:32:62", + "nodeType": "YulFunctionCall", + "src": "2088:32:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "2077:7:62", + "nodeType": "YulTypedName", + "src": "2077:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "2153:7:62", + "nodeType": "YulIdentifier", + "src": "2153:7:62" + } + ], + "functionName": { + "name": "validator_revert_uint32", + "nativeSrc": "2129:23:62", + "nodeType": "YulIdentifier", + "src": "2129:23:62" + }, + "nativeSrc": "2129:32:62", + "nodeType": "YulFunctionCall", + "src": "2129:32:62" + }, + "nativeSrc": "2129:32:62", + "nodeType": "YulExpressionStatement", + "src": "2129:32:62" + }, + { + "nativeSrc": "2170:17:62", + "nodeType": "YulAssignment", + "src": "2170:17:62", + "value": { + "name": "value_1", + "nativeSrc": "2180:7:62", + "nodeType": "YulIdentifier", + "src": "2180:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "2170:6:62", + "nodeType": "YulIdentifier", + "src": "2170:6:62" + } + ] + }, + { + "nativeSrc": "2196:16:62", + "nodeType": "YulVariableDeclaration", + "src": "2196:16:62", + "value": { + "kind": "number", + "nativeSrc": "2211:1:62", + "nodeType": "YulLiteral", + "src": "2211:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "2200:7:62", + "nodeType": "YulTypedName", + "src": "2200:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "2221:43:62", + "nodeType": "YulAssignment", + "src": "2221:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2249:9:62", + "nodeType": "YulIdentifier", + "src": "2249:9:62" + }, + { + "kind": "number", + "nativeSrc": "2260:2:62", + "nodeType": "YulLiteral", + "src": "2260:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2245:3:62", + "nodeType": "YulIdentifier", + "src": "2245:3:62" + }, + "nativeSrc": "2245:18:62", + "nodeType": "YulFunctionCall", + "src": "2245:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2232:12:62", + "nodeType": "YulIdentifier", + "src": "2232:12:62" + }, + "nativeSrc": "2232:32:62", + "nodeType": "YulFunctionCall", + "src": "2232:32:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "2221:7:62", + "nodeType": "YulIdentifier", + "src": "2221:7:62" + } + ] + }, + { + "nativeSrc": "2273:17:62", + "nodeType": "YulAssignment", + "src": "2273:17:62", + "value": { + "name": "value_2", + "nativeSrc": "2283:7:62", + "nodeType": "YulIdentifier", + "src": "2283:7:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "2273:6:62", + "nodeType": "YulIdentifier", + "src": "2273:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint32t_uint256", + "nativeSrc": "1811:485:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1864:9:62", + "nodeType": "YulTypedName", + "src": "1864:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1875:7:62", + "nodeType": "YulTypedName", + "src": "1875:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1887:6:62", + "nodeType": "YulTypedName", + "src": "1887:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1895:6:62", + "nodeType": "YulTypedName", + "src": "1895:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1903:6:62", + "nodeType": "YulTypedName", + "src": "1903:6:62", + "type": "" + } + ], + "src": "1811:485:62" + }, + { + "body": { + "nativeSrc": "2370:176:62", + "nodeType": "YulBlock", + "src": "2370:176:62", + "statements": [ + { + "body": { + "nativeSrc": "2416:16:62", + "nodeType": "YulBlock", + "src": "2416:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2425:1:62", + "nodeType": "YulLiteral", + "src": "2425:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2428:1:62", + "nodeType": "YulLiteral", + "src": "2428:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2418:6:62", + "nodeType": "YulIdentifier", + "src": "2418:6:62" + }, + "nativeSrc": "2418:12:62", + "nodeType": "YulFunctionCall", + "src": "2418:12:62" + }, + "nativeSrc": "2418:12:62", + "nodeType": "YulExpressionStatement", + "src": "2418:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "2391:7:62", + "nodeType": "YulIdentifier", + "src": "2391:7:62" + }, + { + "name": "headStart", + "nativeSrc": "2400:9:62", + "nodeType": "YulIdentifier", + "src": "2400:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2387:3:62", + "nodeType": "YulIdentifier", + "src": "2387:3:62" + }, + "nativeSrc": "2387:23:62", + "nodeType": "YulFunctionCall", + "src": "2387:23:62" + }, + { + "kind": "number", + "nativeSrc": "2412:2:62", + "nodeType": "YulLiteral", + "src": "2412:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "2383:3:62", + "nodeType": "YulIdentifier", + "src": "2383:3:62" + }, + "nativeSrc": "2383:32:62", + "nodeType": "YulFunctionCall", + "src": "2383:32:62" + }, + "nativeSrc": "2380:52:62", + "nodeType": "YulIf", + "src": "2380:52:62" + }, + { + "nativeSrc": "2441:36:62", + "nodeType": "YulVariableDeclaration", + "src": "2441:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2467:9:62", + "nodeType": "YulIdentifier", + "src": "2467:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2454:12:62", + "nodeType": "YulIdentifier", + "src": "2454:12:62" + }, + "nativeSrc": "2454:23:62", + "nodeType": "YulFunctionCall", + "src": "2454:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "2445:5:62", + "nodeType": "YulTypedName", + "src": "2445:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "2510:5:62", + "nodeType": "YulIdentifier", + "src": "2510:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint32", + "nativeSrc": "2486:23:62", + "nodeType": "YulIdentifier", + "src": "2486:23:62" + }, + "nativeSrc": "2486:30:62", + "nodeType": "YulFunctionCall", + "src": "2486:30:62" + }, + "nativeSrc": "2486:30:62", + "nodeType": "YulExpressionStatement", + "src": "2486:30:62" + }, + { + "nativeSrc": "2525:15:62", + "nodeType": "YulAssignment", + "src": "2525:15:62", + "value": { + "name": "value", + "nativeSrc": "2535:5:62", + "nodeType": "YulIdentifier", + "src": "2535:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2525:6:62", + "nodeType": "YulIdentifier", + "src": "2525:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint32", + "nativeSrc": "2301:245:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2336:9:62", + "nodeType": "YulTypedName", + "src": "2336:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "2347:7:62", + "nodeType": "YulTypedName", + "src": "2347:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "2359:6:62", + "nodeType": "YulTypedName", + "src": "2359:6:62", + "type": "" + } + ], + "src": "2301:245:62" + }, + { + "body": { + "nativeSrc": "2650:93:62", + "nodeType": "YulBlock", + "src": "2650:93:62", + "statements": [ + { + "nativeSrc": "2660:26:62", + "nodeType": "YulAssignment", + "src": "2660:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2672:9:62", + "nodeType": "YulIdentifier", + "src": "2672:9:62" + }, + { + "kind": "number", + "nativeSrc": "2683:2:62", + "nodeType": "YulLiteral", + "src": "2683:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2668:3:62", + "nodeType": "YulIdentifier", + "src": "2668:3:62" + }, + "nativeSrc": "2668:18:62", + "nodeType": "YulFunctionCall", + "src": "2668:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2660:4:62", + "nodeType": "YulIdentifier", + "src": "2660:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2702:9:62", + "nodeType": "YulIdentifier", + "src": "2702:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "2717:6:62", + "nodeType": "YulIdentifier", + "src": "2717:6:62" + }, + { + "kind": "number", + "nativeSrc": "2725:10:62", + "nodeType": "YulLiteral", + "src": "2725:10:62", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2713:3:62", + "nodeType": "YulIdentifier", + "src": "2713:3:62" + }, + "nativeSrc": "2713:23:62", + "nodeType": "YulFunctionCall", + "src": "2713:23:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2695:6:62", + "nodeType": "YulIdentifier", + "src": "2695:6:62" + }, + "nativeSrc": "2695:42:62", + "nodeType": "YulFunctionCall", + "src": "2695:42:62" + }, + "nativeSrc": "2695:42:62", + "nodeType": "YulExpressionStatement", + "src": "2695:42:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed", + "nativeSrc": "2551:192:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2619:9:62", + "nodeType": "YulTypedName", + "src": "2619:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2630:6:62", + "nodeType": "YulTypedName", + "src": "2630:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2641:4:62", + "nodeType": "YulTypedName", + "src": "2641:4:62", + "type": "" + } + ], + "src": "2551:192:62" + }, + { + "body": { + "nativeSrc": "2820:275:62", + "nodeType": "YulBlock", + "src": "2820:275:62", + "statements": [ + { + "body": { + "nativeSrc": "2869:16:62", + "nodeType": "YulBlock", + "src": "2869:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2878:1:62", + "nodeType": "YulLiteral", + "src": "2878:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2881:1:62", + "nodeType": "YulLiteral", + "src": "2881:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2871:6:62", + "nodeType": "YulIdentifier", + "src": "2871:6:62" + }, + "nativeSrc": "2871:12:62", + "nodeType": "YulFunctionCall", + "src": "2871:12:62" + }, + "nativeSrc": "2871:12:62", + "nodeType": "YulExpressionStatement", + "src": "2871:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "2848:6:62", + "nodeType": "YulIdentifier", + "src": "2848:6:62" + }, + { + "kind": "number", + "nativeSrc": "2856:4:62", + "nodeType": "YulLiteral", + "src": "2856:4:62", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2844:3:62", + "nodeType": "YulIdentifier", + "src": "2844:3:62" + }, + "nativeSrc": "2844:17:62", + "nodeType": "YulFunctionCall", + "src": "2844:17:62" + }, + { + "name": "end", + "nativeSrc": "2863:3:62", + "nodeType": "YulIdentifier", + "src": "2863:3:62" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "2840:3:62", + "nodeType": "YulIdentifier", + "src": "2840:3:62" + }, + "nativeSrc": "2840:27:62", + "nodeType": "YulFunctionCall", + "src": "2840:27:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "2833:6:62", + "nodeType": "YulIdentifier", + "src": "2833:6:62" + }, + "nativeSrc": "2833:35:62", + "nodeType": "YulFunctionCall", + "src": "2833:35:62" + }, + "nativeSrc": "2830:55:62", + "nodeType": "YulIf", + "src": "2830:55:62" + }, + { + "nativeSrc": "2894:30:62", + "nodeType": "YulAssignment", + "src": "2894:30:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "2917:6:62", + "nodeType": "YulIdentifier", + "src": "2917:6:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2904:12:62", + "nodeType": "YulIdentifier", + "src": "2904:12:62" + }, + "nativeSrc": "2904:20:62", + "nodeType": "YulFunctionCall", + "src": "2904:20:62" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "2894:6:62", + "nodeType": "YulIdentifier", + "src": "2894:6:62" + } + ] + }, + { + "body": { + "nativeSrc": "2967:16:62", + "nodeType": "YulBlock", + "src": "2967:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2976:1:62", + "nodeType": "YulLiteral", + "src": "2976:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2979:1:62", + "nodeType": "YulLiteral", + "src": "2979:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2969:6:62", + "nodeType": "YulIdentifier", + "src": "2969:6:62" + }, + "nativeSrc": "2969:12:62", + "nodeType": "YulFunctionCall", + "src": "2969:12:62" + }, + "nativeSrc": "2969:12:62", + "nodeType": "YulExpressionStatement", + "src": "2969:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nativeSrc": "2939:6:62", + "nodeType": "YulIdentifier", + "src": "2939:6:62" + }, + { + "kind": "number", + "nativeSrc": "2947:18:62", + "nodeType": "YulLiteral", + "src": "2947:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "2936:2:62", + "nodeType": "YulIdentifier", + "src": "2936:2:62" + }, + "nativeSrc": "2936:30:62", + "nodeType": "YulFunctionCall", + "src": "2936:30:62" + }, + "nativeSrc": "2933:50:62", + "nodeType": "YulIf", + "src": "2933:50:62" + }, + { + "nativeSrc": "2992:29:62", + "nodeType": "YulAssignment", + "src": "2992:29:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "3008:6:62", + "nodeType": "YulIdentifier", + "src": "3008:6:62" + }, + { + "kind": "number", + "nativeSrc": "3016:4:62", + "nodeType": "YulLiteral", + "src": "3016:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3004:3:62", + "nodeType": "YulIdentifier", + "src": "3004:3:62" + }, + "nativeSrc": "3004:17:62", + "nodeType": "YulFunctionCall", + "src": "3004:17:62" + }, + "variableNames": [ + { + "name": "arrayPos", + "nativeSrc": "2992:8:62", + "nodeType": "YulIdentifier", + "src": "2992:8:62" + } + ] + }, + { + "body": { + "nativeSrc": "3073:16:62", + "nodeType": "YulBlock", + "src": "3073:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3082:1:62", + "nodeType": "YulLiteral", + "src": "3082:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3085:1:62", + "nodeType": "YulLiteral", + "src": "3085:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3075:6:62", + "nodeType": "YulIdentifier", + "src": "3075:6:62" + }, + "nativeSrc": "3075:12:62", + "nodeType": "YulFunctionCall", + "src": "3075:12:62" + }, + "nativeSrc": "3075:12:62", + "nodeType": "YulExpressionStatement", + "src": "3075:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "3044:6:62", + "nodeType": "YulIdentifier", + "src": "3044:6:62" + }, + { + "name": "length", + "nativeSrc": "3052:6:62", + "nodeType": "YulIdentifier", + "src": "3052:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3040:3:62", + "nodeType": "YulIdentifier", + "src": "3040:3:62" + }, + "nativeSrc": "3040:19:62", + "nodeType": "YulFunctionCall", + "src": "3040:19:62" + }, + { + "kind": "number", + "nativeSrc": "3061:4:62", + "nodeType": "YulLiteral", + "src": "3061:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3036:3:62", + "nodeType": "YulIdentifier", + "src": "3036:3:62" + }, + "nativeSrc": "3036:30:62", + "nodeType": "YulFunctionCall", + "src": "3036:30:62" + }, + { + "name": "end", + "nativeSrc": "3068:3:62", + "nodeType": "YulIdentifier", + "src": "3068:3:62" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "3033:2:62", + "nodeType": "YulIdentifier", + "src": "3033:2:62" + }, + "nativeSrc": "3033:39:62", + "nodeType": "YulFunctionCall", + "src": "3033:39:62" + }, + "nativeSrc": "3030:59:62", + "nodeType": "YulIf", + "src": "3030:59:62" + } + ] + }, + "name": "abi_decode_bytes_calldata", + "nativeSrc": "2748:347:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "2783:6:62", + "nodeType": "YulTypedName", + "src": "2783:6:62", + "type": "" + }, + { + "name": "end", + "nativeSrc": "2791:3:62", + "nodeType": "YulTypedName", + "src": "2791:3:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "arrayPos", + "nativeSrc": "2799:8:62", + "nodeType": "YulTypedName", + "src": "2799:8:62", + "type": "" + }, + { + "name": "length", + "nativeSrc": "2809:6:62", + "nodeType": "YulTypedName", + "src": "2809:6:62", + "type": "" + } + ], + "src": "2748:347:62" + }, + { + "body": { + "nativeSrc": "3206:438:62", + "nodeType": "YulBlock", + "src": "3206:438:62", + "statements": [ + { + "body": { + "nativeSrc": "3252:16:62", + "nodeType": "YulBlock", + "src": "3252:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3261:1:62", + "nodeType": "YulLiteral", + "src": "3261:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3264:1:62", + "nodeType": "YulLiteral", + "src": "3264:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3254:6:62", + "nodeType": "YulIdentifier", + "src": "3254:6:62" + }, + "nativeSrc": "3254:12:62", + "nodeType": "YulFunctionCall", + "src": "3254:12:62" + }, + "nativeSrc": "3254:12:62", + "nodeType": "YulExpressionStatement", + "src": "3254:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "3227:7:62", + "nodeType": "YulIdentifier", + "src": "3227:7:62" + }, + { + "name": "headStart", + "nativeSrc": "3236:9:62", + "nodeType": "YulIdentifier", + "src": "3236:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3223:3:62", + "nodeType": "YulIdentifier", + "src": "3223:3:62" + }, + "nativeSrc": "3223:23:62", + "nodeType": "YulFunctionCall", + "src": "3223:23:62" + }, + { + "kind": "number", + "nativeSrc": "3248:2:62", + "nodeType": "YulLiteral", + "src": "3248:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "3219:3:62", + "nodeType": "YulIdentifier", + "src": "3219:3:62" + }, + "nativeSrc": "3219:32:62", + "nodeType": "YulFunctionCall", + "src": "3219:32:62" + }, + "nativeSrc": "3216:52:62", + "nodeType": "YulIf", + "src": "3216:52:62" + }, + { + "nativeSrc": "3277:36:62", + "nodeType": "YulVariableDeclaration", + "src": "3277:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3303:9:62", + "nodeType": "YulIdentifier", + "src": "3303:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "3290:12:62", + "nodeType": "YulIdentifier", + "src": "3290:12:62" + }, + "nativeSrc": "3290:23:62", + "nodeType": "YulFunctionCall", + "src": "3290:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "3281:5:62", + "nodeType": "YulTypedName", + "src": "3281:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "3347:5:62", + "nodeType": "YulIdentifier", + "src": "3347:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "3322:24:62", + "nodeType": "YulIdentifier", + "src": "3322:24:62" + }, + "nativeSrc": "3322:31:62", + "nodeType": "YulFunctionCall", + "src": "3322:31:62" + }, + "nativeSrc": "3322:31:62", + "nodeType": "YulExpressionStatement", + "src": "3322:31:62" + }, + { + "nativeSrc": "3362:15:62", + "nodeType": "YulAssignment", + "src": "3362:15:62", + "value": { + "name": "value", + "nativeSrc": "3372:5:62", + "nodeType": "YulIdentifier", + "src": "3372:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "3362:6:62", + "nodeType": "YulIdentifier", + "src": "3362:6:62" + } + ] + }, + { + "nativeSrc": "3386:46:62", + "nodeType": "YulVariableDeclaration", + "src": "3386:46:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3417:9:62", + "nodeType": "YulIdentifier", + "src": "3417:9:62" + }, + { + "kind": "number", + "nativeSrc": "3428:2:62", + "nodeType": "YulLiteral", + "src": "3428:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3413:3:62", + "nodeType": "YulIdentifier", + "src": "3413:3:62" + }, + "nativeSrc": "3413:18:62", + "nodeType": "YulFunctionCall", + "src": "3413:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "3400:12:62", + "nodeType": "YulIdentifier", + "src": "3400:12:62" + }, + "nativeSrc": "3400:32:62", + "nodeType": "YulFunctionCall", + "src": "3400:32:62" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "3390:6:62", + "nodeType": "YulTypedName", + "src": "3390:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3475:16:62", + "nodeType": "YulBlock", + "src": "3475:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3484:1:62", + "nodeType": "YulLiteral", + "src": "3484:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3487:1:62", + "nodeType": "YulLiteral", + "src": "3487:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3477:6:62", + "nodeType": "YulIdentifier", + "src": "3477:6:62" + }, + "nativeSrc": "3477:12:62", + "nodeType": "YulFunctionCall", + "src": "3477:12:62" + }, + "nativeSrc": "3477:12:62", + "nodeType": "YulExpressionStatement", + "src": "3477:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "3447:6:62", + "nodeType": "YulIdentifier", + "src": "3447:6:62" + }, + { + "kind": "number", + "nativeSrc": "3455:18:62", + "nodeType": "YulLiteral", + "src": "3455:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "3444:2:62", + "nodeType": "YulIdentifier", + "src": "3444:2:62" + }, + "nativeSrc": "3444:30:62", + "nodeType": "YulFunctionCall", + "src": "3444:30:62" + }, + "nativeSrc": "3441:50:62", + "nodeType": "YulIf", + "src": "3441:50:62" + }, + { + "nativeSrc": "3500:84:62", + "nodeType": "YulVariableDeclaration", + "src": "3500:84:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3556:9:62", + "nodeType": "YulIdentifier", + "src": "3556:9:62" + }, + { + "name": "offset", + "nativeSrc": "3567:6:62", + "nodeType": "YulIdentifier", + "src": "3567:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3552:3:62", + "nodeType": "YulIdentifier", + "src": "3552:3:62" + }, + "nativeSrc": "3552:22:62", + "nodeType": "YulFunctionCall", + "src": "3552:22:62" + }, + { + "name": "dataEnd", + "nativeSrc": "3576:7:62", + "nodeType": "YulIdentifier", + "src": "3576:7:62" + } + ], + "functionName": { + "name": "abi_decode_bytes_calldata", + "nativeSrc": "3526:25:62", + "nodeType": "YulIdentifier", + "src": "3526:25:62" + }, + "nativeSrc": "3526:58:62", + "nodeType": "YulFunctionCall", + "src": "3526:58:62" + }, + "variables": [ + { + "name": "value1_1", + "nativeSrc": "3504:8:62", + "nodeType": "YulTypedName", + "src": "3504:8:62", + "type": "" + }, + { + "name": "value2_1", + "nativeSrc": "3514:8:62", + "nodeType": "YulTypedName", + "src": "3514:8:62", + "type": "" + } + ] + }, + { + "nativeSrc": "3593:18:62", + "nodeType": "YulAssignment", + "src": "3593:18:62", + "value": { + "name": "value1_1", + "nativeSrc": "3603:8:62", + "nodeType": "YulIdentifier", + "src": "3603:8:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "3593:6:62", + "nodeType": "YulIdentifier", + "src": "3593:6:62" + } + ] + }, + { + "nativeSrc": "3620:18:62", + "nodeType": "YulAssignment", + "src": "3620:18:62", + "value": { + "name": "value2_1", + "nativeSrc": "3630:8:62", + "nodeType": "YulIdentifier", + "src": "3630:8:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "3620:6:62", + "nodeType": "YulIdentifier", + "src": "3620:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", + "nativeSrc": "3100:544:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3156:9:62", + "nodeType": "YulTypedName", + "src": "3156:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "3167:7:62", + "nodeType": "YulTypedName", + "src": "3167:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "3179:6:62", + "nodeType": "YulTypedName", + "src": "3179:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "3187:6:62", + "nodeType": "YulTypedName", + "src": "3187:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "3195:6:62", + "nodeType": "YulTypedName", + "src": "3195:6:62", + "type": "" + } + ], + "src": "3100:544:62" + }, + { + "body": { + "nativeSrc": "3691:76:62", + "nodeType": "YulBlock", + "src": "3691:76:62", + "statements": [ + { + "body": { + "nativeSrc": "3745:16:62", + "nodeType": "YulBlock", + "src": "3745:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3754:1:62", + "nodeType": "YulLiteral", + "src": "3754:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3757:1:62", + "nodeType": "YulLiteral", + "src": "3757:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3747:6:62", + "nodeType": "YulIdentifier", + "src": "3747:6:62" + }, + "nativeSrc": "3747:12:62", + "nodeType": "YulFunctionCall", + "src": "3747:12:62" + }, + "nativeSrc": "3747:12:62", + "nodeType": "YulExpressionStatement", + "src": "3747:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3714:5:62", + "nodeType": "YulIdentifier", + "src": "3714:5:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3735:5:62", + "nodeType": "YulIdentifier", + "src": "3735:5:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3728:6:62", + "nodeType": "YulIdentifier", + "src": "3728:6:62" + }, + "nativeSrc": "3728:13:62", + "nodeType": "YulFunctionCall", + "src": "3728:13:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3721:6:62", + "nodeType": "YulIdentifier", + "src": "3721:6:62" + }, + "nativeSrc": "3721:21:62", + "nodeType": "YulFunctionCall", + "src": "3721:21:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "3711:2:62", + "nodeType": "YulIdentifier", + "src": "3711:2:62" + }, + "nativeSrc": "3711:32:62", + "nodeType": "YulFunctionCall", + "src": "3711:32:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3704:6:62", + "nodeType": "YulIdentifier", + "src": "3704:6:62" + }, + "nativeSrc": "3704:40:62", + "nodeType": "YulFunctionCall", + "src": "3704:40:62" + }, + "nativeSrc": "3701:60:62", + "nodeType": "YulIf", + "src": "3701:60:62" + } + ] + }, + "name": "validator_revert_bool", + "nativeSrc": "3649:118:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "3680:5:62", + "nodeType": "YulTypedName", + "src": "3680:5:62", + "type": "" + } + ], + "src": "3649:118:62" + }, + { + "body": { + "nativeSrc": "3856:298:62", + "nodeType": "YulBlock", + "src": "3856:298:62", + "statements": [ + { + "body": { + "nativeSrc": "3902:16:62", + "nodeType": "YulBlock", + "src": "3902:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3911:1:62", + "nodeType": "YulLiteral", + "src": "3911:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3914:1:62", + "nodeType": "YulLiteral", + "src": "3914:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3904:6:62", + "nodeType": "YulIdentifier", + "src": "3904:6:62" + }, + "nativeSrc": "3904:12:62", + "nodeType": "YulFunctionCall", + "src": "3904:12:62" + }, + "nativeSrc": "3904:12:62", + "nodeType": "YulExpressionStatement", + "src": "3904:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "3877:7:62", + "nodeType": "YulIdentifier", + "src": "3877:7:62" + }, + { + "name": "headStart", + "nativeSrc": "3886:9:62", + "nodeType": "YulIdentifier", + "src": "3886:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3873:3:62", + "nodeType": "YulIdentifier", + "src": "3873:3:62" + }, + "nativeSrc": "3873:23:62", + "nodeType": "YulFunctionCall", + "src": "3873:23:62" + }, + { + "kind": "number", + "nativeSrc": "3898:2:62", + "nodeType": "YulLiteral", + "src": "3898:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "3869:3:62", + "nodeType": "YulIdentifier", + "src": "3869:3:62" + }, + "nativeSrc": "3869:32:62", + "nodeType": "YulFunctionCall", + "src": "3869:32:62" + }, + "nativeSrc": "3866:52:62", + "nodeType": "YulIf", + "src": "3866:52:62" + }, + { + "nativeSrc": "3927:36:62", + "nodeType": "YulVariableDeclaration", + "src": "3927:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3953:9:62", + "nodeType": "YulIdentifier", + "src": "3953:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "3940:12:62", + "nodeType": "YulIdentifier", + "src": "3940:12:62" + }, + "nativeSrc": "3940:23:62", + "nodeType": "YulFunctionCall", + "src": "3940:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "3931:5:62", + "nodeType": "YulTypedName", + "src": "3931:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "3997:5:62", + "nodeType": "YulIdentifier", + "src": "3997:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "3972:24:62", + "nodeType": "YulIdentifier", + "src": "3972:24:62" + }, + "nativeSrc": "3972:31:62", + "nodeType": "YulFunctionCall", + "src": "3972:31:62" + }, + "nativeSrc": "3972:31:62", + "nodeType": "YulExpressionStatement", + "src": "3972:31:62" + }, + { + "nativeSrc": "4012:15:62", + "nodeType": "YulAssignment", + "src": "4012:15:62", + "value": { + "name": "value", + "nativeSrc": "4022:5:62", + "nodeType": "YulIdentifier", + "src": "4022:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "4012:6:62", + "nodeType": "YulIdentifier", + "src": "4012:6:62" + } + ] + }, + { + "nativeSrc": "4036:47:62", + "nodeType": "YulVariableDeclaration", + "src": "4036:47:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4068:9:62", + "nodeType": "YulIdentifier", + "src": "4068:9:62" + }, + { + "kind": "number", + "nativeSrc": "4079:2:62", + "nodeType": "YulLiteral", + "src": "4079:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4064:3:62", + "nodeType": "YulIdentifier", + "src": "4064:3:62" + }, + "nativeSrc": "4064:18:62", + "nodeType": "YulFunctionCall", + "src": "4064:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "4051:12:62", + "nodeType": "YulIdentifier", + "src": "4051:12:62" + }, + "nativeSrc": "4051:32:62", + "nodeType": "YulFunctionCall", + "src": "4051:32:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "4040:7:62", + "nodeType": "YulTypedName", + "src": "4040:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "4114:7:62", + "nodeType": "YulIdentifier", + "src": "4114:7:62" + } + ], + "functionName": { + "name": "validator_revert_bool", + "nativeSrc": "4092:21:62", + "nodeType": "YulIdentifier", + "src": "4092:21:62" + }, + "nativeSrc": "4092:30:62", + "nodeType": "YulFunctionCall", + "src": "4092:30:62" + }, + "nativeSrc": "4092:30:62", + "nodeType": "YulExpressionStatement", + "src": "4092:30:62" + }, + { + "nativeSrc": "4131:17:62", + "nodeType": "YulAssignment", + "src": "4131:17:62", + "value": { + "name": "value_1", + "nativeSrc": "4141:7:62", + "nodeType": "YulIdentifier", + "src": "4141:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "4131:6:62", + "nodeType": "YulIdentifier", + "src": "4131:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_bool", + "nativeSrc": "3772:382:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3814:9:62", + "nodeType": "YulTypedName", + "src": "3814:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "3825:7:62", + "nodeType": "YulTypedName", + "src": "3825:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "3837:6:62", + "nodeType": "YulTypedName", + "src": "3837:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "3845:6:62", + "nodeType": "YulTypedName", + "src": "3845:6:62", + "type": "" + } + ], + "src": "3772:382:62" + }, + { + "body": { + "nativeSrc": "4229:156:62", + "nodeType": "YulBlock", + "src": "4229:156:62", + "statements": [ + { + "body": { + "nativeSrc": "4275:16:62", + "nodeType": "YulBlock", + "src": "4275:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4284:1:62", + "nodeType": "YulLiteral", + "src": "4284:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "4287:1:62", + "nodeType": "YulLiteral", + "src": "4287:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "4277:6:62", + "nodeType": "YulIdentifier", + "src": "4277:6:62" + }, + "nativeSrc": "4277:12:62", + "nodeType": "YulFunctionCall", + "src": "4277:12:62" + }, + "nativeSrc": "4277:12:62", + "nodeType": "YulExpressionStatement", + "src": "4277:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "4250:7:62", + "nodeType": "YulIdentifier", + "src": "4250:7:62" + }, + { + "name": "headStart", + "nativeSrc": "4259:9:62", + "nodeType": "YulIdentifier", + "src": "4259:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "4246:3:62", + "nodeType": "YulIdentifier", + "src": "4246:3:62" + }, + "nativeSrc": "4246:23:62", + "nodeType": "YulFunctionCall", + "src": "4246:23:62" + }, + { + "kind": "number", + "nativeSrc": "4271:2:62", + "nodeType": "YulLiteral", + "src": "4271:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "4242:3:62", + "nodeType": "YulIdentifier", + "src": "4242:3:62" + }, + "nativeSrc": "4242:32:62", + "nodeType": "YulFunctionCall", + "src": "4242:32:62" + }, + "nativeSrc": "4239:52:62", + "nodeType": "YulIf", + "src": "4239:52:62" + }, + { + "nativeSrc": "4300:14:62", + "nodeType": "YulVariableDeclaration", + "src": "4300:14:62", + "value": { + "kind": "number", + "nativeSrc": "4313:1:62", + "nodeType": "YulLiteral", + "src": "4313:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "4304:5:62", + "nodeType": "YulTypedName", + "src": "4304:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "4323:32:62", + "nodeType": "YulAssignment", + "src": "4323:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4345:9:62", + "nodeType": "YulIdentifier", + "src": "4345:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "4332:12:62", + "nodeType": "YulIdentifier", + "src": "4332:12:62" + }, + "nativeSrc": "4332:23:62", + "nodeType": "YulFunctionCall", + "src": "4332:23:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "4323:5:62", + "nodeType": "YulIdentifier", + "src": "4323:5:62" + } + ] + }, + { + "nativeSrc": "4364:15:62", + "nodeType": "YulAssignment", + "src": "4364:15:62", + "value": { + "name": "value", + "nativeSrc": "4374:5:62", + "nodeType": "YulIdentifier", + "src": "4374:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "4364:6:62", + "nodeType": "YulIdentifier", + "src": "4364:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32", + "nativeSrc": "4159:226:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "4195:9:62", + "nodeType": "YulTypedName", + "src": "4195:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "4206:7:62", + "nodeType": "YulTypedName", + "src": "4206:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "4218:6:62", + "nodeType": "YulTypedName", + "src": "4218:6:62", + "type": "" + } + ], + "src": "4159:226:62" + }, + { + "body": { + "nativeSrc": "4485:92:62", + "nodeType": "YulBlock", + "src": "4485:92:62", + "statements": [ + { + "nativeSrc": "4495:26:62", + "nodeType": "YulAssignment", + "src": "4495:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4507:9:62", + "nodeType": "YulIdentifier", + "src": "4507:9:62" + }, + { + "kind": "number", + "nativeSrc": "4518:2:62", + "nodeType": "YulLiteral", + "src": "4518:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4503:3:62", + "nodeType": "YulIdentifier", + "src": "4503:3:62" + }, + "nativeSrc": "4503:18:62", + "nodeType": "YulFunctionCall", + "src": "4503:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "4495:4:62", + "nodeType": "YulIdentifier", + "src": "4495:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4537:9:62", + "nodeType": "YulIdentifier", + "src": "4537:9:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "4562:6:62", + "nodeType": "YulIdentifier", + "src": "4562:6:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "4555:6:62", + "nodeType": "YulIdentifier", + "src": "4555:6:62" + }, + "nativeSrc": "4555:14:62", + "nodeType": "YulFunctionCall", + "src": "4555:14:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "4548:6:62", + "nodeType": "YulIdentifier", + "src": "4548:6:62" + }, + "nativeSrc": "4548:22:62", + "nodeType": "YulFunctionCall", + "src": "4548:22:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4530:6:62", + "nodeType": "YulIdentifier", + "src": "4530:6:62" + }, + "nativeSrc": "4530:41:62", + "nodeType": "YulFunctionCall", + "src": "4530:41:62" + }, + "nativeSrc": "4530:41:62", + "nodeType": "YulExpressionStatement", + "src": "4530:41:62" + } + ] + }, + "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", + "nativeSrc": "4390:187:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "4454:9:62", + "nodeType": "YulTypedName", + "src": "4454:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "4465:6:62", + "nodeType": "YulTypedName", + "src": "4465:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "4476:4:62", + "nodeType": "YulTypedName", + "src": "4476:4:62", + "type": "" + } + ], + "src": "4390:187:62" + }, + { + "body": { + "nativeSrc": "4652:156:62", + "nodeType": "YulBlock", + "src": "4652:156:62", + "statements": [ + { + "body": { + "nativeSrc": "4698:16:62", + "nodeType": "YulBlock", + "src": "4698:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4707:1:62", + "nodeType": "YulLiteral", + "src": "4707:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "4710:1:62", + "nodeType": "YulLiteral", + "src": "4710:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "4700:6:62", + "nodeType": "YulIdentifier", + "src": "4700:6:62" + }, + "nativeSrc": "4700:12:62", + "nodeType": "YulFunctionCall", + "src": "4700:12:62" + }, + "nativeSrc": "4700:12:62", + "nodeType": "YulExpressionStatement", + "src": "4700:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "4673:7:62", + "nodeType": "YulIdentifier", + "src": "4673:7:62" + }, + { + "name": "headStart", + "nativeSrc": "4682:9:62", + "nodeType": "YulIdentifier", + "src": "4682:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "4669:3:62", + "nodeType": "YulIdentifier", + "src": "4669:3:62" + }, + "nativeSrc": "4669:23:62", + "nodeType": "YulFunctionCall", + "src": "4669:23:62" + }, + { + "kind": "number", + "nativeSrc": "4694:2:62", + "nodeType": "YulLiteral", + "src": "4694:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "4665:3:62", + "nodeType": "YulIdentifier", + "src": "4665:3:62" + }, + "nativeSrc": "4665:32:62", + "nodeType": "YulFunctionCall", + "src": "4665:32:62" + }, + "nativeSrc": "4662:52:62", + "nodeType": "YulIf", + "src": "4662:52:62" + }, + { + "nativeSrc": "4723:14:62", + "nodeType": "YulVariableDeclaration", + "src": "4723:14:62", + "value": { + "kind": "number", + "nativeSrc": "4736:1:62", + "nodeType": "YulLiteral", + "src": "4736:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "4727:5:62", + "nodeType": "YulTypedName", + "src": "4727:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "4746:32:62", + "nodeType": "YulAssignment", + "src": "4746:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4768:9:62", + "nodeType": "YulIdentifier", + "src": "4768:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "4755:12:62", + "nodeType": "YulIdentifier", + "src": "4755:12:62" + }, + "nativeSrc": "4755:23:62", + "nodeType": "YulFunctionCall", + "src": "4755:23:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "4746:5:62", + "nodeType": "YulIdentifier", + "src": "4746:5:62" + } + ] + }, + { + "nativeSrc": "4787:15:62", + "nodeType": "YulAssignment", + "src": "4787:15:62", + "value": { + "name": "value", + "nativeSrc": "4797:5:62", + "nodeType": "YulIdentifier", + "src": "4797:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "4787:6:62", + "nodeType": "YulIdentifier", + "src": "4787:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nativeSrc": "4582:226:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "4618:9:62", + "nodeType": "YulTypedName", + "src": "4618:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "4629:7:62", + "nodeType": "YulTypedName", + "src": "4629:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "4641:6:62", + "nodeType": "YulTypedName", + "src": "4641:6:62", + "type": "" + } + ], + "src": "4582:226:62" + }, + { + "body": { + "nativeSrc": "4938:153:62", + "nodeType": "YulBlock", + "src": "4938:153:62", + "statements": [ + { + "nativeSrc": "4948:26:62", + "nodeType": "YulAssignment", + "src": "4948:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4960:9:62", + "nodeType": "YulIdentifier", + "src": "4960:9:62" + }, + { + "kind": "number", + "nativeSrc": "4971:2:62", + "nodeType": "YulLiteral", + "src": "4971:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4956:3:62", + "nodeType": "YulIdentifier", + "src": "4956:3:62" + }, + "nativeSrc": "4956:18:62", + "nodeType": "YulFunctionCall", + "src": "4956:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "4948:4:62", + "nodeType": "YulIdentifier", + "src": "4948:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4990:9:62", + "nodeType": "YulIdentifier", + "src": "4990:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "5005:6:62", + "nodeType": "YulIdentifier", + "src": "5005:6:62" + }, + { + "kind": "number", + "nativeSrc": "5013:10:62", + "nodeType": "YulLiteral", + "src": "5013:10:62", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "5001:3:62", + "nodeType": "YulIdentifier", + "src": "5001:3:62" + }, + "nativeSrc": "5001:23:62", + "nodeType": "YulFunctionCall", + "src": "5001:23:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4983:6:62", + "nodeType": "YulIdentifier", + "src": "4983:6:62" + }, + "nativeSrc": "4983:42:62", + "nodeType": "YulFunctionCall", + "src": "4983:42:62" + }, + "nativeSrc": "4983:42:62", + "nodeType": "YulExpressionStatement", + "src": "4983:42:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5045:9:62", + "nodeType": "YulIdentifier", + "src": "5045:9:62" + }, + { + "kind": "number", + "nativeSrc": "5056:2:62", + "nodeType": "YulLiteral", + "src": "5056:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5041:3:62", + "nodeType": "YulIdentifier", + "src": "5041:3:62" + }, + "nativeSrc": "5041:18:62", + "nodeType": "YulFunctionCall", + "src": "5041:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "5065:6:62", + "nodeType": "YulIdentifier", + "src": "5065:6:62" + }, + { + "kind": "number", + "nativeSrc": "5073:10:62", + "nodeType": "YulLiteral", + "src": "5073:10:62", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "5061:3:62", + "nodeType": "YulIdentifier", + "src": "5061:3:62" + }, + "nativeSrc": "5061:23:62", + "nodeType": "YulFunctionCall", + "src": "5061:23:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5034:6:62", + "nodeType": "YulIdentifier", + "src": "5034:6:62" + }, + "nativeSrc": "5034:51:62", + "nodeType": "YulFunctionCall", + "src": "5034:51:62" + }, + "nativeSrc": "5034:51:62", + "nodeType": "YulExpressionStatement", + "src": "5034:51:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint32_t_uint32__to_t_uint32_t_uint32__fromStack_reversed", + "nativeSrc": "4813:278:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "4899:9:62", + "nodeType": "YulTypedName", + "src": "4899:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "4910:6:62", + "nodeType": "YulTypedName", + "src": "4910:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "4918:6:62", + "nodeType": "YulTypedName", + "src": "4918:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "4929:4:62", + "nodeType": "YulTypedName", + "src": "4929:4:62", + "type": "" + } + ], + "src": "4813:278:62" + }, + { + "body": { + "nativeSrc": "5162:184:62", + "nodeType": "YulBlock", + "src": "5162:184:62", + "statements": [ + { + "nativeSrc": "5172:10:62", + "nodeType": "YulVariableDeclaration", + "src": "5172:10:62", + "value": { + "kind": "number", + "nativeSrc": "5181:1:62", + "nodeType": "YulLiteral", + "src": "5181:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "5176:1:62", + "nodeType": "YulTypedName", + "src": "5176:1:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "5241:63:62", + "nodeType": "YulBlock", + "src": "5241:63:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nativeSrc": "5266:3:62", + "nodeType": "YulIdentifier", + "src": "5266:3:62" + }, + { + "name": "i", + "nativeSrc": "5271:1:62", + "nodeType": "YulIdentifier", + "src": "5271:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5262:3:62", + "nodeType": "YulIdentifier", + "src": "5262:3:62" + }, + "nativeSrc": "5262:11:62", + "nodeType": "YulFunctionCall", + "src": "5262:11:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "5285:3:62", + "nodeType": "YulIdentifier", + "src": "5285:3:62" + }, + { + "name": "i", + "nativeSrc": "5290:1:62", + "nodeType": "YulIdentifier", + "src": "5290:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5281:3:62", + "nodeType": "YulIdentifier", + "src": "5281:3:62" + }, + "nativeSrc": "5281:11:62", + "nodeType": "YulFunctionCall", + "src": "5281:11:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "5275:5:62", + "nodeType": "YulIdentifier", + "src": "5275:5:62" + }, + "nativeSrc": "5275:18:62", + "nodeType": "YulFunctionCall", + "src": "5275:18:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5255:6:62", + "nodeType": "YulIdentifier", + "src": "5255:6:62" + }, + "nativeSrc": "5255:39:62", + "nodeType": "YulFunctionCall", + "src": "5255:39:62" + }, + "nativeSrc": "5255:39:62", + "nodeType": "YulExpressionStatement", + "src": "5255:39:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "5202:1:62", + "nodeType": "YulIdentifier", + "src": "5202:1:62" + }, + { + "name": "length", + "nativeSrc": "5205:6:62", + "nodeType": "YulIdentifier", + "src": "5205:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "5199:2:62", + "nodeType": "YulIdentifier", + "src": "5199:2:62" + }, + "nativeSrc": "5199:13:62", + "nodeType": "YulFunctionCall", + "src": "5199:13:62" + }, + "nativeSrc": "5191:113:62", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "5213:19:62", + "nodeType": "YulBlock", + "src": "5213:19:62", + "statements": [ + { + "nativeSrc": "5215:15:62", + "nodeType": "YulAssignment", + "src": "5215:15:62", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "5224:1:62", + "nodeType": "YulIdentifier", + "src": "5224:1:62" + }, + { + "kind": "number", + "nativeSrc": "5227:2:62", + "nodeType": "YulLiteral", + "src": "5227:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5220:3:62", + "nodeType": "YulIdentifier", + "src": "5220:3:62" + }, + "nativeSrc": "5220:10:62", + "nodeType": "YulFunctionCall", + "src": "5220:10:62" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "5215:1:62", + "nodeType": "YulIdentifier", + "src": "5215:1:62" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "5195:3:62", + "nodeType": "YulBlock", + "src": "5195:3:62", + "statements": [] + }, + "src": "5191:113:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nativeSrc": "5324:3:62", + "nodeType": "YulIdentifier", + "src": "5324:3:62" + }, + { + "name": "length", + "nativeSrc": "5329:6:62", + "nodeType": "YulIdentifier", + "src": "5329:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5320:3:62", + "nodeType": "YulIdentifier", + "src": "5320:3:62" + }, + "nativeSrc": "5320:16:62", + "nodeType": "YulFunctionCall", + "src": "5320:16:62" + }, + { + "kind": "number", + "nativeSrc": "5338:1:62", + "nodeType": "YulLiteral", + "src": "5338:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5313:6:62", + "nodeType": "YulIdentifier", + "src": "5313:6:62" + }, + "nativeSrc": "5313:27:62", + "nodeType": "YulFunctionCall", + "src": "5313:27:62" + }, + "nativeSrc": "5313:27:62", + "nodeType": "YulExpressionStatement", + "src": "5313:27:62" + } + ] + }, + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "5096:250:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nativeSrc": "5140:3:62", + "nodeType": "YulTypedName", + "src": "5140:3:62", + "type": "" + }, + { + "name": "dst", + "nativeSrc": "5145:3:62", + "nodeType": "YulTypedName", + "src": "5145:3:62", + "type": "" + }, + { + "name": "length", + "nativeSrc": "5150:6:62", + "nodeType": "YulTypedName", + "src": "5150:6:62", + "type": "" + } + ], + "src": "5096:250:62" + }, + { + "body": { + "nativeSrc": "5401:221:62", + "nodeType": "YulBlock", + "src": "5401:221:62", + "statements": [ + { + "nativeSrc": "5411:26:62", + "nodeType": "YulVariableDeclaration", + "src": "5411:26:62", + "value": { + "arguments": [ + { + "name": "value", + "nativeSrc": "5431:5:62", + "nodeType": "YulIdentifier", + "src": "5431:5:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "5425:5:62", + "nodeType": "YulIdentifier", + "src": "5425:5:62" + }, + "nativeSrc": "5425:12:62", + "nodeType": "YulFunctionCall", + "src": "5425:12:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "5415:6:62", + "nodeType": "YulTypedName", + "src": "5415:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5453:3:62", + "nodeType": "YulIdentifier", + "src": "5453:3:62" + }, + { + "name": "length", + "nativeSrc": "5458:6:62", + "nodeType": "YulIdentifier", + "src": "5458:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5446:6:62", + "nodeType": "YulIdentifier", + "src": "5446:6:62" + }, + "nativeSrc": "5446:19:62", + "nodeType": "YulFunctionCall", + "src": "5446:19:62" + }, + "nativeSrc": "5446:19:62", + "nodeType": "YulExpressionStatement", + "src": "5446:19:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "5513:5:62", + "nodeType": "YulIdentifier", + "src": "5513:5:62" + }, + { + "kind": "number", + "nativeSrc": "5520:4:62", + "nodeType": "YulLiteral", + "src": "5520:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5509:3:62", + "nodeType": "YulIdentifier", + "src": "5509:3:62" + }, + "nativeSrc": "5509:16:62", + "nodeType": "YulFunctionCall", + "src": "5509:16:62" + }, + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5531:3:62", + "nodeType": "YulIdentifier", + "src": "5531:3:62" + }, + { + "kind": "number", + "nativeSrc": "5536:4:62", + "nodeType": "YulLiteral", + "src": "5536:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5527:3:62", + "nodeType": "YulIdentifier", + "src": "5527:3:62" + }, + "nativeSrc": "5527:14:62", + "nodeType": "YulFunctionCall", + "src": "5527:14:62" + }, + { + "name": "length", + "nativeSrc": "5543:6:62", + "nodeType": "YulIdentifier", + "src": "5543:6:62" + } + ], + "functionName": { + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "5474:34:62", + "nodeType": "YulIdentifier", + "src": "5474:34:62" + }, + "nativeSrc": "5474:76:62", + "nodeType": "YulFunctionCall", + "src": "5474:76:62" + }, + "nativeSrc": "5474:76:62", + "nodeType": "YulExpressionStatement", + "src": "5474:76:62" + }, + { + "nativeSrc": "5559:57:62", + "nodeType": "YulAssignment", + "src": "5559:57:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5574:3:62", + "nodeType": "YulIdentifier", + "src": "5574:3:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "5587:6:62", + "nodeType": "YulIdentifier", + "src": "5587:6:62" + }, + { + "kind": "number", + "nativeSrc": "5595:2:62", + "nodeType": "YulLiteral", + "src": "5595:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5583:3:62", + "nodeType": "YulIdentifier", + "src": "5583:3:62" + }, + "nativeSrc": "5583:15:62", + "nodeType": "YulFunctionCall", + "src": "5583:15:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5604:2:62", + "nodeType": "YulLiteral", + "src": "5604:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "5600:3:62", + "nodeType": "YulIdentifier", + "src": "5600:3:62" + }, + "nativeSrc": "5600:7:62", + "nodeType": "YulFunctionCall", + "src": "5600:7:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "5579:3:62", + "nodeType": "YulIdentifier", + "src": "5579:3:62" + }, + "nativeSrc": "5579:29:62", + "nodeType": "YulFunctionCall", + "src": "5579:29:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5570:3:62", + "nodeType": "YulIdentifier", + "src": "5570:3:62" + }, + "nativeSrc": "5570:39:62", + "nodeType": "YulFunctionCall", + "src": "5570:39:62" + }, + { + "kind": "number", + "nativeSrc": "5611:4:62", + "nodeType": "YulLiteral", + "src": "5611:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5566:3:62", + "nodeType": "YulIdentifier", + "src": "5566:3:62" + }, + "nativeSrc": "5566:50:62", + "nodeType": "YulFunctionCall", + "src": "5566:50:62" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "5559:3:62", + "nodeType": "YulIdentifier", + "src": "5559:3:62" + } + ] + } + ] + }, + "name": "abi_encode_string", + "nativeSrc": "5351:271:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "5378:5:62", + "nodeType": "YulTypedName", + "src": "5378:5:62", + "type": "" + }, + { + "name": "pos", + "nativeSrc": "5385:3:62", + "nodeType": "YulTypedName", + "src": "5385:3:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "5393:3:62", + "nodeType": "YulTypedName", + "src": "5393:3:62", + "type": "" + } + ], + "src": "5351:271:62" + }, + { + "body": { + "nativeSrc": "5824:257:62", + "nodeType": "YulBlock", + "src": "5824:257:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5841:9:62", + "nodeType": "YulIdentifier", + "src": "5841:9:62" + }, + { + "name": "value0", + "nativeSrc": "5852:6:62", + "nodeType": "YulIdentifier", + "src": "5852:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5834:6:62", + "nodeType": "YulIdentifier", + "src": "5834:6:62" + }, + "nativeSrc": "5834:25:62", + "nodeType": "YulFunctionCall", + "src": "5834:25:62" + }, + "nativeSrc": "5834:25:62", + "nodeType": "YulExpressionStatement", + "src": "5834:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5879:9:62", + "nodeType": "YulIdentifier", + "src": "5879:9:62" + }, + { + "kind": "number", + "nativeSrc": "5890:2:62", + "nodeType": "YulLiteral", + "src": "5890:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5875:3:62", + "nodeType": "YulIdentifier", + "src": "5875:3:62" + }, + "nativeSrc": "5875:18:62", + "nodeType": "YulFunctionCall", + "src": "5875:18:62" + }, + { + "kind": "number", + "nativeSrc": "5895:2:62", + "nodeType": "YulLiteral", + "src": "5895:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5868:6:62", + "nodeType": "YulIdentifier", + "src": "5868:6:62" + }, + "nativeSrc": "5868:30:62", + "nodeType": "YulFunctionCall", + "src": "5868:30:62" + }, + "nativeSrc": "5868:30:62", + "nodeType": "YulExpressionStatement", + "src": "5868:30:62" + }, + { + "nativeSrc": "5907:59:62", + "nodeType": "YulVariableDeclaration", + "src": "5907:59:62", + "value": { + "arguments": [ + { + "name": "value1", + "nativeSrc": "5939:6:62", + "nodeType": "YulIdentifier", + "src": "5939:6:62" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5951:9:62", + "nodeType": "YulIdentifier", + "src": "5951:9:62" + }, + { + "kind": "number", + "nativeSrc": "5962:2:62", + "nodeType": "YulLiteral", + "src": "5962:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5947:3:62", + "nodeType": "YulIdentifier", + "src": "5947:3:62" + }, + "nativeSrc": "5947:18:62", + "nodeType": "YulFunctionCall", + "src": "5947:18:62" + } + ], + "functionName": { + "name": "abi_encode_string", + "nativeSrc": "5921:17:62", + "nodeType": "YulIdentifier", + "src": "5921:17:62" + }, + "nativeSrc": "5921:45:62", + "nodeType": "YulFunctionCall", + "src": "5921:45:62" + }, + "variables": [ + { + "name": "tail_1", + "nativeSrc": "5911:6:62", + "nodeType": "YulTypedName", + "src": "5911:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5986:9:62", + "nodeType": "YulIdentifier", + "src": "5986:9:62" + }, + { + "kind": "number", + "nativeSrc": "5997:2:62", + "nodeType": "YulLiteral", + "src": "5997:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5982:3:62", + "nodeType": "YulIdentifier", + "src": "5982:3:62" + }, + "nativeSrc": "5982:18:62", + "nodeType": "YulFunctionCall", + "src": "5982:18:62" + }, + { + "arguments": [ + { + "name": "tail_1", + "nativeSrc": "6006:6:62", + "nodeType": "YulIdentifier", + "src": "6006:6:62" + }, + { + "name": "headStart", + "nativeSrc": "6014:9:62", + "nodeType": "YulIdentifier", + "src": "6014:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "6002:3:62", + "nodeType": "YulIdentifier", + "src": "6002:3:62" + }, + "nativeSrc": "6002:22:62", + "nodeType": "YulFunctionCall", + "src": "6002:22:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5975:6:62", + "nodeType": "YulIdentifier", + "src": "5975:6:62" + }, + "nativeSrc": "5975:50:62", + "nodeType": "YulFunctionCall", + "src": "5975:50:62" + }, + "nativeSrc": "5975:50:62", + "nodeType": "YulExpressionStatement", + "src": "5975:50:62" + }, + { + "nativeSrc": "6034:41:62", + "nodeType": "YulAssignment", + "src": "6034:41:62", + "value": { + "arguments": [ + { + "name": "value2", + "nativeSrc": "6060:6:62", + "nodeType": "YulIdentifier", + "src": "6060:6:62" + }, + { + "name": "tail_1", + "nativeSrc": "6068:6:62", + "nodeType": "YulIdentifier", + "src": "6068:6:62" + } + ], + "functionName": { + "name": "abi_encode_string", + "nativeSrc": "6042:17:62", + "nodeType": "YulIdentifier", + "src": "6042:17:62" + }, + "nativeSrc": "6042:33:62", + "nodeType": "YulFunctionCall", + "src": "6042:33:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "6034:4:62", + "nodeType": "YulIdentifier", + "src": "6034:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_string_memory_ptr_t_string_memory_ptr__to_t_uint256_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "5627:454:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "5777:9:62", + "nodeType": "YulTypedName", + "src": "5777:9:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "5788:6:62", + "nodeType": "YulTypedName", + "src": "5788:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "5796:6:62", + "nodeType": "YulTypedName", + "src": "5796:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "5804:6:62", + "nodeType": "YulTypedName", + "src": "5804:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "5815:4:62", + "nodeType": "YulTypedName", + "src": "5815:4:62", + "type": "" + } + ], + "src": "5627:454:62" + }, + { + "body": { + "nativeSrc": "6383:408:62", + "nodeType": "YulBlock", + "src": "6383:408:62", + "statements": [ + { + "nativeSrc": "6393:27:62", + "nodeType": "YulAssignment", + "src": "6393:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6405:9:62", + "nodeType": "YulIdentifier", + "src": "6405:9:62" + }, + { + "kind": "number", + "nativeSrc": "6416:3:62", + "nodeType": "YulLiteral", + "src": "6416:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6401:3:62", + "nodeType": "YulIdentifier", + "src": "6401:3:62" + }, + "nativeSrc": "6401:19:62", + "nodeType": "YulFunctionCall", + "src": "6401:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "6393:4:62", + "nodeType": "YulIdentifier", + "src": "6393:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6436:9:62", + "nodeType": "YulIdentifier", + "src": "6436:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "6451:6:62", + "nodeType": "YulIdentifier", + "src": "6451:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6467:3:62", + "nodeType": "YulLiteral", + "src": "6467:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "6472:1:62", + "nodeType": "YulLiteral", + "src": "6472:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "6463:3:62", + "nodeType": "YulIdentifier", + "src": "6463:3:62" + }, + "nativeSrc": "6463:11:62", + "nodeType": "YulFunctionCall", + "src": "6463:11:62" + }, + { + "kind": "number", + "nativeSrc": "6476:1:62", + "nodeType": "YulLiteral", + "src": "6476:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "6459:3:62", + "nodeType": "YulIdentifier", + "src": "6459:3:62" + }, + "nativeSrc": "6459:19:62", + "nodeType": "YulFunctionCall", + "src": "6459:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "6447:3:62", + "nodeType": "YulIdentifier", + "src": "6447:3:62" + }, + "nativeSrc": "6447:32:62", + "nodeType": "YulFunctionCall", + "src": "6447:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6429:6:62", + "nodeType": "YulIdentifier", + "src": "6429:6:62" + }, + "nativeSrc": "6429:51:62", + "nodeType": "YulFunctionCall", + "src": "6429:51:62" + }, + "nativeSrc": "6429:51:62", + "nodeType": "YulExpressionStatement", + "src": "6429:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6500:9:62", + "nodeType": "YulIdentifier", + "src": "6500:9:62" + }, + { + "kind": "number", + "nativeSrc": "6511:2:62", + "nodeType": "YulLiteral", + "src": "6511:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6496:3:62", + "nodeType": "YulIdentifier", + "src": "6496:3:62" + }, + "nativeSrc": "6496:18:62", + "nodeType": "YulFunctionCall", + "src": "6496:18:62" + }, + { + "name": "value1", + "nativeSrc": "6516:6:62", + "nodeType": "YulIdentifier", + "src": "6516:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6489:6:62", + "nodeType": "YulIdentifier", + "src": "6489:6:62" + }, + "nativeSrc": "6489:34:62", + "nodeType": "YulFunctionCall", + "src": "6489:34:62" + }, + "nativeSrc": "6489:34:62", + "nodeType": "YulExpressionStatement", + "src": "6489:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6543:9:62", + "nodeType": "YulIdentifier", + "src": "6543:9:62" + }, + { + "kind": "number", + "nativeSrc": "6554:2:62", + "nodeType": "YulLiteral", + "src": "6554:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6539:3:62", + "nodeType": "YulIdentifier", + "src": "6539:3:62" + }, + "nativeSrc": "6539:18:62", + "nodeType": "YulFunctionCall", + "src": "6539:18:62" + }, + { + "name": "value2", + "nativeSrc": "6559:6:62", + "nodeType": "YulIdentifier", + "src": "6559:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6532:6:62", + "nodeType": "YulIdentifier", + "src": "6532:6:62" + }, + "nativeSrc": "6532:34:62", + "nodeType": "YulFunctionCall", + "src": "6532:34:62" + }, + "nativeSrc": "6532:34:62", + "nodeType": "YulExpressionStatement", + "src": "6532:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6586:9:62", + "nodeType": "YulIdentifier", + "src": "6586:9:62" + }, + { + "kind": "number", + "nativeSrc": "6597:2:62", + "nodeType": "YulLiteral", + "src": "6597:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6582:3:62", + "nodeType": "YulIdentifier", + "src": "6582:3:62" + }, + "nativeSrc": "6582:18:62", + "nodeType": "YulFunctionCall", + "src": "6582:18:62" + }, + { + "name": "value3", + "nativeSrc": "6602:6:62", + "nodeType": "YulIdentifier", + "src": "6602:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6575:6:62", + "nodeType": "YulIdentifier", + "src": "6575:6:62" + }, + "nativeSrc": "6575:34:62", + "nodeType": "YulFunctionCall", + "src": "6575:34:62" + }, + "nativeSrc": "6575:34:62", + "nodeType": "YulExpressionStatement", + "src": "6575:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6629:9:62", + "nodeType": "YulIdentifier", + "src": "6629:9:62" + }, + { + "kind": "number", + "nativeSrc": "6640:3:62", + "nodeType": "YulLiteral", + "src": "6640:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6625:3:62", + "nodeType": "YulIdentifier", + "src": "6625:3:62" + }, + "nativeSrc": "6625:19:62", + "nodeType": "YulFunctionCall", + "src": "6625:19:62" + }, + { + "name": "value4", + "nativeSrc": "6646:6:62", + "nodeType": "YulIdentifier", + "src": "6646:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6618:6:62", + "nodeType": "YulIdentifier", + "src": "6618:6:62" + }, + "nativeSrc": "6618:35:62", + "nodeType": "YulFunctionCall", + "src": "6618:35:62" + }, + "nativeSrc": "6618:35:62", + "nodeType": "YulExpressionStatement", + "src": "6618:35:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6673:9:62", + "nodeType": "YulIdentifier", + "src": "6673:9:62" + }, + { + "kind": "number", + "nativeSrc": "6684:3:62", + "nodeType": "YulLiteral", + "src": "6684:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6669:3:62", + "nodeType": "YulIdentifier", + "src": "6669:3:62" + }, + "nativeSrc": "6669:19:62", + "nodeType": "YulFunctionCall", + "src": "6669:19:62" + }, + { + "name": "value5", + "nativeSrc": "6690:6:62", + "nodeType": "YulIdentifier", + "src": "6690:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6662:6:62", + "nodeType": "YulIdentifier", + "src": "6662:6:62" + }, + "nativeSrc": "6662:35:62", + "nodeType": "YulFunctionCall", + "src": "6662:35:62" + }, + "nativeSrc": "6662:35:62", + "nodeType": "YulExpressionStatement", + "src": "6662:35:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6717:9:62", + "nodeType": "YulIdentifier", + "src": "6717:9:62" + }, + { + "kind": "number", + "nativeSrc": "6728:3:62", + "nodeType": "YulLiteral", + "src": "6728:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6713:3:62", + "nodeType": "YulIdentifier", + "src": "6713:3:62" + }, + "nativeSrc": "6713:19:62", + "nodeType": "YulFunctionCall", + "src": "6713:19:62" + }, + { + "name": "value6", + "nativeSrc": "6734:6:62", + "nodeType": "YulIdentifier", + "src": "6734:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6706:6:62", + "nodeType": "YulIdentifier", + "src": "6706:6:62" + }, + "nativeSrc": "6706:35:62", + "nodeType": "YulFunctionCall", + "src": "6706:35:62" + }, + "nativeSrc": "6706:35:62", + "nodeType": "YulExpressionStatement", + "src": "6706:35:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6761:9:62", + "nodeType": "YulIdentifier", + "src": "6761:9:62" + }, + { + "kind": "number", + "nativeSrc": "6772:3:62", + "nodeType": "YulLiteral", + "src": "6772:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6757:3:62", + "nodeType": "YulIdentifier", + "src": "6757:3:62" + }, + "nativeSrc": "6757:19:62", + "nodeType": "YulFunctionCall", + "src": "6757:19:62" + }, + { + "name": "value7", + "nativeSrc": "6778:6:62", + "nodeType": "YulIdentifier", + "src": "6778:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6750:6:62", + "nodeType": "YulIdentifier", + "src": "6750:6:62" + }, + "nativeSrc": "6750:35:62", + "nodeType": "YulFunctionCall", + "src": "6750:35:62" + }, + "nativeSrc": "6750:35:62", + "nodeType": "YulExpressionStatement", + "src": "6750:35:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "6086:705:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "6296:9:62", + "nodeType": "YulTypedName", + "src": "6296:9:62", + "type": "" + }, + { + "name": "value7", + "nativeSrc": "6307:6:62", + "nodeType": "YulTypedName", + "src": "6307:6:62", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "6315:6:62", + "nodeType": "YulTypedName", + "src": "6315:6:62", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "6323:6:62", + "nodeType": "YulTypedName", + "src": "6323:6:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "6331:6:62", + "nodeType": "YulTypedName", + "src": "6331:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "6339:6:62", + "nodeType": "YulTypedName", + "src": "6339:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "6347:6:62", + "nodeType": "YulTypedName", + "src": "6347:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "6355:6:62", + "nodeType": "YulTypedName", + "src": "6355:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "6363:6:62", + "nodeType": "YulTypedName", + "src": "6363:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "6374:4:62", + "nodeType": "YulTypedName", + "src": "6374:4:62", + "type": "" + } + ], + "src": "6086:705:62" + }, + { + "body": { + "nativeSrc": "7009:276:62", + "nodeType": "YulBlock", + "src": "7009:276:62", + "statements": [ + { + "nativeSrc": "7019:27:62", + "nodeType": "YulAssignment", + "src": "7019:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7031:9:62", + "nodeType": "YulIdentifier", + "src": "7031:9:62" + }, + { + "kind": "number", + "nativeSrc": "7042:3:62", + "nodeType": "YulLiteral", + "src": "7042:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7027:3:62", + "nodeType": "YulIdentifier", + "src": "7027:3:62" + }, + "nativeSrc": "7027:19:62", + "nodeType": "YulFunctionCall", + "src": "7027:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "7019:4:62", + "nodeType": "YulIdentifier", + "src": "7019:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7062:9:62", + "nodeType": "YulIdentifier", + "src": "7062:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "7077:6:62", + "nodeType": "YulIdentifier", + "src": "7077:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7093:3:62", + "nodeType": "YulLiteral", + "src": "7093:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "7098:1:62", + "nodeType": "YulLiteral", + "src": "7098:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "7089:3:62", + "nodeType": "YulIdentifier", + "src": "7089:3:62" + }, + "nativeSrc": "7089:11:62", + "nodeType": "YulFunctionCall", + "src": "7089:11:62" + }, + { + "kind": "number", + "nativeSrc": "7102:1:62", + "nodeType": "YulLiteral", + "src": "7102:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "7085:3:62", + "nodeType": "YulIdentifier", + "src": "7085:3:62" + }, + "nativeSrc": "7085:19:62", + "nodeType": "YulFunctionCall", + "src": "7085:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "7073:3:62", + "nodeType": "YulIdentifier", + "src": "7073:3:62" + }, + "nativeSrc": "7073:32:62", + "nodeType": "YulFunctionCall", + "src": "7073:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7055:6:62", + "nodeType": "YulIdentifier", + "src": "7055:6:62" + }, + "nativeSrc": "7055:51:62", + "nodeType": "YulFunctionCall", + "src": "7055:51:62" + }, + "nativeSrc": "7055:51:62", + "nodeType": "YulExpressionStatement", + "src": "7055:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7126:9:62", + "nodeType": "YulIdentifier", + "src": "7126:9:62" + }, + { + "kind": "number", + "nativeSrc": "7137:2:62", + "nodeType": "YulLiteral", + "src": "7137:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7122:3:62", + "nodeType": "YulIdentifier", + "src": "7122:3:62" + }, + "nativeSrc": "7122:18:62", + "nodeType": "YulFunctionCall", + "src": "7122:18:62" + }, + { + "name": "value1", + "nativeSrc": "7142:6:62", + "nodeType": "YulIdentifier", + "src": "7142:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7115:6:62", + "nodeType": "YulIdentifier", + "src": "7115:6:62" + }, + "nativeSrc": "7115:34:62", + "nodeType": "YulFunctionCall", + "src": "7115:34:62" + }, + "nativeSrc": "7115:34:62", + "nodeType": "YulExpressionStatement", + "src": "7115:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7169:9:62", + "nodeType": "YulIdentifier", + "src": "7169:9:62" + }, + { + "kind": "number", + "nativeSrc": "7180:2:62", + "nodeType": "YulLiteral", + "src": "7180:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7165:3:62", + "nodeType": "YulIdentifier", + "src": "7165:3:62" + }, + "nativeSrc": "7165:18:62", + "nodeType": "YulFunctionCall", + "src": "7165:18:62" + }, + { + "name": "value2", + "nativeSrc": "7185:6:62", + "nodeType": "YulIdentifier", + "src": "7185:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7158:6:62", + "nodeType": "YulIdentifier", + "src": "7158:6:62" + }, + "nativeSrc": "7158:34:62", + "nodeType": "YulFunctionCall", + "src": "7158:34:62" + }, + "nativeSrc": "7158:34:62", + "nodeType": "YulExpressionStatement", + "src": "7158:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7212:9:62", + "nodeType": "YulIdentifier", + "src": "7212:9:62" + }, + { + "kind": "number", + "nativeSrc": "7223:2:62", + "nodeType": "YulLiteral", + "src": "7223:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7208:3:62", + "nodeType": "YulIdentifier", + "src": "7208:3:62" + }, + "nativeSrc": "7208:18:62", + "nodeType": "YulFunctionCall", + "src": "7208:18:62" + }, + { + "name": "value3", + "nativeSrc": "7228:6:62", + "nodeType": "YulIdentifier", + "src": "7228:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7201:6:62", + "nodeType": "YulIdentifier", + "src": "7201:6:62" + }, + "nativeSrc": "7201:34:62", + "nodeType": "YulFunctionCall", + "src": "7201:34:62" + }, + "nativeSrc": "7201:34:62", + "nodeType": "YulExpressionStatement", + "src": "7201:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7255:9:62", + "nodeType": "YulIdentifier", + "src": "7255:9:62" + }, + { + "kind": "number", + "nativeSrc": "7266:3:62", + "nodeType": "YulLiteral", + "src": "7266:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7251:3:62", + "nodeType": "YulIdentifier", + "src": "7251:3:62" + }, + "nativeSrc": "7251:19:62", + "nodeType": "YulFunctionCall", + "src": "7251:19:62" + }, + { + "name": "value4", + "nativeSrc": "7272:6:62", + "nodeType": "YulIdentifier", + "src": "7272:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7244:6:62", + "nodeType": "YulIdentifier", + "src": "7244:6:62" + }, + "nativeSrc": "7244:35:62", + "nodeType": "YulFunctionCall", + "src": "7244:35:62" + }, + "nativeSrc": "7244:35:62", + "nodeType": "YulExpressionStatement", + "src": "7244:35:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "6796:489:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "6946:9:62", + "nodeType": "YulTypedName", + "src": "6946:9:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "6957:6:62", + "nodeType": "YulTypedName", + "src": "6957:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "6965:6:62", + "nodeType": "YulTypedName", + "src": "6965:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "6973:6:62", + "nodeType": "YulTypedName", + "src": "6973:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "6981:6:62", + "nodeType": "YulTypedName", + "src": "6981:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "6989:6:62", + "nodeType": "YulTypedName", + "src": "6989:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "7000:4:62", + "nodeType": "YulTypedName", + "src": "7000:4:62", + "type": "" + } + ], + "src": "6796:489:62" + }, + { + "body": { + "nativeSrc": "7439:172:62", + "nodeType": "YulBlock", + "src": "7439:172:62", + "statements": [ + { + "nativeSrc": "7449:26:62", + "nodeType": "YulAssignment", + "src": "7449:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7461:9:62", + "nodeType": "YulIdentifier", + "src": "7461:9:62" + }, + { + "kind": "number", + "nativeSrc": "7472:2:62", + "nodeType": "YulLiteral", + "src": "7472:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7457:3:62", + "nodeType": "YulIdentifier", + "src": "7457:3:62" + }, + "nativeSrc": "7457:18:62", + "nodeType": "YulFunctionCall", + "src": "7457:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "7449:4:62", + "nodeType": "YulIdentifier", + "src": "7449:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7491:9:62", + "nodeType": "YulIdentifier", + "src": "7491:9:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "7512:6:62", + "nodeType": "YulIdentifier", + "src": "7512:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "7506:5:62", + "nodeType": "YulIdentifier", + "src": "7506:5:62" + }, + "nativeSrc": "7506:13:62", + "nodeType": "YulFunctionCall", + "src": "7506:13:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "7529:3:62", + "nodeType": "YulLiteral", + "src": "7529:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "7534:1:62", + "nodeType": "YulLiteral", + "src": "7534:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "7525:3:62", + "nodeType": "YulIdentifier", + "src": "7525:3:62" + }, + "nativeSrc": "7525:11:62", + "nodeType": "YulFunctionCall", + "src": "7525:11:62" + }, + { + "kind": "number", + "nativeSrc": "7538:1:62", + "nodeType": "YulLiteral", + "src": "7538:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "7521:3:62", + "nodeType": "YulIdentifier", + "src": "7521:3:62" + }, + "nativeSrc": "7521:19:62", + "nodeType": "YulFunctionCall", + "src": "7521:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "7502:3:62", + "nodeType": "YulIdentifier", + "src": "7502:3:62" + }, + "nativeSrc": "7502:39:62", + "nodeType": "YulFunctionCall", + "src": "7502:39:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7484:6:62", + "nodeType": "YulIdentifier", + "src": "7484:6:62" + }, + "nativeSrc": "7484:58:62", + "nodeType": "YulFunctionCall", + "src": "7484:58:62" + }, + "nativeSrc": "7484:58:62", + "nodeType": "YulExpressionStatement", + "src": "7484:58:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7562:9:62", + "nodeType": "YulIdentifier", + "src": "7562:9:62" + }, + { + "kind": "number", + "nativeSrc": "7573:4:62", + "nodeType": "YulLiteral", + "src": "7573:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7558:3:62", + "nodeType": "YulIdentifier", + "src": "7558:3:62" + }, + "nativeSrc": "7558:20:62", + "nodeType": "YulFunctionCall", + "src": "7558:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "7590:6:62", + "nodeType": "YulIdentifier", + "src": "7590:6:62" + }, + { + "kind": "number", + "nativeSrc": "7598:4:62", + "nodeType": "YulLiteral", + "src": "7598:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7586:3:62", + "nodeType": "YulIdentifier", + "src": "7586:3:62" + }, + "nativeSrc": "7586:17:62", + "nodeType": "YulFunctionCall", + "src": "7586:17:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "7580:5:62", + "nodeType": "YulIdentifier", + "src": "7580:5:62" + }, + "nativeSrc": "7580:24:62", + "nodeType": "YulFunctionCall", + "src": "7580:24:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7551:6:62", + "nodeType": "YulIdentifier", + "src": "7551:6:62" + }, + "nativeSrc": "7551:54:62", + "nodeType": "YulFunctionCall", + "src": "7551:54:62" + }, + "nativeSrc": "7551:54:62", + "nodeType": "YulExpressionStatement", + "src": "7551:54:62" + } + ] + }, + "name": "abi_encode_tuple_t_struct$_State_$11933_memory_ptr__to_t_struct$_State_$11933_memory_ptr__fromStack_reversed", + "nativeSrc": "7290:321:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "7408:9:62", + "nodeType": "YulTypedName", + "src": "7408:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "7419:6:62", + "nodeType": "YulTypedName", + "src": "7419:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "7430:4:62", + "nodeType": "YulTypedName", + "src": "7430:4:62", + "type": "" + } + ], + "src": "7290:321:62" + }, + { + "body": { + "nativeSrc": "7741:169:62", + "nodeType": "YulBlock", + "src": "7741:169:62", + "statements": [ + { + "nativeSrc": "7751:26:62", + "nodeType": "YulAssignment", + "src": "7751:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7763:9:62", + "nodeType": "YulIdentifier", + "src": "7763:9:62" + }, + { + "kind": "number", + "nativeSrc": "7774:2:62", + "nodeType": "YulLiteral", + "src": "7774:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7759:3:62", + "nodeType": "YulIdentifier", + "src": "7759:3:62" + }, + "nativeSrc": "7759:18:62", + "nodeType": "YulFunctionCall", + "src": "7759:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "7751:4:62", + "nodeType": "YulIdentifier", + "src": "7751:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7793:9:62", + "nodeType": "YulIdentifier", + "src": "7793:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "7808:6:62", + "nodeType": "YulIdentifier", + "src": "7808:6:62" + }, + { + "kind": "number", + "nativeSrc": "7816:18:62", + "nodeType": "YulLiteral", + "src": "7816:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "7804:3:62", + "nodeType": "YulIdentifier", + "src": "7804:3:62" + }, + "nativeSrc": "7804:31:62", + "nodeType": "YulFunctionCall", + "src": "7804:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7786:6:62", + "nodeType": "YulIdentifier", + "src": "7786:6:62" + }, + "nativeSrc": "7786:50:62", + "nodeType": "YulFunctionCall", + "src": "7786:50:62" + }, + "nativeSrc": "7786:50:62", + "nodeType": "YulExpressionStatement", + "src": "7786:50:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7856:9:62", + "nodeType": "YulIdentifier", + "src": "7856:9:62" + }, + { + "kind": "number", + "nativeSrc": "7867:2:62", + "nodeType": "YulLiteral", + "src": "7867:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7852:3:62", + "nodeType": "YulIdentifier", + "src": "7852:3:62" + }, + "nativeSrc": "7852:18:62", + "nodeType": "YulFunctionCall", + "src": "7852:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "7876:6:62", + "nodeType": "YulIdentifier", + "src": "7876:6:62" + }, + { + "kind": "number", + "nativeSrc": "7884:18:62", + "nodeType": "YulLiteral", + "src": "7884:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "7872:3:62", + "nodeType": "YulIdentifier", + "src": "7872:3:62" + }, + "nativeSrc": "7872:31:62", + "nodeType": "YulFunctionCall", + "src": "7872:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7845:6:62", + "nodeType": "YulIdentifier", + "src": "7845:6:62" + }, + "nativeSrc": "7845:59:62", + "nodeType": "YulFunctionCall", + "src": "7845:59:62" + }, + "nativeSrc": "7845:59:62", + "nodeType": "YulExpressionStatement", + "src": "7845:59:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed", + "nativeSrc": "7616:294:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "7702:9:62", + "nodeType": "YulTypedName", + "src": "7702:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "7713:6:62", + "nodeType": "YulTypedName", + "src": "7713:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "7721:6:62", + "nodeType": "YulTypedName", + "src": "7721:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "7732:4:62", + "nodeType": "YulTypedName", + "src": "7732:4:62", + "type": "" + } + ], + "src": "7616:294:62" + }, + { + "body": { + "nativeSrc": "8016:102:62", + "nodeType": "YulBlock", + "src": "8016:102:62", + "statements": [ + { + "nativeSrc": "8026:26:62", + "nodeType": "YulAssignment", + "src": "8026:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8038:9:62", + "nodeType": "YulIdentifier", + "src": "8038:9:62" + }, + { + "kind": "number", + "nativeSrc": "8049:2:62", + "nodeType": "YulLiteral", + "src": "8049:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8034:3:62", + "nodeType": "YulIdentifier", + "src": "8034:3:62" + }, + "nativeSrc": "8034:18:62", + "nodeType": "YulFunctionCall", + "src": "8034:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "8026:4:62", + "nodeType": "YulIdentifier", + "src": "8026:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8068:9:62", + "nodeType": "YulIdentifier", + "src": "8068:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "8083:6:62", + "nodeType": "YulIdentifier", + "src": "8083:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8099:3:62", + "nodeType": "YulLiteral", + "src": "8099:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "8104:1:62", + "nodeType": "YulLiteral", + "src": "8104:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "8095:3:62", + "nodeType": "YulIdentifier", + "src": "8095:3:62" + }, + "nativeSrc": "8095:11:62", + "nodeType": "YulFunctionCall", + "src": "8095:11:62" + }, + { + "kind": "number", + "nativeSrc": "8108:1:62", + "nodeType": "YulLiteral", + "src": "8108:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "8091:3:62", + "nodeType": "YulIdentifier", + "src": "8091:3:62" + }, + "nativeSrc": "8091:19:62", + "nodeType": "YulFunctionCall", + "src": "8091:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "8079:3:62", + "nodeType": "YulIdentifier", + "src": "8079:3:62" + }, + "nativeSrc": "8079:32:62", + "nodeType": "YulFunctionCall", + "src": "8079:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "8061:6:62", + "nodeType": "YulIdentifier", + "src": "8061:6:62" + }, + "nativeSrc": "8061:51:62", + "nodeType": "YulFunctionCall", + "src": "8061:51:62" + }, + "nativeSrc": "8061:51:62", + "nodeType": "YulExpressionStatement", + "src": "8061:51:62" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "7915:203:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "7985:9:62", + "nodeType": "YulTypedName", + "src": "7985:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "7996:6:62", + "nodeType": "YulTypedName", + "src": "7996:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "8007:4:62", + "nodeType": "YulTypedName", + "src": "8007:4:62", + "type": "" + } + ], + "src": "7915:203:62" + }, + { + "body": { + "nativeSrc": "8227:404:62", + "nodeType": "YulBlock", + "src": "8227:404:62", + "statements": [ + { + "body": { + "nativeSrc": "8273:16:62", + "nodeType": "YulBlock", + "src": "8273:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "8282:1:62", + "nodeType": "YulLiteral", + "src": "8282:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "8285:1:62", + "nodeType": "YulLiteral", + "src": "8285:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "8275:6:62", + "nodeType": "YulIdentifier", + "src": "8275:6:62" + }, + "nativeSrc": "8275:12:62", + "nodeType": "YulFunctionCall", + "src": "8275:12:62" + }, + "nativeSrc": "8275:12:62", + "nodeType": "YulExpressionStatement", + "src": "8275:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "8248:7:62", + "nodeType": "YulIdentifier", + "src": "8248:7:62" + }, + { + "name": "headStart", + "nativeSrc": "8257:9:62", + "nodeType": "YulIdentifier", + "src": "8257:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "8244:3:62", + "nodeType": "YulIdentifier", + "src": "8244:3:62" + }, + "nativeSrc": "8244:23:62", + "nodeType": "YulFunctionCall", + "src": "8244:23:62" + }, + { + "kind": "number", + "nativeSrc": "8269:2:62", + "nodeType": "YulLiteral", + "src": "8269:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "8240:3:62", + "nodeType": "YulIdentifier", + "src": "8240:3:62" + }, + "nativeSrc": "8240:32:62", + "nodeType": "YulFunctionCall", + "src": "8240:32:62" + }, + "nativeSrc": "8237:52:62", + "nodeType": "YulIf", + "src": "8237:52:62" + }, + { + "nativeSrc": "8298:36:62", + "nodeType": "YulVariableDeclaration", + "src": "8298:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8324:9:62", + "nodeType": "YulIdentifier", + "src": "8324:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "8311:12:62", + "nodeType": "YulIdentifier", + "src": "8311:12:62" + }, + "nativeSrc": "8311:23:62", + "nodeType": "YulFunctionCall", + "src": "8311:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "8302:5:62", + "nodeType": "YulTypedName", + "src": "8302:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "8368:5:62", + "nodeType": "YulIdentifier", + "src": "8368:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "8343:24:62", + "nodeType": "YulIdentifier", + "src": "8343:24:62" + }, + "nativeSrc": "8343:31:62", + "nodeType": "YulFunctionCall", + "src": "8343:31:62" + }, + "nativeSrc": "8343:31:62", + "nodeType": "YulExpressionStatement", + "src": "8343:31:62" + }, + { + "nativeSrc": "8383:15:62", + "nodeType": "YulAssignment", + "src": "8383:15:62", + "value": { + "name": "value", + "nativeSrc": "8393:5:62", + "nodeType": "YulIdentifier", + "src": "8393:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "8383:6:62", + "nodeType": "YulIdentifier", + "src": "8383:6:62" + } + ] + }, + { + "nativeSrc": "8407:47:62", + "nodeType": "YulVariableDeclaration", + "src": "8407:47:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8439:9:62", + "nodeType": "YulIdentifier", + "src": "8439:9:62" + }, + { + "kind": "number", + "nativeSrc": "8450:2:62", + "nodeType": "YulLiteral", + "src": "8450:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8435:3:62", + "nodeType": "YulIdentifier", + "src": "8435:3:62" + }, + "nativeSrc": "8435:18:62", + "nodeType": "YulFunctionCall", + "src": "8435:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "8422:12:62", + "nodeType": "YulIdentifier", + "src": "8422:12:62" + }, + "nativeSrc": "8422:32:62", + "nodeType": "YulFunctionCall", + "src": "8422:32:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "8411:7:62", + "nodeType": "YulTypedName", + "src": "8411:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "8488:7:62", + "nodeType": "YulIdentifier", + "src": "8488:7:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "8463:24:62", + "nodeType": "YulIdentifier", + "src": "8463:24:62" + }, + "nativeSrc": "8463:33:62", + "nodeType": "YulFunctionCall", + "src": "8463:33:62" + }, + "nativeSrc": "8463:33:62", + "nodeType": "YulExpressionStatement", + "src": "8463:33:62" + }, + { + "nativeSrc": "8505:17:62", + "nodeType": "YulAssignment", + "src": "8505:17:62", + "value": { + "name": "value_1", + "nativeSrc": "8515:7:62", + "nodeType": "YulIdentifier", + "src": "8515:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "8505:6:62", + "nodeType": "YulIdentifier", + "src": "8505:6:62" + } + ] + }, + { + "nativeSrc": "8531:16:62", + "nodeType": "YulVariableDeclaration", + "src": "8531:16:62", + "value": { + "kind": "number", + "nativeSrc": "8546:1:62", + "nodeType": "YulLiteral", + "src": "8546:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "8535:7:62", + "nodeType": "YulTypedName", + "src": "8535:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "8556:43:62", + "nodeType": "YulAssignment", + "src": "8556:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8584:9:62", + "nodeType": "YulIdentifier", + "src": "8584:9:62" + }, + { + "kind": "number", + "nativeSrc": "8595:2:62", + "nodeType": "YulLiteral", + "src": "8595:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8580:3:62", + "nodeType": "YulIdentifier", + "src": "8580:3:62" + }, + "nativeSrc": "8580:18:62", + "nodeType": "YulFunctionCall", + "src": "8580:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "8567:12:62", + "nodeType": "YulIdentifier", + "src": "8567:12:62" + }, + "nativeSrc": "8567:32:62", + "nodeType": "YulFunctionCall", + "src": "8567:32:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "8556:7:62", + "nodeType": "YulIdentifier", + "src": "8556:7:62" + } + ] + }, + { + "nativeSrc": "8608:17:62", + "nodeType": "YulAssignment", + "src": "8608:17:62", + "value": { + "name": "value_2", + "nativeSrc": "8618:7:62", + "nodeType": "YulIdentifier", + "src": "8618:7:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "8608:6:62", + "nodeType": "YulIdentifier", + "src": "8608:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_bytes32", + "nativeSrc": "8123:508:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "8177:9:62", + "nodeType": "YulTypedName", + "src": "8177:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "8188:7:62", + "nodeType": "YulTypedName", + "src": "8188:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "8200:6:62", + "nodeType": "YulTypedName", + "src": "8200:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "8208:6:62", + "nodeType": "YulTypedName", + "src": "8208:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "8216:6:62", + "nodeType": "YulTypedName", + "src": "8216:6:62", + "type": "" + } + ], + "src": "8123:508:62" + }, + { + "body": { + "nativeSrc": "8765:119:62", + "nodeType": "YulBlock", + "src": "8765:119:62", + "statements": [ + { + "nativeSrc": "8775:26:62", + "nodeType": "YulAssignment", + "src": "8775:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8787:9:62", + "nodeType": "YulIdentifier", + "src": "8787:9:62" + }, + { + "kind": "number", + "nativeSrc": "8798:2:62", + "nodeType": "YulLiteral", + "src": "8798:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8783:3:62", + "nodeType": "YulIdentifier", + "src": "8783:3:62" + }, + "nativeSrc": "8783:18:62", + "nodeType": "YulFunctionCall", + "src": "8783:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "8775:4:62", + "nodeType": "YulIdentifier", + "src": "8775:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8817:9:62", + "nodeType": "YulIdentifier", + "src": "8817:9:62" + }, + { + "name": "value0", + "nativeSrc": "8828:6:62", + "nodeType": "YulIdentifier", + "src": "8828:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "8810:6:62", + "nodeType": "YulIdentifier", + "src": "8810:6:62" + }, + "nativeSrc": "8810:25:62", + "nodeType": "YulFunctionCall", + "src": "8810:25:62" + }, + "nativeSrc": "8810:25:62", + "nodeType": "YulExpressionStatement", + "src": "8810:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "8855:9:62", + "nodeType": "YulIdentifier", + "src": "8855:9:62" + }, + { + "kind": "number", + "nativeSrc": "8866:2:62", + "nodeType": "YulLiteral", + "src": "8866:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "8851:3:62", + "nodeType": "YulIdentifier", + "src": "8851:3:62" + }, + "nativeSrc": "8851:18:62", + "nodeType": "YulFunctionCall", + "src": "8851:18:62" + }, + { + "name": "value1", + "nativeSrc": "8871:6:62", + "nodeType": "YulIdentifier", + "src": "8871:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "8844:6:62", + "nodeType": "YulIdentifier", + "src": "8844:6:62" + }, + "nativeSrc": "8844:34:62", + "nodeType": "YulFunctionCall", + "src": "8844:34:62" + }, + "nativeSrc": "8844:34:62", + "nodeType": "YulExpressionStatement", + "src": "8844:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "8636:248:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "8726:9:62", + "nodeType": "YulTypedName", + "src": "8726:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "8737:6:62", + "nodeType": "YulTypedName", + "src": "8737:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "8745:6:62", + "nodeType": "YulTypedName", + "src": "8745:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "8756:4:62", + "nodeType": "YulTypedName", + "src": "8756:4:62", + "type": "" + } + ], + "src": "8636:248:62" + }, + { + "body": { + "nativeSrc": "8993:404:62", + "nodeType": "YulBlock", + "src": "8993:404:62", + "statements": [ + { + "body": { + "nativeSrc": "9039:16:62", + "nodeType": "YulBlock", + "src": "9039:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "9048:1:62", + "nodeType": "YulLiteral", + "src": "9048:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "9051:1:62", + "nodeType": "YulLiteral", + "src": "9051:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "9041:6:62", + "nodeType": "YulIdentifier", + "src": "9041:6:62" + }, + "nativeSrc": "9041:12:62", + "nodeType": "YulFunctionCall", + "src": "9041:12:62" + }, + "nativeSrc": "9041:12:62", + "nodeType": "YulExpressionStatement", + "src": "9041:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "9014:7:62", + "nodeType": "YulIdentifier", + "src": "9014:7:62" + }, + { + "name": "headStart", + "nativeSrc": "9023:9:62", + "nodeType": "YulIdentifier", + "src": "9023:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "9010:3:62", + "nodeType": "YulIdentifier", + "src": "9010:3:62" + }, + "nativeSrc": "9010:23:62", + "nodeType": "YulFunctionCall", + "src": "9010:23:62" + }, + { + "kind": "number", + "nativeSrc": "9035:2:62", + "nodeType": "YulLiteral", + "src": "9035:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "9006:3:62", + "nodeType": "YulIdentifier", + "src": "9006:3:62" + }, + "nativeSrc": "9006:32:62", + "nodeType": "YulFunctionCall", + "src": "9006:32:62" + }, + "nativeSrc": "9003:52:62", + "nodeType": "YulIf", + "src": "9003:52:62" + }, + { + "nativeSrc": "9064:36:62", + "nodeType": "YulVariableDeclaration", + "src": "9064:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9090:9:62", + "nodeType": "YulIdentifier", + "src": "9090:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "9077:12:62", + "nodeType": "YulIdentifier", + "src": "9077:12:62" + }, + "nativeSrc": "9077:23:62", + "nodeType": "YulFunctionCall", + "src": "9077:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "9068:5:62", + "nodeType": "YulTypedName", + "src": "9068:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "9134:5:62", + "nodeType": "YulIdentifier", + "src": "9134:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "9109:24:62", + "nodeType": "YulIdentifier", + "src": "9109:24:62" + }, + "nativeSrc": "9109:31:62", + "nodeType": "YulFunctionCall", + "src": "9109:31:62" + }, + "nativeSrc": "9109:31:62", + "nodeType": "YulExpressionStatement", + "src": "9109:31:62" + }, + { + "nativeSrc": "9149:15:62", + "nodeType": "YulAssignment", + "src": "9149:15:62", + "value": { + "name": "value", + "nativeSrc": "9159:5:62", + "nodeType": "YulIdentifier", + "src": "9159:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "9149:6:62", + "nodeType": "YulIdentifier", + "src": "9149:6:62" + } + ] + }, + { + "nativeSrc": "9173:47:62", + "nodeType": "YulVariableDeclaration", + "src": "9173:47:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9205:9:62", + "nodeType": "YulIdentifier", + "src": "9205:9:62" + }, + { + "kind": "number", + "nativeSrc": "9216:2:62", + "nodeType": "YulLiteral", + "src": "9216:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9201:3:62", + "nodeType": "YulIdentifier", + "src": "9201:3:62" + }, + "nativeSrc": "9201:18:62", + "nodeType": "YulFunctionCall", + "src": "9201:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "9188:12:62", + "nodeType": "YulIdentifier", + "src": "9188:12:62" + }, + "nativeSrc": "9188:32:62", + "nodeType": "YulFunctionCall", + "src": "9188:32:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "9177:7:62", + "nodeType": "YulTypedName", + "src": "9177:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "9254:7:62", + "nodeType": "YulIdentifier", + "src": "9254:7:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "9229:24:62", + "nodeType": "YulIdentifier", + "src": "9229:24:62" + }, + "nativeSrc": "9229:33:62", + "nodeType": "YulFunctionCall", + "src": "9229:33:62" + }, + "nativeSrc": "9229:33:62", + "nodeType": "YulExpressionStatement", + "src": "9229:33:62" + }, + { + "nativeSrc": "9271:17:62", + "nodeType": "YulAssignment", + "src": "9271:17:62", + "value": { + "name": "value_1", + "nativeSrc": "9281:7:62", + "nodeType": "YulIdentifier", + "src": "9281:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "9271:6:62", + "nodeType": "YulIdentifier", + "src": "9271:6:62" + } + ] + }, + { + "nativeSrc": "9297:16:62", + "nodeType": "YulVariableDeclaration", + "src": "9297:16:62", + "value": { + "kind": "number", + "nativeSrc": "9312:1:62", + "nodeType": "YulLiteral", + "src": "9312:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "9301:7:62", + "nodeType": "YulTypedName", + "src": "9301:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "9322:43:62", + "nodeType": "YulAssignment", + "src": "9322:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9350:9:62", + "nodeType": "YulIdentifier", + "src": "9350:9:62" + }, + { + "kind": "number", + "nativeSrc": "9361:2:62", + "nodeType": "YulLiteral", + "src": "9361:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9346:3:62", + "nodeType": "YulIdentifier", + "src": "9346:3:62" + }, + "nativeSrc": "9346:18:62", + "nodeType": "YulFunctionCall", + "src": "9346:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "9333:12:62", + "nodeType": "YulIdentifier", + "src": "9333:12:62" + }, + "nativeSrc": "9333:32:62", + "nodeType": "YulFunctionCall", + "src": "9333:32:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "9322:7:62", + "nodeType": "YulIdentifier", + "src": "9322:7:62" + } + ] + }, + { + "nativeSrc": "9374:17:62", + "nodeType": "YulAssignment", + "src": "9374:17:62", + "value": { + "name": "value_2", + "nativeSrc": "9384:7:62", + "nodeType": "YulIdentifier", + "src": "9384:7:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "9374:6:62", + "nodeType": "YulIdentifier", + "src": "9374:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_uint256", + "nativeSrc": "8889:508:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "8943:9:62", + "nodeType": "YulTypedName", + "src": "8943:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "8954:7:62", + "nodeType": "YulTypedName", + "src": "8954:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "8966:6:62", + "nodeType": "YulTypedName", + "src": "8966:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "8974:6:62", + "nodeType": "YulTypedName", + "src": "8974:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "8982:6:62", + "nodeType": "YulTypedName", + "src": "8982:6:62", + "type": "" + } + ], + "src": "8889:508:62" + }, + { + "body": { + "nativeSrc": "9759:881:62", + "nodeType": "YulBlock", + "src": "9759:881:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9776:9:62", + "nodeType": "YulIdentifier", + "src": "9776:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "9791:6:62", + "nodeType": "YulIdentifier", + "src": "9791:6:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "9803:3:62", + "nodeType": "YulLiteral", + "src": "9803:3:62", + "type": "", + "value": "248" + }, + { + "kind": "number", + "nativeSrc": "9808:3:62", + "nodeType": "YulLiteral", + "src": "9808:3:62", + "type": "", + "value": "255" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "9799:3:62", + "nodeType": "YulIdentifier", + "src": "9799:3:62" + }, + "nativeSrc": "9799:13:62", + "nodeType": "YulFunctionCall", + "src": "9799:13:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "9787:3:62", + "nodeType": "YulIdentifier", + "src": "9787:3:62" + }, + "nativeSrc": "9787:26:62", + "nodeType": "YulFunctionCall", + "src": "9787:26:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9769:6:62", + "nodeType": "YulIdentifier", + "src": "9769:6:62" + }, + "nativeSrc": "9769:45:62", + "nodeType": "YulFunctionCall", + "src": "9769:45:62" + }, + "nativeSrc": "9769:45:62", + "nodeType": "YulExpressionStatement", + "src": "9769:45:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9834:9:62", + "nodeType": "YulIdentifier", + "src": "9834:9:62" + }, + { + "kind": "number", + "nativeSrc": "9845:2:62", + "nodeType": "YulLiteral", + "src": "9845:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9830:3:62", + "nodeType": "YulIdentifier", + "src": "9830:3:62" + }, + "nativeSrc": "9830:18:62", + "nodeType": "YulFunctionCall", + "src": "9830:18:62" + }, + { + "kind": "number", + "nativeSrc": "9850:3:62", + "nodeType": "YulLiteral", + "src": "9850:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9823:6:62", + "nodeType": "YulIdentifier", + "src": "9823:6:62" + }, + "nativeSrc": "9823:31:62", + "nodeType": "YulFunctionCall", + "src": "9823:31:62" + }, + "nativeSrc": "9823:31:62", + "nodeType": "YulExpressionStatement", + "src": "9823:31:62" + }, + { + "nativeSrc": "9863:60:62", + "nodeType": "YulVariableDeclaration", + "src": "9863:60:62", + "value": { + "arguments": [ + { + "name": "value1", + "nativeSrc": "9895:6:62", + "nodeType": "YulIdentifier", + "src": "9895:6:62" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9907:9:62", + "nodeType": "YulIdentifier", + "src": "9907:9:62" + }, + { + "kind": "number", + "nativeSrc": "9918:3:62", + "nodeType": "YulLiteral", + "src": "9918:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9903:3:62", + "nodeType": "YulIdentifier", + "src": "9903:3:62" + }, + "nativeSrc": "9903:19:62", + "nodeType": "YulFunctionCall", + "src": "9903:19:62" + } + ], + "functionName": { + "name": "abi_encode_string", + "nativeSrc": "9877:17:62", + "nodeType": "YulIdentifier", + "src": "9877:17:62" + }, + "nativeSrc": "9877:46:62", + "nodeType": "YulFunctionCall", + "src": "9877:46:62" + }, + "variables": [ + { + "name": "tail_1", + "nativeSrc": "9867:6:62", + "nodeType": "YulTypedName", + "src": "9867:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "9943:9:62", + "nodeType": "YulIdentifier", + "src": "9943:9:62" + }, + { + "kind": "number", + "nativeSrc": "9954:2:62", + "nodeType": "YulLiteral", + "src": "9954:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "9939:3:62", + "nodeType": "YulIdentifier", + "src": "9939:3:62" + }, + "nativeSrc": "9939:18:62", + "nodeType": "YulFunctionCall", + "src": "9939:18:62" + }, + { + "arguments": [ + { + "name": "tail_1", + "nativeSrc": "9963:6:62", + "nodeType": "YulIdentifier", + "src": "9963:6:62" + }, + { + "name": "headStart", + "nativeSrc": "9971:9:62", + "nodeType": "YulIdentifier", + "src": "9971:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "9959:3:62", + "nodeType": "YulIdentifier", + "src": "9959:3:62" + }, + "nativeSrc": "9959:22:62", + "nodeType": "YulFunctionCall", + "src": "9959:22:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "9932:6:62", + "nodeType": "YulIdentifier", + "src": "9932:6:62" + }, + "nativeSrc": "9932:50:62", + "nodeType": "YulFunctionCall", + "src": "9932:50:62" + }, + "nativeSrc": "9932:50:62", + "nodeType": "YulExpressionStatement", + "src": "9932:50:62" + }, + { + "nativeSrc": "9991:47:62", + "nodeType": "YulVariableDeclaration", + "src": "9991:47:62", + "value": { + "arguments": [ + { + "name": "value2", + "nativeSrc": "10023:6:62", + "nodeType": "YulIdentifier", + "src": "10023:6:62" + }, + { + "name": "tail_1", + "nativeSrc": "10031:6:62", + "nodeType": "YulIdentifier", + "src": "10031:6:62" + } + ], + "functionName": { + "name": "abi_encode_string", + "nativeSrc": "10005:17:62", + "nodeType": "YulIdentifier", + "src": "10005:17:62" + }, + "nativeSrc": "10005:33:62", + "nodeType": "YulFunctionCall", + "src": "10005:33:62" + }, + "variables": [ + { + "name": "tail_2", + "nativeSrc": "9995:6:62", + "nodeType": "YulTypedName", + "src": "9995:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10058:9:62", + "nodeType": "YulIdentifier", + "src": "10058:9:62" + }, + { + "kind": "number", + "nativeSrc": "10069:2:62", + "nodeType": "YulLiteral", + "src": "10069:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10054:3:62", + "nodeType": "YulIdentifier", + "src": "10054:3:62" + }, + "nativeSrc": "10054:18:62", + "nodeType": "YulFunctionCall", + "src": "10054:18:62" + }, + { + "name": "value3", + "nativeSrc": "10074:6:62", + "nodeType": "YulIdentifier", + "src": "10074:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10047:6:62", + "nodeType": "YulIdentifier", + "src": "10047:6:62" + }, + "nativeSrc": "10047:34:62", + "nodeType": "YulFunctionCall", + "src": "10047:34:62" + }, + "nativeSrc": "10047:34:62", + "nodeType": "YulExpressionStatement", + "src": "10047:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10101:9:62", + "nodeType": "YulIdentifier", + "src": "10101:9:62" + }, + { + "kind": "number", + "nativeSrc": "10112:3:62", + "nodeType": "YulLiteral", + "src": "10112:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10097:3:62", + "nodeType": "YulIdentifier", + "src": "10097:3:62" + }, + "nativeSrc": "10097:19:62", + "nodeType": "YulFunctionCall", + "src": "10097:19:62" + }, + { + "arguments": [ + { + "name": "value4", + "nativeSrc": "10122:6:62", + "nodeType": "YulIdentifier", + "src": "10122:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10138:3:62", + "nodeType": "YulLiteral", + "src": "10138:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "10143:1:62", + "nodeType": "YulLiteral", + "src": "10143:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "10134:3:62", + "nodeType": "YulIdentifier", + "src": "10134:3:62" + }, + "nativeSrc": "10134:11:62", + "nodeType": "YulFunctionCall", + "src": "10134:11:62" + }, + { + "kind": "number", + "nativeSrc": "10147:1:62", + "nodeType": "YulLiteral", + "src": "10147:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "10130:3:62", + "nodeType": "YulIdentifier", + "src": "10130:3:62" + }, + "nativeSrc": "10130:19:62", + "nodeType": "YulFunctionCall", + "src": "10130:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "10118:3:62", + "nodeType": "YulIdentifier", + "src": "10118:3:62" + }, + "nativeSrc": "10118:32:62", + "nodeType": "YulFunctionCall", + "src": "10118:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10090:6:62", + "nodeType": "YulIdentifier", + "src": "10090:6:62" + }, + "nativeSrc": "10090:61:62", + "nodeType": "YulFunctionCall", + "src": "10090:61:62" + }, + "nativeSrc": "10090:61:62", + "nodeType": "YulExpressionStatement", + "src": "10090:61:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10171:9:62", + "nodeType": "YulIdentifier", + "src": "10171:9:62" + }, + { + "kind": "number", + "nativeSrc": "10182:3:62", + "nodeType": "YulLiteral", + "src": "10182:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10167:3:62", + "nodeType": "YulIdentifier", + "src": "10167:3:62" + }, + "nativeSrc": "10167:19:62", + "nodeType": "YulFunctionCall", + "src": "10167:19:62" + }, + { + "name": "value5", + "nativeSrc": "10188:6:62", + "nodeType": "YulIdentifier", + "src": "10188:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10160:6:62", + "nodeType": "YulIdentifier", + "src": "10160:6:62" + }, + "nativeSrc": "10160:35:62", + "nodeType": "YulFunctionCall", + "src": "10160:35:62" + }, + "nativeSrc": "10160:35:62", + "nodeType": "YulExpressionStatement", + "src": "10160:35:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10215:9:62", + "nodeType": "YulIdentifier", + "src": "10215:9:62" + }, + { + "kind": "number", + "nativeSrc": "10226:3:62", + "nodeType": "YulLiteral", + "src": "10226:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10211:3:62", + "nodeType": "YulIdentifier", + "src": "10211:3:62" + }, + "nativeSrc": "10211:19:62", + "nodeType": "YulFunctionCall", + "src": "10211:19:62" + }, + { + "arguments": [ + { + "name": "tail_2", + "nativeSrc": "10236:6:62", + "nodeType": "YulIdentifier", + "src": "10236:6:62" + }, + { + "name": "headStart", + "nativeSrc": "10244:9:62", + "nodeType": "YulIdentifier", + "src": "10244:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "10232:3:62", + "nodeType": "YulIdentifier", + "src": "10232:3:62" + }, + "nativeSrc": "10232:22:62", + "nodeType": "YulFunctionCall", + "src": "10232:22:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10204:6:62", + "nodeType": "YulIdentifier", + "src": "10204:6:62" + }, + "nativeSrc": "10204:51:62", + "nodeType": "YulFunctionCall", + "src": "10204:51:62" + }, + "nativeSrc": "10204:51:62", + "nodeType": "YulExpressionStatement", + "src": "10204:51:62" + }, + { + "nativeSrc": "10264:17:62", + "nodeType": "YulVariableDeclaration", + "src": "10264:17:62", + "value": { + "name": "tail_2", + "nativeSrc": "10275:6:62", + "nodeType": "YulIdentifier", + "src": "10275:6:62" + }, + "variables": [ + { + "name": "pos", + "nativeSrc": "10268:3:62", + "nodeType": "YulTypedName", + "src": "10268:3:62", + "type": "" + } + ] + }, + { + "nativeSrc": "10290:27:62", + "nodeType": "YulVariableDeclaration", + "src": "10290:27:62", + "value": { + "arguments": [ + { + "name": "value6", + "nativeSrc": "10310:6:62", + "nodeType": "YulIdentifier", + "src": "10310:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "10304:5:62", + "nodeType": "YulIdentifier", + "src": "10304:5:62" + }, + "nativeSrc": "10304:13:62", + "nodeType": "YulFunctionCall", + "src": "10304:13:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "10294:6:62", + "nodeType": "YulTypedName", + "src": "10294:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail_2", + "nativeSrc": "10333:6:62", + "nodeType": "YulIdentifier", + "src": "10333:6:62" + }, + { + "name": "length", + "nativeSrc": "10341:6:62", + "nodeType": "YulIdentifier", + "src": "10341:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10326:6:62", + "nodeType": "YulIdentifier", + "src": "10326:6:62" + }, + "nativeSrc": "10326:22:62", + "nodeType": "YulFunctionCall", + "src": "10326:22:62" + }, + "nativeSrc": "10326:22:62", + "nodeType": "YulExpressionStatement", + "src": "10326:22:62" + }, + { + "nativeSrc": "10357:22:62", + "nodeType": "YulAssignment", + "src": "10357:22:62", + "value": { + "arguments": [ + { + "name": "tail_2", + "nativeSrc": "10368:6:62", + "nodeType": "YulIdentifier", + "src": "10368:6:62" + }, + { + "kind": "number", + "nativeSrc": "10376:2:62", + "nodeType": "YulLiteral", + "src": "10376:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10364:3:62", + "nodeType": "YulIdentifier", + "src": "10364:3:62" + }, + "nativeSrc": "10364:15:62", + "nodeType": "YulFunctionCall", + "src": "10364:15:62" + }, + "variableNames": [ + { + "name": "pos", + "nativeSrc": "10357:3:62", + "nodeType": "YulIdentifier", + "src": "10357:3:62" + } + ] + }, + { + "nativeSrc": "10388:29:62", + "nodeType": "YulVariableDeclaration", + "src": "10388:29:62", + "value": { + "arguments": [ + { + "name": "value6", + "nativeSrc": "10406:6:62", + "nodeType": "YulIdentifier", + "src": "10406:6:62" + }, + { + "kind": "number", + "nativeSrc": "10414:2:62", + "nodeType": "YulLiteral", + "src": "10414:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10402:3:62", + "nodeType": "YulIdentifier", + "src": "10402:3:62" + }, + "nativeSrc": "10402:15:62", + "nodeType": "YulFunctionCall", + "src": "10402:15:62" + }, + "variables": [ + { + "name": "srcPtr", + "nativeSrc": "10392:6:62", + "nodeType": "YulTypedName", + "src": "10392:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "10426:10:62", + "nodeType": "YulVariableDeclaration", + "src": "10426:10:62", + "value": { + "kind": "number", + "nativeSrc": "10435:1:62", + "nodeType": "YulLiteral", + "src": "10435:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "10430:1:62", + "nodeType": "YulTypedName", + "src": "10430:1:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "10494:120:62", + "nodeType": "YulBlock", + "src": "10494:120:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "10515:3:62", + "nodeType": "YulIdentifier", + "src": "10515:3:62" + }, + { + "arguments": [ + { + "name": "srcPtr", + "nativeSrc": "10526:6:62", + "nodeType": "YulIdentifier", + "src": "10526:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "10520:5:62", + "nodeType": "YulIdentifier", + "src": "10520:5:62" + }, + "nativeSrc": "10520:13:62", + "nodeType": "YulFunctionCall", + "src": "10520:13:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10508:6:62", + "nodeType": "YulIdentifier", + "src": "10508:6:62" + }, + "nativeSrc": "10508:26:62", + "nodeType": "YulFunctionCall", + "src": "10508:26:62" + }, + "nativeSrc": "10508:26:62", + "nodeType": "YulExpressionStatement", + "src": "10508:26:62" + }, + { + "nativeSrc": "10547:19:62", + "nodeType": "YulAssignment", + "src": "10547:19:62", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "10558:3:62", + "nodeType": "YulIdentifier", + "src": "10558:3:62" + }, + { + "kind": "number", + "nativeSrc": "10563:2:62", + "nodeType": "YulLiteral", + "src": "10563:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10554:3:62", + "nodeType": "YulIdentifier", + "src": "10554:3:62" + }, + "nativeSrc": "10554:12:62", + "nodeType": "YulFunctionCall", + "src": "10554:12:62" + }, + "variableNames": [ + { + "name": "pos", + "nativeSrc": "10547:3:62", + "nodeType": "YulIdentifier", + "src": "10547:3:62" + } + ] + }, + { + "nativeSrc": "10579:25:62", + "nodeType": "YulAssignment", + "src": "10579:25:62", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nativeSrc": "10593:6:62", + "nodeType": "YulIdentifier", + "src": "10593:6:62" + }, + { + "kind": "number", + "nativeSrc": "10601:2:62", + "nodeType": "YulLiteral", + "src": "10601:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10589:3:62", + "nodeType": "YulIdentifier", + "src": "10589:3:62" + }, + "nativeSrc": "10589:15:62", + "nodeType": "YulFunctionCall", + "src": "10589:15:62" + }, + "variableNames": [ + { + "name": "srcPtr", + "nativeSrc": "10579:6:62", + "nodeType": "YulIdentifier", + "src": "10579:6:62" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "10456:1:62", + "nodeType": "YulIdentifier", + "src": "10456:1:62" + }, + { + "name": "length", + "nativeSrc": "10459:6:62", + "nodeType": "YulIdentifier", + "src": "10459:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "10453:2:62", + "nodeType": "YulIdentifier", + "src": "10453:2:62" + }, + "nativeSrc": "10453:13:62", + "nodeType": "YulFunctionCall", + "src": "10453:13:62" + }, + "nativeSrc": "10445:169:62", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "10467:18:62", + "nodeType": "YulBlock", + "src": "10467:18:62", + "statements": [ + { + "nativeSrc": "10469:14:62", + "nodeType": "YulAssignment", + "src": "10469:14:62", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "10478:1:62", + "nodeType": "YulIdentifier", + "src": "10478:1:62" + }, + { + "kind": "number", + "nativeSrc": "10481:1:62", + "nodeType": "YulLiteral", + "src": "10481:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10474:3:62", + "nodeType": "YulIdentifier", + "src": "10474:3:62" + }, + "nativeSrc": "10474:9:62", + "nodeType": "YulFunctionCall", + "src": "10474:9:62" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "10469:1:62", + "nodeType": "YulIdentifier", + "src": "10469:1:62" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "10449:3:62", + "nodeType": "YulBlock", + "src": "10449:3:62", + "statements": [] + }, + "src": "10445:169:62" + }, + { + "nativeSrc": "10623:11:62", + "nodeType": "YulAssignment", + "src": "10623:11:62", + "value": { + "name": "pos", + "nativeSrc": "10631:3:62", + "nodeType": "YulIdentifier", + "src": "10631:3:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "10623:4:62", + "nodeType": "YulIdentifier", + "src": "10623:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__to_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed", + "nativeSrc": "9402:1238:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "9680:9:62", + "nodeType": "YulTypedName", + "src": "9680:9:62", + "type": "" + }, + { + "name": "value6", + "nativeSrc": "9691:6:62", + "nodeType": "YulTypedName", + "src": "9691:6:62", + "type": "" + }, + { + "name": "value5", + "nativeSrc": "9699:6:62", + "nodeType": "YulTypedName", + "src": "9699:6:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "9707:6:62", + "nodeType": "YulTypedName", + "src": "9707:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "9715:6:62", + "nodeType": "YulTypedName", + "src": "9715:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "9723:6:62", + "nodeType": "YulTypedName", + "src": "9723:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "9731:6:62", + "nodeType": "YulTypedName", + "src": "9731:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "9739:6:62", + "nodeType": "YulTypedName", + "src": "9739:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "9750:4:62", + "nodeType": "YulTypedName", + "src": "9750:4:62", + "type": "" + } + ], + "src": "9402:1238:62" + }, + { + "body": { + "nativeSrc": "10744:101:62", + "nodeType": "YulBlock", + "src": "10744:101:62", + "statements": [ + { + "nativeSrc": "10754:26:62", + "nodeType": "YulAssignment", + "src": "10754:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10766:9:62", + "nodeType": "YulIdentifier", + "src": "10766:9:62" + }, + { + "kind": "number", + "nativeSrc": "10777:2:62", + "nodeType": "YulLiteral", + "src": "10777:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10762:3:62", + "nodeType": "YulIdentifier", + "src": "10762:3:62" + }, + "nativeSrc": "10762:18:62", + "nodeType": "YulFunctionCall", + "src": "10762:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "10754:4:62", + "nodeType": "YulIdentifier", + "src": "10754:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "10796:9:62", + "nodeType": "YulIdentifier", + "src": "10796:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "10811:6:62", + "nodeType": "YulIdentifier", + "src": "10811:6:62" + }, + { + "kind": "number", + "nativeSrc": "10819:18:62", + "nodeType": "YulLiteral", + "src": "10819:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "10807:3:62", + "nodeType": "YulIdentifier", + "src": "10807:3:62" + }, + "nativeSrc": "10807:31:62", + "nodeType": "YulFunctionCall", + "src": "10807:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10789:6:62", + "nodeType": "YulIdentifier", + "src": "10789:6:62" + }, + "nativeSrc": "10789:50:62", + "nodeType": "YulFunctionCall", + "src": "10789:50:62" + }, + "nativeSrc": "10789:50:62", + "nodeType": "YulExpressionStatement", + "src": "10789:50:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", + "nativeSrc": "10645:200:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "10713:9:62", + "nodeType": "YulTypedName", + "src": "10713:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "10724:6:62", + "nodeType": "YulTypedName", + "src": "10724:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "10735:4:62", + "nodeType": "YulTypedName", + "src": "10735:4:62", + "type": "" + } + ], + "src": "10645:200:62" + }, + { + "body": { + "nativeSrc": "10979:145:62", + "nodeType": "YulBlock", + "src": "10979:145:62", + "statements": [ + { + "nativeSrc": "10989:26:62", + "nodeType": "YulAssignment", + "src": "10989:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11001:9:62", + "nodeType": "YulIdentifier", + "src": "11001:9:62" + }, + { + "kind": "number", + "nativeSrc": "11012:2:62", + "nodeType": "YulLiteral", + "src": "11012:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "10997:3:62", + "nodeType": "YulIdentifier", + "src": "10997:3:62" + }, + "nativeSrc": "10997:18:62", + "nodeType": "YulFunctionCall", + "src": "10997:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "10989:4:62", + "nodeType": "YulIdentifier", + "src": "10989:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11031:9:62", + "nodeType": "YulIdentifier", + "src": "11031:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "11046:6:62", + "nodeType": "YulIdentifier", + "src": "11046:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11062:3:62", + "nodeType": "YulLiteral", + "src": "11062:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "11067:1:62", + "nodeType": "YulLiteral", + "src": "11067:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "11058:3:62", + "nodeType": "YulIdentifier", + "src": "11058:3:62" + }, + "nativeSrc": "11058:11:62", + "nodeType": "YulFunctionCall", + "src": "11058:11:62" + }, + { + "kind": "number", + "nativeSrc": "11071:1:62", + "nodeType": "YulLiteral", + "src": "11071:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "11054:3:62", + "nodeType": "YulIdentifier", + "src": "11054:3:62" + }, + "nativeSrc": "11054:19:62", + "nodeType": "YulFunctionCall", + "src": "11054:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "11042:3:62", + "nodeType": "YulIdentifier", + "src": "11042:3:62" + }, + "nativeSrc": "11042:32:62", + "nodeType": "YulFunctionCall", + "src": "11042:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11024:6:62", + "nodeType": "YulIdentifier", + "src": "11024:6:62" + }, + "nativeSrc": "11024:51:62", + "nodeType": "YulFunctionCall", + "src": "11024:51:62" + }, + "nativeSrc": "11024:51:62", + "nodeType": "YulExpressionStatement", + "src": "11024:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11095:9:62", + "nodeType": "YulIdentifier", + "src": "11095:9:62" + }, + { + "kind": "number", + "nativeSrc": "11106:2:62", + "nodeType": "YulLiteral", + "src": "11106:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11091:3:62", + "nodeType": "YulIdentifier", + "src": "11091:3:62" + }, + "nativeSrc": "11091:18:62", + "nodeType": "YulFunctionCall", + "src": "11091:18:62" + }, + { + "name": "value1", + "nativeSrc": "11111:6:62", + "nodeType": "YulIdentifier", + "src": "11111:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11084:6:62", + "nodeType": "YulIdentifier", + "src": "11084:6:62" + }, + "nativeSrc": "11084:34:62", + "nodeType": "YulFunctionCall", + "src": "11084:34:62" + }, + "nativeSrc": "11084:34:62", + "nodeType": "YulExpressionStatement", + "src": "11084:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_bytes32__to_t_address_t_bytes32__fromStack_reversed", + "nativeSrc": "10850:274:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "10940:9:62", + "nodeType": "YulTypedName", + "src": "10940:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "10951:6:62", + "nodeType": "YulTypedName", + "src": "10951:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "10959:6:62", + "nodeType": "YulTypedName", + "src": "10959:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "10970:4:62", + "nodeType": "YulTypedName", + "src": "10970:4:62", + "type": "" + } + ], + "src": "10850:274:62" + }, + { + "body": { + "nativeSrc": "11245:505:62", + "nodeType": "YulBlock", + "src": "11245:505:62", + "statements": [ + { + "body": { + "nativeSrc": "11291:16:62", + "nodeType": "YulBlock", + "src": "11291:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11300:1:62", + "nodeType": "YulLiteral", + "src": "11300:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "11303:1:62", + "nodeType": "YulLiteral", + "src": "11303:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "11293:6:62", + "nodeType": "YulIdentifier", + "src": "11293:6:62" + }, + "nativeSrc": "11293:12:62", + "nodeType": "YulFunctionCall", + "src": "11293:12:62" + }, + "nativeSrc": "11293:12:62", + "nodeType": "YulExpressionStatement", + "src": "11293:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "11266:7:62", + "nodeType": "YulIdentifier", + "src": "11266:7:62" + }, + { + "name": "headStart", + "nativeSrc": "11275:9:62", + "nodeType": "YulIdentifier", + "src": "11275:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "11262:3:62", + "nodeType": "YulIdentifier", + "src": "11262:3:62" + }, + "nativeSrc": "11262:23:62", + "nodeType": "YulFunctionCall", + "src": "11262:23:62" + }, + { + "kind": "number", + "nativeSrc": "11287:2:62", + "nodeType": "YulLiteral", + "src": "11287:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "11258:3:62", + "nodeType": "YulIdentifier", + "src": "11258:3:62" + }, + "nativeSrc": "11258:32:62", + "nodeType": "YulFunctionCall", + "src": "11258:32:62" + }, + "nativeSrc": "11255:52:62", + "nodeType": "YulIf", + "src": "11255:52:62" + }, + { + "nativeSrc": "11316:37:62", + "nodeType": "YulVariableDeclaration", + "src": "11316:37:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11343:9:62", + "nodeType": "YulIdentifier", + "src": "11343:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "11330:12:62", + "nodeType": "YulIdentifier", + "src": "11330:12:62" + }, + "nativeSrc": "11330:23:62", + "nodeType": "YulFunctionCall", + "src": "11330:23:62" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "11320:6:62", + "nodeType": "YulTypedName", + "src": "11320:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "11396:16:62", + "nodeType": "YulBlock", + "src": "11396:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11405:1:62", + "nodeType": "YulLiteral", + "src": "11405:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "11408:1:62", + "nodeType": "YulLiteral", + "src": "11408:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "11398:6:62", + "nodeType": "YulIdentifier", + "src": "11398:6:62" + }, + "nativeSrc": "11398:12:62", + "nodeType": "YulFunctionCall", + "src": "11398:12:62" + }, + "nativeSrc": "11398:12:62", + "nodeType": "YulExpressionStatement", + "src": "11398:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "11368:6:62", + "nodeType": "YulIdentifier", + "src": "11368:6:62" + }, + { + "kind": "number", + "nativeSrc": "11376:18:62", + "nodeType": "YulLiteral", + "src": "11376:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "11365:2:62", + "nodeType": "YulIdentifier", + "src": "11365:2:62" + }, + "nativeSrc": "11365:30:62", + "nodeType": "YulFunctionCall", + "src": "11365:30:62" + }, + "nativeSrc": "11362:50:62", + "nodeType": "YulIf", + "src": "11362:50:62" + }, + { + "nativeSrc": "11421:32:62", + "nodeType": "YulVariableDeclaration", + "src": "11421:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11435:9:62", + "nodeType": "YulIdentifier", + "src": "11435:9:62" + }, + { + "name": "offset", + "nativeSrc": "11446:6:62", + "nodeType": "YulIdentifier", + "src": "11446:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11431:3:62", + "nodeType": "YulIdentifier", + "src": "11431:3:62" + }, + "nativeSrc": "11431:22:62", + "nodeType": "YulFunctionCall", + "src": "11431:22:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "11425:2:62", + "nodeType": "YulTypedName", + "src": "11425:2:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "11501:16:62", + "nodeType": "YulBlock", + "src": "11501:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11510:1:62", + "nodeType": "YulLiteral", + "src": "11510:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "11513:1:62", + "nodeType": "YulLiteral", + "src": "11513:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "11503:6:62", + "nodeType": "YulIdentifier", + "src": "11503:6:62" + }, + "nativeSrc": "11503:12:62", + "nodeType": "YulFunctionCall", + "src": "11503:12:62" + }, + "nativeSrc": "11503:12:62", + "nodeType": "YulExpressionStatement", + "src": "11503:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "11480:2:62", + "nodeType": "YulIdentifier", + "src": "11480:2:62" + }, + { + "kind": "number", + "nativeSrc": "11484:4:62", + "nodeType": "YulLiteral", + "src": "11484:4:62", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11476:3:62", + "nodeType": "YulIdentifier", + "src": "11476:3:62" + }, + "nativeSrc": "11476:13:62", + "nodeType": "YulFunctionCall", + "src": "11476:13:62" + }, + { + "name": "dataEnd", + "nativeSrc": "11491:7:62", + "nodeType": "YulIdentifier", + "src": "11491:7:62" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "11472:3:62", + "nodeType": "YulIdentifier", + "src": "11472:3:62" + }, + "nativeSrc": "11472:27:62", + "nodeType": "YulFunctionCall", + "src": "11472:27:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "11465:6:62", + "nodeType": "YulIdentifier", + "src": "11465:6:62" + }, + "nativeSrc": "11465:35:62", + "nodeType": "YulFunctionCall", + "src": "11465:35:62" + }, + "nativeSrc": "11462:55:62", + "nodeType": "YulIf", + "src": "11462:55:62" + }, + { + "nativeSrc": "11526:30:62", + "nodeType": "YulVariableDeclaration", + "src": "11526:30:62", + "value": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "11553:2:62", + "nodeType": "YulIdentifier", + "src": "11553:2:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "11540:12:62", + "nodeType": "YulIdentifier", + "src": "11540:12:62" + }, + "nativeSrc": "11540:16:62", + "nodeType": "YulFunctionCall", + "src": "11540:16:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "11530:6:62", + "nodeType": "YulTypedName", + "src": "11530:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "11599:16:62", + "nodeType": "YulBlock", + "src": "11599:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11608:1:62", + "nodeType": "YulLiteral", + "src": "11608:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "11611:1:62", + "nodeType": "YulLiteral", + "src": "11611:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "11601:6:62", + "nodeType": "YulIdentifier", + "src": "11601:6:62" + }, + "nativeSrc": "11601:12:62", + "nodeType": "YulFunctionCall", + "src": "11601:12:62" + }, + "nativeSrc": "11601:12:62", + "nodeType": "YulExpressionStatement", + "src": "11601:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nativeSrc": "11571:6:62", + "nodeType": "YulIdentifier", + "src": "11571:6:62" + }, + { + "kind": "number", + "nativeSrc": "11579:18:62", + "nodeType": "YulLiteral", + "src": "11579:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "11568:2:62", + "nodeType": "YulIdentifier", + "src": "11568:2:62" + }, + "nativeSrc": "11568:30:62", + "nodeType": "YulFunctionCall", + "src": "11568:30:62" + }, + "nativeSrc": "11565:50:62", + "nodeType": "YulIf", + "src": "11565:50:62" + }, + { + "body": { + "nativeSrc": "11673:16:62", + "nodeType": "YulBlock", + "src": "11673:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11682:1:62", + "nodeType": "YulLiteral", + "src": "11682:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "11685:1:62", + "nodeType": "YulLiteral", + "src": "11685:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "11675:6:62", + "nodeType": "YulIdentifier", + "src": "11675:6:62" + }, + "nativeSrc": "11675:12:62", + "nodeType": "YulFunctionCall", + "src": "11675:12:62" + }, + "nativeSrc": "11675:12:62", + "nodeType": "YulExpressionStatement", + "src": "11675:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "11638:2:62", + "nodeType": "YulIdentifier", + "src": "11638:2:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "11646:1:62", + "nodeType": "YulLiteral", + "src": "11646:1:62", + "type": "", + "value": "5" + }, + { + "name": "length", + "nativeSrc": "11649:6:62", + "nodeType": "YulIdentifier", + "src": "11649:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "11642:3:62", + "nodeType": "YulIdentifier", + "src": "11642:3:62" + }, + "nativeSrc": "11642:14:62", + "nodeType": "YulFunctionCall", + "src": "11642:14:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11634:3:62", + "nodeType": "YulIdentifier", + "src": "11634:3:62" + }, + "nativeSrc": "11634:23:62", + "nodeType": "YulFunctionCall", + "src": "11634:23:62" + }, + { + "kind": "number", + "nativeSrc": "11659:2:62", + "nodeType": "YulLiteral", + "src": "11659:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11630:3:62", + "nodeType": "YulIdentifier", + "src": "11630:3:62" + }, + "nativeSrc": "11630:32:62", + "nodeType": "YulFunctionCall", + "src": "11630:32:62" + }, + { + "name": "dataEnd", + "nativeSrc": "11664:7:62", + "nodeType": "YulIdentifier", + "src": "11664:7:62" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "11627:2:62", + "nodeType": "YulIdentifier", + "src": "11627:2:62" + }, + "nativeSrc": "11627:45:62", + "nodeType": "YulFunctionCall", + "src": "11627:45:62" + }, + "nativeSrc": "11624:65:62", + "nodeType": "YulIf", + "src": "11624:65:62" + }, + { + "nativeSrc": "11698:21:62", + "nodeType": "YulAssignment", + "src": "11698:21:62", + "value": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "11712:2:62", + "nodeType": "YulIdentifier", + "src": "11712:2:62" + }, + { + "kind": "number", + "nativeSrc": "11716:2:62", + "nodeType": "YulLiteral", + "src": "11716:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11708:3:62", + "nodeType": "YulIdentifier", + "src": "11708:3:62" + }, + "nativeSrc": "11708:11:62", + "nodeType": "YulFunctionCall", + "src": "11708:11:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "11698:6:62", + "nodeType": "YulIdentifier", + "src": "11698:6:62" + } + ] + }, + { + "nativeSrc": "11728:16:62", + "nodeType": "YulAssignment", + "src": "11728:16:62", + "value": { + "name": "length", + "nativeSrc": "11738:6:62", + "nodeType": "YulIdentifier", + "src": "11738:6:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "11728:6:62", + "nodeType": "YulIdentifier", + "src": "11728:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "nativeSrc": "11129:621:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "11203:9:62", + "nodeType": "YulTypedName", + "src": "11203:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "11214:7:62", + "nodeType": "YulTypedName", + "src": "11214:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "11226:6:62", + "nodeType": "YulTypedName", + "src": "11226:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "11234:6:62", + "nodeType": "YulTypedName", + "src": "11234:6:62", + "type": "" + } + ], + "src": "11129:621:62" + }, + { + "body": { + "nativeSrc": "11924:611:62", + "nodeType": "YulBlock", + "src": "11924:611:62", + "statements": [ + { + "nativeSrc": "11934:32:62", + "nodeType": "YulVariableDeclaration", + "src": "11934:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11952:9:62", + "nodeType": "YulIdentifier", + "src": "11952:9:62" + }, + { + "kind": "number", + "nativeSrc": "11963:2:62", + "nodeType": "YulLiteral", + "src": "11963:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "11948:3:62", + "nodeType": "YulIdentifier", + "src": "11948:3:62" + }, + "nativeSrc": "11948:18:62", + "nodeType": "YulFunctionCall", + "src": "11948:18:62" + }, + "variables": [ + { + "name": "tail_1", + "nativeSrc": "11938:6:62", + "nodeType": "YulTypedName", + "src": "11938:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "11982:9:62", + "nodeType": "YulIdentifier", + "src": "11982:9:62" + }, + { + "kind": "number", + "nativeSrc": "11993:2:62", + "nodeType": "YulLiteral", + "src": "11993:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "11975:6:62", + "nodeType": "YulIdentifier", + "src": "11975:6:62" + }, + "nativeSrc": "11975:21:62", + "nodeType": "YulFunctionCall", + "src": "11975:21:62" + }, + "nativeSrc": "11975:21:62", + "nodeType": "YulExpressionStatement", + "src": "11975:21:62" + }, + { + "nativeSrc": "12005:17:62", + "nodeType": "YulVariableDeclaration", + "src": "12005:17:62", + "value": { + "name": "tail_1", + "nativeSrc": "12016:6:62", + "nodeType": "YulIdentifier", + "src": "12016:6:62" + }, + "variables": [ + { + "name": "pos", + "nativeSrc": "12009:3:62", + "nodeType": "YulTypedName", + "src": "12009:3:62", + "type": "" + } + ] + }, + { + "nativeSrc": "12031:27:62", + "nodeType": "YulVariableDeclaration", + "src": "12031:27:62", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "12051:6:62", + "nodeType": "YulIdentifier", + "src": "12051:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "12045:5:62", + "nodeType": "YulIdentifier", + "src": "12045:5:62" + }, + "nativeSrc": "12045:13:62", + "nodeType": "YulFunctionCall", + "src": "12045:13:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "12035:6:62", + "nodeType": "YulTypedName", + "src": "12035:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail_1", + "nativeSrc": "12074:6:62", + "nodeType": "YulIdentifier", + "src": "12074:6:62" + }, + { + "name": "length", + "nativeSrc": "12082:6:62", + "nodeType": "YulIdentifier", + "src": "12082:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12067:6:62", + "nodeType": "YulIdentifier", + "src": "12067:6:62" + }, + "nativeSrc": "12067:22:62", + "nodeType": "YulFunctionCall", + "src": "12067:22:62" + }, + "nativeSrc": "12067:22:62", + "nodeType": "YulExpressionStatement", + "src": "12067:22:62" + }, + { + "nativeSrc": "12098:25:62", + "nodeType": "YulAssignment", + "src": "12098:25:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12109:9:62", + "nodeType": "YulIdentifier", + "src": "12109:9:62" + }, + { + "kind": "number", + "nativeSrc": "12120:2:62", + "nodeType": "YulLiteral", + "src": "12120:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12105:3:62", + "nodeType": "YulIdentifier", + "src": "12105:3:62" + }, + "nativeSrc": "12105:18:62", + "nodeType": "YulFunctionCall", + "src": "12105:18:62" + }, + "variableNames": [ + { + "name": "pos", + "nativeSrc": "12098:3:62", + "nodeType": "YulIdentifier", + "src": "12098:3:62" + } + ] + }, + { + "nativeSrc": "12132:53:62", + "nodeType": "YulVariableDeclaration", + "src": "12132:53:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12154:9:62", + "nodeType": "YulIdentifier", + "src": "12154:9:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12169:1:62", + "nodeType": "YulLiteral", + "src": "12169:1:62", + "type": "", + "value": "5" + }, + { + "name": "length", + "nativeSrc": "12172:6:62", + "nodeType": "YulIdentifier", + "src": "12172:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "12165:3:62", + "nodeType": "YulIdentifier", + "src": "12165:3:62" + }, + "nativeSrc": "12165:14:62", + "nodeType": "YulFunctionCall", + "src": "12165:14:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12150:3:62", + "nodeType": "YulIdentifier", + "src": "12150:3:62" + }, + "nativeSrc": "12150:30:62", + "nodeType": "YulFunctionCall", + "src": "12150:30:62" + }, + { + "kind": "number", + "nativeSrc": "12182:2:62", + "nodeType": "YulLiteral", + "src": "12182:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12146:3:62", + "nodeType": "YulIdentifier", + "src": "12146:3:62" + }, + "nativeSrc": "12146:39:62", + "nodeType": "YulFunctionCall", + "src": "12146:39:62" + }, + "variables": [ + { + "name": "tail_2", + "nativeSrc": "12136:6:62", + "nodeType": "YulTypedName", + "src": "12136:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "12194:29:62", + "nodeType": "YulVariableDeclaration", + "src": "12194:29:62", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "12212:6:62", + "nodeType": "YulIdentifier", + "src": "12212:6:62" + }, + { + "kind": "number", + "nativeSrc": "12220:2:62", + "nodeType": "YulLiteral", + "src": "12220:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12208:3:62", + "nodeType": "YulIdentifier", + "src": "12208:3:62" + }, + "nativeSrc": "12208:15:62", + "nodeType": "YulFunctionCall", + "src": "12208:15:62" + }, + "variables": [ + { + "name": "srcPtr", + "nativeSrc": "12198:6:62", + "nodeType": "YulTypedName", + "src": "12198:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "12232:10:62", + "nodeType": "YulVariableDeclaration", + "src": "12232:10:62", + "value": { + "kind": "number", + "nativeSrc": "12241:1:62", + "nodeType": "YulLiteral", + "src": "12241:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "12236:1:62", + "nodeType": "YulTypedName", + "src": "12236:1:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "12300:206:62", + "nodeType": "YulBlock", + "src": "12300:206:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "12321:3:62", + "nodeType": "YulIdentifier", + "src": "12321:3:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nativeSrc": "12334:6:62", + "nodeType": "YulIdentifier", + "src": "12334:6:62" + }, + { + "name": "headStart", + "nativeSrc": "12342:9:62", + "nodeType": "YulIdentifier", + "src": "12342:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "12330:3:62", + "nodeType": "YulIdentifier", + "src": "12330:3:62" + }, + "nativeSrc": "12330:22:62", + "nodeType": "YulFunctionCall", + "src": "12330:22:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12358:2:62", + "nodeType": "YulLiteral", + "src": "12358:2:62", + "type": "", + "value": "63" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "12354:3:62", + "nodeType": "YulIdentifier", + "src": "12354:3:62" + }, + "nativeSrc": "12354:7:62", + "nodeType": "YulFunctionCall", + "src": "12354:7:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12326:3:62", + "nodeType": "YulIdentifier", + "src": "12326:3:62" + }, + "nativeSrc": "12326:36:62", + "nodeType": "YulFunctionCall", + "src": "12326:36:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "12314:6:62", + "nodeType": "YulIdentifier", + "src": "12314:6:62" + }, + "nativeSrc": "12314:49:62", + "nodeType": "YulFunctionCall", + "src": "12314:49:62" + }, + "nativeSrc": "12314:49:62", + "nodeType": "YulExpressionStatement", + "src": "12314:49:62" + }, + { + "nativeSrc": "12376:50:62", + "nodeType": "YulAssignment", + "src": "12376:50:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "srcPtr", + "nativeSrc": "12410:6:62", + "nodeType": "YulIdentifier", + "src": "12410:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "12404:5:62", + "nodeType": "YulIdentifier", + "src": "12404:5:62" + }, + "nativeSrc": "12404:13:62", + "nodeType": "YulFunctionCall", + "src": "12404:13:62" + }, + { + "name": "tail_2", + "nativeSrc": "12419:6:62", + "nodeType": "YulIdentifier", + "src": "12419:6:62" + } + ], + "functionName": { + "name": "abi_encode_string", + "nativeSrc": "12386:17:62", + "nodeType": "YulIdentifier", + "src": "12386:17:62" + }, + "nativeSrc": "12386:40:62", + "nodeType": "YulFunctionCall", + "src": "12386:40:62" + }, + "variableNames": [ + { + "name": "tail_2", + "nativeSrc": "12376:6:62", + "nodeType": "YulIdentifier", + "src": "12376:6:62" + } + ] + }, + { + "nativeSrc": "12439:25:62", + "nodeType": "YulAssignment", + "src": "12439:25:62", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nativeSrc": "12453:6:62", + "nodeType": "YulIdentifier", + "src": "12453:6:62" + }, + { + "kind": "number", + "nativeSrc": "12461:2:62", + "nodeType": "YulLiteral", + "src": "12461:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12449:3:62", + "nodeType": "YulIdentifier", + "src": "12449:3:62" + }, + "nativeSrc": "12449:15:62", + "nodeType": "YulFunctionCall", + "src": "12449:15:62" + }, + "variableNames": [ + { + "name": "srcPtr", + "nativeSrc": "12439:6:62", + "nodeType": "YulIdentifier", + "src": "12439:6:62" + } + ] + }, + { + "nativeSrc": "12477:19:62", + "nodeType": "YulAssignment", + "src": "12477:19:62", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "12488:3:62", + "nodeType": "YulIdentifier", + "src": "12488:3:62" + }, + { + "kind": "number", + "nativeSrc": "12493:2:62", + "nodeType": "YulLiteral", + "src": "12493:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12484:3:62", + "nodeType": "YulIdentifier", + "src": "12484:3:62" + }, + "nativeSrc": "12484:12:62", + "nodeType": "YulFunctionCall", + "src": "12484:12:62" + }, + "variableNames": [ + { + "name": "pos", + "nativeSrc": "12477:3:62", + "nodeType": "YulIdentifier", + "src": "12477:3:62" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "12262:1:62", + "nodeType": "YulIdentifier", + "src": "12262:1:62" + }, + { + "name": "length", + "nativeSrc": "12265:6:62", + "nodeType": "YulIdentifier", + "src": "12265:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "12259:2:62", + "nodeType": "YulIdentifier", + "src": "12259:2:62" + }, + "nativeSrc": "12259:13:62", + "nodeType": "YulFunctionCall", + "src": "12259:13:62" + }, + "nativeSrc": "12251:255:62", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "12273:18:62", + "nodeType": "YulBlock", + "src": "12273:18:62", + "statements": [ + { + "nativeSrc": "12275:14:62", + "nodeType": "YulAssignment", + "src": "12275:14:62", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "12284:1:62", + "nodeType": "YulIdentifier", + "src": "12284:1:62" + }, + { + "kind": "number", + "nativeSrc": "12287:1:62", + "nodeType": "YulLiteral", + "src": "12287:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12280:3:62", + "nodeType": "YulIdentifier", + "src": "12280:3:62" + }, + "nativeSrc": "12280:9:62", + "nodeType": "YulFunctionCall", + "src": "12280:9:62" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "12275:1:62", + "nodeType": "YulIdentifier", + "src": "12275:1:62" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "12255:3:62", + "nodeType": "YulBlock", + "src": "12255:3:62", + "statements": [] + }, + "src": "12251:255:62" + }, + { + "nativeSrc": "12515:14:62", + "nodeType": "YulAssignment", + "src": "12515:14:62", + "value": { + "name": "tail_2", + "nativeSrc": "12523:6:62", + "nodeType": "YulIdentifier", + "src": "12523:6:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "12515:4:62", + "nodeType": "YulIdentifier", + "src": "12515:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed", + "nativeSrc": "11755:780:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "11893:9:62", + "nodeType": "YulTypedName", + "src": "11893:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "11904:6:62", + "nodeType": "YulTypedName", + "src": "11904:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "11915:4:62", + "nodeType": "YulTypedName", + "src": "11915:4:62", + "type": "" + } + ], + "src": "11755:780:62" + }, + { + "body": { + "nativeSrc": "12680:571:62", + "nodeType": "YulBlock", + "src": "12680:571:62", + "statements": [ + { + "body": { + "nativeSrc": "12726:16:62", + "nodeType": "YulBlock", + "src": "12726:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12735:1:62", + "nodeType": "YulLiteral", + "src": "12735:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "12738:1:62", + "nodeType": "YulLiteral", + "src": "12738:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "12728:6:62", + "nodeType": "YulIdentifier", + "src": "12728:6:62" + }, + "nativeSrc": "12728:12:62", + "nodeType": "YulFunctionCall", + "src": "12728:12:62" + }, + "nativeSrc": "12728:12:62", + "nodeType": "YulExpressionStatement", + "src": "12728:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "12701:7:62", + "nodeType": "YulIdentifier", + "src": "12701:7:62" + }, + { + "name": "headStart", + "nativeSrc": "12710:9:62", + "nodeType": "YulIdentifier", + "src": "12710:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "12697:3:62", + "nodeType": "YulIdentifier", + "src": "12697:3:62" + }, + "nativeSrc": "12697:23:62", + "nodeType": "YulFunctionCall", + "src": "12697:23:62" + }, + { + "kind": "number", + "nativeSrc": "12722:2:62", + "nodeType": "YulLiteral", + "src": "12722:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "12693:3:62", + "nodeType": "YulIdentifier", + "src": "12693:3:62" + }, + "nativeSrc": "12693:32:62", + "nodeType": "YulFunctionCall", + "src": "12693:32:62" + }, + "nativeSrc": "12690:52:62", + "nodeType": "YulIf", + "src": "12690:52:62" + }, + { + "nativeSrc": "12751:36:62", + "nodeType": "YulVariableDeclaration", + "src": "12751:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12777:9:62", + "nodeType": "YulIdentifier", + "src": "12777:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "12764:12:62", + "nodeType": "YulIdentifier", + "src": "12764:12:62" + }, + "nativeSrc": "12764:23:62", + "nodeType": "YulFunctionCall", + "src": "12764:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "12755:5:62", + "nodeType": "YulTypedName", + "src": "12755:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "12821:5:62", + "nodeType": "YulIdentifier", + "src": "12821:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "12796:24:62", + "nodeType": "YulIdentifier", + "src": "12796:24:62" + }, + "nativeSrc": "12796:31:62", + "nodeType": "YulFunctionCall", + "src": "12796:31:62" + }, + "nativeSrc": "12796:31:62", + "nodeType": "YulExpressionStatement", + "src": "12796:31:62" + }, + { + "nativeSrc": "12836:15:62", + "nodeType": "YulAssignment", + "src": "12836:15:62", + "value": { + "name": "value", + "nativeSrc": "12846:5:62", + "nodeType": "YulIdentifier", + "src": "12846:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "12836:6:62", + "nodeType": "YulIdentifier", + "src": "12836:6:62" + } + ] + }, + { + "nativeSrc": "12860:47:62", + "nodeType": "YulVariableDeclaration", + "src": "12860:47:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "12892:9:62", + "nodeType": "YulIdentifier", + "src": "12892:9:62" + }, + { + "kind": "number", + "nativeSrc": "12903:2:62", + "nodeType": "YulLiteral", + "src": "12903:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "12888:3:62", + "nodeType": "YulIdentifier", + "src": "12888:3:62" + }, + "nativeSrc": "12888:18:62", + "nodeType": "YulFunctionCall", + "src": "12888:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "12875:12:62", + "nodeType": "YulIdentifier", + "src": "12875:12:62" + }, + "nativeSrc": "12875:32:62", + "nodeType": "YulFunctionCall", + "src": "12875:32:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "12864:7:62", + "nodeType": "YulTypedName", + "src": "12864:7:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "12942:16:62", + "nodeType": "YulBlock", + "src": "12942:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "12951:1:62", + "nodeType": "YulLiteral", + "src": "12951:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "12954:1:62", + "nodeType": "YulLiteral", + "src": "12954:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "12944:6:62", + "nodeType": "YulIdentifier", + "src": "12944:6:62" + }, + "nativeSrc": "12944:12:62", + "nodeType": "YulFunctionCall", + "src": "12944:12:62" + }, + "nativeSrc": "12944:12:62", + "nodeType": "YulExpressionStatement", + "src": "12944:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "12929:7:62", + "nodeType": "YulIdentifier", + "src": "12929:7:62" + }, + { + "kind": "number", + "nativeSrc": "12938:1:62", + "nodeType": "YulLiteral", + "src": "12938:1:62", + "type": "", + "value": "3" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "12926:2:62", + "nodeType": "YulIdentifier", + "src": "12926:2:62" + }, + "nativeSrc": "12926:14:62", + "nodeType": "YulFunctionCall", + "src": "12926:14:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "12919:6:62", + "nodeType": "YulIdentifier", + "src": "12919:6:62" + }, + "nativeSrc": "12919:22:62", + "nodeType": "YulFunctionCall", + "src": "12919:22:62" + }, + "nativeSrc": "12916:42:62", + "nodeType": "YulIf", + "src": "12916:42:62" + }, + { + "nativeSrc": "12967:17:62", + "nodeType": "YulAssignment", + "src": "12967:17:62", + "value": { + "name": "value_1", + "nativeSrc": "12977:7:62", + "nodeType": "YulIdentifier", + "src": "12977:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "12967:6:62", + "nodeType": "YulIdentifier", + "src": "12967:6:62" + } + ] + }, + { + "nativeSrc": "12993:46:62", + "nodeType": "YulVariableDeclaration", + "src": "12993:46:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13024:9:62", + "nodeType": "YulIdentifier", + "src": "13024:9:62" + }, + { + "kind": "number", + "nativeSrc": "13035:2:62", + "nodeType": "YulLiteral", + "src": "13035:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13020:3:62", + "nodeType": "YulIdentifier", + "src": "13020:3:62" + }, + "nativeSrc": "13020:18:62", + "nodeType": "YulFunctionCall", + "src": "13020:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "13007:12:62", + "nodeType": "YulIdentifier", + "src": "13007:12:62" + }, + "nativeSrc": "13007:32:62", + "nodeType": "YulFunctionCall", + "src": "13007:32:62" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "12997:6:62", + "nodeType": "YulTypedName", + "src": "12997:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "13082:16:62", + "nodeType": "YulBlock", + "src": "13082:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "13091:1:62", + "nodeType": "YulLiteral", + "src": "13091:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "13094:1:62", + "nodeType": "YulLiteral", + "src": "13094:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "13084:6:62", + "nodeType": "YulIdentifier", + "src": "13084:6:62" + }, + "nativeSrc": "13084:12:62", + "nodeType": "YulFunctionCall", + "src": "13084:12:62" + }, + "nativeSrc": "13084:12:62", + "nodeType": "YulExpressionStatement", + "src": "13084:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "13054:6:62", + "nodeType": "YulIdentifier", + "src": "13054:6:62" + }, + { + "kind": "number", + "nativeSrc": "13062:18:62", + "nodeType": "YulLiteral", + "src": "13062:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "13051:2:62", + "nodeType": "YulIdentifier", + "src": "13051:2:62" + }, + "nativeSrc": "13051:30:62", + "nodeType": "YulFunctionCall", + "src": "13051:30:62" + }, + "nativeSrc": "13048:50:62", + "nodeType": "YulIf", + "src": "13048:50:62" + }, + { + "nativeSrc": "13107:84:62", + "nodeType": "YulVariableDeclaration", + "src": "13107:84:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13163:9:62", + "nodeType": "YulIdentifier", + "src": "13163:9:62" + }, + { + "name": "offset", + "nativeSrc": "13174:6:62", + "nodeType": "YulIdentifier", + "src": "13174:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13159:3:62", + "nodeType": "YulIdentifier", + "src": "13159:3:62" + }, + "nativeSrc": "13159:22:62", + "nodeType": "YulFunctionCall", + "src": "13159:22:62" + }, + { + "name": "dataEnd", + "nativeSrc": "13183:7:62", + "nodeType": "YulIdentifier", + "src": "13183:7:62" + } + ], + "functionName": { + "name": "abi_decode_bytes_calldata", + "nativeSrc": "13133:25:62", + "nodeType": "YulIdentifier", + "src": "13133:25:62" + }, + "nativeSrc": "13133:58:62", + "nodeType": "YulFunctionCall", + "src": "13133:58:62" + }, + "variables": [ + { + "name": "value2_1", + "nativeSrc": "13111:8:62", + "nodeType": "YulTypedName", + "src": "13111:8:62", + "type": "" + }, + { + "name": "value3_1", + "nativeSrc": "13121:8:62", + "nodeType": "YulTypedName", + "src": "13121:8:62", + "type": "" + } + ] + }, + { + "nativeSrc": "13200:18:62", + "nodeType": "YulAssignment", + "src": "13200:18:62", + "value": { + "name": "value2_1", + "nativeSrc": "13210:8:62", + "nodeType": "YulIdentifier", + "src": "13210:8:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "13200:6:62", + "nodeType": "YulIdentifier", + "src": "13200:6:62" + } + ] + }, + { + "nativeSrc": "13227:18:62", + "nodeType": "YulAssignment", + "src": "13227:18:62", + "value": { + "name": "value3_1", + "nativeSrc": "13237:8:62", + "nodeType": "YulIdentifier", + "src": "13237:8:62" + }, + "variableNames": [ + { + "name": "value3", + "nativeSrc": "13227:6:62", + "nodeType": "YulIdentifier", + "src": "13227:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_enum$_PaymentTypes_$2166t_bytes_calldata_ptr", + "nativeSrc": "12540:711:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "12622:9:62", + "nodeType": "YulTypedName", + "src": "12622:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "12633:7:62", + "nodeType": "YulTypedName", + "src": "12633:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "12645:6:62", + "nodeType": "YulTypedName", + "src": "12645:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "12653:6:62", + "nodeType": "YulTypedName", + "src": "12653:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "12661:6:62", + "nodeType": "YulTypedName", + "src": "12661:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "12669:6:62", + "nodeType": "YulTypedName", + "src": "12669:6:62", + "type": "" + } + ], + "src": "12540:711:62" + }, + { + "body": { + "nativeSrc": "13343:301:62", + "nodeType": "YulBlock", + "src": "13343:301:62", + "statements": [ + { + "body": { + "nativeSrc": "13389:16:62", + "nodeType": "YulBlock", + "src": "13389:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "13398:1:62", + "nodeType": "YulLiteral", + "src": "13398:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "13401:1:62", + "nodeType": "YulLiteral", + "src": "13401:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "13391:6:62", + "nodeType": "YulIdentifier", + "src": "13391:6:62" + }, + "nativeSrc": "13391:12:62", + "nodeType": "YulFunctionCall", + "src": "13391:12:62" + }, + "nativeSrc": "13391:12:62", + "nodeType": "YulExpressionStatement", + "src": "13391:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "13364:7:62", + "nodeType": "YulIdentifier", + "src": "13364:7:62" + }, + { + "name": "headStart", + "nativeSrc": "13373:9:62", + "nodeType": "YulIdentifier", + "src": "13373:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "13360:3:62", + "nodeType": "YulIdentifier", + "src": "13360:3:62" + }, + "nativeSrc": "13360:23:62", + "nodeType": "YulFunctionCall", + "src": "13360:23:62" + }, + { + "kind": "number", + "nativeSrc": "13385:2:62", + "nodeType": "YulLiteral", + "src": "13385:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "13356:3:62", + "nodeType": "YulIdentifier", + "src": "13356:3:62" + }, + "nativeSrc": "13356:32:62", + "nodeType": "YulFunctionCall", + "src": "13356:32:62" + }, + "nativeSrc": "13353:52:62", + "nodeType": "YulIf", + "src": "13353:52:62" + }, + { + "nativeSrc": "13414:36:62", + "nodeType": "YulVariableDeclaration", + "src": "13414:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13440:9:62", + "nodeType": "YulIdentifier", + "src": "13440:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "13427:12:62", + "nodeType": "YulIdentifier", + "src": "13427:12:62" + }, + "nativeSrc": "13427:23:62", + "nodeType": "YulFunctionCall", + "src": "13427:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "13418:5:62", + "nodeType": "YulTypedName", + "src": "13418:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "13484:5:62", + "nodeType": "YulIdentifier", + "src": "13484:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "13459:24:62", + "nodeType": "YulIdentifier", + "src": "13459:24:62" + }, + "nativeSrc": "13459:31:62", + "nodeType": "YulFunctionCall", + "src": "13459:31:62" + }, + "nativeSrc": "13459:31:62", + "nodeType": "YulExpressionStatement", + "src": "13459:31:62" + }, + { + "nativeSrc": "13499:15:62", + "nodeType": "YulAssignment", + "src": "13499:15:62", + "value": { + "name": "value", + "nativeSrc": "13509:5:62", + "nodeType": "YulIdentifier", + "src": "13509:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "13499:6:62", + "nodeType": "YulIdentifier", + "src": "13499:6:62" + } + ] + }, + { + "nativeSrc": "13523:47:62", + "nodeType": "YulVariableDeclaration", + "src": "13523:47:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13555:9:62", + "nodeType": "YulIdentifier", + "src": "13555:9:62" + }, + { + "kind": "number", + "nativeSrc": "13566:2:62", + "nodeType": "YulLiteral", + "src": "13566:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13551:3:62", + "nodeType": "YulIdentifier", + "src": "13551:3:62" + }, + "nativeSrc": "13551:18:62", + "nodeType": "YulFunctionCall", + "src": "13551:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "13538:12:62", + "nodeType": "YulIdentifier", + "src": "13538:12:62" + }, + "nativeSrc": "13538:32:62", + "nodeType": "YulFunctionCall", + "src": "13538:32:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "13527:7:62", + "nodeType": "YulTypedName", + "src": "13527:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "13604:7:62", + "nodeType": "YulIdentifier", + "src": "13604:7:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "13579:24:62", + "nodeType": "YulIdentifier", + "src": "13579:24:62" + }, + "nativeSrc": "13579:33:62", + "nodeType": "YulFunctionCall", + "src": "13579:33:62" + }, + "nativeSrc": "13579:33:62", + "nodeType": "YulExpressionStatement", + "src": "13579:33:62" + }, + { + "nativeSrc": "13621:17:62", + "nodeType": "YulAssignment", + "src": "13621:17:62", + "value": { + "name": "value_1", + "nativeSrc": "13631:7:62", + "nodeType": "YulIdentifier", + "src": "13631:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "13621:6:62", + "nodeType": "YulIdentifier", + "src": "13621:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_address", + "nativeSrc": "13256:388:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "13301:9:62", + "nodeType": "YulTypedName", + "src": "13301:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "13312:7:62", + "nodeType": "YulTypedName", + "src": "13312:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "13324:6:62", + "nodeType": "YulTypedName", + "src": "13324:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "13332:6:62", + "nodeType": "YulTypedName", + "src": "13332:6:62", + "type": "" + } + ], + "src": "13256:388:62" + }, + { + "body": { + "nativeSrc": "13750:76:62", + "nodeType": "YulBlock", + "src": "13750:76:62", + "statements": [ + { + "nativeSrc": "13760:26:62", + "nodeType": "YulAssignment", + "src": "13760:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13772:9:62", + "nodeType": "YulIdentifier", + "src": "13772:9:62" + }, + { + "kind": "number", + "nativeSrc": "13783:2:62", + "nodeType": "YulLiteral", + "src": "13783:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "13768:3:62", + "nodeType": "YulIdentifier", + "src": "13768:3:62" + }, + "nativeSrc": "13768:18:62", + "nodeType": "YulFunctionCall", + "src": "13768:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "13760:4:62", + "nodeType": "YulIdentifier", + "src": "13760:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "13802:9:62", + "nodeType": "YulIdentifier", + "src": "13802:9:62" + }, + { + "name": "value0", + "nativeSrc": "13813:6:62", + "nodeType": "YulIdentifier", + "src": "13813:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "13795:6:62", + "nodeType": "YulIdentifier", + "src": "13795:6:62" + }, + "nativeSrc": "13795:25:62", + "nodeType": "YulFunctionCall", + "src": "13795:25:62" + }, + "nativeSrc": "13795:25:62", + "nodeType": "YulExpressionStatement", + "src": "13795:25:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", + "nativeSrc": "13649:177:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "13719:9:62", + "nodeType": "YulTypedName", + "src": "13719:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "13730:6:62", + "nodeType": "YulTypedName", + "src": "13730:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "13741:4:62", + "nodeType": "YulTypedName", + "src": "13741:4:62", + "type": "" + } + ], + "src": "13649:177:62" + }, + { + "body": { + "nativeSrc": "14016:206:62", + "nodeType": "YulBlock", + "src": "14016:206:62", + "statements": [ + { + "nativeSrc": "14026:27:62", + "nodeType": "YulAssignment", + "src": "14026:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14038:9:62", + "nodeType": "YulIdentifier", + "src": "14038:9:62" + }, + { + "kind": "number", + "nativeSrc": "14049:3:62", + "nodeType": "YulLiteral", + "src": "14049:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14034:3:62", + "nodeType": "YulIdentifier", + "src": "14034:3:62" + }, + "nativeSrc": "14034:19:62", + "nodeType": "YulFunctionCall", + "src": "14034:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "14026:4:62", + "nodeType": "YulIdentifier", + "src": "14026:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14069:9:62", + "nodeType": "YulIdentifier", + "src": "14069:9:62" + }, + { + "name": "value0", + "nativeSrc": "14080:6:62", + "nodeType": "YulIdentifier", + "src": "14080:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14062:6:62", + "nodeType": "YulIdentifier", + "src": "14062:6:62" + }, + "nativeSrc": "14062:25:62", + "nodeType": "YulFunctionCall", + "src": "14062:25:62" + }, + "nativeSrc": "14062:25:62", + "nodeType": "YulExpressionStatement", + "src": "14062:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14107:9:62", + "nodeType": "YulIdentifier", + "src": "14107:9:62" + }, + { + "kind": "number", + "nativeSrc": "14118:2:62", + "nodeType": "YulLiteral", + "src": "14118:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14103:3:62", + "nodeType": "YulIdentifier", + "src": "14103:3:62" + }, + "nativeSrc": "14103:18:62", + "nodeType": "YulFunctionCall", + "src": "14103:18:62" + }, + { + "name": "value1", + "nativeSrc": "14123:6:62", + "nodeType": "YulIdentifier", + "src": "14123:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14096:6:62", + "nodeType": "YulIdentifier", + "src": "14096:6:62" + }, + "nativeSrc": "14096:34:62", + "nodeType": "YulFunctionCall", + "src": "14096:34:62" + }, + "nativeSrc": "14096:34:62", + "nodeType": "YulExpressionStatement", + "src": "14096:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14150:9:62", + "nodeType": "YulIdentifier", + "src": "14150:9:62" + }, + { + "kind": "number", + "nativeSrc": "14161:2:62", + "nodeType": "YulLiteral", + "src": "14161:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14146:3:62", + "nodeType": "YulIdentifier", + "src": "14146:3:62" + }, + "nativeSrc": "14146:18:62", + "nodeType": "YulFunctionCall", + "src": "14146:18:62" + }, + { + "name": "value2", + "nativeSrc": "14166:6:62", + "nodeType": "YulIdentifier", + "src": "14166:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14139:6:62", + "nodeType": "YulIdentifier", + "src": "14139:6:62" + }, + "nativeSrc": "14139:34:62", + "nodeType": "YulFunctionCall", + "src": "14139:34:62" + }, + "nativeSrc": "14139:34:62", + "nodeType": "YulExpressionStatement", + "src": "14139:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14193:9:62", + "nodeType": "YulIdentifier", + "src": "14193:9:62" + }, + { + "kind": "number", + "nativeSrc": "14204:2:62", + "nodeType": "YulLiteral", + "src": "14204:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14189:3:62", + "nodeType": "YulIdentifier", + "src": "14189:3:62" + }, + "nativeSrc": "14189:18:62", + "nodeType": "YulFunctionCall", + "src": "14189:18:62" + }, + { + "name": "value3", + "nativeSrc": "14209:6:62", + "nodeType": "YulIdentifier", + "src": "14209:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14182:6:62", + "nodeType": "YulIdentifier", + "src": "14182:6:62" + }, + "nativeSrc": "14182:34:62", + "nodeType": "YulFunctionCall", + "src": "14182:34:62" + }, + "nativeSrc": "14182:34:62", + "nodeType": "YulExpressionStatement", + "src": "14182:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32__to_t_uint256_t_uint256_t_uint256_t_bytes32__fromStack_reversed", + "nativeSrc": "13831:391:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "13961:9:62", + "nodeType": "YulTypedName", + "src": "13961:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "13972:6:62", + "nodeType": "YulTypedName", + "src": "13972:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "13980:6:62", + "nodeType": "YulTypedName", + "src": "13980:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "13988:6:62", + "nodeType": "YulTypedName", + "src": "13988:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "13996:6:62", + "nodeType": "YulTypedName", + "src": "13996:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "14007:4:62", + "nodeType": "YulTypedName", + "src": "14007:4:62", + "type": "" + } + ], + "src": "13831:391:62" + }, + { + "body": { + "nativeSrc": "14335:101:62", + "nodeType": "YulBlock", + "src": "14335:101:62", + "statements": [ + { + "nativeSrc": "14345:26:62", + "nodeType": "YulAssignment", + "src": "14345:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14357:9:62", + "nodeType": "YulIdentifier", + "src": "14357:9:62" + }, + { + "kind": "number", + "nativeSrc": "14368:2:62", + "nodeType": "YulLiteral", + "src": "14368:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14353:3:62", + "nodeType": "YulIdentifier", + "src": "14353:3:62" + }, + "nativeSrc": "14353:18:62", + "nodeType": "YulFunctionCall", + "src": "14353:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "14345:4:62", + "nodeType": "YulIdentifier", + "src": "14345:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14387:9:62", + "nodeType": "YulIdentifier", + "src": "14387:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "14402:6:62", + "nodeType": "YulIdentifier", + "src": "14402:6:62" + }, + { + "kind": "number", + "nativeSrc": "14410:18:62", + "nodeType": "YulLiteral", + "src": "14410:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "14398:3:62", + "nodeType": "YulIdentifier", + "src": "14398:3:62" + }, + "nativeSrc": "14398:31:62", + "nodeType": "YulFunctionCall", + "src": "14398:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14380:6:62", + "nodeType": "YulIdentifier", + "src": "14380:6:62" + }, + "nativeSrc": "14380:50:62", + "nodeType": "YulFunctionCall", + "src": "14380:50:62" + }, + "nativeSrc": "14380:50:62", + "nodeType": "YulExpressionStatement", + "src": "14380:50:62" + } + ] + }, + "name": "abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed", + "nativeSrc": "14227:209:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "14304:9:62", + "nodeType": "YulTypedName", + "src": "14304:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "14315:6:62", + "nodeType": "YulTypedName", + "src": "14315:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "14326:4:62", + "nodeType": "YulTypedName", + "src": "14326:4:62", + "type": "" + } + ], + "src": "14227:209:62" + }, + { + "body": { + "nativeSrc": "14598:240:62", + "nodeType": "YulBlock", + "src": "14598:240:62", + "statements": [ + { + "nativeSrc": "14608:26:62", + "nodeType": "YulAssignment", + "src": "14608:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14620:9:62", + "nodeType": "YulIdentifier", + "src": "14620:9:62" + }, + { + "kind": "number", + "nativeSrc": "14631:2:62", + "nodeType": "YulLiteral", + "src": "14631:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14616:3:62", + "nodeType": "YulIdentifier", + "src": "14616:3:62" + }, + "nativeSrc": "14616:18:62", + "nodeType": "YulFunctionCall", + "src": "14616:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "14608:4:62", + "nodeType": "YulIdentifier", + "src": "14608:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14650:9:62", + "nodeType": "YulIdentifier", + "src": "14650:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "14665:6:62", + "nodeType": "YulIdentifier", + "src": "14665:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "14681:3:62", + "nodeType": "YulLiteral", + "src": "14681:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "14686:1:62", + "nodeType": "YulLiteral", + "src": "14686:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "14677:3:62", + "nodeType": "YulIdentifier", + "src": "14677:3:62" + }, + "nativeSrc": "14677:11:62", + "nodeType": "YulFunctionCall", + "src": "14677:11:62" + }, + { + "kind": "number", + "nativeSrc": "14690:1:62", + "nodeType": "YulLiteral", + "src": "14690:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "14673:3:62", + "nodeType": "YulIdentifier", + "src": "14673:3:62" + }, + "nativeSrc": "14673:19:62", + "nodeType": "YulFunctionCall", + "src": "14673:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "14661:3:62", + "nodeType": "YulIdentifier", + "src": "14661:3:62" + }, + "nativeSrc": "14661:32:62", + "nodeType": "YulFunctionCall", + "src": "14661:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14643:6:62", + "nodeType": "YulIdentifier", + "src": "14643:6:62" + }, + "nativeSrc": "14643:51:62", + "nodeType": "YulFunctionCall", + "src": "14643:51:62" + }, + "nativeSrc": "14643:51:62", + "nodeType": "YulExpressionStatement", + "src": "14643:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14714:9:62", + "nodeType": "YulIdentifier", + "src": "14714:9:62" + }, + { + "kind": "number", + "nativeSrc": "14725:2:62", + "nodeType": "YulLiteral", + "src": "14725:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14710:3:62", + "nodeType": "YulIdentifier", + "src": "14710:3:62" + }, + "nativeSrc": "14710:18:62", + "nodeType": "YulFunctionCall", + "src": "14710:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "14734:6:62", + "nodeType": "YulIdentifier", + "src": "14734:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "14750:3:62", + "nodeType": "YulLiteral", + "src": "14750:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "14755:1:62", + "nodeType": "YulLiteral", + "src": "14755:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "14746:3:62", + "nodeType": "YulIdentifier", + "src": "14746:3:62" + }, + "nativeSrc": "14746:11:62", + "nodeType": "YulFunctionCall", + "src": "14746:11:62" + }, + { + "kind": "number", + "nativeSrc": "14759:1:62", + "nodeType": "YulLiteral", + "src": "14759:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "14742:3:62", + "nodeType": "YulIdentifier", + "src": "14742:3:62" + }, + "nativeSrc": "14742:19:62", + "nodeType": "YulFunctionCall", + "src": "14742:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "14730:3:62", + "nodeType": "YulIdentifier", + "src": "14730:3:62" + }, + "nativeSrc": "14730:32:62", + "nodeType": "YulFunctionCall", + "src": "14730:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14703:6:62", + "nodeType": "YulIdentifier", + "src": "14703:6:62" + }, + "nativeSrc": "14703:60:62", + "nodeType": "YulFunctionCall", + "src": "14703:60:62" + }, + "nativeSrc": "14703:60:62", + "nodeType": "YulExpressionStatement", + "src": "14703:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "14783:9:62", + "nodeType": "YulIdentifier", + "src": "14783:9:62" + }, + { + "kind": "number", + "nativeSrc": "14794:2:62", + "nodeType": "YulLiteral", + "src": "14794:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "14779:3:62", + "nodeType": "YulIdentifier", + "src": "14779:3:62" + }, + "nativeSrc": "14779:18:62", + "nodeType": "YulFunctionCall", + "src": "14779:18:62" + }, + { + "arguments": [ + { + "name": "value2", + "nativeSrc": "14803:6:62", + "nodeType": "YulIdentifier", + "src": "14803:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "14819:3:62", + "nodeType": "YulLiteral", + "src": "14819:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "14824:1:62", + "nodeType": "YulLiteral", + "src": "14824:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "14815:3:62", + "nodeType": "YulIdentifier", + "src": "14815:3:62" + }, + "nativeSrc": "14815:11:62", + "nodeType": "YulFunctionCall", + "src": "14815:11:62" + }, + { + "kind": "number", + "nativeSrc": "14828:1:62", + "nodeType": "YulLiteral", + "src": "14828:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "14811:3:62", + "nodeType": "YulIdentifier", + "src": "14811:3:62" + }, + "nativeSrc": "14811:19:62", + "nodeType": "YulFunctionCall", + "src": "14811:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "14799:3:62", + "nodeType": "YulIdentifier", + "src": "14799:3:62" + }, + "nativeSrc": "14799:32:62", + "nodeType": "YulFunctionCall", + "src": "14799:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "14772:6:62", + "nodeType": "YulIdentifier", + "src": "14772:6:62" + }, + "nativeSrc": "14772:60:62", + "nodeType": "YulFunctionCall", + "src": "14772:60:62" + }, + "nativeSrc": "14772:60:62", + "nodeType": "YulExpressionStatement", + "src": "14772:60:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed", + "nativeSrc": "14441:397:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "14551:9:62", + "nodeType": "YulTypedName", + "src": "14551:9:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "14562:6:62", + "nodeType": "YulTypedName", + "src": "14562:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "14570:6:62", + "nodeType": "YulTypedName", + "src": "14570:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "14578:6:62", + "nodeType": "YulTypedName", + "src": "14578:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "14589:4:62", + "nodeType": "YulTypedName", + "src": "14589:4:62", + "type": "" + } + ], + "src": "14441:397:62" + }, + { + "body": { + "nativeSrc": "14921:167:62", + "nodeType": "YulBlock", + "src": "14921:167:62", + "statements": [ + { + "body": { + "nativeSrc": "14967:16:62", + "nodeType": "YulBlock", + "src": "14967:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "14976:1:62", + "nodeType": "YulLiteral", + "src": "14976:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "14979:1:62", + "nodeType": "YulLiteral", + "src": "14979:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "14969:6:62", + "nodeType": "YulIdentifier", + "src": "14969:6:62" + }, + "nativeSrc": "14969:12:62", + "nodeType": "YulFunctionCall", + "src": "14969:12:62" + }, + "nativeSrc": "14969:12:62", + "nodeType": "YulExpressionStatement", + "src": "14969:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "14942:7:62", + "nodeType": "YulIdentifier", + "src": "14942:7:62" + }, + { + "name": "headStart", + "nativeSrc": "14951:9:62", + "nodeType": "YulIdentifier", + "src": "14951:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "14938:3:62", + "nodeType": "YulIdentifier", + "src": "14938:3:62" + }, + "nativeSrc": "14938:23:62", + "nodeType": "YulFunctionCall", + "src": "14938:23:62" + }, + { + "kind": "number", + "nativeSrc": "14963:2:62", + "nodeType": "YulLiteral", + "src": "14963:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "14934:3:62", + "nodeType": "YulIdentifier", + "src": "14934:3:62" + }, + "nativeSrc": "14934:32:62", + "nodeType": "YulFunctionCall", + "src": "14934:32:62" + }, + "nativeSrc": "14931:52:62", + "nodeType": "YulIf", + "src": "14931:52:62" + }, + { + "nativeSrc": "14992:29:62", + "nodeType": "YulVariableDeclaration", + "src": "14992:29:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15011:9:62", + "nodeType": "YulIdentifier", + "src": "15011:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "15005:5:62", + "nodeType": "YulIdentifier", + "src": "15005:5:62" + }, + "nativeSrc": "15005:16:62", + "nodeType": "YulFunctionCall", + "src": "15005:16:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "14996:5:62", + "nodeType": "YulTypedName", + "src": "14996:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "15052:5:62", + "nodeType": "YulIdentifier", + "src": "15052:5:62" + } + ], + "functionName": { + "name": "validator_revert_bool", + "nativeSrc": "15030:21:62", + "nodeType": "YulIdentifier", + "src": "15030:21:62" + }, + "nativeSrc": "15030:28:62", + "nodeType": "YulFunctionCall", + "src": "15030:28:62" + }, + "nativeSrc": "15030:28:62", + "nodeType": "YulExpressionStatement", + "src": "15030:28:62" + }, + { + "nativeSrc": "15067:15:62", + "nodeType": "YulAssignment", + "src": "15067:15:62", + "value": { + "name": "value", + "nativeSrc": "15077:5:62", + "nodeType": "YulIdentifier", + "src": "15077:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "15067:6:62", + "nodeType": "YulIdentifier", + "src": "15067:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool_fromMemory", + "nativeSrc": "14843:245:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "14887:9:62", + "nodeType": "YulTypedName", + "src": "14887:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "14898:7:62", + "nodeType": "YulTypedName", + "src": "14898:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "14910:6:62", + "nodeType": "YulTypedName", + "src": "14910:6:62", + "type": "" + } + ], + "src": "14843:245:62" + }, + { + "body": { + "nativeSrc": "15222:171:62", + "nodeType": "YulBlock", + "src": "15222:171:62", + "statements": [ + { + "nativeSrc": "15232:26:62", + "nodeType": "YulAssignment", + "src": "15232:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15244:9:62", + "nodeType": "YulIdentifier", + "src": "15244:9:62" + }, + { + "kind": "number", + "nativeSrc": "15255:2:62", + "nodeType": "YulLiteral", + "src": "15255:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15240:3:62", + "nodeType": "YulIdentifier", + "src": "15240:3:62" + }, + "nativeSrc": "15240:18:62", + "nodeType": "YulFunctionCall", + "src": "15240:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "15232:4:62", + "nodeType": "YulIdentifier", + "src": "15232:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15274:9:62", + "nodeType": "YulIdentifier", + "src": "15274:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "15289:6:62", + "nodeType": "YulIdentifier", + "src": "15289:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15305:3:62", + "nodeType": "YulLiteral", + "src": "15305:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "15310:1:62", + "nodeType": "YulLiteral", + "src": "15310:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "15301:3:62", + "nodeType": "YulIdentifier", + "src": "15301:3:62" + }, + "nativeSrc": "15301:11:62", + "nodeType": "YulFunctionCall", + "src": "15301:11:62" + }, + { + "kind": "number", + "nativeSrc": "15314:1:62", + "nodeType": "YulLiteral", + "src": "15314:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "15297:3:62", + "nodeType": "YulIdentifier", + "src": "15297:3:62" + }, + "nativeSrc": "15297:19:62", + "nodeType": "YulFunctionCall", + "src": "15297:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "15285:3:62", + "nodeType": "YulIdentifier", + "src": "15285:3:62" + }, + "nativeSrc": "15285:32:62", + "nodeType": "YulFunctionCall", + "src": "15285:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15267:6:62", + "nodeType": "YulIdentifier", + "src": "15267:6:62" + }, + "nativeSrc": "15267:51:62", + "nodeType": "YulFunctionCall", + "src": "15267:51:62" + }, + "nativeSrc": "15267:51:62", + "nodeType": "YulExpressionStatement", + "src": "15267:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "15338:9:62", + "nodeType": "YulIdentifier", + "src": "15338:9:62" + }, + { + "kind": "number", + "nativeSrc": "15349:2:62", + "nodeType": "YulLiteral", + "src": "15349:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15334:3:62", + "nodeType": "YulIdentifier", + "src": "15334:3:62" + }, + "nativeSrc": "15334:18:62", + "nodeType": "YulFunctionCall", + "src": "15334:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "15358:6:62", + "nodeType": "YulIdentifier", + "src": "15358:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15374:3:62", + "nodeType": "YulLiteral", + "src": "15374:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "15379:1:62", + "nodeType": "YulLiteral", + "src": "15379:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "15370:3:62", + "nodeType": "YulIdentifier", + "src": "15370:3:62" + }, + "nativeSrc": "15370:11:62", + "nodeType": "YulFunctionCall", + "src": "15370:11:62" + }, + { + "kind": "number", + "nativeSrc": "15383:1:62", + "nodeType": "YulLiteral", + "src": "15383:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "15366:3:62", + "nodeType": "YulIdentifier", + "src": "15366:3:62" + }, + "nativeSrc": "15366:19:62", + "nodeType": "YulFunctionCall", + "src": "15366:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "15354:3:62", + "nodeType": "YulIdentifier", + "src": "15354:3:62" + }, + "nativeSrc": "15354:32:62", + "nodeType": "YulFunctionCall", + "src": "15354:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15327:6:62", + "nodeType": "YulIdentifier", + "src": "15327:6:62" + }, + "nativeSrc": "15327:60:62", + "nodeType": "YulFunctionCall", + "src": "15327:60:62" + }, + "nativeSrc": "15327:60:62", + "nodeType": "YulExpressionStatement", + "src": "15327:60:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", + "nativeSrc": "15093:300:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "15183:9:62", + "nodeType": "YulTypedName", + "src": "15183:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "15194:6:62", + "nodeType": "YulTypedName", + "src": "15194:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "15202:6:62", + "nodeType": "YulTypedName", + "src": "15202:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "15213:4:62", + "nodeType": "YulTypedName", + "src": "15213:4:62", + "type": "" + } + ], + "src": "15093:300:62" + }, + { + "body": { + "nativeSrc": "15430:95:62", + "nodeType": "YulBlock", + "src": "15430:95:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15447:1:62", + "nodeType": "YulLiteral", + "src": "15447:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15454:3:62", + "nodeType": "YulLiteral", + "src": "15454:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "15459:10:62", + "nodeType": "YulLiteral", + "src": "15459:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "15450:3:62", + "nodeType": "YulIdentifier", + "src": "15450:3:62" + }, + "nativeSrc": "15450:20:62", + "nodeType": "YulFunctionCall", + "src": "15450:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15440:6:62", + "nodeType": "YulIdentifier", + "src": "15440:6:62" + }, + "nativeSrc": "15440:31:62", + "nodeType": "YulFunctionCall", + "src": "15440:31:62" + }, + "nativeSrc": "15440:31:62", + "nodeType": "YulExpressionStatement", + "src": "15440:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15487:1:62", + "nodeType": "YulLiteral", + "src": "15487:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "15490:4:62", + "nodeType": "YulLiteral", + "src": "15490:4:62", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15480:6:62", + "nodeType": "YulIdentifier", + "src": "15480:6:62" + }, + "nativeSrc": "15480:15:62", + "nodeType": "YulFunctionCall", + "src": "15480:15:62" + }, + "nativeSrc": "15480:15:62", + "nodeType": "YulExpressionStatement", + "src": "15480:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15511:1:62", + "nodeType": "YulLiteral", + "src": "15511:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "15514:4:62", + "nodeType": "YulLiteral", + "src": "15514:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "15504:6:62", + "nodeType": "YulIdentifier", + "src": "15504:6:62" + }, + "nativeSrc": "15504:15:62", + "nodeType": "YulFunctionCall", + "src": "15504:15:62" + }, + "nativeSrc": "15504:15:62", + "nodeType": "YulExpressionStatement", + "src": "15504:15:62" + } + ] + }, + "name": "panic_error_0x41", + "nativeSrc": "15398:127:62", + "nodeType": "YulFunctionDefinition", + "src": "15398:127:62" + }, + { + "body": { + "nativeSrc": "15576:211:62", + "nodeType": "YulBlock", + "src": "15576:211:62", + "statements": [ + { + "nativeSrc": "15586:21:62", + "nodeType": "YulAssignment", + "src": "15586:21:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15602:4:62", + "nodeType": "YulLiteral", + "src": "15602:4:62", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "15596:5:62", + "nodeType": "YulIdentifier", + "src": "15596:5:62" + }, + "nativeSrc": "15596:11:62", + "nodeType": "YulFunctionCall", + "src": "15596:11:62" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "15586:6:62", + "nodeType": "YulIdentifier", + "src": "15586:6:62" + } + ] + }, + { + "nativeSrc": "15616:35:62", + "nodeType": "YulVariableDeclaration", + "src": "15616:35:62", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "15638:6:62", + "nodeType": "YulIdentifier", + "src": "15638:6:62" + }, + { + "kind": "number", + "nativeSrc": "15646:4:62", + "nodeType": "YulLiteral", + "src": "15646:4:62", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15634:3:62", + "nodeType": "YulIdentifier", + "src": "15634:3:62" + }, + "nativeSrc": "15634:17:62", + "nodeType": "YulFunctionCall", + "src": "15634:17:62" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "15620:10:62", + "nodeType": "YulTypedName", + "src": "15620:10:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "15726:22:62", + "nodeType": "YulBlock", + "src": "15726:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "15728:16:62", + "nodeType": "YulIdentifier", + "src": "15728:16:62" + }, + "nativeSrc": "15728:18:62", + "nodeType": "YulFunctionCall", + "src": "15728:18:62" + }, + "nativeSrc": "15728:18:62", + "nodeType": "YulExpressionStatement", + "src": "15728:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "15669:10:62", + "nodeType": "YulIdentifier", + "src": "15669:10:62" + }, + { + "kind": "number", + "nativeSrc": "15681:18:62", + "nodeType": "YulLiteral", + "src": "15681:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "15666:2:62", + "nodeType": "YulIdentifier", + "src": "15666:2:62" + }, + "nativeSrc": "15666:34:62", + "nodeType": "YulFunctionCall", + "src": "15666:34:62" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "15705:10:62", + "nodeType": "YulIdentifier", + "src": "15705:10:62" + }, + { + "name": "memPtr", + "nativeSrc": "15717:6:62", + "nodeType": "YulIdentifier", + "src": "15717:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "15702:2:62", + "nodeType": "YulIdentifier", + "src": "15702:2:62" + }, + "nativeSrc": "15702:22:62", + "nodeType": "YulFunctionCall", + "src": "15702:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "15663:2:62", + "nodeType": "YulIdentifier", + "src": "15663:2:62" + }, + "nativeSrc": "15663:62:62", + "nodeType": "YulFunctionCall", + "src": "15663:62:62" + }, + "nativeSrc": "15660:88:62", + "nodeType": "YulIf", + "src": "15660:88:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15764:4:62", + "nodeType": "YulLiteral", + "src": "15764:4:62", + "type": "", + "value": "0x40" + }, + { + "name": "newFreePtr", + "nativeSrc": "15770:10:62", + "nodeType": "YulIdentifier", + "src": "15770:10:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "15757:6:62", + "nodeType": "YulIdentifier", + "src": "15757:6:62" + }, + "nativeSrc": "15757:24:62", + "nodeType": "YulFunctionCall", + "src": "15757:24:62" + }, + "nativeSrc": "15757:24:62", + "nodeType": "YulExpressionStatement", + "src": "15757:24:62" + } + ] + }, + "name": "allocate_memory_4281", + "nativeSrc": "15530:257:62", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nativeSrc": "15565:6:62", + "nodeType": "YulTypedName", + "src": "15565:6:62", + "type": "" + } + ], + "src": "15530:257:62" + }, + { + "body": { + "nativeSrc": "15833:207:62", + "nodeType": "YulBlock", + "src": "15833:207:62", + "statements": [ + { + "nativeSrc": "15843:19:62", + "nodeType": "YulAssignment", + "src": "15843:19:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "15859:2:62", + "nodeType": "YulLiteral", + "src": "15859:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "15853:5:62", + "nodeType": "YulIdentifier", + "src": "15853:5:62" + }, + "nativeSrc": "15853:9:62", + "nodeType": "YulFunctionCall", + "src": "15853:9:62" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "15843:6:62", + "nodeType": "YulIdentifier", + "src": "15843:6:62" + } + ] + }, + { + "nativeSrc": "15871:35:62", + "nodeType": "YulVariableDeclaration", + "src": "15871:35:62", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "15893:6:62", + "nodeType": "YulIdentifier", + "src": "15893:6:62" + }, + { + "kind": "number", + "nativeSrc": "15901:4:62", + "nodeType": "YulLiteral", + "src": "15901:4:62", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "15889:3:62", + "nodeType": "YulIdentifier", + "src": "15889:3:62" + }, + "nativeSrc": "15889:17:62", + "nodeType": "YulFunctionCall", + "src": "15889:17:62" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "15875:10:62", + "nodeType": "YulTypedName", + "src": "15875:10:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "15981:22:62", + "nodeType": "YulBlock", + "src": "15981:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "15983:16:62", + "nodeType": "YulIdentifier", + "src": "15983:16:62" + }, + "nativeSrc": "15983:18:62", + "nodeType": "YulFunctionCall", + "src": "15983:18:62" + }, + "nativeSrc": "15983:18:62", + "nodeType": "YulExpressionStatement", + "src": "15983:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "15924:10:62", + "nodeType": "YulIdentifier", + "src": "15924:10:62" + }, + { + "kind": "number", + "nativeSrc": "15936:18:62", + "nodeType": "YulLiteral", + "src": "15936:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "15921:2:62", + "nodeType": "YulIdentifier", + "src": "15921:2:62" + }, + "nativeSrc": "15921:34:62", + "nodeType": "YulFunctionCall", + "src": "15921:34:62" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "15960:10:62", + "nodeType": "YulIdentifier", + "src": "15960:10:62" + }, + { + "name": "memPtr", + "nativeSrc": "15972:6:62", + "nodeType": "YulIdentifier", + "src": "15972:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "15957:2:62", + "nodeType": "YulIdentifier", + "src": "15957:2:62" + }, + "nativeSrc": "15957:22:62", + "nodeType": "YulFunctionCall", + "src": "15957:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "15918:2:62", + "nodeType": "YulIdentifier", + "src": "15918:2:62" + }, + "nativeSrc": "15918:62:62", + "nodeType": "YulFunctionCall", + "src": "15918:62:62" + }, + "nativeSrc": "15915:88:62", + "nodeType": "YulIf", + "src": "15915:88:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16019:2:62", + "nodeType": "YulLiteral", + "src": "16019:2:62", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "16023:10:62", + "nodeType": "YulIdentifier", + "src": "16023:10:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16012:6:62", + "nodeType": "YulIdentifier", + "src": "16012:6:62" + }, + "nativeSrc": "16012:22:62", + "nodeType": "YulFunctionCall", + "src": "16012:22:62" + }, + "nativeSrc": "16012:22:62", + "nodeType": "YulExpressionStatement", + "src": "16012:22:62" + } + ] + }, + "name": "allocate_memory", + "nativeSrc": "15792:248:62", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nativeSrc": "15822:6:62", + "nodeType": "YulTypedName", + "src": "15822:6:62", + "type": "" + } + ], + "src": "15792:248:62" + }, + { + "body": { + "nativeSrc": "16091:206:62", + "nodeType": "YulBlock", + "src": "16091:206:62", + "statements": [ + { + "nativeSrc": "16101:19:62", + "nodeType": "YulAssignment", + "src": "16101:19:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16117:2:62", + "nodeType": "YulLiteral", + "src": "16117:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "16111:5:62", + "nodeType": "YulIdentifier", + "src": "16111:5:62" + }, + "nativeSrc": "16111:9:62", + "nodeType": "YulFunctionCall", + "src": "16111:9:62" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "16101:6:62", + "nodeType": "YulIdentifier", + "src": "16101:6:62" + } + ] + }, + { + "nativeSrc": "16129:34:62", + "nodeType": "YulVariableDeclaration", + "src": "16129:34:62", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "16151:6:62", + "nodeType": "YulIdentifier", + "src": "16151:6:62" + }, + { + "kind": "number", + "nativeSrc": "16159:3:62", + "nodeType": "YulLiteral", + "src": "16159:3:62", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16147:3:62", + "nodeType": "YulIdentifier", + "src": "16147:3:62" + }, + "nativeSrc": "16147:16:62", + "nodeType": "YulFunctionCall", + "src": "16147:16:62" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "16133:10:62", + "nodeType": "YulTypedName", + "src": "16133:10:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "16238:22:62", + "nodeType": "YulBlock", + "src": "16238:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "16240:16:62", + "nodeType": "YulIdentifier", + "src": "16240:16:62" + }, + "nativeSrc": "16240:18:62", + "nodeType": "YulFunctionCall", + "src": "16240:18:62" + }, + "nativeSrc": "16240:18:62", + "nodeType": "YulExpressionStatement", + "src": "16240:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "16181:10:62", + "nodeType": "YulIdentifier", + "src": "16181:10:62" + }, + { + "kind": "number", + "nativeSrc": "16193:18:62", + "nodeType": "YulLiteral", + "src": "16193:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "16178:2:62", + "nodeType": "YulIdentifier", + "src": "16178:2:62" + }, + "nativeSrc": "16178:34:62", + "nodeType": "YulFunctionCall", + "src": "16178:34:62" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "16217:10:62", + "nodeType": "YulIdentifier", + "src": "16217:10:62" + }, + { + "name": "memPtr", + "nativeSrc": "16229:6:62", + "nodeType": "YulIdentifier", + "src": "16229:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "16214:2:62", + "nodeType": "YulIdentifier", + "src": "16214:2:62" + }, + "nativeSrc": "16214:22:62", + "nodeType": "YulFunctionCall", + "src": "16214:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "16175:2:62", + "nodeType": "YulIdentifier", + "src": "16175:2:62" + }, + "nativeSrc": "16175:62:62", + "nodeType": "YulFunctionCall", + "src": "16175:62:62" + }, + "nativeSrc": "16172:88:62", + "nodeType": "YulIf", + "src": "16172:88:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16276:2:62", + "nodeType": "YulLiteral", + "src": "16276:2:62", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "16280:10:62", + "nodeType": "YulIdentifier", + "src": "16280:10:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16269:6:62", + "nodeType": "YulIdentifier", + "src": "16269:6:62" + }, + "nativeSrc": "16269:22:62", + "nodeType": "YulFunctionCall", + "src": "16269:22:62" + }, + "nativeSrc": "16269:22:62", + "nodeType": "YulExpressionStatement", + "src": "16269:22:62" + } + ] + }, + "name": "allocate_memory_4284", + "nativeSrc": "16045:252:62", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nativeSrc": "16080:6:62", + "nodeType": "YulTypedName", + "src": "16080:6:62", + "type": "" + } + ], + "src": "16045:252:62" + }, + { + "body": { + "nativeSrc": "16355:836:62", + "nodeType": "YulBlock", + "src": "16355:836:62", + "statements": [ + { + "body": { + "nativeSrc": "16404:16:62", + "nodeType": "YulBlock", + "src": "16404:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16413:1:62", + "nodeType": "YulLiteral", + "src": "16413:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "16416:1:62", + "nodeType": "YulLiteral", + "src": "16416:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "16406:6:62", + "nodeType": "YulIdentifier", + "src": "16406:6:62" + }, + "nativeSrc": "16406:12:62", + "nodeType": "YulFunctionCall", + "src": "16406:12:62" + }, + "nativeSrc": "16406:12:62", + "nodeType": "YulExpressionStatement", + "src": "16406:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "16383:6:62", + "nodeType": "YulIdentifier", + "src": "16383:6:62" + }, + { + "kind": "number", + "nativeSrc": "16391:4:62", + "nodeType": "YulLiteral", + "src": "16391:4:62", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16379:3:62", + "nodeType": "YulIdentifier", + "src": "16379:3:62" + }, + "nativeSrc": "16379:17:62", + "nodeType": "YulFunctionCall", + "src": "16379:17:62" + }, + { + "name": "end", + "nativeSrc": "16398:3:62", + "nodeType": "YulIdentifier", + "src": "16398:3:62" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "16375:3:62", + "nodeType": "YulIdentifier", + "src": "16375:3:62" + }, + "nativeSrc": "16375:27:62", + "nodeType": "YulFunctionCall", + "src": "16375:27:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "16368:6:62", + "nodeType": "YulIdentifier", + "src": "16368:6:62" + }, + "nativeSrc": "16368:35:62", + "nodeType": "YulFunctionCall", + "src": "16368:35:62" + }, + "nativeSrc": "16365:55:62", + "nodeType": "YulIf", + "src": "16365:55:62" + }, + { + "nativeSrc": "16429:34:62", + "nodeType": "YulVariableDeclaration", + "src": "16429:34:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "16456:6:62", + "nodeType": "YulIdentifier", + "src": "16456:6:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "16443:12:62", + "nodeType": "YulIdentifier", + "src": "16443:12:62" + }, + "nativeSrc": "16443:20:62", + "nodeType": "YulFunctionCall", + "src": "16443:20:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "16433:6:62", + "nodeType": "YulTypedName", + "src": "16433:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "16472:28:62", + "nodeType": "YulVariableDeclaration", + "src": "16472:28:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "16487:6:62", + "nodeType": "YulIdentifier", + "src": "16487:6:62" + }, + { + "kind": "number", + "nativeSrc": "16495:4:62", + "nodeType": "YulLiteral", + "src": "16495:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16483:3:62", + "nodeType": "YulIdentifier", + "src": "16483:3:62" + }, + "nativeSrc": "16483:17:62", + "nodeType": "YulFunctionCall", + "src": "16483:17:62" + }, + "variables": [ + { + "name": "src", + "nativeSrc": "16476:3:62", + "nodeType": "YulTypedName", + "src": "16476:3:62", + "type": "" + } + ] + }, + { + "nativeSrc": "16509:16:62", + "nodeType": "YulVariableDeclaration", + "src": "16509:16:62", + "value": { + "kind": "number", + "nativeSrc": "16524:1:62", + "nodeType": "YulLiteral", + "src": "16524:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "array_1", + "nativeSrc": "16513:7:62", + "nodeType": "YulTypedName", + "src": "16513:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "16534:13:62", + "nodeType": "YulVariableDeclaration", + "src": "16534:13:62", + "value": { + "kind": "number", + "nativeSrc": "16546:1:62", + "nodeType": "YulLiteral", + "src": "16546:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "size", + "nativeSrc": "16538:4:62", + "nodeType": "YulTypedName", + "src": "16538:4:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "16590:22:62", + "nodeType": "YulBlock", + "src": "16590:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "16592:16:62", + "nodeType": "YulIdentifier", + "src": "16592:16:62" + }, + "nativeSrc": "16592:18:62", + "nodeType": "YulFunctionCall", + "src": "16592:18:62" + }, + "nativeSrc": "16592:18:62", + "nodeType": "YulExpressionStatement", + "src": "16592:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nativeSrc": "16562:6:62", + "nodeType": "YulIdentifier", + "src": "16562:6:62" + }, + { + "kind": "number", + "nativeSrc": "16570:18:62", + "nodeType": "YulLiteral", + "src": "16570:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "16559:2:62", + "nodeType": "YulIdentifier", + "src": "16559:2:62" + }, + "nativeSrc": "16559:30:62", + "nodeType": "YulFunctionCall", + "src": "16559:30:62" + }, + "nativeSrc": "16556:56:62", + "nodeType": "YulIf", + "src": "16556:56:62" + }, + { + "nativeSrc": "16621:43:62", + "nodeType": "YulVariableDeclaration", + "src": "16621:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "16643:6:62", + "nodeType": "YulIdentifier", + "src": "16643:6:62" + }, + { + "kind": "number", + "nativeSrc": "16651:2:62", + "nodeType": "YulLiteral", + "src": "16651:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16639:3:62", + "nodeType": "YulIdentifier", + "src": "16639:3:62" + }, + "nativeSrc": "16639:15:62", + "nodeType": "YulFunctionCall", + "src": "16639:15:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16660:2:62", + "nodeType": "YulLiteral", + "src": "16660:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "16656:3:62", + "nodeType": "YulIdentifier", + "src": "16656:3:62" + }, + "nativeSrc": "16656:7:62", + "nodeType": "YulFunctionCall", + "src": "16656:7:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "16635:3:62", + "nodeType": "YulIdentifier", + "src": "16635:3:62" + }, + "nativeSrc": "16635:29:62", + "nodeType": "YulFunctionCall", + "src": "16635:29:62" + }, + "variables": [ + { + "name": "result", + "nativeSrc": "16625:6:62", + "nodeType": "YulTypedName", + "src": "16625:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "16673:25:62", + "nodeType": "YulAssignment", + "src": "16673:25:62", + "value": { + "arguments": [ + { + "name": "result", + "nativeSrc": "16685:6:62", + "nodeType": "YulIdentifier", + "src": "16685:6:62" + }, + { + "kind": "number", + "nativeSrc": "16693:4:62", + "nodeType": "YulLiteral", + "src": "16693:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16681:3:62", + "nodeType": "YulIdentifier", + "src": "16681:3:62" + }, + "nativeSrc": "16681:17:62", + "nodeType": "YulFunctionCall", + "src": "16681:17:62" + }, + "variableNames": [ + { + "name": "size", + "nativeSrc": "16673:4:62", + "nodeType": "YulIdentifier", + "src": "16673:4:62" + } + ] + }, + { + "nativeSrc": "16707:15:62", + "nodeType": "YulVariableDeclaration", + "src": "16707:15:62", + "value": { + "kind": "number", + "nativeSrc": "16721:1:62", + "nodeType": "YulLiteral", + "src": "16721:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "memPtr", + "nativeSrc": "16711:6:62", + "nodeType": "YulTypedName", + "src": "16711:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "16731:19:62", + "nodeType": "YulAssignment", + "src": "16731:19:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16747:2:62", + "nodeType": "YulLiteral", + "src": "16747:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "16741:5:62", + "nodeType": "YulIdentifier", + "src": "16741:5:62" + }, + "nativeSrc": "16741:9:62", + "nodeType": "YulFunctionCall", + "src": "16741:9:62" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "16731:6:62", + "nodeType": "YulIdentifier", + "src": "16731:6:62" + } + ] + }, + { + "nativeSrc": "16759:60:62", + "nodeType": "YulVariableDeclaration", + "src": "16759:60:62", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "16781:6:62", + "nodeType": "YulIdentifier", + "src": "16781:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "result", + "nativeSrc": "16797:6:62", + "nodeType": "YulIdentifier", + "src": "16797:6:62" + }, + { + "kind": "number", + "nativeSrc": "16805:2:62", + "nodeType": "YulLiteral", + "src": "16805:2:62", + "type": "", + "value": "63" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16793:3:62", + "nodeType": "YulIdentifier", + "src": "16793:3:62" + }, + "nativeSrc": "16793:15:62", + "nodeType": "YulFunctionCall", + "src": "16793:15:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16814:2:62", + "nodeType": "YulLiteral", + "src": "16814:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "16810:3:62", + "nodeType": "YulIdentifier", + "src": "16810:3:62" + }, + "nativeSrc": "16810:7:62", + "nodeType": "YulFunctionCall", + "src": "16810:7:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "16789:3:62", + "nodeType": "YulIdentifier", + "src": "16789:3:62" + }, + "nativeSrc": "16789:29:62", + "nodeType": "YulFunctionCall", + "src": "16789:29:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "16777:3:62", + "nodeType": "YulIdentifier", + "src": "16777:3:62" + }, + "nativeSrc": "16777:42:62", + "nodeType": "YulFunctionCall", + "src": "16777:42:62" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "16763:10:62", + "nodeType": "YulTypedName", + "src": "16763:10:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "16894:22:62", + "nodeType": "YulBlock", + "src": "16894:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "16896:16:62", + "nodeType": "YulIdentifier", + "src": "16896:16:62" + }, + "nativeSrc": "16896:18:62", + "nodeType": "YulFunctionCall", + "src": "16896:18:62" + }, + "nativeSrc": "16896:18:62", + "nodeType": "YulExpressionStatement", + "src": "16896:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "16837:10:62", + "nodeType": "YulIdentifier", + "src": "16837:10:62" + }, + { + "kind": "number", + "nativeSrc": "16849:18:62", + "nodeType": "YulLiteral", + "src": "16849:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "16834:2:62", + "nodeType": "YulIdentifier", + "src": "16834:2:62" + }, + "nativeSrc": "16834:34:62", + "nodeType": "YulFunctionCall", + "src": "16834:34:62" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "16873:10:62", + "nodeType": "YulIdentifier", + "src": "16873:10:62" + }, + { + "name": "memPtr", + "nativeSrc": "16885:6:62", + "nodeType": "YulIdentifier", + "src": "16885:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "16870:2:62", + "nodeType": "YulIdentifier", + "src": "16870:2:62" + }, + "nativeSrc": "16870:22:62", + "nodeType": "YulFunctionCall", + "src": "16870:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "16831:2:62", + "nodeType": "YulIdentifier", + "src": "16831:2:62" + }, + "nativeSrc": "16831:62:62", + "nodeType": "YulFunctionCall", + "src": "16831:62:62" + }, + "nativeSrc": "16828:88:62", + "nodeType": "YulIf", + "src": "16828:88:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "16932:2:62", + "nodeType": "YulLiteral", + "src": "16932:2:62", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "16936:10:62", + "nodeType": "YulIdentifier", + "src": "16936:10:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16925:6:62", + "nodeType": "YulIdentifier", + "src": "16925:6:62" + }, + "nativeSrc": "16925:22:62", + "nodeType": "YulFunctionCall", + "src": "16925:22:62" + }, + "nativeSrc": "16925:22:62", + "nodeType": "YulExpressionStatement", + "src": "16925:22:62" + }, + { + "nativeSrc": "16956:17:62", + "nodeType": "YulAssignment", + "src": "16956:17:62", + "value": { + "name": "memPtr", + "nativeSrc": "16967:6:62", + "nodeType": "YulIdentifier", + "src": "16967:6:62" + }, + "variableNames": [ + { + "name": "array_1", + "nativeSrc": "16956:7:62", + "nodeType": "YulIdentifier", + "src": "16956:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "16989:6:62", + "nodeType": "YulIdentifier", + "src": "16989:6:62" + }, + { + "name": "length", + "nativeSrc": "16997:6:62", + "nodeType": "YulIdentifier", + "src": "16997:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "16982:6:62", + "nodeType": "YulIdentifier", + "src": "16982:6:62" + }, + "nativeSrc": "16982:22:62", + "nodeType": "YulFunctionCall", + "src": "16982:22:62" + }, + "nativeSrc": "16982:22:62", + "nodeType": "YulExpressionStatement", + "src": "16982:22:62" + }, + { + "body": { + "nativeSrc": "17042:16:62", + "nodeType": "YulBlock", + "src": "17042:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "17051:1:62", + "nodeType": "YulLiteral", + "src": "17051:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "17054:1:62", + "nodeType": "YulLiteral", + "src": "17054:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "17044:6:62", + "nodeType": "YulIdentifier", + "src": "17044:6:62" + }, + "nativeSrc": "17044:12:62", + "nodeType": "YulFunctionCall", + "src": "17044:12:62" + }, + "nativeSrc": "17044:12:62", + "nodeType": "YulExpressionStatement", + "src": "17044:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "17023:3:62", + "nodeType": "YulIdentifier", + "src": "17023:3:62" + }, + { + "name": "length", + "nativeSrc": "17028:6:62", + "nodeType": "YulIdentifier", + "src": "17028:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17019:3:62", + "nodeType": "YulIdentifier", + "src": "17019:3:62" + }, + "nativeSrc": "17019:16:62", + "nodeType": "YulFunctionCall", + "src": "17019:16:62" + }, + { + "name": "end", + "nativeSrc": "17037:3:62", + "nodeType": "YulIdentifier", + "src": "17037:3:62" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "17016:2:62", + "nodeType": "YulIdentifier", + "src": "17016:2:62" + }, + "nativeSrc": "17016:25:62", + "nodeType": "YulFunctionCall", + "src": "17016:25:62" + }, + "nativeSrc": "17013:45:62", + "nodeType": "YulIf", + "src": "17013:45:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "17084:6:62", + "nodeType": "YulIdentifier", + "src": "17084:6:62" + }, + { + "kind": "number", + "nativeSrc": "17092:4:62", + "nodeType": "YulLiteral", + "src": "17092:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17080:3:62", + "nodeType": "YulIdentifier", + "src": "17080:3:62" + }, + "nativeSrc": "17080:17:62", + "nodeType": "YulFunctionCall", + "src": "17080:17:62" + }, + { + "name": "src", + "nativeSrc": "17099:3:62", + "nodeType": "YulIdentifier", + "src": "17099:3:62" + }, + { + "name": "length", + "nativeSrc": "17104:6:62", + "nodeType": "YulIdentifier", + "src": "17104:6:62" + } + ], + "functionName": { + "name": "calldatacopy", + "nativeSrc": "17067:12:62", + "nodeType": "YulIdentifier", + "src": "17067:12:62" + }, + "nativeSrc": "17067:44:62", + "nodeType": "YulFunctionCall", + "src": "17067:44:62" + }, + "nativeSrc": "17067:44:62", + "nodeType": "YulExpressionStatement", + "src": "17067:44:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "17135:6:62", + "nodeType": "YulIdentifier", + "src": "17135:6:62" + }, + { + "name": "length", + "nativeSrc": "17143:6:62", + "nodeType": "YulIdentifier", + "src": "17143:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17131:3:62", + "nodeType": "YulIdentifier", + "src": "17131:3:62" + }, + "nativeSrc": "17131:19:62", + "nodeType": "YulFunctionCall", + "src": "17131:19:62" + }, + { + "kind": "number", + "nativeSrc": "17152:4:62", + "nodeType": "YulLiteral", + "src": "17152:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17127:3:62", + "nodeType": "YulIdentifier", + "src": "17127:3:62" + }, + "nativeSrc": "17127:30:62", + "nodeType": "YulFunctionCall", + "src": "17127:30:62" + }, + { + "kind": "number", + "nativeSrc": "17159:1:62", + "nodeType": "YulLiteral", + "src": "17159:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "17120:6:62", + "nodeType": "YulIdentifier", + "src": "17120:6:62" + }, + "nativeSrc": "17120:41:62", + "nodeType": "YulFunctionCall", + "src": "17120:41:62" + }, + "nativeSrc": "17120:41:62", + "nodeType": "YulExpressionStatement", + "src": "17120:41:62" + }, + { + "nativeSrc": "17170:15:62", + "nodeType": "YulAssignment", + "src": "17170:15:62", + "value": { + "name": "memPtr", + "nativeSrc": "17179:6:62", + "nodeType": "YulIdentifier", + "src": "17179:6:62" + }, + "variableNames": [ + { + "name": "array", + "nativeSrc": "17170:5:62", + "nodeType": "YulIdentifier", + "src": "17170:5:62" + } + ] + } + ] + }, + "name": "abi_decode_string", + "nativeSrc": "16302:889:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "16329:6:62", + "nodeType": "YulTypedName", + "src": "16329:6:62", + "type": "" + }, + { + "name": "end", + "nativeSrc": "16337:3:62", + "nodeType": "YulTypedName", + "src": "16337:3:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nativeSrc": "16345:5:62", + "nodeType": "YulTypedName", + "src": "16345:5:62", + "type": "" + } + ], + "src": "16302:889:62" + }, + { + "body": { + "nativeSrc": "17328:549:62", + "nodeType": "YulBlock", + "src": "17328:549:62", + "statements": [ + { + "body": { + "nativeSrc": "17374:16:62", + "nodeType": "YulBlock", + "src": "17374:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "17383:1:62", + "nodeType": "YulLiteral", + "src": "17383:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "17386:1:62", + "nodeType": "YulLiteral", + "src": "17386:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "17376:6:62", + "nodeType": "YulIdentifier", + "src": "17376:6:62" + }, + "nativeSrc": "17376:12:62", + "nodeType": "YulFunctionCall", + "src": "17376:12:62" + }, + "nativeSrc": "17376:12:62", + "nodeType": "YulExpressionStatement", + "src": "17376:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "17349:7:62", + "nodeType": "YulIdentifier", + "src": "17349:7:62" + }, + { + "name": "headStart", + "nativeSrc": "17358:9:62", + "nodeType": "YulIdentifier", + "src": "17358:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "17345:3:62", + "nodeType": "YulIdentifier", + "src": "17345:3:62" + }, + "nativeSrc": "17345:23:62", + "nodeType": "YulFunctionCall", + "src": "17345:23:62" + }, + { + "kind": "number", + "nativeSrc": "17370:2:62", + "nodeType": "YulLiteral", + "src": "17370:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "17341:3:62", + "nodeType": "YulIdentifier", + "src": "17341:3:62" + }, + "nativeSrc": "17341:32:62", + "nodeType": "YulFunctionCall", + "src": "17341:32:62" + }, + "nativeSrc": "17338:52:62", + "nodeType": "YulIf", + "src": "17338:52:62" + }, + { + "nativeSrc": "17399:37:62", + "nodeType": "YulVariableDeclaration", + "src": "17399:37:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17426:9:62", + "nodeType": "YulIdentifier", + "src": "17426:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "17413:12:62", + "nodeType": "YulIdentifier", + "src": "17413:12:62" + }, + "nativeSrc": "17413:23:62", + "nodeType": "YulFunctionCall", + "src": "17413:23:62" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "17403:6:62", + "nodeType": "YulTypedName", + "src": "17403:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "17479:16:62", + "nodeType": "YulBlock", + "src": "17479:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "17488:1:62", + "nodeType": "YulLiteral", + "src": "17488:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "17491:1:62", + "nodeType": "YulLiteral", + "src": "17491:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "17481:6:62", + "nodeType": "YulIdentifier", + "src": "17481:6:62" + }, + "nativeSrc": "17481:12:62", + "nodeType": "YulFunctionCall", + "src": "17481:12:62" + }, + "nativeSrc": "17481:12:62", + "nodeType": "YulExpressionStatement", + "src": "17481:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "17451:6:62", + "nodeType": "YulIdentifier", + "src": "17451:6:62" + }, + { + "kind": "number", + "nativeSrc": "17459:18:62", + "nodeType": "YulLiteral", + "src": "17459:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "17448:2:62", + "nodeType": "YulIdentifier", + "src": "17448:2:62" + }, + "nativeSrc": "17448:30:62", + "nodeType": "YulFunctionCall", + "src": "17448:30:62" + }, + "nativeSrc": "17445:50:62", + "nodeType": "YulIf", + "src": "17445:50:62" + }, + { + "nativeSrc": "17504:60:62", + "nodeType": "YulAssignment", + "src": "17504:60:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17536:9:62", + "nodeType": "YulIdentifier", + "src": "17536:9:62" + }, + { + "name": "offset", + "nativeSrc": "17547:6:62", + "nodeType": "YulIdentifier", + "src": "17547:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17532:3:62", + "nodeType": "YulIdentifier", + "src": "17532:3:62" + }, + "nativeSrc": "17532:22:62", + "nodeType": "YulFunctionCall", + "src": "17532:22:62" + }, + { + "name": "dataEnd", + "nativeSrc": "17556:7:62", + "nodeType": "YulIdentifier", + "src": "17556:7:62" + } + ], + "functionName": { + "name": "abi_decode_string", + "nativeSrc": "17514:17:62", + "nodeType": "YulIdentifier", + "src": "17514:17:62" + }, + "nativeSrc": "17514:50:62", + "nodeType": "YulFunctionCall", + "src": "17514:50:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "17504:6:62", + "nodeType": "YulIdentifier", + "src": "17504:6:62" + } + ] + }, + { + "nativeSrc": "17573:48:62", + "nodeType": "YulVariableDeclaration", + "src": "17573:48:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17606:9:62", + "nodeType": "YulIdentifier", + "src": "17606:9:62" + }, + { + "kind": "number", + "nativeSrc": "17617:2:62", + "nodeType": "YulLiteral", + "src": "17617:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17602:3:62", + "nodeType": "YulIdentifier", + "src": "17602:3:62" + }, + "nativeSrc": "17602:18:62", + "nodeType": "YulFunctionCall", + "src": "17602:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "17589:12:62", + "nodeType": "YulIdentifier", + "src": "17589:12:62" + }, + "nativeSrc": "17589:32:62", + "nodeType": "YulFunctionCall", + "src": "17589:32:62" + }, + "variables": [ + { + "name": "offset_1", + "nativeSrc": "17577:8:62", + "nodeType": "YulTypedName", + "src": "17577:8:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "17666:16:62", + "nodeType": "YulBlock", + "src": "17666:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "17675:1:62", + "nodeType": "YulLiteral", + "src": "17675:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "17678:1:62", + "nodeType": "YulLiteral", + "src": "17678:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "17668:6:62", + "nodeType": "YulIdentifier", + "src": "17668:6:62" + }, + "nativeSrc": "17668:12:62", + "nodeType": "YulFunctionCall", + "src": "17668:12:62" + }, + "nativeSrc": "17668:12:62", + "nodeType": "YulExpressionStatement", + "src": "17668:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nativeSrc": "17636:8:62", + "nodeType": "YulIdentifier", + "src": "17636:8:62" + }, + { + "kind": "number", + "nativeSrc": "17646:18:62", + "nodeType": "YulLiteral", + "src": "17646:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "17633:2:62", + "nodeType": "YulIdentifier", + "src": "17633:2:62" + }, + "nativeSrc": "17633:32:62", + "nodeType": "YulFunctionCall", + "src": "17633:32:62" + }, + "nativeSrc": "17630:52:62", + "nodeType": "YulIf", + "src": "17630:52:62" + }, + { + "nativeSrc": "17691:62:62", + "nodeType": "YulAssignment", + "src": "17691:62:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17723:9:62", + "nodeType": "YulIdentifier", + "src": "17723:9:62" + }, + { + "name": "offset_1", + "nativeSrc": "17734:8:62", + "nodeType": "YulIdentifier", + "src": "17734:8:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17719:3:62", + "nodeType": "YulIdentifier", + "src": "17719:3:62" + }, + "nativeSrc": "17719:24:62", + "nodeType": "YulFunctionCall", + "src": "17719:24:62" + }, + { + "name": "dataEnd", + "nativeSrc": "17745:7:62", + "nodeType": "YulIdentifier", + "src": "17745:7:62" + } + ], + "functionName": { + "name": "abi_decode_string", + "nativeSrc": "17701:17:62", + "nodeType": "YulIdentifier", + "src": "17701:17:62" + }, + "nativeSrc": "17701:52:62", + "nodeType": "YulFunctionCall", + "src": "17701:52:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "17691:6:62", + "nodeType": "YulIdentifier", + "src": "17691:6:62" + } + ] + }, + { + "nativeSrc": "17762:45:62", + "nodeType": "YulVariableDeclaration", + "src": "17762:45:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "17792:9:62", + "nodeType": "YulIdentifier", + "src": "17792:9:62" + }, + { + "kind": "number", + "nativeSrc": "17803:2:62", + "nodeType": "YulLiteral", + "src": "17803:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "17788:3:62", + "nodeType": "YulIdentifier", + "src": "17788:3:62" + }, + "nativeSrc": "17788:18:62", + "nodeType": "YulFunctionCall", + "src": "17788:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "17775:12:62", + "nodeType": "YulIdentifier", + "src": "17775:12:62" + }, + "nativeSrc": "17775:32:62", + "nodeType": "YulFunctionCall", + "src": "17775:32:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "17766:5:62", + "nodeType": "YulTypedName", + "src": "17766:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "17841:5:62", + "nodeType": "YulIdentifier", + "src": "17841:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "17816:24:62", + "nodeType": "YulIdentifier", + "src": "17816:24:62" + }, + "nativeSrc": "17816:31:62", + "nodeType": "YulFunctionCall", + "src": "17816:31:62" + }, + "nativeSrc": "17816:31:62", + "nodeType": "YulExpressionStatement", + "src": "17816:31:62" + }, + { + "nativeSrc": "17856:15:62", + "nodeType": "YulAssignment", + "src": "17856:15:62", + "value": { + "name": "value", + "nativeSrc": "17866:5:62", + "nodeType": "YulIdentifier", + "src": "17866:5:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "17856:6:62", + "nodeType": "YulIdentifier", + "src": "17856:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_payable", + "nativeSrc": "17196:681:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "17278:9:62", + "nodeType": "YulTypedName", + "src": "17278:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "17289:7:62", + "nodeType": "YulTypedName", + "src": "17289:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "17301:6:62", + "nodeType": "YulTypedName", + "src": "17301:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "17309:6:62", + "nodeType": "YulTypedName", + "src": "17309:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "17317:6:62", + "nodeType": "YulTypedName", + "src": "17317:6:62", + "type": "" + } + ], + "src": "17196:681:62" + }, + { + "body": { + "nativeSrc": "17937:325:62", + "nodeType": "YulBlock", + "src": "17937:325:62", + "statements": [ + { + "nativeSrc": "17947:22:62", + "nodeType": "YulAssignment", + "src": "17947:22:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "17961:1:62", + "nodeType": "YulLiteral", + "src": "17961:1:62", + "type": "", + "value": "1" + }, + { + "name": "data", + "nativeSrc": "17964:4:62", + "nodeType": "YulIdentifier", + "src": "17964:4:62" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "17957:3:62", + "nodeType": "YulIdentifier", + "src": "17957:3:62" + }, + "nativeSrc": "17957:12:62", + "nodeType": "YulFunctionCall", + "src": "17957:12:62" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "17947:6:62", + "nodeType": "YulIdentifier", + "src": "17947:6:62" + } + ] + }, + { + "nativeSrc": "17978:38:62", + "nodeType": "YulVariableDeclaration", + "src": "17978:38:62", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "18008:4:62", + "nodeType": "YulIdentifier", + "src": "18008:4:62" + }, + { + "kind": "number", + "nativeSrc": "18014:1:62", + "nodeType": "YulLiteral", + "src": "18014:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "18004:3:62", + "nodeType": "YulIdentifier", + "src": "18004:3:62" + }, + "nativeSrc": "18004:12:62", + "nodeType": "YulFunctionCall", + "src": "18004:12:62" + }, + "variables": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "17982:18:62", + "nodeType": "YulTypedName", + "src": "17982:18:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "18055:31:62", + "nodeType": "YulBlock", + "src": "18055:31:62", + "statements": [ + { + "nativeSrc": "18057:27:62", + "nodeType": "YulAssignment", + "src": "18057:27:62", + "value": { + "arguments": [ + { + "name": "length", + "nativeSrc": "18071:6:62", + "nodeType": "YulIdentifier", + "src": "18071:6:62" + }, + { + "kind": "number", + "nativeSrc": "18079:4:62", + "nodeType": "YulLiteral", + "src": "18079:4:62", + "type": "", + "value": "0x7f" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "18067:3:62", + "nodeType": "YulIdentifier", + "src": "18067:3:62" + }, + "nativeSrc": "18067:17:62", + "nodeType": "YulFunctionCall", + "src": "18067:17:62" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "18057:6:62", + "nodeType": "YulIdentifier", + "src": "18057:6:62" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "18035:18:62", + "nodeType": "YulIdentifier", + "src": "18035:18:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "18028:6:62", + "nodeType": "YulIdentifier", + "src": "18028:6:62" + }, + "nativeSrc": "18028:26:62", + "nodeType": "YulFunctionCall", + "src": "18028:26:62" + }, + "nativeSrc": "18025:61:62", + "nodeType": "YulIf", + "src": "18025:61:62" + }, + { + "body": { + "nativeSrc": "18145:111:62", + "nodeType": "YulBlock", + "src": "18145:111:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18166:1:62", + "nodeType": "YulLiteral", + "src": "18166:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18173:3:62", + "nodeType": "YulLiteral", + "src": "18173:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "18178:10:62", + "nodeType": "YulLiteral", + "src": "18178:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "18169:3:62", + "nodeType": "YulIdentifier", + "src": "18169:3:62" + }, + "nativeSrc": "18169:20:62", + "nodeType": "YulFunctionCall", + "src": "18169:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18159:6:62", + "nodeType": "YulIdentifier", + "src": "18159:6:62" + }, + "nativeSrc": "18159:31:62", + "nodeType": "YulFunctionCall", + "src": "18159:31:62" + }, + "nativeSrc": "18159:31:62", + "nodeType": "YulExpressionStatement", + "src": "18159:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18210:1:62", + "nodeType": "YulLiteral", + "src": "18210:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "18213:4:62", + "nodeType": "YulLiteral", + "src": "18213:4:62", + "type": "", + "value": "0x22" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18203:6:62", + "nodeType": "YulIdentifier", + "src": "18203:6:62" + }, + "nativeSrc": "18203:15:62", + "nodeType": "YulFunctionCall", + "src": "18203:15:62" + }, + "nativeSrc": "18203:15:62", + "nodeType": "YulExpressionStatement", + "src": "18203:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18238:1:62", + "nodeType": "YulLiteral", + "src": "18238:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "18241:4:62", + "nodeType": "YulLiteral", + "src": "18241:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "18231:6:62", + "nodeType": "YulIdentifier", + "src": "18231:6:62" + }, + "nativeSrc": "18231:15:62", + "nodeType": "YulFunctionCall", + "src": "18231:15:62" + }, + "nativeSrc": "18231:15:62", + "nodeType": "YulExpressionStatement", + "src": "18231:15:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "outOfPlaceEncoding", + "nativeSrc": "18101:18:62", + "nodeType": "YulIdentifier", + "src": "18101:18:62" + }, + { + "arguments": [ + { + "name": "length", + "nativeSrc": "18124:6:62", + "nodeType": "YulIdentifier", + "src": "18124:6:62" + }, + { + "kind": "number", + "nativeSrc": "18132:2:62", + "nodeType": "YulLiteral", + "src": "18132:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "18121:2:62", + "nodeType": "YulIdentifier", + "src": "18121:2:62" + }, + "nativeSrc": "18121:14:62", + "nodeType": "YulFunctionCall", + "src": "18121:14:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "18098:2:62", + "nodeType": "YulIdentifier", + "src": "18098:2:62" + }, + "nativeSrc": "18098:38:62", + "nodeType": "YulFunctionCall", + "src": "18098:38:62" + }, + "nativeSrc": "18095:161:62", + "nodeType": "YulIf", + "src": "18095:161:62" + } + ] + }, + "name": "extract_byte_array_length", + "nativeSrc": "17882:380:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "data", + "nativeSrc": "17917:4:62", + "nodeType": "YulTypedName", + "src": "17917:4:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nativeSrc": "17926:6:62", + "nodeType": "YulTypedName", + "src": "17926:6:62", + "type": "" + } + ], + "src": "17882:380:62" + }, + { + "body": { + "nativeSrc": "18323:65:62", + "nodeType": "YulBlock", + "src": "18323:65:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18340:1:62", + "nodeType": "YulLiteral", + "src": "18340:1:62", + "type": "", + "value": "0" + }, + { + "name": "ptr", + "nativeSrc": "18343:3:62", + "nodeType": "YulIdentifier", + "src": "18343:3:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18333:6:62", + "nodeType": "YulIdentifier", + "src": "18333:6:62" + }, + "nativeSrc": "18333:14:62", + "nodeType": "YulFunctionCall", + "src": "18333:14:62" + }, + "nativeSrc": "18333:14:62", + "nodeType": "YulExpressionStatement", + "src": "18333:14:62" + }, + { + "nativeSrc": "18356:26:62", + "nodeType": "YulAssignment", + "src": "18356:26:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18374:1:62", + "nodeType": "YulLiteral", + "src": "18374:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "18377:4:62", + "nodeType": "YulLiteral", + "src": "18377:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "keccak256", + "nativeSrc": "18364:9:62", + "nodeType": "YulIdentifier", + "src": "18364:9:62" + }, + "nativeSrc": "18364:18:62", + "nodeType": "YulFunctionCall", + "src": "18364:18:62" + }, + "variableNames": [ + { + "name": "data", + "nativeSrc": "18356:4:62", + "nodeType": "YulIdentifier", + "src": "18356:4:62" + } + ] + } + ] + }, + "name": "array_dataslot_string_storage", + "nativeSrc": "18267:121:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "ptr", + "nativeSrc": "18306:3:62", + "nodeType": "YulTypedName", + "src": "18306:3:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "data", + "nativeSrc": "18314:4:62", + "nodeType": "YulTypedName", + "src": "18314:4:62", + "type": "" + } + ], + "src": "18267:121:62" + }, + { + "body": { + "nativeSrc": "18474:437:62", + "nodeType": "YulBlock", + "src": "18474:437:62", + "statements": [ + { + "body": { + "nativeSrc": "18507:398:62", + "nodeType": "YulBlock", + "src": "18507:398:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18528:1:62", + "nodeType": "YulLiteral", + "src": "18528:1:62", + "type": "", + "value": "0" + }, + { + "name": "array", + "nativeSrc": "18531:5:62", + "nodeType": "YulIdentifier", + "src": "18531:5:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "18521:6:62", + "nodeType": "YulIdentifier", + "src": "18521:6:62" + }, + "nativeSrc": "18521:16:62", + "nodeType": "YulFunctionCall", + "src": "18521:16:62" + }, + "nativeSrc": "18521:16:62", + "nodeType": "YulExpressionStatement", + "src": "18521:16:62" + }, + { + "nativeSrc": "18550:30:62", + "nodeType": "YulVariableDeclaration", + "src": "18550:30:62", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18572:1:62", + "nodeType": "YulLiteral", + "src": "18572:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "18575:4:62", + "nodeType": "YulLiteral", + "src": "18575:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "keccak256", + "nativeSrc": "18562:9:62", + "nodeType": "YulIdentifier", + "src": "18562:9:62" + }, + "nativeSrc": "18562:18:62", + "nodeType": "YulFunctionCall", + "src": "18562:18:62" + }, + "variables": [ + { + "name": "data", + "nativeSrc": "18554:4:62", + "nodeType": "YulTypedName", + "src": "18554:4:62", + "type": "" + } + ] + }, + { + "nativeSrc": "18593:57:62", + "nodeType": "YulVariableDeclaration", + "src": "18593:57:62", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "18616:4:62", + "nodeType": "YulIdentifier", + "src": "18616:4:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18626:1:62", + "nodeType": "YulLiteral", + "src": "18626:1:62", + "type": "", + "value": "5" + }, + { + "arguments": [ + { + "name": "startIndex", + "nativeSrc": "18633:10:62", + "nodeType": "YulIdentifier", + "src": "18633:10:62" + }, + { + "kind": "number", + "nativeSrc": "18645:2:62", + "nodeType": "YulLiteral", + "src": "18645:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "18629:3:62", + "nodeType": "YulIdentifier", + "src": "18629:3:62" + }, + "nativeSrc": "18629:19:62", + "nodeType": "YulFunctionCall", + "src": "18629:19:62" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "18622:3:62", + "nodeType": "YulIdentifier", + "src": "18622:3:62" + }, + "nativeSrc": "18622:27:62", + "nodeType": "YulFunctionCall", + "src": "18622:27:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "18612:3:62", + "nodeType": "YulIdentifier", + "src": "18612:3:62" + }, + "nativeSrc": "18612:38:62", + "nodeType": "YulFunctionCall", + "src": "18612:38:62" + }, + "variables": [ + { + "name": "deleteStart", + "nativeSrc": "18597:11:62", + "nodeType": "YulTypedName", + "src": "18597:11:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "18687:23:62", + "nodeType": "YulBlock", + "src": "18687:23:62", + "statements": [ + { + "nativeSrc": "18689:19:62", + "nodeType": "YulAssignment", + "src": "18689:19:62", + "value": { + "name": "data", + "nativeSrc": "18704:4:62", + "nodeType": "YulIdentifier", + "src": "18704:4:62" + }, + "variableNames": [ + { + "name": "deleteStart", + "nativeSrc": "18689:11:62", + "nodeType": "YulIdentifier", + "src": "18689:11:62" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "startIndex", + "nativeSrc": "18669:10:62", + "nodeType": "YulIdentifier", + "src": "18669:10:62" + }, + { + "kind": "number", + "nativeSrc": "18681:4:62", + "nodeType": "YulLiteral", + "src": "18681:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "18666:2:62", + "nodeType": "YulIdentifier", + "src": "18666:2:62" + }, + "nativeSrc": "18666:20:62", + "nodeType": "YulFunctionCall", + "src": "18666:20:62" + }, + "nativeSrc": "18663:47:62", + "nodeType": "YulIf", + "src": "18663:47:62" + }, + { + "nativeSrc": "18723:41:62", + "nodeType": "YulVariableDeclaration", + "src": "18723:41:62", + "value": { + "arguments": [ + { + "name": "data", + "nativeSrc": "18737:4:62", + "nodeType": "YulIdentifier", + "src": "18737:4:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "18747:1:62", + "nodeType": "YulLiteral", + "src": "18747:1:62", + "type": "", + "value": "5" + }, + { + "arguments": [ + { + "name": "len", + "nativeSrc": "18754:3:62", + "nodeType": "YulIdentifier", + "src": "18754:3:62" + }, + { + "kind": "number", + "nativeSrc": "18759:2:62", + "nodeType": "YulLiteral", + "src": "18759:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "18750:3:62", + "nodeType": "YulIdentifier", + "src": "18750:3:62" + }, + "nativeSrc": "18750:12:62", + "nodeType": "YulFunctionCall", + "src": "18750:12:62" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "18743:3:62", + "nodeType": "YulIdentifier", + "src": "18743:3:62" + }, + "nativeSrc": "18743:20:62", + "nodeType": "YulFunctionCall", + "src": "18743:20:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "18733:3:62", + "nodeType": "YulIdentifier", + "src": "18733:3:62" + }, + "nativeSrc": "18733:31:62", + "nodeType": "YulFunctionCall", + "src": "18733:31:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "18727:2:62", + "nodeType": "YulTypedName", + "src": "18727:2:62", + "type": "" + } + ] + }, + { + "nativeSrc": "18777:24:62", + "nodeType": "YulVariableDeclaration", + "src": "18777:24:62", + "value": { + "name": "deleteStart", + "nativeSrc": "18790:11:62", + "nodeType": "YulIdentifier", + "src": "18790:11:62" + }, + "variables": [ + { + "name": "start", + "nativeSrc": "18781:5:62", + "nodeType": "YulTypedName", + "src": "18781:5:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "18875:20:62", + "nodeType": "YulBlock", + "src": "18875:20:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "start", + "nativeSrc": "18884:5:62", + "nodeType": "YulIdentifier", + "src": "18884:5:62" + }, + { + "kind": "number", + "nativeSrc": "18891:1:62", + "nodeType": "YulLiteral", + "src": "18891:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "18877:6:62", + "nodeType": "YulIdentifier", + "src": "18877:6:62" + }, + "nativeSrc": "18877:16:62", + "nodeType": "YulFunctionCall", + "src": "18877:16:62" + }, + "nativeSrc": "18877:16:62", + "nodeType": "YulExpressionStatement", + "src": "18877:16:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "start", + "nativeSrc": "18825:5:62", + "nodeType": "YulIdentifier", + "src": "18825:5:62" + }, + { + "name": "_1", + "nativeSrc": "18832:2:62", + "nodeType": "YulIdentifier", + "src": "18832:2:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "18822:2:62", + "nodeType": "YulIdentifier", + "src": "18822:2:62" + }, + "nativeSrc": "18822:13:62", + "nodeType": "YulFunctionCall", + "src": "18822:13:62" + }, + "nativeSrc": "18814:81:62", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "18836:26:62", + "nodeType": "YulBlock", + "src": "18836:26:62", + "statements": [ + { + "nativeSrc": "18838:22:62", + "nodeType": "YulAssignment", + "src": "18838:22:62", + "value": { + "arguments": [ + { + "name": "start", + "nativeSrc": "18851:5:62", + "nodeType": "YulIdentifier", + "src": "18851:5:62" + }, + { + "kind": "number", + "nativeSrc": "18858:1:62", + "nodeType": "YulLiteral", + "src": "18858:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "18847:3:62", + "nodeType": "YulIdentifier", + "src": "18847:3:62" + }, + "nativeSrc": "18847:13:62", + "nodeType": "YulFunctionCall", + "src": "18847:13:62" + }, + "variableNames": [ + { + "name": "start", + "nativeSrc": "18838:5:62", + "nodeType": "YulIdentifier", + "src": "18838:5:62" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "18818:3:62", + "nodeType": "YulBlock", + "src": "18818:3:62", + "statements": [] + }, + "src": "18814:81:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "len", + "nativeSrc": "18490:3:62", + "nodeType": "YulIdentifier", + "src": "18490:3:62" + }, + { + "kind": "number", + "nativeSrc": "18495:2:62", + "nodeType": "YulLiteral", + "src": "18495:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "18487:2:62", + "nodeType": "YulIdentifier", + "src": "18487:2:62" + }, + "nativeSrc": "18487:11:62", + "nodeType": "YulFunctionCall", + "src": "18487:11:62" + }, + "nativeSrc": "18484:421:62", + "nodeType": "YulIf", + "src": "18484:421:62" + } + ] + }, + "name": "clean_up_bytearray_end_slots_string_storage", + "nativeSrc": "18393:518:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "array", + "nativeSrc": "18446:5:62", + "nodeType": "YulTypedName", + "src": "18446:5:62", + "type": "" + }, + { + "name": "len", + "nativeSrc": "18453:3:62", + "nodeType": "YulTypedName", + "src": "18453:3:62", + "type": "" + }, + { + "name": "startIndex", + "nativeSrc": "18458:10:62", + "nodeType": "YulTypedName", + "src": "18458:10:62", + "type": "" + } + ], + "src": "18393:518:62" + }, + { + "body": { + "nativeSrc": "19001:81:62", + "nodeType": "YulBlock", + "src": "19001:81:62", + "statements": [ + { + "nativeSrc": "19011:65:62", + "nodeType": "YulAssignment", + "src": "19011:65:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "data", + "nativeSrc": "19026:4:62", + "nodeType": "YulIdentifier", + "src": "19026:4:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "19044:1:62", + "nodeType": "YulLiteral", + "src": "19044:1:62", + "type": "", + "value": "3" + }, + { + "name": "len", + "nativeSrc": "19047:3:62", + "nodeType": "YulIdentifier", + "src": "19047:3:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "19040:3:62", + "nodeType": "YulIdentifier", + "src": "19040:3:62" + }, + "nativeSrc": "19040:11:62", + "nodeType": "YulFunctionCall", + "src": "19040:11:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "19057:1:62", + "nodeType": "YulLiteral", + "src": "19057:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "19053:3:62", + "nodeType": "YulIdentifier", + "src": "19053:3:62" + }, + "nativeSrc": "19053:6:62", + "nodeType": "YulFunctionCall", + "src": "19053:6:62" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "19036:3:62", + "nodeType": "YulIdentifier", + "src": "19036:3:62" + }, + "nativeSrc": "19036:24:62", + "nodeType": "YulFunctionCall", + "src": "19036:24:62" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "19032:3:62", + "nodeType": "YulIdentifier", + "src": "19032:3:62" + }, + "nativeSrc": "19032:29:62", + "nodeType": "YulFunctionCall", + "src": "19032:29:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "19022:3:62", + "nodeType": "YulIdentifier", + "src": "19022:3:62" + }, + "nativeSrc": "19022:40:62", + "nodeType": "YulFunctionCall", + "src": "19022:40:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "19068:1:62", + "nodeType": "YulLiteral", + "src": "19068:1:62", + "type": "", + "value": "1" + }, + { + "name": "len", + "nativeSrc": "19071:3:62", + "nodeType": "YulIdentifier", + "src": "19071:3:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "19064:3:62", + "nodeType": "YulIdentifier", + "src": "19064:3:62" + }, + "nativeSrc": "19064:11:62", + "nodeType": "YulFunctionCall", + "src": "19064:11:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "19019:2:62", + "nodeType": "YulIdentifier", + "src": "19019:2:62" + }, + "nativeSrc": "19019:57:62", + "nodeType": "YulFunctionCall", + "src": "19019:57:62" + }, + "variableNames": [ + { + "name": "used", + "nativeSrc": "19011:4:62", + "nodeType": "YulIdentifier", + "src": "19011:4:62" + } + ] + } + ] + }, + "name": "extract_used_part_and_set_length_of_short_byte_array", + "nativeSrc": "18916:166:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "data", + "nativeSrc": "18978:4:62", + "nodeType": "YulTypedName", + "src": "18978:4:62", + "type": "" + }, + { + "name": "len", + "nativeSrc": "18984:3:62", + "nodeType": "YulTypedName", + "src": "18984:3:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "used", + "nativeSrc": "18992:4:62", + "nodeType": "YulTypedName", + "src": "18992:4:62", + "type": "" + } + ], + "src": "18916:166:62" + }, + { + "body": { + "nativeSrc": "19183:1203:62", + "nodeType": "YulBlock", + "src": "19183:1203:62", + "statements": [ + { + "nativeSrc": "19193:24:62", + "nodeType": "YulVariableDeclaration", + "src": "19193:24:62", + "value": { + "arguments": [ + { + "name": "src", + "nativeSrc": "19213:3:62", + "nodeType": "YulIdentifier", + "src": "19213:3:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "19207:5:62", + "nodeType": "YulIdentifier", + "src": "19207:5:62" + }, + "nativeSrc": "19207:10:62", + "nodeType": "YulFunctionCall", + "src": "19207:10:62" + }, + "variables": [ + { + "name": "newLen", + "nativeSrc": "19197:6:62", + "nodeType": "YulTypedName", + "src": "19197:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "19260:22:62", + "nodeType": "YulBlock", + "src": "19260:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "19262:16:62", + "nodeType": "YulIdentifier", + "src": "19262:16:62" + }, + "nativeSrc": "19262:18:62", + "nodeType": "YulFunctionCall", + "src": "19262:18:62" + }, + "nativeSrc": "19262:18:62", + "nodeType": "YulExpressionStatement", + "src": "19262:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "newLen", + "nativeSrc": "19232:6:62", + "nodeType": "YulIdentifier", + "src": "19232:6:62" + }, + { + "kind": "number", + "nativeSrc": "19240:18:62", + "nodeType": "YulLiteral", + "src": "19240:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "19229:2:62", + "nodeType": "YulIdentifier", + "src": "19229:2:62" + }, + "nativeSrc": "19229:30:62", + "nodeType": "YulFunctionCall", + "src": "19229:30:62" + }, + "nativeSrc": "19226:56:62", + "nodeType": "YulIf", + "src": "19226:56:62" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "19335:4:62", + "nodeType": "YulIdentifier", + "src": "19335:4:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "slot", + "nativeSrc": "19373:4:62", + "nodeType": "YulIdentifier", + "src": "19373:4:62" + } + ], + "functionName": { + "name": "sload", + "nativeSrc": "19367:5:62", + "nodeType": "YulIdentifier", + "src": "19367:5:62" + }, + "nativeSrc": "19367:11:62", + "nodeType": "YulFunctionCall", + "src": "19367:11:62" + } + ], + "functionName": { + "name": "extract_byte_array_length", + "nativeSrc": "19341:25:62", + "nodeType": "YulIdentifier", + "src": "19341:25:62" + }, + "nativeSrc": "19341:38:62", + "nodeType": "YulFunctionCall", + "src": "19341:38:62" + }, + { + "name": "newLen", + "nativeSrc": "19381:6:62", + "nodeType": "YulIdentifier", + "src": "19381:6:62" + } + ], + "functionName": { + "name": "clean_up_bytearray_end_slots_string_storage", + "nativeSrc": "19291:43:62", + "nodeType": "YulIdentifier", + "src": "19291:43:62" + }, + "nativeSrc": "19291:97:62", + "nodeType": "YulFunctionCall", + "src": "19291:97:62" + }, + "nativeSrc": "19291:97:62", + "nodeType": "YulExpressionStatement", + "src": "19291:97:62" + }, + { + "nativeSrc": "19397:18:62", + "nodeType": "YulVariableDeclaration", + "src": "19397:18:62", + "value": { + "kind": "number", + "nativeSrc": "19414:1:62", + "nodeType": "YulLiteral", + "src": "19414:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "srcOffset", + "nativeSrc": "19401:9:62", + "nodeType": "YulTypedName", + "src": "19401:9:62", + "type": "" + } + ] + }, + { + "nativeSrc": "19424:17:62", + "nodeType": "YulAssignment", + "src": "19424:17:62", + "value": { + "kind": "number", + "nativeSrc": "19437:4:62", + "nodeType": "YulLiteral", + "src": "19437:4:62", + "type": "", + "value": "0x20" + }, + "variableNames": [ + { + "name": "srcOffset", + "nativeSrc": "19424:9:62", + "nodeType": "YulIdentifier", + "src": "19424:9:62" + } + ] + }, + { + "cases": [ + { + "body": { + "nativeSrc": "19487:642:62", + "nodeType": "YulBlock", + "src": "19487:642:62", + "statements": [ + { + "nativeSrc": "19501:35:62", + "nodeType": "YulVariableDeclaration", + "src": "19501:35:62", + "value": { + "arguments": [ + { + "name": "newLen", + "nativeSrc": "19520:6:62", + "nodeType": "YulIdentifier", + "src": "19520:6:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "19532:2:62", + "nodeType": "YulLiteral", + "src": "19532:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "19528:3:62", + "nodeType": "YulIdentifier", + "src": "19528:3:62" + }, + "nativeSrc": "19528:7:62", + "nodeType": "YulFunctionCall", + "src": "19528:7:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "19516:3:62", + "nodeType": "YulIdentifier", + "src": "19516:3:62" + }, + "nativeSrc": "19516:20:62", + "nodeType": "YulFunctionCall", + "src": "19516:20:62" + }, + "variables": [ + { + "name": "loopEnd", + "nativeSrc": "19505:7:62", + "nodeType": "YulTypedName", + "src": "19505:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "19549:49:62", + "nodeType": "YulVariableDeclaration", + "src": "19549:49:62", + "value": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "19593:4:62", + "nodeType": "YulIdentifier", + "src": "19593:4:62" + } + ], + "functionName": { + "name": "array_dataslot_string_storage", + "nativeSrc": "19563:29:62", + "nodeType": "YulIdentifier", + "src": "19563:29:62" + }, + "nativeSrc": "19563:35:62", + "nodeType": "YulFunctionCall", + "src": "19563:35:62" + }, + "variables": [ + { + "name": "dstPtr", + "nativeSrc": "19553:6:62", + "nodeType": "YulTypedName", + "src": "19553:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "19611:10:62", + "nodeType": "YulVariableDeclaration", + "src": "19611:10:62", + "value": { + "kind": "number", + "nativeSrc": "19620:1:62", + "nodeType": "YulLiteral", + "src": "19620:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "19615:1:62", + "nodeType": "YulTypedName", + "src": "19615:1:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "19691:165:62", + "nodeType": "YulBlock", + "src": "19691:165:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "19716:6:62", + "nodeType": "YulIdentifier", + "src": "19716:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "19734:3:62", + "nodeType": "YulIdentifier", + "src": "19734:3:62" + }, + { + "name": "srcOffset", + "nativeSrc": "19739:9:62", + "nodeType": "YulIdentifier", + "src": "19739:9:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19730:3:62", + "nodeType": "YulIdentifier", + "src": "19730:3:62" + }, + "nativeSrc": "19730:19:62", + "nodeType": "YulFunctionCall", + "src": "19730:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "19724:5:62", + "nodeType": "YulIdentifier", + "src": "19724:5:62" + }, + "nativeSrc": "19724:26:62", + "nodeType": "YulFunctionCall", + "src": "19724:26:62" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "19709:6:62", + "nodeType": "YulIdentifier", + "src": "19709:6:62" + }, + "nativeSrc": "19709:42:62", + "nodeType": "YulFunctionCall", + "src": "19709:42:62" + }, + "nativeSrc": "19709:42:62", + "nodeType": "YulExpressionStatement", + "src": "19709:42:62" + }, + { + "nativeSrc": "19768:24:62", + "nodeType": "YulAssignment", + "src": "19768:24:62", + "value": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "19782:6:62", + "nodeType": "YulIdentifier", + "src": "19782:6:62" + }, + { + "kind": "number", + "nativeSrc": "19790:1:62", + "nodeType": "YulLiteral", + "src": "19790:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19778:3:62", + "nodeType": "YulIdentifier", + "src": "19778:3:62" + }, + "nativeSrc": "19778:14:62", + "nodeType": "YulFunctionCall", + "src": "19778:14:62" + }, + "variableNames": [ + { + "name": "dstPtr", + "nativeSrc": "19768:6:62", + "nodeType": "YulIdentifier", + "src": "19768:6:62" + } + ] + }, + { + "nativeSrc": "19809:33:62", + "nodeType": "YulAssignment", + "src": "19809:33:62", + "value": { + "arguments": [ + { + "name": "srcOffset", + "nativeSrc": "19826:9:62", + "nodeType": "YulIdentifier", + "src": "19826:9:62" + }, + { + "kind": "number", + "nativeSrc": "19837:4:62", + "nodeType": "YulLiteral", + "src": "19837:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19822:3:62", + "nodeType": "YulIdentifier", + "src": "19822:3:62" + }, + "nativeSrc": "19822:20:62", + "nodeType": "YulFunctionCall", + "src": "19822:20:62" + }, + "variableNames": [ + { + "name": "srcOffset", + "nativeSrc": "19809:9:62", + "nodeType": "YulIdentifier", + "src": "19809:9:62" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "19645:1:62", + "nodeType": "YulIdentifier", + "src": "19645:1:62" + }, + { + "name": "loopEnd", + "nativeSrc": "19648:7:62", + "nodeType": "YulIdentifier", + "src": "19648:7:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "19642:2:62", + "nodeType": "YulIdentifier", + "src": "19642:2:62" + }, + "nativeSrc": "19642:14:62", + "nodeType": "YulFunctionCall", + "src": "19642:14:62" + }, + "nativeSrc": "19634:222:62", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "19657:21:62", + "nodeType": "YulBlock", + "src": "19657:21:62", + "statements": [ + { + "nativeSrc": "19659:17:62", + "nodeType": "YulAssignment", + "src": "19659:17:62", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "19668:1:62", + "nodeType": "YulIdentifier", + "src": "19668:1:62" + }, + { + "kind": "number", + "nativeSrc": "19671:4:62", + "nodeType": "YulLiteral", + "src": "19671:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19664:3:62", + "nodeType": "YulIdentifier", + "src": "19664:3:62" + }, + "nativeSrc": "19664:12:62", + "nodeType": "YulFunctionCall", + "src": "19664:12:62" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "19659:1:62", + "nodeType": "YulIdentifier", + "src": "19659:1:62" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "19638:3:62", + "nodeType": "YulBlock", + "src": "19638:3:62", + "statements": [] + }, + "src": "19634:222:62" + }, + { + "body": { + "nativeSrc": "19904:166:62", + "nodeType": "YulBlock", + "src": "19904:166:62", + "statements": [ + { + "nativeSrc": "19922:43:62", + "nodeType": "YulVariableDeclaration", + "src": "19922:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "19949:3:62", + "nodeType": "YulIdentifier", + "src": "19949:3:62" + }, + { + "name": "srcOffset", + "nativeSrc": "19954:9:62", + "nodeType": "YulIdentifier", + "src": "19954:9:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "19945:3:62", + "nodeType": "YulIdentifier", + "src": "19945:3:62" + }, + "nativeSrc": "19945:19:62", + "nodeType": "YulFunctionCall", + "src": "19945:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "19939:5:62", + "nodeType": "YulIdentifier", + "src": "19939:5:62" + }, + "nativeSrc": "19939:26:62", + "nodeType": "YulFunctionCall", + "src": "19939:26:62" + }, + "variables": [ + { + "name": "lastValue", + "nativeSrc": "19926:9:62", + "nodeType": "YulTypedName", + "src": "19926:9:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dstPtr", + "nativeSrc": "19989:6:62", + "nodeType": "YulIdentifier", + "src": "19989:6:62" + }, + { + "arguments": [ + { + "name": "lastValue", + "nativeSrc": "20001:9:62", + "nodeType": "YulIdentifier", + "src": "20001:9:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20028:1:62", + "nodeType": "YulLiteral", + "src": "20028:1:62", + "type": "", + "value": "3" + }, + { + "name": "newLen", + "nativeSrc": "20031:6:62", + "nodeType": "YulIdentifier", + "src": "20031:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "20024:3:62", + "nodeType": "YulIdentifier", + "src": "20024:3:62" + }, + "nativeSrc": "20024:14:62", + "nodeType": "YulFunctionCall", + "src": "20024:14:62" + }, + { + "kind": "number", + "nativeSrc": "20040:3:62", + "nodeType": "YulLiteral", + "src": "20040:3:62", + "type": "", + "value": "248" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "20020:3:62", + "nodeType": "YulIdentifier", + "src": "20020:3:62" + }, + "nativeSrc": "20020:24:62", + "nodeType": "YulFunctionCall", + "src": "20020:24:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20050:1:62", + "nodeType": "YulLiteral", + "src": "20050:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "20046:3:62", + "nodeType": "YulIdentifier", + "src": "20046:3:62" + }, + "nativeSrc": "20046:6:62", + "nodeType": "YulFunctionCall", + "src": "20046:6:62" + } + ], + "functionName": { + "name": "shr", + "nativeSrc": "20016:3:62", + "nodeType": "YulIdentifier", + "src": "20016:3:62" + }, + "nativeSrc": "20016:37:62", + "nodeType": "YulFunctionCall", + "src": "20016:37:62" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "20012:3:62", + "nodeType": "YulIdentifier", + "src": "20012:3:62" + }, + "nativeSrc": "20012:42:62", + "nodeType": "YulFunctionCall", + "src": "20012:42:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "19997:3:62", + "nodeType": "YulIdentifier", + "src": "19997:3:62" + }, + "nativeSrc": "19997:58:62", + "nodeType": "YulFunctionCall", + "src": "19997:58:62" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "19982:6:62", + "nodeType": "YulIdentifier", + "src": "19982:6:62" + }, + "nativeSrc": "19982:74:62", + "nodeType": "YulFunctionCall", + "src": "19982:74:62" + }, + "nativeSrc": "19982:74:62", + "nodeType": "YulExpressionStatement", + "src": "19982:74:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "loopEnd", + "nativeSrc": "19875:7:62", + "nodeType": "YulIdentifier", + "src": "19875:7:62" + }, + { + "name": "newLen", + "nativeSrc": "19884:6:62", + "nodeType": "YulIdentifier", + "src": "19884:6:62" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "19872:2:62", + "nodeType": "YulIdentifier", + "src": "19872:2:62" + }, + "nativeSrc": "19872:19:62", + "nodeType": "YulFunctionCall", + "src": "19872:19:62" + }, + "nativeSrc": "19869:201:62", + "nodeType": "YulIf", + "src": "19869:201:62" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "20090:4:62", + "nodeType": "YulIdentifier", + "src": "20090:4:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20104:1:62", + "nodeType": "YulLiteral", + "src": "20104:1:62", + "type": "", + "value": "1" + }, + { + "name": "newLen", + "nativeSrc": "20107:6:62", + "nodeType": "YulIdentifier", + "src": "20107:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "20100:3:62", + "nodeType": "YulIdentifier", + "src": "20100:3:62" + }, + "nativeSrc": "20100:14:62", + "nodeType": "YulFunctionCall", + "src": "20100:14:62" + }, + { + "kind": "number", + "nativeSrc": "20116:1:62", + "nodeType": "YulLiteral", + "src": "20116:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20096:3:62", + "nodeType": "YulIdentifier", + "src": "20096:3:62" + }, + "nativeSrc": "20096:22:62", + "nodeType": "YulFunctionCall", + "src": "20096:22:62" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "20083:6:62", + "nodeType": "YulIdentifier", + "src": "20083:6:62" + }, + "nativeSrc": "20083:36:62", + "nodeType": "YulFunctionCall", + "src": "20083:36:62" + }, + "nativeSrc": "20083:36:62", + "nodeType": "YulExpressionStatement", + "src": "20083:36:62" + } + ] + }, + "nativeSrc": "19480:649:62", + "nodeType": "YulCase", + "src": "19480:649:62", + "value": { + "kind": "number", + "nativeSrc": "19485:1:62", + "nodeType": "YulLiteral", + "src": "19485:1:62", + "type": "", + "value": "1" + } + }, + { + "body": { + "nativeSrc": "20146:234:62", + "nodeType": "YulBlock", + "src": "20146:234:62", + "statements": [ + { + "nativeSrc": "20160:14:62", + "nodeType": "YulVariableDeclaration", + "src": "20160:14:62", + "value": { + "kind": "number", + "nativeSrc": "20173:1:62", + "nodeType": "YulLiteral", + "src": "20173:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "20164:5:62", + "nodeType": "YulTypedName", + "src": "20164:5:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "20209:67:62", + "nodeType": "YulBlock", + "src": "20209:67:62", + "statements": [ + { + "nativeSrc": "20227:35:62", + "nodeType": "YulAssignment", + "src": "20227:35:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "20246:3:62", + "nodeType": "YulIdentifier", + "src": "20246:3:62" + }, + { + "name": "srcOffset", + "nativeSrc": "20251:9:62", + "nodeType": "YulIdentifier", + "src": "20251:9:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20242:3:62", + "nodeType": "YulIdentifier", + "src": "20242:3:62" + }, + "nativeSrc": "20242:19:62", + "nodeType": "YulFunctionCall", + "src": "20242:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "20236:5:62", + "nodeType": "YulIdentifier", + "src": "20236:5:62" + }, + "nativeSrc": "20236:26:62", + "nodeType": "YulFunctionCall", + "src": "20236:26:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "20227:5:62", + "nodeType": "YulIdentifier", + "src": "20227:5:62" + } + ] + } + ] + }, + "condition": { + "name": "newLen", + "nativeSrc": "20190:6:62", + "nodeType": "YulIdentifier", + "src": "20190:6:62" + }, + "nativeSrc": "20187:89:62", + "nodeType": "YulIf", + "src": "20187:89:62" + }, + { + "expression": { + "arguments": [ + { + "name": "slot", + "nativeSrc": "20296:4:62", + "nodeType": "YulIdentifier", + "src": "20296:4:62" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "20355:5:62", + "nodeType": "YulIdentifier", + "src": "20355:5:62" + }, + { + "name": "newLen", + "nativeSrc": "20362:6:62", + "nodeType": "YulIdentifier", + "src": "20362:6:62" + } + ], + "functionName": { + "name": "extract_used_part_and_set_length_of_short_byte_array", + "nativeSrc": "20302:52:62", + "nodeType": "YulIdentifier", + "src": "20302:52:62" + }, + "nativeSrc": "20302:67:62", + "nodeType": "YulFunctionCall", + "src": "20302:67:62" + } + ], + "functionName": { + "name": "sstore", + "nativeSrc": "20289:6:62", + "nodeType": "YulIdentifier", + "src": "20289:6:62" + }, + "nativeSrc": "20289:81:62", + "nodeType": "YulFunctionCall", + "src": "20289:81:62" + }, + "nativeSrc": "20289:81:62", + "nodeType": "YulExpressionStatement", + "src": "20289:81:62" + } + ] + }, + "nativeSrc": "20138:242:62", + "nodeType": "YulCase", + "src": "20138:242:62", + "value": "default" + } + ], + "expression": { + "arguments": [ + { + "name": "newLen", + "nativeSrc": "19460:6:62", + "nodeType": "YulIdentifier", + "src": "19460:6:62" + }, + { + "kind": "number", + "nativeSrc": "19468:2:62", + "nodeType": "YulLiteral", + "src": "19468:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "19457:2:62", + "nodeType": "YulIdentifier", + "src": "19457:2:62" + }, + "nativeSrc": "19457:14:62", + "nodeType": "YulFunctionCall", + "src": "19457:14:62" + }, + "nativeSrc": "19450:930:62", + "nodeType": "YulSwitch", + "src": "19450:930:62" + } + ] + }, + "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage", + "nativeSrc": "19087:1299:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "slot", + "nativeSrc": "19168:4:62", + "nodeType": "YulTypedName", + "src": "19168:4:62", + "type": "" + }, + { + "name": "src", + "nativeSrc": "19174:3:62", + "nodeType": "YulTypedName", + "src": "19174:3:62", + "type": "" + } + ], + "src": "19087:1299:62" + }, + { + "body": { + "nativeSrc": "20520:259:62", + "nodeType": "YulBlock", + "src": "20520:259:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "20537:9:62", + "nodeType": "YulIdentifier", + "src": "20537:9:62" + }, + { + "kind": "number", + "nativeSrc": "20548:2:62", + "nodeType": "YulLiteral", + "src": "20548:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "20530:6:62", + "nodeType": "YulIdentifier", + "src": "20530:6:62" + }, + "nativeSrc": "20530:21:62", + "nodeType": "YulFunctionCall", + "src": "20530:21:62" + }, + "nativeSrc": "20530:21:62", + "nodeType": "YulExpressionStatement", + "src": "20530:21:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "20571:9:62", + "nodeType": "YulIdentifier", + "src": "20571:9:62" + }, + { + "kind": "number", + "nativeSrc": "20582:2:62", + "nodeType": "YulLiteral", + "src": "20582:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20567:3:62", + "nodeType": "YulIdentifier", + "src": "20567:3:62" + }, + "nativeSrc": "20567:18:62", + "nodeType": "YulFunctionCall", + "src": "20567:18:62" + }, + { + "name": "value1", + "nativeSrc": "20587:6:62", + "nodeType": "YulIdentifier", + "src": "20587:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "20560:6:62", + "nodeType": "YulIdentifier", + "src": "20560:6:62" + }, + "nativeSrc": "20560:34:62", + "nodeType": "YulFunctionCall", + "src": "20560:34:62" + }, + "nativeSrc": "20560:34:62", + "nodeType": "YulExpressionStatement", + "src": "20560:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "20620:9:62", + "nodeType": "YulIdentifier", + "src": "20620:9:62" + }, + { + "kind": "number", + "nativeSrc": "20631:2:62", + "nodeType": "YulLiteral", + "src": "20631:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20616:3:62", + "nodeType": "YulIdentifier", + "src": "20616:3:62" + }, + "nativeSrc": "20616:18:62", + "nodeType": "YulFunctionCall", + "src": "20616:18:62" + }, + { + "name": "value0", + "nativeSrc": "20636:6:62", + "nodeType": "YulIdentifier", + "src": "20636:6:62" + }, + { + "name": "value1", + "nativeSrc": "20644:6:62", + "nodeType": "YulIdentifier", + "src": "20644:6:62" + } + ], + "functionName": { + "name": "calldatacopy", + "nativeSrc": "20603:12:62", + "nodeType": "YulIdentifier", + "src": "20603:12:62" + }, + "nativeSrc": "20603:48:62", + "nodeType": "YulFunctionCall", + "src": "20603:48:62" + }, + "nativeSrc": "20603:48:62", + "nodeType": "YulExpressionStatement", + "src": "20603:48:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "20675:9:62", + "nodeType": "YulIdentifier", + "src": "20675:9:62" + }, + { + "name": "value1", + "nativeSrc": "20686:6:62", + "nodeType": "YulIdentifier", + "src": "20686:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20671:3:62", + "nodeType": "YulIdentifier", + "src": "20671:3:62" + }, + "nativeSrc": "20671:22:62", + "nodeType": "YulFunctionCall", + "src": "20671:22:62" + }, + { + "kind": "number", + "nativeSrc": "20695:2:62", + "nodeType": "YulLiteral", + "src": "20695:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20667:3:62", + "nodeType": "YulIdentifier", + "src": "20667:3:62" + }, + "nativeSrc": "20667:31:62", + "nodeType": "YulFunctionCall", + "src": "20667:31:62" + }, + { + "kind": "number", + "nativeSrc": "20700:1:62", + "nodeType": "YulLiteral", + "src": "20700:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "20660:6:62", + "nodeType": "YulIdentifier", + "src": "20660:6:62" + }, + "nativeSrc": "20660:42:62", + "nodeType": "YulFunctionCall", + "src": "20660:42:62" + }, + "nativeSrc": "20660:42:62", + "nodeType": "YulExpressionStatement", + "src": "20660:42:62" + }, + { + "nativeSrc": "20711:62:62", + "nodeType": "YulAssignment", + "src": "20711:62:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "20727:9:62", + "nodeType": "YulIdentifier", + "src": "20727:9:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "20746:6:62", + "nodeType": "YulIdentifier", + "src": "20746:6:62" + }, + { + "kind": "number", + "nativeSrc": "20754:2:62", + "nodeType": "YulLiteral", + "src": "20754:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20742:3:62", + "nodeType": "YulIdentifier", + "src": "20742:3:62" + }, + "nativeSrc": "20742:15:62", + "nodeType": "YulFunctionCall", + "src": "20742:15:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20763:2:62", + "nodeType": "YulLiteral", + "src": "20763:2:62", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "20759:3:62", + "nodeType": "YulIdentifier", + "src": "20759:3:62" + }, + "nativeSrc": "20759:7:62", + "nodeType": "YulFunctionCall", + "src": "20759:7:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "20738:3:62", + "nodeType": "YulIdentifier", + "src": "20738:3:62" + }, + "nativeSrc": "20738:29:62", + "nodeType": "YulFunctionCall", + "src": "20738:29:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20723:3:62", + "nodeType": "YulIdentifier", + "src": "20723:3:62" + }, + "nativeSrc": "20723:45:62", + "nodeType": "YulFunctionCall", + "src": "20723:45:62" + }, + { + "kind": "number", + "nativeSrc": "20770:2:62", + "nodeType": "YulLiteral", + "src": "20770:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "20719:3:62", + "nodeType": "YulIdentifier", + "src": "20719:3:62" + }, + "nativeSrc": "20719:54:62", + "nodeType": "YulFunctionCall", + "src": "20719:54:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "20711:4:62", + "nodeType": "YulIdentifier", + "src": "20711:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "20391:388:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "20481:9:62", + "nodeType": "YulTypedName", + "src": "20481:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "20492:6:62", + "nodeType": "YulTypedName", + "src": "20492:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "20500:6:62", + "nodeType": "YulTypedName", + "src": "20500:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "20511:4:62", + "nodeType": "YulTypedName", + "src": "20511:4:62", + "type": "" + } + ], + "src": "20391:388:62" + }, + { + "body": { + "nativeSrc": "20862:177:62", + "nodeType": "YulBlock", + "src": "20862:177:62", + "statements": [ + { + "body": { + "nativeSrc": "20908:16:62", + "nodeType": "YulBlock", + "src": "20908:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "20917:1:62", + "nodeType": "YulLiteral", + "src": "20917:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "20920:1:62", + "nodeType": "YulLiteral", + "src": "20920:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "20910:6:62", + "nodeType": "YulIdentifier", + "src": "20910:6:62" + }, + "nativeSrc": "20910:12:62", + "nodeType": "YulFunctionCall", + "src": "20910:12:62" + }, + "nativeSrc": "20910:12:62", + "nodeType": "YulExpressionStatement", + "src": "20910:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "20883:7:62", + "nodeType": "YulIdentifier", + "src": "20883:7:62" + }, + { + "name": "headStart", + "nativeSrc": "20892:9:62", + "nodeType": "YulIdentifier", + "src": "20892:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "20879:3:62", + "nodeType": "YulIdentifier", + "src": "20879:3:62" + }, + "nativeSrc": "20879:23:62", + "nodeType": "YulFunctionCall", + "src": "20879:23:62" + }, + { + "kind": "number", + "nativeSrc": "20904:2:62", + "nodeType": "YulLiteral", + "src": "20904:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "20875:3:62", + "nodeType": "YulIdentifier", + "src": "20875:3:62" + }, + "nativeSrc": "20875:32:62", + "nodeType": "YulFunctionCall", + "src": "20875:32:62" + }, + "nativeSrc": "20872:52:62", + "nodeType": "YulIf", + "src": "20872:52:62" + }, + { + "nativeSrc": "20933:36:62", + "nodeType": "YulVariableDeclaration", + "src": "20933:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "20959:9:62", + "nodeType": "YulIdentifier", + "src": "20959:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "20946:12:62", + "nodeType": "YulIdentifier", + "src": "20946:12:62" + }, + "nativeSrc": "20946:23:62", + "nodeType": "YulFunctionCall", + "src": "20946:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "20937:5:62", + "nodeType": "YulTypedName", + "src": "20937:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "21003:5:62", + "nodeType": "YulIdentifier", + "src": "21003:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "20978:24:62", + "nodeType": "YulIdentifier", + "src": "20978:24:62" + }, + "nativeSrc": "20978:31:62", + "nodeType": "YulFunctionCall", + "src": "20978:31:62" + }, + "nativeSrc": "20978:31:62", + "nodeType": "YulExpressionStatement", + "src": "20978:31:62" + }, + { + "nativeSrc": "21018:15:62", + "nodeType": "YulAssignment", + "src": "21018:15:62", + "value": { + "name": "value", + "nativeSrc": "21028:5:62", + "nodeType": "YulIdentifier", + "src": "21028:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "21018:6:62", + "nodeType": "YulIdentifier", + "src": "21018:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address_payable", + "nativeSrc": "20784:255:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "20828:9:62", + "nodeType": "YulTypedName", + "src": "20828:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "20839:7:62", + "nodeType": "YulTypedName", + "src": "20839:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "20851:6:62", + "nodeType": "YulTypedName", + "src": "20851:6:62", + "type": "" + } + ], + "src": "20784:255:62" + }, + { + "body": { + "nativeSrc": "21218:171:62", + "nodeType": "YulBlock", + "src": "21218:171:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "21235:9:62", + "nodeType": "YulIdentifier", + "src": "21235:9:62" + }, + { + "kind": "number", + "nativeSrc": "21246:2:62", + "nodeType": "YulLiteral", + "src": "21246:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21228:6:62", + "nodeType": "YulIdentifier", + "src": "21228:6:62" + }, + "nativeSrc": "21228:21:62", + "nodeType": "YulFunctionCall", + "src": "21228:21:62" + }, + "nativeSrc": "21228:21:62", + "nodeType": "YulExpressionStatement", + "src": "21228:21:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "21269:9:62", + "nodeType": "YulIdentifier", + "src": "21269:9:62" + }, + { + "kind": "number", + "nativeSrc": "21280:2:62", + "nodeType": "YulLiteral", + "src": "21280:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21265:3:62", + "nodeType": "YulIdentifier", + "src": "21265:3:62" + }, + "nativeSrc": "21265:18:62", + "nodeType": "YulFunctionCall", + "src": "21265:18:62" + }, + { + "kind": "number", + "nativeSrc": "21285:2:62", + "nodeType": "YulLiteral", + "src": "21285:2:62", + "type": "", + "value": "21" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21258:6:62", + "nodeType": "YulIdentifier", + "src": "21258:6:62" + }, + "nativeSrc": "21258:30:62", + "nodeType": "YulFunctionCall", + "src": "21258:30:62" + }, + "nativeSrc": "21258:30:62", + "nodeType": "YulExpressionStatement", + "src": "21258:30:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "21308:9:62", + "nodeType": "YulIdentifier", + "src": "21308:9:62" + }, + { + "kind": "number", + "nativeSrc": "21319:2:62", + "nodeType": "YulLiteral", + "src": "21319:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21304:3:62", + "nodeType": "YulIdentifier", + "src": "21304:3:62" + }, + "nativeSrc": "21304:18:62", + "nodeType": "YulFunctionCall", + "src": "21304:18:62" + }, + { + "hexValue": "4549503731323a20556e696e697469616c697a6564", + "kind": "string", + "nativeSrc": "21324:23:62", + "nodeType": "YulLiteral", + "src": "21324:23:62", + "type": "", + "value": "EIP712: Uninitialized" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21297:6:62", + "nodeType": "YulIdentifier", + "src": "21297:6:62" + }, + "nativeSrc": "21297:51:62", + "nodeType": "YulFunctionCall", + "src": "21297:51:62" + }, + "nativeSrc": "21297:51:62", + "nodeType": "YulExpressionStatement", + "src": "21297:51:62" + }, + { + "nativeSrc": "21357:26:62", + "nodeType": "YulAssignment", + "src": "21357:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "21369:9:62", + "nodeType": "YulIdentifier", + "src": "21369:9:62" + }, + { + "kind": "number", + "nativeSrc": "21380:2:62", + "nodeType": "YulLiteral", + "src": "21380:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21365:3:62", + "nodeType": "YulIdentifier", + "src": "21365:3:62" + }, + "nativeSrc": "21365:18:62", + "nodeType": "YulFunctionCall", + "src": "21365:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "21357:4:62", + "nodeType": "YulIdentifier", + "src": "21357:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "21044:345:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "21195:9:62", + "nodeType": "YulTypedName", + "src": "21195:9:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "21209:4:62", + "nodeType": "YulTypedName", + "src": "21209:4:62", + "type": "" + } + ], + "src": "21044:345:62" + }, + { + "body": { + "nativeSrc": "21426:95:62", + "nodeType": "YulBlock", + "src": "21426:95:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21443:1:62", + "nodeType": "YulLiteral", + "src": "21443:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21450:3:62", + "nodeType": "YulLiteral", + "src": "21450:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "21455:10:62", + "nodeType": "YulLiteral", + "src": "21455:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "21446:3:62", + "nodeType": "YulIdentifier", + "src": "21446:3:62" + }, + "nativeSrc": "21446:20:62", + "nodeType": "YulFunctionCall", + "src": "21446:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21436:6:62", + "nodeType": "YulIdentifier", + "src": "21436:6:62" + }, + "nativeSrc": "21436:31:62", + "nodeType": "YulFunctionCall", + "src": "21436:31:62" + }, + "nativeSrc": "21436:31:62", + "nodeType": "YulExpressionStatement", + "src": "21436:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21483:1:62", + "nodeType": "YulLiteral", + "src": "21483:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "21486:4:62", + "nodeType": "YulLiteral", + "src": "21486:4:62", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "21476:6:62", + "nodeType": "YulIdentifier", + "src": "21476:6:62" + }, + "nativeSrc": "21476:15:62", + "nodeType": "YulFunctionCall", + "src": "21476:15:62" + }, + "nativeSrc": "21476:15:62", + "nodeType": "YulExpressionStatement", + "src": "21476:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21507:1:62", + "nodeType": "YulLiteral", + "src": "21507:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "21510:4:62", + "nodeType": "YulLiteral", + "src": "21510:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "21500:6:62", + "nodeType": "YulIdentifier", + "src": "21500:6:62" + }, + "nativeSrc": "21500:15:62", + "nodeType": "YulFunctionCall", + "src": "21500:15:62" + }, + "nativeSrc": "21500:15:62", + "nodeType": "YulExpressionStatement", + "src": "21500:15:62" + } + ] + }, + "name": "panic_error_0x11", + "nativeSrc": "21394:127:62", + "nodeType": "YulFunctionDefinition", + "src": "21394:127:62" + }, + { + "body": { + "nativeSrc": "21575:79:62", + "nodeType": "YulBlock", + "src": "21575:79:62", + "statements": [ + { + "nativeSrc": "21585:17:62", + "nodeType": "YulAssignment", + "src": "21585:17:62", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "21597:1:62", + "nodeType": "YulIdentifier", + "src": "21597:1:62" + }, + { + "name": "y", + "nativeSrc": "21600:1:62", + "nodeType": "YulIdentifier", + "src": "21600:1:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "21593:3:62", + "nodeType": "YulIdentifier", + "src": "21593:3:62" + }, + "nativeSrc": "21593:9:62", + "nodeType": "YulFunctionCall", + "src": "21593:9:62" + }, + "variableNames": [ + { + "name": "diff", + "nativeSrc": "21585:4:62", + "nodeType": "YulIdentifier", + "src": "21585:4:62" + } + ] + }, + { + "body": { + "nativeSrc": "21626:22:62", + "nodeType": "YulBlock", + "src": "21626:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nativeSrc": "21628:16:62", + "nodeType": "YulIdentifier", + "src": "21628:16:62" + }, + "nativeSrc": "21628:18:62", + "nodeType": "YulFunctionCall", + "src": "21628:18:62" + }, + "nativeSrc": "21628:18:62", + "nodeType": "YulExpressionStatement", + "src": "21628:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "diff", + "nativeSrc": "21617:4:62", + "nodeType": "YulIdentifier", + "src": "21617:4:62" + }, + { + "name": "x", + "nativeSrc": "21623:1:62", + "nodeType": "YulIdentifier", + "src": "21623:1:62" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "21614:2:62", + "nodeType": "YulIdentifier", + "src": "21614:2:62" + }, + "nativeSrc": "21614:11:62", + "nodeType": "YulFunctionCall", + "src": "21614:11:62" + }, + "nativeSrc": "21611:37:62", + "nodeType": "YulIf", + "src": "21611:37:62" + } + ] + }, + "name": "checked_sub_t_uint256", + "nativeSrc": "21526:128:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nativeSrc": "21557:1:62", + "nodeType": "YulTypedName", + "src": "21557:1:62", + "type": "" + }, + { + "name": "y", + "nativeSrc": "21560:1:62", + "nodeType": "YulTypedName", + "src": "21560:1:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "diff", + "nativeSrc": "21566:4:62", + "nodeType": "YulTypedName", + "src": "21566:4:62", + "type": "" + } + ], + "src": "21526:128:62" + }, + { + "body": { + "nativeSrc": "21789:201:62", + "nodeType": "YulBlock", + "src": "21789:201:62", + "statements": [ + { + "body": { + "nativeSrc": "21827:16:62", + "nodeType": "YulBlock", + "src": "21827:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21836:1:62", + "nodeType": "YulLiteral", + "src": "21836:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "21839:1:62", + "nodeType": "YulLiteral", + "src": "21839:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "21829:6:62", + "nodeType": "YulIdentifier", + "src": "21829:6:62" + }, + "nativeSrc": "21829:12:62", + "nodeType": "YulFunctionCall", + "src": "21829:12:62" + }, + "nativeSrc": "21829:12:62", + "nodeType": "YulExpressionStatement", + "src": "21829:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "startIndex", + "nativeSrc": "21805:10:62", + "nodeType": "YulIdentifier", + "src": "21805:10:62" + }, + { + "name": "endIndex", + "nativeSrc": "21817:8:62", + "nodeType": "YulIdentifier", + "src": "21817:8:62" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "21802:2:62", + "nodeType": "YulIdentifier", + "src": "21802:2:62" + }, + "nativeSrc": "21802:24:62", + "nodeType": "YulFunctionCall", + "src": "21802:24:62" + }, + "nativeSrc": "21799:44:62", + "nodeType": "YulIf", + "src": "21799:44:62" + }, + { + "body": { + "nativeSrc": "21876:16:62", + "nodeType": "YulBlock", + "src": "21876:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "21885:1:62", + "nodeType": "YulLiteral", + "src": "21885:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "21888:1:62", + "nodeType": "YulLiteral", + "src": "21888:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "21878:6:62", + "nodeType": "YulIdentifier", + "src": "21878:6:62" + }, + "nativeSrc": "21878:12:62", + "nodeType": "YulFunctionCall", + "src": "21878:12:62" + }, + "nativeSrc": "21878:12:62", + "nodeType": "YulExpressionStatement", + "src": "21878:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "endIndex", + "nativeSrc": "21858:8:62", + "nodeType": "YulIdentifier", + "src": "21858:8:62" + }, + { + "name": "length", + "nativeSrc": "21868:6:62", + "nodeType": "YulIdentifier", + "src": "21868:6:62" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "21855:2:62", + "nodeType": "YulIdentifier", + "src": "21855:2:62" + }, + "nativeSrc": "21855:20:62", + "nodeType": "YulFunctionCall", + "src": "21855:20:62" + }, + "nativeSrc": "21852:40:62", + "nodeType": "YulIf", + "src": "21852:40:62" + }, + { + "nativeSrc": "21901:36:62", + "nodeType": "YulAssignment", + "src": "21901:36:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "21918:6:62", + "nodeType": "YulIdentifier", + "src": "21918:6:62" + }, + { + "name": "startIndex", + "nativeSrc": "21926:10:62", + "nodeType": "YulIdentifier", + "src": "21926:10:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "21914:3:62", + "nodeType": "YulIdentifier", + "src": "21914:3:62" + }, + "nativeSrc": "21914:23:62", + "nodeType": "YulFunctionCall", + "src": "21914:23:62" + }, + "variableNames": [ + { + "name": "offsetOut", + "nativeSrc": "21901:9:62", + "nodeType": "YulIdentifier", + "src": "21901:9:62" + } + ] + }, + { + "nativeSrc": "21946:38:62", + "nodeType": "YulAssignment", + "src": "21946:38:62", + "value": { + "arguments": [ + { + "name": "endIndex", + "nativeSrc": "21963:8:62", + "nodeType": "YulIdentifier", + "src": "21963:8:62" + }, + { + "name": "startIndex", + "nativeSrc": "21973:10:62", + "nodeType": "YulIdentifier", + "src": "21973:10:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "21959:3:62", + "nodeType": "YulIdentifier", + "src": "21959:3:62" + }, + "nativeSrc": "21959:25:62", + "nodeType": "YulFunctionCall", + "src": "21959:25:62" + }, + "variableNames": [ + { + "name": "lengthOut", + "nativeSrc": "21946:9:62", + "nodeType": "YulIdentifier", + "src": "21946:9:62" + } + ] + } + ] + }, + "name": "calldata_array_index_range_access_t_bytes_calldata_ptr", + "nativeSrc": "21659:331:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "21723:6:62", + "nodeType": "YulTypedName", + "src": "21723:6:62", + "type": "" + }, + { + "name": "length", + "nativeSrc": "21731:6:62", + "nodeType": "YulTypedName", + "src": "21731:6:62", + "type": "" + }, + { + "name": "startIndex", + "nativeSrc": "21739:10:62", + "nodeType": "YulTypedName", + "src": "21739:10:62", + "type": "" + }, + { + "name": "endIndex", + "nativeSrc": "21751:8:62", + "nodeType": "YulTypedName", + "src": "21751:8:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "offsetOut", + "nativeSrc": "21764:9:62", + "nodeType": "YulTypedName", + "src": "21764:9:62", + "type": "" + }, + { + "name": "lengthOut", + "nativeSrc": "21775:9:62", + "nodeType": "YulTypedName", + "src": "21775:9:62", + "type": "" + } + ], + "src": "21659:331:62" + }, + { + "body": { + "nativeSrc": "22027:95:62", + "nodeType": "YulBlock", + "src": "22027:95:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22044:1:62", + "nodeType": "YulLiteral", + "src": "22044:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22051:3:62", + "nodeType": "YulLiteral", + "src": "22051:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "22056:10:62", + "nodeType": "YulLiteral", + "src": "22056:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "22047:3:62", + "nodeType": "YulIdentifier", + "src": "22047:3:62" + }, + "nativeSrc": "22047:20:62", + "nodeType": "YulFunctionCall", + "src": "22047:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22037:6:62", + "nodeType": "YulIdentifier", + "src": "22037:6:62" + }, + "nativeSrc": "22037:31:62", + "nodeType": "YulFunctionCall", + "src": "22037:31:62" + }, + "nativeSrc": "22037:31:62", + "nodeType": "YulExpressionStatement", + "src": "22037:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22084:1:62", + "nodeType": "YulLiteral", + "src": "22084:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "22087:4:62", + "nodeType": "YulLiteral", + "src": "22087:4:62", + "type": "", + "value": "0x32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22077:6:62", + "nodeType": "YulIdentifier", + "src": "22077:6:62" + }, + "nativeSrc": "22077:15:62", + "nodeType": "YulFunctionCall", + "src": "22077:15:62" + }, + "nativeSrc": "22077:15:62", + "nodeType": "YulExpressionStatement", + "src": "22077:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22108:1:62", + "nodeType": "YulLiteral", + "src": "22108:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "22111:4:62", + "nodeType": "YulLiteral", + "src": "22111:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "22101:6:62", + "nodeType": "YulIdentifier", + "src": "22101:6:62" + }, + "nativeSrc": "22101:15:62", + "nodeType": "YulFunctionCall", + "src": "22101:15:62" + }, + "nativeSrc": "22101:15:62", + "nodeType": "YulExpressionStatement", + "src": "22101:15:62" + } + ] + }, + "name": "panic_error_0x32", + "nativeSrc": "21995:127:62", + "nodeType": "YulFunctionDefinition", + "src": "21995:127:62" + }, + { + "body": { + "nativeSrc": "22221:427:62", + "nodeType": "YulBlock", + "src": "22221:427:62", + "statements": [ + { + "nativeSrc": "22231:51:62", + "nodeType": "YulVariableDeclaration", + "src": "22231:51:62", + "value": { + "arguments": [ + { + "name": "ptr_to_tail", + "nativeSrc": "22270:11:62", + "nodeType": "YulIdentifier", + "src": "22270:11:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "22257:12:62", + "nodeType": "YulIdentifier", + "src": "22257:12:62" + }, + "nativeSrc": "22257:25:62", + "nodeType": "YulFunctionCall", + "src": "22257:25:62" + }, + "variables": [ + { + "name": "rel_offset_of_tail", + "nativeSrc": "22235:18:62", + "nodeType": "YulTypedName", + "src": "22235:18:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "22371:16:62", + "nodeType": "YulBlock", + "src": "22371:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22380:1:62", + "nodeType": "YulLiteral", + "src": "22380:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "22383:1:62", + "nodeType": "YulLiteral", + "src": "22383:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "22373:6:62", + "nodeType": "YulIdentifier", + "src": "22373:6:62" + }, + "nativeSrc": "22373:12:62", + "nodeType": "YulFunctionCall", + "src": "22373:12:62" + }, + "nativeSrc": "22373:12:62", + "nodeType": "YulExpressionStatement", + "src": "22373:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "rel_offset_of_tail", + "nativeSrc": "22305:18:62", + "nodeType": "YulIdentifier", + "src": "22305:18:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "calldatasize", + "nativeSrc": "22333:12:62", + "nodeType": "YulIdentifier", + "src": "22333:12:62" + }, + "nativeSrc": "22333:14:62", + "nodeType": "YulFunctionCall", + "src": "22333:14:62" + }, + { + "name": "base_ref", + "nativeSrc": "22349:8:62", + "nodeType": "YulIdentifier", + "src": "22349:8:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "22329:3:62", + "nodeType": "YulIdentifier", + "src": "22329:3:62" + }, + "nativeSrc": "22329:29:62", + "nodeType": "YulFunctionCall", + "src": "22329:29:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22364:2:62", + "nodeType": "YulLiteral", + "src": "22364:2:62", + "type": "", + "value": "30" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "22360:3:62", + "nodeType": "YulIdentifier", + "src": "22360:3:62" + }, + "nativeSrc": "22360:7:62", + "nodeType": "YulFunctionCall", + "src": "22360:7:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22325:3:62", + "nodeType": "YulIdentifier", + "src": "22325:3:62" + }, + "nativeSrc": "22325:43:62", + "nodeType": "YulFunctionCall", + "src": "22325:43:62" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "22301:3:62", + "nodeType": "YulIdentifier", + "src": "22301:3:62" + }, + "nativeSrc": "22301:68:62", + "nodeType": "YulFunctionCall", + "src": "22301:68:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "22294:6:62", + "nodeType": "YulIdentifier", + "src": "22294:6:62" + }, + "nativeSrc": "22294:76:62", + "nodeType": "YulFunctionCall", + "src": "22294:76:62" + }, + "nativeSrc": "22291:96:62", + "nodeType": "YulIf", + "src": "22291:96:62" + }, + { + "nativeSrc": "22396:47:62", + "nodeType": "YulVariableDeclaration", + "src": "22396:47:62", + "value": { + "arguments": [ + { + "name": "base_ref", + "nativeSrc": "22414:8:62", + "nodeType": "YulIdentifier", + "src": "22414:8:62" + }, + { + "name": "rel_offset_of_tail", + "nativeSrc": "22424:18:62", + "nodeType": "YulIdentifier", + "src": "22424:18:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22410:3:62", + "nodeType": "YulIdentifier", + "src": "22410:3:62" + }, + "nativeSrc": "22410:33:62", + "nodeType": "YulFunctionCall", + "src": "22410:33:62" + }, + "variables": [ + { + "name": "addr_1", + "nativeSrc": "22400:6:62", + "nodeType": "YulTypedName", + "src": "22400:6:62", + "type": "" + } + ] + }, + { + "nativeSrc": "22452:30:62", + "nodeType": "YulAssignment", + "src": "22452:30:62", + "value": { + "arguments": [ + { + "name": "addr_1", + "nativeSrc": "22475:6:62", + "nodeType": "YulIdentifier", + "src": "22475:6:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "22462:12:62", + "nodeType": "YulIdentifier", + "src": "22462:12:62" + }, + "nativeSrc": "22462:20:62", + "nodeType": "YulFunctionCall", + "src": "22462:20:62" + }, + "variableNames": [ + { + "name": "length", + "nativeSrc": "22452:6:62", + "nodeType": "YulIdentifier", + "src": "22452:6:62" + } + ] + }, + { + "body": { + "nativeSrc": "22525:16:62", + "nodeType": "YulBlock", + "src": "22525:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22534:1:62", + "nodeType": "YulLiteral", + "src": "22534:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "22537:1:62", + "nodeType": "YulLiteral", + "src": "22537:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "22527:6:62", + "nodeType": "YulIdentifier", + "src": "22527:6:62" + }, + "nativeSrc": "22527:12:62", + "nodeType": "YulFunctionCall", + "src": "22527:12:62" + }, + "nativeSrc": "22527:12:62", + "nodeType": "YulExpressionStatement", + "src": "22527:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nativeSrc": "22497:6:62", + "nodeType": "YulIdentifier", + "src": "22497:6:62" + }, + { + "kind": "number", + "nativeSrc": "22505:18:62", + "nodeType": "YulLiteral", + "src": "22505:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "22494:2:62", + "nodeType": "YulIdentifier", + "src": "22494:2:62" + }, + "nativeSrc": "22494:30:62", + "nodeType": "YulFunctionCall", + "src": "22494:30:62" + }, + "nativeSrc": "22491:50:62", + "nodeType": "YulIf", + "src": "22491:50:62" + }, + { + "nativeSrc": "22550:25:62", + "nodeType": "YulAssignment", + "src": "22550:25:62", + "value": { + "arguments": [ + { + "name": "addr_1", + "nativeSrc": "22562:6:62", + "nodeType": "YulIdentifier", + "src": "22562:6:62" + }, + { + "kind": "number", + "nativeSrc": "22570:4:62", + "nodeType": "YulLiteral", + "src": "22570:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22558:3:62", + "nodeType": "YulIdentifier", + "src": "22558:3:62" + }, + "nativeSrc": "22558:17:62", + "nodeType": "YulFunctionCall", + "src": "22558:17:62" + }, + "variableNames": [ + { + "name": "addr", + "nativeSrc": "22550:4:62", + "nodeType": "YulIdentifier", + "src": "22550:4:62" + } + ] + }, + { + "body": { + "nativeSrc": "22626:16:62", + "nodeType": "YulBlock", + "src": "22626:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "22635:1:62", + "nodeType": "YulLiteral", + "src": "22635:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "22638:1:62", + "nodeType": "YulLiteral", + "src": "22638:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "22628:6:62", + "nodeType": "YulIdentifier", + "src": "22628:6:62" + }, + "nativeSrc": "22628:12:62", + "nodeType": "YulFunctionCall", + "src": "22628:12:62" + }, + "nativeSrc": "22628:12:62", + "nodeType": "YulExpressionStatement", + "src": "22628:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "addr", + "nativeSrc": "22591:4:62", + "nodeType": "YulIdentifier", + "src": "22591:4:62" + }, + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "calldatasize", + "nativeSrc": "22601:12:62", + "nodeType": "YulIdentifier", + "src": "22601:12:62" + }, + "nativeSrc": "22601:14:62", + "nodeType": "YulFunctionCall", + "src": "22601:14:62" + }, + { + "name": "length", + "nativeSrc": "22617:6:62", + "nodeType": "YulIdentifier", + "src": "22617:6:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "22597:3:62", + "nodeType": "YulIdentifier", + "src": "22597:3:62" + }, + "nativeSrc": "22597:27:62", + "nodeType": "YulFunctionCall", + "src": "22597:27:62" + } + ], + "functionName": { + "name": "sgt", + "nativeSrc": "22587:3:62", + "nodeType": "YulIdentifier", + "src": "22587:3:62" + }, + "nativeSrc": "22587:38:62", + "nodeType": "YulFunctionCall", + "src": "22587:38:62" + }, + "nativeSrc": "22584:58:62", + "nodeType": "YulIf", + "src": "22584:58:62" + } + ] + }, + "name": "access_calldata_tail_t_bytes_calldata_ptr", + "nativeSrc": "22127:521:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "base_ref", + "nativeSrc": "22178:8:62", + "nodeType": "YulTypedName", + "src": "22178:8:62", + "type": "" + }, + { + "name": "ptr_to_tail", + "nativeSrc": "22188:11:62", + "nodeType": "YulTypedName", + "src": "22188:11:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "addr", + "nativeSrc": "22204:4:62", + "nodeType": "YulTypedName", + "src": "22204:4:62", + "type": "" + }, + { + "name": "length", + "nativeSrc": "22210:6:62", + "nodeType": "YulTypedName", + "src": "22210:6:62", + "type": "" + } + ], + "src": "22127:521:62" + }, + { + "body": { + "nativeSrc": "22846:247:62", + "nodeType": "YulBlock", + "src": "22846:247:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "22869:3:62", + "nodeType": "YulIdentifier", + "src": "22869:3:62" + }, + { + "name": "value0", + "nativeSrc": "22874:6:62", + "nodeType": "YulIdentifier", + "src": "22874:6:62" + }, + { + "name": "value1", + "nativeSrc": "22882:6:62", + "nodeType": "YulIdentifier", + "src": "22882:6:62" + } + ], + "functionName": { + "name": "calldatacopy", + "nativeSrc": "22856:12:62", + "nodeType": "YulIdentifier", + "src": "22856:12:62" + }, + "nativeSrc": "22856:33:62", + "nodeType": "YulFunctionCall", + "src": "22856:33:62" + }, + "nativeSrc": "22856:33:62", + "nodeType": "YulExpressionStatement", + "src": "22856:33:62" + }, + { + "nativeSrc": "22898:26:62", + "nodeType": "YulVariableDeclaration", + "src": "22898:26:62", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "22912:3:62", + "nodeType": "YulIdentifier", + "src": "22912:3:62" + }, + { + "name": "value1", + "nativeSrc": "22917:6:62", + "nodeType": "YulIdentifier", + "src": "22917:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "22908:3:62", + "nodeType": "YulIdentifier", + "src": "22908:3:62" + }, + "nativeSrc": "22908:16:62", + "nodeType": "YulFunctionCall", + "src": "22908:16:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "22902:2:62", + "nodeType": "YulTypedName", + "src": "22902:2:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "22940:2:62", + "nodeType": "YulIdentifier", + "src": "22940:2:62" + }, + { + "kind": "number", + "nativeSrc": "22944:1:62", + "nodeType": "YulLiteral", + "src": "22944:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "22933:6:62", + "nodeType": "YulIdentifier", + "src": "22933:6:62" + }, + "nativeSrc": "22933:13:62", + "nodeType": "YulFunctionCall", + "src": "22933:13:62" + }, + "nativeSrc": "22933:13:62", + "nodeType": "YulExpressionStatement", + "src": "22933:13:62" + }, + { + "nativeSrc": "22955:27:62", + "nodeType": "YulVariableDeclaration", + "src": "22955:27:62", + "value": { + "arguments": [ + { + "name": "value2", + "nativeSrc": "22975:6:62", + "nodeType": "YulIdentifier", + "src": "22975:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "22969:5:62", + "nodeType": "YulIdentifier", + "src": "22969:5:62" + }, + "nativeSrc": "22969:13:62", + "nodeType": "YulFunctionCall", + "src": "22969:13:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "22959:6:62", + "nodeType": "YulTypedName", + "src": "22959:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value2", + "nativeSrc": "23030:6:62", + "nodeType": "YulIdentifier", + "src": "23030:6:62" + }, + { + "kind": "number", + "nativeSrc": "23038:4:62", + "nodeType": "YulLiteral", + "src": "23038:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "23026:3:62", + "nodeType": "YulIdentifier", + "src": "23026:3:62" + }, + "nativeSrc": "23026:17:62", + "nodeType": "YulFunctionCall", + "src": "23026:17:62" + }, + { + "name": "_1", + "nativeSrc": "23045:2:62", + "nodeType": "YulIdentifier", + "src": "23045:2:62" + }, + { + "name": "length", + "nativeSrc": "23049:6:62", + "nodeType": "YulIdentifier", + "src": "23049:6:62" + } + ], + "functionName": { + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "22991:34:62", + "nodeType": "YulIdentifier", + "src": "22991:34:62" + }, + "nativeSrc": "22991:65:62", + "nodeType": "YulFunctionCall", + "src": "22991:65:62" + }, + "nativeSrc": "22991:65:62", + "nodeType": "YulExpressionStatement", + "src": "22991:65:62" + }, + { + "nativeSrc": "23065:22:62", + "nodeType": "YulAssignment", + "src": "23065:22:62", + "value": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "23076:2:62", + "nodeType": "YulIdentifier", + "src": "23076:2:62" + }, + { + "name": "length", + "nativeSrc": "23080:6:62", + "nodeType": "YulIdentifier", + "src": "23080:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "23072:3:62", + "nodeType": "YulIdentifier", + "src": "23072:3:62" + }, + "nativeSrc": "23072:15:62", + "nodeType": "YulFunctionCall", + "src": "23072:15:62" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "23065:3:62", + "nodeType": "YulIdentifier", + "src": "23065:3:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_calldata_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "22653:440:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "22806:3:62", + "nodeType": "YulTypedName", + "src": "22806:3:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "22811:6:62", + "nodeType": "YulTypedName", + "src": "22811:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "22819:6:62", + "nodeType": "YulTypedName", + "src": "22819:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "22827:6:62", + "nodeType": "YulTypedName", + "src": "22827:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "22838:3:62", + "nodeType": "YulTypedName", + "src": "22838:3:62", + "type": "" + } + ], + "src": "22653:440:62" + }, + { + "body": { + "nativeSrc": "23130:95:62", + "nodeType": "YulBlock", + "src": "23130:95:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23147:1:62", + "nodeType": "YulLiteral", + "src": "23147:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23154:3:62", + "nodeType": "YulLiteral", + "src": "23154:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "23159:10:62", + "nodeType": "YulLiteral", + "src": "23159:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "23150:3:62", + "nodeType": "YulIdentifier", + "src": "23150:3:62" + }, + "nativeSrc": "23150:20:62", + "nodeType": "YulFunctionCall", + "src": "23150:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "23140:6:62", + "nodeType": "YulIdentifier", + "src": "23140:6:62" + }, + "nativeSrc": "23140:31:62", + "nodeType": "YulFunctionCall", + "src": "23140:31:62" + }, + "nativeSrc": "23140:31:62", + "nodeType": "YulExpressionStatement", + "src": "23140:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23187:1:62", + "nodeType": "YulLiteral", + "src": "23187:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "23190:4:62", + "nodeType": "YulLiteral", + "src": "23190:4:62", + "type": "", + "value": "0x21" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "23180:6:62", + "nodeType": "YulIdentifier", + "src": "23180:6:62" + }, + "nativeSrc": "23180:15:62", + "nodeType": "YulFunctionCall", + "src": "23180:15:62" + }, + "nativeSrc": "23180:15:62", + "nodeType": "YulExpressionStatement", + "src": "23180:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23211:1:62", + "nodeType": "YulLiteral", + "src": "23211:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "23214:4:62", + "nodeType": "YulLiteral", + "src": "23214:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "23204:6:62", + "nodeType": "YulIdentifier", + "src": "23204:6:62" + }, + "nativeSrc": "23204:15:62", + "nodeType": "YulFunctionCall", + "src": "23204:15:62" + }, + "nativeSrc": "23204:15:62", + "nodeType": "YulExpressionStatement", + "src": "23204:15:62" + } + ] + }, + "name": "panic_error_0x21", + "nativeSrc": "23098:127:62", + "nodeType": "YulFunctionDefinition", + "src": "23098:127:62" + }, + { + "body": { + "nativeSrc": "23274:85:62", + "nodeType": "YulBlock", + "src": "23274:85:62", + "statements": [ + { + "body": { + "nativeSrc": "23337:16:62", + "nodeType": "YulBlock", + "src": "23337:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23346:1:62", + "nodeType": "YulLiteral", + "src": "23346:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "23349:1:62", + "nodeType": "YulLiteral", + "src": "23349:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "23339:6:62", + "nodeType": "YulIdentifier", + "src": "23339:6:62" + }, + "nativeSrc": "23339:12:62", + "nodeType": "YulFunctionCall", + "src": "23339:12:62" + }, + "nativeSrc": "23339:12:62", + "nodeType": "YulExpressionStatement", + "src": "23339:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "23297:5:62", + "nodeType": "YulIdentifier", + "src": "23297:5:62" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "23308:5:62", + "nodeType": "YulIdentifier", + "src": "23308:5:62" + }, + { + "kind": "number", + "nativeSrc": "23315:18:62", + "nodeType": "YulLiteral", + "src": "23315:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "23304:3:62", + "nodeType": "YulIdentifier", + "src": "23304:3:62" + }, + "nativeSrc": "23304:30:62", + "nodeType": "YulFunctionCall", + "src": "23304:30:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "23294:2:62", + "nodeType": "YulIdentifier", + "src": "23294:2:62" + }, + "nativeSrc": "23294:41:62", + "nodeType": "YulFunctionCall", + "src": "23294:41:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "23287:6:62", + "nodeType": "YulIdentifier", + "src": "23287:6:62" + }, + "nativeSrc": "23287:49:62", + "nodeType": "YulFunctionCall", + "src": "23287:49:62" + }, + "nativeSrc": "23284:69:62", + "nodeType": "YulIf", + "src": "23284:69:62" + } + ] + }, + "name": "validator_revert_uint64", + "nativeSrc": "23230:129:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "23263:5:62", + "nodeType": "YulTypedName", + "src": "23263:5:62", + "type": "" + } + ], + "src": "23230:129:62" + }, + { + "body": { + "nativeSrc": "23461:1544:62", + "nodeType": "YulBlock", + "src": "23461:1544:62", + "statements": [ + { + "body": { + "nativeSrc": "23507:16:62", + "nodeType": "YulBlock", + "src": "23507:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23516:1:62", + "nodeType": "YulLiteral", + "src": "23516:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "23519:1:62", + "nodeType": "YulLiteral", + "src": "23519:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "23509:6:62", + "nodeType": "YulIdentifier", + "src": "23509:6:62" + }, + "nativeSrc": "23509:12:62", + "nodeType": "YulFunctionCall", + "src": "23509:12:62" + }, + "nativeSrc": "23509:12:62", + "nodeType": "YulExpressionStatement", + "src": "23509:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "23482:7:62", + "nodeType": "YulIdentifier", + "src": "23482:7:62" + }, + { + "name": "headStart", + "nativeSrc": "23491:9:62", + "nodeType": "YulIdentifier", + "src": "23491:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "23478:3:62", + "nodeType": "YulIdentifier", + "src": "23478:3:62" + }, + "nativeSrc": "23478:23:62", + "nodeType": "YulFunctionCall", + "src": "23478:23:62" + }, + { + "kind": "number", + "nativeSrc": "23503:2:62", + "nodeType": "YulLiteral", + "src": "23503:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "23474:3:62", + "nodeType": "YulIdentifier", + "src": "23474:3:62" + }, + "nativeSrc": "23474:32:62", + "nodeType": "YulFunctionCall", + "src": "23474:32:62" + }, + "nativeSrc": "23471:52:62", + "nodeType": "YulIf", + "src": "23471:52:62" + }, + { + "nativeSrc": "23532:37:62", + "nodeType": "YulVariableDeclaration", + "src": "23532:37:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "23559:9:62", + "nodeType": "YulIdentifier", + "src": "23559:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "23546:12:62", + "nodeType": "YulIdentifier", + "src": "23546:12:62" + }, + "nativeSrc": "23546:23:62", + "nodeType": "YulFunctionCall", + "src": "23546:23:62" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "23536:6:62", + "nodeType": "YulTypedName", + "src": "23536:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "23612:16:62", + "nodeType": "YulBlock", + "src": "23612:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23621:1:62", + "nodeType": "YulLiteral", + "src": "23621:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "23624:1:62", + "nodeType": "YulLiteral", + "src": "23624:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "23614:6:62", + "nodeType": "YulIdentifier", + "src": "23614:6:62" + }, + "nativeSrc": "23614:12:62", + "nodeType": "YulFunctionCall", + "src": "23614:12:62" + }, + "nativeSrc": "23614:12:62", + "nodeType": "YulExpressionStatement", + "src": "23614:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "23584:6:62", + "nodeType": "YulIdentifier", + "src": "23584:6:62" + }, + { + "kind": "number", + "nativeSrc": "23592:18:62", + "nodeType": "YulLiteral", + "src": "23592:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "23581:2:62", + "nodeType": "YulIdentifier", + "src": "23581:2:62" + }, + "nativeSrc": "23581:30:62", + "nodeType": "YulFunctionCall", + "src": "23581:30:62" + }, + "nativeSrc": "23578:50:62", + "nodeType": "YulIf", + "src": "23578:50:62" + }, + { + "nativeSrc": "23637:32:62", + "nodeType": "YulVariableDeclaration", + "src": "23637:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "23651:9:62", + "nodeType": "YulIdentifier", + "src": "23651:9:62" + }, + { + "name": "offset", + "nativeSrc": "23662:6:62", + "nodeType": "YulIdentifier", + "src": "23662:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "23647:3:62", + "nodeType": "YulIdentifier", + "src": "23647:3:62" + }, + "nativeSrc": "23647:22:62", + "nodeType": "YulFunctionCall", + "src": "23647:22:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "23641:2:62", + "nodeType": "YulTypedName", + "src": "23641:2:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "23709:16:62", + "nodeType": "YulBlock", + "src": "23709:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23718:1:62", + "nodeType": "YulLiteral", + "src": "23718:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "23721:1:62", + "nodeType": "YulLiteral", + "src": "23721:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "23711:6:62", + "nodeType": "YulIdentifier", + "src": "23711:6:62" + }, + "nativeSrc": "23711:12:62", + "nodeType": "YulFunctionCall", + "src": "23711:12:62" + }, + "nativeSrc": "23711:12:62", + "nodeType": "YulExpressionStatement", + "src": "23711:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "23689:7:62", + "nodeType": "YulIdentifier", + "src": "23689:7:62" + }, + { + "name": "_1", + "nativeSrc": "23698:2:62", + "nodeType": "YulIdentifier", + "src": "23698:2:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "23685:3:62", + "nodeType": "YulIdentifier", + "src": "23685:3:62" + }, + "nativeSrc": "23685:16:62", + "nodeType": "YulFunctionCall", + "src": "23685:16:62" + }, + { + "kind": "number", + "nativeSrc": "23703:4:62", + "nodeType": "YulLiteral", + "src": "23703:4:62", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "23681:3:62", + "nodeType": "YulIdentifier", + "src": "23681:3:62" + }, + "nativeSrc": "23681:27:62", + "nodeType": "YulFunctionCall", + "src": "23681:27:62" + }, + "nativeSrc": "23678:47:62", + "nodeType": "YulIf", + "src": "23678:47:62" + }, + { + "nativeSrc": "23734:35:62", + "nodeType": "YulVariableDeclaration", + "src": "23734:35:62", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_memory_4281", + "nativeSrc": "23747:20:62", + "nodeType": "YulIdentifier", + "src": "23747:20:62" + }, + "nativeSrc": "23747:22:62", + "nodeType": "YulFunctionCall", + "src": "23747:22:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "23738:5:62", + "nodeType": "YulTypedName", + "src": "23738:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "23778:32:62", + "nodeType": "YulVariableDeclaration", + "src": "23778:32:62", + "value": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "23807:2:62", + "nodeType": "YulIdentifier", + "src": "23807:2:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "23794:12:62", + "nodeType": "YulIdentifier", + "src": "23794:12:62" + }, + "nativeSrc": "23794:16:62", + "nodeType": "YulFunctionCall", + "src": "23794:16:62" + }, + "variables": [ + { + "name": "offset_1", + "nativeSrc": "23782:8:62", + "nodeType": "YulTypedName", + "src": "23782:8:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "23855:16:62", + "nodeType": "YulBlock", + "src": "23855:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23864:1:62", + "nodeType": "YulLiteral", + "src": "23864:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "23867:1:62", + "nodeType": "YulLiteral", + "src": "23867:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "23857:6:62", + "nodeType": "YulIdentifier", + "src": "23857:6:62" + }, + "nativeSrc": "23857:12:62", + "nodeType": "YulFunctionCall", + "src": "23857:12:62" + }, + "nativeSrc": "23857:12:62", + "nodeType": "YulExpressionStatement", + "src": "23857:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nativeSrc": "23825:8:62", + "nodeType": "YulIdentifier", + "src": "23825:8:62" + }, + { + "kind": "number", + "nativeSrc": "23835:18:62", + "nodeType": "YulLiteral", + "src": "23835:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "23822:2:62", + "nodeType": "YulIdentifier", + "src": "23822:2:62" + }, + "nativeSrc": "23822:32:62", + "nodeType": "YulFunctionCall", + "src": "23822:32:62" + }, + "nativeSrc": "23819:52:62", + "nodeType": "YulIf", + "src": "23819:52:62" + }, + { + "nativeSrc": "23880:27:62", + "nodeType": "YulVariableDeclaration", + "src": "23880:27:62", + "value": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "23894:2:62", + "nodeType": "YulIdentifier", + "src": "23894:2:62" + }, + { + "name": "offset_1", + "nativeSrc": "23898:8:62", + "nodeType": "YulIdentifier", + "src": "23898:8:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "23890:3:62", + "nodeType": "YulIdentifier", + "src": "23890:3:62" + }, + "nativeSrc": "23890:17:62", + "nodeType": "YulFunctionCall", + "src": "23890:17:62" + }, + "variables": [ + { + "name": "_2", + "nativeSrc": "23884:2:62", + "nodeType": "YulTypedName", + "src": "23884:2:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "23947:16:62", + "nodeType": "YulBlock", + "src": "23947:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "23956:1:62", + "nodeType": "YulLiteral", + "src": "23956:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "23959:1:62", + "nodeType": "YulLiteral", + "src": "23959:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "23949:6:62", + "nodeType": "YulIdentifier", + "src": "23949:6:62" + }, + "nativeSrc": "23949:12:62", + "nodeType": "YulFunctionCall", + "src": "23949:12:62" + }, + "nativeSrc": "23949:12:62", + "nodeType": "YulExpressionStatement", + "src": "23949:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "23927:7:62", + "nodeType": "YulIdentifier", + "src": "23927:7:62" + }, + { + "name": "_2", + "nativeSrc": "23936:2:62", + "nodeType": "YulIdentifier", + "src": "23936:2:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "23923:3:62", + "nodeType": "YulIdentifier", + "src": "23923:3:62" + }, + "nativeSrc": "23923:16:62", + "nodeType": "YulFunctionCall", + "src": "23923:16:62" + }, + { + "kind": "number", + "nativeSrc": "23941:4:62", + "nodeType": "YulLiteral", + "src": "23941:4:62", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "23919:3:62", + "nodeType": "YulIdentifier", + "src": "23919:3:62" + }, + "nativeSrc": "23919:27:62", + "nodeType": "YulFunctionCall", + "src": "23919:27:62" + }, + "nativeSrc": "23916:47:62", + "nodeType": "YulIf", + "src": "23916:47:62" + }, + { + "nativeSrc": "23972:32:62", + "nodeType": "YulVariableDeclaration", + "src": "23972:32:62", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_memory", + "nativeSrc": "23987:15:62", + "nodeType": "YulIdentifier", + "src": "23987:15:62" + }, + "nativeSrc": "23987:17:62", + "nodeType": "YulFunctionCall", + "src": "23987:17:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "23976:7:62", + "nodeType": "YulTypedName", + "src": "23976:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "24013:31:62", + "nodeType": "YulVariableDeclaration", + "src": "24013:31:62", + "value": { + "arguments": [ + { + "name": "_2", + "nativeSrc": "24041:2:62", + "nodeType": "YulIdentifier", + "src": "24041:2:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "24028:12:62", + "nodeType": "YulIdentifier", + "src": "24028:12:62" + }, + "nativeSrc": "24028:16:62", + "nodeType": "YulFunctionCall", + "src": "24028:16:62" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "24017:7:62", + "nodeType": "YulTypedName", + "src": "24017:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_2", + "nativeSrc": "24078:7:62", + "nodeType": "YulIdentifier", + "src": "24078:7:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "24053:24:62", + "nodeType": "YulIdentifier", + "src": "24053:24:62" + }, + "nativeSrc": "24053:33:62", + "nodeType": "YulFunctionCall", + "src": "24053:33:62" + }, + "nativeSrc": "24053:33:62", + "nodeType": "YulExpressionStatement", + "src": "24053:33:62" + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "24102:7:62", + "nodeType": "YulIdentifier", + "src": "24102:7:62" + }, + { + "name": "value_2", + "nativeSrc": "24111:7:62", + "nodeType": "YulIdentifier", + "src": "24111:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "24095:6:62", + "nodeType": "YulIdentifier", + "src": "24095:6:62" + }, + "nativeSrc": "24095:24:62", + "nodeType": "YulFunctionCall", + "src": "24095:24:62" + }, + "nativeSrc": "24095:24:62", + "nodeType": "YulExpressionStatement", + "src": "24095:24:62" + }, + { + "nativeSrc": "24128:40:62", + "nodeType": "YulVariableDeclaration", + "src": "24128:40:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nativeSrc": "24160:2:62", + "nodeType": "YulIdentifier", + "src": "24160:2:62" + }, + { + "kind": "number", + "nativeSrc": "24164:2:62", + "nodeType": "YulLiteral", + "src": "24164:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24156:3:62", + "nodeType": "YulIdentifier", + "src": "24156:3:62" + }, + "nativeSrc": "24156:11:62", + "nodeType": "YulFunctionCall", + "src": "24156:11:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "24143:12:62", + "nodeType": "YulIdentifier", + "src": "24143:12:62" + }, + "nativeSrc": "24143:25:62", + "nodeType": "YulFunctionCall", + "src": "24143:25:62" + }, + "variables": [ + { + "name": "value_3", + "nativeSrc": "24132:7:62", + "nodeType": "YulTypedName", + "src": "24132:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_3", + "nativeSrc": "24202:7:62", + "nodeType": "YulIdentifier", + "src": "24202:7:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "24177:24:62", + "nodeType": "YulIdentifier", + "src": "24177:24:62" + }, + "nativeSrc": "24177:33:62", + "nodeType": "YulFunctionCall", + "src": "24177:33:62" + }, + "nativeSrc": "24177:33:62", + "nodeType": "YulExpressionStatement", + "src": "24177:33:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "24230:7:62", + "nodeType": "YulIdentifier", + "src": "24230:7:62" + }, + { + "kind": "number", + "nativeSrc": "24239:2:62", + "nodeType": "YulLiteral", + "src": "24239:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24226:3:62", + "nodeType": "YulIdentifier", + "src": "24226:3:62" + }, + "nativeSrc": "24226:16:62", + "nodeType": "YulFunctionCall", + "src": "24226:16:62" + }, + { + "name": "value_3", + "nativeSrc": "24244:7:62", + "nodeType": "YulIdentifier", + "src": "24244:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "24219:6:62", + "nodeType": "YulIdentifier", + "src": "24219:6:62" + }, + "nativeSrc": "24219:33:62", + "nodeType": "YulFunctionCall", + "src": "24219:33:62" + }, + "nativeSrc": "24219:33:62", + "nodeType": "YulExpressionStatement", + "src": "24219:33:62" + }, + { + "nativeSrc": "24261:42:62", + "nodeType": "YulVariableDeclaration", + "src": "24261:42:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nativeSrc": "24293:2:62", + "nodeType": "YulIdentifier", + "src": "24293:2:62" + }, + { + "kind": "number", + "nativeSrc": "24297:4:62", + "nodeType": "YulLiteral", + "src": "24297:4:62", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24289:3:62", + "nodeType": "YulIdentifier", + "src": "24289:3:62" + }, + "nativeSrc": "24289:13:62", + "nodeType": "YulFunctionCall", + "src": "24289:13:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "24276:12:62", + "nodeType": "YulIdentifier", + "src": "24276:12:62" + }, + "nativeSrc": "24276:27:62", + "nodeType": "YulFunctionCall", + "src": "24276:27:62" + }, + "variables": [ + { + "name": "value_4", + "nativeSrc": "24265:7:62", + "nodeType": "YulTypedName", + "src": "24265:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_4", + "nativeSrc": "24336:7:62", + "nodeType": "YulIdentifier", + "src": "24336:7:62" + } + ], + "functionName": { + "name": "validator_revert_uint64", + "nativeSrc": "24312:23:62", + "nodeType": "YulIdentifier", + "src": "24312:23:62" + }, + "nativeSrc": "24312:32:62", + "nodeType": "YulFunctionCall", + "src": "24312:32:62" + }, + "nativeSrc": "24312:32:62", + "nodeType": "YulExpressionStatement", + "src": "24312:32:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "24364:7:62", + "nodeType": "YulIdentifier", + "src": "24364:7:62" + }, + { + "kind": "number", + "nativeSrc": "24373:4:62", + "nodeType": "YulLiteral", + "src": "24373:4:62", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24360:3:62", + "nodeType": "YulIdentifier", + "src": "24360:3:62" + }, + "nativeSrc": "24360:18:62", + "nodeType": "YulFunctionCall", + "src": "24360:18:62" + }, + { + "name": "value_4", + "nativeSrc": "24380:7:62", + "nodeType": "YulIdentifier", + "src": "24380:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "24353:6:62", + "nodeType": "YulIdentifier", + "src": "24353:6:62" + }, + "nativeSrc": "24353:35:62", + "nodeType": "YulFunctionCall", + "src": "24353:35:62" + }, + "nativeSrc": "24353:35:62", + "nodeType": "YulExpressionStatement", + "src": "24353:35:62" + }, + { + "nativeSrc": "24397:40:62", + "nodeType": "YulVariableDeclaration", + "src": "24397:40:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nativeSrc": "24429:2:62", + "nodeType": "YulIdentifier", + "src": "24429:2:62" + }, + { + "kind": "number", + "nativeSrc": "24433:2:62", + "nodeType": "YulLiteral", + "src": "24433:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24425:3:62", + "nodeType": "YulIdentifier", + "src": "24425:3:62" + }, + "nativeSrc": "24425:11:62", + "nodeType": "YulFunctionCall", + "src": "24425:11:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "24412:12:62", + "nodeType": "YulIdentifier", + "src": "24412:12:62" + }, + "nativeSrc": "24412:25:62", + "nodeType": "YulFunctionCall", + "src": "24412:25:62" + }, + "variables": [ + { + "name": "value_5", + "nativeSrc": "24401:7:62", + "nodeType": "YulTypedName", + "src": "24401:7:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "24504:16:62", + "nodeType": "YulBlock", + "src": "24504:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "24513:1:62", + "nodeType": "YulLiteral", + "src": "24513:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "24516:1:62", + "nodeType": "YulLiteral", + "src": "24516:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "24506:6:62", + "nodeType": "YulIdentifier", + "src": "24506:6:62" + }, + "nativeSrc": "24506:12:62", + "nodeType": "YulFunctionCall", + "src": "24506:12:62" + }, + "nativeSrc": "24506:12:62", + "nodeType": "YulExpressionStatement", + "src": "24506:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value_5", + "nativeSrc": "24459:7:62", + "nodeType": "YulIdentifier", + "src": "24459:7:62" + }, + { + "arguments": [ + { + "name": "value_5", + "nativeSrc": "24472:7:62", + "nodeType": "YulIdentifier", + "src": "24472:7:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "24489:3:62", + "nodeType": "YulLiteral", + "src": "24489:3:62", + "type": "", + "value": "128" + }, + { + "kind": "number", + "nativeSrc": "24494:1:62", + "nodeType": "YulLiteral", + "src": "24494:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "24485:3:62", + "nodeType": "YulIdentifier", + "src": "24485:3:62" + }, + "nativeSrc": "24485:11:62", + "nodeType": "YulFunctionCall", + "src": "24485:11:62" + }, + { + "kind": "number", + "nativeSrc": "24498:1:62", + "nodeType": "YulLiteral", + "src": "24498:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "24481:3:62", + "nodeType": "YulIdentifier", + "src": "24481:3:62" + }, + "nativeSrc": "24481:19:62", + "nodeType": "YulFunctionCall", + "src": "24481:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "24468:3:62", + "nodeType": "YulIdentifier", + "src": "24468:3:62" + }, + "nativeSrc": "24468:33:62", + "nodeType": "YulFunctionCall", + "src": "24468:33:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "24456:2:62", + "nodeType": "YulIdentifier", + "src": "24456:2:62" + }, + "nativeSrc": "24456:46:62", + "nodeType": "YulFunctionCall", + "src": "24456:46:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "24449:6:62", + "nodeType": "YulIdentifier", + "src": "24449:6:62" + }, + "nativeSrc": "24449:54:62", + "nodeType": "YulFunctionCall", + "src": "24449:54:62" + }, + "nativeSrc": "24446:74:62", + "nodeType": "YulIf", + "src": "24446:74:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "24540:7:62", + "nodeType": "YulIdentifier", + "src": "24540:7:62" + }, + { + "kind": "number", + "nativeSrc": "24549:2:62", + "nodeType": "YulLiteral", + "src": "24549:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24536:3:62", + "nodeType": "YulIdentifier", + "src": "24536:3:62" + }, + "nativeSrc": "24536:16:62", + "nodeType": "YulFunctionCall", + "src": "24536:16:62" + }, + { + "name": "value_5", + "nativeSrc": "24554:7:62", + "nodeType": "YulIdentifier", + "src": "24554:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "24529:6:62", + "nodeType": "YulIdentifier", + "src": "24529:6:62" + }, + "nativeSrc": "24529:33:62", + "nodeType": "YulFunctionCall", + "src": "24529:33:62" + }, + "nativeSrc": "24529:33:62", + "nodeType": "YulExpressionStatement", + "src": "24529:33:62" + }, + { + "nativeSrc": "24571:42:62", + "nodeType": "YulVariableDeclaration", + "src": "24571:42:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nativeSrc": "24604:2:62", + "nodeType": "YulIdentifier", + "src": "24604:2:62" + }, + { + "kind": "number", + "nativeSrc": "24608:3:62", + "nodeType": "YulLiteral", + "src": "24608:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24600:3:62", + "nodeType": "YulIdentifier", + "src": "24600:3:62" + }, + "nativeSrc": "24600:12:62", + "nodeType": "YulFunctionCall", + "src": "24600:12:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "24587:12:62", + "nodeType": "YulIdentifier", + "src": "24587:12:62" + }, + "nativeSrc": "24587:26:62", + "nodeType": "YulFunctionCall", + "src": "24587:26:62" + }, + "variables": [ + { + "name": "offset_2", + "nativeSrc": "24575:8:62", + "nodeType": "YulTypedName", + "src": "24575:8:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "24658:16:62", + "nodeType": "YulBlock", + "src": "24658:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "24667:1:62", + "nodeType": "YulLiteral", + "src": "24667:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "24670:1:62", + "nodeType": "YulLiteral", + "src": "24670:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "24660:6:62", + "nodeType": "YulIdentifier", + "src": "24660:6:62" + }, + "nativeSrc": "24660:12:62", + "nodeType": "YulFunctionCall", + "src": "24660:12:62" + }, + "nativeSrc": "24660:12:62", + "nodeType": "YulExpressionStatement", + "src": "24660:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nativeSrc": "24628:8:62", + "nodeType": "YulIdentifier", + "src": "24628:8:62" + }, + { + "kind": "number", + "nativeSrc": "24638:18:62", + "nodeType": "YulLiteral", + "src": "24638:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "24625:2:62", + "nodeType": "YulIdentifier", + "src": "24625:2:62" + }, + "nativeSrc": "24625:32:62", + "nodeType": "YulFunctionCall", + "src": "24625:32:62" + }, + "nativeSrc": "24622:52:62", + "nodeType": "YulIf", + "src": "24622:52:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "24694:7:62", + "nodeType": "YulIdentifier", + "src": "24694:7:62" + }, + { + "kind": "number", + "nativeSrc": "24703:3:62", + "nodeType": "YulLiteral", + "src": "24703:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24690:3:62", + "nodeType": "YulIdentifier", + "src": "24690:3:62" + }, + "nativeSrc": "24690:17:62", + "nodeType": "YulFunctionCall", + "src": "24690:17:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nativeSrc": "24731:2:62", + "nodeType": "YulIdentifier", + "src": "24731:2:62" + }, + { + "name": "offset_2", + "nativeSrc": "24735:8:62", + "nodeType": "YulIdentifier", + "src": "24735:8:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24727:3:62", + "nodeType": "YulIdentifier", + "src": "24727:3:62" + }, + "nativeSrc": "24727:17:62", + "nodeType": "YulFunctionCall", + "src": "24727:17:62" + }, + { + "name": "dataEnd", + "nativeSrc": "24746:7:62", + "nodeType": "YulIdentifier", + "src": "24746:7:62" + } + ], + "functionName": { + "name": "abi_decode_string", + "nativeSrc": "24709:17:62", + "nodeType": "YulIdentifier", + "src": "24709:17:62" + }, + "nativeSrc": "24709:45:62", + "nodeType": "YulFunctionCall", + "src": "24709:45:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "24683:6:62", + "nodeType": "YulIdentifier", + "src": "24683:6:62" + }, + "nativeSrc": "24683:72:62", + "nodeType": "YulFunctionCall", + "src": "24683:72:62" + }, + "nativeSrc": "24683:72:62", + "nodeType": "YulExpressionStatement", + "src": "24683:72:62" + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "24771:5:62", + "nodeType": "YulIdentifier", + "src": "24771:5:62" + }, + { + "name": "value_1", + "nativeSrc": "24778:7:62", + "nodeType": "YulIdentifier", + "src": "24778:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "24764:6:62", + "nodeType": "YulIdentifier", + "src": "24764:6:62" + }, + "nativeSrc": "24764:22:62", + "nodeType": "YulFunctionCall", + "src": "24764:22:62" + }, + "nativeSrc": "24764:22:62", + "nodeType": "YulExpressionStatement", + "src": "24764:22:62" + }, + { + "nativeSrc": "24795:41:62", + "nodeType": "YulVariableDeclaration", + "src": "24795:41:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "24828:2:62", + "nodeType": "YulIdentifier", + "src": "24828:2:62" + }, + { + "kind": "number", + "nativeSrc": "24832:2:62", + "nodeType": "YulLiteral", + "src": "24832:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24824:3:62", + "nodeType": "YulIdentifier", + "src": "24824:3:62" + }, + "nativeSrc": "24824:11:62", + "nodeType": "YulFunctionCall", + "src": "24824:11:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "24811:12:62", + "nodeType": "YulIdentifier", + "src": "24811:12:62" + }, + "nativeSrc": "24811:25:62", + "nodeType": "YulFunctionCall", + "src": "24811:25:62" + }, + "variables": [ + { + "name": "offset_3", + "nativeSrc": "24799:8:62", + "nodeType": "YulTypedName", + "src": "24799:8:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "24881:16:62", + "nodeType": "YulBlock", + "src": "24881:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "24890:1:62", + "nodeType": "YulLiteral", + "src": "24890:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "24893:1:62", + "nodeType": "YulLiteral", + "src": "24893:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "24883:6:62", + "nodeType": "YulIdentifier", + "src": "24883:6:62" + }, + "nativeSrc": "24883:12:62", + "nodeType": "YulFunctionCall", + "src": "24883:12:62" + }, + "nativeSrc": "24883:12:62", + "nodeType": "YulExpressionStatement", + "src": "24883:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_3", + "nativeSrc": "24851:8:62", + "nodeType": "YulIdentifier", + "src": "24851:8:62" + }, + { + "kind": "number", + "nativeSrc": "24861:18:62", + "nodeType": "YulLiteral", + "src": "24861:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "24848:2:62", + "nodeType": "YulIdentifier", + "src": "24848:2:62" + }, + "nativeSrc": "24848:32:62", + "nodeType": "YulFunctionCall", + "src": "24848:32:62" + }, + "nativeSrc": "24845:52:62", + "nodeType": "YulIf", + "src": "24845:52:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "24917:5:62", + "nodeType": "YulIdentifier", + "src": "24917:5:62" + }, + { + "kind": "number", + "nativeSrc": "24924:2:62", + "nodeType": "YulLiteral", + "src": "24924:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24913:3:62", + "nodeType": "YulIdentifier", + "src": "24913:3:62" + }, + "nativeSrc": "24913:14:62", + "nodeType": "YulFunctionCall", + "src": "24913:14:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "24951:2:62", + "nodeType": "YulIdentifier", + "src": "24951:2:62" + }, + { + "name": "offset_3", + "nativeSrc": "24955:8:62", + "nodeType": "YulIdentifier", + "src": "24955:8:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "24947:3:62", + "nodeType": "YulIdentifier", + "src": "24947:3:62" + }, + "nativeSrc": "24947:17:62", + "nodeType": "YulFunctionCall", + "src": "24947:17:62" + }, + { + "name": "dataEnd", + "nativeSrc": "24966:7:62", + "nodeType": "YulIdentifier", + "src": "24966:7:62" + } + ], + "functionName": { + "name": "abi_decode_string", + "nativeSrc": "24929:17:62", + "nodeType": "YulIdentifier", + "src": "24929:17:62" + }, + "nativeSrc": "24929:45:62", + "nodeType": "YulFunctionCall", + "src": "24929:45:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "24906:6:62", + "nodeType": "YulIdentifier", + "src": "24906:6:62" + }, + "nativeSrc": "24906:69:62", + "nodeType": "YulFunctionCall", + "src": "24906:69:62" + }, + "nativeSrc": "24906:69:62", + "nodeType": "YulExpressionStatement", + "src": "24906:69:62" + }, + { + "nativeSrc": "24984:15:62", + "nodeType": "YulAssignment", + "src": "24984:15:62", + "value": { + "name": "value", + "nativeSrc": "24994:5:62", + "nodeType": "YulIdentifier", + "src": "24994:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "24984:6:62", + "nodeType": "YulIdentifier", + "src": "24984:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_SignedRAV_$2546_memory_ptr", + "nativeSrc": "23364:1641:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "23427:9:62", + "nodeType": "YulTypedName", + "src": "23427:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "23438:7:62", + "nodeType": "YulTypedName", + "src": "23438:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "23450:6:62", + "nodeType": "YulTypedName", + "src": "23450:6:62", + "type": "" + } + ], + "src": "23364:1641:62" + }, + { + "body": { + "nativeSrc": "25105:280:62", + "nodeType": "YulBlock", + "src": "25105:280:62", + "statements": [ + { + "body": { + "nativeSrc": "25151:16:62", + "nodeType": "YulBlock", + "src": "25151:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "25160:1:62", + "nodeType": "YulLiteral", + "src": "25160:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "25163:1:62", + "nodeType": "YulLiteral", + "src": "25163:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "25153:6:62", + "nodeType": "YulIdentifier", + "src": "25153:6:62" + }, + "nativeSrc": "25153:12:62", + "nodeType": "YulFunctionCall", + "src": "25153:12:62" + }, + "nativeSrc": "25153:12:62", + "nodeType": "YulExpressionStatement", + "src": "25153:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "25126:7:62", + "nodeType": "YulIdentifier", + "src": "25126:7:62" + }, + { + "name": "headStart", + "nativeSrc": "25135:9:62", + "nodeType": "YulIdentifier", + "src": "25135:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "25122:3:62", + "nodeType": "YulIdentifier", + "src": "25122:3:62" + }, + "nativeSrc": "25122:23:62", + "nodeType": "YulFunctionCall", + "src": "25122:23:62" + }, + { + "kind": "number", + "nativeSrc": "25147:2:62", + "nodeType": "YulLiteral", + "src": "25147:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "25118:3:62", + "nodeType": "YulIdentifier", + "src": "25118:3:62" + }, + "nativeSrc": "25118:32:62", + "nodeType": "YulFunctionCall", + "src": "25118:32:62" + }, + "nativeSrc": "25115:52:62", + "nodeType": "YulIf", + "src": "25115:52:62" + }, + { + "nativeSrc": "25176:36:62", + "nodeType": "YulVariableDeclaration", + "src": "25176:36:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "25202:9:62", + "nodeType": "YulIdentifier", + "src": "25202:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "25189:12:62", + "nodeType": "YulIdentifier", + "src": "25189:12:62" + }, + "nativeSrc": "25189:23:62", + "nodeType": "YulFunctionCall", + "src": "25189:23:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "25180:5:62", + "nodeType": "YulTypedName", + "src": "25180:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "25246:5:62", + "nodeType": "YulIdentifier", + "src": "25246:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "25221:24:62", + "nodeType": "YulIdentifier", + "src": "25221:24:62" + }, + "nativeSrc": "25221:31:62", + "nodeType": "YulFunctionCall", + "src": "25221:31:62" + }, + "nativeSrc": "25221:31:62", + "nodeType": "YulExpressionStatement", + "src": "25221:31:62" + }, + { + "nativeSrc": "25261:15:62", + "nodeType": "YulAssignment", + "src": "25261:15:62", + "value": { + "name": "value", + "nativeSrc": "25271:5:62", + "nodeType": "YulIdentifier", + "src": "25271:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "25261:6:62", + "nodeType": "YulIdentifier", + "src": "25261:6:62" + } + ] + }, + { + "nativeSrc": "25285:16:62", + "nodeType": "YulVariableDeclaration", + "src": "25285:16:62", + "value": { + "kind": "number", + "nativeSrc": "25300:1:62", + "nodeType": "YulLiteral", + "src": "25300:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "25289:7:62", + "nodeType": "YulTypedName", + "src": "25289:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "25310:43:62", + "nodeType": "YulAssignment", + "src": "25310:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "25338:9:62", + "nodeType": "YulIdentifier", + "src": "25338:9:62" + }, + { + "kind": "number", + "nativeSrc": "25349:2:62", + "nodeType": "YulLiteral", + "src": "25349:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "25334:3:62", + "nodeType": "YulIdentifier", + "src": "25334:3:62" + }, + "nativeSrc": "25334:18:62", + "nodeType": "YulFunctionCall", + "src": "25334:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "25321:12:62", + "nodeType": "YulIdentifier", + "src": "25321:12:62" + }, + "nativeSrc": "25321:32:62", + "nodeType": "YulFunctionCall", + "src": "25321:32:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "25310:7:62", + "nodeType": "YulIdentifier", + "src": "25310:7:62" + } + ] + }, + { + "nativeSrc": "25362:17:62", + "nodeType": "YulAssignment", + "src": "25362:17:62", + "value": { + "name": "value_1", + "nativeSrc": "25372:7:62", + "nodeType": "YulIdentifier", + "src": "25372:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "25362:6:62", + "nodeType": "YulIdentifier", + "src": "25362:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address_payablet_bytes32", + "nativeSrc": "25010:375:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "25063:9:62", + "nodeType": "YulTypedName", + "src": "25063:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "25074:7:62", + "nodeType": "YulTypedName", + "src": "25074:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "25086:6:62", + "nodeType": "YulTypedName", + "src": "25086:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "25094:6:62", + "nodeType": "YulTypedName", + "src": "25094:6:62", + "type": "" + } + ], + "src": "25010:375:62" + }, + { + "body": { + "nativeSrc": "25444:186:62", + "nodeType": "YulBlock", + "src": "25444:186:62", + "statements": [ + { + "body": { + "nativeSrc": "25486:111:62", + "nodeType": "YulBlock", + "src": "25486:111:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "25507:1:62", + "nodeType": "YulLiteral", + "src": "25507:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "25514:3:62", + "nodeType": "YulLiteral", + "src": "25514:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "25519:10:62", + "nodeType": "YulLiteral", + "src": "25519:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "25510:3:62", + "nodeType": "YulIdentifier", + "src": "25510:3:62" + }, + "nativeSrc": "25510:20:62", + "nodeType": "YulFunctionCall", + "src": "25510:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "25500:6:62", + "nodeType": "YulIdentifier", + "src": "25500:6:62" + }, + "nativeSrc": "25500:31:62", + "nodeType": "YulFunctionCall", + "src": "25500:31:62" + }, + "nativeSrc": "25500:31:62", + "nodeType": "YulExpressionStatement", + "src": "25500:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "25551:1:62", + "nodeType": "YulLiteral", + "src": "25551:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "25554:4:62", + "nodeType": "YulLiteral", + "src": "25554:4:62", + "type": "", + "value": "0x21" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "25544:6:62", + "nodeType": "YulIdentifier", + "src": "25544:6:62" + }, + "nativeSrc": "25544:15:62", + "nodeType": "YulFunctionCall", + "src": "25544:15:62" + }, + "nativeSrc": "25544:15:62", + "nodeType": "YulExpressionStatement", + "src": "25544:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "25579:1:62", + "nodeType": "YulLiteral", + "src": "25579:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "25582:4:62", + "nodeType": "YulLiteral", + "src": "25582:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "25572:6:62", + "nodeType": "YulIdentifier", + "src": "25572:6:62" + }, + "nativeSrc": "25572:15:62", + "nodeType": "YulFunctionCall", + "src": "25572:15:62" + }, + "nativeSrc": "25572:15:62", + "nodeType": "YulExpressionStatement", + "src": "25572:15:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "25467:5:62", + "nodeType": "YulIdentifier", + "src": "25467:5:62" + }, + { + "kind": "number", + "nativeSrc": "25474:1:62", + "nodeType": "YulLiteral", + "src": "25474:1:62", + "type": "", + "value": "3" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "25464:2:62", + "nodeType": "YulIdentifier", + "src": "25464:2:62" + }, + "nativeSrc": "25464:12:62", + "nodeType": "YulFunctionCall", + "src": "25464:12:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "25457:6:62", + "nodeType": "YulIdentifier", + "src": "25457:6:62" + }, + "nativeSrc": "25457:20:62", + "nodeType": "YulFunctionCall", + "src": "25457:20:62" + }, + "nativeSrc": "25454:143:62", + "nodeType": "YulIf", + "src": "25454:143:62" + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "25613:3:62", + "nodeType": "YulIdentifier", + "src": "25613:3:62" + }, + { + "name": "value", + "nativeSrc": "25618:5:62", + "nodeType": "YulIdentifier", + "src": "25618:5:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "25606:6:62", + "nodeType": "YulIdentifier", + "src": "25606:6:62" + }, + "nativeSrc": "25606:18:62", + "nodeType": "YulFunctionCall", + "src": "25606:18:62" + }, + "nativeSrc": "25606:18:62", + "nodeType": "YulExpressionStatement", + "src": "25606:18:62" + } + ] + }, + "name": "abi_encode_enum_PaymentTypes", + "nativeSrc": "25390:240:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "25428:5:62", + "nodeType": "YulTypedName", + "src": "25428:5:62", + "type": "" + }, + { + "name": "pos", + "nativeSrc": "25435:3:62", + "nodeType": "YulTypedName", + "src": "25435:3:62", + "type": "" + } + ], + "src": "25390:240:62" + }, + { + "body": { + "nativeSrc": "25751:98:62", + "nodeType": "YulBlock", + "src": "25751:98:62", + "statements": [ + { + "nativeSrc": "25761:26:62", + "nodeType": "YulAssignment", + "src": "25761:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "25773:9:62", + "nodeType": "YulIdentifier", + "src": "25773:9:62" + }, + { + "kind": "number", + "nativeSrc": "25784:2:62", + "nodeType": "YulLiteral", + "src": "25784:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "25769:3:62", + "nodeType": "YulIdentifier", + "src": "25769:3:62" + }, + "nativeSrc": "25769:18:62", + "nodeType": "YulFunctionCall", + "src": "25769:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "25761:4:62", + "nodeType": "YulIdentifier", + "src": "25761:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "25825:6:62", + "nodeType": "YulIdentifier", + "src": "25825:6:62" + }, + { + "name": "headStart", + "nativeSrc": "25833:9:62", + "nodeType": "YulIdentifier", + "src": "25833:9:62" + } + ], + "functionName": { + "name": "abi_encode_enum_PaymentTypes", + "nativeSrc": "25796:28:62", + "nodeType": "YulIdentifier", + "src": "25796:28:62" + }, + "nativeSrc": "25796:47:62", + "nodeType": "YulFunctionCall", + "src": "25796:47:62" + }, + "nativeSrc": "25796:47:62", + "nodeType": "YulExpressionStatement", + "src": "25796:47:62" + } + ] + }, + "name": "abi_encode_tuple_t_enum$_PaymentTypes_$2166__to_t_uint8__fromStack_reversed", + "nativeSrc": "25635:214:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "25720:9:62", + "nodeType": "YulTypedName", + "src": "25720:9:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "25731:6:62", + "nodeType": "YulTypedName", + "src": "25731:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "25742:4:62", + "nodeType": "YulTypedName", + "src": "25742:4:62", + "type": "" + } + ], + "src": "25635:214:62" + }, + { + "body": { + "nativeSrc": "25941:259:62", + "nodeType": "YulBlock", + "src": "25941:259:62", + "statements": [ + { + "body": { + "nativeSrc": "25987:16:62", + "nodeType": "YulBlock", + "src": "25987:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "25996:1:62", + "nodeType": "YulLiteral", + "src": "25996:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "25999:1:62", + "nodeType": "YulLiteral", + "src": "25999:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "25989:6:62", + "nodeType": "YulIdentifier", + "src": "25989:6:62" + }, + "nativeSrc": "25989:12:62", + "nodeType": "YulFunctionCall", + "src": "25989:12:62" + }, + "nativeSrc": "25989:12:62", + "nodeType": "YulExpressionStatement", + "src": "25989:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "25962:7:62", + "nodeType": "YulIdentifier", + "src": "25962:7:62" + }, + { + "name": "headStart", + "nativeSrc": "25971:9:62", + "nodeType": "YulIdentifier", + "src": "25971:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "25958:3:62", + "nodeType": "YulIdentifier", + "src": "25958:3:62" + }, + "nativeSrc": "25958:23:62", + "nodeType": "YulFunctionCall", + "src": "25958:23:62" + }, + { + "kind": "number", + "nativeSrc": "25983:2:62", + "nodeType": "YulLiteral", + "src": "25983:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "25954:3:62", + "nodeType": "YulIdentifier", + "src": "25954:3:62" + }, + "nativeSrc": "25954:32:62", + "nodeType": "YulFunctionCall", + "src": "25954:32:62" + }, + "nativeSrc": "25951:52:62", + "nodeType": "YulIf", + "src": "25951:52:62" + }, + { + "nativeSrc": "26012:14:62", + "nodeType": "YulVariableDeclaration", + "src": "26012:14:62", + "value": { + "kind": "number", + "nativeSrc": "26025:1:62", + "nodeType": "YulLiteral", + "src": "26025:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "26016:5:62", + "nodeType": "YulTypedName", + "src": "26016:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "26035:32:62", + "nodeType": "YulAssignment", + "src": "26035:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "26057:9:62", + "nodeType": "YulIdentifier", + "src": "26057:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "26044:12:62", + "nodeType": "YulIdentifier", + "src": "26044:12:62" + }, + "nativeSrc": "26044:23:62", + "nodeType": "YulFunctionCall", + "src": "26044:23:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "26035:5:62", + "nodeType": "YulIdentifier", + "src": "26035:5:62" + } + ] + }, + { + "nativeSrc": "26076:15:62", + "nodeType": "YulAssignment", + "src": "26076:15:62", + "value": { + "name": "value", + "nativeSrc": "26086:5:62", + "nodeType": "YulIdentifier", + "src": "26086:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "26076:6:62", + "nodeType": "YulIdentifier", + "src": "26076:6:62" + } + ] + }, + { + "nativeSrc": "26100:16:62", + "nodeType": "YulVariableDeclaration", + "src": "26100:16:62", + "value": { + "kind": "number", + "nativeSrc": "26115:1:62", + "nodeType": "YulLiteral", + "src": "26115:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "26104:7:62", + "nodeType": "YulTypedName", + "src": "26104:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "26125:43:62", + "nodeType": "YulAssignment", + "src": "26125:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "26153:9:62", + "nodeType": "YulIdentifier", + "src": "26153:9:62" + }, + { + "kind": "number", + "nativeSrc": "26164:2:62", + "nodeType": "YulLiteral", + "src": "26164:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "26149:3:62", + "nodeType": "YulIdentifier", + "src": "26149:3:62" + }, + "nativeSrc": "26149:18:62", + "nodeType": "YulFunctionCall", + "src": "26149:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "26136:12:62", + "nodeType": "YulIdentifier", + "src": "26136:12:62" + }, + "nativeSrc": "26136:32:62", + "nodeType": "YulFunctionCall", + "src": "26136:32:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "26125:7:62", + "nodeType": "YulIdentifier", + "src": "26125:7:62" + } + ] + }, + { + "nativeSrc": "26177:17:62", + "nodeType": "YulAssignment", + "src": "26177:17:62", + "value": { + "name": "value_1", + "nativeSrc": "26187:7:62", + "nodeType": "YulIdentifier", + "src": "26187:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "26177:6:62", + "nodeType": "YulIdentifier", + "src": "26177:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint256", + "nativeSrc": "25854:346:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "25899:9:62", + "nodeType": "YulTypedName", + "src": "25899:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "25910:7:62", + "nodeType": "YulTypedName", + "src": "25910:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "25922:6:62", + "nodeType": "YulTypedName", + "src": "25922:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "25930:6:62", + "nodeType": "YulTypedName", + "src": "25930:6:62", + "type": "" + } + ], + "src": "25854:346:62" + }, + { + "body": { + "nativeSrc": "26390:258:62", + "nodeType": "YulBlock", + "src": "26390:258:62", + "statements": [ + { + "nativeSrc": "26400:27:62", + "nodeType": "YulAssignment", + "src": "26400:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "26412:9:62", + "nodeType": "YulIdentifier", + "src": "26412:9:62" + }, + { + "kind": "number", + "nativeSrc": "26423:3:62", + "nodeType": "YulLiteral", + "src": "26423:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "26408:3:62", + "nodeType": "YulIdentifier", + "src": "26408:3:62" + }, + "nativeSrc": "26408:19:62", + "nodeType": "YulFunctionCall", + "src": "26408:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "26400:4:62", + "nodeType": "YulIdentifier", + "src": "26400:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "26443:9:62", + "nodeType": "YulIdentifier", + "src": "26443:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "26458:6:62", + "nodeType": "YulIdentifier", + "src": "26458:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "26474:3:62", + "nodeType": "YulLiteral", + "src": "26474:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "26479:1:62", + "nodeType": "YulLiteral", + "src": "26479:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "26470:3:62", + "nodeType": "YulIdentifier", + "src": "26470:3:62" + }, + "nativeSrc": "26470:11:62", + "nodeType": "YulFunctionCall", + "src": "26470:11:62" + }, + { + "kind": "number", + "nativeSrc": "26483:1:62", + "nodeType": "YulLiteral", + "src": "26483:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "26466:3:62", + "nodeType": "YulIdentifier", + "src": "26466:3:62" + }, + "nativeSrc": "26466:19:62", + "nodeType": "YulFunctionCall", + "src": "26466:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "26454:3:62", + "nodeType": "YulIdentifier", + "src": "26454:3:62" + }, + "nativeSrc": "26454:32:62", + "nodeType": "YulFunctionCall", + "src": "26454:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "26436:6:62", + "nodeType": "YulIdentifier", + "src": "26436:6:62" + }, + "nativeSrc": "26436:51:62", + "nodeType": "YulFunctionCall", + "src": "26436:51:62" + }, + "nativeSrc": "26436:51:62", + "nodeType": "YulExpressionStatement", + "src": "26436:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "26507:9:62", + "nodeType": "YulIdentifier", + "src": "26507:9:62" + }, + { + "kind": "number", + "nativeSrc": "26518:2:62", + "nodeType": "YulLiteral", + "src": "26518:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "26503:3:62", + "nodeType": "YulIdentifier", + "src": "26503:3:62" + }, + "nativeSrc": "26503:18:62", + "nodeType": "YulFunctionCall", + "src": "26503:18:62" + }, + { + "name": "value1", + "nativeSrc": "26523:6:62", + "nodeType": "YulIdentifier", + "src": "26523:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "26496:6:62", + "nodeType": "YulIdentifier", + "src": "26496:6:62" + }, + "nativeSrc": "26496:34:62", + "nodeType": "YulFunctionCall", + "src": "26496:34:62" + }, + "nativeSrc": "26496:34:62", + "nodeType": "YulExpressionStatement", + "src": "26496:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "26550:9:62", + "nodeType": "YulIdentifier", + "src": "26550:9:62" + }, + { + "kind": "number", + "nativeSrc": "26561:2:62", + "nodeType": "YulLiteral", + "src": "26561:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "26546:3:62", + "nodeType": "YulIdentifier", + "src": "26546:3:62" + }, + "nativeSrc": "26546:18:62", + "nodeType": "YulFunctionCall", + "src": "26546:18:62" + }, + { + "name": "value2", + "nativeSrc": "26566:6:62", + "nodeType": "YulIdentifier", + "src": "26566:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "26539:6:62", + "nodeType": "YulIdentifier", + "src": "26539:6:62" + }, + "nativeSrc": "26539:34:62", + "nodeType": "YulFunctionCall", + "src": "26539:34:62" + }, + "nativeSrc": "26539:34:62", + "nodeType": "YulExpressionStatement", + "src": "26539:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "26593:9:62", + "nodeType": "YulIdentifier", + "src": "26593:9:62" + }, + { + "kind": "number", + "nativeSrc": "26604:2:62", + "nodeType": "YulLiteral", + "src": "26604:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "26589:3:62", + "nodeType": "YulIdentifier", + "src": "26589:3:62" + }, + "nativeSrc": "26589:18:62", + "nodeType": "YulFunctionCall", + "src": "26589:18:62" + }, + { + "arguments": [ + { + "name": "value3", + "nativeSrc": "26613:6:62", + "nodeType": "YulIdentifier", + "src": "26613:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "26629:3:62", + "nodeType": "YulLiteral", + "src": "26629:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "26634:1:62", + "nodeType": "YulLiteral", + "src": "26634:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "26625:3:62", + "nodeType": "YulIdentifier", + "src": "26625:3:62" + }, + "nativeSrc": "26625:11:62", + "nodeType": "YulFunctionCall", + "src": "26625:11:62" + }, + { + "kind": "number", + "nativeSrc": "26638:1:62", + "nodeType": "YulLiteral", + "src": "26638:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "26621:3:62", + "nodeType": "YulIdentifier", + "src": "26621:3:62" + }, + "nativeSrc": "26621:19:62", + "nodeType": "YulFunctionCall", + "src": "26621:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "26609:3:62", + "nodeType": "YulIdentifier", + "src": "26609:3:62" + }, + "nativeSrc": "26609:32:62", + "nodeType": "YulFunctionCall", + "src": "26609:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "26582:6:62", + "nodeType": "YulIdentifier", + "src": "26582:6:62" + }, + "nativeSrc": "26582:60:62", + "nodeType": "YulFunctionCall", + "src": "26582:60:62" + }, + "nativeSrc": "26582:60:62", + "nodeType": "YulExpressionStatement", + "src": "26582:60:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed", + "nativeSrc": "26205:443:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "26335:9:62", + "nodeType": "YulTypedName", + "src": "26335:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "26346:6:62", + "nodeType": "YulTypedName", + "src": "26346:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "26354:6:62", + "nodeType": "YulTypedName", + "src": "26354:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "26362:6:62", + "nodeType": "YulTypedName", + "src": "26362:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "26370:6:62", + "nodeType": "YulTypedName", + "src": "26370:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "26381:4:62", + "nodeType": "YulTypedName", + "src": "26381:4:62", + "type": "" + } + ], + "src": "26205:443:62" + }, + { + "body": { + "nativeSrc": "26791:567:62", + "nodeType": "YulBlock", + "src": "26791:567:62", + "statements": [ + { + "body": { + "nativeSrc": "26838:16:62", + "nodeType": "YulBlock", + "src": "26838:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "26847:1:62", + "nodeType": "YulLiteral", + "src": "26847:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "26850:1:62", + "nodeType": "YulLiteral", + "src": "26850:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "26840:6:62", + "nodeType": "YulIdentifier", + "src": "26840:6:62" + }, + "nativeSrc": "26840:12:62", + "nodeType": "YulFunctionCall", + "src": "26840:12:62" + }, + "nativeSrc": "26840:12:62", + "nodeType": "YulExpressionStatement", + "src": "26840:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "26812:7:62", + "nodeType": "YulIdentifier", + "src": "26812:7:62" + }, + { + "name": "headStart", + "nativeSrc": "26821:9:62", + "nodeType": "YulIdentifier", + "src": "26821:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "26808:3:62", + "nodeType": "YulIdentifier", + "src": "26808:3:62" + }, + "nativeSrc": "26808:23:62", + "nodeType": "YulFunctionCall", + "src": "26808:23:62" + }, + { + "kind": "number", + "nativeSrc": "26833:3:62", + "nodeType": "YulLiteral", + "src": "26833:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "26804:3:62", + "nodeType": "YulIdentifier", + "src": "26804:3:62" + }, + "nativeSrc": "26804:33:62", + "nodeType": "YulFunctionCall", + "src": "26804:33:62" + }, + "nativeSrc": "26801:53:62", + "nodeType": "YulIf", + "src": "26801:53:62" + }, + { + "nativeSrc": "26863:14:62", + "nodeType": "YulVariableDeclaration", + "src": "26863:14:62", + "value": { + "kind": "number", + "nativeSrc": "26876:1:62", + "nodeType": "YulLiteral", + "src": "26876:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "26867:5:62", + "nodeType": "YulTypedName", + "src": "26867:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "26886:32:62", + "nodeType": "YulAssignment", + "src": "26886:32:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "26908:9:62", + "nodeType": "YulIdentifier", + "src": "26908:9:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "26895:12:62", + "nodeType": "YulIdentifier", + "src": "26895:12:62" + }, + "nativeSrc": "26895:23:62", + "nodeType": "YulFunctionCall", + "src": "26895:23:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "26886:5:62", + "nodeType": "YulIdentifier", + "src": "26886:5:62" + } + ] + }, + { + "nativeSrc": "26927:15:62", + "nodeType": "YulAssignment", + "src": "26927:15:62", + "value": { + "name": "value", + "nativeSrc": "26937:5:62", + "nodeType": "YulIdentifier", + "src": "26937:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "26927:6:62", + "nodeType": "YulIdentifier", + "src": "26927:6:62" + } + ] + }, + { + "nativeSrc": "26951:16:62", + "nodeType": "YulVariableDeclaration", + "src": "26951:16:62", + "value": { + "kind": "number", + "nativeSrc": "26966:1:62", + "nodeType": "YulLiteral", + "src": "26966:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "26955:7:62", + "nodeType": "YulTypedName", + "src": "26955:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "26976:43:62", + "nodeType": "YulAssignment", + "src": "26976:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "27004:9:62", + "nodeType": "YulIdentifier", + "src": "27004:9:62" + }, + { + "kind": "number", + "nativeSrc": "27015:2:62", + "nodeType": "YulLiteral", + "src": "27015:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "27000:3:62", + "nodeType": "YulIdentifier", + "src": "27000:3:62" + }, + "nativeSrc": "27000:18:62", + "nodeType": "YulFunctionCall", + "src": "27000:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "26987:12:62", + "nodeType": "YulIdentifier", + "src": "26987:12:62" + }, + "nativeSrc": "26987:32:62", + "nodeType": "YulFunctionCall", + "src": "26987:32:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "26976:7:62", + "nodeType": "YulIdentifier", + "src": "26976:7:62" + } + ] + }, + { + "nativeSrc": "27028:17:62", + "nodeType": "YulAssignment", + "src": "27028:17:62", + "value": { + "name": "value_1", + "nativeSrc": "27038:7:62", + "nodeType": "YulIdentifier", + "src": "27038:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "27028:6:62", + "nodeType": "YulIdentifier", + "src": "27028:6:62" + } + ] + }, + { + "nativeSrc": "27054:47:62", + "nodeType": "YulVariableDeclaration", + "src": "27054:47:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "27086:9:62", + "nodeType": "YulIdentifier", + "src": "27086:9:62" + }, + { + "kind": "number", + "nativeSrc": "27097:2:62", + "nodeType": "YulLiteral", + "src": "27097:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "27082:3:62", + "nodeType": "YulIdentifier", + "src": "27082:3:62" + }, + "nativeSrc": "27082:18:62", + "nodeType": "YulFunctionCall", + "src": "27082:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "27069:12:62", + "nodeType": "YulIdentifier", + "src": "27069:12:62" + }, + "nativeSrc": "27069:32:62", + "nodeType": "YulFunctionCall", + "src": "27069:32:62" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "27058:7:62", + "nodeType": "YulTypedName", + "src": "27058:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_2", + "nativeSrc": "27135:7:62", + "nodeType": "YulIdentifier", + "src": "27135:7:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "27110:24:62", + "nodeType": "YulIdentifier", + "src": "27110:24:62" + }, + "nativeSrc": "27110:33:62", + "nodeType": "YulFunctionCall", + "src": "27110:33:62" + }, + "nativeSrc": "27110:33:62", + "nodeType": "YulExpressionStatement", + "src": "27110:33:62" + }, + { + "nativeSrc": "27152:17:62", + "nodeType": "YulAssignment", + "src": "27152:17:62", + "value": { + "name": "value_2", + "nativeSrc": "27162:7:62", + "nodeType": "YulIdentifier", + "src": "27162:7:62" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "27152:6:62", + "nodeType": "YulIdentifier", + "src": "27152:6:62" + } + ] + }, + { + "nativeSrc": "27178:46:62", + "nodeType": "YulVariableDeclaration", + "src": "27178:46:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "27209:9:62", + "nodeType": "YulIdentifier", + "src": "27209:9:62" + }, + { + "kind": "number", + "nativeSrc": "27220:2:62", + "nodeType": "YulLiteral", + "src": "27220:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "27205:3:62", + "nodeType": "YulIdentifier", + "src": "27205:3:62" + }, + "nativeSrc": "27205:18:62", + "nodeType": "YulFunctionCall", + "src": "27205:18:62" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "27192:12:62", + "nodeType": "YulIdentifier", + "src": "27192:12:62" + }, + "nativeSrc": "27192:32:62", + "nodeType": "YulFunctionCall", + "src": "27192:32:62" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "27182:6:62", + "nodeType": "YulTypedName", + "src": "27182:6:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "27267:16:62", + "nodeType": "YulBlock", + "src": "27267:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "27276:1:62", + "nodeType": "YulLiteral", + "src": "27276:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "27279:1:62", + "nodeType": "YulLiteral", + "src": "27279:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "27269:6:62", + "nodeType": "YulIdentifier", + "src": "27269:6:62" + }, + "nativeSrc": "27269:12:62", + "nodeType": "YulFunctionCall", + "src": "27269:12:62" + }, + "nativeSrc": "27269:12:62", + "nodeType": "YulExpressionStatement", + "src": "27269:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "27239:6:62", + "nodeType": "YulIdentifier", + "src": "27239:6:62" + }, + { + "kind": "number", + "nativeSrc": "27247:18:62", + "nodeType": "YulLiteral", + "src": "27247:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "27236:2:62", + "nodeType": "YulIdentifier", + "src": "27236:2:62" + }, + "nativeSrc": "27236:30:62", + "nodeType": "YulFunctionCall", + "src": "27236:30:62" + }, + "nativeSrc": "27233:50:62", + "nodeType": "YulIf", + "src": "27233:50:62" + }, + { + "nativeSrc": "27292:60:62", + "nodeType": "YulAssignment", + "src": "27292:60:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "27324:9:62", + "nodeType": "YulIdentifier", + "src": "27324:9:62" + }, + { + "name": "offset", + "nativeSrc": "27335:6:62", + "nodeType": "YulIdentifier", + "src": "27335:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "27320:3:62", + "nodeType": "YulIdentifier", + "src": "27320:3:62" + }, + "nativeSrc": "27320:22:62", + "nodeType": "YulFunctionCall", + "src": "27320:22:62" + }, + { + "name": "dataEnd", + "nativeSrc": "27344:7:62", + "nodeType": "YulIdentifier", + "src": "27344:7:62" + } + ], + "functionName": { + "name": "abi_decode_string", + "nativeSrc": "27302:17:62", + "nodeType": "YulIdentifier", + "src": "27302:17:62" + }, + "nativeSrc": "27302:50:62", + "nodeType": "YulFunctionCall", + "src": "27302:50:62" + }, + "variableNames": [ + { + "name": "value3", + "nativeSrc": "27292:6:62", + "nodeType": "YulIdentifier", + "src": "27292:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32t_uint256t_address_payablet_bytes_memory_ptr", + "nativeSrc": "26653:705:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "26733:9:62", + "nodeType": "YulTypedName", + "src": "26733:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "26744:7:62", + "nodeType": "YulTypedName", + "src": "26744:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "26756:6:62", + "nodeType": "YulTypedName", + "src": "26756:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "26764:6:62", + "nodeType": "YulTypedName", + "src": "26764:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "26772:6:62", + "nodeType": "YulTypedName", + "src": "26772:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "26780:6:62", + "nodeType": "YulTypedName", + "src": "26780:6:62", + "type": "" + } + ], + "src": "26653:705:62" + }, + { + "body": { + "nativeSrc": "27422:77:62", + "nodeType": "YulBlock", + "src": "27422:77:62", + "statements": [ + { + "nativeSrc": "27432:22:62", + "nodeType": "YulAssignment", + "src": "27432:22:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "27447:6:62", + "nodeType": "YulIdentifier", + "src": "27447:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "27441:5:62", + "nodeType": "YulIdentifier", + "src": "27441:5:62" + }, + "nativeSrc": "27441:13:62", + "nodeType": "YulFunctionCall", + "src": "27441:13:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "27432:5:62", + "nodeType": "YulIdentifier", + "src": "27432:5:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "27487:5:62", + "nodeType": "YulIdentifier", + "src": "27487:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint32", + "nativeSrc": "27463:23:62", + "nodeType": "YulIdentifier", + "src": "27463:23:62" + }, + "nativeSrc": "27463:30:62", + "nodeType": "YulFunctionCall", + "src": "27463:30:62" + }, + "nativeSrc": "27463:30:62", + "nodeType": "YulExpressionStatement", + "src": "27463:30:62" + } + ] + }, + "name": "abi_decode_uint32_fromMemory", + "nativeSrc": "27363:136:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "27401:6:62", + "nodeType": "YulTypedName", + "src": "27401:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "27412:5:62", + "nodeType": "YulTypedName", + "src": "27412:5:62", + "type": "" + } + ], + "src": "27363:136:62" + }, + { + "body": { + "nativeSrc": "27563:77:62", + "nodeType": "YulBlock", + "src": "27563:77:62", + "statements": [ + { + "nativeSrc": "27573:22:62", + "nodeType": "YulAssignment", + "src": "27573:22:62", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "27588:6:62", + "nodeType": "YulIdentifier", + "src": "27588:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "27582:5:62", + "nodeType": "YulIdentifier", + "src": "27582:5:62" + }, + "nativeSrc": "27582:13:62", + "nodeType": "YulFunctionCall", + "src": "27582:13:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "27573:5:62", + "nodeType": "YulIdentifier", + "src": "27573:5:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "27628:5:62", + "nodeType": "YulIdentifier", + "src": "27628:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint64", + "nativeSrc": "27604:23:62", + "nodeType": "YulIdentifier", + "src": "27604:23:62" + }, + "nativeSrc": "27604:30:62", + "nodeType": "YulFunctionCall", + "src": "27604:30:62" + }, + "nativeSrc": "27604:30:62", + "nodeType": "YulExpressionStatement", + "src": "27604:30:62" + } + ] + }, + "name": "abi_decode_uint64_fromMemory", + "nativeSrc": "27504:136:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "27542:6:62", + "nodeType": "YulTypedName", + "src": "27542:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nativeSrc": "27553:5:62", + "nodeType": "YulTypedName", + "src": "27553:5:62", + "type": "" + } + ], + "src": "27504:136:62" + }, + { + "body": { + "nativeSrc": "27753:1015:62", + "nodeType": "YulBlock", + "src": "27753:1015:62", + "statements": [ + { + "nativeSrc": "27763:43:62", + "nodeType": "YulVariableDeclaration", + "src": "27763:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "27781:7:62", + "nodeType": "YulIdentifier", + "src": "27781:7:62" + }, + { + "name": "headStart", + "nativeSrc": "27790:9:62", + "nodeType": "YulIdentifier", + "src": "27790:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "27777:3:62", + "nodeType": "YulIdentifier", + "src": "27777:3:62" + }, + "nativeSrc": "27777:23:62", + "nodeType": "YulFunctionCall", + "src": "27777:23:62" + }, + { + "kind": "number", + "nativeSrc": "27802:3:62", + "nodeType": "YulLiteral", + "src": "27802:3:62", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "27773:3:62", + "nodeType": "YulIdentifier", + "src": "27773:3:62" + }, + "nativeSrc": "27773:33:62", + "nodeType": "YulFunctionCall", + "src": "27773:33:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "27767:2:62", + "nodeType": "YulTypedName", + "src": "27767:2:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "27821:16:62", + "nodeType": "YulBlock", + "src": "27821:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "27830:1:62", + "nodeType": "YulLiteral", + "src": "27830:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "27833:1:62", + "nodeType": "YulLiteral", + "src": "27833:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "27823:6:62", + "nodeType": "YulIdentifier", + "src": "27823:6:62" + }, + "nativeSrc": "27823:12:62", + "nodeType": "YulFunctionCall", + "src": "27823:12:62" + }, + "nativeSrc": "27823:12:62", + "nodeType": "YulExpressionStatement", + "src": "27823:12:62" + } + ] + }, + "condition": { + "name": "_1", + "nativeSrc": "27818:2:62", + "nodeType": "YulIdentifier", + "src": "27818:2:62" + }, + "nativeSrc": "27815:22:62", + "nodeType": "YulIf", + "src": "27815:22:62" + }, + { + "nativeSrc": "27846:7:62", + "nodeType": "YulAssignment", + "src": "27846:7:62", + "value": { + "kind": "number", + "nativeSrc": "27852:1:62", + "nodeType": "YulLiteral", + "src": "27852:1:62", + "type": "", + "value": "0" + }, + "variableNames": [ + { + "name": "_1", + "nativeSrc": "27846:2:62", + "nodeType": "YulIdentifier", + "src": "27846:2:62" + } + ] + }, + { + "nativeSrc": "27862:35:62", + "nodeType": "YulVariableDeclaration", + "src": "27862:35:62", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_memory_4284", + "nativeSrc": "27875:20:62", + "nodeType": "YulIdentifier", + "src": "27875:20:62" + }, + "nativeSrc": "27875:22:62", + "nodeType": "YulFunctionCall", + "src": "27875:22:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "27866:5:62", + "nodeType": "YulTypedName", + "src": "27866:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "27906:17:62", + "nodeType": "YulVariableDeclaration", + "src": "27906:17:62", + "value": { + "name": "_1", + "nativeSrc": "27921:2:62", + "nodeType": "YulIdentifier", + "src": "27921:2:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "27910:7:62", + "nodeType": "YulTypedName", + "src": "27910:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "27932:27:62", + "nodeType": "YulAssignment", + "src": "27932:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "27949:9:62", + "nodeType": "YulIdentifier", + "src": "27949:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "27943:5:62", + "nodeType": "YulIdentifier", + "src": "27943:5:62" + }, + "nativeSrc": "27943:16:62", + "nodeType": "YulFunctionCall", + "src": "27943:16:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "27932:7:62", + "nodeType": "YulIdentifier", + "src": "27932:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "27975:5:62", + "nodeType": "YulIdentifier", + "src": "27975:5:62" + }, + { + "name": "value_1", + "nativeSrc": "27982:7:62", + "nodeType": "YulIdentifier", + "src": "27982:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "27968:6:62", + "nodeType": "YulIdentifier", + "src": "27968:6:62" + }, + "nativeSrc": "27968:22:62", + "nodeType": "YulFunctionCall", + "src": "27968:22:62" + }, + "nativeSrc": "27968:22:62", + "nodeType": "YulExpressionStatement", + "src": "27968:22:62" + }, + { + "nativeSrc": "27999:17:62", + "nodeType": "YulVariableDeclaration", + "src": "27999:17:62", + "value": { + "name": "_1", + "nativeSrc": "28014:2:62", + "nodeType": "YulIdentifier", + "src": "28014:2:62" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "28003:7:62", + "nodeType": "YulTypedName", + "src": "28003:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "28025:36:62", + "nodeType": "YulAssignment", + "src": "28025:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28046:9:62", + "nodeType": "YulIdentifier", + "src": "28046:9:62" + }, + { + "kind": "number", + "nativeSrc": "28057:2:62", + "nodeType": "YulLiteral", + "src": "28057:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28042:3:62", + "nodeType": "YulIdentifier", + "src": "28042:3:62" + }, + "nativeSrc": "28042:18:62", + "nodeType": "YulFunctionCall", + "src": "28042:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "28036:5:62", + "nodeType": "YulIdentifier", + "src": "28036:5:62" + }, + "nativeSrc": "28036:25:62", + "nodeType": "YulFunctionCall", + "src": "28036:25:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "28025:7:62", + "nodeType": "YulIdentifier", + "src": "28025:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "28081:5:62", + "nodeType": "YulIdentifier", + "src": "28081:5:62" + }, + { + "kind": "number", + "nativeSrc": "28088:2:62", + "nodeType": "YulLiteral", + "src": "28088:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28077:3:62", + "nodeType": "YulIdentifier", + "src": "28077:3:62" + }, + "nativeSrc": "28077:14:62", + "nodeType": "YulFunctionCall", + "src": "28077:14:62" + }, + { + "name": "value_2", + "nativeSrc": "28093:7:62", + "nodeType": "YulIdentifier", + "src": "28093:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28070:6:62", + "nodeType": "YulIdentifier", + "src": "28070:6:62" + }, + "nativeSrc": "28070:31:62", + "nodeType": "YulFunctionCall", + "src": "28070:31:62" + }, + "nativeSrc": "28070:31:62", + "nodeType": "YulExpressionStatement", + "src": "28070:31:62" + }, + { + "nativeSrc": "28110:17:62", + "nodeType": "YulVariableDeclaration", + "src": "28110:17:62", + "value": { + "name": "_1", + "nativeSrc": "28125:2:62", + "nodeType": "YulIdentifier", + "src": "28125:2:62" + }, + "variables": [ + { + "name": "value_3", + "nativeSrc": "28114:7:62", + "nodeType": "YulTypedName", + "src": "28114:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "28136:36:62", + "nodeType": "YulAssignment", + "src": "28136:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28157:9:62", + "nodeType": "YulIdentifier", + "src": "28157:9:62" + }, + { + "kind": "number", + "nativeSrc": "28168:2:62", + "nodeType": "YulLiteral", + "src": "28168:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28153:3:62", + "nodeType": "YulIdentifier", + "src": "28153:3:62" + }, + "nativeSrc": "28153:18:62", + "nodeType": "YulFunctionCall", + "src": "28153:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "28147:5:62", + "nodeType": "YulIdentifier", + "src": "28147:5:62" + }, + "nativeSrc": "28147:25:62", + "nodeType": "YulFunctionCall", + "src": "28147:25:62" + }, + "variableNames": [ + { + "name": "value_3", + "nativeSrc": "28136:7:62", + "nodeType": "YulIdentifier", + "src": "28136:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "28192:5:62", + "nodeType": "YulIdentifier", + "src": "28192:5:62" + }, + { + "kind": "number", + "nativeSrc": "28199:2:62", + "nodeType": "YulLiteral", + "src": "28199:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28188:3:62", + "nodeType": "YulIdentifier", + "src": "28188:3:62" + }, + "nativeSrc": "28188:14:62", + "nodeType": "YulFunctionCall", + "src": "28188:14:62" + }, + { + "name": "value_3", + "nativeSrc": "28204:7:62", + "nodeType": "YulIdentifier", + "src": "28204:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28181:6:62", + "nodeType": "YulIdentifier", + "src": "28181:6:62" + }, + "nativeSrc": "28181:31:62", + "nodeType": "YulFunctionCall", + "src": "28181:31:62" + }, + "nativeSrc": "28181:31:62", + "nodeType": "YulExpressionStatement", + "src": "28181:31:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "28232:5:62", + "nodeType": "YulIdentifier", + "src": "28232:5:62" + }, + { + "kind": "number", + "nativeSrc": "28239:2:62", + "nodeType": "YulLiteral", + "src": "28239:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28228:3:62", + "nodeType": "YulIdentifier", + "src": "28228:3:62" + }, + "nativeSrc": "28228:14:62", + "nodeType": "YulFunctionCall", + "src": "28228:14:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28277:9:62", + "nodeType": "YulIdentifier", + "src": "28277:9:62" + }, + { + "kind": "number", + "nativeSrc": "28288:2:62", + "nodeType": "YulLiteral", + "src": "28288:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28273:3:62", + "nodeType": "YulIdentifier", + "src": "28273:3:62" + }, + "nativeSrc": "28273:18:62", + "nodeType": "YulFunctionCall", + "src": "28273:18:62" + } + ], + "functionName": { + "name": "abi_decode_uint32_fromMemory", + "nativeSrc": "28244:28:62", + "nodeType": "YulIdentifier", + "src": "28244:28:62" + }, + "nativeSrc": "28244:48:62", + "nodeType": "YulFunctionCall", + "src": "28244:48:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28221:6:62", + "nodeType": "YulIdentifier", + "src": "28221:6:62" + }, + "nativeSrc": "28221:72:62", + "nodeType": "YulFunctionCall", + "src": "28221:72:62" + }, + "nativeSrc": "28221:72:62", + "nodeType": "YulExpressionStatement", + "src": "28221:72:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "28313:5:62", + "nodeType": "YulIdentifier", + "src": "28313:5:62" + }, + { + "kind": "number", + "nativeSrc": "28320:3:62", + "nodeType": "YulLiteral", + "src": "28320:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28309:3:62", + "nodeType": "YulIdentifier", + "src": "28309:3:62" + }, + "nativeSrc": "28309:15:62", + "nodeType": "YulFunctionCall", + "src": "28309:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28359:9:62", + "nodeType": "YulIdentifier", + "src": "28359:9:62" + }, + { + "kind": "number", + "nativeSrc": "28370:3:62", + "nodeType": "YulLiteral", + "src": "28370:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28355:3:62", + "nodeType": "YulIdentifier", + "src": "28355:3:62" + }, + "nativeSrc": "28355:19:62", + "nodeType": "YulFunctionCall", + "src": "28355:19:62" + } + ], + "functionName": { + "name": "abi_decode_uint64_fromMemory", + "nativeSrc": "28326:28:62", + "nodeType": "YulIdentifier", + "src": "28326:28:62" + }, + "nativeSrc": "28326:49:62", + "nodeType": "YulFunctionCall", + "src": "28326:49:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28302:6:62", + "nodeType": "YulIdentifier", + "src": "28302:6:62" + }, + "nativeSrc": "28302:74:62", + "nodeType": "YulFunctionCall", + "src": "28302:74:62" + }, + "nativeSrc": "28302:74:62", + "nodeType": "YulExpressionStatement", + "src": "28302:74:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "28396:5:62", + "nodeType": "YulIdentifier", + "src": "28396:5:62" + }, + { + "kind": "number", + "nativeSrc": "28403:3:62", + "nodeType": "YulLiteral", + "src": "28403:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28392:3:62", + "nodeType": "YulIdentifier", + "src": "28392:3:62" + }, + "nativeSrc": "28392:15:62", + "nodeType": "YulFunctionCall", + "src": "28392:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28442:9:62", + "nodeType": "YulIdentifier", + "src": "28442:9:62" + }, + { + "kind": "number", + "nativeSrc": "28453:3:62", + "nodeType": "YulLiteral", + "src": "28453:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28438:3:62", + "nodeType": "YulIdentifier", + "src": "28438:3:62" + }, + "nativeSrc": "28438:19:62", + "nodeType": "YulFunctionCall", + "src": "28438:19:62" + } + ], + "functionName": { + "name": "abi_decode_uint64_fromMemory", + "nativeSrc": "28409:28:62", + "nodeType": "YulIdentifier", + "src": "28409:28:62" + }, + "nativeSrc": "28409:49:62", + "nodeType": "YulFunctionCall", + "src": "28409:49:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28385:6:62", + "nodeType": "YulIdentifier", + "src": "28385:6:62" + }, + "nativeSrc": "28385:74:62", + "nodeType": "YulFunctionCall", + "src": "28385:74:62" + }, + "nativeSrc": "28385:74:62", + "nodeType": "YulExpressionStatement", + "src": "28385:74:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "28479:5:62", + "nodeType": "YulIdentifier", + "src": "28479:5:62" + }, + { + "kind": "number", + "nativeSrc": "28486:3:62", + "nodeType": "YulLiteral", + "src": "28486:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28475:3:62", + "nodeType": "YulIdentifier", + "src": "28475:3:62" + }, + "nativeSrc": "28475:15:62", + "nodeType": "YulFunctionCall", + "src": "28475:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28525:9:62", + "nodeType": "YulIdentifier", + "src": "28525:9:62" + }, + { + "kind": "number", + "nativeSrc": "28536:3:62", + "nodeType": "YulLiteral", + "src": "28536:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28521:3:62", + "nodeType": "YulIdentifier", + "src": "28521:3:62" + }, + "nativeSrc": "28521:19:62", + "nodeType": "YulFunctionCall", + "src": "28521:19:62" + } + ], + "functionName": { + "name": "abi_decode_uint32_fromMemory", + "nativeSrc": "28492:28:62", + "nodeType": "YulIdentifier", + "src": "28492:28:62" + }, + "nativeSrc": "28492:49:62", + "nodeType": "YulFunctionCall", + "src": "28492:49:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28468:6:62", + "nodeType": "YulIdentifier", + "src": "28468:6:62" + }, + "nativeSrc": "28468:74:62", + "nodeType": "YulFunctionCall", + "src": "28468:74:62" + }, + "nativeSrc": "28468:74:62", + "nodeType": "YulExpressionStatement", + "src": "28468:74:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "28562:5:62", + "nodeType": "YulIdentifier", + "src": "28562:5:62" + }, + { + "kind": "number", + "nativeSrc": "28569:3:62", + "nodeType": "YulLiteral", + "src": "28569:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28558:3:62", + "nodeType": "YulIdentifier", + "src": "28558:3:62" + }, + "nativeSrc": "28558:15:62", + "nodeType": "YulFunctionCall", + "src": "28558:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28608:9:62", + "nodeType": "YulIdentifier", + "src": "28608:9:62" + }, + { + "kind": "number", + "nativeSrc": "28619:3:62", + "nodeType": "YulLiteral", + "src": "28619:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28604:3:62", + "nodeType": "YulIdentifier", + "src": "28604:3:62" + }, + "nativeSrc": "28604:19:62", + "nodeType": "YulFunctionCall", + "src": "28604:19:62" + } + ], + "functionName": { + "name": "abi_decode_uint64_fromMemory", + "nativeSrc": "28575:28:62", + "nodeType": "YulIdentifier", + "src": "28575:28:62" + }, + "nativeSrc": "28575:49:62", + "nodeType": "YulFunctionCall", + "src": "28575:49:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28551:6:62", + "nodeType": "YulIdentifier", + "src": "28551:6:62" + }, + "nativeSrc": "28551:74:62", + "nodeType": "YulFunctionCall", + "src": "28551:74:62" + }, + "nativeSrc": "28551:74:62", + "nodeType": "YulExpressionStatement", + "src": "28551:74:62" + }, + { + "nativeSrc": "28634:17:62", + "nodeType": "YulVariableDeclaration", + "src": "28634:17:62", + "value": { + "name": "_1", + "nativeSrc": "28649:2:62", + "nodeType": "YulIdentifier", + "src": "28649:2:62" + }, + "variables": [ + { + "name": "value_4", + "nativeSrc": "28638:7:62", + "nodeType": "YulTypedName", + "src": "28638:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "28660:37:62", + "nodeType": "YulAssignment", + "src": "28660:37:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28681:9:62", + "nodeType": "YulIdentifier", + "src": "28681:9:62" + }, + { + "kind": "number", + "nativeSrc": "28692:3:62", + "nodeType": "YulLiteral", + "src": "28692:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28677:3:62", + "nodeType": "YulIdentifier", + "src": "28677:3:62" + }, + "nativeSrc": "28677:19:62", + "nodeType": "YulFunctionCall", + "src": "28677:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "28671:5:62", + "nodeType": "YulIdentifier", + "src": "28671:5:62" + }, + "nativeSrc": "28671:26:62", + "nodeType": "YulFunctionCall", + "src": "28671:26:62" + }, + "variableNames": [ + { + "name": "value_4", + "nativeSrc": "28660:7:62", + "nodeType": "YulIdentifier", + "src": "28660:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "28717:5:62", + "nodeType": "YulIdentifier", + "src": "28717:5:62" + }, + { + "kind": "number", + "nativeSrc": "28724:3:62", + "nodeType": "YulLiteral", + "src": "28724:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28713:3:62", + "nodeType": "YulIdentifier", + "src": "28713:3:62" + }, + "nativeSrc": "28713:15:62", + "nodeType": "YulFunctionCall", + "src": "28713:15:62" + }, + { + "name": "value_4", + "nativeSrc": "28730:7:62", + "nodeType": "YulIdentifier", + "src": "28730:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28706:6:62", + "nodeType": "YulIdentifier", + "src": "28706:6:62" + }, + "nativeSrc": "28706:32:62", + "nodeType": "YulFunctionCall", + "src": "28706:32:62" + }, + "nativeSrc": "28706:32:62", + "nodeType": "YulExpressionStatement", + "src": "28706:32:62" + }, + { + "nativeSrc": "28747:15:62", + "nodeType": "YulAssignment", + "src": "28747:15:62", + "value": { + "name": "value", + "nativeSrc": "28757:5:62", + "nodeType": "YulIdentifier", + "src": "28757:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "28747:6:62", + "nodeType": "YulIdentifier", + "src": "28747:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory", + "nativeSrc": "27645:1123:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "27719:9:62", + "nodeType": "YulTypedName", + "src": "27719:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "27730:7:62", + "nodeType": "YulTypedName", + "src": "27730:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "27742:6:62", + "nodeType": "YulTypedName", + "src": "27742:6:62", + "type": "" + } + ], + "src": "27645:1123:62" + }, + { + "body": { + "nativeSrc": "28908:156:62", + "nodeType": "YulBlock", + "src": "28908:156:62", + "statements": [ + { + "nativeSrc": "28918:26:62", + "nodeType": "YulAssignment", + "src": "28918:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28930:9:62", + "nodeType": "YulIdentifier", + "src": "28930:9:62" + }, + { + "kind": "number", + "nativeSrc": "28941:2:62", + "nodeType": "YulLiteral", + "src": "28941:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "28926:3:62", + "nodeType": "YulIdentifier", + "src": "28926:3:62" + }, + "nativeSrc": "28926:18:62", + "nodeType": "YulFunctionCall", + "src": "28926:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "28918:4:62", + "nodeType": "YulIdentifier", + "src": "28918:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "28960:9:62", + "nodeType": "YulIdentifier", + "src": "28960:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "28975:6:62", + "nodeType": "YulIdentifier", + "src": "28975:6:62" + }, + { + "kind": "number", + "nativeSrc": "28983:4:62", + "nodeType": "YulLiteral", + "src": "28983:4:62", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "28971:3:62", + "nodeType": "YulIdentifier", + "src": "28971:3:62" + }, + "nativeSrc": "28971:17:62", + "nodeType": "YulFunctionCall", + "src": "28971:17:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28953:6:62", + "nodeType": "YulIdentifier", + "src": "28953:6:62" + }, + "nativeSrc": "28953:36:62", + "nodeType": "YulFunctionCall", + "src": "28953:36:62" + }, + "nativeSrc": "28953:36:62", + "nodeType": "YulExpressionStatement", + "src": "28953:36:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "29009:9:62", + "nodeType": "YulIdentifier", + "src": "29009:9:62" + }, + { + "kind": "number", + "nativeSrc": "29020:2:62", + "nodeType": "YulLiteral", + "src": "29020:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "29005:3:62", + "nodeType": "YulIdentifier", + "src": "29005:3:62" + }, + "nativeSrc": "29005:18:62", + "nodeType": "YulFunctionCall", + "src": "29005:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "29029:6:62", + "nodeType": "YulIdentifier", + "src": "29029:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "29045:3:62", + "nodeType": "YulLiteral", + "src": "29045:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "29050:1:62", + "nodeType": "YulLiteral", + "src": "29050:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "29041:3:62", + "nodeType": "YulIdentifier", + "src": "29041:3:62" + }, + "nativeSrc": "29041:11:62", + "nodeType": "YulFunctionCall", + "src": "29041:11:62" + }, + { + "kind": "number", + "nativeSrc": "29054:1:62", + "nodeType": "YulLiteral", + "src": "29054:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "29037:3:62", + "nodeType": "YulIdentifier", + "src": "29037:3:62" + }, + "nativeSrc": "29037:19:62", + "nodeType": "YulFunctionCall", + "src": "29037:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "29025:3:62", + "nodeType": "YulIdentifier", + "src": "29025:3:62" + }, + "nativeSrc": "29025:32:62", + "nodeType": "YulFunctionCall", + "src": "29025:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "28998:6:62", + "nodeType": "YulIdentifier", + "src": "28998:6:62" + }, + "nativeSrc": "28998:60:62", + "nodeType": "YulFunctionCall", + "src": "28998:60:62" + }, + "nativeSrc": "28998:60:62", + "nodeType": "YulExpressionStatement", + "src": "28998:60:62" + } + ] + }, + "name": "abi_encode_tuple_t_rational_0_by_1_t_address__to_t_uint8_t_address__fromStack_reversed", + "nativeSrc": "28773:291:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "28869:9:62", + "nodeType": "YulTypedName", + "src": "28869:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "28880:6:62", + "nodeType": "YulTypedName", + "src": "28880:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "28888:6:62", + "nodeType": "YulTypedName", + "src": "28888:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "28899:4:62", + "nodeType": "YulTypedName", + "src": "28899:4:62", + "type": "" + } + ], + "src": "28773:291:62" + }, + { + "body": { + "nativeSrc": "29150:149:62", + "nodeType": "YulBlock", + "src": "29150:149:62", + "statements": [ + { + "body": { + "nativeSrc": "29196:16:62", + "nodeType": "YulBlock", + "src": "29196:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "29205:1:62", + "nodeType": "YulLiteral", + "src": "29205:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "29208:1:62", + "nodeType": "YulLiteral", + "src": "29208:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "29198:6:62", + "nodeType": "YulIdentifier", + "src": "29198:6:62" + }, + "nativeSrc": "29198:12:62", + "nodeType": "YulFunctionCall", + "src": "29198:12:62" + }, + "nativeSrc": "29198:12:62", + "nodeType": "YulExpressionStatement", + "src": "29198:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "29171:7:62", + "nodeType": "YulIdentifier", + "src": "29171:7:62" + }, + { + "name": "headStart", + "nativeSrc": "29180:9:62", + "nodeType": "YulIdentifier", + "src": "29180:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "29167:3:62", + "nodeType": "YulIdentifier", + "src": "29167:3:62" + }, + "nativeSrc": "29167:23:62", + "nodeType": "YulFunctionCall", + "src": "29167:23:62" + }, + { + "kind": "number", + "nativeSrc": "29192:2:62", + "nodeType": "YulLiteral", + "src": "29192:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "29163:3:62", + "nodeType": "YulIdentifier", + "src": "29163:3:62" + }, + "nativeSrc": "29163:32:62", + "nodeType": "YulFunctionCall", + "src": "29163:32:62" + }, + "nativeSrc": "29160:52:62", + "nodeType": "YulIf", + "src": "29160:52:62" + }, + { + "nativeSrc": "29221:14:62", + "nodeType": "YulVariableDeclaration", + "src": "29221:14:62", + "value": { + "kind": "number", + "nativeSrc": "29234:1:62", + "nodeType": "YulLiteral", + "src": "29234:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "29225:5:62", + "nodeType": "YulTypedName", + "src": "29225:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "29244:25:62", + "nodeType": "YulAssignment", + "src": "29244:25:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "29259:9:62", + "nodeType": "YulIdentifier", + "src": "29259:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "29253:5:62", + "nodeType": "YulIdentifier", + "src": "29253:5:62" + }, + "nativeSrc": "29253:16:62", + "nodeType": "YulFunctionCall", + "src": "29253:16:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "29244:5:62", + "nodeType": "YulIdentifier", + "src": "29244:5:62" + } + ] + }, + { + "nativeSrc": "29278:15:62", + "nodeType": "YulAssignment", + "src": "29278:15:62", + "value": { + "name": "value", + "nativeSrc": "29288:5:62", + "nodeType": "YulIdentifier", + "src": "29288:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "29278:6:62", + "nodeType": "YulIdentifier", + "src": "29278:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nativeSrc": "29069:230:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "29116:9:62", + "nodeType": "YulTypedName", + "src": "29116:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "29127:7:62", + "nodeType": "YulTypedName", + "src": "29127:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "29139:6:62", + "nodeType": "YulTypedName", + "src": "29139:6:62", + "type": "" + } + ], + "src": "29069:230:62" + }, + { + "body": { + "nativeSrc": "29384:169:62", + "nodeType": "YulBlock", + "src": "29384:169:62", + "statements": [ + { + "body": { + "nativeSrc": "29430:16:62", + "nodeType": "YulBlock", + "src": "29430:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "29439:1:62", + "nodeType": "YulLiteral", + "src": "29439:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "29442:1:62", + "nodeType": "YulLiteral", + "src": "29442:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "29432:6:62", + "nodeType": "YulIdentifier", + "src": "29432:6:62" + }, + "nativeSrc": "29432:12:62", + "nodeType": "YulFunctionCall", + "src": "29432:12:62" + }, + "nativeSrc": "29432:12:62", + "nodeType": "YulExpressionStatement", + "src": "29432:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "29405:7:62", + "nodeType": "YulIdentifier", + "src": "29405:7:62" + }, + { + "name": "headStart", + "nativeSrc": "29414:9:62", + "nodeType": "YulIdentifier", + "src": "29414:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "29401:3:62", + "nodeType": "YulIdentifier", + "src": "29401:3:62" + }, + "nativeSrc": "29401:23:62", + "nodeType": "YulFunctionCall", + "src": "29401:23:62" + }, + { + "kind": "number", + "nativeSrc": "29426:2:62", + "nodeType": "YulLiteral", + "src": "29426:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "29397:3:62", + "nodeType": "YulIdentifier", + "src": "29397:3:62" + }, + "nativeSrc": "29397:32:62", + "nodeType": "YulFunctionCall", + "src": "29397:32:62" + }, + "nativeSrc": "29394:52:62", + "nodeType": "YulIf", + "src": "29394:52:62" + }, + { + "nativeSrc": "29455:29:62", + "nodeType": "YulVariableDeclaration", + "src": "29455:29:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "29474:9:62", + "nodeType": "YulIdentifier", + "src": "29474:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "29468:5:62", + "nodeType": "YulIdentifier", + "src": "29468:5:62" + }, + "nativeSrc": "29468:16:62", + "nodeType": "YulFunctionCall", + "src": "29468:16:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "29459:5:62", + "nodeType": "YulTypedName", + "src": "29459:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "29517:5:62", + "nodeType": "YulIdentifier", + "src": "29517:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint32", + "nativeSrc": "29493:23:62", + "nodeType": "YulIdentifier", + "src": "29493:23:62" + }, + "nativeSrc": "29493:30:62", + "nodeType": "YulFunctionCall", + "src": "29493:30:62" + }, + "nativeSrc": "29493:30:62", + "nodeType": "YulExpressionStatement", + "src": "29493:30:62" + }, + { + "nativeSrc": "29532:15:62", + "nodeType": "YulAssignment", + "src": "29532:15:62", + "value": { + "name": "value", + "nativeSrc": "29542:5:62", + "nodeType": "YulIdentifier", + "src": "29542:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "29532:6:62", + "nodeType": "YulIdentifier", + "src": "29532:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint32_fromMemory", + "nativeSrc": "29304:249:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "29350:9:62", + "nodeType": "YulTypedName", + "src": "29350:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "29361:7:62", + "nodeType": "YulTypedName", + "src": "29361:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "29373:6:62", + "nodeType": "YulTypedName", + "src": "29373:6:62", + "type": "" + } + ], + "src": "29304:249:62" + }, + { + "body": { + "nativeSrc": "29638:169:62", + "nodeType": "YulBlock", + "src": "29638:169:62", + "statements": [ + { + "body": { + "nativeSrc": "29684:16:62", + "nodeType": "YulBlock", + "src": "29684:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "29693:1:62", + "nodeType": "YulLiteral", + "src": "29693:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "29696:1:62", + "nodeType": "YulLiteral", + "src": "29696:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "29686:6:62", + "nodeType": "YulIdentifier", + "src": "29686:6:62" + }, + "nativeSrc": "29686:12:62", + "nodeType": "YulFunctionCall", + "src": "29686:12:62" + }, + "nativeSrc": "29686:12:62", + "nodeType": "YulExpressionStatement", + "src": "29686:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "29659:7:62", + "nodeType": "YulIdentifier", + "src": "29659:7:62" + }, + { + "name": "headStart", + "nativeSrc": "29668:9:62", + "nodeType": "YulIdentifier", + "src": "29668:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "29655:3:62", + "nodeType": "YulIdentifier", + "src": "29655:3:62" + }, + "nativeSrc": "29655:23:62", + "nodeType": "YulFunctionCall", + "src": "29655:23:62" + }, + { + "kind": "number", + "nativeSrc": "29680:2:62", + "nodeType": "YulLiteral", + "src": "29680:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "29651:3:62", + "nodeType": "YulIdentifier", + "src": "29651:3:62" + }, + "nativeSrc": "29651:32:62", + "nodeType": "YulFunctionCall", + "src": "29651:32:62" + }, + "nativeSrc": "29648:52:62", + "nodeType": "YulIf", + "src": "29648:52:62" + }, + { + "nativeSrc": "29709:29:62", + "nodeType": "YulVariableDeclaration", + "src": "29709:29:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "29728:9:62", + "nodeType": "YulIdentifier", + "src": "29728:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "29722:5:62", + "nodeType": "YulIdentifier", + "src": "29722:5:62" + }, + "nativeSrc": "29722:16:62", + "nodeType": "YulFunctionCall", + "src": "29722:16:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "29713:5:62", + "nodeType": "YulTypedName", + "src": "29713:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "29771:5:62", + "nodeType": "YulIdentifier", + "src": "29771:5:62" + } + ], + "functionName": { + "name": "validator_revert_uint64", + "nativeSrc": "29747:23:62", + "nodeType": "YulIdentifier", + "src": "29747:23:62" + }, + "nativeSrc": "29747:30:62", + "nodeType": "YulFunctionCall", + "src": "29747:30:62" + }, + "nativeSrc": "29747:30:62", + "nodeType": "YulExpressionStatement", + "src": "29747:30:62" + }, + { + "nativeSrc": "29786:15:62", + "nodeType": "YulAssignment", + "src": "29786:15:62", + "value": { + "name": "value", + "nativeSrc": "29796:5:62", + "nodeType": "YulIdentifier", + "src": "29796:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "29786:6:62", + "nodeType": "YulIdentifier", + "src": "29786:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint64_fromMemory", + "nativeSrc": "29558:249:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "29604:9:62", + "nodeType": "YulTypedName", + "src": "29604:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "29615:7:62", + "nodeType": "YulTypedName", + "src": "29615:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "29627:6:62", + "nodeType": "YulTypedName", + "src": "29627:6:62", + "type": "" + } + ], + "src": "29558:249:62" + }, + { + "body": { + "nativeSrc": "29941:145:62", + "nodeType": "YulBlock", + "src": "29941:145:62", + "statements": [ + { + "nativeSrc": "29951:26:62", + "nodeType": "YulAssignment", + "src": "29951:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "29963:9:62", + "nodeType": "YulIdentifier", + "src": "29963:9:62" + }, + { + "kind": "number", + "nativeSrc": "29974:2:62", + "nodeType": "YulLiteral", + "src": "29974:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "29959:3:62", + "nodeType": "YulIdentifier", + "src": "29959:3:62" + }, + "nativeSrc": "29959:18:62", + "nodeType": "YulFunctionCall", + "src": "29959:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "29951:4:62", + "nodeType": "YulIdentifier", + "src": "29951:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "29993:9:62", + "nodeType": "YulIdentifier", + "src": "29993:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "30008:6:62", + "nodeType": "YulIdentifier", + "src": "30008:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "30024:3:62", + "nodeType": "YulLiteral", + "src": "30024:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "30029:1:62", + "nodeType": "YulLiteral", + "src": "30029:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "30020:3:62", + "nodeType": "YulIdentifier", + "src": "30020:3:62" + }, + "nativeSrc": "30020:11:62", + "nodeType": "YulFunctionCall", + "src": "30020:11:62" + }, + { + "kind": "number", + "nativeSrc": "30033:1:62", + "nodeType": "YulLiteral", + "src": "30033:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "30016:3:62", + "nodeType": "YulIdentifier", + "src": "30016:3:62" + }, + "nativeSrc": "30016:19:62", + "nodeType": "YulFunctionCall", + "src": "30016:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "30004:3:62", + "nodeType": "YulIdentifier", + "src": "30004:3:62" + }, + "nativeSrc": "30004:32:62", + "nodeType": "YulFunctionCall", + "src": "30004:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "29986:6:62", + "nodeType": "YulIdentifier", + "src": "29986:6:62" + }, + "nativeSrc": "29986:51:62", + "nodeType": "YulFunctionCall", + "src": "29986:51:62" + }, + "nativeSrc": "29986:51:62", + "nodeType": "YulExpressionStatement", + "src": "29986:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "30057:9:62", + "nodeType": "YulIdentifier", + "src": "30057:9:62" + }, + { + "kind": "number", + "nativeSrc": "30068:2:62", + "nodeType": "YulLiteral", + "src": "30068:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "30053:3:62", + "nodeType": "YulIdentifier", + "src": "30053:3:62" + }, + "nativeSrc": "30053:18:62", + "nodeType": "YulFunctionCall", + "src": "30053:18:62" + }, + { + "name": "value1", + "nativeSrc": "30073:6:62", + "nodeType": "YulIdentifier", + "src": "30073:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "30046:6:62", + "nodeType": "YulIdentifier", + "src": "30046:6:62" + }, + "nativeSrc": "30046:34:62", + "nodeType": "YulFunctionCall", + "src": "30046:34:62" + }, + "nativeSrc": "30046:34:62", + "nodeType": "YulExpressionStatement", + "src": "30046:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", + "nativeSrc": "29812:274:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "29902:9:62", + "nodeType": "YulTypedName", + "src": "29902:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "29913:6:62", + "nodeType": "YulTypedName", + "src": "29913:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "29921:6:62", + "nodeType": "YulTypedName", + "src": "29921:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "29932:4:62", + "nodeType": "YulTypedName", + "src": "29932:4:62", + "type": "" + } + ], + "src": "29812:274:62" + }, + { + "body": { + "nativeSrc": "30139:77:62", + "nodeType": "YulBlock", + "src": "30139:77:62", + "statements": [ + { + "nativeSrc": "30149:16:62", + "nodeType": "YulAssignment", + "src": "30149:16:62", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "30160:1:62", + "nodeType": "YulIdentifier", + "src": "30160:1:62" + }, + { + "name": "y", + "nativeSrc": "30163:1:62", + "nodeType": "YulIdentifier", + "src": "30163:1:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "30156:3:62", + "nodeType": "YulIdentifier", + "src": "30156:3:62" + }, + "nativeSrc": "30156:9:62", + "nodeType": "YulFunctionCall", + "src": "30156:9:62" + }, + "variableNames": [ + { + "name": "sum", + "nativeSrc": "30149:3:62", + "nodeType": "YulIdentifier", + "src": "30149:3:62" + } + ] + }, + { + "body": { + "nativeSrc": "30188:22:62", + "nodeType": "YulBlock", + "src": "30188:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nativeSrc": "30190:16:62", + "nodeType": "YulIdentifier", + "src": "30190:16:62" + }, + "nativeSrc": "30190:18:62", + "nodeType": "YulFunctionCall", + "src": "30190:18:62" + }, + "nativeSrc": "30190:18:62", + "nodeType": "YulExpressionStatement", + "src": "30190:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nativeSrc": "30180:1:62", + "nodeType": "YulIdentifier", + "src": "30180:1:62" + }, + { + "name": "sum", + "nativeSrc": "30183:3:62", + "nodeType": "YulIdentifier", + "src": "30183:3:62" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "30177:2:62", + "nodeType": "YulIdentifier", + "src": "30177:2:62" + }, + "nativeSrc": "30177:10:62", + "nodeType": "YulFunctionCall", + "src": "30177:10:62" + }, + "nativeSrc": "30174:36:62", + "nodeType": "YulIf", + "src": "30174:36:62" + } + ] + }, + "name": "checked_add_t_uint256", + "nativeSrc": "30091:125:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nativeSrc": "30122:1:62", + "nodeType": "YulTypedName", + "src": "30122:1:62", + "type": "" + }, + { + "name": "y", + "nativeSrc": "30125:1:62", + "nodeType": "YulTypedName", + "src": "30125:1:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nativeSrc": "30131:3:62", + "nodeType": "YulTypedName", + "src": "30131:3:62", + "type": "" + } + ], + "src": "30091:125:62" + }, + { + "body": { + "nativeSrc": "30358:150:62", + "nodeType": "YulBlock", + "src": "30358:150:62", + "statements": [ + { + "nativeSrc": "30368:27:62", + "nodeType": "YulVariableDeclaration", + "src": "30368:27:62", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "30388:6:62", + "nodeType": "YulIdentifier", + "src": "30388:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "30382:5:62", + "nodeType": "YulIdentifier", + "src": "30382:5:62" + }, + "nativeSrc": "30382:13:62", + "nodeType": "YulFunctionCall", + "src": "30382:13:62" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "30372:6:62", + "nodeType": "YulTypedName", + "src": "30372:6:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "30443:6:62", + "nodeType": "YulIdentifier", + "src": "30443:6:62" + }, + { + "kind": "number", + "nativeSrc": "30451:4:62", + "nodeType": "YulLiteral", + "src": "30451:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "30439:3:62", + "nodeType": "YulIdentifier", + "src": "30439:3:62" + }, + "nativeSrc": "30439:17:62", + "nodeType": "YulFunctionCall", + "src": "30439:17:62" + }, + { + "name": "pos", + "nativeSrc": "30458:3:62", + "nodeType": "YulIdentifier", + "src": "30458:3:62" + }, + { + "name": "length", + "nativeSrc": "30463:6:62", + "nodeType": "YulIdentifier", + "src": "30463:6:62" + } + ], + "functionName": { + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "30404:34:62", + "nodeType": "YulIdentifier", + "src": "30404:34:62" + }, + "nativeSrc": "30404:66:62", + "nodeType": "YulFunctionCall", + "src": "30404:66:62" + }, + "nativeSrc": "30404:66:62", + "nodeType": "YulExpressionStatement", + "src": "30404:66:62" + }, + { + "nativeSrc": "30479:23:62", + "nodeType": "YulAssignment", + "src": "30479:23:62", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "30490:3:62", + "nodeType": "YulIdentifier", + "src": "30490:3:62" + }, + { + "name": "length", + "nativeSrc": "30495:6:62", + "nodeType": "YulIdentifier", + "src": "30495:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "30486:3:62", + "nodeType": "YulIdentifier", + "src": "30486:3:62" + }, + "nativeSrc": "30486:16:62", + "nodeType": "YulFunctionCall", + "src": "30486:16:62" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "30479:3:62", + "nodeType": "YulIdentifier", + "src": "30479:3:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "30221:287:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "30334:3:62", + "nodeType": "YulTypedName", + "src": "30334:3:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "30339:6:62", + "nodeType": "YulTypedName", + "src": "30339:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "30350:3:62", + "nodeType": "YulTypedName", + "src": "30350:3:62", + "type": "" + } + ], + "src": "30221:287:62" + }, + { + "body": { + "nativeSrc": "30602:170:62", + "nodeType": "YulBlock", + "src": "30602:170:62", + "statements": [ + { + "body": { + "nativeSrc": "30648:16:62", + "nodeType": "YulBlock", + "src": "30648:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "30657:1:62", + "nodeType": "YulLiteral", + "src": "30657:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "30660:1:62", + "nodeType": "YulLiteral", + "src": "30660:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "30650:6:62", + "nodeType": "YulIdentifier", + "src": "30650:6:62" + }, + "nativeSrc": "30650:12:62", + "nodeType": "YulFunctionCall", + "src": "30650:12:62" + }, + "nativeSrc": "30650:12:62", + "nodeType": "YulExpressionStatement", + "src": "30650:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "30623:7:62", + "nodeType": "YulIdentifier", + "src": "30623:7:62" + }, + { + "name": "headStart", + "nativeSrc": "30632:9:62", + "nodeType": "YulIdentifier", + "src": "30632:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "30619:3:62", + "nodeType": "YulIdentifier", + "src": "30619:3:62" + }, + "nativeSrc": "30619:23:62", + "nodeType": "YulFunctionCall", + "src": "30619:23:62" + }, + { + "kind": "number", + "nativeSrc": "30644:2:62", + "nodeType": "YulLiteral", + "src": "30644:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "30615:3:62", + "nodeType": "YulIdentifier", + "src": "30615:3:62" + }, + "nativeSrc": "30615:32:62", + "nodeType": "YulFunctionCall", + "src": "30615:32:62" + }, + "nativeSrc": "30612:52:62", + "nodeType": "YulIf", + "src": "30612:52:62" + }, + { + "nativeSrc": "30673:29:62", + "nodeType": "YulVariableDeclaration", + "src": "30673:29:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "30692:9:62", + "nodeType": "YulIdentifier", + "src": "30692:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "30686:5:62", + "nodeType": "YulIdentifier", + "src": "30686:5:62" + }, + "nativeSrc": "30686:16:62", + "nodeType": "YulFunctionCall", + "src": "30686:16:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "30677:5:62", + "nodeType": "YulTypedName", + "src": "30677:5:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "30736:5:62", + "nodeType": "YulIdentifier", + "src": "30736:5:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "30711:24:62", + "nodeType": "YulIdentifier", + "src": "30711:24:62" + }, + "nativeSrc": "30711:31:62", + "nodeType": "YulFunctionCall", + "src": "30711:31:62" + }, + "nativeSrc": "30711:31:62", + "nodeType": "YulExpressionStatement", + "src": "30711:31:62" + }, + { + "nativeSrc": "30751:15:62", + "nodeType": "YulAssignment", + "src": "30751:15:62", + "value": { + "name": "value", + "nativeSrc": "30761:5:62", + "nodeType": "YulIdentifier", + "src": "30761:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "30751:6:62", + "nodeType": "YulIdentifier", + "src": "30751:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address_payable_fromMemory", + "nativeSrc": "30513:259:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "30568:9:62", + "nodeType": "YulTypedName", + "src": "30568:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "30579:7:62", + "nodeType": "YulTypedName", + "src": "30579:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "30591:6:62", + "nodeType": "YulTypedName", + "src": "30591:6:62", + "type": "" + } + ], + "src": "30513:259:62" + }, + { + "body": { + "nativeSrc": "30960:884:62", + "nodeType": "YulBlock", + "src": "30960:884:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "30977:9:62", + "nodeType": "YulIdentifier", + "src": "30977:9:62" + }, + { + "kind": "number", + "nativeSrc": "30988:2:62", + "nodeType": "YulLiteral", + "src": "30988:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "30970:6:62", + "nodeType": "YulIdentifier", + "src": "30970:6:62" + }, + "nativeSrc": "30970:21:62", + "nodeType": "YulFunctionCall", + "src": "30970:21:62" + }, + "nativeSrc": "30970:21:62", + "nodeType": "YulExpressionStatement", + "src": "30970:21:62" + }, + { + "nativeSrc": "31000:33:62", + "nodeType": "YulVariableDeclaration", + "src": "31000:33:62", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "31026:6:62", + "nodeType": "YulIdentifier", + "src": "31026:6:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "31020:5:62", + "nodeType": "YulIdentifier", + "src": "31020:5:62" + }, + "nativeSrc": "31020:13:62", + "nodeType": "YulFunctionCall", + "src": "31020:13:62" + }, + "variables": [ + { + "name": "memberValue0", + "nativeSrc": "31004:12:62", + "nodeType": "YulTypedName", + "src": "31004:12:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "31053:9:62", + "nodeType": "YulIdentifier", + "src": "31053:9:62" + }, + { + "kind": "number", + "nativeSrc": "31064:2:62", + "nodeType": "YulLiteral", + "src": "31064:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31049:3:62", + "nodeType": "YulIdentifier", + "src": "31049:3:62" + }, + "nativeSrc": "31049:18:62", + "nodeType": "YulFunctionCall", + "src": "31049:18:62" + }, + { + "kind": "number", + "nativeSrc": "31069:2:62", + "nodeType": "YulLiteral", + "src": "31069:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "31042:6:62", + "nodeType": "YulIdentifier", + "src": "31042:6:62" + }, + "nativeSrc": "31042:30:62", + "nodeType": "YulFunctionCall", + "src": "31042:30:62" + }, + "nativeSrc": "31042:30:62", + "nodeType": "YulExpressionStatement", + "src": "31042:30:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "31092:9:62", + "nodeType": "YulIdentifier", + "src": "31092:9:62" + }, + { + "kind": "number", + "nativeSrc": "31103:3:62", + "nodeType": "YulLiteral", + "src": "31103:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31088:3:62", + "nodeType": "YulIdentifier", + "src": "31088:3:62" + }, + "nativeSrc": "31088:19:62", + "nodeType": "YulFunctionCall", + "src": "31088:19:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nativeSrc": "31119:12:62", + "nodeType": "YulIdentifier", + "src": "31119:12:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "31113:5:62", + "nodeType": "YulIdentifier", + "src": "31113:5:62" + }, + "nativeSrc": "31113:19:62", + "nodeType": "YulFunctionCall", + "src": "31113:19:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "31142:3:62", + "nodeType": "YulLiteral", + "src": "31142:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "31147:1:62", + "nodeType": "YulLiteral", + "src": "31147:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "31138:3:62", + "nodeType": "YulIdentifier", + "src": "31138:3:62" + }, + "nativeSrc": "31138:11:62", + "nodeType": "YulFunctionCall", + "src": "31138:11:62" + }, + { + "kind": "number", + "nativeSrc": "31151:1:62", + "nodeType": "YulLiteral", + "src": "31151:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "31134:3:62", + "nodeType": "YulIdentifier", + "src": "31134:3:62" + }, + "nativeSrc": "31134:19:62", + "nodeType": "YulFunctionCall", + "src": "31134:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "31109:3:62", + "nodeType": "YulIdentifier", + "src": "31109:3:62" + }, + "nativeSrc": "31109:45:62", + "nodeType": "YulFunctionCall", + "src": "31109:45:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "31081:6:62", + "nodeType": "YulIdentifier", + "src": "31081:6:62" + }, + "nativeSrc": "31081:74:62", + "nodeType": "YulFunctionCall", + "src": "31081:74:62" + }, + "nativeSrc": "31081:74:62", + "nodeType": "YulExpressionStatement", + "src": "31081:74:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "31175:9:62", + "nodeType": "YulIdentifier", + "src": "31175:9:62" + }, + { + "kind": "number", + "nativeSrc": "31186:4:62", + "nodeType": "YulLiteral", + "src": "31186:4:62", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31171:3:62", + "nodeType": "YulIdentifier", + "src": "31171:3:62" + }, + "nativeSrc": "31171:20:62", + "nodeType": "YulFunctionCall", + "src": "31171:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nativeSrc": "31207:12:62", + "nodeType": "YulIdentifier", + "src": "31207:12:62" + }, + { + "kind": "number", + "nativeSrc": "31221:4:62", + "nodeType": "YulLiteral", + "src": "31221:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31203:3:62", + "nodeType": "YulIdentifier", + "src": "31203:3:62" + }, + "nativeSrc": "31203:23:62", + "nodeType": "YulFunctionCall", + "src": "31203:23:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "31197:5:62", + "nodeType": "YulIdentifier", + "src": "31197:5:62" + }, + "nativeSrc": "31197:30:62", + "nodeType": "YulFunctionCall", + "src": "31197:30:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "31237:3:62", + "nodeType": "YulLiteral", + "src": "31237:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "31242:1:62", + "nodeType": "YulLiteral", + "src": "31242:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "31233:3:62", + "nodeType": "YulIdentifier", + "src": "31233:3:62" + }, + "nativeSrc": "31233:11:62", + "nodeType": "YulFunctionCall", + "src": "31233:11:62" + }, + { + "kind": "number", + "nativeSrc": "31246:1:62", + "nodeType": "YulLiteral", + "src": "31246:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "31229:3:62", + "nodeType": "YulIdentifier", + "src": "31229:3:62" + }, + "nativeSrc": "31229:19:62", + "nodeType": "YulFunctionCall", + "src": "31229:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "31193:3:62", + "nodeType": "YulIdentifier", + "src": "31193:3:62" + }, + "nativeSrc": "31193:56:62", + "nodeType": "YulFunctionCall", + "src": "31193:56:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "31164:6:62", + "nodeType": "YulIdentifier", + "src": "31164:6:62" + }, + "nativeSrc": "31164:86:62", + "nodeType": "YulFunctionCall", + "src": "31164:86:62" + }, + "nativeSrc": "31164:86:62", + "nodeType": "YulExpressionStatement", + "src": "31164:86:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "31270:9:62", + "nodeType": "YulIdentifier", + "src": "31270:9:62" + }, + { + "kind": "number", + "nativeSrc": "31281:3:62", + "nodeType": "YulLiteral", + "src": "31281:3:62", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31266:3:62", + "nodeType": "YulIdentifier", + "src": "31266:3:62" + }, + "nativeSrc": "31266:19:62", + "nodeType": "YulFunctionCall", + "src": "31266:19:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nativeSrc": "31301:12:62", + "nodeType": "YulIdentifier", + "src": "31301:12:62" + }, + { + "kind": "number", + "nativeSrc": "31315:2:62", + "nodeType": "YulLiteral", + "src": "31315:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31297:3:62", + "nodeType": "YulIdentifier", + "src": "31297:3:62" + }, + "nativeSrc": "31297:21:62", + "nodeType": "YulFunctionCall", + "src": "31297:21:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "31291:5:62", + "nodeType": "YulIdentifier", + "src": "31291:5:62" + }, + "nativeSrc": "31291:28:62", + "nodeType": "YulFunctionCall", + "src": "31291:28:62" + }, + { + "kind": "number", + "nativeSrc": "31321:18:62", + "nodeType": "YulLiteral", + "src": "31321:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "31287:3:62", + "nodeType": "YulIdentifier", + "src": "31287:3:62" + }, + "nativeSrc": "31287:53:62", + "nodeType": "YulFunctionCall", + "src": "31287:53:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "31259:6:62", + "nodeType": "YulIdentifier", + "src": "31259:6:62" + }, + "nativeSrc": "31259:82:62", + "nodeType": "YulFunctionCall", + "src": "31259:82:62" + }, + "nativeSrc": "31259:82:62", + "nodeType": "YulExpressionStatement", + "src": "31259:82:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "31361:9:62", + "nodeType": "YulIdentifier", + "src": "31361:9:62" + }, + { + "kind": "number", + "nativeSrc": "31372:3:62", + "nodeType": "YulLiteral", + "src": "31372:3:62", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31357:3:62", + "nodeType": "YulIdentifier", + "src": "31357:3:62" + }, + "nativeSrc": "31357:19:62", + "nodeType": "YulFunctionCall", + "src": "31357:19:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nativeSrc": "31392:12:62", + "nodeType": "YulIdentifier", + "src": "31392:12:62" + }, + { + "kind": "number", + "nativeSrc": "31406:4:62", + "nodeType": "YulLiteral", + "src": "31406:4:62", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31388:3:62", + "nodeType": "YulIdentifier", + "src": "31388:3:62" + }, + "nativeSrc": "31388:23:62", + "nodeType": "YulFunctionCall", + "src": "31388:23:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "31382:5:62", + "nodeType": "YulIdentifier", + "src": "31382:5:62" + }, + "nativeSrc": "31382:30:62", + "nodeType": "YulFunctionCall", + "src": "31382:30:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "31422:3:62", + "nodeType": "YulLiteral", + "src": "31422:3:62", + "type": "", + "value": "128" + }, + { + "kind": "number", + "nativeSrc": "31427:1:62", + "nodeType": "YulLiteral", + "src": "31427:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "31418:3:62", + "nodeType": "YulIdentifier", + "src": "31418:3:62" + }, + "nativeSrc": "31418:11:62", + "nodeType": "YulFunctionCall", + "src": "31418:11:62" + }, + { + "kind": "number", + "nativeSrc": "31431:1:62", + "nodeType": "YulLiteral", + "src": "31431:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "31414:3:62", + "nodeType": "YulIdentifier", + "src": "31414:3:62" + }, + "nativeSrc": "31414:19:62", + "nodeType": "YulFunctionCall", + "src": "31414:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "31378:3:62", + "nodeType": "YulIdentifier", + "src": "31378:3:62" + }, + "nativeSrc": "31378:56:62", + "nodeType": "YulFunctionCall", + "src": "31378:56:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "31350:6:62", + "nodeType": "YulIdentifier", + "src": "31350:6:62" + }, + "nativeSrc": "31350:85:62", + "nodeType": "YulFunctionCall", + "src": "31350:85:62" + }, + "nativeSrc": "31350:85:62", + "nodeType": "YulExpressionStatement", + "src": "31350:85:62" + }, + { + "nativeSrc": "31444:51:62", + "nodeType": "YulVariableDeclaration", + "src": "31444:51:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nativeSrc": "31476:12:62", + "nodeType": "YulIdentifier", + "src": "31476:12:62" + }, + { + "kind": "number", + "nativeSrc": "31490:3:62", + "nodeType": "YulLiteral", + "src": "31490:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31472:3:62", + "nodeType": "YulIdentifier", + "src": "31472:3:62" + }, + "nativeSrc": "31472:22:62", + "nodeType": "YulFunctionCall", + "src": "31472:22:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "31466:5:62", + "nodeType": "YulIdentifier", + "src": "31466:5:62" + }, + "nativeSrc": "31466:29:62", + "nodeType": "YulFunctionCall", + "src": "31466:29:62" + }, + "variables": [ + { + "name": "memberValue0_1", + "nativeSrc": "31448:14:62", + "nodeType": "YulTypedName", + "src": "31448:14:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "31515:9:62", + "nodeType": "YulIdentifier", + "src": "31515:9:62" + }, + { + "kind": "number", + "nativeSrc": "31526:3:62", + "nodeType": "YulLiteral", + "src": "31526:3:62", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31511:3:62", + "nodeType": "YulIdentifier", + "src": "31511:3:62" + }, + "nativeSrc": "31511:19:62", + "nodeType": "YulFunctionCall", + "src": "31511:19:62" + }, + { + "kind": "number", + "nativeSrc": "31532:4:62", + "nodeType": "YulLiteral", + "src": "31532:4:62", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "31504:6:62", + "nodeType": "YulIdentifier", + "src": "31504:6:62" + }, + "nativeSrc": "31504:33:62", + "nodeType": "YulFunctionCall", + "src": "31504:33:62" + }, + "nativeSrc": "31504:33:62", + "nodeType": "YulExpressionStatement", + "src": "31504:33:62" + }, + { + "nativeSrc": "31546:65:62", + "nodeType": "YulVariableDeclaration", + "src": "31546:65:62", + "value": { + "arguments": [ + { + "name": "memberValue0_1", + "nativeSrc": "31575:14:62", + "nodeType": "YulIdentifier", + "src": "31575:14:62" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "31595:9:62", + "nodeType": "YulIdentifier", + "src": "31595:9:62" + }, + { + "kind": "number", + "nativeSrc": "31606:3:62", + "nodeType": "YulLiteral", + "src": "31606:3:62", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31591:3:62", + "nodeType": "YulIdentifier", + "src": "31591:3:62" + }, + "nativeSrc": "31591:19:62", + "nodeType": "YulFunctionCall", + "src": "31591:19:62" + } + ], + "functionName": { + "name": "abi_encode_string", + "nativeSrc": "31557:17:62", + "nodeType": "YulIdentifier", + "src": "31557:17:62" + }, + "nativeSrc": "31557:54:62", + "nodeType": "YulFunctionCall", + "src": "31557:54:62" + }, + "variables": [ + { + "name": "end", + "nativeSrc": "31550:3:62", + "nodeType": "YulTypedName", + "src": "31550:3:62", + "type": "" + } + ] + }, + { + "nativeSrc": "31620:46:62", + "nodeType": "YulVariableDeclaration", + "src": "31620:46:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "31652:6:62", + "nodeType": "YulIdentifier", + "src": "31652:6:62" + }, + { + "kind": "number", + "nativeSrc": "31660:4:62", + "nodeType": "YulLiteral", + "src": "31660:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31648:3:62", + "nodeType": "YulIdentifier", + "src": "31648:3:62" + }, + "nativeSrc": "31648:17:62", + "nodeType": "YulFunctionCall", + "src": "31648:17:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "31642:5:62", + "nodeType": "YulIdentifier", + "src": "31642:5:62" + }, + "nativeSrc": "31642:24:62", + "nodeType": "YulFunctionCall", + "src": "31642:24:62" + }, + "variables": [ + { + "name": "memberValue0_2", + "nativeSrc": "31624:14:62", + "nodeType": "YulTypedName", + "src": "31624:14:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "31686:9:62", + "nodeType": "YulIdentifier", + "src": "31686:9:62" + }, + { + "kind": "number", + "nativeSrc": "31697:4:62", + "nodeType": "YulLiteral", + "src": "31697:4:62", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31682:3:62", + "nodeType": "YulIdentifier", + "src": "31682:3:62" + }, + "nativeSrc": "31682:20:62", + "nodeType": "YulFunctionCall", + "src": "31682:20:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nativeSrc": "31712:3:62", + "nodeType": "YulIdentifier", + "src": "31712:3:62" + }, + { + "name": "headStart", + "nativeSrc": "31717:9:62", + "nodeType": "YulIdentifier", + "src": "31717:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "31708:3:62", + "nodeType": "YulIdentifier", + "src": "31708:3:62" + }, + "nativeSrc": "31708:19:62", + "nodeType": "YulFunctionCall", + "src": "31708:19:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "31733:2:62", + "nodeType": "YulLiteral", + "src": "31733:2:62", + "type": "", + "value": "63" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "31729:3:62", + "nodeType": "YulIdentifier", + "src": "31729:3:62" + }, + "nativeSrc": "31729:7:62", + "nodeType": "YulFunctionCall", + "src": "31729:7:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31704:3:62", + "nodeType": "YulIdentifier", + "src": "31704:3:62" + }, + "nativeSrc": "31704:33:62", + "nodeType": "YulFunctionCall", + "src": "31704:33:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "31675:6:62", + "nodeType": "YulIdentifier", + "src": "31675:6:62" + }, + "nativeSrc": "31675:63:62", + "nodeType": "YulFunctionCall", + "src": "31675:63:62" + }, + "nativeSrc": "31675:63:62", + "nodeType": "YulExpressionStatement", + "src": "31675:63:62" + }, + { + "nativeSrc": "31747:46:62", + "nodeType": "YulAssignment", + "src": "31747:46:62", + "value": { + "arguments": [ + { + "name": "memberValue0_2", + "nativeSrc": "31773:14:62", + "nodeType": "YulIdentifier", + "src": "31773:14:62" + }, + { + "name": "end", + "nativeSrc": "31789:3:62", + "nodeType": "YulIdentifier", + "src": "31789:3:62" + } + ], + "functionName": { + "name": "abi_encode_string", + "nativeSrc": "31755:17:62", + "nodeType": "YulIdentifier", + "src": "31755:17:62" + }, + "nativeSrc": "31755:38:62", + "nodeType": "YulFunctionCall", + "src": "31755:38:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "31747:4:62", + "nodeType": "YulIdentifier", + "src": "31747:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "31813:9:62", + "nodeType": "YulIdentifier", + "src": "31813:9:62" + }, + { + "kind": "number", + "nativeSrc": "31824:4:62", + "nodeType": "YulLiteral", + "src": "31824:4:62", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "31809:3:62", + "nodeType": "YulIdentifier", + "src": "31809:3:62" + }, + "nativeSrc": "31809:20:62", + "nodeType": "YulFunctionCall", + "src": "31809:20:62" + }, + { + "name": "value1", + "nativeSrc": "31831:6:62", + "nodeType": "YulIdentifier", + "src": "31831:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "31802:6:62", + "nodeType": "YulIdentifier", + "src": "31802:6:62" + }, + "nativeSrc": "31802:36:62", + "nodeType": "YulFunctionCall", + "src": "31802:36:62" + }, + "nativeSrc": "31802:36:62", + "nodeType": "YulExpressionStatement", + "src": "31802:36:62" + } + ] + }, + "name": "abi_encode_tuple_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__to_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__fromStack_reversed", + "nativeSrc": "30777:1067:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "30921:9:62", + "nodeType": "YulTypedName", + "src": "30921:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "30932:6:62", + "nodeType": "YulTypedName", + "src": "30932:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "30940:6:62", + "nodeType": "YulTypedName", + "src": "30940:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "30951:4:62", + "nodeType": "YulTypedName", + "src": "30951:4:62", + "type": "" + } + ], + "src": "30777:1067:62" + }, + { + "body": { + "nativeSrc": "32011:164:62", + "nodeType": "YulBlock", + "src": "32011:164:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "32050:6:62", + "nodeType": "YulIdentifier", + "src": "32050:6:62" + }, + { + "name": "headStart", + "nativeSrc": "32058:9:62", + "nodeType": "YulIdentifier", + "src": "32058:9:62" + } + ], + "functionName": { + "name": "abi_encode_enum_PaymentTypes", + "nativeSrc": "32021:28:62", + "nodeType": "YulIdentifier", + "src": "32021:28:62" + }, + "nativeSrc": "32021:47:62", + "nodeType": "YulFunctionCall", + "src": "32021:47:62" + }, + "nativeSrc": "32021:47:62", + "nodeType": "YulExpressionStatement", + "src": "32021:47:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "32088:9:62", + "nodeType": "YulIdentifier", + "src": "32088:9:62" + }, + { + "kind": "number", + "nativeSrc": "32099:2:62", + "nodeType": "YulLiteral", + "src": "32099:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "32084:3:62", + "nodeType": "YulIdentifier", + "src": "32084:3:62" + }, + "nativeSrc": "32084:18:62", + "nodeType": "YulFunctionCall", + "src": "32084:18:62" + }, + { + "kind": "number", + "nativeSrc": "32104:2:62", + "nodeType": "YulLiteral", + "src": "32104:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "32077:6:62", + "nodeType": "YulIdentifier", + "src": "32077:6:62" + }, + "nativeSrc": "32077:30:62", + "nodeType": "YulFunctionCall", + "src": "32077:30:62" + }, + "nativeSrc": "32077:30:62", + "nodeType": "YulExpressionStatement", + "src": "32077:30:62" + }, + { + "nativeSrc": "32116:53:62", + "nodeType": "YulAssignment", + "src": "32116:53:62", + "value": { + "arguments": [ + { + "name": "value1", + "nativeSrc": "32142:6:62", + "nodeType": "YulIdentifier", + "src": "32142:6:62" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "32154:9:62", + "nodeType": "YulIdentifier", + "src": "32154:9:62" + }, + { + "kind": "number", + "nativeSrc": "32165:2:62", + "nodeType": "YulLiteral", + "src": "32165:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "32150:3:62", + "nodeType": "YulIdentifier", + "src": "32150:3:62" + }, + "nativeSrc": "32150:18:62", + "nodeType": "YulFunctionCall", + "src": "32150:18:62" + } + ], + "functionName": { + "name": "abi_encode_string", + "nativeSrc": "32124:17:62", + "nodeType": "YulIdentifier", + "src": "32124:17:62" + }, + "nativeSrc": "32124:45:62", + "nodeType": "YulFunctionCall", + "src": "32124:45:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "32116:4:62", + "nodeType": "YulIdentifier", + "src": "32116:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_enum$_PaymentTypes_$2166_t_bytes_memory_ptr__to_t_uint8_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "31849:326:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "31972:9:62", + "nodeType": "YulTypedName", + "src": "31972:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "31983:6:62", + "nodeType": "YulTypedName", + "src": "31983:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "31991:6:62", + "nodeType": "YulTypedName", + "src": "31991:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "32002:4:62", + "nodeType": "YulTypedName", + "src": "32002:4:62", + "type": "" + } + ], + "src": "31849:326:62" + }, + { + "body": { + "nativeSrc": "32337:162:62", + "nodeType": "YulBlock", + "src": "32337:162:62", + "statements": [ + { + "nativeSrc": "32347:26:62", + "nodeType": "YulAssignment", + "src": "32347:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "32359:9:62", + "nodeType": "YulIdentifier", + "src": "32359:9:62" + }, + { + "kind": "number", + "nativeSrc": "32370:2:62", + "nodeType": "YulLiteral", + "src": "32370:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "32355:3:62", + "nodeType": "YulIdentifier", + "src": "32355:3:62" + }, + "nativeSrc": "32355:18:62", + "nodeType": "YulFunctionCall", + "src": "32355:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "32347:4:62", + "nodeType": "YulIdentifier", + "src": "32347:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "32389:9:62", + "nodeType": "YulIdentifier", + "src": "32389:9:62" + }, + { + "name": "value0", + "nativeSrc": "32400:6:62", + "nodeType": "YulIdentifier", + "src": "32400:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "32382:6:62", + "nodeType": "YulIdentifier", + "src": "32382:6:62" + }, + "nativeSrc": "32382:25:62", + "nodeType": "YulFunctionCall", + "src": "32382:25:62" + }, + "nativeSrc": "32382:25:62", + "nodeType": "YulExpressionStatement", + "src": "32382:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "32427:9:62", + "nodeType": "YulIdentifier", + "src": "32427:9:62" + }, + { + "kind": "number", + "nativeSrc": "32438:2:62", + "nodeType": "YulLiteral", + "src": "32438:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "32423:3:62", + "nodeType": "YulIdentifier", + "src": "32423:3:62" + }, + "nativeSrc": "32423:18:62", + "nodeType": "YulFunctionCall", + "src": "32423:18:62" + }, + { + "name": "value1", + "nativeSrc": "32443:6:62", + "nodeType": "YulIdentifier", + "src": "32443:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "32416:6:62", + "nodeType": "YulIdentifier", + "src": "32416:6:62" + }, + "nativeSrc": "32416:34:62", + "nodeType": "YulFunctionCall", + "src": "32416:34:62" + }, + "nativeSrc": "32416:34:62", + "nodeType": "YulExpressionStatement", + "src": "32416:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "32470:9:62", + "nodeType": "YulIdentifier", + "src": "32470:9:62" + }, + { + "kind": "number", + "nativeSrc": "32481:2:62", + "nodeType": "YulLiteral", + "src": "32481:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "32466:3:62", + "nodeType": "YulIdentifier", + "src": "32466:3:62" + }, + "nativeSrc": "32466:18:62", + "nodeType": "YulFunctionCall", + "src": "32466:18:62" + }, + { + "name": "value2", + "nativeSrc": "32486:6:62", + "nodeType": "YulIdentifier", + "src": "32486:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "32459:6:62", + "nodeType": "YulIdentifier", + "src": "32459:6:62" + }, + "nativeSrc": "32459:34:62", + "nodeType": "YulFunctionCall", + "src": "32459:34:62" + }, + "nativeSrc": "32459:34:62", + "nodeType": "YulExpressionStatement", + "src": "32459:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "32180:319:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "32290:9:62", + "nodeType": "YulTypedName", + "src": "32290:9:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "32301:6:62", + "nodeType": "YulTypedName", + "src": "32301:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "32309:6:62", + "nodeType": "YulTypedName", + "src": "32309:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "32317:6:62", + "nodeType": "YulTypedName", + "src": "32317:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "32328:4:62", + "nodeType": "YulTypedName", + "src": "32328:4:62", + "type": "" + } + ], + "src": "32180:319:62" + }, + { + "body": { + "nativeSrc": "32556:116:62", + "nodeType": "YulBlock", + "src": "32556:116:62", + "statements": [ + { + "nativeSrc": "32566:20:62", + "nodeType": "YulAssignment", + "src": "32566:20:62", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "32581:1:62", + "nodeType": "YulIdentifier", + "src": "32581:1:62" + }, + { + "name": "y", + "nativeSrc": "32584:1:62", + "nodeType": "YulIdentifier", + "src": "32584:1:62" + } + ], + "functionName": { + "name": "mul", + "nativeSrc": "32577:3:62", + "nodeType": "YulIdentifier", + "src": "32577:3:62" + }, + "nativeSrc": "32577:9:62", + "nodeType": "YulFunctionCall", + "src": "32577:9:62" + }, + "variableNames": [ + { + "name": "product", + "nativeSrc": "32566:7:62", + "nodeType": "YulIdentifier", + "src": "32566:7:62" + } + ] + }, + { + "body": { + "nativeSrc": "32644:22:62", + "nodeType": "YulBlock", + "src": "32644:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nativeSrc": "32646:16:62", + "nodeType": "YulIdentifier", + "src": "32646:16:62" + }, + "nativeSrc": "32646:18:62", + "nodeType": "YulFunctionCall", + "src": "32646:18:62" + }, + "nativeSrc": "32646:18:62", + "nodeType": "YulExpressionStatement", + "src": "32646:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "x", + "nativeSrc": "32615:1:62", + "nodeType": "YulIdentifier", + "src": "32615:1:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "32608:6:62", + "nodeType": "YulIdentifier", + "src": "32608:6:62" + }, + "nativeSrc": "32608:9:62", + "nodeType": "YulFunctionCall", + "src": "32608:9:62" + }, + { + "arguments": [ + { + "name": "y", + "nativeSrc": "32622:1:62", + "nodeType": "YulIdentifier", + "src": "32622:1:62" + }, + { + "arguments": [ + { + "name": "product", + "nativeSrc": "32629:7:62", + "nodeType": "YulIdentifier", + "src": "32629:7:62" + }, + { + "name": "x", + "nativeSrc": "32638:1:62", + "nodeType": "YulIdentifier", + "src": "32638:1:62" + } + ], + "functionName": { + "name": "div", + "nativeSrc": "32625:3:62", + "nodeType": "YulIdentifier", + "src": "32625:3:62" + }, + "nativeSrc": "32625:15:62", + "nodeType": "YulFunctionCall", + "src": "32625:15:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "32619:2:62", + "nodeType": "YulIdentifier", + "src": "32619:2:62" + }, + "nativeSrc": "32619:22:62", + "nodeType": "YulFunctionCall", + "src": "32619:22:62" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "32605:2:62", + "nodeType": "YulIdentifier", + "src": "32605:2:62" + }, + "nativeSrc": "32605:37:62", + "nodeType": "YulFunctionCall", + "src": "32605:37:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "32598:6:62", + "nodeType": "YulIdentifier", + "src": "32598:6:62" + }, + "nativeSrc": "32598:45:62", + "nodeType": "YulFunctionCall", + "src": "32598:45:62" + }, + "nativeSrc": "32595:71:62", + "nodeType": "YulIf", + "src": "32595:71:62" + } + ] + }, + "name": "checked_mul_t_uint256", + "nativeSrc": "32504:168:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nativeSrc": "32535:1:62", + "nodeType": "YulTypedName", + "src": "32535:1:62", + "type": "" + }, + { + "name": "y", + "nativeSrc": "32538:1:62", + "nodeType": "YulTypedName", + "src": "32538:1:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "product", + "nativeSrc": "32544:7:62", + "nodeType": "YulTypedName", + "src": "32544:7:62", + "type": "" + } + ], + "src": "32504:168:62" + }, + { + "body": { + "nativeSrc": "32806:119:62", + "nodeType": "YulBlock", + "src": "32806:119:62", + "statements": [ + { + "nativeSrc": "32816:26:62", + "nodeType": "YulAssignment", + "src": "32816:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "32828:9:62", + "nodeType": "YulIdentifier", + "src": "32828:9:62" + }, + { + "kind": "number", + "nativeSrc": "32839:2:62", + "nodeType": "YulLiteral", + "src": "32839:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "32824:3:62", + "nodeType": "YulIdentifier", + "src": "32824:3:62" + }, + "nativeSrc": "32824:18:62", + "nodeType": "YulFunctionCall", + "src": "32824:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "32816:4:62", + "nodeType": "YulIdentifier", + "src": "32816:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "32858:9:62", + "nodeType": "YulIdentifier", + "src": "32858:9:62" + }, + { + "name": "value0", + "nativeSrc": "32869:6:62", + "nodeType": "YulIdentifier", + "src": "32869:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "32851:6:62", + "nodeType": "YulIdentifier", + "src": "32851:6:62" + }, + "nativeSrc": "32851:25:62", + "nodeType": "YulFunctionCall", + "src": "32851:25:62" + }, + "nativeSrc": "32851:25:62", + "nodeType": "YulExpressionStatement", + "src": "32851:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "32896:9:62", + "nodeType": "YulIdentifier", + "src": "32896:9:62" + }, + { + "kind": "number", + "nativeSrc": "32907:2:62", + "nodeType": "YulLiteral", + "src": "32907:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "32892:3:62", + "nodeType": "YulIdentifier", + "src": "32892:3:62" + }, + "nativeSrc": "32892:18:62", + "nodeType": "YulFunctionCall", + "src": "32892:18:62" + }, + { + "name": "value1", + "nativeSrc": "32912:6:62", + "nodeType": "YulIdentifier", + "src": "32912:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "32885:6:62", + "nodeType": "YulIdentifier", + "src": "32885:6:62" + }, + "nativeSrc": "32885:34:62", + "nodeType": "YulFunctionCall", + "src": "32885:34:62" + }, + "nativeSrc": "32885:34:62", + "nodeType": "YulExpressionStatement", + "src": "32885:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed", + "nativeSrc": "32677:248:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "32767:9:62", + "nodeType": "YulTypedName", + "src": "32767:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "32778:6:62", + "nodeType": "YulTypedName", + "src": "32778:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "32786:6:62", + "nodeType": "YulTypedName", + "src": "32786:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "32797:4:62", + "nodeType": "YulTypedName", + "src": "32797:4:62", + "type": "" + } + ], + "src": "32677:248:62" + }, + { + "body": { + "nativeSrc": "33102:236:62", + "nodeType": "YulBlock", + "src": "33102:236:62", + "statements": [ + { + "nativeSrc": "33112:26:62", + "nodeType": "YulAssignment", + "src": "33112:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "33124:9:62", + "nodeType": "YulIdentifier", + "src": "33124:9:62" + }, + { + "kind": "number", + "nativeSrc": "33135:2:62", + "nodeType": "YulLiteral", + "src": "33135:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "33120:3:62", + "nodeType": "YulIdentifier", + "src": "33120:3:62" + }, + "nativeSrc": "33120:18:62", + "nodeType": "YulFunctionCall", + "src": "33120:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "33112:4:62", + "nodeType": "YulIdentifier", + "src": "33112:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "33154:9:62", + "nodeType": "YulIdentifier", + "src": "33154:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "33169:6:62", + "nodeType": "YulIdentifier", + "src": "33169:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "33185:3:62", + "nodeType": "YulLiteral", + "src": "33185:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "33190:1:62", + "nodeType": "YulLiteral", + "src": "33190:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "33181:3:62", + "nodeType": "YulIdentifier", + "src": "33181:3:62" + }, + "nativeSrc": "33181:11:62", + "nodeType": "YulFunctionCall", + "src": "33181:11:62" + }, + { + "kind": "number", + "nativeSrc": "33194:1:62", + "nodeType": "YulLiteral", + "src": "33194:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "33177:3:62", + "nodeType": "YulIdentifier", + "src": "33177:3:62" + }, + "nativeSrc": "33177:19:62", + "nodeType": "YulFunctionCall", + "src": "33177:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "33165:3:62", + "nodeType": "YulIdentifier", + "src": "33165:3:62" + }, + "nativeSrc": "33165:32:62", + "nodeType": "YulFunctionCall", + "src": "33165:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "33147:6:62", + "nodeType": "YulIdentifier", + "src": "33147:6:62" + }, + "nativeSrc": "33147:51:62", + "nodeType": "YulFunctionCall", + "src": "33147:51:62" + }, + "nativeSrc": "33147:51:62", + "nodeType": "YulExpressionStatement", + "src": "33147:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "33218:9:62", + "nodeType": "YulIdentifier", + "src": "33218:9:62" + }, + { + "kind": "number", + "nativeSrc": "33229:2:62", + "nodeType": "YulLiteral", + "src": "33229:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "33214:3:62", + "nodeType": "YulIdentifier", + "src": "33214:3:62" + }, + "nativeSrc": "33214:18:62", + "nodeType": "YulFunctionCall", + "src": "33214:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "33238:6:62", + "nodeType": "YulIdentifier", + "src": "33238:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "33254:3:62", + "nodeType": "YulLiteral", + "src": "33254:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "33259:1:62", + "nodeType": "YulLiteral", + "src": "33259:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "33250:3:62", + "nodeType": "YulIdentifier", + "src": "33250:3:62" + }, + "nativeSrc": "33250:11:62", + "nodeType": "YulFunctionCall", + "src": "33250:11:62" + }, + { + "kind": "number", + "nativeSrc": "33263:1:62", + "nodeType": "YulLiteral", + "src": "33263:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "33246:3:62", + "nodeType": "YulIdentifier", + "src": "33246:3:62" + }, + "nativeSrc": "33246:19:62", + "nodeType": "YulFunctionCall", + "src": "33246:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "33234:3:62", + "nodeType": "YulIdentifier", + "src": "33234:3:62" + }, + "nativeSrc": "33234:32:62", + "nodeType": "YulFunctionCall", + "src": "33234:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "33207:6:62", + "nodeType": "YulIdentifier", + "src": "33207:6:62" + }, + "nativeSrc": "33207:60:62", + "nodeType": "YulFunctionCall", + "src": "33207:60:62" + }, + "nativeSrc": "33207:60:62", + "nodeType": "YulExpressionStatement", + "src": "33207:60:62" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nativeSrc": "33305:6:62", + "nodeType": "YulIdentifier", + "src": "33305:6:62" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "33317:9:62", + "nodeType": "YulIdentifier", + "src": "33317:9:62" + }, + { + "kind": "number", + "nativeSrc": "33328:2:62", + "nodeType": "YulLiteral", + "src": "33328:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "33313:3:62", + "nodeType": "YulIdentifier", + "src": "33313:3:62" + }, + "nativeSrc": "33313:18:62", + "nodeType": "YulFunctionCall", + "src": "33313:18:62" + } + ], + "functionName": { + "name": "abi_encode_enum_PaymentTypes", + "nativeSrc": "33276:28:62", + "nodeType": "YulIdentifier", + "src": "33276:28:62" + }, + "nativeSrc": "33276:56:62", + "nodeType": "YulFunctionCall", + "src": "33276:56:62" + }, + "nativeSrc": "33276:56:62", + "nodeType": "YulExpressionStatement", + "src": "33276:56:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_enum$_PaymentTypes_$2166__to_t_address_t_address_t_uint8__fromStack_reversed", + "nativeSrc": "32930:408:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "33055:9:62", + "nodeType": "YulTypedName", + "src": "33055:9:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "33066:6:62", + "nodeType": "YulTypedName", + "src": "33066:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "33074:6:62", + "nodeType": "YulTypedName", + "src": "33074:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "33082:6:62", + "nodeType": "YulTypedName", + "src": "33082:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "33093:4:62", + "nodeType": "YulTypedName", + "src": "33093:4:62", + "type": "" + } + ], + "src": "32930:408:62" + }, + { + "body": { + "nativeSrc": "33456:708:62", + "nodeType": "YulBlock", + "src": "33456:708:62", + "statements": [ + { + "nativeSrc": "33466:43:62", + "nodeType": "YulVariableDeclaration", + "src": "33466:43:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "33484:7:62", + "nodeType": "YulIdentifier", + "src": "33484:7:62" + }, + { + "name": "headStart", + "nativeSrc": "33493:9:62", + "nodeType": "YulIdentifier", + "src": "33493:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "33480:3:62", + "nodeType": "YulIdentifier", + "src": "33480:3:62" + }, + "nativeSrc": "33480:23:62", + "nodeType": "YulFunctionCall", + "src": "33480:23:62" + }, + { + "kind": "number", + "nativeSrc": "33505:3:62", + "nodeType": "YulLiteral", + "src": "33505:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "33476:3:62", + "nodeType": "YulIdentifier", + "src": "33476:3:62" + }, + "nativeSrc": "33476:33:62", + "nodeType": "YulFunctionCall", + "src": "33476:33:62" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "33470:2:62", + "nodeType": "YulTypedName", + "src": "33470:2:62", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "33524:16:62", + "nodeType": "YulBlock", + "src": "33524:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "33533:1:62", + "nodeType": "YulLiteral", + "src": "33533:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "33536:1:62", + "nodeType": "YulLiteral", + "src": "33536:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "33526:6:62", + "nodeType": "YulIdentifier", + "src": "33526:6:62" + }, + "nativeSrc": "33526:12:62", + "nodeType": "YulFunctionCall", + "src": "33526:12:62" + }, + "nativeSrc": "33526:12:62", + "nodeType": "YulExpressionStatement", + "src": "33526:12:62" + } + ] + }, + "condition": { + "name": "_1", + "nativeSrc": "33521:2:62", + "nodeType": "YulIdentifier", + "src": "33521:2:62" + }, + "nativeSrc": "33518:22:62", + "nodeType": "YulIf", + "src": "33518:22:62" + }, + { + "nativeSrc": "33549:7:62", + "nodeType": "YulAssignment", + "src": "33549:7:62", + "value": { + "kind": "number", + "nativeSrc": "33555:1:62", + "nodeType": "YulLiteral", + "src": "33555:1:62", + "type": "", + "value": "0" + }, + "variableNames": [ + { + "name": "_1", + "nativeSrc": "33549:2:62", + "nodeType": "YulIdentifier", + "src": "33549:2:62" + } + ] + }, + { + "nativeSrc": "33565:30:62", + "nodeType": "YulVariableDeclaration", + "src": "33565:30:62", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_memory", + "nativeSrc": "33578:15:62", + "nodeType": "YulIdentifier", + "src": "33578:15:62" + }, + "nativeSrc": "33578:17:62", + "nodeType": "YulFunctionCall", + "src": "33578:17:62" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "33569:5:62", + "nodeType": "YulTypedName", + "src": "33569:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "33604:17:62", + "nodeType": "YulVariableDeclaration", + "src": "33604:17:62", + "value": { + "name": "_1", + "nativeSrc": "33619:2:62", + "nodeType": "YulIdentifier", + "src": "33619:2:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "33608:7:62", + "nodeType": "YulTypedName", + "src": "33608:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "33630:27:62", + "nodeType": "YulAssignment", + "src": "33630:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "33647:9:62", + "nodeType": "YulIdentifier", + "src": "33647:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "33641:5:62", + "nodeType": "YulIdentifier", + "src": "33641:5:62" + }, + "nativeSrc": "33641:16:62", + "nodeType": "YulFunctionCall", + "src": "33641:16:62" + }, + "variableNames": [ + { + "name": "value_1", + "nativeSrc": "33630:7:62", + "nodeType": "YulIdentifier", + "src": "33630:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nativeSrc": "33673:5:62", + "nodeType": "YulIdentifier", + "src": "33673:5:62" + }, + { + "name": "value_1", + "nativeSrc": "33680:7:62", + "nodeType": "YulIdentifier", + "src": "33680:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "33666:6:62", + "nodeType": "YulIdentifier", + "src": "33666:6:62" + }, + "nativeSrc": "33666:22:62", + "nodeType": "YulFunctionCall", + "src": "33666:22:62" + }, + "nativeSrc": "33666:22:62", + "nodeType": "YulExpressionStatement", + "src": "33666:22:62" + }, + { + "nativeSrc": "33697:17:62", + "nodeType": "YulVariableDeclaration", + "src": "33697:17:62", + "value": { + "name": "_1", + "nativeSrc": "33712:2:62", + "nodeType": "YulIdentifier", + "src": "33712:2:62" + }, + "variables": [ + { + "name": "value_2", + "nativeSrc": "33701:7:62", + "nodeType": "YulTypedName", + "src": "33701:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "33723:36:62", + "nodeType": "YulAssignment", + "src": "33723:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "33744:9:62", + "nodeType": "YulIdentifier", + "src": "33744:9:62" + }, + { + "kind": "number", + "nativeSrc": "33755:2:62", + "nodeType": "YulLiteral", + "src": "33755:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "33740:3:62", + "nodeType": "YulIdentifier", + "src": "33740:3:62" + }, + "nativeSrc": "33740:18:62", + "nodeType": "YulFunctionCall", + "src": "33740:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "33734:5:62", + "nodeType": "YulIdentifier", + "src": "33734:5:62" + }, + "nativeSrc": "33734:25:62", + "nodeType": "YulFunctionCall", + "src": "33734:25:62" + }, + "variableNames": [ + { + "name": "value_2", + "nativeSrc": "33723:7:62", + "nodeType": "YulIdentifier", + "src": "33723:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "33779:5:62", + "nodeType": "YulIdentifier", + "src": "33779:5:62" + }, + { + "kind": "number", + "nativeSrc": "33786:2:62", + "nodeType": "YulLiteral", + "src": "33786:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "33775:3:62", + "nodeType": "YulIdentifier", + "src": "33775:3:62" + }, + "nativeSrc": "33775:14:62", + "nodeType": "YulFunctionCall", + "src": "33775:14:62" + }, + { + "name": "value_2", + "nativeSrc": "33791:7:62", + "nodeType": "YulIdentifier", + "src": "33791:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "33768:6:62", + "nodeType": "YulIdentifier", + "src": "33768:6:62" + }, + "nativeSrc": "33768:31:62", + "nodeType": "YulFunctionCall", + "src": "33768:31:62" + }, + "nativeSrc": "33768:31:62", + "nodeType": "YulExpressionStatement", + "src": "33768:31:62" + }, + { + "nativeSrc": "33808:17:62", + "nodeType": "YulVariableDeclaration", + "src": "33808:17:62", + "value": { + "name": "_1", + "nativeSrc": "33823:2:62", + "nodeType": "YulIdentifier", + "src": "33823:2:62" + }, + "variables": [ + { + "name": "value_3", + "nativeSrc": "33812:7:62", + "nodeType": "YulTypedName", + "src": "33812:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "33834:36:62", + "nodeType": "YulAssignment", + "src": "33834:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "33855:9:62", + "nodeType": "YulIdentifier", + "src": "33855:9:62" + }, + { + "kind": "number", + "nativeSrc": "33866:2:62", + "nodeType": "YulLiteral", + "src": "33866:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "33851:3:62", + "nodeType": "YulIdentifier", + "src": "33851:3:62" + }, + "nativeSrc": "33851:18:62", + "nodeType": "YulFunctionCall", + "src": "33851:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "33845:5:62", + "nodeType": "YulIdentifier", + "src": "33845:5:62" + }, + "nativeSrc": "33845:25:62", + "nodeType": "YulFunctionCall", + "src": "33845:25:62" + }, + "variableNames": [ + { + "name": "value_3", + "nativeSrc": "33834:7:62", + "nodeType": "YulIdentifier", + "src": "33834:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "33890:5:62", + "nodeType": "YulIdentifier", + "src": "33890:5:62" + }, + { + "kind": "number", + "nativeSrc": "33897:2:62", + "nodeType": "YulLiteral", + "src": "33897:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "33886:3:62", + "nodeType": "YulIdentifier", + "src": "33886:3:62" + }, + "nativeSrc": "33886:14:62", + "nodeType": "YulFunctionCall", + "src": "33886:14:62" + }, + { + "name": "value_3", + "nativeSrc": "33902:7:62", + "nodeType": "YulIdentifier", + "src": "33902:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "33879:6:62", + "nodeType": "YulIdentifier", + "src": "33879:6:62" + }, + "nativeSrc": "33879:31:62", + "nodeType": "YulFunctionCall", + "src": "33879:31:62" + }, + "nativeSrc": "33879:31:62", + "nodeType": "YulExpressionStatement", + "src": "33879:31:62" + }, + { + "nativeSrc": "33919:17:62", + "nodeType": "YulVariableDeclaration", + "src": "33919:17:62", + "value": { + "name": "_1", + "nativeSrc": "33934:2:62", + "nodeType": "YulIdentifier", + "src": "33934:2:62" + }, + "variables": [ + { + "name": "value_4", + "nativeSrc": "33923:7:62", + "nodeType": "YulTypedName", + "src": "33923:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "33945:36:62", + "nodeType": "YulAssignment", + "src": "33945:36:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "33966:9:62", + "nodeType": "YulIdentifier", + "src": "33966:9:62" + }, + { + "kind": "number", + "nativeSrc": "33977:2:62", + "nodeType": "YulLiteral", + "src": "33977:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "33962:3:62", + "nodeType": "YulIdentifier", + "src": "33962:3:62" + }, + "nativeSrc": "33962:18:62", + "nodeType": "YulFunctionCall", + "src": "33962:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "33956:5:62", + "nodeType": "YulIdentifier", + "src": "33956:5:62" + }, + "nativeSrc": "33956:25:62", + "nodeType": "YulFunctionCall", + "src": "33956:25:62" + }, + "variableNames": [ + { + "name": "value_4", + "nativeSrc": "33945:7:62", + "nodeType": "YulIdentifier", + "src": "33945:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "34001:5:62", + "nodeType": "YulIdentifier", + "src": "34001:5:62" + }, + { + "kind": "number", + "nativeSrc": "34008:2:62", + "nodeType": "YulLiteral", + "src": "34008:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "33997:3:62", + "nodeType": "YulIdentifier", + "src": "33997:3:62" + }, + "nativeSrc": "33997:14:62", + "nodeType": "YulFunctionCall", + "src": "33997:14:62" + }, + { + "name": "value_4", + "nativeSrc": "34013:7:62", + "nodeType": "YulIdentifier", + "src": "34013:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "33990:6:62", + "nodeType": "YulIdentifier", + "src": "33990:6:62" + }, + "nativeSrc": "33990:31:62", + "nodeType": "YulFunctionCall", + "src": "33990:31:62" + }, + "nativeSrc": "33990:31:62", + "nodeType": "YulExpressionStatement", + "src": "33990:31:62" + }, + { + "nativeSrc": "34030:17:62", + "nodeType": "YulVariableDeclaration", + "src": "34030:17:62", + "value": { + "name": "_1", + "nativeSrc": "34045:2:62", + "nodeType": "YulIdentifier", + "src": "34045:2:62" + }, + "variables": [ + { + "name": "value_5", + "nativeSrc": "34034:7:62", + "nodeType": "YulTypedName", + "src": "34034:7:62", + "type": "" + } + ] + }, + { + "nativeSrc": "34056:37:62", + "nodeType": "YulAssignment", + "src": "34056:37:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34077:9:62", + "nodeType": "YulIdentifier", + "src": "34077:9:62" + }, + { + "kind": "number", + "nativeSrc": "34088:3:62", + "nodeType": "YulLiteral", + "src": "34088:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34073:3:62", + "nodeType": "YulIdentifier", + "src": "34073:3:62" + }, + "nativeSrc": "34073:19:62", + "nodeType": "YulFunctionCall", + "src": "34073:19:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "34067:5:62", + "nodeType": "YulIdentifier", + "src": "34067:5:62" + }, + "nativeSrc": "34067:26:62", + "nodeType": "YulFunctionCall", + "src": "34067:26:62" + }, + "variableNames": [ + { + "name": "value_5", + "nativeSrc": "34056:7:62", + "nodeType": "YulIdentifier", + "src": "34056:7:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "34113:5:62", + "nodeType": "YulIdentifier", + "src": "34113:5:62" + }, + { + "kind": "number", + "nativeSrc": "34120:3:62", + "nodeType": "YulLiteral", + "src": "34120:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34109:3:62", + "nodeType": "YulIdentifier", + "src": "34109:3:62" + }, + "nativeSrc": "34109:15:62", + "nodeType": "YulFunctionCall", + "src": "34109:15:62" + }, + { + "name": "value_5", + "nativeSrc": "34126:7:62", + "nodeType": "YulIdentifier", + "src": "34126:7:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "34102:6:62", + "nodeType": "YulIdentifier", + "src": "34102:6:62" + }, + "nativeSrc": "34102:32:62", + "nodeType": "YulFunctionCall", + "src": "34102:32:62" + }, + "nativeSrc": "34102:32:62", + "nodeType": "YulExpressionStatement", + "src": "34102:32:62" + }, + { + "nativeSrc": "34143:15:62", + "nodeType": "YulAssignment", + "src": "34143:15:62", + "value": { + "name": "value", + "nativeSrc": "34153:5:62", + "nodeType": "YulIdentifier", + "src": "34153:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "34143:6:62", + "nodeType": "YulIdentifier", + "src": "34143:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory", + "nativeSrc": "33343:821:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "33422:9:62", + "nodeType": "YulTypedName", + "src": "33422:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "33433:7:62", + "nodeType": "YulTypedName", + "src": "33433:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "33445:6:62", + "nodeType": "YulTypedName", + "src": "33445:6:62", + "type": "" + } + ], + "src": "33343:821:62" + }, + { + "body": { + "nativeSrc": "34326:214:62", + "nodeType": "YulBlock", + "src": "34326:214:62", + "statements": [ + { + "nativeSrc": "34336:26:62", + "nodeType": "YulAssignment", + "src": "34336:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34348:9:62", + "nodeType": "YulIdentifier", + "src": "34348:9:62" + }, + { + "kind": "number", + "nativeSrc": "34359:2:62", + "nodeType": "YulLiteral", + "src": "34359:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34344:3:62", + "nodeType": "YulIdentifier", + "src": "34344:3:62" + }, + "nativeSrc": "34344:18:62", + "nodeType": "YulFunctionCall", + "src": "34344:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "34336:4:62", + "nodeType": "YulIdentifier", + "src": "34336:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34378:9:62", + "nodeType": "YulIdentifier", + "src": "34378:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "34393:6:62", + "nodeType": "YulIdentifier", + "src": "34393:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "34409:3:62", + "nodeType": "YulLiteral", + "src": "34409:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "34414:1:62", + "nodeType": "YulLiteral", + "src": "34414:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "34405:3:62", + "nodeType": "YulIdentifier", + "src": "34405:3:62" + }, + "nativeSrc": "34405:11:62", + "nodeType": "YulFunctionCall", + "src": "34405:11:62" + }, + { + "kind": "number", + "nativeSrc": "34418:1:62", + "nodeType": "YulLiteral", + "src": "34418:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "34401:3:62", + "nodeType": "YulIdentifier", + "src": "34401:3:62" + }, + "nativeSrc": "34401:19:62", + "nodeType": "YulFunctionCall", + "src": "34401:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "34389:3:62", + "nodeType": "YulIdentifier", + "src": "34389:3:62" + }, + "nativeSrc": "34389:32:62", + "nodeType": "YulFunctionCall", + "src": "34389:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "34371:6:62", + "nodeType": "YulIdentifier", + "src": "34371:6:62" + }, + "nativeSrc": "34371:51:62", + "nodeType": "YulFunctionCall", + "src": "34371:51:62" + }, + "nativeSrc": "34371:51:62", + "nodeType": "YulExpressionStatement", + "src": "34371:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34442:9:62", + "nodeType": "YulIdentifier", + "src": "34442:9:62" + }, + { + "kind": "number", + "nativeSrc": "34453:2:62", + "nodeType": "YulLiteral", + "src": "34453:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34438:3:62", + "nodeType": "YulIdentifier", + "src": "34438:3:62" + }, + "nativeSrc": "34438:18:62", + "nodeType": "YulFunctionCall", + "src": "34438:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "34462:6:62", + "nodeType": "YulIdentifier", + "src": "34462:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "34478:3:62", + "nodeType": "YulLiteral", + "src": "34478:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "34483:1:62", + "nodeType": "YulLiteral", + "src": "34483:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "34474:3:62", + "nodeType": "YulIdentifier", + "src": "34474:3:62" + }, + "nativeSrc": "34474:11:62", + "nodeType": "YulFunctionCall", + "src": "34474:11:62" + }, + { + "kind": "number", + "nativeSrc": "34487:1:62", + "nodeType": "YulLiteral", + "src": "34487:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "34470:3:62", + "nodeType": "YulIdentifier", + "src": "34470:3:62" + }, + "nativeSrc": "34470:19:62", + "nodeType": "YulFunctionCall", + "src": "34470:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "34458:3:62", + "nodeType": "YulIdentifier", + "src": "34458:3:62" + }, + "nativeSrc": "34458:32:62", + "nodeType": "YulFunctionCall", + "src": "34458:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "34431:6:62", + "nodeType": "YulIdentifier", + "src": "34431:6:62" + }, + "nativeSrc": "34431:60:62", + "nodeType": "YulFunctionCall", + "src": "34431:60:62" + }, + "nativeSrc": "34431:60:62", + "nodeType": "YulExpressionStatement", + "src": "34431:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34511:9:62", + "nodeType": "YulIdentifier", + "src": "34511:9:62" + }, + { + "kind": "number", + "nativeSrc": "34522:2:62", + "nodeType": "YulLiteral", + "src": "34522:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34507:3:62", + "nodeType": "YulIdentifier", + "src": "34507:3:62" + }, + "nativeSrc": "34507:18:62", + "nodeType": "YulFunctionCall", + "src": "34507:18:62" + }, + { + "name": "value2", + "nativeSrc": "34527:6:62", + "nodeType": "YulIdentifier", + "src": "34527:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "34500:6:62", + "nodeType": "YulIdentifier", + "src": "34500:6:62" + }, + "nativeSrc": "34500:34:62", + "nodeType": "YulFunctionCall", + "src": "34500:34:62" + }, + "nativeSrc": "34500:34:62", + "nodeType": "YulExpressionStatement", + "src": "34500:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", + "nativeSrc": "34169:371:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "34279:9:62", + "nodeType": "YulTypedName", + "src": "34279:9:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "34290:6:62", + "nodeType": "YulTypedName", + "src": "34290:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "34298:6:62", + "nodeType": "YulTypedName", + "src": "34298:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "34306:6:62", + "nodeType": "YulTypedName", + "src": "34306:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "34317:4:62", + "nodeType": "YulTypedName", + "src": "34317:4:62", + "type": "" + } + ], + "src": "34169:371:62" + }, + { + "body": { + "nativeSrc": "34758:250:62", + "nodeType": "YulBlock", + "src": "34758:250:62", + "statements": [ + { + "nativeSrc": "34768:27:62", + "nodeType": "YulAssignment", + "src": "34768:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34780:9:62", + "nodeType": "YulIdentifier", + "src": "34780:9:62" + }, + { + "kind": "number", + "nativeSrc": "34791:3:62", + "nodeType": "YulLiteral", + "src": "34791:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34776:3:62", + "nodeType": "YulIdentifier", + "src": "34776:3:62" + }, + "nativeSrc": "34776:19:62", + "nodeType": "YulFunctionCall", + "src": "34776:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "34768:4:62", + "nodeType": "YulIdentifier", + "src": "34768:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34811:9:62", + "nodeType": "YulIdentifier", + "src": "34811:9:62" + }, + { + "name": "value0", + "nativeSrc": "34822:6:62", + "nodeType": "YulIdentifier", + "src": "34822:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "34804:6:62", + "nodeType": "YulIdentifier", + "src": "34804:6:62" + }, + "nativeSrc": "34804:25:62", + "nodeType": "YulFunctionCall", + "src": "34804:25:62" + }, + "nativeSrc": "34804:25:62", + "nodeType": "YulExpressionStatement", + "src": "34804:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34849:9:62", + "nodeType": "YulIdentifier", + "src": "34849:9:62" + }, + { + "kind": "number", + "nativeSrc": "34860:2:62", + "nodeType": "YulLiteral", + "src": "34860:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34845:3:62", + "nodeType": "YulIdentifier", + "src": "34845:3:62" + }, + "nativeSrc": "34845:18:62", + "nodeType": "YulFunctionCall", + "src": "34845:18:62" + }, + { + "name": "value1", + "nativeSrc": "34865:6:62", + "nodeType": "YulIdentifier", + "src": "34865:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "34838:6:62", + "nodeType": "YulIdentifier", + "src": "34838:6:62" + }, + "nativeSrc": "34838:34:62", + "nodeType": "YulFunctionCall", + "src": "34838:34:62" + }, + "nativeSrc": "34838:34:62", + "nodeType": "YulExpressionStatement", + "src": "34838:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34892:9:62", + "nodeType": "YulIdentifier", + "src": "34892:9:62" + }, + { + "kind": "number", + "nativeSrc": "34903:2:62", + "nodeType": "YulLiteral", + "src": "34903:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34888:3:62", + "nodeType": "YulIdentifier", + "src": "34888:3:62" + }, + "nativeSrc": "34888:18:62", + "nodeType": "YulFunctionCall", + "src": "34888:18:62" + }, + { + "name": "value2", + "nativeSrc": "34908:6:62", + "nodeType": "YulIdentifier", + "src": "34908:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "34881:6:62", + "nodeType": "YulIdentifier", + "src": "34881:6:62" + }, + "nativeSrc": "34881:34:62", + "nodeType": "YulFunctionCall", + "src": "34881:34:62" + }, + "nativeSrc": "34881:34:62", + "nodeType": "YulExpressionStatement", + "src": "34881:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34935:9:62", + "nodeType": "YulIdentifier", + "src": "34935:9:62" + }, + { + "kind": "number", + "nativeSrc": "34946:2:62", + "nodeType": "YulLiteral", + "src": "34946:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34931:3:62", + "nodeType": "YulIdentifier", + "src": "34931:3:62" + }, + "nativeSrc": "34931:18:62", + "nodeType": "YulFunctionCall", + "src": "34931:18:62" + }, + { + "name": "value3", + "nativeSrc": "34951:6:62", + "nodeType": "YulIdentifier", + "src": "34951:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "34924:6:62", + "nodeType": "YulIdentifier", + "src": "34924:6:62" + }, + "nativeSrc": "34924:34:62", + "nodeType": "YulFunctionCall", + "src": "34924:34:62" + }, + "nativeSrc": "34924:34:62", + "nodeType": "YulExpressionStatement", + "src": "34924:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "34978:9:62", + "nodeType": "YulIdentifier", + "src": "34978:9:62" + }, + { + "kind": "number", + "nativeSrc": "34989:3:62", + "nodeType": "YulLiteral", + "src": "34989:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "34974:3:62", + "nodeType": "YulIdentifier", + "src": "34974:3:62" + }, + "nativeSrc": "34974:19:62", + "nodeType": "YulFunctionCall", + "src": "34974:19:62" + }, + { + "name": "value4", + "nativeSrc": "34995:6:62", + "nodeType": "YulIdentifier", + "src": "34995:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "34967:6:62", + "nodeType": "YulIdentifier", + "src": "34967:6:62" + }, + "nativeSrc": "34967:35:62", + "nodeType": "YulFunctionCall", + "src": "34967:35:62" + }, + "nativeSrc": "34967:35:62", + "nodeType": "YulExpressionStatement", + "src": "34967:35:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__fromStack_reversed", + "nativeSrc": "34545:463:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "34695:9:62", + "nodeType": "YulTypedName", + "src": "34695:9:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "34706:6:62", + "nodeType": "YulTypedName", + "src": "34706:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "34714:6:62", + "nodeType": "YulTypedName", + "src": "34714:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "34722:6:62", + "nodeType": "YulTypedName", + "src": "34722:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "34730:6:62", + "nodeType": "YulTypedName", + "src": "34730:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "34738:6:62", + "nodeType": "YulTypedName", + "src": "34738:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "34749:4:62", + "nodeType": "YulTypedName", + "src": "34749:4:62", + "type": "" + } + ], + "src": "34545:463:62" + }, + { + "body": { + "nativeSrc": "35170:214:62", + "nodeType": "YulBlock", + "src": "35170:214:62", + "statements": [ + { + "nativeSrc": "35180:26:62", + "nodeType": "YulAssignment", + "src": "35180:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "35192:9:62", + "nodeType": "YulIdentifier", + "src": "35192:9:62" + }, + { + "kind": "number", + "nativeSrc": "35203:2:62", + "nodeType": "YulLiteral", + "src": "35203:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "35188:3:62", + "nodeType": "YulIdentifier", + "src": "35188:3:62" + }, + "nativeSrc": "35188:18:62", + "nodeType": "YulFunctionCall", + "src": "35188:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "35180:4:62", + "nodeType": "YulIdentifier", + "src": "35180:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "35222:9:62", + "nodeType": "YulIdentifier", + "src": "35222:9:62" + }, + { + "name": "value0", + "nativeSrc": "35233:6:62", + "nodeType": "YulIdentifier", + "src": "35233:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "35215:6:62", + "nodeType": "YulIdentifier", + "src": "35215:6:62" + }, + "nativeSrc": "35215:25:62", + "nodeType": "YulFunctionCall", + "src": "35215:25:62" + }, + "nativeSrc": "35215:25:62", + "nodeType": "YulExpressionStatement", + "src": "35215:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "35260:9:62", + "nodeType": "YulIdentifier", + "src": "35260:9:62" + }, + { + "kind": "number", + "nativeSrc": "35271:2:62", + "nodeType": "YulLiteral", + "src": "35271:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "35256:3:62", + "nodeType": "YulIdentifier", + "src": "35256:3:62" + }, + "nativeSrc": "35256:18:62", + "nodeType": "YulFunctionCall", + "src": "35256:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "35280:6:62", + "nodeType": "YulIdentifier", + "src": "35280:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "35296:3:62", + "nodeType": "YulLiteral", + "src": "35296:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "35301:1:62", + "nodeType": "YulLiteral", + "src": "35301:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "35292:3:62", + "nodeType": "YulIdentifier", + "src": "35292:3:62" + }, + "nativeSrc": "35292:11:62", + "nodeType": "YulFunctionCall", + "src": "35292:11:62" + }, + { + "kind": "number", + "nativeSrc": "35305:1:62", + "nodeType": "YulLiteral", + "src": "35305:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "35288:3:62", + "nodeType": "YulIdentifier", + "src": "35288:3:62" + }, + "nativeSrc": "35288:19:62", + "nodeType": "YulFunctionCall", + "src": "35288:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "35276:3:62", + "nodeType": "YulIdentifier", + "src": "35276:3:62" + }, + "nativeSrc": "35276:32:62", + "nodeType": "YulFunctionCall", + "src": "35276:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "35249:6:62", + "nodeType": "YulIdentifier", + "src": "35249:6:62" + }, + "nativeSrc": "35249:60:62", + "nodeType": "YulFunctionCall", + "src": "35249:60:62" + }, + "nativeSrc": "35249:60:62", + "nodeType": "YulExpressionStatement", + "src": "35249:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "35329:9:62", + "nodeType": "YulIdentifier", + "src": "35329:9:62" + }, + { + "kind": "number", + "nativeSrc": "35340:2:62", + "nodeType": "YulLiteral", + "src": "35340:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "35325:3:62", + "nodeType": "YulIdentifier", + "src": "35325:3:62" + }, + "nativeSrc": "35325:18:62", + "nodeType": "YulFunctionCall", + "src": "35325:18:62" + }, + { + "arguments": [ + { + "name": "value2", + "nativeSrc": "35349:6:62", + "nodeType": "YulIdentifier", + "src": "35349:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "35365:3:62", + "nodeType": "YulLiteral", + "src": "35365:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "35370:1:62", + "nodeType": "YulLiteral", + "src": "35370:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "35361:3:62", + "nodeType": "YulIdentifier", + "src": "35361:3:62" + }, + "nativeSrc": "35361:11:62", + "nodeType": "YulFunctionCall", + "src": "35361:11:62" + }, + { + "kind": "number", + "nativeSrc": "35374:1:62", + "nodeType": "YulLiteral", + "src": "35374:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "35357:3:62", + "nodeType": "YulIdentifier", + "src": "35357:3:62" + }, + "nativeSrc": "35357:19:62", + "nodeType": "YulFunctionCall", + "src": "35357:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "35345:3:62", + "nodeType": "YulIdentifier", + "src": "35345:3:62" + }, + "nativeSrc": "35345:32:62", + "nodeType": "YulFunctionCall", + "src": "35345:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "35318:6:62", + "nodeType": "YulIdentifier", + "src": "35318:6:62" + }, + "nativeSrc": "35318:60:62", + "nodeType": "YulFunctionCall", + "src": "35318:60:62" + }, + "nativeSrc": "35318:60:62", + "nodeType": "YulExpressionStatement", + "src": "35318:60:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_address_t_address__to_t_bytes32_t_address_t_address__fromStack_reversed", + "nativeSrc": "35013:371:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "35123:9:62", + "nodeType": "YulTypedName", + "src": "35123:9:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "35134:6:62", + "nodeType": "YulTypedName", + "src": "35134:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "35142:6:62", + "nodeType": "YulTypedName", + "src": "35142:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "35150:6:62", + "nodeType": "YulTypedName", + "src": "35150:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "35161:4:62", + "nodeType": "YulTypedName", + "src": "35161:4:62", + "type": "" + } + ], + "src": "35013:371:62" + }, + { + "body": { + "nativeSrc": "35592:230:62", + "nodeType": "YulBlock", + "src": "35592:230:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "35609:9:62", + "nodeType": "YulIdentifier", + "src": "35609:9:62" + }, + { + "kind": "number", + "nativeSrc": "35620:3:62", + "nodeType": "YulLiteral", + "src": "35620:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "35602:6:62", + "nodeType": "YulIdentifier", + "src": "35602:6:62" + }, + "nativeSrc": "35602:22:62", + "nodeType": "YulFunctionCall", + "src": "35602:22:62" + }, + "nativeSrc": "35602:22:62", + "nodeType": "YulExpressionStatement", + "src": "35602:22:62" + }, + { + "nativeSrc": "35633:54:62", + "nodeType": "YulAssignment", + "src": "35633:54:62", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "35659:6:62", + "nodeType": "YulIdentifier", + "src": "35659:6:62" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "35671:9:62", + "nodeType": "YulIdentifier", + "src": "35671:9:62" + }, + { + "kind": "number", + "nativeSrc": "35682:3:62", + "nodeType": "YulLiteral", + "src": "35682:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "35667:3:62", + "nodeType": "YulIdentifier", + "src": "35667:3:62" + }, + "nativeSrc": "35667:19:62", + "nodeType": "YulFunctionCall", + "src": "35667:19:62" + } + ], + "functionName": { + "name": "abi_encode_string", + "nativeSrc": "35641:17:62", + "nodeType": "YulIdentifier", + "src": "35641:17:62" + }, + "nativeSrc": "35641:46:62", + "nodeType": "YulFunctionCall", + "src": "35641:46:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "35633:4:62", + "nodeType": "YulIdentifier", + "src": "35633:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "35707:9:62", + "nodeType": "YulIdentifier", + "src": "35707:9:62" + }, + { + "kind": "number", + "nativeSrc": "35718:2:62", + "nodeType": "YulLiteral", + "src": "35718:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "35703:3:62", + "nodeType": "YulIdentifier", + "src": "35703:3:62" + }, + "nativeSrc": "35703:18:62", + "nodeType": "YulFunctionCall", + "src": "35703:18:62" + }, + { + "name": "value1", + "nativeSrc": "35723:6:62", + "nodeType": "YulIdentifier", + "src": "35723:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "35696:6:62", + "nodeType": "YulIdentifier", + "src": "35696:6:62" + }, + "nativeSrc": "35696:34:62", + "nodeType": "YulFunctionCall", + "src": "35696:34:62" + }, + "nativeSrc": "35696:34:62", + "nodeType": "YulExpressionStatement", + "src": "35696:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "35750:9:62", + "nodeType": "YulIdentifier", + "src": "35750:9:62" + }, + { + "kind": "number", + "nativeSrc": "35761:2:62", + "nodeType": "YulLiteral", + "src": "35761:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "35746:3:62", + "nodeType": "YulIdentifier", + "src": "35746:3:62" + }, + "nativeSrc": "35746:18:62", + "nodeType": "YulFunctionCall", + "src": "35746:18:62" + }, + { + "name": "value2", + "nativeSrc": "35766:6:62", + "nodeType": "YulIdentifier", + "src": "35766:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "35739:6:62", + "nodeType": "YulIdentifier", + "src": "35739:6:62" + }, + "nativeSrc": "35739:34:62", + "nodeType": "YulFunctionCall", + "src": "35739:34:62" + }, + "nativeSrc": "35739:34:62", + "nodeType": "YulExpressionStatement", + "src": "35739:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "35793:9:62", + "nodeType": "YulIdentifier", + "src": "35793:9:62" + }, + { + "kind": "number", + "nativeSrc": "35804:2:62", + "nodeType": "YulLiteral", + "src": "35804:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "35789:3:62", + "nodeType": "YulIdentifier", + "src": "35789:3:62" + }, + "nativeSrc": "35789:18:62", + "nodeType": "YulFunctionCall", + "src": "35789:18:62" + }, + { + "name": "value3", + "nativeSrc": "35809:6:62", + "nodeType": "YulIdentifier", + "src": "35809:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "35782:6:62", + "nodeType": "YulIdentifier", + "src": "35782:6:62" + }, + "nativeSrc": "35782:34:62", + "nodeType": "YulFunctionCall", + "src": "35782:34:62" + }, + "nativeSrc": "35782:34:62", + "nodeType": "YulExpressionStatement", + "src": "35782:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__to_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "35389:433:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "35537:9:62", + "nodeType": "YulTypedName", + "src": "35537:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "35548:6:62", + "nodeType": "YulTypedName", + "src": "35548:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "35556:6:62", + "nodeType": "YulTypedName", + "src": "35556:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "35564:6:62", + "nodeType": "YulTypedName", + "src": "35564:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "35572:6:62", + "nodeType": "YulTypedName", + "src": "35572:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "35583:4:62", + "nodeType": "YulTypedName", + "src": "35583:4:62", + "type": "" + } + ], + "src": "35389:433:62" + }, + { + "body": { + "nativeSrc": "35933:266:62", + "nodeType": "YulBlock", + "src": "35933:266:62", + "statements": [ + { + "body": { + "nativeSrc": "35979:16:62", + "nodeType": "YulBlock", + "src": "35979:16:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "35988:1:62", + "nodeType": "YulLiteral", + "src": "35988:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "35991:1:62", + "nodeType": "YulLiteral", + "src": "35991:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "35981:6:62", + "nodeType": "YulIdentifier", + "src": "35981:6:62" + }, + "nativeSrc": "35981:12:62", + "nodeType": "YulFunctionCall", + "src": "35981:12:62" + }, + "nativeSrc": "35981:12:62", + "nodeType": "YulExpressionStatement", + "src": "35981:12:62" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "35954:7:62", + "nodeType": "YulIdentifier", + "src": "35954:7:62" + }, + { + "name": "headStart", + "nativeSrc": "35963:9:62", + "nodeType": "YulIdentifier", + "src": "35963:9:62" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "35950:3:62", + "nodeType": "YulIdentifier", + "src": "35950:3:62" + }, + "nativeSrc": "35950:23:62", + "nodeType": "YulFunctionCall", + "src": "35950:23:62" + }, + { + "kind": "number", + "nativeSrc": "35975:2:62", + "nodeType": "YulLiteral", + "src": "35975:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "35946:3:62", + "nodeType": "YulIdentifier", + "src": "35946:3:62" + }, + "nativeSrc": "35946:32:62", + "nodeType": "YulFunctionCall", + "src": "35946:32:62" + }, + "nativeSrc": "35943:52:62", + "nodeType": "YulIf", + "src": "35943:52:62" + }, + { + "nativeSrc": "36004:14:62", + "nodeType": "YulVariableDeclaration", + "src": "36004:14:62", + "value": { + "kind": "number", + "nativeSrc": "36017:1:62", + "nodeType": "YulLiteral", + "src": "36017:1:62", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "36008:5:62", + "nodeType": "YulTypedName", + "src": "36008:5:62", + "type": "" + } + ] + }, + { + "nativeSrc": "36027:25:62", + "nodeType": "YulAssignment", + "src": "36027:25:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "36042:9:62", + "nodeType": "YulIdentifier", + "src": "36042:9:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "36036:5:62", + "nodeType": "YulIdentifier", + "src": "36036:5:62" + }, + "nativeSrc": "36036:16:62", + "nodeType": "YulFunctionCall", + "src": "36036:16:62" + }, + "variableNames": [ + { + "name": "value", + "nativeSrc": "36027:5:62", + "nodeType": "YulIdentifier", + "src": "36027:5:62" + } + ] + }, + { + "nativeSrc": "36061:15:62", + "nodeType": "YulAssignment", + "src": "36061:15:62", + "value": { + "name": "value", + "nativeSrc": "36071:5:62", + "nodeType": "YulIdentifier", + "src": "36071:5:62" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "36061:6:62", + "nodeType": "YulIdentifier", + "src": "36061:6:62" + } + ] + }, + { + "nativeSrc": "36085:40:62", + "nodeType": "YulVariableDeclaration", + "src": "36085:40:62", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "36110:9:62", + "nodeType": "YulIdentifier", + "src": "36110:9:62" + }, + { + "kind": "number", + "nativeSrc": "36121:2:62", + "nodeType": "YulLiteral", + "src": "36121:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "36106:3:62", + "nodeType": "YulIdentifier", + "src": "36106:3:62" + }, + "nativeSrc": "36106:18:62", + "nodeType": "YulFunctionCall", + "src": "36106:18:62" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "36100:5:62", + "nodeType": "YulIdentifier", + "src": "36100:5:62" + }, + "nativeSrc": "36100:25:62", + "nodeType": "YulFunctionCall", + "src": "36100:25:62" + }, + "variables": [ + { + "name": "value_1", + "nativeSrc": "36089:7:62", + "nodeType": "YulTypedName", + "src": "36089:7:62", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nativeSrc": "36159:7:62", + "nodeType": "YulIdentifier", + "src": "36159:7:62" + } + ], + "functionName": { + "name": "validator_revert_address", + "nativeSrc": "36134:24:62", + "nodeType": "YulIdentifier", + "src": "36134:24:62" + }, + "nativeSrc": "36134:33:62", + "nodeType": "YulFunctionCall", + "src": "36134:33:62" + }, + "nativeSrc": "36134:33:62", + "nodeType": "YulExpressionStatement", + "src": "36134:33:62" + }, + { + "nativeSrc": "36176:17:62", + "nodeType": "YulAssignment", + "src": "36176:17:62", + "value": { + "name": "value_1", + "nativeSrc": "36186:7:62", + "nodeType": "YulIdentifier", + "src": "36186:7:62" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "36176:6:62", + "nodeType": "YulIdentifier", + "src": "36176:6:62" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_address_payable_fromMemory", + "nativeSrc": "35827:372:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "35891:9:62", + "nodeType": "YulTypedName", + "src": "35891:9:62", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "35902:7:62", + "nodeType": "YulTypedName", + "src": "35902:7:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "35914:6:62", + "nodeType": "YulTypedName", + "src": "35914:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "35922:6:62", + "nodeType": "YulTypedName", + "src": "35922:6:62", + "type": "" + } + ], + "src": "35827:372:62" + }, + { + "body": { + "nativeSrc": "36333:145:62", + "nodeType": "YulBlock", + "src": "36333:145:62", + "statements": [ + { + "nativeSrc": "36343:26:62", + "nodeType": "YulAssignment", + "src": "36343:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "36355:9:62", + "nodeType": "YulIdentifier", + "src": "36355:9:62" + }, + { + "kind": "number", + "nativeSrc": "36366:2:62", + "nodeType": "YulLiteral", + "src": "36366:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "36351:3:62", + "nodeType": "YulIdentifier", + "src": "36351:3:62" + }, + "nativeSrc": "36351:18:62", + "nodeType": "YulFunctionCall", + "src": "36351:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "36343:4:62", + "nodeType": "YulIdentifier", + "src": "36343:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "36385:9:62", + "nodeType": "YulIdentifier", + "src": "36385:9:62" + }, + { + "name": "value0", + "nativeSrc": "36396:6:62", + "nodeType": "YulIdentifier", + "src": "36396:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "36378:6:62", + "nodeType": "YulIdentifier", + "src": "36378:6:62" + }, + "nativeSrc": "36378:25:62", + "nodeType": "YulFunctionCall", + "src": "36378:25:62" + }, + "nativeSrc": "36378:25:62", + "nodeType": "YulExpressionStatement", + "src": "36378:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "36423:9:62", + "nodeType": "YulIdentifier", + "src": "36423:9:62" + }, + { + "kind": "number", + "nativeSrc": "36434:2:62", + "nodeType": "YulLiteral", + "src": "36434:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "36419:3:62", + "nodeType": "YulIdentifier", + "src": "36419:3:62" + }, + "nativeSrc": "36419:18:62", + "nodeType": "YulFunctionCall", + "src": "36419:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "36443:6:62", + "nodeType": "YulIdentifier", + "src": "36443:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "36459:3:62", + "nodeType": "YulLiteral", + "src": "36459:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "36464:1:62", + "nodeType": "YulLiteral", + "src": "36464:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "36455:3:62", + "nodeType": "YulIdentifier", + "src": "36455:3:62" + }, + "nativeSrc": "36455:11:62", + "nodeType": "YulFunctionCall", + "src": "36455:11:62" + }, + { + "kind": "number", + "nativeSrc": "36468:1:62", + "nodeType": "YulLiteral", + "src": "36468:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "36451:3:62", + "nodeType": "YulIdentifier", + "src": "36451:3:62" + }, + "nativeSrc": "36451:19:62", + "nodeType": "YulFunctionCall", + "src": "36451:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "36439:3:62", + "nodeType": "YulIdentifier", + "src": "36439:3:62" + }, + "nativeSrc": "36439:32:62", + "nodeType": "YulFunctionCall", + "src": "36439:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "36412:6:62", + "nodeType": "YulIdentifier", + "src": "36412:6:62" + }, + "nativeSrc": "36412:60:62", + "nodeType": "YulFunctionCall", + "src": "36412:60:62" + }, + "nativeSrc": "36412:60:62", + "nodeType": "YulExpressionStatement", + "src": "36412:60:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed", + "nativeSrc": "36204:274:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "36294:9:62", + "nodeType": "YulTypedName", + "src": "36294:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "36305:6:62", + "nodeType": "YulTypedName", + "src": "36305:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "36313:6:62", + "nodeType": "YulTypedName", + "src": "36313:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "36324:4:62", + "nodeType": "YulTypedName", + "src": "36324:4:62", + "type": "" + } + ], + "src": "36204:274:62" + }, + { + "body": { + "nativeSrc": "36530:89:62", + "nodeType": "YulBlock", + "src": "36530:89:62", + "statements": [ + { + "body": { + "nativeSrc": "36557:22:62", + "nodeType": "YulBlock", + "src": "36557:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nativeSrc": "36559:16:62", + "nodeType": "YulIdentifier", + "src": "36559:16:62" + }, + "nativeSrc": "36559:18:62", + "nodeType": "YulFunctionCall", + "src": "36559:18:62" + }, + "nativeSrc": "36559:18:62", + "nodeType": "YulExpressionStatement", + "src": "36559:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "value", + "nativeSrc": "36550:5:62", + "nodeType": "YulIdentifier", + "src": "36550:5:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "36543:6:62", + "nodeType": "YulIdentifier", + "src": "36543:6:62" + }, + "nativeSrc": "36543:13:62", + "nodeType": "YulFunctionCall", + "src": "36543:13:62" + }, + "nativeSrc": "36540:39:62", + "nodeType": "YulIf", + "src": "36540:39:62" + }, + { + "nativeSrc": "36588:25:62", + "nodeType": "YulAssignment", + "src": "36588:25:62", + "value": { + "arguments": [ + { + "name": "value", + "nativeSrc": "36599:5:62", + "nodeType": "YulIdentifier", + "src": "36599:5:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "36610:1:62", + "nodeType": "YulLiteral", + "src": "36610:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "36606:3:62", + "nodeType": "YulIdentifier", + "src": "36606:3:62" + }, + "nativeSrc": "36606:6:62", + "nodeType": "YulFunctionCall", + "src": "36606:6:62" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "36595:3:62", + "nodeType": "YulIdentifier", + "src": "36595:3:62" + }, + "nativeSrc": "36595:18:62", + "nodeType": "YulFunctionCall", + "src": "36595:18:62" + }, + "variableNames": [ + { + "name": "ret", + "nativeSrc": "36588:3:62", + "nodeType": "YulIdentifier", + "src": "36588:3:62" + } + ] + } + ] + }, + "name": "decrement_t_uint256", + "nativeSrc": "36483:136:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "36512:5:62", + "nodeType": "YulTypedName", + "src": "36512:5:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "ret", + "nativeSrc": "36522:3:62", + "nodeType": "YulTypedName", + "src": "36522:3:62", + "type": "" + } + ], + "src": "36483:136:62" + }, + { + "body": { + "nativeSrc": "36671:88:62", + "nodeType": "YulBlock", + "src": "36671:88:62", + "statements": [ + { + "body": { + "nativeSrc": "36702:22:62", + "nodeType": "YulBlock", + "src": "36702:22:62", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nativeSrc": "36704:16:62", + "nodeType": "YulIdentifier", + "src": "36704:16:62" + }, + "nativeSrc": "36704:18:62", + "nodeType": "YulFunctionCall", + "src": "36704:18:62" + }, + "nativeSrc": "36704:18:62", + "nodeType": "YulExpressionStatement", + "src": "36704:18:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "value", + "nativeSrc": "36687:5:62", + "nodeType": "YulIdentifier", + "src": "36687:5:62" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "36698:1:62", + "nodeType": "YulLiteral", + "src": "36698:1:62", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "36694:3:62", + "nodeType": "YulIdentifier", + "src": "36694:3:62" + }, + "nativeSrc": "36694:6:62", + "nodeType": "YulFunctionCall", + "src": "36694:6:62" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "36684:2:62", + "nodeType": "YulIdentifier", + "src": "36684:2:62" + }, + "nativeSrc": "36684:17:62", + "nodeType": "YulFunctionCall", + "src": "36684:17:62" + }, + "nativeSrc": "36681:43:62", + "nodeType": "YulIf", + "src": "36681:43:62" + }, + { + "nativeSrc": "36733:20:62", + "nodeType": "YulAssignment", + "src": "36733:20:62", + "value": { + "arguments": [ + { + "name": "value", + "nativeSrc": "36744:5:62", + "nodeType": "YulIdentifier", + "src": "36744:5:62" + }, + { + "kind": "number", + "nativeSrc": "36751:1:62", + "nodeType": "YulLiteral", + "src": "36751:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "36740:3:62", + "nodeType": "YulIdentifier", + "src": "36740:3:62" + }, + "nativeSrc": "36740:13:62", + "nodeType": "YulFunctionCall", + "src": "36740:13:62" + }, + "variableNames": [ + { + "name": "ret", + "nativeSrc": "36733:3:62", + "nodeType": "YulIdentifier", + "src": "36733:3:62" + } + ] + } + ] + }, + "name": "increment_t_uint256", + "nativeSrc": "36624:135:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "36653:5:62", + "nodeType": "YulTypedName", + "src": "36653:5:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "ret", + "nativeSrc": "36663:3:62", + "nodeType": "YulTypedName", + "src": "36663:3:62", + "type": "" + } + ], + "src": "36624:135:62" + }, + { + "body": { + "nativeSrc": "36919:231:62", + "nodeType": "YulBlock", + "src": "36919:231:62", + "statements": [ + { + "nativeSrc": "36929:26:62", + "nodeType": "YulAssignment", + "src": "36929:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "36941:9:62", + "nodeType": "YulIdentifier", + "src": "36941:9:62" + }, + { + "kind": "number", + "nativeSrc": "36952:2:62", + "nodeType": "YulLiteral", + "src": "36952:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "36937:3:62", + "nodeType": "YulIdentifier", + "src": "36937:3:62" + }, + "nativeSrc": "36937:18:62", + "nodeType": "YulFunctionCall", + "src": "36937:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "36929:4:62", + "nodeType": "YulIdentifier", + "src": "36929:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "36971:9:62", + "nodeType": "YulIdentifier", + "src": "36971:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "36986:6:62", + "nodeType": "YulIdentifier", + "src": "36986:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "37002:3:62", + "nodeType": "YulLiteral", + "src": "37002:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "37007:1:62", + "nodeType": "YulLiteral", + "src": "37007:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "36998:3:62", + "nodeType": "YulIdentifier", + "src": "36998:3:62" + }, + "nativeSrc": "36998:11:62", + "nodeType": "YulFunctionCall", + "src": "36998:11:62" + }, + { + "kind": "number", + "nativeSrc": "37011:1:62", + "nodeType": "YulLiteral", + "src": "37011:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "36994:3:62", + "nodeType": "YulIdentifier", + "src": "36994:3:62" + }, + "nativeSrc": "36994:19:62", + "nodeType": "YulFunctionCall", + "src": "36994:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "36982:3:62", + "nodeType": "YulIdentifier", + "src": "36982:3:62" + }, + "nativeSrc": "36982:32:62", + "nodeType": "YulFunctionCall", + "src": "36982:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "36964:6:62", + "nodeType": "YulIdentifier", + "src": "36964:6:62" + }, + "nativeSrc": "36964:51:62", + "nodeType": "YulFunctionCall", + "src": "36964:51:62" + }, + "nativeSrc": "36964:51:62", + "nodeType": "YulExpressionStatement", + "src": "36964:51:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "37035:9:62", + "nodeType": "YulIdentifier", + "src": "37035:9:62" + }, + { + "kind": "number", + "nativeSrc": "37046:2:62", + "nodeType": "YulLiteral", + "src": "37046:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "37031:3:62", + "nodeType": "YulIdentifier", + "src": "37031:3:62" + }, + "nativeSrc": "37031:18:62", + "nodeType": "YulFunctionCall", + "src": "37031:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "37055:6:62", + "nodeType": "YulIdentifier", + "src": "37055:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "37071:3:62", + "nodeType": "YulLiteral", + "src": "37071:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "37076:1:62", + "nodeType": "YulLiteral", + "src": "37076:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "37067:3:62", + "nodeType": "YulIdentifier", + "src": "37067:3:62" + }, + "nativeSrc": "37067:11:62", + "nodeType": "YulFunctionCall", + "src": "37067:11:62" + }, + { + "kind": "number", + "nativeSrc": "37080:1:62", + "nodeType": "YulLiteral", + "src": "37080:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "37063:3:62", + "nodeType": "YulIdentifier", + "src": "37063:3:62" + }, + "nativeSrc": "37063:19:62", + "nodeType": "YulFunctionCall", + "src": "37063:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "37051:3:62", + "nodeType": "YulIdentifier", + "src": "37051:3:62" + }, + "nativeSrc": "37051:32:62", + "nodeType": "YulFunctionCall", + "src": "37051:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "37024:6:62", + "nodeType": "YulIdentifier", + "src": "37024:6:62" + }, + "nativeSrc": "37024:60:62", + "nodeType": "YulFunctionCall", + "src": "37024:60:62" + }, + "nativeSrc": "37024:60:62", + "nodeType": "YulExpressionStatement", + "src": "37024:60:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "37104:9:62", + "nodeType": "YulIdentifier", + "src": "37104:9:62" + }, + { + "kind": "number", + "nativeSrc": "37115:2:62", + "nodeType": "YulLiteral", + "src": "37115:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "37100:3:62", + "nodeType": "YulIdentifier", + "src": "37100:3:62" + }, + "nativeSrc": "37100:18:62", + "nodeType": "YulFunctionCall", + "src": "37100:18:62" + }, + { + "arguments": [ + { + "name": "value2", + "nativeSrc": "37124:6:62", + "nodeType": "YulIdentifier", + "src": "37124:6:62" + }, + { + "kind": "number", + "nativeSrc": "37132:10:62", + "nodeType": "YulLiteral", + "src": "37132:10:62", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "37120:3:62", + "nodeType": "YulIdentifier", + "src": "37120:3:62" + }, + "nativeSrc": "37120:23:62", + "nodeType": "YulFunctionCall", + "src": "37120:23:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "37093:6:62", + "nodeType": "YulIdentifier", + "src": "37093:6:62" + }, + "nativeSrc": "37093:51:62", + "nodeType": "YulFunctionCall", + "src": "37093:51:62" + }, + "nativeSrc": "37093:51:62", + "nodeType": "YulExpressionStatement", + "src": "37093:51:62" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address_t_uint32__to_t_address_t_address_t_uint32__fromStack_reversed", + "nativeSrc": "36764:386:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "36872:9:62", + "nodeType": "YulTypedName", + "src": "36872:9:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "36883:6:62", + "nodeType": "YulTypedName", + "src": "36883:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "36891:6:62", + "nodeType": "YulTypedName", + "src": "36891:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "36899:6:62", + "nodeType": "YulTypedName", + "src": "36899:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "36910:4:62", + "nodeType": "YulTypedName", + "src": "36910:4:62", + "type": "" + } + ], + "src": "36764:386:62" + }, + { + "body": { + "nativeSrc": "37201:171:62", + "nodeType": "YulBlock", + "src": "37201:171:62", + "statements": [ + { + "body": { + "nativeSrc": "37232:111:62", + "nodeType": "YulBlock", + "src": "37232:111:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "37253:1:62", + "nodeType": "YulLiteral", + "src": "37253:1:62", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "37260:3:62", + "nodeType": "YulLiteral", + "src": "37260:3:62", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "37265:10:62", + "nodeType": "YulLiteral", + "src": "37265:10:62", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "37256:3:62", + "nodeType": "YulIdentifier", + "src": "37256:3:62" + }, + "nativeSrc": "37256:20:62", + "nodeType": "YulFunctionCall", + "src": "37256:20:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "37246:6:62", + "nodeType": "YulIdentifier", + "src": "37246:6:62" + }, + "nativeSrc": "37246:31:62", + "nodeType": "YulFunctionCall", + "src": "37246:31:62" + }, + "nativeSrc": "37246:31:62", + "nodeType": "YulExpressionStatement", + "src": "37246:31:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "37297:1:62", + "nodeType": "YulLiteral", + "src": "37297:1:62", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "37300:4:62", + "nodeType": "YulLiteral", + "src": "37300:4:62", + "type": "", + "value": "0x12" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "37290:6:62", + "nodeType": "YulIdentifier", + "src": "37290:6:62" + }, + "nativeSrc": "37290:15:62", + "nodeType": "YulFunctionCall", + "src": "37290:15:62" + }, + "nativeSrc": "37290:15:62", + "nodeType": "YulExpressionStatement", + "src": "37290:15:62" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "37325:1:62", + "nodeType": "YulLiteral", + "src": "37325:1:62", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "37328:4:62", + "nodeType": "YulLiteral", + "src": "37328:4:62", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "37318:6:62", + "nodeType": "YulIdentifier", + "src": "37318:6:62" + }, + "nativeSrc": "37318:15:62", + "nodeType": "YulFunctionCall", + "src": "37318:15:62" + }, + "nativeSrc": "37318:15:62", + "nodeType": "YulExpressionStatement", + "src": "37318:15:62" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "y", + "nativeSrc": "37221:1:62", + "nodeType": "YulIdentifier", + "src": "37221:1:62" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "37214:6:62", + "nodeType": "YulIdentifier", + "src": "37214:6:62" + }, + "nativeSrc": "37214:9:62", + "nodeType": "YulFunctionCall", + "src": "37214:9:62" + }, + "nativeSrc": "37211:132:62", + "nodeType": "YulIf", + "src": "37211:132:62" + }, + { + "nativeSrc": "37352:14:62", + "nodeType": "YulAssignment", + "src": "37352:14:62", + "value": { + "arguments": [ + { + "name": "x", + "nativeSrc": "37361:1:62", + "nodeType": "YulIdentifier", + "src": "37361:1:62" + }, + { + "name": "y", + "nativeSrc": "37364:1:62", + "nodeType": "YulIdentifier", + "src": "37364:1:62" + } + ], + "functionName": { + "name": "div", + "nativeSrc": "37357:3:62", + "nodeType": "YulIdentifier", + "src": "37357:3:62" + }, + "nativeSrc": "37357:9:62", + "nodeType": "YulFunctionCall", + "src": "37357:9:62" + }, + "variableNames": [ + { + "name": "r", + "nativeSrc": "37352:1:62", + "nodeType": "YulIdentifier", + "src": "37352:1:62" + } + ] + } + ] + }, + "name": "checked_div_t_uint256", + "nativeSrc": "37155:217:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nativeSrc": "37186:1:62", + "nodeType": "YulTypedName", + "src": "37186:1:62", + "type": "" + }, + { + "name": "y", + "nativeSrc": "37189:1:62", + "nodeType": "YulTypedName", + "src": "37189:1:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "r", + "nativeSrc": "37195:1:62", + "nodeType": "YulTypedName", + "src": "37195:1:62", + "type": "" + } + ], + "src": "37155:217:62" + }, + { + "body": { + "nativeSrc": "37551:158:62", + "nodeType": "YulBlock", + "src": "37551:158:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "37568:9:62", + "nodeType": "YulIdentifier", + "src": "37568:9:62" + }, + { + "kind": "number", + "nativeSrc": "37579:2:62", + "nodeType": "YulLiteral", + "src": "37579:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "37561:6:62", + "nodeType": "YulIdentifier", + "src": "37561:6:62" + }, + "nativeSrc": "37561:21:62", + "nodeType": "YulFunctionCall", + "src": "37561:21:62" + }, + "nativeSrc": "37561:21:62", + "nodeType": "YulExpressionStatement", + "src": "37561:21:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "37602:9:62", + "nodeType": "YulIdentifier", + "src": "37602:9:62" + }, + { + "kind": "number", + "nativeSrc": "37613:2:62", + "nodeType": "YulLiteral", + "src": "37613:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "37598:3:62", + "nodeType": "YulIdentifier", + "src": "37598:3:62" + }, + "nativeSrc": "37598:18:62", + "nodeType": "YulFunctionCall", + "src": "37598:18:62" + }, + { + "kind": "number", + "nativeSrc": "37618:1:62", + "nodeType": "YulLiteral", + "src": "37618:1:62", + "type": "", + "value": "9" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "37591:6:62", + "nodeType": "YulIdentifier", + "src": "37591:6:62" + }, + "nativeSrc": "37591:29:62", + "nodeType": "YulFunctionCall", + "src": "37591:29:62" + }, + "nativeSrc": "37591:29:62", + "nodeType": "YulExpressionStatement", + "src": "37591:29:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "37640:9:62", + "nodeType": "YulIdentifier", + "src": "37640:9:62" + }, + { + "kind": "number", + "nativeSrc": "37651:2:62", + "nodeType": "YulLiteral", + "src": "37651:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "37636:3:62", + "nodeType": "YulIdentifier", + "src": "37636:3:62" + }, + "nativeSrc": "37636:18:62", + "nodeType": "YulFunctionCall", + "src": "37636:18:62" + }, + { + "hexValue": "217472616e73666572", + "kind": "string", + "nativeSrc": "37656:11:62", + "nodeType": "YulLiteral", + "src": "37656:11:62", + "type": "", + "value": "!transfer" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "37629:6:62", + "nodeType": "YulIdentifier", + "src": "37629:6:62" + }, + "nativeSrc": "37629:39:62", + "nodeType": "YulFunctionCall", + "src": "37629:39:62" + }, + "nativeSrc": "37629:39:62", + "nodeType": "YulExpressionStatement", + "src": "37629:39:62" + }, + { + "nativeSrc": "37677:26:62", + "nodeType": "YulAssignment", + "src": "37677:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "37689:9:62", + "nodeType": "YulIdentifier", + "src": "37689:9:62" + }, + { + "kind": "number", + "nativeSrc": "37700:2:62", + "nodeType": "YulLiteral", + "src": "37700:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "37685:3:62", + "nodeType": "YulIdentifier", + "src": "37685:3:62" + }, + "nativeSrc": "37685:18:62", + "nodeType": "YulFunctionCall", + "src": "37685:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "37677:4:62", + "nodeType": "YulIdentifier", + "src": "37677:4:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "37377:332:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "37528:9:62", + "nodeType": "YulTypedName", + "src": "37528:9:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "37542:4:62", + "nodeType": "YulTypedName", + "src": "37542:4:62", + "type": "" + } + ], + "src": "37377:332:62" + }, + { + "body": { + "nativeSrc": "37841:153:62", + "nodeType": "YulBlock", + "src": "37841:153:62", + "statements": [ + { + "nativeSrc": "37851:26:62", + "nodeType": "YulAssignment", + "src": "37851:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "37863:9:62", + "nodeType": "YulIdentifier", + "src": "37863:9:62" + }, + { + "kind": "number", + "nativeSrc": "37874:2:62", + "nodeType": "YulLiteral", + "src": "37874:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "37859:3:62", + "nodeType": "YulIdentifier", + "src": "37859:3:62" + }, + "nativeSrc": "37859:18:62", + "nodeType": "YulFunctionCall", + "src": "37859:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "37851:4:62", + "nodeType": "YulIdentifier", + "src": "37851:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "37893:9:62", + "nodeType": "YulIdentifier", + "src": "37893:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "37908:6:62", + "nodeType": "YulIdentifier", + "src": "37908:6:62" + }, + { + "kind": "number", + "nativeSrc": "37916:10:62", + "nodeType": "YulLiteral", + "src": "37916:10:62", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "37904:3:62", + "nodeType": "YulIdentifier", + "src": "37904:3:62" + }, + "nativeSrc": "37904:23:62", + "nodeType": "YulFunctionCall", + "src": "37904:23:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "37886:6:62", + "nodeType": "YulIdentifier", + "src": "37886:6:62" + }, + "nativeSrc": "37886:42:62", + "nodeType": "YulFunctionCall", + "src": "37886:42:62" + }, + "nativeSrc": "37886:42:62", + "nodeType": "YulExpressionStatement", + "src": "37886:42:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "37948:9:62", + "nodeType": "YulIdentifier", + "src": "37948:9:62" + }, + { + "kind": "number", + "nativeSrc": "37959:2:62", + "nodeType": "YulLiteral", + "src": "37959:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "37944:3:62", + "nodeType": "YulIdentifier", + "src": "37944:3:62" + }, + "nativeSrc": "37944:18:62", + "nodeType": "YulFunctionCall", + "src": "37944:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "37968:6:62", + "nodeType": "YulIdentifier", + "src": "37968:6:62" + }, + { + "kind": "number", + "nativeSrc": "37976:10:62", + "nodeType": "YulLiteral", + "src": "37976:10:62", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "37964:3:62", + "nodeType": "YulIdentifier", + "src": "37964:3:62" + }, + "nativeSrc": "37964:23:62", + "nodeType": "YulFunctionCall", + "src": "37964:23:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "37937:6:62", + "nodeType": "YulIdentifier", + "src": "37937:6:62" + }, + "nativeSrc": "37937:51:62", + "nodeType": "YulFunctionCall", + "src": "37937:51:62" + }, + "nativeSrc": "37937:51:62", + "nodeType": "YulExpressionStatement", + "src": "37937:51:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint32_t_uint32__to_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "37714:280:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "37802:9:62", + "nodeType": "YulTypedName", + "src": "37802:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "37813:6:62", + "nodeType": "YulTypedName", + "src": "37813:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "37821:6:62", + "nodeType": "YulTypedName", + "src": "37821:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "37832:4:62", + "nodeType": "YulTypedName", + "src": "37832:4:62", + "type": "" + } + ], + "src": "37714:280:62" + }, + { + "body": { + "nativeSrc": "38126:169:62", + "nodeType": "YulBlock", + "src": "38126:169:62", + "statements": [ + { + "nativeSrc": "38136:26:62", + "nodeType": "YulAssignment", + "src": "38136:26:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "38148:9:62", + "nodeType": "YulIdentifier", + "src": "38148:9:62" + }, + { + "kind": "number", + "nativeSrc": "38159:2:62", + "nodeType": "YulLiteral", + "src": "38159:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "38144:3:62", + "nodeType": "YulIdentifier", + "src": "38144:3:62" + }, + "nativeSrc": "38144:18:62", + "nodeType": "YulFunctionCall", + "src": "38144:18:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "38136:4:62", + "nodeType": "YulIdentifier", + "src": "38136:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "38178:9:62", + "nodeType": "YulIdentifier", + "src": "38178:9:62" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "38193:6:62", + "nodeType": "YulIdentifier", + "src": "38193:6:62" + }, + { + "kind": "number", + "nativeSrc": "38201:18:62", + "nodeType": "YulLiteral", + "src": "38201:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "38189:3:62", + "nodeType": "YulIdentifier", + "src": "38189:3:62" + }, + "nativeSrc": "38189:31:62", + "nodeType": "YulFunctionCall", + "src": "38189:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "38171:6:62", + "nodeType": "YulIdentifier", + "src": "38171:6:62" + }, + "nativeSrc": "38171:50:62", + "nodeType": "YulFunctionCall", + "src": "38171:50:62" + }, + "nativeSrc": "38171:50:62", + "nodeType": "YulExpressionStatement", + "src": "38171:50:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "38241:9:62", + "nodeType": "YulIdentifier", + "src": "38241:9:62" + }, + { + "kind": "number", + "nativeSrc": "38252:2:62", + "nodeType": "YulLiteral", + "src": "38252:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "38237:3:62", + "nodeType": "YulIdentifier", + "src": "38237:3:62" + }, + "nativeSrc": "38237:18:62", + "nodeType": "YulFunctionCall", + "src": "38237:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "38261:6:62", + "nodeType": "YulIdentifier", + "src": "38261:6:62" + }, + { + "kind": "number", + "nativeSrc": "38269:18:62", + "nodeType": "YulLiteral", + "src": "38269:18:62", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "38257:3:62", + "nodeType": "YulIdentifier", + "src": "38257:3:62" + }, + "nativeSrc": "38257:31:62", + "nodeType": "YulFunctionCall", + "src": "38257:31:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "38230:6:62", + "nodeType": "YulIdentifier", + "src": "38230:6:62" + }, + "nativeSrc": "38230:59:62", + "nodeType": "YulFunctionCall", + "src": "38230:59:62" + }, + "nativeSrc": "38230:59:62", + "nodeType": "YulExpressionStatement", + "src": "38230:59:62" + } + ] + }, + "name": "abi_encode_tuple_t_uint64_t_uint64__to_t_uint256_t_uint256__fromStack_reversed", + "nativeSrc": "37999:296:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "38087:9:62", + "nodeType": "YulTypedName", + "src": "38087:9:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "38098:6:62", + "nodeType": "YulTypedName", + "src": "38098:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "38106:6:62", + "nodeType": "YulTypedName", + "src": "38106:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "38117:4:62", + "nodeType": "YulTypedName", + "src": "38117:4:62", + "type": "" + } + ], + "src": "37999:296:62" + }, + { + "body": { + "nativeSrc": "38475:215:62", + "nodeType": "YulBlock", + "src": "38475:215:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "38492:3:62", + "nodeType": "YulIdentifier", + "src": "38492:3:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "38505:2:62", + "nodeType": "YulLiteral", + "src": "38505:2:62", + "type": "", + "value": "96" + }, + { + "name": "value0", + "nativeSrc": "38509:6:62", + "nodeType": "YulIdentifier", + "src": "38509:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "38501:3:62", + "nodeType": "YulIdentifier", + "src": "38501:3:62" + }, + "nativeSrc": "38501:15:62", + "nodeType": "YulFunctionCall", + "src": "38501:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "38530:2:62", + "nodeType": "YulLiteral", + "src": "38530:2:62", + "type": "", + "value": "96" + }, + { + "kind": "number", + "nativeSrc": "38534:1:62", + "nodeType": "YulLiteral", + "src": "38534:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "38526:3:62", + "nodeType": "YulIdentifier", + "src": "38526:3:62" + }, + "nativeSrc": "38526:10:62", + "nodeType": "YulFunctionCall", + "src": "38526:10:62" + }, + { + "kind": "number", + "nativeSrc": "38538:1:62", + "nodeType": "YulLiteral", + "src": "38538:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "38522:3:62", + "nodeType": "YulIdentifier", + "src": "38522:3:62" + }, + "nativeSrc": "38522:18:62", + "nodeType": "YulFunctionCall", + "src": "38522:18:62" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "38518:3:62", + "nodeType": "YulIdentifier", + "src": "38518:3:62" + }, + "nativeSrc": "38518:23:62", + "nodeType": "YulFunctionCall", + "src": "38518:23:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "38497:3:62", + "nodeType": "YulIdentifier", + "src": "38497:3:62" + }, + "nativeSrc": "38497:45:62", + "nodeType": "YulFunctionCall", + "src": "38497:45:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "38485:6:62", + "nodeType": "YulIdentifier", + "src": "38485:6:62" + }, + "nativeSrc": "38485:58:62", + "nodeType": "YulFunctionCall", + "src": "38485:58:62" + }, + "nativeSrc": "38485:58:62", + "nodeType": "YulExpressionStatement", + "src": "38485:58:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "38563:3:62", + "nodeType": "YulIdentifier", + "src": "38563:3:62" + }, + { + "kind": "number", + "nativeSrc": "38568:2:62", + "nodeType": "YulLiteral", + "src": "38568:2:62", + "type": "", + "value": "20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "38559:3:62", + "nodeType": "YulIdentifier", + "src": "38559:3:62" + }, + "nativeSrc": "38559:12:62", + "nodeType": "YulFunctionCall", + "src": "38559:12:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "38581:2:62", + "nodeType": "YulLiteral", + "src": "38581:2:62", + "type": "", + "value": "96" + }, + { + "name": "value1", + "nativeSrc": "38585:6:62", + "nodeType": "YulIdentifier", + "src": "38585:6:62" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "38577:3:62", + "nodeType": "YulIdentifier", + "src": "38577:3:62" + }, + "nativeSrc": "38577:15:62", + "nodeType": "YulFunctionCall", + "src": "38577:15:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "38606:2:62", + "nodeType": "YulLiteral", + "src": "38606:2:62", + "type": "", + "value": "96" + }, + { + "kind": "number", + "nativeSrc": "38610:1:62", + "nodeType": "YulLiteral", + "src": "38610:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "38602:3:62", + "nodeType": "YulIdentifier", + "src": "38602:3:62" + }, + "nativeSrc": "38602:10:62", + "nodeType": "YulFunctionCall", + "src": "38602:10:62" + }, + { + "kind": "number", + "nativeSrc": "38614:1:62", + "nodeType": "YulLiteral", + "src": "38614:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "38598:3:62", + "nodeType": "YulIdentifier", + "src": "38598:3:62" + }, + "nativeSrc": "38598:18:62", + "nodeType": "YulFunctionCall", + "src": "38598:18:62" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "38594:3:62", + "nodeType": "YulIdentifier", + "src": "38594:3:62" + }, + "nativeSrc": "38594:23:62", + "nodeType": "YulFunctionCall", + "src": "38594:23:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "38573:3:62", + "nodeType": "YulIdentifier", + "src": "38573:3:62" + }, + "nativeSrc": "38573:45:62", + "nodeType": "YulFunctionCall", + "src": "38573:45:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "38552:6:62", + "nodeType": "YulIdentifier", + "src": "38552:6:62" + }, + "nativeSrc": "38552:67:62", + "nodeType": "YulFunctionCall", + "src": "38552:67:62" + }, + "nativeSrc": "38552:67:62", + "nodeType": "YulExpressionStatement", + "src": "38552:67:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "38639:3:62", + "nodeType": "YulIdentifier", + "src": "38639:3:62" + }, + { + "kind": "number", + "nativeSrc": "38644:2:62", + "nodeType": "YulLiteral", + "src": "38644:2:62", + "type": "", + "value": "40" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "38635:3:62", + "nodeType": "YulIdentifier", + "src": "38635:3:62" + }, + "nativeSrc": "38635:12:62", + "nodeType": "YulFunctionCall", + "src": "38635:12:62" + }, + { + "name": "value2", + "nativeSrc": "38649:6:62", + "nodeType": "YulIdentifier", + "src": "38649:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "38628:6:62", + "nodeType": "YulIdentifier", + "src": "38628:6:62" + }, + "nativeSrc": "38628:28:62", + "nodeType": "YulFunctionCall", + "src": "38628:28:62" + }, + "nativeSrc": "38628:28:62", + "nodeType": "YulExpressionStatement", + "src": "38628:28:62" + }, + { + "nativeSrc": "38665:19:62", + "nodeType": "YulAssignment", + "src": "38665:19:62", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "38676:3:62", + "nodeType": "YulIdentifier", + "src": "38676:3:62" + }, + { + "kind": "number", + "nativeSrc": "38681:2:62", + "nodeType": "YulLiteral", + "src": "38681:2:62", + "type": "", + "value": "72" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "38672:3:62", + "nodeType": "YulIdentifier", + "src": "38672:3:62" + }, + "nativeSrc": "38672:12:62", + "nodeType": "YulFunctionCall", + "src": "38672:12:62" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "38665:3:62", + "nodeType": "YulIdentifier", + "src": "38665:3:62" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "38300:390:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "38435:3:62", + "nodeType": "YulTypedName", + "src": "38435:3:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "38440:6:62", + "nodeType": "YulTypedName", + "src": "38440:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "38448:6:62", + "nodeType": "YulTypedName", + "src": "38448:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "38456:6:62", + "nodeType": "YulTypedName", + "src": "38456:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "38467:3:62", + "nodeType": "YulTypedName", + "src": "38467:3:62", + "type": "" + } + ], + "src": "38300:390:62" + }, + { + "body": { + "nativeSrc": "38908:276:62", + "nodeType": "YulBlock", + "src": "38908:276:62", + "statements": [ + { + "nativeSrc": "38918:27:62", + "nodeType": "YulAssignment", + "src": "38918:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "38930:9:62", + "nodeType": "YulIdentifier", + "src": "38930:9:62" + }, + { + "kind": "number", + "nativeSrc": "38941:3:62", + "nodeType": "YulLiteral", + "src": "38941:3:62", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "38926:3:62", + "nodeType": "YulIdentifier", + "src": "38926:3:62" + }, + "nativeSrc": "38926:19:62", + "nodeType": "YulFunctionCall", + "src": "38926:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "38918:4:62", + "nodeType": "YulIdentifier", + "src": "38918:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "38961:9:62", + "nodeType": "YulIdentifier", + "src": "38961:9:62" + }, + { + "name": "value0", + "nativeSrc": "38972:6:62", + "nodeType": "YulIdentifier", + "src": "38972:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "38954:6:62", + "nodeType": "YulIdentifier", + "src": "38954:6:62" + }, + "nativeSrc": "38954:25:62", + "nodeType": "YulFunctionCall", + "src": "38954:25:62" + }, + "nativeSrc": "38954:25:62", + "nodeType": "YulExpressionStatement", + "src": "38954:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "38999:9:62", + "nodeType": "YulIdentifier", + "src": "38999:9:62" + }, + { + "kind": "number", + "nativeSrc": "39010:2:62", + "nodeType": "YulLiteral", + "src": "39010:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "38995:3:62", + "nodeType": "YulIdentifier", + "src": "38995:3:62" + }, + "nativeSrc": "38995:18:62", + "nodeType": "YulFunctionCall", + "src": "38995:18:62" + }, + { + "name": "value1", + "nativeSrc": "39015:6:62", + "nodeType": "YulIdentifier", + "src": "39015:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "38988:6:62", + "nodeType": "YulIdentifier", + "src": "38988:6:62" + }, + "nativeSrc": "38988:34:62", + "nodeType": "YulFunctionCall", + "src": "38988:34:62" + }, + "nativeSrc": "38988:34:62", + "nodeType": "YulExpressionStatement", + "src": "38988:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "39042:9:62", + "nodeType": "YulIdentifier", + "src": "39042:9:62" + }, + { + "kind": "number", + "nativeSrc": "39053:2:62", + "nodeType": "YulLiteral", + "src": "39053:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "39038:3:62", + "nodeType": "YulIdentifier", + "src": "39038:3:62" + }, + "nativeSrc": "39038:18:62", + "nodeType": "YulFunctionCall", + "src": "39038:18:62" + }, + { + "name": "value2", + "nativeSrc": "39058:6:62", + "nodeType": "YulIdentifier", + "src": "39058:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "39031:6:62", + "nodeType": "YulIdentifier", + "src": "39031:6:62" + }, + "nativeSrc": "39031:34:62", + "nodeType": "YulFunctionCall", + "src": "39031:34:62" + }, + "nativeSrc": "39031:34:62", + "nodeType": "YulExpressionStatement", + "src": "39031:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "39085:9:62", + "nodeType": "YulIdentifier", + "src": "39085:9:62" + }, + { + "kind": "number", + "nativeSrc": "39096:2:62", + "nodeType": "YulLiteral", + "src": "39096:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "39081:3:62", + "nodeType": "YulIdentifier", + "src": "39081:3:62" + }, + "nativeSrc": "39081:18:62", + "nodeType": "YulFunctionCall", + "src": "39081:18:62" + }, + { + "name": "value3", + "nativeSrc": "39101:6:62", + "nodeType": "YulIdentifier", + "src": "39101:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "39074:6:62", + "nodeType": "YulIdentifier", + "src": "39074:6:62" + }, + "nativeSrc": "39074:34:62", + "nodeType": "YulFunctionCall", + "src": "39074:34:62" + }, + "nativeSrc": "39074:34:62", + "nodeType": "YulExpressionStatement", + "src": "39074:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "39128:9:62", + "nodeType": "YulIdentifier", + "src": "39128:9:62" + }, + { + "kind": "number", + "nativeSrc": "39139:3:62", + "nodeType": "YulLiteral", + "src": "39139:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "39124:3:62", + "nodeType": "YulIdentifier", + "src": "39124:3:62" + }, + "nativeSrc": "39124:19:62", + "nodeType": "YulFunctionCall", + "src": "39124:19:62" + }, + { + "arguments": [ + { + "name": "value4", + "nativeSrc": "39149:6:62", + "nodeType": "YulIdentifier", + "src": "39149:6:62" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "39165:3:62", + "nodeType": "YulLiteral", + "src": "39165:3:62", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "39170:1:62", + "nodeType": "YulLiteral", + "src": "39170:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "39161:3:62", + "nodeType": "YulIdentifier", + "src": "39161:3:62" + }, + "nativeSrc": "39161:11:62", + "nodeType": "YulFunctionCall", + "src": "39161:11:62" + }, + { + "kind": "number", + "nativeSrc": "39174:1:62", + "nodeType": "YulLiteral", + "src": "39174:1:62", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "39157:3:62", + "nodeType": "YulIdentifier", + "src": "39157:3:62" + }, + "nativeSrc": "39157:19:62", + "nodeType": "YulFunctionCall", + "src": "39157:19:62" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "39145:3:62", + "nodeType": "YulIdentifier", + "src": "39145:3:62" + }, + "nativeSrc": "39145:32:62", + "nodeType": "YulFunctionCall", + "src": "39145:32:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "39117:6:62", + "nodeType": "YulIdentifier", + "src": "39117:6:62" + }, + "nativeSrc": "39117:61:62", + "nodeType": "YulFunctionCall", + "src": "39117:61:62" + }, + "nativeSrc": "39117:61:62", + "nodeType": "YulExpressionStatement", + "src": "39117:61:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed", + "nativeSrc": "38695:489:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "38845:9:62", + "nodeType": "YulTypedName", + "src": "38845:9:62", + "type": "" + }, + { + "name": "value4", + "nativeSrc": "38856:6:62", + "nodeType": "YulTypedName", + "src": "38856:6:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "38864:6:62", + "nodeType": "YulTypedName", + "src": "38864:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "38872:6:62", + "nodeType": "YulTypedName", + "src": "38872:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "38880:6:62", + "nodeType": "YulTypedName", + "src": "38880:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "38888:6:62", + "nodeType": "YulTypedName", + "src": "38888:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "38899:4:62", + "nodeType": "YulTypedName", + "src": "38899:4:62", + "type": "" + } + ], + "src": "38695:489:62" + }, + { + "body": { + "nativeSrc": "39370:217:62", + "nodeType": "YulBlock", + "src": "39370:217:62", + "statements": [ + { + "nativeSrc": "39380:27:62", + "nodeType": "YulAssignment", + "src": "39380:27:62", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "39392:9:62", + "nodeType": "YulIdentifier", + "src": "39392:9:62" + }, + { + "kind": "number", + "nativeSrc": "39403:3:62", + "nodeType": "YulLiteral", + "src": "39403:3:62", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "39388:3:62", + "nodeType": "YulIdentifier", + "src": "39388:3:62" + }, + "nativeSrc": "39388:19:62", + "nodeType": "YulFunctionCall", + "src": "39388:19:62" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "39380:4:62", + "nodeType": "YulIdentifier", + "src": "39380:4:62" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "39423:9:62", + "nodeType": "YulIdentifier", + "src": "39423:9:62" + }, + { + "name": "value0", + "nativeSrc": "39434:6:62", + "nodeType": "YulIdentifier", + "src": "39434:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "39416:6:62", + "nodeType": "YulIdentifier", + "src": "39416:6:62" + }, + "nativeSrc": "39416:25:62", + "nodeType": "YulFunctionCall", + "src": "39416:25:62" + }, + "nativeSrc": "39416:25:62", + "nodeType": "YulExpressionStatement", + "src": "39416:25:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "39461:9:62", + "nodeType": "YulIdentifier", + "src": "39461:9:62" + }, + { + "kind": "number", + "nativeSrc": "39472:2:62", + "nodeType": "YulLiteral", + "src": "39472:2:62", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "39457:3:62", + "nodeType": "YulIdentifier", + "src": "39457:3:62" + }, + "nativeSrc": "39457:18:62", + "nodeType": "YulFunctionCall", + "src": "39457:18:62" + }, + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "39481:6:62", + "nodeType": "YulIdentifier", + "src": "39481:6:62" + }, + { + "kind": "number", + "nativeSrc": "39489:4:62", + "nodeType": "YulLiteral", + "src": "39489:4:62", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "39477:3:62", + "nodeType": "YulIdentifier", + "src": "39477:3:62" + }, + "nativeSrc": "39477:17:62", + "nodeType": "YulFunctionCall", + "src": "39477:17:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "39450:6:62", + "nodeType": "YulIdentifier", + "src": "39450:6:62" + }, + "nativeSrc": "39450:45:62", + "nodeType": "YulFunctionCall", + "src": "39450:45:62" + }, + "nativeSrc": "39450:45:62", + "nodeType": "YulExpressionStatement", + "src": "39450:45:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "39515:9:62", + "nodeType": "YulIdentifier", + "src": "39515:9:62" + }, + { + "kind": "number", + "nativeSrc": "39526:2:62", + "nodeType": "YulLiteral", + "src": "39526:2:62", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "39511:3:62", + "nodeType": "YulIdentifier", + "src": "39511:3:62" + }, + "nativeSrc": "39511:18:62", + "nodeType": "YulFunctionCall", + "src": "39511:18:62" + }, + { + "name": "value2", + "nativeSrc": "39531:6:62", + "nodeType": "YulIdentifier", + "src": "39531:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "39504:6:62", + "nodeType": "YulIdentifier", + "src": "39504:6:62" + }, + "nativeSrc": "39504:34:62", + "nodeType": "YulFunctionCall", + "src": "39504:34:62" + }, + "nativeSrc": "39504:34:62", + "nodeType": "YulExpressionStatement", + "src": "39504:34:62" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "39558:9:62", + "nodeType": "YulIdentifier", + "src": "39558:9:62" + }, + { + "kind": "number", + "nativeSrc": "39569:2:62", + "nodeType": "YulLiteral", + "src": "39569:2:62", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "39554:3:62", + "nodeType": "YulIdentifier", + "src": "39554:3:62" + }, + "nativeSrc": "39554:18:62", + "nodeType": "YulFunctionCall", + "src": "39554:18:62" + }, + { + "name": "value3", + "nativeSrc": "39574:6:62", + "nodeType": "YulIdentifier", + "src": "39574:6:62" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "39547:6:62", + "nodeType": "YulIdentifier", + "src": "39547:6:62" + }, + "nativeSrc": "39547:34:62", + "nodeType": "YulFunctionCall", + "src": "39547:34:62" + }, + "nativeSrc": "39547:34:62", + "nodeType": "YulExpressionStatement", + "src": "39547:34:62" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed", + "nativeSrc": "39189:398:62", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "39315:9:62", + "nodeType": "YulTypedName", + "src": "39315:9:62", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "39326:6:62", + "nodeType": "YulTypedName", + "src": "39326:6:62", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "39334:6:62", + "nodeType": "YulTypedName", + "src": "39334:6:62", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "39342:6:62", + "nodeType": "YulTypedName", + "src": "39342:6:62", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "39350:6:62", + "nodeType": "YulTypedName", + "src": "39350:6:62", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "39361:4:62", + "nodeType": "YulTypedName", + "src": "39361:4:62", + "type": "" + } + ], + "src": "39189:398:62" + } + ] + }, + "contents": "{\n { }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_struct$_State_$11307_memory_ptr__to_t_struct$_State_$11307_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 256)\n mstore(headStart, and(mload(value0), sub(shl(160, 1), 1)))\n mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n mstore(add(headStart, 0xe0), mload(add(value0, 0xe0)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_uint256__to_t_bytes32_t_bytes32_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function validator_revert_uint32(value)\n {\n if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint256t_uint32t_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_uint32(value_1)\n value1 := value_1\n let value_2 := 0\n value_2 := calldataload(add(headStart, 64))\n value2 := value_2\n }\n function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_uint32(value)\n value0 := value\n }\n function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff))\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value1 := value1_1\n value2 := value2_1\n }\n function validator_revert_bool(value)\n {\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_bool(value_1)\n value1 := value_1\n }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_uint32_t_uint32__to_t_uint32_t_uint32__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffff))\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_string(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_uint256_t_string_memory_ptr_t_string_memory_ptr__to_t_uint256_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n mstore(headStart, value0)\n mstore(add(headStart, 32), 96)\n let tail_1 := abi_encode_string(value1, add(headStart, 96))\n mstore(add(headStart, 64), sub(tail_1, headStart))\n tail := abi_encode_string(value2, tail_1)\n }\n function abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 256)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), value5)\n mstore(add(headStart, 192), value6)\n mstore(add(headStart, 224), value7)\n }\n function abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 160)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n }\n function abi_encode_tuple_t_struct$_State_$11933_memory_ptr__to_t_struct$_State_$11933_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(mload(value0), sub(shl(160, 1), 1)))\n mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n }\n function abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_addresst_addresst_bytes32(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n let value_2 := 0\n value_2 := calldataload(add(headStart, 64))\n value2 := value_2\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n let value_2 := 0\n value_2 := calldataload(add(headStart, 64))\n value2 := value_2\n }\n function abi_encode_tuple_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__to_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, and(value0, shl(248, 255)))\n mstore(add(headStart, 32), 224)\n let tail_1 := abi_encode_string(value1, add(headStart, 224))\n mstore(add(headStart, 64), sub(tail_1, headStart))\n let tail_2 := abi_encode_string(value2, tail_1)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 160), value5)\n mstore(add(headStart, 192), sub(tail_2, headStart))\n let pos := tail_2\n let length := mload(value6)\n mstore(tail_2, length)\n pos := add(tail_2, 32)\n let srcPtr := add(value6, 32)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, mload(srcPtr))\n pos := add(pos, 32)\n srcPtr := add(srcPtr, 32)\n }\n tail := pos\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_address_t_bytes32__to_t_address_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n if gt(add(add(_1, shl(5, length)), 32), dataEnd) { revert(0, 0) }\n value0 := add(_1, 32)\n value1 := length\n }\n function abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let tail_1 := add(headStart, 32)\n mstore(headStart, 32)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let tail_2 := add(add(headStart, shl(5, length)), 64)\n let srcPtr := add(value0, 32)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(63)))\n tail_2 := abi_encode_string(mload(srcPtr), tail_2)\n srcPtr := add(srcPtr, 32)\n pos := add(pos, 32)\n }\n tail := tail_2\n }\n function abi_decode_tuple_t_addresst_enum$_PaymentTypes_$2166t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n if iszero(lt(value_1, 3)) { revert(0, 0) }\n value1 := value_1\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32__to_t_uint256_t_uint256_t_uint256_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_bool(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_4281() -> memPtr\n {\n memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(0x40, newFreePtr)\n }\n function allocate_memory() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 0xa0)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory_4284() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 288)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function abi_decode_string(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let length := calldataload(offset)\n let src := add(offset, 0x20)\n let array_1 := 0\n let size := 0\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n let result := and(add(length, 31), not(31))\n size := add(result, 0x20)\n let memPtr := 0\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(result, 63), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n array_1 := memPtr\n mstore(memPtr, length)\n if gt(add(src, length), end) { revert(0, 0) }\n calldatacopy(add(memPtr, 0x20), src, length)\n mstore(add(add(memPtr, length), 0x20), 0)\n array := memPtr\n }\n function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_payable(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_string(add(headStart, offset), dataEnd)\n let offset_1 := calldataload(add(headStart, 32))\n if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n value1 := abi_decode_string(add(headStart, offset_1), dataEnd)\n let value := calldataload(add(headStart, 64))\n validator_revert_address(value)\n value2 := value\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function array_dataslot_string_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _1 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _1) { start := add(start, 1) }\n { sstore(start, 0) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n srcOffset := 0x20\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_string_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, 0x20) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 0x20)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n function abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), value1)\n calldatacopy(add(headStart, 64), value0, value1)\n mstore(add(add(headStart, value1), 64), 0)\n tail := add(add(headStart, and(add(value1, 31), not(31))), 64)\n }\n function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 21)\n mstore(add(headStart, 64), \"EIP712: Uninitialized\")\n tail := add(headStart, 96)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function calldata_array_index_range_access_t_bytes_calldata_ptr(offset, length, startIndex, endIndex) -> offsetOut, lengthOut\n {\n if gt(startIndex, endIndex) { revert(0, 0) }\n if gt(endIndex, length) { revert(0, 0) }\n offsetOut := add(offset, startIndex)\n lengthOut := sub(endIndex, startIndex)\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n {\n let rel_offset_of_tail := calldataload(ptr_to_tail)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n let addr_1 := add(base_ref, rel_offset_of_tail)\n length := calldataload(addr_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n addr := add(addr_1, 0x20)\n if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n }\n function abi_encode_tuple_packed_t_bytes_calldata_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n calldatacopy(pos, value0, value1)\n let _1 := add(pos, value1)\n mstore(_1, 0)\n let length := mload(value2)\n copy_memory_to_memory_with_cleanup(add(value2, 0x20), _1, length)\n end := add(_1, length)\n }\n function panic_error_0x21()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function validator_revert_uint64(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_struct$_SignedRAV_$2546_memory_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if slt(sub(dataEnd, _1), 0x40) { revert(0, 0) }\n let value := allocate_memory_4281()\n let offset_1 := calldataload(_1)\n if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n let _2 := add(_1, offset_1)\n if slt(sub(dataEnd, _2), 0xa0) { revert(0, 0) }\n let value_1 := allocate_memory()\n let value_2 := calldataload(_2)\n validator_revert_address(value_2)\n mstore(value_1, value_2)\n let value_3 := calldataload(add(_2, 32))\n validator_revert_address(value_3)\n mstore(add(value_1, 32), value_3)\n let value_4 := calldataload(add(_2, 0x40))\n validator_revert_uint64(value_4)\n mstore(add(value_1, 0x40), value_4)\n let value_5 := calldataload(add(_2, 96))\n if iszero(eq(value_5, and(value_5, sub(shl(128, 1), 1)))) { revert(0, 0) }\n mstore(add(value_1, 96), value_5)\n let offset_2 := calldataload(add(_2, 128))\n if gt(offset_2, 0xffffffffffffffff) { revert(0, 0) }\n mstore(add(value_1, 128), abi_decode_string(add(_2, offset_2), dataEnd))\n mstore(value, value_1)\n let offset_3 := calldataload(add(_1, 32))\n if gt(offset_3, 0xffffffffffffffff) { revert(0, 0) }\n mstore(add(value, 32), abi_decode_string(add(_1, offset_3), dataEnd))\n value0 := value\n }\n function abi_decode_tuple_t_address_payablet_bytes32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n }\n function abi_encode_enum_PaymentTypes(value, pos)\n {\n if iszero(lt(value, 3))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(pos, value)\n }\n function abi_encode_tuple_t_enum$_PaymentTypes_$2166__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n abi_encode_enum_PaymentTypes(value0, headStart)\n }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n }\n function abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_bytes32t_uint256t_address_payablet_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n let value_2 := calldataload(add(headStart, 64))\n validator_revert_address(value_2)\n value2 := value_2\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value3 := abi_decode_string(add(headStart, offset), dataEnd)\n }\n function abi_decode_uint32_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_uint32(value)\n }\n function abi_decode_uint64_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_uint64(value)\n }\n function abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 288)\n if _1 { revert(0, 0) }\n _1 := 0\n let value := allocate_memory_4284()\n let value_1 := _1\n value_1 := mload(headStart)\n mstore(value, value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n mstore(add(value, 96), abi_decode_uint32_fromMemory(add(headStart, 96)))\n mstore(add(value, 128), abi_decode_uint64_fromMemory(add(headStart, 128)))\n mstore(add(value, 160), abi_decode_uint64_fromMemory(add(headStart, 160)))\n mstore(add(value, 192), abi_decode_uint32_fromMemory(add(headStart, 192)))\n mstore(add(value, 224), abi_decode_uint64_fromMemory(add(headStart, 224)))\n let value_4 := _1\n value_4 := mload(add(headStart, 256))\n mstore(add(value, 256), value_4)\n value0 := value\n }\n function abi_encode_tuple_t_rational_0_by_1_t_address__to_t_uint8_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xff))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := mload(headStart)\n value0 := value\n }\n function abi_decode_tuple_t_uint32_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_uint32(value)\n value0 := value\n }\n function abi_decode_tuple_t_uint64_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_uint64(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__to_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n let memberValue0 := mload(value0)\n mstore(add(headStart, 64), 64)\n mstore(add(headStart, 128), and(mload(memberValue0), sub(shl(160, 1), 1)))\n mstore(add(headStart, 0xa0), and(mload(add(memberValue0, 0x20)), sub(shl(160, 1), 1)))\n mstore(add(headStart, 192), and(mload(add(memberValue0, 64)), 0xffffffffffffffff))\n mstore(add(headStart, 224), and(mload(add(memberValue0, 0x60)), sub(shl(128, 1), 1)))\n let memberValue0_1 := mload(add(memberValue0, 128))\n mstore(add(headStart, 256), 0xa0)\n let end := abi_encode_string(memberValue0_1, add(headStart, 288))\n let memberValue0_2 := mload(add(value0, 0x20))\n mstore(add(headStart, 0x60), add(sub(end, headStart), not(63)))\n tail := abi_encode_string(memberValue0_2, end)\n mstore(add(headStart, 0x20), value1)\n }\n function abi_encode_tuple_t_enum$_PaymentTypes_$2166_t_bytes_memory_ptr__to_t_uint8_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n abi_encode_enum_PaymentTypes(value0, headStart)\n mstore(add(headStart, 32), 64)\n tail := abi_encode_string(value1, add(headStart, 64))\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_address_t_address_t_enum$_PaymentTypes_$2166__to_t_address_t_address_t_uint8__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n abi_encode_enum_PaymentTypes(value2, add(headStart, 64))\n }\n function abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 160)\n if _1 { revert(0, 0) }\n _1 := 0\n let value := allocate_memory()\n let value_1 := _1\n value_1 := mload(headStart)\n mstore(value, value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n let value_4 := _1\n value_4 := mload(add(headStart, 96))\n mstore(add(value, 96), value_4)\n let value_5 := _1\n value_5 := mload(add(headStart, 128))\n mstore(add(value, 128), value_5)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 160)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n }\n function abi_encode_tuple_t_bytes32_t_address_t_address__to_t_bytes32_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__to_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, 128)\n tail := abi_encode_string(value0, add(headStart, 128))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_decode_tuple_t_uint256t_address_payable_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := 0\n value := mload(headStart)\n value0 := value\n let value_1 := mload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function decrement_t_uint256(value) -> ret\n {\n if iszero(value) { panic_error_0x11() }\n ret := add(value, not(0))\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0)) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function abi_encode_tuple_t_address_t_address_t_uint32__to_t_address_t_address_t_uint32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, 0xffffffff))\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 9)\n mstore(add(headStart, 64), \"!transfer\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_uint32_t_uint32__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffff))\n }\n function abi_encode_tuple_t_uint64_t_uint64__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffffffffffff))\n }\n function abi_encode_tuple_packed_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n mstore(pos, and(shl(96, value0), not(sub(shl(96, 1), 1))))\n mstore(add(pos, 20), and(shl(96, value1), not(sub(shl(96, 1), 1))))\n mstore(add(pos, 40), value2)\n end := add(pos, 72)\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 160)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xff))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n}", + "id": 62, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": { + "4317": [ + { + "length": 32, + "start": 17364 + } + ], + "4321": [ + { + "length": 32, + "start": 8261 + } + ], + "4337": [ + { + "length": 32, + "start": 14333 + } + ], + "4341": [ + { + "length": 32, + "start": 16358 + } + ], + "13256": [ + { + "length": 32, + "start": 6680 + }, + { + "length": 32, + "start": 14544 + } + ], + "13260": [ + { + "length": 32, + "start": 12201 + } + ], + "13264": [ + { + "length": 32, + "start": 17400 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2CE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8180083B GT PUSH2 0x17E JUMPI DUP1 PUSH4 0xA827A90C GT PUSH2 0xDF JUMPI DUP1 PUSH4 0xA827A90C EQ PUSH2 0x8F6 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x909 JUMPI DUP1 PUSH4 0xB15D2A2C EQ PUSH2 0x929 JUMPI DUP1 PUSH4 0xBA38F67D EQ PUSH2 0x93C JUMPI DUP1 PUSH4 0xBFDFA7AF EQ PUSH2 0x94F JUMPI DUP1 PUSH4 0xCB8347FE EQ PUSH2 0x966 JUMPI DUP1 PUSH4 0xCBE5F3F2 EQ PUSH2 0x979 JUMPI DUP1 PUSH4 0xCE0FC0CC EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xCE56C98B EQ PUSH2 0x9AC JUMPI DUP1 PUSH4 0xD07A7A84 EQ PUSH2 0x9BF JUMPI DUP1 PUSH4 0xDEDF6726 EQ PUSH2 0x9C8 JUMPI DUP1 PUSH4 0xE2E1E8E9 EQ PUSH2 0x9DB JUMPI DUP1 PUSH4 0xE6F50054 EQ PUSH2 0x9FB JUMPI DUP1 PUSH4 0xEFF0F592 EQ PUSH2 0xA0E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8180083B EQ PUSH2 0x795 JUMPI DUP1 PUSH4 0x819BA366 EQ PUSH2 0x7A8 JUMPI DUP1 PUSH4 0x81E777A7 EQ PUSH2 0x7C5 JUMPI DUP1 PUSH4 0x832BC923 EQ PUSH2 0x7D8 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x7EB JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x7F3 JUMPI DUP1 PUSH4 0x85E82BAF EQ PUSH2 0x80E JUMPI DUP1 PUSH4 0x88812583 EQ PUSH2 0x817 JUMPI DUP1 PUSH4 0x8D2F2948 EQ PUSH2 0x82E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x859 JUMPI DUP1 PUSH4 0x9249C5C1 EQ PUSH2 0x861 JUMPI DUP1 PUSH4 0x9384E078 EQ PUSH2 0x878 JUMPI DUP1 PUSH4 0x93D4E7CB EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x9AAFA5D1 EQ PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F793CDC GT PUSH2 0x233 JUMPI DUP1 PUSH4 0x4F793CDC EQ PUSH2 0x4B1 JUMPI DUP1 PUSH4 0x52A9039C EQ PUSH2 0x4D3 JUMPI DUP1 PUSH4 0x55C85269 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0x6234E216 EQ PUSH2 0x63E JUMPI DUP1 PUSH4 0x6A3CA383 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x6D9A3951 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0x71CE020A EQ PUSH2 0x6F4 JUMPI DUP1 PUSH4 0x7203CA78 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0x73371823 EQ PUSH2 0x740 JUMPI DUP1 PUSH4 0x772495C3 EQ PUSH2 0x749 JUMPI DUP1 PUSH4 0x7AA31BCE EQ PUSH2 0x75C JUMPI DUP1 PUSH4 0x7DFE6D28 EQ PUSH2 0x76F JUMPI DUP1 PUSH4 0x7E89BAC3 EQ PUSH2 0x782 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE022923 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0x138DEA08 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x13C474C9 EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x1CAFA218 EQ PUSH2 0x3C0 JUMPI DUP1 PUSH4 0x1DD42F60 EQ PUSH2 0x3D5 JUMPI DUP1 PUSH4 0x1EBB7C30 EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0x24B8FBF6 EQ PUSH2 0x40E JUMPI DUP1 PUSH4 0x35577962 EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x36FDD28A EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x3AFD23FE EQ PUSH2 0x43D JUMPI DUP1 PUSH4 0x3F0ED79D EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0x45F54485 EQ PUSH2 0x488 JUMPI DUP1 PUSH4 0x482468B7 EQ PUSH2 0x49B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6 PUSH2 0x2E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xE0 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x35D PUSH1 0xD7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3A0 PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x6A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x3CE CALLDATASIZE PUSH1 0x4 PUSH2 0x5180 JUMP JUMPDEST PUSH2 0xAD8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3D3 PUSH2 0x3E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B8 JUMP JUMPDEST PUSH2 0xC56 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x41C CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x42F CALLDATASIZE PUSH1 0x4 PUSH2 0x5278 JUMP JUMPDEST PUSH2 0xE9A JUMP JUMPDEST PUSH2 0x35D PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x44B CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xEB0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xED1 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0xF15 JUMP JUMPDEST PUSH2 0x4A3 PUSH2 0xF1F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST PUSH2 0x4C4 PUSH2 0x4BF CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xF32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5331 JUMP JUMPDEST PUSH2 0x52E PUSH2 0x4E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP7 SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP10 AND DUP10 MSTORE PUSH1 0x20 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE SWAP6 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x604 PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP6 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP6 ADD DUP5 SWAP1 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x7 SWAP1 SWAP3 ADD SLOAD PUSH1 0xE0 SWAP1 SWAP6 ADD DUP6 SWAP1 MSTORE SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x470 PUSH2 0x1065 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x64C CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9F PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x107A JUMP JUMPDEST PUSH2 0x6C8 PUSH2 0x67F CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE PUSH1 0x9E DUP3 MSTORE DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP3 MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x10F6 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x1108 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x5366 JUMP JUMPDEST PUSH2 0x733 PUSH2 0x718 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0x35D PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x757 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x1113 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x76A CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x111D JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x77D CALLDATASIZE PUSH1 0x4 PUSH2 0x5394 JUMP JUMPDEST PUSH2 0x112E JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x790 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x1146 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x11BA JUMP JUMPDEST PUSH2 0x7B0 PUSH2 0x1345 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5394 JUMP JUMPDEST PUSH2 0x1355 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x14BB JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x14CF JUMP JUMPDEST PUSH2 0x7FB PUSH2 0x1511 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53C4 JUMP JUMPDEST PUSH2 0x35D PUSH1 0xA0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x841 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x733 PUSH2 0x15BA JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x886 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x8CE PUSH2 0x8A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9E PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x841 SWAP1 PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x904 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x15D5 JUMP JUMPDEST PUSH2 0x91C PUSH2 0x917 CALLDATASIZE PUSH1 0x4 PUSH2 0x5475 JUMP JUMPDEST PUSH2 0x1682 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x54EA JUMP JUMPDEST PUSH2 0x35D PUSH2 0x937 CALLDATASIZE PUSH1 0x4 PUSH2 0x554F JUMP JUMPDEST PUSH2 0x1769 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x94A CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x19F7 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x974 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1A15 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x987 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x68 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x9A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1B54 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x55B7 JUMP JUMPDEST PUSH2 0x1C83 JUMP JUMPDEST PUSH2 0x35D PUSH1 0xD6 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x9D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1C96 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x9E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xA09 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x1E24 JUMP JUMPDEST PUSH2 0x3A0 PUSH2 0xA1C CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP5 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xA51 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x1E35 JUMP JUMPDEST PUSH2 0xA5E PUSH2 0x50EB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAE2 PUSH2 0x1E70 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xB09 JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xB25 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xB33 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xB51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xB7B JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH2 0xB84 CALLER PUSH2 0x1E94 JUMP JUMPDEST PUSH2 0xB8C PUSH2 0x1EA5 JUMP JUMPDEST PUSH2 0xB94 PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0xB9C PUSH2 0x1EC5 JUMP JUMPDEST PUSH2 0xBE8 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x537562677261706853657276696365 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x312E3 PUSH1 0xEC SHL DUP2 MSTORE POP PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0xBF4 DUP9 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0xBFD DUP8 PUSH2 0x1F67 JUMP JUMPDEST PUSH2 0xC06 DUP7 PUSH2 0x1FBB JUMP JUMPDEST DUP4 ISZERO PUSH2 0xC4C JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC5E PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x1F67 JUMP JUMPDEST POP JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 PUSH2 0xC78 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCA7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCE8 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0xD14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0xD22 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0xD2D DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xD38 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH2 0xD40 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xD50 DUP8 DUP10 ADD DUP10 PUSH2 0x5756 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP4 MLOAD GT PUSH2 0xD78 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7838439 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD GT PUSH2 0xD9A JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E63BD95 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xDD1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD06866D PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE TIMESTAMP DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 DUP2 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 SWAP1 SWAP3 MSTORE SWAP3 SWAP1 KECCAK256 DUP2 MLOAD DUP2 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 PUSH2 0xE1B SWAP1 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x2 DUP3 ADD SWAP1 PUSH2 0xE30 SWAP1 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0xE4C JUMPI PUSH2 0xE4C DUP10 DUP3 PUSH2 0x229A JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x159567BEA25499A91F60E1FBB349FF2A1F8C1B2883198F25C1E12C99EDDB44FA DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0xE87 SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xEA2 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x22F1 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xA0 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xECB SWAP1 PUSH2 0xEC5 PUSH1 0x9D DUP6 PUSH2 0x2358 JUMP JUMPDEST SWAP1 PUSH2 0x23D2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x72E3EF97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0xF0B PUSH2 0x240F JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x2434 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xC67 CALLER DUP3 PUSH2 0x2480 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH2 0x252D JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP2 SWAP3 SWAP2 PUSH2 0xF54 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xF80 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xFCD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xFA2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xFCD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xFB0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 DUP1 PUSH1 0x2 ADD DUP1 SLOAD PUSH2 0xFE2 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x100E SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x105B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1030 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x105B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x103E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1070 PUSH2 0x25A4 JUMP JUMPDEST SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP3 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE SWAP1 PUSH2 0xECB SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH2 0x10FE PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xF13 PUSH1 0x0 PUSH2 0x25E7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH2 0x2643 JUMP JUMPDEST PUSH2 0xC67 CALLER DUP3 PUSH2 0x229A JUMP JUMPDEST PUSH2 0x1125 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x26BE JUMP JUMPDEST PUSH2 0x1136 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0x1141 DUP4 DUP4 DUP4 PUSH2 0x26F3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x114E PUSH2 0x2011 JUMP JUMPDEST PUSH2 0x115B DUP2 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x117D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1C9C717B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0xD7 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x6DEEF78FFE3DF79AE5CD8E40B842C36AC6077E13746B9B68A9F327537B01E4E9 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST DUP3 PUSH2 0x11C3 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11F2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x120F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1233 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1256 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP1 DUP2 SWAP1 PUSH2 0x1293 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x129C PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12AA DUP5 DUP7 ADD DUP7 PUSH2 0x5151 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x12C1 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP8 SWAP2 DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x12EF JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x12FA DUP2 PUSH2 0x2746 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x73330C218A680717E9EEE625C262DF66EDDFDF99ECB388D25F6B32D66B9A318A DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x1335 SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD SWAP1 SWAP2 JUMP JUMPDEST DUP3 PUSH2 0x135E PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x138D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13CE SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x13F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0x13FF DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x140A DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x1415 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 SWAP1 DUP2 SWAP1 PUSH2 0x1450 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1459 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH2 0x146E PUSH1 0x9D DUP9 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP9 SWAP2 DUP9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x149C JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0xC4C DUP7 DUP7 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x289C JUMP JUMPDEST PUSH2 0x14C3 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1500 JUMPI PUSH1 0x40 MLOAD PUSH4 0x72E3EF97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1509 PUSH2 0x2274 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x2C28 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x1527 PUSH2 0x2C6F JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP ISZERO DUP1 ISZERO PUSH2 0x153B JUMPI POP PUSH1 0x1 DUP2 ADD SLOAD ISZERO JUMPDEST PUSH2 0x157F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1152540DCC4C8E88155B9A5B9A5D1A585B1A5E9959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH2 0x1587 PUSH2 0x2C93 JUMP JUMPDEST PUSH2 0x158F PUSH2 0x2D34 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0xF PUSH1 0xF8 SHL SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP CHAINID SWAP9 POP ADDRESS SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x15C5 PUSH2 0x2D51 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E2 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x15FB PUSH1 0xA0 SLOAD DUP4 PUSH2 0x23D2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 SLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x161D SWAP2 SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2D75 JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x1628 JUMPI POP DUP1 JUMPDEST DUP5 SWAP1 PUSH2 0x1647 JUMPI PUSH1 0x40 MLOAD PUSH3 0x3477B5 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1651 DUP4 PUSH2 0x2D94 JUMP JUMPDEST ISZERO DUP5 SWAP1 PUSH2 0x1672 JUMPI PUSH1 0x40 MLOAD PUSH4 0x17C7B35D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x167C DUP5 PUSH2 0x2746 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x16AC JUMPI PUSH2 0x16AC PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x16DF JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x16CA JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1761 JUMPI PUSH2 0x173C ADDRESS DUP7 DUP7 DUP5 DUP2 DUP2 LT PUSH2 0x1703 JUMPI PUSH2 0x1703 PUSH2 0x5968 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1715 SWAP2 SWAP1 PUSH2 0x597E JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1728 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x2DB3 JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x174E JUMPI PUSH2 0x174E PUSH2 0x5968 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x16E5 JUMP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0x1774 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17A3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17E4 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1807 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP6 PUSH1 0x0 PUSH2 0x1815 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1820 DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x182B DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP9 SWAP1 DUP2 SWAP1 PUSH2 0x1866 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x186F PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1884 JUMPI PUSH2 0x1884 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x18E2 JUMPI PUSH1 0x0 PUSH2 0x1897 DUP9 DUP11 ADD DUP11 PUSH2 0x5A16 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP2 POP DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP1 DUP3 AND EQ PUSH2 0x18CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x1A071D07 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x18DA DUP2 PUSH2 0x2E29 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1995 JUMP JUMPDEST PUSH1 0x2 DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x18F6 JUMPI PUSH2 0x18F6 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x197A JUMPI PUSH1 0x0 DUP1 PUSH2 0x190A DUP10 DUP12 ADD DUP12 PUSH2 0x5B3B JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH2 0x1924 PUSH1 0x9D DUP5 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP14 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1952 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x1971 DUP3 DUP3 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x332E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1995 JUMP JUMPDEST DUP9 PUSH1 0x40 MLOAD PUSH4 0x47031CF PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5B89 JUMP JUMPDEST DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x19A7 JUMPI PUSH2 0x19A7 PUSH2 0x59EB JUMP JUMPDEST DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x54FE682BFB66381A9382E13E4B95A3DD4F960EAFBAE063FDEA3539D144FF3FF5 DUP4 PUSH1 0x40 MLOAD PUSH2 0x19E2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xECB DUP3 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2D75 JUMP JUMPDEST CALLER PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP3 EQ PUSH2 0x1A62 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCDC0567F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 PUSH2 0x1A74 DUP4 DUP6 ADD DUP6 PUSH2 0x5B97 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1A80 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE76FEDE6 DUP7 DUP5 DUP5 PUSH2 0x1A99 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP7 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B06 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2F2E74A11116E05B39159372CCEB6739257B08D72F7171D208FF27BB6466C58 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1B45 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x1B5D PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B8C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BCD SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1BF0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP1 DUP2 SWAP1 PUSH2 0x1C2D JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1C36 PUSH2 0x2274 JUMP JUMPDEST PUSH2 0x1C3F DUP6 PUSH2 0x38F2 JUMP JUMPDEST PUSH2 0x1C48 DUP6 PUSH2 0x3908 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH32 0xF53CF6521A1B5FC0C04BFFA70374A4DC2E3474F2B2AC1643C3BCC54E2DB4A939 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8F DUP4 DUP4 PUSH2 0x397B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x1C9F PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CCE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CEB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D0F SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1D32 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0x1D40 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D4B DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x1D56 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 SWAP1 DUP2 SWAP1 PUSH2 0x1D91 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1D9A PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x1DAB DUP10 DUP12 ADD DUP12 PUSH2 0x5BB9 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x1DD3 DUP12 DUP4 DUP7 DUP7 DUP6 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x39EA JUMP JUMPDEST POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD3803EB82EF5B4CDFF8646734EBBAF5B37441E96314B27FFD3D0940F12A038E7 DUP12 DUP12 PUSH1 0x40 MLOAD PUSH2 0x1E0F SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1E2C PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x1FBB JUMP JUMPDEST PUSH2 0x1E3D PUSH2 0x2011 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1E67 JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x25E7 JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 JUMP JUMPDEST PUSH2 0x1E9C PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x3B98 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EB5 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EBD PUSH2 0x3BA0 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x1EA5 JUMP JUMPDEST PUSH2 0x1ECD PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EBD PUSH2 0x3BD5 JUMP JUMPDEST PUSH2 0x1EDD PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EE7 DUP3 DUP3 PUSH2 0x3BF2 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x3C04 JUMP JUMPDEST DUP2 DUP2 DUP1 DUP3 GT ISZERO PUSH2 0x1F1D JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x0 DUP3 SWAP1 SSTORE PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x90699B8B4BF48918FEA1129C85F9BC7B51285DF7ECC982910813C7805F568849 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0xC0 SHL NOT AND PUSH1 0x1 PUSH1 0xC0 SHL PUSH4 0xFFFFFFFF DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x472ABA493F9FD1D136EC54986F619F3AA5CAFF964F0E731A9909FB9A1270211F SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1FDC JUMPI PUSH1 0x40 MLOAD PUSH4 0xBC71A043 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xD6 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x2AAAF20B08565EEBC0C962CD7C568E54C3C0C2B85A1F942B82CD1BD730FDCD23 SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST CALLER PUSH2 0x201A PUSH2 0x15BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xF13 JUMPI CALLER PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x20B8 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x25D9897E DUP5 ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E5 SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2103 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2127 SWAP2 SWAP1 PUSH2 0x5C36 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 EQ ISZERO DUP4 SWAP1 PUSH2 0x215B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B3C09BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x746F6B656E73 PUSH1 0xD0 SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x219F PUSH2 0x2643 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP4 PUSH2 0x21B4 JUMPI DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x21BA JUMP JUMPDEST DUP5 PUSH1 0xE0 ADD MLOAD JUMPDEST SWAP1 POP PUSH2 0x2208 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD DUP2 MSTORE PUSH1 0x20 ADD PUSH13 0x1D1A185DDA5B99D4195C9A5BD9 PUSH1 0x9A SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2213 PUSH2 0x252D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP7 PUSH2 0x2228 JUMPI DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x222E JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD MLOAD JUMPDEST SWAP1 POP PUSH2 0xC4C DUP2 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xE DUP2 MSTORE PUSH1 0x20 ADD PUSH14 0x1B585E15995C9A599A595C90DD5D PUSH1 0x92 SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH2 0x227C PUSH2 0x1065 JUMP JUMPDEST ISZERO PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD93C0665 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x3349D2E561F8C23A3FF42257745C8FB53E4BF3CBD4046672A3C4A0C7EE8A7B31 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x22F9 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xA95BAC2F3DF0D40E8278281C1D39D53C60E4F2BF3550CA5665738D0916E89789 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x2360 PUSH2 0x50EB JUMP JUMPDEST PUSH2 0x236A DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 SWAP1 SWAP2 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x23E7 DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0xA0 ADD MLOAD PUSH2 0x3CE8 JUMP JUMPDEST PUSH2 0x23F1 SWAP1 TIMESTAMP PUSH2 0x5955 JUMP JUMPDEST SWAP1 POP PUSH2 0x23FC DUP5 PUSH2 0x25C8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2407 JUMPI POP DUP3 DUP2 GT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2417 PUSH2 0x1065 JUMP JUMPDEST PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8DFC202B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x243C PUSH2 0x240F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2446 PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 SSTORE SWAP1 POP PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x11AF SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD DUP5 SWAP1 MSTORE DUP3 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP1 MLOAD DUP1 DUP4 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP2 SWAP1 PUSH2 0x24D4 SWAP1 DUP5 SWAP1 PUSH2 0x3CFE SWAP1 PUSH2 0x3D69 SWAP1 PUSH2 0x3E62 SWAP1 DUP10 PUSH2 0x3E87 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x13F3FA9F0E54AF1AF76D8B5D11C3973D7C2AED6312B61EFFF2F7B49D73AD67EB DUP4 DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2518 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1B45 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2538 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x84633713 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2575 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2599 SWAP2 SWAP1 PUSH2 0x5CF1 JUMP JUMPDEST SWAP3 PUSH3 0xF4240 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25D7 DUP3 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xECB JUMPI POP POP PUSH1 0x80 ADD MLOAD ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F1 PUSH2 0x2D51 JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP5 POP SWAP2 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x264E PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5AEA0EC4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x268B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26AF SWAP2 SWAP1 PUSH2 0x5D0E JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0xA0 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x21774046E2611DDB52C8C46E1AD97524EEB2E3FDA7DCD9428867868B4C4D06BA SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST PUSH2 0x2700 PUSH1 0x9E DUP5 DUP5 DUP5 PUSH2 0x3F41 JUMP JUMPDEST DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD54C7ABC930F6D506DA2D08AA7AEAD4F2443E1DB6D5F560384A2F652FF893E19 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2753 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x27DE DUP3 PUSH2 0x2761 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2792 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27D5 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x9D SWAP2 SWAP1 PUSH2 0x4008 JUMP JUMPDEST PUSH2 0x27E9 PUSH1 0x9D DUP4 PUSH2 0x40B0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x27FC SWAP2 PUSH1 0x9F SWAP2 PUSH2 0x415B JUMP JUMPDEST DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x2823 SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x663A6F978DE61DC3E2441026C082BE709377B083AB642A8CE71386F8B91C710B DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2890 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH2 0x28A4 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28B1 PUSH1 0x9D DUP7 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x28BC DUP2 PUSH2 0x25C8 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x28DC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1EB5FF95 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP DUP1 PUSH1 0x40 ADD MLOAD DUP5 EQ ISZERO DUP6 DUP6 SWAP1 SWAP2 PUSH2 0x2908 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF32518CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x40 DUP2 ADD MLOAD DUP1 DUP6 GT ISZERO PUSH2 0x293E JUMPI PUSH2 0x2939 PUSH2 0x2922 PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x292E DUP5 DUP10 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x9F SWAP3 SWAP2 SWAP1 DUP9 PUSH2 0x41E0 JUMP JUMPDEST PUSH2 0x2957 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x2957 SWAP1 PUSH2 0x294E DUP8 DUP5 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x9F SWAP2 SWAP1 PUSH2 0x415B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2961 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2992 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x29B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29D5 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x29E2 DUP5 PUSH2 0x2D94 JUMP JUMPDEST ISZERO PUSH2 0x29EE JUMPI PUSH1 0x0 PUSH2 0x29FD JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x29FD SWAP1 DUP4 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD DUP10 SWAP1 SSTORE PUSH1 0x6 ADD DUP4 SWAP1 SSTORE SWAP1 POP PUSH2 0x2A2C PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6452FC0F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC8A5F81E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A7A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A9E SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2AC9 SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP DUP3 DUP8 GT ISZERO PUSH2 0x2B11 JUMPI PUSH2 0x2AE0 DUP4 DUP9 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2B06 SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x2B47 SWAP1 POP JUMP JUMPDEST PUSH2 0x2B1B DUP8 DUP5 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2B41 SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6DB4A6F9BE2D5E72EB2A2AF2374AC487971BF342A261BA0BC1CF471BF2A2C31F DUP11 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2B9E SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP8 AND DUP8 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP6 ADD MSTORE POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2C30 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C3A PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR DUP2 SSTORE SWAP1 POP PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x2473 CALLER SWAP1 JUMP JUMPDEST PUSH32 0xA16A46D94261C7517CC8FF89F61C0CE93598E3C849801011DEE649A6A557D100 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2C9F PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x2 ADD DUP1 SLOAD PUSH2 0x2CB0 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2CDC SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2D29 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2CFE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D29 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2D0C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2D40 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x3 ADD DUP1 SLOAD PUSH2 0x2CB0 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D8C PUSH2 0x2D82 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x9F SWAP1 DUP6 DUP6 PUSH2 0x42E5 JUMP JUMPDEST ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2DA3 DUP3 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xECB JUMPI POP POP PUSH1 0x40 ADD MLOAD ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2DD0 SWAP2 SWAP1 PUSH2 0x5D3E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2E0B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E10 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2E20 DUP6 DUP4 DUP4 PUSH2 0x437F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD DUP1 MLOAD PUSH1 0x0 SWAP4 SWAP3 DUP5 SWAP3 PUSH2 0x2E4E SWAP3 DUP2 ADD DUP3 ADD SWAP2 ADD PUSH2 0x5D5A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E5D PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x2E92 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4508FBF7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2EA4 DUP5 PUSH1 0x0 PUSH2 0x2480 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EAE PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2ED9 SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F1A SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2F26 PUSH2 0x43F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C4EA0ED DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2F53 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F94 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST PUSH2 0x2F9F JUMPI PUSH1 0x0 PUSH2 0x2FA3 JUMP JUMPDEST PUSH1 0xD7 SLOAD JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7F07D283 PUSH1 0x0 DUP12 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2FEB SWAP3 SWAP2 SWAP1 PUSH2 0x5D77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3017 SWAP3 SWAP2 SWAP1 PUSH2 0x5E16 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3036 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x305A SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3068 DUP3 DUP5 PUSH2 0x441A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3074 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x309F SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30E0 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x30ED DUP4 DUP8 PUSH2 0x5D2B JUMP JUMPDEST EQ DUP6 DUP3 DUP5 SWAP1 SWAP2 SWAP3 PUSH2 0x3122 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B0D791F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP DUP4 ISZERO SWAP1 POP PUSH2 0x32DB JUMPI PUSH1 0x0 PUSH1 0xD6 SLOAD DUP5 PUSH2 0x313C SWAP2 SWAP1 PUSH2 0x5E36 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3148 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5AEA0EC4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3185 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31A9 SWAP2 SWAP1 PUSH2 0x5D0E JUMP JUMPDEST PUSH2 0x31BC SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND TIMESTAMP PUSH2 0x5D2B JUMP JUMPDEST SWAP1 POP PUSH2 0x31C9 DUP12 DUP4 DUP4 PUSH2 0x4481 JUMP JUMPDEST DUP4 ISZERO PUSH2 0x32D8 JUMPI PUSH2 0x31D7 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1D1C2FEC DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3204 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3223 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3247 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST POP PUSH2 0x326C PUSH2 0x3253 PUSH2 0x43F6 JUMP JUMPDEST DUP6 PUSH2 0x325C PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x45F3 JUMP JUMPDEST PUSH2 0x3274 PUSH2 0x43F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x102AE651 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x81573288 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x32D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 PUSH32 0x60A56D4D503735B4848FEB6F491F14D7415262346B820D3B5A3D2733201BDA36 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x333C PUSH1 0x9D DUP7 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x3347 DUP2 PUSH2 0x25C8 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x3367 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1EB5FF95 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x337F PUSH1 0xA0 SLOAD DUP4 PUSH2 0x23D2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x3392 JUMPI POP PUSH2 0x3390 DUP3 PUSH2 0x2D94 JUMP JUMPDEST ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x339D JUMPI POP DUP5 ISZERO ISZERO JUMPDEST PUSH2 0x33A8 JUMPI PUSH1 0x0 PUSH2 0x341E JUMP JUMPDEST PUSH2 0x33B0 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDB750926 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x33DB SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x33FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x341E SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH2 0x345D DUP7 PUSH2 0x342C PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2792 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x3468 PUSH1 0x9D DUP8 PUSH2 0x46A2 JUMP JUMPDEST PUSH2 0x3473 PUSH1 0x9D DUP8 PUSH2 0x474D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 ISZERO PUSH2 0x37C2 JUMPI PUSH1 0x0 PUSH2 0x3486 PUSH2 0x2043 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x40 MLOAD PUSH4 0x7573EF4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x7573EF4F SWAP2 PUSH2 0x34B9 SWAP2 ADDRESS SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5E4D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34FA SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3506 PUSH2 0x2043 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1584A179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x561285E4 SWAP2 PUSH2 0x3536 SWAP2 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5625 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3577 SWAP2 SWAP1 PUSH2 0x5E72 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD GT PUSH2 0x358C JUMPI PUSH1 0x0 PUSH2 0x3596 JUMP JUMPDEST PUSH2 0x3596 DUP6 DUP4 PUSH2 0x441A JUMP JUMPDEST SWAP3 POP DUP3 ISZERO PUSH2 0x368B JUMPI PUSH2 0x35A6 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95EA7B3 PUSH2 0x35BC PUSH2 0x2043 JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x35DA SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x35F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x361D SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST POP PUSH2 0x3626 PUSH2 0x2043 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD PUSH4 0xCA94B0E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0xCA94B0E9 SWAP2 PUSH2 0x3658 SWAP2 ADDRESS SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5EC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3672 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x3695 DUP4 DUP7 PUSH2 0x5955 JUMP JUMPDEST SWAP4 POP DUP4 ISZERO PUSH2 0x37BF JUMPI DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x37B0 JUMPI PUSH2 0x36C7 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95EA7B3 PUSH2 0x36DD PUSH2 0x2043 JUMP JUMPDEST DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x36FB SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x371A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x373E SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST POP PUSH2 0x3747 PUSH2 0x2043 JUMP JUMPDEST DUP8 MLOAD PUSH1 0x40 MLOAD PUSH4 0x3A309049 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x74612092 SWAP2 PUSH2 0x3779 SWAP2 ADDRESS SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5EC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x37BD JUMP JUMPDEST PUSH2 0x37BD DUP2 DUP7 PUSH2 0x325C PUSH2 0x43D2 JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP2 AND PUSH32 0x7DF4DBB3B3C999CA3E143D3FE67ABFA22078FD572D49D411278648C773912E31 DUP7 DUP7 DUP7 DUP14 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x76671808 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3859 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x387D SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP4 MLOAD PUSH2 0x38B4 SWAP1 DUP8 PUSH2 0x2D75 JUMP JUMPDEST ISZERO PUSH2 0x38C2 JUMPI PUSH2 0x38C2 DUP9 PUSH2 0x2746 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38FD DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0xEAC DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x3913 DUP2 PUSH1 0x1 PUSH2 0x47F9 JUMP JUMPDEST PUSH2 0x391B PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3A78B732 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3946 SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3960 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3974 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8F PUSH32 0x4BDEE85C4B4A268F4895D1096D553C3E57BB2433C380E7B7EC8CB56CC4F74673 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x39CF SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x4810 JUMP JUMPDEST PUSH2 0x39F2 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x3A19 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FFDF5EF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3A24 DUP8 DUP8 DUP6 PUSH2 0x483D JUMP JUMPDEST PUSH2 0x3A2F PUSH1 0x9E DUP8 PUSH2 0x488C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3ABC DUP9 DUP9 DUP9 DUP9 PUSH2 0x3A40 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP13 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A6D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AB0 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x9D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x48E1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AD4 PUSH2 0x3AC9 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x9F SWAP1 DUP11 DUP9 DUP8 PUSH2 0x41E0 JUMP JUMPDEST DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x3AFB SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP6 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3BD4419F8DEFEC88DD042E31B8E8743F00803AED288FE7C31C9CF0689D295CF2 DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x3B60 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3B7B PUSH2 0x4A2E JUMP JUMPDEST PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1E3D PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3BA8 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3BB5 PUSH1 0x0 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0x3BC3 PUSH1 0x0 PUSH3 0xF4240 PUSH2 0x4A48 JUMP JUMPDEST PUSH2 0xF13 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH2 0x4B1A JUMP JUMPDEST PUSH2 0x3BDD PUSH2 0x3B73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BE7 PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x3BFA PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x4BA7 JUMP JUMPDEST PUSH2 0xEAC PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3C17 DUP5 DUP5 DUP5 PUSH2 0x4BE8 JUMP JUMPDEST DUP2 DUP6 DUP6 DUP6 SWAP1 SWAP2 SWAP3 SWAP4 PUSH2 0xC4C JUMPI PUSH1 0x40 MLOAD PUSH4 0x871E13D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP3 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP2 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE SWAP1 SWAP2 PUSH2 0x3CC0 SWAP1 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x3CE0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42DAADAF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT PUSH2 0x3CF7 JUMPI DUP2 PUSH2 0x1C8F JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x80 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP1 DUP4 SWAP1 PUSH2 0x3D5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x107349A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x60 ADD MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3D78 DUP6 PUSH2 0x4BFF JUMP JUMPDEST SWAP1 POP TIMESTAMP DUP2 PUSH1 0x40 ADD MLOAD GT ISZERO PUSH2 0x3DA0 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x1 SWAP2 POP PUSH2 0x3E5B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3DB7 SWAP2 SWAP1 PUSH2 0x5F1A JUMP JUMPDEST DUP5 MLOAD SWAP2 SWAP4 POP SWAP2 POP PUSH2 0x3DCC SWAP1 PUSH1 0x68 SWAP1 DUP4 SWAP1 PUSH2 0x415B JUMP JUMPDEST DUP3 MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD DUP2 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH32 0x4C06B68820628A39C787D2DB1FAA0EEACD7B9474847B198B1E871FE6E5B93F44 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP3 MLOAD PUSH2 0x3E22 SWAP1 DUP4 PUSH2 0x5D2B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP6 POP PUSH1 0x0 DUP7 SWAP5 POP SWAP5 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP8 PUSH1 0x3 ADD SLOAD DUP4 GT ISZERO PUSH2 0x3EB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A411B9D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 ISZERO PUSH2 0x3EBE JUMPI DUP4 PUSH2 0x3EC4 JUMP JUMPDEST DUP9 PUSH1 0x3 ADD SLOAD JUMPDEST DUP10 SLOAD SWAP1 SWAP5 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3ED9 JUMPI POP PUSH1 0x0 DUP6 GT JUMPDEST ISZERO PUSH2 0x3F32 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3EEF DUP4 DUP10 DUP13 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x3F00 JUMPI POP POP PUSH2 0x3F32 JUMP JUMPDEST SWAP7 POP DUP7 PUSH2 0x3F0E DUP13 DUP13 DUP12 PUSH2 0x4C8D JUMP JUMPDEST SWAP3 POP DUP7 PUSH2 0x3F1A DUP2 PUSH2 0x5F40 JUMP JUMPDEST SWAP8 POP POP DUP4 DUP1 PUSH2 0x3F28 SWAP1 PUSH2 0x5F57 JUMP JUMPDEST SWAP5 POP POP POP POP PUSH2 0x3ECA JUMP JUMPDEST POP SWAP9 SWAP4 SWAP8 POP SWAP3 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SLOAD SWAP2 ADD MSTORE DUP3 SWAP1 ISZERO PUSH2 0x3F96 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2D3E5FB9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP4 DUP5 MSTORE SWAP4 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP6 SWAP1 SWAP4 MSTORE SWAP1 SWAP4 KECCAK256 SWAP1 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP1 MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4014 DUP5 DUP5 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x4080 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP5 SWAP2 PUSH2 0x40A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x6 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40BC DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x4128 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x414E JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP TIMESTAMP PUSH1 0x4 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x4168 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP1 DUP3 LT ISZERO PUSH2 0x41AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x5F8EC709 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x41D6 SWAP1 DUP5 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST DUP2 ISZERO PUSH2 0x3974 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x420A SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x872D0489 DUP7 ADDRESS DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x423E SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F70 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x425B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427F SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 DUP2 GT ISZERO PUSH2 0x42AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x5F8EC709 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP7 SWAP3 SWAP1 PUSH2 0x42D7 SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x872D0489 DUP6 ADDRESS DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4318 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F70 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4335 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4359 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x4394 JUMPI PUSH2 0x438F DUP3 PUSH2 0x4D14 JUMP JUMPDEST PUSH2 0x1C8F JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x43AB JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x43CB JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP DUP1 PUSH2 0x1C8F JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4429 DUP4 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x443C JUMPI POP PUSH2 0x443C DUP3 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP4 DUP4 SWAP1 SWAP2 PUSH2 0x4466 JUMPI PUSH1 0x40 MLOAD PUSH4 0x768BF0EB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP PUSH3 0xF4240 SWAP1 POP PUSH2 0x4477 DUP4 DUP6 PUSH2 0x5E36 JUMP JUMPDEST PUSH2 0x1C8F SWAP2 SWAP1 PUSH2 0x5F99 JUMP JUMPDEST DUP2 PUSH1 0x0 SUB PUSH2 0x44A2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F4C63D9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x44CE PUSH2 0x44AD PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x68 SWAP2 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP1 PUSH2 0x41E0 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x2 DUP1 DUP3 ADD SLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT ADDRESS PUSH1 0x60 SWAP1 DUP2 SHL DUP3 AND DUP4 DUP10 ADD MSTORE DUP12 SWAP1 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x48 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD DUP1 DUP3 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0x68 DUP2 ADD DUP1 DUP7 MSTORE DUP3 MLOAD SWAP3 DUP8 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0xE8 DUP3 ADD DUP7 MSTORE DUP10 DUP4 MSTORE TIMESTAMP PUSH1 0x88 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0xA8 DUP4 ADD DUP11 DUP2 MSTORE PUSH1 0xC8 SWAP1 SWAP4 ADD DUP10 DUP2 MSTORE DUP3 DUP11 MSTORE PUSH1 0x69 SWAP1 SWAP9 MSTORE SWAP6 SWAP1 SWAP8 KECCAK256 SWAP2 MLOAD DUP3 SSTORE SWAP4 MLOAD PUSH1 0x1 DUP3 ADD SSTORE SWAP3 MLOAD SWAP1 DUP4 ADD SSTORE SWAP2 MLOAD PUSH1 0x3 SWAP2 DUP3 ADD SSTORE DUP2 ADD SLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0x459C JUMPI PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD DUP2 SWAP1 SSTORE JUMPDEST PUSH2 0x45A6 DUP3 DUP3 PUSH2 0x4D3D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0x5D9E2C5278E41138269F5F980CFBEA016D8C59816754502ABC4D2F87AAEA987F SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH2 0x4627 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4646 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x466A SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10BA3930B739B332B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46AE DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x471A SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x4740 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP TIMESTAMP PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4759 DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x47C5 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x47EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x0 PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4804 DUP4 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1141 DUP2 DUP4 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xECB PUSH2 0x481D PUSH2 0x4DD0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4852 PUSH2 0x484C DUP6 DUP6 PUSH2 0x397B JUMP JUMPDEST DUP4 PUSH2 0x4DDA JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP3 AND EQ PUSH2 0x4884 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8C5B935D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SLOAD SWAP2 ADD MSTORE DUP2 SWAP1 ISZERO PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0x81736271 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0x48E9 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x496A SWAP1 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO DUP6 SWAP1 PUSH2 0x498B JUMPI PUSH1 0x40 MLOAD PUSH4 0xBC4DEF5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP6 DUP7 MSTORE DUP2 DUP4 ADD SWAP5 DUP6 MSTORE TIMESTAMP PUSH1 0x60 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH1 0x80 DUP5 ADD DUP2 DUP2 MSTORE PUSH1 0xA0 DUP6 ADD DUP3 DUP2 MSTORE PUSH1 0xC0 DUP7 ADD SWAP8 DUP9 MSTORE PUSH1 0xE0 DUP7 ADD DUP4 DUP2 MSTORE SWAP11 DUP13 AND DUP4 MSTORE SWAP12 SWAP1 SWAP4 MSTORE SWAP4 SWAP1 SWAP4 KECCAK256 DUP3 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP10 AND SWAP9 SWAP1 SWAP9 OR DUP9 SSTORE SWAP5 MLOAD PUSH1 0x1 DUP9 ADD SSTORE SWAP3 MLOAD PUSH1 0x2 DUP8 ADD SSTORE MLOAD PUSH1 0x3 DUP7 ADD SSTORE SWAP2 MLOAD PUSH1 0x4 DUP6 ADD SSTORE SWAP4 MLOAD PUSH1 0x5 DUP5 ADD SSTORE MLOAD PUSH1 0x6 DUP4 ADD SSTORE MLOAD PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4A38 PUSH2 0x1E70 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF DUP1 DUP3 AND SWAP1 DUP4 AND GT ISZERO PUSH2 0x4A76 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST POP DUP3 SWAP1 POP DUP2 PUSH4 0xFFFFFFFF DUP2 AND PUSH3 0xF4240 LT ISZERO PUSH2 0x4AA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH4 0xFFFFFFFF DUP4 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH4 0xFFFFFFFF PUSH1 0xA0 SHL NOT SWAP2 DUP7 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 SWAP1 SWAP2 AND PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2FE5A7039987697813605CC0B9D6DB7AAB575408E3FC59E8A457BEF8D7BC0A36 SWAP1 PUSH2 0x1F5B SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x52CA JUMP JUMPDEST DUP2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 AND SWAP1 DUP4 AND GT ISZERO PUSH2 0x4B4B JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5366 JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x40 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND SWAP1 DUP6 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2867E04C500E438761486B78021D4F9EB97C77FF45D10C1183F5583BA4CBF7D1 SWAP1 PUSH2 0x1F5B SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x5366 JUMP JUMPDEST PUSH2 0x4BAF PUSH2 0x3B73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4BB9 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x2 DUP2 ADD PUSH2 0x4BC9 DUP5 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x3 DUP2 ADD PUSH2 0x4BD8 DUP4 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x0 DUP1 DUP3 SSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 LT ISZERO DUP1 ISZERO PUSH2 0x2407 JUMPI POP POP SWAP1 SWAP2 GT ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4C2D PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE DUP4 SWAP1 PUSH2 0x215B JUMPI PUSH1 0x40 MLOAD PUSH4 0x107349A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x3 ADD SLOAD GT PUSH2 0x4CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDDAF8F21 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4CC6 DUP6 PUSH1 0x0 ADD SLOAD DUP6 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x4CD9 DUP6 PUSH1 0x0 ADD SLOAD DUP5 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 DUP6 PUSH1 0x3 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x4CEE SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP DUP1 DUP6 SSTORE PUSH1 0x3 DUP6 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x4D0A JUMPI PUSH1 0x0 PUSH1 0x1 DUP7 ADD SSTORE JUMPDEST POP POP SWAP2 SLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x4D24 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA12F521 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP3 PUSH1 0x3 ADD SLOAD LT PUSH2 0x4D63 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A8C56B PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x4D81 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F4A893D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 DUP4 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP4 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4D9D SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x4DB2 JUMPI DUP1 DUP3 SSTORE JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x4DC7 SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC6A PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x4DEA DUP7 DUP7 PUSH2 0x4E78 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x4DFA DUP3 DUP3 PUSH2 0x4EC5 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x4E2F PUSH2 0x4F7E JUMP JUMPDEST PUSH2 0x4E37 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x41 SUB PUSH2 0x4EB2 JUMPI PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x4EA4 DUP9 DUP3 DUP6 DUP6 PUSH2 0x5026 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x4EBE JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x0 SWAP2 POP PUSH1 0x2 SWAP1 JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4ED9 JUMPI PUSH2 0x4ED9 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4EE2 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4EF6 JUMPI PUSH2 0x4EF6 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4F14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF645EEDF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4F28 JUMPI PUSH2 0x4F28 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4F49 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCE698F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x3 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4F5D JUMPI PUSH2 0x4F5D PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0xEAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x35E2F383 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4F89 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F95 PUSH2 0x2C93 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x4FAD JUMPI DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 SLOAD DUP1 ISZERO PUSH2 0x4FBC JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4FF0 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4FFC PUSH2 0x2D34 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x5014 JUMPI DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD DUP1 ISZERO PUSH2 0x4FBC JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH16 0xA2A8918CA85BAFE22016D0B997E4DF60 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP5 GT ISZERO PUSH2 0x5057 JUMPI POP PUSH1 0x0 SWAP2 POP PUSH1 0x3 SWAP1 POP DUP3 PUSH2 0x50E1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP11 SWAP1 MSTORE PUSH1 0xFF DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x50AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x50D7 JUMPI POP PUSH1 0x0 SWAP3 POP PUSH1 0x1 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x50E1 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C8F DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x51A7 DUP2 PUSH2 0x516E JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x51CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C8F DUP2 PUSH2 0x516E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x51E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x51FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x522B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5236 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x525D DUP7 DUP3 DUP8 ADD PUSH2 0x51D5 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x528B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5296 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x52A6 DUP2 PUSH2 0x526A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x52FC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x52E4 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x531D DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x52E1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x534A PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x5305 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x535C DUP2 DUP6 PUSH2 0x5305 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x53A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x53B4 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x51A7 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0xFF PUSH1 0xF8 SHL DUP9 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x53E3 PUSH1 0xE0 DUP4 ADD DUP10 PUSH2 0x5305 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x53F5 DUP2 DUP10 PUSH2 0x5305 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD DUP7 SWAP1 MSTORE DUP4 DUP2 SUB PUSH1 0xC0 DUP6 ADD MSTORE DUP5 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP4 POP SWAP1 SWAP2 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x544B JUMPI DUP4 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x542D JUMP JUMPDEST POP SWAP1 SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x549E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x54AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x54C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP5 ADD ADD GT ISZERO PUSH2 0x54DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP1 DUP5 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP6 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP PUSH1 0x20 DUP7 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5543 JUMPI PUSH1 0x3F NOT DUP8 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x552E DUP6 DUP4 MLOAD PUSH2 0x5305 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5512 JUMP JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5565 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5570 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x5584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x559F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55AB DUP8 DUP3 DUP9 ADD PUSH2 0x51D5 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x55CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x55D5 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x52A6 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x561A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x526A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 DUP4 ADD PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 GT ISZERO PUSH2 0x56F3 JUMPI PUSH2 0x56F3 PUSH2 0x563F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x5721 JUMPI PUSH2 0x5721 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE SWAP1 POP DUP1 DUP3 DUP5 ADD DUP8 LT ISZERO PUSH2 0x5739 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP4 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x576B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x578D DUP7 DUP3 DUP8 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x57A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x57B5 DUP7 DUP3 DUP8 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x57C6 DUP2 PUSH2 0x513C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x57E5 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x5805 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1141 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x5832 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3974 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x583E JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x586B JUMPI PUSH2 0x586B PUSH2 0x563F JUMP JUMPDEST PUSH2 0x587F DUP2 PUSH2 0x5879 DUP5 SLOAD PUSH2 0x57D1 JUMP JUMPDEST DUP5 PUSH2 0x580B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 DUP2 EQ PUSH2 0x58B3 JUMPI PUSH1 0x0 DUP4 ISZERO PUSH2 0x589B JUMPI POP DUP5 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP6 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP5 SWAP1 SHL OR DUP5 SSTORE PUSH2 0x3974 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP6 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x58E3 JUMPI DUP8 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x58C3 JUMP JUMPDEST POP DUP5 DUP3 LT ISZERO PUSH2 0x5901 JUMPI DUP7 DUP5 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE DUP2 PUSH1 0x20 DUP3 ADD MSTORE DUP2 DUP4 PUSH1 0x40 DUP4 ADD CALLDATACOPY PUSH1 0x0 DUP2 DUP4 ADD PUSH1 0x40 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT AND ADD ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x5995 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x59AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP5 DUP3 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD PUSH1 0x0 DUP2 MSTORE DUP4 MLOAD PUSH2 0x59E1 DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0x52E1 JUMP JUMPDEST ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5A3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x40 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x5A50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A58 PUSH2 0x5655 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5A6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xA0 DUP2 DUP8 SUB SLT ISZERO PUSH2 0x5A80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A88 PUSH2 0x567D JUMP JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5A93 DUP2 PUSH2 0x513C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH2 0x5AA3 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH2 0x5AB6 DUP2 PUSH2 0x5A01 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5AF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5AFF DUP9 DUP3 DUP6 ADD PUSH2 0x56C2 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP DUP3 MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5B21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5B2D DUP7 DUP3 DUP6 ADD PUSH2 0x56C2 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5B59 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x5B85 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xECB DUP3 DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5BAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5BCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x5BE8 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5C0F DUP8 DUP3 DUP9 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5C26 DUP2 PUSH2 0x516E JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5C26 DUP2 PUSH2 0x5A01 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x5C4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x5C55 PUSH2 0x569F JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x5C79 PUSH1 0x60 DUP6 ADD PUSH2 0x5C1B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x5C8A PUSH1 0x80 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x5C9B PUSH1 0xA0 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x5CAC PUSH1 0xC0 DUP6 ADD PUSH2 0x5C1B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x5CBD PUSH1 0xE0 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5CEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x516E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x5A01 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5D50 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x52E1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH1 0x40 DUP1 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0x80 SHL SUB PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD SWAP1 POP PUSH1 0xA0 PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x5DE8 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x5305 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x5E05 DUP3 DUP3 PUSH2 0x5305 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5E20 DUP2 DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2407 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5305 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MSTORE DUP4 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD PUSH2 0x2407 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x5E85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x5E90 PUSH2 0x567D JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x5EFE PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x5305 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE POP PUSH1 0x40 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP1 SWAP2 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5F2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x52A6 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x5F4F JUMPI PUSH2 0x5F4F PUSH2 0x593F JUMP JUMPDEST POP PUSH1 0x0 NOT ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x5F69 JUMPI PUSH2 0x5F69 PUSH2 0x593F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5FB6 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 SDIV 0xE4 SWAP11 PUSH30 0x3D7F3015873A2C41E2F68419180F16CEF8FD91645F14BC8E8B733264736F PUSH13 0x634300081B0033000000000000 ", + "sourceMap": "1852:23230:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17047:151;;;;;;:::i;:::-;;:::i;:::-;;;;;;619:13:62;;-1:-1:-1;;;;;615:39:62;597:58;;711:4;699:17;;;693:24;671:20;;;664:54;774:4;762:17;;;756:24;734:20;;;727:54;837:4;825:17;;;819:24;797:20;;;790:54;900:4;888:17;;;882:24;860:20;;;853:54;642:3;951:17;;;945:24;923:20;;;916:54;1026:4;1014:17;;;1008:24;986:20;;;979:54;1089:4;1077:17;;;1071:24;1049:20;;;1042:54;;;;584:3;569:19;;402:700;17047:151:50;;;;;;;;510:30:51;;;;;;;;;1253:25:62;;;1241:2;1226:18;510:30:51;1107:177:62;648:75:11;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1520:25:62;;;1576:2;1561:18;;1554:34;;;;1604:18;;;1597:34;1662:2;1647:18;;1640:34;1507:3;1492:19;648:75:11;1289:391:62;3866:538:50;;;;;;:::i;:::-;;:::i;:::-;;16073:133;;;;;;:::i;:::-;;:::i;3052:106:8:-;10192:15:17;;-1:-1:-1;;;10192:15:17;;;;3052:106:8;;;2725:10:62;2713:23;;;2695:42;;2683:2;2668:18;3052:106:8;2551:192:62;5139:893:50;;;;;;:::i;:::-;;:::i;15339:149::-;;;;;;:::i;:::-;;:::i;295:37:18:-;;;;;;1052:86:58;;;;;;:::i;:::-;;;;;;;;;;;;;;19796:165:50;;;;;;:::i;:::-;;:::i;:::-;;;4555:14:62;;4548:22;4530:41;;4518:2;4503:18;19796:165:50;4390:187:62;1194:93:12;;;:::i;930:138:10:-;;;;;;:::i;:::-;;:::i;2653:116:8:-;;;:::i;:::-;;;;;;;;:::i;255:76:51:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;285:79:58:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;285:79:58;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6447:32:62;;;6429:51;;6511:2;6496:18;;6489:34;;;;6539:18;;;6532:34;;;;6597:2;6582:18;;6575:34;;;;6640:3;6625:19;;6618:35;6467:3;6669:19;;6662:35;6728:3;6713:19;;6706:35;6772:3;6757:19;;6750:35;6416:3;6401:19;285:79:58;6086:705:62;17867:412:50;;;;;;:::i;:::-;-1:-1:-1;;;;;18048:25:50;;;17962:7;18048:25;;;:11;:25;;;;;;;;;18017:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17867:412;;;;;-1:-1:-1;;;;;7073:32:62;;;7055:51;;7137:2;7122:18;;7115:34;;;;7165:18;;;7158:34;;;;7223:2;7208:18;;7201:34;7266:3;7251:19;;7244:35;7042:3;7027:19;17867:412:50;6796:489:62;2692:145:38;;;:::i;563:76:58:-;;;;;;:::i;:::-;;;;;;;;;;;;;;19061:146:50;;;;;;:::i;:::-;;:::i;19287:169::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;19418:31:50;;;;;:17;:31;;;;;19411:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;19287:169;;;;;7506:13:62;;-1:-1:-1;;;;;7502:39:62;7484:58;;7598:4;7586:17;;;7580:24;7558:20;;;7551:54;;;;7457:18;19287:169:50;7290:321:62;3155:101:34;;;:::i;2456:120:8:-;;;:::i;:::-;;;;;;;;:::i;855:73:58:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;855:73:58;;;;;;;;;;:::i;436:37:18:-;;;;;;15570:148:50;;;;;;:::i;:::-;;:::i;16505:134::-;;;;;;:::i;:::-;;:::i;15016:246::-;;;;;;:::i;:::-;;:::i;16714:259::-;;;;;;:::i;:::-;;:::i;9782:495::-;;;;;;:::i;:::-;;:::i;2850:126:8:-;;;:::i;:::-;;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;;8783:18;2850:126:8;8636:248:62;14422:510:50;;;;;;:::i;:::-;;:::i;15804:190::-;;;;;;:::i;:::-;;:::i;1032:92:12:-;;;:::i;5173:903:39:-;;;:::i;:::-;;;;;;;;;;;;;:::i;762:30:58:-;;;;;;856:32:18;;;;;-1:-1:-1;;;856:32:18;;;;;;576:34;;;;;-1:-1:-1;;;;;576:34:18;;;;;;-1:-1:-1;;;;;10807:31:62;;;10789:50;;10777:2;10762:18;576:34:18;10645:200:62;2441:144:34;;;:::i;997:32:18:-;;;;;-1:-1:-1;;;997:32:18;;;;;;673:68:12;;;;;;:::i;:::-;;;;;;;;;;;;;;;;413:91:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;413:91:58;;;;;;;;;;;;;;:::i;712:34:18:-;;;;;-1:-1:-1;;;712:34:18;;-1:-1:-1;;;;;712:34:18;;;13804:541:50;;;;;;:::i;:::-;;:::i;1502:484:37:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11451:1433:50:-;;;;;;:::i;:::-;;:::i;20037:146::-;;;;;;:::i;:::-;;:::i;1187:29:18:-;;;;;-1:-1:-1;;;1187:29:18;;;;;;13407:316:50;;;;;;:::i;:::-;;:::i;332:78:11:-;;;;;;:::i;:::-;;;;;;;;;;;;;;6619:346:50;;;;;;:::i;:::-;;:::i;19538:180::-;;;;;;:::i;:::-;;:::i;410:31:51:-;;;;;;8129:615:50;;;;;;:::i;:::-;;:::i;18604:176::-;;;;;;:::i;:::-;18702:7;18728:45;;;:23;:45;;;;;;;18604:176;16286:140;;;;;;:::i;:::-;;:::i;501:75:11:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3405:215:34;;;;;;:::i;:::-;;:::i;17047:151:50:-;17124:23;;:::i;:::-;-1:-1:-1;;;;;;17166:25:50;;;;;;;:11;:25;;;;;;;;;17159:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17047:151::o;3866:538::-;4158:30:35;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:35;-1:-1:-1;;;4302:15:35;;;4301:16;;-1:-1:-1;;;;;4348:14:35;4279:19;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:35;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:35;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:35;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:35;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:35;-1:-1:-1;;;5013:22:35;;;4979:67;4036:26:50::1;4051:10;4036:14;:26::i;:::-;4072:18;:16;:18::i;:::-;4100:20;:18;:20::i;:::-;4130:28;:26;:28::i;:::-;4168:50;;;;;;;;;;;;;;-1:-1:-1::0;;;4168:50:50::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;4168:50:50::1;;::::0;:24:::1;:50::i;:::-;4229:67;4254:22;-1:-1:-1::0;;4229:24:50::1;:67::i;:::-;4306:43;4326:22;4306:19;:43::i;:::-;4359:38;4380:16;4359:20;:38::i;:::-;5070:14:35::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:35;;;5142:14;;-1:-1:-1;10789:50:62;;5142:14:35;;10777:2:62;10762:18;5142:14:35;;;;;;;5066:101;4092:1081;;;;;3866:538:50;;;:::o;16073:133::-;2334:13:34;:11;:13::i;:::-;16163:36:50::1;16183:15;16163:19;:36::i;:::-;16073:133:::0;:::o;3130:21:8:-;3123:28;;3052:106;:::o;5139:893:50:-;5262:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;;;;;;;;;;;5290:7:50::1;4289:42:17;4334:30;4348:15;4334:13;:30::i;:::-;4289:75;;4374:32;4396:9;4374:21;:32::i;:::-;4416:43;4442:9;4453:5;4416:25;:43::i;:::-;2316:19:38::2;:17;:19::i;:::-;5324:17:50::3;::::0;;5396:77:::3;::::0;;::::3;5420:4:::0;5396:77:::3;:::i;:::-;5323:150;;;;;;5512:1;5498:3;5492:17;:21;5484:57;;;;-1:-1:-1::0;;;5484:57:50::3;;;;;;;;;;;;5583:1;5565:7;5559:21;:25;5551:65;;;;-1:-1:-1::0;;;5551:65:50::3;;;;;;;;;;;;-1:-1:-1::0;;;;;5634:17:50;::::3;;::::0;;;:8:::3;:17;::::0;;;;:30;:35;5626:87:::3;;;;-1:-1:-1::0;;;5626:87:50::3;;;;;;;;;;;;5776:70;::::0;;::::3;::::0;::::3;::::0;;5800:15:::3;5776:70:::0;;::::3;::::0;;::::3;::::0;;;;;;;;;-1:-1:-1;;;;;5756:17:50;::::3;-1:-1:-1::0;5756:17:50;;;:8:::3;:17:::0;;;;;;:90;;;;;;5776:70;;5756:17;:90:::3;::::0;::::3;::::0;::::3;::::0;;::::3;:::i;:::-;-1:-1:-1::0;5756:90:50::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;:::i;:::-;-1:-1:-1::0;;;;;;;;5860:32:50;::::3;::::0;5856:114:::3;;5908:51;5931:7;5940:18;5908:22;:51::i;:::-;6011:7;-1:-1:-1::0;;;;;5985:40:50::3;;6020:4;;5985:40;;;;;;;:::i;:::-;;;;;;;;5313:719;;;4279:198:17::1;4066:1;5139:893:50::0;;;;:::o;15339:149::-;2334:13:34;:11;:13::i;:::-;15440:41:50::1;15458:13;15473:7;15440:17;:41::i;:::-;15339:149:::0;;:::o;19796:165::-;19938:15;;19877:4;;19900:54;;:29;:11;19916:12;19900:15;:29::i;:::-;:37;;:54::i;:::-;19893:61;19796:165;-1:-1:-1;;19796:165:50:o;1194:93:12:-;883:10;868:26;;;;:14;:26;;;;;;;;860:84;;;;-1:-1:-1;;;860:84:12;;;;;;;;:::i;:::-;;2563:16:38::1;:14;:16::i;:::-;1270:10:12::2;:8;:10::i;:::-;1194:93::o:0;930:138:10:-;1016:45;1030:10;1042:18;1016:13;:45::i;2653:116:8:-;2707:6;2715;2740:22;:20;:22::i;:::-;2733:29;;;;2653:116;;:::o;255:76:51:-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2692:145:38:-;2739:4;2755:25;2783:21;:19;:21::i;:::-;2821:9;;;;2692:145;-1:-1:-1;;2692:145:38:o;19061:146:50:-;-1:-1:-1;;;;;19166:25:50;;;19143:4;19166:25;;;:11;:25;;;;;;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19143:4;19166:34;;:32;:34::i;3155:101:34:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;2456:120:8:-:0;2512:6;2520;2545:24;:22;:24::i;15570:148:50:-;15657:54;15680:10;15692:18;15657:22;:54::i;16505:134::-;2334:13:34;:11;:13::i;:::-;16596:36:50::1;16616:15;16596:19;:36::i;15016:246::-:0;2334:13:34;:11;:13::i;:::-;15186:69:50::1;15211:7;15220:12;15234:20;15186:24;:69::i;:::-;15016:246:::0;;;:::o;16714:259::-;2334:13:34;:11;:13::i;:::-;16805:31:50::1;16824:11;312:9:31::0;-1:-1:-1;1823:16:31;;1742:104;16805:31:50::1;16872:11;16797:88;;;;;-1:-1:-1::0;;;16797:88:50::1;;;;;;1253:25:62::0;;1241:2;1226:18;;1107:177;16797:88:50::1;-1:-1:-1::0;16895:15:50::1;:29:::0;;;16939:27:::1;::::0;1253:25:62;;;16939:27:50::1;::::0;1241:2:62;1226:18;16939:27:50::1;;;;;;;;16714:259:::0;:::o;9782:495::-;9908:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;2497:17:50;::::1;;::::0;;;:8:::1;:17;::::0;;;;:30;9939:7;;;;2489:90:::1;;;;-1:-1:-1::0;;;2489:90:50::1;;;;;;;;:::i;:::-;;2316:19:38::2;:17;:19::i;:::-;9972:20:50::3;9995:27;::::0;;::::3;10006:4:::0;9995:27:::3;:::i;:::-;9972:50:::0;-1:-1:-1;;;;;;10053:48:50;::::3;:29;:11;9972:50:::0;10053:15:::3;:29::i;:::-;:37:::0;10154:7;;10163:12;;-1:-1:-1;;;;;10053:48:50::3;;10032:154;;;;-1:-1:-1::0;;;10032:154:50::3;;;;;;;;;:::i;:::-;;;10196:30;10213:12;10196:16;:30::i;:::-;10256:7;-1:-1:-1::0;;;;;10241:29:50::3;;10265:4;;10241:29;;;;;;;:::i;:::-;;;;;;;;9962:315;4066:1:17::1;9782:495:50::0;;;;:::o;2850:126:8:-;2908:7;2917;2943:26;10501:11:17;10545:22;10569;;10545;;10434:165;14422:510:50;14585:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;;;14621:7:50::1;4289:42:17;4334:30;4348:15;4334:13;:30::i;:::-;4289:75;;4374:32;4396:9;4374:21;:32::i;:::-;4416:43;4442:9;4453:5;4416:25;:43::i;:::-;-1:-1:-1::0;;;;;2497:17:50;::::2;;::::0;;;:8:::2;:17;::::0;;;;:30;14660:7;;;;2489:90:::2;;;;-1:-1:-1::0;;;2489:90:50::2;;;;;;;;:::i;:::-;;2316:19:38::3;:17;:19::i;:::-;-1:-1:-1::0;;;;;14726:48:50;::::4;:29;:11;14742:12:::0;14726:15:::4;:29::i;:::-;:37:::0;14827:7;;14836:12;;-1:-1:-1;;;;;14726:48:50::4;;14705:154;;;;-1:-1:-1::0;;;14705:154:50::4;;;;;;;;;:::i;:::-;;;14869:56;14887:12;14901:6;14909:15;;;;;;;;;;;14869:17;:56::i;15804:190::-:0;2334:13:34;:11;:13::i;:::-;15909:78:50::1;15934:22;-1:-1:-1::0;;15909:24:50::1;:78::i;1032:92:12:-:0;883:10;868:26;;;;:14;:26;;;;;;;;860:84;;;;-1:-1:-1;;;860:84:12;;;;;;;;:::i;:::-;;2316:19:38::1;:17;:19::i;:::-;1109:8:12::2;:6;:8::i;5173:903:39:-:0;5271:13;5298:18;5330:21;5365:15;5394:25;5433:12;5459:27;5511:23;5537:19;:17;:19::i;:::-;5777:13;;5511:45;;-1:-1:-1;5777:18:39;:43;;;;-1:-1:-1;5799:16:39;;;;:21;5777:43;5769:77;;;;-1:-1:-1;;;5769:77:39;;21246:2:62;5769:77:39;;;21228:21:62;21285:2;21265:18;;;21258:30;-1:-1:-1;;;21304:18:62;;;21297:51;21365:18;;5769:77:39;21044:345:62;5769:77:39;5908:13;:11;:13::i;:::-;5935:16;:14;:16::i;:::-;6043;;;6027:1;6043:16;;;;;;;;;-1:-1:-1;;;5857:212:39;;;-1:-1:-1;5857:212:39;;-1:-1:-1;5965:13:39;;-1:-1:-1;6000:4:39;;-1:-1:-1;6027:1:39;-1:-1:-1;6043:16:39;-1:-1:-1;5857:212:39;-1:-1:-1;;5173:903:39:o;2441:144:34:-;2487:7;2506:24;2533:20;:18;:20::i;:::-;2570:8;-1:-1:-1;;;;;2570:8:34;;2441:144;-1:-1:-1;;2441:144:34:o;13804:541:50:-;13884:34;13921:29;:11;13937:12;13921:15;:29::i;:::-;13884:66;;13960:12;13975:35;13994:15;;13975:10;:18;;:35;;;;:::i;:::-;14061:18;;14081:15;;13960:50;;-1:-1:-1;14020:21:50;;14044:53;;14061:18;-1:-1:-1;;;14081:15:50;;;;14044:16;:53::i;:::-;14020:77;;14115:7;:27;;;;14126:16;14115:27;14186:12;14107:93;;;;;-1:-1:-1;;;14107:93:50;;;;;;;;:::i;:::-;;14219:25;:10;:23;:25::i;:::-;14218:26;14284:12;14210:88;;;;;-1:-1:-1;;;14210:88:50;;;;;;;;:::i;:::-;;14308:30;14325:12;14308:16;:30::i;:::-;13874:471;;;13804:541;:::o;1502:484:37:-;1668:12;;;1604:20;1668:12;;;;;;;;1570:22;;1779:4;-1:-1:-1;;;;;1767:24:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:34;;1806:9;1801:155;1821:15;;;1801:155;;;1870:75;1907:4;1927;;1932:1;1927:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1936;1914:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1870:28;:75::i;:::-;1857:7;1865:1;1857:10;;;;;;;;:::i;:::-;;;;;;;;;;:88;1838:3;;1801:155;;;;1965:14;1502:484;;;;:::o;11451:1433:50:-;11769:7;11646;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;;;11682:7:50::1;4289:42:17;4334:30;4348:15;4334:13;:30::i;:::-;4289:75;;4374:32;4396:9;4374:21;:32::i;:::-;4416:43;4442:9;4453:5;4416:25;:43::i;:::-;-1:-1:-1::0;;;;;2497:17:50;::::2;;::::0;;;:8:::2;:17;::::0;;;;:30;11721:7;;;;2489:90:::2;;;;-1:-1:-1::0;;;2489:90:50::2;;;;;;;;:::i;:::-;;2316:19:38::3;:17;:19::i;:::-;11792:24:50::4;::::0;11835:11:::4;:51;;;;;;;;:::i;:::-;::::0;11831:935:::4;;11902:40;11945:43;::::0;;::::4;11956:4:::0;11945:43:::4;:::i;:::-;12027:13:::0;;:29:::4;;::::0;11902:86;;-1:-1:-1;12060:7:50;-1:-1:-1;;;;;12027:40:50;;::::4;::::0;;::::4;;12002:167;;;;-1:-1:-1::0;;;12002:167:50::4;;;;;;;;;:::i;:::-;;;12202:28;12220:9;12202:17;:28::i;:::-;12183:47;;11888:353;11831:935;;;12266:43;12251:11;:58;;;;;;;;:::i;:::-;::::0;12247:519:::4;;12326:20;::::0;12363:36:::4;::::0;;::::4;12374:4:::0;12363:36:::4;:::i;:::-;12325:74:::0;;-1:-1:-1;12325:74:50;-1:-1:-1;;;;;;12438:48:50;::::4;:29;:11;12325:74:::0;12438:15:::4;:29::i;:::-;:37:::0;12543:7;;12552:12;;-1:-1:-1;;;;;12438:48:50::4;;12413:166;;;;-1:-1:-1::0;;;12413:166:50::4;;;;;;;;;:::i;:::-;;;12612:59;12636:12;12650:3;12655:15;;;;;;;;;;;12612:23;:59::i;:::-;12593:78;;12311:371;;12247:519;;;12743:11;12709:46;;-1:-1:-1::0;;;12709:46:50::4;;;;;;;;:::i;12247:519::-;12814:11;12781:63;;;;;;;;:::i;:::-;12805:7;-1:-1:-1::0;;;;;12781:63:50::4;;12827:16;12781:63;;;;1253:25:62::0;;1241:2;1226:18;;1107:177;12781:63:50::4;;;;;;;;12861:16:::0;11451:1433;-1:-1:-1;;;;;;;;;11451:1433:50:o;20037:146::-;20111:4;20134:42;20151:7;20160:15;;;;;;;;;;;20134:16;:42::i;13407:316::-;2112:10:61;2134:15;-1:-1:-1;;;;;2112:38:61;;;;2091:147;;;;-1:-1:-1;;;2091:147:61;;;;;;;;;:::i;:::-;-1:-1:-1;13508:14:50::1;::::0;-1:-1:-1;13508:14:50;13542:36:::1;::::0;;::::1;13553:4:::0;13542:36:::1;:::i;:::-;13507:71;;;;13588:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;13588:21:50::1;;13610:7;13619:6;13627;13643:17;:15;:17::i;:::-;13588:74;::::0;::::1;::::0;;;-1:-1:-1;;;;;;13588:74:50;;;-1:-1:-1;;;;;26454:32:62;;;13588:74:50::1;::::0;::::1;26436:51:62::0;26503:18;;;26496:34;;;;26546:18;;;26539:34;;;;26609:32;;;26589:18;;;26582:60;26408:19;;13588:74:50::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13700:7;-1:-1:-1::0;;;;;13677:39:50::1;;13709:6;13677:39;;;;1253:25:62::0;;1241:2;1226:18;;1107:177;13677:39:50::1;;;;;;;;13497:226;;13407:316:::0;;;:::o;6619:346::-;6761:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;2497:17:50;::::1;;::::0;;;:8:::1;:17;::::0;;;;:30;6792:7;;;;2489:90:::1;;;;-1:-1:-1::0;;;2489:90:50::1;;;;;;;;:::i;:::-;;2316:19:38::2;:17;:19::i;:::-;6825:30:50::3;6847:7;6825:21;:30::i;:::-;6865:35;6892:7;6865:26;:35::i;:::-;6915:43;::::0;-1:-1:-1;;;;;6915:43:50;::::3;::::0;::::3;::::0;;;::::3;4066:1:17::1;6619:346:50::0;;;;:::o;19538:180::-;19640:7;19666:45;19689:7;19698:12;19666:22;:45::i;:::-;19659:52;19538:180;-1:-1:-1;;;19538:180:50:o;8129:615::-;8280:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;;;8316:7:50::1;4289:42:17;4334:30;4348:15;4334:13;:30::i;:::-;4289:75;;4374:32;4396:9;4374:21;:32::i;:::-;4416:43;4442:9;4453:5;4416:25;:43::i;:::-;-1:-1:-1::0;;;;;2497:17:50;::::2;;::::0;;;:8:::2;:17;::::0;;;;:30;8355:7;;;;2489:90:::2;;;;-1:-1:-1::0;;;2489:90:50::2;;;;;;;;:::i;:::-;;2316:19:38::3;:17;:19::i;:::-;8401:28:50::4;::::0;;;8501:86:::4;::::0;;::::4;8525:4:::0;8501:86:::4;:::i;:::-;8400:187;;;;;;;;8597:96;8607:7;8616:12;8630:20;8652:6;8660:15;8677;;;;;;;;;;;8597:9;:96::i;:::-;;8723:7;-1:-1:-1::0;;;;;8708:29:50::4;;8732:4;;8708:29;;;;;;;:::i;:::-;;;;;;;;8390:354;;;;4469:1:17::2;4279:198:::1;4066:1;8129:615:50::0;;;;:::o;16286:140::-;2334:13:34;:11;:13::i;:::-;16380:39:50::1;16401:17;16380:20;:39::i;3405:215:34:-:0;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:34;::::1;3485:91;;3562:1;3534:31;;-1:-1:-1::0;;;3534:31:34::1;;;;;;;;:::i;3485:91::-;3585:28;3604:8;3585:18;:28::i;8737:170:35:-:0;8870:21;;8737:170::o;1847:127:34:-;6931:20:35;:18;:20::i;:::-;1929:38:34::1;1954:12;1929:24;:38::i;1202:61:37:-:0;6931:20:35;:18;:20::i;2045:148:8:-;6931:20:35;:18;:20::i;:::-;2111:35:8::1;:33;:35::i;:::-;2156:30;:28;:30::i;1423:156:12:-:0;6931:20:35;:18;:20::i;:::-;1497:27:12::1;:25;:27::i;6521:213:57:-:0;6931:20:35;:18;:20::i;:::-;6636:30:57::1;6650:5;6657:8;6636:13;:30::i;:::-;6676:51;6711:5;6718:8;6676:34;:51::i;6312:279:17:-:0;6401:4;6409;6401:12;;;;6393:63;;;;-1:-1:-1;;;6393:63:17;;;;;8810:25:62;;;;8851:18;;;8844:34;8783:18;;6393:63:17;8636:248:62;6393:63:17;-1:-1:-1;;6466:22:17;:29;;;6505:22;:29;;;6549:35;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;6549:35:17;;8783:18:62;6549:35:17;;;;;;;;6312:279;;:::o;5957:135::-;6020:15;:24;;-1:-1:-1;;;;6020:24:17;-1:-1:-1;;;6020:24:17;;;;;;;;;;;;;6059:26;;2695:42:62;;;6059:26:17;;2683:2:62;2668:18;6059:26:17;2551:192:62;24822:258:50;24905:17;24926:1;24905:22;24897:77;;;;-1:-1:-1;;;24897:77:50;;;;;;;;;;;;24984:16;:36;;;25035:38;;1253:25:62;;;25035:38:50;;1241:2:62;1226:18;25035:38:50;1107:177:62;2658:162:34;966:10:36;2717:7:34;:5;:7::i;:::-;-1:-1:-1;;;;;2717:23:34;;2713:101;;966:10:36;2763:40:34;;-1:-1:-1;;;2763:40:34;;;;;;;;:::i;5889:102:33:-;5971:13;;5889:102::o;11557:351:17:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11718:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;11718:28:17;;11747:16;11773:4;11718:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11673:106;;11797:9;:19;;;-1:-1:-1;;;;;11797:24:17;11820:1;11797:24;;11857:16;11789:86;;;;;-1:-1:-1;;;11789:86:17;;;;;;;;:::i;:::-;-1:-1:-1;11892:9:17;11557:351;-1:-1:-1;;11557:351:17:o;8224:210::-;8332:95;8351:10;:17;;;8370:22;;8394;;8332:95;;;;;;;;;;;;;-1:-1:-1;;;8332:95:17;;;:18;:95::i;9236:755::-;9391:23;9416;9443:24;:22;:24::i;:::-;9390:77;;;;9477:27;9507:13;:74;;9557:10;:24;;;9507:74;;;9523:10;:31;;;9507:74;9477:104;;9591:93;9610:20;-1:-1:-1;;;;;9591:93:17;9632:16;-1:-1:-1;;;;;9591:93:17;9650:16;-1:-1:-1;;;;;9591:93:17;;;;;;;;;;;;;;-1:-1:-1;;;9591:93:17;;;:18;:93::i;:::-;9696:21;9719;9744:22;:20;:22::i;:::-;9695:71;;;;9776:28;9807:13;:76;;9858:10;:25;;;9807:76;;;9823:10;:32;;;9807:76;9776:107;;9893:91;9912:21;9893:91;;9935:14;9893:91;;9951:14;9893:91;;;;;;;;;;;;;;;-1:-1:-1;;;9893:91:17;;;:18;:91::i;2905:128:38:-;2970:8;:6;:8::i;:::-;2966:61;;;3001:15;;-1:-1:-1;;;3001:15:38;;;;;;;;;;;18843:222:57;-1:-1:-1;;;;;18941:28:57;;;;;;;:18;:28;;;;;;:50;;-1:-1:-1;;;;;;18941:50:57;;;;;;;;;19006:52;;;18941:28;19006:52;18843:222;;:::o;2101:204:12:-;2316:19:38;:17;:19::i;:::-;-1:-1:-1;;;;;2200:30:12;::::1;;::::0;;;:14:::1;:30;::::0;;;;;;;;:41;;-1:-1:-1;;2200:41:12::1;::::0;::::1;;::::0;;::::1;::::0;;;2256:42;;4530:41:62;;;2256:42:12::1;::::0;4503:18:62;2256:42:12::1;;;;;;;2101:204:::0;;:::o;5580:160:54:-;5678:12;;:::i;:::-;5709:24;5714:4;5720:12;5709:4;:24::i;:::-;5702:31;;;;;;;;;;-1:-1:-1;;;;;5702:31:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5580:160;-1:-1:-1;;;5580:160:54:o;5924:267::-;6007:4;6023:24;6068:49;6077:4;:14;;;6093:4;:23;;;6068:8;:49::i;:::-;6050:67;;:15;:67;:::i;:::-;6023:94;;6134:13;:4;:11;:13::i;:::-;:50;;;;;6170:14;6151:16;:33;6134:50;6127:57;5924:267;-1:-1:-1;;;;5924:267:54:o;3105:126:38:-;3168:8;:6;:8::i;:::-;3163:62;;3199:15;;-1:-1:-1;;;3199:15:38;;;;;;;;;;;3674:178;2563:16;:14;:16::i;:::-;3732:25:::1;3760:21;:19;:21::i;:::-;3791:17:::0;;-1:-1:-1;;3791:17:38::1;::::0;;;-1:-1:-1;3823:22:38::1;966:10:36::0;3832:12:38::1;3823:22;;;;;;:::i;2551:526:10:-:0;-1:-1:-1;;;;;2685:29:10;;2648:34;2685:29;;;:11;:29;;;;;;;;2898:31;;;;;28953:36:62;;;29005:18;;;28998:60;;;;2898:31:10;;;;;;;;;28926:18:62;;;;2898:31:10;;2648:34;;2770:202;;2685:29;;2803:18;;2835;;2867:17;;2943:19;2770;:202::i;:::-;2724:248;;;;3008:16;-1:-1:-1;;;;;2988:82:10;;3026:14;3053:4;3042:27;;;;;;;;;;;;:::i;:::-;2988:82;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;;8783:18;2988:82:10;8636:248:62;20988:174:50;21052:10;21064;21094:17;:15;:17::i;:::-;-1:-1:-1;;;;;21094:32:50;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21086:69;312:9:31;;-1:-1:-1;20988:174:50;-1:-1:-1;20988:174:50:o;1147:162:38:-;1270:23;;1147:162::o;6503:123:54:-;6561:4;6584:13;:4;6374:14;;;:19;;;6293:107;6584:13;:35;;;;-1:-1:-1;;6601:13:54;;;:18;;6503:123::o;3774:248:34:-;3847:24;3874:20;:18;:20::i;:::-;3923:8;;-1:-1:-1;;;;;3941:19:34;;;-1:-1:-1;;;;;;3941:19:34;;;;;;3975:40;;3847:47;;-1:-1:-1;3923:8:34;;;;;3975:40;;3904:16;;3975:40;3837:185;;3774:248;:::o;20571:180:50:-;20637:10;20649;20679:17;:15;:17::i;:::-;-1:-1:-1;;;;;20679:34:50;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20671:73;-1:-1:-1;;;;;1406:16:17;-1:-1:-1;20571:180:50;-1:-1:-1;20571:180:50:o;19322:166:57:-;19396:15;:34;;;19445:36;;1253:25:62;;;19445:36:57;;1241:2:62;1226:18;19445:36:57;1107:177:62;7497:292:57;7622:73;:17;7648:8;7658:13;7673:21;7622:25;:73::i;:::-;7760:21;7745:13;-1:-1:-1;;;;;7710:72:57;7735:8;-1:-1:-1;;;;;7710:72:57;;;;;;;;;;;7497:292;;;:::o;17711:889::-;17779:34;17816:30;:11;17832:13;17816:15;:30::i;:::-;17779:67;;17949:160;17990:13;18017:22;:20;:22::i;:::-;-1:-1:-1;;;;;18017:49:57;;18067:10;:31;;;18017:82;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;18017:82:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17949:11;;:160;:27;:160::i;:::-;18120:32;:11;18138:13;18120:17;:32::i;:::-;18197:18;;18217:17;;;;18162:73;;:26;;:34;:73::i;:::-;18457:10;:17;;;18386:23;:56;18410:10;:31;;;18386:56;;;;;;;;;;;;:88;;;;:::i;:::-;18315:23;:56;18339:10;:31;;;18315:56;;;;;;;;;;;:159;;;;18542:10;:31;;;18527:13;-1:-1:-1;;;;;18490:103:57;18507:10;:18;;;-1:-1:-1;;;;;18490:103:57;;18575:10;:17;;;18490:103;;;;1253:25:62;;1241:2;1226:18;;1107:177;18490:103:57;;;;;;;;17769:831;17711:889;:::o;15057:2069::-;15197:23;;:::i;:::-;15232:34;15269:30;:11;15285:13;15269:15;:30::i;:::-;15232:67;;15317:19;:10;:17;:19::i;:::-;15372:13;15309:78;;;;;-1:-1:-1;;;15309:78:57;;;;;;;;:::i;:::-;;15416:10;:17;;;15405:7;:28;;15471:13;15486:7;15397:98;;;;;;-1:-1:-1;;;15397:98:57;;;;;;;;;:::i;:::-;-1:-1:-1;;15562:17:57;;;;15593:19;;;15589:263;;;15628:107;15660:15;:13;:15::i;:::-;15677:18;;15697:19;15707:9;15697:7;:19;:::i;:::-;15628:26;;:107;;15718:16;15628:31;:107::i;:::-;15589:263;;;15801:18;;15766:75;;15821:19;15833:7;15821:9;:19;:::i;:::-;15766:26;;:75;:34;:75::i;:::-;15957:35;15995:22;:20;:22::i;:::-;-1:-1:-1;;;;;15995:49:57;;16058:10;:31;;;15995:104;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;15995:104:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15957:142;;16109:42;16155:25;:10;:23;:25::i;:::-;16154:26;:125;;16278:1;16154:125;;;16225:38;;;;16195:68;;:27;:68;:::i;:::-;-1:-1:-1;;;;;16323:26:57;;;;;;:11;:26;;;;;:33;;;:43;;;16376:54;;:84;;;16109:170;-1:-1:-1;16518:22:57;:20;:22::i;:::-;:115;;-1:-1:-1;;;16518:115:57;;;;;8810:25:62;;;8851:18;;;8844:34;;;-1:-1:-1;;;;;16518:34:57;;;;;;;8783:18:62;;16518:115:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16470:26:57;;;;;;:11;:26;;;;;:44;;:163;;:44;;:26;:163;;;;;:::i;:::-;;;;-1:-1:-1;;16717:19:57;;;16713:243;;;16813:19;16823:9;16813:7;:19;:::i;:::-;16752:23;:56;16776:10;:31;;;16752:56;;;;;;;;;;;;:81;;;;;;;:::i;:::-;;;;-1:-1:-1;16713:243:57;;-1:-1:-1;16713:243:57;;16925:19;16937:7;16925:9;:19;:::i;:::-;16864:23;:56;16888:10;:31;;;16864:56;;;;;;;;;;;;:81;;;;;;;:::i;:::-;;;;-1:-1:-1;;16713:243:57;17024:10;:31;;;17009:13;-1:-1:-1;;;;;16971:105:57;16989:10;:18;;;-1:-1:-1;;;;;16971:105:57;;17057:7;17066:9;16971:105;;;;;;8810:25:62;;;8866:2;8851:18;;8844:34;8798:2;8783:18;;8636:248;16971:105:57;;;;;;;;-1:-1:-1;;;;;;;;;17093:26:57;;;;;;;:11;:26;;;;;;;;;17086:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17086:33:57;;15057:2069;-1:-1:-1;;15057:2069:57:o;3366:176:38:-;2316:19;:17;:19::i;:::-;3425:25:::1;3453:21;:19;:21::i;:::-;3484:16:::0;;-1:-1:-1;;3484:16:38::1;3496:4;3484:16;::::0;;3425:49;-1:-1:-1;3515:20:38::1;3522:12;966:10:36::0;;887:96;2720:156:39;2839:21;;2720:156::o;6300:155::-;6354:13;6379:23;6405:19;:17;:19::i;:::-;6379:45;;6441:1;:7;;6434:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6300:155;:::o;6682:161::-;6739:13;6764:23;6790:19;:17;:19::i;:::-;6764:45;;6826:1;:10;;6819:17;;;;;:::i;1192:159:34:-;1313:22;;1192:159::o;20766:200:57:-;20858:4;20882:77;20915:15;:13;:15::i;:::-;20882:26;;20932:8;20942:16;20882:32;:77::i;:::-;20881:78;;20766:200;-1:-1:-1;;;20766:200:57:o;6735:127:54:-;6799:4;6822:13;:4;6374:14;;;:19;;;6293:107;6822:13;:33;;;;-1:-1:-1;;6839:11:54;;;:16;;6735:127::o;4106:253:42:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:42;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:42:o;22503:2313:50:-;22641:14;;:30;;;;;22715:23;;;;;22704:46;;22590:21;;22641:30;22590:21;;22704:46;;;;;;;;;:::i;:::-;22681:69;-1:-1:-1;22760:34:50;22797:29;:11;22681:69;22797:15;:29::i;:::-;22930:18;;22760:66;;-1:-1:-1;22952:7:50;;-1:-1:-1;;;;;22930:29:50;;;;;;;22922:94;;;;-1:-1:-1;;;22922:94:50;;;;;;;;;:::i;:::-;-1:-1:-1;;23057:31:50;;;;23139:25;23153:7;23026:28;23139:13;:25::i;:::-;23270:21;23294:13;:11;:13::i;:::-;-1:-1:-1;;;;;23294:23:50;;23326:4;23294:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23270:62;;23343:19;23365:11;:9;:11::i;:::-;-1:-1:-1;;;;;23365:21:50;;23387:20;23365:43;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;23365:43:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;23429:1;23365:65;;;23411:15;;23365:65;23343:87;-1:-1:-1;23440:23:50;3551:13:61;-1:-1:-1;;;;;23466:23:50;;23503:36;23564:10;23576:11;23553:35;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23466:132;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23440:158;-1:-1:-1;23608:22:50;23633:35;23440:158;23656:11;23633:22;:35::i;:::-;23608:60;;23679:20;23702:13;:11;:13::i;:::-;-1:-1:-1;;;;;23702:23:50;;23734:4;23702:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23679:61;-1:-1:-1;23679:61:50;23771:30;23787:14;23771:13;:30;:::i;:::-;:46;23869:13;23884:12;23898:14;23750:173;;;;;;;-1:-1:-1;;;23750:173:50;;;;;32382:25:62;;;;32423:18;;;32416:34;;;;32466:18;;;32459:34;32355:18;;23750:173:50;32180:319:62;23750:173:50;-1:-1:-1;;23938:19:50;;;-1:-1:-1;23934:768:50;;24029:20;24070:16;;24052:15;:34;;;;:::i;:::-;24029:57;;24100:23;24144:17;:15;:17::i;:::-;-1:-1:-1;;;;;24144:34:50;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24126:54;;-1:-1:-1;;;;;24126:54:50;:15;:54;:::i;:::-;24100:80;;24194:50;24205:7;24214:12;24228:15;24194:10;:50::i;:::-;24263:18;;24259:433;;24392:22;:20;:22::i;:::-;-1:-1:-1;;;;;24392:45:50;;24438:20;24392:67;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;24392:67:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24540:62;24573:11;:9;:11::i;:::-;24587:14;24540:13;:11;:13::i;:::-;-1:-1:-1;;;;;24540:24:50;;:62;:24;:62::i;:::-;24620:11;:9;:11::i;:::-;:57;;-1:-1:-1;;;24620:57:50;;;;;8810:25:62;;;8851:18;;;8844:34;;;-1:-1:-1;;;;;24620:19:50;;;;;;;8783:18:62;;24620:57:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24259:433;23959:743;;23934:768;24717:60;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;-1:-1:-1;;;;;24717:60:50;;;;;8783:18:62;24717:60:50;;;;;;;-1:-1:-1;24794:15:50;;22503:2313;-1:-1:-1;;;;;;;;;22503:2313:50:o;10951:3331:57:-;11094:7;;11150:30;:11;11166:13;11150:15;:30::i;:::-;11113:67;;11198:19;:10;:17;:19::i;:::-;11253:13;11190:78;;;;;-1:-1:-1;;;11190:78:57;;;;;;;;:::i;:::-;;11338:21;11364:35;11383:15;;11364:10;:18;;:35;;;;:::i;:::-;11363:36;:78;;;;;11416:25;:10;:23;:25::i;:::-;11415:26;11363:78;:112;;;;-1:-1:-1;11457:18:57;;;11363:112;11362:194;;11555:1;11362:194;;;11491:22;:20;:22::i;:::-;-1:-1:-1;;;;;11491:34:57;;11526:13;11491:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11338:218;;11676:160;11717:13;11744:22;:20;:22::i;:::-;-1:-1:-1;;;;;11744:49:57;;11794:10;:31;;;11744:82;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;11676:160:57;11846:37;:11;11869:13;11846:22;:37::i;:::-;11956:46;:11;11988:13;11956:31;:46::i;:::-;12013:28;;12104:18;;12100:1612;;12186:20;12209:15;:13;:15::i;:::-;12262:18;;12209:177;;-1:-1:-1;;;12209:177:57;;-1:-1:-1;;;;;12209:35:57;;;;;;;:177;;12306:4;;12329:43;;12209:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12186:200;;12400:57;12460:15;:13;:15::i;:::-;12511:18;;12460:114;;-1:-1:-1;;;12460:114:57;;-1:-1:-1;;;;;12460:33:57;;;;;;;:114;;12555:4;;12460:114;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12400:174;;12741:1;12717:14;:21;;;:25;:66;;12782:1;12717:66;;;12745:34;:13;12766:12;12745:20;:34::i;:::-;12691:92;-1:-1:-1;12801:27:57;;12797:251;;12848:13;:11;:13::i;:::-;-1:-1:-1;;;;;12848:21:57;;12878:15;:13;:15::i;:::-;12896:23;12848:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12938:15;:13;:15::i;:::-;12974:18;;12938:95;;-1:-1:-1;;;12938:95:57;;-1:-1:-1;;;;;12938:35:57;;;;;;;:95;;13002:4;;13009:23;;12938:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12797:251;13130:39;13146:23;13130:13;:39;:::i;:::-;13107:62;-1:-1:-1;13187:24:57;;13183:519;;13279:18;;-1:-1:-1;;;;;13260:38:57;;;13231:26;13260:38;;;:18;:38;;;;;;;;13316:372;;13376:13;:11;:13::i;:::-;-1:-1:-1;;;;;13376:21:57;;13406:15;:13;:15::i;:::-;13424:20;13376:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13467:15;:13;:15::i;:::-;13500:18;;13467:89;;-1:-1:-1;;;13467:89:57;;-1:-1:-1;;;;;13467:32:57;;;;;;;:89;;13528:4;;13535:20;;13467:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13316:372;;;13603:66;13628:18;13648:20;13603:13;:11;:13::i;:66::-;13213:489;13183:519;12124:1588;;12100:1612;13824:31;;;;13765:18;;-1:-1:-1;;;;;13727:303:57;;;;;;13869:13;13896:20;13930:23;13967:4;6678:19:33;-1:-1:-1;;;;;13985:33:57;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13727:303;;;34804:25:62;;;34860:2;34845:18;;34838:34;;;;34888:18;;;34881:34;;;;34946:2;34931:18;;34924:34;34989:3;34974:19;;34967:35;34791:3;34776:19;13727:303:57;;;;;;;14150:18;;14133:54;;14170:16;14133;:54::i;:::-;14129:116;;;14203:31;14220:13;14203:16;:31::i;:::-;-1:-1:-1;14262:13:57;;10951:3331;-1:-1:-1;;;;;;10951:3331:57:o;3285:106:61:-;3369:15;;3285:106::o;7843:214:17:-;7932:42;7977:31;7991:16;7977:13;:31::i;:::-;7932:76;;8018:32;8040:9;8018:21;:32::i;5614:206::-;5695:49;5721:16;5739:4;5695:25;:49::i;:::-;5754:15;:13;:15::i;:::-;-1:-1:-1;;;;;5754:41:17;;5796:16;5754:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5614:206;:::o;20253:227:57:-;20349:7;20375:98;1942:68;20447:8;20457:13;20402:69;;;;;;;;;35215:25:62;;;-1:-1:-1;;;;;35276:32:62;;;35271:2;35256:18;;35249:60;35345:32;35340:2;35325:18;;35318:60;35203:2;35188:18;;35013:371;20402:69:57;;;;;;;;;;;;;20392:80;;;;;;20375:16;:98::i;8499:1504::-;8735:23;;:::i;:::-;-1:-1:-1;;;;;8778:27:57;;8770:80;;;;-1:-1:-1;;;8770:80:57;;;;;;;;;;;;8861:65;8884:8;8894:13;8909:16;8861:22;:65::i;:::-;9079:47;:17;9112:13;9079:32;:47::i;:::-;9136:34;9173:219;9205:8;9227:13;9254:21;9289:7;9310:22;:20;:22::i;:::-;-1:-1:-1;;;;;9310:49:57;;9360:21;9310:72;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;9310:72:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9173:11;;:219;;;;:18;:219::i;:::-;9136:256;;9545:85;9577:15;:13;:15::i;:::-;9545:26;;9594:8;9604:7;9613:16;9545:31;:85::i;:::-;9852:10;:17;;;9781:23;:56;9805:10;:31;;;9781:56;;;;;;;;;;;;:88;;;;:::i;:::-;9710:23;:56;9734:10;:31;;;9710:56;;;;;;;;;;;:159;;;;9928:21;9913:13;-1:-1:-1;;;;;9885:84:57;9903:8;-1:-1:-1;;;;;9885:84:57;;9951:10;:17;;;9885:84;;;;1253:25:62;;1241:2;1226:18;;1107:177;9885:84:57;;;;;;;;9986:10;8499:1504;-1:-1:-1;;;;;;;8499:1504:57:o;7084:141:35:-;7151:17;:15;:17::i;:::-;7146:73;;7191:17;;-1:-1:-1;;;7191:17:35;;;;;;;;;;;1980:235:34;6931:20:35;:18;:20::i;4910:342:17:-;6931:20:35;:18;:20::i;:::-;4991:84:17::1;1485:17;-1:-1:-1::0;;4991:24:17::1;:84::i;:::-;5085:72;1173:16;312:9:31;5085:20:17;:72::i;:::-;5167:78;1330:16;-1:-1:-1::0;;;;;5167:22:17::1;:78::i;1939:156:38:-:0;6931:20:35;:18;:20::i;:::-;2012:25:38::1;2040:21;:19;:21::i;:::-;2071:17:::0;;-1:-1:-1;;2071:17:38::1;::::0;;-1:-1:-1;1939:156:38:o;3446:147:39:-;6931:20:35;:18;:20::i;:::-;3548:38:39::1;3572:4;3578:7;3548:23;:38::i;6849:139:57:-:0;6931:20:35;:18;:20::i;12210:234:17:-;12342:28;:6;12359:4;12365;12342:16;:28::i;:::-;12401:14;12417:6;12425:4;12431;12334:103;;;;;;;;-1:-1:-1;;;12334:103:17;;;;;;;;;;;:::i;7084:278:54:-;-1:-1:-1;;;;;7234:18:54;;;7182:13;7234:18;;;;;;;;;;;7270:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7182:13;;7270:19;;6374:14;;;:19;;;6293:107;7270:19;7314:12;7262:66;;;;;-1:-1:-1;;;7262:66:54;;;;;;;;:::i;:::-;-1:-1:-1;7345:10:54;7084:278;-1:-1:-1;;;7084:278:54:o;2382:104:46:-;2440:7;2470:1;2466;:5;:13;;2478:1;2466:13;;;-1:-1:-1;2474:1:46;;2382:104;-1:-1:-1;2382:104:46:o;5166:247:10:-;5234:7;5279:16;;;:6;:16;;;;;;;;5253:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5286:8;;5305:69;;;;-1:-1:-1;;;5305:69:10;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;5305:69:10;-1:-1:-1;5391:15:10;;;;5166:247;-1:-1:-1;;5166:247:10:o;3552:726::-;3634:4;3640:12;3664:23;3690:24;3705:8;3690:14;:24::i;:::-;3664:50;;3772:15;3751:5;:18;;;:36;3747:103;;;-1:-1:-1;;1112:9:29;;;;;;;;;-1:-1:-1;1112:9:29;;3811:4:10;;-1:-1:-1;3803:36:10;;3747:103;3879:21;3902:23;3940:4;3929:36;;;;;;;;;;;;:::i;:::-;4041:12;;3878:87;;-1:-1:-1;3878:87:10;-1:-1:-1;3995:59:10;;:20;;3878:87;;3995:28;:59::i;:::-;4115:12;;4129:18;;;;;4069:79;;8810:25:62;;;8866:2;8851:18;;8844:34;4105:8:10;;-1:-1:-1;;;;;4069:79:10;;;;;8783:18:62;4069:79:10;;;;;;;4211:12;;4195:28;;:13;:28;:::i;:::-;4184:57;;;;;;36378:25:62;;;;-1:-1:-1;;;;;36439:32:62;;36419:18;;;36412:60;36351:18;;4184:57:10;;;;;;;;;;;;4177:64;;4259:5;4266:4;4251:20;;;;;;;3552:726;;;;;;:::o;4488:93::-;4558:16;;;;:6;:16;;;;;4551:23;;;;;;;;;;;;;;;;;;4488:93::o;4479:945:29:-;4795:7;4804:12;4850:4;:10;;;4836;:24;;4828:64;;;;-1:-1:-1;;;4828:64:29;;;;;;;;;;;;4903:17;4948:15;;4947:43;;4980:10;4947:43;;;4967:4;:10;;;4947:43;5018:9;;4934:56;;-1:-1:-1;5038:335:29;5045:20;;;;;:38;;;5082:1;5069:10;:14;5045:38;5038:335;;;5100:16;5118:17;5139:35;5151:6;5159:14;5139:11;:35;;:::i;:::-;5099:75;;;;5193:11;5189:22;;;5206:5;;;;5189:22;5243:4;-1:-1:-1;5243:4:29;5270:40;:4;5286:11;5299:10;5270:15;:40::i;:::-;5261:49;-1:-1:-1;5325:12:29;;;;:::i;:::-;;;;5351:11;;;;;:::i;:::-;;;;5085:288;;5038:335;;;-1:-1:-1;5391:9:29;5402:14;;-1:-1:-1;4479:945:29;;-1:-1:-1;;;;;;4479:945:29:o;1731:423:56:-;-1:-1:-1;;;;;1923:18:56;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;:18;;3034:26;1914:84;;;;-1:-1:-1;;;1914:84:56;;;;;;;;:::i;:::-;-1:-1:-1;2035:71:56;;;;;;;;-1:-1:-1;;;;;2035:71:56;;;;;;;;;;;;2116:18;;;-1:-1:-1;2116:18:56;;;;;;;;;;:31;;;;-1:-1:-1;;;;;;2116:31:56;;;;;;;;;;;-1:-1:-1;2116:31:56;;;;1731:423::o;6774:117:33:-;6863:21;;6774:117::o;3965:400:54:-;4138:24;4165;4170:4;4176:12;4165:4;:24::i;:::-;4207:17;;;;;;;;;;-1:-1:-1;;;;;4207:17:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4138:51;;-1:-1:-1;4207:19:54;;:17;:19::i;:::-;4259;;;;4245:12;;4199:81;;;;-1:-1:-1;;;4199:81:54;;;;;;;;;:::i;:::-;-1:-1:-1;;4290:38:54;;:68;-1:-1:-1;;3965:400:54:o;5141:292::-;5237:24;5264;5269:4;5275:12;5264:4;:24::i;:::-;5306:17;;;;;;;;;;-1:-1:-1;;;;;5306:17:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5237:51;;-1:-1:-1;5306:19:54;;:17;:19::i;:::-;5358;;;;5344:12;;5298:81;;;;-1:-1:-1;;;5298:81:54;;;;;;;;;:::i;:::-;-1:-1:-1;;5411:15:54;5389:19;;;;:37;-1:-1:-1;;5141:292:54:o;2331:307:16:-;2454:6;2464:1;2454:11;2450:24;;2331:307;;;:::o;2450:24::-;-1:-1:-1;;;;;2491:21:16;;;;;;;;;;;;;;2516:6;2491:31;;;;2483:107;;;;-1:-1:-1;;;2483:107:16;;;;;8810:25:62;;;;8851:18;;;8844:34;8783:18;;2483:107:16;8636:248:62;2483:107:16;-1:-1:-1;;;;;;;2600:21:16;;;;;;;;;;;;;:31;;2625:6;;2600:21;:31;;2625:6;;2600:31;:::i;:::-;;;;-1:-1:-1;;;;;2331:307:16:o;1377:590::-;1593:24;;1610:7;1593:24;-1:-1:-1;;;;;1652:21:16;;1627:22;1652:21;;;;;;;;;;;:30;;1676:6;;1652:30;:::i;:::-;1627:55;;1692:23;1718:12;-1:-1:-1;;;;;1718:31:16;;1750:15;1775:4;1782:15;1718:80;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1692:106;-1:-1:-1;1692:106:16;1816:14;:33;;;;1808:111;;;;-1:-1:-1;;;1808:111:16;;;;;8810:25:62;;;;8851:18;;;8844:34;8783:18;;1808:111:16;8636:248:62;1808:111:16;-1:-1:-1;;;;;;;1929:21:16;;;;;;;;;;;;;:31;;1954:6;;1929:21;:31;;1954:6;;1929:31;:::i;:::-;;;;-1:-1:-1;;;;1377:590:16;;;;;:::o;3000:383::-;3197:4;3213:23;3239:12;-1:-1:-1;;;;;3239:31:16;;3271:15;3296:4;3303:15;3239:80;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3336:21:16;;;;;;;;;;;;;;:40;;;-1:-1:-1;;3000:383:16;;;;;;:::o;4625:582:42:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:42;;;:23;5045:49;5041:119;;;5138:6;5121:24;;-1:-1:-1;;;5121:24:42;;;;;;;;:::i;5041:119::-;-1:-1:-1;5180:10:42;5173:17;;5725:94:33;5801:11;;5725:94::o;3646:87:61:-;3718:8;;3646:87::o;959:188:31:-;1020:7;1047:13;1058:1;312:9;-1:-1:-1;1823:16:31;;1742:104;1047:13;:30;;;;1064:13;1075:1;312:9;-1:-1:-1;1823:16:31;;1742:104;1064:13;1100:1;1103;1039:67;;;;;;-1:-1:-1;;;1039:67:31;;;;;8810:25:62;;;;8851:18;;;8844:34;8783:18;;1039:67:31;8636:248:62;1039:67:31;-1:-1:-1;312:9:31;;-1:-1:-1;1124:5:31;1128:1;1124;:5;:::i;:::-;1123:17;;;;:::i;1619:859:10:-;1735:7;1746:1;1735:12;1727:50;;;;-1:-1:-1;;;1727:50:10;;;;;;;;;;;;1787:86;1813:15;:13;:15::i;:::-;1857;;1787:20;;:86;1830:16;;1848:7;;1857:15;-1:-1:-1;;;1857:15:10;;;;;;1787:25;:86;:::i;:::-;-1:-1:-1;;;;;1921:29:10;;1884:34;1921:29;;;:11;:29;;;;;;;;2053:16;;;;;5717:57;;-1:-1:-1;;;;;;5742:4:10;38530:2:62;38501:15;;;38497:45;;5717:57:10;;;38485:58:62;38577:15;;;38573:45;38559:12;;;38552:67;38635:12;;;;38628:28;;;;5717:57:10;;;;;;;;;;38672:12:62;;;5717:57:10;;;5707:68;;;;;;;;;2098:170;;;;;;;;2163:15;2098:170;;;;;;;;;;;;;;;;;;;2080:15;;;:6;:15;;;;;;;:188;;;;;;;;;;;;;;;;;;;;;;;2282:16;;;1921:29;;5707:68;2282:21;2278:70;;2312:15;;;;2305:23;;;;:6;:23;;;;;:33;;:43;;;2278:70;2358:27;:10;2377:7;2358:18;:27::i;:::-;2401:70;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;2436:7:10;;-1:-1:-1;;;;;2401:70:10;;;;;8783:18:62;2401:70:10;;;;;;;1717:761;;1619:859;;;:::o;1050:198:7:-;1148:11;;1144:98;;1183:34;;-1:-1:-1;;;1183:34:7;;-1:-1:-1;;;;;1183:20:7;;;;;:34;;1204:3;;1209:7;;1183:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1175:56;;;;-1:-1:-1;;;1175:56:7;;37579:2:62;1175:56:7;;;37561:21:62;37618:1;37598:18;;;37591:29;-1:-1:-1;;;37636:18:62;;;37629:39;37685:18;;1175:56:7;37377:332:62;3307:307:54;3408:24;3435;3440:4;3446:12;3435:4;:24::i;:::-;3477:17;;;;;;;;;;-1:-1:-1;;;;;3477:17:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3408:51;;-1:-1:-1;3477:19:54;;:17;:19::i;:::-;3529;;;;3515:12;;3469:81;;;;-1:-1:-1;;;3469:81:54;;;;;;;;;:::i;:::-;-1:-1:-1;;3592:15:54;3560:29;;;;:47;-1:-1:-1;;3307:307:54:o;4628:301::-;4738:24;4765;4770:4;4776:12;4765:4;:24::i;:::-;4807:17;;;;;;;;;;-1:-1:-1;;;;;4807:17:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4738:51;;-1:-1:-1;4807:19:54;;:17;:19::i;:::-;4859;;;;4845:12;;4799:81;;;;-1:-1:-1;;;4799:81:54;;;;;;;;;:::i;:::-;-1:-1:-1;;4921:1:54;4890:28;;;;:32;-1:-1:-1;;4628:301:54:o;8702:257:17:-;8815:42;8860:31;8874:16;8860:13;:31::i;:::-;8815:76;;8901:51;8927:9;8938:13;8901:25;:51::i;4946:176:39:-;5023:7;5049:66;5082:20;:18;:20::i;:::-;5104:10;3555:4:45;3549:11;-1:-1:-1;;;3573:23:45;;3625:4;3616:14;;3609:39;;;;3677:4;3668:14;;3661:34;3733:4;3718:20;;;3353:401;21351:317:57;21468:14;21485:70;21499:47;21522:8;21532:13;21499:22;:47::i;:::-;21548:6;21485:13;:70::i;:::-;21468:87;-1:-1:-1;21468:87:57;21583:13;-1:-1:-1;;;;;21573:23:57;;;;;;;21565:96;;;;-1:-1:-1;;;21565:96:57;;;;;;;;;:::i;:::-;;;21458:210;21351:317;;;:::o;2647:192:56:-;-1:-1:-1;;;;;2766:18:56;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;:18;;3034:26;2757:75;;;;-1:-1:-1;;;2757:75:56;;;;;;;;:::i;2227:799:54:-;2477:12;;:::i;:::-;-1:-1:-1;;;;;2510:18:54;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;6374:14;;;:19;;;6293:107;2510:27;2509:28;2563:12;2501:76;;;;;-1:-1:-1;;;2501:76:54;;;;;;;;:::i;:::-;-1:-1:-1;;2614:335:54;;;;;;;;-1:-1:-1;;;;;2614:335:54;;;;;;;;;;;;;;;;;;2759:15;2614:335;;;;;;-1:-1:-1;2614:335:54;;;;;;;;;;;;;;;;;;;;;;;;2960:18;;;;;;;;;;;;;:31;;;;-1:-1:-1;;;;;;2960:31:54;;;;;;;;;;;-1:-1:-1;2960:31:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2614:335;2227:799::o;8487:120:35:-;8537:4;8560:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8560:40:35;;;;;;-1:-1:-1;8487:120:35:o;6807:346:17:-;6890:4;6898;6890:12;;;;;;;;;6882:63;;;;-1:-1:-1;;;6882:63:17;;;;;;;;;:::i;:::-;-1:-1:-1;7018:4:17;;-1:-1:-1;6963:24:17;;;;312:9:31;-1:-1:-1;1823:16:31;6955:75:17;;;;-1:-1:-1;;;6955:75:17;;;;;;;;;:::i;:::-;-1:-1:-1;;7040:18:17;:25;;;7075;;;-1:-1:-1;;;7075:25:17;-1:-1:-1;;;;7040:25:17;;;-1:-1:-1;;;7040:25:17;7075;;;;-1:-1:-1;;;;7075:25:17;;;;;;;;;;7115:31;;;;;;7061:4;;7096;;7115:31;:::i;7367:269::-;7452:4;7460;-1:-1:-1;;;;;7452:12:17;;;;;;;;7444:63;;;;-1:-1:-1;;;7444:63:17;;;;;;;;;:::i;:::-;-1:-1:-1;;7517:20:17;:27;;-1:-1:-1;;;;;7554:27:17;;;-1:-1:-1;;;7554:27:17;-1:-1:-1;;;;;;7554:27:17;;;7517;;;7554;;;;7596:33;;;;;;7540:4;;7577;;7596:33;:::i;3599:330:39:-;6931:20:35;:18;:20::i;:::-;3711:23:39::1;3737:19;:17;:19::i;:::-;3711:45:::0;-1:-1:-1;3766:7:39::1;::::0;::::1;:14;3776:4:::0;3766:7;:14:::1;:::i;:::-;-1:-1:-1::0;3790:10:39::1;::::0;::::1;:20;3803:7:::0;3790:10;:20:::1;:::i;:::-;-1:-1:-1::0;3891:1:39::1;3875:17:::0;;;3902:16:::1;::::0;;::::1;:20:::0;-1:-1:-1;;3599:330:39:o;451:141:32:-;534:4;566:3;557:5;:12;;:28;;;;-1:-1:-1;;573:12:32;;;;;550:35;-1:-1:-1;451:141:32:o;4701:243:10:-;4765:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4765:17:10;4794:23;4820:16;;;:6;:16;;;;;;;;;4794:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4827:8;;4846:69;;;;-1:-1:-1;;;4846:69:10;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;3052:459:29;3223:7;3263:1;3250:4;:10;;;:14;3242:46;;;;-1:-1:-1;;;3242:46:29;;;;;;;;;;;;3298:16;3317:22;3329:4;:9;;;3317:11;:22;;:::i;:::-;3298:41;;3349:21;3360:4;:9;;;3349:10;:21;;:::i;:::-;3394:1;3380:4;:10;;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;3405:20:29;;;3439:10;;;;3405:9;3439:15;3435:43;;3476:1;3456:9;;;:22;3435:43;-1:-1:-1;;3495:9:29;;;3052:459;-1:-1:-1;;3052:459:29:o;5743:516:42:-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:42;;;;;;;;;;;2257:319:29;1226:6;2332:4;:10;;;:22;2324:64;;;;-1:-1:-1;;;2324:64:29;;;;;;;;;;;;2406:2;2398:52;;;;-1:-1:-1;;;2398:52:29;;;;;;;;;;;;2460:9;;;;:14;;;2484:10;;;:15;;:10;;:15;;2460:9;;2484:15;:::i;:::-;;;;-1:-1:-1;;2513:10:29;;;;2527:1;2513:15;2509:35;;2530:14;;;2509:35;2568:1;2554:4;:10;;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;2257:319:29:o;4015:109:39:-;4068:7;4094:23;:21;:23::i;3702:255:44:-;3780:7;3800:17;3819:18;3839:16;3859:27;3870:4;3876:9;3859:10;:27::i;:::-;3799:87;;;;;;3896:28;3908:5;3915:8;3896:11;:28::i;:::-;-1:-1:-1;3941:9:44;;3702:255;-1:-1:-1;;;;3702:255:44:o;4130:191:39:-;4185:7;2073:95;4243:17;:15;:17::i;:::-;4262:20;:18;:20::i;:::-;4221:92;;;;;;38954:25:62;;;;38995:18;;38988:34;;;;39038:18;;;39031:34;4284:13:39;39081:18:62;;;39074:34;4307:4:39;39124:19:62;;;39117:61;38926:19;;4221:92:39;;;;;;;;;;;;4211:103;;;;;;4204:110;;4130:191;:::o;2129:766:44:-;2210:7;2219:12;2233:7;2256:9;:16;2276:2;2256:22;2252:637;;2592:4;2577:20;;2571:27;2641:4;2626:20;;2620:27;2698:4;2683:20;;2677:27;2294:9;2669:36;2739:25;2750:4;2669:36;2571:27;2620;2739:10;:25::i;:::-;2732:32;;;;;;;;;;;2252:637;-1:-1:-1;;2860:16:44;;2811:1;;-1:-1:-1;2815:35:44;;2252:637;2129:766;;;;;:::o;7196:532::-;7291:20;7282:5;:29;;;;;;;;:::i;:::-;;7278:444;;7196:532;;:::o;7278:444::-;7387:29;7378:5;:38;;;;;;;;:::i;:::-;;7374:348;;7439:23;;-1:-1:-1;;;7439:23:44;;;;;;;;;;;7374:348;7492:35;7483:5;:44;;;;;;;;:::i;:::-;;7479:243;;7550:46;;-1:-1:-1;;;7550:46:44;;;;;1253:25:62;;;1226:18;;7550:46:44;1107:177:62;7479:243:44;7626:30;7617:5;:39;;;;;;;;:::i;:::-;;7613:109;;7679:32;;-1:-1:-1;;;7679:32:44;;;;;1253:25:62;;;1226:18;;7679:32:44;1107:177:62;7058:687:39;7108:7;7127:23;7153:19;:17;:19::i;:::-;7127:45;;7182:18;7203:13;:11;:13::i;:::-;7230:18;;7182:34;;-1:-1:-1;7230:22:39;7226:513;;7275:22;;;;;;;;7058:687;-1:-1:-1;;7058:687:39:o;7226:513::-;7572:13;;7603:15;;7599:130;;7645:10;7058:687;-1:-1:-1;;;7058:687:39:o;7599:130::-;7701:13;7694:20;;;;;7058:687;:::o;7966:723::-;8019:7;8038:23;8064:19;:17;:19::i;:::-;8038:45;;8093:21;8117:16;:14;:16::i;:::-;8147:21;;8093:40;;-1:-1:-1;8147:25:39;8143:540;;8195:25;;;;;;;;7966:723;-1:-1:-1;;7966:723:39:o;8143:540::-;8507:16;;;;8541:18;;8537:136;;8586:13;7966:723;-1:-1:-1;;;7966:723:39:o;5140:1530:44:-;5266:7;;;-1:-1:-1;;;;;6186:79:44;;6182:164;;;-1:-1:-1;6297:1:44;;-1:-1:-1;6301:30:44;;-1:-1:-1;6333:1:44;6281:54;;6182:164;6457:24;;;6440:14;6457:24;;;;;;;;;39416:25:62;;;39489:4;39477:17;;39457:18;;;39450:45;;;;39511:18;;;39504:34;;;39554:18;;;39547:34;;;6457:24:44;;39388:19:62;;6457:24:44;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6457:24:44;;-1:-1:-1;;6457:24:44;;;-1:-1:-1;;;;;;;6495:20:44;;6491:113;;-1:-1:-1;6547:1:44;;-1:-1:-1;6551:29:44;;-1:-1:-1;6547:1:44;;-1:-1:-1;6531:62:44;;6491:113;6622:6;-1:-1:-1;6630:20:44;;-1:-1:-1;6630:20:44;;-1:-1:-1;5140:1530:44;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:62:-;-1:-1:-1;;;;;89:31:62;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;1685:121::-;1770:10;1763:5;1759:22;1752:5;1749:33;1739:61;;1796:1;1793;1786:12;1811:485;1887:6;1895;1903;1956:2;1944:9;1935:7;1931:23;1927:32;1924:52;;;1972:1;1969;1962:12;1924:52;2017:23;;;-1:-1:-1;2116:2:62;2101:18;;2088:32;2129;2088;2129;:::i;:::-;1811:485;;2180:7;;-1:-1:-1;;;2260:2:62;2245:18;;;;2232:32;;1811:485::o;2301:245::-;2359:6;2412:2;2400:9;2391:7;2387:23;2383:32;2380:52;;;2428:1;2425;2418:12;2380:52;2467:9;2454:23;2486:30;2510:5;2486:30;:::i;2748:347::-;2799:8;2809:6;2863:3;2856:4;2848:6;2844:17;2840:27;2830:55;;2881:1;2878;2871:12;2830:55;-1:-1:-1;2904:20:62;;-1:-1:-1;;;;;2936:30:62;;2933:50;;;2979:1;2976;2969:12;2933:50;3016:4;3008:6;3004:17;2992:29;;3068:3;3061:4;3052:6;3044;3040:19;3036:30;3033:39;3030:59;;;3085:1;3082;3075:12;3100:544;3179:6;3187;3195;3248:2;3236:9;3227:7;3223:23;3219:32;3216:52;;;3264:1;3261;3254:12;3216:52;3303:9;3290:23;3322:31;3347:5;3322:31;:::i;:::-;3372:5;-1:-1:-1;3428:2:62;3413:18;;3400:32;-1:-1:-1;;;;;3444:30:62;;3441:50;;;3487:1;3484;3477:12;3441:50;3526:58;3576:7;3567:6;3556:9;3552:22;3526:58;:::i;:::-;3100:544;;3603:8;;-1:-1:-1;3500:84:62;;-1:-1:-1;;;;3100:544:62:o;3649:118::-;3735:5;3728:13;3721:21;3714:5;3711:32;3701:60;;3757:1;3754;3747:12;3772:382;3837:6;3845;3898:2;3886:9;3877:7;3873:23;3869:32;3866:52;;;3914:1;3911;3904:12;3866:52;3953:9;3940:23;3972:31;3997:5;3972:31;:::i;:::-;4022:5;-1:-1:-1;4079:2:62;4064:18;;4051:32;4092:30;4051:32;4092:30;:::i;:::-;4141:7;4131:17;;;3772:382;;;;;:::o;4159:226::-;4218:6;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;-1:-1:-1;4332:23:62;;4159:226;-1:-1:-1;4159:226:62:o;4813:278::-;5013:10;5001:23;;;4983:42;;5061:23;;5056:2;5041:18;;5034:51;4971:2;4956:18;;4813:278::o;5096:250::-;5181:1;5191:113;5205:6;5202:1;5199:13;5191:113;;;5281:11;;;5275:18;5262:11;;;5255:39;5227:2;5220:10;5191:113;;;-1:-1:-1;;5338:1:62;5320:16;;5313:27;5096:250::o;5351:271::-;5393:3;5431:5;5425:12;5458:6;5453:3;5446:19;5474:76;5543:6;5536:4;5531:3;5527:14;5520:4;5513:5;5509:16;5474:76;:::i;:::-;5604:2;5583:15;-1:-1:-1;;5579:29:62;5570:39;;;;5611:4;5566:50;;5351:271;-1:-1:-1;;5351:271:62:o;5627:454::-;5852:6;5841:9;5834:25;5895:2;5890;5879:9;5875:18;5868:30;5815:4;5921:45;5962:2;5951:9;5947:18;5939:6;5921:45;:::i;:::-;6014:9;6006:6;6002:22;5997:2;5986:9;5982:18;5975:50;6042:33;6068:6;6060;6042:33;:::i;:::-;6034:41;5627:454;-1:-1:-1;;;;;;5627:454:62:o;7616:294::-;-1:-1:-1;;;;;7804:31:62;;;7786:50;;7872:31;;7867:2;7852:18;;7845:59;7774:2;7759:18;;7616:294::o;7915:203::-;-1:-1:-1;;;;;8079:32:62;;;;8061:51;;8049:2;8034:18;;7915:203::o;8123:508::-;8200:6;8208;8216;8269:2;8257:9;8248:7;8244:23;8240:32;8237:52;;;8285:1;8282;8275:12;8237:52;8324:9;8311:23;8343:31;8368:5;8343:31;:::i;:::-;8393:5;-1:-1:-1;8450:2:62;8435:18;;8422:32;8463:33;8422:32;8463:33;:::i;9402:1238::-;9808:3;9803;9799:13;9791:6;9787:26;9776:9;9769:45;9850:3;9845:2;9834:9;9830:18;9823:31;9750:4;9877:46;9918:3;9907:9;9903:19;9895:6;9877:46;:::i;:::-;9971:9;9963:6;9959:22;9954:2;9943:9;9939:18;9932:50;10005:33;10031:6;10023;10005:33;:::i;:::-;10069:2;10054:18;;10047:34;;;-1:-1:-1;;;;;10118:32:62;;10112:3;10097:19;;10090:61;10138:3;10167:19;;10160:35;;;10232:22;;;10226:3;10211:19;;10204:51;10304:13;;10326:22;;;10376:2;10402:15;;;;-1:-1:-1;10364:15:62;;;;-1:-1:-1;10445:169:62;10459:6;10456:1;10453:13;10445:169;;;10520:13;;10508:26;;10563:2;10589:15;;;;10554:12;;;;10481:1;10474:9;10445:169;;;-1:-1:-1;10631:3:62;;9402:1238;-1:-1:-1;;;;;;;;;;;9402:1238:62:o;10850:274::-;-1:-1:-1;;;;;11042:32:62;;;;11024:51;;11106:2;11091:18;;11084:34;11012:2;10997:18;;10850:274::o;11129:621::-;11226:6;11234;11287:2;11275:9;11266:7;11262:23;11258:32;11255:52;;;11303:1;11300;11293:12;11255:52;11343:9;11330:23;-1:-1:-1;;;;;11368:6:62;11365:30;11362:50;;;11408:1;11405;11398:12;11362:50;11431:22;;11484:4;11476:13;;11472:27;-1:-1:-1;11462:55:62;;11513:1;11510;11503:12;11462:55;11553:2;11540:16;-1:-1:-1;;;;;11571:6:62;11568:30;11565:50;;;11611:1;11608;11601:12;11565:50;11664:7;11659:2;11649:6;11646:1;11642:14;11638:2;11634:23;11630:32;11627:45;11624:65;;;11685:1;11682;11675:12;11624:65;11716:2;11708:11;;;;;11738:6;;-1:-1:-1;11129:621:62;-1:-1:-1;;;11129:621:62:o;11755:780::-;11915:4;11963:2;11952:9;11948:18;11993:2;11982:9;11975:21;12016:6;12051;12045:13;12082:6;12074;12067:22;12120:2;12109:9;12105:18;12098:25;;12182:2;12172:6;12169:1;12165:14;12154:9;12150:30;12146:39;12132:53;;12220:2;12212:6;12208:15;12241:1;12251:255;12265:6;12262:1;12259:13;12251:255;;;12358:2;12354:7;12342:9;12334:6;12330:22;12326:36;12321:3;12314:49;12386:40;12419:6;12410;12404:13;12386:40;:::i;:::-;12376:50;-1:-1:-1;12461:2:62;12484:12;;;;12449:15;;;;;12287:1;12280:9;12251:255;;;-1:-1:-1;12523:6:62;;11755:780;-1:-1:-1;;;;;;11755:780:62:o;12540:711::-;12645:6;12653;12661;12669;12722:2;12710:9;12701:7;12697:23;12693:32;12690:52;;;12738:1;12735;12728:12;12690:52;12777:9;12764:23;12796:31;12821:5;12796:31;:::i;:::-;12846:5;-1:-1:-1;12903:2:62;12888:18;;12875:32;12938:1;12926:14;;12916:42;;12954:1;12951;12944:12;12916:42;12977:7;-1:-1:-1;13035:2:62;13020:18;;13007:32;-1:-1:-1;;;;;13051:30:62;;13048:50;;;13094:1;13091;13084:12;13048:50;13133:58;13183:7;13174:6;13163:9;13159:22;13133:58;:::i;:::-;12540:711;;;;-1:-1:-1;13210:8:62;-1:-1:-1;;;;12540:711:62:o;13256:388::-;13324:6;13332;13385:2;13373:9;13364:7;13360:23;13356:32;13353:52;;;13401:1;13398;13391:12;13353:52;13440:9;13427:23;13459:31;13484:5;13459:31;:::i;:::-;13509:5;-1:-1:-1;13566:2:62;13551:18;;13538:32;13579:33;13538:32;13579:33;:::i;14441:397::-;-1:-1:-1;;;;;14661:32:62;;;14643:51;;14730:32;;;14725:2;14710:18;;14703:60;14799:32;;;14794:2;14779:18;;14772:60;14631:2;14616:18;;14441:397::o;14843:245::-;14910:6;14963:2;14951:9;14942:7;14938:23;14934:32;14931:52;;;14979:1;14976;14969:12;14931:52;15011:9;15005:16;15030:28;15052:5;15030:28;:::i;15093:300::-;-1:-1:-1;;;;;15285:32:62;;;15267:51;;15354:32;;15349:2;15334:18;;15327:60;15255:2;15240:18;;15093:300::o;15398:127::-;15459:10;15454:3;15450:20;15447:1;15440:31;15490:4;15487:1;15480:15;15514:4;15511:1;15504:15;15530:257;15602:4;15596:11;;;15634:17;;-1:-1:-1;;;;;15666:34:62;;15702:22;;;15663:62;15660:88;;;15728:18;;:::i;:::-;15764:4;15757:24;15530:257;:::o;15792:248::-;15859:2;15853:9;15901:4;15889:17;;-1:-1:-1;;;;;15921:34:62;;15957:22;;;15918:62;15915:88;;;15983:18;;:::i;16045:252::-;16117:2;16111:9;16159:3;16147:16;;-1:-1:-1;;;;;16178:34:62;;16214:22;;;16175:62;16172:88;;;16240:18;;:::i;16302:889::-;16345:5;16398:3;16391:4;16383:6;16379:17;16375:27;16365:55;;16416:1;16413;16406:12;16365:55;16456:6;16443:20;16495:4;16487:6;16483:17;16524:1;16546;-1:-1:-1;;;;;16562:6:62;16559:30;16556:56;;;16592:18;;:::i;:::-;-1:-1:-1;16747:2:62;16741:9;-1:-1:-1;;16660:2:62;16639:15;;16635:29;;16805:2;16793:15;16789:29;16777:42;;16870:22;;;-1:-1:-1;;;;;16834:34:62;;16831:62;16828:88;;;16896:18;;:::i;:::-;16932:2;16925:22;16982;;;16967:6;-1:-1:-1;16967:6:62;17019:16;;;17016:25;-1:-1:-1;17013:45:62;;;17054:1;17051;17044:12;17013:45;17104:6;17099:3;17092:4;17084:6;17080:17;17067:44;17159:1;17152:4;17143:6;17135;17131:19;17127:30;17120:41;17179:6;17170:15;;;;;;16302:889;;;;:::o;17196:681::-;17301:6;17309;17317;17370:2;17358:9;17349:7;17345:23;17341:32;17338:52;;;17386:1;17383;17376:12;17338:52;17426:9;17413:23;-1:-1:-1;;;;;17451:6:62;17448:30;17445:50;;;17491:1;17488;17481:12;17445:50;17514;17556:7;17547:6;17536:9;17532:22;17514:50;:::i;:::-;17504:60;;;17617:2;17606:9;17602:18;17589:32;-1:-1:-1;;;;;17636:8:62;17633:32;17630:52;;;17678:1;17675;17668:12;17630:52;17701;17745:7;17734:8;17723:9;17719:24;17701:52;:::i;:::-;17691:62;;;17803:2;17792:9;17788:18;17775:32;17816:31;17841:5;17816:31;:::i;:::-;17866:5;17856:15;;;17196:681;;;;;:::o;17882:380::-;17961:1;17957:12;;;;18004;;;18025:61;;18079:4;18071:6;18067:17;18057:27;;18025:61;18132:2;18124:6;18121:14;18101:18;18098:38;18095:161;;18178:10;18173:3;18169:20;18166:1;18159:31;18213:4;18210:1;18203:15;18241:4;18238:1;18231:15;18095:161;;17882:380;;;:::o;18393:518::-;18495:2;18490:3;18487:11;18484:421;;;18531:5;18528:1;18521:16;18575:4;18572:1;18562:18;18645:2;18633:10;18629:19;18626:1;18622:27;18616:4;18612:38;18681:4;18669:10;18666:20;18663:47;;;-1:-1:-1;18704:4:62;18663:47;18759:2;18754:3;18750:12;18747:1;18743:20;18737:4;18733:31;18723:41;;18814:81;18832:2;18825:5;18822:13;18814:81;;;18891:1;18877:16;;18858:1;18847:13;18814:81;;19087:1299;19213:3;19207:10;-1:-1:-1;;;;;19232:6:62;19229:30;19226:56;;;19262:18;;:::i;:::-;19291:97;19381:6;19341:38;19373:4;19367:11;19341:38;:::i;:::-;19335:4;19291:97;:::i;:::-;19437:4;19468:2;19457:14;;19485:1;19480:649;;;;20173:1;20190:6;20187:89;;;-1:-1:-1;20242:19:62;;;20236:26;20187:89;-1:-1:-1;;19044:1:62;19040:11;;;19036:24;19032:29;19022:40;19068:1;19064:11;;;19019:57;20289:81;;19450:930;;19480:649;18340:1;18333:14;;;18377:4;18364:18;;-1:-1:-1;;19516:20:62;;;19634:222;19648:7;19645:1;19642:14;19634:222;;;19730:19;;;19724:26;19709:42;;19837:4;19822:20;;;;19790:1;19778:14;;;;19664:12;19634:222;;;19638:3;19884:6;19875:7;19872:19;19869:201;;;19945:19;;;19939:26;-1:-1:-1;;20028:1:62;20024:14;;;20040:3;20020:24;20016:37;20012:42;19997:58;19982:74;;19869:201;-1:-1:-1;;;;20116:1:62;20100:14;;;20096:22;20083:36;;-1:-1:-1;19087:1299:62:o;20391:388::-;20548:2;20537:9;20530:21;20587:6;20582:2;20571:9;20567:18;20560:34;20644:6;20636;20631:2;20620:9;20616:18;20603:48;20700:1;20671:22;;;20695:2;20667:31;;;20660:42;;;;20763:2;20742:15;;;-1:-1:-1;;20738:29:62;20723:45;20719:54;;20391:388;-1:-1:-1;20391:388:62:o;21394:127::-;21455:10;21450:3;21446:20;21443:1;21436:31;21486:4;21483:1;21476:15;21510:4;21507:1;21500:15;21526:128;21593:9;;;21614:11;;;21611:37;;;21628:18;;:::i;21995:127::-;22056:10;22051:3;22047:20;22044:1;22037:31;22087:4;22084:1;22077:15;22111:4;22108:1;22101:15;22127:521;22204:4;22210:6;22270:11;22257:25;22364:2;22360:7;22349:8;22333:14;22329:29;22325:43;22305:18;22301:68;22291:96;;22383:1;22380;22373:12;22291:96;22410:33;;22462:20;;;-1:-1:-1;;;;;;22494:30:62;;22491:50;;;22537:1;22534;22527:12;22491:50;22570:4;22558:17;;-1:-1:-1;22601:14:62;22597:27;;;22587:38;;22584:58;;;22638:1;22635;22628:12;22653:440;22882:6;22874;22869:3;22856:33;22838:3;22917:6;22912:3;22908:16;22944:1;22940:2;22933:13;22975:6;22969:13;22991:65;23049:6;23045:2;23038:4;23030:6;23026:17;22991:65;:::i;:::-;23072:15;;22653:440;-1:-1:-1;;;;;22653:440:62:o;23098:127::-;23159:10;23154:3;23150:20;23147:1;23140:31;23190:4;23187:1;23180:15;23214:4;23211:1;23204:15;23230:129;-1:-1:-1;;;;;23308:5:62;23304:30;23297:5;23294:41;23284:69;;23349:1;23346;23339:12;23364:1641;23450:6;23503:2;23491:9;23482:7;23478:23;23474:32;23471:52;;;23519:1;23516;23509:12;23471:52;23559:9;23546:23;-1:-1:-1;;;;;23584:6:62;23581:30;23578:50;;;23624:1;23621;23614:12;23578:50;23647:22;;23703:4;23685:16;;;23681:27;23678:47;;;23721:1;23718;23711:12;23678:47;23747:22;;:::i;:::-;23807:2;23794:16;-1:-1:-1;;;;;23825:8:62;23822:32;23819:52;;;23867:1;23864;23857:12;23819:52;23890:17;;23941:4;23923:16;;;23919:27;23916:47;;;23959:1;23956;23949:12;23916:47;23987:17;;:::i;:::-;24041:2;24028:16;24053:33;24078:7;24053:33;:::i;:::-;24095:24;;24164:2;24156:11;;24143:25;24177:33;24143:25;24177:33;:::i;:::-;24239:2;24226:16;;24219:33;24297:4;24289:13;;24276:27;24312:32;24276:27;24312:32;:::i;:::-;24373:4;24360:18;;24353:35;24433:2;24425:11;;24412:25;-1:-1:-1;;;;;24468:33:62;;24456:46;;24446:74;;24516:1;24513;24506:12;24446:74;24549:2;24536:16;;24529:33;24608:3;24600:12;;24587:26;-1:-1:-1;;;;;24625:32:62;;24622:52;;;24670:1;24667;24660:12;24622:52;24709:45;24746:7;24735:8;24731:2;24727:17;24709:45;:::i;:::-;24703:3;24690:17;;24683:72;-1:-1:-1;24764:22:62;;-1:-1:-1;24832:2:62;24824:11;;24811:25;-1:-1:-1;;;;;24848:32:62;;24845:52;;;24893:1;24890;24883:12;24845:52;24929:45;24966:7;24955:8;24951:2;24947:17;24929:45;:::i;:::-;24924:2;24913:14;;24906:69;-1:-1:-1;24917:5:62;23364:1641;-1:-1:-1;;;;23364:1641:62:o;25010:375::-;25086:6;25094;25147:2;25135:9;25126:7;25122:23;25118:32;25115:52;;;25163:1;25160;25153:12;25115:52;25202:9;25189:23;25221:31;25246:5;25221:31;:::i;:::-;25271:5;25349:2;25334:18;;;;25321:32;;-1:-1:-1;;;25010:375:62:o;25390:240::-;25474:1;25467:5;25464:12;25454:143;;25519:10;25514:3;25510:20;25507:1;25500:31;25554:4;25551:1;25544:15;25582:4;25579:1;25572:15;25454:143;25606:18;;25390:240::o;25635:214::-;25784:2;25769:18;;25796:47;25773:9;25825:6;25796:47;:::i;25854:346::-;25922:6;25930;25983:2;25971:9;25962:7;25958:23;25954:32;25951:52;;;25999:1;25996;25989:12;25951:52;-1:-1:-1;;26044:23:62;;;26164:2;26149:18;;;26136:32;;-1:-1:-1;25854:346:62:o;26653:705::-;26756:6;26764;26772;26780;26833:3;26821:9;26812:7;26808:23;26804:33;26801:53;;;26850:1;26847;26840:12;26801:53;26895:23;;;-1:-1:-1;27015:2:62;27000:18;;26987:32;;-1:-1:-1;27097:2:62;27082:18;;27069:32;27110:33;27069:32;27110:33;:::i;:::-;27162:7;-1:-1:-1;27220:2:62;27205:18;;27192:32;-1:-1:-1;;;;;27236:30:62;;27233:50;;;27279:1;27276;27269:12;27233:50;27302;27344:7;27335:6;27324:9;27320:22;27302:50;:::i;:::-;27292:60;;;26653:705;;;;;;;:::o;27363:136::-;27441:13;;27463:30;27441:13;27463:30;:::i;:::-;27363:136;;;:::o;27504:::-;27582:13;;27604:30;27582:13;27604:30;:::i;27645:1123::-;27742:6;27802:3;27790:9;27781:7;27777:23;27773:33;27818:2;27815:22;;;27833:1;27830;27823:12;27815:22;-1:-1:-1;27852:1:62;27875:22;;:::i;:::-;27943:16;;27968:22;;28057:2;28042:18;;;28036:25;28077:14;;;28070:31;28168:2;28153:18;;;28147:25;28188:14;;;28181:31;28244:48;28288:2;28273:18;;28244:48;:::i;:::-;28239:2;28232:5;28228:14;28221:72;28326:49;28370:3;28359:9;28355:19;28326:49;:::i;:::-;28320:3;28313:5;28309:15;28302:74;28409:49;28453:3;28442:9;28438:19;28409:49;:::i;:::-;28403:3;28396:5;28392:15;28385:74;28492:49;28536:3;28525:9;28521:19;28492:49;:::i;:::-;28486:3;28479:5;28475:15;28468:74;28575:49;28619:3;28608:9;28604:19;28575:49;:::i;:::-;28569:3;28558:15;;28551:74;28692:3;28677:19;;;28671:26;28713:15;;;28706:32;;;;-1:-1:-1;28562:5:62;;27645:1123;-1:-1:-1;;27645:1123:62:o;29069:230::-;29139:6;29192:2;29180:9;29171:7;29167:23;29163:32;29160:52;;;29208:1;29205;29198:12;29160:52;-1:-1:-1;29253:16:62;;29069:230;-1:-1:-1;29069:230:62:o;29304:249::-;29373:6;29426:2;29414:9;29405:7;29401:23;29397:32;29394:52;;;29442:1;29439;29432:12;29394:52;29474:9;29468:16;29493:30;29517:5;29493:30;:::i;29558:249::-;29627:6;29680:2;29668:9;29659:7;29655:23;29651:32;29648:52;;;29696:1;29693;29686:12;29648:52;29728:9;29722:16;29747:30;29771:5;29747:30;:::i;30091:125::-;30156:9;;;30177:10;;;30174:36;;;30190:18;;:::i;30221:287::-;30350:3;30388:6;30382:13;30404:66;30463:6;30458:3;30451:4;30443:6;30439:17;30404:66;:::i;:::-;30486:16;;;;;30221:287;-1:-1:-1;;30221:287:62:o;30513:259::-;30591:6;30644:2;30632:9;30623:7;30619:23;30615:32;30612:52;;;30660:1;30657;30650:12;30612:52;30692:9;30686:16;30711:31;30736:5;30711:31;:::i;30777:1067::-;30988:2;30977:9;30970:21;30951:4;31026:6;31020:13;31069:2;31064;31053:9;31049:18;31042:30;31151:1;31147;31142:3;31138:11;31134:19;31119:12;31113:19;31109:45;31103:3;31092:9;31088:19;31081:74;31246:1;31242;31237:3;31233:11;31229:19;31221:4;31207:12;31203:23;31197:30;31193:56;31186:4;31175:9;31171:20;31164:86;-1:-1:-1;;;;;31315:2:62;31301:12;31297:21;31291:28;31287:53;31281:3;31270:9;31266:19;31259:82;31431:1;31427;31422:3;31418:11;31414:19;31406:4;31392:12;31388:23;31382:30;31378:56;31372:3;31361:9;31357:19;31350:85;31490:3;31476:12;31472:22;31466:29;31444:51;;31532:4;31526:3;31515:9;31511:19;31504:33;31557:54;31606:3;31595:9;31591:19;31575:14;31557:54;:::i;:::-;31546:65;;31660:4;31652:6;31648:17;31642:24;31733:2;31729:7;31717:9;31712:3;31708:19;31704:33;31697:4;31686:9;31682:20;31675:63;31755:38;31789:3;31773:14;31755:38;:::i;:::-;31747:46;;;;31831:6;31824:4;31813:9;31809:20;31802:36;30777:1067;;;;;:::o;31849:326::-;32021:47;32058:9;32050:6;32021:47;:::i;:::-;32104:2;32099;32088:9;32084:18;32077:30;32002:4;32124:45;32165:2;32154:9;32150:18;32142:6;32124:45;:::i;32504:168::-;32577:9;;;32608;;32625:15;;;32619:22;;32605:37;32595:71;;32646:18;;:::i;32930:408::-;-1:-1:-1;;;;;33165:32:62;;;33147:51;;33234:32;;33229:2;33214:18;;33207:60;33135:2;33120:18;;33276:56;33328:2;33313:18;;33305:6;33276:56;:::i;33343:821::-;33445:6;33505:3;33493:9;33484:7;33480:23;33476:33;33521:2;33518:22;;;33536:1;33533;33526:12;33518:22;-1:-1:-1;33555:1:62;33578:17;;:::i;:::-;33641:16;;33666:22;;33755:2;33740:18;;;33734:25;33775:14;;;33768:31;33866:2;33851:18;;;33845:25;33886:14;;;33879:31;33977:2;33962:18;;;33956:25;33997:14;;;33990:31;34088:3;34073:19;;;34067:26;34109:15;;;34102:32;;;;-1:-1:-1;33673:5:62;;33343:821;-1:-1:-1;;33343:821:62:o;34169:371::-;-1:-1:-1;;;;;34389:32:62;;;34371:51;;34458:32;;;;34453:2;34438:18;;34431:60;34522:2;34507:18;;34500:34;;;;34359:2;34344:18;;34169:371::o;35389:433::-;35620:3;35609:9;35602:22;35583:4;35641:46;35682:3;35671:9;35667:19;35659:6;35641:46;:::i;:::-;35718:2;35703:18;;35696:34;;;;-1:-1:-1;35761:2:62;35746:18;;35739:34;;;;35804:2;35789:18;;;35782:34;35633:54;35389:433;-1:-1:-1;35389:433:62:o;35827:372::-;35914:6;35922;35975:2;35963:9;35954:7;35950:23;35946:32;35943:52;;;35991:1;35988;35981:12;35943:52;36036:16;;36121:2;36106:18;;36100:25;36036:16;;-1:-1:-1;36134:33:62;36100:25;36134:33;:::i;36483:136::-;36522:3;36550:5;36540:39;;36559:18;;:::i;:::-;-1:-1:-1;;;36595:18:62;;36483:136::o;36624:135::-;36663:3;36684:17;;;36681:43;;36704:18;;:::i;:::-;-1:-1:-1;36751:1:62;36740:13;;36624:135::o;36764:386::-;-1:-1:-1;;;;;36982:32:62;;;36964:51;;37051:32;;;;37046:2;37031:18;;37024:60;37132:10;37120:23;;;37115:2;37100:18;;37093:51;36952:2;36937:18;;36764:386::o;37155:217::-;37195:1;37221;37211:132;;37265:10;37260:3;37256:20;37253:1;37246:31;37300:4;37297:1;37290:15;37328:4;37325:1;37318:15;37211:132;-1:-1:-1;37357:9:62;;37155:217::o" + }, + "methodIdentifiers": { + "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", + "allocationProvisionTracker(address)": "6234e216", + "allocations(address)": "52a9039c", + "claims(bytes32)": "eff0f592", + "claimsLists(address)": "13c474c9", + "collect(address,uint8,bytes)": "b15d2a2c", + "curationFeesCut()": "138dea08", + "delegationRatio()": "bfdfa7af", + "eip712Domain()": "84b0196e", + "encodeAllocationProof(address,address)": "ce56c98b", + "feesProvisionTracker(address)": "cbe5f3f2", + "forceCloseAllocation(address)": "a827a90c", + "getAllocation(address)": "0e022923", + "getAllocationData(address)": "55c85269", + "getDelegationRatio()": "1ebb7c30", + "getLegacyAllocation(address)": "6d9a3951", + "getProvisionTokensRange()": "819ba366", + "getSubgraphAllocatedTokens(bytes32)": "e2e1e8e9", + "getThawingPeriodRange()": "71ce020a", + "getVerifierCutRange()": "482468b7", + "indexers(address)": "4f793cdc", + "initialize(uint256,uint32,uint256)": "1cafa218", + "isActiveAllocation(address)": "6a3ca383", + "isOverAllocated(address)": "ba38f67d", + "isStaleAllocation(address)": "3f0ed79d", + "legacyAllocations(address)": "93d4e7cb", + "maxPOIStaleness()": "85e82baf", + "maximumProvisionTokens()": "73371823", + "maximumThawingPeriod()": "9aafa5d1", + "maximumVerifierCut()": "9249c5c1", + "migrateLegacyAllocation(address,address,bytes32)": "7dfe6d28", + "minimumProvisionTokens()": "36fdd28a", + "minimumThawingPeriod()": "8d2f2948", + "minimumVerifierCut()": "88812583", + "multicall(bytes[])": "ac9650d8", + "owner()": "8da5cb5b", + "pause()": "8456cb59", + "pauseGuardians(address)": "9384e078", + "paused()": "5c975abb", + "register(address,bytes)": "24b8fbf6", + "releaseStake(uint256)": "45f54485", + "renounceOwnership()": "715018a6", + "resizeAllocation(address,address,uint256)": "81e777a7", + "rewardsDestination(address)": "7203ca78", + "setCurationCut(uint256)": "7e89bac3", + "setDelegationRatio(uint32)": "1dd42f60", + "setMaxPOIStaleness(uint256)": "7aa31bce", + "setMinimumProvisionTokens(uint256)": "832bc923", + "setPauseGuardian(address,bool)": "35577962", + "setRewardsDestination(address)": "772495c3", + "setStakeToFeesRatio(uint256)": "e6f50054", + "slash(address,bytes)": "cb8347fe", + "stakeToFeesRatio()": "d07a7a84", + "startService(address,bytes)": "dedf6726", + "stopService(address,bytes)": "8180083b", + "subgraphAllocatedTokens(bytes32)": "3afd23fe", + "transferOwnership(address)": "f2fde38b", + "unpause()": "3f4ba83a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tapCollector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"curation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"}],\"name\":\"AllocationClosed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationManagerAllocationClosed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationManagerAllocationSameSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationManagerInvalidAllocationProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllocationManagerInvalidZeroAllocationId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"DataServiceFeesClaimNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataServiceFeesZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DataServicePausableNotPauseGuardian\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"}],\"name\":\"DirectoryNotDisputeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationAlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListEmptyList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidIterations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidZeroId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListMaxElementsExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"PPMMathInvalidMulPPM\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensAvailable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensRequired\",\"type\":\"uint256\"}],\"name\":\"ProvisionTrackerInsufficientTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceAllocationIsAltruistic\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceAllocationNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceCannotForceCloseAllocation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceEmptyGeohash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceEmptyUrl\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balanceBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"SubgraphServiceInconsistentCollection\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceIndexerAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"providedIndexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedIndexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceIndexerMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceIndexerNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"SubgraphServiceInvalidCurationCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"}],\"name\":\"SubgraphServiceInvalidPaymentType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ravIndexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationIndexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceInvalidRAV\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceInvalidZeroStakeToFeesRatio\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldTokens\",\"type\":\"uint256\"}],\"name\":\"AllocationResized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"CurationCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensIndexerRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDelegationRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"name\":\"IndexingRewardsCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"LegacyAllocationMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxPOIStaleness\",\"type\":\"uint256\"}],\"name\":\"MaxPOIStalenessSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"PauseGuardianSet\",\"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\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensCollected\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensCurators\",\"type\":\"uint256\"}],\"name\":\"QueryFeesCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardsDestination\",\"type\":\"address\"}],\"name\":\"RewardsDestinationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}],\"name\":\"StakeClaimLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"}],\"name\":\"StakeClaimReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"claimsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReleased\",\"type\":\"uint256\"}],\"name\":\"StakeClaimsReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"StakeToFeesRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tapCollector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"curation\",\"type\":\"address\"}],\"name\":\"SubgraphServiceDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"allocationProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"allocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"claims\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nextClaim\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"claimsLists\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curationFeesCut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"encodeAllocationProof\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"feesProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"forceCloseAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"internalType\":\"struct Allocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getLegacyAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"internalType\":\"struct LegacyAllocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"indexers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"registeredAt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geoHash\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumProvisionTokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maximumDelegationRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"stakeToFeesRatio\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"isActiveAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"isOverAllocated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"isStaleAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"legacyAllocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPOIStaleness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"migrateLegacyAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pauseGuardian\",\"type\":\"address\"}],\"name\":\"pauseGuardians\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numClaimsToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"resizeAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"setCurationCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"}],\"name\":\"setDelegationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxPOIStaleness\",\"type\":\"uint256\"}],\"name\":\"setMaxPOIStaleness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumProvisionTokens\",\"type\":\"uint256\"}],\"name\":\"setMinimumProvisionTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pauseGuardian\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setPauseGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardsDestination\",\"type\":\"address\"}],\"name\":\"setRewardsDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeToFeesRatio_\",\"type\":\"uint256\"}],\"name\":\"setStakeToFeesRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToFeesRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AllocationAlreadyExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"AllocationClosed(address,uint256)\":[{\"params\":{\"allocationId\":\"The allocation id\",\"closedAt\":\"The timestamp when the allocation was closed\"}}],\"AllocationDoesNotExist(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"AllocationManagerAllocationClosed(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"AllocationManagerAllocationSameSize(address,uint256)\":[{\"params\":{\"allocationId\":\"The id of the allocation\",\"tokens\":\"The amount of tokens\"}}],\"AllocationManagerInvalidAllocationProof(address,address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\",\"signer\":\"The address that signed the proof\"}}],\"DataServicePausableNotPauseGuardian(address)\":[{\"params\":{\"account\":\"The address of the pause guardian\"}}],\"DirectoryNotDisputeManager(address,address)\":[{\"params\":{\"caller\":\"The caller address\",\"disputeManager\":\"The Dispute Manager address\"}}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"LegacyAllocationAlreadyMigrated(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"LegacyAllocationExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"params\":{\"a\":\"The first value in the multiplication.\",\"b\":\"The second value in the multiplication.\"}}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}],\"SubgraphServiceAllocationIsAltruistic(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"SubgraphServiceAllocationNotAuthorized(address,address)\":[{\"params\":{\"allocationId\":\"The id of the allocation.\",\"indexer\":\"The address of the expected indexer.\"}}],\"SubgraphServiceCannotForceCloseAllocation(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"SubgraphServiceInconsistentCollection(uint256,uint256,uint256)\":[{\"params\":{\"balanceAfter\":\"The contract GRT balance after the collection\",\"balanceBefore\":\"The contract GRT balance before the collection\",\"tokensDataService\":\"The amount of tokens sent to the subgraph service\"}}],\"SubgraphServiceIndexerMismatch(address,address)\":[{\"params\":{\"expectedIndexer\":\"The address of the expected indexer.\",\"providedIndexer\":\"The address of the provided indexer.\"}}],\"SubgraphServiceIndexerNotRegistered(address)\":[{\"params\":{\"indexer\":\"The address of the indexer that is not registered\"}}],\"SubgraphServiceInvalidCurationCut(uint256)\":[{\"params\":{\"curationCut\":\"The curation cut value\"}}],\"SubgraphServiceInvalidPaymentType(uint8)\":[{\"params\":{\"paymentType\":\"The payment type that is not supported\"}}],\"SubgraphServiceInvalidRAV(address,address)\":[{\"params\":{\"allocationIndexer\":\"The address of the allocation indexer\",\"ravIndexer\":\"The address of the RAV indexer\"}}]},\"events\":{\"AllocationClosed(address,address,bytes32,uint256)\":{\"details\":\"Emitted when an indexer closes an allocation\",\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokens\":\"The amount of tokens allocated\"}},\"AllocationCreated(address,address,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokens\":\"The amount of tokens allocated\"}},\"AllocationResized(address,address,bytes32,uint256,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"newTokens\":\"The new amount of tokens allocated\",\"oldTokens\":\"The old amount of tokens allocated\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"CurationCutSet(uint256)\":{\"params\":{\"curationCut\":\"The curation cut\"}},\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"IndexingRewardsCollected(address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"currentEpoch\":\"The current epoch\",\"indexer\":\"The address of the indexer\",\"poi\":\"The POI presented\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokensDelegationRewards\":\"The amount of tokens collected for delegators\",\"tokensIndexerRewards\":\"The amount of tokens collected for the indexer\",\"tokensRewards\":\"The amount of tokens collected\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"LegacyAllocationMigrated(address,address,bytes32)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"MaxPOIStalenessSet(uint256)\":{\"params\":{\"maxPOIStaleness\":\"The max POI staleness in seconds\"}},\"PauseGuardianSet(address,bool)\":{\"params\":{\"account\":\"The address of the pause guardian\",\"allowed\":\"The allowed status of the pause guardian\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"QueryFeesCollected(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokensCollected\":\"The amount of tokens collected\",\"tokensCurators\":\"The amount of tokens curators receive\"}},\"RewardsDestinationSet(address,address)\":{\"params\":{\"indexer\":\"The address of the indexer\",\"rewardsDestination\":\"The address where indexing rewards should be sent\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens to lock in the claim\",\"unlockTimestamp\":\"The timestamp when the tokens can be released\"}},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"releasableAt\":\"The timestamp when the tokens were released\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens released\"}},\"StakeClaimsReleased(address,uint256,uint256)\":{\"params\":{\"claimsCount\":\"The number of stake claims being released\",\"serviceProvider\":\"The address of the service provider\",\"tokensReleased\":\"The total amount of tokens being released\"}},\"StakeToFeesRatioSet(uint256)\":{\"params\":{\"ratio\":\"The stake to fees ratio\"}},\"SubgraphServiceDirectoryInitialized(address,address,address,address)\":{\"params\":{\"curation\":\"The Curation contract address\",\"disputeManager\":\"The Dispute Manager contract address\",\"subgraphService\":\"The Subgraph Service contract address\",\"tapCollector\":\"The TAP Collector contract address\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Implements {IDataService-acceptProvisionPendingParameters} Requirements: - The indexer must be registered - Must have previously staged provision parameters, using {IHorizonStaking-setProvisionParameters} - The new provision parameters must be valid according to the subgraph service rules Emits a {ProvisionPendingParametersAccepted} event\",\"params\":{\"indexer\":\"The address of the indexer to accept the provision for\"}},\"collect(address,uint8,bytes)\":{\"details\":\"This function is the equivalent of the `collect` function for query fees and the `closeAllocation` function for indexing rewards in the legacy Staking contract. Requirements: - The indexer must be registered - The provision must be valid according to the subgraph service rules Emits a {ServicePaymentCollected} event. Emits payment type specific events. For query fees, see {SubgraphService-_collectQueryFees} for more details. For indexing rewards, see {AllocationManager-_collectIndexingRewards} for more details.\",\"params\":{\"data\":\"Encoded data to fulfill the payment. The structure of the data depends on the payment type. See above.\",\"indexer\":\"The address of the indexer\",\"paymentType\":\"The type of payment to collect as defined in {IGraphPayments}\"}},\"constructor\":{\"details\":\"DataService and Directory constructors set a bunch of immutable variables\",\"params\":{\"curation\":\"The address of the Curation contract\",\"disputeManager\":\"The address of the DisputeManager contract\",\"graphController\":\"The address of the Graph Controller contract\",\"tapCollector\":\"The address of the TAPCollector contract\"}},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getAllocationData(address)\":{\"details\":\"Implements {IRewardsIssuer.getAllocationData}Note that this is slightly different than {getAllocation}. It returns an unstructured subset of the allocation data, which is the minimum required to mint rewards. Should only be used by the {RewardsManager}.\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"_0\":\"indexer The indexer address\",\"_1\":\"subgraphDeploymentId Subgraph deployment id for the allocation\",\"_2\":\"tokens Amount of allocated tokens\",\"_3\":\"accRewardsPerAllocatedToken Rewards snapshot\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"details\":\"Implements {IRewardsIssuer.getSubgraphAllocatedTokens}To be used by the {RewardsManager}.\",\"params\":{\"subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"initialize(uint256,uint32,uint256)\":{\"details\":\"The thawingPeriod and verifierCut ranges are not set here because they are variables on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges.\",\"params\":{\"maximumDelegationRatio\":\"The maximum delegation ratio allowed for an allocation\",\"minimumProvisionTokens\":\"The minimum amount of provisioned tokens required to create an allocation\",\"stakeToFeesRatio\":\"The ratio of stake to fees to lock when collecting query fees\"}},\"isActiveAllocation(address)\":{\"details\":\"Implements {IRewardsIssuer.isAllocationActive}To be used by the {RewardsManager}.\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"_0\":\"Wether or not the allocation is active\"}},\"multicall(bytes[])\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Receives and executes a batch of function calls on this contract.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"register(address,bytes)\":{\"params\":{\"data\":\"Encoded registration data: - address `url`: The URL of the indexer - string `geohash`: The geohash of the indexer - address `rewardsDestination`: The address where the indexer wants to receive indexing rewards. Use zero address for automatic reprovisioning to the subgraph service.\",\"indexer\":\"The address of the indexer to register\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"slash(address,bytes)\":{\"details\":\"Slashing is delegated to the {DisputeManager} contract which is the only one that can call this function. See {IHorizonStaking-slash} for more details. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Encoded data: - uint256 `tokens`: The amount of tokens to slash - uint256 `reward`: The amount of tokens to reward the slasher\",\"indexer\":\"The address of the indexer to be slashed\"}},\"startService(address,bytes)\":{\"details\":\"This is the equivalent of the `allocate` function in the legacy Staking contract. Requirements: - The indexer must be registered - The provision must be valid according to the subgraph service rules - Allocation id cannot be zero - Allocation id cannot be reused from the legacy staking contract - The indexer must have enough available tokens to allocate The `allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`. See {AllocationManager-allocate} for more details. Emits {ServiceStarted} and {AllocationCreated} events\",\"params\":{\"data\":\"Encoded data: - bytes32 `subgraphDeploymentId`: The id of the subgraph deployment - uint256 `tokens`: The amount of tokens to allocate - address `allocationId`: The id of the allocation - bytes `allocationProof`: Signed proof of the allocation id address ownership\",\"indexer\":\"The address of the indexer\"}},\"stopService(address,bytes)\":{\"details\":\"This is the equivalent of the `closeAllocation` function in the legacy Staking contract. There are a few notable differences with the legacy function: - allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated tokens for other purposes. - No POI is required to close an allocation. Indexers should present POIs to collect indexing rewards using {collect}. Requirements: - The indexer must be registered - Allocation must exist and be open Emits {ServiceStopped} and {AllocationClosed} events\",\"params\":{\"data\":\"Encoded data: - address `allocationId`: The id of the allocation\",\"indexer\":\"The address of the indexer\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"SubgraphService contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AllocationAlreadyExists(address)\":[{\"notice\":\"Thrown when attempting to create an allocation with an existing id\"}],\"AllocationClosed(address,uint256)\":[{\"notice\":\"Thrown when trying to perform an operation on a closed allocation\"}],\"AllocationDoesNotExist(address)\":[{\"notice\":\"Thrown when trying to perform an operation on a non-existent allocation\"}],\"AllocationManagerAllocationClosed(address)\":[{\"notice\":\"Thrown when attempting to collect indexing rewards on a closed allocationl\"}],\"AllocationManagerAllocationSameSize(address,uint256)\":[{\"notice\":\"Thrown when attempting to resize an allocation with the same size\"}],\"AllocationManagerInvalidAllocationProof(address,address)\":[{\"notice\":\"Thrown when an allocation proof is invalid Both `signer` and `allocationId` should match for a valid proof.\"}],\"AllocationManagerInvalidZeroAllocationId()\":[{\"notice\":\"Thrown when attempting to create an allocation with a zero allocation id\"}],\"DataServiceFeesClaimNotFound(bytes32)\":[{\"notice\":\"Thrown when attempting to get a stake claim that does not exist.\"}],\"DataServiceFeesZeroTokens()\":[{\"notice\":\"Emitted when trying to lock zero tokens in a stake claim\"}],\"DataServicePausableNotPauseGuardian(address)\":[{\"notice\":\"Emitted when a the caller is not a pause guardian\"}],\"DirectoryNotDisputeManager(address,address)\":[{\"notice\":\"Thrown when the caller is not the Dispute Manager\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"LegacyAllocationAlreadyMigrated(address)\":[{\"notice\":\"Thrown when trying to migrate an allocation that has already been migrated\"}],\"LegacyAllocationExists(address)\":[{\"notice\":\"Thrown when attempting to migrate an allocation with an existing id\"}],\"LinkedListEmptyList()\":[{\"notice\":\"Thrown when trying to remove an item from an empty list\"}],\"LinkedListInvalidIterations()\":[{\"notice\":\"Thrown when trying to traverse a list with more iterations than elements\"}],\"LinkedListInvalidZeroId()\":[{\"notice\":\"Thrown when trying to add an item with id equal to bytes32(0)\"}],\"LinkedListMaxElementsExceeded()\":[{\"notice\":\"Thrown when trying to add an item to a list that has reached the maximum number of elements\"}],\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"notice\":\"Thrown when no value in a multiplication is in PPM.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}],\"ProvisionTrackerInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when trying to lock more tokens than available\"}],\"SubgraphServiceAllocationIsAltruistic(address)\":[{\"notice\":\"Thrown when trying to force close an altruistic allocation\"}],\"SubgraphServiceAllocationNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the indexer in the allocation state does not match the expected indexer.\"}],\"SubgraphServiceCannotForceCloseAllocation(address)\":[{\"notice\":\"Thrown when trying to force close an allocation that is not stale and the indexer is not over-allocated\"}],\"SubgraphServiceEmptyGeohash()\":[{\"notice\":\"Thrown when an indexer tries to register with an empty geohash\"}],\"SubgraphServiceEmptyUrl()\":[{\"notice\":\"Thrown when an indexer tries to register with an empty URL\"}],\"SubgraphServiceInconsistentCollection(uint256,uint256,uint256)\":[{\"notice\":\"Thrown when the contract GRT balance is inconsistent with the payment amount collected from Graph Payments\"}],\"SubgraphServiceIndexerAlreadyRegistered()\":[{\"notice\":\"Thrown when an indexer tries to register but they are already registered\"}],\"SubgraphServiceIndexerMismatch(address,address)\":[{\"notice\":\"@notice Thrown when the service provider in the RAV does not match the expected indexer.\"}],\"SubgraphServiceIndexerNotRegistered(address)\":[{\"notice\":\"Thrown when an indexer tries to perform an operation but they are not registered\"}],\"SubgraphServiceInvalidCurationCut(uint256)\":[{\"notice\":\"Thrown when trying to set a curation cut that is not a valid PPM value\"}],\"SubgraphServiceInvalidPaymentType(uint8)\":[{\"notice\":\"Thrown when an indexer tries to collect fees for an unsupported payment type\"}],\"SubgraphServiceInvalidRAV(address,address)\":[{\"notice\":\"Thrown when collecting a RAV where the RAV indexer is not the same as the allocation indexer\"}],\"SubgraphServiceInvalidZeroStakeToFeesRatio()\":[{\"notice\":\"Thrown when trying to set stake to fees ratio to zero\"}]},\"events\":{\"AllocationCreated(address,address,bytes32,uint256)\":{\"notice\":\"Emitted when an indexer creates an allocation\"},\"AllocationResized(address,address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when an indexer resizes an allocation\"},\"CurationCutSet(uint256)\":{\"notice\":\"Emitted when curator cuts are set\"},\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"IndexingRewardsCollected(address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)\":{\"notice\":\"Emitted when an indexer collects indexing rewards for an allocation\"},\"LegacyAllocationMigrated(address,address,bytes32)\":{\"notice\":\"Emitted when a legacy allocation is migrated into the subgraph service\"},\"MaxPOIStalenessSet(uint256)\":{\"notice\":\"Emitted when the maximum POI staleness is updated\"},\"PauseGuardianSet(address,bool)\":{\"notice\":\"Emitted when a pause guardian is set.\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"QueryFeesCollected(address,uint256,uint256)\":{\"notice\":\"Emitted when a subgraph service collects query fees from Graph Payments\"},\"RewardsDestinationSet(address,address)\":{\"notice\":\"Emitted when an indexer sets a new indexing rewards destination\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is created and stake is locked.\"},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is released and stake is unlocked.\"},\"StakeClaimsReleased(address,uint256,uint256)\":{\"notice\":\"Emitted when a series of stake claims are released.\"},\"StakeToFeesRatioSet(uint256)\":{\"notice\":\"Emitted when the stake to fees ratio is set.\"},\"SubgraphServiceDirectoryInitialized(address,address,address,address)\":{\"notice\":\"Emitted when the Directory is initialized\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accept staged parameters in the provision of a service provider\"},\"allocationProvisionTracker(address)\":{\"notice\":\"Tracks allocated tokens per indexer\"},\"allocations(address)\":{\"notice\":\"Allocation details\"},\"claims(bytes32)\":{\"notice\":\"List of all locked stake claims to be released to service providers\"},\"claimsLists(address)\":{\"notice\":\"Service providers registered in the data service\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment for the service provided by the indexer Allows collecting different types of payments such as query fees and indexing rewards. It uses Graph Horizon payments protocol to process payments. Reverts if the payment type is not supported.\"},\"constructor\":{\"notice\":\"Constructor for the SubgraphService contract\"},\"curationFeesCut()\":{\"notice\":\"The cut curators take from query fee payments\"},\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"encodeAllocationProof(address,address)\":{\"notice\":\"See {ISubgraphService.encodeAllocationProof}\"},\"forceCloseAllocation(address)\":{\"notice\":\"See {ISubgraphService.closeStaleAllocation}\"},\"getAllocation(address)\":{\"notice\":\"See {ISubgraphService.getAllocation}\"},\"getAllocationData(address)\":{\"notice\":\"Get allocation data to calculate rewards issuance\"},\"getDelegationRatio()\":{\"notice\":\"See {IDataService-getDelegationRatio}.\"},\"getLegacyAllocation(address)\":{\"notice\":\"See {ISubgraphService.getLegacyAllocation}\"},\"getProvisionTokensRange()\":{\"notice\":\"See {IDataService-getProvisionTokensRange}.\"},\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"getThawingPeriodRange()\":{\"notice\":\"See {IDataService-getThawingPeriodRange}.\"},\"getVerifierCutRange()\":{\"notice\":\"See {IDataService-getVerifierCutRange}.\"},\"indexers(address)\":{\"notice\":\"Service providers registered in the data service\"},\"initialize(uint256,uint32,uint256)\":{\"notice\":\"Initialize the contract\"},\"isActiveAllocation(address)\":{\"notice\":\"Check if an allocation is open\"},\"isOverAllocated(address)\":{\"notice\":\"See {ISubgraphService.isOverAllocated}\"},\"isStaleAllocation(address)\":{\"notice\":\"See {ISubgraphService.isStaleAllocation}\"},\"legacyAllocations(address)\":{\"notice\":\"Legacy allocation details\"},\"maxPOIStaleness()\":{\"notice\":\"Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"migrateLegacyAllocation(address,address,bytes32)\":{\"notice\":\"See {ISubgraphService.migrateLegacyAllocation}\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"},\"pause()\":{\"notice\":\"See {IDataServicePausable-pause}\"},\"pauseGuardians(address)\":{\"notice\":\"List of pause guardians and their allowed status\"},\"register(address,bytes)\":{\"notice\":\"@dev Implements {IDataService.register} Requirements: - The indexer must not be already registered - The URL must not be empty - The provision must be valid according to the subgraph service rules Emits a {ServiceProviderRegistered} event\"},\"releaseStake(uint256)\":{\"notice\":\"See {IDataServiceFees-releaseStake}\"},\"resizeAllocation(address,address,uint256)\":{\"notice\":\"See {ISubgraphService.resizeAllocation}\"},\"rewardsDestination(address)\":{\"notice\":\"Destination of accrued indexing rewards\"},\"setCurationCut(uint256)\":{\"notice\":\"See {ISubgraphService.setCurationCut}\"},\"setDelegationRatio(uint32)\":{\"notice\":\"See {ISubgraphService.setDelegationRatio}\"},\"setMaxPOIStaleness(uint256)\":{\"notice\":\"See {ISubgraphService.setMaxPOIStaleness}\"},\"setMinimumProvisionTokens(uint256)\":{\"notice\":\"See {ISubgraphService.setMinimumProvisionTokens}\"},\"setPauseGuardian(address,bool)\":{\"notice\":\"See {ISubgraphService.setPauseGuardian}\"},\"setRewardsDestination(address)\":{\"notice\":\"See {ISubgraphService.setRewardsDestination}\"},\"setStakeToFeesRatio(uint256)\":{\"notice\":\"See {ISubgraphService.setStakeToFeesRatio}\"},\"slash(address,bytes)\":{\"notice\":\"Slash an indexer\"},\"stakeToFeesRatio()\":{\"notice\":\"Multiplier for how many tokens back collected query fees\"},\"startService(address,bytes)\":{\"notice\":\"Allocates tokens to subgraph deployment, manifesting the indexer's commitment to index it\"},\"stopService(address,bytes)\":{\"notice\":\"Close an allocation, indicating that the indexer has stopped indexing the subgraph deployment\"},\"subgraphAllocatedTokens(bytes32)\":{\"notice\":\"Track total tokens allocated per subgraph deployment\"},\"unpause()\":{\"notice\":\"See {IDataServicePausable-pause}\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SubgraphService.sol\":\"SubgraphService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":{\"keccak256\":\"0x7bd336193785ed6f09a3bd847f9208f64aa9b87ad67c40838d00fec41bb153d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d96d83cdb9bbb567e4eafac8bdef3ff6bdaf426338baf76bae277c11afb33cee\",\"dweb:/ipfs/QmNjr4PiJ76Wc5mFqa9H88BjsEMrUfy1jiftNHYTgd6Mp5\"]},\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":{\"keccak256\":\"0x72d1f60db2ba0d65de99869a98ee0ae43dab30a474415c3ee349458b71f97439\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f59f760342a177e107bd1323ad62a0346d2845ea49554380d625107aafd69a30\",\"dweb:/ipfs/QmaovA9tVpp3yS3KtWqsRQwWK5TNyJeF1BZFuTFR6mhCiL\"]},\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol\":{\"keccak256\":\"0x136536e55b4a7ee042b368f32e771e6fe5aa512d89e3eb3e53bc65133a61ec7e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4cd6aa727129b4d30db958f0fb814fe9313da691340af3998baa283bd0c0d3a4\",\"dweb:/ipfs/QmZfakV8Gemw3o6SLQJjZ3m4gYkaFi4VMuQ5jnDJzyhia4\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol\":{\"keccak256\":\"0xfc2ead98c0a29cf14523745ccb07cbd568ba3299bffe5f9c3bec9dad7bf00562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a27545f89d99c54e8acd01d510b31e97500c75a4ace58f2986ab01eb1f0ff13\",\"dweb:/ipfs/QmeBPV1QfdTM6M9q478k512hKSr7kWsKwfEESdDimHQaoH\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol\":{\"keccak256\":\"0xbb8e8d819d97570ccdcd5a6fafd8c43880016f71f6ce1eb4a2f260a1eaf6da5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9f72b98fb9e707e88da2bd496102f0142e55a614c1b65319d4a09ee28b73f227\",\"dweb:/ipfs/Qma93cnXPBKf8qoVbWnQpKiffPwpzE837WncTo3Mx3v42H\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol\":{\"keccak256\":\"0xdf6f1f87857eaa5824747e81aed89f11d52e34400077d341f66165631772ccd2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5fd53c4e7571f1efe15ef3fdf291cec2cb282f5a617c8986eae00f56741b4c6\",\"dweb:/ipfs/QmX1WQNc5XJDgDT6aEv779DAgWzY7Uby8obF2Fey3m1WnE\"]},\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":{\"keccak256\":\"0x9012127a1b1dc8a3f75ad49925632faecca8bcb46f42ab7d1ac0af83a7514f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b002f1f6759e7ced37f161706bc4b787ba7534fb4326ae7ab395270926292c42\",\"dweb:/ipfs/QmRVDPWMbrijk14sywXTbnKdueVBgADBB7h8F9aGA4DgSZ\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":{\"keccak256\":\"0x86f3cfc8eaac309e99018dda796248fb44130b09c2e5bcfc6c63c0e568803bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://176a017cb5c677222ac6a82fecd798292f5f41b4dcb9e16768fbf87816381010\",\"dweb:/ipfs/QmNuLfA5nZptMzWPuvDzJnm7Pwt7uYn1A7G8fwTWPy5Ybm\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\":{\"keccak256\":\"0xa5a882c413c68bfe914bad5e419c0340d7d6a6aef453894ea10b7b96458932bc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5dfc1a11d94b22db5a9262b7038c2fb9c69616f47a11507f59efcc5aa1dcf9b\",\"dweb:/ipfs/QmQ8ahkkfm8PXTuZc5Q8zX2RzXHoSi9btYc57KMvtCrLMU\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol\":{\"keccak256\":\"0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300\",\"dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/SubgraphService.sol\":{\"keccak256\":\"0x432feb6e60a2757391aea8457b5d941c87b26f82223ace7147061591215ddb58\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://231d2a5eef41ee638f7a703c83f8c772e89035c40e1573732c1c2105b517ba52\",\"dweb:/ipfs/QmRH2SLFMeg6vvwPJyo2cfi18HJMZhv7m28PffitFaHa5o\"]},\"contracts/SubgraphServiceStorage.sol\":{\"keccak256\":\"0xd65d4e68881be74d04902e73d3434103a6250367d6f32acdca0ad984064a6f24\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f6adf65148f3a7241be65927f0a721e0646f469bc7fbb3b1c5a41e117539c822\",\"dweb:/ipfs/QmVWGLJRrFnpAPTNW8429KSHNbfMC93sHFHp2UopiQ6Pun\"]},\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/AllocationManager.sol\":{\"keccak256\":\"0xc24b976ce48a98b22cc22c50cc704ec2f5624e753d8cc2a16ede76109345624e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://009aee0ceb4cb423d389a2dad841e9ba39845d0385d507aca47fd49680de3908\",\"dweb:/ipfs/QmXnSEpeFmN6zbbuUJ1w37Sjhgag3h7vjZLi819BdtTUeF\"]},\"contracts/utilities/AllocationManagerStorage.sol\":{\"keccak256\":\"0x4e5f682e3c67a101ddefb795d43f27ef5ed9b458dc348b85e4f2290c01cf48a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dd557b9537c581bbb4bcb5843c03289cf9101236790e33e206621068ff4431b7\",\"dweb:/ipfs/QmcmDDBuGnrNmud7oS79FRsLwb88Ebkqxg8Ws3vQSSs8xQ\"]},\"contracts/utilities/Directory.sol\":{\"keccak256\":\"0xad65e3c6e8ddcb2855c9fbb689d538c3709bda1b7b08f665bc7a9e905e6a9ef4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ae2fbea52fc9b412dc333d74d0984a458da80cc98defdd86bc6a9f31633df56\",\"dweb:/ipfs/QmatwUHznJRo9wvA9ggG4UZVWprdUtAeBmx7T5vDU8vBx9\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 2134, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "minimumProvisionTokens", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 2137, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "maximumProvisionTokens", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 2140, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "minimumThawingPeriod", + "offset": 0, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2143, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "maximumThawingPeriod", + "offset": 8, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 2146, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "minimumVerifierCut", + "offset": 16, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2149, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "maximumVerifierCut", + "offset": 20, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2152, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "delegationRatio", + "offset": 24, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 2157, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "__gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 703, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "__gap", + "offset": 0, + "slot": "53", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 1101, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "pauseGuardians", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 1063, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "feesProvisionTracker", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 1069, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "claims", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)" + }, + { + "astId": 1075, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "claimsLists", + "offset": 0, + "slot": "106", + "type": "t_mapping(t_address,t_struct(List)3813_storage)" + }, + { + "astId": 1080, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "__gap", + "offset": 0, + "slot": "107", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 13042, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "allocations", + "offset": 0, + "slot": "157", + "type": "t_mapping(t_address,t_struct(State)11307_storage)" + }, + { + "astId": 13048, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "legacyAllocations", + "offset": 0, + "slot": "158", + "type": "t_mapping(t_address,t_struct(State)11933_storage)" + }, + { + "astId": 13053, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "allocationProvisionTracker", + "offset": 0, + "slot": "159", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 13056, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "maxPOIStaleness", + "offset": 0, + "slot": "160", + "type": "t_uint256" + }, + { + "astId": 13061, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "rewardsDestination", + "offset": 0, + "slot": "161", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 13066, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "subgraphAllocatedTokens", + "offset": 0, + "slot": "162", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 13071, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "__gap", + "offset": 0, + "slot": "163", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10694, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "indexers", + "offset": 0, + "slot": "213", + "type": "t_mapping(t_address,t_struct(Indexer)11078_storage)" + }, + { + "astId": 10697, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "stakeToFeesRatio", + "offset": 0, + "slot": "214", + "type": "t_uint256" + }, + { + "astId": 10700, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "curationFeesCut", + "offset": 0, + "slot": "215", + "type": "t_uint256" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_struct(Indexer)11078_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct ISubgraphService.Indexer)", + "numberOfBytes": "32", + "value": "t_struct(Indexer)11078_storage" + }, + "t_mapping(t_address,t_struct(List)3813_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct LinkedList.List)", + "numberOfBytes": "32", + "value": "t_struct(List)3813_storage" + }, + "t_mapping(t_address,t_struct(State)11307_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct Allocation.State)", + "numberOfBytes": "32", + "value": "t_struct(State)11307_storage" + }, + "t_mapping(t_address,t_struct(State)11933_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct LegacyAllocation.State)", + "numberOfBytes": "32", + "value": "t_struct(State)11933_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)", + "numberOfBytes": "32", + "value": "t_struct(StakeClaim)1335_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Indexer)11078_storage": { + "encoding": "inplace", + "label": "struct ISubgraphService.Indexer", + "members": [ + { + "astId": 11073, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "registeredAt", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 11075, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "url", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 11077, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "geoHash", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ], + "numberOfBytes": "96" + }, + "t_struct(List)3813_storage": { + "encoding": "inplace", + "label": "struct LinkedList.List", + "members": [ + { + "astId": 3806, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "head", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 3808, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "tail", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + }, + { + "astId": 3810, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "nonce", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 3812, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "count", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(StakeClaim)1335_storage": { + "encoding": "inplace", + "label": "struct IDataServiceFees.StakeClaim", + "members": [ + { + "astId": 1328, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "tokens", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 1330, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "createdAt", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 1332, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "releasableAt", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 1334, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "nextClaim", + "offset": 0, + "slot": "3", + "type": "t_bytes32" + } + ], + "numberOfBytes": "128" + }, + "t_struct(State)11307_storage": { + "encoding": "inplace", + "label": "struct Allocation.State", + "members": [ + { + "astId": 11292, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "indexer", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 11294, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "subgraphDeploymentId", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + }, + { + "astId": 11296, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "tokens", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 11298, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "createdAt", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 11300, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "closedAt", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 11302, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "lastPOIPresentedAt", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 11304, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "accRewardsPerAllocatedToken", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 11306, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "accRewardsPending", + "offset": 0, + "slot": "7", + "type": "t_uint256" + } + ], + "numberOfBytes": "256" + }, + "t_struct(State)11933_storage": { + "encoding": "inplace", + "label": "struct LegacyAllocation.State", + "members": [ + { + "astId": 11930, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "indexer", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 11932, + "contract": "contracts/SubgraphService.sol:SubgraphService", + "label": "subgraphDeploymentId", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + } + } + }, + "contracts/SubgraphServiceStorage.sol": { + "SubgraphServiceV1Storage": { + "abi": [ + { + "inputs": [], + "name": "curationFeesCut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "indexers", + "outputs": [ + { + "internalType": "uint256", + "name": "registeredAt", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "geoHash", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakeToFeesRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "curationFeesCut()": "138dea08", + "indexers(address)": "4f793cdc", + "stakeToFeesRatio()": "d07a7a84" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"curationFeesCut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"indexers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"registeredAt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geoHash\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToFeesRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"curationFeesCut()\":{\"notice\":\"The cut curators take from query fee payments\"},\"indexers(address)\":{\"notice\":\"Service providers registered in the data service\"},\"stakeToFeesRatio()\":{\"notice\":\"Multiplier for how many tokens back collected query fees\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SubgraphServiceStorage.sol\":\"SubgraphServiceV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/SubgraphServiceStorage.sol\":{\"keccak256\":\"0xd65d4e68881be74d04902e73d3434103a6250367d6f32acdca0ad984064a6f24\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f6adf65148f3a7241be65927f0a721e0646f469bc7fbb3b1c5a41e117539c822\",\"dweb:/ipfs/QmVWGLJRrFnpAPTNW8429KSHNbfMC93sHFHp2UopiQ6Pun\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 10694, + "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", + "label": "indexers", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_struct(Indexer)11078_storage)" + }, + { + "astId": 10697, + "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", + "label": "stakeToFeesRatio", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 10700, + "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", + "label": "curationFeesCut", + "offset": 0, + "slot": "2", + "type": "t_uint256" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(Indexer)11078_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct ISubgraphService.Indexer)", + "numberOfBytes": "32", + "value": "t_struct(Indexer)11078_storage" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Indexer)11078_storage": { + "encoding": "inplace", + "label": "struct ISubgraphService.Indexer", + "members": [ + { + "astId": 11073, + "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", + "label": "registeredAt", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 11075, + "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", + "label": "url", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 11077, + "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", + "label": "geoHash", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } + } + }, + "contracts/interfaces/IDisputeManager.sol": { + "IDisputeManager": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerDisputeAlreadyCreated", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum IDisputeManager.DisputeStatus", + "name": "status", + "type": "uint8" + } + ], + "name": "DisputeManagerDisputeNotPending", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerDisputePeriodNotFinished", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerDisputePeriodZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "DisputeManagerIndexerNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerInvalidDispute", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "DisputeManagerInvalidDisputeDeposit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "cut", + "type": "uint32" + } + ], + "name": "DisputeManagerInvalidFishermanReward", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxSlashingCut", + "type": "uint32" + } + ], + "name": "DisputeManagerInvalidMaxSlashingCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokensSlash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTokensSlash", + "type": "uint256" + } + ], + "name": "DisputeManagerInvalidTokensSlash", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "relatedDisputeId", + "type": "bytes32" + } + ], + "name": "DisputeManagerMustAcceptRelatedDispute", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "requestCID1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "requestCID2", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID2", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId2", + "type": "bytes32" + } + ], + "name": "DisputeManagerNonConflictingAttestations", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId1", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId2", + "type": "bytes32" + } + ], + "name": "DisputeManagerNonMatchingSubgraphDeployment", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerNotArbitrator", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerNotFisherman", + "type": "error" + }, + { + "inputs": [], + "name": "DisputeManagerZeroTokens", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "arbitrator", + "type": "address" + } + ], + "name": "ArbitratorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "DisputeDepositSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeDrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId1", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId2", + "type": "bytes32" + } + ], + "name": "DisputeLinked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + } + ], + "name": "DisputePeriodSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "DisputeRejected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "fishermanRewardCut", + "type": "uint32" + } + ], + "name": "FishermanRewardCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "name": "IndexingDisputeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "maxSlashingCut", + "type": "uint32" + } + ], + "name": "MaxSlashingCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fisherman", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "attestation", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeSnapshot", + "type": "uint256" + } + ], + "name": "QueryDisputeCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "subgraphService", + "type": "address" + } + ], + "name": "SubgraphServiceSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokensSlash", + "type": "uint256" + } + ], + "name": "acceptDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation2", + "type": "tuple" + } + ], + "name": "areConflictingAttestations", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "cancelDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + } + ], + "name": "createIndexingDispute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "name": "createQueryDispute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "attestationData1", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData2", + "type": "bytes" + } + ], + "name": "createQueryDisputeConflict", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "drawDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "internalType": "struct Attestation.Receipt", + "name": "receipt", + "type": "tuple" + } + ], + "name": "encodeReceipt", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "requestCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "responseCID", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct Attestation.State", + "name": "attestation", + "type": "tuple" + } + ], + "name": "getAttestationIndexer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDisputePeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "getStakeSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCut", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "isDisputeCreated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "disputeId", + "type": "bytes32" + } + ], + "name": "rejectDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "arbitrator", + "type": "address" + } + ], + "name": "setArbitrator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "disputeDeposit", + "type": "uint256" + } + ], + "name": "setDisputeDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "disputePeriod", + "type": "uint64" + } + ], + "name": "setDisputePeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "cut", + "type": "uint32" + } + ], + "name": "setFishermanRewardCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "maxCut", + "type": "uint32" + } + ], + "name": "setMaxSlashingCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "subgraphService", + "type": "address" + } + ], + "name": "setSubgraphService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "acceptDispute(bytes32,uint256)": "050b17ad", + "areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))": "d36fc9d4", + "cancelDispute(bytes32)": "1792f194", + "createIndexingDispute(address,bytes32)": "4bc5839a", + "createQueryDispute(bytes)": "c50a77b1", + "createQueryDisputeConflict(bytes,bytes)": "c894222e", + "drawDispute(bytes32)": "9334ea52", + "encodeReceipt((bytes32,bytes32,bytes32))": "6369df6b", + "getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))": "c9747f51", + "getDisputePeriod()": "5aea0ec4", + "getStakeSnapshot(address)": "c133b429", + "getVerifierCut()": "84633713", + "isDisputeCreated(bytes32)": "be41f384", + "rejectDispute(bytes32)": "36167e03", + "setArbitrator(address)": "b0eefabe", + "setDisputeDeposit(uint256)": "16972978", + "setDisputePeriod(uint64)": "d76f62d1", + "setFishermanRewardCut(uint32)": "76c993ae", + "setMaxSlashingCut(uint32)": "9f81a7cf", + "setSubgraphService(address)": "93a90a1e" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerDisputeAlreadyCreated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IDisputeManager.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"DisputeManagerDisputeNotPending\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerDisputePeriodNotFinished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerDisputePeriodZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"DisputeManagerIndexerNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerInvalidDispute\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"DisputeManagerInvalidDisputeDeposit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"cut\",\"type\":\"uint32\"}],\"name\":\"DisputeManagerInvalidFishermanReward\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxSlashingCut\",\"type\":\"uint32\"}],\"name\":\"DisputeManagerInvalidMaxSlashingCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokensSlash\",\"type\":\"uint256\"}],\"name\":\"DisputeManagerInvalidTokensSlash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"relatedDisputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerMustAcceptRelatedDispute\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"requestCID2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerNonConflictingAttestations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerNonMatchingSubgraphDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerNotArbitrator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerNotFisherman\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerZeroTokens\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"}],\"name\":\"ArbitratorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"DisputeDepositSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeDrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId1\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeLinked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"}],\"name\":\"DisputePeriodSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"fishermanRewardCut\",\"type\":\"uint32\"}],\"name\":\"FishermanRewardCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"name\":\"IndexingDisputeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxSlashingCut\",\"type\":\"uint32\"}],\"name\":\"MaxSlashingCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"attestation\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"name\":\"QueryDisputeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"}],\"name\":\"SubgraphServiceSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"}],\"name\":\"acceptDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation2\",\"type\":\"tuple\"}],\"name\":\"areConflictingAttestations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"cancelDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"}],\"name\":\"createIndexingDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"attestationData\",\"type\":\"bytes\"}],\"name\":\"createQueryDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"attestationData1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"attestationData2\",\"type\":\"bytes\"}],\"name\":\"createQueryDisputeConflict\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"drawDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"internalType\":\"struct Attestation.Receipt\",\"name\":\"receipt\",\"type\":\"tuple\"}],\"name\":\"encodeReceipt\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"getAttestationIndexer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputePeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getStakeSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"isDisputeCreated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"rejectDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"}],\"name\":\"setArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"setDisputeDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"}],\"name\":\"setDisputePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"cut\",\"type\":\"uint32\"}],\"name\":\"setFishermanRewardCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxCut\",\"type\":\"uint32\"}],\"name\":\"setMaxSlashingCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"}],\"name\":\"setSubgraphService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ArbitratorSet(address)\":{\"params\":{\"arbitrator\":\"The address of the arbitrator.\"}},\"DisputeAccepted(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`. The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward.\"},\"DisputeCancelled(bytes32,address,address,uint256)\":{\"details\":\"Emitted when a dispute is cancelled by the fisherman. The event emits the amount `tokens` returned to the fisherman.\"},\"DisputeDepositSet(uint256)\":{\"params\":{\"disputeDeposit\":\"The dispute deposit required to create a dispute.\"}},\"DisputeDrawn(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` used as deposit and returned to the fisherman.\"},\"DisputeLinked(bytes32,bytes32)\":{\"details\":\"Emitted when two disputes are in conflict to link them. This event will be emitted after each DisputeCreated event is emitted for each of the individual disputes.\"},\"DisputePeriodSet(uint64)\":{\"params\":{\"disputePeriod\":\"The dispute period in seconds.\"}},\"DisputeRejected(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` burned from the fisherman deposit.\"},\"FishermanRewardCutSet(uint32)\":{\"params\":{\"fishermanRewardCut\":\"The fisherman reward cut.\"}},\"IndexingDisputeCreated(bytes32,address,address,uint256,address,bytes32,uint256)\":{\"details\":\"Emitted when an indexing dispute is created for `allocationId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman.\"},\"MaxSlashingCutSet(uint32)\":{\"params\":{\"maxSlashingCut\":\"The maximum slashing cut that can be set.\"}},\"QueryDisputeCreated(bytes32,address,address,uint256,bytes32,bytes,uint256)\":{\"details\":\"Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted.\"},\"SubgraphServiceSet(address)\":{\"params\":{\"subgraphService\":\"The address of the subgraph service.\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"ArbitratorSet(address)\":{\"notice\":\"Emitted when arbitrator is set.\"},\"DisputeDepositSet(uint256)\":{\"notice\":\"Emitted when dispute deposit is set.\"},\"DisputePeriodSet(uint64)\":{\"notice\":\"Emitted when dispute period is set.\"},\"FishermanRewardCutSet(uint32)\":{\"notice\":\"Emitted when fisherman reward cut is set.\"},\"MaxSlashingCutSet(uint32)\":{\"notice\":\"Emitted when max slashing cut is set.\"},\"SubgraphServiceSet(address)\":{\"notice\":\"Emitted when subgraph service is set.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IDisputeManager.sol\":\"IDisputeManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "contracts/interfaces/ISubgraphService.sol": { + "ISubgraphService": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + } + ], + "name": "DataServiceFeesClaimNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "DataServiceFeesZeroTokens", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceAllocationIsAltruistic", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceAllocationNotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "SubgraphServiceCannotForceCloseAllocation", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceEmptyGeohash", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceEmptyUrl", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balanceBefore", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokensDataService", + "type": "uint256" + } + ], + "name": "SubgraphServiceInconsistentCollection", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceIndexerAlreadyRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "providedIndexer", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedIndexer", + "type": "address" + } + ], + "name": "SubgraphServiceIndexerMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "SubgraphServiceIndexerNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "SubgraphServiceInvalidCurationCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "paymentType", + "type": "uint8" + } + ], + "name": "SubgraphServiceInvalidPaymentType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ravIndexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationIndexer", + "type": "address" + } + ], + "name": "SubgraphServiceInvalidRAV", + "type": "error" + }, + { + "inputs": [], + "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "CurationCutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + } + ], + "name": "ProvisionPendingParametersAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensCollected", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensCurators", + "type": "uint256" + } + ], + "name": "QueryFeesCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServicePaymentCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceProviderRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "ServiceProviderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "ServiceStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unlockTimestamp", + "type": "uint256" + } + ], + "name": "StakeClaimLocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "releasableAt", + "type": "uint256" + } + ], + "name": "StakeClaimReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "claimsCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensReleased", + "type": "uint256" + } + ], + "name": "StakeClaimsReleased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "StakeToFeesRatioSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "acceptProvisionPendingParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "enum IGraphPayments.PaymentTypes", + "name": "feeType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "encodeAllocationProof", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "forceCloseAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPOIPresentedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "internalType": "struct Allocation.State", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationRatio", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "getLegacyAllocation", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "internalType": "struct LegacyAllocation.State", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProvisionTokensRange", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getThawingPeriodRange", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVerifierCutRange", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "isOverAllocated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "isStaleAllocation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "migrateLegacyAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "numClaimsToRelease", + "type": "uint256" + } + ], + "name": "releaseStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "resizeAllocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curationCut", + "type": "uint256" + } + ], + "name": "setCurationCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "delegationRatio", + "type": "uint32" + } + ], + "name": "setDelegationRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxPOIStaleness", + "type": "uint256" + } + ], + "name": "setMaxPOIStaleness", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "minimumProvisionTokens", + "type": "uint256" + } + ], + "name": "setMinimumProvisionTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pauseGuardian", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "name": "setPauseGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rewardsDestination", + "type": "address" + } + ], + "name": "setRewardsDestination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeToFeesRatio", + "type": "uint256" + } + ], + "name": "setStakeToFeesRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "slash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "startService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "serviceProvider", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "stopService", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", + "collect(address,uint8,bytes)": "b15d2a2c", + "encodeAllocationProof(address,address)": "ce56c98b", + "forceCloseAllocation(address)": "a827a90c", + "getAllocation(address)": "0e022923", + "getDelegationRatio()": "1ebb7c30", + "getLegacyAllocation(address)": "6d9a3951", + "getProvisionTokensRange()": "819ba366", + "getThawingPeriodRange()": "71ce020a", + "getVerifierCutRange()": "482468b7", + "isOverAllocated(address)": "ba38f67d", + "isStaleAllocation(address)": "3f0ed79d", + "migrateLegacyAllocation(address,address,bytes32)": "7dfe6d28", + "register(address,bytes)": "24b8fbf6", + "releaseStake(uint256)": "45f54485", + "resizeAllocation(address,address,uint256)": "81e777a7", + "setCurationCut(uint256)": "7e89bac3", + "setDelegationRatio(uint32)": "1dd42f60", + "setMaxPOIStaleness(uint256)": "7aa31bce", + "setMinimumProvisionTokens(uint256)": "832bc923", + "setPauseGuardian(address,bool)": "35577962", + "setRewardsDestination(address)": "772495c3", + "setStakeToFeesRatio(uint256)": "e6f50054", + "slash(address,bytes)": "cb8347fe", + "startService(address,bytes)": "dedf6726", + "stopService(address,bytes)": "8180083b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"DataServiceFeesClaimNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataServiceFeesZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceAllocationIsAltruistic\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceAllocationNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceCannotForceCloseAllocation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceEmptyGeohash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceEmptyUrl\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balanceBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"SubgraphServiceInconsistentCollection\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceIndexerAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"providedIndexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedIndexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceIndexerMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceIndexerNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"SubgraphServiceInvalidCurationCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"}],\"name\":\"SubgraphServiceInvalidPaymentType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ravIndexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationIndexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceInvalidRAV\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceInvalidZeroStakeToFeesRatio\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"CurationCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensCollected\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensCurators\",\"type\":\"uint256\"}],\"name\":\"QueryFeesCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}],\"name\":\"StakeClaimLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"}],\"name\":\"StakeClaimReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"claimsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReleased\",\"type\":\"uint256\"}],\"name\":\"StakeClaimsReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"StakeToFeesRatioSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"encodeAllocationProof\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"forceCloseAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"internalType\":\"struct Allocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getLegacyAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"internalType\":\"struct LegacyAllocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"isOverAllocated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"isStaleAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"migrateLegacyAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numClaimsToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"resizeAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"setCurationCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"}],\"name\":\"setDelegationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxPOIStaleness\",\"type\":\"uint256\"}],\"name\":\"setMaxPOIStaleness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumProvisionTokens\",\"type\":\"uint256\"}],\"name\":\"setMinimumProvisionTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pauseGuardian\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setPauseGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardsDestination\",\"type\":\"address\"}],\"name\":\"setRewardsDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeToFeesRatio\",\"type\":\"uint256\"}],\"name\":\"setStakeToFeesRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This interface extends {IDataServiceFees} and {IDataService}.\",\"errors\":{\"SubgraphServiceAllocationIsAltruistic(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"SubgraphServiceAllocationNotAuthorized(address,address)\":[{\"params\":{\"allocationId\":\"The id of the allocation.\",\"indexer\":\"The address of the expected indexer.\"}}],\"SubgraphServiceCannotForceCloseAllocation(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"SubgraphServiceInconsistentCollection(uint256,uint256,uint256)\":[{\"params\":{\"balanceAfter\":\"The contract GRT balance after the collection\",\"balanceBefore\":\"The contract GRT balance before the collection\",\"tokensDataService\":\"The amount of tokens sent to the subgraph service\"}}],\"SubgraphServiceIndexerMismatch(address,address)\":[{\"params\":{\"expectedIndexer\":\"The address of the expected indexer.\",\"providedIndexer\":\"The address of the provided indexer.\"}}],\"SubgraphServiceIndexerNotRegistered(address)\":[{\"params\":{\"indexer\":\"The address of the indexer that is not registered\"}}],\"SubgraphServiceInvalidCurationCut(uint256)\":[{\"params\":{\"curationCut\":\"The curation cut value\"}}],\"SubgraphServiceInvalidPaymentType(uint8)\":[{\"params\":{\"paymentType\":\"The payment type that is not supported\"}}],\"SubgraphServiceInvalidRAV(address,address)\":[{\"params\":{\"allocationIndexer\":\"The address of the allocation indexer\",\"ravIndexer\":\"The address of the RAV indexer\"}}]},\"events\":{\"CurationCutSet(uint256)\":{\"params\":{\"curationCut\":\"The curation cut\"}},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"QueryFeesCollected(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokensCollected\":\"The amount of tokens collected\",\"tokensCurators\":\"The amount of tokens curators receive\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens to lock in the claim\",\"unlockTimestamp\":\"The timestamp when the tokens can be released\"}},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"releasableAt\":\"The timestamp when the tokens were released\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens released\"}},\"StakeClaimsReleased(address,uint256,uint256)\":{\"params\":{\"claimsCount\":\"The number of stake claims being released\",\"serviceProvider\":\"The address of the service provider\",\"tokensReleased\":\"The total amount of tokens being released\"}},\"StakeToFeesRatioSet(uint256)\":{\"params\":{\"ratio\":\"The stake to fees ratio\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"encodeAllocationProof(address,address)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\"}},\"forceCloseAllocation(address)\":{\"details\":\"This function can be permissionlessly called when the allocation is stale or if the indexer is over-allocated. This ensures that rewards for other allocations are not diluted by an inactive allocation, and that over-allocated indexers stop accumulating rewards with tokens they no longer have allocated. Requirements: - Allocation must exist and be open - Allocation must be stale or indexer must be over-allocated - Allocation cannot be altruistic Emits a {AllocationClosed} event.\",\"params\":{\"allocationId\":\"The id of the allocation\"}},\"getAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getLegacyAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"}},\"getProvisionTokensRange()\":{\"returns\":{\"_0\":\"Minimum provision tokens allowed\",\"_1\":\"Maximum provision tokens allowed\"}},\"getThawingPeriodRange()\":{\"returns\":{\"_0\":\"Minimum thawing period allowed\",\"_1\":\"Maximum thawing period allowed\"}},\"getVerifierCutRange()\":{\"returns\":{\"_0\":\"Minimum verifier cut allowed\",\"_1\":\"Maximum verifier cut allowed\"}},\"isOverAllocated(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"True if the indexer is over-allocated, false otherwise\"}},\"isStaleAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"True if the allocation is stale, false otherwise\"}},\"migrateLegacyAllocation(address,address,bytes32)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"releaseStake(uint256)\":{\"details\":\"This function is only meant to be called if the service provider has enough stake claims that releasing them all at once would exceed the block gas limit.This function can be overriden and/or disabled.Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\",\"params\":{\"numClaimsToRelease\":\"Amount of stake claims to process. If 0, all stake claims are processed.\"}},\"resizeAllocation(address,address,uint256)\":{\"details\":\"Requirements: - The indexer must be registered - The provision must be valid according to the subgraph service rules - `tokens` must be different from the current allocation size - The indexer must have enough available tokens to allocate if they are upsizing the allocation Emits a {AllocationResized} event. See {AllocationManager-_resizeAllocation} for more details.\",\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"tokens\":\"The new amount of tokens in the allocation\"}},\"setCurationCut(uint256)\":{\"details\":\"Emits a {CuratorCutSet} event\",\"params\":{\"curationCut\":\"The curation cut for the payment type\"}},\"setDelegationRatio(uint32)\":{\"params\":{\"delegationRatio\":\"The delegation ratio\"}},\"setMaxPOIStaleness(uint256)\":{\"params\":{\"maxPOIStaleness\":\"The max POI staleness in seconds\"}},\"setMinimumProvisionTokens(uint256)\":{\"params\":{\"minimumProvisionTokens\":\"The minimum amount of provisioned tokens required to create an allocation\"}},\"setPauseGuardian(address,bool)\":{\"params\":{\"allowed\":\"True if the pause guardian is allowed to pause the contract, false otherwise\",\"pauseGuardian\":\"The address of the pause guardian\"}},\"setRewardsDestination(address)\":{\"details\":\"Emits a {RewardsDestinationSet} event\",\"params\":{\"rewardsDestination\":\"The address where indexing rewards should be sent\"}},\"setStakeToFeesRatio(uint256)\":{\"params\":{\"stakeToFeesRatio\":\"The stake to fees ratio\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"Interface for the {SubgraphService} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServiceFeesClaimNotFound(bytes32)\":[{\"notice\":\"Thrown when attempting to get a stake claim that does not exist.\"}],\"DataServiceFeesZeroTokens()\":[{\"notice\":\"Emitted when trying to lock zero tokens in a stake claim\"}],\"SubgraphServiceAllocationIsAltruistic(address)\":[{\"notice\":\"Thrown when trying to force close an altruistic allocation\"}],\"SubgraphServiceAllocationNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the indexer in the allocation state does not match the expected indexer.\"}],\"SubgraphServiceCannotForceCloseAllocation(address)\":[{\"notice\":\"Thrown when trying to force close an allocation that is not stale and the indexer is not over-allocated\"}],\"SubgraphServiceEmptyGeohash()\":[{\"notice\":\"Thrown when an indexer tries to register with an empty geohash\"}],\"SubgraphServiceEmptyUrl()\":[{\"notice\":\"Thrown when an indexer tries to register with an empty URL\"}],\"SubgraphServiceInconsistentCollection(uint256,uint256,uint256)\":[{\"notice\":\"Thrown when the contract GRT balance is inconsistent with the payment amount collected from Graph Payments\"}],\"SubgraphServiceIndexerAlreadyRegistered()\":[{\"notice\":\"Thrown when an indexer tries to register but they are already registered\"}],\"SubgraphServiceIndexerMismatch(address,address)\":[{\"notice\":\"@notice Thrown when the service provider in the RAV does not match the expected indexer.\"}],\"SubgraphServiceIndexerNotRegistered(address)\":[{\"notice\":\"Thrown when an indexer tries to perform an operation but they are not registered\"}],\"SubgraphServiceInvalidCurationCut(uint256)\":[{\"notice\":\"Thrown when trying to set a curation cut that is not a valid PPM value\"}],\"SubgraphServiceInvalidPaymentType(uint8)\":[{\"notice\":\"Thrown when an indexer tries to collect fees for an unsupported payment type\"}],\"SubgraphServiceInvalidRAV(address,address)\":[{\"notice\":\"Thrown when collecting a RAV where the RAV indexer is not the same as the allocation indexer\"}],\"SubgraphServiceInvalidZeroStakeToFeesRatio()\":[{\"notice\":\"Thrown when trying to set stake to fees ratio to zero\"}]},\"events\":{\"CurationCutSet(uint256)\":{\"notice\":\"Emitted when curator cuts are set\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"QueryFeesCollected(address,uint256,uint256)\":{\"notice\":\"Emitted when a subgraph service collects query fees from Graph Payments\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is created and stake is locked.\"},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is released and stake is unlocked.\"},\"StakeClaimsReleased(address,uint256,uint256)\":{\"notice\":\"Emitted when a series of stake claims are released.\"},\"StakeToFeesRatioSet(uint256)\":{\"notice\":\"Emitted when the stake to fees ratio is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"encodeAllocationProof(address,address)\":{\"notice\":\"Encodes the allocation proof for EIP712 signing\"},\"forceCloseAllocation(address)\":{\"notice\":\"Force close an allocation\"},\"getAllocation(address)\":{\"notice\":\"Gets the details of an allocation For legacy allocations use {getLegacyAllocation}\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getLegacyAllocation(address)\":{\"notice\":\"Gets the details of a legacy allocation For non-legacy allocations use {getAllocation}\"},\"getProvisionTokensRange()\":{\"notice\":\"External getter for the provision tokens range\"},\"getThawingPeriodRange()\":{\"notice\":\"External getter for the thawing period range\"},\"getVerifierCutRange()\":{\"notice\":\"External getter for the verifier cut range\"},\"isOverAllocated(address)\":{\"notice\":\"Checks if an indexer is over-allocated\"},\"isStaleAllocation(address)\":{\"notice\":\"Checks if an allocation is stale\"},\"migrateLegacyAllocation(address,address,bytes32)\":{\"notice\":\"Imports a legacy allocation id into the subgraph service This is a governor only action that is required to prevent indexers from re-using allocation ids from the legacy staking contract.\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"releaseStake(uint256)\":{\"notice\":\"Releases expired stake claims for the caller.\"},\"resizeAllocation(address,address,uint256)\":{\"notice\":\"Change the amount of tokens in an allocation\"},\"setCurationCut(uint256)\":{\"notice\":\"Sets the curators payment cut for query fees\"},\"setDelegationRatio(uint32)\":{\"notice\":\"Sets the delegation ratio\"},\"setMaxPOIStaleness(uint256)\":{\"notice\":\"Sets the max POI staleness See {AllocationManagerV1Storage-maxPOIStaleness} for more details.\"},\"setMinimumProvisionTokens(uint256)\":{\"notice\":\"Sets the minimum amount of provisioned tokens required to create an allocation\"},\"setPauseGuardian(address,bool)\":{\"notice\":\"Sets a pause guardian\"},\"setRewardsDestination(address)\":{\"notice\":\"Sets the rewards destination for an indexer to receive indexing rewards\"},\"setStakeToFeesRatio(uint256)\":{\"notice\":\"Sets the stake to fees ratio\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"The Subgraph Service is a data service built on top of Graph Horizon that supports the use case of subgraph indexing and querying. The {SubgraphService} contract implements the flows described in the Data Service framework to allow indexers to register as subgraph service providers, create allocations to signal their commitment to index a subgraph, and collect fees for indexing and querying services.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ISubgraphService.sol\":\"ISubgraphService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "contracts/libraries/Allocation.sol": { + "Allocation": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + } + ], + "name": "AllocationClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationDoesNotExist", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220291c9aa1e1a00cb5ec5f2f8ed26ccb21fe0b529c44b1d6c1644b12749dba75d764736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x29 SHR SWAP11 LOG1 0xE1 LOG0 0xC 0xB5 0xEC PUSH0 0x2F DUP15 0xD2 PUSH13 0xCB21FE0B529C44B1D6C1644B12 PUSH21 0x9DBA75D764736F6C634300081B0033000000000000 ", + "sourceMap": "220:7144:54:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;220:7144:54;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220291c9aa1e1a00cb5ec5f2f8ed26ccb21fe0b529c44b1d6c1644b12749dba75d764736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x29 SHR SWAP11 LOG1 0xE1 LOG0 0xC 0xB5 0xEC PUSH0 0x2F DUP15 0xD2 PUSH13 0xCB21FE0B529C44B1D6C1644B12 PUSH21 0x9DBA75D764736F6C634300081B0033000000000000 ", + "sourceMap": "220:7144:54:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"}],\"name\":\"AllocationClosed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationDoesNotExist\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllocationAlreadyExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"AllocationClosed(address,uint256)\":[{\"params\":{\"allocationId\":\"The allocation id\",\"closedAt\":\"The timestamp when the allocation was closed\"}}],\"AllocationDoesNotExist(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"Allocation library\",\"version\":1},\"userdoc\":{\"errors\":{\"AllocationAlreadyExists(address)\":[{\"notice\":\"Thrown when attempting to create an allocation with an existing id\"}],\"AllocationClosed(address,uint256)\":[{\"notice\":\"Thrown when trying to perform an operation on a closed allocation\"}],\"AllocationDoesNotExist(address)\":[{\"notice\":\"Thrown when trying to perform an operation on a non-existent allocation\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to handle Allocations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/Allocation.sol\":\"Allocation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "contracts/libraries/Attestation.sol": { + "Attestation": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expectedLength", + "type": "uint256" + } + ], + "name": "AttestationInvalidBytesLength", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fa356496335e29bc5b636632a191a68385d839ae18bff5095b2d78d3f63eb7ae64736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STATICCALL CALLDATALOAD PUSH5 0x96335E29BC JUMPDEST PUSH4 0x6632A191 0xA6 DUP4 DUP6 0xD8 CODECOPY 0xAE XOR 0xBF CREATE2 MULMOD JUMPDEST 0x2D PUSH25 0xD3F63EB7AE64736F6C634300081B0033000000000000000000 ", + "sourceMap": "152:4376:55:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;152:4376:55;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fa356496335e29bc5b636632a191a68385d839ae18bff5095b2d78d3f63eb7ae64736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STATICCALL CALLDATALOAD PUSH5 0x96335E29BC JUMPDEST PUSH4 0x6632A191 0xA6 DUP4 DUP6 0xD8 CODECOPY 0xAE XOR 0xBF CREATE2 MULMOD JUMPDEST 0x2D PUSH25 0xD3F63EB7AE64736F6C634300081B0033000000000000000000 ", + "sourceMap": "152:4376:55:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLength\",\"type\":\"uint256\"}],\"name\":\"AttestationInvalidBytesLength\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Attestation library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to handle Attestation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/Attestation.sol\":\"Attestation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "contracts/libraries/LegacyAllocation.sol": { + "LegacyAllocation": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "LegacyAllocationAlreadyMigrated", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "LegacyAllocationDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "LegacyAllocationExists", + "type": "error" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220470e3c1f93a943319bd2758940bf40c2421579802938427096997bb3795f5e8964736f6c634300081b0033", + "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE 0xE EXTCODECOPY 0x1F SWAP4 0xA9 NUMBER BALANCE SWAP12 0xD2 PUSH22 0x8940BF40C2421579802938427096997BB3795F5E8964 PUSH20 0x6F6C634300081B00330000000000000000000000 ", + "sourceMap": "164:3349:56:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;164:3349:56;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220470e3c1f93a943319bd2758940bf40c2421579802938427096997bb3795f5e8964736f6c634300081b0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE 0xE EXTCODECOPY 0x1F SWAP4 0xA9 NUMBER BALANCE SWAP12 0xD2 PUSH22 0x8940BF40C2421579802938427096997BB3795F5E8964 PUSH20 0x6F6C634300081B00330000000000000000000000 ", + "sourceMap": "164:3349:56:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationAlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationExists\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"LegacyAllocationAlreadyMigrated(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"LegacyAllocationDoesNotExist(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"LegacyAllocationExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"LegacyAllocation library\",\"version\":1},\"userdoc\":{\"errors\":{\"LegacyAllocationAlreadyMigrated(address)\":[{\"notice\":\"Thrown when trying to migrate an allocation that has already been migrated\"}],\"LegacyAllocationDoesNotExist(address)\":[{\"notice\":\"Thrown when trying to get a non-existent allocation\"}],\"LegacyAllocationExists(address)\":[{\"notice\":\"Thrown when attempting to migrate an allocation with an existing id\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to handle legacy Allocations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/LegacyAllocation.sol\":\"LegacyAllocation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + }, + "contracts/utilities/AllocationManager.sol": { + "AllocationManager": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationManagerAllocationClosed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationManagerAllocationSameSize", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "AllocationManagerInvalidAllocationProof", + "type": "error" + }, + { + "inputs": [], + "name": "AllocationManagerInvalidZeroAllocationId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractName", + "type": "bytes" + } + ], + "name": "GraphDirectoryInvalidZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "AllocationCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTokens", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "oldTokens", + "type": "uint256" + } + ], + "name": "AllocationResized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "graphToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphStaking", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphPayments", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEscrow", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "graphController", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphEpochManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphRewardsManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphTokenGateway", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphProxyAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "graphCuration", + "type": "address" + } + ], + "name": "GraphDirectoryInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensIndexerRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensDelegationRewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "poi", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "IndexingRewardsCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "allocationId", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "LegacyAllocationMigrated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxPOIStaleness", + "type": "uint256" + } + ], + "name": "MaxPOIStalenessSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "rewardsDestination", + "type": "address" + } + ], + "name": "RewardsDestinationSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "allocationProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "allocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPOIPresentedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "legacyAllocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxPOIStaleness", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "rewardsDestination", + "outputs": [ + { + "internalType": "address", + "name": "destination", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "subgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "allocationProvisionTracker(address)": "6234e216", + "allocations(address)": "52a9039c", + "eip712Domain()": "84b0196e", + "legacyAllocations(address)": "93d4e7cb", + "maxPOIStaleness()": "85e82baf", + "rewardsDestination(address)": "7203ca78", + "subgraphAllocatedTokens(bytes32)": "3afd23fe" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationManagerAllocationClosed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationManagerAllocationSameSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationManagerInvalidAllocationProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllocationManagerInvalidZeroAllocationId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldTokens\",\"type\":\"uint256\"}],\"name\":\"AllocationResized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensIndexerRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDelegationRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"name\":\"IndexingRewardsCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"LegacyAllocationMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxPOIStaleness\",\"type\":\"uint256\"}],\"name\":\"MaxPOIStalenessSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardsDestination\",\"type\":\"address\"}],\"name\":\"RewardsDestinationSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"allocationProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"allocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"legacyAllocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPOIStaleness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AllocationManagerAllocationClosed(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"AllocationManagerAllocationSameSize(address,uint256)\":[{\"params\":{\"allocationId\":\"The id of the allocation\",\"tokens\":\"The amount of tokens\"}}],\"AllocationManagerInvalidAllocationProof(address,address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\",\"signer\":\"The address that signed the proof\"}}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"AllocationClosed(address,address,bytes32,uint256)\":{\"details\":\"Emitted when an indexer closes an allocation\",\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokens\":\"The amount of tokens allocated\"}},\"AllocationCreated(address,address,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokens\":\"The amount of tokens allocated\"}},\"AllocationResized(address,address,bytes32,uint256,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"newTokens\":\"The new amount of tokens allocated\",\"oldTokens\":\"The old amount of tokens allocated\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"IndexingRewardsCollected(address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"currentEpoch\":\"The current epoch\",\"indexer\":\"The address of the indexer\",\"poi\":\"The POI presented\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokensDelegationRewards\":\"The amount of tokens collected for delegators\",\"tokensIndexerRewards\":\"The amount of tokens collected for the indexer\",\"tokensRewards\":\"The amount of tokens collected\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"LegacyAllocationMigrated(address,address,bytes32)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"MaxPOIStalenessSet(uint256)\":{\"params\":{\"maxPOIStaleness\":\"The max POI staleness in seconds\"}},\"RewardsDestinationSet(address,address)\":{\"params\":{\"indexer\":\"The address of the indexer\",\"rewardsDestination\":\"The address where indexing rewards should be sent\"}}},\"kind\":\"dev\",\"methods\":{\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"}},\"stateVariables\":{\"EIP712_ALLOCATION_PROOF_TYPEHASH\":{\"details\":\"EIP712 typehash for allocation proof\"}},\"title\":\"AllocationManager contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AllocationManagerAllocationClosed(address)\":[{\"notice\":\"Thrown when attempting to collect indexing rewards on a closed allocationl\"}],\"AllocationManagerAllocationSameSize(address,uint256)\":[{\"notice\":\"Thrown when attempting to resize an allocation with the same size\"}],\"AllocationManagerInvalidAllocationProof(address,address)\":[{\"notice\":\"Thrown when an allocation proof is invalid Both `signer` and `allocationId` should match for a valid proof.\"}],\"AllocationManagerInvalidZeroAllocationId()\":[{\"notice\":\"Thrown when attempting to create an allocation with a zero allocation id\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}]},\"events\":{\"AllocationCreated(address,address,bytes32,uint256)\":{\"notice\":\"Emitted when an indexer creates an allocation\"},\"AllocationResized(address,address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when an indexer resizes an allocation\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"IndexingRewardsCollected(address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)\":{\"notice\":\"Emitted when an indexer collects indexing rewards for an allocation\"},\"LegacyAllocationMigrated(address,address,bytes32)\":{\"notice\":\"Emitted when a legacy allocation is migrated into the subgraph service\"},\"MaxPOIStalenessSet(uint256)\":{\"notice\":\"Emitted when the maximum POI staleness is updated\"},\"RewardsDestinationSet(address,address)\":{\"notice\":\"Emitted when an indexer sets a new indexing rewards destination\"}},\"kind\":\"user\",\"methods\":{\"allocationProvisionTracker(address)\":{\"notice\":\"Tracks allocated tokens per indexer\"},\"allocations(address)\":{\"notice\":\"Allocation details\"},\"legacyAllocations(address)\":{\"notice\":\"Legacy allocation details\"},\"maxPOIStaleness()\":{\"notice\":\"Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\"},\"rewardsDestination(address)\":{\"notice\":\"Destination of accrued indexing rewards\"},\"subgraphAllocatedTokens(bytes32)\":{\"notice\":\"Track total tokens allocated per subgraph deployment\"}},\"notice\":\"A helper contract implementing allocation lifecycle management. Allows opening, resizing, and closing allocations, as well as collecting indexing rewards by presenting a Proof of Indexing (POI).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/AllocationManager.sol\":\"AllocationManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":{\"keccak256\":\"0x7bd336193785ed6f09a3bd847f9208f64aa9b87ad67c40838d00fec41bb153d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d96d83cdb9bbb567e4eafac8bdef3ff6bdaf426338baf76bae277c11afb33cee\",\"dweb:/ipfs/QmNjr4PiJ76Wc5mFqa9H88BjsEMrUfy1jiftNHYTgd6Mp5\"]},\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":{\"keccak256\":\"0x9012127a1b1dc8a3f75ad49925632faecca8bcb46f42ab7d1ac0af83a7514f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b002f1f6759e7ced37f161706bc4b787ba7534fb4326ae7ab395270926292c42\",\"dweb:/ipfs/QmRVDPWMbrijk14sywXTbnKdueVBgADBB7h8F9aGA4DgSZ\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/AllocationManager.sol\":{\"keccak256\":\"0xc24b976ce48a98b22cc22c50cc704ec2f5624e753d8cc2a16ede76109345624e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://009aee0ceb4cb423d389a2dad841e9ba39845d0385d507aca47fd49680de3908\",\"dweb:/ipfs/QmXnSEpeFmN6zbbuUJ1w37Sjhgag3h7vjZLi819BdtTUeF\"]},\"contracts/utilities/AllocationManagerStorage.sol\":{\"keccak256\":\"0x4e5f682e3c67a101ddefb795d43f27ef5ed9b458dc348b85e4f2290c01cf48a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dd557b9537c581bbb4bcb5843c03289cf9101236790e33e206621068ff4431b7\",\"dweb:/ipfs/QmcmDDBuGnrNmud7oS79FRsLwb88Ebkqxg8Ws3vQSSs8xQ\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 13042, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "allocations", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_struct(State)11307_storage)" + }, + { + "astId": 13048, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "legacyAllocations", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(State)11933_storage)" + }, + { + "astId": 13053, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "allocationProvisionTracker", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 13056, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "maxPOIStaleness", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 13061, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "rewardsDestination", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 13066, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "subgraphAllocatedTokens", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 13071, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "__gap", + "offset": 0, + "slot": "6", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_struct(State)11307_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct Allocation.State)", + "numberOfBytes": "32", + "value": "t_struct(State)11307_storage" + }, + "t_mapping(t_address,t_struct(State)11933_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct LegacyAllocation.State)", + "numberOfBytes": "32", + "value": "t_struct(State)11933_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(State)11307_storage": { + "encoding": "inplace", + "label": "struct Allocation.State", + "members": [ + { + "astId": 11292, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "indexer", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 11294, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "subgraphDeploymentId", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + }, + { + "astId": 11296, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "tokens", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 11298, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "createdAt", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 11300, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "closedAt", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 11302, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "lastPOIPresentedAt", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 11304, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "accRewardsPerAllocatedToken", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 11306, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "accRewardsPending", + "offset": 0, + "slot": "7", + "type": "t_uint256" + } + ], + "numberOfBytes": "256" + }, + "t_struct(State)11933_storage": { + "encoding": "inplace", + "label": "struct LegacyAllocation.State", + "members": [ + { + "astId": 11930, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "indexer", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 11932, + "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", + "label": "subgraphDeploymentId", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } + } + }, + "contracts/utilities/AllocationManagerStorage.sol": { + "AllocationManagerV1Storage": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "allocationProvisionTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "allocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "closedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPOIPresentedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPerAllocatedToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accRewardsPending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "allocationId", + "type": "address" + } + ], + "name": "legacyAllocations", + "outputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxPOIStaleness", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "indexer", + "type": "address" + } + ], + "name": "rewardsDestination", + "outputs": [ + { + "internalType": "address", + "name": "destination", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "subgraphDeploymentId", + "type": "bytes32" + } + ], + "name": "subgraphAllocatedTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "allocationProvisionTracker(address)": "6234e216", + "allocations(address)": "52a9039c", + "legacyAllocations(address)": "93d4e7cb", + "maxPOIStaleness()": "85e82baf", + "rewardsDestination(address)": "7203ca78", + "subgraphAllocatedTokens(bytes32)": "3afd23fe" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"allocationProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"allocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"legacyAllocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPOIStaleness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"},\"subgraphAllocatedTokens\":{\"details\":\"Used to calculate indexing rewards\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allocationProvisionTracker(address)\":{\"notice\":\"Tracks allocated tokens per indexer\"},\"allocations(address)\":{\"notice\":\"Allocation details\"},\"legacyAllocations(address)\":{\"notice\":\"Legacy allocation details\"},\"maxPOIStaleness()\":{\"notice\":\"Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\"},\"rewardsDestination(address)\":{\"notice\":\"Destination of accrued indexing rewards\"},\"subgraphAllocatedTokens(bytes32)\":{\"notice\":\"Track total tokens allocated per subgraph deployment\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/AllocationManagerStorage.sol\":\"AllocationManagerV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/AllocationManagerStorage.sol\":{\"keccak256\":\"0x4e5f682e3c67a101ddefb795d43f27ef5ed9b458dc348b85e4f2290c01cf48a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dd557b9537c581bbb4bcb5843c03289cf9101236790e33e206621068ff4431b7\",\"dweb:/ipfs/QmcmDDBuGnrNmud7oS79FRsLwb88Ebkqxg8Ws3vQSSs8xQ\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 13042, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "allocations", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_struct(State)11307_storage)" + }, + { + "astId": 13048, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "legacyAllocations", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_struct(State)11933_storage)" + }, + { + "astId": 13053, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "allocationProvisionTracker", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 13056, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "maxPOIStaleness", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 13061, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "rewardsDestination", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 13066, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "subgraphAllocatedTokens", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 13071, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "__gap", + "offset": 0, + "slot": "6", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_struct(State)11307_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct Allocation.State)", + "numberOfBytes": "32", + "value": "t_struct(State)11307_storage" + }, + "t_mapping(t_address,t_struct(State)11933_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct LegacyAllocation.State)", + "numberOfBytes": "32", + "value": "t_struct(State)11933_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(State)11307_storage": { + "encoding": "inplace", + "label": "struct Allocation.State", + "members": [ + { + "astId": 11292, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "indexer", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 11294, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "subgraphDeploymentId", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + }, + { + "astId": 11296, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "tokens", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 11298, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "createdAt", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 11300, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "closedAt", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 11302, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "lastPOIPresentedAt", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 11304, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "accRewardsPerAllocatedToken", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 11306, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "accRewardsPending", + "offset": 0, + "slot": "7", + "type": "t_uint256" + } + ], + "numberOfBytes": "256" + }, + "t_struct(State)11933_storage": { + "encoding": "inplace", + "label": "struct LegacyAllocation.State", + "members": [ + { + "astId": 11930, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "indexer", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 11932, + "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", + "label": "subgraphDeploymentId", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } + } + }, + "contracts/utilities/AttestationManager.sol": { + "AttestationManager": { + "abi": [ + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"title\":\"AttestationManager contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A helper contract implementing attestation verification. Uses a custom implementation of EIP712 for backwards compatibility with attestations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/AttestationManager.sol\":\"AttestationManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/utilities/AttestationManager.sol\":{\"keccak256\":\"0xb50da53c59205cf06bec2263238d89d6df6d72522a1e555bfe2c3ca8558c8f88\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://18241c6b621d825234a62dc08a7f7e87b2e3e23caa5f618a74a1c48cde46052e\",\"dweb:/ipfs/QmWvo16uoasqBMVVLr557gyMsCq2Nts7EakgkdwJZuRHiF\"]},\"contracts/utilities/AttestationManagerStorage.sol\":{\"keccak256\":\"0xc14058d90b97806df0f43acfce6bc984c17ded00511ea9d7dd559d897fed7cf7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://df851043d7e2b5f0eaa611141cbc2b594c3ece4ba4e7f040215095d7bdef7ea0\",\"dweb:/ipfs/Qmf5PBxRP4dCtPonNdeoHrgmCYZDogzx4vMEsLM3h5JQDs\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 13231, + "contract": "contracts/utilities/AttestationManager.sol:AttestationManager", + "label": "_domainSeparator", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 13236, + "contract": "contracts/utilities/AttestationManager.sol:AttestationManager", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } + } + }, + "contracts/utilities/AttestationManagerStorage.sol": { + "AttestationManagerV1Storage": { + "abi": [], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"},\"_domainSeparator\":{\"details\":\"EIP712 domain separator\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/AttestationManagerStorage.sol\":\"AttestationManagerV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"contracts/utilities/AttestationManagerStorage.sol\":{\"keccak256\":\"0xc14058d90b97806df0f43acfce6bc984c17ded00511ea9d7dd559d897fed7cf7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://df851043d7e2b5f0eaa611141cbc2b594c3ece4ba4e7f040215095d7bdef7ea0\",\"dweb:/ipfs/Qmf5PBxRP4dCtPonNdeoHrgmCYZDogzx4vMEsLM3h5JQDs\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 13231, + "contract": "contracts/utilities/AttestationManagerStorage.sol:AttestationManagerV1Storage", + "label": "_domainSeparator", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 13236, + "contract": "contracts/utilities/AttestationManagerStorage.sol:AttestationManagerV1Storage", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } + } + }, + "contracts/utilities/Directory.sol": { + "Directory": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "disputeManager", + "type": "address" + } + ], + "name": "DirectoryNotDisputeManager", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "subgraphService", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "disputeManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "tapCollector", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "curation", + "type": "address" + } + ], + "name": "SubgraphServiceDirectoryInitialized", + "type": "event" + } + ], + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"}],\"name\":\"DirectoryNotDisputeManager\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tapCollector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"curation\",\"type\":\"address\"}],\"name\":\"SubgraphServiceDirectoryInitialized\",\"type\":\"event\"}],\"devdoc\":{\"errors\":{\"DirectoryNotDisputeManager(address,address)\":[{\"params\":{\"caller\":\"The caller address\",\"disputeManager\":\"The Dispute Manager address\"}}]},\"events\":{\"SubgraphServiceDirectoryInitialized(address,address,address,address)\":{\"params\":{\"curation\":\"The Curation contract address\",\"disputeManager\":\"The Dispute Manager contract address\",\"subgraphService\":\"The Subgraph Service contract address\",\"tapCollector\":\"The TAP Collector contract address\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"curation\":\"The Curation contract address\",\"disputeManager\":\"The Dispute Manager contract address\",\"subgraphService\":\"The Subgraph Service contract address\",\"tapCollector\":\"The TAP Collector contract address\"}}},\"stateVariables\":{\"CURATION\":{\"details\":\"Required for curation fees distribution\"},\"TAP_COLLECTOR\":{\"details\":\"Required to collect payments via Graph Horizon payments protocol\"}},\"title\":\"Directory contract\",\"version\":1},\"userdoc\":{\"errors\":{\"DirectoryNotDisputeManager(address,address)\":[{\"notice\":\"Thrown when the caller is not the Dispute Manager\"}]},\"events\":{\"SubgraphServiceDirectoryInitialized(address,address,address,address)\":{\"notice\":\"Emitted when the Directory is initialized\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor for the Directory contract\"}},\"notice\":\"This contract is meant to be inherited by {SubgraphService} contract. It contains the addresses of the contracts that the contract interacts with. Uses immutable variables to minimize gas costs.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/Directory.sol\":\"Directory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":{\"keccak256\":\"0x86f3cfc8eaac309e99018dda796248fb44130b09c2e5bcfc6c63c0e568803bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://176a017cb5c677222ac6a82fecd798292f5f41b4dcb9e16768fbf87816381010\",\"dweb:/ipfs/QmNuLfA5nZptMzWPuvDzJnm7Pwt7uYn1A7G8fwTWPy5Ybm\"]},\"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\":{\"keccak256\":\"0xa5a882c413c68bfe914bad5e419c0340d7d6a6aef453894ea10b7b96458932bc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5dfc1a11d94b22db5a9262b7038c2fb9c69616f47a11507f59efcc5aa1dcf9b\",\"dweb:/ipfs/QmQ8ahkkfm8PXTuZc5Q8zX2RzXHoSi9btYc57KMvtCrLMU\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/Directory.sol\":{\"keccak256\":\"0xad65e3c6e8ddcb2855c9fbb689d538c3709bda1b7b08f665bc7a9e905e6a9ef4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ae2fbea52fc9b412dc333d74d0984a458da80cc98defdd86bc6a9f31633df56\",\"dweb:/ipfs/QmatwUHznJRo9wvA9ggG4UZVWprdUtAeBmx7T5vDU8vBx9\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + } + } + } + } + } +} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/deployed_addresses.json b/packages/subgraph-service/ignition/deployments/chain-421614/deployed_addresses.json new file mode 100644 index 000000000..b60c2e877 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/deployed_addresses.json @@ -0,0 +1,53 @@ +{ + "SubgraphServiceProxies#OZProxyDummy_DisputeManager": "0x925FC952A401483A2cF4b8fB780580a0051ecebA", + "SubgraphServiceProxies#OZProxyDummy_SubgraphService": "0x83D97ee6d5a6c34896024Df82B9aA162e8244046", + "SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager": "0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5", + "SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService": "0xBc53a58f03917A88174C2795B674734eCEeec05F", + "SubgraphServiceProxies#ProxyAdmin_DisputeManager": "0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e", + "SubgraphServiceProxies#ProxyAdmin_SubgraphService": "0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F", + "Controller#Controller": "0x59c3CA02528054C6337f63eb367a374Ac45C292C", + "Curation#Curation": "0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01", + "EpochManager#EpochManager": "0xFBb7D5597f4796225A957Fd56d368bfaD45F5036", + "HorizonProxies#OZProxyDummy_GraphPayments": "0x779934076396014b1395892C1a960CAd33548b7a", + "HorizonProxies#OZProxyDummy_PaymentsEscrow": "0x994e77A4673d74C3565B04EF572988B9c7f05778", + "RewardsManager#RewardsManager": "0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910", + "BridgeEscrow#BridgeEscrow": "0x5d767c408237E7cB90Ccc2332c1946115B5187D9", + "Curation#GraphCurationToken": "0x714fF20f04c77104eC4906E1059b5478e253daCb", + "GraphProxyAdmin#GraphProxyAdmin": "0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45", + "GraphToken#GraphToken": "0x1Aec39D141925B02bef1D1A30b80746356Dcc291", + "GraphTokenGateway#GraphTokenGateway": "0x2B8665A7E899ee5FA67460b5f296aE901016102C", + "HorizonStakingExtension#ExponentialRebates": "0xA966fedEE46EbfA9B2390986aa19fab5aE018e87", + "HorizonProxies#TransparentUpgradeableProxy_GraphPayments": "0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD", + "HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow": "0x7782536dac304b46E4Eb60751e4021ab3b09aBAb", + "Curation#GraphProxy": "0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C", + "BridgeEscrow#GraphProxy": "0x84a56624009F5CF297d52940dF268CdF8d2a09B4", + "EpochManager#GraphProxy": "0xCf27161EE08cA6087f9fF445a44474B89C10e554", + "GraphToken#GraphProxy": "0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8", + "GraphTokenGateway#GraphProxy": "0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3", + "RewardsManager#GraphProxy": "0x1C0f92202CFc66B160972D54c513A7354F507Bf8", + "BridgeEscrow#BridgeEscrow_Instance": "0x84a56624009F5CF297d52940dF268CdF8d2a09B4", + "Curation#Curation_Instance": "0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C", + "EpochManager#EpochManager_Instance": "0xCf27161EE08cA6087f9fF445a44474B89C10e554", + "GraphToken#GraphToken_Instance": "0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8", + "GraphTokenGateway#GraphTokenGateway_Instance": "0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3", + "HorizonProxies#ProxyAdmin_GraphPayments": "0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9", + "HorizonProxies#ProxyAdmin_PaymentsEscrow": "0xB3eD0202b929Cef59B0e2668a68F06FE996e8419", + "RewardsManager#RewardsManager_Instance": "0x1C0f92202CFc66B160972D54c513A7354F507Bf8", + "GraphHorizon_Periphery#Dummy": "0x923a8027EF79AaCC9B4eBC22a548F7c755153F6a", + "HorizonProxies#GraphProxy_HorizonStaking": "0xdabc7419aba5A47d368d008f42bb66c7D5801740", + "HorizonProxies#RegisteredDummy": "0x5560e7816fb9198A07d1432559cD67fd304C5046", + "GraphPayments#GraphPayments_Instance": "0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD", + "PaymentsEscrow#PaymentsEscrow": "0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6", + "PaymentsEscrow#PaymentsEscrow_Instance": "0x7782536dac304b46E4Eb60751e4021ab3b09aBAb", + "GraphPayments#GraphPayments": "0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42", + "HorizonStakingExtension#HorizonStakingExtension": "0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c", + "TAPCollector#TAPCollector": "0x84149af521E4C32dDCCb7e9F1F63a187A964396c", + "HorizonStaking#HorizonStaking": "0x5DF9C2eFB1206d11C50Ad130446364c88934a17E", + "HorizonStaking#HorizonStaking_Instance": "0xdabc7419aba5A47d368d008f42bb66c7D5801740", + "DisputeManager#DisputeManager_Instance": "0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5", + "DisputeManager#ProxyAdmin": "0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e", + "DisputeManager#DisputeManager": "0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1", + "SubgraphService#ProxyAdmin": "0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F", + "SubgraphService#SubgraphService": "0x2268247782f4b7AdB2DA810EFD6e43B27a37af54", + "SubgraphService#SubgraphService_Instance": "0xBc53a58f03917A88174C2795B674734eCEeec05F" +} diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/journal.jsonl b/packages/subgraph-service/ignition/deployments/chain-421614/journal.jsonl new file mode 100644 index 000000000..fb2cb3378 --- /dev/null +++ b/packages/subgraph-service/ignition/deployments/chain-421614/journal.jsonl @@ -0,0 +1,378 @@ + +{"chainId":421614,"type":"DEPLOYMENT_INITIALIZE"} +{"artifactId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","networkInteractionId":1,"nonce":665,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x4675097edd717a34579e7a17b1832587974a058b3b703cebca8e350958190bb4"},"type":"TRANSACTION_SEND"} +{"artifactId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","networkInteractionId":1,"nonce":666,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x96a30c734828666fe0ab2556250b99d884c38c86cf1007c849cd408d36795347"},"type":"TRANSACTION_SEND"} +{"futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","hash":"0x4675097edd717a34579e7a17b1832587974a058b3b703cebca8e350958190bb4","networkInteractionId":1,"receipt":{"blockHash":"0x4a2b220fb8234e254bbddbccade1775c7efeccc0343e340b28ae0dee26329a36","blockNumber":97665248,"contractAddress":"0x925FC952A401483A2cF4b8fB780580a0051ecebA","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","result":{"address":"0x925FC952A401483A2cF4b8fB780580a0051ecebA","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","hash":"0x96a30c734828666fe0ab2556250b99d884c38c86cf1007c849cd408d36795347","networkInteractionId":1,"receipt":{"blockHash":"0x6919345e241f960bb1d8777296c1b85fcd156f2f160160755a7d740afa5577e8","blockNumber":97665258,"contractAddress":"0x83D97ee6d5a6c34896024Df82B9aA162e8244046","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","result":{"address":"0x83D97ee6d5a6c34896024Df82B9aA162e8244046","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","constructorArgs":["0x925FC952A401483A2cF4b8fB780580a0051ecebA","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["SubgraphServiceProxies#OZProxyDummy_DisputeManager"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000925fc952a401483a2cf4b8fb780580a0051eceba000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","networkInteractionId":1,"nonce":667,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf14fa3f80378f25cbfde869983319264993e93b8c9db2ba6709e136c748b247f"},"type":"TRANSACTION_SEND"} +{"artifactId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","constructorArgs":["0x83D97ee6d5a6c34896024Df82B9aA162e8244046","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["SubgraphServiceProxies#OZProxyDummy_SubgraphService"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000083d97ee6d5a6c34896024df82b9aa162e8244046000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","networkInteractionId":1,"nonce":668,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc03d8961808eb43cf32ee42f131ed5d34eb6fbc45802434c9584cbc415691dfe"},"type":"TRANSACTION_SEND"} +{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","hash":"0xf14fa3f80378f25cbfde869983319264993e93b8c9db2ba6709e136c748b247f","networkInteractionId":1,"receipt":{"blockHash":"0xc0cbb8134a0eaf79fa62a878944fb146338512843ed9784f176f9bbcfb8a6f76","blockNumber":97665278,"contractAddress":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","logs":[{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000925fc952a401483a2cf4b8fb780580a0051eceba"]},{"address":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e002de2c9c6b7aebd9e275c1234b68b917a2b13e","logIndex":2,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","result":{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","hash":"0xc03d8961808eb43cf32ee42f131ed5d34eb6fbc45802434c9584cbc415691dfe","networkInteractionId":1,"receipt":{"blockHash":"0xaea8a176a9c6003e36d95860d9528b320df9c6ec26c5df74ca4ad4860bbf589c","blockNumber":97665289,"contractAddress":"0xBc53a58f03917A88174C2795B674734eCEeec05F","logs":[{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x00000000000000000000000083d97ee6d5a6c34896024df82b9aa162e8244046"]},{"address":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f1c68dd0c1cb5bd75c431f94c8734a5067a0b2f","logIndex":2,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","result":{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","dependencies":["SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager"],"emitterAddress":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","eventIndex":0,"eventName":"AdminChanged","futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager_AdminChanged","nameOrIndex":"newAdmin","result":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","strategy":"basic","strategyConfig":{},"txToReadFrom":"0xf14fa3f80378f25cbfde869983319264993e93b8c9db2ba6709e136c748b247f","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","dependencies":["SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService"],"emitterAddress":"0xBc53a58f03917A88174C2795B674734eCEeec05F","eventIndex":0,"eventName":"AdminChanged","futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService_AdminChanged","nameOrIndex":"newAdmin","result":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","strategy":"basic","strategyConfig":{},"txToReadFrom":"0xc03d8961808eb43cf32ee42f131ed5d34eb6fbc45802434c9584cbc415691dfe","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"SubgraphServiceProxies#ProxyAdmin_DisputeManager","contractAddress":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","contractName":"ProxyAdmin","dependencies":["SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager_AdminChanged"],"futureId":"SubgraphServiceProxies#ProxyAdmin_DisputeManager","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"SubgraphServiceProxies#ProxyAdmin_SubgraphService","contractAddress":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","contractName":"ProxyAdmin","dependencies":["SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService_AdminChanged"],"futureId":"SubgraphServiceProxies#ProxyAdmin_SubgraphService","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"BridgeEscrow#BridgeEscrow","constructorArgs":[],"contractName":"BridgeEscrow","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"BridgeEscrow#BridgeEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"BridgeEscrow#BridgeEscrow","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"BridgeEscrow#BridgeEscrow","networkInteractionId":1,"nonce":669,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x1bbf7d97fb0863b9aef2b2f540ae3e7e83d4c117c61a6e7d11ebeb5f30bc9808"},"type":"TRANSACTION_SEND"} +{"artifactId":"Controller#Controller","constructorArgs":[],"contractName":"Controller","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Controller#Controller","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506100243361003360201b6109b21760201c565b61002e6001610055565b6100e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff1615158115151415610075576100e4565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff910416156100a157426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a15b50565b610ba0806100f66000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80635c975abb116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80635c975abb146101e057806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b80632e292fc7116100de5780632e292fc71461017757806348bde20c146101935780634fc07d75146101b957806356371bd8146101c15761010b565b80630c340a2414610110578063147ddef51461013457806316c38b3c1461014e57806324a3d6221461016f575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b61013c6102c7565b60408051918252519081900360200190f35b61016d6004803603602081101561016457600080fd5b503515156102cd565b005b610118610337565b61017f610346565b604080519115158252519081900360200190f35b61016d600480360360208110156101a957600080fd5b50356001600160a01b0316610356565b610118610412565b61016d600480360360208110156101d757600080fd5b50351515610421565b61017f610488565b61016d610498565b61016d6004803603602081101561020657600080fd5b50356105a6565b61013c610651565b61016d6004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b61016d6004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b61016d6004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b60025481565b6000546001600160a01b03163314806102f057506004546001600160a01b031633145b61032b5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b610334816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103ae576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610409576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61033481610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061044457506004546001600160a01b031633145b61047f5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61033481610ab7565b600154600160a81b900460ff1690565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f457610334565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad757610334565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca26469706673582212207cecec10a8617577e80b5c52f6cd82da5e5974468c039848ed5e90b25c8267c764736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller","networkInteractionId":1,"nonce":670,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x3ae0392f2cb0de80d200c4f33896e45cbaa7e0fc41fb1ea83fae29f9bb2a9e4d"},"type":"TRANSACTION_SEND"} +{"futureId":"Controller#Controller","hash":"0x3ae0392f2cb0de80d200c4f33896e45cbaa7e0fc41fb1ea83fae29f9bb2a9e4d","networkInteractionId":1,"receipt":{"blockHash":"0xfdb6493b02bdf6d735dc4c3f5c2e204731560c94f31476eb99239421d1ff86be","blockNumber":97665326,"contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":1,"topics":["0x8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller","result":{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"Curation#Curation","constructorArgs":[],"contractName":"Curation","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Curation#Curation","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#Curation","networkInteraction":{"data":"0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#Curation","networkInteractionId":1,"nonce":671,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x81b10a161cce12b09a56d7e949a6c31fe83db9020d8a23a4c118b0a58337a712"},"type":"TRANSACTION_SEND"} +{"futureId":"Curation#Curation","hash":"0x81b10a161cce12b09a56d7e949a6c31fe83db9020d8a23a4c118b0a58337a712","networkInteractionId":1,"receipt":{"blockHash":"0x2d398c8a9683bf19552720ad47d591082ffd2a31cd2567211729dc171f2edf0e","blockNumber":97665339,"contractAddress":"0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#Curation","result":{"address":"0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"Curation#GraphCurationToken","constructorArgs":[],"contractName":"GraphCurationToken","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Curation#GraphCurationToken","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#GraphCurationToken","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506114ec806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#GraphCurationToken","networkInteractionId":1,"nonce":672,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x9d3f08284859c2c3f523c7c7bf48aaecadb5aa4e9cbc6f4abb001c48db908ba3"},"type":"TRANSACTION_SEND"} +{"artifactId":"EpochManager#EpochManager","constructorArgs":[],"contractName":"EpochManager","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"EpochManager#EpochManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"EpochManager#EpochManager","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"EpochManager#EpochManager","networkInteractionId":1,"nonce":673,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x2926b3a82c5526008763763ba1fc2e6f4a0b058e2aa2e3600aff63f2678d358c"},"type":"TRANSACTION_SEND"} +{"futureId":"EpochManager#EpochManager","hash":"0x2926b3a82c5526008763763ba1fc2e6f4a0b058e2aa2e3600aff63f2678d358c","networkInteractionId":1,"receipt":{"blockHash":"0xf9a1d638963db590068461eb5be0fb291361be215852bb0b94745c5fdb41e7c6","blockNumber":97665362,"contractAddress":"0xFBb7D5597f4796225A957Fd56d368bfaD45F5036","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"EpochManager#EpochManager","result":{"address":"0xFBb7D5597f4796225A957Fd56d368bfaD45F5036","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphProxyAdmin#GraphProxyAdmin","constructorArgs":[],"contractName":"GraphProxyAdmin","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphProxyAdmin#GraphProxyAdmin","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506100243361002960201b610a0c1760201c565b61004b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610a648061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","networkInteractionId":1,"nonce":674,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x51c1db4798ea9bbacc08f180d8fe1481f583c397a2fe8797dc8b0ba99160a84c"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphToken#GraphToken","constructorArgs":[],"contractName":"GraphToken","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphToken#GraphToken","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken","networkInteraction":{"data":"0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken","networkInteractionId":1,"nonce":675,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x2b8f1636bdf24dfc8e48fb4795aecee9bfa5a35b190eaec2a4089d8d1de628b5"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphTokenGateway#GraphTokenGateway","constructorArgs":[],"contractName":"GraphTokenGateway","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphTokenGateway#GraphTokenGateway","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphTokenGateway","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphTokenGateway","networkInteractionId":1,"nonce":676,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0fc1922bf5f636404f8b6393b0e75d933c57b0bcc5fe452fbba6817f91d6260d"},"type":"TRANSACTION_SEND"} +{"artifactId":"HorizonProxies#OZProxyDummy_GraphPayments","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#OZProxyDummy_GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","networkInteractionId":1,"nonce":677,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xfcdb517c739e39c4079965c00f6436d4312e91b3fecd1490909a5ecea4c70d01"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","hash":"0xfcdb517c739e39c4079965c00f6436d4312e91b3fecd1490909a5ecea4c70d01","networkInteractionId":1,"receipt":{"blockHash":"0xb12d820bd14f60e40fe0687503a62fb2445b877e197efd27ded703562a56344b","blockNumber":97665397,"contractAddress":"0x779934076396014b1395892C1a960CAd33548b7a","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","result":{"address":"0x779934076396014b1395892C1a960CAd33548b7a","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","networkInteractionId":1,"nonce":678,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xac4ce8d1fdf1317d7ada6e6e1ab22cdba08db0b6199dacac72a66fa47576df99"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","hash":"0xac4ce8d1fdf1317d7ada6e6e1ab22cdba08db0b6199dacac72a66fa47576df99","networkInteractionId":1,"receipt":{"blockHash":"0x06e529349e456be3fd4977463460264899500ddc270d61d0f75ea95432738494","blockNumber":97665408,"contractAddress":"0x994e77A4673d74C3565B04EF572988B9c7f05778","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","result":{"address":"0x994e77A4673d74C3565B04EF572988B9c7f05778","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonStakingExtension#ExponentialRebates","constructorArgs":[],"contractName":"ExponentialRebates","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonStakingExtension#ExponentialRebates","futureType":"LIBRARY_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStakingExtension#ExponentialRebates","networkInteraction":{"data":"0x610c2d610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStakingExtension#ExponentialRebates","networkInteractionId":1,"nonce":679,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x969a0e54409dc477218979e106b24123cd23518677aa9110137f1efa405a0861"},"type":"TRANSACTION_SEND"} +{"artifactId":"RewardsManager#RewardsManager","constructorArgs":[],"contractName":"RewardsManager","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"RewardsManager#RewardsManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager","networkInteractionId":1,"nonce":680,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xafb2066742ff060dc628cddb4a4569d5c0c7100adf4d0504ab7caa0f8f89e22e"},"type":"TRANSACTION_SEND"} +{"futureId":"RewardsManager#RewardsManager","hash":"0xafb2066742ff060dc628cddb4a4569d5c0c7100adf4d0504ab7caa0f8f89e22e","networkInteractionId":1,"receipt":{"blockHash":"0x3ff820234575a56aec75a6ef0860b67d046fc20210d0e40b9900aa55f0388b35","blockNumber":97665430,"contractAddress":"0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager","result":{"address":"0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"BridgeEscrow#BridgeEscrow","hash":"0x1bbf7d97fb0863b9aef2b2f540ae3e7e83d4c117c61a6e7d11ebeb5f30bc9808","networkInteractionId":1,"receipt":{"blockHash":"0x5660e99330c8f3710625877945f6ee948c1dd2a5cf56a37cba01009e54337487","blockNumber":97665313,"contractAddress":"0x5d767c408237E7cB90Ccc2332c1946115B5187D9","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"BridgeEscrow#BridgeEscrow","result":{"address":"0x5d767c408237E7cB90Ccc2332c1946115B5187D9","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"Curation#GraphCurationToken","hash":"0x9d3f08284859c2c3f523c7c7bf48aaecadb5aa4e9cbc6f4abb001c48db908ba3","networkInteractionId":1,"receipt":{"blockHash":"0x9d2a8e9af62f35e5d085e57a42f54ef105bf4e45a533c4fa94295389c9456973","blockNumber":97665351,"contractAddress":"0x714fF20f04c77104eC4906E1059b5478e253daCb","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#GraphCurationToken","result":{"address":"0x714fF20f04c77104eC4906E1059b5478e253daCb","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","hash":"0x51c1db4798ea9bbacc08f180d8fe1481f583c397a2fe8797dc8b0ba99160a84c","networkInteractionId":1,"receipt":{"blockHash":"0xd1e9bec4928c03556ef842c03adfc5d1075277933cdbb24aa9bc34d44f441d7e","blockNumber":97665371,"contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin","result":{"address":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphToken","hash":"0x2b8f1636bdf24dfc8e48fb4795aecee9bfa5a35b190eaec2a4089d8d1de628b5","networkInteractionId":1,"receipt":{"blockHash":"0x401d9cec1b4f846b2e6108d38765b2bdeb961996ab3f955762375a1d74173ede","blockNumber":97665380,"contractAddress":"0x1Aec39D141925B02bef1D1A30b80746356Dcc291","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken","result":{"address":"0x1Aec39D141925B02bef1D1A30b80746356Dcc291","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphTokenGateway#GraphTokenGateway","hash":"0x0fc1922bf5f636404f8b6393b0e75d933c57b0bcc5fe452fbba6817f91d6260d","networkInteractionId":1,"receipt":{"blockHash":"0xf14fb7817fc975fbda57fc768cc0e75340addcfa1a2d8076c43377cb08ab1508","blockNumber":97665386,"contractAddress":"0x2B8665A7E899ee5FA67460b5f296aE901016102C","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphTokenGateway","result":{"address":"0x2B8665A7E899ee5FA67460b5f296aE901016102C","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonStakingExtension#ExponentialRebates","hash":"0x969a0e54409dc477218979e106b24123cd23518677aa9110137f1efa405a0861","networkInteractionId":1,"receipt":{"blockHash":"0x5f065e626164a4774e35e3b4a350556b1f670ae10fb9bc88a58fadfe937cddb5","blockNumber":97665419,"contractAddress":"0xA966fedEE46EbfA9B2390986aa19fab5aE018e87","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStakingExtension#ExponentialRebates","result":{"address":"0xA966fedEE46EbfA9B2390986aa19fab5aE018e87","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setPauseGuardian","futureId":"Controller#Controller.setPauseGuardian","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller.setPauseGuardian","networkInteraction":{"data":"0x48bde20c00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller.setPauseGuardian","networkInteractionId":1,"nonce":681,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc1e3e53b36d3f52ec7ee4d5ef22a789b4e36090f7e465a9ed5c2eda7af7177cf"},"type":"TRANSACTION_SEND"} +{"args":[false],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setPaused","futureId":"Controller#Controller.setPaused","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller.setPaused","networkInteraction":{"data":"0x16c38b3c0000000000000000000000000000000000000000000000000000000000000000","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller.setPaused","networkInteractionId":1,"nonce":682,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x07d8805a6dedb6623d3ec001452ad5be3ddbeca3b9678f1604f2660581cdd2fe"},"type":"TRANSACTION_SEND"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"transferOwnership","futureId":"Controller#Controller.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Controller#Controller.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Controller#Controller.transferOwnership","networkInteractionId":1,"nonce":683,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x7a95eec4f6b7ede10e32e8c42a134cf59906e8dd2335b07d048952df3f131005"},"type":"TRANSACTION_SEND"} +{"futureId":"Controller#Controller.transferOwnership","hash":"0x7a95eec4f6b7ede10e32e8c42a134cf59906e8dd2335b07d048952df3f131005","networkInteractionId":1,"receipt":{"blockHash":"0x5d7c5fccd1a19b720b0df7711fb83227cf2e34f85e99699756cf1b34a77f29ee","blockNumber":97665469,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x","logIndex":0,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"transferOwnership","futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","networkInteractionId":1,"nonce":684,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xa39935fc6723e299fce4354a88e1e3922a1fabd99bf53ff13999c3e5403db8df"},"type":"TRANSACTION_SEND"} +{"args":["0xade6b8eb69a49b56929c1d4f4b428d791861db6f"],"artifactId":"GraphToken#GraphToken","dependencies":["GraphToken#GraphToken"],"functionName":"initialize","futureId":"GraphToken#encodeFunctionCall(GraphToken#GraphToken.initialize)","result":"0xc4d66de8000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","constructorArgs":["0x779934076396014b1395892C1a960CAd33548b7a","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["HorizonProxies#OZProxyDummy_GraphPayments"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000779934076396014b1395892c1a960cad33548b7a000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","networkInteractionId":1,"nonce":685,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x22c2f026d84fa8f556a76a1ca64fb666ef8d57dba2d981315f1f8e8b49ce9fe2"},"type":"TRANSACTION_SEND"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","constructorArgs":["0x994e77A4673d74C3565B04EF572988B9c7f05778","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["HorizonProxies#OZProxyDummy_PaymentsEscrow"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000994e77a4673d74c3565b04ef572988b9c7f05778000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","networkInteractionId":1,"nonce":686,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x473c72596e7af8e037dde45ed6a6ead298a338cf49fdc75027fd2e929d007536"},"type":"TRANSACTION_SEND"} +{"futureId":"Controller#Controller.setPauseGuardian","hash":"0xc1e3e53b36d3f52ec7ee4d5ef22a789b4e36090f7e465a9ed5c2eda7af7177cf","networkInteractionId":1,"receipt":{"blockHash":"0x48723ea331f82b6d0b447714b6ca92e767ea4b8f1452551480c7fb3ae40c4987","blockNumber":97665450,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x","logIndex":0,"topics":["0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller.setPauseGuardian","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"Controller#Controller.setPaused","hash":"0x07d8805a6dedb6623d3ec001452ad5be3ddbeca3b9678f1604f2660581cdd2fe","networkInteractionId":1,"receipt":{"blockHash":"0x165250e298b540500cfadb6762796d6a395763c9ab85f94fd489d04a41c0cdc5","blockNumber":97665460,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000000000000000000000000000000000000000000000","logIndex":0,"topics":["0x8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Controller#Controller.setPaused","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","hash":"0xa39935fc6723e299fce4354a88e1e3922a1fabd99bf53ff13999c3e5403db8df","networkInteractionId":1,"receipt":{"blockHash":"0x38afc17b17d4657031a750edbdfc0aad9cbad52c6469b24b71b8c47a1b9d6d1c","blockNumber":97665481,"logs":[{"address":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","data":"0x","logIndex":0,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","hash":"0x22c2f026d84fa8f556a76a1ca64fb666ef8d57dba2d981315f1f8e8b49ce9fe2","networkInteractionId":1,"receipt":{"blockHash":"0xa0c01ec9868c6f5ee3e020ccd3da0845543b063d05bebf0047b202e22c74f3b0","blockNumber":97665492,"contractAddress":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","logs":[{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000779934076396014b1395892c1a960cad33548b7a"]},{"address":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191308fb34b4d18487bc323ffe5ef7b2dd2449e9","logIndex":2,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","result":{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","hash":"0x473c72596e7af8e037dde45ed6a6ead298a338cf49fdc75027fd2e929d007536","networkInteractionId":1,"receipt":{"blockHash":"0x9334d8bbeebd5de8e23d553aad2af7b610b072c6088f40ff465c8c5147f132d4","blockNumber":97665503,"contractAddress":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","logs":[{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000994e77a4673d74c3565b04ef572988b9c7f05778"]},{"address":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3ed0202b929cef59b0e2668a68f06fe996e8419","logIndex":2,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","result":{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"BridgeEscrow#GraphProxy","constructorArgs":["0x5d767c408237E7cB90Ccc2332c1946115B5187D9","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["BridgeEscrow#BridgeEscrow","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"BridgeEscrow#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"BridgeEscrow#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d9000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"BridgeEscrow#GraphProxy","networkInteractionId":1,"nonce":687,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x60dce7ab15dc797a01f9ffc9eb9527723a751cf220acb7f25a428c8f7638363b"},"type":"TRANSACTION_SEND"} +{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C"],"artifactId":"BridgeEscrow#BridgeEscrow","dependencies":["BridgeEscrow#BridgeEscrow","Controller#Controller"],"functionName":"initialize","futureId":"BridgeEscrow#encodeFunctionCall(BridgeEscrow#BridgeEscrow.initialize)","result":"0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"Curation#GraphProxy","constructorArgs":["0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["Curation#Curation","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Curation#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#GraphProxy","networkInteractionId":1,"nonce":688,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x924776e6178848f13272c7e946a39d7a2548414e146e996b296fc3c0fca966a0"},"type":"TRANSACTION_SEND"} +{"futureId":"Curation#GraphProxy","hash":"0x924776e6178848f13272c7e946a39d7a2548414e146e996b296fc3c0fca966a0","networkInteractionId":1,"receipt":{"blockHash":"0x388c38d5f31e0103734819548e93d947bfb284c950838ecc719482b6012d1068","blockNumber":97665536,"contractAddress":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","logs":[{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#GraphProxy","result":{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C","0x714fF20f04c77104eC4906E1059b5478e253daCb",10000,1],"artifactId":"Curation#Curation","dependencies":["Curation#Curation","Controller#Controller","Curation#GraphCurationToken"],"functionName":"initialize","futureId":"Curation#encodeFunctionCall(Curation#Curation.initialize)","result":"0x4c8c7a4400000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000714ff20f04c77104ec4906e1059b5478e253dacb00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"EpochManager#GraphProxy","constructorArgs":["0xFBb7D5597f4796225A957Fd56d368bfaD45F5036","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["EpochManager#EpochManager","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"EpochManager#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"EpochManager#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"EpochManager#GraphProxy","networkInteractionId":1,"nonce":689,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xfdd12ca58013199c013c5f92eb97e0850ba695a95d902aaeae856eb22291b3fd"},"type":"TRANSACTION_SEND"} +{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C",60],"artifactId":"EpochManager#EpochManager","dependencies":["EpochManager#EpochManager","Controller#Controller"],"functionName":"initialize","futureId":"EpochManager#encodeFunctionCall(EpochManager#EpochManager.initialize)","result":"0xcd6dc68700000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000000000000000000000000000000000000000003c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"args":["0xed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","networkInteraction":{"data":"0xe0e99292ed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","networkInteractionId":1,"nonce":690,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xe07e5ca7dd1af20c4b2e6f7cded02e75c524291f98b88baa494d3d2c729304f4"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","hash":"0xe07e5ca7dd1af20c4b2e6f7cded02e75c524291f98b88baa494d3d2c729304f4","networkInteractionId":1,"receipt":{"blockHash":"0x968194c0edb5536cc8f3cbb665074e200d61534e9c3f88d858d522754ae14446","blockNumber":97665554,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphToken#GraphProxy","constructorArgs":["0x1Aec39D141925B02bef1D1A30b80746356Dcc291","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["GraphToken#GraphToken","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphToken#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphProxy","networkInteractionId":1,"nonce":691,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x70b289c37eb6693d9a73f0445da8fc869c83915982938e9b667d4c41c89fee4a"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphTokenGateway#GraphProxy","constructorArgs":["0x2B8665A7E899ee5FA67460b5f296aE901016102C","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["GraphTokenGateway#GraphTokenGateway","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphTokenGateway#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphProxy","networkInteractionId":1,"nonce":692,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x06b7de86ba4ddf10d8a8cd98075a3bfc0ec485344eba637a1d234b9cf1a05cd9"},"type":"TRANSACTION_SEND"} +{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C"],"artifactId":"GraphTokenGateway#GraphTokenGateway","dependencies":["GraphTokenGateway#GraphTokenGateway","Controller#Controller"],"functionName":"initialize","futureId":"GraphTokenGateway#encodeFunctionCall(GraphTokenGateway#GraphTokenGateway.initialize)","result":"0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"emitterAddress":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","eventIndex":0,"eventName":"AdminChanged","futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments_AdminChanged","nameOrIndex":"newAdmin","result":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","strategy":"basic","strategyConfig":{},"txToReadFrom":"0x22c2f026d84fa8f556a76a1ca64fb666ef8d57dba2d981315f1f8e8b49ce9fe2","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"emitterAddress":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","eventIndex":0,"eventName":"AdminChanged","futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow_AdminChanged","nameOrIndex":"newAdmin","result":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","strategy":"basic","strategyConfig":{},"txToReadFrom":"0x473c72596e7af8e037dde45ed6a6ead298a338cf49fdc75027fd2e929d007536","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f","0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_GraphPayments","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","networkInteraction":{"data":"0xe0e9929288cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","networkInteractionId":1,"nonce":693,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x6cdb2ccb86dc13e8bf62f777a3a179c68e2a0de8cbf5b3236b53889e577a51b3"},"type":"TRANSACTION_SEND"} +{"args":["0x628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9","0x7782536dac304b46E4Eb60751e4021ab3b09aBAb"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","networkInteraction":{"data":"0xe0e99292628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc90000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","networkInteractionId":1,"nonce":694,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0f3a19a01b271c679106cbff57b610477915fe28b73c03aeef274e8f636bf3f0"},"type":"TRANSACTION_SEND"} +{"artifactId":"RewardsManager#GraphProxy","constructorArgs":["0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["RewardsManager#RewardsManager","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"RewardsManager#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c6910000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#GraphProxy","networkInteractionId":1,"nonce":695,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc6846ec161cba19b22d0e81e114898aa3cf0adcaec174df04be56e64b7949f60"},"type":"TRANSACTION_SEND"} +{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C"],"artifactId":"RewardsManager#RewardsManager","dependencies":["RewardsManager#RewardsManager","Controller#Controller"],"functionName":"initialize","futureId":"RewardsManager#encodeFunctionCall(RewardsManager#RewardsManager.initialize)","result":"0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"futureId":"BridgeEscrow#GraphProxy","hash":"0x60dce7ab15dc797a01f9ffc9eb9527723a751cf220acb7f25a428c8f7638363b","networkInteractionId":1,"receipt":{"blockHash":"0x9b842c515603de7f7f457a03af8b04a2459b9687855da4727747940918687f9c","blockNumber":97665524,"contractAddress":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","logs":[{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d9"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"BridgeEscrow#GraphProxy","result":{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"EpochManager#GraphProxy","hash":"0xfdd12ca58013199c013c5f92eb97e0850ba695a95d902aaeae856eb22291b3fd","networkInteractionId":1,"receipt":{"blockHash":"0xb01af1cf3880fa8e0c54271b98763e40743eb573416ac6622204f33911603899","blockNumber":97665547,"contractAddress":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","logs":[{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"EpochManager#GraphProxy","result":{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphProxy","hash":"0x70b289c37eb6693d9a73f0445da8fc869c83915982938e9b667d4c41c89fee4a","networkInteractionId":1,"receipt":{"blockHash":"0x88c7e6929f56d87b2f7bfca3bc40804e0c5e4d895704dbc2e7f9b2ce28a24c24","blockNumber":97665567,"contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphProxy","result":{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphTokenGateway#GraphProxy","hash":"0x06b7de86ba4ddf10d8a8cd98075a3bfc0ec485344eba637a1d234b9cf1a05cd9","networkInteractionId":1,"receipt":{"blockHash":"0x959891b8d848f75409e643c61047d8b118efc0780f1e68b6e4add090741f6052","blockNumber":97665579,"contractAddress":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","logs":[{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphProxy","result":{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","hash":"0x6cdb2ccb86dc13e8bf62f777a3a179c68e2a0de8cbf5b3236b53889e577a51b3","networkInteractionId":1,"receipt":{"blockHash":"0xc7ffb73af2f28fb0861ff6820932207fb73c02dd83a29ffee03f6417a59cf202","blockNumber":97665588,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#setContractProxy_GraphPayments","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","hash":"0x0f3a19a01b271c679106cbff57b610477915fe28b73c03aeef274e8f636bf3f0","networkInteractionId":1,"receipt":{"blockHash":"0x19f8cc56b079e3c4eeeec1a1a5665253db6192949f90314c181731109fd1211d","blockNumber":97665599,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#GraphProxy","hash":"0xc6846ec161cba19b22d0e81e114898aa3cf0adcaec174df04be56e64b7949f60","networkInteractionId":1,"receipt":{"blockHash":"0x2f4cc496a64e0718889d3c43a2fc13057b2639cc7f904a5666ad76de18e241bb","blockNumber":97665610,"contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c6910"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#GraphProxy","result":{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"BridgeEscrow#BridgeEscrow_Instance","contractAddress":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","contractName":"BridgeEscrow_Instance","dependencies":["BridgeEscrow#GraphProxy"],"futureId":"BridgeEscrow#BridgeEscrow_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x5d767c408237E7cB90Ccc2332c1946115B5187D9","0x84a56624009F5CF297d52940dF268CdF8d2a09B4","0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","BridgeEscrow#BridgeEscrow","BridgeEscrow#GraphProxy","BridgeEscrow#encodeFunctionCall(BridgeEscrow#BridgeEscrow.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d900000000000000000000000084a56624009f5cf297d52940df268cdf8d2a09b400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":696,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xd3c18abd2c454e57149a2c30030f0cd37318e5ba162544f038ecded5e4501b75"},"type":"TRANSACTION_SEND"} +{"artifactId":"Curation#Curation_Instance","contractAddress":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","contractName":"Curation_Instance","dependencies":["Curation#GraphProxy"],"futureId":"Curation#Curation_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01","0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","0x4c8c7a4400000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000714ff20f04c77104ec4906e1059b5478e253dacb00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","Curation#Curation","Curation#GraphProxy","Curation#encodeFunctionCall(Curation#Curation.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000844c8c7a4400000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000714ff20f04c77104ec4906e1059b5478e253dacb0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":697,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0252212bb4f86eb8e8d52c7b891b4d256de169ebaee1f68960f33cb41cba430f"},"type":"TRANSACTION_SEND"} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x0252212bb4f86eb8e8d52c7b891b4d256de169ebaee1f68960f33cb41cba430f","networkInteractionId":1,"receipt":{"blockHash":"0x971268dad5646dc8025dc908a806ad71f0b781d5aa01d7d4a54d35bbf4444d61","blockNumber":97665650,"logs":[{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001364656661756c7452657365727665526174696f00000000000000000000000000","logIndex":3,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000156375726174696f6e54617850657263656e746167650000000000000000000000","logIndex":4,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000166d696e696d756d4375726174696f6e4465706f73697400000000000000000000","logIndex":5,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000136375726174696f6e546f6b656e4d617374657200000000000000000000000000","logIndex":6,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"EpochManager#EpochManager_Instance","contractAddress":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","contractName":"EpochManager_Instance","dependencies":["EpochManager#GraphProxy"],"futureId":"EpochManager#EpochManager_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0xFBb7D5597f4796225A957Fd56d368bfaD45F5036","0xCf27161EE08cA6087f9fF445a44474B89C10e554","0xcd6dc68700000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000000000000000000000000000000000000000003c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","EpochManager#EpochManager","EpochManager#GraphProxy","EpochManager#encodeFunctionCall(EpochManager#EpochManager.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e55400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044cd6dc68700000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":698,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x4356c858d052a126039f5d902f92ba05824a22619181a519325a4588023ae688"},"type":"TRANSACTION_SEND"} +{"args":["0x1Aec39D141925B02bef1D1A30b80746356Dcc291","0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","0xc4d66de8000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphToken#GraphToken","GraphToken#GraphProxy","GraphToken#encodeFunctionCall(GraphToken#GraphToken.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":699,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc9290f621aac5ac566934e36b825b1208998eff556f5f27e84297907fc839764"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","contractName":"GraphToken_Instance","dependencies":["GraphToken#GraphProxy"],"futureId":"GraphToken#GraphToken_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x2B8665A7E899ee5FA67460b5f296aE901016102C","0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphTokenGateway#GraphTokenGateway","GraphTokenGateway#GraphProxy","GraphTokenGateway#encodeFunctionCall(GraphTokenGateway#GraphTokenGateway.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c0000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":700,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x18011b47c9be25a02c12f60a24ad53e1f7712c9c4884593d47d98faf5157877f"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x18011b47c9be25a02c12f60a24ad53e1f7712c9c4884593d47d98faf5157877f","networkInteractionId":1,"receipt":{"blockHash":"0xea9baf497a6be895fa392c4c072bb6b35afee6fe2c7dd01774eed506d58bdf58","blockNumber":97665682,"logs":[{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c"]},{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphTokenGateway#GraphTokenGateway_Instance","contractAddress":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","contractName":"GraphTokenGateway_Instance","dependencies":["GraphTokenGateway#GraphProxy"],"futureId":"GraphTokenGateway#GraphTokenGateway_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#ProxyAdmin_GraphPayments","contractAddress":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","contractName":"ProxyAdmin","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments_AdminChanged"],"futureId":"HorizonProxies#ProxyAdmin_GraphPayments","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","contractAddress":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","contractName":"ProxyAdmin","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow_AdminChanged"],"futureId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910","0x1C0f92202CFc66B160972D54c513A7354F507Bf8","0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","RewardsManager#RewardsManager","RewardsManager#GraphProxy","RewardsManager#encodeFunctionCall(RewardsManager#RewardsManager.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c69100000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":701,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xd68b760941f96b73f668536d2b225cd3295bb971a5ed6b40baa30fb84f481597"},"type":"TRANSACTION_SEND"} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xd68b760941f96b73f668536d2b225cd3295bb971a5ed6b40baa30fb84f481597","networkInteractionId":1,"receipt":{"blockHash":"0x021b8caf11507166285bcb6e3561fa8a7d34bdd3e82b50d9ba49df2c0af59a75","blockNumber":97665694,"logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c6910"]},{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c6910","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","contractName":"RewardsManager_Instance","dependencies":["RewardsManager#GraphProxy"],"futureId":"RewardsManager#RewardsManager_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xd3c18abd2c454e57149a2c30030f0cd37318e5ba162544f038ecded5e4501b75","networkInteractionId":1,"receipt":{"blockHash":"0x99e9cb615aa284510c98597e7d4691dda4637aa673cc71ebc68705b6a71abc95","blockNumber":97665639,"logs":[{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d9"]},{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d9","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x4356c858d052a126039f5d902f92ba05824a22619181a519325a4588023ae688","networkInteractionId":1,"receipt":{"blockHash":"0x2052065cfea901e8fab8ae90947cbe1ca94634b3b69ab589cb30ea3e7bfb23a2","blockNumber":97665661,"logs":[{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036"]},{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]},{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x000000000000000000000000000000000000000000000000000000000000003c","logIndex":3,"topics":["0x25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce2441","0x0000000000000000000000000000000000000000000000000000000000000001"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xc9290f621aac5ac566934e36b825b1208998eff556f5f27e84297907fc839764","networkInteractionId":1,"receipt":{"blockHash":"0x3111b46862e73e1476f75a4901f654d51eb2a6ba530d0bb693df11b12f963599","blockNumber":97665672,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291"]},{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x0000000000000000000000000000000000000000000000000000000000000000","logIndex":2,"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":3,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f","0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","Curation#Curation_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_Curation","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","networkInteraction":{"data":"0xe0e99292e6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","networkInteractionId":1,"nonce":702,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0d3246218132b00fa8839135c5a9d22b84a0283c7cdafb9d515ad5693c817c79"},"type":"TRANSACTION_SEND"} +{"args":["0xc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063","0xCf27161EE08cA6087f9fF445a44474B89C10e554"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","EpochManager#EpochManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","networkInteraction":{"data":"0xe0e99292c713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e554","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","networkInteractionId":1,"nonce":703,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8b29698b48714a9cf49cfd9f61b4b85d72a6619f31016a305d538c8a77d0ec7b"},"type":"TRANSACTION_SEND"} +{"args":["0xade6b8eb69a49b56929c1d4f4b428d791861db6f","10000000000000000000000000000"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"mint","futureId":"GraphToken#GraphToken_Instance.mint","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken_Instance.mint","networkInteraction":{"data":"0x40c10f19000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f0000000000000000000000000000000000000000204fce5e3e25026110000000","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken_Instance.mint","networkInteractionId":1,"nonce":704,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x5e89a0111bf53fdec85c3217a78b3f4520cf914c0cd458525d80f092f4bf2b4e"},"type":"TRANSACTION_SEND"} +{"args":[],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"renounceMinter","futureId":"GraphToken#GraphToken_Instance.renounceMinter","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","networkInteraction":{"data":"0x98650275","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","networkInteractionId":1,"nonce":705,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf76ca2d9d1c8db0fa70fe898e47caa22ce5a5392387174b102b260f73f93a0e8"},"type":"TRANSACTION_SEND"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"transferOwnership","futureId":"GraphToken#GraphToken_Instance.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","networkInteractionId":1,"nonce":706,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x22adf2e833f1f302f56befc6bd01dad573d89003c9ed350efc7b4889c54ad23d"},"type":"TRANSACTION_SEND"} +{"args":["0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC"],"artifactId":"GraphTokenGateway#GraphTokenGateway_Instance","contractAddress":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","dependencies":["GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setPauseGuardian","futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","networkInteraction":{"data":"0x48bde20c00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc","id":1,"to":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","networkInteractionId":1,"nonce":707,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xd7139b2954c4a432974cbafc4ea100493527d5857ff6173e85f0e269e785e2e4"},"type":"TRANSACTION_SEND"} +{"args":["114155251141552511415"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setIssuancePerBlock","futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","networkInteraction":{"data":"0x1156bdc10000000000000000000000000000000000000000000000063038ec17c1be19b7","id":1,"to":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","networkInteractionId":1,"nonce":708,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x44cd760b5a43fae0f38a986c95dfc064eac371fdea223e8c5fd995556e01eb74"},"type":"TRANSACTION_SEND"} +{"args":["0xd03ea8624C8C5987235048901fB614fDcA89b117"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setSubgraphAvailabilityOracle","futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","networkInteraction":{"data":"0x0903c094000000000000000000000000d03ea8624c8c5987235048901fb614fdca89b117","id":1,"to":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","networkInteractionId":1,"nonce":709,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x260510632da250baca33a824b36739ff9cd85789ae4f1a11eda2fd5f86ecd63a"},"type":"TRANSACTION_SEND"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","hash":"0x260510632da250baca33a824b36739ff9cd85789ae4f1a11eda2fd5f86ecd63a","networkInteractionId":1,"receipt":{"blockHash":"0xbf423bbc18f37fda47c658857d5e3b422c62f19e9acc46e2880768756c9d328e","blockNumber":97665790,"logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a7375626772617068417661696c6162696c6974794f7261636c65000000000000","logIndex":0,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xBc53a58f03917A88174C2795B674734eCEeec05F"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setSubgraphService","futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","networkInteraction":{"data":"0x93a90a1e000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f","id":1,"to":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","networkInteractionId":1,"nonce":710,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xb20ae47445f3b01649aeecd7f7d0f91b260206a23c7e372ba1880a6dd8d0f176"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","hash":"0x0d3246218132b00fa8839135c5a9d22b84a0283c7cdafb9d515ad5693c817c79","networkInteractionId":1,"receipt":{"blockHash":"0xf65acea5cd26d2bcb8d7a5a8570a27d5d1f1822f115803e2c98cdc42d93e849e","blockNumber":97665716,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","hash":"0x8b29698b48714a9cf49cfd9f61b4b85d72a6619f31016a305d538c8a77d0ec7b","networkInteractionId":1,"receipt":{"blockHash":"0x9703d9afc9df93dd1d7de7c4d33662037f6dacbfc4efd41371272421bf8b355a","blockNumber":97665727,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e554","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphToken_Instance.mint","hash":"0x5e89a0111bf53fdec85c3217a78b3f4520cf914c0cd458525d80f092f4bf2b4e","networkInteractionId":1,"receipt":{"blockHash":"0x57ccbd361d8eed5418bc04beac87816c81b2ae8c6414aa910d1b6f4e04cd1e82","blockNumber":97665736,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x0000000000000000000000000000000000000000204fce5e3e25026110000000","logIndex":0,"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken_Instance.mint","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","hash":"0xf76ca2d9d1c8db0fa70fe898e47caa22ce5a5392387174b102b260f73f93a0e8","networkInteractionId":1,"receipt":{"blockHash":"0x53367afdefdfc575bbaddf49c6111e4bd1f1dfd30cc20d94790271fda1333691","blockNumber":97665748,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0xe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb66692","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","hash":"0x22adf2e833f1f302f56befc6bd01dad573d89003c9ed350efc7b4889c54ad23d","networkInteractionId":1,"receipt":{"blockHash":"0xde5163f66b9998a0704669403d7363df542688c66bddf9c4d5f2136db996e6bf","blockNumber":97665757,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","hash":"0xd7139b2954c4a432974cbafc4ea100493527d5857ff6173e85f0e269e785e2e4","networkInteractionId":1,"receipt":{"blockHash":"0xba1f0c388212cea1f8d7aebcfa6700918066efda31af2cb18084cfd800e4f411","blockNumber":97665768,"logs":[{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":0,"topics":["0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","hash":"0x44cd760b5a43fae0f38a986c95dfc064eac371fdea223e8c5fd995556e01eb74","networkInteractionId":1,"receipt":{"blockHash":"0x14768baf9985f47e73e5ceb0ba29806db3eda4791224aaf8d895ff23e87d02bf","blockNumber":97665780,"logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001069737375616e6365506572426c6f636b00000000000000000000000000000000","logIndex":0,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","hash":"0xb20ae47445f3b01649aeecd7f7d0f91b260206a23c7e372ba1880a6dd8d0f176","networkInteractionId":1,"receipt":{"blockHash":"0x809cdec7cff27070d351ac964401c545c40a7c0e15ddd322fae0b199b2e3606e","blockNumber":97665799,"logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":0,"topics":["0x97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0","0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","networkInteraction":{"data":"0xe0e99292d362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf00000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","networkInteractionId":1,"nonce":711,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x7a0cf3d5b00512272bc02cac445206a33637cfa680d22af86750c80195043274"},"type":"TRANSACTION_SEND"} +{"args":["0x966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761","0x1C0f92202CFc66B160972D54c513A7354F507Bf8"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","networkInteraction":{"data":"0xe0e99292966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c531807610000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf8","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","networkInteractionId":1,"nonce":712,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x3b74943c8239ed31372488e6a10fd1ae84074316c6061094745c21749c7fd82f"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","hash":"0x3b74943c8239ed31372488e6a10fd1ae84074316c6061094745c21749c7fd82f","networkInteractionId":1,"receipt":{"blockHash":"0x5bb7bd7c73fc4414539800003a570ba4e171e89518ee5c5e4906ba67e35c0a34","blockNumber":97665837,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf8","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance","GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"addMinter","futureId":"GraphToken#addMinterGateway","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#addMinterGateway","networkInteraction":{"data":"0x983b2d560000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#addMinterGateway","networkInteractionId":1,"nonce":713,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8c129360e592b7d41fb66b02d6c79455ad4ec6138654e76d3d93e8709888465a"},"type":"TRANSACTION_SEND"} +{"args":["0x1C0f92202CFc66B160972D54c513A7354F507Bf8"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance","RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"addMinter","futureId":"GraphToken#addMinterRewardsManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphToken#addMinterRewardsManager","networkInteraction":{"data":"0x983b2d560000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf8","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphToken#addMinterRewardsManager","networkInteractionId":1,"nonce":714,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc8b296142da1b4ae30666b2a291f6e2ee50c23c29815ee36aaa851fff504ccd4"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","hash":"0x7a0cf3d5b00512272bc02cac445206a33637cfa680d22af86750c80195043274","networkInteractionId":1,"receipt":{"blockHash":"0xd32042609ab890e87bba0cab8240d8ad037b7962befea0300f16ad6c402b278f","blockNumber":97665826,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#addMinterGateway","hash":"0x8c129360e592b7d41fb66b02d6c79455ad4ec6138654e76d3d93e8709888465a","networkInteractionId":1,"receipt":{"blockHash":"0x41027a3b0321b221c1eb1675ac8f3400ee1d90487ddc25ca2e3701ed2c1e321b","blockNumber":97665846,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x0000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#addMinterGateway","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"GraphToken#addMinterRewardsManager","hash":"0xc8b296142da1b4ae30666b2a291f6e2ee50c23c29815ee36aaa851fff504ccd4","networkInteractionId":1,"receipt":{"blockHash":"0x97c343ab37d642739692dda87dea5377c31da6be674ad28e9a9af2865fe67413","blockNumber":97665857,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":7,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x0000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf8"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphToken#addMinterRewardsManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247","0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","networkInteraction":{"data":"0xe0e9929245fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","networkInteractionId":1,"nonce":715,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x78f2d578ef1e6be44f8ed0bebd654b247e9f17524d275eb07aff2feb7336d981"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","hash":"0x78f2d578ef1e6be44f8ed0bebd654b247e9f17524d275eb07aff2feb7336d981","networkInteractionId":1,"receipt":{"blockHash":"0x39696584ae3b00e8f4e76b3c645415c2e257be4f9d13c74255a51dd253c9a5c9","blockNumber":97665876,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphHorizon_Periphery#Dummy","constructorArgs":[],"contractName":"Dummy","dependencies":["GraphHorizon_Periphery#setContractProxy_EpochManager","GraphHorizon_Periphery#setContractProxy_RewardsManager","GraphHorizon_Periphery#setContractProxy_GraphToken","GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","GraphHorizon_Periphery#setContractProxy_Curation"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphHorizon_Periphery#Dummy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphHorizon_Periphery#Dummy","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphHorizon_Periphery#Dummy","networkInteractionId":1,"nonce":716,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x1bcfb5e1e9bc192e94dcf5a345bae0323032e3df635f1d98250da4274bbfefa1"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphHorizon_Periphery#Dummy","hash":"0x1bcfb5e1e9bc192e94dcf5a345bae0323032e3df635f1d98250da4274bbfefa1","networkInteractionId":1,"receipt":{"blockHash":"0x62f813fe603c912b206848a2fb9eb29cadba13867dbd5b71cded65e5107823a7","blockNumber":97665891,"contractAddress":"0x923a8027EF79AaCC9B4eBC22a548F7c755153F6a","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphHorizon_Periphery#Dummy","result":{"address":"0x923a8027EF79AaCC9B4eBC22a548F7c755153F6a","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonProxies#GraphProxy_HorizonStaking","constructorArgs":["0x0000000000000000000000000000000000000000","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphHorizon_Periphery#Dummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#GraphProxy_HorizonStaking","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","networkInteractionId":1,"nonce":717,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0be81a5951e38358bf1ad21fadd0e7e929e80717a8b55fef13f976bc5e54bf7f"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","hash":"0x0be81a5951e38358bf1ad21fadd0e7e929e80717a8b55fef13f976bc5e54bf7f","networkInteractionId":1,"receipt":{"blockHash":"0xb46cdfedfe470a8444ea5c8af51d6518eef5010410c3d28f3fe7c31aa0a02b4f","blockNumber":97665907,"contractAddress":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","logs":[{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","result":{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0x1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034","0xdabc7419aba5A47d368d008f42bb66c7D5801740"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","HorizonProxies#GraphProxy_HorizonStaking"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_HorizonStaking","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","networkInteraction":{"data":"0xe0e992921df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","networkInteractionId":1,"nonce":718,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xe80b17da59ff503afc808d1849215383b2d6238dfa99e4373fffeb8ec80b7b10"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","hash":"0xe80b17da59ff503afc808d1849215383b2d6238dfa99e4373fffeb8ec80b7b10","networkInteractionId":1,"receipt":{"blockHash":"0x20e3c5de40693e83d7413d295f86aff74a41928a3d66f32e1d5294964df9c7d0","blockNumber":97665923,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","logIndex":3,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonProxies#RegisteredDummy","constructorArgs":[],"contractName":"Dummy","dependencies":["HorizonProxies#setContractProxy_HorizonStaking","HorizonProxies#setContractProxy_GraphPayments","HorizonProxies#setContractProxy_PaymentsEscrow"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#RegisteredDummy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonProxies#RegisteredDummy","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonProxies#RegisteredDummy","networkInteractionId":1,"nonce":719,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xa746c68e08fc55c8f7de91b24891c949b5b3863ca72ae5fc7dc5c6e1c9b39fc6"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonProxies#RegisteredDummy","hash":"0xa746c68e08fc55c8f7de91b24891c949b5b3863ca72ae5fc7dc5c6e1c9b39fc6","networkInteractionId":1,"receipt":{"blockHash":"0x364e0c66e079587d29d8e9d9d18cfc0a11f3e58be52177419f8630679c9d6667","blockNumber":97665939,"contractAddress":"0x5560e7816fb9198A07d1432559cD67fd304C5046","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonProxies#RegisteredDummy","result":{"address":"0x5560e7816fb9198A07d1432559cD67fd304C5046","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"GraphPayments#GraphPayments","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C",10000],"contractName":"GraphPayments","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphPayments#GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphPayments#GraphPayments","networkInteraction":{"data":"0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c0000000000000000000000000000000000000000000000000000000000002710","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphPayments#GraphPayments","networkInteractionId":1,"nonce":720,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x9e93b952fa3e6e7c60c2742ec2c37dc1906d247d589314b92124b926b4b943e7"},"type":"TRANSACTION_SEND"} +{"artifactId":"GraphPayments#GraphPayments_Instance","contractAddress":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","contractName":"GraphPayments","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"futureId":"GraphPayments#GraphPayments_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonStakingExtension#HorizonStakingExtension","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C","0xBc53a58f03917A88174C2795B674734eCEeec05F"],"contractName":"HorizonStakingExtension","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy","HorizonStakingExtension#ExponentialRebates"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonStakingExtension#HorizonStakingExtension","futureType":"CONTRACT_DEPLOYMENT","libraries":{"ExponentialRebates":"0xA966fedEE46EbfA9B2390986aa19fab5aE018e87"},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","networkInteraction":{"data":"0x6101e060405234801561001157600080fd5b5060405161311a38038061311a83398101604081905261003091610411565b818181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610347565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610347565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610347565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610347565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610347565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610347565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610347565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610347565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610347565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b03166101c052506104b4915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038291815260200190565b602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c39190610444565b9050826001600160a01b0382166103ee5760405163218f5add60e11b81526004016100749190610466565b5092915050565b80516001600160a01b038116811461040c57600080fd5b919050565b6000806040838503121561042457600080fd5b61042d836103f5565b915061043b602084016103f5565b90509250929050565b60006020828403121561045657600080fd5b61045f826103f5565b9392505050565b602081526000825180602084015260005b818110156104945760208186018101516040868401015201610477565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612bb061056a6000396000818161196c0152611b6c01526000611d910152600050506000505060008181611e73015281816121bf01526122c901526000818161120a01526118a5015260008181610be70152610e19015260005050600050506000505060008181610f870152818161113d01528181611d5901528181611ee801526120d00152612bb06000f3fe6080604052600436106101dc5760003560e01c806398c657dc11610102578063b7ca724111610095578063e73e14bf11610064578063e73e14bf14610a60578063f1d60d6614610a98578063fb744cc014610ab8578063fc54fb2714610ad857600080fd5b8063b7ca724114610926578063c0641994146109e9578063ccebcabb14610a04578063e2e1e8e914610a3357600080fd5b8063a784d498116100d1578063a784d49814610856578063ac9650d814610876578063ae4fe67a146108a3578063b6363cf2146108dc57600080fd5b806398c657dc146107195780639ce7abe514610746578063a212daf814610766578063a2594d821461083657600080fd5b8063561285e41161017a578063872d048911610149578063872d0489146106385780638cc01c86146106585780638d3c100a146106d95780639054e343146106f957600080fd5b8063561285e4146105865780636a3ca383146105e85780637573ef4f146106185780637a766460146102fb57600080fd5b806325d9897e116101b657806325d9897e1461033157806339514ad21461045457806344c32a611461048657806355c85269146104a857600080fd5b806308ce5f68146102335780630e022923146102665780631787e69f146102fb57600080fd5b3661022e5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561023f57600080fd5b5061025361024e3660046125ad565b610af0565b6040519081526020015b60405180910390f35b34801561027257600080fd5b506102866102813660046125e6565b610b05565b60405161025d919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561030757600080fd5b506102536103163660046125e6565b6001600160a01b03166000908152600e602052604090205490565b34801561033d57600080fd5b5061044761034c3660046125ad565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b60405161025d9190612603565b34801561046057600080fd5b50601a546001600160401b03165b6040516001600160401b03909116815260200161025d565b34801561049257600080fd5b506104a66104a13660046126a4565b610be5565b005b3480156104b457600080fd5b506105546104c33660046125e6565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161025d565b34801561059257600080fd5b506105a66105a13660046125ad565b610c93565b60405161025d9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156105f457600080fd5b506106086106033660046125e6565b610d39565b604051901515815260200161025d565b34801561062457600080fd5b506102536106333660046126d0565b610d5e565b34801561064457600080fd5b5061025361065336600461271f565b610dc2565b34801561066457600080fd5b506106be6106733660046125e6565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b6040805182518152602092830151928101929092520161025d565b3480156106e557600080fd5b506104a66106f4366004612768565b610e17565b34801561070557600080fd5b5061025361071436600461278d565b6112e3565b34801561072557600080fd5b506107396107343660046125e6565b6113cb565b60405161025d91906127e3565b34801561075257600080fd5b506104a661076136600461280b565b6113d6565b34801561077257600080fd5b5061080361078136600461278d565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b60405161025d91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561084257600080fd5b506104a66108513660046125e6565b611501565b34801561086257600080fd5b506102536108713660046125e6565b61161d565b34801561088257600080fd5b50610896610891366004612890565b611628565b60405161025d9190612929565b3480156108af57600080fd5b506106086108be3660046125e6565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e857600080fd5b506106086108f73660046125ad565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093257600080fd5b506109ad6109413660046129a9565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b60405161025d9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b3480156109f557600080fd5b50600d5463ffffffff1661046e565b348015610a1057600080fd5b50610a24610a1f36600461278d565b61170f565b6040519051815260200161025d565b348015610a3f57600080fd5b50610253610a4e3660046129a9565b60009081526010602052604090205490565b348015610a6c57600080fd5b50610608610a7b3660046125e6565b6001600160a01b03166000908152600e6020526040902054151590565b348015610aa457600080fd5b50610608610ab33660046125e6565b611761565b348015610ac457600080fd5b50610253610ad33660046125ad565b611786565b348015610ae457600080fd5b5060205460ff16610608565b6000610afc8383611792565b90505b92915050565b610b6060405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906129c2565b15610c8557604051632b37d9d160e21b815260040160405180910390fd5b610c8f82826117ca565b5050565b610cc56040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b610cf76040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000610d038585611b68565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b60006001610d4683611bec565b6002811115610d5757610d576127cd565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610d9857610d986127cd565b6002811115610da957610da96127cd565b81526020019081526020016000205490505b9392505050565b600080610dcf8585611792565b90506000610ddd8686611c45565b90506000610df163ffffffff8616846129fa565b90506000610dff8383611c70565b9050610e0b8185612a11565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906129c2565b15610eb757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b6044820152606401610225565b6000610f0182611bec565b90506000816002811115610f1757610f176127cd565b03610f4f5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b6044820152606401610225565b82600003610f5c57505050565b6001600160a01b0382166000908152600f60205260408120600181015490918590808080610fb633867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611c87565b600d54610fd1908690600160401b900463ffffffff16611d44565b9350610fdd8486612a24565b600d54909550610ffe9087908790640100000000900463ffffffff16611d7d565b925061100a8386612a24565b945084876005015461101c9190612a11565b6005880155600287015460009015806110425750601954600160a01b900463ffffffff16155b61110d5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273A966fedEE46EbfA9B2390986aa19fab5aE018e87906349484d819060c401602060405180830381865af41580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190612a37565b611110565b60005b9050611120818960080154611f90565b925061112c8387611c70565b925061116c61113b8488612a24565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690611faa565b82156111d4578288600801546111829190612a11565b6008890155875461119c906001600160a01b031684611ff2565b91506111a88284612a24565b88546001600160a01b039081166000818152601760205260409020549295506111d49286921615612084565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190612a37565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611329576000915050610dbb565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b80156113bf576000818152601d602052604090206001810154426001600160401b03909116116113ae5760028301546001840154825461139391906129fa565b61139d9190612a50565b6113a79085612a11565b93506113b4565b506113bf565b600201549050611353565b50909695505050505050565b6000610aff82611bec565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190612a72565b6001600160a01b0316336001600160a01b03161461149b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906114c99086908690600401612a8f565b600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190612a72565b6001600160a01b0316336001600160a01b0316146115c65760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505050565b6000610aff826120fa565b604080516000815260208101909152606090826001600160401b0381111561165257611652612abe565b60405190808252806020026020018201604052801561168557816020015b60608152602001906001900390816116705790505b50915060005b83811015611707576116e2308686848181106116a9576116a9612ad4565b90506020028101906116bb9190612aea565b856040516020016116ce93929190612b37565b604051602081830303815290604052612145565b8382815181106116f4576116f4612ad4565b602090810291909101015260010161168b565b505092915050565b60408051602081019091526000815260408051602081019091526000815260006117398686611b68565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b60008061176d83611bec565b600281111561177e5761177e6127cd565b141592915050565b6000610afc8383611c45565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610afc9190612a24565b60006117d583611bec565b905060018160028111156117eb576117eb6127cd565b146118225760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b6044820152606401610225565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190612a37565b60808201819052606082015160009161193d91611f90565b9050600082600001516001600160a01b0316336001600160a01b031614806119ae575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff16821115806119d157506040830151155b15611a0b5780611a0b5760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b6044820152606401610225565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611aef57808015611a4557508415155b15611a5d57611a588684600001516121bb565b611a6c565b611a6a83602001516122a8565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611a999190612a24565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611ad99190612a24565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611bc157506001600160a01b0382166000908152601460205260409020610aff565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610aff565b6001600160a01b038082166000908152600f6020526040812080549192909116611c195750600092915050565b600381015415801590611c2e57506004810154155b15611c3c5750600192915050565b50600292915050565b600080611c528484611b68565b905080600501548160020154611c689190612a24565b949350505050565b600081831115611c805781610afc565b5090919050565b8015611d3f576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0791906129c2565b611d3f5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610225565b505050565b600080611d518484612336565b9050610afc817f000000000000000000000000000000000000000000000000000000000000000061115d565b600082600003611d8f57506000610dbb565b7f000000000000000000000000000000000000000000000000000000000000000060008315801590611dc957506001600160a01b03821615155b9050808015611e3c5750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c91906129c2565b15611f84576000611e4d8686612336565b90508015611f7a576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190612a37565b50611f1883827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190612388565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050505b9250610dbb915050565b50600095945050505050565b6000818311611fa0576000610afc565b610afc8284612a24565b8015610c8f57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561160157600080fd5b6001600160a01b038216600090815260146020526040812060028101548291901580159061203157508054600160401b900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff600160401b90910481169087906123c316565b90506120638186612a24565b92508282600201546120759190612a11565b6002830155505b509392505050565b8260000361209157505050565b80156120a157611d3f828461242a565b6001600160a01b03808316600090815260176020526040902054166120f481156120cb57816120cd565b835b857f0000000000000000000000000000000000000000000000000000000000000000611f08565b50505050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916121319190612a24565b61213b9190612a24565b610aff9190612a24565b6060600080846001600160a01b0316846040516121629190612b5e565b600060405180830381855af49150503d806000811461219d576040519150601f19603f3d011682016040523d82523d6000602084013e6121a2565b606091505b50915091506121b28583836124a9565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af1158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c9190612a37565b90508060000361225b57505050565b60006122678383612505565b905060006122758284612a24565b6001600160a01b038086166000908152601760205260409020549192506122a191839187911615612084565b5050505050565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff9190612a37565b600061234582620f4240101590565b829061236757604051633dc311df60e01b815260040161022591815260200190565b5061237e8361237984620f4240612a24565b6123c3565b610afc9084612a24565b8015611d3f5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611cc4565b60006123d283620f4240101590565b806123e557506123e582620f4240101590565b8383909161240f5760405163768bf0eb60e11b815260048101929092526024820152604401610225565b50620f4240905061242083856129fa565b610afc9190612a50565b6001600160a01b0382166000908152600e602052604090205461244e908290612a11565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061249d9084815260200190565b60405180910390a25050565b6060826124be576124b98261256c565b610dbb565b81511580156124d557506001600160a01b0384163b155b156124fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610225565b5080610dbb565b6001600160a01b038216600090815260146020526040812060028101548291901580159061254557508054640100000000900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff64010000000090910481169087906123c316565b80511561257c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b038116811461259557600080fd5b600080604083850312156125c057600080fd5b82356125cb81612598565b915060208301356125db81612598565b809150509250929050565b6000602082840312156125f857600080fd5b8135610afc81612598565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a083015161266160a08401826001600160401b03169052565b5060c083015161267960c084018263ffffffff169052565b5060e083015161269460e08401826001600160401b03169052565b5061010092830151919092015290565b600080604083850312156126b757600080fd5b82356126c281612598565b946020939093013593505050565b6000806000606084860312156126e557600080fd5b83356126f081612598565b9250602084013561270081612598565b915060408401356003811061271457600080fd5b809150509250925092565b60008060006060848603121561273457600080fd5b833561273f81612598565b9250602084013561274f81612598565b9150604084013563ffffffff8116811461271457600080fd5b6000806040838503121561277b57600080fd5b8235915060208301356125db81612598565b6000806000606084860312156127a257600080fd5b83356127ad81612598565b925060208401356127bd81612598565b9150604084013561271481612598565b634e487b7160e01b600052602160045260246000fd5b602081016003831061280557634e487b7160e01b600052602160045260246000fd5b91905290565b60008060006040848603121561282057600080fd5b833561282b81612598565b925060208401356001600160401b0381111561284657600080fd5b8401601f8101861361285757600080fd5b80356001600160401b0381111561286d57600080fd5b86602082840101111561287f57600080fd5b939660209190910195509293505050565b600080602083850312156128a357600080fd5b82356001600160401b038111156128b957600080fd5b8301601f810185136128ca57600080fd5b80356001600160401b038111156128e057600080fd5b8560208260051b84010111156128f557600080fd5b6020919091019590945092505050565b60005b83811015612920578181015183820152602001612908565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561299d57603f198786030184528151805180875261297a816020890160208501612905565b601f01601f19169590950160209081019550938401939190910190600101612951565b50929695505050505050565b6000602082840312156129bb57600080fd5b5035919050565b6000602082840312156129d457600080fd5b81518015158114610afc57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610aff57610aff6129e4565b80820180821115610aff57610aff6129e4565b81810381811115610aff57610aff6129e4565b600060208284031215612a4957600080fd5b5051919050565b600082612a6d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a8457600080fd5b8151610afc81612598565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612b0157600080fd5b8301803591506001600160401b03821115612b1b57600080fd5b602001915036819003821315612b3057600080fd5b9250929050565b828482376000838201600081528351612b54818360208801612905565b0195945050505050565b60008251612b70818460208701612905565b919091019291505056fea26469706673582212202248057a8bce81db640fbc5d05cef1efff890ddbde3697383b1612b453370f4364736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","networkInteractionId":1,"nonce":721,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8a378086ba3ff7a7b025b0a3f4960e3076365c2d0202cef53b4fa9d9ca049585"},"type":"TRANSACTION_SEND"} +{"artifactId":"PaymentsEscrow#PaymentsEscrow","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C",10000,10000],"contractName":"PaymentsEscrow","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"PaymentsEscrow#PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"PaymentsEscrow#PaymentsEscrow","networkInteraction":{"data":"0x61020060405234801561001157600080fd5b506040516121d83803806121d88339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611be36105f56000396000818161020801526111c801526000818161015001526103a401526000505060005050600050506000505060005050600081816103010152818161041d01528181610590015281816106d90152818161078b015281816109cf01528181610a8001528181611049015261124d01526000505060008181610cbd0152610d6501526000505060008181610c0101528181610c8e01528181610ddb015281816113c5015261148f0152611be36000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002710","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"PaymentsEscrow#PaymentsEscrow","networkInteractionId":1,"nonce":722,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xe5c2784fecb4826c373aca8f28dd673073155bcaf609889d3ab04ee5eaa9e581"},"type":"TRANSACTION_SEND"} +{"futureId":"PaymentsEscrow#PaymentsEscrow","hash":"0xe5c2784fecb4826c373aca8f28dd673073155bcaf609889d3ab04ee5eaa9e581","networkInteractionId":1,"receipt":{"blockHash":"0xb33afb8521d96be6bf65dd981f36311c17dfade7473576ac00906f59c9db580a","blockNumber":97665974,"contractAddress":"0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6","logs":[{"address":"0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"PaymentsEscrow#PaymentsEscrow","result":{"address":"0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"PaymentsEscrow#PaymentsEscrow_Instance","contractAddress":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","contractName":"PaymentsEscrow","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"futureId":"PaymentsEscrow#PaymentsEscrow_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"TAPCollector#TAPCollector","constructorArgs":["TAPCollector","1","0x59c3CA02528054C6337f63eb367a374Ac45C292C",10000],"contractName":"TAPCollector","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"TAPCollector#TAPCollector","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"TAPCollector#TAPCollector","networkInteraction":{"data":"0x6102c060405234801561001157600080fd5b50604051612162380380612162833981016040819052610030916105de565b81848461003e8260006103e0565b6101205261004d8160016103e0565b61014052815160208084019190912060e052815190820120610100524660a0526100da60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03811661012c5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101e05260408051808201909152600a81526923b930b8342a37b5b2b760b11b602082015261016490610413565b6001600160a01b0316610160526040805180820190915260078152665374616b696e6760c81b602082015261019890610413565b6001600160a01b03166101805260408051808201909152600d81526c47726170685061796d656e747360981b60208201526101d290610413565b6001600160a01b03166101a05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261020d90610413565b6001600160a01b03166101c05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261024690610413565b6001600160a01b03166102005260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b602082015261028190610413565b6001600160a01b0316610220526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102bf90610413565b6001600160a01b03166102405260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102fb90610413565b6001600160a01b03166102605260408051808201909152600881526721bab930ba34b7b760c11b602082015261033090610413565b6001600160a01b039081166102808190526101e05161018051610160516101a0516101c0516102005161022051610240516102605160408051968c168752948b166020870152928a1685850152908916606085015288166080840152871660a083015260c0820195909552935192851694918216939116917fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a439181900360e00190a4506102a0525061082b915050565b60006020835110156103fc576103f5836104c1565b905061040d565b8161040784826106e8565b5060ff90505b92915050565b6000806101e0516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161044e91815260200190565b602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f91906107a6565b9050826001600160a01b0382166104ba5760405163218f5add60e11b815260040161012391906107f4565b5092915050565b600080829050601f815111156104ec578260405163305a27a960e01b815260040161012391906107f4565b80516104f782610807565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610530578181015183820152602001610518565b50506000910152565b600082601f83011261054a57600080fd5b81516001600160401b03811115610563576105636104ff565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610591576105916104ff565b6040528181528382016020018510156105a957600080fd5b6105ba826020830160208701610515565b949350505050565b80516001600160a01b03811681146105d957600080fd5b919050565b600080600080608085870312156105f457600080fd5b84516001600160401b0381111561060a57600080fd5b61061687828801610539565b602087015190955090506001600160401b0381111561063457600080fd5b61064087828801610539565b93505061064f604086016105c2565b6060959095015193969295505050565b600181811c9082168061067357607f821691505b60208210810361069357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106e357806000526020600020601f840160051c810160208510156106c05750805b601f840160051c820191505b818110156106e057600081556001016106cc565b50505b505050565b81516001600160401b03811115610701576107016104ff565b6107158161070f845461065f565b84610699565b6020601f82116001811461074957600083156107315750848201515b600019600385901b1c1916600184901b1784556106e0565b600084815260208120601f198516915b828110156107795787850151825560209485019460019092019101610759565b50848210156107975786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156107b857600080fd5b6107c1826105c2565b9392505050565b600081518084526107e0816020860160208601610515565b601f01601f19169290920160200192915050565b6020815260006107c160208301846107c8565b805160208083015191908110156106935760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516118786108ea600039600081816101bf015261035e015260005050600050506000505060005050600050506000505060006107db015260005050600050506000505060006109900152600061095e01526000610f2101526000610ef901526000610e5401526000610e7e01526000610ea801526118786000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637f07d283116100715780637f07d2831461016b57806384b0196e1461018c5780638821603c146101a7578063960ba169146101ba578063cfdb35bd146101e1578063fee9f01f1461021257600080fd5b8063015cdd80146100ae5780631354f019146100c35780631ef518f2146100d657806339aa7416146101065780635d2b6a4e14610119575b600080fd5b6100c16100bc366004611081565b610225565b005b6100c16100d1366004611081565b610302565b6100e96100e436600461109e565b6103c7565b6040516001600160a01b0390911681526020015b60405180910390f35b6100c1610114366004611081565b6103e0565b61014c610127366004611081565b600260205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016100fd565b61017e6101793660046111e5565b6104f4565b6040519081526020016100fd565b6101946105cd565b6040516100fd9796959493929190611288565b61017e6101b5366004611320565b610613565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e6101ef36600461135a565b600360209081526000938452604080852082529284528284209052825290205481565b6100c16102203660046113a5565b610626565b6001600160a01b038082166000908152600260205260409020805490913391849116821461027e57604051630ad827d360e41b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b5050600081600101541182906102b357604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b506000600182018190556040519081526001600160a01b0383169033907f3b4432b11b66b46d9a7b190aa989c0ae85a5395b543540220596dd94dd405ceb906020015b60405180910390a35050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461035657604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b5061038390507f000000000000000000000000000000000000000000000000000000000000000042611445565b600182018190556040519081526001600160a01b0383169033907fd939049941f6a15381248e4ac0010f15efdf0f3221923711244c200b5ff2cddf906020016102f6565b60006103da6103d583611515565b6106e2565b92915050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461043457604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b50506000816001015411829061046957604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b50600181015442908181111561049b57604051631a42d0ab60e31b815260048101929092526024820152604401610275565b50506001600160a01b03821660008181526002602052604080822080546001600160a01b03191681556001018290555133917f2fc91dbd92d741cae16e0315578d7f6cf77043b771692c4bd993658ecfe8942291a35050565b60008060008380602001905181019061050d91906115d2565b815151919350915033906001600160a01b0381168214610553576040516347666ba360e11b81526001600160a01b03928316600482015291166024820152604401610275565b50506000610560836106e2565b6001600160a01b038082166000908152600260205260409020549192501661059b57604051630ef060dd60e01b815260040160405180910390fd5b6001600160a01b038082166000908152600260205260409020546105c3918891168585610709565b9695505050505050565b6000606080600080600060606105e1610957565b6105e9610989565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60006103da610621836116f8565b6109b6565b6001600160a01b03848116600090815260026020526040902054168481156106745760405163cb2320b760e01b81526001600160a01b03928316600482015291166024820152604401610275565b505061068282828587610a6d565b6001600160a01b03841660008181526002602052604080822080546001600160a01b0319163390811782556001909101839055905190917f6edcdd4150e63c6c36d965976c1c37375609c8b040c50d39e7156437b80e282891a350505050565b6000806106f283600001516109b6565b9050610702818460200151610b95565b9392505050565b815180516020808301516060909301516001600160a01b03808416600090815260038452604080822083881683528552808220928a168252919093528220549193916001600160801b03909116908181808211610782576040516308e467d960e31b815260048101929092526024820152604401610275565b50600090506107918284611704565b9050600061079f8289610bbf565b90508115610862576001600160a01b03868116600090815260036020908152604080832089851684528252808320938e168352929052208490557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387dbfe828c8c88868b876040518763ffffffff1660e01b815260040161082f9695949392919061172d565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b505050505b856001600160a01b03168a6001600160a01b03168c600281111561088857610888611717565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4846001600160a01b0316866001600160a01b03168b6001600160a01b03167f2d55f33a4a377f40129b217a6cf7a5022a112941b80cd589332abc245aa0a5c78c60000151604001518d60000151606001518e60000151608001518f602001516040516109419493929190611781565b60405180910390a4509998505050505050505050565b60606109847f00000000000000000000000000000000000000000000000000000000000000006000610c26565b905090565b60606109847f00000000000000000000000000000000000000000000000000000000000000006001610c26565b60006103da7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610a52969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610cd1565b8142808211610a98576040516343c042b360e01b815260048101929092526024820152604401610275565b50506040805146602082015290810183905233606090811b6bffffffffffffffffffffffff1916908201526000906074016040516020818303038152906040528051906020012090506000610b1a827f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b9050826001600160a01b0316610b668288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b9592505050565b6001600160a01b031614610b8d5760405163164f10af60e11b815260040160405180910390fd5b505050505050565b600080600080610ba58686610cfe565b925092509250610bb58282610d4b565b5090949350505050565b6000610bce83620f4240101590565b80610be15750610be182620f4240101590565b83839091610c0b5760405163768bf0eb60e11b815260048101929092526024820152604401610275565b50620f42409050610c1c83856117cf565b61070291906117e6565b606060ff8314610c4057610c3983610e08565b90506103da565b818054610c4c90611808565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7890611808565b8015610cc55780601f10610c9a57610100808354040283529160200191610cc5565b820191906000526020600020905b815481529060010190602001808311610ca857829003601f168201915b505050505090506103da565b60006103da610cde610e47565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008351604103610d385760208401516040850151606086015160001a610d2a88828585610f72565b955095509550505050610d44565b50508151600091506002905b9250925092565b6000826003811115610d5f57610d5f611717565b03610d68575050565b6001826003811115610d7c57610d7c611717565b03610d9a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610dae57610dae611717565b03610dcf5760405163fce698f760e01b815260048101829052602401610275565b6003826003811115610de357610de3611717565b03610e04576040516335e2f38360e21b815260048101829052602401610275565b5050565b60606000610e1583611041565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ea057507f000000000000000000000000000000000000000000000000000000000000000046145b15610eca57507f000000000000000000000000000000000000000000000000000000000000000090565b610984604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610fad5750600091506003905082611037565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611001573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661102d57506000925060019150829050611037565b9250600091508190505b9450945094915050565b600060ff8216601f8111156103da57604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b038116811461107e57600080fd5b50565b60006020828403121561109357600080fd5b813561070281611069565b6000602082840312156110b057600080fd5b81356001600160401b038111156110c657600080fd5b82016040818503121561070257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715611110576111106110d8565b60405290565b604080519081016001600160401b0381118282101715611110576111106110d8565b604051601f8201601f191681016001600160401b0381118282101715611160576111606110d8565b604052919050565b60006001600160401b03821115611181576111816110d8565b50601f01601f191660200190565b600082601f8301126111a057600080fd5b81356111b36111ae82611168565b611138565b8181528460208386010111156111c857600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156111f857600080fd5b82356003811061120757600080fd5b915060208301356001600160401b0381111561122257600080fd5b61122e8582860161118f565b9150509250929050565b60005b8381101561125357818101518382015260200161123b565b50506000910152565b60008151808452611274816020860160208601611238565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e0602082015260006112a760e083018961125c565b82810360408401526112b9818961125c565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561130f5783518352602093840193909201916001016112f1565b50909b9a5050505050505050505050565b60006020828403121561133257600080fd5b81356001600160401b0381111561134857600080fd5b820160a0818503121561070257600080fd5b60008060006060848603121561136f57600080fd5b833561137a81611069565b9250602084013561138a81611069565b9150604084013561139a81611069565b809150509250925092565b600080600080606085870312156113bb57600080fd5b84356113c681611069565b93506020850135925060408501356001600160401b038111156113e857600080fd5b8501601f810187136113f957600080fd5b80356001600160401b0381111561140f57600080fd5b87602082840101111561142157600080fd5b949793965060200194505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156103da576103da61142f565b6001600160401b038116811461107e57600080fd5b6001600160801b038116811461107e57600080fd5b600060a0828403121561149457600080fd5b61149c6110ee565b905081356114a981611069565b815260208201356114b981611069565b602082015260408201356114cc81611458565b604082015260608201356114df8161146d565b606082015260808201356001600160401b038111156114fd57600080fd5b6115098482850161118f565b60808301525092915050565b60006040823603121561152757600080fd5b61152f611116565b82356001600160401b0381111561154557600080fd5b61155136828601611482565b82525060208301356001600160401b0381111561156d57600080fd5b6115793682860161118f565b60208301525092915050565b600082601f83011261159657600080fd5b81516115a46111ae82611168565b8181528460208386010111156115b957600080fd5b6115ca826020830160208701611238565b949350505050565b600080604083850312156115e557600080fd5b82516001600160401b038111156115fb57600080fd5b83016040818603121561160d57600080fd5b611615611116565b81516001600160401b0381111561162b57600080fd5b820160a0818803121561163d57600080fd5b6116456110ee565b815161165081611069565b8152602082015161166081611069565b6020820152604082015161167381611458565b604082015260608201516116868161146d565b606082015260808201516001600160401b038111156116a457600080fd5b6116b089828501611585565b60808301525082525060208201516001600160401b038111156116d257600080fd5b6116de87828501611585565b602083810191909152959095015190969095509350505050565b60006103da3683611482565b818103818111156103da576103da61142f565b634e487b7160e01b600052602160045260246000fd5b60c081016003881061174f57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b6001600160401b03851681526001600160801b03841660208201526080604082015260006117b2608083018561125c565b82810360608401526117c4818561125c565b979650505050505050565b80820281158282048414176103da576103da61142f565b60008261180357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061181c57607f821691505b60208210810361183c57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220acb6bfec6d9c2f80f4ced26fd1055163ff8dce81039d2e933346d801e1bdbb3064736f6c634300081b0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000c544150436f6c6c6563746f72000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"TAPCollector#TAPCollector","networkInteractionId":1,"nonce":723,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x3220df2a1ecc3785a9247ade399caffdf66bf5cbdfae697e6be889c60e18c60a"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphPayments#GraphPayments","hash":"0x9e93b952fa3e6e7c60c2742ec2c37dc1906d247d589314b92124b926b4b943e7","networkInteractionId":1,"receipt":{"blockHash":"0x534dab1e5885f0def0197a5cfe63a7ddb7b62705dc6e66ade010694a784dfec5","blockNumber":97665952,"contractAddress":"0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","logs":[{"address":"0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]},{"address":"0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","data":"0x000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":1,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphPayments#GraphPayments","result":{"address":"0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","hash":"0x8a378086ba3ff7a7b025b0a3f4960e3076365c2d0202cef53b4fa9d9ca049585","networkInteractionId":1,"receipt":{"blockHash":"0x8d77f10b142a5be0d1fe9384e74fd12e787dfe876d5fb6409b7417b9b0a31e8c","blockNumber":97665964,"contractAddress":"0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c","logs":[{"address":"0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":12,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStakingExtension#HorizonStakingExtension","result":{"address":"0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"futureId":"TAPCollector#TAPCollector","hash":"0x3220df2a1ecc3785a9247ade399caffdf66bf5cbdfae697e6be889c60e18c60a","networkInteractionId":1,"receipt":{"blockHash":"0x527151a95244529c92e154f0f6ebb4e9daaf345185af2f42d0f2895183dae236","blockNumber":97665985,"contractAddress":"0x84149af521E4C32dDCCb7e9F1F63a187A964396c","logs":[{"address":"0x84149af521E4C32dDCCb7e9F1F63a187A964396c","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"TAPCollector#TAPCollector","result":{"address":"0x84149af521E4C32dDCCb7e9F1F63a187A964396c","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":[],"artifactId":"GraphPayments#GraphPayments","dependencies":["GraphPayments#GraphPayments"],"functionName":"initialize","futureId":"GraphPayments#encodeFunctionCall(GraphPayments#GraphPayments.initialize)","result":"0x8129fc1c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"HorizonStaking#HorizonStaking","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C","0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c","0xBc53a58f03917A88174C2795B674734eCEeec05F"],"contractName":"HorizonStaking","dependencies":["Controller#Controller","HorizonStakingExtension#HorizonStakingExtension","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonStaking#HorizonStaking","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#HorizonStaking","networkInteraction":{"data":"0x61020060405234801561001157600080fd5b506040516160913803806160918339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ae16105b06000396000610331015260008181610eb30152818161180b015281816118be015281816118e0015281816134240152818161425401526145900152600050506000505060005050600050506000505060006133dd015260005050600050506000505060008181610e7d01528181611a5c015281816129af01528181612cc601528181612d5d01528181612ef701528181613ec1015281816140d0015281816141e401526142fc0152615ae16000f3fe6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000083e6689edbc7e71861f2c1eb273d1e0df00c9f3c000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#HorizonStaking","networkInteractionId":1,"nonce":724,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0b2ad822ad72df01ea02d1440acafa9d8e03c4aaae4d8913dfce65950d5e355e"},"type":"TRANSACTION_SEND"} +{"args":[],"artifactId":"PaymentsEscrow#PaymentsEscrow","dependencies":["PaymentsEscrow#PaymentsEscrow"],"functionName":"initialize","futureId":"PaymentsEscrow#encodeFunctionCall(PaymentsEscrow#PaymentsEscrow.initialize)","result":"0x8129fc1c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"futureId":"HorizonStaking#HorizonStaking","hash":"0x0b2ad822ad72df01ea02d1440acafa9d8e03c4aaae4d8913dfce65950d5e355e","networkInteractionId":1,"receipt":{"blockHash":"0x7e8030153ee0c6ac844050c223e9cd869bc2d6a97dd3618433048565e24a3091","blockNumber":97666006,"contractAddress":"0x5DF9C2eFB1206d11C50Ad130446364c88934a17E","logs":[{"address":"0x5DF9C2eFB1206d11C50Ad130446364c88934a17E","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":3,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#HorizonStaking","result":{"address":"0x5DF9C2eFB1206d11C50Ad130446364c88934a17E","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","0x8129fc1c"],"artifactId":"HorizonProxies#ProxyAdmin_GraphPayments","contractAddress":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","dependencies":["HorizonProxies#ProxyAdmin_GraphPayments","HorizonProxies#TransparentUpgradeableProxy_GraphPayments","GraphPayments#GraphPayments","GraphPayments#encodeFunctionCall(GraphPayments#GraphPayments.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","networkInteraction":{"data":"0x9623609d000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd000000000000000000000000b5da0c077f45bd34964d4d94cf4fe0dfbbc8ba42000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000048129fc1c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","networkInteractionId":1,"nonce":725,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x48ce5bf2a7a7946fa46cb08b938f65d055c9ab405ddd145047fab559d861b90c"},"type":"TRANSACTION_SEND"} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","hash":"0x48ce5bf2a7a7946fa46cb08b938f65d055c9ab405ddd145047fab559d861b90c","networkInteractionId":1,"receipt":{"blockHash":"0xb195a6f83aab96ccb5eba8a3d96408470717d7d45c14275f607b932be78415b7","blockNumber":97666020,"logs":[{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000b5da0c077f45bd34964d4d94cf4fe0dfbbc8ba42"]},{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":1,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0xdabc7419aba5A47d368d008f42bb66c7D5801740","0x5DF9C2eFB1206d11C50Ad130446364c88934a17E"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","HorizonProxies#GraphProxy_HorizonStaking","HorizonStaking#HorizonStaking"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgrade","futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","networkInteraction":{"data":"0x99a88ec4000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d58017400000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","networkInteractionId":1,"nonce":726,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x81143e8bb21cbc2317da05173fd931ed787127cb7ac75f500dfbfd648819e4ea"},"type":"TRANSACTION_SEND"} +{"args":["0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6","0x8129fc1c"],"artifactId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","contractAddress":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","dependencies":["HorizonProxies#ProxyAdmin_PaymentsEscrow","HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","PaymentsEscrow#PaymentsEscrow","PaymentsEscrow#encodeFunctionCall(PaymentsEscrow#PaymentsEscrow.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","networkInteraction":{"data":"0x9623609d0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab00000000000000000000000069f0a00274f8211120a80d7afdf9b0f2d76a02f6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000048129fc1c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","networkInteractionId":1,"nonce":727,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x32b4bbcdacd219fa708ba9fd58fbb98123cc33186b309fd1fc11f600d52d777d"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","hash":"0x81143e8bb21cbc2317da05173fd931ed787127cb7ac75f500dfbfd648819e4ea","networkInteractionId":1,"receipt":{"blockHash":"0xc517348d8cd18b7483f14d529927aad1f12fa4e1bcc1c10171d338692009501b","blockNumber":97666032,"logs":[{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":0,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","hash":"0x32b4bbcdacd219fa708ba9fd58fbb98123cc33186b309fd1fc11f600d52d777d","networkInteractionId":1,"receipt":{"blockHash":"0x70b6e83e417987050209e72e57662d612e2e85356f58d583d13c6b445380ae30","blockNumber":97666043,"logs":[{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x00000000000000000000000069f0a00274f8211120a80d7afdf9b0f2d76a02f6"]},{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":1,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"args":["0x5DF9C2eFB1206d11C50Ad130446364c88934a17E","0xdabc7419aba5A47d368d008f42bb66c7D5801740"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","HorizonStaking#HorizonStaking","HorizonProxies#GraphProxy_HorizonStaking","HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxy","futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","networkInteraction":{"data":"0xeb451a020000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","networkInteractionId":1,"nonce":728,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8dc462902d97eb17529894458a9293405cd9d6ee81228a13630f5f05de8d33cc"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","hash":"0x8dc462902d97eb17529894458a9293405cd9d6ee81228a13630f5f05de8d33cc","networkInteractionId":1,"receipt":{"blockHash":"0x5cc13c1c69f5bed6de0daaa39985ff4e524a96ba26e8c97f8d5e0b7c3f458c4c","blockNumber":97666058,"logs":[{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e"]},{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"HorizonStaking#HorizonStaking_Instance","contractAddress":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","contractName":"HorizonStaking","dependencies":["HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","HorizonProxies#GraphProxy_HorizonStaking"],"futureId":"HorizonStaking#HorizonStaking_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":[2419200],"artifactId":"HorizonStaking#HorizonStaking_Instance","contractAddress":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","dependencies":["HorizonStaking#HorizonStaking_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setMaxThawingPeriod","futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","networkInteraction":{"data":"0x259bc435000000000000000000000000000000000000000000000000000000000024ea00","id":1,"to":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","networkInteractionId":1,"nonce":729,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x1c16b43dbb76c48cf13fdae859d9cbe3aada5bf42ca4b0f46a7823c423271a86"},"type":"TRANSACTION_SEND"} +{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","hash":"0x1c16b43dbb76c48cf13fdae859d9cbe3aada5bf42ca4b0f46a7823c423271a86","networkInteractionId":1,"receipt":{"blockHash":"0xfb550b0cd988a9383520bd6466d4371534898c8839c17a6fca131d252ae41f78","blockNumber":97666073,"logs":[{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x000000000000000000000000000000000000000000000000000000000024ea00","logIndex":0,"topics":["0xe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"DisputeManager#DisputeManager","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C"],"contractName":"DisputeManager","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"DisputeManager#DisputeManager","futureType":"NAMED_ARTIFACT_CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"DisputeManager#DisputeManager","networkInteraction":{"data":"0x6101c060405234801561001157600080fd5b506040516138243803806138248339810160408190526100309161049b565b806001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b29061033b565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e59061033b565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e9061033b565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b60208201526101589061033b565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526101909061033b565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb9061033b565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102099061033b565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102459061033b565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a9061033b565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a4506103356103e9565b50610519565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161037691815260200190565b602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b7919061049b565b9050826001600160a01b0382166103e25760405163218f5add60e11b815260040161007191906104cb565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104395760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104985780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156104ad57600080fd5b81516001600160a01b03811681146104c457600080fd5b9392505050565b602081526000825180602084015260005b818110156104f957602081860181015160408684010152016104dc565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516132a861057c60003960005050600050506000505060005050600050506000505060005050600050506000611fe30152600061160e01526132a86000f3fe608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"DisputeManager#DisputeManager","networkInteractionId":1,"nonce":730,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf02f773d37fe324131e62a7356fa40507b12c6095b5f672d9a4ed4a63c80b307"},"type":"TRANSACTION_SEND"} +{"artifactId":"DisputeManager#DisputeManager_Instance","contractAddress":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","contractName":"DisputeManager","dependencies":[],"futureId":"DisputeManager#DisputeManager_Instance","futureType":"NAMED_ARTIFACT_CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"DisputeManager#ProxyAdmin","contractAddress":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","contractName":"ProxyAdmin","dependencies":[],"futureId":"DisputeManager#ProxyAdmin","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"futureId":"DisputeManager#DisputeManager","hash":"0xf02f773d37fe324131e62a7356fa40507b12c6095b5f672d9a4ed4a63c80b307","networkInteractionId":1,"receipt":{"blockHash":"0x8bf842806ab89320556d4cd8f5ddf73fd4868e00209224aa77add59a46d76bdc","blockNumber":97666098,"contractAddress":"0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","logs":[{"address":"0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":4,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]},{"address":"0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","data":"0x000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":5,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"DisputeManager#DisputeManager","result":{"address":"0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0",2419200,"10000000000000000000000",500000,1000000],"artifactId":"DisputeManager#DisputeManager","dependencies":["DisputeManager#DisputeManager"],"functionName":"initialize","futureId":"DisputeManager#encodeFunctionCall(DisputeManager#DisputeManager.initialize)","result":"0x5ed2c96c000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0000000000000000000000000000000000000000000000000000000000024ea0000000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000000000000000000007a12000000000000000000000000000000000000000000000000000000000000f4240","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"args":["0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","0x5ed2c96c000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0000000000000000000000000000000000000000000000000000000000024ea0000000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000000000000000000007a12000000000000000000000000000000000000000000000000000000000000f4240"],"artifactId":"DisputeManager#ProxyAdmin","contractAddress":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","dependencies":["DisputeManager#ProxyAdmin","DisputeManager#DisputeManager","DisputeManager#encodeFunctionCall(DisputeManager#DisputeManager.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","networkInteraction":{"data":"0x9623609d0000000000000000000000008f2f7801f4bbdcaeabfd18ee671b1874b1dc59d50000000000000000000000008e436e815226c8bd5e775c7ff693dae6a94be7d1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a45ed2c96c000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0000000000000000000000000000000000000000000000000000000000024ea0000000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000000000000000000007a12000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000","id":1,"to":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","networkInteractionId":1,"nonce":731,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x2dd77b6988019198c5c5c7d2cc696716139d7825b5ff7ec2e3c8ce5de1032125"},"type":"TRANSACTION_SEND"} +{"futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","hash":"0x2dd77b6988019198c5c5c7d2cc696716139d7825b5ff7ec2e3c8ce5de1032125","networkInteractionId":1,"receipt":{"blockHash":"0x605ed3bd10e731864ba11f2fe559988fd8840e79f451d9e204b40e7acc40cdab","blockNumber":97666115,"logs":[{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x0000000000000000000000008e436e815226c8bd5e775c7ff693dae6a94be7d1"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000e002de2c9c6b7aebd9e275c1234b68b917a2b13e"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x","logIndex":2,"topics":["0x51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x000000000000000000000000000000000000000000000000000000000024ea00","logIndex":3,"topics":["0x310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x00000000000000000000000000000000000000000000021e19e0c9bab2400000","logIndex":4,"topics":["0x97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x000000000000000000000000000000000000000000000000000000000007a120","logIndex":5,"topics":["0xc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x00000000000000000000000000000000000000000000000000000000000f4240","logIndex":6,"topics":["0x7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":7,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} +{"artifactId":"SubgraphService#ProxyAdmin","contractAddress":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","contractName":"ProxyAdmin","dependencies":[],"futureId":"SubgraphService#ProxyAdmin","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"artifactId":"SubgraphService#SubgraphService","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C","0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","0x84149af521E4C32dDCCb7e9F1F63a187A964396c","0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C"],"contractName":"SubgraphService","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphService#SubgraphService","futureType":"NAMED_ARTIFACT_CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"SubgraphService#SubgraphService","networkInteraction":{"data":"0x61024060405234801561001157600080fd5b5060405161668f38038061668f83398101604081905261003091610541565b3083838387806001600160a01b03811661007f5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b7906103c5565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100ea906103c5565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b6020820152610123906103c5565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015d906103c5565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610195906103c5565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101d0906103c5565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020e906103c5565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024a906103c5565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027f906103c5565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103299790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b038481166101c08190528482166101e08190528483166102008190529284166102208190526040805193845260208401929092529082019290925260608101919091527f4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda79060800160405180910390a1505050506103bc61047360201b60201c565b50505050610605565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161040091815260200190565b602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610595565b9050826001600160a01b03821661046c5760405163218f5add60e11b815260040161007691906105b7565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104c35760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146105225780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b038116811461053c57600080fd5b919050565b6000806000806080858703121561055757600080fd5b61056085610525565b935061056e60208601610525565b925061057c60408601610525565b915061058a60608601610525565b905092959194509250565b6000602082840312156105a757600080fd5b6105b082610525565b9392505050565b602081526000825180602084015260005b818110156105e557602081860181015160408684010152016105c8565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615ff161069e60003960006143f801526000612fa9015260008181611a1801526138d00152600050506000505060005050600050506000613fe6015260006137fd01526000505060005050600050506000612045015260006143d40152615ff16000f3fe608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c0000000000000000000000008f2f7801f4bbdcaeabfd18ee671b1874b1dc59d500000000000000000000000084149af521e4c32ddccb7e9f1f63a187a964396c000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"SubgraphService#SubgraphService","networkInteractionId":1,"nonce":732,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xb27877abe206e77e750e818c99fc51080fdb8452a378ce53c7ebf04add36f63a"},"type":"TRANSACTION_SEND"} +{"futureId":"SubgraphService#SubgraphService","hash":"0xb27877abe206e77e750e818c99fc51080fdb8452a378ce53c7ebf04add36f63a","networkInteractionId":1,"receipt":{"blockHash":"0x2752fbab44e4099519b2990f42ca7e6dddb2637baa2ade461605250adb3923e8","blockNumber":97666132,"contractAddress":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","logs":[{"address":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]},{"address":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","data":"0x0000000000000000000000002268247782f4b7adb2da810efd6e43b27a37af540000000000000000000000008f2f7801f4bbdcaeabfd18ee671b1874b1dc59d500000000000000000000000084149af521e4c32ddccb7e9f1f63a187a964396c000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":1,"topics":["0x4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda7"]},{"address":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","data":"0x000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":2,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"SubgraphService#SubgraphService","result":{"address":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} +{"artifactId":"SubgraphService#SubgraphService_Instance","contractAddress":"0xBc53a58f03917A88174C2795B674734eCEeec05F","contractName":"SubgraphService","dependencies":[],"futureId":"SubgraphService#SubgraphService_Instance","futureType":"NAMED_ARTIFACT_CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} +{"args":["100000000000000000000000",16,2],"artifactId":"SubgraphService#SubgraphService","dependencies":["SubgraphService#SubgraphService"],"functionName":"initialize","futureId":"SubgraphService#encodeFunctionCall(SubgraphService#SubgraphService.initialize)","result":"0x1cafa21800000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} +{"args":["0xBc53a58f03917A88174C2795B674734eCEeec05F","0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","0x1cafa21800000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002"],"artifactId":"SubgraphService#ProxyAdmin","contractAddress":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","dependencies":["SubgraphService#ProxyAdmin","SubgraphService#SubgraphService","SubgraphService#encodeFunctionCall(SubgraphService#SubgraphService.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} +{"futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","networkInteraction":{"data":"0x9623609d000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f0000000000000000000000002268247782f4b7adb2da810efd6e43b27a37af54000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000641cafa21800000000000000000000000000000000000000000000152d02c7e14af68000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000","id":1,"to":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} +{"futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","networkInteractionId":1,"nonce":733,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0993cd6bb738f22c34f1a94f1866552b635a791f3c3e9172dc24398d24a6c2e8"},"type":"TRANSACTION_SEND"} +{"futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","hash":"0x0993cd6bb738f22c34f1a94f1866552b635a791f3c3e9172dc24398d24a6c2e8","networkInteractionId":1,"receipt":{"blockHash":"0x2d540ae6e3726ba85e2f00c09c9dc57f5f485a4a57bb5712e1f0a9c1eea3ead0","blockNumber":97666148,"logs":[{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x0000000000000000000000002268247782f4b7adb2da810efd6e43b27a37af54"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000004f1c68dd0c1cb5bd75c431f94c8734a5067a0b2f"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","logIndex":2,"topics":["0x90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f568849"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4240","logIndex":3,"topics":["0x2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a36"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":4,"topics":["0x2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d1"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x00000000000000000000000000000000000000000000152d02c7e14af6800000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","logIndex":5,"topics":["0x90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f568849"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000010","logIndex":6,"topics":["0x472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000002","logIndex":7,"topics":["0x2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":8,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} +{"futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} \ No newline at end of file diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 419d5f160..f9094be53 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -38,6 +38,7 @@ "hardhat": "^2.20.1", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.8", + "hardhat-secure-accounts": "^1.0.4", "hardhat-storage-layout": "^0.1.7", "lint-staged": "^15.2.2", "prettier": "^3.2.5", diff --git a/yarn.lock b/yarn.lock index 4cfd396f1..c6850b143 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2953,6 +2953,7 @@ __metadata: hardhat: "npm:^2.20.1" hardhat-contract-sizer: "npm:^2.10.0" hardhat-gas-reporter: "npm:^1.0.8" + hardhat-secure-accounts: "npm:^1.0.4" hardhat-storage-layout: "npm:^0.1.7" lint-staged: "npm:^15.2.2" prettier: "npm:^3.2.5" @@ -3046,6 +3047,7 @@ __metadata: hardhat: "npm:^2.20.1" hardhat-contract-sizer: "npm:^2.10.0" hardhat-gas-reporter: "npm:^1.0.8" + hardhat-secure-accounts: "npm:^1.0.4" hardhat-storage-layout: "npm:^0.1.7" lint-staged: "npm:^15.2.2" prettier: "npm:^3.2.5" @@ -14246,6 +14248,22 @@ __metadata: languageName: node linkType: hard +"hardhat-secure-accounts@npm:^1.0.4": + version: 1.0.4 + resolution: "hardhat-secure-accounts@npm:1.0.4" + dependencies: + debug: "npm:^4.3.4" + enquirer: "npm:^2.3.6" + lodash.clonedeep: "npm:^4.5.0" + prompt-sync: "npm:^4.2.0" + peerDependencies: + "@nomicfoundation/hardhat-ethers": ^3.0.0 + ethers: ^6.13.0 + hardhat: ^2.22.0 + checksum: 6406be693502234f342b9e27215bb3ecb3502a0d9f5299c5c1f5e1be28f08d26226cff511723e719639dc12fb2e4e329386a41e5c90f57b3bf3116656c45c2b5 + languageName: node + linkType: hard + "hardhat-storage-layout@npm:0.1.6": version: 0.1.6 resolution: "hardhat-storage-layout@npm:0.1.6" From 13ea6cab452179a04cbc25928898e2b143995e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 20 Nov 2024 17:59:40 -0300 Subject: [PATCH 283/343] feat: add gre/sdk with support for horizon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- package.json | 1 + packages/eslint-graph-config/README.md | 4 +- packages/hardhat-graph-protocol/.mocharc.json | 5 + .../hardhat-graph-protocol/eslint.config.js | 14 + packages/hardhat-graph-protocol/package.json | 52 + packages/hardhat-graph-protocol/src/config.ts | 35 + packages/hardhat-graph-protocol/src/gre.ts | 138 ++ packages/hardhat-graph-protocol/src/index.ts | 10 + packages/hardhat-graph-protocol/src/logger.ts | 7 + .../src/sdk/address-book.ts | 214 +++ .../sdk/deployments/horizon/address-book.ts | 74 + .../src/sdk/deployments/horizon/index.ts | 9 + .../src/sdk/deployments/horizon/types.ts | 45 + .../src/sdk/deployments/lib/artifact.ts | 41 + .../src/sdk/deployments/lib/contract.ts | 39 + .../src/sdk/utils/assertion.ts | 11 + .../src/sdk/utils/error.ts | 9 + .../src/sdk/utils/path.ts | 8 + .../src/type-extensions.ts | 53 + packages/hardhat-graph-protocol/src/types.ts | 24 + .../test/config.test.ts | 52 + .../fixtures/default-config/hardhat.config.ts | 8 + .../test/fixtures/files/addresses-global.json | 0 .../test/fixtures/files/addresses-hre.json | 0 .../fixtures/files/addresses-network.json | 0 .../test/fixtures/files/addresses-opt.json | 0 .../global-address-book/hardhat.config.ts | 48 + .../invalid-address-book/hardhat.config.ts | 48 + .../network-address-book/hardhat.config.ts | 49 + .../fixtures/no-path-config/addresses.json | 0 .../fixtures/no-path-config/hardhat.config.ts | 45 + .../fixtures/path-config/hardhat.config.ts | 48 + .../hardhat-graph-protocol/test/gre.test.ts | 58 + .../hardhat-graph-protocol/test/helpers.ts | 26 + packages/hardhat-graph-protocol/tsconfig.json | 15 + packages/horizon/addresses.json | 1453 +++++++++++++++++ packages/horizon/hardhat.config.ts | 9 +- packages/horizon/package.json | 3 +- yarn.lock | 429 ++++- 39 files changed, 3066 insertions(+), 18 deletions(-) create mode 100644 packages/hardhat-graph-protocol/.mocharc.json create mode 100644 packages/hardhat-graph-protocol/eslint.config.js create mode 100644 packages/hardhat-graph-protocol/package.json create mode 100644 packages/hardhat-graph-protocol/src/config.ts create mode 100644 packages/hardhat-graph-protocol/src/gre.ts create mode 100644 packages/hardhat-graph-protocol/src/index.ts create mode 100644 packages/hardhat-graph-protocol/src/logger.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/address-book.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/horizon/types.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/lib/artifact.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/utils/assertion.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/utils/error.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/utils/path.ts create mode 100644 packages/hardhat-graph-protocol/src/type-extensions.ts create mode 100644 packages/hardhat-graph-protocol/src/types.ts create mode 100644 packages/hardhat-graph-protocol/test/config.test.ts create mode 100644 packages/hardhat-graph-protocol/test/fixtures/default-config/hardhat.config.ts create mode 100644 packages/hardhat-graph-protocol/test/fixtures/files/addresses-global.json create mode 100644 packages/hardhat-graph-protocol/test/fixtures/files/addresses-hre.json create mode 100644 packages/hardhat-graph-protocol/test/fixtures/files/addresses-network.json create mode 100644 packages/hardhat-graph-protocol/test/fixtures/files/addresses-opt.json create mode 100644 packages/hardhat-graph-protocol/test/fixtures/global-address-book/hardhat.config.ts create mode 100644 packages/hardhat-graph-protocol/test/fixtures/invalid-address-book/hardhat.config.ts create mode 100644 packages/hardhat-graph-protocol/test/fixtures/network-address-book/hardhat.config.ts create mode 100644 packages/hardhat-graph-protocol/test/fixtures/no-path-config/addresses.json create mode 100644 packages/hardhat-graph-protocol/test/fixtures/no-path-config/hardhat.config.ts create mode 100644 packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts create mode 100644 packages/hardhat-graph-protocol/test/gre.test.ts create mode 100644 packages/hardhat-graph-protocol/test/helpers.ts create mode 100644 packages/hardhat-graph-protocol/tsconfig.json create mode 100644 packages/horizon/addresses.json diff --git a/package.json b/package.json index 6b82fd5a4..eb94a1de7 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "packages/contracts", "packages/data-edge", "packages/eslint-graph-config", + "packages/hardhat-graph-protocol", "packages/horizon", "packages/sdk", "packages/solhint-graph-config", diff --git a/packages/eslint-graph-config/README.md b/packages/eslint-graph-config/README.md index 3e0a41cff..794ad677d 100644 --- a/packages/eslint-graph-config/README.md +++ b/packages/eslint-graph-config/README.md @@ -5,13 +5,13 @@ This repository contains shared linting and formatting rules for TypeScript proj ## Installation ```bash -yarn add --dev eslint eslint-graph-config +yarn add --dev eslint@^8.56.0 eslint-graph-config ``` For projects on this monorepo, you can use the following command to install the package: ```bash -yarn add --dev eslint eslint-graph-config@workspace:^x.y.z +yarn add --dev eslint@^8.56.0 eslint-graph-config@workspace:^x.y.z ``` To enable the rules, you need to create an `eslint.config.js` file in the root of your project with the following content: diff --git a/packages/hardhat-graph-protocol/.mocharc.json b/packages/hardhat-graph-protocol/.mocharc.json new file mode 100644 index 000000000..de4e97026 --- /dev/null +++ b/packages/hardhat-graph-protocol/.mocharc.json @@ -0,0 +1,5 @@ +{ + "require": "ts-node/register/files", + "ignore": ["test/fixtures/**/*"], + "timeout": 6000 +} diff --git a/packages/hardhat-graph-protocol/eslint.config.js b/packages/hardhat-graph-protocol/eslint.config.js new file mode 100644 index 000000000..ed2d51271 --- /dev/null +++ b/packages/hardhat-graph-protocol/eslint.config.js @@ -0,0 +1,14 @@ +const config = require('eslint-graph-config') + +module.exports = [ + ...config.default, + { + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + }, + }, +] diff --git a/packages/hardhat-graph-protocol/package.json b/packages/hardhat-graph-protocol/package.json new file mode 100644 index 000000000..fd4416c0e --- /dev/null +++ b/packages/hardhat-graph-protocol/package.json @@ -0,0 +1,52 @@ +{ + "name": "hardhat-graph-protocol", + "version": "0.0.1", + "description": "A hardhat plugin that extends the runtime environment to inject additional functionality related to the usage of the Graph Protocol.", + "keywords": [ + "ethereum", + "smart-contracts", + "hardhat", + "hardhat-plugin", + "graph", + "graph-protocol", + "horizon" + ], + "author": "Tomás Migone ", + "license": "MIT", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "tsc", + "lint": "eslint '**/*.{js,ts}' --fix", + "test": "mocha --exit --recursive 'test/**/*.test.ts'" + }, + "files": [ + "dist/", + "src/", + "LICENSE", + "README.md" + ], + "dependencies": { + "@graphprotocol/contracts": "workspace:^7.0.0", + "@graphprotocol/horizon": "workspace:^0.0.1", + "@nomicfoundation/hardhat-ethers": "^3.0.8", + "debug": "^4.3.7" + }, + "devDependencies": { + "@types/chai": "^4.0.0", + "@types/debug": "^4.1.12", + "@types/mocha": "^10.0.9", + "chai": "^4.0.0", + "eslint": "^8.56.0", + "eslint-graph-config": "workspace:^0.0.1", + "ethers": "^6.13.4", + "hardhat": "^2.22.16", + "mocha": "^10.8.2", + "ts-node": "^8.0.0", + "typescript": "^5.6.3" + }, + "peerDependencies": { + "ethers": "^6.13.4", + "hardhat": "^2.22.16" + } +} diff --git a/packages/hardhat-graph-protocol/src/config.ts b/packages/hardhat-graph-protocol/src/config.ts new file mode 100644 index 000000000..f93bc868e --- /dev/null +++ b/packages/hardhat-graph-protocol/src/config.ts @@ -0,0 +1,35 @@ +import fs from 'fs' +import { GraphPluginError } from './sdk/utils/error' +import { logDebug } from './logger' + +import type { GraphDeployment, GraphRuntimeEnvironmentOptions } from './types' +import type { HardhatRuntimeEnvironment } from 'hardhat/types' +import { normalizePath } from './sdk/utils/path' + +export function getAddressBookPath( + deployment: GraphDeployment, + hre: HardhatRuntimeEnvironment, + opts: GraphRuntimeEnvironmentOptions, +): string { + logDebug(`== ${deployment} - Getting address book path`) + logDebug(`Graph base dir: ${hre.config.paths.graph}`) + logDebug(`1) opts.addressBooks.[deployment]: ${opts.addressBooks?.[deployment]}`) + logDebug(`2) hre.network.config.addressBooks.[deployment]: ${hre.network.config?.addressBooks?.[deployment]}`) + logDebug(`3) hre.config.graph.addressBooks.[deployment]: ${hre.config.graph?.addressBooks?.[deployment]}`) + + let addressBookPath + = opts.addressBooks?.[deployment] ?? hre.network.config?.addressBooks?.[deployment] ?? hre.config.graph?.addressBooks?.[deployment] + + if (addressBookPath === undefined) { + throw new GraphPluginError('Must set a an addressBook path!') + } + + addressBookPath = normalizePath(addressBookPath, hre.config.paths.graph) + + if (!fs.existsSync(addressBookPath)) { + throw new GraphPluginError(`Address book not found: ${addressBookPath}`) + } + + logDebug(`Address book path found: ${addressBookPath}`) + return addressBookPath +} diff --git a/packages/hardhat-graph-protocol/src/gre.ts b/packages/hardhat-graph-protocol/src/gre.ts new file mode 100644 index 000000000..5cc251138 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/gre.ts @@ -0,0 +1,138 @@ +import path from 'path' + +import { GraphDeploymentsList, GraphRuntimeEnvironment, GraphRuntimeEnvironmentOptions, isGraphDeployment } from './types' +import { logDebug, logWarn } from './logger' +import { getAddressBookPath } from './config' +import { GraphHorizonAddressBook } from './sdk/deployments/horizon' +import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider' + +import type { HardhatConfig, HardhatRuntimeEnvironment, HardhatUserConfig } from 'hardhat/types' + +export const greExtendConfig = (config: HardhatConfig, userConfig: Readonly) => { + const userPath = userConfig.paths?.graph + + let newPath: string + if (userPath === undefined) { + newPath = config.paths.root + } else { + if (path.isAbsolute(userPath)) { + newPath = userPath + } else { + newPath = path.normalize(path.join(config.paths.root, userPath)) + } + } + + config.paths.graph = newPath +} + +export const greExtendEnvironment = (hre: HardhatRuntimeEnvironment) => { + hre.graph = (opts: GraphRuntimeEnvironmentOptions = {}) => { + logDebug('*** Initializing Graph Runtime Environment (GRE) ***') + logDebug(`Main network: ${hre.network.name}`) + + const provider = new HardhatEthersProvider(hre.network.provider, hre.network.name) + const deployments = [ + ...Object.keys(opts.addressBooks ?? {}), + ...Object.keys(hre.network.config.addressBooks ?? {}), + ...Object.keys(hre.config.graph?.addressBooks ?? {}), + ] + logDebug(`Detected deployments: ${deployments.join(', ')}`) + + // Build the Graph Runtime Environment (GRE) for each deployment + const gre = {} as GraphRuntimeEnvironment + for (const deployment of deployments) { + if (!isGraphDeployment(deployment)) { + logWarn(`Invalid deployment: ${deployment}. Skipping...`) + continue + } + + logDebug(`Initializing ${deployment} deployment...`) + const addressBookPath = getAddressBookPath(deployment, hre, opts) + let addressBook + switch (deployment) { + case 'horizon': + addressBook = new GraphHorizonAddressBook(addressBookPath, hre.network.config.chainId!) + gre.horizon = { + addressBook: addressBook, + contracts: addressBook.loadContracts(hre.network.config.chainId!, provider), + } + break + + default: + break + } + } + + logDebug('GRE initialized successfully!') + return gre + } +} + +// function buildGraphNetworkEnvironment( +// chainId: number, +// provider: EthersProviderWrapper | undefined, +// graphConfigPath: string | undefined, +// addressBookPath: string, +// isHHL1: boolean, +// enableTxLogging: boolean, +// secureAccounts: boolean, +// fork: boolean, +// getWallets: () => Promise, +// getWallet: (address: string) => Promise, +// unlockProvider: (caller: string) => Promise, +// ): GraphNetworkEnvironment | null { +// if (graphConfigPath === undefined) { +// logWarn( +// `No graph config file provided for chain: ${chainId}. ${ +// isHHL1 ? 'L2' : 'L1' +// } will not be initialized.`, +// ) +// return null +// } + +// if (provider === undefined) { +// logWarn( +// `No provider URL found for: ${chainId}. ${isHHL1 ? 'L2' : 'L1'} will not be initialized.`, +// ) +// return null +// } + +// // Upgrade provider to secure accounts if feature is enabled +// const getUpdatedProvider = async (caller: string) => +// secureAccounts ? await unlockProvider(caller) : provider + +// return { +// chainId: chainId, +// provider: provider, +// addressBook: lazyObject(() => new GraphNetworkAddressBook(addressBookPath, chainId)), +// graphConfig: lazyObject(() => { +// const config = readConfig(graphConfigPath, true) +// config.defaults = getDefaults(config, isHHL1) +// return config +// }), +// contracts: lazyObject(() => +// loadGraphNetworkContracts(addressBookPath, chainId, provider, undefined, { +// enableTxLogging, +// }), +// ), +// getWallets: lazyFunction(() => () => getWallets()), +// getWallet: lazyFunction(() => (address: string) => getWallet(address)), +// getDeployer: lazyFunction( +// () => async () => getDeployer(await getUpdatedProvider('getDeployer')), +// ), +// getNamedAccounts: lazyFunction( +// () => async () => +// getNamedAccounts( +// fork ? provider : await getUpdatedProvider('getNamedAccounts'), +// graphConfigPath, +// ), +// ), +// getTestAccounts: lazyFunction( +// () => async () => +// getTestAccounts(await getUpdatedProvider('getTestAccounts'), graphConfigPath), +// ), +// getAllAccounts: lazyFunction( +// () => async () => getAllAccounts(await getUpdatedProvider('getAllAccounts')), +// ), +// } +// } diff --git a/packages/hardhat-graph-protocol/src/index.ts b/packages/hardhat-graph-protocol/src/index.ts new file mode 100644 index 000000000..f4284811c --- /dev/null +++ b/packages/hardhat-graph-protocol/src/index.ts @@ -0,0 +1,10 @@ +import { extendConfig, extendEnvironment } from 'hardhat/config' +import { greExtendConfig, greExtendEnvironment } from './gre' + +// This import is needed to let the TypeScript compiler know that it should include your type +// extensions in your npm package's types file. +import './type-extensions' + +// ** Graph Runtime Environment (GRE) extensions for the HRE ** +extendConfig(greExtendConfig) +extendEnvironment(greExtendEnvironment) diff --git a/packages/hardhat-graph-protocol/src/logger.ts b/packages/hardhat-graph-protocol/src/logger.ts new file mode 100644 index 000000000..3529373f6 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/logger.ts @@ -0,0 +1,7 @@ +import debug from 'debug' + +const LOG_BASE = 'hardhat:graph' + +export const logDebug = debug(`${LOG_BASE}:debug`) +export const logWarn = debug(`${LOG_BASE}:warn`) +export const logError = debug(`${LOG_BASE}:error`) diff --git a/packages/hardhat-graph-protocol/src/sdk/address-book.ts b/packages/hardhat-graph-protocol/src/sdk/address-book.ts new file mode 100644 index 000000000..a8256caa7 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/address-book.ts @@ -0,0 +1,214 @@ +import fs from 'fs' + +import { AssertionError } from 'assert' +import { assertObject } from './utils/assertion' + +import { ContractList, loadContract } from './deployments/lib/contract' +import { logDebug, logError } from '../logger' +import { Provider, Signer } from 'ethers' + +// JSON format: +// { +// "": { +// "": { +// "address": "
", +// "proxy": true, +// "implementation": { ... } +// ... +// } +// } +export type AddressBookJson< + ChainId extends number = number, + ContractName extends string = string, +> = Record> + +export type AddressBookEntry = { + address: string + proxy?: boolean + implementation?: AddressBookEntry +} + +/** + * An abstract class to manage the address book + */ +export abstract class AddressBook< + ChainId extends number = number, + ContractName extends string = string, +> { + // The path to the address book file + public file: string + + // The chain id of the network the address book should be loaded for + public chainId: ChainId + + // The raw contents of the address book file + public addressBook: AddressBookJson + + public strictAssert: boolean + + /** + * Constructor for the `AddressBook` class + * + * @param _file the path to the address book file + * @param _chainId the chain id of the network the address book should be loaded for + * + * @throws AssertionError if the target file is not a valid address book + * @throws Error if the target file does not exist + */ + constructor(_file: string, _chainId: number, _strictAssert = false) { + this.strictAssert = _strictAssert + this.file = _file + if (!fs.existsSync(this.file)) throw new Error(`Address book path provided does not exist!`) + + logDebug(`Loading address book for chainId ${_chainId} from ${this.file}`) + this.assertChainId(_chainId) + this.chainId = _chainId + + // Ensure file is a valid address book + this.addressBook = JSON.parse(fs.readFileSync(this.file, 'utf8') || '{}') as AddressBookJson + this.assertAddressBookJson(this.addressBook) + + // If the address book is empty for this chain id, initialize it with an empty object + if (!this.addressBook[this.chainId]) { + this.addressBook[this.chainId] = {} as Record + } + } + + abstract isValidContractName(name: string): boolean + + abstract loadContracts(chainId: number, signerOrProvider?: Signer | Provider): ContractList + + // TODO: implement chain id validation? + assertChainId(chainId: string | number): asserts chainId is ChainId {} + + // Asserts the provided object is a valid address book + // Logs warnings for unsupported chain ids or invalid contract names + assertAddressBookJson( + json: unknown, + ): asserts json is AddressBookJson { + this._assertAddressBookJson(json) + + // // Validate contract names + const contractList = json[this.chainId] + + const contractNames = contractList ? Object.keys(contractList) : [] + for (const contract of contractNames) { + if (!this.isValidContractName(contract)) { + const message = `Detected invalid contract in address book: ${contract}, for chainId ${this.chainId}` + if (this.strictAssert) { + throw new Error(message) + } else { + logError(message) + } + } + } + } + + _assertAddressBookJson(json: unknown): asserts json is AddressBookJson { + assertObject(json, 'Assertion failed: address book is not an object') + + const contractList = json[this.chainId] + try { + assertObject(contractList, 'Assertion failed: chain contract list is not an object') + } catch (error) { + if (this.strictAssert) throw error + else return + } + + const contractNames = Object.keys(contractList) + for (const contractName of contractNames) { + this._assertAddressBookEntry(contractList[contractName]) + } + } + + _assertAddressBookEntry(json: unknown): asserts json is AddressBookEntry { + assertObject(json) + + try { + if (typeof json.address !== 'string') throw new AssertionError({ message: 'Invalid address' }) + if (json.proxy && typeof json.proxy !== 'boolean') + throw new AssertionError({ message: 'Invalid proxy' }) + if (json.implementation && typeof json.implementation !== 'object') + throw new AssertionError({ message: 'Invalid implementation' }) + } catch (error) { + if (this.strictAssert) throw error + else return + } + } + + /** + * List entry names in the address book + * + * @returns a list with all the names of the entries in the address book + */ + listEntries(): ContractName[] { + return Object.keys(this.addressBook[this.chainId]) as ContractName[] + } + + /** + * Get an entry from the address book + * + * @param name the name of the contract to get + * @returns the address book entry for the contract + * Returns an empty address book entry if the contract is not found + */ + getEntry(name: ContractName): AddressBookEntry { + try { + return this.addressBook[this.chainId][name] + } catch (_) { + // TODO: should we throw instead? + return { address: '0x0000000000000000000000000000000000000000' } + } + } + + /** + * Save an entry to the address book + * + * @param name the name of the contract to save + * @param entry the address book entry for the contract + */ + setEntry(name: ContractName, entry: AddressBookEntry): void { + this._assertAddressBookEntry(entry) + this.addressBook[this.chainId][name] = entry + try { + fs.writeFileSync(this.file, JSON.stringify(this.addressBook, null, 2)) + } catch (e: unknown) { + if (e instanceof Error) logError(`Error saving entry: ${e.message}`) + else logError(`Error saving entry`) + } + } + + /** + * Loads all contracts from an address book + * + * @param addressBook Address book to use + * @param signerOrProvider Signer or provider to use + * @param enableTxLogging Enable transaction logging to console and output file. Defaults to `true` + * @returns the loaded contracts + */ + _loadContracts( + artifactsPath: string | string[], + signerOrProvider?: Signer | Provider, + ): ContractList { + const contracts = {} as ContractList + for (const contractName of this.listEntries()) { + try { + const contract = loadContract( + contractName, + this.getEntry(contractName).address, + artifactsPath, + signerOrProvider, + ) + contracts[contractName] = contract + } catch (error) { + if (error instanceof Error) { + throw new Error(`Could not load contracts - ${error.message}`) + } else { + throw new Error(`Could not load contracts`) + } + } + } + + return contracts + } +} diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts new file mode 100644 index 000000000..48b6e59ca --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts @@ -0,0 +1,74 @@ +import path from 'path' + +import { Contract, Provider, Signer } from 'ethers' +import { logDebug, logError, logWarn } from '../../../logger' +import { AddressBook } from '../../address-book' +import { assertObject } from '../../utils/assertion' +import { GraphHorizonContractNameList } from './types' + +import type { GraphHorizonContractName, GraphHorizonContracts } from './types' + +export class GraphHorizonAddressBook extends AddressBook { + isValidContractName(name: string): boolean { + return isGraphHorizonContractName(name) + } + + loadContracts( + chainId: number, + signerOrProvider?: Signer | Provider, + ): GraphHorizonContracts { + logDebug('Loading Graph Network contracts...') + const artifactsPath = path.resolve('node_modules', '@graphprotocol/contracts/build/contracts') + + const contracts = this._loadContracts( + artifactsPath, + signerOrProvider, + ) + assertGraphHorizonContracts(contracts, chainId) + + // Iterator + contracts[Symbol.iterator] = function* () { + for (const key of Object.keys(this)) { + yield this[key as GraphHorizonContractName] as Contract + } + } + + return contracts + } +} + +function isGraphHorizonContractName(name: unknown): name is GraphHorizonContractName { + return ( + typeof name === 'string' + && GraphHorizonContractNameList.includes(name as GraphHorizonContractName) + ) +} + +function assertGraphHorizonContracts( + contracts: unknown, + chainId: number, + strictAssert?: boolean, +): asserts contracts is GraphHorizonContracts { + assertObject(contracts) + + // Allow loading contracts not defined in contract list but raise a warning + const contractNames = Object.keys(contracts) + if (!contractNames.every(c => isGraphHorizonContractName(c))) { + logWarn( + `Loaded unregistered GraphHorizon contract: ${contractNames.filter( + c => !isGraphHorizonContractName(c), + ).join()}`, + ) + } + + // Assert that all GraphNetworkContracts were loaded + for (const contractName of GraphHorizonContractNameList) { + if (!contracts[contractName]) { + const errMessage = `Missing GraphHorizon contract: ${contractName} for chainId ${chainId}` + logError(errMessage) + if (strictAssert) { + throw new Error(errMessage) + } + } + } +} diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts new file mode 100644 index 000000000..b7c7c0285 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts @@ -0,0 +1,9 @@ +import { GraphHorizonAddressBook } from './address-book' + +import type { GraphHorizonContractName, GraphHorizonContracts, GraphHorizonRuntimeEnvironment } from './types' + +export { + GraphHorizonAddressBook, +} + +export type { GraphHorizonContractName, GraphHorizonContracts, GraphHorizonRuntimeEnvironment } diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/types.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/types.ts new file mode 100644 index 000000000..0bbb9bd21 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/types.ts @@ -0,0 +1,45 @@ +import type { + Controller, + EpochManager, + GraphProxyAdmin, + L2GraphToken, + L2GraphTokenGateway, + RewardsManager, +} from '@graphprotocol/contracts' +import type { Contract } from 'ethers' +import type { ContractList } from '../lib/contract' +import type { GraphHorizonAddressBook } from './address-book' + +export const GraphHorizonContractNameList = [ + 'GraphProxyAdmin', + 'Controller', + 'EpochManager', + 'RewardsManager', + 'L2GraphToken', + 'L2GraphTokenGateway', +] as const + +export type GraphHorizonContractName = (typeof GraphHorizonContractNameList)[number] + +export interface GraphHorizonContracts extends ContractList { + // Imports from @graphprotocol/contracts use ethers v5 + // We trick the type system by &ing the Contract type + EpochManager: EpochManager & Contract + RewardsManager: RewardsManager & Contract + GraphProxyAdmin: GraphProxyAdmin & Contract + Controller: Controller & Contract + L2GraphToken?: L2GraphToken & Contract + L2GraphTokenGateway?: L2GraphTokenGateway & Contract + + // Aliases + GraphToken: L2GraphToken + GraphTokenGateway: L2GraphTokenGateway + + // Iterator + [Symbol.iterator]: () => Generator +} + +export interface GraphHorizonRuntimeEnvironment { + contracts: GraphHorizonContracts + addressBook: GraphHorizonAddressBook +} diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/lib/artifact.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/lib/artifact.ts new file mode 100644 index 000000000..3c50a1fe6 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/lib/artifact.ts @@ -0,0 +1,41 @@ +import { Artifacts } from 'hardhat/internal/artifacts' +import { logError } from '../../../logger' + +import type { Artifact } from 'hardhat/types' + +/** + * Load a contract's artifact from the build output folder + * If multiple build output folders are provided, they will be searched in order + * @param name Name of the contract + * @param buildDir Path to the build output folder(s). Defaults to `build/contracts`. + * @returns The artifact corresponding to the contract name + */ +export const loadArtifact = (name: string, buildDir?: string[] | string): Artifact => { + let artifacts: Artifacts + let artifact: Artifact | undefined + buildDir = buildDir ?? ['build/contracts'] + + if (typeof buildDir === 'string') { + buildDir = [buildDir] + } + + for (const dir of buildDir) { + try { + artifacts = new Artifacts(dir) + artifact = artifacts.readArtifactSync(name) + break + } catch (error) { + if (error instanceof Error) { + logError(`Could not load artifact ${name} from ${dir} - ${error.message}`) + } else { + logError(`Could not load artifact ${name} from ${dir}`) + } + } + } + + if (artifact === undefined) { + throw new Error(`Could not load artifact ${name}`) + } + + return artifact +} diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts new file mode 100644 index 000000000..18113fb30 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts @@ -0,0 +1,39 @@ +import { Contract, Provider, Signer } from 'ethers' +import { loadArtifact } from './artifact' + +export type ContractList = Partial> + +/** + * Loads a contract from an address book + * + * @param name Name of the contract + * @param addressBook Address book to use + * @param signerOrProvider Signer or provider to use + * @param enableTxLogging Enable transaction logging to console and output file. Defaults to `true` + * @param optional If true, the contract is optional and will not throw if it cannot be loaded + * @returns the loaded contract + * + * @throws Error if the contract could not be loaded + */ +export function loadContract( + name: ContractName, + address: string, + artifactsPath: string | string[], + signerOrProvider?: Signer | Provider, +): Contract { + try { + let contract = new Contract(address, loadArtifact(name, artifactsPath).abi, signerOrProvider) + + if (signerOrProvider) { + contract = contract.connect(signerOrProvider) as Contract + } + + return contract + } catch (err: unknown) { + if (err instanceof Error) { + throw new Error(`Could not load contract ${name} - ${err.message}`) + } else { + throw new Error(`Could not load contract ${name}`) + } + } +} diff --git a/packages/hardhat-graph-protocol/src/sdk/utils/assertion.ts b/packages/hardhat-graph-protocol/src/sdk/utils/assertion.ts new file mode 100644 index 000000000..f215a9497 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/utils/assertion.ts @@ -0,0 +1,11 @@ +import { AssertionError } from 'assert' + +export function assertObject( + value: unknown, + errorMessage?: string, +): asserts value is Record { + if (typeof value !== 'object' || value == null) + throw new AssertionError({ + message: errorMessage ?? 'Not an object', + }) +} diff --git a/packages/hardhat-graph-protocol/src/sdk/utils/error.ts b/packages/hardhat-graph-protocol/src/sdk/utils/error.ts new file mode 100644 index 000000000..09df0ac3d --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/utils/error.ts @@ -0,0 +1,9 @@ +import { HardhatPluginError } from 'hardhat/plugins' +import { logError } from '../../logger' + +export class GraphPluginError extends HardhatPluginError { + constructor(message: string) { + super('GraphRuntimeEnvironment', message) + logError(message) + } +} diff --git a/packages/hardhat-graph-protocol/src/sdk/utils/path.ts b/packages/hardhat-graph-protocol/src/sdk/utils/path.ts new file mode 100644 index 000000000..3fcf810d7 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/utils/path.ts @@ -0,0 +1,8 @@ +import path from 'path' + +export function normalizePath(_path: string, graphPath?: string): string { + if (!path.isAbsolute(_path) && graphPath !== undefined) { + _path = path.join(graphPath, _path) + } + return _path +} diff --git a/packages/hardhat-graph-protocol/src/type-extensions.ts b/packages/hardhat-graph-protocol/src/type-extensions.ts new file mode 100644 index 000000000..f8bfd7427 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/type-extensions.ts @@ -0,0 +1,53 @@ +// To extend one of Hardhat's types, you need to import the module where it has been defined, and redeclare it. +import 'hardhat/types/config' +import 'hardhat/types/runtime' + +import type { GraphRuntimeEnvironment, GraphRuntimeEnvironmentOptions } from './types' + +declare module 'hardhat/types/runtime' { + export interface HardhatRuntimeEnvironment { + graph: (opts?: GraphRuntimeEnvironmentOptions) => GraphRuntimeEnvironment + } +} + +declare module 'hardhat/types/config' { + export interface HardhatConfig { + graph: GraphRuntimeEnvironmentOptions + } + + export interface HardhatUserConfig { + graph: GraphRuntimeEnvironmentOptions + } + + export interface HardhatNetworkConfig { + addressBooks?: { + [deployment: string]: string + } + } + + export interface HardhatNetworkUserConfig { + addressBooks?: { + [deployment: string]: string + } + } + + export interface HttpNetworkConfig { + addressBooks?: { + [deployment: string]: string + } + } + + export interface HttpNetworkUserConfig { + addressBooks?: { + [deployment: string]: string + } + } + + export interface ProjectPathsConfig { + graph?: string + } + + export interface ProjectPathsUserConfig { + graph?: string + } +} diff --git a/packages/hardhat-graph-protocol/src/types.ts b/packages/hardhat-graph-protocol/src/types.ts new file mode 100644 index 000000000..35e1069da --- /dev/null +++ b/packages/hardhat-graph-protocol/src/types.ts @@ -0,0 +1,24 @@ +import type { GraphHorizonRuntimeEnvironment } from './sdk/deployments/horizon' + +export const GraphDeploymentsList = [ + 'horizon', +] as const + +export type GraphDeployment = (typeof GraphDeploymentsList)[number] + +export function isGraphDeployment(deployment: unknown): deployment is GraphDeployment { + return ( + typeof deployment === 'string' + && GraphDeploymentsList.includes(deployment as GraphDeployment) + ) +} + +export type GraphRuntimeEnvironmentOptions = { + addressBooks?: { + [deployment in GraphDeployment]: string + } +} + +export type GraphRuntimeEnvironment = { + [deployment in GraphDeployment]: GraphHorizonRuntimeEnvironment +} diff --git a/packages/hardhat-graph-protocol/test/config.test.ts b/packages/hardhat-graph-protocol/test/config.test.ts new file mode 100644 index 000000000..dbc84342c --- /dev/null +++ b/packages/hardhat-graph-protocol/test/config.test.ts @@ -0,0 +1,52 @@ +import path from 'path' + +import { expect } from 'chai' +import { getAddressBookPath } from '../src/config' +import { useEnvironment } from './helpers' + +describe('GRE init functions', function () { + // No address book - should throw + describe('getAddressBookPath', function () { + useEnvironment('default-config', 'mainnet') + + it('should throw if no address book is specified', function () { + expect(() => getAddressBookPath(this.hre, {})).to.throw('Must set a an addressBook path!') + }) + }) + + describe('getAddressBookPath', function () { + useEnvironment('network-address-book', 'mainnet') + + // Address book via opts should be used + it('should use opts parameter if available', function () { + const addressBook = getAddressBookPath(this.hre, { + addressBook: 'addresses-opt.json', + }) + expect(path.basename(addressBook)).to.equal('addresses-opt.json') + }) + + // Address book via network config should be used + it('should use HH network config', function () { + const addressBook = getAddressBookPath(this.hre, {}) + expect(path.basename(addressBook)).to.equal('addresses-network.json') + }) + }) + + describe('getAddressBookPath', function () { + useEnvironment('global-address-book', 'mainnet') + + // Address book via global config should be used + it('should use HH global config', function () { + const addressBook = getAddressBookPath(this.hre, {}) + expect(path.basename(addressBook)).to.equal('addresses-global.json') + }) + }) + + describe('getAddressBookPath with a non existent address book', function () { + useEnvironment('invalid-address-book', 'mainnet') + + it('should throw if address book doesn\'t exist', function () { + expect(() => getAddressBookPath(this.hre, {})).to.throw(/Address book not found: /) + }) + }) +}) diff --git a/packages/hardhat-graph-protocol/test/fixtures/default-config/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/default-config/hardhat.config.ts new file mode 100644 index 000000000..17de4a585 --- /dev/null +++ b/packages/hardhat-graph-protocol/test/fixtures/default-config/hardhat.config.ts @@ -0,0 +1,8 @@ +module.exports = { + networks: { + mainnet: { + chainId: 1, + url: `https://mainnet.infura.io/v3/123456`, + }, + }, +} diff --git a/packages/hardhat-graph-protocol/test/fixtures/files/addresses-global.json b/packages/hardhat-graph-protocol/test/fixtures/files/addresses-global.json new file mode 100644 index 000000000..e69de29bb diff --git a/packages/hardhat-graph-protocol/test/fixtures/files/addresses-hre.json b/packages/hardhat-graph-protocol/test/fixtures/files/addresses-hre.json new file mode 100644 index 000000000..e69de29bb diff --git a/packages/hardhat-graph-protocol/test/fixtures/files/addresses-network.json b/packages/hardhat-graph-protocol/test/fixtures/files/addresses-network.json new file mode 100644 index 000000000..e69de29bb diff --git a/packages/hardhat-graph-protocol/test/fixtures/files/addresses-opt.json b/packages/hardhat-graph-protocol/test/fixtures/files/addresses-opt.json new file mode 100644 index 000000000..e69de29bb diff --git a/packages/hardhat-graph-protocol/test/fixtures/global-address-book/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/global-address-book/hardhat.config.ts new file mode 100644 index 000000000..b7224dfa4 --- /dev/null +++ b/packages/hardhat-graph-protocol/test/fixtures/global-address-book/hardhat.config.ts @@ -0,0 +1,48 @@ +import '../../../src/index' + +import type { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + paths: { + graph: '../files', + }, + solidity: '0.8.9', + defaultNetwork: 'hardhat', + networks: { + 'hardhat': { + chainId: 1337, + accounts: { + mnemonic: 'pumpkin orient can short never warm truth legend cereal tourist craft skin', + }, + }, + 'mainnet': { + chainId: 1, + url: `https://mainnet.infura.io/v3/123456`, + }, + 'arbitrum-one': { + chainId: 42161, + url: 'https://arb1.arbitrum.io/rpc', + }, + 'goerli': { + chainId: 5, + url: `https://goerli.infura.io/v3/123456`, + }, + 'arbitrum-goerli': { + chainId: 421613, + url: 'https://goerli-rollup.arbitrum.io/rpc', + }, + 'localhost': { + chainId: 1337, + url: 'http://127.0.0.1:8545', + }, + 'arbitrum-rinkeby': { + chainId: 421611, + url: 'http://127.0.0.1:8545', + }, + }, + graph: { + addressBook: 'addresses-global.json', + }, +} + +export default config diff --git a/packages/hardhat-graph-protocol/test/fixtures/invalid-address-book/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/invalid-address-book/hardhat.config.ts new file mode 100644 index 000000000..995dacc17 --- /dev/null +++ b/packages/hardhat-graph-protocol/test/fixtures/invalid-address-book/hardhat.config.ts @@ -0,0 +1,48 @@ +import '../../../src/index' + +import type { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + paths: { + graph: '../files', + }, + solidity: '0.8.9', + defaultNetwork: 'hardhat', + networks: { + 'hardhat': { + chainId: 1337, + accounts: { + mnemonic: 'pumpkin orient can short never warm truth legend cereal tourist craft skin', + }, + }, + 'mainnet': { + chainId: 1, + url: `https://mainnet.infura.io/v3/123456`, + }, + 'arbitrum-one': { + chainId: 42161, + url: 'https://arb1.arbitrum.io/rpc', + }, + 'goerli': { + chainId: 5, + url: `https://goerli.infura.io/v3/123456`, + }, + 'arbitrum-goerli': { + chainId: 421613, + url: 'https://goerli-rollup.arbitrum.io/rpc', + }, + 'localhost': { + chainId: 1337, + url: 'http://127.0.0.1:8545', + }, + 'arbitrum-rinkeby': { + chainId: 421611, + url: 'http://127.0.0.1:8545', + }, + }, + graph: { + addressBook: 'addresses-invalid.json', + }, +} + +export default config diff --git a/packages/hardhat-graph-protocol/test/fixtures/network-address-book/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/network-address-book/hardhat.config.ts new file mode 100644 index 000000000..51fd2341c --- /dev/null +++ b/packages/hardhat-graph-protocol/test/fixtures/network-address-book/hardhat.config.ts @@ -0,0 +1,49 @@ +import '../../../src/index' + +import type { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + paths: { + graph: '../files', + }, + solidity: '0.8.9', + defaultNetwork: 'hardhat', + networks: { + 'hardhat': { + chainId: 1337, + accounts: { + mnemonic: 'pumpkin orient can short never warm truth legend cereal tourist craft skin', + }, + }, + 'mainnet': { + chainId: 1, + url: `https://mainnet.infura.io/v3/123456`, + addressBook: 'addresses-network.json', + }, + 'arbitrum-one': { + chainId: 42161, + url: 'https://arb1.arbitrum.io/rpc', + }, + 'goerli': { + chainId: 5, + url: `https://goerli.infura.io/v3/123456`, + }, + 'arbitrum-goerli': { + chainId: 421613, + url: 'https://goerli-rollup.arbitrum.io/rpc', + }, + 'localhost': { + chainId: 1337, + url: 'http://127.0.0.1:8545', + }, + 'arbitrum-rinkeby': { + chainId: 421611, + url: 'http://127.0.0.1:8545', + }, + }, + graph: { + addressBook: 'addresses-global.json', + }, +} + +export default config diff --git a/packages/hardhat-graph-protocol/test/fixtures/no-path-config/addresses.json b/packages/hardhat-graph-protocol/test/fixtures/no-path-config/addresses.json new file mode 100644 index 000000000..e69de29bb diff --git a/packages/hardhat-graph-protocol/test/fixtures/no-path-config/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/no-path-config/hardhat.config.ts new file mode 100644 index 000000000..0329f449e --- /dev/null +++ b/packages/hardhat-graph-protocol/test/fixtures/no-path-config/hardhat.config.ts @@ -0,0 +1,45 @@ +import '../../../src/index' + +import type { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + solidity: '0.8.9', + defaultNetwork: 'hardhat', + networks: { + 'hardhat': { + chainId: 1337, + accounts: { + mnemonic: 'pumpkin orient can short never warm truth legend cereal tourist craft skin', + }, + }, + 'mainnet': { + chainId: 1, + url: `https://mainnet.infura.io/v3/123456`, + }, + 'arbitrum-one': { + chainId: 42161, + url: 'https://arb1.arbitrum.io/rpc', + }, + 'goerli': { + chainId: 5, + url: `https://goerli.infura.io/v3/123456`, + }, + 'arbitrum-goerli': { + chainId: 421613, + url: 'https://goerli-rollup.arbitrum.io/rpc', + }, + 'localhost': { + chainId: 1337, + url: 'http://127.0.0.1:8545', + }, + 'arbitrum-rinkeby': { + chainId: 421611, + url: 'http://127.0.0.1:8545', + }, + }, + graph: { + addressBook: 'addresses.json', + }, +} + +export default config diff --git a/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts new file mode 100644 index 000000000..c8a4b55fc --- /dev/null +++ b/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts @@ -0,0 +1,48 @@ +import '../../../src/index' + +import type { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + paths: { + graph: '../files', + }, + solidity: '0.8.9', + defaultNetwork: 'hardhat', + networks: { + 'hardhat': { + chainId: 1337, + accounts: { + mnemonic: 'pumpkin orient can short never warm truth legend cereal tourist craft skin', + }, + }, + 'mainnet': { + chainId: 1, + url: `https://mainnet.infura.io/v3/123456`, + }, + 'arbitrum-one': { + chainId: 42161, + url: 'https://arb1.arbitrum.io/rpc', + }, + 'goerli': { + chainId: 5, + url: `https://goerli.infura.io/v3/123456`, + }, + 'arbitrum-goerli': { + chainId: 421613, + url: 'https://goerli-rollup.arbitrum.io/rpc', + }, + 'localhost': { + chainId: 1337, + url: 'http://127.0.0.1:8545', + }, + 'arbitrum-rinkeby': { + chainId: 421611, + url: 'http://127.0.0.1:8545', + }, + }, + graph: { + addressBook: 'addresses-hre.json', + }, +} + +export default config diff --git a/packages/hardhat-graph-protocol/test/gre.test.ts b/packages/hardhat-graph-protocol/test/gre.test.ts new file mode 100644 index 000000000..4331ed1c4 --- /dev/null +++ b/packages/hardhat-graph-protocol/test/gre.test.ts @@ -0,0 +1,58 @@ +import path from 'path' + +import { assert, expect } from 'chai' +import { useEnvironment } from './helpers' + +describe('GRE usage', function () { + describe('Project not using GRE', function () { + useEnvironment('default-config', 'mainnet') + + it('should throw when accessing hre.graph()', function () { + expect(() => this.hre.graph()).to.throw() + }) + }) + + describe(`Project using GRE: path-config`, function () { + useEnvironment('path-config', 'mainnet') + + it('should add the graph path to the config', function () { + assert.equal( + this.hre.config.paths.graph, + path.join(__dirname, 'fixtures/files'), + ) + }) + }) + + describe(`Project using GRE: no-path-config`, function () { + useEnvironment('no-path-config', 'mainnet') + + it('should add the graph path to the config', function () { + assert.equal( + this.hre.config.paths.graph, + path.join(__dirname, 'fixtures/no-path-config'), + ) + }) + }) + + describe(`Project using GRE: global-address-book`, function () { + useEnvironment('global-address-book', 'mainnet') + + it('should use the global address book', function () { + assert.equal( + this.hre.graph().addressBook.file, + path.join(__dirname, 'fixtures/files/addresses-global.json'), + ) + }) + }) + + describe(`Project using GRE: network-address-book`, function () { + useEnvironment('network-address-book', 'mainnet') + + it('should use the network address book', function () { + assert.equal( + this.hre.graph().addressBook.file, + path.join(__dirname, 'fixtures/files/addresses-network.json'), + ) + }) + }) +}) diff --git a/packages/hardhat-graph-protocol/test/helpers.ts b/packages/hardhat-graph-protocol/test/helpers.ts new file mode 100644 index 000000000..561e59c0e --- /dev/null +++ b/packages/hardhat-graph-protocol/test/helpers.ts @@ -0,0 +1,26 @@ +import path from 'path' +import { resetHardhatContext } from 'hardhat/plugins-testing' + +import type { HardhatRuntimeEnvironment } from 'hardhat/types' + +declare module 'mocha' { + interface Context { + hre: HardhatRuntimeEnvironment + } +} + +export function useEnvironment(fixtureProjectName: string, network?: string): void { + beforeEach('Loading hardhat environment', function () { + process.chdir(path.join(__dirname, 'fixtures', fixtureProjectName)) + + if (network !== undefined) { + process.env.HARDHAT_NETWORK = network + } + this.hre = require('hardhat') + }) + + afterEach('Resetting hardhat', function () { + resetHardhatContext() + delete process.env.HARDHAT_NETWORK + }) +} diff --git a/packages/hardhat-graph-protocol/tsconfig.json b/packages/hardhat-graph-protocol/tsconfig.json new file mode 100644 index 000000000..9ddee2404 --- /dev/null +++ b/packages/hardhat-graph-protocol/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "outDir": "dist", + }, + "include": ["eslint.config.js", "src/**/*.ts"] +} diff --git a/packages/horizon/addresses.json b/packages/horizon/addresses.json new file mode 100644 index 000000000..ae66613a2 --- /dev/null +++ b/packages/horizon/addresses.json @@ -0,0 +1,1453 @@ +{ + "1": { + "IENS": { + "address": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" + }, + "IEthereumDIDRegistry": { + "address": "0xdCa7EF03e98e0DC2B855bE647C39ABe984fcF21B" + }, + "GraphProxyAdmin": { + "address": "0xF3B000a6749259539aF4E49f24EEc74Ea0e71430", + "creationCodeHash": "0x26a6f47e71ad242e264768571ce7223bf5a86fd0113ab6cb8200f65820232904", + "runtimeCodeHash": "0xd5330527cfb09df657adc879d8ad704ce6b8d5917265cabbd3eb073d1399f122", + "txHash": "0xc5fe1a9f70e3cc4d286e19e3ee8ee9a0639c7415aea22a3f308951abf300382c" + }, + "BancorFormula": { + "address": "0xd0C61e8F15d9deF697E1100663eD7dA74d3727dC", + "creationCodeHash": "0x17f6de9ab8a9bcf03a548c01d620a32caf1f29be8d90a9688ebee54295f857ef", + "runtimeCodeHash": "0x97a57f69b0029383398d02587a3a357168950d61622fe9f9710bf02b59740d63", + "txHash": "0xcd0e28e7d328ff306bb1f2079e594ff9d04d09f21bc5f978b790c8d44b02055a" + }, + "Controller": { + "address": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117", + "creationCodeHash": "0x7f37a1844c38fffd5390d2114804ffc4e5cf66dfb5c7bd67a32a4f5d10eebd2d", + "runtimeCodeHash": "0x929c62381fbed59483f832611752177cc2642e1e35fedeeb6cd9703e278448a0", + "txHash": "0x12b13ed4ac6fee14335be09df76171b26223d870977524cfdce46c11112a5c04" + }, + "EpochManager": { + "address": "0x64F990Bf16552A693dCB043BB7bf3866c5E05DdB", + "initArgs": [ + { + "name": "controller", + "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" + }, + { + "name": "lengthInBlocks", + "value": 6646 + } + ], + "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", + "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", + "txHash": "0x9116a77a4e87eb3fe28514a26b1a6e3ee5ce982f9df3c18aadfc36d4f7f050e7", + "proxy": true, + "implementation": { + "address": "0x3fab259F2392F733c60C19492B5678E5D2D2Ee31", + "creationCodeHash": "0xf03074bb7f026a2574b6ffb5d0f63f0c4fee81e004e1c46ef262dd5802d3384f", + "runtimeCodeHash": "0x0d078a0bf778c6c713c46979ac668161a0a0466356252e47082f80912e4495b2", + "txHash": "0x730141db9a1dc5c9429f7543442e34e9eb994610e2ceabdedb6d322e1bedf2aa" + } + }, + "GraphToken": { + "address": "0xc944E90C64B2c07662A292be6244BDf05Cda44a7", + "constructorArgs": [ + { + "name": "initialSupply", + "value": "10000000000000000000000000000" + } + ], + "creationCodeHash": "0x30da7a30d71fbd41d3327e4d0183401f257af3e905a0c68ebfd18b590b27b530", + "runtimeCodeHash": "0xb964f76194a04272e7582382a4d6bd6271bbb90deb5c1fd3ae3913504ea3a830", + "txHash": "0x079625b9f58a40f1948b396b7007d09ff4aa193d7ec798923910fc179294cab8" + }, + "ServiceRegistry": { + "address": "0xaD0C9DaCf1e515615b0581c8D7E295E296Ec26E6", + "initArgs": [ + { + "name": "controller", + "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" + } + ], + "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", + "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", + "txHash": "0x94cbb1d3863e33bf92acc6fab534c5ce63a9d1347958a323ae496b06f710f042", + "proxy": true, + "implementation": { + "address": "0x866232Ec9a9F918a821eBa561Cc5FC960Ef5B3aa", + "creationCodeHash": "0xf5fa541b43d15fade518feb63a95a73b9c67626108ead259e444af3a7ae1804f", + "runtimeCodeHash": "0x9856d2c2985f410f2f77e456fe6163827ea5251eb5e3f3768d3d4f8868187882", + "txHash": "0xdf811598fbfbc487b16b5bb3444ed47ae3107d3dcde8dbd770e8810315f942b5" + } + }, + "GraphCurationToken": { + "address": "0xb2E26f17Aea8eFA534e15Bde5C79c25D0C3dfa2e", + "creationCodeHash": "0x7e9a56b6fc05d428d1c1116eaa88a658f05487b493d847bfe5c69e35ec34f092", + "runtimeCodeHash": "0x587f9d4e9ecf9e7048d9f42f027957ca34ee6a95ca37d9758d8cd0ee16e89818", + "txHash": "0x68eb11f4d6eaec5036c97b4c6102a509ac31933f1fe011f275b3e5fee30b6590" + }, + "Curation": { + "address": "0x8FE00a685Bcb3B2cc296ff6FfEaB10acA4CE1538", + "initArgs": [ + { + "name": "controller", + "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" + }, + { + "name": "bondingCurve", + "value": "0xd0C61e8F15d9deF697E1100663eD7dA74d3727dC" + }, + { + "name": "reserveRatio", + "value": 500000 + }, + { + "name": "curationTaxPercentage", + "value": 25000 + }, + { + "name": "minimumCurationDeposit", + "value": "1000000000000000000" + } + ], + "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", + "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", + "txHash": "0x64d8d94e21f1923bd1793011ba28f24befd57b511622920716238b05595dac7d", + "proxy": true, + "implementation": { + "address": "0xDeb46851907fd85DD475780CcE2eE0D67c969825", + "creationCodeHash": "0x32ec24cd745738aea9b8cb693d4a20f3cf219226da985ab92d270d3e0b5f7f65", + "runtimeCodeHash": "0xfc0db997a425bc44ee6d6f1e2fd6471227489a22c94f1b358b900134e7ce6308", + "txHash": "0xe95fd068849d1c9f49fbeadb3e7618e1748cc581406d7fdf15204a49d90d2f02" + } + }, + "L1GNS": { + "address": "0xaDcA0dd4729c8BA3aCf3E99F3A9f471EF37b6825", + "initArgs": [ + { + "name": "controller", + "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" + }, + { + "name": "bondingCurve", + "value": "0xd0C61e8F15d9deF697E1100663eD7dA74d3727dC" + }, + { + "name": "didRegistry", + "value": "0xdca7ef03e98e0dc2b855be647c39abe984fcf21b" + } + ], + "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", + "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", + "txHash": "0x7ef90b0477e5c5d05bbd203af7d2bf15224640204e12abb07331df11425d2d00", + "proxy": true, + "implementation": { + "address": "0x83A5B6C542aB20436087Fc79724bdF06ea80f836", + "creationCodeHash": "0xc34de4bdb2c1f364bc3aed96ac77248518578af009a60597835325c0346cc639", + "runtimeCodeHash": "0x134ddad3a28975b2b246e41fc21f647a0b6a6c47d170aea23c9d9ef295cfdd01", + "txHash": "0x0c26745e6d492737a64c253f2384bb2af1ec63a64088799b208e3f0563a528ce" + } + }, + "L1Staking": { + "address": "0xF55041E37E12cD407ad00CE2910B8269B01263b9", + "initArgs": [ + { + "name": "controller", + "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" + }, + { + "name": "minimumIndexerStake", + "value": "100000000000000000000000" + }, + { + "name": "thawingPeriod", + "value": 186092 + }, + { + "name": "protocolPercentage", + "value": 10000 + }, + { + "name": "curationPercentage", + "value": 100000 + }, + { + "name": "channelDisputeEpochs", + "value": 7 + }, + { + "name": "maxAllocationEpochs", + "value": 28 + }, + { + "name": "delegationUnbondingPeriod", + "value": 28 + }, + { + "name": "delegationRatio", + "value": 16 + }, + { + "name": "rebateAlphaNumerator", + "value": 77 + }, + { + "name": "rebateAlphaDenominator", + "value": 100 + } + ], + "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", + "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", + "txHash": "0x6c92edf1c385983d57be0635cf40e1d1068d778edecf2be1631f51556c731af7", + "proxy": true, + "implementation": { + "address": "0x20a14D78848BC8B3F3d4B77239F2adC3C0259A10", + "creationCodeHash": "0x2f3c1dcd9c0abbafd708a5ba243e4afaa115a18f7a4a7db9728cc75e8a8c48fb", + "runtimeCodeHash": "0x4c9896765a37b29d0de3a6f37df1903f7efe1f62e937cb31fdfedd8be7f3008e", + "txHash": "0x6c096b17b867db5775e8d300f0469dec888dde8dbcee03a2294383e23150fbe5", + "libraries": { + "LibExponential": "0xD0AAe7a0A6Ae551DCA969183e1bB376F8a455Ea1" + } + } + }, + "RewardsManager": { + "address": "0x9Ac758AB77733b4150A901ebd659cbF8cB93ED66", + "initArgs": [ + { + "name": "controller", + "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" + }, + { + "name": "issuanceRate", + "value": "1000000012184945188" + } + ], + "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", + "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", + "txHash": "0xd3a4d1b3e250e606f56417fd6e43d35bc794e793b1c5be4ffbecc3a43ca1b7b6", + "proxy": true, + "implementation": { + "address": "0xD92944C84826Be7d1D168B239D30AF4583E085e5", + "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", + "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", + "txHash": "0x55256a323baca3666f9c9f4e4141f037aecd7c5110b7db1a3f3ab28802c8dd48" + } + }, + "DisputeManager": { + "address": "0x97307b963662cCA2f7eD50e38dCC555dfFc4FB0b", + "initArgs": [ + { + "name": "controller", + "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" + }, + { + "name": "arbitrator", + "value": "0xE1FDD398329C6b74C14cf19100316f0826a492d3" + }, + { + "name": "minimumDeposit", + "value": "10000000000000000000000" + }, + { + "name": "fishermanRewardPercentage", + "value": 500000 + }, + { + "name": "slashingPercentage", + "value": 25000 + } + ], + "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", + "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", + "txHash": "0x90cd5852f5824f76d93814ffea26040ff503c81a84c4430e3688f219f9b48465", + "proxy": true, + "implementation": { + "address": "0x444c138bf2b151f28a713b0ee320240365a5bfc2", + "creationCodeHash": "0xc00c4702d9683f70a90f0b73ce1842e66fa4c26b2cf75fb486a016bb7bac2102", + "runtimeCodeHash": "0x2bb6445bf9e12618423efe9ef64d05e14d283979829e751cd24685c1440c403f", + "txHash": "0x413cd4f8e9e70ad482500772c1f13b0be48deb42d7f2d0d5a74b56d5a6bd8a4d" + } + }, + "AllocationExchange": { + "address": "0x4a53cf3b3EdA545dc61dee0cA21eA8996C94385f", + "initArgs": [ + { + "name": "graphToken", + "value": "0xc944e90c64b2c07662a292be6244bdf05cda44a7" + }, + { + "name": "staking", + "value": "0xf55041e37e12cd407ad00ce2910b8269b01263b9" + }, + { + "name": "governor", + "value": "0x74db79268e63302d3fc69fb5a7627f7454a41732" + }, + { + "name": "authority", + "value": "0x79fd74da4c906509862c8fe93e87a9602e370bc4" + } + ], + "creationCodeHash": "0x1c7b0d7e81fc15f8ccc5b159e2cedb1f152653ebbce895b59eb74a1b26826fda", + "runtimeCodeHash": "0xa63c77e0724a5f679660358452e388f60379f1331e74542afb1436ffb213b960", + "txHash": "0x2ecd036c562f2503af9eaa1a9bca3729bd31ec8a91677530eefbecb398b793ba" + }, + "SubgraphNFTDescriptor": { + "address": "0x8F0B7e136891e8Bad6aa4Abcb64EeeFE29dC2Af0", + "creationCodeHash": "0x7ac0757e66857e512df199569ee11c47a61b00a8d812469b79afa5dafa98c0ed", + "runtimeCodeHash": "0x9a34ad6b202bdfa95ea85654ea2e0dd40a4b8b10847f1c3d3d805fa95a078a3d", + "txHash": "0x77d98358726575ae044ac988b98b63f537951ccae2010e7177c4a7833dce9158" + }, + "SubgraphNFT": { + "address": "0x24e36639b3A3aaA9c928a8A6f12d34F942f1ab67", + "creationCodeHash": "0x8c9929ec6293458209f9cbadd96821604765e3656fe3c7b289b99194ede15336", + "runtimeCodeHash": "0x6309a51754b6bec245685c7a81059dc28e3756f1045f18d059abc9294f454a6a", + "txHash": "0x106c31f2c24a5285c47a766422823766f1c939034513e85613d70d99ef697173" + }, + "BridgeEscrow": { + "address": "0x36aFF7001294daE4C2ED4fDEfC478a00De77F090", + "initArgs": ["0x24CCD4D3Ac8529fF08c58F74ff6755036E616117"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x218aff2c804dd3dfe5064b08cab83ffb37382ca2aea1a225c2ead02ec99f38b5", + "proxy": true, + "implementation": { + "address": "0xBcD54513aa593646d72aEA31406c633C235Ad6EA", + "creationCodeHash": "0x6a1fc897c0130a1c99221cde1938d247de13a0861111ac47ad81c691f323df1a", + "runtimeCodeHash": "0xc8e31a4ebea0c3e43ceece974071ba0b6db2bed6725190795e07a2d369d2a8ab", + "txHash": "0x92908e33b54f59ec13a0f7bd29b818c421742294b9974d73859e0bde871bafb9" + } + }, + "L1GraphTokenGateway": { + "address": "0x01cDC91B0A9bA741903aA3699BF4CE31d6C5cC06", + "initArgs": ["0x24CCD4D3Ac8529fF08c58F74ff6755036E616117"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xd327568a286d6fcda1a6b78a14c87d660523a6900be901d6a7fbc2504faff64b", + "proxy": true, + "implementation": { + "address": "0xD41ca6A1d034D178c196DFa916f22f7D1a1B8222", + "creationCodeHash": "0x7d6f46e4801d562a8c6fc37779711cce39b3544ea62c6c6517d4b06e8604e38c", + "runtimeCodeHash": "0xa0c0a37340ee949d31c3d41b642c507c58f225c09da9ae3d378e5148cd27081a", + "txHash": "0x25f4234807c7f09b813d4e413311bbe440c8257bc050c71678f63a7abc6e643e" + } + }, + "StakingExtension": { + "address": "0xA479c00cDa8C07bce458D7a826C7b091672EB92C", + "creationCodeHash": "0xe23c59dbfb94b0cf7ef58f654b905977624ce57eaae2fce692edb28ca3f1b3ba", + "runtimeCodeHash": "0xca8ad20187bc87e0e04a15184f529787dd23a0095047d411e1b271617a951c49", + "txHash": "0x13cd940ba9c8dd576f9f311e805539792f4caa88ada5a1b516355edabc776dd8" + } + }, + "5": { + "GraphProxyAdmin": { + "address": "0x6D47902c3358E0BCC06171DE935cB23D8E276fdd", + "creationCodeHash": "0x8b9a4c23135748eb0e4d0e743f7276d86264ace935d23f9aadcfccd64b482055", + "runtimeCodeHash": "0x47aa67e4a85090fe7324268b55fb7b320ee7a8937f2ad02480b71d4bb3332b13", + "txHash": "0xd4be829c13c741b8b56ca5ee7d98d86237ce44df7c11eff73df26cd87d5cab94" + }, + "BancorFormula": { + "address": "0x2DFDC3e11E035dD96A4aB30Ef67fab4Fb6EC01f2", + "creationCodeHash": "0x7ae36017eddb326ddd79c7363781366121361d42fdb201cf57c57424eede46f4", + "runtimeCodeHash": "0xed6701e196ad93718e28c2a2a44d110d9e9906085bcfe4faf4f6604b08f0116c", + "txHash": "0x97ca33e6e7d1d7d62bdec4827f208076922d9c42bf149693b36ab91429e65740" + }, + "Controller": { + "address": "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", + "creationCodeHash": "0x4f2082404e96b71282e9d7a8b7efd0f34996b5edac6711095911d36a57637c88", + "runtimeCodeHash": "0xe31d064a2db44ac10d41d74265b7d4482f86ee95644b9745c04f9fc91006906d", + "txHash": "0x8087bd10cc8d456a7b573bc30308785342db2b90d80f3a750931ab9cf5273b83" + }, + "EpochManager": { + "address": "0x03541c5cd35953CD447261122F93A5E7b812D697", + "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", "554"], + "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", + "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", + "txHash": "0xb1c6189514b52091e35c0349dff29357a2572cd9c2f9ad7f623b2b24252826d1", + "proxy": true, + "implementation": { + "address": "0xb6a641879F195448F3Da10fF3b3C4541808a9342", + "creationCodeHash": "0x729aca90fcffdeede93bc42a6e089a93085ec04133e965cf0291cf6245880595", + "runtimeCodeHash": "0xce525d338b6ed471eeb36d2927a26608cca2d5cfe52bd0585945eacc55b525cf", + "txHash": "0x139630c31b6a5799231572aa0b555a44209acd79fb3df98832d80cf9a1013b58" + } + }, + "GraphToken": { + "address": "0x5c946740441C12510a167B447B7dE565C20b9E3C", + "constructorArgs": ["10000000000000000000000000000"], + "creationCodeHash": "0xa749ef173d768ffe0786529cd23238bc525f4a621a91303d8fb176533c18cec2", + "runtimeCodeHash": "0xe584408c8e04a6200bc7a50816343585ad80f699bd394b89bb96964dbc1a2a92", + "txHash": "0x0639808a47da8a5270bc89eb3009c7d29167c8f32f015648920ec5d114225540" + }, + "GraphCurationToken": { + "address": "0x8bEd0a89F18a801Da9dEA994D475DEa74f75A059", + "creationCodeHash": "0x8c076dacbf98f839a0ff25c197eafc836fc3fc1ee5183c7f157acec17678a641", + "runtimeCodeHash": "0xad138b4c4f34501f83aea6c03a49c103a9115526c993860a9acbd6caeaaf0d64", + "txHash": "0xc09739affd3d9dd43f690d3a487b1c149ad8aa50164995cfbc9de73914ff278a" + }, + "ServiceRegistry": { + "address": "0x7CF8aD279E9F26b7DAD2Be452A74068536C8231F", + "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B"], + "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", + "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", + "txHash": "0xf250ef40f4172e54b96047a59cfd7fc35ffabe14484ff1d518e0262195895282", + "proxy": true, + "implementation": { + "address": "0xdC7Fb3a43B9e069df5F07eDc835f60dAc3fD40BA", + "creationCodeHash": "0x45f56a7ad420cd11a8585594fb29121747d87d412161c8779ea36dfd34a48e88", + "runtimeCodeHash": "0x26aceabe83e2b757b2f000e185017528cdde2323c2129fd612180ac3192adfda", + "txHash": "0x2fdb5fa641f707809322107573ce7799711e125cc781aade99fd2948455847ab" + } + }, + "Curation": { + "address": "0xE59B4820dDE28D2c235Bd9A73aA4e8716Cb93E9B", + "initArgs": [ + "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", + "0x2DFDC3e11E035dD96A4aB30Ef67fab4Fb6EC01f2", + "0x8bEd0a89F18a801Da9dEA994D475DEa74f75A059", + "500000", + "10000", + "1000000000000000000" + ], + "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", + "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", + "txHash": "0xf1b1f0f28b80068bcc9fd6ef475be6324a8b23cbdb792f7344f05ce00aa997d7", + "proxy": true, + "implementation": { + "address": "0x2b757ad83e4ed51ecae8d4dc9ade8e3fa29f7bdc", + "creationCodeHash": "0xde37904a7c087e05dc5f84e46a7ff35e1f75f013db373c72715d81d21921de4a", + "runtimeCodeHash": "0x867f82ea221eee52ee0db10a2b49ed8051f4ffc4069238d01f8a0110798a51ef", + "txHash": "0x928ed1d624aecbfdb60d5840c2b9cc81573b9dbe3ec96cf6d86dc8194cb7fdac" + } + }, + "SubgraphNFTDescriptor": { + "address": "0xE7e406b4Bfce0B78A751712BFEb1D6B0ce60e8fb", + "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", + "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", + "txHash": "0xffee21f6616abd4ffdab0b930dbf44d2ba381a08c3c834798df464fd85e8047e" + }, + "SubgraphNFT": { + "address": "0x083318049968F20EfaEA48b0978EC57bbb0ECbcE", + "constructorArgs": ["0xEfc519BEd6a43a14f1BBBbA9e796C4931f7A5540"], + "creationCodeHash": "0x5de044b15df24beb8781d1ebe71f01301a6b8985183f37eb8d599aa4059a1d3e", + "runtimeCodeHash": "0x6a7751298d6ffdbcf421a3b72faab5b7d425884b04757303123758dbcfb21dfa", + "txHash": "0x8884b65a236c188e4c61cf9593be2f67b27e4f80785939336d659866cfd97aec" + }, + "L1GNS": { + "address": "0x065611D3515325aE6fe14f09AEe5Aa2C0a1f0CA7", + "initArgs": [ + "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", + "0x2DFDC3e11E035dD96A4aB30Ef67fab4Fb6EC01f2", + "0x083318049968F20EfaEA48b0978EC57bbb0ECbcE" + ], + "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", + "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", + "txHash": "0x0149f062893acb0eafcbf67acc99da99e03aab3ee2b6b40fbe523d91e0fcecd1", + "proxy": true, + "implementation": { + "address": "0xa95ee5A5f6b45Fcf85A7fa0714f462472C467818", + "creationCodeHash": "0x2e71e4aefc1e678cb9c71882c1da67fc640389337a7d6ae43f78d0f13294594a", + "runtimeCodeHash": "0xde0e02c6a36a90e11c768f40a81430b7e9cda261aa6dada14eaad392d42efc21", + "txHash": "0xbc6e9171943020d30c22197282311f003e79374e6eeeaab9c360942bdf4193f4" + } + }, + "L1Staking": { + "address": "0x35e3Cb6B317690d662160d5d02A5b364578F62c9", + "initArgs": [ + "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", + "100000000000000000000000", + "6646", + "10000", + "100000", + "2", + "4", + "12", + "16", + "77", + "100" + ], + "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", + "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", + "txHash": "0x1960be49029284756037cf3ee8afe9eeaba93de4ba84875c5eefd5d2289903bd", + "proxy": true, + "implementation": { + "address": "0x475e6b44ad3F570907C234A7084df5Df65c7430C", + "creationCodeHash": "0x665ac0b452b51bf138cc1ab67e642a06874e754081432ea0fe3dd093c0eef145", + "runtimeCodeHash": "0x1f4490e6582f31ac25b22700b5704b893b9d7641ece59f7f911856f979f0b672", + "txHash": "0x509f8956d8e7a18c37838d9468e1c424558b1af3080087834da3244fa50cba2a", + "libraries": { + "LibExponential": "0xEB421FC914f8e898711974f13F194BCd21e51433" + } + } + }, + "RewardsManager": { + "address": "0x1246D7c4c903fDd6147d581010BD194102aD4ee2", + "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", "1000000012184945188"], + "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", + "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", + "txHash": "0x108efecde4422dacf6ec7a07884cab214ba0a441fc73a6ad82ceb5c73e1c9334", + "proxy": true, + "implementation": { + "address": "0x295b26b449C533bd1831FF7d14c151C95a380e5e", + "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", + "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", + "txHash": "0x112a3c4447e16a75d1ceda6b475df1bdec8353c24de7282f333e734f93da85cc" + } + }, + "DisputeManager": { + "address": "0x8c344366D9269174F10bB588F16945eb47f78dc9", + "initArgs": [ + "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", + "0xFD01aa87BeB04D0ac764FC298aCFd05FfC5439cD", + "10000000000000000000000", + "500000", + "25000", + "25000" + ], + "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", + "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", + "txHash": "0xe93eba1bda0d262efabbc05d4e01b9ee197f22dd4f798e4c5fc5b1b9c137428e", + "proxy": true, + "implementation": { + "address": "0x476F0b8e5F952f0740aD3b0cb50648a7496c8388", + "creationCodeHash": "0x5b73c9b910d66426fd965ac3110e9debda1d81134c0354a7af8ec1f2ebd765f6", + "runtimeCodeHash": "0xcaf3547f0d675a1e1d2f887cf4666410bc3b084e65ad283ed3f1ff2b1bccc113", + "txHash": "0x6a90b5e2d5dcae2c94fe518ce7f6fb2ffc11e562b9feac6464dcb32e1e90c039" + } + }, + "AllocationExchange": { + "address": "0x67FBea097202f46D601D7C937b5DBb615659aDF2", + "constructorArgs": [ + "0x5c946740441C12510a167B447B7dE565C20b9E3C", + "0x35e3Cb6B317690d662160d5d02A5b364578F62c9", + "0xf1135bFF22512FF2A585b8d4489426CE660f204c", + "0x52e498aE9B8A5eE2A5Cd26805F06A9f29A7F489F" + ], + "creationCodeHash": "0x97714e1a80674ab0af90a10f2c7156cc92794ef81565fe9c7c35ecbe0025cc08", + "runtimeCodeHash": "0x5c20792fefe71126668be8ab19ab26cdb8ab9a6f73efbfa1d90f91e26459fa67", + "txHash": "0x87b35e5289792800832902206cf0ee4b9900e4d38089bd6634d10ea78729bf54" + }, + "IENS": { + "address": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" + }, + "IEthereumDIDRegistry": { + "address": "0xdCa7EF03e98e0DC2B855bE647C39ABe984fcF21B" + }, + "BridgeEscrow": { + "address": "0x8e4145358af77516B886D865e2EcacC0Fd832B75", + "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x190ea3c8f731a77a8fd1cbce860f9561f233adeafe559b33201b7d21ccd298cf", + "proxy": true, + "implementation": { + "address": "0xDD569E05D54fBF5d02fE4a26aC03Ea00317A0A2e", + "creationCodeHash": "0x6a1fc897c0130a1c99221cde1938d247de13a0861111ac47ad81c691f323df1a", + "runtimeCodeHash": "0xc8e31a4ebea0c3e43ceece974071ba0b6db2bed6725190795e07a2d369d2a8ab", + "txHash": "0x369038dcc8d8e70d40782dd761a82cc453c7a4f1939284c724a5a72119e3e566" + } + }, + "L1GraphTokenGateway": { + "address": "0xc82fF7b51c3e593D709BA3dE1b3a0d233D1DEca1", + "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x4a06731591df5c5f77c11bf8df7851234873eb6727fbbc93f5595a223f7cf3fc", + "proxy": true, + "implementation": { + "address": "0x9e8bab937Cac7c359F5e92248d10C613B3Cd7B8b", + "creationCodeHash": "0x7d6f46e4801d562a8c6fc37779711cce39b3544ea62c6c6517d4b06e8604e38c", + "runtimeCodeHash": "0xa0c0a37340ee949d31c3d41b642c507c58f225c09da9ae3d378e5148cd27081a", + "txHash": "0x517794503416be02d916d289f4e7510359d17567bec987da99319e27e5f40fc1" + } + }, + "StakingExtension": { + "address": "0x163203D9fae9eB88a8B3a11B1778710D6F855907", + "creationCodeHash": "0xe23c59dbfb94b0cf7ef58f654b905977624ce57eaae2fce692edb28ca3f1b3ba", + "runtimeCodeHash": "0xca8ad20187bc87e0e04a15184f529787dd23a0095047d411e1b271617a951c49", + "txHash": "0x20a0c0f2a26258e1c63f33f3a5651580bb74ea4bf0e66076ebbdda4fa41d5955" + } + }, + "42161": { + "GraphProxyAdmin": { + "address": "0x2983936aC20202a6555993448E0d5654AC8Ca5fd", + "creationCodeHash": "0x68b304ac6bce7380d5e0f6b14a122f628bffebcc75f8205cb60f0baf578b79c3", + "runtimeCodeHash": "0x8d9ba87a745cf82ab407ebabe6c1490197084d320efb6c246d94bcc80e804417", + "txHash": "0x3ff82c38ec0e08e8f4194689188edcc1e8acb1f231c14cce8f0223f4dfc6cb76" + }, + "BancorFormula": { + "address": "0xA489FDc65229D6225014C0b357BCD19af6f00eE9", + "creationCodeHash": "0x7ae36017eddb326ddd79c7363781366121361d42fdb201cf57c57424eede46f4", + "runtimeCodeHash": "0xed6701e196ad93718e28c2a2a44d110d9e9906085bcfe4faf4f6604b08f0116c", + "txHash": "0xb2bb14ba3cbd1bb31b08b86aced469745f9888710254bb3baed047f435e788c0" + }, + "Controller": { + "address": "0x0a8491544221dd212964fbb96487467291b2C97e", + "creationCodeHash": "0x798f913fbaa1b2547c917e3dc31679089ab27cba442c511c159803acdba28c15", + "runtimeCodeHash": "0x00ae0824f79c4e48d2d23a8d4e6d075f04f44f3ea30a4f4305c345bb98117c62", + "txHash": "0x2a9d5744ad0e5e2e6bb6733ae890702fed2bce906e4e8b1cc50d2d3912c58d18" + }, + "EpochManager": { + "address": "0x5A843145c43d328B9bB7a4401d94918f131bB281", + "initArgs": ["0x0a8491544221dd212964fbb96487467291b2C97e", "6646"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x4c70b8a56278452898d9eb23787a977d38141ebe48c79417c3acf6748ff921cf", + "proxy": true, + "implementation": { + "address": "0xeEDEdb3660154f439D93bfF612f7902edf07b848", + "creationCodeHash": "0x83bc0b08dbe1a9259666ec209f06223863f7bb9cfbf917a2d4b795c771a727fe", + "runtimeCodeHash": "0xed60261c6dc84ebc16830c36f3ee370a92802601d5a2fe1c3c19f5120dcbc2eb", + "txHash": "0x64fac1c567b7be735084b337a1e4ea9b990a8ffee8190485dc9b8dfcc257146c" + } + }, + "L2GraphToken": { + "address": "0x9623063377AD1B27544C965cCd7342f7EA7e88C7", + "initArgs": ["0x4528FD7868c91Ef64B9907450Ee8d82dC639612c"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x8465190df853c05bbdec00ba6b66139be0e5663fd5b740bdd464ad7409ce2100", + "proxy": true, + "implementation": { + "address": "0xaFFCb96181D920FE8C0Af046C49B2c9eC98b28df", + "creationCodeHash": "0x6c4146427aafa7375a569154be95c8c931bf83aab0315706dd78bdf79c889e4c", + "runtimeCodeHash": "0x004371d1d80011906953dcba17c648503fc94b94e1e0365c8d8c706ff91f93e9", + "txHash": "0xbd7d146ce80831ed7643e9f5b5a84737da354994ae080cb3d7ff7bbc3e696b3d" + } + }, + "GraphCurationToken": { + "address": "0x47a0d56ea574419B524285d52fFe7198297D209c", + "creationCodeHash": "0x1ee42ee271cefe20c33c0de904501e618ac4b56debca67c634d0564cecea9ff2", + "runtimeCodeHash": "0x340e8f378c0117b300f3ec255bc5c3a273f9ab5bd2940fa8eb3b5065b21f86dc", + "txHash": "0x382568f1871a3d57f4d3787b255a2364e9926cb6770fdca3cde6cb04b577ecd5" + }, + "ServiceRegistry": { + "address": "0x072884c745c0A23144753335776c99BE22588f8A", + "initArgs": ["0x0a8491544221dd212964fbb96487467291b2C97e"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x54b1da3f2fdd2327abe01f75ac38a670ee16d3f47bc58641ddaef04f0b9d0f78", + "proxy": true, + "implementation": { + "address": "0xD32569dA3B89b040A0589B5b8D2c721a68472ff3", + "creationCodeHash": "0x50808e8cce93cf78a23c9e6dd7984356bd2bd93be30b358982909140dd61f6ff", + "runtimeCodeHash": "0xaef79c87f7e80107c0dc568cf1f8950459b5174ee3aa565ec487556a655e71db", + "txHash": "0xca363c6bc841b43bd896b6d2098434679884d200a28013dedb48a2c95028ce40" + } + }, + "L2Curation": { + "address": "0x22d78fb4bc72e191C765807f8891B5e1785C8014", + "initArgs": [ + "0x0a8491544221dd212964fbb96487467291b2C97e", + "0xA489FDc65229D6225014C0b357BCD19af6f00eE9", + "0x47a0d56ea574419B524285d52fFe7198297D209c", + "1000000", + "10000", + "1000000000000000000" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x8f856e2090af3243349199f7991e01b1c28de7b70b0185d2370d8ada5ce9c97b", + "proxy": true, + "implementation": { + "address": "0x41Ad970e071aadbE098c17aDFCff2fF3105456Ae", + "creationCodeHash": "0x2c7b48c311e8f0cb03513d4ca4c0010132d7402f1aabb1dd65f28cdcf07255ba", + "runtimeCodeHash": "0xa750bd231f2b1ec9ffaeef4de79eddbde8aca9bdbf4c9125424eea644bf27aff", + "txHash": "0x7b03bc16b3af6a650ff866311b1f580936e8b7264ddb4c6348fb824c508d1dcb" + } + }, + "SubgraphNFTDescriptor": { + "address": "0x96cce9b6489744630A058324FB22e7CD02815ebe", + "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", + "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", + "txHash": "0xbb01566726e1d58825cf7aa2860f0f571ff47f92b3837aad0e73e7791fbca48c" + }, + "SubgraphNFT": { + "address": "0x3FbD54f0cc17b7aE649008dEEA12ed7D2622B23f", + "constructorArgs": ["0x4528FD7868c91Ef64B9907450Ee8d82dC639612c"], + "creationCodeHash": "0xc1e58864302084de282dffe54c160e20dd96c6cfff45e00e6ebfc15e04136982", + "runtimeCodeHash": "0x7216e736a8a8754e88688fbf5c0c7e9caf35c55ecc3a0c5a597b951c56cf7458", + "txHash": "0x4334bd64938c1c5c604bde96467a8601875046569f738e6860851594c91681ff" + }, + "L2GNS": { + "address": "0xec9A7fb6CbC2E41926127929c2dcE6e9c5D33Bec", + "initArgs": [ + "0x0a8491544221dd212964fbb96487467291b2C97e", + "0xA489FDc65229D6225014C0b357BCD19af6f00eE9", + "0x3FbD54f0cc17b7aE649008dEEA12ed7D2622B23f" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xf7f2747d1aafd1684ffee7316e727475249cd358af559c6234089b72ffc25f5d", + "proxy": true, + "implementation": { + "address": "0x9B81c7C5A21E65b849FD487540B0A82d3b97b2c7", + "creationCodeHash": "0xd71f45e6c194920a26f90fcec96d8c3375f02c5aef8ad90c1be24e906ffe8342", + "runtimeCodeHash": "0x68ec24512fedb866d7ba7ba6c02160317d0ca34eaacd23bddcc62d2cbcd9869c", + "txHash": "0xfaecc9eb83958359f7440b3dbe1747c2191590acbbde920f191c94352cc0b6d7" + } + }, + "L2Staking": { + "address": "0x00669A4CF01450B64E8A2A20E9b1FCB71E61eF03", + "initArgs": [ + "0x0a8491544221dd212964fbb96487467291b2C97e", + "100000000000000000000000", + "186092", + "10000", + "100000", + "7", + "28", + "28", + "16", + "77", + "100" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xa33c0d58ddaed7e3f7381a33e3d5f63e39219863019f00d54ce2fd2446076ac7", + "proxy": true, + "implementation": { + "address": "0x4a886d3E44C7731Dcf888Da704CA5C51ed63DfC8", + "creationCodeHash": "0xa9796308a637b0bfe091f32c1019e4db8efe4bab80788c052fa334e6810c3a98", + "runtimeCodeHash": "0x19d3491cab54b2aae04d05525a532200e946ce9b55573b58f2e3e1606b4514be", + "txHash": "0xc3235306a51c20b28a8b05da69859e03a081a84c9914156c79da07dcc45b3b4e", + "libraries": { + "LibExponential": "0x208f638d8804e4ccc874ec39e240feea3dc289ee" + } + } + }, + "RewardsManager": { + "address": "0x971B9d3d0Ae3ECa029CAB5eA1fB0F72c85e6a525", + "initArgs": ["0x0a8491544221dd212964fbb96487467291b2C97e"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x222e14cb6f49e3e7b76f6a523c1a3c24f96402676be8662bf1b94bb2250ddd0f", + "proxy": true, + "implementation": { + "address": "0x5912Afc5E0f430B0F84b792E9C7CC892b4bE6Bdb", + "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", + "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", + "txHash": "0x4ac3d936067601dab0ccab5ccd544edbe8457b56c43c6e2f370d33acdb806d19" + } + }, + "DisputeManager": { + "address": "0x0Ab2B043138352413Bb02e67E626a70320E3BD46", + "initArgs": [ + "0x0a8491544221dd212964fbb96487467291b2C97e", + "0x113DC95e796836b8F0Fa71eE7fB42f221740c3B0", + "10000000000000000000000", + "500000", + "25000", + "25000" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x68f08fe0a1179170c8b4c7542725d71432b4171604d7456dff824e0ec1c6cdb9", + "proxy": true, + "implementation": { + "address": "0x358bCB57F9893188c1f5CA4e3390C8E84dAAD9B9", + "creationCodeHash": "0xce4c47d94a33d69e03d607dd13a9ad1ed7fa730ef4a2308eb56ddd646ebaa0aa", + "runtimeCodeHash": "0x18d4a1659ccecede3d4d305ef1db4653d8f3dcbd4012f4e52200ae9f0c6c322c", + "txHash": "0xc6b7c7ac5e1b800326fdc99a12262a1528f46fbd0881b5869d7c5a1709c6e0ce" + } + }, + "AllocationExchange": { + "address": "0x993F00C98D1678371a7b261Ed0E0D4b6F42d9aEE", + "constructorArgs": [ + "0x9623063377AD1B27544C965cCd7342f7EA7e88C7", + "0x00669A4CF01450B64E8A2A20E9b1FCB71E61eF03", + "0x270Ea4ea9e8A699f8fE54515E3Bb2c418952623b", + "0x79f2212de27912bCb25a452fC102C85c142E3eE3" + ], + "creationCodeHash": "0x96c5b59557c161d80f1617775a7b9537a89b0ecf2258598b3a37724be91ae80a", + "runtimeCodeHash": "0xc86fd1d67a0db0aed4cb310f977ebf3e70865e2095a167f4a103c3792146027c", + "txHash": "0x2bad6b8e5eda0026c8c38a70b925bbedd6a617a1e06952fb30e427fdbc592422" + }, + "L2GraphTokenGateway": { + "address": "0x65E1a5e8946e7E87d9774f5288f41c30a99fD302", + "initArgs": ["0x0a8491544221dd212964fbb96487467291b2C97e"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x50816047ea926423ec02b6b89efb96efcd3d7e7028ea7cf82c3da9fd1bf3869e", + "proxy": true, + "implementation": { + "address": "0x6f37b2AF8A0Cc74f1bFddf2E9302Cb226710127F", + "creationCodeHash": "0xbd52455bd8b14bfc27af623388fe2f9e06ddd4c4be3fc06c51558a912de91770", + "runtimeCodeHash": "0x29e47f693053f978d6b2ac0a327319591bf5b5e8a6e6c0744b8afcc0250bf667", + "txHash": "0x0eaa9d03982b88e765262a15b95548cb688ce9337a48460f39e55f8850690cbe" + } + }, + "EthereumDIDRegistry": { + "address": "0xa9AEb1c6f14f4244547B9a0946C485DA99047638", + "creationCodeHash": "0x20cd202f7991716a84c097da5fbd365fd27f7f35f241f82c529ad7aba18b814b", + "runtimeCodeHash": "0x5f396ffd54b6cd6b3faded0f366c5d7e148cc54743926061be2dfd12a75391de", + "txHash": "0xdd23b546fa3b6be0cea2339abe3023a082153693fbc7bf1bc86d190165823b39" + }, + "IEthereumDIDRegistry": { + "address": "0xa9AEb1c6f14f4244547B9a0946C485DA99047638" + }, + "StakingExtension": { + "address": "0x3bE385576d7C282070Ad91BF94366de9f9ba3571", + "constructorArgs": [], + "creationCodeHash": "0xbfc20ab9b880712ab90b5dec9d2a14c724b0bf7c20f02ede8ea76610bd41b6ef", + "runtimeCodeHash": "0xd7fdd744c7a88993435a2978876b1e4341c5e0fb4d611011bb56e8738ab2485d", + "txHash": "0xcc449d1ca1007fba76b25e987ea0d39164acf4027c10c40bd669ede1c65dc569" + } + }, + "421613": { + "GraphProxyAdmin": { + "address": "0x4037466bb242f51575d32E8B1be693b3E5Cd1386", + "creationCodeHash": "0x68b304ac6bce7380d5e0f6b14a122f628bffebcc75f8205cb60f0baf578b79c3", + "runtimeCodeHash": "0x8d9ba87a745cf82ab407ebabe6c1490197084d320efb6c246d94bcc80e804417", + "txHash": "0x9c4d5f8c0ab5a5bc36b0a063ab1ff04372ce7d917c0b200b94544b5da4f0230d" + }, + "BancorFormula": { + "address": "0x71319060b9fdeD6174b6368bE04F9A1b7c9aCe48", + "creationCodeHash": "0x7ae36017eddb326ddd79c7363781366121361d42fdb201cf57c57424eede46f4", + "runtimeCodeHash": "0xed6701e196ad93718e28c2a2a44d110d9e9906085bcfe4faf4f6604b08f0116c", + "txHash": "0x7fe8cabb7a4fe56311591aa8d68d6c82cb0d5c232fc5aaf28bed4d1ece0e42e5" + }, + "Controller": { + "address": "0x7f734E995010Aa8d28b912703093d532C37b6EAb", + "creationCodeHash": "0x798f913fbaa1b2547c917e3dc31679089ab27cba442c511c159803acdba28c15", + "runtimeCodeHash": "0x00ae0824f79c4e48d2d23a8d4e6d075f04f44f3ea30a4f4305c345bb98117c62", + "txHash": "0x6213da3e6367ef47cd6e1fe23e4d83296f16153a64236a5c91f865f2ec84c089" + }, + "EpochManager": { + "address": "0x8ECedc7631f4616D7f4074f9fC9D0368674794BE", + "initArgs": ["0x7f734E995010Aa8d28b912703093d532C37b6EAb", "554"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x62b0d6b8556be9443397ad1f6030fdc47b1a4a3ebcc63f34cdf4091420aec84b", + "proxy": true, + "implementation": { + "address": "0xAaB195Ed1B445A2A0E357494d9036bC746227AE2", + "creationCodeHash": "0x83bc0b08dbe1a9259666ec209f06223863f7bb9cfbf917a2d4b795c771a727fe", + "runtimeCodeHash": "0xed60261c6dc84ebc16830c36f3ee370a92802601d5a2fe1c3c19f5120dcbc2eb", + "txHash": "0xd4f8780490f63432580e3dd5b2b4d9b39e904e8b4ac5cfd23540658cbafe449d" + } + }, + "L2GraphToken": { + "address": "0x18C924BD5E8b83b47EFaDD632b7178E2Fd36073D", + "initArgs": ["0xEfc519BEd6a43a14f1BBBbA9e796C4931f7A5540"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x7ec14b524141af953959b537c1acbea9b49b12ee906563a6172123b09ab3d1f6", + "proxy": true, + "implementation": { + "address": "0x5dcAcF820D7b9F0640e8a23a5a857675A774C34a", + "creationCodeHash": "0x6c4146427aafa7375a569154be95c8c931bf83aab0315706dd78bdf79c889e4c", + "runtimeCodeHash": "0x004371d1d80011906953dcba17c648503fc94b94e1e0365c8d8c706ff91f93e9", + "txHash": "0xb748498a2ebc90e20dc8da981be832f4e00f08ea9ff289880738705e45d6aeca" + } + }, + "GraphCurationToken": { + "address": "0x2B757ad83e4ed51ecaE8D4dC9AdE8E3Fa29F7BdC", + "creationCodeHash": "0x1ee42ee271cefe20c33c0de904501e618ac4b56debca67c634d0564cecea9ff2", + "runtimeCodeHash": "0x340e8f378c0117b300f3ec255bc5c3a273f9ab5bd2940fa8eb3b5065b21f86dc", + "txHash": "0x1aa753cd01fa4505c71f6866dae35faee723d181141ed91b6e5cf3082ee90f9b" + }, + "ServiceRegistry": { + "address": "0x07ECDD4278D83Cd2425cA86256634f666b659e53", + "initArgs": ["0x7f734E995010Aa8d28b912703093d532C37b6EAb"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x8a13420fdc91139297ab1497fbf5b443c156bbc7b9d2a1ac97fb9f23abde2723", + "proxy": true, + "implementation": { + "address": "0xd18D4B4e84eA4713E04060c93bD079A974BE6C4a", + "creationCodeHash": "0x50808e8cce93cf78a23c9e6dd7984356bd2bd93be30b358982909140dd61f6ff", + "runtimeCodeHash": "0xaef79c87f7e80107c0dc568cf1f8950459b5174ee3aa565ec487556a655e71db", + "txHash": "0x2d6043d89a5f5c4f3d0df0f50264ab7efebc898be0b5d358a00715ba9f657a89" + } + }, + "L2Curation": { + "address": "0x7080AAcC4ADF4b1E72615D6eb24CDdE40a04f6Ca", + "initArgs": [ + "0x7f734E995010Aa8d28b912703093d532C37b6EAb", + "0x71319060b9fdeD6174b6368bE04F9A1b7c9aCe48", + "0x2B757ad83e4ed51ecaE8D4dC9AdE8E3Fa29F7BdC", + "1000000", + "10000", + "1000000000000000000" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x2e5744fa4eca56cf6902e27fcc0509487f39bdb0d29b9eb0181db986235289a0", + "proxy": true, + "implementation": { + "address": "0xDA6c9d39b49c3d41CaC2030c6B75b40Efea09817", + "creationCodeHash": "0xa5fa77df71a72c5aadba812345978c291c5fa1a3a23129b6eba3a38ac85d8b5d", + "runtimeCodeHash": "0x1d265e9f658778b48a0247cfef79bfc9304d1faa1f1e085f2fea85629f68e2d5", + "txHash": "0x815eda87a2599d6f2c7458c7b164e7307d05018f0dd72073a50971d424313377" + } + }, + "SubgraphNFTDescriptor": { + "address": "0x30545f313bD2eb0F85E4f808Ae4D2C016efE78b2", + "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", + "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", + "txHash": "0x060839a09e89cbd47adbb8c04cc76b21a00785600a4e8b44939dd928391777e1" + }, + "SubgraphNFT": { + "address": "0x5571D8FE183AD1367dF21eE9968690f0Eabdc593", + "constructorArgs": ["0xEfc519BEd6a43a14f1BBBbA9e796C4931f7A5540"], + "creationCodeHash": "0xc1e58864302084de282dffe54c160e20dd96c6cfff45e00e6ebfc15e04136982", + "runtimeCodeHash": "0x7216e736a8a8754e88688fbf5c0c7e9caf35c55ecc3a0c5a597b951c56cf7458", + "txHash": "0xc11917ffedda6867648fa2cb62cca1df3c0ed485a0a0885284e93a2c5d33455c" + }, + "L2GNS": { + "address": "0x6bf9104e054537301cC23A1023Ca30A6Df79eB21", + "initArgs": [ + "0x7f734E995010Aa8d28b912703093d532C37b6EAb", + "0x71319060b9fdeD6174b6368bE04F9A1b7c9aCe48", + "0x5571D8FE183AD1367dF21eE9968690f0Eabdc593" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x3c2509730e06249d970818319bb507185d4fdea13d5600cef87928a718950c19", + "proxy": true, + "implementation": { + "address": "0x80A6500EFD52C66820dB0E8014088B4eBf8B8f52", + "creationCodeHash": "0xd2aa0d4e2d6ca8d0b2067d249d3202a340b13291a65e23c46f5c04df703bfc0e", + "runtimeCodeHash": "0xa88669e10cde56141250596f6f034629b1bf55086a3ed21ebb0e2bd3b3fca991", + "txHash": "0x3bb004adf949e9c896e85f6e3124ecea0c223470e3a091e42539613d52679c4d" + } + }, + "L2Staking": { + "address": "0xcd549d0C43d915aEB21d3a331dEaB9B7aF186D26", + "initArgs": [ + "0x7f734E995010Aa8d28b912703093d532C37b6EAb", + "100000000000000000000000", + "6646", + "10000", + "100000", + "2", + "4", + "12", + "16", + "77", + "100" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xc98ebdd0a80b97ef8f6305903ef6496a7781db76a5b1b3c3c3b2b10dbd9a7af5", + "proxy": true, + "implementation": { + "address": "0x75CeE6C9EE7c03Ba7cAd82E98FFB57672d7caeBc", + "creationCodeHash": "0x3fd633cabdb4545d667b8e188b5fe8b6326bfd4a8809908f77b7e447c46a22e8", + "runtimeCodeHash": "0x54ba28cc34f7e24b9e1a8e8595f9ecfe4bb7ad70c226444b7a9aa3d26589bbc7", + "txHash": "0x357ab1915642f845527a136aa654c0c18cb43dbb79d4fe297fdf8210fb30082e", + "libraries": { + "LibExponential": "0xdE74fcD55A1E3829EC4FE934f5776bC14bc99917" + } + } + }, + "RewardsManager": { + "address": "0x5F06ABd1CfAcF7AE99530D7Fed60E085f0B15e8D", + "initArgs": ["0x7f734E995010Aa8d28b912703093d532C37b6EAb"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xd4cfa95475e9e867fb24babd6a00a5b6b01d2267533e2412986aa1ff94d51c02", + "proxy": true, + "implementation": { + "address": "0x87f2fAb2C8c422AE0f866D004207fa65bdfD2df2", + "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", + "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", + "txHash": "0xac157ea27b57c36ae336768aef9cd8f74d39b13ff621cd18683db544804b5a3c" + } + }, + "DisputeManager": { + "address": "0x16DEF7E0108A5467A106dbD7537f8591f470342E", + "initArgs": [ + "0x7f734E995010Aa8d28b912703093d532C37b6EAb", + "0xF89688d5d44d73cc4dE880857A3940487076e5A4", + "10000000000000000000000", + "500000", + "25000", + "25000" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x70188c9243c2226ac793ac8c0a9eecd76c9b44e53f7f6f97fa177a34808421a0", + "proxy": true, + "implementation": { + "address": "0x39aEdA1d6ea3B62b76C7c439beBfFCb5369a175C", + "creationCodeHash": "0x2e77ad7a1627b6e04bece0fe18b3ab543ef4a2d6914f2e5e640b2c8175aca3a8", + "runtimeCodeHash": "0x0186afe711eff4ceea28620d091e3c6034fd15be05894119c74a38b020e3a554", + "txHash": "0x4efbd28e55866c0292309964f47bd805922ad417e5980e14e055ad693024582d" + } + }, + "AllocationExchange": { + "address": "0x61809D6Cde07f27D2fcDCb67a42d0Af1988Be5e8", + "constructorArgs": [ + "0x18C924BD5E8b83b47EFaDD632b7178E2Fd36073D", + "0xcd549d0C43d915aEB21d3a331dEaB9B7aF186D26", + "0x05F359b1319f1Ca9b799CB6386F31421c2c49dBA", + "0xD06f366678AE139a94b2AaC2913608De568F1D03" + ], + "creationCodeHash": "0x96c5b59557c161d80f1617775a7b9537a89b0ecf2258598b3a37724be91ae80a", + "runtimeCodeHash": "0xed3d9cce65ddfa8a237d4d7d294ffdb13a082e0adcda3bbd313029cfae1365f3", + "txHash": "0x1df63329a21dca69d20e03c076dd89c350970d35319eeefab028cebbc78d29dc" + }, + "L2GraphTokenGateway": { + "address": "0xef2757855d2802bA53733901F90C91645973f743", + "initArgs": ["0x7f734E995010Aa8d28b912703093d532C37b6EAb"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x47bde4e3ad0bc077897a3de65058c4b7dd710aa447ec25942f716321cbdc590d", + "proxy": true, + "implementation": { + "address": "0xc68cd0d2ca533232Fd86D6e48b907338B2E0a74A", + "creationCodeHash": "0xbd52455bd8b14bfc27af623388fe2f9e06ddd4c4be3fc06c51558a912de91770", + "runtimeCodeHash": "0x29e47f693053f978d6b2ac0a327319591bf5b5e8a6e6c0744b8afcc0250bf667", + "txHash": "0xf68a5e1e516ee9a646f19bbe4d58336fdfcf5fc859f84cdac5e68b00bcd3a09a" + } + }, + "IEthereumDIDRegistry": { + "address": "0x8FFfcD6a85D29E9C33517aaf60b16FE4548f517E" + }, + "StakingExtension": { + "address": "0x5c54fB391003bef3002A79C656a29F09C59E2795", + "creationCodeHash": "0xe23c59dbfb94b0cf7ef58f654b905977624ce57eaae2fce692edb28ca3f1b3ba", + "runtimeCodeHash": "0xca8ad20187bc87e0e04a15184f529787dd23a0095047d411e1b271617a951c49", + "txHash": "0x69eca0ff395bb348cc8d29bb1681afe24515f618bce9a093ad5a02140e15b867" + } + }, + "421614": { + "GraphProxyAdmin": { + "address": "0x7474a6cc5fAeDEc620Db0fa8E4da6eD58477042C", + "creationCodeHash": "0x68b304ac6bce7380d5e0f6b14a122f628bffebcc75f8205cb60f0baf578b79c3", + "runtimeCodeHash": "0x8d9ba87a745cf82ab407ebabe6c1490197084d320efb6c246d94bcc80e804417", + "txHash": "0x71b6defab0d3d7b711b7f6769f20a8c85bc9686eb5939b2a86dfaf587fceab17" + }, + "Controller": { + "address": "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "creationCodeHash": "0x5bde9a87bc4e8dd24d41900f0a19321c1dc6d3373d51bba093b130bb5b80a677", + "runtimeCodeHash": "0x7f0479db1d60ecf6295d92ea2359ebdd223640795613558b0594680f5d4922c9", + "txHash": "0xf7b4faa14f9d29bb62dec73fd163d1253184233012bcadf7ae78af7995017f29" + }, + "EpochManager": { + "address": "0x88b3C7f37253bAA1A9b95feAd69bD5320585826D", + "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", "554"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x587ea6f421a08ab3a390103f63daba0529901f2e662ca7f6fe575674a439fa79", + "proxy": true, + "implementation": { + "address": "0x646627fa39ec6f6E757Cb4189bC54c92FFBb71da", + "creationCodeHash": "0x9947bd0a1f46027123b8fb4aec8b11af540aea587eb79642475d57b4e347078f", + "runtimeCodeHash": "0xe45a27197726de0e3149014823794708edd432ee56ec8358554c0d2365674ca0", + "txHash": "0x82653a0bd83e0541379b920415af94e4be1d732dfab720e5dead839062781c07" + } + }, + "L2GraphToken": { + "address": "0xf8c05dCF59E8B28BFD5eed176C562bEbcfc7Ac04", + "initArgs": ["0xadE6B8EB69a49B56929C1d4F4b428d791861dB6f"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xbb27939a4e4b5d92da8a10add4b7d0126e907da30b07b5f3d439f1c32a6c8e2c", + "proxy": true, + "implementation": { + "address": "0x4cf968bA38b43dd10be114daa7959C1b369479e5", + "creationCodeHash": "0x6c4146427aafa7375a569154be95c8c931bf83aab0315706dd78bdf79c889e4c", + "runtimeCodeHash": "0x004371d1d80011906953dcba17c648503fc94b94e1e0365c8d8c706ff91f93e9", + "txHash": "0x3fab5697addf0c0e16b8e2249f2b833c6f256e699b293d184089c96de8deaa44" + } + }, + "GraphCurationToken": { + "address": "0x00FBd5D46FFAc54862c1Dd27BE08924BB17f5CDa", + "creationCodeHash": "0x1ee42ee271cefe20c33c0de904501e618ac4b56debca67c634d0564cecea9ff2", + "runtimeCodeHash": "0x340e8f378c0117b300f3ec255bc5c3a273f9ab5bd2940fa8eb3b5065b21f86dc", + "txHash": "0x045d64dc3ebb7ae6c4976854ce0a797a04524d22a6ef5f526bfc27f744bc68e5" + }, + "ServiceRegistry": { + "address": "0x888541878CbDDEd880Cd58c728f1Af5C47343F86", + "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xdaa1228e8cd8569c1e5562b63d2fd89caf897ab67da05922636d3309b838e289", + "proxy": true, + "implementation": { + "address": "0x05E732280bf9F37054346Cb83f5Fd58C5B44F6A8", + "creationCodeHash": "0xec9cb879003a06609541ad87efd4bc5dfc8ea60e4e77cfa5ae2cb5208742e7bc", + "runtimeCodeHash": "0x5161b534164413a88d851832f9c9d1dd1bca32fe2bbb62bb35d112c1dc8b69ab", + "txHash": "0xe1fce867f5dd708e60518b7f257fdbcb28f460d1e3b82045b82d03e64345b210" + } + }, + "L2Curation": { + "address": "0xDe761f075200E75485F4358978FB4d1dC8644FD5", + "initArgs": [ + "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "0x00FBd5D46FFAc54862c1Dd27BE08924BB17f5CDa", + "10000", + "1" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xe9298239bcb3c386cf66e6dd493cf6e7cdd9771c65fa2225e0b34d17550d6805", + "proxy": true, + "implementation": { + "address": "0xd90022aB67920212D0F902F5c427DE82732DE136", + "creationCodeHash": "0x2287d9023bf7d91e688e1eb029eff7657ef3b87e37b5222b01fd50985d0928f9", + "runtimeCodeHash": "0xd799b2b74e9634d6b6ef15b5710409264bed04a60f9519b9d8f05ac183199d16", + "txHash": "0x436bcf91fed712dc8d54f449726b2078fb63cd770f90b492a9622efac5817762" + } + }, + "SubgraphNFTDescriptor": { + "address": "0x4032F7B6b27FfC9862106f826379DaB1716C71d7", + "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", + "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", + "txHash": "0xb7e7aeeecc693f34f491b01c56950533119810a4e3e2642081efc127f11cb782" + }, + "SubgraphNFT": { + "address": "0xF21Df5BbA7EB9b54D8F60C560aFb9bA63e6aED1A", + "constructorArgs": ["0xadE6B8EB69a49B56929C1d4F4b428d791861dB6f"], + "creationCodeHash": "0xc1e58864302084de282dffe54c160e20dd96c6cfff45e00e6ebfc15e04136982", + "runtimeCodeHash": "0x7216e736a8a8754e88688fbf5c0c7e9caf35c55ecc3a0c5a597b951c56cf7458", + "txHash": "0x1309c1caea76f4014ba612de092cc746816119b1440d635d11b6bc7e361a32b0" + }, + "L2GNS": { + "address": "0x3133948342F35b8699d8F94aeE064AbB76eDe965", + "initArgs": [ + "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "0xF21Df5BbA7EB9b54D8F60C560aFb9bA63e6aED1A" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x137140783a99a3e9a60048d607124626ca87e2b972e8cc05efb41ac87c3cbcc4", + "proxy": true, + "implementation": { + "address": "0x00CBF5024d454255577Bf2b0fB6A43328a6828c9", + "creationCodeHash": "0xd71f45e6c194920a26f90fcec96d8c3375f02c5aef8ad90c1be24e906ffe8342", + "runtimeCodeHash": "0x68ec24512fedb866d7ba7ba6c02160317d0ca34eaacd23bddcc62d2cbcd9869c", + "txHash": "0x54619944731edec530b7b0cd587f9c2faae332aa1671fe5e8d7e7e5c7e291a77" + } + }, + "StakingExtension": { + "address": "0x05709dd705A5674346B7206a2bC657C8bAb3301B", + "creationCodeHash": "0x7ae74140871330ecabb7040182dc8288c2c84693393a519230036f39c2281138", + "runtimeCodeHash": "0x4994aa74e9e29c36a8158af690a245ccd1cf4d955223e5fcb1ca62810b37ed57", + "txHash": "0xbe1ff9cb949a53209b778708265740dfa2a08a93cfce4c897a53989a5d93f8c1" + }, + "L2Staking": { + "address": "0x865365C425f3A593Ffe698D9c4E6707D14d51e08", + "initArgs": [ + "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "100000000000000000000000", + "6646", + "10000", + "100000", + "8", + "12", + "16", + "100,100,60,100", + "0x876fB4B13D7Ed146757D3664B7E962b36936001C" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x326cf1f2849da4bb4d7e39f2783779e3c99fa48e4ee8ef004cfdd50c62e775df", + "proxy": true, + "implementation": { + "address": "0xD07dFD514dc1b57020e6C1F49e05c48d0658C99f", + "creationCodeHash": "0x6a763345e5f166ea4e73ce9a116a49c9fc0833d9ea235a86fa5a997e91cf09e5", + "runtimeCodeHash": "0xb4c31859ac132241f04c802d4add70a94c7f2c6eb9dfd4bf224048d249dbc7bc", + "txHash": "0x68b34eda64287b84582c8f005c4e96162252d36c9c5c9b84332336a7c2e3d6d3", + "libraries": { + "LibExponential": "0xd844116f6d79a280b117Bb6d9EBf4121D4e8B44b" + } + } + }, + "RewardsManager": { + "address": "0x1F49caE7669086c8ba53CC35d1E9f80176d67E79", + "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xd8765fb87e11e8d41951f9071188b888829022a889cf66fdc2357f1f9f15c8e2", + "proxy": true, + "implementation": { + "address": "0x714B54e5249C90414fecA240e2F5B618C243F0aE", + "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", + "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", + "txHash": "0x8192f6c0e63a9beede3b025878af6a49367564c8bc32cb11a64f5f1e8351c7cd" + } + }, + "DisputeManager": { + "address": "0x7C9B82717f9433932507dF6EdA93A9678b258698", + "initArgs": [ + "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "0xF89688d5d44d73cc4dE880857A3940487076e5A4", + "10000000000000000000000", + "500000", + "25000", + "25000" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xb3764f4b576b46ee8dc6cbf680cad650b3ba80aa93dc6cf099862cfe8efc8a68", + "proxy": true, + "implementation": { + "address": "0x887aC2f58D62Ac86d4E9aEc07c953991e3ca1bA3", + "creationCodeHash": "0xce4c47d94a33d69e03d607dd13a9ad1ed7fa730ef4a2308eb56ddd646ebaa0aa", + "runtimeCodeHash": "0x18d4a1659ccecede3d4d305ef1db4653d8f3dcbd4012f4e52200ae9f0c6c322c", + "txHash": "0x59d99afb9cefbb5c2275d9ac2d7230ac7f4a4cfb2440636408988a66075c032a" + } + }, + "AllocationExchange": { + "address": "0x9BD4FBDa981D628AbA16F261f810dD59E5bAf9eA", + "constructorArgs": [ + "0xf8c05dCF59E8B28BFD5eed176C562bEbcfc7Ac04", + "0x865365C425f3A593Ffe698D9c4E6707D14d51e08", + "0x72ee30d43Fb5A90B3FE983156C5d2fBE6F6d07B3", + "0x49D4CFC037430cA9355B422bAeA7E9391e1d3215" + ], + "creationCodeHash": "0x2963baeedb2d0f5a95fa41f6c89e48e5bf177ca439379fc6becd54870d330ab0", + "runtimeCodeHash": "0xd8b53b3f65b49198d35392e0fd11da229a40d15a96151bca2976cbbe36b909d5", + "txHash": "0xa1a9410662d43463c39802e887f33a1401ed0fc35bf22c5be275e62141eae442" + }, + "L2GraphTokenGateway": { + "address": "0xB24Ce0f8c18c4DdDa584A7EeC132F49C966813bb", + "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x90949db305a73b85e7208aa6b8d03c5181945eedc3df38e90f215a0dec8b02ae", + "proxy": true, + "implementation": { + "address": "0x3C2eB5E561f70c0573E5f6c92358e988E32cb5eC", + "creationCodeHash": "0x90253be19d23d542b29e95e6faf52304fcff91b21edfdb5f79e165051740d1ab", + "runtimeCodeHash": "0x3a7fab6792b4dad58c7b59da19c5b65b3985d1be77024a9f86cb135965e9b462", + "txHash": "0x78ff2e39d5c33ddfb89b1dbee89bdbc24452843a051f860c94e4e9dd75ded9c3" + } + }, + "EthereumDIDRegistry": { + "address": "0xF5f4cA61481558709AFa94AdEDa7B5F180f4AD59", + "creationCodeHash": "0x20cd202f7991716a84c097da5fbd365fd27f7f35f241f82c529ad7aba18b814b", + "runtimeCodeHash": "0x5f396ffd54b6cd6b3faded0f366c5d7e148cc54743926061be2dfd12a75391de", + "txHash": "0x2cefbc169b8ae51c263d0298956d86a397b05f11f076b71c918551f63fe33784" + } + }, + "11155111": { + "GraphProxyAdmin": { + "address": "0xe2011488ea6B02692Ee58717698aecDdfBf4756F", + "creationCodeHash": "0x68b304ac6bce7380d5e0f6b14a122f628bffebcc75f8205cb60f0baf578b79c3", + "runtimeCodeHash": "0x8d9ba87a745cf82ab407ebabe6c1490197084d320efb6c246d94bcc80e804417", + "txHash": "0x104f9104e7364f3605b1522c017aa8302344a689c059e58ad43c6cc6cd9f4e2a" + }, + "BancorFormula": { + "address": "0x56b9f17D3Ca520b229F56D13a988dFAE9924C91E", + "creationCodeHash": "0x7ae36017eddb326ddd79c7363781366121361d42fdb201cf57c57424eede46f4", + "runtimeCodeHash": "0xed6701e196ad93718e28c2a2a44d110d9e9906085bcfe4faf4f6604b08f0116c", + "txHash": "0xb32bbff4bdf106e1f02ea826c0c412d66e2e081acd43aaba5f75676c28f969a2" + }, + "Controller": { + "address": "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", + "creationCodeHash": "0x5bde9a87bc4e8dd24d41900f0a19321c1dc6d3373d51bba093b130bb5b80a677", + "runtimeCodeHash": "0x7f0479db1d60ecf6295d92ea2359ebdd223640795613558b0594680f5d4922c9", + "txHash": "0xe9ab682c6d6b68d5f99d5253c8a6201f9b9f352dac337579d8ddeff6d9738f50" + }, + "EpochManager": { + "address": "0x3C39036a76104D7c6D3eF13a21477C0fE23A3Aa2", + "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", "554"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xc44a6798882df720a50df98fa0daa3ad32641afc18cb054047a44bcbf5e54dae", + "proxy": true, + "implementation": { + "address": "0xA1af9300209cc60de6Ce39752d57F04AB7E29432", + "creationCodeHash": "0x9947bd0a1f46027123b8fb4aec8b11af540aea587eb79642475d57b4e347078f", + "runtimeCodeHash": "0xe45a27197726de0e3149014823794708edd432ee56ec8358554c0d2365674ca0", + "txHash": "0x5f8205a69175903cafb8d688578c01b2fbcdaf970102194994851af7d2ace4d8" + } + }, + "GraphToken": { + "address": "0xCA59cCeb39bE1808d7aA607153f4A5062daF3a83", + "constructorArgs": ["10000000000000000000000000000"], + "creationCodeHash": "0x9c50586e9e305b3a299f1cdf92ca9bb04fad5f43b5e0f7505054d79783fd8b69", + "runtimeCodeHash": "0xfe612acbb09bdb23fe60014e890054621fd34d74bf12bd94fb73351d474cd641", + "txHash": "0xe034493538c9604e629129ede83a4298ec9fd97d5c8b2e1be67c01877464effe" + }, + "GraphCurationToken": { + "address": "0xE04cE530c532538F1F63cA911849925425C2A1Aa", + "creationCodeHash": "0x1ee42ee271cefe20c33c0de904501e618ac4b56debca67c634d0564cecea9ff2", + "runtimeCodeHash": "0x340e8f378c0117b300f3ec255bc5c3a273f9ab5bd2940fa8eb3b5065b21f86dc", + "txHash": "0xe5684e296859ae9ef5662ef1a16d520e201253d51d8068ddb07c94aa17b1f217" + }, + "ServiceRegistry": { + "address": "0x0Ee47634c94E6606f67301b3A868319073CB0FC2", + "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xe60ff360c1a53a81aea3c26213a41c3335bd9e93928df504276e69911255bbb7", + "proxy": true, + "implementation": { + "address": "0xe4484C9c5F18482d4c2E2f3BB0639f092922D97a", + "creationCodeHash": "0xec9cb879003a06609541ad87efd4bc5dfc8ea60e4e77cfa5ae2cb5208742e7bc", + "runtimeCodeHash": "0x5161b534164413a88d851832f9c9d1dd1bca32fe2bbb62bb35d112c1dc8b69ab", + "txHash": "0x5dead3a8e67425b461bf0167bbe6a1e48232d1ce04d213c7e8ed173cff4019b8" + } + }, + "Curation": { + "address": "0x77A6e5F2f13218B33A97Aec56d591dB18D60FFb1", + "initArgs": [ + "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", + "0x56b9f17D3Ca520b229F56D13a988dFAE9924C91E", + "0xE04cE530c532538F1F63cA911849925425C2A1Aa", + "500000", + "10000", + "1000000000000000000" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x5cd28f416034ea0fe8dcf3fe31661128a7103678ce60f1385ff843cc7b3314f8", + "proxy": true, + "implementation": { + "address": "0x54C6639e45F9Eb5Ab55A370d4071e77e5f1b9FF6", + "creationCodeHash": "0x666b377dfbba2be2e9cda6f1a1297819aae39b6571935a9f65314435f1cbd943", + "runtimeCodeHash": "0xbca44d6f233be6574d7db9cf0d0db09697d9ad6f36e69d5d9e22ad7004e83c51", + "txHash": "0x92bb03a530c6a3d33974c783bc3560a3e3c68910a48c951029d052d4234c02bd" + } + }, + "SubgraphNFTDescriptor": { + "address": "0xC9b2011A082d75c01C5C3eEA132f29ebaD182BD5", + "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", + "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", + "txHash": "0xd191fe32ca3538322628fcea353becca0eee1e4855c265552a54682e1c44541f" + }, + "SubgraphNFT": { + "address": "0x120005c38D2624Ef70185fEf3a051Dd57b27a491", + "constructorArgs": ["0x559081D91F5Ff43dfE51A07C216F8E6893805B35"], + "creationCodeHash": "0xc1e58864302084de282dffe54c160e20dd96c6cfff45e00e6ebfc15e04136982", + "runtimeCodeHash": "0x7216e736a8a8754e88688fbf5c0c7e9caf35c55ecc3a0c5a597b951c56cf7458", + "txHash": "0x67192875a3b846c1ff81e5fcaa5fde0f9948834bec3b11fef4d5bb2ab4226fa2" + }, + "L1GNS": { + "address": "0x5461D48556B94e7fdD8ED5A8f865Ba4F1A3b5454", + "initArgs": [ + "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", + "0x120005c38D2624Ef70185fEf3a051Dd57b27a491" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xf92078845db80bcb42a1cf8d8fe230a9e3c86cc6f66e15c8a81368e5fad42885", + "proxy": true, + "implementation": { + "address": "0x4Ac3832d773FE6B6dcC8EB6241B83212F1a55096", + "creationCodeHash": "0xad517d289662731ecf3e0341e1612dc51bd6b63993f78057e17e1f9654740879", + "runtimeCodeHash": "0x3143b8a44a2a8e6590a85580ddf69baf87012d8865fa20fac25bbdfda5d5648e", + "txHash": "0x999f9af5e1e25a4558a315ebe76e7808bf0afa99fc97694a01c73d0a1eef060a" + } + }, + "StakingExtension": { + "address": "0x3fF97b5bdC1D46B0bbD1a3166F232683470a0ce3", + "creationCodeHash": "0xe23c59dbfb94b0cf7ef58f654b905977624ce57eaae2fce692edb28ca3f1b3ba", + "runtimeCodeHash": "0xca8ad20187bc87e0e04a15184f529787dd23a0095047d411e1b271617a951c49", + "txHash": "0x060e4f03881b4e1cf03be197ec3533b43a1a550a74f8adbdaba829f867a761ae" + }, + "L1Staking": { + "address": "0x14e9B07Dc56A0B03ac8A58453B5cCCB289d6ec90", + "initArgs": [ + "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", + "100000000000000000000000", + "6646", + "10000", + "100000", + "4", + "12", + "16", + "100,100,60,100", + "0x3fF97b5bdC1D46B0bbD1a3166F232683470a0ce3" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xe766e786e2d2f1c0af821c785178915e98f4251832bf523540d0e4ff93212a6f", + "proxy": true, + "implementation": { + "address": "0x88aec82f14002a56014819f4e23a22eB32F528b1", + "creationCodeHash": "0x8244555e05aae22fb53a3c3f8717b83d26306748faccc9e9828d43ceaa4b9e67", + "runtimeCodeHash": "0x33ecbc61c2f077b9cc37d5f3d4f6863f576e31ffaa310630ec0a89dd9a8fa940", + "txHash": "0xa56f2052e6c761c12a24459949320e5c11c56219c00a78821505f35bd023c573", + "libraries": { + "LibExponential": "0xc63d7df28b01e6f20b17834B106948baEbF04441" + } + } + }, + "RewardsManager": { + "address": "0x175f483AfAB4Fc52A6E07F9e9d46C90eB95941b5", + "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x6b128afe0d58657c7df7ef6d86a997d3767b166afb671406999ccc69d6c72a61", + "proxy": true, + "implementation": { + "address": "0x3a7382e41d56f6085fcdE56546884ecfcCe8e949", + "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", + "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", + "txHash": "0x3666a68a84e1e2175e45862da197a122439c6f3d7c35f795914bd52fc0c1da3b" + } + }, + "DisputeManager": { + "address": "0x1Da0DF3435cde4199650D35690E3B0885dfc38B1", + "initArgs": [ + "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", + "0xd6ff9e98F0Fd99ccB658832F586e23F4D8Cb8Bad", + "10000000000000000000000", + "500000", + "25000", + "25000" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xd19578ab4bc280cfc890cc2f9b29bc57a8153cc879bbd22ab4202197078286ab", + "proxy": true, + "implementation": { + "address": "0x38d343aBB283452a6855572F6343193A8799Ef7e", + "creationCodeHash": "0x9d7257851678e3a0bd8ef74c219c314de490ebe91e6263129a3030d841dfc74b", + "runtimeCodeHash": "0xe490c3ae892d23d6ebed61a6081d70045ee6618f5196f25c28e6d7d66f798fee", + "txHash": "0xe6a215fe9ed86e23b7fad7b40938500ba64292f5c17b771ace1b00d4d2cd8c25" + } + }, + "AllocationExchange": { + "address": "0xd49670f70f68F7dc62c8B287F6388d250C5487E2", + "constructorArgs": [ + "0xCA59cCeb39bE1808d7aA607153f4A5062daF3a83", + "0x14e9B07Dc56A0B03ac8A58453B5cCCB289d6ec90", + "0x4EBf30832eC2db76aE228D5d239083B59f530d1f", + "0x840daec5dF962D49cf2EFd789c4E40A7b7e0117D" + ], + "creationCodeHash": "0x2963baeedb2d0f5a95fa41f6c89e48e5bf177ca439379fc6becd54870d330ab0", + "runtimeCodeHash": "0x9463db858ad818a01e751412460a5c8e6b249dd92ec564a7d0ef9663eaad3e33", + "txHash": "0x760473d4ea2805869979650079788d553dc9fe8e871764ea1c994c194239bf3e" + }, + "L1GraphTokenGateway": { + "address": "0x549DCB0b510Ee7C8d6E8e346ab9aC75E22DD78B3", + "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x098fb600073aa336154343c9f6f565e190e28792a357c69235b06fc86e2bc9fe", + "proxy": true, + "implementation": { + "address": "0xF1De736CcBb1a37591f7fCA4CA415932a4a8d632", + "creationCodeHash": "0xf21eb0fd5bf5a54dd522b653f6c1da315876355e1e90fedeb08b1fe94f1b54d9", + "runtimeCodeHash": "0xe2964bc67225afc1c732a4216824911ad847bbe8f2188c835e25c2b255c69685", + "txHash": "0xcadae13c0f824e387a3ae07f6929258d5540b3e909f231bba6aca7f70d0558be" + } + }, + "BridgeEscrow": { + "address": "0x428Ab6E9EeF41Dc5098a34a6993Cdd5Be5BA24a6", + "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xb4a922195600c6291cd485f1e98d0bb1f1c25673759015f512e16f53ab9e7665", + "proxy": true, + "implementation": { + "address": "0x4F1aBAa9ec53c2E5d4902Edd099C74B2d8a0aAdD", + "creationCodeHash": "0x27276d0e03aa52bfd4664ca5608cb3fac28fa42034c0d859d06dbc4174342192", + "runtimeCodeHash": "0x796b2cef94bab38e2cc4f82fef882d4c3441ef229329468d46fa72e1fd74be4a", + "txHash": "0xbadc145e826c54b4a4a0263701a29d6ecd11f8c6533c0d8e1cfe5422321d55f6" + } + }, + "EthereumDIDRegistry": { + "address": "0xDe57D27e530c99bDa15Fe231B8C632E4a37E7343", + "creationCodeHash": "0x20cd202f7991716a84c097da5fbd365fd27f7f35f241f82c529ad7aba18b814b", + "runtimeCodeHash": "0x5f396ffd54b6cd6b3faded0f366c5d7e148cc54743926061be2dfd12a75391de", + "txHash": "0x8f3c9ae70242ed54c51a8f22c8d97f3ebc34cd65ccc4cc87054637b47610cf3a" + } + } +} diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index 6a57472a5..a1a177afd 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -4,8 +4,9 @@ import '@nomicfoundation/hardhat-ignition-ethers' import 'hardhat-storage-layout' import 'hardhat-contract-sizer' import 'hardhat-secure-accounts' +import 'hardhat-graph-protocol' -import { HardhatUserConfig } from 'hardhat/config' +import type { HardhatUserConfig } from 'hardhat/config' const config: HardhatUserConfig = { solidity: { @@ -34,9 +35,15 @@ const config: HardhatUserConfig = { }, }, arbitrumSepolia: { + chainId: 421614, url: 'https://sepolia-rollup.arbitrum.io/rpc', }, }, + graph: { + addressBooks: { + horizon: 'addresses.json', + }, + }, etherscan: { apiKey: { arbitrumSepolia: process.env.ETHERSCAN_API_KEY ?? '', diff --git a/packages/horizon/package.json b/packages/horizon/package.json index 7c3d26153..37657c1a9 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -34,9 +34,10 @@ "eslint": "^8.56.0", "eslint-graph-config": "workspace:^0.0.1", "ethers": "^6.13.2", - "hardhat": "^2.20.1", + "hardhat": "^2.22.0", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.8", + "hardhat-graph-protocol": "workspace:^0.0.1", "hardhat-secure-accounts": "^1.0.4", "hardhat-storage-layout": "^0.1.7", "lint-staged": "^15.2.2", diff --git a/yarn.lock b/yarn.lock index c6850b143..f93b6e586 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2950,9 +2950,10 @@ __metadata: eslint: "npm:^8.56.0" eslint-graph-config: "workspace:^0.0.1" ethers: "npm:^6.13.2" - hardhat: "npm:^2.20.1" + hardhat: "npm:^2.22.0" hardhat-contract-sizer: "npm:^2.10.0" hardhat-gas-reporter: "npm:^1.0.8" + hardhat-graph-protocol: "workspace:^0.0.1" hardhat-secure-accounts: "npm:^1.0.4" hardhat-storage-layout: "npm:^0.1.7" lint-staged: "npm:^15.2.2" @@ -4217,6 +4218,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr-darwin-arm64@npm:0.6.5": + version: 0.6.5 + resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.6.5" + checksum: 1ed23f670f280834db7b0cc144d8287b3a572639917240beb6c743ff0f842fadf200eb3e226a13f0650d8a611f5092ace093679090ceb726d97fb4c6023073e6 + languageName: node + linkType: hard + "@nomicfoundation/edr-darwin-x64@npm:0.3.8": version: 0.3.8 resolution: "@nomicfoundation/edr-darwin-x64@npm:0.3.8" @@ -4224,6 +4232,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr-darwin-x64@npm:0.6.5": + version: 0.6.5 + resolution: "@nomicfoundation/edr-darwin-x64@npm:0.6.5" + checksum: 298810fe1ed61568beeb4e4a8ddfb4d3e3cf49d51f89578d5edb5817a7d131069c371d07ea000b246daa2fd57fa4853ab983e3a2e2afc9f27005156e5abfa500 + languageName: node + linkType: hard + "@nomicfoundation/edr-linux-arm64-gnu@npm:0.3.8": version: 0.3.8 resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.3.8" @@ -4231,6 +4246,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr-linux-arm64-gnu@npm:0.6.5": + version: 0.6.5 + resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.6.5" + checksum: 695850a75dda9ad00899ca2bd150c72c6b7a2470c352348540791e55459dc6f87ff88b3b647efe07dfe24d4b6aa9d9039724a9761ffc7a557e3e75a784c302a1 + languageName: node + linkType: hard + "@nomicfoundation/edr-linux-arm64-musl@npm:0.3.8": version: 0.3.8 resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.3.8" @@ -4238,6 +4260,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr-linux-arm64-musl@npm:0.6.5": + version: 0.6.5 + resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.6.5" + checksum: 9a6e01a545491b12673334628b6e1601c7856cb3973451ba1a4c29cf279e9a4874b5e5082fc67d899af7930b6576565e2c7e3dbe67824bfe454bf9ce87435c56 + languageName: node + linkType: hard + "@nomicfoundation/edr-linux-x64-gnu@npm:0.3.8": version: 0.3.8 resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.3.8" @@ -4245,6 +4274,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr-linux-x64-gnu@npm:0.6.5": + version: 0.6.5 + resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.6.5" + checksum: 959b62520cc9375284fcc1ae2ad67c5711d387912216e0b0ab7a3d087ef03967e2c8c8bd2e87697a3b1369fc6a96ec60399e3d71317a8be0cb8864d456a30e36 + languageName: node + linkType: hard + "@nomicfoundation/edr-linux-x64-musl@npm:0.3.8": version: 0.3.8 resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.3.8" @@ -4252,6 +4288,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr-linux-x64-musl@npm:0.6.5": + version: 0.6.5 + resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.6.5" + checksum: d91153a8366005e6a6124893a1da377568157709a147e6c9a18fe6dacae21d3847f02d2e9e89794dc6cb8dbdcd7ee7e49e6c9d3dc74c8dc80cea44e4810752da + languageName: node + linkType: hard + "@nomicfoundation/edr-win32-x64-msvc@npm:0.3.8": version: 0.3.8 resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.3.8" @@ -4259,6 +4302,13 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr-win32-x64-msvc@npm:0.6.5": + version: 0.6.5 + resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.6.5" + checksum: 96c2f68393b517f9b45cb4e777eb594a969abc3fea10bf11756cd050a7e8cefbe27808bd44d8e8a16dc9c425133a110a2ad186e1e6d29b49f234811db52a1edb + languageName: node + linkType: hard + "@nomicfoundation/edr@npm:^0.3.7": version: 0.3.8 resolution: "@nomicfoundation/edr@npm:0.3.8" @@ -4274,6 +4324,21 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/edr@npm:^0.6.4": + version: 0.6.5 + resolution: "@nomicfoundation/edr@npm:0.6.5" + dependencies: + "@nomicfoundation/edr-darwin-arm64": "npm:0.6.5" + "@nomicfoundation/edr-darwin-x64": "npm:0.6.5" + "@nomicfoundation/edr-linux-arm64-gnu": "npm:0.6.5" + "@nomicfoundation/edr-linux-arm64-musl": "npm:0.6.5" + "@nomicfoundation/edr-linux-x64-gnu": "npm:0.6.5" + "@nomicfoundation/edr-linux-x64-musl": "npm:0.6.5" + "@nomicfoundation/edr-win32-x64-msvc": "npm:0.6.5" + checksum: 4344efbc7173119bd69dd37c5e60a232ab8307153e9cc329014df95a60f160026042afdd4dc34188f29fc8e8c926f0a3abdf90fb69bed92be031a206da3a6df5 + languageName: node + linkType: hard + "@nomicfoundation/ethereumjs-block@npm:4.2.2": version: 4.2.2 resolution: "@nomicfoundation/ethereumjs-block@npm:4.2.2" @@ -5914,6 +5979,13 @@ __metadata: languageName: node linkType: hard +"@types/chai@npm:^4.0.0": + version: 4.3.20 + resolution: "@types/chai@npm:4.3.20" + checksum: 4601189d611752e65018f1ecadac82e94eed29f348e1d5430e5681a60b01e1ecf855d9bcc74ae43b07394751f184f6970fac2b5561fc57a1f36e93a0f5ffb6e8 + languageName: node + linkType: hard + "@types/concat-stream@npm:^1.6.0": version: 1.6.1 resolution: "@types/concat-stream@npm:1.6.1" @@ -5923,7 +5995,7 @@ __metadata: languageName: node linkType: hard -"@types/debug@npm:^4.1.10, @types/debug@npm:^4.1.7, @types/debug@npm:^4.1.8": +"@types/debug@npm:^4.1.10, @types/debug@npm:^4.1.12, @types/debug@npm:^4.1.7, @types/debug@npm:^4.1.8": version: 4.1.12 resolution: "@types/debug@npm:4.1.12" dependencies: @@ -6080,6 +6152,13 @@ __metadata: languageName: node linkType: hard +"@types/mocha@npm:^10.0.9": + version: 10.0.9 + resolution: "@types/mocha@npm:10.0.9" + checksum: 76dd782ac7e971ea159d4a7fd40c929afa051e040be3f41187ff03a2d7b3279e19828ddaa498ba1757b3e6b91316263bb7640db0e906938275b97a06e087b989 + languageName: node + linkType: hard + "@types/mocha@npm:^8.2.2": version: 8.2.3 resolution: "@types/mocha@npm:8.2.3" @@ -6127,6 +6206,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:22.7.5": + version: 22.7.5 + resolution: "@types/node@npm:22.7.5" + dependencies: + undici-types: "npm:~6.19.2" + checksum: cf11f74f1a26053ec58066616e3a8685b6bcd7259bc569738b8f752009f9f0f7f85a1b2d24908e5b0f752482d1e8b6babdf1fbb25758711ec7bb9500bfcd6e60 + languageName: node + linkType: hard + "@types/node@npm:^10.0.3": version: 10.17.60 resolution: "@types/node@npm:10.17.60" @@ -8655,7 +8743,7 @@ __metadata: languageName: node linkType: hard -"browser-stdout@npm:1.3.1": +"browser-stdout@npm:1.3.1, browser-stdout@npm:^1.3.1": version: 1.3.1 resolution: "browser-stdout@npm:1.3.1" checksum: c40e482fd82be872b6ea7b9f7591beafbf6f5ba522fe3dade98ba1573a1c29a11101564993e4eb44e5488be8f44510af072df9a9637c739217eb155ceb639205 @@ -9161,6 +9249,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.0.0": + version: 4.5.0 + resolution: "chai@npm:4.5.0" + dependencies: + assertion-error: "npm:^1.1.0" + check-error: "npm:^1.0.3" + deep-eql: "npm:^4.1.3" + get-func-name: "npm:^2.0.2" + loupe: "npm:^2.3.6" + pathval: "npm:^1.1.1" + type-detect: "npm:^4.1.0" + checksum: b8cb596bd1aece1aec659e41a6e479290c7d9bee5b3ad63d2898ad230064e5b47889a3bc367b20100a0853b62e026e2dc514acf25a3c9385f936aa3614d4ab4d + languageName: node + linkType: hard + "chai@npm:^4.2.0, chai@npm:^4.3.10, chai@npm:^4.3.4": version: 4.4.1 resolution: "chai@npm:4.4.1" @@ -9344,7 +9447,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.4.0, chokidar@npm:^3.5.2": +"chokidar@npm:^3.4.0, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -9363,6 +9466,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^4.0.0": + version: 4.0.1 + resolution: "chokidar@npm:4.0.1" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 4bb7a3adc304059810bb6c420c43261a15bb44f610d77c35547addc84faa0374265c3adc67f25d06f363d9a4571962b02679268c40de07676d260de1986efea9 + languageName: node + linkType: hard + "chownr@npm:^1.1.4": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -9858,6 +9970,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^8.1.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060 + languageName: node + linkType: hard + "commander@npm:^9.3.0, commander@npm:^9.4.0": version: 9.5.0 resolution: "commander@npm:9.5.0" @@ -10511,6 +10630,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.5, debug@npm:^4.3.7": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + languageName: node + linkType: hard + "decamelize-keys@npm:^1.1.0": version: 1.1.1 resolution: "decamelize-keys@npm:1.1.1" @@ -10840,7 +10971,7 @@ __metadata: languageName: node linkType: hard -"diff@npm:^5.0.0": +"diff@npm:^5.0.0, diff@npm:^5.2.0": version: 5.2.0 resolution: "diff@npm:5.2.0" checksum: aed0941f206fe261ecb258dc8d0ceea8abbde3ace5827518ff8d302f0fc9cc81ce116c4d8f379151171336caf0516b79e01abdc1ed1201b6440d895a66689eb4 @@ -12253,6 +12384,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^6.13.4": + version: 6.13.4 + resolution: "ethers@npm:6.13.4" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.1" + "@noble/curves": "npm:1.2.0" + "@noble/hashes": "npm:1.3.2" + "@types/node": "npm:22.7.5" + aes-js: "npm:4.0.0-beta.5" + tslib: "npm:2.7.0" + ws: "npm:8.17.1" + checksum: efcf9f39f841e38af68ec23cdbd745432c239c256aac4929842d1af04e55d7be0ff65e462f1cf3e93586f43f7bdcc0098fd56f2f7234f36d73e466521a5766ce + languageName: node + linkType: hard + "ethjs-unit@npm:0.1.6": version: 0.1.6 resolution: "ethjs-unit@npm:0.1.6" @@ -12823,6 +12969,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.2": + version: 6.4.2 + resolution: "fdir@npm:6.4.2" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 34829886f34a3ca4170eca7c7180ec4de51a3abb4d380344063c0ae2e289b11d2ba8b724afee974598c83027fea363ff598caf2b51bc4e6b1e0d8b80cc530573 + languageName: node + linkType: hard + "fecha@npm:^4.2.0": version: 4.2.3 resolution: "fecha@npm:4.2.3" @@ -13713,7 +13871,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:8.1.0, glob@npm:^8.0.3": +"glob@npm:8.1.0, glob@npm:^8.0.3, glob@npm:^8.1.0": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: @@ -14216,6 +14374,31 @@ __metadata: languageName: node linkType: hard +"hardhat-graph-protocol@workspace:^0.0.1, hardhat-graph-protocol@workspace:packages/hardhat-graph-protocol": + version: 0.0.0-use.local + resolution: "hardhat-graph-protocol@workspace:packages/hardhat-graph-protocol" + dependencies: + "@graphprotocol/contracts": "workspace:^7.0.0" + "@graphprotocol/horizon": "workspace:^0.0.1" + "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" + "@types/chai": "npm:^4.0.0" + "@types/debug": "npm:^4.1.12" + "@types/mocha": "npm:^10.0.9" + chai: "npm:^4.0.0" + debug: "npm:^4.3.7" + eslint: "npm:^8.56.0" + eslint-graph-config: "workspace:^0.0.1" + ethers: "npm:^6.13.4" + hardhat: "npm:^2.22.16" + mocha: "npm:^10.8.2" + ts-node: "npm:^8.0.0" + typescript: "npm:^5.6.3" + peerDependencies: + ethers: ^6.13.4 + hardhat: ^2.22.16 + languageName: unknown + linkType: soft + "hardhat-secure-accounts@npm:0.0.5": version: 0.0.5 resolution: "hardhat-secure-accounts@npm:0.0.5" @@ -14360,6 +14543,68 @@ __metadata: languageName: node linkType: hard +"hardhat@npm:^2.22.0, hardhat@npm:^2.22.16": + version: 2.22.16 + resolution: "hardhat@npm:2.22.16" + dependencies: + "@ethersproject/abi": "npm:^5.1.2" + "@metamask/eth-sig-util": "npm:^4.0.0" + "@nomicfoundation/edr": "npm:^0.6.4" + "@nomicfoundation/ethereumjs-common": "npm:4.0.4" + "@nomicfoundation/ethereumjs-tx": "npm:5.0.4" + "@nomicfoundation/ethereumjs-util": "npm:9.0.4" + "@nomicfoundation/solidity-analyzer": "npm:^0.1.0" + "@sentry/node": "npm:^5.18.1" + "@types/bn.js": "npm:^5.1.0" + "@types/lru-cache": "npm:^5.1.0" + adm-zip: "npm:^0.4.16" + aggregate-error: "npm:^3.0.0" + ansi-escapes: "npm:^4.3.0" + boxen: "npm:^5.1.2" + chokidar: "npm:^4.0.0" + ci-info: "npm:^2.0.0" + debug: "npm:^4.1.1" + enquirer: "npm:^2.3.0" + env-paths: "npm:^2.2.0" + ethereum-cryptography: "npm:^1.0.3" + ethereumjs-abi: "npm:^0.6.8" + find-up: "npm:^5.0.0" + fp-ts: "npm:1.19.3" + fs-extra: "npm:^7.0.1" + immutable: "npm:^4.0.0-rc.12" + io-ts: "npm:1.10.4" + json-stream-stringify: "npm:^3.1.4" + keccak: "npm:^3.0.2" + lodash: "npm:^4.17.11" + mnemonist: "npm:^0.38.0" + mocha: "npm:^10.0.0" + p-map: "npm:^4.0.0" + picocolors: "npm:^1.1.0" + raw-body: "npm:^2.4.1" + resolve: "npm:1.17.0" + semver: "npm:^6.3.0" + solc: "npm:0.8.26" + source-map-support: "npm:^0.5.13" + stacktrace-parser: "npm:^0.1.10" + tinyglobby: "npm:^0.2.6" + tsort: "npm:0.0.1" + undici: "npm:^5.14.0" + uuid: "npm:^8.3.2" + ws: "npm:^7.4.6" + peerDependencies: + ts-node: "*" + typescript: "*" + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + bin: + hardhat: internal/cli/bootstrap.js + checksum: d193d8dbd02aba9875fc4df23c49fe8cf441afb63382c9e248c776c75aca6e081e9b7b75fb262739f20bff152f9e0e4112bb22e3609dfa63ed4469d3ea46c0ca + languageName: node + linkType: hard + "hardhat@npm:~2.14.0": version: 2.14.1 resolution: "hardhat@npm:2.14.1" @@ -14616,7 +14861,7 @@ __metadata: languageName: node linkType: hard -"he@npm:1.2.0": +"he@npm:1.2.0, he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" bin: @@ -16385,6 +16630,13 @@ __metadata: languageName: node linkType: hard +"json-stream-stringify@npm:^3.1.4": + version: 3.1.6 + resolution: "json-stream-stringify@npm:3.1.6" + checksum: cb45e65143f4634ebb2dc0732410a942eaf86f88a7938b2f6397f4c6b96a7ba936e74d4d17db48c9221f669153996362b2ff50fe8c7fed8a7548646f98ae1f58 + languageName: node + linkType: hard + "json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -17873,7 +18125,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.1": +"minimatch@npm:^5.0.1, minimatch@npm:^5.1.6": version: 5.1.6 resolution: "minimatch@npm:5.1.6" dependencies: @@ -18116,6 +18368,37 @@ __metadata: languageName: node linkType: hard +"mocha@npm:^10.8.2": + version: 10.8.2 + resolution: "mocha@npm:10.8.2" + dependencies: + ansi-colors: "npm:^4.1.3" + browser-stdout: "npm:^1.3.1" + chokidar: "npm:^3.5.3" + debug: "npm:^4.3.5" + diff: "npm:^5.2.0" + escape-string-regexp: "npm:^4.0.0" + find-up: "npm:^5.0.0" + glob: "npm:^8.1.0" + he: "npm:^1.2.0" + js-yaml: "npm:^4.1.0" + log-symbols: "npm:^4.1.0" + minimatch: "npm:^5.1.6" + ms: "npm:^2.1.3" + serialize-javascript: "npm:^6.0.2" + strip-json-comments: "npm:^3.1.1" + supports-color: "npm:^8.1.1" + workerpool: "npm:^6.5.1" + yargs: "npm:^16.2.0" + yargs-parser: "npm:^20.2.9" + yargs-unparser: "npm:^2.0.0" + bin: + _mocha: bin/_mocha + mocha: bin/mocha.js + checksum: 1f786290a32a1c234f66afe2bfcc68aa50fe9c7356506bd39cca267efb0b4714a63a0cb333815578d63785ba2fba058bf576c2512db73997c0cae0d659a88beb + languageName: node + linkType: hard + "mocha@npm:^4.0.1": version: 4.1.0 resolution: "mocha@npm:4.1.0" @@ -18208,7 +18491,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -19737,6 +20020,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.0": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -20679,6 +20969,13 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.0.2 + resolution: "readdirp@npm:4.0.2" + checksum: a16ecd8ef3286dcd90648c3b103e3826db2b766cdb4a988752c43a83f683d01c7059158d623cbcd8bdfb39e65d302d285be2d208e7d9f34d022d912b929217dd + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -21651,6 +21948,15 @@ __metadata: languageName: node linkType: hard +"serialize-javascript@npm:^6.0.2": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2 + languageName: node + linkType: hard + "serve-static@npm:1.14.2": version: 1.14.2 resolution: "serve-static@npm:1.14.2" @@ -22097,6 +22403,23 @@ __metadata: languageName: node linkType: hard +"solc@npm:0.8.26": + version: 0.8.26 + resolution: "solc@npm:0.8.26" + dependencies: + command-exists: "npm:^1.2.8" + commander: "npm:^8.1.0" + follow-redirects: "npm:^1.12.1" + js-sha3: "npm:0.8.0" + memorystream: "npm:^0.3.1" + semver: "npm:^5.5.0" + tmp: "npm:0.0.33" + bin: + solcjs: solc.js + checksum: 1eea35da99c228d0dc1d831c29f7819e7921b67824c889a5e5f2e471a2ef5856a15fabc0b5de067f5ba994fa36fb5a563361963646fe98dad58a0e4fa17c8b2d + languageName: node + linkType: hard + "solc@npm:^0.4.20": version: 0.4.26 resolution: "solc@npm:0.4.26" @@ -22374,7 +22697,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16": +"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.17": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -22900,7 +23223,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:8.1.1": +"supports-color@npm:8.1.1, supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -23268,6 +23591,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.6": + version: 0.2.10 + resolution: "tinyglobby@npm:0.2.10" + dependencies: + fdir: "npm:^6.4.2" + picomatch: "npm:^4.0.2" + checksum: ce946135d39b8c0e394e488ad59f4092e8c4ecd675ef1bcd4585c47de1b325e61ec6adfbfbe20c3c2bfa6fd674c5b06de2a2e65c433f752ae170aff11793e5ef + languageName: node + linkType: hard + "title-case@npm:^3.0.3": version: 3.0.3 resolution: "title-case@npm:3.0.3" @@ -23535,6 +23868,26 @@ __metadata: languageName: node linkType: hard +"ts-node@npm:^8.0.0": + version: 8.10.2 + resolution: "ts-node@npm:8.10.2" + dependencies: + arg: "npm:^4.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + source-map-support: "npm:^0.5.17" + yn: "npm:3.1.1" + peerDependencies: + typescript: ">=2.7" + bin: + ts-node: dist/bin.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 628343f62fff2543b4559a93eb27005084aea7609945e77f311031c5e96c4099736646856e1792605b90e8007d2c060fe80783be21c94788d91d6f259aab92e2 + languageName: node + linkType: hard + "tsconfig-paths@npm:^4.2.0": version: 4.2.0 resolution: "tsconfig-paths@npm:4.2.0" @@ -23553,6 +23906,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.7.0": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 + languageName: node + linkType: hard + "tslib@npm:^1.11.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -23667,6 +24027,13 @@ __metadata: languageName: node linkType: hard +"type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: df8157ca3f5d311edc22885abc134e18ff8ffbc93d6a9848af5b682730ca6a5a44499259750197250479c5331a8a75b5537529df5ec410622041650a7f293e2a + languageName: node + linkType: hard + "type-fest@npm:^0.13.1": version: 0.13.1 resolution: "type-fest@npm:0.13.1" @@ -23920,6 +24287,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.6.3": + version: 5.6.3 + resolution: "typescript@npm:5.6.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A^4.0.2#optional!builtin, typescript@patch:typescript@npm%3A^4.4.3#optional!builtin": version: 4.9.5 resolution: "typescript@patch:typescript@npm%3A4.9.5#optional!builtin::version=4.9.5&hash=289587" @@ -23940,6 +24317,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=e012d7" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ac8307bb06bbfd08ae7137da740769b7d8c3ee5943188743bb622c621f8ad61d244767480f90fbd840277fbf152d8932aa20c33f867dea1bb5e79b187ca1a92f + languageName: node + linkType: hard + "typewise-core@npm:^1.2, typewise-core@npm:^1.2.0": version: 1.2.0 resolution: "typewise-core@npm:1.2.0" @@ -24075,6 +24462,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 + languageName: node + linkType: hard + "undici@npm:^5.14.0": version: 5.28.4 resolution: "undici@npm:5.28.4" @@ -25573,6 +25967,13 @@ __metadata: languageName: node linkType: hard +"workerpool@npm:^6.5.1": + version: 6.5.1 + resolution: "workerpool@npm:6.5.1" + checksum: 58e8e969782292cb3a7bfba823f1179a7615250a0cefb4841d5166234db1880a3d0fe83a31dd8d648329ec92c2d0cd1890ad9ec9e53674bb36ca43e9753cdeac + languageName: node + linkType: hard + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -25887,7 +26288,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3, yargs-parser@npm:^20.2.9": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 @@ -25910,7 +26311,7 @@ __metadata: languageName: node linkType: hard -"yargs-unparser@npm:2.0.0": +"yargs-unparser@npm:2.0.0, yargs-unparser@npm:^2.0.0": version: 2.0.0 resolution: "yargs-unparser@npm:2.0.0" dependencies: @@ -25922,7 +26323,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:16.2.0": +"yargs@npm:16.2.0, yargs@npm:^16.2.0": version: 16.2.0 resolution: "yargs@npm:16.2.0" dependencies: From 411160088329ee5f3cea4c318fe4929de931044f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 21 Nov 2024 17:26:52 -0300 Subject: [PATCH 284/343] feat(gre): working version for horizon with legacy contracts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/hardhat-graph-protocol/src/config.ts | 42 ++++--- .../hardhat-graph-protocol/src/deployments.ts | 22 ++++ packages/hardhat-graph-protocol/src/gre.ts | 104 ++++-------------- .../sdk/deployments/horizon/address-book.ts | 8 +- .../src/sdk/deployments/horizon/index.ts | 4 +- .../src/sdk/deployments/horizon/types.ts | 10 +- .../src/type-extensions.ts | 67 +++++++++-- packages/hardhat-graph-protocol/src/types.ts | 24 ---- .../test/config.test.ts | 63 +++++++---- .../files/addresses-global-short.json | 0 .../files/addresses-network-short.json | 0 .../global-address-book/hardhat.config.ts | 6 +- .../invalid-address-book/hardhat.config.ts | 6 +- .../network-address-book/hardhat.config.ts | 12 +- .../fixtures/no-path-config/hardhat.config.ts | 6 +- .../fixtures/path-config/hardhat.config.ts | 6 +- .../hardhat-graph-protocol/test/gre.test.ts | 49 ++++----- .../hardhat-graph-protocol/test/helpers.ts | 30 +++-- packages/hardhat-graph-protocol/tsconfig.json | 2 +- packages/horizon/hardhat.config.ts | 6 +- 20 files changed, 258 insertions(+), 209 deletions(-) create mode 100644 packages/hardhat-graph-protocol/src/deployments.ts delete mode 100644 packages/hardhat-graph-protocol/src/types.ts create mode 100644 packages/hardhat-graph-protocol/test/fixtures/files/addresses-global-short.json create mode 100644 packages/hardhat-graph-protocol/test/fixtures/files/addresses-network-short.json diff --git a/packages/hardhat-graph-protocol/src/config.ts b/packages/hardhat-graph-protocol/src/config.ts index f93bc868e..3e5021b78 100644 --- a/packages/hardhat-graph-protocol/src/config.ts +++ b/packages/hardhat-graph-protocol/src/config.ts @@ -1,35 +1,49 @@ import fs from 'fs' + import { GraphPluginError } from './sdk/utils/error' import { logDebug } from './logger' +import { normalizePath } from './sdk/utils/path' -import type { GraphDeployment, GraphRuntimeEnvironmentOptions } from './types' +import type { GraphDeployment } from './deployments' +import type { GraphRuntimeEnvironmentOptions } from './type-extensions' import type { HardhatRuntimeEnvironment } from 'hardhat/types' -import { normalizePath } from './sdk/utils/path' export function getAddressBookPath( deployment: GraphDeployment, hre: HardhatRuntimeEnvironment, opts: GraphRuntimeEnvironmentOptions, ): string { + const optsPath = getPath(opts.deployments?.[deployment]) + const networkPath = getPath(hre.network.config.deployments?.[deployment]) + const globalPath = getPath(hre.config.graph?.deployments?.[deployment]) + logDebug(`== ${deployment} - Getting address book path`) logDebug(`Graph base dir: ${hre.config.paths.graph}`) - logDebug(`1) opts.addressBooks.[deployment]: ${opts.addressBooks?.[deployment]}`) - logDebug(`2) hre.network.config.addressBooks.[deployment]: ${hre.network.config?.addressBooks?.[deployment]}`) - logDebug(`3) hre.config.graph.addressBooks.[deployment]: ${hre.config.graph?.addressBooks?.[deployment]}`) - - let addressBookPath - = opts.addressBooks?.[deployment] ?? hre.network.config?.addressBooks?.[deployment] ?? hre.config.graph?.addressBooks?.[deployment] + logDebug(`1) opts: ${optsPath}`) + logDebug(`2) network: ${networkPath}`) + logDebug(`3) global: ${globalPath}`) + const addressBookPath = optsPath ?? networkPath ?? globalPath if (addressBookPath === undefined) { throw new GraphPluginError('Must set a an addressBook path!') } - addressBookPath = normalizePath(addressBookPath, hre.config.paths.graph) - - if (!fs.existsSync(addressBookPath)) { - throw new GraphPluginError(`Address book not found: ${addressBookPath}`) + const normalizedAddressBookPath = normalizePath(addressBookPath, hre.config.paths.graph) + if (!fs.existsSync(normalizedAddressBookPath)) { + throw new GraphPluginError(`Address book not found: ${normalizedAddressBookPath}`) } - logDebug(`Address book path found: ${addressBookPath}`) - return addressBookPath + logDebug(`Address book path found: ${normalizedAddressBookPath}`) + return normalizedAddressBookPath +} + +function getPath(value: string | { + addressBook: string +} | undefined): string | undefined { + if (typeof value === 'string') { + return value + } else if (value && typeof value == 'object') { + return value.addressBook + } + return } diff --git a/packages/hardhat-graph-protocol/src/deployments.ts b/packages/hardhat-graph-protocol/src/deployments.ts new file mode 100644 index 000000000..8074977b1 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/deployments.ts @@ -0,0 +1,22 @@ +import type { GraphHorizonAddressBook, GraphHorizonContracts } from './sdk/deployments/horizon' + +// List of supported Graph deployments +const GraphDeploymentsList = [ + 'horizon', +] as const + +export type GraphDeployment = (typeof GraphDeploymentsList)[number] + +export type GraphDeploymentRuntimeEnvironmentMap = { + horizon: { + contracts: GraphHorizonContracts + addressBook: GraphHorizonAddressBook + } +} + +export function isGraphDeployment(deployment: unknown): deployment is GraphDeployment { + return ( + typeof deployment === 'string' + && GraphDeploymentsList.includes(deployment as GraphDeployment) + ) +} diff --git a/packages/hardhat-graph-protocol/src/gre.ts b/packages/hardhat-graph-protocol/src/gre.ts index 5cc251138..a307583b8 100644 --- a/packages/hardhat-graph-protocol/src/gre.ts +++ b/packages/hardhat-graph-protocol/src/gre.ts @@ -1,12 +1,14 @@ import path from 'path' -import { GraphDeploymentsList, GraphRuntimeEnvironment, GraphRuntimeEnvironmentOptions, isGraphDeployment } from './types' -import { logDebug, logWarn } from './logger' +import { assertGraphRuntimeEnvironment } from './type-extensions' import { getAddressBookPath } from './config' import { GraphHorizonAddressBook } from './sdk/deployments/horizon' import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider' +import { isGraphDeployment } from './deployments' +import { logDebug } from './logger' import type { HardhatConfig, HardhatRuntimeEnvironment, HardhatUserConfig } from 'hardhat/types' +import type { GraphRuntimeEnvironmentOptions } from './type-extensions' export const greExtendConfig = (config: HardhatConfig, userConfig: Readonly) => { const userPath = userConfig.paths?.graph @@ -26,113 +28,45 @@ export const greExtendConfig = (config: HardhatConfig, userConfig: Readonly { - hre.graph = (opts: GraphRuntimeEnvironmentOptions = {}) => { + hre.graph = (opts: GraphRuntimeEnvironmentOptions = { deployments: {} }) => { logDebug('*** Initializing Graph Runtime Environment (GRE) ***') logDebug(`Main network: ${hre.network.name}`) - const provider = new HardhatEthersProvider(hre.network.provider, hre.network.name) const deployments = [ - ...Object.keys(opts.addressBooks ?? {}), - ...Object.keys(hre.network.config.addressBooks ?? {}), - ...Object.keys(hre.config.graph?.addressBooks ?? {}), - ] + ...Object.keys(opts.deployments ?? {}), + ...Object.keys(hre.network.config.deployments ?? {}), + ...Object.keys(hre.config.graph?.deployments ?? {}), + ].filter(v => isGraphDeployment(v)) logDebug(`Detected deployments: ${deployments.join(', ')}`) // Build the Graph Runtime Environment (GRE) for each deployment - const gre = {} as GraphRuntimeEnvironment + const provider = new HardhatEthersProvider(hre.network.provider, hre.network.name) + const greDeployments: Record = {} for (const deployment of deployments) { - if (!isGraphDeployment(deployment)) { - logWarn(`Invalid deployment: ${deployment}. Skipping...`) - continue - } - logDebug(`Initializing ${deployment} deployment...`) const addressBookPath = getAddressBookPath(deployment, hre, opts) let addressBook + switch (deployment) { case 'horizon': addressBook = new GraphHorizonAddressBook(addressBookPath, hre.network.config.chainId!) - gre.horizon = { + greDeployments.horizon = { addressBook: addressBook, contracts: addressBook.loadContracts(hre.network.config.chainId!, provider), } break - default: break } } + const gre = { + ...greDeployments, + provider, + chainId: async () => (await provider.getNetwork()).chainId, + } + assertGraphRuntimeEnvironment(gre) logDebug('GRE initialized successfully!') return gre } } - -// function buildGraphNetworkEnvironment( -// chainId: number, -// provider: EthersProviderWrapper | undefined, -// graphConfigPath: string | undefined, -// addressBookPath: string, -// isHHL1: boolean, -// enableTxLogging: boolean, -// secureAccounts: boolean, -// fork: boolean, -// getWallets: () => Promise, -// getWallet: (address: string) => Promise, -// unlockProvider: (caller: string) => Promise, -// ): GraphNetworkEnvironment | null { -// if (graphConfigPath === undefined) { -// logWarn( -// `No graph config file provided for chain: ${chainId}. ${ -// isHHL1 ? 'L2' : 'L1' -// } will not be initialized.`, -// ) -// return null -// } - -// if (provider === undefined) { -// logWarn( -// `No provider URL found for: ${chainId}. ${isHHL1 ? 'L2' : 'L1'} will not be initialized.`, -// ) -// return null -// } - -// // Upgrade provider to secure accounts if feature is enabled -// const getUpdatedProvider = async (caller: string) => -// secureAccounts ? await unlockProvider(caller) : provider - -// return { -// chainId: chainId, -// provider: provider, -// addressBook: lazyObject(() => new GraphNetworkAddressBook(addressBookPath, chainId)), -// graphConfig: lazyObject(() => { -// const config = readConfig(graphConfigPath, true) -// config.defaults = getDefaults(config, isHHL1) -// return config -// }), -// contracts: lazyObject(() => -// loadGraphNetworkContracts(addressBookPath, chainId, provider, undefined, { -// enableTxLogging, -// }), -// ), -// getWallets: lazyFunction(() => () => getWallets()), -// getWallet: lazyFunction(() => (address: string) => getWallet(address)), -// getDeployer: lazyFunction( -// () => async () => getDeployer(await getUpdatedProvider('getDeployer')), -// ), -// getNamedAccounts: lazyFunction( -// () => async () => -// getNamedAccounts( -// fork ? provider : await getUpdatedProvider('getNamedAccounts'), -// graphConfigPath, -// ), -// ), -// getTestAccounts: lazyFunction( -// () => async () => -// getTestAccounts(await getUpdatedProvider('getTestAccounts'), graphConfigPath), -// ), -// getAllAccounts: lazyFunction( -// () => async () => getAllAccounts(await getUpdatedProvider('getAllAccounts')), -// ), -// } -// } diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts index 48b6e59ca..0ed701686 100644 --- a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts @@ -17,7 +17,7 @@ export class GraphHorizonAddressBook extends AddressBook Generator } - -export interface GraphHorizonRuntimeEnvironment { - contracts: GraphHorizonContracts - addressBook: GraphHorizonAddressBook -} diff --git a/packages/hardhat-graph-protocol/src/type-extensions.ts b/packages/hardhat-graph-protocol/src/type-extensions.ts index f8bfd7427..c7cf609d4 100644 --- a/packages/hardhat-graph-protocol/src/type-extensions.ts +++ b/packages/hardhat-graph-protocol/src/type-extensions.ts @@ -2,7 +2,48 @@ import 'hardhat/types/config' import 'hardhat/types/runtime' -import type { GraphRuntimeEnvironment, GraphRuntimeEnvironmentOptions } from './types' +import type { GraphDeployment, GraphDeploymentRuntimeEnvironmentMap } from './deployments' +import type { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider' + +export type GraphRuntimeEnvironmentOptions = { + deployments?: { + [deployment in GraphDeployment]?: string | { + addressBook: string + } + } +} + +export type GraphRuntimeEnvironment = { + [deployment in keyof GraphDeploymentRuntimeEnvironmentMap]?: GraphDeploymentRuntimeEnvironmentMap[deployment] +} & { + provider: HardhatEthersProvider + chainId: () => Promise +} + +export function assertGraphRuntimeEnvironment( + obj: unknown, +): obj is GraphRuntimeEnvironment { + if (typeof obj !== 'object' || obj === null) return false + + const deployments = obj as Partial + + for (const deployment in deployments) { + const environment = deployments[deployment as keyof GraphDeploymentRuntimeEnvironmentMap] + if (!environment || typeof environment !== 'object') { + return false + } + } + + if (typeof (obj as GraphRuntimeEnvironment).provider !== 'object') { + return false + } + + if (typeof (obj as GraphRuntimeEnvironment).chainId !== 'function') { + return false + } + + return true +} declare module 'hardhat/types/runtime' { export interface HardhatRuntimeEnvironment { @@ -20,26 +61,34 @@ declare module 'hardhat/types/config' { } export interface HardhatNetworkConfig { - addressBooks?: { - [deployment: string]: string + deployments?: { + [deployment in GraphDeployment]?: string | { + addressBook: string + } } } export interface HardhatNetworkUserConfig { - addressBooks?: { - [deployment: string]: string + deployments?: { + [deployment in GraphDeployment]?: string | { + addressBook: string + } } } export interface HttpNetworkConfig { - addressBooks?: { - [deployment: string]: string + deployments?: { + [deployment in GraphDeployment]?: string | { + addressBook: string + } } } export interface HttpNetworkUserConfig { - addressBooks?: { - [deployment: string]: string + deployments?: { + [deployment in GraphDeployment]?: string | { + addressBook: string + } } } diff --git a/packages/hardhat-graph-protocol/src/types.ts b/packages/hardhat-graph-protocol/src/types.ts deleted file mode 100644 index 35e1069da..000000000 --- a/packages/hardhat-graph-protocol/src/types.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { GraphHorizonRuntimeEnvironment } from './sdk/deployments/horizon' - -export const GraphDeploymentsList = [ - 'horizon', -] as const - -export type GraphDeployment = (typeof GraphDeploymentsList)[number] - -export function isGraphDeployment(deployment: unknown): deployment is GraphDeployment { - return ( - typeof deployment === 'string' - && GraphDeploymentsList.includes(deployment as GraphDeployment) - ) -} - -export type GraphRuntimeEnvironmentOptions = { - addressBooks?: { - [deployment in GraphDeployment]: string - } -} - -export type GraphRuntimeEnvironment = { - [deployment in GraphDeployment]: GraphHorizonRuntimeEnvironment -} diff --git a/packages/hardhat-graph-protocol/test/config.test.ts b/packages/hardhat-graph-protocol/test/config.test.ts index dbc84342c..3cd005c31 100644 --- a/packages/hardhat-graph-protocol/test/config.test.ts +++ b/packages/hardhat-graph-protocol/test/config.test.ts @@ -2,51 +2,74 @@ import path from 'path' import { expect } from 'chai' import { getAddressBookPath } from '../src/config' -import { useEnvironment } from './helpers' +import { loadHardhatContext } from './helpers' describe('GRE init functions', function () { // No address book - should throw describe('getAddressBookPath', function () { - useEnvironment('default-config', 'mainnet') - it('should throw if no address book is specified', function () { - expect(() => getAddressBookPath(this.hre, {})).to.throw('Must set a an addressBook path!') + this.hre = loadHardhatContext('default-config', 'mainnet') + expect(() => getAddressBookPath('horizon', this.hre, {})).to.throw('Must set a an addressBook path!') }) - }) - describe('getAddressBookPath', function () { - useEnvironment('network-address-book', 'mainnet') + it('should throw if address book doesn\'t exist', function () { + this.hre = loadHardhatContext('invalid-address-book', 'mainnet') + expect(() => getAddressBookPath('horizon', this.hre, {})).to.throw(/Address book not found: /) + }) // Address book via opts should be used it('should use opts parameter if available', function () { - const addressBook = getAddressBookPath(this.hre, { - addressBook: 'addresses-opt.json', + this.hre = loadHardhatContext('network-address-book', 'mainnet') + const addressBook = getAddressBookPath('horizon', this.hre, { + deployments: { + horizon: { + addressBook: 'addresses-opt.json', + }, + }, + }) + expect(path.basename(addressBook)).to.equal('addresses-opt.json') + }) + + it('should use opts parameter if available - shortcut syntax', function () { + this.hre = loadHardhatContext('network-address-book', 'mainnet') + const addressBook = getAddressBookPath('horizon', this.hre, { + deployments: { + horizon: 'addresses-opt.json', + }, }) expect(path.basename(addressBook)).to.equal('addresses-opt.json') }) // Address book via network config should be used it('should use HH network config', function () { - const addressBook = getAddressBookPath(this.hre, {}) + this.hre = loadHardhatContext('network-address-book', 'mainnet') + const addressBook = getAddressBookPath('horizon', this.hre, {}) expect(path.basename(addressBook)).to.equal('addresses-network.json') }) - }) - describe('getAddressBookPath', function () { - useEnvironment('global-address-book', 'mainnet') + it('should use HH network config - shortcut syntax', function () { + this.hre = loadHardhatContext('network-address-book', 'mainnet') + if (this.hre.network.config.deployments) { + this.hre.network.config.deployments.horizon = 'addresses-network-short.json' + } + const addressBook = getAddressBookPath('horizon', this.hre, {}) + expect(path.basename(addressBook)).to.equal('addresses-network-short.json') + }) // Address book via global config should be used it('should use HH global config', function () { - const addressBook = getAddressBookPath(this.hre, {}) + this.hre = loadHardhatContext('global-address-book', 'mainnet') + const addressBook = getAddressBookPath('horizon', this.hre, {}) expect(path.basename(addressBook)).to.equal('addresses-global.json') }) - }) - - describe('getAddressBookPath with a non existent address book', function () { - useEnvironment('invalid-address-book', 'mainnet') - it('should throw if address book doesn\'t exist', function () { - expect(() => getAddressBookPath(this.hre, {})).to.throw(/Address book not found: /) + it('should use HH global config - shortcut syntax', function () { + this.hre = loadHardhatContext('global-address-book', 'mainnet') + if (this.hre.config.graph.deployments) { + this.hre.config.graph.deployments.horizon = 'addresses-global-short.json' + } + const addressBook = getAddressBookPath('horizon', this.hre, {}) + expect(path.basename(addressBook)).to.equal('addresses-global-short.json') }) }) }) diff --git a/packages/hardhat-graph-protocol/test/fixtures/files/addresses-global-short.json b/packages/hardhat-graph-protocol/test/fixtures/files/addresses-global-short.json new file mode 100644 index 000000000..e69de29bb diff --git a/packages/hardhat-graph-protocol/test/fixtures/files/addresses-network-short.json b/packages/hardhat-graph-protocol/test/fixtures/files/addresses-network-short.json new file mode 100644 index 000000000..e69de29bb diff --git a/packages/hardhat-graph-protocol/test/fixtures/global-address-book/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/global-address-book/hardhat.config.ts index b7224dfa4..1f7718d54 100644 --- a/packages/hardhat-graph-protocol/test/fixtures/global-address-book/hardhat.config.ts +++ b/packages/hardhat-graph-protocol/test/fixtures/global-address-book/hardhat.config.ts @@ -41,7 +41,11 @@ const config: HardhatUserConfig = { }, }, graph: { - addressBook: 'addresses-global.json', + deployments: { + horizon: { + addressBook: 'addresses-global.json', + }, + }, }, } diff --git a/packages/hardhat-graph-protocol/test/fixtures/invalid-address-book/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/invalid-address-book/hardhat.config.ts index 995dacc17..e4569c04a 100644 --- a/packages/hardhat-graph-protocol/test/fixtures/invalid-address-book/hardhat.config.ts +++ b/packages/hardhat-graph-protocol/test/fixtures/invalid-address-book/hardhat.config.ts @@ -41,7 +41,11 @@ const config: HardhatUserConfig = { }, }, graph: { - addressBook: 'addresses-invalid.json', + deployments: { + horizon: { + addressBook: 'addresses-invalid.json', + }, + }, }, } diff --git a/packages/hardhat-graph-protocol/test/fixtures/network-address-book/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/network-address-book/hardhat.config.ts index 51fd2341c..c75c71e4e 100644 --- a/packages/hardhat-graph-protocol/test/fixtures/network-address-book/hardhat.config.ts +++ b/packages/hardhat-graph-protocol/test/fixtures/network-address-book/hardhat.config.ts @@ -18,7 +18,11 @@ const config: HardhatUserConfig = { 'mainnet': { chainId: 1, url: `https://mainnet.infura.io/v3/123456`, - addressBook: 'addresses-network.json', + deployments: { + horizon: { + addressBook: 'addresses-network.json', + }, + }, }, 'arbitrum-one': { chainId: 42161, @@ -42,7 +46,11 @@ const config: HardhatUserConfig = { }, }, graph: { - addressBook: 'addresses-global.json', + deployments: { + horizon: { + addressBook: 'addresses-global.json', + }, + }, }, } diff --git a/packages/hardhat-graph-protocol/test/fixtures/no-path-config/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/no-path-config/hardhat.config.ts index 0329f449e..c9199325a 100644 --- a/packages/hardhat-graph-protocol/test/fixtures/no-path-config/hardhat.config.ts +++ b/packages/hardhat-graph-protocol/test/fixtures/no-path-config/hardhat.config.ts @@ -38,7 +38,11 @@ const config: HardhatUserConfig = { }, }, graph: { - addressBook: 'addresses.json', + deployments: { + horizon: { + addressBook: 'addresses-hre.json', + }, + }, }, } diff --git a/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts index c8a4b55fc..836815e33 100644 --- a/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts +++ b/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts @@ -41,7 +41,11 @@ const config: HardhatUserConfig = { }, }, graph: { - addressBook: 'addresses-hre.json', + deployments: { + horizon: { + addressBook: 'addresses-hre.json', + }, + }, }, } diff --git a/packages/hardhat-graph-protocol/test/gre.test.ts b/packages/hardhat-graph-protocol/test/gre.test.ts index 4331ed1c4..d66a3fe75 100644 --- a/packages/hardhat-graph-protocol/test/gre.test.ts +++ b/packages/hardhat-graph-protocol/test/gre.test.ts @@ -1,57 +1,52 @@ import path from 'path' import { assert, expect } from 'chai' -import { useEnvironment } from './helpers' +import { loadHardhatContext, useHardhatProject } from './helpers' +import { GraphHorizonAddressBook } from '../src/sdk/deployments/horizon' describe('GRE usage', function () { describe('Project not using GRE', function () { - useEnvironment('default-config', 'mainnet') + useHardhatProject('default-config', 'mainnet') it('should throw when accessing hre.graph()', function () { expect(() => this.hre.graph()).to.throw() }) }) - describe(`Project using GRE: path-config`, function () { - useEnvironment('path-config', 'mainnet') - + describe(`Project using GRE - graph path`, function () { it('should add the graph path to the config', function () { + this.hre = loadHardhatContext('no-path-config', 'mainnet') assert.equal( this.hre.config.paths.graph, - path.join(__dirname, 'fixtures/files'), + path.join(__dirname, 'fixtures/no-path-config'), ) }) - }) - describe(`Project using GRE: no-path-config`, function () { - useEnvironment('no-path-config', 'mainnet') - - it('should add the graph path to the config', function () { + it('should add the graph path to the config from custom path', function () { + this.hre = loadHardhatContext('path-config', 'mainnet') assert.equal( this.hre.config.paths.graph, - path.join(__dirname, 'fixtures/no-path-config'), + path.join(__dirname, 'fixtures/files'), ) }) }) - describe(`Project using GRE: global-address-book`, function () { - useEnvironment('global-address-book', 'mainnet') + describe(`Project using GRE - deployments`, function () { + useHardhatProject('path-config', 'mainnet') - it('should use the global address book', function () { - assert.equal( - this.hre.graph().addressBook.file, - path.join(__dirname, 'fixtures/files/addresses-global.json'), - ) - }) - }) + it('should load Horizon deployment', function () { + const graph = this.hre.graph() + assert.isDefined(graph.horizon) + assert.isObject(graph.horizon) - describe(`Project using GRE: network-address-book`, function () { - useEnvironment('network-address-book', 'mainnet') + assert.isDefined(graph.horizon.contracts) + assert.isObject(graph.horizon.contracts) - it('should use the network address book', function () { - assert.equal( - this.hre.graph().addressBook.file, - path.join(__dirname, 'fixtures/files/addresses-network.json'), + assert.isDefined(graph.horizon.addressBook) + assert.isObject(graph.horizon.addressBook) + assert.instanceOf( + graph.horizon.addressBook, + GraphHorizonAddressBook, ) }) }) diff --git a/packages/hardhat-graph-protocol/test/helpers.ts b/packages/hardhat-graph-protocol/test/helpers.ts index 561e59c0e..1c7050e05 100644 --- a/packages/hardhat-graph-protocol/test/helpers.ts +++ b/packages/hardhat-graph-protocol/test/helpers.ts @@ -1,6 +1,6 @@ import path from 'path' -import { resetHardhatContext } from 'hardhat/plugins-testing' +import { resetHardhatContext as _resetHardhatContext } from 'hardhat/plugins-testing' import type { HardhatRuntimeEnvironment } from 'hardhat/types' declare module 'mocha' { @@ -9,18 +9,30 @@ declare module 'mocha' { } } -export function useEnvironment(fixtureProjectName: string, network?: string): void { +export function useHardhatProject(fixtureProjectName: string, network?: string): void { beforeEach('Loading hardhat environment', function () { - process.chdir(path.join(__dirname, 'fixtures', fixtureProjectName)) - - if (network !== undefined) { - process.env.HARDHAT_NETWORK = network - } - this.hre = require('hardhat') + this.hre = loadHardhatContext(fixtureProjectName, network) }) afterEach('Resetting hardhat', function () { resetHardhatContext() - delete process.env.HARDHAT_NETWORK }) } + +export function loadHardhatContext(fixtureProjectName: string, network?: string): HardhatRuntimeEnvironment { + resetHardhatContext() + delete process.env.HARDHAT_NETWORK + + process.chdir(path.join(__dirname, 'fixtures', fixtureProjectName)) + + if (network !== undefined) { + process.env.HARDHAT_NETWORK = network + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return require('hardhat') +} + +export function resetHardhatContext(): void { + _resetHardhatContext() + delete process.env.HARDHAT_NETWORK +} diff --git a/packages/hardhat-graph-protocol/tsconfig.json b/packages/hardhat-graph-protocol/tsconfig.json index 9ddee2404..18d89b091 100644 --- a/packages/hardhat-graph-protocol/tsconfig.json +++ b/packages/hardhat-graph-protocol/tsconfig.json @@ -11,5 +11,5 @@ "resolveJsonModule": true, "outDir": "dist", }, - "include": ["eslint.config.js", "src/**/*.ts"] + "include": ["eslint.config.js", "src/**/*.ts", "test/**/*.ts"], } diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index a1a177afd..dca9b466a 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -40,8 +40,10 @@ const config: HardhatUserConfig = { }, }, graph: { - addressBooks: { - horizon: 'addresses.json', + deployments: { + horizon: { + addressBook: 'addresses.json', + }, }, }, etherscan: { From 42b43b615200c07db819faaa1521c66effd6103a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 22 Nov 2024 12:44:06 -0300 Subject: [PATCH 285/343] feat: gre now loads all horizon contracts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/hardhat-graph-protocol/package.json | 4 +- packages/hardhat-graph-protocol/src/config.ts | 2 +- packages/hardhat-graph-protocol/src/gre.ts | 13 +- .../src/sdk/address-book.ts | 227 +++++++++--------- .../sdk/deployments/horizon/address-book.ts | 70 ++---- .../src/sdk/deployments/horizon/contracts.ts | 75 ++++++ .../src/sdk/deployments/horizon/index.ts | 2 +- .../src/sdk/deployments/horizon/types.ts | 39 --- .../src/sdk/deployments/lib/contract.ts | 2 +- .../src/type-extensions.ts | 2 +- packages/horizon/addresses.json | 22 +- packages/horizon/hardhat.config.ts | 2 + packages/horizon/package.json | 8 +- packages/horizon/tsconfig.json | 1 + yarn.lock | 2 +- 15 files changed, 254 insertions(+), 217 deletions(-) create mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/horizon/contracts.ts delete mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/horizon/types.ts diff --git a/packages/hardhat-graph-protocol/package.json b/packages/hardhat-graph-protocol/package.json index fd4416c0e..0774a1f55 100644 --- a/packages/hardhat-graph-protocol/package.json +++ b/packages/hardhat-graph-protocol/package.json @@ -13,8 +13,8 @@ ], "author": "Tomás Migone ", "license": "MIT", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/src/index.js", + "types": "dist/src/index.d.ts", "scripts": { "build": "tsc", "lint": "eslint '**/*.{js,ts}' --fix", diff --git a/packages/hardhat-graph-protocol/src/config.ts b/packages/hardhat-graph-protocol/src/config.ts index 3e5021b78..b73dd80a5 100644 --- a/packages/hardhat-graph-protocol/src/config.ts +++ b/packages/hardhat-graph-protocol/src/config.ts @@ -17,7 +17,7 @@ export function getAddressBookPath( const networkPath = getPath(hre.network.config.deployments?.[deployment]) const globalPath = getPath(hre.config.graph?.deployments?.[deployment]) - logDebug(`== ${deployment} - Getting address book path`) + logDebug(`Getting address book path...`) logDebug(`Graph base dir: ${hre.config.paths.graph}`) logDebug(`1) opts: ${optsPath}`) logDebug(`2) network: ${networkPath}`) diff --git a/packages/hardhat-graph-protocol/src/gre.ts b/packages/hardhat-graph-protocol/src/gre.ts index a307583b8..3424a4c91 100644 --- a/packages/hardhat-graph-protocol/src/gre.ts +++ b/packages/hardhat-graph-protocol/src/gre.ts @@ -31,6 +31,11 @@ export const greExtendEnvironment = (hre: HardhatRuntimeEnvironment) => { hre.graph = (opts: GraphRuntimeEnvironmentOptions = { deployments: {} }) => { logDebug('*** Initializing Graph Runtime Environment (GRE) ***') logDebug(`Main network: ${hre.network.name}`) + const chainId = hre.network.config.chainId + if (chainId === undefined) { + throw new Error('Please define chainId in your Hardhat network configuration') + } + logDebug(`Chain Id: ${chainId}`) const deployments = [ ...Object.keys(opts.deployments ?? {}), @@ -43,16 +48,16 @@ export const greExtendEnvironment = (hre: HardhatRuntimeEnvironment) => { const provider = new HardhatEthersProvider(hre.network.provider, hre.network.name) const greDeployments: Record = {} for (const deployment of deployments) { - logDebug(`Initializing ${deployment} deployment...`) + logDebug(`== Initializing deployment: ${deployment} ==`) const addressBookPath = getAddressBookPath(deployment, hre, opts) let addressBook switch (deployment) { case 'horizon': - addressBook = new GraphHorizonAddressBook(addressBookPath, hre.network.config.chainId!) + addressBook = new GraphHorizonAddressBook(addressBookPath, chainId) greDeployments.horizon = { addressBook: addressBook, - contracts: addressBook.loadContracts(hre.network.config.chainId!, provider), + contracts: addressBook.loadContracts(provider), } break default: @@ -63,7 +68,7 @@ export const greExtendEnvironment = (hre: HardhatRuntimeEnvironment) => { const gre = { ...greDeployments, provider, - chainId: async () => (await provider.getNetwork()).chainId, + chainId, } assertGraphRuntimeEnvironment(gre) logDebug('GRE initialized successfully!') diff --git a/packages/hardhat-graph-protocol/src/sdk/address-book.ts b/packages/hardhat-graph-protocol/src/sdk/address-book.ts index a8256caa7..2e8b89ad9 100644 --- a/packages/hardhat-graph-protocol/src/sdk/address-book.ts +++ b/packages/hardhat-graph-protocol/src/sdk/address-book.ts @@ -4,19 +4,9 @@ import { AssertionError } from 'assert' import { assertObject } from './utils/assertion' import { ContractList, loadContract } from './deployments/lib/contract' -import { logDebug, logError } from '../logger' +import { logDebug, logError, logWarn } from '../logger' import { Provider, Signer } from 'ethers' -// JSON format: -// { -// "": { -// "": { -// "address": "
", -// "proxy": true, -// "implementation": { ... } -// ... -// } -// } export type AddressBookJson< ChainId extends number = number, ContractName extends string = string, @@ -29,7 +19,21 @@ export type AddressBookEntry = { } /** - * An abstract class to manage the address book + * An abstract class to manage an address book + * The address book must be a JSON file with the following structure: + * { + * "": { + * "": { + * "address": "
", + * "proxy": true, // optional + * "implementation": { ... } // optional, nested contract structure + * ... + * } + * } + * Uses generics to allow specifying a ContractName type to indicate which contracts should be loaded from the address book + * Implementation should provide: + * - `isContractName(name: string): name is ContractName`, a type predicate to check if a given string is a ContractName + * - `loadContracts(signerOrProvider?: Signer | Provider): ContractList` to load contracts from the address book */ export abstract class AddressBook< ChainId extends number = number, @@ -44,29 +48,40 @@ export abstract class AddressBook< // The raw contents of the address book file public addressBook: AddressBookJson - public strictAssert: boolean + // Contracts in the address book of type ContractName + private validContracts: ContractName[] = [] + + // Contracts in the address book that are not of type ContractName, these are ignored + private invalidContracts: string[] = [] + + // Type predicate to check if a given string is a ContractName + abstract isContractName(name: string): name is ContractName + + // Method to load valid contracts from the address book + abstract loadContracts(signerOrProvider?: Signer | Provider): ContractList /** * Constructor for the `AddressBook` class * * @param _file the path to the address book file * @param _chainId the chain id of the network the address book should be loaded for + * @param _strictAssert * * @throws AssertionError if the target file is not a valid address book * @throws Error if the target file does not exist */ - constructor(_file: string, _chainId: number, _strictAssert = false) { - this.strictAssert = _strictAssert + constructor(_file: string, _chainId: ChainId, _strictAssert = false) { this.file = _file - if (!fs.existsSync(this.file)) throw new Error(`Address book path provided does not exist!`) - - logDebug(`Loading address book for chainId ${_chainId} from ${this.file}`) - this.assertChainId(_chainId) this.chainId = _chainId - // Ensure file is a valid address book - this.addressBook = JSON.parse(fs.readFileSync(this.file, 'utf8') || '{}') as AddressBookJson - this.assertAddressBookJson(this.addressBook) + logDebug(`Loading address book from ${this.file}.`) + if (!fs.existsSync(this.file)) throw new Error(`Address book path provided does not exist!`) + + // Load address book and validate its shape + const fileContents = JSON.parse(fs.readFileSync(this.file, 'utf8') || '{}') + this.assertAddressBookJson(fileContents) + this.addressBook = fileContents + this._parseAddressBook() // If the address book is empty for this chain id, initialize it with an empty object if (!this.addressBook[this.chainId]) { @@ -74,75 +89,13 @@ export abstract class AddressBook< } } - abstract isValidContractName(name: string): boolean - - abstract loadContracts(chainId: number, signerOrProvider?: Signer | Provider): ContractList - - // TODO: implement chain id validation? - assertChainId(chainId: string | number): asserts chainId is ChainId {} - - // Asserts the provided object is a valid address book - // Logs warnings for unsupported chain ids or invalid contract names - assertAddressBookJson( - json: unknown, - ): asserts json is AddressBookJson { - this._assertAddressBookJson(json) - - // // Validate contract names - const contractList = json[this.chainId] - - const contractNames = contractList ? Object.keys(contractList) : [] - for (const contract of contractNames) { - if (!this.isValidContractName(contract)) { - const message = `Detected invalid contract in address book: ${contract}, for chainId ${this.chainId}` - if (this.strictAssert) { - throw new Error(message) - } else { - logError(message) - } - } - } - } - - _assertAddressBookJson(json: unknown): asserts json is AddressBookJson { - assertObject(json, 'Assertion failed: address book is not an object') - - const contractList = json[this.chainId] - try { - assertObject(contractList, 'Assertion failed: chain contract list is not an object') - } catch (error) { - if (this.strictAssert) throw error - else return - } - - const contractNames = Object.keys(contractList) - for (const contractName of contractNames) { - this._assertAddressBookEntry(contractList[contractName]) - } - } - - _assertAddressBookEntry(json: unknown): asserts json is AddressBookEntry { - assertObject(json) - - try { - if (typeof json.address !== 'string') throw new AssertionError({ message: 'Invalid address' }) - if (json.proxy && typeof json.proxy !== 'boolean') - throw new AssertionError({ message: 'Invalid proxy' }) - if (json.implementation && typeof json.implementation !== 'object') - throw new AssertionError({ message: 'Invalid implementation' }) - } catch (error) { - if (this.strictAssert) throw error - else return - } - } - /** * List entry names in the address book * * @returns a list with all the names of the entries in the address book */ listEntries(): ContractName[] { - return Object.keys(this.addressBook[this.chainId]) as ContractName[] + return this.validContracts } /** @@ -154,7 +107,9 @@ export abstract class AddressBook< */ getEntry(name: ContractName): AddressBookEntry { try { - return this.addressBook[this.chainId][name] + const entry = this.addressBook[this.chainId][name] + this._assertAddressBookEntry(entry) + return entry } catch (_) { // TODO: should we throw instead? return { address: '0x0000000000000000000000000000000000000000' } @@ -179,36 +134,92 @@ export abstract class AddressBook< } /** - * Loads all contracts from an address book - * - * @param addressBook Address book to use - * @param signerOrProvider Signer or provider to use - * @param enableTxLogging Enable transaction logging to console and output file. Defaults to `true` - * @returns the loaded contracts - */ + * Parse address book and separate valid and invalid contracts + */ + _parseAddressBook() { + const contractList = this.addressBook[this.chainId] + + const contractNames = contractList ? Object.keys(contractList) : [] + for (const contract of contractNames) { + if (!this.isContractName(contract)) { + this.invalidContracts.push(contract) + } else { + this.validContracts.push(contract) + } + } + + if (this.invalidContracts.length > 0) { + logWarn(`Detected invalid contracts in address book - these will not be loaded: ${this.invalidContracts.join(', ')}`) + } + } + + /** + * Loads all valid contracts from an address book + * + * @param addressBook Address book to use + * @param signerOrProvider Signer or provider to use + * @returns the loaded contracts + */ _loadContracts( - artifactsPath: string | string[], + artifactsPath: string | string[] | Record, signerOrProvider?: Signer | Provider, ): ContractList { const contracts = {} as ContractList for (const contractName of this.listEntries()) { - try { - const contract = loadContract( - contractName, - this.getEntry(contractName).address, - artifactsPath, - signerOrProvider, - ) - contracts[contractName] = contract - } catch (error) { - if (error instanceof Error) { - throw new Error(`Could not load contracts - ${error.message}`) - } else { - throw new Error(`Could not load contracts`) - } + const artifactPath = typeof artifactsPath === 'object' && !Array.isArray(artifactsPath) + ? artifactsPath[contractName] + : artifactsPath + + if (Array.isArray(artifactPath) + ? !artifactPath.some(fs.existsSync) + : !fs.existsSync(artifactPath)) { + logWarn(`Could not load contract ${contractName} - artifact not found`) + logWarn(artifactPath) + continue } + logDebug(`Loading contract ${contractName}`) + + const contract = loadContract( + contractName, + this.getEntry(contractName).address, + artifactPath, + signerOrProvider, + ) + contracts[contractName] = contract } return contracts } + + // Asserts the provided object has the correct JSON format shape for an address book + // This method can be overridden by subclasses to provide custom validation + assertAddressBookJson( + json: unknown, + ): asserts json is AddressBookJson { + this._assertAddressBookJson(json) + } + + // Asserts the provided object is a valid address book + _assertAddressBookJson(json: unknown): asserts json is AddressBookJson { + assertObject(json, 'Assertion failed: address book is not an object') + + const contractList = json[this.chainId] + assertObject(contractList, 'Assertion failed: chain contract list is not an object') + + const contractNames = Object.keys(contractList) + for (const contractName of contractNames) { + this._assertAddressBookEntry(contractList[contractName]) + } + } + + // Asserts the provided object is a valid address book entry + _assertAddressBookEntry(json: unknown): asserts json is AddressBookEntry { + assertObject(json) + + if (typeof json.address !== 'string') throw new AssertionError({ message: 'Invalid address' }) + if (json.proxy && typeof json.proxy !== 'boolean') + throw new AssertionError({ message: 'Invalid proxy' }) + if (json.implementation && typeof json.implementation !== 'object') + throw new AssertionError({ message: 'Invalid implementation' }) + } } diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts index 0ed701686..4511757da 100644 --- a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/address-book.ts @@ -1,77 +1,47 @@ -import path from 'path' - -import { Contract, Provider, Signer } from 'ethers' -import { logDebug, logError, logWarn } from '../../../logger' +import { GraphHorizonArtifactsMap, GraphHorizonContractNameList } from './contracts' +import { logDebug, logError } from '../../../logger' +import { Provider, Signer } from 'ethers' import { AddressBook } from '../../address-book' import { assertObject } from '../../utils/assertion' -import { GraphHorizonContractNameList } from './types' -import type { GraphHorizonContractName, GraphHorizonContracts } from './types' +import type { GraphHorizonContractName, GraphHorizonContracts } from './contracts' export class GraphHorizonAddressBook extends AddressBook { - isValidContractName(name: string): boolean { - return isGraphHorizonContractName(name) + isContractName(name: unknown): name is GraphHorizonContractName { + return ( + typeof name === 'string' + && GraphHorizonContractNameList.includes(name as GraphHorizonContractName) + ) } loadContracts( - chainId: number, signerOrProvider?: Signer | Provider, ): GraphHorizonContracts { logDebug('Loading Graph Horizon contracts...') - const artifactsPath = path.resolve('node_modules', '@graphprotocol/contracts/build/contracts') const contracts = this._loadContracts( - artifactsPath, + GraphHorizonArtifactsMap, signerOrProvider, ) - assertGraphHorizonContracts(contracts, chainId) + this._assertGraphHorizonContracts(contracts) // Aliases contracts.GraphToken = contracts.L2GraphToken contracts.GraphTokenGateway = contracts.L2GraphTokenGateway - // Iterator - contracts[Symbol.iterator] = function* () { - for (const key of Object.keys(this)) { - yield this[key as GraphHorizonContractName] as Contract - } - } - return contracts } -} -function isGraphHorizonContractName(name: unknown): name is GraphHorizonContractName { - return ( - typeof name === 'string' - && GraphHorizonContractNameList.includes(name as GraphHorizonContractName) - ) -} - -function assertGraphHorizonContracts( - contracts: unknown, - chainId: number, - strictAssert?: boolean, -): asserts contracts is GraphHorizonContracts { - assertObject(contracts) - - // Allow loading contracts not defined in contract list but raise a warning - const contractNames = Object.keys(contracts) - if (!contractNames.every(c => isGraphHorizonContractName(c))) { - logWarn( - `Loaded unregistered GraphHorizon contract: ${contractNames.filter( - c => !isGraphHorizonContractName(c), - ).join()}`, - ) - } + _assertGraphHorizonContracts( + contracts: unknown, + ): asserts contracts is GraphHorizonContracts { + assertObject(contracts) - // Assert that all GraphHorizonContracts were loaded - for (const contractName of GraphHorizonContractNameList) { - if (!contracts[contractName]) { - const errMessage = `Missing GraphHorizon contract: ${contractName} for chainId ${chainId}` - logError(errMessage) - if (strictAssert) { - throw new Error(errMessage) + // Assert that all GraphHorizonContracts were loaded + for (const contractName of GraphHorizonContractNameList) { + if (!contracts[contractName]) { + const errMessage = `Missing GraphHorizon contract: ${contractName}` + logError(errMessage) } } } diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/contracts.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/contracts.ts new file mode 100644 index 000000000..d2bdb00ef --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/contracts.ts @@ -0,0 +1,75 @@ +import path from 'path' + +import type { + Controller, + EpochManager, + GraphProxyAdmin, + L2GraphToken, + L2GraphTokenGateway, + RewardsManager, +} from '@graphprotocol/contracts' +import type { + GraphPayments, + HorizonStaking, + PaymentsEscrow, + TAPCollector, +} from '@graphprotocol/horizon' +import type { ContractList } from '../lib/contract' + +export const GraphHorizonContractNameList = [ + // @graphprotocol/contracts + 'GraphProxyAdmin', + 'Controller', + 'EpochManager', + 'RewardsManager', + 'L2GraphToken', + 'L2GraphTokenGateway', + + // @graphprotocol/horizon + 'HorizonStaking', + 'GraphPayments', + 'PaymentsEscrow', + 'TAPCollector', +] as const + +const root = path.resolve(__dirname, '../../../../..') // hardhat-graph-protocol root +export const CONTRACTS_ARTIFACTS_PATH = path.resolve(root, 'node_modules', '@graphprotocol/contracts/build/contracts') +export const HORIZON_ARTIFACTS_PATH = path.resolve(root, 'node_modules', '@graphprotocol/horizon/build/contracts') + +export const GraphHorizonArtifactsMap = { + // @graphprotocol/contracts + GraphProxyAdmin: CONTRACTS_ARTIFACTS_PATH, + Controller: CONTRACTS_ARTIFACTS_PATH, + EpochManager: CONTRACTS_ARTIFACTS_PATH, + RewardsManager: CONTRACTS_ARTIFACTS_PATH, + L2GraphToken: CONTRACTS_ARTIFACTS_PATH, + L2GraphTokenGateway: CONTRACTS_ARTIFACTS_PATH, + + // @graphprotocol/horizon + HorizonStaking: HORIZON_ARTIFACTS_PATH, + GraphPayments: HORIZON_ARTIFACTS_PATH, + PaymentsEscrow: HORIZON_ARTIFACTS_PATH, + TAPCollector: HORIZON_ARTIFACTS_PATH, +} as const + +export interface GraphHorizonContracts extends ContractList { + // @graphprotocol/contracts + EpochManager: EpochManager + RewardsManager: RewardsManager + GraphProxyAdmin: GraphProxyAdmin + Controller: Controller + L2GraphToken: L2GraphToken + L2GraphTokenGateway: L2GraphTokenGateway + + // @graphprotocol/horizon + HorizonStaking: HorizonStaking + GraphPayments: GraphPayments + PaymentsEscrow: PaymentsEscrow + TAPCollector: TAPCollector + + // Aliases + GraphToken: L2GraphToken + GraphTokenGateway: L2GraphTokenGateway +} + +export type GraphHorizonContractName = (typeof GraphHorizonContractNameList)[number] diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts index 719452bcd..8bbcb8449 100644 --- a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts @@ -1,6 +1,6 @@ import { GraphHorizonAddressBook } from './address-book' -import type { GraphHorizonContractName, GraphHorizonContracts } from './types' +import type { GraphHorizonContractName, GraphHorizonContracts } from './contracts' export { GraphHorizonAddressBook, diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/types.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/types.ts deleted file mode 100644 index 1e7fbbb66..000000000 --- a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/types.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { - Controller, - EpochManager, - GraphProxyAdmin, - L2GraphToken, - L2GraphTokenGateway, - RewardsManager, -} from '@graphprotocol/contracts' -import type { Contract } from 'ethers' -import type { ContractList } from '../lib/contract' - -export const GraphHorizonContractNameList = [ - 'GraphProxyAdmin', - 'Controller', - 'EpochManager', - 'RewardsManager', - 'L2GraphToken', - 'L2GraphTokenGateway', -] as const - -export type GraphHorizonContractName = (typeof GraphHorizonContractNameList)[number] - -export interface GraphHorizonContracts extends ContractList { - // Imports from @graphprotocol/contracts use ethers v5 - // We trick the type system by &ing the Contract type - EpochManager: EpochManager & Contract - RewardsManager: RewardsManager & Contract - GraphProxyAdmin: GraphProxyAdmin & Contract - Controller: Controller & Contract - L2GraphToken: L2GraphToken & Contract - L2GraphTokenGateway: L2GraphTokenGateway & Contract - - // Aliases - GraphToken: L2GraphToken - GraphTokenGateway: L2GraphTokenGateway - - // Iterator - [Symbol.iterator]: () => Generator -} diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts index 18113fb30..827237756 100644 --- a/packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts @@ -1,7 +1,7 @@ import { Contract, Provider, Signer } from 'ethers' import { loadArtifact } from './artifact' -export type ContractList = Partial> +export type ContractList = Partial> /** * Loads a contract from an address book diff --git a/packages/hardhat-graph-protocol/src/type-extensions.ts b/packages/hardhat-graph-protocol/src/type-extensions.ts index c7cf609d4..833722b63 100644 --- a/packages/hardhat-graph-protocol/src/type-extensions.ts +++ b/packages/hardhat-graph-protocol/src/type-extensions.ts @@ -17,7 +17,7 @@ export type GraphRuntimeEnvironment = { [deployment in keyof GraphDeploymentRuntimeEnvironmentMap]?: GraphDeploymentRuntimeEnvironmentMap[deployment] } & { provider: HardhatEthersProvider - chainId: () => Promise + chainId: number } export function assertGraphRuntimeEnvironment( diff --git a/packages/horizon/addresses.json b/packages/horizon/addresses.json index ae66613a2..fe4dc467b 100644 --- a/packages/horizon/addresses.json +++ b/packages/horizon/addresses.json @@ -1012,6 +1012,18 @@ } }, "421614": { + "HorizonStaking": { + "address": "0xFf2Ee30de92F276018642A59Fb7Be95b3F9088Af" + }, + "GraphPayments": { + "address": "0xf5B3661BbB8CD48571C7f41ba2D896a3589C9753" + }, + "PaymentsEscrow": { + "address": "0x09B985a2042848A08bA59060EaF0f07c6F5D4d54" + }, + "TAPCollector": { + "address": "0xacC71844EF6beEF70106ABe6E51013189A1f3738" + }, "GraphProxyAdmin": { "address": "0x7474a6cc5fAeDEc620Db0fa8E4da6eD58477042C", "creationCodeHash": "0x68b304ac6bce7380d5e0f6b14a122f628bffebcc75f8205cb60f0baf578b79c3", @@ -1106,10 +1118,7 @@ }, "L2GNS": { "address": "0x3133948342F35b8699d8F94aeE064AbB76eDe965", - "initArgs": [ - "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", - "0xF21Df5BbA7EB9b54D8F60C560aFb9bA63e6aED1A" - ], + "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", "0xF21Df5BbA7EB9b54D8F60C560aFb9bA63e6aED1A"], "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", "txHash": "0x137140783a99a3e9a60048d607124626ca87e2b972e8cc05efb41ac87c3cbcc4", @@ -1319,10 +1328,7 @@ }, "L1GNS": { "address": "0x5461D48556B94e7fdD8ED5A8f865Ba4F1A3b5454", - "initArgs": [ - "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", - "0x120005c38D2624Ef70185fEf3a051Dd57b27a491" - ], + "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", "0x120005c38D2624Ef70185fEf3a051Dd57b27a491"], "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", "txHash": "0xf92078845db80bcb42a1cf8d8fe230a9e3c86cc6f66e15c8a81368e5fad42885", diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index dca9b466a..9d9f4c57c 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -8,6 +8,8 @@ import 'hardhat-graph-protocol' import type { HardhatUserConfig } from 'hardhat/config' +import 'tasks/test' + const config: HardhatUserConfig = { solidity: { version: '0.8.27', diff --git a/packages/horizon/package.json b/packages/horizon/package.json index 37657c1a9..79f9c6b91 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -4,6 +4,12 @@ "description": "", "author": "The Graph core devs", "license": "GPL-2.0-or-later", + "types": "typechain-types/index.ts", + "files": [ + "build/contracts/**/*", + "README.md", + "addresses.json" + ], "scripts": { "lint:ts": "eslint '**/*.{js,ts}' --fix", "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", @@ -33,7 +39,7 @@ "chai": "^4.2.0", "eslint": "^8.56.0", "eslint-graph-config": "workspace:^0.0.1", - "ethers": "^6.13.2", + "ethers": "^6.13.4", "hardhat": "^2.22.0", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.8", diff --git a/packages/horizon/tsconfig.json b/packages/horizon/tsconfig.json index 8de96f814..806f1c23e 100644 --- a/packages/horizon/tsconfig.json +++ b/packages/horizon/tsconfig.json @@ -11,6 +11,7 @@ "include": [ "hardhat.config.ts", "scripts/**/*.ts", + "tasks/**/*.ts", "test/**/*.ts", "ignition/**/*.ts", "eslint.config.js", diff --git a/yarn.lock b/yarn.lock index f93b6e586..3b8fcd674 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2949,7 +2949,7 @@ __metadata: chai: "npm:^4.2.0" eslint: "npm:^8.56.0" eslint-graph-config: "workspace:^0.0.1" - ethers: "npm:^6.13.2" + ethers: "npm:^6.13.4" hardhat: "npm:^2.22.0" hardhat-contract-sizer: "npm:^2.10.0" hardhat-gas-reporter: "npm:^1.0.8" From a99e216fd292a0ac357a5ace6d1c656acbbf3c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 22 Nov 2024 15:30:56 -0300 Subject: [PATCH 286/343] fix: couple fixes and tweaks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/hardhat-graph-protocol/package.json | 3 +- packages/hardhat-graph-protocol/src/config.ts | 3 +- .../{deployments.ts => deployment-list.ts} | 11 +-- packages/hardhat-graph-protocol/src/gre.ts | 4 +- .../src/sdk/address-book.ts | 12 +-- .../src/type-extensions.ts | 86 +++---------------- packages/hardhat-graph-protocol/src/types.ts | 57 ++++++++++++ packages/hardhat-graph-protocol/tsconfig.json | 1 + packages/horizon/hardhat.config.ts | 2 - packages/horizon/package.json | 2 +- packages/horizon/tsconfig.json | 4 +- .../horizon/types/hardhat-graph-protocol.d.ts | 45 ++++++++++ yarn.lock | 8 +- 13 files changed, 137 insertions(+), 101 deletions(-) rename packages/hardhat-graph-protocol/src/{deployments.ts => deployment-list.ts} (50%) create mode 100644 packages/hardhat-graph-protocol/src/types.ts create mode 100644 packages/horizon/types/hardhat-graph-protocol.d.ts diff --git a/packages/hardhat-graph-protocol/package.json b/packages/hardhat-graph-protocol/package.json index 0774a1f55..5d81d0dd5 100644 --- a/packages/hardhat-graph-protocol/package.json +++ b/packages/hardhat-graph-protocol/package.json @@ -18,7 +18,8 @@ "scripts": { "build": "tsc", "lint": "eslint '**/*.{js,ts}' --fix", - "test": "mocha --exit --recursive 'test/**/*.test.ts'" + "test": "mocha --exit --recursive 'test/**/*.test.ts'", + "prepublishOnly": "npm run build" }, "files": [ "dist/", diff --git a/packages/hardhat-graph-protocol/src/config.ts b/packages/hardhat-graph-protocol/src/config.ts index b73dd80a5..acd966db0 100644 --- a/packages/hardhat-graph-protocol/src/config.ts +++ b/packages/hardhat-graph-protocol/src/config.ts @@ -4,8 +4,7 @@ import { GraphPluginError } from './sdk/utils/error' import { logDebug } from './logger' import { normalizePath } from './sdk/utils/path' -import type { GraphDeployment } from './deployments' -import type { GraphRuntimeEnvironmentOptions } from './type-extensions' +import type { GraphDeployment, GraphRuntimeEnvironmentOptions } from './types' import type { HardhatRuntimeEnvironment } from 'hardhat/types' export function getAddressBookPath( diff --git a/packages/hardhat-graph-protocol/src/deployments.ts b/packages/hardhat-graph-protocol/src/deployment-list.ts similarity index 50% rename from packages/hardhat-graph-protocol/src/deployments.ts rename to packages/hardhat-graph-protocol/src/deployment-list.ts index 8074977b1..a37b85680 100644 --- a/packages/hardhat-graph-protocol/src/deployments.ts +++ b/packages/hardhat-graph-protocol/src/deployment-list.ts @@ -1,22 +1,13 @@ import type { GraphHorizonAddressBook, GraphHorizonContracts } from './sdk/deployments/horizon' // List of supported Graph deployments -const GraphDeploymentsList = [ +export const GraphDeploymentsList = [ 'horizon', ] as const -export type GraphDeployment = (typeof GraphDeploymentsList)[number] - export type GraphDeploymentRuntimeEnvironmentMap = { horizon: { contracts: GraphHorizonContracts addressBook: GraphHorizonAddressBook } } - -export function isGraphDeployment(deployment: unknown): deployment is GraphDeployment { - return ( - typeof deployment === 'string' - && GraphDeploymentsList.includes(deployment as GraphDeployment) - ) -} diff --git a/packages/hardhat-graph-protocol/src/gre.ts b/packages/hardhat-graph-protocol/src/gre.ts index 3424a4c91..d8f4c0825 100644 --- a/packages/hardhat-graph-protocol/src/gre.ts +++ b/packages/hardhat-graph-protocol/src/gre.ts @@ -1,14 +1,12 @@ import path from 'path' -import { assertGraphRuntimeEnvironment } from './type-extensions' import { getAddressBookPath } from './config' import { GraphHorizonAddressBook } from './sdk/deployments/horizon' import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider' -import { isGraphDeployment } from './deployments' import { logDebug } from './logger' +import { assertGraphRuntimeEnvironment, type GraphRuntimeEnvironmentOptions, isGraphDeployment } from './types' import type { HardhatConfig, HardhatRuntimeEnvironment, HardhatUserConfig } from 'hardhat/types' -import type { GraphRuntimeEnvironmentOptions } from './type-extensions' export const greExtendConfig = (config: HardhatConfig, userConfig: Readonly) => { const userPath = userConfig.paths?.graph diff --git a/packages/hardhat-graph-protocol/src/sdk/address-book.ts b/packages/hardhat-graph-protocol/src/sdk/address-book.ts index 2e8b89ad9..aa18cccb3 100644 --- a/packages/hardhat-graph-protocol/src/sdk/address-book.ts +++ b/packages/hardhat-graph-protocol/src/sdk/address-book.ts @@ -78,15 +78,14 @@ export abstract class AddressBook< if (!fs.existsSync(this.file)) throw new Error(`Address book path provided does not exist!`) // Load address book and validate its shape + // If it's empty, initialize it with an empty object const fileContents = JSON.parse(fs.readFileSync(this.file, 'utf8') || '{}') + if (!fileContents[this.chainId]) { + fileContents[this.chainId] = {} as Record + } this.assertAddressBookJson(fileContents) this.addressBook = fileContents this._parseAddressBook() - - // If the address book is empty for this chain id, initialize it with an empty object - if (!this.addressBook[this.chainId]) { - this.addressBook[this.chainId] = {} as Record - } } /** @@ -165,6 +164,9 @@ export abstract class AddressBook< signerOrProvider?: Signer | Provider, ): ContractList { const contracts = {} as ContractList + if (this.listEntries().length == 0) { + throw Error('No valid contracts found in address book') + } for (const contractName of this.listEntries()) { const artifactPath = typeof artifactsPath === 'object' && !Array.isArray(artifactsPath) ? artifactsPath[contractName] diff --git a/packages/hardhat-graph-protocol/src/type-extensions.ts b/packages/hardhat-graph-protocol/src/type-extensions.ts index 833722b63..f42df8eaa 100644 --- a/packages/hardhat-graph-protocol/src/type-extensions.ts +++ b/packages/hardhat-graph-protocol/src/type-extensions.ts @@ -1,102 +1,44 @@ // To extend one of Hardhat's types, you need to import the module where it has been defined, and redeclare it. import 'hardhat/types/config' import 'hardhat/types/runtime' - -import type { GraphDeployment, GraphDeploymentRuntimeEnvironmentMap } from './deployments' -import type { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider' - -export type GraphRuntimeEnvironmentOptions = { - deployments?: { - [deployment in GraphDeployment]?: string | { - addressBook: string - } - } -} - -export type GraphRuntimeEnvironment = { - [deployment in keyof GraphDeploymentRuntimeEnvironmentMap]?: GraphDeploymentRuntimeEnvironmentMap[deployment] -} & { - provider: HardhatEthersProvider - chainId: number -} - -export function assertGraphRuntimeEnvironment( - obj: unknown, -): obj is GraphRuntimeEnvironment { - if (typeof obj !== 'object' || obj === null) return false - - const deployments = obj as Partial - - for (const deployment in deployments) { - const environment = deployments[deployment as keyof GraphDeploymentRuntimeEnvironmentMap] - if (!environment || typeof environment !== 'object') { - return false - } - } - - if (typeof (obj as GraphRuntimeEnvironment).provider !== 'object') { - return false - } - - if (typeof (obj as GraphRuntimeEnvironment).chainId !== 'function') { - return false - } - - return true -} +import type { GraphDeployments, GraphRuntimeEnvironment, GraphRuntimeEnvironmentOptions } from './types' declare module 'hardhat/types/runtime' { - export interface HardhatRuntimeEnvironment { + interface HardhatRuntimeEnvironment { graph: (opts?: GraphRuntimeEnvironmentOptions) => GraphRuntimeEnvironment } } declare module 'hardhat/types/config' { - export interface HardhatConfig { + interface HardhatConfig { graph: GraphRuntimeEnvironmentOptions } - export interface HardhatUserConfig { + interface HardhatUserConfig { graph: GraphRuntimeEnvironmentOptions } - export interface HardhatNetworkConfig { - deployments?: { - [deployment in GraphDeployment]?: string | { - addressBook: string - } - } + interface HardhatNetworkConfig { + deployments?: GraphDeployments } - export interface HardhatNetworkUserConfig { - deployments?: { - [deployment in GraphDeployment]?: string | { - addressBook: string - } - } + interface HardhatNetworkUserConfig { + deployments?: GraphDeployments } - export interface HttpNetworkConfig { - deployments?: { - [deployment in GraphDeployment]?: string | { - addressBook: string - } - } + interface HttpNetworkConfig { + deployments?: GraphDeployments } - export interface HttpNetworkUserConfig { - deployments?: { - [deployment in GraphDeployment]?: string | { - addressBook: string - } - } + interface HttpNetworkUserConfig { + deployments?: GraphDeployments } - export interface ProjectPathsConfig { + interface ProjectPathsConfig { graph?: string } - export interface ProjectPathsUserConfig { + interface ProjectPathsUserConfig { graph?: string } } diff --git a/packages/hardhat-graph-protocol/src/types.ts b/packages/hardhat-graph-protocol/src/types.ts new file mode 100644 index 000000000..b15045849 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/types.ts @@ -0,0 +1,57 @@ +import { type GraphDeploymentRuntimeEnvironmentMap, GraphDeploymentsList } from './deployment-list' +import type { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider' + +export type GraphDeployment = (typeof GraphDeploymentsList)[number] + +export type GraphDeployments = { + [deployment in GraphDeployment]?: string | { + addressBook: string + } +} + +export type GraphRuntimeEnvironmentOptions = { + deployments?: { + [deployment in GraphDeployment]?: string | { + addressBook: string + } + } +} + +export type GraphRuntimeEnvironment = { + [deployment in keyof GraphDeploymentRuntimeEnvironmentMap]?: GraphDeploymentRuntimeEnvironmentMap[deployment] +} & { + provider: HardhatEthersProvider + chainId: number +} + +export function isGraphDeployment(deployment: unknown): deployment is GraphDeployment { + return ( + typeof deployment === 'string' + && GraphDeploymentsList.includes(deployment as GraphDeployment) + ) +} + +export function assertGraphRuntimeEnvironment( + obj: unknown, +): obj is GraphRuntimeEnvironment { + if (typeof obj !== 'object' || obj === null) return false + + const deployments = obj as Partial + + for (const deployment in deployments) { + const environment = deployments[deployment as keyof GraphDeploymentRuntimeEnvironmentMap] + if (!environment || typeof environment !== 'object') { + return false + } + } + + if (typeof (obj as GraphRuntimeEnvironment).provider !== 'object') { + return false + } + + if (typeof (obj as GraphRuntimeEnvironment).chainId !== 'function') { + return false + } + + return true +} diff --git a/packages/hardhat-graph-protocol/tsconfig.json b/packages/hardhat-graph-protocol/tsconfig.json index 18d89b091..41ba7e8bc 100644 --- a/packages/hardhat-graph-protocol/tsconfig.json +++ b/packages/hardhat-graph-protocol/tsconfig.json @@ -4,6 +4,7 @@ "module": "commonjs", "declaration": true, "declarationMap": true, + "sourceMap": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index 9d9f4c57c..dca9b466a 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -8,8 +8,6 @@ import 'hardhat-graph-protocol' import type { HardhatUserConfig } from 'hardhat/config' -import 'tasks/test' - const config: HardhatUserConfig = { solidity: { version: '0.8.27', diff --git a/packages/horizon/package.json b/packages/horizon/package.json index 79f9c6b91..e2363022a 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -55,7 +55,7 @@ "solidity-coverage": "^0.8.0", "ts-node": ">=8.0.0", "typechain": "^8.3.0", - "typescript": "^5.3.3" + "typescript": "^5.6.3" }, "lint-staged": { "contracts/**/*.sol": [ diff --git a/packages/horizon/tsconfig.json b/packages/horizon/tsconfig.json index 806f1c23e..202a9923e 100644 --- a/packages/horizon/tsconfig.json +++ b/packages/horizon/tsconfig.json @@ -6,10 +6,12 @@ "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, - "resolveJsonModule": true + "resolveJsonModule": true, + "outDir": "dist" }, "include": [ "hardhat.config.ts", + "types/**/*.ts", "scripts/**/*.ts", "tasks/**/*.ts", "test/**/*.ts", diff --git a/packages/horizon/types/hardhat-graph-protocol.d.ts b/packages/horizon/types/hardhat-graph-protocol.d.ts new file mode 100644 index 000000000..ab3c30b4b --- /dev/null +++ b/packages/horizon/types/hardhat-graph-protocol.d.ts @@ -0,0 +1,45 @@ +// TypeScript does not resolve correctly the type extensions when they are symlinked from the same monorepo. +// So we need to re-type it... this file should be a copy of hardhat-graph-protocol/src/type-extensions.ts +import 'hardhat/types/config' +import 'hardhat/types/runtime' +import type { GraphDeployments, GraphRuntimeEnvironment, GraphRuntimeEnvironmentOptions } from 'hardhat-graph-protocol/src/types' + +declare module 'hardhat/types/runtime' { + interface HardhatRuntimeEnvironment { + graph: (opts?: GraphRuntimeEnvironmentOptions) => GraphRuntimeEnvironment + } +} + +declare module 'hardhat/types/config' { + interface HardhatConfig { + graph: GraphRuntimeEnvironmentOptions + } + + interface HardhatUserConfig { + graph: GraphRuntimeEnvironmentOptions + } + + interface HardhatNetworkConfig { + deployments?: GraphDeployments + } + + interface HardhatNetworkUserConfig { + deployments?: GraphDeployments + } + + interface HttpNetworkConfig { + deployments?: GraphDeployments + } + + interface HttpNetworkUserConfig { + deployments?: GraphDeployments + } + + interface ProjectPathsConfig { + graph?: string + } + + interface ProjectPathsUserConfig { + graph?: string + } +} diff --git a/yarn.lock b/yarn.lock index 3b8fcd674..ce5384ed2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2965,7 +2965,7 @@ __metadata: solidity-coverage: "npm:^0.8.0" ts-node: "npm:>=8.0.0" typechain: "npm:^8.3.0" - typescript: "npm:^5.3.3" + typescript: "npm:^5.6.3" languageName: unknown linkType: soft @@ -6153,9 +6153,9 @@ __metadata: linkType: hard "@types/mocha@npm:^10.0.9": - version: 10.0.9 - resolution: "@types/mocha@npm:10.0.9" - checksum: 76dd782ac7e971ea159d4a7fd40c929afa051e040be3f41187ff03a2d7b3279e19828ddaa498ba1757b3e6b91316263bb7640db0e906938275b97a06e087b989 + version: 10.0.10 + resolution: "@types/mocha@npm:10.0.10" + checksum: d2b8c48138cde6923493e42b38e839695eb42edd04629abe480a8f34c0e3f50dd82a55832c2e8d2b6e6f9e4deb492d7d733e600fbbdd5a0ceccbcfc6844ff9d5 languageName: node linkType: hard From 6f67600c0fecc9242cf538d2aaeeaaa39863f7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 22 Nov 2024 15:54:27 -0300 Subject: [PATCH 287/343] chore: bump hardhat ignition to 0.15.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/README.md | 2 +- .../ignition/configs/horizon.hardhat.json5 | 2 +- packages/horizon/package.json | 2 +- packages/horizon/scripts/deploy.ts | 32 ++++++++++++++++++ packages/subgraph-service/package.json | 3 +- packages/subgraph-service/scripts/deploy.ts | 2 ++ yarn.lock | 33 ++++++++++--------- 7 files changed, 56 insertions(+), 20 deletions(-) create mode 100644 packages/horizon/scripts/deploy.ts diff --git a/packages/horizon/README.md b/packages/horizon/README.md index 76ddbf9b9..fa1a0410e 100644 --- a/packages/horizon/README.md +++ b/packages/horizon/README.md @@ -16,4 +16,4 @@ npx hardhat ignition deploy ./ignition/modules/horizon.ts \ You can use any network defined in `hardhat.config.ts` by replacing `hardhat` with the network name. -Note that this will deploy a standalone version of Graph Horizon contracts, meaning the Subgraph Service will not be deployed. If you want to deploy both please refer to the [Subgraph Service README](../subgraph-service/README.md) for deploy instructions. \ No newline at end of file +Note that this will deploy a standalone version of Graph Horizon contracts, meaning the Subgraph Service or any other data service will not be deployed. If you want to deploy the Subgraph Service please refer to the [Subgraph Service README](../subgraph-service/README.md) for deploy instructions. diff --git a/packages/horizon/ignition/configs/horizon.hardhat.json5 b/packages/horizon/ignition/configs/horizon.hardhat.json5 index a0dcc4aee..d4a3277cb 100644 --- a/packages/horizon/ignition/configs/horizon.hardhat.json5 +++ b/packages/horizon/ignition/configs/horizon.hardhat.json5 @@ -3,7 +3,7 @@ "governor": "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0", "pauseGuardian": "0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC", "subgraphAvailabilityOracle": "0xd03ea8624C8C5987235048901fB614fDcA89b117", - // Placeholder address for a standalone Horizon deployment, see README.md for more detals + // Placeholder address for a standalone Horizon deployment, see README.md for more details "subgraphServiceAddress": "0x0000000000000000000000000000000000000000" }, "RewardsManager": { diff --git a/packages/horizon/package.json b/packages/horizon/package.json index a43bf3f72..f338314ac 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -17,7 +17,7 @@ "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-foundry": "^1.1.1", - "@nomicfoundation/hardhat-ignition": "^0.15.7", + "@nomicfoundation/hardhat-ignition": "^0.15.8", "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", diff --git a/packages/horizon/scripts/deploy.ts b/packages/horizon/scripts/deploy.ts new file mode 100644 index 000000000..386b93803 --- /dev/null +++ b/packages/horizon/scripts/deploy.ts @@ -0,0 +1,32 @@ +require('json5/lib/register') + +import { ignition } from 'hardhat' + +import HorizonModule from '../ignition/modules/horizon' + +async function main() { + const HorizonConfig = removeNFromBigInts(require('../ignition/configs/horizon.hardhat.json5')) + // Deploy Horizon + await ignition.deploy(HorizonModule, { + parameters: HorizonConfig, + }) +} +main().catch((error) => { + console.error(error) + process.exit(1) +}) + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function removeNFromBigInts(obj: any): any { + // Ignition requires "n" suffix for bigints, but not here + if (typeof obj === 'string') { + return obj.replace(/(\d+)n/g, '$1') + } else if (Array.isArray(obj)) { + return obj.map(removeNFromBigInts) + } else if (typeof obj === 'object' && obj !== null) { + for (const key in obj) { + obj[key] = removeNFromBigInts(obj[key]) + } + } + return obj +} diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 0c325a17f..4af0ff39a 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -18,7 +18,7 @@ "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-foundry": "^1.1.1", - "@nomicfoundation/hardhat-ignition": "^0.15.7", + "@nomicfoundation/hardhat-ignition": "^0.15.8", "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", @@ -39,6 +39,7 @@ "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.8", "hardhat-storage-layout": "^0.1.7", + "json5": "^2.2.3", "lint-staged": "^15.2.2", "prettier": "^3.2.5", "prettier-plugin-solidity": "^1.3.1", diff --git a/packages/subgraph-service/scripts/deploy.ts b/packages/subgraph-service/scripts/deploy.ts index 32f798d6e..ee774861c 100644 --- a/packages/subgraph-service/scripts/deploy.ts +++ b/packages/subgraph-service/scripts/deploy.ts @@ -2,6 +2,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/no-explicit-any */ +require('json5/lib/register') + import { ignition } from 'hardhat' import DisputeManagerModule from '../ignition/modules/DisputeManager' diff --git a/yarn.lock b/yarn.lock index 6fc660114..18e4f4528 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2933,7 +2933,7 @@ __metadata: "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" - "@nomicfoundation/hardhat-ignition": "npm:^0.15.7" + "@nomicfoundation/hardhat-ignition": "npm:^0.15.8" "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.5" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" @@ -3026,7 +3026,7 @@ __metadata: "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" - "@nomicfoundation/hardhat-ignition": "npm:^0.15.7" + "@nomicfoundation/hardhat-ignition": "npm:^0.15.8" "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.5" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" @@ -3047,6 +3047,7 @@ __metadata: hardhat-contract-sizer: "npm:^2.10.0" hardhat-gas-reporter: "npm:^1.0.8" hardhat-storage-layout: "npm:^0.1.7" + json5: "npm:^2.2.3" lint-staged: "npm:^15.2.2" prettier: "npm:^3.2.5" prettier-plugin-solidity: "npm:^1.3.1" @@ -4690,12 +4691,12 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/hardhat-ignition@npm:^0.15.7": - version: 0.15.7 - resolution: "@nomicfoundation/hardhat-ignition@npm:0.15.7" +"@nomicfoundation/hardhat-ignition@npm:^0.15.8": + version: 0.15.8 + resolution: "@nomicfoundation/hardhat-ignition@npm:0.15.8" dependencies: - "@nomicfoundation/ignition-core": "npm:^0.15.7" - "@nomicfoundation/ignition-ui": "npm:^0.15.7" + "@nomicfoundation/ignition-core": "npm:^0.15.8" + "@nomicfoundation/ignition-ui": "npm:^0.15.8" chalk: "npm:^4.0.0" debug: "npm:^4.3.2" fs-extra: "npm:^10.0.0" @@ -4704,7 +4705,7 @@ __metadata: peerDependencies: "@nomicfoundation/hardhat-verify": ^2.0.1 hardhat: ^2.18.0 - checksum: a5ed2b4fb862185d25c7b718faacafb23b818bc22c4c80c9bab6baaa228cf430196058a9374649de99dd831b98b9088b7b337ef44e4cadbf370d75a8a325ced9 + checksum: 59b82470ff5b38451c0bd7b19015eeee2f3db801addd8d67e0b28d6cb5ae3f578dfc998d184cb9c71895f6106bbb53c9cdf28df1cb14917df76cf3db82e87c32 languageName: node linkType: hard @@ -4780,9 +4781,9 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ignition-core@npm:^0.15.7": - version: 0.15.7 - resolution: "@nomicfoundation/ignition-core@npm:0.15.7" +"@nomicfoundation/ignition-core@npm:^0.15.8": + version: 0.15.8 + resolution: "@nomicfoundation/ignition-core@npm:0.15.8" dependencies: "@ethersproject/address": "npm:5.6.1" "@nomicfoundation/solidity-analyzer": "npm:^0.1.1" @@ -4793,14 +4794,14 @@ __metadata: immer: "npm:10.0.2" lodash: "npm:4.17.21" ndjson: "npm:2.0.0" - checksum: b0d5717e7835da76595886e2729a0ee34536699091ad509b63fe2ec96b186495886c313c1c748dcc658524a5f409840031186f3af76975250be424248369c495 + checksum: ebb16e092bd9a39e48cc269d3627430656f558c814cea435eaf06f2e7d9a059a4470d1186c2a7d108efed755ef34d88d2aa74f9d6de5bb73e570996a53a7d2ef languageName: node linkType: hard -"@nomicfoundation/ignition-ui@npm:^0.15.7": - version: 0.15.7 - resolution: "@nomicfoundation/ignition-ui@npm:0.15.7" - checksum: 4e53ff1e5267e9882ee3f7bae3d39c0e0552e9600fd2ff12ccc49f22436e1b97e9cec215999fda0ebcfbdf6db054a1ad8c0d940641d97de5998dbb4c864ce649 +"@nomicfoundation/ignition-ui@npm:^0.15.8": + version: 0.15.8 + resolution: "@nomicfoundation/ignition-ui@npm:0.15.8" + checksum: c5e7b41631824a048160b8d5400f5fb0cb05412a9d2f3896044f7cfedea4298d31a8d5b4b8be38296b5592db4fa9255355843dcb3d781bc7fa1200fb03ea8476 languageName: node linkType: hard From b23410494c2aa12d4a11a70cfa7efdab24a1931c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 22 Nov 2024 15:56:27 -0300 Subject: [PATCH 288/343] chore: remove deploy files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../artifacts/BridgeEscrow#BridgeEscrow.json | 159 - .../BridgeEscrow#BridgeEscrow_Instance.json | 159 - .../artifacts/BridgeEscrow#GraphProxy.json | 177 - .../artifacts/Controller#Controller.json | 349 - .../artifacts/Curation#Curation.json | 707 - .../artifacts/Curation#Curation_Instance.json | 707 - .../Curation#GraphCurationToken.json | 414 - .../artifacts/Curation#GraphProxy.json | 177 - .../DisputeManager#DisputeManager.dbg.json | 4 - .../DisputeManager#DisputeManager.json | 1390 - ...teManager#DisputeManager_Instance.dbg.json | 4 - ...isputeManager#DisputeManager_Instance.json | 1390 - .../artifacts/DisputeManager#ProxyAdmin.json | 132 - .../artifacts/EpochManager#EpochManager.json | 364 - .../EpochManager#EpochManager_Instance.json | 364 - .../artifacts/EpochManager#GraphProxy.json | 177 - .../GraphHorizon_Periphery#Dummy.json | 10 - .../GraphPayments#GraphPayments.json | 308 - .../GraphPayments#GraphPayments_Instance.json | 308 - .../GraphProxyAdmin#GraphProxyAdmin.json | 234 - .../artifacts/GraphToken#GraphProxy.json | 177 - .../artifacts/GraphToken#GraphToken.json | 750 - .../GraphToken#GraphToken_Instance.json | 750 - .../GraphTokenGateway#GraphProxy.json | 177 - .../GraphTokenGateway#GraphTokenGateway.json | 647 - ...kenGateway#GraphTokenGateway_Instance.json | 647 - ...izonProxies#GraphProxy_HorizonStaking.json | 177 - ...zonProxies#OZProxyDummy_GraphPayments.json | 10 - ...onProxies#OZProxyDummy_PaymentsEscrow.json | 10 - ...rizonProxies#ProxyAdmin_GraphPayments.json | 132 - ...izonProxies#ProxyAdmin_PaymentsEscrow.json | 132 - .../HorizonProxies#RegisteredDummy.json | 10 - ...sparentUpgradeableProxy_GraphPayments.json | 116 - ...parentUpgradeableProxy_PaymentsEscrow.json | 116 - .../HorizonStaking#HorizonStaking.json | 2384 - ...orizonStaking#HorizonStaking_Instance.json | 2384 - ...onStakingExtension#ExponentialRebates.json | 55 - ...kingExtension#HorizonStakingExtension.json | 1173 - .../PaymentsEscrow#PaymentsEscrow.json | 835 - ...aymentsEscrow#PaymentsEscrow_Instance.json | 835 - .../artifacts/RewardsManager#GraphProxy.json | 177 - .../RewardsManager#RewardsManager.json | 635 - ...ewardsManager#RewardsManager_Instance.json | 635 - .../artifacts/SubgraphService#ProxyAdmin.json | 132 - .../SubgraphService#SubgraphService.dbg.json | 4 - .../SubgraphService#SubgraphService.json | 2393 - ...hService#SubgraphService_Instance.dbg.json | 4 - ...graphService#SubgraphService_Instance.json | 2393 - ...ceProxies#OZProxyDummy_DisputeManager.json | 10 - ...eProxies#OZProxyDummy_SubgraphService.json | 10 - ...viceProxies#ProxyAdmin_DisputeManager.json | 132 - ...iceProxies#ProxyAdmin_SubgraphService.json | 132 - ...parentUpgradeableProxy_DisputeManager.json | 116 - ...arentUpgradeableProxy_SubgraphService.json | 116 - .../artifacts/TAPCollector#TAPCollector.json | 776 - .../e51c04f0f0fdce5715962999616918b7.json | 254531 --------------- .../chain-421614/deployed_addresses.json | 53 - .../deployments/chain-421614/journal.jsonl | 378 - 58 files changed, 281678 deletions(-) delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Controller#Controller.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.dbg.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.dbg.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#ProxyAdmin.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#ProxyAdmin.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.dbg.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.dbg.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_DisputeManager.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_SubgraphService.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_DisputeManager.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_SubgraphService.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/build-info/e51c04f0f0fdce5715962999616918b7.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/deployed_addresses.json delete mode 100644 packages/subgraph-service/ignition/deployments/chain-421614/journal.jsonl diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json deleted file mode 100644 index 1264fb6e0..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "BridgeEscrow", - "sourceName": "contracts/gateway/BridgeEscrow.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "approveAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "revokeAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json deleted file mode 100644 index 1264fb6e0..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#BridgeEscrow_Instance.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "BridgeEscrow", - "sourceName": "contracts/gateway/BridgeEscrow.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "approveAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "revokeAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json deleted file mode 100644 index 2cfb21e41..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/BridgeEscrow#GraphProxy.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphProxy", - "sourceName": "contracts/upgrades/GraphProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_impl", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldAdmin", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPendingImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newPendingImplementation", - "type": "address" - } - ], - "name": "PendingImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "acceptUpgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptUpgradeAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", - "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Controller#Controller.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Controller#Controller.json deleted file mode 100644 index 6979339d2..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Controller#Controller.json +++ /dev/null @@ -1,349 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Controller", - "sourceName": "contracts/governance/Controller.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewOwnership", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPauseGuardian", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - } - ], - "name": "NewPauseGuardian", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewPendingOwnership", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "isPaused", - "type": "bool" - } - ], - "name": "PartialPauseChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "isPaused", - "type": "bool" - } - ], - "name": "PauseChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "SetContractProxy", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - } - ], - "name": "getContractProxy", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getGovernor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPartialPauseTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPauseTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "partialPaused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseGuardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingGovernor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_contractAddress", - "type": "address" - } - ], - "name": "setContractProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_toPartialPause", - "type": "bool" - } - ], - "name": "setPartialPaused", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newPauseGuardian", - "type": "address" - } - ], - "name": "setPauseGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_toPause", - "type": "bool" - } - ], - "name": "setPaused", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newGovernor", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - } - ], - "name": "unsetContractProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "updateController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506100243361003360201b6109b21760201c565b61002e6001610055565b6100e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff1615158115151415610075576100e4565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff910416156100a157426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a15b50565b610ba0806100f66000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80635c975abb116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80635c975abb146101e057806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b80632e292fc7116100de5780632e292fc71461017757806348bde20c146101935780634fc07d75146101b957806356371bd8146101c15761010b565b80630c340a2414610110578063147ddef51461013457806316c38b3c1461014e57806324a3d6221461016f575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b61013c6102c7565b60408051918252519081900360200190f35b61016d6004803603602081101561016457600080fd5b503515156102cd565b005b610118610337565b61017f610346565b604080519115158252519081900360200190f35b61016d600480360360208110156101a957600080fd5b50356001600160a01b0316610356565b610118610412565b61016d600480360360208110156101d757600080fd5b50351515610421565b61017f610488565b61016d610498565b61016d6004803603602081101561020657600080fd5b50356105a6565b61013c610651565b61016d6004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b61016d6004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b61016d6004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b60025481565b6000546001600160a01b03163314806102f057506004546001600160a01b031633145b61032b5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b610334816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103ae576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610409576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61033481610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061044457506004546001600160a01b031633145b61047f5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61033481610ab7565b600154600160a81b900460ff1690565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f457610334565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad757610334565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca26469706673582212207cecec10a8617577e80b5c52f6cd82da5e5974468c039848ed5e90b25c8267c764736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80635c975abb116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80635c975abb146101e057806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b80632e292fc7116100de5780632e292fc71461017757806348bde20c146101935780634fc07d75146101b957806356371bd8146101c15761010b565b80630c340a2414610110578063147ddef51461013457806316c38b3c1461014e57806324a3d6221461016f575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b61013c6102c7565b60408051918252519081900360200190f35b61016d6004803603602081101561016457600080fd5b503515156102cd565b005b610118610337565b61017f610346565b604080519115158252519081900360200190f35b61016d600480360360208110156101a957600080fd5b50356001600160a01b0316610356565b610118610412565b61016d600480360360208110156101d757600080fd5b50351515610421565b61017f610488565b61016d610498565b61016d6004803603602081101561020657600080fd5b50356105a6565b61013c610651565b61016d6004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b61016d6004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b61016d6004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b60025481565b6000546001600160a01b03163314806102f057506004546001600160a01b031633145b61032b5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b610334816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103ae576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610409576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61033481610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061044457506004546001600160a01b031633145b61047f5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61033481610ab7565b600154600160a81b900460ff1690565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f457610334565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad757610334565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca26469706673582212207cecec10a8617577e80b5c52f6cd82da5e5974468c039848ed5e90b25c8267c764736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation.json deleted file mode 100644 index 134085c89..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation.json +++ /dev/null @@ -1,707 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "L2Curation", - "sourceName": "contracts/l2/curation/L2Curation.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "curator", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "signal", - "type": "uint256" - } - ], - "name": "Burned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Collected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "curator", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "signal", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "curationTax", - "type": "uint256" - } - ], - "name": "Signalled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newSubgraphService", - "type": "address" - } - ], - "name": "SubgraphServiceSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "bondingCurve", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_signalIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_tokensOutMin", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokens", - "type": "uint256" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "curationTaxPercentage", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "curationTokenMaster", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "defaultReserveRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getCurationPoolSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getCurationPoolTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_curator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getCuratorSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - }, - { - "internalType": "address", - "name": "_curationTokenMaster", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_curationTaxPercentage", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_minimumCurationDeposit", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "isCurated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumCurationDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_signalOutMin", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - } - ], - "name": "mintTaxFree", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pools", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "reserveRatio", - "type": "uint32" - }, - { - "internalType": "contract IGraphCurationToken", - "name": "gcs", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_percentage", - "type": "uint32" - } - ], - "name": "setCurationTaxPercentage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_curationTokenMaster", - "type": "address" - } - ], - "name": "setCurationTokenMaster", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "setDefaultReserveRatio", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minimumCurationDeposit", - "type": "uint256" - } - ], - "name": "setMinimumCurationDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subgraphService", - "type": "address" - } - ], - "name": "setSubgraphService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_signalIn", - "type": "uint256" - } - ], - "name": "signalToTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphService", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - } - ], - "name": "tokensToSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - } - ], - "name": "tokensToSignalNoTax", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - } - ], - "name": "tokensToSignalToTokensNoTax", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json deleted file mode 100644 index 134085c89..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#Curation_Instance.json +++ /dev/null @@ -1,707 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "L2Curation", - "sourceName": "contracts/l2/curation/L2Curation.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "curator", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "signal", - "type": "uint256" - } - ], - "name": "Burned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Collected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "curator", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "signal", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "curationTax", - "type": "uint256" - } - ], - "name": "Signalled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newSubgraphService", - "type": "address" - } - ], - "name": "SubgraphServiceSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "bondingCurve", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_signalIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_tokensOutMin", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokens", - "type": "uint256" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "curationTaxPercentage", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "curationTokenMaster", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "defaultReserveRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getCurationPoolSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getCurationPoolTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_curator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getCuratorSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - }, - { - "internalType": "address", - "name": "_curationTokenMaster", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_curationTaxPercentage", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_minimumCurationDeposit", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "isCurated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumCurationDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_signalOutMin", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - } - ], - "name": "mintTaxFree", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pools", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "reserveRatio", - "type": "uint32" - }, - { - "internalType": "contract IGraphCurationToken", - "name": "gcs", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_percentage", - "type": "uint32" - } - ], - "name": "setCurationTaxPercentage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_curationTokenMaster", - "type": "address" - } - ], - "name": "setCurationTokenMaster", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "setDefaultReserveRatio", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minimumCurationDeposit", - "type": "uint256" - } - ], - "name": "setMinimumCurationDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subgraphService", - "type": "address" - } - ], - "name": "setSubgraphService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_signalIn", - "type": "uint256" - } - ], - "name": "signalToTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphService", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - } - ], - "name": "tokensToSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - } - ], - "name": "tokensToSignalNoTax", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - } - ], - "name": "tokensToSignalToTokensNoTax", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json deleted file mode 100644 index b7220dcc7..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphCurationToken.json +++ /dev/null @@ -1,414 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphCurationToken", - "sourceName": "contracts/curation/GraphCurationToken.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewOwnership", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewPendingOwnership", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingGovernor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newGovernor", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506114ec806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json deleted file mode 100644 index 2cfb21e41..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/Curation#GraphProxy.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphProxy", - "sourceName": "contracts/upgrades/GraphProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_impl", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldAdmin", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPendingImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newPendingImplementation", - "type": "address" - } - ], - "name": "PendingImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "acceptUpgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptUpgradeAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", - "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.dbg.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.dbg.json deleted file mode 100644 index 4922c5523..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../build-info/e51c04f0f0fdce5715962999616918b7.json" -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.json deleted file mode 100644 index b34c8dc47..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager.json +++ /dev/null @@ -1,1390 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "DisputeManager", - "sourceName": "contracts/DisputeManager.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLength", - "type": "uint256" - } - ], - "name": "AttestationInvalidBytesLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerDisputeAlreadyCreated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum IDisputeManager.DisputeStatus", - "name": "status", - "type": "uint8" - } - ], - "name": "DisputeManagerDisputeNotPending", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerDisputePeriodNotFinished", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerDisputePeriodZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "DisputeManagerIndexerNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerInvalidDispute", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "DisputeManagerInvalidDisputeDeposit", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "cut", - "type": "uint32" - } - ], - "name": "DisputeManagerInvalidFishermanReward", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxSlashingCut", - "type": "uint32" - } - ], - "name": "DisputeManagerInvalidMaxSlashingCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokensSlash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxTokensSlash", - "type": "uint256" - } - ], - "name": "DisputeManagerInvalidTokensSlash", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "relatedDisputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerMustAcceptRelatedDispute", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "requestCID1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "requestCID2", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID2", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId2", - "type": "bytes32" - } - ], - "name": "DisputeManagerNonConflictingAttestations", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId2", - "type": "bytes32" - } - ], - "name": "DisputeManagerNonMatchingSubgraphDeployment", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerNotArbitrator", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerNotFisherman", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerZeroTokens", - "type": "error" - }, - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "arbitrator", - "type": "address" - } - ], - "name": "ArbitratorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "DisputeDepositSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeDrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId1", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId2", - "type": "bytes32" - } - ], - "name": "DisputeLinked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - } - ], - "name": "DisputePeriodSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeRejected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "fishermanRewardCut", - "type": "uint32" - } - ], - "name": "FishermanRewardCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "name": "IndexingDisputeCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "maxSlashingCut", - "type": "uint32" - } - ], - "name": "MaxSlashingCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "attestation", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "name": "QueryDisputeCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "subgraphService", - "type": "address" - } - ], - "name": "SubgraphServiceSet", - "type": "event" - }, - { - "inputs": [], - "name": "MAX_FISHERMAN_REWARD_CUT", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokensSlash", - "type": "uint256" - } - ], - "name": "acceptDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation2", - "type": "tuple" - } - ], - "name": "areConflictingAttestations", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "cancelDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - } - ], - "name": "createIndexingDispute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "attestationData", - "type": "bytes" - } - ], - "name": "createQueryDispute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "attestationData1", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "attestationData2", - "type": "bytes" - } - ], - "name": "createQueryDisputeConflict", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputePeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "internalType": "uint256", - "name": "deposit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "relatedDisputeId", - "type": "bytes32" - }, - { - "internalType": "enum IDisputeManager.DisputeType", - "name": "disputeType", - "type": "uint8" - }, - { - "internalType": "enum IDisputeManager.DisputeStatus", - "name": "status", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "drawDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "internalType": "struct Attestation.Receipt", - "name": "receipt", - "type": "tuple" - } - ], - "name": "encodeReceipt", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fishermanRewardCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation", - "type": "tuple" - } - ], - "name": "getAttestationIndexer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputePeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "getStakeSnapshot", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "arbitrator", - "type": "address" - }, - { - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "fishermanRewardCut_", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxSlashingCut_", - "type": "uint32" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "isDisputeCreated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxSlashingCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "rejectDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "arbitrator", - "type": "address" - } - ], - "name": "setArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "setDisputeDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - } - ], - "name": "setDisputePeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "fishermanRewardCut_", - "type": "uint32" - } - ], - "name": "setFishermanRewardCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxSlashingCut_", - "type": "uint32" - } - ], - "name": "setMaxSlashingCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "subgraphService", - "type": "address" - } - ], - "name": "setSubgraphService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphService", - "outputs": [ - { - "internalType": "contract ISubgraphService", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101c060405234801561001157600080fd5b506040516138243803806138248339810160408190526100309161049b565b806001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b29061033b565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e59061033b565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e9061033b565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b60208201526101589061033b565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526101909061033b565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb9061033b565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102099061033b565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102459061033b565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a9061033b565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a4506103356103e9565b50610519565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161037691815260200190565b602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b7919061049b565b9050826001600160a01b0382166103e25760405163218f5add60e11b815260040161007191906104cb565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104395760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104985780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156104ad57600080fd5b81516001600160a01b03811681146104c457600080fd5b9392505050565b602081526000825180602084015260005b818110156104f957602081860181015160408684010152016104dc565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516132a861057c60003960005050600050506000505060005050600050506000505060005050600050506000611fe30152600061160e01526132a86000f3fe608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.dbg.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.dbg.json deleted file mode 100644 index 4922c5523..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../build-info/e51c04f0f0fdce5715962999616918b7.json" -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.json deleted file mode 100644 index b34c8dc47..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#DisputeManager_Instance.json +++ /dev/null @@ -1,1390 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "DisputeManager", - "sourceName": "contracts/DisputeManager.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLength", - "type": "uint256" - } - ], - "name": "AttestationInvalidBytesLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerDisputeAlreadyCreated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum IDisputeManager.DisputeStatus", - "name": "status", - "type": "uint8" - } - ], - "name": "DisputeManagerDisputeNotPending", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerDisputePeriodNotFinished", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerDisputePeriodZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "DisputeManagerIndexerNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerInvalidDispute", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "DisputeManagerInvalidDisputeDeposit", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "cut", - "type": "uint32" - } - ], - "name": "DisputeManagerInvalidFishermanReward", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxSlashingCut", - "type": "uint32" - } - ], - "name": "DisputeManagerInvalidMaxSlashingCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokensSlash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxTokensSlash", - "type": "uint256" - } - ], - "name": "DisputeManagerInvalidTokensSlash", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "relatedDisputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerMustAcceptRelatedDispute", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "requestCID1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "requestCID2", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID2", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId2", - "type": "bytes32" - } - ], - "name": "DisputeManagerNonConflictingAttestations", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId2", - "type": "bytes32" - } - ], - "name": "DisputeManagerNonMatchingSubgraphDeployment", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerNotArbitrator", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerNotFisherman", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerZeroTokens", - "type": "error" - }, - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "arbitrator", - "type": "address" - } - ], - "name": "ArbitratorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "DisputeDepositSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeDrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId1", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId2", - "type": "bytes32" - } - ], - "name": "DisputeLinked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - } - ], - "name": "DisputePeriodSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeRejected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "fishermanRewardCut", - "type": "uint32" - } - ], - "name": "FishermanRewardCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "name": "IndexingDisputeCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "maxSlashingCut", - "type": "uint32" - } - ], - "name": "MaxSlashingCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "attestation", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "name": "QueryDisputeCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "subgraphService", - "type": "address" - } - ], - "name": "SubgraphServiceSet", - "type": "event" - }, - { - "inputs": [], - "name": "MAX_FISHERMAN_REWARD_CUT", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokensSlash", - "type": "uint256" - } - ], - "name": "acceptDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation2", - "type": "tuple" - } - ], - "name": "areConflictingAttestations", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "cancelDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - } - ], - "name": "createIndexingDispute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "attestationData", - "type": "bytes" - } - ], - "name": "createQueryDispute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "attestationData1", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "attestationData2", - "type": "bytes" - } - ], - "name": "createQueryDisputeConflict", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputePeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "internalType": "uint256", - "name": "deposit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "relatedDisputeId", - "type": "bytes32" - }, - { - "internalType": "enum IDisputeManager.DisputeType", - "name": "disputeType", - "type": "uint8" - }, - { - "internalType": "enum IDisputeManager.DisputeStatus", - "name": "status", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "drawDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "internalType": "struct Attestation.Receipt", - "name": "receipt", - "type": "tuple" - } - ], - "name": "encodeReceipt", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fishermanRewardCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation", - "type": "tuple" - } - ], - "name": "getAttestationIndexer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputePeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "getStakeSnapshot", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "arbitrator", - "type": "address" - }, - { - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "fishermanRewardCut_", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxSlashingCut_", - "type": "uint32" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "isDisputeCreated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxSlashingCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "rejectDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "arbitrator", - "type": "address" - } - ], - "name": "setArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "setDisputeDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - } - ], - "name": "setDisputePeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "fishermanRewardCut_", - "type": "uint32" - } - ], - "name": "setFishermanRewardCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxSlashingCut_", - "type": "uint32" - } - ], - "name": "setMaxSlashingCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "subgraphService", - "type": "address" - } - ], - "name": "setSubgraphService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphService", - "outputs": [ - { - "internalType": "contract ISubgraphService", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101c060405234801561001157600080fd5b506040516138243803806138248339810160408190526100309161049b565b806001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b29061033b565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e59061033b565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e9061033b565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b60208201526101589061033b565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526101909061033b565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb9061033b565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102099061033b565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102459061033b565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a9061033b565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a4506103356103e9565b50610519565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161037691815260200190565b602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b7919061049b565b9050826001600160a01b0382166103e25760405163218f5add60e11b815260040161007191906104cb565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104395760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104985780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156104ad57600080fd5b81516001600160a01b03811681146104c457600080fd5b9392505050565b602081526000825180602084015260005b818110156104f957602081860181015160408684010152016104dc565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516132a861057c60003960005050600050506000505060005050600050506000505060005050600050506000611fe30152600061160e01526132a86000f3fe608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#ProxyAdmin.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#ProxyAdmin.json deleted file mode 100644 index 942e4b2e5..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/DisputeManager#ProxyAdmin.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ProxyAdmin", - "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "UPGRADE_INTERFACE_VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json deleted file mode 100644 index 359505960..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager.json +++ /dev/null @@ -1,364 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EpochManager", - "sourceName": "contracts/epochs/EpochManager.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epochLength", - "type": "uint256" - } - ], - "name": "EpochLengthUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "EpochRun", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "blockHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "blockNum", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentEpochBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentEpochBlockSinceStart", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epochLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_epoch", - "type": "uint256" - } - ], - "name": "epochsSince", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epochsSinceUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_epochLength", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isCurrentEpochRun", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastLengthUpdateBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastLengthUpdateEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastRunEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "runEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_epochLength", - "type": "uint256" - } - ], - "name": "setEpochLength", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json deleted file mode 100644 index 359505960..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#EpochManager_Instance.json +++ /dev/null @@ -1,364 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EpochManager", - "sourceName": "contracts/epochs/EpochManager.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epochLength", - "type": "uint256" - } - ], - "name": "EpochLengthUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "EpochRun", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "blockHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "blockNum", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentEpochBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentEpochBlockSinceStart", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epochLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_epoch", - "type": "uint256" - } - ], - "name": "epochsSince", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epochsSinceUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_epochLength", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isCurrentEpochRun", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastLengthUpdateBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastLengthUpdateEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastRunEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "runEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_epochLength", - "type": "uint256" - } - ], - "name": "setEpochLength", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json deleted file mode 100644 index 2cfb21e41..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/EpochManager#GraphProxy.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphProxy", - "sourceName": "contracts/upgrades/GraphProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_impl", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldAdmin", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPendingImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newPendingImplementation", - "type": "address" - } - ], - "name": "PendingImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "acceptUpgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptUpgradeAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", - "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json deleted file mode 100644 index 0d073cb30..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphHorizon_Periphery#Dummy.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Dummy", - "sourceName": "contracts/mocks/Dummy.sol", - "abi": [], - "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json deleted file mode 100644 index 9015bd053..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphPayments", - "sourceName": "contracts/payments/GraphPayments.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - }, - { - "internalType": "uint256", - "name": "protocolPaymentCut", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "GraphPaymentsInsufficientTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "protocolPaymentCut", - "type": "uint256" - } - ], - "name": "GraphPaymentsInvalidProtocolPaymentCut", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReceiver", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDelegationPool", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensProtocol", - "type": "uint256" - } - ], - "name": "PaymentCollected", - "type": "event" - }, - { - "inputs": [], - "name": "PROTOCOL_PAYMENT_CUT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json deleted file mode 100644 index 9015bd053..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphPayments#GraphPayments_Instance.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphPayments", - "sourceName": "contracts/payments/GraphPayments.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - }, - { - "internalType": "uint256", - "name": "protocolPaymentCut", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "GraphPaymentsInsufficientTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "protocolPaymentCut", - "type": "uint256" - } - ], - "name": "GraphPaymentsInvalidProtocolPaymentCut", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReceiver", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDelegationPool", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensProtocol", - "type": "uint256" - } - ], - "name": "PaymentCollected", - "type": "event" - }, - { - "inputs": [], - "name": "PROTOCOL_PAYMENT_CUT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json deleted file mode 100644 index 07f0623c5..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphProxyAdmin#GraphProxyAdmin.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphProxyAdmin", - "sourceName": "contracts/upgrades/GraphProxyAdmin.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewOwnership", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewPendingOwnership", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract GraphUpgradeable", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract GraphUpgradeable", - "name": "_implementation", - "type": "address" - }, - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "changeProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "getProxyAdmin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "getProxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "getProxyPendingImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingGovernor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newGovernor", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506100243361002960201b610a0c1760201c565b61004b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610a648061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json deleted file mode 100644 index 2cfb21e41..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphProxy.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphProxy", - "sourceName": "contracts/upgrades/GraphProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_impl", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldAdmin", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPendingImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newPendingImplementation", - "type": "address" - } - ], - "name": "PendingImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "acceptUpgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptUpgradeAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", - "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json deleted file mode 100644 index 5889eeaf0..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken.json +++ /dev/null @@ -1,750 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "L2GraphToken", - "sourceName": "contracts/l2/token/L2GraphToken.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "BridgeBurned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "BridgeMinted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "gateway", - "type": "address" - } - ], - "name": "GatewaySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l1Address", - "type": "address" - } - ], - "name": "L1AddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "MinterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "MinterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewOwnership", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewPendingOwnership", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "addMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "bridgeBurn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "bridgeMint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "gateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "isMinter", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l1Address", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingGovernor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "removeMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gw", - "type": "address" - } - ], - "name": "setGateway", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - } - ], - "name": "setL1Address", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newGovernor", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json deleted file mode 100644 index 5889eeaf0..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphToken#GraphToken_Instance.json +++ /dev/null @@ -1,750 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "L2GraphToken", - "sourceName": "contracts/l2/token/L2GraphToken.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "BridgeBurned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "BridgeMinted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "gateway", - "type": "address" - } - ], - "name": "GatewaySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l1Address", - "type": "address" - } - ], - "name": "L1AddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "MinterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "MinterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewOwnership", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "NewPendingOwnership", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "addMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "bridgeBurn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "bridgeMint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "gateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "isMinter", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l1Address", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingGovernor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "removeMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gw", - "type": "address" - } - ], - "name": "setGateway", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - } - ], - "name": "setL1Address", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newGovernor", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json deleted file mode 100644 index 2cfb21e41..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphProxy.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphProxy", - "sourceName": "contracts/upgrades/GraphProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_impl", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldAdmin", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPendingImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newPendingImplementation", - "type": "address" - } - ], - "name": "PendingImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "acceptUpgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptUpgradeAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", - "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json deleted file mode 100644 index 0fa0a97d2..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway.json +++ /dev/null @@ -1,647 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "L2GraphTokenGateway", - "sourceName": "contracts/l2/gateway/L2GraphTokenGateway.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "DepositFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l1Counterpart", - "type": "address" - } - ], - "name": "L1CounterpartAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l1GRT", - "type": "address" - } - ], - "name": "L1TokenAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Router", - "type": "address" - } - ], - "name": "L2RouterSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPauseGuardian", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - } - ], - "name": "NewPauseGuardian", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "isPaused", - "type": "bool" - } - ], - "name": "PartialPauseChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "isPaused", - "type": "bool" - } - ], - "name": "PauseChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "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": "_id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "TxToL1", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2ToL1Id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "exitNum", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithdrawalInitiated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l1ERC20", - "type": "address" - } - ], - "name": "calculateL2TokenAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "finalizeInboundTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "getOutboundCalldata", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "l1Counterpart", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l1GRT", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2Router", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPartialPauseTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPauseTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "outboundTransfer", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "outboundTransfer", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "pauseGuardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1Counterpart", - "type": "address" - } - ], - "name": "setL1CounterpartAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1GRT", - "type": "address" - } - ], - "name": "setL1TokenAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2Router", - "type": "address" - } - ], - "name": "setL2Router", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newPauseGuardian", - "type": "address" - } - ], - "name": "setPauseGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_newPaused", - "type": "bool" - } - ], - "name": "setPaused", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033", - "deployedBytecode": "0x6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json deleted file mode 100644 index 0fa0a97d2..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/GraphTokenGateway#GraphTokenGateway_Instance.json +++ /dev/null @@ -1,647 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "L2GraphTokenGateway", - "sourceName": "contracts/l2/gateway/L2GraphTokenGateway.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "DepositFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l1Counterpart", - "type": "address" - } - ], - "name": "L1CounterpartAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l1GRT", - "type": "address" - } - ], - "name": "L1TokenAddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l2Router", - "type": "address" - } - ], - "name": "L2RouterSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPauseGuardian", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - } - ], - "name": "NewPauseGuardian", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "isPaused", - "type": "bool" - } - ], - "name": "PartialPauseChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "isPaused", - "type": "bool" - } - ], - "name": "PauseChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "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": "_id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "TxToL1", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "l1Token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2ToL1Id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "exitNum", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithdrawalInitiated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "l1ERC20", - "type": "address" - } - ], - "name": "calculateL2TokenAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "finalizeInboundTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "getOutboundCalldata", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "l1Counterpart", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l1GRT", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2Router", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPartialPauseTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPauseTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "outboundTransfer", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1Token", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "outboundTransfer", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "pauseGuardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1Counterpart", - "type": "address" - } - ], - "name": "setL1CounterpartAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l1GRT", - "type": "address" - } - ], - "name": "setL1TokenAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_l2Router", - "type": "address" - } - ], - "name": "setL2Router", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newPauseGuardian", - "type": "address" - } - ], - "name": "setPauseGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_newPaused", - "type": "bool" - } - ], - "name": "setPaused", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033", - "deployedBytecode": "0x6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json deleted file mode 100644 index 2cfb21e41..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#GraphProxy_HorizonStaking.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphProxy", - "sourceName": "contracts/upgrades/GraphProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_impl", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldAdmin", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPendingImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newPendingImplementation", - "type": "address" - } - ], - "name": "PendingImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "acceptUpgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptUpgradeAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", - "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json deleted file mode 100644 index 0d073cb30..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_GraphPayments.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Dummy", - "sourceName": "contracts/mocks/Dummy.sol", - "abi": [], - "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json deleted file mode 100644 index 0d073cb30..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#OZProxyDummy_PaymentsEscrow.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Dummy", - "sourceName": "contracts/mocks/Dummy.sol", - "abi": [], - "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json deleted file mode 100644 index 942e4b2e5..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_GraphPayments.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ProxyAdmin", - "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "UPGRADE_INTERFACE_VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json deleted file mode 100644 index 942e4b2e5..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#ProxyAdmin_PaymentsEscrow.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ProxyAdmin", - "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "UPGRADE_INTERFACE_VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json deleted file mode 100644 index 0d073cb30..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#RegisteredDummy.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Dummy", - "sourceName": "contracts/mocks/Dummy.sol", - "abi": [], - "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json deleted file mode 100644 index c7f1f49b4..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_GraphPayments.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "TransparentUpgradeableProxy", - "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "ERC1967InvalidAdmin", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "ERC1967InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "ERC1967NonPayable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [], - "name": "ProxyDeniedAdminAccess", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", - "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json deleted file mode 100644 index c7f1f49b4..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "TransparentUpgradeableProxy", - "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "ERC1967InvalidAdmin", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "ERC1967InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "ERC1967NonPayable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [], - "name": "ProxyDeniedAdminAccess", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", - "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json deleted file mode 100644 index c619989d6..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking.json +++ /dev/null @@ -1,2384 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "HorizonStaking", - "sourceName": "contracts/staking/HorizonStaking.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - }, - { - "internalType": "address", - "name": "stakingExtensionAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "subgraphDataServiceAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingCallerIsServiceProvider", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientIdleStake", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minShares", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientShares", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientStakeForLegacyAllocations", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minRequired", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientTokens", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidBeneficiaryZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "HorizonStakingInvalidDelegationFeeCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidDelegationPool", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidDelegationPoolState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - } - ], - "name": "HorizonStakingInvalidMaxVerifierCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidProvision", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidServiceProviderZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "HorizonStakingInvalidThawingPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidVerifierZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidZeroShares", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidZeroTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "HorizonStakingNotAuthorized", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingNothingThawing", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingProvisionAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minShares", - "type": "uint256" - } - ], - "name": "HorizonStakingSlippageProtection", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "until", - "type": "uint256" - } - ], - "name": "HorizonStakingStillThawing", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingTooManyThawRequests", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingTooManyTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingVerifierNotAllowed", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListEmptyList", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidIterations", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidZeroId", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListMaxElementsExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ManagedIsPaused", - "type": "error" - }, - { - "inputs": [], - "name": "ManagedOnlyController", - "type": "error" - }, - { - "inputs": [], - "name": "ManagedOnlyGovernor", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "AllowedLockedVerifierSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegatedTokensWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "DelegationFeeCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegationSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "enabled", - "type": "bool" - } - ], - "name": "DelegationSlashingEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegationSlashingSkipped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "MaxThawingPeriodSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "OperatorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionParametersSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionParametersStaged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionThawed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "StakeDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "until", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - } - ], - "name": "ThawRequestCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bool", - "name": "valid", - "type": "bool" - } - ], - "name": "ThawRequestFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawRequestsFulfilled", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ThawRequestsFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "ThawingPeriodCleared", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensDelegated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensDeprovisioned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensToDelegationPoolAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensUndelegated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "VerifierTokensSent", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "acceptProvisionParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "addToDelegationPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "addToProvision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "clearThawingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minSharesOut", - "type": "uint256" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "deprovision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegatedTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "delegator", - "type": "address" - } - ], - "name": "getDelegation", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Delegation", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - } - ], - "name": "getDelegationFeeCut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegationPool", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.DelegationPool", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getIdleStake", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getMaxThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProviderTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProvision", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "createdAt", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "maxVerifierCutPending", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriodPending", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Provision", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getServiceProvider", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokensStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensProvisioned", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ServiceProvider", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - } - ], - "name": "getThawRequest", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "next", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ThawRequest", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawRequestList", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "internalType": "struct LinkedList.List", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint32", - "name": "delegationRatio", - "type": "uint32" - } - ], - "name": "getTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "isAllowedLockedVerifier", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isAuthorized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isDelegationSlashingEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "provision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "provisionLocked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oldServiceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "oldVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "newServiceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "newVerifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minSharesForNewProvider", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "redelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "oldVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "newVerifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "reprovision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setAllowedLockedVerifier", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "setDelegationFeeCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "setDelegationSlashingEnabled", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "setMaxThawingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setOperatorLocked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint32", - "name": "newMaxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "newThawingPeriod", - "type": "uint64" - } - ], - "name": "setProvisionParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensVerifier", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifierDestination", - "type": "address" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stakeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stakeToProvision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "thaw", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "beneficiary", - "type": "address" - } - ], - "name": "undelegate", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "undelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "undelegate", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "unstake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "withdrawDelegated", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "newServiceProvider", - "type": "address" - } - ], - "name": "withdrawDelegated", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x61020060405234801561001157600080fd5b506040516160913803806160918339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ae16105b06000396000610331015260008181610eb30152818161180b015281816118be015281816118e0015281816134240152818161425401526145900152600050506000505060005050600050506000505060006133dd015260005050600050506000505060008181610e7d01528181611a5c015281816129af01528181612cc601528181612d5d01528181612ef701528181613ec1015281816140d0015281816141e401526142fc0152615ae16000f3fe6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b0033", - "deployedBytecode": "0x6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json deleted file mode 100644 index c619989d6..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStaking#HorizonStaking_Instance.json +++ /dev/null @@ -1,2384 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "HorizonStaking", - "sourceName": "contracts/staking/HorizonStaking.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - }, - { - "internalType": "address", - "name": "stakingExtensionAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "subgraphDataServiceAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingCallerIsServiceProvider", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientIdleStake", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minShares", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientShares", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientStakeForLegacyAllocations", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minRequired", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientTokens", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidBeneficiaryZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "HorizonStakingInvalidDelegationFeeCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidDelegationPool", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidDelegationPoolState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - } - ], - "name": "HorizonStakingInvalidMaxVerifierCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidProvision", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidServiceProviderZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "HorizonStakingInvalidThawingPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidVerifierZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidZeroShares", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidZeroTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "HorizonStakingNotAuthorized", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingNothingThawing", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingProvisionAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minShares", - "type": "uint256" - } - ], - "name": "HorizonStakingSlippageProtection", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "until", - "type": "uint256" - } - ], - "name": "HorizonStakingStillThawing", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingTooManyThawRequests", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingTooManyTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingVerifierNotAllowed", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListEmptyList", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidIterations", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidZeroId", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListMaxElementsExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ManagedIsPaused", - "type": "error" - }, - { - "inputs": [], - "name": "ManagedOnlyController", - "type": "error" - }, - { - "inputs": [], - "name": "ManagedOnlyGovernor", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "AllowedLockedVerifierSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegatedTokensWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "DelegationFeeCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegationSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "enabled", - "type": "bool" - } - ], - "name": "DelegationSlashingEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegationSlashingSkipped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "MaxThawingPeriodSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "OperatorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionParametersSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionParametersStaged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionThawed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "StakeDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "until", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - } - ], - "name": "ThawRequestCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bool", - "name": "valid", - "type": "bool" - } - ], - "name": "ThawRequestFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawRequestsFulfilled", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ThawRequestsFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "ThawingPeriodCleared", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensDelegated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensDeprovisioned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensToDelegationPoolAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensUndelegated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "VerifierTokensSent", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "acceptProvisionParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "addToDelegationPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "addToProvision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "clearThawingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minSharesOut", - "type": "uint256" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "deprovision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegatedTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "delegator", - "type": "address" - } - ], - "name": "getDelegation", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Delegation", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - } - ], - "name": "getDelegationFeeCut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegationPool", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.DelegationPool", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getIdleStake", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getMaxThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProviderTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProvision", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "createdAt", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "maxVerifierCutPending", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriodPending", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Provision", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getServiceProvider", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokensStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensProvisioned", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ServiceProvider", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - } - ], - "name": "getThawRequest", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "next", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ThawRequest", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawRequestList", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "internalType": "struct LinkedList.List", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint32", - "name": "delegationRatio", - "type": "uint32" - } - ], - "name": "getTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "isAllowedLockedVerifier", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isAuthorized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isDelegationSlashingEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "provision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "provisionLocked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oldServiceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "oldVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "newServiceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "newVerifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minSharesForNewProvider", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "redelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "oldVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "newVerifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "reprovision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setAllowedLockedVerifier", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "setDelegationFeeCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "setDelegationSlashingEnabled", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "setMaxThawingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setOperatorLocked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint32", - "name": "newMaxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "newThawingPeriod", - "type": "uint64" - } - ], - "name": "setProvisionParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensVerifier", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifierDestination", - "type": "address" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stakeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stakeToProvision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "thaw", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "beneficiary", - "type": "address" - } - ], - "name": "undelegate", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "undelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "undelegate", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "unstake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "withdrawDelegated", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "newServiceProvider", - "type": "address" - } - ], - "name": "withdrawDelegated", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x61020060405234801561001157600080fd5b506040516160913803806160918339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ae16105b06000396000610331015260008181610eb30152818161180b015281816118be015281816118e0015281816134240152818161425401526145900152600050506000505060005050600050506000505060006133dd015260005050600050506000505060008181610e7d01528181611a5c015281816129af01528181612cc601528181612d5d01528181612ef701528181613ec1015281816140d0015281816141e401526142fc0152615ae16000f3fe6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b0033", - "deployedBytecode": "0x6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json deleted file mode 100644 index fc0c0c29f..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#ExponentialRebates.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ExponentialRebates", - "sourceName": "contracts/staking/libraries/ExponentialRebates.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "fees", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "alphaNumerator", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "alphaDenominator", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "lambdaNumerator", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "lambdaDenominator", - "type": "uint32" - } - ], - "name": "exponentialRebates", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "bytecode": "0x610c2d610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json deleted file mode 100644 index d773a8b94..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/HorizonStakingExtension#HorizonStakingExtension.json +++ /dev/null @@ -1,1173 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "HorizonStakingExtension", - "sourceName": "contracts/staking/HorizonStakingExtension.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - }, - { - "internalType": "address", - "name": "subgraphDataServiceAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ManagedIsPaused", - "type": "error" - }, - { - "inputs": [], - "name": "ManagedOnlyController", - "type": "error" - }, - { - "inputs": [], - "name": "ManagedOnlyGovernor", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "PPMMathInvalidPPM", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "isPublic", - "type": "bool" - } - ], - "name": "AllocationClosed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "assetHolder", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "protocolTax", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "curationFees", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queryFees", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queryRebates", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "delegationRewards", - "type": "uint256" - } - ], - "name": "RebateCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "StakeDeposited", - "type": "event" - }, - { - "inputs": [], - "name": "__DEPRECATED_getThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - } - ], - "name": "closeAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "getAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAtEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAtEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "collectedFees", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "__DEPRECATED_effectiveAllocation", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "distributedRebates", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingExtension.Allocation", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "getAllocationData", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "getAllocationState", - "outputs": [ - { - "internalType": "enum IHorizonStakingExtension.AllocationState", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegatedTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "delegator", - "type": "address" - } - ], - "name": "getDelegation", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Delegation", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - } - ], - "name": "getDelegationFeeCut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegationPool", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.DelegationPool", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getIdleStake", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "getIndexerStakedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getMaxThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProviderTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProvision", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "createdAt", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "maxVerifierCutPending", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriodPending", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Provision", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getServiceProvider", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokensStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensProvisioned", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ServiceProvider", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getSubgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - } - ], - "name": "getThawRequest", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "next", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ThawRequest", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawRequestList", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "internalType": "struct LinkedList.List", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint32", - "name": "delegationRatio", - "type": "uint32" - } - ], - "name": "getTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "hasStake", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "isActiveAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "isAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "isAllowedLockedVerifier", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isDelegationSlashingEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "isOperator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x6101e060405234801561001157600080fd5b5060405161311a38038061311a83398101604081905261003091610411565b818181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610347565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610347565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610347565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610347565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610347565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610347565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610347565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610347565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610347565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b03166101c052506104b4915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038291815260200190565b602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c39190610444565b9050826001600160a01b0382166103ee5760405163218f5add60e11b81526004016100749190610466565b5092915050565b80516001600160a01b038116811461040c57600080fd5b919050565b6000806040838503121561042457600080fd5b61042d836103f5565b915061043b602084016103f5565b90509250929050565b60006020828403121561045657600080fd5b61045f826103f5565b9392505050565b602081526000825180602084015260005b818110156104945760208186018101516040868401015201610477565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612bb061056a6000396000818161196c0152611b6c01526000611d910152600050506000505060008181611e73015281816121bf01526122c901526000818161120a01526118a5015260008181610be70152610e19015260005050600050506000505060008181610f870152818161113d01528181611d5901528181611ee801526120d00152612bb06000f3fe6080604052600436106101dc5760003560e01c806398c657dc11610102578063b7ca724111610095578063e73e14bf11610064578063e73e14bf14610a60578063f1d60d6614610a98578063fb744cc014610ab8578063fc54fb2714610ad857600080fd5b8063b7ca724114610926578063c0641994146109e9578063ccebcabb14610a04578063e2e1e8e914610a3357600080fd5b8063a784d498116100d1578063a784d49814610856578063ac9650d814610876578063ae4fe67a146108a3578063b6363cf2146108dc57600080fd5b806398c657dc146107195780639ce7abe514610746578063a212daf814610766578063a2594d821461083657600080fd5b8063561285e41161017a578063872d048911610149578063872d0489146106385780638cc01c86146106585780638d3c100a146106d95780639054e343146106f957600080fd5b8063561285e4146105865780636a3ca383146105e85780637573ef4f146106185780637a766460146102fb57600080fd5b806325d9897e116101b657806325d9897e1461033157806339514ad21461045457806344c32a611461048657806355c85269146104a857600080fd5b806308ce5f68146102335780630e022923146102665780631787e69f146102fb57600080fd5b3661022e5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561023f57600080fd5b5061025361024e3660046125ad565b610af0565b6040519081526020015b60405180910390f35b34801561027257600080fd5b506102866102813660046125e6565b610b05565b60405161025d919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561030757600080fd5b506102536103163660046125e6565b6001600160a01b03166000908152600e602052604090205490565b34801561033d57600080fd5b5061044761034c3660046125ad565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b60405161025d9190612603565b34801561046057600080fd5b50601a546001600160401b03165b6040516001600160401b03909116815260200161025d565b34801561049257600080fd5b506104a66104a13660046126a4565b610be5565b005b3480156104b457600080fd5b506105546104c33660046125e6565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161025d565b34801561059257600080fd5b506105a66105a13660046125ad565b610c93565b60405161025d9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156105f457600080fd5b506106086106033660046125e6565b610d39565b604051901515815260200161025d565b34801561062457600080fd5b506102536106333660046126d0565b610d5e565b34801561064457600080fd5b5061025361065336600461271f565b610dc2565b34801561066457600080fd5b506106be6106733660046125e6565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b6040805182518152602092830151928101929092520161025d565b3480156106e557600080fd5b506104a66106f4366004612768565b610e17565b34801561070557600080fd5b5061025361071436600461278d565b6112e3565b34801561072557600080fd5b506107396107343660046125e6565b6113cb565b60405161025d91906127e3565b34801561075257600080fd5b506104a661076136600461280b565b6113d6565b34801561077257600080fd5b5061080361078136600461278d565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b60405161025d91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561084257600080fd5b506104a66108513660046125e6565b611501565b34801561086257600080fd5b506102536108713660046125e6565b61161d565b34801561088257600080fd5b50610896610891366004612890565b611628565b60405161025d9190612929565b3480156108af57600080fd5b506106086108be3660046125e6565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e857600080fd5b506106086108f73660046125ad565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093257600080fd5b506109ad6109413660046129a9565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b60405161025d9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b3480156109f557600080fd5b50600d5463ffffffff1661046e565b348015610a1057600080fd5b50610a24610a1f36600461278d565b61170f565b6040519051815260200161025d565b348015610a3f57600080fd5b50610253610a4e3660046129a9565b60009081526010602052604090205490565b348015610a6c57600080fd5b50610608610a7b3660046125e6565b6001600160a01b03166000908152600e6020526040902054151590565b348015610aa457600080fd5b50610608610ab33660046125e6565b611761565b348015610ac457600080fd5b50610253610ad33660046125ad565b611786565b348015610ae457600080fd5b5060205460ff16610608565b6000610afc8383611792565b90505b92915050565b610b6060405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906129c2565b15610c8557604051632b37d9d160e21b815260040160405180910390fd5b610c8f82826117ca565b5050565b610cc56040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b610cf76040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000610d038585611b68565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b60006001610d4683611bec565b6002811115610d5757610d576127cd565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610d9857610d986127cd565b6002811115610da957610da96127cd565b81526020019081526020016000205490505b9392505050565b600080610dcf8585611792565b90506000610ddd8686611c45565b90506000610df163ffffffff8616846129fa565b90506000610dff8383611c70565b9050610e0b8185612a11565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906129c2565b15610eb757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b6044820152606401610225565b6000610f0182611bec565b90506000816002811115610f1757610f176127cd565b03610f4f5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b6044820152606401610225565b82600003610f5c57505050565b6001600160a01b0382166000908152600f60205260408120600181015490918590808080610fb633867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611c87565b600d54610fd1908690600160401b900463ffffffff16611d44565b9350610fdd8486612a24565b600d54909550610ffe9087908790640100000000900463ffffffff16611d7d565b925061100a8386612a24565b945084876005015461101c9190612a11565b6005880155600287015460009015806110425750601954600160a01b900463ffffffff16155b61110d5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273__$8eb3cac1482a31d7a7f2cbe7dc8bdcd821$__906349484d819060c401602060405180830381865af41580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190612a37565b611110565b60005b9050611120818960080154611f90565b925061112c8387611c70565b925061116c61113b8488612a24565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690611faa565b82156111d4578288600801546111829190612a11565b6008890155875461119c906001600160a01b031684611ff2565b91506111a88284612a24565b88546001600160a01b039081166000818152601760205260409020549295506111d49286921615612084565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190612a37565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611329576000915050610dbb565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b80156113bf576000818152601d602052604090206001810154426001600160401b03909116116113ae5760028301546001840154825461139391906129fa565b61139d9190612a50565b6113a79085612a11565b93506113b4565b506113bf565b600201549050611353565b50909695505050505050565b6000610aff82611bec565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190612a72565b6001600160a01b0316336001600160a01b03161461149b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906114c99086908690600401612a8f565b600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190612a72565b6001600160a01b0316336001600160a01b0316146115c65760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505050565b6000610aff826120fa565b604080516000815260208101909152606090826001600160401b0381111561165257611652612abe565b60405190808252806020026020018201604052801561168557816020015b60608152602001906001900390816116705790505b50915060005b83811015611707576116e2308686848181106116a9576116a9612ad4565b90506020028101906116bb9190612aea565b856040516020016116ce93929190612b37565b604051602081830303815290604052612145565b8382815181106116f4576116f4612ad4565b602090810291909101015260010161168b565b505092915050565b60408051602081019091526000815260408051602081019091526000815260006117398686611b68565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b60008061176d83611bec565b600281111561177e5761177e6127cd565b141592915050565b6000610afc8383611c45565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610afc9190612a24565b60006117d583611bec565b905060018160028111156117eb576117eb6127cd565b146118225760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b6044820152606401610225565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190612a37565b60808201819052606082015160009161193d91611f90565b9050600082600001516001600160a01b0316336001600160a01b031614806119ae575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff16821115806119d157506040830151155b15611a0b5780611a0b5760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b6044820152606401610225565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611aef57808015611a4557508415155b15611a5d57611a588684600001516121bb565b611a6c565b611a6a83602001516122a8565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611a999190612a24565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611ad99190612a24565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611bc157506001600160a01b0382166000908152601460205260409020610aff565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610aff565b6001600160a01b038082166000908152600f6020526040812080549192909116611c195750600092915050565b600381015415801590611c2e57506004810154155b15611c3c5750600192915050565b50600292915050565b600080611c528484611b68565b905080600501548160020154611c689190612a24565b949350505050565b600081831115611c805781610afc565b5090919050565b8015611d3f576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0791906129c2565b611d3f5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610225565b505050565b600080611d518484612336565b9050610afc817f000000000000000000000000000000000000000000000000000000000000000061115d565b600082600003611d8f57506000610dbb565b7f000000000000000000000000000000000000000000000000000000000000000060008315801590611dc957506001600160a01b03821615155b9050808015611e3c5750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c91906129c2565b15611f84576000611e4d8686612336565b90508015611f7a576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190612a37565b50611f1883827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190612388565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050505b9250610dbb915050565b50600095945050505050565b6000818311611fa0576000610afc565b610afc8284612a24565b8015610c8f57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561160157600080fd5b6001600160a01b038216600090815260146020526040812060028101548291901580159061203157508054600160401b900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff600160401b90910481169087906123c316565b90506120638186612a24565b92508282600201546120759190612a11565b6002830155505b509392505050565b8260000361209157505050565b80156120a157611d3f828461242a565b6001600160a01b03808316600090815260176020526040902054166120f481156120cb57816120cd565b835b857f0000000000000000000000000000000000000000000000000000000000000000611f08565b50505050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916121319190612a24565b61213b9190612a24565b610aff9190612a24565b6060600080846001600160a01b0316846040516121629190612b5e565b600060405180830381855af49150503d806000811461219d576040519150601f19603f3d011682016040523d82523d6000602084013e6121a2565b606091505b50915091506121b28583836124a9565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af1158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c9190612a37565b90508060000361225b57505050565b60006122678383612505565b905060006122758284612a24565b6001600160a01b038086166000908152601760205260409020549192506122a191839187911615612084565b5050505050565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff9190612a37565b600061234582620f4240101590565b829061236757604051633dc311df60e01b815260040161022591815260200190565b5061237e8361237984620f4240612a24565b6123c3565b610afc9084612a24565b8015611d3f5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611cc4565b60006123d283620f4240101590565b806123e557506123e582620f4240101590565b8383909161240f5760405163768bf0eb60e11b815260048101929092526024820152604401610225565b50620f4240905061242083856129fa565b610afc9190612a50565b6001600160a01b0382166000908152600e602052604090205461244e908290612a11565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061249d9084815260200190565b60405180910390a25050565b6060826124be576124b98261256c565b610dbb565b81511580156124d557506001600160a01b0384163b155b156124fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610225565b5080610dbb565b6001600160a01b038216600090815260146020526040812060028101548291901580159061254557508054640100000000900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff64010000000090910481169087906123c316565b80511561257c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b038116811461259557600080fd5b600080604083850312156125c057600080fd5b82356125cb81612598565b915060208301356125db81612598565b809150509250929050565b6000602082840312156125f857600080fd5b8135610afc81612598565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a083015161266160a08401826001600160401b03169052565b5060c083015161267960c084018263ffffffff169052565b5060e083015161269460e08401826001600160401b03169052565b5061010092830151919092015290565b600080604083850312156126b757600080fd5b82356126c281612598565b946020939093013593505050565b6000806000606084860312156126e557600080fd5b83356126f081612598565b9250602084013561270081612598565b915060408401356003811061271457600080fd5b809150509250925092565b60008060006060848603121561273457600080fd5b833561273f81612598565b9250602084013561274f81612598565b9150604084013563ffffffff8116811461271457600080fd5b6000806040838503121561277b57600080fd5b8235915060208301356125db81612598565b6000806000606084860312156127a257600080fd5b83356127ad81612598565b925060208401356127bd81612598565b9150604084013561271481612598565b634e487b7160e01b600052602160045260246000fd5b602081016003831061280557634e487b7160e01b600052602160045260246000fd5b91905290565b60008060006040848603121561282057600080fd5b833561282b81612598565b925060208401356001600160401b0381111561284657600080fd5b8401601f8101861361285757600080fd5b80356001600160401b0381111561286d57600080fd5b86602082840101111561287f57600080fd5b939660209190910195509293505050565b600080602083850312156128a357600080fd5b82356001600160401b038111156128b957600080fd5b8301601f810185136128ca57600080fd5b80356001600160401b038111156128e057600080fd5b8560208260051b84010111156128f557600080fd5b6020919091019590945092505050565b60005b83811015612920578181015183820152602001612908565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561299d57603f198786030184528151805180875261297a816020890160208501612905565b601f01601f19169590950160209081019550938401939190910190600101612951565b50929695505050505050565b6000602082840312156129bb57600080fd5b5035919050565b6000602082840312156129d457600080fd5b81518015158114610afc57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610aff57610aff6129e4565b80820180821115610aff57610aff6129e4565b81810381811115610aff57610aff6129e4565b600060208284031215612a4957600080fd5b5051919050565b600082612a6d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a8457600080fd5b8151610afc81612598565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612b0157600080fd5b8301803591506001600160401b03821115612b1b57600080fd5b602001915036819003821315612b3057600080fd5b9250929050565b828482376000838201600081528351612b54818360208801612905565b0195945050505050565b60008251612b70818460208701612905565b919091019291505056fea26469706673582212202248057a8bce81db640fbc5d05cef1efff890ddbde3697383b1612b453370f4364736f6c634300081b0033", - "deployedBytecode": "0x6080604052600436106101dc5760003560e01c806398c657dc11610102578063b7ca724111610095578063e73e14bf11610064578063e73e14bf14610a60578063f1d60d6614610a98578063fb744cc014610ab8578063fc54fb2714610ad857600080fd5b8063b7ca724114610926578063c0641994146109e9578063ccebcabb14610a04578063e2e1e8e914610a3357600080fd5b8063a784d498116100d1578063a784d49814610856578063ac9650d814610876578063ae4fe67a146108a3578063b6363cf2146108dc57600080fd5b806398c657dc146107195780639ce7abe514610746578063a212daf814610766578063a2594d821461083657600080fd5b8063561285e41161017a578063872d048911610149578063872d0489146106385780638cc01c86146106585780638d3c100a146106d95780639054e343146106f957600080fd5b8063561285e4146105865780636a3ca383146105e85780637573ef4f146106185780637a766460146102fb57600080fd5b806325d9897e116101b657806325d9897e1461033157806339514ad21461045457806344c32a611461048657806355c85269146104a857600080fd5b806308ce5f68146102335780630e022923146102665780631787e69f146102fb57600080fd5b3661022e5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561023f57600080fd5b5061025361024e3660046125ad565b610af0565b6040519081526020015b60405180910390f35b34801561027257600080fd5b506102866102813660046125e6565b610b05565b60405161025d919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561030757600080fd5b506102536103163660046125e6565b6001600160a01b03166000908152600e602052604090205490565b34801561033d57600080fd5b5061044761034c3660046125ad565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b60405161025d9190612603565b34801561046057600080fd5b50601a546001600160401b03165b6040516001600160401b03909116815260200161025d565b34801561049257600080fd5b506104a66104a13660046126a4565b610be5565b005b3480156104b457600080fd5b506105546104c33660046125e6565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161025d565b34801561059257600080fd5b506105a66105a13660046125ad565b610c93565b60405161025d9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156105f457600080fd5b506106086106033660046125e6565b610d39565b604051901515815260200161025d565b34801561062457600080fd5b506102536106333660046126d0565b610d5e565b34801561064457600080fd5b5061025361065336600461271f565b610dc2565b34801561066457600080fd5b506106be6106733660046125e6565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b6040805182518152602092830151928101929092520161025d565b3480156106e557600080fd5b506104a66106f4366004612768565b610e17565b34801561070557600080fd5b5061025361071436600461278d565b6112e3565b34801561072557600080fd5b506107396107343660046125e6565b6113cb565b60405161025d91906127e3565b34801561075257600080fd5b506104a661076136600461280b565b6113d6565b34801561077257600080fd5b5061080361078136600461278d565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b60405161025d91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561084257600080fd5b506104a66108513660046125e6565b611501565b34801561086257600080fd5b506102536108713660046125e6565b61161d565b34801561088257600080fd5b50610896610891366004612890565b611628565b60405161025d9190612929565b3480156108af57600080fd5b506106086108be3660046125e6565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e857600080fd5b506106086108f73660046125ad565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093257600080fd5b506109ad6109413660046129a9565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b60405161025d9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b3480156109f557600080fd5b50600d5463ffffffff1661046e565b348015610a1057600080fd5b50610a24610a1f36600461278d565b61170f565b6040519051815260200161025d565b348015610a3f57600080fd5b50610253610a4e3660046129a9565b60009081526010602052604090205490565b348015610a6c57600080fd5b50610608610a7b3660046125e6565b6001600160a01b03166000908152600e6020526040902054151590565b348015610aa457600080fd5b50610608610ab33660046125e6565b611761565b348015610ac457600080fd5b50610253610ad33660046125ad565b611786565b348015610ae457600080fd5b5060205460ff16610608565b6000610afc8383611792565b90505b92915050565b610b6060405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906129c2565b15610c8557604051632b37d9d160e21b815260040160405180910390fd5b610c8f82826117ca565b5050565b610cc56040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b610cf76040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000610d038585611b68565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b60006001610d4683611bec565b6002811115610d5757610d576127cd565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610d9857610d986127cd565b6002811115610da957610da96127cd565b81526020019081526020016000205490505b9392505050565b600080610dcf8585611792565b90506000610ddd8686611c45565b90506000610df163ffffffff8616846129fa565b90506000610dff8383611c70565b9050610e0b8185612a11565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906129c2565b15610eb757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b6044820152606401610225565b6000610f0182611bec565b90506000816002811115610f1757610f176127cd565b03610f4f5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b6044820152606401610225565b82600003610f5c57505050565b6001600160a01b0382166000908152600f60205260408120600181015490918590808080610fb633867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611c87565b600d54610fd1908690600160401b900463ffffffff16611d44565b9350610fdd8486612a24565b600d54909550610ffe9087908790640100000000900463ffffffff16611d7d565b925061100a8386612a24565b945084876005015461101c9190612a11565b6005880155600287015460009015806110425750601954600160a01b900463ffffffff16155b61110d5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273__$8eb3cac1482a31d7a7f2cbe7dc8bdcd821$__906349484d819060c401602060405180830381865af41580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190612a37565b611110565b60005b9050611120818960080154611f90565b925061112c8387611c70565b925061116c61113b8488612a24565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690611faa565b82156111d4578288600801546111829190612a11565b6008890155875461119c906001600160a01b031684611ff2565b91506111a88284612a24565b88546001600160a01b039081166000818152601760205260409020549295506111d49286921615612084565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190612a37565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611329576000915050610dbb565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b80156113bf576000818152601d602052604090206001810154426001600160401b03909116116113ae5760028301546001840154825461139391906129fa565b61139d9190612a50565b6113a79085612a11565b93506113b4565b506113bf565b600201549050611353565b50909695505050505050565b6000610aff82611bec565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190612a72565b6001600160a01b0316336001600160a01b03161461149b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906114c99086908690600401612a8f565b600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190612a72565b6001600160a01b0316336001600160a01b0316146115c65760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505050565b6000610aff826120fa565b604080516000815260208101909152606090826001600160401b0381111561165257611652612abe565b60405190808252806020026020018201604052801561168557816020015b60608152602001906001900390816116705790505b50915060005b83811015611707576116e2308686848181106116a9576116a9612ad4565b90506020028101906116bb9190612aea565b856040516020016116ce93929190612b37565b604051602081830303815290604052612145565b8382815181106116f4576116f4612ad4565b602090810291909101015260010161168b565b505092915050565b60408051602081019091526000815260408051602081019091526000815260006117398686611b68565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b60008061176d83611bec565b600281111561177e5761177e6127cd565b141592915050565b6000610afc8383611c45565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610afc9190612a24565b60006117d583611bec565b905060018160028111156117eb576117eb6127cd565b146118225760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b6044820152606401610225565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190612a37565b60808201819052606082015160009161193d91611f90565b9050600082600001516001600160a01b0316336001600160a01b031614806119ae575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff16821115806119d157506040830151155b15611a0b5780611a0b5760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b6044820152606401610225565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611aef57808015611a4557508415155b15611a5d57611a588684600001516121bb565b611a6c565b611a6a83602001516122a8565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611a999190612a24565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611ad99190612a24565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611bc157506001600160a01b0382166000908152601460205260409020610aff565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610aff565b6001600160a01b038082166000908152600f6020526040812080549192909116611c195750600092915050565b600381015415801590611c2e57506004810154155b15611c3c5750600192915050565b50600292915050565b600080611c528484611b68565b905080600501548160020154611c689190612a24565b949350505050565b600081831115611c805781610afc565b5090919050565b8015611d3f576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0791906129c2565b611d3f5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610225565b505050565b600080611d518484612336565b9050610afc817f000000000000000000000000000000000000000000000000000000000000000061115d565b600082600003611d8f57506000610dbb565b7f000000000000000000000000000000000000000000000000000000000000000060008315801590611dc957506001600160a01b03821615155b9050808015611e3c5750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c91906129c2565b15611f84576000611e4d8686612336565b90508015611f7a576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190612a37565b50611f1883827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190612388565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050505b9250610dbb915050565b50600095945050505050565b6000818311611fa0576000610afc565b610afc8284612a24565b8015610c8f57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561160157600080fd5b6001600160a01b038216600090815260146020526040812060028101548291901580159061203157508054600160401b900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff600160401b90910481169087906123c316565b90506120638186612a24565b92508282600201546120759190612a11565b6002830155505b509392505050565b8260000361209157505050565b80156120a157611d3f828461242a565b6001600160a01b03808316600090815260176020526040902054166120f481156120cb57816120cd565b835b857f0000000000000000000000000000000000000000000000000000000000000000611f08565b50505050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916121319190612a24565b61213b9190612a24565b610aff9190612a24565b6060600080846001600160a01b0316846040516121629190612b5e565b600060405180830381855af49150503d806000811461219d576040519150601f19603f3d011682016040523d82523d6000602084013e6121a2565b606091505b50915091506121b28583836124a9565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af1158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c9190612a37565b90508060000361225b57505050565b60006122678383612505565b905060006122758284612a24565b6001600160a01b038086166000908152601760205260409020549192506122a191839187911615612084565b5050505050565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff9190612a37565b600061234582620f4240101590565b829061236757604051633dc311df60e01b815260040161022591815260200190565b5061237e8361237984620f4240612a24565b6123c3565b610afc9084612a24565b8015611d3f5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611cc4565b60006123d283620f4240101590565b806123e557506123e582620f4240101590565b8383909161240f5760405163768bf0eb60e11b815260048101929092526024820152604401610225565b50620f4240905061242083856129fa565b610afc9190612a50565b6001600160a01b0382166000908152600e602052604090205461244e908290612a11565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061249d9084815260200190565b60405180910390a25050565b6060826124be576124b98261256c565b610dbb565b81511580156124d557506001600160a01b0384163b155b156124fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610225565b5080610dbb565b6001600160a01b038216600090815260146020526040812060028101548291901580159061254557508054640100000000900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff64010000000090910481169087906123c316565b80511561257c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b038116811461259557600080fd5b600080604083850312156125c057600080fd5b82356125cb81612598565b915060208301356125db81612598565b809150509250929050565b6000602082840312156125f857600080fd5b8135610afc81612598565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a083015161266160a08401826001600160401b03169052565b5060c083015161267960c084018263ffffffff169052565b5060e083015161269460e08401826001600160401b03169052565b5061010092830151919092015290565b600080604083850312156126b757600080fd5b82356126c281612598565b946020939093013593505050565b6000806000606084860312156126e557600080fd5b83356126f081612598565b9250602084013561270081612598565b915060408401356003811061271457600080fd5b809150509250925092565b60008060006060848603121561273457600080fd5b833561273f81612598565b9250602084013561274f81612598565b9150604084013563ffffffff8116811461271457600080fd5b6000806040838503121561277b57600080fd5b8235915060208301356125db81612598565b6000806000606084860312156127a257600080fd5b83356127ad81612598565b925060208401356127bd81612598565b9150604084013561271481612598565b634e487b7160e01b600052602160045260246000fd5b602081016003831061280557634e487b7160e01b600052602160045260246000fd5b91905290565b60008060006040848603121561282057600080fd5b833561282b81612598565b925060208401356001600160401b0381111561284657600080fd5b8401601f8101861361285757600080fd5b80356001600160401b0381111561286d57600080fd5b86602082840101111561287f57600080fd5b939660209190910195509293505050565b600080602083850312156128a357600080fd5b82356001600160401b038111156128b957600080fd5b8301601f810185136128ca57600080fd5b80356001600160401b038111156128e057600080fd5b8560208260051b84010111156128f557600080fd5b6020919091019590945092505050565b60005b83811015612920578181015183820152602001612908565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561299d57603f198786030184528151805180875261297a816020890160208501612905565b601f01601f19169590950160209081019550938401939190910190600101612951565b50929695505050505050565b6000602082840312156129bb57600080fd5b5035919050565b6000602082840312156129d457600080fd5b81518015158114610afc57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610aff57610aff6129e4565b80820180821115610aff57610aff6129e4565b81810381811115610aff57610aff6129e4565b600060208284031215612a4957600080fd5b5051919050565b600082612a6d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a8457600080fd5b8151610afc81612598565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612b0157600080fd5b8301803591506001600160401b03821115612b1b57600080fd5b602001915036819003821315612b3057600080fd5b9250929050565b828482376000838201600081528351612b54818360208801612905565b0195945050505050565b60008251612b70818460208701612905565b919091019291505056fea26469706673582212202248057a8bce81db640fbc5d05cef1efff890ddbde3697383b1612b453370f4364736f6c634300081b0033", - "linkReferences": { - "contracts/staking/libraries/ExponentialRebates.sol": { - "ExponentialRebates": [ - { - "length": 20, - "start": 5652 - } - ] - } - }, - "deployedLinkReferences": { - "contracts/staking/libraries/ExponentialRebates.sol": { - "ExponentialRebates": [ - { - "length": 20, - "start": 4266 - } - ] - } - } -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json deleted file mode 100644 index da4e99cc5..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow.json +++ /dev/null @@ -1,835 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PaymentsEscrow", - "sourceName": "contracts/payments/PaymentsEscrow.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - }, - { - "internalType": "uint256", - "name": "revokeCollectorThawingPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "withdrawEscrowThawingPeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balanceBefore", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "balanceAfter", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "PaymentsEscrowInconsistentCollection", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAllowance", - "type": "uint256" - } - ], - "name": "PaymentsEscrowInsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minBalance", - "type": "uint256" - } - ], - "name": "PaymentsEscrowInsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentsEscrowInvalidZeroTokens", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentsEscrowIsPaused", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentsEscrowNotThawing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "PaymentsEscrowStillThawing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "thawingPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxWaitPeriod", - "type": "uint256" - } - ], - "name": "PaymentsEscrowThawingPeriodTooLong", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "addedAllowance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newTotalAllowance", - "type": "uint256" - } - ], - "name": "AuthorizedCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "CancelThaw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "CancelThawCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "EscrowCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "RevokeCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "Thaw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "ThawCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [], - "name": "MAX_WAIT_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REVOKE_COLLECTOR_THAWING_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WITHDRAW_ESCROW_THAWING_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector_", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - } - ], - "name": "approveCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "authorizedCollectors", - "outputs": [ - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "cancelThawCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "escrowAccounts", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "getBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector_", - "type": "address" - } - ], - "name": "revokeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "thaw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "thawCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x61020060405234801561001157600080fd5b506040516121d83803806121d88339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611be36105f56000396000818161020801526111c801526000818161015001526103a401526000505060005050600050506000505060005050600081816103010152818161041d01528181610590015281816106d90152818161078b015281816109cf01528181610a8001528181611049015261124d01526000505060008181610cbd0152610d6501526000505060008181610c0101528181610c8e01528181610ddb015281816113c5015261148f0152611be36000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json deleted file mode 100644 index da4e99cc5..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/PaymentsEscrow#PaymentsEscrow_Instance.json +++ /dev/null @@ -1,835 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PaymentsEscrow", - "sourceName": "contracts/payments/PaymentsEscrow.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - }, - { - "internalType": "uint256", - "name": "revokeCollectorThawingPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "withdrawEscrowThawingPeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balanceBefore", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "balanceAfter", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "PaymentsEscrowInconsistentCollection", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAllowance", - "type": "uint256" - } - ], - "name": "PaymentsEscrowInsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minBalance", - "type": "uint256" - } - ], - "name": "PaymentsEscrowInsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentsEscrowInvalidZeroTokens", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentsEscrowIsPaused", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentsEscrowNotThawing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "PaymentsEscrowStillThawing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "thawingPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxWaitPeriod", - "type": "uint256" - } - ], - "name": "PaymentsEscrowThawingPeriodTooLong", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "addedAllowance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newTotalAllowance", - "type": "uint256" - } - ], - "name": "AuthorizedCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "CancelThaw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "CancelThawCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "EscrowCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "RevokeCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "Thaw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "ThawCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [], - "name": "MAX_WAIT_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REVOKE_COLLECTOR_THAWING_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WITHDRAW_ESCROW_THAWING_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector_", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - } - ], - "name": "approveCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "authorizedCollectors", - "outputs": [ - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "cancelThawCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "escrowAccounts", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "getBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector_", - "type": "address" - } - ], - "name": "revokeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "thaw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "thawCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x61020060405234801561001157600080fd5b506040516121d83803806121d88339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611be36105f56000396000818161020801526111c801526000818161015001526103a401526000505060005050600050506000505060005050600081816103010152818161041d01528181610590015281816106d90152818161078b015281816109cf01528181610a8001528181611049015261124d01526000505060008181610cbd0152610d6501526000505060008181610c0101528181610c8e01528181610ddb015281816113c5015261148f0152611be36000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json deleted file mode 100644 index 2cfb21e41..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#GraphProxy.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "GraphProxy", - "sourceName": "contracts/upgrades/GraphProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_impl", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldAdmin", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldPendingImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newPendingImplementation", - "type": "address" - } - ], - "name": "PendingImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "acceptUpgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptUpgradeAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c", - "deployedBytecode": "0x6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json deleted file mode 100644 index 909757608..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager.json +++ /dev/null @@ -1,635 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "RewardsManager", - "sourceName": "contracts/rewards/RewardsManager.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "RewardsAssigned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "RewardsDenied", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "sinceBlock", - "type": "uint256" - } - ], - "name": "RewardsDenylistUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldSubgraphService", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newSubgraphService", - "type": "address" - } - ], - "name": "SubgraphServiceSet", - "type": "event" - }, - { - "inputs": [], - "name": "accRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "accRewardsPerSignalLastBlockUpdated", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_accRewardsPerAllocatedToken", - "type": "uint256" - } - ], - "name": "calcRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "denylist", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getAccRewardsForSubgraph", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getAccRewardsPerAllocatedToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAccRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNewRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_allocationID", - "type": "address" - } - ], - "name": "getRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "isDenied", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "issuancePerBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumSubgraphSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "onSubgraphAllocationUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "onSubgraphSignalUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "bool", - "name": "_deny", - "type": "bool" - } - ], - "name": "setDenied", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_subgraphDeploymentID", - "type": "bytes32[]" - }, - { - "internalType": "bool[]", - "name": "_deny", - "type": "bool[]" - } - ], - "name": "setDeniedMany", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_issuancePerBlock", - "type": "uint256" - } - ], - "name": "setIssuancePerBlock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minimumSubgraphSignal", - "type": "uint256" - } - ], - "name": "setMinimumSubgraphSignal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subgraphAvailabilityOracle", - "type": "address" - } - ], - "name": "setSubgraphAvailabilityOracle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subgraphService", - "type": "address" - } - ], - "name": "setSubgraphService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphAvailabilityOracle", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphService", - "outputs": [ - { - "internalType": "contract IRewardsIssuer", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "subgraphs", - "outputs": [ - { - "internalType": "uint256", - "name": "accRewardsForSubgraph", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsForSubgraphSnapshot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerSignalSnapshot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_allocationID", - "type": "address" - } - ], - "name": "takeRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "updateAccRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json deleted file mode 100644 index 909757608..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/RewardsManager#RewardsManager_Instance.json +++ /dev/null @@ -1,635 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "RewardsManager", - "sourceName": "contracts/rewards/RewardsManager.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "nameHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "contractAddress", - "type": "address" - } - ], - "name": "ContractSynced", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "param", - "type": "string" - } - ], - "name": "ParameterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "RewardsAssigned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "RewardsDenied", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "sinceBlock", - "type": "uint256" - } - ], - "name": "RewardsDenylistUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "name": "SetController", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldSubgraphService", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newSubgraphService", - "type": "address" - } - ], - "name": "SubgraphServiceSet", - "type": "event" - }, - { - "inputs": [], - "name": "accRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "accRewardsPerSignalLastBlockUpdated", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - } - ], - "name": "acceptProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGraphProxy", - "name": "_proxy", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "acceptProxyAndCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_accRewardsPerAllocatedToken", - "type": "uint256" - } - ], - "name": "calcRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "controller", - "outputs": [ - { - "internalType": "contract IController", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "denylist", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getAccRewardsForSubgraph", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getAccRewardsPerAllocatedToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAccRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNewRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_allocationID", - "type": "address" - } - ], - "name": "getRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "isDenied", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "issuancePerBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumSubgraphSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "onSubgraphAllocationUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "onSubgraphSignalUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "bool", - "name": "_deny", - "type": "bool" - } - ], - "name": "setDenied", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_subgraphDeploymentID", - "type": "bytes32[]" - }, - { - "internalType": "bool[]", - "name": "_deny", - "type": "bool[]" - } - ], - "name": "setDeniedMany", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_issuancePerBlock", - "type": "uint256" - } - ], - "name": "setIssuancePerBlock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minimumSubgraphSignal", - "type": "uint256" - } - ], - "name": "setMinimumSubgraphSignal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subgraphAvailabilityOracle", - "type": "address" - } - ], - "name": "setSubgraphAvailabilityOracle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subgraphService", - "type": "address" - } - ], - "name": "setSubgraphService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphAvailabilityOracle", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphService", - "outputs": [ - { - "internalType": "contract IRewardsIssuer", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "subgraphs", - "outputs": [ - { - "internalType": "uint256", - "name": "accRewardsForSubgraph", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsForSubgraphSnapshot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerSignalSnapshot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "syncAllContracts", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_allocationID", - "type": "address" - } - ], - "name": "takeRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "updateAccRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#ProxyAdmin.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#ProxyAdmin.json deleted file mode 100644 index 942e4b2e5..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#ProxyAdmin.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ProxyAdmin", - "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "UPGRADE_INTERFACE_VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.dbg.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.dbg.json deleted file mode 100644 index 4922c5523..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../build-info/e51c04f0f0fdce5715962999616918b7.json" -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.json deleted file mode 100644 index 428ef34d9..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService.json +++ /dev/null @@ -1,2393 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SubgraphService", - "sourceName": "contracts/SubgraphService.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "internalType": "address", - "name": "disputeManager", - "type": "address" - }, - { - "internalType": "address", - "name": "tapCollector", - "type": "address" - }, - { - "internalType": "address", - "name": "curation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - } - ], - "name": "AllocationClosed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationDoesNotExist", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationManagerAllocationClosed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationManagerAllocationSameSize", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationManagerInvalidAllocationProof", - "type": "error" - }, - { - "inputs": [], - "name": "AllocationManagerInvalidZeroAllocationId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "DataServiceFeesClaimNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "DataServiceFeesZeroTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "DataServicePausableNotPauseGuardian", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "disputeManager", - "type": "address" - } - ], - "name": "DirectoryNotDisputeManager", - "type": "error" - }, - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - }, - { - "inputs": [], - "name": "EnforcedPause", - "type": "error" - }, - { - "inputs": [], - "name": "ExpectedPause", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "LegacyAllocationAlreadyMigrated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "LegacyAllocationExists", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListEmptyList", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidIterations", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidZeroId", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListMaxElementsExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidRange", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ProvisionManagerNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionManagerProvisionNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokensAvailable", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensRequired", - "type": "uint256" - } - ], - "name": "ProvisionTrackerInsufficientTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceAllocationIsAltruistic", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceAllocationNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceCannotForceCloseAllocation", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceEmptyGeohash", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceEmptyUrl", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balanceBefore", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "balanceAfter", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "SubgraphServiceInconsistentCollection", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceIndexerAlreadyRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "providedIndexer", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedIndexer", - "type": "address" - } - ], - "name": "SubgraphServiceIndexerMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "SubgraphServiceIndexerNotRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "SubgraphServiceInvalidCurationCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - } - ], - "name": "SubgraphServiceInvalidPaymentType", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "ravIndexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationIndexer", - "type": "address" - } - ], - "name": "SubgraphServiceInvalidRAV", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationClosed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newTokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldTokens", - "type": "uint256" - } - ], - "name": "AllocationResized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "CurationCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "ratio", - "type": "uint32" - } - ], - "name": "DelegationRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensIndexerRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDelegationRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "currentEpoch", - "type": "uint256" - } - ], - "name": "IndexingRewardsCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "LegacyAllocationMigrated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxPOIStaleness", - "type": "uint256" - } - ], - "name": "MaxPOIStalenessSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "PauseGuardianSet", - "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": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionTokensRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensCollected", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensCurators", - "type": "uint256" - } - ], - "name": "QueryFeesCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "rewardsDestination", - "type": "address" - } - ], - "name": "RewardsDestinationSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unlockTimestamp", - "type": "uint256" - } - ], - "name": "StakeClaimLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - } - ], - "name": "StakeClaimReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "claimsCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReleased", - "type": "uint256" - } - ], - "name": "StakeClaimsReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "ratio", - "type": "uint256" - } - ], - "name": "StakeToFeesRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "subgraphService", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "disputeManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "tapCollector", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "curation", - "type": "address" - } - ], - "name": "SubgraphServiceDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "min", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "max", - "type": "uint64" - } - ], - "name": "ThawingPeriodRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "min", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "VerifierCutRangeSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "allocationProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "allocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastPOIPresentedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "claims", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "nextClaim", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "claimsLists", - "outputs": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "curationFeesCut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "encodeAllocationProof", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "feesProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "forceCloseAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastPOIPresentedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "internalType": "struct Allocation.State", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocationData", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getLegacyAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "internalType": "struct LegacyAllocation.State", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "getSubgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "indexers", - "outputs": [ - { - "internalType": "uint256", - "name": "registeredAt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "geoHash", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "minimumProvisionTokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maximumDelegationRatio", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "stakeToFeesRatio", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "isActiveAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "isOverAllocated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "isStaleAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "legacyAllocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxPOIStaleness", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "migrateLegacyAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "minimumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - } - ], - "name": "pauseGuardians", - "outputs": [ - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numClaimsToRelease", - "type": "uint256" - } - ], - "name": "releaseStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "resizeAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "rewardsDestination", - "outputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "setCurationCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "delegationRatio", - "type": "uint32" - } - ], - "name": "setDelegationRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxPOIStaleness", - "type": "uint256" - } - ], - "name": "setMaxPOIStaleness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "minimumProvisionTokens", - "type": "uint256" - } - ], - "name": "setMinimumProvisionTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setPauseGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "rewardsDestination", - "type": "address" - } - ], - "name": "setRewardsDestination", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "stakeToFeesRatio_", - "type": "uint256" - } - ], - "name": "setStakeToFeesRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stakeToFeesRatio", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "subgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x61024060405234801561001157600080fd5b5060405161668f38038061668f83398101604081905261003091610541565b3083838387806001600160a01b03811661007f5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b7906103c5565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100ea906103c5565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b6020820152610123906103c5565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015d906103c5565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610195906103c5565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101d0906103c5565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020e906103c5565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024a906103c5565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027f906103c5565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103299790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b038481166101c08190528482166101e08190528483166102008190529284166102208190526040805193845260208401929092529082019290925260608101919091527f4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda79060800160405180910390a1505050506103bc61047360201b60201c565b50505050610605565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161040091815260200190565b602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610595565b9050826001600160a01b03821661046c5760405163218f5add60e11b815260040161007691906105b7565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104c35760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146105225780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b038116811461053c57600080fd5b919050565b6000806000806080858703121561055757600080fd5b61056085610525565b935061056e60208601610525565b925061057c60408601610525565b915061058a60608601610525565b905092959194509250565b6000602082840312156105a757600080fd5b6105b082610525565b9392505050565b602081526000825180602084015260005b818110156105e557602081860181015160408684010152016105c8565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615ff161069e60003960006143f801526000612fa9015260008181611a1801526138d00152600050506000505060005050600050506000613fe6015260006137fd01526000505060005050600050506000612045015260006143d40152615ff16000f3fe608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.dbg.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.dbg.json deleted file mode 100644 index 4922c5523..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../build-info/e51c04f0f0fdce5715962999616918b7.json" -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.json deleted file mode 100644 index 428ef34d9..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphService#SubgraphService_Instance.json +++ /dev/null @@ -1,2393 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SubgraphService", - "sourceName": "contracts/SubgraphService.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "internalType": "address", - "name": "disputeManager", - "type": "address" - }, - { - "internalType": "address", - "name": "tapCollector", - "type": "address" - }, - { - "internalType": "address", - "name": "curation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - } - ], - "name": "AllocationClosed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationDoesNotExist", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationManagerAllocationClosed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationManagerAllocationSameSize", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationManagerInvalidAllocationProof", - "type": "error" - }, - { - "inputs": [], - "name": "AllocationManagerInvalidZeroAllocationId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "DataServiceFeesClaimNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "DataServiceFeesZeroTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "DataServicePausableNotPauseGuardian", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "disputeManager", - "type": "address" - } - ], - "name": "DirectoryNotDisputeManager", - "type": "error" - }, - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - }, - { - "inputs": [], - "name": "EnforcedPause", - "type": "error" - }, - { - "inputs": [], - "name": "ExpectedPause", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "LegacyAllocationAlreadyMigrated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "LegacyAllocationExists", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListEmptyList", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidIterations", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidZeroId", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListMaxElementsExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidRange", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ProvisionManagerNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionManagerProvisionNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokensAvailable", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensRequired", - "type": "uint256" - } - ], - "name": "ProvisionTrackerInsufficientTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceAllocationIsAltruistic", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceAllocationNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceCannotForceCloseAllocation", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceEmptyGeohash", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceEmptyUrl", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balanceBefore", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "balanceAfter", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "SubgraphServiceInconsistentCollection", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceIndexerAlreadyRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "providedIndexer", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedIndexer", - "type": "address" - } - ], - "name": "SubgraphServiceIndexerMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "SubgraphServiceIndexerNotRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "SubgraphServiceInvalidCurationCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - } - ], - "name": "SubgraphServiceInvalidPaymentType", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "ravIndexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationIndexer", - "type": "address" - } - ], - "name": "SubgraphServiceInvalidRAV", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationClosed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newTokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldTokens", - "type": "uint256" - } - ], - "name": "AllocationResized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "CurationCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "ratio", - "type": "uint32" - } - ], - "name": "DelegationRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensIndexerRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDelegationRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "currentEpoch", - "type": "uint256" - } - ], - "name": "IndexingRewardsCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "LegacyAllocationMigrated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxPOIStaleness", - "type": "uint256" - } - ], - "name": "MaxPOIStalenessSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "PauseGuardianSet", - "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": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionTokensRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensCollected", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensCurators", - "type": "uint256" - } - ], - "name": "QueryFeesCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "rewardsDestination", - "type": "address" - } - ], - "name": "RewardsDestinationSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unlockTimestamp", - "type": "uint256" - } - ], - "name": "StakeClaimLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - } - ], - "name": "StakeClaimReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "claimsCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReleased", - "type": "uint256" - } - ], - "name": "StakeClaimsReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "ratio", - "type": "uint256" - } - ], - "name": "StakeToFeesRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "subgraphService", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "disputeManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "tapCollector", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "curation", - "type": "address" - } - ], - "name": "SubgraphServiceDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "min", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "max", - "type": "uint64" - } - ], - "name": "ThawingPeriodRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "min", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "VerifierCutRangeSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "allocationProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "allocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastPOIPresentedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "claims", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "nextClaim", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "claimsLists", - "outputs": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "curationFeesCut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "encodeAllocationProof", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "feesProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "forceCloseAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastPOIPresentedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "internalType": "struct Allocation.State", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocationData", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getLegacyAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "internalType": "struct LegacyAllocation.State", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "getSubgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "indexers", - "outputs": [ - { - "internalType": "uint256", - "name": "registeredAt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "geoHash", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "minimumProvisionTokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maximumDelegationRatio", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "stakeToFeesRatio", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "isActiveAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "isOverAllocated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "isStaleAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "legacyAllocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxPOIStaleness", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "migrateLegacyAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "minimumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - } - ], - "name": "pauseGuardians", - "outputs": [ - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numClaimsToRelease", - "type": "uint256" - } - ], - "name": "releaseStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "resizeAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "rewardsDestination", - "outputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "setCurationCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "delegationRatio", - "type": "uint32" - } - ], - "name": "setDelegationRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxPOIStaleness", - "type": "uint256" - } - ], - "name": "setMaxPOIStaleness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "minimumProvisionTokens", - "type": "uint256" - } - ], - "name": "setMinimumProvisionTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setPauseGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "rewardsDestination", - "type": "address" - } - ], - "name": "setRewardsDestination", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "stakeToFeesRatio_", - "type": "uint256" - } - ], - "name": "setStakeToFeesRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stakeToFeesRatio", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "subgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x61024060405234801561001157600080fd5b5060405161668f38038061668f83398101604081905261003091610541565b3083838387806001600160a01b03811661007f5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b7906103c5565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100ea906103c5565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b6020820152610123906103c5565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015d906103c5565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610195906103c5565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101d0906103c5565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020e906103c5565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024a906103c5565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027f906103c5565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103299790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b038481166101c08190528482166101e08190528483166102008190529284166102208190526040805193845260208401929092529082019290925260608101919091527f4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda79060800160405180910390a1505050506103bc61047360201b60201c565b50505050610605565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161040091815260200190565b602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610595565b9050826001600160a01b03821661046c5760405163218f5add60e11b815260040161007691906105b7565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104c35760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146105225780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b038116811461053c57600080fd5b919050565b6000806000806080858703121561055757600080fd5b61056085610525565b935061056e60208601610525565b925061057c60408601610525565b915061058a60608601610525565b905092959194509250565b6000602082840312156105a757600080fd5b6105b082610525565b9392505050565b602081526000825180602084015260005b818110156105e557602081860181015160408684010152016105c8565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615ff161069e60003960006143f801526000612fa9015260008181611a1801526138d00152600050506000505060005050600050506000613fe6015260006137fd01526000505060005050600050506000612045015260006143d40152615ff16000f3fe608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_DisputeManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_DisputeManager.json deleted file mode 100644 index 0d073cb30..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_DisputeManager.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Dummy", - "sourceName": "contracts/mocks/Dummy.sol", - "abi": [], - "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_SubgraphService.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_SubgraphService.json deleted file mode 100644 index 0d073cb30..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#OZProxyDummy_SubgraphService.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Dummy", - "sourceName": "contracts/mocks/Dummy.sol", - "abi": [], - "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_DisputeManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_DisputeManager.json deleted file mode 100644 index 942e4b2e5..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_DisputeManager.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ProxyAdmin", - "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "UPGRADE_INTERFACE_VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_SubgraphService.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_SubgraphService.json deleted file mode 100644 index 942e4b2e5..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#ProxyAdmin_SubgraphService.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ProxyAdmin", - "sourceName": "contracts/proxy/transparent/ProxyAdmin.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "UPGRADE_INTERFACE_VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager.json deleted file mode 100644 index c7f1f49b4..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "TransparentUpgradeableProxy", - "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "ERC1967InvalidAdmin", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "ERC1967InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "ERC1967NonPayable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [], - "name": "ProxyDeniedAdminAccess", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", - "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService.json deleted file mode 100644 index c7f1f49b4..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "TransparentUpgradeableProxy", - "sourceName": "contracts/proxy/transparent/TransparentUpgradeableProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "ERC1967InvalidAdmin", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "ERC1967InvalidImplementation", - "type": "error" - }, - { - "inputs": [], - "name": "ERC1967NonPayable", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [], - "name": "ProxyDeniedAdminAccess", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "bytecode": "0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", - "deployedBytecode": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json b/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json deleted file mode 100644 index db45e3283..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/artifacts/TAPCollector#TAPCollector.json +++ /dev/null @@ -1,776 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "TAPCollector", - "sourceName": "contracts/payments/collectors/TAPCollector.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "eip712Name", - "type": "string" - }, - { - "internalType": "string", - "name": "eip712Version", - "type": "string" - }, - { - "internalType": "address", - "name": "controller", - "type": "address" - }, - { - "internalType": "uint256", - "name": "revokeSignerThawingPeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidShortString", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "str", - "type": "string" - } - ], - "name": "StringTooLong", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "dataService", - "type": "address" - } - ], - "name": "TAPCollectorCallerNotDataService", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensCollected", - "type": "uint256" - } - ], - "name": "TAPCollectorInconsistentRAVTokens", - "type": "error" - }, - { - "inputs": [], - "name": "TAPCollectorInvalidRAVSigner", - "type": "error" - }, - { - "inputs": [], - "name": "TAPCollectorInvalidSignerProof", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proofDeadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentTimestamp", - "type": "uint256" - } - ], - "name": "TAPCollectorInvalidSignerProofDeadline", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "authorizingPayer", - "type": "address" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "TAPCollectorSignerAlreadyAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "TAPCollectorSignerNotAuthorizedByPayer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "TAPCollectorSignerNotThawing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "TAPCollectorSignerStillThawing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReceiver", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "PaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "timestampNs", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "valueAggregate", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "RAVCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "authorizedSigner", - "type": "address" - } - ], - "name": "SignerAuthorized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "authorizedSigner", - "type": "address" - } - ], - "name": "SignerRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "authorizedSigner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "SignerThawCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "authorizedSigner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "SignerThawing", - "type": "event" - }, - { - "inputs": [], - "name": "REVOKE_SIGNER_THAWING_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "proofDeadline", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "proof", - "type": "bytes" - } - ], - "name": "authorizeSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "authorizedSigners", - "outputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "cancelThawSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint64", - "name": "timestampNs", - "type": "uint64" - }, - { - "internalType": "uint128", - "name": "valueAggregate", - "type": "uint128" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", - "name": "rav", - "type": "tuple" - } - ], - "name": "encodeRAV", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint64", - "name": "timestampNs", - "type": "uint64" - }, - { - "internalType": "uint128", - "name": "valueAggregate", - "type": "uint128" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", - "name": "rav", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct ITAPCollector.SignedRAV", - "name": "signedRAV", - "type": "tuple" - } - ], - "name": "recoverRAVSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "revokeAuthorizedSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "thawSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "payer", - "type": "address" - } - ], - "name": "tokensCollected", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x6102c060405234801561001157600080fd5b50604051612162380380612162833981016040819052610030916105de565b81848461003e8260006103e0565b6101205261004d8160016103e0565b61014052815160208084019190912060e052815190820120610100524660a0526100da60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03811661012c5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101e05260408051808201909152600a81526923b930b8342a37b5b2b760b11b602082015261016490610413565b6001600160a01b0316610160526040805180820190915260078152665374616b696e6760c81b602082015261019890610413565b6001600160a01b03166101805260408051808201909152600d81526c47726170685061796d656e747360981b60208201526101d290610413565b6001600160a01b03166101a05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261020d90610413565b6001600160a01b03166101c05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261024690610413565b6001600160a01b03166102005260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b602082015261028190610413565b6001600160a01b0316610220526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102bf90610413565b6001600160a01b03166102405260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102fb90610413565b6001600160a01b03166102605260408051808201909152600881526721bab930ba34b7b760c11b602082015261033090610413565b6001600160a01b039081166102808190526101e05161018051610160516101a0516101c0516102005161022051610240516102605160408051968c168752948b166020870152928a1685850152908916606085015288166080840152871660a083015260c0820195909552935192851694918216939116917fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a439181900360e00190a4506102a0525061082b915050565b60006020835110156103fc576103f5836104c1565b905061040d565b8161040784826106e8565b5060ff90505b92915050565b6000806101e0516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161044e91815260200190565b602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f91906107a6565b9050826001600160a01b0382166104ba5760405163218f5add60e11b815260040161012391906107f4565b5092915050565b600080829050601f815111156104ec578260405163305a27a960e01b815260040161012391906107f4565b80516104f782610807565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610530578181015183820152602001610518565b50506000910152565b600082601f83011261054a57600080fd5b81516001600160401b03811115610563576105636104ff565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610591576105916104ff565b6040528181528382016020018510156105a957600080fd5b6105ba826020830160208701610515565b949350505050565b80516001600160a01b03811681146105d957600080fd5b919050565b600080600080608085870312156105f457600080fd5b84516001600160401b0381111561060a57600080fd5b61061687828801610539565b602087015190955090506001600160401b0381111561063457600080fd5b61064087828801610539565b93505061064f604086016105c2565b6060959095015193969295505050565b600181811c9082168061067357607f821691505b60208210810361069357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106e357806000526020600020601f840160051c810160208510156106c05750805b601f840160051c820191505b818110156106e057600081556001016106cc565b50505b505050565b81516001600160401b03811115610701576107016104ff565b6107158161070f845461065f565b84610699565b6020601f82116001811461074957600083156107315750848201515b600019600385901b1c1916600184901b1784556106e0565b600084815260208120601f198516915b828110156107795787850151825560209485019460019092019101610759565b50848210156107975786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156107b857600080fd5b6107c1826105c2565b9392505050565b600081518084526107e0816020860160208601610515565b601f01601f19169290920160200192915050565b6020815260006107c160208301846107c8565b805160208083015191908110156106935760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516118786108ea600039600081816101bf015261035e015260005050600050506000505060005050600050506000505060006107db015260005050600050506000505060006109900152600061095e01526000610f2101526000610ef901526000610e5401526000610e7e01526000610ea801526118786000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637f07d283116100715780637f07d2831461016b57806384b0196e1461018c5780638821603c146101a7578063960ba169146101ba578063cfdb35bd146101e1578063fee9f01f1461021257600080fd5b8063015cdd80146100ae5780631354f019146100c35780631ef518f2146100d657806339aa7416146101065780635d2b6a4e14610119575b600080fd5b6100c16100bc366004611081565b610225565b005b6100c16100d1366004611081565b610302565b6100e96100e436600461109e565b6103c7565b6040516001600160a01b0390911681526020015b60405180910390f35b6100c1610114366004611081565b6103e0565b61014c610127366004611081565b600260205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016100fd565b61017e6101793660046111e5565b6104f4565b6040519081526020016100fd565b6101946105cd565b6040516100fd9796959493929190611288565b61017e6101b5366004611320565b610613565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e6101ef36600461135a565b600360209081526000938452604080852082529284528284209052825290205481565b6100c16102203660046113a5565b610626565b6001600160a01b038082166000908152600260205260409020805490913391849116821461027e57604051630ad827d360e41b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b5050600081600101541182906102b357604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b506000600182018190556040519081526001600160a01b0383169033907f3b4432b11b66b46d9a7b190aa989c0ae85a5395b543540220596dd94dd405ceb906020015b60405180910390a35050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461035657604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b5061038390507f000000000000000000000000000000000000000000000000000000000000000042611445565b600182018190556040519081526001600160a01b0383169033907fd939049941f6a15381248e4ac0010f15efdf0f3221923711244c200b5ff2cddf906020016102f6565b60006103da6103d583611515565b6106e2565b92915050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461043457604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b50506000816001015411829061046957604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b50600181015442908181111561049b57604051631a42d0ab60e31b815260048101929092526024820152604401610275565b50506001600160a01b03821660008181526002602052604080822080546001600160a01b03191681556001018290555133917f2fc91dbd92d741cae16e0315578d7f6cf77043b771692c4bd993658ecfe8942291a35050565b60008060008380602001905181019061050d91906115d2565b815151919350915033906001600160a01b0381168214610553576040516347666ba360e11b81526001600160a01b03928316600482015291166024820152604401610275565b50506000610560836106e2565b6001600160a01b038082166000908152600260205260409020549192501661059b57604051630ef060dd60e01b815260040160405180910390fd5b6001600160a01b038082166000908152600260205260409020546105c3918891168585610709565b9695505050505050565b6000606080600080600060606105e1610957565b6105e9610989565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60006103da610621836116f8565b6109b6565b6001600160a01b03848116600090815260026020526040902054168481156106745760405163cb2320b760e01b81526001600160a01b03928316600482015291166024820152604401610275565b505061068282828587610a6d565b6001600160a01b03841660008181526002602052604080822080546001600160a01b0319163390811782556001909101839055905190917f6edcdd4150e63c6c36d965976c1c37375609c8b040c50d39e7156437b80e282891a350505050565b6000806106f283600001516109b6565b9050610702818460200151610b95565b9392505050565b815180516020808301516060909301516001600160a01b03808416600090815260038452604080822083881683528552808220928a168252919093528220549193916001600160801b03909116908181808211610782576040516308e467d960e31b815260048101929092526024820152604401610275565b50600090506107918284611704565b9050600061079f8289610bbf565b90508115610862576001600160a01b03868116600090815260036020908152604080832089851684528252808320938e168352929052208490557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387dbfe828c8c88868b876040518763ffffffff1660e01b815260040161082f9695949392919061172d565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b505050505b856001600160a01b03168a6001600160a01b03168c600281111561088857610888611717565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4846001600160a01b0316866001600160a01b03168b6001600160a01b03167f2d55f33a4a377f40129b217a6cf7a5022a112941b80cd589332abc245aa0a5c78c60000151604001518d60000151606001518e60000151608001518f602001516040516109419493929190611781565b60405180910390a4509998505050505050505050565b60606109847f00000000000000000000000000000000000000000000000000000000000000006000610c26565b905090565b60606109847f00000000000000000000000000000000000000000000000000000000000000006001610c26565b60006103da7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610a52969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610cd1565b8142808211610a98576040516343c042b360e01b815260048101929092526024820152604401610275565b50506040805146602082015290810183905233606090811b6bffffffffffffffffffffffff1916908201526000906074016040516020818303038152906040528051906020012090506000610b1a827f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b9050826001600160a01b0316610b668288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b9592505050565b6001600160a01b031614610b8d5760405163164f10af60e11b815260040160405180910390fd5b505050505050565b600080600080610ba58686610cfe565b925092509250610bb58282610d4b565b5090949350505050565b6000610bce83620f4240101590565b80610be15750610be182620f4240101590565b83839091610c0b5760405163768bf0eb60e11b815260048101929092526024820152604401610275565b50620f42409050610c1c83856117cf565b61070291906117e6565b606060ff8314610c4057610c3983610e08565b90506103da565b818054610c4c90611808565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7890611808565b8015610cc55780601f10610c9a57610100808354040283529160200191610cc5565b820191906000526020600020905b815481529060010190602001808311610ca857829003601f168201915b505050505090506103da565b60006103da610cde610e47565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008351604103610d385760208401516040850151606086015160001a610d2a88828585610f72565b955095509550505050610d44565b50508151600091506002905b9250925092565b6000826003811115610d5f57610d5f611717565b03610d68575050565b6001826003811115610d7c57610d7c611717565b03610d9a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610dae57610dae611717565b03610dcf5760405163fce698f760e01b815260048101829052602401610275565b6003826003811115610de357610de3611717565b03610e04576040516335e2f38360e21b815260048101829052602401610275565b5050565b60606000610e1583611041565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ea057507f000000000000000000000000000000000000000000000000000000000000000046145b15610eca57507f000000000000000000000000000000000000000000000000000000000000000090565b610984604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610fad5750600091506003905082611037565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611001573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661102d57506000925060019150829050611037565b9250600091508190505b9450945094915050565b600060ff8216601f8111156103da57604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b038116811461107e57600080fd5b50565b60006020828403121561109357600080fd5b813561070281611069565b6000602082840312156110b057600080fd5b81356001600160401b038111156110c657600080fd5b82016040818503121561070257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715611110576111106110d8565b60405290565b604080519081016001600160401b0381118282101715611110576111106110d8565b604051601f8201601f191681016001600160401b0381118282101715611160576111606110d8565b604052919050565b60006001600160401b03821115611181576111816110d8565b50601f01601f191660200190565b600082601f8301126111a057600080fd5b81356111b36111ae82611168565b611138565b8181528460208386010111156111c857600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156111f857600080fd5b82356003811061120757600080fd5b915060208301356001600160401b0381111561122257600080fd5b61122e8582860161118f565b9150509250929050565b60005b8381101561125357818101518382015260200161123b565b50506000910152565b60008151808452611274816020860160208601611238565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e0602082015260006112a760e083018961125c565b82810360408401526112b9818961125c565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561130f5783518352602093840193909201916001016112f1565b50909b9a5050505050505050505050565b60006020828403121561133257600080fd5b81356001600160401b0381111561134857600080fd5b820160a0818503121561070257600080fd5b60008060006060848603121561136f57600080fd5b833561137a81611069565b9250602084013561138a81611069565b9150604084013561139a81611069565b809150509250925092565b600080600080606085870312156113bb57600080fd5b84356113c681611069565b93506020850135925060408501356001600160401b038111156113e857600080fd5b8501601f810187136113f957600080fd5b80356001600160401b0381111561140f57600080fd5b87602082840101111561142157600080fd5b949793965060200194505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156103da576103da61142f565b6001600160401b038116811461107e57600080fd5b6001600160801b038116811461107e57600080fd5b600060a0828403121561149457600080fd5b61149c6110ee565b905081356114a981611069565b815260208201356114b981611069565b602082015260408201356114cc81611458565b604082015260608201356114df8161146d565b606082015260808201356001600160401b038111156114fd57600080fd5b6115098482850161118f565b60808301525092915050565b60006040823603121561152757600080fd5b61152f611116565b82356001600160401b0381111561154557600080fd5b61155136828601611482565b82525060208301356001600160401b0381111561156d57600080fd5b6115793682860161118f565b60208301525092915050565b600082601f83011261159657600080fd5b81516115a46111ae82611168565b8181528460208386010111156115b957600080fd5b6115ca826020830160208701611238565b949350505050565b600080604083850312156115e557600080fd5b82516001600160401b038111156115fb57600080fd5b83016040818603121561160d57600080fd5b611615611116565b81516001600160401b0381111561162b57600080fd5b820160a0818803121561163d57600080fd5b6116456110ee565b815161165081611069565b8152602082015161166081611069565b6020820152604082015161167381611458565b604082015260608201516116868161146d565b606082015260808201516001600160401b038111156116a457600080fd5b6116b089828501611585565b60808301525082525060208201516001600160401b038111156116d257600080fd5b6116de87828501611585565b602083810191909152959095015190969095509350505050565b60006103da3683611482565b818103818111156103da576103da61142f565b634e487b7160e01b600052602160045260246000fd5b60c081016003881061174f57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b6001600160401b03851681526001600160801b03841660208201526080604082015260006117b2608083018561125c565b82810360608401526117c4818561125c565b979650505050505050565b80820281158282048414176103da576103da61142f565b60008261180357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061181c57607f821691505b60208210810361183c57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220acb6bfec6d9c2f80f4ced26fd1055163ff8dce81039d2e933346d801e1bdbb3064736f6c634300081b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637f07d283116100715780637f07d2831461016b57806384b0196e1461018c5780638821603c146101a7578063960ba169146101ba578063cfdb35bd146101e1578063fee9f01f1461021257600080fd5b8063015cdd80146100ae5780631354f019146100c35780631ef518f2146100d657806339aa7416146101065780635d2b6a4e14610119575b600080fd5b6100c16100bc366004611081565b610225565b005b6100c16100d1366004611081565b610302565b6100e96100e436600461109e565b6103c7565b6040516001600160a01b0390911681526020015b60405180910390f35b6100c1610114366004611081565b6103e0565b61014c610127366004611081565b600260205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016100fd565b61017e6101793660046111e5565b6104f4565b6040519081526020016100fd565b6101946105cd565b6040516100fd9796959493929190611288565b61017e6101b5366004611320565b610613565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e6101ef36600461135a565b600360209081526000938452604080852082529284528284209052825290205481565b6100c16102203660046113a5565b610626565b6001600160a01b038082166000908152600260205260409020805490913391849116821461027e57604051630ad827d360e41b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b5050600081600101541182906102b357604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b506000600182018190556040519081526001600160a01b0383169033907f3b4432b11b66b46d9a7b190aa989c0ae85a5395b543540220596dd94dd405ceb906020015b60405180910390a35050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461035657604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b5061038390507f000000000000000000000000000000000000000000000000000000000000000042611445565b600182018190556040519081526001600160a01b0383169033907fd939049941f6a15381248e4ac0010f15efdf0f3221923711244c200b5ff2cddf906020016102f6565b60006103da6103d583611515565b6106e2565b92915050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461043457604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b50506000816001015411829061046957604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b50600181015442908181111561049b57604051631a42d0ab60e31b815260048101929092526024820152604401610275565b50506001600160a01b03821660008181526002602052604080822080546001600160a01b03191681556001018290555133917f2fc91dbd92d741cae16e0315578d7f6cf77043b771692c4bd993658ecfe8942291a35050565b60008060008380602001905181019061050d91906115d2565b815151919350915033906001600160a01b0381168214610553576040516347666ba360e11b81526001600160a01b03928316600482015291166024820152604401610275565b50506000610560836106e2565b6001600160a01b038082166000908152600260205260409020549192501661059b57604051630ef060dd60e01b815260040160405180910390fd5b6001600160a01b038082166000908152600260205260409020546105c3918891168585610709565b9695505050505050565b6000606080600080600060606105e1610957565b6105e9610989565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60006103da610621836116f8565b6109b6565b6001600160a01b03848116600090815260026020526040902054168481156106745760405163cb2320b760e01b81526001600160a01b03928316600482015291166024820152604401610275565b505061068282828587610a6d565b6001600160a01b03841660008181526002602052604080822080546001600160a01b0319163390811782556001909101839055905190917f6edcdd4150e63c6c36d965976c1c37375609c8b040c50d39e7156437b80e282891a350505050565b6000806106f283600001516109b6565b9050610702818460200151610b95565b9392505050565b815180516020808301516060909301516001600160a01b03808416600090815260038452604080822083881683528552808220928a168252919093528220549193916001600160801b03909116908181808211610782576040516308e467d960e31b815260048101929092526024820152604401610275565b50600090506107918284611704565b9050600061079f8289610bbf565b90508115610862576001600160a01b03868116600090815260036020908152604080832089851684528252808320938e168352929052208490557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387dbfe828c8c88868b876040518763ffffffff1660e01b815260040161082f9695949392919061172d565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b505050505b856001600160a01b03168a6001600160a01b03168c600281111561088857610888611717565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4846001600160a01b0316866001600160a01b03168b6001600160a01b03167f2d55f33a4a377f40129b217a6cf7a5022a112941b80cd589332abc245aa0a5c78c60000151604001518d60000151606001518e60000151608001518f602001516040516109419493929190611781565b60405180910390a4509998505050505050505050565b60606109847f00000000000000000000000000000000000000000000000000000000000000006000610c26565b905090565b60606109847f00000000000000000000000000000000000000000000000000000000000000006001610c26565b60006103da7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610a52969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610cd1565b8142808211610a98576040516343c042b360e01b815260048101929092526024820152604401610275565b50506040805146602082015290810183905233606090811b6bffffffffffffffffffffffff1916908201526000906074016040516020818303038152906040528051906020012090506000610b1a827f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b9050826001600160a01b0316610b668288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b9592505050565b6001600160a01b031614610b8d5760405163164f10af60e11b815260040160405180910390fd5b505050505050565b600080600080610ba58686610cfe565b925092509250610bb58282610d4b565b5090949350505050565b6000610bce83620f4240101590565b80610be15750610be182620f4240101590565b83839091610c0b5760405163768bf0eb60e11b815260048101929092526024820152604401610275565b50620f42409050610c1c83856117cf565b61070291906117e6565b606060ff8314610c4057610c3983610e08565b90506103da565b818054610c4c90611808565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7890611808565b8015610cc55780601f10610c9a57610100808354040283529160200191610cc5565b820191906000526020600020905b815481529060010190602001808311610ca857829003601f168201915b505050505090506103da565b60006103da610cde610e47565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008351604103610d385760208401516040850151606086015160001a610d2a88828585610f72565b955095509550505050610d44565b50508151600091506002905b9250925092565b6000826003811115610d5f57610d5f611717565b03610d68575050565b6001826003811115610d7c57610d7c611717565b03610d9a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610dae57610dae611717565b03610dcf5760405163fce698f760e01b815260048101829052602401610275565b6003826003811115610de357610de3611717565b03610e04576040516335e2f38360e21b815260048101829052602401610275565b5050565b60606000610e1583611041565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ea057507f000000000000000000000000000000000000000000000000000000000000000046145b15610eca57507f000000000000000000000000000000000000000000000000000000000000000090565b610984604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610fad5750600091506003905082611037565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611001573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661102d57506000925060019150829050611037565b9250600091508190505b9450945094915050565b600060ff8216601f8111156103da57604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b038116811461107e57600080fd5b50565b60006020828403121561109357600080fd5b813561070281611069565b6000602082840312156110b057600080fd5b81356001600160401b038111156110c657600080fd5b82016040818503121561070257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715611110576111106110d8565b60405290565b604080519081016001600160401b0381118282101715611110576111106110d8565b604051601f8201601f191681016001600160401b0381118282101715611160576111606110d8565b604052919050565b60006001600160401b03821115611181576111816110d8565b50601f01601f191660200190565b600082601f8301126111a057600080fd5b81356111b36111ae82611168565b611138565b8181528460208386010111156111c857600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156111f857600080fd5b82356003811061120757600080fd5b915060208301356001600160401b0381111561122257600080fd5b61122e8582860161118f565b9150509250929050565b60005b8381101561125357818101518382015260200161123b565b50506000910152565b60008151808452611274816020860160208601611238565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e0602082015260006112a760e083018961125c565b82810360408401526112b9818961125c565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561130f5783518352602093840193909201916001016112f1565b50909b9a5050505050505050505050565b60006020828403121561133257600080fd5b81356001600160401b0381111561134857600080fd5b820160a0818503121561070257600080fd5b60008060006060848603121561136f57600080fd5b833561137a81611069565b9250602084013561138a81611069565b9150604084013561139a81611069565b809150509250925092565b600080600080606085870312156113bb57600080fd5b84356113c681611069565b93506020850135925060408501356001600160401b038111156113e857600080fd5b8501601f810187136113f957600080fd5b80356001600160401b0381111561140f57600080fd5b87602082840101111561142157600080fd5b949793965060200194505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156103da576103da61142f565b6001600160401b038116811461107e57600080fd5b6001600160801b038116811461107e57600080fd5b600060a0828403121561149457600080fd5b61149c6110ee565b905081356114a981611069565b815260208201356114b981611069565b602082015260408201356114cc81611458565b604082015260608201356114df8161146d565b606082015260808201356001600160401b038111156114fd57600080fd5b6115098482850161118f565b60808301525092915050565b60006040823603121561152757600080fd5b61152f611116565b82356001600160401b0381111561154557600080fd5b61155136828601611482565b82525060208301356001600160401b0381111561156d57600080fd5b6115793682860161118f565b60208301525092915050565b600082601f83011261159657600080fd5b81516115a46111ae82611168565b8181528460208386010111156115b957600080fd5b6115ca826020830160208701611238565b949350505050565b600080604083850312156115e557600080fd5b82516001600160401b038111156115fb57600080fd5b83016040818603121561160d57600080fd5b611615611116565b81516001600160401b0381111561162b57600080fd5b820160a0818803121561163d57600080fd5b6116456110ee565b815161165081611069565b8152602082015161166081611069565b6020820152604082015161167381611458565b604082015260608201516116868161146d565b606082015260808201516001600160401b038111156116a457600080fd5b6116b089828501611585565b60808301525082525060208201516001600160401b038111156116d257600080fd5b6116de87828501611585565b602083810191909152959095015190969095509350505050565b60006103da3683611482565b818103818111156103da576103da61142f565b634e487b7160e01b600052602160045260246000fd5b60c081016003881061174f57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b6001600160401b03851681526001600160801b03841660208201526080604082015260006117b2608083018561125c565b82810360608401526117c4818561125c565b979650505050505050565b80820281158282048414176103da576103da61142f565b60008261180357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061181c57607f821691505b60208210810361183c57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220acb6bfec6d9c2f80f4ced26fd1055163ff8dce81039d2e933346d801e1bdbb3064736f6c634300081b0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/build-info/e51c04f0f0fdce5715962999616918b7.json b/packages/subgraph-service/ignition/deployments/chain-421614/build-info/e51c04f0f0fdce5715962999616918b7.json deleted file mode 100644 index 327e64d9a..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/build-info/e51c04f0f0fdce5715962999616918b7.json +++ /dev/null @@ -1,254531 +0,0 @@ -{ - "id": "e51c04f0f0fdce5715962999616918b7", - "_format": "hh-sol-build-info-1", - "solcVersion": "0.8.27", - "solcLongVersion": "0.8.27+commit.40a35a09", - "input": { - "language": "Solidity", - "sources": { - "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol": { - "content": "// SPDX-License-Identifier: Apache-2.0\n\n/*\n * Copyright 2020, Offchain Labs, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Originally copied from:\n * https://github.com/OffchainLabs/arbitrum/tree/e3a6307ad8a2dc2cad35728a2a9908cfd8dd8ef9/packages/arb-bridge-peripherals\n *\n * MODIFIED from Offchain Labs' implementation:\n * - Changed solidity version to 0.7.6 (pablo@edgeandnode.com)\n *\n */\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface ITokenGateway {\n /// @notice event deprecated in favor of DepositInitiated and WithdrawalInitiated\n // event OutboundTransferInitiated(\n // address token,\n // address indexed _from,\n // address indexed _to,\n // uint256 indexed _transferId,\n // uint256 _amount,\n // bytes _data\n // );\n\n /// @notice event deprecated in favor of DepositFinalized and WithdrawalFinalized\n // event InboundTransferFinalized(\n // address token,\n // address indexed _from,\n // address indexed _to,\n // uint256 indexed _transferId,\n // uint256 _amount,\n // bytes _data\n // );\n\n function outboundTransfer(\n address token,\n address to,\n uint256 amunt,\n uint256 maxas,\n uint256 gasPiceBid,\n bytes calldata data\n ) external payable returns (bytes memory);\n\n function finalizeInboundTransfer(\n address token,\n address from,\n address to,\n uint256 amount,\n bytes calldata data\n ) external payable;\n\n /**\n * @notice Calculate the address used when bridging an ERC20 token\n * @dev the L1 and L2 address oracles may not always be in sync.\n * For example, a custom token may have been registered but not deployed or the contract self destructed.\n * @param l1ERC20 address of L1 token\n * @return L2 address of a bridged ERC20 token\n */\n function calculateL2TokenAddress(address l1ERC20) external view returns (address);\n}\n" - }, - "@graphprotocol/contracts/contracts/curation/ICuration.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\n/**\n * @title Curation Interface\n * @dev Interface for the Curation contract (and L2Curation too)\n */\ninterface ICuration {\n // -- Configuration --\n\n /**\n * @notice Update the default reserve ratio to `_defaultReserveRatio`\n * @param _defaultReserveRatio Reserve ratio (in PPM)\n */\n function setDefaultReserveRatio(uint32 _defaultReserveRatio) external;\n\n /**\n * @notice Update the minimum deposit amount needed to intialize a new subgraph\n * @param _minimumCurationDeposit Minimum amount of tokens required deposit\n */\n function setMinimumCurationDeposit(uint256 _minimumCurationDeposit) external;\n\n /**\n * @notice Set the curation tax percentage to charge when a curator deposits GRT tokens.\n * @param _percentage Curation tax percentage charged when depositing GRT tokens\n */\n function setCurationTaxPercentage(uint32 _percentage) external;\n\n /**\n * @notice Set the master copy to use as clones for the curation token.\n * @param _curationTokenMaster Address of implementation contract to use for curation tokens\n */\n function setCurationTokenMaster(address _curationTokenMaster) external;\n\n // -- Curation --\n\n /**\n * @notice Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool.\n * @param _subgraphDeploymentID Subgraph deployment pool from where to mint signal\n * @param _tokensIn Amount of Graph Tokens to deposit\n * @param _signalOutMin Expected minimum amount of signal to receive\n * @return Amount of signal minted\n * @return Amount of curation tax burned\n */\n function mint(\n bytes32 _subgraphDeploymentID,\n uint256 _tokensIn,\n uint256 _signalOutMin\n ) external returns (uint256, uint256);\n\n /**\n * @notice Burn _signal from the SubgraphDeployment curation pool\n * @param _subgraphDeploymentID SubgraphDeployment the curator is returning signal\n * @param _signalIn Amount of signal to return\n * @param _tokensOutMin Expected minimum amount of tokens to receive\n * @return Tokens returned\n */\n function burn(bytes32 _subgraphDeploymentID, uint256 _signalIn, uint256 _tokensOutMin) external returns (uint256);\n\n /**\n * @notice Assign Graph Tokens collected as curation fees to the curation pool reserve.\n * @param _subgraphDeploymentID SubgraphDeployment where funds should be allocated as reserves\n * @param _tokens Amount of Graph Tokens to add to reserves\n */\n function collect(bytes32 _subgraphDeploymentID, uint256 _tokens) external;\n\n // -- Getters --\n\n /**\n * @notice Check if any GRT tokens are deposited for a SubgraphDeployment.\n * @param _subgraphDeploymentID SubgraphDeployment to check if curated\n * @return True if curated, false otherwise\n */\n function isCurated(bytes32 _subgraphDeploymentID) external view returns (bool);\n\n /**\n * @notice Get the amount of signal a curator has in a curation pool.\n * @param _curator Curator owning the signal tokens\n * @param _subgraphDeploymentID Subgraph deployment curation pool\n * @return Amount of signal owned by a curator for the subgraph deployment\n */\n function getCuratorSignal(address _curator, bytes32 _subgraphDeploymentID) external view returns (uint256);\n\n /**\n * @notice Get the amount of signal in a curation pool.\n * @param _subgraphDeploymentID Subgraph deployment curation pool\n * @return Amount of signal minted for the subgraph deployment\n */\n function getCurationPoolSignal(bytes32 _subgraphDeploymentID) external view returns (uint256);\n\n /**\n * @notice Get the amount of token reserves in a curation pool.\n * @param _subgraphDeploymentID Subgraph deployment curation pool\n * @return Amount of token reserves in the curation pool\n */\n function getCurationPoolTokens(bytes32 _subgraphDeploymentID) external view returns (uint256);\n\n /**\n * @notice Calculate amount of signal that can be bought with tokens in a curation pool.\n * This function considers and excludes the deposit tax.\n * @param _subgraphDeploymentID Subgraph deployment to mint signal\n * @param _tokensIn Amount of tokens used to mint signal\n * @return Amount of signal that can be bought\n * @return Amount of tokens that will be burned as curation tax\n */\n function tokensToSignal(bytes32 _subgraphDeploymentID, uint256 _tokensIn) external view returns (uint256, uint256);\n\n /**\n * @notice Calculate number of tokens to get when burning signal from a curation pool.\n * @param _subgraphDeploymentID Subgraph deployment to burn signal\n * @param _signalIn Amount of signal to burn\n * @return Amount of tokens to get for the specified amount of signal\n */\n function signalToTokens(bytes32 _subgraphDeploymentID, uint256 _signalIn) external view returns (uint256);\n\n /**\n * @notice Tax charged when curators deposit funds.\n * Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%)\n * @return Curation tax percentage expressed in PPM\n */\n function curationTaxPercentage() external view returns (uint32);\n}\n" - }, - "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface IEpochManager {\n // -- Configuration --\n\n function setEpochLength(uint256 _epochLength) external;\n\n // -- Epochs\n\n function runEpoch() external;\n\n // -- Getters --\n\n function isCurrentEpochRun() external view returns (bool);\n\n function blockNum() external view returns (uint256);\n\n function blockHash(uint256 _block) external view returns (bytes32);\n\n function currentEpoch() external view returns (uint256);\n\n function currentEpochBlock() external view returns (uint256);\n\n function currentEpochBlockSinceStart() external view returns (uint256);\n\n function epochsSince(uint256 _epoch) external view returns (uint256);\n\n function epochsSinceUpdate() external view returns (uint256);\n}\n" - }, - "@graphprotocol/contracts/contracts/governance/IController.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface IController {\n function getGovernor() external view returns (address);\n\n // -- Registry --\n\n function setContractProxy(bytes32 _id, address _contractAddress) external;\n\n function unsetContractProxy(bytes32 _id) external;\n\n function updateController(bytes32 _id, address _controller) external;\n\n function getContractProxy(bytes32 _id) external view returns (address);\n\n // -- Pausing --\n\n function setPartialPaused(bool _partialPaused) external;\n\n function setPaused(bool _paused) external;\n\n function setPauseGuardian(address _newPauseGuardian) external;\n\n function paused() external view returns (bool);\n\n function partialPaused() external view returns (bool);\n}\n" - }, - "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface IRewardsIssuer {\n /**\n * @dev Get allocation data to calculate rewards issuance\n * @param allocationId The allocation Id\n * @return indexer The indexer address\n * @return subgraphDeploymentId Subgraph deployment id for the allocation\n * @return tokens Amount of allocated tokens\n * @return accRewardsPerAllocatedToken Rewards snapshot\n * @return accRewardsPending Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed\n */\n function getAllocationData(\n address allocationId\n )\n external\n view\n returns (\n address indexer,\n bytes32 subgraphDeploymentId,\n uint256 tokens,\n uint256 accRewardsPerAllocatedToken,\n uint256 accRewardsPending\n );\n\n /**\n * @notice Return the total amount of tokens allocated to subgraph.\n * @param _subgraphDeploymentId Deployment Id for the subgraph\n * @return Total tokens allocated to subgraph\n */\n function getSubgraphAllocatedTokens(bytes32 _subgraphDeploymentId) external view returns (uint256);\n\n /**\n * @notice Whether or not an allocation is active (i.e open)\n * @param _allocationId Allocation Id\n * @return Whether or not the allocation is active\n */\n function isActiveAllocation(address _allocationId) external view returns (bool);\n}\n" - }, - "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\ninterface IRewardsManager {\n /**\n * @dev Stores accumulated rewards and snapshots related to a particular SubgraphDeployment.\n */\n struct Subgraph {\n uint256 accRewardsForSubgraph;\n uint256 accRewardsForSubgraphSnapshot;\n uint256 accRewardsPerSignalSnapshot;\n uint256 accRewardsPerAllocatedToken;\n }\n\n // -- Config --\n\n function setIssuancePerBlock(uint256 _issuancePerBlock) external;\n\n function setMinimumSubgraphSignal(uint256 _minimumSubgraphSignal) external;\n\n function setSubgraphService(address _subgraphService) external;\n\n // -- Denylist --\n\n function setSubgraphAvailabilityOracle(address _subgraphAvailabilityOracle) external;\n\n function setDenied(bytes32 _subgraphDeploymentID, bool _deny) external;\n\n function setDeniedMany(bytes32[] calldata _subgraphDeploymentID, bool[] calldata _deny) external;\n\n function isDenied(bytes32 _subgraphDeploymentID) external view returns (bool);\n\n // -- Getters --\n\n function getNewRewardsPerSignal() external view returns (uint256);\n\n function getAccRewardsPerSignal() external view returns (uint256);\n\n function getAccRewardsForSubgraph(bytes32 _subgraphDeploymentID) external view returns (uint256);\n\n function getAccRewardsPerAllocatedToken(bytes32 _subgraphDeploymentID) external view returns (uint256, uint256);\n\n function getRewards(address _allocationID) external view returns (uint256);\n\n function calcRewards(uint256 _tokens, uint256 _accRewardsPerAllocatedToken) external pure returns (uint256);\n\n // -- Updates --\n\n function updateAccRewardsPerSignal() external returns (uint256);\n\n function takeRewards(address _allocationID) external returns (uint256);\n\n // -- Hooks --\n\n function onSubgraphSignalUpdate(bytes32 _subgraphDeploymentID) external returns (uint256);\n\n function onSubgraphAllocationUpdate(bytes32 _subgraphDeploymentID) external returns (uint256);\n}\n" - }, - "@graphprotocol/contracts/contracts/token/IGraphToken.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IGraphToken is IERC20 {\n // -- Mint and Burn --\n\n function burn(uint256 amount) external;\n\n function burnFrom(address _from, uint256 amount) external;\n\n function mint(address _to, uint256 _amount) external;\n\n // -- Mint Admin --\n\n function addMinter(address _account) external;\n\n function removeMinter(address _account) external;\n\n function renounceMinter() external;\n\n function isMinter(address _account) external view returns (bool);\n\n // -- Permit --\n\n function permit(\n address _owner,\n address _spender,\n uint256 _value,\n uint256 _deadline,\n uint8 _v,\n bytes32 _r,\n bytes32 _s\n ) external;\n\n // -- Allowance --\n\n function increaseAllowance(address spender, uint256 addedValue) external returns (bool);\n\n function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);\n}\n" - }, - "@graphprotocol/contracts/contracts/utils/TokenUtils.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity ^0.7.6 || 0.8.27;\n\nimport \"../token/IGraphToken.sol\";\n\n/**\n * @title TokenUtils library\n * @notice This library contains utility functions for handling tokens (transfers and burns).\n * It is specifically adapted for the GraphToken, so does not need to handle edge cases\n * for other tokens.\n */\nlibrary TokenUtils {\n /**\n * @dev Pull tokens from an address to this contract.\n * @param _graphToken Token to transfer\n * @param _from Address sending the tokens\n * @param _amount Amount of tokens to transfer\n */\n function pullTokens(IGraphToken _graphToken, address _from, uint256 _amount) internal {\n if (_amount > 0) {\n require(_graphToken.transferFrom(_from, address(this), _amount), \"!transfer\");\n }\n }\n\n /**\n * @dev Push tokens from this contract to a receiving address.\n * @param _graphToken Token to transfer\n * @param _to Address receiving the tokens\n * @param _amount Amount of tokens to transfer\n */\n function pushTokens(IGraphToken _graphToken, address _to, uint256 _amount) internal {\n if (_amount > 0) {\n require(_graphToken.transfer(_to, _amount), \"!transfer\");\n }\n }\n\n /**\n * @dev Burn tokens held by this contract.\n * @param _graphToken Token to burn\n * @param _amount Amount of tokens to burn\n */\n function burnTokens(IGraphToken _graphToken, uint256 _amount) internal {\n if (_amount > 0) {\n _graphToken.burn(_amount);\n }\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/DataService.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataService } from \"./interfaces/IDataService.sol\";\n\nimport { DataServiceV1Storage } from \"./DataServiceStorage.sol\";\nimport { GraphDirectory } from \"../utilities/GraphDirectory.sol\";\nimport { ProvisionManager } from \"./utilities/ProvisionManager.sol\";\n\n/**\n * @title DataService contract\n * @dev Implementation of the {IDataService} interface.\n * @notice This implementation provides base functionality for a data service:\n * - GraphDirectory, allows the data service to interact with Graph Horizon contracts\n * - ProvisionManager, provides functionality to manage provisions\n *\n * The derived contract MUST implement all the interfaces described in {IDataService} and in\n * accordance with the Data Service framework.\n * @dev A note on upgradeability: this base contract can be inherited by upgradeable or non upgradeable\n * contracts.\n * - If the data service implementation is upgradeable, it must initialize the contract via an external\n * initializer function with the `initializer` modifier that calls {__DataService_init} or\n * {__DataService_init_unchained}. It's recommended the implementation constructor to also call\n * {_disableInitializers} to prevent the implementation from being initialized.\n * - If the data service implementation is NOT upgradeable, it must initialize the contract by calling\n * {__DataService_init} or {__DataService_init_unchained} in the constructor. Note that the `initializer`\n * will be required in the constructor.\n */\nabstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1Storage, IDataService {\n /**\n * @dev Addresses in GraphDirectory are immutables, they can only be set in this constructor.\n * @param controller The address of the Graph Horizon controller contract.\n */\n constructor(address controller) GraphDirectory(controller) {}\n\n /**\n * @notice Initializes the contract and any parent contracts.\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DataService_init() internal onlyInitializing {\n __ProvisionManager_init_unchained();\n __DataService_init_unchained();\n }\n\n /**\n * @notice Initializes the contract.\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DataService_init_unchained() internal onlyInitializing {}\n\n /**\n * @notice See {IDataService-getThawingPeriodRange}.\n */\n function getThawingPeriodRange() external view returns (uint64, uint64) {\n return _getThawingPeriodRange();\n }\n\n /**\n * @notice See {IDataService-getVerifierCutRange}.\n */\n function getVerifierCutRange() external view returns (uint32, uint32) {\n return _getVerifierCutRange();\n }\n\n /**\n * @notice See {IDataService-getProvisionTokensRange}.\n */\n function getProvisionTokensRange() external view returns (uint256, uint256) {\n return _getProvisionTokensRange();\n }\n\n /**\n * @notice See {IDataService-getDelegationRatio}.\n */\n function getDelegationRatio() external view returns (uint32) {\n return _getDelegationRatio();\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nabstract contract DataServiceV1Storage {\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataServiceFees } from \"../interfaces/IDataServiceFees.sol\";\n\nimport { ProvisionTracker } from \"../libraries/ProvisionTracker.sol\";\nimport { LinkedList } from \"../../libraries/LinkedList.sol\";\n\nimport { DataService } from \"../DataService.sol\";\nimport { DataServiceFeesV1Storage } from \"./DataServiceFeesStorage.sol\";\n\n/**\n * @title DataServiceFees contract\n * @dev Implementation of the {IDataServiceFees} interface.\n * @notice Extension for the {IDataService} contract to handle payment collateralization\n * using a Horizon provision. See {IDataServiceFees} for more details.\n */\nabstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees {\n using ProvisionTracker for mapping(address => uint256);\n using LinkedList for LinkedList.List;\n\n /**\n * @notice See {IDataServiceFees-releaseStake}\n */\n function releaseStake(uint256 numClaimsToRelease) external virtual override {\n _releaseStake(msg.sender, numClaimsToRelease);\n }\n\n /**\n * @notice Locks stake for a service provider to back a payment.\n * Creates a stake claim, which is stored in a linked list by service provider.\n * @dev Requirements:\n * - The associated provision must have enough available tokens to lock the stake.\n *\n * Emits a {StakeClaimLocked} event.\n *\n * @param _serviceProvider The address of the service provider\n * @param _tokens The amount of tokens to lock in the claim\n * @param _unlockTimestamp The timestamp when the tokens can be released\n */\n function _lockStake(address _serviceProvider, uint256 _tokens, uint256 _unlockTimestamp) internal {\n require(_tokens != 0, DataServiceFeesZeroTokens());\n feesProvisionTracker.lock(_graphStaking(), _serviceProvider, _tokens, delegationRatio);\n\n LinkedList.List storage claimsList = claimsLists[_serviceProvider];\n\n // Save item and add to list\n bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce);\n claims[claimId] = StakeClaim({\n tokens: _tokens,\n createdAt: block.timestamp,\n releasableAt: _unlockTimestamp,\n nextClaim: bytes32(0)\n });\n if (claimsList.count != 0) claims[claimsList.tail].nextClaim = claimId;\n claimsList.addTail(claimId);\n\n emit StakeClaimLocked(_serviceProvider, claimId, _tokens, _unlockTimestamp);\n }\n\n /**\n * @notice See {IDataServiceFees-releaseStake}\n */\n function _releaseStake(address _serviceProvider, uint256 _numClaimsToRelease) internal {\n LinkedList.List storage claimsList = claimsLists[_serviceProvider];\n (uint256 claimsReleased, bytes memory data) = claimsList.traverse(\n _getNextStakeClaim,\n _processStakeClaim,\n _deleteStakeClaim,\n abi.encode(0, _serviceProvider),\n _numClaimsToRelease\n );\n\n emit StakeClaimsReleased(_serviceProvider, claimsReleased, abi.decode(data, (uint256)));\n }\n\n /**\n * @notice Processes a stake claim, releasing the tokens if the claim has expired.\n * @dev This function is used as a callback in the stake claims linked list traversal.\n * @param _claimId The id of the stake claim\n * @param _acc The accumulator for the stake claims being processed\n * @return Wether the stake claim is still locked, indicating that the traversal should continue or stop.\n * @return The updated accumulator data\n */\n function _processStakeClaim(bytes32 _claimId, bytes memory _acc) private returns (bool, bytes memory) {\n StakeClaim memory claim = _getStakeClaim(_claimId);\n\n // early exit\n if (claim.releasableAt > block.timestamp) {\n return (true, LinkedList.NULL_BYTES);\n }\n\n // decode\n (uint256 tokensClaimed, address serviceProvider) = abi.decode(_acc, (uint256, address));\n\n // process\n feesProvisionTracker.release(serviceProvider, claim.tokens);\n emit StakeClaimReleased(serviceProvider, _claimId, claim.tokens, claim.releasableAt);\n\n // encode\n _acc = abi.encode(tokensClaimed + claim.tokens, serviceProvider);\n return (false, _acc);\n }\n\n /**\n * @notice Deletes a stake claim.\n * @dev This function is used as a callback in the stake claims linked list traversal.\n * @param _claimId The ID of the stake claim to delete\n */\n function _deleteStakeClaim(bytes32 _claimId) private {\n delete claims[_claimId];\n }\n\n /**\n * @notice Gets the details of a stake claim\n * @param _claimId The ID of the stake claim\n */\n function _getStakeClaim(bytes32 _claimId) private view returns (StakeClaim memory) {\n StakeClaim memory claim = claims[_claimId];\n require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId));\n return claim;\n }\n\n /**\n * @notice Gets the next stake claim in the linked list\n * @dev This function is used as a callback in the stake claims linked list traversal.\n * @param _claimId The ID of the stake claim\n */\n function _getNextStakeClaim(bytes32 _claimId) private view returns (bytes32) {\n StakeClaim memory claim = claims[_claimId];\n require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId));\n return claim.nextClaim;\n }\n\n /**\n * @notice Builds a stake claim ID\n * @param _serviceProvider The address of the service provider\n * @param _nonce A nonce of the stake claim\n */\n function _buildStakeClaimId(address _serviceProvider, uint256 _nonce) private view returns (bytes32) {\n return keccak256(abi.encodePacked(address(this), _serviceProvider, _nonce));\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataServiceFees } from \"../interfaces/IDataServiceFees.sol\";\n\nimport { LinkedList } from \"../../libraries/LinkedList.sol\";\n\n/**\n * @title Storage layout for the {DataServiceFees} extension contract.\n */\nabstract contract DataServiceFeesV1Storage {\n mapping(address serviceProvider => uint256 tokens) public feesProvisionTracker;\n\n /// @notice List of all locked stake claims to be released to service providers\n mapping(bytes32 claimId => IDataServiceFees.StakeClaim claim) public claims;\n\n /// @notice Service providers registered in the data service\n mapping(address serviceProvider => LinkedList.List list) public claimsLists;\n\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataServicePausable } from \"../interfaces/IDataServicePausable.sol\";\n\nimport { PausableUpgradeable } from \"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\";\nimport { DataService } from \"../DataService.sol\";\n\n/**\n * @title DataServicePausableUpgradeable contract\n * @dev Implementation of the {IDataServicePausable} interface.\n * @dev Upgradeable version of the {DataServicePausable} contract.\n */\nabstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataService, IDataServicePausable {\n /// @notice List of pause guardians and their allowed status\n mapping(address pauseGuardian => bool allowed) public pauseGuardians;\n\n /**\n * @notice Checks if the caller is a pause guardian.\n */\n modifier onlyPauseGuardian() {\n require(pauseGuardians[msg.sender], DataServicePausableNotPauseGuardian(msg.sender));\n _;\n }\n\n /**\n * @notice See {IDataServicePausable-pause}\n */\n function pause() external override onlyPauseGuardian whenNotPaused {\n _pause();\n }\n\n /**\n * @notice See {IDataServicePausable-pause}\n */\n function unpause() external override onlyPauseGuardian whenPaused {\n _unpause();\n }\n\n /**\n * @notice Initializes the contract and parent contracts\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DataServicePausable_init() internal onlyInitializing {\n __Pausable_init_unchained();\n __DataServicePausable_init_unchained();\n }\n\n /**\n * @notice Initializes the contract\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DataServicePausable_init_unchained() internal onlyInitializing {}\n\n /**\n * @notice Sets a pause guardian.\n * @dev Internal function to be used by the derived contract to set pause guardians.\n *\n * Emits a {PauseGuardianSet} event.\n *\n * @param _pauseGuardian The address of the pause guardian\n * @param _allowed The allowed status of the pause guardian\n */\n function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused {\n pauseGuardians[_pauseGuardian] = _allowed;\n emit PauseGuardianSet(_pauseGuardian, _allowed);\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"../../interfaces/IGraphPayments.sol\";\n\n/**\n * @title Interface of the base {DataService} contract as defined by the Graph Horizon specification.\n * @notice This interface provides a guardrail for contracts that use the Data Service framework\n * to implement a data service on Graph Horizon. Much of the specification is intentionally loose\n * to allow for greater flexibility when designing a data service. It's not possible to guarantee that\n * an implementation will honor the Data Service framework guidelines so it's advised to always review\n * the implementation code and the documentation.\n * @dev This interface is expected to be inherited and extended by a data service interface. It can be\n * used to interact with it however it's advised to use the more specific parent interface.\n */\ninterface IDataService {\n /**\n * @notice Emitted when a service provider is registered with the data service.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n event ServiceProviderRegistered(address indexed serviceProvider, bytes data);\n\n /**\n * @notice Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\n * @param serviceProvider The address of the service provider.\n */\n event ProvisionPendingParametersAccepted(address indexed serviceProvider);\n\n /**\n * @notice Emitted when a service provider starts providing the service.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n event ServiceStarted(address indexed serviceProvider, bytes data);\n\n /**\n * @notice Emitted when a service provider stops providing the service.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n event ServiceStopped(address indexed serviceProvider, bytes data);\n\n /**\n * @notice Emitted when a service provider collects payment.\n * @param serviceProvider The address of the service provider.\n * @param feeType The type of fee to collect as defined in {GraphPayments}.\n * @param tokens The amount of tokens collected.\n */\n event ServicePaymentCollected(\n address indexed serviceProvider,\n IGraphPayments.PaymentTypes indexed feeType,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when a service provider is slashed.\n * @param serviceProvider The address of the service provider.\n * @param tokens The amount of tokens slashed.\n */\n event ServiceProviderSlashed(address indexed serviceProvider, uint256 tokens);\n\n /**\n * @notice Registers a service provider with the data service. The service provider can now\n * start providing the service.\n * @dev Before registering, the service provider must have created a provision in the\n * Graph Horizon staking contract with parameters that are compatible with the data service.\n *\n * Verifies provision parameters and rejects registration in the event they are not valid.\n *\n * Emits a {ServiceProviderRegistered} event.\n *\n * NOTE: Failing to accept the provision will result in the service provider operating\n * on an unverified provision. Depending on of the data service this can be a security\n * risk as the protocol won't be able to guarantee economic security for the consumer.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function register(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking\n * contract}.\n * @dev Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}.\n *\n * Emits a {ProvisionPendingParametersAccepted} event.\n *\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function acceptProvisionPendingParameters(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice Service provider starts providing the service.\n * @dev Emits a {ServiceStarted} event.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function startService(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice Service provider stops providing the service.\n * @dev Emits a {ServiceStopped} event.\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function stopService(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice Collects payment earnt by the service provider.\n * @dev The implementation of this function is expected to interact with {GraphPayments}\n * to collect payment from the service payer, which is done via {IGraphPayments-collect}.\n * @param serviceProvider The address of the service provider.\n *\n * Emits a {ServicePaymentCollected} event.\n *\n * NOTE: Data services that are vetted by the Graph Council might qualify for a portion of\n * protocol issuance to cover for these payments. In this case, the funds are taken by\n * interacting with the rewards manager contract instead of the {GraphPayments} contract.\n * @param serviceProvider The address of the service provider.\n * @param feeType The type of fee to collect as defined in {GraphPayments}.\n * @param data Custom data, usage defined by the data service.\n * @return The amount of tokens collected.\n */\n function collect(\n address serviceProvider,\n IGraphPayments.PaymentTypes feeType,\n bytes calldata data\n ) external returns (uint256);\n\n /**\n * @notice Slash a service provider for misbehaviour.\n * @dev To slash the service provider's provision the function should call\n * {Staking-slash}.\n *\n * Emits a {ServiceProviderSlashed} event.\n *\n * @param serviceProvider The address of the service provider.\n * @param data Custom data, usage defined by the data service.\n */\n function slash(address serviceProvider, bytes calldata data) external;\n\n /**\n * @notice External getter for the thawing period range\n * @return Minimum thawing period allowed\n * @return Maximum thawing period allowed\n */\n function getThawingPeriodRange() external view returns (uint64, uint64);\n\n /**\n * @notice External getter for the verifier cut range\n * @return Minimum verifier cut allowed\n * @return Maximum verifier cut allowed\n */\n function getVerifierCutRange() external view returns (uint32, uint32);\n\n /**\n * @notice External getter for the provision tokens range\n * @return Minimum provision tokens allowed\n * @return Maximum provision tokens allowed\n */\n function getProvisionTokensRange() external view returns (uint256, uint256);\n\n /**\n * @notice External getter for the delegation ratio\n * @return The delegation ratio\n */\n function getDelegationRatio() external view returns (uint32);\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataService } from \"./IDataService.sol\";\n\n/**\n * @title Interface for the {DataServiceFees} contract.\n * @notice Extension for the {IDataService} contract to handle payment collateralization\n * using a Horizon provision.\n *\n * It's designed to be used with the Data Service framework:\n * - When a service provider collects payment with {IDataService.collect} the data service should lock\n * stake to back the payment using {_lockStake}.\n * - Every time there is a payment collection with {IDataService.collect}, the data service should\n * attempt to release any expired stake claims by calling {_releaseStake}.\n * - Stake claims can also be manually released by calling {releaseStake} directly.\n *\n * @dev Note that this implementation uses the entire provisioned stake as collateral for the payment.\n * It can be used to provide economic security for the payments collected as long as the provisioned\n * stake is not being used for other purposes.\n */\ninterface IDataServiceFees is IDataService {\n /**\n * @notice A stake claim, representing provisioned stake that gets locked\n * to be released to a service provider.\n * @dev StakeClaims are stored in linked lists by service provider, ordered by\n * creation timestamp.\n */\n struct StakeClaim {\n // The amount of tokens to be locked in the claim\n uint256 tokens;\n // Timestamp when the claim was created\n uint256 createdAt;\n // Timestamp when the claim will expire and tokens can be released\n uint256 releasableAt;\n // Next claim in the linked list\n bytes32 nextClaim;\n }\n\n /**\n * @notice Emitted when a stake claim is created and stake is locked.\n * @param serviceProvider The address of the service provider\n * @param claimId The id of the stake claim\n * @param tokens The amount of tokens to lock in the claim\n * @param unlockTimestamp The timestamp when the tokens can be released\n */\n event StakeClaimLocked(\n address indexed serviceProvider,\n bytes32 indexed claimId,\n uint256 tokens,\n uint256 unlockTimestamp\n );\n\n /**\n * @notice Emitted when a stake claim is released and stake is unlocked.\n * @param serviceProvider The address of the service provider\n * @param claimId The id of the stake claim\n * @param tokens The amount of tokens released\n * @param releasableAt The timestamp when the tokens were released\n */\n event StakeClaimReleased(\n address indexed serviceProvider,\n bytes32 indexed claimId,\n uint256 tokens,\n uint256 releasableAt\n );\n\n /**\n * @notice Emitted when a series of stake claims are released.\n * @param serviceProvider The address of the service provider\n * @param claimsCount The number of stake claims being released\n * @param tokensReleased The total amount of tokens being released\n */\n event StakeClaimsReleased(address indexed serviceProvider, uint256 claimsCount, uint256 tokensReleased);\n\n /**\n * @notice Thrown when attempting to get a stake claim that does not exist.\n */\n error DataServiceFeesClaimNotFound(bytes32 claimId);\n\n /**\n * @notice Emitted when trying to lock zero tokens in a stake claim\n */\n error DataServiceFeesZeroTokens();\n\n /**\n * @notice Releases expired stake claims for the caller.\n * @dev This function is only meant to be called if the service provider has enough\n * stake claims that releasing them all at once would exceed the block gas limit.\n * @dev This function can be overriden and/or disabled.\n * @dev Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\n * @param numClaimsToRelease Amount of stake claims to process. If 0, all stake claims are processed.\n */\n function releaseStake(uint256 numClaimsToRelease) external;\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataService } from \"./IDataService.sol\";\n\n/**\n * @title Interface for the {DataServicePausable} contract.\n * @notice Extension for the {IDataService} contract, adds pausing functionality\n * to the data service. Pausing is controlled by privileged accounts called\n * pause guardians.\n */\ninterface IDataServicePausable is IDataService {\n /**\n * @notice Emitted when a pause guardian is set.\n * @param account The address of the pause guardian\n * @param allowed The allowed status of the pause guardian\n */\n event PauseGuardianSet(address indexed account, bool allowed);\n\n /**\n * @notice Emitted when a the caller is not a pause guardian\n * @param account The address of the pause guardian\n */\n error DataServicePausableNotPauseGuardian(address account);\n\n /**\n * @notice Pauses the data service.\n * @dev Note that only functions using the modifiers `whenNotPaused`\n * and `whenPaused` will be affected by the pause.\n *\n * Requirements:\n * - The contract must not be already paused\n */\n function pause() external;\n\n /**\n * @notice Unpauses the data service.\n * @dev Note that only functions using the modifiers `whenNotPaused`\n * and `whenPaused` will be affected by the pause.\n *\n * Requirements:\n * - The contract must be paused\n */\n function unpause() external;\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IHorizonStaking } from \"../../interfaces/IHorizonStaking.sol\";\n\n/**\n * @title ProvisionTracker library\n * @notice A library to facilitate tracking of \"used tokens\" on Graph Horizon provisions. This can be used to\n * ensure data services have enough economic security (provisioned stake) to back the payments they collect for\n * their services.\n * The library provides two primitives, lock and release to signal token usage and free up tokens respectively. It\n * does not make any assumptions about the conditions under which tokens are locked or released.\n */\nlibrary ProvisionTracker {\n /**\n * @notice Thrown when trying to lock more tokens than available\n */\n error ProvisionTrackerInsufficientTokens(uint256 tokensAvailable, uint256 tokensRequired);\n\n /**\n * @notice Locks tokens for a service provider\n * @dev Requirements:\n * - `tokens` must be less than or equal to the amount of tokens available, as reported by the HorizonStaking contract\n * @param self The provision tracker mapping\n * @param graphStaking The HorizonStaking contract\n * @param serviceProvider The service provider address\n * @param tokens The amount of tokens to lock\n * @param delegationRatio A delegation ratio to limit the amount of delegation that's usable\n */\n function lock(\n mapping(address => uint256) storage self,\n IHorizonStaking graphStaking,\n address serviceProvider,\n uint256 tokens,\n uint32 delegationRatio\n ) internal {\n if (tokens == 0) return;\n\n uint256 tokensRequired = self[serviceProvider] + tokens;\n uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio);\n require(tokensRequired <= tokensAvailable, ProvisionTrackerInsufficientTokens(tokensAvailable, tokensRequired));\n self[serviceProvider] += tokens;\n }\n\n /**\n * @notice Releases tokens for a service provider\n * @dev Requirements:\n * - `tokens` must be less than or equal to the amount of tokens locked for the service provider\n * @param self The provision tracker mapping\n * @param serviceProvider The service provider address\n * @param tokens The amount of tokens to release\n */\n function release(mapping(address => uint256) storage self, address serviceProvider, uint256 tokens) internal {\n if (tokens == 0) return;\n require(self[serviceProvider] >= tokens, ProvisionTrackerInsufficientTokens(self[serviceProvider], tokens));\n self[serviceProvider] -= tokens;\n }\n\n /**\n * @notice Checks if a service provider has enough tokens available to lock\n * @param self The provision tracker mapping\n * @param graphStaking The HorizonStaking contract\n * @param serviceProvider The service provider address\n * @param delegationRatio A delegation ratio to limit the amount of delegation that's usable\n */\n function check(\n mapping(address => uint256) storage self,\n IHorizonStaking graphStaking,\n address serviceProvider,\n uint32 delegationRatio\n ) internal view returns (bool) {\n uint256 tokensAvailable = graphStaking.getTokensAvailable(serviceProvider, address(this), delegationRatio);\n return self[serviceProvider] <= tokensAvailable;\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IHorizonStaking } from \"../../interfaces/IHorizonStaking.sol\";\n\nimport { UintRange } from \"../../libraries/UintRange.sol\";\nimport { PPMMath } from \"../../libraries/PPMMath.sol\";\n\nimport { Initializable } from \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport { GraphDirectory } from \"../../utilities/GraphDirectory.sol\";\nimport { ProvisionManagerV1Storage } from \"./ProvisionManagerStorage.sol\";\n\n/**\n * @title ProvisionManager contract\n * @notice A helper contract that implements several provision management functions.\n * @dev Provides utilities to verify provision parameters are within an acceptable range. Each\n * parameter has an overridable setter and getter for the validity range, and a checker that reverts\n * if the parameter is out of range.\n * The parameters are:\n * - Provision parameters (thawing period and verifier cut)\n * - Provision tokens\n */\nabstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionManagerV1Storage {\n using UintRange for uint256;\n\n // Constants\n uint32 internal constant DEFAULT_MIN_VERIFIER_CUT = type(uint32).min;\n uint32 internal constant DEFAULT_MAX_VERIFIER_CUT = uint32(PPMMath.MAX_PPM);\n uint64 internal constant DEFAULT_MIN_THAWING_PERIOD = type(uint64).min;\n uint64 internal constant DEFAULT_MAX_THAWING_PERIOD = type(uint64).max;\n uint256 internal constant DEFAULT_MIN_PROVISION_TOKENS = type(uint256).min;\n uint256 internal constant DEFAULT_MAX_PROVISION_TOKENS = type(uint256).max;\n\n /**\n * @notice Emitted when the provision tokens range is set.\n * @param min The minimum allowed value for the provision tokens.\n * @param max The maximum allowed value for the provision tokens.\n */\n event ProvisionTokensRangeSet(uint256 min, uint256 max);\n\n /**\n * @notice Emitted when the delegation ratio is set.\n * @param ratio The delegation ratio\n */\n event DelegationRatioSet(uint32 ratio);\n\n /**\n * @notice Emitted when the verifier cut range is set.\n * @param min The minimum allowed value for the max verifier cut.\n * @param max The maximum allowed value for the max verifier cut.\n */\n event VerifierCutRangeSet(uint32 min, uint32 max);\n\n /**\n * @notice Emitted when the thawing period range is set.\n * @param min The minimum allowed value for the thawing period.\n * @param max The maximum allowed value for the thawing period.\n */\n event ThawingPeriodRangeSet(uint64 min, uint64 max);\n\n /**\n * @notice Thrown when a provision parameter is out of range.\n * @param message The error message.\n * @param value The value that is out of range.\n * @param min The minimum allowed value.\n * @param max The maximum allowed value.\n */\n error ProvisionManagerInvalidValue(bytes message, uint256 value, uint256 min, uint256 max);\n\n /**\n * @notice Thrown when attempting to set a range where min is greater than max.\n * @param min The minimum value.\n * @param max The maximum value.\n */\n error ProvisionManagerInvalidRange(uint256 min, uint256 max);\n\n /**\n * @notice Thrown when the caller is not authorized to manage the provision of a service provider.\n * @param serviceProvider The address of the serviceProvider.\n * @param caller The address of the caller.\n */\n error ProvisionManagerNotAuthorized(address serviceProvider, address caller);\n\n /**\n * @notice Thrown when a provision is not found.\n * @param serviceProvider The address of the service provider.\n */\n error ProvisionManagerProvisionNotFound(address serviceProvider);\n\n /**\n * @notice Checks if the caller is authorized to manage the provision of a service provider.\n */\n modifier onlyAuthorizedForProvision(address serviceProvider) {\n require(\n _graphStaking().isAuthorized(serviceProvider, address(this), msg.sender),\n ProvisionManagerNotAuthorized(serviceProvider, msg.sender)\n );\n _;\n }\n\n /**\n * @notice Checks if a provision of a service provider is valid according\n * to the parameter ranges established.\n */\n modifier onlyValidProvision(address serviceProvider) virtual {\n IHorizonStaking.Provision memory provision = _getProvision(serviceProvider);\n _checkProvisionTokens(provision);\n _checkProvisionParameters(provision, false);\n _;\n }\n\n /**\n * @notice Initializes the contract and any parent contracts.\n */\n // solhint-disable-next-line func-name-mixedcase\n function __ProvisionManager_init() internal onlyInitializing {\n __ProvisionManager_init_unchained();\n }\n\n /**\n * @notice Initializes the contract.\n * @dev All parameters set to their entire range as valid.\n */\n // solhint-disable-next-line func-name-mixedcase\n function __ProvisionManager_init_unchained() internal onlyInitializing {\n _setProvisionTokensRange(DEFAULT_MIN_PROVISION_TOKENS, DEFAULT_MAX_PROVISION_TOKENS);\n _setVerifierCutRange(DEFAULT_MIN_VERIFIER_CUT, DEFAULT_MAX_VERIFIER_CUT);\n _setThawingPeriodRange(DEFAULT_MIN_THAWING_PERIOD, DEFAULT_MAX_THAWING_PERIOD);\n }\n\n /**\n * @notice Verifies and accepts the provision parameters of a service provider in\n * the {HorizonStaking} contract.\n * @dev Checks the pending provision parameters, not the current ones.\n *\n * Emits a {ProvisionPendingParametersAccepted} event.\n *\n * @param _serviceProvider The address of the service provider.\n */\n function _acceptProvisionParameters(address _serviceProvider) internal {\n _checkProvisionParameters(_serviceProvider, true);\n _graphStaking().acceptProvisionParameters(_serviceProvider);\n }\n\n // -- setters --\n /**\n * @notice Sets the delegation ratio.\n * @param _ratio The delegation ratio to be set\n */\n function _setDelegationRatio(uint32 _ratio) internal {\n delegationRatio = _ratio;\n emit DelegationRatioSet(_ratio);\n }\n\n /**\n * @notice Sets the range for the provision tokens.\n * @param _min The minimum allowed value for the provision tokens.\n * @param _max The maximum allowed value for the provision tokens.\n */\n function _setProvisionTokensRange(uint256 _min, uint256 _max) internal {\n require(_min <= _max, ProvisionManagerInvalidRange(_min, _max));\n minimumProvisionTokens = _min;\n maximumProvisionTokens = _max;\n emit ProvisionTokensRangeSet(_min, _max);\n }\n\n /**\n * @notice Sets the range for the verifier cut.\n * @param _min The minimum allowed value for the max verifier cut.\n * @param _max The maximum allowed value for the max verifier cut.\n */\n function _setVerifierCutRange(uint32 _min, uint32 _max) internal {\n require(_min <= _max, ProvisionManagerInvalidRange(_min, _max));\n require(PPMMath.isValidPPM(_max), ProvisionManagerInvalidRange(_min, _max));\n minimumVerifierCut = _min;\n maximumVerifierCut = _max;\n emit VerifierCutRangeSet(_min, _max);\n }\n\n /**\n * @notice Sets the range for the thawing period.\n * @param _min The minimum allowed value for the thawing period.\n * @param _max The maximum allowed value for the thawing period.\n */\n function _setThawingPeriodRange(uint64 _min, uint64 _max) internal {\n require(_min <= _max, ProvisionManagerInvalidRange(_min, _max));\n minimumThawingPeriod = _min;\n maximumThawingPeriod = _max;\n emit ThawingPeriodRangeSet(_min, _max);\n }\n\n // -- checks --\n\n /**\n * @notice Checks if the provision tokens of a service provider are within the valid range.\n * @param _serviceProvider The address of the service provider.\n */\n function _checkProvisionTokens(address _serviceProvider) internal view virtual {\n IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider);\n _checkProvisionTokens(provision);\n }\n\n /**\n * @notice Checks if the provision tokens of a service provider are within the valid range.\n * @param _provision The provision to check.\n */\n function _checkProvisionTokens(IHorizonStaking.Provision memory _provision) internal view virtual {\n _checkValueInRange(_provision.tokens, minimumProvisionTokens, maximumProvisionTokens, \"tokens\");\n }\n\n /**\n * @notice Checks if the provision parameters of a service provider are within the valid range.\n * @param _serviceProvider The address of the service provider.\n * @param _checkPending If true, checks the pending provision parameters.\n */\n function _checkProvisionParameters(address _serviceProvider, bool _checkPending) internal view virtual {\n IHorizonStaking.Provision memory provision = _getProvision(_serviceProvider);\n _checkProvisionParameters(provision, _checkPending);\n }\n\n /**\n * @notice Checks if the provision parameters of a service provider are within the valid range.\n * @param _provision The provision to check.\n * @param _checkPending If true, checks the pending provision parameters instead of the current ones.\n */\n function _checkProvisionParameters(\n IHorizonStaking.Provision memory _provision,\n bool _checkPending\n ) internal view virtual {\n (uint64 thawingPeriodMin, uint64 thawingPeriodMax) = _getThawingPeriodRange();\n uint64 thawingPeriodToCheck = _checkPending ? _provision.thawingPeriodPending : _provision.thawingPeriod;\n _checkValueInRange(thawingPeriodToCheck, thawingPeriodMin, thawingPeriodMax, \"thawingPeriod\");\n\n (uint32 verifierCutMin, uint32 verifierCutMax) = _getVerifierCutRange();\n uint32 maxVerifierCutToCheck = _checkPending ? _provision.maxVerifierCutPending : _provision.maxVerifierCut;\n _checkValueInRange(maxVerifierCutToCheck, verifierCutMin, verifierCutMax, \"maxVerifierCut\");\n }\n\n // -- getters --\n\n /**\n * @notice Gets the delegation ratio.\n * @return The delegation ratio\n */\n function _getDelegationRatio() internal view returns (uint32) {\n return delegationRatio;\n }\n\n /**\n * @notice Gets the range for the provision tokens.\n * @return min The minimum allowed value for the provision tokens.\n * @return max The maximum allowed value for the provision tokens.\n */\n function _getProvisionTokensRange() internal view virtual returns (uint256 min, uint256 max) {\n return (minimumProvisionTokens, maximumProvisionTokens);\n }\n\n /**\n * @notice Gets the range for the thawing period.\n * @return min The minimum allowed value for the thawing period.\n * @return max The maximum allowed value for the thawing period.\n */\n function _getThawingPeriodRange() internal view virtual returns (uint64 min, uint64 max) {\n return (minimumThawingPeriod, maximumThawingPeriod);\n }\n\n /**\n * @notice Gets the range for the verifier cut.\n * @return min The minimum allowed value for the max verifier cut.\n * @return max The maximum allowed value for the max verifier cut.\n */\n function _getVerifierCutRange() internal view virtual returns (uint32 min, uint32 max) {\n return (minimumVerifierCut, maximumVerifierCut);\n }\n\n /**\n * @notice Gets a provision from the {HorizonStaking} contract.\n * @dev Requirements:\n * - The provision must exist.\n * @param _serviceProvider The address of the service provider.\n */\n function _getProvision(address _serviceProvider) internal view returns (IHorizonStaking.Provision memory) {\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_serviceProvider, address(this));\n require(provision.createdAt != 0, ProvisionManagerProvisionNotFound(_serviceProvider));\n return provision;\n }\n\n /**\n * @notice Checks if a value is within a valid range.\n * @param _value The value to check.\n * @param _min The minimum allowed value.\n * @param _max The maximum allowed value.\n * @param _revertMessage The revert message to display if the value is out of range.\n */\n function _checkValueInRange(uint256 _value, uint256 _min, uint256 _max, bytes memory _revertMessage) private pure {\n require(_value.isInRange(_min, _max), ProvisionManagerInvalidValue(_revertMessage, _value, _min, _max));\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title Storage layout for the {ProvisionManager} helper contract.\n */\nabstract contract ProvisionManagerV1Storage {\n /// @notice The minimum amount of tokens required to register a provision in the data service\n uint256 public minimumProvisionTokens;\n\n /// @notice The maximum amount of tokens allowed to register a provision in the data service\n uint256 public maximumProvisionTokens;\n\n /// @notice The minimum thawing period required to register a provision in the data service\n uint64 public minimumThawingPeriod;\n\n /// @notice The maximum thawing period allowed to register a provision in the data service\n uint64 public maximumThawingPeriod;\n\n /// @notice The minimum verifier cut required to register a provision in the data service (in PPM)\n uint32 public minimumVerifierCut;\n\n /// @notice The maximum verifier cut allowed to register a provision in the data service (in PPM)\n uint32 public maximumVerifierCut;\n\n /// @notice How much delegation the service provider can effectively use\n /// @dev Max calculated as service provider's stake * delegationRatio\n uint32 public delegationRatio;\n\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title Interface for the {GraphPayments} contract\n * @notice This contract is part of the Graph Horizon payments protocol. It's designed\n * to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a\n * set of pre established rules.\n */\ninterface IGraphPayments {\n /**\n * @notice Types of payments that are supported by the payments protocol\n * @dev\n */\n enum PaymentTypes {\n QueryFee,\n IndexingFee,\n IndexingRewards\n }\n\n /**\n * @notice Emitted when a payment is collected\n * @param payer The address of the payer\n * @param receiver The address of the receiver\n * @param dataService The address of the data service\n * @param tokensReceiver Amount of tokens for the receiver\n * @param tokensDelegationPool Amount of tokens for delegators\n * @param tokensDataService Amount of tokens for the data service\n * @param tokensProtocol Amount of tokens charged as protocol tax\n */\n event PaymentCollected(\n address indexed payer,\n address indexed receiver,\n address indexed dataService,\n uint256 tokensReceiver,\n uint256 tokensDelegationPool,\n uint256 tokensDataService,\n uint256 tokensProtocol\n );\n\n /**\n * @notice Thrown when there are insufficient tokens to pay the required amount\n * @param tokens The amount of tokens available\n * @param minTokens The amount of tokens being collected\n */\n error GraphPaymentsInsufficientTokens(uint256 tokens, uint256 minTokens);\n\n /**\n * @notice Thrown when the protocol payment cut is invalid\n * @param protocolPaymentCut The protocol payment cut\n */\n error GraphPaymentsInvalidProtocolPaymentCut(uint256 protocolPaymentCut);\n\n /**\n * @notice Collects funds from a payer.\n * It will pay cuts to all relevant parties and forward the rest to the receiver.\n * @param paymentType The type of payment as defined in {IGraphPayments}\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens being collected\n * @param dataService The address of the data service\n * @param tokensDataService The amount of tokens that should be sent to the data service\n */\n function collect(\n PaymentTypes paymentType,\n address receiver,\n uint256 tokens,\n address dataService,\n uint256 tokensDataService\n ) external;\n}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\n/**\n * @title IGraphProxyAdmin\n * @dev Empty interface to allow the GraphProxyAdmin contract to be used\n * in the GraphDirectory contract.\n */\ninterface IGraphProxyAdmin {}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IHorizonStakingTypes } from \"./internal/IHorizonStakingTypes.sol\";\nimport { IHorizonStakingMain } from \"./internal/IHorizonStakingMain.sol\";\nimport { IHorizonStakingBase } from \"./internal/IHorizonStakingBase.sol\";\nimport { IHorizonStakingExtension } from \"./internal/IHorizonStakingExtension.sol\";\n\n/**\n * @title Complete interface for the Horizon Staking contract\n * @notice This interface exposes all functions implemented by the {HorizonStaking} contract and its extension\n * {HorizonStakingExtension} as well as the custom data types used by the contract.\n * @dev Use this interface to interact with the Horizon Staking contract.\n */\ninterface IHorizonStaking is IHorizonStakingTypes, IHorizonStakingBase, IHorizonStakingMain, IHorizonStakingExtension {}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IHorizonStakingTypes } from \"./IHorizonStakingTypes.sol\";\nimport { IGraphPayments } from \"../IGraphPayments.sol\";\n\nimport { LinkedList } from \"../../libraries/LinkedList.sol\";\n\n/**\n * @title Interface for the {HorizonStakingBase} contract.\n * @notice Provides getters for {HorizonStaking} and {HorizonStakingExtension} storage variables.\n * @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision\n * functions take `serviceProvider` and `verifier` addresses.\n */\ninterface IHorizonStakingBase {\n /**\n * @notice Emitted when a service provider stakes tokens.\n * @dev TODO: After transition period move to IHorizonStakingMain. Temporarily it\n * needs to be here since it's emitted by {_stake} which is used by both {HorizonStaking}\n * and {HorizonStakingExtension}.\n * @param serviceProvider The address of the service provider.\n * @param tokens The amount of tokens staked.\n */\n event StakeDeposited(address indexed serviceProvider, uint256 tokens);\n\n /**\n * @notice Gets the details of a service provider.\n * @param serviceProvider The address of the service provider.\n */\n function getServiceProvider(\n address serviceProvider\n ) external view returns (IHorizonStakingTypes.ServiceProvider memory);\n\n /**\n * @notice Gets the stake of a service provider.\n * @param serviceProvider The address of the service provider.\n * @return The amount of tokens staked.\n */\n function getStake(address serviceProvider) external view returns (uint256);\n\n /**\n * @notice Gets the service provider's idle stake which is the stake that is not being\n * used for any provision. Note that this only includes service provider's self stake.\n * @param serviceProvider The address of the service provider.\n * @return The amount of tokens that are idle.\n */\n function getIdleStake(address serviceProvider) external view returns (uint256);\n\n /**\n * @notice Gets the details of delegation pool.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @return The delegation pool details.\n */\n function getDelegationPool(\n address serviceProvider,\n address verifier\n ) external view returns (IHorizonStakingTypes.DelegationPool memory);\n\n /**\n * @notice Gets the details of a delegation.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param delegator The address of the delegator.\n * @return The delegation details.\n */\n function getDelegation(\n address serviceProvider,\n address verifier,\n address delegator\n ) external view returns (IHorizonStakingTypes.Delegation memory);\n\n /**\n * @notice Gets the delegation fee cut for a payment type.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param paymentType The payment type as defined by {IGraphPayments.PaymentTypes}.\n * @return The delegation fee cut in PPM.\n */\n function getDelegationFeeCut(\n address serviceProvider,\n address verifier,\n IGraphPayments.PaymentTypes paymentType\n ) external view returns (uint256);\n\n /**\n * @notice Gets the details of a provision.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @return The provision details.\n */\n function getProvision(\n address serviceProvider,\n address verifier\n ) external view returns (IHorizonStakingTypes.Provision memory);\n\n /**\n * @notice Gets the tokens available in a provision.\n * Tokens available are the tokens in a provision that are not thawing. Includes service\n * provider's and delegator's stake.\n *\n * Allows specifying a `delegationRatio` which caps the amount of delegated tokens that are\n * considered available.\n *\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param delegationRatio The delegation ratio.\n * @return The amount of tokens available.\n */\n function getTokensAvailable(\n address serviceProvider,\n address verifier,\n uint32 delegationRatio\n ) external view returns (uint256);\n\n /**\n * @notice Gets the service provider's tokens available in a provision.\n * @dev Calculated as the tokens available minus the tokens thawing.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @return The amount of tokens available.\n */\n function getProviderTokensAvailable(address serviceProvider, address verifier) external view returns (uint256);\n\n /**\n * @notice Gets the delegator's tokens available in a provision.\n * @dev Calculated as the tokens available minus the tokens thawing.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @return The amount of tokens available.\n */\n function getDelegatedTokensAvailable(address serviceProvider, address verifier) external view returns (uint256);\n\n /**\n * @notice Gets a thaw request.\n * @param thawRequestId The id of the thaw request.\n * @return The thaw request details.\n */\n function getThawRequest(bytes32 thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory);\n\n /**\n * @notice Gets the metadata of a thaw request list.\n * Service provider and delegators each have their own thaw request list per provision.\n * Metadata includes the head and tail of the list, plus the total number of thaw requests.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param owner The owner of the thaw requests. Use either the service provider or delegator address.\n * @return The thaw requests list metadata.\n */\n function getThawRequestList(\n address serviceProvider,\n address verifier,\n address owner\n ) external view returns (LinkedList.List memory);\n\n /**\n * @notice Gets the amount of thawed tokens for a given provision.\n * @param serviceProvider The address of the service provider.\n * @param verifier The address of the verifier.\n * @param owner The owner of the thaw requests. Use either the service provider or delegator address.\n * @return The amount of thawed tokens.\n */\n function getThawedTokens(address serviceProvider, address verifier, address owner) external view returns (uint256);\n\n /**\n * @notice Gets the maximum allowed thawing period for a provision.\n */\n function getMaxThawingPeriod() external view returns (uint64);\n\n /**\n * @notice Return true if the verifier is an allowed locked verifier.\n * @param verifier Address of the verifier\n * @return True if verifier is allowed locked verifier, false otherwise\n */\n function isAllowedLockedVerifier(address verifier) external view returns (bool);\n\n /**\n * @notice Return true if delegation slashing is enabled, false otherwise.\n */\n function isDelegationSlashingEnabled() external view returns (bool);\n}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IRewardsIssuer } from \"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\";\n\n/**\n * @title Interface for {HorizonStakingExtension} contract.\n * @notice Provides functions for managing legacy allocations.\n */\ninterface IHorizonStakingExtension is IRewardsIssuer {\n /**\n * @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment\n * An allocation is created in the allocate() function and closed in closeAllocation()\n */\n struct Allocation {\n address indexer;\n bytes32 subgraphDeploymentID;\n uint256 tokens; // Tokens allocated to a SubgraphDeployment\n uint256 createdAtEpoch; // Epoch when it was created\n uint256 closedAtEpoch; // Epoch when it was closed\n uint256 collectedFees; // Collected fees for the allocation\n uint256 __DEPRECATED_effectiveAllocation; // solhint-disable-line var-name-mixedcase\n uint256 accRewardsPerAllocatedToken; // Snapshot used for reward calc\n uint256 distributedRebates; // Collected rebates that have been rebated\n }\n\n /**\n * @dev Possible states an allocation can be.\n * States:\n * - Null = indexer == address(0)\n * - Active = not Null && tokens > 0\n * - Closed = Active && closedAtEpoch != 0\n */\n enum AllocationState {\n Null,\n Active,\n Closed\n }\n\n /**\n * @dev Emitted when `indexer` close an allocation in `epoch` for `allocationID`.\n * An amount of `tokens` get unallocated from `subgraphDeploymentID`.\n * This event also emits the POI (proof of indexing) submitted by the indexer.\n * `isPublic` is true if the sender was someone other than the indexer.\n */\n event AllocationClosed(\n address indexed indexer,\n bytes32 indexed subgraphDeploymentID,\n uint256 epoch,\n uint256 tokens,\n address indexed allocationID,\n address sender,\n bytes32 poi,\n bool isPublic\n );\n\n /**\n * @dev Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`.\n * `epoch` is the protocol epoch the rebate was collected on\n * The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees`\n * is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt.\n * `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected\n * and sent to the delegation pool.\n */\n event RebateCollected(\n address assetHolder,\n address indexed indexer,\n bytes32 indexed subgraphDeploymentID,\n address indexed allocationID,\n uint256 epoch,\n uint256 tokens,\n uint256 protocolTax,\n uint256 curationFees,\n uint256 queryFees,\n uint256 queryRebates,\n uint256 delegationRewards\n );\n\n /**\n * @notice Close an allocation and free the staked tokens.\n * To be eligible for rewards a proof of indexing must be presented.\n * Presenting a bad proof is subject to slashable condition.\n * To opt out of rewards set _poi to 0x0\n * @param allocationID The allocation identifier\n * @param poi Proof of indexing submitted for the allocated period\n */\n function closeAllocation(address allocationID, bytes32 poi) external;\n\n /**\n * @notice Collect query fees from state channels and assign them to an allocation.\n * Funds received are only accepted from a valid sender.\n * @dev To avoid reverting on the withdrawal from channel flow this function will:\n * 1) Accept calls with zero tokens.\n * 2) Accept calls after an allocation passed the dispute period, in that case, all\n * the received tokens are burned.\n * @param tokens Amount of tokens to collect\n * @param allocationID Allocation where the tokens will be assigned\n */\n function collect(uint256 tokens, address allocationID) external;\n\n /**\n * @notice Return true if operator is allowed for indexer.\n * @param operator Address of the operator\n * @param indexer Address of the indexer\n * @return True if operator is allowed for indexer, false otherwise\n */\n function isOperator(address operator, address indexer) external view returns (bool);\n\n /**\n * @notice Getter that returns if an indexer has any stake.\n * @param indexer Address of the indexer\n * @return True if indexer has staked tokens\n */\n function hasStake(address indexer) external view returns (bool);\n\n /**\n * @notice Get the total amount of tokens staked by the indexer.\n * @param indexer Address of the indexer\n * @return Amount of tokens staked by the indexer\n */\n function getIndexerStakedTokens(address indexer) external view returns (uint256);\n\n /**\n * @notice Return the allocation by ID.\n * @param allocationID Address used as allocation identifier\n * @return Allocation data\n */\n function getAllocation(address allocationID) external view returns (Allocation memory);\n\n /**\n * @notice Return the current state of an allocation\n * @param allocationID Allocation identifier\n * @return AllocationState enum with the state of the allocation\n */\n function getAllocationState(address allocationID) external view returns (AllocationState);\n\n /**\n * @notice Return if allocationID is used.\n * @param allocationID Address used as signer by the indexer for an allocation\n * @return True if allocationID already used\n */\n function isAllocation(address allocationID) external view returns (bool);\n\n /**\n * @notice Return the time in blocks to unstake\n * @return Thawing period in blocks\n */\n // solhint-disable-next-line func-name-mixedcase\n function __DEPRECATED_getThawingPeriod() external view returns (uint64);\n}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"../../interfaces/IGraphPayments.sol\";\n\n/**\n * @title Inferface for the {HorizonStaking} contract.\n * @notice Provides functions for managing stake, provisions, delegations, and slashing.\n * @dev Note that this interface only includes the functions implemented by {HorizonStaking} contract,\n * and not those implemented by {HorizonStakingExtension}.\n * Do not use this interface to interface with the {HorizonStaking} contract, use {IHorizonStaking} for\n * the complete interface.\n * @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision\n * functions take `serviceProvider` and `verifier` addresses.\n */\ninterface IHorizonStakingMain {\n // -- Events: stake --\n\n /**\n * @notice Emitted when a service provider unstakes tokens during the transition period.\n * @param serviceProvider The address of the service provider\n * @param tokens The amount of tokens unstaked\n * @param until The block number until the stake is locked\n */\n event StakeLocked(address indexed serviceProvider, uint256 tokens, uint256 until);\n\n /**\n * @notice Emitted when a service provider withdraws tokens during the transition period.\n * @param serviceProvider The address of the service provider\n * @param tokens The amount of tokens withdrawn\n */\n event StakeWithdrawn(address indexed serviceProvider, uint256 tokens);\n\n // -- Events: provision --\n\n /**\n * @notice Emitted when a service provider provisions staked tokens to a verifier.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens provisioned\n * @param maxVerifierCut The maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\n * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision\n */\n event ProvisionCreated(\n address indexed serviceProvider,\n address indexed verifier,\n uint256 tokens,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n );\n\n /**\n * @notice Emitted whenever staked tokens are added to an existing provision\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens added to the provision\n */\n event ProvisionIncreased(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a service provider thaws tokens from a provision.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens thawed\n */\n event ProvisionThawed(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a service provider removes tokens from a provision.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens removed\n */\n event TokensDeprovisioned(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a service provider stages a provision parameter update.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for\n * themselves when slashing\n * @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from\n * the provision\n */\n event ProvisionParametersStaged(\n address indexed serviceProvider,\n address indexed verifier,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n );\n\n /**\n * @notice Emitted when a service provider accepts a staged provision parameter update.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param maxVerifierCut The new maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves\n * when slashing\n * @param thawingPeriod The new period in seconds that the tokens will be thawing before they can be removed from the provision\n */\n event ProvisionParametersSet(\n address indexed serviceProvider,\n address indexed verifier,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n );\n\n /**\n * @dev Emitted when an operator is allowed or denied by a service provider for a particular verifier\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param operator The address of the operator\n * @param allowed Whether the operator is allowed or denied\n */\n event OperatorSet(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed operator,\n bool allowed\n );\n\n // -- Events: slashing --\n\n /**\n * @notice Emitted when a provision is slashed by a verifier.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens slashed (note this only represents service provider's slashed stake)\n */\n event ProvisionSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a delegation pool is slashed by a verifier.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens slashed (note this only represents delegation pool's slashed stake)\n */\n event DelegationSlashed(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a delegation pool would have been slashed by a verifier, but the slashing was skipped\n * because delegation slashing global parameter is not enabled.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens that would have been slashed (note this only represents delegation pool's slashed stake)\n */\n event DelegationSlashingSkipped(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when the verifier cut is sent to the verifier after slashing a provision.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param destination The address where the verifier cut is sent\n * @param tokens The amount of tokens sent to the verifier\n */\n event VerifierTokensSent(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed destination,\n uint256 tokens\n );\n\n // -- Events: delegation --\n\n /**\n * @notice Emitted when tokens are delegated to a provision.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param delegator The address of the delegator\n * @param tokens The amount of tokens delegated\n */\n event TokensDelegated(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed delegator,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when a delegator undelegates tokens from a provision and starts\n * thawing them.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param delegator The address of the delegator\n * @param tokens The amount of tokens undelegated\n */\n event TokensUndelegated(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed delegator,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when a delegator withdraws tokens from a provision after thawing.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param delegator The address of the delegator\n * @param tokens The amount of tokens withdrawn\n */\n event DelegatedTokensWithdrawn(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed delegator,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when tokens are added to a delegation pool's reserve.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param tokens The amount of tokens withdrawn\n */\n event TokensToDelegationPoolAdded(address indexed serviceProvider, address indexed verifier, uint256 tokens);\n\n /**\n * @notice Emitted when a service provider sets delegation fee cuts for a verifier.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments}\n * @param feeCut The fee cut set, in PPM\n */\n event DelegationFeeCutSet(\n address indexed serviceProvider,\n address indexed verifier,\n IGraphPayments.PaymentTypes indexed paymentType,\n uint256 feeCut\n );\n\n // -- Events: thawing --\n\n /**\n * @notice Emitted when a thaw request is created.\n * @dev Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param owner The address of the owner of the thaw request.\n * @param shares The amount of shares being thawed\n * @param thawingUntil The timestamp until the stake is thawed\n * @param thawRequestId The ID of the thaw request\n */\n event ThawRequestCreated(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed owner,\n uint256 shares,\n uint64 thawingUntil,\n bytes32 thawRequestId\n );\n\n /**\n * @notice Emitted when a thaw request is fulfilled, meaning the stake is released.\n * @param thawRequestId The ID of the thaw request\n * @param tokens The amount of tokens being released\n * @param shares The amount of shares being released\n * @param thawingUntil The timestamp until the stake has thawed\n * @param valid Whether the thaw request was valid at the time of fulfillment\n */\n event ThawRequestFulfilled(\n bytes32 indexed thawRequestId,\n uint256 tokens,\n uint256 shares,\n uint64 thawingUntil,\n bool valid\n );\n\n /**\n * @notice Emitted when a series of thaw requests are fulfilled.\n * @param serviceProvider The address of the service provider\n * @param verifier The address of the verifier\n * @param owner The address of the owner of the thaw requests\n * @param thawRequestsFulfilled The number of thaw requests fulfilled\n * @param tokens The total amount of tokens being released\n */\n event ThawRequestsFulfilled(\n address indexed serviceProvider,\n address indexed verifier,\n address indexed owner,\n uint256 thawRequestsFulfilled,\n uint256 tokens\n );\n\n // -- Events: governance --\n\n /**\n * @notice Emitted when the global maximum thawing period allowed for provisions is set.\n * @param maxThawingPeriod The new maximum thawing period\n */\n event MaxThawingPeriodSet(uint64 maxThawingPeriod);\n\n /**\n * @notice Emitted when a verifier is allowed or disallowed to be used for locked provisions.\n * @param verifier The address of the verifier\n * @param allowed Whether the verifier is allowed or disallowed\n */\n event AllowedLockedVerifierSet(address indexed verifier, bool allowed);\n\n /**\n * @notice Emitted when the legacy global thawing period is set to zero.\n * @dev This marks the end of the transition period.\n */\n event ThawingPeriodCleared();\n\n /**\n * @notice Emitted when the delegation slashing global flag is set.\n * @param enabled Whether delegation slashing is enabled or disabled.\n */\n event DelegationSlashingEnabled(bool enabled);\n\n // -- Errors: tokens\n\n /**\n * @notice Thrown when operating a zero token amount is not allowed.\n */\n error HorizonStakingInvalidZeroTokens();\n\n /**\n * @notice Thrown when a minimum token amount is required to operate but it's not met.\n * @param tokens The actual token amount\n * @param minRequired The minimum required token amount\n */\n error HorizonStakingInsufficientTokens(uint256 tokens, uint256 minRequired);\n\n /**\n * @notice Thrown when the amount of tokens exceeds the maximum allowed to operate.\n * @param tokens The actual token amount\n * @param maxTokens The maximum allowed token amount\n */\n error HorizonStakingTooManyTokens(uint256 tokens, uint256 maxTokens);\n\n // -- Errors: provision --\n\n /**\n * @notice Thrown when attempting to operate with a provision that does not exist.\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n */\n error HorizonStakingInvalidProvision(address serviceProvider, address verifier);\n\n /**\n * @notice Thrown when the caller is not authorized to operate on a provision.\n * @param caller The caller address\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n */\n error HorizonStakingNotAuthorized(address serviceProvider, address verifier, address caller);\n\n /**\n * @notice Thrown when attempting to create a provision with an invalid maximum verifier cut.\n * @param maxVerifierCut The maximum verifier cut\n */\n error HorizonStakingInvalidMaxVerifierCut(uint32 maxVerifierCut);\n\n /**\n * @notice Thrown when attempting to create a provision with an invalid thawing period.\n * @param thawingPeriod The thawing period\n * @param maxThawingPeriod The maximum `thawingPeriod` allowed\n */\n error HorizonStakingInvalidThawingPeriod(uint64 thawingPeriod, uint64 maxThawingPeriod);\n\n /**\n * @notice Thrown when attempting to create a provision for a data service that already has a provision.\n */\n error HorizonStakingProvisionAlreadyExists();\n\n // -- Errors: stake --\n\n /**\n * @notice Thrown when the service provider has insufficient idle stake to operate.\n * @param tokens The actual token amount\n * @param minTokens The minimum required token amount\n */\n error HorizonStakingInsufficientIdleStake(uint256 tokens, uint256 minTokens);\n\n /**\n * @notice Thrown during the transition period when the service provider has insufficient stake to\n * cover their existing legacy allocations.\n * @param tokens The actual token amount\n * @param minTokens The minimum required token amount\n */\n error HorizonStakingInsufficientStakeForLegacyAllocations(uint256 tokens, uint256 minTokens);\n\n // -- Errors: delegation --\n\n /**\n * @notice Thrown when delegation shares obtained are below the expected amount.\n * @param shares The actual share amount\n * @param minShares The minimum required share amount\n */\n error HorizonStakingSlippageProtection(uint256 shares, uint256 minShares);\n\n /**\n * @notice Thrown when operating a zero share amount is not allowed.\n */\n error HorizonStakingInvalidZeroShares();\n\n /**\n * @notice Thrown when a minimum share amount is required to operate but it's not met.\n * @param shares The actual share amount\n * @param minShares The minimum required share amount\n */\n error HorizonStakingInsufficientShares(uint256 shares, uint256 minShares);\n\n /**\n * @notice Thrown when as a result of slashing delegation pool has no tokens but has shares.\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n */\n error HorizonStakingInvalidDelegationPoolState(address serviceProvider, address verifier);\n\n /**\n * @notice Thrown when attempting to operate with a delegation pool that does not exist.\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n */\n error HorizonStakingInvalidDelegationPool(address serviceProvider, address verifier);\n\n /**\n * @notice Thrown when attempting to undelegate with a beneficiary that is the zero address.\n */\n error HorizonStakingInvalidBeneficiaryZeroAddress();\n\n /**\n * @notice Thrown when attempting to redelegate with a serivce provider that is the zero address.\n */\n error HorizonStakingInvalidServiceProviderZeroAddress();\n\n /**\n * @notice Thrown when attempting to redelegate with a verifier that is the zero address.\n */\n error HorizonStakingInvalidVerifierZeroAddress();\n\n // -- Errors: thaw requests --\n\n error HorizonStakingNothingThawing();\n error HorizonStakingTooManyThawRequests();\n\n // -- Errors: misc --\n /**\n * @notice Thrown during the transition period when attempting to withdraw tokens that are still thawing.\n * @dev Note this thawing refers to the global thawing period applied to legacy allocated tokens,\n * it does not refer to thaw requests.\n * @param until The block number until the stake is locked\n */\n error HorizonStakingStillThawing(uint256 until);\n\n /**\n * @notice Thrown when a service provider attempts to operate on verifiers that are not allowed.\n * @dev Only applies to stake from locked wallets.\n */\n error HorizonStakingVerifierNotAllowed(address verifier);\n\n /**\n * @notice Thrown when a service provider attempts to change their own operator access.\n */\n error HorizonStakingCallerIsServiceProvider();\n\n /**\n * @notice Thrown when trying to set a delegation fee cut that is not valid.\n * @param feeCut The fee cut\n */\n error HorizonStakingInvalidDelegationFeeCut(uint256 feeCut);\n\n // -- Functions --\n\n /**\n * @notice Deposit tokens on the staking contract.\n * @dev Pulls tokens from the caller.\n *\n * Requirements:\n * - `_tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n *\n * Emits a {StakeDeposited} event.\n *\n * @param tokens Amount of tokens to stake\n */\n function stake(uint256 tokens) external;\n\n /**\n * @notice Deposit tokens on the service provider stake, on behalf of the service provider.\n * @dev Pulls tokens from the caller.\n *\n * Requirements:\n * - `_tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n *\n * Emits a {StakeDeposited} event.\n *\n * @param serviceProvider Address of the service provider\n * @param tokens Amount of tokens to stake\n */\n function stakeTo(address serviceProvider, uint256 tokens) external;\n\n // can be called by anyone if the service provider has provisioned stake to this verifier\n /**\n * @notice Deposit tokens on the service provider stake, on behalf of the service provider,\n * provisioned to a specific verifier.\n * @dev Requirements:\n * - The `serviceProvider` must have previously provisioned stake to `verifier`.\n * - `_tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n *\n * Emits {StakeDeposited} and {ProvisionIncreased} events.\n *\n * @param serviceProvider Address of the service provider\n * @param verifier Address of the verifier\n * @param tokens Amount of tokens to stake\n */\n function stakeToProvision(address serviceProvider, address verifier, uint256 tokens) external;\n\n /**\n * @notice Move idle stake back to the owner's account.\n * Stake is removed from the protocol:\n * - During the transition period it's locked for a period of time before it can be withdrawn\n * by calling {withdraw}.\n * - After the transition period it's immediately withdrawn.\n * @dev Requirements:\n * - `_tokens` cannot be zero.\n * - `_serviceProvider` must have enough idle stake to cover the staking amount and any\n * legacy allocation.\n *\n * Emits a {StakeLocked} event during the transition period.\n * Emits a {StakeWithdrawn} event after the transition period.\n *\n * @param tokens Amount of tokens to unstake\n */\n function unstake(uint256 tokens) external;\n\n /**\n * @notice Withdraw service provider tokens once the thawing period (initiated by {unstake}) has passed.\n * All thawed tokens are withdrawn.\n * @dev This is only needed during the transition period while we still have\n * a global lock. After that, unstake() will automatically withdraw.\n */\n function withdraw() external;\n\n /**\n * @notice Provision stake to a verifier. The tokens will be locked with a thawing period\n * and will be slashable by the verifier. This is the main mechanism to provision stake to a data\n * service, where the data service is the verifier.\n * This function can be called by the service provider or by an operator authorized by the provider\n * for this specific verifier.\n * @dev Requirements:\n * - `tokens` cannot be zero.\n * - The `serviceProvider` must have enough idle stake to cover the tokens to provision.\n * - `maxVerifierCut` must be a valid PPM.\n * - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`.\n *\n * Emits a {ProvisionCreated} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\n * @param tokens The amount of tokens that will be locked and slashable\n * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\n * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision\n */\n function provision(\n address serviceProvider,\n address verifier,\n uint256 tokens,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n ) external;\n\n /**\n * @notice Adds tokens from the service provider's idle stake to a provision\n * @dev\n *\n * Requirements:\n * - The `serviceProvider` must have previously provisioned stake to `verifier`.\n * - `tokens` cannot be zero.\n * - The `serviceProvider` must have enough idle stake to cover the tokens to add.\n *\n * Emits a {ProvisionIncreased} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param tokens The amount of tokens to add to the provision\n */\n function addToProvision(address serviceProvider, address verifier, uint256 tokens) external;\n\n /**\n * @notice Start thawing tokens to remove them from a provision.\n * This function can be called by the service provider or by an operator authorized by the provider\n * for this specific verifier.\n *\n * Note that removing tokens from a provision is a two step process:\n * - First the tokens are thawed using this function.\n * - Then after the thawing period, the tokens are removed from the provision using {deprovision}\n * or {reprovision}.\n *\n * @dev Requirements:\n * - The provision must have enough tokens available to thaw.\n * - `tokens` cannot be zero.\n *\n * Emits {ProvisionThawed} and {ThawRequestCreated} events.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address for which the tokens are provisioned\n * @param tokens The amount of tokens to thaw\n * @return The ID of the thaw request\n */\n function thaw(address serviceProvider, address verifier, uint256 tokens) external returns (bytes32);\n\n /**\n * @notice Remove tokens from a provision and move them back to the service provider's idle stake.\n * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n * requests in the event that fulfilling all of them results in a gas limit error.\n *\n * Requirements:\n * - Must have previously initiated a thaw request using {thaw}.\n *\n * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {TokensDeprovisioned} events.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\n */\n function deprovision(address serviceProvider, address verifier, uint256 nThawRequests) external;\n\n /**\n * @notice Move already thawed stake from one provision into another provision\n * This function can be called by the service provider or by an operator authorized by the provider\n * for the two corresponding verifiers.\n * @dev Requirements:\n * - Must have previously initiated a thaw request using {thaw}.\n * - `tokens` cannot be zero.\n * - The `serviceProvider` must have previously provisioned stake to `newVerifier`.\n * - The `serviceProvider` must have enough idle stake to cover the tokens to add.\n *\n * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled}, {TokensDeprovisioned} and {ProvisionIncreased}\n * events.\n *\n * @param serviceProvider The service provider address\n * @param oldVerifier The verifier address for which the tokens are currently provisioned\n * @param newVerifier The verifier address for which the tokens will be provisioned\n * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\n */\n function reprovision(\n address serviceProvider,\n address oldVerifier,\n address newVerifier,\n uint256 nThawRequests\n ) external;\n\n /**\n * @notice Stages a provision parameter update. Note that the change is not effective until the verifier calls\n * {acceptProvisionParameters}.\n * @dev This two step update process prevents the service provider from changing the parameters\n * without the verifier's consent.\n *\n * Emits a {ProvisionParametersStaged} event if at least one of the parameters changed.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for\n * themselves when slashing\n * @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from\n * the provision\n */\n function setProvisionParameters(\n address serviceProvider,\n address verifier,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n ) external;\n\n /**\n * @notice Accepts a staged provision parameter update.\n * @dev Only the provision's verifier can call this function.\n *\n * Emits a {ProvisionParametersSet} event.\n *\n * @param serviceProvider The service provider address\n */\n function acceptProvisionParameters(address serviceProvider) external;\n\n /**\n * @notice Delegate tokens to a provision.\n * @dev Requirements:\n * - `tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n * - The provision must exist.\n *\n * Emits a {TokensDelegated} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param tokens The amount of tokens to delegate\n * @param minSharesOut The minimum amount of shares to accept, slippage protection.\n */\n function delegate(address serviceProvider, address verifier, uint256 tokens, uint256 minSharesOut) external;\n\n /**\n * @notice Add tokens to a delegation pool without issuing shares.\n * Used by data services to pay delegation fees/rewards.\n * Delegators SHOULD NOT call this function.\n *\n * @dev Requirements:\n * - `tokens` cannot be zero.\n * - Caller must have previously approved this contract to pull tokens from their balance.\n *\n * Emits a {TokensToDelegationPoolAdded} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address for which the tokens are provisioned\n * @param tokens The amount of tokens to add to the delegation pool\n */\n function addToDelegationPool(address serviceProvider, address verifier, uint256 tokens) external;\n\n /**\n * @notice Undelegate tokens from a provision and start thawing them.\n * Note that undelegating tokens from a provision is a two step process:\n * - First the tokens are thawed using this function.\n * - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}.\n *\n * Requirements:\n * - `shares` cannot be zero.\n *\n * Emits a {TokensUndelegated} and {ThawRequestCreated} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param shares The amount of shares to undelegate\n * @return The ID of the thaw request\n */\n function undelegate(address serviceProvider, address verifier, uint256 shares) external returns (bytes32);\n\n /**\n * @notice Undelegate tokens from a provision and start thawing them.\n * The tokens will be withdrawable by the `beneficiary` after the thawing period.\n *\n * Note that undelegating tokens from a provision is a two step process:\n * - First the tokens are thawed using this function.\n * - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}.\n *\n * Requirements:\n * - `shares` cannot be zero.\n * - `beneficiary` cannot be the zero address.\n *\n * Emits a {TokensUndelegated} and {ThawRequestCreated} event.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param shares The amount of shares to undelegate\n * @param beneficiary The address where the tokens will be withdrawn after thawing\n * @return The ID of the thaw request\n */\n function undelegate(\n address serviceProvider,\n address verifier,\n uint256 shares,\n address beneficiary\n ) external returns (bytes32);\n\n /**\n * @notice Withdraw undelegated tokens from a provision after thawing.\n * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n * requests in the event that fulfilling all of them results in a gas limit error.\n * @dev If the delegation pool was completely slashed before withdrawing, calling this function will fulfill\n * the thaw requests with an amount equal to zero.\n *\n * Requirements:\n * - Must have previously initiated a thaw request using {undelegate}.\n *\n * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\n */\n function withdrawDelegated(address serviceProvider, address verifier, uint256 nThawRequests) external;\n\n /**\n * @notice Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`.\n * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n * requests in the event that fulfilling all of them results in a gas limit error.\n *\n * Requirements:\n * - Must have previously initiated a thaw request using {undelegate}.\n * - `newServiceProvider` and `newVerifier` must not be the zero address.\n * - `newServiceProvider` must have previously provisioned stake to `newVerifier`.\n *\n * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\n *\n * @param oldServiceProvider The old service provider address\n * @param oldVerifier The old verifier address\n * @param newServiceProvider The address of a new service provider\n * @param newVerifier The address of a new verifier\n * @param minSharesForNewProvider The minimum amount of shares to accept for the new service provider\n * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\n */\n function redelegate(\n address oldServiceProvider,\n address oldVerifier,\n address newServiceProvider,\n address newVerifier,\n uint256 minSharesForNewProvider,\n uint256 nThawRequests\n ) external;\n\n /**\n * @notice Set the fee cut for a verifier on a specific payment type.\n * @dev Emits a {DelegationFeeCutSet} event.\n * @param serviceProvider The service provider address\n * @param verifier The verifier address\n * @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments}\n * @param feeCut The fee cut to set, in PPM\n */\n function setDelegationFeeCut(\n address serviceProvider,\n address verifier,\n IGraphPayments.PaymentTypes paymentType,\n uint256 feeCut\n ) external;\n\n /**\n * @notice Delegate tokens to the subgraph data service provision.\n * This function is for backwards compatibility with the legacy staking contract.\n * It only allows delegating to the subgraph data service and DOES NOT have slippage protection.\n * @dev See {delegate}.\n * @param serviceProvider The service provider address\n * @param tokens The amount of tokens to delegate\n */\n function delegate(address serviceProvider, uint256 tokens) external;\n\n /**\n * @notice Undelegate tokens from the subgraph data service provision and start thawing them.\n * This function is for backwards compatibility with the legacy staking contract.\n * It only allows undelegating from the subgraph data service.\n * @dev See {undelegate}.\n * @param serviceProvider The service provider address\n * @param shares The amount of shares to undelegate\n */\n function undelegate(address serviceProvider, uint256 shares) external;\n\n /**\n * @notice Withdraw undelegated tokens from the subgraph data service provision after thawing.\n * This function is for backwards compatibility with the legacy staking contract.\n * It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in\n * case the caller opts for re-delegating.\n * @dev See {delegate}.\n * @param serviceProvider The service provider address\n * @param newServiceProvider The address of a new service provider, if the delegator wants to re-delegate\n */\n function withdrawDelegated(address serviceProvider, address newServiceProvider) external;\n\n /**\n * @notice Slash a service provider. This can only be called by a verifier to which\n * the provider has provisioned stake, and up to the amount of tokens they have provisioned.\n * If the service provider's stake is not enough, the associated delegation pool might be slashed\n * depending on the value of the global delegation slashing flag.\n *\n * Part of the slashed tokens are sent to the `verifierDestination` as a reward.\n *\n * @dev Requirements:\n * - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider.\n * - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut.\n *\n * Emits a {ProvisionSlashed} and {VerifierTokensSent} events.\n * Emits a {DelegationSlashed} or {DelegationSlashingSkipped} event depending on the global delegation slashing\n * flag.\n *\n * @param serviceProvider The service provider to slash\n * @param tokens The amount of tokens to slash\n * @param tokensVerifier The amount of tokens to transfer instead of burning\n * @param verifierDestination The address to transfer the verifier cut to\n */\n function slash(\n address serviceProvider,\n uint256 tokens,\n uint256 tokensVerifier,\n address verifierDestination\n ) external;\n\n /**\n * @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets).\n * @dev See {provision}.\n *\n * Additional requirements:\n * - The `verifier` must be allowed to be used for locked provisions.\n *\n * @param serviceProvider The service provider address\n * @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\n * @param tokens The amount of tokens that will be locked and slashable\n * @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\n * @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision\n */\n function provisionLocked(\n address serviceProvider,\n address verifier,\n uint256 tokens,\n uint32 maxVerifierCut,\n uint64 thawingPeriod\n ) external;\n\n /**\n * @notice Authorize or unauthorize an address to be an operator for the caller on a verifier.\n *\n * @dev See {setOperator}.\n * Additional requirements:\n * - The `verifier` must be allowed to be used for locked provisions.\n *\n * @param verifier The verifier / data service on which they'll be allowed to operate\n * @param operator Address to authorize or unauthorize\n * @param allowed Whether the operator is authorized or not\n */\n function setOperatorLocked(address verifier, address operator, bool allowed) external;\n\n /**\n * @notice Sets a verifier as a globally allowed verifier for locked provisions.\n * @dev This function can only be called by the contract governor, it's used to maintain\n * a whitelist of verifiers that do not allow the stake from a locked wallet to escape the lock.\n * @dev Emits a {AllowedLockedVerifierSet} event.\n * @param verifier The verifier address\n * @param allowed Whether the verifier is allowed or not\n */\n function setAllowedLockedVerifier(address verifier, bool allowed) external;\n\n /**\n * @notice Set the global delegation slashing flag to true.\n * @dev This function can only be called by the contract governor.\n */\n function setDelegationSlashingEnabled() external;\n\n /**\n * @notice Clear the legacy global thawing period.\n * This signifies the end of the transition period, after which no legacy allocations should be left.\n * @dev This function can only be called by the contract governor.\n * @dev Emits a {ThawingPeriodCleared} event.\n */\n function clearThawingPeriod() external;\n\n /**\n * @notice Sets the global maximum thawing period allowed for provisions.\n * @param maxThawingPeriod The new maximum thawing period, in seconds\n */\n function setMaxThawingPeriod(uint64 maxThawingPeriod) external;\n\n /**\n * @notice Authorize or unauthorize an address to be an operator for the caller on a data service.\n * @dev Emits a {OperatorSet} event.\n * @param verifier The verifier / data service on which they'll be allowed to operate\n * @param operator Address to authorize or unauthorize\n * @param allowed Whether the operator is authorized or not\n */\n function setOperator(address verifier, address operator, bool allowed) external;\n\n /**\n * @notice Check if an operator is authorized for the caller on a specific verifier / data service.\n * @param serviceProvider The service provider on behalf of whom they're claiming to act\n * @param verifier The verifier / data service on which they're claiming to act\n * @param operator The address to check for auth\n * @return Whether the operator is authorized or not\n */\n function isAuthorized(address serviceProvider, address verifier, address operator) external view returns (bool);\n}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\n/* solhint-disable var-name-mixedcase */ // TODO: create custom var-name-mixedcase\n\n/**\n * @title Defines the data types used in the Horizon staking contract\n * @dev In order to preserve storage compatibility some data structures keep deprecated fields.\n * These structures have then two representations, an internal one used by the contract storage and a public one.\n * Getter functions should retrieve internal representations, remove deprecated fields and return the public representation.\n */\ninterface IHorizonStakingTypes {\n /**\n * @notice Represents stake assigned to a specific verifier/data service.\n * Provisioned stake is locked and can be used as economic security by a data service.\n */\n struct Provision {\n // Service provider tokens in the provision (does not include delegated tokens)\n uint256 tokens;\n // Service provider tokens that are being thawed (and will stop being slashable soon)\n uint256 tokensThawing;\n // Shares representing the thawing tokens\n uint256 sharesThawing;\n // Max amount that can be taken by the verifier when slashing, expressed in parts-per-million of the amount slashed\n uint32 maxVerifierCut;\n // Time, in seconds, tokens must thaw before being withdrawn\n uint64 thawingPeriod;\n // Timestamp when the provision was created\n uint64 createdAt;\n // Pending value for `maxVerifierCut`. Verifier needs to accept it before it becomes active.\n uint32 maxVerifierCutPending;\n // Pending value for `thawingPeriod`. Verifier needs to accept it before it becomes active.\n uint64 thawingPeriodPending;\n // Value of the current thawing nonce. Thaw requests with older nonces are invalid.\n uint256 thawingNonce;\n }\n\n /**\n * @notice Public representation of a service provider.\n * @dev See {ServiceProviderInternal} for the actual storage representation\n */\n struct ServiceProvider {\n // Total amount of tokens on the provider stake (only staked by the provider, includes all provisions)\n uint256 tokensStaked;\n // Total amount of tokens locked in provisions (only staked by the provider)\n uint256 tokensProvisioned;\n }\n\n /**\n * @notice Internal representation of a service provider.\n * @dev It contains deprecated fields from the `Indexer` struct to maintain storage compatibility.\n */\n struct ServiceProviderInternal {\n // Total amount of tokens on the provider stake (only staked by the provider, includes all provisions)\n uint256 tokensStaked;\n // (Deprecated) Tokens used in allocations\n uint256 __DEPRECATED_tokensAllocated; // solhint-disable-line graph/leading-underscore\n // (Deprecated) Tokens locked for withdrawal subject to thawing period\n uint256 __DEPRECATED_tokensLocked;\n // (Deprecated) Block when locked tokens can be withdrawn\n uint256 __DEPRECATED_tokensLockedUntil;\n // Total amount of tokens locked in provisions (only staked by the provider)\n uint256 tokensProvisioned;\n }\n\n /**\n * @notice Public representation of a delegation pool.\n * @dev See {DelegationPoolInternal} for the actual storage representation\n */\n struct DelegationPool {\n // Total tokens as pool reserves\n uint256 tokens;\n // Total shares minted in the pool\n uint256 shares;\n // Tokens thawing in the pool\n uint256 tokensThawing;\n // Shares representing the thawing tokens\n uint256 sharesThawing;\n // Value of the current thawing nonce. Thaw requests with older nonces are invalid.\n uint256 thawingNonce;\n }\n\n /**\n * @notice Internal representation of a delegation pool.\n * @dev It contains deprecated fields from the previous version of the `DelegationPool` struct\n * to maintain storage compatibility.\n */\n struct DelegationPoolInternal {\n // (Deprecated) Time, in blocks, an indexer must wait before updating delegation parameters\n uint32 __DEPRECATED_cooldownBlocks;\n // (Deprecated) Percentage of indexing rewards for the service provider, in PPM\n uint32 __DEPRECATED_indexingRewardCut;\n // (Deprecated) Percentage of query fees for the service provider, in PPM\n uint32 __DEPRECATED_queryFeeCut;\n // (Deprecated) Block when the delegation parameters were last updated\n uint256 __DEPRECATED_updatedAtBlock;\n // Total tokens as pool reserves\n uint256 tokens;\n // Total shares minted in the pool\n uint256 shares;\n // Delegation details by delegator\n mapping(address delegator => DelegationInternal delegation) delegators;\n // Tokens thawing in the pool\n uint256 tokensThawing;\n // Shares representing the thawing tokens\n uint256 sharesThawing;\n // Value of the current thawing nonce. Thaw requests with older nonces are invalid.\n uint256 thawingNonce;\n }\n\n /**\n * @notice Public representation of delegation details.\n * @dev See {DelegationInternal} for the actual storage representation\n */\n struct Delegation {\n uint256 shares; // Shares owned by a delegator in the pool\n }\n\n /**\n * @notice Internal representation of delegation details.\n * @dev It contains deprecated fields from the previous version of the `Delegation` struct\n * to maintain storage compatibility.\n */\n struct DelegationInternal {\n // Shares owned by the delegator in the pool\n uint256 shares;\n // (Deprecated) Tokens locked for undelegation\n uint256 __DEPRECATED_tokensLocked;\n // (Deprecated) Epoch when locked tokens can be withdrawn\n uint256 __DEPRECATED_tokensLockedUntil;\n }\n\n /**\n * @notice Details of a stake thawing operation.\n * @dev ThawRequests are stored in linked lists by service provider/delegator,\n * ordered by creation timestamp.\n */\n struct ThawRequest {\n // Shares that represent the tokens being thawed\n uint256 shares;\n // The timestamp when the thawed funds can be removed from the provision\n uint64 thawingUntil;\n // Id of the next thaw request in the linked list\n bytes32 next;\n // Used to invalidate unfulfilled thaw requests\n uint256 thawingNonce;\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"./IGraphPayments.sol\";\n\n/**\n * @title Interface for a payments collector contract as defined by Graph Horizon payments protocol\n * @notice Contracts implementing this interface can be used with the payments protocol. First, a payer must\n * approve the collector to collect payments on their behalf. Only then can payment collection be initiated\n * using the collector contract.\n *\n * @dev It's important to note that it's the collector contract's responsibility to validate the payment\n * request is legitimate.\n */\ninterface IPaymentsCollector {\n /**\n * @notice Emitted when a payment is collected\n * @param paymentType The payment type collected as defined by {IGraphPayments}\n * @param payer The address of the payer\n * @param receiver The address of the receiver\n * @param tokensReceiver The amount of tokens received by the receiver\n * @param dataService The address of the data service\n * @param tokensDataService The amount of tokens received by the data service\n */\n event PaymentCollected(\n IGraphPayments.PaymentTypes indexed paymentType,\n address indexed payer,\n address receiver,\n uint256 tokensReceiver,\n address indexed dataService,\n uint256 tokensDataService\n );\n\n /**\n * @notice Initiate a payment collection through the payments protocol\n * @dev This function should require the caller to present some form of evidence of the payer's debt to\n * the receiver. The collector should validate this evidence and, if valid, collect the payment.\n * Requirements:\n * - The caller must be the data service the RAV was issued to\n * - The signer of the RAV must be authorized to sign for the payer\n *\n * Emits a {PaymentCollected} event\n *\n * @param paymentType The payment type to collect, as defined by {IGraphPayments}\n * @param data Additional data required for the payment collection. Will vary depending on the collector\n * implementation.\n */\n function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external returns (uint256);\n}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"./IGraphPayments.sol\";\n\n/**\n * @title Interface for the {PaymentsEscrow} contract\n * @notice This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT)\n * for payments made through the payments protocol for services provided\n * via a Graph Horizon data service.\n *\n * Payers deposit funds on the escrow, signalling their ability to pay for a service, and only\n * being able to retrieve them after a thawing period. Receivers collect funds from the escrow,\n * provided the payer has authorized them. The payer authorization is delegated to a payment\n * collector contract which implements the {IPaymentsCollector} interface.\n */\ninterface IPaymentsEscrow {\n /// @notice Escrow account for a payer-collector-receiver tuple\n struct EscrowAccount {\n // Total token balance for the payer-collector-receiver tuple\n uint256 balance;\n // Amount of tokens currently being thawed\n uint256 tokensThawing;\n // Timestamp at which thawing period ends (zero if not thawing)\n uint256 thawEndTimestamp;\n }\n\n /// @notice Details for a payer-collector pair\n /// @dev Collectors can be removed only after a thawing period\n struct Collector {\n // Amount of tokens the collector is allowed to collect\n uint256 allowance;\n // Timestamp at which the collector thawing period ends (zero if not thawing)\n uint256 thawEndTimestamp;\n }\n\n /**\n * @notice Emitted when a payer authorizes a collector to collect funds\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param addedAllowance The amount of tokens added to the collector's allowance\n * @param newTotalAllowance The new total allowance after addition\n */\n event AuthorizedCollector(\n address indexed payer,\n address indexed collector,\n uint256 addedAllowance,\n uint256 newTotalAllowance\n );\n\n /**\n * @notice Emitted when a payer thaws a collector\n * @param payer The address of the payer\n * @param collector The address of the collector\n */\n event ThawCollector(address indexed payer, address indexed collector);\n\n /**\n * @notice Emitted when a payer cancels the thawing of a collector\n * @param payer The address of the payer\n * @param collector The address of the collector\n */\n event CancelThawCollector(address indexed payer, address indexed collector);\n\n /**\n * @notice Emitted when a payer revokes a collector authorization.\n * @param payer The address of the payer\n * @param collector The address of the collector\n */\n event RevokeCollector(address indexed payer, address indexed collector);\n\n /**\n * @notice Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens deposited\n */\n event Deposit(address indexed payer, address indexed collector, address indexed receiver, uint256 tokens);\n\n /**\n * @notice Emitted when a payer cancels an escrow thawing\n * @param payer The address of the payer\n * @param receiver The address of the receiver\n */\n event CancelThaw(address indexed payer, address indexed receiver);\n\n /**\n * @notice Emitted when a payer thaws funds from the escrow for a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens being thawed\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n event Thaw(\n address indexed payer,\n address indexed collector,\n address indexed receiver,\n uint256 tokens,\n uint256 thawEndTimestamp\n );\n\n /**\n * @notice Emitted when a payer withdraws funds from the escrow for a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens withdrawn\n */\n event Withdraw(address indexed payer, address indexed collector, address indexed receiver, uint256 tokens);\n\n /**\n * @notice Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens collected\n */\n event EscrowCollected(address indexed payer, address indexed collector, address indexed receiver, uint256 tokens);\n\n // -- Errors --\n\n /**\n * @notice Thrown when a protected function is called and the contract is paused.\n */\n error PaymentsEscrowIsPaused();\n\n /**\n * @notice Thrown when the available balance is insufficient to perform an operation\n * @param balance The current balance\n * @param minBalance The minimum required balance\n */\n error PaymentsEscrowInsufficientBalance(uint256 balance, uint256 minBalance);\n\n /**\n * @notice Thrown when a thawing is expected to be in progress but it is not\n */\n error PaymentsEscrowNotThawing();\n\n /**\n * @notice Thrown when a thawing is still in progress\n * @param currentTimestamp The current timestamp\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n error PaymentsEscrowStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp);\n\n /**\n * @notice Thrown when setting the thawing period to a value greater than the maximum\n * @param thawingPeriod The thawing period\n * @param maxWaitPeriod The maximum wait period\n */\n error PaymentsEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxWaitPeriod);\n\n /**\n * @notice Thrown when a collector has insufficient allowance to collect funds\n * @param allowance The current allowance\n * @param minAllowance The minimum required allowance\n */\n error PaymentsEscrowInsufficientAllowance(uint256 allowance, uint256 minAllowance);\n\n /**\n * @notice Thrown when the contract balance is not consistent with the collection amount\n * @param balanceBefore The balance before the collection\n * @param balanceAfter The balance after the collection\n * @param tokens The amount of tokens collected\n */\n error PaymentsEscrowInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokens);\n\n /**\n * @notice Thrown when operating a zero token amount is not allowed.\n */\n error PaymentsEscrowInvalidZeroTokens();\n\n /**\n * @notice Authorize a collector to collect funds from the payer's escrow\n * @dev This function can only be used to increase the allowance of a collector.\n * To reduce it the authorization must be revoked and a new one must be created.\n *\n * Requirements:\n * - `allowance` must be greater than zero\n *\n * Emits an {AuthorizedCollector} event\n *\n * @param collector The address of the collector\n * @param allowance The amount of tokens to add to the collector's allowance\n */\n function approveCollector(address collector, uint256 allowance) external;\n\n /**\n * @notice Thaw a collector's collector authorization\n * @dev The thawing period is defined by the `REVOKE_COLLECTOR_THAWING_PERIOD` constant\n *\n * Emits a {ThawCollector} event\n *\n * @param collector The address of the collector\n */\n function thawCollector(address collector) external;\n\n /**\n * @notice Cancel a collector's authorization thawing\n * @dev Requirements:\n * - `collector` must be thawing\n *\n * Emits a {CancelThawCollector} event\n *\n * @param collector The address of the collector\n */\n function cancelThawCollector(address collector) external;\n\n /**\n * @notice Revoke a collector's authorization.\n * Removes the collector from the list of authorized collectors.\n * @dev Requirements:\n * - `collector` must have thawed\n *\n * Emits a {RevokeCollector} event\n *\n * @param collector The address of the collector\n */\n function revokeCollector(address collector) external;\n\n /**\n * @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where\n * the payer is the transaction caller.\n * @dev Emits a {Deposit} event\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens to deposit\n */\n function deposit(address collector, address receiver, uint256 tokens) external;\n\n /**\n * @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where\n * the payer can be specified.\n * @dev Emits a {Deposit} event\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens to deposit\n */\n function depositTo(address payer, address collector, address receiver, uint256 tokens) external;\n\n /**\n * @notice Thaw a specific amount of escrow from a payer-collector-receiver's escrow account.\n * The payer is the transaction caller.\n * If `tokens` is zero and funds were already thawing it will cancel the thawing.\n * Note that repeated calls to this function will overwrite the previous thawing amount\n * and reset the thawing period.\n * @dev Requirements:\n * - `tokens` must be less than or equal to the available balance\n *\n * Emits a {Thaw} event. If `tokens` is zero it will emit a {CancelThaw} event.\n *\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens to thaw\n */\n function thaw(address collector, address receiver, uint256 tokens) external;\n\n /**\n * @notice Withdraws all thawed escrow from a payer-collector-receiver's escrow account.\n * The payer is the transaction caller.\n * Note that the withdrawn funds might be less than the thawed amount if there were\n * payment collections in the meantime.\n * @dev Requirements:\n * - Funds must be thawed\n *\n * Emits a {Withdraw} event\n *\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n */\n function withdraw(address collector, address receiver) external;\n\n /**\n * @notice Collects funds from the payer-collector-receiver's escrow and sends them to {GraphPayments} for\n * distribution using the Graph Horizon Payments protocol.\n * The function will revert if there are not enough funds in the escrow.\n * @dev Requirements:\n * - `collector` needs to be authorized by the payer and have enough allowance\n *\n * Emits an {EscrowCollected} event\n *\n * @param paymentType The type of payment being collected as defined in the {IGraphPayments} interface\n * @param payer The address of the payer\n * @param receiver The address of the receiver\n * @param tokens The amount of tokens to collect\n * @param dataService The address of the data service\n * @param tokensDataService The amount of tokens that {GraphPayments} should send to the data service\n */\n function collect(\n IGraphPayments.PaymentTypes paymentType,\n address payer,\n address receiver,\n uint256 tokens,\n address dataService,\n uint256 tokensDataService\n ) external;\n\n /**\n * @notice Get the balance of a payer-collector-receiver tuple\n * @param payer The address of the payer\n * @param collector The address of the collector\n * @param receiver The address of the receiver\n */\n function getBalance(address payer, address collector, address receiver) external view returns (uint256);\n}\n" - }, - "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IPaymentsCollector } from \"./IPaymentsCollector.sol\";\n\n/**\n * @title Interface for the {TAPCollector} contract\n * @dev Implements the {IPaymentCollector} interface as defined by the Graph\n * Horizon payments protocol.\n * @notice Implements a payments collector contract that can be used to collect\n * payments using a TAP RAV (Receipt Aggregate Voucher).\n */\ninterface ITAPCollector is IPaymentsCollector {\n /// @notice Details for a payer-signer pair\n /// @dev Signers can be removed only after a thawing period\n struct PayerAuthorization {\n // Payer the signer is authorized to sign for\n address payer;\n // Timestamp at which thawing period ends (zero if not thawing)\n uint256 thawEndTimestamp;\n }\n\n /// @notice The Receipt Aggregate Voucher (RAV) struct\n struct ReceiptAggregateVoucher {\n // The address of the data service the RAV was issued to\n address dataService;\n // The address of the service provider the RAV was issued to\n address serviceProvider;\n // The RAV timestamp, indicating the latest TAP Receipt in the RAV\n uint64 timestampNs;\n // Total amount owed to the service provider since the beginning of the\n // payer-service provider relationship, including all debt that is already paid for.\n uint128 valueAggregate;\n // Arbitrary metadata to extend functionality if a data service requires it\n bytes metadata;\n }\n\n /// @notice A struct representing a signed RAV\n struct SignedRAV {\n // The RAV\n ReceiptAggregateVoucher rav;\n // Signature - 65 bytes: r (32 Bytes) || s (32 Bytes) || v (1 Byte)\n bytes signature;\n }\n\n /**\n * @notice Emitted when a signer is authorized to sign RAVs for a payer\n * @param payer The address of the payer authorizing the signer\n * @param authorizedSigner The address of the authorized signer\n */\n event SignerAuthorized(address indexed payer, address indexed authorizedSigner);\n\n /**\n * @notice Emitted when a signer is thawed to be removed from the authorized signers list\n * @param payer The address of the payer thawing the signer\n * @param authorizedSigner The address of the signer to thaw\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n event SignerThawing(address indexed payer, address indexed authorizedSigner, uint256 thawEndTimestamp);\n\n /**\n * @dev Emitted when the thawing of a signer is cancelled\n * @param payer The address of the payer cancelling the thawing\n * @param authorizedSigner The address of the authorized signer\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n event SignerThawCanceled(address indexed payer, address indexed authorizedSigner, uint256 thawEndTimestamp);\n\n /**\n * @dev Emitted when a authorized signer has been revoked\n * @param payer The address of the payer revoking the signer\n * @param authorizedSigner The address of the authorized signer\n */\n event SignerRevoked(address indexed payer, address indexed authorizedSigner);\n\n /**\n * @notice Emitted when a RAV is collected\n * @param payer The address of the payer\n * @param dataService The address of the data service\n * @param serviceProvider The address of the service provider\n * @param timestampNs The timestamp of the RAV\n * @param valueAggregate The total amount owed to the service provider\n * @param metadata Arbitrary metadata\n * @param signature The signature of the RAV\n */\n event RAVCollected(\n address indexed payer,\n address indexed dataService,\n address indexed serviceProvider,\n uint64 timestampNs,\n uint128 valueAggregate,\n bytes metadata,\n bytes signature\n );\n\n /**\n * Thrown when the signer is already authorized\n * @param authorizingPayer The address of the payer authorizing the signer\n * @param signer The address of the signer\n */\n error TAPCollectorSignerAlreadyAuthorized(address authorizingPayer, address signer);\n\n /**\n * Thrown when the signer proof deadline is invalid\n * @param proofDeadline The deadline for the proof provided by the signer\n * @param currentTimestamp The current timestamp\n */\n error TAPCollectorInvalidSignerProofDeadline(uint256 proofDeadline, uint256 currentTimestamp);\n\n /**\n * Thrown when the signer proof is invalid\n */\n error TAPCollectorInvalidSignerProof();\n\n /**\n * Thrown when the signer is not authorized by the payer\n * @param payer The address of the payer\n * @param signer The address of the signer\n */\n error TAPCollectorSignerNotAuthorizedByPayer(address payer, address signer);\n\n /**\n * Thrown when the signer is not thawing\n * @param signer The address of the signer\n */\n error TAPCollectorSignerNotThawing(address signer);\n\n /**\n * Thrown when the signer is still thawing\n * @param currentTimestamp The current timestamp\n * @param thawEndTimestamp The timestamp at which the thawing period ends\n */\n error TAPCollectorSignerStillThawing(uint256 currentTimestamp, uint256 thawEndTimestamp);\n\n /**\n * Thrown when the RAV signer is invalid\n */\n error TAPCollectorInvalidRAVSigner();\n\n /**\n * Thrown when the caller is not the data service the RAV was issued to\n * @param caller The address of the caller\n * @param dataService The address of the data service\n */\n error TAPCollectorCallerNotDataService(address caller, address dataService);\n\n /**\n * @notice Thrown when the tokens collected are inconsistent with the collection history\n * Each RAV should have a value greater than the previous one\n * @param tokens The amount of tokens in the RAV\n * @param tokensCollected The amount of tokens already collected\n */\n error TAPCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected);\n\n /**\n * @notice Authorize a signer to sign on behalf of the payer\n * @dev Requirements:\n * - `signer` must not be already authorized\n * - `proofDeadline` must be greater than the current timestamp\n * - `proof` must be a valid signature from the signer being authorized\n *\n * Emits an {SignerAuthorized} event\n * @param signer The addres of the authorized signer\n * @param proofDeadline The deadline for the proof provided by the signer\n * @param proof The proof provided by the signer to be authorized by the payer, consists of (chainID, proof deadline, sender address)\n */\n function authorizeSigner(address signer, uint256 proofDeadline, bytes calldata proof) external;\n\n /**\n * @notice Starts thawing a signer to be removed from the authorized signers list\n * @dev Thawing a signer alerts receivers that signatures from that signer will soon be deemed invalid.\n * Receivers without existing signed receipts or RAVs from this signer should treat them as unauthorized.\n * Those with existing signed documents from this signer should work towards settling their engagements.\n * Once a signer is thawed, they should be viewed as revoked regardless of their revocation status.\n * Requirements:\n * - `signer` must be authorized by the payer calling this function\n *\n * Emits a {SignerThawing} event\n * @param signer The address of the signer to thaw\n */\n function thawSigner(address signer) external;\n\n /**\n * @notice Stops thawing a signer.\n * @dev Requirements:\n * - `signer` must be thawing and authorized by the payer calling this function\n *\n * Emits a {SignerThawCanceled} event\n * @param signer The address of the signer to cancel thawing\n */\n function cancelThawSigner(address signer) external;\n\n /**\n * @notice Revokes a signer from the authorized signers list if thawed.\n * @dev Requirements:\n * - `signer` must be thawed and authorized by the payer calling this function\n *\n * Emits a {SignerRevoked} event\n * @param signer The address of the signer\n */\n function revokeAuthorizedSigner(address signer) external;\n\n /**\n * @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV).\n * @param signedRAV The SignedRAV containing the RAV and its signature.\n * @return The address of the signer.\n */\n function recoverRAVSigner(SignedRAV calldata signedRAV) external view returns (address);\n\n /**\n * @dev Computes the hash of a ReceiptAggregateVoucher (RAV).\n * @param rav The RAV for which to compute the hash.\n * @return The hash of the RAV.\n */\n function encodeRAV(ReceiptAggregateVoucher calldata rav) external view returns (bytes32);\n}\n" - }, - "@graphprotocol/horizon/contracts/libraries/LinkedList.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\n/**\n * @title LinkedList library\n * @notice A library to manage singly linked lists.\n *\n * The library makes no assumptions about the contents of the items, the only\n * requirements on the items are:\n * - they must be represented by a unique bytes32 id\n * - the id of the item must not be bytes32(0)\n * - each item must have a reference to the next item in the list\n * - the list cannot have more than `MAX_ITEMS` items\n *\n * A contract using this library must store:\n * - a LinkedList.List to keep track of the list metadata\n * - a mapping from bytes32 to the item data\n */\nlibrary LinkedList {\n using LinkedList for List;\n\n /// @notice Represents a linked list\n struct List {\n // The head of the list\n bytes32 head;\n // The tail of the list\n bytes32 tail;\n // A nonce, which can optionally be used to generate unique ids\n uint256 nonce;\n // The number of items in the list\n uint256 count;\n }\n\n /// @notice Empty bytes constant\n bytes internal constant NULL_BYTES = bytes(\"\");\n\n /// @notice Maximum amount of items allowed in the list\n uint256 internal constant MAX_ITEMS = 10_000;\n\n /**\n * @notice Thrown when trying to remove an item from an empty list\n */\n error LinkedListEmptyList();\n\n /**\n * @notice Thrown when trying to add an item to a list that has reached the maximum number of elements\n */\n error LinkedListMaxElementsExceeded();\n\n /**\n * @notice Thrown when trying to traverse a list with more iterations than elements\n */\n error LinkedListInvalidIterations();\n\n /**\n * @notice Thrown when trying to add an item with id equal to bytes32(0)\n */\n error LinkedListInvalidZeroId();\n\n /**\n * @notice Adds an item to the list.\n * The item is added to the end of the list.\n * @dev Note that this function will not take care of linking the\n * old tail to the new item. The caller should take care of this.\n * It will also not ensure id uniqueness.\n * @dev There is a maximum number of elements that can be added to the list.\n * @param self The list metadata\n * @param id The id of the item to add\n */\n function addTail(List storage self, bytes32 id) internal {\n require(self.count < MAX_ITEMS, LinkedListMaxElementsExceeded());\n require(id != bytes32(0), LinkedListInvalidZeroId());\n self.tail = id;\n self.nonce += 1;\n if (self.count == 0) self.head = id;\n self.count += 1;\n }\n\n /**\n * @notice Removes an item from the list.\n * The item is removed from the beginning of the list.\n * @param self The list metadata\n * @param getNextItem A function to get the next item in the list. It should take\n * the id of the current item and return the id of the next item.\n * @param deleteItem A function to delete an item. This should delete the item from\n * the contract storage. It takes the id of the item to delete.\n */\n function removeHead(\n List storage self,\n function(bytes32) view returns (bytes32) getNextItem,\n function(bytes32) deleteItem\n ) internal returns (bytes32) {\n require(self.count > 0, LinkedListEmptyList());\n bytes32 nextItem = getNextItem(self.head);\n deleteItem(self.head);\n self.count -= 1;\n self.head = nextItem;\n if (self.count == 0) self.tail = bytes32(0);\n return self.head;\n }\n\n /**\n * @notice Traverses the list and processes each item.\n * It deletes the processed items from both the list and the storage mapping.\n * @param self The list metadata\n * @param getNextItem A function to get the next item in the list. It should take\n * the id of the current item and return the id of the next item.\n * @param processItem A function to process an item. The function should take the id of the item\n * and an accumulator, and return:\n * - a boolean indicating whether the traversal should stop\n * - an accumulator to pass data between iterations\n * @param deleteItem A function to delete an item. This should delete the item from\n * the contract storage. It takes the id of the item to delete.\n * @param processInitAcc The initial accumulator data\n * @param iterations The maximum number of iterations to perform. If 0, the traversal will continue\n * until the end of the list.\n */\n function traverse(\n List storage self,\n function(bytes32) view returns (bytes32) getNextItem,\n function(bytes32, bytes memory) returns (bool, bytes memory) processItem,\n function(bytes32) deleteItem,\n bytes memory processInitAcc,\n uint256 iterations\n ) internal returns (uint256, bytes memory) {\n require(iterations <= self.count, LinkedListInvalidIterations());\n\n uint256 itemCount = 0;\n iterations = (iterations == 0) ? self.count : iterations;\n\n bytes32 cursor = self.head;\n\n while (cursor != bytes32(0) && iterations > 0) {\n (bool shouldBreak, bytes memory acc_) = processItem(cursor, processInitAcc);\n\n if (shouldBreak) break;\n\n processInitAcc = acc_;\n cursor = self.removeHead(getNextItem, deleteItem);\n\n iterations--;\n itemCount++;\n }\n\n return (itemCount, processInitAcc);\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/libraries/MathUtils.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\n/**\n * @title MathUtils Library\n * @notice A collection of functions to perform math operations\n */\nlibrary MathUtils {\n /**\n * @dev Calculates the weighted average of two values pondering each of these\n * values based on configured weights. The contribution of each value N is\n * weightN/(weightA + weightB). The calculation rounds up to ensure the result\n * is always greater than the smallest of the two values.\n * @param valueA The amount for value A\n * @param weightA The weight to use for value A\n * @param valueB The amount for value B\n * @param weightB The weight to use for value B\n */\n function weightedAverageRoundingUp(\n uint256 valueA,\n uint256 weightA,\n uint256 valueB,\n uint256 weightB\n ) internal pure returns (uint256) {\n return ((valueA * weightA) + (valueB * weightB) + (weightA + weightB - 1)) / (weightA + weightB);\n }\n\n /**\n * @dev Returns the minimum of two numbers.\n */\n function min(uint256 x, uint256 y) internal pure returns (uint256) {\n return x <= y ? x : y;\n }\n\n /**\n * @dev Returns the difference between two numbers or zero if negative.\n */\n function diffOrZero(uint256 x, uint256 y) internal pure returns (uint256) {\n return (x > y) ? x - y : 0;\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/libraries/PPMMath.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title PPMMath library\n * @notice A library for handling calculations with parts per million (PPM) amounts.\n */\nlibrary PPMMath {\n /// @notice Maximum value (100%) in parts per million (PPM).\n uint256 internal constant MAX_PPM = 1_000_000;\n\n /**\n * @notice Thrown when a value is expected to be in PPM but is not.\n * @param value The value that is not in PPM.\n */\n error PPMMathInvalidPPM(uint256 value);\n\n /**\n * @notice Thrown when no value in a multiplication is in PPM.\n * @param a The first value in the multiplication.\n * @param b The second value in the multiplication.\n */\n error PPMMathInvalidMulPPM(uint256 a, uint256 b);\n\n /**\n * @notice Multiplies two values, one of which must be in PPM.\n * @param a The first value.\n * @param b The second value.\n * @return The result of the multiplication.\n */\n function mulPPM(uint256 a, uint256 b) internal pure returns (uint256) {\n require(isValidPPM(a) || isValidPPM(b), PPMMathInvalidMulPPM(a, b));\n return (a * b) / MAX_PPM;\n }\n\n /**\n * @notice Multiplies two values, the second one must be in PPM, and rounds up the result.\n * @dev requirements:\n * - The second value must be in PPM.\n * @param a The first value.\n * @param b The second value.\n */\n function mulPPMRoundUp(uint256 a, uint256 b) internal pure returns (uint256) {\n require(isValidPPM(b), PPMMathInvalidPPM(b));\n return a - mulPPM(a, MAX_PPM - b);\n }\n\n /**\n * @notice Checks if a value is in PPM.\n * @dev A valid PPM value is between 0 and MAX_PPM.\n * @param value The value to check.\n */\n function isValidPPM(uint256 value) internal pure returns (bool) {\n return value <= MAX_PPM;\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/libraries/UintRange.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title UintRange library\n * @notice A library for handling range checks on uint256 values.\n */\nlibrary UintRange {\n using UintRange for uint256;\n\n /**\n * @notice Checks if a value is in the range [`min`, `max`].\n * @param value The value to check.\n * @param min The minimum value of the range.\n * @param max The maximum value of the range.\n */\n function isInRange(uint256 value, uint256 min, uint256 max) internal pure returns (bool) {\n return value >= min && value <= max;\n }\n}\n" - }, - "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IGraphToken } from \"@graphprotocol/contracts/contracts/token/IGraphToken.sol\";\nimport { IHorizonStaking } from \"../interfaces/IHorizonStaking.sol\";\nimport { IGraphPayments } from \"../interfaces/IGraphPayments.sol\";\nimport { IPaymentsEscrow } from \"../interfaces/IPaymentsEscrow.sol\";\n\nimport { IController } from \"@graphprotocol/contracts/contracts/governance/IController.sol\";\nimport { IEpochManager } from \"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\";\nimport { IRewardsManager } from \"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\";\nimport { ITokenGateway } from \"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\";\nimport { IGraphProxyAdmin } from \"../interfaces/IGraphProxyAdmin.sol\";\n\nimport { ICuration } from \"@graphprotocol/contracts/contracts/curation/ICuration.sol\";\n\n/**\n * @title GraphDirectory contract\n * @notice This contract is meant to be inherited by other contracts that\n * need to keep track of the addresses in Graph Horizon contracts.\n * It fetches the addresses from the Controller supplied during construction,\n * and uses immutable variables to minimize gas costs.\n */\nabstract contract GraphDirectory {\n // -- Graph Horizon contracts --\n\n /// @notice The Graph Token contract address\n IGraphToken private immutable GRAPH_TOKEN;\n\n /// @notice The Horizon Staking contract address\n IHorizonStaking private immutable GRAPH_STAKING;\n\n /// @notice The Graph Payments contract address\n IGraphPayments private immutable GRAPH_PAYMENTS;\n\n /// @notice The Payments Escrow contract address\n IPaymentsEscrow private immutable GRAPH_PAYMENTS_ESCROW;\n\n // -- Graph periphery contracts --\n\n /// @notice The Graph Controller contract address\n IController private immutable GRAPH_CONTROLLER;\n\n /// @notice The Epoch Manager contract address\n IEpochManager private immutable GRAPH_EPOCH_MANAGER;\n\n /// @notice The Rewards Manager contract address\n IRewardsManager private immutable GRAPH_REWARDS_MANAGER;\n\n /// @notice The Token Gateway contract address\n ITokenGateway private immutable GRAPH_TOKEN_GATEWAY;\n\n /// @notice The Graph Proxy Admin contract address\n IGraphProxyAdmin private immutable GRAPH_PROXY_ADMIN;\n\n // -- Legacy Graph contracts --\n // These are required for backwards compatibility on HorizonStakingExtension\n // TODO: remove these once HorizonStakingExtension is removed\n ICuration private immutable GRAPH_CURATION;\n\n /**\n * @notice Emitted when the GraphDirectory is initialized\n * @param graphToken The Graph Token contract address\n * @param graphStaking The Horizon Staking contract address\n * @param graphPayments The Graph Payments contract address\n * @param graphEscrow The Payments Escrow contract address\n * @param graphController The Graph Controller contract address\n * @param graphEpochManager The Epoch Manager contract address\n * @param graphRewardsManager The Rewards Manager contract address\n * @param graphTokenGateway The Token Gateway contract address\n * @param graphProxyAdmin The Graph Proxy Admin contract address\n * @param graphCuration The Curation contract address\n */\n event GraphDirectoryInitialized(\n address indexed graphToken,\n address indexed graphStaking,\n address graphPayments,\n address graphEscrow,\n address indexed graphController,\n address graphEpochManager,\n address graphRewardsManager,\n address graphTokenGateway,\n address graphProxyAdmin,\n address graphCuration\n );\n\n /**\n * @notice Thrown when either the controller is the zero address or a contract address is not found\n * on the controller\n * @param contractName The name of the contract that was not found, or the controller\n */\n error GraphDirectoryInvalidZeroAddress(bytes contractName);\n\n /**\n * @notice Constructor for the GraphDirectory contract\n * @dev Requirements:\n * - `controller` cannot be zero address\n *\n * Emits a {GraphDirectoryInitialized} event\n *\n * @param controller The address of the Graph Controller contract.\n */\n constructor(address controller) {\n require(controller != address(0), GraphDirectoryInvalidZeroAddress(\"Controller\"));\n\n GRAPH_CONTROLLER = IController(controller);\n GRAPH_TOKEN = IGraphToken(_getContractFromController(\"GraphToken\"));\n GRAPH_STAKING = IHorizonStaking(_getContractFromController(\"Staking\"));\n GRAPH_PAYMENTS = IGraphPayments(_getContractFromController(\"GraphPayments\"));\n GRAPH_PAYMENTS_ESCROW = IPaymentsEscrow(_getContractFromController(\"PaymentsEscrow\"));\n GRAPH_EPOCH_MANAGER = IEpochManager(_getContractFromController(\"EpochManager\"));\n GRAPH_REWARDS_MANAGER = IRewardsManager(_getContractFromController(\"RewardsManager\"));\n GRAPH_TOKEN_GATEWAY = ITokenGateway(_getContractFromController(\"GraphTokenGateway\"));\n GRAPH_PROXY_ADMIN = IGraphProxyAdmin(_getContractFromController(\"GraphProxyAdmin\"));\n GRAPH_CURATION = ICuration(_getContractFromController(\"Curation\"));\n\n emit GraphDirectoryInitialized(\n address(GRAPH_TOKEN),\n address(GRAPH_STAKING),\n address(GRAPH_PAYMENTS),\n address(GRAPH_PAYMENTS_ESCROW),\n address(GRAPH_CONTROLLER),\n address(GRAPH_EPOCH_MANAGER),\n address(GRAPH_REWARDS_MANAGER),\n address(GRAPH_TOKEN_GATEWAY),\n address(GRAPH_PROXY_ADMIN),\n address(GRAPH_CURATION)\n );\n }\n\n /**\n * @notice Get the Graph Token contract\n */\n function _graphToken() internal view returns (IGraphToken) {\n return GRAPH_TOKEN;\n }\n\n /**\n * @notice Get the Horizon Staking contract\n */\n function _graphStaking() internal view returns (IHorizonStaking) {\n return GRAPH_STAKING;\n }\n\n /**\n * @notice Get the Graph Payments contract\n */\n function _graphPayments() internal view returns (IGraphPayments) {\n return GRAPH_PAYMENTS;\n }\n\n /**\n * @notice Get the Payments Escrow contract\n */\n function _graphPaymentsEscrow() internal view returns (IPaymentsEscrow) {\n return GRAPH_PAYMENTS_ESCROW;\n }\n\n /**\n * @notice Get the Graph Controller contract\n */\n function _graphController() internal view returns (IController) {\n return GRAPH_CONTROLLER;\n }\n\n /**\n * @notice Get the Epoch Manager contract\n */\n function _graphEpochManager() internal view returns (IEpochManager) {\n return GRAPH_EPOCH_MANAGER;\n }\n\n /**\n * @notice Get the Rewards Manager contract\n */\n function _graphRewardsManager() internal view returns (IRewardsManager) {\n return GRAPH_REWARDS_MANAGER;\n }\n\n /**\n * @notice Get the Graph Token Gateway contract\n */\n function _graphTokenGateway() internal view returns (ITokenGateway) {\n return GRAPH_TOKEN_GATEWAY;\n }\n\n /**\n * @notice Get the Graph Proxy Admin contract\n */\n function _graphProxyAdmin() internal view returns (IGraphProxyAdmin) {\n return GRAPH_PROXY_ADMIN;\n }\n\n /**\n * @notice Get the Curation contract\n */\n function _graphCuration() internal view returns (ICuration) {\n return GRAPH_CURATION;\n }\n\n /**\n * @notice Get a contract address from the controller\n * @dev Requirements:\n * - The `_contractName` must be registered in the controller\n * @param _contractName The name of the contract to fetch from the controller\n */\n function _getContractFromController(bytes memory _contractName) private view returns (address) {\n address contractAddress = GRAPH_CONTROLLER.getContractProxy(keccak256(_contractName));\n require(contractAddress != address(0), GraphDirectoryInvalidZeroAddress(_contractName));\n return contractAddress;\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\n struct OwnableStorage {\n address _owner;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\n\n function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\n assembly {\n $.slot := OwnableStorageLocation\n }\n }\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n function __Ownable_init(address initialOwner) internal onlyInitializing {\n __Ownable_init_unchained(initialOwner);\n }\n\n function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n OwnableStorage storage $ = _getOwnableStorage();\n return $._owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n OwnableStorage storage $ = _getOwnableStorage();\n address oldOwner = $._owner;\n $._owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Storage of the initializable contract.\n *\n * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n * when using with upgradeable contracts.\n *\n * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n */\n struct InitializableStorage {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n uint64 _initialized;\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool _initializing;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n /**\n * @dev The contract is already initialized.\n */\n error InvalidInitialization();\n\n /**\n * @dev The contract is not initializing.\n */\n error NotInitializing();\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint64 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts.\n *\n * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n * production.\n *\n * Emits an {Initialized} event.\n */\n modifier initializer() {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n // Cache values to avoid duplicated sloads\n bool isTopLevelCall = !$._initializing;\n uint64 initialized = $._initialized;\n\n // Allowed calls:\n // - initialSetup: the contract is not in the initializing state and no previous version was\n // initialized\n // - construction: the contract is initialized at version 1 (no reininitialization) and the\n // current contract is just being deployed\n bool initialSetup = initialized == 0 && isTopLevelCall;\n bool construction = initialized == 1 && address(this).code.length == 0;\n\n if (!initialSetup && !construction) {\n revert InvalidInitialization();\n }\n $._initialized = 1;\n if (isTopLevelCall) {\n $._initializing = true;\n }\n _;\n if (isTopLevelCall) {\n $._initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n * are added through upgrades and that require initialization.\n *\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n * cannot be nested. If one is invoked in the context of another, execution will revert.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n *\n * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n *\n * Emits an {Initialized} event.\n */\n modifier reinitializer(uint64 version) {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing || $._initialized >= version) {\n revert InvalidInitialization();\n }\n $._initialized = version;\n $._initializing = true;\n _;\n $._initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n _checkInitializing();\n _;\n }\n\n /**\n * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n */\n function _checkInitializing() internal view virtual {\n if (!_isInitializing()) {\n revert NotInitializing();\n }\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n *\n * Emits an {Initialized} event the first time it is successfully executed.\n */\n function _disableInitializers() internal virtual {\n // solhint-disable-next-line var-name-mixedcase\n InitializableStorage storage $ = _getInitializableStorage();\n\n if ($._initializing) {\n revert InvalidInitialization();\n }\n if ($._initialized != type(uint64).max) {\n $._initialized = type(uint64).max;\n emit Initialized(type(uint64).max);\n }\n }\n\n /**\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\n */\n function _getInitializedVersion() internal view returns (uint64) {\n return _getInitializableStorage()._initialized;\n }\n\n /**\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n */\n function _isInitializing() internal view returns (bool) {\n return _getInitializableStorage()._initializing;\n }\n\n /**\n * @dev Returns a pointer to the storage namespace.\n */\n // solhint-disable-next-line var-name-mixedcase\n function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n assembly {\n $.slot := INITIALIZABLE_STORAGE\n }\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.20;\n\nimport {MessageHashUtils} from \"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\";\nimport {IERC5267} from \"@openzeppelin/contracts/interfaces/IERC5267.sol\";\nimport {Initializable} from \"../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n */\nabstract contract EIP712Upgradeable is Initializable, IERC5267 {\n bytes32 private constant TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n\n /// @custom:storage-location erc7201:openzeppelin.storage.EIP712\n struct EIP712Storage {\n /// @custom:oz-renamed-from _HASHED_NAME\n bytes32 _hashedName;\n /// @custom:oz-renamed-from _HASHED_VERSION\n bytes32 _hashedVersion;\n\n string _name;\n string _version;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.EIP712\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant EIP712StorageLocation = 0xa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100;\n\n function _getEIP712Storage() private pure returns (EIP712Storage storage $) {\n assembly {\n $.slot := EIP712StorageLocation\n }\n }\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal onlyInitializing {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal onlyInitializing {\n EIP712Storage storage $ = _getEIP712Storage();\n $._name = name;\n $._version = version;\n\n // Reset prior values in storage if upgrading\n $._hashedName = 0;\n $._hashedVersion = 0;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator();\n }\n\n function _buildDomainSeparator() private view returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash(), block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n\n /**\n * @dev See {IERC-5267}.\n */\n function eip712Domain()\n public\n view\n virtual\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n )\n {\n EIP712Storage storage $ = _getEIP712Storage();\n // If the hashed name and version in storage are non-zero, the contract hasn't been properly initialized\n // and the EIP712 domain is not reliable, as it will be missing name and version.\n require($._hashedName == 0 && $._hashedVersion == 0, \"EIP712: Uninitialized\");\n\n return (\n hex\"0f\", // 01111\n _EIP712Name(),\n _EIP712Version(),\n block.chainid,\n address(this),\n bytes32(0),\n new uint256[](0)\n );\n }\n\n /**\n * @dev The name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712Name() internal view virtual returns (string memory) {\n EIP712Storage storage $ = _getEIP712Storage();\n return $._name;\n }\n\n /**\n * @dev The version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712Version() internal view virtual returns (string memory) {\n EIP712Storage storage $ = _getEIP712Storage();\n return $._version;\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: In previous versions this function was virtual. In this version you should override `_EIP712Name` instead.\n */\n function _EIP712NameHash() internal view returns (bytes32) {\n EIP712Storage storage $ = _getEIP712Storage();\n string memory name = _EIP712Name();\n if (bytes(name).length > 0) {\n return keccak256(bytes(name));\n } else {\n // If the name is empty, the contract may have been upgraded without initializing the new storage.\n // We return the name hash in storage if non-zero, otherwise we assume the name is empty by design.\n bytes32 hashedName = $._hashedName;\n if (hashedName != 0) {\n return hashedName;\n } else {\n return keccak256(\"\");\n }\n }\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: In previous versions this function was virtual. In this version you should override `_EIP712Version` instead.\n */\n function _EIP712VersionHash() internal view returns (bytes32) {\n EIP712Storage storage $ = _getEIP712Storage();\n string memory version = _EIP712Version();\n if (bytes(version).length > 0) {\n return keccak256(bytes(version));\n } else {\n // If the version is empty, the contract may have been upgraded without initializing the new storage.\n // We return the version hash in storage if non-zero, otherwise we assume the version is empty by design.\n bytes32 hashedVersion = $._hashedVersion;\n if (hashedVersion != 0) {\n return hashedVersion;\n } else {\n return keccak256(\"\");\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Multicall.sol)\n\npragma solidity ^0.8.20;\n\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\nimport {ContextUpgradeable} from \"./ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides a function to batch together multiple calls in a single external call.\n *\n * Consider any assumption about calldata validation performed by the sender may be violated if it's not especially\n * careful about sending transactions invoking {multicall}. For example, a relay address that filters function\n * selectors won't filter calls nested within a {multicall} operation.\n *\n * NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {_msgSender}).\n * If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data`\n * to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of\n * {_msgSender} are not propagated to subcalls.\n */\nabstract contract MulticallUpgradeable is Initializable, ContextUpgradeable {\n function __Multicall_init() internal onlyInitializing {\n }\n\n function __Multicall_init_unchained() internal onlyInitializing {\n }\n /**\n * @dev Receives and executes a batch of function calls on this contract.\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\n function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {\n bytes memory context = msg.sender == _msgSender()\n ? new bytes(0)\n : msg.data[msg.data.length - _contextSuffixLength():];\n\n results = new bytes[](data.length);\n for (uint256 i = 0; i < data.length; i++) {\n results[i] = Address.functionDelegateCall(address(this), bytes.concat(data[i], context));\n }\n return results;\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract PausableUpgradeable is Initializable, ContextUpgradeable {\n /// @custom:storage-location erc7201:openzeppelin.storage.Pausable\n struct PausableStorage {\n bool _paused;\n }\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Pausable\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300;\n\n function _getPausableStorage() private pure returns (PausableStorage storage $) {\n assembly {\n $.slot := PausableStorageLocation\n }\n }\n\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n /**\n * @dev The operation failed because the contract is paused.\n */\n error EnforcedPause();\n\n /**\n * @dev The operation failed because the contract is not paused.\n */\n error ExpectedPause();\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n function __Pausable_init() internal onlyInitializing {\n __Pausable_init_unchained();\n }\n\n function __Pausable_init_unchained() internal onlyInitializing {\n PausableStorage storage $ = _getPausableStorage();\n $._paused = false;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n _requireNotPaused();\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n _requirePaused();\n _;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n PausableStorage storage $ = _getPausableStorage();\n return $._paused;\n }\n\n /**\n * @dev Throws if the contract is paused.\n */\n function _requireNotPaused() internal view virtual {\n if (paused()) {\n revert EnforcedPause();\n }\n }\n\n /**\n * @dev Throws if the contract is not paused.\n */\n function _requirePaused() internal view virtual {\n if (!paused()) {\n revert ExpectedPause();\n }\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n PausableStorage storage $ = _getPausableStorage();\n $._paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n PausableStorage storage $ = _getPausableStorage();\n $._paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" - }, - "@openzeppelin/contracts/interfaces/IERC5267.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\n\npragma solidity ^0.8.20;\n\ninterface IERC5267 {\n /**\n * @dev MAY be emitted to signal that the domain could have changed.\n */\n event EIP712DomainChanged();\n\n /**\n * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n * signature.\n */\n function eip712Domain()\n external\n view\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n );\n}\n" - }, - "@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" - }, - "@openzeppelin/contracts/utils/Address.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n" - }, - "@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n */\n function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError, bytes32) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n" - }, - "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\n\npragma solidity ^0.8.20;\n\nimport {Strings} from \"../Strings.sol\";\n\n/**\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n *\n * The library provides methods for generating a hash of a message that conforms to the\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n * specifications.\n */\nlibrary MessageHashUtils {\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing a bytes32 `messageHash` with\n * `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n * keccak256, although any bytes32 value can be safely used because the final digest will\n * be re-hashed.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, \"\\x19Ethereum Signed Message:\\n32\") // 32 is the bytes-length of messageHash\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\n }\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing an arbitrary `message` with\n * `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\n return\n keccak256(bytes.concat(\"\\x19Ethereum Signed Message:\\n\", bytes(Strings.toString(message.length)), message));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x00` (data with intended validator).\n *\n * The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n * `validator` address. Then hashing the result.\n *\n * See {ECDSA-recover}.\n */\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(hex\"19_00\", validator, data));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n *\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n * `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n *\n * See {ECDSA-recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, hex\"19_01\")\n mstore(add(ptr, 0x02), domainSeparator)\n mstore(add(ptr, 0x22), structHash)\n digest := keccak256(ptr, 0x42)\n }\n }\n}\n" - }, - "@openzeppelin/contracts/utils/math/Math.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Muldiv operation overflow.\n */\n error MathOverflowedMulDiv();\n\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n return a / b;\n }\n\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (denominator <= prod1) {\n revert MathOverflowedMulDiv();\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n" - }, - "@openzeppelin/contracts/utils/math/SignedMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Strings.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n" - }, - "contracts/DisputeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphToken } from \"@graphprotocol/contracts/contracts/token/IGraphToken.sol\";\nimport { IHorizonStaking } from \"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\";\nimport { IDisputeManager } from \"./interfaces/IDisputeManager.sol\";\nimport { ISubgraphService } from \"./interfaces/ISubgraphService.sol\";\n\nimport { Math } from \"@openzeppelin/contracts/utils/math/Math.sol\";\nimport { TokenUtils } from \"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\";\nimport { PPMMath } from \"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\";\nimport { MathUtils } from \"@graphprotocol/horizon/contracts/libraries/MathUtils.sol\";\nimport { Allocation } from \"./libraries/Allocation.sol\";\nimport { Attestation } from \"./libraries/Attestation.sol\";\n\nimport { OwnableUpgradeable } from \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport { Initializable } from \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport { GraphDirectory } from \"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\";\nimport { DisputeManagerV1Storage } from \"./DisputeManagerStorage.sol\";\nimport { AttestationManager } from \"./utilities/AttestationManager.sol\";\n\n/**\n * @title DisputeManager\n * @notice Provides a way to permissionlessly create disputes for incorrect behavior in the Subgraph Service.\n *\n * There are two types of disputes that can be created: Query disputes and Indexing disputes.\n *\n * Query Disputes:\n * Graph nodes receive queries and return responses with signed receipts called attestations.\n * An attestation can be disputed if the consumer thinks the query response was invalid.\n * Indexers use the derived private key for an allocation to sign attestations.\n *\n * Indexing Disputes:\n * Indexers present a Proof of Indexing (POI) when they close allocations to prove\n * they were indexing a subgraph. The Staking contract emits that proof with the format\n * keccak256(indexer.address, POI).\n * Any fisherman can dispute the validity of a POI by submitting a dispute to this contract\n * along with a deposit.\n *\n * Arbitration:\n * Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated\n * to a EOA or DAO.\n * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\n */\ncontract DisputeManager is\n Initializable,\n OwnableUpgradeable,\n GraphDirectory,\n AttestationManager,\n DisputeManagerV1Storage,\n IDisputeManager\n{\n using TokenUtils for IGraphToken;\n using PPMMath for uint256;\n\n // -- Constants --\n\n // Maximum value for fisherman reward cut in PPM\n uint32 public constant MAX_FISHERMAN_REWARD_CUT = 500000;\n\n // -- Modifiers --\n\n /**\n * @notice Check if the caller is the arbitrator.\n */\n modifier onlyArbitrator() {\n require(msg.sender == arbitrator, DisputeManagerNotArbitrator());\n _;\n }\n\n /**\n * @notice Check if the dispute exists and is pending.\n * @param disputeId The dispute Id\n */\n modifier onlyPendingDispute(bytes32 disputeId) {\n require(isDisputeCreated(disputeId), DisputeManagerInvalidDispute(disputeId));\n require(\n disputes[disputeId].status == IDisputeManager.DisputeStatus.Pending,\n DisputeManagerDisputeNotPending(disputes[disputeId].status)\n );\n _;\n }\n\n /**\n * @notice Check if the caller is the fisherman of the dispute.\n * @param disputeId The dispute Id\n */\n modifier onlyFisherman(bytes32 disputeId) {\n require(isDisputeCreated(disputeId), DisputeManagerInvalidDispute(disputeId));\n require(msg.sender == disputes[disputeId].fisherman, DisputeManagerNotFisherman());\n _;\n }\n\n /**\n * @notice Contract constructor\n * @param controller Address of the controller\n */\n constructor(address controller) GraphDirectory(controller) {\n _disableInitializers();\n }\n\n /**\n * @notice Initialize this contract.\n * @param arbitrator Arbitrator role\n * @param disputePeriod Dispute period in seconds\n * @param disputeDeposit Deposit required to create a Dispute\n * @param fishermanRewardCut_ Percent of slashed funds for fisherman (ppm)\n * @param maxSlashingCut_ Maximum percentage of indexer stake that can be slashed (ppm)\n */\n function initialize(\n address arbitrator,\n uint64 disputePeriod,\n uint256 disputeDeposit,\n uint32 fishermanRewardCut_,\n uint32 maxSlashingCut_\n ) external initializer {\n __Ownable_init(msg.sender);\n __AttestationManager_init();\n\n _setArbitrator(arbitrator);\n _setDisputePeriod(disputePeriod);\n _setDisputeDeposit(disputeDeposit);\n _setFishermanRewardCut(fishermanRewardCut_);\n _setMaxSlashingCut(maxSlashingCut_);\n }\n\n /**\n * @notice Create an indexing dispute for the arbitrator to resolve.\n * The disputes are created in reference to an allocationId and specifically\n * a POI for that allocation.\n * This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens.\n *\n * Requirements:\n * - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n * of tokens from their balance.\n *\n * @param allocationId The allocation to dispute\n * @param poi The Proof of Indexing (POI) being disputed\n */\n function createIndexingDispute(address allocationId, bytes32 poi) external override returns (bytes32) {\n // Get funds from fisherman\n _pullFishermanDeposit();\n\n // Create a dispute\n return _createIndexingDisputeWithAllocation(msg.sender, disputeDeposit, allocationId, poi);\n }\n\n /**\n * @notice Create a query dispute for the arbitrator to resolve.\n * This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens.\n *\n * * Requirements:\n * - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n * of tokens from their balance.\n *\n * @param attestationData Attestation bytes submitted by the fisherman\n */\n function createQueryDispute(bytes calldata attestationData) external override returns (bytes32) {\n // Get funds from fisherman\n _pullFishermanDeposit();\n\n // Create a dispute\n return\n _createQueryDisputeWithAttestation(\n msg.sender,\n disputeDeposit,\n Attestation.parse(attestationData),\n attestationData\n );\n }\n\n /**\n * @notice Create query disputes for two conflicting attestations.\n * A conflicting attestation is a proof presented by two different indexers\n * where for the same request on a subgraph the response is different.\n * For this type of dispute the fisherman is not required to present a deposit\n * as one of the attestation is considered to be right.\n * Two linked disputes will be created and if the arbitrator resolve one, the other\n * one will be automatically resolved.\n * @param attestationData1 First attestation data submitted\n * @param attestationData2 Second attestation data submitted\n * @return DisputeId1, DisputeId2\n */\n function createQueryDisputeConflict(\n bytes calldata attestationData1,\n bytes calldata attestationData2\n ) external override returns (bytes32, bytes32) {\n address fisherman = msg.sender;\n\n // Parse each attestation\n Attestation.State memory attestation1 = Attestation.parse(attestationData1);\n Attestation.State memory attestation2 = Attestation.parse(attestationData2);\n\n // Test that attestations are conflicting\n require(\n Attestation.areConflicting(attestation1, attestation2),\n DisputeManagerNonConflictingAttestations(\n attestation1.requestCID,\n attestation1.responseCID,\n attestation1.subgraphDeploymentId,\n attestation2.requestCID,\n attestation2.responseCID,\n attestation2.subgraphDeploymentId\n )\n );\n\n // Create the disputes\n // The deposit is zero for conflicting attestations\n bytes32 dId1 = _createQueryDisputeWithAttestation(fisherman, 0, attestation1, attestationData1);\n bytes32 dId2 = _createQueryDisputeWithAttestation(fisherman, 0, attestation2, attestationData2);\n\n // Store the linked disputes to be resolved\n disputes[dId1].relatedDisputeId = dId2;\n disputes[dId2].relatedDisputeId = dId1;\n\n // Emit event that links the two created disputes\n emit DisputeLinked(dId1, dId2);\n\n return (dId1, dId2);\n }\n\n /**\n * @notice The arbitrator accepts a dispute as being valid.\n * This function will revert if the indexer is not slashable, whether because it does not have\n * any stake available or the slashing percentage is configured to be zero. In those cases\n * a dispute must be resolved using drawDispute or rejectDispute.\n * @dev Accept a dispute with Id `disputeId`\n * @param disputeId Id of the dispute to be accepted\n * @param tokensSlash Amount of tokens to slash from the indexer\n */\n function acceptDispute(\n bytes32 disputeId,\n uint256 tokensSlash\n ) external override onlyArbitrator onlyPendingDispute(disputeId) {\n Dispute storage dispute = disputes[disputeId];\n\n // store the dispute status\n dispute.status = IDisputeManager.DisputeStatus.Accepted;\n\n // Slash\n uint256 tokensToReward = _slashIndexer(dispute.indexer, tokensSlash, dispute.stakeSnapshot);\n\n // Give the fisherman their reward and their deposit back\n _graphToken().pushTokens(dispute.fisherman, tokensToReward + dispute.deposit);\n\n if (_isDisputeInConflict(dispute)) {\n rejectDispute(dispute.relatedDisputeId);\n }\n\n emit DisputeAccepted(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit + tokensToReward);\n }\n\n /**\n * @notice The arbitrator draws dispute.\n * @dev Ignore a dispute with Id `disputeId`\n * @param disputeId Id of the dispute to be disregarded\n */\n function drawDispute(bytes32 disputeId) external override onlyArbitrator onlyPendingDispute(disputeId) {\n Dispute storage dispute = disputes[disputeId];\n\n // Return deposit to the fisherman if any\n if (dispute.deposit > 0) {\n _graphToken().pushTokens(dispute.fisherman, dispute.deposit);\n }\n\n // resolve related dispute if any\n _drawDisputeInConflict(dispute);\n\n // store dispute status\n dispute.status = IDisputeManager.DisputeStatus.Drawn;\n\n emit DisputeDrawn(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit);\n }\n\n /**\n * @notice Once the dispute period ends, if the dispute status remains Pending,\n * the fisherman can cancel the dispute and get back their initial deposit.\n * @dev Cancel a dispute with Id `disputeId`\n * @param disputeId Id of the dispute to be cancelled\n */\n function cancelDispute(bytes32 disputeId) external override onlyFisherman(disputeId) onlyPendingDispute(disputeId) {\n Dispute storage dispute = disputes[disputeId];\n\n // Check if dispute period has finished\n require(dispute.createdAt + disputePeriod < block.timestamp, DisputeManagerDisputePeriodNotFinished());\n\n // Return deposit to the fisherman if any\n if (dispute.deposit > 0) {\n _graphToken().pushTokens(dispute.fisherman, dispute.deposit);\n }\n\n // resolve related dispute if any\n _cancelDisputeInConflict(dispute);\n\n // store dispute status\n dispute.status = IDisputeManager.DisputeStatus.Cancelled;\n\n emit DisputeCancelled(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit);\n }\n\n /**\n * @notice Set the arbitrator address.\n * @dev Update the arbitrator to `_arbitrator`\n * @param arbitrator The address of the arbitration contract or party\n */\n function setArbitrator(address arbitrator) external override onlyOwner {\n _setArbitrator(arbitrator);\n }\n\n /**\n * @notice Set the dispute period.\n * @dev Update the dispute period to `_disputePeriod` in seconds\n * @param disputePeriod Dispute period in seconds\n */\n function setDisputePeriod(uint64 disputePeriod) external override onlyOwner {\n _setDisputePeriod(disputePeriod);\n }\n\n /**\n * @notice Set the dispute deposit required to create a dispute.\n * @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens\n * @param disputeDeposit The dispute deposit in Graph Tokens\n */\n function setDisputeDeposit(uint256 disputeDeposit) external override onlyOwner {\n _setDisputeDeposit(disputeDeposit);\n }\n\n /**\n * @notice Set the percent reward that the fisherman gets when slashing occurs.\n * @dev Update the reward percentage to `_percentage`\n * @param fishermanRewardCut_ Reward as a percentage of indexer stake\n */\n function setFishermanRewardCut(uint32 fishermanRewardCut_) external override onlyOwner {\n _setFishermanRewardCut(fishermanRewardCut_);\n }\n\n /**\n * @notice Set the maximum percentage that can be used for slashing indexers.\n * @param maxSlashingCut_ Max percentage slashing for disputes\n */\n function setMaxSlashingCut(uint32 maxSlashingCut_) external override onlyOwner {\n _setMaxSlashingCut(maxSlashingCut_);\n }\n\n /**\n * @notice Set the subgraph service address.\n * @dev Update the subgraph service to `_subgraphService`\n * @param subgraphService The address of the subgraph service contract\n */\n function setSubgraphService(address subgraphService) external override onlyOwner {\n _setSubgraphService(subgraphService);\n }\n\n /**\n * @notice Get the message hash that a indexer used to sign the receipt.\n * Encodes a receipt using a domain separator, as described on\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\n * @dev Return the message hash used to sign the receipt\n * @param receipt Receipt returned by indexer and submitted by fisherman\n * @return Message hash used to sign the receipt\n */\n function encodeReceipt(Attestation.Receipt memory receipt) external view override returns (bytes32) {\n return _encodeReceipt(receipt);\n }\n\n /**\n * @notice Get the verifier cut.\n * @return Verifier cut in percentage (ppm)\n */\n function getVerifierCut() external view override returns (uint32) {\n return fishermanRewardCut;\n }\n\n /**\n * @notice Get the dispute period.\n * @return Dispute period in seconds\n */\n function getDisputePeriod() external view override returns (uint64) {\n return disputePeriod;\n }\n\n /**\n * @notice Get the stake snapshot for an indexer.\n * @param indexer The indexer address\n */\n function getStakeSnapshot(address indexer) external view override returns (uint256) {\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService));\n return _getStakeSnapshot(indexer, provision.tokens);\n }\n\n /**\n * @notice Checks if two attestations are conflicting.\n * @param attestation1 The first attestation\n * @param attestation2 The second attestation\n */\n function areConflictingAttestations(\n Attestation.State memory attestation1,\n Attestation.State memory attestation2\n ) external pure override returns (bool) {\n return Attestation.areConflicting(attestation1, attestation2);\n }\n\n /**\n * @notice The arbitrator rejects a dispute as being invalid.\n * @dev Reject a dispute with Id `disputeId`\n * @param disputeId Id of the dispute to be rejected\n */\n function rejectDispute(bytes32 disputeId) public override onlyArbitrator onlyPendingDispute(disputeId) {\n Dispute storage dispute = disputes[disputeId];\n\n // store dispute status\n dispute.status = IDisputeManager.DisputeStatus.Rejected;\n\n // For conflicting disputes, the related dispute must be accepted\n require(\n !_isDisputeInConflict(dispute),\n DisputeManagerMustAcceptRelatedDispute(disputeId, dispute.relatedDisputeId)\n );\n\n // Burn the fisherman's deposit\n _graphToken().burnTokens(dispute.deposit);\n\n emit DisputeRejected(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit);\n }\n\n /**\n * @notice Returns the indexer that signed an attestation.\n * @param attestation Attestation\n * @return indexer address\n */\n function getAttestationIndexer(Attestation.State memory attestation) public view returns (address) {\n // Get attestation signer. Indexers signs with the allocationId\n address allocationId = _recoverSigner(attestation);\n\n Allocation.State memory alloc = subgraphService.getAllocation(allocationId);\n require(alloc.indexer != address(0), DisputeManagerIndexerNotFound(allocationId));\n require(\n alloc.subgraphDeploymentId == attestation.subgraphDeploymentId,\n DisputeManagerNonMatchingSubgraphDeployment(alloc.subgraphDeploymentId, attestation.subgraphDeploymentId)\n );\n return alloc.indexer;\n }\n\n /**\n * @notice Return whether a dispute exists or not.\n * @dev Return if dispute with Id `disputeId` exists\n * @param disputeId True if dispute already exists\n */\n function isDisputeCreated(bytes32 disputeId) public view override returns (bool) {\n return disputes[disputeId].status != DisputeStatus.Null;\n }\n\n /**\n * @notice Create a query dispute passing the parsed attestation.\n * To be used in createQueryDispute() and createQueryDisputeConflict()\n * to avoid calling parseAttestation() multiple times\n * `attestationData` is only passed to be emitted\n * @param _fisherman Creator of dispute\n * @param _deposit Amount of tokens staked as deposit\n * @param _attestation Attestation struct parsed from bytes\n * @param _attestationData Attestation bytes submitted by the fisherman\n * @return DisputeId\n */\n function _createQueryDisputeWithAttestation(\n address _fisherman,\n uint256 _deposit,\n Attestation.State memory _attestation,\n bytes memory _attestationData\n ) private returns (bytes32) {\n // Get the indexer that signed the attestation\n address indexer = getAttestationIndexer(_attestation);\n\n // The indexer is disputable\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService));\n require(provision.tokens != 0, DisputeManagerZeroTokens());\n\n // Create a disputeId\n bytes32 disputeId = keccak256(\n abi.encodePacked(\n _attestation.requestCID,\n _attestation.responseCID,\n _attestation.subgraphDeploymentId,\n indexer,\n _fisherman\n )\n );\n\n // Only one dispute for a (indexer, subgraphDeploymentId) at a time\n require(!isDisputeCreated(disputeId), DisputeManagerDisputeAlreadyCreated(disputeId));\n\n // Store dispute\n uint256 stakeSnapshot = _getStakeSnapshot(indexer, provision.tokens);\n disputes[disputeId] = Dispute(\n indexer,\n _fisherman,\n _deposit,\n 0, // no related dispute,\n DisputeType.QueryDispute,\n IDisputeManager.DisputeStatus.Pending,\n block.timestamp,\n stakeSnapshot\n );\n\n emit QueryDisputeCreated(\n disputeId,\n indexer,\n _fisherman,\n _deposit,\n _attestation.subgraphDeploymentId,\n _attestationData,\n stakeSnapshot\n );\n\n return disputeId;\n }\n\n /**\n * @notice Create indexing dispute internal function.\n * @param _fisherman The fisherman creating the dispute\n * @param _deposit Amount of tokens staked as deposit\n * @param _allocationId Allocation disputed\n * @param _poi The POI being disputed\n */\n function _createIndexingDisputeWithAllocation(\n address _fisherman,\n uint256 _deposit,\n address _allocationId,\n bytes32 _poi\n ) private returns (bytes32) {\n // Create a disputeId\n bytes32 disputeId = keccak256(abi.encodePacked(_allocationId, _poi));\n\n // Only one dispute for an allocationId at a time\n require(!isDisputeCreated(disputeId), DisputeManagerDisputeAlreadyCreated(disputeId));\n\n // Allocation must exist\n Allocation.State memory alloc = subgraphService.getAllocation(_allocationId);\n address indexer = alloc.indexer;\n require(indexer != address(0), DisputeManagerIndexerNotFound(_allocationId));\n\n // The indexer must be disputable\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService));\n require(provision.tokens != 0, DisputeManagerZeroTokens());\n\n // Store dispute\n uint256 stakeSnapshot = _getStakeSnapshot(indexer, provision.tokens);\n disputes[disputeId] = Dispute(\n alloc.indexer,\n _fisherman,\n _deposit,\n 0,\n DisputeType.IndexingDispute,\n IDisputeManager.DisputeStatus.Pending,\n block.timestamp,\n stakeSnapshot\n );\n\n emit IndexingDisputeCreated(disputeId, alloc.indexer, _fisherman, _deposit, _allocationId, _poi, stakeSnapshot);\n\n return disputeId;\n }\n\n /**\n * @notice Draw the conflicting dispute if there is any for the one passed to this function.\n * @param _dispute Dispute\n * @return True if resolved\n */\n function _drawDisputeInConflict(Dispute memory _dispute) private returns (bool) {\n if (_isDisputeInConflict(_dispute)) {\n bytes32 relatedDisputeId = _dispute.relatedDisputeId;\n Dispute storage relatedDispute = disputes[relatedDisputeId];\n relatedDispute.status = IDisputeManager.DisputeStatus.Drawn;\n return true;\n }\n return false;\n }\n\n /**\n * @notice Cancel the conflicting dispute if there is any for the one passed to this function.\n * @param _dispute Dispute\n * @return True if cancelled\n */\n function _cancelDisputeInConflict(Dispute memory _dispute) private returns (bool) {\n if (_isDisputeInConflict(_dispute)) {\n bytes32 relatedDisputeId = _dispute.relatedDisputeId;\n Dispute storage relatedDispute = disputes[relatedDisputeId];\n relatedDispute.status = IDisputeManager.DisputeStatus.Cancelled;\n return true;\n }\n return false;\n }\n\n /**\n * @notice Pull `disputeDeposit` from fisherman account.\n */\n function _pullFishermanDeposit() private {\n // Transfer tokens to deposit from fisherman to this contract\n _graphToken().pullTokens(msg.sender, disputeDeposit);\n }\n\n /**\n * @notice Make the subgraph service contract slash the indexer and reward the fisherman.\n * Give the fisherman a reward equal to the fishermanRewardPercentage of slashed amount\n * @param _indexer Address of the indexer\n * @param _tokensSlash Amount of tokens to slash from the indexer\n * @param _tokensStakeSnapshot Snapshot of the indexer's stake at the time of the dispute creation\n */\n function _slashIndexer(\n address _indexer,\n uint256 _tokensSlash,\n uint256 _tokensStakeSnapshot\n ) private returns (uint256) {\n // Get slashable amount for indexer\n IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_indexer, address(subgraphService));\n\n // Ensure slash amount is within the cap\n uint256 maxTokensSlash = _tokensStakeSnapshot.mulPPM(maxSlashingCut);\n require(\n _tokensSlash != 0 && _tokensSlash <= maxTokensSlash,\n DisputeManagerInvalidTokensSlash(_tokensSlash, maxTokensSlash)\n );\n\n // Rewards amount can only be extracted from service provider tokens so\n // we grab the minimum between the slash amount and indexer's tokens\n uint256 maxRewardableTokens = Math.min(_tokensSlash, provision.tokens);\n uint256 tokensRewards = uint256(fishermanRewardCut).mulPPM(maxRewardableTokens);\n\n subgraphService.slash(_indexer, abi.encode(_tokensSlash, tokensRewards));\n return tokensRewards;\n }\n\n /**\n * @notice Internal: Set the arbitrator address.\n * @dev Update the arbitrator to `_arbitrator`\n * @param _arbitrator The address of the arbitration contract or party\n */\n function _setArbitrator(address _arbitrator) private {\n require(_arbitrator != address(0), DisputeManagerInvalidZeroAddress());\n arbitrator = _arbitrator;\n emit ArbitratorSet(_arbitrator);\n }\n\n /**\n * @notice Internal: Set the dispute period.\n * @dev Update the dispute period to `_disputePeriod` in seconds\n * @param _disputePeriod Dispute period in seconds\n */\n function _setDisputePeriod(uint64 _disputePeriod) private {\n require(_disputePeriod != 0, DisputeManagerDisputePeriodZero());\n disputePeriod = _disputePeriod;\n emit DisputePeriodSet(_disputePeriod);\n }\n\n /**\n * @notice Internal: Set the dispute deposit required to create a dispute.\n * @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens\n * @param _disputeDeposit The dispute deposit in Graph Tokens\n */\n function _setDisputeDeposit(uint256 _disputeDeposit) private {\n require(_disputeDeposit != 0, DisputeManagerInvalidDisputeDeposit(_disputeDeposit));\n disputeDeposit = _disputeDeposit;\n emit DisputeDepositSet(_disputeDeposit);\n }\n\n /**\n * @notice Internal: Set the percent reward that the fisherman gets when slashing occurs.\n * @dev Update the reward percentage to `_percentage`\n * @param _fishermanRewardCut Reward as a percentage of indexer stake\n */\n function _setFishermanRewardCut(uint32 _fishermanRewardCut) private {\n require(\n _fishermanRewardCut <= MAX_FISHERMAN_REWARD_CUT,\n DisputeManagerInvalidFishermanReward(_fishermanRewardCut)\n );\n fishermanRewardCut = _fishermanRewardCut;\n emit FishermanRewardCutSet(_fishermanRewardCut);\n }\n\n /**\n * @notice Internal: Set the maximum percentage that can be used for slashing indexers.\n * @param _maxSlashingCut Max percentage slashing for disputes\n */\n function _setMaxSlashingCut(uint32 _maxSlashingCut) private {\n // Must be within 0% to 100% (inclusive)\n require(PPMMath.isValidPPM(_maxSlashingCut), DisputeManagerInvalidMaxSlashingCut(_maxSlashingCut));\n maxSlashingCut = _maxSlashingCut;\n emit MaxSlashingCutSet(maxSlashingCut);\n }\n\n /**\n * @notice Internal: Set the subgraph service address.\n * @dev Update the subgraph service to `_subgraphService`\n * @param _subgraphService The address of the subgraph service contract\n */\n function _setSubgraphService(address _subgraphService) private {\n require(_subgraphService != address(0), DisputeManagerInvalidZeroAddress());\n subgraphService = ISubgraphService(_subgraphService);\n emit SubgraphServiceSet(_subgraphService);\n }\n\n /**\n * @notice Returns whether the dispute is for a conflicting attestation or not.\n * @param _dispute Dispute\n * @return True conflicting attestation dispute\n */\n function _isDisputeInConflict(Dispute memory _dispute) private view returns (bool) {\n bytes32 relatedId = _dispute.relatedDisputeId;\n // this is so the check returns false when rejecting the related dispute.\n return relatedId != 0 && disputes[relatedId].status == IDisputeManager.DisputeStatus.Pending;\n }\n\n /**\n * @notice Get the total stake snapshot for and indexer.\n * @dev A few considerations:\n * - We include both indexer and delegators stake.\n * - Thawing stake is not excluded from the snapshot.\n * - Delegators stake is capped at the delegation ratio to prevent delegators from inflating the snapshot\n * to increase the indexer slash amount.\n * @param _indexer Indexer address\n * @param _indexerStake Indexer's stake\n * @return Total stake snapshot\n */\n function _getStakeSnapshot(address _indexer, uint256 _indexerStake) private view returns (uint256) {\n uint256 delegatorsStake = _graphStaking().getDelegationPool(_indexer, address(subgraphService)).tokens;\n uint256 delegatorsStakeMax = _indexerStake * uint256(subgraphService.getDelegationRatio());\n uint256 stakeSnapshot = _indexerStake + MathUtils.min(delegatorsStake, delegatorsStakeMax);\n return stakeSnapshot;\n }\n}\n" - }, - "contracts/DisputeManagerStorage.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { IDisputeManager } from \"./interfaces/IDisputeManager.sol\";\nimport { ISubgraphService } from \"./interfaces/ISubgraphService.sol\";\n\nabstract contract DisputeManagerV1Storage {\n /// @notice The Subgraph Service contract address\n ISubgraphService public subgraphService;\n\n /// @notice The arbitrator is solely in control of arbitrating disputes\n address public arbitrator;\n\n /// @notice dispute period in seconds\n uint64 public disputePeriod;\n\n /// @notice Deposit required to create a Dispute\n uint256 public disputeDeposit;\n\n /// @notice Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM.\n uint32 public fishermanRewardCut;\n\n /// @notice Maximum percentage of indexer stake that can be slashed on a dispute. In PPM.\n uint32 public maxSlashingCut;\n\n /// @notice List of disputes created\n mapping(bytes32 disputeId => IDisputeManager.Dispute dispute) public disputes;\n}\n" - }, - "contracts/interfaces/IDisputeManager.sol": { - "content": "// SPDX-License-Identifier: GPL-2.0-or-later\n\npragma solidity 0.8.27;\n\nimport { Attestation } from \"../libraries/Attestation.sol\";\n\ninterface IDisputeManager {\n /// @notice Types of disputes that can be created\n enum DisputeType {\n Null,\n IndexingDispute,\n QueryDispute\n }\n\n /// @notice Status of a dispute\n enum DisputeStatus {\n Null,\n Accepted,\n Rejected,\n Drawn,\n Pending,\n Cancelled\n }\n\n /// @notice Disputes contain info necessary for the Arbitrator to verify and resolve\n struct Dispute {\n // Indexer that is being disputed\n address indexer;\n // Fisherman that created the dispute\n address fisherman;\n // Amount of tokens deposited by the fisherman\n uint256 deposit;\n // Link to a related dispute, used when creating dispute via conflicting attestations\n bytes32 relatedDisputeId;\n // Type of dispute\n DisputeType disputeType;\n // Status of the dispute\n DisputeStatus status;\n // Timestamp when the dispute was created\n uint256 createdAt;\n // Stake snapshot of the indexer at the time of the dispute (includes delegation up to the delegation ratio)\n uint256 stakeSnapshot;\n }\n\n /**\n * @notice Emitted when arbitrator is set.\n * @param arbitrator The address of the arbitrator.\n */\n event ArbitratorSet(address indexed arbitrator);\n\n /**\n * @notice Emitted when dispute period is set.\n * @param disputePeriod The dispute period in seconds.\n */\n event DisputePeriodSet(uint64 disputePeriod);\n\n /**\n * @notice Emitted when dispute deposit is set.\n * @param disputeDeposit The dispute deposit required to create a dispute.\n */\n event DisputeDepositSet(uint256 disputeDeposit);\n\n /**\n * @notice Emitted when max slashing cut is set.\n * @param maxSlashingCut The maximum slashing cut that can be set.\n */\n event MaxSlashingCutSet(uint32 maxSlashingCut);\n\n /**\n * @notice Emitted when fisherman reward cut is set.\n * @param fishermanRewardCut The fisherman reward cut.\n */\n event FishermanRewardCutSet(uint32 fishermanRewardCut);\n\n /**\n * @notice Emitted when subgraph service is set.\n * @param subgraphService The address of the subgraph service.\n */\n event SubgraphServiceSet(address indexed subgraphService);\n\n /**\n * @dev Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer`\n * by `fisherman`.\n * The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted.\n */\n event QueryDisputeCreated(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens,\n bytes32 subgraphDeploymentId,\n bytes attestation,\n uint256 stakeSnapshot\n );\n\n /**\n * @dev Emitted when an indexing dispute is created for `allocationId` and `indexer`\n * by `fisherman`.\n * The event emits the amount of `tokens` deposited by the fisherman.\n */\n event IndexingDisputeCreated(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens,\n address allocationId,\n bytes32 poi,\n uint256 stakeSnapshot\n );\n\n /**\n * @dev Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`.\n * The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward.\n */\n event DisputeAccepted(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens\n );\n\n /**\n * @dev Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`.\n * The event emits the amount `tokens` burned from the fisherman deposit.\n */\n event DisputeRejected(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens\n );\n\n /**\n * @dev Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`.\n * The event emits the amount `tokens` used as deposit and returned to the fisherman.\n */\n event DisputeDrawn(bytes32 indexed disputeId, address indexed indexer, address indexed fisherman, uint256 tokens);\n\n /**\n * @dev Emitted when two disputes are in conflict to link them.\n * This event will be emitted after each DisputeCreated event is emitted\n * for each of the individual disputes.\n */\n event DisputeLinked(bytes32 indexed disputeId1, bytes32 indexed disputeId2);\n\n /**\n * @dev Emitted when a dispute is cancelled by the fisherman.\n * The event emits the amount `tokens` returned to the fisherman.\n */\n event DisputeCancelled(\n bytes32 indexed disputeId,\n address indexed indexer,\n address indexed fisherman,\n uint256 tokens\n );\n\n // -- Errors --\n\n error DisputeManagerNotArbitrator();\n error DisputeManagerNotFisherman();\n error DisputeManagerInvalidZeroAddress();\n error DisputeManagerDisputePeriodZero();\n error DisputeManagerZeroTokens();\n error DisputeManagerInvalidDispute(bytes32 disputeId);\n error DisputeManagerInvalidDisputeDeposit(uint256 disputeDeposit);\n error DisputeManagerInvalidFishermanReward(uint32 cut);\n error DisputeManagerInvalidMaxSlashingCut(uint32 maxSlashingCut);\n error DisputeManagerInvalidTokensSlash(uint256 tokensSlash, uint256 maxTokensSlash);\n error DisputeManagerDisputeNotPending(IDisputeManager.DisputeStatus status);\n error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId);\n error DisputeManagerDisputePeriodNotFinished();\n error DisputeManagerMustAcceptRelatedDispute(bytes32 disputeId, bytes32 relatedDisputeId);\n error DisputeManagerIndexerNotFound(address allocationId);\n error DisputeManagerNonMatchingSubgraphDeployment(bytes32 subgraphDeploymentId1, bytes32 subgraphDeploymentId2);\n error DisputeManagerNonConflictingAttestations(\n bytes32 requestCID1,\n bytes32 responseCID1,\n bytes32 subgraphDeploymentId1,\n bytes32 requestCID2,\n bytes32 responseCID2,\n bytes32 subgraphDeploymentId2\n );\n\n function setDisputePeriod(uint64 disputePeriod) external;\n\n function setArbitrator(address arbitrator) external;\n\n function setDisputeDeposit(uint256 disputeDeposit) external;\n\n function setFishermanRewardCut(uint32 cut) external;\n\n function setMaxSlashingCut(uint32 maxCut) external;\n\n // -- Dispute --\n\n function createQueryDispute(bytes calldata attestationData) external returns (bytes32);\n\n function createQueryDisputeConflict(\n bytes calldata attestationData1,\n bytes calldata attestationData2\n ) external returns (bytes32, bytes32);\n\n function createIndexingDispute(address allocationId, bytes32 poi) external returns (bytes32);\n\n function acceptDispute(bytes32 disputeId, uint256 tokensSlash) external;\n\n function rejectDispute(bytes32 disputeId) external;\n\n function drawDispute(bytes32 disputeId) external;\n\n function cancelDispute(bytes32 disputeId) external;\n\n function setSubgraphService(address subgraphService) external;\n\n // -- Getters --\n\n function getVerifierCut() external view returns (uint32);\n\n function getDisputePeriod() external view returns (uint64);\n\n function isDisputeCreated(bytes32 disputeId) external view returns (bool);\n\n function encodeReceipt(Attestation.Receipt memory receipt) external view returns (bytes32);\n\n function getAttestationIndexer(Attestation.State memory attestation) external view returns (address);\n\n function getStakeSnapshot(address indexer) external view returns (uint256);\n\n function areConflictingAttestations(\n Attestation.State memory attestation1,\n Attestation.State memory attestation2\n ) external pure returns (bool);\n}\n" - }, - "contracts/interfaces/ISubgraphService.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDataServiceFees } from \"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\";\nimport { IGraphPayments } from \"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\";\n\nimport { Allocation } from \"../libraries/Allocation.sol\";\nimport { LegacyAllocation } from \"../libraries/LegacyAllocation.sol\";\n\n/**\n * @title Interface for the {SubgraphService} contract\n * @dev This interface extends {IDataServiceFees} and {IDataService}.\n * @notice The Subgraph Service is a data service built on top of Graph Horizon that supports the use case of\n * subgraph indexing and querying. The {SubgraphService} contract implements the flows described in the Data\n * Service framework to allow indexers to register as subgraph service providers, create allocations to signal\n * their commitment to index a subgraph, and collect fees for indexing and querying services.\n */\ninterface ISubgraphService is IDataServiceFees {\n /// @notice Contains details for each indexer\n struct Indexer {\n // Timestamp when the indexer registered\n uint256 registeredAt;\n // The URL where the indexer can be reached at for queries\n string url;\n // The indexer's geo location, expressed as a geo hash\n string geoHash;\n }\n\n /**\n * @notice Emitted when a subgraph service collects query fees from Graph Payments\n * @param serviceProvider The address of the service provider\n * @param tokensCollected The amount of tokens collected\n * @param tokensCurators The amount of tokens curators receive\n */\n event QueryFeesCollected(address indexed serviceProvider, uint256 tokensCollected, uint256 tokensCurators);\n\n /**\n * @notice Emitted when the stake to fees ratio is set.\n * @param ratio The stake to fees ratio\n */\n event StakeToFeesRatioSet(uint256 ratio);\n\n /**\n * @notice Emitted when curator cuts are set\n * @param curationCut The curation cut\n */\n event CurationCutSet(uint256 curationCut);\n\n /**\n * Thrown when trying to set a curation cut that is not a valid PPM value\n * @param curationCut The curation cut value\n */\n error SubgraphServiceInvalidCurationCut(uint256 curationCut);\n\n /**\n * @notice Thrown when an indexer tries to register with an empty URL\n */\n error SubgraphServiceEmptyUrl();\n\n /**\n * @notice Thrown when an indexer tries to register with an empty geohash\n */\n error SubgraphServiceEmptyGeohash();\n\n /**\n * @notice Thrown when an indexer tries to register but they are already registered\n */\n error SubgraphServiceIndexerAlreadyRegistered();\n\n /**\n * @notice Thrown when an indexer tries to perform an operation but they are not registered\n * @param indexer The address of the indexer that is not registered\n */\n error SubgraphServiceIndexerNotRegistered(address indexer);\n\n /**\n * @notice Thrown when an indexer tries to collect fees for an unsupported payment type\n * @param paymentType The payment type that is not supported\n */\n error SubgraphServiceInvalidPaymentType(IGraphPayments.PaymentTypes paymentType);\n\n /**\n * @notice Thrown when the contract GRT balance is inconsistent with the payment amount collected\n * from Graph Payments\n * @param balanceBefore The contract GRT balance before the collection\n * @param balanceAfter The contract GRT balance after the collection\n * @param tokensDataService The amount of tokens sent to the subgraph service\n */\n error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensDataService);\n\n /**\n * @notice @notice Thrown when the service provider in the RAV does not match the expected indexer.\n * @param providedIndexer The address of the provided indexer.\n * @param expectedIndexer The address of the expected indexer.\n */\n error SubgraphServiceIndexerMismatch(address providedIndexer, address expectedIndexer);\n\n /**\n * @notice Thrown when the indexer in the allocation state does not match the expected indexer.\n * @param indexer The address of the expected indexer.\n * @param allocationId The id of the allocation.\n */\n error SubgraphServiceAllocationNotAuthorized(address indexer, address allocationId);\n\n /**\n * @notice Thrown when collecting a RAV where the RAV indexer is not the same as the allocation indexer\n * @param ravIndexer The address of the RAV indexer\n * @param allocationIndexer The address of the allocation indexer\n */\n error SubgraphServiceInvalidRAV(address ravIndexer, address allocationIndexer);\n\n /**\n * @notice Thrown when trying to force close an allocation that is not stale and the indexer is not over-allocated\n * @param allocationId The id of the allocation\n */\n error SubgraphServiceCannotForceCloseAllocation(address allocationId);\n\n /**\n * @notice Thrown when trying to force close an altruistic allocation\n * @param allocationId The id of the allocation\n */\n error SubgraphServiceAllocationIsAltruistic(address allocationId);\n\n /**\n * @notice Thrown when trying to set stake to fees ratio to zero\n */\n error SubgraphServiceInvalidZeroStakeToFeesRatio();\n\n /**\n * @notice Force close an allocation\n * @dev This function can be permissionlessly called when the allocation is stale or\n * if the indexer is over-allocated. This ensures that rewards for other allocations are\n * not diluted by an inactive allocation, and that over-allocated indexers stop accumulating\n * rewards with tokens they no longer have allocated.\n *\n * Requirements:\n * - Allocation must exist and be open\n * - Allocation must be stale or indexer must be over-allocated\n * - Allocation cannot be altruistic\n *\n * Emits a {AllocationClosed} event.\n *\n * @param allocationId The id of the allocation\n */\n function forceCloseAllocation(address allocationId) external;\n\n /**\n * @notice Change the amount of tokens in an allocation\n * @dev Requirements:\n * - The indexer must be registered\n * - The provision must be valid according to the subgraph service rules\n * - `tokens` must be different from the current allocation size\n * - The indexer must have enough available tokens to allocate if they are upsizing the allocation\n *\n * Emits a {AllocationResized} event.\n *\n * See {AllocationManager-_resizeAllocation} for more details.\n *\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param tokens The new amount of tokens in the allocation\n */\n function resizeAllocation(address indexer, address allocationId, uint256 tokens) external;\n\n /**\n * @notice Imports a legacy allocation id into the subgraph service\n * This is a governor only action that is required to prevent indexers from re-using allocation ids from the\n * legacy staking contract.\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n */\n function migrateLegacyAllocation(address indexer, address allocationId, bytes32 subgraphDeploymentId) external;\n\n /**\n * @notice Sets a pause guardian\n * @param pauseGuardian The address of the pause guardian\n * @param allowed True if the pause guardian is allowed to pause the contract, false otherwise\n */\n function setPauseGuardian(address pauseGuardian, bool allowed) external;\n\n /**\n * @notice Sets the minimum amount of provisioned tokens required to create an allocation\n * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation\n */\n function setMinimumProvisionTokens(uint256 minimumProvisionTokens) external;\n\n /**\n * @notice Sets the delegation ratio\n * @param delegationRatio The delegation ratio\n */\n function setDelegationRatio(uint32 delegationRatio) external;\n\n /**\n * @notice Sets the stake to fees ratio\n * @param stakeToFeesRatio The stake to fees ratio\n */\n function setStakeToFeesRatio(uint256 stakeToFeesRatio) external;\n\n /**\n * @notice Sets the max POI staleness\n * See {AllocationManagerV1Storage-maxPOIStaleness} for more details.\n * @param maxPOIStaleness The max POI staleness in seconds\n */\n function setMaxPOIStaleness(uint256 maxPOIStaleness) external;\n\n /**\n * @notice Sets the curators payment cut for query fees\n * @dev Emits a {CuratorCutSet} event\n * @param curationCut The curation cut for the payment type\n */\n function setCurationCut(uint256 curationCut) external;\n\n /**\n * @notice Sets the rewards destination for an indexer to receive indexing rewards\n * @dev Emits a {RewardsDestinationSet} event\n * @param rewardsDestination The address where indexing rewards should be sent\n */\n function setRewardsDestination(address rewardsDestination) external;\n\n /**\n * @notice Gets the details of an allocation\n * For legacy allocations use {getLegacyAllocation}\n * @param allocationId The id of the allocation\n */\n function getAllocation(address allocationId) external view returns (Allocation.State memory);\n\n /**\n * @notice Gets the details of a legacy allocation\n * For non-legacy allocations use {getAllocation}\n * @param allocationId The id of the allocation\n */\n function getLegacyAllocation(address allocationId) external view returns (LegacyAllocation.State memory);\n\n /**\n * @notice Encodes the allocation proof for EIP712 signing\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n */\n function encodeAllocationProof(address indexer, address allocationId) external view returns (bytes32);\n\n /**\n * @notice Checks if an allocation is stale\n * @param allocationId The id of the allocation\n * @return True if the allocation is stale, false otherwise\n */\n function isStaleAllocation(address allocationId) external view returns (bool);\n\n /**\n * @notice Checks if an indexer is over-allocated\n * @param allocationId The id of the allocation\n * @return True if the indexer is over-allocated, false otherwise\n */\n function isOverAllocated(address allocationId) external view returns (bool);\n}\n" - }, - "contracts/libraries/Allocation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { Math } from \"@openzeppelin/contracts/utils/math/Math.sol\";\n\n/**\n * @title Allocation library\n * @notice A library to handle Allocations.\n */\nlibrary Allocation {\n using Allocation for State;\n\n /**\n * @notice Allocation details\n */\n struct State {\n // Indexer that owns the allocation\n address indexer;\n // Subgraph deployment id the allocation is for\n bytes32 subgraphDeploymentId;\n // Number of tokens allocated\n uint256 tokens;\n // Timestamp when the allocation was created\n uint256 createdAt;\n // Timestamp when the allocation was closed\n uint256 closedAt;\n // Timestamp when the last POI was presented\n uint256 lastPOIPresentedAt;\n // Accumulated rewards per allocated token\n uint256 accRewardsPerAllocatedToken;\n // Accumulated rewards that are pending to be claimed due allocation resize\n uint256 accRewardsPending;\n }\n\n /**\n * @notice Thrown when attempting to create an allocation with an existing id\n * @param allocationId The allocation id\n */\n error AllocationAlreadyExists(address allocationId);\n\n /**\n * @notice Thrown when trying to perform an operation on a non-existent allocation\n * @param allocationId The allocation id\n */\n error AllocationDoesNotExist(address allocationId);\n\n /**\n * @notice Thrown when trying to perform an operation on a closed allocation\n * @param allocationId The allocation id\n * @param closedAt The timestamp when the allocation was closed\n */\n error AllocationClosed(address allocationId, uint256 closedAt);\n\n /**\n * @notice Create a new allocation\n * @dev Requirements:\n * - The allocation must not exist\n * @param self The allocation list mapping\n * @param indexer The indexer that owns the allocation\n * @param allocationId The allocation id\n * @param subgraphDeploymentId The subgraph deployment id the allocation is for\n * @param tokens The number of tokens allocated\n * @param accRewardsPerAllocatedToken The initial accumulated rewards per allocated token\n */\n function create(\n mapping(address => State) storage self,\n address indexer,\n address allocationId,\n bytes32 subgraphDeploymentId,\n uint256 tokens,\n uint256 accRewardsPerAllocatedToken\n ) internal returns (State memory) {\n require(!self[allocationId].exists(), AllocationAlreadyExists(allocationId));\n\n State memory allocation = State({\n indexer: indexer,\n subgraphDeploymentId: subgraphDeploymentId,\n tokens: tokens,\n createdAt: block.timestamp,\n closedAt: 0,\n lastPOIPresentedAt: 0,\n accRewardsPerAllocatedToken: accRewardsPerAllocatedToken,\n accRewardsPending: 0\n });\n\n self[allocationId] = allocation;\n\n return allocation;\n }\n\n /**\n * @notice Present a POI for an allocation\n * @dev It only updates the last POI presented timestamp.\n * Requirements:\n * - The allocation must be open\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function presentPOI(mapping(address => State) storage self, address allocationId) internal {\n State storage allocation = _get(self, allocationId);\n require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt));\n allocation.lastPOIPresentedAt = block.timestamp;\n }\n\n /**\n * @notice Update the accumulated rewards per allocated token for an allocation\n * @dev Requirements:\n * - The allocation must be open\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n * @param accRewardsPerAllocatedToken The new accumulated rewards per allocated token\n */\n function snapshotRewards(\n mapping(address => State) storage self,\n address allocationId,\n uint256 accRewardsPerAllocatedToken\n ) internal {\n State storage allocation = _get(self, allocationId);\n require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt));\n allocation.accRewardsPerAllocatedToken = accRewardsPerAllocatedToken;\n }\n\n /**\n * @notice Update the accumulated rewards pending to be claimed for an allocation\n * @dev Requirements:\n * - The allocation must be open\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function clearPendingRewards(mapping(address => State) storage self, address allocationId) internal {\n State storage allocation = _get(self, allocationId);\n require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt));\n allocation.accRewardsPending = 0;\n }\n\n /**\n * @notice Close an allocation\n * @dev Requirements:\n * - The allocation must be open\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function close(mapping(address => State) storage self, address allocationId) internal {\n State storage allocation = _get(self, allocationId);\n require(allocation.isOpen(), AllocationClosed(allocationId, allocation.closedAt));\n allocation.closedAt = block.timestamp;\n }\n\n /**\n * @notice Get an allocation\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function get(mapping(address => State) storage self, address allocationId) internal view returns (State memory) {\n return _get(self, allocationId);\n }\n\n /**\n * @notice Checks if an allocation is stale\n * @param self The allocation\n * @param staleThreshold The time in blocks to consider an allocation stale\n */\n function isStale(State memory self, uint256 staleThreshold) internal view returns (bool) {\n uint256 timeSinceLastPOI = block.timestamp - Math.max(self.createdAt, self.lastPOIPresentedAt);\n return self.isOpen() && timeSinceLastPOI > staleThreshold;\n }\n\n /**\n * @notice Checks if an allocation exists\n * @param self The allocation\n */\n function exists(State memory self) internal pure returns (bool) {\n return self.createdAt != 0;\n }\n\n /**\n * @notice Checks if an allocation is open\n * @param self The allocation\n */\n function isOpen(State memory self) internal pure returns (bool) {\n return self.exists() && self.closedAt == 0;\n }\n\n /**\n * @notice Checks if an allocation is alturistic\n * @param self The allocation\n */\n function isAltruistic(State memory self) internal pure returns (bool) {\n return self.exists() && self.tokens == 0;\n }\n\n /**\n * @notice Get the allocation for an allocation id\n * @dev Reverts if the allocation does not exist\n * @param self The allocation list mapping\n * @param allocationId The allocation id\n */\n function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) {\n State storage allocation = self[allocationId];\n require(allocation.exists(), AllocationDoesNotExist(allocationId));\n return allocation;\n }\n}\n" - }, - "contracts/libraries/Attestation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title Attestation library\n * @notice A library to handle Attestation.\n */\nlibrary Attestation {\n /// @notice Receipt content sent from the service provider in response to request\n struct Receipt {\n bytes32 requestCID;\n bytes32 responseCID;\n bytes32 subgraphDeploymentId;\n }\n\n /// @notice Attestation sent from the service provider in response to a request\n struct State {\n bytes32 requestCID;\n bytes32 responseCID;\n bytes32 subgraphDeploymentId;\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n /// @notice Attestation size is the sum of the receipt (96) + signature (65)\n uint256 private constant RECEIPT_SIZE_BYTES = 96;\n\n uint256 private constant SIG_R_LENGTH = 32;\n uint256 private constant SIG_S_LENGTH = 32;\n uint256 private constant SIG_V_LENGTH = 1;\n uint256 private constant SIG_R_OFFSET = RECEIPT_SIZE_BYTES;\n uint256 private constant SIG_S_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH;\n uint256 private constant SIG_V_OFFSET = RECEIPT_SIZE_BYTES + SIG_R_LENGTH + SIG_S_LENGTH;\n uint256 private constant SIG_SIZE_BYTES = SIG_R_LENGTH + SIG_S_LENGTH + SIG_V_LENGTH;\n\n uint256 private constant ATTESTATION_SIZE_BYTES = RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES;\n\n uint256 private constant UINT8_BYTE_LENGTH = 1;\n uint256 private constant BYTES32_BYTE_LENGTH = 32;\n\n error AttestationInvalidBytesLength(uint256 length, uint256 expectedLength);\n\n /**\n * @dev Returns if two attestations are conflicting.\n * Everything must match except for the responseId.\n * @param _attestation1 Attestation\n * @param _attestation2 Attestation\n * @return True if the two attestations are conflicting\n */\n function areConflicting(\n Attestation.State memory _attestation1,\n Attestation.State memory _attestation2\n ) internal pure returns (bool) {\n return (_attestation1.requestCID == _attestation2.requestCID &&\n _attestation1.subgraphDeploymentId == _attestation2.subgraphDeploymentId &&\n _attestation1.responseCID != _attestation2.responseCID);\n }\n\n /**\n * @dev Parse the bytes attestation into a struct from `_data`.\n * @return Attestation struct\n */\n function parse(bytes memory _data) internal pure returns (State memory) {\n // Check attestation data length\n require(\n _data.length == ATTESTATION_SIZE_BYTES,\n AttestationInvalidBytesLength(_data.length, ATTESTATION_SIZE_BYTES)\n );\n\n // Decode receipt\n (bytes32 requestCID, bytes32 responseCID, bytes32 subgraphDeploymentId) = abi.decode(\n _data,\n (bytes32, bytes32, bytes32)\n );\n\n // Decode signature\n // Signature is expected to be in the order defined in the Attestation struct\n bytes32 r = _toBytes32(_data, SIG_R_OFFSET);\n bytes32 s = _toBytes32(_data, SIG_S_OFFSET);\n uint8 v = _toUint8(_data, SIG_V_OFFSET);\n\n return State(requestCID, responseCID, subgraphDeploymentId, r, s, v);\n }\n\n /**\n * @dev Parse a uint8 from `_bytes` starting at offset `_start`.\n * @return uint8 value\n */\n function _toUint8(bytes memory _bytes, uint256 _start) private pure returns (uint8) {\n require(\n _bytes.length >= _start + UINT8_BYTE_LENGTH,\n AttestationInvalidBytesLength(_bytes.length, _start + UINT8_BYTE_LENGTH)\n );\n uint8 tempUint;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Load the 32-byte word from memory starting at `_bytes + _start + 1`\n // The `0x1` accounts for the fact that we want only the first byte (uint8)\n // of the loaded 32 bytes.\n tempUint := mload(add(add(_bytes, 0x1), _start))\n }\n\n return tempUint;\n }\n\n /**\n * @dev Parse a bytes32 from `_bytes` starting at offset `_start`.\n * @return bytes32 value\n */\n function _toBytes32(bytes memory _bytes, uint256 _start) private pure returns (bytes32) {\n require(\n _bytes.length >= _start + BYTES32_BYTE_LENGTH,\n AttestationInvalidBytesLength(_bytes.length, _start + BYTES32_BYTE_LENGTH)\n );\n bytes32 tempBytes32;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n tempBytes32 := mload(add(add(_bytes, 0x20), _start))\n }\n\n return tempBytes32;\n }\n}\n" - }, - "contracts/libraries/LegacyAllocation.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\n/**\n * @title LegacyAllocation library\n * @notice A library to handle legacy Allocations.\n */\nlibrary LegacyAllocation {\n using LegacyAllocation for State;\n\n /**\n * @notice Legacy allocation details\n * @dev Note that we are only storing the indexer and subgraphDeploymentId. The main point of tracking legacy allocations\n * is to prevent them from being re used on the Subgraph Service. We don't need to store the rest of the allocation details.\n */\n struct State {\n address indexer;\n bytes32 subgraphDeploymentId;\n }\n\n /**\n * @notice Thrown when attempting to migrate an allocation with an existing id\n * @param allocationId The allocation id\n */\n error LegacyAllocationExists(address allocationId);\n\n /**\n * @notice Thrown when trying to get a non-existent allocation\n * @param allocationId The allocation id\n */\n error LegacyAllocationDoesNotExist(address allocationId);\n\n /**\n * @notice Thrown when trying to migrate an allocation that has already been migrated\n * @param allocationId The allocation id\n */\n error LegacyAllocationAlreadyMigrated(address allocationId);\n\n /**\n * @notice Migrate a legacy allocation\n * @dev Requirements:\n * - The allocation must not have been previously migrated\n * @param self The legacy allocation list mapping\n * @param indexer The indexer that owns the allocation\n * @param allocationId The allocation id\n * @param subgraphDeploymentId The subgraph deployment id the allocation is for\n * @custom:error LegacyAllocationAlreadyMigrated if the allocation has already been migrated\n */\n function migrate(\n mapping(address => State) storage self,\n address indexer,\n address allocationId,\n bytes32 subgraphDeploymentId\n ) internal {\n require(!self[allocationId].exists(), LegacyAllocationAlreadyMigrated(allocationId));\n\n State memory allocation = State({ indexer: indexer, subgraphDeploymentId: subgraphDeploymentId });\n self[allocationId] = allocation;\n }\n\n /**\n * @notice Get a legacy allocation\n * @param self The legacy allocation list mapping\n * @param allocationId The allocation id\n */\n function get(mapping(address => State) storage self, address allocationId) internal view returns (State memory) {\n return _get(self, allocationId);\n }\n\n /**\n * @notice Revert if a legacy allocation exists\n * @param self The legacy allocation list mapping\n * @param allocationId The allocation id\n */\n function revertIfExists(mapping(address => State) storage self, address allocationId) internal view {\n require(!self[allocationId].exists(), LegacyAllocationExists(allocationId));\n }\n\n /**\n * @notice Check if a legacy allocation exists\n * @param self The legacy allocation\n */\n function exists(State memory self) internal pure returns (bool) {\n return self.indexer != address(0);\n }\n\n /**\n * @notice Get a legacy allocation\n * @param self The legacy allocation list mapping\n * @param allocationId The allocation id\n */\n function _get(mapping(address => State) storage self, address allocationId) private view returns (State storage) {\n State storage allocation = self[allocationId];\n require(allocation.exists(), LegacyAllocationDoesNotExist(allocationId));\n return allocation;\n }\n}\n" - }, - "contracts/SubgraphService.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\";\nimport { IGraphToken } from \"@graphprotocol/contracts/contracts/token/IGraphToken.sol\";\nimport { ITAPCollector } from \"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\";\nimport { IRewardsIssuer } from \"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\";\nimport { ISubgraphService } from \"./interfaces/ISubgraphService.sol\";\n\nimport { OwnableUpgradeable } from \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport { MulticallUpgradeable } from \"@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol\";\nimport { Initializable } from \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport { DataServicePausableUpgradeable } from \"@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol\";\nimport { DataService } from \"@graphprotocol/horizon/contracts/data-service/DataService.sol\";\nimport { DataServiceFees } from \"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol\";\nimport { Directory } from \"./utilities/Directory.sol\";\nimport { AllocationManager } from \"./utilities/AllocationManager.sol\";\nimport { SubgraphServiceV1Storage } from \"./SubgraphServiceStorage.sol\";\n\nimport { TokenUtils } from \"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\";\nimport { PPMMath } from \"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\";\nimport { Allocation } from \"./libraries/Allocation.sol\";\nimport { LegacyAllocation } from \"./libraries/LegacyAllocation.sol\";\n\n/**\n * @title SubgraphService contract\n * @custom:security-contact Please email security+contracts@thegraph.com if you find any\n * bugs. We may have an active bug bounty program.\n */\ncontract SubgraphService is\n Initializable,\n OwnableUpgradeable,\n MulticallUpgradeable,\n DataService,\n DataServicePausableUpgradeable,\n DataServiceFees,\n Directory,\n AllocationManager,\n SubgraphServiceV1Storage,\n IRewardsIssuer,\n ISubgraphService\n{\n using PPMMath for uint256;\n using Allocation for mapping(address => Allocation.State);\n using Allocation for Allocation.State;\n using TokenUtils for IGraphToken;\n\n /**\n * @notice Checks that an indexer is registered\n * @param indexer The address of the indexer\n */\n modifier onlyRegisteredIndexer(address indexer) {\n require(indexers[indexer].registeredAt != 0, SubgraphServiceIndexerNotRegistered(indexer));\n _;\n }\n\n /**\n * @notice Constructor for the SubgraphService contract\n * @dev DataService and Directory constructors set a bunch of immutable variables\n * @param graphController The address of the Graph Controller contract\n * @param disputeManager The address of the DisputeManager contract\n * @param tapCollector The address of the TAPCollector contract\n * @param curation The address of the Curation contract\n */\n constructor(\n address graphController,\n address disputeManager,\n address tapCollector,\n address curation\n ) DataService(graphController) Directory(address(this), disputeManager, tapCollector, curation) {\n _disableInitializers();\n }\n\n /**\n * @notice Initialize the contract\n * @dev The thawingPeriod and verifierCut ranges are not set here because they are variables\n * on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges.\n * @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation\n * @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation\n * @param stakeToFeesRatio The ratio of stake to fees to lock when collecting query fees\n */\n function initialize(\n uint256 minimumProvisionTokens,\n uint32 maximumDelegationRatio,\n uint256 stakeToFeesRatio\n ) external initializer {\n __Ownable_init(msg.sender);\n __Multicall_init();\n __DataService_init();\n __DataServicePausable_init();\n __AllocationManager_init(\"SubgraphService\", \"1.0\");\n\n _setProvisionTokensRange(minimumProvisionTokens, type(uint256).max);\n _setDelegationRatio(maximumDelegationRatio);\n _setStakeToFeesRatio(stakeToFeesRatio);\n }\n\n /**\n * @notice\n * @dev Implements {IDataService.register}\n *\n * Requirements:\n * - The indexer must not be already registered\n * - The URL must not be empty\n * - The provision must be valid according to the subgraph service rules\n *\n * Emits a {ServiceProviderRegistered} event\n *\n * @param indexer The address of the indexer to register\n * @param data Encoded registration data:\n * - address `url`: The URL of the indexer\n * - string `geohash`: The geohash of the indexer\n * - address `rewardsDestination`: The address where the indexer wants to receive indexing rewards.\n * Use zero address for automatic reprovisioning to the subgraph service.\n */\n function register(\n address indexer,\n bytes calldata data\n ) external override onlyAuthorizedForProvision(indexer) onlyValidProvision(indexer) whenNotPaused {\n (string memory url, string memory geohash, address rewardsDestination) = abi.decode(\n data,\n (string, string, address)\n );\n\n require(bytes(url).length > 0, SubgraphServiceEmptyUrl());\n require(bytes(geohash).length > 0, SubgraphServiceEmptyGeohash());\n require(indexers[indexer].registeredAt == 0, SubgraphServiceIndexerAlreadyRegistered());\n\n // Register the indexer\n indexers[indexer] = Indexer({ registeredAt: block.timestamp, url: url, geoHash: geohash });\n if (rewardsDestination != address(0)) {\n _setRewardsDestination(indexer, rewardsDestination);\n }\n\n emit ServiceProviderRegistered(indexer, data);\n }\n\n /**\n * @notice Accept staged parameters in the provision of a service provider\n * @dev Implements {IDataService-acceptProvisionPendingParameters}\n *\n * Requirements:\n * - The indexer must be registered\n * - Must have previously staged provision parameters, using {IHorizonStaking-setProvisionParameters}\n * - The new provision parameters must be valid according to the subgraph service rules\n *\n * Emits a {ProvisionPendingParametersAccepted} event\n *\n * @param indexer The address of the indexer to accept the provision for\n */\n function acceptProvisionPendingParameters(\n address indexer,\n bytes calldata\n ) external override onlyAuthorizedForProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused {\n _checkProvisionTokens(indexer);\n _acceptProvisionParameters(indexer);\n emit ProvisionPendingParametersAccepted(indexer);\n }\n\n /**\n * @notice Allocates tokens to subgraph deployment, manifesting the indexer's commitment to index it\n * @dev This is the equivalent of the `allocate` function in the legacy Staking contract.\n *\n * Requirements:\n * - The indexer must be registered\n * - The provision must be valid according to the subgraph service rules\n * - Allocation id cannot be zero\n * - Allocation id cannot be reused from the legacy staking contract\n * - The indexer must have enough available tokens to allocate\n *\n * The `allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`.\n *\n * See {AllocationManager-allocate} for more details.\n *\n * Emits {ServiceStarted} and {AllocationCreated} events\n *\n * @param indexer The address of the indexer\n * @param data Encoded data:\n * - bytes32 `subgraphDeploymentId`: The id of the subgraph deployment\n * - uint256 `tokens`: The amount of tokens to allocate\n * - address `allocationId`: The id of the allocation\n * - bytes `allocationProof`: Signed proof of the allocation id address ownership\n */\n function startService(\n address indexer,\n bytes calldata data\n )\n external\n override\n onlyAuthorizedForProvision(indexer)\n onlyValidProvision(indexer)\n onlyRegisteredIndexer(indexer)\n whenNotPaused\n {\n (bytes32 subgraphDeploymentId, uint256 tokens, address allocationId, bytes memory allocationProof) = abi.decode(\n data,\n (bytes32, uint256, address, bytes)\n );\n _allocate(indexer, allocationId, subgraphDeploymentId, tokens, allocationProof, delegationRatio);\n emit ServiceStarted(indexer, data);\n }\n\n /**\n * @notice Close an allocation, indicating that the indexer has stopped indexing the subgraph deployment\n * @dev This is the equivalent of the `closeAllocation` function in the legacy Staking contract.\n * There are a few notable differences with the legacy function:\n * - allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically\n * without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated\n * tokens for other purposes.\n * - No POI is required to close an allocation. Indexers should present POIs to collect indexing rewards using {collect}.\n *\n * Requirements:\n * - The indexer must be registered\n * - Allocation must exist and be open\n *\n * Emits {ServiceStopped} and {AllocationClosed} events\n *\n * @param indexer The address of the indexer\n * @param data Encoded data:\n * - address `allocationId`: The id of the allocation\n */\n function stopService(\n address indexer,\n bytes calldata data\n ) external override onlyAuthorizedForProvision(indexer) onlyRegisteredIndexer(indexer) whenNotPaused {\n address allocationId = abi.decode(data, (address));\n require(\n allocations.get(allocationId).indexer == indexer,\n SubgraphServiceAllocationNotAuthorized(indexer, allocationId)\n );\n _closeAllocation(allocationId);\n emit ServiceStopped(indexer, data);\n }\n\n /**\n * @notice Collects payment for the service provided by the indexer\n * Allows collecting different types of payments such as query fees and indexing rewards.\n * It uses Graph Horizon payments protocol to process payments.\n * Reverts if the payment type is not supported.\n * @dev This function is the equivalent of the `collect` function for query fees and the `closeAllocation` function\n * for indexing rewards in the legacy Staking contract.\n *\n * Requirements:\n * - The indexer must be registered\n * - The provision must be valid according to the subgraph service rules\n *\n * Emits a {ServicePaymentCollected} event. Emits payment type specific events.\n *\n * For query fees, see {SubgraphService-_collectQueryFees} for more details.\n * For indexing rewards, see {AllocationManager-_collectIndexingRewards} for more details.\n *\n * @param indexer The address of the indexer\n * @param paymentType The type of payment to collect as defined in {IGraphPayments}\n * @param data Encoded data to fulfill the payment. The structure of the data depends on the payment type. See above.\n */\n function collect(\n address indexer,\n IGraphPayments.PaymentTypes paymentType,\n bytes calldata data\n )\n external\n override\n onlyAuthorizedForProvision(indexer)\n onlyValidProvision(indexer)\n onlyRegisteredIndexer(indexer)\n whenNotPaused\n returns (uint256)\n {\n uint256 paymentCollected = 0;\n\n if (paymentType == IGraphPayments.PaymentTypes.QueryFee) {\n ITAPCollector.SignedRAV memory signedRav = abi.decode(data, (ITAPCollector.SignedRAV));\n require(\n signedRav.rav.serviceProvider == indexer,\n SubgraphServiceIndexerMismatch(signedRav.rav.serviceProvider, indexer)\n );\n paymentCollected = _collectQueryFees(signedRav);\n } else if (paymentType == IGraphPayments.PaymentTypes.IndexingRewards) {\n (address allocationId, bytes32 poi) = abi.decode(data, (address, bytes32));\n require(\n allocations.get(allocationId).indexer == indexer,\n SubgraphServiceAllocationNotAuthorized(indexer, allocationId)\n );\n paymentCollected = _collectIndexingRewards(allocationId, poi, delegationRatio);\n } else {\n revert SubgraphServiceInvalidPaymentType(paymentType);\n }\n\n emit ServicePaymentCollected(indexer, paymentType, paymentCollected);\n return paymentCollected;\n }\n\n /**\n * @notice Slash an indexer\n * @dev Slashing is delegated to the {DisputeManager} contract which is the only one that can call this\n * function.\n *\n * See {IHorizonStaking-slash} for more details.\n *\n * Emits a {ServiceProviderSlashed} event.\n *\n * @param indexer The address of the indexer to be slashed\n * @param data Encoded data:\n * - uint256 `tokens`: The amount of tokens to slash\n * - uint256 `reward`: The amount of tokens to reward the slasher\n */\n function slash(address indexer, bytes calldata data) external override onlyDisputeManager {\n (uint256 tokens, uint256 reward) = abi.decode(data, (uint256, uint256));\n _graphStaking().slash(indexer, tokens, reward, address(_disputeManager()));\n emit ServiceProviderSlashed(indexer, tokens);\n }\n\n /**\n * @notice See {ISubgraphService.closeStaleAllocation}\n */\n function forceCloseAllocation(address allocationId) external override {\n Allocation.State memory allocation = allocations.get(allocationId);\n bool isStale = allocation.isStale(maxPOIStaleness);\n bool isOverAllocated_ = _isOverAllocated(allocation.indexer, delegationRatio);\n require(isStale || isOverAllocated_, SubgraphServiceCannotForceCloseAllocation(allocationId));\n require(!allocation.isAltruistic(), SubgraphServiceAllocationIsAltruistic(allocationId));\n _closeAllocation(allocationId);\n }\n\n /**\n * @notice See {ISubgraphService.resizeAllocation}\n */\n function resizeAllocation(\n address indexer,\n address allocationId,\n uint256 tokens\n )\n external\n onlyAuthorizedForProvision(indexer)\n onlyValidProvision(indexer)\n onlyRegisteredIndexer(indexer)\n whenNotPaused\n {\n require(\n allocations.get(allocationId).indexer == indexer,\n SubgraphServiceAllocationNotAuthorized(indexer, allocationId)\n );\n _resizeAllocation(allocationId, tokens, delegationRatio);\n }\n\n /**\n * @notice See {ISubgraphService.migrateLegacyAllocation}\n */\n function migrateLegacyAllocation(\n address indexer,\n address allocationId,\n bytes32 subgraphDeploymentID\n ) external override onlyOwner {\n _migrateLegacyAllocation(indexer, allocationId, subgraphDeploymentID);\n }\n\n /**\n * @notice See {ISubgraphService.setPauseGuardian}\n */\n function setPauseGuardian(address pauseGuardian, bool allowed) external override onlyOwner {\n _setPauseGuardian(pauseGuardian, allowed);\n }\n\n /**\n * @notice See {ISubgraphService.setRewardsDestination}\n */\n function setRewardsDestination(address rewardsDestination) external override {\n _setRewardsDestination(msg.sender, rewardsDestination);\n }\n\n /**\n * @notice See {ISubgraphService.setMinimumProvisionTokens}\n */\n function setMinimumProvisionTokens(uint256 minimumProvisionTokens) external override onlyOwner {\n _setProvisionTokensRange(minimumProvisionTokens, DEFAULT_MAX_PROVISION_TOKENS);\n }\n\n /**\n * @notice See {ISubgraphService.setDelegationRatio}\n */\n function setDelegationRatio(uint32 delegationRatio) external override onlyOwner {\n _setDelegationRatio(delegationRatio);\n }\n\n /**\n * @notice See {ISubgraphService.setStakeToFeesRatio}\n */\n function setStakeToFeesRatio(uint256 stakeToFeesRatio_) external override onlyOwner {\n _setStakeToFeesRatio(stakeToFeesRatio_);\n }\n\n /**\n * @notice See {ISubgraphService.setMaxPOIStaleness}\n */\n function setMaxPOIStaleness(uint256 maxPOIStaleness) external override onlyOwner {\n _setMaxPOIStaleness(maxPOIStaleness);\n }\n\n /**\n * @notice See {ISubgraphService.setCurationCut}\n */\n function setCurationCut(uint256 curationCut) external override onlyOwner {\n require(PPMMath.isValidPPM(curationCut), SubgraphServiceInvalidCurationCut(curationCut));\n curationFeesCut = curationCut;\n emit CurationCutSet(curationCut);\n }\n\n /**\n * @notice See {ISubgraphService.getAllocation}\n */\n function getAllocation(address allocationId) external view override returns (Allocation.State memory) {\n return allocations[allocationId];\n }\n\n /**\n * @notice Get allocation data to calculate rewards issuance\n * @dev Implements {IRewardsIssuer.getAllocationData}\n * @dev Note that this is slightly different than {getAllocation}. It returns an\n * unstructured subset of the allocation data, which is the minimum required to mint rewards.\n *\n * Should only be used by the {RewardsManager}.\n *\n * @param allocationId The allocation Id\n * @return indexer The indexer address\n * @return subgraphDeploymentId Subgraph deployment id for the allocation\n * @return tokens Amount of allocated tokens\n * @return accRewardsPerAllocatedToken Rewards snapshot\n */\n function getAllocationData(\n address allocationId\n ) external view override returns (address, bytes32, uint256, uint256, uint256) {\n Allocation.State memory allo = allocations[allocationId];\n return (\n allo.indexer,\n allo.subgraphDeploymentId,\n allo.tokens,\n allo.accRewardsPerAllocatedToken,\n allo.accRewardsPending\n );\n }\n\n /**\n * @notice Return the total amount of tokens allocated to subgraph.\n * @dev Implements {IRewardsIssuer.getSubgraphAllocatedTokens}\n * @dev To be used by the {RewardsManager}.\n * @param subgraphDeploymentId Deployment Id for the subgraph\n * @return Total tokens allocated to subgraph\n */\n function getSubgraphAllocatedTokens(bytes32 subgraphDeploymentId) external view override returns (uint256) {\n return subgraphAllocatedTokens[subgraphDeploymentId];\n }\n\n /**\n * @notice Check if an allocation is open\n * @dev Implements {IRewardsIssuer.isAllocationActive}\n * @dev To be used by the {RewardsManager}.\n *\n * @param allocationId The allocation Id\n * @return Wether or not the allocation is active\n */\n function isActiveAllocation(address allocationId) external view override returns (bool) {\n return allocations[allocationId].isOpen();\n }\n\n /**\n * @notice See {ISubgraphService.getLegacyAllocation}\n */\n function getLegacyAllocation(address allocationId) external view override returns (LegacyAllocation.State memory) {\n return legacyAllocations[allocationId];\n }\n\n /**\n * @notice See {ISubgraphService.encodeAllocationProof}\n */\n function encodeAllocationProof(address indexer, address allocationId) external view override returns (bytes32) {\n return _encodeAllocationProof(indexer, allocationId);\n }\n\n /**\n * @notice See {ISubgraphService.isStaleAllocation}\n */\n function isStaleAllocation(address allocationId) external view override returns (bool) {\n return allocations.get(allocationId).isStale(maxPOIStaleness);\n }\n\n /**\n * @notice See {ISubgraphService.isOverAllocated}\n */\n function isOverAllocated(address indexer) external view override returns (bool) {\n return _isOverAllocated(indexer, delegationRatio);\n }\n\n // -- Data service parameter getters --\n /**\n * @notice Getter for the accepted thawing period range for provisions\n * @dev This override ensures {ProvisionManager} uses the thawing period from the {DisputeManager}\n * @return min The minimum thawing period which is defined by {DisputeManager-getDisputePeriod}\n * @return max The maximum is unbounded\n */\n function _getThawingPeriodRange() internal view override returns (uint64 min, uint64 max) {\n return (_disputeManager().getDisputePeriod(), DEFAULT_MAX_THAWING_PERIOD);\n }\n\n /**\n * @notice Getter for the accepted verifier cut range for provisions\n * @return min The minimum verifier cut which is defined by {DisputeManager-getVerifierCut}\n * @return max The maximum is 100% in PPM\n */\n function _getVerifierCutRange() internal view override returns (uint32 min, uint32 max) {\n return (_disputeManager().getVerifierCut(), DEFAULT_MAX_VERIFIER_CUT);\n }\n\n /**\n * @notice Collect query fees\n * Stake equal to the amount being collected times the `stakeToFeesRatio` is locked into a stake claim.\n * This claim can be released at a later stage once expired.\n *\n * It's important to note that before collecting this function will attempt to release any expired stake claims.\n * This could lead to an out of gas error if there are too many expired claims. In that case, the indexer will need to\n * manually release the claims, see {IDataServiceFees-releaseStake}, before attempting to collect again.\n *\n * @dev This function is the equivalent of the legacy `collect` function for query fees.\n * @dev Uses the {TAPCollector} to collect payment from Graph Horizon payments protocol.\n * Fees are distributed to service provider and delegators by {GraphPayments}, though curators\n * share is distributed by this function.\n *\n * Query fees can be collected on closed allocations.\n *\n * Requirements:\n * - Indexer must have enough available tokens to lock as economic security for fees\n *\n * Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\n * Emits a {StakeClaimLocked} event.\n * Emits a {QueryFeesCollected} event.\n *\n * @param _signedRav Signed RAV\n */\n function _collectQueryFees(ITAPCollector.SignedRAV memory _signedRav) private returns (uint256 feesCollected) {\n address indexer = _signedRav.rav.serviceProvider;\n address allocationId = abi.decode(_signedRav.rav.metadata, (address));\n Allocation.State memory allocation = allocations.get(allocationId);\n\n // Check RAV is consistent - RAV indexer must match the allocation's indexer\n require(allocation.indexer == indexer, SubgraphServiceInvalidRAV(indexer, allocation.indexer));\n bytes32 subgraphDeploymentId = allocation.subgraphDeploymentId;\n\n // release expired stake claims\n _releaseStake(indexer, 0);\n\n // Collect from GraphPayments - only curators cut is sent back to the subgraph service\n uint256 balanceBefore = _graphToken().balanceOf(address(this));\n\n uint256 curationCut = _curation().isCurated(subgraphDeploymentId) ? curationFeesCut : 0;\n uint256 tokensCollected = _tapCollector().collect(\n IGraphPayments.PaymentTypes.QueryFee,\n abi.encode(_signedRav, curationCut)\n );\n uint256 tokensCurators = tokensCollected.mulPPM(curationCut);\n\n uint256 balanceAfter = _graphToken().balanceOf(address(this));\n require(\n balanceBefore + tokensCurators == balanceAfter,\n SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter, tokensCurators)\n );\n\n if (tokensCollected > 0) {\n // lock stake as economic security for fees\n uint256 tokensToLock = tokensCollected * stakeToFeesRatio;\n uint256 unlockTimestamp = block.timestamp + _disputeManager().getDisputePeriod();\n _lockStake(indexer, tokensToLock, unlockTimestamp);\n\n if (tokensCurators > 0) {\n // curation collection changes subgraph signal so we take rewards snapshot\n _graphRewardsManager().onSubgraphSignalUpdate(subgraphDeploymentId);\n\n // Send GRT and bookkeep by calling collect()\n _graphToken().pushTokens(address(_curation()), tokensCurators);\n _curation().collect(subgraphDeploymentId, tokensCurators);\n }\n }\n\n emit QueryFeesCollected(indexer, tokensCollected, tokensCurators);\n return tokensCollected;\n }\n\n function _setStakeToFeesRatio(uint256 _stakeToFeesRatio) private {\n require(_stakeToFeesRatio != 0, SubgraphServiceInvalidZeroStakeToFeesRatio());\n stakeToFeesRatio = _stakeToFeesRatio;\n emit StakeToFeesRatioSet(_stakeToFeesRatio);\n }\n}\n" - }, - "contracts/SubgraphServiceStorage.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { ISubgraphService } from \"./interfaces/ISubgraphService.sol\";\n\nabstract contract SubgraphServiceV1Storage {\n /// @notice Service providers registered in the data service\n mapping(address indexer => ISubgraphService.Indexer details) public indexers;\n\n ///@notice Multiplier for how many tokens back collected query fees\n uint256 public stakeToFeesRatio;\n\n /// @notice The cut curators take from query fee payments\n uint256 public curationFeesCut;\n}\n" - }, - "contracts/utilities/AllocationManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IGraphPayments } from \"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\";\nimport { IGraphToken } from \"@graphprotocol/contracts/contracts/token/IGraphToken.sol\";\nimport { IHorizonStakingTypes } from \"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\";\n\nimport { GraphDirectory } from \"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\";\nimport { AllocationManagerV1Storage } from \"./AllocationManagerStorage.sol\";\n\nimport { TokenUtils } from \"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\";\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { EIP712Upgradeable } from \"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\";\nimport { Allocation } from \"../libraries/Allocation.sol\";\nimport { LegacyAllocation } from \"../libraries/LegacyAllocation.sol\";\nimport { PPMMath } from \"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\";\nimport { ProvisionTracker } from \"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\";\n\n/**\n * @title AllocationManager contract\n * @notice A helper contract implementing allocation lifecycle management.\n * Allows opening, resizing, and closing allocations, as well as collecting indexing rewards by presenting a Proof\n * of Indexing (POI).\n */\nabstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, AllocationManagerV1Storage {\n using ProvisionTracker for mapping(address => uint256);\n using Allocation for mapping(address => Allocation.State);\n using Allocation for Allocation.State;\n using LegacyAllocation for mapping(address => LegacyAllocation.State);\n using PPMMath for uint256;\n using TokenUtils for IGraphToken;\n\n ///@dev EIP712 typehash for allocation proof\n bytes32 private constant EIP712_ALLOCATION_PROOF_TYPEHASH =\n keccak256(\"AllocationIdProof(address indexer,address allocationId)\");\n\n /**\n * @notice Emitted when an indexer creates an allocation\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n * @param tokens The amount of tokens allocated\n */\n event AllocationCreated(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when an indexer collects indexing rewards for an allocation\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n * @param tokensRewards The amount of tokens collected\n * @param tokensIndexerRewards The amount of tokens collected for the indexer\n * @param tokensDelegationRewards The amount of tokens collected for delegators\n * @param poi The POI presented\n * @param currentEpoch The current epoch\n */\n event IndexingRewardsCollected(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId,\n uint256 tokensRewards,\n uint256 tokensIndexerRewards,\n uint256 tokensDelegationRewards,\n bytes32 poi,\n uint256 currentEpoch\n );\n\n /**\n * @notice Emitted when an indexer resizes an allocation\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n * @param newTokens The new amount of tokens allocated\n * @param oldTokens The old amount of tokens allocated\n */\n event AllocationResized(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId,\n uint256 newTokens,\n uint256 oldTokens\n );\n\n /**\n * @dev Emitted when an indexer closes an allocation\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n * @param tokens The amount of tokens allocated\n */\n event AllocationClosed(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId,\n uint256 tokens\n );\n\n /**\n * @notice Emitted when a legacy allocation is migrated into the subgraph service\n * @param indexer The address of the indexer\n * @param allocationId The id of the allocation\n * @param subgraphDeploymentId The id of the subgraph deployment\n */\n event LegacyAllocationMigrated(\n address indexed indexer,\n address indexed allocationId,\n bytes32 indexed subgraphDeploymentId\n );\n\n /**\n * @notice Emitted when an indexer sets a new indexing rewards destination\n * @param indexer The address of the indexer\n * @param rewardsDestination The address where indexing rewards should be sent\n */\n event RewardsDestinationSet(address indexed indexer, address indexed rewardsDestination);\n\n /**\n * @notice Emitted when the maximum POI staleness is updated\n * @param maxPOIStaleness The max POI staleness in seconds\n */\n event MaxPOIStalenessSet(uint256 maxPOIStaleness);\n\n /**\n * @notice Thrown when an allocation proof is invalid\n * Both `signer` and `allocationId` should match for a valid proof.\n * @param signer The address that signed the proof\n * @param allocationId The id of the allocation\n */\n error AllocationManagerInvalidAllocationProof(address signer, address allocationId);\n\n /**\n * @notice Thrown when attempting to create an allocation with a zero allocation id\n */\n error AllocationManagerInvalidZeroAllocationId();\n\n /**\n * @notice Thrown when attempting to collect indexing rewards on a closed allocationl\n * @param allocationId The id of the allocation\n */\n error AllocationManagerAllocationClosed(address allocationId);\n\n /**\n * @notice Thrown when attempting to resize an allocation with the same size\n * @param allocationId The id of the allocation\n * @param tokens The amount of tokens\n */\n error AllocationManagerAllocationSameSize(address allocationId, uint256 tokens);\n\n /**\n * @notice Initializes the contract and parent contracts\n */\n // solhint-disable-next-line func-name-mixedcase\n function __AllocationManager_init(string memory _name, string memory _version) internal onlyInitializing {\n __EIP712_init(_name, _version);\n __AllocationManager_init_unchained(_name, _version);\n }\n\n /**\n * @notice Initializes the contract\n */\n // solhint-disable-next-line func-name-mixedcase\n function __AllocationManager_init_unchained(\n string memory _name,\n string memory _version\n ) internal onlyInitializing {}\n\n /**\n * @notice Imports a legacy allocation id into the subgraph service\n * This is a governor only action that is required to prevent indexers from re-using allocation ids from the\n * legacy staking contract. It will revert with LegacyAllocationAlreadyMigrated if the allocation has already been migrated.\n * @param _indexer The address of the indexer\n * @param _allocationId The id of the allocation\n * @param _subgraphDeploymentId The id of the subgraph deployment\n */\n function _migrateLegacyAllocation(address _indexer, address _allocationId, bytes32 _subgraphDeploymentId) internal {\n legacyAllocations.migrate(_indexer, _allocationId, _subgraphDeploymentId);\n emit LegacyAllocationMigrated(_indexer, _allocationId, _subgraphDeploymentId);\n }\n\n /**\n * @notice Create an allocation\n * @dev The `_allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`\n *\n * Requirements:\n * - `_allocationId` must not be the zero address\n *\n * Emits a {AllocationCreated} event\n *\n * @param _indexer The address of the indexer\n * @param _allocationId The id of the allocation to be created\n * @param _subgraphDeploymentId The subgraph deployment Id\n * @param _tokens The amount of tokens to allocate\n * @param _allocationProof Signed proof of allocation id address ownership\n * @param _delegationRatio The delegation ratio to consider when locking tokens\n */\n function _allocate(\n address _indexer,\n address _allocationId,\n bytes32 _subgraphDeploymentId,\n uint256 _tokens,\n bytes memory _allocationProof,\n uint32 _delegationRatio\n ) internal returns (Allocation.State memory) {\n require(_allocationId != address(0), AllocationManagerInvalidZeroAllocationId());\n\n _verifyAllocationProof(_indexer, _allocationId, _allocationProof);\n\n // Ensure allocation id is not reused\n // need to check both subgraph service (on allocations.create()) and legacy allocations\n legacyAllocations.revertIfExists(_allocationId);\n Allocation.State memory allocation = allocations.create(\n _indexer,\n _allocationId,\n _subgraphDeploymentId,\n _tokens,\n _graphRewardsManager().onSubgraphAllocationUpdate(_subgraphDeploymentId)\n );\n\n // Check that the indexer has enough tokens available\n // Note that the delegation ratio ensures overdelegation cannot be used\n allocationProvisionTracker.lock(_graphStaking(), _indexer, _tokens, _delegationRatio);\n\n // Update total allocated tokens for the subgraph deployment\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] =\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] +\n allocation.tokens;\n\n emit AllocationCreated(_indexer, _allocationId, _subgraphDeploymentId, allocation.tokens);\n return allocation;\n }\n\n /**\n * @notice Present a POI to collect indexing rewards for an allocation\n * This function will mint indexing rewards using the {RewardsManager} and distribute them to the indexer and delegators.\n *\n * To qualify for indexing rewards:\n * - POI must be non-zero\n * - POI must not be stale, i.e: older than `maxPOIStaleness`\n * - allocation must not be altruistic (allocated tokens = 0)\n *\n * Note that indexers are required to periodically (at most every `maxPOIStaleness`) present POIs to collect rewards.\n * Rewards will not be issued to stale POIs, which means that indexers are advised to present a zero POI if they are\n * unable to present a valid one to prevent being locked out of future rewards.\n *\n * Emits a {IndexingRewardsCollected} event.\n *\n * @param _allocationId The id of the allocation to collect rewards for\n * @param _poi The POI being presented\n */\n function _collectIndexingRewards(\n address _allocationId,\n bytes32 _poi,\n uint32 _delegationRatio\n ) internal returns (uint256) {\n Allocation.State memory allocation = allocations.get(_allocationId);\n require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId));\n\n // Mint indexing rewards if all conditions are met\n uint256 tokensRewards = (!allocation.isStale(maxPOIStaleness) &&\n !allocation.isAltruistic() &&\n _poi != bytes32(0))\n ? _graphRewardsManager().takeRewards(_allocationId)\n : 0;\n\n // ... but we still take a snapshot to ensure the rewards are not accumulated for the next valid POI\n allocations.snapshotRewards(\n _allocationId,\n _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId)\n );\n allocations.presentPOI(_allocationId);\n\n // Any pending rewards should have been collected now\n allocations.clearPendingRewards(_allocationId);\n\n uint256 tokensIndexerRewards = 0;\n uint256 tokensDelegationRewards = 0;\n if (tokensRewards != 0) {\n // Distribute rewards to delegators\n uint256 delegatorCut = _graphStaking().getDelegationFeeCut(\n allocation.indexer,\n address(this),\n IGraphPayments.PaymentTypes.IndexingRewards\n );\n IHorizonStakingTypes.DelegationPool memory delegationPool = _graphStaking().getDelegationPool(\n allocation.indexer,\n address(this)\n );\n // If delegation pool has no shares then we don't need to distribute rewards to delegators\n tokensDelegationRewards = delegationPool.shares > 0 ? tokensRewards.mulPPM(delegatorCut) : 0;\n if (tokensDelegationRewards > 0) {\n _graphToken().approve(address(_graphStaking()), tokensDelegationRewards);\n _graphStaking().addToDelegationPool(allocation.indexer, address(this), tokensDelegationRewards);\n }\n\n // Distribute rewards to indexer\n tokensIndexerRewards = tokensRewards - tokensDelegationRewards;\n if (tokensIndexerRewards > 0) {\n address rewardsDestination = rewardsDestination[allocation.indexer];\n if (rewardsDestination == address(0)) {\n _graphToken().approve(address(_graphStaking()), tokensIndexerRewards);\n _graphStaking().stakeToProvision(allocation.indexer, address(this), tokensIndexerRewards);\n } else {\n _graphToken().pushTokens(rewardsDestination, tokensIndexerRewards);\n }\n }\n }\n\n emit IndexingRewardsCollected(\n allocation.indexer,\n _allocationId,\n allocation.subgraphDeploymentId,\n tokensRewards,\n tokensIndexerRewards,\n tokensDelegationRewards,\n _poi,\n _graphEpochManager().currentEpoch()\n );\n\n // Check if the indexer is over-allocated and close the allocation if necessary\n if (_isOverAllocated(allocation.indexer, _delegationRatio)) {\n _closeAllocation(_allocationId);\n }\n\n return tokensRewards;\n }\n\n /**\n * @notice Resize an allocation\n * @dev Will lock or release tokens in the provision tracker depending on the new allocation size.\n * Rewards accrued but not issued before the resize will be accounted for as pending rewards.\n * These will be paid out when the indexer presents a POI.\n *\n * Requirements:\n * - `_indexer` must be the owner of the allocation\n * - Allocation must be open\n * - `_tokens` must be different from the current allocation size\n *\n * Emits a {AllocationResized} event.\n *\n * @param _allocationId The id of the allocation to be resized\n * @param _tokens The new amount of tokens to allocate\n * @param _delegationRatio The delegation ratio to consider when locking tokens\n */\n function _resizeAllocation(\n address _allocationId,\n uint256 _tokens,\n uint32 _delegationRatio\n ) internal returns (Allocation.State memory) {\n Allocation.State memory allocation = allocations.get(_allocationId);\n require(allocation.isOpen(), AllocationManagerAllocationClosed(_allocationId));\n require(_tokens != allocation.tokens, AllocationManagerAllocationSameSize(_allocationId, _tokens));\n\n // Update provision tracker\n uint256 oldTokens = allocation.tokens;\n if (_tokens > oldTokens) {\n allocationProvisionTracker.lock(_graphStaking(), allocation.indexer, _tokens - oldTokens, _delegationRatio);\n } else {\n allocationProvisionTracker.release(allocation.indexer, oldTokens - _tokens);\n }\n\n // Calculate rewards that have been accrued since the last snapshot but not yet issued\n uint256 accRewardsPerAllocatedToken = _graphRewardsManager().onSubgraphAllocationUpdate(\n allocation.subgraphDeploymentId\n );\n uint256 accRewardsPerAllocatedTokenPending = !allocation.isAltruistic()\n ? accRewardsPerAllocatedToken - allocation.accRewardsPerAllocatedToken\n : 0;\n\n // Update the allocation\n allocations[_allocationId].tokens = _tokens;\n allocations[_allocationId].accRewardsPerAllocatedToken = accRewardsPerAllocatedToken;\n allocations[_allocationId].accRewardsPending += _graphRewardsManager().calcRewards(\n oldTokens,\n accRewardsPerAllocatedTokenPending\n );\n\n // Update total allocated tokens for the subgraph deployment\n if (_tokens > oldTokens) {\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] += (_tokens - oldTokens);\n } else {\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] -= (oldTokens - _tokens);\n }\n\n emit AllocationResized(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, _tokens, oldTokens);\n return allocations[_allocationId];\n }\n\n /**\n * @notice Close an allocation\n * Does not require presenting a POI, use {_collectIndexingRewards} to present a POI and collect rewards\n * @dev Note that allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically\n * without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated\n * tokens for other purposes.\n *\n * Emits a {AllocationClosed} event\n *\n * @param _allocationId The id of the allocation to be closed\n */\n function _closeAllocation(address _allocationId) internal {\n Allocation.State memory allocation = allocations.get(_allocationId);\n\n // Take rewards snapshot to prevent other allos from counting tokens from this allo\n allocations.snapshotRewards(\n _allocationId,\n _graphRewardsManager().onSubgraphAllocationUpdate(allocation.subgraphDeploymentId)\n );\n\n allocations.close(_allocationId);\n allocationProvisionTracker.release(allocation.indexer, allocation.tokens);\n\n // Update total allocated tokens for the subgraph deployment\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] =\n subgraphAllocatedTokens[allocation.subgraphDeploymentId] -\n allocation.tokens;\n\n emit AllocationClosed(allocation.indexer, _allocationId, allocation.subgraphDeploymentId, allocation.tokens);\n }\n\n /**\n * @notice Sets the rewards destination for an indexer to receive indexing rewards\n * @dev Emits a {RewardsDestinationSet} event\n * @param _rewardsDestination The address where indexing rewards should be sent\n */\n function _setRewardsDestination(address _indexer, address _rewardsDestination) internal {\n rewardsDestination[_indexer] = _rewardsDestination;\n emit RewardsDestinationSet(_indexer, _rewardsDestination);\n }\n\n /**\n * @notice Sets the maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\n * @dev Emits a {MaxPOIStalenessSet} event\n * @param _maxPOIStaleness The max POI staleness in seconds\n */\n function _setMaxPOIStaleness(uint256 _maxPOIStaleness) internal {\n maxPOIStaleness = _maxPOIStaleness;\n emit MaxPOIStalenessSet(_maxPOIStaleness);\n }\n\n /**\n * @notice Gets the details of an allocation\n * @param _allocationId The id of the allocation\n */\n function _getAllocation(address _allocationId) internal view returns (Allocation.State memory) {\n return allocations.get(_allocationId);\n }\n\n /**\n * @notice Gets the details of a legacy allocation\n * @param _allocationId The id of the legacy allocation\n */\n function _getLegacyAllocation(address _allocationId) internal view returns (LegacyAllocation.State memory) {\n return legacyAllocations.get(_allocationId);\n }\n\n /**\n * @notice Encodes the allocation proof for EIP712 signing\n * @param _indexer The address of the indexer\n * @param _allocationId The id of the allocation\n */\n function _encodeAllocationProof(address _indexer, address _allocationId) internal view returns (bytes32) {\n return _hashTypedDataV4(keccak256(abi.encode(EIP712_ALLOCATION_PROOF_TYPEHASH, _indexer, _allocationId)));\n }\n\n /**\n * @notice Checks if an allocation is over-allocated\n * @param _indexer The address of the indexer\n * @param _delegationRatio The delegation ratio to consider when locking tokens\n * @return True if the allocation is over-allocated, false otherwise\n */\n function _isOverAllocated(address _indexer, uint32 _delegationRatio) internal view returns (bool) {\n return !allocationProvisionTracker.check(_graphStaking(), _indexer, _delegationRatio);\n }\n\n /**\n * @notice Verifies ownership of an allocation id by verifying an EIP712 allocation proof\n * @dev Requirements:\n * - Signer must be the allocation id address\n * @param _indexer The address of the indexer\n * @param _allocationId The id of the allocation\n * @param _proof The EIP712 proof, an EIP712 signed message of (indexer,allocationId)\n */\n function _verifyAllocationProof(address _indexer, address _allocationId, bytes memory _proof) private view {\n address signer = ECDSA.recover(_encodeAllocationProof(_indexer, _allocationId), _proof);\n require(signer == _allocationId, AllocationManagerInvalidAllocationProof(signer, _allocationId));\n }\n}\n" - }, - "contracts/utilities/AllocationManagerStorage.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { Allocation } from \"../libraries/Allocation.sol\";\nimport { LegacyAllocation } from \"../libraries/LegacyAllocation.sol\";\n\nabstract contract AllocationManagerV1Storage {\n /// @notice Allocation details\n mapping(address allocationId => Allocation.State allocation) public allocations;\n\n /// @notice Legacy allocation details\n mapping(address allocationId => LegacyAllocation.State allocation) public legacyAllocations;\n\n /// @notice Tracks allocated tokens per indexer\n mapping(address indexer => uint256 tokens) public allocationProvisionTracker;\n\n /// @notice Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\n uint256 public maxPOIStaleness;\n\n /// @notice Destination of accrued indexing rewards\n mapping(address indexer => address destination) public rewardsDestination;\n\n /// @notice Track total tokens allocated per subgraph deployment\n /// @dev Used to calculate indexing rewards\n mapping(bytes32 subgraphDeploymentId => uint256 tokens) public subgraphAllocatedTokens;\n\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" - }, - "contracts/utilities/AttestationManager.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { AttestationManagerV1Storage } from \"./AttestationManagerStorage.sol\";\n\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { Initializable } from \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport { Attestation } from \"../libraries/Attestation.sol\";\n\n/**\n * @title AttestationManager contract\n * @notice A helper contract implementing attestation verification.\n * Uses a custom implementation of EIP712 for backwards compatibility with attestations.\n */\nabstract contract AttestationManager is Initializable, AttestationManagerV1Storage {\n /// @notice EIP712 type hash for Receipt struct\n bytes32 private constant RECEIPT_TYPE_HASH =\n keccak256(\"Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)\");\n\n /// @notice EIP712 domain type hash\n bytes32 private constant DOMAIN_TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\");\n\n /// @notice EIP712 domain name\n bytes32 private constant DOMAIN_NAME_HASH = keccak256(\"Graph Protocol\");\n\n /// @notice EIP712 domain version\n bytes32 private constant DOMAIN_VERSION_HASH = keccak256(\"0\");\n\n /// @notice EIP712 domain salt\n bytes32 private constant DOMAIN_SALT = 0xa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c2;\n\n /**\n * @dev Initialize the AttestationManager contract and parent contracts\n */\n // solhint-disable-next-line func-name-mixedcase\n function __AttestationManager_init() internal onlyInitializing {\n __AttestationManager_init_unchained();\n }\n\n /**\n * @dev Initialize the AttestationManager contract\n */\n // solhint-disable-next-line func-name-mixedcase\n function __AttestationManager_init_unchained() internal onlyInitializing {\n _domainSeparator = keccak256(\n abi.encode(\n DOMAIN_TYPE_HASH,\n DOMAIN_NAME_HASH,\n DOMAIN_VERSION_HASH,\n block.chainid,\n address(this),\n DOMAIN_SALT\n )\n );\n }\n\n /**\n * @dev Recover the signer address of the `_attestation`.\n * @param _attestation The attestation struct\n * @return Signer address\n */\n function _recoverSigner(Attestation.State memory _attestation) internal view returns (address) {\n // Obtain the hash of the fully-encoded message, per EIP-712 encoding\n Attestation.Receipt memory receipt = Attestation.Receipt(\n _attestation.requestCID,\n _attestation.responseCID,\n _attestation.subgraphDeploymentId\n );\n bytes32 messageHash = _encodeReceipt(receipt);\n\n // Obtain the signer of the fully-encoded EIP-712 message hash\n // NOTE: The signer of the attestation is the indexer that served the request\n return ECDSA.recover(messageHash, abi.encodePacked(_attestation.r, _attestation.s, _attestation.v));\n }\n\n /**\n * @dev Get the message hash that a indexer used to sign the receipt.\n * Encodes a receipt using a domain separator, as described on\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\n * @notice Return the message hash used to sign the receipt\n * @param _receipt Receipt returned by indexer and submitted by fisherman\n * @return Message hash used to sign the receipt\n */\n function _encodeReceipt(Attestation.Receipt memory _receipt) internal view returns (bytes32) {\n return\n keccak256(\n abi.encodePacked(\n \"\\x19\\x01\", // EIP-191 encoding pad, EIP-712 version 1\n _domainSeparator,\n keccak256(\n abi.encode(\n RECEIPT_TYPE_HASH,\n _receipt.requestCID,\n _receipt.responseCID,\n _receipt.subgraphDeploymentId\n ) // EIP 712-encoded message hash\n )\n )\n );\n }\n}\n" - }, - "contracts/utilities/AttestationManagerStorage.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nabstract contract AttestationManagerV1Storage {\n /// @dev EIP712 domain separator\n bytes32 internal _domainSeparator;\n\n /// @dev Gap to allow adding variables in future upgrades\n uint256[50] private __gap;\n}\n" - }, - "contracts/utilities/Directory.sol": { - "content": "// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity 0.8.27;\n\nimport { IDisputeManager } from \"../interfaces/IDisputeManager.sol\";\nimport { ISubgraphService } from \"../interfaces/ISubgraphService.sol\";\nimport { ITAPCollector } from \"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\";\nimport { ICuration } from \"@graphprotocol/contracts/contracts/curation/ICuration.sol\";\n\n/**\n * @title Directory contract\n * @notice This contract is meant to be inherited by {SubgraphService} contract.\n * It contains the addresses of the contracts that the contract interacts with.\n * Uses immutable variables to minimize gas costs.\n */\nabstract contract Directory {\n /// @notice The Subgraph Service contract address\n ISubgraphService private immutable SUBGRAPH_SERVICE;\n\n /// @notice The Dispute Manager contract address\n IDisputeManager private immutable DISPUTE_MANAGER;\n\n /// @notice The TAP Collector contract address\n /// @dev Required to collect payments via Graph Horizon payments protocol\n ITAPCollector private immutable TAP_COLLECTOR;\n\n /// @notice The Curation contract address\n /// @dev Required for curation fees distribution\n ICuration private immutable CURATION;\n\n /**\n * @notice Emitted when the Directory is initialized\n * @param subgraphService The Subgraph Service contract address\n * @param disputeManager The Dispute Manager contract address\n * @param tapCollector The TAP Collector contract address\n * @param curation The Curation contract address\n */\n event SubgraphServiceDirectoryInitialized(\n address subgraphService,\n address disputeManager,\n address tapCollector,\n address curation\n );\n\n /**\n * @notice Thrown when the caller is not the Dispute Manager\n * @param caller The caller address\n * @param disputeManager The Dispute Manager address\n */\n error DirectoryNotDisputeManager(address caller, address disputeManager);\n\n /**\n * @notice Checks that the caller is the Dispute Manager\n */\n modifier onlyDisputeManager() {\n require(\n msg.sender == address(DISPUTE_MANAGER),\n DirectoryNotDisputeManager(msg.sender, address(DISPUTE_MANAGER))\n );\n _;\n }\n\n /**\n * @notice Constructor for the Directory contract\n * @param subgraphService The Subgraph Service contract address\n * @param disputeManager The Dispute Manager contract address\n * @param tapCollector The TAP Collector contract address\n * @param curation The Curation contract address\n */\n constructor(address subgraphService, address disputeManager, address tapCollector, address curation) {\n SUBGRAPH_SERVICE = ISubgraphService(subgraphService);\n DISPUTE_MANAGER = IDisputeManager(disputeManager);\n TAP_COLLECTOR = ITAPCollector(tapCollector);\n CURATION = ICuration(curation);\n\n emit SubgraphServiceDirectoryInitialized(subgraphService, disputeManager, tapCollector, curation);\n }\n\n /**\n * @notice Returns the Subgraph Service contract address\n */\n function _subgraphService() internal view returns (ISubgraphService) {\n return SUBGRAPH_SERVICE;\n }\n\n /**\n * @notice Returns the Dispute Manager contract address\n */\n function _disputeManager() internal view returns (IDisputeManager) {\n return DISPUTE_MANAGER;\n }\n\n /**\n * @notice Returns the TAP Collector contract address\n */\n function _tapCollector() internal view returns (ITAPCollector) {\n return TAP_COLLECTOR;\n }\n\n /**\n * @notice Returns the Curation contract address\n */\n function _curation() internal view returns (ICuration) {\n return CURATION;\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": true, - "runs": 50 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "storageLayout" - ], - "": [ - "ast" - ] - } - } - } - }, - "output": { - "sources": { - "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol": { - "ast": { - "absolutePath": "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol", - "exportedSymbols": { - "ITokenGateway": [ - 41 - ] - }, - "id": 42, - "license": "Apache-2.0", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "^", - "0.7", - ".6", - "||", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "913:33:0" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ITokenGateway", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 41, - "linearizedBaseContracts": [ - 41 - ], - "name": "ITokenGateway", - "nameLocation": "958:13:0", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 2, - "nodeType": "StructuredDocumentation", - "src": "1298:81:0", - "text": "@notice event deprecated in favor of DepositFinalized and WithdrawalFinalized" - }, - "functionSelector": "d2ce7d65", - "id": 19, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "outboundTransfer", - "nameLocation": "1626:16:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4, - "mutability": "mutable", - "name": "token", - "nameLocation": "1660:5:0", - "nodeType": "VariableDeclaration", - "scope": 19, - "src": "1652:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1652:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6, - "mutability": "mutable", - "name": "to", - "nameLocation": "1683:2:0", - "nodeType": "VariableDeclaration", - "scope": 19, - "src": "1675:10:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1675:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8, - "mutability": "mutable", - "name": "amunt", - "nameLocation": "1703:5:0", - "nodeType": "VariableDeclaration", - "scope": 19, - "src": "1695:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1695:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10, - "mutability": "mutable", - "name": "maxas", - "nameLocation": "1726:5:0", - "nodeType": "VariableDeclaration", - "scope": 19, - "src": "1718:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1718:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12, - "mutability": "mutable", - "name": "gasPiceBid", - "nameLocation": "1749:10:0", - "nodeType": "VariableDeclaration", - "scope": 19, - "src": "1741:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1741:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14, - "mutability": "mutable", - "name": "data", - "nameLocation": "1784:4:0", - "nodeType": "VariableDeclaration", - "scope": 19, - "src": "1769:19:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 13, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1769:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1642:152:0" - }, - "returnParameters": { - "id": 18, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19, - "src": "1821:12:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 16, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1821:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1820:14:0" - }, - "scope": 41, - "src": "1617:218:0", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "2e567b36", - "id": 32, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "finalizeInboundTransfer", - "nameLocation": "1850:23:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 30, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 21, - "mutability": "mutable", - "name": "token", - "nameLocation": "1891:5:0", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "1883:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 20, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1883:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 23, - "mutability": "mutable", - "name": "from", - "nameLocation": "1914:4:0", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "1906:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 22, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1906:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 25, - "mutability": "mutable", - "name": "to", - "nameLocation": "1936:2:0", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "1928:10:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 24, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1928:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 27, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1956:6:0", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "1948:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 26, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1948:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 29, - "mutability": "mutable", - "name": "data", - "nameLocation": "1987:4:0", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "1972:19:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 28, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1972:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1873:124:0" - }, - "returnParameters": { - "id": 31, - "nodeType": "ParameterList", - "parameters": [], - "src": "2014:0:0" - }, - "scope": 41, - "src": "1841:174:0", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 33, - "nodeType": "StructuredDocumentation", - "src": "2021:354:0", - "text": " @notice Calculate the address used when bridging an ERC20 token\n @dev the L1 and L2 address oracles may not always be in sync.\n For example, a custom token may have been registered but not deployed or the contract self destructed.\n @param l1ERC20 address of L1 token\n @return L2 address of a bridged ERC20 token" - }, - "functionSelector": "a7e28d48", - "id": 40, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calculateL2TokenAddress", - "nameLocation": "2389:23:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 36, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 35, - "mutability": "mutable", - "name": "l1ERC20", - "nameLocation": "2421:7:0", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "2413:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 34, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2413:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2412:17:0" - }, - "returnParameters": { - "id": 39, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 38, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "2453:7:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 37, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2453:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2452:9:0" - }, - "scope": 41, - "src": "2380:82:0", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 42, - "src": "948:1516:0", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "913:1552:0" - }, - "id": 0 - }, - "@graphprotocol/contracts/contracts/curation/ICuration.sol": { - "ast": { - "absolutePath": "@graphprotocol/contracts/contracts/curation/ICuration.sol", - "exportedSymbols": { - "ICuration": [ - 165 - ] - }, - "id": 166, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 43, - "literals": [ - "solidity", - "^", - "0.7", - ".6", - "||", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:33:1" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICuration", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 44, - "nodeType": "StructuredDocumentation", - "src": "81:101:1", - "text": " @title Curation Interface\n @dev Interface for the Curation contract (and L2Curation too)" - }, - "fullyImplemented": false, - "id": 165, - "linearizedBaseContracts": [ - 165 - ], - "name": "ICuration", - "nameLocation": "193:9:1", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 45, - "nodeType": "StructuredDocumentation", - "src": "237:143:1", - "text": " @notice Update the default reserve ratio to `_defaultReserveRatio`\n @param _defaultReserveRatio Reserve ratio (in PPM)" - }, - "functionSelector": "cd0ad4a2", - "id": 50, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDefaultReserveRatio", - "nameLocation": "394:22:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 48, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 47, - "mutability": "mutable", - "name": "_defaultReserveRatio", - "nameLocation": "424:20:1", - "nodeType": "VariableDeclaration", - "scope": 50, - "src": "417:27:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 46, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "417:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "416:29:1" - }, - "returnParameters": { - "id": 49, - "nodeType": "ParameterList", - "parameters": [], - "src": "454:0:1" - }, - "scope": 165, - "src": "385:70:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 51, - "nodeType": "StructuredDocumentation", - "src": "461:175:1", - "text": " @notice Update the minimum deposit amount needed to intialize a new subgraph\n @param _minimumCurationDeposit Minimum amount of tokens required deposit" - }, - "functionSelector": "6536fe32", - "id": 56, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setMinimumCurationDeposit", - "nameLocation": "650:25:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 54, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 53, - "mutability": "mutable", - "name": "_minimumCurationDeposit", - "nameLocation": "684:23:1", - "nodeType": "VariableDeclaration", - "scope": 56, - "src": "676:31:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 52, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "676:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "675:33:1" - }, - "returnParameters": { - "id": 55, - "nodeType": "ParameterList", - "parameters": [], - "src": "717:0:1" - }, - "scope": 165, - "src": "641:77:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 57, - "nodeType": "StructuredDocumentation", - "src": "724:189:1", - "text": " @notice Set the curation tax percentage to charge when a curator deposits GRT tokens.\n @param _percentage Curation tax percentage charged when depositing GRT tokens" - }, - "functionSelector": "cd18119e", - "id": 62, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setCurationTaxPercentage", - "nameLocation": "927:24:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 60, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59, - "mutability": "mutable", - "name": "_percentage", - "nameLocation": "959:11:1", - "nodeType": "VariableDeclaration", - "scope": 62, - "src": "952:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 58, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "952:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "951:20:1" - }, - "returnParameters": { - "id": 61, - "nodeType": "ParameterList", - "parameters": [], - "src": "980:0:1" - }, - "scope": 165, - "src": "918:63:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 63, - "nodeType": "StructuredDocumentation", - "src": "987:184:1", - "text": " @notice Set the master copy to use as clones for the curation token.\n @param _curationTokenMaster Address of implementation contract to use for curation tokens" - }, - "functionSelector": "9b4d9f33", - "id": 68, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setCurationTokenMaster", - "nameLocation": "1185:22:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 66, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 65, - "mutability": "mutable", - "name": "_curationTokenMaster", - "nameLocation": "1216:20:1", - "nodeType": "VariableDeclaration", - "scope": 68, - "src": "1208:28:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 64, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1208:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1207:30:1" - }, - "returnParameters": { - "id": 67, - "nodeType": "ParameterList", - "parameters": [], - "src": "1246:0:1" - }, - "scope": 165, - "src": "1176:71:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 69, - "nodeType": "StructuredDocumentation", - "src": "1276:411:1", - "text": " @notice Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool.\n @param _subgraphDeploymentID Subgraph deployment pool from where to mint signal\n @param _tokensIn Amount of Graph Tokens to deposit\n @param _signalOutMin Expected minimum amount of signal to receive\n @return Amount of signal minted\n @return Amount of curation tax burned" - }, - "functionSelector": "375a54ab", - "id": 82, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "mint", - "nameLocation": "1701:4:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 76, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 71, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "1723:21:1", - "nodeType": "VariableDeclaration", - "scope": 82, - "src": "1715:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 70, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1715:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 73, - "mutability": "mutable", - "name": "_tokensIn", - "nameLocation": "1762:9:1", - "nodeType": "VariableDeclaration", - "scope": 82, - "src": "1754:17:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 72, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1754:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 75, - "mutability": "mutable", - "name": "_signalOutMin", - "nameLocation": "1789:13:1", - "nodeType": "VariableDeclaration", - "scope": 82, - "src": "1781:21:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 74, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1781:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1705:103:1" - }, - "returnParameters": { - "id": 81, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 78, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 82, - "src": "1827:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 77, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1827:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 80, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 82, - "src": "1836:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 79, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1836:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1826:18:1" - }, - "scope": 165, - "src": "1692:153:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 83, - "nodeType": "StructuredDocumentation", - "src": "1851:323:1", - "text": " @notice Burn _signal from the SubgraphDeployment curation pool\n @param _subgraphDeploymentID SubgraphDeployment the curator is returning signal\n @param _signalIn Amount of signal to return\n @param _tokensOutMin Expected minimum amount of tokens to receive\n @return Tokens returned" - }, - "functionSelector": "24bdeec7", - "id": 94, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "burn", - "nameLocation": "2188:4:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 90, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 85, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "2201:21:1", - "nodeType": "VariableDeclaration", - "scope": 94, - "src": "2193:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 84, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2193:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 87, - "mutability": "mutable", - "name": "_signalIn", - "nameLocation": "2232:9:1", - "nodeType": "VariableDeclaration", - "scope": 94, - "src": "2224:17:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 86, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2224:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 89, - "mutability": "mutable", - "name": "_tokensOutMin", - "nameLocation": "2251:13:1", - "nodeType": "VariableDeclaration", - "scope": 94, - "src": "2243:21:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 88, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2243:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2192:73:1" - }, - "returnParameters": { - "id": 93, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 92, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 94, - "src": "2284:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 91, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2284:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2283:9:1" - }, - "scope": 165, - "src": "2179:114:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 95, - "nodeType": "StructuredDocumentation", - "src": "2299:266:1", - "text": " @notice Assign Graph Tokens collected as curation fees to the curation pool reserve.\n @param _subgraphDeploymentID SubgraphDeployment where funds should be allocated as reserves\n @param _tokens Amount of Graph Tokens to add to reserves" - }, - "functionSelector": "81573288", - "id": 102, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "collect", - "nameLocation": "2579:7:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 100, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 97, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "2595:21:1", - "nodeType": "VariableDeclaration", - "scope": 102, - "src": "2587:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 96, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2587:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 99, - "mutability": "mutable", - "name": "_tokens", - "nameLocation": "2626:7:1", - "nodeType": "VariableDeclaration", - "scope": 102, - "src": "2618:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 98, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2618:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2586:48:1" - }, - "returnParameters": { - "id": 101, - "nodeType": "ParameterList", - "parameters": [], - "src": "2643:0:1" - }, - "scope": 165, - "src": "2570:74:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 103, - "nodeType": "StructuredDocumentation", - "src": "2672:213:1", - "text": " @notice Check if any GRT tokens are deposited for a SubgraphDeployment.\n @param _subgraphDeploymentID SubgraphDeployment to check if curated\n @return True if curated, false otherwise" - }, - "functionSelector": "4c4ea0ed", - "id": 110, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isCurated", - "nameLocation": "2899:9:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 106, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 105, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "2917:21:1", - "nodeType": "VariableDeclaration", - "scope": 110, - "src": "2909:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 104, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2909:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2908:31:1" - }, - "returnParameters": { - "id": 109, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 108, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 110, - "src": "2963:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 107, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2963:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2962:6:1" - }, - "scope": 165, - "src": "2890:79:1", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 111, - "nodeType": "StructuredDocumentation", - "src": "2975:290:1", - "text": " @notice Get the amount of signal a curator has in a curation pool.\n @param _curator Curator owning the signal tokens\n @param _subgraphDeploymentID Subgraph deployment curation pool\n @return Amount of signal owned by a curator for the subgraph deployment" - }, - "functionSelector": "9f94c667", - "id": 120, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCuratorSignal", - "nameLocation": "3279:16:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 116, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 113, - "mutability": "mutable", - "name": "_curator", - "nameLocation": "3304:8:1", - "nodeType": "VariableDeclaration", - "scope": 120, - "src": "3296:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 112, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3296:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 115, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "3322:21:1", - "nodeType": "VariableDeclaration", - "scope": 120, - "src": "3314:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 114, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3314:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3295:49:1" - }, - "returnParameters": { - "id": 119, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 118, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 120, - "src": "3368:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 117, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3368:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3367:9:1" - }, - "scope": 165, - "src": "3270:107:1", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 121, - "nodeType": "StructuredDocumentation", - "src": "3383:208:1", - "text": " @notice Get the amount of signal in a curation pool.\n @param _subgraphDeploymentID Subgraph deployment curation pool\n @return Amount of signal minted for the subgraph deployment" - }, - "functionSelector": "99439fee", - "id": 128, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCurationPoolSignal", - "nameLocation": "3605:21:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 124, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 123, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "3635:21:1", - "nodeType": "VariableDeclaration", - "scope": 128, - "src": "3627:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 122, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3627:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3626:31:1" - }, - "returnParameters": { - "id": 127, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 126, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 128, - "src": "3681:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 125, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3681:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3680:9:1" - }, - "scope": 165, - "src": "3596:94:1", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 129, - "nodeType": "StructuredDocumentation", - "src": "3696:210:1", - "text": " @notice Get the amount of token reserves in a curation pool.\n @param _subgraphDeploymentID Subgraph deployment curation pool\n @return Amount of token reserves in the curation pool" - }, - "functionSelector": "46e855da", - "id": 136, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCurationPoolTokens", - "nameLocation": "3920:21:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 132, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 131, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "3950:21:1", - "nodeType": "VariableDeclaration", - "scope": 136, - "src": "3942:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 130, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3942:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3941:31:1" - }, - "returnParameters": { - "id": 135, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 134, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 136, - "src": "3996:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 133, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3996:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3995:9:1" - }, - "scope": 165, - "src": "3911:94:1", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 137, - "nodeType": "StructuredDocumentation", - "src": "4011:416:1", - "text": " @notice Calculate amount of signal that can be bought with tokens in a curation pool.\n This function considers and excludes the deposit tax.\n @param _subgraphDeploymentID Subgraph deployment to mint signal\n @param _tokensIn Amount of tokens used to mint signal\n @return Amount of signal that can be bought\n @return Amount of tokens that will be burned as curation tax" - }, - "functionSelector": "f049b900", - "id": 148, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "tokensToSignal", - "nameLocation": "4441:14:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 142, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 139, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "4464:21:1", - "nodeType": "VariableDeclaration", - "scope": 148, - "src": "4456:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 138, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4456:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 141, - "mutability": "mutable", - "name": "_tokensIn", - "nameLocation": "4495:9:1", - "nodeType": "VariableDeclaration", - "scope": 148, - "src": "4487:17:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 140, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4487:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4455:50:1" - }, - "returnParameters": { - "id": 147, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 144, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 148, - "src": "4529:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 143, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4529:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 146, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 148, - "src": "4538:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 145, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4538:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4528:18:1" - }, - "scope": 165, - "src": "4432:115:1", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 149, - "nodeType": "StructuredDocumentation", - "src": "4553:296:1", - "text": " @notice Calculate number of tokens to get when burning signal from a curation pool.\n @param _subgraphDeploymentID Subgraph deployment to burn signal\n @param _signalIn Amount of signal to burn\n @return Amount of tokens to get for the specified amount of signal" - }, - "functionSelector": "0faaf87f", - "id": 158, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "signalToTokens", - "nameLocation": "4863:14:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 154, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 151, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "4886:21:1", - "nodeType": "VariableDeclaration", - "scope": 158, - "src": "4878:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 150, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4878:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 153, - "mutability": "mutable", - "name": "_signalIn", - "nameLocation": "4917:9:1", - "nodeType": "VariableDeclaration", - "scope": 158, - "src": "4909:17:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 152, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4909:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4877:50:1" - }, - "returnParameters": { - "id": 157, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 156, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 158, - "src": "4951:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 155, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4951:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4950:9:1" - }, - "scope": 165, - "src": "4854:106:1", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 159, - "nodeType": "StructuredDocumentation", - "src": "4966:199:1", - "text": " @notice Tax charged when curators deposit funds.\n Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%)\n @return Curation tax percentage expressed in PPM" - }, - "functionSelector": "f115c427", - "id": 164, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "curationTaxPercentage", - "nameLocation": "5179:21:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 160, - "nodeType": "ParameterList", - "parameters": [], - "src": "5200:2:1" - }, - "returnParameters": { - "id": 163, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 162, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 164, - "src": "5226:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 161, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "5226:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "5225:8:1" - }, - "scope": 165, - "src": "5170:64:1", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 166, - "src": "183:5053:1", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:5191:1" - }, - "id": 1 - }, - "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol": { - "ast": { - "absolutePath": "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol", - "exportedSymbols": { - "IEpochManager": [ - 220 - ] - }, - "id": 221, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 167, - "literals": [ - "solidity", - "^", - "0.7", - ".6", - "||", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:33:2" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IEpochManager", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 220, - "linearizedBaseContracts": [ - 220 - ], - "name": "IEpochManager", - "nameLocation": "91:13:2", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "54eea796", - "id": 172, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setEpochLength", - "nameLocation": "148:14:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 170, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 169, - "mutability": "mutable", - "name": "_epochLength", - "nameLocation": "171:12:2", - "nodeType": "VariableDeclaration", - "scope": 172, - "src": "163:20:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 168, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "163:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "162:22:2" - }, - "returnParameters": { - "id": 171, - "nodeType": "ParameterList", - "parameters": [], - "src": "193:0:2" - }, - "scope": 220, - "src": "139:55:2", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c46e58eb", - "id": 175, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "runEpoch", - "nameLocation": "227:8:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 173, - "nodeType": "ParameterList", - "parameters": [], - "src": "235:2:2" - }, - "returnParameters": { - "id": 174, - "nodeType": "ParameterList", - "parameters": [], - "src": "246:0:2" - }, - "scope": 220, - "src": "218:29:2", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "1ce05d38", - "id": 180, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isCurrentEpochRun", - "nameLocation": "284:17:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 176, - "nodeType": "ParameterList", - "parameters": [], - "src": "301:2:2" - }, - "returnParameters": { - "id": 179, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 178, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 180, - "src": "327:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 177, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "327:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "326:6:2" - }, - "scope": 220, - "src": "275:58:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "8ae63d6d", - "id": 185, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "blockNum", - "nameLocation": "348:8:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 181, - "nodeType": "ParameterList", - "parameters": [], - "src": "356:2:2" - }, - "returnParameters": { - "id": 184, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 183, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 185, - "src": "382:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 182, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "382:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "381:9:2" - }, - "scope": 220, - "src": "339:52:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "85df51fd", - "id": 192, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "blockHash", - "nameLocation": "406:9:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 188, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 187, - "mutability": "mutable", - "name": "_block", - "nameLocation": "424:6:2", - "nodeType": "VariableDeclaration", - "scope": 192, - "src": "416:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 186, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "416:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "415:16:2" - }, - "returnParameters": { - "id": 191, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 190, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 192, - "src": "455:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 189, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "455:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "454:9:2" - }, - "scope": 220, - "src": "397:67:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "76671808", - "id": 197, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "currentEpoch", - "nameLocation": "479:12:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 193, - "nodeType": "ParameterList", - "parameters": [], - "src": "491:2:2" - }, - "returnParameters": { - "id": 196, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 195, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 197, - "src": "517:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 194, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "517:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "516:9:2" - }, - "scope": 220, - "src": "470:56:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "ab93122c", - "id": 202, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "currentEpochBlock", - "nameLocation": "541:17:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 198, - "nodeType": "ParameterList", - "parameters": [], - "src": "558:2:2" - }, - "returnParameters": { - "id": 201, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 200, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 202, - "src": "584:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 199, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "584:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "583:9:2" - }, - "scope": 220, - "src": "532:61:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "d0cfa46e", - "id": 207, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "currentEpochBlockSinceStart", - "nameLocation": "608:27:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 203, - "nodeType": "ParameterList", - "parameters": [], - "src": "635:2:2" - }, - "returnParameters": { - "id": 206, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 205, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 207, - "src": "661:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 204, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "661:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "660:9:2" - }, - "scope": 220, - "src": "599:71:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "1b28126d", - "id": 214, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "epochsSince", - "nameLocation": "685:11:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 210, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 209, - "mutability": "mutable", - "name": "_epoch", - "nameLocation": "705:6:2", - "nodeType": "VariableDeclaration", - "scope": 214, - "src": "697:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 208, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "697:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "696:16:2" - }, - "returnParameters": { - "id": 213, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 212, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 214, - "src": "736:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 211, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "736:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "735:9:2" - }, - "scope": 220, - "src": "676:69:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "19c3b82d", - "id": 219, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "epochsSinceUpdate", - "nameLocation": "760:17:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 215, - "nodeType": "ParameterList", - "parameters": [], - "src": "777:2:2" - }, - "returnParameters": { - "id": 218, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 217, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 219, - "src": "803:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 216, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "803:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "802:9:2" - }, - "scope": 220, - "src": "751:61:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 221, - "src": "81:733:2", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:769:2" - }, - "id": 2 - }, - "@graphprotocol/contracts/contracts/governance/IController.sol": { - "ast": { - "absolutePath": "@graphprotocol/contracts/contracts/governance/IController.sol", - "exportedSymbols": { - "IController": [ - 279 - ] - }, - "id": 280, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 222, - "literals": [ - "solidity", - "^", - "0.7", - ".6", - "||", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:33:3" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IController", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 279, - "linearizedBaseContracts": [ - 279 - ], - "name": "IController", - "nameLocation": "91:11:3", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "4fc07d75", - "id": 227, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getGovernor", - "nameLocation": "118:11:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 223, - "nodeType": "ParameterList", - "parameters": [], - "src": "129:2:3" - }, - "returnParameters": { - "id": 226, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 225, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 227, - "src": "155:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 224, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "155:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "154:9:3" - }, - "scope": 279, - "src": "109:55:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "e0e99292", - "id": 234, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setContractProxy", - "nameLocation": "202:16:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 232, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 229, - "mutability": "mutable", - "name": "_id", - "nameLocation": "227:3:3", - "nodeType": "VariableDeclaration", - "scope": 234, - "src": "219:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 228, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "219:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 231, - "mutability": "mutable", - "name": "_contractAddress", - "nameLocation": "240:16:3", - "nodeType": "VariableDeclaration", - "scope": 234, - "src": "232:24:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 230, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "232:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "218:39:3" - }, - "returnParameters": { - "id": 233, - "nodeType": "ParameterList", - "parameters": [], - "src": "266:0:3" - }, - "scope": 279, - "src": "193:74:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "9181df9c", - "id": 239, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "unsetContractProxy", - "nameLocation": "282:18:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 237, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 236, - "mutability": "mutable", - "name": "_id", - "nameLocation": "309:3:3", - "nodeType": "VariableDeclaration", - "scope": 239, - "src": "301:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 235, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "301:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "300:13:3" - }, - "returnParameters": { - "id": 238, - "nodeType": "ParameterList", - "parameters": [], - "src": "322:0:3" - }, - "scope": 279, - "src": "273:50:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "eb5dd94f", - "id": 246, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "updateController", - "nameLocation": "338:16:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 244, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 241, - "mutability": "mutable", - "name": "_id", - "nameLocation": "363:3:3", - "nodeType": "VariableDeclaration", - "scope": 246, - "src": "355:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 240, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "355:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 243, - "mutability": "mutable", - "name": "_controller", - "nameLocation": "376:11:3", - "nodeType": "VariableDeclaration", - "scope": 246, - "src": "368:19:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 242, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "368:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "354:34:3" - }, - "returnParameters": { - "id": 245, - "nodeType": "ParameterList", - "parameters": [], - "src": "397:0:3" - }, - "scope": 279, - "src": "329:69:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "f7641a5e", - "id": 253, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getContractProxy", - "nameLocation": "413:16:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 249, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 248, - "mutability": "mutable", - "name": "_id", - "nameLocation": "438:3:3", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "430:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 247, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "430:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "429:13:3" - }, - "returnParameters": { - "id": 252, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 251, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "466:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 250, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "466:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "465:9:3" - }, - "scope": 279, - "src": "404:71:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "56371bd8", - "id": 258, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setPartialPaused", - "nameLocation": "512:16:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 255, - "mutability": "mutable", - "name": "_partialPaused", - "nameLocation": "534:14:3", - "nodeType": "VariableDeclaration", - "scope": 258, - "src": "529:19:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 254, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "529:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "528:21:3" - }, - "returnParameters": { - "id": 257, - "nodeType": "ParameterList", - "parameters": [], - "src": "558:0:3" - }, - "scope": 279, - "src": "503:56:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "16c38b3c", - "id": 263, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setPaused", - "nameLocation": "574:9:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 261, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 260, - "mutability": "mutable", - "name": "_paused", - "nameLocation": "589:7:3", - "nodeType": "VariableDeclaration", - "scope": 263, - "src": "584:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 259, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "584:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "583:14:3" - }, - "returnParameters": { - "id": 262, - "nodeType": "ParameterList", - "parameters": [], - "src": "606:0:3" - }, - "scope": 279, - "src": "565:42:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "48bde20c", - "id": 268, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setPauseGuardian", - "nameLocation": "622:16:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 266, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 265, - "mutability": "mutable", - "name": "_newPauseGuardian", - "nameLocation": "647:17:3", - "nodeType": "VariableDeclaration", - "scope": 268, - "src": "639:25:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 264, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "639:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "638:27:3" - }, - "returnParameters": { - "id": 267, - "nodeType": "ParameterList", - "parameters": [], - "src": "674:0:3" - }, - "scope": 279, - "src": "613:62:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "5c975abb", - "id": 273, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "paused", - "nameLocation": "690:6:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 269, - "nodeType": "ParameterList", - "parameters": [], - "src": "696:2:3" - }, - "returnParameters": { - "id": 272, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 271, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 273, - "src": "722:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 270, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "722:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "721:6:3" - }, - "scope": 279, - "src": "681:47:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "2e292fc7", - "id": 278, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "partialPaused", - "nameLocation": "743:13:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 274, - "nodeType": "ParameterList", - "parameters": [], - "src": "756:2:3" - }, - "returnParameters": { - "id": 277, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 276, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 278, - "src": "782:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 275, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "782:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "781:6:3" - }, - "scope": 279, - "src": "734:54:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 280, - "src": "81:709:3", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:745:3" - }, - "id": 3 - }, - "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol": { - "ast": { - "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", - "exportedSymbols": { - "IRewardsIssuer": [ - 314 - ] - }, - "id": 315, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 281, - "literals": [ - "solidity", - "^", - "0.7", - ".6", - "||", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:33:4" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IRewardsIssuer", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 314, - "linearizedBaseContracts": [ - 314 - ], - "name": "IRewardsIssuer", - "nameLocation": "91:14:4", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 282, - "nodeType": "StructuredDocumentation", - "src": "112:470:4", - "text": " @dev Get allocation data to calculate rewards issuance\n @param allocationId The allocation Id\n @return indexer The indexer address\n @return subgraphDeploymentId Subgraph deployment id for the allocation\n @return tokens Amount of allocated tokens\n @return accRewardsPerAllocatedToken Rewards snapshot\n @return accRewardsPending Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed" - }, - "functionSelector": "55c85269", - "id": 297, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAllocationData", - "nameLocation": "596:17:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 285, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 284, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "631:12:4", - "nodeType": "VariableDeclaration", - "scope": 297, - "src": "623:20:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 283, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "623:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "613:36:4" - }, - "returnParameters": { - "id": 296, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 287, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "718:7:4", - "nodeType": "VariableDeclaration", - "scope": 297, - "src": "710:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 286, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "710:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 289, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "747:20:4", - "nodeType": "VariableDeclaration", - "scope": 297, - "src": "739:28:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 288, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "739:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 291, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "789:6:4", - "nodeType": "VariableDeclaration", - "scope": 297, - "src": "781:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 290, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "781:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 293, - "mutability": "mutable", - "name": "accRewardsPerAllocatedToken", - "nameLocation": "817:27:4", - "nodeType": "VariableDeclaration", - "scope": 297, - "src": "809:35:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 292, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "809:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 295, - "mutability": "mutable", - "name": "accRewardsPending", - "nameLocation": "866:17:4", - "nodeType": "VariableDeclaration", - "scope": 297, - "src": "858:25:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 294, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "858:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "696:197:4" - }, - "scope": 314, - "src": "587:307:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 298, - "nodeType": "StructuredDocumentation", - "src": "900:200:4", - "text": " @notice Return the total amount of tokens allocated to subgraph.\n @param _subgraphDeploymentId Deployment Id for the subgraph\n @return Total tokens allocated to subgraph" - }, - "functionSelector": "e2e1e8e9", - "id": 305, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getSubgraphAllocatedTokens", - "nameLocation": "1114:26:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 301, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 300, - "mutability": "mutable", - "name": "_subgraphDeploymentId", - "nameLocation": "1149:21:4", - "nodeType": "VariableDeclaration", - "scope": 305, - "src": "1141:29:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 299, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1141:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1140:31:4" - }, - "returnParameters": { - "id": 304, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 303, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 305, - "src": "1195:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 302, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1195:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1194:9:4" - }, - "scope": 314, - "src": "1105:99:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 306, - "nodeType": "StructuredDocumentation", - "src": "1210:173:4", - "text": " @notice Whether or not an allocation is active (i.e open)\n @param _allocationId Allocation Id\n @return Whether or not the allocation is active" - }, - "functionSelector": "6a3ca383", - "id": 313, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isActiveAllocation", - "nameLocation": "1397:18:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 309, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 308, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "1424:13:4", - "nodeType": "VariableDeclaration", - "scope": 313, - "src": "1416:21:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 307, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1416:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1415:23:4" - }, - "returnParameters": { - "id": 312, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 311, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 313, - "src": "1462:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 310, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1462:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1461:6:4" - }, - "scope": 314, - "src": "1388:80:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 315, - "src": "81:1389:4", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:1425:4" - }, - "id": 4 - }, - "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol": { - "ast": { - "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol", - "exportedSymbols": { - "IRewardsManager": [ - 438 - ] - }, - "id": 439, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 316, - "literals": [ - "solidity", - "^", - "0.7", - ".6", - "||", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:33:5" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IRewardsManager", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 438, - "linearizedBaseContracts": [ - 438 - ], - "name": "IRewardsManager", - "nameLocation": "91:15:5", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "IRewardsManager.Subgraph", - "documentation": { - "id": 317, - "nodeType": "StructuredDocumentation", - "src": "113:108:5", - "text": " @dev Stores accumulated rewards and snapshots related to a particular SubgraphDeployment." - }, - "id": 326, - "members": [ - { - "constant": false, - "id": 319, - "mutability": "mutable", - "name": "accRewardsForSubgraph", - "nameLocation": "260:21:5", - "nodeType": "VariableDeclaration", - "scope": 326, - "src": "252:29:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 318, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "252:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 321, - "mutability": "mutable", - "name": "accRewardsForSubgraphSnapshot", - "nameLocation": "299:29:5", - "nodeType": "VariableDeclaration", - "scope": 326, - "src": "291:37:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 320, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "291:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 323, - "mutability": "mutable", - "name": "accRewardsPerSignalSnapshot", - "nameLocation": "346:27:5", - "nodeType": "VariableDeclaration", - "scope": 326, - "src": "338:35:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 322, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "338:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 325, - "mutability": "mutable", - "name": "accRewardsPerAllocatedToken", - "nameLocation": "391:27:5", - "nodeType": "VariableDeclaration", - "scope": 326, - "src": "383:35:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 324, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "383:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Subgraph", - "nameLocation": "233:8:5", - "nodeType": "StructDefinition", - "scope": 438, - "src": "226:199:5", - "visibility": "public" - }, - { - "functionSelector": "1156bdc1", - "id": 331, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setIssuancePerBlock", - "nameLocation": "461:19:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 329, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 328, - "mutability": "mutable", - "name": "_issuancePerBlock", - "nameLocation": "489:17:5", - "nodeType": "VariableDeclaration", - "scope": 331, - "src": "481:25:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 327, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "481:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "480:27:5" - }, - "returnParameters": { - "id": 330, - "nodeType": "ParameterList", - "parameters": [], - "src": "516:0:5" - }, - "scope": 438, - "src": "452:65:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "4bbfc1c5", - "id": 336, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setMinimumSubgraphSignal", - "nameLocation": "532:24:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 334, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 333, - "mutability": "mutable", - "name": "_minimumSubgraphSignal", - "nameLocation": "565:22:5", - "nodeType": "VariableDeclaration", - "scope": 336, - "src": "557:30:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 332, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "557:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "556:32:5" - }, - "returnParameters": { - "id": 335, - "nodeType": "ParameterList", - "parameters": [], - "src": "597:0:5" - }, - "scope": 438, - "src": "523:75:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "93a90a1e", - "id": 341, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setSubgraphService", - "nameLocation": "613:18:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 339, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 338, - "mutability": "mutable", - "name": "_subgraphService", - "nameLocation": "640:16:5", - "nodeType": "VariableDeclaration", - "scope": 341, - "src": "632:24:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 337, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "632:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "631:26:5" - }, - "returnParameters": { - "id": 340, - "nodeType": "ParameterList", - "parameters": [], - "src": "666:0:5" - }, - "scope": 438, - "src": "604:63:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "0903c094", - "id": 346, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setSubgraphAvailabilityOracle", - "nameLocation": "705:29:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 344, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 343, - "mutability": "mutable", - "name": "_subgraphAvailabilityOracle", - "nameLocation": "743:27:5", - "nodeType": "VariableDeclaration", - "scope": 346, - "src": "735:35:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 342, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "735:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "734:37:5" - }, - "returnParameters": { - "id": 345, - "nodeType": "ParameterList", - "parameters": [], - "src": "780:0:5" - }, - "scope": 438, - "src": "696:85:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "1324a506", - "id": 353, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDenied", - "nameLocation": "796:9:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 351, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 348, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "814:21:5", - "nodeType": "VariableDeclaration", - "scope": 353, - "src": "806:29:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 347, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "806:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 350, - "mutability": "mutable", - "name": "_deny", - "nameLocation": "842:5:5", - "nodeType": "VariableDeclaration", - "scope": 353, - "src": "837:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 349, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "837:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "805:43:5" - }, - "returnParameters": { - "id": 352, - "nodeType": "ParameterList", - "parameters": [], - "src": "857:0:5" - }, - "scope": 438, - "src": "787:71:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "1debaded", - "id": 362, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDeniedMany", - "nameLocation": "873:13:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 360, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 356, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "906:21:5", - "nodeType": "VariableDeclaration", - "scope": 362, - "src": "887:40:5", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", - "typeString": "bytes32[]" - }, - "typeName": { - "baseType": { - "id": 354, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "887:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 355, - "nodeType": "ArrayTypeName", - "src": "887:9:5", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 359, - "mutability": "mutable", - "name": "_deny", - "nameLocation": "945:5:5", - "nodeType": "VariableDeclaration", - "scope": 362, - "src": "929:21:5", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr", - "typeString": "bool[]" - }, - "typeName": { - "baseType": { - "id": 357, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "929:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 358, - "nodeType": "ArrayTypeName", - "src": "929:6:5", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", - "typeString": "bool[]" - } - }, - "visibility": "internal" - } - ], - "src": "886:65:5" - }, - "returnParameters": { - "id": 361, - "nodeType": "ParameterList", - "parameters": [], - "src": "960:0:5" - }, - "scope": 438, - "src": "864:97:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "e820e284", - "id": 369, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isDenied", - "nameLocation": "976:8:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 365, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 364, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "993:21:5", - "nodeType": "VariableDeclaration", - "scope": 369, - "src": "985:29:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 363, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "985:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "984:31:5" - }, - "returnParameters": { - "id": 368, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 367, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 369, - "src": "1039:4:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 366, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1039:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1038:6:5" - }, - "scope": 438, - "src": "967:78:5", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "e284f848", - "id": 374, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getNewRewardsPerSignal", - "nameLocation": "1082:22:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 370, - "nodeType": "ParameterList", - "parameters": [], - "src": "1104:2:5" - }, - "returnParameters": { - "id": 373, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 372, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 374, - "src": "1130:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 371, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1130:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1129:9:5" - }, - "scope": 438, - "src": "1073:66:5", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "a8cc0ee2", - "id": 379, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAccRewardsPerSignal", - "nameLocation": "1154:22:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 375, - "nodeType": "ParameterList", - "parameters": [], - "src": "1176:2:5" - }, - "returnParameters": { - "id": 378, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 377, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 379, - "src": "1202:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 376, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1202:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1201:9:5" - }, - "scope": 438, - "src": "1145:66:5", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "5c6cbd59", - "id": 386, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAccRewardsForSubgraph", - "nameLocation": "1226:24:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 382, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 381, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "1259:21:5", - "nodeType": "VariableDeclaration", - "scope": 386, - "src": "1251:29:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 380, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1251:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1250:31:5" - }, - "returnParameters": { - "id": 385, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 384, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 386, - "src": "1305:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 383, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1305:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1304:9:5" - }, - "scope": 438, - "src": "1217:97:5", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "702a280e", - "id": 395, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAccRewardsPerAllocatedToken", - "nameLocation": "1329:30:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 389, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 388, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "1368:21:5", - "nodeType": "VariableDeclaration", - "scope": 395, - "src": "1360:29:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 387, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1360:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1359:31:5" - }, - "returnParameters": { - "id": 394, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 391, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 395, - "src": "1414:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 390, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1414:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 393, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 395, - "src": "1423:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 392, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1423:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1413:18:5" - }, - "scope": 438, - "src": "1320:112:5", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "79ee54f7", - "id": 402, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getRewards", - "nameLocation": "1447:10:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 398, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 397, - "mutability": "mutable", - "name": "_allocationID", - "nameLocation": "1466:13:5", - "nodeType": "VariableDeclaration", - "scope": 402, - "src": "1458:21:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 396, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1458:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1457:23:5" - }, - "returnParameters": { - "id": 401, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 400, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 402, - "src": "1504:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 399, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1504:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1503:9:5" - }, - "scope": 438, - "src": "1438:75:5", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c8a5f81e", - "id": 411, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcRewards", - "nameLocation": "1528:11:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 407, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 404, - "mutability": "mutable", - "name": "_tokens", - "nameLocation": "1548:7:5", - "nodeType": "VariableDeclaration", - "scope": 411, - "src": "1540:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 403, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1540:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 406, - "mutability": "mutable", - "name": "_accRewardsPerAllocatedToken", - "nameLocation": "1565:28:5", - "nodeType": "VariableDeclaration", - "scope": 411, - "src": "1557:36:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 405, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1557:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1539:55:5" - }, - "returnParameters": { - "id": 410, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 409, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 411, - "src": "1618:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 408, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1618:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1617:9:5" - }, - "scope": 438, - "src": "1519:108:5", - "stateMutability": "pure", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c7d1117d", - "id": 416, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "updateAccRewardsPerSignal", - "nameLocation": "1664:25:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 412, - "nodeType": "ParameterList", - "parameters": [], - "src": "1689:2:5" - }, - "returnParameters": { - "id": 415, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 414, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 416, - "src": "1710:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 413, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1710:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1709:9:5" - }, - "scope": 438, - "src": "1655:64:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "db750926", - "id": 423, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "takeRewards", - "nameLocation": "1734:11:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 419, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 418, - "mutability": "mutable", - "name": "_allocationID", - "nameLocation": "1754:13:5", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1746:21:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 417, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1746:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1745:23:5" - }, - "returnParameters": { - "id": 422, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 421, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1787:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 420, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1787:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1786:9:5" - }, - "scope": 438, - "src": "1725:71:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "1d1c2fec", - "id": 430, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "onSubgraphSignalUpdate", - "nameLocation": "1831:22:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 426, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 425, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "1862:21:5", - "nodeType": "VariableDeclaration", - "scope": 430, - "src": "1854:29:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 424, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1854:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1853:31:5" - }, - "returnParameters": { - "id": 429, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 428, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 430, - "src": "1903:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 427, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1903:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1902:9:5" - }, - "scope": 438, - "src": "1822:90:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "eeac3e0e", - "id": 437, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "onSubgraphAllocationUpdate", - "nameLocation": "1927:26:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 433, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 432, - "mutability": "mutable", - "name": "_subgraphDeploymentID", - "nameLocation": "1962:21:5", - "nodeType": "VariableDeclaration", - "scope": 437, - "src": "1954:29:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 431, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1954:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1953:31:5" - }, - "returnParameters": { - "id": 436, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 435, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 437, - "src": "2003:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 434, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2003:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2002:9:5" - }, - "scope": 438, - "src": "1918:94:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 439, - "src": "81:1933:5", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:1969:5" - }, - "id": 5 - }, - "@graphprotocol/contracts/contracts/token/IGraphToken.sol": { - "ast": { - "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "exportedSymbols": { - "IERC20": [ - 5874 - ], - "IGraphToken": [ - 518 - ] - }, - "id": 519, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 440, - "literals": [ - "solidity", - "^", - "0.7", - ".6", - "||", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:33:6" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "id": 441, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 519, - "sourceUnit": 5875, - "src": "81:56:6", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 442, - "name": "IERC20", - "nameLocations": [ - "164:6:6" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5874, - "src": "164:6:6" - }, - "id": 443, - "nodeType": "InheritanceSpecifier", - "src": "164:6:6" - } - ], - "canonicalName": "IGraphToken", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 518, - "linearizedBaseContracts": [ - 518, - 5874 - ], - "name": "IGraphToken", - "nameLocation": "149:11:6", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "42966c68", - "id": 448, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "burn", - "nameLocation": "214:4:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 446, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 445, - "mutability": "mutable", - "name": "amount", - "nameLocation": "227:6:6", - "nodeType": "VariableDeclaration", - "scope": 448, - "src": "219:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 444, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "219:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "218:16:6" - }, - "returnParameters": { - "id": 447, - "nodeType": "ParameterList", - "parameters": [], - "src": "243:0:6" - }, - "scope": 518, - "src": "205:39:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "79cc6790", - "id": 455, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "burnFrom", - "nameLocation": "259:8:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 453, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 450, - "mutability": "mutable", - "name": "_from", - "nameLocation": "276:5:6", - "nodeType": "VariableDeclaration", - "scope": 455, - "src": "268:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 449, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "268:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 452, - "mutability": "mutable", - "name": "amount", - "nameLocation": "291:6:6", - "nodeType": "VariableDeclaration", - "scope": 455, - "src": "283:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 451, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "283:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "267:31:6" - }, - "returnParameters": { - "id": 454, - "nodeType": "ParameterList", - "parameters": [], - "src": "307:0:6" - }, - "scope": 518, - "src": "250:58:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "40c10f19", - "id": 462, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "mint", - "nameLocation": "323:4:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 460, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 457, - "mutability": "mutable", - "name": "_to", - "nameLocation": "336:3:6", - "nodeType": "VariableDeclaration", - "scope": 462, - "src": "328:11:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 456, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "328:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 459, - "mutability": "mutable", - "name": "_amount", - "nameLocation": "349:7:6", - "nodeType": "VariableDeclaration", - "scope": 462, - "src": "341:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 458, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "341:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "327:30:6" - }, - "returnParameters": { - "id": 461, - "nodeType": "ParameterList", - "parameters": [], - "src": "366:0:6" - }, - "scope": 518, - "src": "314:53:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "983b2d56", - "id": 467, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addMinter", - "nameLocation": "407:9:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 465, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 464, - "mutability": "mutable", - "name": "_account", - "nameLocation": "425:8:6", - "nodeType": "VariableDeclaration", - "scope": 467, - "src": "417:16:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 463, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "417:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "416:18:6" - }, - "returnParameters": { - "id": 466, - "nodeType": "ParameterList", - "parameters": [], - "src": "443:0:6" - }, - "scope": 518, - "src": "398:46:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "3092afd5", - "id": 472, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "removeMinter", - "nameLocation": "459:12:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 470, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 469, - "mutability": "mutable", - "name": "_account", - "nameLocation": "480:8:6", - "nodeType": "VariableDeclaration", - "scope": 472, - "src": "472:16:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 468, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "472:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "471:18:6" - }, - "returnParameters": { - "id": 471, - "nodeType": "ParameterList", - "parameters": [], - "src": "498:0:6" - }, - "scope": 518, - "src": "450:49:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "98650275", - "id": 475, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "renounceMinter", - "nameLocation": "514:14:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 473, - "nodeType": "ParameterList", - "parameters": [], - "src": "528:2:6" - }, - "returnParameters": { - "id": 474, - "nodeType": "ParameterList", - "parameters": [], - "src": "539:0:6" - }, - "scope": 518, - "src": "505:35:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "aa271e1a", - "id": 482, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isMinter", - "nameLocation": "555:8:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 478, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 477, - "mutability": "mutable", - "name": "_account", - "nameLocation": "572:8:6", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "564:16:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 476, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "564:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "563:18:6" - }, - "returnParameters": { - "id": 481, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 480, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "605:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 479, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "605:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "604:6:6" - }, - "scope": 518, - "src": "546:65:6", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "d505accf", - "id": 499, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "permit", - "nameLocation": "647:6:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 497, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 484, - "mutability": "mutable", - "name": "_owner", - "nameLocation": "671:6:6", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "663:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 483, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "663:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 486, - "mutability": "mutable", - "name": "_spender", - "nameLocation": "695:8:6", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "687:16:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 485, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "687:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 488, - "mutability": "mutable", - "name": "_value", - "nameLocation": "721:6:6", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "713:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 487, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "713:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 490, - "mutability": "mutable", - "name": "_deadline", - "nameLocation": "745:9:6", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "737:17:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 489, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "737:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 492, - "mutability": "mutable", - "name": "_v", - "nameLocation": "770:2:6", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "764:8:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 491, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "764:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 494, - "mutability": "mutable", - "name": "_r", - "nameLocation": "790:2:6", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "782:10:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 493, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "782:7:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 496, - "mutability": "mutable", - "name": "_s", - "nameLocation": "810:2:6", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "802:10:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 495, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "802:7:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "653:165:6" - }, - "returnParameters": { - "id": 498, - "nodeType": "ParameterList", - "parameters": [], - "src": "827:0:6" - }, - "scope": 518, - "src": "638:190:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "39509351", - "id": 508, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "increaseAllowance", - "nameLocation": "867:17:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 504, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 501, - "mutability": "mutable", - "name": "spender", - "nameLocation": "893:7:6", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "885:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 500, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "885:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 503, - "mutability": "mutable", - "name": "addedValue", - "nameLocation": "910:10:6", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "902:18:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 502, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "902:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "884:37:6" - }, - "returnParameters": { - "id": 507, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 506, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "940:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 505, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "940:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "939:6:6" - }, - "scope": 518, - "src": "858:88:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "a457c2d7", - "id": 517, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "decreaseAllowance", - "nameLocation": "961:17:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 513, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 510, - "mutability": "mutable", - "name": "spender", - "nameLocation": "987:7:6", - "nodeType": "VariableDeclaration", - "scope": 517, - "src": "979:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 509, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "979:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 512, - "mutability": "mutable", - "name": "subtractedValue", - "nameLocation": "1004:15:6", - "nodeType": "VariableDeclaration", - "scope": 517, - "src": "996:23:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 511, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "996:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "978:42:6" - }, - "returnParameters": { - "id": 516, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 515, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 517, - "src": "1039:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 514, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1039:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1038:6:6" - }, - "scope": 518, - "src": "952:93:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 519, - "src": "139:908:6", - "usedErrors": [], - "usedEvents": [ - 5808, - 5817 - ] - } - ], - "src": "46:1002:6" - }, - "id": 6 - }, - "@graphprotocol/contracts/contracts/utils/TokenUtils.sol": { - "ast": { - "absolutePath": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", - "exportedSymbols": { - "IERC20": [ - 5874 - ], - "IGraphToken": [ - 518 - ], - "TokenUtils": [ - 600 - ] - }, - "id": 601, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 520, - "literals": [ - "solidity", - "^", - "0.7", - ".6", - "||", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:33:7" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "file": "../token/IGraphToken.sol", - "id": 521, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 601, - "sourceUnit": 519, - "src": "81:34:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "TokenUtils", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 522, - "nodeType": "StructuredDocumentation", - "src": "117:239:7", - "text": " @title TokenUtils library\n @notice This library contains utility functions for handling tokens (transfers and burns).\n It is specifically adapted for the GraphToken, so does not need to handle edge cases\n for other tokens." - }, - "fullyImplemented": true, - "id": 600, - "linearizedBaseContracts": [ - 600 - ], - "name": "TokenUtils", - "nameLocation": "365:10:7", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 551, - "nodeType": "Block", - "src": "684:135:7", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 535, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 533, - "name": "_amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 530, - "src": "698:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 534, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "708:1:7", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "698:11:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 550, - "nodeType": "IfStatement", - "src": "694:119:7", - "trueBody": { - "id": 549, - "nodeType": "Block", - "src": "711:102:7", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 539, - "name": "_from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 528, - "src": "758:5:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 542, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "773:4:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_TokenUtils_$600", - "typeString": "library TokenUtils" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_TokenUtils_$600", - "typeString": "library TokenUtils" - } - ], - "id": 541, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "765:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 540, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "765:7:7", - "typeDescriptions": {} - } - }, - "id": 543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "765:13:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 544, - "name": "_amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 530, - "src": "780:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 537, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 526, - "src": "733:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 538, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "745:12:7", - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 5873, - "src": "733:24:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - "id": 545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "733:55:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "217472616e73666572", - "id": 546, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "790:11:7", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50", - "typeString": "literal_string \"!transfer\"" - }, - "value": "!transfer" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50", - "typeString": "literal_string \"!transfer\"" - } - ], - "id": 536, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "725:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 547, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "725:77:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 548, - "nodeType": "ExpressionStatement", - "src": "725:77:7" - } - ] - } - } - ] - }, - "documentation": { - "id": 523, - "nodeType": "StructuredDocumentation", - "src": "382:211:7", - "text": " @dev Pull tokens from an address to this contract.\n @param _graphToken Token to transfer\n @param _from Address sending the tokens\n @param _amount Amount of tokens to transfer" - }, - "id": 552, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "pullTokens", - "nameLocation": "607:10:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 531, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 526, - "mutability": "mutable", - "name": "_graphToken", - "nameLocation": "630:11:7", - "nodeType": "VariableDeclaration", - "scope": 552, - "src": "618:23:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - }, - "typeName": { - "id": 525, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 524, - "name": "IGraphToken", - "nameLocations": [ - "618:11:7" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 518, - "src": "618:11:7" - }, - "referencedDeclaration": 518, - "src": "618:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 528, - "mutability": "mutable", - "name": "_from", - "nameLocation": "651:5:7", - "nodeType": "VariableDeclaration", - "scope": 552, - "src": "643:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 527, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "643:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 530, - "mutability": "mutable", - "name": "_amount", - "nameLocation": "666:7:7", - "nodeType": "VariableDeclaration", - "scope": 552, - "src": "658:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 529, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "658:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "617:57:7" - }, - "returnParameters": { - "id": 532, - "nodeType": "ParameterList", - "parameters": [], - "src": "684:0:7" - }, - "scope": 600, - "src": "598:221:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 577, - "nodeType": "Block", - "src": "1134:114:7", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 563, - "name": "_amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 560, - "src": "1148:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 564, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1158:1:7", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1148:11:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 576, - "nodeType": "IfStatement", - "src": "1144:98:7", - "trueBody": { - "id": 575, - "nodeType": "Block", - "src": "1161:81:7", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 569, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 558, - "src": "1204:3:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 570, - "name": "_amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 560, - "src": "1209:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 567, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 556, - "src": "1183:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1195:8:7", - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 5841, - "src": "1183:20:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 571, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1183:34:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "217472616e73666572", - "id": 572, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1219:11:7", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50", - "typeString": "literal_string \"!transfer\"" - }, - "value": "!transfer" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50", - "typeString": "literal_string \"!transfer\"" - } - ], - "id": 566, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1175:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 573, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1175:56:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 574, - "nodeType": "ExpressionStatement", - "src": "1175:56:7" - } - ] - } - } - ] - }, - "documentation": { - "id": 553, - "nodeType": "StructuredDocumentation", - "src": "825:220:7", - "text": " @dev Push tokens from this contract to a receiving address.\n @param _graphToken Token to transfer\n @param _to Address receiving the tokens\n @param _amount Amount of tokens to transfer" - }, - "id": 578, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "pushTokens", - "nameLocation": "1059:10:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 561, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 556, - "mutability": "mutable", - "name": "_graphToken", - "nameLocation": "1082:11:7", - "nodeType": "VariableDeclaration", - "scope": 578, - "src": "1070:23:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - }, - "typeName": { - "id": 555, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 554, - "name": "IGraphToken", - "nameLocations": [ - "1070:11:7" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 518, - "src": "1070:11:7" - }, - "referencedDeclaration": 518, - "src": "1070:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 558, - "mutability": "mutable", - "name": "_to", - "nameLocation": "1103:3:7", - "nodeType": "VariableDeclaration", - "scope": 578, - "src": "1095:11:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 557, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1095:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 560, - "mutability": "mutable", - "name": "_amount", - "nameLocation": "1116:7:7", - "nodeType": "VariableDeclaration", - "scope": 578, - "src": "1108:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 559, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1108:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1069:55:7" - }, - "returnParameters": { - "id": 562, - "nodeType": "ParameterList", - "parameters": [], - "src": "1134:0:7" - }, - "scope": 600, - "src": "1050:198:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 598, - "nodeType": "Block", - "src": "1475:83:7", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 589, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 587, - "name": "_amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 584, - "src": "1489:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 588, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1499:1:7", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1489:11:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 597, - "nodeType": "IfStatement", - "src": "1485:67:7", - "trueBody": { - "id": 596, - "nodeType": "Block", - "src": "1502:50:7", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 593, - "name": "_amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 584, - "src": "1533:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 590, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 582, - "src": "1516:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 592, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1528:4:7", - "memberName": "burn", - "nodeType": "MemberAccess", - "referencedDeclaration": 448, - "src": "1516:16:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256) external" - } - }, - "id": 594, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1516:25:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 595, - "nodeType": "ExpressionStatement", - "src": "1516:25:7" - } - ] - } - } - ] - }, - "documentation": { - "id": 579, - "nodeType": "StructuredDocumentation", - "src": "1254:145:7", - "text": " @dev Burn tokens held by this contract.\n @param _graphToken Token to burn\n @param _amount Amount of tokens to burn" - }, - "id": 599, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "burnTokens", - "nameLocation": "1413:10:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 585, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 582, - "mutability": "mutable", - "name": "_graphToken", - "nameLocation": "1436:11:7", - "nodeType": "VariableDeclaration", - "scope": 599, - "src": "1424:23:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - }, - "typeName": { - "id": 581, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 580, - "name": "IGraphToken", - "nameLocations": [ - "1424:11:7" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 518, - "src": "1424:11:7" - }, - "referencedDeclaration": 518, - "src": "1424:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 584, - "mutability": "mutable", - "name": "_amount", - "nameLocation": "1457:7:7", - "nodeType": "VariableDeclaration", - "scope": 599, - "src": "1449:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 583, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1449:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1423:42:7" - }, - "returnParameters": { - "id": 586, - "nodeType": "ParameterList", - "parameters": [], - "src": "1475:0:7" - }, - "scope": 600, - "src": "1404:154:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 601, - "src": "357:1203:7", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:1515:7" - }, - "id": 7 - }, - "@graphprotocol/horizon/contracts/data-service/DataService.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataService.sol", - "exportedSymbols": { - "DataService": [ - 696 - ], - "DataServiceV1Storage": [ - 704 - ], - "GraphDirectory": [ - 4653 - ], - "IDataService": [ - 1318 - ], - "ProvisionManager": [ - 2128 - ] - }, - "id": 697, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 602, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:8" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol", - "file": "./interfaces/IDataService.sol", - "id": 604, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 697, - "sourceUnit": 1319, - "src": "70:61:8", - "symbolAliases": [ - { - "foreign": { - "id": 603, - "name": "IDataService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1318, - "src": "79:12:8", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol", - "file": "./DataServiceStorage.sol", - "id": 606, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 697, - "sourceUnit": 705, - "src": "133:64:8", - "symbolAliases": [ - { - "foreign": { - "id": 605, - "name": "DataServiceV1Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 704, - "src": "142:20:8", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", - "file": "../utilities/GraphDirectory.sol", - "id": 608, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 697, - "sourceUnit": 4654, - "src": "198:65:8", - "symbolAliases": [ - { - "foreign": { - "id": 607, - "name": "GraphDirectory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4653, - "src": "207:14:8", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol", - "file": "./utilities/ProvisionManager.sol", - "id": 610, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 697, - "sourceUnit": 2129, - "src": "264:68:8", - "symbolAliases": [ - { - "foreign": { - "id": 609, - "name": "ProvisionManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2128, - "src": "273:16:8", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 612, - "name": "GraphDirectory", - "nameLocations": [ - "1575:14:8" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4653, - "src": "1575:14:8" - }, - "id": 613, - "nodeType": "InheritanceSpecifier", - "src": "1575:14:8" - }, - { - "baseName": { - "id": 614, - "name": "ProvisionManager", - "nameLocations": [ - "1591:16:8" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2128, - "src": "1591:16:8" - }, - "id": 615, - "nodeType": "InheritanceSpecifier", - "src": "1591:16:8" - }, - { - "baseName": { - "id": 616, - "name": "DataServiceV1Storage", - "nameLocations": [ - "1609:20:8" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 704, - "src": "1609:20:8" - }, - "id": 617, - "nodeType": "InheritanceSpecifier", - "src": "1609:20:8" - }, - { - "baseName": { - "id": 618, - "name": "IDataService", - "nameLocations": [ - "1631:12:8" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1318, - "src": "1631:12:8" - }, - "id": 619, - "nodeType": "InheritanceSpecifier", - "src": "1631:12:8" - } - ], - "canonicalName": "DataService", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 611, - "nodeType": "StructuredDocumentation", - "src": "334:1207:8", - "text": " @title DataService contract\n @dev Implementation of the {IDataService} interface.\n @notice This implementation provides base functionality for a data service:\n - GraphDirectory, allows the data service to interact with Graph Horizon contracts\n - ProvisionManager, provides functionality to manage provisions\n The derived contract MUST implement all the interfaces described in {IDataService} and in\n accordance with the Data Service framework.\n @dev A note on upgradeability: this base contract can be inherited by upgradeable or non upgradeable\n contracts.\n - If the data service implementation is upgradeable, it must initialize the contract via an external\n initializer function with the `initializer` modifier that calls {__DataService_init} or\n {__DataService_init_unchained}. It's recommended the implementation constructor to also call\n {_disableInitializers} to prevent the implementation from being initialized.\n - If the data service implementation is NOT upgradeable, it must initialize the contract by calling\n {__DataService_init} or {__DataService_init_unchained} in the constructor. Note that the `initializer`\n will be required in the constructor." - }, - "fullyImplemented": false, - "id": 696, - "linearizedBaseContracts": [ - 696, - 1318, - 704, - 2128, - 2158, - 4653, - 5102 - ], - "name": "DataService", - "nameLocation": "1560:11:8", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 628, - "nodeType": "Block", - "src": "1902:2:8", - "statements": [] - }, - "documentation": { - "id": 620, - "nodeType": "StructuredDocumentation", - "src": "1650:188:8", - "text": " @dev Addresses in GraphDirectory are immutables, they can only be set in this constructor.\n @param controller The address of the Graph Horizon controller contract." - }, - "id": 629, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 625, - "name": "controller", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 622, - "src": "1890:10:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 626, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 624, - "name": "GraphDirectory", - "nameLocations": [ - "1875:14:8" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4653, - "src": "1875:14:8" - }, - "nodeType": "ModifierInvocation", - "src": "1875:26:8" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 623, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 622, - "mutability": "mutable", - "name": "controller", - "nameLocation": "1863:10:8", - "nodeType": "VariableDeclaration", - "scope": 629, - "src": "1855:18:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 621, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1855:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1854:20:8" - }, - "returnParameters": { - "id": 627, - "nodeType": "ParameterList", - "parameters": [], - "src": "1902:0:8" - }, - "scope": 696, - "src": "1843:61:8", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 641, - "nodeType": "Block", - "src": "2101:92:8", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 635, - "name": "__ProvisionManager_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1760, - "src": "2111:33:8", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 636, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2111:35:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 637, - "nodeType": "ExpressionStatement", - "src": "2111:35:8" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 638, - "name": "__DataService_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 649, - "src": "2156:28:8", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 639, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2156:30:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 640, - "nodeType": "ExpressionStatement", - "src": "2156:30:8" - } - ] - }, - "documentation": { - "id": 630, - "nodeType": "StructuredDocumentation", - "src": "1910:77:8", - "text": " @notice Initializes the contract and any parent contracts." - }, - "id": 642, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 633, - "kind": "modifierInvocation", - "modifierName": { - "id": 632, - "name": "onlyInitializing", - "nameLocations": [ - "2084:16:8" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "2084:16:8" - }, - "nodeType": "ModifierInvocation", - "src": "2084:16:8" - } - ], - "name": "__DataService_init", - "nameLocation": "2054:18:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 631, - "nodeType": "ParameterList", - "parameters": [], - "src": "2072:2:8" - }, - "returnParameters": { - "id": 634, - "nodeType": "ParameterList", - "parameters": [], - "src": "2101:0:8" - }, - "scope": 696, - "src": "2045:148:8", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 648, - "nodeType": "Block", - "src": "2375:2:8", - "statements": [] - }, - "documentation": { - "id": 643, - "nodeType": "StructuredDocumentation", - "src": "2199:52:8", - "text": " @notice Initializes the contract." - }, - "id": 649, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 646, - "kind": "modifierInvocation", - "modifierName": { - "id": 645, - "name": "onlyInitializing", - "nameLocations": [ - "2358:16:8" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "2358:16:8" - }, - "nodeType": "ModifierInvocation", - "src": "2358:16:8" - } - ], - "name": "__DataService_init_unchained", - "nameLocation": "2318:28:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 644, - "nodeType": "ParameterList", - "parameters": [], - "src": "2346:2:8" - }, - "returnParameters": { - "id": 647, - "nodeType": "ParameterList", - "parameters": [], - "src": "2375:0:8" - }, - "scope": 696, - "src": "2309:68:8", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [ - 1295 - ], - "body": { - "id": 660, - "nodeType": "Block", - "src": "2528:48:8", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 657, - "name": "_getThawingPeriodRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2050, - "src": "2545:22:8", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$_t_uint64_$", - "typeString": "function () view returns (uint64,uint64)" - } - }, - "id": 658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2545:24:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint64_$_t_uint64_$", - "typeString": "tuple(uint64,uint64)" - } - }, - "functionReturnParameters": 656, - "id": 659, - "nodeType": "Return", - "src": "2538:31:8" - } - ] - }, - "documentation": { - "id": 650, - "nodeType": "StructuredDocumentation", - "src": "2383:68:8", - "text": " @notice See {IDataService-getThawingPeriodRange}." - }, - "functionSelector": "71ce020a", - "id": 661, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getThawingPeriodRange", - "nameLocation": "2465:21:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 651, - "nodeType": "ParameterList", - "parameters": [], - "src": "2486:2:8" - }, - "returnParameters": { - "id": 656, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 653, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 661, - "src": "2512:6:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 652, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "2512:6:8", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 655, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 661, - "src": "2520:6:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 654, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "2520:6:8", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "2511:16:8" - }, - "scope": 696, - "src": "2456:120:8", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1303 - ], - "body": { - "id": 672, - "nodeType": "Block", - "src": "2723:46:8", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 669, - "name": "_getVerifierCutRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2063, - "src": "2740:20:8", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$_t_uint32_$", - "typeString": "function () view returns (uint32,uint32)" - } - }, - "id": 670, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2740:22:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$", - "typeString": "tuple(uint32,uint32)" - } - }, - "functionReturnParameters": 668, - "id": 671, - "nodeType": "Return", - "src": "2733:29:8" - } - ] - }, - "documentation": { - "id": 662, - "nodeType": "StructuredDocumentation", - "src": "2582:66:8", - "text": " @notice See {IDataService-getVerifierCutRange}." - }, - "functionSelector": "482468b7", - "id": 673, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getVerifierCutRange", - "nameLocation": "2662:19:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 663, - "nodeType": "ParameterList", - "parameters": [], - "src": "2681:2:8" - }, - "returnParameters": { - "id": 668, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 665, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 673, - "src": "2707:6:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 664, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2707:6:8", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 667, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 673, - "src": "2715:6:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 666, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2715:6:8", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2706:16:8" - }, - "scope": 696, - "src": "2653:116:8", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1311 - ], - "body": { - "id": 684, - "nodeType": "Block", - "src": "2926:50:8", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 681, - "name": "_getProvisionTokensRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2037, - "src": "2943:24:8", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$", - "typeString": "function () view returns (uint256,uint256)" - } - }, - "id": 682, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2943:26:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "functionReturnParameters": 680, - "id": 683, - "nodeType": "Return", - "src": "2936:33:8" - } - ] - }, - "documentation": { - "id": 674, - "nodeType": "StructuredDocumentation", - "src": "2775:70:8", - "text": " @notice See {IDataService-getProvisionTokensRange}." - }, - "functionSelector": "819ba366", - "id": 685, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getProvisionTokensRange", - "nameLocation": "2859:23:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 675, - "nodeType": "ParameterList", - "parameters": [], - "src": "2882:2:8" - }, - "returnParameters": { - "id": 680, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 677, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 685, - "src": "2908:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 676, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2908:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 679, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 685, - "src": "2917:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 678, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2917:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2907:18:8" - }, - "scope": 696, - "src": "2850:126:8", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1317 - ], - "body": { - "id": 694, - "nodeType": "Block", - "src": "3113:45:8", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 691, - "name": "_getDelegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2024, - "src": "3130:19:8", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$", - "typeString": "function () view returns (uint32)" - } - }, - "id": 692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3130:21:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "functionReturnParameters": 690, - "id": 693, - "nodeType": "Return", - "src": "3123:28:8" - } - ] - }, - "documentation": { - "id": 686, - "nodeType": "StructuredDocumentation", - "src": "2982:65:8", - "text": " @notice See {IDataService-getDelegationRatio}." - }, - "functionSelector": "1ebb7c30", - "id": 695, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getDelegationRatio", - "nameLocation": "3061:18:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 687, - "nodeType": "ParameterList", - "parameters": [], - "src": "3079:2:8" - }, - "returnParameters": { - "id": 690, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 689, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 695, - "src": "3105:6:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 688, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "3105:6:8", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "3104:8:8" - }, - "scope": 696, - "src": "3052:106:8", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 697, - "src": "1542:1618:8", - "usedErrors": [ - 1658, - 1665, - 1672, - 1677, - 4380, - 4865, - 4868 - ], - "usedEvents": [ - 1198, - 1203, - 1210, - 1217, - 1227, - 1234, - 1628, - 1633, - 1640, - 1647, - 4375, - 4873 - ] - } - ], - "src": "45:3116:8" - }, - "id": 8 - }, - "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol", - "exportedSymbols": { - "DataServiceV1Storage": [ - 704 - ] - }, - "id": 705, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 698, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:9" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "DataServiceV1Storage", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "id": 704, - "linearizedBaseContracts": [ - 704 - ], - "name": "DataServiceV1Storage", - "nameLocation": "88:20:9", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 699, - "nodeType": "StructuredDocumentation", - "src": "115:57:9", - "text": "@dev Gap to allow adding variables in future upgrades" - }, - "id": 703, - "mutability": "mutable", - "name": "__gap", - "nameLocation": "197:5:9", - "nodeType": "VariableDeclaration", - "scope": 704, - "src": "177:25:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage", - "typeString": "uint256[50]" - }, - "typeName": { - "baseType": { - "id": 700, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "177:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 702, - "length": { - "hexValue": "3530", - "id": 701, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "185:2:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_50_by_1", - "typeString": "int_const 50" - }, - "value": "50" - }, - "nodeType": "ArrayTypeName", - "src": "177:11:9", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", - "typeString": "uint256[50]" - } - }, - "visibility": "private" - } - ], - "scope": 705, - "src": "70:135:9", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "45:161:9" - }, - "id": 9 - }, - "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol", - "exportedSymbols": { - "DataService": [ - 696 - ], - "DataServiceFees": [ - 1052 - ], - "DataServiceFeesV1Storage": [ - 1081 - ], - "IDataServiceFees": [ - 1381 - ], - "LinkedList": [ - 4087 - ], - "ProvisionTracker": [ - 1555 - ] - }, - "id": 1053, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 706, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:10" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", - "file": "../interfaces/IDataServiceFees.sol", - "id": 708, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1053, - "sourceUnit": 1382, - "src": "70:70:10", - "symbolAliases": [ - { - "foreign": { - "id": 707, - "name": "IDataServiceFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1381, - "src": "79:16:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol", - "file": "../libraries/ProvisionTracker.sol", - "id": 710, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1053, - "sourceUnit": 1556, - "src": "142:69:10", - "symbolAliases": [ - { - "foreign": { - "id": 709, - "name": "ProvisionTracker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1555, - "src": "151:16:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/LinkedList.sol", - "file": "../../libraries/LinkedList.sol", - "id": 712, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1053, - "sourceUnit": 4088, - "src": "212:60:10", - "symbolAliases": [ - { - "foreign": { - "id": 711, - "name": "LinkedList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4087, - "src": "221:10:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataService.sol", - "file": "../DataService.sol", - "id": 714, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1053, - "sourceUnit": 697, - "src": "274:49:10", - "symbolAliases": [ - { - "foreign": { - "id": 713, - "name": "DataService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 696, - "src": "283:11:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol", - "file": "./DataServiceFeesStorage.sol", - "id": 716, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1053, - "sourceUnit": 1082, - "src": "324:72:10", - "symbolAliases": [ - { - "foreign": { - "id": 715, - "name": "DataServiceFeesV1Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1081, - "src": "333:24:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 718, - "name": "DataService", - "nameLocations": [ - "698:11:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 696, - "src": "698:11:10" - }, - "id": 719, - "nodeType": "InheritanceSpecifier", - "src": "698:11:10" - }, - { - "baseName": { - "id": 720, - "name": "DataServiceFeesV1Storage", - "nameLocations": [ - "711:24:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1081, - "src": "711:24:10" - }, - "id": 721, - "nodeType": "InheritanceSpecifier", - "src": "711:24:10" - }, - { - "baseName": { - "id": 722, - "name": "IDataServiceFees", - "nameLocations": [ - "737:16:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1381, - "src": "737:16:10" - }, - "id": 723, - "nodeType": "InheritanceSpecifier", - "src": "737:16:10" - } - ], - "canonicalName": "DataServiceFees", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 717, - "nodeType": "StructuredDocumentation", - "src": "398:262:10", - "text": " @title DataServiceFees contract\n @dev Implementation of the {IDataServiceFees} interface.\n @notice Extension for the {IDataService} contract to handle payment collateralization\n using a Horizon provision. See {IDataServiceFees} for more details." - }, - "fullyImplemented": false, - "id": 1052, - "internalFunctionIDs": { - "958": 1, - "970": 2, - "1028": 3 - }, - "linearizedBaseContracts": [ - 1052, - 1381, - 1081, - 696, - 1318, - 704, - 2128, - 2158, - 4653, - 5102 - ], - "name": "DataServiceFees", - "nameLocation": "679:15:10", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 728, - "libraryName": { - "id": 724, - "name": "ProvisionTracker", - "nameLocations": [ - "766:16:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1555, - "src": "766:16:10" - }, - "nodeType": "UsingForDirective", - "src": "760:55:10", - "typeName": { - "id": 727, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 725, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "795:7:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "787:27:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 726, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "806:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - { - "global": false, - "id": 732, - "libraryName": { - "id": 729, - "name": "LinkedList", - "nameLocations": [ - "826:10:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4087, - "src": "826:10:10" - }, - "nodeType": "UsingForDirective", - "src": "820:37:10", - "typeName": { - "id": 731, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 730, - "name": "LinkedList.List", - "nameLocations": [ - "841:10:10", - "852:4:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3813, - "src": "841:15:10" - }, - "referencedDeclaration": 3813, - "src": "841:15:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - } - } - }, - { - "baseFunctions": [ - 1380 - ], - "body": { - "id": 745, - "nodeType": "Block", - "src": "1006:62:10", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 740, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1030:3:10", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 741, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1034:6:10", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1030:10:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 742, - "name": "numClaimsToRelease", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 735, - "src": "1042:18:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 739, - "name": "_releaseStake", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 880, - "src": "1016:13:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 743, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1016:45:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 744, - "nodeType": "ExpressionStatement", - "src": "1016:45:10" - } - ] - }, - "documentation": { - "id": 733, - "nodeType": "StructuredDocumentation", - "src": "863:62:10", - "text": " @notice See {IDataServiceFees-releaseStake}" - }, - "functionSelector": "45f54485", - "id": 746, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "releaseStake", - "nameLocation": "939:12:10", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 737, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "997:8:10" - }, - "parameters": { - "id": 736, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 735, - "mutability": "mutable", - "name": "numClaimsToRelease", - "nameLocation": "960:18:10", - "nodeType": "VariableDeclaration", - "scope": 746, - "src": "952:26:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 734, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "952:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "951:28:10" - }, - "returnParameters": { - "id": 738, - "nodeType": "ParameterList", - "parameters": [], - "src": "1006:0:10" - }, - "scope": 1052, - "src": "930:138:10", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "external" - }, - { - "body": { - "id": 832, - "nodeType": "Block", - "src": "1717:761:10", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 759, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 757, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 751, - "src": "1735:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 758, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1746:1:10", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1735:12:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 760, - "name": "DataServiceFeesZeroTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1374, - "src": "1749:25:10", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 761, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1749:27:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 756, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1727:7:10", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1727:50:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 763, - "nodeType": "ExpressionStatement", - "src": "1727:50:10" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 767, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "1813:13:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 768, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1813:15:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - { - "id": 769, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 749, - "src": "1830:16:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 770, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 751, - "src": "1848:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 771, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "1857:15:10", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "id": 764, - "name": "feesProvisionTracker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1063, - "src": "1787:20:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 766, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1808:4:10", - "memberName": "lock", - "nodeType": "MemberAccess", - "referencedDeclaration": 1480, - "src": "1787:25:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_contract$_IHorizonStaking_$2235_$_t_address_$_t_uint256_$_t_uint32_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "function (mapping(address => uint256),contract IHorizonStaking,address,uint256,uint32)" - } - }, - "id": 772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1787:86:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 773, - "nodeType": "ExpressionStatement", - "src": "1787:86:10" - }, - { - "assignments": [ - 778 - ], - "declarations": [ - { - "constant": false, - "id": 778, - "mutability": "mutable", - "name": "claimsList", - "nameLocation": "1908:10:10", - "nodeType": "VariableDeclaration", - "scope": 832, - "src": "1884:34:10", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - }, - "typeName": { - "id": 777, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 776, - "name": "LinkedList.List", - "nameLocations": [ - "1884:10:10", - "1895:4:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3813, - "src": "1884:15:10" - }, - "referencedDeclaration": 3813, - "src": "1884:15:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - } - }, - "visibility": "internal" - } - ], - "id": 782, - "initialValue": { - "baseExpression": { - "id": 779, - "name": "claimsLists", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1075, - "src": "1921:11:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_List_$3813_storage_$", - "typeString": "mapping(address => struct LinkedList.List storage ref)" - } - }, - "id": 781, - "indexExpression": { - "id": 780, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 749, - "src": "1933:16:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1921:29:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage", - "typeString": "struct LinkedList.List storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1884:66:10" - }, - { - "assignments": [ - 784 - ], - "declarations": [ - { - "constant": false, - "id": 784, - "mutability": "mutable", - "name": "claimId", - "nameLocation": "2006:7:10", - "nodeType": "VariableDeclaration", - "scope": 832, - "src": "1998:15:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 783, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1998:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 790, - "initialValue": { - "arguments": [ - { - "id": 786, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 749, - "src": "2035:16:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 787, - "name": "claimsList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 778, - "src": "2053:10:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 788, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2064:5:10", - "memberName": "nonce", - "nodeType": "MemberAccess", - "referencedDeclaration": 3810, - "src": "2053:16:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 785, - "name": "_buildStakeClaimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1051, - "src": "2016:18:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bytes32_$", - "typeString": "function (address,uint256) view returns (bytes32)" - } - }, - "id": 789, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2016:54:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1998:72:10" - }, - { - "expression": { - "id": 804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 791, - "name": "claims", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1069, - "src": "2080:6:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", - "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" - } - }, - "id": 793, - "indexExpression": { - "id": 792, - "name": "claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 784, - "src": "2087:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2080:15:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", - "typeString": "struct IDataServiceFees.StakeClaim storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 795, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 751, - "src": "2131:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 796, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "2163:5:10", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2169:9:10", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "2163:15:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 798, - "name": "_unlockTimestamp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 753, - "src": "2206:16:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 801, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2255:1:10", - "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": 800, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2247:7:10", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 799, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2247:7:10", - "typeDescriptions": {} - } - }, - "id": 802, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2247:10:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 794, - "name": "StakeClaim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1335, - "src": "2098:10:10", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_StakeClaim_$1335_storage_ptr_$", - "typeString": "type(struct IDataServiceFees.StakeClaim storage pointer)" - } - }, - "id": 803, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [ - "2123:6:10", - "2152:9:10", - "2192:12:10", - "2236:9:10" - ], - "names": [ - "tokens", - "createdAt", - "releasableAt", - "nextClaim" - ], - "nodeType": "FunctionCall", - "src": "2098:170:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "src": "2080:188:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", - "typeString": "struct IDataServiceFees.StakeClaim storage ref" - } - }, - "id": 805, - "nodeType": "ExpressionStatement", - "src": "2080:188:10" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 806, - "name": "claimsList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 778, - "src": "2282:10:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 807, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2293:5:10", - "memberName": "count", - "nodeType": "MemberAccess", - "referencedDeclaration": 3812, - "src": "2282:16:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 808, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2302:1:10", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2282:21:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 818, - "nodeType": "IfStatement", - "src": "2278:70:10", - "trueBody": { - "expression": { - "id": 816, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 810, - "name": "claims", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1069, - "src": "2305:6:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", - "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" - } - }, - "id": 813, - "indexExpression": { - "expression": { - "id": 811, - "name": "claimsList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 778, - "src": "2312:10:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 812, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2323:4:10", - "memberName": "tail", - "nodeType": "MemberAccess", - "referencedDeclaration": 3808, - "src": "2312:15:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2305:23:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", - "typeString": "struct IDataServiceFees.StakeClaim storage ref" - } - }, - "id": 814, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "2329:9:10", - "memberName": "nextClaim", - "nodeType": "MemberAccess", - "referencedDeclaration": 1334, - "src": "2305:33:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 815, - "name": "claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 784, - "src": "2341:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "2305:43:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 817, - "nodeType": "ExpressionStatement", - "src": "2305:43:10" - } - }, - { - "expression": { - "arguments": [ - { - "id": 822, - "name": "claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 784, - "src": "2377:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 819, - "name": "claimsList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 778, - "src": "2358:10:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 821, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2369:7:10", - "memberName": "addTail", - "nodeType": "MemberAccess", - "referencedDeclaration": 3895, - "src": "2358:18:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_List_$3813_storage_ptr_$_t_bytes32_$returns$__$attached_to$_t_struct$_List_$3813_storage_ptr_$", - "typeString": "function (struct LinkedList.List storage pointer,bytes32)" - } - }, - "id": 823, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2358:27:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 824, - "nodeType": "ExpressionStatement", - "src": "2358:27:10" - }, - { - "eventCall": { - "arguments": [ - { - "id": 826, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 749, - "src": "2418:16:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 827, - "name": "claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 784, - "src": "2436:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 828, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 751, - "src": "2445:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 829, - "name": "_unlockTimestamp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 753, - "src": "2454:16:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 825, - "name": "StakeClaimLocked", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1346, - "src": "2401:16:10", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,bytes32,uint256,uint256)" - } - }, - "id": 830, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2401:70:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 831, - "nodeType": "EmitStatement", - "src": "2396:75:10" - } - ] - }, - "documentation": { - "id": 747, - "nodeType": "StructuredDocumentation", - "src": "1074:540:10", - "text": " @notice Locks stake for a service provider to back a payment.\n Creates a stake claim, which is stored in a linked list by service provider.\n @dev Requirements:\n - The associated provision must have enough available tokens to lock the stake.\n Emits a {StakeClaimLocked} event.\n @param _serviceProvider The address of the service provider\n @param _tokens The amount of tokens to lock in the claim\n @param _unlockTimestamp The timestamp when the tokens can be released" - }, - "id": 833, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_lockStake", - "nameLocation": "1628:10:10", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 754, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 749, - "mutability": "mutable", - "name": "_serviceProvider", - "nameLocation": "1647:16:10", - "nodeType": "VariableDeclaration", - "scope": 833, - "src": "1639:24:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 748, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1639:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 751, - "mutability": "mutable", - "name": "_tokens", - "nameLocation": "1673:7:10", - "nodeType": "VariableDeclaration", - "scope": 833, - "src": "1665:15:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 750, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1665:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 753, - "mutability": "mutable", - "name": "_unlockTimestamp", - "nameLocation": "1690:16:10", - "nodeType": "VariableDeclaration", - "scope": 833, - "src": "1682:24:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 752, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1682:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1638:69:10" - }, - "returnParameters": { - "id": 755, - "nodeType": "ParameterList", - "parameters": [], - "src": "1717:0:10" - }, - "scope": 1052, - "src": "1619:859:10", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 879, - "nodeType": "Block", - "src": "2638:439:10", - "statements": [ - { - "assignments": [ - 845 - ], - "declarations": [ - { - "constant": false, - "id": 845, - "mutability": "mutable", - "name": "claimsList", - "nameLocation": "2672:10:10", - "nodeType": "VariableDeclaration", - "scope": 879, - "src": "2648:34:10", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - }, - "typeName": { - "id": 844, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 843, - "name": "LinkedList.List", - "nameLocations": [ - "2648:10:10", - "2659:4:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3813, - "src": "2648:15:10" - }, - "referencedDeclaration": 3813, - "src": "2648:15:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - } - }, - "visibility": "internal" - } - ], - "id": 849, - "initialValue": { - "baseExpression": { - "id": 846, - "name": "claimsLists", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1075, - "src": "2685:11:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_List_$3813_storage_$", - "typeString": "mapping(address => struct LinkedList.List storage ref)" - } - }, - "id": 848, - "indexExpression": { - "id": 847, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "2697:16:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2685:29:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage", - "typeString": "struct LinkedList.List storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2648:66:10" - }, - { - "assignments": [ - 851, - 853 - ], - "declarations": [ - { - "constant": false, - "id": 851, - "mutability": "mutable", - "name": "claimsReleased", - "nameLocation": "2733:14:10", - "nodeType": "VariableDeclaration", - "scope": 879, - "src": "2725:22:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 850, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2725:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 853, - "mutability": "mutable", - "name": "data", - "nameLocation": "2762:4:10", - "nodeType": "VariableDeclaration", - "scope": 879, - "src": "2749:17:10", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 852, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2749:5:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 866, - "initialValue": { - "arguments": [ - { - "id": 856, - "name": "_getNextStakeClaim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "2803:18:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - } - }, - { - "id": 857, - "name": "_processStakeClaim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 958, - "src": "2835:18:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes32,bytes memory) returns (bool,bytes memory)" - } - }, - { - "id": 858, - "name": "_deleteStakeClaim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "2867:17:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 861, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2909:1:10", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "id": 862, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "2912:16:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 859, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "2898:3:10", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 860, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2902:6:10", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "2898:10:10", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 863, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2898:31:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 864, - "name": "_numClaimsToRelease", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 838, - "src": "2943:19:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - }, - { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes32,bytes memory) returns (bool,bytes memory)" - }, - { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 854, - "name": "claimsList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 845, - "src": "2770:10:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 855, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2781:8:10", - "memberName": "traverse", - "nodeType": "MemberAccess", - "referencedDeclaration": 4086, - "src": "2770:19:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_List_$3813_storage_ptr_$_t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$_$_t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$_$_t_function_internal_nonpayable$_t_bytes32_$returns$__$_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$_t_bytes_memory_ptr_$attached_to$_t_struct$_List_$3813_storage_ptr_$", - "typeString": "function (struct LinkedList.List storage pointer,function (bytes32) view returns (bytes32),function (bytes32,bytes memory) returns (bool,bytes memory),function (bytes32),bytes memory,uint256) returns (uint256,bytes memory)" - } - }, - "id": 865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2770:202:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_bytes_memory_ptr_$", - "typeString": "tuple(uint256,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2724:248:10" - }, - { - "eventCall": { - "arguments": [ - { - "id": 868, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "3008:16:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 869, - "name": "claimsReleased", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 851, - "src": "3026:14:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 872, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 853, - "src": "3053:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "components": [ - { - "id": 874, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3060:7:10", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 873, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3060:7:10", - "typeDescriptions": {} - } - } - ], - "id": 875, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3059:9:10", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "expression": { - "id": 870, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "3042:3:10", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 871, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3046:6:10", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "3042:10:10", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 876, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3042:27:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 867, - "name": "StakeClaimsReleased", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1366, - "src": "2988:19:10", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 877, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2988:82:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 878, - "nodeType": "EmitStatement", - "src": "2983:87:10" - } - ] - }, - "documentation": { - "id": 834, - "nodeType": "StructuredDocumentation", - "src": "2484:62:10", - "text": " @notice See {IDataServiceFees-releaseStake}" - }, - "id": 880, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_releaseStake", - "nameLocation": "2560:13:10", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 839, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 836, - "mutability": "mutable", - "name": "_serviceProvider", - "nameLocation": "2582:16:10", - "nodeType": "VariableDeclaration", - "scope": 880, - "src": "2574:24:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 835, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2574:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 838, - "mutability": "mutable", - "name": "_numClaimsToRelease", - "nameLocation": "2608:19:10", - "nodeType": "VariableDeclaration", - "scope": 880, - "src": "2600:27:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 837, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2600:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2573:55:10" - }, - "returnParameters": { - "id": 840, - "nodeType": "ParameterList", - "parameters": [], - "src": "2638:0:10" - }, - "scope": 1052, - "src": "2551:526:10", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 957, - "nodeType": "Block", - "src": "3654:624:10", - "statements": [ - { - "assignments": [ - 894 - ], - "declarations": [ - { - "constant": false, - "id": 894, - "mutability": "mutable", - "name": "claim", - "nameLocation": "3682:5:10", - "nodeType": "VariableDeclaration", - "scope": 957, - "src": "3664:23:10", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim" - }, - "typeName": { - "id": 893, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 892, - "name": "StakeClaim", - "nameLocations": [ - "3664:10:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1335, - "src": "3664:10:10" - }, - "referencedDeclaration": 1335, - "src": "3664:10:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", - "typeString": "struct IDataServiceFees.StakeClaim" - } - }, - "visibility": "internal" - } - ], - "id": 898, - "initialValue": { - "arguments": [ - { - "id": 896, - "name": "_claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 883, - "src": "3705:8:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 895, - "name": "_getStakeClaim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 999, - "src": "3690:14:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_struct$_StakeClaim_$1335_memory_ptr_$", - "typeString": "function (bytes32) view returns (struct IDataServiceFees.StakeClaim memory)" - } - }, - "id": 897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3690:24:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3664:50:10" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 903, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 899, - "name": "claim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 894, - "src": "3751:5:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "id": 900, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3757:12:10", - "memberName": "releasableAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 1332, - "src": "3751:18:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "expression": { - "id": 901, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "3772:5:10", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 902, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3778:9:10", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "3772:15:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3751:36:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 910, - "nodeType": "IfStatement", - "src": "3747:103:10", - "trueBody": { - "id": 909, - "nodeType": "Block", - "src": "3789:61:10", - "statements": [ - { - "expression": { - "components": [ - { - "hexValue": "74727565", - "id": 904, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3811:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "expression": { - "id": 905, - "name": "LinkedList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4087, - "src": "3817:10:10", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_LinkedList_$4087_$", - "typeString": "type(library LinkedList)" - } - }, - "id": 906, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3828:10:10", - "memberName": "NULL_BYTES", - "nodeType": "MemberAccess", - "referencedDeclaration": 3820, - "src": "3817:21:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "id": 907, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3810:29:10", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "functionReturnParameters": 891, - "id": 908, - "nodeType": "Return", - "src": "3803:36:10" - } - ] - } - }, - { - "assignments": [ - 912, - 914 - ], - "declarations": [ - { - "constant": false, - "id": 912, - "mutability": "mutable", - "name": "tokensClaimed", - "nameLocation": "3887:13:10", - "nodeType": "VariableDeclaration", - "scope": 957, - "src": "3879:21:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 911, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3879:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 914, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3910:15:10", - "nodeType": "VariableDeclaration", - "scope": 957, - "src": "3902:23:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 913, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3902:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 924, - "initialValue": { - "arguments": [ - { - "id": 917, - "name": "_acc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 885, - "src": "3940:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "components": [ - { - "id": 919, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3947:7:10", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 918, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3947:7:10", - "typeDescriptions": {} - } - }, - { - "id": 921, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3956:7:10", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 920, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3956:7:10", - "typeDescriptions": {} - } - } - ], - "id": 922, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3946:18:10", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_address_$_$", - "typeString": "tuple(type(uint256),type(address))" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_address_$_$", - "typeString": "tuple(type(uint256),type(address))" - } - ], - "expression": { - "id": 915, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "3929:3:10", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 916, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3933:6:10", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "3929:10:10", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 923, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3929:36:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_address_payable_$", - "typeString": "tuple(uint256,address payable)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3878:87:10" - }, - { - "expression": { - "arguments": [ - { - "id": 928, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 914, - "src": "4024:15:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 929, - "name": "claim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 894, - "src": "4041:5:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "id": 930, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4047:6:10", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 1328, - "src": "4041:12:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 925, - "name": "feesProvisionTracker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1063, - "src": "3995:20:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 927, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4016:7:10", - "memberName": "release", - "nodeType": "MemberAccess", - "referencedDeclaration": 1518, - "src": "3995:28:10", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "function (mapping(address => uint256),address,uint256)" - } - }, - "id": 931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3995:59:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 932, - "nodeType": "ExpressionStatement", - "src": "3995:59:10" - }, - { - "eventCall": { - "arguments": [ - { - "id": 934, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 914, - "src": "4088:15:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 935, - "name": "_claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 883, - "src": "4105:8:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 936, - "name": "claim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 894, - "src": "4115:5:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "id": 937, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4121:6:10", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 1328, - "src": "4115:12:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 938, - "name": "claim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 894, - "src": "4129:5:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "id": 939, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4135:12:10", - "memberName": "releasableAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 1332, - "src": "4129:18:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 933, - "name": "StakeClaimReleased", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1357, - "src": "4069:18:10", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,bytes32,uint256,uint256)" - } - }, - "id": 940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4069:79:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 941, - "nodeType": "EmitStatement", - "src": "4064:84:10" - }, - { - "expression": { - "id": 951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 942, - "name": "_acc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 885, - "src": "4177:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 948, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 945, - "name": "tokensClaimed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 912, - "src": "4195:13:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "expression": { - "id": 946, - "name": "claim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 894, - "src": "4211:5:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "id": 947, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4217:6:10", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 1328, - "src": "4211:12:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4195:28:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 949, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 914, - "src": "4225:15:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 943, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "4184:3:10", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 944, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "4188:6:10", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "4184:10:10", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 950, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4184:57:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "src": "4177:64:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 952, - "nodeType": "ExpressionStatement", - "src": "4177:64:10" - }, - { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 953, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4259:5:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "id": 954, - "name": "_acc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 885, - "src": "4266:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "id": 955, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4258:13:10", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "functionReturnParameters": 891, - "id": 956, - "nodeType": "Return", - "src": "4251:20:10" - } - ] - }, - "documentation": { - "id": 881, - "nodeType": "StructuredDocumentation", - "src": "3083:464:10", - "text": " @notice Processes a stake claim, releasing the tokens if the claim has expired.\n @dev This function is used as a callback in the stake claims linked list traversal.\n @param _claimId The id of the stake claim\n @param _acc The accumulator for the stake claims being processed\n @return Wether the stake claim is still locked, indicating that the traversal should continue or stop.\n @return The updated accumulator data" - }, - "id": 958, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_processStakeClaim", - "nameLocation": "3561:18:10", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 886, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 883, - "mutability": "mutable", - "name": "_claimId", - "nameLocation": "3588:8:10", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "3580:16:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 882, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3580:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 885, - "mutability": "mutable", - "name": "_acc", - "nameLocation": "3611:4:10", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "3598:17:10", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 884, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3598:5:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3579:37:10" - }, - "returnParameters": { - "id": 891, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 888, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "3634:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 887, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3634:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 890, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "3640:12:10", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 889, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3640:5:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3633:20:10" - }, - "scope": 1052, - "src": "3552:726:10", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 969, - "nodeType": "Block", - "src": "4541:40:10", - "statements": [ - { - "expression": { - "id": 967, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "delete", - "prefix": true, - "src": "4551:23:10", - "subExpression": { - "baseExpression": { - "id": 964, - "name": "claims", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1069, - "src": "4558:6:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", - "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" - } - }, - "id": 966, - "indexExpression": { - "id": 965, - "name": "_claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 961, - "src": "4565:8:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4558:16:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", - "typeString": "struct IDataServiceFees.StakeClaim storage ref" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 968, - "nodeType": "ExpressionStatement", - "src": "4551:23:10" - } - ] - }, - "documentation": { - "id": 959, - "nodeType": "StructuredDocumentation", - "src": "4284:199:10", - "text": " @notice Deletes a stake claim.\n @dev This function is used as a callback in the stake claims linked list traversal.\n @param _claimId The ID of the stake claim to delete" - }, - "id": 970, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_deleteStakeClaim", - "nameLocation": "4497:17:10", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 962, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 961, - "mutability": "mutable", - "name": "_claimId", - "nameLocation": "4523:8:10", - "nodeType": "VariableDeclaration", - "scope": 970, - "src": "4515:16:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 960, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4515:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4514:18:10" - }, - "returnParameters": { - "id": 963, - "nodeType": "ParameterList", - "parameters": [], - "src": "4541:0:10" - }, - "scope": 1052, - "src": "4488:93:10", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 998, - "nodeType": "Block", - "src": "4784:160:10", - "statements": [ - { - "assignments": [ - 981 - ], - "declarations": [ - { - "constant": false, - "id": 981, - "mutability": "mutable", - "name": "claim", - "nameLocation": "4812:5:10", - "nodeType": "VariableDeclaration", - "scope": 998, - "src": "4794:23:10", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim" - }, - "typeName": { - "id": 980, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 979, - "name": "StakeClaim", - "nameLocations": [ - "4794:10:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1335, - "src": "4794:10:10" - }, - "referencedDeclaration": 1335, - "src": "4794:10:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", - "typeString": "struct IDataServiceFees.StakeClaim" - } - }, - "visibility": "internal" - } - ], - "id": 985, - "initialValue": { - "baseExpression": { - "id": 982, - "name": "claims", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1069, - "src": "4820:6:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", - "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" - } - }, - "id": 984, - "indexExpression": { - "id": 983, - "name": "_claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 973, - "src": "4827:8:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4820:16:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", - "typeString": "struct IDataServiceFees.StakeClaim storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4794:42:10" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 990, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 987, - "name": "claim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 981, - "src": "4854:5:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "id": 988, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4860:9:10", - "memberName": "createdAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 1330, - "src": "4854:15:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 989, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4873:1:10", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4854:20:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 992, - "name": "_claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 973, - "src": "4905:8:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 991, - "name": "DataServiceFeesClaimNotFound", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1371, - "src": "4876:28:10", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32) pure returns (error)" - } - }, - "id": 993, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4876:38:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 986, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "4846:7:10", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 994, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4846:69:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 995, - "nodeType": "ExpressionStatement", - "src": "4846:69:10" - }, - { - "expression": { - "id": 996, - "name": "claim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 981, - "src": "4932:5:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "functionReturnParameters": 978, - "id": 997, - "nodeType": "Return", - "src": "4925:12:10" - } - ] - }, - "documentation": { - "id": 971, - "nodeType": "StructuredDocumentation", - "src": "4587:109:10", - "text": " @notice Gets the details of a stake claim\n @param _claimId The ID of the stake claim" - }, - "id": 999, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getStakeClaim", - "nameLocation": "4710:14:10", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 974, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 973, - "mutability": "mutable", - "name": "_claimId", - "nameLocation": "4733:8:10", - "nodeType": "VariableDeclaration", - "scope": 999, - "src": "4725:16:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 972, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4725:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4724:18:10" - }, - "returnParameters": { - "id": 978, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 977, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 999, - "src": "4765:17:10", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim" - }, - "typeName": { - "id": 976, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 975, - "name": "StakeClaim", - "nameLocations": [ - "4765:10:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1335, - "src": "4765:10:10" - }, - "referencedDeclaration": 1335, - "src": "4765:10:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", - "typeString": "struct IDataServiceFees.StakeClaim" - } - }, - "visibility": "internal" - } - ], - "src": "4764:19:10" - }, - "scope": 1052, - "src": "4701:243:10", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 1027, - "nodeType": "Block", - "src": "5243:170:10", - "statements": [ - { - "assignments": [ - 1009 - ], - "declarations": [ - { - "constant": false, - "id": 1009, - "mutability": "mutable", - "name": "claim", - "nameLocation": "5271:5:10", - "nodeType": "VariableDeclaration", - "scope": 1027, - "src": "5253:23:10", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim" - }, - "typeName": { - "id": 1008, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1007, - "name": "StakeClaim", - "nameLocations": [ - "5253:10:10" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1335, - "src": "5253:10:10" - }, - "referencedDeclaration": 1335, - "src": "5253:10:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", - "typeString": "struct IDataServiceFees.StakeClaim" - } - }, - "visibility": "internal" - } - ], - "id": 1013, - "initialValue": { - "baseExpression": { - "id": 1010, - "name": "claims", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1069, - "src": "5279:6:10", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", - "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim storage ref)" - } - }, - "id": 1012, - "indexExpression": { - "id": 1011, - "name": "_claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1002, - "src": "5286:8:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5279:16:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage", - "typeString": "struct IDataServiceFees.StakeClaim storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5253:42:10" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1018, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 1015, - "name": "claim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1009, - "src": "5313:5:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "id": 1016, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5319:9:10", - "memberName": "createdAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 1330, - "src": "5313:15:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 1017, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5332:1:10", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5313:20:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 1020, - "name": "_claimId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1002, - "src": "5364:8:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 1019, - "name": "DataServiceFeesClaimNotFound", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1371, - "src": "5335:28:10", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32) pure returns (error)" - } - }, - "id": 1021, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5335:38:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 1014, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "5305:7:10", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 1022, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5305:69:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1023, - "nodeType": "ExpressionStatement", - "src": "5305:69:10" - }, - { - "expression": { - "expression": { - "id": 1024, - "name": "claim", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1009, - "src": "5391:5:10", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_memory_ptr", - "typeString": "struct IDataServiceFees.StakeClaim memory" - } - }, - "id": 1025, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5397:9:10", - "memberName": "nextClaim", - "nodeType": "MemberAccess", - "referencedDeclaration": 1334, - "src": "5391:15:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 1006, - "id": 1026, - "nodeType": "Return", - "src": "5384:22:10" - } - ] - }, - "documentation": { - "id": 1000, - "nodeType": "StructuredDocumentation", - "src": "4950:211:10", - "text": " @notice Gets the next stake claim in the linked list\n @dev This function is used as a callback in the stake claims linked list traversal.\n @param _claimId The ID of the stake claim" - }, - "id": 1028, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getNextStakeClaim", - "nameLocation": "5175:18:10", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1003, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1002, - "mutability": "mutable", - "name": "_claimId", - "nameLocation": "5202:8:10", - "nodeType": "VariableDeclaration", - "scope": 1028, - "src": "5194:16:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1001, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5194:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5193:18:10" - }, - "returnParameters": { - "id": 1006, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1005, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1028, - "src": "5234:7:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1004, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5234:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5233:9:10" - }, - "scope": 1052, - "src": "5166:247:10", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 1050, - "nodeType": "Block", - "src": "5690:92:10", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 1043, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "5742:4:10", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataServiceFees_$1052", - "typeString": "contract DataServiceFees" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DataServiceFees_$1052", - "typeString": "contract DataServiceFees" - } - ], - "id": 1042, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5734:7:10", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1041, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5734:7:10", - "typeDescriptions": {} - } - }, - "id": 1044, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5734:13:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1045, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "5749:16:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1046, - "name": "_nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1033, - "src": "5767:6:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 1039, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "5717:3:10", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 1040, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5721:12:10", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "5717:16:10", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 1047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5717:57:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 1038, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "5707:9:10", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 1048, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5707:68:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 1037, - "id": 1049, - "nodeType": "Return", - "src": "5700:75:10" - } - ] - }, - "documentation": { - "id": 1029, - "nodeType": "StructuredDocumentation", - "src": "5419:165:10", - "text": " @notice Builds a stake claim ID\n @param _serviceProvider The address of the service provider\n @param _nonce A nonce of the stake claim" - }, - "id": 1051, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_buildStakeClaimId", - "nameLocation": "5598:18:10", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1034, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1031, - "mutability": "mutable", - "name": "_serviceProvider", - "nameLocation": "5625:16:10", - "nodeType": "VariableDeclaration", - "scope": 1051, - "src": "5617:24:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1030, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5617:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1033, - "mutability": "mutable", - "name": "_nonce", - "nameLocation": "5651:6:10", - "nodeType": "VariableDeclaration", - "scope": 1051, - "src": "5643:14:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1032, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5643:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5616:42:10" - }, - "returnParameters": { - "id": 1037, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1036, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1051, - "src": "5681:7:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1035, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5681:7:10", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5680:9:10" - }, - "scope": 1052, - "src": "5589:193:10", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - } - ], - "scope": 1053, - "src": "661:5123:10", - "usedErrors": [ - 1371, - 1374, - 1421, - 1658, - 1665, - 1672, - 1677, - 3827, - 3833, - 4380, - 4865, - 4868 - ], - "usedEvents": [ - 1198, - 1203, - 1210, - 1217, - 1227, - 1234, - 1346, - 1357, - 1366, - 1628, - 1633, - 1640, - 1647, - 4375, - 4873 - ] - } - ], - "src": "45:5740:10" - }, - "id": 10 - }, - "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol", - "exportedSymbols": { - "DataServiceFeesV1Storage": [ - 1081 - ], - "IDataServiceFees": [ - 1381 - ], - "LinkedList": [ - 4087 - ] - }, - "id": 1082, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1054, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:11" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", - "file": "../interfaces/IDataServiceFees.sol", - "id": 1056, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1082, - "sourceUnit": 1382, - "src": "70:70:11", - "symbolAliases": [ - { - "foreign": { - "id": 1055, - "name": "IDataServiceFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1381, - "src": "79:16:11", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/LinkedList.sol", - "file": "../../libraries/LinkedList.sol", - "id": 1058, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1082, - "sourceUnit": 4088, - "src": "142:60:11", - "symbolAliases": [ - { - "foreign": { - "id": 1057, - "name": "LinkedList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4087, - "src": "151:10:11", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "DataServiceFeesV1Storage", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1059, - "nodeType": "StructuredDocumentation", - "src": "204:78:11", - "text": " @title Storage layout for the {DataServiceFees} extension contract." - }, - "fullyImplemented": true, - "id": 1081, - "linearizedBaseContracts": [ - 1081 - ], - "name": "DataServiceFeesV1Storage", - "nameLocation": "301:24:11", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "functionSelector": "cbe5f3f2", - "id": 1063, - "mutability": "mutable", - "name": "feesProvisionTracker", - "nameLocation": "390:20:11", - "nodeType": "VariableDeclaration", - "scope": 1081, - "src": "332:78:11", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 1062, - "keyName": "serviceProvider", - "keyNameLocation": "348:15:11", - "keyType": { - "id": 1060, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "340:7:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "332:50:11", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "tokens", - "valueNameLocation": "375:6:11", - "valueType": { - "id": 1061, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "367:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 1064, - "nodeType": "StructuredDocumentation", - "src": "417:79:11", - "text": "@notice List of all locked stake claims to be released to service providers" - }, - "functionSelector": "eff0f592", - "id": 1069, - "mutability": "mutable", - "name": "claims", - "nameLocation": "570:6:11", - "nodeType": "VariableDeclaration", - "scope": 1081, - "src": "501:75:11", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", - "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)" - }, - "typeName": { - "id": 1068, - "keyName": "claimId", - "keyNameLocation": "517:7:11", - "keyType": { - "id": 1065, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "509:7:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "501:61:11", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_StakeClaim_$1335_storage_$", - "typeString": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)" - }, - "valueName": "claim", - "valueNameLocation": "556:5:11", - "valueType": { - "id": 1067, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1066, - "name": "IDataServiceFees.StakeClaim", - "nameLocations": [ - "528:16:11", - "545:10:11" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1335, - "src": "528:27:11" - }, - "referencedDeclaration": 1335, - "src": "528:27:11", - "typeDescriptions": { - "typeIdentifier": "t_struct$_StakeClaim_$1335_storage_ptr", - "typeString": "struct IDataServiceFees.StakeClaim" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 1070, - "nodeType": "StructuredDocumentation", - "src": "583:60:11", - "text": "@notice Service providers registered in the data service" - }, - "functionSelector": "13c474c9", - "id": 1075, - "mutability": "mutable", - "name": "claimsLists", - "nameLocation": "712:11:11", - "nodeType": "VariableDeclaration", - "scope": 1081, - "src": "648:75:11", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_List_$3813_storage_$", - "typeString": "mapping(address => struct LinkedList.List)" - }, - "typeName": { - "id": 1074, - "keyName": "serviceProvider", - "keyNameLocation": "664:15:11", - "keyType": { - "id": 1071, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "656:7:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "648:56:11", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_List_$3813_storage_$", - "typeString": "mapping(address => struct LinkedList.List)" - }, - "valueName": "list", - "valueNameLocation": "699:4:11", - "valueType": { - "id": 1073, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1072, - "name": "LinkedList.List", - "nameLocations": [ - "683:10:11", - "694:4:11" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3813, - "src": "683:15:11" - }, - "referencedDeclaration": 3813, - "src": "683:15:11", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 1076, - "nodeType": "StructuredDocumentation", - "src": "730:57:11", - "text": "@dev Gap to allow adding variables in future upgrades" - }, - "id": 1080, - "mutability": "mutable", - "name": "__gap", - "nameLocation": "812:5:11", - "nodeType": "VariableDeclaration", - "scope": 1081, - "src": "792:25:11", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage", - "typeString": "uint256[50]" - }, - "typeName": { - "baseType": { - "id": 1077, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "792:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1079, - "length": { - "hexValue": "3530", - "id": 1078, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "800:2:11", - "typeDescriptions": { - "typeIdentifier": "t_rational_50_by_1", - "typeString": "int_const 50" - }, - "value": "50" - }, - "nodeType": "ArrayTypeName", - "src": "792:11:11", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", - "typeString": "uint256[50]" - } - }, - "visibility": "private" - } - ], - "scope": 1082, - "src": "283:537:11", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "45:776:11" - }, - "id": 11 - }, - "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol", - "exportedSymbols": { - "DataService": [ - 696 - ], - "DataServicePausableUpgradeable": [ - 1186 - ], - "IDataServicePausable": [ - 1409 - ], - "PausableUpgradeable": [ - 5427 - ] - }, - "id": 1187, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1083, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:12" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol", - "file": "../interfaces/IDataServicePausable.sol", - "id": 1085, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1187, - "sourceUnit": 1410, - "src": "70:78:12", - "symbolAliases": [ - { - "foreign": { - "id": 1084, - "name": "IDataServicePausable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1409, - "src": "79:20:12", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", - "id": 1087, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1187, - "sourceUnit": 5428, - "src": "150:104:12", - "symbolAliases": [ - { - "foreign": { - "id": 1086, - "name": "PausableUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5427, - "src": "159:19:12", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataService.sol", - "file": "../DataService.sol", - "id": 1089, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1187, - "sourceUnit": 697, - "src": "255:49:12", - "symbolAliases": [ - { - "foreign": { - "id": 1088, - "name": "DataService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 696, - "src": "264:11:12", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1091, - "name": "PausableUpgradeable", - "nameLocations": [ - "547:19:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5427, - "src": "547:19:12" - }, - "id": 1092, - "nodeType": "InheritanceSpecifier", - "src": "547:19:12" - }, - { - "baseName": { - "id": 1093, - "name": "DataService", - "nameLocations": [ - "568:11:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 696, - "src": "568:11:12" - }, - "id": 1094, - "nodeType": "InheritanceSpecifier", - "src": "568:11:12" - }, - { - "baseName": { - "id": 1095, - "name": "IDataServicePausable", - "nameLocations": [ - "581:20:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1409, - "src": "581:20:12" - }, - "id": 1096, - "nodeType": "InheritanceSpecifier", - "src": "581:20:12" - } - ], - "canonicalName": "DataServicePausableUpgradeable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1090, - "nodeType": "StructuredDocumentation", - "src": "306:188:12", - "text": " @title DataServicePausableUpgradeable contract\n @dev Implementation of the {IDataServicePausable} interface.\n @dev Upgradeable version of the {DataServicePausable} contract." - }, - "fullyImplemented": false, - "id": 1186, - "linearizedBaseContracts": [ - 1186, - 1409, - 696, - 1318, - 704, - 2128, - 2158, - 4653, - 5427, - 5148, - 5102 - ], - "name": "DataServicePausableUpgradeable", - "nameLocation": "513:30:12", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 1097, - "nodeType": "StructuredDocumentation", - "src": "608:60:12", - "text": "@notice List of pause guardians and their allowed status" - }, - "functionSelector": "9384e078", - "id": 1101, - "mutability": "mutable", - "name": "pauseGuardians", - "nameLocation": "727:14:12", - "nodeType": "VariableDeclaration", - "scope": 1186, - "src": "673:68:12", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1100, - "keyName": "pauseGuardian", - "keyNameLocation": "689:13:12", - "keyType": { - "id": 1098, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "681:7:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "673:46:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueName": "allowed", - "valueNameLocation": "711:7:12", - "valueType": { - "id": 1099, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "706:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "visibility": "public" - }, - { - "body": { - "id": 1116, - "nodeType": "Block", - "src": "850:112:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "baseExpression": { - "id": 1105, - "name": "pauseGuardians", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1101, - "src": "868:14:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1108, - "indexExpression": { - "expression": { - "id": 1106, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "883:3:12", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1107, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "887:6:12", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "883:10:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "868:26:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "expression": { - "id": 1110, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "932:3:12", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1111, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "936:6:12", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "932:10:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1109, - "name": "DataServicePausableNotPauseGuardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1400, - "src": "896:35:12", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 1112, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "896:47:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 1104, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "860:7:12", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 1113, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "860:84:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1114, - "nodeType": "ExpressionStatement", - "src": "860:84:12" - }, - { - "id": 1115, - "nodeType": "PlaceholderStatement", - "src": "954:1:12" - } - ] - }, - "documentation": { - "id": 1102, - "nodeType": "StructuredDocumentation", - "src": "748:68:12", - "text": " @notice Checks if the caller is a pause guardian." - }, - "id": 1117, - "name": "onlyPauseGuardian", - "nameLocation": "830:17:12", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1103, - "nodeType": "ParameterList", - "parameters": [], - "src": "847:2:12" - }, - "src": "821:141:12", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [ - 1404 - ], - "body": { - "id": 1129, - "nodeType": "Block", - "src": "1099:25:12", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1126, - "name": "_pause", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5402, - "src": "1109:6:12", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 1127, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1109:8:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1128, - "nodeType": "ExpressionStatement", - "src": "1109:8:12" - } - ] - }, - "documentation": { - "id": 1118, - "nodeType": "StructuredDocumentation", - "src": "968:59:12", - "text": " @notice See {IDataServicePausable-pause}" - }, - "functionSelector": "8456cb59", - "id": 1130, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1122, - "kind": "modifierInvocation", - "modifierName": { - "id": 1121, - "name": "onlyPauseGuardian", - "nameLocations": [ - "1067:17:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1117, - "src": "1067:17:12" - }, - "nodeType": "ModifierInvocation", - "src": "1067:17:12" - }, - { - "id": 1124, - "kind": "modifierInvocation", - "modifierName": { - "id": 1123, - "name": "whenNotPaused", - "nameLocations": [ - "1085:13:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5329, - "src": "1085:13:12" - }, - "nodeType": "ModifierInvocation", - "src": "1085:13:12" - } - ], - "name": "pause", - "nameLocation": "1041:5:12", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1120, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1058:8:12" - }, - "parameters": { - "id": 1119, - "nodeType": "ParameterList", - "parameters": [], - "src": "1046:2:12" - }, - "returnParameters": { - "id": 1125, - "nodeType": "ParameterList", - "parameters": [], - "src": "1099:0:12" - }, - "scope": 1186, - "src": "1032:92:12", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1408 - ], - "body": { - "id": 1142, - "nodeType": "Block", - "src": "1260:27:12", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1139, - "name": "_unpause", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5426, - "src": "1270:8:12", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 1140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1270:10:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1141, - "nodeType": "ExpressionStatement", - "src": "1270:10:12" - } - ] - }, - "documentation": { - "id": 1131, - "nodeType": "StructuredDocumentation", - "src": "1130:59:12", - "text": " @notice See {IDataServicePausable-pause}" - }, - "functionSelector": "3f4ba83a", - "id": 1143, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1135, - "kind": "modifierInvocation", - "modifierName": { - "id": 1134, - "name": "onlyPauseGuardian", - "nameLocations": [ - "1231:17:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1117, - "src": "1231:17:12" - }, - "nodeType": "ModifierInvocation", - "src": "1231:17:12" - }, - { - "id": 1137, - "kind": "modifierInvocation", - "modifierName": { - "id": 1136, - "name": "whenPaused", - "nameLocations": [ - "1249:10:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5337, - "src": "1249:10:12" - }, - "nodeType": "ModifierInvocation", - "src": "1249:10:12" - } - ], - "name": "unpause", - "nameLocation": "1203:7:12", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1133, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1222:8:12" - }, - "parameters": { - "id": 1132, - "nodeType": "ParameterList", - "parameters": [], - "src": "1210:2:12" - }, - "returnParameters": { - "id": 1138, - "nodeType": "ParameterList", - "parameters": [], - "src": "1260:0:12" - }, - "scope": 1186, - "src": "1194:93:12", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 1155, - "nodeType": "Block", - "src": "1487:92:12", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1149, - "name": "__Pausable_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5321, - "src": "1497:25:12", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 1150, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1497:27:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1151, - "nodeType": "ExpressionStatement", - "src": "1497:27:12" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1152, - "name": "__DataServicePausable_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1163, - "src": "1534:36:12", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 1153, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1534:38:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1154, - "nodeType": "ExpressionStatement", - "src": "1534:38:12" - } - ] - }, - "documentation": { - "id": 1144, - "nodeType": "StructuredDocumentation", - "src": "1293:72:12", - "text": " @notice Initializes the contract and parent contracts" - }, - "id": 1156, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1147, - "kind": "modifierInvocation", - "modifierName": { - "id": 1146, - "name": "onlyInitializing", - "nameLocations": [ - "1470:16:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "1470:16:12" - }, - "nodeType": "ModifierInvocation", - "src": "1470:16:12" - } - ], - "name": "__DataServicePausable_init", - "nameLocation": "1432:26:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1145, - "nodeType": "ParameterList", - "parameters": [], - "src": "1458:2:12" - }, - "returnParameters": { - "id": 1148, - "nodeType": "ParameterList", - "parameters": [], - "src": "1487:0:12" - }, - "scope": 1186, - "src": "1423:156:12", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1162, - "nodeType": "Block", - "src": "1768:2:12", - "statements": [] - }, - "documentation": { - "id": 1157, - "nodeType": "StructuredDocumentation", - "src": "1585:51:12", - "text": " @notice Initializes the contract" - }, - "id": 1163, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1160, - "kind": "modifierInvocation", - "modifierName": { - "id": 1159, - "name": "onlyInitializing", - "nameLocations": [ - "1751:16:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "1751:16:12" - }, - "nodeType": "ModifierInvocation", - "src": "1751:16:12" - } - ], - "name": "__DataServicePausable_init_unchained", - "nameLocation": "1703:36:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1158, - "nodeType": "ParameterList", - "parameters": [], - "src": "1739:2:12" - }, - "returnParameters": { - "id": 1161, - "nodeType": "ParameterList", - "parameters": [], - "src": "1768:0:12" - }, - "scope": 1186, - "src": "1694:76:12", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1184, - "nodeType": "Block", - "src": "2190:115:12", - "statements": [ - { - "expression": { - "id": 1177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1173, - "name": "pauseGuardians", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1101, - "src": "2200:14:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1175, - "indexExpression": { - "id": 1174, - "name": "_pauseGuardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1166, - "src": "2215:14:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2200:30:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 1176, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1168, - "src": "2233:8:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "2200:41:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1178, - "nodeType": "ExpressionStatement", - "src": "2200:41:12" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1180, - "name": "_pauseGuardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1166, - "src": "2273:14:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1181, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1168, - "src": "2289:8:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1179, - "name": "PauseGuardianSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1395, - "src": "2256:16:12", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$", - "typeString": "function (address,bool)" - } - }, - "id": 1182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2256:42:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1183, - "nodeType": "EmitStatement", - "src": "2251:47:12" - } - ] - }, - "documentation": { - "id": 1164, - "nodeType": "StructuredDocumentation", - "src": "1776:320:12", - "text": " @notice Sets a pause guardian.\n @dev Internal function to be used by the derived contract to set pause guardians.\n Emits a {PauseGuardianSet} event.\n @param _pauseGuardian The address of the pause guardian\n @param _allowed The allowed status of the pause guardian" - }, - "id": 1185, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1171, - "kind": "modifierInvocation", - "modifierName": { - "id": 1170, - "name": "whenNotPaused", - "nameLocations": [ - "2176:13:12" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5329, - "src": "2176:13:12" - }, - "nodeType": "ModifierInvocation", - "src": "2176:13:12" - } - ], - "name": "_setPauseGuardian", - "nameLocation": "2110:17:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1169, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1166, - "mutability": "mutable", - "name": "_pauseGuardian", - "nameLocation": "2136:14:12", - "nodeType": "VariableDeclaration", - "scope": 1185, - "src": "2128:22:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1165, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2128:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1168, - "mutability": "mutable", - "name": "_allowed", - "nameLocation": "2157:8:12", - "nodeType": "VariableDeclaration", - "scope": 1185, - "src": "2152:13:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1167, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2152:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2127:39:12" - }, - "returnParameters": { - "id": 1172, - "nodeType": "ParameterList", - "parameters": [], - "src": "2190:0:12" - }, - "scope": 1186, - "src": "2101:204:12", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 1187, - "src": "495:1812:12", - "usedErrors": [ - 1400, - 1658, - 1665, - 1672, - 1677, - 4380, - 4865, - 4868, - 5290, - 5293 - ], - "usedEvents": [ - 1198, - 1203, - 1210, - 1217, - 1227, - 1234, - 1395, - 1628, - 1633, - 1640, - 1647, - 4375, - 4873, - 5282, - 5287 - ] - } - ], - "src": "45:2263:12" - }, - "id": 12 - }, - "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol", - "exportedSymbols": { - "IDataService": [ - 1318 - ], - "IGraphPayments": [ - 2211 - ] - }, - "id": 1319, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1188, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:13" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "file": "../../interfaces/IGraphPayments.sol", - "id": 1190, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1319, - "sourceUnit": 2212, - "src": "70:69:13", - "symbolAliases": [ - { - "foreign": { - "id": 1189, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "79:14:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IDataService", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 1191, - "nodeType": "StructuredDocumentation", - "src": "141:755:13", - "text": " @title Interface of the base {DataService} contract as defined by the Graph Horizon specification.\n @notice This interface provides a guardrail for contracts that use the Data Service framework\n to implement a data service on Graph Horizon. Much of the specification is intentionally loose\n to allow for greater flexibility when designing a data service. It's not possible to guarantee that\n an implementation will honor the Data Service framework guidelines so it's advised to always review\n the implementation code and the documentation.\n @dev This interface is expected to be inherited and extended by a data service interface. It can be\n used to interact with it however it's advised to use the more specific parent interface." - }, - "fullyImplemented": false, - "id": 1318, - "linearizedBaseContracts": [ - 1318 - ], - "name": "IDataService", - "nameLocation": "907:12:13", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 1192, - "nodeType": "StructuredDocumentation", - "src": "926:229:13", - "text": " @notice Emitted when a service provider is registered with the data service.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." - }, - "eventSelector": "159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa", - "id": 1198, - "name": "ServiceProviderRegistered", - "nameLocation": "1166:25:13", - "nodeType": "EventDefinition", - "parameters": { - "id": 1197, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1194, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1208:15:13", - "nodeType": "VariableDeclaration", - "scope": 1198, - "src": "1192:31:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1193, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1192:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1196, - "indexed": false, - "mutability": "mutable", - "name": "data", - "nameLocation": "1231:4:13", - "nodeType": "VariableDeclaration", - "scope": 1198, - "src": "1225:10:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1195, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1225:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1191:45:13" - }, - "src": "1160:77:13" - }, - { - "anonymous": false, - "documentation": { - "id": 1199, - "nodeType": "StructuredDocumentation", - "src": "1243:182:13", - "text": " @notice Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\n @param serviceProvider The address of the service provider." - }, - "eventSelector": "f53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a939", - "id": 1203, - "name": "ProvisionPendingParametersAccepted", - "nameLocation": "1436:34:13", - "nodeType": "EventDefinition", - "parameters": { - "id": 1202, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1201, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1487:15:13", - "nodeType": "VariableDeclaration", - "scope": 1203, - "src": "1471:31:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1200, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1471:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1470:33:13" - }, - "src": "1430:74:13" - }, - { - "anonymous": false, - "documentation": { - "id": 1204, - "nodeType": "StructuredDocumentation", - "src": "1510:222:13", - "text": " @notice Emitted when a service provider starts providing the service.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." - }, - "eventSelector": "d3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e7", - "id": 1210, - "name": "ServiceStarted", - "nameLocation": "1743:14:13", - "nodeType": "EventDefinition", - "parameters": { - "id": 1209, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1206, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1774:15:13", - "nodeType": "VariableDeclaration", - "scope": 1210, - "src": "1758:31:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1205, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1758:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1208, - "indexed": false, - "mutability": "mutable", - "name": "data", - "nameLocation": "1797:4:13", - "nodeType": "VariableDeclaration", - "scope": 1210, - "src": "1791:10:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1207, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1791:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1757:45:13" - }, - "src": "1737:66:13" - }, - { - "anonymous": false, - "documentation": { - "id": 1211, - "nodeType": "StructuredDocumentation", - "src": "1809:221:13", - "text": " @notice Emitted when a service provider stops providing the service.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." - }, - "eventSelector": "73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a", - "id": 1217, - "name": "ServiceStopped", - "nameLocation": "2041:14:13", - "nodeType": "EventDefinition", - "parameters": { - "id": 1216, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1213, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2072:15:13", - "nodeType": "VariableDeclaration", - "scope": 1217, - "src": "2056:31:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1212, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2056:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1215, - "indexed": false, - "mutability": "mutable", - "name": "data", - "nameLocation": "2095:4:13", - "nodeType": "VariableDeclaration", - "scope": 1217, - "src": "2089:10:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1214, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2089:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2055:45:13" - }, - "src": "2035:66:13" - }, - { - "anonymous": false, - "documentation": { - "id": 1218, - "nodeType": "StructuredDocumentation", - "src": "2107:276:13", - "text": " @notice Emitted when a service provider collects payment.\n @param serviceProvider The address of the service provider.\n @param feeType The type of fee to collect as defined in {GraphPayments}.\n @param tokens The amount of tokens collected." - }, - "eventSelector": "54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5", - "id": 1227, - "name": "ServicePaymentCollected", - "nameLocation": "2394:23:13", - "nodeType": "EventDefinition", - "parameters": { - "id": 1226, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1220, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2443:15:13", - "nodeType": "VariableDeclaration", - "scope": 1227, - "src": "2427:31:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1219, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2427:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1223, - "indexed": true, - "mutability": "mutable", - "name": "feeType", - "nameLocation": "2504:7:13", - "nodeType": "VariableDeclaration", - "scope": 1227, - "src": "2468:43:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 1222, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1221, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "2468:14:13", - "2483:12:13" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "2468:27:13" - }, - "referencedDeclaration": 2166, - "src": "2468:27:13", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1225, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2529:6:13", - "nodeType": "VariableDeclaration", - "scope": 1227, - "src": "2521:14:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1224, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2521:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2417:124:13" - }, - "src": "2388:154:13" - }, - { - "anonymous": false, - "documentation": { - "id": 1228, - "nodeType": "StructuredDocumentation", - "src": "2548:188:13", - "text": " @notice Emitted when a service provider is slashed.\n @param serviceProvider The address of the service provider.\n @param tokens The amount of tokens slashed." - }, - "eventSelector": "02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c58", - "id": 1234, - "name": "ServiceProviderSlashed", - "nameLocation": "2747:22:13", - "nodeType": "EventDefinition", - "parameters": { - "id": 1233, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1230, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2786:15:13", - "nodeType": "VariableDeclaration", - "scope": 1234, - "src": "2770:31:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1229, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2770:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1232, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2811:6:13", - "nodeType": "VariableDeclaration", - "scope": 1234, - "src": "2803:14:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1231, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2803:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2769:49:13" - }, - "src": "2741:78:13" - }, - { - "documentation": { - "id": 1235, - "nodeType": "StructuredDocumentation", - "src": "2825:903:13", - "text": " @notice Registers a service provider with the data service. The service provider can now\n start providing the service.\n @dev Before registering, the service provider must have created a provision in the\n Graph Horizon staking contract with parameters that are compatible with the data service.\n Verifies provision parameters and rejects registration in the event they are not valid.\n Emits a {ServiceProviderRegistered} event.\n NOTE: Failing to accept the provision will result in the service provider operating\n on an unverified provision. Depending on of the data service this can be a security\n risk as the protocol won't be able to guarantee economic security for the consumer.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." - }, - "functionSelector": "24b8fbf6", - "id": 1242, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "register", - "nameLocation": "3742:8:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1240, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1237, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3759:15:13", - "nodeType": "VariableDeclaration", - "scope": 1242, - "src": "3751:23:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1236, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3751:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1239, - "mutability": "mutable", - "name": "data", - "nameLocation": "3791:4:13", - "nodeType": "VariableDeclaration", - "scope": 1242, - "src": "3776:19:13", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1238, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3776:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3750:46:13" - }, - "returnParameters": { - "id": 1241, - "nodeType": "ParameterList", - "parameters": [], - "src": "3805:0:13" - }, - "scope": 1318, - "src": "3733:73:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1243, - "nodeType": "StructuredDocumentation", - "src": "3812:472:13", - "text": " @notice Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking\n contract}.\n @dev Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}.\n Emits a {ProvisionPendingParametersAccepted} event.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." - }, - "functionSelector": "ce0fc0cc", - "id": 1250, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "acceptProvisionPendingParameters", - "nameLocation": "4298:32:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1248, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1245, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "4339:15:13", - "nodeType": "VariableDeclaration", - "scope": 1250, - "src": "4331:23:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1244, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4331:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1247, - "mutability": "mutable", - "name": "data", - "nameLocation": "4371:4:13", - "nodeType": "VariableDeclaration", - "scope": 1250, - "src": "4356:19:13", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1246, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4356:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4330:46:13" - }, - "returnParameters": { - "id": 1249, - "nodeType": "ParameterList", - "parameters": [], - "src": "4385:0:13" - }, - "scope": 1318, - "src": "4289:97:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1251, - "nodeType": "StructuredDocumentation", - "src": "4392:251:13", - "text": " @notice Service provider starts providing the service.\n @dev Emits a {ServiceStarted} event.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." - }, - "functionSelector": "dedf6726", - "id": 1258, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "startService", - "nameLocation": "4657:12:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1253, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "4678:15:13", - "nodeType": "VariableDeclaration", - "scope": 1258, - "src": "4670:23:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1252, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4670:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1255, - "mutability": "mutable", - "name": "data", - "nameLocation": "4710:4:13", - "nodeType": "VariableDeclaration", - "scope": 1258, - "src": "4695:19:13", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1254, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4695:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4669:46:13" - }, - "returnParameters": { - "id": 1257, - "nodeType": "ParameterList", - "parameters": [], - "src": "4724:0:13" - }, - "scope": 1318, - "src": "4648:77:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1259, - "nodeType": "StructuredDocumentation", - "src": "4731:250:13", - "text": " @notice Service provider stops providing the service.\n @dev Emits a {ServiceStopped} event.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." - }, - "functionSelector": "8180083b", - "id": 1266, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "stopService", - "nameLocation": "4995:11:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1264, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1261, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "5015:15:13", - "nodeType": "VariableDeclaration", - "scope": 1266, - "src": "5007:23:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1260, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5007:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1263, - "mutability": "mutable", - "name": "data", - "nameLocation": "5047:4:13", - "nodeType": "VariableDeclaration", - "scope": 1266, - "src": "5032:19:13", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1262, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5032:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5006:46:13" - }, - "returnParameters": { - "id": 1265, - "nodeType": "ParameterList", - "parameters": [], - "src": "5061:0:13" - }, - "scope": 1318, - "src": "4986:76:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1267, - "nodeType": "StructuredDocumentation", - "src": "5068:931:13", - "text": " @notice Collects payment earnt by the service provider.\n @dev The implementation of this function is expected to interact with {GraphPayments}\n to collect payment from the service payer, which is done via {IGraphPayments-collect}.\n @param serviceProvider The address of the service provider.\n Emits a {ServicePaymentCollected} event.\n NOTE: Data services that are vetted by the Graph Council might qualify for a portion of\n protocol issuance to cover for these payments. In this case, the funds are taken by\n interacting with the rewards manager contract instead of the {GraphPayments} contract.\n @param serviceProvider The address of the service provider.\n @param feeType The type of fee to collect as defined in {GraphPayments}.\n @param data Custom data, usage defined by the data service.\n @return The amount of tokens collected." - }, - "functionSelector": "b15d2a2c", - "id": 1279, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "collect", - "nameLocation": "6013:7:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1275, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1269, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "6038:15:13", - "nodeType": "VariableDeclaration", - "scope": 1279, - "src": "6030:23:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1268, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6030:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1272, - "mutability": "mutable", - "name": "feeType", - "nameLocation": "6091:7:13", - "nodeType": "VariableDeclaration", - "scope": 1279, - "src": "6063:35:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 1271, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1270, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "6063:14:13", - "6078:12:13" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "6063:27:13" - }, - "referencedDeclaration": 2166, - "src": "6063:27:13", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1274, - "mutability": "mutable", - "name": "data", - "nameLocation": "6123:4:13", - "nodeType": "VariableDeclaration", - "scope": 1279, - "src": "6108:19:13", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1273, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6108:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6020:113:13" - }, - "returnParameters": { - "id": 1278, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1277, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1279, - "src": "6152:7:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1276, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6152:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6151:9:13" - }, - "scope": 1318, - "src": "6004:157:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1280, - "nodeType": "StructuredDocumentation", - "src": "6167:367:13", - "text": " @notice Slash a service provider for misbehaviour.\n @dev To slash the service provider's provision the function should call\n {Staking-slash}.\n Emits a {ServiceProviderSlashed} event.\n @param serviceProvider The address of the service provider.\n @param data Custom data, usage defined by the data service." - }, - "functionSelector": "cb8347fe", - "id": 1287, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "slash", - "nameLocation": "6548:5:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1285, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1282, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "6562:15:13", - "nodeType": "VariableDeclaration", - "scope": 1287, - "src": "6554:23:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1281, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6554:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1284, - "mutability": "mutable", - "name": "data", - "nameLocation": "6594:4:13", - "nodeType": "VariableDeclaration", - "scope": 1287, - "src": "6579:19:13", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1283, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6579:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6553:46:13" - }, - "returnParameters": { - "id": 1286, - "nodeType": "ParameterList", - "parameters": [], - "src": "6608:0:13" - }, - "scope": 1318, - "src": "6539:70:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1288, - "nodeType": "StructuredDocumentation", - "src": "6615:163:13", - "text": " @notice External getter for the thawing period range\n @return Minimum thawing period allowed\n @return Maximum thawing period allowed" - }, - "functionSelector": "71ce020a", - "id": 1295, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getThawingPeriodRange", - "nameLocation": "6792:21:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1289, - "nodeType": "ParameterList", - "parameters": [], - "src": "6813:2:13" - }, - "returnParameters": { - "id": 1294, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1291, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1295, - "src": "6839:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1290, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "6839:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1293, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1295, - "src": "6847:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1292, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "6847:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "6838:16:13" - }, - "scope": 1318, - "src": "6783:72:13", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1296, - "nodeType": "StructuredDocumentation", - "src": "6861:157:13", - "text": " @notice External getter for the verifier cut range\n @return Minimum verifier cut allowed\n @return Maximum verifier cut allowed" - }, - "functionSelector": "482468b7", - "id": 1303, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getVerifierCutRange", - "nameLocation": "7032:19:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1297, - "nodeType": "ParameterList", - "parameters": [], - "src": "7051:2:13" - }, - "returnParameters": { - "id": 1302, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1299, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1303, - "src": "7077:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1298, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "7077:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1301, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1303, - "src": "7085:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1300, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "7085:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "7076:16:13" - }, - "scope": 1318, - "src": "7023:70:13", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1304, - "nodeType": "StructuredDocumentation", - "src": "7099:169:13", - "text": " @notice External getter for the provision tokens range\n @return Minimum provision tokens allowed\n @return Maximum provision tokens allowed" - }, - "functionSelector": "819ba366", - "id": 1311, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getProvisionTokensRange", - "nameLocation": "7282:23:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1305, - "nodeType": "ParameterList", - "parameters": [], - "src": "7305:2:13" - }, - "returnParameters": { - "id": 1310, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1307, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1311, - "src": "7331:7:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1306, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7331:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1309, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1311, - "src": "7340:7:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1308, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7340:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7330:18:13" - }, - "scope": 1318, - "src": "7273:76:13", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1312, - "nodeType": "StructuredDocumentation", - "src": "7355:103:13", - "text": " @notice External getter for the delegation ratio\n @return The delegation ratio" - }, - "functionSelector": "1ebb7c30", - "id": 1317, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getDelegationRatio", - "nameLocation": "7472:18:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1313, - "nodeType": "ParameterList", - "parameters": [], - "src": "7490:2:13" - }, - "returnParameters": { - "id": 1316, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1315, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1317, - "src": "7516:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1314, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "7516:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "7515:8:13" - }, - "scope": 1318, - "src": "7463:61:13", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1319, - "src": "897:6629:13", - "usedErrors": [], - "usedEvents": [ - 1198, - 1203, - 1210, - 1217, - 1227, - 1234 - ] - } - ], - "src": "45:7482:13" - }, - "id": 13 - }, - "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", - "exportedSymbols": { - "IDataService": [ - 1318 - ], - "IDataServiceFees": [ - 1381 - ] - }, - "id": 1382, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1320, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:14" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol", - "file": "./IDataService.sol", - "id": 1322, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1382, - "sourceUnit": 1319, - "src": "70:50:14", - "symbolAliases": [ - { - "foreign": { - "id": 1321, - "name": "IDataService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1318, - "src": "79:12:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 1324, - "name": "IDataService", - "nameLocations": [ - "1067:12:14" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1318, - "src": "1067:12:14" - }, - "id": 1325, - "nodeType": "InheritanceSpecifier", - "src": "1067:12:14" - } - ], - "canonicalName": "IDataServiceFees", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 1323, - "nodeType": "StructuredDocumentation", - "src": "122:914:14", - "text": " @title Interface for the {DataServiceFees} contract.\n @notice Extension for the {IDataService} contract to handle payment collateralization\n using a Horizon provision.\n It's designed to be used with the Data Service framework:\n - When a service provider collects payment with {IDataService.collect} the data service should lock\n stake to back the payment using {_lockStake}.\n - Every time there is a payment collection with {IDataService.collect}, the data service should\n attempt to release any expired stake claims by calling {_releaseStake}.\n - Stake claims can also be manually released by calling {releaseStake} directly.\n @dev Note that this implementation uses the entire provisioned stake as collateral for the payment.\n It can be used to provide economic security for the payments collected as long as the provisioned\n stake is not being used for other purposes." - }, - "fullyImplemented": false, - "id": 1381, - "linearizedBaseContracts": [ - 1381, - 1318 - ], - "name": "IDataServiceFees", - "nameLocation": "1047:16:14", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "IDataServiceFees.StakeClaim", - "documentation": { - "id": 1326, - "nodeType": "StructuredDocumentation", - "src": "1086:244:14", - "text": " @notice A stake claim, representing provisioned stake that gets locked\n to be released to a service provider.\n @dev StakeClaims are stored in linked lists by service provider, ordered by\n creation timestamp." - }, - "id": 1335, - "members": [ - { - "constant": false, - "id": 1328, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "1429:6:14", - "nodeType": "VariableDeclaration", - "scope": 1335, - "src": "1421:14:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1327, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1421:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1330, - "mutability": "mutable", - "name": "createdAt", - "nameLocation": "1501:9:14", - "nodeType": "VariableDeclaration", - "scope": 1335, - "src": "1493:17:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1329, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1493:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1332, - "mutability": "mutable", - "name": "releasableAt", - "nameLocation": "1603:12:14", - "nodeType": "VariableDeclaration", - "scope": 1335, - "src": "1595:20:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1331, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1595:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1334, - "mutability": "mutable", - "name": "nextClaim", - "nameLocation": "1674:9:14", - "nodeType": "VariableDeclaration", - "scope": 1335, - "src": "1666:17:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1333, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1666:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "name": "StakeClaim", - "nameLocation": "1342:10:14", - "nodeType": "StructDefinition", - "scope": 1381, - "src": "1335:355:14", - "visibility": "public" - }, - { - "anonymous": false, - "documentation": { - "id": 1336, - "nodeType": "StructuredDocumentation", - "src": "1696:338:14", - "text": " @notice Emitted when a stake claim is created and stake is locked.\n @param serviceProvider The address of the service provider\n @param claimId The id of the stake claim\n @param tokens The amount of tokens to lock in the claim\n @param unlockTimestamp The timestamp when the tokens can be released" - }, - "eventSelector": "5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f", - "id": 1346, - "name": "StakeClaimLocked", - "nameLocation": "2045:16:14", - "nodeType": "EventDefinition", - "parameters": { - "id": 1345, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1338, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2087:15:14", - "nodeType": "VariableDeclaration", - "scope": 1346, - "src": "2071:31:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1337, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2071:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1340, - "indexed": true, - "mutability": "mutable", - "name": "claimId", - "nameLocation": "2128:7:14", - "nodeType": "VariableDeclaration", - "scope": 1346, - "src": "2112:23:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1339, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2112:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1342, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2153:6:14", - "nodeType": "VariableDeclaration", - "scope": 1346, - "src": "2145:14:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1341, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2145:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1344, - "indexed": false, - "mutability": "mutable", - "name": "unlockTimestamp", - "nameLocation": "2177:15:14", - "nodeType": "VariableDeclaration", - "scope": 1346, - "src": "2169:23:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1343, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2169:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2061:137:14" - }, - "src": "2039:160:14" - }, - { - "anonymous": false, - "documentation": { - "id": 1347, - "nodeType": "StructuredDocumentation", - "src": "2205:324:14", - "text": " @notice Emitted when a stake claim is released and stake is unlocked.\n @param serviceProvider The address of the service provider\n @param claimId The id of the stake claim\n @param tokens The amount of tokens released\n @param releasableAt The timestamp when the tokens were released" - }, - "eventSelector": "4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44", - "id": 1357, - "name": "StakeClaimReleased", - "nameLocation": "2540:18:14", - "nodeType": "EventDefinition", - "parameters": { - "id": 1356, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1349, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2584:15:14", - "nodeType": "VariableDeclaration", - "scope": 1357, - "src": "2568:31:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1348, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2568:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1351, - "indexed": true, - "mutability": "mutable", - "name": "claimId", - "nameLocation": "2625:7:14", - "nodeType": "VariableDeclaration", - "scope": 1357, - "src": "2609:23:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1350, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2609:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1353, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2650:6:14", - "nodeType": "VariableDeclaration", - "scope": 1357, - "src": "2642:14:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1352, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2642:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1355, - "indexed": false, - "mutability": "mutable", - "name": "releasableAt", - "nameLocation": "2674:12:14", - "nodeType": "VariableDeclaration", - "scope": 1357, - "src": "2666:20:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1354, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2666:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2558:134:14" - }, - "src": "2534:159:14" - }, - { - "anonymous": false, - "documentation": { - "id": 1358, - "nodeType": "StructuredDocumentation", - "src": "2699:283:14", - "text": " @notice Emitted when a series of stake claims are released.\n @param serviceProvider The address of the service provider\n @param claimsCount The number of stake claims being released\n @param tokensReleased The total amount of tokens being released" - }, - "eventSelector": "13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb", - "id": 1366, - "name": "StakeClaimsReleased", - "nameLocation": "2993:19:14", - "nodeType": "EventDefinition", - "parameters": { - "id": 1365, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1360, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3029:15:14", - "nodeType": "VariableDeclaration", - "scope": 1366, - "src": "3013:31:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1359, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3013:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1362, - "indexed": false, - "mutability": "mutable", - "name": "claimsCount", - "nameLocation": "3054:11:14", - "nodeType": "VariableDeclaration", - "scope": 1366, - "src": "3046:19:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1361, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3046:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1364, - "indexed": false, - "mutability": "mutable", - "name": "tokensReleased", - "nameLocation": "3075:14:14", - "nodeType": "VariableDeclaration", - "scope": 1366, - "src": "3067:22:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1363, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3067:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3012:78:14" - }, - "src": "2987:104:14" - }, - { - "documentation": { - "id": 1367, - "nodeType": "StructuredDocumentation", - "src": "3097:91:14", - "text": " @notice Thrown when attempting to get a stake claim that does not exist." - }, - "errorSelector": "41cd26a4", - "id": 1371, - "name": "DataServiceFeesClaimNotFound", - "nameLocation": "3199:28:14", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1370, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1369, - "mutability": "mutable", - "name": "claimId", - "nameLocation": "3236:7:14", - "nodeType": "VariableDeclaration", - "scope": 1371, - "src": "3228:15:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1368, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3228:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3227:17:14" - }, - "src": "3193:52:14" - }, - { - "documentation": { - "id": 1372, - "nodeType": "StructuredDocumentation", - "src": "3251:83:14", - "text": " @notice Emitted when trying to lock zero tokens in a stake claim" - }, - "errorSelector": "8f4c63d9", - "id": 1374, - "name": "DataServiceFeesZeroTokens", - "nameLocation": "3345:25:14", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1373, - "nodeType": "ParameterList", - "parameters": [], - "src": "3370:2:14" - }, - "src": "3339:34:14" - }, - { - "documentation": { - "id": 1375, - "nodeType": "StructuredDocumentation", - "src": "3379:519:14", - "text": " @notice Releases expired stake claims for the caller.\n @dev This function is only meant to be called if the service provider has enough\n stake claims that releasing them all at once would exceed the block gas limit.\n @dev This function can be overriden and/or disabled.\n @dev Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\n @param numClaimsToRelease Amount of stake claims to process. If 0, all stake claims are processed." - }, - "functionSelector": "45f54485", - "id": 1380, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "releaseStake", - "nameLocation": "3912:12:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1378, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1377, - "mutability": "mutable", - "name": "numClaimsToRelease", - "nameLocation": "3933:18:14", - "nodeType": "VariableDeclaration", - "scope": 1380, - "src": "3925:26:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1376, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3925:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3924:28:14" - }, - "returnParameters": { - "id": 1379, - "nodeType": "ParameterList", - "parameters": [], - "src": "3961:0:14" - }, - "scope": 1381, - "src": "3903:59:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1382, - "src": "1037:2927:14", - "usedErrors": [ - 1371, - 1374 - ], - "usedEvents": [ - 1198, - 1203, - 1210, - 1217, - 1227, - 1234, - 1346, - 1357, - 1366 - ] - } - ], - "src": "45:3920:14" - }, - "id": 14 - }, - "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol", - "exportedSymbols": { - "IDataService": [ - 1318 - ], - "IDataServicePausable": [ - 1409 - ] - }, - "id": 1410, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1383, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:15" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol", - "file": "./IDataService.sol", - "id": 1385, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1410, - "sourceUnit": 1319, - "src": "70:50:15", - "symbolAliases": [ - { - "foreign": { - "id": 1384, - "name": "IDataService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1318, - "src": "79:12:15", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 1387, - "name": "IDataService", - "nameLocations": [ - "401:12:15" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1318, - "src": "401:12:15" - }, - "id": 1388, - "nodeType": "InheritanceSpecifier", - "src": "401:12:15" - } - ], - "canonicalName": "IDataServicePausable", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 1386, - "nodeType": "StructuredDocumentation", - "src": "122:244:15", - "text": " @title Interface for the {DataServicePausable} contract.\n @notice Extension for the {IDataService} contract, adds pausing functionality\n to the data service. Pausing is controlled by privileged accounts called\n pause guardians." - }, - "fullyImplemented": false, - "id": 1409, - "linearizedBaseContracts": [ - 1409, - 1318 - ], - "name": "IDataServicePausable", - "nameLocation": "377:20:15", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 1389, - "nodeType": "StructuredDocumentation", - "src": "420:183:15", - "text": " @notice Emitted when a pause guardian is set.\n @param account The address of the pause guardian\n @param allowed The allowed status of the pause guardian" - }, - "eventSelector": "a95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789", - "id": 1395, - "name": "PauseGuardianSet", - "nameLocation": "614:16:15", - "nodeType": "EventDefinition", - "parameters": { - "id": 1394, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1391, - "indexed": true, - "mutability": "mutable", - "name": "account", - "nameLocation": "647:7:15", - "nodeType": "VariableDeclaration", - "scope": 1395, - "src": "631:23:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1390, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "631:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1393, - "indexed": false, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "661:7:15", - "nodeType": "VariableDeclaration", - "scope": 1395, - "src": "656:12:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1392, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "656:4:15", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "630:39:15" - }, - "src": "608:62:15" - }, - { - "documentation": { - "id": 1396, - "nodeType": "StructuredDocumentation", - "src": "676:132:15", - "text": " @notice Emitted when a the caller is not a pause guardian\n @param account The address of the pause guardian" - }, - "errorSelector": "72e3ef97", - "id": 1400, - "name": "DataServicePausableNotPauseGuardian", - "nameLocation": "819:35:15", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1399, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1398, - "mutability": "mutable", - "name": "account", - "nameLocation": "863:7:15", - "nodeType": "VariableDeclaration", - "scope": 1400, - "src": "855:15:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1397, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "855:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "854:17:15" - }, - "src": "813:59:15" - }, - { - "documentation": { - "id": 1401, - "nodeType": "StructuredDocumentation", - "src": "878:256:15", - "text": " @notice Pauses the data service.\n @dev Note that only functions using the modifiers `whenNotPaused`\n and `whenPaused` will be affected by the pause.\n Requirements:\n - The contract must not be already paused" - }, - "functionSelector": "8456cb59", - "id": 1404, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "pause", - "nameLocation": "1148:5:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1402, - "nodeType": "ParameterList", - "parameters": [], - "src": "1153:2:15" - }, - "returnParameters": { - "id": 1403, - "nodeType": "ParameterList", - "parameters": [], - "src": "1164:0:15" - }, - "scope": 1409, - "src": "1139:26:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1405, - "nodeType": "StructuredDocumentation", - "src": "1171:246:15", - "text": " @notice Unpauses the data service.\n @dev Note that only functions using the modifiers `whenNotPaused`\n and `whenPaused` will be affected by the pause.\n Requirements:\n - The contract must be paused" - }, - "functionSelector": "3f4ba83a", - "id": 1408, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "unpause", - "nameLocation": "1431:7:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1406, - "nodeType": "ParameterList", - "parameters": [], - "src": "1438:2:15" - }, - "returnParameters": { - "id": 1407, - "nodeType": "ParameterList", - "parameters": [], - "src": "1449:0:15" - }, - "scope": 1409, - "src": "1422:28:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1410, - "src": "367:1085:15", - "usedErrors": [ - 1400 - ], - "usedEvents": [ - 1198, - 1203, - 1210, - 1217, - 1227, - 1234, - 1395 - ] - } - ], - "src": "45:1408:15" - }, - "id": 15 - }, - "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol", - "exportedSymbols": { - "IHorizonStaking": [ - 2235 - ], - "ProvisionTracker": [ - 1555 - ] - }, - "id": 1556, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1411, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:16" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", - "file": "../../interfaces/IHorizonStaking.sol", - "id": 1413, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1556, - "sourceUnit": 2236, - "src": "70:71:16", - "symbolAliases": [ - { - "foreign": { - "id": 1412, - "name": "IHorizonStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2235, - "src": "79:15:16", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ProvisionTracker", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 1414, - "nodeType": "StructuredDocumentation", - "src": "143:495:16", - "text": " @title ProvisionTracker library\n @notice A library to facilitate tracking of \"used tokens\" on Graph Horizon provisions. This can be used to\n ensure data services have enough economic security (provisioned stake) to back the payments they collect for\n their services.\n The library provides two primitives, lock and release to signal token usage and free up tokens respectively. It\n does not make any assumptions about the conditions under which tokens are locked or released." - }, - "fullyImplemented": true, - "id": 1555, - "linearizedBaseContracts": [ - 1555 - ], - "name": "ProvisionTracker", - "nameLocation": "647:16:16", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 1415, - "nodeType": "StructuredDocumentation", - "src": "670:80:16", - "text": " @notice Thrown when trying to lock more tokens than available" - }, - "errorSelector": "5f8ec709", - "id": 1421, - "name": "ProvisionTrackerInsufficientTokens", - "nameLocation": "761:34:16", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1420, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1417, - "mutability": "mutable", - "name": "tokensAvailable", - "nameLocation": "804:15:16", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "796:23:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1416, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "796:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1419, - "mutability": "mutable", - "name": "tokensRequired", - "nameLocation": "829:14:16", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "821:22:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1418, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "821:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "795:49:16" - }, - "src": "755:90:16" - }, - { - "body": { - "id": 1479, - "nodeType": "Block", - "src": "1583:384:16", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1438, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1433, - "src": "1597:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 1439, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1607:1:16", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1597:11:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1442, - "nodeType": "IfStatement", - "src": "1593:24:16", - "trueBody": { - "functionReturnParameters": 1437, - "id": 1441, - "nodeType": "Return", - "src": "1610:7:16" - } - }, - { - "assignments": [ - 1444 - ], - "declarations": [ - { - "constant": false, - "id": 1444, - "mutability": "mutable", - "name": "tokensRequired", - "nameLocation": "1635:14:16", - "nodeType": "VariableDeclaration", - "scope": 1479, - "src": "1627:22:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1443, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1627:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 1450, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1449, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 1445, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1426, - "src": "1652:4:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1447, - "indexExpression": { - "id": 1446, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1431, - "src": "1657:15:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1652:21:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 1448, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1433, - "src": "1676:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1652:30:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1627:55:16" - }, - { - "assignments": [ - 1452 - ], - "declarations": [ - { - "constant": false, - "id": 1452, - "mutability": "mutable", - "name": "tokensAvailable", - "nameLocation": "1700:15:16", - "nodeType": "VariableDeclaration", - "scope": 1479, - "src": "1692:23:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1451, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1692:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 1462, - "initialValue": { - "arguments": [ - { - "id": 1455, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1431, - "src": "1750:15:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 1458, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "1775:4:16", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ProvisionTracker_$1555", - "typeString": "library ProvisionTracker" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ProvisionTracker_$1555", - "typeString": "library ProvisionTracker" - } - ], - "id": 1457, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1767:7:16", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1456, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1767:7:16", - "typeDescriptions": {} - } - }, - "id": 1459, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1767:13:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1460, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1435, - "src": "1782:15:16", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "id": 1453, - "name": "graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1429, - "src": "1718:12:16", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 1454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1731:18:16", - "memberName": "getTokensAvailable", - "nodeType": "MemberAccess", - "referencedDeclaration": 2796, - "src": "1718:31:16", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint32_$returns$_t_uint256_$", - "typeString": "function (address,address,uint32) view external returns (uint256)" - } - }, - "id": 1461, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1718:80:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1692:106:16" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1464, - "name": "tokensRequired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1444, - "src": "1816:14:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 1465, - "name": "tokensAvailable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1452, - "src": "1834:15:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1816:33:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 1468, - "name": "tokensAvailable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1452, - "src": "1886:15:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 1469, - "name": "tokensRequired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1444, - "src": "1903:14:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1467, - "name": "ProvisionTrackerInsufficientTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1421, - "src": "1851:34:16", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 1470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1851:67:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 1463, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1808:7:16", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 1471, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1808:111:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1472, - "nodeType": "ExpressionStatement", - "src": "1808:111:16" - }, - { - "expression": { - "id": 1477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1473, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1426, - "src": "1929:4:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1475, - "indexExpression": { - "id": 1474, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1431, - "src": "1934:15:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1929:21:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "id": 1476, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1433, - "src": "1954:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1929:31:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1478, - "nodeType": "ExpressionStatement", - "src": "1929:31:16" - } - ] - }, - "documentation": { - "id": 1422, - "nodeType": "StructuredDocumentation", - "src": "851:521:16", - "text": " @notice Locks tokens for a service provider\n @dev Requirements:\n - `tokens` must be less than or equal to the amount of tokens available, as reported by the HorizonStaking contract\n @param self The provision tracker mapping\n @param graphStaking The HorizonStaking contract\n @param serviceProvider The service provider address\n @param tokens The amount of tokens to lock\n @param delegationRatio A delegation ratio to limit the amount of delegation that's usable" - }, - "id": 1480, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "lock", - "nameLocation": "1386:4:16", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1436, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1426, - "mutability": "mutable", - "name": "self", - "nameLocation": "1436:4:16", - "nodeType": "VariableDeclaration", - "scope": 1480, - "src": "1400:40:16", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 1425, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 1423, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1408:7:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1400:27:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 1424, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1419:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1429, - "mutability": "mutable", - "name": "graphStaking", - "nameLocation": "1466:12:16", - "nodeType": "VariableDeclaration", - "scope": 1480, - "src": "1450:28:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - }, - "typeName": { - "id": 1428, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1427, - "name": "IHorizonStaking", - "nameLocations": [ - "1450:15:16" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2235, - "src": "1450:15:16" - }, - "referencedDeclaration": 2235, - "src": "1450:15:16", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1431, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1496:15:16", - "nodeType": "VariableDeclaration", - "scope": 1480, - "src": "1488:23:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1430, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1488:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1433, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "1529:6:16", - "nodeType": "VariableDeclaration", - "scope": 1480, - "src": "1521:14:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1432, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1521:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1435, - "mutability": "mutable", - "name": "delegationRatio", - "nameLocation": "1552:15:16", - "nodeType": "VariableDeclaration", - "scope": 1480, - "src": "1545:22:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1434, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1545:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "1390:183:16" - }, - "returnParameters": { - "id": 1437, - "nodeType": "ParameterList", - "parameters": [], - "src": "1583:0:16" - }, - "scope": 1555, - "src": "1377:590:16", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1517, - "nodeType": "Block", - "src": "2440:198:16", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1494, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1492, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1489, - "src": "2454:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 1493, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2464:1:16", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2454:11:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1496, - "nodeType": "IfStatement", - "src": "2450:24:16", - "trueBody": { - "functionReturnParameters": 1491, - "id": 1495, - "nodeType": "Return", - "src": "2467:7:16" - } - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 1498, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1485, - "src": "2491:4:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1500, - "indexExpression": { - "id": 1499, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1487, - "src": "2496:15:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2491:21:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 1501, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1489, - "src": "2516:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2491:31:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "baseExpression": { - "id": 1504, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1485, - "src": "2559:4:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1506, - "indexExpression": { - "id": 1505, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1487, - "src": "2564:15:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2559:21:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 1507, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1489, - "src": "2582:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1503, - "name": "ProvisionTrackerInsufficientTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1421, - "src": "2524:34:16", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 1508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2524:65:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 1497, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2483:7:16", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 1509, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2483:107:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1510, - "nodeType": "ExpressionStatement", - "src": "2483:107:16" - }, - { - "expression": { - "id": 1515, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1511, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1485, - "src": "2600:4:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1513, - "indexExpression": { - "id": 1512, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1487, - "src": "2605:15:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2600:21:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "id": 1514, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1489, - "src": "2625:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2600:31:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1516, - "nodeType": "ExpressionStatement", - "src": "2600:31:16" - } - ] - }, - "documentation": { - "id": 1481, - "nodeType": "StructuredDocumentation", - "src": "1973:353:16", - "text": " @notice Releases tokens for a service provider\n @dev Requirements:\n - `tokens` must be less than or equal to the amount of tokens locked for the service provider\n @param self The provision tracker mapping\n @param serviceProvider The service provider address\n @param tokens The amount of tokens to release" - }, - "id": 1518, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "release", - "nameLocation": "2340:7:16", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1490, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1485, - "mutability": "mutable", - "name": "self", - "nameLocation": "2384:4:16", - "nodeType": "VariableDeclaration", - "scope": 1518, - "src": "2348:40:16", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 1484, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 1482, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2356:7:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "2348:27:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 1483, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2367:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1487, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2398:15:16", - "nodeType": "VariableDeclaration", - "scope": 1518, - "src": "2390:23:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1486, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2390:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1489, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2423:6:16", - "nodeType": "VariableDeclaration", - "scope": 1518, - "src": "2415:14:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1488, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2415:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2347:83:16" - }, - "returnParameters": { - "id": 1491, - "nodeType": "ParameterList", - "parameters": [], - "src": "2440:0:16" - }, - "scope": 1555, - "src": "2331:307:16", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1553, - "nodeType": "Block", - "src": "3203:180:16", - "statements": [ - { - "assignments": [ - 1536 - ], - "declarations": [ - { - "constant": false, - "id": 1536, - "mutability": "mutable", - "name": "tokensAvailable", - "nameLocation": "3221:15:16", - "nodeType": "VariableDeclaration", - "scope": 1553, - "src": "3213:23:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1535, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3213:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 1546, - "initialValue": { - "arguments": [ - { - "id": 1539, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1528, - "src": "3271:15:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 1542, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "3296:4:16", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ProvisionTracker_$1555", - "typeString": "library ProvisionTracker" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ProvisionTracker_$1555", - "typeString": "library ProvisionTracker" - } - ], - "id": 1541, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3288:7:16", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1540, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3288:7:16", - "typeDescriptions": {} - } - }, - "id": 1543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3288:13:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1544, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1530, - "src": "3303:15:16", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "id": 1537, - "name": "graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1526, - "src": "3239:12:16", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 1538, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3252:18:16", - "memberName": "getTokensAvailable", - "nodeType": "MemberAccess", - "referencedDeclaration": 2796, - "src": "3239:31:16", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint32_$returns$_t_uint256_$", - "typeString": "function (address,address,uint32) view external returns (uint256)" - } - }, - "id": 1545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3239:80:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3213:106:16" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1551, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 1547, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1523, - "src": "3336:4:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1549, - "indexExpression": { - "id": 1548, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1528, - "src": "3341:15:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3336:21:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 1550, - "name": "tokensAvailable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1536, - "src": "3361:15:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3336:40:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1534, - "id": 1552, - "nodeType": "Return", - "src": "3329:47:16" - } - ] - }, - "documentation": { - "id": 1519, - "nodeType": "StructuredDocumentation", - "src": "2644:351:16", - "text": " @notice Checks if a service provider has enough tokens available to lock\n @param self The provision tracker mapping\n @param graphStaking The HorizonStaking contract\n @param serviceProvider The service provider address\n @param delegationRatio A delegation ratio to limit the amount of delegation that's usable" - }, - "id": 1554, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "check", - "nameLocation": "3009:5:16", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1531, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1523, - "mutability": "mutable", - "name": "self", - "nameLocation": "3060:4:16", - "nodeType": "VariableDeclaration", - "scope": 1554, - "src": "3024:40:16", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 1522, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 1520, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3032:7:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "3024:27:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 1521, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3043:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1526, - "mutability": "mutable", - "name": "graphStaking", - "nameLocation": "3090:12:16", - "nodeType": "VariableDeclaration", - "scope": 1554, - "src": "3074:28:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - }, - "typeName": { - "id": 1525, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1524, - "name": "IHorizonStaking", - "nameLocations": [ - "3074:15:16" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2235, - "src": "3074:15:16" - }, - "referencedDeclaration": 2235, - "src": "3074:15:16", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1528, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3120:15:16", - "nodeType": "VariableDeclaration", - "scope": 1554, - "src": "3112:23:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1527, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3112:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1530, - "mutability": "mutable", - "name": "delegationRatio", - "nameLocation": "3152:15:16", - "nodeType": "VariableDeclaration", - "scope": 1554, - "src": "3145:22:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1529, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "3145:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "3014:159:16" - }, - "returnParameters": { - "id": 1534, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1533, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1554, - "src": "3197:4:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1532, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3197:4:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3196:6:16" - }, - "scope": 1555, - "src": "3000:383:16", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 1556, - "src": "639:2746:16", - "usedErrors": [ - 1421 - ], - "usedEvents": [] - } - ], - "src": "45:3341:16" - }, - "id": 16 - }, - "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol", - "exportedSymbols": { - "GraphDirectory": [ - 4653 - ], - "IHorizonStaking": [ - 2235 - ], - "Initializable": [ - 5102 - ], - "PPMMath": [ - 4262 - ], - "ProvisionManager": [ - 2128 - ], - "ProvisionManagerV1Storage": [ - 2158 - ], - "UintRange": [ - 4290 - ] - }, - "id": 2129, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1557, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:17" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", - "file": "../../interfaces/IHorizonStaking.sol", - "id": 1559, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2129, - "sourceUnit": 2236, - "src": "70:71:17", - "symbolAliases": [ - { - "foreign": { - "id": 1558, - "name": "IHorizonStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2235, - "src": "79:15:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/UintRange.sol", - "file": "../../libraries/UintRange.sol", - "id": 1561, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2129, - "sourceUnit": 4291, - "src": "143:58:17", - "symbolAliases": [ - { - "foreign": { - "id": 1560, - "name": "UintRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4290, - "src": "152:9:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", - "file": "../../libraries/PPMMath.sol", - "id": 1563, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2129, - "sourceUnit": 4263, - "src": "202:54:17", - "symbolAliases": [ - { - "foreign": { - "id": 1562, - "name": "PPMMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4262, - "src": "211:7:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "id": 1565, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2129, - "sourceUnit": 5103, - "src": "258:98:17", - "symbolAliases": [ - { - "foreign": { - "id": 1564, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5102, - "src": "267:13:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", - "file": "../../utilities/GraphDirectory.sol", - "id": 1567, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2129, - "sourceUnit": 4654, - "src": "357:68:17", - "symbolAliases": [ - { - "foreign": { - "id": 1566, - "name": "GraphDirectory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4653, - "src": "366:14:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol", - "file": "./ProvisionManagerStorage.sol", - "id": 1569, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2129, - "sourceUnit": 2159, - "src": "426:74:17", - "symbolAliases": [ - { - "foreign": { - "id": 1568, - "name": "ProvisionManagerV1Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2158, - "src": "435:25:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1571, - "name": "Initializable", - "nameLocations": [ - "1007:13:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5102, - "src": "1007:13:17" - }, - "id": 1572, - "nodeType": "InheritanceSpecifier", - "src": "1007:13:17" - }, - { - "baseName": { - "id": 1573, - "name": "GraphDirectory", - "nameLocations": [ - "1022:14:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4653, - "src": "1022:14:17" - }, - "id": 1574, - "nodeType": "InheritanceSpecifier", - "src": "1022:14:17" - }, - { - "baseName": { - "id": 1575, - "name": "ProvisionManagerV1Storage", - "nameLocations": [ - "1038:25:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2158, - "src": "1038:25:17" - }, - "id": 1576, - "nodeType": "InheritanceSpecifier", - "src": "1038:25:17" - } - ], - "canonicalName": "ProvisionManager", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1570, - "nodeType": "StructuredDocumentation", - "src": "502:466:17", - "text": " @title ProvisionManager contract\n @notice A helper contract that implements several provision management functions.\n @dev Provides utilities to verify provision parameters are within an acceptable range. Each\n parameter has an overridable setter and getter for the validity range, and a checker that reverts\n if the parameter is out of range.\n The parameters are:\n - Provision parameters (thawing period and verifier cut)\n - Provision tokens" - }, - "fullyImplemented": true, - "id": 2128, - "linearizedBaseContracts": [ - 2128, - 2158, - 4653, - 5102 - ], - "name": "ProvisionManager", - "nameLocation": "987:16:17", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 1579, - "libraryName": { - "id": 1577, - "name": "UintRange", - "nameLocations": [ - "1076:9:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4290, - "src": "1076:9:17" - }, - "nodeType": "UsingForDirective", - "src": "1070:28:17", - "typeName": { - "id": 1578, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1090:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "constant": true, - "id": 1586, - "mutability": "constant", - "name": "DEFAULT_MIN_VERIFIER_CUT", - "nameLocation": "1146:24:17", - "nodeType": "VariableDeclaration", - "scope": 2128, - "src": "1121:68:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1580, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1121:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": { - "expression": { - "arguments": [ - { - "id": 1583, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1178:6:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - }, - "typeName": { - "id": 1582, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1178:6:17", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - } - ], - "id": 1581, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -27, - "src": "1173:4:17", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1584, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1173:12:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint32", - "typeString": "type(uint32)" - } - }, - "id": 1585, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1186:3:17", - "memberName": "min", - "nodeType": "MemberAccess", - "src": "1173:16:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 1593, - "mutability": "constant", - "name": "DEFAULT_MAX_VERIFIER_CUT", - "nameLocation": "1220:24:17", - "nodeType": "VariableDeclaration", - "scope": 2128, - "src": "1195:75:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1587, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1195:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": { - "arguments": [ - { - "expression": { - "id": 1590, - "name": "PPMMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4262, - "src": "1254:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_PPMMath_$4262_$", - "typeString": "type(library PPMMath)" - } - }, - "id": 1591, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1262:7:17", - "memberName": "MAX_PPM", - "nodeType": "MemberAccess", - "referencedDeclaration": 4175, - "src": "1254:15:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1589, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1247:6:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - }, - "typeName": { - "id": 1588, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1247:6:17", - "typeDescriptions": {} - } - }, - "id": 1592, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1247:23:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 1600, - "mutability": "constant", - "name": "DEFAULT_MIN_THAWING_PERIOD", - "nameLocation": "1301:26:17", - "nodeType": "VariableDeclaration", - "scope": 2128, - "src": "1276:70:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1594, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1276:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "value": { - "expression": { - "arguments": [ - { - "id": 1597, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1335:6:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 1596, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1335:6:17", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - } - ], - "id": 1595, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -27, - "src": "1330:4:17", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1598, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1330:12:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint64", - "typeString": "type(uint64)" - } - }, - "id": 1599, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1343:3:17", - "memberName": "min", - "nodeType": "MemberAccess", - "src": "1330:16:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 1607, - "mutability": "constant", - "name": "DEFAULT_MAX_THAWING_PERIOD", - "nameLocation": "1377:26:17", - "nodeType": "VariableDeclaration", - "scope": 2128, - "src": "1352:70:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1601, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1352:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "value": { - "expression": { - "arguments": [ - { - "id": 1604, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1411:6:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 1603, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1411:6:17", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - } - ], - "id": 1602, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -27, - "src": "1406:4:17", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1605, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1406:12:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint64", - "typeString": "type(uint64)" - } - }, - "id": 1606, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1419:3:17", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "1406:16:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 1614, - "mutability": "constant", - "name": "DEFAULT_MIN_PROVISION_TOKENS", - "nameLocation": "1454:28:17", - "nodeType": "VariableDeclaration", - "scope": 2128, - "src": "1428:74:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1608, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1428:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "expression": { - "arguments": [ - { - "id": 1611, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1490:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 1610, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1490:7:17", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "id": 1609, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -27, - "src": "1485:4:17", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1612, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1485:13:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint256", - "typeString": "type(uint256)" - } - }, - "id": 1613, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1499:3:17", - "memberName": "min", - "nodeType": "MemberAccess", - "src": "1485:17:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 1621, - "mutability": "constant", - "name": "DEFAULT_MAX_PROVISION_TOKENS", - "nameLocation": "1534:28:17", - "nodeType": "VariableDeclaration", - "scope": 2128, - "src": "1508:74:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1615, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1508:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "expression": { - "arguments": [ - { - "id": 1618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1570:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 1617, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1570:7:17", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "id": 1616, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -27, - "src": "1565:4:17", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1619, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1565:13:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint256", - "typeString": "type(uint256)" - } - }, - "id": 1620, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1579:3:17", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "1565:17:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "anonymous": false, - "documentation": { - "id": 1622, - "nodeType": "StructuredDocumentation", - "src": "1589:214:17", - "text": " @notice Emitted when the provision tokens range is set.\n @param min The minimum allowed value for the provision tokens.\n @param max The maximum allowed value for the provision tokens." - }, - "eventSelector": "90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f568849", - "id": 1628, - "name": "ProvisionTokensRangeSet", - "nameLocation": "1814:23:17", - "nodeType": "EventDefinition", - "parameters": { - "id": 1627, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1624, - "indexed": false, - "mutability": "mutable", - "name": "min", - "nameLocation": "1846:3:17", - "nodeType": "VariableDeclaration", - "scope": 1628, - "src": "1838:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1623, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1838:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1626, - "indexed": false, - "mutability": "mutable", - "name": "max", - "nameLocation": "1859:3:17", - "nodeType": "VariableDeclaration", - "scope": 1628, - "src": "1851:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1625, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1851:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1837:26:17" - }, - "src": "1808:56:17" - }, - { - "anonymous": false, - "documentation": { - "id": 1629, - "nodeType": "StructuredDocumentation", - "src": "1870:109:17", - "text": " @notice Emitted when the delegation ratio is set.\n @param ratio The delegation ratio" - }, - "eventSelector": "472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f", - "id": 1633, - "name": "DelegationRatioSet", - "nameLocation": "1990:18:17", - "nodeType": "EventDefinition", - "parameters": { - "id": 1632, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1631, - "indexed": false, - "mutability": "mutable", - "name": "ratio", - "nameLocation": "2016:5:17", - "nodeType": "VariableDeclaration", - "scope": 1633, - "src": "2009:12:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1630, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2009:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2008:14:17" - }, - "src": "1984:39:17" - }, - { - "anonymous": false, - "documentation": { - "id": 1634, - "nodeType": "StructuredDocumentation", - "src": "2029:210:17", - "text": " @notice Emitted when the verifier cut range is set.\n @param min The minimum allowed value for the max verifier cut.\n @param max The maximum allowed value for the max verifier cut." - }, - "eventSelector": "2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a36", - "id": 1640, - "name": "VerifierCutRangeSet", - "nameLocation": "2250:19:17", - "nodeType": "EventDefinition", - "parameters": { - "id": 1639, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1636, - "indexed": false, - "mutability": "mutable", - "name": "min", - "nameLocation": "2277:3:17", - "nodeType": "VariableDeclaration", - "scope": 1640, - "src": "2270:10:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1635, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2270:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1638, - "indexed": false, - "mutability": "mutable", - "name": "max", - "nameLocation": "2289:3:17", - "nodeType": "VariableDeclaration", - "scope": 1640, - "src": "2282:10:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1637, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2282:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2269:24:17" - }, - "src": "2244:50:17" - }, - { - "anonymous": false, - "documentation": { - "id": 1641, - "nodeType": "StructuredDocumentation", - "src": "2300:208:17", - "text": " @notice Emitted when the thawing period range is set.\n @param min The minimum allowed value for the thawing period.\n @param max The maximum allowed value for the thawing period." - }, - "eventSelector": "2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d1", - "id": 1647, - "name": "ThawingPeriodRangeSet", - "nameLocation": "2519:21:17", - "nodeType": "EventDefinition", - "parameters": { - "id": 1646, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1643, - "indexed": false, - "mutability": "mutable", - "name": "min", - "nameLocation": "2548:3:17", - "nodeType": "VariableDeclaration", - "scope": 1647, - "src": "2541:10:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1642, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "2541:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1645, - "indexed": false, - "mutability": "mutable", - "name": "max", - "nameLocation": "2560:3:17", - "nodeType": "VariableDeclaration", - "scope": 1647, - "src": "2553:10:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1644, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "2553:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "2540:24:17" - }, - "src": "2513:52:17" - }, - { - "documentation": { - "id": 1648, - "nodeType": "StructuredDocumentation", - "src": "2571:260:17", - "text": " @notice Thrown when a provision parameter is out of range.\n @param message The error message.\n @param value The value that is out of range.\n @param min The minimum allowed value.\n @param max The maximum allowed value." - }, - "errorSelector": "0871e13d", - "id": 1658, - "name": "ProvisionManagerInvalidValue", - "nameLocation": "2842:28:17", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1657, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1650, - "mutability": "mutable", - "name": "message", - "nameLocation": "2877:7:17", - "nodeType": "VariableDeclaration", - "scope": 1658, - "src": "2871:13:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1649, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2871:5:17", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1652, - "mutability": "mutable", - "name": "value", - "nameLocation": "2894:5:17", - "nodeType": "VariableDeclaration", - "scope": 1658, - "src": "2886:13:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1651, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2886:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1654, - "mutability": "mutable", - "name": "min", - "nameLocation": "2909:3:17", - "nodeType": "VariableDeclaration", - "scope": 1658, - "src": "2901:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1653, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2901:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1656, - "mutability": "mutable", - "name": "max", - "nameLocation": "2922:3:17", - "nodeType": "VariableDeclaration", - "scope": 1658, - "src": "2914:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1655, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2914:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2870:56:17" - }, - "src": "2836:91:17" - }, - { - "documentation": { - "id": 1659, - "nodeType": "StructuredDocumentation", - "src": "2933:169:17", - "text": " @notice Thrown when attempting to set a range where min is greater than max.\n @param min The minimum value.\n @param max The maximum value." - }, - "errorSelector": "ccccdafb", - "id": 1665, - "name": "ProvisionManagerInvalidRange", - "nameLocation": "3113:28:17", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1664, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1661, - "mutability": "mutable", - "name": "min", - "nameLocation": "3150:3:17", - "nodeType": "VariableDeclaration", - "scope": 1665, - "src": "3142:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1660, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3142:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1663, - "mutability": "mutable", - "name": "max", - "nameLocation": "3163:3:17", - "nodeType": "VariableDeclaration", - "scope": 1665, - "src": "3155:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1662, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3155:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3141:26:17" - }, - "src": "3107:61:17" - }, - { - "documentation": { - "id": 1666, - "nodeType": "StructuredDocumentation", - "src": "3174:228:17", - "text": " @notice Thrown when the caller is not authorized to manage the provision of a service provider.\n @param serviceProvider The address of the serviceProvider.\n @param caller The address of the caller." - }, - "errorSelector": "cc5d3c8b", - "id": 1672, - "name": "ProvisionManagerNotAuthorized", - "nameLocation": "3413:29:17", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1671, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1668, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3451:15:17", - "nodeType": "VariableDeclaration", - "scope": 1672, - "src": "3443:23:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1667, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3443:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1670, - "mutability": "mutable", - "name": "caller", - "nameLocation": "3476:6:17", - "nodeType": "VariableDeclaration", - "scope": 1672, - "src": "3468:14:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1669, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3468:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3442:41:17" - }, - "src": "3407:77:17" - }, - { - "documentation": { - "id": 1673, - "nodeType": "StructuredDocumentation", - "src": "3490:131:17", - "text": " @notice Thrown when a provision is not found.\n @param serviceProvider The address of the service provider." - }, - "errorSelector": "7b3c09bf", - "id": 1677, - "name": "ProvisionManagerProvisionNotFound", - "nameLocation": "3632:33:17", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1676, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1675, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3674:15:17", - "nodeType": "VariableDeclaration", - "scope": 1677, - "src": "3666:23:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1674, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3666:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3665:25:17" - }, - "src": "3626:65:17" - }, - { - "body": { - "id": 1702, - "nodeType": "Block", - "src": "3871:203:17", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1686, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1680, - "src": "3931:15:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 1689, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "3956:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ProvisionManager_$2128", - "typeString": "contract ProvisionManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ProvisionManager_$2128", - "typeString": "contract ProvisionManager" - } - ], - "id": 1688, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3948:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1687, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3948:7:17", - "typeDescriptions": {} - } - }, - "id": 1690, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3948:13:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 1691, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "3963:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3967:6:17", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3963:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1683, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "3902:13:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 1684, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3902:15:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 1685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3918:12:17", - "memberName": "isAuthorized", - "nodeType": "MemberAccess", - "referencedDeclaration": 3694, - "src": "3902:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address,address) view external returns (bool)" - } - }, - "id": 1693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3902:72:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 1695, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1680, - "src": "4018:15:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 1696, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "4035:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1697, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4039:6:17", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "4035:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1694, - "name": "ProvisionManagerNotAuthorized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1672, - "src": "3988:29:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", - "typeString": "function (address,address) pure returns (error)" - } - }, - "id": 1698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3988:58:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 1682, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3881:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 1699, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3881:175:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1700, - "nodeType": "ExpressionStatement", - "src": "3881:175:17" - }, - { - "id": 1701, - "nodeType": "PlaceholderStatement", - "src": "4066:1:17" - } - ] - }, - "documentation": { - "id": 1678, - "nodeType": "StructuredDocumentation", - "src": "3697:108:17", - "text": " @notice Checks if the caller is authorized to manage the provision of a service provider." - }, - "id": 1703, - "name": "onlyAuthorizedForProvision", - "nameLocation": "3819:26:17", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1681, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1680, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3854:15:17", - "nodeType": "VariableDeclaration", - "scope": 1703, - "src": "3846:23:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1679, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3846:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3845:25:17" - }, - "src": "3810:264:17", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1727, - "nodeType": "Block", - "src": "4279:198:17", - "statements": [ - { - "assignments": [ - 1712 - ], - "declarations": [ - { - "constant": false, - "id": 1712, - "mutability": "mutable", - "name": "provision", - "nameLocation": "4322:9:17", - "nodeType": "VariableDeclaration", - "scope": 1727, - "src": "4289:42:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 1711, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1710, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "4289:15:17", - "4305:9:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "4289:25:17" - }, - "referencedDeclaration": 3718, - "src": "4289:25:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "id": 1716, - "initialValue": { - "arguments": [ - { - "id": 1714, - "name": "serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1706, - "src": "4348:15:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1713, - "name": "_getProvision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "4334:13:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", - "typeString": "function (address) view returns (struct IHorizonStakingTypes.Provision memory)" - } - }, - "id": 1715, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4334:30:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4289:75:17" - }, - { - "expression": { - "arguments": [ - { - "id": 1718, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1712, - "src": "4396:9:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - ], - "id": 1717, - "name": "_checkProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1920, - 1936 - ], - "referencedDeclaration": 1936, - "src": "4374:21:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Provision_$3718_memory_ptr_$returns$__$", - "typeString": "function (struct IHorizonStakingTypes.Provision memory) view" - } - }, - "id": 1719, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4374:32:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1720, - "nodeType": "ExpressionStatement", - "src": "4374:32:17" - }, - { - "expression": { - "arguments": [ - { - "id": 1722, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1712, - "src": "4442:9:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - { - "hexValue": "66616c7365", - "id": 1723, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4453:5:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1721, - "name": "_checkProvisionParameters", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1959, - 2015 - ], - "referencedDeclaration": 2015, - "src": "4416:25:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Provision_$3718_memory_ptr_$_t_bool_$returns$__$", - "typeString": "function (struct IHorizonStakingTypes.Provision memory,bool) view" - } - }, - "id": 1724, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4416:43:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1725, - "nodeType": "ExpressionStatement", - "src": "4416:43:17" - }, - { - "id": 1726, - "nodeType": "PlaceholderStatement", - "src": "4469:1:17" - } - ] - }, - "documentation": { - "id": 1704, - "nodeType": "StructuredDocumentation", - "src": "4080:133:17", - "text": " @notice Checks if a provision of a service provider is valid according\n to the parameter ranges established." - }, - "id": 1728, - "name": "onlyValidProvision", - "nameLocation": "4227:18:17", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1707, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1706, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "4254:15:17", - "nodeType": "VariableDeclaration", - "scope": 1728, - "src": "4246:23:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1705, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4246:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4245:25:17" - }, - "src": "4218:259:17", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 1737, - "nodeType": "Block", - "src": "4679:52:17", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1734, - "name": "__ProvisionManager_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1760, - "src": "4689:33:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 1735, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4689:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1736, - "nodeType": "ExpressionStatement", - "src": "4689:35:17" - } - ] - }, - "documentation": { - "id": 1729, - "nodeType": "StructuredDocumentation", - "src": "4483:77:17", - "text": " @notice Initializes the contract and any parent contracts." - }, - "id": 1738, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1732, - "kind": "modifierInvocation", - "modifierName": { - "id": 1731, - "name": "onlyInitializing", - "nameLocations": [ - "4662:16:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "4662:16:17" - }, - "nodeType": "ModifierInvocation", - "src": "4662:16:17" - } - ], - "name": "__ProvisionManager_init", - "nameLocation": "4627:23:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1730, - "nodeType": "ParameterList", - "parameters": [], - "src": "4650:2:17" - }, - "returnParameters": { - "id": 1733, - "nodeType": "ParameterList", - "parameters": [], - "src": "4679:0:17" - }, - "scope": 2128, - "src": "4618:113:17", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1759, - "nodeType": "Block", - "src": "4981:271:17", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1745, - "name": "DEFAULT_MIN_PROVISION_TOKENS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1614, - "src": "5016:28:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 1746, - "name": "DEFAULT_MAX_PROVISION_TOKENS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1621, - "src": "5046:28:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1744, - "name": "_setProvisionTokensRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1825, - "src": "4991:24:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 1747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4991:84:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1748, - "nodeType": "ExpressionStatement", - "src": "4991:84:17" - }, - { - "expression": { - "arguments": [ - { - "id": 1750, - "name": "DEFAULT_MIN_VERIFIER_CUT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "5106:24:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 1751, - "name": "DEFAULT_MAX_VERIFIER_CUT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1593, - "src": "5132:24:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 1749, - "name": "_setVerifierCutRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1868, - "src": "5085:20:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_uint32_$returns$__$", - "typeString": "function (uint32,uint32)" - } - }, - "id": 1752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5085:72:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1753, - "nodeType": "ExpressionStatement", - "src": "5085:72:17" - }, - { - "expression": { - "arguments": [ - { - "id": 1755, - "name": "DEFAULT_MIN_THAWING_PERIOD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1600, - "src": "5190:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 1756, - "name": "DEFAULT_MAX_THAWING_PERIOD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1607, - "src": "5218:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 1754, - "name": "_setThawingPeriodRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1900, - "src": "5167:22:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$_t_uint64_$returns$__$", - "typeString": "function (uint64,uint64)" - } - }, - "id": 1757, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5167:78:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1758, - "nodeType": "ExpressionStatement", - "src": "5167:78:17" - } - ] - }, - "documentation": { - "id": 1739, - "nodeType": "StructuredDocumentation", - "src": "4737:115:17", - "text": " @notice Initializes the contract.\n @dev All parameters set to their entire range as valid." - }, - "id": 1760, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1742, - "kind": "modifierInvocation", - "modifierName": { - "id": 1741, - "name": "onlyInitializing", - "nameLocations": [ - "4964:16:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "4964:16:17" - }, - "nodeType": "ModifierInvocation", - "src": "4964:16:17" - } - ], - "name": "__ProvisionManager_init_unchained", - "nameLocation": "4919:33:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1740, - "nodeType": "ParameterList", - "parameters": [], - "src": "4952:2:17" - }, - "returnParameters": { - "id": 1743, - "nodeType": "ParameterList", - "parameters": [], - "src": "4981:0:17" - }, - "scope": 2128, - "src": "4910:342:17", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1777, - "nodeType": "Block", - "src": "5685:135:17", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1767, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1763, - "src": "5721:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "74727565", - "id": 1768, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5739:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1766, - "name": "_checkProvisionParameters", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1959, - 2015 - ], - "referencedDeclaration": 1959, - "src": "5695:25:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$returns$__$", - "typeString": "function (address,bool) view" - } - }, - "id": 1769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5695:49:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1770, - "nodeType": "ExpressionStatement", - "src": "5695:49:17" - }, - { - "expression": { - "arguments": [ - { - "id": 1774, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1763, - "src": "5796:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1771, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "5754:13:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 1772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5754:15:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 1773, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5770:25:17", - "memberName": "acceptProvisionParameters", - "nodeType": "MemberAccess", - "referencedDeclaration": 3503, - "src": "5754:41:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1775, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5754:59:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1776, - "nodeType": "ExpressionStatement", - "src": "5754:59:17" - } - ] - }, - "documentation": { - "id": 1761, - "nodeType": "StructuredDocumentation", - "src": "5258:351:17", - "text": " @notice Verifies and accepts the provision parameters of a service provider in\n the {HorizonStaking} contract.\n @dev Checks the pending provision parameters, not the current ones.\n Emits a {ProvisionPendingParametersAccepted} event.\n @param _serviceProvider The address of the service provider." - }, - "id": 1778, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_acceptProvisionParameters", - "nameLocation": "5623:26:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1764, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1763, - "mutability": "mutable", - "name": "_serviceProvider", - "nameLocation": "5658:16:17", - "nodeType": "VariableDeclaration", - "scope": 1778, - "src": "5650:24:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1762, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5650:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5649:26:17" - }, - "returnParameters": { - "id": 1765, - "nodeType": "ParameterList", - "parameters": [], - "src": "5685:0:17" - }, - "scope": 2128, - "src": "5614:206:17", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1792, - "nodeType": "Block", - "src": "6010:82:17", - "statements": [ - { - "expression": { - "id": 1786, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1784, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "6020:15:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 1785, - "name": "_ratio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1781, - "src": "6038:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "6020:24:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 1787, - "nodeType": "ExpressionStatement", - "src": "6020:24:17" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1789, - "name": "_ratio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1781, - "src": "6078:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 1788, - "name": "DelegationRatioSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1633, - "src": "6059:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32)" - } - }, - "id": 1790, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6059:26:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1791, - "nodeType": "EmitStatement", - "src": "6054:31:17" - } - ] - }, - "documentation": { - "id": 1779, - "nodeType": "StructuredDocumentation", - "src": "5847:105:17", - "text": " @notice Sets the delegation ratio.\n @param _ratio The delegation ratio to be set" - }, - "id": 1793, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setDelegationRatio", - "nameLocation": "5966:19:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1782, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1781, - "mutability": "mutable", - "name": "_ratio", - "nameLocation": "5993:6:17", - "nodeType": "VariableDeclaration", - "scope": 1793, - "src": "5986:13:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1780, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "5986:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "5985:15:17" - }, - "returnParameters": { - "id": 1783, - "nodeType": "ParameterList", - "parameters": [], - "src": "6010:0:17" - }, - "scope": 2128, - "src": "5957:135:17", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1824, - "nodeType": "Block", - "src": "6383:208:17", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1802, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1796, - "src": "6401:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 1803, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1798, - "src": "6409:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6401:12:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 1806, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1796, - "src": "6444:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 1807, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1798, - "src": "6450:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1805, - "name": "ProvisionManagerInvalidRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1665, - "src": "6415:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 1808, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6415:40:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 1801, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "6393:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 1809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6393:63:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1810, - "nodeType": "ExpressionStatement", - "src": "6393:63:17" - }, - { - "expression": { - "id": 1813, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1811, - "name": "minimumProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2134, - "src": "6466:22:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 1812, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1796, - "src": "6491:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6466:29:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1814, - "nodeType": "ExpressionStatement", - "src": "6466:29:17" - }, - { - "expression": { - "id": 1817, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1815, - "name": "maximumProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2137, - "src": "6505:22:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 1816, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1798, - "src": "6530:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6505:29:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1818, - "nodeType": "ExpressionStatement", - "src": "6505:29:17" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1820, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1796, - "src": "6573:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 1821, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1798, - "src": "6579:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1819, - "name": "ProvisionTokensRangeSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "6549:23:17", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 1822, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6549:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1823, - "nodeType": "EmitStatement", - "src": "6544:40:17" - } - ] - }, - "documentation": { - "id": 1794, - "nodeType": "StructuredDocumentation", - "src": "6098:209:17", - "text": " @notice Sets the range for the provision tokens.\n @param _min The minimum allowed value for the provision tokens.\n @param _max The maximum allowed value for the provision tokens." - }, - "id": 1825, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setProvisionTokensRange", - "nameLocation": "6321:24:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1799, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1796, - "mutability": "mutable", - "name": "_min", - "nameLocation": "6354:4:17", - "nodeType": "VariableDeclaration", - "scope": 1825, - "src": "6346:12:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1795, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6346:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1798, - "mutability": "mutable", - "name": "_max", - "nameLocation": "6368:4:17", - "nodeType": "VariableDeclaration", - "scope": 1825, - "src": "6360:12:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1797, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6360:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6345:28:17" - }, - "returnParameters": { - "id": 1800, - "nodeType": "ParameterList", - "parameters": [], - "src": "6383:0:17" - }, - "scope": 2128, - "src": "6312:279:17", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1867, - "nodeType": "Block", - "src": "6872:281:17", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 1836, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1834, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "6890:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 1835, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "6898:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "6890:12:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 1838, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "6933:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 1839, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "6939:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 1837, - "name": "ProvisionManagerInvalidRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1665, - "src": "6904:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 1840, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6904:40:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 1833, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "6882:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 1841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6882:63:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1842, - "nodeType": "ExpressionStatement", - "src": "6882:63:17" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1846, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "6982:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "id": 1844, - "name": "PPMMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4262, - "src": "6963:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_PPMMath_$4262_$", - "typeString": "type(library PPMMath)" - } - }, - "id": 1845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6971:10:17", - "memberName": "isValidPPM", - "nodeType": "MemberAccess", - "referencedDeclaration": 4261, - "src": "6963:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) pure returns (bool)" - } - }, - "id": 1847, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6963:24:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 1849, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "7018:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 1850, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "7024:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 1848, - "name": "ProvisionManagerInvalidRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1665, - "src": "6989:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 1851, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6989:40:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 1843, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "6955:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 1852, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6955:75:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1853, - "nodeType": "ExpressionStatement", - "src": "6955:75:17" - }, - { - "expression": { - "id": 1856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1854, - "name": "minimumVerifierCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2146, - "src": "7040:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 1855, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "7061:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "7040:25:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 1857, - "nodeType": "ExpressionStatement", - "src": "7040:25:17" - }, - { - "expression": { - "id": 1860, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1858, - "name": "maximumVerifierCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2149, - "src": "7075:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 1859, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "7096:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "7075:25:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 1861, - "nodeType": "ExpressionStatement", - "src": "7075:25:17" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1863, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "7135:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 1864, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "7141:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 1862, - "name": "VerifierCutRangeSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1640, - "src": "7115:19:17", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$", - "typeString": "function (uint32,uint32)" - } - }, - "id": 1865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7115:31:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1866, - "nodeType": "EmitStatement", - "src": "7110:36:17" - } - ] - }, - "documentation": { - "id": 1826, - "nodeType": "StructuredDocumentation", - "src": "6597:205:17", - "text": " @notice Sets the range for the verifier cut.\n @param _min The minimum allowed value for the max verifier cut.\n @param _max The maximum allowed value for the max verifier cut." - }, - "id": 1868, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setVerifierCutRange", - "nameLocation": "6816:20:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1831, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1828, - "mutability": "mutable", - "name": "_min", - "nameLocation": "6844:4:17", - "nodeType": "VariableDeclaration", - "scope": 1868, - "src": "6837:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1827, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "6837:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1830, - "mutability": "mutable", - "name": "_max", - "nameLocation": "6857:4:17", - "nodeType": "VariableDeclaration", - "scope": 1868, - "src": "6850:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1829, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "6850:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "6836:26:17" - }, - "returnParameters": { - "id": 1832, - "nodeType": "ParameterList", - "parameters": [], - "src": "6872:0:17" - }, - "scope": 2128, - "src": "6807:346:17", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1899, - "nodeType": "Block", - "src": "7434:202:17", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 1879, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1877, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1871, - "src": "7452:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 1878, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1873, - "src": "7460:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "7452:12:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 1881, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1871, - "src": "7495:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 1882, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1873, - "src": "7501:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 1880, - "name": "ProvisionManagerInvalidRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1665, - "src": "7466:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 1883, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7466:40:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 1876, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "7444:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 1884, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7444:63:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1885, - "nodeType": "ExpressionStatement", - "src": "7444:63:17" - }, - { - "expression": { - "id": 1888, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1886, - "name": "minimumThawingPeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2140, - "src": "7517:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 1887, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1871, - "src": "7540:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "7517:27:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "id": 1889, - "nodeType": "ExpressionStatement", - "src": "7517:27:17" - }, - { - "expression": { - "id": 1892, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1890, - "name": "maximumThawingPeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2143, - "src": "7554:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 1891, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1873, - "src": "7577:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "7554:27:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "id": 1893, - "nodeType": "ExpressionStatement", - "src": "7554:27:17" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1895, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1871, - "src": "7618:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 1896, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1873, - "src": "7624:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 1894, - "name": "ThawingPeriodRangeSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1647, - "src": "7596:21:17", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$_t_uint64_$returns$__$", - "typeString": "function (uint64,uint64)" - } - }, - "id": 1897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7596:33:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1898, - "nodeType": "EmitStatement", - "src": "7591:38:17" - } - ] - }, - "documentation": { - "id": 1869, - "nodeType": "StructuredDocumentation", - "src": "7159:203:17", - "text": " @notice Sets the range for the thawing period.\n @param _min The minimum allowed value for the thawing period.\n @param _max The maximum allowed value for the thawing period." - }, - "id": 1900, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setThawingPeriodRange", - "nameLocation": "7376:22:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1874, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1871, - "mutability": "mutable", - "name": "_min", - "nameLocation": "7406:4:17", - "nodeType": "VariableDeclaration", - "scope": 1900, - "src": "7399:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1870, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "7399:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1873, - "mutability": "mutable", - "name": "_max", - "nameLocation": "7419:4:17", - "nodeType": "VariableDeclaration", - "scope": 1900, - "src": "7412:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1872, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "7412:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "7398:26:17" - }, - "returnParameters": { - "id": 1875, - "nodeType": "ParameterList", - "parameters": [], - "src": "7434:0:17" - }, - "scope": 2128, - "src": "7367:269:17", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1919, - "nodeType": "Block", - "src": "7922:135:17", - "statements": [ - { - "assignments": [ - 1910 - ], - "declarations": [ - { - "constant": false, - "id": 1910, - "mutability": "mutable", - "name": "provision", - "nameLocation": "7965:9:17", - "nodeType": "VariableDeclaration", - "scope": 1919, - "src": "7932:42:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 1909, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1908, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "7932:15:17", - "7948:9:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "7932:25:17" - }, - "referencedDeclaration": 3718, - "src": "7932:25:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "id": 1914, - "initialValue": { - "arguments": [ - { - "id": 1912, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1903, - "src": "7991:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1911, - "name": "_getProvision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "7977:13:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", - "typeString": "function (address) view returns (struct IHorizonStakingTypes.Provision memory)" - } - }, - "id": 1913, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7977:31:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7932:76:17" - }, - { - "expression": { - "arguments": [ - { - "id": 1916, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1910, - "src": "8040:9:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - ], - "id": 1915, - "name": "_checkProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1920, - 1936 - ], - "referencedDeclaration": 1936, - "src": "8018:21:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Provision_$3718_memory_ptr_$returns$__$", - "typeString": "function (struct IHorizonStakingTypes.Provision memory) view" - } - }, - "id": 1917, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8018:32:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1918, - "nodeType": "ExpressionStatement", - "src": "8018:32:17" - } - ] - }, - "documentation": { - "id": 1901, - "nodeType": "StructuredDocumentation", - "src": "7663:175:17", - "text": " @notice Checks if the provision tokens of a service provider are within the valid range.\n @param _serviceProvider The address of the service provider." - }, - "id": 1920, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkProvisionTokens", - "nameLocation": "7852:21:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1904, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1903, - "mutability": "mutable", - "name": "_serviceProvider", - "nameLocation": "7882:16:17", - "nodeType": "VariableDeclaration", - "scope": 1920, - "src": "7874:24:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1902, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7874:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7873:26:17" - }, - "returnParameters": { - "id": 1905, - "nodeType": "ParameterList", - "parameters": [], - "src": "7922:0:17" - }, - "scope": 2128, - "src": "7843:214:17", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 1935, - "nodeType": "Block", - "src": "8322:112:17", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1928, - "name": "_provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1924, - "src": "8351:10:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 1929, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8362:6:17", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 3701, - "src": "8351:17:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 1930, - "name": "minimumProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2134, - "src": "8370:22:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 1931, - "name": "maximumProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2137, - "src": "8394:22:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "746f6b656e73", - "id": 1932, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8418:8:17", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_680989b8ba4329dbb34fe099c4644fce6e521152facc82d70e978bdc51facd5c", - "typeString": "literal_string \"tokens\"" - }, - "value": "tokens" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_stringliteral_680989b8ba4329dbb34fe099c4644fce6e521152facc82d70e978bdc51facd5c", - "typeString": "literal_string \"tokens\"" - } - ], - "id": 1927, - "name": "_checkValueInRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2127, - "src": "8332:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (uint256,uint256,uint256,bytes memory) pure" - } - }, - "id": 1933, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8332:95:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1934, - "nodeType": "ExpressionStatement", - "src": "8332:95:17" - } - ] - }, - "documentation": { - "id": 1921, - "nodeType": "StructuredDocumentation", - "src": "8063:156:17", - "text": " @notice Checks if the provision tokens of a service provider are within the valid range.\n @param _provision The provision to check." - }, - "id": 1936, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkProvisionTokens", - "nameLocation": "8233:21:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1925, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1924, - "mutability": "mutable", - "name": "_provision", - "nameLocation": "8288:10:17", - "nodeType": "VariableDeclaration", - "scope": 1936, - "src": "8255:43:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 1923, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1922, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "8255:15:17", - "8271:9:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "8255:25:17" - }, - "referencedDeclaration": 3718, - "src": "8255:25:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "src": "8254:45:17" - }, - "returnParameters": { - "id": 1926, - "nodeType": "ParameterList", - "parameters": [], - "src": "8322:0:17" - }, - "scope": 2128, - "src": "8224:210:17", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 1958, - "nodeType": "Block", - "src": "8805:154:17", - "statements": [ - { - "assignments": [ - 1948 - ], - "declarations": [ - { - "constant": false, - "id": 1948, - "mutability": "mutable", - "name": "provision", - "nameLocation": "8848:9:17", - "nodeType": "VariableDeclaration", - "scope": 1958, - "src": "8815:42:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 1947, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1946, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "8815:15:17", - "8831:9:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "8815:25:17" - }, - "referencedDeclaration": 3718, - "src": "8815:25:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "id": 1952, - "initialValue": { - "arguments": [ - { - "id": 1950, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1939, - "src": "8874:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1949, - "name": "_getProvision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "8860:13:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", - "typeString": "function (address) view returns (struct IHorizonStakingTypes.Provision memory)" - } - }, - "id": 1951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8860:31:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8815:76:17" - }, - { - "expression": { - "arguments": [ - { - "id": 1954, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1948, - "src": "8927:9:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - { - "id": 1955, - "name": "_checkPending", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1941, - "src": "8938:13:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1953, - "name": "_checkProvisionParameters", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1959, - 2015 - ], - "referencedDeclaration": 2015, - "src": "8901:25:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Provision_$3718_memory_ptr_$_t_bool_$returns$__$", - "typeString": "function (struct IHorizonStakingTypes.Provision memory,bool) view" - } - }, - "id": 1956, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8901:51:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1957, - "nodeType": "ExpressionStatement", - "src": "8901:51:17" - } - ] - }, - "documentation": { - "id": 1937, - "nodeType": "StructuredDocumentation", - "src": "8440:257:17", - "text": " @notice Checks if the provision parameters of a service provider are within the valid range.\n @param _serviceProvider The address of the service provider.\n @param _checkPending If true, checks the pending provision parameters." - }, - "id": 1959, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkProvisionParameters", - "nameLocation": "8711:25:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1942, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1939, - "mutability": "mutable", - "name": "_serviceProvider", - "nameLocation": "8745:16:17", - "nodeType": "VariableDeclaration", - "scope": 1959, - "src": "8737:24:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1938, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8737:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1941, - "mutability": "mutable", - "name": "_checkPending", - "nameLocation": "8768:13:17", - "nodeType": "VariableDeclaration", - "scope": 1959, - "src": "8763:18:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1940, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8763:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "8736:46:17" - }, - "returnParameters": { - "id": 1943, - "nodeType": "ParameterList", - "parameters": [], - "src": "8805:0:17" - }, - "scope": 2128, - "src": "8702:257:17", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 2014, - "nodeType": "Block", - "src": "9380:611:17", - "statements": [ - { - "assignments": [ - 1969, - 1971 - ], - "declarations": [ - { - "constant": false, - "id": 1969, - "mutability": "mutable", - "name": "thawingPeriodMin", - "nameLocation": "9398:16:17", - "nodeType": "VariableDeclaration", - "scope": 2014, - "src": "9391:23:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1968, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "9391:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1971, - "mutability": "mutable", - "name": "thawingPeriodMax", - "nameLocation": "9423:16:17", - "nodeType": "VariableDeclaration", - "scope": 2014, - "src": "9416:23:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1970, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "9416:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "id": 1974, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1972, - "name": "_getThawingPeriodRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2050, - "src": "9443:22:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$_t_uint64_$", - "typeString": "function () view returns (uint64,uint64)" - } - }, - "id": 1973, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9443:24:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint64_$_t_uint64_$", - "typeString": "tuple(uint64,uint64)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9390:77:17" - }, - { - "assignments": [ - 1976 - ], - "declarations": [ - { - "constant": false, - "id": 1976, - "mutability": "mutable", - "name": "thawingPeriodToCheck", - "nameLocation": "9484:20:17", - "nodeType": "VariableDeclaration", - "scope": 2014, - "src": "9477:27:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1975, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "9477:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "id": 1983, - "initialValue": { - "condition": { - "id": 1977, - "name": "_checkPending", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1965, - "src": "9507:13:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "expression": { - "id": 1980, - "name": "_provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1963, - "src": "9557:10:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 1981, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9568:13:17", - "memberName": "thawingPeriod", - "nodeType": "MemberAccess", - "referencedDeclaration": 3709, - "src": "9557:24:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "id": 1982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "9507:74:17", - "trueExpression": { - "expression": { - "id": 1978, - "name": "_provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1963, - "src": "9523:10:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 1979, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9534:20:17", - "memberName": "thawingPeriodPending", - "nodeType": "MemberAccess", - "referencedDeclaration": 3715, - "src": "9523:31:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9477:104:17" - }, - { - "expression": { - "arguments": [ - { - "id": 1985, - "name": "thawingPeriodToCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1976, - "src": "9610:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 1986, - "name": "thawingPeriodMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1969, - "src": "9632:16:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 1987, - "name": "thawingPeriodMax", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1971, - "src": "9650:16:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "hexValue": "74686177696e67506572696f64", - "id": 1988, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9668:15:17", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_305ab1a02b7b2a803db444b8e35c7e19e6475b5dd6b215ff165ee071bbd360ee", - "typeString": "literal_string \"thawingPeriod\"" - }, - "value": "thawingPeriod" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_stringliteral_305ab1a02b7b2a803db444b8e35c7e19e6475b5dd6b215ff165ee071bbd360ee", - "typeString": "literal_string \"thawingPeriod\"" - } - ], - "id": 1984, - "name": "_checkValueInRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2127, - "src": "9591:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (uint256,uint256,uint256,bytes memory) pure" - } - }, - "id": 1989, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9591:93:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1990, - "nodeType": "ExpressionStatement", - "src": "9591:93:17" - }, - { - "assignments": [ - 1992, - 1994 - ], - "declarations": [ - { - "constant": false, - "id": 1992, - "mutability": "mutable", - "name": "verifierCutMin", - "nameLocation": "9703:14:17", - "nodeType": "VariableDeclaration", - "scope": 2014, - "src": "9696:21:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1991, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "9696:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1994, - "mutability": "mutable", - "name": "verifierCutMax", - "nameLocation": "9726:14:17", - "nodeType": "VariableDeclaration", - "scope": 2014, - "src": "9719:21:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1993, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "9719:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 1997, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1995, - "name": "_getVerifierCutRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2063, - "src": "9744:20:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$_t_uint32_$", - "typeString": "function () view returns (uint32,uint32)" - } - }, - "id": 1996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9744:22:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$", - "typeString": "tuple(uint32,uint32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9695:71:17" - }, - { - "assignments": [ - 1999 - ], - "declarations": [ - { - "constant": false, - "id": 1999, - "mutability": "mutable", - "name": "maxVerifierCutToCheck", - "nameLocation": "9783:21:17", - "nodeType": "VariableDeclaration", - "scope": 2014, - "src": "9776:28:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1998, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "9776:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 2006, - "initialValue": { - "condition": { - "id": 2000, - "name": "_checkPending", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1965, - "src": "9807:13:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "expression": { - "id": 2003, - "name": "_provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1963, - "src": "9858:10:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 2004, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9869:14:17", - "memberName": "maxVerifierCut", - "nodeType": "MemberAccess", - "referencedDeclaration": 3707, - "src": "9858:25:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 2005, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "9807:76:17", - "trueExpression": { - "expression": { - "id": 2001, - "name": "_provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1963, - "src": "9823:10:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 2002, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9834:21:17", - "memberName": "maxVerifierCutPending", - "nodeType": "MemberAccess", - "referencedDeclaration": 3713, - "src": "9823:32:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9776:107:17" - }, - { - "expression": { - "arguments": [ - { - "id": 2008, - "name": "maxVerifierCutToCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1999, - "src": "9912:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 2009, - "name": "verifierCutMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1992, - "src": "9935:14:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 2010, - "name": "verifierCutMax", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1994, - "src": "9951:14:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "hexValue": "6d61785665726966696572437574", - "id": 2011, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9967:16:17", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_68fc3345e83d56ef118660e3367c327aecf533ff1f8bdee8e3dd2ce1b31b5e0c", - "typeString": "literal_string \"maxVerifierCut\"" - }, - "value": "maxVerifierCut" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_stringliteral_68fc3345e83d56ef118660e3367c327aecf533ff1f8bdee8e3dd2ce1b31b5e0c", - "typeString": "literal_string \"maxVerifierCut\"" - } - ], - "id": 2007, - "name": "_checkValueInRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2127, - "src": "9893:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (uint256,uint256,uint256,bytes memory) pure" - } - }, - "id": 2012, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9893:91:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2013, - "nodeType": "ExpressionStatement", - "src": "9893:91:17" - } - ] - }, - "documentation": { - "id": 1960, - "nodeType": "StructuredDocumentation", - "src": "8965:266:17", - "text": " @notice Checks if the provision parameters of a service provider are within the valid range.\n @param _provision The provision to check.\n @param _checkPending If true, checks the pending provision parameters instead of the current ones." - }, - "id": 2015, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkProvisionParameters", - "nameLocation": "9245:25:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1966, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1963, - "mutability": "mutable", - "name": "_provision", - "nameLocation": "9313:10:17", - "nodeType": "VariableDeclaration", - "scope": 2015, - "src": "9280:43:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 1962, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1961, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "9280:15:17", - "9296:9:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "9280:25:17" - }, - "referencedDeclaration": 3718, - "src": "9280:25:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1965, - "mutability": "mutable", - "name": "_checkPending", - "nameLocation": "9338:13:17", - "nodeType": "VariableDeclaration", - "scope": 2015, - "src": "9333:18:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1964, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "9333:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "9270:87:17" - }, - "returnParameters": { - "id": 1967, - "nodeType": "ParameterList", - "parameters": [], - "src": "9380:0:17" - }, - "scope": 2128, - "src": "9236:755:17", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 2023, - "nodeType": "Block", - "src": "10175:39:17", - "statements": [ - { - "expression": { - "id": 2021, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "10192:15:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "functionReturnParameters": 2020, - "id": 2022, - "nodeType": "Return", - "src": "10185:22:17" - } - ] - }, - "documentation": { - "id": 2016, - "nodeType": "StructuredDocumentation", - "src": "10019:89:17", - "text": " @notice Gets the delegation ratio.\n @return The delegation ratio" - }, - "id": 2024, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getDelegationRatio", - "nameLocation": "10122:19:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2017, - "nodeType": "ParameterList", - "parameters": [], - "src": "10141:2:17" - }, - "returnParameters": { - "id": 2020, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2019, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2024, - "src": "10167:6:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2018, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "10167:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "10166:8:17" - }, - "scope": 2128, - "src": "10113:101:17", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2036, - "nodeType": "Block", - "src": "10527:72:17", - "statements": [ - { - "expression": { - "components": [ - { - "id": 2032, - "name": "minimumProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2134, - "src": "10545:22:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2033, - "name": "maximumProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2137, - "src": "10569:22:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 2034, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10544:48:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "functionReturnParameters": 2031, - "id": 2035, - "nodeType": "Return", - "src": "10537:55:17" - } - ] - }, - "documentation": { - "id": 2025, - "nodeType": "StructuredDocumentation", - "src": "10220:209:17", - "text": " @notice Gets the range for the provision tokens.\n @return min The minimum allowed value for the provision tokens.\n @return max The maximum allowed value for the provision tokens." - }, - "id": 2037, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getProvisionTokensRange", - "nameLocation": "10443:24:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2026, - "nodeType": "ParameterList", - "parameters": [], - "src": "10467:2:17" - }, - "returnParameters": { - "id": 2031, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2028, - "mutability": "mutable", - "name": "min", - "nameLocation": "10509:3:17", - "nodeType": "VariableDeclaration", - "scope": 2037, - "src": "10501:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2027, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10501:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2030, - "mutability": "mutable", - "name": "max", - "nameLocation": "10522:3:17", - "nodeType": "VariableDeclaration", - "scope": 2037, - "src": "10514:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2029, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10514:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10500:26:17" - }, - "scope": 2128, - "src": "10434:165:17", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 2049, - "nodeType": "Block", - "src": "10903:68:17", - "statements": [ - { - "expression": { - "components": [ - { - "id": 2045, - "name": "minimumThawingPeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2140, - "src": "10921:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 2046, - "name": "maximumThawingPeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2143, - "src": "10943:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "id": 2047, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10920:44:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint64_$_t_uint64_$", - "typeString": "tuple(uint64,uint64)" - } - }, - "functionReturnParameters": 2044, - "id": 2048, - "nodeType": "Return", - "src": "10913:51:17" - } - ] - }, - "documentation": { - "id": 2038, - "nodeType": "StructuredDocumentation", - "src": "10605:204:17", - "text": " @notice Gets the range for the thawing period.\n @return min The minimum allowed value for the thawing period.\n @return max The maximum allowed value for the thawing period." - }, - "id": 2050, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getThawingPeriodRange", - "nameLocation": "10823:22:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2039, - "nodeType": "ParameterList", - "parameters": [], - "src": "10845:2:17" - }, - "returnParameters": { - "id": 2044, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2041, - "mutability": "mutable", - "name": "min", - "nameLocation": "10886:3:17", - "nodeType": "VariableDeclaration", - "scope": 2050, - "src": "10879:10:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 2040, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "10879:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2043, - "mutability": "mutable", - "name": "max", - "nameLocation": "10898:3:17", - "nodeType": "VariableDeclaration", - "scope": 2050, - "src": "10891:10:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 2042, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "10891:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "10878:24:17" - }, - "scope": 2128, - "src": "10814:157:17", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 2062, - "nodeType": "Block", - "src": "11274:64:17", - "statements": [ - { - "expression": { - "components": [ - { - "id": 2058, - "name": "minimumVerifierCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2146, - "src": "11292:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 2059, - "name": "maximumVerifierCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2149, - "src": "11312:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "id": 2060, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "11291:40:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$", - "typeString": "tuple(uint32,uint32)" - } - }, - "functionReturnParameters": 2057, - "id": 2061, - "nodeType": "Return", - "src": "11284:47:17" - } - ] - }, - "documentation": { - "id": 2051, - "nodeType": "StructuredDocumentation", - "src": "10977:205:17", - "text": " @notice Gets the range for the verifier cut.\n @return min The minimum allowed value for the max verifier cut.\n @return max The maximum allowed value for the max verifier cut." - }, - "id": 2063, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getVerifierCutRange", - "nameLocation": "11196:20:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2052, - "nodeType": "ParameterList", - "parameters": [], - "src": "11216:2:17" - }, - "returnParameters": { - "id": 2057, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2054, - "mutability": "mutable", - "name": "min", - "nameLocation": "11257:3:17", - "nodeType": "VariableDeclaration", - "scope": 2063, - "src": "11250:10:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2053, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "11250:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2056, - "mutability": "mutable", - "name": "max", - "nameLocation": "11269:3:17", - "nodeType": "VariableDeclaration", - "scope": 2063, - "src": "11262:10:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2055, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "11262:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "11249:24:17" - }, - "scope": 2128, - "src": "11187:151:17", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 2099, - "nodeType": "Block", - "src": "11663:245:17", - "statements": [ - { - "assignments": [ - 2076 - ], - "declarations": [ - { - "constant": false, - "id": 2076, - "mutability": "mutable", - "name": "provision", - "nameLocation": "11706:9:17", - "nodeType": "VariableDeclaration", - "scope": 2099, - "src": "11673:42:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 2075, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2074, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "11673:15:17", - "11689:9:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "11673:25:17" - }, - "referencedDeclaration": 3718, - "src": "11673:25:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "id": 2086, - "initialValue": { - "arguments": [ - { - "id": 2080, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2066, - "src": "11747:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 2083, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "11773:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ProvisionManager_$2128", - "typeString": "contract ProvisionManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ProvisionManager_$2128", - "typeString": "contract ProvisionManager" - } - ], - "id": 2082, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11765:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2081, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11765:7:17", - "typeDescriptions": {} - } - }, - "id": 2084, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11765:13:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2077, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "11718:13:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 2078, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11718:15:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 2079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11734:12:17", - "memberName": "getProvision", - "nodeType": "MemberAccess", - "referencedDeclaration": 2784, - "src": "11718:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", - "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" - } - }, - "id": 2085, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11718:61:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11673:106:17" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 2091, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 2088, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2076, - "src": "11797:9:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 2089, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11807:9:17", - "memberName": "createdAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 3711, - "src": "11797:19:17", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 2090, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11820:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11797:24:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 2093, - "name": "_serviceProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2066, - "src": "11857:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2092, - "name": "ProvisionManagerProvisionNotFound", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1677, - "src": "11823:33:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 2094, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11823:51:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 2087, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "11789:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 2095, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11789:86:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2096, - "nodeType": "ExpressionStatement", - "src": "11789:86:17" - }, - { - "expression": { - "id": 2097, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2076, - "src": "11892:9:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "functionReturnParameters": 2071, - "id": 2098, - "nodeType": "Return", - "src": "11885:16:17" - } - ] - }, - "documentation": { - "id": 2064, - "nodeType": "StructuredDocumentation", - "src": "11344:208:17", - "text": " @notice Gets a provision from the {HorizonStaking} contract.\n @dev Requirements:\n - The provision must exist.\n @param _serviceProvider The address of the service provider." - }, - "id": 2100, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getProvision", - "nameLocation": "11566:13:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2067, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2066, - "mutability": "mutable", - "name": "_serviceProvider", - "nameLocation": "11588:16:17", - "nodeType": "VariableDeclaration", - "scope": 2100, - "src": "11580:24:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2065, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11580:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "11579:26:17" - }, - "returnParameters": { - "id": 2071, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2070, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2100, - "src": "11629:32:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 2069, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2068, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "11629:15:17", - "11645:9:17" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "11629:25:17" - }, - "referencedDeclaration": 3718, - "src": "11629:25:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "src": "11628:34:17" - }, - "scope": 2128, - "src": "11557:351:17", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2126, - "nodeType": "Block", - "src": "12324:120:17", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 2115, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2105, - "src": "12359:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2116, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2107, - "src": "12365:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 2113, - "name": "_value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2103, - "src": "12342:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2114, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12349:9:17", - "memberName": "isInRange", - "nodeType": "MemberAccess", - "referencedDeclaration": 4289, - "src": "12342:16:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$attached_to$_t_uint256_$", - "typeString": "function (uint256,uint256,uint256) pure returns (bool)" - } - }, - "id": 2117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12342:28:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 2119, - "name": "_revertMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2109, - "src": "12401:14:17", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 2120, - "name": "_value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2103, - "src": "12417:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2121, - "name": "_min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2105, - "src": "12425:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2122, - "name": "_max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2107, - "src": "12431:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2118, - "name": "ProvisionManagerInvalidValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1658, - "src": "12372:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (bytes memory,uint256,uint256,uint256) pure returns (error)" - } - }, - "id": 2123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12372:64:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 2112, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "12334:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 2124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12334:103:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2125, - "nodeType": "ExpressionStatement", - "src": "12334:103:17" - } - ] - }, - "documentation": { - "id": 2101, - "nodeType": "StructuredDocumentation", - "src": "11914:291:17", - "text": " @notice Checks if a value is within a valid range.\n @param _value The value to check.\n @param _min The minimum allowed value.\n @param _max The maximum allowed value.\n @param _revertMessage The revert message to display if the value is out of range." - }, - "id": 2127, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkValueInRange", - "nameLocation": "12219:18:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2110, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2103, - "mutability": "mutable", - "name": "_value", - "nameLocation": "12246:6:17", - "nodeType": "VariableDeclaration", - "scope": 2127, - "src": "12238:14:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2102, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12238:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2105, - "mutability": "mutable", - "name": "_min", - "nameLocation": "12262:4:17", - "nodeType": "VariableDeclaration", - "scope": 2127, - "src": "12254:12:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2104, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12254:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2107, - "mutability": "mutable", - "name": "_max", - "nameLocation": "12276:4:17", - "nodeType": "VariableDeclaration", - "scope": 2127, - "src": "12268:12:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2106, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12268:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2109, - "mutability": "mutable", - "name": "_revertMessage", - "nameLocation": "12295:14:17", - "nodeType": "VariableDeclaration", - "scope": 2127, - "src": "12282:27:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2108, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "12282:5:17", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "12237:73:17" - }, - "returnParameters": { - "id": 2111, - "nodeType": "ParameterList", - "parameters": [], - "src": "12324:0:17" - }, - "scope": 2128, - "src": "12210:234:17", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - } - ], - "scope": 2129, - "src": "969:11477:17", - "usedErrors": [ - 1658, - 1665, - 1672, - 1677, - 4380, - 4865, - 4868 - ], - "usedEvents": [ - 1628, - 1633, - 1640, - 1647, - 4375, - 4873 - ] - } - ], - "src": "45:12402:17" - }, - "id": 17 - }, - "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol", - "exportedSymbols": { - "ProvisionManagerV1Storage": [ - 2158 - ] - }, - "id": 2159, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2130, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:18" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "ProvisionManagerV1Storage", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 2131, - "nodeType": "StructuredDocumentation", - "src": "70:76:18", - "text": " @title Storage layout for the {ProvisionManager} helper contract." - }, - "fullyImplemented": true, - "id": 2158, - "linearizedBaseContracts": [ - 2158 - ], - "name": "ProvisionManagerV1Storage", - "nameLocation": "165:25:18", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 2132, - "nodeType": "StructuredDocumentation", - "src": "197:93:18", - "text": "@notice The minimum amount of tokens required to register a provision in the data service" - }, - "functionSelector": "36fdd28a", - "id": 2134, - "mutability": "mutable", - "name": "minimumProvisionTokens", - "nameLocation": "310:22:18", - "nodeType": "VariableDeclaration", - "scope": 2158, - "src": "295:37:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2133, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "295:7:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 2135, - "nodeType": "StructuredDocumentation", - "src": "339:92:18", - "text": "@notice The maximum amount of tokens allowed to register a provision in the data service" - }, - "functionSelector": "73371823", - "id": 2137, - "mutability": "mutable", - "name": "maximumProvisionTokens", - "nameLocation": "451:22:18", - "nodeType": "VariableDeclaration", - "scope": 2158, - "src": "436:37:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2136, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "436:7:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 2138, - "nodeType": "StructuredDocumentation", - "src": "480:91:18", - "text": "@notice The minimum thawing period required to register a provision in the data service" - }, - "functionSelector": "8d2f2948", - "id": 2140, - "mutability": "mutable", - "name": "minimumThawingPeriod", - "nameLocation": "590:20:18", - "nodeType": "VariableDeclaration", - "scope": 2158, - "src": "576:34:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 2139, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "576:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 2141, - "nodeType": "StructuredDocumentation", - "src": "617:90:18", - "text": "@notice The maximum thawing period allowed to register a provision in the data service" - }, - "functionSelector": "9aafa5d1", - "id": 2143, - "mutability": "mutable", - "name": "maximumThawingPeriod", - "nameLocation": "726:20:18", - "nodeType": "VariableDeclaration", - "scope": 2158, - "src": "712:34:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 2142, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "712:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 2144, - "nodeType": "StructuredDocumentation", - "src": "753:98:18", - "text": "@notice The minimum verifier cut required to register a provision in the data service (in PPM)" - }, - "functionSelector": "88812583", - "id": 2146, - "mutability": "mutable", - "name": "minimumVerifierCut", - "nameLocation": "870:18:18", - "nodeType": "VariableDeclaration", - "scope": 2158, - "src": "856:32:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2145, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "856:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 2147, - "nodeType": "StructuredDocumentation", - "src": "895:97:18", - "text": "@notice The maximum verifier cut allowed to register a provision in the data service (in PPM)" - }, - "functionSelector": "9249c5c1", - "id": 2149, - "mutability": "mutable", - "name": "maximumVerifierCut", - "nameLocation": "1011:18:18", - "nodeType": "VariableDeclaration", - "scope": 2158, - "src": "997:32:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2148, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "997:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 2150, - "nodeType": "StructuredDocumentation", - "src": "1036:146:18", - "text": "@notice How much delegation the service provider can effectively use\n @dev Max calculated as service provider's stake * delegationRatio" - }, - "functionSelector": "bfdfa7af", - "id": 2152, - "mutability": "mutable", - "name": "delegationRatio", - "nameLocation": "1201:15:18", - "nodeType": "VariableDeclaration", - "scope": 2158, - "src": "1187:29:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2151, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1187:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 2153, - "nodeType": "StructuredDocumentation", - "src": "1223:57:18", - "text": "@dev Gap to allow adding variables in future upgrades" - }, - "id": 2157, - "mutability": "mutable", - "name": "__gap", - "nameLocation": "1305:5:18", - "nodeType": "VariableDeclaration", - "scope": 2158, - "src": "1285:25:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage", - "typeString": "uint256[50]" - }, - "typeName": { - "baseType": { - "id": 2154, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1285:7:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2156, - "length": { - "hexValue": "3530", - "id": 2155, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1293:2:18", - "typeDescriptions": { - "typeIdentifier": "t_rational_50_by_1", - "typeString": "int_const 50" - }, - "value": "50" - }, - "nodeType": "ArrayTypeName", - "src": "1285:11:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", - "typeString": "uint256[50]" - } - }, - "visibility": "private" - } - ], - "scope": 2159, - "src": "147:1166:18", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "45:1269:18" - }, - "id": 18 - }, - "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "exportedSymbols": { - "IGraphPayments": [ - 2211 - ] - }, - "id": 2212, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2160, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:19" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IGraphPayments", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 2161, - "nodeType": "StructuredDocumentation", - "src": "70:264:19", - "text": " @title Interface for the {GraphPayments} contract\n @notice This contract is part of the Graph Horizon payments protocol. It's designed\n to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a\n set of pre established rules." - }, - "fullyImplemented": false, - "id": 2211, - "linearizedBaseContracts": [ - 2211 - ], - "name": "IGraphPayments", - "nameLocation": "345:14:19", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "IGraphPayments.PaymentTypes", - "documentation": { - "id": 2162, - "nodeType": "StructuredDocumentation", - "src": "366:100:19", - "text": " @notice Types of payments that are supported by the payments protocol\n @dev" - }, - "id": 2166, - "members": [ - { - "id": 2163, - "name": "QueryFee", - "nameLocation": "499:8:19", - "nodeType": "EnumValue", - "src": "499:8:19" - }, - { - "id": 2164, - "name": "IndexingFee", - "nameLocation": "517:11:19", - "nodeType": "EnumValue", - "src": "517:11:19" - }, - { - "id": 2165, - "name": "IndexingRewards", - "nameLocation": "538:15:19", - "nodeType": "EnumValue", - "src": "538:15:19" - } - ], - "name": "PaymentTypes", - "nameLocation": "476:12:19", - "nodeType": "EnumDefinition", - "src": "471:88:19" - }, - { - "anonymous": false, - "documentation": { - "id": 2167, - "nodeType": "StructuredDocumentation", - "src": "565:486:19", - "text": " @notice Emitted when a payment is collected\n @param payer The address of the payer\n @param receiver The address of the receiver\n @param dataService The address of the data service\n @param tokensReceiver Amount of tokens for the receiver\n @param tokensDelegationPool Amount of tokens for delegators\n @param tokensDataService Amount of tokens for the data service\n @param tokensProtocol Amount of tokens charged as protocol tax" - }, - "eventSelector": "b6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca3", - "id": 2183, - "name": "PaymentCollected", - "nameLocation": "1062:16:19", - "nodeType": "EventDefinition", - "parameters": { - "id": 2182, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2169, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "1104:5:19", - "nodeType": "VariableDeclaration", - "scope": 2183, - "src": "1088:21:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2168, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1088:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2171, - "indexed": true, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "1135:8:19", - "nodeType": "VariableDeclaration", - "scope": 2183, - "src": "1119:24:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2170, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1119:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2173, - "indexed": true, - "mutability": "mutable", - "name": "dataService", - "nameLocation": "1169:11:19", - "nodeType": "VariableDeclaration", - "scope": 2183, - "src": "1153:27:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2172, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1153:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2175, - "indexed": false, - "mutability": "mutable", - "name": "tokensReceiver", - "nameLocation": "1198:14:19", - "nodeType": "VariableDeclaration", - "scope": 2183, - "src": "1190:22:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2174, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1190:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2177, - "indexed": false, - "mutability": "mutable", - "name": "tokensDelegationPool", - "nameLocation": "1230:20:19", - "nodeType": "VariableDeclaration", - "scope": 2183, - "src": "1222:28:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2176, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1222:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2179, - "indexed": false, - "mutability": "mutable", - "name": "tokensDataService", - "nameLocation": "1268:17:19", - "nodeType": "VariableDeclaration", - "scope": 2183, - "src": "1260:25:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2178, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1260:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2181, - "indexed": false, - "mutability": "mutable", - "name": "tokensProtocol", - "nameLocation": "1303:14:19", - "nodeType": "VariableDeclaration", - "scope": 2183, - "src": "1295:22:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2180, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1295:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1078:245:19" - }, - "src": "1056:268:19" - }, - { - "documentation": { - "id": 2184, - "nodeType": "StructuredDocumentation", - "src": "1330:208:19", - "text": " @notice Thrown when there are insufficient tokens to pay the required amount\n @param tokens The amount of tokens available\n @param minTokens The amount of tokens being collected" - }, - "errorSelector": "8bd93bad", - "id": 2190, - "name": "GraphPaymentsInsufficientTokens", - "nameLocation": "1549:31:19", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2189, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2186, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "1589:6:19", - "nodeType": "VariableDeclaration", - "scope": 2190, - "src": "1581:14:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2185, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1581:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2188, - "mutability": "mutable", - "name": "minTokens", - "nameLocation": "1605:9:19", - "nodeType": "VariableDeclaration", - "scope": 2190, - "src": "1597:17:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2187, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1597:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1580:35:19" - }, - "src": "1543:73:19" - }, - { - "documentation": { - "id": 2191, - "nodeType": "StructuredDocumentation", - "src": "1622:132:19", - "text": " @notice Thrown when the protocol payment cut is invalid\n @param protocolPaymentCut The protocol payment cut" - }, - "errorSelector": "d3097bcb", - "id": 2195, - "name": "GraphPaymentsInvalidProtocolPaymentCut", - "nameLocation": "1765:38:19", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2194, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2193, - "mutability": "mutable", - "name": "protocolPaymentCut", - "nameLocation": "1812:18:19", - "nodeType": "VariableDeclaration", - "scope": 2195, - "src": "1804:26:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2192, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1804:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1803:28:19" - }, - "src": "1759:73:19" - }, - { - "documentation": { - "id": 2196, - "nodeType": "StructuredDocumentation", - "src": "1838:478:19", - "text": " @notice Collects funds from a payer.\n It will pay cuts to all relevant parties and forward the rest to the receiver.\n @param paymentType The type of payment as defined in {IGraphPayments}\n @param receiver The address of the receiver\n @param tokens The amount of tokens being collected\n @param dataService The address of the data service\n @param tokensDataService The amount of tokens that should be sent to the data service" - }, - "functionSelector": "6c69783a", - "id": 2210, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "collect", - "nameLocation": "2330:7:19", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2208, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2199, - "mutability": "mutable", - "name": "paymentType", - "nameLocation": "2360:11:19", - "nodeType": "VariableDeclaration", - "scope": 2210, - "src": "2347:24:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 2198, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2197, - "name": "PaymentTypes", - "nameLocations": [ - "2347:12:19" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "2347:12:19" - }, - "referencedDeclaration": 2166, - "src": "2347:12:19", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2201, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "2389:8:19", - "nodeType": "VariableDeclaration", - "scope": 2210, - "src": "2381:16:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2200, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2381:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2203, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2415:6:19", - "nodeType": "VariableDeclaration", - "scope": 2210, - "src": "2407:14:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2202, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2407:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2205, - "mutability": "mutable", - "name": "dataService", - "nameLocation": "2439:11:19", - "nodeType": "VariableDeclaration", - "scope": 2210, - "src": "2431:19:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2204, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2431:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2207, - "mutability": "mutable", - "name": "tokensDataService", - "nameLocation": "2468:17:19", - "nodeType": "VariableDeclaration", - "scope": 2210, - "src": "2460:25:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2206, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2460:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2337:154:19" - }, - "returnParameters": { - "id": 2209, - "nodeType": "ParameterList", - "parameters": [], - "src": "2500:0:19" - }, - "scope": 2211, - "src": "2321:180:19", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 2212, - "src": "335:2168:19", - "usedErrors": [ - 2190, - 2195 - ], - "usedEvents": [ - 2183 - ] - } - ], - "src": "45:2459:19" - }, - "id": 19 - }, - "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol", - "exportedSymbols": { - "IGraphProxyAdmin": [ - 2215 - ] - }, - "id": 2216, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2213, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:20" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IGraphProxyAdmin", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 2214, - "nodeType": "StructuredDocumentation", - "src": "71:142:20", - "text": " @title IGraphProxyAdmin\n @dev Empty interface to allow the GraphProxyAdmin contract to be used\n in the GraphDirectory contract." - }, - "fullyImplemented": true, - "id": 2215, - "linearizedBaseContracts": [ - 2215 - ], - "name": "IGraphProxyAdmin", - "nameLocation": "224:16:20", - "nodeType": "ContractDefinition", - "nodes": [], - "scope": 2216, - "src": "214:29:20", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:198:20" - }, - "id": 20 - }, - "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", - "exportedSymbols": { - "IHorizonStaking": [ - 2235 - ], - "IHorizonStakingBase": [ - 2871 - ], - "IHorizonStakingExtension": [ - 3022 - ], - "IHorizonStakingMain": [ - 3695 - ], - "IHorizonStakingTypes": [ - 3796 - ] - }, - "id": 2236, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2217, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:21" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", - "file": "./internal/IHorizonStakingTypes.sol", - "id": 2219, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2236, - "sourceUnit": 3797, - "src": "71:75:21", - "symbolAliases": [ - { - "foreign": { - "id": 2218, - "name": "IHorizonStakingTypes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3796, - "src": "80:20:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol", - "file": "./internal/IHorizonStakingMain.sol", - "id": 2221, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2236, - "sourceUnit": 3696, - "src": "147:73:21", - "symbolAliases": [ - { - "foreign": { - "id": 2220, - "name": "IHorizonStakingMain", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3695, - "src": "156:19:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol", - "file": "./internal/IHorizonStakingBase.sol", - "id": 2223, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2236, - "sourceUnit": 2872, - "src": "221:73:21", - "symbolAliases": [ - { - "foreign": { - "id": 2222, - "name": "IHorizonStakingBase", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2871, - "src": "230:19:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol", - "file": "./internal/IHorizonStakingExtension.sol", - "id": 2225, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2236, - "sourceUnit": 3023, - "src": "295:83:21", - "symbolAliases": [ - { - "foreign": { - "id": 2224, - "name": "IHorizonStakingExtension", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3022, - "src": "304:24:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 2227, - "name": "IHorizonStakingTypes", - "nameLocations": [ - "748:20:21" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3796, - "src": "748:20:21" - }, - "id": 2228, - "nodeType": "InheritanceSpecifier", - "src": "748:20:21" - }, - { - "baseName": { - "id": 2229, - "name": "IHorizonStakingBase", - "nameLocations": [ - "770:19:21" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2871, - "src": "770:19:21" - }, - "id": 2230, - "nodeType": "InheritanceSpecifier", - "src": "770:19:21" - }, - { - "baseName": { - "id": 2231, - "name": "IHorizonStakingMain", - "nameLocations": [ - "791:19:21" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3695, - "src": "791:19:21" - }, - "id": 2232, - "nodeType": "InheritanceSpecifier", - "src": "791:19:21" - }, - { - "baseName": { - "id": 2233, - "name": "IHorizonStakingExtension", - "nameLocations": [ - "812:24:21" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3022, - "src": "812:24:21" - }, - "id": 2234, - "nodeType": "InheritanceSpecifier", - "src": "812:24:21" - } - ], - "canonicalName": "IHorizonStaking", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 2226, - "nodeType": "StructuredDocumentation", - "src": "380:338:21", - "text": " @title Complete interface for the Horizon Staking contract\n @notice This interface exposes all functions implemented by the {HorizonStaking} contract and its extension\n {HorizonStakingExtension} as well as the custom data types used by the contract.\n @dev Use this interface to interact with the Horizon Staking contract." - }, - "fullyImplemented": false, - "id": 2235, - "linearizedBaseContracts": [ - 2235, - 3022, - 314, - 3695, - 2871, - 3796 - ], - "name": "IHorizonStaking", - "nameLocation": "729:15:21", - "nodeType": "ContractDefinition", - "nodes": [], - "scope": 2236, - "src": "719:120:21", - "usedErrors": [ - 3272, - 3279, - 3286, - 3293, - 3302, - 3307, - 3314, - 3317, - 3324, - 3331, - 3338, - 3341, - 3348, - 3355, - 3362, - 3365, - 3368, - 3371, - 3373, - 3375, - 3380, - 3385, - 3388, - 3393 - ], - "usedEvents": [ - 2711, - 2922, - 2947, - 3036, - 3043, - 3056, - 3065, - 3074, - 3083, - 3094, - 3105, - 3116, - 3125, - 3134, - 3143, - 3154, - 3165, - 3176, - 3187, - 3196, - 3208, - 3223, - 3236, - 3249, - 3254, - 3261, - 3264, - 3269 - ] - } - ], - "src": "46:794:21" - }, - "id": 21 - }, - "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol", - "exportedSymbols": { - "IGraphPayments": [ - 2211 - ], - "IPaymentsCollector": [ - 2268 - ] - }, - "id": 2269, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2237, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:22" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "file": "./IGraphPayments.sol", - "id": 2239, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2269, - "sourceUnit": 2212, - "src": "71:54:22", - "symbolAliases": [ - { - "foreign": { - "id": 2238, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "80:14:22", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IPaymentsCollector", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 2240, - "nodeType": "StructuredDocumentation", - "src": "127:491:22", - "text": " @title Interface for a payments collector contract as defined by Graph Horizon payments protocol\n @notice Contracts implementing this interface can be used with the payments protocol. First, a payer must\n approve the collector to collect payments on their behalf. Only then can payment collection be initiated\n using the collector contract.\n @dev It's important to note that it's the collector contract's responsibility to validate the payment\n request is legitimate." - }, - "fullyImplemented": false, - "id": 2268, - "linearizedBaseContracts": [ - 2268 - ], - "name": "IPaymentsCollector", - "nameLocation": "629:18:22", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 2241, - "nodeType": "StructuredDocumentation", - "src": "654:457:22", - "text": " @notice Emitted when a payment is collected\n @param paymentType The payment type collected as defined by {IGraphPayments}\n @param payer The address of the payer\n @param receiver The address of the receiver\n @param tokensReceiver The amount of tokens received by the receiver\n @param dataService The address of the data service\n @param tokensDataService The amount of tokens received by the data service" - }, - "eventSelector": "fadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd1", - "id": 2256, - "name": "PaymentCollected", - "nameLocation": "1122:16:22", - "nodeType": "EventDefinition", - "parameters": { - "id": 2255, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2244, - "indexed": true, - "mutability": "mutable", - "name": "paymentType", - "nameLocation": "1184:11:22", - "nodeType": "VariableDeclaration", - "scope": 2256, - "src": "1148:47:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 2243, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2242, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "1148:14:22", - "1163:12:22" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "1148:27:22" - }, - "referencedDeclaration": 2166, - "src": "1148:27:22", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2246, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "1221:5:22", - "nodeType": "VariableDeclaration", - "scope": 2256, - "src": "1205:21:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2245, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1205:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2248, - "indexed": false, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "1244:8:22", - "nodeType": "VariableDeclaration", - "scope": 2256, - "src": "1236:16:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2247, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1236:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2250, - "indexed": false, - "mutability": "mutable", - "name": "tokensReceiver", - "nameLocation": "1270:14:22", - "nodeType": "VariableDeclaration", - "scope": 2256, - "src": "1262:22:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2249, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1262:7:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2252, - "indexed": true, - "mutability": "mutable", - "name": "dataService", - "nameLocation": "1310:11:22", - "nodeType": "VariableDeclaration", - "scope": 2256, - "src": "1294:27:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2251, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1294:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2254, - "indexed": false, - "mutability": "mutable", - "name": "tokensDataService", - "nameLocation": "1339:17:22", - "nodeType": "VariableDeclaration", - "scope": 2256, - "src": "1331:25:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2253, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1331:7:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1138:224:22" - }, - "src": "1116:247:22" - }, - { - "documentation": { - "id": 2257, - "nodeType": "StructuredDocumentation", - "src": "1369:727:22", - "text": " @notice Initiate a payment collection through the payments protocol\n @dev This function should require the caller to present some form of evidence of the payer's debt to\n the receiver. The collector should validate this evidence and, if valid, collect the payment.\n Requirements:\n - The caller must be the data service the RAV was issued to\n - The signer of the RAV must be authorized to sign for the payer\n Emits a {PaymentCollected} event\n @param paymentType The payment type to collect, as defined by {IGraphPayments}\n @param data Additional data required for the payment collection. Will vary depending on the collector\n implementation." - }, - "functionSelector": "7f07d283", - "id": 2267, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "collect", - "nameLocation": "2110:7:22", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2263, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2260, - "mutability": "mutable", - "name": "paymentType", - "nameLocation": "2146:11:22", - "nodeType": "VariableDeclaration", - "scope": 2267, - "src": "2118:39:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 2259, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2258, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "2118:14:22", - "2133:12:22" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "2118:27:22" - }, - "referencedDeclaration": 2166, - "src": "2118:27:22", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2262, - "mutability": "mutable", - "name": "data", - "nameLocation": "2172:4:22", - "nodeType": "VariableDeclaration", - "scope": 2267, - "src": "2159:17:22", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2261, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2159:5:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2117:60:22" - }, - "returnParameters": { - "id": 2266, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2265, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2267, - "src": "2196:7:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2264, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2196:7:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2195:9:22" - }, - "scope": 2268, - "src": "2101:104:22", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 2269, - "src": "619:1588:22", - "usedErrors": [], - "usedEvents": [ - 2256 - ] - } - ], - "src": "46:2162:22" - }, - "id": 22 - }, - "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol", - "exportedSymbols": { - "IGraphPayments": [ - 2211 - ], - "IPaymentsEscrow": [ - 2514 - ] - }, - "id": 2515, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2270, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:23" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "file": "./IGraphPayments.sol", - "id": 2272, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2515, - "sourceUnit": 2212, - "src": "70:54:23", - "symbolAliases": [ - { - "foreign": { - "id": 2271, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "79:14:23", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IPaymentsEscrow", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 2273, - "nodeType": "StructuredDocumentation", - "src": "126:631:23", - "text": " @title Interface for the {PaymentsEscrow} contract\n @notice This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT)\n for payments made through the payments protocol for services provided\n via a Graph Horizon data service.\n Payers deposit funds on the escrow, signalling their ability to pay for a service, and only\n being able to retrieve them after a thawing period. Receivers collect funds from the escrow,\n provided the payer has authorized them. The payer authorization is delegated to a payment\n collector contract which implements the {IPaymentsCollector} interface." - }, - "fullyImplemented": false, - "id": 2514, - "linearizedBaseContracts": [ - 2514 - ], - "name": "IPaymentsEscrow", - "nameLocation": "768:15:23", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "IPaymentsEscrow.EscrowAccount", - "documentation": { - "id": 2274, - "nodeType": "StructuredDocumentation", - "src": "790:63:23", - "text": "@notice Escrow account for a payer-collector-receiver tuple" - }, - "id": 2281, - "members": [ - { - "constant": false, - "id": 2276, - "mutability": "mutable", - "name": "balance", - "nameLocation": "967:7:23", - "nodeType": "VariableDeclaration", - "scope": 2281, - "src": "959:15:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2275, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "959:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2278, - "mutability": "mutable", - "name": "tokensThawing", - "nameLocation": "1043:13:23", - "nodeType": "VariableDeclaration", - "scope": 2281, - "src": "1035:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2277, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1035:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2280, - "mutability": "mutable", - "name": "thawEndTimestamp", - "nameLocation": "1146:16:23", - "nodeType": "VariableDeclaration", - "scope": 2281, - "src": "1138:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2279, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1138:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "EscrowAccount", - "nameLocation": "865:13:23", - "nodeType": "StructDefinition", - "scope": 2514, - "src": "858:311:23", - "visibility": "public" - }, - { - "canonicalName": "IPaymentsEscrow.Collector", - "documentation": { - "id": 2282, - "nodeType": "StructuredDocumentation", - "src": "1175:113:23", - "text": "@notice Details for a payer-collector pair\n @dev Collectors can be removed only after a thawing period" - }, - "id": 2287, - "members": [ - { - "constant": false, - "id": 2284, - "mutability": "mutable", - "name": "allowance", - "nameLocation": "1392:9:23", - "nodeType": "VariableDeclaration", - "scope": 2287, - "src": "1384:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2283, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1384:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2286, - "mutability": "mutable", - "name": "thawEndTimestamp", - "nameLocation": "1505:16:23", - "nodeType": "VariableDeclaration", - "scope": 2287, - "src": "1497:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2285, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1497:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Collector", - "nameLocation": "1300:9:23", - "nodeType": "StructDefinition", - "scope": 2514, - "src": "1293:235:23", - "visibility": "public" - }, - { - "anonymous": false, - "documentation": { - "id": 2288, - "nodeType": "StructuredDocumentation", - "src": "1534:341:23", - "text": " @notice Emitted when a payer authorizes a collector to collect funds\n @param payer The address of the payer\n @param collector The address of the collector\n @param addedAllowance The amount of tokens added to the collector's allowance\n @param newTotalAllowance The new total allowance after addition" - }, - "eventSelector": "61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d", - "id": 2298, - "name": "AuthorizedCollector", - "nameLocation": "1886:19:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 2297, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2290, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "1931:5:23", - "nodeType": "VariableDeclaration", - "scope": 2298, - "src": "1915:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2289, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1915:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2292, - "indexed": true, - "mutability": "mutable", - "name": "collector", - "nameLocation": "1962:9:23", - "nodeType": "VariableDeclaration", - "scope": 2298, - "src": "1946:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2291, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1946:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2294, - "indexed": false, - "mutability": "mutable", - "name": "addedAllowance", - "nameLocation": "1989:14:23", - "nodeType": "VariableDeclaration", - "scope": 2298, - "src": "1981:22:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2293, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1981:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2296, - "indexed": false, - "mutability": "mutable", - "name": "newTotalAllowance", - "nameLocation": "2021:17:23", - "nodeType": "VariableDeclaration", - "scope": 2298, - "src": "2013:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2295, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2013:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1905:139:23" - }, - "src": "1880:165:23" - }, - { - "anonymous": false, - "documentation": { - "id": 2299, - "nodeType": "StructuredDocumentation", - "src": "2051:163:23", - "text": " @notice Emitted when a payer thaws a collector\n @param payer The address of the payer\n @param collector The address of the collector" - }, - "eventSelector": "47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff", - "id": 2305, - "name": "ThawCollector", - "nameLocation": "2225:13:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 2304, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2301, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "2255:5:23", - "nodeType": "VariableDeclaration", - "scope": 2305, - "src": "2239:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2300, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2239:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2303, - "indexed": true, - "mutability": "mutable", - "name": "collector", - "nameLocation": "2278:9:23", - "nodeType": "VariableDeclaration", - "scope": 2305, - "src": "2262:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2302, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2262:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2238:50:23" - }, - "src": "2219:70:23" - }, - { - "anonymous": false, - "documentation": { - "id": 2306, - "nodeType": "StructuredDocumentation", - "src": "2295:180:23", - "text": " @notice Emitted when a payer cancels the thawing of a collector\n @param payer The address of the payer\n @param collector The address of the collector" - }, - "eventSelector": "988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d", - "id": 2312, - "name": "CancelThawCollector", - "nameLocation": "2486:19:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 2311, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2308, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "2522:5:23", - "nodeType": "VariableDeclaration", - "scope": 2312, - "src": "2506:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2307, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2506:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2310, - "indexed": true, - "mutability": "mutable", - "name": "collector", - "nameLocation": "2545:9:23", - "nodeType": "VariableDeclaration", - "scope": 2312, - "src": "2529:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2529:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2505:50:23" - }, - "src": "2480:76:23" - }, - { - "anonymous": false, - "documentation": { - "id": 2313, - "nodeType": "StructuredDocumentation", - "src": "2562:180:23", - "text": " @notice Emitted when a payer revokes a collector authorization.\n @param payer The address of the payer\n @param collector The address of the collector" - }, - "eventSelector": "3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d90", - "id": 2319, - "name": "RevokeCollector", - "nameLocation": "2753:15:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 2318, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2315, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "2785:5:23", - "nodeType": "VariableDeclaration", - "scope": 2319, - "src": "2769:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2314, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2769:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2317, - "indexed": true, - "mutability": "mutable", - "name": "collector", - "nameLocation": "2808:9:23", - "nodeType": "VariableDeclaration", - "scope": 2319, - "src": "2792:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2316, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2792:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2768:50:23" - }, - "src": "2747:72:23" - }, - { - "anonymous": false, - "documentation": { - "id": 2320, - "nodeType": "StructuredDocumentation", - "src": "2825:316:23", - "text": " @notice Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens deposited" - }, - "eventSelector": "7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96", - "id": 2330, - "name": "Deposit", - "nameLocation": "3152:7:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 2329, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2322, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "3176:5:23", - "nodeType": "VariableDeclaration", - "scope": 2330, - "src": "3160:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2321, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3160:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2324, - "indexed": true, - "mutability": "mutable", - "name": "collector", - "nameLocation": "3199:9:23", - "nodeType": "VariableDeclaration", - "scope": 2330, - "src": "3183:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2323, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3183:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2326, - "indexed": true, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "3226:8:23", - "nodeType": "VariableDeclaration", - "scope": 2330, - "src": "3210:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2325, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3210:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2328, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "3244:6:23", - "nodeType": "VariableDeclaration", - "scope": 2330, - "src": "3236:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2327, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3236:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3159:92:23" - }, - "src": "3146:106:23" - }, - { - "anonymous": false, - "documentation": { - "id": 2331, - "nodeType": "StructuredDocumentation", - "src": "3258:169:23", - "text": " @notice Emitted when a payer cancels an escrow thawing\n @param payer The address of the payer\n @param receiver The address of the receiver" - }, - "eventSelector": "b2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c948", - "id": 2337, - "name": "CancelThaw", - "nameLocation": "3438:10:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 2336, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2333, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "3465:5:23", - "nodeType": "VariableDeclaration", - "scope": 2337, - "src": "3449:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2332, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3449:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2335, - "indexed": true, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "3488:8:23", - "nodeType": "VariableDeclaration", - "scope": 2337, - "src": "3472:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2334, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3472:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3448:49:23" - }, - "src": "3432:66:23" - }, - { - "anonymous": false, - "documentation": { - "id": 2338, - "nodeType": "StructuredDocumentation", - "src": "3504:394:23", - "text": " @notice Emitted when a payer thaws funds from the escrow for a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens being thawed\n @param thawEndTimestamp The timestamp at which the thawing period ends" - }, - "eventSelector": "ba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc", - "id": 2350, - "name": "Thaw", - "nameLocation": "3909:4:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 2349, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2340, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "3939:5:23", - "nodeType": "VariableDeclaration", - "scope": 2350, - "src": "3923:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2339, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3923:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2342, - "indexed": true, - "mutability": "mutable", - "name": "collector", - "nameLocation": "3970:9:23", - "nodeType": "VariableDeclaration", - "scope": 2350, - "src": "3954:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2341, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3954:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2344, - "indexed": true, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "4005:8:23", - "nodeType": "VariableDeclaration", - "scope": 2350, - "src": "3989:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2343, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3989:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2346, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "4031:6:23", - "nodeType": "VariableDeclaration", - "scope": 2350, - "src": "4023:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2345, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4023:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2348, - "indexed": false, - "mutability": "mutable", - "name": "thawEndTimestamp", - "nameLocation": "4055:16:23", - "nodeType": "VariableDeclaration", - "scope": 2350, - "src": "4047:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2347, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4047:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3913:164:23" - }, - "src": "3903:175:23" - }, - { - "anonymous": false, - "documentation": { - "id": 2351, - "nodeType": "StructuredDocumentation", - "src": "4084:317:23", - "text": " @notice Emitted when a payer withdraws funds from the escrow for a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens withdrawn" - }, - "eventSelector": "3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f7", - "id": 2361, - "name": "Withdraw", - "nameLocation": "4412:8:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 2360, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2353, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "4437:5:23", - "nodeType": "VariableDeclaration", - "scope": 2361, - "src": "4421:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2352, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4421:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2355, - "indexed": true, - "mutability": "mutable", - "name": "collector", - "nameLocation": "4460:9:23", - "nodeType": "VariableDeclaration", - "scope": 2361, - "src": "4444:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2354, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4444:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2357, - "indexed": true, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "4487:8:23", - "nodeType": "VariableDeclaration", - "scope": 2361, - "src": "4471:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2356, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4471:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2359, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "4505:6:23", - "nodeType": "VariableDeclaration", - "scope": 2361, - "src": "4497:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2358, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4497:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4420:92:23" - }, - "src": "4406:107:23" - }, - { - "anonymous": false, - "documentation": { - "id": 2362, - "nodeType": "StructuredDocumentation", - "src": "4519:320:23", - "text": " @notice Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens collected" - }, - "eventSelector": "edeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd6", - "id": 2372, - "name": "EscrowCollected", - "nameLocation": "4850:15:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 2371, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2364, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "4882:5:23", - "nodeType": "VariableDeclaration", - "scope": 2372, - "src": "4866:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2363, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4866:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2366, - "indexed": true, - "mutability": "mutable", - "name": "collector", - "nameLocation": "4905:9:23", - "nodeType": "VariableDeclaration", - "scope": 2372, - "src": "4889:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2365, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4889:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2368, - "indexed": true, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "4932:8:23", - "nodeType": "VariableDeclaration", - "scope": 2372, - "src": "4916:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2367, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4916:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2370, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "4950:6:23", - "nodeType": "VariableDeclaration", - "scope": 2372, - "src": "4942:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2369, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4942:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4865:92:23" - }, - "src": "4844:114:23" - }, - { - "documentation": { - "id": 2373, - "nodeType": "StructuredDocumentation", - "src": "4985:97:23", - "text": " @notice Thrown when a protected function is called and the contract is paused." - }, - "errorSelector": "9e68cf0b", - "id": 2375, - "name": "PaymentsEscrowIsPaused", - "nameLocation": "5093:22:23", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2374, - "nodeType": "ParameterList", - "parameters": [], - "src": "5115:2:23" - }, - "src": "5087:31:23" - }, - { - "documentation": { - "id": 2376, - "nodeType": "StructuredDocumentation", - "src": "5124:196:23", - "text": " @notice Thrown when the available balance is insufficient to perform an operation\n @param balance The current balance\n @param minBalance The minimum required balance" - }, - "errorSelector": "3db4e691", - "id": 2382, - "name": "PaymentsEscrowInsufficientBalance", - "nameLocation": "5331:33:23", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2381, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2378, - "mutability": "mutable", - "name": "balance", - "nameLocation": "5373:7:23", - "nodeType": "VariableDeclaration", - "scope": 2382, - "src": "5365:15:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2377, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5365:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2380, - "mutability": "mutable", - "name": "minBalance", - "nameLocation": "5390:10:23", - "nodeType": "VariableDeclaration", - "scope": 2382, - "src": "5382:18:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2379, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5382:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5364:37:23" - }, - "src": "5325:77:23" - }, - { - "documentation": { - "id": 2383, - "nodeType": "StructuredDocumentation", - "src": "5408:92:23", - "text": " @notice Thrown when a thawing is expected to be in progress but it is not" - }, - "errorSelector": "8cbd172f", - "id": 2385, - "name": "PaymentsEscrowNotThawing", - "nameLocation": "5511:24:23", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2384, - "nodeType": "ParameterList", - "parameters": [], - "src": "5535:2:23" - }, - "src": "5505:33:23" - }, - { - "documentation": { - "id": 2386, - "nodeType": "StructuredDocumentation", - "src": "5544:200:23", - "text": " @notice Thrown when a thawing is still in progress\n @param currentTimestamp The current timestamp\n @param thawEndTimestamp The timestamp at which the thawing period ends" - }, - "errorSelector": "78a1b6f2", - "id": 2392, - "name": "PaymentsEscrowStillThawing", - "nameLocation": "5755:26:23", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2391, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2388, - "mutability": "mutable", - "name": "currentTimestamp", - "nameLocation": "5790:16:23", - "nodeType": "VariableDeclaration", - "scope": 2392, - "src": "5782:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2387, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5782:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2390, - "mutability": "mutable", - "name": "thawEndTimestamp", - "nameLocation": "5816:16:23", - "nodeType": "VariableDeclaration", - "scope": 2392, - "src": "5808:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2389, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5808:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5781:52:23" - }, - "src": "5749:85:23" - }, - { - "documentation": { - "id": 2393, - "nodeType": "StructuredDocumentation", - "src": "5840:200:23", - "text": " @notice Thrown when setting the thawing period to a value greater than the maximum\n @param thawingPeriod The thawing period\n @param maxWaitPeriod The maximum wait period" - }, - "errorSelector": "5c0f65a1", - "id": 2399, - "name": "PaymentsEscrowThawingPeriodTooLong", - "nameLocation": "6051:34:23", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2398, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2395, - "mutability": "mutable", - "name": "thawingPeriod", - "nameLocation": "6094:13:23", - "nodeType": "VariableDeclaration", - "scope": 2399, - "src": "6086:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2394, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6086:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2397, - "mutability": "mutable", - "name": "maxWaitPeriod", - "nameLocation": "6117:13:23", - "nodeType": "VariableDeclaration", - "scope": 2399, - "src": "6109:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2396, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6109:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6085:46:23" - }, - "src": "6045:87:23" - }, - { - "documentation": { - "id": 2400, - "nodeType": "StructuredDocumentation", - "src": "6138:198:23", - "text": " @notice Thrown when a collector has insufficient allowance to collect funds\n @param allowance The current allowance\n @param minAllowance The minimum required allowance" - }, - "errorSelector": "b0b503e7", - "id": 2406, - "name": "PaymentsEscrowInsufficientAllowance", - "nameLocation": "6347:35:23", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2405, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2402, - "mutability": "mutable", - "name": "allowance", - "nameLocation": "6391:9:23", - "nodeType": "VariableDeclaration", - "scope": 2406, - "src": "6383:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2401, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6383:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2404, - "mutability": "mutable", - "name": "minAllowance", - "nameLocation": "6410:12:23", - "nodeType": "VariableDeclaration", - "scope": 2406, - "src": "6402:20:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2403, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6402:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6382:41:23" - }, - "src": "6341:83:23" - }, - { - "documentation": { - "id": 2407, - "nodeType": "StructuredDocumentation", - "src": "6430:278:23", - "text": " @notice Thrown when the contract balance is not consistent with the collection amount\n @param balanceBefore The balance before the collection\n @param balanceAfter The balance after the collection\n @param tokens The amount of tokens collected" - }, - "errorSelector": "7e09c9ac", - "id": 2415, - "name": "PaymentsEscrowInconsistentCollection", - "nameLocation": "6719:36:23", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2414, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2409, - "mutability": "mutable", - "name": "balanceBefore", - "nameLocation": "6764:13:23", - "nodeType": "VariableDeclaration", - "scope": 2415, - "src": "6756:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2408, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6756:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2411, - "mutability": "mutable", - "name": "balanceAfter", - "nameLocation": "6787:12:23", - "nodeType": "VariableDeclaration", - "scope": 2415, - "src": "6779:20:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2410, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6779:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2413, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "6809:6:23", - "nodeType": "VariableDeclaration", - "scope": 2415, - "src": "6801:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2412, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6801:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6755:61:23" - }, - "src": "6713:104:23" - }, - { - "documentation": { - "id": 2416, - "nodeType": "StructuredDocumentation", - "src": "6823:84:23", - "text": " @notice Thrown when operating a zero token amount is not allowed." - }, - "errorSelector": "ebfc7cdc", - "id": 2418, - "name": "PaymentsEscrowInvalidZeroTokens", - "nameLocation": "6918:31:23", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2417, - "nodeType": "ParameterList", - "parameters": [], - "src": "6949:2:23" - }, - "src": "6912:40:23" - }, - { - "documentation": { - "id": 2419, - "nodeType": "StructuredDocumentation", - "src": "6958:526:23", - "text": " @notice Authorize a collector to collect funds from the payer's escrow\n @dev This function can only be used to increase the allowance of a collector.\n To reduce it the authorization must be revoked and a new one must be created.\n Requirements:\n - `allowance` must be greater than zero\n Emits an {AuthorizedCollector} event\n @param collector The address of the collector\n @param allowance The amount of tokens to add to the collector's allowance" - }, - "functionSelector": "4f9d392e", - "id": 2426, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approveCollector", - "nameLocation": "7498:16:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2424, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2421, - "mutability": "mutable", - "name": "collector", - "nameLocation": "7523:9:23", - "nodeType": "VariableDeclaration", - "scope": 2426, - "src": "7515:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2420, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7515:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2423, - "mutability": "mutable", - "name": "allowance", - "nameLocation": "7542:9:23", - "nodeType": "VariableDeclaration", - "scope": 2426, - "src": "7534:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2422, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7534:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7514:38:23" - }, - "returnParameters": { - "id": 2425, - "nodeType": "ParameterList", - "parameters": [], - "src": "7561:0:23" - }, - "scope": 2514, - "src": "7489:73:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2427, - "nodeType": "StructuredDocumentation", - "src": "7568:265:23", - "text": " @notice Thaw a collector's collector authorization\n @dev The thawing period is defined by the `REVOKE_COLLECTOR_THAWING_PERIOD` constant\n Emits a {ThawCollector} event\n @param collector The address of the collector" - }, - "functionSelector": "0ee36be3", - "id": 2432, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "thawCollector", - "nameLocation": "7847:13:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2430, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2429, - "mutability": "mutable", - "name": "collector", - "nameLocation": "7869:9:23", - "nodeType": "VariableDeclaration", - "scope": 2432, - "src": "7861:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2428, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7861:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7860:19:23" - }, - "returnParameters": { - "id": 2431, - "nodeType": "ParameterList", - "parameters": [], - "src": "7888:0:23" - }, - "scope": 2514, - "src": "7838:51:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2433, - "nodeType": "StructuredDocumentation", - "src": "7895:242:23", - "text": " @notice Cancel a collector's authorization thawing\n @dev Requirements:\n - `collector` must be thawing\n Emits a {CancelThawCollector} event\n @param collector The address of the collector" - }, - "functionSelector": "78a24c54", - "id": 2438, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "cancelThawCollector", - "nameLocation": "8151:19:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2436, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2435, - "mutability": "mutable", - "name": "collector", - "nameLocation": "8179:9:23", - "nodeType": "VariableDeclaration", - "scope": 2438, - "src": "8171:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2434, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8171:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8170:19:23" - }, - "returnParameters": { - "id": 2437, - "nodeType": "ParameterList", - "parameters": [], - "src": "8198:0:23" - }, - "scope": 2514, - "src": "8142:57:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2439, - "nodeType": "StructuredDocumentation", - "src": "8205:301:23", - "text": " @notice Revoke a collector's authorization.\n Removes the collector from the list of authorized collectors.\n @dev Requirements:\n - `collector` must have thawed\n Emits a {RevokeCollector} event\n @param collector The address of the collector" - }, - "functionSelector": "32825b81", - "id": 2444, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "revokeCollector", - "nameLocation": "8520:15:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2442, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2441, - "mutability": "mutable", - "name": "collector", - "nameLocation": "8544:9:23", - "nodeType": "VariableDeclaration", - "scope": 2444, - "src": "8536:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2440, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8536:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8535:19:23" - }, - "returnParameters": { - "id": 2443, - "nodeType": "ParameterList", - "parameters": [], - "src": "8563:0:23" - }, - "scope": 2514, - "src": "8511:53:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2445, - "nodeType": "StructuredDocumentation", - "src": "8570:338:23", - "text": " @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where\n the payer is the transaction caller.\n @dev Emits a {Deposit} event\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens to deposit" - }, - "functionSelector": "8340f549", - "id": 2454, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nameLocation": "8922:7:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2452, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2447, - "mutability": "mutable", - "name": "collector", - "nameLocation": "8938:9:23", - "nodeType": "VariableDeclaration", - "scope": 2454, - "src": "8930:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2446, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8930:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2449, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "8957:8:23", - "nodeType": "VariableDeclaration", - "scope": 2454, - "src": "8949:16:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2448, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8949:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2451, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "8975:6:23", - "nodeType": "VariableDeclaration", - "scope": 2454, - "src": "8967:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2450, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8967:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8929:53:23" - }, - "returnParameters": { - "id": 2453, - "nodeType": "ParameterList", - "parameters": [], - "src": "8991:0:23" - }, - "scope": 2514, - "src": "8913:79:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2455, - "nodeType": "StructuredDocumentation", - "src": "8998:374:23", - "text": " @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where\n the payer can be specified.\n @dev Emits a {Deposit} event\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens to deposit" - }, - "functionSelector": "72eb521e", - "id": 2466, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "depositTo", - "nameLocation": "9386:9:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2464, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2457, - "mutability": "mutable", - "name": "payer", - "nameLocation": "9404:5:23", - "nodeType": "VariableDeclaration", - "scope": 2466, - "src": "9396:13:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2456, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9396:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2459, - "mutability": "mutable", - "name": "collector", - "nameLocation": "9419:9:23", - "nodeType": "VariableDeclaration", - "scope": 2466, - "src": "9411:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2458, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9411:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2461, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "9438:8:23", - "nodeType": "VariableDeclaration", - "scope": 2466, - "src": "9430:16:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2460, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9430:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2463, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "9456:6:23", - "nodeType": "VariableDeclaration", - "scope": 2466, - "src": "9448:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2462, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9448:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9395:68:23" - }, - "returnParameters": { - "id": 2465, - "nodeType": "ParameterList", - "parameters": [], - "src": "9472:0:23" - }, - "scope": 2514, - "src": "9377:96:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2467, - "nodeType": "StructuredDocumentation", - "src": "9479:716:23", - "text": " @notice Thaw a specific amount of escrow from a payer-collector-receiver's escrow account.\n The payer is the transaction caller.\n If `tokens` is zero and funds were already thawing it will cancel the thawing.\n Note that repeated calls to this function will overwrite the previous thawing amount\n and reset the thawing period.\n @dev Requirements:\n - `tokens` must be less than or equal to the available balance\n Emits a {Thaw} event. If `tokens` is zero it will emit a {CancelThaw} event.\n @param collector The address of the collector\n @param receiver The address of the receiver\n @param tokens The amount of tokens to thaw" - }, - "functionSelector": "f93f1cd0", - "id": 2476, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "thaw", - "nameLocation": "10209:4:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2474, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2469, - "mutability": "mutable", - "name": "collector", - "nameLocation": "10222:9:23", - "nodeType": "VariableDeclaration", - "scope": 2476, - "src": "10214:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2468, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10214:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2471, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "10241:8:23", - "nodeType": "VariableDeclaration", - "scope": 2476, - "src": "10233:16:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2470, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10233:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2473, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "10259:6:23", - "nodeType": "VariableDeclaration", - "scope": 2476, - "src": "10251:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2472, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10251:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10213:53:23" - }, - "returnParameters": { - "id": 2475, - "nodeType": "ParameterList", - "parameters": [], - "src": "10275:0:23" - }, - "scope": 2514, - "src": "10200:76:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2477, - "nodeType": "StructuredDocumentation", - "src": "10282:486:23", - "text": " @notice Withdraws all thawed escrow from a payer-collector-receiver's escrow account.\n The payer is the transaction caller.\n Note that the withdrawn funds might be less than the thawed amount if there were\n payment collections in the meantime.\n @dev Requirements:\n - Funds must be thawed\n Emits a {Withdraw} event\n @param collector The address of the collector\n @param receiver The address of the receiver" - }, - "functionSelector": "f940e385", - "id": 2484, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdraw", - "nameLocation": "10782:8:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2482, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2479, - "mutability": "mutable", - "name": "collector", - "nameLocation": "10799:9:23", - "nodeType": "VariableDeclaration", - "scope": 2484, - "src": "10791:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2478, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10791:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2481, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "10818:8:23", - "nodeType": "VariableDeclaration", - "scope": 2484, - "src": "10810:16:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2480, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10810:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "10790:37:23" - }, - "returnParameters": { - "id": 2483, - "nodeType": "ParameterList", - "parameters": [], - "src": "10836:0:23" - }, - "scope": 2514, - "src": "10773:64:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2485, - "nodeType": "StructuredDocumentation", - "src": "10843:845:23", - "text": " @notice Collects funds from the payer-collector-receiver's escrow and sends them to {GraphPayments} for\n distribution using the Graph Horizon Payments protocol.\n The function will revert if there are not enough funds in the escrow.\n @dev Requirements:\n - `collector` needs to be authorized by the payer and have enough allowance\n Emits an {EscrowCollected} event\n @param paymentType The type of payment being collected as defined in the {IGraphPayments} interface\n @param payer The address of the payer\n @param receiver The address of the receiver\n @param tokens The amount of tokens to collect\n @param dataService The address of the data service\n @param tokensDataService The amount of tokens that {GraphPayments} should send to the data service" - }, - "functionSelector": "87dbfe82", - "id": 2501, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "collect", - "nameLocation": "11702:7:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2499, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2488, - "mutability": "mutable", - "name": "paymentType", - "nameLocation": "11747:11:23", - "nodeType": "VariableDeclaration", - "scope": 2501, - "src": "11719:39:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 2487, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2486, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "11719:14:23", - "11734:12:23" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "11719:27:23" - }, - "referencedDeclaration": 2166, - "src": "11719:27:23", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2490, - "mutability": "mutable", - "name": "payer", - "nameLocation": "11776:5:23", - "nodeType": "VariableDeclaration", - "scope": 2501, - "src": "11768:13:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2489, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11768:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2492, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "11799:8:23", - "nodeType": "VariableDeclaration", - "scope": 2501, - "src": "11791:16:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2491, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11791:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2494, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "11825:6:23", - "nodeType": "VariableDeclaration", - "scope": 2501, - "src": "11817:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2493, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11817:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2496, - "mutability": "mutable", - "name": "dataService", - "nameLocation": "11849:11:23", - "nodeType": "VariableDeclaration", - "scope": 2501, - "src": "11841:19:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2495, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11841:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2498, - "mutability": "mutable", - "name": "tokensDataService", - "nameLocation": "11878:17:23", - "nodeType": "VariableDeclaration", - "scope": 2501, - "src": "11870:25:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2497, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11870:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11709:192:23" - }, - "returnParameters": { - "id": 2500, - "nodeType": "ParameterList", - "parameters": [], - "src": "11910:0:23" - }, - "scope": 2514, - "src": "11693:218:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2502, - "nodeType": "StructuredDocumentation", - "src": "11917:227:23", - "text": " @notice Get the balance of a payer-collector-receiver tuple\n @param payer The address of the payer\n @param collector The address of the collector\n @param receiver The address of the receiver" - }, - "functionSelector": "d6bd603c", - "id": 2513, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getBalance", - "nameLocation": "12158:10:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2509, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2504, - "mutability": "mutable", - "name": "payer", - "nameLocation": "12177:5:23", - "nodeType": "VariableDeclaration", - "scope": 2513, - "src": "12169:13:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2503, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12169:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2506, - "mutability": "mutable", - "name": "collector", - "nameLocation": "12192:9:23", - "nodeType": "VariableDeclaration", - "scope": 2513, - "src": "12184:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2505, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12184:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2508, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "12211:8:23", - "nodeType": "VariableDeclaration", - "scope": 2513, - "src": "12203:16:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2507, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12203:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "12168:52:23" - }, - "returnParameters": { - "id": 2512, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2511, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2513, - "src": "12244:7:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2510, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12244:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12243:9:23" - }, - "scope": 2514, - "src": "12149:104:23", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 2515, - "src": "758:11497:23", - "usedErrors": [ - 2375, - 2382, - 2385, - 2392, - 2399, - 2406, - 2415, - 2418 - ], - "usedEvents": [ - 2298, - 2305, - 2312, - 2319, - 2330, - 2337, - 2350, - 2361, - 2372 - ] - } - ], - "src": "45:12211:23" - }, - "id": 23 - }, - "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", - "exportedSymbols": { - "IPaymentsCollector": [ - 2268 - ], - "ITAPCollector": [ - 2695 - ] - }, - "id": 2696, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2516, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:24" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol", - "file": "./IPaymentsCollector.sol", - "id": 2518, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2696, - "sourceUnit": 2269, - "src": "70:62:24", - "symbolAliases": [ - { - "foreign": { - "id": 2517, - "name": "IPaymentsCollector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2268, - "src": "79:18:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 2520, - "name": "IPaymentsCollector", - "nameLocations": [ - "465:18:24" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2268, - "src": "465:18:24" - }, - "id": 2521, - "nodeType": "InheritanceSpecifier", - "src": "465:18:24" - } - ], - "canonicalName": "ITAPCollector", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 2519, - "nodeType": "StructuredDocumentation", - "src": "134:303:24", - "text": " @title Interface for the {TAPCollector} contract\n @dev Implements the {IPaymentCollector} interface as defined by the Graph\n Horizon payments protocol.\n @notice Implements a payments collector contract that can be used to collect\n payments using a TAP RAV (Receipt Aggregate Voucher)." - }, - "fullyImplemented": false, - "id": 2695, - "linearizedBaseContracts": [ - 2695, - 2268 - ], - "name": "ITAPCollector", - "nameLocation": "448:13:24", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "ITAPCollector.PayerAuthorization", - "documentation": { - "id": 2522, - "nodeType": "StructuredDocumentation", - "src": "490:107:24", - "text": "@notice Details for a payer-signer pair\n @dev Signers can be removed only after a thawing period" - }, - "id": 2527, - "members": [ - { - "constant": false, - "id": 2524, - "mutability": "mutable", - "name": "payer", - "nameLocation": "700:5:24", - "nodeType": "VariableDeclaration", - "scope": 2527, - "src": "692:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2523, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "692:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2526, - "mutability": "mutable", - "name": "thawEndTimestamp", - "nameLocation": "795:16:24", - "nodeType": "VariableDeclaration", - "scope": 2527, - "src": "787:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2525, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "787:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "PayerAuthorization", - "nameLocation": "609:18:24", - "nodeType": "StructDefinition", - "scope": 2695, - "src": "602:216:24", - "visibility": "public" - }, - { - "canonicalName": "ITAPCollector.ReceiptAggregateVoucher", - "documentation": { - "id": 2528, - "nodeType": "StructuredDocumentation", - "src": "824:54:24", - "text": "@notice The Receipt Aggregate Voucher (RAV) struct" - }, - "id": 2539, - "members": [ - { - "constant": false, - "id": 2530, - "mutability": "mutable", - "name": "dataService", - "nameLocation": "997:11:24", - "nodeType": "VariableDeclaration", - "scope": 2539, - "src": "989:19:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2529, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "989:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2532, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1095:15:24", - "nodeType": "VariableDeclaration", - "scope": 2539, - "src": "1087:23:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2531, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1087:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2534, - "mutability": "mutable", - "name": "timestampNs", - "nameLocation": "1202:11:24", - "nodeType": "VariableDeclaration", - "scope": 2539, - "src": "1195:18:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 2533, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1195:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2536, - "mutability": "mutable", - "name": "valueAggregate", - "nameLocation": "1404:14:24", - "nodeType": "VariableDeclaration", - "scope": 2539, - "src": "1396:22:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 2535, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "1396:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2538, - "mutability": "mutable", - "name": "metadata", - "nameLocation": "1518:8:24", - "nodeType": "VariableDeclaration", - "scope": 2539, - "src": "1512:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2537, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1512:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "name": "ReceiptAggregateVoucher", - "nameLocation": "890:23:24", - "nodeType": "StructDefinition", - "scope": 2695, - "src": "883:650:24", - "visibility": "public" - }, - { - "canonicalName": "ITAPCollector.SignedRAV", - "documentation": { - "id": 2540, - "nodeType": "StructuredDocumentation", - "src": "1539:46:24", - "text": "@notice A struct representing a signed RAV" - }, - "id": 2546, - "members": [ - { - "constant": false, - "id": 2543, - "mutability": "mutable", - "name": "rav", - "nameLocation": "1660:3:24", - "nodeType": "VariableDeclaration", - "scope": 2546, - "src": "1636:27:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_storage_ptr", - "typeString": "struct ITAPCollector.ReceiptAggregateVoucher" - }, - "typeName": { - "id": 2542, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2541, - "name": "ReceiptAggregateVoucher", - "nameLocations": [ - "1636:23:24" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2539, - "src": "1636:23:24" - }, - "referencedDeclaration": 2539, - "src": "1636:23:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_storage_ptr", - "typeString": "struct ITAPCollector.ReceiptAggregateVoucher" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2545, - "mutability": "mutable", - "name": "signature", - "nameLocation": "1755:9:24", - "nodeType": "VariableDeclaration", - "scope": 2546, - "src": "1749:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2544, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1749:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "name": "SignedRAV", - "nameLocation": "1597:9:24", - "nodeType": "StructDefinition", - "scope": 2695, - "src": "1590:181:24", - "visibility": "public" - }, - { - "anonymous": false, - "documentation": { - "id": 2547, - "nodeType": "StructuredDocumentation", - "src": "1777:223:24", - "text": " @notice Emitted when a signer is authorized to sign RAVs for a payer\n @param payer The address of the payer authorizing the signer\n @param authorizedSigner The address of the authorized signer" - }, - "eventSelector": "6edcdd4150e63c6c36d965976c1c37375609c8b040c50d39e7156437b80e2828", - "id": 2553, - "name": "SignerAuthorized", - "nameLocation": "2011:16:24", - "nodeType": "EventDefinition", - "parameters": { - "id": 2552, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2549, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "2044:5:24", - "nodeType": "VariableDeclaration", - "scope": 2553, - "src": "2028:21:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2548, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2028:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2551, - "indexed": true, - "mutability": "mutable", - "name": "authorizedSigner", - "nameLocation": "2067:16:24", - "nodeType": "VariableDeclaration", - "scope": 2553, - "src": "2051:32:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2550, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2051:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2027:57:24" - }, - "src": "2005:80:24" - }, - { - "anonymous": false, - "documentation": { - "id": 2554, - "nodeType": "StructuredDocumentation", - "src": "2091:312:24", - "text": " @notice Emitted when a signer is thawed to be removed from the authorized signers list\n @param payer The address of the payer thawing the signer\n @param authorizedSigner The address of the signer to thaw\n @param thawEndTimestamp The timestamp at which the thawing period ends" - }, - "eventSelector": "d939049941f6a15381248e4ac0010f15efdf0f3221923711244c200b5ff2cddf", - "id": 2562, - "name": "SignerThawing", - "nameLocation": "2414:13:24", - "nodeType": "EventDefinition", - "parameters": { - "id": 2561, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2556, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "2444:5:24", - "nodeType": "VariableDeclaration", - "scope": 2562, - "src": "2428:21:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2555, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2428:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2558, - "indexed": true, - "mutability": "mutable", - "name": "authorizedSigner", - "nameLocation": "2467:16:24", - "nodeType": "VariableDeclaration", - "scope": 2562, - "src": "2451:32:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2557, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2451:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2560, - "indexed": false, - "mutability": "mutable", - "name": "thawEndTimestamp", - "nameLocation": "2493:16:24", - "nodeType": "VariableDeclaration", - "scope": 2562, - "src": "2485:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2559, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2485:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2427:83:24" - }, - "src": "2408:103:24" - }, - { - "anonymous": false, - "documentation": { - "id": 2563, - "nodeType": "StructuredDocumentation", - "src": "2517:287:24", - "text": " @dev Emitted when the thawing of a signer is cancelled\n @param payer The address of the payer cancelling the thawing\n @param authorizedSigner The address of the authorized signer\n @param thawEndTimestamp The timestamp at which the thawing period ends" - }, - "eventSelector": "3b4432b11b66b46d9a7b190aa989c0ae85a5395b543540220596dd94dd405ceb", - "id": 2571, - "name": "SignerThawCanceled", - "nameLocation": "2815:18:24", - "nodeType": "EventDefinition", - "parameters": { - "id": 2570, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2565, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "2850:5:24", - "nodeType": "VariableDeclaration", - "scope": 2571, - "src": "2834:21:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2564, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2834:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2567, - "indexed": true, - "mutability": "mutable", - "name": "authorizedSigner", - "nameLocation": "2873:16:24", - "nodeType": "VariableDeclaration", - "scope": 2571, - "src": "2857:32:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2566, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2857:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2569, - "indexed": false, - "mutability": "mutable", - "name": "thawEndTimestamp", - "nameLocation": "2899:16:24", - "nodeType": "VariableDeclaration", - "scope": 2571, - "src": "2891:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2568, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2891:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2833:83:24" - }, - "src": "2809:108:24" - }, - { - "anonymous": false, - "documentation": { - "id": 2572, - "nodeType": "StructuredDocumentation", - "src": "2923:206:24", - "text": " @dev Emitted when a authorized signer has been revoked\n @param payer The address of the payer revoking the signer\n @param authorizedSigner The address of the authorized signer" - }, - "eventSelector": "2fc91dbd92d741cae16e0315578d7f6cf77043b771692c4bd993658ecfe89422", - "id": 2578, - "name": "SignerRevoked", - "nameLocation": "3140:13:24", - "nodeType": "EventDefinition", - "parameters": { - "id": 2577, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2574, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "3170:5:24", - "nodeType": "VariableDeclaration", - "scope": 2578, - "src": "3154:21:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2573, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3154:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2576, - "indexed": true, - "mutability": "mutable", - "name": "authorizedSigner", - "nameLocation": "3193:16:24", - "nodeType": "VariableDeclaration", - "scope": 2578, - "src": "3177:32:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2575, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3177:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3153:57:24" - }, - "src": "3134:77:24" - }, - { - "anonymous": false, - "documentation": { - "id": 2579, - "nodeType": "StructuredDocumentation", - "src": "3217:444:24", - "text": " @notice Emitted when a RAV is collected\n @param payer The address of the payer\n @param dataService The address of the data service\n @param serviceProvider The address of the service provider\n @param timestampNs The timestamp of the RAV\n @param valueAggregate The total amount owed to the service provider\n @param metadata Arbitrary metadata\n @param signature The signature of the RAV" - }, - "eventSelector": "2d55f33a4a377f40129b217a6cf7a5022a112941b80cd589332abc245aa0a5c7", - "id": 2595, - "name": "RAVCollected", - "nameLocation": "3672:12:24", - "nodeType": "EventDefinition", - "parameters": { - "id": 2594, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2581, - "indexed": true, - "mutability": "mutable", - "name": "payer", - "nameLocation": "3710:5:24", - "nodeType": "VariableDeclaration", - "scope": 2595, - "src": "3694:21:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2580, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3694:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2583, - "indexed": true, - "mutability": "mutable", - "name": "dataService", - "nameLocation": "3741:11:24", - "nodeType": "VariableDeclaration", - "scope": 2595, - "src": "3725:27:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2582, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3725:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2585, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3778:15:24", - "nodeType": "VariableDeclaration", - "scope": 2595, - "src": "3762:31:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2584, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3762:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2587, - "indexed": false, - "mutability": "mutable", - "name": "timestampNs", - "nameLocation": "3810:11:24", - "nodeType": "VariableDeclaration", - "scope": 2595, - "src": "3803:18:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 2586, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "3803:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2589, - "indexed": false, - "mutability": "mutable", - "name": "valueAggregate", - "nameLocation": "3839:14:24", - "nodeType": "VariableDeclaration", - "scope": 2595, - "src": "3831:22:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 2588, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "3831:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2591, - "indexed": false, - "mutability": "mutable", - "name": "metadata", - "nameLocation": "3869:8:24", - "nodeType": "VariableDeclaration", - "scope": 2595, - "src": "3863:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2590, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3863:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2593, - "indexed": false, - "mutability": "mutable", - "name": "signature", - "nameLocation": "3893:9:24", - "nodeType": "VariableDeclaration", - "scope": 2595, - "src": "3887:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2592, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3887:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3684:224:24" - }, - "src": "3666:243:24" - }, - { - "documentation": { - "id": 2596, - "nodeType": "StructuredDocumentation", - "src": "3915:189:24", - "text": " Thrown when the signer is already authorized\n @param authorizingPayer The address of the payer authorizing the signer\n @param signer The address of the signer" - }, - "errorSelector": "cb2320b7", - "id": 2602, - "name": "TAPCollectorSignerAlreadyAuthorized", - "nameLocation": "4115:35:24", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2601, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2598, - "mutability": "mutable", - "name": "authorizingPayer", - "nameLocation": "4159:16:24", - "nodeType": "VariableDeclaration", - "scope": 2602, - "src": "4151:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2597, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4151:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2600, - "mutability": "mutable", - "name": "signer", - "nameLocation": "4185:6:24", - "nodeType": "VariableDeclaration", - "scope": 2602, - "src": "4177:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2599, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4177:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4150:42:24" - }, - "src": "4109:84:24" - }, - { - "documentation": { - "id": 2603, - "nodeType": "StructuredDocumentation", - "src": "4199:198:24", - "text": " Thrown when the signer proof deadline is invalid\n @param proofDeadline The deadline for the proof provided by the signer\n @param currentTimestamp The current timestamp" - }, - "errorSelector": "43c042b3", - "id": 2609, - "name": "TAPCollectorInvalidSignerProofDeadline", - "nameLocation": "4408:38:24", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2608, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2605, - "mutability": "mutable", - "name": "proofDeadline", - "nameLocation": "4455:13:24", - "nodeType": "VariableDeclaration", - "scope": 2609, - "src": "4447:21:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2604, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4447:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2607, - "mutability": "mutable", - "name": "currentTimestamp", - "nameLocation": "4478:16:24", - "nodeType": "VariableDeclaration", - "scope": 2609, - "src": "4470:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2606, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4470:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4446:49:24" - }, - "src": "4402:94:24" - }, - { - "documentation": { - "id": 2610, - "nodeType": "StructuredDocumentation", - "src": "4502:58:24", - "text": " Thrown when the signer proof is invalid" - }, - "errorSelector": "2c9e215e", - "id": 2612, - "name": "TAPCollectorInvalidSignerProof", - "nameLocation": "4571:30:24", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2611, - "nodeType": "ParameterList", - "parameters": [], - "src": "4601:2:24" - }, - "src": "4565:39:24" - }, - { - "documentation": { - "id": 2613, - "nodeType": "StructuredDocumentation", - "src": "4610:164:24", - "text": " Thrown when the signer is not authorized by the payer\n @param payer The address of the payer\n @param signer The address of the signer" - }, - "errorSelector": "ad827d30", - "id": 2619, - "name": "TAPCollectorSignerNotAuthorizedByPayer", - "nameLocation": "4785:38:24", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2618, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2615, - "mutability": "mutable", - "name": "payer", - "nameLocation": "4832:5:24", - "nodeType": "VariableDeclaration", - "scope": 2619, - "src": "4824:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2614, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4824:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2617, - "mutability": "mutable", - "name": "signer", - "nameLocation": "4847:6:24", - "nodeType": "VariableDeclaration", - "scope": 2619, - "src": "4839:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2616, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4839:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4823:31:24" - }, - "src": "4779:76:24" - }, - { - "documentation": { - "id": 2620, - "nodeType": "StructuredDocumentation", - "src": "4861:103:24", - "text": " Thrown when the signer is not thawing\n @param signer The address of the signer" - }, - "errorSelector": "1885ecbd", - "id": 2624, - "name": "TAPCollectorSignerNotThawing", - "nameLocation": "4975:28:24", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2623, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2622, - "mutability": "mutable", - "name": "signer", - "nameLocation": "5012:6:24", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "5004:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2621, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5004:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5003:16:24" - }, - "src": "4969:51:24" - }, - { - "documentation": { - "id": 2625, - "nodeType": "StructuredDocumentation", - "src": "5026:189:24", - "text": " Thrown when the signer is still thawing\n @param currentTimestamp The current timestamp\n @param thawEndTimestamp The timestamp at which the thawing period ends" - }, - "errorSelector": "d2168558", - "id": 2631, - "name": "TAPCollectorSignerStillThawing", - "nameLocation": "5226:30:24", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2630, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2627, - "mutability": "mutable", - "name": "currentTimestamp", - "nameLocation": "5265:16:24", - "nodeType": "VariableDeclaration", - "scope": 2631, - "src": "5257:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2626, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5257:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2629, - "mutability": "mutable", - "name": "thawEndTimestamp", - "nameLocation": "5291:16:24", - "nodeType": "VariableDeclaration", - "scope": 2631, - "src": "5283:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2628, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5283:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5256:52:24" - }, - "src": "5220:89:24" - }, - { - "documentation": { - "id": 2632, - "nodeType": "StructuredDocumentation", - "src": "5315:56:24", - "text": " Thrown when the RAV signer is invalid" - }, - "errorSelector": "0ef060dd", - "id": 2634, - "name": "TAPCollectorInvalidRAVSigner", - "nameLocation": "5382:28:24", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2633, - "nodeType": "ParameterList", - "parameters": [], - "src": "5410:2:24" - }, - "src": "5376:37:24" - }, - { - "documentation": { - "id": 2635, - "nodeType": "StructuredDocumentation", - "src": "5419:192:24", - "text": " Thrown when the caller is not the data service the RAV was issued to\n @param caller The address of the caller\n @param dataService The address of the data service" - }, - "errorSelector": "8eccd746", - "id": 2641, - "name": "TAPCollectorCallerNotDataService", - "nameLocation": "5622:32:24", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2640, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2637, - "mutability": "mutable", - "name": "caller", - "nameLocation": "5663:6:24", - "nodeType": "VariableDeclaration", - "scope": 2641, - "src": "5655:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2636, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5655:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2639, - "mutability": "mutable", - "name": "dataService", - "nameLocation": "5679:11:24", - "nodeType": "VariableDeclaration", - "scope": 2641, - "src": "5671:19:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2638, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5671:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5654:37:24" - }, - "src": "5616:76:24" - }, - { - "documentation": { - "id": 2642, - "nodeType": "StructuredDocumentation", - "src": "5698:292:24", - "text": " @notice Thrown when the tokens collected are inconsistent with the collection history\n Each RAV should have a value greater than the previous one\n @param tokens The amount of tokens in the RAV\n @param tokensCollected The amount of tokens already collected" - }, - "errorSelector": "47233ec8", - "id": 2648, - "name": "TAPCollectorInconsistentRAVTokens", - "nameLocation": "6001:33:24", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2647, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2644, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "6043:6:24", - "nodeType": "VariableDeclaration", - "scope": 2648, - "src": "6035:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2643, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6035:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2646, - "mutability": "mutable", - "name": "tokensCollected", - "nameLocation": "6059:15:24", - "nodeType": "VariableDeclaration", - "scope": 2648, - "src": "6051:23:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2645, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6051:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6034:41:24" - }, - "src": "5995:81:24" - }, - { - "documentation": { - "id": 2649, - "nodeType": "StructuredDocumentation", - "src": "6082:616:24", - "text": " @notice Authorize a signer to sign on behalf of the payer\n @dev Requirements:\n - `signer` must not be already authorized\n - `proofDeadline` must be greater than the current timestamp\n - `proof` must be a valid signature from the signer being authorized\n Emits an {SignerAuthorized} event\n @param signer The addres of the authorized signer\n @param proofDeadline The deadline for the proof provided by the signer\n @param proof The proof provided by the signer to be authorized by the payer, consists of (chainID, proof deadline, sender address)" - }, - "functionSelector": "fee9f01f", - "id": 2658, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "authorizeSigner", - "nameLocation": "6712:15:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2656, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2651, - "mutability": "mutable", - "name": "signer", - "nameLocation": "6736:6:24", - "nodeType": "VariableDeclaration", - "scope": 2658, - "src": "6728:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2650, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6728:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2653, - "mutability": "mutable", - "name": "proofDeadline", - "nameLocation": "6752:13:24", - "nodeType": "VariableDeclaration", - "scope": 2658, - "src": "6744:21:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2652, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6744:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2655, - "mutability": "mutable", - "name": "proof", - "nameLocation": "6782:5:24", - "nodeType": "VariableDeclaration", - "scope": 2658, - "src": "6767:20:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2654, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6767:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6727:61:24" - }, - "returnParameters": { - "id": 2657, - "nodeType": "ParameterList", - "parameters": [], - "src": "6797:0:24" - }, - "scope": 2695, - "src": "6703:95:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2659, - "nodeType": "StructuredDocumentation", - "src": "6804:720:24", - "text": " @notice Starts thawing a signer to be removed from the authorized signers list\n @dev Thawing a signer alerts receivers that signatures from that signer will soon be deemed invalid.\n Receivers without existing signed receipts or RAVs from this signer should treat them as unauthorized.\n Those with existing signed documents from this signer should work towards settling their engagements.\n Once a signer is thawed, they should be viewed as revoked regardless of their revocation status.\n Requirements:\n - `signer` must be authorized by the payer calling this function\n Emits a {SignerThawing} event\n @param signer The address of the signer to thaw" - }, - "functionSelector": "1354f019", - "id": 2664, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "thawSigner", - "nameLocation": "7538:10:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2662, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2661, - "mutability": "mutable", - "name": "signer", - "nameLocation": "7557:6:24", - "nodeType": "VariableDeclaration", - "scope": 2664, - "src": "7549:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2660, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7549:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7548:16:24" - }, - "returnParameters": { - "id": 2663, - "nodeType": "ParameterList", - "parameters": [], - "src": "7573:0:24" - }, - "scope": 2695, - "src": "7529:45:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2665, - "nodeType": "StructuredDocumentation", - "src": "7580:274:24", - "text": " @notice Stops thawing a signer.\n @dev Requirements:\n - `signer` must be thawing and authorized by the payer calling this function\n Emits a {SignerThawCanceled} event\n @param signer The address of the signer to cancel thawing" - }, - "functionSelector": "015cdd80", - "id": 2670, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "cancelThawSigner", - "nameLocation": "7868:16:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2668, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2667, - "mutability": "mutable", - "name": "signer", - "nameLocation": "7893:6:24", - "nodeType": "VariableDeclaration", - "scope": 2670, - "src": "7885:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2666, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7885:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7884:16:24" - }, - "returnParameters": { - "id": 2669, - "nodeType": "ParameterList", - "parameters": [], - "src": "7909:0:24" - }, - "scope": 2695, - "src": "7859:51:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2671, - "nodeType": "StructuredDocumentation", - "src": "7916:287:24", - "text": " @notice Revokes a signer from the authorized signers list if thawed.\n @dev Requirements:\n - `signer` must be thawed and authorized by the payer calling this function\n Emits a {SignerRevoked} event\n @param signer The address of the signer" - }, - "functionSelector": "39aa7416", - "id": 2676, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "revokeAuthorizedSigner", - "nameLocation": "8217:22:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2674, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2673, - "mutability": "mutable", - "name": "signer", - "nameLocation": "8248:6:24", - "nodeType": "VariableDeclaration", - "scope": 2676, - "src": "8240:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2672, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8240:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8239:16:24" - }, - "returnParameters": { - "id": 2675, - "nodeType": "ParameterList", - "parameters": [], - "src": "8264:0:24" - }, - "scope": 2695, - "src": "8208:57:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2677, - "nodeType": "StructuredDocumentation", - "src": "8271:212:24", - "text": " @dev Recovers the signer address of a signed ReceiptAggregateVoucher (RAV).\n @param signedRAV The SignedRAV containing the RAV and its signature.\n @return The address of the signer." - }, - "functionSelector": "1ef518f2", - "id": 2685, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "recoverRAVSigner", - "nameLocation": "8497:16:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2681, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2680, - "mutability": "mutable", - "name": "signedRAV", - "nameLocation": "8533:9:24", - "nodeType": "VariableDeclaration", - "scope": 2685, - "src": "8514:28:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_calldata_ptr", - "typeString": "struct ITAPCollector.SignedRAV" - }, - "typeName": { - "id": 2679, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2678, - "name": "SignedRAV", - "nameLocations": [ - "8514:9:24" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2546, - "src": "8514:9:24" - }, - "referencedDeclaration": 2546, - "src": "8514:9:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_storage_ptr", - "typeString": "struct ITAPCollector.SignedRAV" - } - }, - "visibility": "internal" - } - ], - "src": "8513:30:24" - }, - "returnParameters": { - "id": 2684, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2683, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2685, - "src": "8567:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2682, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8567:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8566:9:24" - }, - "scope": 2695, - "src": "8488:88:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2686, - "nodeType": "StructuredDocumentation", - "src": "8582:170:24", - "text": " @dev Computes the hash of a ReceiptAggregateVoucher (RAV).\n @param rav The RAV for which to compute the hash.\n @return The hash of the RAV." - }, - "functionSelector": "8821603c", - "id": 2694, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "encodeRAV", - "nameLocation": "8766:9:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2690, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2689, - "mutability": "mutable", - "name": "rav", - "nameLocation": "8809:3:24", - "nodeType": "VariableDeclaration", - "scope": 2694, - "src": "8776:36:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_calldata_ptr", - "typeString": "struct ITAPCollector.ReceiptAggregateVoucher" - }, - "typeName": { - "id": 2688, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2687, - "name": "ReceiptAggregateVoucher", - "nameLocations": [ - "8776:23:24" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2539, - "src": "8776:23:24" - }, - "referencedDeclaration": 2539, - "src": "8776:23:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_storage_ptr", - "typeString": "struct ITAPCollector.ReceiptAggregateVoucher" - } - }, - "visibility": "internal" - } - ], - "src": "8775:38:24" - }, - "returnParameters": { - "id": 2693, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2692, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2694, - "src": "8837:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2691, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8837:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "8836:9:24" - }, - "scope": 2695, - "src": "8757:89:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 2696, - "src": "438:8410:24", - "usedErrors": [ - 2602, - 2609, - 2612, - 2619, - 2624, - 2631, - 2634, - 2641, - 2648 - ], - "usedEvents": [ - 2256, - 2553, - 2562, - 2571, - 2578, - 2595 - ] - } - ], - "src": "45:8804:24" - }, - "id": 24 - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol", - "exportedSymbols": { - "IGraphPayments": [ - 2211 - ], - "IHorizonStakingBase": [ - 2871 - ], - "IHorizonStakingTypes": [ - 3796 - ], - "LinkedList": [ - 4087 - ] - }, - "id": 2872, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2697, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:25" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", - "file": "./IHorizonStakingTypes.sol", - "id": 2699, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2872, - "sourceUnit": 3797, - "src": "71:66:25", - "symbolAliases": [ - { - "foreign": { - "id": 2698, - "name": "IHorizonStakingTypes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3796, - "src": "80:20:25", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "file": "../IGraphPayments.sol", - "id": 2701, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2872, - "sourceUnit": 2212, - "src": "138:55:25", - "symbolAliases": [ - { - "foreign": { - "id": 2700, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "147:14:25", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/LinkedList.sol", - "file": "../../libraries/LinkedList.sol", - "id": 2703, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2872, - "sourceUnit": 4088, - "src": "195:60:25", - "symbolAliases": [ - { - "foreign": { - "id": 2702, - "name": "LinkedList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4087, - "src": "204:10:25", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IHorizonStakingBase", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 2704, - "nodeType": "StructuredDocumentation", - "src": "257:324:25", - "text": " @title Interface for the {HorizonStakingBase} contract.\n @notice Provides getters for {HorizonStaking} and {HorizonStakingExtension} storage variables.\n @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision\n functions take `serviceProvider` and `verifier` addresses." - }, - "fullyImplemented": false, - "id": 2871, - "linearizedBaseContracts": [ - 2871 - ], - "name": "IHorizonStakingBase", - "nameLocation": "592:19:25", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 2705, - "nodeType": "StructuredDocumentation", - "src": "618:408:25", - "text": " @notice Emitted when a service provider stakes tokens.\n @dev TODO: After transition period move to IHorizonStakingMain. Temporarily it\n needs to be here since it's emitted by {_stake} which is used by both {HorizonStaking}\n and {HorizonStakingExtension}.\n @param serviceProvider The address of the service provider.\n @param tokens The amount of tokens staked." - }, - "eventSelector": "0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2", - "id": 2711, - "name": "StakeDeposited", - "nameLocation": "1037:14:25", - "nodeType": "EventDefinition", - "parameters": { - "id": 2710, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2707, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1068:15:25", - "nodeType": "VariableDeclaration", - "scope": 2711, - "src": "1052:31:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2706, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1052:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2709, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "1093:6:25", - "nodeType": "VariableDeclaration", - "scope": 2711, - "src": "1085:14:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2708, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1085:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1051:49:25" - }, - "src": "1031:70:25" - }, - { - "documentation": { - "id": 2712, - "nodeType": "StructuredDocumentation", - "src": "1107:133:25", - "text": " @notice Gets the details of a service provider.\n @param serviceProvider The address of the service provider." - }, - "functionSelector": "8cc01c86", - "id": 2720, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getServiceProvider", - "nameLocation": "1254:18:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2715, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2714, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1290:15:25", - "nodeType": "VariableDeclaration", - "scope": 2720, - "src": "1282:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2713, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1282:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1272:39:25" - }, - "returnParameters": { - "id": 2719, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2718, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2720, - "src": "1335:43:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ServiceProvider_$3724_memory_ptr", - "typeString": "struct IHorizonStakingTypes.ServiceProvider" - }, - "typeName": { - "id": 2717, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2716, - "name": "IHorizonStakingTypes.ServiceProvider", - "nameLocations": [ - "1335:20:25", - "1356:15:25" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3724, - "src": "1335:36:25" - }, - "referencedDeclaration": 3724, - "src": "1335:36:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ServiceProvider_$3724_storage_ptr", - "typeString": "struct IHorizonStakingTypes.ServiceProvider" - } - }, - "visibility": "internal" - } - ], - "src": "1334:45:25" - }, - "scope": 2871, - "src": "1245:135:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2721, - "nodeType": "StructuredDocumentation", - "src": "1386:175:25", - "text": " @notice Gets the stake of a service provider.\n @param serviceProvider The address of the service provider.\n @return The amount of tokens staked." - }, - "functionSelector": "7a766460", - "id": 2728, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getStake", - "nameLocation": "1575:8:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2724, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2723, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1592:15:25", - "nodeType": "VariableDeclaration", - "scope": 2728, - "src": "1584:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2722, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1584:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1583:25:25" - }, - "returnParameters": { - "id": 2727, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2726, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2728, - "src": "1632:7:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2725, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1632:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1631:9:25" - }, - "scope": 2871, - "src": "1566:75:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2729, - "nodeType": "StructuredDocumentation", - "src": "1647:311:25", - "text": " @notice Gets the service provider's idle stake which is the stake that is not being\n used for any provision. Note that this only includes service provider's self stake.\n @param serviceProvider The address of the service provider.\n @return The amount of tokens that are idle." - }, - "functionSelector": "a784d498", - "id": 2736, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getIdleStake", - "nameLocation": "1972:12:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2732, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2731, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1993:15:25", - "nodeType": "VariableDeclaration", - "scope": 2736, - "src": "1985:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2730, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1985:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1984:25:25" - }, - "returnParameters": { - "id": 2735, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2734, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2736, - "src": "2033:7:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2733, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2033:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2032:9:25" - }, - "scope": 2871, - "src": "1963:79:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2737, - "nodeType": "StructuredDocumentation", - "src": "2048:226:25", - "text": " @notice Gets the details of delegation pool.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @return The delegation pool details." - }, - "functionSelector": "561285e4", - "id": 2747, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getDelegationPool", - "nameLocation": "2288:17:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2742, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2739, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2323:15:25", - "nodeType": "VariableDeclaration", - "scope": 2747, - "src": "2315:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2738, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2315:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2741, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "2356:8:25", - "nodeType": "VariableDeclaration", - "scope": 2747, - "src": "2348:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2740, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2348:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2305:65:25" - }, - "returnParameters": { - "id": 2746, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2745, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2747, - "src": "2394:42:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", - "typeString": "struct IHorizonStakingTypes.DelegationPool" - }, - "typeName": { - "id": 2744, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2743, - "name": "IHorizonStakingTypes.DelegationPool", - "nameLocations": [ - "2394:20:25", - "2415:14:25" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3748, - "src": "2394:35:25" - }, - "referencedDeclaration": 3748, - "src": "2394:35:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DelegationPool_$3748_storage_ptr", - "typeString": "struct IHorizonStakingTypes.DelegationPool" - } - }, - "visibility": "internal" - } - ], - "src": "2393:44:25" - }, - "scope": 2871, - "src": "2279:159:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2748, - "nodeType": "StructuredDocumentation", - "src": "2444:272:25", - "text": " @notice Gets the details of a delegation.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param delegator The address of the delegator.\n @return The delegation details." - }, - "functionSelector": "ccebcabb", - "id": 2760, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getDelegation", - "nameLocation": "2730:13:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2755, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2750, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2761:15:25", - "nodeType": "VariableDeclaration", - "scope": 2760, - "src": "2753:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2749, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2753:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2752, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "2794:8:25", - "nodeType": "VariableDeclaration", - "scope": 2760, - "src": "2786:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2751, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2786:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2754, - "mutability": "mutable", - "name": "delegator", - "nameLocation": "2820:9:25", - "nodeType": "VariableDeclaration", - "scope": 2760, - "src": "2812:17:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2753, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2812:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2743:92:25" - }, - "returnParameters": { - "id": 2759, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2758, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2760, - "src": "2859:38:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Delegation_$3777_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Delegation" - }, - "typeName": { - "id": 2757, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2756, - "name": "IHorizonStakingTypes.Delegation", - "nameLocations": [ - "2859:20:25", - "2880:10:25" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3777, - "src": "2859:31:25" - }, - "referencedDeclaration": 3777, - "src": "2859:31:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Delegation_$3777_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Delegation" - } - }, - "visibility": "internal" - } - ], - "src": "2858:40:25" - }, - "scope": 2871, - "src": "2721:178:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2761, - "nodeType": "StructuredDocumentation", - "src": "2905:327:25", - "text": " @notice Gets the delegation fee cut for a payment type.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param paymentType The payment type as defined by {IGraphPayments.PaymentTypes}.\n @return The delegation fee cut in PPM." - }, - "functionSelector": "7573ef4f", - "id": 2773, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getDelegationFeeCut", - "nameLocation": "3246:19:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2769, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2763, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3283:15:25", - "nodeType": "VariableDeclaration", - "scope": 2773, - "src": "3275:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2762, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3275:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2765, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "3316:8:25", - "nodeType": "VariableDeclaration", - "scope": 2773, - "src": "3308:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2764, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3308:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2768, - "mutability": "mutable", - "name": "paymentType", - "nameLocation": "3362:11:25", - "nodeType": "VariableDeclaration", - "scope": 2773, - "src": "3334:39:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 2767, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2766, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "3334:14:25", - "3349:12:25" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "3334:27:25" - }, - "referencedDeclaration": 2166, - "src": "3334:27:25", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - } - ], - "src": "3265:114:25" - }, - "returnParameters": { - "id": 2772, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2771, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2773, - "src": "3403:7:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2770, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3403:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3402:9:25" - }, - "scope": 2871, - "src": "3237:175:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2774, - "nodeType": "StructuredDocumentation", - "src": "3418:216:25", - "text": " @notice Gets the details of a provision.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @return The provision details." - }, - "functionSelector": "25d9897e", - "id": 2784, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getProvision", - "nameLocation": "3648:12:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2779, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2776, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3678:15:25", - "nodeType": "VariableDeclaration", - "scope": 2784, - "src": "3670:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2775, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3670:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2778, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "3711:8:25", - "nodeType": "VariableDeclaration", - "scope": 2784, - "src": "3703:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2777, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3703:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3660:65:25" - }, - "returnParameters": { - "id": 2783, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2782, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2784, - "src": "3749:37:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 2781, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2780, - "name": "IHorizonStakingTypes.Provision", - "nameLocations": [ - "3749:20:25", - "3770:9:25" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "3749:30:25" - }, - "referencedDeclaration": 3718, - "src": "3749:30:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "src": "3748:39:25" - }, - "scope": 2871, - "src": "3639:149:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2785, - "nodeType": "StructuredDocumentation", - "src": "3794:559:25", - "text": " @notice Gets the tokens available in a provision.\n Tokens available are the tokens in a provision that are not thawing. Includes service\n provider's and delegator's stake.\n Allows specifying a `delegationRatio` which caps the amount of delegated tokens that are\n considered available.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param delegationRatio The delegation ratio.\n @return The amount of tokens available." - }, - "functionSelector": "872d0489", - "id": 2796, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getTokensAvailable", - "nameLocation": "4367:18:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2792, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2787, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "4403:15:25", - "nodeType": "VariableDeclaration", - "scope": 2796, - "src": "4395:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2786, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4395:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2789, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "4436:8:25", - "nodeType": "VariableDeclaration", - "scope": 2796, - "src": "4428:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2788, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4428:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2791, - "mutability": "mutable", - "name": "delegationRatio", - "nameLocation": "4461:15:25", - "nodeType": "VariableDeclaration", - "scope": 2796, - "src": "4454:22:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2790, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "4454:6:25", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "4385:97:25" - }, - "returnParameters": { - "id": 2795, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2794, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2796, - "src": "4506:7:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2793, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4506:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4505:9:25" - }, - "scope": 2871, - "src": "4358:157:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2797, - "nodeType": "StructuredDocumentation", - "src": "4521:326:25", - "text": " @notice Gets the service provider's tokens available in a provision.\n @dev Calculated as the tokens available minus the tokens thawing.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @return The amount of tokens available." - }, - "functionSelector": "08ce5f68", - "id": 2806, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getProviderTokensAvailable", - "nameLocation": "4861:26:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2802, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2799, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "4896:15:25", - "nodeType": "VariableDeclaration", - "scope": 2806, - "src": "4888:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2798, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4888:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2801, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "4921:8:25", - "nodeType": "VariableDeclaration", - "scope": 2806, - "src": "4913:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2800, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4913:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4887:43:25" - }, - "returnParameters": { - "id": 2805, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2804, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2806, - "src": "4954:7:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2803, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4954:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4953:9:25" - }, - "scope": 2871, - "src": "4852:111:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2807, - "nodeType": "StructuredDocumentation", - "src": "4969:319:25", - "text": " @notice Gets the delegator's tokens available in a provision.\n @dev Calculated as the tokens available minus the tokens thawing.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @return The amount of tokens available." - }, - "functionSelector": "fb744cc0", - "id": 2816, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getDelegatedTokensAvailable", - "nameLocation": "5302:27:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2812, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2809, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "5338:15:25", - "nodeType": "VariableDeclaration", - "scope": 2816, - "src": "5330:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2808, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5330:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2811, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "5363:8:25", - "nodeType": "VariableDeclaration", - "scope": 2816, - "src": "5355:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2810, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5355:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5329:43:25" - }, - "returnParameters": { - "id": 2815, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2814, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2816, - "src": "5396:7:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2813, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5396:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5395:9:25" - }, - "scope": 2871, - "src": "5293:112:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2817, - "nodeType": "StructuredDocumentation", - "src": "5411:144:25", - "text": " @notice Gets a thaw request.\n @param thawRequestId The id of the thaw request.\n @return The thaw request details." - }, - "functionSelector": "b7ca7241", - "id": 2825, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getThawRequest", - "nameLocation": "5569:14:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2820, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2819, - "mutability": "mutable", - "name": "thawRequestId", - "nameLocation": "5592:13:25", - "nodeType": "VariableDeclaration", - "scope": 2825, - "src": "5584:21:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2818, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5584:7:25", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5583:23:25" - }, - "returnParameters": { - "id": 2824, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2823, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2825, - "src": "5630:39:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ThawRequest_$3795_memory_ptr", - "typeString": "struct IHorizonStakingTypes.ThawRequest" - }, - "typeName": { - "id": 2822, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2821, - "name": "IHorizonStakingTypes.ThawRequest", - "nameLocations": [ - "5630:20:25", - "5651:11:25" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3795, - "src": "5630:32:25" - }, - "referencedDeclaration": 3795, - "src": "5630:32:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ThawRequest_$3795_storage_ptr", - "typeString": "struct IHorizonStakingTypes.ThawRequest" - } - }, - "visibility": "internal" - } - ], - "src": "5629:41:25" - }, - "scope": 2871, - "src": "5560:111:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2826, - "nodeType": "StructuredDocumentation", - "src": "5677:529:25", - "text": " @notice Gets the metadata of a thaw request list.\n Service provider and delegators each have their own thaw request list per provision.\n Metadata includes the head and tail of the list, plus the total number of thaw requests.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param owner The owner of the thaw requests. Use either the service provider or delegator address.\n @return The thaw requests list metadata." - }, - "functionSelector": "a212daf8", - "id": 2838, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getThawRequestList", - "nameLocation": "6220:18:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2833, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2828, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "6256:15:25", - "nodeType": "VariableDeclaration", - "scope": 2838, - "src": "6248:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2827, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6248:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2830, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "6289:8:25", - "nodeType": "VariableDeclaration", - "scope": 2838, - "src": "6281:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2829, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6281:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2832, - "mutability": "mutable", - "name": "owner", - "nameLocation": "6315:5:25", - "nodeType": "VariableDeclaration", - "scope": 2838, - "src": "6307:13:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2831, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6307:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6238:88:25" - }, - "returnParameters": { - "id": 2837, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2836, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2838, - "src": "6350:22:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_memory_ptr", - "typeString": "struct LinkedList.List" - }, - "typeName": { - "id": 2835, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2834, - "name": "LinkedList.List", - "nameLocations": [ - "6350:10:25", - "6361:4:25" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3813, - "src": "6350:15:25" - }, - "referencedDeclaration": 3813, - "src": "6350:15:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - } - }, - "visibility": "internal" - } - ], - "src": "6349:24:25" - }, - "scope": 2871, - "src": "6211:163:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2839, - "nodeType": "StructuredDocumentation", - "src": "6380:351:25", - "text": " @notice Gets the amount of thawed tokens for a given provision.\n @param serviceProvider The address of the service provider.\n @param verifier The address of the verifier.\n @param owner The owner of the thaw requests. Use either the service provider or delegator address.\n @return The amount of thawed tokens." - }, - "functionSelector": "9054e343", - "id": 2850, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getThawedTokens", - "nameLocation": "6745:15:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2846, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2841, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "6769:15:25", - "nodeType": "VariableDeclaration", - "scope": 2850, - "src": "6761:23:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2840, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6761:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2843, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "6794:8:25", - "nodeType": "VariableDeclaration", - "scope": 2850, - "src": "6786:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2842, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6786:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2845, - "mutability": "mutable", - "name": "owner", - "nameLocation": "6812:5:25", - "nodeType": "VariableDeclaration", - "scope": 2850, - "src": "6804:13:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2844, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6804:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6760:58:25" - }, - "returnParameters": { - "id": 2849, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2848, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2850, - "src": "6842:7:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2847, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6842:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6841:9:25" - }, - "scope": 2871, - "src": "6736:115:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2851, - "nodeType": "StructuredDocumentation", - "src": "6857:83:25", - "text": " @notice Gets the maximum allowed thawing period for a provision." - }, - "functionSelector": "39514ad2", - "id": 2856, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getMaxThawingPeriod", - "nameLocation": "6954:19:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2852, - "nodeType": "ParameterList", - "parameters": [], - "src": "6973:2:25" - }, - "returnParameters": { - "id": 2855, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2854, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2856, - "src": "6999:6:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 2853, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "6999:6:25", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "6998:8:25" - }, - "scope": 2871, - "src": "6945:62:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2857, - "nodeType": "StructuredDocumentation", - "src": "7013:208:25", - "text": " @notice Return true if the verifier is an allowed locked verifier.\n @param verifier Address of the verifier\n @return True if verifier is allowed locked verifier, false otherwise" - }, - "functionSelector": "ae4fe67a", - "id": 2864, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isAllowedLockedVerifier", - "nameLocation": "7235:23:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2860, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2859, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "7267:8:25", - "nodeType": "VariableDeclaration", - "scope": 2864, - "src": "7259:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2858, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7259:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7258:18:25" - }, - "returnParameters": { - "id": 2863, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2862, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2864, - "src": "7300:4:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2861, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7300:4:25", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "7299:6:25" - }, - "scope": 2871, - "src": "7226:80:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2865, - "nodeType": "StructuredDocumentation", - "src": "7312:90:25", - "text": " @notice Return true if delegation slashing is enabled, false otherwise." - }, - "functionSelector": "fc54fb27", - "id": 2870, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isDelegationSlashingEnabled", - "nameLocation": "7416:27:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2866, - "nodeType": "ParameterList", - "parameters": [], - "src": "7443:2:25" - }, - "returnParameters": { - "id": 2869, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2868, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2870, - "src": "7469:4:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2867, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7469:4:25", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "7468:6:25" - }, - "scope": 2871, - "src": "7407:68:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 2872, - "src": "582:6895:25", - "usedErrors": [], - "usedEvents": [ - 2711 - ] - } - ], - "src": "46:7432:25" - }, - "id": 25 - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol", - "exportedSymbols": { - "IHorizonStakingExtension": [ - 3022 - ], - "IRewardsIssuer": [ - 314 - ] - }, - "id": 3023, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2873, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:26" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", - "file": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", - "id": 2875, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3023, - "sourceUnit": 315, - "src": "71:95:26", - "symbolAliases": [ - { - "foreign": { - "id": 2874, - "name": "IRewardsIssuer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 314, - "src": "80:14:26", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 2877, - "name": "IRewardsIssuer", - "nameLocations": [ - "337:14:26" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 314, - "src": "337:14:26" - }, - "id": 2878, - "nodeType": "InheritanceSpecifier", - "src": "337:14:26" - } - ], - "canonicalName": "IHorizonStakingExtension", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 2876, - "nodeType": "StructuredDocumentation", - "src": "168:130:26", - "text": " @title Interface for {HorizonStakingExtension} contract.\n @notice Provides functions for managing legacy allocations." - }, - "fullyImplemented": false, - "id": 3022, - "linearizedBaseContracts": [ - 3022, - 314 - ], - "name": "IHorizonStakingExtension", - "nameLocation": "309:24:26", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "IHorizonStakingExtension.Allocation", - "documentation": { - "id": 2879, - "nodeType": "StructuredDocumentation", - "src": "358:194:26", - "text": " @dev Allocate GRT tokens for the purpose of serving queries of a subgraph deployment\n An allocation is created in the allocate() function and closed in closeAllocation()" - }, - "id": 2898, - "members": [ - { - "constant": false, - "id": 2881, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "593:7:26", - "nodeType": "VariableDeclaration", - "scope": 2898, - "src": "585:15:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2880, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "585:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2883, - "mutability": "mutable", - "name": "subgraphDeploymentID", - "nameLocation": "618:20:26", - "nodeType": "VariableDeclaration", - "scope": 2898, - "src": "610:28:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2882, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "610:7:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2885, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "656:6:26", - "nodeType": "VariableDeclaration", - "scope": 2898, - "src": "648:14:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2884, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "648:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2887, - "mutability": "mutable", - "name": "createdAtEpoch", - "nameLocation": "724:14:26", - "nodeType": "VariableDeclaration", - "scope": 2898, - "src": "716:22:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2886, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "716:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2889, - "mutability": "mutable", - "name": "closedAtEpoch", - "nameLocation": "785:13:26", - "nodeType": "VariableDeclaration", - "scope": 2898, - "src": "777:21:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2888, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "777:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2891, - "mutability": "mutable", - "name": "collectedFees", - "nameLocation": "844:13:26", - "nodeType": "VariableDeclaration", - "scope": 2898, - "src": "836:21:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2890, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "836:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2893, - "mutability": "mutable", - "name": "__DEPRECATED_effectiveAllocation", - "nameLocation": "912:32:26", - "nodeType": "VariableDeclaration", - "scope": 2898, - "src": "904:40:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2892, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "904:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2895, - "mutability": "mutable", - "name": "accRewardsPerAllocatedToken", - "nameLocation": "1005:27:26", - "nodeType": "VariableDeclaration", - "scope": 2898, - "src": "997:35:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2894, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "997:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2897, - "mutability": "mutable", - "name": "distributedRebates", - "nameLocation": "1083:18:26", - "nodeType": "VariableDeclaration", - "scope": 2898, - "src": "1075:26:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2896, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1075:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Allocation", - "nameLocation": "564:10:26", - "nodeType": "StructDefinition", - "scope": 3022, - "src": "557:595:26", - "visibility": "public" - }, - { - "canonicalName": "IHorizonStakingExtension.AllocationState", - "documentation": { - "id": 2899, - "nodeType": "StructuredDocumentation", - "src": "1158:202:26", - "text": " @dev Possible states an allocation can be.\n States:\n - Null = indexer == address(0)\n - Active = not Null && tokens > 0\n - Closed = Active && closedAtEpoch != 0" - }, - "id": 2903, - "members": [ - { - "id": 2900, - "name": "Null", - "nameLocation": "1396:4:26", - "nodeType": "EnumValue", - "src": "1396:4:26" - }, - { - "id": 2901, - "name": "Active", - "nameLocation": "1410:6:26", - "nodeType": "EnumValue", - "src": "1410:6:26" - }, - { - "id": 2902, - "name": "Closed", - "nameLocation": "1426:6:26", - "nodeType": "EnumValue", - "src": "1426:6:26" - } - ], - "name": "AllocationState", - "nameLocation": "1370:15:26", - "nodeType": "EnumDefinition", - "src": "1365:73:26" - }, - { - "anonymous": false, - "documentation": { - "id": 2904, - "nodeType": "StructuredDocumentation", - "src": "1444:330:26", - "text": " @dev Emitted when `indexer` close an allocation in `epoch` for `allocationID`.\n An amount of `tokens` get unallocated from `subgraphDeploymentID`.\n This event also emits the POI (proof of indexing) submitted by the indexer.\n `isPublic` is true if the sender was someone other than the indexer." - }, - "eventSelector": "f6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce1403", - "id": 2922, - "name": "AllocationClosed", - "nameLocation": "1785:16:26", - "nodeType": "EventDefinition", - "parameters": { - "id": 2921, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2906, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "1827:7:26", - "nodeType": "VariableDeclaration", - "scope": 2922, - "src": "1811:23:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2905, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1811:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2908, - "indexed": true, - "mutability": "mutable", - "name": "subgraphDeploymentID", - "nameLocation": "1860:20:26", - "nodeType": "VariableDeclaration", - "scope": 2922, - "src": "1844:36:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2907, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1844:7:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2910, - "indexed": false, - "mutability": "mutable", - "name": "epoch", - "nameLocation": "1898:5:26", - "nodeType": "VariableDeclaration", - "scope": 2922, - "src": "1890:13:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2909, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1890:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2912, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "1921:6:26", - "nodeType": "VariableDeclaration", - "scope": 2922, - "src": "1913:14:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2911, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1913:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2914, - "indexed": true, - "mutability": "mutable", - "name": "allocationID", - "nameLocation": "1953:12:26", - "nodeType": "VariableDeclaration", - "scope": 2922, - "src": "1937:28:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2913, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1937:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2916, - "indexed": false, - "mutability": "mutable", - "name": "sender", - "nameLocation": "1983:6:26", - "nodeType": "VariableDeclaration", - "scope": 2922, - "src": "1975:14:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2915, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1975:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2918, - "indexed": false, - "mutability": "mutable", - "name": "poi", - "nameLocation": "2007:3:26", - "nodeType": "VariableDeclaration", - "scope": 2922, - "src": "1999:11:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2917, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1999:7:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2920, - "indexed": false, - "mutability": "mutable", - "name": "isPublic", - "nameLocation": "2025:8:26", - "nodeType": "VariableDeclaration", - "scope": 2922, - "src": "2020:13:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2919, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2020:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1801:238:26" - }, - "src": "1779:261:26" - }, - { - "anonymous": false, - "documentation": { - "id": 2923, - "nodeType": "StructuredDocumentation", - "src": "2046:508:26", - "text": " @dev Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`.\n `epoch` is the protocol epoch the rebate was collected on\n The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees`\n is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt.\n `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected\n and sent to the delegation pool." - }, - "eventSelector": "f5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b", - "id": 2947, - "name": "RebateCollected", - "nameLocation": "2565:15:26", - "nodeType": "EventDefinition", - "parameters": { - "id": 2946, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2925, - "indexed": false, - "mutability": "mutable", - "name": "assetHolder", - "nameLocation": "2598:11:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2590:19:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2924, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2590:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2927, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "2635:7:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2619:23:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2926, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2619:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2929, - "indexed": true, - "mutability": "mutable", - "name": "subgraphDeploymentID", - "nameLocation": "2668:20:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2652:36:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2928, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2652:7:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2931, - "indexed": true, - "mutability": "mutable", - "name": "allocationID", - "nameLocation": "2714:12:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2698:28:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2930, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2698:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2933, - "indexed": false, - "mutability": "mutable", - "name": "epoch", - "nameLocation": "2744:5:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2736:13:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2932, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2736:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2935, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2767:6:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2759:14:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2934, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2759:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2937, - "indexed": false, - "mutability": "mutable", - "name": "protocolTax", - "nameLocation": "2791:11:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2783:19:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2936, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2783:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2939, - "indexed": false, - "mutability": "mutable", - "name": "curationFees", - "nameLocation": "2820:12:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2812:20:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2938, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2812:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2941, - "indexed": false, - "mutability": "mutable", - "name": "queryFees", - "nameLocation": "2850:9:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2842:17:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2940, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2842:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2943, - "indexed": false, - "mutability": "mutable", - "name": "queryRebates", - "nameLocation": "2877:12:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2869:20:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2942, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2869:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2945, - "indexed": false, - "mutability": "mutable", - "name": "delegationRewards", - "nameLocation": "2907:17:26", - "nodeType": "VariableDeclaration", - "scope": 2947, - "src": "2899:25:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2944, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2899:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2580:350:26" - }, - "src": "2559:372:26" - }, - { - "documentation": { - "id": 2948, - "nodeType": "StructuredDocumentation", - "src": "2937:381:26", - "text": " @notice Close an allocation and free the staked tokens.\n To be eligible for rewards a proof of indexing must be presented.\n Presenting a bad proof is subject to slashable condition.\n To opt out of rewards set _poi to 0x0\n @param allocationID The allocation identifier\n @param poi Proof of indexing submitted for the allocated period" - }, - "functionSelector": "44c32a61", - "id": 2955, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "closeAllocation", - "nameLocation": "3332:15:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2953, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2950, - "mutability": "mutable", - "name": "allocationID", - "nameLocation": "3356:12:26", - "nodeType": "VariableDeclaration", - "scope": 2955, - "src": "3348:20:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2949, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3348:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2952, - "mutability": "mutable", - "name": "poi", - "nameLocation": "3378:3:26", - "nodeType": "VariableDeclaration", - "scope": 2955, - "src": "3370:11:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2951, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3370:7:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3347:35:26" - }, - "returnParameters": { - "id": 2954, - "nodeType": "ParameterList", - "parameters": [], - "src": "3391:0:26" - }, - "scope": 3022, - "src": "3323:69:26", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2956, - "nodeType": "StructuredDocumentation", - "src": "3398:539:26", - "text": " @notice Collect query fees from state channels and assign them to an allocation.\n Funds received are only accepted from a valid sender.\n @dev To avoid reverting on the withdrawal from channel flow this function will:\n 1) Accept calls with zero tokens.\n 2) Accept calls after an allocation passed the dispute period, in that case, all\n the received tokens are burned.\n @param tokens Amount of tokens to collect\n @param allocationID Allocation where the tokens will be assigned" - }, - "functionSelector": "8d3c100a", - "id": 2963, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "collect", - "nameLocation": "3951:7:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2961, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2958, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "3967:6:26", - "nodeType": "VariableDeclaration", - "scope": 2963, - "src": "3959:14:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2957, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3959:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2960, - "mutability": "mutable", - "name": "allocationID", - "nameLocation": "3983:12:26", - "nodeType": "VariableDeclaration", - "scope": 2963, - "src": "3975:20:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2959, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3975:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3958:38:26" - }, - "returnParameters": { - "id": 2962, - "nodeType": "ParameterList", - "parameters": [], - "src": "4005:0:26" - }, - "scope": 3022, - "src": "3942:64:26", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2964, - "nodeType": "StructuredDocumentation", - "src": "4012:238:26", - "text": " @notice Return true if operator is allowed for indexer.\n @param operator Address of the operator\n @param indexer Address of the indexer\n @return True if operator is allowed for indexer, false otherwise" - }, - "functionSelector": "b6363cf2", - "id": 2973, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isOperator", - "nameLocation": "4264:10:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2969, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2966, - "mutability": "mutable", - "name": "operator", - "nameLocation": "4283:8:26", - "nodeType": "VariableDeclaration", - "scope": 2973, - "src": "4275:16:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2965, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4275:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2968, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "4301:7:26", - "nodeType": "VariableDeclaration", - "scope": 2973, - "src": "4293:15:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2967, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4293:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4274:35:26" - }, - "returnParameters": { - "id": 2972, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2971, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2973, - "src": "4333:4:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2970, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4333:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4332:6:26" - }, - "scope": 3022, - "src": "4255:84:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2974, - "nodeType": "StructuredDocumentation", - "src": "4345:169:26", - "text": " @notice Getter that returns if an indexer has any stake.\n @param indexer Address of the indexer\n @return True if indexer has staked tokens" - }, - "functionSelector": "e73e14bf", - "id": 2981, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "hasStake", - "nameLocation": "4528:8:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2977, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2976, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "4545:7:26", - "nodeType": "VariableDeclaration", - "scope": 2981, - "src": "4537:15:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2975, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4537:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4536:17:26" - }, - "returnParameters": { - "id": 2980, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2979, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2981, - "src": "4577:4:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2978, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4577:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4576:6:26" - }, - "scope": 3022, - "src": "4519:64:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2982, - "nodeType": "StructuredDocumentation", - "src": "4589:179:26", - "text": " @notice Get the total amount of tokens staked by the indexer.\n @param indexer Address of the indexer\n @return Amount of tokens staked by the indexer" - }, - "functionSelector": "1787e69f", - "id": 2989, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getIndexerStakedTokens", - "nameLocation": "4782:22:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2985, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2984, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "4813:7:26", - "nodeType": "VariableDeclaration", - "scope": 2989, - "src": "4805:15:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2983, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4805:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4804:17:26" - }, - "returnParameters": { - "id": 2988, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2987, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2989, - "src": "4845:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2986, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4845:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4844:9:26" - }, - "scope": 3022, - "src": "4773:81:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2990, - "nodeType": "StructuredDocumentation", - "src": "4860:151:26", - "text": " @notice Return the allocation by ID.\n @param allocationID Address used as allocation identifier\n @return Allocation data" - }, - "functionSelector": "0e022923", - "id": 2998, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAllocation", - "nameLocation": "5025:13:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2993, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2992, - "mutability": "mutable", - "name": "allocationID", - "nameLocation": "5047:12:26", - "nodeType": "VariableDeclaration", - "scope": 2998, - "src": "5039:20:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2991, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5039:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5038:22:26" - }, - "returnParameters": { - "id": 2997, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2996, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2998, - "src": "5084:17:26", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Allocation_$2898_memory_ptr", - "typeString": "struct IHorizonStakingExtension.Allocation" - }, - "typeName": { - "id": 2995, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2994, - "name": "Allocation", - "nameLocations": [ - "5084:10:26" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2898, - "src": "5084:10:26" - }, - "referencedDeclaration": 2898, - "src": "5084:10:26", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Allocation_$2898_storage_ptr", - "typeString": "struct IHorizonStakingExtension.Allocation" - } - }, - "visibility": "internal" - } - ], - "src": "5083:19:26" - }, - "scope": 3022, - "src": "5016:87:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2999, - "nodeType": "StructuredDocumentation", - "src": "5109:186:26", - "text": " @notice Return the current state of an allocation\n @param allocationID Allocation identifier\n @return AllocationState enum with the state of the allocation" - }, - "functionSelector": "98c657dc", - "id": 3007, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAllocationState", - "nameLocation": "5309:18:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3002, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3001, - "mutability": "mutable", - "name": "allocationID", - "nameLocation": "5336:12:26", - "nodeType": "VariableDeclaration", - "scope": 3007, - "src": "5328:20:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3000, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5328:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5327:22:26" - }, - "returnParameters": { - "id": 3006, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3005, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3007, - "src": "5373:15:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_AllocationState_$2903", - "typeString": "enum IHorizonStakingExtension.AllocationState" - }, - "typeName": { - "id": 3004, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3003, - "name": "AllocationState", - "nameLocations": [ - "5373:15:26" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2903, - "src": "5373:15:26" - }, - "referencedDeclaration": 2903, - "src": "5373:15:26", - "typeDescriptions": { - "typeIdentifier": "t_enum$_AllocationState_$2903", - "typeString": "enum IHorizonStakingExtension.AllocationState" - } - }, - "visibility": "internal" - } - ], - "src": "5372:17:26" - }, - "scope": 3022, - "src": "5300:90:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3008, - "nodeType": "StructuredDocumentation", - "src": "5396:190:26", - "text": " @notice Return if allocationID is used.\n @param allocationID Address used as signer by the indexer for an allocation\n @return True if allocationID already used" - }, - "functionSelector": "f1d60d66", - "id": 3015, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isAllocation", - "nameLocation": "5600:12:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3011, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3010, - "mutability": "mutable", - "name": "allocationID", - "nameLocation": "5621:12:26", - "nodeType": "VariableDeclaration", - "scope": 3015, - "src": "5613:20:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3009, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5613:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5612:22:26" - }, - "returnParameters": { - "id": 3014, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3013, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3015, - "src": "5658:4:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3012, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5658:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5657:6:26" - }, - "scope": 3022, - "src": "5591:73:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3016, - "nodeType": "StructuredDocumentation", - "src": "5670:103:26", - "text": " @notice Return the time in blocks to unstake\n @return Thawing period in blocks" - }, - "functionSelector": "c0641994", - "id": 3021, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "__DEPRECATED_getThawingPeriod", - "nameLocation": "5840:29:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3017, - "nodeType": "ParameterList", - "parameters": [], - "src": "5869:2:26" - }, - "returnParameters": { - "id": 3020, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3019, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3021, - "src": "5895:6:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3018, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "5895:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "5894:8:26" - }, - "scope": 3022, - "src": "5831:72:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 3023, - "src": "299:5606:26", - "usedErrors": [], - "usedEvents": [ - 2922, - 2947 - ] - } - ], - "src": "46:5860:26" - }, - "id": 26 - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol", - "exportedSymbols": { - "IGraphPayments": [ - 2211 - ], - "IHorizonStakingMain": [ - 3695 - ] - }, - "id": 3696, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3024, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:27" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "file": "../../interfaces/IGraphPayments.sol", - "id": 3026, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3696, - "sourceUnit": 2212, - "src": "71:69:27", - "symbolAliases": [ - { - "foreign": { - "id": 3025, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "80:14:27", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IHorizonStakingMain", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 3027, - "nodeType": "StructuredDocumentation", - "src": "142:604:27", - "text": " @title Inferface for the {HorizonStaking} contract.\n @notice Provides functions for managing stake, provisions, delegations, and slashing.\n @dev Note that this interface only includes the functions implemented by {HorizonStaking} contract,\n and not those implemented by {HorizonStakingExtension}.\n Do not use this interface to interface with the {HorizonStaking} contract, use {IHorizonStaking} for\n the complete interface.\n @dev Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision\n functions take `serviceProvider` and `verifier` addresses." - }, - "fullyImplemented": false, - "id": 3695, - "linearizedBaseContracts": [ - 3695 - ], - "name": "IHorizonStakingMain", - "nameLocation": "757:19:27", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 3028, - "nodeType": "StructuredDocumentation", - "src": "811:284:27", - "text": " @notice Emitted when a service provider unstakes tokens during the transition period.\n @param serviceProvider The address of the service provider\n @param tokens The amount of tokens unstaked\n @param until The block number until the stake is locked" - }, - "eventSelector": "a5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", - "id": 3036, - "name": "StakeLocked", - "nameLocation": "1106:11:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3035, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3030, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1134:15:27", - "nodeType": "VariableDeclaration", - "scope": 3036, - "src": "1118:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3029, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1118:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3032, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "1159:6:27", - "nodeType": "VariableDeclaration", - "scope": 3036, - "src": "1151:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3031, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1151:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3034, - "indexed": false, - "mutability": "mutable", - "name": "until", - "nameLocation": "1175:5:27", - "nodeType": "VariableDeclaration", - "scope": 3036, - "src": "1167:13:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3033, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1167:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1117:64:27" - }, - "src": "1100:82:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3037, - "nodeType": "StructuredDocumentation", - "src": "1188:223:27", - "text": " @notice Emitted when a service provider withdraws tokens during the transition period.\n @param serviceProvider The address of the service provider\n @param tokens The amount of tokens withdrawn" - }, - "eventSelector": "8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc", - "id": 3043, - "name": "StakeWithdrawn", - "nameLocation": "1422:14:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3042, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3039, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1453:15:27", - "nodeType": "VariableDeclaration", - "scope": 3043, - "src": "1437:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3038, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1437:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3041, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "1478:6:27", - "nodeType": "VariableDeclaration", - "scope": 3043, - "src": "1470:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3040, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1470:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1436:49:27" - }, - "src": "1416:70:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3044, - "nodeType": "StructuredDocumentation", - "src": "1524:537:27", - "text": " @notice Emitted when a service provider provisions staked tokens to a verifier.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens provisioned\n @param maxVerifierCut The maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\n @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision" - }, - "eventSelector": "88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc25", - "id": 3056, - "name": "ProvisionCreated", - "nameLocation": "2072:16:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3055, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3046, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2114:15:27", - "nodeType": "VariableDeclaration", - "scope": 3056, - "src": "2098:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3045, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2098:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3048, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "2155:8:27", - "nodeType": "VariableDeclaration", - "scope": 3056, - "src": "2139:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3047, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2139:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3050, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2181:6:27", - "nodeType": "VariableDeclaration", - "scope": 3056, - "src": "2173:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3049, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2173:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3052, - "indexed": false, - "mutability": "mutable", - "name": "maxVerifierCut", - "nameLocation": "2204:14:27", - "nodeType": "VariableDeclaration", - "scope": 3056, - "src": "2197:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3051, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2197:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3054, - "indexed": false, - "mutability": "mutable", - "name": "thawingPeriod", - "nameLocation": "2235:13:27", - "nodeType": "VariableDeclaration", - "scope": 3056, - "src": "2228:20:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3053, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "2228:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "2088:166:27" - }, - "src": "2066:189:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3057, - "nodeType": "StructuredDocumentation", - "src": "2261:274:27", - "text": " @notice Emitted whenever staked tokens are added to an existing provision\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens added to the provision" - }, - "eventSelector": "eaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc234745", - "id": 3065, - "name": "ProvisionIncreased", - "nameLocation": "2546:18:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3064, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3059, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2581:15:27", - "nodeType": "VariableDeclaration", - "scope": 3065, - "src": "2565:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3058, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2565:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3061, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "2614:8:27", - "nodeType": "VariableDeclaration", - "scope": 3065, - "src": "2598:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3060, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2598:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3063, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2632:6:27", - "nodeType": "VariableDeclaration", - "scope": 3065, - "src": "2624:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3062, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2624:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2564:75:27" - }, - "src": "2540:100:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3066, - "nodeType": "StructuredDocumentation", - "src": "2646:255:27", - "text": " @notice Emitted when a service provider thaws tokens from a provision.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens thawed" - }, - "eventSelector": "3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa", - "id": 3074, - "name": "ProvisionThawed", - "nameLocation": "2912:15:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3073, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3068, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "2944:15:27", - "nodeType": "VariableDeclaration", - "scope": 3074, - "src": "2928:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3067, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2928:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3070, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "2977:8:27", - "nodeType": "VariableDeclaration", - "scope": 3074, - "src": "2961:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3069, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2961:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3072, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2995:6:27", - "nodeType": "VariableDeclaration", - "scope": 3074, - "src": "2987:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3071, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2987:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2927:75:27" - }, - "src": "2906:97:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3075, - "nodeType": "StructuredDocumentation", - "src": "3009:258:27", - "text": " @notice Emitted when a service provider removes tokens from a provision.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens removed" - }, - "eventSelector": "9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d", - "id": 3083, - "name": "TokensDeprovisioned", - "nameLocation": "3278:19:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3082, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3077, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3314:15:27", - "nodeType": "VariableDeclaration", - "scope": 3083, - "src": "3298:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3076, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3298:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3079, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "3347:8:27", - "nodeType": "VariableDeclaration", - "scope": 3083, - "src": "3331:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3078, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3331:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3081, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "3365:6:27", - "nodeType": "VariableDeclaration", - "scope": 3083, - "src": "3357:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3080, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3357:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3297:75:27" - }, - "src": "3272:101:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3084, - "nodeType": "StructuredDocumentation", - "src": "3379:512:27", - "text": " @notice Emitted when a service provider stages a provision parameter update.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for\n themselves when slashing\n @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from\n the provision" - }, - "eventSelector": "e89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba", - "id": 3094, - "name": "ProvisionParametersStaged", - "nameLocation": "3902:25:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3093, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3086, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "3953:15:27", - "nodeType": "VariableDeclaration", - "scope": 3094, - "src": "3937:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3085, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3937:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3088, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "3994:8:27", - "nodeType": "VariableDeclaration", - "scope": 3094, - "src": "3978:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3087, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3978:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3090, - "indexed": false, - "mutability": "mutable", - "name": "maxVerifierCut", - "nameLocation": "4019:14:27", - "nodeType": "VariableDeclaration", - "scope": 3094, - "src": "4012:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3089, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "4012:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3092, - "indexed": false, - "mutability": "mutable", - "name": "thawingPeriod", - "nameLocation": "4050:13:27", - "nodeType": "VariableDeclaration", - "scope": 3094, - "src": "4043:20:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3091, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "4043:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "3927:142:27" - }, - "src": "3896:174:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3095, - "nodeType": "StructuredDocumentation", - "src": "4076:503:27", - "text": " @notice Emitted when a service provider accepts a staged provision parameter update.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param maxVerifierCut The new maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves\n when slashing\n @param thawingPeriod The new period in seconds that the tokens will be thawing before they can be removed from the provision" - }, - "eventSelector": "a4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6", - "id": 3105, - "name": "ProvisionParametersSet", - "nameLocation": "4590:22:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3104, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3097, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "4638:15:27", - "nodeType": "VariableDeclaration", - "scope": 3105, - "src": "4622:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3096, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4622:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3099, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "4679:8:27", - "nodeType": "VariableDeclaration", - "scope": 3105, - "src": "4663:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3098, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4663:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3101, - "indexed": false, - "mutability": "mutable", - "name": "maxVerifierCut", - "nameLocation": "4704:14:27", - "nodeType": "VariableDeclaration", - "scope": 3105, - "src": "4697:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3100, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "4697:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3103, - "indexed": false, - "mutability": "mutable", - "name": "thawingPeriod", - "nameLocation": "4735:13:27", - "nodeType": "VariableDeclaration", - "scope": 3105, - "src": "4728:20:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3102, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "4728:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "4612:142:27" - }, - "src": "4584:171:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3106, - "nodeType": "StructuredDocumentation", - "src": "4761:349:27", - "text": " @dev Emitted when an operator is allowed or denied by a service provider for a particular verifier\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param operator The address of the operator\n @param allowed Whether the operator is allowed or denied" - }, - "eventSelector": "aa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f", - "id": 3116, - "name": "OperatorSet", - "nameLocation": "5121:11:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3115, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3108, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "5158:15:27", - "nodeType": "VariableDeclaration", - "scope": 3116, - "src": "5142:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3107, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5142:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3110, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "5199:8:27", - "nodeType": "VariableDeclaration", - "scope": 3116, - "src": "5183:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3109, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5183:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3112, - "indexed": true, - "mutability": "mutable", - "name": "operator", - "nameLocation": "5233:8:27", - "nodeType": "VariableDeclaration", - "scope": 3116, - "src": "5217:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3111, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5217:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3114, - "indexed": false, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "5256:7:27", - "nodeType": "VariableDeclaration", - "scope": 3116, - "src": "5251:12:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3113, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5251:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5132:137:27" - }, - "src": "5115:155:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3117, - "nodeType": "StructuredDocumentation", - "src": "5307:305:27", - "text": " @notice Emitted when a provision is slashed by a verifier.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens slashed (note this only represents service provider's slashed stake)" - }, - "eventSelector": "e7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3", - "id": 3125, - "name": "ProvisionSlashed", - "nameLocation": "5623:16:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3124, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3119, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "5656:15:27", - "nodeType": "VariableDeclaration", - "scope": 3125, - "src": "5640:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3118, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5640:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3121, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "5689:8:27", - "nodeType": "VariableDeclaration", - "scope": 3125, - "src": "5673:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3120, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5673:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3123, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "5707:6:27", - "nodeType": "VariableDeclaration", - "scope": 3125, - "src": "5699:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3122, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5699:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5639:75:27" - }, - "src": "5617:98:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3126, - "nodeType": "StructuredDocumentation", - "src": "5721:310:27", - "text": " @notice Emitted when a delegation pool is slashed by a verifier.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens slashed (note this only represents delegation pool's slashed stake)" - }, - "eventSelector": "c5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b771", - "id": 3134, - "name": "DelegationSlashed", - "nameLocation": "6042:17:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3133, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3128, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "6076:15:27", - "nodeType": "VariableDeclaration", - "scope": 3134, - "src": "6060:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3127, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6060:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3130, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "6109:8:27", - "nodeType": "VariableDeclaration", - "scope": 3134, - "src": "6093:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3129, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6093:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3132, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "6127:6:27", - "nodeType": "VariableDeclaration", - "scope": 3134, - "src": "6119:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3131, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6119:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6059:75:27" - }, - "src": "6036:99:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3135, - "nodeType": "StructuredDocumentation", - "src": "6141:441:27", - "text": " @notice Emitted when a delegation pool would have been slashed by a verifier, but the slashing was skipped\n because delegation slashing global parameter is not enabled.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens that would have been slashed (note this only represents delegation pool's slashed stake)" - }, - "eventSelector": "dce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b24", - "id": 3143, - "name": "DelegationSlashingSkipped", - "nameLocation": "6593:25:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3142, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3137, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "6635:15:27", - "nodeType": "VariableDeclaration", - "scope": 3143, - "src": "6619:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3136, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6619:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3139, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "6668:8:27", - "nodeType": "VariableDeclaration", - "scope": 3143, - "src": "6652:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3138, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6652:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3141, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "6686:6:27", - "nodeType": "VariableDeclaration", - "scope": 3143, - "src": "6678:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3140, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6678:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6618:75:27" - }, - "src": "6587:107:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3144, - "nodeType": "StructuredDocumentation", - "src": "6700:357:27", - "text": " @notice Emitted when the verifier cut is sent to the verifier after slashing a provision.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param destination The address where the verifier cut is sent\n @param tokens The amount of tokens sent to the verifier" - }, - "eventSelector": "95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d582", - "id": 3154, - "name": "VerifierTokensSent", - "nameLocation": "7068:18:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3153, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3146, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "7112:15:27", - "nodeType": "VariableDeclaration", - "scope": 3154, - "src": "7096:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3145, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7096:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3148, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "7153:8:27", - "nodeType": "VariableDeclaration", - "scope": 3154, - "src": "7137:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3147, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7137:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3150, - "indexed": true, - "mutability": "mutable", - "name": "destination", - "nameLocation": "7187:11:27", - "nodeType": "VariableDeclaration", - "scope": 3154, - "src": "7171:27:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3149, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7171:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3152, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "7216:6:27", - "nodeType": "VariableDeclaration", - "scope": 3154, - "src": "7208:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3151, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7208:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7086:142:27" - }, - "src": "7062:167:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3155, - "nodeType": "StructuredDocumentation", - "src": "7268:298:27", - "text": " @notice Emitted when tokens are delegated to a provision.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param delegator The address of the delegator\n @param tokens The amount of tokens delegated" - }, - "eventSelector": "eaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf4", - "id": 3165, - "name": "TokensDelegated", - "nameLocation": "7577:15:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3164, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3157, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "7618:15:27", - "nodeType": "VariableDeclaration", - "scope": 3165, - "src": "7602:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3156, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7602:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3159, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "7659:8:27", - "nodeType": "VariableDeclaration", - "scope": 3165, - "src": "7643:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3158, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7643:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3161, - "indexed": true, - "mutability": "mutable", - "name": "delegator", - "nameLocation": "7693:9:27", - "nodeType": "VariableDeclaration", - "scope": 3165, - "src": "7677:25:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3160, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7677:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3163, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "7720:6:27", - "nodeType": "VariableDeclaration", - "scope": 3165, - "src": "7712:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3162, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7712:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7592:140:27" - }, - "src": "7571:162:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3166, - "nodeType": "StructuredDocumentation", - "src": "7739:343:27", - "text": " @notice Emitted when a delegator undelegates tokens from a provision and starts\n thawing them.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param delegator The address of the delegator\n @param tokens The amount of tokens undelegated" - }, - "eventSelector": "50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa", - "id": 3176, - "name": "TokensUndelegated", - "nameLocation": "8093:17:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3175, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3168, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "8136:15:27", - "nodeType": "VariableDeclaration", - "scope": 3176, - "src": "8120:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3167, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8120:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3170, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "8177:8:27", - "nodeType": "VariableDeclaration", - "scope": 3176, - "src": "8161:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3169, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8161:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3172, - "indexed": true, - "mutability": "mutable", - "name": "delegator", - "nameLocation": "8211:9:27", - "nodeType": "VariableDeclaration", - "scope": 3176, - "src": "8195:25:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3171, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8195:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3174, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "8238:6:27", - "nodeType": "VariableDeclaration", - "scope": 3176, - "src": "8230:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3173, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8230:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8110:140:27" - }, - "src": "8087:164:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3177, - "nodeType": "StructuredDocumentation", - "src": "8257:322:27", - "text": " @notice Emitted when a delegator withdraws tokens from a provision after thawing.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param delegator The address of the delegator\n @param tokens The amount of tokens withdrawn" - }, - "eventSelector": "305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e", - "id": 3187, - "name": "DelegatedTokensWithdrawn", - "nameLocation": "8590:24:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3186, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3179, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "8640:15:27", - "nodeType": "VariableDeclaration", - "scope": 3187, - "src": "8624:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3178, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8624:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3181, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "8681:8:27", - "nodeType": "VariableDeclaration", - "scope": 3187, - "src": "8665:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3180, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8665:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3183, - "indexed": true, - "mutability": "mutable", - "name": "delegator", - "nameLocation": "8715:9:27", - "nodeType": "VariableDeclaration", - "scope": 3187, - "src": "8699:25:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3182, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8699:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3185, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "8742:6:27", - "nodeType": "VariableDeclaration", - "scope": 3187, - "src": "8734:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3184, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8734:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8614:140:27" - }, - "src": "8584:171:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3188, - "nodeType": "StructuredDocumentation", - "src": "8761:257:27", - "text": " @notice Emitted when tokens are added to a delegation pool's reserve.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param tokens The amount of tokens withdrawn" - }, - "eventSelector": "673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a1511530", - "id": 3196, - "name": "TokensToDelegationPoolAdded", - "nameLocation": "9029:27:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3195, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3190, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "9073:15:27", - "nodeType": "VariableDeclaration", - "scope": 3196, - "src": "9057:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3189, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9057:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3192, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "9106:8:27", - "nodeType": "VariableDeclaration", - "scope": 3196, - "src": "9090:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3191, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9090:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3194, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "9124:6:27", - "nodeType": "VariableDeclaration", - "scope": 3196, - "src": "9116:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3193, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9116:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9056:75:27" - }, - "src": "9023:109:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3197, - "nodeType": "StructuredDocumentation", - "src": "9138:365:27", - "text": " @notice Emitted when a service provider sets delegation fee cuts for a verifier.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments}\n @param feeCut The fee cut set, in PPM" - }, - "eventSelector": "3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c5220", - "id": 3208, - "name": "DelegationFeeCutSet", - "nameLocation": "9514:19:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3207, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3199, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "9559:15:27", - "nodeType": "VariableDeclaration", - "scope": 3208, - "src": "9543:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3198, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9543:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3201, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "9600:8:27", - "nodeType": "VariableDeclaration", - "scope": 3208, - "src": "9584:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3200, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9584:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3204, - "indexed": true, - "mutability": "mutable", - "name": "paymentType", - "nameLocation": "9654:11:27", - "nodeType": "VariableDeclaration", - "scope": 3208, - "src": "9618:47:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 3203, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3202, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "9618:14:27", - "9633:12:27" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "9618:27:27" - }, - "referencedDeclaration": 2166, - "src": "9618:27:27", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3206, - "indexed": false, - "mutability": "mutable", - "name": "feeCut", - "nameLocation": "9683:6:27", - "nodeType": "VariableDeclaration", - "scope": 3208, - "src": "9675:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3205, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9675:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9533:162:27" - }, - "src": "9508:188:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3209, - "nodeType": "StructuredDocumentation", - "src": "9732:535:27", - "text": " @notice Emitted when a thaw request is created.\n @dev Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param owner The address of the owner of the thaw request.\n @param shares The amount of shares being thawed\n @param thawingUntil The timestamp until the stake is thawed\n @param thawRequestId The ID of the thaw request" - }, - "eventSelector": "434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea5", - "id": 3223, - "name": "ThawRequestCreated", - "nameLocation": "10278:18:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3222, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3211, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "10322:15:27", - "nodeType": "VariableDeclaration", - "scope": 3223, - "src": "10306:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3210, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10306:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3213, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "10363:8:27", - "nodeType": "VariableDeclaration", - "scope": 3223, - "src": "10347:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3212, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10347:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3215, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "10397:5:27", - "nodeType": "VariableDeclaration", - "scope": 3223, - "src": "10381:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3214, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10381:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3217, - "indexed": false, - "mutability": "mutable", - "name": "shares", - "nameLocation": "10420:6:27", - "nodeType": "VariableDeclaration", - "scope": 3223, - "src": "10412:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3216, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10412:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3219, - "indexed": false, - "mutability": "mutable", - "name": "thawingUntil", - "nameLocation": "10443:12:27", - "nodeType": "VariableDeclaration", - "scope": 3223, - "src": "10436:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3218, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "10436:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3221, - "indexed": false, - "mutability": "mutable", - "name": "thawRequestId", - "nameLocation": "10473:13:27", - "nodeType": "VariableDeclaration", - "scope": 3223, - "src": "10465:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3220, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10465:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "10296:196:27" - }, - "src": "10272:221:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3224, - "nodeType": "StructuredDocumentation", - "src": "10499:418:27", - "text": " @notice Emitted when a thaw request is fulfilled, meaning the stake is released.\n @param thawRequestId The ID of the thaw request\n @param tokens The amount of tokens being released\n @param shares The amount of shares being released\n @param thawingUntil The timestamp until the stake has thawed\n @param valid Whether the thaw request was valid at the time of fulfillment" - }, - "eventSelector": "be7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb7", - "id": 3236, - "name": "ThawRequestFulfilled", - "nameLocation": "10928:20:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3235, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3226, - "indexed": true, - "mutability": "mutable", - "name": "thawRequestId", - "nameLocation": "10974:13:27", - "nodeType": "VariableDeclaration", - "scope": 3236, - "src": "10958:29:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3225, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10958:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3228, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "11005:6:27", - "nodeType": "VariableDeclaration", - "scope": 3236, - "src": "10997:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3227, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10997:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3230, - "indexed": false, - "mutability": "mutable", - "name": "shares", - "nameLocation": "11029:6:27", - "nodeType": "VariableDeclaration", - "scope": 3236, - "src": "11021:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3229, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11021:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3232, - "indexed": false, - "mutability": "mutable", - "name": "thawingUntil", - "nameLocation": "11052:12:27", - "nodeType": "VariableDeclaration", - "scope": 3236, - "src": "11045:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3231, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "11045:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3234, - "indexed": false, - "mutability": "mutable", - "name": "valid", - "nameLocation": "11079:5:27", - "nodeType": "VariableDeclaration", - "scope": 3236, - "src": "11074:10:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3233, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "11074:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "10948:142:27" - }, - "src": "10922:169:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3237, - "nodeType": "StructuredDocumentation", - "src": "11097:400:27", - "text": " @notice Emitted when a series of thaw requests are fulfilled.\n @param serviceProvider The address of the service provider\n @param verifier The address of the verifier\n @param owner The address of the owner of the thaw requests\n @param thawRequestsFulfilled The number of thaw requests fulfilled\n @param tokens The total amount of tokens being released" - }, - "eventSelector": "9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d5", - "id": 3249, - "name": "ThawRequestsFulfilled", - "nameLocation": "11508:21:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3248, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3239, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "11555:15:27", - "nodeType": "VariableDeclaration", - "scope": 3249, - "src": "11539:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3238, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11539:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3241, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "11596:8:27", - "nodeType": "VariableDeclaration", - "scope": 3249, - "src": "11580:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3240, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11580:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3243, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "11630:5:27", - "nodeType": "VariableDeclaration", - "scope": 3249, - "src": "11614:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3242, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11614:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3245, - "indexed": false, - "mutability": "mutable", - "name": "thawRequestsFulfilled", - "nameLocation": "11653:21:27", - "nodeType": "VariableDeclaration", - "scope": 3249, - "src": "11645:29:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3244, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11645:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3247, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "11692:6:27", - "nodeType": "VariableDeclaration", - "scope": 3249, - "src": "11684:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3246, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11684:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11529:175:27" - }, - "src": "11502:203:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3250, - "nodeType": "StructuredDocumentation", - "src": "11744:166:27", - "text": " @notice Emitted when the global maximum thawing period allowed for provisions is set.\n @param maxThawingPeriod The new maximum thawing period" - }, - "eventSelector": "e8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f", - "id": 3254, - "name": "MaxThawingPeriodSet", - "nameLocation": "11921:19:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3253, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3252, - "indexed": false, - "mutability": "mutable", - "name": "maxThawingPeriod", - "nameLocation": "11948:16:27", - "nodeType": "VariableDeclaration", - "scope": 3254, - "src": "11941:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3251, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "11941:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "11940:25:27" - }, - "src": "11915:51:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3255, - "nodeType": "StructuredDocumentation", - "src": "11972:228:27", - "text": " @notice Emitted when a verifier is allowed or disallowed to be used for locked provisions.\n @param verifier The address of the verifier\n @param allowed Whether the verifier is allowed or disallowed" - }, - "eventSelector": "4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb", - "id": 3261, - "name": "AllowedLockedVerifierSet", - "nameLocation": "12211:24:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3260, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3257, - "indexed": true, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "12252:8:27", - "nodeType": "VariableDeclaration", - "scope": 3261, - "src": "12236:24:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3256, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12236:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3259, - "indexed": false, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "12267:7:27", - "nodeType": "VariableDeclaration", - "scope": 3261, - "src": "12262:12:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3258, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "12262:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "12235:40:27" - }, - "src": "12205:71:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3262, - "nodeType": "StructuredDocumentation", - "src": "12282:145:27", - "text": " @notice Emitted when the legacy global thawing period is set to zero.\n @dev This marks the end of the transition period." - }, - "eventSelector": "93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d109", - "id": 3264, - "name": "ThawingPeriodCleared", - "nameLocation": "12438:20:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3263, - "nodeType": "ParameterList", - "parameters": [], - "src": "12458:2:27" - }, - "src": "12432:29:27" - }, - { - "anonymous": false, - "documentation": { - "id": 3265, - "nodeType": "StructuredDocumentation", - "src": "12467:157:27", - "text": " @notice Emitted when the delegation slashing global flag is set.\n @param enabled Whether delegation slashing is enabled or disabled." - }, - "eventSelector": "78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194", - "id": 3269, - "name": "DelegationSlashingEnabled", - "nameLocation": "12635:25:27", - "nodeType": "EventDefinition", - "parameters": { - "id": 3268, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3267, - "indexed": false, - "mutability": "mutable", - "name": "enabled", - "nameLocation": "12666:7:27", - "nodeType": "VariableDeclaration", - "scope": 3269, - "src": "12661:12:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3266, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "12661:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "12660:14:27" - }, - "src": "12629:46:27" - }, - { - "documentation": { - "id": 3270, - "nodeType": "StructuredDocumentation", - "src": "12707:84:27", - "text": " @notice Thrown when operating a zero token amount is not allowed." - }, - "errorSelector": "14549cb6", - "id": 3272, - "name": "HorizonStakingInvalidZeroTokens", - "nameLocation": "12802:31:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3271, - "nodeType": "ParameterList", - "parameters": [], - "src": "12833:2:27" - }, - "src": "12796:40:27" - }, - { - "documentation": { - "id": 3273, - "nodeType": "StructuredDocumentation", - "src": "12842:207:27", - "text": " @notice Thrown when a minimum token amount is required to operate but it's not met.\n @param tokens The actual token amount\n @param minRequired The minimum required token amount" - }, - "errorSelector": "b0f57356", - "id": 3279, - "name": "HorizonStakingInsufficientTokens", - "nameLocation": "13060:32:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3278, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3275, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "13101:6:27", - "nodeType": "VariableDeclaration", - "scope": 3279, - "src": "13093:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3274, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13093:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3277, - "mutability": "mutable", - "name": "minRequired", - "nameLocation": "13117:11:27", - "nodeType": "VariableDeclaration", - "scope": 3279, - "src": "13109:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3276, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13109:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13092:37:27" - }, - "src": "13054:76:27" - }, - { - "documentation": { - "id": 3280, - "nodeType": "StructuredDocumentation", - "src": "13136:201:27", - "text": " @notice Thrown when the amount of tokens exceeds the maximum allowed to operate.\n @param tokens The actual token amount\n @param maxTokens The maximum allowed token amount" - }, - "errorSelector": "bd45355c", - "id": 3286, - "name": "HorizonStakingTooManyTokens", - "nameLocation": "13348:27:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3285, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3282, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "13384:6:27", - "nodeType": "VariableDeclaration", - "scope": 3286, - "src": "13376:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3281, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13376:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3284, - "mutability": "mutable", - "name": "maxTokens", - "nameLocation": "13400:9:27", - "nodeType": "VariableDeclaration", - "scope": 3286, - "src": "13392:17:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3283, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13392:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13375:35:27" - }, - "src": "13342:69:27" - }, - { - "documentation": { - "id": 3287, - "nodeType": "StructuredDocumentation", - "src": "13449:201:27", - "text": " @notice Thrown when attempting to operate with a provision that does not exist.\n @param serviceProvider The service provider address\n @param verifier The verifier address" - }, - "errorSelector": "6159d41a", - "id": 3293, - "name": "HorizonStakingInvalidProvision", - "nameLocation": "13661:30:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3292, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3289, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "13700:15:27", - "nodeType": "VariableDeclaration", - "scope": 3293, - "src": "13692:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3288, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13692:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3291, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "13725:8:27", - "nodeType": "VariableDeclaration", - "scope": 3293, - "src": "13717:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3290, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13717:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "13691:43:27" - }, - "src": "13655:80:27" - }, - { - "documentation": { - "id": 3294, - "nodeType": "StructuredDocumentation", - "src": "13741:237:27", - "text": " @notice Thrown when the caller is not authorized to operate on a provision.\n @param caller The caller address\n @param serviceProvider The service provider address\n @param verifier The verifier address" - }, - "errorSelector": "c76b97b0", - "id": 3302, - "name": "HorizonStakingNotAuthorized", - "nameLocation": "13989:27:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3301, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3296, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "14025:15:27", - "nodeType": "VariableDeclaration", - "scope": 3302, - "src": "14017:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3295, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14017:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3298, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "14050:8:27", - "nodeType": "VariableDeclaration", - "scope": 3302, - "src": "14042:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3297, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14042:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3300, - "mutability": "mutable", - "name": "caller", - "nameLocation": "14068:6:27", - "nodeType": "VariableDeclaration", - "scope": 3302, - "src": "14060:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3299, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14060:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "14016:59:27" - }, - "src": "13983:93:27" - }, - { - "documentation": { - "id": 3303, - "nodeType": "StructuredDocumentation", - "src": "14082:163:27", - "text": " @notice Thrown when attempting to create a provision with an invalid maximum verifier cut.\n @param maxVerifierCut The maximum verifier cut" - }, - "errorSelector": "29bff5f5", - "id": 3307, - "name": "HorizonStakingInvalidMaxVerifierCut", - "nameLocation": "14256:35:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3306, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3305, - "mutability": "mutable", - "name": "maxVerifierCut", - "nameLocation": "14299:14:27", - "nodeType": "VariableDeclaration", - "scope": 3307, - "src": "14292:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3304, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "14292:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "14291:23:27" - }, - "src": "14250:65:27" - }, - { - "documentation": { - "id": 3308, - "nodeType": "StructuredDocumentation", - "src": "14321:217:27", - "text": " @notice Thrown when attempting to create a provision with an invalid thawing period.\n @param thawingPeriod The thawing period\n @param maxThawingPeriod The maximum `thawingPeriod` allowed" - }, - "errorSelector": "ee5602e1", - "id": 3314, - "name": "HorizonStakingInvalidThawingPeriod", - "nameLocation": "14549:34:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3313, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3310, - "mutability": "mutable", - "name": "thawingPeriod", - "nameLocation": "14591:13:27", - "nodeType": "VariableDeclaration", - "scope": 3314, - "src": "14584:20:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3309, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "14584:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3312, - "mutability": "mutable", - "name": "maxThawingPeriod", - "nameLocation": "14613:16:27", - "nodeType": "VariableDeclaration", - "scope": 3314, - "src": "14606:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3311, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "14606:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "14583:47:27" - }, - "src": "14543:88:27" - }, - { - "documentation": { - "id": 3315, - "nodeType": "StructuredDocumentation", - "src": "14637:120:27", - "text": " @notice Thrown when attempting to create a provision for a data service that already has a provision." - }, - "errorSelector": "56a8581a", - "id": 3317, - "name": "HorizonStakingProvisionAlreadyExists", - "nameLocation": "14768:36:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3316, - "nodeType": "ParameterList", - "parameters": [], - "src": "14804:2:27" - }, - "src": "14762:45:27" - }, - { - "documentation": { - "id": 3318, - "nodeType": "StructuredDocumentation", - "src": "14841:202:27", - "text": " @notice Thrown when the service provider has insufficient idle stake to operate.\n @param tokens The actual token amount\n @param minTokens The minimum required token amount" - }, - "errorSelector": "ccaf28a9", - "id": 3324, - "name": "HorizonStakingInsufficientIdleStake", - "nameLocation": "15054:35:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3323, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3320, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "15098:6:27", - "nodeType": "VariableDeclaration", - "scope": 3324, - "src": "15090:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3319, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15090:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3322, - "mutability": "mutable", - "name": "minTokens", - "nameLocation": "15114:9:27", - "nodeType": "VariableDeclaration", - "scope": 3324, - "src": "15106:17:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3321, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15106:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15089:35:27" - }, - "src": "15048:77:27" - }, - { - "documentation": { - "id": 3325, - "nodeType": "StructuredDocumentation", - "src": "15131:265:27", - "text": " @notice Thrown during the transition period when the service provider has insufficient stake to\n cover their existing legacy allocations.\n @param tokens The actual token amount\n @param minTokens The minimum required token amount" - }, - "errorSelector": "5dd9b9c7", - "id": 3331, - "name": "HorizonStakingInsufficientStakeForLegacyAllocations", - "nameLocation": "15407:51:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3330, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3327, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "15467:6:27", - "nodeType": "VariableDeclaration", - "scope": 3331, - "src": "15459:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3326, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15459:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3329, - "mutability": "mutable", - "name": "minTokens", - "nameLocation": "15483:9:27", - "nodeType": "VariableDeclaration", - "scope": 3331, - "src": "15475:17:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3328, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15475:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15458:35:27" - }, - "src": "15401:93:27" - }, - { - "documentation": { - "id": 3332, - "nodeType": "StructuredDocumentation", - "src": "15533:199:27", - "text": " @notice Thrown when delegation shares obtained are below the expected amount.\n @param shares The actual share amount\n @param minShares The minimum required share amount" - }, - "errorSelector": "5d88e8d1", - "id": 3338, - "name": "HorizonStakingSlippageProtection", - "nameLocation": "15743:32:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3337, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3334, - "mutability": "mutable", - "name": "shares", - "nameLocation": "15784:6:27", - "nodeType": "VariableDeclaration", - "scope": 3338, - "src": "15776:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3333, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15776:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3336, - "mutability": "mutable", - "name": "minShares", - "nameLocation": "15800:9:27", - "nodeType": "VariableDeclaration", - "scope": 3338, - "src": "15792:17:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3335, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15792:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15775:35:27" - }, - "src": "15737:74:27" - }, - { - "documentation": { - "id": 3339, - "nodeType": "StructuredDocumentation", - "src": "15817:84:27", - "text": " @notice Thrown when operating a zero share amount is not allowed." - }, - "errorSelector": "7318ad99", - "id": 3341, - "name": "HorizonStakingInvalidZeroShares", - "nameLocation": "15912:31:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3340, - "nodeType": "ParameterList", - "parameters": [], - "src": "15943:2:27" - }, - "src": "15906:40:27" - }, - { - "documentation": { - "id": 3342, - "nodeType": "StructuredDocumentation", - "src": "15952:205:27", - "text": " @notice Thrown when a minimum share amount is required to operate but it's not met.\n @param shares The actual share amount\n @param minShares The minimum required share amount" - }, - "errorSelector": "ab997935", - "id": 3348, - "name": "HorizonStakingInsufficientShares", - "nameLocation": "16168:32:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3347, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3344, - "mutability": "mutable", - "name": "shares", - "nameLocation": "16209:6:27", - "nodeType": "VariableDeclaration", - "scope": 3348, - "src": "16201:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3343, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16201:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3346, - "mutability": "mutable", - "name": "minShares", - "nameLocation": "16225:9:27", - "nodeType": "VariableDeclaration", - "scope": 3348, - "src": "16217:17:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3345, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16217:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "16200:35:27" - }, - "src": "16162:74:27" - }, - { - "documentation": { - "id": 3349, - "nodeType": "StructuredDocumentation", - "src": "16242:211:27", - "text": " @notice Thrown when as a result of slashing delegation pool has no tokens but has shares.\n @param serviceProvider The service provider address\n @param verifier The verifier address" - }, - "errorSelector": "cc276f78", - "id": 3355, - "name": "HorizonStakingInvalidDelegationPoolState", - "nameLocation": "16464:40:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3354, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3351, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "16513:15:27", - "nodeType": "VariableDeclaration", - "scope": 3355, - "src": "16505:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3350, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16505:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3353, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "16538:8:27", - "nodeType": "VariableDeclaration", - "scope": 3355, - "src": "16530:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3352, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16530:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "16504:43:27" - }, - "src": "16458:90:27" - }, - { - "documentation": { - "id": 3356, - "nodeType": "StructuredDocumentation", - "src": "16554:207:27", - "text": " @notice Thrown when attempting to operate with a delegation pool that does not exist.\n @param serviceProvider The service provider address\n @param verifier The verifier address" - }, - "errorSelector": "b6a70b3b", - "id": 3362, - "name": "HorizonStakingInvalidDelegationPool", - "nameLocation": "16772:35:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3361, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3358, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "16816:15:27", - "nodeType": "VariableDeclaration", - "scope": 3362, - "src": "16808:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3357, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16808:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3360, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "16841:8:27", - "nodeType": "VariableDeclaration", - "scope": 3362, - "src": "16833:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3359, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16833:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "16807:43:27" - }, - "src": "16766:85:27" - }, - { - "documentation": { - "id": 3363, - "nodeType": "StructuredDocumentation", - "src": "16857:108:27", - "text": " @notice Thrown when attempting to undelegate with a beneficiary that is the zero address." - }, - "errorSelector": "f6ed23b4", - "id": 3365, - "name": "HorizonStakingInvalidBeneficiaryZeroAddress", - "nameLocation": "16976:43:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3364, - "nodeType": "ParameterList", - "parameters": [], - "src": "17019:2:27" - }, - "src": "16970:52:27" - }, - { - "documentation": { - "id": 3366, - "nodeType": "StructuredDocumentation", - "src": "17028:113:27", - "text": " @notice Thrown when attempting to redelegate with a serivce provider that is the zero address." - }, - "errorSelector": "88d1f59c", - "id": 3368, - "name": "HorizonStakingInvalidServiceProviderZeroAddress", - "nameLocation": "17152:47:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3367, - "nodeType": "ParameterList", - "parameters": [], - "src": "17199:2:27" - }, - "src": "17146:56:27" - }, - { - "documentation": { - "id": 3369, - "nodeType": "StructuredDocumentation", - "src": "17208:105:27", - "text": " @notice Thrown when attempting to redelegate with a verifier that is the zero address." - }, - "errorSelector": "a9626059", - "id": 3371, - "name": "HorizonStakingInvalidVerifierZeroAddress", - "nameLocation": "17324:40:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3370, - "nodeType": "ParameterList", - "parameters": [], - "src": "17364:2:27" - }, - "src": "17318:49:27" - }, - { - "errorSelector": "3f199628", - "id": 3373, - "name": "HorizonStakingNothingThawing", - "nameLocation": "17415:28:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3372, - "nodeType": "ParameterList", - "parameters": [], - "src": "17443:2:27" - }, - "src": "17409:37:27" - }, - { - "errorSelector": "66570a56", - "id": 3375, - "name": "HorizonStakingTooManyThawRequests", - "nameLocation": "17457:33:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3374, - "nodeType": "ParameterList", - "parameters": [], - "src": "17490:2:27" - }, - "src": "17451:42:27" - }, - { - "documentation": { - "id": 3376, - "nodeType": "StructuredDocumentation", - "src": "17525:329:27", - "text": " @notice Thrown during the transition period when attempting to withdraw tokens that are still thawing.\n @dev Note this thawing refers to the global thawing period applied to legacy allocated tokens,\n it does not refer to thaw requests.\n @param until The block number until the stake is locked" - }, - "errorSelector": "e91178d8", - "id": 3380, - "name": "HorizonStakingStillThawing", - "nameLocation": "17865:26:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3379, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3378, - "mutability": "mutable", - "name": "until", - "nameLocation": "17900:5:27", - "nodeType": "VariableDeclaration", - "scope": 3380, - "src": "17892:13:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3377, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17892:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "17891:15:27" - }, - "src": "17859:48:27" - }, - { - "documentation": { - "id": 3381, - "nodeType": "StructuredDocumentation", - "src": "17913:167:27", - "text": " @notice Thrown when a service provider attempts to operate on verifiers that are not allowed.\n @dev Only applies to stake from locked wallets." - }, - "errorSelector": "00a483dc", - "id": 3385, - "name": "HorizonStakingVerifierNotAllowed", - "nameLocation": "18091:32:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3384, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3383, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "18132:8:27", - "nodeType": "VariableDeclaration", - "scope": 3385, - "src": "18124:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3382, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18124:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "18123:18:27" - }, - "src": "18085:57:27" - }, - { - "documentation": { - "id": 3386, - "nodeType": "StructuredDocumentation", - "src": "18148:103:27", - "text": " @notice Thrown when a service provider attempts to change their own operator access." - }, - "errorSelector": "01230653", - "id": 3388, - "name": "HorizonStakingCallerIsServiceProvider", - "nameLocation": "18262:37:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3387, - "nodeType": "ParameterList", - "parameters": [], - "src": "18299:2:27" - }, - "src": "18256:46:27" - }, - { - "documentation": { - "id": 3389, - "nodeType": "StructuredDocumentation", - "src": "18308:125:27", - "text": " @notice Thrown when trying to set a delegation fee cut that is not valid.\n @param feeCut The fee cut" - }, - "errorSelector": "54125404", - "id": 3393, - "name": "HorizonStakingInvalidDelegationFeeCut", - "nameLocation": "18444:37:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3392, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3391, - "mutability": "mutable", - "name": "feeCut", - "nameLocation": "18490:6:27", - "nodeType": "VariableDeclaration", - "scope": 3393, - "src": "18482:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3390, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18482:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "18481:16:27" - }, - "src": "18438:60:27" - }, - { - "documentation": { - "id": 3394, - "nodeType": "StructuredDocumentation", - "src": "18528:366:27", - "text": " @notice Deposit tokens on the staking contract.\n @dev Pulls tokens from the caller.\n Requirements:\n - `_tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n Emits a {StakeDeposited} event.\n @param tokens Amount of tokens to stake" - }, - "functionSelector": "a694fc3a", - "id": 3399, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "stake", - "nameLocation": "18908:5:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3397, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3396, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "18922:6:27", - "nodeType": "VariableDeclaration", - "scope": 3399, - "src": "18914:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3395, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18914:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "18913:16:27" - }, - "returnParameters": { - "id": 3398, - "nodeType": "ParameterList", - "parameters": [], - "src": "18938:0:27" - }, - "scope": 3695, - "src": "18899:40:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3400, - "nodeType": "StructuredDocumentation", - "src": "18945:469:27", - "text": " @notice Deposit tokens on the service provider stake, on behalf of the service provider.\n @dev Pulls tokens from the caller.\n Requirements:\n - `_tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n Emits a {StakeDeposited} event.\n @param serviceProvider Address of the service provider\n @param tokens Amount of tokens to stake" - }, - "functionSelector": "a2a31722", - "id": 3407, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "stakeTo", - "nameLocation": "19428:7:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3405, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3402, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "19444:15:27", - "nodeType": "VariableDeclaration", - "scope": 3407, - "src": "19436:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3401, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19436:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3404, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "19469:6:27", - "nodeType": "VariableDeclaration", - "scope": 3407, - "src": "19461:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3403, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19461:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "19435:41:27" - }, - "returnParameters": { - "id": 3406, - "nodeType": "ParameterList", - "parameters": [], - "src": "19485:0:27" - }, - "scope": 3695, - "src": "19419:67:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3408, - "nodeType": "StructuredDocumentation", - "src": "19586:624:27", - "text": " @notice Deposit tokens on the service provider stake, on behalf of the service provider,\n provisioned to a specific verifier.\n @dev Requirements:\n - The `serviceProvider` must have previously provisioned stake to `verifier`.\n - `_tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n Emits {StakeDeposited} and {ProvisionIncreased} events.\n @param serviceProvider Address of the service provider\n @param verifier Address of the verifier\n @param tokens Amount of tokens to stake" - }, - "functionSelector": "74612092", - "id": 3417, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "stakeToProvision", - "nameLocation": "20224:16:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3415, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3410, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "20249:15:27", - "nodeType": "VariableDeclaration", - "scope": 3417, - "src": "20241:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3409, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20241:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3412, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "20274:8:27", - "nodeType": "VariableDeclaration", - "scope": 3417, - "src": "20266:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3411, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20266:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3414, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "20292:6:27", - "nodeType": "VariableDeclaration", - "scope": 3417, - "src": "20284:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3413, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "20284:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "20240:59:27" - }, - "returnParameters": { - "id": 3416, - "nodeType": "ParameterList", - "parameters": [], - "src": "20308:0:27" - }, - "scope": 3695, - "src": "20215:94:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3418, - "nodeType": "StructuredDocumentation", - "src": "20315:685:27", - "text": " @notice Move idle stake back to the owner's account.\n Stake is removed from the protocol:\n - During the transition period it's locked for a period of time before it can be withdrawn\n by calling {withdraw}.\n - After the transition period it's immediately withdrawn.\n @dev Requirements:\n - `_tokens` cannot be zero.\n - `_serviceProvider` must have enough idle stake to cover the staking amount and any\n legacy allocation.\n Emits a {StakeLocked} event during the transition period.\n Emits a {StakeWithdrawn} event after the transition period.\n @param tokens Amount of tokens to unstake" - }, - "functionSelector": "2e17de78", - "id": 3423, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "unstake", - "nameLocation": "21014:7:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3421, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3420, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "21030:6:27", - "nodeType": "VariableDeclaration", - "scope": 3423, - "src": "21022:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3419, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "21022:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "21021:16:27" - }, - "returnParameters": { - "id": 3422, - "nodeType": "ParameterList", - "parameters": [], - "src": "21046:0:27" - }, - "scope": 3695, - "src": "21005:42:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3424, - "nodeType": "StructuredDocumentation", - "src": "21053:314:27", - "text": " @notice Withdraw service provider tokens once the thawing period (initiated by {unstake}) has passed.\n All thawed tokens are withdrawn.\n @dev This is only needed during the transition period while we still have\n a global lock. After that, unstake() will automatically withdraw." - }, - "functionSelector": "3ccfd60b", - "id": 3427, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdraw", - "nameLocation": "21381:8:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3425, - "nodeType": "ParameterList", - "parameters": [], - "src": "21389:2:27" - }, - "returnParameters": { - "id": 3426, - "nodeType": "ParameterList", - "parameters": [], - "src": "21400:0:27" - }, - "scope": 3695, - "src": "21372:29:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3428, - "nodeType": "StructuredDocumentation", - "src": "21407:1242:27", - "text": " @notice Provision stake to a verifier. The tokens will be locked with a thawing period\n and will be slashable by the verifier. This is the main mechanism to provision stake to a data\n service, where the data service is the verifier.\n This function can be called by the service provider or by an operator authorized by the provider\n for this specific verifier.\n @dev Requirements:\n - `tokens` cannot be zero.\n - The `serviceProvider` must have enough idle stake to cover the tokens to provision.\n - `maxVerifierCut` must be a valid PPM.\n - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`.\n Emits a {ProvisionCreated} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\n @param tokens The amount of tokens that will be locked and slashable\n @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\n @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision" - }, - "functionSelector": "010167e5", - "id": 3441, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "provision", - "nameLocation": "22663:9:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3439, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3430, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "22690:15:27", - "nodeType": "VariableDeclaration", - "scope": 3441, - "src": "22682:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3429, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22682:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3432, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "22723:8:27", - "nodeType": "VariableDeclaration", - "scope": 3441, - "src": "22715:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3431, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22715:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3434, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "22749:6:27", - "nodeType": "VariableDeclaration", - "scope": 3441, - "src": "22741:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3433, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "22741:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3436, - "mutability": "mutable", - "name": "maxVerifierCut", - "nameLocation": "22772:14:27", - "nodeType": "VariableDeclaration", - "scope": 3441, - "src": "22765:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3435, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "22765:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3438, - "mutability": "mutable", - "name": "thawingPeriod", - "nameLocation": "22803:13:27", - "nodeType": "VariableDeclaration", - "scope": 3441, - "src": "22796:20:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3437, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "22796:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "22672:150:27" - }, - "returnParameters": { - "id": 3440, - "nodeType": "ParameterList", - "parameters": [], - "src": "22831:0:27" - }, - "scope": 3695, - "src": "22654:178:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3442, - "nodeType": "StructuredDocumentation", - "src": "22838:564:27", - "text": " @notice Adds tokens from the service provider's idle stake to a provision\n @dev\n Requirements:\n - The `serviceProvider` must have previously provisioned stake to `verifier`.\n - `tokens` cannot be zero.\n - The `serviceProvider` must have enough idle stake to cover the tokens to add.\n Emits a {ProvisionIncreased} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param tokens The amount of tokens to add to the provision" - }, - "functionSelector": "fecc9cc1", - "id": 3451, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addToProvision", - "nameLocation": "23416:14:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3449, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3444, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "23439:15:27", - "nodeType": "VariableDeclaration", - "scope": 3451, - "src": "23431:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3443, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "23431:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3446, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "23464:8:27", - "nodeType": "VariableDeclaration", - "scope": 3451, - "src": "23456:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3445, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "23456:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3448, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "23482:6:27", - "nodeType": "VariableDeclaration", - "scope": 3451, - "src": "23474:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3447, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23474:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "23430:59:27" - }, - "returnParameters": { - "id": 3450, - "nodeType": "ParameterList", - "parameters": [], - "src": "23498:0:27" - }, - "scope": 3695, - "src": "23407:92:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3452, - "nodeType": "StructuredDocumentation", - "src": "23505:929:27", - "text": " @notice Start thawing tokens to remove them from a provision.\n This function can be called by the service provider or by an operator authorized by the provider\n for this specific verifier.\n Note that removing tokens from a provision is a two step process:\n - First the tokens are thawed using this function.\n - Then after the thawing period, the tokens are removed from the provision using {deprovision}\n or {reprovision}.\n @dev Requirements:\n - The provision must have enough tokens available to thaw.\n - `tokens` cannot be zero.\n Emits {ProvisionThawed} and {ThawRequestCreated} events.\n @param serviceProvider The service provider address\n @param verifier The verifier address for which the tokens are provisioned\n @param tokens The amount of tokens to thaw\n @return The ID of the thaw request" - }, - "functionSelector": "f93f1cd0", - "id": 3463, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "thaw", - "nameLocation": "24448:4:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3459, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3454, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "24461:15:27", - "nodeType": "VariableDeclaration", - "scope": 3463, - "src": "24453:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3453, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "24453:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3456, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "24486:8:27", - "nodeType": "VariableDeclaration", - "scope": 3463, - "src": "24478:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3455, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "24478:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3458, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "24504:6:27", - "nodeType": "VariableDeclaration", - "scope": 3463, - "src": "24496:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3457, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24496:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "24452:59:27" - }, - "returnParameters": { - "id": 3462, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3461, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3463, - "src": "24530:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3460, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "24530:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "24529:9:27" - }, - "scope": 3695, - "src": "24439:100:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3464, - "nodeType": "StructuredDocumentation", - "src": "24545:727:27", - "text": " @notice Remove tokens from a provision and move them back to the service provider's idle stake.\n @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n requests in the event that fulfilling all of them results in a gas limit error.\n Requirements:\n - Must have previously initiated a thaw request using {thaw}.\n Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {TokensDeprovisioned} events.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests." - }, - "functionSelector": "21195373", - "id": 3473, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "deprovision", - "nameLocation": "25286:11:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3471, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3466, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "25306:15:27", - "nodeType": "VariableDeclaration", - "scope": 3473, - "src": "25298:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3465, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "25298:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3468, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "25331:8:27", - "nodeType": "VariableDeclaration", - "scope": 3473, - "src": "25323:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3467, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "25323:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3470, - "mutability": "mutable", - "name": "nThawRequests", - "nameLocation": "25349:13:27", - "nodeType": "VariableDeclaration", - "scope": 3473, - "src": "25341:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3469, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "25341:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "25297:66:27" - }, - "returnParameters": { - "id": 3472, - "nodeType": "ParameterList", - "parameters": [], - "src": "25372:0:27" - }, - "scope": 3695, - "src": "25277:96:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3474, - "nodeType": "StructuredDocumentation", - "src": "25379:1032:27", - "text": " @notice Move already thawed stake from one provision into another provision\n This function can be called by the service provider or by an operator authorized by the provider\n for the two corresponding verifiers.\n @dev Requirements:\n - Must have previously initiated a thaw request using {thaw}.\n - `tokens` cannot be zero.\n - The `serviceProvider` must have previously provisioned stake to `newVerifier`.\n - The `serviceProvider` must have enough idle stake to cover the tokens to add.\n Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled}, {TokensDeprovisioned} and {ProvisionIncreased}\n events.\n @param serviceProvider The service provider address\n @param oldVerifier The verifier address for which the tokens are currently provisioned\n @param newVerifier The verifier address for which the tokens will be provisioned\n @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests." - }, - "functionSelector": "ba7fb0b4", - "id": 3485, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "reprovision", - "nameLocation": "26425:11:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3483, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3476, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "26454:15:27", - "nodeType": "VariableDeclaration", - "scope": 3485, - "src": "26446:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3475, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "26446:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3478, - "mutability": "mutable", - "name": "oldVerifier", - "nameLocation": "26487:11:27", - "nodeType": "VariableDeclaration", - "scope": 3485, - "src": "26479:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3477, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "26479:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3480, - "mutability": "mutable", - "name": "newVerifier", - "nameLocation": "26516:11:27", - "nodeType": "VariableDeclaration", - "scope": 3485, - "src": "26508:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3479, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "26508:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3482, - "mutability": "mutable", - "name": "nThawRequests", - "nameLocation": "26545:13:27", - "nodeType": "VariableDeclaration", - "scope": 3485, - "src": "26537:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3481, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "26537:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "26436:128:27" - }, - "returnParameters": { - "id": 3484, - "nodeType": "ParameterList", - "parameters": [], - "src": "26573:0:27" - }, - "scope": 3695, - "src": "26416:158:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3486, - "nodeType": "StructuredDocumentation", - "src": "26580:810:27", - "text": " @notice Stages a provision parameter update. Note that the change is not effective until the verifier calls\n {acceptProvisionParameters}.\n @dev This two step update process prevents the service provider from changing the parameters\n without the verifier's consent.\n Emits a {ProvisionParametersStaged} event if at least one of the parameters changed.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param maxVerifierCut The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for\n themselves when slashing\n @param thawingPeriod The proposed period in seconds that the tokens will be thawing before they can be removed from\n the provision" - }, - "functionSelector": "81e21b56", - "id": 3497, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setProvisionParameters", - "nameLocation": "27404:22:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3495, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3488, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "27444:15:27", - "nodeType": "VariableDeclaration", - "scope": 3497, - "src": "27436:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3487, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27436:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3490, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "27477:8:27", - "nodeType": "VariableDeclaration", - "scope": 3497, - "src": "27469:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3489, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27469:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3492, - "mutability": "mutable", - "name": "maxVerifierCut", - "nameLocation": "27502:14:27", - "nodeType": "VariableDeclaration", - "scope": 3497, - "src": "27495:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3491, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "27495:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3494, - "mutability": "mutable", - "name": "thawingPeriod", - "nameLocation": "27533:13:27", - "nodeType": "VariableDeclaration", - "scope": 3497, - "src": "27526:20:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3493, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "27526:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "27426:126:27" - }, - "returnParameters": { - "id": 3496, - "nodeType": "ParameterList", - "parameters": [], - "src": "27561:0:27" - }, - "scope": 3695, - "src": "27395:167:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3498, - "nodeType": "StructuredDocumentation", - "src": "27568:257:27", - "text": " @notice Accepts a staged provision parameter update.\n @dev Only the provision's verifier can call this function.\n Emits a {ProvisionParametersSet} event.\n @param serviceProvider The service provider address" - }, - "functionSelector": "3a78b732", - "id": 3503, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "acceptProvisionParameters", - "nameLocation": "27839:25:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3501, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3500, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "27873:15:27", - "nodeType": "VariableDeclaration", - "scope": 3503, - "src": "27865:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3499, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27865:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "27864:25:27" - }, - "returnParameters": { - "id": 3502, - "nodeType": "ParameterList", - "parameters": [], - "src": "27898:0:27" - }, - "scope": 3695, - "src": "27830:69:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3504, - "nodeType": "StructuredDocumentation", - "src": "27905:547:27", - "text": " @notice Delegate tokens to a provision.\n @dev Requirements:\n - `tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n - The provision must exist.\n Emits a {TokensDelegated} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param tokens The amount of tokens to delegate\n @param minSharesOut The minimum amount of shares to accept, slippage protection." - }, - "functionSelector": "6230001a", - "id": 3515, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "delegate", - "nameLocation": "28466:8:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3513, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3506, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "28483:15:27", - "nodeType": "VariableDeclaration", - "scope": 3515, - "src": "28475:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3505, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "28475:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3508, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "28508:8:27", - "nodeType": "VariableDeclaration", - "scope": 3515, - "src": "28500:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3507, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "28500:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3510, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "28526:6:27", - "nodeType": "VariableDeclaration", - "scope": 3515, - "src": "28518:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3509, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "28518:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3512, - "mutability": "mutable", - "name": "minSharesOut", - "nameLocation": "28542:12:27", - "nodeType": "VariableDeclaration", - "scope": 3515, - "src": "28534:20:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3511, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "28534:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "28474:81:27" - }, - "returnParameters": { - "id": 3514, - "nodeType": "ParameterList", - "parameters": [], - "src": "28564:0:27" - }, - "scope": 3695, - "src": "28457:108:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3516, - "nodeType": "StructuredDocumentation", - "src": "28571:632:27", - "text": " @notice Add tokens to a delegation pool without issuing shares.\n Used by data services to pay delegation fees/rewards.\n Delegators SHOULD NOT call this function.\n @dev Requirements:\n - `tokens` cannot be zero.\n - Caller must have previously approved this contract to pull tokens from their balance.\n Emits a {TokensToDelegationPoolAdded} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address for which the tokens are provisioned\n @param tokens The amount of tokens to add to the delegation pool" - }, - "functionSelector": "ca94b0e9", - "id": 3525, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addToDelegationPool", - "nameLocation": "29217:19:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3523, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3518, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "29245:15:27", - "nodeType": "VariableDeclaration", - "scope": 3525, - "src": "29237:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3517, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "29237:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3520, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "29270:8:27", - "nodeType": "VariableDeclaration", - "scope": 3525, - "src": "29262:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3519, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "29262:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3522, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "29288:6:27", - "nodeType": "VariableDeclaration", - "scope": 3525, - "src": "29280:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3521, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "29280:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "29236:59:27" - }, - "returnParameters": { - "id": 3524, - "nodeType": "ParameterList", - "parameters": [], - "src": "29304:0:27" - }, - "scope": 3695, - "src": "29208:97:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3526, - "nodeType": "StructuredDocumentation", - "src": "29311:673:27", - "text": " @notice Undelegate tokens from a provision and start thawing them.\n Note that undelegating tokens from a provision is a two step process:\n - First the tokens are thawed using this function.\n - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}.\n Requirements:\n - `shares` cannot be zero.\n Emits a {TokensUndelegated} and {ThawRequestCreated} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param shares The amount of shares to undelegate\n @return The ID of the thaw request" - }, - "functionSelector": "a02b9426", - "id": 3537, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "undelegate", - "nameLocation": "29998:10:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3533, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3528, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "30017:15:27", - "nodeType": "VariableDeclaration", - "scope": 3537, - "src": "30009:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3527, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "30009:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3530, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "30042:8:27", - "nodeType": "VariableDeclaration", - "scope": 3537, - "src": "30034:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3529, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "30034:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3532, - "mutability": "mutable", - "name": "shares", - "nameLocation": "30060:6:27", - "nodeType": "VariableDeclaration", - "scope": 3537, - "src": "30052:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3531, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "30052:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "30008:59:27" - }, - "returnParameters": { - "id": 3536, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3535, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3537, - "src": "30086:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3534, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "30086:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "30085:9:27" - }, - "scope": 3695, - "src": "29989:106:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3538, - "nodeType": "StructuredDocumentation", - "src": "30101:904:27", - "text": " @notice Undelegate tokens from a provision and start thawing them.\n The tokens will be withdrawable by the `beneficiary` after the thawing period.\n Note that undelegating tokens from a provision is a two step process:\n - First the tokens are thawed using this function.\n - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}.\n Requirements:\n - `shares` cannot be zero.\n - `beneficiary` cannot be the zero address.\n Emits a {TokensUndelegated} and {ThawRequestCreated} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param shares The amount of shares to undelegate\n @param beneficiary The address where the tokens will be withdrawn after thawing\n @return The ID of the thaw request" - }, - "functionSelector": "162ea5ed", - "id": 3551, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "undelegate", - "nameLocation": "31019:10:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3547, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3540, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "31047:15:27", - "nodeType": "VariableDeclaration", - "scope": 3551, - "src": "31039:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3539, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "31039:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3542, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "31080:8:27", - "nodeType": "VariableDeclaration", - "scope": 3551, - "src": "31072:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3541, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "31072:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3544, - "mutability": "mutable", - "name": "shares", - "nameLocation": "31106:6:27", - "nodeType": "VariableDeclaration", - "scope": 3551, - "src": "31098:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3543, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "31098:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3546, - "mutability": "mutable", - "name": "beneficiary", - "nameLocation": "31130:11:27", - "nodeType": "VariableDeclaration", - "scope": 3551, - "src": "31122:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3545, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "31122:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "31029:118:27" - }, - "returnParameters": { - "id": 3550, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3549, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3551, - "src": "31166:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3548, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "31166:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "31165:9:27" - }, - "scope": 3695, - "src": "31010:165:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3552, - "nodeType": "StructuredDocumentation", - "src": "31181:878:27", - "text": " @notice Withdraw undelegated tokens from a provision after thawing.\n @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n requests in the event that fulfilling all of them results in a gas limit error.\n @dev If the delegation pool was completely slashed before withdrawing, calling this function will fulfill\n the thaw requests with an amount equal to zero.\n Requirements:\n - Must have previously initiated a thaw request using {undelegate}.\n Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests." - }, - "functionSelector": "3993d849", - "id": 3561, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdrawDelegated", - "nameLocation": "32073:17:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3559, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3554, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "32099:15:27", - "nodeType": "VariableDeclaration", - "scope": 3561, - "src": "32091:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3553, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "32091:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3556, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "32124:8:27", - "nodeType": "VariableDeclaration", - "scope": 3561, - "src": "32116:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3555, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "32116:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3558, - "mutability": "mutable", - "name": "nThawRequests", - "nameLocation": "32142:13:27", - "nodeType": "VariableDeclaration", - "scope": 3561, - "src": "32134:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3557, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "32134:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "32090:66:27" - }, - "returnParameters": { - "id": 3560, - "nodeType": "ParameterList", - "parameters": [], - "src": "32165:0:27" - }, - "scope": 3695, - "src": "32064:102:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3562, - "nodeType": "StructuredDocumentation", - "src": "32172:1169:27", - "text": " @notice Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`.\n @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw\n requests in the event that fulfilling all of them results in a gas limit error.\n Requirements:\n - Must have previously initiated a thaw request using {undelegate}.\n - `newServiceProvider` and `newVerifier` must not be the zero address.\n - `newServiceProvider` must have previously provisioned stake to `newVerifier`.\n Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\n @param oldServiceProvider The old service provider address\n @param oldVerifier The old verifier address\n @param newServiceProvider The address of a new service provider\n @param newVerifier The address of a new verifier\n @param minSharesForNewProvider The minimum amount of shares to accept for the new service provider\n @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests." - }, - "functionSelector": "f64b3598", - "id": 3577, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "redelegate", - "nameLocation": "33355:10:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3575, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3564, - "mutability": "mutable", - "name": "oldServiceProvider", - "nameLocation": "33383:18:27", - "nodeType": "VariableDeclaration", - "scope": 3577, - "src": "33375:26:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3563, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "33375:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3566, - "mutability": "mutable", - "name": "oldVerifier", - "nameLocation": "33419:11:27", - "nodeType": "VariableDeclaration", - "scope": 3577, - "src": "33411:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3565, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "33411:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3568, - "mutability": "mutable", - "name": "newServiceProvider", - "nameLocation": "33448:18:27", - "nodeType": "VariableDeclaration", - "scope": 3577, - "src": "33440:26:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3567, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "33440:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3570, - "mutability": "mutable", - "name": "newVerifier", - "nameLocation": "33484:11:27", - "nodeType": "VariableDeclaration", - "scope": 3577, - "src": "33476:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3569, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "33476:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3572, - "mutability": "mutable", - "name": "minSharesForNewProvider", - "nameLocation": "33513:23:27", - "nodeType": "VariableDeclaration", - "scope": 3577, - "src": "33505:31:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3571, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "33505:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3574, - "mutability": "mutable", - "name": "nThawRequests", - "nameLocation": "33554:13:27", - "nodeType": "VariableDeclaration", - "scope": 3577, - "src": "33546:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3573, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "33546:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "33365:208:27" - }, - "returnParameters": { - "id": 3576, - "nodeType": "ParameterList", - "parameters": [], - "src": "33582:0:27" - }, - "scope": 3695, - "src": "33346:237:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3578, - "nodeType": "StructuredDocumentation", - "src": "33589:389:27", - "text": " @notice Set the fee cut for a verifier on a specific payment type.\n @dev Emits a {DelegationFeeCutSet} event.\n @param serviceProvider The service provider address\n @param verifier The verifier address\n @param paymentType The payment type for which the fee cut is set, as defined in {IGraphPayments}\n @param feeCut The fee cut to set, in PPM" - }, - "functionSelector": "42c51693", - "id": 3590, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDelegationFeeCut", - "nameLocation": "33992:19:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3588, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3580, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "34029:15:27", - "nodeType": "VariableDeclaration", - "scope": 3590, - "src": "34021:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3579, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "34021:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3582, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "34062:8:27", - "nodeType": "VariableDeclaration", - "scope": 3590, - "src": "34054:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3581, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "34054:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3585, - "mutability": "mutable", - "name": "paymentType", - "nameLocation": "34108:11:27", - "nodeType": "VariableDeclaration", - "scope": 3590, - "src": "34080:39:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 3584, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3583, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "34080:14:27", - "34095:12:27" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "34080:27:27" - }, - "referencedDeclaration": 2166, - "src": "34080:27:27", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3587, - "mutability": "mutable", - "name": "feeCut", - "nameLocation": "34137:6:27", - "nodeType": "VariableDeclaration", - "scope": 3590, - "src": "34129:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3586, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34129:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "34011:138:27" - }, - "returnParameters": { - "id": 3589, - "nodeType": "ParameterList", - "parameters": [], - "src": "34158:0:27" - }, - "scope": 3695, - "src": "33983:176:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3591, - "nodeType": "StructuredDocumentation", - "src": "34165:410:27", - "text": " @notice Delegate tokens to the subgraph data service provision.\n This function is for backwards compatibility with the legacy staking contract.\n It only allows delegating to the subgraph data service and DOES NOT have slippage protection.\n @dev See {delegate}.\n @param serviceProvider The service provider address\n @param tokens The amount of tokens to delegate" - }, - "functionSelector": "026e402b", - "id": 3598, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "delegate", - "nameLocation": "34589:8:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3596, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3593, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "34606:15:27", - "nodeType": "VariableDeclaration", - "scope": 3598, - "src": "34598:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3592, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "34598:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3595, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "34631:6:27", - "nodeType": "VariableDeclaration", - "scope": 3598, - "src": "34623:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3594, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34623:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "34597:41:27" - }, - "returnParameters": { - "id": 3597, - "nodeType": "ParameterList", - "parameters": [], - "src": "34647:0:27" - }, - "scope": 3695, - "src": "34580:68:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3599, - "nodeType": "StructuredDocumentation", - "src": "34654:407:27", - "text": " @notice Undelegate tokens from the subgraph data service provision and start thawing them.\n This function is for backwards compatibility with the legacy staking contract.\n It only allows undelegating from the subgraph data service.\n @dev See {undelegate}.\n @param serviceProvider The service provider address\n @param shares The amount of shares to undelegate" - }, - "functionSelector": "4d99dd16", - "id": 3606, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "undelegate", - "nameLocation": "35075:10:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3604, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3601, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "35094:15:27", - "nodeType": "VariableDeclaration", - "scope": 3606, - "src": "35086:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3600, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "35086:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3603, - "mutability": "mutable", - "name": "shares", - "nameLocation": "35119:6:27", - "nodeType": "VariableDeclaration", - "scope": 3606, - "src": "35111:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3602, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "35111:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "35085:41:27" - }, - "returnParameters": { - "id": 3605, - "nodeType": "ParameterList", - "parameters": [], - "src": "35135:0:27" - }, - "scope": 3695, - "src": "35066:70:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3607, - "nodeType": "StructuredDocumentation", - "src": "35142:546:27", - "text": " @notice Withdraw undelegated tokens from the subgraph data service provision after thawing.\n This function is for backwards compatibility with the legacy staking contract.\n It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in\n case the caller opts for re-delegating.\n @dev See {delegate}.\n @param serviceProvider The service provider address\n @param newServiceProvider The address of a new service provider, if the delegator wants to re-delegate" - }, - "functionSelector": "51a60b02", - "id": 3614, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdrawDelegated", - "nameLocation": "35702:17:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3612, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3609, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "35728:15:27", - "nodeType": "VariableDeclaration", - "scope": 3614, - "src": "35720:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3608, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "35720:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3611, - "mutability": "mutable", - "name": "newServiceProvider", - "nameLocation": "35753:18:27", - "nodeType": "VariableDeclaration", - "scope": 3614, - "src": "35745:26:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3610, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "35745:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "35719:53:27" - }, - "returnParameters": { - "id": 3613, - "nodeType": "ParameterList", - "parameters": [], - "src": "35781:0:27" - }, - "scope": 3695, - "src": "35693:89:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3615, - "nodeType": "StructuredDocumentation", - "src": "35788:1190:27", - "text": " @notice Slash a service provider. This can only be called by a verifier to which\n the provider has provisioned stake, and up to the amount of tokens they have provisioned.\n If the service provider's stake is not enough, the associated delegation pool might be slashed\n depending on the value of the global delegation slashing flag.\n Part of the slashed tokens are sent to the `verifierDestination` as a reward.\n @dev Requirements:\n - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider.\n - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut.\n Emits a {ProvisionSlashed} and {VerifierTokensSent} events.\n Emits a {DelegationSlashed} or {DelegationSlashingSkipped} event depending on the global delegation slashing\n flag.\n @param serviceProvider The service provider to slash\n @param tokens The amount of tokens to slash\n @param tokensVerifier The amount of tokens to transfer instead of burning\n @param verifierDestination The address to transfer the verifier cut to" - }, - "functionSelector": "e76fede6", - "id": 3626, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "slash", - "nameLocation": "36992:5:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3624, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3617, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "37015:15:27", - "nodeType": "VariableDeclaration", - "scope": 3626, - "src": "37007:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3616, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "37007:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3619, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "37048:6:27", - "nodeType": "VariableDeclaration", - "scope": 3626, - "src": "37040:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3618, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "37040:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3621, - "mutability": "mutable", - "name": "tokensVerifier", - "nameLocation": "37072:14:27", - "nodeType": "VariableDeclaration", - "scope": 3626, - "src": "37064:22:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3620, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "37064:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3623, - "mutability": "mutable", - "name": "verifierDestination", - "nameLocation": "37104:19:27", - "nodeType": "VariableDeclaration", - "scope": 3626, - "src": "37096:27:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3622, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "37096:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "36997:132:27" - }, - "returnParameters": { - "id": 3625, - "nodeType": "ParameterList", - "parameters": [], - "src": "37138:0:27" - }, - "scope": 3695, - "src": "36983:156:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3627, - "nodeType": "StructuredDocumentation", - "src": "37145:769:27", - "text": " @notice Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets).\n @dev See {provision}.\n Additional requirements:\n - The `verifier` must be allowed to be used for locked provisions.\n @param serviceProvider The service provider address\n @param verifier The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\n @param tokens The amount of tokens that will be locked and slashable\n @param maxVerifierCut The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\n @param thawingPeriod The period in seconds that the tokens will be thawing before they can be removed from the provision" - }, - "functionSelector": "82d66cb8", - "id": 3640, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "provisionLocked", - "nameLocation": "37928:15:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3638, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3629, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "37961:15:27", - "nodeType": "VariableDeclaration", - "scope": 3640, - "src": "37953:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3628, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "37953:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3631, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "37994:8:27", - "nodeType": "VariableDeclaration", - "scope": 3640, - "src": "37986:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3630, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "37986:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3633, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "38020:6:27", - "nodeType": "VariableDeclaration", - "scope": 3640, - "src": "38012:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3632, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "38012:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3635, - "mutability": "mutable", - "name": "maxVerifierCut", - "nameLocation": "38043:14:27", - "nodeType": "VariableDeclaration", - "scope": 3640, - "src": "38036:21:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3634, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "38036:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3637, - "mutability": "mutable", - "name": "thawingPeriod", - "nameLocation": "38074:13:27", - "nodeType": "VariableDeclaration", - "scope": 3640, - "src": "38067:20:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3636, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "38067:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "37943:150:27" - }, - "returnParameters": { - "id": 3639, - "nodeType": "ParameterList", - "parameters": [], - "src": "38102:0:27" - }, - "scope": 3695, - "src": "37919:184:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3641, - "nodeType": "StructuredDocumentation", - "src": "38109:474:27", - "text": " @notice Authorize or unauthorize an address to be an operator for the caller on a verifier.\n @dev See {setOperator}.\n Additional requirements:\n - The `verifier` must be allowed to be used for locked provisions.\n @param verifier The verifier / data service on which they'll be allowed to operate\n @param operator Address to authorize or unauthorize\n @param allowed Whether the operator is authorized or not" - }, - "functionSelector": "ad4d35b5", - "id": 3650, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setOperatorLocked", - "nameLocation": "38597:17:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3648, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3643, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "38623:8:27", - "nodeType": "VariableDeclaration", - "scope": 3650, - "src": "38615:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3642, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "38615:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3645, - "mutability": "mutable", - "name": "operator", - "nameLocation": "38641:8:27", - "nodeType": "VariableDeclaration", - "scope": 3650, - "src": "38633:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3644, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "38633:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3647, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "38656:7:27", - "nodeType": "VariableDeclaration", - "scope": 3650, - "src": "38651:12:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3646, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "38651:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "38614:50:27" - }, - "returnParameters": { - "id": 3649, - "nodeType": "ParameterList", - "parameters": [], - "src": "38673:0:27" - }, - "scope": 3695, - "src": "38588:86:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3651, - "nodeType": "StructuredDocumentation", - "src": "38680:449:27", - "text": " @notice Sets a verifier as a globally allowed verifier for locked provisions.\n @dev This function can only be called by the contract governor, it's used to maintain\n a whitelist of verifiers that do not allow the stake from a locked wallet to escape the lock.\n @dev Emits a {AllowedLockedVerifierSet} event.\n @param verifier The verifier address\n @param allowed Whether the verifier is allowed or not" - }, - "functionSelector": "4ca7ac22", - "id": 3658, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setAllowedLockedVerifier", - "nameLocation": "39143:24:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3656, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3653, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "39176:8:27", - "nodeType": "VariableDeclaration", - "scope": 3658, - "src": "39168:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3652, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "39168:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3655, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "39191:7:27", - "nodeType": "VariableDeclaration", - "scope": 3658, - "src": "39186:12:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3654, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "39186:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "39167:32:27" - }, - "returnParameters": { - "id": 3657, - "nodeType": "ParameterList", - "parameters": [], - "src": "39208:0:27" - }, - "scope": 3695, - "src": "39134:75:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3659, - "nodeType": "StructuredDocumentation", - "src": "39215:146:27", - "text": " @notice Set the global delegation slashing flag to true.\n @dev This function can only be called by the contract governor." - }, - "functionSelector": "ef58bd67", - "id": 3662, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDelegationSlashingEnabled", - "nameLocation": "39375:28:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3660, - "nodeType": "ParameterList", - "parameters": [], - "src": "39403:2:27" - }, - "returnParameters": { - "id": 3661, - "nodeType": "ParameterList", - "parameters": [], - "src": "39414:0:27" - }, - "scope": 3695, - "src": "39366:49:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3663, - "nodeType": "StructuredDocumentation", - "src": "39421:293:27", - "text": " @notice Clear the legacy global thawing period.\n This signifies the end of the transition period, after which no legacy allocations should be left.\n @dev This function can only be called by the contract governor.\n @dev Emits a {ThawingPeriodCleared} event." - }, - "functionSelector": "e473522a", - "id": 3666, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "clearThawingPeriod", - "nameLocation": "39728:18:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3664, - "nodeType": "ParameterList", - "parameters": [], - "src": "39746:2:27" - }, - "returnParameters": { - "id": 3665, - "nodeType": "ParameterList", - "parameters": [], - "src": "39757:0:27" - }, - "scope": 3695, - "src": "39719:39:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3667, - "nodeType": "StructuredDocumentation", - "src": "39764:163:27", - "text": " @notice Sets the global maximum thawing period allowed for provisions.\n @param maxThawingPeriod The new maximum thawing period, in seconds" - }, - "functionSelector": "259bc435", - "id": 3672, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setMaxThawingPeriod", - "nameLocation": "39941:19:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3670, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3669, - "mutability": "mutable", - "name": "maxThawingPeriod", - "nameLocation": "39968:16:27", - "nodeType": "VariableDeclaration", - "scope": 3672, - "src": "39961:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3668, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "39961:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "39960:25:27" - }, - "returnParameters": { - "id": 3671, - "nodeType": "ParameterList", - "parameters": [], - "src": "39994:0:27" - }, - "scope": 3695, - "src": "39932:63:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3673, - "nodeType": "StructuredDocumentation", - "src": "40001:368:27", - "text": " @notice Authorize or unauthorize an address to be an operator for the caller on a data service.\n @dev Emits a {OperatorSet} event.\n @param verifier The verifier / data service on which they'll be allowed to operate\n @param operator Address to authorize or unauthorize\n @param allowed Whether the operator is authorized or not" - }, - "functionSelector": "bc735d90", - "id": 3682, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setOperator", - "nameLocation": "40383:11:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3680, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3675, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "40403:8:27", - "nodeType": "VariableDeclaration", - "scope": 3682, - "src": "40395:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3674, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "40395:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3677, - "mutability": "mutable", - "name": "operator", - "nameLocation": "40421:8:27", - "nodeType": "VariableDeclaration", - "scope": 3682, - "src": "40413:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3676, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "40413:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3679, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "40436:7:27", - "nodeType": "VariableDeclaration", - "scope": 3682, - "src": "40431:12:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3678, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "40431:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "40394:50:27" - }, - "returnParameters": { - "id": 3681, - "nodeType": "ParameterList", - "parameters": [], - "src": "40453:0:27" - }, - "scope": 3695, - "src": "40374:80:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3683, - "nodeType": "StructuredDocumentation", - "src": "40460:402:27", - "text": " @notice Check if an operator is authorized for the caller on a specific verifier / data service.\n @param serviceProvider The service provider on behalf of whom they're claiming to act\n @param verifier The verifier / data service on which they're claiming to act\n @param operator The address to check for auth\n @return Whether the operator is authorized or not" - }, - "functionSelector": "7c145cc7", - "id": 3694, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isAuthorized", - "nameLocation": "40876:12:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3690, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3685, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "40897:15:27", - "nodeType": "VariableDeclaration", - "scope": 3694, - "src": "40889:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3684, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "40889:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3687, - "mutability": "mutable", - "name": "verifier", - "nameLocation": "40922:8:27", - "nodeType": "VariableDeclaration", - "scope": 3694, - "src": "40914:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3686, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "40914:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3689, - "mutability": "mutable", - "name": "operator", - "nameLocation": "40940:8:27", - "nodeType": "VariableDeclaration", - "scope": 3694, - "src": "40932:16:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3688, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "40932:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "40888:61:27" - }, - "returnParameters": { - "id": 3693, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3692, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3694, - "src": "40973:4:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3691, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "40973:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "40972:6:27" - }, - "scope": 3695, - "src": "40867:112:27", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 3696, - "src": "747:40234:27", - "usedErrors": [ - 3272, - 3279, - 3286, - 3293, - 3302, - 3307, - 3314, - 3317, - 3324, - 3331, - 3338, - 3341, - 3348, - 3355, - 3362, - 3365, - 3368, - 3371, - 3373, - 3375, - 3380, - 3385, - 3388, - 3393 - ], - "usedEvents": [ - 3036, - 3043, - 3056, - 3065, - 3074, - 3083, - 3094, - 3105, - 3116, - 3125, - 3134, - 3143, - 3154, - 3165, - 3176, - 3187, - 3196, - 3208, - 3223, - 3236, - 3249, - 3254, - 3261, - 3264, - 3269 - ] - } - ], - "src": "46:40936:27" - }, - "id": 27 - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", - "exportedSymbols": { - "IHorizonStakingTypes": [ - 3796 - ] - }, - "id": 3797, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3697, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:28" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IHorizonStakingTypes", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 3698, - "nodeType": "StructuredDocumentation", - "src": "155:412:28", - "text": " @title Defines the data types used in the Horizon staking contract\n @dev In order to preserve storage compatibility some data structures keep deprecated fields.\n These structures have then two representations, an internal one used by the contract storage and a public one.\n Getter functions should retrieve internal representations, remove deprecated fields and return the public representation." - }, - "fullyImplemented": true, - "id": 3796, - "linearizedBaseContracts": [ - 3796 - ], - "name": "IHorizonStakingTypes", - "nameLocation": "578:20:28", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "IHorizonStakingTypes.Provision", - "documentation": { - "id": 3699, - "nodeType": "StructuredDocumentation", - "src": "605:180:28", - "text": " @notice Represents stake assigned to a specific verifier/data service.\n Provisioned stake is locked and can be used as economic security by a data service." - }, - "id": 3718, - "members": [ - { - "constant": false, - "id": 3701, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "913:6:28", - "nodeType": "VariableDeclaration", - "scope": 3718, - "src": "905:14:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3700, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "905:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3703, - "mutability": "mutable", - "name": "tokensThawing", - "nameLocation": "1031:13:28", - "nodeType": "VariableDeclaration", - "scope": 3718, - "src": "1023:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3702, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1023:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3705, - "mutability": "mutable", - "name": "sharesThawing", - "nameLocation": "1112:13:28", - "nodeType": "VariableDeclaration", - "scope": 3718, - "src": "1104:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3704, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1104:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3707, - "mutability": "mutable", - "name": "maxVerifierCut", - "nameLocation": "1266:14:28", - "nodeType": "VariableDeclaration", - "scope": 3718, - "src": "1259:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3706, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1259:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3709, - "mutability": "mutable", - "name": "thawingPeriod", - "nameLocation": "1366:13:28", - "nodeType": "VariableDeclaration", - "scope": 3718, - "src": "1359:20:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3708, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1359:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3711, - "mutability": "mutable", - "name": "createdAt", - "nameLocation": "1448:9:28", - "nodeType": "VariableDeclaration", - "scope": 3718, - "src": "1441:16:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3710, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1441:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3713, - "mutability": "mutable", - "name": "maxVerifierCutPending", - "nameLocation": "1575:21:28", - "nodeType": "VariableDeclaration", - "scope": 3718, - "src": "1568:28:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3712, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1568:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3715, - "mutability": "mutable", - "name": "thawingPeriodPending", - "nameLocation": "1713:20:28", - "nodeType": "VariableDeclaration", - "scope": 3718, - "src": "1706:27:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3714, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1706:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3717, - "mutability": "mutable", - "name": "thawingNonce", - "nameLocation": "1843:12:28", - "nodeType": "VariableDeclaration", - "scope": 3718, - "src": "1835:20:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3716, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1835:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Provision", - "nameLocation": "797:9:28", - "nodeType": "StructDefinition", - "scope": 3796, - "src": "790:1072:28", - "visibility": "public" - }, - { - "canonicalName": "IHorizonStakingTypes.ServiceProvider", - "documentation": { - "id": 3719, - "nodeType": "StructuredDocumentation", - "src": "1868:151:28", - "text": " @notice Public representation of a service provider.\n @dev See {ServiceProviderInternal} for the actual storage representation" - }, - "id": 3724, - "members": [ - { - "constant": false, - "id": 3721, - "mutability": "mutable", - "name": "tokensStaked", - "nameLocation": "2176:12:28", - "nodeType": "VariableDeclaration", - "scope": 3724, - "src": "2168:20:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3720, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2168:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3723, - "mutability": "mutable", - "name": "tokensProvisioned", - "nameLocation": "2291:17:28", - "nodeType": "VariableDeclaration", - "scope": 3724, - "src": "2283:25:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3722, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2283:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "ServiceProvider", - "nameLocation": "2031:15:28", - "nodeType": "StructDefinition", - "scope": 3796, - "src": "2024:291:28", - "visibility": "public" - }, - { - "canonicalName": "IHorizonStakingTypes.ServiceProviderInternal", - "documentation": { - "id": 3725, - "nodeType": "StructuredDocumentation", - "src": "2321:176:28", - "text": " @notice Internal representation of a service provider.\n @dev It contains deprecated fields from the `Indexer` struct to maintain storage compatibility." - }, - "id": 3736, - "members": [ - { - "constant": false, - "id": 3727, - "mutability": "mutable", - "name": "tokensStaked", - "nameLocation": "2662:12:28", - "nodeType": "VariableDeclaration", - "scope": 3736, - "src": "2654:20:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3726, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2654:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3729, - "mutability": "mutable", - "name": "__DEPRECATED_tokensAllocated", - "nameLocation": "2743:28:28", - "nodeType": "VariableDeclaration", - "scope": 3736, - "src": "2735:36:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3728, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2735:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3731, - "mutability": "mutable", - "name": "__DEPRECATED_tokensLocked", - "nameLocation": "2917:25:28", - "nodeType": "VariableDeclaration", - "scope": 3736, - "src": "2909:33:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3730, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2909:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3733, - "mutability": "mutable", - "name": "__DEPRECATED_tokensLockedUntil", - "nameLocation": "3026:30:28", - "nodeType": "VariableDeclaration", - "scope": 3736, - "src": "3018:38:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3732, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3018:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3735, - "mutability": "mutable", - "name": "tokensProvisioned", - "nameLocation": "3159:17:28", - "nodeType": "VariableDeclaration", - "scope": 3736, - "src": "3151:25:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3734, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3151:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "ServiceProviderInternal", - "nameLocation": "2509:23:28", - "nodeType": "StructDefinition", - "scope": 3796, - "src": "2502:681:28", - "visibility": "public" - }, - { - "canonicalName": "IHorizonStakingTypes.DelegationPool", - "documentation": { - "id": 3737, - "nodeType": "StructuredDocumentation", - "src": "3189:149:28", - "text": " @notice Public representation of a delegation pool.\n @dev See {DelegationPoolInternal} for the actual storage representation" - }, - "id": 3748, - "members": [ - { - "constant": false, - "id": 3739, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "3424:6:28", - "nodeType": "VariableDeclaration", - "scope": 3748, - "src": "3416:14:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3738, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3416:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3741, - "mutability": "mutable", - "name": "shares", - "nameLocation": "3491:6:28", - "nodeType": "VariableDeclaration", - "scope": 3748, - "src": "3483:14:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3740, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3483:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3743, - "mutability": "mutable", - "name": "tokensThawing", - "nameLocation": "3553:13:28", - "nodeType": "VariableDeclaration", - "scope": 3748, - "src": "3545:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3742, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3545:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3745, - "mutability": "mutable", - "name": "sharesThawing", - "nameLocation": "3634:13:28", - "nodeType": "VariableDeclaration", - "scope": 3748, - "src": "3626:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3744, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3626:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3747, - "mutability": "mutable", - "name": "thawingNonce", - "nameLocation": "3757:12:28", - "nodeType": "VariableDeclaration", - "scope": 3748, - "src": "3749:20:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3746, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3749:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "DelegationPool", - "nameLocation": "3350:14:28", - "nodeType": "StructDefinition", - "scope": 3796, - "src": "3343:433:28", - "visibility": "public" - }, - { - "canonicalName": "IHorizonStakingTypes.DelegationPoolInternal", - "documentation": { - "id": 3749, - "nodeType": "StructuredDocumentation", - "src": "3782:213:28", - "text": " @notice Internal representation of a delegation pool.\n @dev It contains deprecated fields from the previous version of the `DelegationPool` struct\n to maintain storage compatibility." - }, - "id": 3773, - "members": [ - { - "constant": false, - "id": 3751, - "mutability": "mutable", - "name": "__DEPRECATED_cooldownBlocks", - "nameLocation": "4147:27:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "4140:34:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3750, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "4140:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3753, - "mutability": "mutable", - "name": "__DEPRECATED_indexingRewardCut", - "nameLocation": "4279:30:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "4272:37:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3752, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "4272:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3755, - "mutability": "mutable", - "name": "__DEPRECATED_queryFeeCut", - "nameLocation": "4408:24:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "4401:31:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3754, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "4401:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3757, - "mutability": "mutable", - "name": "__DEPRECATED_updatedAtBlock", - "nameLocation": "4529:27:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "4521:35:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3756, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4521:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3759, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "4615:6:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "4607:14:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3758, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4607:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3761, - "mutability": "mutable", - "name": "shares", - "nameLocation": "4682:6:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "4674:14:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3760, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4674:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3766, - "mutability": "mutable", - "name": "delegators", - "nameLocation": "4801:10:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "4741:70:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DelegationInternal_$3785_storage_$", - "typeString": "mapping(address => struct IHorizonStakingTypes.DelegationInternal)" - }, - "typeName": { - "id": 3765, - "keyName": "delegator", - "keyNameLocation": "4757:9:28", - "keyType": { - "id": 3762, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4749:7:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "4741:59:28", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_DelegationInternal_$3785_storage_$", - "typeString": "mapping(address => struct IHorizonStakingTypes.DelegationInternal)" - }, - "valueName": "delegation", - "valueNameLocation": "4789:10:28", - "valueType": { - "id": 3764, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3763, - "name": "DelegationInternal", - "nameLocations": [ - "4770:18:28" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3785, - "src": "4770:18:28" - }, - "referencedDeclaration": 3785, - "src": "4770:18:28", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DelegationInternal_$3785_storage_ptr", - "typeString": "struct IHorizonStakingTypes.DelegationInternal" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3768, - "mutability": "mutable", - "name": "tokensThawing", - "nameLocation": "4867:13:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "4859:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3767, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4859:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3770, - "mutability": "mutable", - "name": "sharesThawing", - "nameLocation": "4948:13:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "4940:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3769, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4940:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3772, - "mutability": "mutable", - "name": "thawingNonce", - "nameLocation": "5071:12:28", - "nodeType": "VariableDeclaration", - "scope": 3773, - "src": "5063:20:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3771, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5063:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "DelegationPoolInternal", - "nameLocation": "4007:22:28", - "nodeType": "StructDefinition", - "scope": 3796, - "src": "4000:1090:28", - "visibility": "public" - }, - { - "canonicalName": "IHorizonStakingTypes.Delegation", - "documentation": { - "id": 3774, - "nodeType": "StructuredDocumentation", - "src": "5096:146:28", - "text": " @notice Public representation of delegation details.\n @dev See {DelegationInternal} for the actual storage representation" - }, - "id": 3777, - "members": [ - { - "constant": false, - "id": 3776, - "mutability": "mutable", - "name": "shares", - "nameLocation": "5283:6:28", - "nodeType": "VariableDeclaration", - "scope": 3777, - "src": "5275:14:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3775, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5275:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Delegation", - "nameLocation": "5254:10:28", - "nodeType": "StructDefinition", - "scope": 3796, - "src": "5247:92:28", - "visibility": "public" - }, - { - "canonicalName": "IHorizonStakingTypes.DelegationInternal", - "documentation": { - "id": 3778, - "nodeType": "StructuredDocumentation", - "src": "5345:210:28", - "text": " @notice Internal representation of delegation details.\n @dev It contains deprecated fields from the previous version of the `Delegation` struct\n to maintain storage compatibility." - }, - "id": 3785, - "members": [ - { - "constant": false, - "id": 3780, - "mutability": "mutable", - "name": "shares", - "nameLocation": "5657:6:28", - "nodeType": "VariableDeclaration", - "scope": 3785, - "src": "5649:14:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3779, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5649:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3782, - "mutability": "mutable", - "name": "__DEPRECATED_tokensLocked", - "nameLocation": "5736:25:28", - "nodeType": "VariableDeclaration", - "scope": 3785, - "src": "5728:33:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3781, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5728:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3784, - "mutability": "mutable", - "name": "__DEPRECATED_tokensLockedUntil", - "nameLocation": "5845:30:28", - "nodeType": "VariableDeclaration", - "scope": 3785, - "src": "5837:38:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3783, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5837:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "DelegationInternal", - "nameLocation": "5567:18:28", - "nodeType": "StructDefinition", - "scope": 3796, - "src": "5560:322:28", - "visibility": "public" - }, - { - "canonicalName": "IHorizonStakingTypes.ThawRequest", - "documentation": { - "id": 3786, - "nodeType": "StructuredDocumentation", - "src": "5888:185:28", - "text": " @notice Details of a stake thawing operation.\n @dev ThawRequests are stored in linked lists by service provider/delegator,\n ordered by creation timestamp." - }, - "id": 3795, - "members": [ - { - "constant": false, - "id": 3788, - "mutability": "mutable", - "name": "shares", - "nameLocation": "6172:6:28", - "nodeType": "VariableDeclaration", - "scope": 3795, - "src": "6164:14:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3787, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6164:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3790, - "mutability": "mutable", - "name": "thawingUntil", - "nameLocation": "6276:12:28", - "nodeType": "VariableDeclaration", - "scope": 3795, - "src": "6269:19:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3789, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "6269:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3792, - "mutability": "mutable", - "name": "next", - "nameLocation": "6364:4:28", - "nodeType": "VariableDeclaration", - "scope": 3795, - "src": "6356:12:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3791, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6356:7:28", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3794, - "mutability": "mutable", - "name": "thawingNonce", - "nameLocation": "6442:12:28", - "nodeType": "VariableDeclaration", - "scope": 3795, - "src": "6434:20:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3793, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6434:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "ThawRequest", - "nameLocation": "6085:11:28", - "nodeType": "StructDefinition", - "scope": 3796, - "src": "6078:383:28", - "visibility": "public" - } - ], - "scope": 3797, - "src": "568:5895:28", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:6418:28" - }, - "id": 28 - }, - "@graphprotocol/horizon/contracts/libraries/LinkedList.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/LinkedList.sol", - "exportedSymbols": { - "LinkedList": [ - 4087 - ] - }, - "id": 4088, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3798, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:29" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "LinkedList", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 3799, - "nodeType": "StructuredDocumentation", - "src": "71:574:29", - "text": " @title LinkedList library\n @notice A library to manage singly linked lists.\n The library makes no assumptions about the contents of the items, the only\n requirements on the items are:\n - they must be represented by a unique bytes32 id\n - the id of the item must not be bytes32(0)\n - each item must have a reference to the next item in the list\n - the list cannot have more than `MAX_ITEMS` items\n A contract using this library must store:\n - a LinkedList.List to keep track of the list metadata\n - a mapping from bytes32 to the item data" - }, - "fullyImplemented": true, - "id": 4087, - "linearizedBaseContracts": [ - 4087 - ], - "name": "LinkedList", - "nameLocation": "654:10:29", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 3803, - "libraryName": { - "id": 3800, - "name": "LinkedList", - "nameLocations": [ - "677:10:29" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4087, - "src": "677:10:29" - }, - "nodeType": "UsingForDirective", - "src": "671:26:29", - "typeName": { - "id": 3802, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3801, - "name": "List", - "nameLocations": [ - "692:4:29" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3813, - "src": "692:4:29" - }, - "referencedDeclaration": 3813, - "src": "692:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - } - } - }, - { - "canonicalName": "LinkedList.List", - "documentation": { - "id": 3804, - "nodeType": "StructuredDocumentation", - "src": "703:36:29", - "text": "@notice Represents a linked list" - }, - "id": 3813, - "members": [ - { - "constant": false, - "id": 3806, - "mutability": "mutable", - "name": "head", - "nameLocation": "806:4:29", - "nodeType": "VariableDeclaration", - "scope": 3813, - "src": "798:12:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3805, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "798:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3808, - "mutability": "mutable", - "name": "tail", - "nameLocation": "860:4:29", - "nodeType": "VariableDeclaration", - "scope": 3813, - "src": "852:12:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3807, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "852:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3810, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "954:5:29", - "nodeType": "VariableDeclaration", - "scope": 3813, - "src": "946:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3809, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "946:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3812, - "mutability": "mutable", - "name": "count", - "nameLocation": "1020:5:29", - "nodeType": "VariableDeclaration", - "scope": 3813, - "src": "1012:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3811, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1012:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "List", - "nameLocation": "751:4:29", - "nodeType": "StructDefinition", - "scope": 4087, - "src": "744:288:29", - "visibility": "public" - }, - { - "constant": true, - "documentation": { - "id": 3814, - "nodeType": "StructuredDocumentation", - "src": "1038:32:29", - "text": "@notice Empty bytes constant" - }, - "id": 3820, - "mutability": "constant", - "name": "NULL_BYTES", - "nameLocation": "1099:10:29", - "nodeType": "VariableDeclaration", - "scope": 4087, - "src": "1075:46:29", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3815, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1075:5:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": { - "arguments": [ - { - "hexValue": "", - "id": 3818, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1118:2:29", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "id": 3817, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1112:5:29", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 3816, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1112:5:29", - "typeDescriptions": {} - } - }, - "id": 3819, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1112:9:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "documentation": { - "id": 3821, - "nodeType": "StructuredDocumentation", - "src": "1128:55:29", - "text": "@notice Maximum amount of items allowed in the list" - }, - "id": 3824, - "mutability": "constant", - "name": "MAX_ITEMS", - "nameLocation": "1214:9:29", - "nodeType": "VariableDeclaration", - "scope": 4087, - "src": "1188:44:29", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3822, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1188:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31305f303030", - "id": 3823, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1226:6:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - }, - "value": "10_000" - }, - "visibility": "internal" - }, - { - "documentation": { - "id": 3825, - "nodeType": "StructuredDocumentation", - "src": "1239:82:29", - "text": " @notice Thrown when trying to remove an item from an empty list" - }, - "errorSelector": "ddaf8f21", - "id": 3827, - "name": "LinkedListEmptyList", - "nameLocation": "1332:19:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3826, - "nodeType": "ParameterList", - "parameters": [], - "src": "1351:2:29" - }, - "src": "1326:28:29" - }, - { - "documentation": { - "id": 3828, - "nodeType": "StructuredDocumentation", - "src": "1360:118:29", - "text": " @notice Thrown when trying to add an item to a list that has reached the maximum number of elements" - }, - "errorSelector": "ea315ac0", - "id": 3830, - "name": "LinkedListMaxElementsExceeded", - "nameLocation": "1489:29:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3829, - "nodeType": "ParameterList", - "parameters": [], - "src": "1518:2:29" - }, - "src": "1483:38:29" - }, - { - "documentation": { - "id": 3831, - "nodeType": "StructuredDocumentation", - "src": "1527:99:29", - "text": " @notice Thrown when trying to traverse a list with more iterations than elements" - }, - "errorSelector": "9482373a", - "id": 3833, - "name": "LinkedListInvalidIterations", - "nameLocation": "1637:27:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3832, - "nodeType": "ParameterList", - "parameters": [], - "src": "1664:2:29" - }, - "src": "1631:36:29" - }, - { - "documentation": { - "id": 3834, - "nodeType": "StructuredDocumentation", - "src": "1673:88:29", - "text": " @notice Thrown when trying to add an item with id equal to bytes32(0)" - }, - "errorSelector": "8f4a893d", - "id": 3836, - "name": "LinkedListInvalidZeroId", - "nameLocation": "1772:23:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3835, - "nodeType": "ParameterList", - "parameters": [], - "src": "1795:2:29" - }, - "src": "1766:32:29" - }, - { - "body": { - "id": 3894, - "nodeType": "Block", - "src": "2314:262:29", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3849, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 3846, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3840, - "src": "2332:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3847, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2337:5:29", - "memberName": "count", - "nodeType": "MemberAccess", - "referencedDeclaration": 3812, - "src": "2332:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 3848, - "name": "MAX_ITEMS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "2345:9:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2332:22:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3850, - "name": "LinkedListMaxElementsExceeded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2356:29:29", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 3851, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2356:31:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 3845, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2324:7:29", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 3852, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2324:64:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3853, - "nodeType": "ExpressionStatement", - "src": "2324:64:29" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 3860, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3855, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3842, - "src": "2406:2:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 3858, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2420:1:29", - "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": 3857, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2412:7:29", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 3856, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2412:7:29", - "typeDescriptions": {} - } - }, - "id": 3859, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2412:10:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "2406:16:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3861, - "name": "LinkedListInvalidZeroId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3836, - "src": "2424:23:29", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 3862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2424:25:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 3854, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2398:7:29", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 3863, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2398:52:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3864, - "nodeType": "ExpressionStatement", - "src": "2398:52:29" - }, - { - "expression": { - "id": 3869, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3865, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3840, - "src": "2460:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3867, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "2465:4:29", - "memberName": "tail", - "nodeType": "MemberAccess", - "referencedDeclaration": 3808, - "src": "2460:9:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3868, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3842, - "src": "2472:2:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "2460:14:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 3870, - "nodeType": "ExpressionStatement", - "src": "2460:14:29" - }, - { - "expression": { - "id": 3875, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3871, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3840, - "src": "2484:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3873, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "2489:5:29", - "memberName": "nonce", - "nodeType": "MemberAccess", - "referencedDeclaration": 3810, - "src": "2484:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "31", - "id": 3874, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2498:1:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "2484:15:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3876, - "nodeType": "ExpressionStatement", - "src": "2484:15:29" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3880, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 3877, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3840, - "src": "2513:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3878, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2518:5:29", - "memberName": "count", - "nodeType": "MemberAccess", - "referencedDeclaration": 3812, - "src": "2513:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 3879, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2527:1:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2513:15:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3887, - "nodeType": "IfStatement", - "src": "2509:35:29", - "trueBody": { - "expression": { - "id": 3885, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3881, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3840, - "src": "2530:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3883, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "2535:4:29", - "memberName": "head", - "nodeType": "MemberAccess", - "referencedDeclaration": 3806, - "src": "2530:9:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3884, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3842, - "src": "2542:2:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "2530:14:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 3886, - "nodeType": "ExpressionStatement", - "src": "2530:14:29" - } - }, - { - "expression": { - "id": 3892, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3888, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3840, - "src": "2554:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3890, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "2559:5:29", - "memberName": "count", - "nodeType": "MemberAccess", - "referencedDeclaration": 3812, - "src": "2554:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "31", - "id": 3891, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2568:1:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "2554:15:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3893, - "nodeType": "ExpressionStatement", - "src": "2554:15:29" - } - ] - }, - "documentation": { - "id": 3837, - "nodeType": "StructuredDocumentation", - "src": "1804:448:29", - "text": " @notice Adds an item to the list.\n The item is added to the end of the list.\n @dev Note that this function will not take care of linking the\n old tail to the new item. The caller should take care of this.\n It will also not ensure id uniqueness.\n @dev There is a maximum number of elements that can be added to the list.\n @param self The list metadata\n @param id The id of the item to add" - }, - "id": 3895, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "addTail", - "nameLocation": "2266:7:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3843, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3840, - "mutability": "mutable", - "name": "self", - "nameLocation": "2287:4:29", - "nodeType": "VariableDeclaration", - "scope": 3895, - "src": "2274:17:29", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - }, - "typeName": { - "id": 3839, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3838, - "name": "List", - "nameLocations": [ - "2274:4:29" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3813, - "src": "2274:4:29" - }, - "referencedDeclaration": 3813, - "src": "2274:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3842, - "mutability": "mutable", - "name": "id", - "nameLocation": "2301:2:29", - "nodeType": "VariableDeclaration", - "scope": 3895, - "src": "2293:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3841, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2293:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2273:31:29" - }, - "returnParameters": { - "id": 3844, - "nodeType": "ParameterList", - "parameters": [], - "src": "2314:0:29" - }, - "scope": 4087, - "src": "2257:319:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3968, - "nodeType": "Block", - "src": "3232:279:29", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3922, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 3919, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3899, - "src": "3250:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3920, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3255:5:29", - "memberName": "count", - "nodeType": "MemberAccess", - "referencedDeclaration": 3812, - "src": "3250:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 3921, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3263:1:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3250:14:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3923, - "name": "LinkedListEmptyList", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3827, - "src": "3266:19:29", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 3924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3266:21:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 3918, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3242:7:29", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 3925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3242:46:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3926, - "nodeType": "ExpressionStatement", - "src": "3242:46:29" - }, - { - "assignments": [ - 3928 - ], - "declarations": [ - { - "constant": false, - "id": 3928, - "mutability": "mutable", - "name": "nextItem", - "nameLocation": "3306:8:29", - "nodeType": "VariableDeclaration", - "scope": 3968, - "src": "3298:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3927, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3298:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 3933, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 3930, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3899, - "src": "3329:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3931, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3334:4:29", - "memberName": "head", - "nodeType": "MemberAccess", - "referencedDeclaration": 3806, - "src": "3329:9:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 3929, - "name": "getNextItem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3907, - "src": "3317:11:29", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - } - }, - "id": 3932, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3317:22:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3298:41:29" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 3935, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3899, - "src": "3360:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3936, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3365:4:29", - "memberName": "head", - "nodeType": "MemberAccess", - "referencedDeclaration": 3806, - "src": "3360:9:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 3934, - "name": "deleteItem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3913, - "src": "3349:10:29", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - } - }, - "id": 3937, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3349:21:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3938, - "nodeType": "ExpressionStatement", - "src": "3349:21:29" - }, - { - "expression": { - "id": 3943, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3939, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3899, - "src": "3380:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3941, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3385:5:29", - "memberName": "count", - "nodeType": "MemberAccess", - "referencedDeclaration": 3812, - "src": "3380:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "hexValue": "31", - "id": 3942, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3394:1:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3380:15:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3944, - "nodeType": "ExpressionStatement", - "src": "3380:15:29" - }, - { - "expression": { - "id": 3949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3945, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3899, - "src": "3405:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3947, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3410:4:29", - "memberName": "head", - "nodeType": "MemberAccess", - "referencedDeclaration": 3806, - "src": "3405:9:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3948, - "name": "nextItem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3928, - "src": "3417:8:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "3405:20:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 3950, - "nodeType": "ExpressionStatement", - "src": "3405:20:29" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3954, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 3951, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3899, - "src": "3439:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3952, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3444:5:29", - "memberName": "count", - "nodeType": "MemberAccess", - "referencedDeclaration": 3812, - "src": "3439:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 3953, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3453:1:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3439:15:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3964, - "nodeType": "IfStatement", - "src": "3435:43:29", - "trueBody": { - "expression": { - "id": 3962, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3955, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3899, - "src": "3456:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3957, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3461:4:29", - "memberName": "tail", - "nodeType": "MemberAccess", - "referencedDeclaration": 3808, - "src": "3456:9:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "hexValue": "30", - "id": 3960, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3476:1:29", - "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": 3959, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3468:7:29", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 3958, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3468:7:29", - "typeDescriptions": {} - } - }, - "id": 3961, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3468:10:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "3456:22:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 3963, - "nodeType": "ExpressionStatement", - "src": "3456:22:29" - } - }, - { - "expression": { - "expression": { - "id": 3965, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3899, - "src": "3495:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 3966, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3500:4:29", - "memberName": "head", - "nodeType": "MemberAccess", - "referencedDeclaration": 3806, - "src": "3495:9:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 3917, - "id": 3967, - "nodeType": "Return", - "src": "3488:16:29" - } - ] - }, - "documentation": { - "id": 3896, - "nodeType": "StructuredDocumentation", - "src": "2582:465:29", - "text": " @notice Removes an item from the list.\n The item is removed from the beginning of the list.\n @param self The list metadata\n @param getNextItem A function to get the next item in the list. It should take\n the id of the current item and return the id of the next item.\n @param deleteItem A function to delete an item. This should delete the item from\n the contract storage. It takes the id of the item to delete." - }, - "id": 3969, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "removeHead", - "nameLocation": "3061:10:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3914, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3899, - "mutability": "mutable", - "name": "self", - "nameLocation": "3094:4:29", - "nodeType": "VariableDeclaration", - "scope": 3969, - "src": "3081:17:29", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - }, - "typeName": { - "id": 3898, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3897, - "name": "List", - "nameLocations": [ - "3081:4:29" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3813, - "src": "3081:4:29" - }, - "referencedDeclaration": 3813, - "src": "3081:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3907, - "mutability": "mutable", - "name": "getNextItem", - "nameLocation": "3149:11:29", - "nodeType": "VariableDeclaration", - "scope": 3969, - "src": "3108:52:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - }, - "typeName": { - "id": 3906, - "nodeType": "FunctionTypeName", - "parameterTypes": { - "id": 3902, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3901, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3906, - "src": "3117:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3900, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3117:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3116:9:29" - }, - "returnParameterTypes": { - "id": 3905, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3904, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3906, - "src": "3140:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3903, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3140:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3139:9:29" - }, - "src": "3108:52:29", - "stateMutability": "view", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - }, - "visibility": "internal" - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3913, - "mutability": "mutable", - "name": "deleteItem", - "nameLocation": "3188:10:29", - "nodeType": "VariableDeclaration", - "scope": 3969, - "src": "3170:28:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - }, - "typeName": { - "id": 3912, - "nodeType": "FunctionTypeName", - "parameterTypes": { - "id": 3910, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3909, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3912, - "src": "3179:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3908, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3179:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3178:9:29" - }, - "returnParameterTypes": { - "id": 3911, - "nodeType": "ParameterList", - "parameters": [], - "src": "3188:0:29" - }, - "src": "3170:28:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - }, - "visibility": "internal" - }, - "visibility": "internal" - } - ], - "src": "3071:133:29" - }, - "returnParameters": { - "id": 3917, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3916, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3969, - "src": "3223:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3915, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3223:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3222:9:29" - }, - "scope": 4087, - "src": "3052:459:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4085, - "nodeType": "Block", - "src": "4818:606:29", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4014, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4011, - "name": "iterations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4003, - "src": "4836:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "id": 4012, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3973, - "src": "4850:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 4013, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4855:5:29", - "memberName": "count", - "nodeType": "MemberAccess", - "referencedDeclaration": 3812, - "src": "4850:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4836:24:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4015, - "name": "LinkedListInvalidIterations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3833, - "src": "4862:27:29", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 4016, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4862:29:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 4010, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "4828:7:29", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 4017, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4828:64:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4018, - "nodeType": "ExpressionStatement", - "src": "4828:64:29" - }, - { - "assignments": [ - 4020 - ], - "declarations": [ - { - "constant": false, - "id": 4020, - "mutability": "mutable", - "name": "itemCount", - "nameLocation": "4911:9:29", - "nodeType": "VariableDeclaration", - "scope": 4085, - "src": "4903:17:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4019, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4903:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4022, - "initialValue": { - "hexValue": "30", - "id": 4021, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4923:1:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "4903:21:29" - }, - { - "expression": { - "id": 4032, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4023, - "name": "iterations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4003, - "src": "4934:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4024, - "name": "iterations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4003, - "src": "4948:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 4025, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4962:1:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4948:15:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 4027, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4947:17:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 4030, - "name": "iterations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4003, - "src": "4980:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4031, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "4947:43:29", - "trueExpression": { - "expression": { - "id": 4028, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3973, - "src": "4967:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 4029, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4972:5:29", - "memberName": "count", - "nodeType": "MemberAccess", - "referencedDeclaration": 3812, - "src": "4967:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4934:56:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4033, - "nodeType": "ExpressionStatement", - "src": "4934:56:29" - }, - { - "assignments": [ - 4035 - ], - "declarations": [ - { - "constant": false, - "id": 4035, - "mutability": "mutable", - "name": "cursor", - "nameLocation": "5009:6:29", - "nodeType": "VariableDeclaration", - "scope": 4085, - "src": "5001:14:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 4034, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5001:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 4038, - "initialValue": { - "expression": { - "id": 4036, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3973, - "src": "5018:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 4037, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5023:4:29", - "memberName": "head", - "nodeType": "MemberAccess", - "referencedDeclaration": 3806, - "src": "5018:9:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5001:26:29" - }, - { - "body": { - "id": 4079, - "nodeType": "Block", - "src": "5085:288:29", - "statements": [ - { - "assignments": [ - 4050, - 4052 - ], - "declarations": [ - { - "constant": false, - "id": 4050, - "mutability": "mutable", - "name": "shouldBreak", - "nameLocation": "5105:11:29", - "nodeType": "VariableDeclaration", - "scope": 4079, - "src": "5100:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4049, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5100:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4052, - "mutability": "mutable", - "name": "acc_", - "nameLocation": "5131:4:29", - "nodeType": "VariableDeclaration", - "scope": 4079, - "src": "5118:17:29", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4051, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5118:5:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 4057, - "initialValue": { - "arguments": [ - { - "id": 4054, - "name": "cursor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4035, - "src": "5151:6:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 4055, - "name": "processInitAcc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4001, - "src": "5159:14:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 4053, - "name": "processItem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3993, - "src": "5139:11:29", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes32,bytes memory) returns (bool,bytes memory)" - } - }, - "id": 4056, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5139:35:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5099:75:29" - }, - { - "condition": { - "id": 4058, - "name": "shouldBreak", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4050, - "src": "5193:11:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4060, - "nodeType": "IfStatement", - "src": "5189:22:29", - "trueBody": { - "id": 4059, - "nodeType": "Break", - "src": "5206:5:29" - } - }, - { - "expression": { - "id": 4063, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4061, - "name": "processInitAcc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4001, - "src": "5226:14:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4062, - "name": "acc_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4052, - "src": "5243:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "src": "5226:21:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 4064, - "nodeType": "ExpressionStatement", - "src": "5226:21:29" - }, - { - "expression": { - "id": 4071, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4065, - "name": "cursor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4035, - "src": "5261:6:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4068, - "name": "getNextItem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3981, - "src": "5286:11:29", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - } - }, - { - "id": 4069, - "name": "deleteItem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3999, - "src": "5299:10:29", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - }, - { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - } - ], - "expression": { - "id": 4066, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3973, - "src": "5270:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List storage pointer" - } - }, - "id": 4067, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5275:10:29", - "memberName": "removeHead", - "nodeType": "MemberAccess", - "referencedDeclaration": 3969, - "src": "5270:15:29", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_List_$3813_storage_ptr_$_t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$_$_t_function_internal_nonpayable$_t_bytes32_$returns$__$_$returns$_t_bytes32_$attached_to$_t_struct$_List_$3813_storage_ptr_$", - "typeString": "function (struct LinkedList.List storage pointer,function (bytes32) view returns (bytes32),function (bytes32)) returns (bytes32)" - } - }, - "id": 4070, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5270:40:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "5261:49:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 4072, - "nodeType": "ExpressionStatement", - "src": "5261:49:29" - }, - { - "expression": { - "id": 4074, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "--", - "prefix": false, - "src": "5325:12:29", - "subExpression": { - "id": 4073, - "name": "iterations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4003, - "src": "5325:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4075, - "nodeType": "ExpressionStatement", - "src": "5325:12:29" - }, - { - "expression": { - "id": 4077, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "5351:11:29", - "subExpression": { - "id": 4076, - "name": "itemCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4020, - "src": "5351:9:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4078, - "nodeType": "ExpressionStatement", - "src": "5351:11:29" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 4048, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 4044, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4039, - "name": "cursor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4035, - "src": "5045:6:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4042, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5063:1:29", - "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": 4041, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5055:7:29", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 4040, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5055:7:29", - "typeDescriptions": {} - } - }, - "id": 4043, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5055:10:29", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "5045:20:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4045, - "name": "iterations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4003, - "src": "5069:10:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 4046, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5082:1:29", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5069:14:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "5045:38:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4080, - "nodeType": "WhileStatement", - "src": "5038:335:29" - }, - { - "expression": { - "components": [ - { - "id": 4081, - "name": "itemCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4020, - "src": "5391:9:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 4082, - "name": "processInitAcc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4001, - "src": "5402:14:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "id": 4083, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "5390:27:29", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_bytes_memory_ptr_$", - "typeString": "tuple(uint256,bytes memory)" - } - }, - "functionReturnParameters": 4009, - "id": 4084, - "nodeType": "Return", - "src": "5383:34:29" - } - ] - }, - "documentation": { - "id": 3970, - "nodeType": "StructuredDocumentation", - "src": "3517:957:29", - "text": " @notice Traverses the list and processes each item.\n It deletes the processed items from both the list and the storage mapping.\n @param self The list metadata\n @param getNextItem A function to get the next item in the list. It should take\n the id of the current item and return the id of the next item.\n @param processItem A function to process an item. The function should take the id of the item\n and an accumulator, and return:\n - a boolean indicating whether the traversal should stop\n - an accumulator to pass data between iterations\n @param deleteItem A function to delete an item. This should delete the item from\n the contract storage. It takes the id of the item to delete.\n @param processInitAcc The initial accumulator data\n @param iterations The maximum number of iterations to perform. If 0, the traversal will continue\n until the end of the list." - }, - "id": 4086, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "traverse", - "nameLocation": "4488:8:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4004, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3973, - "mutability": "mutable", - "name": "self", - "nameLocation": "4519:4:29", - "nodeType": "VariableDeclaration", - "scope": 4086, - "src": "4506:17:29", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - }, - "typeName": { - "id": 3972, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3971, - "name": "List", - "nameLocations": [ - "4506:4:29" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3813, - "src": "4506:4:29" - }, - "referencedDeclaration": 3813, - "src": "4506:4:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_List_$3813_storage_ptr", - "typeString": "struct LinkedList.List" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3981, - "mutability": "mutable", - "name": "getNextItem", - "nameLocation": "4574:11:29", - "nodeType": "VariableDeclaration", - "scope": 4086, - "src": "4533:52:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - }, - "typeName": { - "id": 3980, - "nodeType": "FunctionTypeName", - "parameterTypes": { - "id": 3976, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3975, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3980, - "src": "4542:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3974, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4542:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4541:9:29" - }, - "returnParameterTypes": { - "id": 3979, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3978, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3980, - "src": "4565:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3977, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4565:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4564:9:29" - }, - "src": "4533:52:29", - "stateMutability": "view", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - }, - "visibility": "internal" - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3993, - "mutability": "mutable", - "name": "processItem", - "nameLocation": "4656:11:29", - "nodeType": "VariableDeclaration", - "scope": 4086, - "src": "4595:72:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes32,bytes) returns (bool,bytes)" - }, - "typeName": { - "id": 3992, - "nodeType": "FunctionTypeName", - "parameterTypes": { - "id": 3986, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3983, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3992, - "src": "4604:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3982, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4604:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3985, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3992, - "src": "4613:12:29", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3984, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4613:5:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4603:23:29" - }, - "returnParameterTypes": { - "id": 3991, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3988, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3992, - "src": "4636:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3987, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4636:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3990, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3992, - "src": "4642:12:29", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3989, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4642:5:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4635:20:29" - }, - "src": "4595:72:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes32,bytes) returns (bool,bytes)" - }, - "visibility": "internal" - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3999, - "mutability": "mutable", - "name": "deleteItem", - "nameLocation": "4695:10:29", - "nodeType": "VariableDeclaration", - "scope": 4086, - "src": "4677:28:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - }, - "typeName": { - "id": 3998, - "nodeType": "FunctionTypeName", - "parameterTypes": { - "id": 3996, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3995, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3998, - "src": "4686:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3994, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4686:7:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4685:9:29" - }, - "returnParameterTypes": { - "id": 3997, - "nodeType": "ParameterList", - "parameters": [], - "src": "4695:0:29" - }, - "src": "4677:28:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - }, - "visibility": "internal" - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4001, - "mutability": "mutable", - "name": "processInitAcc", - "nameLocation": "4728:14:29", - "nodeType": "VariableDeclaration", - "scope": 4086, - "src": "4715:27:29", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4000, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4715:5:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4003, - "mutability": "mutable", - "name": "iterations", - "nameLocation": "4760:10:29", - "nodeType": "VariableDeclaration", - "scope": 4086, - "src": "4752:18:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4002, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4752:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4496:280:29" - }, - "returnParameters": { - "id": 4009, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4006, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4086, - "src": "4795:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4005, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4795:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4008, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4086, - "src": "4804:12:29", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4007, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4804:5:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4794:23:29" - }, - "scope": 4087, - "src": "4479:945:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 4088, - "src": "646:4780:29", - "usedErrors": [ - 3827, - 3830, - 3833, - 3836 - ], - "usedEvents": [] - } - ], - "src": "46:5381:29" - }, - "id": 29 - }, - "@graphprotocol/horizon/contracts/libraries/MathUtils.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/MathUtils.sol", - "exportedSymbols": { - "MathUtils": [ - 4168 - ] - }, - "id": 4169, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4089, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:30" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "MathUtils", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 4090, - "nodeType": "StructuredDocumentation", - "src": "71:99:30", - "text": " @title MathUtils Library\n @notice A collection of functions to perform math operations" - }, - "fullyImplemented": true, - "id": 4168, - "linearizedBaseContracts": [ - 4168 - ], - "name": "MathUtils", - "nameLocation": "179:9:30", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 4127, - "nodeType": "Block", - "src": "880:113:30", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4125, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4119, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4112, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4106, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4104, - "name": "valueA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4093, - "src": "899:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 4105, - "name": "weightA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4095, - "src": "908:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "899:16:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4107, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "898:18:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4110, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4108, - "name": "valueB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4097, - "src": "920:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 4109, - "name": "weightB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4099, - "src": "929:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "920:16:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4111, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "919:18:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "898:39:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4115, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4113, - "name": "weightA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4095, - "src": "941:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 4114, - "name": "weightB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4099, - "src": "951:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "941:17:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 4116, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "961:1:30", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "941:21:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4118, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "940:23:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "898:65:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4120, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "897:67:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4121, - "name": "weightA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4095, - "src": "968:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 4122, - "name": "weightB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4099, - "src": "978:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "968:17:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4124, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "967:19:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "897:89:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4103, - "id": 4126, - "nodeType": "Return", - "src": "890:96:30" - } - ] - }, - "documentation": { - "id": 4091, - "nodeType": "StructuredDocumentation", - "src": "195:509:30", - "text": " @dev Calculates the weighted average of two values pondering each of these\n values based on configured weights. The contribution of each value N is\n weightN/(weightA + weightB). The calculation rounds up to ensure the result\n is always greater than the smallest of the two values.\n @param valueA The amount for value A\n @param weightA The weight to use for value A\n @param valueB The amount for value B\n @param weightB The weight to use for value B" - }, - "id": 4128, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "weightedAverageRoundingUp", - "nameLocation": "718:25:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4100, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4093, - "mutability": "mutable", - "name": "valueA", - "nameLocation": "761:6:30", - "nodeType": "VariableDeclaration", - "scope": 4128, - "src": "753:14:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4092, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "753:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4095, - "mutability": "mutable", - "name": "weightA", - "nameLocation": "785:7:30", - "nodeType": "VariableDeclaration", - "scope": 4128, - "src": "777:15:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4094, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "777:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4097, - "mutability": "mutable", - "name": "valueB", - "nameLocation": "810:6:30", - "nodeType": "VariableDeclaration", - "scope": 4128, - "src": "802:14:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4096, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "802:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4099, - "mutability": "mutable", - "name": "weightB", - "nameLocation": "834:7:30", - "nodeType": "VariableDeclaration", - "scope": 4128, - "src": "826:15:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4098, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "826:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "743:104:30" - }, - "returnParameters": { - "id": 4103, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4102, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4128, - "src": "871:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4101, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "871:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "870:9:30" - }, - "scope": 4168, - "src": "709:284:30", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4145, - "nodeType": "Block", - "src": "1130:38:30", - "statements": [ - { - "expression": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4138, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4131, - "src": "1147:1:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 4139, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4133, - "src": "1152:1:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1147:6:30", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 4142, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4133, - "src": "1160:1:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4143, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "1147:14:30", - "trueExpression": { - "id": 4141, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4131, - "src": "1156:1:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4137, - "id": 4144, - "nodeType": "Return", - "src": "1140:21:30" - } - ] - }, - "documentation": { - "id": 4129, - "nodeType": "StructuredDocumentation", - "src": "999:59:30", - "text": " @dev Returns the minimum of two numbers." - }, - "id": 4146, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "min", - "nameLocation": "1072:3:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4134, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4131, - "mutability": "mutable", - "name": "x", - "nameLocation": "1084:1:30", - "nodeType": "VariableDeclaration", - "scope": 4146, - "src": "1076:9:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4130, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1076:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4133, - "mutability": "mutable", - "name": "y", - "nameLocation": "1095:1:30", - "nodeType": "VariableDeclaration", - "scope": 4146, - "src": "1087:9:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4132, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1087:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1075:22:30" - }, - "returnParameters": { - "id": 4137, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4136, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4146, - "src": "1121:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4135, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1121:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1120:9:30" - }, - "scope": 4168, - "src": "1063:105:30", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4166, - "nodeType": "Block", - "src": "1340:43:30", - "statements": [ - { - "expression": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4158, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4156, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4149, - "src": "1358:1:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 4157, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4151, - "src": "1362:1:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1358:5:30", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 4159, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1357:7:30", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 4163, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1375:1:30", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 4164, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "1357:19:30", - "trueExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4160, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4149, - "src": "1367:1:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 4161, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4151, - "src": "1371:1:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1367:5:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4155, - "id": 4165, - "nodeType": "Return", - "src": "1350:26:30" - } - ] - }, - "documentation": { - "id": 4147, - "nodeType": "StructuredDocumentation", - "src": "1174:87:30", - "text": " @dev Returns the difference between two numbers or zero if negative." - }, - "id": 4167, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "diffOrZero", - "nameLocation": "1275:10:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4152, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4149, - "mutability": "mutable", - "name": "x", - "nameLocation": "1294:1:30", - "nodeType": "VariableDeclaration", - "scope": 4167, - "src": "1286:9:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4148, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1286:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4151, - "mutability": "mutable", - "name": "y", - "nameLocation": "1305:1:30", - "nodeType": "VariableDeclaration", - "scope": 4167, - "src": "1297:9:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4150, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1297:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1285:22:30" - }, - "returnParameters": { - "id": 4155, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4154, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4167, - "src": "1331:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4153, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1331:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1330:9:30" - }, - "scope": 4168, - "src": "1266:117:30", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 4169, - "src": "171:1214:30", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:1340:30" - }, - "id": 30 - }, - "@graphprotocol/horizon/contracts/libraries/PPMMath.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", - "exportedSymbols": { - "PPMMath": [ - 4262 - ] - }, - "id": 4263, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4170, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:31" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "PPMMath", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 4171, - "nodeType": "StructuredDocumentation", - "src": "70:118:31", - "text": " @title PPMMath library\n @notice A library for handling calculations with parts per million (PPM) amounts." - }, - "fullyImplemented": true, - "id": 4262, - "linearizedBaseContracts": [ - 4262 - ], - "name": "PPMMath", - "nameLocation": "197:7:31", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "documentation": { - "id": 4172, - "nodeType": "StructuredDocumentation", - "src": "211:60:31", - "text": "@notice Maximum value (100%) in parts per million (PPM)." - }, - "id": 4175, - "mutability": "constant", - "name": "MAX_PPM", - "nameLocation": "302:7:31", - "nodeType": "VariableDeclaration", - "scope": 4262, - "src": "276:45:31", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4173, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "276:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "315f3030305f303030", - "id": 4174, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "312:9:31", - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1_000_000" - }, - "visibility": "internal" - }, - { - "documentation": { - "id": 4176, - "nodeType": "StructuredDocumentation", - "src": "328:133:31", - "text": " @notice Thrown when a value is expected to be in PPM but is not.\n @param value The value that is not in PPM." - }, - "errorSelector": "3dc311df", - "id": 4180, - "name": "PPMMathInvalidPPM", - "nameLocation": "472:17:31", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4179, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4178, - "mutability": "mutable", - "name": "value", - "nameLocation": "498:5:31", - "nodeType": "VariableDeclaration", - "scope": 4180, - "src": "490:13:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4177, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "490:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "489:15:31" - }, - "src": "466:39:31" - }, - { - "documentation": { - "id": 4181, - "nodeType": "StructuredDocumentation", - "src": "511:189:31", - "text": " @notice Thrown when no value in a multiplication is in PPM.\n @param a The first value in the multiplication.\n @param b The second value in the multiplication." - }, - "errorSelector": "ed17e1d6", - "id": 4187, - "name": "PPMMathInvalidMulPPM", - "nameLocation": "711:20:31", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4186, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4183, - "mutability": "mutable", - "name": "a", - "nameLocation": "740:1:31", - "nodeType": "VariableDeclaration", - "scope": 4187, - "src": "732:9:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4182, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "732:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4185, - "mutability": "mutable", - "name": "b", - "nameLocation": "751:1:31", - "nodeType": "VariableDeclaration", - "scope": 4187, - "src": "743:9:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4184, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "743:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "731:22:31" - }, - "src": "705:49:31" - }, - { - "body": { - "id": 4218, - "nodeType": "Block", - "src": "1029:118:31", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 4204, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 4199, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4190, - "src": "1058:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4198, - "name": "isValidPPM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4261, - "src": "1047:10:31", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) pure returns (bool)" - } - }, - "id": 4200, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1047:13:31", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "arguments": [ - { - "id": 4202, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4192, - "src": "1075:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4201, - "name": "isValidPPM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4261, - "src": "1064:10:31", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) pure returns (bool)" - } - }, - "id": 4203, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1064:13:31", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1047:30:31", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 4206, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4190, - "src": "1100:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 4207, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4192, - "src": "1103:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4205, - "name": "PPMMathInvalidMulPPM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4187, - "src": "1079:20:31", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 4208, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1079:26:31", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 4197, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1039:7:31", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 4209, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1039:67:31", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4210, - "nodeType": "ExpressionStatement", - "src": "1039:67:31" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4216, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4213, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4211, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4190, - "src": "1124:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 4212, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4192, - "src": "1128:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1124:5:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4214, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1123:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 4215, - "name": "MAX_PPM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4175, - "src": "1133:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1123:17:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4196, - "id": 4217, - "nodeType": "Return", - "src": "1116:24:31" - } - ] - }, - "documentation": { - "id": 4188, - "nodeType": "StructuredDocumentation", - "src": "760:194:31", - "text": " @notice Multiplies two values, one of which must be in PPM.\n @param a The first value.\n @param b The second value.\n @return The result of the multiplication." - }, - "id": 4219, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mulPPM", - "nameLocation": "968:6:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4193, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4190, - "mutability": "mutable", - "name": "a", - "nameLocation": "983:1:31", - "nodeType": "VariableDeclaration", - "scope": 4219, - "src": "975:9:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4189, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "975:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4192, - "mutability": "mutable", - "name": "b", - "nameLocation": "994:1:31", - "nodeType": "VariableDeclaration", - "scope": 4219, - "src": "986:9:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4191, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "986:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "974:22:31" - }, - "returnParameters": { - "id": 4196, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4195, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4219, - "src": "1020:7:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4194, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1020:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1019:9:31" - }, - "scope": 4262, - "src": "959:188:31", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4247, - "nodeType": "Block", - "src": "1476:104:31", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 4231, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4224, - "src": "1505:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4230, - "name": "isValidPPM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4261, - "src": "1494:10:31", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) pure returns (bool)" - } - }, - "id": 4232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1494:13:31", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 4234, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4224, - "src": "1527:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4233, - "name": "PPMMathInvalidPPM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4180, - "src": "1509:17:31", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256) pure returns (error)" - } - }, - "id": 4235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1509:20:31", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 4229, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1486:7:31", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 4236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1486:44:31", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4237, - "nodeType": "ExpressionStatement", - "src": "1486:44:31" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4245, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4238, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4222, - "src": "1547:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "arguments": [ - { - "id": 4240, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4222, - "src": "1558:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4243, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4241, - "name": "MAX_PPM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4175, - "src": "1561:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 4242, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4224, - "src": "1571:1:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1561:11:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4239, - "name": "mulPPM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4219, - "src": "1551:6:31", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 4244, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1551:22:31", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1547:26:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4228, - "id": 4246, - "nodeType": "Return", - "src": "1540:33:31" - } - ] - }, - "documentation": { - "id": 4220, - "nodeType": "StructuredDocumentation", - "src": "1153:241:31", - "text": " @notice Multiplies two values, the second one must be in PPM, and rounds up the result.\n @dev requirements:\n - The second value must be in PPM.\n @param a The first value.\n @param b The second value." - }, - "id": 4248, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mulPPMRoundUp", - "nameLocation": "1408:13:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4225, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4222, - "mutability": "mutable", - "name": "a", - "nameLocation": "1430:1:31", - "nodeType": "VariableDeclaration", - "scope": 4248, - "src": "1422:9:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4221, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1422:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4224, - "mutability": "mutable", - "name": "b", - "nameLocation": "1441:1:31", - "nodeType": "VariableDeclaration", - "scope": 4248, - "src": "1433:9:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4223, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1433:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1421:22:31" - }, - "returnParameters": { - "id": 4228, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4227, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4248, - "src": "1467:7:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4226, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1467:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1466:9:31" - }, - "scope": 4262, - "src": "1399:181:31", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4260, - "nodeType": "Block", - "src": "1806:40:31", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4256, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4251, - "src": "1823:5:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 4257, - "name": "MAX_PPM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4175, - "src": "1832:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1823:16:31", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 4255, - "id": 4259, - "nodeType": "Return", - "src": "1816:23:31" - } - ] - }, - "documentation": { - "id": 4249, - "nodeType": "StructuredDocumentation", - "src": "1586:151:31", - "text": " @notice Checks if a value is in PPM.\n @dev A valid PPM value is between 0 and MAX_PPM.\n @param value The value to check." - }, - "id": 4261, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isValidPPM", - "nameLocation": "1751:10:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4252, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4251, - "mutability": "mutable", - "name": "value", - "nameLocation": "1770:5:31", - "nodeType": "VariableDeclaration", - "scope": 4261, - "src": "1762:13:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4250, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1762:7:31", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1761:15:31" - }, - "returnParameters": { - "id": 4255, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4254, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4261, - "src": "1800:4:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4253, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1800:4:31", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1799:6:31" - }, - "scope": 4262, - "src": "1742:104:31", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 4263, - "src": "189:1659:31", - "usedErrors": [ - 4180, - 4187 - ], - "usedEvents": [] - } - ], - "src": "45:1804:31" - }, - "id": 31 - }, - "@graphprotocol/horizon/contracts/libraries/UintRange.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/UintRange.sol", - "exportedSymbols": { - "UintRange": [ - 4290 - ] - }, - "id": 4291, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4264, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:32" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "UintRange", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 4265, - "nodeType": "StructuredDocumentation", - "src": "70:101:32", - "text": " @title UintRange library\n @notice A library for handling range checks on uint256 values." - }, - "fullyImplemented": true, - "id": 4290, - "linearizedBaseContracts": [ - 4290 - ], - "name": "UintRange", - "nameLocation": "180:9:32", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 4268, - "libraryName": { - "id": 4266, - "name": "UintRange", - "nameLocations": [ - "202:9:32" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4290, - "src": "202:9:32" - }, - "nodeType": "UsingForDirective", - "src": "196:28:32", - "typeName": { - "id": 4267, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "216:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "body": { - "id": 4288, - "nodeType": "Block", - "src": "540:52:32", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 4286, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4280, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4271, - "src": "557:5:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 4281, - "name": "min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4273, - "src": "566:3:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "557:12:32", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4285, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4283, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4271, - "src": "573:5:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 4284, - "name": "max", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4275, - "src": "582:3:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "573:12:32", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "557:28:32", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 4279, - "id": 4287, - "nodeType": "Return", - "src": "550:35:32" - } - ] - }, - "documentation": { - "id": 4269, - "nodeType": "StructuredDocumentation", - "src": "230:216:32", - "text": " @notice Checks if a value is in the range [`min`, `max`].\n @param value The value to check.\n @param min The minimum value of the range.\n @param max The maximum value of the range." - }, - "id": 4289, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isInRange", - "nameLocation": "460:9:32", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4276, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4271, - "mutability": "mutable", - "name": "value", - "nameLocation": "478:5:32", - "nodeType": "VariableDeclaration", - "scope": 4289, - "src": "470:13:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4270, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "470:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4273, - "mutability": "mutable", - "name": "min", - "nameLocation": "493:3:32", - "nodeType": "VariableDeclaration", - "scope": 4289, - "src": "485:11:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4272, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "485:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4275, - "mutability": "mutable", - "name": "max", - "nameLocation": "506:3:32", - "nodeType": "VariableDeclaration", - "scope": 4289, - "src": "498:11:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4274, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "498:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "469:41:32" - }, - "returnParameters": { - "id": 4279, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4278, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4289, - "src": "534:4:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4277, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "534:4:32", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "533:6:32" - }, - "scope": 4290, - "src": "451:141:32", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 4291, - "src": "172:422:32", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "45:550:32" - }, - "id": 32 - }, - "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol": { - "ast": { - "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", - "exportedSymbols": { - "GraphDirectory": [ - 4653 - ], - "IController": [ - 279 - ], - "ICuration": [ - 165 - ], - "IEpochManager": [ - 220 - ], - "IGraphPayments": [ - 2211 - ], - "IGraphProxyAdmin": [ - 2215 - ], - "IGraphToken": [ - 518 - ], - "IHorizonStaking": [ - 2235 - ], - "IPaymentsEscrow": [ - 2514 - ], - "IRewardsManager": [ - 438 - ], - "ITokenGateway": [ - 41 - ] - }, - "id": 4654, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4292, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:33" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "file": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "id": 4294, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 519, - "src": "71:87:33", - "symbolAliases": [ - { - "foreign": { - "id": 4293, - "name": "IGraphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 518, - "src": "80:11:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", - "file": "../interfaces/IHorizonStaking.sol", - "id": 4296, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 2236, - "src": "159:68:33", - "symbolAliases": [ - { - "foreign": { - "id": 4295, - "name": "IHorizonStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2235, - "src": "168:15:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "file": "../interfaces/IGraphPayments.sol", - "id": 4298, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 2212, - "src": "228:66:33", - "symbolAliases": [ - { - "foreign": { - "id": 4297, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "237:14:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol", - "file": "../interfaces/IPaymentsEscrow.sol", - "id": 4300, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 2515, - "src": "295:68:33", - "symbolAliases": [ - { - "foreign": { - "id": 4299, - "name": "IPaymentsEscrow", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2514, - "src": "304:15:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/governance/IController.sol", - "file": "@graphprotocol/contracts/contracts/governance/IController.sol", - "id": 4302, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 280, - "src": "365:92:33", - "symbolAliases": [ - { - "foreign": { - "id": 4301, - "name": "IController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 279, - "src": "374:11:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol", - "file": "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol", - "id": 4304, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 221, - "src": "458:92:33", - "symbolAliases": [ - { - "foreign": { - "id": 4303, - "name": "IEpochManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "467:13:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol", - "file": "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol", - "id": 4306, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 439, - "src": "551:97:33", - "symbolAliases": [ - { - "foreign": { - "id": 4305, - "name": "IRewardsManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 438, - "src": "560:15:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol", - "file": "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol", - "id": 4308, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 42, - "src": "649:94:33", - "symbolAliases": [ - { - "foreign": { - "id": 4307, - "name": "ITokenGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 41, - "src": "658:13:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol", - "file": "../interfaces/IGraphProxyAdmin.sol", - "id": 4310, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 2216, - "src": "744:70:33", - "symbolAliases": [ - { - "foreign": { - "id": 4309, - "name": "IGraphProxyAdmin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2215, - "src": "753:16:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/curation/ICuration.sol", - "file": "@graphprotocol/contracts/contracts/curation/ICuration.sol", - "id": 4312, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4654, - "sourceUnit": 166, - "src": "816:86:33", - "symbolAliases": [ - { - "foreign": { - "id": 4311, - "name": "ICuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 165, - "src": "825:9:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "GraphDirectory", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 4313, - "nodeType": "StructuredDocumentation", - "src": "904:315:33", - "text": " @title GraphDirectory contract\n @notice This contract is meant to be inherited by other contracts that\n need to keep track of the addresses in Graph Horizon contracts.\n It fetches the addresses from the Controller supplied during construction,\n and uses immutable variables to minimize gas costs." - }, - "fullyImplemented": true, - "id": 4653, - "linearizedBaseContracts": [ - 4653 - ], - "name": "GraphDirectory", - "nameLocation": "1238:14:33", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 4314, - "nodeType": "StructuredDocumentation", - "src": "1297:44:33", - "text": "@notice The Graph Token contract address" - }, - "id": 4317, - "mutability": "immutable", - "name": "GRAPH_TOKEN", - "nameLocation": "1376:11:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "1346:41:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - }, - "typeName": { - "id": 4316, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4315, - "name": "IGraphToken", - "nameLocations": [ - "1346:11:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 518, - "src": "1346:11:33" - }, - "referencedDeclaration": 518, - "src": "1346:11:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 4318, - "nodeType": "StructuredDocumentation", - "src": "1394:48:33", - "text": "@notice The Horizon Staking contract address" - }, - "id": 4321, - "mutability": "immutable", - "name": "GRAPH_STAKING", - "nameLocation": "1481:13:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "1447:47:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - }, - "typeName": { - "id": 4320, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4319, - "name": "IHorizonStaking", - "nameLocations": [ - "1447:15:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2235, - "src": "1447:15:33" - }, - "referencedDeclaration": 2235, - "src": "1447:15:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 4322, - "nodeType": "StructuredDocumentation", - "src": "1501:47:33", - "text": "@notice The Graph Payments contract address" - }, - "id": 4325, - "mutability": "immutable", - "name": "GRAPH_PAYMENTS", - "nameLocation": "1586:14:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "1553:47:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - }, - "typeName": { - "id": 4324, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4323, - "name": "IGraphPayments", - "nameLocations": [ - "1553:14:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2211, - "src": "1553:14:33" - }, - "referencedDeclaration": 2211, - "src": "1553:14:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 4326, - "nodeType": "StructuredDocumentation", - "src": "1607:48:33", - "text": "@notice The Payments Escrow contract address" - }, - "id": 4329, - "mutability": "immutable", - "name": "GRAPH_PAYMENTS_ESCROW", - "nameLocation": "1694:21:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "1660:55:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - }, - "typeName": { - "id": 4328, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4327, - "name": "IPaymentsEscrow", - "nameLocations": [ - "1660:15:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2514, - "src": "1660:15:33" - }, - "referencedDeclaration": 2514, - "src": "1660:15:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 4330, - "nodeType": "StructuredDocumentation", - "src": "1762:49:33", - "text": "@notice The Graph Controller contract address" - }, - "id": 4333, - "mutability": "immutable", - "name": "GRAPH_CONTROLLER", - "nameLocation": "1846:16:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "1816:46:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - }, - "typeName": { - "id": 4332, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4331, - "name": "IController", - "nameLocations": [ - "1816:11:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 279, - "src": "1816:11:33" - }, - "referencedDeclaration": 279, - "src": "1816:11:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 4334, - "nodeType": "StructuredDocumentation", - "src": "1869:46:33", - "text": "@notice The Epoch Manager contract address" - }, - "id": 4337, - "mutability": "immutable", - "name": "GRAPH_EPOCH_MANAGER", - "nameLocation": "1952:19:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "1920:51:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - }, - "typeName": { - "id": 4336, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4335, - "name": "IEpochManager", - "nameLocations": [ - "1920:13:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 220, - "src": "1920:13:33" - }, - "referencedDeclaration": 220, - "src": "1920:13:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 4338, - "nodeType": "StructuredDocumentation", - "src": "1978:48:33", - "text": "@notice The Rewards Manager contract address" - }, - "id": 4341, - "mutability": "immutable", - "name": "GRAPH_REWARDS_MANAGER", - "nameLocation": "2065:21:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "2031:55:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - }, - "typeName": { - "id": 4340, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4339, - "name": "IRewardsManager", - "nameLocations": [ - "2031:15:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 438, - "src": "2031:15:33" - }, - "referencedDeclaration": 438, - "src": "2031:15:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 4342, - "nodeType": "StructuredDocumentation", - "src": "2093:46:33", - "text": "@notice The Token Gateway contract address" - }, - "id": 4345, - "mutability": "immutable", - "name": "GRAPH_TOKEN_GATEWAY", - "nameLocation": "2176:19:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "2144:51:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - }, - "typeName": { - "id": 4344, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4343, - "name": "ITokenGateway", - "nameLocations": [ - "2144:13:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 41, - "src": "2144:13:33" - }, - "referencedDeclaration": 41, - "src": "2144:13:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 4346, - "nodeType": "StructuredDocumentation", - "src": "2202:50:33", - "text": "@notice The Graph Proxy Admin contract address" - }, - "id": 4349, - "mutability": "immutable", - "name": "GRAPH_PROXY_ADMIN", - "nameLocation": "2292:17:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "2257:52:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - }, - "typeName": { - "id": 4348, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4347, - "name": "IGraphProxyAdmin", - "nameLocations": [ - "2257:16:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2215, - "src": "2257:16:33" - }, - "referencedDeclaration": 2215, - "src": "2257:16:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 4352, - "mutability": "immutable", - "name": "GRAPH_CURATION", - "nameLocation": "2527:14:33", - "nodeType": "VariableDeclaration", - "scope": 4653, - "src": "2499:42:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - }, - "typeName": { - "id": 4351, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4350, - "name": "ICuration", - "nameLocations": [ - "2499:9:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 165, - "src": "2499:9:33" - }, - "referencedDeclaration": 165, - "src": "2499:9:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "visibility": "private" - }, - { - "anonymous": false, - "documentation": { - "id": 4353, - "nodeType": "StructuredDocumentation", - "src": "2548:722:33", - "text": " @notice Emitted when the GraphDirectory is initialized\n @param graphToken The Graph Token contract address\n @param graphStaking The Horizon Staking contract address\n @param graphPayments The Graph Payments contract address\n @param graphEscrow The Payments Escrow contract address\n @param graphController The Graph Controller contract address\n @param graphEpochManager The Epoch Manager contract address\n @param graphRewardsManager The Rewards Manager contract address\n @param graphTokenGateway The Token Gateway contract address\n @param graphProxyAdmin The Graph Proxy Admin contract address\n @param graphCuration The Curation contract address" - }, - "eventSelector": "ef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43", - "id": 4375, - "name": "GraphDirectoryInitialized", - "nameLocation": "3281:25:33", - "nodeType": "EventDefinition", - "parameters": { - "id": 4374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4355, - "indexed": true, - "mutability": "mutable", - "name": "graphToken", - "nameLocation": "3332:10:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3316:26:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4354, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3316:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4357, - "indexed": true, - "mutability": "mutable", - "name": "graphStaking", - "nameLocation": "3368:12:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3352:28:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4356, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3352:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4359, - "indexed": false, - "mutability": "mutable", - "name": "graphPayments", - "nameLocation": "3398:13:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3390:21:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4358, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3390:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4361, - "indexed": false, - "mutability": "mutable", - "name": "graphEscrow", - "nameLocation": "3429:11:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3421:19:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4360, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3421:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4363, - "indexed": true, - "mutability": "mutable", - "name": "graphController", - "nameLocation": "3466:15:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3450:31:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4362, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3450:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4365, - "indexed": false, - "mutability": "mutable", - "name": "graphEpochManager", - "nameLocation": "3499:17:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3491:25:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4364, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3491:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4367, - "indexed": false, - "mutability": "mutable", - "name": "graphRewardsManager", - "nameLocation": "3534:19:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3526:27:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4366, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3526:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4369, - "indexed": false, - "mutability": "mutable", - "name": "graphTokenGateway", - "nameLocation": "3571:17:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3563:25:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4368, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3563:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4371, - "indexed": false, - "mutability": "mutable", - "name": "graphProxyAdmin", - "nameLocation": "3606:15:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3598:23:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4370, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3598:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4373, - "indexed": false, - "mutability": "mutable", - "name": "graphCuration", - "nameLocation": "3639:13:33", - "nodeType": "VariableDeclaration", - "scope": 4375, - "src": "3631:21:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4372, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3631:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3306:352:33" - }, - "src": "3275:384:33" - }, - { - "documentation": { - "id": 4376, - "nodeType": "StructuredDocumentation", - "src": "3665:230:33", - "text": " @notice Thrown when either the controller is the zero address or a contract address is not found\n on the controller\n @param contractName The name of the contract that was not found, or the controller" - }, - "errorSelector": "431eb5ba", - "id": 4380, - "name": "GraphDirectoryInvalidZeroAddress", - "nameLocation": "3906:32:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4379, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4378, - "mutability": "mutable", - "name": "contractName", - "nameLocation": "3945:12:33", - "nodeType": "VariableDeclaration", - "scope": 4380, - "src": "3939:18:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4377, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3939:5:33", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3938:20:33" - }, - "src": "3900:59:33" - }, - { - "body": { - "id": 4519, - "nodeType": "Block", - "src": "4277:1382:33", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4392, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4387, - "name": "controller", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4383, - "src": "4295:10:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4390, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4317:1:33", - "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": 4389, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4309:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4388, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4309:7:33", - "typeDescriptions": {} - } - }, - "id": 4391, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4309:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4295:24:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "hexValue": "436f6e74726f6c6c6572", - "id": 4394, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4354:12:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", - "typeString": "literal_string \"Controller\"" - }, - "value": "Controller" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", - "typeString": "literal_string \"Controller\"" - } - ], - "id": 4393, - "name": "GraphDirectoryInvalidZeroAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4380, - "src": "4321:32:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$", - "typeString": "function (bytes memory) pure returns (error)" - } - }, - "id": 4395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4321:46:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 4386, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "4287:7:33", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 4396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4287:81:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4397, - "nodeType": "ExpressionStatement", - "src": "4287:81:33" - }, - { - "expression": { - "id": 4402, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4398, - "name": "GRAPH_CONTROLLER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4333, - "src": "4379:16:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4400, - "name": "controller", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4383, - "src": "4410:10:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4399, - "name": "IController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 279, - "src": "4398:11:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IController_$279_$", - "typeString": "type(contract IController)" - } - }, - "id": 4401, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4398:23:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - } - }, - "src": "4379:42:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - } - }, - "id": 4403, - "nodeType": "ExpressionStatement", - "src": "4379:42:33" - }, - { - "expression": { - "id": 4410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4404, - "name": "GRAPH_TOKEN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4317, - "src": "4431:11:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "4772617068546f6b656e", - "id": 4407, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4484:12:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247", - "typeString": "literal_string \"GraphToken\"" - }, - "value": "GraphToken" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247", - "typeString": "literal_string \"GraphToken\"" - } - ], - "id": 4406, - "name": "_getContractFromController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4652, - "src": "4457:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes memory) view returns (address)" - } - }, - "id": 4408, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4457:40:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4405, - "name": "IGraphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 518, - "src": "4445:11:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IGraphToken_$518_$", - "typeString": "type(contract IGraphToken)" - } - }, - "id": 4409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4445:53:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "src": "4431:67:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 4411, - "nodeType": "ExpressionStatement", - "src": "4431:67:33" - }, - { - "expression": { - "id": 4418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4412, - "name": "GRAPH_STAKING", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4321, - "src": "4508:13:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "5374616b696e67", - "id": 4415, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4567:9:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034", - "typeString": "literal_string \"Staking\"" - }, - "value": "Staking" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034", - "typeString": "literal_string \"Staking\"" - } - ], - "id": 4414, - "name": "_getContractFromController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4652, - "src": "4540:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes memory) view returns (address)" - } - }, - "id": 4416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4540:37:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4413, - "name": "IHorizonStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2235, - "src": "4524:15:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "type(contract IHorizonStaking)" - } - }, - "id": 4417, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4524:54:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "src": "4508:70:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 4419, - "nodeType": "ExpressionStatement", - "src": "4508:70:33" - }, - { - "expression": { - "id": 4426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4420, - "name": "GRAPH_PAYMENTS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4325, - "src": "4588:14:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "47726170685061796d656e7473", - "id": 4423, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4647:15:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f", - "typeString": "literal_string \"GraphPayments\"" - }, - "value": "GraphPayments" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f", - "typeString": "literal_string \"GraphPayments\"" - } - ], - "id": 4422, - "name": "_getContractFromController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4652, - "src": "4620:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes memory) view returns (address)" - } - }, - "id": 4424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4620:43:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4421, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "4605:14:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", - "typeString": "type(contract IGraphPayments)" - } - }, - "id": 4425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4605:59:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - } - }, - "src": "4588:76:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - } - }, - "id": 4427, - "nodeType": "ExpressionStatement", - "src": "4588:76:33" - }, - { - "expression": { - "id": 4434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4428, - "name": "GRAPH_PAYMENTS_ESCROW", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4329, - "src": "4674:21:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "5061796d656e7473457363726f77", - "id": 4431, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4741:16:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9", - "typeString": "literal_string \"PaymentsEscrow\"" - }, - "value": "PaymentsEscrow" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9", - "typeString": "literal_string \"PaymentsEscrow\"" - } - ], - "id": 4430, - "name": "_getContractFromController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4652, - "src": "4714:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes memory) view returns (address)" - } - }, - "id": 4432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4714:44:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4429, - "name": "IPaymentsEscrow", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2514, - "src": "4698:15:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPaymentsEscrow_$2514_$", - "typeString": "type(contract IPaymentsEscrow)" - } - }, - "id": 4433, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4698:61:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - } - }, - "src": "4674:85:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - } - }, - "id": 4435, - "nodeType": "ExpressionStatement", - "src": "4674:85:33" - }, - { - "expression": { - "id": 4442, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4436, - "name": "GRAPH_EPOCH_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4337, - "src": "4769:19:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "45706f63684d616e61676572", - "id": 4439, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4832:14:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063", - "typeString": "literal_string \"EpochManager\"" - }, - "value": "EpochManager" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063", - "typeString": "literal_string \"EpochManager\"" - } - ], - "id": 4438, - "name": "_getContractFromController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4652, - "src": "4805:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes memory) view returns (address)" - } - }, - "id": 4440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4805:42:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4437, - "name": "IEpochManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "4791:13:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IEpochManager_$220_$", - "typeString": "type(contract IEpochManager)" - } - }, - "id": 4441, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4791:57:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - } - }, - "src": "4769:79:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - } - }, - "id": 4443, - "nodeType": "ExpressionStatement", - "src": "4769:79:33" - }, - { - "expression": { - "id": 4450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4444, - "name": "GRAPH_REWARDS_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4341, - "src": "4858:21:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "526577617264734d616e61676572", - "id": 4447, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4925:16:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761", - "typeString": "literal_string \"RewardsManager\"" - }, - "value": "RewardsManager" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761", - "typeString": "literal_string \"RewardsManager\"" - } - ], - "id": 4446, - "name": "_getContractFromController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4652, - "src": "4898:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes memory) view returns (address)" - } - }, - "id": 4448, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4898:44:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4445, - "name": "IRewardsManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 438, - "src": "4882:15:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IRewardsManager_$438_$", - "typeString": "type(contract IRewardsManager)" - } - }, - "id": 4449, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4882:61:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "src": "4858:85:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "id": 4451, - "nodeType": "ExpressionStatement", - "src": "4858:85:33" - }, - { - "expression": { - "id": 4458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4452, - "name": "GRAPH_TOKEN_GATEWAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4345, - "src": "4953:19:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "4772617068546f6b656e47617465776179", - "id": 4455, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5016:19:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0", - "typeString": "literal_string \"GraphTokenGateway\"" - }, - "value": "GraphTokenGateway" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_d362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0", - "typeString": "literal_string \"GraphTokenGateway\"" - } - ], - "id": 4454, - "name": "_getContractFromController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4652, - "src": "4989:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes memory) view returns (address)" - } - }, - "id": 4456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4989:47:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4453, - "name": "ITokenGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 41, - "src": "4975:13:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ITokenGateway_$41_$", - "typeString": "type(contract ITokenGateway)" - } - }, - "id": 4457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4975:62:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - } - }, - "src": "4953:84:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - } - }, - "id": 4459, - "nodeType": "ExpressionStatement", - "src": "4953:84:33" - }, - { - "expression": { - "id": 4466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4460, - "name": "GRAPH_PROXY_ADMIN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4349, - "src": "5047:17:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "477261706850726f787941646d696e", - "id": 4463, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5111:17:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb", - "typeString": "literal_string \"GraphProxyAdmin\"" - }, - "value": "GraphProxyAdmin" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_ed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb", - "typeString": "literal_string \"GraphProxyAdmin\"" - } - ], - "id": 4462, - "name": "_getContractFromController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4652, - "src": "5084:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes memory) view returns (address)" - } - }, - "id": 4464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5084:45:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4461, - "name": "IGraphProxyAdmin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2215, - "src": "5067:16:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IGraphProxyAdmin_$2215_$", - "typeString": "type(contract IGraphProxyAdmin)" - } - }, - "id": 4465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5067:63:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - } - }, - "src": "5047:83:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - } - }, - "id": 4467, - "nodeType": "ExpressionStatement", - "src": "5047:83:33" - }, - { - "expression": { - "id": 4474, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4468, - "name": "GRAPH_CURATION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4352, - "src": "5140:14:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "4375726174696f6e", - "id": 4471, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5194:10:33", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f", - "typeString": "literal_string \"Curation\"" - }, - "value": "Curation" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_e6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f", - "typeString": "literal_string \"Curation\"" - } - ], - "id": 4470, - "name": "_getContractFromController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4652, - "src": "5167:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes memory) view returns (address)" - } - }, - "id": 4472, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5167:38:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4469, - "name": "ICuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 165, - "src": "5157:9:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICuration_$165_$", - "typeString": "type(contract ICuration)" - } - }, - "id": 4473, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5157:49:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "src": "5140:66:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "id": 4475, - "nodeType": "ExpressionStatement", - "src": "5140:66:33" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [ - { - "id": 4479, - "name": "GRAPH_TOKEN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4317, - "src": "5269:11:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - ], - "id": 4478, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5261:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4477, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5261:7:33", - "typeDescriptions": {} - } - }, - "id": 4480, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5261:20:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4483, - "name": "GRAPH_STAKING", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4321, - "src": "5303:13:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - ], - "id": 4482, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5295:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4481, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5295:7:33", - "typeDescriptions": {} - } - }, - "id": 4484, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5295:22:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4487, - "name": "GRAPH_PAYMENTS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4325, - "src": "5339:14:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - } - ], - "id": 4486, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5331:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4485, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5331:7:33", - "typeDescriptions": {} - } - }, - "id": 4488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5331:23:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4491, - "name": "GRAPH_PAYMENTS_ESCROW", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4329, - "src": "5376:21:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - } - ], - "id": 4490, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5368:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4489, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5368:7:33", - "typeDescriptions": {} - } - }, - "id": 4492, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5368:30:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4495, - "name": "GRAPH_CONTROLLER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4333, - "src": "5420:16:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - } - ], - "id": 4494, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5412:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4493, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5412:7:33", - "typeDescriptions": {} - } - }, - "id": 4496, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5412:25:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4499, - "name": "GRAPH_EPOCH_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4337, - "src": "5459:19:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - } - ], - "id": 4498, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5451:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4497, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5451:7:33", - "typeDescriptions": {} - } - }, - "id": 4500, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5451:28:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4503, - "name": "GRAPH_REWARDS_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4341, - "src": "5501:21:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - ], - "id": 4502, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5493:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4501, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5493:7:33", - "typeDescriptions": {} - } - }, - "id": 4504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5493:30:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4507, - "name": "GRAPH_TOKEN_GATEWAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4345, - "src": "5545:19:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - } - ], - "id": 4506, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5537:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4505, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5537:7:33", - "typeDescriptions": {} - } - }, - "id": 4508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5537:28:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4511, - "name": "GRAPH_PROXY_ADMIN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4349, - "src": "5587:17:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - } - ], - "id": 4510, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5579:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4509, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5579:7:33", - "typeDescriptions": {} - } - }, - "id": 4512, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5579:26:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4515, - "name": "GRAPH_CURATION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4352, - "src": "5627:14:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - ], - "id": 4514, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5619:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4513, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5619:7:33", - "typeDescriptions": {} - } - }, - "id": 4516, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5619:23:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4476, - "name": "GraphDirectoryInitialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4375, - "src": "5222:25:33", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address,address,address,address,address,address,address,address,address)" - } - }, - "id": 4517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5222:430:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4518, - "nodeType": "EmitStatement", - "src": "5217:435:33" - } - ] - }, - "documentation": { - "id": 4381, - "nodeType": "StructuredDocumentation", - "src": "3965:275:33", - "text": " @notice Constructor for the GraphDirectory contract\n @dev Requirements:\n - `controller` cannot be zero address\n Emits a {GraphDirectoryInitialized} event\n @param controller The address of the Graph Controller contract." - }, - "id": 4520, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4384, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4383, - "mutability": "mutable", - "name": "controller", - "nameLocation": "4265:10:33", - "nodeType": "VariableDeclaration", - "scope": 4520, - "src": "4257:18:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4382, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4257:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4256:20:33" - }, - "returnParameters": { - "id": 4385, - "nodeType": "ParameterList", - "parameters": [], - "src": "4277:0:33" - }, - "scope": 4653, - "src": "4245:1414:33", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4529, - "nodeType": "Block", - "src": "5784:35:33", - "statements": [ - { - "expression": { - "id": 4527, - "name": "GRAPH_TOKEN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4317, - "src": "5801:11:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "functionReturnParameters": 4526, - "id": 4528, - "nodeType": "Return", - "src": "5794:18:33" - } - ] - }, - "documentation": { - "id": 4521, - "nodeType": "StructuredDocumentation", - "src": "5665:55:33", - "text": " @notice Get the Graph Token contract" - }, - "id": 4530, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphToken", - "nameLocation": "5734:11:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4522, - "nodeType": "ParameterList", - "parameters": [], - "src": "5745:2:33" - }, - "returnParameters": { - "id": 4526, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4525, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4530, - "src": "5771:11:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - }, - "typeName": { - "id": 4524, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4523, - "name": "IGraphToken", - "nameLocations": [ - "5771:11:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 518, - "src": "5771:11:33" - }, - "referencedDeclaration": 518, - "src": "5771:11:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "visibility": "internal" - } - ], - "src": "5770:13:33" - }, - "scope": 4653, - "src": "5725:94:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4539, - "nodeType": "Block", - "src": "5954:37:33", - "statements": [ - { - "expression": { - "id": 4537, - "name": "GRAPH_STAKING", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4321, - "src": "5971:13:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "functionReturnParameters": 4536, - "id": 4538, - "nodeType": "Return", - "src": "5964:20:33" - } - ] - }, - "documentation": { - "id": 4531, - "nodeType": "StructuredDocumentation", - "src": "5825:59:33", - "text": " @notice Get the Horizon Staking contract" - }, - "id": 4540, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphStaking", - "nameLocation": "5898:13:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4532, - "nodeType": "ParameterList", - "parameters": [], - "src": "5911:2:33" - }, - "returnParameters": { - "id": 4536, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4535, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4540, - "src": "5937:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - }, - "typeName": { - "id": 4534, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4533, - "name": "IHorizonStaking", - "nameLocations": [ - "5937:15:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2235, - "src": "5937:15:33" - }, - "referencedDeclaration": 2235, - "src": "5937:15:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "visibility": "internal" - } - ], - "src": "5936:17:33" - }, - "scope": 4653, - "src": "5889:102:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4549, - "nodeType": "Block", - "src": "6125:38:33", - "statements": [ - { - "expression": { - "id": 4547, - "name": "GRAPH_PAYMENTS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4325, - "src": "6142:14:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - } - }, - "functionReturnParameters": 4546, - "id": 4548, - "nodeType": "Return", - "src": "6135:21:33" - } - ] - }, - "documentation": { - "id": 4541, - "nodeType": "StructuredDocumentation", - "src": "5997:58:33", - "text": " @notice Get the Graph Payments contract" - }, - "id": 4550, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphPayments", - "nameLocation": "6069:14:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4542, - "nodeType": "ParameterList", - "parameters": [], - "src": "6083:2:33" - }, - "returnParameters": { - "id": 4546, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4545, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4550, - "src": "6109:14:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - }, - "typeName": { - "id": 4544, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4543, - "name": "IGraphPayments", - "nameLocations": [ - "6109:14:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2211, - "src": "6109:14:33" - }, - "referencedDeclaration": 2211, - "src": "6109:14:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphPayments_$2211", - "typeString": "contract IGraphPayments" - } - }, - "visibility": "internal" - } - ], - "src": "6108:16:33" - }, - "scope": 4653, - "src": "6060:103:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4559, - "nodeType": "Block", - "src": "6305:45:33", - "statements": [ - { - "expression": { - "id": 4557, - "name": "GRAPH_PAYMENTS_ESCROW", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4329, - "src": "6322:21:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - } - }, - "functionReturnParameters": 4556, - "id": 4558, - "nodeType": "Return", - "src": "6315:28:33" - } - ] - }, - "documentation": { - "id": 4551, - "nodeType": "StructuredDocumentation", - "src": "6169:59:33", - "text": " @notice Get the Payments Escrow contract" - }, - "id": 4560, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphPaymentsEscrow", - "nameLocation": "6242:20:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4552, - "nodeType": "ParameterList", - "parameters": [], - "src": "6262:2:33" - }, - "returnParameters": { - "id": 4556, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4555, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4560, - "src": "6288:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - }, - "typeName": { - "id": 4554, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4553, - "name": "IPaymentsEscrow", - "nameLocations": [ - "6288:15:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2514, - "src": "6288:15:33" - }, - "referencedDeclaration": 2514, - "src": "6288:15:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPaymentsEscrow_$2514", - "typeString": "contract IPaymentsEscrow" - } - }, - "visibility": "internal" - } - ], - "src": "6287:17:33" - }, - "scope": 4653, - "src": "6233:117:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4569, - "nodeType": "Block", - "src": "6485:40:33", - "statements": [ - { - "expression": { - "id": 4567, - "name": "GRAPH_CONTROLLER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4333, - "src": "6502:16:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - } - }, - "functionReturnParameters": 4566, - "id": 4568, - "nodeType": "Return", - "src": "6495:23:33" - } - ] - }, - "documentation": { - "id": 4561, - "nodeType": "StructuredDocumentation", - "src": "6356:60:33", - "text": " @notice Get the Graph Controller contract" - }, - "id": 4570, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphController", - "nameLocation": "6430:16:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4562, - "nodeType": "ParameterList", - "parameters": [], - "src": "6446:2:33" - }, - "returnParameters": { - "id": 4566, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4565, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4570, - "src": "6472:11:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - }, - "typeName": { - "id": 4564, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4563, - "name": "IController", - "nameLocations": [ - "6472:11:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 279, - "src": "6472:11:33" - }, - "referencedDeclaration": 279, - "src": "6472:11:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - } - }, - "visibility": "internal" - } - ], - "src": "6471:13:33" - }, - "scope": 4653, - "src": "6421:104:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4579, - "nodeType": "Block", - "src": "6661:43:33", - "statements": [ - { - "expression": { - "id": 4577, - "name": "GRAPH_EPOCH_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4337, - "src": "6678:19:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - } - }, - "functionReturnParameters": 4576, - "id": 4578, - "nodeType": "Return", - "src": "6671:26:33" - } - ] - }, - "documentation": { - "id": 4571, - "nodeType": "StructuredDocumentation", - "src": "6531:57:33", - "text": " @notice Get the Epoch Manager contract" - }, - "id": 4580, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphEpochManager", - "nameLocation": "6602:18:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4572, - "nodeType": "ParameterList", - "parameters": [], - "src": "6620:2:33" - }, - "returnParameters": { - "id": 4576, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4575, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4580, - "src": "6646:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - }, - "typeName": { - "id": 4574, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4573, - "name": "IEpochManager", - "nameLocations": [ - "6646:13:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 220, - "src": "6646:13:33" - }, - "referencedDeclaration": 220, - "src": "6646:13:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - } - }, - "visibility": "internal" - } - ], - "src": "6645:15:33" - }, - "scope": 4653, - "src": "6593:111:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4589, - "nodeType": "Block", - "src": "6846:45:33", - "statements": [ - { - "expression": { - "id": 4587, - "name": "GRAPH_REWARDS_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4341, - "src": "6863:21:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "functionReturnParameters": 4586, - "id": 4588, - "nodeType": "Return", - "src": "6856:28:33" - } - ] - }, - "documentation": { - "id": 4581, - "nodeType": "StructuredDocumentation", - "src": "6710:59:33", - "text": " @notice Get the Rewards Manager contract" - }, - "id": 4590, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphRewardsManager", - "nameLocation": "6783:20:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4582, - "nodeType": "ParameterList", - "parameters": [], - "src": "6803:2:33" - }, - "returnParameters": { - "id": 4586, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4585, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4590, - "src": "6829:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - }, - "typeName": { - "id": 4584, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4583, - "name": "IRewardsManager", - "nameLocations": [ - "6829:15:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 438, - "src": "6829:15:33" - }, - "referencedDeclaration": 438, - "src": "6829:15:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "visibility": "internal" - } - ], - "src": "6828:17:33" - }, - "scope": 4653, - "src": "6774:117:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4599, - "nodeType": "Block", - "src": "7033:43:33", - "statements": [ - { - "expression": { - "id": 4597, - "name": "GRAPH_TOKEN_GATEWAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4345, - "src": "7050:19:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - } - }, - "functionReturnParameters": 4596, - "id": 4598, - "nodeType": "Return", - "src": "7043:26:33" - } - ] - }, - "documentation": { - "id": 4591, - "nodeType": "StructuredDocumentation", - "src": "6897:63:33", - "text": " @notice Get the Graph Token Gateway contract" - }, - "id": 4600, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphTokenGateway", - "nameLocation": "6974:18:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4592, - "nodeType": "ParameterList", - "parameters": [], - "src": "6992:2:33" - }, - "returnParameters": { - "id": 4596, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4595, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4600, - "src": "7018:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - }, - "typeName": { - "id": 4594, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4593, - "name": "ITokenGateway", - "nameLocations": [ - "7018:13:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 41, - "src": "7018:13:33" - }, - "referencedDeclaration": 41, - "src": "7018:13:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITokenGateway_$41", - "typeString": "contract ITokenGateway" - } - }, - "visibility": "internal" - } - ], - "src": "7017:15:33" - }, - "scope": 4653, - "src": "6965:111:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4609, - "nodeType": "Block", - "src": "7217:41:33", - "statements": [ - { - "expression": { - "id": 4607, - "name": "GRAPH_PROXY_ADMIN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4349, - "src": "7234:17:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - } - }, - "functionReturnParameters": 4606, - "id": 4608, - "nodeType": "Return", - "src": "7227:24:33" - } - ] - }, - "documentation": { - "id": 4601, - "nodeType": "StructuredDocumentation", - "src": "7082:61:33", - "text": " @notice Get the Graph Proxy Admin contract" - }, - "id": 4610, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphProxyAdmin", - "nameLocation": "7157:16:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4602, - "nodeType": "ParameterList", - "parameters": [], - "src": "7173:2:33" - }, - "returnParameters": { - "id": 4606, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4605, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4610, - "src": "7199:16:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - }, - "typeName": { - "id": 4604, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4603, - "name": "IGraphProxyAdmin", - "nameLocations": [ - "7199:16:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2215, - "src": "7199:16:33" - }, - "referencedDeclaration": 2215, - "src": "7199:16:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphProxyAdmin_$2215", - "typeString": "contract IGraphProxyAdmin" - } - }, - "visibility": "internal" - } - ], - "src": "7198:18:33" - }, - "scope": 4653, - "src": "7148:110:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4619, - "nodeType": "Block", - "src": "7381:38:33", - "statements": [ - { - "expression": { - "id": 4617, - "name": "GRAPH_CURATION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4352, - "src": "7398:14:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "functionReturnParameters": 4616, - "id": 4618, - "nodeType": "Return", - "src": "7391:21:33" - } - ] - }, - "documentation": { - "id": 4611, - "nodeType": "StructuredDocumentation", - "src": "7264:52:33", - "text": " @notice Get the Curation contract" - }, - "id": 4620, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_graphCuration", - "nameLocation": "7330:14:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4612, - "nodeType": "ParameterList", - "parameters": [], - "src": "7344:2:33" - }, - "returnParameters": { - "id": 4616, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4615, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4620, - "src": "7370:9:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - }, - "typeName": { - "id": 4614, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4613, - "name": "ICuration", - "nameLocations": [ - "7370:9:33" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 165, - "src": "7370:9:33" - }, - "referencedDeclaration": 165, - "src": "7370:9:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "visibility": "internal" - } - ], - "src": "7369:11:33" - }, - "scope": 4653, - "src": "7321:98:33", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4651, - "nodeType": "Block", - "src": "7768:231:33", - "statements": [ - { - "assignments": [ - 4629 - ], - "declarations": [ - { - "constant": false, - "id": 4629, - "mutability": "mutable", - "name": "contractAddress", - "nameLocation": "7786:15:33", - "nodeType": "VariableDeclaration", - "scope": 4651, - "src": "7778:23:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4628, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7778:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 4636, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 4633, - "name": "_contractName", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4623, - "src": "7848:13:33", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 4632, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "7838:9:33", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 4634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7838:24:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 4630, - "name": "GRAPH_CONTROLLER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4333, - "src": "7804:16:33", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IController_$279", - "typeString": "contract IController" - } - }, - "id": 4631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7821:16:33", - "memberName": "getContractProxy", - "nodeType": "MemberAccess", - "referencedDeclaration": 253, - "src": "7804:33:33", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view external returns (address)" - } - }, - "id": 4635, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7804:59:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7778:85:33" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4643, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4638, - "name": "contractAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4629, - "src": "7881:15:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4641, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7908:1:33", - "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": 4640, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7900:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4639, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7900:7:33", - "typeDescriptions": {} - } - }, - "id": 4642, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7900:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7881:29:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 4645, - "name": "_contractName", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4623, - "src": "7945:13:33", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 4644, - "name": "GraphDirectoryInvalidZeroAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4380, - "src": "7912:32:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$", - "typeString": "function (bytes memory) pure returns (error)" - } - }, - "id": 4646, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7912:47:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 4637, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "7873:7:33", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 4647, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7873:87:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4648, - "nodeType": "ExpressionStatement", - "src": "7873:87:33" - }, - { - "expression": { - "id": 4649, - "name": "contractAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4629, - "src": "7977:15:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 4627, - "id": 4650, - "nodeType": "Return", - "src": "7970:22:33" - } - ] - }, - "documentation": { - "id": 4621, - "nodeType": "StructuredDocumentation", - "src": "7425:243:33", - "text": " @notice Get a contract address from the controller\n @dev Requirements:\n - The `_contractName` must be registered in the controller\n @param _contractName The name of the contract to fetch from the controller" - }, - "id": 4652, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getContractFromController", - "nameLocation": "7682:26:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4624, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4623, - "mutability": "mutable", - "name": "_contractName", - "nameLocation": "7722:13:33", - "nodeType": "VariableDeclaration", - "scope": 4652, - "src": "7709:26:33", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4622, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7709:5:33", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "7708:28:33" - }, - "returnParameters": { - "id": 4627, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4626, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4652, - "src": "7759:7:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4625, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7759:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7758:9:33" - }, - "scope": 4653, - "src": "7673:326:33", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - } - ], - "scope": 4654, - "src": "1220:6781:33", - "usedErrors": [ - 4380 - ], - "usedEvents": [ - 4375 - ] - } - ], - "src": "46:7956:33" - }, - "id": 33 - }, - "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", - "exportedSymbols": { - "ContextUpgradeable": [ - 5148 - ], - "Initializable": [ - 5102 - ], - "OwnableUpgradeable": [ - 4848 - ] - }, - "id": 4849, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4655, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "102:24:34" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", - "file": "../utils/ContextUpgradeable.sol", - "id": 4657, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4849, - "sourceUnit": 5149, - "src": "128:67:34", - "symbolAliases": [ - { - "foreign": { - "id": 4656, - "name": "ContextUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5148, - "src": "136:18:34", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "file": "../proxy/utils/Initializable.sol", - "id": 4659, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4849, - "sourceUnit": 5103, - "src": "196:63:34", - "symbolAliases": [ - { - "foreign": { - "id": 4658, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5102, - "src": "204:13:34", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 4661, - "name": "Initializable", - "nameLocations": [ - "789:13:34" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5102, - "src": "789:13:34" - }, - "id": 4662, - "nodeType": "InheritanceSpecifier", - "src": "789:13:34" - }, - { - "baseName": { - "id": 4663, - "name": "ContextUpgradeable", - "nameLocations": [ - "804:18:34" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5148, - "src": "804:18:34" - }, - "id": 4664, - "nodeType": "InheritanceSpecifier", - "src": "804:18:34" - } - ], - "canonicalName": "OwnableUpgradeable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 4660, - "nodeType": "StructuredDocumentation", - "src": "261:487:34", - "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner." - }, - "fullyImplemented": true, - "id": 4848, - "linearizedBaseContracts": [ - 4848, - 5148, - 5102 - ], - "name": "OwnableUpgradeable", - "nameLocation": "767:18:34", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "OwnableUpgradeable.OwnableStorage", - "documentation": { - "id": 4665, - "nodeType": "StructuredDocumentation", - "src": "829:65:34", - "text": "@custom:storage-location erc7201:openzeppelin.storage.Ownable" - }, - "id": 4668, - "members": [ - { - "constant": false, - "id": 4667, - "mutability": "mutable", - "name": "_owner", - "nameLocation": "939:6:34", - "nodeType": "VariableDeclaration", - "scope": 4668, - "src": "931:14:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4666, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "931:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "name": "OwnableStorage", - "nameLocation": "906:14:34", - "nodeType": "StructDefinition", - "scope": 4848, - "src": "899:53:34", - "visibility": "public" - }, - { - "constant": true, - "id": 4671, - "mutability": "constant", - "name": "OwnableStorageLocation", - "nameLocation": "1094:22:34", - "nodeType": "VariableDeclaration", - "scope": 4848, - "src": "1069:116:34", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 4669, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1069:7:34", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "307839303136643039643732643430666461653266643863656163366236323334633737303632313466643339633163643165363039613035323863313939333030", - "id": 4670, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1119:66:34", - "typeDescriptions": { - "typeIdentifier": "t_rational_65173360639460082030725920392146925864023520599682862633725751242436743107328_by_1", - "typeString": "int_const 6517...(69 digits omitted)...7328" - }, - "value": "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" - }, - "visibility": "private" - }, - { - "body": { - "id": 4678, - "nodeType": "Block", - "src": "1270:81:34", - "statements": [ - { - "AST": { - "nativeSrc": "1289:56:34", - "nodeType": "YulBlock", - "src": "1289:56:34", - "statements": [ - { - "nativeSrc": "1303:32:34", - "nodeType": "YulAssignment", - "src": "1303:32:34", - "value": { - "name": "OwnableStorageLocation", - "nativeSrc": "1313:22:34", - "nodeType": "YulIdentifier", - "src": "1313:22:34" - }, - "variableNames": [ - { - "name": "$.slot", - "nativeSrc": "1303:6:34", - "nodeType": "YulIdentifier", - "src": "1303:6:34" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 4675, - "isOffset": false, - "isSlot": true, - "src": "1303:6:34", - "suffix": "slot", - "valueSize": 1 - }, - { - "declaration": 4671, - "isOffset": false, - "isSlot": false, - "src": "1313:22:34", - "valueSize": 1 - } - ], - "id": 4677, - "nodeType": "InlineAssembly", - "src": "1280:65:34" - } - ] - }, - "id": 4679, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getOwnableStorage", - "nameLocation": "1201:18:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4672, - "nodeType": "ParameterList", - "parameters": [], - "src": "1219:2:34" - }, - "returnParameters": { - "id": 4676, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4675, - "mutability": "mutable", - "name": "$", - "nameLocation": "1267:1:34", - "nodeType": "VariableDeclaration", - "scope": 4679, - "src": "1244:24:34", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage" - }, - "typeName": { - "id": 4674, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4673, - "name": "OwnableStorage", - "nameLocations": [ - "1244:14:34" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4668, - "src": "1244:14:34" - }, - "referencedDeclaration": 4668, - "src": "1244:14:34", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage" - } - }, - "visibility": "internal" - } - ], - "src": "1243:26:34" - }, - "scope": 4848, - "src": "1192:159:34", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - }, - { - "documentation": { - "id": 4680, - "nodeType": "StructuredDocumentation", - "src": "1357:85:34", - "text": " @dev The caller account is not authorized to perform an operation." - }, - "errorSelector": "118cdaa7", - "id": 4684, - "name": "OwnableUnauthorizedAccount", - "nameLocation": "1453:26:34", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4683, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4682, - "mutability": "mutable", - "name": "account", - "nameLocation": "1488:7:34", - "nodeType": "VariableDeclaration", - "scope": 4684, - "src": "1480:15:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4681, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1480:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1479:17:34" - }, - "src": "1447:50:34" - }, - { - "documentation": { - "id": 4685, - "nodeType": "StructuredDocumentation", - "src": "1503:82:34", - "text": " @dev The owner is not a valid owner account. (eg. `address(0)`)" - }, - "errorSelector": "1e4fbdf7", - "id": 4689, - "name": "OwnableInvalidOwner", - "nameLocation": "1596:19:34", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4688, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4687, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1624:5:34", - "nodeType": "VariableDeclaration", - "scope": 4689, - "src": "1616:13:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4686, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1616:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1615:15:34" - }, - "src": "1590:41:34" - }, - { - "anonymous": false, - "eventSelector": "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "id": 4695, - "name": "OwnershipTransferred", - "nameLocation": "1643:20:34", - "nodeType": "EventDefinition", - "parameters": { - "id": 4694, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4691, - "indexed": true, - "mutability": "mutable", - "name": "previousOwner", - "nameLocation": "1680:13:34", - "nodeType": "VariableDeclaration", - "scope": 4695, - "src": "1664:29:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4690, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1664:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4693, - "indexed": true, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "1711:8:34", - "nodeType": "VariableDeclaration", - "scope": 4695, - "src": "1695:24:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4692, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1695:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1663:57:34" - }, - "src": "1637:84:34" - }, - { - "body": { - "id": 4707, - "nodeType": "Block", - "src": "1919:55:34", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4704, - "name": "initialOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4698, - "src": "1954:12:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4703, - "name": "__Ownable_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4735, - "src": "1929:24:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 4705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1929:38:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4706, - "nodeType": "ExpressionStatement", - "src": "1929:38:34" - } - ] - }, - "documentation": { - "id": 4696, - "nodeType": "StructuredDocumentation", - "src": "1727:115:34", - "text": " @dev Initializes the contract setting the address provided by the deployer as the initial owner." - }, - "id": 4708, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4701, - "kind": "modifierInvocation", - "modifierName": { - "id": 4700, - "name": "onlyInitializing", - "nameLocations": [ - "1902:16:34" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "1902:16:34" - }, - "nodeType": "ModifierInvocation", - "src": "1902:16:34" - } - ], - "name": "__Ownable_init", - "nameLocation": "1856:14:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4699, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4698, - "mutability": "mutable", - "name": "initialOwner", - "nameLocation": "1879:12:34", - "nodeType": "VariableDeclaration", - "scope": 4708, - "src": "1871:20:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4697, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1871:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1870:22:34" - }, - "returnParameters": { - "id": 4702, - "nodeType": "ParameterList", - "parameters": [], - "src": "1919:0:34" - }, - "scope": 4848, - "src": "1847:127:34", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4734, - "nodeType": "Block", - "src": "2062:153:34", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4720, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4715, - "name": "initialOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4710, - "src": "2076:12:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4718, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2100:1:34", - "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": 4717, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2092:7:34", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4716, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2092:7:34", - "typeDescriptions": {} - } - }, - "id": 4719, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2092:10:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2076:26:34", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4729, - "nodeType": "IfStatement", - "src": "2072:95:34", - "trueBody": { - "id": 4728, - "nodeType": "Block", - "src": "2104:63:34", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4724, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2153:1:34", - "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": 4723, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2145:7:34", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4722, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2145:7:34", - "typeDescriptions": {} - } - }, - "id": 4725, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2145:10:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4721, - "name": "OwnableInvalidOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4689, - "src": "2125:19:34", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 4726, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2125:31:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 4727, - "nodeType": "RevertStatement", - "src": "2118:38:34" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 4731, - "name": "initialOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4710, - "src": "2195:12:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4730, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4847, - "src": "2176:18:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 4732, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2176:32:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4733, - "nodeType": "ExpressionStatement", - "src": "2176:32:34" - } - ] - }, - "id": 4735, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4713, - "kind": "modifierInvocation", - "modifierName": { - "id": 4712, - "name": "onlyInitializing", - "nameLocations": [ - "2045:16:34" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "2045:16:34" - }, - "nodeType": "ModifierInvocation", - "src": "2045:16:34" - } - ], - "name": "__Ownable_init_unchained", - "nameLocation": "1989:24:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4711, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4710, - "mutability": "mutable", - "name": "initialOwner", - "nameLocation": "2022:12:34", - "nodeType": "VariableDeclaration", - "scope": 4735, - "src": "2014:20:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4709, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2014:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2013:22:34" - }, - "returnParameters": { - "id": 4714, - "nodeType": "ParameterList", - "parameters": [], - "src": "2062:0:34" - }, - "scope": 4848, - "src": "1980:235:34", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4742, - "nodeType": "Block", - "src": "2324:41:34", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4738, - "name": "_checkOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4776, - "src": "2334:11:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$__$", - "typeString": "function () view" - } - }, - "id": 4739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2334:13:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4740, - "nodeType": "ExpressionStatement", - "src": "2334:13:34" - }, - { - "id": 4741, - "nodeType": "PlaceholderStatement", - "src": "2357:1:34" - } - ] - }, - "documentation": { - "id": 4736, - "nodeType": "StructuredDocumentation", - "src": "2221:77:34", - "text": " @dev Throws if called by any account other than the owner." - }, - "id": 4743, - "name": "onlyOwner", - "nameLocation": "2312:9:34", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 4737, - "nodeType": "ParameterList", - "parameters": [], - "src": "2321:2:34" - }, - "src": "2303:62:34", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4758, - "nodeType": "Block", - "src": "2496:89:34", - "statements": [ - { - "assignments": [ - 4751 - ], - "declarations": [ - { - "constant": false, - "id": 4751, - "mutability": "mutable", - "name": "$", - "nameLocation": "2529:1:34", - "nodeType": "VariableDeclaration", - "scope": 4758, - "src": "2506:24:34", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage" - }, - "typeName": { - "id": 4750, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4749, - "name": "OwnableStorage", - "nameLocations": [ - "2506:14:34" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4668, - "src": "2506:14:34" - }, - "referencedDeclaration": 4668, - "src": "2506:14:34", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage" - } - }, - "visibility": "internal" - } - ], - "id": 4754, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4752, - "name": "_getOwnableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4679, - "src": "2533:18:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_OwnableStorage_$4668_storage_ptr_$", - "typeString": "function () pure returns (struct OwnableUpgradeable.OwnableStorage storage pointer)" - } - }, - "id": 4753, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2533:20:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2506:47:34" - }, - { - "expression": { - "expression": { - "id": 4755, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4751, - "src": "2570:1:34", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" - } - }, - "id": 4756, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2572:6:34", - "memberName": "_owner", - "nodeType": "MemberAccess", - "referencedDeclaration": 4667, - "src": "2570:8:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 4748, - "id": 4757, - "nodeType": "Return", - "src": "2563:15:34" - } - ] - }, - "documentation": { - "id": 4744, - "nodeType": "StructuredDocumentation", - "src": "2371:65:34", - "text": " @dev Returns the address of the current owner." - }, - "functionSelector": "8da5cb5b", - "id": 4759, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "owner", - "nameLocation": "2450:5:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4745, - "nodeType": "ParameterList", - "parameters": [], - "src": "2455:2:34" - }, - "returnParameters": { - "id": 4748, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4747, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4759, - "src": "2487:7:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4746, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2487:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2486:9:34" - }, - "scope": 4848, - "src": "2441:144:34", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 4775, - "nodeType": "Block", - "src": "2703:117:34", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4763, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4759, - "src": "2717:5:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 4764, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2717:7:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4765, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5130, - "src": "2728:10:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 4766, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2728:12:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2717:23:34", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4774, - "nodeType": "IfStatement", - "src": "2713:101:34", - "trueBody": { - "id": 4773, - "nodeType": "Block", - "src": "2742:72:34", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4769, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5130, - "src": "2790:10:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 4770, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2790:12:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4768, - "name": "OwnableUnauthorizedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4684, - "src": "2763:26:34", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 4771, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2763:40:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 4772, - "nodeType": "RevertStatement", - "src": "2756:47:34" - } - ] - } - } - ] - }, - "documentation": { - "id": 4760, - "nodeType": "StructuredDocumentation", - "src": "2591:62:34", - "text": " @dev Throws if the sender is not the owner." - }, - "id": 4776, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkOwner", - "nameLocation": "2667:11:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4761, - "nodeType": "ParameterList", - "parameters": [], - "src": "2678:2:34" - }, - "returnParameters": { - "id": 4762, - "nodeType": "ParameterList", - "parameters": [], - "src": "2703:0:34" - }, - "scope": 4848, - "src": "2658:162:34", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 4789, - "nodeType": "Block", - "src": "3209:47:34", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4785, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3246:1:34", - "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": 4784, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3238:7:34", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4783, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3238:7:34", - "typeDescriptions": {} - } - }, - "id": 4786, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3238:10:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4782, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4847, - "src": "3219:18:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 4787, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3219:30:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4788, - "nodeType": "ExpressionStatement", - "src": "3219:30:34" - } - ] - }, - "documentation": { - "id": 4777, - "nodeType": "StructuredDocumentation", - "src": "2826:324:34", - "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner." - }, - "functionSelector": "715018a6", - "id": 4790, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4780, - "kind": "modifierInvocation", - "modifierName": { - "id": 4779, - "name": "onlyOwner", - "nameLocations": [ - "3199:9:34" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "3199:9:34" - }, - "nodeType": "ModifierInvocation", - "src": "3199:9:34" - } - ], - "name": "renounceOwnership", - "nameLocation": "3164:17:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4778, - "nodeType": "ParameterList", - "parameters": [], - "src": "3181:2:34" - }, - "returnParameters": { - "id": 4781, - "nodeType": "ParameterList", - "parameters": [], - "src": "3209:0:34" - }, - "scope": 4848, - "src": "3155:101:34", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 4817, - "nodeType": "Block", - "src": "3475:145:34", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4803, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4798, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4793, - "src": "3489:8:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4801, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3509:1:34", - "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": 4800, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3501:7:34", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4799, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3501:7:34", - "typeDescriptions": {} - } - }, - "id": 4802, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3501:10:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3489:22:34", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4812, - "nodeType": "IfStatement", - "src": "3485:91:34", - "trueBody": { - "id": 4811, - "nodeType": "Block", - "src": "3513:63:34", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4807, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3562:1:34", - "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": 4806, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3554:7:34", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4805, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3554:7:34", - "typeDescriptions": {} - } - }, - "id": 4808, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3554:10:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4804, - "name": "OwnableInvalidOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4689, - "src": "3534:19:34", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 4809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3534:31:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 4810, - "nodeType": "RevertStatement", - "src": "3527:38:34" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 4814, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4793, - "src": "3604:8:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4813, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4847, - "src": "3585:18:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 4815, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3585:28:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4816, - "nodeType": "ExpressionStatement", - "src": "3585:28:34" - } - ] - }, - "documentation": { - "id": 4791, - "nodeType": "StructuredDocumentation", - "src": "3262:138:34", - "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner." - }, - "functionSelector": "f2fde38b", - "id": 4818, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4796, - "kind": "modifierInvocation", - "modifierName": { - "id": 4795, - "name": "onlyOwner", - "nameLocations": [ - "3465:9:34" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "3465:9:34" - }, - "nodeType": "ModifierInvocation", - "src": "3465:9:34" - } - ], - "name": "transferOwnership", - "nameLocation": "3414:17:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4794, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4793, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "3440:8:34", - "nodeType": "VariableDeclaration", - "scope": 4818, - "src": "3432:16:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4792, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3432:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3431:18:34" - }, - "returnParameters": { - "id": 4797, - "nodeType": "ParameterList", - "parameters": [], - "src": "3475:0:34" - }, - "scope": 4848, - "src": "3405:215:34", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 4846, - "nodeType": "Block", - "src": "3837:185:34", - "statements": [ - { - "assignments": [ - 4826 - ], - "declarations": [ - { - "constant": false, - "id": 4826, - "mutability": "mutable", - "name": "$", - "nameLocation": "3870:1:34", - "nodeType": "VariableDeclaration", - "scope": 4846, - "src": "3847:24:34", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage" - }, - "typeName": { - "id": 4825, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4824, - "name": "OwnableStorage", - "nameLocations": [ - "3847:14:34" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4668, - "src": "3847:14:34" - }, - "referencedDeclaration": 4668, - "src": "3847:14:34", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage" - } - }, - "visibility": "internal" - } - ], - "id": 4829, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4827, - "name": "_getOwnableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4679, - "src": "3874:18:34", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_OwnableStorage_$4668_storage_ptr_$", - "typeString": "function () pure returns (struct OwnableUpgradeable.OwnableStorage storage pointer)" - } - }, - "id": 4828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3874:20:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3847:47:34" - }, - { - "assignments": [ - 4831 - ], - "declarations": [ - { - "constant": false, - "id": 4831, - "mutability": "mutable", - "name": "oldOwner", - "nameLocation": "3912:8:34", - "nodeType": "VariableDeclaration", - "scope": 4846, - "src": "3904:16:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4830, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3904:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 4834, - "initialValue": { - "expression": { - "id": 4832, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4826, - "src": "3923:1:34", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" - } - }, - "id": 4833, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3925:6:34", - "memberName": "_owner", - "nodeType": "MemberAccess", - "referencedDeclaration": 4667, - "src": "3923:8:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3904:27:34" - }, - { - "expression": { - "id": 4839, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4835, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4826, - "src": "3941:1:34", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OwnableStorage_$4668_storage_ptr", - "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer" - } - }, - "id": 4837, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3943:6:34", - "memberName": "_owner", - "nodeType": "MemberAccess", - "referencedDeclaration": 4667, - "src": "3941:8:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4838, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4821, - "src": "3952:8:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3941:19:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4840, - "nodeType": "ExpressionStatement", - "src": "3941:19:34" - }, - { - "eventCall": { - "arguments": [ - { - "id": 4842, - "name": "oldOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4831, - "src": "3996:8:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4843, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4821, - "src": "4006:8:34", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4841, - "name": "OwnershipTransferred", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4695, - "src": "3975:20:34", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 4844, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3975:40:34", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4845, - "nodeType": "EmitStatement", - "src": "3970:45:34" - } - ] - }, - "documentation": { - "id": 4819, - "nodeType": "StructuredDocumentation", - "src": "3626:143:34", - "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction." - }, - "id": 4847, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transferOwnership", - "nameLocation": "3783:18:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4822, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4821, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "3810:8:34", - "nodeType": "VariableDeclaration", - "scope": 4847, - "src": "3802:16:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4820, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3802:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3801:18:34" - }, - "returnParameters": { - "id": 4823, - "nodeType": "ParameterList", - "parameters": [], - "src": "3837:0:34" - }, - "scope": 4848, - "src": "3774:248:34", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 4849, - "src": "749:3275:34", - "usedErrors": [ - 4684, - 4689, - 4865, - 4868 - ], - "usedEvents": [ - 4695, - 4873 - ] - } - ], - "src": "102:3923:34" - }, - "id": 34 - }, - "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "exportedSymbols": { - "Initializable": [ - 5102 - ] - }, - "id": 5103, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4850, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "113:24:35" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "Initializable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 4851, - "nodeType": "StructuredDocumentation", - "src": "139:2209:35", - "text": " @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n case an upgrade adds a module that needs to be initialized.\n For example:\n [.hljs-theme-light.nopadding]\n ```solidity\n contract MyToken is ERC20Upgradeable {\n function initialize() initializer public {\n __ERC20_init(\"MyToken\", \"MTK\");\n }\n }\n contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n function initializeV2() reinitializer(2) public {\n __ERC20Permit_init(\"MyToken\");\n }\n }\n ```\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n _disableInitializers();\n }\n ```\n ====" - }, - "fullyImplemented": true, - "id": 5102, - "linearizedBaseContracts": [ - 5102 - ], - "name": "Initializable", - "nameLocation": "2367:13:35", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Initializable.InitializableStorage", - "documentation": { - "id": 4852, - "nodeType": "StructuredDocumentation", - "src": "2387:293:35", - "text": " @dev Storage of the initializable contract.\n It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n when using with upgradeable contracts.\n @custom:storage-location erc7201:openzeppelin.storage.Initializable" - }, - "id": 4859, - "members": [ - { - "constant": false, - "id": 4855, - "mutability": "mutable", - "name": "_initialized", - "nameLocation": "2820:12:35", - "nodeType": "VariableDeclaration", - "scope": 4859, - "src": "2813:19:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 4854, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "2813:6:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4858, - "mutability": "mutable", - "name": "_initializing", - "nameLocation": "2955:13:35", - "nodeType": "VariableDeclaration", - "scope": 4859, - "src": "2950:18:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4857, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2950:4:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "name": "InitializableStorage", - "nameLocation": "2692:20:35", - "nodeType": "StructDefinition", - "scope": 5102, - "src": "2685:290:35", - "visibility": "public" - }, - { - "constant": true, - "id": 4862, - "mutability": "constant", - "name": "INITIALIZABLE_STORAGE", - "nameLocation": "3123:21:35", - "nodeType": "VariableDeclaration", - "scope": 5102, - "src": "3098:115:35", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 4860, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3098:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "307866306335376531363834306466303430663135303838646332663831666533393163333932336265633733653233613936363265666339633232396336613030", - "id": 4861, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3147:66:35", - "typeDescriptions": { - "typeIdentifier": "t_rational_108904022758810753673719992590105913556127789646572562039383141376366747609600_by_1", - "typeString": "int_const 1089...(70 digits omitted)...9600" - }, - "value": "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00" - }, - "visibility": "private" - }, - { - "documentation": { - "id": 4863, - "nodeType": "StructuredDocumentation", - "src": "3220:60:35", - "text": " @dev The contract is already initialized." - }, - "errorSelector": "f92ee8a9", - "id": 4865, - "name": "InvalidInitialization", - "nameLocation": "3291:21:35", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4864, - "nodeType": "ParameterList", - "parameters": [], - "src": "3312:2:35" - }, - "src": "3285:30:35" - }, - { - "documentation": { - "id": 4866, - "nodeType": "StructuredDocumentation", - "src": "3321:57:35", - "text": " @dev The contract is not initializing." - }, - "errorSelector": "d7e6bcf8", - "id": 4868, - "name": "NotInitializing", - "nameLocation": "3389:15:35", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4867, - "nodeType": "ParameterList", - "parameters": [], - "src": "3404:2:35" - }, - "src": "3383:24:35" - }, - { - "anonymous": false, - "documentation": { - "id": 4869, - "nodeType": "StructuredDocumentation", - "src": "3413:90:35", - "text": " @dev Triggered when the contract has been initialized or reinitialized." - }, - "eventSelector": "c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2", - "id": 4873, - "name": "Initialized", - "nameLocation": "3514:11:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 4872, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4871, - "indexed": false, - "mutability": "mutable", - "name": "version", - "nameLocation": "3533:7:35", - "nodeType": "VariableDeclaration", - "scope": 4873, - "src": "3526:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 4870, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "3526:6:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "3525:16:35" - }, - "src": "3508:34:35" - }, - { - "body": { - "id": 4955, - "nodeType": "Block", - "src": "4092:1081:35", - "statements": [ - { - "assignments": [ - 4878 - ], - "declarations": [ - { - "constant": false, - "id": 4878, - "mutability": "mutable", - "name": "$", - "nameLocation": "4187:1:35", - "nodeType": "VariableDeclaration", - "scope": 4955, - "src": "4158:30:35", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage" - }, - "typeName": { - "id": 4877, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4876, - "name": "InitializableStorage", - "nameLocations": [ - "4158:20:35" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4859, - "src": "4158:20:35" - }, - "referencedDeclaration": 4859, - "src": "4158:20:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage" - } - }, - "visibility": "internal" - } - ], - "id": 4881, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4879, - "name": "_getInitializableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5101, - "src": "4191:24:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", - "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" - } - }, - "id": 4880, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4191:26:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4158:59:35" - }, - { - "assignments": [ - 4883 - ], - "declarations": [ - { - "constant": false, - "id": 4883, - "mutability": "mutable", - "name": "isTopLevelCall", - "nameLocation": "4284:14:35", - "nodeType": "VariableDeclaration", - "scope": 4955, - "src": "4279:19:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4882, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4279:4:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 4887, - "initialValue": { - "id": 4886, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4301:16:35", - "subExpression": { - "expression": { - "id": 4884, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4878, - "src": "4302:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4885, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4304:13:35", - "memberName": "_initializing", - "nodeType": "MemberAccess", - "referencedDeclaration": 4858, - "src": "4302:15:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4279:38:35" - }, - { - "assignments": [ - 4889 - ], - "declarations": [ - { - "constant": false, - "id": 4889, - "mutability": "mutable", - "name": "initialized", - "nameLocation": "4334:11:35", - "nodeType": "VariableDeclaration", - "scope": 4955, - "src": "4327:18:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 4888, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "4327:6:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "id": 4892, - "initialValue": { - "expression": { - "id": 4890, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4878, - "src": "4348:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4891, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4350:12:35", - "memberName": "_initialized", - "nodeType": "MemberAccess", - "referencedDeclaration": 4855, - "src": "4348:14:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4327:35:35" - }, - { - "assignments": [ - 4894 - ], - "declarations": [ - { - "constant": false, - "id": 4894, - "mutability": "mutable", - "name": "initialSetup", - "nameLocation": "4711:12:35", - "nodeType": "VariableDeclaration", - "scope": 4955, - "src": "4706:17:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4893, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4706:4:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 4900, - "initialValue": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 4899, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 4897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4895, - "name": "initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4889, - "src": "4726:11:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 4896, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4741:1:35", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4726:16:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "id": 4898, - "name": "isTopLevelCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4883, - "src": "4746:14:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "4726:34:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4706:54:35" - }, - { - "assignments": [ - 4902 - ], - "declarations": [ - { - "constant": false, - "id": 4902, - "mutability": "mutable", - "name": "construction", - "nameLocation": "4775:12:35", - "nodeType": "VariableDeclaration", - "scope": 4955, - "src": "4770:17:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4901, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4770:4:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 4915, - "initialValue": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 4914, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 4905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4903, - "name": "initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4889, - "src": "4790:11:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 4904, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4805:1:35", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "4790:16:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4913, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "arguments": [ - { - "id": 4908, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "4818:4:35", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Initializable_$5102", - "typeString": "contract Initializable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Initializable_$5102", - "typeString": "contract Initializable" - } - ], - "id": 4907, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4810:7:35", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4906, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4810:7:35", - "typeDescriptions": {} - } - }, - "id": 4909, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4810:13:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4910, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4824:4:35", - "memberName": "code", - "nodeType": "MemberAccess", - "src": "4810:18:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 4911, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4829:6:35", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "4810:25:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 4912, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4839:1:35", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4810:30:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "4790:50:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4770:70:35" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 4920, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4917, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4855:13:35", - "subExpression": { - "id": 4916, - "name": "initialSetup", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4894, - "src": "4856:12:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "id": 4919, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4872:13:35", - "subExpression": { - "id": 4918, - "name": "construction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4902, - "src": "4873:12:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "4855:30:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4925, - "nodeType": "IfStatement", - "src": "4851:91:35", - "trueBody": { - "id": 4924, - "nodeType": "Block", - "src": "4887:55:35", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4921, - "name": "InvalidInitialization", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4865, - "src": "4908:21:35", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 4922, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4908:23:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 4923, - "nodeType": "RevertStatement", - "src": "4901:30:35" - } - ] - } - }, - { - "expression": { - "id": 4930, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4926, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4878, - "src": "4951:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4928, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "4953:12:35", - "memberName": "_initialized", - "nodeType": "MemberAccess", - "referencedDeclaration": 4855, - "src": "4951:14:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "31", - "id": 4929, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4968:1:35", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "4951:18:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "id": 4931, - "nodeType": "ExpressionStatement", - "src": "4951:18:35" - }, - { - "condition": { - "id": 4932, - "name": "isTopLevelCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4883, - "src": "4983:14:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4940, - "nodeType": "IfStatement", - "src": "4979:67:35", - "trueBody": { - "id": 4939, - "nodeType": "Block", - "src": "4999:47:35", - "statements": [ - { - "expression": { - "id": 4937, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4933, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4878, - "src": "5013:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4935, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5015:13:35", - "memberName": "_initializing", - "nodeType": "MemberAccess", - "referencedDeclaration": 4858, - "src": "5013:15:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 4936, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5031:4:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "5013:22:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4938, - "nodeType": "ExpressionStatement", - "src": "5013:22:35" - } - ] - } - }, - { - "id": 4941, - "nodeType": "PlaceholderStatement", - "src": "5055:1:35" - }, - { - "condition": { - "id": 4942, - "name": "isTopLevelCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4883, - "src": "5070:14:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4954, - "nodeType": "IfStatement", - "src": "5066:101:35", - "trueBody": { - "id": 4953, - "nodeType": "Block", - "src": "5086:81:35", - "statements": [ - { - "expression": { - "id": 4947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4943, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4878, - "src": "5100:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4945, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5102:13:35", - "memberName": "_initializing", - "nodeType": "MemberAccess", - "referencedDeclaration": 4858, - "src": "5100:15:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 4946, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5118:5:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "5100:23:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4948, - "nodeType": "ExpressionStatement", - "src": "5100:23:35" - }, - { - "eventCall": { - "arguments": [ - { - "hexValue": "31", - "id": 4950, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5154:1:35", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - } - ], - "id": 4949, - "name": "Initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4873, - "src": "5142:11:35", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$", - "typeString": "function (uint64)" - } - }, - "id": 4951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5142:14:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4952, - "nodeType": "EmitStatement", - "src": "5137:19:35" - } - ] - } - } - ] - }, - "documentation": { - "id": 4874, - "nodeType": "StructuredDocumentation", - "src": "3548:516:35", - "text": " @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n `onlyInitializing` functions can be used to initialize parent contracts.\n Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n production.\n Emits an {Initialized} event." - }, - "id": 4956, - "name": "initializer", - "nameLocation": "4078:11:35", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 4875, - "nodeType": "ParameterList", - "parameters": [], - "src": "4089:2:35" - }, - "src": "4069:1104:35", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5002, - "nodeType": "Block", - "src": "6291:392:35", - "statements": [ - { - "assignments": [ - 4963 - ], - "declarations": [ - { - "constant": false, - "id": 4963, - "mutability": "mutable", - "name": "$", - "nameLocation": "6386:1:35", - "nodeType": "VariableDeclaration", - "scope": 5002, - "src": "6357:30:35", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage" - }, - "typeName": { - "id": 4962, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4961, - "name": "InitializableStorage", - "nameLocations": [ - "6357:20:35" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4859, - "src": "6357:20:35" - }, - "referencedDeclaration": 4859, - "src": "6357:20:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage" - } - }, - "visibility": "internal" - } - ], - "id": 4966, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4964, - "name": "_getInitializableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5101, - "src": "6390:24:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", - "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" - } - }, - "id": 4965, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6390:26:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6357:59:35" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 4973, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 4967, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4963, - "src": "6431:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4968, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6433:13:35", - "memberName": "_initializing", - "nodeType": "MemberAccess", - "referencedDeclaration": 4858, - "src": "6431:15:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 4972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 4969, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4963, - "src": "6450:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4970, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6452:12:35", - "memberName": "_initialized", - "nodeType": "MemberAccess", - "referencedDeclaration": 4855, - "src": "6450:14:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 4971, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4959, - "src": "6468:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "6450:25:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "6431:44:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4978, - "nodeType": "IfStatement", - "src": "6427:105:35", - "trueBody": { - "id": 4977, - "nodeType": "Block", - "src": "6477:55:35", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4974, - "name": "InvalidInitialization", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4865, - "src": "6498:21:35", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 4975, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6498:23:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 4976, - "nodeType": "RevertStatement", - "src": "6491:30:35" - } - ] - } - }, - { - "expression": { - "id": 4983, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4979, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4963, - "src": "6541:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4981, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6543:12:35", - "memberName": "_initialized", - "nodeType": "MemberAccess", - "referencedDeclaration": 4855, - "src": "6541:14:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4982, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4959, - "src": "6558:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "6541:24:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "id": 4984, - "nodeType": "ExpressionStatement", - "src": "6541:24:35" - }, - { - "expression": { - "id": 4989, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4985, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4963, - "src": "6575:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4987, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6577:13:35", - "memberName": "_initializing", - "nodeType": "MemberAccess", - "referencedDeclaration": 4858, - "src": "6575:15:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 4988, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6593:4:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "6575:22:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4990, - "nodeType": "ExpressionStatement", - "src": "6575:22:35" - }, - { - "id": 4991, - "nodeType": "PlaceholderStatement", - "src": "6607:1:35" - }, - { - "expression": { - "id": 4996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4992, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4963, - "src": "6618:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 4994, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6620:13:35", - "memberName": "_initializing", - "nodeType": "MemberAccess", - "referencedDeclaration": 4858, - "src": "6618:15:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 4995, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6636:5:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "6618:23:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4997, - "nodeType": "ExpressionStatement", - "src": "6618:23:35" - }, - { - "eventCall": { - "arguments": [ - { - "id": 4999, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4959, - "src": "6668:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 4998, - "name": "Initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4873, - "src": "6656:11:35", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$", - "typeString": "function (uint64)" - } - }, - "id": 5000, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6656:20:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5001, - "nodeType": "EmitStatement", - "src": "6651:25:35" - } - ] - }, - "documentation": { - "id": 4957, - "nodeType": "StructuredDocumentation", - "src": "5179:1068:35", - "text": " @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n used to initialize parent contracts.\n A reinitializer may be used after the original initialization step. This is essential to configure modules that\n are added through upgrades and that require initialization.\n When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n cannot be nested. If one is invoked in the context of another, execution will revert.\n Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n a contract, executing them in the right order is up to the developer or operator.\n WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n Emits an {Initialized} event." - }, - "id": 5003, - "name": "reinitializer", - "nameLocation": "6261:13:35", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 4960, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4959, - "mutability": "mutable", - "name": "version", - "nameLocation": "6282:7:35", - "nodeType": "VariableDeclaration", - "scope": 5003, - "src": "6275:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 4958, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "6275:6:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "6274:16:35" - }, - "src": "6252:431:35", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5010, - "nodeType": "Block", - "src": "6921:48:35", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5006, - "name": "_checkInitializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5024, - "src": "6931:18:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$__$", - "typeString": "function () view" - } - }, - "id": 5007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6931:20:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5008, - "nodeType": "ExpressionStatement", - "src": "6931:20:35" - }, - { - "id": 5009, - "nodeType": "PlaceholderStatement", - "src": "6961:1:35" - } - ] - }, - "documentation": { - "id": 5004, - "nodeType": "StructuredDocumentation", - "src": "6689:199:35", - "text": " @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} and {reinitializer} modifiers, directly or indirectly." - }, - "id": 5011, - "name": "onlyInitializing", - "nameLocation": "6902:16:35", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 5005, - "nodeType": "ParameterList", - "parameters": [], - "src": "6918:2:35" - }, - "src": "6893:76:35", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5023, - "nodeType": "Block", - "src": "7136:89:35", - "statements": [ - { - "condition": { - "id": 5017, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "7150:18:35", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5015, - "name": "_isInitializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5092, - "src": "7151:15:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 5016, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7151:17:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5022, - "nodeType": "IfStatement", - "src": "7146:73:35", - "trueBody": { - "id": 5021, - "nodeType": "Block", - "src": "7170:49:35", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5018, - "name": "NotInitializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4868, - "src": "7191:15:35", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 5019, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7191:17:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 5020, - "nodeType": "RevertStatement", - "src": "7184:24:35" - } - ] - } - } - ] - }, - "documentation": { - "id": 5012, - "nodeType": "StructuredDocumentation", - "src": "6975:104:35", - "text": " @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}." - }, - "id": 5024, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkInitializing", - "nameLocation": "7093:18:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5013, - "nodeType": "ParameterList", - "parameters": [], - "src": "7111:2:35" - }, - "returnParameters": { - "id": 5014, - "nodeType": "ParameterList", - "parameters": [], - "src": "7136:0:35" - }, - "scope": 5102, - "src": "7084:141:35", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5069, - "nodeType": "Block", - "src": "7760:373:35", - "statements": [ - { - "assignments": [ - 5030 - ], - "declarations": [ - { - "constant": false, - "id": 5030, - "mutability": "mutable", - "name": "$", - "nameLocation": "7855:1:35", - "nodeType": "VariableDeclaration", - "scope": 5069, - "src": "7826:30:35", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage" - }, - "typeName": { - "id": 5029, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5028, - "name": "InitializableStorage", - "nameLocations": [ - "7826:20:35" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4859, - "src": "7826:20:35" - }, - "referencedDeclaration": 4859, - "src": "7826:20:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage" - } - }, - "visibility": "internal" - } - ], - "id": 5033, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5031, - "name": "_getInitializableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5101, - "src": "7859:24:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", - "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" - } - }, - "id": 5032, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7859:26:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7826:59:35" - }, - { - "condition": { - "expression": { - "id": 5034, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5030, - "src": "7900:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 5035, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7902:13:35", - "memberName": "_initializing", - "nodeType": "MemberAccess", - "referencedDeclaration": 4858, - "src": "7900:15:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5040, - "nodeType": "IfStatement", - "src": "7896:76:35", - "trueBody": { - "id": 5039, - "nodeType": "Block", - "src": "7917:55:35", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5036, - "name": "InvalidInitialization", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4865, - "src": "7938:21:35", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 5037, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7938:23:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 5038, - "nodeType": "RevertStatement", - "src": "7931:30:35" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 5048, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5041, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5030, - "src": "7985:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 5042, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7987:12:35", - "memberName": "_initialized", - "nodeType": "MemberAccess", - "referencedDeclaration": 4855, - "src": "7985:14:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 5045, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8008:6:35", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 5044, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "8008:6:35", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - } - ], - "id": 5043, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -27, - "src": "8003:4:35", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5046, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8003:12:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint64", - "typeString": "type(uint64)" - } - }, - "id": 5047, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "8016:3:35", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "8003:16:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "7985:34:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5068, - "nodeType": "IfStatement", - "src": "7981:146:35", - "trueBody": { - "id": 5067, - "nodeType": "Block", - "src": "8021:106:35", - "statements": [ - { - "expression": { - "id": 5057, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5049, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5030, - "src": "8035:1:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 5051, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8037:12:35", - "memberName": "_initialized", - "nodeType": "MemberAccess", - "referencedDeclaration": 4855, - "src": "8035:14:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "arguments": [ - { - "id": 5054, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8057:6:35", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 5053, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "8057:6:35", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - } - ], - "id": 5052, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -27, - "src": "8052:4:35", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5055, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8052:12:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint64", - "typeString": "type(uint64)" - } - }, - "id": 5056, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "8065:3:35", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "8052:16:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "8035:33:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "id": 5058, - "nodeType": "ExpressionStatement", - "src": "8035:33:35" - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "arguments": [ - { - "id": 5062, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8104:6:35", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 5061, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "8104:6:35", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - } - ], - "id": 5060, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -27, - "src": "8099:4:35", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5063, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8099:12:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint64", - "typeString": "type(uint64)" - } - }, - "id": 5064, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "8112:3:35", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "8099:16:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 5059, - "name": "Initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4873, - "src": "8087:11:35", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$", - "typeString": "function (uint64)" - } - }, - "id": 5065, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8087:29:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5066, - "nodeType": "EmitStatement", - "src": "8082:34:35" - } - ] - } - } - ] - }, - "documentation": { - "id": 5025, - "nodeType": "StructuredDocumentation", - "src": "7231:475:35", - "text": " @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n through proxies.\n Emits an {Initialized} event the first time it is successfully executed." - }, - "id": 5070, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_disableInitializers", - "nameLocation": "7720:20:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5026, - "nodeType": "ParameterList", - "parameters": [], - "src": "7740:2:35" - }, - "returnParameters": { - "id": 5027, - "nodeType": "ParameterList", - "parameters": [], - "src": "7760:0:35" - }, - "scope": 5102, - "src": "7711:422:35", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5080, - "nodeType": "Block", - "src": "8308:63:35", - "statements": [ - { - "expression": { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5076, - "name": "_getInitializableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5101, - "src": "8325:24:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", - "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" - } - }, - "id": 5077, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8325:26:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 5078, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8352:12:35", - "memberName": "_initialized", - "nodeType": "MemberAccess", - "referencedDeclaration": 4855, - "src": "8325:39:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "functionReturnParameters": 5075, - "id": 5079, - "nodeType": "Return", - "src": "8318:46:35" - } - ] - }, - "documentation": { - "id": 5071, - "nodeType": "StructuredDocumentation", - "src": "8139:99:35", - "text": " @dev Returns the highest version that has been initialized. See {reinitializer}." - }, - "id": 5081, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getInitializedVersion", - "nameLocation": "8252:22:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5072, - "nodeType": "ParameterList", - "parameters": [], - "src": "8274:2:35" - }, - "returnParameters": { - "id": 5075, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5074, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5081, - "src": "8300:6:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 5073, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "8300:6:35", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "8299:8:35" - }, - "scope": 5102, - "src": "8243:128:35", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5091, - "nodeType": "Block", - "src": "8543:64:35", - "statements": [ - { - "expression": { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5087, - "name": "_getInitializableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5101, - "src": "8560:24:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$4859_storage_ptr_$", - "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)" - } - }, - "id": 5088, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8560:26:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage storage pointer" - } - }, - "id": 5089, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8587:13:35", - "memberName": "_initializing", - "nodeType": "MemberAccess", - "referencedDeclaration": 4858, - "src": "8560:40:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 5086, - "id": 5090, - "nodeType": "Return", - "src": "8553:47:35" - } - ] - }, - "documentation": { - "id": 5082, - "nodeType": "StructuredDocumentation", - "src": "8377:105:35", - "text": " @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}." - }, - "id": 5092, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_isInitializing", - "nameLocation": "8496:15:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5083, - "nodeType": "ParameterList", - "parameters": [], - "src": "8511:2:35" - }, - "returnParameters": { - "id": 5086, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5085, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5092, - "src": "8537:4:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5084, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8537:4:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "8536:6:35" - }, - "scope": 5102, - "src": "8487:120:35", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5100, - "nodeType": "Block", - "src": "8827:80:35", - "statements": [ - { - "AST": { - "nativeSrc": "8846:55:35", - "nodeType": "YulBlock", - "src": "8846:55:35", - "statements": [ - { - "nativeSrc": "8860:31:35", - "nodeType": "YulAssignment", - "src": "8860:31:35", - "value": { - "name": "INITIALIZABLE_STORAGE", - "nativeSrc": "8870:21:35", - "nodeType": "YulIdentifier", - "src": "8870:21:35" - }, - "variableNames": [ - { - "name": "$.slot", - "nativeSrc": "8860:6:35", - "nodeType": "YulIdentifier", - "src": "8860:6:35" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 5097, - "isOffset": false, - "isSlot": true, - "src": "8860:6:35", - "suffix": "slot", - "valueSize": 1 - }, - { - "declaration": 4862, - "isOffset": false, - "isSlot": false, - "src": "8870:21:35", - "valueSize": 1 - } - ], - "id": 5099, - "nodeType": "InlineAssembly", - "src": "8837:64:35" - } - ] - }, - "documentation": { - "id": 5093, - "nodeType": "StructuredDocumentation", - "src": "8613:67:35", - "text": " @dev Returns a pointer to the storage namespace." - }, - "id": 5101, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getInitializableStorage", - "nameLocation": "8746:24:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5094, - "nodeType": "ParameterList", - "parameters": [], - "src": "8770:2:35" - }, - "returnParameters": { - "id": 5098, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5097, - "mutability": "mutable", - "name": "$", - "nameLocation": "8824:1:35", - "nodeType": "VariableDeclaration", - "scope": 5101, - "src": "8795:30:35", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage" - }, - "typeName": { - "id": 5096, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5095, - "name": "InitializableStorage", - "nameLocations": [ - "8795:20:35" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4859, - "src": "8795:20:35" - }, - "referencedDeclaration": 4859, - "src": "8795:20:35", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InitializableStorage_$4859_storage_ptr", - "typeString": "struct Initializable.InitializableStorage" - } - }, - "visibility": "internal" - } - ], - "src": "8794:32:35" - }, - "scope": 5102, - "src": "8737:170:35", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - } - ], - "scope": 5103, - "src": "2349:6560:35", - "usedErrors": [ - 4865, - 4868 - ], - "usedEvents": [ - 4873 - ] - } - ], - "src": "113:8797:35" - }, - "id": 35 - }, - "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", - "exportedSymbols": { - "ContextUpgradeable": [ - 5148 - ], - "Initializable": [ - 5102 - ] - }, - "id": 5149, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5104, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "101:24:36" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "file": "../proxy/utils/Initializable.sol", - "id": 5106, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5149, - "sourceUnit": 5103, - "src": "126:63:36", - "symbolAliases": [ - { - "foreign": { - "id": 5105, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5102, - "src": "134:13:36", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 5108, - "name": "Initializable", - "nameLocations": [ - "728:13:36" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5102, - "src": "728:13:36" - }, - "id": 5109, - "nodeType": "InheritanceSpecifier", - "src": "728:13:36" - } - ], - "canonicalName": "ContextUpgradeable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 5107, - "nodeType": "StructuredDocumentation", - "src": "191:496:36", - "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts." - }, - "fullyImplemented": true, - "id": 5148, - "linearizedBaseContracts": [ - 5148, - 5102 - ], - "name": "ContextUpgradeable", - "nameLocation": "706:18:36", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 5114, - "nodeType": "Block", - "src": "800:7:36", - "statements": [] - }, - "id": 5115, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5112, - "kind": "modifierInvocation", - "modifierName": { - "id": 5111, - "name": "onlyInitializing", - "nameLocations": [ - "783:16:36" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "783:16:36" - }, - "nodeType": "ModifierInvocation", - "src": "783:16:36" - } - ], - "name": "__Context_init", - "nameLocation": "757:14:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5110, - "nodeType": "ParameterList", - "parameters": [], - "src": "771:2:36" - }, - "returnParameters": { - "id": 5113, - "nodeType": "ParameterList", - "parameters": [], - "src": "800:0:36" - }, - "scope": 5148, - "src": "748:59:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5120, - "nodeType": "Block", - "src": "875:7:36", - "statements": [] - }, - "id": 5121, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5118, - "kind": "modifierInvocation", - "modifierName": { - "id": 5117, - "name": "onlyInitializing", - "nameLocations": [ - "858:16:36" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "858:16:36" - }, - "nodeType": "ModifierInvocation", - "src": "858:16:36" - } - ], - "name": "__Context_init_unchained", - "nameLocation": "822:24:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5116, - "nodeType": "ParameterList", - "parameters": [], - "src": "846:2:36" - }, - "returnParameters": { - "id": 5119, - "nodeType": "ParameterList", - "parameters": [], - "src": "875:0:36" - }, - "scope": 5148, - "src": "813:69:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5129, - "nodeType": "Block", - "src": "949:34:36", - "statements": [ - { - "expression": { - "expression": { - "id": 5126, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "966:3:36", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5127, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "970:6:36", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "966:10:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 5125, - "id": 5128, - "nodeType": "Return", - "src": "959:17:36" - } - ] - }, - "id": 5130, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_msgSender", - "nameLocation": "896:10:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5122, - "nodeType": "ParameterList", - "parameters": [], - "src": "906:2:36" - }, - "returnParameters": { - "id": 5125, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5124, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5130, - "src": "940:7:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5123, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "940:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "939:9:36" - }, - "scope": 5148, - "src": "887:96:36", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5138, - "nodeType": "Block", - "src": "1056:32:36", - "statements": [ - { - "expression": { - "expression": { - "id": 5135, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1073:3:36", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1077:4:36", - "memberName": "data", - "nodeType": "MemberAccess", - "src": "1073:8:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "functionReturnParameters": 5134, - "id": 5137, - "nodeType": "Return", - "src": "1066:15:36" - } - ] - }, - "id": 5139, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_msgData", - "nameLocation": "998:8:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5131, - "nodeType": "ParameterList", - "parameters": [], - "src": "1006:2:36" - }, - "returnParameters": { - "id": 5134, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5133, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5139, - "src": "1040:14:36", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5132, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1040:5:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1039:16:36" - }, - "scope": 5148, - "src": "989:99:36", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5146, - "nodeType": "Block", - "src": "1166:25:36", - "statements": [ - { - "expression": { - "hexValue": "30", - "id": 5144, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1183:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 5143, - "id": 5145, - "nodeType": "Return", - "src": "1176:8:36" - } - ] - }, - "id": 5147, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_contextSuffixLength", - "nameLocation": "1103:20:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5140, - "nodeType": "ParameterList", - "parameters": [], - "src": "1123:2:36" - }, - "returnParameters": { - "id": 5143, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5142, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5147, - "src": "1157:7:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5141, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1157:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1156:9:36" - }, - "scope": 5148, - "src": "1094:97:36", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 5149, - "src": "688:505:36", - "usedErrors": [ - 4865, - 4868 - ], - "usedEvents": [ - 4873 - ] - } - ], - "src": "101:1093:36" - }, - "id": 36 - }, - "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol", - "exportedSymbols": { - "Address": [ - 6127 - ], - "ContextUpgradeable": [ - 5148 - ], - "Initializable": [ - 5102 - ], - "MulticallUpgradeable": [ - 5251 - ] - }, - "id": 5252, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5150, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "103:24:37" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/Address.sol", - "file": "@openzeppelin/contracts/utils/Address.sol", - "id": 5152, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5252, - "sourceUnit": 6128, - "src": "129:66:37", - "symbolAliases": [ - { - "foreign": { - "id": 5151, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6127, - "src": "137:7:37", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", - "file": "./ContextUpgradeable.sol", - "id": 5154, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5252, - "sourceUnit": 5149, - "src": "196:60:37", - "symbolAliases": [ - { - "foreign": { - "id": 5153, - "name": "ContextUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5148, - "src": "204:18:37", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "file": "../proxy/utils/Initializable.sol", - "id": 5156, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5252, - "sourceUnit": 5103, - "src": "257:63:37", - "symbolAliases": [ - { - "foreign": { - "id": 5155, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5102, - "src": "265:13:37", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 5158, - "name": "Initializable", - "nameLocations": [ - "1162:13:37" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5102, - "src": "1162:13:37" - }, - "id": 5159, - "nodeType": "InheritanceSpecifier", - "src": "1162:13:37" - }, - { - "baseName": { - "id": 5160, - "name": "ContextUpgradeable", - "nameLocations": [ - "1177:18:37" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5148, - "src": "1177:18:37" - }, - "id": 5161, - "nodeType": "InheritanceSpecifier", - "src": "1177:18:37" - } - ], - "canonicalName": "MulticallUpgradeable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 5157, - "nodeType": "StructuredDocumentation", - "src": "322:797:37", - "text": " @dev Provides a function to batch together multiple calls in a single external call.\n Consider any assumption about calldata validation performed by the sender may be violated if it's not especially\n careful about sending transactions invoking {multicall}. For example, a relay address that filters function\n selectors won't filter calls nested within a {multicall} operation.\n NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {_msgSender}).\n If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data`\n to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of\n {_msgSender} are not propagated to subcalls." - }, - "fullyImplemented": true, - "id": 5251, - "linearizedBaseContracts": [ - 5251, - 5148, - 5102 - ], - "name": "MulticallUpgradeable", - "nameLocation": "1138:20:37", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 5166, - "nodeType": "Block", - "src": "1256:7:37", - "statements": [] - }, - "id": 5167, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5164, - "kind": "modifierInvocation", - "modifierName": { - "id": 5163, - "name": "onlyInitializing", - "nameLocations": [ - "1239:16:37" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "1239:16:37" - }, - "nodeType": "ModifierInvocation", - "src": "1239:16:37" - } - ], - "name": "__Multicall_init", - "nameLocation": "1211:16:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5162, - "nodeType": "ParameterList", - "parameters": [], - "src": "1227:2:37" - }, - "returnParameters": { - "id": 5165, - "nodeType": "ParameterList", - "parameters": [], - "src": "1256:0:37" - }, - "scope": 5251, - "src": "1202:61:37", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5172, - "nodeType": "Block", - "src": "1333:7:37", - "statements": [] - }, - "id": 5173, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5170, - "kind": "modifierInvocation", - "modifierName": { - "id": 5169, - "name": "onlyInitializing", - "nameLocations": [ - "1316:16:37" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "1316:16:37" - }, - "nodeType": "ModifierInvocation", - "src": "1316:16:37" - } - ], - "name": "__Multicall_init_unchained", - "nameLocation": "1278:26:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5168, - "nodeType": "ParameterList", - "parameters": [], - "src": "1304:2:37" - }, - "returnParameters": { - "id": 5171, - "nodeType": "ParameterList", - "parameters": [], - "src": "1333:0:37" - }, - "scope": 5251, - "src": "1269:71:37", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5249, - "nodeType": "Block", - "src": "1594:392:37", - "statements": [ - { - "assignments": [ - 5184 - ], - "declarations": [ - { - "constant": false, - "id": 5184, - "mutability": "mutable", - "name": "context", - "nameLocation": "1617:7:37", - "nodeType": "VariableDeclaration", - "scope": 5249, - "src": "1604:20:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5183, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1604:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 5204, - "initialValue": { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 5189, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5185, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1627:3:37", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1631:6:37", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1627:10:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5187, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5130, - "src": "1641:10:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 5188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1641:12:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1627:26:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "baseExpression": { - "expression": { - "id": 5194, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1695:3:37", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1699:4:37", - "memberName": "data", - "nodeType": "MemberAccess", - "src": "1695:8:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 5202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "1695:51:37", - "startExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5201, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 5196, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1704:3:37", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1708:4:37", - "memberName": "data", - "nodeType": "MemberAccess", - "src": "1704:8:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 5198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1713:6:37", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1704:15:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5199, - "name": "_contextSuffixLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5147, - "src": "1722:20:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 5200, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1722:22:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1704:40:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - "id": 5203, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "1627:119:37", - "trueExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 5192, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1678:1:37", - "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": 5191, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1668:9:37", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (uint256) pure returns (bytes memory)" - }, - "typeName": { - "id": 5190, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1672:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - } - }, - "id": 5193, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1668:12:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1604:142:37" - }, - { - "expression": { - "id": 5212, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5205, - "name": "results", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5181, - "src": "1757:7:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "typeString": "bytes memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 5209, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5177, - "src": "1779:4:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - "id": 5210, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1784:6:37", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1779:11:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5208, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1767:11:37", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (bytes memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 5206, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1771:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 5207, - "nodeType": "ArrayTypeName", - "src": "1771:7:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - } - }, - "id": 5211, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1767:24:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "typeString": "bytes memory[] memory" - } - }, - "src": "1757:34:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "typeString": "bytes memory[] memory" - } - }, - "id": 5213, - "nodeType": "ExpressionStatement", - "src": "1757:34:37" - }, - { - "body": { - "id": 5245, - "nodeType": "Block", - "src": "1843:113:37", - "statements": [ - { - "expression": { - "id": 5243, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 5225, - "name": "results", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5181, - "src": "1857:7:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "typeString": "bytes memory[] memory" - } - }, - "id": 5227, - "indexExpression": { - "id": 5226, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5215, - "src": "1865:1:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1857:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "id": 5232, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "1907:4:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_MulticallUpgradeable_$5251", - "typeString": "contract MulticallUpgradeable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_MulticallUpgradeable_$5251", - "typeString": "contract MulticallUpgradeable" - } - ], - "id": 5231, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1899:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5230, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1899:7:37", - "typeDescriptions": {} - } - }, - "id": 5233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1899:13:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "baseExpression": { - "id": 5237, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5177, - "src": "1927:4:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - "id": 5239, - "indexExpression": { - "id": 5238, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5215, - "src": "1932:1:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1927:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "id": 5240, - "name": "context", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5184, - "src": "1936:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 5235, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1914:5:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 5234, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1914:5:37", - "typeDescriptions": {} - } - }, - "id": 5236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1920:6:37", - "memberName": "concat", - "nodeType": "MemberAccess", - "src": "1914:12:37", - "typeDescriptions": { - "typeIdentifier": "t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 5241, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1914:30:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 5228, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6127, - "src": "1870:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Address_$6127_$", - "typeString": "type(library Address)" - } - }, - "id": 5229, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1878:20:37", - "memberName": "functionDelegateCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 6046, - "src": "1870:28:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory) returns (bytes memory)" - } - }, - "id": 5242, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1870:75:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "src": "1857:88:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5244, - "nodeType": "ExpressionStatement", - "src": "1857:88:37" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5221, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5218, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5215, - "src": "1821:1:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "id": 5219, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5177, - "src": "1825:4:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - "id": 5220, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1830:6:37", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1825:11:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1821:15:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5246, - "initializationExpression": { - "assignments": [ - 5215 - ], - "declarations": [ - { - "constant": false, - "id": 5215, - "mutability": "mutable", - "name": "i", - "nameLocation": "1814:1:37", - "nodeType": "VariableDeclaration", - "scope": 5246, - "src": "1806:9:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5214, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1806:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5217, - "initialValue": { - "hexValue": "30", - "id": 5216, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1818:1:37", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "1806:13:37" - }, - "isSimpleCounterLoop": true, - "loopExpression": { - "expression": { - "id": 5223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "1838:3:37", - "subExpression": { - "id": 5222, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5215, - "src": "1838:1:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 5224, - "nodeType": "ExpressionStatement", - "src": "1838:3:37" - }, - "nodeType": "ForStatement", - "src": "1801:155:37" - }, - { - "expression": { - "id": 5247, - "name": "results", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5181, - "src": "1972:7:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "typeString": "bytes memory[] memory" - } - }, - "functionReturnParameters": 5182, - "id": 5248, - "nodeType": "Return", - "src": "1965:14:37" - } - ] - }, - "documentation": { - "id": 5174, - "nodeType": "StructuredDocumentation", - "src": "1345:152:37", - "text": " @dev Receives and executes a batch of function calls on this contract.\n @custom:oz-upgrades-unsafe-allow-reachable delegatecall" - }, - "functionSelector": "ac9650d8", - "id": 5250, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "multicall", - "nameLocation": "1511:9:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5178, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5177, - "mutability": "mutable", - "name": "data", - "nameLocation": "1538:4:37", - "nodeType": "VariableDeclaration", - "scope": 5250, - "src": "1521:21:37", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 5175, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1521:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 5176, - "nodeType": "ArrayTypeName", - "src": "1521:7:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - } - ], - "src": "1520:23:37" - }, - "returnParameters": { - "id": 5182, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5181, - "mutability": "mutable", - "name": "results", - "nameLocation": "1585:7:37", - "nodeType": "VariableDeclaration", - "scope": 5250, - "src": "1570:22:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 5179, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1570:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 5180, - "nodeType": "ArrayTypeName", - "src": "1570:7:37", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - } - ], - "src": "1569:24:37" - }, - "scope": 5251, - "src": "1502:484:37", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "external" - } - ], - "scope": 5252, - "src": "1120:868:37", - "usedErrors": [ - 4865, - 4868, - 5887, - 5890 - ], - "usedEvents": [ - 4873 - ] - } - ], - "src": "103:1886:37" - }, - "id": 37 - }, - "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", - "exportedSymbols": { - "ContextUpgradeable": [ - 5148 - ], - "Initializable": [ - 5102 - ], - "PausableUpgradeable": [ - 5427 - ] - }, - "id": 5428, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5253, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "102:24:38" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", - "file": "../utils/ContextUpgradeable.sol", - "id": 5255, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5428, - "sourceUnit": 5149, - "src": "128:67:38", - "symbolAliases": [ - { - "foreign": { - "id": 5254, - "name": "ContextUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5148, - "src": "136:18:38", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "file": "../proxy/utils/Initializable.sol", - "id": 5257, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5428, - "sourceUnit": 5103, - "src": "196:63:38", - "symbolAliases": [ - { - "foreign": { - "id": 5256, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5102, - "src": "204:13:38", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 5259, - "name": "Initializable", - "nameLocations": [ - "742:13:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5102, - "src": "742:13:38" - }, - "id": 5260, - "nodeType": "InheritanceSpecifier", - "src": "742:13:38" - }, - { - "baseName": { - "id": 5261, - "name": "ContextUpgradeable", - "nameLocations": [ - "757:18:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5148, - "src": "757:18:38" - }, - "id": 5262, - "nodeType": "InheritanceSpecifier", - "src": "757:18:38" - } - ], - "canonicalName": "PausableUpgradeable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 5258, - "nodeType": "StructuredDocumentation", - "src": "261:439:38", - "text": " @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place." - }, - "fullyImplemented": true, - "id": 5427, - "linearizedBaseContracts": [ - 5427, - 5148, - 5102 - ], - "name": "PausableUpgradeable", - "nameLocation": "719:19:38", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "PausableUpgradeable.PausableStorage", - "documentation": { - "id": 5263, - "nodeType": "StructuredDocumentation", - "src": "782:66:38", - "text": "@custom:storage-location erc7201:openzeppelin.storage.Pausable" - }, - "id": 5266, - "members": [ - { - "constant": false, - "id": 5265, - "mutability": "mutable", - "name": "_paused", - "nameLocation": "891:7:38", - "nodeType": "VariableDeclaration", - "scope": 5266, - "src": "886:12:38", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5264, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "886:4:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "name": "PausableStorage", - "nameLocation": "860:15:38", - "nodeType": "StructDefinition", - "scope": 5427, - "src": "853:52:38", - "visibility": "public" - }, - { - "constant": true, - "id": 5269, - "mutability": "constant", - "name": "PausableStorageLocation", - "nameLocation": "1048:23:38", - "nodeType": "VariableDeclaration", - "scope": 5427, - "src": "1023:117:38", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5267, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1023:7:38", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "307863643565643135633665313837653737653961656538383138346332316634663231383261623538323763623362376530376662656463643633663033333030", - "id": 5268, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1074:66:38", - "typeDescriptions": { - "typeIdentifier": "t_rational_92891662540554778686986514950364265630913525426840345632122912437671245656832_by_1", - "typeString": "int_const 9289...(69 digits omitted)...6832" - }, - "value": "0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300" - }, - "visibility": "private" - }, - { - "body": { - "id": 5276, - "nodeType": "Block", - "src": "1227:82:38", - "statements": [ - { - "AST": { - "nativeSrc": "1246:57:38", - "nodeType": "YulBlock", - "src": "1246:57:38", - "statements": [ - { - "nativeSrc": "1260:33:38", - "nodeType": "YulAssignment", - "src": "1260:33:38", - "value": { - "name": "PausableStorageLocation", - "nativeSrc": "1270:23:38", - "nodeType": "YulIdentifier", - "src": "1270:23:38" - }, - "variableNames": [ - { - "name": "$.slot", - "nativeSrc": "1260:6:38", - "nodeType": "YulIdentifier", - "src": "1260:6:38" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 5273, - "isOffset": false, - "isSlot": true, - "src": "1260:6:38", - "suffix": "slot", - "valueSize": 1 - }, - { - "declaration": 5269, - "isOffset": false, - "isSlot": false, - "src": "1270:23:38", - "valueSize": 1 - } - ], - "id": 5275, - "nodeType": "InlineAssembly", - "src": "1237:66:38" - } - ] - }, - "id": 5277, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getPausableStorage", - "nameLocation": "1156:19:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5270, - "nodeType": "ParameterList", - "parameters": [], - "src": "1175:2:38" - }, - "returnParameters": { - "id": 5274, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5273, - "mutability": "mutable", - "name": "$", - "nameLocation": "1224:1:38", - "nodeType": "VariableDeclaration", - "scope": 5277, - "src": "1200:25:38", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - }, - "typeName": { - "id": 5272, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5271, - "name": "PausableStorage", - "nameLocations": [ - "1200:15:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5266, - "src": "1200:15:38" - }, - "referencedDeclaration": 5266, - "src": "1200:15:38", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - } - }, - "visibility": "internal" - } - ], - "src": "1199:27:38" - }, - "scope": 5427, - "src": "1147:162:38", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - }, - { - "anonymous": false, - "documentation": { - "id": 5278, - "nodeType": "StructuredDocumentation", - "src": "1315:73:38", - "text": " @dev Emitted when the pause is triggered by `account`." - }, - "eventSelector": "62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258", - "id": 5282, - "name": "Paused", - "nameLocation": "1399:6:38", - "nodeType": "EventDefinition", - "parameters": { - "id": 5281, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5280, - "indexed": false, - "mutability": "mutable", - "name": "account", - "nameLocation": "1414:7:38", - "nodeType": "VariableDeclaration", - "scope": 5282, - "src": "1406:15:38", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5279, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1406:7:38", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1405:17:38" - }, - "src": "1393:30:38" - }, - { - "anonymous": false, - "documentation": { - "id": 5283, - "nodeType": "StructuredDocumentation", - "src": "1429:70:38", - "text": " @dev Emitted when the pause is lifted by `account`." - }, - "eventSelector": "5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa", - "id": 5287, - "name": "Unpaused", - "nameLocation": "1510:8:38", - "nodeType": "EventDefinition", - "parameters": { - "id": 5286, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5285, - "indexed": false, - "mutability": "mutable", - "name": "account", - "nameLocation": "1527:7:38", - "nodeType": "VariableDeclaration", - "scope": 5287, - "src": "1519:15:38", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5284, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1519:7:38", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1518:17:38" - }, - "src": "1504:32:38" - }, - { - "documentation": { - "id": 5288, - "nodeType": "StructuredDocumentation", - "src": "1542:76:38", - "text": " @dev The operation failed because the contract is paused." - }, - "errorSelector": "d93c0665", - "id": 5290, - "name": "EnforcedPause", - "nameLocation": "1629:13:38", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5289, - "nodeType": "ParameterList", - "parameters": [], - "src": "1642:2:38" - }, - "src": "1623:22:38" - }, - { - "documentation": { - "id": 5291, - "nodeType": "StructuredDocumentation", - "src": "1651:80:38", - "text": " @dev The operation failed because the contract is not paused." - }, - "errorSelector": "8dfc202b", - "id": 5293, - "name": "ExpectedPause", - "nameLocation": "1742:13:38", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5292, - "nodeType": "ParameterList", - "parameters": [], - "src": "1755:2:38" - }, - "src": "1736:22:38" - }, - { - "body": { - "id": 5302, - "nodeType": "Block", - "src": "1889:44:38", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5299, - "name": "__Pausable_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5321, - "src": "1899:25:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 5300, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1899:27:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5301, - "nodeType": "ExpressionStatement", - "src": "1899:27:38" - } - ] - }, - "documentation": { - "id": 5294, - "nodeType": "StructuredDocumentation", - "src": "1764:67:38", - "text": " @dev Initializes the contract in unpaused state." - }, - "id": 5303, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5297, - "kind": "modifierInvocation", - "modifierName": { - "id": 5296, - "name": "onlyInitializing", - "nameLocations": [ - "1872:16:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "1872:16:38" - }, - "nodeType": "ModifierInvocation", - "src": "1872:16:38" - } - ], - "name": "__Pausable_init", - "nameLocation": "1845:15:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5295, - "nodeType": "ParameterList", - "parameters": [], - "src": "1860:2:38" - }, - "returnParameters": { - "id": 5298, - "nodeType": "ParameterList", - "parameters": [], - "src": "1889:0:38" - }, - "scope": 5427, - "src": "1836:97:38", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5320, - "nodeType": "Block", - "src": "2002:93:38", - "statements": [ - { - "assignments": [ - 5310 - ], - "declarations": [ - { - "constant": false, - "id": 5310, - "mutability": "mutable", - "name": "$", - "nameLocation": "2036:1:38", - "nodeType": "VariableDeclaration", - "scope": 5320, - "src": "2012:25:38", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - }, - "typeName": { - "id": 5309, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5308, - "name": "PausableStorage", - "nameLocations": [ - "2012:15:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5266, - "src": "2012:15:38" - }, - "referencedDeclaration": 5266, - "src": "2012:15:38", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - } - }, - "visibility": "internal" - } - ], - "id": 5313, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5311, - "name": "_getPausableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5277, - "src": "2040:19:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$5266_storage_ptr_$", - "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)" - } - }, - "id": 5312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2040:21:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2012:49:38" - }, - { - "expression": { - "id": 5318, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5314, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5310, - "src": "2071:1:38", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" - } - }, - "id": 5316, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "2073:7:38", - "memberName": "_paused", - "nodeType": "MemberAccess", - "referencedDeclaration": 5265, - "src": "2071:9:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 5317, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2083:5:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "2071:17:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5319, - "nodeType": "ExpressionStatement", - "src": "2071:17:38" - } - ] - }, - "id": 5321, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5306, - "kind": "modifierInvocation", - "modifierName": { - "id": 5305, - "name": "onlyInitializing", - "nameLocations": [ - "1985:16:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "1985:16:38" - }, - "nodeType": "ModifierInvocation", - "src": "1985:16:38" - } - ], - "name": "__Pausable_init_unchained", - "nameLocation": "1948:25:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5304, - "nodeType": "ParameterList", - "parameters": [], - "src": "1973:2:38" - }, - "returnParameters": { - "id": 5307, - "nodeType": "ParameterList", - "parameters": [], - "src": "2002:0:38" - }, - "scope": 5427, - "src": "1939:156:38", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5328, - "nodeType": "Block", - "src": "2306:47:38", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5324, - "name": "_requireNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5365, - "src": "2316:17:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$__$", - "typeString": "function () view" - } - }, - "id": 5325, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2316:19:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5326, - "nodeType": "ExpressionStatement", - "src": "2316:19:38" - }, - { - "id": 5327, - "nodeType": "PlaceholderStatement", - "src": "2345:1:38" - } - ] - }, - "documentation": { - "id": 5322, - "nodeType": "StructuredDocumentation", - "src": "2101:175:38", - "text": " @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused." - }, - "id": 5329, - "name": "whenNotPaused", - "nameLocation": "2290:13:38", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 5323, - "nodeType": "ParameterList", - "parameters": [], - "src": "2303:2:38" - }, - "src": "2281:72:38", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5336, - "nodeType": "Block", - "src": "2553:44:38", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5332, - "name": "_requirePaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5378, - "src": "2563:14:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$__$", - "typeString": "function () view" - } - }, - "id": 5333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2563:16:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5334, - "nodeType": "ExpressionStatement", - "src": "2563:16:38" - }, - { - "id": 5335, - "nodeType": "PlaceholderStatement", - "src": "2589:1:38" - } - ] - }, - "documentation": { - "id": 5330, - "nodeType": "StructuredDocumentation", - "src": "2359:167:38", - "text": " @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused." - }, - "id": 5337, - "name": "whenPaused", - "nameLocation": "2540:10:38", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 5331, - "nodeType": "ParameterList", - "parameters": [], - "src": "2550:2:38" - }, - "src": "2531:66:38", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5352, - "nodeType": "Block", - "src": "2745:92:38", - "statements": [ - { - "assignments": [ - 5345 - ], - "declarations": [ - { - "constant": false, - "id": 5345, - "mutability": "mutable", - "name": "$", - "nameLocation": "2779:1:38", - "nodeType": "VariableDeclaration", - "scope": 5352, - "src": "2755:25:38", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - }, - "typeName": { - "id": 5344, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5343, - "name": "PausableStorage", - "nameLocations": [ - "2755:15:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5266, - "src": "2755:15:38" - }, - "referencedDeclaration": 5266, - "src": "2755:15:38", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - } - }, - "visibility": "internal" - } - ], - "id": 5348, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5346, - "name": "_getPausableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5277, - "src": "2783:19:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$5266_storage_ptr_$", - "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)" - } - }, - "id": 5347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2783:21:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2755:49:38" - }, - { - "expression": { - "expression": { - "id": 5349, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5345, - "src": "2821:1:38", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" - } - }, - "id": 5350, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2823:7:38", - "memberName": "_paused", - "nodeType": "MemberAccess", - "referencedDeclaration": 5265, - "src": "2821:9:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 5342, - "id": 5351, - "nodeType": "Return", - "src": "2814:16:38" - } - ] - }, - "documentation": { - "id": 5338, - "nodeType": "StructuredDocumentation", - "src": "2603:84:38", - "text": " @dev Returns true if the contract is paused, and false otherwise." - }, - "functionSelector": "5c975abb", - "id": 5353, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "paused", - "nameLocation": "2701:6:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5339, - "nodeType": "ParameterList", - "parameters": [], - "src": "2707:2:38" - }, - "returnParameters": { - "id": 5342, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5341, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5353, - "src": "2739:4:38", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5340, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2739:4:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2738:6:38" - }, - "scope": 5427, - "src": "2692:145:38", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 5364, - "nodeType": "Block", - "src": "2956:77:38", - "statements": [ - { - "condition": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5357, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5353, - "src": "2970:6:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 5358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2970:8:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5363, - "nodeType": "IfStatement", - "src": "2966:61:38", - "trueBody": { - "id": 5362, - "nodeType": "Block", - "src": "2980:47:38", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5359, - "name": "EnforcedPause", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5290, - "src": "3001:13:38", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 5360, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3001:15:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 5361, - "nodeType": "RevertStatement", - "src": "2994:22:38" - } - ] - } - } - ] - }, - "documentation": { - "id": 5354, - "nodeType": "StructuredDocumentation", - "src": "2843:57:38", - "text": " @dev Throws if the contract is paused." - }, - "id": 5365, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_requireNotPaused", - "nameLocation": "2914:17:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5355, - "nodeType": "ParameterList", - "parameters": [], - "src": "2931:2:38" - }, - "returnParameters": { - "id": 5356, - "nodeType": "ParameterList", - "parameters": [], - "src": "2956:0:38" - }, - "scope": 5427, - "src": "2905:128:38", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5377, - "nodeType": "Block", - "src": "3153:78:38", - "statements": [ - { - "condition": { - "id": 5371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "3167:9:38", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5369, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5353, - "src": "3168:6:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 5370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3168:8:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5376, - "nodeType": "IfStatement", - "src": "3163:62:38", - "trueBody": { - "id": 5375, - "nodeType": "Block", - "src": "3178:47:38", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5372, - "name": "ExpectedPause", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5293, - "src": "3199:13:38", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 5373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3199:15:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 5374, - "nodeType": "RevertStatement", - "src": "3192:22:38" - } - ] - } - } - ] - }, - "documentation": { - "id": 5366, - "nodeType": "StructuredDocumentation", - "src": "3039:61:38", - "text": " @dev Throws if the contract is not paused." - }, - "id": 5378, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_requirePaused", - "nameLocation": "3114:14:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5367, - "nodeType": "ParameterList", - "parameters": [], - "src": "3128:2:38" - }, - "returnParameters": { - "id": 5368, - "nodeType": "ParameterList", - "parameters": [], - "src": "3153:0:38" - }, - "scope": 5427, - "src": "3105:126:38", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5401, - "nodeType": "Block", - "src": "3415:127:38", - "statements": [ - { - "assignments": [ - 5386 - ], - "declarations": [ - { - "constant": false, - "id": 5386, - "mutability": "mutable", - "name": "$", - "nameLocation": "3449:1:38", - "nodeType": "VariableDeclaration", - "scope": 5401, - "src": "3425:25:38", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - }, - "typeName": { - "id": 5385, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5384, - "name": "PausableStorage", - "nameLocations": [ - "3425:15:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5266, - "src": "3425:15:38" - }, - "referencedDeclaration": 5266, - "src": "3425:15:38", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - } - }, - "visibility": "internal" - } - ], - "id": 5389, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5387, - "name": "_getPausableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5277, - "src": "3453:19:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$5266_storage_ptr_$", - "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)" - } - }, - "id": 5388, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3453:21:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3425:49:38" - }, - { - "expression": { - "id": 5394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5390, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5386, - "src": "3484:1:38", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" - } - }, - "id": 5392, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3486:7:38", - "memberName": "_paused", - "nodeType": "MemberAccess", - "referencedDeclaration": 5265, - "src": "3484:9:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 5393, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3496:4:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "3484:16:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5395, - "nodeType": "ExpressionStatement", - "src": "3484:16:38" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5397, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5130, - "src": "3522:10:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 5398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3522:12:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5396, - "name": "Paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5282, - "src": "3515:6:38", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 5399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3515:20:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5400, - "nodeType": "EmitStatement", - "src": "3510:25:38" - } - ] - }, - "documentation": { - "id": 5379, - "nodeType": "StructuredDocumentation", - "src": "3237:124:38", - "text": " @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused." - }, - "id": 5402, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5382, - "kind": "modifierInvocation", - "modifierName": { - "id": 5381, - "name": "whenNotPaused", - "nameLocations": [ - "3401:13:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5329, - "src": "3401:13:38" - }, - "nodeType": "ModifierInvocation", - "src": "3401:13:38" - } - ], - "name": "_pause", - "nameLocation": "3375:6:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5380, - "nodeType": "ParameterList", - "parameters": [], - "src": "3381:2:38" - }, - "returnParameters": { - "id": 5383, - "nodeType": "ParameterList", - "parameters": [], - "src": "3415:0:38" - }, - "scope": 5427, - "src": "3366:176:38", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5425, - "nodeType": "Block", - "src": "3722:130:38", - "statements": [ - { - "assignments": [ - 5410 - ], - "declarations": [ - { - "constant": false, - "id": 5410, - "mutability": "mutable", - "name": "$", - "nameLocation": "3756:1:38", - "nodeType": "VariableDeclaration", - "scope": 5425, - "src": "3732:25:38", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - }, - "typeName": { - "id": 5409, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5408, - "name": "PausableStorage", - "nameLocations": [ - "3732:15:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5266, - "src": "3732:15:38" - }, - "referencedDeclaration": 5266, - "src": "3732:15:38", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage" - } - }, - "visibility": "internal" - } - ], - "id": 5413, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5411, - "name": "_getPausableStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5277, - "src": "3760:19:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$5266_storage_ptr_$", - "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)" - } - }, - "id": 5412, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3760:21:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3732:49:38" - }, - { - "expression": { - "id": 5418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5414, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5410, - "src": "3791:1:38", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PausableStorage_$5266_storage_ptr", - "typeString": "struct PausableUpgradeable.PausableStorage storage pointer" - } - }, - "id": 5416, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3793:7:38", - "memberName": "_paused", - "nodeType": "MemberAccess", - "referencedDeclaration": 5265, - "src": "3791:9:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 5417, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3803:5:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "3791:17:38", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5419, - "nodeType": "ExpressionStatement", - "src": "3791:17:38" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5421, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5130, - "src": "3832:10:38", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 5422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3832:12:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5420, - "name": "Unpaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5287, - "src": "3823:8:38", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 5423, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3823:22:38", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5424, - "nodeType": "EmitStatement", - "src": "3818:27:38" - } - ] - }, - "documentation": { - "id": 5403, - "nodeType": "StructuredDocumentation", - "src": "3548:121:38", - "text": " @dev Returns to normal state.\n Requirements:\n - The contract must be paused." - }, - "id": 5426, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5406, - "kind": "modifierInvocation", - "modifierName": { - "id": 5405, - "name": "whenPaused", - "nameLocations": [ - "3711:10:38" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5337, - "src": "3711:10:38" - }, - "nodeType": "ModifierInvocation", - "src": "3711:10:38" - } - ], - "name": "_unpause", - "nameLocation": "3683:8:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5404, - "nodeType": "ParameterList", - "parameters": [], - "src": "3691:2:38" - }, - "returnParameters": { - "id": 5407, - "nodeType": "ParameterList", - "parameters": [], - "src": "3722:0:38" - }, - "scope": 5427, - "src": "3674:178:38", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 5428, - "src": "701:3153:38", - "usedErrors": [ - 4865, - 4868, - 5290, - 5293 - ], - "usedEvents": [ - 4873, - 5282, - 5287 - ] - } - ], - "src": "102:3753:38" - }, - "id": 38 - }, - "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol", - "exportedSymbols": { - "EIP712Upgradeable": [ - 5771 - ], - "IERC5267": [ - 5796 - ], - "Initializable": [ - 5102 - ], - "MessageHashUtils": [ - 6804 - ] - }, - "id": 5772, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5429, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "113:24:39" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol", - "file": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol", - "id": 5431, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5772, - "sourceUnit": 6805, - "src": "139:97:39", - "symbolAliases": [ - { - "foreign": { - "id": 5430, - "name": "MessageHashUtils", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6804, - "src": "147:16:39", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/interfaces/IERC5267.sol", - "file": "@openzeppelin/contracts/interfaces/IERC5267.sol", - "id": 5433, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5772, - "sourceUnit": 5797, - "src": "237:73:39", - "symbolAliases": [ - { - "foreign": { - "id": 5432, - "name": "IERC5267", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5796, - "src": "245:8:39", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "file": "../../proxy/utils/Initializable.sol", - "id": 5435, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5772, - "sourceUnit": 5103, - "src": "311:66:39", - "symbolAliases": [ - { - "foreign": { - "id": 5434, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5102, - "src": "319:13:39", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 5437, - "name": "Initializable", - "nameLocations": [ - "1998:13:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5102, - "src": "1998:13:39" - }, - "id": 5438, - "nodeType": "InheritanceSpecifier", - "src": "1998:13:39" - }, - { - "baseName": { - "id": 5439, - "name": "IERC5267", - "nameLocations": [ - "2013:8:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5796, - "src": "2013:8:39" - }, - "id": 5440, - "nodeType": "InheritanceSpecifier", - "src": "2013:8:39" - } - ], - "canonicalName": "EIP712Upgradeable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 5436, - "nodeType": "StructuredDocumentation", - "src": "379:1579:39", - "text": " @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n ({_hashTypedDataV4}).\n The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n the chain id to protect against replay attacks on an eventual fork of the chain.\n NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n separator from the immutable values, which is cheaper than accessing a cached version in cold storage." - }, - "fullyImplemented": true, - "id": 5771, - "linearizedBaseContracts": [ - 5771, - 5796, - 5102 - ], - "name": "EIP712Upgradeable", - "nameLocation": "1977:17:39", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 5445, - "mutability": "constant", - "name": "TYPE_HASH", - "nameLocation": "2053:9:39", - "nodeType": "VariableDeclaration", - "scope": 5771, - "src": "2028:140:39", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5441, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2028:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "id": 5443, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2083:84:39", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", - "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" - }, - "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", - "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" - } - ], - "id": 5442, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "2073:9:39", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 5444, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2073:95:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "private" - }, - { - "canonicalName": "EIP712Upgradeable.EIP712Storage", - "documentation": { - "id": 5446, - "nodeType": "StructuredDocumentation", - "src": "2175:64:39", - "text": "@custom:storage-location erc7201:openzeppelin.storage.EIP712" - }, - "id": 5457, - "members": [ - { - "constant": false, - "id": 5449, - "mutability": "mutable", - "name": "_hashedName", - "nameLocation": "2332:11:39", - "nodeType": "VariableDeclaration", - "scope": 5457, - "src": "2324:19:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5448, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2324:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5452, - "mutability": "mutable", - "name": "_hashedVersion", - "nameLocation": "2413:14:39", - "nodeType": "VariableDeclaration", - "scope": 5457, - "src": "2405:22:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5451, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2405:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5454, - "mutability": "mutable", - "name": "_name", - "nameLocation": "2445:5:39", - "nodeType": "VariableDeclaration", - "scope": 5457, - "src": "2438:12:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5453, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2438:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5456, - "mutability": "mutable", - "name": "_version", - "nameLocation": "2467:8:39", - "nodeType": "VariableDeclaration", - "scope": 5457, - "src": "2460:15:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5455, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2460:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "name": "EIP712Storage", - "nameLocation": "2251:13:39", - "nodeType": "StructDefinition", - "scope": 5771, - "src": "2244:238:39", - "visibility": "public" - }, - { - "constant": true, - "id": 5460, - "mutability": "constant", - "name": "EIP712StorageLocation", - "nameLocation": "2623:21:39", - "nodeType": "VariableDeclaration", - "scope": 5771, - "src": "2598:115:39", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5458, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2598:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "307861313661343664393432363163373531376363386666383966363163306365393335393865336338343938303130313164656536343961366135353764313030", - "id": 5459, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2647:66:39", - "typeDescriptions": { - "typeIdentifier": "t_rational_73010143390315934406010559831118728393600729754696197287367516085911467577600_by_1", - "typeString": "int_const 7301...(69 digits omitted)...7600" - }, - "value": "0xa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100" - }, - "visibility": "private" - }, - { - "body": { - "id": 5467, - "nodeType": "Block", - "src": "2796:80:39", - "statements": [ - { - "AST": { - "nativeSrc": "2815:55:39", - "nodeType": "YulBlock", - "src": "2815:55:39", - "statements": [ - { - "nativeSrc": "2829:31:39", - "nodeType": "YulAssignment", - "src": "2829:31:39", - "value": { - "name": "EIP712StorageLocation", - "nativeSrc": "2839:21:39", - "nodeType": "YulIdentifier", - "src": "2839:21:39" - }, - "variableNames": [ - { - "name": "$.slot", - "nativeSrc": "2829:6:39", - "nodeType": "YulIdentifier", - "src": "2829:6:39" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 5464, - "isOffset": false, - "isSlot": true, - "src": "2829:6:39", - "suffix": "slot", - "valueSize": 1 - }, - { - "declaration": 5460, - "isOffset": false, - "isSlot": false, - "src": "2839:21:39", - "valueSize": 1 - } - ], - "id": 5466, - "nodeType": "InlineAssembly", - "src": "2806:64:39" - } - ] - }, - "id": 5468, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getEIP712Storage", - "nameLocation": "2729:17:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5461, - "nodeType": "ParameterList", - "parameters": [], - "src": "2746:2:39" - }, - "returnParameters": { - "id": 5465, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5464, - "mutability": "mutable", - "name": "$", - "nameLocation": "2793:1:39", - "nodeType": "VariableDeclaration", - "scope": 5468, - "src": "2771:23:39", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - }, - "typeName": { - "id": 5463, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5462, - "name": "EIP712Storage", - "nameLocations": [ - "2771:13:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5457, - "src": "2771:13:39" - }, - "referencedDeclaration": 5457, - "src": "2771:13:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - } - }, - "visibility": "internal" - } - ], - "src": "2770:25:39" - }, - "scope": 5771, - "src": "2720:156:39", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 5483, - "nodeType": "Block", - "src": "3538:55:39", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5479, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5471, - "src": "3572:4:39", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 5480, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5473, - "src": "3578:7:39", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 5478, - "name": "__EIP712_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5524, - "src": "3548:23:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory,string memory)" - } - }, - "id": 5481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3548:38:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5482, - "nodeType": "ExpressionStatement", - "src": "3548:38:39" - } - ] - }, - "documentation": { - "id": 5469, - "nodeType": "StructuredDocumentation", - "src": "2882:559:39", - "text": " @dev Initializes the domain separator and parameter caches.\n The meaning of `name` and `version` is specified in\n https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n - `version`: the current major version of the signing domain.\n NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n contract upgrade]." - }, - "id": 5484, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5476, - "kind": "modifierInvocation", - "modifierName": { - "id": 5475, - "name": "onlyInitializing", - "nameLocations": [ - "3521:16:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "3521:16:39" - }, - "nodeType": "ModifierInvocation", - "src": "3521:16:39" - } - ], - "name": "__EIP712_init", - "nameLocation": "3455:13:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5474, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5471, - "mutability": "mutable", - "name": "name", - "nameLocation": "3483:4:39", - "nodeType": "VariableDeclaration", - "scope": 5484, - "src": "3469:18:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5470, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "3469:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5473, - "mutability": "mutable", - "name": "version", - "nameLocation": "3503:7:39", - "nodeType": "VariableDeclaration", - "scope": 5484, - "src": "3489:21:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5472, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "3489:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "3468:43:39" - }, - "returnParameters": { - "id": 5477, - "nodeType": "ParameterList", - "parameters": [], - "src": "3538:0:39" - }, - "scope": 5771, - "src": "3446:147:39", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5523, - "nodeType": "Block", - "src": "3701:228:39", - "statements": [ - { - "assignments": [ - 5495 - ], - "declarations": [ - { - "constant": false, - "id": 5495, - "mutability": "mutable", - "name": "$", - "nameLocation": "3733:1:39", - "nodeType": "VariableDeclaration", - "scope": 5523, - "src": "3711:23:39", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - }, - "typeName": { - "id": 5494, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5493, - "name": "EIP712Storage", - "nameLocations": [ - "3711:13:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5457, - "src": "3711:13:39" - }, - "referencedDeclaration": 5457, - "src": "3711:13:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - } - }, - "visibility": "internal" - } - ], - "id": 5498, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5496, - "name": "_getEIP712Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5468, - "src": "3737:17:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", - "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" - } - }, - "id": 5497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3737:19:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3711:45:39" - }, - { - "expression": { - "id": 5503, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5499, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5495, - "src": "3766:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5501, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3768:5:39", - "memberName": "_name", - "nodeType": "MemberAccess", - "referencedDeclaration": 5454, - "src": "3766:7:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 5502, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5486, - "src": "3776:4:39", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "src": "3766:14:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "id": 5504, - "nodeType": "ExpressionStatement", - "src": "3766:14:39" - }, - { - "expression": { - "id": 5509, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5505, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5495, - "src": "3790:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5507, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3792:8:39", - "memberName": "_version", - "nodeType": "MemberAccess", - "referencedDeclaration": 5456, - "src": "3790:10:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 5508, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5488, - "src": "3803:7:39", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "src": "3790:20:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "id": 5510, - "nodeType": "ExpressionStatement", - "src": "3790:20:39" - }, - { - "expression": { - "id": 5515, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5511, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5495, - "src": "3875:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5513, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3877:11:39", - "memberName": "_hashedName", - "nodeType": "MemberAccess", - "referencedDeclaration": 5449, - "src": "3875:13:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "30", - "id": 5514, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3891:1:39", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3875:17:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 5516, - "nodeType": "ExpressionStatement", - "src": "3875:17:39" - }, - { - "expression": { - "id": 5521, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5517, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5495, - "src": "3902:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5519, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3904:14:39", - "memberName": "_hashedVersion", - "nodeType": "MemberAccess", - "referencedDeclaration": 5452, - "src": "3902:16:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "30", - "id": 5520, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3921:1:39", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3902:20:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 5522, - "nodeType": "ExpressionStatement", - "src": "3902:20:39" - } - ] - }, - "id": 5524, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5491, - "kind": "modifierInvocation", - "modifierName": { - "id": 5490, - "name": "onlyInitializing", - "nameLocations": [ - "3684:16:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "3684:16:39" - }, - "nodeType": "ModifierInvocation", - "src": "3684:16:39" - } - ], - "name": "__EIP712_init_unchained", - "nameLocation": "3608:23:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5489, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5486, - "mutability": "mutable", - "name": "name", - "nameLocation": "3646:4:39", - "nodeType": "VariableDeclaration", - "scope": 5524, - "src": "3632:18:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5485, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "3632:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5488, - "mutability": "mutable", - "name": "version", - "nameLocation": "3666:7:39", - "nodeType": "VariableDeclaration", - "scope": 5524, - "src": "3652:21:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5487, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "3652:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "3631:43:39" - }, - "returnParameters": { - "id": 5492, - "nodeType": "ParameterList", - "parameters": [], - "src": "3701:0:39" - }, - "scope": 5771, - "src": "3599:330:39", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5533, - "nodeType": "Block", - "src": "4077:47:39", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5530, - "name": "_buildDomainSeparator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5557, - "src": "4094:21:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", - "typeString": "function () view returns (bytes32)" - } - }, - "id": 5531, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4094:23:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 5529, - "id": 5532, - "nodeType": "Return", - "src": "4087:30:39" - } - ] - }, - "documentation": { - "id": 5525, - "nodeType": "StructuredDocumentation", - "src": "3935:75:39", - "text": " @dev Returns the domain separator for the current chain." - }, - "id": 5534, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_domainSeparatorV4", - "nameLocation": "4024:18:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5526, - "nodeType": "ParameterList", - "parameters": [], - "src": "4042:2:39" - }, - "returnParameters": { - "id": 5529, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5528, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5534, - "src": "4068:7:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5527, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4068:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4067:9:39" - }, - "scope": 5771, - "src": "4015:109:39", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5556, - "nodeType": "Block", - "src": "4194:127:39", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 5542, - "name": "TYPE_HASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5445, - "src": "4232:9:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5543, - "name": "_EIP712NameHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5718, - "src": "4243:15:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", - "typeString": "function () view returns (bytes32)" - } - }, - "id": 5544, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4243:17:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5545, - "name": "_EIP712VersionHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5770, - "src": "4262:18:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", - "typeString": "function () view returns (bytes32)" - } - }, - "id": 5546, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4262:20:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 5547, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "4284:5:39", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 5548, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4290:7:39", - "memberName": "chainid", - "nodeType": "MemberAccess", - "src": "4284:13:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 5551, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "4307:4:39", - "typeDescriptions": { - "typeIdentifier": "t_contract$_EIP712Upgradeable_$5771", - "typeString": "contract EIP712Upgradeable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_EIP712Upgradeable_$5771", - "typeString": "contract EIP712Upgradeable" - } - ], - "id": 5550, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4299:7:39", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5549, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4299:7:39", - "typeDescriptions": {} - } - }, - "id": 5552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4299:13:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5540, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "4221:3:39", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 5541, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "4225:6:39", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "4221:10:39", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 5553, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4221:92:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5539, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "4211:9:39", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 5554, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4211:103:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 5538, - "id": 5555, - "nodeType": "Return", - "src": "4204:110:39" - } - ] - }, - "id": 5557, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_buildDomainSeparator", - "nameLocation": "4139:21:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5535, - "nodeType": "ParameterList", - "parameters": [], - "src": "4160:2:39" - }, - "returnParameters": { - "id": 5538, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5537, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5557, - "src": "4185:7:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5536, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4185:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4184:9:39" - }, - "scope": 5771, - "src": "4130:191:39", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 5572, - "nodeType": "Block", - "src": "5032:90:39", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5567, - "name": "_domainSeparatorV4", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5534, - "src": "5082:18:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", - "typeString": "function () view returns (bytes32)" - } - }, - "id": 5568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5082:20:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 5569, - "name": "structHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5560, - "src": "5104:10:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 5565, - "name": "MessageHashUtils", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6804, - "src": "5049:16:39", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_MessageHashUtils_$6804_$", - "typeString": "type(library MessageHashUtils)" - } - }, - "id": 5566, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5066:15:39", - "memberName": "toTypedDataHash", - "nodeType": "MemberAccess", - "referencedDeclaration": 6803, - "src": "5049:32:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32,bytes32) pure returns (bytes32)" - } - }, - "id": 5570, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5049:66:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 5564, - "id": 5571, - "nodeType": "Return", - "src": "5042:73:39" - } - ] - }, - "documentation": { - "id": 5558, - "nodeType": "StructuredDocumentation", - "src": "4327:614:39", - "text": " @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n function returns the hash of the fully encoded EIP712 message for this domain.\n This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n ```solidity\n bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n keccak256(\"Mail(address to,string contents)\"),\n mailTo,\n keccak256(bytes(mailContents))\n )));\n address signer = ECDSA.recover(digest, signature);\n ```" - }, - "id": 5573, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_hashTypedDataV4", - "nameLocation": "4955:16:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5561, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5560, - "mutability": "mutable", - "name": "structHash", - "nameLocation": "4980:10:39", - "nodeType": "VariableDeclaration", - "scope": 5573, - "src": "4972:18:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5559, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4972:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4971:20:39" - }, - "returnParameters": { - "id": 5564, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5563, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5573, - "src": "5023:7:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5562, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5023:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5022:9:39" - }, - "scope": 5771, - "src": "4946:176:39", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "baseFunctions": [ - 5795 - ], - "body": { - "id": 5633, - "nodeType": "Block", - "src": "5501:575:39", - "statements": [ - { - "assignments": [ - 5594 - ], - "declarations": [ - { - "constant": false, - "id": 5594, - "mutability": "mutable", - "name": "$", - "nameLocation": "5533:1:39", - "nodeType": "VariableDeclaration", - "scope": 5633, - "src": "5511:23:39", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - }, - "typeName": { - "id": 5593, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5592, - "name": "EIP712Storage", - "nameLocations": [ - "5511:13:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5457, - "src": "5511:13:39" - }, - "referencedDeclaration": 5457, - "src": "5511:13:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - } - }, - "visibility": "internal" - } - ], - "id": 5597, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5595, - "name": "_getEIP712Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5468, - "src": "5537:17:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", - "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" - } - }, - "id": 5596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5537:19:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5511:45:39" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 5607, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 5602, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5599, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5594, - "src": "5777:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5600, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5779:11:39", - "memberName": "_hashedName", - "nodeType": "MemberAccess", - "referencedDeclaration": 5449, - "src": "5777:13:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5601, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5794:1:39", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5777:18:39", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 5606, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5603, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5594, - "src": "5799:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5604, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5801:14:39", - "memberName": "_hashedVersion", - "nodeType": "MemberAccess", - "referencedDeclaration": 5452, - "src": "5799:16:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5605, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5819:1:39", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5799:21:39", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "5777:43:39", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4549503731323a20556e696e697469616c697a6564", - "id": 5608, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5822:23:39", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade", - "typeString": "literal_string \"EIP712: Uninitialized\"" - }, - "value": "EIP712: Uninitialized" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade", - "typeString": "literal_string \"EIP712: Uninitialized\"" - } - ], - "id": 5598, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "5769:7:39", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 5609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5769:77:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5610, - "nodeType": "ExpressionStatement", - "src": "5769:77:39" - }, - { - "expression": { - "components": [ - { - "hexValue": "0f", - "id": 5611, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "hexString", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5878:7:39", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c", - "typeString": "literal_string hex\"0f\"" - }, - "value": "\u000f" - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5612, - "name": "_EIP712Name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5650, - "src": "5908:11:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$", - "typeString": "function () view returns (string memory)" - } - }, - "id": 5613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5908:13:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5614, - "name": "_EIP712Version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5666, - "src": "5935:14:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$", - "typeString": "function () view returns (string memory)" - } - }, - "id": 5615, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5935:16:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "expression": { - "id": 5616, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "5965:5:39", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 5617, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5971:7:39", - "memberName": "chainid", - "nodeType": "MemberAccess", - "src": "5965:13:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 5620, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "6000:4:39", - "typeDescriptions": { - "typeIdentifier": "t_contract$_EIP712Upgradeable_$5771", - "typeString": "contract EIP712Upgradeable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_EIP712Upgradeable_$5771", - "typeString": "contract EIP712Upgradeable" - } - ], - "id": 5619, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5992:7:39", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5618, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5992:7:39", - "typeDescriptions": {} - } - }, - "id": 5621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5992:13:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 5624, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6027:1:39", - "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": 5623, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6019:7:39", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 5622, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6019:7:39", - "typeDescriptions": {} - } - }, - "id": 5625, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6019:10:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 5629, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6057:1:39", - "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": 5628, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "6043:13:39", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 5626, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6047:7:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 5627, - "nodeType": "ArrayTypeName", - "src": "6047:9:39", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 5630, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6043:16:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - } - ], - "id": 5631, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "5864:205:39", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$", - "typeString": "tuple(literal_string hex\"0f\",string memory,string memory,uint256,address,bytes32,uint256[] memory)" - } - }, - "functionReturnParameters": 5591, - "id": 5632, - "nodeType": "Return", - "src": "5857:212:39" - } - ] - }, - "documentation": { - "id": 5574, - "nodeType": "StructuredDocumentation", - "src": "5128:40:39", - "text": " @dev See {IERC-5267}." - }, - "functionSelector": "84b0196e", - "id": 5634, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "eip712Domain", - "nameLocation": "5182:12:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5575, - "nodeType": "ParameterList", - "parameters": [], - "src": "5194:2:39" - }, - "returnParameters": { - "id": 5591, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5577, - "mutability": "mutable", - "name": "fields", - "nameLocation": "5278:6:39", - "nodeType": "VariableDeclaration", - "scope": 5634, - "src": "5271:13:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - }, - "typeName": { - "id": 5576, - "name": "bytes1", - "nodeType": "ElementaryTypeName", - "src": "5271:6:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5579, - "mutability": "mutable", - "name": "name", - "nameLocation": "5312:4:39", - "nodeType": "VariableDeclaration", - "scope": 5634, - "src": "5298:18:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5578, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "5298:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5581, - "mutability": "mutable", - "name": "version", - "nameLocation": "5344:7:39", - "nodeType": "VariableDeclaration", - "scope": 5634, - "src": "5330:21:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5580, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "5330:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5583, - "mutability": "mutable", - "name": "chainId", - "nameLocation": "5373:7:39", - "nodeType": "VariableDeclaration", - "scope": 5634, - "src": "5365:15:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5582, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5365:7:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5585, - "mutability": "mutable", - "name": "verifyingContract", - "nameLocation": "5402:17:39", - "nodeType": "VariableDeclaration", - "scope": 5634, - "src": "5394:25:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5584, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5394:7:39", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5587, - "mutability": "mutable", - "name": "salt", - "nameLocation": "5441:4:39", - "nodeType": "VariableDeclaration", - "scope": 5634, - "src": "5433:12:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5586, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5433:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5590, - "mutability": "mutable", - "name": "extensions", - "nameLocation": "5476:10:39", - "nodeType": "VariableDeclaration", - "scope": 5634, - "src": "5459:27:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 5588, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5459:7:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 5589, - "nodeType": "ArrayTypeName", - "src": "5459:9:39", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - } - ], - "src": "5257:239:39" - }, - "scope": 5771, - "src": "5173:903:39", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 5649, - "nodeType": "Block", - "src": "6369:86:39", - "statements": [ - { - "assignments": [ - 5642 - ], - "declarations": [ - { - "constant": false, - "id": 5642, - "mutability": "mutable", - "name": "$", - "nameLocation": "6401:1:39", - "nodeType": "VariableDeclaration", - "scope": 5649, - "src": "6379:23:39", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - }, - "typeName": { - "id": 5641, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5640, - "name": "EIP712Storage", - "nameLocations": [ - "6379:13:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5457, - "src": "6379:13:39" - }, - "referencedDeclaration": 5457, - "src": "6379:13:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - } - }, - "visibility": "internal" - } - ], - "id": 5645, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5643, - "name": "_getEIP712Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5468, - "src": "6405:17:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", - "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" - } - }, - "id": 5644, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6405:19:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6379:45:39" - }, - { - "expression": { - "expression": { - "id": 5646, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5642, - "src": "6441:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5647, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6443:5:39", - "memberName": "_name", - "nodeType": "MemberAccess", - "referencedDeclaration": 5454, - "src": "6441:7:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "functionReturnParameters": 5639, - "id": 5648, - "nodeType": "Return", - "src": "6434:14:39" - } - ] - }, - "documentation": { - "id": 5635, - "nodeType": "StructuredDocumentation", - "src": "6082:213:39", - "text": " @dev The name parameter for the EIP712 domain.\n NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n are a concern." - }, - "id": 5650, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_EIP712Name", - "nameLocation": "6309:11:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5636, - "nodeType": "ParameterList", - "parameters": [], - "src": "6320:2:39" - }, - "returnParameters": { - "id": 5639, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5638, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5650, - "src": "6354:13:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5637, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6354:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "6353:15:39" - }, - "scope": 5771, - "src": "6300:155:39", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5665, - "nodeType": "Block", - "src": "6754:89:39", - "statements": [ - { - "assignments": [ - 5658 - ], - "declarations": [ - { - "constant": false, - "id": 5658, - "mutability": "mutable", - "name": "$", - "nameLocation": "6786:1:39", - "nodeType": "VariableDeclaration", - "scope": 5665, - "src": "6764:23:39", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - }, - "typeName": { - "id": 5657, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5656, - "name": "EIP712Storage", - "nameLocations": [ - "6764:13:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5457, - "src": "6764:13:39" - }, - "referencedDeclaration": 5457, - "src": "6764:13:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - } - }, - "visibility": "internal" - } - ], - "id": 5661, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5659, - "name": "_getEIP712Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5468, - "src": "6790:17:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", - "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" - } - }, - "id": 5660, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6790:19:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6764:45:39" - }, - { - "expression": { - "expression": { - "id": 5662, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5658, - "src": "6826:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5663, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6828:8:39", - "memberName": "_version", - "nodeType": "MemberAccess", - "referencedDeclaration": 5456, - "src": "6826:10:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "functionReturnParameters": 5655, - "id": 5664, - "nodeType": "Return", - "src": "6819:17:39" - } - ] - }, - "documentation": { - "id": 5651, - "nodeType": "StructuredDocumentation", - "src": "6461:216:39", - "text": " @dev The version parameter for the EIP712 domain.\n NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n are a concern." - }, - "id": 5666, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_EIP712Version", - "nameLocation": "6691:14:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5652, - "nodeType": "ParameterList", - "parameters": [], - "src": "6705:2:39" - }, - "returnParameters": { - "id": 5655, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5654, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5666, - "src": "6739:13:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5653, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6739:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "6738:15:39" - }, - "scope": 5771, - "src": "6682:161:39", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5717, - "nodeType": "Block", - "src": "7117:628:39", - "statements": [ - { - "assignments": [ - 5674 - ], - "declarations": [ - { - "constant": false, - "id": 5674, - "mutability": "mutable", - "name": "$", - "nameLocation": "7149:1:39", - "nodeType": "VariableDeclaration", - "scope": 5717, - "src": "7127:23:39", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - }, - "typeName": { - "id": 5673, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5672, - "name": "EIP712Storage", - "nameLocations": [ - "7127:13:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5457, - "src": "7127:13:39" - }, - "referencedDeclaration": 5457, - "src": "7127:13:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - } - }, - "visibility": "internal" - } - ], - "id": 5677, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5675, - "name": "_getEIP712Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5468, - "src": "7153:17:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", - "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" - } - }, - "id": 5676, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7153:19:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7127:45:39" - }, - { - "assignments": [ - 5679 - ], - "declarations": [ - { - "constant": false, - "id": 5679, - "mutability": "mutable", - "name": "name", - "nameLocation": "7196:4:39", - "nodeType": "VariableDeclaration", - "scope": 5717, - "src": "7182:18:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5678, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "7182:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "id": 5682, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5680, - "name": "_EIP712Name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5650, - "src": "7203:11:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$", - "typeString": "function () view returns (string memory)" - } - }, - "id": 5681, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7203:13:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7182:34:39" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5689, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 5685, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5679, - "src": "7236:4:39", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 5684, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7230:5:39", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 5683, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7230:5:39", - "typeDescriptions": {} - } - }, - "id": 5686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7230:11:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5687, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7242:6:39", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "7230:18:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 5688, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7251:1:39", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7230:22:39", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 5715, - "nodeType": "Block", - "src": "7314:425:39", - "statements": [ - { - "assignments": [ - 5699 - ], - "declarations": [ - { - "constant": false, - "id": 5699, - "mutability": "mutable", - "name": "hashedName", - "nameLocation": "7559:10:39", - "nodeType": "VariableDeclaration", - "scope": 5715, - "src": "7551:18:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5698, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7551:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 5702, - "initialValue": { - "expression": { - "id": 5700, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5674, - "src": "7572:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5701, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7574:11:39", - "memberName": "_hashedName", - "nodeType": "MemberAccess", - "referencedDeclaration": 5449, - "src": "7572:13:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7551:34:39" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 5705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5703, - "name": "hashedName", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5699, - "src": "7603:10:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 5704, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7617:1:39", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7603:15:39", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 5713, - "nodeType": "Block", - "src": "7676:53:39", - "statements": [ - { - "expression": { - "arguments": [ - { - "hexValue": "", - "id": 5710, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7711:2:39", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "id": 5709, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "7701:9:39", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 5711, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7701:13:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 5671, - "id": 5712, - "nodeType": "Return", - "src": "7694:20:39" - } - ] - }, - "id": 5714, - "nodeType": "IfStatement", - "src": "7599:130:39", - "trueBody": { - "id": 5708, - "nodeType": "Block", - "src": "7620:50:39", - "statements": [ - { - "expression": { - "id": 5706, - "name": "hashedName", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5699, - "src": "7645:10:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 5671, - "id": 5707, - "nodeType": "Return", - "src": "7638:17:39" - } - ] - } - } - ] - }, - "id": 5716, - "nodeType": "IfStatement", - "src": "7226:513:39", - "trueBody": { - "id": 5697, - "nodeType": "Block", - "src": "7254:54:39", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 5693, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5679, - "src": "7291:4:39", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 5692, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7285:5:39", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 5691, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7285:5:39", - "typeDescriptions": {} - } - }, - "id": 5694, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7285:11:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5690, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "7275:9:39", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 5695, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7275:22:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 5671, - "id": 5696, - "nodeType": "Return", - "src": "7268:29:39" - } - ] - } - } - ] - }, - "documentation": { - "id": 5667, - "nodeType": "StructuredDocumentation", - "src": "6849:204:39", - "text": " @dev The hash of the name parameter for the EIP712 domain.\n NOTE: In previous versions this function was virtual. In this version you should override `_EIP712Name` instead." - }, - "id": 5718, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_EIP712NameHash", - "nameLocation": "7067:15:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5668, - "nodeType": "ParameterList", - "parameters": [], - "src": "7082:2:39" - }, - "returnParameters": { - "id": 5671, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5670, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5718, - "src": "7108:7:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5669, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7108:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7107:9:39" - }, - "scope": 5771, - "src": "7058:687:39", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5769, - "nodeType": "Block", - "src": "8028:661:39", - "statements": [ - { - "assignments": [ - 5726 - ], - "declarations": [ - { - "constant": false, - "id": 5726, - "mutability": "mutable", - "name": "$", - "nameLocation": "8060:1:39", - "nodeType": "VariableDeclaration", - "scope": 5769, - "src": "8038:23:39", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - }, - "typeName": { - "id": 5725, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5724, - "name": "EIP712Storage", - "nameLocations": [ - "8038:13:39" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5457, - "src": "8038:13:39" - }, - "referencedDeclaration": 5457, - "src": "8038:13:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage" - } - }, - "visibility": "internal" - } - ], - "id": 5729, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5727, - "name": "_getEIP712Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5468, - "src": "8064:17:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_EIP712Storage_$5457_storage_ptr_$", - "typeString": "function () pure returns (struct EIP712Upgradeable.EIP712Storage storage pointer)" - } - }, - "id": 5728, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8064:19:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8038:45:39" - }, - { - "assignments": [ - 5731 - ], - "declarations": [ - { - "constant": false, - "id": 5731, - "mutability": "mutable", - "name": "version", - "nameLocation": "8107:7:39", - "nodeType": "VariableDeclaration", - "scope": 5769, - "src": "8093:21:39", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5730, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "8093:6:39", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "id": 5734, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5732, - "name": "_EIP712Version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5666, - "src": "8117:14:39", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$", - "typeString": "function () view returns (string memory)" - } - }, - "id": 5733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8117:16:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8093:40:39" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5741, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 5737, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5731, - "src": "8153:7:39", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 5736, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8147:5:39", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 5735, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8147:5:39", - "typeDescriptions": {} - } - }, - "id": 5738, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8147:14:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8162:6:39", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "8147:21:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 5740, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8171:1:39", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8147:25:39", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 5767, - "nodeType": "Block", - "src": "8237:446:39", - "statements": [ - { - "assignments": [ - 5751 - ], - "declarations": [ - { - "constant": false, - "id": 5751, - "mutability": "mutable", - "name": "hashedVersion", - "nameLocation": "8491:13:39", - "nodeType": "VariableDeclaration", - "scope": 5767, - "src": "8483:21:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5750, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8483:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 5754, - "initialValue": { - "expression": { - "id": 5752, - "name": "$", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5726, - "src": "8507:1:39", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EIP712Storage_$5457_storage_ptr", - "typeString": "struct EIP712Upgradeable.EIP712Storage storage pointer" - } - }, - "id": 5753, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8509:14:39", - "memberName": "_hashedVersion", - "nodeType": "MemberAccess", - "referencedDeclaration": 5452, - "src": "8507:16:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8483:40:39" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 5757, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5755, - "name": "hashedVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5751, - "src": "8541:13:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 5756, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8558:1:39", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8541:18:39", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 5765, - "nodeType": "Block", - "src": "8620:53:39", - "statements": [ - { - "expression": { - "arguments": [ - { - "hexValue": "", - "id": 5762, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8655:2:39", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "id": 5761, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "8645:9:39", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 5763, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8645:13:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 5723, - "id": 5764, - "nodeType": "Return", - "src": "8638:20:39" - } - ] - }, - "id": 5766, - "nodeType": "IfStatement", - "src": "8537:136:39", - "trueBody": { - "id": 5760, - "nodeType": "Block", - "src": "8561:53:39", - "statements": [ - { - "expression": { - "id": 5758, - "name": "hashedVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5751, - "src": "8586:13:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 5723, - "id": 5759, - "nodeType": "Return", - "src": "8579:20:39" - } - ] - } - } - ] - }, - "id": 5768, - "nodeType": "IfStatement", - "src": "8143:540:39", - "trueBody": { - "id": 5749, - "nodeType": "Block", - "src": "8174:57:39", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 5745, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5731, - "src": "8211:7:39", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 5744, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8205:5:39", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 5743, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8205:5:39", - "typeDescriptions": {} - } - }, - "id": 5746, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8205:14:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5742, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "8195:9:39", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 5747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8195:25:39", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 5723, - "id": 5748, - "nodeType": "Return", - "src": "8188:32:39" - } - ] - } - } - ] - }, - "documentation": { - "id": 5719, - "nodeType": "StructuredDocumentation", - "src": "7751:210:39", - "text": " @dev The hash of the version parameter for the EIP712 domain.\n NOTE: In previous versions this function was virtual. In this version you should override `_EIP712Version` instead." - }, - "id": 5770, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_EIP712VersionHash", - "nameLocation": "7975:18:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5720, - "nodeType": "ParameterList", - "parameters": [], - "src": "7993:2:39" - }, - "returnParameters": { - "id": 5723, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5722, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5770, - "src": "8019:7:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5721, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8019:7:39", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "8018:9:39" - }, - "scope": 5771, - "src": "7966:723:39", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 5772, - "src": "1959:6732:39", - "usedErrors": [ - 4865, - 4868 - ], - "usedEvents": [ - 4873, - 5776 - ] - } - ], - "src": "113:8579:39" - }, - "id": 39 - }, - "@openzeppelin/contracts/interfaces/IERC5267.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/interfaces/IERC5267.sol", - "exportedSymbols": { - "IERC5267": [ - 5796 - ] - }, - "id": 5797, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5773, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "107:24:40" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC5267", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 5796, - "linearizedBaseContracts": [ - 5796 - ], - "name": "IERC5267", - "nameLocation": "143:8:40", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 5774, - "nodeType": "StructuredDocumentation", - "src": "158:84:40", - "text": " @dev MAY be emitted to signal that the domain could have changed." - }, - "eventSelector": "0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31", - "id": 5776, - "name": "EIP712DomainChanged", - "nameLocation": "253:19:40", - "nodeType": "EventDefinition", - "parameters": { - "id": 5775, - "nodeType": "ParameterList", - "parameters": [], - "src": "272:2:40" - }, - "src": "247:28:40" - }, - { - "documentation": { - "id": 5777, - "nodeType": "StructuredDocumentation", - "src": "281:140:40", - "text": " @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n signature." - }, - "functionSelector": "84b0196e", - "id": 5795, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "eip712Domain", - "nameLocation": "435:12:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5778, - "nodeType": "ParameterList", - "parameters": [], - "src": "447:2:40" - }, - "returnParameters": { - "id": 5794, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5780, - "mutability": "mutable", - "name": "fields", - "nameLocation": "517:6:40", - "nodeType": "VariableDeclaration", - "scope": 5795, - "src": "510:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - }, - "typeName": { - "id": 5779, - "name": "bytes1", - "nodeType": "ElementaryTypeName", - "src": "510:6:40", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5782, - "mutability": "mutable", - "name": "name", - "nameLocation": "551:4:40", - "nodeType": "VariableDeclaration", - "scope": 5795, - "src": "537:18:40", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5781, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "537:6:40", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5784, - "mutability": "mutable", - "name": "version", - "nameLocation": "583:7:40", - "nodeType": "VariableDeclaration", - "scope": 5795, - "src": "569:21:40", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5783, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "569:6:40", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5786, - "mutability": "mutable", - "name": "chainId", - "nameLocation": "612:7:40", - "nodeType": "VariableDeclaration", - "scope": 5795, - "src": "604:15:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5785, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "604:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5788, - "mutability": "mutable", - "name": "verifyingContract", - "nameLocation": "641:17:40", - "nodeType": "VariableDeclaration", - "scope": 5795, - "src": "633:25:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5787, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "633:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5790, - "mutability": "mutable", - "name": "salt", - "nameLocation": "680:4:40", - "nodeType": "VariableDeclaration", - "scope": 5795, - "src": "672:12:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 5789, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "672:7:40", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5793, - "mutability": "mutable", - "name": "extensions", - "nameLocation": "715:10:40", - "nodeType": "VariableDeclaration", - "scope": 5795, - "src": "698:27:40", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 5791, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "698:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 5792, - "nodeType": "ArrayTypeName", - "src": "698:9:40", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - } - ], - "src": "496:239:40" - }, - "scope": 5796, - "src": "426:310:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 5797, - "src": "133:605:40", - "usedErrors": [], - "usedEvents": [ - 5776 - ] - } - ], - "src": "107:632:40" - }, - "id": 40 - }, - "@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 5874 - ] - }, - "id": 5875, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5798, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "106:24:41" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC20", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 5799, - "nodeType": "StructuredDocumentation", - "src": "132:70:41", - "text": " @dev Interface of the ERC20 standard as defined in the EIP." - }, - "fullyImplemented": false, - "id": 5874, - "linearizedBaseContracts": [ - 5874 - ], - "name": "IERC20", - "nameLocation": "213:6:41", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 5800, - "nodeType": "StructuredDocumentation", - "src": "226:158:41", - "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero." - }, - "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "id": 5808, - "name": "Transfer", - "nameLocation": "395:8:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 5807, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5802, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "420:4:41", - "nodeType": "VariableDeclaration", - "scope": 5808, - "src": "404:20:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5801, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "404:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5804, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "442:2:41", - "nodeType": "VariableDeclaration", - "scope": 5808, - "src": "426:18:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5803, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "426:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5806, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "454:5:41", - "nodeType": "VariableDeclaration", - "scope": 5808, - "src": "446:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5805, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "446:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "403:57:41" - }, - "src": "389:72:41" - }, - { - "anonymous": false, - "documentation": { - "id": 5809, - "nodeType": "StructuredDocumentation", - "src": "467:148:41", - "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance." - }, - "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "id": 5817, - "name": "Approval", - "nameLocation": "626:8:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 5816, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5811, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "651:5:41", - "nodeType": "VariableDeclaration", - "scope": 5817, - "src": "635:21:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5810, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "635:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5813, - "indexed": true, - "mutability": "mutable", - "name": "spender", - "nameLocation": "674:7:41", - "nodeType": "VariableDeclaration", - "scope": 5817, - "src": "658:23:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5812, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "658:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5815, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "691:5:41", - "nodeType": "VariableDeclaration", - "scope": 5817, - "src": "683:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5814, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "683:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "634:63:41" - }, - "src": "620:78:41" - }, - { - "documentation": { - "id": 5818, - "nodeType": "StructuredDocumentation", - "src": "704:65:41", - "text": " @dev Returns the value of tokens in existence." - }, - "functionSelector": "18160ddd", - "id": 5823, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nameLocation": "783:11:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5819, - "nodeType": "ParameterList", - "parameters": [], - "src": "794:2:41" - }, - "returnParameters": { - "id": 5822, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5821, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5823, - "src": "820:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5820, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "820:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "819:9:41" - }, - "scope": 5874, - "src": "774:55:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 5824, - "nodeType": "StructuredDocumentation", - "src": "835:71:41", - "text": " @dev Returns the value of tokens owned by `account`." - }, - "functionSelector": "70a08231", - "id": 5831, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nameLocation": "920:9:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5827, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5826, - "mutability": "mutable", - "name": "account", - "nameLocation": "938:7:41", - "nodeType": "VariableDeclaration", - "scope": 5831, - "src": "930:15:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5825, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "930:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "929:17:41" - }, - "returnParameters": { - "id": 5830, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5829, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5831, - "src": "970:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5828, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "970:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "969:9:41" - }, - "scope": 5874, - "src": "911:68:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 5832, - "nodeType": "StructuredDocumentation", - "src": "985:213:41", - "text": " @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." - }, - "functionSelector": "a9059cbb", - "id": 5841, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nameLocation": "1212:8:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5837, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5834, - "mutability": "mutable", - "name": "to", - "nameLocation": "1229:2:41", - "nodeType": "VariableDeclaration", - "scope": 5841, - "src": "1221:10:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5833, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1221:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5836, - "mutability": "mutable", - "name": "value", - "nameLocation": "1241:5:41", - "nodeType": "VariableDeclaration", - "scope": 5841, - "src": "1233:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5835, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1233:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1220:27:41" - }, - "returnParameters": { - "id": 5840, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5839, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5841, - "src": "1266:4:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5838, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1266:4:41", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1265:6:41" - }, - "scope": 5874, - "src": "1203:69:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 5842, - "nodeType": "StructuredDocumentation", - "src": "1278:264:41", - "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called." - }, - "functionSelector": "dd62ed3e", - "id": 5851, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nameLocation": "1556:9:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5847, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5844, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1574:5:41", - "nodeType": "VariableDeclaration", - "scope": 5851, - "src": "1566:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5843, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1566:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5846, - "mutability": "mutable", - "name": "spender", - "nameLocation": "1589:7:41", - "nodeType": "VariableDeclaration", - "scope": 5851, - "src": "1581:15:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5845, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1581:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1565:32:41" - }, - "returnParameters": { - "id": 5850, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5849, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5851, - "src": "1621:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5848, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1621:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1620:9:41" - }, - "scope": 5874, - "src": "1547:83:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 5852, - "nodeType": "StructuredDocumentation", - "src": "1636:667:41", - "text": " @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event." - }, - "functionSelector": "095ea7b3", - "id": 5861, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nameLocation": "2317:7:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5857, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5854, - "mutability": "mutable", - "name": "spender", - "nameLocation": "2333:7:41", - "nodeType": "VariableDeclaration", - "scope": 5861, - "src": "2325:15:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5853, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2325:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5856, - "mutability": "mutable", - "name": "value", - "nameLocation": "2350:5:41", - "nodeType": "VariableDeclaration", - "scope": 5861, - "src": "2342:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5855, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2342:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2324:32:41" - }, - "returnParameters": { - "id": 5860, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5859, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5861, - "src": "2375:4:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5858, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2375:4:41", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2374:6:41" - }, - "scope": 5874, - "src": "2308:73:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 5862, - "nodeType": "StructuredDocumentation", - "src": "2387:297:41", - "text": " @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." - }, - "functionSelector": "23b872dd", - "id": 5873, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nameLocation": "2698:12:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5869, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5864, - "mutability": "mutable", - "name": "from", - "nameLocation": "2719:4:41", - "nodeType": "VariableDeclaration", - "scope": 5873, - "src": "2711:12:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5863, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2711:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5866, - "mutability": "mutable", - "name": "to", - "nameLocation": "2733:2:41", - "nodeType": "VariableDeclaration", - "scope": 5873, - "src": "2725:10:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5865, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2725:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5868, - "mutability": "mutable", - "name": "value", - "nameLocation": "2745:5:41", - "nodeType": "VariableDeclaration", - "scope": 5873, - "src": "2737:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5867, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2737:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2710:41:41" - }, - "returnParameters": { - "id": 5872, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5871, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5873, - "src": "2770:4:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5870, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2770:4:41", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2769:6:41" - }, - "scope": 5874, - "src": "2689:87:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 5875, - "src": "203:2575:41", - "usedErrors": [], - "usedEvents": [ - 5808, - 5817 - ] - } - ], - "src": "106:2673:41" - }, - "id": 41 - }, - "@openzeppelin/contracts/utils/Address.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/Address.sol", - "exportedSymbols": { - "Address": [ - 6127 - ] - }, - "id": 6128, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5876, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "101:24:42" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Address", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 5877, - "nodeType": "StructuredDocumentation", - "src": "127:67:42", - "text": " @dev Collection of functions related to the address type" - }, - "fullyImplemented": true, - "id": 6127, - "linearizedBaseContracts": [ - 6127 - ], - "name": "Address", - "nameLocation": "203:7:42", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 5878, - "nodeType": "StructuredDocumentation", - "src": "217:94:42", - "text": " @dev The ETH balance of the account is not enough to perform the operation." - }, - "errorSelector": "cd786059", - "id": 5882, - "name": "AddressInsufficientBalance", - "nameLocation": "322:26:42", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5881, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5880, - "mutability": "mutable", - "name": "account", - "nameLocation": "357:7:42", - "nodeType": "VariableDeclaration", - "scope": 5882, - "src": "349:15:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5879, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "349:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "348:17:42" - }, - "src": "316:50:42" - }, - { - "documentation": { - "id": 5883, - "nodeType": "StructuredDocumentation", - "src": "372:75:42", - "text": " @dev There's no code at `target` (it is not a contract)." - }, - "errorSelector": "9996b315", - "id": 5887, - "name": "AddressEmptyCode", - "nameLocation": "458:16:42", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5886, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5885, - "mutability": "mutable", - "name": "target", - "nameLocation": "483:6:42", - "nodeType": "VariableDeclaration", - "scope": 5887, - "src": "475:14:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5884, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "475:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "474:16:42" - }, - "src": "452:39:42" - }, - { - "documentation": { - "id": 5888, - "nodeType": "StructuredDocumentation", - "src": "497:89:42", - "text": " @dev A call to an address target failed. The target may have reverted." - }, - "errorSelector": "1425ea42", - "id": 5890, - "name": "FailedInnerCall", - "nameLocation": "597:15:42", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5889, - "nodeType": "ParameterList", - "parameters": [], - "src": "612:2:42" - }, - "src": "591:24:42" - }, - { - "body": { - "id": 5930, - "nodeType": "Block", - "src": "1602:260:42", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 5900, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "1624:4:42", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$6127", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$6127", - "typeString": "library Address" - } - ], - "id": 5899, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1616:7:42", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5898, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1616:7:42", - "typeDescriptions": {} - } - }, - "id": 5901, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1616:13:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5902, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1630:7:42", - "memberName": "balance", - "nodeType": "MemberAccess", - "src": "1616:21:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 5903, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5895, - "src": "1640:6:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1616:30:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5913, - "nodeType": "IfStatement", - "src": "1612:109:42", - "trueBody": { - "id": 5912, - "nodeType": "Block", - "src": "1648:73:42", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "id": 5908, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "1704:4:42", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$6127", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$6127", - "typeString": "library Address" - } - ], - "id": 5907, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1696:7:42", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5906, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1696:7:42", - "typeDescriptions": {} - } - }, - "id": 5909, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1696:13:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5905, - "name": "AddressInsufficientBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5882, - "src": "1669:26:42", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 5910, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1669:41:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 5911, - "nodeType": "RevertStatement", - "src": "1662:48:42" - } - ] - } - }, - { - "assignments": [ - 5915, - null - ], - "declarations": [ - { - "constant": false, - "id": 5915, - "mutability": "mutable", - "name": "success", - "nameLocation": "1737:7:42", - "nodeType": "VariableDeclaration", - "scope": 5930, - "src": "1732:12:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5914, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1732:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - null - ], - "id": 5922, - "initialValue": { - "arguments": [ - { - "hexValue": "", - "id": 5920, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1780:2:42", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "expression": { - "id": 5916, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5893, - "src": "1750:9:42", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 5917, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1760:4:42", - "memberName": "call", - "nodeType": "MemberAccess", - "src": "1750:14:42", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 5919, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": [ - "value" - ], - "nodeType": "FunctionCallOptions", - "options": [ - { - "id": 5918, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5895, - "src": "1772:6:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "1750:29:42", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 5921, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1750:33:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1731:52:42" - }, - { - "condition": { - "id": 5924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1797:8:42", - "subExpression": { - "id": 5923, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5915, - "src": "1798:7:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5929, - "nodeType": "IfStatement", - "src": "1793:63:42", - "trueBody": { - "id": 5928, - "nodeType": "Block", - "src": "1807:49:42", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5925, - "name": "FailedInnerCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5890, - "src": "1828:15:42", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 5926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1828:17:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 5927, - "nodeType": "RevertStatement", - "src": "1821:24:42" - } - ] - } - } - ] - }, - "documentation": { - "id": 5891, - "nodeType": "StructuredDocumentation", - "src": "621:905:42", - "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]." - }, - "id": 5931, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sendValue", - "nameLocation": "1540:9:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5896, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5893, - "mutability": "mutable", - "name": "recipient", - "nameLocation": "1566:9:42", - "nodeType": "VariableDeclaration", - "scope": 5931, - "src": "1550:25:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 5892, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1550:15:42", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5895, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1585:6:42", - "nodeType": "VariableDeclaration", - "scope": 5931, - "src": "1577:14:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5894, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1577:7:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1549:43:42" - }, - "returnParameters": { - "id": 5897, - "nodeType": "ParameterList", - "parameters": [], - "src": "1602:0:42" - }, - "scope": 6127, - "src": "1531:331:42", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5947, - "nodeType": "Block", - "src": "2794:62:42", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5942, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5934, - "src": "2833:6:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5943, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5936, - "src": "2841:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "hexValue": "30", - "id": 5944, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2847:1:42", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 5941, - "name": "functionCallWithValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5994, - "src": "2811:21:42", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory,uint256) returns (bytes memory)" - } - }, - "id": 5945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2811:38:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 5940, - "id": 5946, - "nodeType": "Return", - "src": "2804:45:42" - } - ] - }, - "documentation": { - "id": 5932, - "nodeType": "StructuredDocumentation", - "src": "1868:832:42", - "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {FailedInnerCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert." - }, - "id": 5948, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionCall", - "nameLocation": "2714:12:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5937, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5934, - "mutability": "mutable", - "name": "target", - "nameLocation": "2735:6:42", - "nodeType": "VariableDeclaration", - "scope": 5948, - "src": "2727:14:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5933, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2727:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5936, - "mutability": "mutable", - "name": "data", - "nameLocation": "2756:4:42", - "nodeType": "VariableDeclaration", - "scope": 5948, - "src": "2743:17:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5935, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2743:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2726:35:42" - }, - "returnParameters": { - "id": 5940, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5939, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5948, - "src": "2780:12:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5938, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2780:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2779:14:42" - }, - "scope": 6127, - "src": "2705:151:42", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5993, - "nodeType": "Block", - "src": "3293:279:42", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5966, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 5962, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "3315:4:42", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$6127", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$6127", - "typeString": "library Address" - } - ], - "id": 5961, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3307:7:42", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5960, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3307:7:42", - "typeDescriptions": {} - } - }, - "id": 5963, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3307:13:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5964, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3321:7:42", - "memberName": "balance", - "nodeType": "MemberAccess", - "src": "3307:21:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 5965, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5955, - "src": "3331:5:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3307:29:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5975, - "nodeType": "IfStatement", - "src": "3303:108:42", - "trueBody": { - "id": 5974, - "nodeType": "Block", - "src": "3338:73:42", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "id": 5970, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "3394:4:42", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$6127", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$6127", - "typeString": "library Address" - } - ], - "id": 5969, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3386:7:42", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5968, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3386:7:42", - "typeDescriptions": {} - } - }, - "id": 5971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3386:13:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5967, - "name": "AddressInsufficientBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5882, - "src": "3359:26:42", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 5972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3359:41:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 5973, - "nodeType": "RevertStatement", - "src": "3352:48:42" - } - ] - } - }, - { - "assignments": [ - 5977, - 5979 - ], - "declarations": [ - { - "constant": false, - "id": 5977, - "mutability": "mutable", - "name": "success", - "nameLocation": "3426:7:42", - "nodeType": "VariableDeclaration", - "scope": 5993, - "src": "3421:12:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5976, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3421:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5979, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "3448:10:42", - "nodeType": "VariableDeclaration", - "scope": 5993, - "src": "3435:23:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5978, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3435:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 5986, - "initialValue": { - "arguments": [ - { - "id": 5984, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5953, - "src": "3488:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 5980, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5951, - "src": "3462:6:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3469:4:42", - "memberName": "call", - "nodeType": "MemberAccess", - "src": "3462:11:42", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 5983, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": [ - "value" - ], - "nodeType": "FunctionCallOptions", - "options": [ - { - "id": 5982, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5955, - "src": "3481:5:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "3462:25:42", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 5985, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3462:31:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3420:73:42" - }, - { - "expression": { - "arguments": [ - { - "id": 5988, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5951, - "src": "3537:6:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5989, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5977, - "src": "3545:7:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 5990, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5979, - "src": "3554:10:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5987, - "name": "verifyCallResultFromTarget", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6086, - "src": "3510:26:42", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bool,bytes memory) view returns (bytes memory)" - } - }, - "id": 5991, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3510:55:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 5959, - "id": 5992, - "nodeType": "Return", - "src": "3503:62:42" - } - ] - }, - "documentation": { - "id": 5949, - "nodeType": "StructuredDocumentation", - "src": "2862:313:42", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`." - }, - "id": 5994, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionCallWithValue", - "nameLocation": "3189:21:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5956, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5951, - "mutability": "mutable", - "name": "target", - "nameLocation": "3219:6:42", - "nodeType": "VariableDeclaration", - "scope": 5994, - "src": "3211:14:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5950, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3211:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5953, - "mutability": "mutable", - "name": "data", - "nameLocation": "3240:4:42", - "nodeType": "VariableDeclaration", - "scope": 5994, - "src": "3227:17:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5952, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3227:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5955, - "mutability": "mutable", - "name": "value", - "nameLocation": "3254:5:42", - "nodeType": "VariableDeclaration", - "scope": 5994, - "src": "3246:13:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5954, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3246:7:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3210:50:42" - }, - "returnParameters": { - "id": 5959, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5958, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5994, - "src": "3279:12:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5957, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3279:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3278:14:42" - }, - "scope": 6127, - "src": "3180:392:42", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6019, - "nodeType": "Block", - "src": "3811:154:42", - "statements": [ - { - "assignments": [ - 6005, - 6007 - ], - "declarations": [ - { - "constant": false, - "id": 6005, - "mutability": "mutable", - "name": "success", - "nameLocation": "3827:7:42", - "nodeType": "VariableDeclaration", - "scope": 6019, - "src": "3822:12:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6004, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3822:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6007, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "3849:10:42", - "nodeType": "VariableDeclaration", - "scope": 6019, - "src": "3836:23:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6006, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3836:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 6012, - "initialValue": { - "arguments": [ - { - "id": 6010, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5999, - "src": "3881:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 6008, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5997, - "src": "3863:6:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 6009, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3870:10:42", - "memberName": "staticcall", - "nodeType": "MemberAccess", - "src": "3863:17:42", - "typeDescriptions": { - "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) view returns (bool,bytes memory)" - } - }, - "id": 6011, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3863:23:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3821:65:42" - }, - { - "expression": { - "arguments": [ - { - "id": 6014, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5997, - "src": "3930:6:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6015, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6005, - "src": "3938:7:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 6016, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6007, - "src": "3947:10:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6013, - "name": "verifyCallResultFromTarget", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6086, - "src": "3903:26:42", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bool,bytes memory) view returns (bytes memory)" - } - }, - "id": 6017, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3903:55:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 6003, - "id": 6018, - "nodeType": "Return", - "src": "3896:62:42" - } - ] - }, - "documentation": { - "id": 5995, - "nodeType": "StructuredDocumentation", - "src": "3578:128:42", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call." - }, - "id": 6020, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionStaticCall", - "nameLocation": "3720:18:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6000, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5997, - "mutability": "mutable", - "name": "target", - "nameLocation": "3747:6:42", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "3739:14:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5996, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3739:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5999, - "mutability": "mutable", - "name": "data", - "nameLocation": "3768:4:42", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "3755:17:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5998, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3755:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3738:35:42" - }, - "returnParameters": { - "id": 6003, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6002, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "3797:12:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6001, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3797:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3796:14:42" - }, - "scope": 6127, - "src": "3711:254:42", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6045, - "nodeType": "Block", - "src": "4203:156:42", - "statements": [ - { - "assignments": [ - 6031, - 6033 - ], - "declarations": [ - { - "constant": false, - "id": 6031, - "mutability": "mutable", - "name": "success", - "nameLocation": "4219:7:42", - "nodeType": "VariableDeclaration", - "scope": 6045, - "src": "4214:12:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6030, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4214:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6033, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "4241:10:42", - "nodeType": "VariableDeclaration", - "scope": 6045, - "src": "4228:23:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6032, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4228:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 6038, - "initialValue": { - "arguments": [ - { - "id": 6036, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6025, - "src": "4275:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 6034, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6023, - "src": "4255:6:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 6035, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4262:12:42", - "memberName": "delegatecall", - "nodeType": "MemberAccess", - "src": "4255:19:42", - "typeDescriptions": { - "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) returns (bool,bytes memory)" - } - }, - "id": 6037, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4255:25:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4213:67:42" - }, - { - "expression": { - "arguments": [ - { - "id": 6040, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6023, - "src": "4324:6:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6041, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6031, - "src": "4332:7:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 6042, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6033, - "src": "4341:10:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6039, - "name": "verifyCallResultFromTarget", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6086, - "src": "4297:26:42", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bool,bytes memory) view returns (bytes memory)" - } - }, - "id": 6043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4297:55:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 6029, - "id": 6044, - "nodeType": "Return", - "src": "4290:62:42" - } - ] - }, - "documentation": { - "id": 6021, - "nodeType": "StructuredDocumentation", - "src": "3971:130:42", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call." - }, - "id": 6046, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionDelegateCall", - "nameLocation": "4115:20:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6026, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6023, - "mutability": "mutable", - "name": "target", - "nameLocation": "4144:6:42", - "nodeType": "VariableDeclaration", - "scope": 6046, - "src": "4136:14:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6022, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4136:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6025, - "mutability": "mutable", - "name": "data", - "nameLocation": "4165:4:42", - "nodeType": "VariableDeclaration", - "scope": 6046, - "src": "4152:17:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6024, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4152:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4135:35:42" - }, - "returnParameters": { - "id": 6029, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6028, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6046, - "src": "4189:12:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6027, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4189:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4188:14:42" - }, - "scope": 6127, - "src": "4106:253:42", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6085, - "nodeType": "Block", - "src": "4783:424:42", - "statements": [ - { - "condition": { - "id": 6059, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4797:8:42", - "subExpression": { - "id": 6058, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6051, - "src": "4798:7:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 6083, - "nodeType": "Block", - "src": "4857:344:42", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 6074, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6065, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6053, - "src": "5045:10:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6066, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5056:6:42", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "5045:17:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 6067, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5066:1:42", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5045:22:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6073, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 6069, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6049, - "src": "5071:6:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 6070, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5078:4:42", - "memberName": "code", - "nodeType": "MemberAccess", - "src": "5071:11:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6071, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5083:6:42", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "5071:18:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 6072, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5093:1:42", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5071:23:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "5045:49:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6080, - "nodeType": "IfStatement", - "src": "5041:119:42", - "trueBody": { - "id": 6079, - "nodeType": "Block", - "src": "5096:64:42", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 6076, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6049, - "src": "5138:6:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6075, - "name": "AddressEmptyCode", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5887, - "src": "5121:16:42", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 6077, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5121:24:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 6078, - "nodeType": "RevertStatement", - "src": "5114:31:42" - } - ] - } - }, - { - "expression": { - "id": 6081, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6053, - "src": "5180:10:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 6057, - "id": 6082, - "nodeType": "Return", - "src": "5173:17:42" - } - ] - }, - "id": 6084, - "nodeType": "IfStatement", - "src": "4793:408:42", - "trueBody": { - "id": 6064, - "nodeType": "Block", - "src": "4807:44:42", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 6061, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6053, - "src": "4829:10:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6060, - "name": "_revert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6126, - "src": "4821:7:42", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (bytes memory) pure" - } - }, - "id": 6062, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4821:19:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6063, - "nodeType": "ExpressionStatement", - "src": "4821:19:42" - } - ] - } - } - ] - }, - "documentation": { - "id": 6047, - "nodeType": "StructuredDocumentation", - "src": "4365:255:42", - "text": " @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n unsuccessful call." - }, - "id": 6086, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "verifyCallResultFromTarget", - "nameLocation": "4634:26:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6054, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6049, - "mutability": "mutable", - "name": "target", - "nameLocation": "4678:6:42", - "nodeType": "VariableDeclaration", - "scope": 6086, - "src": "4670:14:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6048, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4670:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6051, - "mutability": "mutable", - "name": "success", - "nameLocation": "4699:7:42", - "nodeType": "VariableDeclaration", - "scope": 6086, - "src": "4694:12:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6050, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4694:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6053, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "4729:10:42", - "nodeType": "VariableDeclaration", - "scope": 6086, - "src": "4716:23:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6052, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4716:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4660:85:42" - }, - "returnParameters": { - "id": 6057, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6056, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6086, - "src": "4769:12:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6055, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4769:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4768:14:42" - }, - "scope": 6127, - "src": "4625:582:42", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6107, - "nodeType": "Block", - "src": "5509:122:42", - "statements": [ - { - "condition": { - "id": 6097, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "5523:8:42", - "subExpression": { - "id": 6096, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6089, - "src": "5524:7:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 6105, - "nodeType": "Block", - "src": "5583:42:42", - "statements": [ - { - "expression": { - "id": 6103, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6091, - "src": "5604:10:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 6095, - "id": 6104, - "nodeType": "Return", - "src": "5597:17:42" - } - ] - }, - "id": 6106, - "nodeType": "IfStatement", - "src": "5519:106:42", - "trueBody": { - "id": 6102, - "nodeType": "Block", - "src": "5533:44:42", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 6099, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6091, - "src": "5555:10:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6098, - "name": "_revert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6126, - "src": "5547:7:42", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (bytes memory) pure" - } - }, - "id": 6100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5547:19:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6101, - "nodeType": "ExpressionStatement", - "src": "5547:19:42" - } - ] - } - } - ] - }, - "documentation": { - "id": 6087, - "nodeType": "StructuredDocumentation", - "src": "5213:189:42", - "text": " @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {FailedInnerCall} error." - }, - "id": 6108, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "verifyCallResult", - "nameLocation": "5416:16:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6092, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6089, - "mutability": "mutable", - "name": "success", - "nameLocation": "5438:7:42", - "nodeType": "VariableDeclaration", - "scope": 6108, - "src": "5433:12:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6088, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5433:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6091, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "5460:10:42", - "nodeType": "VariableDeclaration", - "scope": 6108, - "src": "5447:23:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6090, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5447:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5432:39:42" - }, - "returnParameters": { - "id": 6095, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6094, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6108, - "src": "5495:12:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6093, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5495:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5494:14:42" - }, - "scope": 6127, - "src": "5407:224:42", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6125, - "nodeType": "Block", - "src": "5798:461:42", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6114, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6111, - "src": "5874:10:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6115, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5885:6:42", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "5874:17:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 6116, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5894:1:42", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5874:21:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 6123, - "nodeType": "Block", - "src": "6204:49:42", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6120, - "name": "FailedInnerCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5890, - "src": "6225:15:42", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 6121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6225:17:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 6122, - "nodeType": "RevertStatement", - "src": "6218:24:42" - } - ] - }, - "id": 6124, - "nodeType": "IfStatement", - "src": "5870:383:42", - "trueBody": { - "id": 6119, - "nodeType": "Block", - "src": "5897:301:42", - "statements": [ - { - "AST": { - "nativeSrc": "6055:133:42", - "nodeType": "YulBlock", - "src": "6055:133:42", - "statements": [ - { - "nativeSrc": "6073:40:42", - "nodeType": "YulVariableDeclaration", - "src": "6073:40:42", - "value": { - "arguments": [ - { - "name": "returndata", - "nativeSrc": "6102:10:42", - "nodeType": "YulIdentifier", - "src": "6102:10:42" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "6096:5:42", - "nodeType": "YulIdentifier", - "src": "6096:5:42" - }, - "nativeSrc": "6096:17:42", - "nodeType": "YulFunctionCall", - "src": "6096:17:42" - }, - "variables": [ - { - "name": "returndata_size", - "nativeSrc": "6077:15:42", - "nodeType": "YulTypedName", - "src": "6077:15:42", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6141:2:42", - "nodeType": "YulLiteral", - "src": "6141:2:42", - "type": "", - "value": "32" - }, - { - "name": "returndata", - "nativeSrc": "6145:10:42", - "nodeType": "YulIdentifier", - "src": "6145:10:42" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6137:3:42", - "nodeType": "YulIdentifier", - "src": "6137:3:42" - }, - "nativeSrc": "6137:19:42", - "nodeType": "YulFunctionCall", - "src": "6137:19:42" - }, - { - "name": "returndata_size", - "nativeSrc": "6158:15:42", - "nodeType": "YulIdentifier", - "src": "6158:15:42" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "6130:6:42", - "nodeType": "YulIdentifier", - "src": "6130:6:42" - }, - "nativeSrc": "6130:44:42", - "nodeType": "YulFunctionCall", - "src": "6130:44:42" - }, - "nativeSrc": "6130:44:42", - "nodeType": "YulExpressionStatement", - "src": "6130:44:42" - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 6111, - "isOffset": false, - "isSlot": false, - "src": "6102:10:42", - "valueSize": 1 - }, - { - "declaration": 6111, - "isOffset": false, - "isSlot": false, - "src": "6145:10:42", - "valueSize": 1 - } - ], - "id": 6118, - "nodeType": "InlineAssembly", - "src": "6046:142:42" - } - ] - } - } - ] - }, - "documentation": { - "id": 6109, - "nodeType": "StructuredDocumentation", - "src": "5637:101:42", - "text": " @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}." - }, - "id": 6126, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_revert", - "nameLocation": "5752:7:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6112, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6111, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "5773:10:42", - "nodeType": "VariableDeclaration", - "scope": 6126, - "src": "5760:23:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6110, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5760:5:42", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5759:25:42" - }, - "returnParameters": { - "id": 6113, - "nodeType": "ParameterList", - "parameters": [], - "src": "5798:0:42" - }, - "scope": 6127, - "src": "5743:516:42", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - } - ], - "scope": 6128, - "src": "195:6066:42", - "usedErrors": [ - 5882, - 5887, - 5890 - ], - "usedEvents": [] - } - ], - "src": "101:6161:42" - }, - "id": 42 - }, - "@openzeppelin/contracts/utils/Strings.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/Strings.sol", - "exportedSymbols": { - "Math": [ - 7858 - ], - "SignedMath": [ - 7963 - ], - "Strings": [ - 6382 - ] - }, - "id": 6383, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 6129, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "101:24:43" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol", - "file": "./math/Math.sol", - "id": 6131, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 6383, - "sourceUnit": 7859, - "src": "127:37:43", - "symbolAliases": [ - { - "foreign": { - "id": 6130, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7858, - "src": "135:4:43", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol", - "file": "./math/SignedMath.sol", - "id": 6133, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 6383, - "sourceUnit": 7964, - "src": "165:49:43", - "symbolAliases": [ - { - "foreign": { - "id": 6132, - "name": "SignedMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7963, - "src": "173:10:43", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Strings", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 6134, - "nodeType": "StructuredDocumentation", - "src": "216:34:43", - "text": " @dev String operations." - }, - "fullyImplemented": true, - "id": 6382, - "linearizedBaseContracts": [ - 6382 - ], - "name": "Strings", - "nameLocation": "259:7:43", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 6137, - "mutability": "constant", - "name": "HEX_DIGITS", - "nameLocation": "298:10:43", - "nodeType": "VariableDeclaration", - "scope": 6382, - "src": "273:56:43", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes16", - "typeString": "bytes16" - }, - "typeName": { - "id": 6135, - "name": "bytes16", - "nodeType": "ElementaryTypeName", - "src": "273:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes16", - "typeString": "bytes16" - } - }, - "value": { - "hexValue": "30313233343536373839616263646566", - "id": 6136, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "311:18:43", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f", - "typeString": "literal_string \"0123456789abcdef\"" - }, - "value": "0123456789abcdef" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 6140, - "mutability": "constant", - "name": "ADDRESS_LENGTH", - "nameLocation": "358:14:43", - "nodeType": "VariableDeclaration", - "scope": 6382, - "src": "335:42:43", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 6138, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "335:5:43", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "3230", - "id": 6139, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "375:2:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_20_by_1", - "typeString": "int_const 20" - }, - "value": "20" - }, - "visibility": "private" - }, - { - "documentation": { - "id": 6141, - "nodeType": "StructuredDocumentation", - "src": "384:81:43", - "text": " @dev The `value` string doesn't fit in the specified `length`." - }, - "errorSelector": "e22e27eb", - "id": 6147, - "name": "StringsInsufficientHexLength", - "nameLocation": "476:28:43", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 6146, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6143, - "mutability": "mutable", - "name": "value", - "nameLocation": "513:5:43", - "nodeType": "VariableDeclaration", - "scope": 6147, - "src": "505:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6142, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "505:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6145, - "mutability": "mutable", - "name": "length", - "nameLocation": "528:6:43", - "nodeType": "VariableDeclaration", - "scope": 6147, - "src": "520:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6144, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "520:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "504:31:43" - }, - "src": "470:66:43" - }, - { - "body": { - "id": 6194, - "nodeType": "Block", - "src": "708:627:43", - "statements": [ - { - "id": 6193, - "nodeType": "UncheckedBlock", - "src": "718:611:43", - "statements": [ - { - "assignments": [ - 6156 - ], - "declarations": [ - { - "constant": false, - "id": 6156, - "mutability": "mutable", - "name": "length", - "nameLocation": "750:6:43", - "nodeType": "VariableDeclaration", - "scope": 6193, - "src": "742:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6155, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "742:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6163, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 6159, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6150, - "src": "770:5:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 6157, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7858, - "src": "759:4:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Math_$7858_$", - "typeString": "type(library Math)" - } - }, - "id": 6158, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "764:5:43", - "memberName": "log10", - "nodeType": "MemberAccess", - "referencedDeclaration": 7678, - "src": "759:10:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 6160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "759:17:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 6161, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "779:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "759:21:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "742:38:43" - }, - { - "assignments": [ - 6165 - ], - "declarations": [ - { - "constant": false, - "id": 6165, - "mutability": "mutable", - "name": "buffer", - "nameLocation": "808:6:43", - "nodeType": "VariableDeclaration", - "scope": 6193, - "src": "794:20:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 6164, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "794:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "id": 6170, - "initialValue": { - "arguments": [ - { - "id": 6168, - "name": "length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6156, - "src": "828:6:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6167, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "817:10:43", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$", - "typeString": "function (uint256) pure returns (string memory)" - }, - "typeName": { - "id": 6166, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "821:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - } - }, - "id": 6169, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "817:18:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "794:41:43" - }, - { - "assignments": [ - 6172 - ], - "declarations": [ - { - "constant": false, - "id": 6172, - "mutability": "mutable", - "name": "ptr", - "nameLocation": "857:3:43", - "nodeType": "VariableDeclaration", - "scope": 6193, - "src": "849:11:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6171, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "849:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6173, - "nodeType": "VariableDeclarationStatement", - "src": "849:11:43" - }, - { - "AST": { - "nativeSrc": "930:67:43", - "nodeType": "YulBlock", - "src": "930:67:43", - "statements": [ - { - "nativeSrc": "948:35:43", - "nodeType": "YulAssignment", - "src": "948:35:43", - "value": { - "arguments": [ - { - "name": "buffer", - "nativeSrc": "959:6:43", - "nodeType": "YulIdentifier", - "src": "959:6:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "971:2:43", - "nodeType": "YulLiteral", - "src": "971:2:43", - "type": "", - "value": "32" - }, - { - "name": "length", - "nativeSrc": "975:6:43", - "nodeType": "YulIdentifier", - "src": "975:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "967:3:43", - "nodeType": "YulIdentifier", - "src": "967:3:43" - }, - "nativeSrc": "967:15:43", - "nodeType": "YulFunctionCall", - "src": "967:15:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "955:3:43", - "nodeType": "YulIdentifier", - "src": "955:3:43" - }, - "nativeSrc": "955:28:43", - "nodeType": "YulFunctionCall", - "src": "955:28:43" - }, - "variableNames": [ - { - "name": "ptr", - "nativeSrc": "948:3:43", - "nodeType": "YulIdentifier", - "src": "948:3:43" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 6165, - "isOffset": false, - "isSlot": false, - "src": "959:6:43", - "valueSize": 1 - }, - { - "declaration": 6156, - "isOffset": false, - "isSlot": false, - "src": "975:6:43", - "valueSize": 1 - }, - { - "declaration": 6172, - "isOffset": false, - "isSlot": false, - "src": "948:3:43", - "valueSize": 1 - } - ], - "id": 6174, - "nodeType": "InlineAssembly", - "src": "921:76:43" - }, - { - "body": { - "id": 6189, - "nodeType": "Block", - "src": "1023:269:43", - "statements": [ - { - "expression": { - "id": 6177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "--", - "prefix": false, - "src": "1041:5:43", - "subExpression": { - "id": 6176, - "name": "ptr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6172, - "src": "1041:3:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6178, - "nodeType": "ExpressionStatement", - "src": "1041:5:43" - }, - { - "AST": { - "nativeSrc": "1124:86:43", - "nodeType": "YulBlock", - "src": "1124:86:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nativeSrc": "1154:3:43", - "nodeType": "YulIdentifier", - "src": "1154:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "1168:5:43", - "nodeType": "YulIdentifier", - "src": "1168:5:43" - }, - { - "kind": "number", - "nativeSrc": "1175:2:43", - "nodeType": "YulLiteral", - "src": "1175:2:43", - "type": "", - "value": "10" - } - ], - "functionName": { - "name": "mod", - "nativeSrc": "1164:3:43", - "nodeType": "YulIdentifier", - "src": "1164:3:43" - }, - "nativeSrc": "1164:14:43", - "nodeType": "YulFunctionCall", - "src": "1164:14:43" - }, - { - "name": "HEX_DIGITS", - "nativeSrc": "1180:10:43", - "nodeType": "YulIdentifier", - "src": "1180:10:43" - } - ], - "functionName": { - "name": "byte", - "nativeSrc": "1159:4:43", - "nodeType": "YulIdentifier", - "src": "1159:4:43" - }, - "nativeSrc": "1159:32:43", - "nodeType": "YulFunctionCall", - "src": "1159:32:43" - } - ], - "functionName": { - "name": "mstore8", - "nativeSrc": "1146:7:43", - "nodeType": "YulIdentifier", - "src": "1146:7:43" - }, - "nativeSrc": "1146:46:43", - "nodeType": "YulFunctionCall", - "src": "1146:46:43" - }, - "nativeSrc": "1146:46:43", - "nodeType": "YulExpressionStatement", - "src": "1146:46:43" - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 6137, - "isOffset": false, - "isSlot": false, - "src": "1180:10:43", - "valueSize": 1 - }, - { - "declaration": 6172, - "isOffset": false, - "isSlot": false, - "src": "1154:3:43", - "valueSize": 1 - }, - { - "declaration": 6150, - "isOffset": false, - "isSlot": false, - "src": "1168:5:43", - "valueSize": 1 - } - ], - "id": 6179, - "nodeType": "InlineAssembly", - "src": "1115:95:43" - }, - { - "expression": { - "id": 6182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 6180, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6150, - "src": "1227:5:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "/=", - "rightHandSide": { - "hexValue": "3130", - "id": 6181, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1236:2:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "src": "1227:11:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6183, - "nodeType": "ExpressionStatement", - "src": "1227:11:43" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6184, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6150, - "src": "1260:5:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 6185, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1269:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1260:10:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6188, - "nodeType": "IfStatement", - "src": "1256:21:43", - "trueBody": { - "id": 6187, - "nodeType": "Break", - "src": "1272:5:43" - } - } - ] - }, - "condition": { - "hexValue": "74727565", - "id": 6175, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1017:4:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "id": 6190, - "nodeType": "WhileStatement", - "src": "1010:282:43" - }, - { - "expression": { - "id": 6191, - "name": "buffer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6165, - "src": "1312:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "functionReturnParameters": 6154, - "id": 6192, - "nodeType": "Return", - "src": "1305:13:43" - } - ] - } - ] - }, - "documentation": { - "id": 6148, - "nodeType": "StructuredDocumentation", - "src": "542:90:43", - "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation." - }, - "id": 6195, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toString", - "nameLocation": "646:8:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6151, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6150, - "mutability": "mutable", - "name": "value", - "nameLocation": "663:5:43", - "nodeType": "VariableDeclaration", - "scope": 6195, - "src": "655:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6149, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "655:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "654:15:43" - }, - "returnParameters": { - "id": 6154, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6153, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6195, - "src": "693:13:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 6152, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "693:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "692:15:43" - }, - "scope": 6382, - "src": "637:698:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6220, - "nodeType": "Block", - "src": "1511:92:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 6208, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6206, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6198, - "src": "1542:5:43", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "hexValue": "30", - "id": 6207, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1550:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1542:9:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "", - "id": 6210, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1560:2:43", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - }, - "id": 6211, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "1542:20:43", - "trueExpression": { - "hexValue": "2d", - "id": 6209, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1554:3:43", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561", - "typeString": "literal_string \"-\"" - }, - "value": "-" - }, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "arguments": [ - { - "arguments": [ - { - "id": 6215, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6198, - "src": "1588:5:43", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "expression": { - "id": 6213, - "name": "SignedMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7963, - "src": "1573:10:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_SignedMath_$7963_$", - "typeString": "type(library SignedMath)" - } - }, - "id": 6214, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1584:3:43", - "memberName": "abs", - "nodeType": "MemberAccess", - "referencedDeclaration": 7962, - "src": "1573:14:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$", - "typeString": "function (int256) pure returns (uint256)" - } - }, - "id": 6216, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1573:21:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6212, - "name": "toString", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6195, - "src": "1564:8:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$", - "typeString": "function (uint256) pure returns (string memory)" - } - }, - "id": 6217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1564:31:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "id": 6204, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1528:6:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_string_storage_ptr_$", - "typeString": "type(string storage pointer)" - }, - "typeName": { - "id": 6203, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1528:6:43", - "typeDescriptions": {} - } - }, - "id": 6205, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1535:6:43", - "memberName": "concat", - "nodeType": "MemberAccess", - "src": "1528:13:43", - "typeDescriptions": { - "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$", - "typeString": "function () pure returns (string memory)" - } - }, - "id": 6218, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1528:68:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "functionReturnParameters": 6202, - "id": 6219, - "nodeType": "Return", - "src": "1521:75:43" - } - ] - }, - "documentation": { - "id": 6196, - "nodeType": "StructuredDocumentation", - "src": "1341:89:43", - "text": " @dev Converts a `int256` to its ASCII `string` decimal representation." - }, - "id": 6221, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toStringSigned", - "nameLocation": "1444:14:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6199, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6198, - "mutability": "mutable", - "name": "value", - "nameLocation": "1466:5:43", - "nodeType": "VariableDeclaration", - "scope": 6221, - "src": "1459:12:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 6197, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "1459:6:43", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "1458:14:43" - }, - "returnParameters": { - "id": 6202, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6201, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6221, - "src": "1496:13:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 6200, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1496:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "1495:15:43" - }, - "scope": 6382, - "src": "1435:168:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6240, - "nodeType": "Block", - "src": "1782:100:43", - "statements": [ - { - "id": 6239, - "nodeType": "UncheckedBlock", - "src": "1792:84:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 6230, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6224, - "src": "1835:5:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 6233, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6224, - "src": "1854:5:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 6231, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7858, - "src": "1842:4:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Math_$7858_$", - "typeString": "type(library Math)" - } - }, - "id": 6232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1847:6:43", - "memberName": "log256", - "nodeType": "MemberAccess", - "referencedDeclaration": 7800, - "src": "1842:11:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 6234, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1842:18:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 6235, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1863:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1842:22:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6229, - "name": "toHexString", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 6241, - 6324, - 6344 - ], - "referencedDeclaration": 6324, - "src": "1823:11:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$", - "typeString": "function (uint256,uint256) pure returns (string memory)" - } - }, - "id": 6237, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1823:42:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "functionReturnParameters": 6228, - "id": 6238, - "nodeType": "Return", - "src": "1816:49:43" - } - ] - } - ] - }, - "documentation": { - "id": 6222, - "nodeType": "StructuredDocumentation", - "src": "1609:94:43", - "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation." - }, - "id": 6241, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toHexString", - "nameLocation": "1717:11:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6225, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6224, - "mutability": "mutable", - "name": "value", - "nameLocation": "1737:5:43", - "nodeType": "VariableDeclaration", - "scope": 6241, - "src": "1729:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6223, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1729:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1728:15:43" - }, - "returnParameters": { - "id": 6228, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6227, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6241, - "src": "1767:13:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 6226, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1767:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "1766:15:43" - }, - "scope": 6382, - "src": "1708:174:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6323, - "nodeType": "Block", - "src": "2095:435:43", - "statements": [ - { - "assignments": [ - 6252 - ], - "declarations": [ - { - "constant": false, - "id": 6252, - "mutability": "mutable", - "name": "localValue", - "nameLocation": "2113:10:43", - "nodeType": "VariableDeclaration", - "scope": 6323, - "src": "2105:18:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6251, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2105:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6254, - "initialValue": { - "id": 6253, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6244, - "src": "2126:5:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2105:26:43" - }, - { - "assignments": [ - 6256 - ], - "declarations": [ - { - "constant": false, - "id": 6256, - "mutability": "mutable", - "name": "buffer", - "nameLocation": "2154:6:43", - "nodeType": "VariableDeclaration", - "scope": 6323, - "src": "2141:19:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6255, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2141:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 6265, - "initialValue": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6261, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 6259, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2173:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 6260, - "name": "length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6246, - "src": "2177:6:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2173:10:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "32", - "id": 6262, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2186:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "2173:14:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6258, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2163:9:43", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (uint256) pure returns (bytes memory)" - }, - "typeName": { - "id": 6257, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2167:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - } - }, - "id": 6264, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2163:25:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2141:47:43" - }, - { - "expression": { - "id": 6270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 6266, - "name": "buffer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6256, - "src": "2198:6:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6268, - "indexExpression": { - "hexValue": "30", - "id": 6267, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2205:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2198:9:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "30", - "id": 6269, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2210:3:43", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", - "typeString": "literal_string \"0\"" - }, - "value": "0" - }, - "src": "2198:15:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - }, - "id": 6271, - "nodeType": "ExpressionStatement", - "src": "2198:15:43" - }, - { - "expression": { - "id": 6276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 6272, - "name": "buffer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6256, - "src": "2223:6:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6274, - "indexExpression": { - "hexValue": "31", - "id": 6273, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2230:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2223:9:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "78", - "id": 6275, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2235:3:43", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83", - "typeString": "literal_string \"x\"" - }, - "value": "x" - }, - "src": "2223:15:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - }, - "id": 6277, - "nodeType": "ExpressionStatement", - "src": "2223:15:43" - }, - { - "body": { - "id": 6306, - "nodeType": "Block", - "src": "2293:95:43", - "statements": [ - { - "expression": { - "id": 6300, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 6292, - "name": "buffer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6256, - "src": "2307:6:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6294, - "indexExpression": { - "id": 6293, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6279, - "src": "2314:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2307:9:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "baseExpression": { - "id": 6295, - "name": "HEX_DIGITS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6137, - "src": "2319:10:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes16", - "typeString": "bytes16" - } - }, - "id": 6299, - "indexExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6298, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6296, - "name": "localValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6252, - "src": "2330:10:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "hexValue": "307866", - "id": 6297, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2343:3:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_15_by_1", - "typeString": "int_const 15" - }, - "value": "0xf" - }, - "src": "2330:16:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2319:28:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - }, - "src": "2307:40:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - }, - "id": 6301, - "nodeType": "ExpressionStatement", - "src": "2307:40:43" - }, - { - "expression": { - "id": 6304, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 6302, - "name": "localValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6252, - "src": "2361:10:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "34", - "id": 6303, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2376:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "2361:16:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6305, - "nodeType": "ExpressionStatement", - "src": "2361:16:43" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6288, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6286, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6279, - "src": "2281:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "31", - "id": 6287, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2285:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "2281:5:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6307, - "initializationExpression": { - "assignments": [ - 6279 - ], - "declarations": [ - { - "constant": false, - "id": 6279, - "mutability": "mutable", - "name": "i", - "nameLocation": "2261:1:43", - "nodeType": "VariableDeclaration", - "scope": 6307, - "src": "2253:9:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6278, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2253:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6285, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 6280, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2265:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 6281, - "name": "length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6246, - "src": "2269:6:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2265:10:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 6283, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2278:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "2265:14:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2253:26:43" - }, - "isSimpleCounterLoop": false, - "loopExpression": { - "expression": { - "id": 6290, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "--", - "prefix": true, - "src": "2288:3:43", - "subExpression": { - "id": 6289, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6279, - "src": "2290:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6291, - "nodeType": "ExpressionStatement", - "src": "2288:3:43" - }, - "nodeType": "ForStatement", - "src": "2248:140:43" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6310, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6308, - "name": "localValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6252, - "src": "2401:10:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 6309, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2415:1:43", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2401:15:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6317, - "nodeType": "IfStatement", - "src": "2397:96:43", - "trueBody": { - "id": 6316, - "nodeType": "Block", - "src": "2418:75:43", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 6312, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6244, - "src": "2468:5:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 6313, - "name": "length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6246, - "src": "2475:6:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6311, - "name": "StringsInsufficientHexLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6147, - "src": "2439:28:43", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 6314, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2439:43:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 6315, - "nodeType": "RevertStatement", - "src": "2432:50:43" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 6320, - "name": "buffer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6256, - "src": "2516:6:43", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6319, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2509:6:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_string_storage_ptr_$", - "typeString": "type(string storage pointer)" - }, - "typeName": { - "id": 6318, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2509:6:43", - "typeDescriptions": {} - } - }, - "id": 6321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2509:14:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "functionReturnParameters": 6250, - "id": 6322, - "nodeType": "Return", - "src": "2502:21:43" - } - ] - }, - "documentation": { - "id": 6242, - "nodeType": "StructuredDocumentation", - "src": "1888:112:43", - "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length." - }, - "id": 6324, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toHexString", - "nameLocation": "2014:11:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6247, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6244, - "mutability": "mutable", - "name": "value", - "nameLocation": "2034:5:43", - "nodeType": "VariableDeclaration", - "scope": 6324, - "src": "2026:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6243, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2026:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6246, - "mutability": "mutable", - "name": "length", - "nameLocation": "2049:6:43", - "nodeType": "VariableDeclaration", - "scope": 6324, - "src": "2041:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6245, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2041:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2025:31:43" - }, - "returnParameters": { - "id": 6250, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6249, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6324, - "src": "2080:13:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 6248, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2080:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "2079:15:43" - }, - "scope": 6382, - "src": "2005:525:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6343, - "nodeType": "Block", - "src": "2762:75:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 6337, - "name": "addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6327, - "src": "2807:4:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6336, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2799:7:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 6335, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "2799:7:43", - "typeDescriptions": {} - } - }, - "id": 6338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2799:13:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 6334, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2791:7:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 6333, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2791:7:43", - "typeDescriptions": {} - } - }, - "id": 6339, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2791:22:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 6340, - "name": "ADDRESS_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6140, - "src": "2815:14:43", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 6332, - "name": "toHexString", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 6241, - 6324, - 6344 - ], - "referencedDeclaration": 6324, - "src": "2779:11:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$", - "typeString": "function (uint256,uint256) pure returns (string memory)" - } - }, - "id": 6341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2779:51:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "functionReturnParameters": 6331, - "id": 6342, - "nodeType": "Return", - "src": "2772:58:43" - } - ] - }, - "documentation": { - "id": 6325, - "nodeType": "StructuredDocumentation", - "src": "2536:148:43", - "text": " @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n representation." - }, - "id": 6344, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toHexString", - "nameLocation": "2698:11:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6328, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6327, - "mutability": "mutable", - "name": "addr", - "nameLocation": "2718:4:43", - "nodeType": "VariableDeclaration", - "scope": 6344, - "src": "2710:12:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6326, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2710:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2709:14:43" - }, - "returnParameters": { - "id": 6331, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6330, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6344, - "src": "2747:13:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 6329, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2747:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "2746:15:43" - }, - "scope": 6382, - "src": "2689:148:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6380, - "nodeType": "Block", - "src": "2992:104:43", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 6378, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6364, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 6356, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6347, - "src": "3015:1:43", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 6355, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3009:5:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 6354, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3009:5:43", - "typeDescriptions": {} - } - }, - "id": 6357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3009:8:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3018:6:43", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3009:15:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 6361, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6349, - "src": "3034:1:43", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 6360, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3028:5:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 6359, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3028:5:43", - "typeDescriptions": {} - } - }, - "id": 6362, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3028:8:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6363, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3037:6:43", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3028:15:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3009:34:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 6377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "arguments": [ - { - "id": 6368, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6347, - "src": "3063:1:43", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 6367, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3057:5:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 6366, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3057:5:43", - "typeDescriptions": {} - } - }, - "id": 6369, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3057:8:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6365, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "3047:9:43", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 6370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3047:19:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "arguments": [ - { - "id": 6374, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6349, - "src": "3086:1:43", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 6373, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3080:5:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 6372, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3080:5:43", - "typeDescriptions": {} - } - }, - "id": 6375, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3080:8:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6371, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "3070:9:43", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 6376, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3070:19:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "3047:42:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3009:80:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 6353, - "id": 6379, - "nodeType": "Return", - "src": "3002:87:43" - } - ] - }, - "documentation": { - "id": 6345, - "nodeType": "StructuredDocumentation", - "src": "2843:66:43", - "text": " @dev Returns true if the two strings are equal." - }, - "id": 6381, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "equal", - "nameLocation": "2923:5:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6350, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6347, - "mutability": "mutable", - "name": "a", - "nameLocation": "2943:1:43", - "nodeType": "VariableDeclaration", - "scope": 6381, - "src": "2929:15:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 6346, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2929:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6349, - "mutability": "mutable", - "name": "b", - "nameLocation": "2960:1:43", - "nodeType": "VariableDeclaration", - "scope": 6381, - "src": "2946:15:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 6348, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2946:6:43", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "2928:34:43" - }, - "returnParameters": { - "id": 6353, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6352, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6381, - "src": "2986:4:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6351, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2986:4:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2985:6:43" - }, - "scope": 6382, - "src": "2914:182:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 6383, - "src": "251:2847:43", - "usedErrors": [ - 6147 - ], - "usedEvents": [] - } - ], - "src": "101:2998:43" - }, - "id": 43 - }, - "@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "exportedSymbols": { - "ECDSA": [ - 6730 - ] - }, - "id": 6731, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 6384, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "112:24:44" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ECDSA", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 6385, - "nodeType": "StructuredDocumentation", - "src": "138:205:44", - "text": " @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address." - }, - "fullyImplemented": true, - "id": 6730, - "linearizedBaseContracts": [ - 6730 - ], - "name": "ECDSA", - "nameLocation": "352:5:44", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "ECDSA.RecoverError", - "id": 6390, - "members": [ - { - "id": 6386, - "name": "NoError", - "nameLocation": "392:7:44", - "nodeType": "EnumValue", - "src": "392:7:44" - }, - { - "id": 6387, - "name": "InvalidSignature", - "nameLocation": "409:16:44", - "nodeType": "EnumValue", - "src": "409:16:44" - }, - { - "id": 6388, - "name": "InvalidSignatureLength", - "nameLocation": "435:22:44", - "nodeType": "EnumValue", - "src": "435:22:44" - }, - { - "id": 6389, - "name": "InvalidSignatureS", - "nameLocation": "467:17:44", - "nodeType": "EnumValue", - "src": "467:17:44" - } - ], - "name": "RecoverError", - "nameLocation": "369:12:44", - "nodeType": "EnumDefinition", - "src": "364:126:44" - }, - { - "documentation": { - "id": 6391, - "nodeType": "StructuredDocumentation", - "src": "496:63:44", - "text": " @dev The signature derives the `address(0)`." - }, - "errorSelector": "f645eedf", - "id": 6393, - "name": "ECDSAInvalidSignature", - "nameLocation": "570:21:44", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 6392, - "nodeType": "ParameterList", - "parameters": [], - "src": "591:2:44" - }, - "src": "564:30:44" - }, - { - "documentation": { - "id": 6394, - "nodeType": "StructuredDocumentation", - "src": "600:60:44", - "text": " @dev The signature has an invalid length." - }, - "errorSelector": "fce698f7", - "id": 6398, - "name": "ECDSAInvalidSignatureLength", - "nameLocation": "671:27:44", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 6397, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6396, - "mutability": "mutable", - "name": "length", - "nameLocation": "707:6:44", - "nodeType": "VariableDeclaration", - "scope": 6398, - "src": "699:14:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6395, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "699:7:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "698:16:44" - }, - "src": "665:50:44" - }, - { - "documentation": { - "id": 6399, - "nodeType": "StructuredDocumentation", - "src": "721:85:44", - "text": " @dev The signature has an S value that is in the upper half order." - }, - "errorSelector": "d78bce0c", - "id": 6403, - "name": "ECDSAInvalidSignatureS", - "nameLocation": "817:22:44", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 6402, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6401, - "mutability": "mutable", - "name": "s", - "nameLocation": "848:1:44", - "nodeType": "VariableDeclaration", - "scope": 6403, - "src": "840:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6400, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "840:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "839:11:44" - }, - "src": "811:40:44" - }, - { - "body": { - "id": 6455, - "nodeType": "Block", - "src": "2242:653:44", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6421, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6418, - "name": "signature", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6408, - "src": "2256:9:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2266:6:44", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2256:16:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "3635", - "id": 6420, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2276:2:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_65_by_1", - "typeString": "int_const 65" - }, - "value": "65" - }, - "src": "2256:22:44", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 6453, - "nodeType": "Block", - "src": "2781:108:44", - "statements": [ - { - "expression": { - "components": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 6442, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2811:1:44", - "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": 6441, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2803:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6440, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2803:7:44", - "typeDescriptions": {} - } - }, - "id": 6443, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2803:10:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 6444, - "name": "RecoverError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6390, - "src": "2815:12:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", - "typeString": "type(enum ECDSA.RecoverError)" - } - }, - "id": 6445, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2828:22:44", - "memberName": "InvalidSignatureLength", - "nodeType": "MemberAccess", - "referencedDeclaration": 6388, - "src": "2815:35:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - { - "arguments": [ - { - "expression": { - "id": 6448, - "name": "signature", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6408, - "src": "2860:9:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6449, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2870:6:44", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2860:16:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6447, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2852:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 6446, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2852:7:44", - "typeDescriptions": {} - } - }, - "id": 6450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2852:25:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 6451, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2802:76:44", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" - } - }, - "functionReturnParameters": 6417, - "id": 6452, - "nodeType": "Return", - "src": "2795:83:44" - } - ] - }, - "id": 6454, - "nodeType": "IfStatement", - "src": "2252:637:44", - "trueBody": { - "id": 6439, - "nodeType": "Block", - "src": "2280:495:44", - "statements": [ - { - "assignments": [ - 6423 - ], - "declarations": [ - { - "constant": false, - "id": 6423, - "mutability": "mutable", - "name": "r", - "nameLocation": "2302:1:44", - "nodeType": "VariableDeclaration", - "scope": 6439, - "src": "2294:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6422, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2294:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 6424, - "nodeType": "VariableDeclarationStatement", - "src": "2294:9:44" - }, - { - "assignments": [ - 6426 - ], - "declarations": [ - { - "constant": false, - "id": 6426, - "mutability": "mutable", - "name": "s", - "nameLocation": "2325:1:44", - "nodeType": "VariableDeclaration", - "scope": 6439, - "src": "2317:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6425, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2317:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 6427, - "nodeType": "VariableDeclarationStatement", - "src": "2317:9:44" - }, - { - "assignments": [ - 6429 - ], - "declarations": [ - { - "constant": false, - "id": 6429, - "mutability": "mutable", - "name": "v", - "nameLocation": "2346:1:44", - "nodeType": "VariableDeclaration", - "scope": 6439, - "src": "2340:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 6428, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2340:5:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "id": 6430, - "nodeType": "VariableDeclarationStatement", - "src": "2340:7:44" - }, - { - "AST": { - "nativeSrc": "2548:171:44", - "nodeType": "YulBlock", - "src": "2548:171:44", - "statements": [ - { - "nativeSrc": "2566:32:44", - "nodeType": "YulAssignment", - "src": "2566:32:44", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "signature", - "nativeSrc": "2581:9:44", - "nodeType": "YulIdentifier", - "src": "2581:9:44" - }, - { - "kind": "number", - "nativeSrc": "2592:4:44", - "nodeType": "YulLiteral", - "src": "2592:4:44", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2577:3:44", - "nodeType": "YulIdentifier", - "src": "2577:3:44" - }, - "nativeSrc": "2577:20:44", - "nodeType": "YulFunctionCall", - "src": "2577:20:44" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2571:5:44", - "nodeType": "YulIdentifier", - "src": "2571:5:44" - }, - "nativeSrc": "2571:27:44", - "nodeType": "YulFunctionCall", - "src": "2571:27:44" - }, - "variableNames": [ - { - "name": "r", - "nativeSrc": "2566:1:44", - "nodeType": "YulIdentifier", - "src": "2566:1:44" - } - ] - }, - { - "nativeSrc": "2615:32:44", - "nodeType": "YulAssignment", - "src": "2615:32:44", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "signature", - "nativeSrc": "2630:9:44", - "nodeType": "YulIdentifier", - "src": "2630:9:44" - }, - { - "kind": "number", - "nativeSrc": "2641:4:44", - "nodeType": "YulLiteral", - "src": "2641:4:44", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2626:3:44", - "nodeType": "YulIdentifier", - "src": "2626:3:44" - }, - "nativeSrc": "2626:20:44", - "nodeType": "YulFunctionCall", - "src": "2626:20:44" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2620:5:44", - "nodeType": "YulIdentifier", - "src": "2620:5:44" - }, - "nativeSrc": "2620:27:44", - "nodeType": "YulFunctionCall", - "src": "2620:27:44" - }, - "variableNames": [ - { - "name": "s", - "nativeSrc": "2615:1:44", - "nodeType": "YulIdentifier", - "src": "2615:1:44" - } - ] - }, - { - "nativeSrc": "2664:41:44", - "nodeType": "YulAssignment", - "src": "2664:41:44", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2674:1:44", - "nodeType": "YulLiteral", - "src": "2674:1:44", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "signature", - "nativeSrc": "2687:9:44", - "nodeType": "YulIdentifier", - "src": "2687:9:44" - }, - { - "kind": "number", - "nativeSrc": "2698:4:44", - "nodeType": "YulLiteral", - "src": "2698:4:44", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2683:3:44", - "nodeType": "YulIdentifier", - "src": "2683:3:44" - }, - "nativeSrc": "2683:20:44", - "nodeType": "YulFunctionCall", - "src": "2683:20:44" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2677:5:44", - "nodeType": "YulIdentifier", - "src": "2677:5:44" - }, - "nativeSrc": "2677:27:44", - "nodeType": "YulFunctionCall", - "src": "2677:27:44" - } - ], - "functionName": { - "name": "byte", - "nativeSrc": "2669:4:44", - "nodeType": "YulIdentifier", - "src": "2669:4:44" - }, - "nativeSrc": "2669:36:44", - "nodeType": "YulFunctionCall", - "src": "2669:36:44" - }, - "variableNames": [ - { - "name": "v", - "nativeSrc": "2664:1:44", - "nodeType": "YulIdentifier", - "src": "2664:1:44" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 6423, - "isOffset": false, - "isSlot": false, - "src": "2566:1:44", - "valueSize": 1 - }, - { - "declaration": 6426, - "isOffset": false, - "isSlot": false, - "src": "2615:1:44", - "valueSize": 1 - }, - { - "declaration": 6408, - "isOffset": false, - "isSlot": false, - "src": "2581:9:44", - "valueSize": 1 - }, - { - "declaration": 6408, - "isOffset": false, - "isSlot": false, - "src": "2630:9:44", - "valueSize": 1 - }, - { - "declaration": 6408, - "isOffset": false, - "isSlot": false, - "src": "2687:9:44", - "valueSize": 1 - }, - { - "declaration": 6429, - "isOffset": false, - "isSlot": false, - "src": "2664:1:44", - "valueSize": 1 - } - ], - "id": 6431, - "nodeType": "InlineAssembly", - "src": "2539:180:44" - }, - { - "expression": { - "arguments": [ - { - "id": 6433, - "name": "hash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6406, - "src": "2750:4:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6434, - "name": "v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6429, - "src": "2756:1:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 6435, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6423, - "src": "2759:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6436, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6426, - "src": "2762:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6432, - "name": "tryRecover", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 6456, - 6536, - 6644 - ], - "referencedDeclaration": 6644, - "src": "2739:10:44", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)" - } - }, - "id": 6437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2739:25:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" - } - }, - "functionReturnParameters": 6417, - "id": 6438, - "nodeType": "Return", - "src": "2732:32:44" - } - ] - } - } - ] - }, - "documentation": { - "id": 6404, - "nodeType": "StructuredDocumentation", - "src": "857:1267:44", - "text": " @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n return address(0) without also returning an error description. Errors are documented using an enum (error type)\n and a bytes32 providing additional information about the error.\n If no error is returned, then the address can be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n Documentation for signature generation:\n - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]" - }, - "id": 6456, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "tryRecover", - "nameLocation": "2138:10:44", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6409, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6406, - "mutability": "mutable", - "name": "hash", - "nameLocation": "2157:4:44", - "nodeType": "VariableDeclaration", - "scope": 6456, - "src": "2149:12:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6405, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2149:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6408, - "mutability": "mutable", - "name": "signature", - "nameLocation": "2176:9:44", - "nodeType": "VariableDeclaration", - "scope": 6456, - "src": "2163:22:44", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6407, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2163:5:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2148:38:44" - }, - "returnParameters": { - "id": 6417, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6411, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6456, - "src": "2210:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6410, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2210:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6414, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6456, - "src": "2219:12:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "typeName": { - "id": 6413, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6412, - "name": "RecoverError", - "nameLocations": [ - "2219:12:44" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6390, - "src": "2219:12:44" - }, - "referencedDeclaration": 6390, - "src": "2219:12:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6416, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6456, - "src": "2233:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6415, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2233:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2209:32:44" - }, - "scope": 6730, - "src": "2129:766:44", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6485, - "nodeType": "Block", - "src": "3789:168:44", - "statements": [ - { - "assignments": [ - 6467, - 6470, - 6472 - ], - "declarations": [ - { - "constant": false, - "id": 6467, - "mutability": "mutable", - "name": "recovered", - "nameLocation": "3808:9:44", - "nodeType": "VariableDeclaration", - "scope": 6485, - "src": "3800:17:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6466, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3800:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6470, - "mutability": "mutable", - "name": "error", - "nameLocation": "3832:5:44", - "nodeType": "VariableDeclaration", - "scope": 6485, - "src": "3819:18:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "typeName": { - "id": 6469, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6468, - "name": "RecoverError", - "nameLocations": [ - "3819:12:44" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6390, - "src": "3819:12:44" - }, - "referencedDeclaration": 6390, - "src": "3819:12:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6472, - "mutability": "mutable", - "name": "errorArg", - "nameLocation": "3847:8:44", - "nodeType": "VariableDeclaration", - "scope": 6485, - "src": "3839:16:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6471, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3839:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 6477, - "initialValue": { - "arguments": [ - { - "id": 6474, - "name": "hash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6459, - "src": "3870:4:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6475, - "name": "signature", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6461, - "src": "3876:9:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6473, - "name": "tryRecover", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 6456, - 6536, - 6644 - ], - "referencedDeclaration": 6456, - "src": "3859:10:44", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "function (bytes32,bytes memory) pure returns (address,enum ECDSA.RecoverError,bytes32)" - } - }, - "id": 6476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3859:27:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3799:87:44" - }, - { - "expression": { - "arguments": [ - { - "id": 6479, - "name": "error", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6470, - "src": "3908:5:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - { - "id": 6480, - "name": "errorArg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6472, - "src": "3915:8:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6478, - "name": "_throwError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6729, - "src": "3896:11:44", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$6390_$_t_bytes32_$returns$__$", - "typeString": "function (enum ECDSA.RecoverError,bytes32) pure" - } - }, - "id": 6481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3896:28:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6482, - "nodeType": "ExpressionStatement", - "src": "3896:28:44" - }, - { - "expression": { - "id": 6483, - "name": "recovered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6467, - "src": "3941:9:44", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 6465, - "id": 6484, - "nodeType": "Return", - "src": "3934:16:44" - } - ] - }, - "documentation": { - "id": 6457, - "nodeType": "StructuredDocumentation", - "src": "2901:796:44", - "text": " @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it." - }, - "id": 6486, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "recover", - "nameLocation": "3711:7:44", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6462, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6459, - "mutability": "mutable", - "name": "hash", - "nameLocation": "3727:4:44", - "nodeType": "VariableDeclaration", - "scope": 6486, - "src": "3719:12:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6458, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3719:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6461, - "mutability": "mutable", - "name": "signature", - "nameLocation": "3746:9:44", - "nodeType": "VariableDeclaration", - "scope": 6486, - "src": "3733:22:44", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6460, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3733:5:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3718:38:44" - }, - "returnParameters": { - "id": 6465, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6464, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6486, - "src": "3780:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6463, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3780:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3779:9:44" - }, - "scope": 6730, - "src": "3702:255:44", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6535, - "nodeType": "Block", - "src": "4285:342:44", - "statements": [ - { - "id": 6534, - "nodeType": "UncheckedBlock", - "src": "4295:326:44", - "statements": [ - { - "assignments": [ - 6504 - ], - "declarations": [ - { - "constant": false, - "id": 6504, - "mutability": "mutable", - "name": "s", - "nameLocation": "4327:1:44", - "nodeType": "VariableDeclaration", - "scope": 6534, - "src": "4319:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6503, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4319:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 6511, - "initialValue": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 6510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6505, - "name": "vs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6493, - "src": "4331:2:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "arguments": [ - { - "hexValue": "307837666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666", - "id": 6508, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4344:66:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1", - "typeString": "int_const 5789...(69 digits omitted)...9967" - }, - "value": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1", - "typeString": "int_const 5789...(69 digits omitted)...9967" - } - ], - "id": 6507, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4336:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 6506, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4336:7:44", - "typeDescriptions": {} - } - }, - "id": 6509, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4336:75:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "4331:80:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4319:92:44" - }, - { - "assignments": [ - 6513 - ], - "declarations": [ - { - "constant": false, - "id": 6513, - "mutability": "mutable", - "name": "v", - "nameLocation": "4528:1:44", - "nodeType": "VariableDeclaration", - "scope": 6534, - "src": "4522:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 6512, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4522:5:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "id": 6526, - "initialValue": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6521, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 6518, - "name": "vs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6493, - "src": "4547:2:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6517, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4539:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 6516, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4539:7:44", - "typeDescriptions": {} - } - }, - "id": 6519, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4539:11:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "323535", - "id": 6520, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4554:3:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_255_by_1", - "typeString": "int_const 255" - }, - "value": "255" - }, - "src": "4539:18:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 6522, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4538:20:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "3237", - "id": 6523, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4561:2:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_27_by_1", - "typeString": "int_const 27" - }, - "value": "27" - }, - "src": "4538:25:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6515, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4532:5:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 6514, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4532:5:44", - "typeDescriptions": {} - } - }, - "id": 6525, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4532:32:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4522:42:44" - }, - { - "expression": { - "arguments": [ - { - "id": 6528, - "name": "hash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6489, - "src": "4596:4:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6529, - "name": "v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6513, - "src": "4602:1:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 6530, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6491, - "src": "4605:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6531, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6504, - "src": "4608:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6527, - "name": "tryRecover", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 6456, - 6536, - 6644 - ], - "referencedDeclaration": 6644, - "src": "4585:10:44", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)" - } - }, - "id": 6532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4585:25:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" - } - }, - "functionReturnParameters": 6502, - "id": 6533, - "nodeType": "Return", - "src": "4578:32:44" - } - ] - } - ] - }, - "documentation": { - "id": 6487, - "nodeType": "StructuredDocumentation", - "src": "3963:205:44", - "text": " @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]" - }, - "id": 6536, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "tryRecover", - "nameLocation": "4182:10:44", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6494, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6489, - "mutability": "mutable", - "name": "hash", - "nameLocation": "4201:4:44", - "nodeType": "VariableDeclaration", - "scope": 6536, - "src": "4193:12:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6488, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4193:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6491, - "mutability": "mutable", - "name": "r", - "nameLocation": "4215:1:44", - "nodeType": "VariableDeclaration", - "scope": 6536, - "src": "4207:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6490, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4207:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6493, - "mutability": "mutable", - "name": "vs", - "nameLocation": "4226:2:44", - "nodeType": "VariableDeclaration", - "scope": 6536, - "src": "4218:10:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6492, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4218:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4192:37:44" - }, - "returnParameters": { - "id": 6502, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6496, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6536, - "src": "4253:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6495, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4253:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6499, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6536, - "src": "4262:12:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "typeName": { - "id": 6498, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6497, - "name": "RecoverError", - "nameLocations": [ - "4262:12:44" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6390, - "src": "4262:12:44" - }, - "referencedDeclaration": 6390, - "src": "4262:12:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6501, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6536, - "src": "4276:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6500, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4276:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4252:32:44" - }, - "scope": 6730, - "src": "4173:454:44", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6568, - "nodeType": "Block", - "src": "4840:164:44", - "statements": [ - { - "assignments": [ - 6549, - 6552, - 6554 - ], - "declarations": [ - { - "constant": false, - "id": 6549, - "mutability": "mutable", - "name": "recovered", - "nameLocation": "4859:9:44", - "nodeType": "VariableDeclaration", - "scope": 6568, - "src": "4851:17:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6548, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4851:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6552, - "mutability": "mutable", - "name": "error", - "nameLocation": "4883:5:44", - "nodeType": "VariableDeclaration", - "scope": 6568, - "src": "4870:18:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "typeName": { - "id": 6551, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6550, - "name": "RecoverError", - "nameLocations": [ - "4870:12:44" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6390, - "src": "4870:12:44" - }, - "referencedDeclaration": 6390, - "src": "4870:12:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6554, - "mutability": "mutable", - "name": "errorArg", - "nameLocation": "4898:8:44", - "nodeType": "VariableDeclaration", - "scope": 6568, - "src": "4890:16:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6553, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4890:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 6560, - "initialValue": { - "arguments": [ - { - "id": 6556, - "name": "hash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6539, - "src": "4921:4:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6557, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6541, - "src": "4927:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6558, - "name": "vs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6543, - "src": "4930:2:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6555, - "name": "tryRecover", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 6456, - 6536, - 6644 - ], - "referencedDeclaration": 6536, - "src": "4910:10:44", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "function (bytes32,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)" - } - }, - "id": 6559, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4910:23:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4850:83:44" - }, - { - "expression": { - "arguments": [ - { - "id": 6562, - "name": "error", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6552, - "src": "4955:5:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - { - "id": 6563, - "name": "errorArg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6554, - "src": "4962:8:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6561, - "name": "_throwError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6729, - "src": "4943:11:44", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$6390_$_t_bytes32_$returns$__$", - "typeString": "function (enum ECDSA.RecoverError,bytes32) pure" - } - }, - "id": 6564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4943:28:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6565, - "nodeType": "ExpressionStatement", - "src": "4943:28:44" - }, - { - "expression": { - "id": 6566, - "name": "recovered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6549, - "src": "4988:9:44", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 6547, - "id": 6567, - "nodeType": "Return", - "src": "4981:16:44" - } - ] - }, - "documentation": { - "id": 6537, - "nodeType": "StructuredDocumentation", - "src": "4633:116:44", - "text": " @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately." - }, - "id": 6569, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "recover", - "nameLocation": "4763:7:44", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6544, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6539, - "mutability": "mutable", - "name": "hash", - "nameLocation": "4779:4:44", - "nodeType": "VariableDeclaration", - "scope": 6569, - "src": "4771:12:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6538, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4771:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6541, - "mutability": "mutable", - "name": "r", - "nameLocation": "4793:1:44", - "nodeType": "VariableDeclaration", - "scope": 6569, - "src": "4785:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6540, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4785:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6543, - "mutability": "mutable", - "name": "vs", - "nameLocation": "4804:2:44", - "nodeType": "VariableDeclaration", - "scope": 6569, - "src": "4796:10:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6542, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4796:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4770:37:44" - }, - "returnParameters": { - "id": 6547, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6546, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6569, - "src": "4831:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6545, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4831:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4830:9:44" - }, - "scope": 6730, - "src": "4754:250:44", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6643, - "nodeType": "Block", - "src": "5298:1372:44", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6593, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 6590, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6578, - "src": "6194:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6589, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6186:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 6588, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6186:7:44", - "typeDescriptions": {} - } - }, - "id": 6591, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6186:10:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130", - "id": 6592, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6199:66:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1", - "typeString": "int_const 5789...(69 digits omitted)...7168" - }, - "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0" - }, - "src": "6186:79:44", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6604, - "nodeType": "IfStatement", - "src": "6182:164:44", - "trueBody": { - "id": 6603, - "nodeType": "Block", - "src": "6267:79:44", - "statements": [ - { - "expression": { - "components": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 6596, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6297:1:44", - "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": 6595, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6289:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6594, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6289:7:44", - "typeDescriptions": {} - } - }, - "id": 6597, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6289:10:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 6598, - "name": "RecoverError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6390, - "src": "6301:12:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", - "typeString": "type(enum ECDSA.RecoverError)" - } - }, - "id": 6599, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6314:17:44", - "memberName": "InvalidSignatureS", - "nodeType": "MemberAccess", - "referencedDeclaration": 6389, - "src": "6301:30:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - { - "id": 6600, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6578, - "src": "6333:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 6601, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "6288:47:44", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" - } - }, - "functionReturnParameters": 6587, - "id": 6602, - "nodeType": "Return", - "src": "6281:54:44" - } - ] - } - }, - { - "assignments": [ - 6606 - ], - "declarations": [ - { - "constant": false, - "id": 6606, - "mutability": "mutable", - "name": "signer", - "nameLocation": "6448:6:44", - "nodeType": "VariableDeclaration", - "scope": 6643, - "src": "6440:14:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6605, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6440:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 6613, - "initialValue": { - "arguments": [ - { - "id": 6608, - "name": "hash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6572, - "src": "6467:4:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6609, - "name": "v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6574, - "src": "6473:1:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 6610, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6576, - "src": "6476:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6611, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6578, - "src": "6479:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6607, - "name": "ecrecover", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -6, - "src": "6457:9:44", - "typeDescriptions": { - "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" - } - }, - "id": 6612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6457:24:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6440:41:44" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6614, - "name": "signer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6606, - "src": "6495:6:44", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 6617, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6513:1:44", - "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": 6616, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6505:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6615, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6505:7:44", - "typeDescriptions": {} - } - }, - "id": 6618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6505:10:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6495:20:44", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6633, - "nodeType": "IfStatement", - "src": "6491:113:44", - "trueBody": { - "id": 6632, - "nodeType": "Block", - "src": "6517:87:44", - "statements": [ - { - "expression": { - "components": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 6622, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6547:1:44", - "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": 6621, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6539:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6620, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6539:7:44", - "typeDescriptions": {} - } - }, - "id": 6623, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6539:10:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 6624, - "name": "RecoverError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6390, - "src": "6551:12:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", - "typeString": "type(enum ECDSA.RecoverError)" - } - }, - "id": 6625, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6564:16:44", - "memberName": "InvalidSignature", - "nodeType": "MemberAccess", - "referencedDeclaration": 6387, - "src": "6551:29:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 6628, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6590:1:44", - "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": 6627, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6582:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 6626, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6582:7:44", - "typeDescriptions": {} - } - }, - "id": 6629, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6582:10:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 6630, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "6538:55:44", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" - } - }, - "functionReturnParameters": 6587, - "id": 6631, - "nodeType": "Return", - "src": "6531:62:44" - } - ] - } - }, - { - "expression": { - "components": [ - { - "id": 6634, - "name": "signer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6606, - "src": "6622:6:44", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 6635, - "name": "RecoverError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6390, - "src": "6630:12:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", - "typeString": "type(enum ECDSA.RecoverError)" - } - }, - "id": 6636, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6643:7:44", - "memberName": "NoError", - "nodeType": "MemberAccess", - "referencedDeclaration": 6386, - "src": "6630:20:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 6639, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6660:1:44", - "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": 6638, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6652:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 6637, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6652:7:44", - "typeDescriptions": {} - } - }, - "id": 6640, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6652:10:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 6641, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "6621:42:44", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" - } - }, - "functionReturnParameters": 6587, - "id": 6642, - "nodeType": "Return", - "src": "6614:49:44" - } - ] - }, - "documentation": { - "id": 6570, - "nodeType": "StructuredDocumentation", - "src": "5010:125:44", - "text": " @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n `r` and `s` signature fields separately." - }, - "id": 6644, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "tryRecover", - "nameLocation": "5149:10:44", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6579, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6572, - "mutability": "mutable", - "name": "hash", - "nameLocation": "5177:4:44", - "nodeType": "VariableDeclaration", - "scope": 6644, - "src": "5169:12:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6571, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5169:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6574, - "mutability": "mutable", - "name": "v", - "nameLocation": "5197:1:44", - "nodeType": "VariableDeclaration", - "scope": 6644, - "src": "5191:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 6573, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "5191:5:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6576, - "mutability": "mutable", - "name": "r", - "nameLocation": "5216:1:44", - "nodeType": "VariableDeclaration", - "scope": 6644, - "src": "5208:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6575, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5208:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6578, - "mutability": "mutable", - "name": "s", - "nameLocation": "5235:1:44", - "nodeType": "VariableDeclaration", - "scope": 6644, - "src": "5227:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6577, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5227:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5159:83:44" - }, - "returnParameters": { - "id": 6587, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6581, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6644, - "src": "5266:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6580, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5266:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6584, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6644, - "src": "5275:12:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "typeName": { - "id": 6583, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6582, - "name": "RecoverError", - "nameLocations": [ - "5275:12:44" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6390, - "src": "5275:12:44" - }, - "referencedDeclaration": 6390, - "src": "5275:12:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6586, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6644, - "src": "5289:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6585, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5289:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5265:32:44" - }, - "scope": 6730, - "src": "5140:1530:44", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6679, - "nodeType": "Block", - "src": "6897:166:44", - "statements": [ - { - "assignments": [ - 6659, - 6662, - 6664 - ], - "declarations": [ - { - "constant": false, - "id": 6659, - "mutability": "mutable", - "name": "recovered", - "nameLocation": "6916:9:44", - "nodeType": "VariableDeclaration", - "scope": 6679, - "src": "6908:17:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6658, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6908:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6662, - "mutability": "mutable", - "name": "error", - "nameLocation": "6940:5:44", - "nodeType": "VariableDeclaration", - "scope": 6679, - "src": "6927:18:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "typeName": { - "id": 6661, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6660, - "name": "RecoverError", - "nameLocations": [ - "6927:12:44" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6390, - "src": "6927:12:44" - }, - "referencedDeclaration": 6390, - "src": "6927:12:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6664, - "mutability": "mutable", - "name": "errorArg", - "nameLocation": "6955:8:44", - "nodeType": "VariableDeclaration", - "scope": 6679, - "src": "6947:16:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6663, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6947:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 6671, - "initialValue": { - "arguments": [ - { - "id": 6666, - "name": "hash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6647, - "src": "6978:4:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6667, - "name": "v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6649, - "src": "6984:1:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 6668, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6651, - "src": "6987:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 6669, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6653, - "src": "6990:1:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6665, - "name": "tryRecover", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 6456, - 6536, - 6644 - ], - "referencedDeclaration": 6644, - "src": "6967:10:44", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)" - } - }, - "id": 6670, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6967:25:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$6390_$_t_bytes32_$", - "typeString": "tuple(address,enum ECDSA.RecoverError,bytes32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6907:85:44" - }, - { - "expression": { - "arguments": [ - { - "id": 6673, - "name": "error", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6662, - "src": "7014:5:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - { - "id": 6674, - "name": "errorArg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6664, - "src": "7021:8:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6672, - "name": "_throwError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6729, - "src": "7002:11:44", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$6390_$_t_bytes32_$returns$__$", - "typeString": "function (enum ECDSA.RecoverError,bytes32) pure" - } - }, - "id": 6675, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7002:28:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6676, - "nodeType": "ExpressionStatement", - "src": "7002:28:44" - }, - { - "expression": { - "id": 6677, - "name": "recovered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6659, - "src": "7047:9:44", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 6657, - "id": 6678, - "nodeType": "Return", - "src": "7040:16:44" - } - ] - }, - "documentation": { - "id": 6645, - "nodeType": "StructuredDocumentation", - "src": "6676:122:44", - "text": " @dev Overload of {ECDSA-recover} that receives the `v`,\n `r` and `s` signature fields separately." - }, - "id": 6680, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "recover", - "nameLocation": "6812:7:44", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6654, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6647, - "mutability": "mutable", - "name": "hash", - "nameLocation": "6828:4:44", - "nodeType": "VariableDeclaration", - "scope": 6680, - "src": "6820:12:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6646, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6820:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6649, - "mutability": "mutable", - "name": "v", - "nameLocation": "6840:1:44", - "nodeType": "VariableDeclaration", - "scope": 6680, - "src": "6834:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 6648, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "6834:5:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6651, - "mutability": "mutable", - "name": "r", - "nameLocation": "6851:1:44", - "nodeType": "VariableDeclaration", - "scope": 6680, - "src": "6843:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6650, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6843:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6653, - "mutability": "mutable", - "name": "s", - "nameLocation": "6862:1:44", - "nodeType": "VariableDeclaration", - "scope": 6680, - "src": "6854:9:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6652, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6854:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6819:45:44" - }, - "returnParameters": { - "id": 6657, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6656, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6680, - "src": "6888:7:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6655, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6888:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6887:9:44" - }, - "scope": 6730, - "src": "6803:260:44", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6728, - "nodeType": "Block", - "src": "7268:460:44", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "id": 6692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6689, - "name": "error", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6684, - "src": "7282:5:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 6690, - "name": "RecoverError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6390, - "src": "7291:12:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", - "typeString": "type(enum ECDSA.RecoverError)" - } - }, - "id": 6691, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7304:7:44", - "memberName": "NoError", - "nodeType": "MemberAccess", - "referencedDeclaration": 6386, - "src": "7291:20:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "src": "7282:29:44", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "id": 6698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6695, - "name": "error", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6684, - "src": "7378:5:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 6696, - "name": "RecoverError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6390, - "src": "7387:12:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", - "typeString": "type(enum ECDSA.RecoverError)" - } - }, - "id": 6697, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7400:16:44", - "memberName": "InvalidSignature", - "nodeType": "MemberAccess", - "referencedDeclaration": 6387, - "src": "7387:29:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "src": "7378:38:44", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "id": 6706, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6703, - "name": "error", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6684, - "src": "7483:5:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 6704, - "name": "RecoverError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6390, - "src": "7492:12:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", - "typeString": "type(enum ECDSA.RecoverError)" - } - }, - "id": 6705, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7505:22:44", - "memberName": "InvalidSignatureLength", - "nodeType": "MemberAccess", - "referencedDeclaration": 6388, - "src": "7492:35:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "src": "7483:44:44", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "id": 6718, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6715, - "name": "error", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6684, - "src": "7617:5:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 6716, - "name": "RecoverError", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6390, - "src": "7626:12:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_RecoverError_$6390_$", - "typeString": "type(enum ECDSA.RecoverError)" - } - }, - "id": 6717, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7639:17:44", - "memberName": "InvalidSignatureS", - "nodeType": "MemberAccess", - "referencedDeclaration": 6389, - "src": "7626:30:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "src": "7617:39:44", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6724, - "nodeType": "IfStatement", - "src": "7613:109:44", - "trueBody": { - "id": 6723, - "nodeType": "Block", - "src": "7658:64:44", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 6720, - "name": "errorArg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6686, - "src": "7702:8:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6719, - "name": "ECDSAInvalidSignatureS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6403, - "src": "7679:22:44", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32) pure returns (error)" - } - }, - "id": 6721, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7679:32:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 6722, - "nodeType": "RevertStatement", - "src": "7672:39:44" - } - ] - } - }, - "id": 6725, - "nodeType": "IfStatement", - "src": "7479:243:44", - "trueBody": { - "id": 6714, - "nodeType": "Block", - "src": "7529:78:44", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "id": 6710, - "name": "errorArg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6686, - "src": "7586:8:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 6709, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7578:7:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 6708, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7578:7:44", - "typeDescriptions": {} - } - }, - "id": 6711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7578:17:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6707, - "name": "ECDSAInvalidSignatureLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6398, - "src": "7550:27:44", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256) pure returns (error)" - } - }, - "id": 6712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7550:46:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 6713, - "nodeType": "RevertStatement", - "src": "7543:53:44" - } - ] - } - }, - "id": 6726, - "nodeType": "IfStatement", - "src": "7374:348:44", - "trueBody": { - "id": 6702, - "nodeType": "Block", - "src": "7418:55:44", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6699, - "name": "ECDSAInvalidSignature", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6393, - "src": "7439:21:44", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 6700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7439:23:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 6701, - "nodeType": "RevertStatement", - "src": "7432:30:44" - } - ] - } - }, - "id": 6727, - "nodeType": "IfStatement", - "src": "7278:444:44", - "trueBody": { - "id": 6694, - "nodeType": "Block", - "src": "7313:55:44", - "statements": [ - { - "functionReturnParameters": 6688, - "id": 6693, - "nodeType": "Return", - "src": "7327:7:44" - } - ] - } - } - ] - }, - "documentation": { - "id": 6681, - "nodeType": "StructuredDocumentation", - "src": "7069:122:44", - "text": " @dev Optionally reverts with the corresponding custom error according to the `error` argument provided." - }, - "id": 6729, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_throwError", - "nameLocation": "7205:11:44", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6687, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6684, - "mutability": "mutable", - "name": "error", - "nameLocation": "7230:5:44", - "nodeType": "VariableDeclaration", - "scope": 6729, - "src": "7217:18:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - }, - "typeName": { - "id": 6683, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6682, - "name": "RecoverError", - "nameLocations": [ - "7217:12:44" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6390, - "src": "7217:12:44" - }, - "referencedDeclaration": 6390, - "src": "7217:12:44", - "typeDescriptions": { - "typeIdentifier": "t_enum$_RecoverError_$6390", - "typeString": "enum ECDSA.RecoverError" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6686, - "mutability": "mutable", - "name": "errorArg", - "nameLocation": "7245:8:44", - "nodeType": "VariableDeclaration", - "scope": 6729, - "src": "7237:16:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6685, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7237:7:44", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7216:38:44" - }, - "returnParameters": { - "id": 6688, - "nodeType": "ParameterList", - "parameters": [], - "src": "7268:0:44" - }, - "scope": 6730, - "src": "7196:532:44", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - } - ], - "scope": 6731, - "src": "344:7386:44", - "usedErrors": [ - 6393, - 6398, - 6403 - ], - "usedEvents": [] - } - ], - "src": "112:7619:44" - }, - "id": 44 - }, - "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol", - "exportedSymbols": { - "MessageHashUtils": [ - 6804 - ], - "Strings": [ - 6382 - ] - }, - "id": 6805, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 6732, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "123:24:45" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/Strings.sol", - "file": "../Strings.sol", - "id": 6734, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 6805, - "sourceUnit": 6383, - "src": "149:39:45", - "symbolAliases": [ - { - "foreign": { - "id": 6733, - "name": "Strings", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6382, - "src": "157:7:45", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "MessageHashUtils", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 6735, - "nodeType": "StructuredDocumentation", - "src": "190:330:45", - "text": " @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n The library provides methods for generating a hash of a message that conforms to the\n https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n specifications." - }, - "fullyImplemented": true, - "id": 6804, - "linearizedBaseContracts": [ - 6804 - ], - "name": "MessageHashUtils", - "nameLocation": "529:16:45", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 6744, - "nodeType": "Block", - "src": "1314:368:45", - "statements": [ - { - "AST": { - "nativeSrc": "1376:300:45", - "nodeType": "YulBlock", - "src": "1376:300:45", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1397:4:45", - "nodeType": "YulLiteral", - "src": "1397:4:45", - "type": "", - "value": "0x00" - }, - { - "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332", - "kind": "string", - "nativeSrc": "1403:34:45", - "nodeType": "YulLiteral", - "src": "1403:34:45", - "type": "", - "value": "\u0019Ethereum Signed Message:\n32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1390:6:45", - "nodeType": "YulIdentifier", - "src": "1390:6:45" - }, - "nativeSrc": "1390:48:45", - "nodeType": "YulFunctionCall", - "src": "1390:48:45" - }, - "nativeSrc": "1390:48:45", - "nodeType": "YulExpressionStatement", - "src": "1390:48:45" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1499:4:45", - "nodeType": "YulLiteral", - "src": "1499:4:45", - "type": "", - "value": "0x1c" - }, - { - "name": "messageHash", - "nativeSrc": "1505:11:45", - "nodeType": "YulIdentifier", - "src": "1505:11:45" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1492:6:45", - "nodeType": "YulIdentifier", - "src": "1492:6:45" - }, - "nativeSrc": "1492:25:45", - "nodeType": "YulFunctionCall", - "src": "1492:25:45" - }, - "nativeSrc": "1492:25:45", - "nodeType": "YulExpressionStatement", - "src": "1492:25:45" - }, - { - "nativeSrc": "1571:31:45", - "nodeType": "YulAssignment", - "src": "1571:31:45", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1591:4:45", - "nodeType": "YulLiteral", - "src": "1591:4:45", - "type": "", - "value": "0x00" - }, - { - "kind": "number", - "nativeSrc": "1597:4:45", - "nodeType": "YulLiteral", - "src": "1597:4:45", - "type": "", - "value": "0x3c" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "1581:9:45", - "nodeType": "YulIdentifier", - "src": "1581:9:45" - }, - "nativeSrc": "1581:21:45", - "nodeType": "YulFunctionCall", - "src": "1581:21:45" - }, - "variableNames": [ - { - "name": "digest", - "nativeSrc": "1571:6:45", - "nodeType": "YulIdentifier", - "src": "1571:6:45" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 6741, - "isOffset": false, - "isSlot": false, - "src": "1571:6:45", - "valueSize": 1 - }, - { - "declaration": 6738, - "isOffset": false, - "isSlot": false, - "src": "1505:11:45", - "valueSize": 1 - } - ], - "id": 6743, - "nodeType": "InlineAssembly", - "src": "1367:309:45" - } - ] - }, - "documentation": { - "id": 6736, - "nodeType": "StructuredDocumentation", - "src": "552:665:45", - "text": " @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing a bytes32 `messageHash` with\n `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n keccak256, although any bytes32 value can be safely used because the final digest will\n be re-hashed.\n See {ECDSA-recover}." - }, - "id": 6745, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toEthSignedMessageHash", - "nameLocation": "1231:22:45", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6739, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6738, - "mutability": "mutable", - "name": "messageHash", - "nameLocation": "1262:11:45", - "nodeType": "VariableDeclaration", - "scope": 6745, - "src": "1254:19:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6737, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1254:7:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1253:21:45" - }, - "returnParameters": { - "id": 6742, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6741, - "mutability": "mutable", - "name": "digest", - "nameLocation": "1306:6:45", - "nodeType": "VariableDeclaration", - "scope": 6745, - "src": "1298:14:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6740, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1298:7:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1297:16:45" - }, - "scope": 6804, - "src": "1222:460:45", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6770, - "nodeType": "Block", - "src": "2234:143:45", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a", - "id": 6757, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2286:32:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4", - "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\"" - }, - "value": "\u0019Ethereum Signed Message:\n" - }, - { - "arguments": [ - { - "arguments": [ - { - "expression": { - "id": 6762, - "name": "message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6748, - "src": "2343:7:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6763, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2351:6:45", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2343:14:45", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 6760, - "name": "Strings", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6382, - "src": "2326:7:45", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Strings_$6382_$", - "typeString": "type(library Strings)" - } - }, - "id": 6761, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2334:8:45", - "memberName": "toString", - "nodeType": "MemberAccess", - "referencedDeclaration": 6195, - "src": "2326:16:45", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$", - "typeString": "function (uint256) pure returns (string memory)" - } - }, - "id": 6764, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2326:32:45", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 6759, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2320:5:45", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 6758, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2320:5:45", - "typeDescriptions": {} - } - }, - "id": 6765, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2320:39:45", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 6766, - "name": "message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6748, - "src": "2361:7:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4", - "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\"" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 6755, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2273:5:45", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 6754, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2273:5:45", - "typeDescriptions": {} - } - }, - "id": 6756, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2279:6:45", - "memberName": "concat", - "nodeType": "MemberAccess", - "src": "2273:12:45", - "typeDescriptions": { - "typeIdentifier": "t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 6767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2273:96:45", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6753, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "2263:9:45", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 6768, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2263:107:45", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 6752, - "id": 6769, - "nodeType": "Return", - "src": "2244:126:45" - } - ] - }, - "documentation": { - "id": 6746, - "nodeType": "StructuredDocumentation", - "src": "1688:455:45", - "text": " @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing an arbitrary `message` with\n `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n See {ECDSA-recover}." - }, - "id": 6771, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toEthSignedMessageHash", - "nameLocation": "2157:22:45", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6749, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6748, - "mutability": "mutable", - "name": "message", - "nameLocation": "2193:7:45", - "nodeType": "VariableDeclaration", - "scope": 6771, - "src": "2180:20:45", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6747, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2180:5:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2179:22:45" - }, - "returnParameters": { - "id": 6752, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6751, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6771, - "src": "2225:7:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6750, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2225:7:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2224:9:45" - }, - "scope": 6804, - "src": "2148:229:45", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6790, - "nodeType": "Block", - "src": "2831:80:45", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "1900", - "id": 6784, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "hexString", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2875:10:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a", - "typeString": "literal_string hex\"1900\"" - }, - "value": "\u0019\u0000" - }, - { - "id": 6785, - "name": "validator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6774, - "src": "2887:9:45", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6786, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6776, - "src": "2898:4:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a", - "typeString": "literal_string hex\"1900\"" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 6782, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "2858:3:45", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6783, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2862:12:45", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "2858:16:45", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 6787, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2858:45:45", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 6781, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "2848:9:45", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 6788, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2848:56:45", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 6780, - "id": 6789, - "nodeType": "Return", - "src": "2841:63:45" - } - ] - }, - "documentation": { - "id": 6772, - "nodeType": "StructuredDocumentation", - "src": "2383:332:45", - "text": " @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x00` (data with intended validator).\n The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n `validator` address. Then hashing the result.\n See {ECDSA-recover}." - }, - "id": 6791, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toDataWithIntendedValidatorHash", - "nameLocation": "2729:31:45", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6777, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6774, - "mutability": "mutable", - "name": "validator", - "nameLocation": "2769:9:45", - "nodeType": "VariableDeclaration", - "scope": 6791, - "src": "2761:17:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6773, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2761:7:45", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6776, - "mutability": "mutable", - "name": "data", - "nameLocation": "2793:4:45", - "nodeType": "VariableDeclaration", - "scope": 6791, - "src": "2780:17:45", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6775, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2780:5:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2760:38:45" - }, - "returnParameters": { - "id": 6780, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6779, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6791, - "src": "2822:7:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6778, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2822:7:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2821:9:45" - }, - "scope": 6804, - "src": "2720:191:45", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6802, - "nodeType": "Block", - "src": "3462:292:45", - "statements": [ - { - "AST": { - "nativeSrc": "3524:224:45", - "nodeType": "YulBlock", - "src": "3524:224:45", - "statements": [ - { - "nativeSrc": "3538:22:45", - "nodeType": "YulVariableDeclaration", - "src": "3538:22:45", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3555:4:45", - "nodeType": "YulLiteral", - "src": "3555:4:45", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "3549:5:45", - "nodeType": "YulIdentifier", - "src": "3549:5:45" - }, - "nativeSrc": "3549:11:45", - "nodeType": "YulFunctionCall", - "src": "3549:11:45" - }, - "variables": [ - { - "name": "ptr", - "nativeSrc": "3542:3:45", - "nodeType": "YulTypedName", - "src": "3542:3:45", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nativeSrc": "3580:3:45", - "nodeType": "YulIdentifier", - "src": "3580:3:45" - }, - { - "hexValue": "1901", - "kind": "string", - "nativeSrc": "3585:10:45", - "nodeType": "YulLiteral", - "src": "3585:10:45", - "type": "", - "value": "\u0019\u0001" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3573:6:45", - "nodeType": "YulIdentifier", - "src": "3573:6:45" - }, - "nativeSrc": "3573:23:45", - "nodeType": "YulFunctionCall", - "src": "3573:23:45" - }, - "nativeSrc": "3573:23:45", - "nodeType": "YulExpressionStatement", - "src": "3573:23:45" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "ptr", - "nativeSrc": "3620:3:45", - "nodeType": "YulIdentifier", - "src": "3620:3:45" - }, - { - "kind": "number", - "nativeSrc": "3625:4:45", - "nodeType": "YulLiteral", - "src": "3625:4:45", - "type": "", - "value": "0x02" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3616:3:45", - "nodeType": "YulIdentifier", - "src": "3616:3:45" - }, - "nativeSrc": "3616:14:45", - "nodeType": "YulFunctionCall", - "src": "3616:14:45" - }, - { - "name": "domainSeparator", - "nativeSrc": "3632:15:45", - "nodeType": "YulIdentifier", - "src": "3632:15:45" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3609:6:45", - "nodeType": "YulIdentifier", - "src": "3609:6:45" - }, - "nativeSrc": "3609:39:45", - "nodeType": "YulFunctionCall", - "src": "3609:39:45" - }, - "nativeSrc": "3609:39:45", - "nodeType": "YulExpressionStatement", - "src": "3609:39:45" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "ptr", - "nativeSrc": "3672:3:45", - "nodeType": "YulIdentifier", - "src": "3672:3:45" - }, - { - "kind": "number", - "nativeSrc": "3677:4:45", - "nodeType": "YulLiteral", - "src": "3677:4:45", - "type": "", - "value": "0x22" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3668:3:45", - "nodeType": "YulIdentifier", - "src": "3668:3:45" - }, - "nativeSrc": "3668:14:45", - "nodeType": "YulFunctionCall", - "src": "3668:14:45" - }, - { - "name": "structHash", - "nativeSrc": "3684:10:45", - "nodeType": "YulIdentifier", - "src": "3684:10:45" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3661:6:45", - "nodeType": "YulIdentifier", - "src": "3661:6:45" - }, - "nativeSrc": "3661:34:45", - "nodeType": "YulFunctionCall", - "src": "3661:34:45" - }, - "nativeSrc": "3661:34:45", - "nodeType": "YulExpressionStatement", - "src": "3661:34:45" - }, - { - "nativeSrc": "3708:30:45", - "nodeType": "YulAssignment", - "src": "3708:30:45", - "value": { - "arguments": [ - { - "name": "ptr", - "nativeSrc": "3728:3:45", - "nodeType": "YulIdentifier", - "src": "3728:3:45" - }, - { - "kind": "number", - "nativeSrc": "3733:4:45", - "nodeType": "YulLiteral", - "src": "3733:4:45", - "type": "", - "value": "0x42" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "3718:9:45", - "nodeType": "YulIdentifier", - "src": "3718:9:45" - }, - "nativeSrc": "3718:20:45", - "nodeType": "YulFunctionCall", - "src": "3718:20:45" - }, - "variableNames": [ - { - "name": "digest", - "nativeSrc": "3708:6:45", - "nodeType": "YulIdentifier", - "src": "3708:6:45" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 6799, - "isOffset": false, - "isSlot": false, - "src": "3708:6:45", - "valueSize": 1 - }, - { - "declaration": 6794, - "isOffset": false, - "isSlot": false, - "src": "3632:15:45", - "valueSize": 1 - }, - { - "declaration": 6796, - "isOffset": false, - "isSlot": false, - "src": "3684:10:45", - "valueSize": 1 - } - ], - "id": 6801, - "nodeType": "InlineAssembly", - "src": "3515:233:45" - } - ] - }, - "documentation": { - "id": 6792, - "nodeType": "StructuredDocumentation", - "src": "2917:431:45", - "text": " @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n See {ECDSA-recover}." - }, - "id": 6803, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toTypedDataHash", - "nameLocation": "3362:15:45", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6797, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6794, - "mutability": "mutable", - "name": "domainSeparator", - "nameLocation": "3386:15:45", - "nodeType": "VariableDeclaration", - "scope": 6803, - "src": "3378:23:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6793, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3378:7:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6796, - "mutability": "mutable", - "name": "structHash", - "nameLocation": "3411:10:45", - "nodeType": "VariableDeclaration", - "scope": 6803, - "src": "3403:18:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6795, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3403:7:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3377:45:45" - }, - "returnParameters": { - "id": 6800, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6799, - "mutability": "mutable", - "name": "digest", - "nameLocation": "3454:6:45", - "nodeType": "VariableDeclaration", - "scope": 6803, - "src": "3446:14:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 6798, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3446:7:45", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3445:16:45" - }, - "scope": 6804, - "src": "3353:401:45", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 6805, - "src": "521:3235:45", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "123:3634:45" - }, - "id": 45 - }, - "@openzeppelin/contracts/utils/math/Math.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol", - "exportedSymbols": { - "Math": [ - 7858 - ] - }, - "id": 7859, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 6806, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "103:24:46" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Math", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 6807, - "nodeType": "StructuredDocumentation", - "src": "129:73:46", - "text": " @dev Standard math utilities missing in the Solidity language." - }, - "fullyImplemented": true, - "id": 7858, - "linearizedBaseContracts": [ - 7858 - ], - "name": "Math", - "nameLocation": "211:4:46", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 6808, - "nodeType": "StructuredDocumentation", - "src": "222:50:46", - "text": " @dev Muldiv operation overflow." - }, - "errorSelector": "227bc153", - "id": 6810, - "name": "MathOverflowedMulDiv", - "nameLocation": "283:20:46", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 6809, - "nodeType": "ParameterList", - "parameters": [], - "src": "303:2:46" - }, - "src": "277:29:46" - }, - { - "canonicalName": "Math.Rounding", - "id": 6815, - "members": [ - { - "id": 6811, - "name": "Floor", - "nameLocation": "336:5:46", - "nodeType": "EnumValue", - "src": "336:5:46" - }, - { - "id": 6812, - "name": "Ceil", - "nameLocation": "379:4:46", - "nodeType": "EnumValue", - "src": "379:4:46" - }, - { - "id": 6813, - "name": "Trunc", - "nameLocation": "421:5:46", - "nodeType": "EnumValue", - "src": "421:5:46" - }, - { - "id": 6814, - "name": "Expand", - "nameLocation": "451:6:46", - "nodeType": "EnumValue", - "src": "451:6:46" - } - ], - "name": "Rounding", - "nameLocation": "317:8:46", - "nodeType": "EnumDefinition", - "src": "312:169:46" - }, - { - "body": { - "id": 6846, - "nodeType": "Block", - "src": "661:140:46", - "statements": [ - { - "id": 6845, - "nodeType": "UncheckedBlock", - "src": "671:124:46", - "statements": [ - { - "assignments": [ - 6828 - ], - "declarations": [ - { - "constant": false, - "id": 6828, - "mutability": "mutable", - "name": "c", - "nameLocation": "703:1:46", - "nodeType": "VariableDeclaration", - "scope": 6845, - "src": "695:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6827, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "695:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6832, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6831, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6829, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6818, - "src": "707:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 6830, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6820, - "src": "711:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "707:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "695:17:46" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6835, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6833, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6828, - "src": "730:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 6834, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6818, - "src": "734:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "730:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6840, - "nodeType": "IfStatement", - "src": "726:28:46", - "trueBody": { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 6836, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "745:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "hexValue": "30", - "id": 6837, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "752:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "id": 6838, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "744:10:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", - "typeString": "tuple(bool,int_const 0)" - } - }, - "functionReturnParameters": 6826, - "id": 6839, - "nodeType": "Return", - "src": "737:17:46" - } - }, - { - "expression": { - "components": [ - { - "hexValue": "74727565", - "id": 6841, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "776:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "id": 6842, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6828, - "src": "782:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 6843, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "775:9:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", - "typeString": "tuple(bool,uint256)" - } - }, - "functionReturnParameters": 6826, - "id": 6844, - "nodeType": "Return", - "src": "768:16:46" - } - ] - } - ] - }, - "documentation": { - "id": 6816, - "nodeType": "StructuredDocumentation", - "src": "487:93:46", - "text": " @dev Returns the addition of two unsigned integers, with an overflow flag." - }, - "id": 6847, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "tryAdd", - "nameLocation": "594:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6821, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6818, - "mutability": "mutable", - "name": "a", - "nameLocation": "609:1:46", - "nodeType": "VariableDeclaration", - "scope": 6847, - "src": "601:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6817, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "601:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6820, - "mutability": "mutable", - "name": "b", - "nameLocation": "620:1:46", - "nodeType": "VariableDeclaration", - "scope": 6847, - "src": "612:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6819, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "612:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "600:22:46" - }, - "returnParameters": { - "id": 6826, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6823, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6847, - "src": "646:4:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6822, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "646:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6825, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6847, - "src": "652:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6824, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "652:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "645:15:46" - }, - "scope": 7858, - "src": "585:216:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6874, - "nodeType": "Block", - "src": "984:113:46", - "statements": [ - { - "id": 6873, - "nodeType": "UncheckedBlock", - "src": "994:97:46", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6861, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6859, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6852, - "src": "1022:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 6860, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6850, - "src": "1026:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1022:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6866, - "nodeType": "IfStatement", - "src": "1018:28:46", - "trueBody": { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 6862, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1037:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "hexValue": "30", - "id": 6863, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1044:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "id": 6864, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1036:10:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", - "typeString": "tuple(bool,int_const 0)" - } - }, - "functionReturnParameters": 6858, - "id": 6865, - "nodeType": "Return", - "src": "1029:17:46" - } - }, - { - "expression": { - "components": [ - { - "hexValue": "74727565", - "id": 6867, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1068:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6870, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6868, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6850, - "src": "1074:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 6869, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6852, - "src": "1078:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1074:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 6871, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1067:13:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", - "typeString": "tuple(bool,uint256)" - } - }, - "functionReturnParameters": 6858, - "id": 6872, - "nodeType": "Return", - "src": "1060:20:46" - } - ] - } - ] - }, - "documentation": { - "id": 6848, - "nodeType": "StructuredDocumentation", - "src": "807:96:46", - "text": " @dev Returns the subtraction of two unsigned integers, with an overflow flag." - }, - "id": 6875, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "trySub", - "nameLocation": "917:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6853, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6850, - "mutability": "mutable", - "name": "a", - "nameLocation": "932:1:46", - "nodeType": "VariableDeclaration", - "scope": 6875, - "src": "924:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6849, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "924:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6852, - "mutability": "mutable", - "name": "b", - "nameLocation": "943:1:46", - "nodeType": "VariableDeclaration", - "scope": 6875, - "src": "935:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6851, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "935:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "923:22:46" - }, - "returnParameters": { - "id": 6858, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6855, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6875, - "src": "969:4:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6854, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "969:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6857, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6875, - "src": "975:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6856, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "975:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "968:15:46" - }, - "scope": 7858, - "src": "908:189:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6916, - "nodeType": "Block", - "src": "1283:417:46", - "statements": [ - { - "id": 6915, - "nodeType": "UncheckedBlock", - "src": "1293:401:46", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6889, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6887, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6878, - "src": "1551:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 6888, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1556:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1551:6:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6894, - "nodeType": "IfStatement", - "src": "1547:28:46", - "trueBody": { - "expression": { - "components": [ - { - "hexValue": "74727565", - "id": 6890, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1567:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "hexValue": "30", - "id": 6891, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1573:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "id": 6892, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1566:9:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", - "typeString": "tuple(bool,int_const 0)" - } - }, - "functionReturnParameters": 6886, - "id": 6893, - "nodeType": "Return", - "src": "1559:16:46" - } - }, - { - "assignments": [ - 6896 - ], - "declarations": [ - { - "constant": false, - "id": 6896, - "mutability": "mutable", - "name": "c", - "nameLocation": "1597:1:46", - "nodeType": "VariableDeclaration", - "scope": 6915, - "src": "1589:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6895, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1589:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6900, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6899, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6897, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6878, - "src": "1601:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 6898, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6880, - "src": "1605:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1601:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1589:17:46" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6903, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6901, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6896, - "src": "1624:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 6902, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6878, - "src": "1628:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1624:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 6904, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6880, - "src": "1633:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1624:10:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6910, - "nodeType": "IfStatement", - "src": "1620:33:46", - "trueBody": { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 6906, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1644:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "hexValue": "30", - "id": 6907, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1651:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "id": 6908, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1643:10:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", - "typeString": "tuple(bool,int_const 0)" - } - }, - "functionReturnParameters": 6886, - "id": 6909, - "nodeType": "Return", - "src": "1636:17:46" - } - }, - { - "expression": { - "components": [ - { - "hexValue": "74727565", - "id": 6911, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1675:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "id": 6912, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6896, - "src": "1681:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 6913, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1674:9:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", - "typeString": "tuple(bool,uint256)" - } - }, - "functionReturnParameters": 6886, - "id": 6914, - "nodeType": "Return", - "src": "1667:16:46" - } - ] - } - ] - }, - "documentation": { - "id": 6876, - "nodeType": "StructuredDocumentation", - "src": "1103:99:46", - "text": " @dev Returns the multiplication of two unsigned integers, with an overflow flag." - }, - "id": 6917, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "tryMul", - "nameLocation": "1216:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6881, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6878, - "mutability": "mutable", - "name": "a", - "nameLocation": "1231:1:46", - "nodeType": "VariableDeclaration", - "scope": 6917, - "src": "1223:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6877, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1223:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6880, - "mutability": "mutable", - "name": "b", - "nameLocation": "1242:1:46", - "nodeType": "VariableDeclaration", - "scope": 6917, - "src": "1234:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6879, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1234:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1222:22:46" - }, - "returnParameters": { - "id": 6886, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6883, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6917, - "src": "1268:4:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6882, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1268:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6885, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6917, - "src": "1274:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6884, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1274:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1267:15:46" - }, - "scope": 7858, - "src": "1207:493:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6944, - "nodeType": "Block", - "src": "1887:114:46", - "statements": [ - { - "id": 6943, - "nodeType": "UncheckedBlock", - "src": "1897:98:46", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6929, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6922, - "src": "1925:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 6930, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1930:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1925:6:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6936, - "nodeType": "IfStatement", - "src": "1921:29:46", - "trueBody": { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 6932, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1941:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "hexValue": "30", - "id": 6933, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1948:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "id": 6934, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1940:10:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", - "typeString": "tuple(bool,int_const 0)" - } - }, - "functionReturnParameters": 6928, - "id": 6935, - "nodeType": "Return", - "src": "1933:17:46" - } - }, - { - "expression": { - "components": [ - { - "hexValue": "74727565", - "id": 6937, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1972:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6938, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6920, - "src": "1978:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 6939, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6922, - "src": "1982:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1978:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 6941, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1971:13:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", - "typeString": "tuple(bool,uint256)" - } - }, - "functionReturnParameters": 6928, - "id": 6942, - "nodeType": "Return", - "src": "1964:20:46" - } - ] - } - ] - }, - "documentation": { - "id": 6918, - "nodeType": "StructuredDocumentation", - "src": "1706:100:46", - "text": " @dev Returns the division of two unsigned integers, with a division by zero flag." - }, - "id": 6945, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "tryDiv", - "nameLocation": "1820:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6923, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6920, - "mutability": "mutable", - "name": "a", - "nameLocation": "1835:1:46", - "nodeType": "VariableDeclaration", - "scope": 6945, - "src": "1827:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6919, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1827:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6922, - "mutability": "mutable", - "name": "b", - "nameLocation": "1846:1:46", - "nodeType": "VariableDeclaration", - "scope": 6945, - "src": "1838:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6921, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1838:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1826:22:46" - }, - "returnParameters": { - "id": 6928, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6925, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6945, - "src": "1872:4:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6924, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1872:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6927, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6945, - "src": "1878:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6926, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1878:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1871:15:46" - }, - "scope": 7858, - "src": "1811:190:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6972, - "nodeType": "Block", - "src": "2198:114:46", - "statements": [ - { - "id": 6971, - "nodeType": "UncheckedBlock", - "src": "2208:98:46", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6959, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6957, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6950, - "src": "2236:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 6958, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2241:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2236:6:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6964, - "nodeType": "IfStatement", - "src": "2232:29:46", - "trueBody": { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 6960, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2252:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "hexValue": "30", - "id": 6961, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2259:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "id": 6962, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2251:10:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", - "typeString": "tuple(bool,int_const 0)" - } - }, - "functionReturnParameters": 6956, - "id": 6963, - "nodeType": "Return", - "src": "2244:17:46" - } - }, - { - "expression": { - "components": [ - { - "hexValue": "74727565", - "id": 6965, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2283:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6968, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6966, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6948, - "src": "2289:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "id": 6967, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6950, - "src": "2293:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2289:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 6969, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2282:13:46", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", - "typeString": "tuple(bool,uint256)" - } - }, - "functionReturnParameters": 6956, - "id": 6970, - "nodeType": "Return", - "src": "2275:20:46" - } - ] - } - ] - }, - "documentation": { - "id": 6946, - "nodeType": "StructuredDocumentation", - "src": "2007:110:46", - "text": " @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag." - }, - "id": 6973, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "tryMod", - "nameLocation": "2131:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6951, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6948, - "mutability": "mutable", - "name": "a", - "nameLocation": "2146:1:46", - "nodeType": "VariableDeclaration", - "scope": 6973, - "src": "2138:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6947, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2138:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6950, - "mutability": "mutable", - "name": "b", - "nameLocation": "2157:1:46", - "nodeType": "VariableDeclaration", - "scope": 6973, - "src": "2149:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6949, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2149:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2137:22:46" - }, - "returnParameters": { - "id": 6956, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6953, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6973, - "src": "2183:4:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6952, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2183:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6955, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6973, - "src": "2189:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6954, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2189:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2182:15:46" - }, - "scope": 7858, - "src": "2122:190:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6990, - "nodeType": "Block", - "src": "2449:37:46", - "statements": [ - { - "expression": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6985, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6983, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6976, - "src": "2466:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 6984, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6978, - "src": "2470:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2466:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 6987, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6978, - "src": "2478:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6988, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "2466:13:46", - "trueExpression": { - "id": 6986, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6976, - "src": "2474:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 6982, - "id": 6989, - "nodeType": "Return", - "src": "2459:20:46" - } - ] - }, - "documentation": { - "id": 6974, - "nodeType": "StructuredDocumentation", - "src": "2318:59:46", - "text": " @dev Returns the largest of two numbers." - }, - "id": 6991, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "max", - "nameLocation": "2391:3:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6979, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6976, - "mutability": "mutable", - "name": "a", - "nameLocation": "2403:1:46", - "nodeType": "VariableDeclaration", - "scope": 6991, - "src": "2395:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6975, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2395:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6978, - "mutability": "mutable", - "name": "b", - "nameLocation": "2414:1:46", - "nodeType": "VariableDeclaration", - "scope": 6991, - "src": "2406:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6977, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2406:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2394:22:46" - }, - "returnParameters": { - "id": 6982, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6981, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6991, - "src": "2440:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6980, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2440:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2439:9:46" - }, - "scope": 7858, - "src": "2382:104:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7008, - "nodeType": "Block", - "src": "2624:37:46", - "statements": [ - { - "expression": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7003, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7001, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6994, - "src": "2641:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 7002, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6996, - "src": "2645:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2641:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 7005, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6996, - "src": "2653:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7006, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "2641:13:46", - "trueExpression": { - "id": 7004, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6994, - "src": "2649:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7000, - "id": 7007, - "nodeType": "Return", - "src": "2634:20:46" - } - ] - }, - "documentation": { - "id": 6992, - "nodeType": "StructuredDocumentation", - "src": "2492:60:46", - "text": " @dev Returns the smallest of two numbers." - }, - "id": 7009, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "min", - "nameLocation": "2566:3:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6997, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6994, - "mutability": "mutable", - "name": "a", - "nameLocation": "2578:1:46", - "nodeType": "VariableDeclaration", - "scope": 7009, - "src": "2570:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6993, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2570:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6996, - "mutability": "mutable", - "name": "b", - "nameLocation": "2589:1:46", - "nodeType": "VariableDeclaration", - "scope": 7009, - "src": "2581:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6995, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2581:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2569:22:46" - }, - "returnParameters": { - "id": 7000, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6999, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7009, - "src": "2615:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6998, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2615:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2614:9:46" - }, - "scope": 7858, - "src": "2557:104:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7031, - "nodeType": "Block", - "src": "2845:82:46", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7029, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7021, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7019, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7012, - "src": "2900:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 7020, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7014, - "src": "2904:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2900:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7022, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2899:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7028, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7023, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7012, - "src": "2910:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "^", - "rightExpression": { - "id": 7024, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7014, - "src": "2914:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2910:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7026, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2909:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "hexValue": "32", - "id": 7027, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2919:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "2909:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2899:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7018, - "id": 7030, - "nodeType": "Return", - "src": "2892:28:46" - } - ] - }, - "documentation": { - "id": 7010, - "nodeType": "StructuredDocumentation", - "src": "2667:102:46", - "text": " @dev Returns the average of two numbers. The result is rounded towards\n zero." - }, - "id": 7032, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "average", - "nameLocation": "2783:7:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7015, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7012, - "mutability": "mutable", - "name": "a", - "nameLocation": "2799:1:46", - "nodeType": "VariableDeclaration", - "scope": 7032, - "src": "2791:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7011, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2791:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7014, - "mutability": "mutable", - "name": "b", - "nameLocation": "2810:1:46", - "nodeType": "VariableDeclaration", - "scope": 7032, - "src": "2802:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7013, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2802:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2790:22:46" - }, - "returnParameters": { - "id": 7018, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7017, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7032, - "src": "2836:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7016, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2836:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2835:9:46" - }, - "scope": 7858, - "src": "2774:153:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7065, - "nodeType": "Block", - "src": "3219:260:46", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7044, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7042, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7037, - "src": "3233:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 7043, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3238:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3233:6:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7050, - "nodeType": "IfStatement", - "src": "3229:127:46", - "trueBody": { - "id": 7049, - "nodeType": "Block", - "src": "3241:115:46", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7045, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7035, - "src": "3340:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7046, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7037, - "src": "3344:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3340:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7041, - "id": 7048, - "nodeType": "Return", - "src": "3333:12:46" - } - ] - } - }, - { - "expression": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7053, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7051, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7035, - "src": "3444:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 7052, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3449:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3444:6:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7062, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7060, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7057, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7055, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7035, - "src": "3458:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 7056, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3462:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3458:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7058, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3457:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7059, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7037, - "src": "3467:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3457:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 7061, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3471:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3457:15:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7063, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "3444:28:46", - "trueExpression": { - "hexValue": "30", - "id": 7054, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3453:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7041, - "id": 7064, - "nodeType": "Return", - "src": "3437:35:46" - } - ] - }, - "documentation": { - "id": 7033, - "nodeType": "StructuredDocumentation", - "src": "2933:210:46", - "text": " @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero." - }, - "id": 7066, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "ceilDiv", - "nameLocation": "3157:7:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7038, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7035, - "mutability": "mutable", - "name": "a", - "nameLocation": "3173:1:46", - "nodeType": "VariableDeclaration", - "scope": 7066, - "src": "3165:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7034, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3165:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7037, - "mutability": "mutable", - "name": "b", - "nameLocation": "3184:1:46", - "nodeType": "VariableDeclaration", - "scope": 7066, - "src": "3176:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7036, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3176:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3164:22:46" - }, - "returnParameters": { - "id": 7041, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7040, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7066, - "src": "3210:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7039, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3210:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3209:9:46" - }, - "scope": 7858, - "src": "3148:331:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7191, - "nodeType": "Block", - "src": "3901:4018:46", - "statements": [ - { - "id": 7190, - "nodeType": "UncheckedBlock", - "src": "3911:4002:46", - "statements": [ - { - "assignments": [ - 7079 - ], - "declarations": [ - { - "constant": false, - "id": 7079, - "mutability": "mutable", - "name": "prod0", - "nameLocation": "4240:5:46", - "nodeType": "VariableDeclaration", - "scope": 7190, - "src": "4232:13:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7078, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4232:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7083, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7082, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7080, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7069, - "src": "4248:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7081, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7071, - "src": "4252:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4248:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4232:21:46" - }, - { - "assignments": [ - 7085 - ], - "declarations": [ - { - "constant": false, - "id": 7085, - "mutability": "mutable", - "name": "prod1", - "nameLocation": "4320:5:46", - "nodeType": "VariableDeclaration", - "scope": 7190, - "src": "4312:13:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7084, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4312:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7086, - "nodeType": "VariableDeclarationStatement", - "src": "4312:13:46" - }, - { - "AST": { - "nativeSrc": "4392:122:46", - "nodeType": "YulBlock", - "src": "4392:122:46", - "statements": [ - { - "nativeSrc": "4410:30:46", - "nodeType": "YulVariableDeclaration", - "src": "4410:30:46", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "4427:1:46", - "nodeType": "YulIdentifier", - "src": "4427:1:46" - }, - { - "name": "y", - "nativeSrc": "4430:1:46", - "nodeType": "YulIdentifier", - "src": "4430:1:46" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4437:1:46", - "nodeType": "YulLiteral", - "src": "4437:1:46", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "4433:3:46", - "nodeType": "YulIdentifier", - "src": "4433:3:46" - }, - "nativeSrc": "4433:6:46", - "nodeType": "YulFunctionCall", - "src": "4433:6:46" - } - ], - "functionName": { - "name": "mulmod", - "nativeSrc": "4420:6:46", - "nodeType": "YulIdentifier", - "src": "4420:6:46" - }, - "nativeSrc": "4420:20:46", - "nodeType": "YulFunctionCall", - "src": "4420:20:46" - }, - "variables": [ - { - "name": "mm", - "nativeSrc": "4414:2:46", - "nodeType": "YulTypedName", - "src": "4414:2:46", - "type": "" - } - ] - }, - { - "nativeSrc": "4457:43:46", - "nodeType": "YulAssignment", - "src": "4457:43:46", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "mm", - "nativeSrc": "4474:2:46", - "nodeType": "YulIdentifier", - "src": "4474:2:46" - }, - { - "name": "prod0", - "nativeSrc": "4478:5:46", - "nodeType": "YulIdentifier", - "src": "4478:5:46" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "4470:3:46", - "nodeType": "YulIdentifier", - "src": "4470:3:46" - }, - "nativeSrc": "4470:14:46", - "nodeType": "YulFunctionCall", - "src": "4470:14:46" - }, - { - "arguments": [ - { - "name": "mm", - "nativeSrc": "4489:2:46", - "nodeType": "YulIdentifier", - "src": "4489:2:46" - }, - { - "name": "prod0", - "nativeSrc": "4493:5:46", - "nodeType": "YulIdentifier", - "src": "4493:5:46" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "4486:2:46", - "nodeType": "YulIdentifier", - "src": "4486:2:46" - }, - "nativeSrc": "4486:13:46", - "nodeType": "YulFunctionCall", - "src": "4486:13:46" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "4466:3:46", - "nodeType": "YulIdentifier", - "src": "4466:3:46" - }, - "nativeSrc": "4466:34:46", - "nodeType": "YulFunctionCall", - "src": "4466:34:46" - }, - "variableNames": [ - { - "name": "prod1", - "nativeSrc": "4457:5:46", - "nodeType": "YulIdentifier", - "src": "4457:5:46" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 7079, - "isOffset": false, - "isSlot": false, - "src": "4478:5:46", - "valueSize": 1 - }, - { - "declaration": 7079, - "isOffset": false, - "isSlot": false, - "src": "4493:5:46", - "valueSize": 1 - }, - { - "declaration": 7085, - "isOffset": false, - "isSlot": false, - "src": "4457:5:46", - "valueSize": 1 - }, - { - "declaration": 7069, - "isOffset": false, - "isSlot": false, - "src": "4427:1:46", - "valueSize": 1 - }, - { - "declaration": 7071, - "isOffset": false, - "isSlot": false, - "src": "4430:1:46", - "valueSize": 1 - } - ], - "id": 7087, - "nodeType": "InlineAssembly", - "src": "4383:131:46" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7090, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7088, - "name": "prod1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7085, - "src": "4595:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 7089, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4604:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4595:10:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7096, - "nodeType": "IfStatement", - "src": "4591:368:46", - "trueBody": { - "id": 7095, - "nodeType": "Block", - "src": "4607:352:46", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7093, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7091, - "name": "prod0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7079, - "src": "4925:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7092, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "4933:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4925:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7077, - "id": 7094, - "nodeType": "Return", - "src": "4918:26:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7099, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7097, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "5065:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 7098, - "name": "prod1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7085, - "src": "5080:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5065:20:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7104, - "nodeType": "IfStatement", - "src": "5061:88:46", - "trueBody": { - "id": 7103, - "nodeType": "Block", - "src": "5087:62:46", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 7100, - "name": "MathOverflowedMulDiv", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6810, - "src": "5112:20:46", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 7101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5112:22:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 7102, - "nodeType": "RevertStatement", - "src": "5105:29:46" - } - ] - } - }, - { - "assignments": [ - 7106 - ], - "declarations": [ - { - "constant": false, - "id": 7106, - "mutability": "mutable", - "name": "remainder", - "nameLocation": "5412:9:46", - "nodeType": "VariableDeclaration", - "scope": 7190, - "src": "5404:17:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7105, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5404:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7107, - "nodeType": "VariableDeclarationStatement", - "src": "5404:17:46" - }, - { - "AST": { - "nativeSrc": "5444:291:46", - "nodeType": "YulBlock", - "src": "5444:291:46", - "statements": [ - { - "nativeSrc": "5513:38:46", - "nodeType": "YulAssignment", - "src": "5513:38:46", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "5533:1:46", - "nodeType": "YulIdentifier", - "src": "5533:1:46" - }, - { - "name": "y", - "nativeSrc": "5536:1:46", - "nodeType": "YulIdentifier", - "src": "5536:1:46" - }, - { - "name": "denominator", - "nativeSrc": "5539:11:46", - "nodeType": "YulIdentifier", - "src": "5539:11:46" - } - ], - "functionName": { - "name": "mulmod", - "nativeSrc": "5526:6:46", - "nodeType": "YulIdentifier", - "src": "5526:6:46" - }, - "nativeSrc": "5526:25:46", - "nodeType": "YulFunctionCall", - "src": "5526:25:46" - }, - "variableNames": [ - { - "name": "remainder", - "nativeSrc": "5513:9:46", - "nodeType": "YulIdentifier", - "src": "5513:9:46" - } - ] - }, - { - "nativeSrc": "5633:41:46", - "nodeType": "YulAssignment", - "src": "5633:41:46", - "value": { - "arguments": [ - { - "name": "prod1", - "nativeSrc": "5646:5:46", - "nodeType": "YulIdentifier", - "src": "5646:5:46" - }, - { - "arguments": [ - { - "name": "remainder", - "nativeSrc": "5656:9:46", - "nodeType": "YulIdentifier", - "src": "5656:9:46" - }, - { - "name": "prod0", - "nativeSrc": "5667:5:46", - "nodeType": "YulIdentifier", - "src": "5667:5:46" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "5653:2:46", - "nodeType": "YulIdentifier", - "src": "5653:2:46" - }, - "nativeSrc": "5653:20:46", - "nodeType": "YulFunctionCall", - "src": "5653:20:46" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "5642:3:46", - "nodeType": "YulIdentifier", - "src": "5642:3:46" - }, - "nativeSrc": "5642:32:46", - "nodeType": "YulFunctionCall", - "src": "5642:32:46" - }, - "variableNames": [ - { - "name": "prod1", - "nativeSrc": "5633:5:46", - "nodeType": "YulIdentifier", - "src": "5633:5:46" - } - ] - }, - { - "nativeSrc": "5691:30:46", - "nodeType": "YulAssignment", - "src": "5691:30:46", - "value": { - "arguments": [ - { - "name": "prod0", - "nativeSrc": "5704:5:46", - "nodeType": "YulIdentifier", - "src": "5704:5:46" - }, - { - "name": "remainder", - "nativeSrc": "5711:9:46", - "nodeType": "YulIdentifier", - "src": "5711:9:46" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "5700:3:46", - "nodeType": "YulIdentifier", - "src": "5700:3:46" - }, - "nativeSrc": "5700:21:46", - "nodeType": "YulFunctionCall", - "src": "5700:21:46" - }, - "variableNames": [ - { - "name": "prod0", - "nativeSrc": "5691:5:46", - "nodeType": "YulIdentifier", - "src": "5691:5:46" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 7073, - "isOffset": false, - "isSlot": false, - "src": "5539:11:46", - "valueSize": 1 - }, - { - "declaration": 7079, - "isOffset": false, - "isSlot": false, - "src": "5667:5:46", - "valueSize": 1 - }, - { - "declaration": 7079, - "isOffset": false, - "isSlot": false, - "src": "5691:5:46", - "valueSize": 1 - }, - { - "declaration": 7079, - "isOffset": false, - "isSlot": false, - "src": "5704:5:46", - "valueSize": 1 - }, - { - "declaration": 7085, - "isOffset": false, - "isSlot": false, - "src": "5633:5:46", - "valueSize": 1 - }, - { - "declaration": 7085, - "isOffset": false, - "isSlot": false, - "src": "5646:5:46", - "valueSize": 1 - }, - { - "declaration": 7106, - "isOffset": false, - "isSlot": false, - "src": "5513:9:46", - "valueSize": 1 - }, - { - "declaration": 7106, - "isOffset": false, - "isSlot": false, - "src": "5656:9:46", - "valueSize": 1 - }, - { - "declaration": 7106, - "isOffset": false, - "isSlot": false, - "src": "5711:9:46", - "valueSize": 1 - }, - { - "declaration": 7069, - "isOffset": false, - "isSlot": false, - "src": "5533:1:46", - "valueSize": 1 - }, - { - "declaration": 7071, - "isOffset": false, - "isSlot": false, - "src": "5536:1:46", - "valueSize": 1 - } - ], - "id": 7108, - "nodeType": "InlineAssembly", - "src": "5435:300:46" - }, - { - "assignments": [ - 7110 - ], - "declarations": [ - { - "constant": false, - "id": 7110, - "mutability": "mutable", - "name": "twos", - "nameLocation": "5947:4:46", - "nodeType": "VariableDeclaration", - "scope": 7190, - "src": "5939:12:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7109, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5939:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7117, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7116, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7111, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "5954:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7114, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "30", - "id": 7112, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5969:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 7113, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "5973:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5969:15:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7115, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "5968:17:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5954:31:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5939:46:46" - }, - { - "AST": { - "nativeSrc": "6008:362:46", - "nodeType": "YulBlock", - "src": "6008:362:46", - "statements": [ - { - "nativeSrc": "6073:37:46", - "nodeType": "YulAssignment", - "src": "6073:37:46", - "value": { - "arguments": [ - { - "name": "denominator", - "nativeSrc": "6092:11:46", - "nodeType": "YulIdentifier", - "src": "6092:11:46" - }, - { - "name": "twos", - "nativeSrc": "6105:4:46", - "nodeType": "YulIdentifier", - "src": "6105:4:46" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "6088:3:46", - "nodeType": "YulIdentifier", - "src": "6088:3:46" - }, - "nativeSrc": "6088:22:46", - "nodeType": "YulFunctionCall", - "src": "6088:22:46" - }, - "variableNames": [ - { - "name": "denominator", - "nativeSrc": "6073:11:46", - "nodeType": "YulIdentifier", - "src": "6073:11:46" - } - ] - }, - { - "nativeSrc": "6177:25:46", - "nodeType": "YulAssignment", - "src": "6177:25:46", - "value": { - "arguments": [ - { - "name": "prod0", - "nativeSrc": "6190:5:46", - "nodeType": "YulIdentifier", - "src": "6190:5:46" - }, - { - "name": "twos", - "nativeSrc": "6197:4:46", - "nodeType": "YulIdentifier", - "src": "6197:4:46" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "6186:3:46", - "nodeType": "YulIdentifier", - "src": "6186:3:46" - }, - "nativeSrc": "6186:16:46", - "nodeType": "YulFunctionCall", - "src": "6186:16:46" - }, - "variableNames": [ - { - "name": "prod0", - "nativeSrc": "6177:5:46", - "nodeType": "YulIdentifier", - "src": "6177:5:46" - } - ] - }, - { - "nativeSrc": "6317:39:46", - "nodeType": "YulAssignment", - "src": "6317:39:46", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6337:1:46", - "nodeType": "YulLiteral", - "src": "6337:1:46", - "type": "", - "value": "0" - }, - { - "name": "twos", - "nativeSrc": "6340:4:46", - "nodeType": "YulIdentifier", - "src": "6340:4:46" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "6333:3:46", - "nodeType": "YulIdentifier", - "src": "6333:3:46" - }, - "nativeSrc": "6333:12:46", - "nodeType": "YulFunctionCall", - "src": "6333:12:46" - }, - { - "name": "twos", - "nativeSrc": "6347:4:46", - "nodeType": "YulIdentifier", - "src": "6347:4:46" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "6329:3:46", - "nodeType": "YulIdentifier", - "src": "6329:3:46" - }, - "nativeSrc": "6329:23:46", - "nodeType": "YulFunctionCall", - "src": "6329:23:46" - }, - { - "kind": "number", - "nativeSrc": "6354:1:46", - "nodeType": "YulLiteral", - "src": "6354:1:46", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6325:3:46", - "nodeType": "YulIdentifier", - "src": "6325:3:46" - }, - "nativeSrc": "6325:31:46", - "nodeType": "YulFunctionCall", - "src": "6325:31:46" - }, - "variableNames": [ - { - "name": "twos", - "nativeSrc": "6317:4:46", - "nodeType": "YulIdentifier", - "src": "6317:4:46" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 7073, - "isOffset": false, - "isSlot": false, - "src": "6073:11:46", - "valueSize": 1 - }, - { - "declaration": 7073, - "isOffset": false, - "isSlot": false, - "src": "6092:11:46", - "valueSize": 1 - }, - { - "declaration": 7079, - "isOffset": false, - "isSlot": false, - "src": "6177:5:46", - "valueSize": 1 - }, - { - "declaration": 7079, - "isOffset": false, - "isSlot": false, - "src": "6190:5:46", - "valueSize": 1 - }, - { - "declaration": 7110, - "isOffset": false, - "isSlot": false, - "src": "6105:4:46", - "valueSize": 1 - }, - { - "declaration": 7110, - "isOffset": false, - "isSlot": false, - "src": "6197:4:46", - "valueSize": 1 - }, - { - "declaration": 7110, - "isOffset": false, - "isSlot": false, - "src": "6317:4:46", - "valueSize": 1 - }, - { - "declaration": 7110, - "isOffset": false, - "isSlot": false, - "src": "6340:4:46", - "valueSize": 1 - }, - { - "declaration": 7110, - "isOffset": false, - "isSlot": false, - "src": "6347:4:46", - "valueSize": 1 - } - ], - "id": 7118, - "nodeType": "InlineAssembly", - "src": "5999:371:46" - }, - { - "expression": { - "id": 7123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7119, - "name": "prod0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7079, - "src": "6436:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "|=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7122, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7120, - "name": "prod1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7085, - "src": "6445:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7121, - "name": "twos", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7110, - "src": "6453:4:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6445:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6436:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7124, - "nodeType": "ExpressionStatement", - "src": "6436:21:46" - }, - { - "assignments": [ - 7126 - ], - "declarations": [ - { - "constant": false, - "id": 7126, - "mutability": "mutable", - "name": "inverse", - "nameLocation": "6783:7:46", - "nodeType": "VariableDeclaration", - "scope": 7190, - "src": "6775:15:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7125, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6775:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7133, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7129, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "33", - "id": 7127, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6794:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7128, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "6798:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6794:15:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7130, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "6793:17:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "^", - "rightExpression": { - "hexValue": "32", - "id": 7131, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6813:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "6793:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6775:39:46" - }, - { - "expression": { - "id": 7140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7134, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7031:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "*=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 7135, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7042:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7138, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7136, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "7046:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7137, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7060:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7046:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7042:25:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7031:36:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7141, - "nodeType": "ExpressionStatement", - "src": "7031:36:46" - }, - { - "expression": { - "id": 7148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7142, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7100:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "*=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 7143, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7111:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7146, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7144, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "7115:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7145, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7129:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7115:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7111:25:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7100:36:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7149, - "nodeType": "ExpressionStatement", - "src": "7100:36:46" - }, - { - "expression": { - "id": 7156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7150, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7170:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "*=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 7151, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7181:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7154, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7152, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "7185:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7153, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7199:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7185:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7181:25:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7170:36:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7157, - "nodeType": "ExpressionStatement", - "src": "7170:36:46" - }, - { - "expression": { - "id": 7164, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7158, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7240:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "*=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 7159, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7251:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7160, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "7255:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7161, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7269:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7255:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7251:25:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7240:36:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7165, - "nodeType": "ExpressionStatement", - "src": "7240:36:46" - }, - { - "expression": { - "id": 7172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7166, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7310:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "*=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 7167, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7321:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7170, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7168, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "7325:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7169, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7339:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7325:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7321:25:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7310:36:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7173, - "nodeType": "ExpressionStatement", - "src": "7310:36:46" - }, - { - "expression": { - "id": 7180, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7174, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7381:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "*=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 7175, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7392:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7178, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7176, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "7396:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7177, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7410:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7396:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7392:25:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7381:36:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7181, - "nodeType": "ExpressionStatement", - "src": "7381:36:46" - }, - { - "expression": { - "id": 7186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7182, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7076, - "src": "7851:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7185, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7183, - "name": "prod0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7079, - "src": "7860:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7184, - "name": "inverse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "7868:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7860:15:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7851:24:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7187, - "nodeType": "ExpressionStatement", - "src": "7851:24:46" - }, - { - "expression": { - "id": 7188, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7076, - "src": "7896:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7077, - "id": 7189, - "nodeType": "Return", - "src": "7889:13:46" - } - ] - } - ] - }, - "documentation": { - "id": 7067, - "nodeType": "StructuredDocumentation", - "src": "3485:313:46", - "text": " @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license." - }, - "id": 7192, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mulDiv", - "nameLocation": "3812:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7074, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7069, - "mutability": "mutable", - "name": "x", - "nameLocation": "3827:1:46", - "nodeType": "VariableDeclaration", - "scope": 7192, - "src": "3819:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7068, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3819:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7071, - "mutability": "mutable", - "name": "y", - "nameLocation": "3838:1:46", - "nodeType": "VariableDeclaration", - "scope": 7192, - "src": "3830:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7070, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3830:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7073, - "mutability": "mutable", - "name": "denominator", - "nameLocation": "3849:11:46", - "nodeType": "VariableDeclaration", - "scope": 7192, - "src": "3841:19:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7072, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3841:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3818:43:46" - }, - "returnParameters": { - "id": 7077, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7076, - "mutability": "mutable", - "name": "result", - "nameLocation": "3893:6:46", - "nodeType": "VariableDeclaration", - "scope": 7192, - "src": "3885:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7075, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3885:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3884:16:46" - }, - "scope": 7858, - "src": "3803:4116:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7234, - "nodeType": "Block", - "src": "8161:192:46", - "statements": [ - { - "assignments": [ - 7208 - ], - "declarations": [ - { - "constant": false, - "id": 7208, - "mutability": "mutable", - "name": "result", - "nameLocation": "8179:6:46", - "nodeType": "VariableDeclaration", - "scope": 7234, - "src": "8171:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7207, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8171:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7214, - "initialValue": { - "arguments": [ - { - "id": 7210, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7195, - "src": "8195:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 7211, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7197, - "src": "8198:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 7212, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7199, - "src": "8201:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7209, - "name": "mulDiv", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 7192, - 7235 - ], - "referencedDeclaration": 7192, - "src": "8188:6:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" - } - }, - "id": 7213, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8188:25:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8171:42:46" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 7225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7216, - "name": "rounding", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7202, - "src": "8244:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - ], - "id": 7215, - "name": "unsignedRoundsUp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7857, - "src": "8227:16:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", - "typeString": "function (enum Math.Rounding) pure returns (bool)" - } - }, - "id": 7217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8227:26:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7219, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7195, - "src": "8264:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 7220, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7197, - "src": "8267:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 7221, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7199, - "src": "8270:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7218, - "name": "mulmod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -16, - "src": "8257:6:46", - "typeDescriptions": { - "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" - } - }, - "id": 7222, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8257:25:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7223, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8285:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8257:29:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "8227:59:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7231, - "nodeType": "IfStatement", - "src": "8223:101:46", - "trueBody": { - "id": 7230, - "nodeType": "Block", - "src": "8288:36:46", - "statements": [ - { - "expression": { - "id": 7228, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7226, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7208, - "src": "8302:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "31", - "id": 7227, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8312:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "8302:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7229, - "nodeType": "ExpressionStatement", - "src": "8302:11:46" - } - ] - } - }, - { - "expression": { - "id": 7232, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7208, - "src": "8340:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7206, - "id": 7233, - "nodeType": "Return", - "src": "8333:13:46" - } - ] - }, - "documentation": { - "id": 7193, - "nodeType": "StructuredDocumentation", - "src": "7925:121:46", - "text": " @notice Calculates x * y / denominator with full precision, following the selected rounding direction." - }, - "id": 7235, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mulDiv", - "nameLocation": "8060:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7203, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7195, - "mutability": "mutable", - "name": "x", - "nameLocation": "8075:1:46", - "nodeType": "VariableDeclaration", - "scope": 7235, - "src": "8067:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7194, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8067:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7197, - "mutability": "mutable", - "name": "y", - "nameLocation": "8086:1:46", - "nodeType": "VariableDeclaration", - "scope": 7235, - "src": "8078:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7196, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8078:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7199, - "mutability": "mutable", - "name": "denominator", - "nameLocation": "8097:11:46", - "nodeType": "VariableDeclaration", - "scope": 7235, - "src": "8089:19:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7198, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8089:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7202, - "mutability": "mutable", - "name": "rounding", - "nameLocation": "8119:8:46", - "nodeType": "VariableDeclaration", - "scope": 7235, - "src": "8110:17:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - }, - "typeName": { - "id": 7201, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7200, - "name": "Rounding", - "nameLocations": [ - "8110:8:46" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6815, - "src": "8110:8:46" - }, - "referencedDeclaration": 6815, - "src": "8110:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - }, - "visibility": "internal" - } - ], - "src": "8066:62:46" - }, - "returnParameters": { - "id": 7206, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7205, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7235, - "src": "8152:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7204, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8152:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8151:9:46" - }, - "scope": 7858, - "src": "8051:302:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7346, - "nodeType": "Block", - "src": "8644:1585:46", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7245, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7243, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "8658:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 7244, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8663:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8658:6:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7249, - "nodeType": "IfStatement", - "src": "8654:45:46", - "trueBody": { - "id": 7248, - "nodeType": "Block", - "src": "8666:33:46", - "statements": [ - { - "expression": { - "hexValue": "30", - "id": 7246, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8687:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 7242, - "id": 7247, - "nodeType": "Return", - "src": "8680:8:46" - } - ] - } - }, - { - "assignments": [ - 7251 - ], - "declarations": [ - { - "constant": false, - "id": 7251, - "mutability": "mutable", - "name": "result", - "nameLocation": "9386:6:46", - "nodeType": "VariableDeclaration", - "scope": 7346, - "src": "9378:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7250, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9378:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7260, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7259, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 7252, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9395:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7254, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "9406:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7253, - "name": "log2", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 7514, - 7549 - ], - "referencedDeclaration": 7514, - "src": "9401:4:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 7255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9401:7:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7256, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9412:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "9401:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7258, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9400:14:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9395:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9378:36:46" - }, - { - "id": 7345, - "nodeType": "UncheckedBlock", - "src": "9815:408:46", - "statements": [ - { - "expression": { - "id": 7270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7261, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9839:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7269, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7266, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7262, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9849:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7265, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7263, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "9858:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7264, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9862:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9858:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9849:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7267, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9848:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7268, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9873:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "9848:26:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9839:35:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7271, - "nodeType": "ExpressionStatement", - "src": "9839:35:46" - }, - { - "expression": { - "id": 7281, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7272, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9888:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7280, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7277, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7273, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9898:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7274, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "9907:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7275, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9911:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9907:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9898:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7278, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9897:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7279, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9922:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "9897:26:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9888:35:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7282, - "nodeType": "ExpressionStatement", - "src": "9888:35:46" - }, - { - "expression": { - "id": 7292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7283, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9937:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7288, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7284, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9947:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7287, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7285, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "9956:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7286, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9960:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9956:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9947:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7289, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9946:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7290, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9971:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "9946:26:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9937:35:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7293, - "nodeType": "ExpressionStatement", - "src": "9937:35:46" - }, - { - "expression": { - "id": 7303, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7294, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9986:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7302, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7299, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7295, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "9996:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7298, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7296, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "10005:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7297, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10009:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10005:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9996:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7300, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9995:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7301, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10020:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "9995:26:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9986:35:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7304, - "nodeType": "ExpressionStatement", - "src": "9986:35:46" - }, - { - "expression": { - "id": 7314, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7305, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10035:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7313, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7310, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7306, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10045:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7309, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7307, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "10054:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7308, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10058:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10054:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10045:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7311, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10044:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7312, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10069:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "10044:26:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10035:35:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7315, - "nodeType": "ExpressionStatement", - "src": "10035:35:46" - }, - { - "expression": { - "id": 7325, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7316, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10084:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7324, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7317, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10094:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7320, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7318, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "10103:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7319, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10107:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10103:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10094:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7322, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10093:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7323, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10118:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "10093:26:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10084:35:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7326, - "nodeType": "ExpressionStatement", - "src": "10084:35:46" - }, - { - "expression": { - "id": 7336, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7327, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10133:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7332, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7328, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10143:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7331, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7329, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "10152:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7330, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10156:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10152:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10143:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7333, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10142:21:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7334, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10167:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "10142:26:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10133:35:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7337, - "nodeType": "ExpressionStatement", - "src": "10133:35:46" - }, - { - "expression": { - "arguments": [ - { - "id": 7339, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10193:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7340, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7238, - "src": "10201:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7341, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7251, - "src": "10205:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10201:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7338, - "name": "min", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7009, - "src": "10189:3:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 7343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10189:23:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7242, - "id": 7344, - "nodeType": "Return", - "src": "10182:30:46" - } - ] - } - ] - }, - "documentation": { - "id": 7236, - "nodeType": "StructuredDocumentation", - "src": "8359:223:46", - "text": " @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11)." - }, - "id": 7347, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sqrt", - "nameLocation": "8596:4:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7239, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7238, - "mutability": "mutable", - "name": "a", - "nameLocation": "8609:1:46", - "nodeType": "VariableDeclaration", - "scope": 7347, - "src": "8601:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7237, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8601:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8600:11:46" - }, - "returnParameters": { - "id": 7242, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7241, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7347, - "src": "8635:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7240, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8635:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8634:9:46" - }, - "scope": 7858, - "src": "8587:1642:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7381, - "nodeType": "Block", - "src": "10405:164:46", - "statements": [ - { - "id": 7380, - "nodeType": "UncheckedBlock", - "src": "10415:148:46", - "statements": [ - { - "assignments": [ - 7359 - ], - "declarations": [ - { - "constant": false, - "id": 7359, - "mutability": "mutable", - "name": "result", - "nameLocation": "10447:6:46", - "nodeType": "VariableDeclaration", - "scope": 7380, - "src": "10439:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7358, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10439:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7363, - "initialValue": { - "arguments": [ - { - "id": 7361, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7350, - "src": "10461:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7360, - "name": "sqrt", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 7347, - 7382 - ], - "referencedDeclaration": 7347, - "src": "10456:4:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 7362, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10456:7:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10439:24:46" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7378, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7364, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7359, - "src": "10484:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "components": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 7373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7366, - "name": "rounding", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7353, - "src": "10511:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - ], - "id": 7365, - "name": "unsignedRoundsUp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7857, - "src": "10494:16:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", - "typeString": "function (enum Math.Rounding) pure returns (bool)" - } - }, - "id": 7367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10494:26:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7372, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7368, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7359, - "src": "10524:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7369, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7359, - "src": "10533:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10524:15:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 7371, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7350, - "src": "10542:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10524:19:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "10494:49:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 7375, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10550:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 7376, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "10494:57:46", - "trueExpression": { - "hexValue": "31", - "id": 7374, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10546:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "id": 7377, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10493:59:46", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "10484:68:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7357, - "id": 7379, - "nodeType": "Return", - "src": "10477:75:46" - } - ] - } - ] - }, - "documentation": { - "id": 7348, - "nodeType": "StructuredDocumentation", - "src": "10235:89:46", - "text": " @notice Calculates sqrt(a), following the selected rounding direction." - }, - "id": 7382, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sqrt", - "nameLocation": "10338:4:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7354, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7350, - "mutability": "mutable", - "name": "a", - "nameLocation": "10351:1:46", - "nodeType": "VariableDeclaration", - "scope": 7382, - "src": "10343:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7349, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10343:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7353, - "mutability": "mutable", - "name": "rounding", - "nameLocation": "10363:8:46", - "nodeType": "VariableDeclaration", - "scope": 7382, - "src": "10354:17:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - }, - "typeName": { - "id": 7352, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7351, - "name": "Rounding", - "nameLocations": [ - "10354:8:46" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6815, - "src": "10354:8:46" - }, - "referencedDeclaration": 6815, - "src": "10354:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - }, - "visibility": "internal" - } - ], - "src": "10342:30:46" - }, - "returnParameters": { - "id": 7357, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7356, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7382, - "src": "10396:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7355, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10396:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10395:9:46" - }, - "scope": 7858, - "src": "10329:240:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7513, - "nodeType": "Block", - "src": "10760:922:46", - "statements": [ - { - "assignments": [ - 7391 - ], - "declarations": [ - { - "constant": false, - "id": 7391, - "mutability": "mutable", - "name": "result", - "nameLocation": "10778:6:46", - "nodeType": "VariableDeclaration", - "scope": 7513, - "src": "10770:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7390, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10770:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7393, - "initialValue": { - "hexValue": "30", - "id": 7392, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10787:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "10770:18:46" - }, - { - "id": 7510, - "nodeType": "UncheckedBlock", - "src": "10798:855:46", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7394, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "10826:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "313238", - "id": 7395, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10835:3:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_128_by_1", - "typeString": "int_const 128" - }, - "value": "128" - }, - "src": "10826:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7397, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10841:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "10826:16:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7408, - "nodeType": "IfStatement", - "src": "10822:99:46", - "trueBody": { - "id": 7407, - "nodeType": "Block", - "src": "10844:77:46", - "statements": [ - { - "expression": { - "id": 7401, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7399, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "10862:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "313238", - "id": 7400, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10872:3:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_128_by_1", - "typeString": "int_const 128" - }, - "value": "128" - }, - "src": "10862:13:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7402, - "nodeType": "ExpressionStatement", - "src": "10862:13:46" - }, - { - "expression": { - "id": 7405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7403, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7391, - "src": "10893:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "313238", - "id": 7404, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10903:3:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_128_by_1", - "typeString": "int_const 128" - }, - "value": "128" - }, - "src": "10893:13:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7406, - "nodeType": "ExpressionStatement", - "src": "10893:13:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7413, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7411, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7409, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "10938:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "3634", - "id": 7410, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10947:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_64_by_1", - "typeString": "int_const 64" - }, - "value": "64" - }, - "src": "10938:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7412, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10952:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "10938:15:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7423, - "nodeType": "IfStatement", - "src": "10934:96:46", - "trueBody": { - "id": 7422, - "nodeType": "Block", - "src": "10955:75:46", - "statements": [ - { - "expression": { - "id": 7416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7414, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "10973:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "3634", - "id": 7415, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10983:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_64_by_1", - "typeString": "int_const 64" - }, - "value": "64" - }, - "src": "10973:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7417, - "nodeType": "ExpressionStatement", - "src": "10973:12:46" - }, - { - "expression": { - "id": 7420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7418, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7391, - "src": "11003:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "3634", - "id": 7419, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11013:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_64_by_1", - "typeString": "int_const 64" - }, - "value": "64" - }, - "src": "11003:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7421, - "nodeType": "ExpressionStatement", - "src": "11003:12:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7428, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7424, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11047:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "3332", - "id": 7425, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11056:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "11047:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7427, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11061:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11047:15:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7438, - "nodeType": "IfStatement", - "src": "11043:96:46", - "trueBody": { - "id": 7437, - "nodeType": "Block", - "src": "11064:75:46", - "statements": [ - { - "expression": { - "id": 7431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7429, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11082:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "3332", - "id": 7430, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11092:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "11082:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7432, - "nodeType": "ExpressionStatement", - "src": "11082:12:46" - }, - { - "expression": { - "id": 7435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7433, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7391, - "src": "11112:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "3332", - "id": 7434, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11122:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "11112:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7436, - "nodeType": "ExpressionStatement", - "src": "11112:12:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7441, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7439, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11156:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "3136", - "id": 7440, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11165:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "11156:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7442, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11170:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11156:15:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7453, - "nodeType": "IfStatement", - "src": "11152:96:46", - "trueBody": { - "id": 7452, - "nodeType": "Block", - "src": "11173:75:46", - "statements": [ - { - "expression": { - "id": 7446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7444, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11191:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "3136", - "id": 7445, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11201:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "11191:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7447, - "nodeType": "ExpressionStatement", - "src": "11191:12:46" - }, - { - "expression": { - "id": 7450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7448, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7391, - "src": "11221:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "3136", - "id": 7449, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11231:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "11221:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7451, - "nodeType": "ExpressionStatement", - "src": "11221:12:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7454, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11265:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "38", - "id": 7455, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11274:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "11265:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7457, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11278:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11265:14:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7468, - "nodeType": "IfStatement", - "src": "11261:93:46", - "trueBody": { - "id": 7467, - "nodeType": "Block", - "src": "11281:73:46", - "statements": [ - { - "expression": { - "id": 7461, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7459, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11299:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "38", - "id": 7460, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11309:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "11299:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7462, - "nodeType": "ExpressionStatement", - "src": "11299:11:46" - }, - { - "expression": { - "id": 7465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7463, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7391, - "src": "11328:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "38", - "id": 7464, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11338:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "11328:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7466, - "nodeType": "ExpressionStatement", - "src": "11328:11:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7473, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7471, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7469, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11371:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "34", - "id": 7470, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11380:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "11371:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7472, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11384:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11371:14:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7483, - "nodeType": "IfStatement", - "src": "11367:93:46", - "trueBody": { - "id": 7482, - "nodeType": "Block", - "src": "11387:73:46", - "statements": [ - { - "expression": { - "id": 7476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7474, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11405:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "34", - "id": 7475, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11415:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "11405:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7477, - "nodeType": "ExpressionStatement", - "src": "11405:11:46" - }, - { - "expression": { - "id": 7480, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7478, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7391, - "src": "11434:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "34", - "id": 7479, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11444:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "11434:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7481, - "nodeType": "ExpressionStatement", - "src": "11434:11:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7486, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7484, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11477:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "32", - "id": 7485, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11486:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "11477:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7487, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11490:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11477:14:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7498, - "nodeType": "IfStatement", - "src": "11473:93:46", - "trueBody": { - "id": 7497, - "nodeType": "Block", - "src": "11493:73:46", - "statements": [ - { - "expression": { - "id": 7491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7489, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11511:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "32", - "id": 7490, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11521:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "11511:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7492, - "nodeType": "ExpressionStatement", - "src": "11511:11:46" - }, - { - "expression": { - "id": 7495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7493, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7391, - "src": "11540:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "32", - "id": 7494, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11550:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "11540:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7496, - "nodeType": "ExpressionStatement", - "src": "11540:11:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7503, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7499, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7385, - "src": "11583:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7500, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11592:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "11583:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7502, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11596:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11583:14:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7509, - "nodeType": "IfStatement", - "src": "11579:64:46", - "trueBody": { - "id": 7508, - "nodeType": "Block", - "src": "11599:44:46", - "statements": [ - { - "expression": { - "id": 7506, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7504, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7391, - "src": "11617:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "31", - "id": 7505, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11627:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "11617:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7507, - "nodeType": "ExpressionStatement", - "src": "11617:11:46" - } - ] - } - } - ] - }, - { - "expression": { - "id": 7511, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7391, - "src": "11669:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7389, - "id": 7512, - "nodeType": "Return", - "src": "11662:13:46" - } - ] - }, - "documentation": { - "id": 7383, - "nodeType": "StructuredDocumentation", - "src": "10575:119:46", - "text": " @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0." - }, - "id": 7514, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "log2", - "nameLocation": "10708:4:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7386, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7385, - "mutability": "mutable", - "name": "value", - "nameLocation": "10721:5:46", - "nodeType": "VariableDeclaration", - "scope": 7514, - "src": "10713:13:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7384, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10713:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10712:15:46" - }, - "returnParameters": { - "id": 7389, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7388, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7514, - "src": "10751:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7387, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10751:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10750:9:46" - }, - "scope": 7858, - "src": "10699:983:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7548, - "nodeType": "Block", - "src": "11915:168:46", - "statements": [ - { - "id": 7547, - "nodeType": "UncheckedBlock", - "src": "11925:152:46", - "statements": [ - { - "assignments": [ - 7526 - ], - "declarations": [ - { - "constant": false, - "id": 7526, - "mutability": "mutable", - "name": "result", - "nameLocation": "11957:6:46", - "nodeType": "VariableDeclaration", - "scope": 7547, - "src": "11949:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7525, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11949:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7530, - "initialValue": { - "arguments": [ - { - "id": 7528, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7517, - "src": "11971:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7527, - "name": "log2", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 7514, - 7549 - ], - "referencedDeclaration": 7514, - "src": "11966:4:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 7529, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11966:11:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11949:28:46" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7531, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7526, - "src": "11998:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "components": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 7540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7533, - "name": "rounding", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7520, - "src": "12025:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - ], - "id": 7532, - "name": "unsignedRoundsUp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7857, - "src": "12008:16:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", - "typeString": "function (enum Math.Rounding) pure returns (bool)" - } - }, - "id": 7534, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12008:26:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7537, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 7535, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12038:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "id": 7536, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7526, - "src": "12043:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12038:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 7538, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7517, - "src": "12052:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12038:19:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "12008:49:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 7542, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12064:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 7543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "12008:57:46", - "trueExpression": { - "hexValue": "31", - "id": 7541, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12060:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "id": 7544, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12007:59:46", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "11998:68:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7524, - "id": 7546, - "nodeType": "Return", - "src": "11991:75:46" - } - ] - } - ] - }, - "documentation": { - "id": 7515, - "nodeType": "StructuredDocumentation", - "src": "11688:142:46", - "text": " @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0." - }, - "id": 7549, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "log2", - "nameLocation": "11844:4:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7521, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7517, - "mutability": "mutable", - "name": "value", - "nameLocation": "11857:5:46", - "nodeType": "VariableDeclaration", - "scope": 7549, - "src": "11849:13:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7516, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11849:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7520, - "mutability": "mutable", - "name": "rounding", - "nameLocation": "11873:8:46", - "nodeType": "VariableDeclaration", - "scope": 7549, - "src": "11864:17:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - }, - "typeName": { - "id": 7519, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7518, - "name": "Rounding", - "nameLocations": [ - "11864:8:46" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6815, - "src": "11864:8:46" - }, - "referencedDeclaration": 6815, - "src": "11864:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - }, - "visibility": "internal" - } - ], - "src": "11848:34:46" - }, - "returnParameters": { - "id": 7524, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7523, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7549, - "src": "11906:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7522, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11906:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11905:9:46" - }, - "scope": 7858, - "src": "11835:248:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7677, - "nodeType": "Block", - "src": "12276:854:46", - "statements": [ - { - "assignments": [ - 7558 - ], - "declarations": [ - { - "constant": false, - "id": 7558, - "mutability": "mutable", - "name": "result", - "nameLocation": "12294:6:46", - "nodeType": "VariableDeclaration", - "scope": 7677, - "src": "12286:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7557, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12286:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7560, - "initialValue": { - "hexValue": "30", - "id": 7559, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12303:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "12286:18:46" - }, - { - "id": 7674, - "nodeType": "UncheckedBlock", - "src": "12314:787:46", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7561, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12342:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1", - "typeString": "int_const 1000...(57 digits omitted)...0000" - }, - "id": 7564, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7562, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12351:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "3634", - "id": 7563, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12357:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_64_by_1", - "typeString": "int_const 64" - }, - "value": "64" - }, - "src": "12351:8:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1", - "typeString": "int_const 1000...(57 digits omitted)...0000" - } - }, - "src": "12342:17:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7577, - "nodeType": "IfStatement", - "src": "12338:103:46", - "trueBody": { - "id": 7576, - "nodeType": "Block", - "src": "12361:80:46", - "statements": [ - { - "expression": { - "id": 7570, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7566, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12379:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "/=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1", - "typeString": "int_const 1000...(57 digits omitted)...0000" - }, - "id": 7569, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7567, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12388:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "3634", - "id": 7568, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12394:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_64_by_1", - "typeString": "int_const 64" - }, - "value": "64" - }, - "src": "12388:8:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1", - "typeString": "int_const 1000...(57 digits omitted)...0000" - } - }, - "src": "12379:17:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7571, - "nodeType": "ExpressionStatement", - "src": "12379:17:46" - }, - { - "expression": { - "id": 7574, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7572, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7558, - "src": "12414:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "3634", - "id": 7573, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12424:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_64_by_1", - "typeString": "int_const 64" - }, - "value": "64" - }, - "src": "12414:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7575, - "nodeType": "ExpressionStatement", - "src": "12414:12:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7578, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12458:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1", - "typeString": "int_const 1000...(25 digits omitted)...0000" - }, - "id": 7581, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7579, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12467:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "3332", - "id": 7580, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12473:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "12467:8:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1", - "typeString": "int_const 1000...(25 digits omitted)...0000" - } - }, - "src": "12458:17:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7594, - "nodeType": "IfStatement", - "src": "12454:103:46", - "trueBody": { - "id": 7593, - "nodeType": "Block", - "src": "12477:80:46", - "statements": [ - { - "expression": { - "id": 7587, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7583, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12495:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "/=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1", - "typeString": "int_const 1000...(25 digits omitted)...0000" - }, - "id": 7586, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7584, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12504:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "3332", - "id": 7585, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12510:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "12504:8:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1", - "typeString": "int_const 1000...(25 digits omitted)...0000" - } - }, - "src": "12495:17:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7588, - "nodeType": "ExpressionStatement", - "src": "12495:17:46" - }, - { - "expression": { - "id": 7591, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7589, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7558, - "src": "12530:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "3332", - "id": 7590, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12540:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "12530:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7592, - "nodeType": "ExpressionStatement", - "src": "12530:12:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7595, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12574:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_rational_10000000000000000_by_1", - "typeString": "int_const 10000000000000000" - }, - "id": 7598, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7596, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12583:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "3136", - "id": 7597, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12589:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "12583:8:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000000000000000_by_1", - "typeString": "int_const 10000000000000000" - } - }, - "src": "12574:17:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7611, - "nodeType": "IfStatement", - "src": "12570:103:46", - "trueBody": { - "id": 7610, - "nodeType": "Block", - "src": "12593:80:46", - "statements": [ - { - "expression": { - "id": 7604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7600, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12611:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "/=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_rational_10000000000000000_by_1", - "typeString": "int_const 10000000000000000" - }, - "id": 7603, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7601, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12620:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "3136", - "id": 7602, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12626:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "12620:8:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000000000000000_by_1", - "typeString": "int_const 10000000000000000" - } - }, - "src": "12611:17:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7605, - "nodeType": "ExpressionStatement", - "src": "12611:17:46" - }, - { - "expression": { - "id": 7608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7606, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7558, - "src": "12646:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "3136", - "id": 7607, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12656:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "12646:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7609, - "nodeType": "ExpressionStatement", - "src": "12646:12:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7612, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12690:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_rational_100000000_by_1", - "typeString": "int_const 100000000" - }, - "id": 7615, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7613, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12699:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "38", - "id": 7614, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12705:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "12699:7:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_100000000_by_1", - "typeString": "int_const 100000000" - } - }, - "src": "12690:16:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7628, - "nodeType": "IfStatement", - "src": "12686:100:46", - "trueBody": { - "id": 7627, - "nodeType": "Block", - "src": "12708:78:46", - "statements": [ - { - "expression": { - "id": 7621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7617, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12726:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "/=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_rational_100000000_by_1", - "typeString": "int_const 100000000" - }, - "id": 7620, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12735:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "38", - "id": 7619, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12741:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "12735:7:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_100000000_by_1", - "typeString": "int_const 100000000" - } - }, - "src": "12726:16:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7622, - "nodeType": "ExpressionStatement", - "src": "12726:16:46" - }, - { - "expression": { - "id": 7625, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7623, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7558, - "src": "12760:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "38", - "id": 7624, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12770:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "12760:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7626, - "nodeType": "ExpressionStatement", - "src": "12760:11:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7629, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12803:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - }, - "id": 7632, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7630, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12812:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "34", - "id": 7631, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12818:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "12812:7:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - } - }, - "src": "12803:16:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7645, - "nodeType": "IfStatement", - "src": "12799:100:46", - "trueBody": { - "id": 7644, - "nodeType": "Block", - "src": "12821:78:46", - "statements": [ - { - "expression": { - "id": 7638, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7634, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12839:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "/=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - }, - "id": 7637, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7635, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12848:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "34", - "id": 7636, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12854:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "12848:7:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - } - }, - "src": "12839:16:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7639, - "nodeType": "ExpressionStatement", - "src": "12839:16:46" - }, - { - "expression": { - "id": 7642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7640, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7558, - "src": "12873:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "34", - "id": 7641, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12883:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "12873:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7643, - "nodeType": "ExpressionStatement", - "src": "12873:11:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7646, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12916:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - }, - "id": 7649, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7647, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12925:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "32", - "id": 7648, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12931:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "12925:7:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - } - }, - "src": "12916:16:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7662, - "nodeType": "IfStatement", - "src": "12912:100:46", - "trueBody": { - "id": 7661, - "nodeType": "Block", - "src": "12934:78:46", - "statements": [ - { - "expression": { - "id": 7655, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7651, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "12952:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "/=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - }, - "id": 7654, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7652, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12961:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "32", - "id": 7653, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12967:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "12961:7:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - } - }, - "src": "12952:16:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7656, - "nodeType": "ExpressionStatement", - "src": "12952:16:46" - }, - { - "expression": { - "id": 7659, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7657, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7558, - "src": "12986:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "32", - "id": 7658, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12996:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "12986:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7660, - "nodeType": "ExpressionStatement", - "src": "12986:11:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7667, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7663, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7552, - "src": "13029:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "id": 7666, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7664, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13038:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "31", - "id": 7665, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13044:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "13038:7:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - } - }, - "src": "13029:16:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7673, - "nodeType": "IfStatement", - "src": "13025:66:46", - "trueBody": { - "id": 7672, - "nodeType": "Block", - "src": "13047:44:46", - "statements": [ - { - "expression": { - "id": 7670, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7668, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7558, - "src": "13065:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "31", - "id": 7669, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13075:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "13065:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7671, - "nodeType": "ExpressionStatement", - "src": "13065:11:46" - } - ] - } - } - ] - }, - { - "expression": { - "id": 7675, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7558, - "src": "13117:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7556, - "id": 7676, - "nodeType": "Return", - "src": "13110:13:46" - } - ] - }, - "documentation": { - "id": 7550, - "nodeType": "StructuredDocumentation", - "src": "12089:120:46", - "text": " @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0." - }, - "id": 7678, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "log10", - "nameLocation": "12223:5:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7553, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7552, - "mutability": "mutable", - "name": "value", - "nameLocation": "12237:5:46", - "nodeType": "VariableDeclaration", - "scope": 7678, - "src": "12229:13:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7551, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12229:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12228:15:46" - }, - "returnParameters": { - "id": 7556, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7555, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7678, - "src": "12267:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7554, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12267:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12266:9:46" - }, - "scope": 7858, - "src": "12214:916:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7712, - "nodeType": "Block", - "src": "13365:170:46", - "statements": [ - { - "id": 7711, - "nodeType": "UncheckedBlock", - "src": "13375:154:46", - "statements": [ - { - "assignments": [ - 7690 - ], - "declarations": [ - { - "constant": false, - "id": 7690, - "mutability": "mutable", - "name": "result", - "nameLocation": "13407:6:46", - "nodeType": "VariableDeclaration", - "scope": 7711, - "src": "13399:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7689, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13399:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7694, - "initialValue": { - "arguments": [ - { - "id": 7692, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7681, - "src": "13422:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7691, - "name": "log10", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 7678, - 7713 - ], - "referencedDeclaration": 7678, - "src": "13416:5:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 7693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13416:12:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13399:29:46" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7695, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7690, - "src": "13449:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "components": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 7704, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7697, - "name": "rounding", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7684, - "src": "13476:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - ], - "id": 7696, - "name": "unsignedRoundsUp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7857, - "src": "13459:16:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", - "typeString": "function (enum Math.Rounding) pure returns (bool)" - } - }, - "id": 7698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13459:26:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7701, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7699, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13489:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "id": 7700, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7690, - "src": "13495:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13489:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 7702, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7681, - "src": "13504:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13489:20:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "13459:50:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 7706, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13516:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 7707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "13459:58:46", - "trueExpression": { - "hexValue": "31", - "id": 7705, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13512:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "id": 7708, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "13458:60:46", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "13449:69:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7688, - "id": 7710, - "nodeType": "Return", - "src": "13442:76:46" - } - ] - } - ] - }, - "documentation": { - "id": 7679, - "nodeType": "StructuredDocumentation", - "src": "13136:143:46", - "text": " @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0." - }, - "id": 7713, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "log10", - "nameLocation": "13293:5:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7685, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7681, - "mutability": "mutable", - "name": "value", - "nameLocation": "13307:5:46", - "nodeType": "VariableDeclaration", - "scope": 7713, - "src": "13299:13:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7680, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13299:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7684, - "mutability": "mutable", - "name": "rounding", - "nameLocation": "13323:8:46", - "nodeType": "VariableDeclaration", - "scope": 7713, - "src": "13314:17:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - }, - "typeName": { - "id": 7683, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7682, - "name": "Rounding", - "nameLocations": [ - "13314:8:46" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6815, - "src": "13314:8:46" - }, - "referencedDeclaration": 6815, - "src": "13314:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - }, - "visibility": "internal" - } - ], - "src": "13298:34:46" - }, - "returnParameters": { - "id": 7688, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7687, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7713, - "src": "13356:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7686, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13356:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13355:9:46" - }, - "scope": 7858, - "src": "13284:251:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7799, - "nodeType": "Block", - "src": "13855:600:46", - "statements": [ - { - "assignments": [ - 7722 - ], - "declarations": [ - { - "constant": false, - "id": 7722, - "mutability": "mutable", - "name": "result", - "nameLocation": "13873:6:46", - "nodeType": "VariableDeclaration", - "scope": 7799, - "src": "13865:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7721, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13865:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7724, - "initialValue": { - "hexValue": "30", - "id": 7723, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13882:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "13865:18:46" - }, - { - "id": 7796, - "nodeType": "UncheckedBlock", - "src": "13893:533:46", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7729, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7727, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7725, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7716, - "src": "13921:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "313238", - "id": 7726, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13930:3:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_128_by_1", - "typeString": "int_const 128" - }, - "value": "128" - }, - "src": "13921:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7728, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13936:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "13921:16:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7739, - "nodeType": "IfStatement", - "src": "13917:98:46", - "trueBody": { - "id": 7738, - "nodeType": "Block", - "src": "13939:76:46", - "statements": [ - { - "expression": { - "id": 7732, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7730, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7716, - "src": "13957:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "313238", - "id": 7731, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13967:3:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_128_by_1", - "typeString": "int_const 128" - }, - "value": "128" - }, - "src": "13957:13:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7733, - "nodeType": "ExpressionStatement", - "src": "13957:13:46" - }, - { - "expression": { - "id": 7736, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7734, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7722, - "src": "13988:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "3136", - "id": 7735, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13998:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "13988:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7737, - "nodeType": "ExpressionStatement", - "src": "13988:12:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7744, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7742, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7740, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7716, - "src": "14032:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "3634", - "id": 7741, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14041:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_64_by_1", - "typeString": "int_const 64" - }, - "value": "64" - }, - "src": "14032:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7743, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14046:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "14032:15:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7754, - "nodeType": "IfStatement", - "src": "14028:95:46", - "trueBody": { - "id": 7753, - "nodeType": "Block", - "src": "14049:74:46", - "statements": [ - { - "expression": { - "id": 7747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7745, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7716, - "src": "14067:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "3634", - "id": 7746, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14077:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_64_by_1", - "typeString": "int_const 64" - }, - "value": "64" - }, - "src": "14067:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7748, - "nodeType": "ExpressionStatement", - "src": "14067:12:46" - }, - { - "expression": { - "id": 7751, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7749, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7722, - "src": "14097:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "38", - "id": 7750, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14107:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "14097:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7752, - "nodeType": "ExpressionStatement", - "src": "14097:11:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7759, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7757, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7755, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7716, - "src": "14140:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "3332", - "id": 7756, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14149:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "14140:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7758, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14154:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "14140:15:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7769, - "nodeType": "IfStatement", - "src": "14136:95:46", - "trueBody": { - "id": 7768, - "nodeType": "Block", - "src": "14157:74:46", - "statements": [ - { - "expression": { - "id": 7762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7760, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7716, - "src": "14175:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "3332", - "id": 7761, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14185:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "14175:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7763, - "nodeType": "ExpressionStatement", - "src": "14175:12:46" - }, - { - "expression": { - "id": 7766, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7764, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7722, - "src": "14205:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "34", - "id": 7765, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14215:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "14205:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7767, - "nodeType": "ExpressionStatement", - "src": "14205:11:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7774, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7770, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7716, - "src": "14248:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "3136", - "id": 7771, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14257:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "14248:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7773, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14262:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "14248:15:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7784, - "nodeType": "IfStatement", - "src": "14244:95:46", - "trueBody": { - "id": 7783, - "nodeType": "Block", - "src": "14265:74:46", - "statements": [ - { - "expression": { - "id": 7777, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7775, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7716, - "src": "14283:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": ">>=", - "rightHandSide": { - "hexValue": "3136", - "id": 7776, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14293:2:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_16_by_1", - "typeString": "int_const 16" - }, - "value": "16" - }, - "src": "14283:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7778, - "nodeType": "ExpressionStatement", - "src": "14283:12:46" - }, - { - "expression": { - "id": 7781, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7779, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7722, - "src": "14313:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "32", - "id": 7780, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14323:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "14313:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7782, - "nodeType": "ExpressionStatement", - "src": "14313:11:46" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7789, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7787, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7785, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7716, - "src": "14356:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "38", - "id": 7786, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14365:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "14356:10:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7788, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14369:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "14356:14:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7795, - "nodeType": "IfStatement", - "src": "14352:64:46", - "trueBody": { - "id": 7794, - "nodeType": "Block", - "src": "14372:44:46", - "statements": [ - { - "expression": { - "id": 7792, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7790, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7722, - "src": "14390:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "hexValue": "31", - "id": 7791, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14400:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "14390:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7793, - "nodeType": "ExpressionStatement", - "src": "14390:11:46" - } - ] - } - } - ] - }, - { - "expression": { - "id": 7797, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7722, - "src": "14442:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7720, - "id": 7798, - "nodeType": "Return", - "src": "14435:13:46" - } - ] - }, - "documentation": { - "id": 7714, - "nodeType": "StructuredDocumentation", - "src": "13541:246:46", - "text": " @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string." - }, - "id": 7800, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "log256", - "nameLocation": "13801:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7717, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7716, - "mutability": "mutable", - "name": "value", - "nameLocation": "13816:5:46", - "nodeType": "VariableDeclaration", - "scope": 7800, - "src": "13808:13:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7715, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13808:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13807:15:46" - }, - "returnParameters": { - "id": 7720, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7719, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7800, - "src": "13846:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7718, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13846:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13845:9:46" - }, - "scope": 7858, - "src": "13792:663:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7837, - "nodeType": "Block", - "src": "14692:177:46", - "statements": [ - { - "id": 7836, - "nodeType": "UncheckedBlock", - "src": "14702:161:46", - "statements": [ - { - "assignments": [ - 7812 - ], - "declarations": [ - { - "constant": false, - "id": 7812, - "mutability": "mutable", - "name": "result", - "nameLocation": "14734:6:46", - "nodeType": "VariableDeclaration", - "scope": 7836, - "src": "14726:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7811, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14726:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7816, - "initialValue": { - "arguments": [ - { - "id": 7814, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7803, - "src": "14750:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7813, - "name": "log256", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 7800, - 7838 - ], - "referencedDeclaration": 7800, - "src": "14743:6:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 7815, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14743:13:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "14726:30:46" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7834, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7817, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7812, - "src": "14777:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "components": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 7829, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7819, - "name": "rounding", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7806, - "src": "14804:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - ], - "id": 7818, - "name": "unsignedRoundsUp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7857, - "src": "14787:16:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6815_$returns$_t_bool_$", - "typeString": "function (enum Math.Rounding) pure returns (bool)" - } - }, - "id": 7820, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14787:26:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7826, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 7821, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14817:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7824, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7822, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7812, - "src": "14823:6:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "hexValue": "33", - "id": 7823, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14833:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "14823:11:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7825, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "14822:13:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "14817:18:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 7827, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7803, - "src": "14838:5:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "14817:26:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "14787:56:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 7831, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14850:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 7832, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "14787:64:46", - "trueExpression": { - "hexValue": "31", - "id": 7830, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14846:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "id": 7833, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "14786:66:46", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "14777:75:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7810, - "id": 7835, - "nodeType": "Return", - "src": "14770:82:46" - } - ] - } - ] - }, - "documentation": { - "id": 7801, - "nodeType": "StructuredDocumentation", - "src": "14461:144:46", - "text": " @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0." - }, - "id": 7838, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "log256", - "nameLocation": "14619:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7807, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7803, - "mutability": "mutable", - "name": "value", - "nameLocation": "14634:5:46", - "nodeType": "VariableDeclaration", - "scope": 7838, - "src": "14626:13:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7802, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14626:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7806, - "mutability": "mutable", - "name": "rounding", - "nameLocation": "14650:8:46", - "nodeType": "VariableDeclaration", - "scope": 7838, - "src": "14641:17:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - }, - "typeName": { - "id": 7805, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7804, - "name": "Rounding", - "nameLocations": [ - "14641:8:46" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6815, - "src": "14641:8:46" - }, - "referencedDeclaration": 6815, - "src": "14641:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - }, - "visibility": "internal" - } - ], - "src": "14625:34:46" - }, - "returnParameters": { - "id": 7810, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7809, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7838, - "src": "14683:7:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7808, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14683:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "14682:9:46" - }, - "scope": 7858, - "src": "14610:259:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7856, - "nodeType": "Block", - "src": "15067:48:46", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 7854, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 7852, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7849, - "name": "rounding", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7842, - "src": "15090:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - ], - "id": 7848, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "15084:5:46", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 7847, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "15084:5:46", - "typeDescriptions": {} - } - }, - "id": 7850, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15084:15:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "hexValue": "32", - "id": 7851, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15102:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "15084:19:46", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 7853, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15107:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "15084:24:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 7846, - "id": 7855, - "nodeType": "Return", - "src": "15077:31:46" - } - ] - }, - "documentation": { - "id": 7839, - "nodeType": "StructuredDocumentation", - "src": "14875:113:46", - "text": " @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers." - }, - "id": 7857, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "unsignedRoundsUp", - "nameLocation": "15002:16:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7843, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7842, - "mutability": "mutable", - "name": "rounding", - "nameLocation": "15028:8:46", - "nodeType": "VariableDeclaration", - "scope": 7857, - "src": "15019:17:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - }, - "typeName": { - "id": 7841, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7840, - "name": "Rounding", - "nameLocations": [ - "15019:8:46" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 6815, - "src": "15019:8:46" - }, - "referencedDeclaration": 6815, - "src": "15019:8:46", - "typeDescriptions": { - "typeIdentifier": "t_enum$_Rounding_$6815", - "typeString": "enum Math.Rounding" - } - }, - "visibility": "internal" - } - ], - "src": "15018:19:46" - }, - "returnParameters": { - "id": 7846, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7845, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7857, - "src": "15061:4:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7844, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "15061:4:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "15060:6:46" - }, - "scope": 7858, - "src": "14993:122:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 7859, - "src": "203:14914:46", - "usedErrors": [ - 6810 - ], - "usedEvents": [] - } - ], - "src": "103:15015:46" - }, - "id": 46 - }, - "@openzeppelin/contracts/utils/math/SignedMath.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol", - "exportedSymbols": { - "SignedMath": [ - 7963 - ] - }, - "id": 7964, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 7860, - "literals": [ - "solidity", - "^", - "0.8", - ".20" - ], - "nodeType": "PragmaDirective", - "src": "109:24:47" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "SignedMath", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 7861, - "nodeType": "StructuredDocumentation", - "src": "135:80:47", - "text": " @dev Standard signed math utilities missing in the Solidity language." - }, - "fullyImplemented": true, - "id": 7963, - "linearizedBaseContracts": [ - 7963 - ], - "name": "SignedMath", - "nameLocation": "224:10:47", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 7878, - "nodeType": "Block", - "src": "376:37:47", - "statements": [ - { - "expression": { - "condition": { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7873, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7871, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7864, - "src": "393:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 7872, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7866, - "src": "397:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "393:5:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 7875, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7866, - "src": "405:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "id": 7876, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "393:13:47", - "trueExpression": { - "id": 7874, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7864, - "src": "401:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "functionReturnParameters": 7870, - "id": 7877, - "nodeType": "Return", - "src": "386:20:47" - } - ] - }, - "documentation": { - "id": 7862, - "nodeType": "StructuredDocumentation", - "src": "241:66:47", - "text": " @dev Returns the largest of two signed numbers." - }, - "id": 7879, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "max", - "nameLocation": "321:3:47", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7867, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7864, - "mutability": "mutable", - "name": "a", - "nameLocation": "332:1:47", - "nodeType": "VariableDeclaration", - "scope": 7879, - "src": "325:8:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7863, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "325:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7866, - "mutability": "mutable", - "name": "b", - "nameLocation": "342:1:47", - "nodeType": "VariableDeclaration", - "scope": 7879, - "src": "335:8:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7865, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "335:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "324:20:47" - }, - "returnParameters": { - "id": 7870, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7869, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7879, - "src": "368:6:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7868, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "368:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "367:8:47" - }, - "scope": 7963, - "src": "312:101:47", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7896, - "nodeType": "Block", - "src": "555:37:47", - "statements": [ - { - "expression": { - "condition": { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7891, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7889, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7882, - "src": "572:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 7890, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7884, - "src": "576:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "572:5:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 7893, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7884, - "src": "584:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "id": 7894, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "572:13:47", - "trueExpression": { - "id": 7892, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7882, - "src": "580:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "functionReturnParameters": 7888, - "id": 7895, - "nodeType": "Return", - "src": "565:20:47" - } - ] - }, - "documentation": { - "id": 7880, - "nodeType": "StructuredDocumentation", - "src": "419:67:47", - "text": " @dev Returns the smallest of two signed numbers." - }, - "id": 7897, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "min", - "nameLocation": "500:3:47", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7885, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7882, - "mutability": "mutable", - "name": "a", - "nameLocation": "511:1:47", - "nodeType": "VariableDeclaration", - "scope": 7897, - "src": "504:8:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7881, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "504:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7884, - "mutability": "mutable", - "name": "b", - "nameLocation": "521:1:47", - "nodeType": "VariableDeclaration", - "scope": 7897, - "src": "514:8:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7883, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "514:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "503:20:47" - }, - "returnParameters": { - "id": 7888, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7887, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7897, - "src": "547:6:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7886, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "547:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "546:8:47" - }, - "scope": 7963, - "src": "491:101:47", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7940, - "nodeType": "Block", - "src": "797:162:47", - "statements": [ - { - "assignments": [ - 7908 - ], - "declarations": [ - { - "constant": false, - "id": 7908, - "mutability": "mutable", - "name": "x", - "nameLocation": "866:1:47", - "nodeType": "VariableDeclaration", - "scope": 7940, - "src": "859:8:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7907, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "859:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "id": 7921, - "initialValue": { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7920, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7911, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7909, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7900, - "src": "871:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 7910, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7902, - "src": "875:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "871:5:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "id": 7912, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "870:7:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7918, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7915, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7913, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7900, - "src": "882:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "^", - "rightExpression": { - "id": 7914, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7902, - "src": "886:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "882:5:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "id": 7916, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "881:7:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 7917, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "892:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "881:12:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "id": 7919, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "880:14:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "870:24:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "859:35:47" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7938, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7922, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7908, - "src": "911:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7936, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7930, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7927, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7908, - "src": "931:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 7926, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "923:7:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 7925, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "923:7:47", - "typeDescriptions": {} - } - }, - "id": 7928, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "923:10:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "323535", - "id": 7929, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "937:3:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_255_by_1", - "typeString": "int_const 255" - }, - "value": "255" - }, - "src": "923:17:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7924, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "916:6:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int256_$", - "typeString": "type(int256)" - }, - "typeName": { - "id": 7923, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "916:6:47", - "typeDescriptions": {} - } - }, - "id": 7931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "916:25:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7934, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7932, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7900, - "src": "945:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "^", - "rightExpression": { - "id": 7933, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7902, - "src": "949:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "945:5:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "id": 7935, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "944:7:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "916:35:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "id": 7937, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "915:37:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "911:41:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "functionReturnParameters": 7906, - "id": 7939, - "nodeType": "Return", - "src": "904:48:47" - } - ] - }, - "documentation": { - "id": 7898, - "nodeType": "StructuredDocumentation", - "src": "598:126:47", - "text": " @dev Returns the average of two signed numbers without overflow.\n The result is rounded towards zero." - }, - "id": 7941, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "average", - "nameLocation": "738:7:47", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7903, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7900, - "mutability": "mutable", - "name": "a", - "nameLocation": "753:1:47", - "nodeType": "VariableDeclaration", - "scope": 7941, - "src": "746:8:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7899, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "746:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7902, - "mutability": "mutable", - "name": "b", - "nameLocation": "763:1:47", - "nodeType": "VariableDeclaration", - "scope": 7941, - "src": "756:8:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7901, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "756:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "745:20:47" - }, - "returnParameters": { - "id": 7906, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7905, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7941, - "src": "789:6:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7904, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "789:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "788:8:47" - }, - "scope": 7963, - "src": "729:230:47", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7961, - "nodeType": "Block", - "src": "1103:158:47", - "statements": [ - { - "id": 7960, - "nodeType": "UncheckedBlock", - "src": "1113:142:47", - "statements": [ - { - "expression": { - "arguments": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 7953, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7951, - "name": "n", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7944, - "src": "1228:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "hexValue": "30", - "id": 7952, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1233:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1228:6:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 7956, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "-", - "prefix": true, - "src": "1241:2:47", - "subExpression": { - "id": 7955, - "name": "n", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7944, - "src": "1242:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "id": 7957, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "1228:15:47", - "trueExpression": { - "id": 7954, - "name": "n", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7944, - "src": "1237:1:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 7950, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1220:7:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 7949, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1220:7:47", - "typeDescriptions": {} - } - }, - "id": 7958, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1220:24:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7948, - "id": 7959, - "nodeType": "Return", - "src": "1213:31:47" - } - ] - } - ] - }, - "documentation": { - "id": 7942, - "nodeType": "StructuredDocumentation", - "src": "965:78:47", - "text": " @dev Returns the absolute unsigned value of a signed value." - }, - "id": 7962, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "abs", - "nameLocation": "1057:3:47", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7945, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7944, - "mutability": "mutable", - "name": "n", - "nameLocation": "1068:1:47", - "nodeType": "VariableDeclaration", - "scope": 7962, - "src": "1061:8:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 7943, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "1061:6:47", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "1060:10:47" - }, - "returnParameters": { - "id": 7948, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7947, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7962, - "src": "1094:7:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7946, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1094:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1093:9:47" - }, - "scope": 7963, - "src": "1048:213:47", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 7964, - "src": "216:1047:47", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "109:1155:47" - }, - "id": 47 - }, - "contracts/DisputeManager.sol": { - "ast": { - "absolutePath": "contracts/DisputeManager.sol", - "exportedSymbols": { - "Allocation": [ - 11674 - ], - "Attestation": [ - 11920 - ], - "AttestationManager": [ - 13226 - ], - "DisputeManager": [ - 9438 - ], - "DisputeManagerV1Storage": [ - 9470 - ], - "GraphDirectory": [ - 4653 - ], - "IDisputeManager": [ - 11057 - ], - "IGraphToken": [ - 518 - ], - "IHorizonStaking": [ - 2235 - ], - "ISubgraphService": [ - 11280 - ], - "Initializable": [ - 5102 - ], - "Math": [ - 7858 - ], - "MathUtils": [ - 4168 - ], - "OwnableUpgradeable": [ - 4848 - ], - "PPMMath": [ - 4262 - ], - "TokenUtils": [ - 600 - ] - }, - "id": 9439, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 7965, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:48" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "file": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "id": 7967, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 519, - "src": "70:87:48", - "symbolAliases": [ - { - "foreign": { - "id": 7966, - "name": "IGraphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 518, - "src": "79:11:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", - "file": "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol", - "id": 7969, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 2236, - "src": "158:98:48", - "symbolAliases": [ - { - "foreign": { - "id": 7968, - "name": "IHorizonStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2235, - "src": "167:15:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/IDisputeManager.sol", - "file": "./interfaces/IDisputeManager.sol", - "id": 7971, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 11058, - "src": "257:67:48", - "symbolAliases": [ - { - "foreign": { - "id": 7970, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "266:15:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/ISubgraphService.sol", - "file": "./interfaces/ISubgraphService.sol", - "id": 7973, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 11281, - "src": "325:69:48", - "symbolAliases": [ - { - "foreign": { - "id": 7972, - "name": "ISubgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11280, - "src": "334:16:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol", - "file": "@openzeppelin/contracts/utils/math/Math.sol", - "id": 7975, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 7859, - "src": "396:67:48", - "symbolAliases": [ - { - "foreign": { - "id": 7974, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7858, - "src": "405:4:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", - "file": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", - "id": 7977, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 601, - "src": "464:85:48", - "symbolAliases": [ - { - "foreign": { - "id": 7976, - "name": "TokenUtils", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 600, - "src": "473:10:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", - "file": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", - "id": 7979, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 4263, - "src": "550:81:48", - "symbolAliases": [ - { - "foreign": { - "id": 7978, - "name": "PPMMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4262, - "src": "559:7:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/MathUtils.sol", - "file": "@graphprotocol/horizon/contracts/libraries/MathUtils.sol", - "id": 7981, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 4169, - "src": "632:85:48", - "symbolAliases": [ - { - "foreign": { - "id": 7980, - "name": "MathUtils", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4168, - "src": "641:9:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/Allocation.sol", - "file": "./libraries/Allocation.sol", - "id": 7983, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 11675, - "src": "718:56:48", - "symbolAliases": [ - { - "foreign": { - "id": 7982, - "name": "Allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11674, - "src": "727:10:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/Attestation.sol", - "file": "./libraries/Attestation.sol", - "id": 7985, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 11921, - "src": "775:58:48", - "symbolAliases": [ - { - "foreign": { - "id": 7984, - "name": "Attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11920, - "src": "784:11:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", - "id": 7987, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 4849, - "src": "835:103:48", - "symbolAliases": [ - { - "foreign": { - "id": 7986, - "name": "OwnableUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4848, - "src": "844:18:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "id": 7989, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 5103, - "src": "939:98:48", - "symbolAliases": [ - { - "foreign": { - "id": 7988, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5102, - "src": "948:13:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", - "file": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", - "id": 7991, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 4654, - "src": "1038:95:48", - "symbolAliases": [ - { - "foreign": { - "id": 7990, - "name": "GraphDirectory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4653, - "src": "1047:14:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/DisputeManagerStorage.sol", - "file": "./DisputeManagerStorage.sol", - "id": 7993, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 9471, - "src": "1134:70:48", - "symbolAliases": [ - { - "foreign": { - "id": 7992, - "name": "DisputeManagerV1Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9470, - "src": "1143:23:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/utilities/AttestationManager.sol", - "file": "./utilities/AttestationManager.sol", - "id": 7995, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9439, - "sourceUnit": 13227, - "src": "1205:72:48", - "symbolAliases": [ - { - "foreign": { - "id": 7994, - "name": "AttestationManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13226, - "src": "1214:18:48", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 7997, - "name": "Initializable", - "nameLocations": [ - "2460:13:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5102, - "src": "2460:13:48" - }, - "id": 7998, - "nodeType": "InheritanceSpecifier", - "src": "2460:13:48" - }, - { - "baseName": { - "id": 7999, - "name": "OwnableUpgradeable", - "nameLocations": [ - "2479:18:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4848, - "src": "2479:18:48" - }, - "id": 8000, - "nodeType": "InheritanceSpecifier", - "src": "2479:18:48" - }, - { - "baseName": { - "id": 8001, - "name": "GraphDirectory", - "nameLocations": [ - "2503:14:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4653, - "src": "2503:14:48" - }, - "id": 8002, - "nodeType": "InheritanceSpecifier", - "src": "2503:14:48" - }, - { - "baseName": { - "id": 8003, - "name": "AttestationManager", - "nameLocations": [ - "2523:18:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13226, - "src": "2523:18:48" - }, - "id": 8004, - "nodeType": "InheritanceSpecifier", - "src": "2523:18:48" - }, - { - "baseName": { - "id": 8005, - "name": "DisputeManagerV1Storage", - "nameLocations": [ - "2547:23:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 9470, - "src": "2547:23:48" - }, - "id": 8006, - "nodeType": "InheritanceSpecifier", - "src": "2547:23:48" - }, - { - "baseName": { - "id": 8007, - "name": "IDisputeManager", - "nameLocations": [ - "2576:15:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11057, - "src": "2576:15:48" - }, - "id": 8008, - "nodeType": "InheritanceSpecifier", - "src": "2576:15:48" - } - ], - "canonicalName": "DisputeManager", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 7996, - "nodeType": "StructuredDocumentation", - "src": "1279:1149:48", - "text": " @title DisputeManager\n @notice Provides a way to permissionlessly create disputes for incorrect behavior in the Subgraph Service.\n There are two types of disputes that can be created: Query disputes and Indexing disputes.\n Query Disputes:\n Graph nodes receive queries and return responses with signed receipts called attestations.\n An attestation can be disputed if the consumer thinks the query response was invalid.\n Indexers use the derived private key for an allocation to sign attestations.\n Indexing Disputes:\n Indexers present a Proof of Indexing (POI) when they close allocations to prove\n they were indexing a subgraph. The Staking contract emits that proof with the format\n keccak256(indexer.address, POI).\n Any fisherman can dispute the validity of a POI by submitting a dispute to this contract\n along with a deposit.\n Arbitration:\n Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated\n to a EOA or DAO.\n @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program." - }, - "fullyImplemented": true, - "id": 9438, - "linearizedBaseContracts": [ - 9438, - 11057, - 9470, - 13226, - 13237, - 4653, - 4848, - 5148, - 5102 - ], - "name": "DisputeManager", - "nameLocation": "2438:14:48", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 8012, - "libraryName": { - "id": 8009, - "name": "TokenUtils", - "nameLocations": [ - "2604:10:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 600, - "src": "2604:10:48" - }, - "nodeType": "UsingForDirective", - "src": "2598:33:48", - "typeName": { - "id": 8011, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8010, - "name": "IGraphToken", - "nameLocations": [ - "2619:11:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 518, - "src": "2619:11:48" - }, - "referencedDeclaration": 518, - "src": "2619:11:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - } - }, - { - "global": false, - "id": 8015, - "libraryName": { - "id": 8013, - "name": "PPMMath", - "nameLocations": [ - "2642:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4262, - "src": "2642:7:48" - }, - "nodeType": "UsingForDirective", - "src": "2636:26:48", - "typeName": { - "id": 8014, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2654:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "constant": true, - "functionSelector": "17337b46", - "id": 8018, - "mutability": "constant", - "name": "MAX_FISHERMAN_REWARD_CUT", - "nameLocation": "2768:24:48", - "nodeType": "VariableDeclaration", - "scope": 9438, - "src": "2745:56:48", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 8016, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2745:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": { - "hexValue": "353030303030", - "id": 8017, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2795:6:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_500000_by_1", - "typeString": "int_const 500000" - }, - "value": "500000" - }, - "visibility": "public" - }, - { - "body": { - "id": 8031, - "nodeType": "Block", - "src": "2928:92:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8022, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "2946:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8023, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2950:6:48", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "2946:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 8024, - "name": "arbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9451, - "src": "2960:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2946:24:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8026, - "name": "DisputeManagerNotArbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10855, - "src": "2972:27:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 8027, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2972:29:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8021, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2938:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8028, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2938:64:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8029, - "nodeType": "ExpressionStatement", - "src": "2938:64:48" - }, - { - "id": 8030, - "nodeType": "PlaceholderStatement", - "src": "3012:1:48" - } - ] - }, - "documentation": { - "id": 8019, - "nodeType": "StructuredDocumentation", - "src": "2832:65:48", - "text": " @notice Check if the caller is the arbitrator." - }, - "id": 8032, - "name": "onlyArbitrator", - "nameLocation": "2911:14:48", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 8020, - "nodeType": "ParameterList", - "parameters": [], - "src": "2925:2:48" - }, - "src": "2902:118:48", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 8064, - "nodeType": "Block", - "src": "3187:286:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 8039, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8035, - "src": "3222:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8038, - "name": "isDisputeCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8801, - "src": "3205:16:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (bytes32) view returns (bool)" - } - }, - "id": 8040, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3205:27:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 8042, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8035, - "src": "3263:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8041, - "name": "DisputeManagerInvalidDispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10867, - "src": "3234:28:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32) pure returns (error)" - } - }, - "id": 8043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3234:39:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8037, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3197:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8044, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3197:77:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8045, - "nodeType": "ExpressionStatement", - "src": "3197:77:48" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - }, - "id": 8054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "id": 8047, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "3305:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8049, - "indexExpression": { - "id": 8048, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8035, - "src": "3314:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3305:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "id": 8050, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3325:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "3305:26:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 8051, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "3335:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 8052, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3351:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "3335:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 8053, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3365:7:48", - "memberName": "Pending", - "nodeType": "MemberAccess", - "referencedDeclaration": 10716, - "src": "3335:37:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "src": "3305:67:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 8056, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "3418:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8058, - "indexExpression": { - "id": 8057, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8035, - "src": "3427:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3418:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "id": 8059, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3438:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "3418:26:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - ], - "id": 8055, - "name": "DisputeManagerDisputeNotPending", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10890, - "src": "3386:31:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_enum$_DisputeStatus_$10718_$returns$_t_error_$", - "typeString": "function (enum IDisputeManager.DisputeStatus) pure returns (error)" - } - }, - "id": 8060, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3386:59:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8046, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3284:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8061, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3284:171:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8062, - "nodeType": "ExpressionStatement", - "src": "3284:171:48" - }, - { - "id": 8063, - "nodeType": "PlaceholderStatement", - "src": "3465:1:48" - } - ] - }, - "documentation": { - "id": 8033, - "nodeType": "StructuredDocumentation", - "src": "3026:109:48", - "text": " @notice Check if the dispute exists and is pending.\n @param disputeId The dispute Id" - }, - "id": 8065, - "name": "onlyPendingDispute", - "nameLocation": "3149:18:48", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 8036, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8035, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "3176:9:48", - "nodeType": "VariableDeclaration", - "scope": 8065, - "src": "3168:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8034, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3168:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3167:19:48" - }, - "src": "3140:333:48", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 8092, - "nodeType": "Block", - "src": "3644:197:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 8072, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8068, - "src": "3679:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8071, - "name": "isDisputeCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8801, - "src": "3662:16:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (bytes32) view returns (bool)" - } - }, - "id": 8073, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3662:27:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 8075, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8068, - "src": "3720:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8074, - "name": "DisputeManagerInvalidDispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10867, - "src": "3691:28:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32) pure returns (error)" - } - }, - "id": 8076, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3691:39:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8070, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3654:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8077, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3654:77:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8078, - "nodeType": "ExpressionStatement", - "src": "3654:77:48" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8086, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8080, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "3749:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8081, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3753:6:48", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3749:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "baseExpression": { - "id": 8082, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "3763:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8084, - "indexExpression": { - "id": 8083, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8068, - "src": "3772:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3763:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "id": 8085, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3783:9:48", - "memberName": "fisherman", - "nodeType": "MemberAccess", - "referencedDeclaration": 10723, - "src": "3763:29:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3749:43:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8087, - "name": "DisputeManagerNotFisherman", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10857, - "src": "3794:26:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 8088, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3794:28:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8079, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3741:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8089, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3741:82:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8090, - "nodeType": "ExpressionStatement", - "src": "3741:82:48" - }, - { - "id": 8091, - "nodeType": "PlaceholderStatement", - "src": "3833:1:48" - } - ] - }, - "documentation": { - "id": 8066, - "nodeType": "StructuredDocumentation", - "src": "3479:118:48", - "text": " @notice Check if the caller is the fisherman of the dispute.\n @param disputeId The dispute Id" - }, - "id": 8093, - "name": "onlyFisherman", - "nameLocation": "3611:13:48", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 8069, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8068, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "3633:9:48", - "nodeType": "VariableDeclaration", - "scope": 8093, - "src": "3625:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8067, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3625:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3624:19:48" - }, - "src": "3602:239:48", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 8105, - "nodeType": "Block", - "src": "4009:39:48", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8102, - "name": "_disableInitializers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5070, - "src": "4019:20:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 8103, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4019:22:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8104, - "nodeType": "ExpressionStatement", - "src": "4019:22:48" - } - ] - }, - "documentation": { - "id": 8094, - "nodeType": "StructuredDocumentation", - "src": "3847:98:48", - "text": " @notice Contract constructor\n @param controller Address of the controller" - }, - "id": 8106, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 8099, - "name": "controller", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8096, - "src": "3997:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 8100, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 8098, - "name": "GraphDirectory", - "nameLocations": [ - "3982:14:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4653, - "src": "3982:14:48" - }, - "nodeType": "ModifierInvocation", - "src": "3982:26:48" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8097, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8096, - "mutability": "mutable", - "name": "controller", - "nameLocation": "3970:10:48", - "nodeType": "VariableDeclaration", - "scope": 8106, - "src": "3962:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8095, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3962:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3961:20:48" - }, - "returnParameters": { - "id": 8101, - "nodeType": "ParameterList", - "parameters": [], - "src": "4009:0:48" - }, - "scope": 9438, - "src": "3950:98:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 8150, - "nodeType": "Block", - "src": "4648:301:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 8123, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "4673:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4677:6:48", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "4673:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8122, - "name": "__Ownable_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4708, - "src": "4658:14:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 8125, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4658:26:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8126, - "nodeType": "ExpressionStatement", - "src": "4658:26:48" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8127, - "name": "__AttestationManager_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13125, - "src": "4694:25:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 8128, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4694:27:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8129, - "nodeType": "ExpressionStatement", - "src": "4694:27:48" - }, - { - "expression": { - "arguments": [ - { - "id": 8131, - "name": "arbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8109, - "src": "4747:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8130, - "name": "_setArbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9238, - "src": "4732:14:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 8132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4732:26:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8133, - "nodeType": "ExpressionStatement", - "src": "4732:26:48" - }, - { - "expression": { - "arguments": [ - { - "id": 8135, - "name": "disputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8111, - "src": "4786:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 8134, - "name": "_setDisputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9261, - "src": "4768:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$", - "typeString": "function (uint64)" - } - }, - "id": 8136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4768:32:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8137, - "nodeType": "ExpressionStatement", - "src": "4768:32:48" - }, - { - "expression": { - "arguments": [ - { - "id": 8139, - "name": "disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8113, - "src": "4829:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8138, - "name": "_setDisputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9285, - "src": "4810:18:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 8140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4810:34:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8141, - "nodeType": "ExpressionStatement", - "src": "4810:34:48" - }, - { - "expression": { - "arguments": [ - { - "id": 8143, - "name": "fishermanRewardCut_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8115, - "src": "4877:19:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 8142, - "name": "_setFishermanRewardCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9309, - "src": "4854:22:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32)" - } - }, - "id": 8144, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4854:43:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8145, - "nodeType": "ExpressionStatement", - "src": "4854:43:48" - }, - { - "expression": { - "arguments": [ - { - "id": 8147, - "name": "maxSlashingCut_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8117, - "src": "4926:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 8146, - "name": "_setMaxSlashingCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9334, - "src": "4907:18:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32)" - } - }, - "id": 8148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4907:35:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8149, - "nodeType": "ExpressionStatement", - "src": "4907:35:48" - } - ] - }, - "documentation": { - "id": 8107, - "nodeType": "StructuredDocumentation", - "src": "4054:384:48", - "text": " @notice Initialize this contract.\n @param arbitrator Arbitrator role\n @param disputePeriod Dispute period in seconds\n @param disputeDeposit Deposit required to create a Dispute\n @param fishermanRewardCut_ Percent of slashed funds for fisherman (ppm)\n @param maxSlashingCut_ Maximum percentage of indexer stake that can be slashed (ppm)" - }, - "functionSelector": "5ed2c96c", - "id": 8151, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8120, - "kind": "modifierInvocation", - "modifierName": { - "id": 8119, - "name": "initializer", - "nameLocations": [ - "4636:11:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4956, - "src": "4636:11:48" - }, - "nodeType": "ModifierInvocation", - "src": "4636:11:48" - } - ], - "name": "initialize", - "nameLocation": "4452:10:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8118, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8109, - "mutability": "mutable", - "name": "arbitrator", - "nameLocation": "4480:10:48", - "nodeType": "VariableDeclaration", - "scope": 8151, - "src": "4472:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8108, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4472:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8111, - "mutability": "mutable", - "name": "disputePeriod", - "nameLocation": "4507:13:48", - "nodeType": "VariableDeclaration", - "scope": 8151, - "src": "4500:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 8110, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "4500:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8113, - "mutability": "mutable", - "name": "disputeDeposit", - "nameLocation": "4538:14:48", - "nodeType": "VariableDeclaration", - "scope": 8151, - "src": "4530:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8112, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4530:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8115, - "mutability": "mutable", - "name": "fishermanRewardCut_", - "nameLocation": "4569:19:48", - "nodeType": "VariableDeclaration", - "scope": 8151, - "src": "4562:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 8114, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "4562:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8117, - "mutability": "mutable", - "name": "maxSlashingCut_", - "nameLocation": "4605:15:48", - "nodeType": "VariableDeclaration", - "scope": 8151, - "src": "4598:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 8116, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "4598:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "4462:164:48" - }, - "returnParameters": { - "id": 8121, - "nodeType": "ParameterList", - "parameters": [], - "src": "4648:0:48" - }, - "scope": 9438, - "src": "4443:506:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10978 - ], - "body": { - "id": 8173, - "nodeType": "Block", - "src": "5636:205:48", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8162, - "name": "_pullFishermanDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9131, - "src": "5682:21:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 8163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5682:23:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8164, - "nodeType": "ExpressionStatement", - "src": "5682:23:48" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 8166, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "5788:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5792:6:48", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "5788:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8168, - "name": "disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9457, - "src": "5800:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8169, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8154, - "src": "5816:12:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8170, - "name": "poi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8156, - "src": "5830:3:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8165, - "name": "_createIndexingDisputeWithAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9040, - "src": "5751:36:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (address,uint256,address,bytes32) returns (bytes32)" - } - }, - "id": 8171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5751:83:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 8161, - "id": 8172, - "nodeType": "Return", - "src": "5744:90:48" - } - ] - }, - "documentation": { - "id": 8152, - "nodeType": "StructuredDocumentation", - "src": "4955:574:48", - "text": " @notice Create an indexing dispute for the arbitrator to resolve.\n The disputes are created in reference to an allocationId and specifically\n a POI for that allocation.\n This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens.\n Requirements:\n - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n of tokens from their balance.\n @param allocationId The allocation to dispute\n @param poi The Proof of Indexing (POI) being disputed" - }, - "functionSelector": "4bc5839a", - "id": 8174, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "createIndexingDispute", - "nameLocation": "5543:21:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8158, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5609:8:48" - }, - "parameters": { - "id": 8157, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8154, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "5573:12:48", - "nodeType": "VariableDeclaration", - "scope": 8174, - "src": "5565:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8153, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5565:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8156, - "mutability": "mutable", - "name": "poi", - "nameLocation": "5595:3:48", - "nodeType": "VariableDeclaration", - "scope": 8174, - "src": "5587:11:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8155, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5587:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5564:35:48" - }, - "returnParameters": { - "id": 8161, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8160, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8174, - "src": "5627:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8159, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5627:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5626:9:48" - }, - "scope": 9438, - "src": "5534:307:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10958 - ], - "body": { - "id": 8197, - "nodeType": "Block", - "src": "6366:327:48", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8183, - "name": "_pullFishermanDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9131, - "src": "6412:21:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 8184, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6412:23:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8185, - "nodeType": "ExpressionStatement", - "src": "6412:23:48" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 8187, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "6545:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6549:6:48", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "6545:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8189, - "name": "disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9457, - "src": "6573:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 8192, - "name": "attestationData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8177, - "src": "6623:15:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "id": 8190, - "name": "Attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11920, - "src": "6605:11:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", - "typeString": "type(library Attestation)" - } - }, - "id": 8191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6617:5:48", - "memberName": "parse", - "nodeType": "MemberAccess", - "referencedDeclaration": 11853, - "src": "6605:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_State_$11699_memory_ptr_$", - "typeString": "function (bytes memory) pure returns (struct Attestation.State memory)" - } - }, - "id": 8193, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6605:34:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - { - "id": 8194, - "name": "attestationData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8177, - "src": "6657:15:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 8186, - "name": "_createQueryDisputeWithAttestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8913, - "src": "6493:34:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_struct$_State_$11699_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (address,uint256,struct Attestation.State memory,bytes memory) returns (bytes32)" - } - }, - "id": 8195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6493:193:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 8182, - "id": 8196, - "nodeType": "Return", - "src": "6474:212:48" - } - ] - }, - "documentation": { - "id": 8175, - "nodeType": "StructuredDocumentation", - "src": "5847:418:48", - "text": " @notice Create a query dispute for the arbitrator to resolve.\n This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens.\n * Requirements:\n - fisherman must have previously approved this contract to pull `disputeDeposit` amount\n of tokens from their balance.\n @param attestationData Attestation bytes submitted by the fisherman" - }, - "functionSelector": "c50a77b1", - "id": 8198, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "createQueryDispute", - "nameLocation": "6279:18:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8179, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "6339:8:48" - }, - "parameters": { - "id": 8178, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8177, - "mutability": "mutable", - "name": "attestationData", - "nameLocation": "6313:15:48", - "nodeType": "VariableDeclaration", - "scope": 8198, - "src": "6298:30:48", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 8176, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6298:5:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6297:32:48" - }, - "returnParameters": { - "id": 8182, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8181, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8198, - "src": "6357:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8180, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6357:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6356:9:48" - }, - "scope": 9438, - "src": "6270:423:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10969 - ], - "body": { - "id": 8299, - "nodeType": "Block", - "src": "7551:1314:48", - "statements": [ - { - "assignments": [ - 8212 - ], - "declarations": [ - { - "constant": false, - "id": 8212, - "mutability": "mutable", - "name": "fisherman", - "nameLocation": "7569:9:48", - "nodeType": "VariableDeclaration", - "scope": 8299, - "src": "7561:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8211, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7561:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8215, - "initialValue": { - "expression": { - "id": 8213, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "7581:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8214, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7585:6:48", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "7581:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7561:30:48" - }, - { - "assignments": [ - 8220 - ], - "declarations": [ - { - "constant": false, - "id": 8220, - "mutability": "mutable", - "name": "attestation1", - "nameLocation": "7661:12:48", - "nodeType": "VariableDeclaration", - "scope": 8299, - "src": "7636:37:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 8219, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8218, - "name": "Attestation.State", - "nameLocations": [ - "7636:11:48", - "7648:5:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "7636:17:48" - }, - "referencedDeclaration": 11699, - "src": "7636:17:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - } - ], - "id": 8225, - "initialValue": { - "arguments": [ - { - "id": 8223, - "name": "attestationData1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8201, - "src": "7694:16:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "id": 8221, - "name": "Attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11920, - "src": "7676:11:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", - "typeString": "type(library Attestation)" - } - }, - "id": 8222, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7688:5:48", - "memberName": "parse", - "nodeType": "MemberAccess", - "referencedDeclaration": 11853, - "src": "7676:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_State_$11699_memory_ptr_$", - "typeString": "function (bytes memory) pure returns (struct Attestation.State memory)" - } - }, - "id": 8224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7676:35:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7636:75:48" - }, - { - "assignments": [ - 8230 - ], - "declarations": [ - { - "constant": false, - "id": 8230, - "mutability": "mutable", - "name": "attestation2", - "nameLocation": "7746:12:48", - "nodeType": "VariableDeclaration", - "scope": 8299, - "src": "7721:37:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 8229, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8228, - "name": "Attestation.State", - "nameLocations": [ - "7721:11:48", - "7733:5:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "7721:17:48" - }, - "referencedDeclaration": 11699, - "src": "7721:17:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - } - ], - "id": 8235, - "initialValue": { - "arguments": [ - { - "id": 8233, - "name": "attestationData2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8203, - "src": "7779:16:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "id": 8231, - "name": "Attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11920, - "src": "7761:11:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", - "typeString": "type(library Attestation)" - } - }, - "id": 8232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7773:5:48", - "memberName": "parse", - "nodeType": "MemberAccess", - "referencedDeclaration": 11853, - "src": "7761:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_State_$11699_memory_ptr_$", - "typeString": "function (bytes memory) pure returns (struct Attestation.State memory)" - } - }, - "id": 8234, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7761:35:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7721:75:48" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 8239, - "name": "attestation1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8220, - "src": "7905:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - { - "id": 8240, - "name": "attestation2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8230, - "src": "7919:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - }, - { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - ], - "expression": { - "id": 8237, - "name": "Attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11920, - "src": "7878:11:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", - "typeString": "type(library Attestation)" - } - }, - "id": 8238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7890:14:48", - "memberName": "areConflicting", - "nodeType": "MemberAccess", - "referencedDeclaration": 11783, - "src": "7878:26:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11699_memory_ptr_$_t_struct$_State_$11699_memory_ptr_$returns$_t_bool_$", - "typeString": "function (struct Attestation.State memory,struct Attestation.State memory) pure returns (bool)" - } - }, - "id": 8241, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7878:54:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "expression": { - "id": 8243, - "name": "attestation1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8220, - "src": "8004:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8244, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8017:10:48", - "memberName": "requestCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11688, - "src": "8004:23:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8245, - "name": "attestation1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8220, - "src": "8045:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8246, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8058:11:48", - "memberName": "responseCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11690, - "src": "8045:24:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8247, - "name": "attestation1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8220, - "src": "8087:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8248, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8100:20:48", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11692, - "src": "8087:33:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8249, - "name": "attestation2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8230, - "src": "8138:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8250, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8151:10:48", - "memberName": "requestCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11688, - "src": "8138:23:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8251, - "name": "attestation2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8230, - "src": "8179:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8252, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8192:11:48", - "memberName": "responseCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11690, - "src": "8179:24:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8253, - "name": "attestation2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8230, - "src": "8221:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8254, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8234:20:48", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11692, - "src": "8221:33:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8242, - "name": "DisputeManagerNonConflictingAttestations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10926, - "src": "7946:40:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32,bytes32,bytes32,bytes32,bytes32,bytes32) pure returns (error)" - } - }, - "id": 8255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7946:322:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8236, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "7857:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8256, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7857:421:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8257, - "nodeType": "ExpressionStatement", - "src": "7857:421:48" - }, - { - "assignments": [ - 8259 - ], - "declarations": [ - { - "constant": false, - "id": 8259, - "mutability": "mutable", - "name": "dId1", - "nameLocation": "8388:4:48", - "nodeType": "VariableDeclaration", - "scope": 8299, - "src": "8380:12:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8258, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8380:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 8266, - "initialValue": { - "arguments": [ - { - "id": 8261, - "name": "fisherman", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8212, - "src": "8430:9:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "30", - "id": 8262, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8441:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "id": 8263, - "name": "attestation1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8220, - "src": "8444:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - { - "id": 8264, - "name": "attestationData1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8201, - "src": "8458:16:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 8260, - "name": "_createQueryDisputeWithAttestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8913, - "src": "8395:34:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_struct$_State_$11699_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (address,uint256,struct Attestation.State memory,bytes memory) returns (bytes32)" - } - }, - "id": 8265, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8395:80:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8380:95:48" - }, - { - "assignments": [ - 8268 - ], - "declarations": [ - { - "constant": false, - "id": 8268, - "mutability": "mutable", - "name": "dId2", - "nameLocation": "8493:4:48", - "nodeType": "VariableDeclaration", - "scope": 8299, - "src": "8485:12:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8267, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8485:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 8275, - "initialValue": { - "arguments": [ - { - "id": 8270, - "name": "fisherman", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8212, - "src": "8535:9:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "30", - "id": 8271, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8546:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "id": 8272, - "name": "attestation2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8230, - "src": "8549:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - { - "id": 8273, - "name": "attestationData2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8203, - "src": "8563:16:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 8269, - "name": "_createQueryDisputeWithAttestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8913, - "src": "8500:34:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_struct$_State_$11699_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (address,uint256,struct Attestation.State memory,bytes memory) returns (bytes32)" - } - }, - "id": 8274, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8500:80:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8485:95:48" - }, - { - "expression": { - "id": 8281, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 8276, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "8643:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8278, - "indexExpression": { - "id": 8277, - "name": "dId1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8259, - "src": "8652:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "8643:14:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "id": 8279, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8658:16:48", - "memberName": "relatedDisputeId", - "nodeType": "MemberAccess", - "referencedDeclaration": 10727, - "src": "8643:31:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 8280, - "name": "dId2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8268, - "src": "8677:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "8643:38:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 8282, - "nodeType": "ExpressionStatement", - "src": "8643:38:48" - }, - { - "expression": { - "id": 8288, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 8283, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "8691:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8285, - "indexExpression": { - "id": 8284, - "name": "dId2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8268, - "src": "8700:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "8691:14:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "id": 8286, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8706:16:48", - "memberName": "relatedDisputeId", - "nodeType": "MemberAccess", - "referencedDeclaration": 10727, - "src": "8691:31:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 8287, - "name": "dId1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8259, - "src": "8725:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "8691:38:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 8289, - "nodeType": "ExpressionStatement", - "src": "8691:38:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 8291, - "name": "dId1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8259, - "src": "8817:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 8292, - "name": "dId2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8268, - "src": "8823:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8290, - "name": "DisputeLinked", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10842, - "src": "8803:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$", - "typeString": "function (bytes32,bytes32)" - } - }, - "id": 8293, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8803:25:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8294, - "nodeType": "EmitStatement", - "src": "8798:30:48" - }, - { - "expression": { - "components": [ - { - "id": 8295, - "name": "dId1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8259, - "src": "8847:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 8296, - "name": "dId2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8268, - "src": "8853:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 8297, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "8846:12:48", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$", - "typeString": "tuple(bytes32,bytes32)" - } - }, - "functionReturnParameters": 8210, - "id": 8298, - "nodeType": "Return", - "src": "8839:19:48" - } - ] - }, - "documentation": { - "id": 8199, - "nodeType": "StructuredDocumentation", - "src": "6699:678:48", - "text": " @notice Create query disputes for two conflicting attestations.\n A conflicting attestation is a proof presented by two different indexers\n where for the same request on a subgraph the response is different.\n For this type of dispute the fisherman is not required to present a deposit\n as one of the attestation is considered to be right.\n Two linked disputes will be created and if the arbitrator resolve one, the other\n one will be automatically resolved.\n @param attestationData1 First attestation data submitted\n @param attestationData2 Second attestation data submitted\n @return DisputeId1, DisputeId2" - }, - "functionSelector": "c894222e", - "id": 8300, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "createQueryDisputeConflict", - "nameLocation": "7391:26:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8205, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "7515:8:48" - }, - "parameters": { - "id": 8204, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8201, - "mutability": "mutable", - "name": "attestationData1", - "nameLocation": "7442:16:48", - "nodeType": "VariableDeclaration", - "scope": 8300, - "src": "7427:31:48", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 8200, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7427:5:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8203, - "mutability": "mutable", - "name": "attestationData2", - "nameLocation": "7483:16:48", - "nodeType": "VariableDeclaration", - "scope": 8300, - "src": "7468:31:48", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 8202, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7468:5:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "7417:88:48" - }, - "returnParameters": { - "id": 8210, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8207, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8300, - "src": "7533:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8206, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7533:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8209, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8300, - "src": "7542:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8208, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7542:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7532:18:48" - }, - "scope": 9438, - "src": "7382:1483:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10985 - ], - "body": { - "id": 8372, - "nodeType": "Block", - "src": "9538:658:48", - "statements": [ - { - "assignments": [ - 8316 - ], - "declarations": [ - { - "constant": false, - "id": 8316, - "mutability": "mutable", - "name": "dispute", - "nameLocation": "9564:7:48", - "nodeType": "VariableDeclaration", - "scope": 8372, - "src": "9548:23:48", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - }, - "typeName": { - "id": 8315, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8314, - "name": "Dispute", - "nameLocations": [ - "9548:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "9548:7:48" - }, - "referencedDeclaration": 10738, - "src": "9548:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - }, - "visibility": "internal" - } - ], - "id": 8320, - "initialValue": { - "baseExpression": { - "id": 8317, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "9574:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8319, - "indexExpression": { - "id": 8318, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8303, - "src": "9583:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9574:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9548:45:48" - }, - { - "expression": { - "id": 8327, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 8321, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "9640:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8323, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "9648:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "9640:14:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "expression": { - "id": 8324, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "9657:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 8325, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9673:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "9657:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 8326, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "9687:8:48", - "memberName": "Accepted", - "nodeType": "MemberAccess", - "referencedDeclaration": 10713, - "src": "9657:38:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "src": "9640:55:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "id": 8328, - "nodeType": "ExpressionStatement", - "src": "9640:55:48" - }, - { - "assignments": [ - 8330 - ], - "declarations": [ - { - "constant": false, - "id": 8330, - "mutability": "mutable", - "name": "tokensToReward", - "nameLocation": "9731:14:48", - "nodeType": "VariableDeclaration", - "scope": 8372, - "src": "9723:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8329, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9723:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8338, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 8332, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "9762:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8333, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9770:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 10721, - "src": "9762:15:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8334, - "name": "tokensSlash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8305, - "src": "9779:11:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 8335, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "9792:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8336, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9800:13:48", - "memberName": "stakeSnapshot", - "nodeType": "MemberAccess", - "referencedDeclaration": 10737, - "src": "9792:21:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8331, - "name": "_slashIndexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9212, - "src": "9748:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (address,uint256,uint256) returns (uint256)" - } - }, - "id": 8337, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9748:66:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9723:91:48" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 8342, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "9916:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8343, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9924:9:48", - "memberName": "fisherman", - "nodeType": "MemberAccess", - "referencedDeclaration": 10723, - "src": "9916:17:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8344, - "name": "tokensToReward", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8330, - "src": "9935:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "expression": { - "id": 8345, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "9952:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8346, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9960:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "9952:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9935:32:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8339, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "9891:11:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 8340, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9891:13:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 8341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9905:10:48", - "memberName": "pushTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 578, - "src": "9891:24:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", - "typeString": "function (contract IGraphToken,address,uint256)" - } - }, - "id": 8348, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9891:77:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8349, - "nodeType": "ExpressionStatement", - "src": "9891:77:48" - }, - { - "condition": { - "arguments": [ - { - "id": 8351, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "10004:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - ], - "id": 8350, - "name": "_isDisputeInConflict", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9390, - "src": "9983:20:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", - "typeString": "function (struct IDisputeManager.Dispute memory) view returns (bool)" - } - }, - "id": 8352, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9983:29:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8359, - "nodeType": "IfStatement", - "src": "9979:99:48", - "trueBody": { - "id": 8358, - "nodeType": "Block", - "src": "10014:64:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 8354, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "10042:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8355, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10050:16:48", - "memberName": "relatedDisputeId", - "nodeType": "MemberAccess", - "referencedDeclaration": 10727, - "src": "10042:24:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8353, - "name": "rejectDispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8727, - "src": "10028:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - } - }, - "id": 8356, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10028:39:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8357, - "nodeType": "ExpressionStatement", - "src": "10028:39:48" - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "id": 8361, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8303, - "src": "10109:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8362, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "10120:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8363, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10128:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 10721, - "src": "10120:15:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8364, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "10137:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8365, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10145:9:48", - "memberName": "fisherman", - "nodeType": "MemberAccess", - "referencedDeclaration": 10723, - "src": "10137:17:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8369, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8366, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8316, - "src": "10156:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8367, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10164:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "10156:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 8368, - "name": "tokensToReward", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8330, - "src": "10174:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10156:32:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8360, - "name": "DisputeAccepted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10813, - "src": "10093:15:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (bytes32,address,address,uint256)" - } - }, - "id": 8370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10093:96:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8371, - "nodeType": "EmitStatement", - "src": "10088:101:48" - } - ] - }, - "documentation": { - "id": 8301, - "nodeType": "StructuredDocumentation", - "src": "8871:514:48", - "text": " @notice The arbitrator accepts a dispute as being valid.\n This function will revert if the indexer is not slashable, whether because it does not have\n any stake available or the slashing percentage is configured to be zero. In those cases\n a dispute must be resolved using drawDispute or rejectDispute.\n @dev Accept a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be accepted\n @param tokensSlash Amount of tokens to slash from the indexer" - }, - "functionSelector": "050b17ad", - "id": 8373, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8309, - "kind": "modifierInvocation", - "modifierName": { - "id": 8308, - "name": "onlyArbitrator", - "nameLocations": [ - "9493:14:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8032, - "src": "9493:14:48" - }, - "nodeType": "ModifierInvocation", - "src": "9493:14:48" - }, - { - "arguments": [ - { - "id": 8311, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8303, - "src": "9527:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 8312, - "kind": "modifierInvocation", - "modifierName": { - "id": 8310, - "name": "onlyPendingDispute", - "nameLocations": [ - "9508:18:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8065, - "src": "9508:18:48" - }, - "nodeType": "ModifierInvocation", - "src": "9508:29:48" - } - ], - "name": "acceptDispute", - "nameLocation": "9399:13:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8307, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "9484:8:48" - }, - "parameters": { - "id": 8306, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8303, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "9430:9:48", - "nodeType": "VariableDeclaration", - "scope": 8373, - "src": "9422:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8302, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "9422:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8305, - "mutability": "mutable", - "name": "tokensSlash", - "nameLocation": "9457:11:48", - "nodeType": "VariableDeclaration", - "scope": 8373, - "src": "9449:19:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8304, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9449:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9412:62:48" - }, - "returnParameters": { - "id": 8313, - "nodeType": "ParameterList", - "parameters": [], - "src": "9538:0:48" - }, - "scope": 9438, - "src": "9390:806:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10995 - ], - "body": { - "id": 8429, - "nodeType": "Block", - "src": "10475:503:48", - "statements": [ - { - "assignments": [ - 8387 - ], - "declarations": [ - { - "constant": false, - "id": 8387, - "mutability": "mutable", - "name": "dispute", - "nameLocation": "10501:7:48", - "nodeType": "VariableDeclaration", - "scope": 8429, - "src": "10485:23:48", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - }, - "typeName": { - "id": 8386, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8385, - "name": "Dispute", - "nameLocations": [ - "10485:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "10485:7:48" - }, - "referencedDeclaration": 10738, - "src": "10485:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - }, - "visibility": "internal" - } - ], - "id": 8391, - "initialValue": { - "baseExpression": { - "id": 8388, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "10511:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8390, - "indexExpression": { - "id": 8389, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8376, - "src": "10520:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "10511:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10485:45:48" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8392, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "10595:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8393, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10603:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "10595:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 8394, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10613:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "10595:19:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8406, - "nodeType": "IfStatement", - "src": "10591:110:48", - "trueBody": { - "id": 8405, - "nodeType": "Block", - "src": "10616:85:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 8399, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "10655:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8400, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10663:9:48", - "memberName": "fisherman", - "nodeType": "MemberAccess", - "referencedDeclaration": 10723, - "src": "10655:17:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8401, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "10674:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8402, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10682:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "10674:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8396, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "10630:11:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 8397, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10630:13:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 8398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10644:10:48", - "memberName": "pushTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 578, - "src": "10630:24:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", - "typeString": "function (contract IGraphToken,address,uint256)" - } - }, - "id": 8403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10630:60:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8404, - "nodeType": "ExpressionStatement", - "src": "10630:60:48" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 8408, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "10776:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - ], - "id": 8407, - "name": "_drawDisputeInConflict", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9079, - "src": "10753:22:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", - "typeString": "function (struct IDisputeManager.Dispute memory) returns (bool)" - } - }, - "id": 8409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10753:31:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8410, - "nodeType": "ExpressionStatement", - "src": "10753:31:48" - }, - { - "expression": { - "id": 8417, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 8411, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "10827:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8413, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "10835:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "10827:14:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "expression": { - "id": 8414, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "10844:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 8415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10860:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "10844:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 8416, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "10874:5:48", - "memberName": "Drawn", - "nodeType": "MemberAccess", - "referencedDeclaration": 10715, - "src": "10844:35:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "src": "10827:52:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "id": 8418, - "nodeType": "ExpressionStatement", - "src": "10827:52:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 8420, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8376, - "src": "10908:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8421, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "10919:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8422, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10927:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 10721, - "src": "10919:15:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8423, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "10936:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8424, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10944:9:48", - "memberName": "fisherman", - "nodeType": "MemberAccess", - "referencedDeclaration": 10723, - "src": "10936:17:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8425, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "10955:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8426, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10963:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "10955:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8419, - "name": "DisputeDrawn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10835, - "src": "10895:12:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (bytes32,address,address,uint256)" - } - }, - "id": 8427, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10895:76:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8428, - "nodeType": "EmitStatement", - "src": "10890:81:48" - } - ] - }, - "documentation": { - "id": 8374, - "nodeType": "StructuredDocumentation", - "src": "10202:165:48", - "text": " @notice The arbitrator draws dispute.\n @dev Ignore a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be disregarded" - }, - "functionSelector": "9334ea52", - "id": 8430, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8380, - "kind": "modifierInvocation", - "modifierName": { - "id": 8379, - "name": "onlyArbitrator", - "nameLocations": [ - "10430:14:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8032, - "src": "10430:14:48" - }, - "nodeType": "ModifierInvocation", - "src": "10430:14:48" - }, - { - "arguments": [ - { - "id": 8382, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8376, - "src": "10464:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 8383, - "kind": "modifierInvocation", - "modifierName": { - "id": 8381, - "name": "onlyPendingDispute", - "nameLocations": [ - "10445:18:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8065, - "src": "10445:18:48" - }, - "nodeType": "ModifierInvocation", - "src": "10445:29:48" - } - ], - "name": "drawDispute", - "nameLocation": "10381:11:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8378, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "10421:8:48" - }, - "parameters": { - "id": 8377, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8376, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "10401:9:48", - "nodeType": "VariableDeclaration", - "scope": 8430, - "src": "10393:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8375, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10393:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "10392:19:48" - }, - "returnParameters": { - "id": 8384, - "nodeType": "ParameterList", - "parameters": [], - "src": "10475:0:48" - }, - "scope": 9438, - "src": "10372:606:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11000 - ], - "body": { - "id": 8499, - "nodeType": "Block", - "src": "11386:674:48", - "statements": [ - { - "assignments": [ - 8445 - ], - "declarations": [ - { - "constant": false, - "id": 8445, - "mutability": "mutable", - "name": "dispute", - "nameLocation": "11412:7:48", - "nodeType": "VariableDeclaration", - "scope": 8499, - "src": "11396:23:48", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - }, - "typeName": { - "id": 8444, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8443, - "name": "Dispute", - "nameLocations": [ - "11396:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "11396:7:48" - }, - "referencedDeclaration": 10738, - "src": "11396:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - }, - "visibility": "internal" - } - ], - "id": 8449, - "initialValue": { - "baseExpression": { - "id": 8446, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "11422:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8448, - "indexExpression": { - "id": 8447, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8433, - "src": "11431:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11422:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11396:45:48" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8451, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8445, - "src": "11508:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8452, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11516:9:48", - "memberName": "createdAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 10735, - "src": "11508:17:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 8453, - "name": "disputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9454, - "src": "11528:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "11508:33:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "id": 8455, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "11544:5:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 8456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11550:9:48", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "11544:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11508:51:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8458, - "name": "DisputeManagerDisputePeriodNotFinished", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10896, - "src": "11561:38:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 8459, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11561:40:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8450, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "11500:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11500:102:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8461, - "nodeType": "ExpressionStatement", - "src": "11500:102:48" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8462, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8445, - "src": "11667:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8463, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11675:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "11667:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 8464, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11685:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11667:19:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8476, - "nodeType": "IfStatement", - "src": "11663:110:48", - "trueBody": { - "id": 8475, - "nodeType": "Block", - "src": "11688:85:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 8469, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8445, - "src": "11727:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8470, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11735:9:48", - "memberName": "fisherman", - "nodeType": "MemberAccess", - "referencedDeclaration": 10723, - "src": "11727:17:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8471, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8445, - "src": "11746:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8472, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11754:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "11746:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8466, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "11702:11:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 8467, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11702:13:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 8468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11716:10:48", - "memberName": "pushTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 578, - "src": "11702:24:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", - "typeString": "function (contract IGraphToken,address,uint256)" - } - }, - "id": 8473, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11702:60:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8474, - "nodeType": "ExpressionStatement", - "src": "11702:60:48" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 8478, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8445, - "src": "11850:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - ], - "id": 8477, - "name": "_cancelDisputeInConflict", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9118, - "src": "11825:24:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", - "typeString": "function (struct IDisputeManager.Dispute memory) returns (bool)" - } - }, - "id": 8479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11825:33:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8480, - "nodeType": "ExpressionStatement", - "src": "11825:33:48" - }, - { - "expression": { - "id": 8487, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 8481, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8445, - "src": "11901:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8483, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11909:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "11901:14:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "expression": { - "id": 8484, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "11918:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 8485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11934:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "11918:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 8486, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "11948:9:48", - "memberName": "Cancelled", - "nodeType": "MemberAccess", - "referencedDeclaration": 10717, - "src": "11918:39:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "src": "11901:56:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "id": 8488, - "nodeType": "ExpressionStatement", - "src": "11901:56:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 8490, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8433, - "src": "11990:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8491, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8445, - "src": "12001:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8492, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12009:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 10721, - "src": "12001:15:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8493, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8445, - "src": "12018:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8494, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12026:9:48", - "memberName": "fisherman", - "nodeType": "MemberAccess", - "referencedDeclaration": 10723, - "src": "12018:17:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8495, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8445, - "src": "12037:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8496, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12045:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "12037:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8489, - "name": "DisputeCancelled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10853, - "src": "11973:16:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (bytes32,address,address,uint256)" - } - }, - "id": 8497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11973:80:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8498, - "nodeType": "EmitStatement", - "src": "11968:85:48" - } - ] - }, - "documentation": { - "id": 8431, - "nodeType": "StructuredDocumentation", - "src": "10984:282:48", - "text": " @notice Once the dispute period ends, if the dispute status remains Pending,\n the fisherman can cancel the dispute and get back their initial deposit.\n @dev Cancel a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be cancelled" - }, - "functionSelector": "1792f194", - "id": 8500, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 8437, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8433, - "src": "11345:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 8438, - "kind": "modifierInvocation", - "modifierName": { - "id": 8436, - "name": "onlyFisherman", - "nameLocations": [ - "11331:13:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8093, - "src": "11331:13:48" - }, - "nodeType": "ModifierInvocation", - "src": "11331:24:48" - }, - { - "arguments": [ - { - "id": 8440, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8433, - "src": "11375:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 8441, - "kind": "modifierInvocation", - "modifierName": { - "id": 8439, - "name": "onlyPendingDispute", - "nameLocations": [ - "11356:18:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8065, - "src": "11356:18:48" - }, - "nodeType": "ModifierInvocation", - "src": "11356:29:48" - } - ], - "name": "cancelDispute", - "nameLocation": "11280:13:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8435, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "11322:8:48" - }, - "parameters": { - "id": 8434, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8433, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "11302:9:48", - "nodeType": "VariableDeclaration", - "scope": 8500, - "src": "11294:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8432, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "11294:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "11293:19:48" - }, - "returnParameters": { - "id": 8442, - "nodeType": "ParameterList", - "parameters": [], - "src": "11386:0:48" - }, - "scope": 9438, - "src": "11271:789:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10936 - ], - "body": { - "id": 8513, - "nodeType": "Block", - "src": "12321:43:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8510, - "name": "arbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8503, - "src": "12346:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8509, - "name": "_setArbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9238, - "src": "12331:14:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 8511, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12331:26:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8512, - "nodeType": "ExpressionStatement", - "src": "12331:26:48" - } - ] - }, - "documentation": { - "id": 8501, - "nodeType": "StructuredDocumentation", - "src": "12066:179:48", - "text": " @notice Set the arbitrator address.\n @dev Update the arbitrator to `_arbitrator`\n @param arbitrator The address of the arbitration contract or party" - }, - "functionSelector": "b0eefabe", - "id": 8514, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8507, - "kind": "modifierInvocation", - "modifierName": { - "id": 8506, - "name": "onlyOwner", - "nameLocations": [ - "12311:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "12311:9:48" - }, - "nodeType": "ModifierInvocation", - "src": "12311:9:48" - } - ], - "name": "setArbitrator", - "nameLocation": "12259:13:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8505, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "12302:8:48" - }, - "parameters": { - "id": 8504, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8503, - "mutability": "mutable", - "name": "arbitrator", - "nameLocation": "12281:10:48", - "nodeType": "VariableDeclaration", - "scope": 8514, - "src": "12273:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8502, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12273:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "12272:20:48" - }, - "returnParameters": { - "id": 8508, - "nodeType": "ParameterList", - "parameters": [], - "src": "12321:0:48" - }, - "scope": 9438, - "src": "12250:114:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10931 - ], - "body": { - "id": 8527, - "nodeType": "Block", - "src": "12624:49:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8524, - "name": "disputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8517, - "src": "12652:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 8523, - "name": "_setDisputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9261, - "src": "12634:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$", - "typeString": "function (uint64)" - } - }, - "id": 8525, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12634:32:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8526, - "nodeType": "ExpressionStatement", - "src": "12634:32:48" - } - ] - }, - "documentation": { - "id": 8515, - "nodeType": "StructuredDocumentation", - "src": "12370:173:48", - "text": " @notice Set the dispute period.\n @dev Update the dispute period to `_disputePeriod` in seconds\n @param disputePeriod Dispute period in seconds" - }, - "functionSelector": "d76f62d1", - "id": 8528, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8521, - "kind": "modifierInvocation", - "modifierName": { - "id": 8520, - "name": "onlyOwner", - "nameLocations": [ - "12614:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "12614:9:48" - }, - "nodeType": "ModifierInvocation", - "src": "12614:9:48" - } - ], - "name": "setDisputePeriod", - "nameLocation": "12557:16:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8519, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "12605:8:48" - }, - "parameters": { - "id": 8518, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8517, - "mutability": "mutable", - "name": "disputePeriod", - "nameLocation": "12581:13:48", - "nodeType": "VariableDeclaration", - "scope": 8528, - "src": "12574:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 8516, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "12574:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "12573:22:48" - }, - "returnParameters": { - "id": 8522, - "nodeType": "ParameterList", - "parameters": [], - "src": "12624:0:48" - }, - "scope": 9438, - "src": "12548:125:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10941 - ], - "body": { - "id": 8541, - "nodeType": "Block", - "src": "12981:51:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8538, - "name": "disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8531, - "src": "13010:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8537, - "name": "_setDisputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9285, - "src": "12991:18:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 8539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12991:34:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8540, - "nodeType": "ExpressionStatement", - "src": "12991:34:48" - } - ] - }, - "documentation": { - "id": 8529, - "nodeType": "StructuredDocumentation", - "src": "12679:218:48", - "text": " @notice Set the dispute deposit required to create a dispute.\n @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens\n @param disputeDeposit The dispute deposit in Graph Tokens" - }, - "functionSelector": "16972978", - "id": 8542, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8535, - "kind": "modifierInvocation", - "modifierName": { - "id": 8534, - "name": "onlyOwner", - "nameLocations": [ - "12971:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "12971:9:48" - }, - "nodeType": "ModifierInvocation", - "src": "12971:9:48" - } - ], - "name": "setDisputeDeposit", - "nameLocation": "12911:17:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8533, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "12962:8:48" - }, - "parameters": { - "id": 8532, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8531, - "mutability": "mutable", - "name": "disputeDeposit", - "nameLocation": "12937:14:48", - "nodeType": "VariableDeclaration", - "scope": 8542, - "src": "12929:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8530, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12929:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12928:24:48" - }, - "returnParameters": { - "id": 8536, - "nodeType": "ParameterList", - "parameters": [], - "src": "12981:0:48" - }, - "scope": 9438, - "src": "12902:130:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10946 - ], - "body": { - "id": 8555, - "nodeType": "Block", - "src": "13357:60:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8552, - "name": "fishermanRewardCut_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8545, - "src": "13390:19:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 8551, - "name": "_setFishermanRewardCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9309, - "src": "13367:22:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32)" - } - }, - "id": 8553, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13367:43:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8554, - "nodeType": "ExpressionStatement", - "src": "13367:43:48" - } - ] - }, - "documentation": { - "id": 8543, - "nodeType": "StructuredDocumentation", - "src": "13038:227:48", - "text": " @notice Set the percent reward that the fisherman gets when slashing occurs.\n @dev Update the reward percentage to `_percentage`\n @param fishermanRewardCut_ Reward as a percentage of indexer stake" - }, - "functionSelector": "76c993ae", - "id": 8556, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8549, - "kind": "modifierInvocation", - "modifierName": { - "id": 8548, - "name": "onlyOwner", - "nameLocations": [ - "13347:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "13347:9:48" - }, - "nodeType": "ModifierInvocation", - "src": "13347:9:48" - } - ], - "name": "setFishermanRewardCut", - "nameLocation": "13279:21:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8547, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "13338:8:48" - }, - "parameters": { - "id": 8546, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8545, - "mutability": "mutable", - "name": "fishermanRewardCut_", - "nameLocation": "13308:19:48", - "nodeType": "VariableDeclaration", - "scope": 8556, - "src": "13301:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 8544, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "13301:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "13300:28:48" - }, - "returnParameters": { - "id": 8550, - "nodeType": "ParameterList", - "parameters": [], - "src": "13357:0:48" - }, - "scope": 9438, - "src": "13270:147:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10951 - ], - "body": { - "id": 8569, - "nodeType": "Block", - "src": "13667:52:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8566, - "name": "maxSlashingCut_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8559, - "src": "13696:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 8565, - "name": "_setMaxSlashingCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9334, - "src": "13677:18:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32)" - } - }, - "id": 8567, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13677:35:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8568, - "nodeType": "ExpressionStatement", - "src": "13677:35:48" - } - ] - }, - "documentation": { - "id": 8557, - "nodeType": "StructuredDocumentation", - "src": "13423:160:48", - "text": " @notice Set the maximum percentage that can be used for slashing indexers.\n @param maxSlashingCut_ Max percentage slashing for disputes" - }, - "functionSelector": "9f81a7cf", - "id": 8570, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8563, - "kind": "modifierInvocation", - "modifierName": { - "id": 8562, - "name": "onlyOwner", - "nameLocations": [ - "13657:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "13657:9:48" - }, - "nodeType": "ModifierInvocation", - "src": "13657:9:48" - } - ], - "name": "setMaxSlashingCut", - "nameLocation": "13597:17:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8561, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "13648:8:48" - }, - "parameters": { - "id": 8560, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8559, - "mutability": "mutable", - "name": "maxSlashingCut_", - "nameLocation": "13622:15:48", - "nodeType": "VariableDeclaration", - "scope": 8570, - "src": "13615:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 8558, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "13615:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "13614:24:48" - }, - "returnParameters": { - "id": 8564, - "nodeType": "ParameterList", - "parameters": [], - "src": "13667:0:48" - }, - "scope": 9438, - "src": "13588:131:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11005 - ], - "body": { - "id": 8583, - "nodeType": "Block", - "src": "14008:53:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8580, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8573, - "src": "14038:15:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8579, - "name": "_setSubgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9362, - "src": "14018:19:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 8581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14018:36:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8582, - "nodeType": "ExpressionStatement", - "src": "14018:36:48" - } - ] - }, - "documentation": { - "id": 8571, - "nodeType": "StructuredDocumentation", - "src": "13725:197:48", - "text": " @notice Set the subgraph service address.\n @dev Update the subgraph service to `_subgraphService`\n @param subgraphService The address of the subgraph service contract" - }, - "functionSelector": "93a90a1e", - "id": 8584, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8577, - "kind": "modifierInvocation", - "modifierName": { - "id": 8576, - "name": "onlyOwner", - "nameLocations": [ - "13998:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "13998:9:48" - }, - "nodeType": "ModifierInvocation", - "src": "13998:9:48" - } - ], - "name": "setSubgraphService", - "nameLocation": "13936:18:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8575, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "13989:8:48" - }, - "parameters": { - "id": 8574, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8573, - "mutability": "mutable", - "name": "subgraphService", - "nameLocation": "13963:15:48", - "nodeType": "VariableDeclaration", - "scope": 8584, - "src": "13955:23:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8572, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13955:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "13954:25:48" - }, - "returnParameters": { - "id": 8578, - "nodeType": "ParameterList", - "parameters": [], - "src": "14008:0:48" - }, - "scope": 9438, - "src": "13927:134:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11030 - ], - "body": { - "id": 8598, - "nodeType": "Block", - "src": "14601:47:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8595, - "name": "receipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8588, - "src": "14633:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt memory" - } - ], - "id": 8594, - "name": "_encodeReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13225, - "src": "14618:14:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Receipt_$11685_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (struct Attestation.Receipt memory) view returns (bytes32)" - } - }, - "id": 8596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14618:23:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 8593, - "id": 8597, - "nodeType": "Return", - "src": "14611:30:48" - } - ] - }, - "documentation": { - "id": 8585, - "nodeType": "StructuredDocumentation", - "src": "14067:429:48", - "text": " @notice Get the message hash that a indexer used to sign the receipt.\n Encodes a receipt using a domain separator, as described on\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\n @dev Return the message hash used to sign the receipt\n @param receipt Receipt returned by indexer and submitted by fisherman\n @return Message hash used to sign the receipt" - }, - "functionSelector": "6369df6b", - "id": 8599, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "encodeReceipt", - "nameLocation": "14510:13:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8590, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "14574:8:48" - }, - "parameters": { - "id": 8589, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8588, - "mutability": "mutable", - "name": "receipt", - "nameLocation": "14551:7:48", - "nodeType": "VariableDeclaration", - "scope": 8599, - "src": "14524:34:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt" - }, - "typeName": { - "id": 8587, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8586, - "name": "Attestation.Receipt", - "nameLocations": [ - "14524:11:48", - "14536:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11685, - "src": "14524:19:48" - }, - "referencedDeclaration": 11685, - "src": "14524:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_storage_ptr", - "typeString": "struct Attestation.Receipt" - } - }, - "visibility": "internal" - } - ], - "src": "14523:36:48" - }, - "returnParameters": { - "id": 8593, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8592, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8599, - "src": "14592:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8591, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "14592:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "14591:9:48" - }, - "scope": 9438, - "src": "14501:147:48", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11010 - ], - "body": { - "id": 8608, - "nodeType": "Block", - "src": "14821:42:48", - "statements": [ - { - "expression": { - "id": 8606, - "name": "fishermanRewardCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9460, - "src": "14838:18:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "functionReturnParameters": 8605, - "id": 8607, - "nodeType": "Return", - "src": "14831:25:48" - } - ] - }, - "documentation": { - "id": 8600, - "nodeType": "StructuredDocumentation", - "src": "14654:96:48", - "text": " @notice Get the verifier cut.\n @return Verifier cut in percentage (ppm)" - }, - "functionSelector": "84633713", - "id": 8609, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getVerifierCut", - "nameLocation": "14764:14:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8602, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "14795:8:48" - }, - "parameters": { - "id": 8601, - "nodeType": "ParameterList", - "parameters": [], - "src": "14778:2:48" - }, - "returnParameters": { - "id": 8605, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8604, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8609, - "src": "14813:6:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 8603, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "14813:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "14812:8:48" - }, - "scope": 9438, - "src": "14755:108:48", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11015 - ], - "body": { - "id": 8618, - "nodeType": "Block", - "src": "15033:37:48", - "statements": [ - { - "expression": { - "id": 8616, - "name": "disputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9454, - "src": "15050:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "functionReturnParameters": 8615, - "id": 8617, - "nodeType": "Return", - "src": "15043:20:48" - } - ] - }, - "documentation": { - "id": 8610, - "nodeType": "StructuredDocumentation", - "src": "14869:91:48", - "text": " @notice Get the dispute period.\n @return Dispute period in seconds" - }, - "functionSelector": "5aea0ec4", - "id": 8619, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getDisputePeriod", - "nameLocation": "14974:16:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8612, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "15007:8:48" - }, - "parameters": { - "id": 8611, - "nodeType": "ParameterList", - "parameters": [], - "src": "14990:2:48" - }, - "returnParameters": { - "id": 8615, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8614, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8619, - "src": "15025:6:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 8613, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "15025:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "15024:8:48" - }, - "scope": 9438, - "src": "14965:105:48", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11045 - ], - "body": { - "id": 8649, - "nodeType": "Block", - "src": "15272:186:48", - "statements": [ - { - "assignments": [ - 8632 - ], - "declarations": [ - { - "constant": false, - "id": 8632, - "mutability": "mutable", - "name": "provision", - "nameLocation": "15315:9:48", - "nodeType": "VariableDeclaration", - "scope": 8649, - "src": "15282:42:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 8631, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8630, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "15282:15:48", - "15298:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "15282:25:48" - }, - "referencedDeclaration": 3718, - "src": "15282:25:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "id": 8642, - "initialValue": { - "arguments": [ - { - "id": 8636, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8622, - "src": "15356:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 8639, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "15373:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - ], - "id": 8638, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "15365:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 8637, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15365:7:48", - "typeDescriptions": {} - } - }, - "id": 8640, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15365:24:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8633, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "15327:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 8634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15327:15:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 8635, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15343:12:48", - "memberName": "getProvision", - "nodeType": "MemberAccess", - "referencedDeclaration": 2784, - "src": "15327:28:48", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", - "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" - } - }, - "id": 8641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15327:63:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15282:108:48" - }, - { - "expression": { - "arguments": [ - { - "id": 8644, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8622, - "src": "15425:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8645, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8632, - "src": "15434:9:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 8646, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15444:6:48", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 3701, - "src": "15434:16:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8643, - "name": "_getStakeSnapshot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9437, - "src": "15407:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (address,uint256) view returns (uint256)" - } - }, - "id": 8647, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15407:44:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 8627, - "id": 8648, - "nodeType": "Return", - "src": "15400:51:48" - } - ] - }, - "documentation": { - "id": 8620, - "nodeType": "StructuredDocumentation", - "src": "15076:107:48", - "text": " @notice Get the stake snapshot for an indexer.\n @param indexer The indexer address" - }, - "functionSelector": "c133b429", - "id": 8650, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getStakeSnapshot", - "nameLocation": "15197:16:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8624, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "15245:8:48" - }, - "parameters": { - "id": 8623, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8622, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "15222:7:48", - "nodeType": "VariableDeclaration", - "scope": 8650, - "src": "15214:15:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8621, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15214:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15213:17:48" - }, - "returnParameters": { - "id": 8627, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8626, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8650, - "src": "15263:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8625, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15263:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15262:9:48" - }, - "scope": 9438, - "src": "15188:270:48", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11056 - ], - "body": { - "id": 8669, - "nodeType": "Block", - "src": "15812:78:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8665, - "name": "attestation1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8654, - "src": "15856:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - { - "id": 8666, - "name": "attestation2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8657, - "src": "15870:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - }, - { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - ], - "expression": { - "id": 8663, - "name": "Attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11920, - "src": "15829:11:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", - "typeString": "type(library Attestation)" - } - }, - "id": 8664, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15841:14:48", - "memberName": "areConflicting", - "nodeType": "MemberAccess", - "referencedDeclaration": 11783, - "src": "15829:26:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11699_memory_ptr_$_t_struct$_State_$11699_memory_ptr_$returns$_t_bool_$", - "typeString": "function (struct Attestation.State memory,struct Attestation.State memory) pure returns (bool)" - } - }, - "id": 8667, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15829:54:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 8662, - "id": 8668, - "nodeType": "Return", - "src": "15822:61:48" - } - ] - }, - "documentation": { - "id": 8651, - "nodeType": "StructuredDocumentation", - "src": "15464:169:48", - "text": " @notice Checks if two attestations are conflicting.\n @param attestation1 The first attestation\n @param attestation2 The second attestation" - }, - "functionSelector": "d36fc9d4", - "id": 8670, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "areConflictingAttestations", - "nameLocation": "15647:26:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8659, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "15788:8:48" - }, - "parameters": { - "id": 8658, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8654, - "mutability": "mutable", - "name": "attestation1", - "nameLocation": "15708:12:48", - "nodeType": "VariableDeclaration", - "scope": 8670, - "src": "15683:37:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 8653, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8652, - "name": "Attestation.State", - "nameLocations": [ - "15683:11:48", - "15695:5:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "15683:17:48" - }, - "referencedDeclaration": 11699, - "src": "15683:17:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8657, - "mutability": "mutable", - "name": "attestation2", - "nameLocation": "15755:12:48", - "nodeType": "VariableDeclaration", - "scope": 8670, - "src": "15730:37:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 8656, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8655, - "name": "Attestation.State", - "nameLocations": [ - "15730:11:48", - "15742:5:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "15730:17:48" - }, - "referencedDeclaration": 11699, - "src": "15730:17:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - } - ], - "src": "15673:100:48" - }, - "returnParameters": { - "id": 8662, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8661, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8670, - "src": "15806:4:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 8660, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "15806:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "15805:6:48" - }, - "scope": 9438, - "src": "15638:252:48", - "stateMutability": "pure", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 10990 - ], - "body": { - "id": 8726, - "nodeType": "Block", - "src": "16187:582:48", - "statements": [ - { - "assignments": [ - 8684 - ], - "declarations": [ - { - "constant": false, - "id": 8684, - "mutability": "mutable", - "name": "dispute", - "nameLocation": "16213:7:48", - "nodeType": "VariableDeclaration", - "scope": 8726, - "src": "16197:23:48", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - }, - "typeName": { - "id": 8683, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8682, - "name": "Dispute", - "nameLocations": [ - "16197:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "16197:7:48" - }, - "referencedDeclaration": 10738, - "src": "16197:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - }, - "visibility": "internal" - } - ], - "id": 8688, - "initialValue": { - "baseExpression": { - "id": 8685, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "16223:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8687, - "indexExpression": { - "id": 8686, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8673, - "src": "16232:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16223:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "16197:45:48" - }, - { - "expression": { - "id": 8695, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 8689, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8684, - "src": "16285:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8691, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16293:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "16285:14:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "expression": { - "id": 8692, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "16302:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 8693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16318:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "16302:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 8694, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "16332:8:48", - "memberName": "Rejected", - "nodeType": "MemberAccess", - "referencedDeclaration": 10714, - "src": "16302:38:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "src": "16285:55:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "id": 8696, - "nodeType": "ExpressionStatement", - "src": "16285:55:48" - }, - { - "expression": { - "arguments": [ - { - "id": 8701, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "16446:30:48", - "subExpression": { - "arguments": [ - { - "id": 8699, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8684, - "src": "16468:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - ], - "id": 8698, - "name": "_isDisputeInConflict", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9390, - "src": "16447:20:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", - "typeString": "function (struct IDisputeManager.Dispute memory) view returns (bool)" - } - }, - "id": 8700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16447:29:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 8703, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8673, - "src": "16529:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8704, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8684, - "src": "16540:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8705, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16548:16:48", - "memberName": "relatedDisputeId", - "nodeType": "MemberAccess", - "referencedDeclaration": 10727, - "src": "16540:24:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8702, - "name": "DisputeManagerMustAcceptRelatedDispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10902, - "src": "16490:38:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32,bytes32) pure returns (error)" - } - }, - "id": 8706, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16490:75:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8697, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "16425:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16425:150:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8708, - "nodeType": "ExpressionStatement", - "src": "16425:150:48" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 8712, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8684, - "src": "16651:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8713, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16659:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "16651:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8709, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "16626:11:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 8710, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16626:13:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 8711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16640:10:48", - "memberName": "burnTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 599, - "src": "16626:24:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", - "typeString": "function (contract IGraphToken,uint256)" - } - }, - "id": 8714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16626:41:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8715, - "nodeType": "ExpressionStatement", - "src": "16626:41:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 8717, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8673, - "src": "16699:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8718, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8684, - "src": "16710:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8719, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16718:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 10721, - "src": "16710:15:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8720, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8684, - "src": "16727:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8721, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16735:9:48", - "memberName": "fisherman", - "nodeType": "MemberAccess", - "referencedDeclaration": 10723, - "src": "16727:17:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8722, - "name": "dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8684, - "src": "16746:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 8723, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16754:7:48", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 10725, - "src": "16746:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8716, - "name": "DisputeRejected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10824, - "src": "16683:15:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (bytes32,address,address,uint256)" - } - }, - "id": 8724, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16683:79:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8725, - "nodeType": "EmitStatement", - "src": "16678:84:48" - } - ] - }, - "documentation": { - "id": 8671, - "nodeType": "StructuredDocumentation", - "src": "15896:183:48", - "text": " @notice The arbitrator rejects a dispute as being invalid.\n @dev Reject a dispute with Id `disputeId`\n @param disputeId Id of the dispute to be rejected" - }, - "functionSelector": "36167e03", - "id": 8727, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8677, - "kind": "modifierInvocation", - "modifierName": { - "id": 8676, - "name": "onlyArbitrator", - "nameLocations": [ - "16142:14:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8032, - "src": "16142:14:48" - }, - "nodeType": "ModifierInvocation", - "src": "16142:14:48" - }, - { - "arguments": [ - { - "id": 8679, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8673, - "src": "16176:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "id": 8680, - "kind": "modifierInvocation", - "modifierName": { - "id": 8678, - "name": "onlyPendingDispute", - "nameLocations": [ - "16157:18:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8065, - "src": "16157:18:48" - }, - "nodeType": "ModifierInvocation", - "src": "16157:29:48" - } - ], - "name": "rejectDispute", - "nameLocation": "16093:13:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8675, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "16133:8:48" - }, - "parameters": { - "id": 8674, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8673, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "16115:9:48", - "nodeType": "VariableDeclaration", - "scope": 8727, - "src": "16107:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8672, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "16107:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "16106:19:48" - }, - "returnParameters": { - "id": 8681, - "nodeType": "ParameterList", - "parameters": [], - "src": "16187:0:48" - }, - "scope": 9438, - "src": "16084:685:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [ - 11038 - ], - "body": { - "id": 8782, - "nodeType": "Block", - "src": "17022:568:48", - "statements": [ - { - "assignments": [ - 8737 - ], - "declarations": [ - { - "constant": false, - "id": 8737, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "17112:12:48", - "nodeType": "VariableDeclaration", - "scope": 8782, - "src": "17104:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8736, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17104:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8741, - "initialValue": { - "arguments": [ - { - "id": 8739, - "name": "attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8731, - "src": "17142:11:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - ], - "id": 8738, - "name": "_recoverSigner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13195, - "src": "17127:14:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11699_memory_ptr_$returns$_t_address_$", - "typeString": "function (struct Attestation.State memory) view returns (address)" - } - }, - "id": 8740, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17127:27:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17104:50:48" - }, - { - "assignments": [ - 8746 - ], - "declarations": [ - { - "constant": false, - "id": 8746, - "mutability": "mutable", - "name": "alloc", - "nameLocation": "17189:5:48", - "nodeType": "VariableDeclaration", - "scope": 8782, - "src": "17165:29:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 8745, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8744, - "name": "Allocation.State", - "nameLocations": [ - "17165:10:48", - "17176:5:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "17165:16:48" - }, - "referencedDeclaration": 11307, - "src": "17165:16:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 8751, - "initialValue": { - "arguments": [ - { - "id": 8749, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8737, - "src": "17227:12:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 8747, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "17197:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "id": 8748, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17213:13:48", - "memberName": "getAllocation", - "nodeType": "MemberAccess", - "referencedDeclaration": 11244, - "src": "17197:29:48", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (address) view external returns (struct Allocation.State memory)" - } - }, - "id": 8750, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17197:43:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17165:75:48" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8759, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8753, - "name": "alloc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8746, - "src": "17258:5:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 8754, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17264:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "17258:13:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 8757, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17283:1:48", - "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": 8756, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "17275:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 8755, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17275:7:48", - "typeDescriptions": {} - } - }, - "id": 8758, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17275:10:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "17258:27:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 8761, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8737, - "src": "17317:12:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8760, - "name": "DisputeManagerIndexerNotFound", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10906, - "src": "17287:29:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 8762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17287:43:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8752, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "17250:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8763, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17250:81:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8764, - "nodeType": "ExpressionStatement", - "src": "17250:81:48" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 8770, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8766, - "name": "alloc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8746, - "src": "17362:5:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 8767, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17368:20:48", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "17362:26:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 8768, - "name": "attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8731, - "src": "17392:11:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8769, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17404:20:48", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11692, - "src": "17392:32:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "17362:62:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "expression": { - "id": 8772, - "name": "alloc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8746, - "src": "17482:5:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 8773, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17488:20:48", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "17482:26:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8774, - "name": "attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8731, - "src": "17510:11:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8775, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17522:20:48", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11692, - "src": "17510:32:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8771, - "name": "DisputeManagerNonMatchingSubgraphDeployment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10912, - "src": "17438:43:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32,bytes32) pure returns (error)" - } - }, - "id": 8776, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17438:105:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8765, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "17341:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8777, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17341:212:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8778, - "nodeType": "ExpressionStatement", - "src": "17341:212:48" - }, - { - "expression": { - "expression": { - "id": 8779, - "name": "alloc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8746, - "src": "17570:5:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 8780, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17576:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "17570:13:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 8735, - "id": 8781, - "nodeType": "Return", - "src": "17563:20:48" - } - ] - }, - "documentation": { - "id": 8728, - "nodeType": "StructuredDocumentation", - "src": "16775:143:48", - "text": " @notice Returns the indexer that signed an attestation.\n @param attestation Attestation\n @return indexer address" - }, - "functionSelector": "c9747f51", - "id": 8783, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getAttestationIndexer", - "nameLocation": "16932:21:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8732, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8731, - "mutability": "mutable", - "name": "attestation", - "nameLocation": "16979:11:48", - "nodeType": "VariableDeclaration", - "scope": 8783, - "src": "16954:36:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 8730, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8729, - "name": "Attestation.State", - "nameLocations": [ - "16954:11:48", - "16966:5:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "16954:17:48" - }, - "referencedDeclaration": 11699, - "src": "16954:17:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - } - ], - "src": "16953:38:48" - }, - "returnParameters": { - "id": 8735, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8734, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8783, - "src": "17013:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8733, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17013:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17012:9:48" - }, - "scope": 9438, - "src": "16923:667:48", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [ - 11022 - ], - "body": { - "id": 8800, - "nodeType": "Block", - "src": "17860:72:48", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - }, - "id": 8798, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "id": 8792, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "17877:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8794, - "indexExpression": { - "id": 8793, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8786, - "src": "17886:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17877:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "id": 8795, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17897:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "17877:26:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "id": 8796, - "name": "DisputeStatus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10718, - "src": "17907:13:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 8797, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "17921:4:48", - "memberName": "Null", - "nodeType": "MemberAccess", - "referencedDeclaration": 10712, - "src": "17907:18:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "src": "17877:48:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 8791, - "id": 8799, - "nodeType": "Return", - "src": "17870:55:48" - } - ] - }, - "documentation": { - "id": 8784, - "nodeType": "StructuredDocumentation", - "src": "17596:178:48", - "text": " @notice Return whether a dispute exists or not.\n @dev Return if dispute with Id `disputeId` exists\n @param disputeId True if dispute already exists" - }, - "functionSelector": "be41f384", - "id": 8801, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isDisputeCreated", - "nameLocation": "17788:16:48", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8788, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "17836:8:48" - }, - "parameters": { - "id": 8787, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8786, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "17813:9:48", - "nodeType": "VariableDeclaration", - "scope": 8801, - "src": "17805:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8785, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "17805:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "17804:19:48" - }, - "returnParameters": { - "id": 8791, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8790, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8801, - "src": "17854:4:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 8789, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "17854:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "17853:6:48" - }, - "scope": 9438, - "src": "17779:153:48", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 8912, - "nodeType": "Block", - "src": "18694:1501:48", - "statements": [ - { - "assignments": [ - 8817 - ], - "declarations": [ - { - "constant": false, - "id": 8817, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "18767:7:48", - "nodeType": "VariableDeclaration", - "scope": 8912, - "src": "18759:15:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8816, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18759:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8821, - "initialValue": { - "arguments": [ - { - "id": 8819, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8809, - "src": "18799:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - ], - "id": 8818, - "name": "getAttestationIndexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8783, - "src": "18777:21:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11699_memory_ptr_$returns$_t_address_$", - "typeString": "function (struct Attestation.State memory) view returns (address)" - } - }, - "id": 8820, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18777:35:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "18759:53:48" - }, - { - "assignments": [ - 8826 - ], - "declarations": [ - { - "constant": false, - "id": 8826, - "mutability": "mutable", - "name": "provision", - "nameLocation": "18893:9:48", - "nodeType": "VariableDeclaration", - "scope": 8912, - "src": "18860:42:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 8825, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8824, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "18860:15:48", - "18876:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "18860:25:48" - }, - "referencedDeclaration": 3718, - "src": "18860:25:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "id": 8836, - "initialValue": { - "arguments": [ - { - "id": 8830, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8817, - "src": "18934:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 8833, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "18951:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - ], - "id": 8832, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "18943:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 8831, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18943:7:48", - "typeDescriptions": {} - } - }, - "id": 8834, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18943:24:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8827, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "18905:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 8828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18905:15:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 8829, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18921:12:48", - "memberName": "getProvision", - "nodeType": "MemberAccess", - "referencedDeclaration": 2784, - "src": "18905:28:48", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", - "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" - } - }, - "id": 8835, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18905:63:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "18860:108:48" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8838, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8826, - "src": "18986:9:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 8839, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18996:6:48", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 3701, - "src": "18986:16:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 8840, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19006:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "18986:21:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8842, - "name": "DisputeManagerZeroTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10863, - "src": "19009:24:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 8843, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19009:26:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8837, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "18978:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8844, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18978:58:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8845, - "nodeType": "ExpressionStatement", - "src": "18978:58:48" - }, - { - "assignments": [ - 8847 - ], - "declarations": [ - { - "constant": false, - "id": 8847, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "19085:9:48", - "nodeType": "VariableDeclaration", - "scope": 8912, - "src": "19077:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8846, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "19077:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 8861, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "expression": { - "id": 8851, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8809, - "src": "19154:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8852, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19167:10:48", - "memberName": "requestCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11688, - "src": "19154:23:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8853, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8809, - "src": "19195:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8854, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19208:11:48", - "memberName": "responseCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11690, - "src": "19195:24:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 8855, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8809, - "src": "19237:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8856, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19250:20:48", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11692, - "src": "19237:33:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 8857, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8817, - "src": "19288:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8858, - "name": "_fisherman", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8804, - "src": "19313:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 8849, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "19120:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 8850, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "19124:12:48", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "19120:16:48", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 8859, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19120:217:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 8848, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "19097:9:48", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 8860, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19097:250:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "19077:270:48" - }, - { - "expression": { - "arguments": [ - { - "id": 8866, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "19442:28:48", - "subExpression": { - "arguments": [ - { - "id": 8864, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8847, - "src": "19460:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8863, - "name": "isDisputeCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8801, - "src": "19443:16:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (bytes32) view returns (bool)" - } - }, - "id": 8865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19443:27:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 8868, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8847, - "src": "19508:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8867, - "name": "DisputeManagerDisputeAlreadyCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10894, - "src": "19472:35:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32) pure returns (error)" - } - }, - "id": 8869, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19472:46:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8862, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "19434:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8870, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19434:85:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8871, - "nodeType": "ExpressionStatement", - "src": "19434:85:48" - }, - { - "assignments": [ - 8873 - ], - "declarations": [ - { - "constant": false, - "id": 8873, - "mutability": "mutable", - "name": "stakeSnapshot", - "nameLocation": "19563:13:48", - "nodeType": "VariableDeclaration", - "scope": 8912, - "src": "19555:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8872, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19555:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8879, - "initialValue": { - "arguments": [ - { - "id": 8875, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8817, - "src": "19597:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 8876, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8826, - "src": "19606:9:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 8877, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19616:6:48", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 3701, - "src": "19606:16:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8874, - "name": "_getStakeSnapshot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9437, - "src": "19579:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (address,uint256) view returns (uint256)" - } - }, - "id": 8878, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19579:44:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "19555:68:48" - }, - { - "expression": { - "id": 8897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 8880, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "19633:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 8882, - "indexExpression": { - "id": 8881, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8847, - "src": "19642:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "19633:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 8884, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8817, - "src": "19676:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8885, - "name": "_fisherman", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8804, - "src": "19697:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8886, - "name": "_deposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8806, - "src": "19721:8:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "30", - "id": 8887, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19743:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "expression": { - "id": 8888, - "name": "DisputeType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10710, - "src": "19781:11:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeType_$10710_$", - "typeString": "type(enum IDisputeManager.DisputeType)" - } - }, - "id": 8889, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "19793:12:48", - "memberName": "QueryDispute", - "nodeType": "MemberAccess", - "referencedDeclaration": 10709, - "src": "19781:24:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeType_$10710", - "typeString": "enum IDisputeManager.DisputeType" - } - }, - { - "expression": { - "expression": { - "id": 8890, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "19819:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 8891, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19835:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "19819:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 8892, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "19849:7:48", - "memberName": "Pending", - "nodeType": "MemberAccess", - "referencedDeclaration": 10716, - "src": "19819:37:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - { - "expression": { - "id": 8893, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "19870:5:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 8894, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19876:9:48", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "19870:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8895, - "name": "stakeSnapshot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8873, - "src": "19899:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_enum$_DisputeType_$10710", - "typeString": "enum IDisputeManager.DisputeType" - }, - { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8883, - "name": "Dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10738, - "src": "19655:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Dispute_$10738_storage_ptr_$", - "typeString": "type(struct IDisputeManager.Dispute storage pointer)" - } - }, - "id": 8896, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19655:267:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute memory" - } - }, - "src": "19633:289:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "id": 8898, - "nodeType": "ExpressionStatement", - "src": "19633:289:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 8900, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8847, - "src": "19971:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 8901, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8817, - "src": "19994:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8902, - "name": "_fisherman", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8804, - "src": "20015:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8903, - "name": "_deposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8806, - "src": "20039:8:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 8904, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8809, - "src": "20061:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 8905, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "20074:20:48", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11692, - "src": "20061:33:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 8906, - "name": "_attestationData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8811, - "src": "20108:16:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 8907, - "name": "stakeSnapshot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8873, - "src": "20138:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8899, - "name": "QueryDisputeCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10785, - "src": "19938:19:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$", - "typeString": "function (bytes32,address,address,uint256,bytes32,bytes memory,uint256)" - } - }, - "id": 8908, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19938:223:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8909, - "nodeType": "EmitStatement", - "src": "19933:228:48" - }, - { - "expression": { - "id": 8910, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8847, - "src": "20179:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 8815, - "id": 8911, - "nodeType": "Return", - "src": "20172:16:48" - } - ] - }, - "documentation": { - "id": 8802, - "nodeType": "StructuredDocumentation", - "src": "17938:535:48", - "text": " @notice Create a query dispute passing the parsed attestation.\n To be used in createQueryDispute() and createQueryDisputeConflict()\n to avoid calling parseAttestation() multiple times\n `attestationData` is only passed to be emitted\n @param _fisherman Creator of dispute\n @param _deposit Amount of tokens staked as deposit\n @param _attestation Attestation struct parsed from bytes\n @param _attestationData Attestation bytes submitted by the fisherman\n @return DisputeId" - }, - "id": 8913, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_createQueryDisputeWithAttestation", - "nameLocation": "18487:34:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8812, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8804, - "mutability": "mutable", - "name": "_fisherman", - "nameLocation": "18539:10:48", - "nodeType": "VariableDeclaration", - "scope": 8913, - "src": "18531:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8803, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18531:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8806, - "mutability": "mutable", - "name": "_deposit", - "nameLocation": "18567:8:48", - "nodeType": "VariableDeclaration", - "scope": 8913, - "src": "18559:16:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8805, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18559:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8809, - "mutability": "mutable", - "name": "_attestation", - "nameLocation": "18610:12:48", - "nodeType": "VariableDeclaration", - "scope": 8913, - "src": "18585:37:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 8808, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8807, - "name": "Attestation.State", - "nameLocations": [ - "18585:11:48", - "18597:5:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "18585:17:48" - }, - "referencedDeclaration": 11699, - "src": "18585:17:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8811, - "mutability": "mutable", - "name": "_attestationData", - "nameLocation": "18645:16:48", - "nodeType": "VariableDeclaration", - "scope": 8913, - "src": "18632:29:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 8810, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "18632:5:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "18521:146:48" - }, - "returnParameters": { - "id": 8815, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8814, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8913, - "src": "18685:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8813, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "18685:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "18684:9:48" - }, - "scope": 9438, - "src": "18478:1717:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9039, - "nodeType": "Block", - "src": "20668:1283:48", - "statements": [ - { - "assignments": [ - 8928 - ], - "declarations": [ - { - "constant": false, - "id": 8928, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "20716:9:48", - "nodeType": "VariableDeclaration", - "scope": 9039, - "src": "20708:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8927, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "20708:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 8936, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 8932, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8920, - "src": "20755:13:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8933, - "name": "_poi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8922, - "src": "20770:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 8930, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "20738:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 8931, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "20742:12:48", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "20738:16:48", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 8934, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20738:37:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 8929, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "20728:9:48", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 8935, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20728:48:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "20708:68:48" - }, - { - "expression": { - "arguments": [ - { - "id": 8941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "20853:28:48", - "subExpression": { - "arguments": [ - { - "id": 8939, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8928, - "src": "20871:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8938, - "name": "isDisputeCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8801, - "src": "20854:16:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (bytes32) view returns (bool)" - } - }, - "id": 8940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20854:27:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 8943, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8928, - "src": "20919:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 8942, - "name": "DisputeManagerDisputeAlreadyCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10894, - "src": "20883:35:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$", - "typeString": "function (bytes32) pure returns (error)" - } - }, - "id": 8944, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20883:46:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8937, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "20845:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20845:85:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8946, - "nodeType": "ExpressionStatement", - "src": "20845:85:48" - }, - { - "assignments": [ - 8951 - ], - "declarations": [ - { - "constant": false, - "id": 8951, - "mutability": "mutable", - "name": "alloc", - "nameLocation": "20998:5:48", - "nodeType": "VariableDeclaration", - "scope": 9039, - "src": "20974:29:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 8950, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8949, - "name": "Allocation.State", - "nameLocations": [ - "20974:10:48", - "20985:5:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "20974:16:48" - }, - "referencedDeclaration": 11307, - "src": "20974:16:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 8956, - "initialValue": { - "arguments": [ - { - "id": 8954, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8920, - "src": "21036:13:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 8952, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "21006:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "id": 8953, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21022:13:48", - "memberName": "getAllocation", - "nodeType": "MemberAccess", - "referencedDeclaration": 11244, - "src": "21006:29:48", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (address) view external returns (struct Allocation.State memory)" - } - }, - "id": 8955, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21006:44:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "20974:76:48" - }, - { - "assignments": [ - 8958 - ], - "declarations": [ - { - "constant": false, - "id": 8958, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "21068:7:48", - "nodeType": "VariableDeclaration", - "scope": 9039, - "src": "21060:15:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8957, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "21060:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8961, - "initialValue": { - "expression": { - "id": 8959, - "name": "alloc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8951, - "src": "21078:5:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 8960, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21084:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "21078:13:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "21060:31:48" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8968, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8963, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8958, - "src": "21109:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 8966, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "21128:1:48", - "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": 8965, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "21120:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 8964, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "21120:7:48", - "typeDescriptions": {} - } - }, - "id": 8967, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21120:10:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "21109:21:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 8970, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8920, - "src": "21162:13:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8969, - "name": "DisputeManagerIndexerNotFound", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10906, - "src": "21132:29:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 8971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21132:44:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8962, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "21101:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21101:76:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8973, - "nodeType": "ExpressionStatement", - "src": "21101:76:48" - }, - { - "assignments": [ - 8978 - ], - "declarations": [ - { - "constant": false, - "id": 8978, - "mutability": "mutable", - "name": "provision", - "nameLocation": "21263:9:48", - "nodeType": "VariableDeclaration", - "scope": 9039, - "src": "21230:42:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 8977, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8976, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "21230:15:48", - "21246:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "21230:25:48" - }, - "referencedDeclaration": 3718, - "src": "21230:25:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "id": 8988, - "initialValue": { - "arguments": [ - { - "id": 8982, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8958, - "src": "21304:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 8985, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "21321:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - ], - "id": 8984, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "21313:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 8983, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "21313:7:48", - "typeDescriptions": {} - } - }, - "id": 8986, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21313:24:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8979, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "21275:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 8980, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21275:15:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 8981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21291:12:48", - "memberName": "getProvision", - "nodeType": "MemberAccess", - "referencedDeclaration": 2784, - "src": "21275:28:48", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", - "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" - } - }, - "id": 8987, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21275:63:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "21230:108:48" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8993, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8990, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8978, - "src": "21356:9:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 8991, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21366:6:48", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 3701, - "src": "21356:16:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 8992, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "21376:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "21356:21:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8994, - "name": "DisputeManagerZeroTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10863, - "src": "21379:24:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 8995, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21379:26:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 8989, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "21348:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 8996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21348:58:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8997, - "nodeType": "ExpressionStatement", - "src": "21348:58:48" - }, - { - "assignments": [ - 8999 - ], - "declarations": [ - { - "constant": false, - "id": 8999, - "mutability": "mutable", - "name": "stakeSnapshot", - "nameLocation": "21450:13:48", - "nodeType": "VariableDeclaration", - "scope": 9039, - "src": "21442:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8998, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "21442:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9005, - "initialValue": { - "arguments": [ - { - "id": 9001, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8958, - "src": "21484:7:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 9002, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8978, - "src": "21493:9:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 9003, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21503:6:48", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 3701, - "src": "21493:16:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9000, - "name": "_getStakeSnapshot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9437, - "src": "21466:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (address,uint256) view returns (uint256)" - } - }, - "id": 9004, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21466:44:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "21442:68:48" - }, - { - "expression": { - "id": 9024, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 9006, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "21520:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 9008, - "indexExpression": { - "id": 9007, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8928, - "src": "21529:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "21520:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 9010, - "name": "alloc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8951, - "src": "21563:5:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 9011, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21569:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "21563:13:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9012, - "name": "_fisherman", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8916, - "src": "21590:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9013, - "name": "_deposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8918, - "src": "21614:8:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "30", - "id": 9014, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "21636:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "expression": { - "id": 9015, - "name": "DisputeType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10710, - "src": "21651:11:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeType_$10710_$", - "typeString": "type(enum IDisputeManager.DisputeType)" - } - }, - "id": 9016, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "21663:15:48", - "memberName": "IndexingDispute", - "nodeType": "MemberAccess", - "referencedDeclaration": 10708, - "src": "21651:27:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeType_$10710", - "typeString": "enum IDisputeManager.DisputeType" - } - }, - { - "expression": { - "expression": { - "id": 9017, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "21692:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 9018, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21708:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "21692:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 9019, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "21722:7:48", - "memberName": "Pending", - "nodeType": "MemberAccess", - "referencedDeclaration": 10716, - "src": "21692:37:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - { - "expression": { - "id": 9020, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "21743:5:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 9021, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21749:9:48", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "21743:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9022, - "name": "stakeSnapshot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8999, - "src": "21772:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_enum$_DisputeType_$10710", - "typeString": "enum IDisputeManager.DisputeType" - }, - { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9009, - "name": "Dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10738, - "src": "21542:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Dispute_$10738_storage_ptr_$", - "typeString": "type(struct IDisputeManager.Dispute storage pointer)" - } - }, - "id": 9023, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21542:253:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute memory" - } - }, - "src": "21520:275:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "id": 9025, - "nodeType": "ExpressionStatement", - "src": "21520:275:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9027, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8928, - "src": "21834:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 9028, - "name": "alloc", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8951, - "src": "21845:5:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 9029, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21851:7:48", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "21845:13:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9030, - "name": "_fisherman", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8916, - "src": "21860:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9031, - "name": "_deposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8918, - "src": "21872:8:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9032, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8920, - "src": "21882:13:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9033, - "name": "_poi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8922, - "src": "21897:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 9034, - "name": "stakeSnapshot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8999, - "src": "21903:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9026, - "name": "IndexingDisputeCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10802, - "src": "21811:22:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes32_$_t_uint256_$returns$__$", - "typeString": "function (bytes32,address,address,uint256,address,bytes32,uint256)" - } - }, - "id": 9035, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21811:106:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9036, - "nodeType": "EmitStatement", - "src": "21806:111:48" - }, - { - "expression": { - "id": 9037, - "name": "disputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8928, - "src": "21935:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 8926, - "id": 9038, - "nodeType": "Return", - "src": "21928:16:48" - } - ] - }, - "documentation": { - "id": 8914, - "nodeType": "StructuredDocumentation", - "src": "20201:277:48", - "text": " @notice Create indexing dispute internal function.\n @param _fisherman The fisherman creating the dispute\n @param _deposit Amount of tokens staked as deposit\n @param _allocationId Allocation disputed\n @param _poi The POI being disputed" - }, - "id": 9040, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_createIndexingDisputeWithAllocation", - "nameLocation": "20492:36:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8923, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8916, - "mutability": "mutable", - "name": "_fisherman", - "nameLocation": "20546:10:48", - "nodeType": "VariableDeclaration", - "scope": 9040, - "src": "20538:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8915, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20538:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8918, - "mutability": "mutable", - "name": "_deposit", - "nameLocation": "20574:8:48", - "nodeType": "VariableDeclaration", - "scope": 9040, - "src": "20566:16:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8917, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "20566:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8920, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "20600:13:48", - "nodeType": "VariableDeclaration", - "scope": 9040, - "src": "20592:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8919, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20592:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8922, - "mutability": "mutable", - "name": "_poi", - "nameLocation": "20631:4:48", - "nodeType": "VariableDeclaration", - "scope": 9040, - "src": "20623:12:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8921, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "20623:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "20528:113:48" - }, - "returnParameters": { - "id": 8926, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8925, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 9040, - "src": "20659:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 8924, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "20659:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "20658:9:48" - }, - "scope": 9438, - "src": "20483:1468:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9078, - "nodeType": "Block", - "src": "22213:322:48", - "statements": [ - { - "condition": { - "arguments": [ - { - "id": 9050, - "name": "_dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9044, - "src": "22248:8:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute memory" - } - ], - "id": 9049, - "name": "_isDisputeInConflict", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9390, - "src": "22227:20:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", - "typeString": "function (struct IDisputeManager.Dispute memory) view returns (bool)" - } - }, - "id": 9051, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22227:30:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9075, - "nodeType": "IfStatement", - "src": "22223:284:48", - "trueBody": { - "id": 9074, - "nodeType": "Block", - "src": "22259:248:48", - "statements": [ - { - "assignments": [ - 9053 - ], - "declarations": [ - { - "constant": false, - "id": 9053, - "mutability": "mutable", - "name": "relatedDisputeId", - "nameLocation": "22281:16:48", - "nodeType": "VariableDeclaration", - "scope": 9074, - "src": "22273:24:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 9052, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "22273:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 9056, - "initialValue": { - "expression": { - "id": 9054, - "name": "_dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9044, - "src": "22300:8:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute memory" - } - }, - "id": 9055, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22309:16:48", - "memberName": "relatedDisputeId", - "nodeType": "MemberAccess", - "referencedDeclaration": 10727, - "src": "22300:25:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "22273:52:48" - }, - { - "assignments": [ - 9059 - ], - "declarations": [ - { - "constant": false, - "id": 9059, - "mutability": "mutable", - "name": "relatedDispute", - "nameLocation": "22355:14:48", - "nodeType": "VariableDeclaration", - "scope": 9074, - "src": "22339:30:48", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - }, - "typeName": { - "id": 9058, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9057, - "name": "Dispute", - "nameLocations": [ - "22339:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "22339:7:48" - }, - "referencedDeclaration": 10738, - "src": "22339:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - }, - "visibility": "internal" - } - ], - "id": 9063, - "initialValue": { - "baseExpression": { - "id": 9060, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "22372:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 9062, - "indexExpression": { - "id": 9061, - "name": "relatedDisputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9053, - "src": "22381:16:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "22372:26:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "22339:59:48" - }, - { - "expression": { - "id": 9070, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 9064, - "name": "relatedDispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9059, - "src": "22412:14:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 9066, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "22427:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "22412:21:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "expression": { - "id": 9067, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "22436:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 9068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22452:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "22436:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 9069, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "22466:5:48", - "memberName": "Drawn", - "nodeType": "MemberAccess", - "referencedDeclaration": 10715, - "src": "22436:35:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "src": "22412:59:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "id": 9071, - "nodeType": "ExpressionStatement", - "src": "22412:59:48" - }, - { - "expression": { - "hexValue": "74727565", - "id": 9072, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "22492:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 9048, - "id": 9073, - "nodeType": "Return", - "src": "22485:11:48" - } - ] - } - }, - { - "expression": { - "hexValue": "66616c7365", - "id": 9076, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "22523:5:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "functionReturnParameters": 9048, - "id": 9077, - "nodeType": "Return", - "src": "22516:12:48" - } - ] - }, - "documentation": { - "id": 9041, - "nodeType": "StructuredDocumentation", - "src": "21957:171:48", - "text": " @notice Draw the conflicting dispute if there is any for the one passed to this function.\n @param _dispute Dispute\n @return True if resolved" - }, - "id": 9079, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_drawDisputeInConflict", - "nameLocation": "22142:22:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9045, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9044, - "mutability": "mutable", - "name": "_dispute", - "nameLocation": "22180:8:48", - "nodeType": "VariableDeclaration", - "scope": 9079, - "src": "22165:23:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute" - }, - "typeName": { - "id": 9043, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9042, - "name": "Dispute", - "nameLocations": [ - "22165:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "22165:7:48" - }, - "referencedDeclaration": 10738, - "src": "22165:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - }, - "visibility": "internal" - } - ], - "src": "22164:25:48" - }, - "returnParameters": { - "id": 9048, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9047, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 9079, - "src": "22207:4:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9046, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "22207:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "22206:6:48" - }, - "scope": 9438, - "src": "22133:402:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9117, - "nodeType": "Block", - "src": "22802:326:48", - "statements": [ - { - "condition": { - "arguments": [ - { - "id": 9089, - "name": "_dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9083, - "src": "22837:8:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute memory" - } - ], - "id": 9088, - "name": "_isDisputeInConflict", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9390, - "src": "22816:20:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Dispute_$10738_memory_ptr_$returns$_t_bool_$", - "typeString": "function (struct IDisputeManager.Dispute memory) view returns (bool)" - } - }, - "id": 9090, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22816:30:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9114, - "nodeType": "IfStatement", - "src": "22812:288:48", - "trueBody": { - "id": 9113, - "nodeType": "Block", - "src": "22848:252:48", - "statements": [ - { - "assignments": [ - 9092 - ], - "declarations": [ - { - "constant": false, - "id": 9092, - "mutability": "mutable", - "name": "relatedDisputeId", - "nameLocation": "22870:16:48", - "nodeType": "VariableDeclaration", - "scope": 9113, - "src": "22862:24:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 9091, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "22862:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 9095, - "initialValue": { - "expression": { - "id": 9093, - "name": "_dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9083, - "src": "22889:8:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute memory" - } - }, - "id": 9094, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22898:16:48", - "memberName": "relatedDisputeId", - "nodeType": "MemberAccess", - "referencedDeclaration": 10727, - "src": "22889:25:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "22862:52:48" - }, - { - "assignments": [ - 9098 - ], - "declarations": [ - { - "constant": false, - "id": 9098, - "mutability": "mutable", - "name": "relatedDispute", - "nameLocation": "22944:14:48", - "nodeType": "VariableDeclaration", - "scope": 9113, - "src": "22928:30:48", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - }, - "typeName": { - "id": 9097, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9096, - "name": "Dispute", - "nameLocations": [ - "22928:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "22928:7:48" - }, - "referencedDeclaration": 10738, - "src": "22928:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - }, - "visibility": "internal" - } - ], - "id": 9102, - "initialValue": { - "baseExpression": { - "id": 9099, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "22961:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 9101, - "indexExpression": { - "id": 9100, - "name": "relatedDisputeId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9092, - "src": "22970:16:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "22961:26:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "22928:59:48" - }, - { - "expression": { - "id": 9109, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 9103, - "name": "relatedDispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9098, - "src": "23001:14:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute storage pointer" - } - }, - "id": 9105, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "23016:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "23001:21:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "expression": { - "id": 9106, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "23025:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 9107, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23041:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "23025:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 9108, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "23055:9:48", - "memberName": "Cancelled", - "nodeType": "MemberAccess", - "referencedDeclaration": 10717, - "src": "23025:39:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "src": "23001:63:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "id": 9110, - "nodeType": "ExpressionStatement", - "src": "23001:63:48" - }, - { - "expression": { - "hexValue": "74727565", - "id": 9111, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23085:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 9087, - "id": 9112, - "nodeType": "Return", - "src": "23078:11:48" - } - ] - } - }, - { - "expression": { - "hexValue": "66616c7365", - "id": 9115, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23116:5:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "functionReturnParameters": 9087, - "id": 9116, - "nodeType": "Return", - "src": "23109:12:48" - } - ] - }, - "documentation": { - "id": 9080, - "nodeType": "StructuredDocumentation", - "src": "22541:174:48", - "text": " @notice Cancel the conflicting dispute if there is any for the one passed to this function.\n @param _dispute Dispute\n @return True if cancelled" - }, - "id": 9118, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_cancelDisputeInConflict", - "nameLocation": "22729:24:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9084, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9083, - "mutability": "mutable", - "name": "_dispute", - "nameLocation": "22769:8:48", - "nodeType": "VariableDeclaration", - "scope": 9118, - "src": "22754:23:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute" - }, - "typeName": { - "id": 9082, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9081, - "name": "Dispute", - "nameLocations": [ - "22754:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "22754:7:48" - }, - "referencedDeclaration": 10738, - "src": "22754:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - }, - "visibility": "internal" - } - ], - "src": "22753:25:48" - }, - "returnParameters": { - "id": 9087, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9086, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 9118, - "src": "22796:4:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9085, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "22796:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "22795:6:48" - }, - "scope": 9438, - "src": "22720:408:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9130, - "nodeType": "Block", - "src": "23252:139:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 9125, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "23357:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 9126, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23361:6:48", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "23357:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9127, - "name": "disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9457, - "src": "23369:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9122, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "23332:11:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 9123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23332:13:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 9124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23346:10:48", - "memberName": "pullTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 552, - "src": "23332:24:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", - "typeString": "function (contract IGraphToken,address,uint256)" - } - }, - "id": 9128, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23332:52:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9129, - "nodeType": "ExpressionStatement", - "src": "23332:52:48" - } - ] - }, - "documentation": { - "id": 9119, - "nodeType": "StructuredDocumentation", - "src": "23134:72:48", - "text": " @notice Pull `disputeDeposit` from fisherman account." - }, - "id": 9131, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_pullFishermanDeposit", - "nameLocation": "23220:21:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9120, - "nodeType": "ParameterList", - "parameters": [], - "src": "23241:2:48" - }, - "returnParameters": { - "id": 9121, - "nodeType": "ParameterList", - "parameters": [], - "src": "23252:0:48" - }, - "scope": 9438, - "src": "23211:180:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9211, - "nodeType": "Block", - "src": "23967:906:48", - "statements": [ - { - "assignments": [ - 9147 - ], - "declarations": [ - { - "constant": false, - "id": 9147, - "mutability": "mutable", - "name": "provision", - "nameLocation": "24054:9:48", - "nodeType": "VariableDeclaration", - "scope": 9211, - "src": "24021:42:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - }, - "typeName": { - "id": 9146, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9145, - "name": "IHorizonStaking.Provision", - "nameLocations": [ - "24021:15:48", - "24037:9:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3718, - "src": "24021:25:48" - }, - "referencedDeclaration": 3718, - "src": "24021:25:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_storage_ptr", - "typeString": "struct IHorizonStakingTypes.Provision" - } - }, - "visibility": "internal" - } - ], - "id": 9157, - "initialValue": { - "arguments": [ - { - "id": 9151, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9134, - "src": "24095:8:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 9154, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "24113:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - ], - "id": 9153, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "24105:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9152, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "24105:7:48", - "typeDescriptions": {} - } - }, - "id": 9155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24105:24:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9148, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "24066:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 9149, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24066:15:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 9150, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24082:12:48", - "memberName": "getProvision", - "nodeType": "MemberAccess", - "referencedDeclaration": 2784, - "src": "24066:28:48", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_Provision_$3718_memory_ptr_$", - "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.Provision memory)" - } - }, - "id": 9156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24066:64:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "24021:109:48" - }, - { - "assignments": [ - 9159 - ], - "declarations": [ - { - "constant": false, - "id": 9159, - "mutability": "mutable", - "name": "maxTokensSlash", - "nameLocation": "24198:14:48", - "nodeType": "VariableDeclaration", - "scope": 9211, - "src": "24190:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9158, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24190:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9164, - "initialValue": { - "arguments": [ - { - "id": 9162, - "name": "maxSlashingCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9463, - "src": "24243:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "id": 9160, - "name": "_tokensStakeSnapshot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9138, - "src": "24215:20:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24236:6:48", - "memberName": "mulPPM", - "nodeType": "MemberAccess", - "referencedDeclaration": 4219, - "src": "24215:27:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 9163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24215:43:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "24190:68:48" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 9172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9168, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9166, - "name": "_tokensSlash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9136, - "src": "24289:12:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 9167, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "24305:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "24289:17:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9169, - "name": "_tokensSlash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9136, - "src": "24310:12:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 9170, - "name": "maxTokensSlash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9159, - "src": "24326:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24310:30:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "24289:51:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 9174, - "name": "_tokensSlash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9136, - "src": "24387:12:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9175, - "name": "maxTokensSlash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9159, - "src": "24401:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9173, - "name": "DisputeManagerInvalidTokensSlash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10885, - "src": "24354:32:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 9176, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24354:62:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9165, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "24268:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24268:158:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9178, - "nodeType": "ExpressionStatement", - "src": "24268:158:48" - }, - { - "assignments": [ - 9180 - ], - "declarations": [ - { - "constant": false, - "id": 9180, - "mutability": "mutable", - "name": "maxRewardableTokens", - "nameLocation": "24602:19:48", - "nodeType": "VariableDeclaration", - "scope": 9211, - "src": "24594:27:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9179, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24594:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9187, - "initialValue": { - "arguments": [ - { - "id": 9183, - "name": "_tokensSlash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9136, - "src": "24633:12:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 9184, - "name": "provision", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9147, - "src": "24647:9:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Provision_$3718_memory_ptr", - "typeString": "struct IHorizonStakingTypes.Provision memory" - } - }, - "id": 9185, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24657:6:48", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 3701, - "src": "24647:16:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 9181, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7858, - "src": "24624:4:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Math_$7858_$", - "typeString": "type(library Math)" - } - }, - "id": 9182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24629:3:48", - "memberName": "min", - "nodeType": "MemberAccess", - "referencedDeclaration": 7009, - "src": "24624:8:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 9186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24624:40:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "24594:70:48" - }, - { - "assignments": [ - 9189 - ], - "declarations": [ - { - "constant": false, - "id": 9189, - "mutability": "mutable", - "name": "tokensRewards", - "nameLocation": "24682:13:48", - "nodeType": "VariableDeclaration", - "scope": 9211, - "src": "24674:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9188, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24674:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9197, - "initialValue": { - "arguments": [ - { - "id": 9195, - "name": "maxRewardableTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9180, - "src": "24733:19:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 9192, - "name": "fishermanRewardCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9460, - "src": "24706:18:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 9191, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "24698:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 9190, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24698:7:48", - "typeDescriptions": {} - } - }, - "id": 9193, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24698:27:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24726:6:48", - "memberName": "mulPPM", - "nodeType": "MemberAccess", - "referencedDeclaration": 4219, - "src": "24698:34:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 9196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24698:55:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "24674:79:48" - }, - { - "expression": { - "arguments": [ - { - "id": 9201, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9134, - "src": "24786:8:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 9204, - "name": "_tokensSlash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9136, - "src": "24807:12:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9205, - "name": "tokensRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9189, - "src": "24821:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 9202, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "24796:3:48", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 9203, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "24800:6:48", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "24796:10:48", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 9206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24796:39:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 9198, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "24764:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "id": 9200, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24780:5:48", - "memberName": "slash", - "nodeType": "MemberAccess", - "referencedDeclaration": 1287, - "src": "24764:21:48", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (address,bytes memory) external" - } - }, - "id": 9207, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24764:72:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9208, - "nodeType": "ExpressionStatement", - "src": "24764:72:48" - }, - { - "expression": { - "id": 9209, - "name": "tokensRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9189, - "src": "24853:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 9142, - "id": 9210, - "nodeType": "Return", - "src": "24846:20:48" - } - ] - }, - "documentation": { - "id": 9132, - "nodeType": "StructuredDocumentation", - "src": "23397:416:48", - "text": " @notice Make the subgraph service contract slash the indexer and reward the fisherman.\n Give the fisherman a reward equal to the fishermanRewardPercentage of slashed amount\n @param _indexer Address of the indexer\n @param _tokensSlash Amount of tokens to slash from the indexer\n @param _tokensStakeSnapshot Snapshot of the indexer's stake at the time of the dispute creation" - }, - "id": 9212, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_slashIndexer", - "nameLocation": "23827:13:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9139, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9134, - "mutability": "mutable", - "name": "_indexer", - "nameLocation": "23858:8:48", - "nodeType": "VariableDeclaration", - "scope": 9212, - "src": "23850:16:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9133, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "23850:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9136, - "mutability": "mutable", - "name": "_tokensSlash", - "nameLocation": "23884:12:48", - "nodeType": "VariableDeclaration", - "scope": 9212, - "src": "23876:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9135, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23876:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9138, - "mutability": "mutable", - "name": "_tokensStakeSnapshot", - "nameLocation": "23914:20:48", - "nodeType": "VariableDeclaration", - "scope": 9212, - "src": "23906:28:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9137, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23906:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "23840:100:48" - }, - "returnParameters": { - "id": 9142, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9141, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 9212, - "src": "23958:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9140, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23958:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "23957:9:48" - }, - "scope": 9438, - "src": "23818:1055:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9237, - "nodeType": "Block", - "src": "25127:162:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9219, - "name": "_arbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9215, - "src": "25145:11:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 9222, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "25168:1:48", - "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": 9221, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "25160:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9220, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "25160:7:48", - "typeDescriptions": {} - } - }, - "id": 9223, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25160:10:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "25145:25:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9225, - "name": "DisputeManagerInvalidZeroAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10859, - "src": "25172:32:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 9226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25172:34:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9218, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "25137:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9227, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25137:70:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9228, - "nodeType": "ExpressionStatement", - "src": "25137:70:48" - }, - { - "expression": { - "id": 9231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9229, - "name": "arbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9451, - "src": "25217:10:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9230, - "name": "_arbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9215, - "src": "25230:11:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "25217:24:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 9232, - "nodeType": "ExpressionStatement", - "src": "25217:24:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9234, - "name": "_arbitrator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9215, - "src": "25270:11:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9233, - "name": "ArbitratorSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10743, - "src": "25256:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25256:26:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9236, - "nodeType": "EmitStatement", - "src": "25251:31:48" - } - ] - }, - "documentation": { - "id": 9213, - "nodeType": "StructuredDocumentation", - "src": "24879:190:48", - "text": " @notice Internal: Set the arbitrator address.\n @dev Update the arbitrator to `_arbitrator`\n @param _arbitrator The address of the arbitration contract or party" - }, - "id": 9238, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setArbitrator", - "nameLocation": "25083:14:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9216, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9215, - "mutability": "mutable", - "name": "_arbitrator", - "nameLocation": "25106:11:48", - "nodeType": "VariableDeclaration", - "scope": 9238, - "src": "25098:19:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9214, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "25098:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "25097:21:48" - }, - "returnParameters": { - "id": 9217, - "nodeType": "ParameterList", - "parameters": [], - "src": "25127:0:48" - }, - "scope": 9438, - "src": "25074:215:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9260, - "nodeType": "Block", - "src": "25542:167:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "id": 9247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9245, - "name": "_disputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9241, - "src": "25560:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 9246, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "25578:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "25560:19:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9248, - "name": "DisputeManagerDisputePeriodZero", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10861, - "src": "25581:31:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 9249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25581:33:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9244, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "25552:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9250, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25552:63:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9251, - "nodeType": "ExpressionStatement", - "src": "25552:63:48" - }, - { - "expression": { - "id": 9254, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9252, - "name": "disputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9454, - "src": "25625:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9253, - "name": "_disputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9241, - "src": "25641:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "25625:30:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "id": 9255, - "nodeType": "ExpressionStatement", - "src": "25625:30:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9257, - "name": "_disputePeriod", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9241, - "src": "25687:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 9256, - "name": "DisputePeriodSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10748, - "src": "25670:16:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$", - "typeString": "function (uint64)" - } - }, - "id": 9258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25670:32:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9259, - "nodeType": "EmitStatement", - "src": "25665:37:48" - } - ] - }, - "documentation": { - "id": 9239, - "nodeType": "StructuredDocumentation", - "src": "25295:184:48", - "text": " @notice Internal: Set the dispute period.\n @dev Update the dispute period to `_disputePeriod` in seconds\n @param _disputePeriod Dispute period in seconds" - }, - "id": 9261, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setDisputePeriod", - "nameLocation": "25493:17:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9242, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9241, - "mutability": "mutable", - "name": "_disputePeriod", - "nameLocation": "25518:14:48", - "nodeType": "VariableDeclaration", - "scope": 9261, - "src": "25511:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 9240, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "25511:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "25510:23:48" - }, - "returnParameters": { - "id": 9243, - "nodeType": "ParameterList", - "parameters": [], - "src": "25542:0:48" - }, - "scope": 9438, - "src": "25484:225:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9284, - "nodeType": "Block", - "src": "26010:191:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9268, - "name": "_disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9264, - "src": "26028:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 9269, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "26047:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "26028:20:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 9272, - "name": "_disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9264, - "src": "26086:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9271, - "name": "DisputeManagerInvalidDisputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10871, - "src": "26050:35:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256) pure returns (error)" - } - }, - "id": 9273, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26050:52:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9267, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "26020:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9274, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26020:83:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9275, - "nodeType": "ExpressionStatement", - "src": "26020:83:48" - }, - { - "expression": { - "id": 9278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9276, - "name": "disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9457, - "src": "26113:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9277, - "name": "_disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9264, - "src": "26130:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "26113:32:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9279, - "nodeType": "ExpressionStatement", - "src": "26113:32:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9281, - "name": "_disputeDeposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9264, - "src": "26178:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9280, - "name": "DisputeDepositSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10753, - "src": "26160:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 9282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26160:34:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9283, - "nodeType": "EmitStatement", - "src": "26155:39:48" - } - ] - }, - "documentation": { - "id": 9262, - "nodeType": "StructuredDocumentation", - "src": "25715:229:48", - "text": " @notice Internal: Set the dispute deposit required to create a dispute.\n @dev Update the dispute deposit to `_disputeDeposit` Graph Tokens\n @param _disputeDeposit The dispute deposit in Graph Tokens" - }, - "id": 9285, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setDisputeDeposit", - "nameLocation": "25958:18:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9265, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9264, - "mutability": "mutable", - "name": "_disputeDeposit", - "nameLocation": "25985:15:48", - "nodeType": "VariableDeclaration", - "scope": 9285, - "src": "25977:23:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9263, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "25977:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "25976:25:48" - }, - "returnParameters": { - "id": 9266, - "nodeType": "ParameterList", - "parameters": [], - "src": "26010:0:48" - }, - "scope": 9438, - "src": "25949:252:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9308, - "nodeType": "Block", - "src": "26517:273:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 9294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9292, - "name": "_fishermanRewardCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9288, - "src": "26548:19:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 9293, - "name": "MAX_FISHERMAN_REWARD_CUT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8018, - "src": "26571:24:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "26548:47:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 9296, - "name": "_fishermanRewardCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9288, - "src": "26646:19:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 9295, - "name": "DisputeManagerInvalidFishermanReward", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10875, - "src": "26609:36:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint32_$returns$_t_error_$", - "typeString": "function (uint32) pure returns (error)" - } - }, - "id": 9297, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26609:57:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9291, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "26527:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9298, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26527:149:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9299, - "nodeType": "ExpressionStatement", - "src": "26527:149:48" - }, - { - "expression": { - "id": 9302, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9300, - "name": "fishermanRewardCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9460, - "src": "26686:18:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9301, - "name": "_fishermanRewardCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9288, - "src": "26707:19:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "26686:40:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 9303, - "nodeType": "ExpressionStatement", - "src": "26686:40:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9305, - "name": "_fishermanRewardCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9288, - "src": "26763:19:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 9304, - "name": "FishermanRewardCutSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10763, - "src": "26741:21:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32)" - } - }, - "id": 9306, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26741:42:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9307, - "nodeType": "EmitStatement", - "src": "26736:47:48" - } - ] - }, - "documentation": { - "id": 9286, - "nodeType": "StructuredDocumentation", - "src": "26207:237:48", - "text": " @notice Internal: Set the percent reward that the fisherman gets when slashing occurs.\n @dev Update the reward percentage to `_percentage`\n @param _fishermanRewardCut Reward as a percentage of indexer stake" - }, - "id": 9309, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setFishermanRewardCut", - "nameLocation": "26458:22:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9289, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9288, - "mutability": "mutable", - "name": "_fishermanRewardCut", - "nameLocation": "26488:19:48", - "nodeType": "VariableDeclaration", - "scope": 9309, - "src": "26481:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 9287, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "26481:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "26480:28:48" - }, - "returnParameters": { - "id": 9290, - "nodeType": "ParameterList", - "parameters": [], - "src": "26517:0:48" - }, - "scope": 9438, - "src": "26449:341:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9333, - "nodeType": "Block", - "src": "27031:254:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 9318, - "name": "_maxSlashingCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9312, - "src": "27117:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "id": 9316, - "name": "PPMMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4262, - "src": "27098:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_PPMMath_$4262_$", - "typeString": "type(library PPMMath)" - } - }, - "id": 9317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "27106:10:48", - "memberName": "isValidPPM", - "nodeType": "MemberAccess", - "referencedDeclaration": 4261, - "src": "27098:18:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) pure returns (bool)" - } - }, - "id": 9319, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27098:35:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 9321, - "name": "_maxSlashingCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9312, - "src": "27171:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 9320, - "name": "DisputeManagerInvalidMaxSlashingCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10879, - "src": "27135:35:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint32_$returns$_t_error_$", - "typeString": "function (uint32) pure returns (error)" - } - }, - "id": 9322, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27135:52:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9315, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "27090:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27090:98:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9324, - "nodeType": "ExpressionStatement", - "src": "27090:98:48" - }, - { - "expression": { - "id": 9327, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9325, - "name": "maxSlashingCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9463, - "src": "27198:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9326, - "name": "_maxSlashingCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9312, - "src": "27215:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "27198:32:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 9328, - "nodeType": "ExpressionStatement", - "src": "27198:32:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9330, - "name": "maxSlashingCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9463, - "src": "27263:14:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 9329, - "name": "MaxSlashingCutSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10758, - "src": "27245:17:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32)" - } - }, - "id": 9331, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27245:33:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9332, - "nodeType": "EmitStatement", - "src": "27240:38:48" - } - ] - }, - "documentation": { - "id": 9310, - "nodeType": "StructuredDocumentation", - "src": "26796:170:48", - "text": " @notice Internal: Set the maximum percentage that can be used for slashing indexers.\n @param _maxSlashingCut Max percentage slashing for disputes" - }, - "id": 9334, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setMaxSlashingCut", - "nameLocation": "26980:18:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9313, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9312, - "mutability": "mutable", - "name": "_maxSlashingCut", - "nameLocation": "27006:15:48", - "nodeType": "VariableDeclaration", - "scope": 9334, - "src": "26999:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 9311, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "26999:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "26998:24:48" - }, - "returnParameters": { - "id": 9314, - "nodeType": "ParameterList", - "parameters": [], - "src": "27031:0:48" - }, - "scope": 9438, - "src": "26971:314:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9361, - "nodeType": "Block", - "src": "27567:205:48", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9341, - "name": "_subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9337, - "src": "27585:16:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 9344, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "27613:1:48", - "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": 9343, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "27605:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9342, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27605:7:48", - "typeDescriptions": {} - } - }, - "id": 9345, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27605:10:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "27585:30:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9347, - "name": "DisputeManagerInvalidZeroAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10859, - "src": "27617:32:48", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 9348, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27617:34:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9340, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "27577:7:48", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9349, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27577:75:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9350, - "nodeType": "ExpressionStatement", - "src": "27577:75:48" - }, - { - "expression": { - "id": 9355, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9351, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "27662:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 9353, - "name": "_subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9337, - "src": "27697:16:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9352, - "name": "ISubgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11280, - "src": "27680:16:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ISubgraphService_$11280_$", - "typeString": "type(contract ISubgraphService)" - } - }, - "id": 9354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27680:34:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "src": "27662:52:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "id": 9356, - "nodeType": "ExpressionStatement", - "src": "27662:52:48" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9358, - "name": "_subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9337, - "src": "27748:16:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9357, - "name": "SubgraphServiceSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10768, - "src": "27729:18:48", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9359, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27729:36:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9360, - "nodeType": "EmitStatement", - "src": "27724:41:48" - } - ] - }, - "documentation": { - "id": 9335, - "nodeType": "StructuredDocumentation", - "src": "27291:208:48", - "text": " @notice Internal: Set the subgraph service address.\n @dev Update the subgraph service to `_subgraphService`\n @param _subgraphService The address of the subgraph service contract" - }, - "id": 9362, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setSubgraphService", - "nameLocation": "27513:19:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9338, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9337, - "mutability": "mutable", - "name": "_subgraphService", - "nameLocation": "27541:16:48", - "nodeType": "VariableDeclaration", - "scope": 9362, - "src": "27533:24:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9336, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27533:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "27532:26:48" - }, - "returnParameters": { - "id": 9339, - "nodeType": "ParameterList", - "parameters": [], - "src": "27567:0:48" - }, - "scope": 9438, - "src": "27504:268:48", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9389, - "nodeType": "Block", - "src": "28044:246:48", - "statements": [ - { - "assignments": [ - 9372 - ], - "declarations": [ - { - "constant": false, - "id": 9372, - "mutability": "mutable", - "name": "relatedId", - "nameLocation": "28062:9:48", - "nodeType": "VariableDeclaration", - "scope": 9389, - "src": "28054:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 9371, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "28054:7:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 9375, - "initialValue": { - "expression": { - "id": 9373, - "name": "_dispute", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9366, - "src": "28074:8:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute memory" - } - }, - "id": 9374, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "28083:16:48", - "memberName": "relatedDisputeId", - "nodeType": "MemberAccess", - "referencedDeclaration": 10727, - "src": "28074:25:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "28054:45:48" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 9387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 9378, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9376, - "name": "relatedId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9372, - "src": "28198:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 9377, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "28211:1:48", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "28198:14:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - }, - "id": 9386, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "id": 9379, - "name": "disputes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9469, - "src": "28216:8:48", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute storage ref)" - } - }, - "id": 9381, - "indexExpression": { - "id": 9380, - "name": "relatedId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9372, - "src": "28225:9:48", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "28216:19:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage", - "typeString": "struct IDisputeManager.Dispute storage ref" - } - }, - "id": 9382, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "28236:6:48", - "memberName": "status", - "nodeType": "MemberAccess", - "referencedDeclaration": 10733, - "src": "28216:26:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 9383, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "28246:15:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 9384, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "28262:13:48", - "memberName": "DisputeStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 10718, - "src": "28246:29:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_DisputeStatus_$10718_$", - "typeString": "type(enum IDisputeManager.DisputeStatus)" - } - }, - "id": 9385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "28276:7:48", - "memberName": "Pending", - "nodeType": "MemberAccess", - "referencedDeclaration": 10716, - "src": "28246:37:48", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "src": "28216:67:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "28198:85:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 9370, - "id": 9388, - "nodeType": "Return", - "src": "28191:92:48" - } - ] - }, - "documentation": { - "id": 9363, - "nodeType": "StructuredDocumentation", - "src": "27778:178:48", - "text": " @notice Returns whether the dispute is for a conflicting attestation or not.\n @param _dispute Dispute\n @return True conflicting attestation dispute" - }, - "id": 9390, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_isDisputeInConflict", - "nameLocation": "27970:20:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9367, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9366, - "mutability": "mutable", - "name": "_dispute", - "nameLocation": "28006:8:48", - "nodeType": "VariableDeclaration", - "scope": 9390, - "src": "27991:23:48", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_memory_ptr", - "typeString": "struct IDisputeManager.Dispute" - }, - "typeName": { - "id": 9365, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9364, - "name": "Dispute", - "nameLocations": [ - "27991:7:48" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "27991:7:48" - }, - "referencedDeclaration": 10738, - "src": "27991:7:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - }, - "visibility": "internal" - } - ], - "src": "27990:25:48" - }, - "returnParameters": { - "id": 9370, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9369, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 9390, - "src": "28038:4:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9368, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "28038:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "28037:6:48" - }, - "scope": 9438, - "src": "27961:329:48", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 9436, - "nodeType": "Block", - "src": "28895:349:48", - "statements": [ - { - "assignments": [ - 9401 - ], - "declarations": [ - { - "constant": false, - "id": 9401, - "mutability": "mutable", - "name": "delegatorsStake", - "nameLocation": "28913:15:48", - "nodeType": "VariableDeclaration", - "scope": 9436, - "src": "28905:23:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9400, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "28905:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9412, - "initialValue": { - "expression": { - "arguments": [ - { - "id": 9405, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9393, - "src": "28965:8:48", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 9408, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "28983:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - ], - "id": 9407, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "28975:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9406, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "28975:7:48", - "typeDescriptions": {} - } - }, - "id": 9409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28975:24:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9402, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "28931:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 9403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28931:15:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 9404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "28947:17:48", - "memberName": "getDelegationPool", - "nodeType": "MemberAccess", - "referencedDeclaration": 2747, - "src": "28931:33:48", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_DelegationPool_$3748_memory_ptr_$", - "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.DelegationPool memory)" - } - }, - "id": 9410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28931:69:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", - "typeString": "struct IHorizonStakingTypes.DelegationPool memory" - } - }, - "id": 9411, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "29001:6:48", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 3739, - "src": "28931:76:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "28905:102:48" - }, - { - "assignments": [ - 9414 - ], - "declarations": [ - { - "constant": false, - "id": 9414, - "mutability": "mutable", - "name": "delegatorsStakeMax", - "nameLocation": "29025:18:48", - "nodeType": "VariableDeclaration", - "scope": 9436, - "src": "29017:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9413, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "29017:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9423, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9415, - "name": "_indexerStake", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9395, - "src": "29046:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 9418, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9448, - "src": "29070:15:48", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "id": 9419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "29086:18:48", - "memberName": "getDelegationRatio", - "nodeType": "MemberAccess", - "referencedDeclaration": 1317, - "src": "29070:34:48", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint32_$", - "typeString": "function () view external returns (uint32)" - } - }, - "id": 9420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29070:36:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 9417, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "29062:7:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 9416, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "29062:7:48", - "typeDescriptions": {} - } - }, - "id": 9421, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29062:45:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "29046:61:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "29017:90:48" - }, - { - "assignments": [ - 9425 - ], - "declarations": [ - { - "constant": false, - "id": 9425, - "mutability": "mutable", - "name": "stakeSnapshot", - "nameLocation": "29125:13:48", - "nodeType": "VariableDeclaration", - "scope": 9436, - "src": "29117:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9424, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "29117:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9433, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9426, - "name": "_indexerStake", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9395, - "src": "29141:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "arguments": [ - { - "id": 9429, - "name": "delegatorsStake", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9401, - "src": "29171:15:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9430, - "name": "delegatorsStakeMax", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9414, - "src": "29188:18:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 9427, - "name": "MathUtils", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4168, - "src": "29157:9:48", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_MathUtils_$4168_$", - "typeString": "type(library MathUtils)" - } - }, - "id": 9428, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "29167:3:48", - "memberName": "min", - "nodeType": "MemberAccess", - "referencedDeclaration": 4146, - "src": "29157:13:48", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 9431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29157:50:48", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "29141:66:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "29117:90:48" - }, - { - "expression": { - "id": 9434, - "name": "stakeSnapshot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9425, - "src": "29224:13:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 9399, - "id": 9435, - "nodeType": "Return", - "src": "29217:20:48" - } - ] - }, - "documentation": { - "id": 9391, - "nodeType": "StructuredDocumentation", - "src": "28296:495:48", - "text": " @notice Get the total stake snapshot for and indexer.\n @dev A few considerations:\n - We include both indexer and delegators stake.\n - Thawing stake is not excluded from the snapshot.\n - Delegators stake is capped at the delegation ratio to prevent delegators from inflating the snapshot\n to increase the indexer slash amount.\n @param _indexer Indexer address\n @param _indexerStake Indexer's stake\n @return Total stake snapshot" - }, - "id": 9437, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getStakeSnapshot", - "nameLocation": "28805:17:48", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9396, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9393, - "mutability": "mutable", - "name": "_indexer", - "nameLocation": "28831:8:48", - "nodeType": "VariableDeclaration", - "scope": 9437, - "src": "28823:16:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9392, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "28823:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9395, - "mutability": "mutable", - "name": "_indexerStake", - "nameLocation": "28849:13:48", - "nodeType": "VariableDeclaration", - "scope": 9437, - "src": "28841:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9394, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "28841:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "28822:41:48" - }, - "returnParameters": { - "id": 9399, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9398, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 9437, - "src": "28886:7:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9397, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "28886:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "28885:9:48" - }, - "scope": 9438, - "src": "28796:448:48", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - } - ], - "scope": 9439, - "src": "2429:26817:48", - "usedErrors": [ - 4187, - 4380, - 4684, - 4689, - 4865, - 4868, - 6393, - 6398, - 6403, - 10855, - 10857, - 10859, - 10861, - 10863, - 10867, - 10871, - 10875, - 10879, - 10885, - 10890, - 10894, - 10896, - 10902, - 10906, - 10912, - 10926, - 11751 - ], - "usedEvents": [ - 4375, - 4695, - 4873, - 10743, - 10748, - 10753, - 10758, - 10763, - 10768, - 10785, - 10802, - 10813, - 10824, - 10835, - 10842, - 10853 - ] - } - ], - "src": "45:29202:48" - }, - "id": 48 - }, - "contracts/DisputeManagerStorage.sol": { - "ast": { - "absolutePath": "contracts/DisputeManagerStorage.sol", - "exportedSymbols": { - "DisputeManagerV1Storage": [ - 9470 - ], - "IDisputeManager": [ - 11057 - ], - "ISubgraphService": [ - 11280 - ] - }, - "id": 9471, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 9440, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:49" - }, - { - "absolutePath": "contracts/interfaces/IDisputeManager.sol", - "file": "./interfaces/IDisputeManager.sol", - "id": 9442, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9471, - "sourceUnit": 11058, - "src": "71:67:49", - "symbolAliases": [ - { - "foreign": { - "id": 9441, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "80:15:49", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/ISubgraphService.sol", - "file": "./interfaces/ISubgraphService.sol", - "id": 9444, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 9471, - "sourceUnit": 11281, - "src": "139:69:49", - "symbolAliases": [ - { - "foreign": { - "id": 9443, - "name": "ISubgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11280, - "src": "148:16:49", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "DisputeManagerV1Storage", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "id": 9470, - "linearizedBaseContracts": [ - 9470 - ], - "name": "DisputeManagerV1Storage", - "nameLocation": "228:23:49", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 9445, - "nodeType": "StructuredDocumentation", - "src": "258:49:49", - "text": "@notice The Subgraph Service contract address" - }, - "functionSelector": "26058249", - "id": 9448, - "mutability": "mutable", - "name": "subgraphService", - "nameLocation": "336:15:49", - "nodeType": "VariableDeclaration", - "scope": 9470, - "src": "312:39:49", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - }, - "typeName": { - "id": 9447, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9446, - "name": "ISubgraphService", - "nameLocations": [ - "312:16:49" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11280, - "src": "312:16:49" - }, - "referencedDeclaration": 11280, - "src": "312:16:49", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 9449, - "nodeType": "StructuredDocumentation", - "src": "358:71:49", - "text": "@notice The arbitrator is solely in control of arbitrating disputes" - }, - "functionSelector": "6cc6cde1", - "id": 9451, - "mutability": "mutable", - "name": "arbitrator", - "nameLocation": "449:10:49", - "nodeType": "VariableDeclaration", - "scope": 9470, - "src": "434:25:49", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9450, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "434:7:49", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 9452, - "nodeType": "StructuredDocumentation", - "src": "466:37:49", - "text": "@notice dispute period in seconds" - }, - "functionSelector": "5bf31d4d", - "id": 9454, - "mutability": "mutable", - "name": "disputePeriod", - "nameLocation": "522:13:49", - "nodeType": "VariableDeclaration", - "scope": 9470, - "src": "508:27:49", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 9453, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "508:6:49", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 9455, - "nodeType": "StructuredDocumentation", - "src": "542:48:49", - "text": "@notice Deposit required to create a Dispute" - }, - "functionSelector": "29e03ff1", - "id": 9457, - "mutability": "mutable", - "name": "disputeDeposit", - "nameLocation": "610:14:49", - "nodeType": "VariableDeclaration", - "scope": 9470, - "src": "595:29:49", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9456, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "595:7:49", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 9458, - "nodeType": "StructuredDocumentation", - "src": "631:113:49", - "text": "@notice Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM." - }, - "functionSelector": "902a4938", - "id": 9460, - "mutability": "mutable", - "name": "fishermanRewardCut", - "nameLocation": "763:18:49", - "nodeType": "VariableDeclaration", - "scope": 9470, - "src": "749:32:49", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 9459, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "749:6:49", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 9461, - "nodeType": "StructuredDocumentation", - "src": "788:89:49", - "text": "@notice Maximum percentage of indexer stake that can be slashed on a dispute. In PPM." - }, - "functionSelector": "0533e1ba", - "id": 9463, - "mutability": "mutable", - "name": "maxSlashingCut", - "nameLocation": "896:14:49", - "nodeType": "VariableDeclaration", - "scope": 9470, - "src": "882:28:49", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 9462, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "882:6:49", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 9464, - "nodeType": "StructuredDocumentation", - "src": "917:36:49", - "text": "@notice List of disputes created" - }, - "functionSelector": "11be1997", - "id": 9469, - "mutability": "mutable", - "name": "disputes", - "nameLocation": "1027:8:49", - "nodeType": "VariableDeclaration", - "scope": 9470, - "src": "958:77:49", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute)" - }, - "typeName": { - "id": 9468, - "keyName": "disputeId", - "keyNameLocation": "974:9:49", - "keyType": { - "id": 9465, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "966:7:49", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "958:61:49", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Dispute_$10738_storage_$", - "typeString": "mapping(bytes32 => struct IDisputeManager.Dispute)" - }, - "valueName": "dispute", - "valueNameLocation": "1011:7:49", - "valueType": { - "id": 9467, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9466, - "name": "IDisputeManager.Dispute", - "nameLocations": [ - "987:15:49", - "1003:7:49" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10738, - "src": "987:23:49" - }, - "referencedDeclaration": 10738, - "src": "987:23:49", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Dispute_$10738_storage_ptr", - "typeString": "struct IDisputeManager.Dispute" - } - } - }, - "visibility": "public" - } - ], - "scope": 9471, - "src": "210:828:49", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "46:993:49" - }, - "id": 49 - }, - "contracts/SubgraphService.sol": { - "ast": { - "absolutePath": "contracts/SubgraphService.sol", - "exportedSymbols": { - "Allocation": [ - 11674 - ], - "AllocationManager": [ - 13030 - ], - "DataService": [ - 696 - ], - "DataServiceFees": [ - 1052 - ], - "DataServicePausableUpgradeable": [ - 1186 - ], - "Directory": [ - 13390 - ], - "IGraphPayments": [ - 2211 - ], - "IGraphToken": [ - 518 - ], - "IRewardsIssuer": [ - 314 - ], - "ISubgraphService": [ - 11280 - ], - "ITAPCollector": [ - 2695 - ], - "Initializable": [ - 5102 - ], - "LegacyAllocation": [ - 12086 - ], - "MulticallUpgradeable": [ - 5251 - ], - "OwnableUpgradeable": [ - 4848 - ], - "PPMMath": [ - 4262 - ], - "SubgraphService": [ - 10684 - ], - "SubgraphServiceV1Storage": [ - 10701 - ], - "TokenUtils": [ - 600 - ] - }, - "id": 10685, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 9472, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:50" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "file": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "id": 9474, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 2212, - "src": "70:96:50", - "symbolAliases": [ - { - "foreign": { - "id": 9473, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "79:14:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "file": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "id": 9476, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 519, - "src": "167:87:50", - "symbolAliases": [ - { - "foreign": { - "id": 9475, - "name": "IGraphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 518, - "src": "176:11:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", - "file": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", - "id": 9478, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 2696, - "src": "255:94:50", - "symbolAliases": [ - { - "foreign": { - "id": 9477, - "name": "ITAPCollector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2695, - "src": "264:13:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", - "file": "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol", - "id": 9480, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 315, - "src": "350:95:50", - "symbolAliases": [ - { - "foreign": { - "id": 9479, - "name": "IRewardsIssuer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 314, - "src": "359:14:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/ISubgraphService.sol", - "file": "./interfaces/ISubgraphService.sol", - "id": 9482, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 11281, - "src": "446:69:50", - "symbolAliases": [ - { - "foreign": { - "id": 9481, - "name": "ISubgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11280, - "src": "455:16:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", - "id": 9484, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 4849, - "src": "517:103:50", - "symbolAliases": [ - { - "foreign": { - "id": 9483, - "name": "OwnableUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4848, - "src": "526:18:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol", - "id": 9486, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 5252, - "src": "621:106:50", - "symbolAliases": [ - { - "foreign": { - "id": 9485, - "name": "MulticallUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5251, - "src": "630:20:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "id": 9488, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 5103, - "src": "728:98:50", - "symbolAliases": [ - { - "foreign": { - "id": 9487, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5102, - "src": "737:13:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol", - "file": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol", - "id": 9490, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 1187, - "src": "827:141:50", - "symbolAliases": [ - { - "foreign": { - "id": 9489, - "name": "DataServicePausableUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1186, - "src": "836:30:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/DataService.sol", - "file": "@graphprotocol/horizon/contracts/data-service/DataService.sol", - "id": 9492, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 697, - "src": "969:92:50", - "symbolAliases": [ - { - "foreign": { - "id": 9491, - "name": "DataService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 696, - "src": "978:11:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol", - "file": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol", - "id": 9494, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 1053, - "src": "1062:111:50", - "symbolAliases": [ - { - "foreign": { - "id": 9493, - "name": "DataServiceFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1052, - "src": "1071:15:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/utilities/Directory.sol", - "file": "./utilities/Directory.sol", - "id": 9496, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 13391, - "src": "1174:54:50", - "symbolAliases": [ - { - "foreign": { - "id": 9495, - "name": "Directory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13390, - "src": "1183:9:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/utilities/AllocationManager.sol", - "file": "./utilities/AllocationManager.sol", - "id": 9498, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 13031, - "src": "1229:70:50", - "symbolAliases": [ - { - "foreign": { - "id": 9497, - "name": "AllocationManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13030, - "src": "1238:17:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/SubgraphServiceStorage.sol", - "file": "./SubgraphServiceStorage.sol", - "id": 9500, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 10702, - "src": "1300:72:50", - "symbolAliases": [ - { - "foreign": { - "id": 9499, - "name": "SubgraphServiceV1Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10701, - "src": "1309:24:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", - "file": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", - "id": 9502, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 601, - "src": "1374:85:50", - "symbolAliases": [ - { - "foreign": { - "id": 9501, - "name": "TokenUtils", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 600, - "src": "1383:10:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", - "file": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", - "id": 9504, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 4263, - "src": "1460:81:50", - "symbolAliases": [ - { - "foreign": { - "id": 9503, - "name": "PPMMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4262, - "src": "1469:7:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/Allocation.sol", - "file": "./libraries/Allocation.sol", - "id": 9506, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 11675, - "src": "1542:56:50", - "symbolAliases": [ - { - "foreign": { - "id": 9505, - "name": "Allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11674, - "src": "1551:10:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/LegacyAllocation.sol", - "file": "./libraries/LegacyAllocation.sol", - "id": 9508, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10685, - "sourceUnit": 12087, - "src": "1599:68:50", - "symbolAliases": [ - { - "foreign": { - "id": 9507, - "name": "LegacyAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12086, - "src": "1608:16:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 9510, - "name": "Initializable", - "nameLocations": [ - "1884:13:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5102, - "src": "1884:13:50" - }, - "id": 9511, - "nodeType": "InheritanceSpecifier", - "src": "1884:13:50" - }, - { - "baseName": { - "id": 9512, - "name": "OwnableUpgradeable", - "nameLocations": [ - "1903:18:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4848, - "src": "1903:18:50" - }, - "id": 9513, - "nodeType": "InheritanceSpecifier", - "src": "1903:18:50" - }, - { - "baseName": { - "id": 9514, - "name": "MulticallUpgradeable", - "nameLocations": [ - "1927:20:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5251, - "src": "1927:20:50" - }, - "id": 9515, - "nodeType": "InheritanceSpecifier", - "src": "1927:20:50" - }, - { - "baseName": { - "id": 9516, - "name": "DataService", - "nameLocations": [ - "1953:11:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 696, - "src": "1953:11:50" - }, - "id": 9517, - "nodeType": "InheritanceSpecifier", - "src": "1953:11:50" - }, - { - "baseName": { - "id": 9518, - "name": "DataServicePausableUpgradeable", - "nameLocations": [ - "1970:30:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1186, - "src": "1970:30:50" - }, - "id": 9519, - "nodeType": "InheritanceSpecifier", - "src": "1970:30:50" - }, - { - "baseName": { - "id": 9520, - "name": "DataServiceFees", - "nameLocations": [ - "2006:15:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1052, - "src": "2006:15:50" - }, - "id": 9521, - "nodeType": "InheritanceSpecifier", - "src": "2006:15:50" - }, - { - "baseName": { - "id": 9522, - "name": "Directory", - "nameLocations": [ - "2027:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13390, - "src": "2027:9:50" - }, - "id": 9523, - "nodeType": "InheritanceSpecifier", - "src": "2027:9:50" - }, - { - "baseName": { - "id": 9524, - "name": "AllocationManager", - "nameLocations": [ - "2042:17:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13030, - "src": "2042:17:50" - }, - "id": 9525, - "nodeType": "InheritanceSpecifier", - "src": "2042:17:50" - }, - { - "baseName": { - "id": 9526, - "name": "SubgraphServiceV1Storage", - "nameLocations": [ - "2065:24:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10701, - "src": "2065:24:50" - }, - "id": 9527, - "nodeType": "InheritanceSpecifier", - "src": "2065:24:50" - }, - { - "baseName": { - "id": 9528, - "name": "IRewardsIssuer", - "nameLocations": [ - "2095:14:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 314, - "src": "2095:14:50" - }, - "id": 9529, - "nodeType": "InheritanceSpecifier", - "src": "2095:14:50" - }, - { - "baseName": { - "id": 9530, - "name": "ISubgraphService", - "nameLocations": [ - "2115:16:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11280, - "src": "2115:16:50" - }, - "id": 9531, - "nodeType": "InheritanceSpecifier", - "src": "2115:16:50" - } - ], - "canonicalName": "SubgraphService", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 9509, - "nodeType": "StructuredDocumentation", - "src": "1669:182:50", - "text": " @title SubgraphService contract\n @custom:security-contact Please email security+contracts@thegraph.com if you find any\n bugs. We may have an active bug bounty program." - }, - "fullyImplemented": true, - "id": 10684, - "internalFunctionIDs": { - "958": 1, - "970": 2, - "1028": 3 - }, - "linearizedBaseContracts": [ - 10684, - 11280, - 314, - 10701, - 13030, - 13072, - 13390, - 1052, - 1381, - 1081, - 1186, - 1409, - 696, - 1318, - 704, - 2128, - 2158, - 4653, - 5771, - 5796, - 5427, - 5251, - 4848, - 5148, - 5102 - ], - "name": "SubgraphService", - "nameLocation": "1861:15:50", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 9534, - "libraryName": { - "id": 9532, - "name": "PPMMath", - "nameLocations": [ - "2144:7:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4262, - "src": "2144:7:50" - }, - "nodeType": "UsingForDirective", - "src": "2138:26:50", - "typeName": { - "id": 9533, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2156:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "global": false, - "id": 9540, - "libraryName": { - "id": 9535, - "name": "Allocation", - "nameLocations": [ - "2175:10:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11674, - "src": "2175:10:50" - }, - "nodeType": "UsingForDirective", - "src": "2169:58:50", - "typeName": { - "id": 9539, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 9536, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2198:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "2190:36:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 9538, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9537, - "name": "Allocation.State", - "nameLocations": [ - "2209:10:50", - "2220:5:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "2209:16:50" - }, - "referencedDeclaration": 11307, - "src": "2209:16:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - } - }, - { - "global": false, - "id": 9544, - "libraryName": { - "id": 9541, - "name": "Allocation", - "nameLocations": [ - "2238:10:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11674, - "src": "2238:10:50" - }, - "nodeType": "UsingForDirective", - "src": "2232:38:50", - "typeName": { - "id": 9543, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9542, - "name": "Allocation.State", - "nameLocations": [ - "2253:10:50", - "2264:5:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "2253:16:50" - }, - "referencedDeclaration": 11307, - "src": "2253:16:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - { - "global": false, - "id": 9548, - "libraryName": { - "id": 9545, - "name": "TokenUtils", - "nameLocations": [ - "2281:10:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 600, - "src": "2281:10:50" - }, - "nodeType": "UsingForDirective", - "src": "2275:33:50", - "typeName": { - "id": 9547, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9546, - "name": "IGraphToken", - "nameLocations": [ - "2296:11:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 518, - "src": "2296:11:50" - }, - "referencedDeclaration": 518, - "src": "2296:11:50", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - } - }, - { - "body": { - "id": 9566, - "nodeType": "Block", - "src": "2479:118:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9559, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "id": 9554, - "name": "indexers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10694, - "src": "2497:8:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", - "typeString": "mapping(address => struct ISubgraphService.Indexer storage ref)" - } - }, - "id": 9556, - "indexExpression": { - "id": 9555, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9551, - "src": "2506:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2497:17:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Indexer_$11078_storage", - "typeString": "struct ISubgraphService.Indexer storage ref" - } - }, - "id": 9557, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2515:12:50", - "memberName": "registeredAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11073, - "src": "2497:30:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 9558, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2531:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2497:35:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 9561, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9551, - "src": "2570:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9560, - "name": "SubgraphServiceIndexerNotRegistered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11116, - "src": "2534:35:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 9562, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2534:44:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9553, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2489:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9563, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2489:90:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9564, - "nodeType": "ExpressionStatement", - "src": "2489:90:50" - }, - { - "id": 9565, - "nodeType": "PlaceholderStatement", - "src": "2589:1:50" - } - ] - }, - "documentation": { - "id": 9549, - "nodeType": "StructuredDocumentation", - "src": "2314:112:50", - "text": " @notice Checks that an indexer is registered\n @param indexer The address of the indexer" - }, - "id": 9567, - "name": "onlyRegisteredIndexer", - "nameLocation": "2440:21:50", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 9552, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9551, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "2470:7:50", - "nodeType": "VariableDeclaration", - "scope": 9567, - "src": "2462:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9550, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2462:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2461:17:50" - }, - "src": "2431:166:50", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 9594, - "nodeType": "Block", - "src": "3273:39:50", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9591, - "name": "_disableInitializers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5070, - "src": "3283:20:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 9592, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3283:22:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9593, - "nodeType": "ExpressionStatement", - "src": "3283:22:50" - } - ] - }, - "documentation": { - "id": 9568, - "nodeType": "StructuredDocumentation", - "src": "2603:432:50", - "text": " @notice Constructor for the SubgraphService contract\n @dev DataService and Directory constructors set a bunch of immutable variables\n @param graphController The address of the Graph Controller contract\n @param disputeManager The address of the DisputeManager contract\n @param tapCollector The address of the TAPCollector contract\n @param curation The address of the Curation contract" - }, - "id": 9595, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 9579, - "name": "graphController", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9570, - "src": "3191:15:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9580, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 9578, - "name": "DataService", - "nameLocations": [ - "3179:11:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 696, - "src": "3179:11:50" - }, - "nodeType": "ModifierInvocation", - "src": "3179:28:50" - }, - { - "arguments": [ - { - "arguments": [ - { - "id": 9584, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "3226:4:50", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SubgraphService_$10684", - "typeString": "contract SubgraphService" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SubgraphService_$10684", - "typeString": "contract SubgraphService" - } - ], - "id": 9583, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3218:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9582, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3218:7:50", - "typeDescriptions": {} - } - }, - "id": 9585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3218:13:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9586, - "name": "disputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9572, - "src": "3233:14:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9587, - "name": "tapCollector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9574, - "src": "3249:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9588, - "name": "curation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9576, - "src": "3263:8:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9589, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 9581, - "name": "Directory", - "nameLocations": [ - "3208:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13390, - "src": "3208:9:50" - }, - "nodeType": "ModifierInvocation", - "src": "3208:64:50" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9577, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9570, - "mutability": "mutable", - "name": "graphController", - "nameLocation": "3069:15:50", - "nodeType": "VariableDeclaration", - "scope": 9595, - "src": "3061:23:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9569, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3061:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9572, - "mutability": "mutable", - "name": "disputeManager", - "nameLocation": "3102:14:50", - "nodeType": "VariableDeclaration", - "scope": 9595, - "src": "3094:22:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9571, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3094:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9574, - "mutability": "mutable", - "name": "tapCollector", - "nameLocation": "3134:12:50", - "nodeType": "VariableDeclaration", - "scope": 9595, - "src": "3126:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9573, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3126:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9576, - "mutability": "mutable", - "name": "curation", - "nameLocation": "3164:8:50", - "nodeType": "VariableDeclaration", - "scope": 9595, - "src": "3156:16:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9575, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3156:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3051:127:50" - }, - "returnParameters": { - "id": 9590, - "nodeType": "ParameterList", - "parameters": [], - "src": "3273:0:50" - }, - "scope": 10684, - "src": "3040:272:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 9643, - "nodeType": "Block", - "src": "4026:378:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 9608, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "4051:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 9609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4055:6:50", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "4051:10:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9607, - "name": "__Ownable_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4708, - "src": "4036:14:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4036:26:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9611, - "nodeType": "ExpressionStatement", - "src": "4036:26:50" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9612, - "name": "__Multicall_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5167, - "src": "4072:16:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 9613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4072:18:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9614, - "nodeType": "ExpressionStatement", - "src": "4072:18:50" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9615, - "name": "__DataService_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 642, - "src": "4100:18:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 9616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4100:20:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9617, - "nodeType": "ExpressionStatement", - "src": "4100:20:50" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9618, - "name": "__DataServicePausable_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1156, - "src": "4130:26:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 9619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4130:28:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9620, - "nodeType": "ExpressionStatement", - "src": "4130:28:50" - }, - { - "expression": { - "arguments": [ - { - "hexValue": "537562677261706853657276696365", - "id": 9622, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4193:17:50", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_de968410163c85e985eeb4fbd7957aae2a5a7499745e7a8f1fd22402a4e5c8b0", - "typeString": "literal_string \"SubgraphService\"" - }, - "value": "SubgraphService" - }, - { - "hexValue": "312e30", - "id": 9623, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4212:5:50", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e6bbd6277e1bf288eed5e8d1780f9a50b239e86b153736bceebccf4ea79d90b3", - "typeString": "literal_string \"1.0\"" - }, - "value": "1.0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_de968410163c85e985eeb4fbd7957aae2a5a7499745e7a8f1fd22402a4e5c8b0", - "typeString": "literal_string \"SubgraphService\"" - }, - { - "typeIdentifier": "t_stringliteral_e6bbd6277e1bf288eed5e8d1780f9a50b239e86b153736bceebccf4ea79d90b3", - "typeString": "literal_string \"1.0\"" - } - ], - "id": 9621, - "name": "__AllocationManager_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12271, - "src": "4168:24:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory,string memory)" - } - }, - "id": 9624, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4168:50:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9625, - "nodeType": "ExpressionStatement", - "src": "4168:50:50" - }, - { - "expression": { - "arguments": [ - { - "id": 9627, - "name": "minimumProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9598, - "src": "4254:22:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "arguments": [ - { - "id": 9630, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4283:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 9629, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4283:7:50", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "id": 9628, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -27, - "src": "4278:4:50", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9631, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4278:13:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint256", - "typeString": "type(uint256)" - } - }, - "id": 9632, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "4292:3:50", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "4278:17:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9626, - "name": "_setProvisionTokensRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1825, - "src": "4229:24:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 9633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4229:67:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9634, - "nodeType": "ExpressionStatement", - "src": "4229:67:50" - }, - { - "expression": { - "arguments": [ - { - "id": 9636, - "name": "maximumDelegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9600, - "src": "4326:22:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 9635, - "name": "_setDelegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1793, - "src": "4306:19:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32)" - } - }, - "id": 9637, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4306:43:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9638, - "nodeType": "ExpressionStatement", - "src": "4306:43:50" - }, - { - "expression": { - "arguments": [ - { - "id": 9640, - "name": "stakeToFeesRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9602, - "src": "4380:16:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9639, - "name": "_setStakeToFeesRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10683, - "src": "4359:20:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 9641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4359:38:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9642, - "nodeType": "ExpressionStatement", - "src": "4359:38:50" - } - ] - }, - "documentation": { - "id": 9596, - "nodeType": "StructuredDocumentation", - "src": "3318:543:50", - "text": " @notice Initialize the contract\n @dev The thawingPeriod and verifierCut ranges are not set here because they are variables\n on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges.\n @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation\n @param maximumDelegationRatio The maximum delegation ratio allowed for an allocation\n @param stakeToFeesRatio The ratio of stake to fees to lock when collecting query fees" - }, - "functionSelector": "1cafa218", - "id": 9644, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 9605, - "kind": "modifierInvocation", - "modifierName": { - "id": 9604, - "name": "initializer", - "nameLocations": [ - "4014:11:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4956, - "src": "4014:11:50" - }, - "nodeType": "ModifierInvocation", - "src": "4014:11:50" - } - ], - "name": "initialize", - "nameLocation": "3875:10:50", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9603, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9598, - "mutability": "mutable", - "name": "minimumProvisionTokens", - "nameLocation": "3903:22:50", - "nodeType": "VariableDeclaration", - "scope": 9644, - "src": "3895:30:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9597, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3895:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9600, - "mutability": "mutable", - "name": "maximumDelegationRatio", - "nameLocation": "3942:22:50", - "nodeType": "VariableDeclaration", - "scope": 9644, - "src": "3935:29:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 9599, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "3935:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9602, - "mutability": "mutable", - "name": "stakeToFeesRatio", - "nameLocation": "3982:16:50", - "nodeType": "VariableDeclaration", - "scope": 9644, - "src": "3974:24:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9601, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3974:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3885:119:50" - }, - "returnParameters": { - "id": 9606, - "nodeType": "ParameterList", - "parameters": [], - "src": "4026:0:50" - }, - "scope": 10684, - "src": "3866:538:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1242 - ], - "body": { - "id": 9743, - "nodeType": "Block", - "src": "5313:719:50", - "statements": [ - { - "assignments": [ - 9662, - 9664, - 9666 - ], - "declarations": [ - { - "constant": false, - "id": 9662, - "mutability": "mutable", - "name": "url", - "nameLocation": "5338:3:50", - "nodeType": "VariableDeclaration", - "scope": 9743, - "src": "5324:17:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 9661, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "5324:6:50", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9664, - "mutability": "mutable", - "name": "geohash", - "nameLocation": "5357:7:50", - "nodeType": "VariableDeclaration", - "scope": 9743, - "src": "5343:21:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 9663, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "5343:6:50", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9666, - "mutability": "mutable", - "name": "rewardsDestination", - "nameLocation": "5374:18:50", - "nodeType": "VariableDeclaration", - "scope": 9743, - "src": "5366:26:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9665, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5366:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 9678, - "initialValue": { - "arguments": [ - { - "id": 9669, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9649, - "src": "5420:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "components": [ - { - "id": 9671, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5439:6:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_string_storage_ptr_$", - "typeString": "type(string storage pointer)" - }, - "typeName": { - "id": 9670, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "5439:6:50", - "typeDescriptions": {} - } - }, - { - "id": 9673, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5447:6:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_string_storage_ptr_$", - "typeString": "type(string storage pointer)" - }, - "typeName": { - "id": 9672, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "5447:6:50", - "typeDescriptions": {} - } - }, - { - "id": 9675, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5455:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9674, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5455:7:50", - "typeDescriptions": {} - } - } - ], - "id": 9676, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "5438:25:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_type$_t_string_storage_ptr_$_$_t_type$_t_string_storage_ptr_$_$_t_type$_t_address_$_$", - "typeString": "tuple(type(string storage pointer),type(string storage pointer),type(address))" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_tuple$_t_type$_t_string_storage_ptr_$_$_t_type$_t_string_storage_ptr_$_$_t_type$_t_address_$_$", - "typeString": "tuple(type(string storage pointer),type(string storage pointer),type(address))" - } - ], - "expression": { - "id": 9667, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "5396:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 9668, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5400:6:50", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "5396:10:50", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9677, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5396:77:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_payable_$", - "typeString": "tuple(string memory,string memory,address payable)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5323:150:50" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 9682, - "name": "url", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9662, - "src": "5498:3:50", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 9681, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5492:5:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 9680, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5492:5:50", - "typeDescriptions": {} - } - }, - "id": 9683, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5492:10:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 9684, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5503:6:50", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "5492:17:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 9685, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5512:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5492:21:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9687, - "name": "SubgraphServiceEmptyUrl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11105, - "src": "5515:23:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 9688, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5515:25:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9679, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "5484:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9689, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5484:57:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9690, - "nodeType": "ExpressionStatement", - "src": "5484:57:50" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 9694, - "name": "geohash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9664, - "src": "5565:7:50", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 9693, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5559:5:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 9692, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5559:5:50", - "typeDescriptions": {} - } - }, - "id": 9695, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5559:14:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 9696, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5574:6:50", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "5559:21:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 9697, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5583:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5559:25:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9699, - "name": "SubgraphServiceEmptyGeohash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11108, - "src": "5586:27:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 9700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5586:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9691, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "5551:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9701, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5551:65:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9702, - "nodeType": "ExpressionStatement", - "src": "5551:65:50" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "id": 9704, - "name": "indexers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10694, - "src": "5634:8:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", - "typeString": "mapping(address => struct ISubgraphService.Indexer storage ref)" - } - }, - "id": 9706, - "indexExpression": { - "id": 9705, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9647, - "src": "5643:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5634:17:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Indexer_$11078_storage", - "typeString": "struct ISubgraphService.Indexer storage ref" - } - }, - "id": 9707, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5652:12:50", - "memberName": "registeredAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11073, - "src": "5634:30:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 9708, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5668:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5634:35:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9710, - "name": "SubgraphServiceIndexerAlreadyRegistered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11111, - "src": "5671:39:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 9711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5671:41:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9703, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "5626:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5626:87:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9713, - "nodeType": "ExpressionStatement", - "src": "5626:87:50" - }, - { - "expression": { - "id": 9723, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 9714, - "name": "indexers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10694, - "src": "5756:8:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", - "typeString": "mapping(address => struct ISubgraphService.Indexer storage ref)" - } - }, - "id": 9716, - "indexExpression": { - "id": 9715, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9647, - "src": "5765:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5756:17:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Indexer_$11078_storage", - "typeString": "struct ISubgraphService.Indexer storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 9718, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "5800:5:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 9719, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5806:9:50", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "5800:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9720, - "name": "url", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9662, - "src": "5822:3:50", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 9721, - "name": "geohash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9664, - "src": "5836:7:50", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 9717, - "name": "Indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11078, - "src": "5776:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Indexer_$11078_storage_ptr_$", - "typeString": "type(struct ISubgraphService.Indexer storage pointer)" - } - }, - "id": 9722, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [ - "5786:12:50", - "5817:3:50", - "5827:7:50" - ], - "names": [ - "registeredAt", - "url", - "geoHash" - ], - "nodeType": "FunctionCall", - "src": "5776:70:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Indexer_$11078_memory_ptr", - "typeString": "struct ISubgraphService.Indexer memory" - } - }, - "src": "5756:90:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Indexer_$11078_storage", - "typeString": "struct ISubgraphService.Indexer storage ref" - } - }, - "id": 9724, - "nodeType": "ExpressionStatement", - "src": "5756:90:50" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9725, - "name": "rewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9666, - "src": "5860:18:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 9728, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5890:1:50", - "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": 9727, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5882:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9726, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5882:7:50", - "typeDescriptions": {} - } - }, - "id": 9729, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5882:10:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5860:32:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9737, - "nodeType": "IfStatement", - "src": "5856:114:50", - "trueBody": { - "id": 9736, - "nodeType": "Block", - "src": "5894:76:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9732, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9647, - "src": "5931:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9733, - "name": "rewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9666, - "src": "5940:18:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9731, - "name": "_setRewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12910, - "src": "5908:22:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 9734, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5908:51:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9735, - "nodeType": "ExpressionStatement", - "src": "5908:51:50" - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "id": 9739, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9647, - "src": "6011:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9740, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9649, - "src": "6020:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 9738, - "name": "ServiceProviderRegistered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1198, - "src": "5985:25:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (address,bytes memory)" - } - }, - "id": 9741, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5985:40:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9742, - "nodeType": "EmitStatement", - "src": "5980:45:50" - } - ] - }, - "documentation": { - "id": 9645, - "nodeType": "StructuredDocumentation", - "src": "4410:724:50", - "text": " @notice\n @dev Implements {IDataService.register}\n Requirements:\n - The indexer must not be already registered\n - The URL must not be empty\n - The provision must be valid according to the subgraph service rules\n Emits a {ServiceProviderRegistered} event\n @param indexer The address of the indexer to register\n @param data Encoded registration data:\n - address `url`: The URL of the indexer\n - string `geohash`: The geohash of the indexer\n - address `rewardsDestination`: The address where the indexer wants to receive indexing rewards.\n Use zero address for automatic reprovisioning to the subgraph service." - }, - "functionSelector": "24b8fbf6", - "id": 9744, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 9653, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9647, - "src": "5262:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9654, - "kind": "modifierInvocation", - "modifierName": { - "id": 9652, - "name": "onlyAuthorizedForProvision", - "nameLocations": [ - "5235:26:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1703, - "src": "5235:26:50" - }, - "nodeType": "ModifierInvocation", - "src": "5235:35:50" - }, - { - "arguments": [ - { - "id": 9656, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9647, - "src": "5290:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9657, - "kind": "modifierInvocation", - "modifierName": { - "id": 9655, - "name": "onlyValidProvision", - "nameLocations": [ - "5271:18:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1728, - "src": "5271:18:50" - }, - "nodeType": "ModifierInvocation", - "src": "5271:27:50" - }, - { - "id": 9659, - "kind": "modifierInvocation", - "modifierName": { - "id": 9658, - "name": "whenNotPaused", - "nameLocations": [ - "5299:13:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5329, - "src": "5299:13:50" - }, - "nodeType": "ModifierInvocation", - "src": "5299:13:50" - } - ], - "name": "register", - "nameLocation": "5148:8:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9651, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5226:8:50" - }, - "parameters": { - "id": 9650, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9647, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "5174:7:50", - "nodeType": "VariableDeclaration", - "scope": 9744, - "src": "5166:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9646, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5166:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9649, - "mutability": "mutable", - "name": "data", - "nameLocation": "5206:4:50", - "nodeType": "VariableDeclaration", - "scope": 9744, - "src": "5191:19:50", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 9648, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5191:5:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5156:60:50" - }, - "returnParameters": { - "id": 9660, - "nodeType": "ParameterList", - "parameters": [], - "src": "5313:0:50" - }, - "scope": 10684, - "src": "5139:893:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1250 - ], - "body": { - "id": 9773, - "nodeType": "Block", - "src": "6815:150:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9762, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9747, - "src": "6847:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9761, - "name": "_checkProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1920, - 1936 - ], - "referencedDeclaration": 1920, - "src": "6825:21:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$", - "typeString": "function (address) view" - } - }, - "id": 9763, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6825:30:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9764, - "nodeType": "ExpressionStatement", - "src": "6825:30:50" - }, - { - "expression": { - "arguments": [ - { - "id": 9766, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9747, - "src": "6892:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9765, - "name": "_acceptProvisionParameters", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1778, - "src": "6865:26:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6865:35:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9768, - "nodeType": "ExpressionStatement", - "src": "6865:35:50" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9770, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9747, - "src": "6950:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9769, - "name": "ProvisionPendingParametersAccepted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1203, - "src": "6915:34:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9771, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6915:43:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9772, - "nodeType": "EmitStatement", - "src": "6910:48:50" - } - ] - }, - "documentation": { - "id": 9745, - "nodeType": "StructuredDocumentation", - "src": "6038:576:50", - "text": " @notice Accept staged parameters in the provision of a service provider\n @dev Implements {IDataService-acceptProvisionPendingParameters}\n Requirements:\n - The indexer must be registered\n - Must have previously staged provision parameters, using {IHorizonStaking-setProvisionParameters}\n - The new provision parameters must be valid according to the subgraph service rules\n Emits a {ProvisionPendingParametersAccepted} event\n @param indexer The address of the indexer to accept the provision for" - }, - "functionSelector": "ce0fc0cc", - "id": 9774, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 9753, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9747, - "src": "6761:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9754, - "kind": "modifierInvocation", - "modifierName": { - "id": 9752, - "name": "onlyAuthorizedForProvision", - "nameLocations": [ - "6734:26:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1703, - "src": "6734:26:50" - }, - "nodeType": "ModifierInvocation", - "src": "6734:35:50" - }, - { - "arguments": [ - { - "id": 9756, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9747, - "src": "6792:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9757, - "kind": "modifierInvocation", - "modifierName": { - "id": 9755, - "name": "onlyRegisteredIndexer", - "nameLocations": [ - "6770:21:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 9567, - "src": "6770:21:50" - }, - "nodeType": "ModifierInvocation", - "src": "6770:30:50" - }, - { - "id": 9759, - "kind": "modifierInvocation", - "modifierName": { - "id": 9758, - "name": "whenNotPaused", - "nameLocations": [ - "6801:13:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5329, - "src": "6801:13:50" - }, - "nodeType": "ModifierInvocation", - "src": "6801:13:50" - } - ], - "name": "acceptProvisionPendingParameters", - "nameLocation": "6628:32:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9751, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "6725:8:50" - }, - "parameters": { - "id": 9750, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9747, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "6678:7:50", - "nodeType": "VariableDeclaration", - "scope": 9774, - "src": "6670:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9746, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6670:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9749, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 9774, - "src": "6695:14:50", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 9748, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6695:5:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6660:55:50" - }, - "returnParameters": { - "id": 9760, - "nodeType": "ParameterList", - "parameters": [], - "src": "6815:0:50" - }, - "scope": 10684, - "src": "6619:346:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1258 - ], - "body": { - "id": 9830, - "nodeType": "Block", - "src": "8390:354:50", - "statements": [ - { - "assignments": [ - 9795, - 9797, - 9799, - 9801 - ], - "declarations": [ - { - "constant": false, - "id": 9795, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "8409:20:50", - "nodeType": "VariableDeclaration", - "scope": 9830, - "src": "8401:28:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 9794, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8401:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9797, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "8439:6:50", - "nodeType": "VariableDeclaration", - "scope": 9830, - "src": "8431:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9796, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8431:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9799, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "8455:12:50", - "nodeType": "VariableDeclaration", - "scope": 9830, - "src": "8447:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9798, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8447:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9801, - "mutability": "mutable", - "name": "allocationProof", - "nameLocation": "8482:15:50", - "nodeType": "VariableDeclaration", - "scope": 9830, - "src": "8469:28:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 9800, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8469:5:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 9815, - "initialValue": { - "arguments": [ - { - "id": 9804, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9779, - "src": "8525:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "components": [ - { - "id": 9806, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8544:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 9805, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8544:7:50", - "typeDescriptions": {} - } - }, - { - "id": 9808, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8553:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 9807, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8553:7:50", - "typeDescriptions": {} - } - }, - { - "id": 9810, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8562:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9809, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8562:7:50", - "typeDescriptions": {} - } - }, - { - "id": 9812, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8571:5:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 9811, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8571:5:50", - "typeDescriptions": {} - } - } - ], - "id": 9813, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "8543:34:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_uint256_$_$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$", - "typeString": "tuple(type(bytes32),type(uint256),type(address),type(bytes storage pointer))" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_uint256_$_$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$", - "typeString": "tuple(type(bytes32),type(uint256),type(address),type(bytes storage pointer))" - } - ], - "expression": { - "id": 9802, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "8501:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 9803, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "8505:6:50", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "8501:10:50", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9814, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8501:86:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bytes32_$_t_uint256_$_t_address_payable_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bytes32,uint256,address payable,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8400:187:50" - }, - { - "expression": { - "arguments": [ - { - "id": 9817, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9777, - "src": "8607:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9818, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9799, - "src": "8616:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9819, - "name": "subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9795, - "src": "8630:20:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 9820, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9797, - "src": "8652:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9821, - "name": "allocationProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9801, - "src": "8660:15:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 9822, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "8677:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 9816, - "name": "_allocate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12401, - "src": "8597:9:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint32_$returns$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (address,address,bytes32,uint256,bytes memory,uint32) returns (struct Allocation.State memory)" - } - }, - "id": 9823, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8597:96:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 9824, - "nodeType": "ExpressionStatement", - "src": "8597:96:50" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9826, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9777, - "src": "8723:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9827, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9779, - "src": "8732:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 9825, - "name": "ServiceStarted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1210, - "src": "8708:14:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (address,bytes memory)" - } - }, - "id": 9828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8708:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9829, - "nodeType": "EmitStatement", - "src": "8703:34:50" - } - ] - }, - "documentation": { - "id": 9775, - "nodeType": "StructuredDocumentation", - "src": "6971:1153:50", - "text": " @notice Allocates tokens to subgraph deployment, manifesting the indexer's commitment to index it\n @dev This is the equivalent of the `allocate` function in the legacy Staking contract.\n Requirements:\n - The indexer must be registered\n - The provision must be valid according to the subgraph service rules\n - Allocation id cannot be zero\n - Allocation id cannot be reused from the legacy staking contract\n - The indexer must have enough available tokens to allocate\n The `allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`.\n See {AllocationManager-allocate} for more details.\n Emits {ServiceStarted} and {AllocationCreated} events\n @param indexer The address of the indexer\n @param data Encoded data:\n - bytes32 `subgraphDeploymentId`: The id of the subgraph deployment\n - uint256 `tokens`: The amount of tokens to allocate\n - address `allocationId`: The id of the allocation\n - bytes `allocationProof`: Signed proof of the allocation id address ownership" - }, - "functionSelector": "dedf6726", - "id": 9831, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 9783, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9777, - "src": "8280:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9784, - "kind": "modifierInvocation", - "modifierName": { - "id": 9782, - "name": "onlyAuthorizedForProvision", - "nameLocations": [ - "8253:26:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1703, - "src": "8253:26:50" - }, - "nodeType": "ModifierInvocation", - "src": "8253:35:50" - }, - { - "arguments": [ - { - "id": 9786, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9777, - "src": "8316:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9787, - "kind": "modifierInvocation", - "modifierName": { - "id": 9785, - "name": "onlyValidProvision", - "nameLocations": [ - "8297:18:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1728, - "src": "8297:18:50" - }, - "nodeType": "ModifierInvocation", - "src": "8297:27:50" - }, - { - "arguments": [ - { - "id": 9789, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9777, - "src": "8355:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9790, - "kind": "modifierInvocation", - "modifierName": { - "id": 9788, - "name": "onlyRegisteredIndexer", - "nameLocations": [ - "8333:21:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 9567, - "src": "8333:21:50" - }, - "nodeType": "ModifierInvocation", - "src": "8333:30:50" - }, - { - "id": 9792, - "kind": "modifierInvocation", - "modifierName": { - "id": 9791, - "name": "whenNotPaused", - "nameLocations": [ - "8372:13:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5329, - "src": "8372:13:50" - }, - "nodeType": "ModifierInvocation", - "src": "8372:13:50" - } - ], - "name": "startService", - "nameLocation": "8138:12:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9781, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "8236:8:50" - }, - "parameters": { - "id": 9780, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9777, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "8168:7:50", - "nodeType": "VariableDeclaration", - "scope": 9831, - "src": "8160:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9776, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8160:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9779, - "mutability": "mutable", - "name": "data", - "nameLocation": "8200:4:50", - "nodeType": "VariableDeclaration", - "scope": 9831, - "src": "8185:19:50", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 9778, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8185:5:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "8150:60:50" - }, - "returnParameters": { - "id": 9793, - "nodeType": "ParameterList", - "parameters": [], - "src": "8390:0:50" - }, - "scope": 10684, - "src": "8129:615:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1266 - ], - "body": { - "id": 9881, - "nodeType": "Block", - "src": "9962:315:50", - "statements": [ - { - "assignments": [ - 9849 - ], - "declarations": [ - { - "constant": false, - "id": 9849, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "9980:12:50", - "nodeType": "VariableDeclaration", - "scope": 9881, - "src": "9972:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9848, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9972:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 9857, - "initialValue": { - "arguments": [ - { - "id": 9852, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9836, - "src": "10006:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "components": [ - { - "id": 9854, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10013:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9853, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10013:7:50", - "typeDescriptions": {} - } - } - ], - "id": 9855, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10012:9:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - } - ], - "expression": { - "id": 9850, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "9995:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 9851, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "9999:6:50", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "9995:10:50", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9995:27:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9972:50:50" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 9861, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9849, - "src": "10069:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 9859, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "10053:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 9860, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10065:3:50", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "10053:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 9862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10053:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 9863, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10083:7:50", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "10053:37:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 9864, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9834, - "src": "10094:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "10053:48:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 9867, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9834, - "src": "10154:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9868, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9849, - "src": "10163:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9866, - "name": "SubgraphServiceAllocationNotAuthorized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11145, - "src": "10115:38:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", - "typeString": "function (address,address) pure returns (error)" - } - }, - "id": 9869, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10115:61:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9858, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "10032:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9870, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10032:154:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9871, - "nodeType": "ExpressionStatement", - "src": "10032:154:50" - }, - { - "expression": { - "arguments": [ - { - "id": 9873, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9849, - "src": "10213:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9872, - "name": "_closeAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12890, - "src": "10196:16:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9874, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10196:30:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9875, - "nodeType": "ExpressionStatement", - "src": "10196:30:50" - }, - { - "eventCall": { - "arguments": [ - { - "id": 9877, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9834, - "src": "10256:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9878, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9836, - "src": "10265:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 9876, - "name": "ServiceStopped", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1217, - "src": "10241:14:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (address,bytes memory)" - } - }, - "id": 9879, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10241:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9880, - "nodeType": "EmitStatement", - "src": "10236:34:50" - } - ] - }, - "documentation": { - "id": 9832, - "nodeType": "StructuredDocumentation", - "src": "8750:1027:50", - "text": " @notice Close an allocation, indicating that the indexer has stopped indexing the subgraph deployment\n @dev This is the equivalent of the `closeAllocation` function in the legacy Staking contract.\n There are a few notable differences with the legacy function:\n - allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically\n without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated\n tokens for other purposes.\n - No POI is required to close an allocation. Indexers should present POIs to collect indexing rewards using {collect}.\n Requirements:\n - The indexer must be registered\n - Allocation must exist and be open\n Emits {ServiceStopped} and {AllocationClosed} events\n @param indexer The address of the indexer\n @param data Encoded data:\n - address `allocationId`: The id of the allocation" - }, - "functionSelector": "8180083b", - "id": 9882, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 9840, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9834, - "src": "9908:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9841, - "kind": "modifierInvocation", - "modifierName": { - "id": 9839, - "name": "onlyAuthorizedForProvision", - "nameLocations": [ - "9881:26:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1703, - "src": "9881:26:50" - }, - "nodeType": "ModifierInvocation", - "src": "9881:35:50" - }, - { - "arguments": [ - { - "id": 9843, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9834, - "src": "9939:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9844, - "kind": "modifierInvocation", - "modifierName": { - "id": 9842, - "name": "onlyRegisteredIndexer", - "nameLocations": [ - "9917:21:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 9567, - "src": "9917:21:50" - }, - "nodeType": "ModifierInvocation", - "src": "9917:30:50" - }, - { - "id": 9846, - "kind": "modifierInvocation", - "modifierName": { - "id": 9845, - "name": "whenNotPaused", - "nameLocations": [ - "9948:13:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5329, - "src": "9948:13:50" - }, - "nodeType": "ModifierInvocation", - "src": "9948:13:50" - } - ], - "name": "stopService", - "nameLocation": "9791:11:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9838, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "9872:8:50" - }, - "parameters": { - "id": 9837, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9834, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "9820:7:50", - "nodeType": "VariableDeclaration", - "scope": 9882, - "src": "9812:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9833, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9812:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9836, - "mutability": "mutable", - "name": "data", - "nameLocation": "9852:4:50", - "nodeType": "VariableDeclaration", - "scope": 9882, - "src": "9837:19:50", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 9835, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "9837:5:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "9802:60:50" - }, - "returnParameters": { - "id": 9847, - "nodeType": "ParameterList", - "parameters": [], - "src": "9962:0:50" - }, - "scope": 10684, - "src": "9782:495:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1279 - ], - "body": { - "id": 10007, - "nodeType": "Block", - "src": "11782:1102:50", - "statements": [ - { - "assignments": [ - 9908 - ], - "declarations": [ - { - "constant": false, - "id": 9908, - "mutability": "mutable", - "name": "paymentCollected", - "nameLocation": "11800:16:50", - "nodeType": "VariableDeclaration", - "scope": 10007, - "src": "11792:24:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9907, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11792:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9910, - "initialValue": { - "hexValue": "30", - "id": 9909, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11819:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "11792:28:50" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "id": 9915, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9911, - "name": "paymentType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9888, - "src": "11835:11:50", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 9912, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "11850:14:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", - "typeString": "type(contract IGraphPayments)" - } - }, - "id": 9913, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11865:12:50", - "memberName": "PaymentTypes", - "nodeType": "MemberAccess", - "referencedDeclaration": 2166, - "src": "11850:27:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_PaymentTypes_$2166_$", - "typeString": "type(enum IGraphPayments.PaymentTypes)" - } - }, - "id": 9914, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "11878:8:50", - "memberName": "QueryFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 2163, - "src": "11850:36:50", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "src": "11835:51:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "id": 9954, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9950, - "name": "paymentType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9888, - "src": "12251:11:50", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 9951, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "12266:14:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", - "typeString": "type(contract IGraphPayments)" - } - }, - "id": 9952, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12281:12:50", - "memberName": "PaymentTypes", - "nodeType": "MemberAccess", - "referencedDeclaration": 2166, - "src": "12266:27:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_PaymentTypes_$2166_$", - "typeString": "type(enum IGraphPayments.PaymentTypes)" - } - }, - "id": 9953, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "12294:15:50", - "memberName": "IndexingRewards", - "nodeType": "MemberAccess", - "referencedDeclaration": 2165, - "src": "12266:43:50", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "src": "12251:58:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 9996, - "nodeType": "Block", - "src": "12688:78:50", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 9993, - "name": "paymentType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9888, - "src": "12743:11:50", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - ], - "id": 9992, - "name": "SubgraphServiceInvalidPaymentType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11122, - "src": "12709:33:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_enum$_PaymentTypes_$2166_$returns$_t_error_$", - "typeString": "function (enum IGraphPayments.PaymentTypes) pure returns (error)" - } - }, - "id": 9994, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12709:46:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - }, - "id": 9995, - "nodeType": "RevertStatement", - "src": "12702:53:50" - } - ] - }, - "id": 9997, - "nodeType": "IfStatement", - "src": "12247:519:50", - "trueBody": { - "id": 9991, - "nodeType": "Block", - "src": "12311:371:50", - "statements": [ - { - "assignments": [ - 9956, - 9958 - ], - "declarations": [ - { - "constant": false, - "id": 9956, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "12334:12:50", - "nodeType": "VariableDeclaration", - "scope": 9991, - "src": "12326:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9955, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12326:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9958, - "mutability": "mutable", - "name": "poi", - "nameLocation": "12356:3:50", - "nodeType": "VariableDeclaration", - "scope": 9991, - "src": "12348:11:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 9957, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "12348:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 9968, - "initialValue": { - "arguments": [ - { - "id": 9961, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9890, - "src": "12374:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "components": [ - { - "id": 9963, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12381:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9962, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12381:7:50", - "typeDescriptions": {} - } - }, - { - "id": 9965, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12390:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 9964, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "12390:7:50", - "typeDescriptions": {} - } - } - ], - "id": 9966, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12380:18:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes32_$_$", - "typeString": "tuple(type(address),type(bytes32))" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes32_$_$", - "typeString": "tuple(type(address),type(bytes32))" - } - ], - "expression": { - "id": 9959, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "12363:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 9960, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "12367:6:50", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "12363:10:50", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9967, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12363:36:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_payable_$_t_bytes32_$", - "typeString": "tuple(address payable,bytes32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12325:74:50" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9976, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 9972, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9956, - "src": "12454:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 9970, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "12438:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 9971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12450:3:50", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "12438:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 9973, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12438:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 9974, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12468:7:50", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "12438:37:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 9975, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9885, - "src": "12479:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "12438:48:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 9978, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9885, - "src": "12543:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9979, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9956, - "src": "12552:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9977, - "name": "SubgraphServiceAllocationNotAuthorized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11145, - "src": "12504:38:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", - "typeString": "function (address,address) pure returns (error)" - } - }, - "id": 9980, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12504:61:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9969, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "12413:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12413:166:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9982, - "nodeType": "ExpressionStatement", - "src": "12413:166:50" - }, - { - "expression": { - "id": 9989, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9983, - "name": "paymentCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9908, - "src": "12593:16:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 9985, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9956, - "src": "12636:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9986, - "name": "poi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9958, - "src": "12650:3:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 9987, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "12655:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 9984, - "name": "_collectIndexingRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12657, - "src": "12612:23:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$_t_uint32_$returns$_t_uint256_$", - "typeString": "function (address,bytes32,uint32) returns (uint256)" - } - }, - "id": 9988, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12612:59:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12593:78:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9990, - "nodeType": "ExpressionStatement", - "src": "12593:78:50" - } - ] - } - }, - "id": 9998, - "nodeType": "IfStatement", - "src": "11831:935:50", - "trueBody": { - "id": 9949, - "nodeType": "Block", - "src": "11888:353:50", - "statements": [ - { - "assignments": [ - 9920 - ], - "declarations": [ - { - "constant": false, - "id": 9920, - "mutability": "mutable", - "name": "signedRav", - "nameLocation": "11933:9:50", - "nodeType": "VariableDeclaration", - "scope": 9949, - "src": "11902:40:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV" - }, - "typeName": { - "id": 9919, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9918, - "name": "ITAPCollector.SignedRAV", - "nameLocations": [ - "11902:13:50", - "11916:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2546, - "src": "11902:23:50" - }, - "referencedDeclaration": 2546, - "src": "11902:23:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_storage_ptr", - "typeString": "struct ITAPCollector.SignedRAV" - } - }, - "visibility": "internal" - } - ], - "id": 9928, - "initialValue": { - "arguments": [ - { - "id": 9923, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9890, - "src": "11956:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "components": [ - { - "expression": { - "id": 9924, - "name": "ITAPCollector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2695, - "src": "11963:13:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ITAPCollector_$2695_$", - "typeString": "type(contract ITAPCollector)" - } - }, - "id": 9925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11977:9:50", - "memberName": "SignedRAV", - "nodeType": "MemberAccess", - "referencedDeclaration": 2546, - "src": "11963:23:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_SignedRAV_$2546_storage_ptr_$", - "typeString": "type(struct ITAPCollector.SignedRAV storage pointer)" - } - } - ], - "id": 9926, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "11962:25:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_SignedRAV_$2546_storage_ptr_$", - "typeString": "type(struct ITAPCollector.SignedRAV storage pointer)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_type$_t_struct$_SignedRAV_$2546_storage_ptr_$", - "typeString": "type(struct ITAPCollector.SignedRAV storage pointer)" - } - ], - "expression": { - "id": 9921, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "11945:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 9922, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "11949:6:50", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "11945:10:50", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9927, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11945:43:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11902:86:50" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9934, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 9930, - "name": "signedRav", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9920, - "src": "12027:9:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV memory" - } - }, - "id": 9931, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12037:3:50", - "memberName": "rav", - "nodeType": "MemberAccess", - "referencedDeclaration": 2543, - "src": "12027:13:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_memory_ptr", - "typeString": "struct ITAPCollector.ReceiptAggregateVoucher memory" - } - }, - "id": 9932, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12041:15:50", - "memberName": "serviceProvider", - "nodeType": "MemberAccess", - "referencedDeclaration": 2532, - "src": "12027:29:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 9933, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9885, - "src": "12060:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "12027:40:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "expression": { - "expression": { - "id": 9936, - "name": "signedRav", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9920, - "src": "12116:9:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV memory" - } - }, - "id": 9937, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12126:3:50", - "memberName": "rav", - "nodeType": "MemberAccess", - "referencedDeclaration": 2543, - "src": "12116:13:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_memory_ptr", - "typeString": "struct ITAPCollector.ReceiptAggregateVoucher memory" - } - }, - "id": 9938, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12130:15:50", - "memberName": "serviceProvider", - "nodeType": "MemberAccess", - "referencedDeclaration": 2532, - "src": "12116:29:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9939, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9885, - "src": "12147:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9935, - "name": "SubgraphServiceIndexerMismatch", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11138, - "src": "12085:30:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", - "typeString": "function (address,address) pure returns (error)" - } - }, - "id": 9940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12085:70:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 9929, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "12002:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 9941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12002:167:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9942, - "nodeType": "ExpressionStatement", - "src": "12002:167:50" - }, - { - "expression": { - "id": 9947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9943, - "name": "paymentCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9908, - "src": "12183:16:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 9945, - "name": "signedRav", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9920, - "src": "12220:9:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV memory" - } - ], - "id": 9944, - "name": "_collectQueryFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10661, - "src": "12202:17:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SignedRAV_$2546_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (struct ITAPCollector.SignedRAV memory) returns (uint256)" - } - }, - "id": 9946, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12202:28:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12183:47:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9948, - "nodeType": "ExpressionStatement", - "src": "12183:47:50" - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "id": 10000, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9885, - "src": "12805:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10001, - "name": "paymentType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9888, - "src": "12814:11:50", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - { - "id": 10002, - "name": "paymentCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9908, - "src": "12827:16:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9999, - "name": "ServicePaymentCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1227, - "src": "12781:23:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_enum$_PaymentTypes_$2166_$_t_uint256_$returns$__$", - "typeString": "function (address,enum IGraphPayments.PaymentTypes,uint256)" - } - }, - "id": 10003, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12781:63:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10004, - "nodeType": "EmitStatement", - "src": "12776:68:50" - }, - { - "expression": { - "id": 10005, - "name": "paymentCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9908, - "src": "12861:16:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 9906, - "id": 10006, - "nodeType": "Return", - "src": "12854:23:50" - } - ] - }, - "documentation": { - "id": 9883, - "nodeType": "StructuredDocumentation", - "src": "10283:1163:50", - "text": " @notice Collects payment for the service provided by the indexer\n Allows collecting different types of payments such as query fees and indexing rewards.\n It uses Graph Horizon payments protocol to process payments.\n Reverts if the payment type is not supported.\n @dev This function is the equivalent of the `collect` function for query fees and the `closeAllocation` function\n for indexing rewards in the legacy Staking contract.\n Requirements:\n - The indexer must be registered\n - The provision must be valid according to the subgraph service rules\n Emits a {ServicePaymentCollected} event. Emits payment type specific events.\n For query fees, see {SubgraphService-_collectQueryFees} for more details.\n For indexing rewards, see {AllocationManager-_collectIndexingRewards} for more details.\n @param indexer The address of the indexer\n @param paymentType The type of payment to collect as defined in {IGraphPayments}\n @param data Encoded data to fulfill the payment. The structure of the data depends on the payment type. See above." - }, - "functionSelector": "b15d2a2c", - "id": 10008, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 9894, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9885, - "src": "11646:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9895, - "kind": "modifierInvocation", - "modifierName": { - "id": 9893, - "name": "onlyAuthorizedForProvision", - "nameLocations": [ - "11619:26:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1703, - "src": "11619:26:50" - }, - "nodeType": "ModifierInvocation", - "src": "11619:35:50" - }, - { - "arguments": [ - { - "id": 9897, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9885, - "src": "11682:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9898, - "kind": "modifierInvocation", - "modifierName": { - "id": 9896, - "name": "onlyValidProvision", - "nameLocations": [ - "11663:18:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1728, - "src": "11663:18:50" - }, - "nodeType": "ModifierInvocation", - "src": "11663:27:50" - }, - { - "arguments": [ - { - "id": 9900, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9885, - "src": "11721:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 9901, - "kind": "modifierInvocation", - "modifierName": { - "id": 9899, - "name": "onlyRegisteredIndexer", - "nameLocations": [ - "11699:21:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 9567, - "src": "11699:21:50" - }, - "nodeType": "ModifierInvocation", - "src": "11699:30:50" - }, - { - "id": 9903, - "kind": "modifierInvocation", - "modifierName": { - "id": 9902, - "name": "whenNotPaused", - "nameLocations": [ - "11738:13:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5329, - "src": "11738:13:50" - }, - "nodeType": "ModifierInvocation", - "src": "11738:13:50" - } - ], - "name": "collect", - "nameLocation": "11460:7:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9892, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "11602:8:50" - }, - "parameters": { - "id": 9891, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9885, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "11485:7:50", - "nodeType": "VariableDeclaration", - "scope": 10008, - "src": "11477:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9884, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11477:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9888, - "mutability": "mutable", - "name": "paymentType", - "nameLocation": "11530:11:50", - "nodeType": "VariableDeclaration", - "scope": 10008, - "src": "11502:39:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 9887, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9886, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "11502:14:50", - "11517:12:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "11502:27:50" - }, - "referencedDeclaration": 2166, - "src": "11502:27:50", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9890, - "mutability": "mutable", - "name": "data", - "nameLocation": "11566:4:50", - "nodeType": "VariableDeclaration", - "scope": 10008, - "src": "11551:19:50", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 9889, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "11551:5:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "11467:109:50" - }, - "returnParameters": { - "id": 9906, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9905, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10008, - "src": "11769:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9904, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11769:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11768:9:50" - }, - "scope": 10684, - "src": "11451:1433:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1287 - ], - "body": { - "id": 10051, - "nodeType": "Block", - "src": "13497:226:50", - "statements": [ - { - "assignments": [ - 10020, - 10022 - ], - "declarations": [ - { - "constant": false, - "id": 10020, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "13516:6:50", - "nodeType": "VariableDeclaration", - "scope": 10051, - "src": "13508:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10019, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13508:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10022, - "mutability": "mutable", - "name": "reward", - "nameLocation": "13532:6:50", - "nodeType": "VariableDeclaration", - "scope": 10051, - "src": "13524:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10021, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13524:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10032, - "initialValue": { - "arguments": [ - { - "id": 10025, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10013, - "src": "13553:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "components": [ - { - "id": 10027, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13560:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 10026, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13560:7:50", - "typeDescriptions": {} - } - }, - { - "id": 10029, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13569:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 10028, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13569:7:50", - "typeDescriptions": {} - } - } - ], - "id": 10030, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "13559:18:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$", - "typeString": "tuple(type(uint256),type(uint256))" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$", - "typeString": "tuple(type(uint256),type(uint256))" - } - ], - "expression": { - "id": 10023, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "13542:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 10024, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "13546:6:50", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "13542:10:50", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 10031, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13542:36:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13507:71:50" - }, - { - "expression": { - "arguments": [ - { - "id": 10036, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10011, - "src": "13610:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10037, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10020, - "src": "13619:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 10038, - "name": "reward", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10022, - "src": "13627:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10041, - "name": "_disputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13369, - "src": "13643:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IDisputeManager_$11057_$", - "typeString": "function () view returns (contract IDisputeManager)" - } - }, - "id": 10042, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13643:17:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - ], - "id": 10040, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13635:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 10039, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13635:7:50", - "typeDescriptions": {} - } - }, - "id": 10043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13635:26:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10033, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "13588:13:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 10034, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13588:15:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 10035, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13604:5:50", - "memberName": "slash", - "nodeType": "MemberAccess", - "referencedDeclaration": 3626, - "src": "13588:21:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$", - "typeString": "function (address,uint256,uint256,address) external" - } - }, - "id": 10044, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13588:74:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10045, - "nodeType": "ExpressionStatement", - "src": "13588:74:50" - }, - { - "eventCall": { - "arguments": [ - { - "id": 10047, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10011, - "src": "13700:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10048, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10020, - "src": "13709:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10046, - "name": "ServiceProviderSlashed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1234, - "src": "13677:22:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 10049, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13677:39:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10050, - "nodeType": "EmitStatement", - "src": "13672:44:50" - } - ] - }, - "documentation": { - "id": 10009, - "nodeType": "StructuredDocumentation", - "src": "12890:512:50", - "text": " @notice Slash an indexer\n @dev Slashing is delegated to the {DisputeManager} contract which is the only one that can call this\n function.\n See {IHorizonStaking-slash} for more details.\n Emits a {ServiceProviderSlashed} event.\n @param indexer The address of the indexer to be slashed\n @param data Encoded data:\n - uint256 `tokens`: The amount of tokens to slash\n - uint256 `reward`: The amount of tokens to reward the slasher" - }, - "functionSelector": "cb8347fe", - "id": 10052, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10017, - "kind": "modifierInvocation", - "modifierName": { - "id": 10016, - "name": "onlyDisputeManager", - "nameLocations": [ - "13478:18:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13305, - "src": "13478:18:50" - }, - "nodeType": "ModifierInvocation", - "src": "13478:18:50" - } - ], - "name": "slash", - "nameLocation": "13416:5:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10015, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "13469:8:50" - }, - "parameters": { - "id": 10014, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10011, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "13430:7:50", - "nodeType": "VariableDeclaration", - "scope": 10052, - "src": "13422:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10010, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13422:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10013, - "mutability": "mutable", - "name": "data", - "nameLocation": "13454:4:50", - "nodeType": "VariableDeclaration", - "scope": 10052, - "src": "13439:19:50", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 10012, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "13439:5:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "13421:38:50" - }, - "returnParameters": { - "id": 10018, - "nodeType": "ParameterList", - "parameters": [], - "src": "13497:0:50" - }, - "scope": 10684, - "src": "13407:316:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11171 - ], - "body": { - "id": 10107, - "nodeType": "Block", - "src": "13874:471:50", - "statements": [ - { - "assignments": [ - 10063 - ], - "declarations": [ - { - "constant": false, - "id": 10063, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "13908:10:50", - "nodeType": "VariableDeclaration", - "scope": 10107, - "src": "13884:34:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 10062, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10061, - "name": "Allocation.State", - "nameLocations": [ - "13884:10:50", - "13895:5:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "13884:16:50" - }, - "referencedDeclaration": 11307, - "src": "13884:16:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 10068, - "initialValue": { - "arguments": [ - { - "id": 10066, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10055, - "src": "13937:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 10064, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "13921:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 10065, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13933:3:50", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "13921:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 10067, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13921:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13884:66:50" - }, - { - "assignments": [ - 10070 - ], - "declarations": [ - { - "constant": false, - "id": 10070, - "mutability": "mutable", - "name": "isStale", - "nameLocation": "13965:7:50", - "nodeType": "VariableDeclaration", - "scope": 10107, - "src": "13960:12:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10069, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "13960:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 10075, - "initialValue": { - "arguments": [ - { - "id": 10073, - "name": "maxPOIStaleness", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13056, - "src": "13994:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 10071, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10063, - "src": "13975:10:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10072, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13986:7:50", - "memberName": "isStale", - "nodeType": "MemberAccess", - "referencedDeclaration": 11587, - "src": "13975:18:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11307_memory_ptr_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory,uint256) view returns (bool)" - } - }, - "id": 10074, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13975:35:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13960:50:50" - }, - { - "assignments": [ - 10077 - ], - "declarations": [ - { - "constant": false, - "id": 10077, - "mutability": "mutable", - "name": "isOverAllocated_", - "nameLocation": "14025:16:50", - "nodeType": "VariableDeclaration", - "scope": 10107, - "src": "14020:21:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10076, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "14020:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 10083, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 10079, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10063, - "src": "14061:10:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10080, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14072:7:50", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "14061:18:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10081, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "14081:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 10078, - "name": "_isOverAllocated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12997, - "src": "14044:16:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint32_$returns$_t_bool_$", - "typeString": "function (address,uint32) view returns (bool)" - } - }, - "id": 10082, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14044:53:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "14020:77:50" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 10087, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10085, - "name": "isStale", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10070, - "src": "14115:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "id": 10086, - "name": "isOverAllocated_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10077, - "src": "14126:16:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "14115:27:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 10089, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10055, - "src": "14186:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10088, - "name": "SubgraphServiceCannotForceCloseAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11157, - "src": "14144:41:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 10090, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14144:55:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 10084, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "14107:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 10091, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14107:93:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10092, - "nodeType": "ExpressionStatement", - "src": "14107:93:50" - }, - { - "expression": { - "arguments": [ - { - "id": 10097, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "14218:26:50", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 10094, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10063, - "src": "14219:10:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10095, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14230:12:50", - "memberName": "isAltruistic", - "nodeType": "MemberAccess", - "referencedDeclaration": 11640, - "src": "14219:23:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 10096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14219:25:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 10099, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10055, - "src": "14284:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10098, - "name": "SubgraphServiceAllocationIsAltruistic", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11162, - "src": "14246:37:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 10100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14246:51:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 10093, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "14210:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 10101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14210:88:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10102, - "nodeType": "ExpressionStatement", - "src": "14210:88:50" - }, - { - "expression": { - "arguments": [ - { - "id": 10104, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10055, - "src": "14325:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10103, - "name": "_closeAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12890, - "src": "14308:16:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 10105, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14308:30:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10106, - "nodeType": "ExpressionStatement", - "src": "14308:30:50" - } - ] - }, - "documentation": { - "id": 10053, - "nodeType": "StructuredDocumentation", - "src": "13729:70:50", - "text": " @notice See {ISubgraphService.closeStaleAllocation}" - }, - "functionSelector": "a827a90c", - "id": 10108, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "forceCloseAllocation", - "nameLocation": "13813:20:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10057, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "13865:8:50" - }, - "parameters": { - "id": 10056, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10055, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "13842:12:50", - "nodeType": "VariableDeclaration", - "scope": 10108, - "src": "13834:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10054, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13834:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "13833:22:50" - }, - "returnParameters": { - "id": 10058, - "nodeType": "ParameterList", - "parameters": [], - "src": "13874:0:50" - }, - "scope": 10684, - "src": "13804:541:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11181 - ], - "body": { - "id": 10149, - "nodeType": "Block", - "src": "14695:237:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 10136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 10132, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10113, - "src": "14742:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 10130, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "14726:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 10131, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14738:3:50", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "14726:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 10133, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14726:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10134, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14756:7:50", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "14726:37:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 10135, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10111, - "src": "14767:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "14726:48:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 10138, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10111, - "src": "14827:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10139, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10113, - "src": "14836:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10137, - "name": "SubgraphServiceAllocationNotAuthorized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11145, - "src": "14788:38:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", - "typeString": "function (address,address) pure returns (error)" - } - }, - "id": 10140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14788:61:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 10129, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "14705:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 10141, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14705:154:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10142, - "nodeType": "ExpressionStatement", - "src": "14705:154:50" - }, - { - "expression": { - "arguments": [ - { - "id": 10144, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10113, - "src": "14887:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10145, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10115, - "src": "14901:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 10146, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "14909:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 10143, - "name": "_resizeAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12823, - "src": "14869:17:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint32_$returns$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (address,uint256,uint32) returns (struct Allocation.State memory)" - } - }, - "id": 10147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14869:56:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10148, - "nodeType": "ExpressionStatement", - "src": "14869:56:50" - } - ] - }, - "documentation": { - "id": 10109, - "nodeType": "StructuredDocumentation", - "src": "14351:66:50", - "text": " @notice See {ISubgraphService.resizeAllocation}" - }, - "functionSelector": "81e777a7", - "id": 10150, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 10118, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10111, - "src": "14585:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 10119, - "kind": "modifierInvocation", - "modifierName": { - "id": 10117, - "name": "onlyAuthorizedForProvision", - "nameLocations": [ - "14558:26:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1703, - "src": "14558:26:50" - }, - "nodeType": "ModifierInvocation", - "src": "14558:35:50" - }, - { - "arguments": [ - { - "id": 10121, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10111, - "src": "14621:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 10122, - "kind": "modifierInvocation", - "modifierName": { - "id": 10120, - "name": "onlyValidProvision", - "nameLocations": [ - "14602:18:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1728, - "src": "14602:18:50" - }, - "nodeType": "ModifierInvocation", - "src": "14602:27:50" - }, - { - "arguments": [ - { - "id": 10124, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10111, - "src": "14660:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 10125, - "kind": "modifierInvocation", - "modifierName": { - "id": 10123, - "name": "onlyRegisteredIndexer", - "nameLocations": [ - "14638:21:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 9567, - "src": "14638:21:50" - }, - "nodeType": "ModifierInvocation", - "src": "14638:30:50" - }, - { - "id": 10127, - "kind": "modifierInvocation", - "modifierName": { - "id": 10126, - "name": "whenNotPaused", - "nameLocations": [ - "14677:13:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5329, - "src": "14677:13:50" - }, - "nodeType": "ModifierInvocation", - "src": "14677:13:50" - } - ], - "name": "resizeAllocation", - "nameLocation": "14431:16:50", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10116, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10111, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "14465:7:50", - "nodeType": "VariableDeclaration", - "scope": 10150, - "src": "14457:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10110, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14457:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10113, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "14490:12:50", - "nodeType": "VariableDeclaration", - "scope": 10150, - "src": "14482:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10112, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14482:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10115, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "14520:6:50", - "nodeType": "VariableDeclaration", - "scope": 10150, - "src": "14512:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10114, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14512:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "14447:85:50" - }, - "returnParameters": { - "id": 10128, - "nodeType": "ParameterList", - "parameters": [], - "src": "14695:0:50" - }, - "scope": 10684, - "src": "14422:510:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11191 - ], - "body": { - "id": 10169, - "nodeType": "Block", - "src": "15176:86:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10164, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10153, - "src": "15211:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10165, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10155, - "src": "15220:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10166, - "name": "subgraphDeploymentID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10157, - "src": "15234:20:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 10163, - "name": "_migrateLegacyAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12307, - "src": "15186:24:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$", - "typeString": "function (address,address,bytes32)" - } - }, - "id": 10167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15186:69:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10168, - "nodeType": "ExpressionStatement", - "src": "15186:69:50" - } - ] - }, - "documentation": { - "id": 10151, - "nodeType": "StructuredDocumentation", - "src": "14938:73:50", - "text": " @notice See {ISubgraphService.migrateLegacyAllocation}" - }, - "functionSelector": "7dfe6d28", - "id": 10170, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10161, - "kind": "modifierInvocation", - "modifierName": { - "id": 10160, - "name": "onlyOwner", - "nameLocations": [ - "15166:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "15166:9:50" - }, - "nodeType": "ModifierInvocation", - "src": "15166:9:50" - } - ], - "name": "migrateLegacyAllocation", - "nameLocation": "15025:23:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10159, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "15157:8:50" - }, - "parameters": { - "id": 10158, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10153, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "15066:7:50", - "nodeType": "VariableDeclaration", - "scope": 10170, - "src": "15058:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10152, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15058:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10155, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "15091:12:50", - "nodeType": "VariableDeclaration", - "scope": 10170, - "src": "15083:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10154, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15083:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10157, - "mutability": "mutable", - "name": "subgraphDeploymentID", - "nameLocation": "15121:20:50", - "nodeType": "VariableDeclaration", - "scope": 10170, - "src": "15113:28:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10156, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "15113:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "15048:99:50" - }, - "returnParameters": { - "id": 10162, - "nodeType": "ParameterList", - "parameters": [], - "src": "15176:0:50" - }, - "scope": 10684, - "src": "15016:246:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11199 - ], - "body": { - "id": 10186, - "nodeType": "Block", - "src": "15430:58:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10182, - "name": "pauseGuardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10173, - "src": "15458:13:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10183, - "name": "allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10175, - "src": "15473:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 10181, - "name": "_setPauseGuardian", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1185, - "src": "15440:17:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$", - "typeString": "function (address,bool)" - } - }, - "id": 10184, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15440:41:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10185, - "nodeType": "ExpressionStatement", - "src": "15440:41:50" - } - ] - }, - "documentation": { - "id": 10171, - "nodeType": "StructuredDocumentation", - "src": "15268:66:50", - "text": " @notice See {ISubgraphService.setPauseGuardian}" - }, - "functionSelector": "35577962", - "id": 10187, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10179, - "kind": "modifierInvocation", - "modifierName": { - "id": 10178, - "name": "onlyOwner", - "nameLocations": [ - "15420:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "15420:9:50" - }, - "nodeType": "ModifierInvocation", - "src": "15420:9:50" - } - ], - "name": "setPauseGuardian", - "nameLocation": "15348:16:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10177, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "15411:8:50" - }, - "parameters": { - "id": 10176, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10173, - "mutability": "mutable", - "name": "pauseGuardian", - "nameLocation": "15373:13:50", - "nodeType": "VariableDeclaration", - "scope": 10187, - "src": "15365:21:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10172, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15365:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10175, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "15393:7:50", - "nodeType": "VariableDeclaration", - "scope": 10187, - "src": "15388:12:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10174, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "15388:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "15364:37:50" - }, - "returnParameters": { - "id": 10180, - "nodeType": "ParameterList", - "parameters": [], - "src": "15430:0:50" - }, - "scope": 10684, - "src": "15339:149:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11235 - ], - "body": { - "id": 10200, - "nodeType": "Block", - "src": "15647:71:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 10195, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "15680:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 10196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15684:6:50", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "15680:10:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10197, - "name": "rewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10190, - "src": "15692:18:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10194, - "name": "_setRewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12910, - "src": "15657:22:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 10198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15657:54:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10199, - "nodeType": "ExpressionStatement", - "src": "15657:54:50" - } - ] - }, - "documentation": { - "id": 10188, - "nodeType": "StructuredDocumentation", - "src": "15494:71:50", - "text": " @notice See {ISubgraphService.setRewardsDestination}" - }, - "functionSelector": "772495c3", - "id": 10201, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setRewardsDestination", - "nameLocation": "15579:21:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10192, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "15638:8:50" - }, - "parameters": { - "id": 10191, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10190, - "mutability": "mutable", - "name": "rewardsDestination", - "nameLocation": "15609:18:50", - "nodeType": "VariableDeclaration", - "scope": 10201, - "src": "15601:26:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10189, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15601:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15600:28:50" - }, - "returnParameters": { - "id": 10193, - "nodeType": "ParameterList", - "parameters": [], - "src": "15647:0:50" - }, - "scope": 10684, - "src": "15570:148:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11205 - ], - "body": { - "id": 10215, - "nodeType": "Block", - "src": "15899:95:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10211, - "name": "minimumProvisionTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10204, - "src": "15934:22:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 10212, - "name": "DEFAULT_MAX_PROVISION_TOKENS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1621, - "src": "15958:28:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10210, - "name": "_setProvisionTokensRange", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1825, - "src": "15909:24:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 10213, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15909:78:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10214, - "nodeType": "ExpressionStatement", - "src": "15909:78:50" - } - ] - }, - "documentation": { - "id": 10202, - "nodeType": "StructuredDocumentation", - "src": "15724:75:50", - "text": " @notice See {ISubgraphService.setMinimumProvisionTokens}" - }, - "functionSelector": "832bc923", - "id": 10216, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10208, - "kind": "modifierInvocation", - "modifierName": { - "id": 10207, - "name": "onlyOwner", - "nameLocations": [ - "15889:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "15889:9:50" - }, - "nodeType": "ModifierInvocation", - "src": "15889:9:50" - } - ], - "name": "setMinimumProvisionTokens", - "nameLocation": "15813:25:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10206, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "15880:8:50" - }, - "parameters": { - "id": 10205, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10204, - "mutability": "mutable", - "name": "minimumProvisionTokens", - "nameLocation": "15847:22:50", - "nodeType": "VariableDeclaration", - "scope": 10216, - "src": "15839:30:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10203, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15839:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15838:32:50" - }, - "returnParameters": { - "id": 10209, - "nodeType": "ParameterList", - "parameters": [], - "src": "15899:0:50" - }, - "scope": 10684, - "src": "15804:190:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11211 - ], - "body": { - "id": 10229, - "nodeType": "Block", - "src": "16153:53:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10226, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10219, - "src": "16183:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 10225, - "name": "_setDelegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1793, - "src": "16163:19:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32)" - } - }, - "id": 10227, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16163:36:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10228, - "nodeType": "ExpressionStatement", - "src": "16163:36:50" - } - ] - }, - "documentation": { - "id": 10217, - "nodeType": "StructuredDocumentation", - "src": "16000:68:50", - "text": " @notice See {ISubgraphService.setDelegationRatio}" - }, - "functionSelector": "1dd42f60", - "id": 10230, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10223, - "kind": "modifierInvocation", - "modifierName": { - "id": 10222, - "name": "onlyOwner", - "nameLocations": [ - "16143:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "16143:9:50" - }, - "nodeType": "ModifierInvocation", - "src": "16143:9:50" - } - ], - "name": "setDelegationRatio", - "nameLocation": "16082:18:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10221, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "16134:8:50" - }, - "parameters": { - "id": 10220, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10219, - "mutability": "mutable", - "name": "delegationRatio", - "nameLocation": "16108:15:50", - "nodeType": "VariableDeclaration", - "scope": 10230, - "src": "16101:22:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10218, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "16101:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "16100:24:50" - }, - "returnParameters": { - "id": 10224, - "nodeType": "ParameterList", - "parameters": [], - "src": "16153:0:50" - }, - "scope": 10684, - "src": "16073:133:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11217 - ], - "body": { - "id": 10243, - "nodeType": "Block", - "src": "16370:56:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10240, - "name": "stakeToFeesRatio_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10233, - "src": "16401:17:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10239, - "name": "_setStakeToFeesRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10683, - "src": "16380:20:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 10241, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16380:39:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10242, - "nodeType": "ExpressionStatement", - "src": "16380:39:50" - } - ] - }, - "documentation": { - "id": 10231, - "nodeType": "StructuredDocumentation", - "src": "16212:69:50", - "text": " @notice See {ISubgraphService.setStakeToFeesRatio}" - }, - "functionSelector": "e6f50054", - "id": 10244, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10237, - "kind": "modifierInvocation", - "modifierName": { - "id": 10236, - "name": "onlyOwner", - "nameLocations": [ - "16360:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "16360:9:50" - }, - "nodeType": "ModifierInvocation", - "src": "16360:9:50" - } - ], - "name": "setStakeToFeesRatio", - "nameLocation": "16295:19:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10235, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "16351:8:50" - }, - "parameters": { - "id": 10234, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10233, - "mutability": "mutable", - "name": "stakeToFeesRatio_", - "nameLocation": "16323:17:50", - "nodeType": "VariableDeclaration", - "scope": 10244, - "src": "16315:25:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10232, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16315:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "16314:27:50" - }, - "returnParameters": { - "id": 10238, - "nodeType": "ParameterList", - "parameters": [], - "src": "16370:0:50" - }, - "scope": 10684, - "src": "16286:140:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11223 - ], - "body": { - "id": 10257, - "nodeType": "Block", - "src": "16586:53:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10254, - "name": "maxPOIStaleness", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10247, - "src": "16616:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10253, - "name": "_setMaxPOIStaleness", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12925, - "src": "16596:19:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 10255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16596:36:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10256, - "nodeType": "ExpressionStatement", - "src": "16596:36:50" - } - ] - }, - "documentation": { - "id": 10245, - "nodeType": "StructuredDocumentation", - "src": "16432:68:50", - "text": " @notice See {ISubgraphService.setMaxPOIStaleness}" - }, - "functionSelector": "7aa31bce", - "id": 10258, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10251, - "kind": "modifierInvocation", - "modifierName": { - "id": 10250, - "name": "onlyOwner", - "nameLocations": [ - "16576:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "16576:9:50" - }, - "nodeType": "ModifierInvocation", - "src": "16576:9:50" - } - ], - "name": "setMaxPOIStaleness", - "nameLocation": "16514:18:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10249, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "16567:8:50" - }, - "parameters": { - "id": 10248, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10247, - "mutability": "mutable", - "name": "maxPOIStaleness", - "nameLocation": "16541:15:50", - "nodeType": "VariableDeclaration", - "scope": 10258, - "src": "16533:23:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10246, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16533:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "16532:25:50" - }, - "returnParameters": { - "id": 10252, - "nodeType": "ParameterList", - "parameters": [], - "src": "16586:0:50" - }, - "scope": 10684, - "src": "16505:134:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11229 - ], - "body": { - "id": 10285, - "nodeType": "Block", - "src": "16787:186:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 10270, - "name": "curationCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10261, - "src": "16824:11:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 10268, - "name": "PPMMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4262, - "src": "16805:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_PPMMath_$4262_$", - "typeString": "type(library PPMMath)" - } - }, - "id": 10269, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16813:10:50", - "memberName": "isValidPPM", - "nodeType": "MemberAccess", - "referencedDeclaration": 4261, - "src": "16805:18:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) pure returns (bool)" - } - }, - "id": 10271, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16805:31:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 10273, - "name": "curationCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10261, - "src": "16872:11:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10272, - "name": "SubgraphServiceInvalidCurationCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11102, - "src": "16838:33:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256) pure returns (error)" - } - }, - "id": 10274, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16838:46:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 10267, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "16797:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 10275, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16797:88:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10276, - "nodeType": "ExpressionStatement", - "src": "16797:88:50" - }, - { - "expression": { - "id": 10279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10277, - "name": "curationFeesCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10700, - "src": "16895:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10278, - "name": "curationCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10261, - "src": "16913:11:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16895:29:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10280, - "nodeType": "ExpressionStatement", - "src": "16895:29:50" - }, - { - "eventCall": { - "arguments": [ - { - "id": 10282, - "name": "curationCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10261, - "src": "16954:11:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10281, - "name": "CurationCutSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11097, - "src": "16939:14:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 10283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16939:27:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10284, - "nodeType": "EmitStatement", - "src": "16934:32:50" - } - ] - }, - "documentation": { - "id": 10259, - "nodeType": "StructuredDocumentation", - "src": "16645:64:50", - "text": " @notice See {ISubgraphService.setCurationCut}" - }, - "functionSelector": "7e89bac3", - "id": 10286, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10265, - "kind": "modifierInvocation", - "modifierName": { - "id": 10264, - "name": "onlyOwner", - "nameLocations": [ - "16777:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4743, - "src": "16777:9:50" - }, - "nodeType": "ModifierInvocation", - "src": "16777:9:50" - } - ], - "name": "setCurationCut", - "nameLocation": "16723:14:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10263, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "16768:8:50" - }, - "parameters": { - "id": 10262, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10261, - "mutability": "mutable", - "name": "curationCut", - "nameLocation": "16746:11:50", - "nodeType": "VariableDeclaration", - "scope": 10286, - "src": "16738:19:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10260, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16738:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "16737:21:50" - }, - "returnParameters": { - "id": 10266, - "nodeType": "ParameterList", - "parameters": [], - "src": "16787:0:50" - }, - "scope": 10684, - "src": "16714:259:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11244 - ], - "body": { - "id": 10300, - "nodeType": "Block", - "src": "17149:49:50", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 10296, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "17166:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 10298, - "indexExpression": { - "id": 10297, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10289, - "src": "17178:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17166:25:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "functionReturnParameters": 10295, - "id": 10299, - "nodeType": "Return", - "src": "17159:32:50" - } - ] - }, - "documentation": { - "id": 10287, - "nodeType": "StructuredDocumentation", - "src": "16979:63:50", - "text": " @notice See {ISubgraphService.getAllocation}" - }, - "functionSelector": "0e022923", - "id": 10301, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getAllocation", - "nameLocation": "17056:13:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10291, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "17106:8:50" - }, - "parameters": { - "id": 10290, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10289, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "17078:12:50", - "nodeType": "VariableDeclaration", - "scope": 10301, - "src": "17070:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10288, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17070:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17069:22:50" - }, - "returnParameters": { - "id": 10295, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10294, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10301, - "src": "17124:23:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 10293, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10292, - "name": "Allocation.State", - "nameLocations": [ - "17124:10:50", - "17135:5:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "17124:16:50" - }, - "referencedDeclaration": 11307, - "src": "17124:16:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "17123:25:50" - }, - "scope": 10684, - "src": "17047:151:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 297 - ], - "body": { - "id": 10339, - "nodeType": "Block", - "src": "18007:272:50", - "statements": [ - { - "assignments": [ - 10322 - ], - "declarations": [ - { - "constant": false, - "id": 10322, - "mutability": "mutable", - "name": "allo", - "nameLocation": "18041:4:50", - "nodeType": "VariableDeclaration", - "scope": 10339, - "src": "18017:28:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 10321, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10320, - "name": "Allocation.State", - "nameLocations": [ - "18017:10:50", - "18028:5:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "18017:16:50" - }, - "referencedDeclaration": 11307, - "src": "18017:16:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 10326, - "initialValue": { - "baseExpression": { - "id": 10323, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "18048:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 10325, - "indexExpression": { - "id": 10324, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10304, - "src": "18060:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18048:25:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "18017:56:50" - }, - { - "expression": { - "components": [ - { - "expression": { - "id": 10327, - "name": "allo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10322, - "src": "18104:4:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10328, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18109:7:50", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "18104:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 10329, - "name": "allo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10322, - "src": "18130:4:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10330, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18135:20:50", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "18130:25:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 10331, - "name": "allo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10322, - "src": "18169:4:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10332, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18174:6:50", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "18169:11:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 10333, - "name": "allo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10322, - "src": "18194:4:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10334, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18199:27:50", - "memberName": "accRewardsPerAllocatedToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 11304, - "src": "18194:32:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 10335, - "name": "allo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10322, - "src": "18240:4:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10336, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18245:17:50", - "memberName": "accRewardsPending", - "nodeType": "MemberAccess", - "referencedDeclaration": 11306, - "src": "18240:22:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 10337, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "18090:182:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(address,bytes32,uint256,uint256,uint256)" - } - }, - "functionReturnParameters": 10317, - "id": 10338, - "nodeType": "Return", - "src": "18083:189:50" - } - ] - }, - "documentation": { - "id": 10302, - "nodeType": "StructuredDocumentation", - "src": "17204:658:50", - "text": " @notice Get allocation data to calculate rewards issuance\n @dev Implements {IRewardsIssuer.getAllocationData}\n @dev Note that this is slightly different than {getAllocation}. It returns an\n unstructured subset of the allocation data, which is the minimum required to mint rewards.\n Should only be used by the {RewardsManager}.\n @param allocationId The allocation Id\n @return indexer The indexer address\n @return subgraphDeploymentId Subgraph deployment id for the allocation\n @return tokens Amount of allocated tokens\n @return accRewardsPerAllocatedToken Rewards snapshot" - }, - "functionSelector": "55c85269", - "id": 10340, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getAllocationData", - "nameLocation": "17876:17:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10306, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "17944:8:50" - }, - "parameters": { - "id": 10305, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10304, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "17911:12:50", - "nodeType": "VariableDeclaration", - "scope": 10340, - "src": "17903:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10303, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17903:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17893:36:50" - }, - "returnParameters": { - "id": 10317, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10308, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10340, - "src": "17962:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10307, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17962:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10310, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10340, - "src": "17971:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10309, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "17971:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10312, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10340, - "src": "17980:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10311, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17980:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10314, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10340, - "src": "17989:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10313, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17989:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10316, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10340, - "src": "17998:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10315, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17998:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "17961:45:50" - }, - "scope": 10684, - "src": "17867:412:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 305 - ], - "body": { - "id": 10353, - "nodeType": "Block", - "src": "18711:69:50", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 10349, - "name": "subgraphAllocatedTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13066, - "src": "18728:23:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 10351, - "indexExpression": { - "id": 10350, - "name": "subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10343, - "src": "18752:20:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18728:45:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 10348, - "id": 10352, - "nodeType": "Return", - "src": "18721:52:50" - } - ] - }, - "documentation": { - "id": 10341, - "nodeType": "StructuredDocumentation", - "src": "18285:314:50", - "text": " @notice Return the total amount of tokens allocated to subgraph.\n @dev Implements {IRewardsIssuer.getSubgraphAllocatedTokens}\n @dev To be used by the {RewardsManager}.\n @param subgraphDeploymentId Deployment Id for the subgraph\n @return Total tokens allocated to subgraph" - }, - "functionSelector": "e2e1e8e9", - "id": 10354, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getSubgraphAllocatedTokens", - "nameLocation": "18613:26:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10345, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "18684:8:50" - }, - "parameters": { - "id": 10344, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10343, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "18648:20:50", - "nodeType": "VariableDeclaration", - "scope": 10354, - "src": "18640:28:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10342, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "18640:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "18639:30:50" - }, - "returnParameters": { - "id": 10348, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10347, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10354, - "src": "18702:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10346, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18702:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "18701:9:50" - }, - "scope": 10684, - "src": "18604:176:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 313 - ], - "body": { - "id": 10369, - "nodeType": "Block", - "src": "19149:58:50", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "baseExpression": { - "id": 10363, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "19166:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 10365, - "indexExpression": { - "id": 10364, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10357, - "src": "19178:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19166:25:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "id": 10366, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19192:6:50", - "memberName": "isOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11621, - "src": "19166:32:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 10367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19166:34:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 10362, - "id": 10368, - "nodeType": "Return", - "src": "19159:41:50" - } - ] - }, - "documentation": { - "id": 10355, - "nodeType": "StructuredDocumentation", - "src": "18786:270:50", - "text": " @notice Check if an allocation is open\n @dev Implements {IRewardsIssuer.isAllocationActive}\n @dev To be used by the {RewardsManager}.\n @param allocationId The allocation Id\n @return Wether or not the allocation is active" - }, - "functionSelector": "6a3ca383", - "id": 10370, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isActiveAllocation", - "nameLocation": "19070:18:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10359, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "19125:8:50" - }, - "parameters": { - "id": 10358, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10357, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "19097:12:50", - "nodeType": "VariableDeclaration", - "scope": 10370, - "src": "19089:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10356, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19089:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "19088:22:50" - }, - "returnParameters": { - "id": 10362, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10361, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10370, - "src": "19143:4:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10360, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "19143:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "19142:6:50" - }, - "scope": 10684, - "src": "19061:146:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11253 - ], - "body": { - "id": 10384, - "nodeType": "Block", - "src": "19401:55:50", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 10380, - "name": "legacyAllocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13048, - "src": "19418:17:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - } - }, - "id": 10382, - "indexExpression": { - "id": 10381, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10373, - "src": "19436:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19418:31:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage", - "typeString": "struct LegacyAllocation.State storage ref" - } - }, - "functionReturnParameters": 10379, - "id": 10383, - "nodeType": "Return", - "src": "19411:38:50" - } - ] - }, - "documentation": { - "id": 10371, - "nodeType": "StructuredDocumentation", - "src": "19213:69:50", - "text": " @notice See {ISubgraphService.getLegacyAllocation}" - }, - "functionSelector": "6d9a3951", - "id": 10385, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getLegacyAllocation", - "nameLocation": "19296:19:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10375, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "19352:8:50" - }, - "parameters": { - "id": 10374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10373, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "19324:12:50", - "nodeType": "VariableDeclaration", - "scope": 10385, - "src": "19316:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10372, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19316:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "19315:22:50" - }, - "returnParameters": { - "id": 10379, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10378, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10385, - "src": "19370:29:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State" - }, - "typeName": { - "id": 10377, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10376, - "name": "LegacyAllocation.State", - "nameLocations": [ - "19370:16:50", - "19387:5:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "19370:22:50" - }, - "referencedDeclaration": 11933, - "src": "19370:22:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "19369:31:50" - }, - "scope": 10684, - "src": "19287:169:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11263 - ], - "body": { - "id": 10401, - "nodeType": "Block", - "src": "19649:69:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10397, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10388, - "src": "19689:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10398, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10390, - "src": "19698:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10396, - "name": "_encodeAllocationProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12977, - "src": "19666:22:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bytes32_$", - "typeString": "function (address,address) view returns (bytes32)" - } - }, - "id": 10399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19666:45:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 10395, - "id": 10400, - "nodeType": "Return", - "src": "19659:52:50" - } - ] - }, - "documentation": { - "id": 10386, - "nodeType": "StructuredDocumentation", - "src": "19462:71:50", - "text": " @notice See {ISubgraphService.encodeAllocationProof}" - }, - "functionSelector": "ce56c98b", - "id": 10402, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "encodeAllocationProof", - "nameLocation": "19547:21:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10392, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "19622:8:50" - }, - "parameters": { - "id": 10391, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10388, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "19577:7:50", - "nodeType": "VariableDeclaration", - "scope": 10402, - "src": "19569:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10387, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19569:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10390, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "19594:12:50", - "nodeType": "VariableDeclaration", - "scope": 10402, - "src": "19586:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10389, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19586:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "19568:39:50" - }, - "returnParameters": { - "id": 10395, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10394, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10402, - "src": "19640:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10393, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "19640:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "19639:9:50" - }, - "scope": 10684, - "src": "19538:180:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11271 - ], - "body": { - "id": 10419, - "nodeType": "Block", - "src": "19883:78:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10416, - "name": "maxPOIStaleness", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13056, - "src": "19938:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 10413, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10405, - "src": "19916:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 10411, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "19900:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 10412, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19912:3:50", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "19900:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 10414, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19900:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10415, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19930:7:50", - "memberName": "isStale", - "nodeType": "MemberAccess", - "referencedDeclaration": 11587, - "src": "19900:37:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11307_memory_ptr_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory,uint256) view returns (bool)" - } - }, - "id": 10417, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19900:54:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 10410, - "id": 10418, - "nodeType": "Return", - "src": "19893:61:50" - } - ] - }, - "documentation": { - "id": 10403, - "nodeType": "StructuredDocumentation", - "src": "19724:67:50", - "text": " @notice See {ISubgraphService.isStaleAllocation}" - }, - "functionSelector": "3f0ed79d", - "id": 10420, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isStaleAllocation", - "nameLocation": "19805:17:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10407, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "19859:8:50" - }, - "parameters": { - "id": 10406, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10405, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "19831:12:50", - "nodeType": "VariableDeclaration", - "scope": 10420, - "src": "19823:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10404, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19823:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "19822:22:50" - }, - "returnParameters": { - "id": 10410, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10409, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10420, - "src": "19877:4:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10408, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "19877:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "19876:6:50" - }, - "scope": 10684, - "src": "19796:165:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 11279 - ], - "body": { - "id": 10434, - "nodeType": "Block", - "src": "20117:66:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10430, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10423, - "src": "20151:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10431, - "name": "delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "20160:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 10429, - "name": "_isOverAllocated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12997, - "src": "20134:16:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint32_$returns$_t_bool_$", - "typeString": "function (address,uint32) view returns (bool)" - } - }, - "id": 10432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20134:42:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 10428, - "id": 10433, - "nodeType": "Return", - "src": "20127:49:50" - } - ] - }, - "documentation": { - "id": 10421, - "nodeType": "StructuredDocumentation", - "src": "19967:65:50", - "text": " @notice See {ISubgraphService.isOverAllocated}" - }, - "functionSelector": "ba38f67d", - "id": 10435, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isOverAllocated", - "nameLocation": "20046:15:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10425, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "20093:8:50" - }, - "parameters": { - "id": 10424, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10423, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "20070:7:50", - "nodeType": "VariableDeclaration", - "scope": 10435, - "src": "20062:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10422, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20062:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "20061:17:50" - }, - "returnParameters": { - "id": 10428, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10427, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10435, - "src": "20111:4:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10426, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "20111:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "20110:6:50" - }, - "scope": 10684, - "src": "20037:146:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 2050 - ], - "body": { - "id": 10451, - "nodeType": "Block", - "src": "20661:90:50", - "statements": [ - { - "expression": { - "components": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10444, - "name": "_disputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13369, - "src": "20679:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IDisputeManager_$11057_$", - "typeString": "function () view returns (contract IDisputeManager)" - } - }, - "id": 10445, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20679:17:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - }, - "id": 10446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "20697:16:50", - "memberName": "getDisputePeriod", - "nodeType": "MemberAccess", - "referencedDeclaration": 11015, - "src": "20679:34:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$", - "typeString": "function () view external returns (uint64)" - } - }, - "id": 10447, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20679:36:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 10448, - "name": "DEFAULT_MAX_THAWING_PERIOD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1607, - "src": "20717:26:50", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "id": 10449, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "20678:66:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint64_$_t_uint64_$", - "typeString": "tuple(uint64,uint64)" - } - }, - "functionReturnParameters": 10443, - "id": 10450, - "nodeType": "Return", - "src": "20671:73:50" - } - ] - }, - "documentation": { - "id": 10436, - "nodeType": "StructuredDocumentation", - "src": "20233:333:50", - "text": " @notice Getter for the accepted thawing period range for provisions\n @dev This override ensures {ProvisionManager} uses the thawing period from the {DisputeManager}\n @return min The minimum thawing period which is defined by {DisputeManager-getDisputePeriod}\n @return max The maximum is unbounded" - }, - "id": 10452, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getThawingPeriodRange", - "nameLocation": "20580:22:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10438, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "20619:8:50" - }, - "parameters": { - "id": 10437, - "nodeType": "ParameterList", - "parameters": [], - "src": "20602:2:50" - }, - "returnParameters": { - "id": 10443, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10440, - "mutability": "mutable", - "name": "min", - "nameLocation": "20644:3:50", - "nodeType": "VariableDeclaration", - "scope": 10452, - "src": "20637:10:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 10439, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "20637:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10442, - "mutability": "mutable", - "name": "max", - "nameLocation": "20656:3:50", - "nodeType": "VariableDeclaration", - "scope": 10452, - "src": "20649:10:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 10441, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "20649:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "20636:24:50" - }, - "scope": 10684, - "src": "20571:180:50", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [ - 2063 - ], - "body": { - "id": 10468, - "nodeType": "Block", - "src": "21076:86:50", - "statements": [ - { - "expression": { - "components": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10461, - "name": "_disputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13369, - "src": "21094:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IDisputeManager_$11057_$", - "typeString": "function () view returns (contract IDisputeManager)" - } - }, - "id": 10462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21094:17:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - }, - "id": 10463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21112:14:50", - "memberName": "getVerifierCut", - "nodeType": "MemberAccess", - "referencedDeclaration": 11010, - "src": "21094:32:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint32_$", - "typeString": "function () view external returns (uint32)" - } - }, - "id": 10464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21094:34:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 10465, - "name": "DEFAULT_MAX_VERIFIER_CUT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1593, - "src": "21130:24:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "id": 10466, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "21093:62:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$", - "typeString": "tuple(uint32,uint32)" - } - }, - "functionReturnParameters": 10460, - "id": 10467, - "nodeType": "Return", - "src": "21086:69:50" - } - ] - }, - "documentation": { - "id": 10453, - "nodeType": "StructuredDocumentation", - "src": "20757:226:50", - "text": " @notice Getter for the accepted verifier cut range for provisions\n @return min The minimum verifier cut which is defined by {DisputeManager-getVerifierCut}\n @return max The maximum is 100% in PPM" - }, - "id": 10469, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getVerifierCutRange", - "nameLocation": "20997:20:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10455, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "21034:8:50" - }, - "parameters": { - "id": 10454, - "nodeType": "ParameterList", - "parameters": [], - "src": "21017:2:50" - }, - "returnParameters": { - "id": 10460, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10457, - "mutability": "mutable", - "name": "min", - "nameLocation": "21059:3:50", - "nodeType": "VariableDeclaration", - "scope": 10469, - "src": "21052:10:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10456, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "21052:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10459, - "mutability": "mutable", - "name": "max", - "nameLocation": "21071:3:50", - "nodeType": "VariableDeclaration", - "scope": 10469, - "src": "21064:10:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10458, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "21064:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "21051:24:50" - }, - "scope": 10684, - "src": "20988:174:50", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 10660, - "nodeType": "Block", - "src": "22613:2203:50", - "statements": [ - { - "assignments": [ - 10479 - ], - "declarations": [ - { - "constant": false, - "id": 10479, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "22631:7:50", - "nodeType": "VariableDeclaration", - "scope": 10660, - "src": "22623:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10478, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22623:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 10483, - "initialValue": { - "expression": { - "expression": { - "id": 10480, - "name": "_signedRav", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10473, - "src": "22641:10:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV memory" - } - }, - "id": 10481, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22652:3:50", - "memberName": "rav", - "nodeType": "MemberAccess", - "referencedDeclaration": 2543, - "src": "22641:14:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_memory_ptr", - "typeString": "struct ITAPCollector.ReceiptAggregateVoucher memory" - } - }, - "id": 10482, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22656:15:50", - "memberName": "serviceProvider", - "nodeType": "MemberAccess", - "referencedDeclaration": 2532, - "src": "22641:30:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "22623:48:50" - }, - { - "assignments": [ - 10485 - ], - "declarations": [ - { - "constant": false, - "id": 10485, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "22689:12:50", - "nodeType": "VariableDeclaration", - "scope": 10660, - "src": "22681:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10484, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22681:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 10495, - "initialValue": { - "arguments": [ - { - "expression": { - "expression": { - "id": 10488, - "name": "_signedRav", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10473, - "src": "22715:10:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV memory" - } - }, - "id": 10489, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22726:3:50", - "memberName": "rav", - "nodeType": "MemberAccess", - "referencedDeclaration": 2543, - "src": "22715:14:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ReceiptAggregateVoucher_$2539_memory_ptr", - "typeString": "struct ITAPCollector.ReceiptAggregateVoucher memory" - } - }, - "id": 10490, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22730:8:50", - "memberName": "metadata", - "nodeType": "MemberAccess", - "referencedDeclaration": 2538, - "src": "22715:23:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "components": [ - { - "id": 10492, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "22741:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 10491, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22741:7:50", - "typeDescriptions": {} - } - } - ], - "id": 10493, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "22740:9:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - } - ], - "expression": { - "id": 10486, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "22704:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 10487, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "22708:6:50", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "22704:10:50", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 10494, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22704:46:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "22681:69:50" - }, - { - "assignments": [ - 10500 - ], - "declarations": [ - { - "constant": false, - "id": 10500, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "22784:10:50", - "nodeType": "VariableDeclaration", - "scope": 10660, - "src": "22760:34:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 10499, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10498, - "name": "Allocation.State", - "nameLocations": [ - "22760:10:50", - "22771:5:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "22760:16:50" - }, - "referencedDeclaration": 11307, - "src": "22760:16:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 10505, - "initialValue": { - "arguments": [ - { - "id": 10503, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10485, - "src": "22813:12:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 10501, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "22797:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 10502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22809:3:50", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "22797:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 10504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22797:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "22760:66:50" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 10510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 10507, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10500, - "src": "22930:10:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10508, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22941:7:50", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "22930:18:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 10509, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10479, - "src": "22952:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "22930:29:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 10512, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10479, - "src": "22987:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 10513, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10500, - "src": "22996:10:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10514, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23007:7:50", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "22996:18:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10511, - "name": "SubgraphServiceInvalidRAV", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11152, - "src": "22961:25:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", - "typeString": "function (address,address) pure returns (error)" - } - }, - "id": 10515, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22961:54:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 10506, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "22922:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 10516, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22922:94:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10517, - "nodeType": "ExpressionStatement", - "src": "22922:94:50" - }, - { - "assignments": [ - 10519 - ], - "declarations": [ - { - "constant": false, - "id": 10519, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "23034:20:50", - "nodeType": "VariableDeclaration", - "scope": 10660, - "src": "23026:28:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10518, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "23026:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 10522, - "initialValue": { - "expression": { - "id": 10520, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10500, - "src": "23057:10:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 10521, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23068:20:50", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "23057:31:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "23026:62:50" - }, - { - "expression": { - "arguments": [ - { - "id": 10524, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10479, - "src": "23153:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "30", - "id": 10525, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23162:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 10523, - "name": "_releaseStake", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 880, - "src": "23139:13:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 10526, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23139:25:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10527, - "nodeType": "ExpressionStatement", - "src": "23139:25:50" - }, - { - "assignments": [ - 10529 - ], - "declarations": [ - { - "constant": false, - "id": 10529, - "mutability": "mutable", - "name": "balanceBefore", - "nameLocation": "23278:13:50", - "nodeType": "VariableDeclaration", - "scope": 10660, - "src": "23270:21:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10528, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23270:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10538, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 10535, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "23326:4:50", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SubgraphService_$10684", - "typeString": "contract SubgraphService" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SubgraphService_$10684", - "typeString": "contract SubgraphService" - } - ], - "id": 10534, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "23318:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 10533, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "23318:7:50", - "typeDescriptions": {} - } - }, - "id": 10536, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23318:13:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10530, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "23294:11:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 10531, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23294:13:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 10532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23308:9:50", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 5831, - "src": "23294:23:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 10537, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23294:38:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "23270:62:50" - }, - { - "assignments": [ - 10540 - ], - "declarations": [ - { - "constant": false, - "id": 10540, - "mutability": "mutable", - "name": "curationCut", - "nameLocation": "23351:11:50", - "nodeType": "VariableDeclaration", - "scope": 10660, - "src": "23343:19:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10539, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23343:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10549, - "initialValue": { - "condition": { - "arguments": [ - { - "id": 10544, - "name": "subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10519, - "src": "23387:20:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10541, - "name": "_curation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13389, - "src": "23365:9:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ICuration_$165_$", - "typeString": "function () view returns (contract ICuration)" - } - }, - "id": 10542, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23365:11:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "id": 10543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23377:9:50", - "memberName": "isCurated", - "nodeType": "MemberAccess", - "referencedDeclaration": 110, - "src": "23365:21:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (bytes32) view external returns (bool)" - } - }, - "id": 10545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23365:43:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 10547, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23429:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 10548, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "23365:65:50", - "trueExpression": { - "id": 10546, - "name": "curationFeesCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10700, - "src": "23411:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "23343:87:50" - }, - { - "assignments": [ - 10551 - ], - "declarations": [ - { - "constant": false, - "id": 10551, - "mutability": "mutable", - "name": "tokensCollected", - "nameLocation": "23448:15:50", - "nodeType": "VariableDeclaration", - "scope": 10660, - "src": "23440:23:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10550, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23440:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10564, - "initialValue": { - "arguments": [ - { - "expression": { - "expression": { - "id": 10555, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "23503:14:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", - "typeString": "type(contract IGraphPayments)" - } - }, - "id": 10556, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23518:12:50", - "memberName": "PaymentTypes", - "nodeType": "MemberAccess", - "referencedDeclaration": 2166, - "src": "23503:27:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_PaymentTypes_$2166_$", - "typeString": "type(enum IGraphPayments.PaymentTypes)" - } - }, - "id": 10557, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "23531:8:50", - "memberName": "QueryFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 2163, - "src": "23503:36:50", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - { - "arguments": [ - { - "id": 10560, - "name": "_signedRav", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10473, - "src": "23564:10:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV memory" - } - }, - { - "id": 10561, - "name": "curationCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10540, - "src": "23576:11:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 10558, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "23553:3:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 10559, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "23557:6:50", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "23553:10:50", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 10562, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23553:35:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10552, - "name": "_tapCollector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13379, - "src": "23466:13:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ITAPCollector_$2695_$", - "typeString": "function () view returns (contract ITAPCollector)" - } - }, - "id": 10553, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23466:15:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITAPCollector_$2695", - "typeString": "contract ITAPCollector" - } - }, - "id": 10554, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23482:7:50", - "memberName": "collect", - "nodeType": "MemberAccess", - "referencedDeclaration": 2267, - "src": "23466:23:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_enum$_PaymentTypes_$2166_$_t_bytes_memory_ptr_$returns$_t_uint256_$", - "typeString": "function (enum IGraphPayments.PaymentTypes,bytes memory) external returns (uint256)" - } - }, - "id": 10563, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23466:132:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "23440:158:50" - }, - { - "assignments": [ - 10566 - ], - "declarations": [ - { - "constant": false, - "id": 10566, - "mutability": "mutable", - "name": "tokensCurators", - "nameLocation": "23616:14:50", - "nodeType": "VariableDeclaration", - "scope": 10660, - "src": "23608:22:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10565, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23608:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10571, - "initialValue": { - "arguments": [ - { - "id": 10569, - "name": "curationCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10540, - "src": "23656:11:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 10567, - "name": "tokensCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10551, - "src": "23633:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23649:6:50", - "memberName": "mulPPM", - "nodeType": "MemberAccess", - "referencedDeclaration": 4219, - "src": "23633:22:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 10570, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23633:35:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "23608:60:50" - }, - { - "assignments": [ - 10573 - ], - "declarations": [ - { - "constant": false, - "id": 10573, - "mutability": "mutable", - "name": "balanceAfter", - "nameLocation": "23687:12:50", - "nodeType": "VariableDeclaration", - "scope": 10660, - "src": "23679:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10572, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23679:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10582, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 10579, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "23734:4:50", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SubgraphService_$10684", - "typeString": "contract SubgraphService" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SubgraphService_$10684", - "typeString": "contract SubgraphService" - } - ], - "id": 10578, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "23726:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 10577, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "23726:7:50", - "typeDescriptions": {} - } - }, - "id": 10580, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23726:13:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10574, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "23702:11:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 10575, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23702:13:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 10576, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23716:9:50", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 5831, - "src": "23702:23:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 10581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23702:38:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "23679:61:50" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10588, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10586, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10584, - "name": "balanceBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10529, - "src": "23771:13:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 10585, - "name": "tokensCurators", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10566, - "src": "23787:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "23771:30:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 10587, - "name": "balanceAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10573, - "src": "23805:12:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "23771:46:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 10590, - "name": "balanceBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10529, - "src": "23869:13:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 10591, - "name": "balanceAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10573, - "src": "23884:12:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 10592, - "name": "tokensCurators", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10566, - "src": "23898:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10589, - "name": "SubgraphServiceInconsistentCollection", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11131, - "src": "23831:37:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256,uint256) pure returns (error)" - } - }, - "id": 10593, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23831:82:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 10583, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "23750:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 10594, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23750:173:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10595, - "nodeType": "ExpressionStatement", - "src": "23750:173:50" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10598, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10596, - "name": "tokensCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10551, - "src": "23938:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 10597, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23956:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "23938:19:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10651, - "nodeType": "IfStatement", - "src": "23934:768:50", - "trueBody": { - "id": 10650, - "nodeType": "Block", - "src": "23959:743:50", - "statements": [ - { - "assignments": [ - 10600 - ], - "declarations": [ - { - "constant": false, - "id": 10600, - "mutability": "mutable", - "name": "tokensToLock", - "nameLocation": "24037:12:50", - "nodeType": "VariableDeclaration", - "scope": 10650, - "src": "24029:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10599, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24029:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10604, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10603, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10601, - "name": "tokensCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10551, - "src": "24052:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 10602, - "name": "stakeToFeesRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10697, - "src": "24070:16:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24052:34:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "24029:57:50" - }, - { - "assignments": [ - 10606 - ], - "declarations": [ - { - "constant": false, - "id": 10606, - "mutability": "mutable", - "name": "unlockTimestamp", - "nameLocation": "24108:15:50", - "nodeType": "VariableDeclaration", - "scope": 10650, - "src": "24100:23:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10605, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24100:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10614, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 10607, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "24126:5:50", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 10608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24132:9:50", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "24126:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10609, - "name": "_disputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13369, - "src": "24144:15:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IDisputeManager_$11057_$", - "typeString": "function () view returns (contract IDisputeManager)" - } - }, - "id": 10610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24144:17:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - }, - "id": 10611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24162:16:50", - "memberName": "getDisputePeriod", - "nodeType": "MemberAccess", - "referencedDeclaration": 11015, - "src": "24144:34:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint64_$", - "typeString": "function () view external returns (uint64)" - } - }, - "id": 10612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24144:36:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "24126:54:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "24100:80:50" - }, - { - "expression": { - "arguments": [ - { - "id": 10616, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10479, - "src": "24205:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10617, - "name": "tokensToLock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10600, - "src": "24214:12:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 10618, - "name": "unlockTimestamp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10606, - "src": "24228:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10615, - "name": "_lockStake", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "24194:10:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 10619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24194:50:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10620, - "nodeType": "ExpressionStatement", - "src": "24194:50:50" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10623, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10621, - "name": "tokensCurators", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10566, - "src": "24263:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 10622, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "24280:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "24263:18:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10649, - "nodeType": "IfStatement", - "src": "24259:433:50", - "trueBody": { - "id": 10648, - "nodeType": "Block", - "src": "24283:409:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10627, - "name": "subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10519, - "src": "24438:20:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10624, - "name": "_graphRewardsManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4590, - "src": "24392:20:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", - "typeString": "function () view returns (contract IRewardsManager)" - } - }, - "id": 10625, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24392:22:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "id": 10626, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24415:22:50", - "memberName": "onSubgraphSignalUpdate", - "nodeType": "MemberAccess", - "referencedDeclaration": 430, - "src": "24392:45:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", - "typeString": "function (bytes32) external returns (uint256)" - } - }, - "id": 10628, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24392:67:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10629, - "nodeType": "ExpressionStatement", - "src": "24392:67:50" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10635, - "name": "_curation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13389, - "src": "24573:9:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ICuration_$165_$", - "typeString": "function () view returns (contract ICuration)" - } - }, - "id": 10636, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24573:11:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - ], - "id": 10634, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "24565:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 10633, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "24565:7:50", - "typeDescriptions": {} - } - }, - "id": 10637, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24565:20:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10638, - "name": "tokensCurators", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10566, - "src": "24587:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10630, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "24540:11:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 10631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24540:13:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 10632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24554:10:50", - "memberName": "pushTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 578, - "src": "24540:24:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", - "typeString": "function (contract IGraphToken,address,uint256)" - } - }, - "id": 10639, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24540:62:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10640, - "nodeType": "ExpressionStatement", - "src": "24540:62:50" - }, - { - "expression": { - "arguments": [ - { - "id": 10644, - "name": "subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10519, - "src": "24640:20:50", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 10645, - "name": "tokensCurators", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10566, - "src": "24662:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10641, - "name": "_curation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13389, - "src": "24620:9:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ICuration_$165_$", - "typeString": "function () view returns (contract ICuration)" - } - }, - "id": 10642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24620:11:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "id": 10643, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24632:7:50", - "memberName": "collect", - "nodeType": "MemberAccess", - "referencedDeclaration": 102, - "src": "24620:19:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$returns$__$", - "typeString": "function (bytes32,uint256) external" - } - }, - "id": 10646, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24620:57:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10647, - "nodeType": "ExpressionStatement", - "src": "24620:57:50" - } - ] - } - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "id": 10653, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10479, - "src": "24736:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 10654, - "name": "tokensCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10551, - "src": "24745:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 10655, - "name": "tokensCurators", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10566, - "src": "24762:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10652, - "name": "QueryFeesCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11087, - "src": "24717:18:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 10656, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24717:60:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10657, - "nodeType": "EmitStatement", - "src": "24712:65:50" - }, - { - "expression": { - "id": 10658, - "name": "tokensCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10551, - "src": "24794:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 10477, - "id": 10659, - "nodeType": "Return", - "src": "24787:22:50" - } - ] - }, - "documentation": { - "id": 10470, - "nodeType": "StructuredDocumentation", - "src": "21168:1330:50", - "text": " @notice Collect query fees\n Stake equal to the amount being collected times the `stakeToFeesRatio` is locked into a stake claim.\n This claim can be released at a later stage once expired.\n It's important to note that before collecting this function will attempt to release any expired stake claims.\n This could lead to an out of gas error if there are too many expired claims. In that case, the indexer will need to\n manually release the claims, see {IDataServiceFees-releaseStake}, before attempting to collect again.\n @dev This function is the equivalent of the legacy `collect` function for query fees.\n @dev Uses the {TAPCollector} to collect payment from Graph Horizon payments protocol.\n Fees are distributed to service provider and delegators by {GraphPayments}, though curators\n share is distributed by this function.\n Query fees can be collected on closed allocations.\n Requirements:\n - Indexer must have enough available tokens to lock as economic security for fees\n Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\n Emits a {StakeClaimLocked} event.\n Emits a {QueryFeesCollected} event.\n @param _signedRav Signed RAV" - }, - "id": 10661, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_collectQueryFees", - "nameLocation": "22512:17:50", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10474, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10473, - "mutability": "mutable", - "name": "_signedRav", - "nameLocation": "22561:10:50", - "nodeType": "VariableDeclaration", - "scope": 10661, - "src": "22530:41:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_memory_ptr", - "typeString": "struct ITAPCollector.SignedRAV" - }, - "typeName": { - "id": 10472, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10471, - "name": "ITAPCollector.SignedRAV", - "nameLocations": [ - "22530:13:50", - "22544:9:50" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2546, - "src": "22530:23:50" - }, - "referencedDeclaration": 2546, - "src": "22530:23:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SignedRAV_$2546_storage_ptr", - "typeString": "struct ITAPCollector.SignedRAV" - } - }, - "visibility": "internal" - } - ], - "src": "22529:43:50" - }, - "returnParameters": { - "id": 10477, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10476, - "mutability": "mutable", - "name": "feesCollected", - "nameLocation": "22598:13:50", - "nodeType": "VariableDeclaration", - "scope": 10661, - "src": "22590:21:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10475, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "22590:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "22589:23:50" - }, - "scope": 10684, - "src": "22503:2313:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 10682, - "nodeType": "Block", - "src": "24887:193:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10667, - "name": "_stakeToFeesRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10663, - "src": "24905:17:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 10668, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "24926:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "24905:22:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10670, - "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11165, - "src": "24929:42:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 10671, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24929:44:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 10666, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "24897:7:50", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 10672, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24897:77:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10673, - "nodeType": "ExpressionStatement", - "src": "24897:77:50" - }, - { - "expression": { - "id": 10676, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10674, - "name": "stakeToFeesRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10697, - "src": "24984:16:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10675, - "name": "_stakeToFeesRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10663, - "src": "25003:17:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24984:36:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10677, - "nodeType": "ExpressionStatement", - "src": "24984:36:50" - }, - { - "eventCall": { - "arguments": [ - { - "id": 10679, - "name": "_stakeToFeesRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10663, - "src": "25055:17:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10678, - "name": "StakeToFeesRatioSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11092, - "src": "25035:19:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 10680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25035:38:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10681, - "nodeType": "EmitStatement", - "src": "25030:43:50" - } - ] - }, - "id": 10683, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setStakeToFeesRatio", - "nameLocation": "24831:20:50", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10664, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10663, - "mutability": "mutable", - "name": "_stakeToFeesRatio", - "nameLocation": "24860:17:50", - "nodeType": "VariableDeclaration", - "scope": 10683, - "src": "24852:25:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10662, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24852:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "24851:27:50" - }, - "returnParameters": { - "id": 10665, - "nodeType": "ParameterList", - "parameters": [], - "src": "24887:0:50" - }, - "scope": 10684, - "src": "24822:258:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - } - ], - "scope": 10685, - "src": "1852:23230:50", - "usedErrors": [ - 1371, - 1374, - 1400, - 1421, - 1658, - 1665, - 1672, - 1677, - 3827, - 3830, - 3833, - 3836, - 4187, - 4380, - 4684, - 4689, - 4865, - 4868, - 5290, - 5293, - 5887, - 5890, - 6393, - 6398, - 6403, - 11102, - 11105, - 11108, - 11111, - 11116, - 11122, - 11131, - 11138, - 11145, - 11152, - 11157, - 11162, - 11165, - 11312, - 11317, - 11324, - 11938, - 11948, - 12235, - 12238, - 12243, - 12250, - 13282 - ], - "usedEvents": [ - 1198, - 1203, - 1210, - 1217, - 1227, - 1234, - 1346, - 1357, - 1366, - 1395, - 1628, - 1633, - 1640, - 1647, - 4375, - 4695, - 4873, - 5282, - 5287, - 5776, - 11087, - 11092, - 11097, - 12164, - 12183, - 12196, - 12207, - 12216, - 12223, - 12228, - 13275 - ] - } - ], - "src": "45:25038:50" - }, - "id": 50 - }, - "contracts/SubgraphServiceStorage.sol": { - "ast": { - "absolutePath": "contracts/SubgraphServiceStorage.sol", - "exportedSymbols": { - "ISubgraphService": [ - 11280 - ], - "SubgraphServiceV1Storage": [ - 10701 - ] - }, - "id": 10702, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 10686, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:51" - }, - { - "absolutePath": "contracts/interfaces/ISubgraphService.sol", - "file": "./interfaces/ISubgraphService.sol", - "id": 10688, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10702, - "sourceUnit": 11281, - "src": "70:69:51", - "symbolAliases": [ - { - "foreign": { - "id": 10687, - "name": "ISubgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11280, - "src": "79:16:51", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "SubgraphServiceV1Storage", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "id": 10701, - "linearizedBaseContracts": [ - 10701 - ], - "name": "SubgraphServiceV1Storage", - "nameLocation": "159:24:51", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 10689, - "nodeType": "StructuredDocumentation", - "src": "190:60:51", - "text": "@notice Service providers registered in the data service" - }, - "functionSelector": "4f793cdc", - "id": 10694, - "mutability": "mutable", - "name": "indexers", - "nameLocation": "323:8:51", - "nodeType": "VariableDeclaration", - "scope": 10701, - "src": "255:76:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", - "typeString": "mapping(address => struct ISubgraphService.Indexer)" - }, - "typeName": { - "id": 10693, - "keyName": "indexer", - "keyNameLocation": "271:7:51", - "keyType": { - "id": 10690, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "263:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "255:60:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Indexer_$11078_storage_$", - "typeString": "mapping(address => struct ISubgraphService.Indexer)" - }, - "valueName": "details", - "valueNameLocation": "307:7:51", - "valueType": { - "id": 10692, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10691, - "name": "ISubgraphService.Indexer", - "nameLocations": [ - "282:16:51", - "299:7:51" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11078, - "src": "282:24:51" - }, - "referencedDeclaration": 11078, - "src": "282:24:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Indexer_$11078_storage_ptr", - "typeString": "struct ISubgraphService.Indexer" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 10695, - "nodeType": "StructuredDocumentation", - "src": "338:67:51", - "text": "@notice Multiplier for how many tokens back collected query fees" - }, - "functionSelector": "d07a7a84", - "id": 10697, - "mutability": "mutable", - "name": "stakeToFeesRatio", - "nameLocation": "425:16:51", - "nodeType": "VariableDeclaration", - "scope": 10701, - "src": "410:31:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10696, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "410:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 10698, - "nodeType": "StructuredDocumentation", - "src": "448:57:51", - "text": "@notice The cut curators take from query fee payments" - }, - "functionSelector": "138dea08", - "id": 10700, - "mutability": "mutable", - "name": "curationFeesCut", - "nameLocation": "525:15:51", - "nodeType": "VariableDeclaration", - "scope": 10701, - "src": "510:30:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10699, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "510:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - } - ], - "scope": 10702, - "src": "141:402:51", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "45:499:51" - }, - "id": 51 - }, - "contracts/interfaces/IDisputeManager.sol": { - "ast": { - "absolutePath": "contracts/interfaces/IDisputeManager.sol", - "exportedSymbols": { - "Attestation": [ - 11920 - ], - "IDisputeManager": [ - 11057 - ] - }, - "id": 11058, - "license": "GPL-2.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 10703, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "46:23:52" - }, - { - "absolutePath": "contracts/libraries/Attestation.sol", - "file": "../libraries/Attestation.sol", - "id": 10705, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11058, - "sourceUnit": 11921, - "src": "71:59:52", - "symbolAliases": [ - { - "foreign": { - "id": 10704, - "name": "Attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11920, - "src": "80:11:52", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IDisputeManager", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 11057, - "linearizedBaseContracts": [ - 11057 - ], - "name": "IDisputeManager", - "nameLocation": "142:15:52", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "IDisputeManager.DisputeType", - "documentation": { - "id": 10706, - "nodeType": "StructuredDocumentation", - "src": "164:49:52", - "text": "@notice Types of disputes that can be created" - }, - "id": 10710, - "members": [ - { - "id": 10707, - "name": "Null", - "nameLocation": "245:4:52", - "nodeType": "EnumValue", - "src": "245:4:52" - }, - { - "id": 10708, - "name": "IndexingDispute", - "nameLocation": "259:15:52", - "nodeType": "EnumValue", - "src": "259:15:52" - }, - { - "id": 10709, - "name": "QueryDispute", - "nameLocation": "284:12:52", - "nodeType": "EnumValue", - "src": "284:12:52" - } - ], - "name": "DisputeType", - "nameLocation": "223:11:52", - "nodeType": "EnumDefinition", - "src": "218:84:52" - }, - { - "canonicalName": "IDisputeManager.DisputeStatus", - "documentation": { - "id": 10711, - "nodeType": "StructuredDocumentation", - "src": "308:31:52", - "text": "@notice Status of a dispute" - }, - "id": 10718, - "members": [ - { - "id": 10712, - "name": "Null", - "nameLocation": "373:4:52", - "nodeType": "EnumValue", - "src": "373:4:52" - }, - { - "id": 10713, - "name": "Accepted", - "nameLocation": "387:8:52", - "nodeType": "EnumValue", - "src": "387:8:52" - }, - { - "id": 10714, - "name": "Rejected", - "nameLocation": "405:8:52", - "nodeType": "EnumValue", - "src": "405:8:52" - }, - { - "id": 10715, - "name": "Drawn", - "nameLocation": "423:5:52", - "nodeType": "EnumValue", - "src": "423:5:52" - }, - { - "id": 10716, - "name": "Pending", - "nameLocation": "438:7:52", - "nodeType": "EnumValue", - "src": "438:7:52" - }, - { - "id": 10717, - "name": "Cancelled", - "nameLocation": "455:9:52", - "nodeType": "EnumValue", - "src": "455:9:52" - } - ], - "name": "DisputeStatus", - "nameLocation": "349:13:52", - "nodeType": "EnumDefinition", - "src": "344:126:52" - }, - { - "canonicalName": "IDisputeManager.Dispute", - "documentation": { - "id": 10719, - "nodeType": "StructuredDocumentation", - "src": "476:84:52", - "text": "@notice Disputes contain info necessary for the Arbitrator to verify and resolve" - }, - "id": 10738, - "members": [ - { - "constant": false, - "id": 10721, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "640:7:52", - "nodeType": "VariableDeclaration", - "scope": 10738, - "src": "632:15:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10720, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "632:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10723, - "mutability": "mutable", - "name": "fisherman", - "nameLocation": "711:9:52", - "nodeType": "VariableDeclaration", - "scope": 10738, - "src": "703:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10722, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "703:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10725, - "mutability": "mutable", - "name": "deposit", - "nameLocation": "793:7:52", - "nodeType": "VariableDeclaration", - "scope": 10738, - "src": "785:15:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10724, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "785:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10727, - "mutability": "mutable", - "name": "relatedDisputeId", - "nameLocation": "912:16:52", - "nodeType": "VariableDeclaration", - "scope": 10738, - "src": "904:24:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10726, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "904:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10730, - "mutability": "mutable", - "name": "disputeType", - "nameLocation": "977:11:52", - "nodeType": "VariableDeclaration", - "scope": 10738, - "src": "965:23:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeType_$10710", - "typeString": "enum IDisputeManager.DisputeType" - }, - "typeName": { - "id": 10729, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10728, - "name": "DisputeType", - "nameLocations": [ - "965:11:52" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10710, - "src": "965:11:52" - }, - "referencedDeclaration": 10710, - "src": "965:11:52", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeType_$10710", - "typeString": "enum IDisputeManager.DisputeType" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10733, - "mutability": "mutable", - "name": "status", - "nameLocation": "1045:6:52", - "nodeType": "VariableDeclaration", - "scope": 10738, - "src": "1031:20:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - }, - "typeName": { - "id": 10732, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10731, - "name": "DisputeStatus", - "nameLocations": [ - "1031:13:52" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10718, - "src": "1031:13:52" - }, - "referencedDeclaration": 10718, - "src": "1031:13:52", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10735, - "mutability": "mutable", - "name": "createdAt", - "nameLocation": "1119:9:52", - "nodeType": "VariableDeclaration", - "scope": 10738, - "src": "1111:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10734, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1111:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10737, - "mutability": "mutable", - "name": "stakeSnapshot", - "nameLocation": "1263:13:52", - "nodeType": "VariableDeclaration", - "scope": 10738, - "src": "1255:21:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10736, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1255:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Dispute", - "nameLocation": "572:7:52", - "nodeType": "StructDefinition", - "scope": 11057, - "src": "565:718:52", - "visibility": "public" - }, - { - "anonymous": false, - "documentation": { - "id": 10739, - "nodeType": "StructuredDocumentation", - "src": "1289:114:52", - "text": " @notice Emitted when arbitrator is set.\n @param arbitrator The address of the arbitrator." - }, - "eventSelector": "51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e", - "id": 10743, - "name": "ArbitratorSet", - "nameLocation": "1414:13:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10742, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10741, - "indexed": true, - "mutability": "mutable", - "name": "arbitrator", - "nameLocation": "1444:10:52", - "nodeType": "VariableDeclaration", - "scope": 10743, - "src": "1428:26:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10740, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1428:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1427:28:52" - }, - "src": "1408:48:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10744, - "nodeType": "StructuredDocumentation", - "src": "1462:121:52", - "text": " @notice Emitted when dispute period is set.\n @param disputePeriod The dispute period in seconds." - }, - "eventSelector": "310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6", - "id": 10748, - "name": "DisputePeriodSet", - "nameLocation": "1594:16:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10747, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10746, - "indexed": false, - "mutability": "mutable", - "name": "disputePeriod", - "nameLocation": "1618:13:52", - "nodeType": "VariableDeclaration", - "scope": 10748, - "src": "1611:20:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 10745, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1611:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1610:22:52" - }, - "src": "1588:45:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10749, - "nodeType": "StructuredDocumentation", - "src": "1639:142:52", - "text": " @notice Emitted when dispute deposit is set.\n @param disputeDeposit The dispute deposit required to create a dispute." - }, - "eventSelector": "97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8", - "id": 10753, - "name": "DisputeDepositSet", - "nameLocation": "1792:17:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10752, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10751, - "indexed": false, - "mutability": "mutable", - "name": "disputeDeposit", - "nameLocation": "1818:14:52", - "nodeType": "VariableDeclaration", - "scope": 10753, - "src": "1810:22:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10750, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1810:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1809:24:52" - }, - "src": "1786:48:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10754, - "nodeType": "StructuredDocumentation", - "src": "1840:135:52", - "text": " @notice Emitted when max slashing cut is set.\n @param maxSlashingCut The maximum slashing cut that can be set." - }, - "eventSelector": "7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502", - "id": 10758, - "name": "MaxSlashingCutSet", - "nameLocation": "1986:17:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10757, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10756, - "indexed": false, - "mutability": "mutable", - "name": "maxSlashingCut", - "nameLocation": "2011:14:52", - "nodeType": "VariableDeclaration", - "scope": 10758, - "src": "2004:21:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10755, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2004:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2003:23:52" - }, - "src": "1980:47:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10759, - "nodeType": "StructuredDocumentation", - "src": "2033:127:52", - "text": " @notice Emitted when fisherman reward cut is set.\n @param fishermanRewardCut The fisherman reward cut." - }, - "eventSelector": "c573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab", - "id": 10763, - "name": "FishermanRewardCutSet", - "nameLocation": "2171:21:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10762, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10761, - "indexed": false, - "mutability": "mutable", - "name": "fishermanRewardCut", - "nameLocation": "2200:18:52", - "nodeType": "VariableDeclaration", - "scope": 10763, - "src": "2193:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10760, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2193:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2192:27:52" - }, - "src": "2165:55:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10764, - "nodeType": "StructuredDocumentation", - "src": "2226:131:52", - "text": " @notice Emitted when subgraph service is set.\n @param subgraphService The address of the subgraph service." - }, - "eventSelector": "81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c7", - "id": 10768, - "name": "SubgraphServiceSet", - "nameLocation": "2368:18:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10767, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10766, - "indexed": true, - "mutability": "mutable", - "name": "subgraphService", - "nameLocation": "2403:15:52", - "nodeType": "VariableDeclaration", - "scope": 10768, - "src": "2387:31:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10765, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2387:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2386:33:52" - }, - "src": "2362:58:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10769, - "nodeType": "StructuredDocumentation", - "src": "2426:229:52", - "text": " @dev Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer`\n by `fisherman`.\n The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted." - }, - "eventSelector": "fb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb14", - "id": 10785, - "name": "QueryDisputeCreated", - "nameLocation": "2666:19:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10784, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10771, - "indexed": true, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "2711:9:52", - "nodeType": "VariableDeclaration", - "scope": 10785, - "src": "2695:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10770, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2695:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10773, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "2746:7:52", - "nodeType": "VariableDeclaration", - "scope": 10785, - "src": "2730:23:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10772, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2730:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10775, - "indexed": true, - "mutability": "mutable", - "name": "fisherman", - "nameLocation": "2779:9:52", - "nodeType": "VariableDeclaration", - "scope": 10785, - "src": "2763:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10774, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2763:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10777, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2806:6:52", - "nodeType": "VariableDeclaration", - "scope": 10785, - "src": "2798:14:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10776, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2798:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10779, - "indexed": false, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "2830:20:52", - "nodeType": "VariableDeclaration", - "scope": 10785, - "src": "2822:28:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10778, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2822:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10781, - "indexed": false, - "mutability": "mutable", - "name": "attestation", - "nameLocation": "2866:11:52", - "nodeType": "VariableDeclaration", - "scope": 10785, - "src": "2860:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 10780, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2860:5:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10783, - "indexed": false, - "mutability": "mutable", - "name": "stakeSnapshot", - "nameLocation": "2895:13:52", - "nodeType": "VariableDeclaration", - "scope": 10785, - "src": "2887:21:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10782, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2887:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2685:229:52" - }, - "src": "2660:255:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10786, - "nodeType": "StructuredDocumentation", - "src": "2921:197:52", - "text": " @dev Emitted when an indexing dispute is created for `allocationId` and `indexer`\n by `fisherman`.\n The event emits the amount of `tokens` deposited by the fisherman." - }, - "eventSelector": "bfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d", - "id": 10802, - "name": "IndexingDisputeCreated", - "nameLocation": "3129:22:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10801, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10788, - "indexed": true, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "3177:9:52", - "nodeType": "VariableDeclaration", - "scope": 10802, - "src": "3161:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10787, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3161:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10790, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "3212:7:52", - "nodeType": "VariableDeclaration", - "scope": 10802, - "src": "3196:23:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10789, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3196:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10792, - "indexed": true, - "mutability": "mutable", - "name": "fisherman", - "nameLocation": "3245:9:52", - "nodeType": "VariableDeclaration", - "scope": 10802, - "src": "3229:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10791, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3229:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10794, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "3272:6:52", - "nodeType": "VariableDeclaration", - "scope": 10802, - "src": "3264:14:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10793, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3264:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10796, - "indexed": false, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "3296:12:52", - "nodeType": "VariableDeclaration", - "scope": 10802, - "src": "3288:20:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10795, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3288:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10798, - "indexed": false, - "mutability": "mutable", - "name": "poi", - "nameLocation": "3326:3:52", - "nodeType": "VariableDeclaration", - "scope": 10802, - "src": "3318:11:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10797, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3318:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10800, - "indexed": false, - "mutability": "mutable", - "name": "stakeSnapshot", - "nameLocation": "3347:13:52", - "nodeType": "VariableDeclaration", - "scope": 10802, - "src": "3339:21:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10799, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3339:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3151:215:52" - }, - "src": "3123:244:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10803, - "nodeType": "StructuredDocumentation", - "src": "3373:204:52", - "text": " @dev Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`.\n The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward." - }, - "eventSelector": "6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c4", - "id": 10813, - "name": "DisputeAccepted", - "nameLocation": "3588:15:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10812, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10805, - "indexed": true, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "3629:9:52", - "nodeType": "VariableDeclaration", - "scope": 10813, - "src": "3613:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10804, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3613:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10807, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "3664:7:52", - "nodeType": "VariableDeclaration", - "scope": 10813, - "src": "3648:23:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10806, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3648:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10809, - "indexed": true, - "mutability": "mutable", - "name": "fisherman", - "nameLocation": "3697:9:52", - "nodeType": "VariableDeclaration", - "scope": 10813, - "src": "3681:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10808, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3681:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10811, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "3724:6:52", - "nodeType": "VariableDeclaration", - "scope": 10813, - "src": "3716:14:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10810, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3716:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3603:133:52" - }, - "src": "3582:155:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10814, - "nodeType": "StructuredDocumentation", - "src": "3743:185:52", - "text": " @dev Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`.\n The event emits the amount `tokens` burned from the fisherman deposit." - }, - "eventSelector": "2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d", - "id": 10824, - "name": "DisputeRejected", - "nameLocation": "3939:15:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10823, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10816, - "indexed": true, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "3980:9:52", - "nodeType": "VariableDeclaration", - "scope": 10824, - "src": "3964:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10815, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3964:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10818, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "4015:7:52", - "nodeType": "VariableDeclaration", - "scope": 10824, - "src": "3999:23:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10817, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3999:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10820, - "indexed": true, - "mutability": "mutable", - "name": "fisherman", - "nameLocation": "4048:9:52", - "nodeType": "VariableDeclaration", - "scope": 10824, - "src": "4032:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10819, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4032:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10822, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "4075:6:52", - "nodeType": "VariableDeclaration", - "scope": 10824, - "src": "4067:14:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10821, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4067:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3954:133:52" - }, - "src": "3933:155:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10825, - "nodeType": "StructuredDocumentation", - "src": "4094:194:52", - "text": " @dev Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`.\n The event emits the amount `tokens` used as deposit and returned to the fisherman." - }, - "eventSelector": "f0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b7", - "id": 10835, - "name": "DisputeDrawn", - "nameLocation": "4299:12:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10834, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10827, - "indexed": true, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "4328:9:52", - "nodeType": "VariableDeclaration", - "scope": 10835, - "src": "4312:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10826, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4312:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10829, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "4355:7:52", - "nodeType": "VariableDeclaration", - "scope": 10835, - "src": "4339:23:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10828, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4339:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10831, - "indexed": true, - "mutability": "mutable", - "name": "fisherman", - "nameLocation": "4380:9:52", - "nodeType": "VariableDeclaration", - "scope": 10835, - "src": "4364:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10830, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4364:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10833, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "4399:6:52", - "nodeType": "VariableDeclaration", - "scope": 10835, - "src": "4391:14:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10832, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4391:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4311:95:52" - }, - "src": "4293:114:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10836, - "nodeType": "StructuredDocumentation", - "src": "4413:200:52", - "text": " @dev Emitted when two disputes are in conflict to link them.\n This event will be emitted after each DisputeCreated event is emitted\n for each of the individual disputes." - }, - "eventSelector": "fec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba81407", - "id": 10842, - "name": "DisputeLinked", - "nameLocation": "4624:13:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10841, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10838, - "indexed": true, - "mutability": "mutable", - "name": "disputeId1", - "nameLocation": "4654:10:52", - "nodeType": "VariableDeclaration", - "scope": 10842, - "src": "4638:26:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10837, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4638:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10840, - "indexed": true, - "mutability": "mutable", - "name": "disputeId2", - "nameLocation": "4682:10:52", - "nodeType": "VariableDeclaration", - "scope": 10842, - "src": "4666:26:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10839, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4666:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4637:56:52" - }, - "src": "4618:76:52" - }, - { - "anonymous": false, - "documentation": { - "id": 10843, - "nodeType": "StructuredDocumentation", - "src": "4700:147:52", - "text": " @dev Emitted when a dispute is cancelled by the fisherman.\n The event emits the amount `tokens` returned to the fisherman." - }, - "eventSelector": "223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2", - "id": 10853, - "name": "DisputeCancelled", - "nameLocation": "4858:16:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 10852, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10845, - "indexed": true, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "4900:9:52", - "nodeType": "VariableDeclaration", - "scope": 10853, - "src": "4884:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10844, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4884:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10847, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "4935:7:52", - "nodeType": "VariableDeclaration", - "scope": 10853, - "src": "4919:23:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10846, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4919:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10849, - "indexed": true, - "mutability": "mutable", - "name": "fisherman", - "nameLocation": "4968:9:52", - "nodeType": "VariableDeclaration", - "scope": 10853, - "src": "4952:25:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10848, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4952:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10851, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "4995:6:52", - "nodeType": "VariableDeclaration", - "scope": 10853, - "src": "4987:14:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10850, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4987:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4874:133:52" - }, - "src": "4852:156:52" - }, - { - "errorSelector": "a8baf3bb", - "id": 10855, - "name": "DisputeManagerNotArbitrator", - "nameLocation": "5041:27:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10854, - "nodeType": "ParameterList", - "parameters": [], - "src": "5068:2:52" - }, - "src": "5035:36:52" - }, - { - "errorSelector": "82c00550", - "id": 10857, - "name": "DisputeManagerNotFisherman", - "nameLocation": "5082:26:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10856, - "nodeType": "ParameterList", - "parameters": [], - "src": "5108:2:52" - }, - "src": "5076:35:52" - }, - { - "errorSelector": "c2d78882", - "id": 10859, - "name": "DisputeManagerInvalidZeroAddress", - "nameLocation": "5122:32:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10858, - "nodeType": "ParameterList", - "parameters": [], - "src": "5154:2:52" - }, - "src": "5116:41:52" - }, - { - "errorSelector": "c4411f11", - "id": 10861, - "name": "DisputeManagerDisputePeriodZero", - "nameLocation": "5168:31:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10860, - "nodeType": "ParameterList", - "parameters": [], - "src": "5199:2:52" - }, - "src": "5162:40:52" - }, - { - "errorSelector": "60fdfb6e", - "id": 10863, - "name": "DisputeManagerZeroTokens", - "nameLocation": "5213:24:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10862, - "nodeType": "ParameterList", - "parameters": [], - "src": "5237:2:52" - }, - "src": "5207:33:52" - }, - { - "errorSelector": "5280eef4", - "id": 10867, - "name": "DisputeManagerInvalidDispute", - "nameLocation": "5251:28:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10866, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10865, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "5288:9:52", - "nodeType": "VariableDeclaration", - "scope": 10867, - "src": "5280:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10864, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5280:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5279:19:52" - }, - "src": "5245:54:52" - }, - { - "errorSelector": "033f4e05", - "id": 10871, - "name": "DisputeManagerInvalidDisputeDeposit", - "nameLocation": "5310:35:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10870, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10869, - "mutability": "mutable", - "name": "disputeDeposit", - "nameLocation": "5354:14:52", - "nodeType": "VariableDeclaration", - "scope": 10871, - "src": "5346:22:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10868, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5346:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5345:24:52" - }, - "src": "5304:66:52" - }, - { - "errorSelector": "865ccc86", - "id": 10875, - "name": "DisputeManagerInvalidFishermanReward", - "nameLocation": "5381:36:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10874, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10873, - "mutability": "mutable", - "name": "cut", - "nameLocation": "5425:3:52", - "nodeType": "VariableDeclaration", - "scope": 10875, - "src": "5418:10:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10872, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "5418:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "5417:12:52" - }, - "src": "5375:55:52" - }, - { - "errorSelector": "9d26e9f6", - "id": 10879, - "name": "DisputeManagerInvalidMaxSlashingCut", - "nameLocation": "5441:35:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10878, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10877, - "mutability": "mutable", - "name": "maxSlashingCut", - "nameLocation": "5484:14:52", - "nodeType": "VariableDeclaration", - "scope": 10879, - "src": "5477:21:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10876, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "5477:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "5476:23:52" - }, - "src": "5435:65:52" - }, - { - "errorSelector": "cc6b7c41", - "id": 10885, - "name": "DisputeManagerInvalidTokensSlash", - "nameLocation": "5511:32:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10884, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10881, - "mutability": "mutable", - "name": "tokensSlash", - "nameLocation": "5552:11:52", - "nodeType": "VariableDeclaration", - "scope": 10885, - "src": "5544:19:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10880, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5544:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10883, - "mutability": "mutable", - "name": "maxTokensSlash", - "nameLocation": "5573:14:52", - "nodeType": "VariableDeclaration", - "scope": 10885, - "src": "5565:22:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10882, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5565:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5543:45:52" - }, - "src": "5505:84:52" - }, - { - "errorSelector": "51b9503c", - "id": 10890, - "name": "DisputeManagerDisputeNotPending", - "nameLocation": "5600:31:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10889, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10888, - "mutability": "mutable", - "name": "status", - "nameLocation": "5662:6:52", - "nodeType": "VariableDeclaration", - "scope": 10890, - "src": "5632:36:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - }, - "typeName": { - "id": 10887, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10886, - "name": "IDisputeManager.DisputeStatus", - "nameLocations": [ - "5632:15:52", - "5648:13:52" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10718, - "src": "5632:29:52" - }, - "referencedDeclaration": 10718, - "src": "5632:29:52", - "typeDescriptions": { - "typeIdentifier": "t_enum$_DisputeStatus_$10718", - "typeString": "enum IDisputeManager.DisputeStatus" - } - }, - "visibility": "internal" - } - ], - "src": "5631:38:52" - }, - "src": "5594:76:52" - }, - { - "errorSelector": "249447e2", - "id": 10894, - "name": "DisputeManagerDisputeAlreadyCreated", - "nameLocation": "5681:35:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10893, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10892, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "5725:9:52", - "nodeType": "VariableDeclaration", - "scope": 10894, - "src": "5717:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10891, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5717:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5716:19:52" - }, - "src": "5675:61:52" - }, - { - "errorSelector": "3aeea7aa", - "id": 10896, - "name": "DisputeManagerDisputePeriodNotFinished", - "nameLocation": "5747:38:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10895, - "nodeType": "ParameterList", - "parameters": [], - "src": "5785:2:52" - }, - "src": "5741:47:52" - }, - { - "errorSelector": "826e2b26", - "id": 10902, - "name": "DisputeManagerMustAcceptRelatedDispute", - "nameLocation": "5799:38:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10901, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10898, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "5846:9:52", - "nodeType": "VariableDeclaration", - "scope": 10902, - "src": "5838:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10897, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5838:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10900, - "mutability": "mutable", - "name": "relatedDisputeId", - "nameLocation": "5865:16:52", - "nodeType": "VariableDeclaration", - "scope": 10902, - "src": "5857:24:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10899, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5857:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5837:45:52" - }, - "src": "5793:90:52" - }, - { - "errorSelector": "d1e2762c", - "id": 10906, - "name": "DisputeManagerIndexerNotFound", - "nameLocation": "5894:29:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10905, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10904, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "5932:12:52", - "nodeType": "VariableDeclaration", - "scope": 10906, - "src": "5924:20:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10903, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5924:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5923:22:52" - }, - "src": "5888:58:52" - }, - { - "errorSelector": "28933f94", - "id": 10912, - "name": "DisputeManagerNonMatchingSubgraphDeployment", - "nameLocation": "5957:43:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10911, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10908, - "mutability": "mutable", - "name": "subgraphDeploymentId1", - "nameLocation": "6009:21:52", - "nodeType": "VariableDeclaration", - "scope": 10912, - "src": "6001:29:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10907, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6001:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10910, - "mutability": "mutable", - "name": "subgraphDeploymentId2", - "nameLocation": "6040:21:52", - "nodeType": "VariableDeclaration", - "scope": 10912, - "src": "6032:29:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10909, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6032:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6000:62:52" - }, - "src": "5951:112:52" - }, - { - "errorSelector": "d574a52e", - "id": 10926, - "name": "DisputeManagerNonConflictingAttestations", - "nameLocation": "6074:40:52", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10925, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10914, - "mutability": "mutable", - "name": "requestCID1", - "nameLocation": "6132:11:52", - "nodeType": "VariableDeclaration", - "scope": 10926, - "src": "6124:19:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10913, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6124:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10916, - "mutability": "mutable", - "name": "responseCID1", - "nameLocation": "6161:12:52", - "nodeType": "VariableDeclaration", - "scope": 10926, - "src": "6153:20:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10915, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6153:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10918, - "mutability": "mutable", - "name": "subgraphDeploymentId1", - "nameLocation": "6191:21:52", - "nodeType": "VariableDeclaration", - "scope": 10926, - "src": "6183:29:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10917, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6183:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10920, - "mutability": "mutable", - "name": "requestCID2", - "nameLocation": "6230:11:52", - "nodeType": "VariableDeclaration", - "scope": 10926, - "src": "6222:19:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10919, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6222:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10922, - "mutability": "mutable", - "name": "responseCID2", - "nameLocation": "6259:12:52", - "nodeType": "VariableDeclaration", - "scope": 10926, - "src": "6251:20:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10921, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6251:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10924, - "mutability": "mutable", - "name": "subgraphDeploymentId2", - "nameLocation": "6289:21:52", - "nodeType": "VariableDeclaration", - "scope": 10926, - "src": "6281:29:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10923, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6281:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6114:202:52" - }, - "src": "6068:249:52" - }, - { - "functionSelector": "d76f62d1", - "id": 10931, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDisputePeriod", - "nameLocation": "6332:16:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10929, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10928, - "mutability": "mutable", - "name": "disputePeriod", - "nameLocation": "6356:13:52", - "nodeType": "VariableDeclaration", - "scope": 10931, - "src": "6349:20:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 10927, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "6349:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "6348:22:52" - }, - "returnParameters": { - "id": 10930, - "nodeType": "ParameterList", - "parameters": [], - "src": "6379:0:52" - }, - "scope": 11057, - "src": "6323:57:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "b0eefabe", - "id": 10936, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setArbitrator", - "nameLocation": "6395:13:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10934, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10933, - "mutability": "mutable", - "name": "arbitrator", - "nameLocation": "6417:10:52", - "nodeType": "VariableDeclaration", - "scope": 10936, - "src": "6409:18:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10932, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6409:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6408:20:52" - }, - "returnParameters": { - "id": 10935, - "nodeType": "ParameterList", - "parameters": [], - "src": "6437:0:52" - }, - "scope": 11057, - "src": "6386:52:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "16972978", - "id": 10941, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDisputeDeposit", - "nameLocation": "6453:17:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10939, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10938, - "mutability": "mutable", - "name": "disputeDeposit", - "nameLocation": "6479:14:52", - "nodeType": "VariableDeclaration", - "scope": 10941, - "src": "6471:22:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10937, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6471:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6470:24:52" - }, - "returnParameters": { - "id": 10940, - "nodeType": "ParameterList", - "parameters": [], - "src": "6503:0:52" - }, - "scope": 11057, - "src": "6444:60:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "76c993ae", - "id": 10946, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setFishermanRewardCut", - "nameLocation": "6519:21:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10944, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10943, - "mutability": "mutable", - "name": "cut", - "nameLocation": "6548:3:52", - "nodeType": "VariableDeclaration", - "scope": 10946, - "src": "6541:10:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10942, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "6541:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "6540:12:52" - }, - "returnParameters": { - "id": 10945, - "nodeType": "ParameterList", - "parameters": [], - "src": "6561:0:52" - }, - "scope": 11057, - "src": "6510:52:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "9f81a7cf", - "id": 10951, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setMaxSlashingCut", - "nameLocation": "6577:17:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10949, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10948, - "mutability": "mutable", - "name": "maxCut", - "nameLocation": "6602:6:52", - "nodeType": "VariableDeclaration", - "scope": 10951, - "src": "6595:13:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10947, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "6595:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "6594:15:52" - }, - "returnParameters": { - "id": 10950, - "nodeType": "ParameterList", - "parameters": [], - "src": "6618:0:52" - }, - "scope": 11057, - "src": "6568:51:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c50a77b1", - "id": 10958, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "createQueryDispute", - "nameLocation": "6656:18:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10954, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10953, - "mutability": "mutable", - "name": "attestationData", - "nameLocation": "6690:15:52", - "nodeType": "VariableDeclaration", - "scope": 10958, - "src": "6675:30:52", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 10952, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6675:5:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6674:32:52" - }, - "returnParameters": { - "id": 10957, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10956, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10958, - "src": "6725:7:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10955, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6725:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6724:9:52" - }, - "scope": 11057, - "src": "6647:87:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c894222e", - "id": 10969, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "createQueryDisputeConflict", - "nameLocation": "6749:26:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10963, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10960, - "mutability": "mutable", - "name": "attestationData1", - "nameLocation": "6800:16:52", - "nodeType": "VariableDeclaration", - "scope": 10969, - "src": "6785:31:52", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 10959, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6785:5:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10962, - "mutability": "mutable", - "name": "attestationData2", - "nameLocation": "6841:16:52", - "nodeType": "VariableDeclaration", - "scope": 10969, - "src": "6826:31:52", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 10961, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6826:5:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6775:88:52" - }, - "returnParameters": { - "id": 10968, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10965, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10969, - "src": "6882:7:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10964, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6882:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10967, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10969, - "src": "6891:7:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10966, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6891:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6881:18:52" - }, - "scope": 11057, - "src": "6740:160:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "4bc5839a", - "id": 10978, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "createIndexingDispute", - "nameLocation": "6915:21:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10974, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10971, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "6945:12:52", - "nodeType": "VariableDeclaration", - "scope": 10978, - "src": "6937:20:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10970, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6937:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10973, - "mutability": "mutable", - "name": "poi", - "nameLocation": "6967:3:52", - "nodeType": "VariableDeclaration", - "scope": 10978, - "src": "6959:11:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10972, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6959:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6936:35:52" - }, - "returnParameters": { - "id": 10977, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10976, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10978, - "src": "6990:7:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10975, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6990:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6989:9:52" - }, - "scope": 11057, - "src": "6906:93:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "050b17ad", - "id": 10985, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "acceptDispute", - "nameLocation": "7014:13:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10983, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10980, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "7036:9:52", - "nodeType": "VariableDeclaration", - "scope": 10985, - "src": "7028:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10979, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7028:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10982, - "mutability": "mutable", - "name": "tokensSlash", - "nameLocation": "7055:11:52", - "nodeType": "VariableDeclaration", - "scope": 10985, - "src": "7047:19:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10981, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7047:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7027:40:52" - }, - "returnParameters": { - "id": 10984, - "nodeType": "ParameterList", - "parameters": [], - "src": "7076:0:52" - }, - "scope": 11057, - "src": "7005:72:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "36167e03", - "id": 10990, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "rejectDispute", - "nameLocation": "7092:13:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10988, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10987, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "7114:9:52", - "nodeType": "VariableDeclaration", - "scope": 10990, - "src": "7106:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10986, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7106:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7105:19:52" - }, - "returnParameters": { - "id": 10989, - "nodeType": "ParameterList", - "parameters": [], - "src": "7133:0:52" - }, - "scope": 11057, - "src": "7083:51:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "9334ea52", - "id": 10995, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "drawDispute", - "nameLocation": "7149:11:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10993, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10992, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "7169:9:52", - "nodeType": "VariableDeclaration", - "scope": 10995, - "src": "7161:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10991, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7161:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7160:19:52" - }, - "returnParameters": { - "id": 10994, - "nodeType": "ParameterList", - "parameters": [], - "src": "7188:0:52" - }, - "scope": 11057, - "src": "7140:49:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "1792f194", - "id": 11000, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "cancelDispute", - "nameLocation": "7204:13:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10998, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10997, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "7226:9:52", - "nodeType": "VariableDeclaration", - "scope": 11000, - "src": "7218:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10996, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7218:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7217:19:52" - }, - "returnParameters": { - "id": 10999, - "nodeType": "ParameterList", - "parameters": [], - "src": "7245:0:52" - }, - "scope": 11057, - "src": "7195:51:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "93a90a1e", - "id": 11005, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setSubgraphService", - "nameLocation": "7261:18:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11003, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11002, - "mutability": "mutable", - "name": "subgraphService", - "nameLocation": "7288:15:52", - "nodeType": "VariableDeclaration", - "scope": 11005, - "src": "7280:23:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11001, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7280:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7279:25:52" - }, - "returnParameters": { - "id": 11004, - "nodeType": "ParameterList", - "parameters": [], - "src": "7313:0:52" - }, - "scope": 11057, - "src": "7252:62:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "84633713", - "id": 11010, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getVerifierCut", - "nameLocation": "7351:14:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11006, - "nodeType": "ParameterList", - "parameters": [], - "src": "7365:2:52" - }, - "returnParameters": { - "id": 11009, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11008, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11010, - "src": "7391:6:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 11007, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "7391:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "7390:8:52" - }, - "scope": 11057, - "src": "7342:57:52", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "5aea0ec4", - "id": 11015, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getDisputePeriod", - "nameLocation": "7414:16:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11011, - "nodeType": "ParameterList", - "parameters": [], - "src": "7430:2:52" - }, - "returnParameters": { - "id": 11014, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11013, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11015, - "src": "7456:6:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 11012, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "7456:6:52", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "7455:8:52" - }, - "scope": 11057, - "src": "7405:59:52", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "be41f384", - "id": 11022, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isDisputeCreated", - "nameLocation": "7479:16:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11018, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11017, - "mutability": "mutable", - "name": "disputeId", - "nameLocation": "7504:9:52", - "nodeType": "VariableDeclaration", - "scope": 11022, - "src": "7496:17:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11016, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7496:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7495:19:52" - }, - "returnParameters": { - "id": 11021, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11020, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11022, - "src": "7538:4:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11019, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7538:4:52", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "7537:6:52" - }, - "scope": 11057, - "src": "7470:74:52", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "6369df6b", - "id": 11030, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "encodeReceipt", - "nameLocation": "7559:13:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11026, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11025, - "mutability": "mutable", - "name": "receipt", - "nameLocation": "7600:7:52", - "nodeType": "VariableDeclaration", - "scope": 11030, - "src": "7573:34:52", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt" - }, - "typeName": { - "id": 11024, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11023, - "name": "Attestation.Receipt", - "nameLocations": [ - "7573:11:52", - "7585:7:52" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11685, - "src": "7573:19:52" - }, - "referencedDeclaration": 11685, - "src": "7573:19:52", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_storage_ptr", - "typeString": "struct Attestation.Receipt" - } - }, - "visibility": "internal" - } - ], - "src": "7572:36:52" - }, - "returnParameters": { - "id": 11029, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11028, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11030, - "src": "7632:7:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11027, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7632:7:52", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7631:9:52" - }, - "scope": 11057, - "src": "7550:91:52", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c9747f51", - "id": 11038, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAttestationIndexer", - "nameLocation": "7656:21:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11034, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11033, - "mutability": "mutable", - "name": "attestation", - "nameLocation": "7703:11:52", - "nodeType": "VariableDeclaration", - "scope": 11038, - "src": "7678:36:52", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 11032, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11031, - "name": "Attestation.State", - "nameLocations": [ - "7678:11:52", - "7690:5:52" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "7678:17:52" - }, - "referencedDeclaration": 11699, - "src": "7678:17:52", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - } - ], - "src": "7677:38:52" - }, - "returnParameters": { - "id": 11037, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11036, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11038, - "src": "7739:7:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11035, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7739:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7738:9:52" - }, - "scope": 11057, - "src": "7647:101:52", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c133b429", - "id": 11045, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getStakeSnapshot", - "nameLocation": "7763:16:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11041, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11040, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "7788:7:52", - "nodeType": "VariableDeclaration", - "scope": 11045, - "src": "7780:15:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11039, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7780:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7779:17:52" - }, - "returnParameters": { - "id": 11044, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11043, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11045, - "src": "7820:7:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11042, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7820:7:52", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7819:9:52" - }, - "scope": 11057, - "src": "7754:75:52", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "d36fc9d4", - "id": 11056, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "areConflictingAttestations", - "nameLocation": "7844:26:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11052, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11048, - "mutability": "mutable", - "name": "attestation1", - "nameLocation": "7905:12:52", - "nodeType": "VariableDeclaration", - "scope": 11056, - "src": "7880:37:52", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 11047, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11046, - "name": "Attestation.State", - "nameLocations": [ - "7880:11:52", - "7892:5:52" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "7880:17:52" - }, - "referencedDeclaration": 11699, - "src": "7880:17:52", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11051, - "mutability": "mutable", - "name": "attestation2", - "nameLocation": "7952:12:52", - "nodeType": "VariableDeclaration", - "scope": 11056, - "src": "7927:37:52", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 11050, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11049, - "name": "Attestation.State", - "nameLocations": [ - "7927:11:52", - "7939:5:52" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "7927:17:52" - }, - "referencedDeclaration": 11699, - "src": "7927:17:52", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - } - ], - "src": "7870:100:52" - }, - "returnParameters": { - "id": 11055, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11054, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11056, - "src": "7994:4:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11053, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7994:4:52", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "7993:6:52" - }, - "scope": 11057, - "src": "7835:165:52", - "stateMutability": "pure", - "virtual": false, - "visibility": "external" - } - ], - "scope": 11058, - "src": "132:7870:52", - "usedErrors": [ - 10855, - 10857, - 10859, - 10861, - 10863, - 10867, - 10871, - 10875, - 10879, - 10885, - 10890, - 10894, - 10896, - 10902, - 10906, - 10912, - 10926 - ], - "usedEvents": [ - 10743, - 10748, - 10753, - 10758, - 10763, - 10768, - 10785, - 10802, - 10813, - 10824, - 10835, - 10842, - 10853 - ] - } - ], - "src": "46:7957:52" - }, - "id": 52 - }, - "contracts/interfaces/ISubgraphService.sol": { - "ast": { - "absolutePath": "contracts/interfaces/ISubgraphService.sol", - "exportedSymbols": { - "Allocation": [ - 11674 - ], - "IDataServiceFees": [ - 1381 - ], - "IGraphPayments": [ - 2211 - ], - "ISubgraphService": [ - 11280 - ], - "LegacyAllocation": [ - 12086 - ] - }, - "id": 11281, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 11059, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:53" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", - "file": "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol", - "id": 11061, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11281, - "sourceUnit": 1382, - "src": "70:113:53", - "symbolAliases": [ - { - "foreign": { - "id": 11060, - "name": "IDataServiceFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1381, - "src": "79:16:53", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "file": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "id": 11063, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11281, - "sourceUnit": 2212, - "src": "184:96:53", - "symbolAliases": [ - { - "foreign": { - "id": 11062, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "193:14:53", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/Allocation.sol", - "file": "../libraries/Allocation.sol", - "id": 11065, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11281, - "sourceUnit": 11675, - "src": "282:57:53", - "symbolAliases": [ - { - "foreign": { - "id": 11064, - "name": "Allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11674, - "src": "291:10:53", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/LegacyAllocation.sol", - "file": "../libraries/LegacyAllocation.sol", - "id": 11067, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11281, - "sourceUnit": 12087, - "src": "340:69:53", - "symbolAliases": [ - { - "foreign": { - "id": 11066, - "name": "LegacyAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12086, - "src": "349:16:53", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 11069, - "name": "IDataServiceFees", - "nameLocations": [ - "998:16:53" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1381, - "src": "998:16:53" - }, - "id": 11070, - "nodeType": "InheritanceSpecifier", - "src": "998:16:53" - } - ], - "canonicalName": "ISubgraphService", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 11068, - "nodeType": "StructuredDocumentation", - "src": "411:556:53", - "text": " @title Interface for the {SubgraphService} contract\n @dev This interface extends {IDataServiceFees} and {IDataService}.\n @notice The Subgraph Service is a data service built on top of Graph Horizon that supports the use case of\n subgraph indexing and querying. The {SubgraphService} contract implements the flows described in the Data\n Service framework to allow indexers to register as subgraph service providers, create allocations to signal\n their commitment to index a subgraph, and collect fees for indexing and querying services." - }, - "fullyImplemented": false, - "id": 11280, - "linearizedBaseContracts": [ - 11280, - 1381, - 1318 - ], - "name": "ISubgraphService", - "nameLocation": "978:16:53", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "ISubgraphService.Indexer", - "documentation": { - "id": 11071, - "nodeType": "StructuredDocumentation", - "src": "1021:45:53", - "text": "@notice Contains details for each indexer" - }, - "id": 11078, - "members": [ - { - "constant": false, - "id": 11073, - "mutability": "mutable", - "name": "registeredAt", - "nameLocation": "1153:12:53", - "nodeType": "VariableDeclaration", - "scope": 11078, - "src": "1145:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11072, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1145:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11075, - "mutability": "mutable", - "name": "url", - "nameLocation": "1249:3:53", - "nodeType": "VariableDeclaration", - "scope": 11078, - "src": "1242:10:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - }, - "typeName": { - "id": 11074, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1242:6:53", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11077, - "mutability": "mutable", - "name": "geoHash", - "nameLocation": "1332:7:53", - "nodeType": "VariableDeclaration", - "scope": 11078, - "src": "1325:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - }, - "typeName": { - "id": 11076, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1325:6:53", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "name": "Indexer", - "nameLocation": "1078:7:53", - "nodeType": "StructDefinition", - "scope": 11280, - "src": "1071:275:53", - "visibility": "public" - }, - { - "anonymous": false, - "documentation": { - "id": 11079, - "nodeType": "StructuredDocumentation", - "src": "1352:292:53", - "text": " @notice Emitted when a subgraph service collects query fees from Graph Payments\n @param serviceProvider The address of the service provider\n @param tokensCollected The amount of tokens collected\n @param tokensCurators The amount of tokens curators receive" - }, - "eventSelector": "60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36", - "id": 11087, - "name": "QueryFeesCollected", - "nameLocation": "1655:18:53", - "nodeType": "EventDefinition", - "parameters": { - "id": 11086, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11081, - "indexed": true, - "mutability": "mutable", - "name": "serviceProvider", - "nameLocation": "1690:15:53", - "nodeType": "VariableDeclaration", - "scope": 11087, - "src": "1674:31:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11080, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1674:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11083, - "indexed": false, - "mutability": "mutable", - "name": "tokensCollected", - "nameLocation": "1715:15:53", - "nodeType": "VariableDeclaration", - "scope": 11087, - "src": "1707:23:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11082, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1707:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11085, - "indexed": false, - "mutability": "mutable", - "name": "tokensCurators", - "nameLocation": "1740:14:53", - "nodeType": "VariableDeclaration", - "scope": 11087, - "src": "1732:22:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11084, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1732:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1673:82:53" - }, - "src": "1649:107:53" - }, - { - "anonymous": false, - "documentation": { - "id": 11088, - "nodeType": "StructuredDocumentation", - "src": "1762:115:53", - "text": " @notice Emitted when the stake to fees ratio is set.\n @param ratio The stake to fees ratio" - }, - "eventSelector": "2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23", - "id": 11092, - "name": "StakeToFeesRatioSet", - "nameLocation": "1888:19:53", - "nodeType": "EventDefinition", - "parameters": { - "id": 11091, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11090, - "indexed": false, - "mutability": "mutable", - "name": "ratio", - "nameLocation": "1916:5:53", - "nodeType": "VariableDeclaration", - "scope": 11092, - "src": "1908:13:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11089, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1908:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1907:15:53" - }, - "src": "1882:41:53" - }, - { - "anonymous": false, - "documentation": { - "id": 11093, - "nodeType": "StructuredDocumentation", - "src": "1929:103:53", - "text": " @notice Emitted when curator cuts are set\n @param curationCut The curation cut" - }, - "eventSelector": "6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9", - "id": 11097, - "name": "CurationCutSet", - "nameLocation": "2043:14:53", - "nodeType": "EventDefinition", - "parameters": { - "id": 11096, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11095, - "indexed": false, - "mutability": "mutable", - "name": "curationCut", - "nameLocation": "2066:11:53", - "nodeType": "VariableDeclaration", - "scope": 11097, - "src": "2058:19:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11094, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2058:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2057:21:53" - }, - "src": "2037:42:53" - }, - { - "documentation": { - "id": 11098, - "nodeType": "StructuredDocumentation", - "src": "2085:138:53", - "text": " Thrown when trying to set a curation cut that is not a valid PPM value\n @param curationCut The curation cut value" - }, - "errorSelector": "1c9c717b", - "id": 11102, - "name": "SubgraphServiceInvalidCurationCut", - "nameLocation": "2234:33:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11101, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11100, - "mutability": "mutable", - "name": "curationCut", - "nameLocation": "2276:11:53", - "nodeType": "VariableDeclaration", - "scope": 11102, - "src": "2268:19:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11099, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2268:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2267:21:53" - }, - "src": "2228:61:53" - }, - { - "documentation": { - "id": 11103, - "nodeType": "StructuredDocumentation", - "src": "2295:85:53", - "text": " @notice Thrown when an indexer tries to register with an empty URL" - }, - "errorSelector": "f0708720", - "id": 11105, - "name": "SubgraphServiceEmptyUrl", - "nameLocation": "2391:23:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11104, - "nodeType": "ParameterList", - "parameters": [], - "src": "2414:2:53" - }, - "src": "2385:32:53" - }, - { - "documentation": { - "id": 11106, - "nodeType": "StructuredDocumentation", - "src": "2423:89:53", - "text": " @notice Thrown when an indexer tries to register with an empty geohash" - }, - "errorSelector": "798ef654", - "id": 11108, - "name": "SubgraphServiceEmptyGeohash", - "nameLocation": "2523:27:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11107, - "nodeType": "ParameterList", - "parameters": [], - "src": "2550:2:53" - }, - "src": "2517:36:53" - }, - { - "documentation": { - "id": 11109, - "nodeType": "StructuredDocumentation", - "src": "2559:99:53", - "text": " @notice Thrown when an indexer tries to register but they are already registered" - }, - "errorSelector": "341a19b4", - "id": 11111, - "name": "SubgraphServiceIndexerAlreadyRegistered", - "nameLocation": "2669:39:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11110, - "nodeType": "ParameterList", - "parameters": [], - "src": "2708:2:53" - }, - "src": "2663:48:53" - }, - { - "documentation": { - "id": 11112, - "nodeType": "StructuredDocumentation", - "src": "2717:179:53", - "text": " @notice Thrown when an indexer tries to perform an operation but they are not registered\n @param indexer The address of the indexer that is not registered" - }, - "errorSelector": "ee271899", - "id": 11116, - "name": "SubgraphServiceIndexerNotRegistered", - "nameLocation": "2907:35:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11115, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11114, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "2951:7:53", - "nodeType": "VariableDeclaration", - "scope": 11116, - "src": "2943:15:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11113, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2943:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2942:17:53" - }, - "src": "2901:59:53" - }, - { - "documentation": { - "id": 11117, - "nodeType": "StructuredDocumentation", - "src": "2966:168:53", - "text": " @notice Thrown when an indexer tries to collect fees for an unsupported payment type\n @param paymentType The payment type that is not supported" - }, - "errorSelector": "47031cf0", - "id": 11122, - "name": "SubgraphServiceInvalidPaymentType", - "nameLocation": "3145:33:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11121, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11120, - "mutability": "mutable", - "name": "paymentType", - "nameLocation": "3207:11:53", - "nodeType": "VariableDeclaration", - "scope": 11122, - "src": "3179:39:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - }, - "typeName": { - "id": 11119, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11118, - "name": "IGraphPayments.PaymentTypes", - "nameLocations": [ - "3179:14:53", - "3194:12:53" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2166, - "src": "3179:27:53" - }, - "referencedDeclaration": 2166, - "src": "3179:27:53", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - }, - "visibility": "internal" - } - ], - "src": "3178:41:53" - }, - "src": "3139:81:53" - }, - { - "documentation": { - "id": 11123, - "nodeType": "StructuredDocumentation", - "src": "3226:370:53", - "text": " @notice Thrown when the contract GRT balance is inconsistent with the payment amount collected\n from Graph Payments\n @param balanceBefore The contract GRT balance before the collection\n @param balanceAfter The contract GRT balance after the collection\n @param tokensDataService The amount of tokens sent to the subgraph service" - }, - "errorSelector": "361af23e", - "id": 11131, - "name": "SubgraphServiceInconsistentCollection", - "nameLocation": "3607:37:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11130, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11125, - "mutability": "mutable", - "name": "balanceBefore", - "nameLocation": "3653:13:53", - "nodeType": "VariableDeclaration", - "scope": 11131, - "src": "3645:21:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11124, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3645:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11127, - "mutability": "mutable", - "name": "balanceAfter", - "nameLocation": "3676:12:53", - "nodeType": "VariableDeclaration", - "scope": 11131, - "src": "3668:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11126, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3668:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11129, - "mutability": "mutable", - "name": "tokensDataService", - "nameLocation": "3698:17:53", - "nodeType": "VariableDeclaration", - "scope": 11131, - "src": "3690:25:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11128, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3690:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3644:72:53" - }, - "src": "3601:116:53" - }, - { - "documentation": { - "id": 11132, - "nodeType": "StructuredDocumentation", - "src": "3723:249:53", - "text": " @notice @notice Thrown when the service provider in the RAV does not match the expected indexer.\n @param providedIndexer The address of the provided indexer.\n @param expectedIndexer The address of the expected indexer." - }, - "errorSelector": "1a071d07", - "id": 11138, - "name": "SubgraphServiceIndexerMismatch", - "nameLocation": "3983:30:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11137, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11134, - "mutability": "mutable", - "name": "providedIndexer", - "nameLocation": "4022:15:53", - "nodeType": "VariableDeclaration", - "scope": 11138, - "src": "4014:23:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11133, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4014:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11136, - "mutability": "mutable", - "name": "expectedIndexer", - "nameLocation": "4047:15:53", - "nodeType": "VariableDeclaration", - "scope": 11138, - "src": "4039:23:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11135, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4039:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4013:50:53" - }, - "src": "3977:87:53" - }, - { - "documentation": { - "id": 11139, - "nodeType": "StructuredDocumentation", - "src": "4070:223:53", - "text": " @notice Thrown when the indexer in the allocation state does not match the expected indexer.\n @param indexer The address of the expected indexer.\n @param allocationId The id of the allocation." - }, - "errorSelector": "c0bbff13", - "id": 11145, - "name": "SubgraphServiceAllocationNotAuthorized", - "nameLocation": "4304:38:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11144, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11141, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "4351:7:53", - "nodeType": "VariableDeclaration", - "scope": 11145, - "src": "4343:15:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11140, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4343:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11143, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "4368:12:53", - "nodeType": "VariableDeclaration", - "scope": 11145, - "src": "4360:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11142, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4360:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4342:39:53" - }, - "src": "4298:84:53" - }, - { - "documentation": { - "id": 11146, - "nodeType": "StructuredDocumentation", - "src": "4388:245:53", - "text": " @notice Thrown when collecting a RAV where the RAV indexer is not the same as the allocation indexer\n @param ravIndexer The address of the RAV indexer\n @param allocationIndexer The address of the allocation indexer" - }, - "errorSelector": "8a11f7ee", - "id": 11152, - "name": "SubgraphServiceInvalidRAV", - "nameLocation": "4644:25:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11151, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11148, - "mutability": "mutable", - "name": "ravIndexer", - "nameLocation": "4678:10:53", - "nodeType": "VariableDeclaration", - "scope": 11152, - "src": "4670:18:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11147, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4670:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11150, - "mutability": "mutable", - "name": "allocationIndexer", - "nameLocation": "4698:17:53", - "nodeType": "VariableDeclaration", - "scope": 11152, - "src": "4690:25:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11149, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4690:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4669:47:53" - }, - "src": "4638:79:53" - }, - { - "documentation": { - "id": 11153, - "nodeType": "StructuredDocumentation", - "src": "4723:182:53", - "text": " @notice Thrown when trying to force close an allocation that is not stale and the indexer is not over-allocated\n @param allocationId The id of the allocation" - }, - "errorSelector": "068ef6a0", - "id": 11157, - "name": "SubgraphServiceCannotForceCloseAllocation", - "nameLocation": "4916:41:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11156, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11155, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "4966:12:53", - "nodeType": "VariableDeclaration", - "scope": 11157, - "src": "4958:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11154, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4958:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4957:22:53" - }, - "src": "4910:70:53" - }, - { - "documentation": { - "id": 11158, - "nodeType": "StructuredDocumentation", - "src": "4986:137:53", - "text": " @notice Thrown when trying to force close an altruistic allocation\n @param allocationId The id of the allocation" - }, - "errorSelector": "be3d9ae8", - "id": 11162, - "name": "SubgraphServiceAllocationIsAltruistic", - "nameLocation": "5134:37:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11161, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11160, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "5180:12:53", - "nodeType": "VariableDeclaration", - "scope": 11162, - "src": "5172:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11159, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5172:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5171:22:53" - }, - "src": "5128:66:53" - }, - { - "documentation": { - "id": 11163, - "nodeType": "StructuredDocumentation", - "src": "5200:80:53", - "text": " @notice Thrown when trying to set stake to fees ratio to zero" - }, - "errorSelector": "bc71a043", - "id": 11165, - "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", - "nameLocation": "5291:42:53", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11164, - "nodeType": "ParameterList", - "parameters": [], - "src": "5333:2:53" - }, - "src": "5285:51:53" - }, - { - "documentation": { - "id": 11166, - "nodeType": "StructuredDocumentation", - "src": "5342:676:53", - "text": " @notice Force close an allocation\n @dev This function can be permissionlessly called when the allocation is stale or\n if the indexer is over-allocated. This ensures that rewards for other allocations are\n not diluted by an inactive allocation, and that over-allocated indexers stop accumulating\n rewards with tokens they no longer have allocated.\n Requirements:\n - Allocation must exist and be open\n - Allocation must be stale or indexer must be over-allocated\n - Allocation cannot be altruistic\n Emits a {AllocationClosed} event.\n @param allocationId The id of the allocation" - }, - "functionSelector": "a827a90c", - "id": 11171, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "forceCloseAllocation", - "nameLocation": "6032:20:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11169, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11168, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "6061:12:53", - "nodeType": "VariableDeclaration", - "scope": 11171, - "src": "6053:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11167, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6053:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6052:22:53" - }, - "returnParameters": { - "id": 11170, - "nodeType": "ParameterList", - "parameters": [], - "src": "6083:0:53" - }, - "scope": 11280, - "src": "6023:61:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11172, - "nodeType": "StructuredDocumentation", - "src": "6090:681:53", - "text": " @notice Change the amount of tokens in an allocation\n @dev Requirements:\n - The indexer must be registered\n - The provision must be valid according to the subgraph service rules\n - `tokens` must be different from the current allocation size\n - The indexer must have enough available tokens to allocate if they are upsizing the allocation\n Emits a {AllocationResized} event.\n See {AllocationManager-_resizeAllocation} for more details.\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param tokens The new amount of tokens in the allocation" - }, - "functionSelector": "81e777a7", - "id": 11181, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "resizeAllocation", - "nameLocation": "6785:16:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11179, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11174, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "6810:7:53", - "nodeType": "VariableDeclaration", - "scope": 11181, - "src": "6802:15:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11173, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6802:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11176, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "6827:12:53", - "nodeType": "VariableDeclaration", - "scope": 11181, - "src": "6819:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11175, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6819:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11178, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "6849:6:53", - "nodeType": "VariableDeclaration", - "scope": 11181, - "src": "6841:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11177, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6841:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6801:55:53" - }, - "returnParameters": { - "id": 11180, - "nodeType": "ParameterList", - "parameters": [], - "src": "6865:0:53" - }, - "scope": 11280, - "src": "6776:90:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11182, - "nodeType": "StructuredDocumentation", - "src": "6872:398:53", - "text": " @notice Imports a legacy allocation id into the subgraph service\n This is a governor only action that is required to prevent indexers from re-using allocation ids from the\n legacy staking contract.\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment" - }, - "functionSelector": "7dfe6d28", - "id": 11191, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "migrateLegacyAllocation", - "nameLocation": "7284:23:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11189, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11184, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "7316:7:53", - "nodeType": "VariableDeclaration", - "scope": 11191, - "src": "7308:15:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11183, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7308:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11186, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "7333:12:53", - "nodeType": "VariableDeclaration", - "scope": 11191, - "src": "7325:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11185, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7325:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11188, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "7355:20:53", - "nodeType": "VariableDeclaration", - "scope": 11191, - "src": "7347:28:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11187, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7347:7:53", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7307:69:53" - }, - "returnParameters": { - "id": 11190, - "nodeType": "ParameterList", - "parameters": [], - "src": "7385:0:53" - }, - "scope": 11280, - "src": "7275:111:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11192, - "nodeType": "StructuredDocumentation", - "src": "7392:209:53", - "text": " @notice Sets a pause guardian\n @param pauseGuardian The address of the pause guardian\n @param allowed True if the pause guardian is allowed to pause the contract, false otherwise" - }, - "functionSelector": "35577962", - "id": 11199, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setPauseGuardian", - "nameLocation": "7615:16:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11197, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11194, - "mutability": "mutable", - "name": "pauseGuardian", - "nameLocation": "7640:13:53", - "nodeType": "VariableDeclaration", - "scope": 11199, - "src": "7632:21:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11193, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7632:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11196, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "7660:7:53", - "nodeType": "VariableDeclaration", - "scope": 11199, - "src": "7655:12:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11195, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7655:4:53", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "7631:37:53" - }, - "returnParameters": { - "id": 11198, - "nodeType": "ParameterList", - "parameters": [], - "src": "7677:0:53" - }, - "scope": 11280, - "src": "7606:72:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11200, - "nodeType": "StructuredDocumentation", - "src": "7684:216:53", - "text": " @notice Sets the minimum amount of provisioned tokens required to create an allocation\n @param minimumProvisionTokens The minimum amount of provisioned tokens required to create an allocation" - }, - "functionSelector": "832bc923", - "id": 11205, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setMinimumProvisionTokens", - "nameLocation": "7914:25:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11203, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11202, - "mutability": "mutable", - "name": "minimumProvisionTokens", - "nameLocation": "7948:22:53", - "nodeType": "VariableDeclaration", - "scope": 11205, - "src": "7940:30:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11201, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7940:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7939:32:53" - }, - "returnParameters": { - "id": 11204, - "nodeType": "ParameterList", - "parameters": [], - "src": "7980:0:53" - }, - "scope": 11280, - "src": "7905:76:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11206, - "nodeType": "StructuredDocumentation", - "src": "7987:103:53", - "text": " @notice Sets the delegation ratio\n @param delegationRatio The delegation ratio" - }, - "functionSelector": "1dd42f60", - "id": 11211, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDelegationRatio", - "nameLocation": "8104:18:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11209, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11208, - "mutability": "mutable", - "name": "delegationRatio", - "nameLocation": "8130:15:53", - "nodeType": "VariableDeclaration", - "scope": 11211, - "src": "8123:22:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 11207, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "8123:6:53", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "8122:24:53" - }, - "returnParameters": { - "id": 11210, - "nodeType": "ParameterList", - "parameters": [], - "src": "8155:0:53" - }, - "scope": 11280, - "src": "8095:61:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11212, - "nodeType": "StructuredDocumentation", - "src": "8162:110:53", - "text": " @notice Sets the stake to fees ratio\n @param stakeToFeesRatio The stake to fees ratio" - }, - "functionSelector": "e6f50054", - "id": 11217, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setStakeToFeesRatio", - "nameLocation": "8286:19:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11215, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11214, - "mutability": "mutable", - "name": "stakeToFeesRatio", - "nameLocation": "8314:16:53", - "nodeType": "VariableDeclaration", - "scope": 11217, - "src": "8306:24:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11213, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8306:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8305:26:53" - }, - "returnParameters": { - "id": 11216, - "nodeType": "ParameterList", - "parameters": [], - "src": "8340:0:53" - }, - "scope": 11280, - "src": "8277:64:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11218, - "nodeType": "StructuredDocumentation", - "src": "8347:190:53", - "text": " @notice Sets the max POI staleness\n See {AllocationManagerV1Storage-maxPOIStaleness} for more details.\n @param maxPOIStaleness The max POI staleness in seconds" - }, - "functionSelector": "7aa31bce", - "id": 11223, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setMaxPOIStaleness", - "nameLocation": "8551:18:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11221, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11220, - "mutability": "mutable", - "name": "maxPOIStaleness", - "nameLocation": "8578:15:53", - "nodeType": "VariableDeclaration", - "scope": 11223, - "src": "8570:23:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11219, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8570:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8569:25:53" - }, - "returnParameters": { - "id": 11222, - "nodeType": "ParameterList", - "parameters": [], - "src": "8603:0:53" - }, - "scope": 11280, - "src": "8542:62:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11224, - "nodeType": "StructuredDocumentation", - "src": "8610:177:53", - "text": " @notice Sets the curators payment cut for query fees\n @dev Emits a {CuratorCutSet} event\n @param curationCut The curation cut for the payment type" - }, - "functionSelector": "7e89bac3", - "id": 11229, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setCurationCut", - "nameLocation": "8801:14:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11227, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11226, - "mutability": "mutable", - "name": "curationCut", - "nameLocation": "8824:11:53", - "nodeType": "VariableDeclaration", - "scope": 11229, - "src": "8816:19:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11225, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8816:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8815:21:53" - }, - "returnParameters": { - "id": 11228, - "nodeType": "ParameterList", - "parameters": [], - "src": "8845:0:53" - }, - "scope": 11280, - "src": "8792:54:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11230, - "nodeType": "StructuredDocumentation", - "src": "8852:231:53", - "text": " @notice Sets the rewards destination for an indexer to receive indexing rewards\n @dev Emits a {RewardsDestinationSet} event\n @param rewardsDestination The address where indexing rewards should be sent" - }, - "functionSelector": "772495c3", - "id": 11235, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setRewardsDestination", - "nameLocation": "9097:21:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11233, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11232, - "mutability": "mutable", - "name": "rewardsDestination", - "nameLocation": "9127:18:53", - "nodeType": "VariableDeclaration", - "scope": 11235, - "src": "9119:26:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11231, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9119:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9118:28:53" - }, - "returnParameters": { - "id": 11234, - "nodeType": "ParameterList", - "parameters": [], - "src": "9155:0:53" - }, - "scope": 11280, - "src": "9088:68:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11236, - "nodeType": "StructuredDocumentation", - "src": "9162:168:53", - "text": " @notice Gets the details of an allocation\n For legacy allocations use {getLegacyAllocation}\n @param allocationId The id of the allocation" - }, - "functionSelector": "0e022923", - "id": 11244, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAllocation", - "nameLocation": "9344:13:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11239, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11238, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "9366:12:53", - "nodeType": "VariableDeclaration", - "scope": 11244, - "src": "9358:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11237, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9358:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9357:22:53" - }, - "returnParameters": { - "id": 11243, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11242, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11244, - "src": "9403:23:53", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11241, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11240, - "name": "Allocation.State", - "nameLocations": [ - "9403:10:53", - "9414:5:53" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "9403:16:53" - }, - "referencedDeclaration": 11307, - "src": "9403:16:53", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "9402:25:53" - }, - "scope": 11280, - "src": "9335:93:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11245, - "nodeType": "StructuredDocumentation", - "src": "9434:172:53", - "text": " @notice Gets the details of a legacy allocation\n For non-legacy allocations use {getAllocation}\n @param allocationId The id of the allocation" - }, - "functionSelector": "6d9a3951", - "id": 11253, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getLegacyAllocation", - "nameLocation": "9620:19:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11248, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11247, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "9648:12:53", - "nodeType": "VariableDeclaration", - "scope": 11253, - "src": "9640:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11246, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9640:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9639:22:53" - }, - "returnParameters": { - "id": 11252, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11251, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11253, - "src": "9685:29:53", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State" - }, - "typeName": { - "id": 11250, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11249, - "name": "LegacyAllocation.State", - "nameLocations": [ - "9685:16:53", - "9702:5:53" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "9685:22:53" - }, - "referencedDeclaration": 11933, - "src": "9685:22:53", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "9684:31:53" - }, - "scope": 11280, - "src": "9611:105:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11254, - "nodeType": "StructuredDocumentation", - "src": "9722:175:53", - "text": " @notice Encodes the allocation proof for EIP712 signing\n @param indexer The address of the indexer\n @param allocationId The id of the allocation" - }, - "functionSelector": "ce56c98b", - "id": 11263, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "encodeAllocationProof", - "nameLocation": "9911:21:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11259, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11256, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "9941:7:53", - "nodeType": "VariableDeclaration", - "scope": 11263, - "src": "9933:15:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11255, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9933:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11258, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "9958:12:53", - "nodeType": "VariableDeclaration", - "scope": 11263, - "src": "9950:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11257, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9950:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9932:39:53" - }, - "returnParameters": { - "id": 11262, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11261, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11263, - "src": "9995:7:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11260, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "9995:7:53", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "9994:9:53" - }, - "scope": 11280, - "src": "9902:102:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11264, - "nodeType": "StructuredDocumentation", - "src": "10010:175:53", - "text": " @notice Checks if an allocation is stale\n @param allocationId The id of the allocation\n @return True if the allocation is stale, false otherwise" - }, - "functionSelector": "3f0ed79d", - "id": 11271, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isStaleAllocation", - "nameLocation": "10199:17:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11267, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11266, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "10225:12:53", - "nodeType": "VariableDeclaration", - "scope": 11271, - "src": "10217:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11265, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10217:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "10216:22:53" - }, - "returnParameters": { - "id": 11270, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11269, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11271, - "src": "10262:4:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11268, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "10262:4:53", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "10261:6:53" - }, - "scope": 11280, - "src": "10190:78:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11272, - "nodeType": "StructuredDocumentation", - "src": "10274:187:53", - "text": " @notice Checks if an indexer is over-allocated\n @param allocationId The id of the allocation\n @return True if the indexer is over-allocated, false otherwise" - }, - "functionSelector": "ba38f67d", - "id": 11279, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isOverAllocated", - "nameLocation": "10475:15:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11275, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11274, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "10499:12:53", - "nodeType": "VariableDeclaration", - "scope": 11279, - "src": "10491:20:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11273, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10491:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "10490:22:53" - }, - "returnParameters": { - "id": 11278, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11277, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11279, - "src": "10536:4:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11276, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "10536:4:53", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "10535:6:53" - }, - "scope": 11280, - "src": "10466:76:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 11281, - "src": "968:9576:53", - "usedErrors": [ - 1371, - 1374, - 11102, - 11105, - 11108, - 11111, - 11116, - 11122, - 11131, - 11138, - 11145, - 11152, - 11157, - 11162, - 11165 - ], - "usedEvents": [ - 1198, - 1203, - 1210, - 1217, - 1227, - 1234, - 1346, - 1357, - 1366, - 11087, - 11092, - 11097 - ] - } - ], - "src": "45:10500:53" - }, - "id": 53 - }, - "contracts/libraries/Allocation.sol": { - "ast": { - "absolutePath": "contracts/libraries/Allocation.sol", - "exportedSymbols": { - "Allocation": [ - 11674 - ], - "Math": [ - 7858 - ] - }, - "id": 11675, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 11282, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:54" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol", - "file": "@openzeppelin/contracts/utils/math/Math.sol", - "id": 11284, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11675, - "sourceUnit": 7859, - "src": "70:67:54", - "symbolAliases": [ - { - "foreign": { - "id": 11283, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7858, - "src": "79:4:54", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Allocation", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 11285, - "nodeType": "StructuredDocumentation", - "src": "139:80:54", - "text": " @title Allocation library\n @notice A library to handle Allocations." - }, - "fullyImplemented": true, - "id": 11674, - "linearizedBaseContracts": [ - 11674 - ], - "name": "Allocation", - "nameLocation": "228:10:54", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 11289, - "libraryName": { - "id": 11286, - "name": "Allocation", - "nameLocations": [ - "251:10:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11674, - "src": "251:10:54" - }, - "nodeType": "UsingForDirective", - "src": "245:27:54", - "typeName": { - "id": 11288, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11287, - "name": "State", - "nameLocations": [ - "266:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "266:5:54" - }, - "referencedDeclaration": 11307, - "src": "266:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - { - "canonicalName": "Allocation.State", - "documentation": { - "id": 11290, - "nodeType": "StructuredDocumentation", - "src": "278:45:54", - "text": " @notice Allocation details" - }, - "id": 11307, - "members": [ - { - "constant": false, - "id": 11292, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "403:7:54", - "nodeType": "VariableDeclaration", - "scope": 11307, - "src": "395:15:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11291, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "395:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11294, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "484:20:54", - "nodeType": "VariableDeclaration", - "scope": 11307, - "src": "476:28:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11293, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "476:7:54", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11296, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "560:6:54", - "nodeType": "VariableDeclaration", - "scope": 11307, - "src": "552:14:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11295, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "552:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11298, - "mutability": "mutable", - "name": "createdAt", - "nameLocation": "637:9:54", - "nodeType": "VariableDeclaration", - "scope": 11307, - "src": "629:17:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11297, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "629:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11300, - "mutability": "mutable", - "name": "closedAt", - "nameLocation": "716:8:54", - "nodeType": "VariableDeclaration", - "scope": 11307, - "src": "708:16:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11299, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "708:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11302, - "mutability": "mutable", - "name": "lastPOIPresentedAt", - "nameLocation": "795:18:54", - "nodeType": "VariableDeclaration", - "scope": 11307, - "src": "787:26:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11301, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "787:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11304, - "mutability": "mutable", - "name": "accRewardsPerAllocatedToken", - "nameLocation": "882:27:54", - "nodeType": "VariableDeclaration", - "scope": 11307, - "src": "874:35:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11303, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "874:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11306, - "mutability": "mutable", - "name": "accRewardsPending", - "nameLocation": "1011:17:54", - "nodeType": "VariableDeclaration", - "scope": 11307, - "src": "1003:25:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11305, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1003:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "State", - "nameLocation": "335:5:54", - "nodeType": "StructDefinition", - "scope": 11674, - "src": "328:707:54", - "visibility": "public" - }, - { - "documentation": { - "id": 11308, - "nodeType": "StructuredDocumentation", - "src": "1041:138:54", - "text": " @notice Thrown when attempting to create an allocation with an existing id\n @param allocationId The allocation id" - }, - "errorSelector": "0bc4def5", - "id": 11312, - "name": "AllocationAlreadyExists", - "nameLocation": "1190:23:54", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11311, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11310, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "1222:12:54", - "nodeType": "VariableDeclaration", - "scope": 11312, - "src": "1214:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1214:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1213:22:54" - }, - "src": "1184:52:54" - }, - { - "documentation": { - "id": 11313, - "nodeType": "StructuredDocumentation", - "src": "1242:143:54", - "text": " @notice Thrown when trying to perform an operation on a non-existent allocation\n @param allocationId The allocation id" - }, - "errorSelector": "42daadaf", - "id": 11317, - "name": "AllocationDoesNotExist", - "nameLocation": "1396:22:54", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11316, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11315, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "1427:12:54", - "nodeType": "VariableDeclaration", - "scope": 11317, - "src": "1419:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11314, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1419:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1418:22:54" - }, - "src": "1390:51:54" - }, - { - "documentation": { - "id": 11318, - "nodeType": "StructuredDocumentation", - "src": "1447:205:54", - "text": " @notice Thrown when trying to perform an operation on a closed allocation\n @param allocationId The allocation id\n @param closedAt The timestamp when the allocation was closed" - }, - "errorSelector": "61b66e0d", - "id": 11324, - "name": "AllocationClosed", - "nameLocation": "1663:16:54", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11323, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11320, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "1688:12:54", - "nodeType": "VariableDeclaration", - "scope": 11324, - "src": "1680:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11319, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1680:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11322, - "mutability": "mutable", - "name": "closedAt", - "nameLocation": "1710:8:54", - "nodeType": "VariableDeclaration", - "scope": 11324, - "src": "1702:16:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11321, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1702:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1679:40:54" - }, - "src": "1657:63:54" - }, - { - "body": { - "id": 11381, - "nodeType": "Block", - "src": "2491:535:54", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 11352, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2509:28:54", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "baseExpression": { - "id": 11347, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11330, - "src": "2510:4:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 11349, - "indexExpression": { - "id": 11348, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11334, - "src": "2515:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2510:18:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "id": 11350, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2529:6:54", - "memberName": "exists", - "nodeType": "MemberAccess", - "referencedDeclaration": 11602, - "src": "2510:25:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 11351, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2510:27:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 11354, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11334, - "src": "2563:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 11353, - "name": "AllocationAlreadyExists", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11312, - "src": "2539:23:54", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 11355, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2539:37:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11346, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2501:7:54", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11356, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2501:76:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11357, - "nodeType": "ExpressionStatement", - "src": "2501:76:54" - }, - { - "assignments": [ - 11360 - ], - "declarations": [ - { - "constant": false, - "id": 11360, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "2601:10:54", - "nodeType": "VariableDeclaration", - "scope": 11381, - "src": "2588:23:54", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11359, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11358, - "name": "State", - "nameLocations": [ - "2588:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "2588:5:54" - }, - "referencedDeclaration": 11307, - "src": "2588:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 11372, - "initialValue": { - "arguments": [ - { - "id": 11362, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11332, - "src": "2643:7:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 11363, - "name": "subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11336, - "src": "2686:20:54", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 11364, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11338, - "src": "2728:6:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 11365, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "2759:5:54", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 11366, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2765:9:54", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "2759:15:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "30", - "id": 11367, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2798:1:54", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "hexValue": "30", - "id": 11368, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2833:1:54", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "id": 11369, - "name": "accRewardsPerAllocatedToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11340, - "src": "2877:27:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "30", - "id": 11370, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2937:1:54", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 11361, - "name": "State", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11307, - "src": "2614:5:54", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_State_$11307_storage_ptr_$", - "typeString": "type(struct Allocation.State storage pointer)" - } - }, - "id": 11371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [ - "2634:7:54", - "2664:20:54", - "2720:6:54", - "2748:9:54", - "2788:8:54", - "2813:18:54", - "2848:27:54", - "2918:17:54" - ], - "names": [ - "indexer", - "subgraphDeploymentId", - "tokens", - "createdAt", - "closedAt", - "lastPOIPresentedAt", - "accRewardsPerAllocatedToken", - "accRewardsPending" - ], - "nodeType": "FunctionCall", - "src": "2614:335:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2588:361:54" - }, - { - "expression": { - "id": 11377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 11373, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11330, - "src": "2960:4:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 11375, - "indexExpression": { - "id": 11374, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11334, - "src": "2965:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2960:18:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 11376, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11360, - "src": "2981:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "src": "2960:31:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "id": 11378, - "nodeType": "ExpressionStatement", - "src": "2960:31:54" - }, - { - "expression": { - "id": 11379, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11360, - "src": "3009:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "functionReturnParameters": 11345, - "id": 11380, - "nodeType": "Return", - "src": "3002:17:54" - } - ] - }, - "documentation": { - "id": 11325, - "nodeType": "StructuredDocumentation", - "src": "1726:496:54", - "text": " @notice Create a new allocation\n @dev Requirements:\n - The allocation must not exist\n @param self The allocation list mapping\n @param indexer The indexer that owns the allocation\n @param allocationId The allocation id\n @param subgraphDeploymentId The subgraph deployment id the allocation is for\n @param tokens The number of tokens allocated\n @param accRewardsPerAllocatedToken The initial accumulated rewards per allocated token" - }, - "id": 11382, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "create", - "nameLocation": "2236:6:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11341, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11330, - "mutability": "mutable", - "name": "self", - "nameLocation": "2286:4:54", - "nodeType": "VariableDeclaration", - "scope": 11382, - "src": "2252:38:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "typeName": { - "id": 11329, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 11326, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2260:7:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "2252:25:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 11328, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11327, - "name": "State", - "nameLocations": [ - "2271:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "2271:5:54" - }, - "referencedDeclaration": 11307, - "src": "2271:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11332, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "2308:7:54", - "nodeType": "VariableDeclaration", - "scope": 11382, - "src": "2300:15:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11331, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2300:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11334, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "2333:12:54", - "nodeType": "VariableDeclaration", - "scope": 11382, - "src": "2325:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11333, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2325:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11336, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "2363:20:54", - "nodeType": "VariableDeclaration", - "scope": 11382, - "src": "2355:28:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11335, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2355:7:54", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11338, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2401:6:54", - "nodeType": "VariableDeclaration", - "scope": 11382, - "src": "2393:14:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11337, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2393:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11340, - "mutability": "mutable", - "name": "accRewardsPerAllocatedToken", - "nameLocation": "2425:27:54", - "nodeType": "VariableDeclaration", - "scope": 11382, - "src": "2417:35:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11339, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2417:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2242:216:54" - }, - "returnParameters": { - "id": 11345, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11344, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11382, - "src": "2477:12:54", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11343, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11342, - "name": "State", - "nameLocations": [ - "2477:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "2477:5:54" - }, - "referencedDeclaration": 11307, - "src": "2477:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "2476:14:54" - }, - "scope": 11674, - "src": "2227:799:54", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11419, - "nodeType": "Block", - "src": "3398:216:54", - "statements": [ - { - "assignments": [ - 11395 - ], - "declarations": [ - { - "constant": false, - "id": 11395, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "3422:10:54", - "nodeType": "VariableDeclaration", - "scope": 11419, - "src": "3408:24:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11394, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11393, - "name": "State", - "nameLocations": [ - "3408:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "3408:5:54" - }, - "referencedDeclaration": 11307, - "src": "3408:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 11400, - "initialValue": { - "arguments": [ - { - "id": 11397, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11388, - "src": "3440:4:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - { - "id": 11398, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11390, - "src": "3446:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 11396, - "name": "_get", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11673, - "src": "3435:4:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" - } - }, - "id": 11399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3435:24:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3408:51:54" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 11402, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11395, - "src": "3477:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11403, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3488:6:54", - "memberName": "isOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11621, - "src": "3477:17:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 11404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3477:19:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 11406, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11390, - "src": "3515:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 11407, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11395, - "src": "3529:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11408, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3540:8:54", - "memberName": "closedAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11300, - "src": "3529:19:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11405, - "name": "AllocationClosed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11324, - "src": "3498:16:54", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", - "typeString": "function (address,uint256) pure returns (error)" - } - }, - "id": 11409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3498:51:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11401, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3469:7:54", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3469:81:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11411, - "nodeType": "ExpressionStatement", - "src": "3469:81:54" - }, - { - "expression": { - "id": 11417, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 11412, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11395, - "src": "3560:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11414, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "3571:18:54", - "memberName": "lastPOIPresentedAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11302, - "src": "3560:29:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 11415, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "3592:5:54", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 11416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3598:9:54", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "3592:15:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3560:47:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 11418, - "nodeType": "ExpressionStatement", - "src": "3560:47:54" - } - ] - }, - "documentation": { - "id": 11383, - "nodeType": "StructuredDocumentation", - "src": "3032:270:54", - "text": " @notice Present a POI for an allocation\n @dev It only updates the last POI presented timestamp.\n Requirements:\n - The allocation must be open\n @param self The allocation list mapping\n @param allocationId The allocation id" - }, - "id": 11420, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "presentPOI", - "nameLocation": "3316:10:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11391, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11388, - "mutability": "mutable", - "name": "self", - "nameLocation": "3361:4:54", - "nodeType": "VariableDeclaration", - "scope": 11420, - "src": "3327:38:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "typeName": { - "id": 11387, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 11384, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3335:7:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "3327:25:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 11386, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11385, - "name": "State", - "nameLocations": [ - "3346:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "3346:5:54" - }, - "referencedDeclaration": 11307, - "src": "3346:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11390, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "3375:12:54", - "nodeType": "VariableDeclaration", - "scope": 11420, - "src": "3367:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11389, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3367:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3326:62:54" - }, - "returnParameters": { - "id": 11392, - "nodeType": "ParameterList", - "parameters": [], - "src": "3398:0:54" - }, - "scope": 11674, - "src": "3307:307:54", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11458, - "nodeType": "Block", - "src": "4128:237:54", - "statements": [ - { - "assignments": [ - 11435 - ], - "declarations": [ - { - "constant": false, - "id": 11435, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "4152:10:54", - "nodeType": "VariableDeclaration", - "scope": 11458, - "src": "4138:24:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11434, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11433, - "name": "State", - "nameLocations": [ - "4138:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "4138:5:54" - }, - "referencedDeclaration": 11307, - "src": "4138:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 11440, - "initialValue": { - "arguments": [ - { - "id": 11437, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11426, - "src": "4170:4:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - { - "id": 11438, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11428, - "src": "4176:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 11436, - "name": "_get", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11673, - "src": "4165:4:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" - } - }, - "id": 11439, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4165:24:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4138:51:54" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 11442, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11435, - "src": "4207:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11443, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4218:6:54", - "memberName": "isOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11621, - "src": "4207:17:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 11444, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4207:19:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 11446, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11428, - "src": "4245:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 11447, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11435, - "src": "4259:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11448, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4270:8:54", - "memberName": "closedAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11300, - "src": "4259:19:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11445, - "name": "AllocationClosed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11324, - "src": "4228:16:54", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", - "typeString": "function (address,uint256) pure returns (error)" - } - }, - "id": 11449, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4228:51:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11441, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "4199:7:54", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4199:81:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11451, - "nodeType": "ExpressionStatement", - "src": "4199:81:54" - }, - { - "expression": { - "id": 11456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 11452, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11435, - "src": "4290:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11454, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "4301:27:54", - "memberName": "accRewardsPerAllocatedToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 11304, - "src": "4290:38:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 11455, - "name": "accRewardsPerAllocatedToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11430, - "src": "4331:27:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4290:68:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 11457, - "nodeType": "ExpressionStatement", - "src": "4290:68:54" - } - ] - }, - "documentation": { - "id": 11421, - "nodeType": "StructuredDocumentation", - "src": "3620:340:54", - "text": " @notice Update the accumulated rewards per allocated token for an allocation\n @dev Requirements:\n - The allocation must be open\n @param self The allocation list mapping\n @param allocationId The allocation id\n @param accRewardsPerAllocatedToken The new accumulated rewards per allocated token" - }, - "id": 11459, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "snapshotRewards", - "nameLocation": "3974:15:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11431, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11426, - "mutability": "mutable", - "name": "self", - "nameLocation": "4033:4:54", - "nodeType": "VariableDeclaration", - "scope": 11459, - "src": "3999:38:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "typeName": { - "id": 11425, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 11422, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4007:7:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "3999:25:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 11424, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11423, - "name": "State", - "nameLocations": [ - "4018:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "4018:5:54" - }, - "referencedDeclaration": 11307, - "src": "4018:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11428, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "4055:12:54", - "nodeType": "VariableDeclaration", - "scope": 11459, - "src": "4047:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11427, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4047:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11430, - "mutability": "mutable", - "name": "accRewardsPerAllocatedToken", - "nameLocation": "4085:27:54", - "nodeType": "VariableDeclaration", - "scope": 11459, - "src": "4077:35:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11429, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4077:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3989:129:54" - }, - "returnParameters": { - "id": 11432, - "nodeType": "ParameterList", - "parameters": [], - "src": "4128:0:54" - }, - "scope": 11674, - "src": "3965:400:54", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11495, - "nodeType": "Block", - "src": "4728:201:54", - "statements": [ - { - "assignments": [ - 11472 - ], - "declarations": [ - { - "constant": false, - "id": 11472, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "4752:10:54", - "nodeType": "VariableDeclaration", - "scope": 11495, - "src": "4738:24:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11471, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11470, - "name": "State", - "nameLocations": [ - "4738:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "4738:5:54" - }, - "referencedDeclaration": 11307, - "src": "4738:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 11477, - "initialValue": { - "arguments": [ - { - "id": 11474, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11465, - "src": "4770:4:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - { - "id": 11475, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11467, - "src": "4776:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 11473, - "name": "_get", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11673, - "src": "4765:4:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" - } - }, - "id": 11476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4765:24:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4738:51:54" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 11479, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11472, - "src": "4807:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11480, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4818:6:54", - "memberName": "isOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11621, - "src": "4807:17:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 11481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4807:19:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 11483, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11467, - "src": "4845:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 11484, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11472, - "src": "4859:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11485, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4870:8:54", - "memberName": "closedAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11300, - "src": "4859:19:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11482, - "name": "AllocationClosed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11324, - "src": "4828:16:54", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", - "typeString": "function (address,uint256) pure returns (error)" - } - }, - "id": 11486, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4828:51:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11478, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "4799:7:54", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11487, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4799:81:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11488, - "nodeType": "ExpressionStatement", - "src": "4799:81:54" - }, - { - "expression": { - "id": 11493, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 11489, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11472, - "src": "4890:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11491, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "4901:17:54", - "memberName": "accRewardsPending", - "nodeType": "MemberAccess", - "referencedDeclaration": 11306, - "src": "4890:28:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "30", - "id": 11492, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4921:1:54", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4890:32:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 11494, - "nodeType": "ExpressionStatement", - "src": "4890:32:54" - } - ] - }, - "documentation": { - "id": 11460, - "nodeType": "StructuredDocumentation", - "src": "4371:252:54", - "text": " @notice Update the accumulated rewards pending to be claimed for an allocation\n @dev Requirements:\n - The allocation must be open\n @param self The allocation list mapping\n @param allocationId The allocation id" - }, - "id": 11496, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "clearPendingRewards", - "nameLocation": "4637:19:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11468, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11465, - "mutability": "mutable", - "name": "self", - "nameLocation": "4691:4:54", - "nodeType": "VariableDeclaration", - "scope": 11496, - "src": "4657:38:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "typeName": { - "id": 11464, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 11461, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4665:7:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "4657:25:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 11463, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11462, - "name": "State", - "nameLocations": [ - "4676:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "4676:5:54" - }, - "referencedDeclaration": 11307, - "src": "4676:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11467, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "4705:12:54", - "nodeType": "VariableDeclaration", - "scope": 11496, - "src": "4697:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11466, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4697:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4656:62:54" - }, - "returnParameters": { - "id": 11469, - "nodeType": "ParameterList", - "parameters": [], - "src": "4728:0:54" - }, - "scope": 11674, - "src": "4628:301:54", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11533, - "nodeType": "Block", - "src": "5227:206:54", - "statements": [ - { - "assignments": [ - 11509 - ], - "declarations": [ - { - "constant": false, - "id": 11509, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "5251:10:54", - "nodeType": "VariableDeclaration", - "scope": 11533, - "src": "5237:24:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11508, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11507, - "name": "State", - "nameLocations": [ - "5237:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "5237:5:54" - }, - "referencedDeclaration": 11307, - "src": "5237:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 11514, - "initialValue": { - "arguments": [ - { - "id": 11511, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11502, - "src": "5269:4:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - { - "id": 11512, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11504, - "src": "5275:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 11510, - "name": "_get", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11673, - "src": "5264:4:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" - } - }, - "id": 11513, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5264:24:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5237:51:54" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 11516, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11509, - "src": "5306:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11517, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5317:6:54", - "memberName": "isOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11621, - "src": "5306:17:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 11518, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5306:19:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 11520, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11504, - "src": "5344:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 11521, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11509, - "src": "5358:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11522, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5369:8:54", - "memberName": "closedAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11300, - "src": "5358:19:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11519, - "name": "AllocationClosed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11324, - "src": "5327:16:54", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", - "typeString": "function (address,uint256) pure returns (error)" - } - }, - "id": 11523, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5327:51:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11515, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "5298:7:54", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5298:81:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11525, - "nodeType": "ExpressionStatement", - "src": "5298:81:54" - }, - { - "expression": { - "id": 11531, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 11526, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11509, - "src": "5389:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11528, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5400:8:54", - "memberName": "closedAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11300, - "src": "5389:19:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 11529, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "5411:5:54", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 11530, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5417:9:54", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "5411:15:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5389:37:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 11532, - "nodeType": "ExpressionStatement", - "src": "5389:37:54" - } - ] - }, - "documentation": { - "id": 11497, - "nodeType": "StructuredDocumentation", - "src": "4935:201:54", - "text": " @notice Close an allocation\n @dev Requirements:\n - The allocation must be open\n @param self The allocation list mapping\n @param allocationId The allocation id" - }, - "id": 11534, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "close", - "nameLocation": "5150:5:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11505, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11502, - "mutability": "mutable", - "name": "self", - "nameLocation": "5190:4:54", - "nodeType": "VariableDeclaration", - "scope": 11534, - "src": "5156:38:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "typeName": { - "id": 11501, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 11498, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5164:7:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "5156:25:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 11500, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11499, - "name": "State", - "nameLocations": [ - "5175:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "5175:5:54" - }, - "referencedDeclaration": 11307, - "src": "5175:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11504, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "5204:12:54", - "nodeType": "VariableDeclaration", - "scope": 11534, - "src": "5196:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11503, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5196:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5155:62:54" - }, - "returnParameters": { - "id": 11506, - "nodeType": "ParameterList", - "parameters": [], - "src": "5227:0:54" - }, - "scope": 11674, - "src": "5141:292:54", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11553, - "nodeType": "Block", - "src": "5692:48:54", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 11549, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11540, - "src": "5714:4:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - { - "id": 11550, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11542, - "src": "5720:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 11548, - "name": "_get", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11673, - "src": "5709:4:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_storage_ptr_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State storage pointer)" - } - }, - "id": 11551, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5709:24:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "functionReturnParameters": 11547, - "id": 11552, - "nodeType": "Return", - "src": "5702:31:54" - } - ] - }, - "documentation": { - "id": 11535, - "nodeType": "StructuredDocumentation", - "src": "5439:136:54", - "text": " @notice Get an allocation\n @param self The allocation list mapping\n @param allocationId The allocation id" - }, - "id": 11554, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "get", - "nameLocation": "5589:3:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11543, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11540, - "mutability": "mutable", - "name": "self", - "nameLocation": "5627:4:54", - "nodeType": "VariableDeclaration", - "scope": 11554, - "src": "5593:38:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "typeName": { - "id": 11539, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 11536, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5601:7:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "5593:25:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 11538, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11537, - "name": "State", - "nameLocations": [ - "5612:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "5612:5:54" - }, - "referencedDeclaration": 11307, - "src": "5612:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11542, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "5641:12:54", - "nodeType": "VariableDeclaration", - "scope": 11554, - "src": "5633:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11541, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5633:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5592:62:54" - }, - "returnParameters": { - "id": 11547, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11546, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11554, - "src": "5678:12:54", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11545, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11544, - "name": "State", - "nameLocations": [ - "5678:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "5678:5:54" - }, - "referencedDeclaration": 11307, - "src": "5678:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "5677:14:54" - }, - "scope": 11674, - "src": "5580:160:54", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11586, - "nodeType": "Block", - "src": "6013:178:54", - "statements": [ - { - "assignments": [ - 11566 - ], - "declarations": [ - { - "constant": false, - "id": 11566, - "mutability": "mutable", - "name": "timeSinceLastPOI", - "nameLocation": "6031:16:54", - "nodeType": "VariableDeclaration", - "scope": 11586, - "src": "6023:24:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11565, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6023:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 11577, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11576, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11567, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "6050:5:54", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 11568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6056:9:54", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "6050:15:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "arguments": [ - { - "expression": { - "id": 11571, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11558, - "src": "6077:4:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 11572, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6082:9:54", - "memberName": "createdAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11298, - "src": "6077:14:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 11573, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11558, - "src": "6093:4:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 11574, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6098:18:54", - "memberName": "lastPOIPresentedAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11302, - "src": "6093:23:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 11569, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7858, - "src": "6068:4:54", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Math_$7858_$", - "typeString": "type(library Math)" - } - }, - "id": 11570, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6073:3:54", - "memberName": "max", - "nodeType": "MemberAccess", - "referencedDeclaration": 6991, - "src": "6068:8:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 11575, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6068:49:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6050:67:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6023:94:54" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 11584, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 11578, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11558, - "src": "6134:4:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 11579, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6139:6:54", - "memberName": "isOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11621, - "src": "6134:11:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 11580, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6134:13:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11583, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 11581, - "name": "timeSinceLastPOI", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11566, - "src": "6151:16:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 11582, - "name": "staleThreshold", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11560, - "src": "6170:14:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6151:33:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "6134:50:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 11564, - "id": 11585, - "nodeType": "Return", - "src": "6127:57:54" - } - ] - }, - "documentation": { - "id": 11555, - "nodeType": "StructuredDocumentation", - "src": "5746:173:54", - "text": " @notice Checks if an allocation is stale\n @param self The allocation\n @param staleThreshold The time in blocks to consider an allocation stale" - }, - "id": 11587, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isStale", - "nameLocation": "5933:7:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11561, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11558, - "mutability": "mutable", - "name": "self", - "nameLocation": "5954:4:54", - "nodeType": "VariableDeclaration", - "scope": 11587, - "src": "5941:17:54", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11557, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11556, - "name": "State", - "nameLocations": [ - "5941:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "5941:5:54" - }, - "referencedDeclaration": 11307, - "src": "5941:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11560, - "mutability": "mutable", - "name": "staleThreshold", - "nameLocation": "5968:14:54", - "nodeType": "VariableDeclaration", - "scope": 11587, - "src": "5960:22:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11559, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5960:7:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5940:43:54" - }, - "returnParameters": { - "id": 11564, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11563, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11587, - "src": "6007:4:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11562, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6007:4:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6006:6:54" - }, - "scope": 11674, - "src": "5924:267:54", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11601, - "nodeType": "Block", - "src": "6357:43:54", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11596, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11591, - "src": "6374:4:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 11597, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6379:9:54", - "memberName": "createdAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11298, - "src": "6374:14:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 11598, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6392:1:54", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "6374:19:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 11595, - "id": 11600, - "nodeType": "Return", - "src": "6367:26:54" - } - ] - }, - "documentation": { - "id": 11588, - "nodeType": "StructuredDocumentation", - "src": "6197:91:54", - "text": " @notice Checks if an allocation exists\n @param self The allocation" - }, - "id": 11602, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "exists", - "nameLocation": "6302:6:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11592, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11591, - "mutability": "mutable", - "name": "self", - "nameLocation": "6322:4:54", - "nodeType": "VariableDeclaration", - "scope": 11602, - "src": "6309:17:54", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11590, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11589, - "name": "State", - "nameLocations": [ - "6309:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "6309:5:54" - }, - "referencedDeclaration": 11307, - "src": "6309:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "6308:19:54" - }, - "returnParameters": { - "id": 11595, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11594, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11602, - "src": "6351:4:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11593, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6351:4:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6350:6:54" - }, - "scope": 11674, - "src": "6293:107:54", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11620, - "nodeType": "Block", - "src": "6567:59:54", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 11618, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 11611, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11606, - "src": "6584:4:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 11612, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6589:6:54", - "memberName": "exists", - "nodeType": "MemberAccess", - "referencedDeclaration": 11602, - "src": "6584:11:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 11613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6584:13:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11617, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11614, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11606, - "src": "6601:4:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 11615, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6606:8:54", - "memberName": "closedAt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11300, - "src": "6601:13:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 11616, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6618:1:54", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "6601:18:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "6584:35:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 11610, - "id": 11619, - "nodeType": "Return", - "src": "6577:42:54" - } - ] - }, - "documentation": { - "id": 11603, - "nodeType": "StructuredDocumentation", - "src": "6406:92:54", - "text": " @notice Checks if an allocation is open\n @param self The allocation" - }, - "id": 11621, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isOpen", - "nameLocation": "6512:6:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11607, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11606, - "mutability": "mutable", - "name": "self", - "nameLocation": "6532:4:54", - "nodeType": "VariableDeclaration", - "scope": 11621, - "src": "6519:17:54", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11605, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11604, - "name": "State", - "nameLocations": [ - "6519:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "6519:5:54" - }, - "referencedDeclaration": 11307, - "src": "6519:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "6518:19:54" - }, - "returnParameters": { - "id": 11610, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11609, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11621, - "src": "6561:4:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11608, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6561:4:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6560:6:54" - }, - "scope": 11674, - "src": "6503:123:54", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11639, - "nodeType": "Block", - "src": "6805:57:54", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 11637, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 11630, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11625, - "src": "6822:4:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 11631, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6827:6:54", - "memberName": "exists", - "nodeType": "MemberAccess", - "referencedDeclaration": 11602, - "src": "6822:11:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 11632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6822:13:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11636, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11633, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11625, - "src": "6839:4:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 11634, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6844:6:54", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "6839:11:54", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 11635, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6854:1:54", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "6839:16:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "6822:33:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 11629, - "id": 11638, - "nodeType": "Return", - "src": "6815:40:54" - } - ] - }, - "documentation": { - "id": 11622, - "nodeType": "StructuredDocumentation", - "src": "6632:98:54", - "text": " @notice Checks if an allocation is alturistic\n @param self The allocation" - }, - "id": 11640, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isAltruistic", - "nameLocation": "6744:12:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11626, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11625, - "mutability": "mutable", - "name": "self", - "nameLocation": "6770:4:54", - "nodeType": "VariableDeclaration", - "scope": 11640, - "src": "6757:17:54", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11624, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11623, - "name": "State", - "nameLocations": [ - "6757:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "6757:5:54" - }, - "referencedDeclaration": 11307, - "src": "6757:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "6756:19:54" - }, - "returnParameters": { - "id": 11629, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11628, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11640, - "src": "6799:4:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11627, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6799:4:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6798:6:54" - }, - "scope": 11674, - "src": "6735:127:54", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11672, - "nodeType": "Block", - "src": "7197:165:54", - "statements": [ - { - "assignments": [ - 11656 - ], - "declarations": [ - { - "constant": false, - "id": 11656, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "7221:10:54", - "nodeType": "VariableDeclaration", - "scope": 11672, - "src": "7207:24:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11655, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11654, - "name": "State", - "nameLocations": [ - "7207:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "7207:5:54" - }, - "referencedDeclaration": 11307, - "src": "7207:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 11660, - "initialValue": { - "baseExpression": { - "id": 11657, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11646, - "src": "7234:4:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 11659, - "indexExpression": { - "id": 11658, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11648, - "src": "7239:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7234:18:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7207:45:54" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 11662, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11656, - "src": "7270:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "id": 11663, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7281:6:54", - "memberName": "exists", - "nodeType": "MemberAccess", - "referencedDeclaration": 11602, - "src": "7270:17:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 11664, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7270:19:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 11666, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11648, - "src": "7314:12:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 11665, - "name": "AllocationDoesNotExist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11317, - "src": "7291:22:54", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 11667, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7291:36:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11661, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "7262:7:54", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11668, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7262:66:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11669, - "nodeType": "ExpressionStatement", - "src": "7262:66:54" - }, - { - "expression": { - "id": 11670, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11656, - "src": "7345:10:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State storage pointer" - } - }, - "functionReturnParameters": 11653, - "id": 11671, - "nodeType": "Return", - "src": "7338:17:54" - } - ] - }, - "documentation": { - "id": 11641, - "nodeType": "StructuredDocumentation", - "src": "6868:211:54", - "text": " @notice Get the allocation for an allocation id\n @dev Reverts if the allocation does not exist\n @param self The allocation list mapping\n @param allocationId The allocation id" - }, - "id": 11673, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_get", - "nameLocation": "7093:4:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11649, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11646, - "mutability": "mutable", - "name": "self", - "nameLocation": "7132:4:54", - "nodeType": "VariableDeclaration", - "scope": 11673, - "src": "7098:38:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "typeName": { - "id": 11645, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 11642, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7106:7:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "7098:25:54", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 11644, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11643, - "name": "State", - "nameLocations": [ - "7117:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "7117:5:54" - }, - "referencedDeclaration": 11307, - "src": "7117:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11648, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "7146:12:54", - "nodeType": "VariableDeclaration", - "scope": 11673, - "src": "7138:20:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11647, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7138:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7097:62:54" - }, - "returnParameters": { - "id": 11653, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11652, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11673, - "src": "7182:13:54", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 11651, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11650, - "name": "State", - "nameLocations": [ - "7182:5:54" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "7182:5:54" - }, - "referencedDeclaration": 11307, - "src": "7182:5:54", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "7181:15:54" - }, - "scope": 11674, - "src": "7084:278:54", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - } - ], - "scope": 11675, - "src": "220:7144:54", - "usedErrors": [ - 11312, - 11317, - 11324 - ], - "usedEvents": [] - } - ], - "src": "45:7320:54" - }, - "id": 54 - }, - "contracts/libraries/Attestation.sol": { - "ast": { - "absolutePath": "contracts/libraries/Attestation.sol", - "exportedSymbols": { - "Attestation": [ - 11920 - ] - }, - "id": 11921, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 11676, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:55" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Attestation", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 11677, - "nodeType": "StructuredDocumentation", - "src": "70:81:55", - "text": " @title Attestation library\n @notice A library to handle Attestation." - }, - "fullyImplemented": true, - "id": 11920, - "linearizedBaseContracts": [ - 11920 - ], - "name": "Attestation", - "nameLocation": "160:11:55", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Attestation.Receipt", - "documentation": { - "id": 11678, - "nodeType": "StructuredDocumentation", - "src": "178:81:55", - "text": "@notice Receipt content sent from the service provider in response to request" - }, - "id": 11685, - "members": [ - { - "constant": false, - "id": 11680, - "mutability": "mutable", - "name": "requestCID", - "nameLocation": "297:10:55", - "nodeType": "VariableDeclaration", - "scope": 11685, - "src": "289:18:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11679, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "289:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11682, - "mutability": "mutable", - "name": "responseCID", - "nameLocation": "325:11:55", - "nodeType": "VariableDeclaration", - "scope": 11685, - "src": "317:19:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11681, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "317:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11684, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "354:20:55", - "nodeType": "VariableDeclaration", - "scope": 11685, - "src": "346:28:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11683, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "346:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "name": "Receipt", - "nameLocation": "271:7:55", - "nodeType": "StructDefinition", - "scope": 11920, - "src": "264:117:55", - "visibility": "public" - }, - { - "canonicalName": "Attestation.State", - "documentation": { - "id": 11686, - "nodeType": "StructuredDocumentation", - "src": "387:79:55", - "text": "@notice Attestation sent from the service provider in response to a request" - }, - "id": 11699, - "members": [ - { - "constant": false, - "id": 11688, - "mutability": "mutable", - "name": "requestCID", - "nameLocation": "502:10:55", - "nodeType": "VariableDeclaration", - "scope": 11699, - "src": "494:18:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11687, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "494:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11690, - "mutability": "mutable", - "name": "responseCID", - "nameLocation": "530:11:55", - "nodeType": "VariableDeclaration", - "scope": 11699, - "src": "522:19:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11689, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "522:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11692, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "559:20:55", - "nodeType": "VariableDeclaration", - "scope": 11699, - "src": "551:28:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11691, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "551:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11694, - "mutability": "mutable", - "name": "r", - "nameLocation": "597:1:55", - "nodeType": "VariableDeclaration", - "scope": 11699, - "src": "589:9:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11693, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "589:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11696, - "mutability": "mutable", - "name": "s", - "nameLocation": "616:1:55", - "nodeType": "VariableDeclaration", - "scope": 11699, - "src": "608:9:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11695, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "608:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11698, - "mutability": "mutable", - "name": "v", - "nameLocation": "633:1:55", - "nodeType": "VariableDeclaration", - "scope": 11699, - "src": "627:7:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 11697, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "627:5:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "name": "State", - "nameLocation": "478:5:55", - "nodeType": "StructDefinition", - "scope": 11920, - "src": "471:170:55", - "visibility": "public" - }, - { - "constant": true, - "documentation": { - "id": 11700, - "nodeType": "StructuredDocumentation", - "src": "647:76:55", - "text": "@notice Attestation size is the sum of the receipt (96) + signature (65)" - }, - "id": 11703, - "mutability": "constant", - "name": "RECEIPT_SIZE_BYTES", - "nameLocation": "753:18:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "728:48:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11701, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "728:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "3936", - "id": 11702, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "774:2:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_96_by_1", - "typeString": "int_const 96" - }, - "value": "96" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11706, - "mutability": "constant", - "name": "SIG_R_LENGTH", - "nameLocation": "808:12:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "783:42:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11704, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "783:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "3332", - "id": 11705, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "823:2:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11709, - "mutability": "constant", - "name": "SIG_S_LENGTH", - "nameLocation": "856:12:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "831:42:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11707, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "831:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "3332", - "id": 11708, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "871:2:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11712, - "mutability": "constant", - "name": "SIG_V_LENGTH", - "nameLocation": "904:12:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "879:41:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11710, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "879:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31", - "id": 11711, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "919:1:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11715, - "mutability": "constant", - "name": "SIG_R_OFFSET", - "nameLocation": "951:12:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "926:58:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11713, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "926:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "id": 11714, - "name": "RECEIPT_SIZE_BYTES", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11703, - "src": "966:18:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11720, - "mutability": "constant", - "name": "SIG_S_OFFSET", - "nameLocation": "1015:12:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "990:73:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11716, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "990:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11719, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "id": 11717, - "name": "RECEIPT_SIZE_BYTES", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11703, - "src": "1030:18:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11718, - "name": "SIG_R_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11706, - "src": "1051:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1030:33:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11727, - "mutability": "constant", - "name": "SIG_V_OFFSET", - "nameLocation": "1094:12:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "1069:88:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11721, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1069:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11726, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11724, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "id": 11722, - "name": "RECEIPT_SIZE_BYTES", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11703, - "src": "1109:18:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11723, - "name": "SIG_R_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11706, - "src": "1130:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1109:33:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11725, - "name": "SIG_S_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11709, - "src": "1145:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1109:48:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11734, - "mutability": "constant", - "name": "SIG_SIZE_BYTES", - "nameLocation": "1188:14:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "1163:84:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11728, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1163:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11733, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11731, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "id": 11729, - "name": "SIG_R_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11706, - "src": "1205:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11730, - "name": "SIG_S_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11709, - "src": "1220:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1205:27:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11732, - "name": "SIG_V_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11712, - "src": "1235:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1205:42:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11739, - "mutability": "constant", - "name": "ATTESTATION_SIZE_BYTES", - "nameLocation": "1279:22:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "1254:85:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11735, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1254:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11738, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "id": 11736, - "name": "RECEIPT_SIZE_BYTES", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11703, - "src": "1304:18:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11737, - "name": "SIG_SIZE_BYTES", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11734, - "src": "1325:14:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1304:35:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11742, - "mutability": "constant", - "name": "UINT8_BYTE_LENGTH", - "nameLocation": "1371:17:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "1346:46:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11740, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1346:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31", - "id": 11741, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1391:1:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 11745, - "mutability": "constant", - "name": "BYTES32_BYTE_LENGTH", - "nameLocation": "1423:19:55", - "nodeType": "VariableDeclaration", - "scope": 11920, - "src": "1398:49:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11743, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1398:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "3332", - "id": 11744, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1445:2:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "visibility": "private" - }, - { - "errorSelector": "3fdf3423", - "id": 11751, - "name": "AttestationInvalidBytesLength", - "nameLocation": "1460:29:55", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11750, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11747, - "mutability": "mutable", - "name": "length", - "nameLocation": "1498:6:55", - "nodeType": "VariableDeclaration", - "scope": 11751, - "src": "1490:14:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11746, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1490:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11749, - "mutability": "mutable", - "name": "expectedLength", - "nameLocation": "1514:14:55", - "nodeType": "VariableDeclaration", - "scope": 11751, - "src": "1506:22:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11748, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1506:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1489:40:55" - }, - "src": "1454:76:55" - }, - { - "body": { - "id": 11782, - "nodeType": "Block", - "src": "1960:236:55", - "statements": [ - { - "expression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 11779, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 11773, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 11767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11763, - "name": "_attestation1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11755, - "src": "1978:13:55", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 11764, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1992:10:55", - "memberName": "requestCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11688, - "src": "1978:24:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 11765, - "name": "_attestation2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11758, - "src": "2006:13:55", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 11766, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2020:10:55", - "memberName": "requestCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11688, - "src": "2006:24:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "1978:52:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 11772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11768, - "name": "_attestation1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11755, - "src": "2046:13:55", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 11769, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2060:20:55", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11692, - "src": "2046:34:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 11770, - "name": "_attestation2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11758, - "src": "2084:13:55", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 11771, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2098:20:55", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11692, - "src": "2084:34:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "2046:72:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1978:140:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 11778, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11774, - "name": "_attestation1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11755, - "src": "2134:13:55", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 11775, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2148:11:55", - "memberName": "responseCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11690, - "src": "2134:25:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "id": 11776, - "name": "_attestation2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11758, - "src": "2163:13:55", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 11777, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2177:11:55", - "memberName": "responseCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11690, - "src": "2163:25:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "2134:54:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1978:210:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 11780, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1977:212:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 11762, - "id": 11781, - "nodeType": "Return", - "src": "1970:219:55" - } - ] - }, - "documentation": { - "id": 11752, - "nodeType": "StructuredDocumentation", - "src": "1536:264:55", - "text": " @dev Returns if two attestations are conflicting.\n Everything must match except for the responseId.\n @param _attestation1 Attestation\n @param _attestation2 Attestation\n @return True if the two attestations are conflicting" - }, - "id": 11783, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "areConflicting", - "nameLocation": "1814:14:55", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11759, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11755, - "mutability": "mutable", - "name": "_attestation1", - "nameLocation": "1863:13:55", - "nodeType": "VariableDeclaration", - "scope": 11783, - "src": "1838:38:55", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 11754, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11753, - "name": "Attestation.State", - "nameLocations": [ - "1838:11:55", - "1850:5:55" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "1838:17:55" - }, - "referencedDeclaration": 11699, - "src": "1838:17:55", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11758, - "mutability": "mutable", - "name": "_attestation2", - "nameLocation": "1911:13:55", - "nodeType": "VariableDeclaration", - "scope": 11783, - "src": "1886:38:55", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 11757, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11756, - "name": "Attestation.State", - "nameLocations": [ - "1886:11:55", - "1898:5:55" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "1886:17:55" - }, - "referencedDeclaration": 11699, - "src": "1886:17:55", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - } - ], - "src": "1828:102:55" - }, - "returnParameters": { - "id": 11762, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11761, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11783, - "src": "1954:4:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11760, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1954:4:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1953:6:55" - }, - "scope": 11920, - "src": "1805:391:55", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11852, - "nodeType": "Block", - "src": "2392:748:55", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11796, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11793, - "name": "_data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11786, - "src": "2464:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 11794, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2470:6:55", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2464:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 11795, - "name": "ATTESTATION_SIZE_BYTES", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11739, - "src": "2480:22:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2464:38:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "expression": { - "id": 11798, - "name": "_data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11786, - "src": "2546:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 11799, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2552:6:55", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2546:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 11800, - "name": "ATTESTATION_SIZE_BYTES", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11739, - "src": "2560:22:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11797, - "name": "AttestationInvalidBytesLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11751, - "src": "2516:29:55", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 11801, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2516:67:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11792, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2443:7:55", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11802, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2443:150:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11803, - "nodeType": "ExpressionStatement", - "src": "2443:150:55" - }, - { - "assignments": [ - 11805, - 11807, - 11809 - ], - "declarations": [ - { - "constant": false, - "id": 11805, - "mutability": "mutable", - "name": "requestCID", - "nameLocation": "2639:10:55", - "nodeType": "VariableDeclaration", - "scope": 11852, - "src": "2631:18:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11804, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2631:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11807, - "mutability": "mutable", - "name": "responseCID", - "nameLocation": "2659:11:55", - "nodeType": "VariableDeclaration", - "scope": 11852, - "src": "2651:19:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11806, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2651:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11809, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "2680:20:55", - "nodeType": "VariableDeclaration", - "scope": 11852, - "src": "2672:28:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11808, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2672:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 11821, - "initialValue": { - "arguments": [ - { - "id": 11812, - "name": "_data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11786, - "src": "2728:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "components": [ - { - "id": 11814, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2748:7:55", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 11813, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2748:7:55", - "typeDescriptions": {} - } - }, - { - "id": 11816, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2757:7:55", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 11815, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2757:7:55", - "typeDescriptions": {} - } - }, - { - "id": 11818, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2766:7:55", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 11817, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2766:7:55", - "typeDescriptions": {} - } - } - ], - "id": 11819, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2747:27:55", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$", - "typeString": "tuple(type(bytes32),type(bytes32),type(bytes32))" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$", - "typeString": "tuple(type(bytes32),type(bytes32),type(bytes32))" - } - ], - "expression": { - "id": 11810, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "2704:3:55", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 11811, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2708:6:55", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "2704:10:55", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 11820, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2704:80:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$_t_bytes32_$", - "typeString": "tuple(bytes32,bytes32,bytes32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2630:154:55" - }, - { - "assignments": [ - 11823 - ], - "declarations": [ - { - "constant": false, - "id": 11823, - "mutability": "mutable", - "name": "r", - "nameLocation": "2917:1:55", - "nodeType": "VariableDeclaration", - "scope": 11852, - "src": "2909:9:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11822, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2909:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 11828, - "initialValue": { - "arguments": [ - { - "id": 11825, - "name": "_data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11786, - "src": "2932:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 11826, - "name": "SIG_R_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11715, - "src": "2939:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11824, - "name": "_toBytes32", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11919, - "src": "2921:10:55", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$", - "typeString": "function (bytes memory,uint256) pure returns (bytes32)" - } - }, - "id": 11827, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2921:31:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2909:43:55" - }, - { - "assignments": [ - 11830 - ], - "declarations": [ - { - "constant": false, - "id": 11830, - "mutability": "mutable", - "name": "s", - "nameLocation": "2970:1:55", - "nodeType": "VariableDeclaration", - "scope": 11852, - "src": "2962:9:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11829, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2962:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 11835, - "initialValue": { - "arguments": [ - { - "id": 11832, - "name": "_data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11786, - "src": "2985:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 11833, - "name": "SIG_S_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11720, - "src": "2992:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11831, - "name": "_toBytes32", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11919, - "src": "2974:10:55", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$", - "typeString": "function (bytes memory,uint256) pure returns (bytes32)" - } - }, - "id": 11834, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2974:31:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2962:43:55" - }, - { - "assignments": [ - 11837 - ], - "declarations": [ - { - "constant": false, - "id": 11837, - "mutability": "mutable", - "name": "v", - "nameLocation": "3021:1:55", - "nodeType": "VariableDeclaration", - "scope": 11852, - "src": "3015:7:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 11836, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3015:5:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "id": 11842, - "initialValue": { - "arguments": [ - { - "id": 11839, - "name": "_data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11786, - "src": "3034:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 11840, - "name": "SIG_V_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11727, - "src": "3041:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11838, - "name": "_toUint8", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11886, - "src": "3025:8:55", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$", - "typeString": "function (bytes memory,uint256) pure returns (uint8)" - } - }, - "id": 11841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3025:29:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3015:39:55" - }, - { - "expression": { - "arguments": [ - { - "id": 11844, - "name": "requestCID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11805, - "src": "3078:10:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 11845, - "name": "responseCID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11807, - "src": "3090:11:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 11846, - "name": "subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11809, - "src": "3103:20:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 11847, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11823, - "src": "3125:1:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 11848, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11830, - "src": "3128:1:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 11849, - "name": "v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11837, - "src": "3131:1:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 11843, - "name": "State", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11699, - "src": "3072:5:55", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_State_$11699_storage_ptr_$", - "typeString": "type(struct Attestation.State storage pointer)" - } - }, - "id": 11850, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3072:61:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "functionReturnParameters": 11791, - "id": 11851, - "nodeType": "Return", - "src": "3065:68:55" - } - ] - }, - "documentation": { - "id": 11784, - "nodeType": "StructuredDocumentation", - "src": "2202:113:55", - "text": " @dev Parse the bytes attestation into a struct from `_data`.\n @return Attestation struct" - }, - "id": 11853, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "parse", - "nameLocation": "2329:5:55", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11787, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11786, - "mutability": "mutable", - "name": "_data", - "nameLocation": "2348:5:55", - "nodeType": "VariableDeclaration", - "scope": 11853, - "src": "2335:18:55", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 11785, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2335:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2334:20:55" - }, - "returnParameters": { - "id": 11791, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11790, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11853, - "src": "2378:12:55", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 11789, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11788, - "name": "State", - "nameLocations": [ - "2378:5:55" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "2378:5:55" - }, - "referencedDeclaration": 11699, - "src": "2378:5:55", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - } - ], - "src": "2377:14:55" - }, - "scope": 11920, - "src": "2320:820:55", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 11885, - "nodeType": "Block", - "src": "3342:584:55", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11869, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11864, - "name": "_bytes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11856, - "src": "3373:6:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 11865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3380:6:55", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3373:13:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11868, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 11866, - "name": "_start", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11858, - "src": "3390:6:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11867, - "name": "UINT8_BYTE_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11742, - "src": "3399:17:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3390:26:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3373:43:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "expression": { - "id": 11871, - "name": "_bytes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11856, - "src": "3460:6:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 11872, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3467:6:55", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3460:13:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11875, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 11873, - "name": "_start", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11858, - "src": "3475:6:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11874, - "name": "UINT8_BYTE_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11742, - "src": "3484:17:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3475:26:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11870, - "name": "AttestationInvalidBytesLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11751, - "src": "3430:29:55", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 11876, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3430:72:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11863, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3352:7:55", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11877, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3352:160:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11878, - "nodeType": "ExpressionStatement", - "src": "3352:160:55" - }, - { - "assignments": [ - 11880 - ], - "declarations": [ - { - "constant": false, - "id": 11880, - "mutability": "mutable", - "name": "tempUint", - "nameLocation": "3528:8:55", - "nodeType": "VariableDeclaration", - "scope": 11885, - "src": "3522:14:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 11879, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3522:5:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "id": 11881, - "nodeType": "VariableDeclarationStatement", - "src": "3522:14:55" - }, - { - "AST": { - "nativeSrc": "3612:282:55", - "nodeType": "YulBlock", - "src": "3612:282:55", - "statements": [ - { - "nativeSrc": "3836:48:55", - "nodeType": "YulAssignment", - "src": "3836:48:55", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_bytes", - "nativeSrc": "3862:6:55", - "nodeType": "YulIdentifier", - "src": "3862:6:55" - }, - { - "kind": "number", - "nativeSrc": "3870:3:55", - "nodeType": "YulLiteral", - "src": "3870:3:55", - "type": "", - "value": "0x1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3858:3:55", - "nodeType": "YulIdentifier", - "src": "3858:3:55" - }, - "nativeSrc": "3858:16:55", - "nodeType": "YulFunctionCall", - "src": "3858:16:55" - }, - { - "name": "_start", - "nativeSrc": "3876:6:55", - "nodeType": "YulIdentifier", - "src": "3876:6:55" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3854:3:55", - "nodeType": "YulIdentifier", - "src": "3854:3:55" - }, - "nativeSrc": "3854:29:55", - "nodeType": "YulFunctionCall", - "src": "3854:29:55" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "3848:5:55", - "nodeType": "YulIdentifier", - "src": "3848:5:55" - }, - "nativeSrc": "3848:36:55", - "nodeType": "YulFunctionCall", - "src": "3848:36:55" - }, - "variableNames": [ - { - "name": "tempUint", - "nativeSrc": "3836:8:55", - "nodeType": "YulIdentifier", - "src": "3836:8:55" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 11856, - "isOffset": false, - "isSlot": false, - "src": "3862:6:55", - "valueSize": 1 - }, - { - "declaration": 11858, - "isOffset": false, - "isSlot": false, - "src": "3876:6:55", - "valueSize": 1 - }, - { - "declaration": 11880, - "isOffset": false, - "isSlot": false, - "src": "3836:8:55", - "valueSize": 1 - } - ], - "id": 11882, - "nodeType": "InlineAssembly", - "src": "3603:291:55" - }, - { - "expression": { - "id": 11883, - "name": "tempUint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11880, - "src": "3911:8:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "functionReturnParameters": 11862, - "id": 11884, - "nodeType": "Return", - "src": "3904:15:55" - } - ] - }, - "documentation": { - "id": 11854, - "nodeType": "StructuredDocumentation", - "src": "3146:107:55", - "text": " @dev Parse a uint8 from `_bytes` starting at offset `_start`.\n @return uint8 value" - }, - "id": 11886, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_toUint8", - "nameLocation": "3267:8:55", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11859, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11856, - "mutability": "mutable", - "name": "_bytes", - "nameLocation": "3289:6:55", - "nodeType": "VariableDeclaration", - "scope": 11886, - "src": "3276:19:55", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 11855, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3276:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11858, - "mutability": "mutable", - "name": "_start", - "nameLocation": "3305:6:55", - "nodeType": "VariableDeclaration", - "scope": 11886, - "src": "3297:14:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11857, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3297:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3275:37:55" - }, - "returnParameters": { - "id": 11862, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11861, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11886, - "src": "3335:5:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 11860, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3335:5:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "3334:7:55" - }, - "scope": 11920, - "src": "3258:668:55", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 11918, - "nodeType": "Block", - "src": "4136:390:55", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11902, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 11897, - "name": "_bytes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11889, - "src": "4167:6:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 11898, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4174:6:55", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "4167:13:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11901, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 11899, - "name": "_start", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11891, - "src": "4184:6:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11900, - "name": "BYTES32_BYTE_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11745, - "src": "4193:19:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4184:28:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4167:45:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "expression": { - "id": 11904, - "name": "_bytes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11889, - "src": "4256:6:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 11905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4263:6:55", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "4256:13:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 11908, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 11906, - "name": "_start", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11891, - "src": "4271:6:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 11907, - "name": "BYTES32_BYTE_LENGTH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11745, - "src": "4280:19:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4271:28:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 11903, - "name": "AttestationInvalidBytesLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11751, - "src": "4226:29:55", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 11909, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4226:74:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11896, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "4146:7:55", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11910, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4146:164:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11911, - "nodeType": "ExpressionStatement", - "src": "4146:164:55" - }, - { - "assignments": [ - 11913 - ], - "declarations": [ - { - "constant": false, - "id": 11913, - "mutability": "mutable", - "name": "tempBytes32", - "nameLocation": "4328:11:55", - "nodeType": "VariableDeclaration", - "scope": 11918, - "src": "4320:19:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11912, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4320:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 11914, - "nodeType": "VariableDeclarationStatement", - "src": "4320:19:55" - }, - { - "AST": { - "nativeSrc": "4415:76:55", - "nodeType": "YulBlock", - "src": "4415:76:55", - "statements": [ - { - "nativeSrc": "4429:52:55", - "nodeType": "YulAssignment", - "src": "4429:52:55", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_bytes", - "nativeSrc": "4458:6:55", - "nodeType": "YulIdentifier", - "src": "4458:6:55" - }, - { - "kind": "number", - "nativeSrc": "4466:4:55", - "nodeType": "YulLiteral", - "src": "4466:4:55", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4454:3:55", - "nodeType": "YulIdentifier", - "src": "4454:3:55" - }, - "nativeSrc": "4454:17:55", - "nodeType": "YulFunctionCall", - "src": "4454:17:55" - }, - { - "name": "_start", - "nativeSrc": "4473:6:55", - "nodeType": "YulIdentifier", - "src": "4473:6:55" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4450:3:55", - "nodeType": "YulIdentifier", - "src": "4450:3:55" - }, - "nativeSrc": "4450:30:55", - "nodeType": "YulFunctionCall", - "src": "4450:30:55" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "4444:5:55", - "nodeType": "YulIdentifier", - "src": "4444:5:55" - }, - "nativeSrc": "4444:37:55", - "nodeType": "YulFunctionCall", - "src": "4444:37:55" - }, - "variableNames": [ - { - "name": "tempBytes32", - "nativeSrc": "4429:11:55", - "nodeType": "YulIdentifier", - "src": "4429:11:55" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 11889, - "isOffset": false, - "isSlot": false, - "src": "4458:6:55", - "valueSize": 1 - }, - { - "declaration": 11891, - "isOffset": false, - "isSlot": false, - "src": "4473:6:55", - "valueSize": 1 - }, - { - "declaration": 11913, - "isOffset": false, - "isSlot": false, - "src": "4429:11:55", - "valueSize": 1 - } - ], - "id": 11915, - "nodeType": "InlineAssembly", - "src": "4406:85:55" - }, - { - "expression": { - "id": 11916, - "name": "tempBytes32", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11913, - "src": "4508:11:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 11895, - "id": 11917, - "nodeType": "Return", - "src": "4501:18:55" - } - ] - }, - "documentation": { - "id": 11887, - "nodeType": "StructuredDocumentation", - "src": "3932:111:55", - "text": " @dev Parse a bytes32 from `_bytes` starting at offset `_start`.\n @return bytes32 value" - }, - "id": 11919, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_toBytes32", - "nameLocation": "4057:10:55", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11892, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11889, - "mutability": "mutable", - "name": "_bytes", - "nameLocation": "4081:6:55", - "nodeType": "VariableDeclaration", - "scope": 11919, - "src": "4068:19:55", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 11888, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4068:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11891, - "mutability": "mutable", - "name": "_start", - "nameLocation": "4097:6:55", - "nodeType": "VariableDeclaration", - "scope": 11919, - "src": "4089:14:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11890, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4089:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4067:37:55" - }, - "returnParameters": { - "id": 11895, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11894, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11919, - "src": "4127:7:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11893, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4127:7:55", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4126:9:55" - }, - "scope": 11920, - "src": "4048:478:55", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - } - ], - "scope": 11921, - "src": "152:4376:55", - "usedErrors": [ - 11751 - ], - "usedEvents": [] - } - ], - "src": "45:4484:55" - }, - "id": 55 - }, - "contracts/libraries/LegacyAllocation.sol": { - "ast": { - "absolutePath": "contracts/libraries/LegacyAllocation.sol", - "exportedSymbols": { - "LegacyAllocation": [ - 12086 - ] - }, - "id": 12087, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 11922, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:56" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "LegacyAllocation", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 11923, - "nodeType": "StructuredDocumentation", - "src": "70:93:56", - "text": " @title LegacyAllocation library\n @notice A library to handle legacy Allocations." - }, - "fullyImplemented": true, - "id": 12086, - "linearizedBaseContracts": [ - 12086 - ], - "name": "LegacyAllocation", - "nameLocation": "172:16:56", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 11927, - "libraryName": { - "id": 11924, - "name": "LegacyAllocation", - "nameLocations": [ - "201:16:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12086, - "src": "201:16:56" - }, - "nodeType": "UsingForDirective", - "src": "195:33:56", - "typeName": { - "id": 11926, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11925, - "name": "State", - "nameLocations": [ - "222:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "222:5:56" - }, - "referencedDeclaration": 11933, - "src": "222:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - } - }, - { - "canonicalName": "LegacyAllocation.State", - "documentation": { - "id": 11928, - "nodeType": "StructuredDocumentation", - "src": "234:307:56", - "text": " @notice Legacy allocation details\n @dev Note that we are only storing the indexer and subgraphDeploymentId. The main point of tracking legacy allocations\n is to prevent them from being re used on the Subgraph Service. We don't need to store the rest of the allocation details." - }, - "id": 11933, - "members": [ - { - "constant": false, - "id": 11930, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "577:7:56", - "nodeType": "VariableDeclaration", - "scope": 11933, - "src": "569:15:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11929, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "569:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11932, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "602:20:56", - "nodeType": "VariableDeclaration", - "scope": 11933, - "src": "594:28:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11931, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "594:7:56", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "name": "State", - "nameLocation": "553:5:56", - "nodeType": "StructDefinition", - "scope": 12086, - "src": "546:83:56", - "visibility": "public" - }, - { - "documentation": { - "id": 11934, - "nodeType": "StructuredDocumentation", - "src": "635:139:56", - "text": " @notice Thrown when attempting to migrate an allocation with an existing id\n @param allocationId The allocation id" - }, - "errorSelector": "81736271", - "id": 11938, - "name": "LegacyAllocationExists", - "nameLocation": "785:22:56", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11937, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11936, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "816:12:56", - "nodeType": "VariableDeclaration", - "scope": 11938, - "src": "808:20:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11935, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "808:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "807:22:56" - }, - "src": "779:51:56" - }, - { - "documentation": { - "id": 11939, - "nodeType": "StructuredDocumentation", - "src": "836:123:56", - "text": " @notice Thrown when trying to get a non-existent allocation\n @param allocationId The allocation id" - }, - "errorSelector": "40e1fd4a", - "id": 11943, - "name": "LegacyAllocationDoesNotExist", - "nameLocation": "970:28:56", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11942, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11941, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "1007:12:56", - "nodeType": "VariableDeclaration", - "scope": 11943, - "src": "999:20:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11940, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "999:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "998:22:56" - }, - "src": "964:57:56" - }, - { - "documentation": { - "id": 11944, - "nodeType": "StructuredDocumentation", - "src": "1027:146:56", - "text": " @notice Thrown when trying to migrate an allocation that has already been migrated\n @param allocationId The allocation id" - }, - "errorSelector": "2d3e5fb9", - "id": 11948, - "name": "LegacyAllocationAlreadyMigrated", - "nameLocation": "1184:31:56", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11947, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11946, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "1224:12:56", - "nodeType": "VariableDeclaration", - "scope": 11948, - "src": "1216:20:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11945, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1216:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1215:22:56" - }, - "src": "1178:60:56" - }, - { - "body": { - "id": 11989, - "nodeType": "Block", - "src": "1904:250:56", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 11969, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1922:28:56", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "baseExpression": { - "id": 11964, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11954, - "src": "1923:4:56", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - } - }, - "id": 11966, - "indexExpression": { - "id": 11965, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11958, - "src": "1928:12:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1923:18:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage", - "typeString": "struct LegacyAllocation.State storage ref" - } - }, - "id": 11967, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1942:6:56", - "memberName": "exists", - "nodeType": "MemberAccess", - "referencedDeclaration": 12052, - "src": "1923:25:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11933_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11933_memory_ptr_$", - "typeString": "function (struct LegacyAllocation.State memory) pure returns (bool)" - } - }, - "id": 11968, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1923:27:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 11971, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11958, - "src": "1984:12:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 11970, - "name": "LegacyAllocationAlreadyMigrated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11948, - "src": "1952:31:56", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 11972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1952:45:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 11963, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1914:7:56", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 11973, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1914:84:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 11974, - "nodeType": "ExpressionStatement", - "src": "1914:84:56" - }, - { - "assignments": [ - 11977 - ], - "declarations": [ - { - "constant": false, - "id": 11977, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "2022:10:56", - "nodeType": "VariableDeclaration", - "scope": 11989, - "src": "2009:23:56", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State" - }, - "typeName": { - "id": 11976, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11975, - "name": "State", - "nameLocations": [ - "2009:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "2009:5:56" - }, - "referencedDeclaration": 11933, - "src": "2009:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 11982, - "initialValue": { - "arguments": [ - { - "id": 11979, - "name": "indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11956, - "src": "2052:7:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 11980, - "name": "subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11960, - "src": "2083:20:56", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 11978, - "name": "State", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11933, - "src": "2035:5:56", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_State_$11933_storage_ptr_$", - "typeString": "type(struct LegacyAllocation.State storage pointer)" - } - }, - "id": 11981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [ - "2043:7:56", - "2061:20:56" - ], - "names": [ - "indexer", - "subgraphDeploymentId" - ], - "nodeType": "FunctionCall", - "src": "2035:71:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2009:97:56" - }, - { - "expression": { - "id": 11987, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 11983, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11954, - "src": "2116:4:56", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - } - }, - "id": 11985, - "indexExpression": { - "id": 11984, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11958, - "src": "2121:12:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2116:18:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage", - "typeString": "struct LegacyAllocation.State storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 11986, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11977, - "src": "2137:10:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State memory" - } - }, - "src": "2116:31:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage", - "typeString": "struct LegacyAllocation.State storage ref" - } - }, - "id": 11988, - "nodeType": "ExpressionStatement", - "src": "2116:31:56" - } - ] - }, - "documentation": { - "id": 11949, - "nodeType": "StructuredDocumentation", - "src": "1244:482:56", - "text": " @notice Migrate a legacy allocation\n @dev Requirements:\n - The allocation must not have been previously migrated\n @param self The legacy allocation list mapping\n @param indexer The indexer that owns the allocation\n @param allocationId The allocation id\n @param subgraphDeploymentId The subgraph deployment id the allocation is for\n @custom:error LegacyAllocationAlreadyMigrated if the allocation has already been migrated" - }, - "id": 11990, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "migrate", - "nameLocation": "1740:7:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11961, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11954, - "mutability": "mutable", - "name": "self", - "nameLocation": "1791:4:56", - "nodeType": "VariableDeclaration", - "scope": 11990, - "src": "1757:38:56", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "typeName": { - "id": 11953, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 11950, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1765:7:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1757:25:56", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 11952, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11951, - "name": "State", - "nameLocations": [ - "1776:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "1776:5:56" - }, - "referencedDeclaration": 11933, - "src": "1776:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11956, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "1813:7:56", - "nodeType": "VariableDeclaration", - "scope": 11990, - "src": "1805:15:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11955, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1805:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11958, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "1838:12:56", - "nodeType": "VariableDeclaration", - "scope": 11990, - "src": "1830:20:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11957, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1830:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11960, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "1868:20:56", - "nodeType": "VariableDeclaration", - "scope": 11990, - "src": "1860:28:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 11959, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1860:7:56", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1747:147:56" - }, - "returnParameters": { - "id": 11962, - "nodeType": "ParameterList", - "parameters": [], - "src": "1904:0:56" - }, - "scope": 12086, - "src": "1731:423:56", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12009, - "nodeType": "Block", - "src": "2426:48:56", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 12005, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11996, - "src": "2448:4:56", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - } - }, - { - "id": 12006, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11998, - "src": "2454:12:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 12004, - "name": "_get", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12085, - "src": "2443:4:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$_t_address_$returns$_t_struct$_State_$11933_storage_ptr_$", - "typeString": "function (mapping(address => struct LegacyAllocation.State storage ref),address) view returns (struct LegacyAllocation.State storage pointer)" - } - }, - "id": 12007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2443:24:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State storage pointer" - } - }, - "functionReturnParameters": 12003, - "id": 12008, - "nodeType": "Return", - "src": "2436:31:56" - } - ] - }, - "documentation": { - "id": 11991, - "nodeType": "StructuredDocumentation", - "src": "2160:149:56", - "text": " @notice Get a legacy allocation\n @param self The legacy allocation list mapping\n @param allocationId The allocation id" - }, - "id": 12010, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "get", - "nameLocation": "2323:3:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11999, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11996, - "mutability": "mutable", - "name": "self", - "nameLocation": "2361:4:56", - "nodeType": "VariableDeclaration", - "scope": 12010, - "src": "2327:38:56", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "typeName": { - "id": 11995, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 11992, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2335:7:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "2327:25:56", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 11994, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11993, - "name": "State", - "nameLocations": [ - "2346:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "2346:5:56" - }, - "referencedDeclaration": 11933, - "src": "2346:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11998, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "2375:12:56", - "nodeType": "VariableDeclaration", - "scope": 12010, - "src": "2367:20:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11997, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2367:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2326:62:56" - }, - "returnParameters": { - "id": 12003, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12002, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12010, - "src": "2412:12:56", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State" - }, - "typeName": { - "id": 12001, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12000, - "name": "State", - "nameLocations": [ - "2412:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "2412:5:56" - }, - "referencedDeclaration": 11933, - "src": "2412:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "2411:14:56" - }, - "scope": 12086, - "src": "2314:160:56", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12033, - "nodeType": "Block", - "src": "2747:92:56", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 12027, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2765:28:56", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "baseExpression": { - "id": 12022, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12016, - "src": "2766:4:56", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - } - }, - "id": 12024, - "indexExpression": { - "id": 12023, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12018, - "src": "2771:12:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2766:18:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage", - "typeString": "struct LegacyAllocation.State storage ref" - } - }, - "id": 12025, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2785:6:56", - "memberName": "exists", - "nodeType": "MemberAccess", - "referencedDeclaration": 12052, - "src": "2766:25:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11933_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11933_memory_ptr_$", - "typeString": "function (struct LegacyAllocation.State memory) pure returns (bool)" - } - }, - "id": 12026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2766:27:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 12029, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12018, - "src": "2818:12:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 12028, - "name": "LegacyAllocationExists", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11938, - "src": "2795:22:56", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 12030, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2795:36:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 12021, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2757:7:56", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 12031, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2757:75:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12032, - "nodeType": "ExpressionStatement", - "src": "2757:75:56" - } - ] - }, - "documentation": { - "id": 12011, - "nodeType": "StructuredDocumentation", - "src": "2480:162:56", - "text": " @notice Revert if a legacy allocation exists\n @param self The legacy allocation list mapping\n @param allocationId The allocation id" - }, - "id": 12034, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "revertIfExists", - "nameLocation": "2656:14:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12019, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12016, - "mutability": "mutable", - "name": "self", - "nameLocation": "2705:4:56", - "nodeType": "VariableDeclaration", - "scope": 12034, - "src": "2671:38:56", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "typeName": { - "id": 12015, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 12012, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2679:7:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "2671:25:56", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 12014, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12013, - "name": "State", - "nameLocations": [ - "2690:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "2690:5:56" - }, - "referencedDeclaration": 11933, - "src": "2690:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12018, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "2719:12:56", - "nodeType": "VariableDeclaration", - "scope": 12034, - "src": "2711:20:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12017, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2711:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2670:62:56" - }, - "returnParameters": { - "id": 12020, - "nodeType": "ParameterList", - "parameters": [], - "src": "2747:0:56" - }, - "scope": 12086, - "src": "2647:192:56", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12051, - "nodeType": "Block", - "src": "3017:50:56", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 12049, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 12043, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12038, - "src": "3034:4:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State memory" - } - }, - "id": 12044, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3039:7:56", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11930, - "src": "3034:12:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 12047, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3058:1:56", - "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": 12046, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3050:7:56", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 12045, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3050:7:56", - "typeDescriptions": {} - } - }, - "id": 12048, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3050:10:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3034:26:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 12042, - "id": 12050, - "nodeType": "Return", - "src": "3027:33:56" - } - ] - }, - "documentation": { - "id": 12035, - "nodeType": "StructuredDocumentation", - "src": "2845:103:56", - "text": " @notice Check if a legacy allocation exists\n @param self The legacy allocation" - }, - "id": 12052, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "exists", - "nameLocation": "2962:6:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12039, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12038, - "mutability": "mutable", - "name": "self", - "nameLocation": "2982:4:56", - "nodeType": "VariableDeclaration", - "scope": 12052, - "src": "2969:17:56", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State" - }, - "typeName": { - "id": 12037, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12036, - "name": "State", - "nameLocations": [ - "2969:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "2969:5:56" - }, - "referencedDeclaration": 11933, - "src": "2969:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "2968:19:56" - }, - "returnParameters": { - "id": 12042, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12041, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12052, - "src": "3011:4:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12040, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3011:4:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3010:6:56" - }, - "scope": 12086, - "src": "2953:114:56", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12084, - "nodeType": "Block", - "src": "3340:171:56", - "statements": [ - { - "assignments": [ - 12068 - ], - "declarations": [ - { - "constant": false, - "id": 12068, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "3364:10:56", - "nodeType": "VariableDeclaration", - "scope": 12084, - "src": "3350:24:56", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - }, - "typeName": { - "id": 12067, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12066, - "name": "State", - "nameLocations": [ - "3350:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "3350:5:56" - }, - "referencedDeclaration": 11933, - "src": "3350:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 12072, - "initialValue": { - "baseExpression": { - "id": 12069, - "name": "self", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12058, - "src": "3377:4:56", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - } - }, - "id": 12071, - "indexExpression": { - "id": 12070, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12060, - "src": "3382:12:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3377:18:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage", - "typeString": "struct LegacyAllocation.State storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3350:45:56" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 12074, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12068, - "src": "3413:10:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State storage pointer" - } - }, - "id": 12075, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3424:6:56", - "memberName": "exists", - "nodeType": "MemberAccess", - "referencedDeclaration": 12052, - "src": "3413:17:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11933_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11933_memory_ptr_$", - "typeString": "function (struct LegacyAllocation.State memory) pure returns (bool)" - } - }, - "id": 12076, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3413:19:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 12078, - "name": "allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12060, - "src": "3463:12:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 12077, - "name": "LegacyAllocationDoesNotExist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11943, - "src": "3434:28:56", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 12079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3434:42:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 12073, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3405:7:56", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 12080, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3405:72:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12081, - "nodeType": "ExpressionStatement", - "src": "3405:72:56" - }, - { - "expression": { - "id": 12082, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12068, - "src": "3494:10:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State storage pointer" - } - }, - "functionReturnParameters": 12065, - "id": 12083, - "nodeType": "Return", - "src": "3487:17:56" - } - ] - }, - "documentation": { - "id": 12053, - "nodeType": "StructuredDocumentation", - "src": "3073:149:56", - "text": " @notice Get a legacy allocation\n @param self The legacy allocation list mapping\n @param allocationId The allocation id" - }, - "id": 12085, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_get", - "nameLocation": "3236:4:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12061, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12058, - "mutability": "mutable", - "name": "self", - "nameLocation": "3275:4:56", - "nodeType": "VariableDeclaration", - "scope": 12085, - "src": "3241:38:56", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "typeName": { - "id": 12057, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 12054, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3249:7:56", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "3241:25:56", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 12056, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12055, - "name": "State", - "nameLocations": [ - "3260:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "3260:5:56" - }, - "referencedDeclaration": 11933, - "src": "3260:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12060, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "3289:12:56", - "nodeType": "VariableDeclaration", - "scope": 12085, - "src": "3281:20:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12059, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3281:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3240:62:56" - }, - "returnParameters": { - "id": 12065, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12064, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12085, - "src": "3325:13:56", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - }, - "typeName": { - "id": 12063, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12062, - "name": "State", - "nameLocations": [ - "3325:5:56" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "3325:5:56" - }, - "referencedDeclaration": 11933, - "src": "3325:5:56", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "3324:15:56" - }, - "scope": 12086, - "src": "3227:284:56", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - } - ], - "scope": 12087, - "src": "164:3349:56", - "usedErrors": [ - 11938, - 11943, - 11948 - ], - "usedEvents": [] - } - ], - "src": "45:3469:56" - }, - "id": 56 - }, - "contracts/utilities/AllocationManager.sol": { - "ast": { - "absolutePath": "contracts/utilities/AllocationManager.sol", - "exportedSymbols": { - "Allocation": [ - 11674 - ], - "AllocationManager": [ - 13030 - ], - "AllocationManagerV1Storage": [ - 13072 - ], - "ECDSA": [ - 6730 - ], - "EIP712Upgradeable": [ - 5771 - ], - "GraphDirectory": [ - 4653 - ], - "IGraphPayments": [ - 2211 - ], - "IGraphToken": [ - 518 - ], - "IHorizonStakingTypes": [ - 3796 - ], - "LegacyAllocation": [ - 12086 - ], - "PPMMath": [ - 4262 - ], - "ProvisionTracker": [ - 1555 - ], - "TokenUtils": [ - 600 - ] - }, - "id": 13031, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12088, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:57" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "file": "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol", - "id": 12090, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 2212, - "src": "70:96:57", - "symbolAliases": [ - { - "foreign": { - "id": 12089, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "79:14:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "file": "@graphprotocol/contracts/contracts/token/IGraphToken.sol", - "id": 12092, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 519, - "src": "167:87:57", - "symbolAliases": [ - { - "foreign": { - "id": 12091, - "name": "IGraphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 518, - "src": "176:11:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", - "file": "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol", - "id": 12094, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 3797, - "src": "255:117:57", - "symbolAliases": [ - { - "foreign": { - "id": 12093, - "name": "IHorizonStakingTypes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3796, - "src": "264:20:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", - "file": "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol", - "id": 12096, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 4654, - "src": "374:95:57", - "symbolAliases": [ - { - "foreign": { - "id": 12095, - "name": "GraphDirectory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4653, - "src": "383:14:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/utilities/AllocationManagerStorage.sol", - "file": "./AllocationManagerStorage.sol", - "id": 12098, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 13073, - "src": "470:76:57", - "symbolAliases": [ - { - "foreign": { - "id": 12097, - "name": "AllocationManagerV1Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13072, - "src": "479:26:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", - "file": "@graphprotocol/contracts/contracts/utils/TokenUtils.sol", - "id": 12100, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 601, - "src": "548:85:57", - "symbolAliases": [ - { - "foreign": { - "id": 12099, - "name": "TokenUtils", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 600, - "src": "557:10:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "id": 12102, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 6731, - "src": "634:77:57", - "symbolAliases": [ - { - "foreign": { - "id": 12101, - "name": "ECDSA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6730, - "src": "643:5:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol", - "id": 12104, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 5772, - "src": "712:113:57", - "symbolAliases": [ - { - "foreign": { - "id": 12103, - "name": "EIP712Upgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5771, - "src": "721:17:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/Allocation.sol", - "file": "../libraries/Allocation.sol", - "id": 12106, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 11675, - "src": "826:57:57", - "symbolAliases": [ - { - "foreign": { - "id": 12105, - "name": "Allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11674, - "src": "835:10:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/LegacyAllocation.sol", - "file": "../libraries/LegacyAllocation.sol", - "id": 12108, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 12087, - "src": "884:69:57", - "symbolAliases": [ - { - "foreign": { - "id": 12107, - "name": "LegacyAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12086, - "src": "893:16:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", - "file": "@graphprotocol/horizon/contracts/libraries/PPMMath.sol", - "id": 12110, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 4263, - "src": "954:81:57", - "symbolAliases": [ - { - "foreign": { - "id": 12109, - "name": "PPMMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4262, - "src": "963:7:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol", - "file": "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol", - "id": 12112, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13031, - "sourceUnit": 1556, - "src": "1036:112:57", - "symbolAliases": [ - { - "foreign": { - "id": 12111, - "name": "ProvisionTracker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1555, - "src": "1045:16:57", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 12114, - "name": "EIP712Upgradeable", - "nameLocations": [ - "1446:17:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5771, - "src": "1446:17:57" - }, - "id": 12115, - "nodeType": "InheritanceSpecifier", - "src": "1446:17:57" - }, - { - "baseName": { - "id": 12116, - "name": "GraphDirectory", - "nameLocations": [ - "1465:14:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4653, - "src": "1465:14:57" - }, - "id": 12117, - "nodeType": "InheritanceSpecifier", - "src": "1465:14:57" - }, - { - "baseName": { - "id": 12118, - "name": "AllocationManagerV1Storage", - "nameLocations": [ - "1481:26:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13072, - "src": "1481:26:57" - }, - "id": 12119, - "nodeType": "InheritanceSpecifier", - "src": "1481:26:57" - } - ], - "canonicalName": "AllocationManager", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 12113, - "nodeType": "StructuredDocumentation", - "src": "1150:256:57", - "text": " @title AllocationManager contract\n @notice A helper contract implementing allocation lifecycle management.\n Allows opening, resizing, and closing allocations, as well as collecting indexing rewards by presenting a Proof\n of Indexing (POI)." - }, - "fullyImplemented": true, - "id": 13030, - "linearizedBaseContracts": [ - 13030, - 13072, - 4653, - 5771, - 5796, - 5102 - ], - "name": "AllocationManager", - "nameLocation": "1425:17:57", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 12124, - "libraryName": { - "id": 12120, - "name": "ProvisionTracker", - "nameLocations": [ - "1520:16:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1555, - "src": "1520:16:57" - }, - "nodeType": "UsingForDirective", - "src": "1514:55:57", - "typeName": { - "id": 12123, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 12121, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1549:7:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1541:27:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 12122, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1560:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - { - "global": false, - "id": 12130, - "libraryName": { - "id": 12125, - "name": "Allocation", - "nameLocations": [ - "1580:10:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11674, - "src": "1580:10:57" - }, - "nodeType": "UsingForDirective", - "src": "1574:58:57", - "typeName": { - "id": 12129, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 12126, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1603:7:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1595:36:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 12128, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12127, - "name": "Allocation.State", - "nameLocations": [ - "1614:10:57", - "1625:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "1614:16:57" - }, - "referencedDeclaration": 11307, - "src": "1614:16:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - } - }, - { - "global": false, - "id": 12134, - "libraryName": { - "id": 12131, - "name": "Allocation", - "nameLocations": [ - "1643:10:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11674, - "src": "1643:10:57" - }, - "nodeType": "UsingForDirective", - "src": "1637:38:57", - "typeName": { - "id": 12133, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12132, - "name": "Allocation.State", - "nameLocations": [ - "1658:10:57", - "1669:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "1658:16:57" - }, - "referencedDeclaration": 11307, - "src": "1658:16:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - { - "global": false, - "id": 12140, - "libraryName": { - "id": 12135, - "name": "LegacyAllocation", - "nameLocations": [ - "1686:16:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12086, - "src": "1686:16:57" - }, - "nodeType": "UsingForDirective", - "src": "1680:70:57", - "typeName": { - "id": 12139, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 12136, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1715:7:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1707:42:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 12138, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12137, - "name": "LegacyAllocation.State", - "nameLocations": [ - "1726:16:57", - "1743:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "1726:22:57" - }, - "referencedDeclaration": 11933, - "src": "1726:22:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - } - } - }, - { - "global": false, - "id": 12143, - "libraryName": { - "id": 12141, - "name": "PPMMath", - "nameLocations": [ - "1761:7:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4262, - "src": "1761:7:57" - }, - "nodeType": "UsingForDirective", - "src": "1755:26:57", - "typeName": { - "id": 12142, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1773:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "global": false, - "id": 12147, - "libraryName": { - "id": 12144, - "name": "TokenUtils", - "nameLocations": [ - "1792:10:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 600, - "src": "1792:10:57" - }, - "nodeType": "UsingForDirective", - "src": "1786:33:57", - "typeName": { - "id": 12146, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12145, - "name": "IGraphToken", - "nameLocations": [ - "1807:11:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 518, - "src": "1807:11:57" - }, - "referencedDeclaration": 518, - "src": "1807:11:57", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - } - }, - { - "constant": true, - "documentation": { - "id": 12148, - "nodeType": "StructuredDocumentation", - "src": "1825:44:57", - "text": "@dev EIP712 typehash for allocation proof" - }, - "id": 12153, - "mutability": "constant", - "name": "EIP712_ALLOCATION_PROOF_TYPEHASH", - "nameLocation": "1899:32:57", - "nodeType": "VariableDeclaration", - "scope": 13030, - "src": "1874:136:57", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12149, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1874:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "416c6c6f636174696f6e496450726f6f66286164647265737320696e64657865722c6164647265737320616c6c6f636174696f6e496429", - "id": 12151, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1952:57:57", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f74673", - "typeString": "literal_string \"AllocationIdProof(address indexer,address allocationId)\"" - }, - "value": "AllocationIdProof(address indexer,address allocationId)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f74673", - "typeString": "literal_string \"AllocationIdProof(address indexer,address allocationId)\"" - } - ], - "id": 12150, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "1942:9:57", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 12152, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1942:68:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "private" - }, - { - "anonymous": false, - "documentation": { - "id": 12154, - "nodeType": "StructuredDocumentation", - "src": "2017:294:57", - "text": " @notice Emitted when an indexer creates an allocation\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment\n @param tokens The amount of tokens allocated" - }, - "eventSelector": "3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf2", - "id": 12164, - "name": "AllocationCreated", - "nameLocation": "2322:17:57", - "nodeType": "EventDefinition", - "parameters": { - "id": 12163, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12156, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "2365:7:57", - "nodeType": "VariableDeclaration", - "scope": 12164, - "src": "2349:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12155, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2349:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12158, - "indexed": true, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "2398:12:57", - "nodeType": "VariableDeclaration", - "scope": 12164, - "src": "2382:28:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12157, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2382:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12160, - "indexed": true, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "2436:20:57", - "nodeType": "VariableDeclaration", - "scope": 12164, - "src": "2420:36:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12159, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2420:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12162, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "2474:6:57", - "nodeType": "VariableDeclaration", - "scope": 12164, - "src": "2466:14:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12161, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2466:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2339:147:57" - }, - "src": "2316:171:57" - }, - { - "anonymous": false, - "documentation": { - "id": 12165, - "nodeType": "StructuredDocumentation", - "src": "2493:570:57", - "text": " @notice Emitted when an indexer collects indexing rewards for an allocation\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment\n @param tokensRewards The amount of tokens collected\n @param tokensIndexerRewards The amount of tokens collected for the indexer\n @param tokensDelegationRewards The amount of tokens collected for delegators\n @param poi The POI presented\n @param currentEpoch The current epoch" - }, - "eventSelector": "7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e31", - "id": 12183, - "name": "IndexingRewardsCollected", - "nameLocation": "3074:24:57", - "nodeType": "EventDefinition", - "parameters": { - "id": 12182, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12167, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "3124:7:57", - "nodeType": "VariableDeclaration", - "scope": 12183, - "src": "3108:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12166, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3108:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12169, - "indexed": true, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "3157:12:57", - "nodeType": "VariableDeclaration", - "scope": 12183, - "src": "3141:28:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12168, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3141:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12171, - "indexed": true, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "3195:20:57", - "nodeType": "VariableDeclaration", - "scope": 12183, - "src": "3179:36:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12170, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3179:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12173, - "indexed": false, - "mutability": "mutable", - "name": "tokensRewards", - "nameLocation": "3233:13:57", - "nodeType": "VariableDeclaration", - "scope": 12183, - "src": "3225:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12172, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3225:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12175, - "indexed": false, - "mutability": "mutable", - "name": "tokensIndexerRewards", - "nameLocation": "3264:20:57", - "nodeType": "VariableDeclaration", - "scope": 12183, - "src": "3256:28:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12174, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3256:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12177, - "indexed": false, - "mutability": "mutable", - "name": "tokensDelegationRewards", - "nameLocation": "3302:23:57", - "nodeType": "VariableDeclaration", - "scope": 12183, - "src": "3294:31:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12176, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3294:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12179, - "indexed": false, - "mutability": "mutable", - "name": "poi", - "nameLocation": "3343:3:57", - "nodeType": "VariableDeclaration", - "scope": 12183, - "src": "3335:11:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12178, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3335:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12181, - "indexed": false, - "mutability": "mutable", - "name": "currentEpoch", - "nameLocation": "3364:12:57", - "nodeType": "VariableDeclaration", - "scope": 12183, - "src": "3356:20:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12180, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3356:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3098:284:57" - }, - "src": "3068:315:57" - }, - { - "anonymous": false, - "documentation": { - "id": 12184, - "nodeType": "StructuredDocumentation", - "src": "3389:360:57", - "text": " @notice Emitted when an indexer resizes an allocation\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment\n @param newTokens The new amount of tokens allocated\n @param oldTokens The old amount of tokens allocated" - }, - "eventSelector": "6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f", - "id": 12196, - "name": "AllocationResized", - "nameLocation": "3760:17:57", - "nodeType": "EventDefinition", - "parameters": { - "id": 12195, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12186, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "3803:7:57", - "nodeType": "VariableDeclaration", - "scope": 12196, - "src": "3787:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12185, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3787:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12188, - "indexed": true, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "3836:12:57", - "nodeType": "VariableDeclaration", - "scope": 12196, - "src": "3820:28:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12187, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3820:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12190, - "indexed": true, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "3874:20:57", - "nodeType": "VariableDeclaration", - "scope": 12196, - "src": "3858:36:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12189, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3858:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12192, - "indexed": false, - "mutability": "mutable", - "name": "newTokens", - "nameLocation": "3912:9:57", - "nodeType": "VariableDeclaration", - "scope": 12196, - "src": "3904:17:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12191, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3904:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12194, - "indexed": false, - "mutability": "mutable", - "name": "oldTokens", - "nameLocation": "3939:9:57", - "nodeType": "VariableDeclaration", - "scope": 12196, - "src": "3931:17:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12193, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3931:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3777:177:57" - }, - "src": "3754:201:57" - }, - { - "anonymous": false, - "documentation": { - "id": 12197, - "nodeType": "StructuredDocumentation", - "src": "3961:290:57", - "text": " @dev Emitted when an indexer closes an allocation\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment\n @param tokens The amount of tokens allocated" - }, - "eventSelector": "663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b", - "id": 12207, - "name": "AllocationClosed", - "nameLocation": "4262:16:57", - "nodeType": "EventDefinition", - "parameters": { - "id": 12206, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12199, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "4304:7:57", - "nodeType": "VariableDeclaration", - "scope": 12207, - "src": "4288:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12198, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4288:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12201, - "indexed": true, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "4337:12:57", - "nodeType": "VariableDeclaration", - "scope": 12207, - "src": "4321:28:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12200, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4321:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12203, - "indexed": true, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "4375:20:57", - "nodeType": "VariableDeclaration", - "scope": 12207, - "src": "4359:36:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12202, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4359:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12205, - "indexed": false, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "4413:6:57", - "nodeType": "VariableDeclaration", - "scope": 12207, - "src": "4405:14:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12204, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4405:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4278:147:57" - }, - "src": "4256:170:57" - }, - { - "anonymous": false, - "documentation": { - "id": 12208, - "nodeType": "StructuredDocumentation", - "src": "4432:267:57", - "text": " @notice Emitted when a legacy allocation is migrated into the subgraph service\n @param indexer The address of the indexer\n @param allocationId The id of the allocation\n @param subgraphDeploymentId The id of the subgraph deployment" - }, - "eventSelector": "d54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e19", - "id": 12216, - "name": "LegacyAllocationMigrated", - "nameLocation": "4710:24:57", - "nodeType": "EventDefinition", - "parameters": { - "id": 12215, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12210, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "4760:7:57", - "nodeType": "VariableDeclaration", - "scope": 12216, - "src": "4744:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12209, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4744:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12212, - "indexed": true, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "4793:12:57", - "nodeType": "VariableDeclaration", - "scope": 12216, - "src": "4777:28:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12211, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4777:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12214, - "indexed": true, - "mutability": "mutable", - "name": "subgraphDeploymentId", - "nameLocation": "4831:20:57", - "nodeType": "VariableDeclaration", - "scope": 12216, - "src": "4815:36:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12213, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4815:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4734:123:57" - }, - "src": "4704:154:57" - }, - { - "anonymous": false, - "documentation": { - "id": 12217, - "nodeType": "StructuredDocumentation", - "src": "4864:222:57", - "text": " @notice Emitted when an indexer sets a new indexing rewards destination\n @param indexer The address of the indexer\n @param rewardsDestination The address where indexing rewards should be sent" - }, - "eventSelector": "3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b31", - "id": 12223, - "name": "RewardsDestinationSet", - "nameLocation": "5097:21:57", - "nodeType": "EventDefinition", - "parameters": { - "id": 12222, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12219, - "indexed": true, - "mutability": "mutable", - "name": "indexer", - "nameLocation": "5135:7:57", - "nodeType": "VariableDeclaration", - "scope": 12223, - "src": "5119:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12218, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5119:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12221, - "indexed": true, - "mutability": "mutable", - "name": "rewardsDestination", - "nameLocation": "5160:18:57", - "nodeType": "VariableDeclaration", - "scope": 12223, - "src": "5144:34:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12220, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5144:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5118:61:57" - }, - "src": "5091:89:57" - }, - { - "anonymous": false, - "documentation": { - "id": 12224, - "nodeType": "StructuredDocumentation", - "src": "5186:139:57", - "text": " @notice Emitted when the maximum POI staleness is updated\n @param maxPOIStaleness The max POI staleness in seconds" - }, - "eventSelector": "21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba", - "id": 12228, - "name": "MaxPOIStalenessSet", - "nameLocation": "5336:18:57", - "nodeType": "EventDefinition", - "parameters": { - "id": 12227, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12226, - "indexed": false, - "mutability": "mutable", - "name": "maxPOIStaleness", - "nameLocation": "5363:15:57", - "nodeType": "VariableDeclaration", - "scope": 12228, - "src": "5355:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12225, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5355:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5354:25:57" - }, - "src": "5330:50:57" - }, - { - "documentation": { - "id": 12229, - "nodeType": "StructuredDocumentation", - "src": "5386:248:57", - "text": " @notice Thrown when an allocation proof is invalid\n Both `signer` and `allocationId` should match for a valid proof.\n @param signer The address that signed the proof\n @param allocationId The id of the allocation" - }, - "errorSelector": "8c5b935d", - "id": 12235, - "name": "AllocationManagerInvalidAllocationProof", - "nameLocation": "5645:39:57", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12234, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12231, - "mutability": "mutable", - "name": "signer", - "nameLocation": "5693:6:57", - "nodeType": "VariableDeclaration", - "scope": 12235, - "src": "5685:14:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12230, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5685:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12233, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "5709:12:57", - "nodeType": "VariableDeclaration", - "scope": 12235, - "src": "5701:20:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12232, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5701:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5684:38:57" - }, - "src": "5639:84:57" - }, - { - "documentation": { - "id": 12236, - "nodeType": "StructuredDocumentation", - "src": "5729:99:57", - "text": " @notice Thrown when attempting to create an allocation with a zero allocation id" - }, - "errorSelector": "9ffbebde", - "id": 12238, - "name": "AllocationManagerInvalidZeroAllocationId", - "nameLocation": "5839:40:57", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12237, - "nodeType": "ParameterList", - "parameters": [], - "src": "5879:2:57" - }, - "src": "5833:49:57" - }, - { - "documentation": { - "id": 12239, - "nodeType": "StructuredDocumentation", - "src": "5888:153:57", - "text": " @notice Thrown when attempting to collect indexing rewards on a closed allocationl\n @param allocationId The id of the allocation" - }, - "errorSelector": "1eb5ff95", - "id": 12243, - "name": "AllocationManagerAllocationClosed", - "nameLocation": "6052:33:57", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12242, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12241, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "6094:12:57", - "nodeType": "VariableDeclaration", - "scope": 12243, - "src": "6086:20:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12240, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6086:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6085:22:57" - }, - "src": "6046:62:57" - }, - { - "documentation": { - "id": 12244, - "nodeType": "StructuredDocumentation", - "src": "6114:186:57", - "text": " @notice Thrown when attempting to resize an allocation with the same size\n @param allocationId The id of the allocation\n @param tokens The amount of tokens" - }, - "errorSelector": "f32518cd", - "id": 12250, - "name": "AllocationManagerAllocationSameSize", - "nameLocation": "6311:35:57", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12249, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12246, - "mutability": "mutable", - "name": "allocationId", - "nameLocation": "6355:12:57", - "nodeType": "VariableDeclaration", - "scope": 12250, - "src": "6347:20:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12245, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6347:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12248, - "mutability": "mutable", - "name": "tokens", - "nameLocation": "6377:6:57", - "nodeType": "VariableDeclaration", - "scope": 12250, - "src": "6369:14:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12247, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6369:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6346:38:57" - }, - "src": "6305:80:57" - }, - { - "body": { - "id": 12270, - "nodeType": "Block", - "src": "6626:108:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 12261, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12253, - "src": "6650:5:57", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 12262, - "name": "_version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12255, - "src": "6657:8:57", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 12260, - "name": "__EIP712_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5484, - "src": "6636:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory,string memory)" - } - }, - "id": 12263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6636:30:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12264, - "nodeType": "ExpressionStatement", - "src": "6636:30:57" - }, - { - "expression": { - "arguments": [ - { - "id": 12266, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12253, - "src": "6711:5:57", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 12267, - "name": "_version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12255, - "src": "6718:8:57", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 12265, - "name": "__AllocationManager_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12282, - "src": "6676:34:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory,string memory)" - } - }, - "id": 12268, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6676:51:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12269, - "nodeType": "ExpressionStatement", - "src": "6676:51:57" - } - ] - }, - "documentation": { - "id": 12251, - "nodeType": "StructuredDocumentation", - "src": "6391:72:57", - "text": " @notice Initializes the contract and parent contracts" - }, - "id": 12271, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 12258, - "kind": "modifierInvocation", - "modifierName": { - "id": 12257, - "name": "onlyInitializing", - "nameLocations": [ - "6609:16:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "6609:16:57" - }, - "nodeType": "ModifierInvocation", - "src": "6609:16:57" - } - ], - "name": "__AllocationManager_init", - "nameLocation": "6530:24:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12253, - "mutability": "mutable", - "name": "_name", - "nameLocation": "6569:5:57", - "nodeType": "VariableDeclaration", - "scope": 12271, - "src": "6555:19:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 12252, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6555:6:57", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12255, - "mutability": "mutable", - "name": "_version", - "nameLocation": "6590:8:57", - "nodeType": "VariableDeclaration", - "scope": 12271, - "src": "6576:22:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 12254, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6576:6:57", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "6554:45:57" - }, - "returnParameters": { - "id": 12259, - "nodeType": "ParameterList", - "parameters": [], - "src": "6626:0:57" - }, - "scope": 13030, - "src": "6521:213:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12281, - "nodeType": "Block", - "src": "6986:2:57", - "statements": [] - }, - "documentation": { - "id": 12272, - "nodeType": "StructuredDocumentation", - "src": "6740:51:57", - "text": " @notice Initializes the contract" - }, - "id": 12282, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 12279, - "kind": "modifierInvocation", - "modifierName": { - "id": 12278, - "name": "onlyInitializing", - "nameLocations": [ - "6969:16:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "6969:16:57" - }, - "nodeType": "ModifierInvocation", - "src": "6969:16:57" - } - ], - "name": "__AllocationManager_init_unchained", - "nameLocation": "6858:34:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12277, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12274, - "mutability": "mutable", - "name": "_name", - "nameLocation": "6916:5:57", - "nodeType": "VariableDeclaration", - "scope": 12282, - "src": "6902:19:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 12273, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6902:6:57", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12276, - "mutability": "mutable", - "name": "_version", - "nameLocation": "6945:8:57", - "nodeType": "VariableDeclaration", - "scope": 12282, - "src": "6931:22:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 12275, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6931:6:57", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "6892:67:57" - }, - "returnParameters": { - "id": 12280, - "nodeType": "ParameterList", - "parameters": [], - "src": "6986:0:57" - }, - "scope": 13030, - "src": "6849:139:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12306, - "nodeType": "Block", - "src": "7612:177:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 12295, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12285, - "src": "7648:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12296, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12287, - "src": "7658:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12297, - "name": "_subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12289, - "src": "7673:21:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 12292, - "name": "legacyAllocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13048, - "src": "7622:17:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - } - }, - "id": 12294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7640:7:57", - "memberName": "migrate", - "nodeType": "MemberAccess", - "referencedDeclaration": 11990, - "src": "7622:25:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$_t_address_$_t_address_$_t_bytes32_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$", - "typeString": "function (mapping(address => struct LegacyAllocation.State storage ref),address,address,bytes32)" - } - }, - "id": 12298, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7622:73:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12299, - "nodeType": "ExpressionStatement", - "src": "7622:73:57" - }, - { - "eventCall": { - "arguments": [ - { - "id": 12301, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12285, - "src": "7735:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12302, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12287, - "src": "7745:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12303, - "name": "_subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12289, - "src": "7760:21:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 12300, - "name": "LegacyAllocationMigrated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12216, - "src": "7710:24:57", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$", - "typeString": "function (address,address,bytes32)" - } - }, - "id": 12304, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7710:72:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12305, - "nodeType": "EmitStatement", - "src": "7705:77:57" - } - ] - }, - "documentation": { - "id": 12283, - "nodeType": "StructuredDocumentation", - "src": "6994:498:57", - "text": " @notice Imports a legacy allocation id into the subgraph service\n This is a governor only action that is required to prevent indexers from re-using allocation ids from the\n legacy staking contract. It will revert with LegacyAllocationAlreadyMigrated if the allocation has already been migrated.\n @param _indexer The address of the indexer\n @param _allocationId The id of the allocation\n @param _subgraphDeploymentId The id of the subgraph deployment" - }, - "id": 12307, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_migrateLegacyAllocation", - "nameLocation": "7506:24:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12290, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12285, - "mutability": "mutable", - "name": "_indexer", - "nameLocation": "7539:8:57", - "nodeType": "VariableDeclaration", - "scope": 12307, - "src": "7531:16:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12284, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7531:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12287, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "7557:13:57", - "nodeType": "VariableDeclaration", - "scope": 12307, - "src": "7549:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12286, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7549:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12289, - "mutability": "mutable", - "name": "_subgraphDeploymentId", - "nameLocation": "7580:21:57", - "nodeType": "VariableDeclaration", - "scope": 12307, - "src": "7572:29:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12288, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7572:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7530:72:57" - }, - "returnParameters": { - "id": 12291, - "nodeType": "ParameterList", - "parameters": [], - "src": "7612:0:57" - }, - "scope": 13030, - "src": "7497:292:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12400, - "nodeType": "Block", - "src": "8760:1243:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 12332, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12327, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12312, - "src": "8778:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 12330, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8803:1:57", - "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": 12329, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8795:7:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 12328, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8795:7:57", - "typeDescriptions": {} - } - }, - "id": 12331, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8795:10:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8778:27:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12333, - "name": "AllocationManagerInvalidZeroAllocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12238, - "src": "8807:40:57", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 12334, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8807:42:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 12326, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "8770:7:57", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 12335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8770:80:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12336, - "nodeType": "ExpressionStatement", - "src": "8770:80:57" - }, - { - "expression": { - "arguments": [ - { - "id": 12338, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12310, - "src": "8884:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12339, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12312, - "src": "8894:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12340, - "name": "_allocationProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12318, - "src": "8909:16:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 12337, - "name": "_verifyAllocationProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13029, - "src": "8861:22:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (address,address,bytes memory) view" - } - }, - "id": 12341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8861:65:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12342, - "nodeType": "ExpressionStatement", - "src": "8861:65:57" - }, - { - "expression": { - "arguments": [ - { - "id": 12346, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12312, - "src": "9112:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12343, - "name": "legacyAllocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13048, - "src": "9079:17:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - } - }, - "id": 12345, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9097:14:57", - "memberName": "revertIfExists", - "nodeType": "MemberAccess", - "referencedDeclaration": 12034, - "src": "9079:32:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$_t_address_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$", - "typeString": "function (mapping(address => struct LegacyAllocation.State storage ref),address) view" - } - }, - "id": 12347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9079:47:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12348, - "nodeType": "ExpressionStatement", - "src": "9079:47:57" - }, - { - "assignments": [ - 12353 - ], - "declarations": [ - { - "constant": false, - "id": 12353, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "9160:10:57", - "nodeType": "VariableDeclaration", - "scope": 12400, - "src": "9136:34:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 12352, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12351, - "name": "Allocation.State", - "nameLocations": [ - "9136:10:57", - "9147:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "9136:16:57" - }, - "referencedDeclaration": 11307, - "src": "9136:16:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 12366, - "initialValue": { - "arguments": [ - { - "id": 12356, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12310, - "src": "9205:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12357, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12312, - "src": "9227:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12358, - "name": "_subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12314, - "src": "9254:21:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 12359, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12316, - "src": "9289:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 12363, - "name": "_subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12314, - "src": "9360:21:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12360, - "name": "_graphRewardsManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4590, - "src": "9310:20:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", - "typeString": "function () view returns (contract IRewardsManager)" - } - }, - "id": 12361, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9310:22:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "id": 12362, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9333:26:57", - "memberName": "onSubgraphAllocationUpdate", - "nodeType": "MemberAccess", - "referencedDeclaration": 437, - "src": "9310:49:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", - "typeString": "function (bytes32) external returns (uint256)" - } - }, - "id": 12364, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9310:72:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 12354, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "9173:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12355, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9185:6:57", - "memberName": "create", - "nodeType": "MemberAccess", - "referencedDeclaration": 11382, - "src": "9173:18:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address,address,bytes32,uint256,uint256) returns (struct Allocation.State memory)" - } - }, - "id": 12365, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9173:219:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9136:256:57" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12370, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "9577:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 12371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9577:15:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - { - "id": 12372, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12310, - "src": "9594:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12373, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12316, - "src": "9604:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 12374, - "name": "_delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12320, - "src": "9613:16:57", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "id": 12367, - "name": "allocationProvisionTracker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13053, - "src": "9545:26:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 12369, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9572:4:57", - "memberName": "lock", - "nodeType": "MemberAccess", - "referencedDeclaration": 1480, - "src": "9545:31:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_contract$_IHorizonStaking_$2235_$_t_address_$_t_uint256_$_t_uint32_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "function (mapping(address => uint256),contract IHorizonStaking,address,uint256,uint32)" - } - }, - "id": 12375, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9545:85:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12376, - "nodeType": "ExpressionStatement", - "src": "9545:85:57" - }, - { - "expression": { - "id": 12388, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 12377, - "name": "subgraphAllocatedTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13066, - "src": "9710:23:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 12380, - "indexExpression": { - "expression": { - "id": 12378, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12353, - "src": "9734:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12379, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9745:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "9734:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9710:56:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 12381, - "name": "subgraphAllocatedTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13066, - "src": "9781:23:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 12384, - "indexExpression": { - "expression": { - "id": 12382, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12353, - "src": "9805:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12383, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9816:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "9805:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9781:56:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "expression": { - "id": 12385, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12353, - "src": "9852:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12386, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9863:6:57", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "9852:17:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9781:88:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9710:159:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12389, - "nodeType": "ExpressionStatement", - "src": "9710:159:57" - }, - { - "eventCall": { - "arguments": [ - { - "id": 12391, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12310, - "src": "9903:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12392, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12312, - "src": "9913:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12393, - "name": "_subgraphDeploymentId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12314, - "src": "9928:21:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 12394, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12353, - "src": "9951:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12395, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9962:6:57", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "9951:17:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 12390, - "name": "AllocationCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12164, - "src": "9885:17:57", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$returns$__$", - "typeString": "function (address,address,bytes32,uint256)" - } - }, - "id": 12396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9885:84:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12397, - "nodeType": "EmitStatement", - "src": "9880:89:57" - }, - { - "expression": { - "id": 12398, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12353, - "src": "9986:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "functionReturnParameters": 12325, - "id": 12399, - "nodeType": "Return", - "src": "9979:17:57" - } - ] - }, - "documentation": { - "id": 12308, - "nodeType": "StructuredDocumentation", - "src": "7795:699:57", - "text": " @notice Create an allocation\n @dev The `_allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`\n Requirements:\n - `_allocationId` must not be the zero address\n Emits a {AllocationCreated} event\n @param _indexer The address of the indexer\n @param _allocationId The id of the allocation to be created\n @param _subgraphDeploymentId The subgraph deployment Id\n @param _tokens The amount of tokens to allocate\n @param _allocationProof Signed proof of allocation id address ownership\n @param _delegationRatio The delegation ratio to consider when locking tokens" - }, - "id": 12401, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_allocate", - "nameLocation": "8508:9:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12321, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12310, - "mutability": "mutable", - "name": "_indexer", - "nameLocation": "8535:8:57", - "nodeType": "VariableDeclaration", - "scope": 12401, - "src": "8527:16:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8527:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12312, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "8561:13:57", - "nodeType": "VariableDeclaration", - "scope": 12401, - "src": "8553:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12311, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8553:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12314, - "mutability": "mutable", - "name": "_subgraphDeploymentId", - "nameLocation": "8592:21:57", - "nodeType": "VariableDeclaration", - "scope": 12401, - "src": "8584:29:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12313, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8584:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12316, - "mutability": "mutable", - "name": "_tokens", - "nameLocation": "8631:7:57", - "nodeType": "VariableDeclaration", - "scope": 12401, - "src": "8623:15:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12315, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8623:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12318, - "mutability": "mutable", - "name": "_allocationProof", - "nameLocation": "8661:16:57", - "nodeType": "VariableDeclaration", - "scope": 12401, - "src": "8648:29:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 12317, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8648:5:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12320, - "mutability": "mutable", - "name": "_delegationRatio", - "nameLocation": "8694:16:57", - "nodeType": "VariableDeclaration", - "scope": 12401, - "src": "8687:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 12319, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "8687:6:57", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "8517:199:57" - }, - "returnParameters": { - "id": 12325, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12324, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12401, - "src": "8735:23:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 12323, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12322, - "name": "Allocation.State", - "nameLocations": [ - "8735:10:57", - "8746:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "8735:16:57" - }, - "referencedDeclaration": 11307, - "src": "8735:16:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "8734:25:57" - }, - "scope": 13030, - "src": "8499:1504:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12656, - "nodeType": "Block", - "src": "11103:3179:57", - "statements": [ - { - "assignments": [ - 12417 - ], - "declarations": [ - { - "constant": false, - "id": 12417, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "11137:10:57", - "nodeType": "VariableDeclaration", - "scope": 12656, - "src": "11113:34:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 12416, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12415, - "name": "Allocation.State", - "nameLocations": [ - "11113:10:57", - "11124:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "11113:16:57" - }, - "referencedDeclaration": 11307, - "src": "11113:16:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 12422, - "initialValue": { - "arguments": [ - { - "id": 12420, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12404, - "src": "11166:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12418, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "11150:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11162:3:57", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "11150:15:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 12421, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11150:30:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11113:67:57" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 12424, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "11198:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12425, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11209:6:57", - "memberName": "isOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11621, - "src": "11198:17:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 12426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11198:19:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 12428, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12404, - "src": "11253:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 12427, - "name": "AllocationManagerAllocationClosed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12243, - "src": "11219:33:57", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 12429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11219:48:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 12423, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "11190:7:57", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 12430, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11190:78:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12431, - "nodeType": "ExpressionStatement", - "src": "11190:78:57" - }, - { - "assignments": [ - 12433 - ], - "declarations": [ - { - "constant": false, - "id": 12433, - "mutability": "mutable", - "name": "tokensRewards", - "nameLocation": "11346:13:57", - "nodeType": "VariableDeclaration", - "scope": 12656, - "src": "11338:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12432, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11338:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 12459, - "initialValue": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 12450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 12443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12438, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "11363:36:57", - "subExpression": { - "arguments": [ - { - "id": 12436, - "name": "maxPOIStaleness", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13056, - "src": "11383:15:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 12434, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "11364:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12435, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11375:7:57", - "memberName": "isStale", - "nodeType": "MemberAccess", - "referencedDeclaration": 11587, - "src": "11364:18:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_State_$11307_memory_ptr_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory,uint256) view returns (bool)" - } - }, - "id": 12437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11364:35:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "id": 12442, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "11415:26:57", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 12439, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "11416:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12440, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11427:12:57", - "memberName": "isAltruistic", - "nodeType": "MemberAccess", - "referencedDeclaration": 11640, - "src": "11416:23:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 12441, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11416:25:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "11363:78:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 12449, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12444, - "name": "_poi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12406, - "src": "11457:4:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 12447, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11473:1:57", - "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": 12446, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11465:7:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 12445, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "11465:7:57", - "typeDescriptions": {} - } - }, - "id": 12448, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11465:10:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "11457:18:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "11363:112:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 12451, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "11362:114:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 12457, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11555:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 12458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "11362:194:57", - "trueExpression": { - "arguments": [ - { - "id": 12455, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12404, - "src": "11526:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12452, - "name": "_graphRewardsManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4590, - "src": "11491:20:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", - "typeString": "function () view returns (contract IRewardsManager)" - } - }, - "id": 12453, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11491:22:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "id": 12454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11514:11:57", - "memberName": "takeRewards", - "nodeType": "MemberAccess", - "referencedDeclaration": 423, - "src": "11491:34:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) external returns (uint256)" - } - }, - "id": 12456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11491:49:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11338:218:57" - }, - { - "expression": { - "arguments": [ - { - "id": 12463, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12404, - "src": "11717:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "expression": { - "id": 12467, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "11794:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12468, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11805:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "11794:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12464, - "name": "_graphRewardsManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4590, - "src": "11744:20:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", - "typeString": "function () view returns (contract IRewardsManager)" - } - }, - "id": 12465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11744:22:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "id": 12466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11767:26:57", - "memberName": "onSubgraphAllocationUpdate", - "nodeType": "MemberAccess", - "referencedDeclaration": 437, - "src": "11744:49:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", - "typeString": "function (bytes32) external returns (uint256)" - } - }, - "id": 12469, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11744:82:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 12460, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "11676:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11688:15:57", - "memberName": "snapshotRewards", - "nodeType": "MemberAccess", - "referencedDeclaration": 11459, - "src": "11676:27:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address,uint256)" - } - }, - "id": 12470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11676:160:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12471, - "nodeType": "ExpressionStatement", - "src": "11676:160:57" - }, - { - "expression": { - "arguments": [ - { - "id": 12475, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12404, - "src": "11869:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12472, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "11846:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12474, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11858:10:57", - "memberName": "presentPOI", - "nodeType": "MemberAccess", - "referencedDeclaration": 11420, - "src": "11846:22:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address)" - } - }, - "id": 12476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11846:37:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12477, - "nodeType": "ExpressionStatement", - "src": "11846:37:57" - }, - { - "expression": { - "arguments": [ - { - "id": 12481, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12404, - "src": "11988:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12478, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "11956:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12480, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11968:19:57", - "memberName": "clearPendingRewards", - "nodeType": "MemberAccess", - "referencedDeclaration": 11496, - "src": "11956:31:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address)" - } - }, - "id": 12482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11956:46:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12483, - "nodeType": "ExpressionStatement", - "src": "11956:46:57" - }, - { - "assignments": [ - 12485 - ], - "declarations": [ - { - "constant": false, - "id": 12485, - "mutability": "mutable", - "name": "tokensIndexerRewards", - "nameLocation": "12021:20:57", - "nodeType": "VariableDeclaration", - "scope": 12656, - "src": "12013:28:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12484, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12013:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 12487, - "initialValue": { - "hexValue": "30", - "id": 12486, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12044:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "12013:32:57" - }, - { - "assignments": [ - 12489 - ], - "declarations": [ - { - "constant": false, - "id": 12489, - "mutability": "mutable", - "name": "tokensDelegationRewards", - "nameLocation": "12063:23:57", - "nodeType": "VariableDeclaration", - "scope": 12656, - "src": "12055:31:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12488, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12055:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 12491, - "initialValue": { - "hexValue": "30", - "id": 12490, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12089:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "12055:35:57" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12494, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12492, - "name": "tokensRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12433, - "src": "12104:13:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 12493, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12121:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "12104:18:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 12626, - "nodeType": "IfStatement", - "src": "12100:1612:57", - "trueBody": { - "id": 12625, - "nodeType": "Block", - "src": "12124:1588:57", - "statements": [ - { - "assignments": [ - 12496 - ], - "declarations": [ - { - "constant": false, - "id": 12496, - "mutability": "mutable", - "name": "delegatorCut", - "nameLocation": "12194:12:57", - "nodeType": "VariableDeclaration", - "scope": 12625, - "src": "12186:20:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12495, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12186:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 12510, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 12500, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "12262:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12501, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12273:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "12262:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 12504, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "12306:4:57", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AllocationManager_$13030", - "typeString": "contract AllocationManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AllocationManager_$13030", - "typeString": "contract AllocationManager" - } - ], - "id": 12503, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12298:7:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 12502, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12298:7:57", - "typeDescriptions": {} - } - }, - "id": 12505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12298:13:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "expression": { - "id": 12506, - "name": "IGraphPayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2211, - "src": "12329:14:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IGraphPayments_$2211_$", - "typeString": "type(contract IGraphPayments)" - } - }, - "id": 12507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12344:12:57", - "memberName": "PaymentTypes", - "nodeType": "MemberAccess", - "referencedDeclaration": 2166, - "src": "12329:27:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_PaymentTypes_$2166_$", - "typeString": "type(enum IGraphPayments.PaymentTypes)" - } - }, - "id": 12508, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "12357:15:57", - "memberName": "IndexingRewards", - "nodeType": "MemberAccess", - "referencedDeclaration": 2165, - "src": "12329:43:57", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_enum$_PaymentTypes_$2166", - "typeString": "enum IGraphPayments.PaymentTypes" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12497, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "12209:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 12498, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12209:15:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 12499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12225:19:57", - "memberName": "getDelegationFeeCut", - "nodeType": "MemberAccess", - "referencedDeclaration": 2773, - "src": "12209:35:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_enum$_PaymentTypes_$2166_$returns$_t_uint256_$", - "typeString": "function (address,address,enum IGraphPayments.PaymentTypes) view external returns (uint256)" - } - }, - "id": 12509, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12209:177:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12186:200:57" - }, - { - "assignments": [ - 12515 - ], - "declarations": [ - { - "constant": false, - "id": 12515, - "mutability": "mutable", - "name": "delegationPool", - "nameLocation": "12443:14:57", - "nodeType": "VariableDeclaration", - "scope": 12625, - "src": "12400:57:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", - "typeString": "struct IHorizonStakingTypes.DelegationPool" - }, - "typeName": { - "id": 12514, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12513, - "name": "IHorizonStakingTypes.DelegationPool", - "nameLocations": [ - "12400:20:57", - "12421:14:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3748, - "src": "12400:35:57" - }, - "referencedDeclaration": 3748, - "src": "12400:35:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DelegationPool_$3748_storage_ptr", - "typeString": "struct IHorizonStakingTypes.DelegationPool" - } - }, - "visibility": "internal" - } - ], - "id": 12526, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 12519, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "12511:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12520, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12522:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "12511:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 12523, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "12555:4:57", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AllocationManager_$13030", - "typeString": "contract AllocationManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AllocationManager_$13030", - "typeString": "contract AllocationManager" - } - ], - "id": 12522, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12547:7:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 12521, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12547:7:57", - "typeDescriptions": {} - } - }, - "id": 12524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12547:13:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12516, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "12460:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 12517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12460:15:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 12518, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12476:17:57", - "memberName": "getDelegationPool", - "nodeType": "MemberAccess", - "referencedDeclaration": 2747, - "src": "12460:33:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_struct$_DelegationPool_$3748_memory_ptr_$", - "typeString": "function (address,address) view external returns (struct IHorizonStakingTypes.DelegationPool memory)" - } - }, - "id": 12525, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12460:114:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", - "typeString": "struct IHorizonStakingTypes.DelegationPool memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12400:174:57" - }, - { - "expression": { - "id": 12538, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 12527, - "name": "tokensDelegationRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12489, - "src": "12691:23:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12531, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 12528, - "name": "delegationPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12515, - "src": "12717:14:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_DelegationPool_$3748_memory_ptr", - "typeString": "struct IHorizonStakingTypes.DelegationPool memory" - } - }, - "id": 12529, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12732:6:57", - "memberName": "shares", - "nodeType": "MemberAccess", - "referencedDeclaration": 3741, - "src": "12717:21:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 12530, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12741:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "12717:25:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 12536, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12782:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 12537, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "12717:66:57", - "trueExpression": { - "arguments": [ - { - "id": 12534, - "name": "delegatorCut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12496, - "src": "12766:12:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 12532, - "name": "tokensRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12433, - "src": "12745:13:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12533, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12759:6:57", - "memberName": "mulPPM", - "nodeType": "MemberAccess", - "referencedDeclaration": 4219, - "src": "12745:20:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 12535, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12745:34:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12691:92:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12539, - "nodeType": "ExpressionStatement", - "src": "12691:92:57" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12542, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12540, - "name": "tokensDelegationRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12489, - "src": "12801:23:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 12541, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12827:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "12801:27:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 12567, - "nodeType": "IfStatement", - "src": "12797:251:57", - "trueBody": { - "id": 12566, - "nodeType": "Block", - "src": "12830:218:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12548, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "12878:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 12549, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12878:15:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - ], - "id": 12547, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12870:7:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 12546, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12870:7:57", - "typeDescriptions": {} - } - }, - "id": 12550, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12870:24:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12551, - "name": "tokensDelegationRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12489, - "src": "12896:23:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12543, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "12848:11:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 12544, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12848:13:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 12545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12862:7:57", - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 5861, - "src": "12848:21:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 12552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12848:72:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 12553, - "nodeType": "ExpressionStatement", - "src": "12848:72:57" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 12557, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "12974:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12558, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12985:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "12974:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 12561, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "13002:4:57", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AllocationManager_$13030", - "typeString": "contract AllocationManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AllocationManager_$13030", - "typeString": "contract AllocationManager" - } - ], - "id": 12560, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12994:7:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 12559, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12994:7:57", - "typeDescriptions": {} - } - }, - "id": 12562, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12994:13:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12563, - "name": "tokensDelegationRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12489, - "src": "13009:23:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12554, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "12938:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 12555, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12938:15:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 12556, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12954:19:57", - "memberName": "addToDelegationPool", - "nodeType": "MemberAccess", - "referencedDeclaration": 3525, - "src": "12938:35:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256) external" - } - }, - "id": 12564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12938:95:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12565, - "nodeType": "ExpressionStatement", - "src": "12938:95:57" - } - ] - } - }, - { - "expression": { - "id": 12572, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 12568, - "name": "tokensIndexerRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12485, - "src": "13107:20:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12571, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12569, - "name": "tokensRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12433, - "src": "13130:13:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 12570, - "name": "tokensDelegationRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12489, - "src": "13146:23:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13130:39:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13107:62:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12573, - "nodeType": "ExpressionStatement", - "src": "13107:62:57" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12576, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12574, - "name": "tokensIndexerRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12485, - "src": "13187:20:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 12575, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13210:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "13187:24:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 12624, - "nodeType": "IfStatement", - "src": "13183:519:57", - "trueBody": { - "id": 12623, - "nodeType": "Block", - "src": "13213:489:57", - "statements": [ - { - "assignments": [ - 12578 - ], - "declarations": [ - { - "constant": false, - "id": 12578, - "mutability": "mutable", - "name": "rewardsDestination", - "nameLocation": "13239:18:57", - "nodeType": "VariableDeclaration", - "scope": 12623, - "src": "13231:26:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12577, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13231:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 12583, - "initialValue": { - "baseExpression": { - "id": 12579, - "name": "rewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13061, - "src": "13260:18:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 12582, - "indexExpression": { - "expression": { - "id": 12580, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "13279:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12581, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13290:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "13279:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13260:38:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13231:67:57" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 12589, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12584, - "name": "rewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12578, - "src": "13320:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 12587, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13350:1:57", - "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": 12586, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13342:7:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 12585, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13342:7:57", - "typeDescriptions": {} - } - }, - "id": 12588, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13342:10:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "13320:32:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 12621, - "nodeType": "Block", - "src": "13581:107:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 12617, - "name": "rewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12578, - "src": "13628:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12618, - "name": "tokensIndexerRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12485, - "src": "13648:20:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12614, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "13603:11:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 12615, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13603:13:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 12616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13617:10:57", - "memberName": "pushTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 578, - "src": "13603:24:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IGraphToken_$518_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IGraphToken_$518_$", - "typeString": "function (contract IGraphToken,address,uint256)" - } - }, - "id": 12619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13603:66:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12620, - "nodeType": "ExpressionStatement", - "src": "13603:66:57" - } - ] - }, - "id": 12622, - "nodeType": "IfStatement", - "src": "13316:372:57", - "trueBody": { - "id": 12613, - "nodeType": "Block", - "src": "13354:221:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12595, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "13406:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 12596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13406:15:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - ], - "id": 12594, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13398:7:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 12593, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13398:7:57", - "typeDescriptions": {} - } - }, - "id": 12597, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13398:24:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12598, - "name": "tokensIndexerRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12485, - "src": "13424:20:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12590, - "name": "_graphToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "13376:11:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IGraphToken_$518_$", - "typeString": "function () view returns (contract IGraphToken)" - } - }, - "id": 12591, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13376:13:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IGraphToken_$518", - "typeString": "contract IGraphToken" - } - }, - "id": 12592, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13390:7:57", - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 5861, - "src": "13376:21:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 12599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13376:69:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 12600, - "nodeType": "ExpressionStatement", - "src": "13376:69:57" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 12604, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "13500:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12605, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13511:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "13500:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 12608, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "13528:4:57", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AllocationManager_$13030", - "typeString": "contract AllocationManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AllocationManager_$13030", - "typeString": "contract AllocationManager" - } - ], - "id": 12607, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13520:7:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 12606, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13520:7:57", - "typeDescriptions": {} - } - }, - "id": 12609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13520:13:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12610, - "name": "tokensIndexerRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12485, - "src": "13535:20:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12601, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "13467:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 12602, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13467:15:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - "id": 12603, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13483:16:57", - "memberName": "stakeToProvision", - "nodeType": "MemberAccess", - "referencedDeclaration": 3417, - "src": "13467:32:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256) external" - } - }, - "id": 12611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13467:89:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12612, - "nodeType": "ExpressionStatement", - "src": "13467:89:57" - } - ] - } - } - ] - } - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "id": 12628, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "13765:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12629, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13776:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "13765:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12630, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12404, - "src": "13797:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 12631, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "13824:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12632, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13835:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "13824:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 12633, - "name": "tokensRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12433, - "src": "13869:13:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 12634, - "name": "tokensIndexerRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12485, - "src": "13896:20:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 12635, - "name": "tokensDelegationRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12489, - "src": "13930:23:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 12636, - "name": "_poi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12406, - "src": "13967:4:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12637, - "name": "_graphEpochManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4580, - "src": "13985:18:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IEpochManager_$220_$", - "typeString": "function () view returns (contract IEpochManager)" - } - }, - "id": 12638, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13985:20:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IEpochManager_$220", - "typeString": "contract IEpochManager" - } - }, - "id": 12639, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14006:12:57", - "memberName": "currentEpoch", - "nodeType": "MemberAccess", - "referencedDeclaration": 197, - "src": "13985:33:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 12640, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13985:35:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 12627, - "name": "IndexingRewardsCollected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12183, - "src": "13727:24:57", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$__$", - "typeString": "function (address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)" - } - }, - "id": 12641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13727:303:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12642, - "nodeType": "EmitStatement", - "src": "13722:308:57" - }, - { - "condition": { - "arguments": [ - { - "expression": { - "id": 12644, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12417, - "src": "14150:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12645, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14161:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "14150:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12646, - "name": "_delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12408, - "src": "14170:16:57", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 12643, - "name": "_isOverAllocated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12997, - "src": "14133:16:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint32_$returns$_t_bool_$", - "typeString": "function (address,uint32) view returns (bool)" - } - }, - "id": 12647, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14133:54:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 12653, - "nodeType": "IfStatement", - "src": "14129:116:57", - "trueBody": { - "id": 12652, - "nodeType": "Block", - "src": "14189:56:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 12649, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12404, - "src": "14220:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 12648, - "name": "_closeAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12890, - "src": "14203:16:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 12650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14203:31:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12651, - "nodeType": "ExpressionStatement", - "src": "14203:31:57" - } - ] - } - }, - { - "expression": { - "id": 12654, - "name": "tokensRewards", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12433, - "src": "14262:13:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 12412, - "id": 12655, - "nodeType": "Return", - "src": "14255:20:57" - } - ] - }, - "documentation": { - "id": 12402, - "nodeType": "StructuredDocumentation", - "src": "10009:937:57", - "text": " @notice Present a POI to collect indexing rewards for an allocation\n This function will mint indexing rewards using the {RewardsManager} and distribute them to the indexer and delegators.\n To qualify for indexing rewards:\n - POI must be non-zero\n - POI must not be stale, i.e: older than `maxPOIStaleness`\n - allocation must not be altruistic (allocated tokens = 0)\n Note that indexers are required to periodically (at most every `maxPOIStaleness`) present POIs to collect rewards.\n Rewards will not be issued to stale POIs, which means that indexers are advised to present a zero POI if they are\n unable to present a valid one to prevent being locked out of future rewards.\n Emits a {IndexingRewardsCollected} event.\n @param _allocationId The id of the allocation to collect rewards for\n @param _poi The POI being presented" - }, - "id": 12657, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_collectIndexingRewards", - "nameLocation": "10960:23:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12409, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12404, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "11001:13:57", - "nodeType": "VariableDeclaration", - "scope": 12657, - "src": "10993:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12403, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10993:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12406, - "mutability": "mutable", - "name": "_poi", - "nameLocation": "11032:4:57", - "nodeType": "VariableDeclaration", - "scope": 12657, - "src": "11024:12:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12405, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "11024:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12408, - "mutability": "mutable", - "name": "_delegationRatio", - "nameLocation": "11053:16:57", - "nodeType": "VariableDeclaration", - "scope": 12657, - "src": "11046:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 12407, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "11046:6:57", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "10983:92:57" - }, - "returnParameters": { - "id": 12412, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12411, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12657, - "src": "11094:7:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12410, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11094:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11093:9:57" - }, - "scope": 13030, - "src": "10951:3331:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12822, - "nodeType": "Block", - "src": "15222:1904:57", - "statements": [ - { - "assignments": [ - 12674 - ], - "declarations": [ - { - "constant": false, - "id": 12674, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "15256:10:57", - "nodeType": "VariableDeclaration", - "scope": 12822, - "src": "15232:34:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 12673, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12672, - "name": "Allocation.State", - "nameLocations": [ - "15232:10:57", - "15243:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "15232:16:57" - }, - "referencedDeclaration": 11307, - "src": "15232:16:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 12679, - "initialValue": { - "arguments": [ - { - "id": 12677, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12660, - "src": "15285:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12675, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "15269:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12676, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15281:3:57", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "15269:15:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 12678, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15269:30:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15232:67:57" - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 12681, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "15317:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12682, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15328:6:57", - "memberName": "isOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11621, - "src": "15317:17:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 12683, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15317:19:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 12685, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12660, - "src": "15372:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 12684, - "name": "AllocationManagerAllocationClosed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12243, - "src": "15338:33:57", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 12686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15338:48:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 12680, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "15309:7:57", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 12687, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15309:78:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12688, - "nodeType": "ExpressionStatement", - "src": "15309:78:57" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12690, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "15405:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "id": 12691, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "15416:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12692, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15427:6:57", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "15416:17:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15405:28:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 12695, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12660, - "src": "15471:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12696, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "15486:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 12694, - "name": "AllocationManagerAllocationSameSize", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12250, - "src": "15435:35:57", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$", - "typeString": "function (address,uint256) pure returns (error)" - } - }, - "id": 12697, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15435:59:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 12689, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "15397:7:57", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 12698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15397:98:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12699, - "nodeType": "ExpressionStatement", - "src": "15397:98:57" - }, - { - "assignments": [ - 12701 - ], - "declarations": [ - { - "constant": false, - "id": 12701, - "mutability": "mutable", - "name": "oldTokens", - "nameLocation": "15550:9:57", - "nodeType": "VariableDeclaration", - "scope": 12822, - "src": "15542:17:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12700, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15542:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 12704, - "initialValue": { - "expression": { - "id": 12702, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "15562:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12703, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15573:6:57", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "15562:17:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15542:37:57" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12705, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "15593:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 12706, - "name": "oldTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12701, - "src": "15603:9:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15593:19:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 12732, - "nodeType": "Block", - "src": "15752:100:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 12725, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "15801:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12726, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15812:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "15801:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12729, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12727, - "name": "oldTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12701, - "src": "15821:9:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 12728, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "15833:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15821:19:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 12722, - "name": "allocationProvisionTracker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13053, - "src": "15766:26:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 12724, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15793:7:57", - "memberName": "release", - "nodeType": "MemberAccess", - "referencedDeclaration": 1518, - "src": "15766:34:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "function (mapping(address => uint256),address,uint256)" - } - }, - "id": 12730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15766:75:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12731, - "nodeType": "ExpressionStatement", - "src": "15766:75:57" - } - ] - }, - "id": 12733, - "nodeType": "IfStatement", - "src": "15589:263:57", - "trueBody": { - "id": 12721, - "nodeType": "Block", - "src": "15614:132:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12711, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "15660:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 12712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15660:15:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - { - "expression": { - "id": 12713, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "15677:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12714, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15688:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "15677:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12717, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12715, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "15697:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 12716, - "name": "oldTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12701, - "src": "15707:9:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15697:19:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 12718, - "name": "_delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12664, - "src": "15718:16:57", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "id": 12708, - "name": "allocationProvisionTracker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13053, - "src": "15628:26:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 12710, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15655:4:57", - "memberName": "lock", - "nodeType": "MemberAccess", - "referencedDeclaration": 1480, - "src": "15628:31:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_contract$_IHorizonStaking_$2235_$_t_address_$_t_uint256_$_t_uint32_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "function (mapping(address => uint256),contract IHorizonStaking,address,uint256,uint32)" - } - }, - "id": 12719, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15628:107:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12720, - "nodeType": "ExpressionStatement", - "src": "15628:107:57" - } - ] - } - }, - { - "assignments": [ - 12735 - ], - "declarations": [ - { - "constant": false, - "id": 12735, - "mutability": "mutable", - "name": "accRewardsPerAllocatedToken", - "nameLocation": "15965:27:57", - "nodeType": "VariableDeclaration", - "scope": 12822, - "src": "15957:35:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12734, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15957:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 12742, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 12739, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "16058:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12740, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16069:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "16058:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12736, - "name": "_graphRewardsManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4590, - "src": "15995:20:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", - "typeString": "function () view returns (contract IRewardsManager)" - } - }, - "id": 12737, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15995:22:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "id": 12738, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16018:26:57", - "memberName": "onSubgraphAllocationUpdate", - "nodeType": "MemberAccess", - "referencedDeclaration": 437, - "src": "15995:49:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", - "typeString": "function (bytes32) external returns (uint256)" - } - }, - "id": 12741, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15995:104:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15957:142:57" - }, - { - "assignments": [ - 12744 - ], - "declarations": [ - { - "constant": false, - "id": 12744, - "mutability": "mutable", - "name": "accRewardsPerAllocatedTokenPending", - "nameLocation": "16117:34:57", - "nodeType": "VariableDeclaration", - "scope": 12822, - "src": "16109:42:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12743, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16109:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 12755, - "initialValue": { - "condition": { - "id": 12748, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "16154:26:57", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 12745, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "16155:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12746, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16166:12:57", - "memberName": "isAltruistic", - "nodeType": "MemberAccess", - "referencedDeclaration": 11640, - "src": "16155:23:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_State_$11307_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_State_$11307_memory_ptr_$", - "typeString": "function (struct Allocation.State memory) pure returns (bool)" - } - }, - "id": 12747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16155:25:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 12753, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16278:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 12754, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "16154:125:57", - "trueExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12749, - "name": "accRewardsPerAllocatedToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12735, - "src": "16195:27:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "expression": { - "id": 12750, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "16225:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12751, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16236:27:57", - "memberName": "accRewardsPerAllocatedToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 11304, - "src": "16225:38:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16195:68:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "16109:170:57" - }, - { - "expression": { - "id": 12761, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 12756, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "16323:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12758, - "indexExpression": { - "id": 12757, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12660, - "src": "16335:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16323:26:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "id": 12759, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16350:6:57", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "16323:33:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 12760, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "16359:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16323:43:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12762, - "nodeType": "ExpressionStatement", - "src": "16323:43:57" - }, - { - "expression": { - "id": 12768, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 12763, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "16376:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12765, - "indexExpression": { - "id": 12764, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12660, - "src": "16388:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16376:26:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "id": 12766, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16403:27:57", - "memberName": "accRewardsPerAllocatedToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 11304, - "src": "16376:54:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 12767, - "name": "accRewardsPerAllocatedToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12735, - "src": "16433:27:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16376:84:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12769, - "nodeType": "ExpressionStatement", - "src": "16376:84:57" - }, - { - "expression": { - "id": 12780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 12770, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "16470:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12772, - "indexExpression": { - "id": 12771, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12660, - "src": "16482:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16470:26:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "id": 12773, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16497:17:57", - "memberName": "accRewardsPending", - "nodeType": "MemberAccess", - "referencedDeclaration": 11306, - "src": "16470:44:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "arguments": [ - { - "id": 12777, - "name": "oldTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12701, - "src": "16566:9:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 12778, - "name": "accRewardsPerAllocatedTokenPending", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12744, - "src": "16589:34:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12774, - "name": "_graphRewardsManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4590, - "src": "16518:20:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", - "typeString": "function () view returns (contract IRewardsManager)" - } - }, - "id": 12775, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16518:22:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "id": 12776, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16541:11:57", - "memberName": "calcRewards", - "nodeType": "MemberAccess", - "referencedDeclaration": 411, - "src": "16518:34:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256) pure external returns (uint256)" - } - }, - "id": 12779, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16518:115:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16470:163:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12781, - "nodeType": "ExpressionStatement", - "src": "16470:163:57" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12784, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12782, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "16717:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 12783, - "name": "oldTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12701, - "src": "16727:9:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16717:19:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 12806, - "nodeType": "Block", - "src": "16850:106:57", - "statements": [ - { - "expression": { - "id": 12804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 12796, - "name": "subgraphAllocatedTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13066, - "src": "16864:23:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 12799, - "indexExpression": { - "expression": { - "id": 12797, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "16888:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12798, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16899:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "16888:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "16864:56:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12802, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12800, - "name": "oldTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12701, - "src": "16925:9:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 12801, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "16937:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16925:19:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 12803, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16924:21:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16864:81:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12805, - "nodeType": "ExpressionStatement", - "src": "16864:81:57" - } - ] - }, - "id": 12807, - "nodeType": "IfStatement", - "src": "16713:243:57", - "trueBody": { - "id": 12795, - "nodeType": "Block", - "src": "16738:106:57", - "statements": [ - { - "expression": { - "id": 12793, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 12785, - "name": "subgraphAllocatedTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13066, - "src": "16752:23:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 12788, - "indexExpression": { - "expression": { - "id": 12786, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "16776:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12787, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16787:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "16776:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "16752:56:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12791, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 12789, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "16813:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 12790, - "name": "oldTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12701, - "src": "16823:9:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16813:19:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 12792, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16812:21:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16752:81:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12794, - "nodeType": "ExpressionStatement", - "src": "16752:81:57" - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "id": 12809, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "16989:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12810, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17000:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "16989:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12811, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12660, - "src": "17009:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 12812, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12674, - "src": "17024:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12813, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17035:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "17024:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 12814, - "name": "_tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12662, - "src": "17057:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 12815, - "name": "oldTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12701, - "src": "17066:9:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 12808, - "name": "AllocationResized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12196, - "src": "16971:17:57", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,address,bytes32,uint256,uint256)" - } - }, - "id": 12816, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16971:105:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12817, - "nodeType": "EmitStatement", - "src": "16966:110:57" - }, - { - "expression": { - "baseExpression": { - "id": 12818, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "17093:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12820, - "indexExpression": { - "id": 12819, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12660, - "src": "17105:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17093:26:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage", - "typeString": "struct Allocation.State storage ref" - } - }, - "functionReturnParameters": 12669, - "id": 12821, - "nodeType": "Return", - "src": "17086:33:57" - } - ] - }, - "documentation": { - "id": 12658, - "nodeType": "StructuredDocumentation", - "src": "14288:764:57", - "text": " @notice Resize an allocation\n @dev Will lock or release tokens in the provision tracker depending on the new allocation size.\n Rewards accrued but not issued before the resize will be accounted for as pending rewards.\n These will be paid out when the indexer presents a POI.\n Requirements:\n - `_indexer` must be the owner of the allocation\n - Allocation must be open\n - `_tokens` must be different from the current allocation size\n Emits a {AllocationResized} event.\n @param _allocationId The id of the allocation to be resized\n @param _tokens The new amount of tokens to allocate\n @param _delegationRatio The delegation ratio to consider when locking tokens" - }, - "id": 12823, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_resizeAllocation", - "nameLocation": "15066:17:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12665, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12660, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "15101:13:57", - "nodeType": "VariableDeclaration", - "scope": 12823, - "src": "15093:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12659, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15093:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12662, - "mutability": "mutable", - "name": "_tokens", - "nameLocation": "15132:7:57", - "nodeType": "VariableDeclaration", - "scope": 12823, - "src": "15124:15:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12661, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15124:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12664, - "mutability": "mutable", - "name": "_delegationRatio", - "nameLocation": "15156:16:57", - "nodeType": "VariableDeclaration", - "scope": 12823, - "src": "15149:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 12663, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "15149:6:57", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "15083:95:57" - }, - "returnParameters": { - "id": 12669, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12668, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12823, - "src": "15197:23:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 12667, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12666, - "name": "Allocation.State", - "nameLocations": [ - "15197:10:57", - "15208:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "15197:16:57" - }, - "referencedDeclaration": 11307, - "src": "15197:16:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "15196:25:57" - }, - "scope": 13030, - "src": "15057:2069:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12889, - "nodeType": "Block", - "src": "17769:831:57", - "statements": [ - { - "assignments": [ - 12833 - ], - "declarations": [ - { - "constant": false, - "id": 12833, - "mutability": "mutable", - "name": "allocation", - "nameLocation": "17803:10:57", - "nodeType": "VariableDeclaration", - "scope": 12889, - "src": "17779:34:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 12832, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12831, - "name": "Allocation.State", - "nameLocations": [ - "17779:10:57", - "17790:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "17779:16:57" - }, - "referencedDeclaration": 11307, - "src": "17779:16:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "id": 12838, - "initialValue": { - "arguments": [ - { - "id": 12836, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12826, - "src": "17832:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12834, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "17816:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12835, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17828:3:57", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "17816:15:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 12837, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17816:30:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17779:67:57" - }, - { - "expression": { - "arguments": [ - { - "id": 12842, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12826, - "src": "17990:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "expression": { - "id": 12846, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12833, - "src": "18067:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12847, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18078:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "18067:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12843, - "name": "_graphRewardsManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4590, - "src": "18017:20:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IRewardsManager_$438_$", - "typeString": "function () view returns (contract IRewardsManager)" - } - }, - "id": 12844, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18017:22:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IRewardsManager_$438", - "typeString": "contract IRewardsManager" - } - }, - "id": 12845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18040:26:57", - "memberName": "onSubgraphAllocationUpdate", - "nodeType": "MemberAccess", - "referencedDeclaration": 437, - "src": "18017:49:57", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$_t_uint256_$", - "typeString": "function (bytes32) external returns (uint256)" - } - }, - "id": 12848, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18017:82:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 12839, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "17949:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17961:15:57", - "memberName": "snapshotRewards", - "nodeType": "MemberAccess", - "referencedDeclaration": 11459, - "src": "17949:27:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address,uint256)" - } - }, - "id": 12849, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17949:160:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12850, - "nodeType": "ExpressionStatement", - "src": "17949:160:57" - }, - { - "expression": { - "arguments": [ - { - "id": 12854, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12826, - "src": "18138:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12851, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "18120:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12853, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18132:5:57", - "memberName": "close", - "nodeType": "MemberAccess", - "referencedDeclaration": 11534, - "src": "18120:17:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$__$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address)" - } - }, - "id": 12855, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18120:32:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12856, - "nodeType": "ExpressionStatement", - "src": "18120:32:57" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 12860, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12833, - "src": "18197:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12861, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18208:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "18197:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 12862, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12833, - "src": "18217:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12863, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18228:6:57", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "18217:17:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 12857, - "name": "allocationProvisionTracker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13053, - "src": "18162:26:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 12859, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18189:7:57", - "memberName": "release", - "nodeType": "MemberAccess", - "referencedDeclaration": 1518, - "src": "18162:34:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_address_$_t_uint256_$returns$__$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "function (mapping(address => uint256),address,uint256)" - } - }, - "id": 12864, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18162:73:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12865, - "nodeType": "ExpressionStatement", - "src": "18162:73:57" - }, - { - "expression": { - "id": 12877, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 12866, - "name": "subgraphAllocatedTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13066, - "src": "18315:23:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 12869, - "indexExpression": { - "expression": { - "id": 12867, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12833, - "src": "18339:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12868, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18350:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "18339:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "18315:56:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12876, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 12870, - "name": "subgraphAllocatedTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13066, - "src": "18386:23:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 12873, - "indexExpression": { - "expression": { - "id": 12871, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12833, - "src": "18410:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12872, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18421:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "18410:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18386:56:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "expression": { - "id": 12874, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12833, - "src": "18457:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12875, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18468:6:57", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "18457:17:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18386:88:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18315:159:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12878, - "nodeType": "ExpressionStatement", - "src": "18315:159:57" - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "id": 12880, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12833, - "src": "18507:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12881, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18518:7:57", - "memberName": "indexer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11292, - "src": "18507:18:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12882, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12826, - "src": "18527:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 12883, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12833, - "src": "18542:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12884, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18553:20:57", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11294, - "src": "18542:31:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 12885, - "name": "allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12833, - "src": "18575:10:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "id": 12886, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18586:6:57", - "memberName": "tokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 11296, - "src": "18575:17:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 12879, - "name": "AllocationClosed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12207, - "src": "18490:16:57", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$returns$__$", - "typeString": "function (address,address,bytes32,uint256)" - } - }, - "id": 12887, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18490:103:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12888, - "nodeType": "EmitStatement", - "src": "18485:108:57" - } - ] - }, - "documentation": { - "id": 12824, - "nodeType": "StructuredDocumentation", - "src": "17132:574:57", - "text": " @notice Close an allocation\n Does not require presenting a POI, use {_collectIndexingRewards} to present a POI and collect rewards\n @dev Note that allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically\n without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated\n tokens for other purposes.\n Emits a {AllocationClosed} event\n @param _allocationId The id of the allocation to be closed" - }, - "id": 12890, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_closeAllocation", - "nameLocation": "17720:16:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12827, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12826, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "17745:13:57", - "nodeType": "VariableDeclaration", - "scope": 12890, - "src": "17737:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12825, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17737:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17736:23:57" - }, - "returnParameters": { - "id": 12828, - "nodeType": "ParameterList", - "parameters": [], - "src": "17769:0:57" - }, - "scope": 13030, - "src": "17711:889:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12909, - "nodeType": "Block", - "src": "18931:134:57", - "statements": [ - { - "expression": { - "id": 12902, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 12898, - "name": "rewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13061, - "src": "18941:18:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 12900, - "indexExpression": { - "id": 12899, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12893, - "src": "18960:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "18941:28:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 12901, - "name": "_rewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12895, - "src": "18972:19:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "18941:50:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 12903, - "nodeType": "ExpressionStatement", - "src": "18941:50:57" - }, - { - "eventCall": { - "arguments": [ - { - "id": 12905, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12893, - "src": "19028:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12906, - "name": "_rewardsDestination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12895, - "src": "19038:19:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 12904, - "name": "RewardsDestinationSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12223, - "src": "19006:21:57", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 12907, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19006:52:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12908, - "nodeType": "EmitStatement", - "src": "19001:57:57" - } - ] - }, - "documentation": { - "id": 12891, - "nodeType": "StructuredDocumentation", - "src": "18606:232:57", - "text": " @notice Sets the rewards destination for an indexer to receive indexing rewards\n @dev Emits a {RewardsDestinationSet} event\n @param _rewardsDestination The address where indexing rewards should be sent" - }, - "id": 12910, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setRewardsDestination", - "nameLocation": "18852:22:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12896, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12893, - "mutability": "mutable", - "name": "_indexer", - "nameLocation": "18883:8:57", - "nodeType": "VariableDeclaration", - "scope": 12910, - "src": "18875:16:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12892, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18875:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12895, - "mutability": "mutable", - "name": "_rewardsDestination", - "nameLocation": "18901:19:57", - "nodeType": "VariableDeclaration", - "scope": 12910, - "src": "18893:27:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12894, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18893:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "18874:47:57" - }, - "returnParameters": { - "id": 12897, - "nodeType": "ParameterList", - "parameters": [], - "src": "18931:0:57" - }, - "scope": 13030, - "src": "18843:222:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12924, - "nodeType": "Block", - "src": "19386:102:57", - "statements": [ - { - "expression": { - "id": 12918, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 12916, - "name": "maxPOIStaleness", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13056, - "src": "19396:15:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 12917, - "name": "_maxPOIStaleness", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12913, - "src": "19414:16:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19396:34:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 12919, - "nodeType": "ExpressionStatement", - "src": "19396:34:57" - }, - { - "eventCall": { - "arguments": [ - { - "id": 12921, - "name": "_maxPOIStaleness", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12913, - "src": "19464:16:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 12920, - "name": "MaxPOIStalenessSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12228, - "src": "19445:18:57", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 12922, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19445:36:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 12923, - "nodeType": "EmitStatement", - "src": "19440:41:57" - } - ] - }, - "documentation": { - "id": 12911, - "nodeType": "StructuredDocumentation", - "src": "19071:246:57", - "text": " @notice Sets the maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\n @dev Emits a {MaxPOIStalenessSet} event\n @param _maxPOIStaleness The max POI staleness in seconds" - }, - "id": 12925, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setMaxPOIStaleness", - "nameLocation": "19331:19:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12914, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12913, - "mutability": "mutable", - "name": "_maxPOIStaleness", - "nameLocation": "19359:16:57", - "nodeType": "VariableDeclaration", - "scope": 12925, - "src": "19351:24:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12912, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19351:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "19350:26:57" - }, - "returnParameters": { - "id": 12915, - "nodeType": "ParameterList", - "parameters": [], - "src": "19386:0:57" - }, - "scope": 13030, - "src": "19322:166:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12939, - "nodeType": "Block", - "src": "19707:54:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 12936, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12928, - "src": "19740:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12934, - "name": "allocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13042, - "src": "19724:11:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State storage ref)" - } - }, - "id": 12935, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19736:3:57", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 11554, - "src": "19724:15:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$_t_address_$returns$_t_struct$_State_$11307_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11307_storage_$_$", - "typeString": "function (mapping(address => struct Allocation.State storage ref),address) view returns (struct Allocation.State memory)" - } - }, - "id": 12937, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19724:30:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State memory" - } - }, - "functionReturnParameters": 12933, - "id": 12938, - "nodeType": "Return", - "src": "19717:37:57" - } - ] - }, - "documentation": { - "id": 12926, - "nodeType": "StructuredDocumentation", - "src": "19494:113:57", - "text": " @notice Gets the details of an allocation\n @param _allocationId The id of the allocation" - }, - "id": 12940, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getAllocation", - "nameLocation": "19621:14:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12929, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12928, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "19644:13:57", - "nodeType": "VariableDeclaration", - "scope": 12940, - "src": "19636:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12927, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19636:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "19635:23:57" - }, - "returnParameters": { - "id": 12933, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12932, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12940, - "src": "19682:23:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_memory_ptr", - "typeString": "struct Allocation.State" - }, - "typeName": { - "id": 12931, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12930, - "name": "Allocation.State", - "nameLocations": [ - "19682:10:57", - "19693:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "19682:16:57" - }, - "referencedDeclaration": 11307, - "src": "19682:16:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "19681:25:57" - }, - "scope": 13030, - "src": "19612:149:57", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12954, - "nodeType": "Block", - "src": "20005:60:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 12951, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12943, - "src": "20044:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12949, - "name": "legacyAllocations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13048, - "src": "20022:17:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State storage ref)" - } - }, - "id": 12950, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "20040:3:57", - "memberName": "get", - "nodeType": "MemberAccess", - "referencedDeclaration": 12010, - "src": "20022:21:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$_t_address_$returns$_t_struct$_State_$11933_memory_ptr_$attached_to$_t_mapping$_t_address_$_t_struct$_State_$11933_storage_$_$", - "typeString": "function (mapping(address => struct LegacyAllocation.State storage ref),address) view returns (struct LegacyAllocation.State memory)" - } - }, - "id": 12952, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20022:36:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State memory" - } - }, - "functionReturnParameters": 12948, - "id": 12953, - "nodeType": "Return", - "src": "20015:43:57" - } - ] - }, - "documentation": { - "id": 12941, - "nodeType": "StructuredDocumentation", - "src": "19767:126:57", - "text": " @notice Gets the details of a legacy allocation\n @param _allocationId The id of the legacy allocation" - }, - "id": 12955, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getLegacyAllocation", - "nameLocation": "19907:20:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12944, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12943, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "19936:13:57", - "nodeType": "VariableDeclaration", - "scope": 12955, - "src": "19928:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12942, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19928:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "19927:23:57" - }, - "returnParameters": { - "id": 12948, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12947, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12955, - "src": "19974:29:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_memory_ptr", - "typeString": "struct LegacyAllocation.State" - }, - "typeName": { - "id": 12946, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12945, - "name": "LegacyAllocation.State", - "nameLocations": [ - "19974:16:57", - "19991:5:57" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "19974:22:57" - }, - "referencedDeclaration": 11933, - "src": "19974:22:57", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - }, - "visibility": "internal" - } - ], - "src": "19973:31:57" - }, - "scope": 13030, - "src": "19898:167:57", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12976, - "nodeType": "Block", - "src": "20358:122:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 12969, - "name": "EIP712_ALLOCATION_PROOF_TYPEHASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12153, - "src": "20413:32:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 12970, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12958, - "src": "20447:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12971, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12960, - "src": "20457:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 12967, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "20402:3:57", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 12968, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "20406:6:57", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "20402:10:57", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 12972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20402:69:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 12966, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "20392:9:57", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 12973, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20392:80:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 12965, - "name": "_hashTypedDataV4", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5573, - "src": "20375:16:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - } - }, - "id": 12974, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20375:98:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 12964, - "id": 12975, - "nodeType": "Return", - "src": "20368:105:57" - } - ] - }, - "documentation": { - "id": 12956, - "nodeType": "StructuredDocumentation", - "src": "20071:177:57", - "text": " @notice Encodes the allocation proof for EIP712 signing\n @param _indexer The address of the indexer\n @param _allocationId The id of the allocation" - }, - "id": 12977, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_encodeAllocationProof", - "nameLocation": "20262:22:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12961, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12958, - "mutability": "mutable", - "name": "_indexer", - "nameLocation": "20293:8:57", - "nodeType": "VariableDeclaration", - "scope": 12977, - "src": "20285:16:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12957, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20285:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12960, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "20311:13:57", - "nodeType": "VariableDeclaration", - "scope": 12977, - "src": "20303:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12959, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20303:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "20284:41:57" - }, - "returnParameters": { - "id": 12964, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12963, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12977, - "src": "20349:7:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12962, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "20349:7:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "20348:9:57" - }, - "scope": 13030, - "src": "20253:227:57", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 12996, - "nodeType": "Block", - "src": "20864:102:57", - "statements": [ - { - "expression": { - "id": 12994, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "20881:78:57", - "subExpression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 12989, - "name": "_graphStaking", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4540, - "src": "20915:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IHorizonStaking_$2235_$", - "typeString": "function () view returns (contract IHorizonStaking)" - } - }, - "id": 12990, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20915:15:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - } - }, - { - "id": 12991, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12980, - "src": "20932:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 12992, - "name": "_delegationRatio", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12982, - "src": "20942:16:57", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IHorizonStaking_$2235", - "typeString": "contract IHorizonStaking" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "id": 12987, - "name": "allocationProvisionTracker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13053, - "src": "20882:26:57", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 12988, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "20909:5:57", - "memberName": "check", - "nodeType": "MemberAccess", - "referencedDeclaration": 1554, - "src": "20882:32:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_mapping$_t_address_$_t_uint256_$_$_t_contract$_IHorizonStaking_$2235_$_t_address_$_t_uint32_$returns$_t_bool_$attached_to$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "function (mapping(address => uint256),contract IHorizonStaking,address,uint32) view returns (bool)" - } - }, - "id": 12993, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20882:77:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 12986, - "id": 12995, - "nodeType": "Return", - "src": "20874:85:57" - } - ] - }, - "documentation": { - "id": 12978, - "nodeType": "StructuredDocumentation", - "src": "20486:275:57", - "text": " @notice Checks if an allocation is over-allocated\n @param _indexer The address of the indexer\n @param _delegationRatio The delegation ratio to consider when locking tokens\n @return True if the allocation is over-allocated, false otherwise" - }, - "id": 12997, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_isOverAllocated", - "nameLocation": "20775:16:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12983, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12980, - "mutability": "mutable", - "name": "_indexer", - "nameLocation": "20800:8:57", - "nodeType": "VariableDeclaration", - "scope": 12997, - "src": "20792:16:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12979, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20792:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12982, - "mutability": "mutable", - "name": "_delegationRatio", - "nameLocation": "20817:16:57", - "nodeType": "VariableDeclaration", - "scope": 12997, - "src": "20810:23:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 12981, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "20810:6:57", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "20791:43:57" - }, - "returnParameters": { - "id": 12986, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12985, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12997, - "src": "20858:4:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12984, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "20858:4:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "20857:6:57" - }, - "scope": 13030, - "src": "20766:200:57", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13028, - "nodeType": "Block", - "src": "21458:210:57", - "statements": [ - { - "assignments": [ - 13008 - ], - "declarations": [ - { - "constant": false, - "id": 13008, - "mutability": "mutable", - "name": "signer", - "nameLocation": "21476:6:57", - "nodeType": "VariableDeclaration", - "scope": 13028, - "src": "21468:14:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13007, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "21468:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 13017, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 13012, - "name": "_indexer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13000, - "src": "21522:8:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 13013, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13002, - "src": "21532:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13011, - "name": "_encodeAllocationProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12977, - "src": "21499:22:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bytes32_$", - "typeString": "function (address,address) view returns (bytes32)" - } - }, - "id": 13014, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21499:47:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 13015, - "name": "_proof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13004, - "src": "21548:6:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 13009, - "name": "ECDSA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6730, - "src": "21485:5:57", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ECDSA_$6730_$", - "typeString": "type(library ECDSA)" - } - }, - "id": 13010, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21491:7:57", - "memberName": "recover", - "nodeType": "MemberAccess", - "referencedDeclaration": 6486, - "src": "21485:13:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes32,bytes memory) pure returns (address)" - } - }, - "id": 13016, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21485:70:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "21468:87:57" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 13021, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 13019, - "name": "signer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13008, - "src": "21573:6:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 13020, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13002, - "src": "21583:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "21573:23:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 13023, - "name": "signer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13008, - "src": "21638:6:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 13024, - "name": "_allocationId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13002, - "src": "21646:13:57", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13022, - "name": "AllocationManagerInvalidAllocationProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12235, - "src": "21598:39:57", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", - "typeString": "function (address,address) pure returns (error)" - } - }, - "id": 13025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21598:62:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 13018, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "21565:7:57", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 13026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21565:96:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 13027, - "nodeType": "ExpressionStatement", - "src": "21565:96:57" - } - ] - }, - "documentation": { - "id": 12998, - "nodeType": "StructuredDocumentation", - "src": "20972:374:57", - "text": " @notice Verifies ownership of an allocation id by verifying an EIP712 allocation proof\n @dev Requirements:\n - Signer must be the allocation id address\n @param _indexer The address of the indexer\n @param _allocationId The id of the allocation\n @param _proof The EIP712 proof, an EIP712 signed message of (indexer,allocationId)" - }, - "id": 13029, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_verifyAllocationProof", - "nameLocation": "21360:22:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13005, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13000, - "mutability": "mutable", - "name": "_indexer", - "nameLocation": "21391:8:57", - "nodeType": "VariableDeclaration", - "scope": 13029, - "src": "21383:16:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12999, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "21383:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13002, - "mutability": "mutable", - "name": "_allocationId", - "nameLocation": "21409:13:57", - "nodeType": "VariableDeclaration", - "scope": 13029, - "src": "21401:21:57", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13001, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "21401:7:57", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13004, - "mutability": "mutable", - "name": "_proof", - "nameLocation": "21437:6:57", - "nodeType": "VariableDeclaration", - "scope": 13029, - "src": "21424:19:57", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 13003, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "21424:5:57", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "21382:62:57" - }, - "returnParameters": { - "id": 13006, - "nodeType": "ParameterList", - "parameters": [], - "src": "21458:0:57" - }, - "scope": 13030, - "src": "21351:317:57", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - } - ], - "scope": 13031, - "src": "1407:20263:57", - "usedErrors": [ - 4380, - 4865, - 4868, - 12235, - 12238, - 12243, - 12250 - ], - "usedEvents": [ - 4375, - 4873, - 5776, - 12164, - 12183, - 12196, - 12207, - 12216, - 12223, - 12228 - ] - } - ], - "src": "45:21626:57" - }, - "id": 57 - }, - "contracts/utilities/AllocationManagerStorage.sol": { - "ast": { - "absolutePath": "contracts/utilities/AllocationManagerStorage.sol", - "exportedSymbols": { - "Allocation": [ - 11674 - ], - "AllocationManagerV1Storage": [ - 13072 - ], - "LegacyAllocation": [ - 12086 - ] - }, - "id": 13073, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 13032, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:58" - }, - { - "absolutePath": "contracts/libraries/Allocation.sol", - "file": "../libraries/Allocation.sol", - "id": 13034, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13073, - "sourceUnit": 11675, - "src": "70:57:58", - "symbolAliases": [ - { - "foreign": { - "id": 13033, - "name": "Allocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11674, - "src": "79:10:58", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/LegacyAllocation.sol", - "file": "../libraries/LegacyAllocation.sol", - "id": 13036, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13073, - "sourceUnit": 12087, - "src": "128:69:58", - "symbolAliases": [ - { - "foreign": { - "id": 13035, - "name": "LegacyAllocation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12086, - "src": "137:16:58", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "AllocationManagerV1Storage", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "id": 13072, - "linearizedBaseContracts": [ - 13072 - ], - "name": "AllocationManagerV1Storage", - "nameLocation": "217:26:58", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 13037, - "nodeType": "StructuredDocumentation", - "src": "250:30:58", - "text": "@notice Allocation details" - }, - "functionSelector": "52a9039c", - "id": 13042, - "mutability": "mutable", - "name": "allocations", - "nameLocation": "353:11:58", - "nodeType": "VariableDeclaration", - "scope": 13072, - "src": "285:79:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "typeName": { - "id": 13041, - "keyName": "allocationId", - "keyNameLocation": "301:12:58", - "keyType": { - "id": 13038, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "293:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "285:60:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11307_storage_$", - "typeString": "mapping(address => struct Allocation.State)" - }, - "valueName": "allocation", - "valueNameLocation": "334:10:58", - "valueType": { - "id": 13040, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13039, - "name": "Allocation.State", - "nameLocations": [ - "317:10:58", - "328:5:58" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11307, - "src": "317:16:58" - }, - "referencedDeclaration": 11307, - "src": "317:16:58", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11307_storage_ptr", - "typeString": "struct Allocation.State" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 13043, - "nodeType": "StructuredDocumentation", - "src": "371:37:58", - "text": "@notice Legacy allocation details" - }, - "functionSelector": "93d4e7cb", - "id": 13048, - "mutability": "mutable", - "name": "legacyAllocations", - "nameLocation": "487:17:58", - "nodeType": "VariableDeclaration", - "scope": 13072, - "src": "413:91:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "typeName": { - "id": 13047, - "keyName": "allocationId", - "keyNameLocation": "429:12:58", - "keyType": { - "id": 13044, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "421:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "413:66:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_State_$11933_storage_$", - "typeString": "mapping(address => struct LegacyAllocation.State)" - }, - "valueName": "allocation", - "valueNameLocation": "468:10:58", - "valueType": { - "id": 13046, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13045, - "name": "LegacyAllocation.State", - "nameLocations": [ - "445:16:58", - "462:5:58" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11933, - "src": "445:22:58" - }, - "referencedDeclaration": 11933, - "src": "445:22:58", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11933_storage_ptr", - "typeString": "struct LegacyAllocation.State" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 13049, - "nodeType": "StructuredDocumentation", - "src": "511:47:58", - "text": "@notice Tracks allocated tokens per indexer" - }, - "functionSelector": "6234e216", - "id": 13053, - "mutability": "mutable", - "name": "allocationProvisionTracker", - "nameLocation": "613:26:58", - "nodeType": "VariableDeclaration", - "scope": 13072, - "src": "563:76:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 13052, - "keyName": "indexer", - "keyNameLocation": "579:7:58", - "keyType": { - "id": 13050, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "571:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "563:42:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "tokens", - "valueNameLocation": "598:6:58", - "valueType": { - "id": 13051, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "590:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 13054, - "nodeType": "StructuredDocumentation", - "src": "646:111:58", - "text": "@notice Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards" - }, - "functionSelector": "85e82baf", - "id": 13056, - "mutability": "mutable", - "name": "maxPOIStaleness", - "nameLocation": "777:15:58", - "nodeType": "VariableDeclaration", - "scope": 13072, - "src": "762:30:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13055, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "762:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 13057, - "nodeType": "StructuredDocumentation", - "src": "799:51:58", - "text": "@notice Destination of accrued indexing rewards" - }, - "functionSelector": "7203ca78", - "id": 13061, - "mutability": "mutable", - "name": "rewardsDestination", - "nameLocation": "910:18:58", - "nodeType": "VariableDeclaration", - "scope": 13072, - "src": "855:73:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "typeName": { - "id": 13060, - "keyName": "indexer", - "keyNameLocation": "871:7:58", - "keyType": { - "id": 13058, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "863:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "855:47:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueName": "destination", - "valueNameLocation": "890:11:58", - "valueType": { - "id": 13059, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "882:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 13062, - "nodeType": "StructuredDocumentation", - "src": "935:112:58", - "text": "@notice Track total tokens allocated per subgraph deployment\n @dev Used to calculate indexing rewards" - }, - "functionSelector": "3afd23fe", - "id": 13066, - "mutability": "mutable", - "name": "subgraphAllocatedTokens", - "nameLocation": "1115:23:58", - "nodeType": "VariableDeclaration", - "scope": 13072, - "src": "1052:86:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "typeName": { - "id": 13065, - "keyName": "subgraphDeploymentId", - "keyNameLocation": "1068:20:58", - "keyType": { - "id": 13063, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1060:7:58", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "1052:55:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "valueName": "tokens", - "valueNameLocation": "1100:6:58", - "valueType": { - "id": 13064, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1092:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 13067, - "nodeType": "StructuredDocumentation", - "src": "1145:57:58", - "text": "@dev Gap to allow adding variables in future upgrades" - }, - "id": 13071, - "mutability": "mutable", - "name": "__gap", - "nameLocation": "1227:5:58", - "nodeType": "VariableDeclaration", - "scope": 13072, - "src": "1207:25:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage", - "typeString": "uint256[50]" - }, - "typeName": { - "baseType": { - "id": 13068, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1207:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 13070, - "length": { - "hexValue": "3530", - "id": 13069, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1215:2:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_50_by_1", - "typeString": "int_const 50" - }, - "value": "50" - }, - "nodeType": "ArrayTypeName", - "src": "1207:11:58", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", - "typeString": "uint256[50]" - } - }, - "visibility": "private" - } - ], - "scope": 13073, - "src": "199:1036:58", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "45:1191:58" - }, - "id": 58 - }, - "contracts/utilities/AttestationManager.sol": { - "ast": { - "absolutePath": "contracts/utilities/AttestationManager.sol", - "exportedSymbols": { - "Attestation": [ - 11920 - ], - "AttestationManager": [ - 13226 - ], - "AttestationManagerV1Storage": [ - 13237 - ], - "ECDSA": [ - 6730 - ], - "Initializable": [ - 5102 - ] - }, - "id": 13227, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 13074, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:59" - }, - { - "absolutePath": "contracts/utilities/AttestationManagerStorage.sol", - "file": "./AttestationManagerStorage.sol", - "id": 13076, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13227, - "sourceUnit": 13238, - "src": "70:78:59", - "symbolAliases": [ - { - "foreign": { - "id": 13075, - "name": "AttestationManagerV1Storage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13237, - "src": "79:27:59", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "id": 13078, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13227, - "sourceUnit": 6731, - "src": "150:77:59", - "symbolAliases": [ - { - "foreign": { - "id": 13077, - "name": "ECDSA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6730, - "src": "159:5:59", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "id": 13080, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13227, - "sourceUnit": 5103, - "src": "228:98:59", - "symbolAliases": [ - { - "foreign": { - "id": 13079, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5102, - "src": "237:13:59", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/Attestation.sol", - "file": "../libraries/Attestation.sol", - "id": 13082, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13227, - "sourceUnit": 11921, - "src": "327:59:59", - "symbolAliases": [ - { - "foreign": { - "id": 13081, - "name": "Attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11920, - "src": "336:11:59", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 13084, - "name": "Initializable", - "nameLocations": [ - "631:13:59" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5102, - "src": "631:13:59" - }, - "id": 13085, - "nodeType": "InheritanceSpecifier", - "src": "631:13:59" - }, - { - "baseName": { - "id": 13086, - "name": "AttestationManagerV1Storage", - "nameLocations": [ - "646:27:59" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13237, - "src": "646:27:59" - }, - "id": 13087, - "nodeType": "InheritanceSpecifier", - "src": "646:27:59" - } - ], - "canonicalName": "AttestationManager", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 13083, - "nodeType": "StructuredDocumentation", - "src": "388:202:59", - "text": " @title AttestationManager contract\n @notice A helper contract implementing attestation verification.\n Uses a custom implementation of EIP712 for backwards compatibility with attestations." - }, - "fullyImplemented": true, - "id": 13226, - "linearizedBaseContracts": [ - 13226, - 13237, - 5102 - ], - "name": "AttestationManager", - "nameLocation": "609:18:59", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "documentation": { - "id": 13088, - "nodeType": "StructuredDocumentation", - "src": "680:47:59", - "text": "@notice EIP712 type hash for Receipt struct" - }, - "id": 13093, - "mutability": "constant", - "name": "RECEIPT_TYPE_HASH", - "nameLocation": "757:17:59", - "nodeType": "VariableDeclaration", - "scope": 13226, - "src": "732:142:59", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 13089, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "732:7:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "52656365697074286279746573333220726571756573744349442c6279746573333220726573706f6e73654349442c627974657333322073756267726170684465706c6f796d656e74494429", - "id": 13091, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "795:78:59", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6", - "typeString": "literal_string \"Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)\"" - }, - "value": "Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6", - "typeString": "literal_string \"Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)\"" - } - ], - "id": 13090, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "785:9:59", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 13092, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "785:89:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "private" - }, - { - "constant": true, - "documentation": { - "id": 13094, - "nodeType": "StructuredDocumentation", - "src": "881:35:59", - "text": "@notice EIP712 domain type hash" - }, - "id": 13099, - "mutability": "constant", - "name": "DOMAIN_TYPE_HASH", - "nameLocation": "946:16:59", - "nodeType": "VariableDeclaration", - "scope": 13226, - "src": "921:160:59", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 13095, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "921:7:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429", - "id": 13097, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "983:97:59", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472", - "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\"" - }, - "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_d87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472", - "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\"" - } - ], - "id": 13096, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "973:9:59", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 13098, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "973:108:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "private" - }, - { - "constant": true, - "documentation": { - "id": 13100, - "nodeType": "StructuredDocumentation", - "src": "1088:30:59", - "text": "@notice EIP712 domain name" - }, - "id": 13105, - "mutability": "constant", - "name": "DOMAIN_NAME_HASH", - "nameLocation": "1148:16:59", - "nodeType": "VariableDeclaration", - "scope": 13226, - "src": "1123:71:59", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 13101, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1123:7:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "47726170682050726f746f636f6c", - "id": 13103, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1177:16:59", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4", - "typeString": "literal_string \"Graph Protocol\"" - }, - "value": "Graph Protocol" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4", - "typeString": "literal_string \"Graph Protocol\"" - } - ], - "id": 13102, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "1167:9:59", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 13104, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1167:27:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "private" - }, - { - "constant": true, - "documentation": { - "id": 13106, - "nodeType": "StructuredDocumentation", - "src": "1201:33:59", - "text": "@notice EIP712 domain version" - }, - "id": 13111, - "mutability": "constant", - "name": "DOMAIN_VERSION_HASH", - "nameLocation": "1264:19:59", - "nodeType": "VariableDeclaration", - "scope": 13226, - "src": "1239:61:59", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 13107, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1239:7:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "30", - "id": 13109, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1296:3:59", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", - "typeString": "literal_string \"0\"" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", - "typeString": "literal_string \"0\"" - } - ], - "id": 13108, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "1286:9:59", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 13110, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1286:14:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "private" - }, - { - "constant": true, - "documentation": { - "id": 13112, - "nodeType": "StructuredDocumentation", - "src": "1307:30:59", - "text": "@notice EIP712 domain salt" - }, - "id": 13115, - "mutability": "constant", - "name": "DOMAIN_SALT", - "nameLocation": "1367:11:59", - "nodeType": "VariableDeclaration", - "scope": 13226, - "src": "1342:105:59", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 13113, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1342:7:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "307861303730666662316364373430393634396266373738323263636537343439353436386530366462666165663039353536383338626631383836373962396332", - "id": 13114, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1381:66:59", - "typeDescriptions": { - "typeIdentifier": "t_rational_72569707383443547382267636376646613935103975378761491950889697921835323734466_by_1", - "typeString": "int_const 7256...(69 digits omitted)...4466" - }, - "value": "0xa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c2" - }, - "visibility": "private" - }, - { - "body": { - "id": 13124, - "nodeType": "Block", - "src": "1662:54:59", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 13121, - "name": "__AttestationManager_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13150, - "src": "1672:35:59", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 13122, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1672:37:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 13123, - "nodeType": "ExpressionStatement", - "src": "1672:37:59" - } - ] - }, - "documentation": { - "id": 13116, - "nodeType": "StructuredDocumentation", - "src": "1454:87:59", - "text": " @dev Initialize the AttestationManager contract and parent contracts" - }, - "id": 13125, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 13119, - "kind": "modifierInvocation", - "modifierName": { - "id": 13118, - "name": "onlyInitializing", - "nameLocations": [ - "1645:16:59" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "1645:16:59" - }, - "nodeType": "ModifierInvocation", - "src": "1645:16:59" - } - ], - "name": "__AttestationManager_init", - "nameLocation": "1608:25:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13117, - "nodeType": "ParameterList", - "parameters": [], - "src": "1633:2:59" - }, - "returnParameters": { - "id": 13120, - "nodeType": "ParameterList", - "parameters": [], - "src": "1662:0:59" - }, - "scope": 13226, - "src": "1599:117:59", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13149, - "nodeType": "Block", - "src": "1919:289:59", - "statements": [ - { - "expression": { - "id": 13147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 13131, - "name": "_domainSeparator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13231, - "src": "1929:16:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "id": 13135, - "name": "DOMAIN_TYPE_HASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13099, - "src": "1999:16:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 13136, - "name": "DOMAIN_NAME_HASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13105, - "src": "2033:16:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 13137, - "name": "DOMAIN_VERSION_HASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13111, - "src": "2067:19:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 13138, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -4, - "src": "2104:5:59", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 13139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2110:7:59", - "memberName": "chainid", - "nodeType": "MemberAccess", - "src": "2104:13:59", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 13142, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "2143:4:59", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AttestationManager_$13226", - "typeString": "contract AttestationManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AttestationManager_$13226", - "typeString": "contract AttestationManager" - } - ], - "id": 13141, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2135:7:59", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 13140, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2135:7:59", - "typeDescriptions": {} - } - }, - "id": 13143, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2135:13:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 13144, - "name": "DOMAIN_SALT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13115, - "src": "2166:11:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 13133, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "1971:3:59", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 13134, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1975:6:59", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "1971:10:59", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 13145, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1971:220:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 13132, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "1948:9:59", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 13146, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1948:253:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "1929:272:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 13148, - "nodeType": "ExpressionStatement", - "src": "1929:272:59" - } - ] - }, - "documentation": { - "id": 13126, - "nodeType": "StructuredDocumentation", - "src": "1722:66:59", - "text": " @dev Initialize the AttestationManager contract" - }, - "id": 13150, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 13129, - "kind": "modifierInvocation", - "modifierName": { - "id": 13128, - "name": "onlyInitializing", - "nameLocations": [ - "1902:16:59" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5011, - "src": "1902:16:59" - }, - "nodeType": "ModifierInvocation", - "src": "1902:16:59" - } - ], - "name": "__AttestationManager_init_unchained", - "nameLocation": "1855:35:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13127, - "nodeType": "ParameterList", - "parameters": [], - "src": "1890:2:59" - }, - "returnParameters": { - "id": 13130, - "nodeType": "ParameterList", - "parameters": [], - "src": "1919:0:59" - }, - "scope": 13226, - "src": "1846:362:59", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13194, - "nodeType": "Block", - "src": "2467:605:59", - "statements": [ - { - "assignments": [ - 13163 - ], - "declarations": [ - { - "constant": false, - "id": 13163, - "mutability": "mutable", - "name": "receipt", - "nameLocation": "2582:7:59", - "nodeType": "VariableDeclaration", - "scope": 13194, - "src": "2555:34:59", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt" - }, - "typeName": { - "id": 13162, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13161, - "name": "Attestation.Receipt", - "nameLocations": [ - "2555:11:59", - "2567:7:59" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11685, - "src": "2555:19:59" - }, - "referencedDeclaration": 11685, - "src": "2555:19:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_storage_ptr", - "typeString": "struct Attestation.Receipt" - } - }, - "visibility": "internal" - } - ], - "id": 13173, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 13166, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13154, - "src": "2625:12:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 13167, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2638:10:59", - "memberName": "requestCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11688, - "src": "2625:23:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 13168, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13154, - "src": "2662:12:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 13169, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2675:11:59", - "memberName": "responseCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11690, - "src": "2662:24:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 13170, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13154, - "src": "2700:12:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 13171, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2713:20:59", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11692, - "src": "2700:33:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 13164, - "name": "Attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11920, - "src": "2592:11:59", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Attestation_$11920_$", - "typeString": "type(library Attestation)" - } - }, - "id": 13165, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2604:7:59", - "memberName": "Receipt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11685, - "src": "2592:19:59", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Receipt_$11685_storage_ptr_$", - "typeString": "type(struct Attestation.Receipt storage pointer)" - } - }, - "id": 13172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2592:151:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2555:188:59" - }, - { - "assignments": [ - 13175 - ], - "declarations": [ - { - "constant": false, - "id": 13175, - "mutability": "mutable", - "name": "messageHash", - "nameLocation": "2761:11:59", - "nodeType": "VariableDeclaration", - "scope": 13194, - "src": "2753:19:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 13174, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2753:7:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 13179, - "initialValue": { - "arguments": [ - { - "id": 13177, - "name": "receipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13163, - "src": "2790:7:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt memory" - } - ], - "id": 13176, - "name": "_encodeReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13225, - "src": "2775:14:59", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Receipt_$11685_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (struct Attestation.Receipt memory) view returns (bytes32)" - } - }, - "id": 13178, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2775:23:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2753:45:59" - }, - { - "expression": { - "arguments": [ - { - "id": 13182, - "name": "messageHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13175, - "src": "2987:11:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [ - { - "expression": { - "id": 13185, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13154, - "src": "3017:12:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 13186, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3030:1:59", - "memberName": "r", - "nodeType": "MemberAccess", - "referencedDeclaration": 11694, - "src": "3017:14:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 13187, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13154, - "src": "3033:12:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 13188, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3046:1:59", - "memberName": "s", - "nodeType": "MemberAccess", - "referencedDeclaration": 11696, - "src": "3033:14:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 13189, - "name": "_attestation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13154, - "src": "3049:12:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State memory" - } - }, - "id": 13190, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3062:1:59", - "memberName": "v", - "nodeType": "MemberAccess", - "referencedDeclaration": 11698, - "src": "3049:14:59", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "expression": { - "id": 13183, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "3000:3:59", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 13184, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3004:12:59", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "3000:16:59", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 13191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3000:64:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 13180, - "name": "ECDSA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6730, - "src": "2973:5:59", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ECDSA_$6730_$", - "typeString": "type(library ECDSA)" - } - }, - "id": 13181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2979:7:59", - "memberName": "recover", - "nodeType": "MemberAccess", - "referencedDeclaration": 6486, - "src": "2973:13:59", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", - "typeString": "function (bytes32,bytes memory) pure returns (address)" - } - }, - "id": 13192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2973:92:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 13158, - "id": 13193, - "nodeType": "Return", - "src": "2966:99:59" - } - ] - }, - "documentation": { - "id": 13151, - "nodeType": "StructuredDocumentation", - "src": "2214:153:59", - "text": " @dev Recover the signer address of the `_attestation`.\n @param _attestation The attestation struct\n @return Signer address" - }, - "id": 13195, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_recoverSigner", - "nameLocation": "2381:14:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13155, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13154, - "mutability": "mutable", - "name": "_attestation", - "nameLocation": "2421:12:59", - "nodeType": "VariableDeclaration", - "scope": 13195, - "src": "2396:37:59", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_memory_ptr", - "typeString": "struct Attestation.State" - }, - "typeName": { - "id": 13153, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13152, - "name": "Attestation.State", - "nameLocations": [ - "2396:11:59", - "2408:5:59" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11699, - "src": "2396:17:59" - }, - "referencedDeclaration": 11699, - "src": "2396:17:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_State_$11699_storage_ptr", - "typeString": "struct Attestation.State" - } - }, - "visibility": "internal" - } - ], - "src": "2395:39:59" - }, - "returnParameters": { - "id": 13158, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13157, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13195, - "src": "2458:7:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13156, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2458:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2457:9:59" - }, - "scope": 13226, - "src": "2372:700:59", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13224, - "nodeType": "Block", - "src": "3606:576:59", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "1901", - "id": 13207, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3700:10:59", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", - "typeString": "literal_string hex\"1901\"" - }, - "value": "\u0019\u0001" - }, - { - "id": 13208, - "name": "_domainSeparator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13231, - "src": "3775:16:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [ - { - "arguments": [ - { - "id": 13212, - "name": "RECEIPT_TYPE_HASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13093, - "src": "3888:17:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 13213, - "name": "_receipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13199, - "src": "3935:8:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt memory" - } - }, - "id": 13214, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3944:10:59", - "memberName": "requestCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11680, - "src": "3935:19:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 13215, - "name": "_receipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13199, - "src": "3984:8:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt memory" - } - }, - "id": 13216, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3993:11:59", - "memberName": "responseCID", - "nodeType": "MemberAccess", - "referencedDeclaration": 11682, - "src": "3984:20:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 13217, - "name": "_receipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13199, - "src": "4034:8:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt memory" - } - }, - "id": 13218, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4043:20:59", - "memberName": "subgraphDeploymentId", - "nodeType": "MemberAccess", - "referencedDeclaration": 11684, - "src": "4034:29:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 13210, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "3848:3:59", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 13211, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3852:6:59", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "3848:10:59", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 13219, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3848:241:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 13209, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "3813:9:59", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 13220, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3813:330:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", - "typeString": "literal_string hex\"1901\"" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 13205, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "3662:3:59", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 13206, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3666:12:59", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "3662:16:59", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 13221, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3662:499:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 13204, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "3635:9:59", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 13222, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3635:540:59", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 13203, - "id": 13223, - "nodeType": "Return", - "src": "3616:559:59" - } - ] - }, - "documentation": { - "id": 13196, - "nodeType": "StructuredDocumentation", - "src": "3078:430:59", - "text": " @dev Get the message hash that a indexer used to sign the receipt.\n Encodes a receipt using a domain separator, as described on\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\n @notice Return the message hash used to sign the receipt\n @param _receipt Receipt returned by indexer and submitted by fisherman\n @return Message hash used to sign the receipt" - }, - "id": 13225, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_encodeReceipt", - "nameLocation": "3522:14:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13200, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13199, - "mutability": "mutable", - "name": "_receipt", - "nameLocation": "3564:8:59", - "nodeType": "VariableDeclaration", - "scope": 13225, - "src": "3537:35:59", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_memory_ptr", - "typeString": "struct Attestation.Receipt" - }, - "typeName": { - "id": 13198, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13197, - "name": "Attestation.Receipt", - "nameLocations": [ - "3537:11:59", - "3549:7:59" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11685, - "src": "3537:19:59" - }, - "referencedDeclaration": 11685, - "src": "3537:19:59", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Receipt_$11685_storage_ptr", - "typeString": "struct Attestation.Receipt" - } - }, - "visibility": "internal" - } - ], - "src": "3536:37:59" - }, - "returnParameters": { - "id": 13203, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13202, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13225, - "src": "3597:7:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 13201, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3597:7:59", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3596:9:59" - }, - "scope": 13226, - "src": "3513:669:59", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 13227, - "src": "591:3593:59", - "usedErrors": [ - 4865, - 4868 - ], - "usedEvents": [ - 4873 - ] - } - ], - "src": "45:4140:59" - }, - "id": 59 - }, - "contracts/utilities/AttestationManagerStorage.sol": { - "ast": { - "absolutePath": "contracts/utilities/AttestationManagerStorage.sol", - "exportedSymbols": { - "AttestationManagerV1Storage": [ - 13237 - ] - }, - "id": 13238, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 13228, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:60" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "AttestationManagerV1Storage", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "id": 13237, - "linearizedBaseContracts": [ - 13237 - ], - "name": "AttestationManagerV1Storage", - "nameLocation": "88:27:60", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 13229, - "nodeType": "StructuredDocumentation", - "src": "122:32:60", - "text": "@dev EIP712 domain separator" - }, - "id": 13231, - "mutability": "mutable", - "name": "_domainSeparator", - "nameLocation": "176:16:60", - "nodeType": "VariableDeclaration", - "scope": 13237, - "src": "159:33:60", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 13230, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "159:7:60", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "documentation": { - "id": 13232, - "nodeType": "StructuredDocumentation", - "src": "199:57:60", - "text": "@dev Gap to allow adding variables in future upgrades" - }, - "id": 13236, - "mutability": "mutable", - "name": "__gap", - "nameLocation": "281:5:60", - "nodeType": "VariableDeclaration", - "scope": 13237, - "src": "261:25:60", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage", - "typeString": "uint256[50]" - }, - "typeName": { - "baseType": { - "id": 13233, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "261:7:60", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 13235, - "length": { - "hexValue": "3530", - "id": 13234, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "269:2:60", - "typeDescriptions": { - "typeIdentifier": "t_rational_50_by_1", - "typeString": "int_const 50" - }, - "value": "50" - }, - "nodeType": "ArrayTypeName", - "src": "261:11:60", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", - "typeString": "uint256[50]" - } - }, - "visibility": "private" - } - ], - "scope": 13238, - "src": "70:219:60", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "45:245:60" - }, - "id": 60 - }, - "contracts/utilities/Directory.sol": { - "ast": { - "absolutePath": "contracts/utilities/Directory.sol", - "exportedSymbols": { - "Directory": [ - 13390 - ], - "ICuration": [ - 165 - ], - "IDisputeManager": [ - 11057 - ], - "ISubgraphService": [ - 11280 - ], - "ITAPCollector": [ - 2695 - ] - }, - "id": 13391, - "license": "GPL-3.0-or-later", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 13239, - "literals": [ - "solidity", - "0.8", - ".27" - ], - "nodeType": "PragmaDirective", - "src": "45:23:61" - }, - { - "absolutePath": "contracts/interfaces/IDisputeManager.sol", - "file": "../interfaces/IDisputeManager.sol", - "id": 13241, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13391, - "sourceUnit": 11058, - "src": "70:68:61", - "symbolAliases": [ - { - "foreign": { - "id": 13240, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "79:15:61", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/ISubgraphService.sol", - "file": "../interfaces/ISubgraphService.sol", - "id": 13243, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13391, - "sourceUnit": 11281, - "src": "139:70:61", - "symbolAliases": [ - { - "foreign": { - "id": 13242, - "name": "ISubgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11280, - "src": "148:16:61", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", - "file": "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol", - "id": 13245, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13391, - "sourceUnit": 2696, - "src": "210:94:61", - "symbolAliases": [ - { - "foreign": { - "id": 13244, - "name": "ITAPCollector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2695, - "src": "219:13:61", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@graphprotocol/contracts/contracts/curation/ICuration.sol", - "file": "@graphprotocol/contracts/contracts/curation/ICuration.sol", - "id": 13247, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13391, - "sourceUnit": 166, - "src": "305:86:61", - "symbolAliases": [ - { - "foreign": { - "id": 13246, - "name": "ICuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 165, - "src": "314:9:61", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "Directory", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 13248, - "nodeType": "StructuredDocumentation", - "src": "393:248:61", - "text": " @title Directory contract\n @notice This contract is meant to be inherited by {SubgraphService} contract.\n It contains the addresses of the contracts that the contract interacts with.\n Uses immutable variables to minimize gas costs." - }, - "fullyImplemented": true, - "id": 13390, - "linearizedBaseContracts": [ - 13390 - ], - "name": "Directory", - "nameLocation": "660:9:61", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 13249, - "nodeType": "StructuredDocumentation", - "src": "676:49:61", - "text": "@notice The Subgraph Service contract address" - }, - "id": 13252, - "mutability": "immutable", - "name": "SUBGRAPH_SERVICE", - "nameLocation": "765:16:61", - "nodeType": "VariableDeclaration", - "scope": 13390, - "src": "730:51:61", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - }, - "typeName": { - "id": 13251, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13250, - "name": "ISubgraphService", - "nameLocations": [ - "730:16:61" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11280, - "src": "730:16:61" - }, - "referencedDeclaration": 11280, - "src": "730:16:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 13253, - "nodeType": "StructuredDocumentation", - "src": "788:48:61", - "text": "@notice The Dispute Manager contract address" - }, - "id": 13256, - "mutability": "immutable", - "name": "DISPUTE_MANAGER", - "nameLocation": "875:15:61", - "nodeType": "VariableDeclaration", - "scope": 13390, - "src": "841:49:61", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - }, - "typeName": { - "id": 13255, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13254, - "name": "IDisputeManager", - "nameLocations": [ - "841:15:61" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11057, - "src": "841:15:61" - }, - "referencedDeclaration": 11057, - "src": "841:15:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 13257, - "nodeType": "StructuredDocumentation", - "src": "897:124:61", - "text": "@notice The TAP Collector contract address\n @dev Required to collect payments via Graph Horizon payments protocol" - }, - "id": 13260, - "mutability": "immutable", - "name": "TAP_COLLECTOR", - "nameLocation": "1058:13:61", - "nodeType": "VariableDeclaration", - "scope": 13390, - "src": "1026:45:61", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITAPCollector_$2695", - "typeString": "contract ITAPCollector" - }, - "typeName": { - "id": 13259, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13258, - "name": "ITAPCollector", - "nameLocations": [ - "1026:13:61" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2695, - "src": "1026:13:61" - }, - "referencedDeclaration": 2695, - "src": "1026:13:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITAPCollector_$2695", - "typeString": "contract ITAPCollector" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 13261, - "nodeType": "StructuredDocumentation", - "src": "1078:94:61", - "text": "@notice The Curation contract address\n @dev Required for curation fees distribution" - }, - "id": 13264, - "mutability": "immutable", - "name": "CURATION", - "nameLocation": "1205:8:61", - "nodeType": "VariableDeclaration", - "scope": 13390, - "src": "1177:36:61", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - }, - "typeName": { - "id": 13263, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13262, - "name": "ICuration", - "nameLocations": [ - "1177:9:61" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 165, - "src": "1177:9:61" - }, - "referencedDeclaration": 165, - "src": "1177:9:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "visibility": "private" - }, - { - "anonymous": false, - "documentation": { - "id": 13265, - "nodeType": "StructuredDocumentation", - "src": "1220:317:61", - "text": " @notice Emitted when the Directory is initialized\n @param subgraphService The Subgraph Service contract address\n @param disputeManager The Dispute Manager contract address\n @param tapCollector The TAP Collector contract address\n @param curation The Curation contract address" - }, - "eventSelector": "4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda7", - "id": 13275, - "name": "SubgraphServiceDirectoryInitialized", - "nameLocation": "1548:35:61", - "nodeType": "EventDefinition", - "parameters": { - "id": 13274, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13267, - "indexed": false, - "mutability": "mutable", - "name": "subgraphService", - "nameLocation": "1601:15:61", - "nodeType": "VariableDeclaration", - "scope": 13275, - "src": "1593:23:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13266, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1593:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13269, - "indexed": false, - "mutability": "mutable", - "name": "disputeManager", - "nameLocation": "1634:14:61", - "nodeType": "VariableDeclaration", - "scope": 13275, - "src": "1626:22:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13268, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1626:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13271, - "indexed": false, - "mutability": "mutable", - "name": "tapCollector", - "nameLocation": "1666:12:61", - "nodeType": "VariableDeclaration", - "scope": 13275, - "src": "1658:20:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13270, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1658:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13273, - "indexed": false, - "mutability": "mutable", - "name": "curation", - "nameLocation": "1696:8:61", - "nodeType": "VariableDeclaration", - "scope": 13275, - "src": "1688:16:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13272, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1688:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1583:127:61" - }, - "src": "1542:169:61" - }, - { - "documentation": { - "id": 13276, - "nodeType": "StructuredDocumentation", - "src": "1717:173:61", - "text": " @notice Thrown when the caller is not the Dispute Manager\n @param caller The caller address\n @param disputeManager The Dispute Manager address" - }, - "errorSelector": "cdc0567f", - "id": 13282, - "name": "DirectoryNotDisputeManager", - "nameLocation": "1901:26:61", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 13281, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13278, - "mutability": "mutable", - "name": "caller", - "nameLocation": "1936:6:61", - "nodeType": "VariableDeclaration", - "scope": 13282, - "src": "1928:14:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13277, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1928:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13280, - "mutability": "mutable", - "name": "disputeManager", - "nameLocation": "1952:14:61", - "nodeType": "VariableDeclaration", - "scope": 13282, - "src": "1944:22:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13279, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1944:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1927:40:61" - }, - "src": "1895:73:61" - }, - { - "body": { - "id": 13304, - "nodeType": "Block", - "src": "2081:175:61", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 13292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 13286, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "2112:3:61", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 13287, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2116:6:61", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "2112:10:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "id": 13290, - "name": "DISPUTE_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13256, - "src": "2134:15:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - ], - "id": 13289, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2126:7:61", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 13288, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2126:7:61", - "typeDescriptions": {} - } - }, - "id": 13291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2126:24:61", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2112:38:61", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "expression": { - "id": 13294, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "2191:3:61", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 13295, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2195:6:61", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "2191:10:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 13298, - "name": "DISPUTE_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13256, - "src": "2211:15:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - ], - "id": 13297, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2203:7:61", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 13296, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2203:7:61", - "typeDescriptions": {} - } - }, - "id": 13299, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2203:24:61", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13293, - "name": "DirectoryNotDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13282, - "src": "2164:26:61", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$", - "typeString": "function (address,address) pure returns (error)" - } - }, - "id": 13300, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2164:64:61", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 13285, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2091:7:61", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 13301, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2091:147:61", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 13302, - "nodeType": "ExpressionStatement", - "src": "2091:147:61" - }, - { - "id": 13303, - "nodeType": "PlaceholderStatement", - "src": "2248:1:61" - } - ] - }, - "documentation": { - "id": 13283, - "nodeType": "StructuredDocumentation", - "src": "1974:72:61", - "text": " @notice Checks that the caller is the Dispute Manager" - }, - "id": 13305, - "name": "onlyDisputeManager", - "nameLocation": "2060:18:61", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 13284, - "nodeType": "ParameterList", - "parameters": [], - "src": "2078:2:61" - }, - "src": "2051:205:61", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13348, - "nodeType": "Block", - "src": "2682:329:61", - "statements": [ - { - "expression": { - "id": 13321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 13317, - "name": "SUBGRAPH_SERVICE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13252, - "src": "2692:16:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 13319, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13308, - "src": "2728:15:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13318, - "name": "ISubgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11280, - "src": "2711:16:61", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ISubgraphService_$11280_$", - "typeString": "type(contract ISubgraphService)" - } - }, - "id": 13320, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2711:33:61", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "src": "2692:52:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "id": 13322, - "nodeType": "ExpressionStatement", - "src": "2692:52:61" - }, - { - "expression": { - "id": 13327, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 13323, - "name": "DISPUTE_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13256, - "src": "2754:15:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 13325, - "name": "disputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13310, - "src": "2788:14:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13324, - "name": "IDisputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11057, - "src": "2772:15:61", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDisputeManager_$11057_$", - "typeString": "type(contract IDisputeManager)" - } - }, - "id": 13326, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2772:31:61", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - }, - "src": "2754:49:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - }, - "id": 13328, - "nodeType": "ExpressionStatement", - "src": "2754:49:61" - }, - { - "expression": { - "id": 13333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 13329, - "name": "TAP_COLLECTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13260, - "src": "2813:13:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITAPCollector_$2695", - "typeString": "contract ITAPCollector" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 13331, - "name": "tapCollector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13312, - "src": "2843:12:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13330, - "name": "ITAPCollector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2695, - "src": "2829:13:61", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ITAPCollector_$2695_$", - "typeString": "type(contract ITAPCollector)" - } - }, - "id": 13332, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2829:27:61", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITAPCollector_$2695", - "typeString": "contract ITAPCollector" - } - }, - "src": "2813:43:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITAPCollector_$2695", - "typeString": "contract ITAPCollector" - } - }, - "id": 13334, - "nodeType": "ExpressionStatement", - "src": "2813:43:61" - }, - { - "expression": { - "id": 13339, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 13335, - "name": "CURATION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13264, - "src": "2866:8:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 13337, - "name": "curation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13314, - "src": "2887:8:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13336, - "name": "ICuration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 165, - "src": "2877:9:61", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICuration_$165_$", - "typeString": "type(contract ICuration)" - } - }, - "id": 13338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2877:19:61", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "src": "2866:30:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "id": 13340, - "nodeType": "ExpressionStatement", - "src": "2866:30:61" - }, - { - "eventCall": { - "arguments": [ - { - "id": 13342, - "name": "subgraphService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13308, - "src": "2948:15:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 13343, - "name": "disputeManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13310, - "src": "2965:14:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 13344, - "name": "tapCollector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13312, - "src": "2981:12:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 13345, - "name": "curation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13314, - "src": "2995:8:61", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13341, - "name": "SubgraphServiceDirectoryInitialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13275, - "src": "2912:35:61", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address,address,address)" - } - }, - "id": 13346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2912:92:61", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 13347, - "nodeType": "EmitStatement", - "src": "2907:97:61" - } - ] - }, - "documentation": { - "id": 13306, - "nodeType": "StructuredDocumentation", - "src": "2262:314:61", - "text": " @notice Constructor for the Directory contract\n @param subgraphService The Subgraph Service contract address\n @param disputeManager The Dispute Manager contract address\n @param tapCollector The TAP Collector contract address\n @param curation The Curation contract address" - }, - "id": 13349, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13315, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13308, - "mutability": "mutable", - "name": "subgraphService", - "nameLocation": "2601:15:61", - "nodeType": "VariableDeclaration", - "scope": 13349, - "src": "2593:23:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13307, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2593:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13310, - "mutability": "mutable", - "name": "disputeManager", - "nameLocation": "2626:14:61", - "nodeType": "VariableDeclaration", - "scope": 13349, - "src": "2618:22:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2618:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13312, - "mutability": "mutable", - "name": "tapCollector", - "nameLocation": "2650:12:61", - "nodeType": "VariableDeclaration", - "scope": 13349, - "src": "2642:20:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13311, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2642:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13314, - "mutability": "mutable", - "name": "curation", - "nameLocation": "2672:8:61", - "nodeType": "VariableDeclaration", - "scope": 13349, - "src": "2664:16:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13313, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2664:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2592:89:61" - }, - "returnParameters": { - "id": 13316, - "nodeType": "ParameterList", - "parameters": [], - "src": "2682:0:61" - }, - "scope": 13390, - "src": "2581:430:61", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13358, - "nodeType": "Block", - "src": "3163:40:61", - "statements": [ - { - "expression": { - "id": 13356, - "name": "SUBGRAPH_SERVICE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13252, - "src": "3180:16:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "functionReturnParameters": 13355, - "id": 13357, - "nodeType": "Return", - "src": "3173:23:61" - } - ] - }, - "documentation": { - "id": 13350, - "nodeType": "StructuredDocumentation", - "src": "3017:72:61", - "text": " @notice Returns the Subgraph Service contract address" - }, - "id": 13359, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_subgraphService", - "nameLocation": "3103:16:61", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13351, - "nodeType": "ParameterList", - "parameters": [], - "src": "3119:2:61" - }, - "returnParameters": { - "id": 13355, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13354, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13359, - "src": "3145:16:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - }, - "typeName": { - "id": 13353, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13352, - "name": "ISubgraphService", - "nameLocations": [ - "3145:16:61" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11280, - "src": "3145:16:61" - }, - "referencedDeclaration": 11280, - "src": "3145:16:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ISubgraphService_$11280", - "typeString": "contract ISubgraphService" - } - }, - "visibility": "internal" - } - ], - "src": "3144:18:61" - }, - "scope": 13390, - "src": "3094:109:61", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13368, - "nodeType": "Block", - "src": "3352:39:61", - "statements": [ - { - "expression": { - "id": 13366, - "name": "DISPUTE_MANAGER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13256, - "src": "3369:15:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - }, - "functionReturnParameters": 13365, - "id": 13367, - "nodeType": "Return", - "src": "3362:22:61" - } - ] - }, - "documentation": { - "id": 13360, - "nodeType": "StructuredDocumentation", - "src": "3209:71:61", - "text": " @notice Returns the Dispute Manager contract address" - }, - "id": 13369, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_disputeManager", - "nameLocation": "3294:15:61", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13361, - "nodeType": "ParameterList", - "parameters": [], - "src": "3309:2:61" - }, - "returnParameters": { - "id": 13365, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13364, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13369, - "src": "3335:15:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - }, - "typeName": { - "id": 13363, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13362, - "name": "IDisputeManager", - "nameLocations": [ - "3335:15:61" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11057, - "src": "3335:15:61" - }, - "referencedDeclaration": 11057, - "src": "3335:15:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDisputeManager_$11057", - "typeString": "contract IDisputeManager" - } - }, - "visibility": "internal" - } - ], - "src": "3334:17:61" - }, - "scope": 13390, - "src": "3285:106:61", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13378, - "nodeType": "Block", - "src": "3534:37:61", - "statements": [ - { - "expression": { - "id": 13376, - "name": "TAP_COLLECTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13260, - "src": "3551:13:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITAPCollector_$2695", - "typeString": "contract ITAPCollector" - } - }, - "functionReturnParameters": 13375, - "id": 13377, - "nodeType": "Return", - "src": "3544:20:61" - } - ] - }, - "documentation": { - "id": 13370, - "nodeType": "StructuredDocumentation", - "src": "3397:69:61", - "text": " @notice Returns the TAP Collector contract address" - }, - "id": 13379, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_tapCollector", - "nameLocation": "3480:13:61", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13371, - "nodeType": "ParameterList", - "parameters": [], - "src": "3493:2:61" - }, - "returnParameters": { - "id": 13375, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13374, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13379, - "src": "3519:13:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITAPCollector_$2695", - "typeString": "contract ITAPCollector" - }, - "typeName": { - "id": 13373, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13372, - "name": "ITAPCollector", - "nameLocations": [ - "3519:13:61" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2695, - "src": "3519:13:61" - }, - "referencedDeclaration": 2695, - "src": "3519:13:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ITAPCollector_$2695", - "typeString": "contract ITAPCollector" - } - }, - "visibility": "internal" - } - ], - "src": "3518:15:61" - }, - "scope": 13390, - "src": "3471:100:61", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13388, - "nodeType": "Block", - "src": "3701:32:61", - "statements": [ - { - "expression": { - "id": 13386, - "name": "CURATION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13264, - "src": "3718:8:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "functionReturnParameters": 13385, - "id": 13387, - "nodeType": "Return", - "src": "3711:15:61" - } - ] - }, - "documentation": { - "id": 13380, - "nodeType": "StructuredDocumentation", - "src": "3577:64:61", - "text": " @notice Returns the Curation contract address" - }, - "id": 13389, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_curation", - "nameLocation": "3655:9:61", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13381, - "nodeType": "ParameterList", - "parameters": [], - "src": "3664:2:61" - }, - "returnParameters": { - "id": 13385, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13384, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13389, - "src": "3690:9:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - }, - "typeName": { - "id": 13383, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13382, - "name": "ICuration", - "nameLocations": [ - "3690:9:61" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 165, - "src": "3690:9:61" - }, - "referencedDeclaration": 165, - "src": "3690:9:61", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICuration_$165", - "typeString": "contract ICuration" - } - }, - "visibility": "internal" - } - ], - "src": "3689:11:61" - }, - "scope": 13390, - "src": "3646:87:61", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 13391, - "src": "642:3093:61", - "usedErrors": [ - 13282 - ], - "usedEvents": [ - 13275 - ] - } - ], - "src": "45:3691:61" - }, - "id": 61 - } - }, - "contracts": { - "@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol": { - "ITokenGateway": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "l1ERC20", - "type": "address" - } - ], - "name": "calculateL2TokenAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "finalizeInboundTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amunt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPiceBid", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "outboundTransfer", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "calculateL2TokenAddress(address)": "a7e28d48", - "finalizeInboundTransfer(address,address,address,uint256,bytes)": "2e567b36", - "outboundTransfer(address,address,uint256,uint256,uint256,bytes)": "d2ce7d65" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l1ERC20\",\"type\":\"address\"}],\"name\":\"calculateL2TokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"finalizeInboundTransfer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amunt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPiceBid\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"outboundTransfer\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"calculateL2TokenAddress(address)\":{\"details\":\"the L1 and L2 address oracles may not always be in sync. For example, a custom token may have been registered but not deployed or the contract self destructed.\",\"params\":{\"l1ERC20\":\"address of L1 token\"},\"returns\":{\"_0\":\"L2 address of a bridged ERC20 token\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"calculateL2TokenAddress(address)\":{\"notice\":\"Calculate the address used when bridging an ERC20 token\"},\"outboundTransfer(address,address,uint256,uint256,uint256,bytes)\":{\"notice\":\"event deprecated in favor of DepositFinalized and WithdrawalFinalized\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":\"ITokenGateway\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/contracts/contracts/curation/ICuration.sol": { - "ICuration": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_signalIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_tokensOutMin", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokens", - "type": "uint256" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "curationTaxPercentage", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getCurationPoolSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getCurationPoolTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_curator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getCuratorSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "isCurated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_signalOutMin", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_percentage", - "type": "uint32" - } - ], - "name": "setCurationTaxPercentage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_curationTokenMaster", - "type": "address" - } - ], - "name": "setCurationTokenMaster", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_defaultReserveRatio", - "type": "uint32" - } - ], - "name": "setDefaultReserveRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minimumCurationDeposit", - "type": "uint256" - } - ], - "name": "setMinimumCurationDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_signalIn", - "type": "uint256" - } - ], - "name": "signalToTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_tokensIn", - "type": "uint256" - } - ], - "name": "tokensToSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "burn(bytes32,uint256,uint256)": "24bdeec7", - "collect(bytes32,uint256)": "81573288", - "curationTaxPercentage()": "f115c427", - "getCurationPoolSignal(bytes32)": "99439fee", - "getCurationPoolTokens(bytes32)": "46e855da", - "getCuratorSignal(address,bytes32)": "9f94c667", - "isCurated(bytes32)": "4c4ea0ed", - "mint(bytes32,uint256,uint256)": "375a54ab", - "setCurationTaxPercentage(uint32)": "cd18119e", - "setCurationTokenMaster(address)": "9b4d9f33", - "setDefaultReserveRatio(uint32)": "cd0ad4a2", - "setMinimumCurationDeposit(uint256)": "6536fe32", - "signalToTokens(bytes32,uint256)": "0faaf87f", - "tokensToSignal(bytes32,uint256)": "f049b900" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_signalIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokensOutMin\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_tokens\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curationTaxPercentage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getCurationPoolSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getCurationPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_curator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getCuratorSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"isCurated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_tokensIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_signalOutMin\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_percentage\",\"type\":\"uint32\"}],\"name\":\"setCurationTaxPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_curationTokenMaster\",\"type\":\"address\"}],\"name\":\"setCurationTokenMaster\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_defaultReserveRatio\",\"type\":\"uint32\"}],\"name\":\"setDefaultReserveRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minimumCurationDeposit\",\"type\":\"uint256\"}],\"name\":\"setMinimumCurationDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_signalIn\",\"type\":\"uint256\"}],\"name\":\"signalToTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_tokensIn\",\"type\":\"uint256\"}],\"name\":\"tokensToSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the Curation contract (and L2Curation too)\",\"kind\":\"dev\",\"methods\":{\"burn(bytes32,uint256,uint256)\":{\"params\":{\"_signalIn\":\"Amount of signal to return\",\"_subgraphDeploymentID\":\"SubgraphDeployment the curator is returning signal\",\"_tokensOutMin\":\"Expected minimum amount of tokens to receive\"},\"returns\":{\"_0\":\"Tokens returned\"}},\"collect(bytes32,uint256)\":{\"params\":{\"_subgraphDeploymentID\":\"SubgraphDeployment where funds should be allocated as reserves\",\"_tokens\":\"Amount of Graph Tokens to add to reserves\"}},\"curationTaxPercentage()\":{\"returns\":{\"_0\":\"Curation tax percentage expressed in PPM\"}},\"getCurationPoolSignal(bytes32)\":{\"params\":{\"_subgraphDeploymentID\":\"Subgraph deployment curation pool\"},\"returns\":{\"_0\":\"Amount of signal minted for the subgraph deployment\"}},\"getCurationPoolTokens(bytes32)\":{\"params\":{\"_subgraphDeploymentID\":\"Subgraph deployment curation pool\"},\"returns\":{\"_0\":\"Amount of token reserves in the curation pool\"}},\"getCuratorSignal(address,bytes32)\":{\"params\":{\"_curator\":\"Curator owning the signal tokens\",\"_subgraphDeploymentID\":\"Subgraph deployment curation pool\"},\"returns\":{\"_0\":\"Amount of signal owned by a curator for the subgraph deployment\"}},\"isCurated(bytes32)\":{\"params\":{\"_subgraphDeploymentID\":\"SubgraphDeployment to check if curated\"},\"returns\":{\"_0\":\"True if curated, false otherwise\"}},\"mint(bytes32,uint256,uint256)\":{\"params\":{\"_signalOutMin\":\"Expected minimum amount of signal to receive\",\"_subgraphDeploymentID\":\"Subgraph deployment pool from where to mint signal\",\"_tokensIn\":\"Amount of Graph Tokens to deposit\"},\"returns\":{\"_0\":\"Amount of signal minted\",\"_1\":\"Amount of curation tax burned\"}},\"setCurationTaxPercentage(uint32)\":{\"params\":{\"_percentage\":\"Curation tax percentage charged when depositing GRT tokens\"}},\"setCurationTokenMaster(address)\":{\"params\":{\"_curationTokenMaster\":\"Address of implementation contract to use for curation tokens\"}},\"setDefaultReserveRatio(uint32)\":{\"params\":{\"_defaultReserveRatio\":\"Reserve ratio (in PPM)\"}},\"setMinimumCurationDeposit(uint256)\":{\"params\":{\"_minimumCurationDeposit\":\"Minimum amount of tokens required deposit\"}},\"signalToTokens(bytes32,uint256)\":{\"params\":{\"_signalIn\":\"Amount of signal to burn\",\"_subgraphDeploymentID\":\"Subgraph deployment to burn signal\"},\"returns\":{\"_0\":\"Amount of tokens to get for the specified amount of signal\"}},\"tokensToSignal(bytes32,uint256)\":{\"params\":{\"_subgraphDeploymentID\":\"Subgraph deployment to mint signal\",\"_tokensIn\":\"Amount of tokens used to mint signal\"},\"returns\":{\"_0\":\"Amount of signal that can be bought\",\"_1\":\"Amount of tokens that will be burned as curation tax\"}}},\"title\":\"Curation Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burn(bytes32,uint256,uint256)\":{\"notice\":\"Burn _signal from the SubgraphDeployment curation pool\"},\"collect(bytes32,uint256)\":{\"notice\":\"Assign Graph Tokens collected as curation fees to the curation pool reserve.\"},\"curationTaxPercentage()\":{\"notice\":\"Tax charged when curators deposit funds. Parts per million. (Allows for 4 decimal points, 999,999 = 99.9999%)\"},\"getCurationPoolSignal(bytes32)\":{\"notice\":\"Get the amount of signal in a curation pool.\"},\"getCurationPoolTokens(bytes32)\":{\"notice\":\"Get the amount of token reserves in a curation pool.\"},\"getCuratorSignal(address,bytes32)\":{\"notice\":\"Get the amount of signal a curator has in a curation pool.\"},\"isCurated(bytes32)\":{\"notice\":\"Check if any GRT tokens are deposited for a SubgraphDeployment.\"},\"mint(bytes32,uint256,uint256)\":{\"notice\":\"Deposit Graph Tokens in exchange for signal of a SubgraphDeployment curation pool.\"},\"setCurationTaxPercentage(uint32)\":{\"notice\":\"Set the curation tax percentage to charge when a curator deposits GRT tokens.\"},\"setCurationTokenMaster(address)\":{\"notice\":\"Set the master copy to use as clones for the curation token.\"},\"setDefaultReserveRatio(uint32)\":{\"notice\":\"Update the default reserve ratio to `_defaultReserveRatio`\"},\"setMinimumCurationDeposit(uint256)\":{\"notice\":\"Update the minimum deposit amount needed to intialize a new subgraph\"},\"signalToTokens(bytes32,uint256)\":{\"notice\":\"Calculate number of tokens to get when burning signal from a curation pool.\"},\"tokensToSignal(bytes32,uint256)\":{\"notice\":\"Calculate amount of signal that can be bought with tokens in a curation pool. This function considers and excludes the deposit tax.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":\"ICuration\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/contracts/contracts/epochs/IEpochManager.sol": { - "IEpochManager": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "blockHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "blockNum", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentEpoch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentEpochBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentEpochBlockSinceStart", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_epoch", - "type": "uint256" - } - ], - "name": "epochsSince", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "epochsSinceUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isCurrentEpochRun", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "runEpoch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_epochLength", - "type": "uint256" - } - ], - "name": "setEpochLength", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "blockHash(uint256)": "85df51fd", - "blockNum()": "8ae63d6d", - "currentEpoch()": "76671808", - "currentEpochBlock()": "ab93122c", - "currentEpochBlockSinceStart()": "d0cfa46e", - "epochsSince(uint256)": "1b28126d", - "epochsSinceUpdate()": "19c3b82d", - "isCurrentEpochRun()": "1ce05d38", - "runEpoch()": "c46e58eb", - "setEpochLength(uint256)": "54eea796" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"blockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentEpochBlockSinceStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"epochsSince\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochsSinceUpdate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCurrentEpochRun\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"runEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epochLength\",\"type\":\"uint256\"}],\"name\":\"setEpochLength\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":\"IEpochManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/contracts/contracts/governance/IController.sol": { - "IController": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - } - ], - "name": "getContractProxy", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getGovernor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "partialPaused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_contractAddress", - "type": "address" - } - ], - "name": "setContractProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_partialPaused", - "type": "bool" - } - ], - "name": "setPartialPaused", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newPauseGuardian", - "type": "address" - } - ], - "name": "setPauseGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_paused", - "type": "bool" - } - ], - "name": "setPaused", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - } - ], - "name": "unsetContractProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "name": "updateController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "getContractProxy(bytes32)": "f7641a5e", - "getGovernor()": "4fc07d75", - "partialPaused()": "2e292fc7", - "paused()": "5c975abb", - "setContractProxy(bytes32,address)": "e0e99292", - "setPartialPaused(bool)": "56371bd8", - "setPauseGuardian(address)": "48bde20c", - "setPaused(bool)": "16c38b3c", - "unsetContractProxy(bytes32)": "9181df9c", - "updateController(bytes32,address)": "eb5dd94f" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"}],\"name\":\"getContractProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGovernor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"partialPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_contractAddress\",\"type\":\"address\"}],\"name\":\"setContractProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_partialPaused\",\"type\":\"bool\"}],\"name\":\"setPartialPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newPauseGuardian\",\"type\":\"address\"}],\"name\":\"setPauseGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"}],\"name\":\"unsetContractProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"updateController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/governance/IController.sol\":\"IController\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol": { - "IRewardsIssuer": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocationData", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "getSubgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_allocationId", - "type": "address" - } - ], - "name": "isActiveAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "getAllocationData(address)": "55c85269", - "getSubgraphAllocatedTokens(bytes32)": "e2e1e8e9", - "isActiveAllocation(address)": "6a3ca383" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationId\",\"type\":\"address\"}],\"name\":\"isActiveAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getAllocationData(address)\":{\"details\":\"Get allocation data to calculate rewards issuance\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"accRewardsPending\":\"Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed\",\"accRewardsPerAllocatedToken\":\"Rewards snapshot\",\"indexer\":\"The indexer address\",\"subgraphDeploymentId\":\"Subgraph deployment id for the allocation\",\"tokens\":\"Amount of allocated tokens\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"params\":{\"_subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"isActiveAllocation(address)\":{\"params\":{\"_allocationId\":\"Allocation Id\"},\"returns\":{\"_0\":\"Whether or not the allocation is active\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"isActiveAllocation(address)\":{\"notice\":\"Whether or not an allocation is active (i.e open)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":\"IRewardsIssuer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol": { - "IRewardsManager": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_accRewardsPerAllocatedToken", - "type": "uint256" - } - ], - "name": "calcRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getAccRewardsForSubgraph", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "getAccRewardsPerAllocatedToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAccRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNewRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_allocationID", - "type": "address" - } - ], - "name": "getRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "isDenied", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "onSubgraphAllocationUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "onSubgraphSignalUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "bool", - "name": "_deny", - "type": "bool" - } - ], - "name": "setDenied", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_subgraphDeploymentID", - "type": "bytes32[]" - }, - { - "internalType": "bool[]", - "name": "_deny", - "type": "bool[]" - } - ], - "name": "setDeniedMany", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_issuancePerBlock", - "type": "uint256" - } - ], - "name": "setIssuancePerBlock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minimumSubgraphSignal", - "type": "uint256" - } - ], - "name": "setMinimumSubgraphSignal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subgraphAvailabilityOracle", - "type": "address" - } - ], - "name": "setSubgraphAvailabilityOracle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subgraphService", - "type": "address" - } - ], - "name": "setSubgraphService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_allocationID", - "type": "address" - } - ], - "name": "takeRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "updateAccRewardsPerSignal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "calcRewards(uint256,uint256)": "c8a5f81e", - "getAccRewardsForSubgraph(bytes32)": "5c6cbd59", - "getAccRewardsPerAllocatedToken(bytes32)": "702a280e", - "getAccRewardsPerSignal()": "a8cc0ee2", - "getNewRewardsPerSignal()": "e284f848", - "getRewards(address)": "79ee54f7", - "isDenied(bytes32)": "e820e284", - "onSubgraphAllocationUpdate(bytes32)": "eeac3e0e", - "onSubgraphSignalUpdate(bytes32)": "1d1c2fec", - "setDenied(bytes32,bool)": "1324a506", - "setDeniedMany(bytes32[],bool[])": "1debaded", - "setIssuancePerBlock(uint256)": "1156bdc1", - "setMinimumSubgraphSignal(uint256)": "4bbfc1c5", - "setSubgraphAvailabilityOracle(address)": "0903c094", - "setSubgraphService(address)": "93a90a1e", - "takeRewards(address)": "db750926", - "updateAccRewardsPerSignal()": "c7d1117d" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_accRewardsPerAllocatedToken\",\"type\":\"uint256\"}],\"name\":\"calcRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getAccRewardsForSubgraph\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"getAccRewardsPerAllocatedToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAccRewardsPerSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewRewardsPerSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationID\",\"type\":\"address\"}],\"name\":\"getRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"isDenied\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"onSubgraphAllocationUpdate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"onSubgraphSignalUpdate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_deny\",\"type\":\"bool\"}],\"name\":\"setDenied\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_subgraphDeploymentID\",\"type\":\"bytes32[]\"},{\"internalType\":\"bool[]\",\"name\":\"_deny\",\"type\":\"bool[]\"}],\"name\":\"setDeniedMany\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_issuancePerBlock\",\"type\":\"uint256\"}],\"name\":\"setIssuancePerBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minimumSubgraphSignal\",\"type\":\"uint256\"}],\"name\":\"setMinimumSubgraphSignal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_subgraphAvailabilityOracle\",\"type\":\"address\"}],\"name\":\"setSubgraphAvailabilityOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_subgraphService\",\"type\":\"address\"}],\"name\":\"setSubgraphService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationID\",\"type\":\"address\"}],\"name\":\"takeRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateAccRewardsPerSignal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":\"IRewardsManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/contracts/contracts/token/IGraphToken.sol": { - "IGraphToken": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "addMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "isMinter", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "removeMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "addMinter(address)": "983b2d56", - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "burn(uint256)": "42966c68", - "burnFrom(address,uint256)": "79cc6790", - "decreaseAllowance(address,uint256)": "a457c2d7", - "increaseAllowance(address,uint256)": "39509351", - "isMinter(address)": "aa271e1a", - "mint(address,uint256)": "40c10f19", - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", - "removeMinter(address)": "3092afd5", - "renounceMinter()": "98650275", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":\"IGraphToken\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/contracts/contracts/utils/TokenUtils.sol": { - "TokenUtils": { - "abi": [], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201c1aca3d33c0081dcadf834ba40cbb01ef858105de15d5ed6c82f51ded094d7564736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR BYTE 0xCA RETURNDATASIZE CALLER 0xC0 ADDMOD SAR 0xCA 0xDF DUP4 0x4B LOG4 0xC 0xBB ADD 0xEF DUP6 DUP2 SDIV 0xDE ISZERO 0xD5 0xED PUSH13 0x82F51DED094D7564736F6C6343 STOP ADDMOD SHL STOP CALLER ", - "sourceMap": "357:1203:7:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;357:1203:7;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201c1aca3d33c0081dcadf834ba40cbb01ef858105de15d5ed6c82f51ded094d7564736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR BYTE 0xCA RETURNDATASIZE CALLER 0xC0 ADDMOD SAR 0xCA 0xDF DUP4 0x4B LOG4 0xC 0xBB ADD 0xEF DUP6 DUP2 SDIV 0xDE ISZERO 0xD5 0xED PUSH13 0x82F51DED094D7564736F6C6343 STOP ADDMOD SHL STOP CALLER ", - "sourceMap": "357:1203:7:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"TokenUtils library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library contains utility functions for handling tokens (transfers and burns). It is specifically adapted for the GraphToken, so does not need to handle edge cases for other tokens.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":\"TokenUtils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":{\"keccak256\":\"0x7bd336193785ed6f09a3bd847f9208f64aa9b87ad67c40838d00fec41bb153d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d96d83cdb9bbb567e4eafac8bdef3ff6bdaf426338baf76bae277c11afb33cee\",\"dweb:/ipfs/QmNjr4PiJ76Wc5mFqa9H88BjsEMrUfy1jiftNHYTgd6Mp5\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/data-service/DataService.sol": { - "DataService": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidRange", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ProvisionManagerNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionManagerProvisionNotFound", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "ratio", - "type": "uint32" - } - ], - "name": "DelegationRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionTokensRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "min", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "max", - "type": "uint64" - } - ], - "name": "ThawingPeriodRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "min", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "VerifierCutRangeSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", - "collect(address,uint8,bytes)": "b15d2a2c", - "delegationRatio()": "bfdfa7af", - "getDelegationRatio()": "1ebb7c30", - "getProvisionTokensRange()": "819ba366", - "getThawingPeriodRange()": "71ce020a", - "getVerifierCutRange()": "482468b7", - "maximumProvisionTokens()": "73371823", - "maximumThawingPeriod()": "9aafa5d1", - "maximumVerifierCut()": "9249c5c1", - "minimumProvisionTokens()": "36fdd28a", - "minimumThawingPeriod()": "8d2f2948", - "minimumVerifierCut()": "88812583", - "register(address,bytes)": "24b8fbf6", - "slash(address,bytes)": "cb8347fe", - "startService(address,bytes)": "dedf6726", - "stopService(address,bytes)": "8180083b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IDataService} interface.A note on upgradeability: this base contract can be inherited by upgradeable or non upgradeable contracts. - If the data service implementation is upgradeable, it must initialize the contract via an external initializer function with the `initializer` modifier that calls {__DataService_init} or {__DataService_init_unchained}. It's recommended the implementation constructor to also call {_disableInitializers} to prevent the implementation from being initialized. - If the data service implementation is NOT upgradeable, it must initialize the contract by calling {__DataService_init} or {__DataService_init_unchained} in the constructor. Note that the `initializer` will be required in the constructor.\",\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"constructor\":{\"details\":\"Addresses in GraphDirectory are immutables, they can only be set in this constructor.\",\"params\":{\"controller\":\"The address of the Graph Horizon controller contract.\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"DataService contract\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"getDelegationRatio()\":{\"notice\":\"See {IDataService-getDelegationRatio}.\"},\"getProvisionTokensRange()\":{\"notice\":\"See {IDataService-getProvisionTokensRange}.\"},\"getThawingPeriodRange()\":{\"notice\":\"See {IDataService-getThawingPeriodRange}.\"},\"getVerifierCutRange()\":{\"notice\":\"See {IDataService-getVerifierCutRange}.\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"This implementation provides base functionality for a data service: - GraphDirectory, allows the data service to interact with Graph Horizon contracts - ProvisionManager, provides functionality to manage provisions The derived contract MUST implement all the interfaces described in {IDataService} and in accordance with the Data Service framework.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":\"DataService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":{\"keccak256\":\"0x72d1f60db2ba0d65de99869a98ee0ae43dab30a474415c3ee349458b71f97439\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f59f760342a177e107bd1323ad62a0346d2845ea49554380d625107aafd69a30\",\"dweb:/ipfs/QmaovA9tVpp3yS3KtWqsRQwWK5TNyJeF1BZFuTFR6mhCiL\"]},\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 2134, - "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", - "label": "minimumProvisionTokens", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 2137, - "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", - "label": "maximumProvisionTokens", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2140, - "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", - "label": "minimumThawingPeriod", - "offset": 0, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2143, - "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", - "label": "maximumThawingPeriod", - "offset": 8, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2146, - "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", - "label": "minimumVerifierCut", - "offset": 16, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2149, - "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", - "label": "maximumVerifierCut", - "offset": 20, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2152, - "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", - "label": "delegationRatio", - "offset": 24, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2157, - "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", - "label": "__gap", - "offset": 0, - "slot": "3", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 703, - "contract": "@graphprotocol/horizon/contracts/data-service/DataService.sol:DataService", - "label": "__gap", - "offset": 0, - "slot": "53", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - } - } - } - } - }, - "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol": { - "DataServiceV1Storage": { - "abi": [], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":\"DataServiceV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 703, - "contract": "@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol:DataServiceV1Storage", - "label": "__gap", - "offset": 0, - "slot": "0", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } - } - }, - "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol": { - "DataServiceFees": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "DataServiceFeesClaimNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "DataServiceFeesZeroTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListEmptyList", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidIterations", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidRange", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ProvisionManagerNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionManagerProvisionNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokensAvailable", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensRequired", - "type": "uint256" - } - ], - "name": "ProvisionTrackerInsufficientTokens", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "ratio", - "type": "uint32" - } - ], - "name": "DelegationRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionTokensRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unlockTimestamp", - "type": "uint256" - } - ], - "name": "StakeClaimLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - } - ], - "name": "StakeClaimReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "claimsCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReleased", - "type": "uint256" - } - ], - "name": "StakeClaimsReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "min", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "max", - "type": "uint64" - } - ], - "name": "ThawingPeriodRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "min", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "VerifierCutRangeSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "claims", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "nextClaim", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "claimsLists", - "outputs": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "feesProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numClaimsToRelease", - "type": "uint256" - } - ], - "name": "releaseStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", - "claims(bytes32)": "eff0f592", - "claimsLists(address)": "13c474c9", - "collect(address,uint8,bytes)": "b15d2a2c", - "delegationRatio()": "bfdfa7af", - "feesProvisionTracker(address)": "cbe5f3f2", - "getDelegationRatio()": "1ebb7c30", - "getProvisionTokensRange()": "819ba366", - "getThawingPeriodRange()": "71ce020a", - "getVerifierCutRange()": "482468b7", - "maximumProvisionTokens()": "73371823", - "maximumThawingPeriod()": "9aafa5d1", - "maximumVerifierCut()": "9249c5c1", - "minimumProvisionTokens()": "36fdd28a", - "minimumThawingPeriod()": "8d2f2948", - "minimumVerifierCut()": "88812583", - "register(address,bytes)": "24b8fbf6", - "releaseStake(uint256)": "45f54485", - "slash(address,bytes)": "cb8347fe", - "startService(address,bytes)": "dedf6726", - "stopService(address,bytes)": "8180083b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"DataServiceFeesClaimNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataServiceFeesZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListEmptyList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidIterations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensAvailable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensRequired\",\"type\":\"uint256\"}],\"name\":\"ProvisionTrackerInsufficientTokens\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}],\"name\":\"StakeClaimLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"}],\"name\":\"StakeClaimReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"claimsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReleased\",\"type\":\"uint256\"}],\"name\":\"StakeClaimsReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"claims\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nextClaim\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"claimsLists\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"feesProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numClaimsToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IDataServiceFees} interface.\",\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens to lock in the claim\",\"unlockTimestamp\":\"The timestamp when the tokens can be released\"}},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"releasableAt\":\"The timestamp when the tokens were released\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens released\"}},\"StakeClaimsReleased(address,uint256,uint256)\":{\"params\":{\"claimsCount\":\"The number of stake claims being released\",\"serviceProvider\":\"The address of the service provider\",\"tokensReleased\":\"The total amount of tokens being released\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"DataServiceFees contract\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServiceFeesClaimNotFound(bytes32)\":[{\"notice\":\"Thrown when attempting to get a stake claim that does not exist.\"}],\"DataServiceFeesZeroTokens()\":[{\"notice\":\"Emitted when trying to lock zero tokens in a stake claim\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"LinkedListEmptyList()\":[{\"notice\":\"Thrown when trying to remove an item from an empty list\"}],\"LinkedListInvalidIterations()\":[{\"notice\":\"Thrown when trying to traverse a list with more iterations than elements\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}],\"ProvisionTrackerInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when trying to lock more tokens than available\"}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is created and stake is locked.\"},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is released and stake is unlocked.\"},\"StakeClaimsReleased(address,uint256,uint256)\":{\"notice\":\"Emitted when a series of stake claims are released.\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"claims(bytes32)\":{\"notice\":\"List of all locked stake claims to be released to service providers\"},\"claimsLists(address)\":{\"notice\":\"Service providers registered in the data service\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"getDelegationRatio()\":{\"notice\":\"See {IDataService-getDelegationRatio}.\"},\"getProvisionTokensRange()\":{\"notice\":\"See {IDataService-getProvisionTokensRange}.\"},\"getThawingPeriodRange()\":{\"notice\":\"See {IDataService-getThawingPeriodRange}.\"},\"getVerifierCutRange()\":{\"notice\":\"See {IDataService-getVerifierCutRange}.\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"releaseStake(uint256)\":{\"notice\":\"See {IDataServiceFees-releaseStake}\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"Extension for the {IDataService} contract to handle payment collateralization using a Horizon provision. See {IDataServiceFees} for more details.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol\":\"DataServiceFees\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":{\"keccak256\":\"0x72d1f60db2ba0d65de99869a98ee0ae43dab30a474415c3ee349458b71f97439\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f59f760342a177e107bd1323ad62a0346d2845ea49554380d625107aafd69a30\",\"dweb:/ipfs/QmaovA9tVpp3yS3KtWqsRQwWK5TNyJeF1BZFuTFR6mhCiL\"]},\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol\":{\"keccak256\":\"0x136536e55b4a7ee042b368f32e771e6fe5aa512d89e3eb3e53bc65133a61ec7e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4cd6aa727129b4d30db958f0fb814fe9313da691340af3998baa283bd0c0d3a4\",\"dweb:/ipfs/QmZfakV8Gemw3o6SLQJjZ3m4gYkaFi4VMuQ5jnDJzyhia4\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol\":{\"keccak256\":\"0xfc2ead98c0a29cf14523745ccb07cbd568ba3299bffe5f9c3bec9dad7bf00562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a27545f89d99c54e8acd01d510b31e97500c75a4ace58f2986ab01eb1f0ff13\",\"dweb:/ipfs/QmeBPV1QfdTM6M9q478k512hKSr7kWsKwfEESdDimHQaoH\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":{\"keccak256\":\"0x9012127a1b1dc8a3f75ad49925632faecca8bcb46f42ab7d1ac0af83a7514f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b002f1f6759e7ced37f161706bc4b787ba7534fb4326ae7ab395270926292c42\",\"dweb:/ipfs/QmRVDPWMbrijk14sywXTbnKdueVBgADBB7h8F9aGA4DgSZ\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 2134, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "minimumProvisionTokens", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 2137, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "maximumProvisionTokens", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2140, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "minimumThawingPeriod", - "offset": 0, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2143, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "maximumThawingPeriod", - "offset": 8, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2146, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "minimumVerifierCut", - "offset": 16, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2149, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "maximumVerifierCut", - "offset": 20, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2152, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "delegationRatio", - "offset": 24, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2157, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "__gap", - "offset": 0, - "slot": "3", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 703, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "__gap", - "offset": 0, - "slot": "53", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 1063, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "feesProvisionTracker", - "offset": 0, - "slot": "103", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 1069, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "claims", - "offset": 0, - "slot": "104", - "type": "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)" - }, - { - "astId": 1075, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "claimsLists", - "offset": 0, - "slot": "105", - "type": "t_mapping(t_address,t_struct(List)3813_storage)" - }, - { - "astId": 1080, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "__gap", - "offset": 0, - "slot": "106", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(List)3813_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LinkedList.List)", - "numberOfBytes": "32", - "value": "t_struct(List)3813_storage" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)", - "numberOfBytes": "32", - "value": "t_struct(StakeClaim)1335_storage" - }, - "t_struct(List)3813_storage": { - "encoding": "inplace", - "label": "struct LinkedList.List", - "members": [ - { - "astId": 3806, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "head", - "offset": 0, - "slot": "0", - "type": "t_bytes32" - }, - { - "astId": 3808, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "tail", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 3810, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "nonce", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 3812, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "count", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_struct(StakeClaim)1335_storage": { - "encoding": "inplace", - "label": "struct IDataServiceFees.StakeClaim", - "members": [ - { - "astId": 1328, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "tokens", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 1330, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "createdAt", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 1332, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "releasableAt", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 1334, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol:DataServiceFees", - "label": "nextClaim", - "offset": 0, - "slot": "3", - "type": "t_bytes32" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - } - } - } - } - }, - "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol": { - "DataServiceFeesV1Storage": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "claims", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "nextClaim", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "claimsLists", - "outputs": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "feesProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "claims(bytes32)": "eff0f592", - "claimsLists(address)": "13c474c9", - "feesProvisionTracker(address)": "cbe5f3f2" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"claims\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nextClaim\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"claimsLists\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"feesProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"}},\"title\":\"Storage layout for the {DataServiceFees} extension contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"claims(bytes32)\":{\"notice\":\"List of all locked stake claims to be released to service providers\"},\"claimsLists(address)\":{\"notice\":\"Service providers registered in the data service\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol\":\"DataServiceFeesV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol\":{\"keccak256\":\"0xfc2ead98c0a29cf14523745ccb07cbd568ba3299bffe5f9c3bec9dad7bf00562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a27545f89d99c54e8acd01d510b31e97500c75a4ace58f2986ab01eb1f0ff13\",\"dweb:/ipfs/QmeBPV1QfdTM6M9q478k512hKSr7kWsKwfEESdDimHQaoH\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 1063, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "feesProvisionTracker", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 1069, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "claims", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)" - }, - { - "astId": 1075, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "claimsLists", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_struct(List)3813_storage)" - }, - { - "astId": 1080, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "__gap", - "offset": 0, - "slot": "3", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(List)3813_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LinkedList.List)", - "numberOfBytes": "32", - "value": "t_struct(List)3813_storage" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)", - "numberOfBytes": "32", - "value": "t_struct(StakeClaim)1335_storage" - }, - "t_struct(List)3813_storage": { - "encoding": "inplace", - "label": "struct LinkedList.List", - "members": [ - { - "astId": 3806, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "head", - "offset": 0, - "slot": "0", - "type": "t_bytes32" - }, - { - "astId": 3808, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "tail", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 3810, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "nonce", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 3812, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "count", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_struct(StakeClaim)1335_storage": { - "encoding": "inplace", - "label": "struct IDataServiceFees.StakeClaim", - "members": [ - { - "astId": 1328, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "tokens", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 1330, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "createdAt", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 1332, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "releasableAt", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 1334, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol:DataServiceFeesV1Storage", - "label": "nextClaim", - "offset": 0, - "slot": "3", - "type": "t_bytes32" - } - ], - "numberOfBytes": "128" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } - } - }, - "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol": { - "DataServicePausableUpgradeable": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "DataServicePausableNotPauseGuardian", - "type": "error" - }, - { - "inputs": [], - "name": "EnforcedPause", - "type": "error" - }, - { - "inputs": [], - "name": "ExpectedPause", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidRange", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ProvisionManagerNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionManagerProvisionNotFound", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "ratio", - "type": "uint32" - } - ], - "name": "DelegationRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "PauseGuardianSet", - "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": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionTokensRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "min", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "max", - "type": "uint64" - } - ], - "name": "ThawingPeriodRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "min", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "VerifierCutRangeSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - } - ], - "name": "pauseGuardians", - "outputs": [ - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", - "collect(address,uint8,bytes)": "b15d2a2c", - "delegationRatio()": "bfdfa7af", - "getDelegationRatio()": "1ebb7c30", - "getProvisionTokensRange()": "819ba366", - "getThawingPeriodRange()": "71ce020a", - "getVerifierCutRange()": "482468b7", - "maximumProvisionTokens()": "73371823", - "maximumThawingPeriod()": "9aafa5d1", - "maximumVerifierCut()": "9249c5c1", - "minimumProvisionTokens()": "36fdd28a", - "minimumThawingPeriod()": "8d2f2948", - "minimumVerifierCut()": "88812583", - "pause()": "8456cb59", - "pauseGuardians(address)": "9384e078", - "paused()": "5c975abb", - "register(address,bytes)": "24b8fbf6", - "slash(address,bytes)": "cb8347fe", - "startService(address,bytes)": "dedf6726", - "stopService(address,bytes)": "8180083b", - "unpause()": "3f4ba83a" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DataServicePausableNotPauseGuardian\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"PauseGuardianSet\",\"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\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pauseGuardian\",\"type\":\"address\"}],\"name\":\"pauseGuardians\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IDataServicePausable} interface.Upgradeable version of the {DataServicePausable} contract.\",\"errors\":{\"DataServicePausableNotPauseGuardian(address)\":[{\"params\":{\"account\":\"The address of the pause guardian\"}}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"PauseGuardianSet(address,bool)\":{\"params\":{\"account\":\"The address of the pause guardian\",\"allowed\":\"The allowed status of the pause guardian\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"DataServicePausableUpgradeable contract\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServicePausableNotPauseGuardian(address)\":[{\"notice\":\"Emitted when a the caller is not a pause guardian\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"PauseGuardianSet(address,bool)\":{\"notice\":\"Emitted when a pause guardian is set.\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"getDelegationRatio()\":{\"notice\":\"See {IDataService-getDelegationRatio}.\"},\"getProvisionTokensRange()\":{\"notice\":\"See {IDataService-getProvisionTokensRange}.\"},\"getThawingPeriodRange()\":{\"notice\":\"See {IDataService-getThawingPeriodRange}.\"},\"getVerifierCutRange()\":{\"notice\":\"See {IDataService-getVerifierCutRange}.\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"},\"pause()\":{\"notice\":\"See {IDataServicePausable-pause}\"},\"pauseGuardians(address)\":{\"notice\":\"List of pause guardians and their allowed status\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"},\"unpause()\":{\"notice\":\"See {IDataServicePausable-pause}\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol\":\"DataServicePausableUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":{\"keccak256\":\"0x72d1f60db2ba0d65de99869a98ee0ae43dab30a474415c3ee349458b71f97439\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f59f760342a177e107bd1323ad62a0346d2845ea49554380d625107aafd69a30\",\"dweb:/ipfs/QmaovA9tVpp3yS3KtWqsRQwWK5TNyJeF1BZFuTFR6mhCiL\"]},\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol\":{\"keccak256\":\"0xbb8e8d819d97570ccdcd5a6fafd8c43880016f71f6ce1eb4a2f260a1eaf6da5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9f72b98fb9e707e88da2bd496102f0142e55a614c1b65319d4a09ee28b73f227\",\"dweb:/ipfs/Qma93cnXPBKf8qoVbWnQpKiffPwpzE837WncTo3Mx3v42H\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol\":{\"keccak256\":\"0xdf6f1f87857eaa5824747e81aed89f11d52e34400077d341f66165631772ccd2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5fd53c4e7571f1efe15ef3fdf291cec2cb282f5a617c8986eae00f56741b4c6\",\"dweb:/ipfs/QmX1WQNc5XJDgDT6aEv779DAgWzY7Uby8obF2Fey3m1WnE\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 2134, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "minimumProvisionTokens", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 2137, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "maximumProvisionTokens", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2140, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "minimumThawingPeriod", - "offset": 0, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2143, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "maximumThawingPeriod", - "offset": 8, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2146, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "minimumVerifierCut", - "offset": 16, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2149, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "maximumVerifierCut", - "offset": 20, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2152, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "delegationRatio", - "offset": 24, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2157, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "__gap", - "offset": 0, - "slot": "3", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 703, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "__gap", - "offset": 0, - "slot": "53", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 1101, - "contract": "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol:DataServicePausableUpgradeable", - "label": "pauseGuardians", - "offset": 0, - "slot": "103", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - } - } - } - } - }, - "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol": { - "IDataService": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", - "collect(address,uint8,bytes)": "b15d2a2c", - "getDelegationRatio()": "1ebb7c30", - "getProvisionTokensRange()": "819ba366", - "getThawingPeriodRange()": "71ce020a", - "getVerifierCutRange()": "482468b7", - "register(address,bytes)": "24b8fbf6", - "slash(address,bytes)": "cb8347fe", - "startService(address,bytes)": "dedf6726", - "stopService(address,bytes)": "8180083b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This interface is expected to be inherited and extended by a data service interface. It can be used to interact with it however it's advised to use the more specific parent interface.\",\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getProvisionTokensRange()\":{\"returns\":{\"_0\":\"Minimum provision tokens allowed\",\"_1\":\"Maximum provision tokens allowed\"}},\"getThawingPeriodRange()\":{\"returns\":{\"_0\":\"Minimum thawing period allowed\",\"_1\":\"Maximum thawing period allowed\"}},\"getVerifierCutRange()\":{\"returns\":{\"_0\":\"Minimum verifier cut allowed\",\"_1\":\"Maximum verifier cut allowed\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"Interface of the base {DataService} contract as defined by the Graph Horizon specification.\",\"version\":1},\"userdoc\":{\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getProvisionTokensRange()\":{\"notice\":\"External getter for the provision tokens range\"},\"getThawingPeriodRange()\":{\"notice\":\"External getter for the thawing period range\"},\"getVerifierCutRange()\":{\"notice\":\"External getter for the verifier cut range\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"This interface provides a guardrail for contracts that use the Data Service framework to implement a data service on Graph Horizon. Much of the specification is intentionally loose to allow for greater flexibility when designing a data service. It's not possible to guarantee that an implementation will honor the Data Service framework guidelines so it's advised to always review the implementation code and the documentation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":\"IDataService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol": { - "IDataServiceFees": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "DataServiceFeesClaimNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "DataServiceFeesZeroTokens", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unlockTimestamp", - "type": "uint256" - } - ], - "name": "StakeClaimLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - } - ], - "name": "StakeClaimReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "claimsCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReleased", - "type": "uint256" - } - ], - "name": "StakeClaimsReleased", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numClaimsToRelease", - "type": "uint256" - } - ], - "name": "releaseStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", - "collect(address,uint8,bytes)": "b15d2a2c", - "getDelegationRatio()": "1ebb7c30", - "getProvisionTokensRange()": "819ba366", - "getThawingPeriodRange()": "71ce020a", - "getVerifierCutRange()": "482468b7", - "register(address,bytes)": "24b8fbf6", - "releaseStake(uint256)": "45f54485", - "slash(address,bytes)": "cb8347fe", - "startService(address,bytes)": "dedf6726", - "stopService(address,bytes)": "8180083b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"DataServiceFeesClaimNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataServiceFeesZeroTokens\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}],\"name\":\"StakeClaimLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"}],\"name\":\"StakeClaimReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"claimsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReleased\",\"type\":\"uint256\"}],\"name\":\"StakeClaimsReleased\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numClaimsToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Note that this implementation uses the entire provisioned stake as collateral for the payment. It can be used to provide economic security for the payments collected as long as the provisioned stake is not being used for other purposes.\",\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens to lock in the claim\",\"unlockTimestamp\":\"The timestamp when the tokens can be released\"}},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"releasableAt\":\"The timestamp when the tokens were released\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens released\"}},\"StakeClaimsReleased(address,uint256,uint256)\":{\"params\":{\"claimsCount\":\"The number of stake claims being released\",\"serviceProvider\":\"The address of the service provider\",\"tokensReleased\":\"The total amount of tokens being released\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getProvisionTokensRange()\":{\"returns\":{\"_0\":\"Minimum provision tokens allowed\",\"_1\":\"Maximum provision tokens allowed\"}},\"getThawingPeriodRange()\":{\"returns\":{\"_0\":\"Minimum thawing period allowed\",\"_1\":\"Maximum thawing period allowed\"}},\"getVerifierCutRange()\":{\"returns\":{\"_0\":\"Minimum verifier cut allowed\",\"_1\":\"Maximum verifier cut allowed\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"releaseStake(uint256)\":{\"details\":\"This function is only meant to be called if the service provider has enough stake claims that releasing them all at once would exceed the block gas limit.This function can be overriden and/or disabled.Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\",\"params\":{\"numClaimsToRelease\":\"Amount of stake claims to process. If 0, all stake claims are processed.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"Interface for the {DataServiceFees} contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServiceFeesClaimNotFound(bytes32)\":[{\"notice\":\"Thrown when attempting to get a stake claim that does not exist.\"}],\"DataServiceFeesZeroTokens()\":[{\"notice\":\"Emitted when trying to lock zero tokens in a stake claim\"}]},\"events\":{\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is created and stake is locked.\"},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is released and stake is unlocked.\"},\"StakeClaimsReleased(address,uint256,uint256)\":{\"notice\":\"Emitted when a series of stake claims are released.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getProvisionTokensRange()\":{\"notice\":\"External getter for the provision tokens range\"},\"getThawingPeriodRange()\":{\"notice\":\"External getter for the thawing period range\"},\"getVerifierCutRange()\":{\"notice\":\"External getter for the verifier cut range\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"releaseStake(uint256)\":{\"notice\":\"Releases expired stake claims for the caller.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"Extension for the {IDataService} contract to handle payment collateralization using a Horizon provision. It's designed to be used with the Data Service framework: - When a service provider collects payment with {IDataService.collect} the data service should lock stake to back the payment using {_lockStake}. - Every time there is a payment collection with {IDataService.collect}, the data service should attempt to release any expired stake claims by calling {_releaseStake}. - Stake claims can also be manually released by calling {releaseStake} directly.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":\"IDataServiceFees\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol": { - "IDataServicePausable": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "DataServicePausableNotPauseGuardian", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "PauseGuardianSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", - "collect(address,uint8,bytes)": "b15d2a2c", - "getDelegationRatio()": "1ebb7c30", - "getProvisionTokensRange()": "819ba366", - "getThawingPeriodRange()": "71ce020a", - "getVerifierCutRange()": "482468b7", - "pause()": "8456cb59", - "register(address,bytes)": "24b8fbf6", - "slash(address,bytes)": "cb8347fe", - "startService(address,bytes)": "dedf6726", - "stopService(address,bytes)": "8180083b", - "unpause()": "3f4ba83a" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DataServicePausableNotPauseGuardian\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"PauseGuardianSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"DataServicePausableNotPauseGuardian(address)\":[{\"params\":{\"account\":\"The address of the pause guardian\"}}]},\"events\":{\"PauseGuardianSet(address,bool)\":{\"params\":{\"account\":\"The address of the pause guardian\",\"allowed\":\"The allowed status of the pause guardian\"}},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getProvisionTokensRange()\":{\"returns\":{\"_0\":\"Minimum provision tokens allowed\",\"_1\":\"Maximum provision tokens allowed\"}},\"getThawingPeriodRange()\":{\"returns\":{\"_0\":\"Minimum thawing period allowed\",\"_1\":\"Maximum thawing period allowed\"}},\"getVerifierCutRange()\":{\"returns\":{\"_0\":\"Minimum verifier cut allowed\",\"_1\":\"Maximum verifier cut allowed\"}},\"pause()\":{\"details\":\"Note that only functions using the modifiers `whenNotPaused` and `whenPaused` will be affected by the pause. Requirements: - The contract must not be already paused\"},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"unpause()\":{\"details\":\"Note that only functions using the modifiers `whenNotPaused` and `whenPaused` will be affected by the pause. Requirements: - The contract must be paused\"}},\"title\":\"Interface for the {DataServicePausable} contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServicePausableNotPauseGuardian(address)\":[{\"notice\":\"Emitted when a the caller is not a pause guardian\"}]},\"events\":{\"PauseGuardianSet(address,bool)\":{\"notice\":\"Emitted when a pause guardian is set.\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getProvisionTokensRange()\":{\"notice\":\"External getter for the provision tokens range\"},\"getThawingPeriodRange()\":{\"notice\":\"External getter for the thawing period range\"},\"getVerifierCutRange()\":{\"notice\":\"External getter for the verifier cut range\"},\"pause()\":{\"notice\":\"Pauses the data service.\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"},\"unpause()\":{\"notice\":\"Unpauses the data service.\"}},\"notice\":\"Extension for the {IDataService} contract, adds pausing functionality to the data service. Pausing is controlled by privileged accounts called pause guardians.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol\":\"IDataServicePausable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol\":{\"keccak256\":\"0xdf6f1f87857eaa5824747e81aed89f11d52e34400077d341f66165631772ccd2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5fd53c4e7571f1efe15ef3fdf291cec2cb282f5a617c8986eae00f56741b4c6\",\"dweb:/ipfs/QmX1WQNc5XJDgDT6aEv779DAgWzY7Uby8obF2Fey3m1WnE\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol": { - "ProvisionTracker": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokensAvailable", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensRequired", - "type": "uint256" - } - ], - "name": "ProvisionTrackerInsufficientTokens", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208f431a5ba6a6ac3d7ca1fb0f10a15390bac52fb5e28c8b8ae63afb4d5842ba5164736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 NUMBER BYTE JUMPDEST 0xA6 0xA6 0xAC RETURNDATASIZE PUSH29 0xA1FB0F10A15390BAC52FB5E28C8B8AE63AFB4D5842BA5164736F6C6343 STOP ADDMOD SHL STOP CALLER ", - "sourceMap": "639:2746:16:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;639:2746:16;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208f431a5ba6a6ac3d7ca1fb0f10a15390bac52fb5e28c8b8ae63afb4d5842ba5164736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 NUMBER BYTE JUMPDEST 0xA6 0xA6 0xAC RETURNDATASIZE PUSH29 0xA1FB0F10A15390BAC52FB5E28C8B8AE63AFB4D5842BA5164736F6C6343 STOP ADDMOD SHL STOP CALLER ", - "sourceMap": "639:2746:16:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensAvailable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensRequired\",\"type\":\"uint256\"}],\"name\":\"ProvisionTrackerInsufficientTokens\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"ProvisionTracker library\",\"version\":1},\"userdoc\":{\"errors\":{\"ProvisionTrackerInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when trying to lock more tokens than available\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to facilitate tracking of \\\"used tokens\\\" on Graph Horizon provisions. This can be used to ensure data services have enough economic security (provisioned stake) to back the payments they collect for their services. The library provides two primitives, lock and release to signal token usage and free up tokens respectively. It does not make any assumptions about the conditions under which tokens are locked or released.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":\"ProvisionTracker\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":{\"keccak256\":\"0x9012127a1b1dc8a3f75ad49925632faecca8bcb46f42ab7d1ac0af83a7514f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b002f1f6759e7ced37f161706bc4b787ba7534fb4326ae7ab395270926292c42\",\"dweb:/ipfs/QmRVDPWMbrijk14sywXTbnKdueVBgADBB7h8F9aGA4DgSZ\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol": { - "ProvisionManager": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidRange", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ProvisionManagerNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionManagerProvisionNotFound", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "ratio", - "type": "uint32" - } - ], - "name": "DelegationRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionTokensRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "min", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "max", - "type": "uint64" - } - ], - "name": "ThawingPeriodRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "min", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "VerifierCutRangeSet", - "type": "event" - }, - { - "inputs": [], - "name": "delegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "delegationRatio()": "bfdfa7af", - "maximumProvisionTokens()": "73371823", - "maximumThawingPeriod()": "9aafa5d1", - "maximumVerifierCut()": "9249c5c1", - "minimumProvisionTokens()": "36fdd28a", - "minimumThawingPeriod()": "8d2f2948", - "minimumVerifierCut()": "88812583" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Provides utilities to verify provision parameters are within an acceptable range. Each parameter has an overridable setter and getter for the validity range, and a checker that reverts if the parameter is out of range. The parameters are: - Provision parameters (thawing period and verifier cut) - Provision tokens\",\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{},\"title\":\"ProvisionManager contract\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}]},\"events\":{\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"}},\"notice\":\"A helper contract that implements several provision management functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":\"ProvisionManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 2134, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", - "label": "minimumProvisionTokens", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 2137, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", - "label": "maximumProvisionTokens", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2140, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", - "label": "minimumThawingPeriod", - "offset": 0, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2143, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", - "label": "maximumThawingPeriod", - "offset": 8, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2146, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", - "label": "minimumVerifierCut", - "offset": 16, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2149, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", - "label": "maximumVerifierCut", - "offset": 20, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2152, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", - "label": "delegationRatio", - "offset": 24, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2157, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol:ProvisionManager", - "label": "__gap", - "offset": 0, - "slot": "3", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - } - } - } - } - }, - "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol": { - "ProvisionManagerV1Storage": { - "abi": [ - { - "inputs": [], - "name": "delegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "delegationRatio()": "bfdfa7af", - "maximumProvisionTokens()": "73371823", - "maximumThawingPeriod()": "9aafa5d1", - "maximumVerifierCut()": "9249c5c1", - "minimumProvisionTokens()": "36fdd28a", - "minimumThawingPeriod()": "8d2f2948", - "minimumVerifierCut()": "88812583" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"},\"delegationRatio\":{\"details\":\"Max calculated as service provider's stake * delegationRatio\"}},\"title\":\"Storage layout for the {ProvisionManager} helper contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":\"ProvisionManagerV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 2134, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", - "label": "minimumProvisionTokens", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 2137, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", - "label": "maximumProvisionTokens", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2140, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", - "label": "minimumThawingPeriod", - "offset": 0, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2143, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", - "label": "maximumThawingPeriod", - "offset": 8, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2146, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", - "label": "minimumVerifierCut", - "offset": 16, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2149, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", - "label": "maximumVerifierCut", - "offset": 20, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2152, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", - "label": "delegationRatio", - "offset": 24, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2157, - "contract": "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol:ProvisionManagerV1Storage", - "label": "__gap", - "offset": 0, - "slot": "3", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - } - } - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol": { - "IGraphPayments": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "GraphPaymentsInsufficientTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "protocolPaymentCut", - "type": "uint256" - } - ], - "name": "GraphPaymentsInvalidProtocolPaymentCut", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReceiver", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDelegationPool", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensProtocol", - "type": "uint256" - } - ], - "name": "PaymentCollected", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "collect(uint8,address,uint256,address,uint256)": "6c69783a" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"GraphPaymentsInsufficientTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolPaymentCut\",\"type\":\"uint256\"}],\"name\":\"GraphPaymentsInvalidProtocolPaymentCut\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReceiver\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDelegationPool\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensProtocol\",\"type\":\"uint256\"}],\"name\":\"PaymentCollected\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"GraphPaymentsInsufficientTokens(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The amount of tokens being collected\",\"tokens\":\"The amount of tokens available\"}}],\"GraphPaymentsInvalidProtocolPaymentCut(uint256)\":[{\"params\":{\"protocolPaymentCut\":\"The protocol payment cut\"}}]},\"events\":{\"PaymentCollected(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"dataService\":\"The address of the data service\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokensDataService\":\"Amount of tokens for the data service\",\"tokensDelegationPool\":\"Amount of tokens for delegators\",\"tokensProtocol\":\"Amount of tokens charged as protocol tax\",\"tokensReceiver\":\"Amount of tokens for the receiver\"}}},\"kind\":\"dev\",\"methods\":{\"collect(uint8,address,uint256,address,uint256)\":{\"params\":{\"dataService\":\"The address of the data service\",\"paymentType\":\"The type of payment as defined in {IGraphPayments}\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens being collected\",\"tokensDataService\":\"The amount of tokens that should be sent to the data service\"}}},\"title\":\"Interface for the {GraphPayments} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphPaymentsInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when there are insufficient tokens to pay the required amount\"}],\"GraphPaymentsInvalidProtocolPaymentCut(uint256)\":[{\"notice\":\"Thrown when the protocol payment cut is invalid\"}]},\"events\":{\"PaymentCollected(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted when a payment is collected\"}},\"kind\":\"user\",\"methods\":{\"collect(uint8,address,uint256,address,uint256)\":{\"notice\":\"Collects funds from a payer. It will pay cuts to all relevant parties and forward the rest to the receiver.\"}},\"notice\":\"This contract is part of the Graph Horizon payments protocol. It's designed to pull funds (GRT) from the {PaymentsEscrow} and distribute them according to a set of pre established rules.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":\"IGraphPayments\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol": { - "IGraphProxyAdmin": { - "abi": [], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Empty interface to allow the GraphProxyAdmin contract to be used in the GraphDirectory contract.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IGraphProxyAdmin\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":\"IGraphProxyAdmin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol": { - "IHorizonStaking": { - "abi": [ - { - "inputs": [], - "name": "HorizonStakingCallerIsServiceProvider", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientIdleStake", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minShares", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientShares", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientStakeForLegacyAllocations", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minRequired", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientTokens", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidBeneficiaryZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "HorizonStakingInvalidDelegationFeeCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidDelegationPool", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidDelegationPoolState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - } - ], - "name": "HorizonStakingInvalidMaxVerifierCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidProvision", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidServiceProviderZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "HorizonStakingInvalidThawingPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidVerifierZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidZeroShares", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidZeroTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "HorizonStakingNotAuthorized", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingNothingThawing", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingProvisionAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minShares", - "type": "uint256" - } - ], - "name": "HorizonStakingSlippageProtection", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "until", - "type": "uint256" - } - ], - "name": "HorizonStakingStillThawing", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingTooManyThawRequests", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingTooManyTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingVerifierNotAllowed", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "isPublic", - "type": "bool" - } - ], - "name": "AllocationClosed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "AllowedLockedVerifierSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegatedTokensWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "DelegationFeeCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegationSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "enabled", - "type": "bool" - } - ], - "name": "DelegationSlashingEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegationSlashingSkipped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "MaxThawingPeriodSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "OperatorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionParametersSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionParametersStaged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionThawed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "assetHolder", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "protocolTax", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "curationFees", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queryFees", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queryRebates", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "delegationRewards", - "type": "uint256" - } - ], - "name": "RebateCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "StakeDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "until", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - } - ], - "name": "ThawRequestCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bool", - "name": "valid", - "type": "bool" - } - ], - "name": "ThawRequestFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawRequestsFulfilled", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ThawRequestsFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "ThawingPeriodCleared", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensDelegated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensDeprovisioned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensToDelegationPoolAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensUndelegated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "VerifierTokensSent", - "type": "event" - }, - { - "inputs": [], - "name": "__DEPRECATED_getThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "acceptProvisionParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "addToDelegationPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "addToProvision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "clearThawingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - } - ], - "name": "closeAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minSharesOut", - "type": "uint256" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "deprovision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "getAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAtEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAtEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "collectedFees", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "__DEPRECATED_effectiveAllocation", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "distributedRebates", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingExtension.Allocation", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocationData", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "getAllocationState", - "outputs": [ - { - "internalType": "enum IHorizonStakingExtension.AllocationState", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegatedTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "delegator", - "type": "address" - } - ], - "name": "getDelegation", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Delegation", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - } - ], - "name": "getDelegationFeeCut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegationPool", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.DelegationPool", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getIdleStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "getIndexerStakedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getMaxThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProviderTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProvision", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "createdAt", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "maxVerifierCutPending", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriodPending", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Provision", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getServiceProvider", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokensStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensProvisioned", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ServiceProvider", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "getSubgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - } - ], - "name": "getThawRequest", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "next", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ThawRequest", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawRequestList", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "internalType": "struct LinkedList.List", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint32", - "name": "delegationRatio", - "type": "uint32" - } - ], - "name": "getTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "hasStake", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_allocationId", - "type": "address" - } - ], - "name": "isActiveAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "isAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "isAllowedLockedVerifier", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isAuthorized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isDelegationSlashingEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "isOperator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "provision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "provisionLocked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oldServiceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "oldVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "newServiceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "newVerifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minSharesForNewProvider", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "redelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "oldVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "newVerifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "reprovision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setAllowedLockedVerifier", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "setDelegationFeeCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "setDelegationSlashingEnabled", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "setMaxThawingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setOperatorLocked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "setProvisionParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensVerifier", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifierDestination", - "type": "address" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stakeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stakeToProvision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "thaw", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "beneficiary", - "type": "address" - } - ], - "name": "undelegate", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "undelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "undelegate", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "unstake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "withdrawDelegated", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "newServiceProvider", - "type": "address" - } - ], - "name": "withdrawDelegated", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "__DEPRECATED_getThawingPeriod()": "c0641994", - "acceptProvisionParameters(address)": "3a78b732", - "addToDelegationPool(address,address,uint256)": "ca94b0e9", - "addToProvision(address,address,uint256)": "fecc9cc1", - "clearThawingPeriod()": "e473522a", - "closeAllocation(address,bytes32)": "44c32a61", - "collect(uint256,address)": "8d3c100a", - "delegate(address,address,uint256,uint256)": "6230001a", - "delegate(address,uint256)": "026e402b", - "deprovision(address,address,uint256)": "21195373", - "getAllocation(address)": "0e022923", - "getAllocationData(address)": "55c85269", - "getAllocationState(address)": "98c657dc", - "getDelegatedTokensAvailable(address,address)": "fb744cc0", - "getDelegation(address,address,address)": "ccebcabb", - "getDelegationFeeCut(address,address,uint8)": "7573ef4f", - "getDelegationPool(address,address)": "561285e4", - "getIdleStake(address)": "a784d498", - "getIndexerStakedTokens(address)": "1787e69f", - "getMaxThawingPeriod()": "39514ad2", - "getProviderTokensAvailable(address,address)": "08ce5f68", - "getProvision(address,address)": "25d9897e", - "getServiceProvider(address)": "8cc01c86", - "getStake(address)": "7a766460", - "getSubgraphAllocatedTokens(bytes32)": "e2e1e8e9", - "getThawRequest(bytes32)": "b7ca7241", - "getThawRequestList(address,address,address)": "a212daf8", - "getThawedTokens(address,address,address)": "9054e343", - "getTokensAvailable(address,address,uint32)": "872d0489", - "hasStake(address)": "e73e14bf", - "isActiveAllocation(address)": "6a3ca383", - "isAllocation(address)": "f1d60d66", - "isAllowedLockedVerifier(address)": "ae4fe67a", - "isAuthorized(address,address,address)": "7c145cc7", - "isDelegationSlashingEnabled()": "fc54fb27", - "isOperator(address,address)": "b6363cf2", - "provision(address,address,uint256,uint32,uint64)": "010167e5", - "provisionLocked(address,address,uint256,uint32,uint64)": "82d66cb8", - "redelegate(address,address,address,address,uint256,uint256)": "f64b3598", - "reprovision(address,address,address,uint256)": "ba7fb0b4", - "setAllowedLockedVerifier(address,bool)": "4ca7ac22", - "setDelegationFeeCut(address,address,uint8,uint256)": "42c51693", - "setDelegationSlashingEnabled()": "ef58bd67", - "setMaxThawingPeriod(uint64)": "259bc435", - "setOperator(address,address,bool)": "bc735d90", - "setOperatorLocked(address,address,bool)": "ad4d35b5", - "setProvisionParameters(address,address,uint32,uint64)": "81e21b56", - "slash(address,uint256,uint256,address)": "e76fede6", - "stake(uint256)": "a694fc3a", - "stakeTo(address,uint256)": "a2a31722", - "stakeToProvision(address,address,uint256)": "74612092", - "thaw(address,address,uint256)": "f93f1cd0", - "undelegate(address,address,uint256)": "a02b9426", - "undelegate(address,address,uint256,address)": "162ea5ed", - "undelegate(address,uint256)": "4d99dd16", - "unstake(uint256)": "2e17de78", - "withdraw()": "3ccfd60b", - "withdrawDelegated(address,address)": "51a60b02", - "withdrawDelegated(address,address,uint256)": "3993d849" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"HorizonStakingCallerIsServiceProvider\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientIdleStake\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minShares\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientStakeForLegacyAllocations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minRequired\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidBeneficiaryZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInvalidDelegationFeeCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidDelegationPool\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidDelegationPoolState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"}],\"name\":\"HorizonStakingInvalidMaxVerifierCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidProvision\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidServiceProviderZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"HorizonStakingInvalidThawingPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidVerifierZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"HorizonStakingNotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingNothingThawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingProvisionAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minShares\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingSlippageProtection\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingStillThawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingTooManyThawRequests\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingTooManyTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingVerifierNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"AllocationClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"AllowedLockedVerifierSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegatedTokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"DelegationFeeCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegationSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"DelegationSlashingEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegationSlashingSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"MaxThawingPeriodSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"OperatorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionParametersSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionParametersStaged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionThawed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolTax\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"curationFees\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"queryFees\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"queryRebates\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"delegationRewards\",\"type\":\"uint256\"}],\"name\":\"RebateCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"StakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"}],\"name\":\"ThawRequestCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"ThawRequestFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawRequestsFulfilled\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ThawRequestsFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ThawingPeriodCleared\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensDeprovisioned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensToDelegationPoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensUndelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"VerifierTokensSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__DEPRECATED_getThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"acceptProvisionParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"addToDelegationPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"addToProvision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"}],\"name\":\"closeAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minSharesOut\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"deprovision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAtEpoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAtEpoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collectedFees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"__DEPRECATED_effectiveAllocation\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"distributedRebates\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingExtension.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocationState\",\"outputs\":[{\"internalType\":\"enum IHorizonStakingExtension.AllocationState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getDelegatedTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"getDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.Delegation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"}],\"name\":\"getDelegationFeeCut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getDelegationPool\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sharesThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.DelegationPool\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getIdleStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getIndexerStakedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getProviderTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getProvision\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sharesThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAt\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCutPending\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriodPending\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.Provision\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getServiceProvider\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokensStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensProvisioned\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ServiceProvider\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"}],\"name\":\"getThawRequest\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"next\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ThawRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getThawRequestList\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"internalType\":\"struct LinkedList.List\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getThawedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"}],\"name\":\"getTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"hasStake\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationId\",\"type\":\"address\"}],\"name\":\"isActiveAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"isAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"isAllowedLockedVerifier\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isAuthorized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDelegationSlashingEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"provision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"provisionLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldServiceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newServiceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minSharesForNewProvider\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"redelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"reprovision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setAllowedLockedVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"setDelegationFeeCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setDelegationSlashingEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"setMaxThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperatorLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"setProvisionParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensVerifier\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifierDestination\",\"type\":\"address\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeToProvision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"thaw\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"withdrawDelegated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newServiceProvider\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Use this interface to interact with the Horizon Staking contract.\",\"errors\":{\"HorizonStakingInsufficientIdleStake(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInsufficientShares(uint256,uint256)\":[{\"params\":{\"minShares\":\"The minimum required share amount\",\"shares\":\"The actual share amount\"}}],\"HorizonStakingInsufficientStakeForLegacyAllocations(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInsufficientTokens(uint256,uint256)\":[{\"params\":{\"minRequired\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInvalidDelegationFeeCut(uint256)\":[{\"params\":{\"feeCut\":\"The fee cut\"}}],\"HorizonStakingInvalidDelegationPool(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidDelegationPoolState(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidMaxVerifierCut(uint32)\":[{\"params\":{\"maxVerifierCut\":\"The maximum verifier cut\"}}],\"HorizonStakingInvalidProvision(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"params\":{\"maxThawingPeriod\":\"The maximum `thawingPeriod` allowed\",\"thawingPeriod\":\"The thawing period\"}}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"params\":{\"caller\":\"The caller address\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingSlippageProtection(uint256,uint256)\":[{\"params\":{\"minShares\":\"The minimum required share amount\",\"shares\":\"The actual share amount\"}}],\"HorizonStakingStillThawing(uint256)\":[{\"details\":\"Note this thawing refers to the global thawing period applied to legacy allocated tokens, it does not refer to thaw requests.\",\"params\":{\"until\":\"The block number until the stake is locked\"}}],\"HorizonStakingTooManyTokens(uint256,uint256)\":[{\"params\":{\"maxTokens\":\"The maximum allowed token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingVerifierNotAllowed(address)\":[{\"details\":\"Only applies to stake from locked wallets.\"}]},\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"details\":\"Emitted when `indexer` close an allocation in `epoch` for `allocationID`. An amount of `tokens` get unallocated from `subgraphDeploymentID`. This event also emits the POI (proof of indexing) submitted by the indexer. `isPublic` is true if the sender was someone other than the indexer.\"},\"AllowedLockedVerifierSet(address,bool)\":{\"params\":{\"allowed\":\"Whether the verifier is allowed or disallowed\",\"verifier\":\"The address of the verifier\"}},\"DelegatedTokensWithdrawn(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\",\"verifier\":\"The address of the verifier\"}},\"DelegationFeeCutSet(address,address,uint8,uint256)\":{\"params\":{\"feeCut\":\"The fee cut set, in PPM\",\"paymentType\":\"The payment type for which the fee cut is set, as defined in {IGraphPayments}\",\"serviceProvider\":\"The address of the service provider\",\"verifier\":\"The address of the verifier\"}},\"DelegationSlashed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens slashed (note this only represents delegation pool's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"DelegationSlashingEnabled(bool)\":{\"params\":{\"enabled\":\"Whether delegation slashing is enabled or disabled.\"}},\"DelegationSlashingSkipped(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens that would have been slashed (note this only represents delegation pool's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"MaxThawingPeriodSet(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period\"}},\"OperatorSet(address,address,address,bool)\":{\"details\":\"Emitted when an operator is allowed or denied by a service provider for a particular verifier\",\"params\":{\"allowed\":\"Whether the operator is allowed or denied\",\"operator\":\"The address of the operator\",\"serviceProvider\":\"The address of the service provider\",\"verifier\":\"The address of the verifier\"}},\"ProvisionCreated(address,address,uint256,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens provisioned\",\"verifier\":\"The address of the verifier\"}},\"ProvisionIncreased(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens added to the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionParametersSet(address,address,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The new maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The new period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionParametersStaged(address,address,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The proposed period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionSlashed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens slashed (note this only represents service provider's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"ProvisionThawed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens thawed\",\"verifier\":\"The address of the verifier\"}},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`. `epoch` is the protocol epoch the rebate was collected on The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees` is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt. `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected and sent to the delegation pool.\"},\"StakeDeposited(address,uint256)\":{\"details\":\"TODO: After transition period move to IHorizonStakingMain. Temporarily it needs to be here since it's emitted by {_stake} which is used by both {HorizonStaking} and {HorizonStakingExtension}.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens staked.\"}},\"StakeLocked(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens unstaked\",\"until\":\"The block number until the stake is locked\"}},\"StakeWithdrawn(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\"}},\"ThawRequestCreated(address,address,address,uint256,uint64,bytes32)\":{\"details\":\"Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\",\"params\":{\"owner\":\"The address of the owner of the thaw request.\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares being thawed\",\"thawRequestId\":\"The ID of the thaw request\",\"thawingUntil\":\"The timestamp until the stake is thawed\",\"verifier\":\"The address of the verifier\"}},\"ThawRequestFulfilled(bytes32,uint256,uint256,uint64,bool)\":{\"params\":{\"shares\":\"The amount of shares being released\",\"thawRequestId\":\"The ID of the thaw request\",\"thawingUntil\":\"The timestamp until the stake has thawed\",\"tokens\":\"The amount of tokens being released\",\"valid\":\"Whether the thaw request was valid at the time of fulfillment\"}},\"ThawRequestsFulfilled(address,address,address,uint256,uint256)\":{\"params\":{\"owner\":\"The address of the owner of the thaw requests\",\"serviceProvider\":\"The address of the service provider\",\"thawRequestsFulfilled\":\"The number of thaw requests fulfilled\",\"tokens\":\"The total amount of tokens being released\",\"verifier\":\"The address of the verifier\"}},\"ThawingPeriodCleared()\":{\"details\":\"This marks the end of the transition period.\"},\"TokensDelegated(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens delegated\",\"verifier\":\"The address of the verifier\"}},\"TokensDeprovisioned(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens removed\",\"verifier\":\"The address of the verifier\"}},\"TokensToDelegationPoolAdded(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\",\"verifier\":\"The address of the verifier\"}},\"TokensUndelegated(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens undelegated\",\"verifier\":\"The address of the verifier\"}},\"VerifierTokensSent(address,address,address,uint256)\":{\"params\":{\"destination\":\"The address where the verifier cut is sent\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens sent to the verifier\",\"verifier\":\"The address of the verifier\"}}},\"kind\":\"dev\",\"methods\":{\"__DEPRECATED_getThawingPeriod()\":{\"returns\":{\"_0\":\"Thawing period in blocks\"}},\"acceptProvisionParameters(address)\":{\"details\":\"Only the provision's verifier can call this function. Emits a {ProvisionParametersSet} event.\",\"params\":{\"serviceProvider\":\"The service provider address\"}},\"addToDelegationPool(address,address,uint256)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {TokensToDelegationPoolAdded} event.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to add to the delegation pool\",\"verifier\":\"The verifier address for which the tokens are provisioned\"}},\"addToProvision(address,address,uint256)\":{\"details\":\"Requirements: - The `serviceProvider` must have previously provisioned stake to `verifier`. - `tokens` cannot be zero. - The `serviceProvider` must have enough idle stake to cover the tokens to add. Emits a {ProvisionIncreased} event.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to add to the provision\",\"verifier\":\"The verifier address\"}},\"clearThawingPeriod()\":{\"details\":\"This function can only be called by the contract governor.Emits a {ThawingPeriodCleared} event.\"},\"closeAllocation(address,bytes32)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"poi\":\"Proof of indexing submitted for the allocated period\"}},\"collect(uint256,address)\":{\"details\":\"To avoid reverting on the withdrawal from channel flow this function will: 1) Accept calls with zero tokens. 2) Accept calls after an allocation passed the dispute period, in that case, all the received tokens are burned.\",\"params\":{\"allocationID\":\"Allocation where the tokens will be assigned\",\"tokens\":\"Amount of tokens to collect\"}},\"delegate(address,address,uint256,uint256)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. - The provision must exist. Emits a {TokensDelegated} event.\",\"params\":{\"minSharesOut\":\"The minimum amount of shares to accept, slippage protection.\",\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to delegate\",\"verifier\":\"The verifier address\"}},\"delegate(address,uint256)\":{\"details\":\"See {delegate}.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to delegate\"}},\"deprovision(address,address,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error. Requirements: - Must have previously initiated a thaw request using {thaw}. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {TokensDeprovisioned} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}},\"getAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as allocation identifier\"},\"returns\":{\"_0\":\"Allocation data\"}},\"getAllocationData(address)\":{\"details\":\"Get allocation data to calculate rewards issuance\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"accRewardsPending\":\"Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed\",\"accRewardsPerAllocatedToken\":\"Rewards snapshot\",\"indexer\":\"The indexer address\",\"subgraphDeploymentId\":\"Subgraph deployment id for the allocation\",\"tokens\":\"Amount of allocated tokens\"}},\"getAllocationState(address)\":{\"params\":{\"allocationID\":\"Allocation identifier\"},\"returns\":{\"_0\":\"AllocationState enum with the state of the allocation\"}},\"getDelegatedTokensAvailable(address,address)\":{\"details\":\"Calculated as the tokens available minus the tokens thawing.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"getDelegation(address,address,address)\":{\"params\":{\"delegator\":\"The address of the delegator.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation details.\"}},\"getDelegationFeeCut(address,address,uint8)\":{\"params\":{\"paymentType\":\"The payment type as defined by {IGraphPayments.PaymentTypes}.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation fee cut in PPM.\"}},\"getDelegationPool(address,address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation pool details.\"}},\"getIdleStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens that are idle.\"}},\"getIndexerStakedTokens(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"Amount of tokens staked by the indexer\"}},\"getProviderTokensAvailable(address,address)\":{\"details\":\"Calculated as the tokens available minus the tokens thawing.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"getProvision(address,address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The provision details.\"}},\"getServiceProvider(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"getStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens staked.\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"params\":{\"_subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"getThawRequest(bytes32)\":{\"params\":{\"thawRequestId\":\"The id of the thaw request.\"},\"returns\":{\"_0\":\"The thaw request details.\"}},\"getThawRequestList(address,address,address)\":{\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The thaw requests list metadata.\"}},\"getThawedTokens(address,address,address)\":{\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of thawed tokens.\"}},\"getTokensAvailable(address,address,uint32)\":{\"params\":{\"delegationRatio\":\"The delegation ratio.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"hasStake(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if indexer has staked tokens\"}},\"isActiveAllocation(address)\":{\"params\":{\"_allocationId\":\"Allocation Id\"},\"returns\":{\"_0\":\"Whether or not the allocation is active\"}},\"isAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as signer by the indexer for an allocation\"},\"returns\":{\"_0\":\"True if allocationID already used\"}},\"isAllowedLockedVerifier(address)\":{\"params\":{\"verifier\":\"Address of the verifier\"},\"returns\":{\"_0\":\"True if verifier is allowed locked verifier, false otherwise\"}},\"isAuthorized(address,address,address)\":{\"params\":{\"operator\":\"The address to check for auth\",\"serviceProvider\":\"The service provider on behalf of whom they're claiming to act\",\"verifier\":\"The verifier / data service on which they're claiming to act\"},\"returns\":{\"_0\":\"Whether the operator is authorized or not\"}},\"isOperator(address,address)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"operator\":\"Address of the operator\"},\"returns\":{\"_0\":\"True if operator is allowed for indexer, false otherwise\"}},\"provision(address,address,uint256,uint32,uint64)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - The `serviceProvider` must have enough idle stake to cover the tokens to provision. - `maxVerifierCut` must be a valid PPM. - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. Emits a {ProvisionCreated} event.\",\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens that will be locked and slashable\",\"verifier\":\"The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\"}},\"provisionLocked(address,address,uint256,uint32,uint64)\":{\"details\":\"See {provision}. Additional requirements: - The `verifier` must be allowed to be used for locked provisions.\",\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens that will be locked and slashable\",\"verifier\":\"The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\"}},\"redelegate(address,address,address,address,uint256,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error. Requirements: - Must have previously initiated a thaw request using {undelegate}. - `newServiceProvider` and `newVerifier` must not be the zero address. - `newServiceProvider` must have previously provisioned stake to `newVerifier`. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\",\"params\":{\"minSharesForNewProvider\":\"The minimum amount of shares to accept for the new service provider\",\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"newServiceProvider\":\"The address of a new service provider\",\"newVerifier\":\"The address of a new verifier\",\"oldServiceProvider\":\"The old service provider address\",\"oldVerifier\":\"The old verifier address\"}},\"reprovision(address,address,address,uint256)\":{\"details\":\"Requirements: - Must have previously initiated a thaw request using {thaw}. - `tokens` cannot be zero. - The `serviceProvider` must have previously provisioned stake to `newVerifier`. - The `serviceProvider` must have enough idle stake to cover the tokens to add. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled}, {TokensDeprovisioned} and {ProvisionIncreased} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"newVerifier\":\"The verifier address for which the tokens will be provisioned\",\"oldVerifier\":\"The verifier address for which the tokens are currently provisioned\",\"serviceProvider\":\"The service provider address\"}},\"setAllowedLockedVerifier(address,bool)\":{\"details\":\"This function can only be called by the contract governor, it's used to maintain a whitelist of verifiers that do not allow the stake from a locked wallet to escape the lock.Emits a {AllowedLockedVerifierSet} event.\",\"params\":{\"allowed\":\"Whether the verifier is allowed or not\",\"verifier\":\"The verifier address\"}},\"setDelegationFeeCut(address,address,uint8,uint256)\":{\"details\":\"Emits a {DelegationFeeCutSet} event.\",\"params\":{\"feeCut\":\"The fee cut to set, in PPM\",\"paymentType\":\"The payment type for which the fee cut is set, as defined in {IGraphPayments}\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}},\"setDelegationSlashingEnabled()\":{\"details\":\"This function can only be called by the contract governor.\"},\"setMaxThawingPeriod(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period, in seconds\"}},\"setOperator(address,address,bool)\":{\"details\":\"Emits a {OperatorSet} event.\",\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\",\"verifier\":\"The verifier / data service on which they'll be allowed to operate\"}},\"setOperatorLocked(address,address,bool)\":{\"details\":\"See {setOperator}. Additional requirements: - The `verifier` must be allowed to be used for locked provisions.\",\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\",\"verifier\":\"The verifier / data service on which they'll be allowed to operate\"}},\"setProvisionParameters(address,address,uint32,uint64)\":{\"details\":\"This two step update process prevents the service provider from changing the parameters without the verifier's consent. Emits a {ProvisionParametersStaged} event if at least one of the parameters changed.\",\"params\":{\"maxVerifierCut\":\"The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The proposed period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The verifier address\"}},\"slash(address,uint256,uint256,address)\":{\"details\":\"Requirements: - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider. - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut. Emits a {ProvisionSlashed} and {VerifierTokensSent} events. Emits a {DelegationSlashed} or {DelegationSlashingSkipped} event depending on the global delegation slashing flag.\",\"params\":{\"serviceProvider\":\"The service provider to slash\",\"tokens\":\"The amount of tokens to slash\",\"tokensVerifier\":\"The amount of tokens to transfer instead of burning\",\"verifierDestination\":\"The address to transfer the verifier cut to\"}},\"stake(uint256)\":{\"details\":\"Pulls tokens from the caller. Requirements: - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {StakeDeposited} event.\",\"params\":{\"tokens\":\"Amount of tokens to stake\"}},\"stakeTo(address,uint256)\":{\"details\":\"Pulls tokens from the caller. Requirements: - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {StakeDeposited} event.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\"}},\"stakeToProvision(address,address,uint256)\":{\"details\":\"Requirements: - The `serviceProvider` must have previously provisioned stake to `verifier`. - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits {StakeDeposited} and {ProvisionIncreased} events.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\",\"verifier\":\"Address of the verifier\"}},\"thaw(address,address,uint256)\":{\"details\":\"Requirements: - The provision must have enough tokens available to thaw. - `tokens` cannot be zero. Emits {ProvisionThawed} and {ThawRequestCreated} events.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to thaw\",\"verifier\":\"The verifier address for which the tokens are provisioned\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\",\"verifier\":\"The verifier address\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,address,uint256,address)\":{\"params\":{\"beneficiary\":\"The address where the tokens will be withdrawn after thawing\",\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\",\"verifier\":\"The verifier address\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,uint256)\":{\"details\":\"See {undelegate}.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\"}},\"unstake(uint256)\":{\"details\":\"Requirements: - `_tokens` cannot be zero. - `_serviceProvider` must have enough idle stake to cover the staking amount and any legacy allocation. Emits a {StakeLocked} event during the transition period. Emits a {StakeWithdrawn} event after the transition period.\",\"params\":{\"tokens\":\"Amount of tokens to unstake\"}},\"withdraw()\":{\"details\":\"This is only needed during the transition period while we still have a global lock. After that, unstake() will automatically withdraw.\"},\"withdrawDelegated(address,address)\":{\"details\":\"See {delegate}.\",\"params\":{\"newServiceProvider\":\"The address of a new service provider, if the delegator wants to re-delegate\",\"serviceProvider\":\"The service provider address\"}},\"withdrawDelegated(address,address,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error.If the delegation pool was completely slashed before withdrawing, calling this function will fulfill the thaw requests with an amount equal to zero. Requirements: - Must have previously initiated a thaw request using {undelegate}. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}},\"title\":\"Complete interface for the Horizon Staking contract\",\"version\":1},\"userdoc\":{\"errors\":{\"HorizonStakingCallerIsServiceProvider()\":[{\"notice\":\"Thrown when a service provider attempts to change their own operator access.\"}],\"HorizonStakingInsufficientIdleStake(uint256,uint256)\":[{\"notice\":\"Thrown when the service provider has insufficient idle stake to operate.\"}],\"HorizonStakingInsufficientShares(uint256,uint256)\":[{\"notice\":\"Thrown when a minimum share amount is required to operate but it's not met.\"}],\"HorizonStakingInsufficientStakeForLegacyAllocations(uint256,uint256)\":[{\"notice\":\"Thrown during the transition period when the service provider has insufficient stake to cover their existing legacy allocations.\"}],\"HorizonStakingInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when a minimum token amount is required to operate but it's not met.\"}],\"HorizonStakingInvalidBeneficiaryZeroAddress()\":[{\"notice\":\"Thrown when attempting to undelegate with a beneficiary that is the zero address.\"}],\"HorizonStakingInvalidDelegationFeeCut(uint256)\":[{\"notice\":\"Thrown when trying to set a delegation fee cut that is not valid.\"}],\"HorizonStakingInvalidDelegationPool(address,address)\":[{\"notice\":\"Thrown when attempting to operate with a delegation pool that does not exist.\"}],\"HorizonStakingInvalidDelegationPoolState(address,address)\":[{\"notice\":\"Thrown when as a result of slashing delegation pool has no tokens but has shares.\"}],\"HorizonStakingInvalidMaxVerifierCut(uint32)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid maximum verifier cut.\"}],\"HorizonStakingInvalidProvision(address,address)\":[{\"notice\":\"Thrown when attempting to operate with a provision that does not exist.\"}],\"HorizonStakingInvalidServiceProviderZeroAddress()\":[{\"notice\":\"Thrown when attempting to redelegate with a serivce provider that is the zero address.\"}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid thawing period.\"}],\"HorizonStakingInvalidVerifierZeroAddress()\":[{\"notice\":\"Thrown when attempting to redelegate with a verifier that is the zero address.\"}],\"HorizonStakingInvalidZeroShares()\":[{\"notice\":\"Thrown when operating a zero share amount is not allowed.\"}],\"HorizonStakingInvalidZeroTokens()\":[{\"notice\":\"Thrown when operating a zero token amount is not allowed.\"}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to operate on a provision.\"}],\"HorizonStakingProvisionAlreadyExists()\":[{\"notice\":\"Thrown when attempting to create a provision for a data service that already has a provision.\"}],\"HorizonStakingSlippageProtection(uint256,uint256)\":[{\"notice\":\"Thrown when delegation shares obtained are below the expected amount.\"}],\"HorizonStakingStillThawing(uint256)\":[{\"notice\":\"Thrown during the transition period when attempting to withdraw tokens that are still thawing.\"}],\"HorizonStakingTooManyTokens(uint256,uint256)\":[{\"notice\":\"Thrown when the amount of tokens exceeds the maximum allowed to operate.\"}],\"HorizonStakingVerifierNotAllowed(address)\":[{\"notice\":\"Thrown when a service provider attempts to operate on verifiers that are not allowed.\"}]},\"events\":{\"AllowedLockedVerifierSet(address,bool)\":{\"notice\":\"Emitted when a verifier is allowed or disallowed to be used for locked provisions.\"},\"DelegatedTokensWithdrawn(address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator withdraws tokens from a provision after thawing.\"},\"DelegationFeeCutSet(address,address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider sets delegation fee cuts for a verifier.\"},\"DelegationSlashed(address,address,uint256)\":{\"notice\":\"Emitted when a delegation pool is slashed by a verifier.\"},\"DelegationSlashingEnabled(bool)\":{\"notice\":\"Emitted when the delegation slashing global flag is set.\"},\"DelegationSlashingSkipped(address,address,uint256)\":{\"notice\":\"Emitted when a delegation pool would have been slashed by a verifier, but the slashing was skipped because delegation slashing global parameter is not enabled.\"},\"MaxThawingPeriodSet(uint64)\":{\"notice\":\"Emitted when the global maximum thawing period allowed for provisions is set.\"},\"ProvisionCreated(address,address,uint256,uint32,uint64)\":{\"notice\":\"Emitted when a service provider provisions staked tokens to a verifier.\"},\"ProvisionIncreased(address,address,uint256)\":{\"notice\":\"Emitted whenever staked tokens are added to an existing provision\"},\"ProvisionParametersSet(address,address,uint32,uint64)\":{\"notice\":\"Emitted when a service provider accepts a staged provision parameter update.\"},\"ProvisionParametersStaged(address,address,uint32,uint64)\":{\"notice\":\"Emitted when a service provider stages a provision parameter update.\"},\"ProvisionSlashed(address,address,uint256)\":{\"notice\":\"Emitted when a provision is slashed by a verifier.\"},\"ProvisionThawed(address,address,uint256)\":{\"notice\":\"Emitted when a service provider thaws tokens from a provision.\"},\"StakeDeposited(address,uint256)\":{\"notice\":\"Emitted when a service provider stakes tokens.\"},\"StakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when a service provider unstakes tokens during the transition period.\"},\"StakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when a service provider withdraws tokens during the transition period.\"},\"ThawRequestCreated(address,address,address,uint256,uint64,bytes32)\":{\"notice\":\"Emitted when a thaw request is created.\"},\"ThawRequestFulfilled(bytes32,uint256,uint256,uint64,bool)\":{\"notice\":\"Emitted when a thaw request is fulfilled, meaning the stake is released.\"},\"ThawRequestsFulfilled(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a series of thaw requests are fulfilled.\"},\"ThawingPeriodCleared()\":{\"notice\":\"Emitted when the legacy global thawing period is set to zero.\"},\"TokensDelegated(address,address,address,uint256)\":{\"notice\":\"Emitted when tokens are delegated to a provision.\"},\"TokensDeprovisioned(address,address,uint256)\":{\"notice\":\"Emitted when a service provider removes tokens from a provision.\"},\"TokensToDelegationPoolAdded(address,address,uint256)\":{\"notice\":\"Emitted when tokens are added to a delegation pool's reserve.\"},\"TokensUndelegated(address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator undelegates tokens from a provision and starts thawing them.\"},\"VerifierTokensSent(address,address,address,uint256)\":{\"notice\":\"Emitted when the verifier cut is sent to the verifier after slashing a provision.\"}},\"kind\":\"user\",\"methods\":{\"__DEPRECATED_getThawingPeriod()\":{\"notice\":\"Return the time in blocks to unstake\"},\"acceptProvisionParameters(address)\":{\"notice\":\"Accepts a staged provision parameter update.\"},\"addToDelegationPool(address,address,uint256)\":{\"notice\":\"Add tokens to a delegation pool without issuing shares. Used by data services to pay delegation fees/rewards. Delegators SHOULD NOT call this function.\"},\"addToProvision(address,address,uint256)\":{\"notice\":\"Adds tokens from the service provider's idle stake to a provision\"},\"clearThawingPeriod()\":{\"notice\":\"Clear the legacy global thawing period. This signifies the end of the transition period, after which no legacy allocations should be left.\"},\"closeAllocation(address,bytes32)\":{\"notice\":\"Close an allocation and free the staked tokens. To be eligible for rewards a proof of indexing must be presented. Presenting a bad proof is subject to slashable condition. To opt out of rewards set _poi to 0x0\"},\"collect(uint256,address)\":{\"notice\":\"Collect query fees from state channels and assign them to an allocation. Funds received are only accepted from a valid sender.\"},\"delegate(address,address,uint256,uint256)\":{\"notice\":\"Delegate tokens to a provision.\"},\"delegate(address,uint256)\":{\"notice\":\"Delegate tokens to the subgraph data service provision. This function is for backwards compatibility with the legacy staking contract. It only allows delegating to the subgraph data service and DOES NOT have slippage protection.\"},\"deprovision(address,address,uint256)\":{\"notice\":\"Remove tokens from a provision and move them back to the service provider's idle stake.\"},\"getAllocation(address)\":{\"notice\":\"Return the allocation by ID.\"},\"getAllocationState(address)\":{\"notice\":\"Return the current state of an allocation\"},\"getDelegatedTokensAvailable(address,address)\":{\"notice\":\"Gets the delegator's tokens available in a provision.\"},\"getDelegation(address,address,address)\":{\"notice\":\"Gets the details of a delegation.\"},\"getDelegationFeeCut(address,address,uint8)\":{\"notice\":\"Gets the delegation fee cut for a payment type.\"},\"getDelegationPool(address,address)\":{\"notice\":\"Gets the details of delegation pool.\"},\"getIdleStake(address)\":{\"notice\":\"Gets the service provider's idle stake which is the stake that is not being used for any provision. Note that this only includes service provider's self stake.\"},\"getIndexerStakedTokens(address)\":{\"notice\":\"Get the total amount of tokens staked by the indexer.\"},\"getMaxThawingPeriod()\":{\"notice\":\"Gets the maximum allowed thawing period for a provision.\"},\"getProviderTokensAvailable(address,address)\":{\"notice\":\"Gets the service provider's tokens available in a provision.\"},\"getProvision(address,address)\":{\"notice\":\"Gets the details of a provision.\"},\"getServiceProvider(address)\":{\"notice\":\"Gets the details of a service provider.\"},\"getStake(address)\":{\"notice\":\"Gets the stake of a service provider.\"},\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"getThawRequest(bytes32)\":{\"notice\":\"Gets a thaw request.\"},\"getThawRequestList(address,address,address)\":{\"notice\":\"Gets the metadata of a thaw request list. Service provider and delegators each have their own thaw request list per provision. Metadata includes the head and tail of the list, plus the total number of thaw requests.\"},\"getThawedTokens(address,address,address)\":{\"notice\":\"Gets the amount of thawed tokens for a given provision.\"},\"getTokensAvailable(address,address,uint32)\":{\"notice\":\"Gets the tokens available in a provision. Tokens available are the tokens in a provision that are not thawing. Includes service provider's and delegator's stake. Allows specifying a `delegationRatio` which caps the amount of delegated tokens that are considered available.\"},\"hasStake(address)\":{\"notice\":\"Getter that returns if an indexer has any stake.\"},\"isActiveAllocation(address)\":{\"notice\":\"Whether or not an allocation is active (i.e open)\"},\"isAllocation(address)\":{\"notice\":\"Return if allocationID is used.\"},\"isAllowedLockedVerifier(address)\":{\"notice\":\"Return true if the verifier is an allowed locked verifier.\"},\"isAuthorized(address,address,address)\":{\"notice\":\"Check if an operator is authorized for the caller on a specific verifier / data service.\"},\"isDelegationSlashingEnabled()\":{\"notice\":\"Return true if delegation slashing is enabled, false otherwise.\"},\"isOperator(address,address)\":{\"notice\":\"Return true if operator is allowed for indexer.\"},\"provision(address,address,uint256,uint32,uint64)\":{\"notice\":\"Provision stake to a verifier. The tokens will be locked with a thawing period and will be slashable by the verifier. This is the main mechanism to provision stake to a data service, where the data service is the verifier. This function can be called by the service provider or by an operator authorized by the provider for this specific verifier.\"},\"provisionLocked(address,address,uint256,uint32,uint64)\":{\"notice\":\"Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets).\"},\"redelegate(address,address,address,address,uint256,uint256)\":{\"notice\":\"Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`.\"},\"reprovision(address,address,address,uint256)\":{\"notice\":\"Move already thawed stake from one provision into another provision This function can be called by the service provider or by an operator authorized by the provider for the two corresponding verifiers.\"},\"setAllowedLockedVerifier(address,bool)\":{\"notice\":\"Sets a verifier as a globally allowed verifier for locked provisions.\"},\"setDelegationFeeCut(address,address,uint8,uint256)\":{\"notice\":\"Set the fee cut for a verifier on a specific payment type.\"},\"setDelegationSlashingEnabled()\":{\"notice\":\"Set the global delegation slashing flag to true.\"},\"setMaxThawingPeriod(uint64)\":{\"notice\":\"Sets the global maximum thawing period allowed for provisions.\"},\"setOperator(address,address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller on a data service.\"},\"setOperatorLocked(address,address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller on a verifier.\"},\"setProvisionParameters(address,address,uint32,uint64)\":{\"notice\":\"Stages a provision parameter update. Note that the change is not effective until the verifier calls {acceptProvisionParameters}.\"},\"slash(address,uint256,uint256,address)\":{\"notice\":\"Slash a service provider. This can only be called by a verifier to which the provider has provisioned stake, and up to the amount of tokens they have provisioned. If the service provider's stake is not enough, the associated delegation pool might be slashed depending on the value of the global delegation slashing flag. Part of the slashed tokens are sent to the `verifierDestination` as a reward.\"},\"stake(uint256)\":{\"notice\":\"Deposit tokens on the staking contract.\"},\"stakeTo(address,uint256)\":{\"notice\":\"Deposit tokens on the service provider stake, on behalf of the service provider.\"},\"stakeToProvision(address,address,uint256)\":{\"notice\":\"Deposit tokens on the service provider stake, on behalf of the service provider, provisioned to a specific verifier.\"},\"thaw(address,address,uint256)\":{\"notice\":\"Start thawing tokens to remove them from a provision. This function can be called by the service provider or by an operator authorized by the provider for this specific verifier. Note that removing tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {deprovision} or {reprovision}.\"},\"undelegate(address,address,uint256)\":{\"notice\":\"Undelegate tokens from a provision and start thawing them. Note that undelegating tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. Requirements: - `shares` cannot be zero. Emits a {TokensUndelegated} and {ThawRequestCreated} event.\"},\"undelegate(address,address,uint256,address)\":{\"notice\":\"Undelegate tokens from a provision and start thawing them. The tokens will be withdrawable by the `beneficiary` after the thawing period. Note that undelegating tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. Requirements: - `shares` cannot be zero. - `beneficiary` cannot be the zero address. Emits a {TokensUndelegated} and {ThawRequestCreated} event.\"},\"undelegate(address,uint256)\":{\"notice\":\"Undelegate tokens from the subgraph data service provision and start thawing them. This function is for backwards compatibility with the legacy staking contract. It only allows undelegating from the subgraph data service.\"},\"unstake(uint256)\":{\"notice\":\"Move idle stake back to the owner's account. Stake is removed from the protocol: - During the transition period it's locked for a period of time before it can be withdrawn by calling {withdraw}. - After the transition period it's immediately withdrawn.\"},\"withdraw()\":{\"notice\":\"Withdraw service provider tokens once the thawing period (initiated by {unstake}) has passed. All thawed tokens are withdrawn.\"},\"withdrawDelegated(address,address)\":{\"notice\":\"Withdraw undelegated tokens from the subgraph data service provision after thawing. This function is for backwards compatibility with the legacy staking contract. It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in case the caller opts for re-delegating.\"},\"withdrawDelegated(address,address,uint256)\":{\"notice\":\"Withdraw undelegated tokens from a provision after thawing.\"}},\"notice\":\"This interface exposes all functions implemented by the {HorizonStaking} contract and its extension {HorizonStakingExtension} as well as the custom data types used by the contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":\"IHorizonStaking\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol": { - "IPaymentsCollector": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReceiver", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "PaymentCollected", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "collect(uint8,bytes)": "7f07d283" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReceiver\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"PaymentCollected\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"It's important to note that it's the collector contract's responsibility to validate the payment request is legitimate.\",\"events\":{\"PaymentCollected(uint8,address,address,uint256,address,uint256)\":{\"params\":{\"dataService\":\"The address of the data service\",\"payer\":\"The address of the payer\",\"paymentType\":\"The payment type collected as defined by {IGraphPayments}\",\"receiver\":\"The address of the receiver\",\"tokensDataService\":\"The amount of tokens received by the data service\",\"tokensReceiver\":\"The amount of tokens received by the receiver\"}}},\"kind\":\"dev\",\"methods\":{\"collect(uint8,bytes)\":{\"details\":\"This function should require the caller to present some form of evidence of the payer's debt to the receiver. The collector should validate this evidence and, if valid, collect the payment. Requirements: - The caller must be the data service the RAV was issued to - The signer of the RAV must be authorized to sign for the payer Emits a {PaymentCollected} event\",\"params\":{\"data\":\"Additional data required for the payment collection. Will vary depending on the collector implementation.\",\"paymentType\":\"The payment type to collect, as defined by {IGraphPayments}\"}}},\"title\":\"Interface for a payments collector contract as defined by Graph Horizon payments protocol\",\"version\":1},\"userdoc\":{\"events\":{\"PaymentCollected(uint8,address,address,uint256,address,uint256)\":{\"notice\":\"Emitted when a payment is collected\"}},\"kind\":\"user\",\"methods\":{\"collect(uint8,bytes)\":{\"notice\":\"Initiate a payment collection through the payments protocol\"}},\"notice\":\"Contracts implementing this interface can be used with the payments protocol. First, a payer must approve the collector to collect payments on their behalf. Only then can payment collection be initiated using the collector contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":\"IPaymentsCollector\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":{\"keccak256\":\"0x86f3cfc8eaac309e99018dda796248fb44130b09c2e5bcfc6c63c0e568803bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://176a017cb5c677222ac6a82fecd798292f5f41b4dcb9e16768fbf87816381010\",\"dweb:/ipfs/QmNuLfA5nZptMzWPuvDzJnm7Pwt7uYn1A7G8fwTWPy5Ybm\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol": { - "IPaymentsEscrow": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "balanceBefore", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "balanceAfter", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "PaymentsEscrowInconsistentCollection", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAllowance", - "type": "uint256" - } - ], - "name": "PaymentsEscrowInsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minBalance", - "type": "uint256" - } - ], - "name": "PaymentsEscrowInsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentsEscrowInvalidZeroTokens", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentsEscrowIsPaused", - "type": "error" - }, - { - "inputs": [], - "name": "PaymentsEscrowNotThawing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "PaymentsEscrowStillThawing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "thawingPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxWaitPeriod", - "type": "uint256" - } - ], - "name": "PaymentsEscrowThawingPeriodTooLong", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "addedAllowance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newTotalAllowance", - "type": "uint256" - } - ], - "name": "AuthorizedCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "CancelThaw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "CancelThawCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "EscrowCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "RevokeCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "Thaw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "ThawCollector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - } - ], - "name": "approveCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "cancelThawCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "getBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "revokeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "thaw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "thawCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "collector", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "approveCollector(address,uint256)": "4f9d392e", - "cancelThawCollector(address)": "78a24c54", - "collect(uint8,address,address,uint256,address,uint256)": "87dbfe82", - "deposit(address,address,uint256)": "8340f549", - "depositTo(address,address,address,uint256)": "72eb521e", - "getBalance(address,address,address)": "d6bd603c", - "revokeCollector(address)": "32825b81", - "thaw(address,address,uint256)": "f93f1cd0", - "thawCollector(address)": "0ee36be3", - "withdraw(address,address)": "f940e385" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balanceBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowInconsistentCollection\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAllowance\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowInsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBalance\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentsEscrowInvalidZeroTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentsEscrowIsPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentsEscrowNotThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowStillThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"thawingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxWaitPeriod\",\"type\":\"uint256\"}],\"name\":\"PaymentsEscrowThawingPeriodTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"addedAllowance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalAllowance\",\"type\":\"uint256\"}],\"name\":\"AuthorizedCollector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"CancelThaw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"CancelThawCollector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"EscrowCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"RevokeCollector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"Thaw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"ThawCollector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"}],\"name\":\"approveCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"cancelThawCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"depositTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"revokeCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"thaw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"}],\"name\":\"thawCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"PaymentsEscrowInconsistentCollection(uint256,uint256,uint256)\":[{\"params\":{\"balanceAfter\":\"The balance after the collection\",\"balanceBefore\":\"The balance before the collection\",\"tokens\":\"The amount of tokens collected\"}}],\"PaymentsEscrowInsufficientAllowance(uint256,uint256)\":[{\"params\":{\"allowance\":\"The current allowance\",\"minAllowance\":\"The minimum required allowance\"}}],\"PaymentsEscrowInsufficientBalance(uint256,uint256)\":[{\"params\":{\"balance\":\"The current balance\",\"minBalance\":\"The minimum required balance\"}}],\"PaymentsEscrowStillThawing(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}],\"PaymentsEscrowThawingPeriodTooLong(uint256,uint256)\":[{\"params\":{\"maxWaitPeriod\":\"The maximum wait period\",\"thawingPeriod\":\"The thawing period\"}}]},\"events\":{\"AuthorizedCollector(address,address,uint256,uint256)\":{\"params\":{\"addedAllowance\":\"The amount of tokens added to the collector's allowance\",\"collector\":\"The address of the collector\",\"newTotalAllowance\":\"The new total allowance after addition\",\"payer\":\"The address of the payer\"}},\"CancelThaw(address,address)\":{\"params\":{\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\"}},\"CancelThawCollector(address,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\"}},\"Deposit(address,address,address,uint256)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens deposited\"}},\"EscrowCollected(address,address,address,uint256)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens collected\"}},\"RevokeCollector(address,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\"}},\"Thaw(address,address,address,uint256,uint256)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\",\"tokens\":\"The amount of tokens being thawed\"}},\"ThawCollector(address,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\"}},\"Withdraw(address,address,address,uint256)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens withdrawn\"}}},\"kind\":\"dev\",\"methods\":{\"approveCollector(address,uint256)\":{\"details\":\"This function can only be used to increase the allowance of a collector. To reduce it the authorization must be revoked and a new one must be created. Requirements: - `allowance` must be greater than zero Emits an {AuthorizedCollector} event\",\"params\":{\"allowance\":\"The amount of tokens to add to the collector's allowance\",\"collector\":\"The address of the collector\"}},\"cancelThawCollector(address)\":{\"details\":\"Requirements: - `collector` must be thawing Emits a {CancelThawCollector} event\",\"params\":{\"collector\":\"The address of the collector\"}},\"collect(uint8,address,address,uint256,address,uint256)\":{\"details\":\"Requirements: - `collector` needs to be authorized by the payer and have enough allowance Emits an {EscrowCollected} event\",\"params\":{\"dataService\":\"The address of the data service\",\"payer\":\"The address of the payer\",\"paymentType\":\"The type of payment being collected as defined in the {IGraphPayments} interface\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to collect\",\"tokensDataService\":\"The amount of tokens that {GraphPayments} should send to the data service\"}},\"deposit(address,address,uint256)\":{\"details\":\"Emits a {Deposit} event\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to deposit\"}},\"depositTo(address,address,address,uint256)\":{\"details\":\"Emits a {Deposit} event\",\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to deposit\"}},\"getBalance(address,address,address)\":{\"params\":{\"collector\":\"The address of the collector\",\"payer\":\"The address of the payer\",\"receiver\":\"The address of the receiver\"}},\"revokeCollector(address)\":{\"details\":\"Requirements: - `collector` must have thawed Emits a {RevokeCollector} event\",\"params\":{\"collector\":\"The address of the collector\"}},\"thaw(address,address,uint256)\":{\"details\":\"Requirements: - `tokens` must be less than or equal to the available balance Emits a {Thaw} event. If `tokens` is zero it will emit a {CancelThaw} event.\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\",\"tokens\":\"The amount of tokens to thaw\"}},\"thawCollector(address)\":{\"details\":\"The thawing period is defined by the `REVOKE_COLLECTOR_THAWING_PERIOD` constant Emits a {ThawCollector} event\",\"params\":{\"collector\":\"The address of the collector\"}},\"withdraw(address,address)\":{\"details\":\"Requirements: - Funds must be thawed Emits a {Withdraw} event\",\"params\":{\"collector\":\"The address of the collector\",\"receiver\":\"The address of the receiver\"}}},\"title\":\"Interface for the {PaymentsEscrow} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"PaymentsEscrowInconsistentCollection(uint256,uint256,uint256)\":[{\"notice\":\"Thrown when the contract balance is not consistent with the collection amount\"}],\"PaymentsEscrowInsufficientAllowance(uint256,uint256)\":[{\"notice\":\"Thrown when a collector has insufficient allowance to collect funds\"}],\"PaymentsEscrowInsufficientBalance(uint256,uint256)\":[{\"notice\":\"Thrown when the available balance is insufficient to perform an operation\"}],\"PaymentsEscrowInvalidZeroTokens()\":[{\"notice\":\"Thrown when operating a zero token amount is not allowed.\"}],\"PaymentsEscrowIsPaused()\":[{\"notice\":\"Thrown when a protected function is called and the contract is paused.\"}],\"PaymentsEscrowNotThawing()\":[{\"notice\":\"Thrown when a thawing is expected to be in progress but it is not\"}],\"PaymentsEscrowStillThawing(uint256,uint256)\":[{\"notice\":\"Thrown when a thawing is still in progress\"}],\"PaymentsEscrowThawingPeriodTooLong(uint256,uint256)\":[{\"notice\":\"Thrown when setting the thawing period to a value greater than the maximum\"}]},\"events\":{\"AuthorizedCollector(address,address,uint256,uint256)\":{\"notice\":\"Emitted when a payer authorizes a collector to collect funds\"},\"CancelThaw(address,address)\":{\"notice\":\"Emitted when a payer cancels an escrow thawing\"},\"CancelThawCollector(address,address)\":{\"notice\":\"Emitted when a payer cancels the thawing of a collector\"},\"Deposit(address,address,address,uint256)\":{\"notice\":\"Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple\"},\"EscrowCollected(address,address,address,uint256)\":{\"notice\":\"Emitted when a collector collects funds from the escrow for a payer-collector-receiver tuple\"},\"RevokeCollector(address,address)\":{\"notice\":\"Emitted when a payer revokes a collector authorization.\"},\"Thaw(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a payer thaws funds from the escrow for a payer-collector-receiver tuple\"},\"ThawCollector(address,address)\":{\"notice\":\"Emitted when a payer thaws a collector\"},\"Withdraw(address,address,address,uint256)\":{\"notice\":\"Emitted when a payer withdraws funds from the escrow for a payer-collector-receiver tuple\"}},\"kind\":\"user\",\"methods\":{\"approveCollector(address,uint256)\":{\"notice\":\"Authorize a collector to collect funds from the payer's escrow\"},\"cancelThawCollector(address)\":{\"notice\":\"Cancel a collector's authorization thawing\"},\"collect(uint8,address,address,uint256,address,uint256)\":{\"notice\":\"Collects funds from the payer-collector-receiver's escrow and sends them to {GraphPayments} for distribution using the Graph Horizon Payments protocol. The function will revert if there are not enough funds in the escrow.\"},\"deposit(address,address,uint256)\":{\"notice\":\"Deposits funds into the escrow for a payer-collector-receiver tuple, where the payer is the transaction caller.\"},\"depositTo(address,address,address,uint256)\":{\"notice\":\"Deposits funds into the escrow for a payer-collector-receiver tuple, where the payer can be specified.\"},\"getBalance(address,address,address)\":{\"notice\":\"Get the balance of a payer-collector-receiver tuple\"},\"revokeCollector(address)\":{\"notice\":\"Revoke a collector's authorization. Removes the collector from the list of authorized collectors.\"},\"thaw(address,address,uint256)\":{\"notice\":\"Thaw a specific amount of escrow from a payer-collector-receiver's escrow account. The payer is the transaction caller. If `tokens` is zero and funds were already thawing it will cancel the thawing. Note that repeated calls to this function will overwrite the previous thawing amount and reset the thawing period.\"},\"thawCollector(address)\":{\"notice\":\"Thaw a collector's collector authorization\"},\"withdraw(address,address)\":{\"notice\":\"Withdraws all thawed escrow from a payer-collector-receiver's escrow account. The payer is the transaction caller. Note that the withdrawn funds might be less than the thawed amount if there were payment collections in the meantime.\"}},\"notice\":\"This contract is part of the Graph Horizon payments protocol. It holds the funds (GRT) for payments made through the payments protocol for services provided via a Graph Horizon data service. Payers deposit funds on the escrow, signalling their ability to pay for a service, and only being able to retrieve them after a thawing period. Receivers collect funds from the escrow, provided the payer has authorized them. The payer authorization is delegated to a payment collector contract which implements the {IPaymentsCollector} interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":\"IPaymentsEscrow\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol": { - "ITAPCollector": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "dataService", - "type": "address" - } - ], - "name": "TAPCollectorCallerNotDataService", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensCollected", - "type": "uint256" - } - ], - "name": "TAPCollectorInconsistentRAVTokens", - "type": "error" - }, - { - "inputs": [], - "name": "TAPCollectorInvalidRAVSigner", - "type": "error" - }, - { - "inputs": [], - "name": "TAPCollectorInvalidSignerProof", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proofDeadline", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentTimestamp", - "type": "uint256" - } - ], - "name": "TAPCollectorInvalidSignerProofDeadline", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "authorizingPayer", - "type": "address" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "TAPCollectorSignerAlreadyAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "TAPCollectorSignerNotAuthorizedByPayer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "TAPCollectorSignerNotThawing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "TAPCollectorSignerStillThawing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReceiver", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "PaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "timestampNs", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "valueAggregate", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "RAVCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "authorizedSigner", - "type": "address" - } - ], - "name": "SignerAuthorized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "authorizedSigner", - "type": "address" - } - ], - "name": "SignerRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "authorizedSigner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "SignerThawCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "authorizedSigner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawEndTimestamp", - "type": "uint256" - } - ], - "name": "SignerThawing", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "proofDeadline", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "proof", - "type": "bytes" - } - ], - "name": "authorizeSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "cancelThawSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint64", - "name": "timestampNs", - "type": "uint64" - }, - { - "internalType": "uint128", - "name": "valueAggregate", - "type": "uint128" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", - "name": "rav", - "type": "tuple" - } - ], - "name": "encodeRAV", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "dataService", - "type": "address" - }, - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint64", - "name": "timestampNs", - "type": "uint64" - }, - { - "internalType": "uint128", - "name": "valueAggregate", - "type": "uint128" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "internalType": "struct ITAPCollector.ReceiptAggregateVoucher", - "name": "rav", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct ITAPCollector.SignedRAV", - "name": "signedRAV", - "type": "tuple" - } - ], - "name": "recoverRAVSigner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "revokeAuthorizedSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "thawSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "authorizeSigner(address,uint256,bytes)": "fee9f01f", - "cancelThawSigner(address)": "015cdd80", - "collect(uint8,bytes)": "7f07d283", - "encodeRAV((address,address,uint64,uint128,bytes))": "8821603c", - "recoverRAVSigner(((address,address,uint64,uint128,bytes),bytes))": "1ef518f2", - "revokeAuthorizedSigner(address)": "39aa7416", - "thawSigner(address)": "1354f019" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"}],\"name\":\"TAPCollectorCallerNotDataService\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensCollected\",\"type\":\"uint256\"}],\"name\":\"TAPCollectorInconsistentRAVTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TAPCollectorInvalidRAVSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TAPCollectorInvalidSignerProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofDeadline\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"}],\"name\":\"TAPCollectorInvalidSignerProofDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizingPayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"TAPCollectorSignerAlreadyAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"TAPCollectorSignerNotAuthorizedByPayer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"TAPCollectorSignerNotThawing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"TAPCollectorSignerStillThawing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReceiver\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"PaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"RAVCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizedSigner\",\"type\":\"address\"}],\"name\":\"SignerAuthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizedSigner\",\"type\":\"address\"}],\"name\":\"SignerRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizedSigner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizedSigner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawEndTimestamp\",\"type\":\"uint256\"}],\"name\":\"SignerThawing\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"proofDeadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"authorizeSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"cancelThawSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct ITAPCollector.ReceiptAggregateVoucher\",\"name\":\"rav\",\"type\":\"tuple\"}],\"name\":\"encodeRAV\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataService\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestampNs\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"valueAggregate\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct ITAPCollector.ReceiptAggregateVoucher\",\"name\":\"rav\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct ITAPCollector.SignedRAV\",\"name\":\"signedRAV\",\"type\":\"tuple\"}],\"name\":\"recoverRAVSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"revokeAuthorizedSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"thawSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implements the {IPaymentCollector} interface as defined by the Graph Horizon payments protocol.\",\"errors\":{\"TAPCollectorCallerNotDataService(address,address)\":[{\"params\":{\"caller\":\"The address of the caller\",\"dataService\":\"The address of the data service\"}}],\"TAPCollectorInconsistentRAVTokens(uint256,uint256)\":[{\"params\":{\"tokens\":\"The amount of tokens in the RAV\",\"tokensCollected\":\"The amount of tokens already collected\"}}],\"TAPCollectorInvalidSignerProofDeadline(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"proofDeadline\":\"The deadline for the proof provided by the signer\"}}],\"TAPCollectorSignerAlreadyAuthorized(address,address)\":[{\"params\":{\"authorizingPayer\":\"The address of the payer authorizing the signer\",\"signer\":\"The address of the signer\"}}],\"TAPCollectorSignerNotAuthorizedByPayer(address,address)\":[{\"params\":{\"payer\":\"The address of the payer\",\"signer\":\"The address of the signer\"}}],\"TAPCollectorSignerNotThawing(address)\":[{\"params\":{\"signer\":\"The address of the signer\"}}],\"TAPCollectorSignerStillThawing(uint256,uint256)\":[{\"params\":{\"currentTimestamp\":\"The current timestamp\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}]},\"events\":{\"PaymentCollected(uint8,address,address,uint256,address,uint256)\":{\"params\":{\"dataService\":\"The address of the data service\",\"payer\":\"The address of the payer\",\"paymentType\":\"The payment type collected as defined by {IGraphPayments}\",\"receiver\":\"The address of the receiver\",\"tokensDataService\":\"The amount of tokens received by the data service\",\"tokensReceiver\":\"The amount of tokens received by the receiver\"}},\"RAVCollected(address,address,address,uint64,uint128,bytes,bytes)\":{\"params\":{\"dataService\":\"The address of the data service\",\"metadata\":\"Arbitrary metadata\",\"payer\":\"The address of the payer\",\"serviceProvider\":\"The address of the service provider\",\"signature\":\"The signature of the RAV\",\"timestampNs\":\"The timestamp of the RAV\",\"valueAggregate\":\"The total amount owed to the service provider\"}},\"SignerAuthorized(address,address)\":{\"params\":{\"authorizedSigner\":\"The address of the authorized signer\",\"payer\":\"The address of the payer authorizing the signer\"}},\"SignerRevoked(address,address)\":{\"details\":\"Emitted when a authorized signer has been revoked\",\"params\":{\"authorizedSigner\":\"The address of the authorized signer\",\"payer\":\"The address of the payer revoking the signer\"}},\"SignerThawCanceled(address,address,uint256)\":{\"details\":\"Emitted when the thawing of a signer is cancelled\",\"params\":{\"authorizedSigner\":\"The address of the authorized signer\",\"payer\":\"The address of the payer cancelling the thawing\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}},\"SignerThawing(address,address,uint256)\":{\"params\":{\"authorizedSigner\":\"The address of the signer to thaw\",\"payer\":\"The address of the payer thawing the signer\",\"thawEndTimestamp\":\"The timestamp at which the thawing period ends\"}}},\"kind\":\"dev\",\"methods\":{\"authorizeSigner(address,uint256,bytes)\":{\"details\":\"Requirements: - `signer` must not be already authorized - `proofDeadline` must be greater than the current timestamp - `proof` must be a valid signature from the signer being authorized Emits an {SignerAuthorized} event\",\"params\":{\"proof\":\"The proof provided by the signer to be authorized by the payer, consists of (chainID, proof deadline, sender address)\",\"proofDeadline\":\"The deadline for the proof provided by the signer\",\"signer\":\"The addres of the authorized signer\"}},\"cancelThawSigner(address)\":{\"details\":\"Requirements: - `signer` must be thawing and authorized by the payer calling this function Emits a {SignerThawCanceled} event\",\"params\":{\"signer\":\"The address of the signer to cancel thawing\"}},\"collect(uint8,bytes)\":{\"details\":\"This function should require the caller to present some form of evidence of the payer's debt to the receiver. The collector should validate this evidence and, if valid, collect the payment. Requirements: - The caller must be the data service the RAV was issued to - The signer of the RAV must be authorized to sign for the payer Emits a {PaymentCollected} event\",\"params\":{\"data\":\"Additional data required for the payment collection. Will vary depending on the collector implementation.\",\"paymentType\":\"The payment type to collect, as defined by {IGraphPayments}\"}},\"encodeRAV((address,address,uint64,uint128,bytes))\":{\"details\":\"Computes the hash of a ReceiptAggregateVoucher (RAV).\",\"params\":{\"rav\":\"The RAV for which to compute the hash.\"},\"returns\":{\"_0\":\"The hash of the RAV.\"}},\"recoverRAVSigner(((address,address,uint64,uint128,bytes),bytes))\":{\"details\":\"Recovers the signer address of a signed ReceiptAggregateVoucher (RAV).\",\"params\":{\"signedRAV\":\"The SignedRAV containing the RAV and its signature.\"},\"returns\":{\"_0\":\"The address of the signer.\"}},\"revokeAuthorizedSigner(address)\":{\"details\":\"Requirements: - `signer` must be thawed and authorized by the payer calling this function Emits a {SignerRevoked} event\",\"params\":{\"signer\":\"The address of the signer\"}},\"thawSigner(address)\":{\"details\":\"Thawing a signer alerts receivers that signatures from that signer will soon be deemed invalid. Receivers without existing signed receipts or RAVs from this signer should treat them as unauthorized. Those with existing signed documents from this signer should work towards settling their engagements. Once a signer is thawed, they should be viewed as revoked regardless of their revocation status. Requirements: - `signer` must be authorized by the payer calling this function Emits a {SignerThawing} event\",\"params\":{\"signer\":\"The address of the signer to thaw\"}}},\"title\":\"Interface for the {TAPCollector} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"TAPCollectorCallerNotDataService(address,address)\":[{\"notice\":\"Thrown when the caller is not the data service the RAV was issued to\"}],\"TAPCollectorInconsistentRAVTokens(uint256,uint256)\":[{\"notice\":\"Thrown when the tokens collected are inconsistent with the collection history Each RAV should have a value greater than the previous one\"}],\"TAPCollectorInvalidRAVSigner()\":[{\"notice\":\"Thrown when the RAV signer is invalid\"}],\"TAPCollectorInvalidSignerProof()\":[{\"notice\":\"Thrown when the signer proof is invalid\"}],\"TAPCollectorInvalidSignerProofDeadline(uint256,uint256)\":[{\"notice\":\"Thrown when the signer proof deadline is invalid\"}],\"TAPCollectorSignerAlreadyAuthorized(address,address)\":[{\"notice\":\"Thrown when the signer is already authorized\"}],\"TAPCollectorSignerNotAuthorizedByPayer(address,address)\":[{\"notice\":\"Thrown when the signer is not authorized by the payer\"}],\"TAPCollectorSignerNotThawing(address)\":[{\"notice\":\"Thrown when the signer is not thawing\"}],\"TAPCollectorSignerStillThawing(uint256,uint256)\":[{\"notice\":\"Thrown when the signer is still thawing\"}]},\"events\":{\"PaymentCollected(uint8,address,address,uint256,address,uint256)\":{\"notice\":\"Emitted when a payment is collected\"},\"RAVCollected(address,address,address,uint64,uint128,bytes,bytes)\":{\"notice\":\"Emitted when a RAV is collected\"},\"SignerAuthorized(address,address)\":{\"notice\":\"Emitted when a signer is authorized to sign RAVs for a payer\"},\"SignerThawing(address,address,uint256)\":{\"notice\":\"Emitted when a signer is thawed to be removed from the authorized signers list\"}},\"kind\":\"user\",\"methods\":{\"authorizeSigner(address,uint256,bytes)\":{\"notice\":\"Authorize a signer to sign on behalf of the payer\"},\"cancelThawSigner(address)\":{\"notice\":\"Stops thawing a signer.\"},\"collect(uint8,bytes)\":{\"notice\":\"Initiate a payment collection through the payments protocol\"},\"revokeAuthorizedSigner(address)\":{\"notice\":\"Revokes a signer from the authorized signers list if thawed.\"},\"thawSigner(address)\":{\"notice\":\"Starts thawing a signer to be removed from the authorized signers list\"}},\"notice\":\"Implements a payments collector contract that can be used to collect payments using a TAP RAV (Receipt Aggregate Voucher).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\":\"ITAPCollector\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":{\"keccak256\":\"0x86f3cfc8eaac309e99018dda796248fb44130b09c2e5bcfc6c63c0e568803bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://176a017cb5c677222ac6a82fecd798292f5f41b4dcb9e16768fbf87816381010\",\"dweb:/ipfs/QmNuLfA5nZptMzWPuvDzJnm7Pwt7uYn1A7G8fwTWPy5Ybm\"]},\"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\":{\"keccak256\":\"0xa5a882c413c68bfe914bad5e419c0340d7d6a6aef453894ea10b7b96458932bc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5dfc1a11d94b22db5a9262b7038c2fb9c69616f47a11507f59efcc5aa1dcf9b\",\"dweb:/ipfs/QmQ8ahkkfm8PXTuZc5Q8zX2RzXHoSi9btYc57KMvtCrLMU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol": { - "IHorizonStakingBase": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "StakeDeposited", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegatedTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "delegator", - "type": "address" - } - ], - "name": "getDelegation", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Delegation", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - } - ], - "name": "getDelegationFeeCut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getDelegationPool", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.DelegationPool", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getIdleStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getMaxThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProviderTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "getProvision", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensThawing", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesThawing", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "createdAt", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "maxVerifierCutPending", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriodPending", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.Provision", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getServiceProvider", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "tokensStaked", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensProvisioned", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ServiceProvider", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "getStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - } - ], - "name": "getThawRequest", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "next", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "thawingNonce", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingTypes.ThawRequest", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawRequestList", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "internalType": "struct LinkedList.List", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "getThawedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint32", - "name": "delegationRatio", - "type": "uint32" - } - ], - "name": "getTokensAvailable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "isAllowedLockedVerifier", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isDelegationSlashingEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "getDelegatedTokensAvailable(address,address)": "fb744cc0", - "getDelegation(address,address,address)": "ccebcabb", - "getDelegationFeeCut(address,address,uint8)": "7573ef4f", - "getDelegationPool(address,address)": "561285e4", - "getIdleStake(address)": "a784d498", - "getMaxThawingPeriod()": "39514ad2", - "getProviderTokensAvailable(address,address)": "08ce5f68", - "getProvision(address,address)": "25d9897e", - "getServiceProvider(address)": "8cc01c86", - "getStake(address)": "7a766460", - "getThawRequest(bytes32)": "b7ca7241", - "getThawRequestList(address,address,address)": "a212daf8", - "getThawedTokens(address,address,address)": "9054e343", - "getTokensAvailable(address,address,uint32)": "872d0489", - "isAllowedLockedVerifier(address)": "ae4fe67a", - "isDelegationSlashingEnabled()": "fc54fb27" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeDeposited\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getDelegatedTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"getDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.Delegation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"}],\"name\":\"getDelegationFeeCut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getDelegationPool\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sharesThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.DelegationPool\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getIdleStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getProviderTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"getProvision\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sharesThawing\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAt\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCutPending\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriodPending\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.Provision\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getServiceProvider\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokensStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensProvisioned\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ServiceProvider\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"}],\"name\":\"getThawRequest\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"next\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"thawingNonce\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingTypes.ThawRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getThawRequestList\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"internalType\":\"struct LinkedList.List\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getThawedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"}],\"name\":\"getTokensAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"isAllowedLockedVerifier\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDelegationSlashingEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision functions take `serviceProvider` and `verifier` addresses.\",\"events\":{\"StakeDeposited(address,uint256)\":{\"details\":\"TODO: After transition period move to IHorizonStakingMain. Temporarily it needs to be here since it's emitted by {_stake} which is used by both {HorizonStaking} and {HorizonStakingExtension}.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens staked.\"}}},\"kind\":\"dev\",\"methods\":{\"getDelegatedTokensAvailable(address,address)\":{\"details\":\"Calculated as the tokens available minus the tokens thawing.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"getDelegation(address,address,address)\":{\"params\":{\"delegator\":\"The address of the delegator.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation details.\"}},\"getDelegationFeeCut(address,address,uint8)\":{\"params\":{\"paymentType\":\"The payment type as defined by {IGraphPayments.PaymentTypes}.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation fee cut in PPM.\"}},\"getDelegationPool(address,address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The delegation pool details.\"}},\"getIdleStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens that are idle.\"}},\"getProviderTokensAvailable(address,address)\":{\"details\":\"Calculated as the tokens available minus the tokens thawing.\",\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"getProvision(address,address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The provision details.\"}},\"getServiceProvider(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"getStake(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens staked.\"}},\"getThawRequest(bytes32)\":{\"params\":{\"thawRequestId\":\"The id of the thaw request.\"},\"returns\":{\"_0\":\"The thaw request details.\"}},\"getThawRequestList(address,address,address)\":{\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The thaw requests list metadata.\"}},\"getThawedTokens(address,address,address)\":{\"params\":{\"owner\":\"The owner of the thaw requests. Use either the service provider or delegator address.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of thawed tokens.\"}},\"getTokensAvailable(address,address,uint32)\":{\"params\":{\"delegationRatio\":\"The delegation ratio.\",\"serviceProvider\":\"The address of the service provider.\",\"verifier\":\"The address of the verifier.\"},\"returns\":{\"_0\":\"The amount of tokens available.\"}},\"isAllowedLockedVerifier(address)\":{\"params\":{\"verifier\":\"Address of the verifier\"},\"returns\":{\"_0\":\"True if verifier is allowed locked verifier, false otherwise\"}}},\"title\":\"Interface for the {HorizonStakingBase} contract.\",\"version\":1},\"userdoc\":{\"events\":{\"StakeDeposited(address,uint256)\":{\"notice\":\"Emitted when a service provider stakes tokens.\"}},\"kind\":\"user\",\"methods\":{\"getDelegatedTokensAvailable(address,address)\":{\"notice\":\"Gets the delegator's tokens available in a provision.\"},\"getDelegation(address,address,address)\":{\"notice\":\"Gets the details of a delegation.\"},\"getDelegationFeeCut(address,address,uint8)\":{\"notice\":\"Gets the delegation fee cut for a payment type.\"},\"getDelegationPool(address,address)\":{\"notice\":\"Gets the details of delegation pool.\"},\"getIdleStake(address)\":{\"notice\":\"Gets the service provider's idle stake which is the stake that is not being used for any provision. Note that this only includes service provider's self stake.\"},\"getMaxThawingPeriod()\":{\"notice\":\"Gets the maximum allowed thawing period for a provision.\"},\"getProviderTokensAvailable(address,address)\":{\"notice\":\"Gets the service provider's tokens available in a provision.\"},\"getProvision(address,address)\":{\"notice\":\"Gets the details of a provision.\"},\"getServiceProvider(address)\":{\"notice\":\"Gets the details of a service provider.\"},\"getStake(address)\":{\"notice\":\"Gets the stake of a service provider.\"},\"getThawRequest(bytes32)\":{\"notice\":\"Gets a thaw request.\"},\"getThawRequestList(address,address,address)\":{\"notice\":\"Gets the metadata of a thaw request list. Service provider and delegators each have their own thaw request list per provision. Metadata includes the head and tail of the list, plus the total number of thaw requests.\"},\"getThawedTokens(address,address,address)\":{\"notice\":\"Gets the amount of thawed tokens for a given provision.\"},\"getTokensAvailable(address,address,uint32)\":{\"notice\":\"Gets the tokens available in a provision. Tokens available are the tokens in a provision that are not thawing. Includes service provider's and delegator's stake. Allows specifying a `delegationRatio` which caps the amount of delegated tokens that are considered available.\"},\"isAllowedLockedVerifier(address)\":{\"notice\":\"Return true if the verifier is an allowed locked verifier.\"},\"isDelegationSlashingEnabled()\":{\"notice\":\"Return true if delegation slashing is enabled, false otherwise.\"}},\"notice\":\"Provides getters for {HorizonStaking} and {HorizonStakingExtension} storage variables.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":\"IHorizonStakingBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol": { - "IHorizonStakingExtension": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "isPublic", - "type": "bool" - } - ], - "name": "AllocationClosed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "assetHolder", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "protocolTax", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "curationFees", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queryFees", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queryRebates", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "delegationRewards", - "type": "uint256" - } - ], - "name": "RebateCollected", - "type": "event" - }, - { - "inputs": [], - "name": "__DEPRECATED_getThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - } - ], - "name": "closeAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "collect", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "getAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAtEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAtEpoch", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "collectedFees", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "__DEPRECATED_effectiveAllocation", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "distributedRebates", - "type": "uint256" - } - ], - "internalType": "struct IHorizonStakingExtension.Allocation", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocationData", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "getAllocationState", - "outputs": [ - { - "internalType": "enum IHorizonStakingExtension.AllocationState", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "getIndexerStakedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "getSubgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "hasStake", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_allocationId", - "type": "address" - } - ], - "name": "isActiveAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationID", - "type": "address" - } - ], - "name": "isAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "isOperator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "__DEPRECATED_getThawingPeriod()": "c0641994", - "closeAllocation(address,bytes32)": "44c32a61", - "collect(uint256,address)": "8d3c100a", - "getAllocation(address)": "0e022923", - "getAllocationData(address)": "55c85269", - "getAllocationState(address)": "98c657dc", - "getIndexerStakedTokens(address)": "1787e69f", - "getSubgraphAllocatedTokens(bytes32)": "e2e1e8e9", - "hasStake(address)": "e73e14bf", - "isActiveAllocation(address)": "6a3ca383", - "isAllocation(address)": "f1d60d66", - "isOperator(address,address)": "b6363cf2" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"}],\"name\":\"AllocationClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assetHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolTax\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"curationFees\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"queryFees\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"queryRebates\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"delegationRewards\",\"type\":\"uint256\"}],\"name\":\"RebateCollected\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__DEPRECATED_getThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"}],\"name\":\"closeAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAtEpoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAtEpoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collectedFees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"__DEPRECATED_effectiveAllocation\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"distributedRebates\",\"type\":\"uint256\"}],\"internalType\":\"struct IHorizonStakingExtension.Allocation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"getAllocationState\",\"outputs\":[{\"internalType\":\"enum IHorizonStakingExtension.AllocationState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getIndexerStakedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"hasStake\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_allocationId\",\"type\":\"address\"}],\"name\":\"isActiveAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationID\",\"type\":\"address\"}],\"name\":\"isAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)\":{\"details\":\"Emitted when `indexer` close an allocation in `epoch` for `allocationID`. An amount of `tokens` get unallocated from `subgraphDeploymentID`. This event also emits the POI (proof of indexing) submitted by the indexer. `isPublic` is true if the sender was someone other than the indexer.\"},\"RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when `indexer` collects a rebate on `subgraphDeploymentID` for `allocationID`. `epoch` is the protocol epoch the rebate was collected on The rebate is for `tokens` amount which are being provided by `assetHolder`; `queryFees` is the amount up for rebate after `curationFees` are distributed and `protocolTax` is burnt. `queryRebates` is the amount distributed to the `indexer` with `delegationFees` collected and sent to the delegation pool.\"}},\"kind\":\"dev\",\"methods\":{\"__DEPRECATED_getThawingPeriod()\":{\"returns\":{\"_0\":\"Thawing period in blocks\"}},\"closeAllocation(address,bytes32)\":{\"params\":{\"allocationID\":\"The allocation identifier\",\"poi\":\"Proof of indexing submitted for the allocated period\"}},\"collect(uint256,address)\":{\"details\":\"To avoid reverting on the withdrawal from channel flow this function will: 1) Accept calls with zero tokens. 2) Accept calls after an allocation passed the dispute period, in that case, all the received tokens are burned.\",\"params\":{\"allocationID\":\"Allocation where the tokens will be assigned\",\"tokens\":\"Amount of tokens to collect\"}},\"getAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as allocation identifier\"},\"returns\":{\"_0\":\"Allocation data\"}},\"getAllocationData(address)\":{\"details\":\"Get allocation data to calculate rewards issuance\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"accRewardsPending\":\"Snapshot of accumulated rewards from previous allocation resizing, pending to be claimed\",\"accRewardsPerAllocatedToken\":\"Rewards snapshot\",\"indexer\":\"The indexer address\",\"subgraphDeploymentId\":\"Subgraph deployment id for the allocation\",\"tokens\":\"Amount of allocated tokens\"}},\"getAllocationState(address)\":{\"params\":{\"allocationID\":\"Allocation identifier\"},\"returns\":{\"_0\":\"AllocationState enum with the state of the allocation\"}},\"getIndexerStakedTokens(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"Amount of tokens staked by the indexer\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"params\":{\"_subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"hasStake(address)\":{\"params\":{\"indexer\":\"Address of the indexer\"},\"returns\":{\"_0\":\"True if indexer has staked tokens\"}},\"isActiveAllocation(address)\":{\"params\":{\"_allocationId\":\"Allocation Id\"},\"returns\":{\"_0\":\"Whether or not the allocation is active\"}},\"isAllocation(address)\":{\"params\":{\"allocationID\":\"Address used as signer by the indexer for an allocation\"},\"returns\":{\"_0\":\"True if allocationID already used\"}},\"isOperator(address,address)\":{\"params\":{\"indexer\":\"Address of the indexer\",\"operator\":\"Address of the operator\"},\"returns\":{\"_0\":\"True if operator is allowed for indexer, false otherwise\"}}},\"title\":\"Interface for {HorizonStakingExtension} contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"__DEPRECATED_getThawingPeriod()\":{\"notice\":\"Return the time in blocks to unstake\"},\"closeAllocation(address,bytes32)\":{\"notice\":\"Close an allocation and free the staked tokens. To be eligible for rewards a proof of indexing must be presented. Presenting a bad proof is subject to slashable condition. To opt out of rewards set _poi to 0x0\"},\"collect(uint256,address)\":{\"notice\":\"Collect query fees from state channels and assign them to an allocation. Funds received are only accepted from a valid sender.\"},\"getAllocation(address)\":{\"notice\":\"Return the allocation by ID.\"},\"getAllocationState(address)\":{\"notice\":\"Return the current state of an allocation\"},\"getIndexerStakedTokens(address)\":{\"notice\":\"Get the total amount of tokens staked by the indexer.\"},\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"hasStake(address)\":{\"notice\":\"Getter that returns if an indexer has any stake.\"},\"isActiveAllocation(address)\":{\"notice\":\"Whether or not an allocation is active (i.e open)\"},\"isAllocation(address)\":{\"notice\":\"Return if allocationID is used.\"},\"isOperator(address,address)\":{\"notice\":\"Return true if operator is allowed for indexer.\"}},\"notice\":\"Provides functions for managing legacy allocations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":\"IHorizonStakingExtension\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol": { - "IHorizonStakingMain": { - "abi": [ - { - "inputs": [], - "name": "HorizonStakingCallerIsServiceProvider", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientIdleStake", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minShares", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientShares", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientStakeForLegacyAllocations", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minRequired", - "type": "uint256" - } - ], - "name": "HorizonStakingInsufficientTokens", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidBeneficiaryZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "HorizonStakingInvalidDelegationFeeCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidDelegationPool", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidDelegationPoolState", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - } - ], - "name": "HorizonStakingInvalidMaxVerifierCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingInvalidProvision", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidServiceProviderZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "HorizonStakingInvalidThawingPeriod", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidVerifierZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidZeroShares", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingInvalidZeroTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "HorizonStakingNotAuthorized", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingNothingThawing", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingProvisionAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minShares", - "type": "uint256" - } - ], - "name": "HorizonStakingSlippageProtection", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "until", - "type": "uint256" - } - ], - "name": "HorizonStakingStillThawing", - "type": "error" - }, - { - "inputs": [], - "name": "HorizonStakingTooManyThawRequests", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxTokens", - "type": "uint256" - } - ], - "name": "HorizonStakingTooManyTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - } - ], - "name": "HorizonStakingVerifierNotAllowed", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "AllowedLockedVerifierSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegatedTokensWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "DelegationFeeCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegationSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "enabled", - "type": "bool" - } - ], - "name": "DelegationSlashingEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DelegationSlashingSkipped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "MaxThawingPeriodSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "OperatorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionParametersSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "ProvisionParametersStaged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ProvisionThawed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "until", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - } - ], - "name": "ThawRequestCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "thawRequestId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "thawingUntil", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bool", - "name": "valid", - "type": "bool" - } - ], - "name": "ThawRequestFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "thawRequestsFulfilled", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ThawRequestsFulfilled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "ThawingPeriodCleared", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensDelegated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensDeprovisioned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensToDelegationPoolAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "TokensUndelegated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "VerifierTokensSent", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "acceptProvisionParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "addToDelegationPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "addToProvision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "clearThawingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minSharesOut", - "type": "uint256" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "deprovision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isAuthorized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "provision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "provisionLocked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oldServiceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "oldVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "newServiceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "newVerifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minSharesForNewProvider", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "redelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "oldVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "newVerifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "reprovision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setAllowedLockedVerifier", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "feeCut", - "type": "uint256" - } - ], - "name": "setDelegationFeeCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "setDelegationSlashingEnabled", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "maxThawingPeriod", - "type": "uint64" - } - ], - "name": "setMaxThawingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setOperatorLocked", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint32", - "name": "maxVerifierCut", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "thawingPeriod", - "type": "uint64" - } - ], - "name": "setProvisionParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensVerifier", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifierDestination", - "type": "address" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stakeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "stakeToProvision", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "thaw", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "beneficiary", - "type": "address" - } - ], - "name": "undelegate", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "undelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "undelegate", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "unstake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "verifier", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nThawRequests", - "type": "uint256" - } - ], - "name": "withdrawDelegated", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "newServiceProvider", - "type": "address" - } - ], - "name": "withdrawDelegated", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "acceptProvisionParameters(address)": "3a78b732", - "addToDelegationPool(address,address,uint256)": "ca94b0e9", - "addToProvision(address,address,uint256)": "fecc9cc1", - "clearThawingPeriod()": "e473522a", - "delegate(address,address,uint256,uint256)": "6230001a", - "delegate(address,uint256)": "026e402b", - "deprovision(address,address,uint256)": "21195373", - "isAuthorized(address,address,address)": "7c145cc7", - "provision(address,address,uint256,uint32,uint64)": "010167e5", - "provisionLocked(address,address,uint256,uint32,uint64)": "82d66cb8", - "redelegate(address,address,address,address,uint256,uint256)": "f64b3598", - "reprovision(address,address,address,uint256)": "ba7fb0b4", - "setAllowedLockedVerifier(address,bool)": "4ca7ac22", - "setDelegationFeeCut(address,address,uint8,uint256)": "42c51693", - "setDelegationSlashingEnabled()": "ef58bd67", - "setMaxThawingPeriod(uint64)": "259bc435", - "setOperator(address,address,bool)": "bc735d90", - "setOperatorLocked(address,address,bool)": "ad4d35b5", - "setProvisionParameters(address,address,uint32,uint64)": "81e21b56", - "slash(address,uint256,uint256,address)": "e76fede6", - "stake(uint256)": "a694fc3a", - "stakeTo(address,uint256)": "a2a31722", - "stakeToProvision(address,address,uint256)": "74612092", - "thaw(address,address,uint256)": "f93f1cd0", - "undelegate(address,address,uint256)": "a02b9426", - "undelegate(address,address,uint256,address)": "162ea5ed", - "undelegate(address,uint256)": "4d99dd16", - "unstake(uint256)": "2e17de78", - "withdraw()": "3ccfd60b", - "withdrawDelegated(address,address)": "51a60b02", - "withdrawDelegated(address,address,uint256)": "3993d849" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"HorizonStakingCallerIsServiceProvider\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientIdleStake\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minShares\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientStakeForLegacyAllocations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minRequired\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInsufficientTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidBeneficiaryZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingInvalidDelegationFeeCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidDelegationPool\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidDelegationPoolState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"}],\"name\":\"HorizonStakingInvalidMaxVerifierCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingInvalidProvision\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidServiceProviderZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"HorizonStakingInvalidThawingPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidVerifierZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingInvalidZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"HorizonStakingNotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingNothingThawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingProvisionAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minShares\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingSlippageProtection\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingStillThawing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HorizonStakingTooManyThawRequests\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"name\":\"HorizonStakingTooManyTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"HorizonStakingVerifierNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"AllowedLockedVerifierSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegatedTokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"DelegationFeeCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegationSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"DelegationSlashingEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DelegationSlashingSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"MaxThawingPeriodSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"OperatorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionParametersSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"ProvisionParametersStaged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ProvisionThawed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"until\",\"type\":\"uint256\"}],\"name\":\"StakeLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"}],\"name\":\"ThawRequestCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"thawRequestId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"thawingUntil\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"ThawRequestFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"thawRequestsFulfilled\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ThawRequestsFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ThawingPeriodCleared\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensDeprovisioned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensToDelegationPoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensUndelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"VerifierTokensSent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"acceptProvisionParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"addToDelegationPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"addToProvision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minSharesOut\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"deprovision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isAuthorized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"provision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"provisionLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldServiceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newServiceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minSharesForNewProvider\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"redelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"reprovision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setAllowedLockedVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"feeCut\",\"type\":\"uint256\"}],\"name\":\"setDelegationFeeCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setDelegationSlashingEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxThawingPeriod\",\"type\":\"uint64\"}],\"name\":\"setMaxThawingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setOperatorLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxVerifierCut\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"thawingPeriod\",\"type\":\"uint64\"}],\"name\":\"setProvisionParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensVerifier\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifierDestination\",\"type\":\"address\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"stakeToProvision\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"thaw\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nThawRequests\",\"type\":\"uint256\"}],\"name\":\"withdrawDelegated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newServiceProvider\",\"type\":\"address\"}],\"name\":\"withdrawDelegated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Note that this interface only includes the functions implemented by {HorizonStaking} contract, and not those implemented by {HorizonStakingExtension}. Do not use this interface to interface with the {HorizonStaking} contract, use {IHorizonStaking} for the complete interface.Most functions operate over {HorizonStaking} provisions. To uniquely identify a provision functions take `serviceProvider` and `verifier` addresses.\",\"errors\":{\"HorizonStakingInsufficientIdleStake(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInsufficientShares(uint256,uint256)\":[{\"params\":{\"minShares\":\"The minimum required share amount\",\"shares\":\"The actual share amount\"}}],\"HorizonStakingInsufficientStakeForLegacyAllocations(uint256,uint256)\":[{\"params\":{\"minTokens\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInsufficientTokens(uint256,uint256)\":[{\"params\":{\"minRequired\":\"The minimum required token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingInvalidDelegationFeeCut(uint256)\":[{\"params\":{\"feeCut\":\"The fee cut\"}}],\"HorizonStakingInvalidDelegationPool(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidDelegationPoolState(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidMaxVerifierCut(uint32)\":[{\"params\":{\"maxVerifierCut\":\"The maximum verifier cut\"}}],\"HorizonStakingInvalidProvision(address,address)\":[{\"params\":{\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"params\":{\"maxThawingPeriod\":\"The maximum `thawingPeriod` allowed\",\"thawingPeriod\":\"The thawing period\"}}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"params\":{\"caller\":\"The caller address\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}],\"HorizonStakingSlippageProtection(uint256,uint256)\":[{\"params\":{\"minShares\":\"The minimum required share amount\",\"shares\":\"The actual share amount\"}}],\"HorizonStakingStillThawing(uint256)\":[{\"details\":\"Note this thawing refers to the global thawing period applied to legacy allocated tokens, it does not refer to thaw requests.\",\"params\":{\"until\":\"The block number until the stake is locked\"}}],\"HorizonStakingTooManyTokens(uint256,uint256)\":[{\"params\":{\"maxTokens\":\"The maximum allowed token amount\",\"tokens\":\"The actual token amount\"}}],\"HorizonStakingVerifierNotAllowed(address)\":[{\"details\":\"Only applies to stake from locked wallets.\"}]},\"events\":{\"AllowedLockedVerifierSet(address,bool)\":{\"params\":{\"allowed\":\"Whether the verifier is allowed or disallowed\",\"verifier\":\"The address of the verifier\"}},\"DelegatedTokensWithdrawn(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\",\"verifier\":\"The address of the verifier\"}},\"DelegationFeeCutSet(address,address,uint8,uint256)\":{\"params\":{\"feeCut\":\"The fee cut set, in PPM\",\"paymentType\":\"The payment type for which the fee cut is set, as defined in {IGraphPayments}\",\"serviceProvider\":\"The address of the service provider\",\"verifier\":\"The address of the verifier\"}},\"DelegationSlashed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens slashed (note this only represents delegation pool's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"DelegationSlashingEnabled(bool)\":{\"params\":{\"enabled\":\"Whether delegation slashing is enabled or disabled.\"}},\"DelegationSlashingSkipped(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens that would have been slashed (note this only represents delegation pool's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"MaxThawingPeriodSet(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period\"}},\"OperatorSet(address,address,address,bool)\":{\"details\":\"Emitted when an operator is allowed or denied by a service provider for a particular verifier\",\"params\":{\"allowed\":\"Whether the operator is allowed or denied\",\"operator\":\"The address of the operator\",\"serviceProvider\":\"The address of the service provider\",\"verifier\":\"The address of the verifier\"}},\"ProvisionCreated(address,address,uint256,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens provisioned\",\"verifier\":\"The address of the verifier\"}},\"ProvisionIncreased(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens added to the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionParametersSet(address,address,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The new maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The new period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionParametersStaged(address,address,uint32,uint64)\":{\"params\":{\"maxVerifierCut\":\"The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The address of the service provider\",\"thawingPeriod\":\"The proposed period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The address of the verifier\"}},\"ProvisionSlashed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens slashed (note this only represents service provider's slashed stake)\",\"verifier\":\"The address of the verifier\"}},\"ProvisionThawed(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens thawed\",\"verifier\":\"The address of the verifier\"}},\"StakeLocked(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens unstaked\",\"until\":\"The block number until the stake is locked\"}},\"StakeWithdrawn(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\"}},\"ThawRequestCreated(address,address,address,uint256,uint64,bytes32)\":{\"details\":\"Can be emitted by the service provider when thawing stake or by the delegator when undelegating.\",\"params\":{\"owner\":\"The address of the owner of the thaw request.\",\"serviceProvider\":\"The address of the service provider\",\"shares\":\"The amount of shares being thawed\",\"thawRequestId\":\"The ID of the thaw request\",\"thawingUntil\":\"The timestamp until the stake is thawed\",\"verifier\":\"The address of the verifier\"}},\"ThawRequestFulfilled(bytes32,uint256,uint256,uint64,bool)\":{\"params\":{\"shares\":\"The amount of shares being released\",\"thawRequestId\":\"The ID of the thaw request\",\"thawingUntil\":\"The timestamp until the stake has thawed\",\"tokens\":\"The amount of tokens being released\",\"valid\":\"Whether the thaw request was valid at the time of fulfillment\"}},\"ThawRequestsFulfilled(address,address,address,uint256,uint256)\":{\"params\":{\"owner\":\"The address of the owner of the thaw requests\",\"serviceProvider\":\"The address of the service provider\",\"thawRequestsFulfilled\":\"The number of thaw requests fulfilled\",\"tokens\":\"The total amount of tokens being released\",\"verifier\":\"The address of the verifier\"}},\"ThawingPeriodCleared()\":{\"details\":\"This marks the end of the transition period.\"},\"TokensDelegated(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens delegated\",\"verifier\":\"The address of the verifier\"}},\"TokensDeprovisioned(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens removed\",\"verifier\":\"The address of the verifier\"}},\"TokensToDelegationPoolAdded(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens withdrawn\",\"verifier\":\"The address of the verifier\"}},\"TokensUndelegated(address,address,address,uint256)\":{\"params\":{\"delegator\":\"The address of the delegator\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens undelegated\",\"verifier\":\"The address of the verifier\"}},\"VerifierTokensSent(address,address,address,uint256)\":{\"params\":{\"destination\":\"The address where the verifier cut is sent\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens sent to the verifier\",\"verifier\":\"The address of the verifier\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionParameters(address)\":{\"details\":\"Only the provision's verifier can call this function. Emits a {ProvisionParametersSet} event.\",\"params\":{\"serviceProvider\":\"The service provider address\"}},\"addToDelegationPool(address,address,uint256)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {TokensToDelegationPoolAdded} event.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to add to the delegation pool\",\"verifier\":\"The verifier address for which the tokens are provisioned\"}},\"addToProvision(address,address,uint256)\":{\"details\":\"Requirements: - The `serviceProvider` must have previously provisioned stake to `verifier`. - `tokens` cannot be zero. - The `serviceProvider` must have enough idle stake to cover the tokens to add. Emits a {ProvisionIncreased} event.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to add to the provision\",\"verifier\":\"The verifier address\"}},\"clearThawingPeriod()\":{\"details\":\"This function can only be called by the contract governor.Emits a {ThawingPeriodCleared} event.\"},\"delegate(address,address,uint256,uint256)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. - The provision must exist. Emits a {TokensDelegated} event.\",\"params\":{\"minSharesOut\":\"The minimum amount of shares to accept, slippage protection.\",\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to delegate\",\"verifier\":\"The verifier address\"}},\"delegate(address,uint256)\":{\"details\":\"See {delegate}.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to delegate\"}},\"deprovision(address,address,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error. Requirements: - Must have previously initiated a thaw request using {thaw}. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {TokensDeprovisioned} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}},\"isAuthorized(address,address,address)\":{\"params\":{\"operator\":\"The address to check for auth\",\"serviceProvider\":\"The service provider on behalf of whom they're claiming to act\",\"verifier\":\"The verifier / data service on which they're claiming to act\"},\"returns\":{\"_0\":\"Whether the operator is authorized or not\"}},\"provision(address,address,uint256,uint32,uint64)\":{\"details\":\"Requirements: - `tokens` cannot be zero. - The `serviceProvider` must have enough idle stake to cover the tokens to provision. - `maxVerifierCut` must be a valid PPM. - `thawingPeriod` must be less than or equal to `_maxThawingPeriod`. Emits a {ProvisionCreated} event.\",\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens that will be locked and slashable\",\"verifier\":\"The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\"}},\"provisionLocked(address,address,uint256,uint32,uint64)\":{\"details\":\"See {provision}. Additional requirements: - The `verifier` must be allowed to be used for locked provisions.\",\"params\":{\"maxVerifierCut\":\"The maximum cut, expressed in PPM, that a verifier can transfer instead of burning when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The period in seconds that the tokens will be thawing before they can be removed from the provision\",\"tokens\":\"The amount of tokens that will be locked and slashable\",\"verifier\":\"The verifier address for which the tokens are provisioned (who will be able to slash the tokens)\"}},\"redelegate(address,address,address,address,uint256,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error. Requirements: - Must have previously initiated a thaw request using {undelegate}. - `newServiceProvider` and `newVerifier` must not be the zero address. - `newServiceProvider` must have previously provisioned stake to `newVerifier`. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\",\"params\":{\"minSharesForNewProvider\":\"The minimum amount of shares to accept for the new service provider\",\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"newServiceProvider\":\"The address of a new service provider\",\"newVerifier\":\"The address of a new verifier\",\"oldServiceProvider\":\"The old service provider address\",\"oldVerifier\":\"The old verifier address\"}},\"reprovision(address,address,address,uint256)\":{\"details\":\"Requirements: - Must have previously initiated a thaw request using {thaw}. - `tokens` cannot be zero. - The `serviceProvider` must have previously provisioned stake to `newVerifier`. - The `serviceProvider` must have enough idle stake to cover the tokens to add. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled}, {TokensDeprovisioned} and {ProvisionIncreased} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"newVerifier\":\"The verifier address for which the tokens will be provisioned\",\"oldVerifier\":\"The verifier address for which the tokens are currently provisioned\",\"serviceProvider\":\"The service provider address\"}},\"setAllowedLockedVerifier(address,bool)\":{\"details\":\"This function can only be called by the contract governor, it's used to maintain a whitelist of verifiers that do not allow the stake from a locked wallet to escape the lock.Emits a {AllowedLockedVerifierSet} event.\",\"params\":{\"allowed\":\"Whether the verifier is allowed or not\",\"verifier\":\"The verifier address\"}},\"setDelegationFeeCut(address,address,uint8,uint256)\":{\"details\":\"Emits a {DelegationFeeCutSet} event.\",\"params\":{\"feeCut\":\"The fee cut to set, in PPM\",\"paymentType\":\"The payment type for which the fee cut is set, as defined in {IGraphPayments}\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}},\"setDelegationSlashingEnabled()\":{\"details\":\"This function can only be called by the contract governor.\"},\"setMaxThawingPeriod(uint64)\":{\"params\":{\"maxThawingPeriod\":\"The new maximum thawing period, in seconds\"}},\"setOperator(address,address,bool)\":{\"details\":\"Emits a {OperatorSet} event.\",\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\",\"verifier\":\"The verifier / data service on which they'll be allowed to operate\"}},\"setOperatorLocked(address,address,bool)\":{\"details\":\"See {setOperator}. Additional requirements: - The `verifier` must be allowed to be used for locked provisions.\",\"params\":{\"allowed\":\"Whether the operator is authorized or not\",\"operator\":\"Address to authorize or unauthorize\",\"verifier\":\"The verifier / data service on which they'll be allowed to operate\"}},\"setProvisionParameters(address,address,uint32,uint64)\":{\"details\":\"This two step update process prevents the service provider from changing the parameters without the verifier's consent. Emits a {ProvisionParametersStaged} event if at least one of the parameters changed.\",\"params\":{\"maxVerifierCut\":\"The proposed maximum cut, expressed in PPM of the slashed amount, that a verifier can take for themselves when slashing\",\"serviceProvider\":\"The service provider address\",\"thawingPeriod\":\"The proposed period in seconds that the tokens will be thawing before they can be removed from the provision\",\"verifier\":\"The verifier address\"}},\"slash(address,uint256,uint256,address)\":{\"details\":\"Requirements: - `tokens` must be less than or equal to the amount of tokens provisioned by the service provider. - `tokensVerifier` must be less than the provision's tokens times the provision's maximum verifier cut. Emits a {ProvisionSlashed} and {VerifierTokensSent} events. Emits a {DelegationSlashed} or {DelegationSlashingSkipped} event depending on the global delegation slashing flag.\",\"params\":{\"serviceProvider\":\"The service provider to slash\",\"tokens\":\"The amount of tokens to slash\",\"tokensVerifier\":\"The amount of tokens to transfer instead of burning\",\"verifierDestination\":\"The address to transfer the verifier cut to\"}},\"stake(uint256)\":{\"details\":\"Pulls tokens from the caller. Requirements: - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {StakeDeposited} event.\",\"params\":{\"tokens\":\"Amount of tokens to stake\"}},\"stakeTo(address,uint256)\":{\"details\":\"Pulls tokens from the caller. Requirements: - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits a {StakeDeposited} event.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\"}},\"stakeToProvision(address,address,uint256)\":{\"details\":\"Requirements: - The `serviceProvider` must have previously provisioned stake to `verifier`. - `_tokens` cannot be zero. - Caller must have previously approved this contract to pull tokens from their balance. Emits {StakeDeposited} and {ProvisionIncreased} events.\",\"params\":{\"serviceProvider\":\"Address of the service provider\",\"tokens\":\"Amount of tokens to stake\",\"verifier\":\"Address of the verifier\"}},\"thaw(address,address,uint256)\":{\"details\":\"Requirements: - The provision must have enough tokens available to thaw. - `tokens` cannot be zero. Emits {ProvisionThawed} and {ThawRequestCreated} events.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"tokens\":\"The amount of tokens to thaw\",\"verifier\":\"The verifier address for which the tokens are provisioned\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,address,uint256)\":{\"params\":{\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\",\"verifier\":\"The verifier address\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,address,uint256,address)\":{\"params\":{\"beneficiary\":\"The address where the tokens will be withdrawn after thawing\",\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\",\"verifier\":\"The verifier address\"},\"returns\":{\"_0\":\"The ID of the thaw request\"}},\"undelegate(address,uint256)\":{\"details\":\"See {undelegate}.\",\"params\":{\"serviceProvider\":\"The service provider address\",\"shares\":\"The amount of shares to undelegate\"}},\"unstake(uint256)\":{\"details\":\"Requirements: - `_tokens` cannot be zero. - `_serviceProvider` must have enough idle stake to cover the staking amount and any legacy allocation. Emits a {StakeLocked} event during the transition period. Emits a {StakeWithdrawn} event after the transition period.\",\"params\":{\"tokens\":\"Amount of tokens to unstake\"}},\"withdraw()\":{\"details\":\"This is only needed during the transition period while we still have a global lock. After that, unstake() will automatically withdraw.\"},\"withdrawDelegated(address,address)\":{\"details\":\"See {delegate}.\",\"params\":{\"newServiceProvider\":\"The address of a new service provider, if the delegator wants to re-delegate\",\"serviceProvider\":\"The service provider address\"}},\"withdrawDelegated(address,address,uint256)\":{\"details\":\"The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw requests in the event that fulfilling all of them results in a gas limit error.If the delegation pool was completely slashed before withdrawing, calling this function will fulfill the thaw requests with an amount equal to zero. Requirements: - Must have previously initiated a thaw request using {undelegate}. Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events.\",\"params\":{\"nThawRequests\":\"The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests.\",\"serviceProvider\":\"The service provider address\",\"verifier\":\"The verifier address\"}}},\"title\":\"Inferface for the {HorizonStaking} contract.\",\"version\":1},\"userdoc\":{\"errors\":{\"HorizonStakingCallerIsServiceProvider()\":[{\"notice\":\"Thrown when a service provider attempts to change their own operator access.\"}],\"HorizonStakingInsufficientIdleStake(uint256,uint256)\":[{\"notice\":\"Thrown when the service provider has insufficient idle stake to operate.\"}],\"HorizonStakingInsufficientShares(uint256,uint256)\":[{\"notice\":\"Thrown when a minimum share amount is required to operate but it's not met.\"}],\"HorizonStakingInsufficientStakeForLegacyAllocations(uint256,uint256)\":[{\"notice\":\"Thrown during the transition period when the service provider has insufficient stake to cover their existing legacy allocations.\"}],\"HorizonStakingInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when a minimum token amount is required to operate but it's not met.\"}],\"HorizonStakingInvalidBeneficiaryZeroAddress()\":[{\"notice\":\"Thrown when attempting to undelegate with a beneficiary that is the zero address.\"}],\"HorizonStakingInvalidDelegationFeeCut(uint256)\":[{\"notice\":\"Thrown when trying to set a delegation fee cut that is not valid.\"}],\"HorizonStakingInvalidDelegationPool(address,address)\":[{\"notice\":\"Thrown when attempting to operate with a delegation pool that does not exist.\"}],\"HorizonStakingInvalidDelegationPoolState(address,address)\":[{\"notice\":\"Thrown when as a result of slashing delegation pool has no tokens but has shares.\"}],\"HorizonStakingInvalidMaxVerifierCut(uint32)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid maximum verifier cut.\"}],\"HorizonStakingInvalidProvision(address,address)\":[{\"notice\":\"Thrown when attempting to operate with a provision that does not exist.\"}],\"HorizonStakingInvalidServiceProviderZeroAddress()\":[{\"notice\":\"Thrown when attempting to redelegate with a serivce provider that is the zero address.\"}],\"HorizonStakingInvalidThawingPeriod(uint64,uint64)\":[{\"notice\":\"Thrown when attempting to create a provision with an invalid thawing period.\"}],\"HorizonStakingInvalidVerifierZeroAddress()\":[{\"notice\":\"Thrown when attempting to redelegate with a verifier that is the zero address.\"}],\"HorizonStakingInvalidZeroShares()\":[{\"notice\":\"Thrown when operating a zero share amount is not allowed.\"}],\"HorizonStakingInvalidZeroTokens()\":[{\"notice\":\"Thrown when operating a zero token amount is not allowed.\"}],\"HorizonStakingNotAuthorized(address,address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to operate on a provision.\"}],\"HorizonStakingProvisionAlreadyExists()\":[{\"notice\":\"Thrown when attempting to create a provision for a data service that already has a provision.\"}],\"HorizonStakingSlippageProtection(uint256,uint256)\":[{\"notice\":\"Thrown when delegation shares obtained are below the expected amount.\"}],\"HorizonStakingStillThawing(uint256)\":[{\"notice\":\"Thrown during the transition period when attempting to withdraw tokens that are still thawing.\"}],\"HorizonStakingTooManyTokens(uint256,uint256)\":[{\"notice\":\"Thrown when the amount of tokens exceeds the maximum allowed to operate.\"}],\"HorizonStakingVerifierNotAllowed(address)\":[{\"notice\":\"Thrown when a service provider attempts to operate on verifiers that are not allowed.\"}]},\"events\":{\"AllowedLockedVerifierSet(address,bool)\":{\"notice\":\"Emitted when a verifier is allowed or disallowed to be used for locked provisions.\"},\"DelegatedTokensWithdrawn(address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator withdraws tokens from a provision after thawing.\"},\"DelegationFeeCutSet(address,address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider sets delegation fee cuts for a verifier.\"},\"DelegationSlashed(address,address,uint256)\":{\"notice\":\"Emitted when a delegation pool is slashed by a verifier.\"},\"DelegationSlashingEnabled(bool)\":{\"notice\":\"Emitted when the delegation slashing global flag is set.\"},\"DelegationSlashingSkipped(address,address,uint256)\":{\"notice\":\"Emitted when a delegation pool would have been slashed by a verifier, but the slashing was skipped because delegation slashing global parameter is not enabled.\"},\"MaxThawingPeriodSet(uint64)\":{\"notice\":\"Emitted when the global maximum thawing period allowed for provisions is set.\"},\"ProvisionCreated(address,address,uint256,uint32,uint64)\":{\"notice\":\"Emitted when a service provider provisions staked tokens to a verifier.\"},\"ProvisionIncreased(address,address,uint256)\":{\"notice\":\"Emitted whenever staked tokens are added to an existing provision\"},\"ProvisionParametersSet(address,address,uint32,uint64)\":{\"notice\":\"Emitted when a service provider accepts a staged provision parameter update.\"},\"ProvisionParametersStaged(address,address,uint32,uint64)\":{\"notice\":\"Emitted when a service provider stages a provision parameter update.\"},\"ProvisionSlashed(address,address,uint256)\":{\"notice\":\"Emitted when a provision is slashed by a verifier.\"},\"ProvisionThawed(address,address,uint256)\":{\"notice\":\"Emitted when a service provider thaws tokens from a provision.\"},\"StakeLocked(address,uint256,uint256)\":{\"notice\":\"Emitted when a service provider unstakes tokens during the transition period.\"},\"StakeWithdrawn(address,uint256)\":{\"notice\":\"Emitted when a service provider withdraws tokens during the transition period.\"},\"ThawRequestCreated(address,address,address,uint256,uint64,bytes32)\":{\"notice\":\"Emitted when a thaw request is created.\"},\"ThawRequestFulfilled(bytes32,uint256,uint256,uint64,bool)\":{\"notice\":\"Emitted when a thaw request is fulfilled, meaning the stake is released.\"},\"ThawRequestsFulfilled(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a series of thaw requests are fulfilled.\"},\"ThawingPeriodCleared()\":{\"notice\":\"Emitted when the legacy global thawing period is set to zero.\"},\"TokensDelegated(address,address,address,uint256)\":{\"notice\":\"Emitted when tokens are delegated to a provision.\"},\"TokensDeprovisioned(address,address,uint256)\":{\"notice\":\"Emitted when a service provider removes tokens from a provision.\"},\"TokensToDelegationPoolAdded(address,address,uint256)\":{\"notice\":\"Emitted when tokens are added to a delegation pool's reserve.\"},\"TokensUndelegated(address,address,address,uint256)\":{\"notice\":\"Emitted when a delegator undelegates tokens from a provision and starts thawing them.\"},\"VerifierTokensSent(address,address,address,uint256)\":{\"notice\":\"Emitted when the verifier cut is sent to the verifier after slashing a provision.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionParameters(address)\":{\"notice\":\"Accepts a staged provision parameter update.\"},\"addToDelegationPool(address,address,uint256)\":{\"notice\":\"Add tokens to a delegation pool without issuing shares. Used by data services to pay delegation fees/rewards. Delegators SHOULD NOT call this function.\"},\"addToProvision(address,address,uint256)\":{\"notice\":\"Adds tokens from the service provider's idle stake to a provision\"},\"clearThawingPeriod()\":{\"notice\":\"Clear the legacy global thawing period. This signifies the end of the transition period, after which no legacy allocations should be left.\"},\"delegate(address,address,uint256,uint256)\":{\"notice\":\"Delegate tokens to a provision.\"},\"delegate(address,uint256)\":{\"notice\":\"Delegate tokens to the subgraph data service provision. This function is for backwards compatibility with the legacy staking contract. It only allows delegating to the subgraph data service and DOES NOT have slippage protection.\"},\"deprovision(address,address,uint256)\":{\"notice\":\"Remove tokens from a provision and move them back to the service provider's idle stake.\"},\"isAuthorized(address,address,address)\":{\"notice\":\"Check if an operator is authorized for the caller on a specific verifier / data service.\"},\"provision(address,address,uint256,uint32,uint64)\":{\"notice\":\"Provision stake to a verifier. The tokens will be locked with a thawing period and will be slashable by the verifier. This is the main mechanism to provision stake to a data service, where the data service is the verifier. This function can be called by the service provider or by an operator authorized by the provider for this specific verifier.\"},\"provisionLocked(address,address,uint256,uint32,uint64)\":{\"notice\":\"Provision stake to a verifier using locked tokens (i.e. from GraphTokenLockWallets).\"},\"redelegate(address,address,address,address,uint256,uint256)\":{\"notice\":\"Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`.\"},\"reprovision(address,address,address,uint256)\":{\"notice\":\"Move already thawed stake from one provision into another provision This function can be called by the service provider or by an operator authorized by the provider for the two corresponding verifiers.\"},\"setAllowedLockedVerifier(address,bool)\":{\"notice\":\"Sets a verifier as a globally allowed verifier for locked provisions.\"},\"setDelegationFeeCut(address,address,uint8,uint256)\":{\"notice\":\"Set the fee cut for a verifier on a specific payment type.\"},\"setDelegationSlashingEnabled()\":{\"notice\":\"Set the global delegation slashing flag to true.\"},\"setMaxThawingPeriod(uint64)\":{\"notice\":\"Sets the global maximum thawing period allowed for provisions.\"},\"setOperator(address,address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller on a data service.\"},\"setOperatorLocked(address,address,bool)\":{\"notice\":\"Authorize or unauthorize an address to be an operator for the caller on a verifier.\"},\"setProvisionParameters(address,address,uint32,uint64)\":{\"notice\":\"Stages a provision parameter update. Note that the change is not effective until the verifier calls {acceptProvisionParameters}.\"},\"slash(address,uint256,uint256,address)\":{\"notice\":\"Slash a service provider. This can only be called by a verifier to which the provider has provisioned stake, and up to the amount of tokens they have provisioned. If the service provider's stake is not enough, the associated delegation pool might be slashed depending on the value of the global delegation slashing flag. Part of the slashed tokens are sent to the `verifierDestination` as a reward.\"},\"stake(uint256)\":{\"notice\":\"Deposit tokens on the staking contract.\"},\"stakeTo(address,uint256)\":{\"notice\":\"Deposit tokens on the service provider stake, on behalf of the service provider.\"},\"stakeToProvision(address,address,uint256)\":{\"notice\":\"Deposit tokens on the service provider stake, on behalf of the service provider, provisioned to a specific verifier.\"},\"thaw(address,address,uint256)\":{\"notice\":\"Start thawing tokens to remove them from a provision. This function can be called by the service provider or by an operator authorized by the provider for this specific verifier. Note that removing tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {deprovision} or {reprovision}.\"},\"undelegate(address,address,uint256)\":{\"notice\":\"Undelegate tokens from a provision and start thawing them. Note that undelegating tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. Requirements: - `shares` cannot be zero. Emits a {TokensUndelegated} and {ThawRequestCreated} event.\"},\"undelegate(address,address,uint256,address)\":{\"notice\":\"Undelegate tokens from a provision and start thawing them. The tokens will be withdrawable by the `beneficiary` after the thawing period. Note that undelegating tokens from a provision is a two step process: - First the tokens are thawed using this function. - Then after the thawing period, the tokens are removed from the provision using {withdrawDelegated}. Requirements: - `shares` cannot be zero. - `beneficiary` cannot be the zero address. Emits a {TokensUndelegated} and {ThawRequestCreated} event.\"},\"undelegate(address,uint256)\":{\"notice\":\"Undelegate tokens from the subgraph data service provision and start thawing them. This function is for backwards compatibility with the legacy staking contract. It only allows undelegating from the subgraph data service.\"},\"unstake(uint256)\":{\"notice\":\"Move idle stake back to the owner's account. Stake is removed from the protocol: - During the transition period it's locked for a period of time before it can be withdrawn by calling {withdraw}. - After the transition period it's immediately withdrawn.\"},\"withdraw()\":{\"notice\":\"Withdraw service provider tokens once the thawing period (initiated by {unstake}) has passed. All thawed tokens are withdrawn.\"},\"withdrawDelegated(address,address)\":{\"notice\":\"Withdraw undelegated tokens from the subgraph data service provision after thawing. This function is for backwards compatibility with the legacy staking contract. It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in case the caller opts for re-delegating.\"},\"withdrawDelegated(address,address,uint256)\":{\"notice\":\"Withdraw undelegated tokens from a provision after thawing.\"}},\"notice\":\"Provides functions for managing stake, provisions, delegations, and slashing.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":\"IHorizonStakingMain\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol": { - "IHorizonStakingTypes": { - "abi": [], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"In order to preserve storage compatibility some data structures keep deprecated fields. These structures have then two representations, an internal one used by the contract storage and a public one. Getter functions should retrieve internal representations, remove deprecated fields and return the public representation.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Defines the data types used in the Horizon staking contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":\"IHorizonStakingTypes\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/libraries/LinkedList.sol": { - "LinkedList": { - "abi": [ - { - "inputs": [], - "name": "LinkedListEmptyList", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidIterations", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidZeroId", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListMaxElementsExceeded", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122046bf94561b4edd4bcb4d05c7fa400e3bea62c5f830d5ae4896d3c844466cc09d64736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CHAINID 0xBF SWAP5 JUMP SHL 0x4E 0xDD 0x4B 0xCB 0x4D SDIV 0xC7 STATICCALL BLOCKHASH 0xE EXTCODESIZE 0xEA PUSH3 0xC5F830 0xD5 0xAE BASEFEE SWAP7 0xD3 0xC8 PREVRANDAO CHAINID PUSH13 0xC09D64736F6C634300081B0033 ", - "sourceMap": "646:4780:29:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;646:4780:29;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122046bf94561b4edd4bcb4d05c7fa400e3bea62c5f830d5ae4896d3c844466cc09d64736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CHAINID 0xBF SWAP5 JUMP SHL 0x4E 0xDD 0x4B 0xCB 0x4D SDIV 0xC7 STATICCALL BLOCKHASH 0xE EXTCODESIZE 0xEA PUSH3 0xC5F830 0xD5 0xAE BASEFEE SWAP7 0xD3 0xC8 PREVRANDAO CHAINID PUSH13 0xC09D64736F6C634300081B0033 ", - "sourceMap": "646:4780:29:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LinkedListEmptyList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidIterations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidZeroId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListMaxElementsExceeded\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"LinkedList library\",\"version\":1},\"userdoc\":{\"errors\":{\"LinkedListEmptyList()\":[{\"notice\":\"Thrown when trying to remove an item from an empty list\"}],\"LinkedListInvalidIterations()\":[{\"notice\":\"Thrown when trying to traverse a list with more iterations than elements\"}],\"LinkedListInvalidZeroId()\":[{\"notice\":\"Thrown when trying to add an item with id equal to bytes32(0)\"}],\"LinkedListMaxElementsExceeded()\":[{\"notice\":\"Thrown when trying to add an item to a list that has reached the maximum number of elements\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to manage singly linked lists. The library makes no assumptions about the contents of the items, the only requirements on the items are: - they must be represented by a unique bytes32 id - the id of the item must not be bytes32(0) - each item must have a reference to the next item in the list - the list cannot have more than `MAX_ITEMS` items A contract using this library must store: - a LinkedList.List to keep track of the list metadata - a mapping from bytes32 to the item data\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":\"LinkedList\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/libraries/MathUtils.sol": { - "MathUtils": { - "abi": [], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206851dc21501ea948eeda92c5be24d7ab740711ef1bc0163d266c2040a522d1b964736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x51DC21501EA948EEDA SWAP3 0xC5 0xBE 0x24 0xD7 0xAB PUSH21 0x711EF1BC0163D266C2040A522D1B964736F6C6343 STOP ADDMOD SHL STOP CALLER ", - "sourceMap": "171:1214:30:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;171:1214:30;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206851dc21501ea948eeda92c5be24d7ab740711ef1bc0163d266c2040a522d1b964736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x51DC21501EA948EEDA SWAP3 0xC5 0xBE 0x24 0xD7 0xAB PUSH21 0x711EF1BC0163D266C2040A522D1B964736F6C6343 STOP ADDMOD SHL STOP CALLER ", - "sourceMap": "171:1214:30:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"MathUtils Library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A collection of functions to perform math operations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/libraries/MathUtils.sol\":\"MathUtils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/libraries/MathUtils.sol\":{\"keccak256\":\"0xfb077625fde8c7bb17ba4674956099673bd144546d90d2a91a8463d17b625b0e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6ed606a9a5652778589ae03495af5c344fed262157dd372d8c0e1757c80713b0\",\"dweb:/ipfs/QmTePK9JT74GsWj4rxL2H7hUyuM3LeMrnojLvehU8yiD5r\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/libraries/PPMMath.sol": { - "PPMMath": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "PPMMathInvalidPPM", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220260488b607a9b82e78a0a2b98d50d4664075e936d8003c5815c84e1ae5aa902164736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 DIV DUP9 0xB6 SMOD 0xA9 0xB8 0x2E PUSH25 0xA0A2B98D50D4664075E936D8003C5815C84E1AE5AA90216473 PUSH16 0x6C634300081B00330000000000000000 ", - "sourceMap": "189:1659:31:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;189:1659:31;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220260488b607a9b82e78a0a2b98d50d4664075e936d8003c5815c84e1ae5aa902164736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 DIV DUP9 0xB6 SMOD 0xA9 0xB8 0x2E PUSH25 0xA0A2B98D50D4664075E936D8003C5815C84E1AE5AA90216473 PUSH16 0x6C634300081B00330000000000000000 ", - "sourceMap": "189:1659:31:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"PPMMathInvalidMulPPM\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"PPMMathInvalidPPM\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"params\":{\"a\":\"The first value in the multiplication.\",\"b\":\"The second value in the multiplication.\"}}],\"PPMMathInvalidPPM(uint256)\":[{\"params\":{\"value\":\"The value that is not in PPM.\"}}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"PPMMath library\",\"version\":1},\"userdoc\":{\"errors\":{\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"notice\":\"Thrown when no value in a multiplication is in PPM.\"}],\"PPMMathInvalidPPM(uint256)\":[{\"notice\":\"Thrown when a value is expected to be in PPM but is not.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library for handling calculations with parts per million (PPM) amounts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":\"PPMMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/libraries/UintRange.sol": { - "UintRange": { - "abi": [], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a3b0e5a455e6e95b509ac321ae127ac8b24c00757baae31a6e3b07d611430d2964736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 0xB0 0xE5 LOG4 SSTORE 0xE6 0xE9 JUMPDEST POP SWAP11 0xC3 0x21 0xAE SLT PUSH27 0xC8B24C00757BAAE31A6E3B07D611430D2964736F6C634300081B00 CALLER ", - "sourceMap": "172:422:32:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;172:422:32;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a3b0e5a455e6e95b509ac321ae127ac8b24c00757baae31a6e3b07d611430d2964736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 0xB0 0xE5 LOG4 SSTORE 0xE6 0xE9 JUMPDEST POP SWAP11 0xC3 0x21 0xAE SLT PUSH27 0xC8B24C00757BAAE31A6E3B07D611430D2964736F6C634300081B00 CALLER ", - "sourceMap": "172:422:32:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"UintRange library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library for handling range checks on uint256 values.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":\"UintRange\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol": { - "GraphDirectory": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"}],\"devdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}]},\"events\":{\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Requirements: - `controller` cannot be zero address Emits a {GraphDirectoryInitialized} event\",\"params\":{\"controller\":\"The address of the Graph Controller contract.\"}}},\"title\":\"GraphDirectory contract\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}]},\"events\":{\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor for the GraphDirectory contract\"}},\"notice\":\"This contract is meant to be inherited by other contracts that need to keep track of the addresses in Graph Horizon contracts. It fetches the addresses from the Controller supplied during construction, and uses immutable variables to minimize gas costs.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":\"GraphDirectory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { - "OwnableUpgradeable": { - "abi": [ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":\"OwnableUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": { - "Initializable": { - "abi": [ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() { _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ```solidity contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\\\"MyToken\\\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { - "ContextUpgradeable": { - "abi": [ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":\"ContextUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol": { - "MulticallUpgradeable": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "multicall(bytes[])": "ac9650d8" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Provides a function to batch together multiple calls in a single external call. Consider any assumption about calldata validation performed by the sender may be violated if it's not especially careful about sending transactions invoking {multicall}. For example, a relay address that filters function selectors won't filter calls nested within a {multicall} operation. NOTE: Since 5.0.1 and 4.9.4, this contract identifies non-canonical contexts (i.e. `msg.sender` is not {_msgSender}). If a non-canonical context is identified, the following self `delegatecall` appends the last bytes of `msg.data` to the subcall. This makes it safe to use with {ERC2771Context}. Contexts that don't affect the resolution of {_msgSender} are not propagated to subcalls.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"multicall(bytes[])\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Receives and executes a batch of function calls on this contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol\":\"MulticallUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol\":{\"keccak256\":\"0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300\",\"dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": { - "PausableUpgradeable": { - "abi": [ - { - "inputs": [], - "name": "EnforcedPause", - "type": "error" - }, - { - "inputs": [], - "name": "ExpectedPause", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "paused()": "5c975abb" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":\"PausableUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol": { - "EIP712Upgradeable": { - "abi": [ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "eip712Domain()": "84b0196e" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to produce the hash of their typed data using a combination of `abi.encode` and `keccak256`. This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\":\"EIP712Upgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts/interfaces/IERC5267.sol": { - "IERC5267": { - "abi": [ - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "eip712Domain()": "84b0196e" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"}},\"kind\":\"dev\",\"methods\":{\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":\"IERC5267\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "IERC20": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts/utils/Address.sol": { - "Address": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "AddressInsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fe3e609d11a8fa71bf67e2e54692a25b51e329a03cd611c68726ec87e804639b64736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID RETURNDATACOPY PUSH1 0x9D GT 0xA8 STATICCALL PUSH18 0xBF67E2E54692A25B51E329A03CD611C68726 0xEC DUP8 0xE8 DIV PUSH4 0x9B64736F PUSH13 0x634300081B0033000000000000 ", - "sourceMap": "195:6066:42:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;195:6066:42;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fe3e609d11a8fa71bf67e2e54692a25b51e329a03cd611c68726ec87e804639b64736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID RETURNDATACOPY PUSH1 0x9D GT 0xA8 STATICCALL PUSH18 0xBF67E2E54692A25B51E329A03CD611C68726 0xEC DUP8 0xE8 DIV PUSH4 0x9B64736F PUSH13 0x634300081B0033000000000000 ", - "sourceMap": "195:6066:42:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts/utils/Strings.sol": { - "Strings": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "StringsInsufficientHexLength", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c2e72d0c4d10d8f74a441104075ed67673ad32e8e2a4dda4052c8aceaba1f7764736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 0x2E PUSH19 0xD0C4D10D8F74A441104075ED67673AD32E8E2A 0x4D 0xDA BLOCKHASH MSTORE 0xC8 0xAC 0xEA 0xBA 0x1F PUSH24 0x64736F6C634300081B003300000000000000000000000000 ", - "sourceMap": "251:2847:43:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;251:2847:43;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c2e72d0c4d10d8f74a441104075ed67673ad32e8e2a4dda4052c8aceaba1f7764736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 0x2E PUSH19 0xD0C4D10D8F74A441104075ED67673AD32E8E2A 0x4D 0xDA BLOCKHASH MSTORE 0xC8 0xAC 0xEA 0xBA 0x1F PUSH24 0x64736F6C634300081B003300000000000000000000000000 ", - "sourceMap": "251:2847:43:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"String operations.\",\"errors\":{\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "ECDSA": { - "abi": [ - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208c4e42b0cde479b6c802c7da1632c355d9591fad4b53006c3ab6a2e63e5e422764736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0x4E TIMESTAMP 0xB0 0xCD 0xE4 PUSH26 0xB6C802C7DA1632C355D9591FAD4B53006C3AB6A2E63E5E422764 PUSH20 0x6F6C634300081B00330000000000000000000000 ", - "sourceMap": "344:7386:44:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;344:7386:44;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208c4e42b0cde479b6c802c7da1632c355d9591fad4b53006c3ab6a2e63e5e422764736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0x4E TIMESTAMP 0xB0 0xCD 0xE4 PUSH26 0xB6C802C7DA1632C355D9591FAD4B53006C3AB6A2E63E5E422764 PUSH20 0x6F6C634300081B00330000000000000000000000 ", - "sourceMap": "344:7386:44:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { - "MessageHashUtils": { - "abi": [], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ddd23abf32dcf872cabe5e1ace71e769357d61e045ae071e589e695df433315b64736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0xD2 GASPRICE 0xBF ORIGIN 0xDC 0xF8 PUSH19 0xCABE5E1ACE71E769357D61E045AE071E589E69 TSTORE DELEGATECALL CALLER BALANCE JUMPDEST PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ", - "sourceMap": "521:3235:45:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;521:3235:45;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ddd23abf32dcf872cabe5e1ace71e769357d61e045ae071e589e695df433315b64736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0xD2 GASPRICE 0xBF ORIGIN 0xDC 0xF8 PUSH19 0xCABE5E1ACE71E769357D61E045AE071E589E69 TSTORE DELEGATECALL CALLER BALANCE JUMPDEST PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ", - "sourceMap": "521:3235:45:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing. The library provides methods for generating a hash of a message that conforms to the https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712] specifications.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":\"MessageHashUtils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts/utils/math/Math.sol": { - "Math": { - "abi": [ - { - "inputs": [], - "name": "MathOverflowedMulDiv", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a1120efff84bae0cea4edd0fdde61e0b306e3d58aaa2cb2d77c1fa36fb63808164736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 SLT 0xE SELFDESTRUCT 0xF8 0x4B 0xAE 0xC 0xEA 0x4E 0xDD 0xF 0xDD 0xE6 0x1E SIGNEXTEND ADDRESS PUSH15 0x3D58AAA2CB2D77C1FA36FB63808164 PUSH20 0x6F6C634300081B00330000000000000000000000 ", - "sourceMap": "203:14914:46:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;203:14914:46;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a1120efff84bae0cea4edd0fdde61e0b306e3d58aaa2cb2d77c1fa36fb63808164736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 SLT 0xE SELFDESTRUCT 0xF8 0x4B 0xAE 0xC 0xEA 0x4E 0xDD 0xF 0xDD 0xE6 0x1E SIGNEXTEND ADDRESS PUSH15 0x3D58AAA2CB2D77C1FA36FB63808164 PUSH20 0x6F6C634300081B00330000000000000000000000 ", - "sourceMap": "203:14914:46:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MathOverflowedMulDiv\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"errors\":{\"MathOverflowedMulDiv()\":[{\"details\":\"Muldiv operation overflow.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "@openzeppelin/contracts/utils/math/SignedMath.sol": { - "SignedMath": { - "abi": [], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fdb970fc41318ccc2cf9b4d9f0f54635efbc9112788a867d21c127642b0246bd64736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT 0xB9 PUSH17 0xFC41318CCC2CF9B4D9F0F54635EFBC9112 PUSH25 0x8A867D21C127642B0246BD64736F6C634300081B0033000000 ", - "sourceMap": "216:1047:47:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;216:1047:47;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fdb970fc41318ccc2cf9b4d9f0f54635efbc9112788a867d21c127642b0246bd64736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT 0xB9 PUSH17 0xFC41318CCC2CF9B4D9F0F54635EFBC9112 PUSH25 0x8A867D21C127642B0246BD64736F6C634300081B0033000000 ", - "sourceMap": "216:1047:47:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "contracts/DisputeManager.sol": { - "DisputeManager": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "controller", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLength", - "type": "uint256" - } - ], - "name": "AttestationInvalidBytesLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerDisputeAlreadyCreated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum IDisputeManager.DisputeStatus", - "name": "status", - "type": "uint8" - } - ], - "name": "DisputeManagerDisputeNotPending", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerDisputePeriodNotFinished", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerDisputePeriodZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "DisputeManagerIndexerNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerInvalidDispute", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "DisputeManagerInvalidDisputeDeposit", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "cut", - "type": "uint32" - } - ], - "name": "DisputeManagerInvalidFishermanReward", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxSlashingCut", - "type": "uint32" - } - ], - "name": "DisputeManagerInvalidMaxSlashingCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokensSlash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxTokensSlash", - "type": "uint256" - } - ], - "name": "DisputeManagerInvalidTokensSlash", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "relatedDisputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerMustAcceptRelatedDispute", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "requestCID1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "requestCID2", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID2", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId2", - "type": "bytes32" - } - ], - "name": "DisputeManagerNonConflictingAttestations", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId2", - "type": "bytes32" - } - ], - "name": "DisputeManagerNonMatchingSubgraphDeployment", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerNotArbitrator", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerNotFisherman", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerZeroTokens", - "type": "error" - }, - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "arbitrator", - "type": "address" - } - ], - "name": "ArbitratorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "DisputeDepositSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeDrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId1", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId2", - "type": "bytes32" - } - ], - "name": "DisputeLinked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - } - ], - "name": "DisputePeriodSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeRejected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "fishermanRewardCut", - "type": "uint32" - } - ], - "name": "FishermanRewardCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "name": "IndexingDisputeCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "maxSlashingCut", - "type": "uint32" - } - ], - "name": "MaxSlashingCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "attestation", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "name": "QueryDisputeCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "subgraphService", - "type": "address" - } - ], - "name": "SubgraphServiceSet", - "type": "event" - }, - { - "inputs": [], - "name": "MAX_FISHERMAN_REWARD_CUT", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokensSlash", - "type": "uint256" - } - ], - "name": "acceptDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation2", - "type": "tuple" - } - ], - "name": "areConflictingAttestations", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "cancelDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - } - ], - "name": "createIndexingDispute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "attestationData", - "type": "bytes" - } - ], - "name": "createQueryDispute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "attestationData1", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "attestationData2", - "type": "bytes" - } - ], - "name": "createQueryDisputeConflict", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputePeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "internalType": "uint256", - "name": "deposit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "relatedDisputeId", - "type": "bytes32" - }, - { - "internalType": "enum IDisputeManager.DisputeType", - "name": "disputeType", - "type": "uint8" - }, - { - "internalType": "enum IDisputeManager.DisputeStatus", - "name": "status", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "drawDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "internalType": "struct Attestation.Receipt", - "name": "receipt", - "type": "tuple" - } - ], - "name": "encodeReceipt", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fishermanRewardCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation", - "type": "tuple" - } - ], - "name": "getAttestationIndexer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputePeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "getStakeSnapshot", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "arbitrator", - "type": "address" - }, - { - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "fishermanRewardCut_", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxSlashingCut_", - "type": "uint32" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "isDisputeCreated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxSlashingCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "rejectDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "arbitrator", - "type": "address" - } - ], - "name": "setArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "setDisputeDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - } - ], - "name": "setDisputePeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "fishermanRewardCut_", - "type": "uint32" - } - ], - "name": "setFishermanRewardCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxSlashingCut_", - "type": "uint32" - } - ], - "name": "setMaxSlashingCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "subgraphService", - "type": "address" - } - ], - "name": "setSubgraphService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphService", - "outputs": [ - { - "internalType": "contract ISubgraphService", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": { - "@_4520": { - "entryPoint": null, - "id": 4520, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_8106": { - "entryPoint": null, - "id": 8106, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_disableInitializers_5070": { - "entryPoint": 1001, - "id": 5070, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getContractFromController_4652": { - "entryPoint": 827, - "id": 4652, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_getInitializableStorage_5101": { - "entryPoint": null, - "id": 5101, - "parameterSlots": 0, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 1179, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 8, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 1227, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nativeSrc": "0:2355:62", - "nodeType": "YulBlock", - "src": "0:2355:62", - "statements": [ - { - "nativeSrc": "6:3:62", - "nodeType": "YulBlock", - "src": "6:3:62", - "statements": [] - }, - { - "body": { - "nativeSrc": "95:209:62", - "nodeType": "YulBlock", - "src": "95:209:62", - "statements": [ - { - "body": { - "nativeSrc": "141:16:62", - "nodeType": "YulBlock", - "src": "141:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "150:1:62", - "nodeType": "YulLiteral", - "src": "150:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "153:1:62", - "nodeType": "YulLiteral", - "src": "153:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "143:6:62", - "nodeType": "YulIdentifier", - "src": "143:6:62" - }, - "nativeSrc": "143:12:62", - "nodeType": "YulFunctionCall", - "src": "143:12:62" - }, - "nativeSrc": "143:12:62", - "nodeType": "YulExpressionStatement", - "src": "143:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "116:7:62", - "nodeType": "YulIdentifier", - "src": "116:7:62" - }, - { - "name": "headStart", - "nativeSrc": "125:9:62", - "nodeType": "YulIdentifier", - "src": "125:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "112:3:62", - "nodeType": "YulIdentifier", - "src": "112:3:62" - }, - "nativeSrc": "112:23:62", - "nodeType": "YulFunctionCall", - "src": "112:23:62" - }, - { - "kind": "number", - "nativeSrc": "137:2:62", - "nodeType": "YulLiteral", - "src": "137:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "108:3:62", - "nodeType": "YulIdentifier", - "src": "108:3:62" - }, - "nativeSrc": "108:32:62", - "nodeType": "YulFunctionCall", - "src": "108:32:62" - }, - "nativeSrc": "105:52:62", - "nodeType": "YulIf", - "src": "105:52:62" - }, - { - "nativeSrc": "166:29:62", - "nodeType": "YulVariableDeclaration", - "src": "166:29:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "185:9:62", - "nodeType": "YulIdentifier", - "src": "185:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "179:5:62", - "nodeType": "YulIdentifier", - "src": "179:5:62" - }, - "nativeSrc": "179:16:62", - "nodeType": "YulFunctionCall", - "src": "179:16:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "170:5:62", - "nodeType": "YulTypedName", - "src": "170:5:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "258:16:62", - "nodeType": "YulBlock", - "src": "258:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "267:1:62", - "nodeType": "YulLiteral", - "src": "267:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "270:1:62", - "nodeType": "YulLiteral", - "src": "270:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "260:6:62", - "nodeType": "YulIdentifier", - "src": "260:6:62" - }, - "nativeSrc": "260:12:62", - "nodeType": "YulFunctionCall", - "src": "260:12:62" - }, - "nativeSrc": "260:12:62", - "nodeType": "YulExpressionStatement", - "src": "260:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "217:5:62", - "nodeType": "YulIdentifier", - "src": "217:5:62" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "228:5:62", - "nodeType": "YulIdentifier", - "src": "228:5:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "243:3:62", - "nodeType": "YulLiteral", - "src": "243:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "248:1:62", - "nodeType": "YulLiteral", - "src": "248:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "239:3:62", - "nodeType": "YulIdentifier", - "src": "239:3:62" - }, - "nativeSrc": "239:11:62", - "nodeType": "YulFunctionCall", - "src": "239:11:62" - }, - { - "kind": "number", - "nativeSrc": "252:1:62", - "nodeType": "YulLiteral", - "src": "252:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "235:3:62", - "nodeType": "YulIdentifier", - "src": "235:3:62" - }, - "nativeSrc": "235:19:62", - "nodeType": "YulFunctionCall", - "src": "235:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "224:3:62", - "nodeType": "YulIdentifier", - "src": "224:3:62" - }, - "nativeSrc": "224:31:62", - "nodeType": "YulFunctionCall", - "src": "224:31:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "214:2:62", - "nodeType": "YulIdentifier", - "src": "214:2:62" - }, - "nativeSrc": "214:42:62", - "nodeType": "YulFunctionCall", - "src": "214:42:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "207:6:62", - "nodeType": "YulIdentifier", - "src": "207:6:62" - }, - "nativeSrc": "207:50:62", - "nodeType": "YulFunctionCall", - "src": "207:50:62" - }, - "nativeSrc": "204:70:62", - "nodeType": "YulIf", - "src": "204:70:62" - }, - { - "nativeSrc": "283:15:62", - "nodeType": "YulAssignment", - "src": "283:15:62", - "value": { - "name": "value", - "nativeSrc": "293:5:62", - "nodeType": "YulIdentifier", - "src": "293:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "283:6:62", - "nodeType": "YulIdentifier", - "src": "283:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nativeSrc": "14:290:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "61:9:62", - "nodeType": "YulTypedName", - "src": "61:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "72:7:62", - "nodeType": "YulTypedName", - "src": "72:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "84:6:62", - "nodeType": "YulTypedName", - "src": "84:6:62", - "type": "" - } - ], - "src": "14:290:62" - }, - { - "body": { - "nativeSrc": "482:160:62", - "nodeType": "YulBlock", - "src": "482:160:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "499:9:62", - "nodeType": "YulIdentifier", - "src": "499:9:62" - }, - { - "kind": "number", - "nativeSrc": "510:2:62", - "nodeType": "YulLiteral", - "src": "510:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "492:6:62", - "nodeType": "YulIdentifier", - "src": "492:6:62" - }, - "nativeSrc": "492:21:62", - "nodeType": "YulFunctionCall", - "src": "492:21:62" - }, - "nativeSrc": "492:21:62", - "nodeType": "YulExpressionStatement", - "src": "492:21:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "533:9:62", - "nodeType": "YulIdentifier", - "src": "533:9:62" - }, - { - "kind": "number", - "nativeSrc": "544:2:62", - "nodeType": "YulLiteral", - "src": "544:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "529:3:62", - "nodeType": "YulIdentifier", - "src": "529:3:62" - }, - "nativeSrc": "529:18:62", - "nodeType": "YulFunctionCall", - "src": "529:18:62" - }, - { - "kind": "number", - "nativeSrc": "549:2:62", - "nodeType": "YulLiteral", - "src": "549:2:62", - "type": "", - "value": "10" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "522:6:62", - "nodeType": "YulIdentifier", - "src": "522:6:62" - }, - "nativeSrc": "522:30:62", - "nodeType": "YulFunctionCall", - "src": "522:30:62" - }, - "nativeSrc": "522:30:62", - "nodeType": "YulExpressionStatement", - "src": "522:30:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "572:9:62", - "nodeType": "YulIdentifier", - "src": "572:9:62" - }, - { - "kind": "number", - "nativeSrc": "583:2:62", - "nodeType": "YulLiteral", - "src": "583:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "568:3:62", - "nodeType": "YulIdentifier", - "src": "568:3:62" - }, - "nativeSrc": "568:18:62", - "nodeType": "YulFunctionCall", - "src": "568:18:62" - }, - { - "hexValue": "436f6e74726f6c6c6572", - "kind": "string", - "nativeSrc": "588:12:62", - "nodeType": "YulLiteral", - "src": "588:12:62", - "type": "", - "value": "Controller" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "561:6:62", - "nodeType": "YulIdentifier", - "src": "561:6:62" - }, - "nativeSrc": "561:40:62", - "nodeType": "YulFunctionCall", - "src": "561:40:62" - }, - "nativeSrc": "561:40:62", - "nodeType": "YulExpressionStatement", - "src": "561:40:62" - }, - { - "nativeSrc": "610:26:62", - "nodeType": "YulAssignment", - "src": "610:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "622:9:62", - "nodeType": "YulIdentifier", - "src": "622:9:62" - }, - { - "kind": "number", - "nativeSrc": "633:2:62", - "nodeType": "YulLiteral", - "src": "633:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "618:3:62", - "nodeType": "YulIdentifier", - "src": "618:3:62" - }, - "nativeSrc": "618:18:62", - "nodeType": "YulFunctionCall", - "src": "618:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "610:4:62", - "nodeType": "YulIdentifier", - "src": "610:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "309:333:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "459:9:62", - "nodeType": "YulTypedName", - "src": "459:9:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "473:4:62", - "nodeType": "YulTypedName", - "src": "473:4:62", - "type": "" - } - ], - "src": "309:333:62" - }, - { - "body": { - "nativeSrc": "916:520:62", - "nodeType": "YulBlock", - "src": "916:520:62", - "statements": [ - { - "nativeSrc": "926:27:62", - "nodeType": "YulAssignment", - "src": "926:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "938:9:62", - "nodeType": "YulIdentifier", - "src": "938:9:62" - }, - { - "kind": "number", - "nativeSrc": "949:3:62", - "nodeType": "YulLiteral", - "src": "949:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "934:3:62", - "nodeType": "YulIdentifier", - "src": "934:3:62" - }, - "nativeSrc": "934:19:62", - "nodeType": "YulFunctionCall", - "src": "934:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "926:4:62", - "nodeType": "YulIdentifier", - "src": "926:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "969:9:62", - "nodeType": "YulIdentifier", - "src": "969:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "984:6:62", - "nodeType": "YulIdentifier", - "src": "984:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1000:3:62", - "nodeType": "YulLiteral", - "src": "1000:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1005:1:62", - "nodeType": "YulLiteral", - "src": "1005:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "996:3:62", - "nodeType": "YulIdentifier", - "src": "996:3:62" - }, - "nativeSrc": "996:11:62", - "nodeType": "YulFunctionCall", - "src": "996:11:62" - }, - { - "kind": "number", - "nativeSrc": "1009:1:62", - "nodeType": "YulLiteral", - "src": "1009:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "992:3:62", - "nodeType": "YulIdentifier", - "src": "992:3:62" - }, - "nativeSrc": "992:19:62", - "nodeType": "YulFunctionCall", - "src": "992:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "980:3:62", - "nodeType": "YulIdentifier", - "src": "980:3:62" - }, - "nativeSrc": "980:32:62", - "nodeType": "YulFunctionCall", - "src": "980:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "962:6:62", - "nodeType": "YulIdentifier", - "src": "962:6:62" - }, - "nativeSrc": "962:51:62", - "nodeType": "YulFunctionCall", - "src": "962:51:62" - }, - "nativeSrc": "962:51:62", - "nodeType": "YulExpressionStatement", - "src": "962:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1033:9:62", - "nodeType": "YulIdentifier", - "src": "1033:9:62" - }, - { - "kind": "number", - "nativeSrc": "1044:2:62", - "nodeType": "YulLiteral", - "src": "1044:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1029:3:62", - "nodeType": "YulIdentifier", - "src": "1029:3:62" - }, - "nativeSrc": "1029:18:62", - "nodeType": "YulFunctionCall", - "src": "1029:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "1053:6:62", - "nodeType": "YulIdentifier", - "src": "1053:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1069:3:62", - "nodeType": "YulLiteral", - "src": "1069:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1074:1:62", - "nodeType": "YulLiteral", - "src": "1074:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1065:3:62", - "nodeType": "YulIdentifier", - "src": "1065:3:62" - }, - "nativeSrc": "1065:11:62", - "nodeType": "YulFunctionCall", - "src": "1065:11:62" - }, - { - "kind": "number", - "nativeSrc": "1078:1:62", - "nodeType": "YulLiteral", - "src": "1078:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1061:3:62", - "nodeType": "YulIdentifier", - "src": "1061:3:62" - }, - "nativeSrc": "1061:19:62", - "nodeType": "YulFunctionCall", - "src": "1061:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1049:3:62", - "nodeType": "YulIdentifier", - "src": "1049:3:62" - }, - "nativeSrc": "1049:32:62", - "nodeType": "YulFunctionCall", - "src": "1049:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1022:6:62", - "nodeType": "YulIdentifier", - "src": "1022:6:62" - }, - "nativeSrc": "1022:60:62", - "nodeType": "YulFunctionCall", - "src": "1022:60:62" - }, - "nativeSrc": "1022:60:62", - "nodeType": "YulExpressionStatement", - "src": "1022:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1102:9:62", - "nodeType": "YulIdentifier", - "src": "1102:9:62" - }, - { - "kind": "number", - "nativeSrc": "1113:2:62", - "nodeType": "YulLiteral", - "src": "1113:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1098:3:62", - "nodeType": "YulIdentifier", - "src": "1098:3:62" - }, - "nativeSrc": "1098:18:62", - "nodeType": "YulFunctionCall", - "src": "1098:18:62" - }, - { - "arguments": [ - { - "name": "value2", - "nativeSrc": "1122:6:62", - "nodeType": "YulIdentifier", - "src": "1122:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1138:3:62", - "nodeType": "YulLiteral", - "src": "1138:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1143:1:62", - "nodeType": "YulLiteral", - "src": "1143:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1134:3:62", - "nodeType": "YulIdentifier", - "src": "1134:3:62" - }, - "nativeSrc": "1134:11:62", - "nodeType": "YulFunctionCall", - "src": "1134:11:62" - }, - { - "kind": "number", - "nativeSrc": "1147:1:62", - "nodeType": "YulLiteral", - "src": "1147:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1130:3:62", - "nodeType": "YulIdentifier", - "src": "1130:3:62" - }, - "nativeSrc": "1130:19:62", - "nodeType": "YulFunctionCall", - "src": "1130:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1118:3:62", - "nodeType": "YulIdentifier", - "src": "1118:3:62" - }, - "nativeSrc": "1118:32:62", - "nodeType": "YulFunctionCall", - "src": "1118:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1091:6:62", - "nodeType": "YulIdentifier", - "src": "1091:6:62" - }, - "nativeSrc": "1091:60:62", - "nodeType": "YulFunctionCall", - "src": "1091:60:62" - }, - "nativeSrc": "1091:60:62", - "nodeType": "YulExpressionStatement", - "src": "1091:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1171:9:62", - "nodeType": "YulIdentifier", - "src": "1171:9:62" - }, - { - "kind": "number", - "nativeSrc": "1182:2:62", - "nodeType": "YulLiteral", - "src": "1182:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1167:3:62", - "nodeType": "YulIdentifier", - "src": "1167:3:62" - }, - "nativeSrc": "1167:18:62", - "nodeType": "YulFunctionCall", - "src": "1167:18:62" - }, - { - "arguments": [ - { - "name": "value3", - "nativeSrc": "1191:6:62", - "nodeType": "YulIdentifier", - "src": "1191:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1207:3:62", - "nodeType": "YulLiteral", - "src": "1207:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1212:1:62", - "nodeType": "YulLiteral", - "src": "1212:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1203:3:62", - "nodeType": "YulIdentifier", - "src": "1203:3:62" - }, - "nativeSrc": "1203:11:62", - "nodeType": "YulFunctionCall", - "src": "1203:11:62" - }, - { - "kind": "number", - "nativeSrc": "1216:1:62", - "nodeType": "YulLiteral", - "src": "1216:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1199:3:62", - "nodeType": "YulIdentifier", - "src": "1199:3:62" - }, - "nativeSrc": "1199:19:62", - "nodeType": "YulFunctionCall", - "src": "1199:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1187:3:62", - "nodeType": "YulIdentifier", - "src": "1187:3:62" - }, - "nativeSrc": "1187:32:62", - "nodeType": "YulFunctionCall", - "src": "1187:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1160:6:62", - "nodeType": "YulIdentifier", - "src": "1160:6:62" - }, - "nativeSrc": "1160:60:62", - "nodeType": "YulFunctionCall", - "src": "1160:60:62" - }, - "nativeSrc": "1160:60:62", - "nodeType": "YulExpressionStatement", - "src": "1160:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1240:9:62", - "nodeType": "YulIdentifier", - "src": "1240:9:62" - }, - { - "kind": "number", - "nativeSrc": "1251:3:62", - "nodeType": "YulLiteral", - "src": "1251:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1236:3:62", - "nodeType": "YulIdentifier", - "src": "1236:3:62" - }, - "nativeSrc": "1236:19:62", - "nodeType": "YulFunctionCall", - "src": "1236:19:62" - }, - { - "arguments": [ - { - "name": "value4", - "nativeSrc": "1261:6:62", - "nodeType": "YulIdentifier", - "src": "1261:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1277:3:62", - "nodeType": "YulLiteral", - "src": "1277:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1282:1:62", - "nodeType": "YulLiteral", - "src": "1282:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1273:3:62", - "nodeType": "YulIdentifier", - "src": "1273:3:62" - }, - "nativeSrc": "1273:11:62", - "nodeType": "YulFunctionCall", - "src": "1273:11:62" - }, - { - "kind": "number", - "nativeSrc": "1286:1:62", - "nodeType": "YulLiteral", - "src": "1286:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1269:3:62", - "nodeType": "YulIdentifier", - "src": "1269:3:62" - }, - "nativeSrc": "1269:19:62", - "nodeType": "YulFunctionCall", - "src": "1269:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1257:3:62", - "nodeType": "YulIdentifier", - "src": "1257:3:62" - }, - "nativeSrc": "1257:32:62", - "nodeType": "YulFunctionCall", - "src": "1257:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1229:6:62", - "nodeType": "YulIdentifier", - "src": "1229:6:62" - }, - "nativeSrc": "1229:61:62", - "nodeType": "YulFunctionCall", - "src": "1229:61:62" - }, - "nativeSrc": "1229:61:62", - "nodeType": "YulExpressionStatement", - "src": "1229:61:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1310:9:62", - "nodeType": "YulIdentifier", - "src": "1310:9:62" - }, - { - "kind": "number", - "nativeSrc": "1321:3:62", - "nodeType": "YulLiteral", - "src": "1321:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1306:3:62", - "nodeType": "YulIdentifier", - "src": "1306:3:62" - }, - "nativeSrc": "1306:19:62", - "nodeType": "YulFunctionCall", - "src": "1306:19:62" - }, - { - "arguments": [ - { - "name": "value5", - "nativeSrc": "1331:6:62", - "nodeType": "YulIdentifier", - "src": "1331:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1347:3:62", - "nodeType": "YulLiteral", - "src": "1347:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1352:1:62", - "nodeType": "YulLiteral", - "src": "1352:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1343:3:62", - "nodeType": "YulIdentifier", - "src": "1343:3:62" - }, - "nativeSrc": "1343:11:62", - "nodeType": "YulFunctionCall", - "src": "1343:11:62" - }, - { - "kind": "number", - "nativeSrc": "1356:1:62", - "nodeType": "YulLiteral", - "src": "1356:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1339:3:62", - "nodeType": "YulIdentifier", - "src": "1339:3:62" - }, - "nativeSrc": "1339:19:62", - "nodeType": "YulFunctionCall", - "src": "1339:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1327:3:62", - "nodeType": "YulIdentifier", - "src": "1327:3:62" - }, - "nativeSrc": "1327:32:62", - "nodeType": "YulFunctionCall", - "src": "1327:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1299:6:62", - "nodeType": "YulIdentifier", - "src": "1299:6:62" - }, - "nativeSrc": "1299:61:62", - "nodeType": "YulFunctionCall", - "src": "1299:61:62" - }, - "nativeSrc": "1299:61:62", - "nodeType": "YulExpressionStatement", - "src": "1299:61:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1380:9:62", - "nodeType": "YulIdentifier", - "src": "1380:9:62" - }, - { - "kind": "number", - "nativeSrc": "1391:3:62", - "nodeType": "YulLiteral", - "src": "1391:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1376:3:62", - "nodeType": "YulIdentifier", - "src": "1376:3:62" - }, - "nativeSrc": "1376:19:62", - "nodeType": "YulFunctionCall", - "src": "1376:19:62" - }, - { - "arguments": [ - { - "name": "value6", - "nativeSrc": "1401:6:62", - "nodeType": "YulIdentifier", - "src": "1401:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1417:3:62", - "nodeType": "YulLiteral", - "src": "1417:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1422:1:62", - "nodeType": "YulLiteral", - "src": "1422:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1413:3:62", - "nodeType": "YulIdentifier", - "src": "1413:3:62" - }, - "nativeSrc": "1413:11:62", - "nodeType": "YulFunctionCall", - "src": "1413:11:62" - }, - { - "kind": "number", - "nativeSrc": "1426:1:62", - "nodeType": "YulLiteral", - "src": "1426:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1409:3:62", - "nodeType": "YulIdentifier", - "src": "1409:3:62" - }, - "nativeSrc": "1409:19:62", - "nodeType": "YulFunctionCall", - "src": "1409:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1397:3:62", - "nodeType": "YulIdentifier", - "src": "1397:3:62" - }, - "nativeSrc": "1397:32:62", - "nodeType": "YulFunctionCall", - "src": "1397:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1369:6:62", - "nodeType": "YulIdentifier", - "src": "1369:6:62" - }, - "nativeSrc": "1369:61:62", - "nodeType": "YulFunctionCall", - "src": "1369:61:62" - }, - "nativeSrc": "1369:61:62", - "nodeType": "YulExpressionStatement", - "src": "1369:61:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed", - "nativeSrc": "647:789:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "837:9:62", - "nodeType": "YulTypedName", - "src": "837:9:62", - "type": "" - }, - { - "name": "value6", - "nativeSrc": "848:6:62", - "nodeType": "YulTypedName", - "src": "848:6:62", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "856:6:62", - "nodeType": "YulTypedName", - "src": "856:6:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "864:6:62", - "nodeType": "YulTypedName", - "src": "864:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "872:6:62", - "nodeType": "YulTypedName", - "src": "872:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "880:6:62", - "nodeType": "YulTypedName", - "src": "880:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "888:6:62", - "nodeType": "YulTypedName", - "src": "888:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "896:6:62", - "nodeType": "YulTypedName", - "src": "896:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "907:4:62", - "nodeType": "YulTypedName", - "src": "907:4:62", - "type": "" - } - ], - "src": "647:789:62" - }, - { - "body": { - "nativeSrc": "1542:76:62", - "nodeType": "YulBlock", - "src": "1542:76:62", - "statements": [ - { - "nativeSrc": "1552:26:62", - "nodeType": "YulAssignment", - "src": "1552:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1564:9:62", - "nodeType": "YulIdentifier", - "src": "1564:9:62" - }, - { - "kind": "number", - "nativeSrc": "1575:2:62", - "nodeType": "YulLiteral", - "src": "1575:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1560:3:62", - "nodeType": "YulIdentifier", - "src": "1560:3:62" - }, - "nativeSrc": "1560:18:62", - "nodeType": "YulFunctionCall", - "src": "1560:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "1552:4:62", - "nodeType": "YulIdentifier", - "src": "1552:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1594:9:62", - "nodeType": "YulIdentifier", - "src": "1594:9:62" - }, - { - "name": "value0", - "nativeSrc": "1605:6:62", - "nodeType": "YulIdentifier", - "src": "1605:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1587:6:62", - "nodeType": "YulIdentifier", - "src": "1587:6:62" - }, - "nativeSrc": "1587:25:62", - "nodeType": "YulFunctionCall", - "src": "1587:25:62" - }, - "nativeSrc": "1587:25:62", - "nodeType": "YulExpressionStatement", - "src": "1587:25:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", - "nativeSrc": "1441:177:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1511:9:62", - "nodeType": "YulTypedName", - "src": "1511:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1522:6:62", - "nodeType": "YulTypedName", - "src": "1522:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "1533:4:62", - "nodeType": "YulTypedName", - "src": "1533:4:62", - "type": "" - } - ], - "src": "1441:177:62" - }, - { - "body": { - "nativeSrc": "1742:406:62", - "nodeType": "YulBlock", - "src": "1742:406:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1759:9:62", - "nodeType": "YulIdentifier", - "src": "1759:9:62" - }, - { - "kind": "number", - "nativeSrc": "1770:2:62", - "nodeType": "YulLiteral", - "src": "1770:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1752:6:62", - "nodeType": "YulIdentifier", - "src": "1752:6:62" - }, - "nativeSrc": "1752:21:62", - "nodeType": "YulFunctionCall", - "src": "1752:21:62" - }, - "nativeSrc": "1752:21:62", - "nodeType": "YulExpressionStatement", - "src": "1752:21:62" - }, - { - "nativeSrc": "1782:27:62", - "nodeType": "YulVariableDeclaration", - "src": "1782:27:62", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "1802:6:62", - "nodeType": "YulIdentifier", - "src": "1802:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1796:5:62", - "nodeType": "YulIdentifier", - "src": "1796:5:62" - }, - "nativeSrc": "1796:13:62", - "nodeType": "YulFunctionCall", - "src": "1796:13:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "1786:6:62", - "nodeType": "YulTypedName", - "src": "1786:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1829:9:62", - "nodeType": "YulIdentifier", - "src": "1829:9:62" - }, - { - "kind": "number", - "nativeSrc": "1840:2:62", - "nodeType": "YulLiteral", - "src": "1840:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1825:3:62", - "nodeType": "YulIdentifier", - "src": "1825:3:62" - }, - "nativeSrc": "1825:18:62", - "nodeType": "YulFunctionCall", - "src": "1825:18:62" - }, - { - "name": "length", - "nativeSrc": "1845:6:62", - "nodeType": "YulIdentifier", - "src": "1845:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1818:6:62", - "nodeType": "YulIdentifier", - "src": "1818:6:62" - }, - "nativeSrc": "1818:34:62", - "nodeType": "YulFunctionCall", - "src": "1818:34:62" - }, - "nativeSrc": "1818:34:62", - "nodeType": "YulExpressionStatement", - "src": "1818:34:62" - }, - { - "nativeSrc": "1861:10:62", - "nodeType": "YulVariableDeclaration", - "src": "1861:10:62", - "value": { - "kind": "number", - "nativeSrc": "1870:1:62", - "nodeType": "YulLiteral", - "src": "1870:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "1865:1:62", - "nodeType": "YulTypedName", - "src": "1865:1:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "1930:90:62", - "nodeType": "YulBlock", - "src": "1930:90:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1959:9:62", - "nodeType": "YulIdentifier", - "src": "1959:9:62" - }, - { - "name": "i", - "nativeSrc": "1970:1:62", - "nodeType": "YulIdentifier", - "src": "1970:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1955:3:62", - "nodeType": "YulIdentifier", - "src": "1955:3:62" - }, - "nativeSrc": "1955:17:62", - "nodeType": "YulFunctionCall", - "src": "1955:17:62" - }, - { - "kind": "number", - "nativeSrc": "1974:2:62", - "nodeType": "YulLiteral", - "src": "1974:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1951:3:62", - "nodeType": "YulIdentifier", - "src": "1951:3:62" - }, - "nativeSrc": "1951:26:62", - "nodeType": "YulFunctionCall", - "src": "1951:26:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "1993:6:62", - "nodeType": "YulIdentifier", - "src": "1993:6:62" - }, - { - "name": "i", - "nativeSrc": "2001:1:62", - "nodeType": "YulIdentifier", - "src": "2001:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1989:3:62", - "nodeType": "YulIdentifier", - "src": "1989:3:62" - }, - "nativeSrc": "1989:14:62", - "nodeType": "YulFunctionCall", - "src": "1989:14:62" - }, - { - "kind": "number", - "nativeSrc": "2005:2:62", - "nodeType": "YulLiteral", - "src": "2005:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1985:3:62", - "nodeType": "YulIdentifier", - "src": "1985:3:62" - }, - "nativeSrc": "1985:23:62", - "nodeType": "YulFunctionCall", - "src": "1985:23:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1979:5:62", - "nodeType": "YulIdentifier", - "src": "1979:5:62" - }, - "nativeSrc": "1979:30:62", - "nodeType": "YulFunctionCall", - "src": "1979:30:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1944:6:62", - "nodeType": "YulIdentifier", - "src": "1944:6:62" - }, - "nativeSrc": "1944:66:62", - "nodeType": "YulFunctionCall", - "src": "1944:66:62" - }, - "nativeSrc": "1944:66:62", - "nodeType": "YulExpressionStatement", - "src": "1944:66:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "1891:1:62", - "nodeType": "YulIdentifier", - "src": "1891:1:62" - }, - { - "name": "length", - "nativeSrc": "1894:6:62", - "nodeType": "YulIdentifier", - "src": "1894:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "1888:2:62", - "nodeType": "YulIdentifier", - "src": "1888:2:62" - }, - "nativeSrc": "1888:13:62", - "nodeType": "YulFunctionCall", - "src": "1888:13:62" - }, - "nativeSrc": "1880:140:62", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "1902:19:62", - "nodeType": "YulBlock", - "src": "1902:19:62", - "statements": [ - { - "nativeSrc": "1904:15:62", - "nodeType": "YulAssignment", - "src": "1904:15:62", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "1913:1:62", - "nodeType": "YulIdentifier", - "src": "1913:1:62" - }, - { - "kind": "number", - "nativeSrc": "1916:2:62", - "nodeType": "YulLiteral", - "src": "1916:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1909:3:62", - "nodeType": "YulIdentifier", - "src": "1909:3:62" - }, - "nativeSrc": "1909:10:62", - "nodeType": "YulFunctionCall", - "src": "1909:10:62" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "1904:1:62", - "nodeType": "YulIdentifier", - "src": "1904:1:62" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "1884:3:62", - "nodeType": "YulBlock", - "src": "1884:3:62", - "statements": [] - }, - "src": "1880:140:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2044:9:62", - "nodeType": "YulIdentifier", - "src": "2044:9:62" - }, - { - "name": "length", - "nativeSrc": "2055:6:62", - "nodeType": "YulIdentifier", - "src": "2055:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2040:3:62", - "nodeType": "YulIdentifier", - "src": "2040:3:62" - }, - "nativeSrc": "2040:22:62", - "nodeType": "YulFunctionCall", - "src": "2040:22:62" - }, - { - "kind": "number", - "nativeSrc": "2064:2:62", - "nodeType": "YulLiteral", - "src": "2064:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2036:3:62", - "nodeType": "YulIdentifier", - "src": "2036:3:62" - }, - "nativeSrc": "2036:31:62", - "nodeType": "YulFunctionCall", - "src": "2036:31:62" - }, - { - "kind": "number", - "nativeSrc": "2069:1:62", - "nodeType": "YulLiteral", - "src": "2069:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2029:6:62", - "nodeType": "YulIdentifier", - "src": "2029:6:62" - }, - "nativeSrc": "2029:42:62", - "nodeType": "YulFunctionCall", - "src": "2029:42:62" - }, - "nativeSrc": "2029:42:62", - "nodeType": "YulExpressionStatement", - "src": "2029:42:62" - }, - { - "nativeSrc": "2080:62:62", - "nodeType": "YulAssignment", - "src": "2080:62:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2096:9:62", - "nodeType": "YulIdentifier", - "src": "2096:9:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "2115:6:62", - "nodeType": "YulIdentifier", - "src": "2115:6:62" - }, - { - "kind": "number", - "nativeSrc": "2123:2:62", - "nodeType": "YulLiteral", - "src": "2123:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2111:3:62", - "nodeType": "YulIdentifier", - "src": "2111:3:62" - }, - "nativeSrc": "2111:15:62", - "nodeType": "YulFunctionCall", - "src": "2111:15:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2132:2:62", - "nodeType": "YulLiteral", - "src": "2132:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "2128:3:62", - "nodeType": "YulIdentifier", - "src": "2128:3:62" - }, - "nativeSrc": "2128:7:62", - "nodeType": "YulFunctionCall", - "src": "2128:7:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2107:3:62", - "nodeType": "YulIdentifier", - "src": "2107:3:62" - }, - "nativeSrc": "2107:29:62", - "nodeType": "YulFunctionCall", - "src": "2107:29:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2092:3:62", - "nodeType": "YulIdentifier", - "src": "2092:3:62" - }, - "nativeSrc": "2092:45:62", - "nodeType": "YulFunctionCall", - "src": "2092:45:62" - }, - { - "kind": "number", - "nativeSrc": "2139:2:62", - "nodeType": "YulLiteral", - "src": "2139:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2088:3:62", - "nodeType": "YulIdentifier", - "src": "2088:3:62" - }, - "nativeSrc": "2088:54:62", - "nodeType": "YulFunctionCall", - "src": "2088:54:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "2080:4:62", - "nodeType": "YulIdentifier", - "src": "2080:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "1623:525:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1711:9:62", - "nodeType": "YulTypedName", - "src": "1711:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1722:6:62", - "nodeType": "YulTypedName", - "src": "1722:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "1733:4:62", - "nodeType": "YulTypedName", - "src": "1733:4:62", - "type": "" - } - ], - "src": "1623:525:62" - }, - { - "body": { - "nativeSrc": "2252:101:62", - "nodeType": "YulBlock", - "src": "2252:101:62", - "statements": [ - { - "nativeSrc": "2262:26:62", - "nodeType": "YulAssignment", - "src": "2262:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2274:9:62", - "nodeType": "YulIdentifier", - "src": "2274:9:62" - }, - { - "kind": "number", - "nativeSrc": "2285:2:62", - "nodeType": "YulLiteral", - "src": "2285:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2270:3:62", - "nodeType": "YulIdentifier", - "src": "2270:3:62" - }, - "nativeSrc": "2270:18:62", - "nodeType": "YulFunctionCall", - "src": "2270:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "2262:4:62", - "nodeType": "YulIdentifier", - "src": "2262:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2304:9:62", - "nodeType": "YulIdentifier", - "src": "2304:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "2319:6:62", - "nodeType": "YulIdentifier", - "src": "2319:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2335:2:62", - "nodeType": "YulLiteral", - "src": "2335:2:62", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nativeSrc": "2339:1:62", - "nodeType": "YulLiteral", - "src": "2339:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2331:3:62", - "nodeType": "YulIdentifier", - "src": "2331:3:62" - }, - "nativeSrc": "2331:10:62", - "nodeType": "YulFunctionCall", - "src": "2331:10:62" - }, - { - "kind": "number", - "nativeSrc": "2343:1:62", - "nodeType": "YulLiteral", - "src": "2343:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2327:3:62", - "nodeType": "YulIdentifier", - "src": "2327:3:62" - }, - "nativeSrc": "2327:18:62", - "nodeType": "YulFunctionCall", - "src": "2327:18:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2315:3:62", - "nodeType": "YulIdentifier", - "src": "2315:3:62" - }, - "nativeSrc": "2315:31:62", - "nodeType": "YulFunctionCall", - "src": "2315:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2297:6:62", - "nodeType": "YulIdentifier", - "src": "2297:6:62" - }, - "nativeSrc": "2297:50:62", - "nodeType": "YulFunctionCall", - "src": "2297:50:62" - }, - "nativeSrc": "2297:50:62", - "nodeType": "YulExpressionStatement", - "src": "2297:50:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", - "nativeSrc": "2153:200:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2221:9:62", - "nodeType": "YulTypedName", - "src": "2221:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "2232:6:62", - "nodeType": "YulTypedName", - "src": "2232:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2243:4:62", - "nodeType": "YulTypedName", - "src": "2243:4:62", - "type": "" - } - ], - "src": "2153:200:62" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 10)\n mstore(add(headStart, 64), \"Controller\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 224)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 160), and(value5, sub(shl(160, 1), 1)))\n mstore(add(headStart, 192), and(value6, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), 32)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(64, 1), 1)))\n }\n}", - "id": 62, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "6101c060405234801561001157600080fd5b506040516138243803806138248339810160408190526100309161049b565b806001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b29061033b565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e59061033b565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e9061033b565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b60208201526101589061033b565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526101909061033b565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb9061033b565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102099061033b565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102459061033b565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a9061033b565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a4506103356103e9565b50610519565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161037691815260200190565b602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b7919061049b565b9050826001600160a01b0382166103e25760405163218f5add60e11b815260040161007191906104cb565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104395760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104985780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156104ad57600080fd5b81516001600160a01b03811681146104c457600080fd5b9392505050565b602081526000825180602084015260005b818110156104f957602081860181015160408684010152016104dc565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516132a861057c60003960005050600050506000505060005050600050506000505060005050600050506000611fe30152600061160e01526132a86000f3fe608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", - "opcodes": "PUSH2 0x1C0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x3824 CODESIZE SUB DUP1 PUSH2 0x3824 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x30 SWAP2 PUSH2 0x49B JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7A JUMPI PUSH1 0x40 MLOAD PUSH4 0x218F5ADD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x21B7B73A3937B63632B9 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xA DUP2 MSTORE PUSH10 0x23B930B8342A37B5B2B7 PUSH1 0xB1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xB2 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x5374616B696E67 PUSH1 0xC8 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xE5 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xD DUP2 MSTORE PUSH13 0x47726170685061796D656E7473 PUSH1 0x98 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x11E SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH14 0x5061796D656E7473457363726F77 PUSH1 0x90 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x158 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xC DUP2 MSTORE PUSH12 0x22B837B1B426B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x190 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH14 0x2932BBB0B93239A6B0B730B3B2B9 PUSH1 0x91 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1CB SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH17 0x4772617068546F6B656E47617465776179 PUSH1 0x78 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x209 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x160 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xF DUP2 MSTORE PUSH15 0x23B930B834283937BC3CA0B236B4B7 PUSH1 0x89 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x245 SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x180 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x8 DUP2 MSTORE PUSH8 0x21BAB930BA34B7B7 PUSH1 0xC1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x27A SWAP1 PUSH2 0x33B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x1A0 DUP2 SWAP1 MSTORE PUSH2 0x100 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x80 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH1 0x40 MLOAD SWAP9 DUP12 AND SWAP11 SWAP8 DUP9 AND SWAP10 SWAP7 SWAP1 SWAP8 AND SWAP8 PUSH32 0xEF5021414834D86E36470F5C1CECF6544FB2BB723F2CA51A4C86FCD8C5919A43 SWAP8 PUSH2 0x324 SWAP8 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 DUP8 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP4 DUP7 AND PUSH1 0x40 DUP7 ADD MSTORE SWAP2 DUP6 AND PUSH1 0x60 DUP6 ADD MSTORE DUP5 AND PUSH1 0x80 DUP5 ADD MSTORE DUP4 AND PUSH1 0xA0 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP PUSH2 0x335 PUSH2 0x3E9 JUMP JUMPDEST POP PUSH2 0x519 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x100 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7641A5E DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x376 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x393 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B7 SWAP2 SWAP1 PUSH2 0x49B JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x218F5ADD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x4CB JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x439 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND EQ PUSH2 0x498 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4F9 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD PUSH1 0x40 DUP7 DUP5 ADD ADD MSTORE ADD PUSH2 0x4DC JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP6 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH2 0x32A8 PUSH2 0x57C PUSH1 0x0 CODECOPY PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 PUSH2 0x1FE3 ADD MSTORE PUSH1 0x0 PUSH2 0x160E ADD MSTORE PUSH2 0x32A8 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1B0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x76C993AE GT PUSH2 0xEF JUMPI DUP1 PUSH4 0xBE41F384 GT PUSH2 0x92 JUMPI DUP1 PUSH4 0xBE41F384 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0xC133B429 EQ PUSH2 0x42E JUMPI DUP1 PUSH4 0xC50A77B1 EQ PUSH2 0x441 JUMPI DUP1 PUSH4 0xC894222E EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0xC9747F51 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xD36FC9D4 EQ PUSH2 0x48F JUMPI DUP1 PUSH4 0xD76F62D1 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x4B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x76C993AE EQ PUSH2 0x386 JUMPI DUP1 PUSH4 0x84633713 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3A7 JUMPI DUP1 PUSH4 0x902A4938 EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0x9334EA52 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x93A90A1E EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x9F81A7CF EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0xB0EEFABE EQ PUSH2 0x3F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x36167E03 GT PUSH2 0x157 JUMPI DUP1 PUSH4 0x36167E03 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x4BC5839A EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x5AEA0EC4 EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x5BF31D4D EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x5ED2C96C EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x6369DF6B EQ PUSH2 0x358 JUMPI DUP1 PUSH4 0x6CC6CDE1 EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x50B17AD EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x533E1BA EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x11BE1997 EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0x16972978 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0x17337B46 EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0x1792F194 EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0x26058249 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x29E03FF1 EQ PUSH2 0x2C2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C8 PUSH2 0x1C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A74 JUMP JUMPDEST PUSH2 0x4C8 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x1E1 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25E PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 SWAP1 SWAP7 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND SWAP7 SWAP6 SWAP1 SWAP5 AND SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 PUSH1 0xFF DUP1 DUP4 AND SWAP4 PUSH2 0x100 SWAP1 SWAP4 DIV AND SWAP2 DUP9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F2 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x280 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0x74B JUMP JUMPDEST PUSH2 0x1E1 PUSH3 0x7A120 DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0x75F JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH2 0x2B5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F2 SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x2CB PUSH1 0x35 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2B62 JUMP JUMPDEST PUSH2 0xBEF JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH2 0x313 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BB5 JUMP JUMPDEST PUSH2 0xC10 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x366 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CB5 JUMP JUMPDEST PUSH2 0xD43 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH2 0x2B5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0xD4E JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x394 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D20 JUMP JUMPDEST PUSH2 0xD62 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x1E1 SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xD8E JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0xFAE JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D20 JUMP JUMPDEST PUSH2 0xFBF JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x406 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0xFD0 JUMP JUMPDEST PUSH2 0x41E PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xFE1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x43C CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0x1017 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x2DA2 JUMP JUMPDEST PUSH2 0x10AF JUMP JUMPDEST PUSH2 0x467 PUSH2 0x462 CALLDATASIZE PUSH1 0x4 PUSH2 0x2DE3 JUMP JUMPDEST PUSH2 0x113B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x2EB9 JUMP JUMPDEST PUSH2 0x1320 JUMP JUMPDEST PUSH2 0x41E PUSH2 0x49D CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED5 JUMP JUMPDEST PUSH2 0x1411 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F0B JUMP JUMPDEST PUSH2 0x141D JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x4C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0x142E JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x4FD DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x528 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x556 JUMPI PUSH2 0x556 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE DUP1 SLOAD PUSH1 0x6 DUP3 ADD SLOAD SWAP2 SWAP3 SWAP2 PUSH2 0x5CF SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP7 SWAP1 PUSH2 0x1469 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x2 DUP5 ADD SLOAD SWAP2 SWAP3 POP PUSH2 0x60E SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH2 0x5F6 SWAP1 DUP5 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP6 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP6 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP5 ADD SLOAD PUSH2 0x6D6 SWAP3 DUP6 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x66F JUMPI PUSH2 0x66F PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x680 JUMPI PUSH2 0x680 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x6A8 JUMPI PUSH2 0x6A8 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x6B9 JUMPI PUSH2 0x6B9 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x6E8 JUMPI PUSH2 0x6E8 DUP3 PUSH1 0x3 ADD SLOAD PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD DUP3 SLOAD PUSH1 0x2 DUP5 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP8 SWAP1 PUSH32 0x6D800AAAF64B9A1F321DCD63DA04369D33D8A0D49AD0FBBA085AAB4A98BF31C4 SWAP1 PUSH2 0x733 SWAP1 DUP7 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x753 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1760 JUMP JUMPDEST POP JUMP JUMPDEST DUP1 PUSH2 0x769 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x78B JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x82C0055 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x7D0 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x7F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x820 JUMPI PUSH2 0x820 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0x85A JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x34 SLOAD PUSH1 0x5 DUP3 ADD SLOAD TIMESTAMP SWAP2 PUSH2 0x88E SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 PUSH2 0x2F4C JUMP JUMPDEST LT PUSH2 0x8AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1D7753D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD ISZERO PUSH2 0x8D6 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH2 0x8D6 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP5 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH2 0x99E SWAP3 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x937 JUMPI PUSH2 0x937 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x948 JUMPI PUSH2 0x948 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x970 JUMPI PUSH2 0x970 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x981 JUMPI PUSH2 0x981 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x17BF JUMP JUMPDEST POP PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x500 OR SWAP1 SSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND SWAP4 SWAP1 SWAP3 AND SWAP2 DUP8 SWAP2 PUSH32 0x223103F8EB52E5F43A75655152ACD882A605D70DF57A5C0FEFD30F516B1756D2 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA32 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xA3C DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0xA5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xA8C JUMPI PUSH2 0xA8C PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0xAC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0x200 PUSH2 0xFF00 NOT DUP3 AND OR SWAP1 SWAP2 SSTORE DUP4 MLOAD PUSH2 0x100 DUP2 ADD DUP6 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP5 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE SWAP1 SWAP3 PUSH2 0xB49 SWAP3 SWAP2 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x66F JUMPI PUSH2 0x66F PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD DUP5 SWAP2 ISZERO PUSH2 0xB77 JUMPI PUSH1 0x40 MLOAD PUSH4 0x41371593 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH2 0xB98 DUP2 PUSH1 0x2 ADD SLOAD PUSH2 0xB89 PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x180D JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH32 0x2226EBD23625A7938FB786DF2248BD171D2E6AD70CB2B654EA1BE830CA17224D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBF9 PUSH2 0x1872 JUMP JUMPDEST PUSH2 0xC07 CALLER PUSH1 0x35 SLOAD DUP6 DUP6 PUSH2 0x1891 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1A PUSH2 0x1BD3 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xC41 JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xC5D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xC6B JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xC89 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xCB3 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH2 0xCBC CALLER PUSH2 0x1BF7 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x1C08 JUMP JUMPDEST PUSH2 0xCCD DUP11 PUSH2 0x1C18 JUMP JUMPDEST PUSH2 0xCD6 DUP10 PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0xCDF DUP9 PUSH2 0x1760 JUMP JUMPDEST PUSH2 0xCE8 DUP8 PUSH2 0x1D0E JUMP JUMPDEST PUSH2 0xCF1 DUP7 PUSH2 0x1D8B JUMP JUMPDEST DUP4 ISZERO PUSH2 0xD37 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC0A DUP3 PUSH2 0x1E18 JUMP JUMPDEST PUSH2 0xD56 PUSH2 0x172E JUMP JUMPDEST PUSH2 0xD60 PUSH1 0x0 PUSH2 0x1EB5 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xD6A PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1D0E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD7E PUSH2 0x1F11 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDB9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xDC3 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0xDE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xE13 JUMPI PUSH2 0xE13 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0xE4D JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD SLOAD ISZERO PUSH2 0xE86 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH2 0xE86 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP5 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH2 0xF4E SWAP3 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xEE7 JUMPI PUSH2 0xEE7 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xEF8 JUMPI PUSH2 0xEF8 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF20 JUMPI PUSH2 0xF20 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF31 JUMPI PUSH2 0xF31 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x1F35 JUMP JUMPDEST POP PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x300 OR SWAP1 SSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH32 0xF0912EFB86EA1D65A17D64D48393CDB1CA0EA5220DD2BBE438621199D30955B7 SWAP1 PUSH1 0x20 ADD PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0xFB6 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1F70 JUMP JUMPDEST PUSH2 0xFC7 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1D8B JUMP JUMPDEST PUSH2 0xFD8 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1C18 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x100F JUMPI PUSH2 0x100F PUSH2 0x2AAF JUMP JUMPDEST EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1022 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x1056 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1074 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1098 SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST SWAP1 POP PUSH2 0x10A8 DUP4 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B9 PUSH2 0x1872 JUMP JUMPDEST PUSH2 0xC07 CALLER PUSH1 0x35 SLOAD PUSH2 0x10FF DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 PUSH2 0x1184 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11C7 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x11D3 DUP3 DUP3 PUSH2 0x2532 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD MLOAD PUSH1 0x40 DUP1 DUP8 ADD MLOAD DUP7 MLOAD SWAP4 DUP8 ADD MLOAD SWAP2 DUP8 ADD MLOAD SWAP5 SWAP6 SWAP3 SWAP5 SWAP1 SWAP4 SWAP3 PUSH2 0x1232 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6ABA5297 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x24 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC4 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP POP POP POP PUSH1 0x0 PUSH2 0x127D DUP5 PUSH1 0x0 DUP6 DUP14 DUP14 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12C4 DUP6 PUSH1 0x0 DUP6 DUP13 DUP13 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x3 SWAP1 DUP2 ADD DUP5 SWAP1 SSTORE DUP4 DUP4 MSTORE DUP2 DUP4 KECCAK256 ADD DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 POP DUP3 SWAP2 DUP5 SWAP2 PUSH32 0xFEC135A4CF8E5C6E13DEA23BE058BF03A8BF8F1F6FB0A021B0A5AEDDFBA81407 SWAP2 LOG3 SWAP1 SWAP11 SWAP1 SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x132C DUP4 PUSH2 0x2563 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0xE022923 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xE022923 SWAP1 PUSH2 0x1362 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1380 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A4 SWAP2 SWAP1 PUSH2 0x3036 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x34789D8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD SWAP1 DUP2 DUP2 EQ PUSH2 0x1407 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA24CFE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC07 DUP4 DUP4 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x1425 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0x1436 PUSH2 0x172E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1460 JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1EB5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1474 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x14A8 SWAP3 DUP11 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14EA SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x150F SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP1 PUSH2 0x25F4 AND JUMP JUMPDEST SWAP1 POP DUP5 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1520 JUMPI POP DUP1 DUP6 GT ISZERO JUMPDEST DUP6 DUP3 SWAP1 SWAP2 PUSH2 0x154A JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC6B7C41 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH1 0x0 PUSH2 0x155C DUP7 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x265B JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x157A SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x25F4 AND JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP3 SUB DUP4 ADD DUP2 MSTORE PUSH1 0x60 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x65C1A3FF PUSH1 0xE1 SHL SWAP1 SWAP3 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xCB8347FE SWAP2 PUSH2 0x15CE SWAP2 DUP13 SWAP2 SWAP1 PUSH1 0x64 ADD PUSH2 0x30F9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP3 SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16AA SWAP2 SWAP1 PUSH2 0x311D JUMP JUMPDEST PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10BA3930B739B332B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10A8 JUMPI POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1726 JUMPI PUSH2 0x1726 PUSH2 0x2AAF JUMP JUMPDEST EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH2 0x1737 PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD60 JUMPI CALLER PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST DUP1 DUP1 PUSH2 0x1782 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F4E05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x35 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x97896B9DA0F97F36BF3011570BCFF930069299DE4B1E89C9CB44909841CAC2F8 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17CA DUP3 PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x1805 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0x5 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x186E JUMPI PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1869 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xD60 CALLER PUSH1 0x35 SLOAD PUSH2 0x1881 PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x2671 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 SWAP1 SHL AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x34 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x54 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x18D8 DUP2 PUSH2 0xFE1 JUMP JUMPDEST ISZERO DUP2 SWAP1 PUSH2 0x18FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x124A23F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0xE022923 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE022923 SWAP1 PUSH2 0x192D SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x194B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196F SWAP2 SWAP1 PUSH2 0x3036 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x199D JUMPI PUSH1 0x40 MLOAD PUSH4 0x34789D8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x19A8 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x19DC SWAP3 DUP8 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A1E SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SUB PUSH2 0x1A43 JUMPI PUSH1 0x40 MLOAD PUSH4 0x307EFDB7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1A53 DUP4 DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x80 DUP2 ADD PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x37 DUP3 MSTORE DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR DUP4 SSTORE SWAP3 DUP6 ADD MLOAD PUSH1 0x1 DUP1 DUP5 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP5 AND OR SWAP1 SSTORE SWAP2 DUP4 ADD MLOAD PUSH1 0x2 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x3 DUP5 ADD SSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x4 DUP5 ADD DUP1 SLOAD SWAP2 SWAP4 SWAP1 SWAP3 PUSH1 0xFF NOT SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x1B23 JUMPI PUSH2 0x1B23 PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1B4D JUMPI PUSH2 0x1B4D PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x5 DUP3 ADD SSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x6 SWAP1 SWAP2 ADD SSTORE DUP4 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 DUP14 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP8 SWAP1 PUSH32 0xBFD6E5F61B4AA04B088A513A833705C7C703B907516C1DBFA66F93D1F725D33D SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 JUMP JUMPDEST PUSH2 0x1BFF PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x26D7 JUMP JUMPDEST PUSH2 0x1C10 PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0xD60 PUSH2 0x26DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x616BC441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x51744122301B50E919F4E3D22ADF8C53ABC92195B8C667EDA98C6EF20375672E SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x1CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC4411F11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x310462A9BF49FFF4A57910EC647C77CBF8AAF2F13394554AC6CDF14FC68DB7E6 SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST DUP1 PUSH3 0x7A120 PUSH4 0xFFFFFFFF DUP3 AND GT ISZERO PUSH2 0x1D42 JUMPI PUSH1 0x40 MLOAD PUSH4 0x432E6643 PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH1 0x36 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC573DC0F869F6A1D0A74FC7712A63BAABCB5567131D2D98005E163924EDDCBAB SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST DUP1 PUSH4 0xFFFFFFFF DUP2 AND PUSH3 0xF4240 LT ISZERO PUSH2 0x1DBF JUMPI PUSH1 0x40 MLOAD PUSH4 0x4E9374FB PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH1 0x36 DUP1 SLOAD PUSH8 0xFFFFFFFF00000000 NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH4 0xFFFFFFFF DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP3 DIV AND DUP2 MSTORE PUSH32 0x7EFAF01BEC3CDA8D104163BB466D01D7E16F68848301C7EB0749CFA59D680502 SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 SWAP5 DUP6 ADD MLOAD DUP6 MLOAD PUSH32 0x32DD026408194A0D7E54CC66A2AB6C856EFC55CFCD4DD258FDE5B1A55222BAA6 DUP2 DUP6 ADD MSTORE DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP4 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC2 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xE2 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP4 ADD DUP4 MSTORE PUSH2 0x102 SWAP1 SWAP2 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EBF PUSH2 0x1F11 JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP5 POP SWAP2 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F40 DUP3 PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x1805 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0x3 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH2 0x17F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F97 JUMPI PUSH1 0x40 MLOAD PUSH4 0x616BC441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x81DCB738DA3DABD5BB2ADBC7DD107FBBFCA936E9C8AECAB25F5B17A710A784C7 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2010 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1584A179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x561285E4 SWAP3 PUSH2 0x2044 SWAP3 DUP10 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2061 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2085 SWAP2 SWAP1 PUSH2 0x313F JUMP JUMPDEST PUSH1 0x0 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x33 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1EBB7C30 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2104 SWAP2 SWAP1 PUSH2 0x31BE JUMP JUMPDEST PUSH2 0x2114 SWAP1 PUSH4 0xFFFFFFFF AND DUP6 PUSH2 0x31DB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2122 DUP4 DUP4 PUSH2 0x27B1 JUMP JUMPDEST PUSH2 0x212C SWAP1 DUP7 PUSH2 0x2F4C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH2 0x2175 PUSH1 0x20 DUP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x217F SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x218A SWAP1 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST DUP3 MLOAD SWAP1 DUP2 EQ SWAP1 PUSH1 0x1 PUSH2 0x219D PUSH1 0x20 DUP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x21A7 SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x21B2 SWAP1 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x21DA JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x21F5 SWAP2 SWAP1 PUSH2 0x31F2 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2208 DUP7 PUSH1 0x60 PUSH2 0x27C1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2221 DUP8 PUSH2 0x221C PUSH1 0x20 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x27C1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2245 DUP9 PUSH1 0x20 PUSH2 0x2236 DUP2 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x2240 SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x2813 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE SWAP8 DUP9 MSTORE PUSH1 0x20 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP5 ADD MSTORE POP PUSH1 0xFF AND PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2289 DUP5 PUSH2 0x1320 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2295 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x22C9 SWAP3 DUP8 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x230B SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SUB PUSH2 0x2330 JUMPI PUSH1 0x40 MLOAD PUSH4 0x307EFDB7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x20 DUP1 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD DUP2 MLOAD SWAP4 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT DUP5 DUP4 SHL DUP2 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP2 DUP10 SWAP1 SHL SWAP1 SWAP2 AND PUSH1 0x94 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0xA8 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x2399 DUP2 PUSH2 0xFE1 JUMP JUMPDEST ISZERO DUP2 SWAP1 PUSH2 0x23BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x124A23F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x23CD DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP3 MSTORE DUP13 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE DUP4 DUP6 ADD DUP15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x80 DUP9 ADD DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0xA0 DUP11 ADD DUP2 SWAP1 MSTORE TIMESTAMP PUSH1 0xC0 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD DUP13 SWAP1 MSTORE DUP14 DUP6 MSTORE PUSH1 0x37 SWAP1 SWAP7 MSTORE SWAP9 SWAP1 SWAP3 KECCAK256 DUP8 MLOAD DUP2 SLOAD SWAP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR DUP3 SSTORE SWAP6 MLOAD PUSH1 0x1 DUP1 DUP4 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP10 AND SWAP2 SWAP1 SWAP8 AND OR SWAP1 SWAP7 SSTORE SWAP2 MLOAD DUP6 DUP3 ADD SSTORE SWAP1 MLOAD PUSH1 0x3 DUP6 ADD SSTORE SWAP5 MLOAD SWAP1 DUP4 ADD DUP1 SLOAD SWAP7 SWAP8 POP SWAP4 SWAP6 SWAP3 SWAP5 SWAP1 SWAP4 SWAP3 PUSH1 0xFF NOT AND SWAP2 SWAP1 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x248A JUMPI PUSH2 0x248A PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x24B4 JUMPI PUSH2 0x24B4 PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD SSTORE PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD SSTORE SWAP1 POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0xFB609A7FD5EB7947365D2F96D051030CAC33A27E3E4923F97EA4E03AAA2BCB14 DUP12 DUP12 PUSH1 0x40 ADD MLOAD DUP12 DUP8 PUSH1 0x40 MLOAD PUSH2 0x251E SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3220 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 EQ DUP1 ISZERO PUSH2 0x254D JUMPI POP DUP2 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0xC07 JUMPI POP POP PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MLOAD EQ ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE DUP3 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP1 DUP2 PUSH2 0x2593 DUP3 PUSH2 0x1E18 JUMP JUMPDEST SWAP1 POP PUSH2 0x25EC DUP2 DUP6 PUSH1 0x60 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x25D8 SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x41 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x2865 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2603 DUP4 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x2616 JUMPI POP PUSH2 0x2616 DUP3 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP4 DUP4 SWAP1 SWAP2 PUSH2 0x2640 JUMPI PUSH1 0x40 MLOAD PUSH4 0x768BF0EB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH3 0xF4240 SWAP1 POP PUSH2 0x2651 DUP4 DUP6 PUSH2 0x31DB JUMP JUMPDEST PUSH2 0xC07 SWAP2 SWAP1 PUSH2 0x3250 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x266A JUMPI DUP2 PUSH2 0xC07 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH2 0x1667 JUMP JUMPDEST PUSH2 0x26BA PUSH2 0x288F JUMP JUMPDEST PUSH2 0xD60 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1436 PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x26E7 PUSH2 0x26B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD87CD6EF79D4E2B95E15CE8ABF732DB51EC771F1CA2EDCCF22A46C729AC56472 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x171A7FA058648750A8C5AAE430F30DB8D0100EFC3A5E1B2E8054B1C1CE28B6B4 SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x44852B2A670ADE5407E78FB2863C51DE9FCB96542A07186FE3AEDA6BB8A116D PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH32 0xA070FFB1CD7409649BF77822CCE74495468E06DBFAEF09556838BF188679B9C2 PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x266A JUMPI DUP2 PUSH2 0xC07 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27CE PUSH1 0x20 DUP4 PUSH2 0x2F4C JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP2 LT ISZERO SWAP1 PUSH2 0x27E0 PUSH1 0x20 DUP6 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x2808 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2820 PUSH1 0x1 DUP4 PUSH2 0x2F4C JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP2 LT ISZERO SWAP1 PUSH2 0x2832 PUSH1 0x1 DUP6 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x285A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP ADD PUSH1 0x1 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2875 DUP7 DUP7 PUSH2 0x28A9 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x2885 DUP3 DUP3 PUSH2 0x28F6 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2899 PUSH2 0x1BD3 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x41 SUB PUSH2 0x28E3 JUMPI PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x28D5 DUP9 DUP3 DUP6 DUP6 PUSH2 0x29AF JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x28EF JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x0 SWAP2 POP PUSH1 0x2 SWAP1 JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x290A JUMPI PUSH2 0x290A PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x2913 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2927 JUMPI PUSH2 0x2927 PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x2945 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF645EEDF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2959 JUMPI PUSH2 0x2959 PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x297A JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCE698F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST PUSH1 0x3 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x298E JUMPI PUSH2 0x298E PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x186E JUMPI PUSH1 0x40 MLOAD PUSH4 0x35E2F383 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH16 0xA2A8918CA85BAFE22016D0B997E4DF60 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP5 GT ISZERO PUSH2 0x29E0 JUMPI POP PUSH1 0x0 SWAP2 POP PUSH1 0x3 SWAP1 POP DUP3 PUSH2 0x2A6A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP11 SWAP1 MSTORE PUSH1 0xFF DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A34 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2A60 JUMPI POP PUSH1 0x0 SWAP3 POP PUSH1 0x1 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x2A6A JUMP JUMPDEST SWAP3 POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x6 DUP2 LT PUSH2 0x2AD5 JUMPI PUSH2 0x2AD5 PUSH2 0x2AAF JUMP JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND DUP3 MSTORE DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD PUSH1 0x3 DUP7 LT PUSH2 0x2B10 JUMPI PUSH2 0x2B10 PUSH2 0x2AAF JUMP JUMPDEST DUP6 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x2B23 PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x2AC5 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xE0 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2B80 DUP2 PUSH2 0x2B4D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2BCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x2BD8 DUP2 PUSH2 0x2B4D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x2BE8 DUP2 PUSH2 0x2B8E JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x2BFF DUP2 PUSH2 0x2BA3 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x2C0F DUP2 PUSH2 0x2BA3 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x100 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x2CC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2CFA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 SWAP1 DUP2 MSTORE DUP5 CALLDATALOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE SWAP4 DUP5 ADD CALLDATALOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2B4D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2D9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2DCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DD7 DUP6 DUP3 DUP7 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2DF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E1B DUP8 DUP3 DUP9 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E46 DUP8 DUP3 DUP9 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6C PUSH2 0x2C1D JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE SWAP1 POP PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2ECB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC07 DUP4 DUP4 PUSH2 0x2E52 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x180 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2EE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2EF3 DUP5 DUP5 PUSH2 0x2E52 JUMP JUMPDEST SWAP2 POP PUSH2 0x2F02 DUP5 PUSH1 0xC0 DUP6 ADD PUSH2 0x2E52 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xC0A DUP3 DUP5 PUSH2 0x2AC5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xC0A JUMPI PUSH2 0xC0A PUSH2 0x2F36 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2F84 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2F84 DUP2 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x2FA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2FB3 PUSH2 0x2C53 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x2FD7 PUSH1 0x60 DUP6 ADD PUSH2 0x2F79 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2FE8 PUSH1 0x80 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2FF9 PUSH1 0xA0 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x300A PUSH1 0xC0 DUP6 ADD PUSH2 0x2F79 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x301B PUSH1 0xE0 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x304A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x3055 PUSH2 0x2C84 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x3060 DUP2 PUSH2 0x2B4D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xE0 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x30D9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x30BD JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x25EC SWAP1 DUP4 ADD DUP5 PUSH2 0x30B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x312F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x3152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3184 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 SWAP1 DUP2 MSTORE DUP5 MLOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD MLOAD SWAP1 DUP4 ADD MSTORE DUP5 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x10A8 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xC0A JUMPI PUSH2 0xC0A PUSH2 0x2F36 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 SWAP1 SWAP4 ADD MLOAD SWAP1 SWAP5 SWAP3 SWAP4 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x323F PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x326D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xFC MLOAD 0xA7 SWAP3 SELFBALANCE 0xA9 0xED CALLCODE PUSH12 0xDAF727EA63DE7398A97BC3A2 PUSH27 0xD1E74C0FF8BF34282E64736F6C634300081B003300000000000000 ", - "sourceMap": "2429:26817:48:-:0;;;3950:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3997:10;-1:-1:-1;;;;;4295:24:33;;4287:81;;;;-1:-1:-1;;;4287:81:33;;510:2:62;4287:81:33;;;492:21:62;549:2;529:18;;;522:30;-1:-1:-1;;;568:18:62;;;561:40;618:18;;4287:81:33;;;;;;;;;-1:-1:-1;;;;;4379:42:33;;;;4457:40;;;;;;;;;;;;-1:-1:-1;;;4457:40:33;;;;;;:26;:40::i;:::-;-1:-1:-1;;;;;4431:67:33;;;4540:37;;;;;;;;;;;;-1:-1:-1;;;4540:37:33;;;;;;:26;:37::i;:::-;-1:-1:-1;;;;;4508:70:33;;;4620:43;;;;;;;;;;;;-1:-1:-1;;;4620:43:33;;;;;;:26;:43::i;:::-;-1:-1:-1;;;;;4588:76:33;;;4714:44;;;;;;;;;;;;-1:-1:-1;;;4714:44:33;;;;;;:26;:44::i;:::-;-1:-1:-1;;;;;4674:85:33;;;4805:42;;;;;;;;;;;;-1:-1:-1;;;4805:42:33;;;;;;:26;:42::i;:::-;-1:-1:-1;;;;;4769:79:33;;;4898:44;;;;;;;;;;;;-1:-1:-1;;;4898:44:33;;;;;;:26;:44::i;:::-;-1:-1:-1;;;;;4858:85:33;;;4989:47;;;;;;;;;;;;-1:-1:-1;;;4989:47:33;;;;;;:26;:47::i;:::-;-1:-1:-1;;;;;4953:84:33;;;5084:45;;;;;;;;;;;;-1:-1:-1;;;5084:45:33;;;;;;:26;:45::i;:::-;-1:-1:-1;;;;;5047:83:33;;;5167:38;;;;;;;;;;;;-1:-1:-1;;;5167:38:33;;;;;;:26;:38::i;:::-;-1:-1:-1;;;;;5140:66:33;;;;;;;5420:16;;5303:13;;5269:11;;5339:14;;5376:21;;5459:19;;5501:21;;5545:19;;5587:17;;5222:430;;;;;;;;;;;;;;;;;;;5587:17;;-1:-1:-1;;;;;980:32:62;;;962:51;;1049:32;;;1044:2;1029:18;;1022:60;1118:32;;;1113:2;1098:18;;1091:60;1187:32;;;1182:2;1167:18;;1160:60;1257:32;;1251:3;1236:19;;1229:61;1327:32;;1000:3;1306:19;;1299:61;1397:32;;;1391:3;1376:19;;1369:61;949:3;934:19;;647:789;5222:430:33;;;;;;;;-1:-1:-1;4019:22:48::1;:20;:22::i;:::-;3950:98:::0;2429:26817;;7673:326:33;7759:7;7778:23;7804:16;;-1:-1:-1;;;;;7804:33:33;;7848:13;7838:24;;;;;;7804:59;;;;;;;;;;;;;1587:25:62;;1575:2;1560:18;;1441:177;7804:59:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7778:85;-1:-1:-1;7945:13:33;-1:-1:-1;;;;;7881:29:33;;7873:87;;;;-1:-1:-1;;;7873:87:33;;;;;;;;:::i;:::-;-1:-1:-1;7977:15:33;7673:326;-1:-1:-1;;7673:326:33:o;7711:422:35:-;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:35;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:35;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:35;-1:-1:-1;;;;;8035:33:35;;;;;8087:29;;2297:50:62;;;8087:29:35;;2285:2:62;2270:18;8087:29:35;;;;;;;7981:146;7760:373;7711:422::o;14:290:62:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:62;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:62:o;1623:525::-;1770:2;1759:9;1752:21;1733:4;1802:6;1796:13;1845:6;1840:2;1829:9;1825:18;1818:34;1870:1;1880:140;1894:6;1891:1;1888:13;1880:140;;;2005:2;1989:14;;;1985:23;;1979:30;1974:2;1955:17;;;1951:26;1944:66;1909:10;1880:140;;;1884:3;2069:1;2064:2;2055:6;2044:9;2040:22;2036:31;2029:42;2139:2;2132;2128:7;2123:2;2115:6;2111:15;2107:29;2096:9;2092:45;2088:54;2080:62;;;1623:525;;;;:::o;2153:200::-;2429:26817:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@MAX_FISHERMAN_REWARD_CUT_8018": { - "entryPoint": null, - "id": 8018, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@__AttestationManager_init_13125": { - "entryPoint": 7176, - "id": 13125, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@__AttestationManager_init_unchained_13150": { - "entryPoint": 9951, - "id": 13150, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@__Ownable_init_4708": { - "entryPoint": 7159, - "id": 4708, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@__Ownable_init_unchained_4735": { - "entryPoint": 9943, - "id": 4735, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_cancelDisputeInConflict_9118": { - "entryPoint": 6079, - "id": 9118, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_checkInitializing_5024": { - "entryPoint": 9906, - "id": 5024, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_checkOwner_4776": { - "entryPoint": 5934, - "id": 4776, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_createIndexingDisputeWithAllocation_9040": { - "entryPoint": 6289, - "id": 9040, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@_createQueryDisputeWithAttestation_8913": { - "entryPoint": 8829, - "id": 8913, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@_drawDisputeInConflict_9079": { - "entryPoint": 7989, - "id": 9079, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_encodeReceipt_13225": { - "entryPoint": 7704, - "id": 13225, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_getInitializableStorage_5101": { - "entryPoint": 7123, - "id": 5101, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getOwnableStorage_4679": { - "entryPoint": 7953, - "id": 4679, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getStakeSnapshot_9437": { - "entryPoint": 8197, - "id": 9437, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_graphStaking_4540": { - "entryPoint": 8161, - "id": 4540, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_graphToken_4530": { - "entryPoint": 5644, - "id": 4530, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_isDisputeInConflict_9390": { - "entryPoint": 5863, - "id": 9390, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_isInitializing_5092": { - "entryPoint": 10383, - "id": 5092, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_msgSender_5130": { - "entryPoint": null, - "id": 5130, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_pullFishermanDeposit_9131": { - "entryPoint": 6258, - "id": 9131, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_recoverSigner_13195": { - "entryPoint": 9571, - "id": 13195, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_setArbitrator_9238": { - "entryPoint": 7192, - "id": 9238, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setDisputeDeposit_9285": { - "entryPoint": 5984, - "id": 9285, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setDisputePeriod_9261": { - "entryPoint": 7305, - "id": 9261, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setFishermanRewardCut_9309": { - "entryPoint": 7438, - "id": 9309, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setMaxSlashingCut_9334": { - "entryPoint": 7563, - "id": 9334, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setSubgraphService_9362": { - "entryPoint": 8048, - "id": 9362, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_slashIndexer_9212": { - "entryPoint": 5225, - "id": 9212, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@_throwError_6729": { - "entryPoint": 10486, - "id": 6729, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_toBytes32_11919": { - "entryPoint": 10177, - "id": 11919, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_toUint8_11886": { - "entryPoint": 10259, - "id": 11886, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_transferOwnership_4847": { - "entryPoint": 7861, - "id": 4847, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@acceptDispute_8373": { - "entryPoint": 1224, - "id": 8373, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@arbitrator_9451": { - "entryPoint": null, - "id": 9451, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@areConflictingAttestations_8670": { - "entryPoint": 5137, - "id": 8670, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@areConflicting_11783": { - "entryPoint": 9522, - "id": 11783, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@burnTokens_599": { - "entryPoint": 6157, - "id": 599, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@cancelDispute_8500": { - "entryPoint": 1887, - "id": 8500, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@createIndexingDispute_8174": { - "entryPoint": 3055, - "id": 8174, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@createQueryDisputeConflict_8300": { - "entryPoint": 4411, - "id": 8300, - "parameterSlots": 4, - "returnSlots": 2 - }, - "@createQueryDispute_8198": { - "entryPoint": 4271, - "id": 8198, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@disputeDeposit_9457": { - "entryPoint": null, - "id": 9457, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@disputePeriod_9454": { - "entryPoint": null, - "id": 9454, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@disputes_9469": { - "entryPoint": null, - "id": 9469, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@drawDispute_8430": { - "entryPoint": 3470, - "id": 8430, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@encodeReceipt_8599": { - "entryPoint": 3395, - "id": 8599, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@fishermanRewardCut_9460": { - "entryPoint": null, - "id": 9460, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@getAttestationIndexer_8783": { - "entryPoint": 4896, - "id": 8783, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getDisputePeriod_8619": { - "entryPoint": null, - "id": 8619, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getStakeSnapshot_8650": { - "entryPoint": 4119, - "id": 8650, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getVerifierCut_8609": { - "entryPoint": null, - "id": 8609, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@initialize_8151": { - "entryPoint": 3088, - "id": 8151, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@isDisputeCreated_8801": { - "entryPoint": 4065, - "id": 8801, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isValidPPM_4261": { - "entryPoint": null, - "id": 4261, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@maxSlashingCut_9463": { - "entryPoint": null, - "id": 9463, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@min_4146": { - "entryPoint": 10161, - "id": 4146, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@min_7009": { - "entryPoint": 9819, - "id": 7009, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@mulPPM_4219": { - "entryPoint": 9716, - "id": 4219, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@owner_4759": { - "entryPoint": 3443, - "id": 4759, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@parse_11853": { - "entryPoint": 8502, - "id": 11853, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@pullTokens_552": { - "entryPoint": 9841, - "id": 552, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@pushTokens_578": { - "entryPoint": 5680, - "id": 578, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@recover_6486": { - "entryPoint": 10341, - "id": 6486, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@rejectDispute_8727": { - "entryPoint": 2567, - "id": 8727, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@renounceOwnership_4790": { - "entryPoint": 3406, - "id": 4790, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@setArbitrator_8514": { - "entryPoint": 4048, - "id": 8514, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setDisputeDeposit_8542": { - "entryPoint": 1867, - "id": 8542, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setDisputePeriod_8528": { - "entryPoint": 5149, - "id": 8528, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setFishermanRewardCut_8556": { - "entryPoint": 3426, - "id": 8556, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setMaxSlashingCut_8570": { - "entryPoint": 4031, - "id": 8570, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setSubgraphService_8584": { - "entryPoint": 4014, - "id": 8584, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@subgraphService_9448": { - "entryPoint": null, - "id": 9448, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferOwnership_4818": { - "entryPoint": 5166, - "id": 4818, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@tryRecover_6456": { - "entryPoint": 10409, - "id": 6456, - "parameterSlots": 2, - "returnSlots": 3 - }, - "@tryRecover_6644": { - "entryPoint": 10671, - "id": 6644, - "parameterSlots": 4, - "returnSlots": 3 - }, - "abi_decode_bytes_calldata": { - "entryPoint": 11610, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_struct_State": { - "entryPoint": 11858, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 11581, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes32": { - "entryPoint": 11106, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_uint64t_uint256t_uint32t_uint32": { - "entryPoint": 11189, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 12573, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes32": { - "entryPoint": 10902, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes32t_bytes32t_bytes32_fromMemory": { - "entryPoint": 12786, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_bytes32t_uint256": { - "entryPoint": 10868, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_bytes_calldata_ptr": { - "entryPoint": 11682, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_bytes_calldata_ptrt_bytes_calldata_ptr": { - "entryPoint": 11747, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory": { - "entryPoint": 12607, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory": { - "entryPoint": 12180, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_Receipt_$11685_memory_ptr": { - "entryPoint": 11445, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_State_$11307_memory_ptr_fromMemory": { - "entryPoint": 12342, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_State_$11699_memory_ptr": { - "entryPoint": 11961, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_State_$11699_memory_ptrt_struct$_State_$11699_memory_ptr": { - "entryPoint": 11989, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint256": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint32": { - "entryPoint": 11552, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint32_fromMemory": { - "entryPoint": 12734, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint64": { - "entryPoint": 12043, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_uint32_fromMemory": { - "entryPoint": 12153, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_uint64_fromMemory": { - "entryPoint": 12169, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_bytes": { - "entryPoint": 12467, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_enum_DisputeStatus": { - "entryPoint": 10949, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_tuple_packed_t_address_t_bytes32__to_t_address_t_bytes32__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 6, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes32_t_bytes32_t_uint8__to_t_bytes32_t_bytes32_t_uint8__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": 12127, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes32_t_enum$_DisputeType_$10710_t_enum$_DisputeStatus_$10718_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_bytes32_t_uint8_t_uint8_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": 10969, - "id": null, - "parameterSlots": 9, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 12537, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 7, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 7, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_ISubgraphService_$11280__to_t_address__fromStack_reversed": { - "entryPoint": 11065, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_enum$_DisputeStatus_$10718__to_t_uint8__fromStack_reversed": { - "entryPoint": 12072, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_address_t_bytes32_t_uint256__to_t_uint256_t_address_t_bytes32_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__to_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__fromStack_reversed": { - "entryPoint": 12832, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 11347, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "allocate_memory_2163": { - "entryPoint": 11293, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "allocate_memory_2167": { - "entryPoint": 11396, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "checked_add_t_uint256": { - "entryPoint": 12108, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint256": { - "entryPoint": 12880, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_mul_t_uint256": { - "entryPoint": 12763, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 12086, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x21": { - "entryPoint": 10927, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_address": { - "entryPoint": 11085, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_uint32": { - "entryPoint": 11171, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_uint64": { - "entryPoint": 11150, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nativeSrc": "0:23206:62", - "nodeType": "YulBlock", - "src": "0:23206:62", - "statements": [ - { - "nativeSrc": "6:3:62", - "nodeType": "YulBlock", - "src": "6:3:62", - "statements": [] - }, - { - "body": { - "nativeSrc": "101:259:62", - "nodeType": "YulBlock", - "src": "101:259:62", - "statements": [ - { - "body": { - "nativeSrc": "147:16:62", - "nodeType": "YulBlock", - "src": "147:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "156:1:62", - "nodeType": "YulLiteral", - "src": "156:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "159:1:62", - "nodeType": "YulLiteral", - "src": "159:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "149:6:62", - "nodeType": "YulIdentifier", - "src": "149:6:62" - }, - "nativeSrc": "149:12:62", - "nodeType": "YulFunctionCall", - "src": "149:12:62" - }, - "nativeSrc": "149:12:62", - "nodeType": "YulExpressionStatement", - "src": "149:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "122:7:62", - "nodeType": "YulIdentifier", - "src": "122:7:62" - }, - { - "name": "headStart", - "nativeSrc": "131:9:62", - "nodeType": "YulIdentifier", - "src": "131:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "118:3:62", - "nodeType": "YulIdentifier", - "src": "118:3:62" - }, - "nativeSrc": "118:23:62", - "nodeType": "YulFunctionCall", - "src": "118:23:62" - }, - { - "kind": "number", - "nativeSrc": "143:2:62", - "nodeType": "YulLiteral", - "src": "143:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "114:3:62", - "nodeType": "YulIdentifier", - "src": "114:3:62" - }, - "nativeSrc": "114:32:62", - "nodeType": "YulFunctionCall", - "src": "114:32:62" - }, - "nativeSrc": "111:52:62", - "nodeType": "YulIf", - "src": "111:52:62" - }, - { - "nativeSrc": "172:14:62", - "nodeType": "YulVariableDeclaration", - "src": "172:14:62", - "value": { - "kind": "number", - "nativeSrc": "185:1:62", - "nodeType": "YulLiteral", - "src": "185:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "176:5:62", - "nodeType": "YulTypedName", - "src": "176:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "195:32:62", - "nodeType": "YulAssignment", - "src": "195:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "217:9:62", - "nodeType": "YulIdentifier", - "src": "217:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "204:12:62", - "nodeType": "YulIdentifier", - "src": "204:12:62" - }, - "nativeSrc": "204:23:62", - "nodeType": "YulFunctionCall", - "src": "204:23:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "195:5:62", - "nodeType": "YulIdentifier", - "src": "195:5:62" - } - ] - }, - { - "nativeSrc": "236:15:62", - "nodeType": "YulAssignment", - "src": "236:15:62", - "value": { - "name": "value", - "nativeSrc": "246:5:62", - "nodeType": "YulIdentifier", - "src": "246:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "236:6:62", - "nodeType": "YulIdentifier", - "src": "236:6:62" - } - ] - }, - { - "nativeSrc": "260:16:62", - "nodeType": "YulVariableDeclaration", - "src": "260:16:62", - "value": { - "kind": "number", - "nativeSrc": "275:1:62", - "nodeType": "YulLiteral", - "src": "275:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "264:7:62", - "nodeType": "YulTypedName", - "src": "264:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "285:43:62", - "nodeType": "YulAssignment", - "src": "285:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "313:9:62", - "nodeType": "YulIdentifier", - "src": "313:9:62" - }, - { - "kind": "number", - "nativeSrc": "324:2:62", - "nodeType": "YulLiteral", - "src": "324:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "309:3:62", - "nodeType": "YulIdentifier", - "src": "309:3:62" - }, - "nativeSrc": "309:18:62", - "nodeType": "YulFunctionCall", - "src": "309:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "296:12:62", - "nodeType": "YulIdentifier", - "src": "296:12:62" - }, - "nativeSrc": "296:32:62", - "nodeType": "YulFunctionCall", - "src": "296:32:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "285:7:62", - "nodeType": "YulIdentifier", - "src": "285:7:62" - } - ] - }, - { - "nativeSrc": "337:17:62", - "nodeType": "YulAssignment", - "src": "337:17:62", - "value": { - "name": "value_1", - "nativeSrc": "347:7:62", - "nodeType": "YulIdentifier", - "src": "347:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "337:6:62", - "nodeType": "YulIdentifier", - "src": "337:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes32t_uint256", - "nativeSrc": "14:346:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "59:9:62", - "nodeType": "YulTypedName", - "src": "59:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "70:7:62", - "nodeType": "YulTypedName", - "src": "70:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "82:6:62", - "nodeType": "YulTypedName", - "src": "82:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "90:6:62", - "nodeType": "YulTypedName", - "src": "90:6:62", - "type": "" - } - ], - "src": "14:346:62" - }, - { - "body": { - "nativeSrc": "464:93:62", - "nodeType": "YulBlock", - "src": "464:93:62", - "statements": [ - { - "nativeSrc": "474:26:62", - "nodeType": "YulAssignment", - "src": "474:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "486:9:62", - "nodeType": "YulIdentifier", - "src": "486:9:62" - }, - { - "kind": "number", - "nativeSrc": "497:2:62", - "nodeType": "YulLiteral", - "src": "497:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "482:3:62", - "nodeType": "YulIdentifier", - "src": "482:3:62" - }, - "nativeSrc": "482:18:62", - "nodeType": "YulFunctionCall", - "src": "482:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "474:4:62", - "nodeType": "YulIdentifier", - "src": "474:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "516:9:62", - "nodeType": "YulIdentifier", - "src": "516:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "531:6:62", - "nodeType": "YulIdentifier", - "src": "531:6:62" - }, - { - "kind": "number", - "nativeSrc": "539:10:62", - "nodeType": "YulLiteral", - "src": "539:10:62", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "527:3:62", - "nodeType": "YulIdentifier", - "src": "527:3:62" - }, - "nativeSrc": "527:23:62", - "nodeType": "YulFunctionCall", - "src": "527:23:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "509:6:62", - "nodeType": "YulIdentifier", - "src": "509:6:62" - }, - "nativeSrc": "509:42:62", - "nodeType": "YulFunctionCall", - "src": "509:42:62" - }, - "nativeSrc": "509:42:62", - "nodeType": "YulExpressionStatement", - "src": "509:42:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed", - "nativeSrc": "365:192:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "433:9:62", - "nodeType": "YulTypedName", - "src": "433:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "444:6:62", - "nodeType": "YulTypedName", - "src": "444:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "455:4:62", - "nodeType": "YulTypedName", - "src": "455:4:62", - "type": "" - } - ], - "src": "365:192:62" - }, - { - "body": { - "nativeSrc": "632:156:62", - "nodeType": "YulBlock", - "src": "632:156:62", - "statements": [ - { - "body": { - "nativeSrc": "678:16:62", - "nodeType": "YulBlock", - "src": "678:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "687:1:62", - "nodeType": "YulLiteral", - "src": "687:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "690:1:62", - "nodeType": "YulLiteral", - "src": "690:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "680:6:62", - "nodeType": "YulIdentifier", - "src": "680:6:62" - }, - "nativeSrc": "680:12:62", - "nodeType": "YulFunctionCall", - "src": "680:12:62" - }, - "nativeSrc": "680:12:62", - "nodeType": "YulExpressionStatement", - "src": "680:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "653:7:62", - "nodeType": "YulIdentifier", - "src": "653:7:62" - }, - { - "name": "headStart", - "nativeSrc": "662:9:62", - "nodeType": "YulIdentifier", - "src": "662:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "649:3:62", - "nodeType": "YulIdentifier", - "src": "649:3:62" - }, - "nativeSrc": "649:23:62", - "nodeType": "YulFunctionCall", - "src": "649:23:62" - }, - { - "kind": "number", - "nativeSrc": "674:2:62", - "nodeType": "YulLiteral", - "src": "674:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "645:3:62", - "nodeType": "YulIdentifier", - "src": "645:3:62" - }, - "nativeSrc": "645:32:62", - "nodeType": "YulFunctionCall", - "src": "645:32:62" - }, - "nativeSrc": "642:52:62", - "nodeType": "YulIf", - "src": "642:52:62" - }, - { - "nativeSrc": "703:14:62", - "nodeType": "YulVariableDeclaration", - "src": "703:14:62", - "value": { - "kind": "number", - "nativeSrc": "716:1:62", - "nodeType": "YulLiteral", - "src": "716:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "707:5:62", - "nodeType": "YulTypedName", - "src": "707:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "726:32:62", - "nodeType": "YulAssignment", - "src": "726:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "748:9:62", - "nodeType": "YulIdentifier", - "src": "748:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "735:12:62", - "nodeType": "YulIdentifier", - "src": "735:12:62" - }, - "nativeSrc": "735:23:62", - "nodeType": "YulFunctionCall", - "src": "735:23:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "726:5:62", - "nodeType": "YulIdentifier", - "src": "726:5:62" - } - ] - }, - { - "nativeSrc": "767:15:62", - "nodeType": "YulAssignment", - "src": "767:15:62", - "value": { - "name": "value", - "nativeSrc": "777:5:62", - "nodeType": "YulIdentifier", - "src": "777:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "767:6:62", - "nodeType": "YulIdentifier", - "src": "767:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes32", - "nativeSrc": "562:226:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "598:9:62", - "nodeType": "YulTypedName", - "src": "598:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "609:7:62", - "nodeType": "YulTypedName", - "src": "609:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "621:6:62", - "nodeType": "YulTypedName", - "src": "621:6:62", - "type": "" - } - ], - "src": "562:226:62" - }, - { - "body": { - "nativeSrc": "825:95:62", - "nodeType": "YulBlock", - "src": "825:95:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "842:1:62", - "nodeType": "YulLiteral", - "src": "842:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "849:3:62", - "nodeType": "YulLiteral", - "src": "849:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "854:10:62", - "nodeType": "YulLiteral", - "src": "854:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "845:3:62", - "nodeType": "YulIdentifier", - "src": "845:3:62" - }, - "nativeSrc": "845:20:62", - "nodeType": "YulFunctionCall", - "src": "845:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "835:6:62", - "nodeType": "YulIdentifier", - "src": "835:6:62" - }, - "nativeSrc": "835:31:62", - "nodeType": "YulFunctionCall", - "src": "835:31:62" - }, - "nativeSrc": "835:31:62", - "nodeType": "YulExpressionStatement", - "src": "835:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "882:1:62", - "nodeType": "YulLiteral", - "src": "882:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "885:4:62", - "nodeType": "YulLiteral", - "src": "885:4:62", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "875:6:62", - "nodeType": "YulIdentifier", - "src": "875:6:62" - }, - "nativeSrc": "875:15:62", - "nodeType": "YulFunctionCall", - "src": "875:15:62" - }, - "nativeSrc": "875:15:62", - "nodeType": "YulExpressionStatement", - "src": "875:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "906:1:62", - "nodeType": "YulLiteral", - "src": "906:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "909:4:62", - "nodeType": "YulLiteral", - "src": "909:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "899:6:62", - "nodeType": "YulIdentifier", - "src": "899:6:62" - }, - "nativeSrc": "899:15:62", - "nodeType": "YulFunctionCall", - "src": "899:15:62" - }, - "nativeSrc": "899:15:62", - "nodeType": "YulExpressionStatement", - "src": "899:15:62" - } - ] - }, - "name": "panic_error_0x21", - "nativeSrc": "793:127:62", - "nodeType": "YulFunctionDefinition", - "src": "793:127:62" - }, - { - "body": { - "nativeSrc": "980:89:62", - "nodeType": "YulBlock", - "src": "980:89:62", - "statements": [ - { - "body": { - "nativeSrc": "1014:22:62", - "nodeType": "YulBlock", - "src": "1014:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x21", - "nativeSrc": "1016:16:62", - "nodeType": "YulIdentifier", - "src": "1016:16:62" - }, - "nativeSrc": "1016:18:62", - "nodeType": "YulFunctionCall", - "src": "1016:18:62" - }, - "nativeSrc": "1016:18:62", - "nodeType": "YulExpressionStatement", - "src": "1016:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "1003:5:62", - "nodeType": "YulIdentifier", - "src": "1003:5:62" - }, - { - "kind": "number", - "nativeSrc": "1010:1:62", - "nodeType": "YulLiteral", - "src": "1010:1:62", - "type": "", - "value": "6" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "1000:2:62", - "nodeType": "YulIdentifier", - "src": "1000:2:62" - }, - "nativeSrc": "1000:12:62", - "nodeType": "YulFunctionCall", - "src": "1000:12:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "993:6:62", - "nodeType": "YulIdentifier", - "src": "993:6:62" - }, - "nativeSrc": "993:20:62", - "nodeType": "YulFunctionCall", - "src": "993:20:62" - }, - "nativeSrc": "990:46:62", - "nodeType": "YulIf", - "src": "990:46:62" - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "1052:3:62", - "nodeType": "YulIdentifier", - "src": "1052:3:62" - }, - { - "name": "value", - "nativeSrc": "1057:5:62", - "nodeType": "YulIdentifier", - "src": "1057:5:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1045:6:62", - "nodeType": "YulIdentifier", - "src": "1045:6:62" - }, - "nativeSrc": "1045:18:62", - "nodeType": "YulFunctionCall", - "src": "1045:18:62" - }, - "nativeSrc": "1045:18:62", - "nodeType": "YulExpressionStatement", - "src": "1045:18:62" - } - ] - }, - "name": "abi_encode_enum_DisputeStatus", - "nativeSrc": "925:144:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "964:5:62", - "nodeType": "YulTypedName", - "src": "964:5:62", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "971:3:62", - "nodeType": "YulTypedName", - "src": "971:3:62", - "type": "" - } - ], - "src": "925:144:62" - }, - { - "body": { - "nativeSrc": "1403:513:62", - "nodeType": "YulBlock", - "src": "1403:513:62", - "statements": [ - { - "nativeSrc": "1413:27:62", - "nodeType": "YulAssignment", - "src": "1413:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1425:9:62", - "nodeType": "YulIdentifier", - "src": "1425:9:62" - }, - { - "kind": "number", - "nativeSrc": "1436:3:62", - "nodeType": "YulLiteral", - "src": "1436:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1421:3:62", - "nodeType": "YulIdentifier", - "src": "1421:3:62" - }, - "nativeSrc": "1421:19:62", - "nodeType": "YulFunctionCall", - "src": "1421:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "1413:4:62", - "nodeType": "YulIdentifier", - "src": "1413:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1456:9:62", - "nodeType": "YulIdentifier", - "src": "1456:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "1471:6:62", - "nodeType": "YulIdentifier", - "src": "1471:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1487:3:62", - "nodeType": "YulLiteral", - "src": "1487:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1492:1:62", - "nodeType": "YulLiteral", - "src": "1492:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1483:3:62", - "nodeType": "YulIdentifier", - "src": "1483:3:62" - }, - "nativeSrc": "1483:11:62", - "nodeType": "YulFunctionCall", - "src": "1483:11:62" - }, - { - "kind": "number", - "nativeSrc": "1496:1:62", - "nodeType": "YulLiteral", - "src": "1496:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1479:3:62", - "nodeType": "YulIdentifier", - "src": "1479:3:62" - }, - "nativeSrc": "1479:19:62", - "nodeType": "YulFunctionCall", - "src": "1479:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1467:3:62", - "nodeType": "YulIdentifier", - "src": "1467:3:62" - }, - "nativeSrc": "1467:32:62", - "nodeType": "YulFunctionCall", - "src": "1467:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1449:6:62", - "nodeType": "YulIdentifier", - "src": "1449:6:62" - }, - "nativeSrc": "1449:51:62", - "nodeType": "YulFunctionCall", - "src": "1449:51:62" - }, - "nativeSrc": "1449:51:62", - "nodeType": "YulExpressionStatement", - "src": "1449:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1520:9:62", - "nodeType": "YulIdentifier", - "src": "1520:9:62" - }, - { - "kind": "number", - "nativeSrc": "1531:2:62", - "nodeType": "YulLiteral", - "src": "1531:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1516:3:62", - "nodeType": "YulIdentifier", - "src": "1516:3:62" - }, - "nativeSrc": "1516:18:62", - "nodeType": "YulFunctionCall", - "src": "1516:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "1540:6:62", - "nodeType": "YulIdentifier", - "src": "1540:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1556:3:62", - "nodeType": "YulLiteral", - "src": "1556:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1561:1:62", - "nodeType": "YulLiteral", - "src": "1561:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1552:3:62", - "nodeType": "YulIdentifier", - "src": "1552:3:62" - }, - "nativeSrc": "1552:11:62", - "nodeType": "YulFunctionCall", - "src": "1552:11:62" - }, - { - "kind": "number", - "nativeSrc": "1565:1:62", - "nodeType": "YulLiteral", - "src": "1565:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1548:3:62", - "nodeType": "YulIdentifier", - "src": "1548:3:62" - }, - "nativeSrc": "1548:19:62", - "nodeType": "YulFunctionCall", - "src": "1548:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1536:3:62", - "nodeType": "YulIdentifier", - "src": "1536:3:62" - }, - "nativeSrc": "1536:32:62", - "nodeType": "YulFunctionCall", - "src": "1536:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1509:6:62", - "nodeType": "YulIdentifier", - "src": "1509:6:62" - }, - "nativeSrc": "1509:60:62", - "nodeType": "YulFunctionCall", - "src": "1509:60:62" - }, - "nativeSrc": "1509:60:62", - "nodeType": "YulExpressionStatement", - "src": "1509:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1589:9:62", - "nodeType": "YulIdentifier", - "src": "1589:9:62" - }, - { - "kind": "number", - "nativeSrc": "1600:2:62", - "nodeType": "YulLiteral", - "src": "1600:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1585:3:62", - "nodeType": "YulIdentifier", - "src": "1585:3:62" - }, - "nativeSrc": "1585:18:62", - "nodeType": "YulFunctionCall", - "src": "1585:18:62" - }, - { - "name": "value2", - "nativeSrc": "1605:6:62", - "nodeType": "YulIdentifier", - "src": "1605:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1578:6:62", - "nodeType": "YulIdentifier", - "src": "1578:6:62" - }, - "nativeSrc": "1578:34:62", - "nodeType": "YulFunctionCall", - "src": "1578:34:62" - }, - "nativeSrc": "1578:34:62", - "nodeType": "YulExpressionStatement", - "src": "1578:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1632:9:62", - "nodeType": "YulIdentifier", - "src": "1632:9:62" - }, - { - "kind": "number", - "nativeSrc": "1643:2:62", - "nodeType": "YulLiteral", - "src": "1643:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1628:3:62", - "nodeType": "YulIdentifier", - "src": "1628:3:62" - }, - "nativeSrc": "1628:18:62", - "nodeType": "YulFunctionCall", - "src": "1628:18:62" - }, - { - "name": "value3", - "nativeSrc": "1648:6:62", - "nodeType": "YulIdentifier", - "src": "1648:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1621:6:62", - "nodeType": "YulIdentifier", - "src": "1621:6:62" - }, - "nativeSrc": "1621:34:62", - "nodeType": "YulFunctionCall", - "src": "1621:34:62" - }, - "nativeSrc": "1621:34:62", - "nodeType": "YulExpressionStatement", - "src": "1621:34:62" - }, - { - "body": { - "nativeSrc": "1689:22:62", - "nodeType": "YulBlock", - "src": "1689:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x21", - "nativeSrc": "1691:16:62", - "nodeType": "YulIdentifier", - "src": "1691:16:62" - }, - "nativeSrc": "1691:18:62", - "nodeType": "YulFunctionCall", - "src": "1691:18:62" - }, - "nativeSrc": "1691:18:62", - "nodeType": "YulExpressionStatement", - "src": "1691:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value4", - "nativeSrc": "1677:6:62", - "nodeType": "YulIdentifier", - "src": "1677:6:62" - }, - { - "kind": "number", - "nativeSrc": "1685:1:62", - "nodeType": "YulLiteral", - "src": "1685:1:62", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "1674:2:62", - "nodeType": "YulIdentifier", - "src": "1674:2:62" - }, - "nativeSrc": "1674:13:62", - "nodeType": "YulFunctionCall", - "src": "1674:13:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "1667:6:62", - "nodeType": "YulIdentifier", - "src": "1667:6:62" - }, - "nativeSrc": "1667:21:62", - "nodeType": "YulFunctionCall", - "src": "1667:21:62" - }, - "nativeSrc": "1664:47:62", - "nodeType": "YulIf", - "src": "1664:47:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1731:9:62", - "nodeType": "YulIdentifier", - "src": "1731:9:62" - }, - { - "kind": "number", - "nativeSrc": "1742:3:62", - "nodeType": "YulLiteral", - "src": "1742:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1727:3:62", - "nodeType": "YulIdentifier", - "src": "1727:3:62" - }, - "nativeSrc": "1727:19:62", - "nodeType": "YulFunctionCall", - "src": "1727:19:62" - }, - { - "name": "value4", - "nativeSrc": "1748:6:62", - "nodeType": "YulIdentifier", - "src": "1748:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1720:6:62", - "nodeType": "YulIdentifier", - "src": "1720:6:62" - }, - "nativeSrc": "1720:35:62", - "nodeType": "YulFunctionCall", - "src": "1720:35:62" - }, - "nativeSrc": "1720:35:62", - "nodeType": "YulExpressionStatement", - "src": "1720:35:62" - }, - { - "expression": { - "arguments": [ - { - "name": "value5", - "nativeSrc": "1794:6:62", - "nodeType": "YulIdentifier", - "src": "1794:6:62" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1806:9:62", - "nodeType": "YulIdentifier", - "src": "1806:9:62" - }, - { - "kind": "number", - "nativeSrc": "1817:3:62", - "nodeType": "YulLiteral", - "src": "1817:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1802:3:62", - "nodeType": "YulIdentifier", - "src": "1802:3:62" - }, - "nativeSrc": "1802:19:62", - "nodeType": "YulFunctionCall", - "src": "1802:19:62" - } - ], - "functionName": { - "name": "abi_encode_enum_DisputeStatus", - "nativeSrc": "1764:29:62", - "nodeType": "YulIdentifier", - "src": "1764:29:62" - }, - "nativeSrc": "1764:58:62", - "nodeType": "YulFunctionCall", - "src": "1764:58:62" - }, - "nativeSrc": "1764:58:62", - "nodeType": "YulExpressionStatement", - "src": "1764:58:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1842:9:62", - "nodeType": "YulIdentifier", - "src": "1842:9:62" - }, - { - "kind": "number", - "nativeSrc": "1853:3:62", - "nodeType": "YulLiteral", - "src": "1853:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1838:3:62", - "nodeType": "YulIdentifier", - "src": "1838:3:62" - }, - "nativeSrc": "1838:19:62", - "nodeType": "YulFunctionCall", - "src": "1838:19:62" - }, - { - "name": "value6", - "nativeSrc": "1859:6:62", - "nodeType": "YulIdentifier", - "src": "1859:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1831:6:62", - "nodeType": "YulIdentifier", - "src": "1831:6:62" - }, - "nativeSrc": "1831:35:62", - "nodeType": "YulFunctionCall", - "src": "1831:35:62" - }, - "nativeSrc": "1831:35:62", - "nodeType": "YulExpressionStatement", - "src": "1831:35:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1886:9:62", - "nodeType": "YulIdentifier", - "src": "1886:9:62" - }, - { - "kind": "number", - "nativeSrc": "1897:3:62", - "nodeType": "YulLiteral", - "src": "1897:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1882:3:62", - "nodeType": "YulIdentifier", - "src": "1882:3:62" - }, - "nativeSrc": "1882:19:62", - "nodeType": "YulFunctionCall", - "src": "1882:19:62" - }, - { - "name": "value7", - "nativeSrc": "1903:6:62", - "nodeType": "YulIdentifier", - "src": "1903:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1875:6:62", - "nodeType": "YulIdentifier", - "src": "1875:6:62" - }, - "nativeSrc": "1875:35:62", - "nodeType": "YulFunctionCall", - "src": "1875:35:62" - }, - "nativeSrc": "1875:35:62", - "nodeType": "YulExpressionStatement", - "src": "1875:35:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes32_t_enum$_DisputeType_$10710_t_enum$_DisputeStatus_$10718_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_bytes32_t_uint8_t_uint8_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "1074:842:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1316:9:62", - "nodeType": "YulTypedName", - "src": "1316:9:62", - "type": "" - }, - { - "name": "value7", - "nativeSrc": "1327:6:62", - "nodeType": "YulTypedName", - "src": "1327:6:62", - "type": "" - }, - { - "name": "value6", - "nativeSrc": "1335:6:62", - "nodeType": "YulTypedName", - "src": "1335:6:62", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "1343:6:62", - "nodeType": "YulTypedName", - "src": "1343:6:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "1351:6:62", - "nodeType": "YulTypedName", - "src": "1351:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "1359:6:62", - "nodeType": "YulTypedName", - "src": "1359:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "1367:6:62", - "nodeType": "YulTypedName", - "src": "1367:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "1375:6:62", - "nodeType": "YulTypedName", - "src": "1375:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1383:6:62", - "nodeType": "YulTypedName", - "src": "1383:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "1394:4:62", - "nodeType": "YulTypedName", - "src": "1394:4:62", - "type": "" - } - ], - "src": "1074:842:62" - }, - { - "body": { - "nativeSrc": "1991:156:62", - "nodeType": "YulBlock", - "src": "1991:156:62", - "statements": [ - { - "body": { - "nativeSrc": "2037:16:62", - "nodeType": "YulBlock", - "src": "2037:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2046:1:62", - "nodeType": "YulLiteral", - "src": "2046:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "2049:1:62", - "nodeType": "YulLiteral", - "src": "2049:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "2039:6:62", - "nodeType": "YulIdentifier", - "src": "2039:6:62" - }, - "nativeSrc": "2039:12:62", - "nodeType": "YulFunctionCall", - "src": "2039:12:62" - }, - "nativeSrc": "2039:12:62", - "nodeType": "YulExpressionStatement", - "src": "2039:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "2012:7:62", - "nodeType": "YulIdentifier", - "src": "2012:7:62" - }, - { - "name": "headStart", - "nativeSrc": "2021:9:62", - "nodeType": "YulIdentifier", - "src": "2021:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2008:3:62", - "nodeType": "YulIdentifier", - "src": "2008:3:62" - }, - "nativeSrc": "2008:23:62", - "nodeType": "YulFunctionCall", - "src": "2008:23:62" - }, - { - "kind": "number", - "nativeSrc": "2033:2:62", - "nodeType": "YulLiteral", - "src": "2033:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "2004:3:62", - "nodeType": "YulIdentifier", - "src": "2004:3:62" - }, - "nativeSrc": "2004:32:62", - "nodeType": "YulFunctionCall", - "src": "2004:32:62" - }, - "nativeSrc": "2001:52:62", - "nodeType": "YulIf", - "src": "2001:52:62" - }, - { - "nativeSrc": "2062:14:62", - "nodeType": "YulVariableDeclaration", - "src": "2062:14:62", - "value": { - "kind": "number", - "nativeSrc": "2075:1:62", - "nodeType": "YulLiteral", - "src": "2075:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "2066:5:62", - "nodeType": "YulTypedName", - "src": "2066:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "2085:32:62", - "nodeType": "YulAssignment", - "src": "2085:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2107:9:62", - "nodeType": "YulIdentifier", - "src": "2107:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "2094:12:62", - "nodeType": "YulIdentifier", - "src": "2094:12:62" - }, - "nativeSrc": "2094:23:62", - "nodeType": "YulFunctionCall", - "src": "2094:23:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "2085:5:62", - "nodeType": "YulIdentifier", - "src": "2085:5:62" - } - ] - }, - { - "nativeSrc": "2126:15:62", - "nodeType": "YulAssignment", - "src": "2126:15:62", - "value": { - "name": "value", - "nativeSrc": "2136:5:62", - "nodeType": "YulIdentifier", - "src": "2136:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "2126:6:62", - "nodeType": "YulIdentifier", - "src": "2126:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nativeSrc": "1921:226:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1957:9:62", - "nodeType": "YulTypedName", - "src": "1957:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "1968:7:62", - "nodeType": "YulTypedName", - "src": "1968:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "1980:6:62", - "nodeType": "YulTypedName", - "src": "1980:6:62", - "type": "" - } - ], - "src": "1921:226:62" - }, - { - "body": { - "nativeSrc": "2279:102:62", - "nodeType": "YulBlock", - "src": "2279:102:62", - "statements": [ - { - "nativeSrc": "2289:26:62", - "nodeType": "YulAssignment", - "src": "2289:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2301:9:62", - "nodeType": "YulIdentifier", - "src": "2301:9:62" - }, - { - "kind": "number", - "nativeSrc": "2312:2:62", - "nodeType": "YulLiteral", - "src": "2312:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2297:3:62", - "nodeType": "YulIdentifier", - "src": "2297:3:62" - }, - "nativeSrc": "2297:18:62", - "nodeType": "YulFunctionCall", - "src": "2297:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "2289:4:62", - "nodeType": "YulIdentifier", - "src": "2289:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2331:9:62", - "nodeType": "YulIdentifier", - "src": "2331:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "2346:6:62", - "nodeType": "YulIdentifier", - "src": "2346:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2362:3:62", - "nodeType": "YulLiteral", - "src": "2362:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "2367:1:62", - "nodeType": "YulLiteral", - "src": "2367:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2358:3:62", - "nodeType": "YulIdentifier", - "src": "2358:3:62" - }, - "nativeSrc": "2358:11:62", - "nodeType": "YulFunctionCall", - "src": "2358:11:62" - }, - { - "kind": "number", - "nativeSrc": "2371:1:62", - "nodeType": "YulLiteral", - "src": "2371:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2354:3:62", - "nodeType": "YulIdentifier", - "src": "2354:3:62" - }, - "nativeSrc": "2354:19:62", - "nodeType": "YulFunctionCall", - "src": "2354:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2342:3:62", - "nodeType": "YulIdentifier", - "src": "2342:3:62" - }, - "nativeSrc": "2342:32:62", - "nodeType": "YulFunctionCall", - "src": "2342:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2324:6:62", - "nodeType": "YulIdentifier", - "src": "2324:6:62" - }, - "nativeSrc": "2324:51:62", - "nodeType": "YulFunctionCall", - "src": "2324:51:62" - }, - "nativeSrc": "2324:51:62", - "nodeType": "YulExpressionStatement", - "src": "2324:51:62" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_ISubgraphService_$11280__to_t_address__fromStack_reversed", - "nativeSrc": "2152:229:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2248:9:62", - "nodeType": "YulTypedName", - "src": "2248:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "2259:6:62", - "nodeType": "YulTypedName", - "src": "2259:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2270:4:62", - "nodeType": "YulTypedName", - "src": "2270:4:62", - "type": "" - } - ], - "src": "2152:229:62" - }, - { - "body": { - "nativeSrc": "2487:76:62", - "nodeType": "YulBlock", - "src": "2487:76:62", - "statements": [ - { - "nativeSrc": "2497:26:62", - "nodeType": "YulAssignment", - "src": "2497:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2509:9:62", - "nodeType": "YulIdentifier", - "src": "2509:9:62" - }, - { - "kind": "number", - "nativeSrc": "2520:2:62", - "nodeType": "YulLiteral", - "src": "2520:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2505:3:62", - "nodeType": "YulIdentifier", - "src": "2505:3:62" - }, - "nativeSrc": "2505:18:62", - "nodeType": "YulFunctionCall", - "src": "2505:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "2497:4:62", - "nodeType": "YulIdentifier", - "src": "2497:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2539:9:62", - "nodeType": "YulIdentifier", - "src": "2539:9:62" - }, - { - "name": "value0", - "nativeSrc": "2550:6:62", - "nodeType": "YulIdentifier", - "src": "2550:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2532:6:62", - "nodeType": "YulIdentifier", - "src": "2532:6:62" - }, - "nativeSrc": "2532:25:62", - "nodeType": "YulFunctionCall", - "src": "2532:25:62" - }, - "nativeSrc": "2532:25:62", - "nodeType": "YulExpressionStatement", - "src": "2532:25:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nativeSrc": "2386:177:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2456:9:62", - "nodeType": "YulTypedName", - "src": "2456:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "2467:6:62", - "nodeType": "YulTypedName", - "src": "2467:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2478:4:62", - "nodeType": "YulTypedName", - "src": "2478:4:62", - "type": "" - } - ], - "src": "2386:177:62" - }, - { - "body": { - "nativeSrc": "2613:86:62", - "nodeType": "YulBlock", - "src": "2613:86:62", - "statements": [ - { - "body": { - "nativeSrc": "2677:16:62", - "nodeType": "YulBlock", - "src": "2677:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2686:1:62", - "nodeType": "YulLiteral", - "src": "2686:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "2689:1:62", - "nodeType": "YulLiteral", - "src": "2689:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "2679:6:62", - "nodeType": "YulIdentifier", - "src": "2679:6:62" - }, - "nativeSrc": "2679:12:62", - "nodeType": "YulFunctionCall", - "src": "2679:12:62" - }, - "nativeSrc": "2679:12:62", - "nodeType": "YulExpressionStatement", - "src": "2679:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "2636:5:62", - "nodeType": "YulIdentifier", - "src": "2636:5:62" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "2647:5:62", - "nodeType": "YulIdentifier", - "src": "2647:5:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2662:3:62", - "nodeType": "YulLiteral", - "src": "2662:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "2667:1:62", - "nodeType": "YulLiteral", - "src": "2667:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2658:3:62", - "nodeType": "YulIdentifier", - "src": "2658:3:62" - }, - "nativeSrc": "2658:11:62", - "nodeType": "YulFunctionCall", - "src": "2658:11:62" - }, - { - "kind": "number", - "nativeSrc": "2671:1:62", - "nodeType": "YulLiteral", - "src": "2671:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2654:3:62", - "nodeType": "YulIdentifier", - "src": "2654:3:62" - }, - "nativeSrc": "2654:19:62", - "nodeType": "YulFunctionCall", - "src": "2654:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2643:3:62", - "nodeType": "YulIdentifier", - "src": "2643:3:62" - }, - "nativeSrc": "2643:31:62", - "nodeType": "YulFunctionCall", - "src": "2643:31:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "2633:2:62", - "nodeType": "YulIdentifier", - "src": "2633:2:62" - }, - "nativeSrc": "2633:42:62", - "nodeType": "YulFunctionCall", - "src": "2633:42:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "2626:6:62", - "nodeType": "YulIdentifier", - "src": "2626:6:62" - }, - "nativeSrc": "2626:50:62", - "nodeType": "YulFunctionCall", - "src": "2626:50:62" - }, - "nativeSrc": "2623:70:62", - "nodeType": "YulIf", - "src": "2623:70:62" - } - ] - }, - "name": "validator_revert_address", - "nativeSrc": "2568:131:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "2602:5:62", - "nodeType": "YulTypedName", - "src": "2602:5:62", - "type": "" - } - ], - "src": "2568:131:62" - }, - { - "body": { - "nativeSrc": "2791:280:62", - "nodeType": "YulBlock", - "src": "2791:280:62", - "statements": [ - { - "body": { - "nativeSrc": "2837:16:62", - "nodeType": "YulBlock", - "src": "2837:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2846:1:62", - "nodeType": "YulLiteral", - "src": "2846:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "2849:1:62", - "nodeType": "YulLiteral", - "src": "2849:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "2839:6:62", - "nodeType": "YulIdentifier", - "src": "2839:6:62" - }, - "nativeSrc": "2839:12:62", - "nodeType": "YulFunctionCall", - "src": "2839:12:62" - }, - "nativeSrc": "2839:12:62", - "nodeType": "YulExpressionStatement", - "src": "2839:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "2812:7:62", - "nodeType": "YulIdentifier", - "src": "2812:7:62" - }, - { - "name": "headStart", - "nativeSrc": "2821:9:62", - "nodeType": "YulIdentifier", - "src": "2821:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2808:3:62", - "nodeType": "YulIdentifier", - "src": "2808:3:62" - }, - "nativeSrc": "2808:23:62", - "nodeType": "YulFunctionCall", - "src": "2808:23:62" - }, - { - "kind": "number", - "nativeSrc": "2833:2:62", - "nodeType": "YulLiteral", - "src": "2833:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "2804:3:62", - "nodeType": "YulIdentifier", - "src": "2804:3:62" - }, - "nativeSrc": "2804:32:62", - "nodeType": "YulFunctionCall", - "src": "2804:32:62" - }, - "nativeSrc": "2801:52:62", - "nodeType": "YulIf", - "src": "2801:52:62" - }, - { - "nativeSrc": "2862:36:62", - "nodeType": "YulVariableDeclaration", - "src": "2862:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2888:9:62", - "nodeType": "YulIdentifier", - "src": "2888:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "2875:12:62", - "nodeType": "YulIdentifier", - "src": "2875:12:62" - }, - "nativeSrc": "2875:23:62", - "nodeType": "YulFunctionCall", - "src": "2875:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "2866:5:62", - "nodeType": "YulTypedName", - "src": "2866:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "2932:5:62", - "nodeType": "YulIdentifier", - "src": "2932:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "2907:24:62", - "nodeType": "YulIdentifier", - "src": "2907:24:62" - }, - "nativeSrc": "2907:31:62", - "nodeType": "YulFunctionCall", - "src": "2907:31:62" - }, - "nativeSrc": "2907:31:62", - "nodeType": "YulExpressionStatement", - "src": "2907:31:62" - }, - { - "nativeSrc": "2947:15:62", - "nodeType": "YulAssignment", - "src": "2947:15:62", - "value": { - "name": "value", - "nativeSrc": "2957:5:62", - "nodeType": "YulIdentifier", - "src": "2957:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "2947:6:62", - "nodeType": "YulIdentifier", - "src": "2947:6:62" - } - ] - }, - { - "nativeSrc": "2971:16:62", - "nodeType": "YulVariableDeclaration", - "src": "2971:16:62", - "value": { - "kind": "number", - "nativeSrc": "2986:1:62", - "nodeType": "YulLiteral", - "src": "2986:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "2975:7:62", - "nodeType": "YulTypedName", - "src": "2975:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "2996:43:62", - "nodeType": "YulAssignment", - "src": "2996:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3024:9:62", - "nodeType": "YulIdentifier", - "src": "3024:9:62" - }, - { - "kind": "number", - "nativeSrc": "3035:2:62", - "nodeType": "YulLiteral", - "src": "3035:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3020:3:62", - "nodeType": "YulIdentifier", - "src": "3020:3:62" - }, - "nativeSrc": "3020:18:62", - "nodeType": "YulFunctionCall", - "src": "3020:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "3007:12:62", - "nodeType": "YulIdentifier", - "src": "3007:12:62" - }, - "nativeSrc": "3007:32:62", - "nodeType": "YulFunctionCall", - "src": "3007:32:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "2996:7:62", - "nodeType": "YulIdentifier", - "src": "2996:7:62" - } - ] - }, - { - "nativeSrc": "3048:17:62", - "nodeType": "YulAssignment", - "src": "3048:17:62", - "value": { - "name": "value_1", - "nativeSrc": "3058:7:62", - "nodeType": "YulIdentifier", - "src": "3058:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "3048:6:62", - "nodeType": "YulIdentifier", - "src": "3048:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes32", - "nativeSrc": "2704:367:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2749:9:62", - "nodeType": "YulTypedName", - "src": "2749:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "2760:7:62", - "nodeType": "YulTypedName", - "src": "2760:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "2772:6:62", - "nodeType": "YulTypedName", - "src": "2772:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "2780:6:62", - "nodeType": "YulTypedName", - "src": "2780:6:62", - "type": "" - } - ], - "src": "2704:367:62" - }, - { - "body": { - "nativeSrc": "3177:76:62", - "nodeType": "YulBlock", - "src": "3177:76:62", - "statements": [ - { - "nativeSrc": "3187:26:62", - "nodeType": "YulAssignment", - "src": "3187:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3199:9:62", - "nodeType": "YulIdentifier", - "src": "3199:9:62" - }, - { - "kind": "number", - "nativeSrc": "3210:2:62", - "nodeType": "YulLiteral", - "src": "3210:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3195:3:62", - "nodeType": "YulIdentifier", - "src": "3195:3:62" - }, - "nativeSrc": "3195:18:62", - "nodeType": "YulFunctionCall", - "src": "3195:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "3187:4:62", - "nodeType": "YulIdentifier", - "src": "3187:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3229:9:62", - "nodeType": "YulIdentifier", - "src": "3229:9:62" - }, - { - "name": "value0", - "nativeSrc": "3240:6:62", - "nodeType": "YulIdentifier", - "src": "3240:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3222:6:62", - "nodeType": "YulIdentifier", - "src": "3222:6:62" - }, - "nativeSrc": "3222:25:62", - "nodeType": "YulFunctionCall", - "src": "3222:25:62" - }, - "nativeSrc": "3222:25:62", - "nodeType": "YulExpressionStatement", - "src": "3222:25:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", - "nativeSrc": "3076:177:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "3146:9:62", - "nodeType": "YulTypedName", - "src": "3146:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "3157:6:62", - "nodeType": "YulTypedName", - "src": "3157:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "3168:4:62", - "nodeType": "YulTypedName", - "src": "3168:4:62", - "type": "" - } - ], - "src": "3076:177:62" - }, - { - "body": { - "nativeSrc": "3357:101:62", - "nodeType": "YulBlock", - "src": "3357:101:62", - "statements": [ - { - "nativeSrc": "3367:26:62", - "nodeType": "YulAssignment", - "src": "3367:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3379:9:62", - "nodeType": "YulIdentifier", - "src": "3379:9:62" - }, - { - "kind": "number", - "nativeSrc": "3390:2:62", - "nodeType": "YulLiteral", - "src": "3390:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3375:3:62", - "nodeType": "YulIdentifier", - "src": "3375:3:62" - }, - "nativeSrc": "3375:18:62", - "nodeType": "YulFunctionCall", - "src": "3375:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "3367:4:62", - "nodeType": "YulIdentifier", - "src": "3367:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3409:9:62", - "nodeType": "YulIdentifier", - "src": "3409:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "3424:6:62", - "nodeType": "YulIdentifier", - "src": "3424:6:62" - }, - { - "kind": "number", - "nativeSrc": "3432:18:62", - "nodeType": "YulLiteral", - "src": "3432:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3420:3:62", - "nodeType": "YulIdentifier", - "src": "3420:3:62" - }, - "nativeSrc": "3420:31:62", - "nodeType": "YulFunctionCall", - "src": "3420:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3402:6:62", - "nodeType": "YulIdentifier", - "src": "3402:6:62" - }, - "nativeSrc": "3402:50:62", - "nodeType": "YulFunctionCall", - "src": "3402:50:62" - }, - "nativeSrc": "3402:50:62", - "nodeType": "YulExpressionStatement", - "src": "3402:50:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", - "nativeSrc": "3258:200:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "3326:9:62", - "nodeType": "YulTypedName", - "src": "3326:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "3337:6:62", - "nodeType": "YulTypedName", - "src": "3337:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "3348:4:62", - "nodeType": "YulTypedName", - "src": "3348:4:62", - "type": "" - } - ], - "src": "3258:200:62" - }, - { - "body": { - "nativeSrc": "3507:85:62", - "nodeType": "YulBlock", - "src": "3507:85:62", - "statements": [ - { - "body": { - "nativeSrc": "3570:16:62", - "nodeType": "YulBlock", - "src": "3570:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3579:1:62", - "nodeType": "YulLiteral", - "src": "3579:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3582:1:62", - "nodeType": "YulLiteral", - "src": "3582:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3572:6:62", - "nodeType": "YulIdentifier", - "src": "3572:6:62" - }, - "nativeSrc": "3572:12:62", - "nodeType": "YulFunctionCall", - "src": "3572:12:62" - }, - "nativeSrc": "3572:12:62", - "nodeType": "YulExpressionStatement", - "src": "3572:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "3530:5:62", - "nodeType": "YulIdentifier", - "src": "3530:5:62" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "3541:5:62", - "nodeType": "YulIdentifier", - "src": "3541:5:62" - }, - { - "kind": "number", - "nativeSrc": "3548:18:62", - "nodeType": "YulLiteral", - "src": "3548:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3537:3:62", - "nodeType": "YulIdentifier", - "src": "3537:3:62" - }, - "nativeSrc": "3537:30:62", - "nodeType": "YulFunctionCall", - "src": "3537:30:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "3527:2:62", - "nodeType": "YulIdentifier", - "src": "3527:2:62" - }, - "nativeSrc": "3527:41:62", - "nodeType": "YulFunctionCall", - "src": "3527:41:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "3520:6:62", - "nodeType": "YulIdentifier", - "src": "3520:6:62" - }, - "nativeSrc": "3520:49:62", - "nodeType": "YulFunctionCall", - "src": "3520:49:62" - }, - "nativeSrc": "3517:69:62", - "nodeType": "YulIf", - "src": "3517:69:62" - } - ] - }, - "name": "validator_revert_uint64", - "nativeSrc": "3463:129:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "3496:5:62", - "nodeType": "YulTypedName", - "src": "3496:5:62", - "type": "" - } - ], - "src": "3463:129:62" - }, - { - "body": { - "nativeSrc": "3641:77:62", - "nodeType": "YulBlock", - "src": "3641:77:62", - "statements": [ - { - "body": { - "nativeSrc": "3696:16:62", - "nodeType": "YulBlock", - "src": "3696:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3705:1:62", - "nodeType": "YulLiteral", - "src": "3705:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3708:1:62", - "nodeType": "YulLiteral", - "src": "3708:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3698:6:62", - "nodeType": "YulIdentifier", - "src": "3698:6:62" - }, - "nativeSrc": "3698:12:62", - "nodeType": "YulFunctionCall", - "src": "3698:12:62" - }, - "nativeSrc": "3698:12:62", - "nodeType": "YulExpressionStatement", - "src": "3698:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "3664:5:62", - "nodeType": "YulIdentifier", - "src": "3664:5:62" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "3675:5:62", - "nodeType": "YulIdentifier", - "src": "3675:5:62" - }, - { - "kind": "number", - "nativeSrc": "3682:10:62", - "nodeType": "YulLiteral", - "src": "3682:10:62", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3671:3:62", - "nodeType": "YulIdentifier", - "src": "3671:3:62" - }, - "nativeSrc": "3671:22:62", - "nodeType": "YulFunctionCall", - "src": "3671:22:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "3661:2:62", - "nodeType": "YulIdentifier", - "src": "3661:2:62" - }, - "nativeSrc": "3661:33:62", - "nodeType": "YulFunctionCall", - "src": "3661:33:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "3654:6:62", - "nodeType": "YulIdentifier", - "src": "3654:6:62" - }, - "nativeSrc": "3654:41:62", - "nodeType": "YulFunctionCall", - "src": "3654:41:62" - }, - "nativeSrc": "3651:61:62", - "nodeType": "YulIf", - "src": "3651:61:62" - } - ] - }, - "name": "validator_revert_uint32", - "nativeSrc": "3597:121:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "3630:5:62", - "nodeType": "YulTypedName", - "src": "3630:5:62", - "type": "" - } - ], - "src": "3597:121:62" - }, - { - "body": { - "nativeSrc": "3858:651:62", - "nodeType": "YulBlock", - "src": "3858:651:62", - "statements": [ - { - "body": { - "nativeSrc": "3905:16:62", - "nodeType": "YulBlock", - "src": "3905:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3914:1:62", - "nodeType": "YulLiteral", - "src": "3914:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3917:1:62", - "nodeType": "YulLiteral", - "src": "3917:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3907:6:62", - "nodeType": "YulIdentifier", - "src": "3907:6:62" - }, - "nativeSrc": "3907:12:62", - "nodeType": "YulFunctionCall", - "src": "3907:12:62" - }, - "nativeSrc": "3907:12:62", - "nodeType": "YulExpressionStatement", - "src": "3907:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "3879:7:62", - "nodeType": "YulIdentifier", - "src": "3879:7:62" - }, - { - "name": "headStart", - "nativeSrc": "3888:9:62", - "nodeType": "YulIdentifier", - "src": "3888:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "3875:3:62", - "nodeType": "YulIdentifier", - "src": "3875:3:62" - }, - "nativeSrc": "3875:23:62", - "nodeType": "YulFunctionCall", - "src": "3875:23:62" - }, - { - "kind": "number", - "nativeSrc": "3900:3:62", - "nodeType": "YulLiteral", - "src": "3900:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "3871:3:62", - "nodeType": "YulIdentifier", - "src": "3871:3:62" - }, - "nativeSrc": "3871:33:62", - "nodeType": "YulFunctionCall", - "src": "3871:33:62" - }, - "nativeSrc": "3868:53:62", - "nodeType": "YulIf", - "src": "3868:53:62" - }, - { - "nativeSrc": "3930:36:62", - "nodeType": "YulVariableDeclaration", - "src": "3930:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3956:9:62", - "nodeType": "YulIdentifier", - "src": "3956:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "3943:12:62", - "nodeType": "YulIdentifier", - "src": "3943:12:62" - }, - "nativeSrc": "3943:23:62", - "nodeType": "YulFunctionCall", - "src": "3943:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "3934:5:62", - "nodeType": "YulTypedName", - "src": "3934:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "4000:5:62", - "nodeType": "YulIdentifier", - "src": "4000:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "3975:24:62", - "nodeType": "YulIdentifier", - "src": "3975:24:62" - }, - "nativeSrc": "3975:31:62", - "nodeType": "YulFunctionCall", - "src": "3975:31:62" - }, - "nativeSrc": "3975:31:62", - "nodeType": "YulExpressionStatement", - "src": "3975:31:62" - }, - { - "nativeSrc": "4015:15:62", - "nodeType": "YulAssignment", - "src": "4015:15:62", - "value": { - "name": "value", - "nativeSrc": "4025:5:62", - "nodeType": "YulIdentifier", - "src": "4025:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "4015:6:62", - "nodeType": "YulIdentifier", - "src": "4015:6:62" - } - ] - }, - { - "nativeSrc": "4039:47:62", - "nodeType": "YulVariableDeclaration", - "src": "4039:47:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4071:9:62", - "nodeType": "YulIdentifier", - "src": "4071:9:62" - }, - { - "kind": "number", - "nativeSrc": "4082:2:62", - "nodeType": "YulLiteral", - "src": "4082:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4067:3:62", - "nodeType": "YulIdentifier", - "src": "4067:3:62" - }, - "nativeSrc": "4067:18:62", - "nodeType": "YulFunctionCall", - "src": "4067:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4054:12:62", - "nodeType": "YulIdentifier", - "src": "4054:12:62" - }, - "nativeSrc": "4054:32:62", - "nodeType": "YulFunctionCall", - "src": "4054:32:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "4043:7:62", - "nodeType": "YulTypedName", - "src": "4043:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "4119:7:62", - "nodeType": "YulIdentifier", - "src": "4119:7:62" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "4095:23:62", - "nodeType": "YulIdentifier", - "src": "4095:23:62" - }, - "nativeSrc": "4095:32:62", - "nodeType": "YulFunctionCall", - "src": "4095:32:62" - }, - "nativeSrc": "4095:32:62", - "nodeType": "YulExpressionStatement", - "src": "4095:32:62" - }, - { - "nativeSrc": "4136:17:62", - "nodeType": "YulAssignment", - "src": "4136:17:62", - "value": { - "name": "value_1", - "nativeSrc": "4146:7:62", - "nodeType": "YulIdentifier", - "src": "4146:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "4136:6:62", - "nodeType": "YulIdentifier", - "src": "4136:6:62" - } - ] - }, - { - "nativeSrc": "4162:16:62", - "nodeType": "YulVariableDeclaration", - "src": "4162:16:62", - "value": { - "kind": "number", - "nativeSrc": "4177:1:62", - "nodeType": "YulLiteral", - "src": "4177:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "4166:7:62", - "nodeType": "YulTypedName", - "src": "4166:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "4187:43:62", - "nodeType": "YulAssignment", - "src": "4187:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4215:9:62", - "nodeType": "YulIdentifier", - "src": "4215:9:62" - }, - { - "kind": "number", - "nativeSrc": "4226:2:62", - "nodeType": "YulLiteral", - "src": "4226:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4211:3:62", - "nodeType": "YulIdentifier", - "src": "4211:3:62" - }, - "nativeSrc": "4211:18:62", - "nodeType": "YulFunctionCall", - "src": "4211:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4198:12:62", - "nodeType": "YulIdentifier", - "src": "4198:12:62" - }, - "nativeSrc": "4198:32:62", - "nodeType": "YulFunctionCall", - "src": "4198:32:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "4187:7:62", - "nodeType": "YulIdentifier", - "src": "4187:7:62" - } - ] - }, - { - "nativeSrc": "4239:17:62", - "nodeType": "YulAssignment", - "src": "4239:17:62", - "value": { - "name": "value_2", - "nativeSrc": "4249:7:62", - "nodeType": "YulIdentifier", - "src": "4249:7:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "4239:6:62", - "nodeType": "YulIdentifier", - "src": "4239:6:62" - } - ] - }, - { - "nativeSrc": "4265:47:62", - "nodeType": "YulVariableDeclaration", - "src": "4265:47:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4297:9:62", - "nodeType": "YulIdentifier", - "src": "4297:9:62" - }, - { - "kind": "number", - "nativeSrc": "4308:2:62", - "nodeType": "YulLiteral", - "src": "4308:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4293:3:62", - "nodeType": "YulIdentifier", - "src": "4293:3:62" - }, - "nativeSrc": "4293:18:62", - "nodeType": "YulFunctionCall", - "src": "4293:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4280:12:62", - "nodeType": "YulIdentifier", - "src": "4280:12:62" - }, - "nativeSrc": "4280:32:62", - "nodeType": "YulFunctionCall", - "src": "4280:32:62" - }, - "variables": [ - { - "name": "value_3", - "nativeSrc": "4269:7:62", - "nodeType": "YulTypedName", - "src": "4269:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_3", - "nativeSrc": "4345:7:62", - "nodeType": "YulIdentifier", - "src": "4345:7:62" - } - ], - "functionName": { - "name": "validator_revert_uint32", - "nativeSrc": "4321:23:62", - "nodeType": "YulIdentifier", - "src": "4321:23:62" - }, - "nativeSrc": "4321:32:62", - "nodeType": "YulFunctionCall", - "src": "4321:32:62" - }, - "nativeSrc": "4321:32:62", - "nodeType": "YulExpressionStatement", - "src": "4321:32:62" - }, - { - "nativeSrc": "4362:17:62", - "nodeType": "YulAssignment", - "src": "4362:17:62", - "value": { - "name": "value_3", - "nativeSrc": "4372:7:62", - "nodeType": "YulIdentifier", - "src": "4372:7:62" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "4362:6:62", - "nodeType": "YulIdentifier", - "src": "4362:6:62" - } - ] - }, - { - "nativeSrc": "4388:48:62", - "nodeType": "YulVariableDeclaration", - "src": "4388:48:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4420:9:62", - "nodeType": "YulIdentifier", - "src": "4420:9:62" - }, - { - "kind": "number", - "nativeSrc": "4431:3:62", - "nodeType": "YulLiteral", - "src": "4431:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4416:3:62", - "nodeType": "YulIdentifier", - "src": "4416:3:62" - }, - "nativeSrc": "4416:19:62", - "nodeType": "YulFunctionCall", - "src": "4416:19:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4403:12:62", - "nodeType": "YulIdentifier", - "src": "4403:12:62" - }, - "nativeSrc": "4403:33:62", - "nodeType": "YulFunctionCall", - "src": "4403:33:62" - }, - "variables": [ - { - "name": "value_4", - "nativeSrc": "4392:7:62", - "nodeType": "YulTypedName", - "src": "4392:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_4", - "nativeSrc": "4469:7:62", - "nodeType": "YulIdentifier", - "src": "4469:7:62" - } - ], - "functionName": { - "name": "validator_revert_uint32", - "nativeSrc": "4445:23:62", - "nodeType": "YulIdentifier", - "src": "4445:23:62" - }, - "nativeSrc": "4445:32:62", - "nodeType": "YulFunctionCall", - "src": "4445:32:62" - }, - "nativeSrc": "4445:32:62", - "nodeType": "YulExpressionStatement", - "src": "4445:32:62" - }, - { - "nativeSrc": "4486:17:62", - "nodeType": "YulAssignment", - "src": "4486:17:62", - "value": { - "name": "value_4", - "nativeSrc": "4496:7:62", - "nodeType": "YulIdentifier", - "src": "4496:7:62" - }, - "variableNames": [ - { - "name": "value4", - "nativeSrc": "4486:6:62", - "nodeType": "YulIdentifier", - "src": "4486:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint64t_uint256t_uint32t_uint32", - "nativeSrc": "3723:786:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "3792:9:62", - "nodeType": "YulTypedName", - "src": "3792:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "3803:7:62", - "nodeType": "YulTypedName", - "src": "3803:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "3815:6:62", - "nodeType": "YulTypedName", - "src": "3815:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "3823:6:62", - "nodeType": "YulTypedName", - "src": "3823:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "3831:6:62", - "nodeType": "YulTypedName", - "src": "3831:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "3839:6:62", - "nodeType": "YulTypedName", - "src": "3839:6:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "3847:6:62", - "nodeType": "YulTypedName", - "src": "3847:6:62", - "type": "" - } - ], - "src": "3723:786:62" - }, - { - "body": { - "nativeSrc": "4560:304:62", - "nodeType": "YulBlock", - "src": "4560:304:62", - "statements": [ - { - "nativeSrc": "4570:19:62", - "nodeType": "YulAssignment", - "src": "4570:19:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4586:2:62", - "nodeType": "YulLiteral", - "src": "4586:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "4580:5:62", - "nodeType": "YulIdentifier", - "src": "4580:5:62" - }, - "nativeSrc": "4580:9:62", - "nodeType": "YulFunctionCall", - "src": "4580:9:62" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "4570:6:62", - "nodeType": "YulIdentifier", - "src": "4570:6:62" - } - ] - }, - { - "nativeSrc": "4598:35:62", - "nodeType": "YulVariableDeclaration", - "src": "4598:35:62", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "4620:6:62", - "nodeType": "YulIdentifier", - "src": "4620:6:62" - }, - { - "kind": "number", - "nativeSrc": "4628:4:62", - "nodeType": "YulLiteral", - "src": "4628:4:62", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4616:3:62", - "nodeType": "YulIdentifier", - "src": "4616:3:62" - }, - "nativeSrc": "4616:17:62", - "nodeType": "YulFunctionCall", - "src": "4616:17:62" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "4602:10:62", - "nodeType": "YulTypedName", - "src": "4602:10:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "4716:111:62", - "nodeType": "YulBlock", - "src": "4716:111:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4737:1:62", - "nodeType": "YulLiteral", - "src": "4737:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4744:3:62", - "nodeType": "YulLiteral", - "src": "4744:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "4749:10:62", - "nodeType": "YulLiteral", - "src": "4749:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "4740:3:62", - "nodeType": "YulIdentifier", - "src": "4740:3:62" - }, - "nativeSrc": "4740:20:62", - "nodeType": "YulFunctionCall", - "src": "4740:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4730:6:62", - "nodeType": "YulIdentifier", - "src": "4730:6:62" - }, - "nativeSrc": "4730:31:62", - "nodeType": "YulFunctionCall", - "src": "4730:31:62" - }, - "nativeSrc": "4730:31:62", - "nodeType": "YulExpressionStatement", - "src": "4730:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4781:1:62", - "nodeType": "YulLiteral", - "src": "4781:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "4784:4:62", - "nodeType": "YulLiteral", - "src": "4784:4:62", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4774:6:62", - "nodeType": "YulIdentifier", - "src": "4774:6:62" - }, - "nativeSrc": "4774:15:62", - "nodeType": "YulFunctionCall", - "src": "4774:15:62" - }, - "nativeSrc": "4774:15:62", - "nodeType": "YulExpressionStatement", - "src": "4774:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4809:1:62", - "nodeType": "YulLiteral", - "src": "4809:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4812:4:62", - "nodeType": "YulLiteral", - "src": "4812:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4802:6:62", - "nodeType": "YulIdentifier", - "src": "4802:6:62" - }, - "nativeSrc": "4802:15:62", - "nodeType": "YulFunctionCall", - "src": "4802:15:62" - }, - "nativeSrc": "4802:15:62", - "nodeType": "YulExpressionStatement", - "src": "4802:15:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "4651:10:62", - "nodeType": "YulIdentifier", - "src": "4651:10:62" - }, - { - "kind": "number", - "nativeSrc": "4663:18:62", - "nodeType": "YulLiteral", - "src": "4663:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "4648:2:62", - "nodeType": "YulIdentifier", - "src": "4648:2:62" - }, - "nativeSrc": "4648:34:62", - "nodeType": "YulFunctionCall", - "src": "4648:34:62" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "4687:10:62", - "nodeType": "YulIdentifier", - "src": "4687:10:62" - }, - { - "name": "memPtr", - "nativeSrc": "4699:6:62", - "nodeType": "YulIdentifier", - "src": "4699:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "4684:2:62", - "nodeType": "YulIdentifier", - "src": "4684:2:62" - }, - "nativeSrc": "4684:22:62", - "nodeType": "YulFunctionCall", - "src": "4684:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "4645:2:62", - "nodeType": "YulIdentifier", - "src": "4645:2:62" - }, - "nativeSrc": "4645:62:62", - "nodeType": "YulFunctionCall", - "src": "4645:62:62" - }, - "nativeSrc": "4642:185:62", - "nodeType": "YulIf", - "src": "4642:185:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4843:2:62", - "nodeType": "YulLiteral", - "src": "4843:2:62", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "4847:10:62", - "nodeType": "YulIdentifier", - "src": "4847:10:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4836:6:62", - "nodeType": "YulIdentifier", - "src": "4836:6:62" - }, - "nativeSrc": "4836:22:62", - "nodeType": "YulFunctionCall", - "src": "4836:22:62" - }, - "nativeSrc": "4836:22:62", - "nodeType": "YulExpressionStatement", - "src": "4836:22:62" - } - ] - }, - "name": "allocate_memory_2163", - "nativeSrc": "4514:350:62", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "4549:6:62", - "nodeType": "YulTypedName", - "src": "4549:6:62", - "type": "" - } - ], - "src": "4514:350:62" - }, - { - "body": { - "nativeSrc": "4910:303:62", - "nodeType": "YulBlock", - "src": "4910:303:62", - "statements": [ - { - "nativeSrc": "4920:19:62", - "nodeType": "YulAssignment", - "src": "4920:19:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4936:2:62", - "nodeType": "YulLiteral", - "src": "4936:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "4930:5:62", - "nodeType": "YulIdentifier", - "src": "4930:5:62" - }, - "nativeSrc": "4930:9:62", - "nodeType": "YulFunctionCall", - "src": "4930:9:62" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "4920:6:62", - "nodeType": "YulIdentifier", - "src": "4920:6:62" - } - ] - }, - { - "nativeSrc": "4948:34:62", - "nodeType": "YulVariableDeclaration", - "src": "4948:34:62", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "4970:6:62", - "nodeType": "YulIdentifier", - "src": "4970:6:62" - }, - { - "kind": "number", - "nativeSrc": "4978:3:62", - "nodeType": "YulLiteral", - "src": "4978:3:62", - "type": "", - "value": "288" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4966:3:62", - "nodeType": "YulIdentifier", - "src": "4966:3:62" - }, - "nativeSrc": "4966:16:62", - "nodeType": "YulFunctionCall", - "src": "4966:16:62" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "4952:10:62", - "nodeType": "YulTypedName", - "src": "4952:10:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5065:111:62", - "nodeType": "YulBlock", - "src": "5065:111:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5086:1:62", - "nodeType": "YulLiteral", - "src": "5086:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5093:3:62", - "nodeType": "YulLiteral", - "src": "5093:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "5098:10:62", - "nodeType": "YulLiteral", - "src": "5098:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "5089:3:62", - "nodeType": "YulIdentifier", - "src": "5089:3:62" - }, - "nativeSrc": "5089:20:62", - "nodeType": "YulFunctionCall", - "src": "5089:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5079:6:62", - "nodeType": "YulIdentifier", - "src": "5079:6:62" - }, - "nativeSrc": "5079:31:62", - "nodeType": "YulFunctionCall", - "src": "5079:31:62" - }, - "nativeSrc": "5079:31:62", - "nodeType": "YulExpressionStatement", - "src": "5079:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5130:1:62", - "nodeType": "YulLiteral", - "src": "5130:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "5133:4:62", - "nodeType": "YulLiteral", - "src": "5133:4:62", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5123:6:62", - "nodeType": "YulIdentifier", - "src": "5123:6:62" - }, - "nativeSrc": "5123:15:62", - "nodeType": "YulFunctionCall", - "src": "5123:15:62" - }, - "nativeSrc": "5123:15:62", - "nodeType": "YulExpressionStatement", - "src": "5123:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5158:1:62", - "nodeType": "YulLiteral", - "src": "5158:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "5161:4:62", - "nodeType": "YulLiteral", - "src": "5161:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "5151:6:62", - "nodeType": "YulIdentifier", - "src": "5151:6:62" - }, - "nativeSrc": "5151:15:62", - "nodeType": "YulFunctionCall", - "src": "5151:15:62" - }, - "nativeSrc": "5151:15:62", - "nodeType": "YulExpressionStatement", - "src": "5151:15:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "5000:10:62", - "nodeType": "YulIdentifier", - "src": "5000:10:62" - }, - { - "kind": "number", - "nativeSrc": "5012:18:62", - "nodeType": "YulLiteral", - "src": "5012:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "4997:2:62", - "nodeType": "YulIdentifier", - "src": "4997:2:62" - }, - "nativeSrc": "4997:34:62", - "nodeType": "YulFunctionCall", - "src": "4997:34:62" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "5036:10:62", - "nodeType": "YulIdentifier", - "src": "5036:10:62" - }, - { - "name": "memPtr", - "nativeSrc": "5048:6:62", - "nodeType": "YulIdentifier", - "src": "5048:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "5033:2:62", - "nodeType": "YulIdentifier", - "src": "5033:2:62" - }, - "nativeSrc": "5033:22:62", - "nodeType": "YulFunctionCall", - "src": "5033:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "4994:2:62", - "nodeType": "YulIdentifier", - "src": "4994:2:62" - }, - "nativeSrc": "4994:62:62", - "nodeType": "YulFunctionCall", - "src": "4994:62:62" - }, - "nativeSrc": "4991:185:62", - "nodeType": "YulIf", - "src": "4991:185:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5192:2:62", - "nodeType": "YulLiteral", - "src": "5192:2:62", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "5196:10:62", - "nodeType": "YulIdentifier", - "src": "5196:10:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5185:6:62", - "nodeType": "YulIdentifier", - "src": "5185:6:62" - }, - "nativeSrc": "5185:22:62", - "nodeType": "YulFunctionCall", - "src": "5185:22:62" - }, - "nativeSrc": "5185:22:62", - "nodeType": "YulExpressionStatement", - "src": "5185:22:62" - } - ] - }, - "name": "allocate_memory", - "nativeSrc": "4869:344:62", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "4899:6:62", - "nodeType": "YulTypedName", - "src": "4899:6:62", - "type": "" - } - ], - "src": "4869:344:62" - }, - { - "body": { - "nativeSrc": "5264:303:62", - "nodeType": "YulBlock", - "src": "5264:303:62", - "statements": [ - { - "nativeSrc": "5274:19:62", - "nodeType": "YulAssignment", - "src": "5274:19:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5290:2:62", - "nodeType": "YulLiteral", - "src": "5290:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5284:5:62", - "nodeType": "YulIdentifier", - "src": "5284:5:62" - }, - "nativeSrc": "5284:9:62", - "nodeType": "YulFunctionCall", - "src": "5284:9:62" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "5274:6:62", - "nodeType": "YulIdentifier", - "src": "5274:6:62" - } - ] - }, - { - "nativeSrc": "5302:34:62", - "nodeType": "YulVariableDeclaration", - "src": "5302:34:62", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "5324:6:62", - "nodeType": "YulIdentifier", - "src": "5324:6:62" - }, - { - "kind": "number", - "nativeSrc": "5332:3:62", - "nodeType": "YulLiteral", - "src": "5332:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5320:3:62", - "nodeType": "YulIdentifier", - "src": "5320:3:62" - }, - "nativeSrc": "5320:16:62", - "nodeType": "YulFunctionCall", - "src": "5320:16:62" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "5306:10:62", - "nodeType": "YulTypedName", - "src": "5306:10:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5419:111:62", - "nodeType": "YulBlock", - "src": "5419:111:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5440:1:62", - "nodeType": "YulLiteral", - "src": "5440:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5447:3:62", - "nodeType": "YulLiteral", - "src": "5447:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "5452:10:62", - "nodeType": "YulLiteral", - "src": "5452:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "5443:3:62", - "nodeType": "YulIdentifier", - "src": "5443:3:62" - }, - "nativeSrc": "5443:20:62", - "nodeType": "YulFunctionCall", - "src": "5443:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5433:6:62", - "nodeType": "YulIdentifier", - "src": "5433:6:62" - }, - "nativeSrc": "5433:31:62", - "nodeType": "YulFunctionCall", - "src": "5433:31:62" - }, - "nativeSrc": "5433:31:62", - "nodeType": "YulExpressionStatement", - "src": "5433:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5484:1:62", - "nodeType": "YulLiteral", - "src": "5484:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "5487:4:62", - "nodeType": "YulLiteral", - "src": "5487:4:62", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5477:6:62", - "nodeType": "YulIdentifier", - "src": "5477:6:62" - }, - "nativeSrc": "5477:15:62", - "nodeType": "YulFunctionCall", - "src": "5477:15:62" - }, - "nativeSrc": "5477:15:62", - "nodeType": "YulExpressionStatement", - "src": "5477:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5512:1:62", - "nodeType": "YulLiteral", - "src": "5512:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "5515:4:62", - "nodeType": "YulLiteral", - "src": "5515:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "5505:6:62", - "nodeType": "YulIdentifier", - "src": "5505:6:62" - }, - "nativeSrc": "5505:15:62", - "nodeType": "YulFunctionCall", - "src": "5505:15:62" - }, - "nativeSrc": "5505:15:62", - "nodeType": "YulExpressionStatement", - "src": "5505:15:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "5354:10:62", - "nodeType": "YulIdentifier", - "src": "5354:10:62" - }, - { - "kind": "number", - "nativeSrc": "5366:18:62", - "nodeType": "YulLiteral", - "src": "5366:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "5351:2:62", - "nodeType": "YulIdentifier", - "src": "5351:2:62" - }, - "nativeSrc": "5351:34:62", - "nodeType": "YulFunctionCall", - "src": "5351:34:62" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "5390:10:62", - "nodeType": "YulIdentifier", - "src": "5390:10:62" - }, - { - "name": "memPtr", - "nativeSrc": "5402:6:62", - "nodeType": "YulIdentifier", - "src": "5402:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "5387:2:62", - "nodeType": "YulIdentifier", - "src": "5387:2:62" - }, - "nativeSrc": "5387:22:62", - "nodeType": "YulFunctionCall", - "src": "5387:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "5348:2:62", - "nodeType": "YulIdentifier", - "src": "5348:2:62" - }, - "nativeSrc": "5348:62:62", - "nodeType": "YulFunctionCall", - "src": "5348:62:62" - }, - "nativeSrc": "5345:185:62", - "nodeType": "YulIf", - "src": "5345:185:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5546:2:62", - "nodeType": "YulLiteral", - "src": "5546:2:62", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "5550:10:62", - "nodeType": "YulIdentifier", - "src": "5550:10:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5539:6:62", - "nodeType": "YulIdentifier", - "src": "5539:6:62" - }, - "nativeSrc": "5539:22:62", - "nodeType": "YulFunctionCall", - "src": "5539:22:62" - }, - "nativeSrc": "5539:22:62", - "nodeType": "YulExpressionStatement", - "src": "5539:22:62" - } - ] - }, - "name": "allocate_memory_2167", - "nativeSrc": "5218:349:62", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "5253:6:62", - "nodeType": "YulTypedName", - "src": "5253:6:62", - "type": "" - } - ], - "src": "5218:349:62" - }, - { - "body": { - "nativeSrc": "5668:785:62", - "nodeType": "YulBlock", - "src": "5668:785:62", - "statements": [ - { - "nativeSrc": "5678:42:62", - "nodeType": "YulVariableDeclaration", - "src": "5678:42:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "5696:7:62", - "nodeType": "YulIdentifier", - "src": "5696:7:62" - }, - { - "name": "headStart", - "nativeSrc": "5705:9:62", - "nodeType": "YulIdentifier", - "src": "5705:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "5692:3:62", - "nodeType": "YulIdentifier", - "src": "5692:3:62" - }, - "nativeSrc": "5692:23:62", - "nodeType": "YulFunctionCall", - "src": "5692:23:62" - }, - { - "kind": "number", - "nativeSrc": "5717:2:62", - "nodeType": "YulLiteral", - "src": "5717:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "5688:3:62", - "nodeType": "YulIdentifier", - "src": "5688:3:62" - }, - "nativeSrc": "5688:32:62", - "nodeType": "YulFunctionCall", - "src": "5688:32:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "5682:2:62", - "nodeType": "YulTypedName", - "src": "5682:2:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5735:16:62", - "nodeType": "YulBlock", - "src": "5735:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5744:1:62", - "nodeType": "YulLiteral", - "src": "5744:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "5747:1:62", - "nodeType": "YulLiteral", - "src": "5747:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "5737:6:62", - "nodeType": "YulIdentifier", - "src": "5737:6:62" - }, - "nativeSrc": "5737:12:62", - "nodeType": "YulFunctionCall", - "src": "5737:12:62" - }, - "nativeSrc": "5737:12:62", - "nodeType": "YulExpressionStatement", - "src": "5737:12:62" - } - ] - }, - "condition": { - "name": "_1", - "nativeSrc": "5732:2:62", - "nodeType": "YulIdentifier", - "src": "5732:2:62" - }, - "nativeSrc": "5729:22:62", - "nodeType": "YulIf", - "src": "5729:22:62" - }, - { - "nativeSrc": "5760:7:62", - "nodeType": "YulAssignment", - "src": "5760:7:62", - "value": { - "kind": "number", - "nativeSrc": "5766:1:62", - "nodeType": "YulLiteral", - "src": "5766:1:62", - "type": "", - "value": "0" - }, - "variableNames": [ - { - "name": "_1", - "nativeSrc": "5760:2:62", - "nodeType": "YulIdentifier", - "src": "5760:2:62" - } - ] - }, - { - "nativeSrc": "5776:16:62", - "nodeType": "YulVariableDeclaration", - "src": "5776:16:62", - "value": { - "name": "_1", - "nativeSrc": "5790:2:62", - "nodeType": "YulIdentifier", - "src": "5790:2:62" - }, - "variables": [ - { - "name": "memPtr", - "nativeSrc": "5780:6:62", - "nodeType": "YulTypedName", - "src": "5780:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "5801:19:62", - "nodeType": "YulAssignment", - "src": "5801:19:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5817:2:62", - "nodeType": "YulLiteral", - "src": "5817:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5811:5:62", - "nodeType": "YulIdentifier", - "src": "5811:5:62" - }, - "nativeSrc": "5811:9:62", - "nodeType": "YulFunctionCall", - "src": "5811:9:62" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "5801:6:62", - "nodeType": "YulIdentifier", - "src": "5801:6:62" - } - ] - }, - { - "nativeSrc": "5829:33:62", - "nodeType": "YulVariableDeclaration", - "src": "5829:33:62", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "5851:6:62", - "nodeType": "YulIdentifier", - "src": "5851:6:62" - }, - { - "kind": "number", - "nativeSrc": "5859:2:62", - "nodeType": "YulLiteral", - "src": "5859:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5847:3:62", - "nodeType": "YulIdentifier", - "src": "5847:3:62" - }, - "nativeSrc": "5847:15:62", - "nodeType": "YulFunctionCall", - "src": "5847:15:62" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "5833:10:62", - "nodeType": "YulTypedName", - "src": "5833:10:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5945:113:62", - "nodeType": "YulBlock", - "src": "5945:113:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "5966:2:62", - "nodeType": "YulIdentifier", - "src": "5966:2:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5974:3:62", - "nodeType": "YulLiteral", - "src": "5974:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "5979:10:62", - "nodeType": "YulLiteral", - "src": "5979:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "5970:3:62", - "nodeType": "YulIdentifier", - "src": "5970:3:62" - }, - "nativeSrc": "5970:20:62", - "nodeType": "YulFunctionCall", - "src": "5970:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5959:6:62", - "nodeType": "YulIdentifier", - "src": "5959:6:62" - }, - "nativeSrc": "5959:32:62", - "nodeType": "YulFunctionCall", - "src": "5959:32:62" - }, - "nativeSrc": "5959:32:62", - "nodeType": "YulExpressionStatement", - "src": "5959:32:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6011:1:62", - "nodeType": "YulLiteral", - "src": "6011:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "6014:4:62", - "nodeType": "YulLiteral", - "src": "6014:4:62", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6004:6:62", - "nodeType": "YulIdentifier", - "src": "6004:6:62" - }, - "nativeSrc": "6004:15:62", - "nodeType": "YulFunctionCall", - "src": "6004:15:62" - }, - "nativeSrc": "6004:15:62", - "nodeType": "YulExpressionStatement", - "src": "6004:15:62" - }, - { - "expression": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "6039:2:62", - "nodeType": "YulIdentifier", - "src": "6039:2:62" - }, - { - "kind": "number", - "nativeSrc": "6043:4:62", - "nodeType": "YulLiteral", - "src": "6043:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "6032:6:62", - "nodeType": "YulIdentifier", - "src": "6032:6:62" - }, - "nativeSrc": "6032:16:62", - "nodeType": "YulFunctionCall", - "src": "6032:16:62" - }, - "nativeSrc": "6032:16:62", - "nodeType": "YulExpressionStatement", - "src": "6032:16:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "5880:10:62", - "nodeType": "YulIdentifier", - "src": "5880:10:62" - }, - { - "kind": "number", - "nativeSrc": "5892:18:62", - "nodeType": "YulLiteral", - "src": "5892:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "5877:2:62", - "nodeType": "YulIdentifier", - "src": "5877:2:62" - }, - "nativeSrc": "5877:34:62", - "nodeType": "YulFunctionCall", - "src": "5877:34:62" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "5916:10:62", - "nodeType": "YulIdentifier", - "src": "5916:10:62" - }, - { - "name": "memPtr", - "nativeSrc": "5928:6:62", - "nodeType": "YulIdentifier", - "src": "5928:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "5913:2:62", - "nodeType": "YulIdentifier", - "src": "5913:2:62" - }, - "nativeSrc": "5913:22:62", - "nodeType": "YulFunctionCall", - "src": "5913:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "5874:2:62", - "nodeType": "YulIdentifier", - "src": "5874:2:62" - }, - "nativeSrc": "5874:62:62", - "nodeType": "YulFunctionCall", - "src": "5874:62:62" - }, - "nativeSrc": "5871:187:62", - "nodeType": "YulIf", - "src": "5871:187:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6074:2:62", - "nodeType": "YulLiteral", - "src": "6074:2:62", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "6078:10:62", - "nodeType": "YulIdentifier", - "src": "6078:10:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6067:6:62", - "nodeType": "YulIdentifier", - "src": "6067:6:62" - }, - "nativeSrc": "6067:22:62", - "nodeType": "YulFunctionCall", - "src": "6067:22:62" - }, - "nativeSrc": "6067:22:62", - "nodeType": "YulExpressionStatement", - "src": "6067:22:62" - }, - { - "nativeSrc": "6098:15:62", - "nodeType": "YulVariableDeclaration", - "src": "6098:15:62", - "value": { - "name": "_1", - "nativeSrc": "6111:2:62", - "nodeType": "YulIdentifier", - "src": "6111:2:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "6102:5:62", - "nodeType": "YulTypedName", - "src": "6102:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "6122:32:62", - "nodeType": "YulAssignment", - "src": "6122:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6144:9:62", - "nodeType": "YulIdentifier", - "src": "6144:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6131:12:62", - "nodeType": "YulIdentifier", - "src": "6131:12:62" - }, - "nativeSrc": "6131:23:62", - "nodeType": "YulFunctionCall", - "src": "6131:23:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "6122:5:62", - "nodeType": "YulIdentifier", - "src": "6122:5:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "6170:6:62", - "nodeType": "YulIdentifier", - "src": "6170:6:62" - }, - { - "name": "value", - "nativeSrc": "6178:5:62", - "nodeType": "YulIdentifier", - "src": "6178:5:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6163:6:62", - "nodeType": "YulIdentifier", - "src": "6163:6:62" - }, - "nativeSrc": "6163:21:62", - "nodeType": "YulFunctionCall", - "src": "6163:21:62" - }, - "nativeSrc": "6163:21:62", - "nodeType": "YulExpressionStatement", - "src": "6163:21:62" - }, - { - "nativeSrc": "6193:17:62", - "nodeType": "YulVariableDeclaration", - "src": "6193:17:62", - "value": { - "name": "_1", - "nativeSrc": "6208:2:62", - "nodeType": "YulIdentifier", - "src": "6208:2:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "6197:7:62", - "nodeType": "YulTypedName", - "src": "6197:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "6219:43:62", - "nodeType": "YulAssignment", - "src": "6219:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6247:9:62", - "nodeType": "YulIdentifier", - "src": "6247:9:62" - }, - { - "kind": "number", - "nativeSrc": "6258:2:62", - "nodeType": "YulLiteral", - "src": "6258:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6243:3:62", - "nodeType": "YulIdentifier", - "src": "6243:3:62" - }, - "nativeSrc": "6243:18:62", - "nodeType": "YulFunctionCall", - "src": "6243:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6230:12:62", - "nodeType": "YulIdentifier", - "src": "6230:12:62" - }, - "nativeSrc": "6230:32:62", - "nodeType": "YulFunctionCall", - "src": "6230:32:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "6219:7:62", - "nodeType": "YulIdentifier", - "src": "6219:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "6282:6:62", - "nodeType": "YulIdentifier", - "src": "6282:6:62" - }, - { - "kind": "number", - "nativeSrc": "6290:2:62", - "nodeType": "YulLiteral", - "src": "6290:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6278:3:62", - "nodeType": "YulIdentifier", - "src": "6278:3:62" - }, - "nativeSrc": "6278:15:62", - "nodeType": "YulFunctionCall", - "src": "6278:15:62" - }, - { - "name": "value_1", - "nativeSrc": "6295:7:62", - "nodeType": "YulIdentifier", - "src": "6295:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6271:6:62", - "nodeType": "YulIdentifier", - "src": "6271:6:62" - }, - "nativeSrc": "6271:32:62", - "nodeType": "YulFunctionCall", - "src": "6271:32:62" - }, - "nativeSrc": "6271:32:62", - "nodeType": "YulExpressionStatement", - "src": "6271:32:62" - }, - { - "nativeSrc": "6312:17:62", - "nodeType": "YulVariableDeclaration", - "src": "6312:17:62", - "value": { - "name": "_1", - "nativeSrc": "6327:2:62", - "nodeType": "YulIdentifier", - "src": "6327:2:62" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "6316:7:62", - "nodeType": "YulTypedName", - "src": "6316:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "6338:43:62", - "nodeType": "YulAssignment", - "src": "6338:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6366:9:62", - "nodeType": "YulIdentifier", - "src": "6366:9:62" - }, - { - "kind": "number", - "nativeSrc": "6377:2:62", - "nodeType": "YulLiteral", - "src": "6377:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6362:3:62", - "nodeType": "YulIdentifier", - "src": "6362:3:62" - }, - "nativeSrc": "6362:18:62", - "nodeType": "YulFunctionCall", - "src": "6362:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6349:12:62", - "nodeType": "YulIdentifier", - "src": "6349:12:62" - }, - "nativeSrc": "6349:32:62", - "nodeType": "YulFunctionCall", - "src": "6349:32:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "6338:7:62", - "nodeType": "YulIdentifier", - "src": "6338:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "6401:6:62", - "nodeType": "YulIdentifier", - "src": "6401:6:62" - }, - { - "kind": "number", - "nativeSrc": "6409:2:62", - "nodeType": "YulLiteral", - "src": "6409:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6397:3:62", - "nodeType": "YulIdentifier", - "src": "6397:3:62" - }, - "nativeSrc": "6397:15:62", - "nodeType": "YulFunctionCall", - "src": "6397:15:62" - }, - { - "name": "value_2", - "nativeSrc": "6414:7:62", - "nodeType": "YulIdentifier", - "src": "6414:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6390:6:62", - "nodeType": "YulIdentifier", - "src": "6390:6:62" - }, - "nativeSrc": "6390:32:62", - "nodeType": "YulFunctionCall", - "src": "6390:32:62" - }, - "nativeSrc": "6390:32:62", - "nodeType": "YulExpressionStatement", - "src": "6390:32:62" - }, - { - "nativeSrc": "6431:16:62", - "nodeType": "YulAssignment", - "src": "6431:16:62", - "value": { - "name": "memPtr", - "nativeSrc": "6441:6:62", - "nodeType": "YulIdentifier", - "src": "6441:6:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "6431:6:62", - "nodeType": "YulIdentifier", - "src": "6431:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_Receipt_$11685_memory_ptr", - "nativeSrc": "5572:881:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "5634:9:62", - "nodeType": "YulTypedName", - "src": "5634:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "5645:7:62", - "nodeType": "YulTypedName", - "src": "5645:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "5657:6:62", - "nodeType": "YulTypedName", - "src": "5657:6:62", - "type": "" - } - ], - "src": "5572:881:62" - }, - { - "body": { - "nativeSrc": "6559:102:62", - "nodeType": "YulBlock", - "src": "6559:102:62", - "statements": [ - { - "nativeSrc": "6569:26:62", - "nodeType": "YulAssignment", - "src": "6569:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6581:9:62", - "nodeType": "YulIdentifier", - "src": "6581:9:62" - }, - { - "kind": "number", - "nativeSrc": "6592:2:62", - "nodeType": "YulLiteral", - "src": "6592:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6577:3:62", - "nodeType": "YulIdentifier", - "src": "6577:3:62" - }, - "nativeSrc": "6577:18:62", - "nodeType": "YulFunctionCall", - "src": "6577:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "6569:4:62", - "nodeType": "YulIdentifier", - "src": "6569:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6611:9:62", - "nodeType": "YulIdentifier", - "src": "6611:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "6626:6:62", - "nodeType": "YulIdentifier", - "src": "6626:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6642:3:62", - "nodeType": "YulLiteral", - "src": "6642:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "6647:1:62", - "nodeType": "YulLiteral", - "src": "6647:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "6638:3:62", - "nodeType": "YulIdentifier", - "src": "6638:3:62" - }, - "nativeSrc": "6638:11:62", - "nodeType": "YulFunctionCall", - "src": "6638:11:62" - }, - { - "kind": "number", - "nativeSrc": "6651:1:62", - "nodeType": "YulLiteral", - "src": "6651:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "6634:3:62", - "nodeType": "YulIdentifier", - "src": "6634:3:62" - }, - "nativeSrc": "6634:19:62", - "nodeType": "YulFunctionCall", - "src": "6634:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "6622:3:62", - "nodeType": "YulIdentifier", - "src": "6622:3:62" - }, - "nativeSrc": "6622:32:62", - "nodeType": "YulFunctionCall", - "src": "6622:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6604:6:62", - "nodeType": "YulIdentifier", - "src": "6604:6:62" - }, - "nativeSrc": "6604:51:62", - "nodeType": "YulFunctionCall", - "src": "6604:51:62" - }, - "nativeSrc": "6604:51:62", - "nodeType": "YulExpressionStatement", - "src": "6604:51:62" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nativeSrc": "6458:203:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6528:9:62", - "nodeType": "YulTypedName", - "src": "6528:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "6539:6:62", - "nodeType": "YulTypedName", - "src": "6539:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "6550:4:62", - "nodeType": "YulTypedName", - "src": "6550:4:62", - "type": "" - } - ], - "src": "6458:203:62" - }, - { - "body": { - "nativeSrc": "6735:176:62", - "nodeType": "YulBlock", - "src": "6735:176:62", - "statements": [ - { - "body": { - "nativeSrc": "6781:16:62", - "nodeType": "YulBlock", - "src": "6781:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6790:1:62", - "nodeType": "YulLiteral", - "src": "6790:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "6793:1:62", - "nodeType": "YulLiteral", - "src": "6793:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "6783:6:62", - "nodeType": "YulIdentifier", - "src": "6783:6:62" - }, - "nativeSrc": "6783:12:62", - "nodeType": "YulFunctionCall", - "src": "6783:12:62" - }, - "nativeSrc": "6783:12:62", - "nodeType": "YulExpressionStatement", - "src": "6783:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "6756:7:62", - "nodeType": "YulIdentifier", - "src": "6756:7:62" - }, - { - "name": "headStart", - "nativeSrc": "6765:9:62", - "nodeType": "YulIdentifier", - "src": "6765:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "6752:3:62", - "nodeType": "YulIdentifier", - "src": "6752:3:62" - }, - "nativeSrc": "6752:23:62", - "nodeType": "YulFunctionCall", - "src": "6752:23:62" - }, - { - "kind": "number", - "nativeSrc": "6777:2:62", - "nodeType": "YulLiteral", - "src": "6777:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "6748:3:62", - "nodeType": "YulIdentifier", - "src": "6748:3:62" - }, - "nativeSrc": "6748:32:62", - "nodeType": "YulFunctionCall", - "src": "6748:32:62" - }, - "nativeSrc": "6745:52:62", - "nodeType": "YulIf", - "src": "6745:52:62" - }, - { - "nativeSrc": "6806:36:62", - "nodeType": "YulVariableDeclaration", - "src": "6806:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6832:9:62", - "nodeType": "YulIdentifier", - "src": "6832:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6819:12:62", - "nodeType": "YulIdentifier", - "src": "6819:12:62" - }, - "nativeSrc": "6819:23:62", - "nodeType": "YulFunctionCall", - "src": "6819:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "6810:5:62", - "nodeType": "YulTypedName", - "src": "6810:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "6875:5:62", - "nodeType": "YulIdentifier", - "src": "6875:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint32", - "nativeSrc": "6851:23:62", - "nodeType": "YulIdentifier", - "src": "6851:23:62" - }, - "nativeSrc": "6851:30:62", - "nodeType": "YulFunctionCall", - "src": "6851:30:62" - }, - "nativeSrc": "6851:30:62", - "nodeType": "YulExpressionStatement", - "src": "6851:30:62" - }, - { - "nativeSrc": "6890:15:62", - "nodeType": "YulAssignment", - "src": "6890:15:62", - "value": { - "name": "value", - "nativeSrc": "6900:5:62", - "nodeType": "YulIdentifier", - "src": "6900:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "6890:6:62", - "nodeType": "YulIdentifier", - "src": "6890:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32", - "nativeSrc": "6666:245:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6701:9:62", - "nodeType": "YulTypedName", - "src": "6701:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "6712:7:62", - "nodeType": "YulTypedName", - "src": "6712:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "6724:6:62", - "nodeType": "YulTypedName", - "src": "6724:6:62", - "type": "" - } - ], - "src": "6666:245:62" - }, - { - "body": { - "nativeSrc": "6986:177:62", - "nodeType": "YulBlock", - "src": "6986:177:62", - "statements": [ - { - "body": { - "nativeSrc": "7032:16:62", - "nodeType": "YulBlock", - "src": "7032:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7041:1:62", - "nodeType": "YulLiteral", - "src": "7041:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7044:1:62", - "nodeType": "YulLiteral", - "src": "7044:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7034:6:62", - "nodeType": "YulIdentifier", - "src": "7034:6:62" - }, - "nativeSrc": "7034:12:62", - "nodeType": "YulFunctionCall", - "src": "7034:12:62" - }, - "nativeSrc": "7034:12:62", - "nodeType": "YulExpressionStatement", - "src": "7034:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "7007:7:62", - "nodeType": "YulIdentifier", - "src": "7007:7:62" - }, - { - "name": "headStart", - "nativeSrc": "7016:9:62", - "nodeType": "YulIdentifier", - "src": "7016:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "7003:3:62", - "nodeType": "YulIdentifier", - "src": "7003:3:62" - }, - "nativeSrc": "7003:23:62", - "nodeType": "YulFunctionCall", - "src": "7003:23:62" - }, - { - "kind": "number", - "nativeSrc": "7028:2:62", - "nodeType": "YulLiteral", - "src": "7028:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "6999:3:62", - "nodeType": "YulIdentifier", - "src": "6999:3:62" - }, - "nativeSrc": "6999:32:62", - "nodeType": "YulFunctionCall", - "src": "6999:32:62" - }, - "nativeSrc": "6996:52:62", - "nodeType": "YulIf", - "src": "6996:52:62" - }, - { - "nativeSrc": "7057:36:62", - "nodeType": "YulVariableDeclaration", - "src": "7057:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7083:9:62", - "nodeType": "YulIdentifier", - "src": "7083:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "7070:12:62", - "nodeType": "YulIdentifier", - "src": "7070:12:62" - }, - "nativeSrc": "7070:23:62", - "nodeType": "YulFunctionCall", - "src": "7070:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "7061:5:62", - "nodeType": "YulTypedName", - "src": "7061:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "7127:5:62", - "nodeType": "YulIdentifier", - "src": "7127:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "7102:24:62", - "nodeType": "YulIdentifier", - "src": "7102:24:62" - }, - "nativeSrc": "7102:31:62", - "nodeType": "YulFunctionCall", - "src": "7102:31:62" - }, - "nativeSrc": "7102:31:62", - "nodeType": "YulExpressionStatement", - "src": "7102:31:62" - }, - { - "nativeSrc": "7142:15:62", - "nodeType": "YulAssignment", - "src": "7142:15:62", - "value": { - "name": "value", - "nativeSrc": "7152:5:62", - "nodeType": "YulIdentifier", - "src": "7152:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "7142:6:62", - "nodeType": "YulIdentifier", - "src": "7142:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nativeSrc": "6916:247:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6952:9:62", - "nodeType": "YulTypedName", - "src": "6952:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "6963:7:62", - "nodeType": "YulTypedName", - "src": "6963:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "6975:6:62", - "nodeType": "YulTypedName", - "src": "6975:6:62", - "type": "" - } - ], - "src": "6916:247:62" - }, - { - "body": { - "nativeSrc": "7263:92:62", - "nodeType": "YulBlock", - "src": "7263:92:62", - "statements": [ - { - "nativeSrc": "7273:26:62", - "nodeType": "YulAssignment", - "src": "7273:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7285:9:62", - "nodeType": "YulIdentifier", - "src": "7285:9:62" - }, - { - "kind": "number", - "nativeSrc": "7296:2:62", - "nodeType": "YulLiteral", - "src": "7296:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7281:3:62", - "nodeType": "YulIdentifier", - "src": "7281:3:62" - }, - "nativeSrc": "7281:18:62", - "nodeType": "YulFunctionCall", - "src": "7281:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "7273:4:62", - "nodeType": "YulIdentifier", - "src": "7273:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7315:9:62", - "nodeType": "YulIdentifier", - "src": "7315:9:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "7340:6:62", - "nodeType": "YulIdentifier", - "src": "7340:6:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "7333:6:62", - "nodeType": "YulIdentifier", - "src": "7333:6:62" - }, - "nativeSrc": "7333:14:62", - "nodeType": "YulFunctionCall", - "src": "7333:14:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "7326:6:62", - "nodeType": "YulIdentifier", - "src": "7326:6:62" - }, - "nativeSrc": "7326:22:62", - "nodeType": "YulFunctionCall", - "src": "7326:22:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7308:6:62", - "nodeType": "YulIdentifier", - "src": "7308:6:62" - }, - "nativeSrc": "7308:41:62", - "nodeType": "YulFunctionCall", - "src": "7308:41:62" - }, - "nativeSrc": "7308:41:62", - "nodeType": "YulExpressionStatement", - "src": "7308:41:62" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nativeSrc": "7168:187:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "7232:9:62", - "nodeType": "YulTypedName", - "src": "7232:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "7243:6:62", - "nodeType": "YulTypedName", - "src": "7243:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "7254:4:62", - "nodeType": "YulTypedName", - "src": "7254:4:62", - "type": "" - } - ], - "src": "7168:187:62" - }, - { - "body": { - "nativeSrc": "7432:275:62", - "nodeType": "YulBlock", - "src": "7432:275:62", - "statements": [ - { - "body": { - "nativeSrc": "7481:16:62", - "nodeType": "YulBlock", - "src": "7481:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7490:1:62", - "nodeType": "YulLiteral", - "src": "7490:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7493:1:62", - "nodeType": "YulLiteral", - "src": "7493:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7483:6:62", - "nodeType": "YulIdentifier", - "src": "7483:6:62" - }, - "nativeSrc": "7483:12:62", - "nodeType": "YulFunctionCall", - "src": "7483:12:62" - }, - "nativeSrc": "7483:12:62", - "nodeType": "YulExpressionStatement", - "src": "7483:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "7460:6:62", - "nodeType": "YulIdentifier", - "src": "7460:6:62" - }, - { - "kind": "number", - "nativeSrc": "7468:4:62", - "nodeType": "YulLiteral", - "src": "7468:4:62", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7456:3:62", - "nodeType": "YulIdentifier", - "src": "7456:3:62" - }, - "nativeSrc": "7456:17:62", - "nodeType": "YulFunctionCall", - "src": "7456:17:62" - }, - { - "name": "end", - "nativeSrc": "7475:3:62", - "nodeType": "YulIdentifier", - "src": "7475:3:62" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "7452:3:62", - "nodeType": "YulIdentifier", - "src": "7452:3:62" - }, - "nativeSrc": "7452:27:62", - "nodeType": "YulFunctionCall", - "src": "7452:27:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "7445:6:62", - "nodeType": "YulIdentifier", - "src": "7445:6:62" - }, - "nativeSrc": "7445:35:62", - "nodeType": "YulFunctionCall", - "src": "7445:35:62" - }, - "nativeSrc": "7442:55:62", - "nodeType": "YulIf", - "src": "7442:55:62" - }, - { - "nativeSrc": "7506:30:62", - "nodeType": "YulAssignment", - "src": "7506:30:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "7529:6:62", - "nodeType": "YulIdentifier", - "src": "7529:6:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "7516:12:62", - "nodeType": "YulIdentifier", - "src": "7516:12:62" - }, - "nativeSrc": "7516:20:62", - "nodeType": "YulFunctionCall", - "src": "7516:20:62" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "7506:6:62", - "nodeType": "YulIdentifier", - "src": "7506:6:62" - } - ] - }, - { - "body": { - "nativeSrc": "7579:16:62", - "nodeType": "YulBlock", - "src": "7579:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7588:1:62", - "nodeType": "YulLiteral", - "src": "7588:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7591:1:62", - "nodeType": "YulLiteral", - "src": "7591:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7581:6:62", - "nodeType": "YulIdentifier", - "src": "7581:6:62" - }, - "nativeSrc": "7581:12:62", - "nodeType": "YulFunctionCall", - "src": "7581:12:62" - }, - "nativeSrc": "7581:12:62", - "nodeType": "YulExpressionStatement", - "src": "7581:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "7551:6:62", - "nodeType": "YulIdentifier", - "src": "7551:6:62" - }, - { - "kind": "number", - "nativeSrc": "7559:18:62", - "nodeType": "YulLiteral", - "src": "7559:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "7548:2:62", - "nodeType": "YulIdentifier", - "src": "7548:2:62" - }, - "nativeSrc": "7548:30:62", - "nodeType": "YulFunctionCall", - "src": "7548:30:62" - }, - "nativeSrc": "7545:50:62", - "nodeType": "YulIf", - "src": "7545:50:62" - }, - { - "nativeSrc": "7604:29:62", - "nodeType": "YulAssignment", - "src": "7604:29:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "7620:6:62", - "nodeType": "YulIdentifier", - "src": "7620:6:62" - }, - { - "kind": "number", - "nativeSrc": "7628:4:62", - "nodeType": "YulLiteral", - "src": "7628:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7616:3:62", - "nodeType": "YulIdentifier", - "src": "7616:3:62" - }, - "nativeSrc": "7616:17:62", - "nodeType": "YulFunctionCall", - "src": "7616:17:62" - }, - "variableNames": [ - { - "name": "arrayPos", - "nativeSrc": "7604:8:62", - "nodeType": "YulIdentifier", - "src": "7604:8:62" - } - ] - }, - { - "body": { - "nativeSrc": "7685:16:62", - "nodeType": "YulBlock", - "src": "7685:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7694:1:62", - "nodeType": "YulLiteral", - "src": "7694:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7697:1:62", - "nodeType": "YulLiteral", - "src": "7697:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7687:6:62", - "nodeType": "YulIdentifier", - "src": "7687:6:62" - }, - "nativeSrc": "7687:12:62", - "nodeType": "YulFunctionCall", - "src": "7687:12:62" - }, - "nativeSrc": "7687:12:62", - "nodeType": "YulExpressionStatement", - "src": "7687:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "7656:6:62", - "nodeType": "YulIdentifier", - "src": "7656:6:62" - }, - { - "name": "length", - "nativeSrc": "7664:6:62", - "nodeType": "YulIdentifier", - "src": "7664:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7652:3:62", - "nodeType": "YulIdentifier", - "src": "7652:3:62" - }, - "nativeSrc": "7652:19:62", - "nodeType": "YulFunctionCall", - "src": "7652:19:62" - }, - { - "kind": "number", - "nativeSrc": "7673:4:62", - "nodeType": "YulLiteral", - "src": "7673:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7648:3:62", - "nodeType": "YulIdentifier", - "src": "7648:3:62" - }, - "nativeSrc": "7648:30:62", - "nodeType": "YulFunctionCall", - "src": "7648:30:62" - }, - { - "name": "end", - "nativeSrc": "7680:3:62", - "nodeType": "YulIdentifier", - "src": "7680:3:62" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "7645:2:62", - "nodeType": "YulIdentifier", - "src": "7645:2:62" - }, - "nativeSrc": "7645:39:62", - "nodeType": "YulFunctionCall", - "src": "7645:39:62" - }, - "nativeSrc": "7642:59:62", - "nodeType": "YulIf", - "src": "7642:59:62" - } - ] - }, - "name": "abi_decode_bytes_calldata", - "nativeSrc": "7360:347:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "7395:6:62", - "nodeType": "YulTypedName", - "src": "7395:6:62", - "type": "" - }, - { - "name": "end", - "nativeSrc": "7403:3:62", - "nodeType": "YulTypedName", - "src": "7403:3:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nativeSrc": "7411:8:62", - "nodeType": "YulTypedName", - "src": "7411:8:62", - "type": "" - }, - { - "name": "length", - "nativeSrc": "7421:6:62", - "nodeType": "YulTypedName", - "src": "7421:6:62", - "type": "" - } - ], - "src": "7360:347:62" - }, - { - "body": { - "nativeSrc": "7801:320:62", - "nodeType": "YulBlock", - "src": "7801:320:62", - "statements": [ - { - "body": { - "nativeSrc": "7847:16:62", - "nodeType": "YulBlock", - "src": "7847:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7856:1:62", - "nodeType": "YulLiteral", - "src": "7856:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7859:1:62", - "nodeType": "YulLiteral", - "src": "7859:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7849:6:62", - "nodeType": "YulIdentifier", - "src": "7849:6:62" - }, - "nativeSrc": "7849:12:62", - "nodeType": "YulFunctionCall", - "src": "7849:12:62" - }, - "nativeSrc": "7849:12:62", - "nodeType": "YulExpressionStatement", - "src": "7849:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "7822:7:62", - "nodeType": "YulIdentifier", - "src": "7822:7:62" - }, - { - "name": "headStart", - "nativeSrc": "7831:9:62", - "nodeType": "YulIdentifier", - "src": "7831:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "7818:3:62", - "nodeType": "YulIdentifier", - "src": "7818:3:62" - }, - "nativeSrc": "7818:23:62", - "nodeType": "YulFunctionCall", - "src": "7818:23:62" - }, - { - "kind": "number", - "nativeSrc": "7843:2:62", - "nodeType": "YulLiteral", - "src": "7843:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "7814:3:62", - "nodeType": "YulIdentifier", - "src": "7814:3:62" - }, - "nativeSrc": "7814:32:62", - "nodeType": "YulFunctionCall", - "src": "7814:32:62" - }, - "nativeSrc": "7811:52:62", - "nodeType": "YulIf", - "src": "7811:52:62" - }, - { - "nativeSrc": "7872:37:62", - "nodeType": "YulVariableDeclaration", - "src": "7872:37:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7899:9:62", - "nodeType": "YulIdentifier", - "src": "7899:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "7886:12:62", - "nodeType": "YulIdentifier", - "src": "7886:12:62" - }, - "nativeSrc": "7886:23:62", - "nodeType": "YulFunctionCall", - "src": "7886:23:62" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "7876:6:62", - "nodeType": "YulTypedName", - "src": "7876:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "7952:16:62", - "nodeType": "YulBlock", - "src": "7952:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7961:1:62", - "nodeType": "YulLiteral", - "src": "7961:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7964:1:62", - "nodeType": "YulLiteral", - "src": "7964:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7954:6:62", - "nodeType": "YulIdentifier", - "src": "7954:6:62" - }, - "nativeSrc": "7954:12:62", - "nodeType": "YulFunctionCall", - "src": "7954:12:62" - }, - "nativeSrc": "7954:12:62", - "nodeType": "YulExpressionStatement", - "src": "7954:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "7924:6:62", - "nodeType": "YulIdentifier", - "src": "7924:6:62" - }, - { - "kind": "number", - "nativeSrc": "7932:18:62", - "nodeType": "YulLiteral", - "src": "7932:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "7921:2:62", - "nodeType": "YulIdentifier", - "src": "7921:2:62" - }, - "nativeSrc": "7921:30:62", - "nodeType": "YulFunctionCall", - "src": "7921:30:62" - }, - "nativeSrc": "7918:50:62", - "nodeType": "YulIf", - "src": "7918:50:62" - }, - { - "nativeSrc": "7977:84:62", - "nodeType": "YulVariableDeclaration", - "src": "7977:84:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8033:9:62", - "nodeType": "YulIdentifier", - "src": "8033:9:62" - }, - { - "name": "offset", - "nativeSrc": "8044:6:62", - "nodeType": "YulIdentifier", - "src": "8044:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8029:3:62", - "nodeType": "YulIdentifier", - "src": "8029:3:62" - }, - "nativeSrc": "8029:22:62", - "nodeType": "YulFunctionCall", - "src": "8029:22:62" - }, - { - "name": "dataEnd", - "nativeSrc": "8053:7:62", - "nodeType": "YulIdentifier", - "src": "8053:7:62" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "8003:25:62", - "nodeType": "YulIdentifier", - "src": "8003:25:62" - }, - "nativeSrc": "8003:58:62", - "nodeType": "YulFunctionCall", - "src": "8003:58:62" - }, - "variables": [ - { - "name": "value0_1", - "nativeSrc": "7981:8:62", - "nodeType": "YulTypedName", - "src": "7981:8:62", - "type": "" - }, - { - "name": "value1_1", - "nativeSrc": "7991:8:62", - "nodeType": "YulTypedName", - "src": "7991:8:62", - "type": "" - } - ] - }, - { - "nativeSrc": "8070:18:62", - "nodeType": "YulAssignment", - "src": "8070:18:62", - "value": { - "name": "value0_1", - "nativeSrc": "8080:8:62", - "nodeType": "YulIdentifier", - "src": "8080:8:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "8070:6:62", - "nodeType": "YulIdentifier", - "src": "8070:6:62" - } - ] - }, - { - "nativeSrc": "8097:18:62", - "nodeType": "YulAssignment", - "src": "8097:18:62", - "value": { - "name": "value1_1", - "nativeSrc": "8107:8:62", - "nodeType": "YulIdentifier", - "src": "8107:8:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "8097:6:62", - "nodeType": "YulIdentifier", - "src": "8097:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes_calldata_ptr", - "nativeSrc": "7712:409:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "7759:9:62", - "nodeType": "YulTypedName", - "src": "7759:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "7770:7:62", - "nodeType": "YulTypedName", - "src": "7770:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "7782:6:62", - "nodeType": "YulTypedName", - "src": "7782:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "7790:6:62", - "nodeType": "YulTypedName", - "src": "7790:6:62", - "type": "" - } - ], - "src": "7712:409:62" - }, - { - "body": { - "nativeSrc": "8251:587:62", - "nodeType": "YulBlock", - "src": "8251:587:62", - "statements": [ - { - "body": { - "nativeSrc": "8297:16:62", - "nodeType": "YulBlock", - "src": "8297:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8306:1:62", - "nodeType": "YulLiteral", - "src": "8306:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "8309:1:62", - "nodeType": "YulLiteral", - "src": "8309:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "8299:6:62", - "nodeType": "YulIdentifier", - "src": "8299:6:62" - }, - "nativeSrc": "8299:12:62", - "nodeType": "YulFunctionCall", - "src": "8299:12:62" - }, - "nativeSrc": "8299:12:62", - "nodeType": "YulExpressionStatement", - "src": "8299:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "8272:7:62", - "nodeType": "YulIdentifier", - "src": "8272:7:62" - }, - { - "name": "headStart", - "nativeSrc": "8281:9:62", - "nodeType": "YulIdentifier", - "src": "8281:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "8268:3:62", - "nodeType": "YulIdentifier", - "src": "8268:3:62" - }, - "nativeSrc": "8268:23:62", - "nodeType": "YulFunctionCall", - "src": "8268:23:62" - }, - { - "kind": "number", - "nativeSrc": "8293:2:62", - "nodeType": "YulLiteral", - "src": "8293:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "8264:3:62", - "nodeType": "YulIdentifier", - "src": "8264:3:62" - }, - "nativeSrc": "8264:32:62", - "nodeType": "YulFunctionCall", - "src": "8264:32:62" - }, - "nativeSrc": "8261:52:62", - "nodeType": "YulIf", - "src": "8261:52:62" - }, - { - "nativeSrc": "8322:37:62", - "nodeType": "YulVariableDeclaration", - "src": "8322:37:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8349:9:62", - "nodeType": "YulIdentifier", - "src": "8349:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "8336:12:62", - "nodeType": "YulIdentifier", - "src": "8336:12:62" - }, - "nativeSrc": "8336:23:62", - "nodeType": "YulFunctionCall", - "src": "8336:23:62" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "8326:6:62", - "nodeType": "YulTypedName", - "src": "8326:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "8402:16:62", - "nodeType": "YulBlock", - "src": "8402:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8411:1:62", - "nodeType": "YulLiteral", - "src": "8411:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "8414:1:62", - "nodeType": "YulLiteral", - "src": "8414:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "8404:6:62", - "nodeType": "YulIdentifier", - "src": "8404:6:62" - }, - "nativeSrc": "8404:12:62", - "nodeType": "YulFunctionCall", - "src": "8404:12:62" - }, - "nativeSrc": "8404:12:62", - "nodeType": "YulExpressionStatement", - "src": "8404:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "8374:6:62", - "nodeType": "YulIdentifier", - "src": "8374:6:62" - }, - { - "kind": "number", - "nativeSrc": "8382:18:62", - "nodeType": "YulLiteral", - "src": "8382:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "8371:2:62", - "nodeType": "YulIdentifier", - "src": "8371:2:62" - }, - "nativeSrc": "8371:30:62", - "nodeType": "YulFunctionCall", - "src": "8371:30:62" - }, - "nativeSrc": "8368:50:62", - "nodeType": "YulIf", - "src": "8368:50:62" - }, - { - "nativeSrc": "8427:84:62", - "nodeType": "YulVariableDeclaration", - "src": "8427:84:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8483:9:62", - "nodeType": "YulIdentifier", - "src": "8483:9:62" - }, - { - "name": "offset", - "nativeSrc": "8494:6:62", - "nodeType": "YulIdentifier", - "src": "8494:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8479:3:62", - "nodeType": "YulIdentifier", - "src": "8479:3:62" - }, - "nativeSrc": "8479:22:62", - "nodeType": "YulFunctionCall", - "src": "8479:22:62" - }, - { - "name": "dataEnd", - "nativeSrc": "8503:7:62", - "nodeType": "YulIdentifier", - "src": "8503:7:62" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "8453:25:62", - "nodeType": "YulIdentifier", - "src": "8453:25:62" - }, - "nativeSrc": "8453:58:62", - "nodeType": "YulFunctionCall", - "src": "8453:58:62" - }, - "variables": [ - { - "name": "value0_1", - "nativeSrc": "8431:8:62", - "nodeType": "YulTypedName", - "src": "8431:8:62", - "type": "" - }, - { - "name": "value1_1", - "nativeSrc": "8441:8:62", - "nodeType": "YulTypedName", - "src": "8441:8:62", - "type": "" - } - ] - }, - { - "nativeSrc": "8520:18:62", - "nodeType": "YulAssignment", - "src": "8520:18:62", - "value": { - "name": "value0_1", - "nativeSrc": "8530:8:62", - "nodeType": "YulIdentifier", - "src": "8530:8:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "8520:6:62", - "nodeType": "YulIdentifier", - "src": "8520:6:62" - } - ] - }, - { - "nativeSrc": "8547:18:62", - "nodeType": "YulAssignment", - "src": "8547:18:62", - "value": { - "name": "value1_1", - "nativeSrc": "8557:8:62", - "nodeType": "YulIdentifier", - "src": "8557:8:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "8547:6:62", - "nodeType": "YulIdentifier", - "src": "8547:6:62" - } - ] - }, - { - "nativeSrc": "8574:48:62", - "nodeType": "YulVariableDeclaration", - "src": "8574:48:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8607:9:62", - "nodeType": "YulIdentifier", - "src": "8607:9:62" - }, - { - "kind": "number", - "nativeSrc": "8618:2:62", - "nodeType": "YulLiteral", - "src": "8618:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8603:3:62", - "nodeType": "YulIdentifier", - "src": "8603:3:62" - }, - "nativeSrc": "8603:18:62", - "nodeType": "YulFunctionCall", - "src": "8603:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "8590:12:62", - "nodeType": "YulIdentifier", - "src": "8590:12:62" - }, - "nativeSrc": "8590:32:62", - "nodeType": "YulFunctionCall", - "src": "8590:32:62" - }, - "variables": [ - { - "name": "offset_1", - "nativeSrc": "8578:8:62", - "nodeType": "YulTypedName", - "src": "8578:8:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "8667:16:62", - "nodeType": "YulBlock", - "src": "8667:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8676:1:62", - "nodeType": "YulLiteral", - "src": "8676:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "8679:1:62", - "nodeType": "YulLiteral", - "src": "8679:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "8669:6:62", - "nodeType": "YulIdentifier", - "src": "8669:6:62" - }, - "nativeSrc": "8669:12:62", - "nodeType": "YulFunctionCall", - "src": "8669:12:62" - }, - "nativeSrc": "8669:12:62", - "nodeType": "YulExpressionStatement", - "src": "8669:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nativeSrc": "8637:8:62", - "nodeType": "YulIdentifier", - "src": "8637:8:62" - }, - { - "kind": "number", - "nativeSrc": "8647:18:62", - "nodeType": "YulLiteral", - "src": "8647:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "8634:2:62", - "nodeType": "YulIdentifier", - "src": "8634:2:62" - }, - "nativeSrc": "8634:32:62", - "nodeType": "YulFunctionCall", - "src": "8634:32:62" - }, - "nativeSrc": "8631:52:62", - "nodeType": "YulIf", - "src": "8631:52:62" - }, - { - "nativeSrc": "8692:86:62", - "nodeType": "YulVariableDeclaration", - "src": "8692:86:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8748:9:62", - "nodeType": "YulIdentifier", - "src": "8748:9:62" - }, - { - "name": "offset_1", - "nativeSrc": "8759:8:62", - "nodeType": "YulIdentifier", - "src": "8759:8:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8744:3:62", - "nodeType": "YulIdentifier", - "src": "8744:3:62" - }, - "nativeSrc": "8744:24:62", - "nodeType": "YulFunctionCall", - "src": "8744:24:62" - }, - { - "name": "dataEnd", - "nativeSrc": "8770:7:62", - "nodeType": "YulIdentifier", - "src": "8770:7:62" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "8718:25:62", - "nodeType": "YulIdentifier", - "src": "8718:25:62" - }, - "nativeSrc": "8718:60:62", - "nodeType": "YulFunctionCall", - "src": "8718:60:62" - }, - "variables": [ - { - "name": "value2_1", - "nativeSrc": "8696:8:62", - "nodeType": "YulTypedName", - "src": "8696:8:62", - "type": "" - }, - { - "name": "value3_1", - "nativeSrc": "8706:8:62", - "nodeType": "YulTypedName", - "src": "8706:8:62", - "type": "" - } - ] - }, - { - "nativeSrc": "8787:18:62", - "nodeType": "YulAssignment", - "src": "8787:18:62", - "value": { - "name": "value2_1", - "nativeSrc": "8797:8:62", - "nodeType": "YulIdentifier", - "src": "8797:8:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "8787:6:62", - "nodeType": "YulIdentifier", - "src": "8787:6:62" - } - ] - }, - { - "nativeSrc": "8814:18:62", - "nodeType": "YulAssignment", - "src": "8814:18:62", - "value": { - "name": "value3_1", - "nativeSrc": "8824:8:62", - "nodeType": "YulIdentifier", - "src": "8824:8:62" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "8814:6:62", - "nodeType": "YulIdentifier", - "src": "8814:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes_calldata_ptrt_bytes_calldata_ptr", - "nativeSrc": "8126:712:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8193:9:62", - "nodeType": "YulTypedName", - "src": "8193:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "8204:7:62", - "nodeType": "YulTypedName", - "src": "8204:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "8216:6:62", - "nodeType": "YulTypedName", - "src": "8216:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "8224:6:62", - "nodeType": "YulTypedName", - "src": "8224:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "8232:6:62", - "nodeType": "YulTypedName", - "src": "8232:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "8240:6:62", - "nodeType": "YulTypedName", - "src": "8240:6:62", - "type": "" - } - ], - "src": "8126:712:62" - }, - { - "body": { - "nativeSrc": "8972:119:62", - "nodeType": "YulBlock", - "src": "8972:119:62", - "statements": [ - { - "nativeSrc": "8982:26:62", - "nodeType": "YulAssignment", - "src": "8982:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8994:9:62", - "nodeType": "YulIdentifier", - "src": "8994:9:62" - }, - { - "kind": "number", - "nativeSrc": "9005:2:62", - "nodeType": "YulLiteral", - "src": "9005:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8990:3:62", - "nodeType": "YulIdentifier", - "src": "8990:3:62" - }, - "nativeSrc": "8990:18:62", - "nodeType": "YulFunctionCall", - "src": "8990:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "8982:4:62", - "nodeType": "YulIdentifier", - "src": "8982:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9024:9:62", - "nodeType": "YulIdentifier", - "src": "9024:9:62" - }, - { - "name": "value0", - "nativeSrc": "9035:6:62", - "nodeType": "YulIdentifier", - "src": "9035:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9017:6:62", - "nodeType": "YulIdentifier", - "src": "9017:6:62" - }, - "nativeSrc": "9017:25:62", - "nodeType": "YulFunctionCall", - "src": "9017:25:62" - }, - "nativeSrc": "9017:25:62", - "nodeType": "YulExpressionStatement", - "src": "9017:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9062:9:62", - "nodeType": "YulIdentifier", - "src": "9062:9:62" - }, - { - "kind": "number", - "nativeSrc": "9073:2:62", - "nodeType": "YulLiteral", - "src": "9073:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9058:3:62", - "nodeType": "YulIdentifier", - "src": "9058:3:62" - }, - "nativeSrc": "9058:18:62", - "nodeType": "YulFunctionCall", - "src": "9058:18:62" - }, - { - "name": "value1", - "nativeSrc": "9078:6:62", - "nodeType": "YulIdentifier", - "src": "9078:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9051:6:62", - "nodeType": "YulIdentifier", - "src": "9051:6:62" - }, - "nativeSrc": "9051:34:62", - "nodeType": "YulFunctionCall", - "src": "9051:34:62" - }, - "nativeSrc": "9051:34:62", - "nodeType": "YulExpressionStatement", - "src": "9051:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed", - "nativeSrc": "8843:248:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8933:9:62", - "nodeType": "YulTypedName", - "src": "8933:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "8944:6:62", - "nodeType": "YulTypedName", - "src": "8944:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "8952:6:62", - "nodeType": "YulTypedName", - "src": "8952:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "8963:4:62", - "nodeType": "YulTypedName", - "src": "8963:4:62", - "type": "" - } - ], - "src": "8843:248:62" - }, - { - "body": { - "nativeSrc": "9158:841:62", - "nodeType": "YulBlock", - "src": "9158:841:62", - "statements": [ - { - "body": { - "nativeSrc": "9202:16:62", - "nodeType": "YulBlock", - "src": "9202:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9211:1:62", - "nodeType": "YulLiteral", - "src": "9211:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9214:1:62", - "nodeType": "YulLiteral", - "src": "9214:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "9204:6:62", - "nodeType": "YulIdentifier", - "src": "9204:6:62" - }, - "nativeSrc": "9204:12:62", - "nodeType": "YulFunctionCall", - "src": "9204:12:62" - }, - "nativeSrc": "9204:12:62", - "nodeType": "YulExpressionStatement", - "src": "9204:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nativeSrc": "9179:3:62", - "nodeType": "YulIdentifier", - "src": "9179:3:62" - }, - { - "name": "headStart", - "nativeSrc": "9184:9:62", - "nodeType": "YulIdentifier", - "src": "9184:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "9175:3:62", - "nodeType": "YulIdentifier", - "src": "9175:3:62" - }, - "nativeSrc": "9175:19:62", - "nodeType": "YulFunctionCall", - "src": "9175:19:62" - }, - { - "kind": "number", - "nativeSrc": "9196:4:62", - "nodeType": "YulLiteral", - "src": "9196:4:62", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "9171:3:62", - "nodeType": "YulIdentifier", - "src": "9171:3:62" - }, - "nativeSrc": "9171:30:62", - "nodeType": "YulFunctionCall", - "src": "9171:30:62" - }, - "nativeSrc": "9168:50:62", - "nodeType": "YulIf", - "src": "9168:50:62" - }, - { - "nativeSrc": "9227:31:62", - "nodeType": "YulAssignment", - "src": "9227:31:62", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_2163", - "nativeSrc": "9236:20:62", - "nodeType": "YulIdentifier", - "src": "9236:20:62" - }, - "nativeSrc": "9236:22:62", - "nodeType": "YulFunctionCall", - "src": "9236:22:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "9227:5:62", - "nodeType": "YulIdentifier", - "src": "9227:5:62" - } - ] - }, - { - "nativeSrc": "9267:16:62", - "nodeType": "YulVariableDeclaration", - "src": "9267:16:62", - "value": { - "kind": "number", - "nativeSrc": "9282:1:62", - "nodeType": "YulLiteral", - "src": "9282:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "9271:7:62", - "nodeType": "YulTypedName", - "src": "9271:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "9292:34:62", - "nodeType": "YulAssignment", - "src": "9292:34:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9316:9:62", - "nodeType": "YulIdentifier", - "src": "9316:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9303:12:62", - "nodeType": "YulIdentifier", - "src": "9303:12:62" - }, - "nativeSrc": "9303:23:62", - "nodeType": "YulFunctionCall", - "src": "9303:23:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "9292:7:62", - "nodeType": "YulIdentifier", - "src": "9292:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "9342:5:62", - "nodeType": "YulIdentifier", - "src": "9342:5:62" - }, - { - "name": "value_1", - "nativeSrc": "9349:7:62", - "nodeType": "YulIdentifier", - "src": "9349:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9335:6:62", - "nodeType": "YulIdentifier", - "src": "9335:6:62" - }, - "nativeSrc": "9335:22:62", - "nodeType": "YulFunctionCall", - "src": "9335:22:62" - }, - "nativeSrc": "9335:22:62", - "nodeType": "YulExpressionStatement", - "src": "9335:22:62" - }, - { - "nativeSrc": "9366:16:62", - "nodeType": "YulVariableDeclaration", - "src": "9366:16:62", - "value": { - "kind": "number", - "nativeSrc": "9381:1:62", - "nodeType": "YulLiteral", - "src": "9381:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "9370:7:62", - "nodeType": "YulTypedName", - "src": "9370:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "9391:43:62", - "nodeType": "YulAssignment", - "src": "9391:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9419:9:62", - "nodeType": "YulIdentifier", - "src": "9419:9:62" - }, - { - "kind": "number", - "nativeSrc": "9430:2:62", - "nodeType": "YulLiteral", - "src": "9430:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9415:3:62", - "nodeType": "YulIdentifier", - "src": "9415:3:62" - }, - "nativeSrc": "9415:18:62", - "nodeType": "YulFunctionCall", - "src": "9415:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9402:12:62", - "nodeType": "YulIdentifier", - "src": "9402:12:62" - }, - "nativeSrc": "9402:32:62", - "nodeType": "YulFunctionCall", - "src": "9402:32:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "9391:7:62", - "nodeType": "YulIdentifier", - "src": "9391:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "9454:5:62", - "nodeType": "YulIdentifier", - "src": "9454:5:62" - }, - { - "kind": "number", - "nativeSrc": "9461:2:62", - "nodeType": "YulLiteral", - "src": "9461:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9450:3:62", - "nodeType": "YulIdentifier", - "src": "9450:3:62" - }, - "nativeSrc": "9450:14:62", - "nodeType": "YulFunctionCall", - "src": "9450:14:62" - }, - { - "name": "value_2", - "nativeSrc": "9466:7:62", - "nodeType": "YulIdentifier", - "src": "9466:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9443:6:62", - "nodeType": "YulIdentifier", - "src": "9443:6:62" - }, - "nativeSrc": "9443:31:62", - "nodeType": "YulFunctionCall", - "src": "9443:31:62" - }, - "nativeSrc": "9443:31:62", - "nodeType": "YulExpressionStatement", - "src": "9443:31:62" - }, - { - "nativeSrc": "9483:16:62", - "nodeType": "YulVariableDeclaration", - "src": "9483:16:62", - "value": { - "kind": "number", - "nativeSrc": "9498:1:62", - "nodeType": "YulLiteral", - "src": "9498:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_3", - "nativeSrc": "9487:7:62", - "nodeType": "YulTypedName", - "src": "9487:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "9508:43:62", - "nodeType": "YulAssignment", - "src": "9508:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9536:9:62", - "nodeType": "YulIdentifier", - "src": "9536:9:62" - }, - { - "kind": "number", - "nativeSrc": "9547:2:62", - "nodeType": "YulLiteral", - "src": "9547:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9532:3:62", - "nodeType": "YulIdentifier", - "src": "9532:3:62" - }, - "nativeSrc": "9532:18:62", - "nodeType": "YulFunctionCall", - "src": "9532:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9519:12:62", - "nodeType": "YulIdentifier", - "src": "9519:12:62" - }, - "nativeSrc": "9519:32:62", - "nodeType": "YulFunctionCall", - "src": "9519:32:62" - }, - "variableNames": [ - { - "name": "value_3", - "nativeSrc": "9508:7:62", - "nodeType": "YulIdentifier", - "src": "9508:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "9571:5:62", - "nodeType": "YulIdentifier", - "src": "9571:5:62" - }, - { - "kind": "number", - "nativeSrc": "9578:2:62", - "nodeType": "YulLiteral", - "src": "9578:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9567:3:62", - "nodeType": "YulIdentifier", - "src": "9567:3:62" - }, - "nativeSrc": "9567:14:62", - "nodeType": "YulFunctionCall", - "src": "9567:14:62" - }, - { - "name": "value_3", - "nativeSrc": "9583:7:62", - "nodeType": "YulIdentifier", - "src": "9583:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9560:6:62", - "nodeType": "YulIdentifier", - "src": "9560:6:62" - }, - "nativeSrc": "9560:31:62", - "nodeType": "YulFunctionCall", - "src": "9560:31:62" - }, - "nativeSrc": "9560:31:62", - "nodeType": "YulExpressionStatement", - "src": "9560:31:62" - }, - { - "nativeSrc": "9600:16:62", - "nodeType": "YulVariableDeclaration", - "src": "9600:16:62", - "value": { - "kind": "number", - "nativeSrc": "9615:1:62", - "nodeType": "YulLiteral", - "src": "9615:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_4", - "nativeSrc": "9604:7:62", - "nodeType": "YulTypedName", - "src": "9604:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "9625:43:62", - "nodeType": "YulAssignment", - "src": "9625:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9653:9:62", - "nodeType": "YulIdentifier", - "src": "9653:9:62" - }, - { - "kind": "number", - "nativeSrc": "9664:2:62", - "nodeType": "YulLiteral", - "src": "9664:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9649:3:62", - "nodeType": "YulIdentifier", - "src": "9649:3:62" - }, - "nativeSrc": "9649:18:62", - "nodeType": "YulFunctionCall", - "src": "9649:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9636:12:62", - "nodeType": "YulIdentifier", - "src": "9636:12:62" - }, - "nativeSrc": "9636:32:62", - "nodeType": "YulFunctionCall", - "src": "9636:32:62" - }, - "variableNames": [ - { - "name": "value_4", - "nativeSrc": "9625:7:62", - "nodeType": "YulIdentifier", - "src": "9625:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "9688:5:62", - "nodeType": "YulIdentifier", - "src": "9688:5:62" - }, - { - "kind": "number", - "nativeSrc": "9695:2:62", - "nodeType": "YulLiteral", - "src": "9695:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9684:3:62", - "nodeType": "YulIdentifier", - "src": "9684:3:62" - }, - "nativeSrc": "9684:14:62", - "nodeType": "YulFunctionCall", - "src": "9684:14:62" - }, - { - "name": "value_4", - "nativeSrc": "9700:7:62", - "nodeType": "YulIdentifier", - "src": "9700:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9677:6:62", - "nodeType": "YulIdentifier", - "src": "9677:6:62" - }, - "nativeSrc": "9677:31:62", - "nodeType": "YulFunctionCall", - "src": "9677:31:62" - }, - "nativeSrc": "9677:31:62", - "nodeType": "YulExpressionStatement", - "src": "9677:31:62" - }, - { - "nativeSrc": "9717:16:62", - "nodeType": "YulVariableDeclaration", - "src": "9717:16:62", - "value": { - "kind": "number", - "nativeSrc": "9732:1:62", - "nodeType": "YulLiteral", - "src": "9732:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_5", - "nativeSrc": "9721:7:62", - "nodeType": "YulTypedName", - "src": "9721:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "9742:44:62", - "nodeType": "YulAssignment", - "src": "9742:44:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9770:9:62", - "nodeType": "YulIdentifier", - "src": "9770:9:62" - }, - { - "kind": "number", - "nativeSrc": "9781:3:62", - "nodeType": "YulLiteral", - "src": "9781:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9766:3:62", - "nodeType": "YulIdentifier", - "src": "9766:3:62" - }, - "nativeSrc": "9766:19:62", - "nodeType": "YulFunctionCall", - "src": "9766:19:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9753:12:62", - "nodeType": "YulIdentifier", - "src": "9753:12:62" - }, - "nativeSrc": "9753:33:62", - "nodeType": "YulFunctionCall", - "src": "9753:33:62" - }, - "variableNames": [ - { - "name": "value_5", - "nativeSrc": "9742:7:62", - "nodeType": "YulIdentifier", - "src": "9742:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "9806:5:62", - "nodeType": "YulIdentifier", - "src": "9806:5:62" - }, - { - "kind": "number", - "nativeSrc": "9813:3:62", - "nodeType": "YulLiteral", - "src": "9813:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9802:3:62", - "nodeType": "YulIdentifier", - "src": "9802:3:62" - }, - "nativeSrc": "9802:15:62", - "nodeType": "YulFunctionCall", - "src": "9802:15:62" - }, - { - "name": "value_5", - "nativeSrc": "9819:7:62", - "nodeType": "YulIdentifier", - "src": "9819:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9795:6:62", - "nodeType": "YulIdentifier", - "src": "9795:6:62" - }, - "nativeSrc": "9795:32:62", - "nodeType": "YulFunctionCall", - "src": "9795:32:62" - }, - "nativeSrc": "9795:32:62", - "nodeType": "YulExpressionStatement", - "src": "9795:32:62" - }, - { - "nativeSrc": "9836:48:62", - "nodeType": "YulVariableDeclaration", - "src": "9836:48:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9868:9:62", - "nodeType": "YulIdentifier", - "src": "9868:9:62" - }, - { - "kind": "number", - "nativeSrc": "9879:3:62", - "nodeType": "YulLiteral", - "src": "9879:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9864:3:62", - "nodeType": "YulIdentifier", - "src": "9864:3:62" - }, - "nativeSrc": "9864:19:62", - "nodeType": "YulFunctionCall", - "src": "9864:19:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9851:12:62", - "nodeType": "YulIdentifier", - "src": "9851:12:62" - }, - "nativeSrc": "9851:33:62", - "nodeType": "YulFunctionCall", - "src": "9851:33:62" - }, - "variables": [ - { - "name": "value_6", - "nativeSrc": "9840:7:62", - "nodeType": "YulTypedName", - "src": "9840:7:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "9936:16:62", - "nodeType": "YulBlock", - "src": "9936:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9945:1:62", - "nodeType": "YulLiteral", - "src": "9945:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9948:1:62", - "nodeType": "YulLiteral", - "src": "9948:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "9938:6:62", - "nodeType": "YulIdentifier", - "src": "9938:6:62" - }, - "nativeSrc": "9938:12:62", - "nodeType": "YulFunctionCall", - "src": "9938:12:62" - }, - "nativeSrc": "9938:12:62", - "nodeType": "YulExpressionStatement", - "src": "9938:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_6", - "nativeSrc": "9906:7:62", - "nodeType": "YulIdentifier", - "src": "9906:7:62" - }, - { - "arguments": [ - { - "name": "value_6", - "nativeSrc": "9919:7:62", - "nodeType": "YulIdentifier", - "src": "9919:7:62" - }, - { - "kind": "number", - "nativeSrc": "9928:4:62", - "nodeType": "YulLiteral", - "src": "9928:4:62", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "9915:3:62", - "nodeType": "YulIdentifier", - "src": "9915:3:62" - }, - "nativeSrc": "9915:18:62", - "nodeType": "YulFunctionCall", - "src": "9915:18:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "9903:2:62", - "nodeType": "YulIdentifier", - "src": "9903:2:62" - }, - "nativeSrc": "9903:31:62", - "nodeType": "YulFunctionCall", - "src": "9903:31:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "9896:6:62", - "nodeType": "YulIdentifier", - "src": "9896:6:62" - }, - "nativeSrc": "9896:39:62", - "nodeType": "YulFunctionCall", - "src": "9896:39:62" - }, - "nativeSrc": "9893:59:62", - "nodeType": "YulIf", - "src": "9893:59:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "9972:5:62", - "nodeType": "YulIdentifier", - "src": "9972:5:62" - }, - { - "kind": "number", - "nativeSrc": "9979:3:62", - "nodeType": "YulLiteral", - "src": "9979:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9968:3:62", - "nodeType": "YulIdentifier", - "src": "9968:3:62" - }, - "nativeSrc": "9968:15:62", - "nodeType": "YulFunctionCall", - "src": "9968:15:62" - }, - { - "name": "value_6", - "nativeSrc": "9985:7:62", - "nodeType": "YulIdentifier", - "src": "9985:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9961:6:62", - "nodeType": "YulIdentifier", - "src": "9961:6:62" - }, - "nativeSrc": "9961:32:62", - "nodeType": "YulFunctionCall", - "src": "9961:32:62" - }, - "nativeSrc": "9961:32:62", - "nodeType": "YulExpressionStatement", - "src": "9961:32:62" - } - ] - }, - "name": "abi_decode_struct_State", - "nativeSrc": "9096:903:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "9129:9:62", - "nodeType": "YulTypedName", - "src": "9129:9:62", - "type": "" - }, - { - "name": "end", - "nativeSrc": "9140:3:62", - "nodeType": "YulTypedName", - "src": "9140:3:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "9148:5:62", - "nodeType": "YulTypedName", - "src": "9148:5:62", - "type": "" - } - ], - "src": "9096:903:62" - }, - { - "body": { - "nativeSrc": "10098:131:62", - "nodeType": "YulBlock", - "src": "10098:131:62", - "statements": [ - { - "body": { - "nativeSrc": "10145:16:62", - "nodeType": "YulBlock", - "src": "10145:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10154:1:62", - "nodeType": "YulLiteral", - "src": "10154:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10157:1:62", - "nodeType": "YulLiteral", - "src": "10157:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10147:6:62", - "nodeType": "YulIdentifier", - "src": "10147:6:62" - }, - "nativeSrc": "10147:12:62", - "nodeType": "YulFunctionCall", - "src": "10147:12:62" - }, - "nativeSrc": "10147:12:62", - "nodeType": "YulExpressionStatement", - "src": "10147:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "10119:7:62", - "nodeType": "YulIdentifier", - "src": "10119:7:62" - }, - { - "name": "headStart", - "nativeSrc": "10128:9:62", - "nodeType": "YulIdentifier", - "src": "10128:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "10115:3:62", - "nodeType": "YulIdentifier", - "src": "10115:3:62" - }, - "nativeSrc": "10115:23:62", - "nodeType": "YulFunctionCall", - "src": "10115:23:62" - }, - { - "kind": "number", - "nativeSrc": "10140:3:62", - "nodeType": "YulLiteral", - "src": "10140:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "10111:3:62", - "nodeType": "YulIdentifier", - "src": "10111:3:62" - }, - "nativeSrc": "10111:33:62", - "nodeType": "YulFunctionCall", - "src": "10111:33:62" - }, - "nativeSrc": "10108:53:62", - "nodeType": "YulIf", - "src": "10108:53:62" - }, - { - "nativeSrc": "10170:53:62", - "nodeType": "YulAssignment", - "src": "10170:53:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10204:9:62", - "nodeType": "YulIdentifier", - "src": "10204:9:62" - }, - { - "name": "dataEnd", - "nativeSrc": "10215:7:62", - "nodeType": "YulIdentifier", - "src": "10215:7:62" - } - ], - "functionName": { - "name": "abi_decode_struct_State", - "nativeSrc": "10180:23:62", - "nodeType": "YulIdentifier", - "src": "10180:23:62" - }, - "nativeSrc": "10180:43:62", - "nodeType": "YulFunctionCall", - "src": "10180:43:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "10170:6:62", - "nodeType": "YulIdentifier", - "src": "10170:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_State_$11699_memory_ptr", - "nativeSrc": "10004:225:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "10064:9:62", - "nodeType": "YulTypedName", - "src": "10064:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "10075:7:62", - "nodeType": "YulTypedName", - "src": "10075:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "10087:6:62", - "nodeType": "YulTypedName", - "src": "10087:6:62", - "type": "" - } - ], - "src": "10004:225:62" - }, - { - "body": { - "nativeSrc": "10369:203:62", - "nodeType": "YulBlock", - "src": "10369:203:62", - "statements": [ - { - "body": { - "nativeSrc": "10416:16:62", - "nodeType": "YulBlock", - "src": "10416:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10425:1:62", - "nodeType": "YulLiteral", - "src": "10425:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10428:1:62", - "nodeType": "YulLiteral", - "src": "10428:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10418:6:62", - "nodeType": "YulIdentifier", - "src": "10418:6:62" - }, - "nativeSrc": "10418:12:62", - "nodeType": "YulFunctionCall", - "src": "10418:12:62" - }, - "nativeSrc": "10418:12:62", - "nodeType": "YulExpressionStatement", - "src": "10418:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "10390:7:62", - "nodeType": "YulIdentifier", - "src": "10390:7:62" - }, - { - "name": "headStart", - "nativeSrc": "10399:9:62", - "nodeType": "YulIdentifier", - "src": "10399:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "10386:3:62", - "nodeType": "YulIdentifier", - "src": "10386:3:62" - }, - "nativeSrc": "10386:23:62", - "nodeType": "YulFunctionCall", - "src": "10386:23:62" - }, - { - "kind": "number", - "nativeSrc": "10411:3:62", - "nodeType": "YulLiteral", - "src": "10411:3:62", - "type": "", - "value": "384" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "10382:3:62", - "nodeType": "YulIdentifier", - "src": "10382:3:62" - }, - "nativeSrc": "10382:33:62", - "nodeType": "YulFunctionCall", - "src": "10382:33:62" - }, - "nativeSrc": "10379:53:62", - "nodeType": "YulIf", - "src": "10379:53:62" - }, - { - "nativeSrc": "10441:53:62", - "nodeType": "YulAssignment", - "src": "10441:53:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10475:9:62", - "nodeType": "YulIdentifier", - "src": "10475:9:62" - }, - { - "name": "dataEnd", - "nativeSrc": "10486:7:62", - "nodeType": "YulIdentifier", - "src": "10486:7:62" - } - ], - "functionName": { - "name": "abi_decode_struct_State", - "nativeSrc": "10451:23:62", - "nodeType": "YulIdentifier", - "src": "10451:23:62" - }, - "nativeSrc": "10451:43:62", - "nodeType": "YulFunctionCall", - "src": "10451:43:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "10441:6:62", - "nodeType": "YulIdentifier", - "src": "10441:6:62" - } - ] - }, - { - "nativeSrc": "10503:63:62", - "nodeType": "YulAssignment", - "src": "10503:63:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10541:9:62", - "nodeType": "YulIdentifier", - "src": "10541:9:62" - }, - { - "kind": "number", - "nativeSrc": "10552:3:62", - "nodeType": "YulLiteral", - "src": "10552:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10537:3:62", - "nodeType": "YulIdentifier", - "src": "10537:3:62" - }, - "nativeSrc": "10537:19:62", - "nodeType": "YulFunctionCall", - "src": "10537:19:62" - }, - { - "name": "dataEnd", - "nativeSrc": "10558:7:62", - "nodeType": "YulIdentifier", - "src": "10558:7:62" - } - ], - "functionName": { - "name": "abi_decode_struct_State", - "nativeSrc": "10513:23:62", - "nodeType": "YulIdentifier", - "src": "10513:23:62" - }, - "nativeSrc": "10513:53:62", - "nodeType": "YulFunctionCall", - "src": "10513:53:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "10503:6:62", - "nodeType": "YulIdentifier", - "src": "10503:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_State_$11699_memory_ptrt_struct$_State_$11699_memory_ptr", - "nativeSrc": "10234:338:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "10327:9:62", - "nodeType": "YulTypedName", - "src": "10327:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "10338:7:62", - "nodeType": "YulTypedName", - "src": "10338:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "10350:6:62", - "nodeType": "YulTypedName", - "src": "10350:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "10358:6:62", - "nodeType": "YulTypedName", - "src": "10358:6:62", - "type": "" - } - ], - "src": "10234:338:62" - }, - { - "body": { - "nativeSrc": "10646:176:62", - "nodeType": "YulBlock", - "src": "10646:176:62", - "statements": [ - { - "body": { - "nativeSrc": "10692:16:62", - "nodeType": "YulBlock", - "src": "10692:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10701:1:62", - "nodeType": "YulLiteral", - "src": "10701:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10704:1:62", - "nodeType": "YulLiteral", - "src": "10704:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10694:6:62", - "nodeType": "YulIdentifier", - "src": "10694:6:62" - }, - "nativeSrc": "10694:12:62", - "nodeType": "YulFunctionCall", - "src": "10694:12:62" - }, - "nativeSrc": "10694:12:62", - "nodeType": "YulExpressionStatement", - "src": "10694:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "10667:7:62", - "nodeType": "YulIdentifier", - "src": "10667:7:62" - }, - { - "name": "headStart", - "nativeSrc": "10676:9:62", - "nodeType": "YulIdentifier", - "src": "10676:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "10663:3:62", - "nodeType": "YulIdentifier", - "src": "10663:3:62" - }, - "nativeSrc": "10663:23:62", - "nodeType": "YulFunctionCall", - "src": "10663:23:62" - }, - { - "kind": "number", - "nativeSrc": "10688:2:62", - "nodeType": "YulLiteral", - "src": "10688:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "10659:3:62", - "nodeType": "YulIdentifier", - "src": "10659:3:62" - }, - "nativeSrc": "10659:32:62", - "nodeType": "YulFunctionCall", - "src": "10659:32:62" - }, - "nativeSrc": "10656:52:62", - "nodeType": "YulIf", - "src": "10656:52:62" - }, - { - "nativeSrc": "10717:36:62", - "nodeType": "YulVariableDeclaration", - "src": "10717:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10743:9:62", - "nodeType": "YulIdentifier", - "src": "10743:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "10730:12:62", - "nodeType": "YulIdentifier", - "src": "10730:12:62" - }, - "nativeSrc": "10730:23:62", - "nodeType": "YulFunctionCall", - "src": "10730:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "10721:5:62", - "nodeType": "YulTypedName", - "src": "10721:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "10786:5:62", - "nodeType": "YulIdentifier", - "src": "10786:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "10762:23:62", - "nodeType": "YulIdentifier", - "src": "10762:23:62" - }, - "nativeSrc": "10762:30:62", - "nodeType": "YulFunctionCall", - "src": "10762:30:62" - }, - "nativeSrc": "10762:30:62", - "nodeType": "YulExpressionStatement", - "src": "10762:30:62" - }, - { - "nativeSrc": "10801:15:62", - "nodeType": "YulAssignment", - "src": "10801:15:62", - "value": { - "name": "value", - "nativeSrc": "10811:5:62", - "nodeType": "YulIdentifier", - "src": "10811:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "10801:6:62", - "nodeType": "YulIdentifier", - "src": "10801:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint64", - "nativeSrc": "10577:245:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "10612:9:62", - "nodeType": "YulTypedName", - "src": "10612:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "10623:7:62", - "nodeType": "YulTypedName", - "src": "10623:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "10635:6:62", - "nodeType": "YulTypedName", - "src": "10635:6:62", - "type": "" - } - ], - "src": "10577:245:62" - }, - { - "body": { - "nativeSrc": "10945:99:62", - "nodeType": "YulBlock", - "src": "10945:99:62", - "statements": [ - { - "nativeSrc": "10955:26:62", - "nodeType": "YulAssignment", - "src": "10955:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10967:9:62", - "nodeType": "YulIdentifier", - "src": "10967:9:62" - }, - { - "kind": "number", - "nativeSrc": "10978:2:62", - "nodeType": "YulLiteral", - "src": "10978:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10963:3:62", - "nodeType": "YulIdentifier", - "src": "10963:3:62" - }, - "nativeSrc": "10963:18:62", - "nodeType": "YulFunctionCall", - "src": "10963:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "10955:4:62", - "nodeType": "YulIdentifier", - "src": "10955:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "11020:6:62", - "nodeType": "YulIdentifier", - "src": "11020:6:62" - }, - { - "name": "headStart", - "nativeSrc": "11028:9:62", - "nodeType": "YulIdentifier", - "src": "11028:9:62" - } - ], - "functionName": { - "name": "abi_encode_enum_DisputeStatus", - "nativeSrc": "10990:29:62", - "nodeType": "YulIdentifier", - "src": "10990:29:62" - }, - "nativeSrc": "10990:48:62", - "nodeType": "YulFunctionCall", - "src": "10990:48:62" - }, - "nativeSrc": "10990:48:62", - "nodeType": "YulExpressionStatement", - "src": "10990:48:62" - } - ] - }, - "name": "abi_encode_tuple_t_enum$_DisputeStatus_$10718__to_t_uint8__fromStack_reversed", - "nativeSrc": "10827:217:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "10914:9:62", - "nodeType": "YulTypedName", - "src": "10914:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "10925:6:62", - "nodeType": "YulTypedName", - "src": "10925:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "10936:4:62", - "nodeType": "YulTypedName", - "src": "10936:4:62", - "type": "" - } - ], - "src": "10827:217:62" - }, - { - "body": { - "nativeSrc": "11081:95:62", - "nodeType": "YulBlock", - "src": "11081:95:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11098:1:62", - "nodeType": "YulLiteral", - "src": "11098:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11105:3:62", - "nodeType": "YulLiteral", - "src": "11105:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "11110:10:62", - "nodeType": "YulLiteral", - "src": "11110:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "11101:3:62", - "nodeType": "YulIdentifier", - "src": "11101:3:62" - }, - "nativeSrc": "11101:20:62", - "nodeType": "YulFunctionCall", - "src": "11101:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11091:6:62", - "nodeType": "YulIdentifier", - "src": "11091:6:62" - }, - "nativeSrc": "11091:31:62", - "nodeType": "YulFunctionCall", - "src": "11091:31:62" - }, - "nativeSrc": "11091:31:62", - "nodeType": "YulExpressionStatement", - "src": "11091:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11138:1:62", - "nodeType": "YulLiteral", - "src": "11138:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "11141:4:62", - "nodeType": "YulLiteral", - "src": "11141:4:62", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11131:6:62", - "nodeType": "YulIdentifier", - "src": "11131:6:62" - }, - "nativeSrc": "11131:15:62", - "nodeType": "YulFunctionCall", - "src": "11131:15:62" - }, - "nativeSrc": "11131:15:62", - "nodeType": "YulExpressionStatement", - "src": "11131:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11162:1:62", - "nodeType": "YulLiteral", - "src": "11162:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11165:4:62", - "nodeType": "YulLiteral", - "src": "11165:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11155:6:62", - "nodeType": "YulIdentifier", - "src": "11155:6:62" - }, - "nativeSrc": "11155:15:62", - "nodeType": "YulFunctionCall", - "src": "11155:15:62" - }, - "nativeSrc": "11155:15:62", - "nodeType": "YulExpressionStatement", - "src": "11155:15:62" - } - ] - }, - "name": "panic_error_0x11", - "nativeSrc": "11049:127:62", - "nodeType": "YulFunctionDefinition", - "src": "11049:127:62" - }, - { - "body": { - "nativeSrc": "11229:77:62", - "nodeType": "YulBlock", - "src": "11229:77:62", - "statements": [ - { - "nativeSrc": "11239:16:62", - "nodeType": "YulAssignment", - "src": "11239:16:62", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "11250:1:62", - "nodeType": "YulIdentifier", - "src": "11250:1:62" - }, - { - "name": "y", - "nativeSrc": "11253:1:62", - "nodeType": "YulIdentifier", - "src": "11253:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11246:3:62", - "nodeType": "YulIdentifier", - "src": "11246:3:62" - }, - "nativeSrc": "11246:9:62", - "nodeType": "YulFunctionCall", - "src": "11246:9:62" - }, - "variableNames": [ - { - "name": "sum", - "nativeSrc": "11239:3:62", - "nodeType": "YulIdentifier", - "src": "11239:3:62" - } - ] - }, - { - "body": { - "nativeSrc": "11278:22:62", - "nodeType": "YulBlock", - "src": "11278:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "11280:16:62", - "nodeType": "YulIdentifier", - "src": "11280:16:62" - }, - "nativeSrc": "11280:18:62", - "nodeType": "YulFunctionCall", - "src": "11280:18:62" - }, - "nativeSrc": "11280:18:62", - "nodeType": "YulExpressionStatement", - "src": "11280:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nativeSrc": "11270:1:62", - "nodeType": "YulIdentifier", - "src": "11270:1:62" - }, - { - "name": "sum", - "nativeSrc": "11273:3:62", - "nodeType": "YulIdentifier", - "src": "11273:3:62" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "11267:2:62", - "nodeType": "YulIdentifier", - "src": "11267:2:62" - }, - "nativeSrc": "11267:10:62", - "nodeType": "YulFunctionCall", - "src": "11267:10:62" - }, - "nativeSrc": "11264:36:62", - "nodeType": "YulIf", - "src": "11264:36:62" - } - ] - }, - "name": "checked_add_t_uint256", - "nativeSrc": "11181:125:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "11212:1:62", - "nodeType": "YulTypedName", - "src": "11212:1:62", - "type": "" - }, - { - "name": "y", - "nativeSrc": "11215:1:62", - "nodeType": "YulTypedName", - "src": "11215:1:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nativeSrc": "11221:3:62", - "nodeType": "YulTypedName", - "src": "11221:3:62", - "type": "" - } - ], - "src": "11181:125:62" - }, - { - "body": { - "nativeSrc": "11419:101:62", - "nodeType": "YulBlock", - "src": "11419:101:62", - "statements": [ - { - "nativeSrc": "11429:26:62", - "nodeType": "YulAssignment", - "src": "11429:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11441:9:62", - "nodeType": "YulIdentifier", - "src": "11441:9:62" - }, - { - "kind": "number", - "nativeSrc": "11452:2:62", - "nodeType": "YulLiteral", - "src": "11452:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11437:3:62", - "nodeType": "YulIdentifier", - "src": "11437:3:62" - }, - "nativeSrc": "11437:18:62", - "nodeType": "YulFunctionCall", - "src": "11437:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "11429:4:62", - "nodeType": "YulIdentifier", - "src": "11429:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11471:9:62", - "nodeType": "YulIdentifier", - "src": "11471:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "11486:6:62", - "nodeType": "YulIdentifier", - "src": "11486:6:62" - }, - { - "kind": "number", - "nativeSrc": "11494:18:62", - "nodeType": "YulLiteral", - "src": "11494:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "11482:3:62", - "nodeType": "YulIdentifier", - "src": "11482:3:62" - }, - "nativeSrc": "11482:31:62", - "nodeType": "YulFunctionCall", - "src": "11482:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11464:6:62", - "nodeType": "YulIdentifier", - "src": "11464:6:62" - }, - "nativeSrc": "11464:50:62", - "nodeType": "YulFunctionCall", - "src": "11464:50:62" - }, - "nativeSrc": "11464:50:62", - "nodeType": "YulExpressionStatement", - "src": "11464:50:62" - } - ] - }, - "name": "abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed", - "nativeSrc": "11311:209:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11388:9:62", - "nodeType": "YulTypedName", - "src": "11388:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "11399:6:62", - "nodeType": "YulTypedName", - "src": "11399:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "11410:4:62", - "nodeType": "YulTypedName", - "src": "11410:4:62", - "type": "" - } - ], - "src": "11311:209:62" - }, - { - "body": { - "nativeSrc": "11654:171:62", - "nodeType": "YulBlock", - "src": "11654:171:62", - "statements": [ - { - "nativeSrc": "11664:26:62", - "nodeType": "YulAssignment", - "src": "11664:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11676:9:62", - "nodeType": "YulIdentifier", - "src": "11676:9:62" - }, - { - "kind": "number", - "nativeSrc": "11687:2:62", - "nodeType": "YulLiteral", - "src": "11687:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11672:3:62", - "nodeType": "YulIdentifier", - "src": "11672:3:62" - }, - "nativeSrc": "11672:18:62", - "nodeType": "YulFunctionCall", - "src": "11672:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "11664:4:62", - "nodeType": "YulIdentifier", - "src": "11664:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11706:9:62", - "nodeType": "YulIdentifier", - "src": "11706:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "11721:6:62", - "nodeType": "YulIdentifier", - "src": "11721:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11737:3:62", - "nodeType": "YulLiteral", - "src": "11737:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "11742:1:62", - "nodeType": "YulLiteral", - "src": "11742:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "11733:3:62", - "nodeType": "YulIdentifier", - "src": "11733:3:62" - }, - "nativeSrc": "11733:11:62", - "nodeType": "YulFunctionCall", - "src": "11733:11:62" - }, - { - "kind": "number", - "nativeSrc": "11746:1:62", - "nodeType": "YulLiteral", - "src": "11746:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "11729:3:62", - "nodeType": "YulIdentifier", - "src": "11729:3:62" - }, - "nativeSrc": "11729:19:62", - "nodeType": "YulFunctionCall", - "src": "11729:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "11717:3:62", - "nodeType": "YulIdentifier", - "src": "11717:3:62" - }, - "nativeSrc": "11717:32:62", - "nodeType": "YulFunctionCall", - "src": "11717:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11699:6:62", - "nodeType": "YulIdentifier", - "src": "11699:6:62" - }, - "nativeSrc": "11699:51:62", - "nodeType": "YulFunctionCall", - "src": "11699:51:62" - }, - "nativeSrc": "11699:51:62", - "nodeType": "YulExpressionStatement", - "src": "11699:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11770:9:62", - "nodeType": "YulIdentifier", - "src": "11770:9:62" - }, - { - "kind": "number", - "nativeSrc": "11781:2:62", - "nodeType": "YulLiteral", - "src": "11781:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11766:3:62", - "nodeType": "YulIdentifier", - "src": "11766:3:62" - }, - "nativeSrc": "11766:18:62", - "nodeType": "YulFunctionCall", - "src": "11766:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "11790:6:62", - "nodeType": "YulIdentifier", - "src": "11790:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11806:3:62", - "nodeType": "YulLiteral", - "src": "11806:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "11811:1:62", - "nodeType": "YulLiteral", - "src": "11811:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "11802:3:62", - "nodeType": "YulIdentifier", - "src": "11802:3:62" - }, - "nativeSrc": "11802:11:62", - "nodeType": "YulFunctionCall", - "src": "11802:11:62" - }, - { - "kind": "number", - "nativeSrc": "11815:1:62", - "nodeType": "YulLiteral", - "src": "11815:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "11798:3:62", - "nodeType": "YulIdentifier", - "src": "11798:3:62" - }, - "nativeSrc": "11798:19:62", - "nodeType": "YulFunctionCall", - "src": "11798:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "11786:3:62", - "nodeType": "YulIdentifier", - "src": "11786:3:62" - }, - "nativeSrc": "11786:32:62", - "nodeType": "YulFunctionCall", - "src": "11786:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11759:6:62", - "nodeType": "YulIdentifier", - "src": "11759:6:62" - }, - "nativeSrc": "11759:60:62", - "nodeType": "YulFunctionCall", - "src": "11759:60:62" - }, - "nativeSrc": "11759:60:62", - "nodeType": "YulExpressionStatement", - "src": "11759:60:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nativeSrc": "11525:300:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11615:9:62", - "nodeType": "YulTypedName", - "src": "11615:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "11626:6:62", - "nodeType": "YulTypedName", - "src": "11626:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "11634:6:62", - "nodeType": "YulTypedName", - "src": "11634:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "11645:4:62", - "nodeType": "YulTypedName", - "src": "11645:4:62", - "type": "" - } - ], - "src": "11525:300:62" - }, - { - "body": { - "nativeSrc": "11889:77:62", - "nodeType": "YulBlock", - "src": "11889:77:62", - "statements": [ - { - "nativeSrc": "11899:22:62", - "nodeType": "YulAssignment", - "src": "11899:22:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "11914:6:62", - "nodeType": "YulIdentifier", - "src": "11914:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "11908:5:62", - "nodeType": "YulIdentifier", - "src": "11908:5:62" - }, - "nativeSrc": "11908:13:62", - "nodeType": "YulFunctionCall", - "src": "11908:13:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "11899:5:62", - "nodeType": "YulIdentifier", - "src": "11899:5:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "11954:5:62", - "nodeType": "YulIdentifier", - "src": "11954:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint32", - "nativeSrc": "11930:23:62", - "nodeType": "YulIdentifier", - "src": "11930:23:62" - }, - "nativeSrc": "11930:30:62", - "nodeType": "YulFunctionCall", - "src": "11930:30:62" - }, - "nativeSrc": "11930:30:62", - "nodeType": "YulExpressionStatement", - "src": "11930:30:62" - } - ] - }, - "name": "abi_decode_uint32_fromMemory", - "nativeSrc": "11830:136:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "11868:6:62", - "nodeType": "YulTypedName", - "src": "11868:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "11879:5:62", - "nodeType": "YulTypedName", - "src": "11879:5:62", - "type": "" - } - ], - "src": "11830:136:62" - }, - { - "body": { - "nativeSrc": "12030:77:62", - "nodeType": "YulBlock", - "src": "12030:77:62", - "statements": [ - { - "nativeSrc": "12040:22:62", - "nodeType": "YulAssignment", - "src": "12040:22:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "12055:6:62", - "nodeType": "YulIdentifier", - "src": "12055:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "12049:5:62", - "nodeType": "YulIdentifier", - "src": "12049:5:62" - }, - "nativeSrc": "12049:13:62", - "nodeType": "YulFunctionCall", - "src": "12049:13:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "12040:5:62", - "nodeType": "YulIdentifier", - "src": "12040:5:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "12095:5:62", - "nodeType": "YulIdentifier", - "src": "12095:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "12071:23:62", - "nodeType": "YulIdentifier", - "src": "12071:23:62" - }, - "nativeSrc": "12071:30:62", - "nodeType": "YulFunctionCall", - "src": "12071:30:62" - }, - "nativeSrc": "12071:30:62", - "nodeType": "YulExpressionStatement", - "src": "12071:30:62" - } - ] - }, - "name": "abi_decode_uint64_fromMemory", - "nativeSrc": "11971:136:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "12009:6:62", - "nodeType": "YulTypedName", - "src": "12009:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "12020:5:62", - "nodeType": "YulTypedName", - "src": "12020:5:62", - "type": "" - } - ], - "src": "11971:136:62" - }, - { - "body": { - "nativeSrc": "12220:1010:62", - "nodeType": "YulBlock", - "src": "12220:1010:62", - "statements": [ - { - "nativeSrc": "12230:43:62", - "nodeType": "YulVariableDeclaration", - "src": "12230:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "12248:7:62", - "nodeType": "YulIdentifier", - "src": "12248:7:62" - }, - { - "name": "headStart", - "nativeSrc": "12257:9:62", - "nodeType": "YulIdentifier", - "src": "12257:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "12244:3:62", - "nodeType": "YulIdentifier", - "src": "12244:3:62" - }, - "nativeSrc": "12244:23:62", - "nodeType": "YulFunctionCall", - "src": "12244:23:62" - }, - { - "kind": "number", - "nativeSrc": "12269:3:62", - "nodeType": "YulLiteral", - "src": "12269:3:62", - "type": "", - "value": "288" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "12240:3:62", - "nodeType": "YulIdentifier", - "src": "12240:3:62" - }, - "nativeSrc": "12240:33:62", - "nodeType": "YulFunctionCall", - "src": "12240:33:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "12234:2:62", - "nodeType": "YulTypedName", - "src": "12234:2:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "12288:16:62", - "nodeType": "YulBlock", - "src": "12288:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12297:1:62", - "nodeType": "YulLiteral", - "src": "12297:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12300:1:62", - "nodeType": "YulLiteral", - "src": "12300:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12290:6:62", - "nodeType": "YulIdentifier", - "src": "12290:6:62" - }, - "nativeSrc": "12290:12:62", - "nodeType": "YulFunctionCall", - "src": "12290:12:62" - }, - "nativeSrc": "12290:12:62", - "nodeType": "YulExpressionStatement", - "src": "12290:12:62" - } - ] - }, - "condition": { - "name": "_1", - "nativeSrc": "12285:2:62", - "nodeType": "YulIdentifier", - "src": "12285:2:62" - }, - "nativeSrc": "12282:22:62", - "nodeType": "YulIf", - "src": "12282:22:62" - }, - { - "nativeSrc": "12313:7:62", - "nodeType": "YulAssignment", - "src": "12313:7:62", - "value": { - "kind": "number", - "nativeSrc": "12319:1:62", - "nodeType": "YulLiteral", - "src": "12319:1:62", - "type": "", - "value": "0" - }, - "variableNames": [ - { - "name": "_1", - "nativeSrc": "12313:2:62", - "nodeType": "YulIdentifier", - "src": "12313:2:62" - } - ] - }, - { - "nativeSrc": "12329:30:62", - "nodeType": "YulVariableDeclaration", - "src": "12329:30:62", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory", - "nativeSrc": "12342:15:62", - "nodeType": "YulIdentifier", - "src": "12342:15:62" - }, - "nativeSrc": "12342:17:62", - "nodeType": "YulFunctionCall", - "src": "12342:17:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "12333:5:62", - "nodeType": "YulTypedName", - "src": "12333:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "12368:17:62", - "nodeType": "YulVariableDeclaration", - "src": "12368:17:62", - "value": { - "name": "_1", - "nativeSrc": "12383:2:62", - "nodeType": "YulIdentifier", - "src": "12383:2:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "12372:7:62", - "nodeType": "YulTypedName", - "src": "12372:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "12394:27:62", - "nodeType": "YulAssignment", - "src": "12394:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12411:9:62", - "nodeType": "YulIdentifier", - "src": "12411:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "12405:5:62", - "nodeType": "YulIdentifier", - "src": "12405:5:62" - }, - "nativeSrc": "12405:16:62", - "nodeType": "YulFunctionCall", - "src": "12405:16:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "12394:7:62", - "nodeType": "YulIdentifier", - "src": "12394:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "12437:5:62", - "nodeType": "YulIdentifier", - "src": "12437:5:62" - }, - { - "name": "value_1", - "nativeSrc": "12444:7:62", - "nodeType": "YulIdentifier", - "src": "12444:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "12430:6:62", - "nodeType": "YulIdentifier", - "src": "12430:6:62" - }, - "nativeSrc": "12430:22:62", - "nodeType": "YulFunctionCall", - "src": "12430:22:62" - }, - "nativeSrc": "12430:22:62", - "nodeType": "YulExpressionStatement", - "src": "12430:22:62" - }, - { - "nativeSrc": "12461:17:62", - "nodeType": "YulVariableDeclaration", - "src": "12461:17:62", - "value": { - "name": "_1", - "nativeSrc": "12476:2:62", - "nodeType": "YulIdentifier", - "src": "12476:2:62" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "12465:7:62", - "nodeType": "YulTypedName", - "src": "12465:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "12487:36:62", - "nodeType": "YulAssignment", - "src": "12487:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12508:9:62", - "nodeType": "YulIdentifier", - "src": "12508:9:62" - }, - { - "kind": "number", - "nativeSrc": "12519:2:62", - "nodeType": "YulLiteral", - "src": "12519:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12504:3:62", - "nodeType": "YulIdentifier", - "src": "12504:3:62" - }, - "nativeSrc": "12504:18:62", - "nodeType": "YulFunctionCall", - "src": "12504:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "12498:5:62", - "nodeType": "YulIdentifier", - "src": "12498:5:62" - }, - "nativeSrc": "12498:25:62", - "nodeType": "YulFunctionCall", - "src": "12498:25:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "12487:7:62", - "nodeType": "YulIdentifier", - "src": "12487:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "12543:5:62", - "nodeType": "YulIdentifier", - "src": "12543:5:62" - }, - { - "kind": "number", - "nativeSrc": "12550:2:62", - "nodeType": "YulLiteral", - "src": "12550:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12539:3:62", - "nodeType": "YulIdentifier", - "src": "12539:3:62" - }, - "nativeSrc": "12539:14:62", - "nodeType": "YulFunctionCall", - "src": "12539:14:62" - }, - { - "name": "value_2", - "nativeSrc": "12555:7:62", - "nodeType": "YulIdentifier", - "src": "12555:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "12532:6:62", - "nodeType": "YulIdentifier", - "src": "12532:6:62" - }, - "nativeSrc": "12532:31:62", - "nodeType": "YulFunctionCall", - "src": "12532:31:62" - }, - "nativeSrc": "12532:31:62", - "nodeType": "YulExpressionStatement", - "src": "12532:31:62" - }, - { - "nativeSrc": "12572:17:62", - "nodeType": "YulVariableDeclaration", - "src": "12572:17:62", - "value": { - "name": "_1", - "nativeSrc": "12587:2:62", - "nodeType": "YulIdentifier", - "src": "12587:2:62" - }, - "variables": [ - { - "name": "value_3", - "nativeSrc": "12576:7:62", - "nodeType": "YulTypedName", - "src": "12576:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "12598:36:62", - "nodeType": "YulAssignment", - "src": "12598:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12619:9:62", - "nodeType": "YulIdentifier", - "src": "12619:9:62" - }, - { - "kind": "number", - "nativeSrc": "12630:2:62", - "nodeType": "YulLiteral", - "src": "12630:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12615:3:62", - "nodeType": "YulIdentifier", - "src": "12615:3:62" - }, - "nativeSrc": "12615:18:62", - "nodeType": "YulFunctionCall", - "src": "12615:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "12609:5:62", - "nodeType": "YulIdentifier", - "src": "12609:5:62" - }, - "nativeSrc": "12609:25:62", - "nodeType": "YulFunctionCall", - "src": "12609:25:62" - }, - "variableNames": [ - { - "name": "value_3", - "nativeSrc": "12598:7:62", - "nodeType": "YulIdentifier", - "src": "12598:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "12654:5:62", - "nodeType": "YulIdentifier", - "src": "12654:5:62" - }, - { - "kind": "number", - "nativeSrc": "12661:2:62", - "nodeType": "YulLiteral", - "src": "12661:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12650:3:62", - "nodeType": "YulIdentifier", - "src": "12650:3:62" - }, - "nativeSrc": "12650:14:62", - "nodeType": "YulFunctionCall", - "src": "12650:14:62" - }, - { - "name": "value_3", - "nativeSrc": "12666:7:62", - "nodeType": "YulIdentifier", - "src": "12666:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "12643:6:62", - "nodeType": "YulIdentifier", - "src": "12643:6:62" - }, - "nativeSrc": "12643:31:62", - "nodeType": "YulFunctionCall", - "src": "12643:31:62" - }, - "nativeSrc": "12643:31:62", - "nodeType": "YulExpressionStatement", - "src": "12643:31:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "12694:5:62", - "nodeType": "YulIdentifier", - "src": "12694:5:62" - }, - { - "kind": "number", - "nativeSrc": "12701:2:62", - "nodeType": "YulLiteral", - "src": "12701:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12690:3:62", - "nodeType": "YulIdentifier", - "src": "12690:3:62" - }, - "nativeSrc": "12690:14:62", - "nodeType": "YulFunctionCall", - "src": "12690:14:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12739:9:62", - "nodeType": "YulIdentifier", - "src": "12739:9:62" - }, - { - "kind": "number", - "nativeSrc": "12750:2:62", - "nodeType": "YulLiteral", - "src": "12750:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12735:3:62", - "nodeType": "YulIdentifier", - "src": "12735:3:62" - }, - "nativeSrc": "12735:18:62", - "nodeType": "YulFunctionCall", - "src": "12735:18:62" - } - ], - "functionName": { - "name": "abi_decode_uint32_fromMemory", - "nativeSrc": "12706:28:62", - "nodeType": "YulIdentifier", - "src": "12706:28:62" - }, - "nativeSrc": "12706:48:62", - "nodeType": "YulFunctionCall", - "src": "12706:48:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "12683:6:62", - "nodeType": "YulIdentifier", - "src": "12683:6:62" - }, - "nativeSrc": "12683:72:62", - "nodeType": "YulFunctionCall", - "src": "12683:72:62" - }, - "nativeSrc": "12683:72:62", - "nodeType": "YulExpressionStatement", - "src": "12683:72:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "12775:5:62", - "nodeType": "YulIdentifier", - "src": "12775:5:62" - }, - { - "kind": "number", - "nativeSrc": "12782:3:62", - "nodeType": "YulLiteral", - "src": "12782:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12771:3:62", - "nodeType": "YulIdentifier", - "src": "12771:3:62" - }, - "nativeSrc": "12771:15:62", - "nodeType": "YulFunctionCall", - "src": "12771:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12821:9:62", - "nodeType": "YulIdentifier", - "src": "12821:9:62" - }, - { - "kind": "number", - "nativeSrc": "12832:3:62", - "nodeType": "YulLiteral", - "src": "12832:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12817:3:62", - "nodeType": "YulIdentifier", - "src": "12817:3:62" - }, - "nativeSrc": "12817:19:62", - "nodeType": "YulFunctionCall", - "src": "12817:19:62" - } - ], - "functionName": { - "name": "abi_decode_uint64_fromMemory", - "nativeSrc": "12788:28:62", - "nodeType": "YulIdentifier", - "src": "12788:28:62" - }, - "nativeSrc": "12788:49:62", - "nodeType": "YulFunctionCall", - "src": "12788:49:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "12764:6:62", - "nodeType": "YulIdentifier", - "src": "12764:6:62" - }, - "nativeSrc": "12764:74:62", - "nodeType": "YulFunctionCall", - "src": "12764:74:62" - }, - "nativeSrc": "12764:74:62", - "nodeType": "YulExpressionStatement", - "src": "12764:74:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "12858:5:62", - "nodeType": "YulIdentifier", - "src": "12858:5:62" - }, - { - "kind": "number", - "nativeSrc": "12865:3:62", - "nodeType": "YulLiteral", - "src": "12865:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12854:3:62", - "nodeType": "YulIdentifier", - "src": "12854:3:62" - }, - "nativeSrc": "12854:15:62", - "nodeType": "YulFunctionCall", - "src": "12854:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12904:9:62", - "nodeType": "YulIdentifier", - "src": "12904:9:62" - }, - { - "kind": "number", - "nativeSrc": "12915:3:62", - "nodeType": "YulLiteral", - "src": "12915:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12900:3:62", - "nodeType": "YulIdentifier", - "src": "12900:3:62" - }, - "nativeSrc": "12900:19:62", - "nodeType": "YulFunctionCall", - "src": "12900:19:62" - } - ], - "functionName": { - "name": "abi_decode_uint64_fromMemory", - "nativeSrc": "12871:28:62", - "nodeType": "YulIdentifier", - "src": "12871:28:62" - }, - "nativeSrc": "12871:49:62", - "nodeType": "YulFunctionCall", - "src": "12871:49:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "12847:6:62", - "nodeType": "YulIdentifier", - "src": "12847:6:62" - }, - "nativeSrc": "12847:74:62", - "nodeType": "YulFunctionCall", - "src": "12847:74:62" - }, - "nativeSrc": "12847:74:62", - "nodeType": "YulExpressionStatement", - "src": "12847:74:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "12941:5:62", - "nodeType": "YulIdentifier", - "src": "12941:5:62" - }, - { - "kind": "number", - "nativeSrc": "12948:3:62", - "nodeType": "YulLiteral", - "src": "12948:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12937:3:62", - "nodeType": "YulIdentifier", - "src": "12937:3:62" - }, - "nativeSrc": "12937:15:62", - "nodeType": "YulFunctionCall", - "src": "12937:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12987:9:62", - "nodeType": "YulIdentifier", - "src": "12987:9:62" - }, - { - "kind": "number", - "nativeSrc": "12998:3:62", - "nodeType": "YulLiteral", - "src": "12998:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12983:3:62", - "nodeType": "YulIdentifier", - "src": "12983:3:62" - }, - "nativeSrc": "12983:19:62", - "nodeType": "YulFunctionCall", - "src": "12983:19:62" - } - ], - "functionName": { - "name": "abi_decode_uint32_fromMemory", - "nativeSrc": "12954:28:62", - "nodeType": "YulIdentifier", - "src": "12954:28:62" - }, - "nativeSrc": "12954:49:62", - "nodeType": "YulFunctionCall", - "src": "12954:49:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "12930:6:62", - "nodeType": "YulIdentifier", - "src": "12930:6:62" - }, - "nativeSrc": "12930:74:62", - "nodeType": "YulFunctionCall", - "src": "12930:74:62" - }, - "nativeSrc": "12930:74:62", - "nodeType": "YulExpressionStatement", - "src": "12930:74:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "13024:5:62", - "nodeType": "YulIdentifier", - "src": "13024:5:62" - }, - { - "kind": "number", - "nativeSrc": "13031:3:62", - "nodeType": "YulLiteral", - "src": "13031:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13020:3:62", - "nodeType": "YulIdentifier", - "src": "13020:3:62" - }, - "nativeSrc": "13020:15:62", - "nodeType": "YulFunctionCall", - "src": "13020:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13070:9:62", - "nodeType": "YulIdentifier", - "src": "13070:9:62" - }, - { - "kind": "number", - "nativeSrc": "13081:3:62", - "nodeType": "YulLiteral", - "src": "13081:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13066:3:62", - "nodeType": "YulIdentifier", - "src": "13066:3:62" - }, - "nativeSrc": "13066:19:62", - "nodeType": "YulFunctionCall", - "src": "13066:19:62" - } - ], - "functionName": { - "name": "abi_decode_uint64_fromMemory", - "nativeSrc": "13037:28:62", - "nodeType": "YulIdentifier", - "src": "13037:28:62" - }, - "nativeSrc": "13037:49:62", - "nodeType": "YulFunctionCall", - "src": "13037:49:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13013:6:62", - "nodeType": "YulIdentifier", - "src": "13013:6:62" - }, - "nativeSrc": "13013:74:62", - "nodeType": "YulFunctionCall", - "src": "13013:74:62" - }, - "nativeSrc": "13013:74:62", - "nodeType": "YulExpressionStatement", - "src": "13013:74:62" - }, - { - "nativeSrc": "13096:17:62", - "nodeType": "YulVariableDeclaration", - "src": "13096:17:62", - "value": { - "name": "_1", - "nativeSrc": "13111:2:62", - "nodeType": "YulIdentifier", - "src": "13111:2:62" - }, - "variables": [ - { - "name": "value_4", - "nativeSrc": "13100:7:62", - "nodeType": "YulTypedName", - "src": "13100:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "13122:37:62", - "nodeType": "YulAssignment", - "src": "13122:37:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13143:9:62", - "nodeType": "YulIdentifier", - "src": "13143:9:62" - }, - { - "kind": "number", - "nativeSrc": "13154:3:62", - "nodeType": "YulLiteral", - "src": "13154:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13139:3:62", - "nodeType": "YulIdentifier", - "src": "13139:3:62" - }, - "nativeSrc": "13139:19:62", - "nodeType": "YulFunctionCall", - "src": "13139:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "13133:5:62", - "nodeType": "YulIdentifier", - "src": "13133:5:62" - }, - "nativeSrc": "13133:26:62", - "nodeType": "YulFunctionCall", - "src": "13133:26:62" - }, - "variableNames": [ - { - "name": "value_4", - "nativeSrc": "13122:7:62", - "nodeType": "YulIdentifier", - "src": "13122:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "13179:5:62", - "nodeType": "YulIdentifier", - "src": "13179:5:62" - }, - { - "kind": "number", - "nativeSrc": "13186:3:62", - "nodeType": "YulLiteral", - "src": "13186:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13175:3:62", - "nodeType": "YulIdentifier", - "src": "13175:3:62" - }, - "nativeSrc": "13175:15:62", - "nodeType": "YulFunctionCall", - "src": "13175:15:62" - }, - { - "name": "value_4", - "nativeSrc": "13192:7:62", - "nodeType": "YulIdentifier", - "src": "13192:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13168:6:62", - "nodeType": "YulIdentifier", - "src": "13168:6:62" - }, - "nativeSrc": "13168:32:62", - "nodeType": "YulFunctionCall", - "src": "13168:32:62" - }, - "nativeSrc": "13168:32:62", - "nodeType": "YulExpressionStatement", - "src": "13168:32:62" - }, - { - "nativeSrc": "13209:15:62", - "nodeType": "YulAssignment", - "src": "13209:15:62", - "value": { - "name": "value", - "nativeSrc": "13219:5:62", - "nodeType": "YulIdentifier", - "src": "13219:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "13209:6:62", - "nodeType": "YulIdentifier", - "src": "13209:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory", - "nativeSrc": "12112:1118:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "12186:9:62", - "nodeType": "YulTypedName", - "src": "12186:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "12197:7:62", - "nodeType": "YulTypedName", - "src": "12197:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "12209:6:62", - "nodeType": "YulTypedName", - "src": "12209:6:62", - "type": "" - } - ], - "src": "12112:1118:62" - }, - { - "body": { - "nativeSrc": "13476:294:62", - "nodeType": "YulBlock", - "src": "13476:294:62", - "statements": [ - { - "nativeSrc": "13486:27:62", - "nodeType": "YulAssignment", - "src": "13486:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13498:9:62", - "nodeType": "YulIdentifier", - "src": "13498:9:62" - }, - { - "kind": "number", - "nativeSrc": "13509:3:62", - "nodeType": "YulLiteral", - "src": "13509:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13494:3:62", - "nodeType": "YulIdentifier", - "src": "13494:3:62" - }, - "nativeSrc": "13494:19:62", - "nodeType": "YulFunctionCall", - "src": "13494:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "13486:4:62", - "nodeType": "YulIdentifier", - "src": "13486:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13529:9:62", - "nodeType": "YulIdentifier", - "src": "13529:9:62" - }, - { - "name": "value0", - "nativeSrc": "13540:6:62", - "nodeType": "YulIdentifier", - "src": "13540:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13522:6:62", - "nodeType": "YulIdentifier", - "src": "13522:6:62" - }, - "nativeSrc": "13522:25:62", - "nodeType": "YulFunctionCall", - "src": "13522:25:62" - }, - "nativeSrc": "13522:25:62", - "nodeType": "YulExpressionStatement", - "src": "13522:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13567:9:62", - "nodeType": "YulIdentifier", - "src": "13567:9:62" - }, - { - "kind": "number", - "nativeSrc": "13578:2:62", - "nodeType": "YulLiteral", - "src": "13578:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13563:3:62", - "nodeType": "YulIdentifier", - "src": "13563:3:62" - }, - "nativeSrc": "13563:18:62", - "nodeType": "YulFunctionCall", - "src": "13563:18:62" - }, - { - "name": "value1", - "nativeSrc": "13583:6:62", - "nodeType": "YulIdentifier", - "src": "13583:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13556:6:62", - "nodeType": "YulIdentifier", - "src": "13556:6:62" - }, - "nativeSrc": "13556:34:62", - "nodeType": "YulFunctionCall", - "src": "13556:34:62" - }, - "nativeSrc": "13556:34:62", - "nodeType": "YulExpressionStatement", - "src": "13556:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13610:9:62", - "nodeType": "YulIdentifier", - "src": "13610:9:62" - }, - { - "kind": "number", - "nativeSrc": "13621:2:62", - "nodeType": "YulLiteral", - "src": "13621:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13606:3:62", - "nodeType": "YulIdentifier", - "src": "13606:3:62" - }, - "nativeSrc": "13606:18:62", - "nodeType": "YulFunctionCall", - "src": "13606:18:62" - }, - { - "name": "value2", - "nativeSrc": "13626:6:62", - "nodeType": "YulIdentifier", - "src": "13626:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13599:6:62", - "nodeType": "YulIdentifier", - "src": "13599:6:62" - }, - "nativeSrc": "13599:34:62", - "nodeType": "YulFunctionCall", - "src": "13599:34:62" - }, - "nativeSrc": "13599:34:62", - "nodeType": "YulExpressionStatement", - "src": "13599:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13653:9:62", - "nodeType": "YulIdentifier", - "src": "13653:9:62" - }, - { - "kind": "number", - "nativeSrc": "13664:2:62", - "nodeType": "YulLiteral", - "src": "13664:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13649:3:62", - "nodeType": "YulIdentifier", - "src": "13649:3:62" - }, - "nativeSrc": "13649:18:62", - "nodeType": "YulFunctionCall", - "src": "13649:18:62" - }, - { - "name": "value3", - "nativeSrc": "13669:6:62", - "nodeType": "YulIdentifier", - "src": "13669:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13642:6:62", - "nodeType": "YulIdentifier", - "src": "13642:6:62" - }, - "nativeSrc": "13642:34:62", - "nodeType": "YulFunctionCall", - "src": "13642:34:62" - }, - "nativeSrc": "13642:34:62", - "nodeType": "YulExpressionStatement", - "src": "13642:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13696:9:62", - "nodeType": "YulIdentifier", - "src": "13696:9:62" - }, - { - "kind": "number", - "nativeSrc": "13707:3:62", - "nodeType": "YulLiteral", - "src": "13707:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13692:3:62", - "nodeType": "YulIdentifier", - "src": "13692:3:62" - }, - "nativeSrc": "13692:19:62", - "nodeType": "YulFunctionCall", - "src": "13692:19:62" - }, - { - "name": "value4", - "nativeSrc": "13713:6:62", - "nodeType": "YulIdentifier", - "src": "13713:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13685:6:62", - "nodeType": "YulIdentifier", - "src": "13685:6:62" - }, - "nativeSrc": "13685:35:62", - "nodeType": "YulFunctionCall", - "src": "13685:35:62" - }, - "nativeSrc": "13685:35:62", - "nodeType": "YulExpressionStatement", - "src": "13685:35:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13740:9:62", - "nodeType": "YulIdentifier", - "src": "13740:9:62" - }, - { - "kind": "number", - "nativeSrc": "13751:3:62", - "nodeType": "YulLiteral", - "src": "13751:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13736:3:62", - "nodeType": "YulIdentifier", - "src": "13736:3:62" - }, - "nativeSrc": "13736:19:62", - "nodeType": "YulFunctionCall", - "src": "13736:19:62" - }, - { - "name": "value5", - "nativeSrc": "13757:6:62", - "nodeType": "YulIdentifier", - "src": "13757:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13729:6:62", - "nodeType": "YulIdentifier", - "src": "13729:6:62" - }, - "nativeSrc": "13729:35:62", - "nodeType": "YulFunctionCall", - "src": "13729:35:62" - }, - "nativeSrc": "13729:35:62", - "nodeType": "YulExpressionStatement", - "src": "13729:35:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed", - "nativeSrc": "13235:535:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "13405:9:62", - "nodeType": "YulTypedName", - "src": "13405:9:62", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "13416:6:62", - "nodeType": "YulTypedName", - "src": "13416:6:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "13424:6:62", - "nodeType": "YulTypedName", - "src": "13424:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "13432:6:62", - "nodeType": "YulTypedName", - "src": "13432:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "13440:6:62", - "nodeType": "YulTypedName", - "src": "13440:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "13448:6:62", - "nodeType": "YulTypedName", - "src": "13448:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "13456:6:62", - "nodeType": "YulTypedName", - "src": "13456:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "13467:4:62", - "nodeType": "YulTypedName", - "src": "13467:4:62", - "type": "" - } - ], - "src": "13235:535:62" - }, - { - "body": { - "nativeSrc": "13880:1072:62", - "nodeType": "YulBlock", - "src": "13880:1072:62", - "statements": [ - { - "nativeSrc": "13890:43:62", - "nodeType": "YulVariableDeclaration", - "src": "13890:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "13908:7:62", - "nodeType": "YulIdentifier", - "src": "13908:7:62" - }, - { - "name": "headStart", - "nativeSrc": "13917:9:62", - "nodeType": "YulIdentifier", - "src": "13917:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "13904:3:62", - "nodeType": "YulIdentifier", - "src": "13904:3:62" - }, - "nativeSrc": "13904:23:62", - "nodeType": "YulFunctionCall", - "src": "13904:23:62" - }, - { - "kind": "number", - "nativeSrc": "13929:3:62", - "nodeType": "YulLiteral", - "src": "13929:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "13900:3:62", - "nodeType": "YulIdentifier", - "src": "13900:3:62" - }, - "nativeSrc": "13900:33:62", - "nodeType": "YulFunctionCall", - "src": "13900:33:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "13894:2:62", - "nodeType": "YulTypedName", - "src": "13894:2:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "13948:16:62", - "nodeType": "YulBlock", - "src": "13948:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "13957:1:62", - "nodeType": "YulLiteral", - "src": "13957:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "13960:1:62", - "nodeType": "YulLiteral", - "src": "13960:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "13950:6:62", - "nodeType": "YulIdentifier", - "src": "13950:6:62" - }, - "nativeSrc": "13950:12:62", - "nodeType": "YulFunctionCall", - "src": "13950:12:62" - }, - "nativeSrc": "13950:12:62", - "nodeType": "YulExpressionStatement", - "src": "13950:12:62" - } - ] - }, - "condition": { - "name": "_1", - "nativeSrc": "13945:2:62", - "nodeType": "YulIdentifier", - "src": "13945:2:62" - }, - "nativeSrc": "13942:22:62", - "nodeType": "YulIf", - "src": "13942:22:62" - }, - { - "nativeSrc": "13973:7:62", - "nodeType": "YulAssignment", - "src": "13973:7:62", - "value": { - "kind": "number", - "nativeSrc": "13979:1:62", - "nodeType": "YulLiteral", - "src": "13979:1:62", - "type": "", - "value": "0" - }, - "variableNames": [ - { - "name": "_1", - "nativeSrc": "13973:2:62", - "nodeType": "YulIdentifier", - "src": "13973:2:62" - } - ] - }, - { - "nativeSrc": "13989:35:62", - "nodeType": "YulVariableDeclaration", - "src": "13989:35:62", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_2167", - "nativeSrc": "14002:20:62", - "nodeType": "YulIdentifier", - "src": "14002:20:62" - }, - "nativeSrc": "14002:22:62", - "nodeType": "YulFunctionCall", - "src": "14002:22:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "13993:5:62", - "nodeType": "YulTypedName", - "src": "13993:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "14033:31:62", - "nodeType": "YulVariableDeclaration", - "src": "14033:31:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14054:9:62", - "nodeType": "YulIdentifier", - "src": "14054:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "14048:5:62", - "nodeType": "YulIdentifier", - "src": "14048:5:62" - }, - "nativeSrc": "14048:16:62", - "nodeType": "YulFunctionCall", - "src": "14048:16:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "14037:7:62", - "nodeType": "YulTypedName", - "src": "14037:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "14098:7:62", - "nodeType": "YulIdentifier", - "src": "14098:7:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "14073:24:62", - "nodeType": "YulIdentifier", - "src": "14073:24:62" - }, - "nativeSrc": "14073:33:62", - "nodeType": "YulFunctionCall", - "src": "14073:33:62" - }, - "nativeSrc": "14073:33:62", - "nodeType": "YulExpressionStatement", - "src": "14073:33:62" - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "14122:5:62", - "nodeType": "YulIdentifier", - "src": "14122:5:62" - }, - { - "name": "value_1", - "nativeSrc": "14129:7:62", - "nodeType": "YulIdentifier", - "src": "14129:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14115:6:62", - "nodeType": "YulIdentifier", - "src": "14115:6:62" - }, - "nativeSrc": "14115:22:62", - "nodeType": "YulFunctionCall", - "src": "14115:22:62" - }, - "nativeSrc": "14115:22:62", - "nodeType": "YulExpressionStatement", - "src": "14115:22:62" - }, - { - "nativeSrc": "14146:17:62", - "nodeType": "YulVariableDeclaration", - "src": "14146:17:62", - "value": { - "name": "_1", - "nativeSrc": "14161:2:62", - "nodeType": "YulIdentifier", - "src": "14161:2:62" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "14150:7:62", - "nodeType": "YulTypedName", - "src": "14150:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "14172:36:62", - "nodeType": "YulAssignment", - "src": "14172:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14193:9:62", - "nodeType": "YulIdentifier", - "src": "14193:9:62" - }, - { - "kind": "number", - "nativeSrc": "14204:2:62", - "nodeType": "YulLiteral", - "src": "14204:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14189:3:62", - "nodeType": "YulIdentifier", - "src": "14189:3:62" - }, - "nativeSrc": "14189:18:62", - "nodeType": "YulFunctionCall", - "src": "14189:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "14183:5:62", - "nodeType": "YulIdentifier", - "src": "14183:5:62" - }, - "nativeSrc": "14183:25:62", - "nodeType": "YulFunctionCall", - "src": "14183:25:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "14172:7:62", - "nodeType": "YulIdentifier", - "src": "14172:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "14228:5:62", - "nodeType": "YulIdentifier", - "src": "14228:5:62" - }, - { - "kind": "number", - "nativeSrc": "14235:2:62", - "nodeType": "YulLiteral", - "src": "14235:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14224:3:62", - "nodeType": "YulIdentifier", - "src": "14224:3:62" - }, - "nativeSrc": "14224:14:62", - "nodeType": "YulFunctionCall", - "src": "14224:14:62" - }, - { - "name": "value_2", - "nativeSrc": "14240:7:62", - "nodeType": "YulIdentifier", - "src": "14240:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14217:6:62", - "nodeType": "YulIdentifier", - "src": "14217:6:62" - }, - "nativeSrc": "14217:31:62", - "nodeType": "YulFunctionCall", - "src": "14217:31:62" - }, - "nativeSrc": "14217:31:62", - "nodeType": "YulExpressionStatement", - "src": "14217:31:62" - }, - { - "nativeSrc": "14257:17:62", - "nodeType": "YulVariableDeclaration", - "src": "14257:17:62", - "value": { - "name": "_1", - "nativeSrc": "14272:2:62", - "nodeType": "YulIdentifier", - "src": "14272:2:62" - }, - "variables": [ - { - "name": "value_3", - "nativeSrc": "14261:7:62", - "nodeType": "YulTypedName", - "src": "14261:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "14283:36:62", - "nodeType": "YulAssignment", - "src": "14283:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14304:9:62", - "nodeType": "YulIdentifier", - "src": "14304:9:62" - }, - { - "kind": "number", - "nativeSrc": "14315:2:62", - "nodeType": "YulLiteral", - "src": "14315:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14300:3:62", - "nodeType": "YulIdentifier", - "src": "14300:3:62" - }, - "nativeSrc": "14300:18:62", - "nodeType": "YulFunctionCall", - "src": "14300:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "14294:5:62", - "nodeType": "YulIdentifier", - "src": "14294:5:62" - }, - "nativeSrc": "14294:25:62", - "nodeType": "YulFunctionCall", - "src": "14294:25:62" - }, - "variableNames": [ - { - "name": "value_3", - "nativeSrc": "14283:7:62", - "nodeType": "YulIdentifier", - "src": "14283:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "14339:5:62", - "nodeType": "YulIdentifier", - "src": "14339:5:62" - }, - { - "kind": "number", - "nativeSrc": "14346:2:62", - "nodeType": "YulLiteral", - "src": "14346:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14335:3:62", - "nodeType": "YulIdentifier", - "src": "14335:3:62" - }, - "nativeSrc": "14335:14:62", - "nodeType": "YulFunctionCall", - "src": "14335:14:62" - }, - { - "name": "value_3", - "nativeSrc": "14351:7:62", - "nodeType": "YulIdentifier", - "src": "14351:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14328:6:62", - "nodeType": "YulIdentifier", - "src": "14328:6:62" - }, - "nativeSrc": "14328:31:62", - "nodeType": "YulFunctionCall", - "src": "14328:31:62" - }, - "nativeSrc": "14328:31:62", - "nodeType": "YulExpressionStatement", - "src": "14328:31:62" - }, - { - "nativeSrc": "14368:17:62", - "nodeType": "YulVariableDeclaration", - "src": "14368:17:62", - "value": { - "name": "_1", - "nativeSrc": "14383:2:62", - "nodeType": "YulIdentifier", - "src": "14383:2:62" - }, - "variables": [ - { - "name": "value_4", - "nativeSrc": "14372:7:62", - "nodeType": "YulTypedName", - "src": "14372:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "14394:36:62", - "nodeType": "YulAssignment", - "src": "14394:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14415:9:62", - "nodeType": "YulIdentifier", - "src": "14415:9:62" - }, - { - "kind": "number", - "nativeSrc": "14426:2:62", - "nodeType": "YulLiteral", - "src": "14426:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14411:3:62", - "nodeType": "YulIdentifier", - "src": "14411:3:62" - }, - "nativeSrc": "14411:18:62", - "nodeType": "YulFunctionCall", - "src": "14411:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "14405:5:62", - "nodeType": "YulIdentifier", - "src": "14405:5:62" - }, - "nativeSrc": "14405:25:62", - "nodeType": "YulFunctionCall", - "src": "14405:25:62" - }, - "variableNames": [ - { - "name": "value_4", - "nativeSrc": "14394:7:62", - "nodeType": "YulIdentifier", - "src": "14394:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "14450:5:62", - "nodeType": "YulIdentifier", - "src": "14450:5:62" - }, - { - "kind": "number", - "nativeSrc": "14457:2:62", - "nodeType": "YulLiteral", - "src": "14457:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14446:3:62", - "nodeType": "YulIdentifier", - "src": "14446:3:62" - }, - "nativeSrc": "14446:14:62", - "nodeType": "YulFunctionCall", - "src": "14446:14:62" - }, - { - "name": "value_4", - "nativeSrc": "14462:7:62", - "nodeType": "YulIdentifier", - "src": "14462:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14439:6:62", - "nodeType": "YulIdentifier", - "src": "14439:6:62" - }, - "nativeSrc": "14439:31:62", - "nodeType": "YulFunctionCall", - "src": "14439:31:62" - }, - "nativeSrc": "14439:31:62", - "nodeType": "YulExpressionStatement", - "src": "14439:31:62" - }, - { - "nativeSrc": "14479:17:62", - "nodeType": "YulVariableDeclaration", - "src": "14479:17:62", - "value": { - "name": "_1", - "nativeSrc": "14494:2:62", - "nodeType": "YulIdentifier", - "src": "14494:2:62" - }, - "variables": [ - { - "name": "value_5", - "nativeSrc": "14483:7:62", - "nodeType": "YulTypedName", - "src": "14483:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "14505:37:62", - "nodeType": "YulAssignment", - "src": "14505:37:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14526:9:62", - "nodeType": "YulIdentifier", - "src": "14526:9:62" - }, - { - "kind": "number", - "nativeSrc": "14537:3:62", - "nodeType": "YulLiteral", - "src": "14537:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14522:3:62", - "nodeType": "YulIdentifier", - "src": "14522:3:62" - }, - "nativeSrc": "14522:19:62", - "nodeType": "YulFunctionCall", - "src": "14522:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "14516:5:62", - "nodeType": "YulIdentifier", - "src": "14516:5:62" - }, - "nativeSrc": "14516:26:62", - "nodeType": "YulFunctionCall", - "src": "14516:26:62" - }, - "variableNames": [ - { - "name": "value_5", - "nativeSrc": "14505:7:62", - "nodeType": "YulIdentifier", - "src": "14505:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "14562:5:62", - "nodeType": "YulIdentifier", - "src": "14562:5:62" - }, - { - "kind": "number", - "nativeSrc": "14569:3:62", - "nodeType": "YulLiteral", - "src": "14569:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14558:3:62", - "nodeType": "YulIdentifier", - "src": "14558:3:62" - }, - "nativeSrc": "14558:15:62", - "nodeType": "YulFunctionCall", - "src": "14558:15:62" - }, - { - "name": "value_5", - "nativeSrc": "14575:7:62", - "nodeType": "YulIdentifier", - "src": "14575:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14551:6:62", - "nodeType": "YulIdentifier", - "src": "14551:6:62" - }, - "nativeSrc": "14551:32:62", - "nodeType": "YulFunctionCall", - "src": "14551:32:62" - }, - "nativeSrc": "14551:32:62", - "nodeType": "YulExpressionStatement", - "src": "14551:32:62" - }, - { - "nativeSrc": "14592:17:62", - "nodeType": "YulVariableDeclaration", - "src": "14592:17:62", - "value": { - "name": "_1", - "nativeSrc": "14607:2:62", - "nodeType": "YulIdentifier", - "src": "14607:2:62" - }, - "variables": [ - { - "name": "value_6", - "nativeSrc": "14596:7:62", - "nodeType": "YulTypedName", - "src": "14596:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "14618:37:62", - "nodeType": "YulAssignment", - "src": "14618:37:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14639:9:62", - "nodeType": "YulIdentifier", - "src": "14639:9:62" - }, - { - "kind": "number", - "nativeSrc": "14650:3:62", - "nodeType": "YulLiteral", - "src": "14650:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14635:3:62", - "nodeType": "YulIdentifier", - "src": "14635:3:62" - }, - "nativeSrc": "14635:19:62", - "nodeType": "YulFunctionCall", - "src": "14635:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "14629:5:62", - "nodeType": "YulIdentifier", - "src": "14629:5:62" - }, - "nativeSrc": "14629:26:62", - "nodeType": "YulFunctionCall", - "src": "14629:26:62" - }, - "variableNames": [ - { - "name": "value_6", - "nativeSrc": "14618:7:62", - "nodeType": "YulIdentifier", - "src": "14618:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "14675:5:62", - "nodeType": "YulIdentifier", - "src": "14675:5:62" - }, - { - "kind": "number", - "nativeSrc": "14682:3:62", - "nodeType": "YulLiteral", - "src": "14682:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14671:3:62", - "nodeType": "YulIdentifier", - "src": "14671:3:62" - }, - "nativeSrc": "14671:15:62", - "nodeType": "YulFunctionCall", - "src": "14671:15:62" - }, - { - "name": "value_6", - "nativeSrc": "14688:7:62", - "nodeType": "YulIdentifier", - "src": "14688:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14664:6:62", - "nodeType": "YulIdentifier", - "src": "14664:6:62" - }, - "nativeSrc": "14664:32:62", - "nodeType": "YulFunctionCall", - "src": "14664:32:62" - }, - "nativeSrc": "14664:32:62", - "nodeType": "YulExpressionStatement", - "src": "14664:32:62" - }, - { - "nativeSrc": "14705:17:62", - "nodeType": "YulVariableDeclaration", - "src": "14705:17:62", - "value": { - "name": "_1", - "nativeSrc": "14720:2:62", - "nodeType": "YulIdentifier", - "src": "14720:2:62" - }, - "variables": [ - { - "name": "value_7", - "nativeSrc": "14709:7:62", - "nodeType": "YulTypedName", - "src": "14709:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "14731:37:62", - "nodeType": "YulAssignment", - "src": "14731:37:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14752:9:62", - "nodeType": "YulIdentifier", - "src": "14752:9:62" - }, - { - "kind": "number", - "nativeSrc": "14763:3:62", - "nodeType": "YulLiteral", - "src": "14763:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14748:3:62", - "nodeType": "YulIdentifier", - "src": "14748:3:62" - }, - "nativeSrc": "14748:19:62", - "nodeType": "YulFunctionCall", - "src": "14748:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "14742:5:62", - "nodeType": "YulIdentifier", - "src": "14742:5:62" - }, - "nativeSrc": "14742:26:62", - "nodeType": "YulFunctionCall", - "src": "14742:26:62" - }, - "variableNames": [ - { - "name": "value_7", - "nativeSrc": "14731:7:62", - "nodeType": "YulIdentifier", - "src": "14731:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "14788:5:62", - "nodeType": "YulIdentifier", - "src": "14788:5:62" - }, - { - "kind": "number", - "nativeSrc": "14795:3:62", - "nodeType": "YulLiteral", - "src": "14795:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14784:3:62", - "nodeType": "YulIdentifier", - "src": "14784:3:62" - }, - "nativeSrc": "14784:15:62", - "nodeType": "YulFunctionCall", - "src": "14784:15:62" - }, - { - "name": "value_7", - "nativeSrc": "14801:7:62", - "nodeType": "YulIdentifier", - "src": "14801:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14777:6:62", - "nodeType": "YulIdentifier", - "src": "14777:6:62" - }, - "nativeSrc": "14777:32:62", - "nodeType": "YulFunctionCall", - "src": "14777:32:62" - }, - "nativeSrc": "14777:32:62", - "nodeType": "YulExpressionStatement", - "src": "14777:32:62" - }, - { - "nativeSrc": "14818:17:62", - "nodeType": "YulVariableDeclaration", - "src": "14818:17:62", - "value": { - "name": "_1", - "nativeSrc": "14833:2:62", - "nodeType": "YulIdentifier", - "src": "14833:2:62" - }, - "variables": [ - { - "name": "value_8", - "nativeSrc": "14822:7:62", - "nodeType": "YulTypedName", - "src": "14822:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "14844:37:62", - "nodeType": "YulAssignment", - "src": "14844:37:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14865:9:62", - "nodeType": "YulIdentifier", - "src": "14865:9:62" - }, - { - "kind": "number", - "nativeSrc": "14876:3:62", - "nodeType": "YulLiteral", - "src": "14876:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14861:3:62", - "nodeType": "YulIdentifier", - "src": "14861:3:62" - }, - "nativeSrc": "14861:19:62", - "nodeType": "YulFunctionCall", - "src": "14861:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "14855:5:62", - "nodeType": "YulIdentifier", - "src": "14855:5:62" - }, - "nativeSrc": "14855:26:62", - "nodeType": "YulFunctionCall", - "src": "14855:26:62" - }, - "variableNames": [ - { - "name": "value_8", - "nativeSrc": "14844:7:62", - "nodeType": "YulIdentifier", - "src": "14844:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "14901:5:62", - "nodeType": "YulIdentifier", - "src": "14901:5:62" - }, - { - "kind": "number", - "nativeSrc": "14908:3:62", - "nodeType": "YulLiteral", - "src": "14908:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14897:3:62", - "nodeType": "YulIdentifier", - "src": "14897:3:62" - }, - "nativeSrc": "14897:15:62", - "nodeType": "YulFunctionCall", - "src": "14897:15:62" - }, - { - "name": "value_8", - "nativeSrc": "14914:7:62", - "nodeType": "YulIdentifier", - "src": "14914:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14890:6:62", - "nodeType": "YulIdentifier", - "src": "14890:6:62" - }, - "nativeSrc": "14890:32:62", - "nodeType": "YulFunctionCall", - "src": "14890:32:62" - }, - "nativeSrc": "14890:32:62", - "nodeType": "YulExpressionStatement", - "src": "14890:32:62" - }, - { - "nativeSrc": "14931:15:62", - "nodeType": "YulAssignment", - "src": "14931:15:62", - "value": { - "name": "value", - "nativeSrc": "14941:5:62", - "nodeType": "YulIdentifier", - "src": "14941:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "14931:6:62", - "nodeType": "YulIdentifier", - "src": "14931:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_State_$11307_memory_ptr_fromMemory", - "nativeSrc": "13775:1177:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "13846:9:62", - "nodeType": "YulTypedName", - "src": "13846:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "13857:7:62", - "nodeType": "YulTypedName", - "src": "13857:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "13869:6:62", - "nodeType": "YulTypedName", - "src": "13869:6:62", - "type": "" - } - ], - "src": "13775:1177:62" - }, - { - "body": { - "nativeSrc": "15086:119:62", - "nodeType": "YulBlock", - "src": "15086:119:62", - "statements": [ - { - "nativeSrc": "15096:26:62", - "nodeType": "YulAssignment", - "src": "15096:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15108:9:62", - "nodeType": "YulIdentifier", - "src": "15108:9:62" - }, - { - "kind": "number", - "nativeSrc": "15119:2:62", - "nodeType": "YulLiteral", - "src": "15119:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15104:3:62", - "nodeType": "YulIdentifier", - "src": "15104:3:62" - }, - "nativeSrc": "15104:18:62", - "nodeType": "YulFunctionCall", - "src": "15104:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "15096:4:62", - "nodeType": "YulIdentifier", - "src": "15096:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15138:9:62", - "nodeType": "YulIdentifier", - "src": "15138:9:62" - }, - { - "name": "value0", - "nativeSrc": "15149:6:62", - "nodeType": "YulIdentifier", - "src": "15149:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15131:6:62", - "nodeType": "YulIdentifier", - "src": "15131:6:62" - }, - "nativeSrc": "15131:25:62", - "nodeType": "YulFunctionCall", - "src": "15131:25:62" - }, - "nativeSrc": "15131:25:62", - "nodeType": "YulExpressionStatement", - "src": "15131:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15176:9:62", - "nodeType": "YulIdentifier", - "src": "15176:9:62" - }, - { - "kind": "number", - "nativeSrc": "15187:2:62", - "nodeType": "YulLiteral", - "src": "15187:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15172:3:62", - "nodeType": "YulIdentifier", - "src": "15172:3:62" - }, - "nativeSrc": "15172:18:62", - "nodeType": "YulFunctionCall", - "src": "15172:18:62" - }, - { - "name": "value1", - "nativeSrc": "15192:6:62", - "nodeType": "YulIdentifier", - "src": "15192:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15165:6:62", - "nodeType": "YulIdentifier", - "src": "15165:6:62" - }, - "nativeSrc": "15165:34:62", - "nodeType": "YulFunctionCall", - "src": "15165:34:62" - }, - "nativeSrc": "15165:34:62", - "nodeType": "YulExpressionStatement", - "src": "15165:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "14957:248:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "15047:9:62", - "nodeType": "YulTypedName", - "src": "15047:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "15058:6:62", - "nodeType": "YulTypedName", - "src": "15058:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "15066:6:62", - "nodeType": "YulTypedName", - "src": "15066:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "15077:4:62", - "nodeType": "YulTypedName", - "src": "15077:4:62", - "type": "" - } - ], - "src": "14957:248:62" - }, - { - "body": { - "nativeSrc": "15259:350:62", - "nodeType": "YulBlock", - "src": "15259:350:62", - "statements": [ - { - "nativeSrc": "15269:26:62", - "nodeType": "YulVariableDeclaration", - "src": "15269:26:62", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "15289:5:62", - "nodeType": "YulIdentifier", - "src": "15289:5:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15283:5:62", - "nodeType": "YulIdentifier", - "src": "15283:5:62" - }, - "nativeSrc": "15283:12:62", - "nodeType": "YulFunctionCall", - "src": "15283:12:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "15273:6:62", - "nodeType": "YulTypedName", - "src": "15273:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "15311:3:62", - "nodeType": "YulIdentifier", - "src": "15311:3:62" - }, - { - "name": "length", - "nativeSrc": "15316:6:62", - "nodeType": "YulIdentifier", - "src": "15316:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15304:6:62", - "nodeType": "YulIdentifier", - "src": "15304:6:62" - }, - "nativeSrc": "15304:19:62", - "nodeType": "YulFunctionCall", - "src": "15304:19:62" - }, - "nativeSrc": "15304:19:62", - "nodeType": "YulExpressionStatement", - "src": "15304:19:62" - }, - { - "nativeSrc": "15332:10:62", - "nodeType": "YulVariableDeclaration", - "src": "15332:10:62", - "value": { - "kind": "number", - "nativeSrc": "15341:1:62", - "nodeType": "YulLiteral", - "src": "15341:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "15336:1:62", - "nodeType": "YulTypedName", - "src": "15336:1:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "15403:87:62", - "nodeType": "YulBlock", - "src": "15403:87:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "15432:3:62", - "nodeType": "YulIdentifier", - "src": "15432:3:62" - }, - { - "name": "i", - "nativeSrc": "15437:1:62", - "nodeType": "YulIdentifier", - "src": "15437:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15428:3:62", - "nodeType": "YulIdentifier", - "src": "15428:3:62" - }, - "nativeSrc": "15428:11:62", - "nodeType": "YulFunctionCall", - "src": "15428:11:62" - }, - { - "kind": "number", - "nativeSrc": "15441:4:62", - "nodeType": "YulLiteral", - "src": "15441:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15424:3:62", - "nodeType": "YulIdentifier", - "src": "15424:3:62" - }, - "nativeSrc": "15424:22:62", - "nodeType": "YulFunctionCall", - "src": "15424:22:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "15462:5:62", - "nodeType": "YulIdentifier", - "src": "15462:5:62" - }, - { - "name": "i", - "nativeSrc": "15469:1:62", - "nodeType": "YulIdentifier", - "src": "15469:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15458:3:62", - "nodeType": "YulIdentifier", - "src": "15458:3:62" - }, - "nativeSrc": "15458:13:62", - "nodeType": "YulFunctionCall", - "src": "15458:13:62" - }, - { - "kind": "number", - "nativeSrc": "15473:4:62", - "nodeType": "YulLiteral", - "src": "15473:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15454:3:62", - "nodeType": "YulIdentifier", - "src": "15454:3:62" - }, - "nativeSrc": "15454:24:62", - "nodeType": "YulFunctionCall", - "src": "15454:24:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15448:5:62", - "nodeType": "YulIdentifier", - "src": "15448:5:62" - }, - "nativeSrc": "15448:31:62", - "nodeType": "YulFunctionCall", - "src": "15448:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15417:6:62", - "nodeType": "YulIdentifier", - "src": "15417:6:62" - }, - "nativeSrc": "15417:63:62", - "nodeType": "YulFunctionCall", - "src": "15417:63:62" - }, - "nativeSrc": "15417:63:62", - "nodeType": "YulExpressionStatement", - "src": "15417:63:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "15362:1:62", - "nodeType": "YulIdentifier", - "src": "15362:1:62" - }, - { - "name": "length", - "nativeSrc": "15365:6:62", - "nodeType": "YulIdentifier", - "src": "15365:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "15359:2:62", - "nodeType": "YulIdentifier", - "src": "15359:2:62" - }, - "nativeSrc": "15359:13:62", - "nodeType": "YulFunctionCall", - "src": "15359:13:62" - }, - "nativeSrc": "15351:139:62", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "15373:21:62", - "nodeType": "YulBlock", - "src": "15373:21:62", - "statements": [ - { - "nativeSrc": "15375:17:62", - "nodeType": "YulAssignment", - "src": "15375:17:62", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "15384:1:62", - "nodeType": "YulIdentifier", - "src": "15384:1:62" - }, - { - "kind": "number", - "nativeSrc": "15387:4:62", - "nodeType": "YulLiteral", - "src": "15387:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15380:3:62", - "nodeType": "YulIdentifier", - "src": "15380:3:62" - }, - "nativeSrc": "15380:12:62", - "nodeType": "YulFunctionCall", - "src": "15380:12:62" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "15375:1:62", - "nodeType": "YulIdentifier", - "src": "15375:1:62" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "15355:3:62", - "nodeType": "YulBlock", - "src": "15355:3:62", - "statements": [] - }, - "src": "15351:139:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "15514:3:62", - "nodeType": "YulIdentifier", - "src": "15514:3:62" - }, - { - "name": "length", - "nativeSrc": "15519:6:62", - "nodeType": "YulIdentifier", - "src": "15519:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15510:3:62", - "nodeType": "YulIdentifier", - "src": "15510:3:62" - }, - "nativeSrc": "15510:16:62", - "nodeType": "YulFunctionCall", - "src": "15510:16:62" - }, - { - "kind": "number", - "nativeSrc": "15528:4:62", - "nodeType": "YulLiteral", - "src": "15528:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15506:3:62", - "nodeType": "YulIdentifier", - "src": "15506:3:62" - }, - "nativeSrc": "15506:27:62", - "nodeType": "YulFunctionCall", - "src": "15506:27:62" - }, - { - "kind": "number", - "nativeSrc": "15535:1:62", - "nodeType": "YulLiteral", - "src": "15535:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15499:6:62", - "nodeType": "YulIdentifier", - "src": "15499:6:62" - }, - "nativeSrc": "15499:38:62", - "nodeType": "YulFunctionCall", - "src": "15499:38:62" - }, - "nativeSrc": "15499:38:62", - "nodeType": "YulExpressionStatement", - "src": "15499:38:62" - }, - { - "nativeSrc": "15546:57:62", - "nodeType": "YulAssignment", - "src": "15546:57:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "15561:3:62", - "nodeType": "YulIdentifier", - "src": "15561:3:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "15574:6:62", - "nodeType": "YulIdentifier", - "src": "15574:6:62" - }, - { - "kind": "number", - "nativeSrc": "15582:2:62", - "nodeType": "YulLiteral", - "src": "15582:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15570:3:62", - "nodeType": "YulIdentifier", - "src": "15570:3:62" - }, - "nativeSrc": "15570:15:62", - "nodeType": "YulFunctionCall", - "src": "15570:15:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15591:2:62", - "nodeType": "YulLiteral", - "src": "15591:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "15587:3:62", - "nodeType": "YulIdentifier", - "src": "15587:3:62" - }, - "nativeSrc": "15587:7:62", - "nodeType": "YulFunctionCall", - "src": "15587:7:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "15566:3:62", - "nodeType": "YulIdentifier", - "src": "15566:3:62" - }, - "nativeSrc": "15566:29:62", - "nodeType": "YulFunctionCall", - "src": "15566:29:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15557:3:62", - "nodeType": "YulIdentifier", - "src": "15557:3:62" - }, - "nativeSrc": "15557:39:62", - "nodeType": "YulFunctionCall", - "src": "15557:39:62" - }, - { - "kind": "number", - "nativeSrc": "15598:4:62", - "nodeType": "YulLiteral", - "src": "15598:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15553:3:62", - "nodeType": "YulIdentifier", - "src": "15553:3:62" - }, - "nativeSrc": "15553:50:62", - "nodeType": "YulFunctionCall", - "src": "15553:50:62" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "15546:3:62", - "nodeType": "YulIdentifier", - "src": "15546:3:62" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nativeSrc": "15210:399:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "15236:5:62", - "nodeType": "YulTypedName", - "src": "15236:5:62", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "15243:3:62", - "nodeType": "YulTypedName", - "src": "15243:3:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "15251:3:62", - "nodeType": "YulTypedName", - "src": "15251:3:62", - "type": "" - } - ], - "src": "15210:399:62" - }, - { - "body": { - "nativeSrc": "15761:167:62", - "nodeType": "YulBlock", - "src": "15761:167:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15778:9:62", - "nodeType": "YulIdentifier", - "src": "15778:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "15793:6:62", - "nodeType": "YulIdentifier", - "src": "15793:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15809:3:62", - "nodeType": "YulLiteral", - "src": "15809:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "15814:1:62", - "nodeType": "YulLiteral", - "src": "15814:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "15805:3:62", - "nodeType": "YulIdentifier", - "src": "15805:3:62" - }, - "nativeSrc": "15805:11:62", - "nodeType": "YulFunctionCall", - "src": "15805:11:62" - }, - { - "kind": "number", - "nativeSrc": "15818:1:62", - "nodeType": "YulLiteral", - "src": "15818:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "15801:3:62", - "nodeType": "YulIdentifier", - "src": "15801:3:62" - }, - "nativeSrc": "15801:19:62", - "nodeType": "YulFunctionCall", - "src": "15801:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "15789:3:62", - "nodeType": "YulIdentifier", - "src": "15789:3:62" - }, - "nativeSrc": "15789:32:62", - "nodeType": "YulFunctionCall", - "src": "15789:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15771:6:62", - "nodeType": "YulIdentifier", - "src": "15771:6:62" - }, - "nativeSrc": "15771:51:62", - "nodeType": "YulFunctionCall", - "src": "15771:51:62" - }, - "nativeSrc": "15771:51:62", - "nodeType": "YulExpressionStatement", - "src": "15771:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15842:9:62", - "nodeType": "YulIdentifier", - "src": "15842:9:62" - }, - { - "kind": "number", - "nativeSrc": "15853:2:62", - "nodeType": "YulLiteral", - "src": "15853:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15838:3:62", - "nodeType": "YulIdentifier", - "src": "15838:3:62" - }, - "nativeSrc": "15838:18:62", - "nodeType": "YulFunctionCall", - "src": "15838:18:62" - }, - { - "kind": "number", - "nativeSrc": "15858:2:62", - "nodeType": "YulLiteral", - "src": "15858:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15831:6:62", - "nodeType": "YulIdentifier", - "src": "15831:6:62" - }, - "nativeSrc": "15831:30:62", - "nodeType": "YulFunctionCall", - "src": "15831:30:62" - }, - "nativeSrc": "15831:30:62", - "nodeType": "YulExpressionStatement", - "src": "15831:30:62" - }, - { - "nativeSrc": "15870:52:62", - "nodeType": "YulAssignment", - "src": "15870:52:62", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "15895:6:62", - "nodeType": "YulIdentifier", - "src": "15895:6:62" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15907:9:62", - "nodeType": "YulIdentifier", - "src": "15907:9:62" - }, - { - "kind": "number", - "nativeSrc": "15918:2:62", - "nodeType": "YulLiteral", - "src": "15918:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15903:3:62", - "nodeType": "YulIdentifier", - "src": "15903:3:62" - }, - "nativeSrc": "15903:18:62", - "nodeType": "YulFunctionCall", - "src": "15903:18:62" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nativeSrc": "15878:16:62", - "nodeType": "YulIdentifier", - "src": "15878:16:62" - }, - "nativeSrc": "15878:44:62", - "nodeType": "YulFunctionCall", - "src": "15878:44:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "15870:4:62", - "nodeType": "YulIdentifier", - "src": "15870:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "15614:314:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "15722:9:62", - "nodeType": "YulTypedName", - "src": "15722:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "15733:6:62", - "nodeType": "YulTypedName", - "src": "15733:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "15741:6:62", - "nodeType": "YulTypedName", - "src": "15741:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "15752:4:62", - "nodeType": "YulTypedName", - "src": "15752:4:62", - "type": "" - } - ], - "src": "15614:314:62" - }, - { - "body": { - "nativeSrc": "16062:145:62", - "nodeType": "YulBlock", - "src": "16062:145:62", - "statements": [ - { - "nativeSrc": "16072:26:62", - "nodeType": "YulAssignment", - "src": "16072:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "16084:9:62", - "nodeType": "YulIdentifier", - "src": "16084:9:62" - }, - { - "kind": "number", - "nativeSrc": "16095:2:62", - "nodeType": "YulLiteral", - "src": "16095:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16080:3:62", - "nodeType": "YulIdentifier", - "src": "16080:3:62" - }, - "nativeSrc": "16080:18:62", - "nodeType": "YulFunctionCall", - "src": "16080:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "16072:4:62", - "nodeType": "YulIdentifier", - "src": "16072:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "16114:9:62", - "nodeType": "YulIdentifier", - "src": "16114:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "16129:6:62", - "nodeType": "YulIdentifier", - "src": "16129:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16145:3:62", - "nodeType": "YulLiteral", - "src": "16145:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "16150:1:62", - "nodeType": "YulLiteral", - "src": "16150:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "16141:3:62", - "nodeType": "YulIdentifier", - "src": "16141:3:62" - }, - "nativeSrc": "16141:11:62", - "nodeType": "YulFunctionCall", - "src": "16141:11:62" - }, - { - "kind": "number", - "nativeSrc": "16154:1:62", - "nodeType": "YulLiteral", - "src": "16154:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "16137:3:62", - "nodeType": "YulIdentifier", - "src": "16137:3:62" - }, - "nativeSrc": "16137:19:62", - "nodeType": "YulFunctionCall", - "src": "16137:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "16125:3:62", - "nodeType": "YulIdentifier", - "src": "16125:3:62" - }, - "nativeSrc": "16125:32:62", - "nodeType": "YulFunctionCall", - "src": "16125:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16107:6:62", - "nodeType": "YulIdentifier", - "src": "16107:6:62" - }, - "nativeSrc": "16107:51:62", - "nodeType": "YulFunctionCall", - "src": "16107:51:62" - }, - "nativeSrc": "16107:51:62", - "nodeType": "YulExpressionStatement", - "src": "16107:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "16178:9:62", - "nodeType": "YulIdentifier", - "src": "16178:9:62" - }, - { - "kind": "number", - "nativeSrc": "16189:2:62", - "nodeType": "YulLiteral", - "src": "16189:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16174:3:62", - "nodeType": "YulIdentifier", - "src": "16174:3:62" - }, - "nativeSrc": "16174:18:62", - "nodeType": "YulFunctionCall", - "src": "16174:18:62" - }, - { - "name": "value1", - "nativeSrc": "16194:6:62", - "nodeType": "YulIdentifier", - "src": "16194:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16167:6:62", - "nodeType": "YulIdentifier", - "src": "16167:6:62" - }, - "nativeSrc": "16167:34:62", - "nodeType": "YulFunctionCall", - "src": "16167:34:62" - }, - "nativeSrc": "16167:34:62", - "nodeType": "YulExpressionStatement", - "src": "16167:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", - "nativeSrc": "15933:274:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "16023:9:62", - "nodeType": "YulTypedName", - "src": "16023:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "16034:6:62", - "nodeType": "YulTypedName", - "src": "16034:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "16042:6:62", - "nodeType": "YulTypedName", - "src": "16042:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "16053:4:62", - "nodeType": "YulTypedName", - "src": "16053:4:62", - "type": "" - } - ], - "src": "15933:274:62" - }, - { - "body": { - "nativeSrc": "16290:199:62", - "nodeType": "YulBlock", - "src": "16290:199:62", - "statements": [ - { - "body": { - "nativeSrc": "16336:16:62", - "nodeType": "YulBlock", - "src": "16336:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16345:1:62", - "nodeType": "YulLiteral", - "src": "16345:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "16348:1:62", - "nodeType": "YulLiteral", - "src": "16348:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "16338:6:62", - "nodeType": "YulIdentifier", - "src": "16338:6:62" - }, - "nativeSrc": "16338:12:62", - "nodeType": "YulFunctionCall", - "src": "16338:12:62" - }, - "nativeSrc": "16338:12:62", - "nodeType": "YulExpressionStatement", - "src": "16338:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "16311:7:62", - "nodeType": "YulIdentifier", - "src": "16311:7:62" - }, - { - "name": "headStart", - "nativeSrc": "16320:9:62", - "nodeType": "YulIdentifier", - "src": "16320:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "16307:3:62", - "nodeType": "YulIdentifier", - "src": "16307:3:62" - }, - "nativeSrc": "16307:23:62", - "nodeType": "YulFunctionCall", - "src": "16307:23:62" - }, - { - "kind": "number", - "nativeSrc": "16332:2:62", - "nodeType": "YulLiteral", - "src": "16332:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "16303:3:62", - "nodeType": "YulIdentifier", - "src": "16303:3:62" - }, - "nativeSrc": "16303:32:62", - "nodeType": "YulFunctionCall", - "src": "16303:32:62" - }, - "nativeSrc": "16300:52:62", - "nodeType": "YulIf", - "src": "16300:52:62" - }, - { - "nativeSrc": "16361:29:62", - "nodeType": "YulVariableDeclaration", - "src": "16361:29:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "16380:9:62", - "nodeType": "YulIdentifier", - "src": "16380:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "16374:5:62", - "nodeType": "YulIdentifier", - "src": "16374:5:62" - }, - "nativeSrc": "16374:16:62", - "nodeType": "YulFunctionCall", - "src": "16374:16:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "16365:5:62", - "nodeType": "YulTypedName", - "src": "16365:5:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16443:16:62", - "nodeType": "YulBlock", - "src": "16443:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16452:1:62", - "nodeType": "YulLiteral", - "src": "16452:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "16455:1:62", - "nodeType": "YulLiteral", - "src": "16455:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "16445:6:62", - "nodeType": "YulIdentifier", - "src": "16445:6:62" - }, - "nativeSrc": "16445:12:62", - "nodeType": "YulFunctionCall", - "src": "16445:12:62" - }, - "nativeSrc": "16445:12:62", - "nodeType": "YulExpressionStatement", - "src": "16445:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "16412:5:62", - "nodeType": "YulIdentifier", - "src": "16412:5:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "16433:5:62", - "nodeType": "YulIdentifier", - "src": "16433:5:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "16426:6:62", - "nodeType": "YulIdentifier", - "src": "16426:6:62" - }, - "nativeSrc": "16426:13:62", - "nodeType": "YulFunctionCall", - "src": "16426:13:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "16419:6:62", - "nodeType": "YulIdentifier", - "src": "16419:6:62" - }, - "nativeSrc": "16419:21:62", - "nodeType": "YulFunctionCall", - "src": "16419:21:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "16409:2:62", - "nodeType": "YulIdentifier", - "src": "16409:2:62" - }, - "nativeSrc": "16409:32:62", - "nodeType": "YulFunctionCall", - "src": "16409:32:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "16402:6:62", - "nodeType": "YulIdentifier", - "src": "16402:6:62" - }, - "nativeSrc": "16402:40:62", - "nodeType": "YulFunctionCall", - "src": "16402:40:62" - }, - "nativeSrc": "16399:60:62", - "nodeType": "YulIf", - "src": "16399:60:62" - }, - { - "nativeSrc": "16468:15:62", - "nodeType": "YulAssignment", - "src": "16468:15:62", - "value": { - "name": "value", - "nativeSrc": "16478:5:62", - "nodeType": "YulIdentifier", - "src": "16478:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "16468:6:62", - "nodeType": "YulIdentifier", - "src": "16468:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nativeSrc": "16212:277:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "16256:9:62", - "nodeType": "YulTypedName", - "src": "16256:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "16267:7:62", - "nodeType": "YulTypedName", - "src": "16267:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "16279:6:62", - "nodeType": "YulTypedName", - "src": "16279:6:62", - "type": "" - } - ], - "src": "16212:277:62" - }, - { - "body": { - "nativeSrc": "16668:158:62", - "nodeType": "YulBlock", - "src": "16668:158:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "16685:9:62", - "nodeType": "YulIdentifier", - "src": "16685:9:62" - }, - { - "kind": "number", - "nativeSrc": "16696:2:62", - "nodeType": "YulLiteral", - "src": "16696:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16678:6:62", - "nodeType": "YulIdentifier", - "src": "16678:6:62" - }, - "nativeSrc": "16678:21:62", - "nodeType": "YulFunctionCall", - "src": "16678:21:62" - }, - "nativeSrc": "16678:21:62", - "nodeType": "YulExpressionStatement", - "src": "16678:21:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "16719:9:62", - "nodeType": "YulIdentifier", - "src": "16719:9:62" - }, - { - "kind": "number", - "nativeSrc": "16730:2:62", - "nodeType": "YulLiteral", - "src": "16730:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16715:3:62", - "nodeType": "YulIdentifier", - "src": "16715:3:62" - }, - "nativeSrc": "16715:18:62", - "nodeType": "YulFunctionCall", - "src": "16715:18:62" - }, - { - "kind": "number", - "nativeSrc": "16735:1:62", - "nodeType": "YulLiteral", - "src": "16735:1:62", - "type": "", - "value": "9" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16708:6:62", - "nodeType": "YulIdentifier", - "src": "16708:6:62" - }, - "nativeSrc": "16708:29:62", - "nodeType": "YulFunctionCall", - "src": "16708:29:62" - }, - "nativeSrc": "16708:29:62", - "nodeType": "YulExpressionStatement", - "src": "16708:29:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "16757:9:62", - "nodeType": "YulIdentifier", - "src": "16757:9:62" - }, - { - "kind": "number", - "nativeSrc": "16768:2:62", - "nodeType": "YulLiteral", - "src": "16768:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16753:3:62", - "nodeType": "YulIdentifier", - "src": "16753:3:62" - }, - "nativeSrc": "16753:18:62", - "nodeType": "YulFunctionCall", - "src": "16753:18:62" - }, - { - "hexValue": "217472616e73666572", - "kind": "string", - "nativeSrc": "16773:11:62", - "nodeType": "YulLiteral", - "src": "16773:11:62", - "type": "", - "value": "!transfer" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16746:6:62", - "nodeType": "YulIdentifier", - "src": "16746:6:62" - }, - "nativeSrc": "16746:39:62", - "nodeType": "YulFunctionCall", - "src": "16746:39:62" - }, - "nativeSrc": "16746:39:62", - "nodeType": "YulExpressionStatement", - "src": "16746:39:62" - }, - { - "nativeSrc": "16794:26:62", - "nodeType": "YulAssignment", - "src": "16794:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "16806:9:62", - "nodeType": "YulIdentifier", - "src": "16806:9:62" - }, - { - "kind": "number", - "nativeSrc": "16817:2:62", - "nodeType": "YulLiteral", - "src": "16817:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16802:3:62", - "nodeType": "YulIdentifier", - "src": "16802:3:62" - }, - "nativeSrc": "16802:18:62", - "nodeType": "YulFunctionCall", - "src": "16802:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "16794:4:62", - "nodeType": "YulIdentifier", - "src": "16794:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed", - "nativeSrc": "16494:332:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "16645:9:62", - "nodeType": "YulTypedName", - "src": "16645:9:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "16659:4:62", - "nodeType": "YulTypedName", - "src": "16659:4:62", - "type": "" - } - ], - "src": "16494:332:62" - }, - { - "body": { - "nativeSrc": "16978:139:62", - "nodeType": "YulBlock", - "src": "16978:139:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "16995:3:62", - "nodeType": "YulIdentifier", - "src": "16995:3:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "17008:2:62", - "nodeType": "YulLiteral", - "src": "17008:2:62", - "type": "", - "value": "96" - }, - { - "name": "value0", - "nativeSrc": "17012:6:62", - "nodeType": "YulIdentifier", - "src": "17012:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "17004:3:62", - "nodeType": "YulIdentifier", - "src": "17004:3:62" - }, - "nativeSrc": "17004:15:62", - "nodeType": "YulFunctionCall", - "src": "17004:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "17033:2:62", - "nodeType": "YulLiteral", - "src": "17033:2:62", - "type": "", - "value": "96" - }, - { - "kind": "number", - "nativeSrc": "17037:1:62", - "nodeType": "YulLiteral", - "src": "17037:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "17029:3:62", - "nodeType": "YulIdentifier", - "src": "17029:3:62" - }, - "nativeSrc": "17029:10:62", - "nodeType": "YulFunctionCall", - "src": "17029:10:62" - }, - { - "kind": "number", - "nativeSrc": "17041:1:62", - "nodeType": "YulLiteral", - "src": "17041:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "17025:3:62", - "nodeType": "YulIdentifier", - "src": "17025:3:62" - }, - "nativeSrc": "17025:18:62", - "nodeType": "YulFunctionCall", - "src": "17025:18:62" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "17021:3:62", - "nodeType": "YulIdentifier", - "src": "17021:3:62" - }, - "nativeSrc": "17021:23:62", - "nodeType": "YulFunctionCall", - "src": "17021:23:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "17000:3:62", - "nodeType": "YulIdentifier", - "src": "17000:3:62" - }, - "nativeSrc": "17000:45:62", - "nodeType": "YulFunctionCall", - "src": "17000:45:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16988:6:62", - "nodeType": "YulIdentifier", - "src": "16988:6:62" - }, - "nativeSrc": "16988:58:62", - "nodeType": "YulFunctionCall", - "src": "16988:58:62" - }, - "nativeSrc": "16988:58:62", - "nodeType": "YulExpressionStatement", - "src": "16988:58:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "17066:3:62", - "nodeType": "YulIdentifier", - "src": "17066:3:62" - }, - { - "kind": "number", - "nativeSrc": "17071:2:62", - "nodeType": "YulLiteral", - "src": "17071:2:62", - "type": "", - "value": "20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17062:3:62", - "nodeType": "YulIdentifier", - "src": "17062:3:62" - }, - "nativeSrc": "17062:12:62", - "nodeType": "YulFunctionCall", - "src": "17062:12:62" - }, - { - "name": "value1", - "nativeSrc": "17076:6:62", - "nodeType": "YulIdentifier", - "src": "17076:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17055:6:62", - "nodeType": "YulIdentifier", - "src": "17055:6:62" - }, - "nativeSrc": "17055:28:62", - "nodeType": "YulFunctionCall", - "src": "17055:28:62" - }, - "nativeSrc": "17055:28:62", - "nodeType": "YulExpressionStatement", - "src": "17055:28:62" - }, - { - "nativeSrc": "17092:19:62", - "nodeType": "YulAssignment", - "src": "17092:19:62", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "17103:3:62", - "nodeType": "YulIdentifier", - "src": "17103:3:62" - }, - { - "kind": "number", - "nativeSrc": "17108:2:62", - "nodeType": "YulLiteral", - "src": "17108:2:62", - "type": "", - "value": "52" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17099:3:62", - "nodeType": "YulIdentifier", - "src": "17099:3:62" - }, - "nativeSrc": "17099:12:62", - "nodeType": "YulFunctionCall", - "src": "17099:12:62" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "17092:3:62", - "nodeType": "YulIdentifier", - "src": "17092:3:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_address_t_bytes32__to_t_address_t_bytes32__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "16831:286:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "16946:3:62", - "nodeType": "YulTypedName", - "src": "16946:3:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "16951:6:62", - "nodeType": "YulTypedName", - "src": "16951:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "16959:6:62", - "nodeType": "YulTypedName", - "src": "16959:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "16970:3:62", - "nodeType": "YulTypedName", - "src": "16970:3:62", - "type": "" - } - ], - "src": "16831:286:62" - }, - { - "body": { - "nativeSrc": "17307:232:62", - "nodeType": "YulBlock", - "src": "17307:232:62", - "statements": [ - { - "nativeSrc": "17317:27:62", - "nodeType": "YulAssignment", - "src": "17317:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17329:9:62", - "nodeType": "YulIdentifier", - "src": "17329:9:62" - }, - { - "kind": "number", - "nativeSrc": "17340:3:62", - "nodeType": "YulLiteral", - "src": "17340:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17325:3:62", - "nodeType": "YulIdentifier", - "src": "17325:3:62" - }, - "nativeSrc": "17325:19:62", - "nodeType": "YulFunctionCall", - "src": "17325:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "17317:4:62", - "nodeType": "YulIdentifier", - "src": "17317:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17360:9:62", - "nodeType": "YulIdentifier", - "src": "17360:9:62" - }, - { - "name": "value0", - "nativeSrc": "17371:6:62", - "nodeType": "YulIdentifier", - "src": "17371:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17353:6:62", - "nodeType": "YulIdentifier", - "src": "17353:6:62" - }, - "nativeSrc": "17353:25:62", - "nodeType": "YulFunctionCall", - "src": "17353:25:62" - }, - "nativeSrc": "17353:25:62", - "nodeType": "YulExpressionStatement", - "src": "17353:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17398:9:62", - "nodeType": "YulIdentifier", - "src": "17398:9:62" - }, - { - "kind": "number", - "nativeSrc": "17409:2:62", - "nodeType": "YulLiteral", - "src": "17409:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17394:3:62", - "nodeType": "YulIdentifier", - "src": "17394:3:62" - }, - "nativeSrc": "17394:18:62", - "nodeType": "YulFunctionCall", - "src": "17394:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "17418:6:62", - "nodeType": "YulIdentifier", - "src": "17418:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "17434:3:62", - "nodeType": "YulLiteral", - "src": "17434:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "17439:1:62", - "nodeType": "YulLiteral", - "src": "17439:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "17430:3:62", - "nodeType": "YulIdentifier", - "src": "17430:3:62" - }, - "nativeSrc": "17430:11:62", - "nodeType": "YulFunctionCall", - "src": "17430:11:62" - }, - { - "kind": "number", - "nativeSrc": "17443:1:62", - "nodeType": "YulLiteral", - "src": "17443:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "17426:3:62", - "nodeType": "YulIdentifier", - "src": "17426:3:62" - }, - "nativeSrc": "17426:19:62", - "nodeType": "YulFunctionCall", - "src": "17426:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "17414:3:62", - "nodeType": "YulIdentifier", - "src": "17414:3:62" - }, - "nativeSrc": "17414:32:62", - "nodeType": "YulFunctionCall", - "src": "17414:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17387:6:62", - "nodeType": "YulIdentifier", - "src": "17387:6:62" - }, - "nativeSrc": "17387:60:62", - "nodeType": "YulFunctionCall", - "src": "17387:60:62" - }, - "nativeSrc": "17387:60:62", - "nodeType": "YulExpressionStatement", - "src": "17387:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17467:9:62", - "nodeType": "YulIdentifier", - "src": "17467:9:62" - }, - { - "kind": "number", - "nativeSrc": "17478:2:62", - "nodeType": "YulLiteral", - "src": "17478:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17463:3:62", - "nodeType": "YulIdentifier", - "src": "17463:3:62" - }, - "nativeSrc": "17463:18:62", - "nodeType": "YulFunctionCall", - "src": "17463:18:62" - }, - { - "name": "value2", - "nativeSrc": "17483:6:62", - "nodeType": "YulIdentifier", - "src": "17483:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17456:6:62", - "nodeType": "YulIdentifier", - "src": "17456:6:62" - }, - "nativeSrc": "17456:34:62", - "nodeType": "YulFunctionCall", - "src": "17456:34:62" - }, - "nativeSrc": "17456:34:62", - "nodeType": "YulExpressionStatement", - "src": "17456:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17510:9:62", - "nodeType": "YulIdentifier", - "src": "17510:9:62" - }, - { - "kind": "number", - "nativeSrc": "17521:2:62", - "nodeType": "YulLiteral", - "src": "17521:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17506:3:62", - "nodeType": "YulIdentifier", - "src": "17506:3:62" - }, - "nativeSrc": "17506:18:62", - "nodeType": "YulFunctionCall", - "src": "17506:18:62" - }, - { - "name": "value3", - "nativeSrc": "17526:6:62", - "nodeType": "YulIdentifier", - "src": "17526:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17499:6:62", - "nodeType": "YulIdentifier", - "src": "17499:6:62" - }, - "nativeSrc": "17499:34:62", - "nodeType": "YulFunctionCall", - "src": "17499:34:62" - }, - "nativeSrc": "17499:34:62", - "nodeType": "YulExpressionStatement", - "src": "17499:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_address_t_bytes32_t_uint256__to_t_uint256_t_address_t_bytes32_t_uint256__fromStack_reversed", - "nativeSrc": "17122:417:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "17252:9:62", - "nodeType": "YulTypedName", - "src": "17252:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "17263:6:62", - "nodeType": "YulTypedName", - "src": "17263:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "17271:6:62", - "nodeType": "YulTypedName", - "src": "17271:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "17279:6:62", - "nodeType": "YulTypedName", - "src": "17279:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "17287:6:62", - "nodeType": "YulTypedName", - "src": "17287:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "17298:4:62", - "nodeType": "YulTypedName", - "src": "17298:4:62", - "type": "" - } - ], - "src": "17122:417:62" - }, - { - "body": { - "nativeSrc": "17729:206:62", - "nodeType": "YulBlock", - "src": "17729:206:62", - "statements": [ - { - "nativeSrc": "17739:27:62", - "nodeType": "YulAssignment", - "src": "17739:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17751:9:62", - "nodeType": "YulIdentifier", - "src": "17751:9:62" - }, - { - "kind": "number", - "nativeSrc": "17762:3:62", - "nodeType": "YulLiteral", - "src": "17762:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17747:3:62", - "nodeType": "YulIdentifier", - "src": "17747:3:62" - }, - "nativeSrc": "17747:19:62", - "nodeType": "YulFunctionCall", - "src": "17747:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "17739:4:62", - "nodeType": "YulIdentifier", - "src": "17739:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17782:9:62", - "nodeType": "YulIdentifier", - "src": "17782:9:62" - }, - { - "name": "value0", - "nativeSrc": "17793:6:62", - "nodeType": "YulIdentifier", - "src": "17793:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17775:6:62", - "nodeType": "YulIdentifier", - "src": "17775:6:62" - }, - "nativeSrc": "17775:25:62", - "nodeType": "YulFunctionCall", - "src": "17775:25:62" - }, - "nativeSrc": "17775:25:62", - "nodeType": "YulExpressionStatement", - "src": "17775:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17820:9:62", - "nodeType": "YulIdentifier", - "src": "17820:9:62" - }, - { - "kind": "number", - "nativeSrc": "17831:2:62", - "nodeType": "YulLiteral", - "src": "17831:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17816:3:62", - "nodeType": "YulIdentifier", - "src": "17816:3:62" - }, - "nativeSrc": "17816:18:62", - "nodeType": "YulFunctionCall", - "src": "17816:18:62" - }, - { - "name": "value1", - "nativeSrc": "17836:6:62", - "nodeType": "YulIdentifier", - "src": "17836:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17809:6:62", - "nodeType": "YulIdentifier", - "src": "17809:6:62" - }, - "nativeSrc": "17809:34:62", - "nodeType": "YulFunctionCall", - "src": "17809:34:62" - }, - "nativeSrc": "17809:34:62", - "nodeType": "YulExpressionStatement", - "src": "17809:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17863:9:62", - "nodeType": "YulIdentifier", - "src": "17863:9:62" - }, - { - "kind": "number", - "nativeSrc": "17874:2:62", - "nodeType": "YulLiteral", - "src": "17874:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17859:3:62", - "nodeType": "YulIdentifier", - "src": "17859:3:62" - }, - "nativeSrc": "17859:18:62", - "nodeType": "YulFunctionCall", - "src": "17859:18:62" - }, - { - "name": "value2", - "nativeSrc": "17879:6:62", - "nodeType": "YulIdentifier", - "src": "17879:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17852:6:62", - "nodeType": "YulIdentifier", - "src": "17852:6:62" - }, - "nativeSrc": "17852:34:62", - "nodeType": "YulFunctionCall", - "src": "17852:34:62" - }, - "nativeSrc": "17852:34:62", - "nodeType": "YulExpressionStatement", - "src": "17852:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17906:9:62", - "nodeType": "YulIdentifier", - "src": "17906:9:62" - }, - { - "kind": "number", - "nativeSrc": "17917:2:62", - "nodeType": "YulLiteral", - "src": "17917:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17902:3:62", - "nodeType": "YulIdentifier", - "src": "17902:3:62" - }, - "nativeSrc": "17902:18:62", - "nodeType": "YulFunctionCall", - "src": "17902:18:62" - }, - { - "name": "value3", - "nativeSrc": "17922:6:62", - "nodeType": "YulIdentifier", - "src": "17922:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17895:6:62", - "nodeType": "YulIdentifier", - "src": "17895:6:62" - }, - "nativeSrc": "17895:34:62", - "nodeType": "YulFunctionCall", - "src": "17895:34:62" - }, - "nativeSrc": "17895:34:62", - "nodeType": "YulExpressionStatement", - "src": "17895:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed", - "nativeSrc": "17544:391:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "17674:9:62", - "nodeType": "YulTypedName", - "src": "17674:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "17685:6:62", - "nodeType": "YulTypedName", - "src": "17685:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "17693:6:62", - "nodeType": "YulTypedName", - "src": "17693:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "17701:6:62", - "nodeType": "YulTypedName", - "src": "17701:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "17709:6:62", - "nodeType": "YulTypedName", - "src": "17709:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "17720:4:62", - "nodeType": "YulTypedName", - "src": "17720:4:62", - "type": "" - } - ], - "src": "17544:391:62" - }, - { - "body": { - "nativeSrc": "18188:144:62", - "nodeType": "YulBlock", - "src": "18188:144:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "18205:3:62", - "nodeType": "YulIdentifier", - "src": "18205:3:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18214:3:62", - "nodeType": "YulLiteral", - "src": "18214:3:62", - "type": "", - "value": "240" - }, - { - "kind": "number", - "nativeSrc": "18219:4:62", - "nodeType": "YulLiteral", - "src": "18219:4:62", - "type": "", - "value": "6401" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "18210:3:62", - "nodeType": "YulIdentifier", - "src": "18210:3:62" - }, - "nativeSrc": "18210:14:62", - "nodeType": "YulFunctionCall", - "src": "18210:14:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18198:6:62", - "nodeType": "YulIdentifier", - "src": "18198:6:62" - }, - "nativeSrc": "18198:27:62", - "nodeType": "YulFunctionCall", - "src": "18198:27:62" - }, - "nativeSrc": "18198:27:62", - "nodeType": "YulExpressionStatement", - "src": "18198:27:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "18245:3:62", - "nodeType": "YulIdentifier", - "src": "18245:3:62" - }, - { - "kind": "number", - "nativeSrc": "18250:1:62", - "nodeType": "YulLiteral", - "src": "18250:1:62", - "type": "", - "value": "2" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18241:3:62", - "nodeType": "YulIdentifier", - "src": "18241:3:62" - }, - "nativeSrc": "18241:11:62", - "nodeType": "YulFunctionCall", - "src": "18241:11:62" - }, - { - "name": "value0", - "nativeSrc": "18254:6:62", - "nodeType": "YulIdentifier", - "src": "18254:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18234:6:62", - "nodeType": "YulIdentifier", - "src": "18234:6:62" - }, - "nativeSrc": "18234:27:62", - "nodeType": "YulFunctionCall", - "src": "18234:27:62" - }, - "nativeSrc": "18234:27:62", - "nodeType": "YulExpressionStatement", - "src": "18234:27:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "18281:3:62", - "nodeType": "YulIdentifier", - "src": "18281:3:62" - }, - { - "kind": "number", - "nativeSrc": "18286:2:62", - "nodeType": "YulLiteral", - "src": "18286:2:62", - "type": "", - "value": "34" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18277:3:62", - "nodeType": "YulIdentifier", - "src": "18277:3:62" - }, - "nativeSrc": "18277:12:62", - "nodeType": "YulFunctionCall", - "src": "18277:12:62" - }, - { - "name": "value1", - "nativeSrc": "18291:6:62", - "nodeType": "YulIdentifier", - "src": "18291:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18270:6:62", - "nodeType": "YulIdentifier", - "src": "18270:6:62" - }, - "nativeSrc": "18270:28:62", - "nodeType": "YulFunctionCall", - "src": "18270:28:62" - }, - "nativeSrc": "18270:28:62", - "nodeType": "YulExpressionStatement", - "src": "18270:28:62" - }, - { - "nativeSrc": "18307:19:62", - "nodeType": "YulAssignment", - "src": "18307:19:62", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "18318:3:62", - "nodeType": "YulIdentifier", - "src": "18318:3:62" - }, - { - "kind": "number", - "nativeSrc": "18323:2:62", - "nodeType": "YulLiteral", - "src": "18323:2:62", - "type": "", - "value": "66" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18314:3:62", - "nodeType": "YulIdentifier", - "src": "18314:3:62" - }, - "nativeSrc": "18314:12:62", - "nodeType": "YulFunctionCall", - "src": "18314:12:62" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "18307:3:62", - "nodeType": "YulIdentifier", - "src": "18307:3:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "17940:392:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "18156:3:62", - "nodeType": "YulTypedName", - "src": "18156:3:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "18161:6:62", - "nodeType": "YulTypedName", - "src": "18161:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "18169:6:62", - "nodeType": "YulTypedName", - "src": "18169:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "18180:3:62", - "nodeType": "YulTypedName", - "src": "18180:3:62", - "type": "" - } - ], - "src": "17940:392:62" - }, - { - "body": { - "nativeSrc": "18450:992:62", - "nodeType": "YulBlock", - "src": "18450:992:62", - "statements": [ - { - "nativeSrc": "18460:43:62", - "nodeType": "YulVariableDeclaration", - "src": "18460:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "18478:7:62", - "nodeType": "YulIdentifier", - "src": "18478:7:62" - }, - { - "name": "headStart", - "nativeSrc": "18487:9:62", - "nodeType": "YulIdentifier", - "src": "18487:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "18474:3:62", - "nodeType": "YulIdentifier", - "src": "18474:3:62" - }, - "nativeSrc": "18474:23:62", - "nodeType": "YulFunctionCall", - "src": "18474:23:62" - }, - { - "kind": "number", - "nativeSrc": "18499:3:62", - "nodeType": "YulLiteral", - "src": "18499:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "18470:3:62", - "nodeType": "YulIdentifier", - "src": "18470:3:62" - }, - "nativeSrc": "18470:33:62", - "nodeType": "YulFunctionCall", - "src": "18470:33:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "18464:2:62", - "nodeType": "YulTypedName", - "src": "18464:2:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "18518:16:62", - "nodeType": "YulBlock", - "src": "18518:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18527:1:62", - "nodeType": "YulLiteral", - "src": "18527:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "18530:1:62", - "nodeType": "YulLiteral", - "src": "18530:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "18520:6:62", - "nodeType": "YulIdentifier", - "src": "18520:6:62" - }, - "nativeSrc": "18520:12:62", - "nodeType": "YulFunctionCall", - "src": "18520:12:62" - }, - "nativeSrc": "18520:12:62", - "nodeType": "YulExpressionStatement", - "src": "18520:12:62" - } - ] - }, - "condition": { - "name": "_1", - "nativeSrc": "18515:2:62", - "nodeType": "YulIdentifier", - "src": "18515:2:62" - }, - "nativeSrc": "18512:22:62", - "nodeType": "YulIf", - "src": "18512:22:62" - }, - { - "nativeSrc": "18543:7:62", - "nodeType": "YulAssignment", - "src": "18543:7:62", - "value": { - "kind": "number", - "nativeSrc": "18549:1:62", - "nodeType": "YulLiteral", - "src": "18549:1:62", - "type": "", - "value": "0" - }, - "variableNames": [ - { - "name": "_1", - "nativeSrc": "18543:2:62", - "nodeType": "YulIdentifier", - "src": "18543:2:62" - } - ] - }, - { - "nativeSrc": "18559:16:62", - "nodeType": "YulVariableDeclaration", - "src": "18559:16:62", - "value": { - "name": "_1", - "nativeSrc": "18573:2:62", - "nodeType": "YulIdentifier", - "src": "18573:2:62" - }, - "variables": [ - { - "name": "memPtr", - "nativeSrc": "18563:6:62", - "nodeType": "YulTypedName", - "src": "18563:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "18584:19:62", - "nodeType": "YulAssignment", - "src": "18584:19:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18600:2:62", - "nodeType": "YulLiteral", - "src": "18600:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "18594:5:62", - "nodeType": "YulIdentifier", - "src": "18594:5:62" - }, - "nativeSrc": "18594:9:62", - "nodeType": "YulFunctionCall", - "src": "18594:9:62" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "18584:6:62", - "nodeType": "YulIdentifier", - "src": "18584:6:62" - } - ] - }, - { - "nativeSrc": "18612:34:62", - "nodeType": "YulVariableDeclaration", - "src": "18612:34:62", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "18634:6:62", - "nodeType": "YulIdentifier", - "src": "18634:6:62" - }, - { - "kind": "number", - "nativeSrc": "18642:3:62", - "nodeType": "YulLiteral", - "src": "18642:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18630:3:62", - "nodeType": "YulIdentifier", - "src": "18630:3:62" - }, - "nativeSrc": "18630:16:62", - "nodeType": "YulFunctionCall", - "src": "18630:16:62" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "18616:10:62", - "nodeType": "YulTypedName", - "src": "18616:10:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "18729:113:62", - "nodeType": "YulBlock", - "src": "18729:113:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "18750:2:62", - "nodeType": "YulIdentifier", - "src": "18750:2:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18758:3:62", - "nodeType": "YulLiteral", - "src": "18758:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "18763:10:62", - "nodeType": "YulLiteral", - "src": "18763:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "18754:3:62", - "nodeType": "YulIdentifier", - "src": "18754:3:62" - }, - "nativeSrc": "18754:20:62", - "nodeType": "YulFunctionCall", - "src": "18754:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18743:6:62", - "nodeType": "YulIdentifier", - "src": "18743:6:62" - }, - "nativeSrc": "18743:32:62", - "nodeType": "YulFunctionCall", - "src": "18743:32:62" - }, - "nativeSrc": "18743:32:62", - "nodeType": "YulExpressionStatement", - "src": "18743:32:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18795:1:62", - "nodeType": "YulLiteral", - "src": "18795:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "18798:4:62", - "nodeType": "YulLiteral", - "src": "18798:4:62", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18788:6:62", - "nodeType": "YulIdentifier", - "src": "18788:6:62" - }, - "nativeSrc": "18788:15:62", - "nodeType": "YulFunctionCall", - "src": "18788:15:62" - }, - "nativeSrc": "18788:15:62", - "nodeType": "YulExpressionStatement", - "src": "18788:15:62" - }, - { - "expression": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "18823:2:62", - "nodeType": "YulIdentifier", - "src": "18823:2:62" - }, - { - "kind": "number", - "nativeSrc": "18827:4:62", - "nodeType": "YulLiteral", - "src": "18827:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "18816:6:62", - "nodeType": "YulIdentifier", - "src": "18816:6:62" - }, - "nativeSrc": "18816:16:62", - "nodeType": "YulFunctionCall", - "src": "18816:16:62" - }, - "nativeSrc": "18816:16:62", - "nodeType": "YulExpressionStatement", - "src": "18816:16:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "18664:10:62", - "nodeType": "YulIdentifier", - "src": "18664:10:62" - }, - { - "kind": "number", - "nativeSrc": "18676:18:62", - "nodeType": "YulLiteral", - "src": "18676:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "18661:2:62", - "nodeType": "YulIdentifier", - "src": "18661:2:62" - }, - "nativeSrc": "18661:34:62", - "nodeType": "YulFunctionCall", - "src": "18661:34:62" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "18700:10:62", - "nodeType": "YulIdentifier", - "src": "18700:10:62" - }, - { - "name": "memPtr", - "nativeSrc": "18712:6:62", - "nodeType": "YulIdentifier", - "src": "18712:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "18697:2:62", - "nodeType": "YulIdentifier", - "src": "18697:2:62" - }, - "nativeSrc": "18697:22:62", - "nodeType": "YulFunctionCall", - "src": "18697:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "18658:2:62", - "nodeType": "YulIdentifier", - "src": "18658:2:62" - }, - "nativeSrc": "18658:62:62", - "nodeType": "YulFunctionCall", - "src": "18658:62:62" - }, - "nativeSrc": "18655:187:62", - "nodeType": "YulIf", - "src": "18655:187:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18858:2:62", - "nodeType": "YulLiteral", - "src": "18858:2:62", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "18862:10:62", - "nodeType": "YulIdentifier", - "src": "18862:10:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18851:6:62", - "nodeType": "YulIdentifier", - "src": "18851:6:62" - }, - "nativeSrc": "18851:22:62", - "nodeType": "YulFunctionCall", - "src": "18851:22:62" - }, - "nativeSrc": "18851:22:62", - "nodeType": "YulExpressionStatement", - "src": "18851:22:62" - }, - { - "nativeSrc": "18882:15:62", - "nodeType": "YulVariableDeclaration", - "src": "18882:15:62", - "value": { - "name": "_1", - "nativeSrc": "18895:2:62", - "nodeType": "YulIdentifier", - "src": "18895:2:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "18886:5:62", - "nodeType": "YulTypedName", - "src": "18886:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "18906:25:62", - "nodeType": "YulAssignment", - "src": "18906:25:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "18921:9:62", - "nodeType": "YulIdentifier", - "src": "18921:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "18915:5:62", - "nodeType": "YulIdentifier", - "src": "18915:5:62" - }, - "nativeSrc": "18915:16:62", - "nodeType": "YulFunctionCall", - "src": "18915:16:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "18906:5:62", - "nodeType": "YulIdentifier", - "src": "18906:5:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "18947:6:62", - "nodeType": "YulIdentifier", - "src": "18947:6:62" - }, - { - "name": "value", - "nativeSrc": "18955:5:62", - "nodeType": "YulIdentifier", - "src": "18955:5:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18940:6:62", - "nodeType": "YulIdentifier", - "src": "18940:6:62" - }, - "nativeSrc": "18940:21:62", - "nodeType": "YulFunctionCall", - "src": "18940:21:62" - }, - "nativeSrc": "18940:21:62", - "nodeType": "YulExpressionStatement", - "src": "18940:21:62" - }, - { - "nativeSrc": "18970:17:62", - "nodeType": "YulVariableDeclaration", - "src": "18970:17:62", - "value": { - "name": "_1", - "nativeSrc": "18985:2:62", - "nodeType": "YulIdentifier", - "src": "18985:2:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "18974:7:62", - "nodeType": "YulTypedName", - "src": "18974:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "18996:36:62", - "nodeType": "YulAssignment", - "src": "18996:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "19017:9:62", - "nodeType": "YulIdentifier", - "src": "19017:9:62" - }, - { - "kind": "number", - "nativeSrc": "19028:2:62", - "nodeType": "YulLiteral", - "src": "19028:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19013:3:62", - "nodeType": "YulIdentifier", - "src": "19013:3:62" - }, - "nativeSrc": "19013:18:62", - "nodeType": "YulFunctionCall", - "src": "19013:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "19007:5:62", - "nodeType": "YulIdentifier", - "src": "19007:5:62" - }, - "nativeSrc": "19007:25:62", - "nodeType": "YulFunctionCall", - "src": "19007:25:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "18996:7:62", - "nodeType": "YulIdentifier", - "src": "18996:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "19052:6:62", - "nodeType": "YulIdentifier", - "src": "19052:6:62" - }, - { - "kind": "number", - "nativeSrc": "19060:2:62", - "nodeType": "YulLiteral", - "src": "19060:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19048:3:62", - "nodeType": "YulIdentifier", - "src": "19048:3:62" - }, - "nativeSrc": "19048:15:62", - "nodeType": "YulFunctionCall", - "src": "19048:15:62" - }, - { - "name": "value_1", - "nativeSrc": "19065:7:62", - "nodeType": "YulIdentifier", - "src": "19065:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19041:6:62", - "nodeType": "YulIdentifier", - "src": "19041:6:62" - }, - "nativeSrc": "19041:32:62", - "nodeType": "YulFunctionCall", - "src": "19041:32:62" - }, - "nativeSrc": "19041:32:62", - "nodeType": "YulExpressionStatement", - "src": "19041:32:62" - }, - { - "nativeSrc": "19082:17:62", - "nodeType": "YulVariableDeclaration", - "src": "19082:17:62", - "value": { - "name": "_1", - "nativeSrc": "19097:2:62", - "nodeType": "YulIdentifier", - "src": "19097:2:62" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "19086:7:62", - "nodeType": "YulTypedName", - "src": "19086:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "19108:36:62", - "nodeType": "YulAssignment", - "src": "19108:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "19129:9:62", - "nodeType": "YulIdentifier", - "src": "19129:9:62" - }, - { - "kind": "number", - "nativeSrc": "19140:2:62", - "nodeType": "YulLiteral", - "src": "19140:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19125:3:62", - "nodeType": "YulIdentifier", - "src": "19125:3:62" - }, - "nativeSrc": "19125:18:62", - "nodeType": "YulFunctionCall", - "src": "19125:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "19119:5:62", - "nodeType": "YulIdentifier", - "src": "19119:5:62" - }, - "nativeSrc": "19119:25:62", - "nodeType": "YulFunctionCall", - "src": "19119:25:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "19108:7:62", - "nodeType": "YulIdentifier", - "src": "19108:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "19164:6:62", - "nodeType": "YulIdentifier", - "src": "19164:6:62" - }, - { - "kind": "number", - "nativeSrc": "19172:2:62", - "nodeType": "YulLiteral", - "src": "19172:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19160:3:62", - "nodeType": "YulIdentifier", - "src": "19160:3:62" - }, - "nativeSrc": "19160:15:62", - "nodeType": "YulFunctionCall", - "src": "19160:15:62" - }, - { - "name": "value_2", - "nativeSrc": "19177:7:62", - "nodeType": "YulIdentifier", - "src": "19177:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19153:6:62", - "nodeType": "YulIdentifier", - "src": "19153:6:62" - }, - "nativeSrc": "19153:32:62", - "nodeType": "YulFunctionCall", - "src": "19153:32:62" - }, - "nativeSrc": "19153:32:62", - "nodeType": "YulExpressionStatement", - "src": "19153:32:62" - }, - { - "nativeSrc": "19194:17:62", - "nodeType": "YulVariableDeclaration", - "src": "19194:17:62", - "value": { - "name": "_1", - "nativeSrc": "19209:2:62", - "nodeType": "YulIdentifier", - "src": "19209:2:62" - }, - "variables": [ - { - "name": "value_3", - "nativeSrc": "19198:7:62", - "nodeType": "YulTypedName", - "src": "19198:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "19220:36:62", - "nodeType": "YulAssignment", - "src": "19220:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "19241:9:62", - "nodeType": "YulIdentifier", - "src": "19241:9:62" - }, - { - "kind": "number", - "nativeSrc": "19252:2:62", - "nodeType": "YulLiteral", - "src": "19252:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19237:3:62", - "nodeType": "YulIdentifier", - "src": "19237:3:62" - }, - "nativeSrc": "19237:18:62", - "nodeType": "YulFunctionCall", - "src": "19237:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "19231:5:62", - "nodeType": "YulIdentifier", - "src": "19231:5:62" - }, - "nativeSrc": "19231:25:62", - "nodeType": "YulFunctionCall", - "src": "19231:25:62" - }, - "variableNames": [ - { - "name": "value_3", - "nativeSrc": "19220:7:62", - "nodeType": "YulIdentifier", - "src": "19220:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "19276:6:62", - "nodeType": "YulIdentifier", - "src": "19276:6:62" - }, - { - "kind": "number", - "nativeSrc": "19284:2:62", - "nodeType": "YulLiteral", - "src": "19284:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19272:3:62", - "nodeType": "YulIdentifier", - "src": "19272:3:62" - }, - "nativeSrc": "19272:15:62", - "nodeType": "YulFunctionCall", - "src": "19272:15:62" - }, - { - "name": "value_3", - "nativeSrc": "19289:7:62", - "nodeType": "YulIdentifier", - "src": "19289:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19265:6:62", - "nodeType": "YulIdentifier", - "src": "19265:6:62" - }, - "nativeSrc": "19265:32:62", - "nodeType": "YulFunctionCall", - "src": "19265:32:62" - }, - "nativeSrc": "19265:32:62", - "nodeType": "YulExpressionStatement", - "src": "19265:32:62" - }, - { - "nativeSrc": "19306:17:62", - "nodeType": "YulVariableDeclaration", - "src": "19306:17:62", - "value": { - "name": "_1", - "nativeSrc": "19321:2:62", - "nodeType": "YulIdentifier", - "src": "19321:2:62" - }, - "variables": [ - { - "name": "value_4", - "nativeSrc": "19310:7:62", - "nodeType": "YulTypedName", - "src": "19310:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "19332:37:62", - "nodeType": "YulAssignment", - "src": "19332:37:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "19353:9:62", - "nodeType": "YulIdentifier", - "src": "19353:9:62" - }, - { - "kind": "number", - "nativeSrc": "19364:3:62", - "nodeType": "YulLiteral", - "src": "19364:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19349:3:62", - "nodeType": "YulIdentifier", - "src": "19349:3:62" - }, - "nativeSrc": "19349:19:62", - "nodeType": "YulFunctionCall", - "src": "19349:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "19343:5:62", - "nodeType": "YulIdentifier", - "src": "19343:5:62" - }, - "nativeSrc": "19343:26:62", - "nodeType": "YulFunctionCall", - "src": "19343:26:62" - }, - "variableNames": [ - { - "name": "value_4", - "nativeSrc": "19332:7:62", - "nodeType": "YulIdentifier", - "src": "19332:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "19389:6:62", - "nodeType": "YulIdentifier", - "src": "19389:6:62" - }, - { - "kind": "number", - "nativeSrc": "19397:3:62", - "nodeType": "YulLiteral", - "src": "19397:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19385:3:62", - "nodeType": "YulIdentifier", - "src": "19385:3:62" - }, - "nativeSrc": "19385:16:62", - "nodeType": "YulFunctionCall", - "src": "19385:16:62" - }, - { - "name": "value_4", - "nativeSrc": "19403:7:62", - "nodeType": "YulIdentifier", - "src": "19403:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19378:6:62", - "nodeType": "YulIdentifier", - "src": "19378:6:62" - }, - "nativeSrc": "19378:33:62", - "nodeType": "YulFunctionCall", - "src": "19378:33:62" - }, - "nativeSrc": "19378:33:62", - "nodeType": "YulExpressionStatement", - "src": "19378:33:62" - }, - { - "nativeSrc": "19420:16:62", - "nodeType": "YulAssignment", - "src": "19420:16:62", - "value": { - "name": "memPtr", - "nativeSrc": "19430:6:62", - "nodeType": "YulIdentifier", - "src": "19430:6:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "19420:6:62", - "nodeType": "YulIdentifier", - "src": "19420:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory", - "nativeSrc": "18337:1105:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "18416:9:62", - "nodeType": "YulTypedName", - "src": "18416:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "18427:7:62", - "nodeType": "YulTypedName", - "src": "18427:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "18439:6:62", - "nodeType": "YulTypedName", - "src": "18439:6:62", - "type": "" - } - ], - "src": "18337:1105:62" - }, - { - "body": { - "nativeSrc": "19527:169:62", - "nodeType": "YulBlock", - "src": "19527:169:62", - "statements": [ - { - "body": { - "nativeSrc": "19573:16:62", - "nodeType": "YulBlock", - "src": "19573:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19582:1:62", - "nodeType": "YulLiteral", - "src": "19582:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "19585:1:62", - "nodeType": "YulLiteral", - "src": "19585:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "19575:6:62", - "nodeType": "YulIdentifier", - "src": "19575:6:62" - }, - "nativeSrc": "19575:12:62", - "nodeType": "YulFunctionCall", - "src": "19575:12:62" - }, - "nativeSrc": "19575:12:62", - "nodeType": "YulExpressionStatement", - "src": "19575:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "19548:7:62", - "nodeType": "YulIdentifier", - "src": "19548:7:62" - }, - { - "name": "headStart", - "nativeSrc": "19557:9:62", - "nodeType": "YulIdentifier", - "src": "19557:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "19544:3:62", - "nodeType": "YulIdentifier", - "src": "19544:3:62" - }, - "nativeSrc": "19544:23:62", - "nodeType": "YulFunctionCall", - "src": "19544:23:62" - }, - { - "kind": "number", - "nativeSrc": "19569:2:62", - "nodeType": "YulLiteral", - "src": "19569:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "19540:3:62", - "nodeType": "YulIdentifier", - "src": "19540:3:62" - }, - "nativeSrc": "19540:32:62", - "nodeType": "YulFunctionCall", - "src": "19540:32:62" - }, - "nativeSrc": "19537:52:62", - "nodeType": "YulIf", - "src": "19537:52:62" - }, - { - "nativeSrc": "19598:29:62", - "nodeType": "YulVariableDeclaration", - "src": "19598:29:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "19617:9:62", - "nodeType": "YulIdentifier", - "src": "19617:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "19611:5:62", - "nodeType": "YulIdentifier", - "src": "19611:5:62" - }, - "nativeSrc": "19611:16:62", - "nodeType": "YulFunctionCall", - "src": "19611:16:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "19602:5:62", - "nodeType": "YulTypedName", - "src": "19602:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "19660:5:62", - "nodeType": "YulIdentifier", - "src": "19660:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint32", - "nativeSrc": "19636:23:62", - "nodeType": "YulIdentifier", - "src": "19636:23:62" - }, - "nativeSrc": "19636:30:62", - "nodeType": "YulFunctionCall", - "src": "19636:30:62" - }, - "nativeSrc": "19636:30:62", - "nodeType": "YulExpressionStatement", - "src": "19636:30:62" - }, - { - "nativeSrc": "19675:15:62", - "nodeType": "YulAssignment", - "src": "19675:15:62", - "value": { - "name": "value", - "nativeSrc": "19685:5:62", - "nodeType": "YulIdentifier", - "src": "19685:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "19675:6:62", - "nodeType": "YulIdentifier", - "src": "19675:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32_fromMemory", - "nativeSrc": "19447:249:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "19493:9:62", - "nodeType": "YulTypedName", - "src": "19493:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "19504:7:62", - "nodeType": "YulTypedName", - "src": "19504:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "19516:6:62", - "nodeType": "YulTypedName", - "src": "19516:6:62", - "type": "" - } - ], - "src": "19447:249:62" - }, - { - "body": { - "nativeSrc": "19753:116:62", - "nodeType": "YulBlock", - "src": "19753:116:62", - "statements": [ - { - "nativeSrc": "19763:20:62", - "nodeType": "YulAssignment", - "src": "19763:20:62", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "19778:1:62", - "nodeType": "YulIdentifier", - "src": "19778:1:62" - }, - { - "name": "y", - "nativeSrc": "19781:1:62", - "nodeType": "YulIdentifier", - "src": "19781:1:62" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "19774:3:62", - "nodeType": "YulIdentifier", - "src": "19774:3:62" - }, - "nativeSrc": "19774:9:62", - "nodeType": "YulFunctionCall", - "src": "19774:9:62" - }, - "variableNames": [ - { - "name": "product", - "nativeSrc": "19763:7:62", - "nodeType": "YulIdentifier", - "src": "19763:7:62" - } - ] - }, - { - "body": { - "nativeSrc": "19841:22:62", - "nodeType": "YulBlock", - "src": "19841:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "19843:16:62", - "nodeType": "YulIdentifier", - "src": "19843:16:62" - }, - "nativeSrc": "19843:18:62", - "nodeType": "YulFunctionCall", - "src": "19843:18:62" - }, - "nativeSrc": "19843:18:62", - "nodeType": "YulExpressionStatement", - "src": "19843:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nativeSrc": "19812:1:62", - "nodeType": "YulIdentifier", - "src": "19812:1:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "19805:6:62", - "nodeType": "YulIdentifier", - "src": "19805:6:62" - }, - "nativeSrc": "19805:9:62", - "nodeType": "YulFunctionCall", - "src": "19805:9:62" - }, - { - "arguments": [ - { - "name": "y", - "nativeSrc": "19819:1:62", - "nodeType": "YulIdentifier", - "src": "19819:1:62" - }, - { - "arguments": [ - { - "name": "product", - "nativeSrc": "19826:7:62", - "nodeType": "YulIdentifier", - "src": "19826:7:62" - }, - { - "name": "x", - "nativeSrc": "19835:1:62", - "nodeType": "YulIdentifier", - "src": "19835:1:62" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "19822:3:62", - "nodeType": "YulIdentifier", - "src": "19822:3:62" - }, - "nativeSrc": "19822:15:62", - "nodeType": "YulFunctionCall", - "src": "19822:15:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "19816:2:62", - "nodeType": "YulIdentifier", - "src": "19816:2:62" - }, - "nativeSrc": "19816:22:62", - "nodeType": "YulFunctionCall", - "src": "19816:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "19802:2:62", - "nodeType": "YulIdentifier", - "src": "19802:2:62" - }, - "nativeSrc": "19802:37:62", - "nodeType": "YulFunctionCall", - "src": "19802:37:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "19795:6:62", - "nodeType": "YulIdentifier", - "src": "19795:6:62" - }, - "nativeSrc": "19795:45:62", - "nodeType": "YulFunctionCall", - "src": "19795:45:62" - }, - "nativeSrc": "19792:71:62", - "nodeType": "YulIf", - "src": "19792:71:62" - } - ] - }, - "name": "checked_mul_t_uint256", - "nativeSrc": "19701:168:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "19732:1:62", - "nodeType": "YulTypedName", - "src": "19732:1:62", - "type": "" - }, - { - "name": "y", - "nativeSrc": "19735:1:62", - "nodeType": "YulTypedName", - "src": "19735:1:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nativeSrc": "19741:7:62", - "nodeType": "YulTypedName", - "src": "19741:7:62", - "type": "" - } - ], - "src": "19701:168:62" - }, - { - "body": { - "nativeSrc": "19989:341:62", - "nodeType": "YulBlock", - "src": "19989:341:62", - "statements": [ - { - "body": { - "nativeSrc": "20035:16:62", - "nodeType": "YulBlock", - "src": "20035:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20044:1:62", - "nodeType": "YulLiteral", - "src": "20044:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20047:1:62", - "nodeType": "YulLiteral", - "src": "20047:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20037:6:62", - "nodeType": "YulIdentifier", - "src": "20037:6:62" - }, - "nativeSrc": "20037:12:62", - "nodeType": "YulFunctionCall", - "src": "20037:12:62" - }, - "nativeSrc": "20037:12:62", - "nodeType": "YulExpressionStatement", - "src": "20037:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "20010:7:62", - "nodeType": "YulIdentifier", - "src": "20010:7:62" - }, - { - "name": "headStart", - "nativeSrc": "20019:9:62", - "nodeType": "YulIdentifier", - "src": "20019:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "20006:3:62", - "nodeType": "YulIdentifier", - "src": "20006:3:62" - }, - "nativeSrc": "20006:23:62", - "nodeType": "YulFunctionCall", - "src": "20006:23:62" - }, - { - "kind": "number", - "nativeSrc": "20031:2:62", - "nodeType": "YulLiteral", - "src": "20031:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "20002:3:62", - "nodeType": "YulIdentifier", - "src": "20002:3:62" - }, - "nativeSrc": "20002:32:62", - "nodeType": "YulFunctionCall", - "src": "20002:32:62" - }, - "nativeSrc": "19999:52:62", - "nodeType": "YulIf", - "src": "19999:52:62" - }, - { - "nativeSrc": "20060:14:62", - "nodeType": "YulVariableDeclaration", - "src": "20060:14:62", - "value": { - "kind": "number", - "nativeSrc": "20073:1:62", - "nodeType": "YulLiteral", - "src": "20073:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "20064:5:62", - "nodeType": "YulTypedName", - "src": "20064:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "20083:25:62", - "nodeType": "YulAssignment", - "src": "20083:25:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "20098:9:62", - "nodeType": "YulIdentifier", - "src": "20098:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "20092:5:62", - "nodeType": "YulIdentifier", - "src": "20092:5:62" - }, - "nativeSrc": "20092:16:62", - "nodeType": "YulFunctionCall", - "src": "20092:16:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "20083:5:62", - "nodeType": "YulIdentifier", - "src": "20083:5:62" - } - ] - }, - { - "nativeSrc": "20117:15:62", - "nodeType": "YulAssignment", - "src": "20117:15:62", - "value": { - "name": "value", - "nativeSrc": "20127:5:62", - "nodeType": "YulIdentifier", - "src": "20127:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "20117:6:62", - "nodeType": "YulIdentifier", - "src": "20117:6:62" - } - ] - }, - { - "nativeSrc": "20141:16:62", - "nodeType": "YulVariableDeclaration", - "src": "20141:16:62", - "value": { - "kind": "number", - "nativeSrc": "20156:1:62", - "nodeType": "YulLiteral", - "src": "20156:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "20145:7:62", - "nodeType": "YulTypedName", - "src": "20145:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "20166:36:62", - "nodeType": "YulAssignment", - "src": "20166:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "20187:9:62", - "nodeType": "YulIdentifier", - "src": "20187:9:62" - }, - { - "kind": "number", - "nativeSrc": "20198:2:62", - "nodeType": "YulLiteral", - "src": "20198:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20183:3:62", - "nodeType": "YulIdentifier", - "src": "20183:3:62" - }, - "nativeSrc": "20183:18:62", - "nodeType": "YulFunctionCall", - "src": "20183:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "20177:5:62", - "nodeType": "YulIdentifier", - "src": "20177:5:62" - }, - "nativeSrc": "20177:25:62", - "nodeType": "YulFunctionCall", - "src": "20177:25:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "20166:7:62", - "nodeType": "YulIdentifier", - "src": "20166:7:62" - } - ] - }, - { - "nativeSrc": "20211:17:62", - "nodeType": "YulAssignment", - "src": "20211:17:62", - "value": { - "name": "value_1", - "nativeSrc": "20221:7:62", - "nodeType": "YulIdentifier", - "src": "20221:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "20211:6:62", - "nodeType": "YulIdentifier", - "src": "20211:6:62" - } - ] - }, - { - "nativeSrc": "20237:16:62", - "nodeType": "YulVariableDeclaration", - "src": "20237:16:62", - "value": { - "kind": "number", - "nativeSrc": "20252:1:62", - "nodeType": "YulLiteral", - "src": "20252:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "20241:7:62", - "nodeType": "YulTypedName", - "src": "20241:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "20262:36:62", - "nodeType": "YulAssignment", - "src": "20262:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "20283:9:62", - "nodeType": "YulIdentifier", - "src": "20283:9:62" - }, - { - "kind": "number", - "nativeSrc": "20294:2:62", - "nodeType": "YulLiteral", - "src": "20294:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20279:3:62", - "nodeType": "YulIdentifier", - "src": "20279:3:62" - }, - "nativeSrc": "20279:18:62", - "nodeType": "YulFunctionCall", - "src": "20279:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "20273:5:62", - "nodeType": "YulIdentifier", - "src": "20273:5:62" - }, - "nativeSrc": "20273:25:62", - "nodeType": "YulFunctionCall", - "src": "20273:25:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "20262:7:62", - "nodeType": "YulIdentifier", - "src": "20262:7:62" - } - ] - }, - { - "nativeSrc": "20307:17:62", - "nodeType": "YulAssignment", - "src": "20307:17:62", - "value": { - "name": "value_2", - "nativeSrc": "20317:7:62", - "nodeType": "YulIdentifier", - "src": "20317:7:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "20307:6:62", - "nodeType": "YulIdentifier", - "src": "20307:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes32t_bytes32t_bytes32_fromMemory", - "nativeSrc": "19874:456:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "19939:9:62", - "nodeType": "YulTypedName", - "src": "19939:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "19950:7:62", - "nodeType": "YulTypedName", - "src": "19950:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "19962:6:62", - "nodeType": "YulTypedName", - "src": "19962:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "19970:6:62", - "nodeType": "YulTypedName", - "src": "19970:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "19978:6:62", - "nodeType": "YulTypedName", - "src": "19978:6:62", - "type": "" - } - ], - "src": "19874:456:62" - }, - { - "body": { - "nativeSrc": "20566:291:62", - "nodeType": "YulBlock", - "src": "20566:291:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "20583:3:62", - "nodeType": "YulIdentifier", - "src": "20583:3:62" - }, - { - "name": "value0", - "nativeSrc": "20588:6:62", - "nodeType": "YulIdentifier", - "src": "20588:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "20576:6:62", - "nodeType": "YulIdentifier", - "src": "20576:6:62" - }, - "nativeSrc": "20576:19:62", - "nodeType": "YulFunctionCall", - "src": "20576:19:62" - }, - "nativeSrc": "20576:19:62", - "nodeType": "YulExpressionStatement", - "src": "20576:19:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "20615:3:62", - "nodeType": "YulIdentifier", - "src": "20615:3:62" - }, - { - "kind": "number", - "nativeSrc": "20620:2:62", - "nodeType": "YulLiteral", - "src": "20620:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20611:3:62", - "nodeType": "YulIdentifier", - "src": "20611:3:62" - }, - "nativeSrc": "20611:12:62", - "nodeType": "YulFunctionCall", - "src": "20611:12:62" - }, - { - "name": "value1", - "nativeSrc": "20625:6:62", - "nodeType": "YulIdentifier", - "src": "20625:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "20604:6:62", - "nodeType": "YulIdentifier", - "src": "20604:6:62" - }, - "nativeSrc": "20604:28:62", - "nodeType": "YulFunctionCall", - "src": "20604:28:62" - }, - "nativeSrc": "20604:28:62", - "nodeType": "YulExpressionStatement", - "src": "20604:28:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "20652:3:62", - "nodeType": "YulIdentifier", - "src": "20652:3:62" - }, - { - "kind": "number", - "nativeSrc": "20657:2:62", - "nodeType": "YulLiteral", - "src": "20657:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20648:3:62", - "nodeType": "YulIdentifier", - "src": "20648:3:62" - }, - "nativeSrc": "20648:12:62", - "nodeType": "YulFunctionCall", - "src": "20648:12:62" - }, - { - "name": "value2", - "nativeSrc": "20662:6:62", - "nodeType": "YulIdentifier", - "src": "20662:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "20641:6:62", - "nodeType": "YulIdentifier", - "src": "20641:6:62" - }, - "nativeSrc": "20641:28:62", - "nodeType": "YulFunctionCall", - "src": "20641:28:62" - }, - "nativeSrc": "20641:28:62", - "nodeType": "YulExpressionStatement", - "src": "20641:28:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "20689:3:62", - "nodeType": "YulIdentifier", - "src": "20689:3:62" - }, - { - "kind": "number", - "nativeSrc": "20694:2:62", - "nodeType": "YulLiteral", - "src": "20694:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20685:3:62", - "nodeType": "YulIdentifier", - "src": "20685:3:62" - }, - "nativeSrc": "20685:12:62", - "nodeType": "YulFunctionCall", - "src": "20685:12:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20707:2:62", - "nodeType": "YulLiteral", - "src": "20707:2:62", - "type": "", - "value": "96" - }, - { - "name": "value3", - "nativeSrc": "20711:6:62", - "nodeType": "YulIdentifier", - "src": "20711:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "20703:3:62", - "nodeType": "YulIdentifier", - "src": "20703:3:62" - }, - "nativeSrc": "20703:15:62", - "nodeType": "YulFunctionCall", - "src": "20703:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20732:2:62", - "nodeType": "YulLiteral", - "src": "20732:2:62", - "type": "", - "value": "96" - }, - { - "kind": "number", - "nativeSrc": "20736:1:62", - "nodeType": "YulLiteral", - "src": "20736:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "20728:3:62", - "nodeType": "YulIdentifier", - "src": "20728:3:62" - }, - "nativeSrc": "20728:10:62", - "nodeType": "YulFunctionCall", - "src": "20728:10:62" - }, - { - "kind": "number", - "nativeSrc": "20740:1:62", - "nodeType": "YulLiteral", - "src": "20740:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "20724:3:62", - "nodeType": "YulIdentifier", - "src": "20724:3:62" - }, - "nativeSrc": "20724:18:62", - "nodeType": "YulFunctionCall", - "src": "20724:18:62" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "20720:3:62", - "nodeType": "YulIdentifier", - "src": "20720:3:62" - }, - "nativeSrc": "20720:23:62", - "nodeType": "YulFunctionCall", - "src": "20720:23:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "20699:3:62", - "nodeType": "YulIdentifier", - "src": "20699:3:62" - }, - "nativeSrc": "20699:45:62", - "nodeType": "YulFunctionCall", - "src": "20699:45:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "20678:6:62", - "nodeType": "YulIdentifier", - "src": "20678:6:62" - }, - "nativeSrc": "20678:67:62", - "nodeType": "YulFunctionCall", - "src": "20678:67:62" - }, - "nativeSrc": "20678:67:62", - "nodeType": "YulExpressionStatement", - "src": "20678:67:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "20765:3:62", - "nodeType": "YulIdentifier", - "src": "20765:3:62" - }, - { - "kind": "number", - "nativeSrc": "20770:3:62", - "nodeType": "YulLiteral", - "src": "20770:3:62", - "type": "", - "value": "116" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20761:3:62", - "nodeType": "YulIdentifier", - "src": "20761:3:62" - }, - "nativeSrc": "20761:13:62", - "nodeType": "YulFunctionCall", - "src": "20761:13:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20784:2:62", - "nodeType": "YulLiteral", - "src": "20784:2:62", - "type": "", - "value": "96" - }, - { - "name": "value4", - "nativeSrc": "20788:6:62", - "nodeType": "YulIdentifier", - "src": "20788:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "20780:3:62", - "nodeType": "YulIdentifier", - "src": "20780:3:62" - }, - "nativeSrc": "20780:15:62", - "nodeType": "YulFunctionCall", - "src": "20780:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20809:2:62", - "nodeType": "YulLiteral", - "src": "20809:2:62", - "type": "", - "value": "96" - }, - { - "kind": "number", - "nativeSrc": "20813:1:62", - "nodeType": "YulLiteral", - "src": "20813:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "20805:3:62", - "nodeType": "YulIdentifier", - "src": "20805:3:62" - }, - "nativeSrc": "20805:10:62", - "nodeType": "YulFunctionCall", - "src": "20805:10:62" - }, - { - "kind": "number", - "nativeSrc": "20817:1:62", - "nodeType": "YulLiteral", - "src": "20817:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "20801:3:62", - "nodeType": "YulIdentifier", - "src": "20801:3:62" - }, - "nativeSrc": "20801:18:62", - "nodeType": "YulFunctionCall", - "src": "20801:18:62" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "20797:3:62", - "nodeType": "YulIdentifier", - "src": "20797:3:62" - }, - "nativeSrc": "20797:23:62", - "nodeType": "YulFunctionCall", - "src": "20797:23:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "20776:3:62", - "nodeType": "YulIdentifier", - "src": "20776:3:62" - }, - "nativeSrc": "20776:45:62", - "nodeType": "YulFunctionCall", - "src": "20776:45:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "20754:6:62", - "nodeType": "YulIdentifier", - "src": "20754:6:62" - }, - "nativeSrc": "20754:68:62", - "nodeType": "YulFunctionCall", - "src": "20754:68:62" - }, - "nativeSrc": "20754:68:62", - "nodeType": "YulExpressionStatement", - "src": "20754:68:62" - }, - { - "nativeSrc": "20831:20:62", - "nodeType": "YulAssignment", - "src": "20831:20:62", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "20842:3:62", - "nodeType": "YulIdentifier", - "src": "20842:3:62" - }, - { - "kind": "number", - "nativeSrc": "20847:3:62", - "nodeType": "YulLiteral", - "src": "20847:3:62", - "type": "", - "value": "136" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20838:3:62", - "nodeType": "YulIdentifier", - "src": "20838:3:62" - }, - "nativeSrc": "20838:13:62", - "nodeType": "YulFunctionCall", - "src": "20838:13:62" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "20831:3:62", - "nodeType": "YulIdentifier", - "src": "20831:3:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "20335:522:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "20510:3:62", - "nodeType": "YulTypedName", - "src": "20510:3:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "20515:6:62", - "nodeType": "YulTypedName", - "src": "20515:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "20523:6:62", - "nodeType": "YulTypedName", - "src": "20523:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "20531:6:62", - "nodeType": "YulTypedName", - "src": "20531:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "20539:6:62", - "nodeType": "YulTypedName", - "src": "20539:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "20547:6:62", - "nodeType": "YulTypedName", - "src": "20547:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "20558:3:62", - "nodeType": "YulTypedName", - "src": "20558:3:62", - "type": "" - } - ], - "src": "20335:522:62" - }, - { - "body": { - "nativeSrc": "21065:229:62", - "nodeType": "YulBlock", - "src": "21065:229:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21082:9:62", - "nodeType": "YulIdentifier", - "src": "21082:9:62" - }, - { - "name": "value0", - "nativeSrc": "21093:6:62", - "nodeType": "YulIdentifier", - "src": "21093:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21075:6:62", - "nodeType": "YulIdentifier", - "src": "21075:6:62" - }, - "nativeSrc": "21075:25:62", - "nodeType": "YulFunctionCall", - "src": "21075:25:62" - }, - "nativeSrc": "21075:25:62", - "nodeType": "YulExpressionStatement", - "src": "21075:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21120:9:62", - "nodeType": "YulIdentifier", - "src": "21120:9:62" - }, - { - "kind": "number", - "nativeSrc": "21131:2:62", - "nodeType": "YulLiteral", - "src": "21131:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21116:3:62", - "nodeType": "YulIdentifier", - "src": "21116:3:62" - }, - "nativeSrc": "21116:18:62", - "nodeType": "YulFunctionCall", - "src": "21116:18:62" - }, - { - "name": "value1", - "nativeSrc": "21136:6:62", - "nodeType": "YulIdentifier", - "src": "21136:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21109:6:62", - "nodeType": "YulIdentifier", - "src": "21109:6:62" - }, - "nativeSrc": "21109:34:62", - "nodeType": "YulFunctionCall", - "src": "21109:34:62" - }, - "nativeSrc": "21109:34:62", - "nodeType": "YulExpressionStatement", - "src": "21109:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21163:9:62", - "nodeType": "YulIdentifier", - "src": "21163:9:62" - }, - { - "kind": "number", - "nativeSrc": "21174:2:62", - "nodeType": "YulLiteral", - "src": "21174:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21159:3:62", - "nodeType": "YulIdentifier", - "src": "21159:3:62" - }, - "nativeSrc": "21159:18:62", - "nodeType": "YulFunctionCall", - "src": "21159:18:62" - }, - { - "kind": "number", - "nativeSrc": "21179:3:62", - "nodeType": "YulLiteral", - "src": "21179:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21152:6:62", - "nodeType": "YulIdentifier", - "src": "21152:6:62" - }, - "nativeSrc": "21152:31:62", - "nodeType": "YulFunctionCall", - "src": "21152:31:62" - }, - "nativeSrc": "21152:31:62", - "nodeType": "YulExpressionStatement", - "src": "21152:31:62" - }, - { - "nativeSrc": "21192:53:62", - "nodeType": "YulAssignment", - "src": "21192:53:62", - "value": { - "arguments": [ - { - "name": "value2", - "nativeSrc": "21217:6:62", - "nodeType": "YulIdentifier", - "src": "21217:6:62" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21229:9:62", - "nodeType": "YulIdentifier", - "src": "21229:9:62" - }, - { - "kind": "number", - "nativeSrc": "21240:3:62", - "nodeType": "YulLiteral", - "src": "21240:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21225:3:62", - "nodeType": "YulIdentifier", - "src": "21225:3:62" - }, - "nativeSrc": "21225:19:62", - "nodeType": "YulFunctionCall", - "src": "21225:19:62" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nativeSrc": "21200:16:62", - "nodeType": "YulIdentifier", - "src": "21200:16:62" - }, - "nativeSrc": "21200:45:62", - "nodeType": "YulFunctionCall", - "src": "21200:45:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "21192:4:62", - "nodeType": "YulIdentifier", - "src": "21192:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21265:9:62", - "nodeType": "YulIdentifier", - "src": "21265:9:62" - }, - { - "kind": "number", - "nativeSrc": "21276:2:62", - "nodeType": "YulLiteral", - "src": "21276:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21261:3:62", - "nodeType": "YulIdentifier", - "src": "21261:3:62" - }, - "nativeSrc": "21261:18:62", - "nodeType": "YulFunctionCall", - "src": "21261:18:62" - }, - { - "name": "value3", - "nativeSrc": "21281:6:62", - "nodeType": "YulIdentifier", - "src": "21281:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21254:6:62", - "nodeType": "YulIdentifier", - "src": "21254:6:62" - }, - "nativeSrc": "21254:34:62", - "nodeType": "YulFunctionCall", - "src": "21254:34:62" - }, - "nativeSrc": "21254:34:62", - "nodeType": "YulExpressionStatement", - "src": "21254:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__to_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__fromStack_reversed", - "nativeSrc": "20862:432:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "21010:9:62", - "nodeType": "YulTypedName", - "src": "21010:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "21021:6:62", - "nodeType": "YulTypedName", - "src": "21021:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "21029:6:62", - "nodeType": "YulTypedName", - "src": "21029:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "21037:6:62", - "nodeType": "YulTypedName", - "src": "21037:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "21045:6:62", - "nodeType": "YulTypedName", - "src": "21045:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "21056:4:62", - "nodeType": "YulTypedName", - "src": "21056:4:62", - "type": "" - } - ], - "src": "20862:432:62" - }, - { - "body": { - "nativeSrc": "21470:167:62", - "nodeType": "YulBlock", - "src": "21470:167:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "21487:3:62", - "nodeType": "YulIdentifier", - "src": "21487:3:62" - }, - { - "name": "value0", - "nativeSrc": "21492:6:62", - "nodeType": "YulIdentifier", - "src": "21492:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21480:6:62", - "nodeType": "YulIdentifier", - "src": "21480:6:62" - }, - "nativeSrc": "21480:19:62", - "nodeType": "YulFunctionCall", - "src": "21480:19:62" - }, - "nativeSrc": "21480:19:62", - "nodeType": "YulExpressionStatement", - "src": "21480:19:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "21519:3:62", - "nodeType": "YulIdentifier", - "src": "21519:3:62" - }, - { - "kind": "number", - "nativeSrc": "21524:2:62", - "nodeType": "YulLiteral", - "src": "21524:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21515:3:62", - "nodeType": "YulIdentifier", - "src": "21515:3:62" - }, - "nativeSrc": "21515:12:62", - "nodeType": "YulFunctionCall", - "src": "21515:12:62" - }, - { - "name": "value1", - "nativeSrc": "21529:6:62", - "nodeType": "YulIdentifier", - "src": "21529:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21508:6:62", - "nodeType": "YulIdentifier", - "src": "21508:6:62" - }, - "nativeSrc": "21508:28:62", - "nodeType": "YulFunctionCall", - "src": "21508:28:62" - }, - "nativeSrc": "21508:28:62", - "nodeType": "YulExpressionStatement", - "src": "21508:28:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "21556:3:62", - "nodeType": "YulIdentifier", - "src": "21556:3:62" - }, - { - "kind": "number", - "nativeSrc": "21561:2:62", - "nodeType": "YulLiteral", - "src": "21561:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21552:3:62", - "nodeType": "YulIdentifier", - "src": "21552:3:62" - }, - "nativeSrc": "21552:12:62", - "nodeType": "YulFunctionCall", - "src": "21552:12:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21574:3:62", - "nodeType": "YulLiteral", - "src": "21574:3:62", - "type": "", - "value": "248" - }, - { - "name": "value2", - "nativeSrc": "21579:6:62", - "nodeType": "YulIdentifier", - "src": "21579:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "21570:3:62", - "nodeType": "YulIdentifier", - "src": "21570:3:62" - }, - "nativeSrc": "21570:16:62", - "nodeType": "YulFunctionCall", - "src": "21570:16:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21592:3:62", - "nodeType": "YulLiteral", - "src": "21592:3:62", - "type": "", - "value": "248" - }, - { - "kind": "number", - "nativeSrc": "21597:3:62", - "nodeType": "YulLiteral", - "src": "21597:3:62", - "type": "", - "value": "255" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "21588:3:62", - "nodeType": "YulIdentifier", - "src": "21588:3:62" - }, - "nativeSrc": "21588:13:62", - "nodeType": "YulFunctionCall", - "src": "21588:13:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "21566:3:62", - "nodeType": "YulIdentifier", - "src": "21566:3:62" - }, - "nativeSrc": "21566:36:62", - "nodeType": "YulFunctionCall", - "src": "21566:36:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21545:6:62", - "nodeType": "YulIdentifier", - "src": "21545:6:62" - }, - "nativeSrc": "21545:58:62", - "nodeType": "YulFunctionCall", - "src": "21545:58:62" - }, - "nativeSrc": "21545:58:62", - "nodeType": "YulExpressionStatement", - "src": "21545:58:62" - }, - { - "nativeSrc": "21612:19:62", - "nodeType": "YulAssignment", - "src": "21612:19:62", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "21623:3:62", - "nodeType": "YulIdentifier", - "src": "21623:3:62" - }, - { - "kind": "number", - "nativeSrc": "21628:2:62", - "nodeType": "YulLiteral", - "src": "21628:2:62", - "type": "", - "value": "65" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21619:3:62", - "nodeType": "YulIdentifier", - "src": "21619:3:62" - }, - "nativeSrc": "21619:12:62", - "nodeType": "YulFunctionCall", - "src": "21619:12:62" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "21612:3:62", - "nodeType": "YulIdentifier", - "src": "21612:3:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes32_t_bytes32_t_uint8__to_t_bytes32_t_bytes32_t_uint8__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "21299:338:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "21430:3:62", - "nodeType": "YulTypedName", - "src": "21430:3:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "21435:6:62", - "nodeType": "YulTypedName", - "src": "21435:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "21443:6:62", - "nodeType": "YulTypedName", - "src": "21443:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "21451:6:62", - "nodeType": "YulTypedName", - "src": "21451:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "21462:3:62", - "nodeType": "YulTypedName", - "src": "21462:3:62", - "type": "" - } - ], - "src": "21299:338:62" - }, - { - "body": { - "nativeSrc": "21688:171:62", - "nodeType": "YulBlock", - "src": "21688:171:62", - "statements": [ - { - "body": { - "nativeSrc": "21719:111:62", - "nodeType": "YulBlock", - "src": "21719:111:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21740:1:62", - "nodeType": "YulLiteral", - "src": "21740:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21747:3:62", - "nodeType": "YulLiteral", - "src": "21747:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "21752:10:62", - "nodeType": "YulLiteral", - "src": "21752:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "21743:3:62", - "nodeType": "YulIdentifier", - "src": "21743:3:62" - }, - "nativeSrc": "21743:20:62", - "nodeType": "YulFunctionCall", - "src": "21743:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21733:6:62", - "nodeType": "YulIdentifier", - "src": "21733:6:62" - }, - "nativeSrc": "21733:31:62", - "nodeType": "YulFunctionCall", - "src": "21733:31:62" - }, - "nativeSrc": "21733:31:62", - "nodeType": "YulExpressionStatement", - "src": "21733:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21784:1:62", - "nodeType": "YulLiteral", - "src": "21784:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "21787:4:62", - "nodeType": "YulLiteral", - "src": "21787:4:62", - "type": "", - "value": "0x12" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21777:6:62", - "nodeType": "YulIdentifier", - "src": "21777:6:62" - }, - "nativeSrc": "21777:15:62", - "nodeType": "YulFunctionCall", - "src": "21777:15:62" - }, - "nativeSrc": "21777:15:62", - "nodeType": "YulExpressionStatement", - "src": "21777:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21812:1:62", - "nodeType": "YulLiteral", - "src": "21812:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "21815:4:62", - "nodeType": "YulLiteral", - "src": "21815:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "21805:6:62", - "nodeType": "YulIdentifier", - "src": "21805:6:62" - }, - "nativeSrc": "21805:15:62", - "nodeType": "YulFunctionCall", - "src": "21805:15:62" - }, - "nativeSrc": "21805:15:62", - "nodeType": "YulExpressionStatement", - "src": "21805:15:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y", - "nativeSrc": "21708:1:62", - "nodeType": "YulIdentifier", - "src": "21708:1:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "21701:6:62", - "nodeType": "YulIdentifier", - "src": "21701:6:62" - }, - "nativeSrc": "21701:9:62", - "nodeType": "YulFunctionCall", - "src": "21701:9:62" - }, - "nativeSrc": "21698:132:62", - "nodeType": "YulIf", - "src": "21698:132:62" - }, - { - "nativeSrc": "21839:14:62", - "nodeType": "YulAssignment", - "src": "21839:14:62", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "21848:1:62", - "nodeType": "YulIdentifier", - "src": "21848:1:62" - }, - { - "name": "y", - "nativeSrc": "21851:1:62", - "nodeType": "YulIdentifier", - "src": "21851:1:62" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "21844:3:62", - "nodeType": "YulIdentifier", - "src": "21844:3:62" - }, - "nativeSrc": "21844:9:62", - "nodeType": "YulFunctionCall", - "src": "21844:9:62" - }, - "variableNames": [ - { - "name": "r", - "nativeSrc": "21839:1:62", - "nodeType": "YulIdentifier", - "src": "21839:1:62" - } - ] - } - ] - }, - "name": "checked_div_t_uint256", - "nativeSrc": "21642:217:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "21673:1:62", - "nodeType": "YulTypedName", - "src": "21673:1:62", - "type": "" - }, - { - "name": "y", - "nativeSrc": "21676:1:62", - "nodeType": "YulTypedName", - "src": "21676:1:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nativeSrc": "21682:1:62", - "nodeType": "YulTypedName", - "src": "21682:1:62", - "type": "" - } - ], - "src": "21642:217:62" - }, - { - "body": { - "nativeSrc": "22021:214:62", - "nodeType": "YulBlock", - "src": "22021:214:62", - "statements": [ - { - "nativeSrc": "22031:26:62", - "nodeType": "YulAssignment", - "src": "22031:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22043:9:62", - "nodeType": "YulIdentifier", - "src": "22043:9:62" - }, - { - "kind": "number", - "nativeSrc": "22054:2:62", - "nodeType": "YulLiteral", - "src": "22054:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22039:3:62", - "nodeType": "YulIdentifier", - "src": "22039:3:62" - }, - "nativeSrc": "22039:18:62", - "nodeType": "YulFunctionCall", - "src": "22039:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "22031:4:62", - "nodeType": "YulIdentifier", - "src": "22031:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22073:9:62", - "nodeType": "YulIdentifier", - "src": "22073:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "22088:6:62", - "nodeType": "YulIdentifier", - "src": "22088:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22104:3:62", - "nodeType": "YulLiteral", - "src": "22104:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "22109:1:62", - "nodeType": "YulLiteral", - "src": "22109:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "22100:3:62", - "nodeType": "YulIdentifier", - "src": "22100:3:62" - }, - "nativeSrc": "22100:11:62", - "nodeType": "YulFunctionCall", - "src": "22100:11:62" - }, - { - "kind": "number", - "nativeSrc": "22113:1:62", - "nodeType": "YulLiteral", - "src": "22113:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "22096:3:62", - "nodeType": "YulIdentifier", - "src": "22096:3:62" - }, - "nativeSrc": "22096:19:62", - "nodeType": "YulFunctionCall", - "src": "22096:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "22084:3:62", - "nodeType": "YulIdentifier", - "src": "22084:3:62" - }, - "nativeSrc": "22084:32:62", - "nodeType": "YulFunctionCall", - "src": "22084:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22066:6:62", - "nodeType": "YulIdentifier", - "src": "22066:6:62" - }, - "nativeSrc": "22066:51:62", - "nodeType": "YulFunctionCall", - "src": "22066:51:62" - }, - "nativeSrc": "22066:51:62", - "nodeType": "YulExpressionStatement", - "src": "22066:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22137:9:62", - "nodeType": "YulIdentifier", - "src": "22137:9:62" - }, - { - "kind": "number", - "nativeSrc": "22148:2:62", - "nodeType": "YulLiteral", - "src": "22148:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22133:3:62", - "nodeType": "YulIdentifier", - "src": "22133:3:62" - }, - "nativeSrc": "22133:18:62", - "nodeType": "YulFunctionCall", - "src": "22133:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "22157:6:62", - "nodeType": "YulIdentifier", - "src": "22157:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22173:3:62", - "nodeType": "YulLiteral", - "src": "22173:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "22178:1:62", - "nodeType": "YulLiteral", - "src": "22178:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "22169:3:62", - "nodeType": "YulIdentifier", - "src": "22169:3:62" - }, - "nativeSrc": "22169:11:62", - "nodeType": "YulFunctionCall", - "src": "22169:11:62" - }, - { - "kind": "number", - "nativeSrc": "22182:1:62", - "nodeType": "YulLiteral", - "src": "22182:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "22165:3:62", - "nodeType": "YulIdentifier", - "src": "22165:3:62" - }, - "nativeSrc": "22165:19:62", - "nodeType": "YulFunctionCall", - "src": "22165:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "22153:3:62", - "nodeType": "YulIdentifier", - "src": "22153:3:62" - }, - "nativeSrc": "22153:32:62", - "nodeType": "YulFunctionCall", - "src": "22153:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22126:6:62", - "nodeType": "YulIdentifier", - "src": "22126:6:62" - }, - "nativeSrc": "22126:60:62", - "nodeType": "YulFunctionCall", - "src": "22126:60:62" - }, - "nativeSrc": "22126:60:62", - "nodeType": "YulExpressionStatement", - "src": "22126:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22206:9:62", - "nodeType": "YulIdentifier", - "src": "22206:9:62" - }, - { - "kind": "number", - "nativeSrc": "22217:2:62", - "nodeType": "YulLiteral", - "src": "22217:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22202:3:62", - "nodeType": "YulIdentifier", - "src": "22202:3:62" - }, - "nativeSrc": "22202:18:62", - "nodeType": "YulFunctionCall", - "src": "22202:18:62" - }, - { - "name": "value2", - "nativeSrc": "22222:6:62", - "nodeType": "YulIdentifier", - "src": "22222:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22195:6:62", - "nodeType": "YulIdentifier", - "src": "22195:6:62" - }, - "nativeSrc": "22195:34:62", - "nodeType": "YulFunctionCall", - "src": "22195:34:62" - }, - "nativeSrc": "22195:34:62", - "nodeType": "YulExpressionStatement", - "src": "22195:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", - "nativeSrc": "21864:371:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "21974:9:62", - "nodeType": "YulTypedName", - "src": "21974:9:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "21985:6:62", - "nodeType": "YulTypedName", - "src": "21985:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "21993:6:62", - "nodeType": "YulTypedName", - "src": "21993:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "22001:6:62", - "nodeType": "YulTypedName", - "src": "22001:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "22012:4:62", - "nodeType": "YulTypedName", - "src": "22012:4:62", - "type": "" - } - ], - "src": "21864:371:62" - }, - { - "body": { - "nativeSrc": "22481:320:62", - "nodeType": "YulBlock", - "src": "22481:320:62", - "statements": [ - { - "nativeSrc": "22491:27:62", - "nodeType": "YulAssignment", - "src": "22491:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22503:9:62", - "nodeType": "YulIdentifier", - "src": "22503:9:62" - }, - { - "kind": "number", - "nativeSrc": "22514:3:62", - "nodeType": "YulLiteral", - "src": "22514:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22499:3:62", - "nodeType": "YulIdentifier", - "src": "22499:3:62" - }, - "nativeSrc": "22499:19:62", - "nodeType": "YulFunctionCall", - "src": "22499:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "22491:4:62", - "nodeType": "YulIdentifier", - "src": "22491:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22534:9:62", - "nodeType": "YulIdentifier", - "src": "22534:9:62" - }, - { - "name": "value0", - "nativeSrc": "22545:6:62", - "nodeType": "YulIdentifier", - "src": "22545:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22527:6:62", - "nodeType": "YulIdentifier", - "src": "22527:6:62" - }, - "nativeSrc": "22527:25:62", - "nodeType": "YulFunctionCall", - "src": "22527:25:62" - }, - "nativeSrc": "22527:25:62", - "nodeType": "YulExpressionStatement", - "src": "22527:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22572:9:62", - "nodeType": "YulIdentifier", - "src": "22572:9:62" - }, - { - "kind": "number", - "nativeSrc": "22583:2:62", - "nodeType": "YulLiteral", - "src": "22583:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22568:3:62", - "nodeType": "YulIdentifier", - "src": "22568:3:62" - }, - "nativeSrc": "22568:18:62", - "nodeType": "YulFunctionCall", - "src": "22568:18:62" - }, - { - "name": "value1", - "nativeSrc": "22588:6:62", - "nodeType": "YulIdentifier", - "src": "22588:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22561:6:62", - "nodeType": "YulIdentifier", - "src": "22561:6:62" - }, - "nativeSrc": "22561:34:62", - "nodeType": "YulFunctionCall", - "src": "22561:34:62" - }, - "nativeSrc": "22561:34:62", - "nodeType": "YulExpressionStatement", - "src": "22561:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22615:9:62", - "nodeType": "YulIdentifier", - "src": "22615:9:62" - }, - { - "kind": "number", - "nativeSrc": "22626:2:62", - "nodeType": "YulLiteral", - "src": "22626:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22611:3:62", - "nodeType": "YulIdentifier", - "src": "22611:3:62" - }, - "nativeSrc": "22611:18:62", - "nodeType": "YulFunctionCall", - "src": "22611:18:62" - }, - { - "name": "value2", - "nativeSrc": "22631:6:62", - "nodeType": "YulIdentifier", - "src": "22631:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22604:6:62", - "nodeType": "YulIdentifier", - "src": "22604:6:62" - }, - "nativeSrc": "22604:34:62", - "nodeType": "YulFunctionCall", - "src": "22604:34:62" - }, - "nativeSrc": "22604:34:62", - "nodeType": "YulExpressionStatement", - "src": "22604:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22658:9:62", - "nodeType": "YulIdentifier", - "src": "22658:9:62" - }, - { - "kind": "number", - "nativeSrc": "22669:2:62", - "nodeType": "YulLiteral", - "src": "22669:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22654:3:62", - "nodeType": "YulIdentifier", - "src": "22654:3:62" - }, - "nativeSrc": "22654:18:62", - "nodeType": "YulFunctionCall", - "src": "22654:18:62" - }, - { - "name": "value3", - "nativeSrc": "22674:6:62", - "nodeType": "YulIdentifier", - "src": "22674:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22647:6:62", - "nodeType": "YulIdentifier", - "src": "22647:6:62" - }, - "nativeSrc": "22647:34:62", - "nodeType": "YulFunctionCall", - "src": "22647:34:62" - }, - "nativeSrc": "22647:34:62", - "nodeType": "YulExpressionStatement", - "src": "22647:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22701:9:62", - "nodeType": "YulIdentifier", - "src": "22701:9:62" - }, - { - "kind": "number", - "nativeSrc": "22712:3:62", - "nodeType": "YulLiteral", - "src": "22712:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22697:3:62", - "nodeType": "YulIdentifier", - "src": "22697:3:62" - }, - "nativeSrc": "22697:19:62", - "nodeType": "YulFunctionCall", - "src": "22697:19:62" - }, - { - "arguments": [ - { - "name": "value4", - "nativeSrc": "22722:6:62", - "nodeType": "YulIdentifier", - "src": "22722:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22738:3:62", - "nodeType": "YulLiteral", - "src": "22738:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "22743:1:62", - "nodeType": "YulLiteral", - "src": "22743:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "22734:3:62", - "nodeType": "YulIdentifier", - "src": "22734:3:62" - }, - "nativeSrc": "22734:11:62", - "nodeType": "YulFunctionCall", - "src": "22734:11:62" - }, - { - "kind": "number", - "nativeSrc": "22747:1:62", - "nodeType": "YulLiteral", - "src": "22747:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "22730:3:62", - "nodeType": "YulIdentifier", - "src": "22730:3:62" - }, - "nativeSrc": "22730:19:62", - "nodeType": "YulFunctionCall", - "src": "22730:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "22718:3:62", - "nodeType": "YulIdentifier", - "src": "22718:3:62" - }, - "nativeSrc": "22718:32:62", - "nodeType": "YulFunctionCall", - "src": "22718:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22690:6:62", - "nodeType": "YulIdentifier", - "src": "22690:6:62" - }, - "nativeSrc": "22690:61:62", - "nodeType": "YulFunctionCall", - "src": "22690:61:62" - }, - "nativeSrc": "22690:61:62", - "nodeType": "YulExpressionStatement", - "src": "22690:61:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22771:9:62", - "nodeType": "YulIdentifier", - "src": "22771:9:62" - }, - { - "kind": "number", - "nativeSrc": "22782:3:62", - "nodeType": "YulLiteral", - "src": "22782:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22767:3:62", - "nodeType": "YulIdentifier", - "src": "22767:3:62" - }, - "nativeSrc": "22767:19:62", - "nodeType": "YulFunctionCall", - "src": "22767:19:62" - }, - { - "name": "value5", - "nativeSrc": "22788:6:62", - "nodeType": "YulIdentifier", - "src": "22788:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22760:6:62", - "nodeType": "YulIdentifier", - "src": "22760:6:62" - }, - "nativeSrc": "22760:35:62", - "nodeType": "YulFunctionCall", - "src": "22760:35:62" - }, - "nativeSrc": "22760:35:62", - "nodeType": "YulExpressionStatement", - "src": "22760:35:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__fromStack_reversed", - "nativeSrc": "22240:561:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "22410:9:62", - "nodeType": "YulTypedName", - "src": "22410:9:62", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "22421:6:62", - "nodeType": "YulTypedName", - "src": "22421:6:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "22429:6:62", - "nodeType": "YulTypedName", - "src": "22429:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "22437:6:62", - "nodeType": "YulTypedName", - "src": "22437:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "22445:6:62", - "nodeType": "YulTypedName", - "src": "22445:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "22453:6:62", - "nodeType": "YulTypedName", - "src": "22453:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "22461:6:62", - "nodeType": "YulTypedName", - "src": "22461:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "22472:4:62", - "nodeType": "YulTypedName", - "src": "22472:4:62", - "type": "" - } - ], - "src": "22240:561:62" - }, - { - "body": { - "nativeSrc": "22987:217:62", - "nodeType": "YulBlock", - "src": "22987:217:62", - "statements": [ - { - "nativeSrc": "22997:27:62", - "nodeType": "YulAssignment", - "src": "22997:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23009:9:62", - "nodeType": "YulIdentifier", - "src": "23009:9:62" - }, - { - "kind": "number", - "nativeSrc": "23020:3:62", - "nodeType": "YulLiteral", - "src": "23020:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23005:3:62", - "nodeType": "YulIdentifier", - "src": "23005:3:62" - }, - "nativeSrc": "23005:19:62", - "nodeType": "YulFunctionCall", - "src": "23005:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "22997:4:62", - "nodeType": "YulIdentifier", - "src": "22997:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23040:9:62", - "nodeType": "YulIdentifier", - "src": "23040:9:62" - }, - { - "name": "value0", - "nativeSrc": "23051:6:62", - "nodeType": "YulIdentifier", - "src": "23051:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23033:6:62", - "nodeType": "YulIdentifier", - "src": "23033:6:62" - }, - "nativeSrc": "23033:25:62", - "nodeType": "YulFunctionCall", - "src": "23033:25:62" - }, - "nativeSrc": "23033:25:62", - "nodeType": "YulExpressionStatement", - "src": "23033:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23078:9:62", - "nodeType": "YulIdentifier", - "src": "23078:9:62" - }, - { - "kind": "number", - "nativeSrc": "23089:2:62", - "nodeType": "YulLiteral", - "src": "23089:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23074:3:62", - "nodeType": "YulIdentifier", - "src": "23074:3:62" - }, - "nativeSrc": "23074:18:62", - "nodeType": "YulFunctionCall", - "src": "23074:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "23098:6:62", - "nodeType": "YulIdentifier", - "src": "23098:6:62" - }, - { - "kind": "number", - "nativeSrc": "23106:4:62", - "nodeType": "YulLiteral", - "src": "23106:4:62", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "23094:3:62", - "nodeType": "YulIdentifier", - "src": "23094:3:62" - }, - "nativeSrc": "23094:17:62", - "nodeType": "YulFunctionCall", - "src": "23094:17:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23067:6:62", - "nodeType": "YulIdentifier", - "src": "23067:6:62" - }, - "nativeSrc": "23067:45:62", - "nodeType": "YulFunctionCall", - "src": "23067:45:62" - }, - "nativeSrc": "23067:45:62", - "nodeType": "YulExpressionStatement", - "src": "23067:45:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23132:9:62", - "nodeType": "YulIdentifier", - "src": "23132:9:62" - }, - { - "kind": "number", - "nativeSrc": "23143:2:62", - "nodeType": "YulLiteral", - "src": "23143:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23128:3:62", - "nodeType": "YulIdentifier", - "src": "23128:3:62" - }, - "nativeSrc": "23128:18:62", - "nodeType": "YulFunctionCall", - "src": "23128:18:62" - }, - { - "name": "value2", - "nativeSrc": "23148:6:62", - "nodeType": "YulIdentifier", - "src": "23148:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23121:6:62", - "nodeType": "YulIdentifier", - "src": "23121:6:62" - }, - "nativeSrc": "23121:34:62", - "nodeType": "YulFunctionCall", - "src": "23121:34:62" - }, - "nativeSrc": "23121:34:62", - "nodeType": "YulExpressionStatement", - "src": "23121:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23175:9:62", - "nodeType": "YulIdentifier", - "src": "23175:9:62" - }, - { - "kind": "number", - "nativeSrc": "23186:2:62", - "nodeType": "YulLiteral", - "src": "23186:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23171:3:62", - "nodeType": "YulIdentifier", - "src": "23171:3:62" - }, - "nativeSrc": "23171:18:62", - "nodeType": "YulFunctionCall", - "src": "23171:18:62" - }, - { - "name": "value3", - "nativeSrc": "23191:6:62", - "nodeType": "YulIdentifier", - "src": "23191:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23164:6:62", - "nodeType": "YulIdentifier", - "src": "23164:6:62" - }, - "nativeSrc": "23164:34:62", - "nodeType": "YulFunctionCall", - "src": "23164:34:62" - }, - "nativeSrc": "23164:34:62", - "nodeType": "YulExpressionStatement", - "src": "23164:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed", - "nativeSrc": "22806:398:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "22932:9:62", - "nodeType": "YulTypedName", - "src": "22932:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "22943:6:62", - "nodeType": "YulTypedName", - "src": "22943:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "22951:6:62", - "nodeType": "YulTypedName", - "src": "22951:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "22959:6:62", - "nodeType": "YulTypedName", - "src": "22959:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "22967:6:62", - "nodeType": "YulTypedName", - "src": "22967:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "22978:4:62", - "nodeType": "YulTypedName", - "src": "22978:4:62", - "type": "" - } - ], - "src": "22806:398:62" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_bytes32t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n }\n function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff))\n }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function panic_error_0x21()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function abi_encode_enum_DisputeStatus(value, pos)\n {\n if iszero(lt(value, 6)) { panic_error_0x21() }\n mstore(pos, value)\n }\n function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes32_t_enum$_DisputeType_$10710_t_enum$_DisputeStatus_$10718_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_bytes32_t_uint8_t_uint8_t_uint256_t_uint256__fromStack_reversed(headStart, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 256)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n if iszero(lt(value4, 3)) { panic_error_0x21() }\n mstore(add(headStart, 128), value4)\n abi_encode_enum_DisputeStatus(value5, add(headStart, 160))\n mstore(add(headStart, 192), value6)\n mstore(add(headStart, 224), value7)\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_contract$_ISubgraphService_$11280__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_bytes32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function validator_revert_uint64(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffff))) { revert(0, 0) }\n }\n function validator_revert_uint32(value)\n {\n if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint64t_uint256t_uint32t_uint32(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_uint64(value_1)\n value1 := value_1\n let value_2 := 0\n value_2 := calldataload(add(headStart, 64))\n value2 := value_2\n let value_3 := calldataload(add(headStart, 96))\n validator_revert_uint32(value_3)\n value3 := value_3\n let value_4 := calldataload(add(headStart, 128))\n validator_revert_uint32(value_4)\n value4 := value_4\n }\n function allocate_memory_2163() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 0xc0)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function allocate_memory() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 288)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function allocate_memory_2167() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 256)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function abi_decode_tuple_t_struct$_Receipt_$11685_memory_ptr(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 96)\n if _1 { revert(0, 0) }\n _1 := 0\n let memPtr := _1\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 96)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(_1, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(_1, 0x24)\n }\n mstore(64, newFreePtr)\n let value := _1\n value := calldataload(headStart)\n mstore(memPtr, value)\n let value_1 := _1\n value_1 := calldataload(add(headStart, 32))\n mstore(add(memPtr, 32), value_1)\n let value_2 := _1\n value_2 := calldataload(add(headStart, 64))\n mstore(add(memPtr, 64), value_2)\n value0 := memPtr\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_uint32(value)\n value0 := value\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n }\n function abi_decode_tuple_t_bytes_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n let offset_1 := calldataload(add(headStart, 32))\n if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function abi_encode_tuple_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_struct_State(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0xc0) { revert(0, 0) }\n value := allocate_memory_2163()\n let value_1 := 0\n value_1 := calldataload(headStart)\n mstore(value, value_1)\n let value_2 := 0\n value_2 := calldataload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := 0\n value_3 := calldataload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n let value_4 := 0\n value_4 := calldataload(add(headStart, 96))\n mstore(add(value, 96), value_4)\n let value_5 := 0\n value_5 := calldataload(add(headStart, 128))\n mstore(add(value, 128), value_5)\n let value_6 := calldataload(add(headStart, 160))\n if iszero(eq(value_6, and(value_6, 0xff))) { revert(0, 0) }\n mstore(add(value, 160), value_6)\n }\n function abi_decode_tuple_t_struct$_State_$11699_memory_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n value0 := abi_decode_struct_State(headStart, dataEnd)\n }\n function abi_decode_tuple_t_struct$_State_$11699_memory_ptrt_struct$_State_$11699_memory_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 384) { revert(0, 0) }\n value0 := abi_decode_struct_State(headStart, dataEnd)\n value1 := abi_decode_struct_State(add(headStart, 192), dataEnd)\n }\n function abi_decode_tuple_t_uint64(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_uint64(value)\n value0 := value\n }\n function abi_encode_tuple_t_enum$_DisputeStatus_$10718__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n abi_encode_enum_DisputeStatus(value0, headStart)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function abi_decode_uint32_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_uint32(value)\n }\n function abi_decode_uint64_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_uint64(value)\n }\n function abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 288)\n if _1 { revert(0, 0) }\n _1 := 0\n let value := allocate_memory()\n let value_1 := _1\n value_1 := mload(headStart)\n mstore(value, value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n mstore(add(value, 96), abi_decode_uint32_fromMemory(add(headStart, 96)))\n mstore(add(value, 128), abi_decode_uint64_fromMemory(add(headStart, 128)))\n mstore(add(value, 160), abi_decode_uint64_fromMemory(add(headStart, 160)))\n mstore(add(value, 192), abi_decode_uint32_fromMemory(add(headStart, 192)))\n mstore(add(value, 224), abi_decode_uint64_fromMemory(add(headStart, 224)))\n let value_4 := _1\n value_4 := mload(add(headStart, 256))\n mstore(add(value, 256), value_4)\n value0 := value\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 192)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), value5)\n }\n function abi_decode_tuple_t_struct$_State_$11307_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 256)\n if _1 { revert(0, 0) }\n _1 := 0\n let value := allocate_memory_2167()\n let value_1 := mload(headStart)\n validator_revert_address(value_1)\n mstore(value, value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n let value_4 := _1\n value_4 := mload(add(headStart, 96))\n mstore(add(value, 96), value_4)\n let value_5 := _1\n value_5 := mload(add(headStart, 128))\n mstore(add(value, 128), value_5)\n let value_6 := _1\n value_6 := mload(add(headStart, 160))\n mstore(add(value, 160), value_6)\n let value_7 := _1\n value_7 := mload(add(headStart, 192))\n mstore(add(value, 192), value_7)\n let value_8 := _1\n value_8 := mload(add(headStart, 224))\n mstore(add(value, 224), value_8)\n value0 := value\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n mstore(add(add(pos, i), 0x20), mload(add(add(value, i), 0x20)))\n }\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), 64)\n tail := abi_encode_bytes(value1, add(headStart, 64))\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 9)\n mstore(add(headStart, 64), \"!transfer\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_address_t_bytes32__to_t_address_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, and(shl(96, value0), not(sub(shl(96, 1), 1))))\n mstore(add(pos, 20), value1)\n end := add(pos, 52)\n }\n function abi_encode_tuple_t_uint256_t_address_t_bytes32_t_uint256__to_t_uint256_t_address_t_bytes32_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, shl(240, 6401))\n mstore(add(pos, 2), value0)\n mstore(add(pos, 34), value1)\n end := add(pos, 66)\n }\n function abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 160)\n if _1 { revert(0, 0) }\n _1 := 0\n let memPtr := _1\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 160)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(_1, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(_1, 0x24)\n }\n mstore(64, newFreePtr)\n let value := _1\n value := mload(headStart)\n mstore(memPtr, value)\n let value_1 := _1\n value_1 := mload(add(headStart, 32))\n mstore(add(memPtr, 32), value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 64))\n mstore(add(memPtr, 64), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 96))\n mstore(add(memPtr, 96), value_3)\n let value_4 := _1\n value_4 := mload(add(headStart, 128))\n mstore(add(memPtr, 128), value_4)\n value0 := memPtr\n }\n function abi_decode_tuple_t_uint32_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_uint32(value)\n value0 := value\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function abi_decode_tuple_t_bytes32t_bytes32t_bytes32_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := 0\n value := mload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := mload(add(headStart, 32))\n value1 := value_1\n let value_2 := 0\n value_2 := mload(add(headStart, 64))\n value2 := value_2\n }\n function abi_encode_tuple_packed_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_address_t_address__nonPadded_inplace_fromStack_reversed(pos, value4, value3, value2, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), value1)\n mstore(add(pos, 64), value2)\n mstore(add(pos, 96), and(shl(96, value3), not(sub(shl(96, 1), 1))))\n mstore(add(pos, 116), and(shl(96, value4), not(sub(shl(96, 1), 1))))\n end := add(pos, 136)\n }\n function abi_encode_tuple_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__to_t_uint256_t_bytes32_t_bytes_memory_ptr_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), 128)\n tail := abi_encode_bytes(value2, add(headStart, 128))\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_packed_t_bytes32_t_bytes32_t_uint8__to_t_bytes32_t_bytes32_t_uint8__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), value1)\n mstore(add(pos, 64), and(shl(248, value2), shl(248, 255)))\n end := add(pos, 65)\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address_t_bytes32__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 192)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 160), value5)\n }\n function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xff))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n}", - "id": 62, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "4317": [ - { - "length": 32, - "start": 5646 - } - ], - "4321": [ - { - "length": 32, - "start": 8163 - } - ] - }, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1B0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x76C993AE GT PUSH2 0xEF JUMPI DUP1 PUSH4 0xBE41F384 GT PUSH2 0x92 JUMPI DUP1 PUSH4 0xBE41F384 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0xC133B429 EQ PUSH2 0x42E JUMPI DUP1 PUSH4 0xC50A77B1 EQ PUSH2 0x441 JUMPI DUP1 PUSH4 0xC894222E EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0xC9747F51 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xD36FC9D4 EQ PUSH2 0x48F JUMPI DUP1 PUSH4 0xD76F62D1 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x4B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x76C993AE EQ PUSH2 0x386 JUMPI DUP1 PUSH4 0x84633713 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3A7 JUMPI DUP1 PUSH4 0x902A4938 EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0x9334EA52 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x93A90A1E EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x9F81A7CF EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0xB0EEFABE EQ PUSH2 0x3F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x36167E03 GT PUSH2 0x157 JUMPI DUP1 PUSH4 0x36167E03 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x4BC5839A EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x5AEA0EC4 EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x5BF31D4D EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x5ED2C96C EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x6369DF6B EQ PUSH2 0x358 JUMPI DUP1 PUSH4 0x6CC6CDE1 EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x50B17AD EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x533E1BA EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x11BE1997 EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0x16972978 EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0x17337B46 EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0x1792F194 EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0x26058249 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x29E03FF1 EQ PUSH2 0x2C2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C8 PUSH2 0x1C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A74 JUMP JUMPDEST PUSH2 0x4C8 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x1E1 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25E PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 SWAP1 SWAP7 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND SWAP7 SWAP6 SWAP1 SWAP5 AND SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 PUSH1 0xFF DUP1 DUP4 AND SWAP4 PUSH2 0x100 SWAP1 SWAP4 DIV AND SWAP2 DUP9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F2 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x280 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0x74B JUMP JUMPDEST PUSH2 0x1E1 PUSH3 0x7A120 DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0x75F JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH2 0x2B5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F2 SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x2CB PUSH1 0x35 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2B62 JUMP JUMPDEST PUSH2 0xBEF JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH2 0x313 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BB5 JUMP JUMPDEST PUSH2 0xC10 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x366 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CB5 JUMP JUMPDEST PUSH2 0xD43 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH2 0x2B5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0xD4E JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x394 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D20 JUMP JUMPDEST PUSH2 0xD62 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x1E1 SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xD8E JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0xFAE JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x3F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D20 JUMP JUMPDEST PUSH2 0xFBF JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x406 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0xFD0 JUMP JUMPDEST PUSH2 0x41E PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A96 JUMP JUMPDEST PUSH2 0xFE1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x43C CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0x1017 JUMP JUMPDEST PUSH2 0x2CB PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x2DA2 JUMP JUMPDEST PUSH2 0x10AF JUMP JUMPDEST PUSH2 0x467 PUSH2 0x462 CALLDATASIZE PUSH1 0x4 PUSH2 0x2DE3 JUMP JUMPDEST PUSH2 0x113B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x2EB9 JUMP JUMPDEST PUSH2 0x1320 JUMP JUMPDEST PUSH2 0x41E PUSH2 0x49D CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED5 JUMP JUMPDEST PUSH2 0x1411 JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F0B JUMP JUMPDEST PUSH2 0x141D JUMP JUMPDEST PUSH2 0x1C8 PUSH2 0x4C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D3D JUMP JUMPDEST PUSH2 0x142E JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x4FD DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x528 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x556 JUMPI PUSH2 0x556 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE DUP1 SLOAD PUSH1 0x6 DUP3 ADD SLOAD SWAP2 SWAP3 SWAP2 PUSH2 0x5CF SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP7 SWAP1 PUSH2 0x1469 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x2 DUP5 ADD SLOAD SWAP2 SWAP3 POP PUSH2 0x60E SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH2 0x5F6 SWAP1 DUP5 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP6 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP6 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP5 ADD SLOAD PUSH2 0x6D6 SWAP3 DUP6 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x66F JUMPI PUSH2 0x66F PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x680 JUMPI PUSH2 0x680 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x6A8 JUMPI PUSH2 0x6A8 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x6B9 JUMPI PUSH2 0x6B9 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x6E8 JUMPI PUSH2 0x6E8 DUP3 PUSH1 0x3 ADD SLOAD PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD DUP3 SLOAD PUSH1 0x2 DUP5 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP8 SWAP1 PUSH32 0x6D800AAAF64B9A1F321DCD63DA04369D33D8A0D49AD0FBBA085AAB4A98BF31C4 SWAP1 PUSH2 0x733 SWAP1 DUP7 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x753 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1760 JUMP JUMPDEST POP JUMP JUMPDEST DUP1 PUSH2 0x769 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x78B JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x82C0055 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x7D0 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x7F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x820 JUMPI PUSH2 0x820 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0x85A JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x34 SLOAD PUSH1 0x5 DUP3 ADD SLOAD TIMESTAMP SWAP2 PUSH2 0x88E SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND SWAP1 PUSH2 0x2F4C JUMP JUMPDEST LT PUSH2 0x8AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1D7753D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD ISZERO PUSH2 0x8D6 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH2 0x8D6 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP5 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH2 0x99E SWAP3 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x937 JUMPI PUSH2 0x937 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x948 JUMPI PUSH2 0x948 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x970 JUMPI PUSH2 0x970 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x981 JUMPI PUSH2 0x981 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x17BF JUMP JUMPDEST POP PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x500 OR SWAP1 SSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND SWAP4 SWAP1 SWAP3 AND SWAP2 DUP8 SWAP2 PUSH32 0x223103F8EB52E5F43A75655152ACD882A605D70DF57A5C0FEFD30F516B1756D2 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA32 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xA3C DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0xA5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xA8C JUMPI PUSH2 0xA8C PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0xAC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0x200 PUSH2 0xFF00 NOT DUP3 AND OR SWAP1 SWAP2 SSTORE DUP4 MLOAD PUSH2 0x100 DUP2 ADD DUP6 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP1 DUP4 ADD SLOAD SWAP5 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE SWAP1 SWAP3 PUSH2 0xB49 SWAP3 SWAP2 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x66F JUMPI PUSH2 0x66F PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD DUP5 SWAP2 ISZERO PUSH2 0xB77 JUMPI PUSH1 0x40 MLOAD PUSH4 0x41371593 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH2 0xB98 DUP2 PUSH1 0x2 ADD SLOAD PUSH2 0xB89 PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x180D JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH32 0x2226EBD23625A7938FB786DF2248BD171D2E6AD70CB2B654EA1BE830CA17224D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBF9 PUSH2 0x1872 JUMP JUMPDEST PUSH2 0xC07 CALLER PUSH1 0x35 SLOAD DUP6 DUP6 PUSH2 0x1891 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1A PUSH2 0x1BD3 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xC41 JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xC5D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xC6B JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xC89 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xCB3 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH2 0xCBC CALLER PUSH2 0x1BF7 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x1C08 JUMP JUMPDEST PUSH2 0xCCD DUP11 PUSH2 0x1C18 JUMP JUMPDEST PUSH2 0xCD6 DUP10 PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0xCDF DUP9 PUSH2 0x1760 JUMP JUMPDEST PUSH2 0xCE8 DUP8 PUSH2 0x1D0E JUMP JUMPDEST PUSH2 0xCF1 DUP7 PUSH2 0x1D8B JUMP JUMPDEST DUP4 ISZERO PUSH2 0xD37 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC0A DUP3 PUSH2 0x1E18 JUMP JUMPDEST PUSH2 0xD56 PUSH2 0x172E JUMP JUMPDEST PUSH2 0xD60 PUSH1 0x0 PUSH2 0x1EB5 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xD6A PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1D0E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD7E PUSH2 0x1F11 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDB9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8BAF3BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xDC3 DUP2 PUSH2 0xFE1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0xDE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x14A03BBD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xE13 JUMPI PUSH2 0xE13 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP2 EQ PUSH2 0xE4D JUMPI PUSH1 0x40 MLOAD PUSH4 0x146E540F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2F28 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD SLOAD ISZERO PUSH2 0xE86 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH2 0xE86 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5FE PUSH2 0x160C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP5 ADD SLOAD AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP1 DUP5 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH2 0xF4E SWAP3 DUP5 SWAP2 PUSH1 0x80 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xEE7 JUMPI PUSH2 0xEE7 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xEF8 JUMPI PUSH2 0xEF8 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF20 JUMPI PUSH2 0xF20 PUSH2 0x2AAF JUMP JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF31 JUMPI PUSH2 0xF31 PUSH2 0x2AAF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD SLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x6 DUP3 ADD SLOAD DUP2 MSTORE POP POP PUSH2 0x1F35 JUMP JUMPDEST POP PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x300 OR SWAP1 SSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP2 SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH32 0xF0912EFB86EA1D65A17D64D48393CDB1CA0EA5220DD2BBE438621199D30955B7 SWAP1 PUSH1 0x20 ADD PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0xFB6 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1F70 JUMP JUMPDEST PUSH2 0xFC7 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1D8B JUMP JUMPDEST PUSH2 0xFD8 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1C18 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x100F JUMPI PUSH2 0x100F PUSH2 0x2AAF JUMP JUMPDEST EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1022 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x1056 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1074 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1098 SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST SWAP1 POP PUSH2 0x10A8 DUP4 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B9 PUSH2 0x1872 JUMP JUMPDEST PUSH2 0xC07 CALLER PUSH1 0x35 SLOAD PUSH2 0x10FF DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x0 PUSH2 0x1184 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11C7 DUP8 DUP8 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2136 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH2 0x11D3 DUP3 DUP3 PUSH2 0x2532 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP1 DUP6 ADD MLOAD PUSH1 0x40 DUP1 DUP8 ADD MLOAD DUP7 MLOAD SWAP4 DUP8 ADD MLOAD SWAP2 DUP8 ADD MLOAD SWAP5 SWAP6 SWAP3 SWAP5 SWAP1 SWAP4 SWAP3 PUSH2 0x1232 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6ABA5297 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x24 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC4 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP POP POP POP PUSH1 0x0 PUSH2 0x127D DUP5 PUSH1 0x0 DUP6 DUP14 DUP14 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12C4 DUP6 PUSH1 0x0 DUP6 DUP13 DUP13 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x227D SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x3 SWAP1 DUP2 ADD DUP5 SWAP1 SSTORE DUP4 DUP4 MSTORE DUP2 DUP4 KECCAK256 ADD DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 POP DUP3 SWAP2 DUP5 SWAP2 PUSH32 0xFEC135A4CF8E5C6E13DEA23BE058BF03A8BF8F1F6FB0A021B0A5AEDDFBA81407 SWAP2 LOG3 SWAP1 SWAP11 SWAP1 SWAP10 POP SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x132C DUP4 PUSH2 0x2563 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0xE022923 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xE022923 SWAP1 PUSH2 0x1362 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1380 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A4 SWAP2 SWAP1 PUSH2 0x3036 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x34789D8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD SWAP1 DUP2 DUP2 EQ PUSH2 0x1407 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA24CFE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC07 DUP4 DUP4 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x1425 PUSH2 0x172E JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0x1436 PUSH2 0x172E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1460 JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x1EB5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1474 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x14A8 SWAP3 DUP11 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14EA SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x150F SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP1 PUSH2 0x25F4 AND JUMP JUMPDEST SWAP1 POP DUP5 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1520 JUMPI POP DUP1 DUP6 GT ISZERO JUMPDEST DUP6 DUP3 SWAP1 SWAP2 PUSH2 0x154A JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC6B7C41 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH1 0x0 PUSH2 0x155C DUP7 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x265B JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x157A SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x25F4 AND JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP3 SUB DUP4 ADD DUP2 MSTORE PUSH1 0x60 DUP3 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH4 0x65C1A3FF PUSH1 0xE1 SHL SWAP1 SWAP3 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xCB8347FE SWAP2 PUSH2 0x15CE SWAP2 DUP13 SWAP2 SWAP1 PUSH1 0x64 ADD PUSH2 0x30F9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP3 SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16AA SWAP2 SWAP1 PUSH2 0x311D JUMP JUMPDEST PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10BA3930B739B332B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x10A8 JUMPI POP PUSH1 0x4 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1726 JUMPI PUSH2 0x1726 PUSH2 0x2AAF JUMP JUMPDEST EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH2 0x1737 PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD60 JUMPI CALLER PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST DUP1 DUP1 PUSH2 0x1782 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F4E05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x35 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x97896B9DA0F97F36BF3011570BCFF930069299DE4B1E89C9CB44909841CAC2F8 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17CA DUP3 PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x1805 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0x5 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x186E JUMPI PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1869 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xD60 CALLER PUSH1 0x35 SLOAD PUSH2 0x1881 PUSH2 0x160C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x2671 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 SWAP1 SHL AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x34 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x54 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x18D8 DUP2 PUSH2 0xFE1 JUMP JUMPDEST ISZERO DUP2 SWAP1 PUSH2 0x18FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x124A23F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0xE022923 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE022923 SWAP1 PUSH2 0x192D SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B39 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x194B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196F SWAP2 SWAP1 PUSH2 0x3036 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x199D JUMPI PUSH1 0x40 MLOAD PUSH4 0x34789D8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH2 0x2B39 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x19A8 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x19DC SWAP3 DUP8 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A1E SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SUB PUSH2 0x1A43 JUMPI PUSH1 0x40 MLOAD PUSH4 0x307EFDB7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1A53 DUP4 DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x80 DUP2 ADD PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x37 DUP3 MSTORE DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR DUP4 SSTORE SWAP3 DUP6 ADD MLOAD PUSH1 0x1 DUP1 DUP5 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP5 AND OR SWAP1 SSTORE SWAP2 DUP4 ADD MLOAD PUSH1 0x2 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x3 DUP5 ADD SSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x4 DUP5 ADD DUP1 SLOAD SWAP2 SWAP4 SWAP1 SWAP3 PUSH1 0xFF NOT SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x1B23 JUMPI PUSH2 0x1B23 PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1B4D JUMPI PUSH2 0x1B4D PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x5 DUP3 ADD SSTORE PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x6 SWAP1 SWAP2 ADD SSTORE DUP4 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 DUP14 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP8 SWAP1 PUSH32 0xBFD6E5F61B4AA04B088A513A833705C7C703B907516C1DBFA66F93D1F725D33D SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 JUMP JUMPDEST PUSH2 0x1BFF PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x75C DUP2 PUSH2 0x26D7 JUMP JUMPDEST PUSH2 0x1C10 PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0xD60 PUSH2 0x26DF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x616BC441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x51744122301B50E919F4E3D22ADF8C53ABC92195B8C667EDA98C6EF20375672E SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x1CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC4411F11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x310462A9BF49FFF4A57910EC647C77CBF8AAF2F13394554AC6CDF14FC68DB7E6 SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST DUP1 PUSH3 0x7A120 PUSH4 0xFFFFFFFF DUP3 AND GT ISZERO PUSH2 0x1D42 JUMPI PUSH1 0x40 MLOAD PUSH4 0x432E6643 PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH1 0x36 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC573DC0F869F6A1D0A74FC7712A63BAABCB5567131D2D98005E163924EDDCBAB SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST DUP1 PUSH4 0xFFFFFFFF DUP2 AND PUSH3 0xF4240 LT ISZERO PUSH2 0x1DBF JUMPI PUSH1 0x40 MLOAD PUSH4 0x4E9374FB PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH1 0x36 DUP1 SLOAD PUSH8 0xFFFFFFFF00000000 NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH4 0xFFFFFFFF DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP3 DIV AND DUP2 MSTORE PUSH32 0x7EFAF01BEC3CDA8D104163BB466D01D7E16F68848301C7EB0749CFA59D680502 SWAP1 PUSH1 0x20 ADD PUSH2 0x17B4 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 SWAP5 DUP6 ADD MLOAD DUP6 MLOAD PUSH32 0x32DD026408194A0D7E54CC66A2AB6C856EFC55CFCD4DD258FDE5B1A55222BAA6 DUP2 DUP6 ADD MSTORE DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP4 ADD DUP6 MSTORE DUP1 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC2 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xE2 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP4 ADD DUP4 MSTORE PUSH2 0x102 SWAP1 SWAP2 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EBF PUSH2 0x1F11 JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP5 POP SWAP2 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F40 DUP3 PUSH2 0x16E7 JUMP JUMPDEST ISZERO PUSH2 0x1805 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 DUP2 ADD DUP1 SLOAD PUSH1 0x3 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH2 0x17F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F97 JUMPI PUSH1 0x40 MLOAD PUSH4 0x616BC441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x81DCB738DA3DABD5BB2ADBC7DD107FBBFCA936E9C8AECAB25F5B17A710A784C7 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2010 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1584A179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x561285E4 SWAP3 PUSH2 0x2044 SWAP3 DUP10 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2061 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2085 SWAP2 SWAP1 PUSH2 0x313F JUMP JUMPDEST PUSH1 0x0 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x33 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1EBB7C30 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2104 SWAP2 SWAP1 PUSH2 0x31BE JUMP JUMPDEST PUSH2 0x2114 SWAP1 PUSH4 0xFFFFFFFF AND DUP6 PUSH2 0x31DB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2122 DUP4 DUP4 PUSH2 0x27B1 JUMP JUMPDEST PUSH2 0x212C SWAP1 DUP7 PUSH2 0x2F4C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH2 0x2175 PUSH1 0x20 DUP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x217F SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x218A SWAP1 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST DUP3 MLOAD SWAP1 DUP2 EQ SWAP1 PUSH1 0x1 PUSH2 0x219D PUSH1 0x20 DUP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x21A7 SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x21B2 SWAP1 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x21DA JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x21F5 SWAP2 SWAP1 PUSH2 0x31F2 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2208 DUP7 PUSH1 0x60 PUSH2 0x27C1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2221 DUP8 PUSH2 0x221C PUSH1 0x20 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x27C1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2245 DUP9 PUSH1 0x20 PUSH2 0x2236 DUP2 PUSH1 0x60 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x2240 SWAP2 SWAP1 PUSH2 0x2F4C JUMP JUMPDEST PUSH2 0x2813 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE SWAP8 DUP9 MSTORE PUSH1 0x20 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP5 ADD MSTORE POP PUSH1 0xFF AND PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2289 DUP5 PUSH2 0x1320 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2295 PUSH2 0x1FE1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 MLOAD PUSH4 0x12ECC4BF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x25D9897E SWAP3 PUSH2 0x22C9 SWAP3 DUP8 SWAP3 SWAP1 SWAP2 AND SWAP1 PUSH1 0x4 ADD PUSH2 0x2F5F JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x230B SWAP2 SWAP1 PUSH2 0x2F94 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SUB PUSH2 0x2330 JUMPI PUSH1 0x40 MLOAD PUSH4 0x307EFDB7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x20 DUP1 DUP8 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD DUP2 MLOAD SWAP4 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT DUP5 DUP4 SHL DUP2 AND PUSH1 0x80 DUP4 ADD MSTORE SWAP2 DUP10 SWAP1 SHL SWAP1 SWAP2 AND PUSH1 0x94 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0xA8 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x2399 DUP2 PUSH2 0xFE1 JUMP JUMPDEST ISZERO DUP2 SWAP1 PUSH2 0x23BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x124A23F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x23CD DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2005 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP3 MSTORE DUP13 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE DUP4 DUP6 ADD DUP15 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x80 DUP9 ADD DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0xA0 DUP11 ADD DUP2 SWAP1 MSTORE TIMESTAMP PUSH1 0xC0 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD DUP13 SWAP1 MSTORE DUP14 DUP6 MSTORE PUSH1 0x37 SWAP1 SWAP7 MSTORE SWAP9 SWAP1 SWAP3 KECCAK256 DUP8 MLOAD DUP2 SLOAD SWAP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR DUP3 SSTORE SWAP6 MLOAD PUSH1 0x1 DUP1 DUP4 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP10 AND SWAP2 SWAP1 SWAP8 AND OR SWAP1 SWAP7 SSTORE SWAP2 MLOAD DUP6 DUP3 ADD SSTORE SWAP1 MLOAD PUSH1 0x3 DUP6 ADD SSTORE SWAP5 MLOAD SWAP1 DUP4 ADD DUP1 SLOAD SWAP7 SWAP8 POP SWAP4 SWAP6 SWAP3 SWAP5 SWAP1 SWAP4 SWAP3 PUSH1 0xFF NOT AND SWAP2 SWAP1 DUP5 SWAP1 DUP2 GT ISZERO PUSH2 0x248A JUMPI PUSH2 0x248A PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x24B4 JUMPI PUSH2 0x24B4 PUSH2 0x2AAF JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD SSTORE PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD SSTORE SWAP1 POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0xFB609A7FD5EB7947365D2F96D051030CAC33A27E3E4923F97EA4E03AAA2BCB14 DUP12 DUP12 PUSH1 0x40 ADD MLOAD DUP12 DUP8 PUSH1 0x40 MLOAD PUSH2 0x251E SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3220 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 EQ DUP1 ISZERO PUSH2 0x254D JUMPI POP DUP2 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0xC07 JUMPI POP POP PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MLOAD EQ ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE DUP3 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP1 DUP2 PUSH2 0x2593 DUP3 PUSH2 0x1E18 JUMP JUMPDEST SWAP1 POP PUSH2 0x25EC DUP2 DUP6 PUSH1 0x60 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x25D8 SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x41 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x2865 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2603 DUP4 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x2616 JUMPI POP PUSH2 0x2616 DUP3 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP4 DUP4 SWAP1 SWAP2 PUSH2 0x2640 JUMPI PUSH1 0x40 MLOAD PUSH4 0x768BF0EB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP PUSH3 0xF4240 SWAP1 POP PUSH2 0x2651 DUP4 DUP6 PUSH2 0x31DB JUMP JUMPDEST PUSH2 0xC07 SWAP2 SWAP1 PUSH2 0x3250 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x266A JUMPI DUP2 PUSH2 0xC07 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x16E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH2 0x1667 JUMP JUMPDEST PUSH2 0x26BA PUSH2 0x288F JUMP JUMPDEST PUSH2 0xD60 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1436 PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x26E7 PUSH2 0x26B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD87CD6EF79D4E2B95E15CE8ABF732DB51EC771F1CA2EDCCF22A46C729AC56472 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x171A7FA058648750A8C5AAE430F30DB8D0100EFC3A5E1B2E8054B1C1CE28B6B4 SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x44852B2A670ADE5407E78FB2863C51DE9FCB96542A07186FE3AEDA6BB8A116D PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH32 0xA070FFB1CD7409649BF77822CCE74495468E06DBFAEF09556838BF188679B9C2 PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x266A JUMPI DUP2 PUSH2 0xC07 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27CE PUSH1 0x20 DUP4 PUSH2 0x2F4C JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP2 LT ISZERO SWAP1 PUSH2 0x27E0 PUSH1 0x20 DUP6 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x2808 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2820 PUSH1 0x1 DUP4 PUSH2 0x2F4C JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP2 LT ISZERO SWAP1 PUSH2 0x2832 PUSH1 0x1 DUP6 PUSH2 0x2F4C JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x285A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3FDF3423 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x51F JUMP JUMPDEST POP POP POP ADD PUSH1 0x1 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2875 DUP7 DUP7 PUSH2 0x28A9 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x2885 DUP3 DUP3 PUSH2 0x28F6 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2899 PUSH2 0x1BD3 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x41 SUB PUSH2 0x28E3 JUMPI PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x28D5 DUP9 DUP3 DUP6 DUP6 PUSH2 0x29AF JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x28EF JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x0 SWAP2 POP PUSH1 0x2 SWAP1 JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x290A JUMPI PUSH2 0x290A PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x2913 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2927 JUMPI PUSH2 0x2927 PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x2945 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF645EEDF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2959 JUMPI PUSH2 0x2959 PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x297A JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCE698F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST PUSH1 0x3 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x298E JUMPI PUSH2 0x298E PUSH2 0x2AAF JUMP JUMPDEST SUB PUSH2 0x186E JUMPI PUSH1 0x40 MLOAD PUSH4 0x35E2F383 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x51F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH16 0xA2A8918CA85BAFE22016D0B997E4DF60 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP5 GT ISZERO PUSH2 0x29E0 JUMPI POP PUSH1 0x0 SWAP2 POP PUSH1 0x3 SWAP1 POP DUP3 PUSH2 0x2A6A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP11 SWAP1 MSTORE PUSH1 0xFF DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A34 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2A60 JUMPI POP PUSH1 0x0 SWAP3 POP PUSH1 0x1 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x2A6A JUMP JUMPDEST SWAP3 POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2A87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x6 DUP2 LT PUSH2 0x2AD5 JUMPI PUSH2 0x2AD5 PUSH2 0x2AAF JUMP JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND DUP3 MSTORE DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD PUSH1 0x3 DUP7 LT PUSH2 0x2B10 JUMPI PUSH2 0x2B10 PUSH2 0x2AAF JUMP JUMPDEST DUP6 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x2B23 PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x2AC5 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0xE0 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2B80 DUP2 PUSH2 0x2B4D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2BCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x2BD8 DUP2 PUSH2 0x2B4D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x2BE8 DUP2 PUSH2 0x2B8E JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x2BFF DUP2 PUSH2 0x2BA3 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x2C0F DUP2 PUSH2 0x2BA3 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x100 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2C4D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x2CC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2CFA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 SWAP1 DUP2 MSTORE DUP5 CALLDATALOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE SWAP4 DUP5 ADD CALLDATALOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2B4D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2D9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2DCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DD7 DUP6 DUP3 DUP7 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2DF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E1B DUP8 DUP3 DUP9 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E46 DUP8 DUP3 DUP9 ADD PUSH2 0x2D5A JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6C PUSH2 0x2C1D JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE SWAP1 POP PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2ECB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC07 DUP4 DUP4 PUSH2 0x2E52 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x180 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2EE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2EF3 DUP5 DUP5 PUSH2 0x2E52 JUMP JUMPDEST SWAP2 POP PUSH2 0x2F02 DUP5 PUSH1 0xC0 DUP6 ADD PUSH2 0x2E52 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10A8 DUP2 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xC0A DUP3 DUP5 PUSH2 0x2AC5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xC0A JUMPI PUSH2 0xC0A PUSH2 0x2F36 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2F84 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2F84 DUP2 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x2FA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2FB3 PUSH2 0x2C53 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x2FD7 PUSH1 0x60 DUP6 ADD PUSH2 0x2F79 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2FE8 PUSH1 0x80 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2FF9 PUSH1 0xA0 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x300A PUSH1 0xC0 DUP6 ADD PUSH2 0x2F79 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x301B PUSH1 0xE0 DUP6 ADD PUSH2 0x2F89 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x304A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x3055 PUSH2 0x2C84 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x3060 DUP2 PUSH2 0x2B4D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xE0 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x30D9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x30BD JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x25EC SWAP1 DUP4 ADD DUP5 PUSH2 0x30B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x312F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x3152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xA0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3184 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 SWAP1 DUP2 MSTORE DUP5 MLOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP7 ADD MLOAD SWAP1 DUP4 ADD MSTORE DUP5 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x10A8 DUP2 PUSH2 0x2BA3 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xC0A JUMPI PUSH2 0xC0A PUSH2 0x2F36 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 SWAP1 SWAP4 ADD MLOAD SWAP1 SWAP5 SWAP3 SWAP4 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x323F PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x326D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xFC MLOAD 0xA7 SWAP3 SELFBALANCE 0xA9 0xED CALLCODE PUSH12 0xDAF727EA63DE7398A97BC3A2 PUSH27 0xD1E74C0FF8BF34282E64736F6C634300081B003300000000000000 ", - "sourceMap": "2429:26817:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9390:806;;;;;;:::i;:::-;;:::i;:::-;;882:28:49;;;;;-1:-1:-1;;;882:28:49;;;;;;;;;539:10:62;527:23;;;509:42;;497:2;482:18;882:28:49;;;;;;;;958:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;958:77:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12902:130:48:-;;;;;;:::i;:::-;;:::i;2745:56::-;;2795:6;2745:56;;11271:789;;;;;;:::i;:::-;;:::i;312:39:49:-;;;;;-1:-1:-1;;;;;312:39:49;;;;;;;;;;:::i;595:29::-;;;;;;;;;2532:25:62;;;2520:2;2505:18;595:29:49;2386:177:62;16084:685:48;;;;;;:::i;:::-;;:::i;5534:307::-;;;;;;:::i;:::-;;:::i;14965:105::-;15050:13;;-1:-1:-1;;;15050:13:48;;-1:-1:-1;;;;;15050:13:48;14965:105;;;-1:-1:-1;;;;;3420:31:62;;;3402:50;;3390:2;3375:18;14965:105:48;3258:200:62;508:27:49;;;;;-1:-1:-1;;;508:27:49;;-1:-1:-1;;;;;508:27:49;;;4443:506:48;;;;;;:::i;:::-;;:::i;14501:147::-;;;;;;:::i;:::-;;:::i;434:25:49:-;;;;;-1:-1:-1;;;;;434:25:49;;;3155:101:34;;;:::i;13270:147:48:-;;;;;;:::i;:::-;;:::i;14755:108::-;14838:18;;;;14755:108;;2441:144:34;;;:::i;749:32:49:-;;;;;;;;;10372:606:48;;;;;;:::i;:::-;;:::i;13927:134::-;;;;;;:::i;:::-;;:::i;13588:131::-;;;;;;:::i;:::-;;:::i;12250:114::-;;;;;;:::i;:::-;;:::i;17779:153::-;;;;;;:::i;:::-;;:::i;:::-;;;7333:14:62;;7326:22;7308:41;;7296:2;7281:18;17779:153:48;7168:187:62;15188:270:48;;;;;;:::i;:::-;;:::i;6270:423::-;;;;;;:::i;:::-;;:::i;7382:1483::-;;;;;;:::i;:::-;;:::i;:::-;;;;9017:25:62;;;9073:2;9058:18;;9051:34;;;;8990:18;7382:1483:48;8843:248:62;16923:667:48;;;;;;:::i;:::-;;:::i;15638:252::-;;;;;;:::i;:::-;;:::i;12548:125::-;;;;;;:::i;:::-;;:::i;3405:215:34:-;;;;;;:::i;:::-;;:::i;9390:806:48:-;2960:10;;-1:-1:-1;;;;;2960:10:48;2946;:24;2938:64;;;;-1:-1:-1;;;2938:64:48;;;;;;;;;;;;9527:9:::1;3205:27;3222:9;3205:16;:27::i;:::-;3263:9;3197:77;;;;;-1:-1:-1::0;;;3197:77:48::1;;;;;;2532:25:62::0;;2520:2;2505:18;;2386:177;3197:77:48::1;;;;;;;;;-1:-1:-1::0;3335:37:48::1;3305:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;:67;::::0;::::1;;;;;;:::i;:::-;3418:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;::::0;3305:67:::1;3284:171;;;;-1:-1:-1::0;;;3284:171:48::1;;;;;;;;:::i;:::-;-1:-1:-1::0;9548:23:48::2;9574:19:::0;;;:8:::2;:19;::::0;;;;9640:14:::2;::::0;::::2;:55:::0;;-1:-1:-1;;9640:55:48::2;;;::::0;;9762:15;;9792:21:::2;::::0;::::2;::::0;9574:19;;9548:23;9748:66:::2;::::0;-1:-1:-1;;;;;9762:15:48::2;::::0;9779:11;;9748:13:::2;:66::i;:::-;9916:17;::::0;::::2;::::0;9952:15:::2;::::0;::::2;::::0;9723:91;;-1:-1:-1;9891:77:48::2;::::0;-1:-1:-1;;;;;9916:17:48;;::::2;::::0;9935:32:::2;::::0;9723:91;9935:32:::2;:::i;:::-;9891:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;9891:24:48::2;::::0;:77;:24:::2;:77::i;:::-;9983:29;::::0;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;9983:29:48;;::::2;::::0;;;;::::2;::::0;::::2;;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;10004:7;;9983:29;;;;::::2;::::0;;::::2;::::0;;::::2;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;:20;:29::i;:::-;9979:99;;;10028:39;10042:7;:24;;;10028:13;:39::i;:::-;10137:17;::::0;::::2;::::0;10120:15;;10156::::2;::::0;::::2;::::0;-1:-1:-1;;;;;10137:17:48;;::::2;::::0;10120:15;;::::2;::::0;10109:9;;10093:96:::2;::::0;10156:32:::2;::::0;10174:14;;10156:32:::2;:::i;:::-;10093:96;::::0;2532:25:62;;;2520:2;2505:18;10093:96:48::2;;;;;;;9538:658;;3012:1:::1;9390:806:::0;;:::o;12902:130::-;2334:13:34;:11;:13::i;:::-;12991:34:48::1;13010:14;12991:18;:34::i;:::-;12902:130:::0;:::o;11271:789::-;11345:9;3662:27;3679:9;3662:16;:27::i;:::-;3720:9;3654:77;;;;;-1:-1:-1;;;3654:77:48;;;;;;2532:25:62;;2520:2;2505:18;;2386:177;3654:77:48;-1:-1:-1;3763:19:48;;;;:8;:19;;;;;:29;;;-1:-1:-1;;;;;3763:29:48;3749:10;:43;3741:82;;;;-1:-1:-1;;;3741:82:48;;;;;;;;;;;;11375:9:::1;3205:27;3222:9;3205:16;:27::i;:::-;3263:9;3197:77;;;;;-1:-1:-1::0;;;3197:77:48::1;;;;;;2532:25:62::0;;2520:2;2505:18;;2386:177;3197:77:48::1;-1:-1:-1::0;3335:37:48::1;3305:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;:67;::::0;::::1;;;;;;:::i;:::-;3418:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;::::0;3305:67:::1;3284:171;;;;-1:-1:-1::0;;;3284:171:48::1;;;;;;;;:::i;:::-;-1:-1:-1::0;11396:23:48::2;11422:19:::0;;;:8:::2;:19;::::0;;;;11528:13:::2;::::0;11508:17:::2;::::0;::::2;::::0;11544:15:::2;::::0;11508:33:::2;::::0;-1:-1:-1;;;11528:13:48;;::::2;-1:-1:-1::0;;;;;11528:13:48::2;::::0;11508:33:::2;:::i;:::-;:51;11500:102;;;;-1:-1:-1::0;;;11500:102:48::2;;;;;;;;;;;;11667:15;::::0;::::2;::::0;:19;11663:110:::2;;11727:17;::::0;::::2;::::0;11746:15:::2;::::0;::::2;::::0;11702:60:::2;::::0;-1:-1:-1;;;;;11727:17:48::2;::::0;11702:13:::2;:11;:13::i;:60::-;11825:33;::::0;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;11825:33:48;;::::2;::::0;;;;::::2;::::0;::::2;;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;11850:7;;11825:33;;;;::::2;::::0;;::::2;::::0;;::::2;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;:24;:33::i;:::-;-1:-1:-1::0;11901:14:48::2;::::0;::::2;:56:::0;;-1:-1:-1;;11901:56:48::2;::::0;::::2;::::0;;-1:-1:-1;12018:17:48;::::2;::::0;12001:15;;12037::::2;::::0;::::2;::::0;11973:80:::2;::::0;;2532:25:62;;;11973:80:48;-1:-1:-1;;;;;12018:17:48;;::::2;::::0;12001:15;;::::2;::::0;11990:9;;11973:80:::2;::::0;;;;;2520:2:62;11973:80:48;;::::2;11386:674;3833:1:::1;11271:789:::0;;:::o;16084:685::-;2960:10;;-1:-1:-1;;;;;2960:10:48;2946;:24;2938:64;;;;-1:-1:-1;;;2938:64:48;;;;;;;;;;;;16176:9:::1;3205:27;3222:9;3205:16;:27::i;:::-;3263:9;3197:77;;;;;-1:-1:-1::0;;;3197:77:48::1;;;;;;2532:25:62::0;;2520:2;2505:18;;2386:177;3197:77:48::1;-1:-1:-1::0;3335:37:48::1;3305:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;:67;::::0;::::1;;;;;;:::i;:::-;3418:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;::::0;3305:67:::1;3284:171;;;;-1:-1:-1::0;;;3284:171:48::1;;;;;;;;:::i;:::-;-1:-1:-1::0;16197:23:48::2;16223:19:::0;;;:8:::2;:19;::::0;;;;;;;;16285:14:::2;::::0;::::2;:55:::0;;;-1:-1:-1;;16285:55:48;::::2;;::::0;;;16447:29;;16285:55:::2;16447:29:::0;::::2;::::0;;;;-1:-1:-1;;;;;16447:29:48;;::::2;::::0;;-1:-1:-1;16447:29:48;::::2;::::0;::::2;::::0;;::::2;::::0;;;;16302:38:::2;16447:29:::0;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;16223:19;;16447:29:::2;::::0;;16223:19;;16447:29;;;;::::2;::::0;;;::::2;;;;;;:::i;:::-;16540:24;::::0;::::2;::::0;16529:9;;16446:30:::2;16425:150;;;::::0;-1:-1:-1;;;16425:150:48;;::::2;::::0;::::2;9017:25:62::0;;;;9058:18;;;9051:34;8990:18;;16425:150:48::2;8843:248:62::0;16425:150:48::2;;;16626:41;16651:7;:15;;;16626:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;16626:24:48::2;::::0;::::2;:41::i;:::-;16727:17;::::0;::::2;::::0;16710:15;;16746::::2;::::0;::::2;::::0;16683:79:::2;::::0;2532:25:62;;;-1:-1:-1;;;;;16727:17:48;;::::2;::::0;16710:15;;::::2;::::0;16699:9;;16683:79:::2;::::0;2520:2:62;2505:18;16683:79:48::2;;;;;;;;16187:582;3012:1:::1;16084:685:::0;:::o;5534:307::-;5627:7;5682:23;:21;:23::i;:::-;5751:83;5788:10;5800:14;;5816:12;5830:3;5751:36;:83::i;:::-;5744:90;;5534:307;;;;;:::o;4443:506::-;4158:30:35;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:35;-1:-1:-1;;;4302:15:35;;;4301:16;;-1:-1:-1;;;;;4348:14:35;4279:19;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:35;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:35;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:35;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:35;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:35;-1:-1:-1;;;5013:22:35;;;4979:67;4658:26:48::1;4673:10;4658:14;:26::i;:::-;4694:27;:25;:27::i;:::-;4732:26;4747:10;4732:14;:26::i;:::-;4768:32;4786:13;4768:17;:32::i;:::-;4810:34;4829:14;4810:18;:34::i;:::-;4854:43;4877:19;4854:22;:43::i;:::-;4907:35;4926:15;4907:18;:35::i;:::-;5070:14:35::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:35;;;5142:14;;-1:-1:-1;3402:50:62;;5142:14:35;;3390:2:62;3375:18;5142:14:35;;;;;;;5066:101;4092:1081;;;;;4443:506:48;;;;;:::o;14501:147::-;14592:7;14618:23;14633:7;14618:14;:23::i;3155:101:34:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;13270:147:48:-;2334:13:34;:11;:13::i;:::-;13367:43:48::1;13390:19;13367:22;:43::i;2441:144:34:-:0;2487:7;2506:24;2533:20;:18;:20::i;:::-;2570:8;-1:-1:-1;;;;;2570:8:34;;2441:144;-1:-1:-1;;2441:144:34:o;10372:606:48:-;2960:10;;-1:-1:-1;;;;;2960:10:48;2946;:24;2938:64;;;;-1:-1:-1;;;2938:64:48;;;;;;;;;;;;10464:9:::1;3205:27;3222:9;3205:16;:27::i;:::-;3263:9;3197:77;;;;;-1:-1:-1::0;;;3197:77:48::1;;;;;;2532:25:62::0;;2520:2;2505:18;;2386:177;3197:77:48::1;-1:-1:-1::0;3335:37:48::1;3305:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;:67;::::0;::::1;;;;;;:::i;:::-;3418:19;::::0;;;:8:::1;:19;::::0;;;;:26:::1;;::::0;::::1;::::0;::::1;;;::::0;3305:67:::1;3284:171;;;;-1:-1:-1::0;;;3284:171:48::1;;;;;;;;:::i;:::-;-1:-1:-1::0;10485:23:48::2;10511:19:::0;;;:8:::2;:19;::::0;;;;10595:15:::2;::::0;::::2;::::0;:19;10591:110:::2;;10655:17;::::0;::::2;::::0;10674:15:::2;::::0;::::2;::::0;10630:60:::2;::::0;-1:-1:-1;;;;;10655:17:48::2;::::0;10630:13:::2;:11;:13::i;:60::-;10753:31;::::0;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;10753:31:48;;::::2;::::0;;;;::::2;::::0;::::2;;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;10776:7;;10753:31;;;;::::2;::::0;;::::2;::::0;;::::2;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;:22;:31::i;:::-;-1:-1:-1::0;10827:14:48::2;::::0;::::2;:52:::0;;-1:-1:-1;;10827:52:48::2;::::0;::::2;::::0;;-1:-1:-1;10936:17:48;::::2;::::0;10919:15;;10955::::2;::::0;::::2;::::0;10895:76:::2;::::0;2532:25:62;;;-1:-1:-1;;;;;10936:17:48;;::::2;::::0;10919:15;;::::2;::::0;10908:9;;10895:76:::2;::::0;2520:2:62;2505:18;10895:76:48::2;2386:177:62::0;13927:134:48;2334:13:34;:11;:13::i;:::-;14018:36:48::1;14038:15;14018:19;:36::i;13588:131::-:0;2334:13:34;:11;:13::i;:::-;13677:35:48::1;13696:15;13677:18;:35::i;12250:114::-:0;2334:13:34;:11;:13::i;:::-;12331:26:48::1;12346:10;12331:14;:26::i;17779:153::-:0;17854:4;;17877:19;;;;:8;:19;;;;;:26;;;;;;;;:48;;;;;;;;:::i;:::-;;;;17779:153;-1:-1:-1;;17779:153:48:o;15188:270::-;15263:7;15282:42;15327:15;:13;:15::i;:::-;15373;;15327:63;;-1:-1:-1;;;15327:63:48;;-1:-1:-1;;;;;15327:28:48;;;;;;:63;;15356:7;;15373:15;;;;15327:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15282:108;;15407:44;15425:7;15434:9;:16;;;15407:17;:44::i;:::-;15400:51;15188:270;-1:-1:-1;;;15188:270:48:o;6270:423::-;6357:7;6412:23;:21;:23::i;:::-;6493:193;6545:10;6573:14;;6605:34;6623:15;;6605:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6605:17:48;;-1:-1:-1;;;6605:34:48:i;:::-;6657:15;;6493:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6493:34:48;;-1:-1:-1;;;6493:193:48:i;7382:1483::-;7533:7;7542;7561:17;7581:10;7561:30;;7636:37;7676:35;7694:16;;7676:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7676:17:48;;-1:-1:-1;;;7676:35:48:i;:::-;7636:75;;7721:37;7761:35;7779:16;;7761:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7761:17:48;;-1:-1:-1;;;7761:35:48:i;:::-;7721:75;;7878:54;7905:12;7919;7878:26;:54::i;:::-;8004:23;;8045:24;;;;;8087:33;;;;;8138:23;;8179:24;;;;8221:33;;;;8004:23;;8045:24;;8087:33;;8138:23;7857:421;;;;-1:-1:-1;;;7857:421:48;;;;;13522:25:62;;;;13563:18;;;13556:34;;;;13606:18;;;13599:34;;;;13649:18;;;13642:34;13692:19;;;13685:35;13736:19;;;13729:35;13494:19;;7857:421:48;13235:535:62;7857:421:48;;;;;;;8380:12;8395:80;8430:9;8441:1;8444:12;8458:16;;8395:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8395:34:48;;-1:-1:-1;;;8395:80:48:i;:::-;8380:95;;8485:12;8500:80;8535:9;8546:1;8549:12;8563:16;;8500:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8500:34:48;;-1:-1:-1;;;8500:80:48:i;:::-;8643:14;;;;:8;:14;;;;;;:31;;;;:38;;;8691:14;;;;;;:31;:38;;;8803:25;8485:95;;-1:-1:-1;8485:95:48;;8652:4;;8803:25;;;8847:4;;;;-1:-1:-1;7382:1483:48;-1:-1:-1;;;;;;;;7382:1483:48:o;16923:667::-;17013:7;17104:20;17127:27;17142:11;17127:14;:27::i;:::-;17197:15;;:43;;-1:-1:-1;;;17197:43:48;;17104:50;;-1:-1:-1;17165:29:48;;-1:-1:-1;;;;;17197:15:48;;;;:29;;:43;;17104:50;;17197:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17258:13;;17165:75;;-1:-1:-1;17317:12:48;;-1:-1:-1;;;;;17258:27:48;17250:81;;;;-1:-1:-1;;;17250:81:48;;;;;;;;:::i;:::-;-1:-1:-1;17392:32:48;;;;17362:26;;;;;:62;;;17341:212;;;;-1:-1:-1;;;17341:212:48;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;17341:212:48;8843:248:62;17341:212:48;-1:-1:-1;;17570:13:48;;16923:667;-1:-1:-1;;;16923:667:48:o;15638:252::-;15806:4;15829:54;15856:12;15870;15829:26;:54::i;12548:125::-;2334:13:34;:11;:13::i;:::-;12634:32:48::1;12652:13;12634:17;:32::i;3405:215:34:-:0;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:34;::::1;3485:91;;3562:1;3534:31;;-1:-1:-1::0;;;3534:31:34::1;;;;;;;;:::i;3485:91::-;3585:28;3604:8;3585:18;:28::i;23818:1055:48:-:0;23958:7;24021:42;24066:15;:13;:15::i;:::-;24113;;24066:64;;-1:-1:-1;;;24066:64:48;;-1:-1:-1;;;;;24066:28:48;;;;;;:64;;24095:8;;24113:15;;;;24066:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24243:14;;24021:109;;-1:-1:-1;24190:22:48;;24215:43;;:20;;24243:14;-1:-1:-1;;;24243:14:48;;;;;;24215:27;:43;:::i;:::-;24190:68;-1:-1:-1;24289:17:48;;;;;:51;;;24326:14;24310:12;:30;;24289:51;24387:12;24401:14;24268:158;;;;;;-1:-1:-1;;;24268:158:48;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;24268:158:48;8843:248:62;24268:158:48;;;24594:27;24624:40;24633:12;24647:9;:16;;;24624:8;:40::i;:::-;24706:18;;24594:70;;-1:-1:-1;24674:21:48;;24698:55;;24706:18;;;;;24594:70;;24698:34;:55;:::i;:::-;24764:15;;24796:39;;;;;;9017:25:62;;;9058:18;;;9051:34;;;24796:39:48;;;;;;;;;8990:18:62;;;24796:39:48;;;;-1:-1:-1;;;24764:72:48;;;9051:34:62;;-1:-1:-1;;;;;;24764:15:48;;;;:21;;:72;;24786:8;;24796:39;24764:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24853:13:48;;23818:1055;-1:-1:-1;;;;;;;;;;23818:1055:48:o;5725:94:33:-;5801:11;;5725:94::o;1050:198:7:-;1148:11;;1144:98;;1183:34;;-1:-1:-1;;;1183:34:7;;-1:-1:-1;;;;;16125:32:62;;;1183:34:7;;;16107:51:62;16174:18;;;16167:34;;;1183:20:7;;;;;16080:18:62;;1183:34:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1175:56;;;;-1:-1:-1;;;1175:56:7;;16696:2:62;1175:56:7;;;16678:21:62;16735:1;16715:18;;;16708:29;-1:-1:-1;;;16753:18:62;;;16746:39;16802:18;;1175:56:7;16494:332:62;1175:56:7;1050:198;;;:::o;27961:329:48:-;28074:25;;;;28038:4;;28198:14;;;;;:85;;-1:-1:-1;28246:37:48;28216:19;;;;:8;:19;;;;;:26;;;;;;;;:67;;;;;;;;:::i;:::-;;28191:92;27961:329;-1:-1:-1;;;27961:329:48:o;2658:162:34:-;966:10:36;2717:7:34;:5;:7::i;:::-;-1:-1:-1;;;;;2717:23:34;;2713:101;;966:10:36;2763:40:34;;-1:-1:-1;;;2763:40:34;;;;;;;;:::i;25949:252:48:-;26028:15;:20;26020:83;;;;-1:-1:-1;;;26020:83:48;;;;;;2532:25:62;;2520:2;2505:18;;2386:177;26020:83:48;-1:-1:-1;26113:14:48;:32;;;26160:34;;2532:25:62;;;26160:34:48;;2520:2:62;2505:18;26160:34:48;;;;;;;;25949:252;:::o;22720:408::-;22796:4;22816:30;22837:8;22816:20;:30::i;:::-;22812:288;;;22889:25;;;;22862:24;22961:26;;;:8;:26;;;;;23001:21;;;:63;;23025:39;;23001:21;-1:-1:-1;;23001:63:48;;23025:39;23001:63;;;;;-1:-1:-1;23085:4:48;;22720:408;-1:-1:-1;;;;22720:408:48:o;22812:288::-;-1:-1:-1;23116:5:48;;22720:408;-1:-1:-1;22720:408:48:o;1404:154:7:-;1489:11;;1485:67;;1516:25;;-1:-1:-1;;;1516:25:7;;;;;2532::62;;;-1:-1:-1;;;;;1516:16:7;;;;;2505:18:62;;1516:25:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1485:67;1404:154;;:::o;23211:180:48:-;23332:52;23357:10;23369:14;;23332:13;:11;:13::i;:::-;-1:-1:-1;;;;;23332:24:48;;:52;:24;:52::i;20483:1468::-;20738:37;;-1:-1:-1;;;;;;17033:2:62;17004:15;;;17000:45;20738:37:48;;;16988:58:62;17062:12;;;17055:28;;;20659:7:48;;;;17099:12:62;;20738:37:48;;;;;;;;;;;;20728:48;;;;;;20708:68;;20854:27;20871:9;20854:16;:27::i;:::-;20853:28;20919:9;20845:85;;;;;-1:-1:-1;;;20845:85:48;;;;;;2532:25:62;;2520:2;2505:18;;2386:177;20845:85:48;-1:-1:-1;21006:15:48;;:44;;-1:-1:-1;;;21006:44:48;;20974:29;;-1:-1:-1;;;;;21006:15:48;;:29;;:44;;21036:13;;21006:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21078:13;;20974:76;;-1:-1:-1;21162:13:48;-1:-1:-1;;;;;21109:21:48;;21101:76;;;;-1:-1:-1;;;21101:76:48;;;;;;;;:::i;:::-;;21230:42;21275:15;:13;:15::i;:::-;21321;;21275:63;;-1:-1:-1;;;21275:63:48;;-1:-1:-1;;;;;21275:28:48;;;;;;:63;;21304:7;;21321:15;;;;21275:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21356:16;;21230:108;;-1:-1:-1;21356:16:48;:21;21348:58;;;;-1:-1:-1;;;21348:58:48;;;;;;;;;;;;21442:21;21466:44;21484:7;21493:9;:16;;;21466:17;:44::i;:::-;21542:253;;;;;;;;21563:13;;-1:-1:-1;;;;;21542:253:48;;;;;;;;;;;;;;;;;-1:-1:-1;21542:253:48;;;;21442:68;;-1:-1:-1;21542:253:48;;;21651:27;21542:253;;;;21692:37;21542:253;;21743:15;21542:253;;;;;;;;;;;;;;;-1:-1:-1;21520:19:48;;;:8;:19;;;;;:275;;;;-1:-1:-1;;;;;21520:275:48;;;-1:-1:-1;;;;;;21520:275:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21520:275:48;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;21520:275:48;;;;;;;;;-1:-1:-1;;21520:275:48;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;21520:275:48;;;;;;;;;;;;;;;;;;21845:13;;21811:106;;;17353:25:62;;;-1:-1:-1;;;;;17414:32:62;;;17409:2;17394:18;;17387:60;17463:18;;;17456:34;;;17521:2;17506:18;;17499:34;;;21811:106:48;;;;;;;;21834:9;;21811:106;;17340:3:62;17325:19;21811:106:48;;;;;;;-1:-1:-1;21935:9:48;;20483:1468;-1:-1:-1;;;;;;;;20483:1468:48:o;8737:170:35:-;8870:21;;8737:170::o;1847:127:34:-;6931:20:35;:18;:20::i;:::-;1929:38:34::1;1954:12;1929:24;:38::i;1599:117:59:-:0;6931:20:35;:18;:20::i;:::-;1672:37:59::1;:35;:37::i;25074:215:48:-:0;-1:-1:-1;;;;;25145:25:48;;25137:70;;;;-1:-1:-1;;;25137:70:48;;;;;;;;;;;;25217:10;:24;;-1:-1:-1;;;;;;25217:24:48;-1:-1:-1;;;;;25217:24:48;;;;;;;;25256:26;;;;-1:-1:-1;;25256:26:48;25074:215;:::o;25484:225::-;25560:14;-1:-1:-1;;;;;25560:19:48;25578:1;25560:19;25552:63;;;;-1:-1:-1;;;25552:63:48;;;;;;;;;;;;25625:13;:30;;-1:-1:-1;;;;25625:30:48;-1:-1:-1;;;;;;;;25625:30:48;;;;;;;;;;;;25670:32;;3402:50:62;;;25670:32:48;;3390:2:62;3375:18;25670:32:48;3258:200:62;26449:341:48;26548:19;2795:6;26548:47;;;;;26527:149;;;;-1:-1:-1;;;26527:149:48;;539:10:62;527:23;;;26527:149:48;;;509:42:62;482:18;;26527:149:48;365:192:62;26527:149:48;-1:-1:-1;26686:18:48;:40;;-1:-1:-1;;26686:40:48;;;;;;;;;;26741:42;;509::62;;;26741::48;;497:2:62;482:18;26741:42:48;365:192:62;26971:314:48;27098:35;;;;312:9:31;-1:-1:-1;1823:16:31;27090:98:48;;;;-1:-1:-1;;;27090:98:48;;539:10:62;527:23;;;27090:98:48;;;509:42:62;482:18;;27090:98:48;365:192:62;27090:98:48;-1:-1:-1;27198:14:48;:32;;-1:-1:-1;;27198:32:48;-1:-1:-1;;;27198:32:48;;;;;;;;;;;;;;27245:33;;27263:14;;;509:42:62;;27245:33:48;;497:2:62;482:18;27245:33:48;365:192:62;3513:669:59;3597:7;3775:16;3935:19;;3984:20;;;;;4034:29;;;;;3848:241;;785:89;3848:241;;;17775:25:62;17816:18;;;17809:34;;;;17859:18;;;17852:34;;;;17902:18;;;;17895:34;;;;3848:241:59;;;;;;;;;;17747:19:62;;;3848:241:59;;3813:330;;;;;;-1:-1:-1;;;3662:499:59;;;18198:27:62;18241:11;;;18234:27;;;;18277:12;;;;18270:28;;;;3662:499:59;;;;;;;;;;18314:12:62;;;;3662:499:59;;;3635:540;;;;;;3513:669::o;3774:248:34:-;3847:24;3874:20;:18;:20::i;:::-;3923:8;;-1:-1:-1;;;;;3941:19:34;;;-1:-1:-1;;;;;;3941:19:34;;;;;;3975:40;;3847:47;;-1:-1:-1;3923:8:34;;;;;3975:40;;3904:16;;3975:40;3837:185;;3774:248;:::o;1192:159::-;1313:22;;1192:159::o;22133:402:48:-;22207:4;22227:30;22248:8;22227:20;:30::i;:::-;22223:284;;;22300:25;;;;22273:24;22372:26;;;:8;:26;;;;;22412:21;;;:59;;22436:35;;22412:21;-1:-1:-1;;22412:59:48;;22436:35;22412:59;;27504:268;-1:-1:-1;;;;;27585:30:48;;27577:75;;;;-1:-1:-1;;;27577:75:48;;;;;;;;;;;;27662:15;:52;;-1:-1:-1;;;;;;27662:52:48;-1:-1:-1;;;;;27662:52:48;;;;;;;;27729:36;;;;-1:-1:-1;;27729:36:48;27504:268;:::o;5889:102:33:-;5971:13;;5889:102::o;28796:448:48:-;28886:7;28905:23;28931:15;:13;:15::i;:::-;28983;;28931:69;;-1:-1:-1;;;28931:69:48;;-1:-1:-1;;;;;28931:33:48;;;;;;:69;;28965:8;;28983:15;;;;28931:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;;28905:102;;29017:26;29070:15;;;;;;;;;-1:-1:-1;;;;;29070:15:48;-1:-1:-1;;;;;29070:34:48;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29046:61;;29062:45;;29046:13;:61;:::i;:::-;29017:90;;29117:21;29157:50;29171:15;29188:18;29157:13;:50::i;:::-;29141:66;;:13;:66;:::i;:::-;29117:90;28796:448;-1:-1:-1;;;;;;28796:448:48:o;2320:820:55:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;919:1:55;1205:27;871:2;;1205:27;:::i;:::-;:42;;;;:::i;:::-;1304:35;;774:2;1304:35;:::i;:::-;2464:12;;:38;;;;919:1;1205:27;871:2;;1205:27;:::i;:::-;:42;;;;:::i;:::-;1304:35;;774:2;1304:35;:::i;:::-;2443:150;;;;;;-1:-1:-1;;;2443:150:55;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;2443:150:55;8843:248:62;2443:150:55;;;2631:18;2651:19;2672:28;2728:5;2704:80;;;;;;;;;;;;:::i;:::-;2630:154;;;;;;2909:9;2921:31;2932:5;774:2;2921:10;:31::i;:::-;2909:43;-1:-1:-1;2962:9:55;2974:31;2985:5;1030:33;823:2;774;1030:33;:::i;:::-;2974:10;:31::i;:::-;2962:43;-1:-1:-1;3015:7:55;3025:29;3034:5;871:2;1109:33;871:2;774;1109:33;:::i;:::-;:48;;;;:::i;:::-;3025:8;:29::i;:::-;3072:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3072:61:55;;;;;;;2320:820;-1:-1:-1;;2320:820:55:o;18478:1717:48:-;18685:7;18759:15;18777:35;18799:12;18777:21;:35::i;:::-;18759:53;;18860:42;18905:15;:13;:15::i;:::-;18951;;18905:63;;-1:-1:-1;;;18905:63:48;;-1:-1:-1;;;;;18905:28:48;;;;;;:63;;18934:7;;18951:15;;;;18905:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18986:16;;18860:108;;-1:-1:-1;18986:16:48;:21;18978:58;;;;-1:-1:-1;;;18978:58:48;;;;;;;;;;;;19154:23;;19195:24;;;;;19237:33;;;;;19120:217;;;;;20576:19:62;;;;20611:12;;20604:28;20648:12;;;;20641:28;;;;-1:-1:-1;;;;;;20703:15:62;;;20699:45;;20685:12;;;20678:67;20780:15;;;;20776:45;;;20761:13;;;20754:68;19077:17:48;;20838:13:62;;19120:217:48;;;;;;;;;;;;19097:250;;;;;;19077:270;;19443:27;19460:9;19443:16;:27::i;:::-;19442:28;19508:9;19434:85;;;;;-1:-1:-1;;;19434:85:48;;;;;;2532:25:62;;2520:2;2505:18;;2386:177;19434:85:48;;19555:21;19579:44;19597:7;19606:9;:16;;;19579:17;:44::i;:::-;19655:267;;;;;;;;-1:-1:-1;;;;;19655:267:48;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19655:267:48;;;;;;19781:24;19655:267;;;;;;19819:37;19655:267;;;;;;19870:15;19655:267;;;;;;;;;;19633:19;;;:8;:19;;;;;;;:289;;;;;;;-1:-1:-1;;;;;;19633:289:48;;;;;;;;-1:-1:-1;19633:289:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19655:267;;-1:-1:-1;19655:267:48;;19633:19;;:289;;;-1:-1:-1;;19633:289:48;;-1:-1:-1;19633:289:48;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;19633:289:48;;;;;;;;;-1:-1:-1;;19633:289:48;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;20015:10;-1:-1:-1;;;;;19938:223:48;19994:7;-1:-1:-1;;;;;19938:223:48;19971:9;19938:223;20039:8;20061:12;:33;;;20108:16;20138:13;19938:223;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;20179:9:48;18478:1717;-1:-1:-1;;;;;;;18478:1717:48:o;1805:391:55:-;2006:24;;1978;;1954:4;;1978:52;:140;;;;;2084:13;:34;;;2046:13;:34;;;:72;1978:140;:210;;;;-1:-1:-1;;2163:25:55;;;;;2134;;;:54;;;1805:391::o;2372:700:59:-;2592:151;;;;;;;;2625:23;;2592:151;;;2662:24;;;;2592:151;;;;2700:33;;;;2592:151;;;;;;;2458:7;;;2775:23;2592:151;2775:14;:23::i;:::-;2753:45;;2973:92;2987:11;3017:12;:14;;;3033:12;:14;;;3049:12;:14;;;3000:64;;;;;;;;;21480:19:62;;;21524:2;21515:12;;21508:28;;;;21592:3;21570:16;-1:-1:-1;;;;;;21566:36:62;21561:2;21552:12;;21545:58;21628:2;21619:12;;21299:338;3000:64:59;;;;;;;;;;;;;2973:13;:92::i;:::-;2966:99;2372:700;-1:-1:-1;;;;2372:700:59:o;959:188:31:-;1020:7;1047:13;1058:1;312:9;-1:-1:-1;1823:16:31;;1742:104;1047:13;:30;;;;1064:13;1075:1;312:9;-1:-1:-1;1823:16:31;;1742:104;1064:13;1100:1;1103;1039:67;;;;;;-1:-1:-1;;;1039:67:31;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;1039:67:31;8843:248:62;1039:67:31;-1:-1:-1;312:9:31;;-1:-1:-1;1124:5:31;1128:1;1124;:5;:::i;:::-;1123:17;;;;:::i;2557:104:46:-;2615:7;2645:1;2641;:5;:13;;2653:1;2641:13;;;-1:-1:-1;2649:1:46;;2557:104;-1:-1:-1;2557:104:46:o;598:221:7:-;698:11;;694:119;;733:55;;-1:-1:-1;;;733:55:7;;-1:-1:-1;;;;;22084:32:62;;;733:55:7;;;22066:51:62;773:4:7;22133:18:62;;;22126:60;22202:18;;;22195:34;;;733:24:7;;;;;22039:18:62;;733:55:7;21864:371:62;7084:141:35;7151:17;:15;:17::i;:::-;7146:73;;7191:17;;-1:-1:-1;;;7191:17:35;;;;;;;;;;;1980:235:34;6931:20:35;:18;:20::i;1846:362:59:-;6931:20:35;:18;:20::i;:::-;1971:220:59::1;::::0;;973:108:::1;1971:220;::::0;::::1;22527:25:62::0;1167:27:59::1;22568:18:62::0;;;22561:34;;;;1286:14:59::1;22611:18:62::0;;;22604:34;2104:13:59::1;22654:18:62::0;;;22647:34;2143:4:59::1;22697:19:62::0;;;22690:61;1381:66:59::1;22767:19:62::0;;;22760:35;22499:19;;1971:220:59::1;::::0;;-1:-1:-1;;1971:220:59;;::::1;::::0;;;;;;1948:253;;1971:220:::1;1948:253:::0;;::::1;::::0;1929:16:::1;:272:::0;1846:362::o;1063:105:30:-;1121:7;1152:1;1147;:6;;:14;;1160:1;1147:14;;4048:478:55;4127:7;4184:28;1445:2;4184:6;:28;:::i;:::-;4167:13;;:45;;;;;4271:28;1445:2;4271:6;:28;:::i;:::-;4146:164;;;;;;-1:-1:-1;;;4146:164:55;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;4146:164:55;8843:248:62;4146:164:55;-1:-1:-1;;;4450:30:55;4466:4;4450:30;4444:37;;4048:478::o;3258:668::-;3335:5;3390:26;1391:1;3390:6;:26;:::i;:::-;3373:13;;:43;;;;;3475:26;1391:1;3475:6;:26;:::i;:::-;3352:160;;;;;;-1:-1:-1;;;3352:160:55;;;;;9017:25:62;;;;9058:18;;;9051:34;8990:18;;3352:160:55;8843:248:62;3352:160:55;-1:-1:-1;;;3854:29:55;3870:3;3854:29;3848:36;;3258:668::o;3702:255:44:-;3780:7;3800:17;3819:18;3839:16;3859:27;3870:4;3876:9;3859:10;:27::i;:::-;3799:87;;;;;;3896:28;3908:5;3915:8;3896:11;:28::i;:::-;-1:-1:-1;3941:9:44;;3702:255;-1:-1:-1;;;;3702:255:44:o;8487:120:35:-;8537:4;8560:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8560:40:35;;;;;;-1:-1:-1;8487:120:35:o;2129:766:44:-;2210:7;2219:12;2233:7;2256:9;:16;2276:2;2256:22;2252:637;;2592:4;2577:20;;2571:27;2641:4;2626:20;;2620:27;2698:4;2683:20;;2677:27;2294:9;2669:36;2739:25;2750:4;2669:36;2571:27;2620;2739:10;:25::i;:::-;2732:32;;;;;;;;;;;2252:637;-1:-1:-1;;2860:16:44;;2811:1;;-1:-1:-1;2815:35:44;;2252:637;2129:766;;;;;:::o;7196:532::-;7291:20;7282:5;:29;;;;;;;;:::i;:::-;;7278:444;;7196:532;;:::o;7278:444::-;7387:29;7378:5;:38;;;;;;;;:::i;:::-;;7374:348;;7439:23;;-1:-1:-1;;;7439:23:44;;;;;;;;;;;7374:348;7492:35;7483:5;:44;;;;;;;;:::i;:::-;;7479:243;;7550:46;;-1:-1:-1;;;7550:46:44;;;;;2532:25:62;;;2505:18;;7550:46:44;2386:177:62;7479:243:44;7626:30;7617:5;:39;;;;;;;;:::i;:::-;;7613:109;;7679:32;;-1:-1:-1;;;7679:32:44;;;;;2532:25:62;;;2505:18;;7679:32:44;2386:177:62;5140:1530:44;5266:7;;;-1:-1:-1;;;;;6186:79:44;;6182:164;;;-1:-1:-1;6297:1:44;;-1:-1:-1;6301:30:44;;-1:-1:-1;6333:1:44;6281:54;;6182:164;6457:24;;;6440:14;6457:24;;;;;;;;;23033:25:62;;;23106:4;23094:17;;23074:18;;;23067:45;;;;23128:18;;;23121:34;;;23171:18;;;23164:34;;;6457:24:44;;23005:19:62;;6457:24:44;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6457:24:44;;-1:-1:-1;;6457:24:44;;;-1:-1:-1;;;;;;;6495:20:44;;6491:113;;-1:-1:-1;6547:1:44;;-1:-1:-1;6551:29:44;;-1:-1:-1;6547:1:44;;-1:-1:-1;6531:62:44;;6491:113;6622:6;-1:-1:-1;6630:20:44;;-1:-1:-1;6630:20:44;;-1:-1:-1;5140:1530:44;;;;;;;;;:::o;14:346:62:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;204:23:62;;;324:2;309:18;;;296:32;;-1:-1:-1;14:346:62:o;562:226::-;621:6;674:2;662:9;653:7;649:23;645:32;642:52;;;690:1;687;680:12;642:52;-1:-1:-1;735:23:62;;562:226;-1:-1:-1;562:226:62:o;793:127::-;854:10;849:3;845:20;842:1;835:31;885:4;882:1;875:15;909:4;906:1;899:15;925:144;1010:1;1003:5;1000:12;990:46;;1016:18;;:::i;:::-;1045;;925:144::o;1074:842::-;-1:-1:-1;;;;;1467:32:62;;;1449:51;;1536:32;;1531:2;1516:18;;1509:60;1600:2;1585:18;;1578:34;;;1643:2;1628:18;;1621:34;;;1436:3;1421:19;;1685:1;1674:13;;1664:47;;1691:18;;:::i;:::-;1748:6;1742:3;1731:9;1727:19;1720:35;1764:58;1817:3;1806:9;1802:19;1794:6;1764:58;:::i;:::-;1853:3;1838:19;;1831:35;;;;1897:3;1882:19;1875:35;1074:842;;-1:-1:-1;;;;;;1074:842:62:o;2152:229::-;-1:-1:-1;;;;;2342:32:62;;;;2324:51;;2312:2;2297:18;;2152:229::o;2568:131::-;-1:-1:-1;;;;;2643:31:62;;2633:42;;2623:70;;2689:1;2686;2679:12;2704:367;2772:6;2780;2833:2;2821:9;2812:7;2808:23;2804:32;2801:52;;;2849:1;2846;2839:12;2801:52;2888:9;2875:23;2907:31;2932:5;2907:31;:::i;:::-;2957:5;3035:2;3020:18;;;;3007:32;;-1:-1:-1;;;2704:367:62:o;3463:129::-;-1:-1:-1;;;;;3541:5:62;3537:30;3530:5;3527:41;3517:69;;3582:1;3579;3572:12;3597:121;3682:10;3675:5;3671:22;3664:5;3661:33;3651:61;;3708:1;3705;3698:12;3723:786;3815:6;3823;3831;3839;3847;3900:3;3888:9;3879:7;3875:23;3871:33;3868:53;;;3917:1;3914;3907:12;3868:53;3956:9;3943:23;3975:31;4000:5;3975:31;:::i;:::-;4025:5;-1:-1:-1;4082:2:62;4067:18;;4054:32;4095;4054;4095;:::i;:::-;4146:7;-1:-1:-1;4226:2:62;4211:18;;4198:32;;-1:-1:-1;4308:2:62;4293:18;;4280:32;4321;4280;4321;:::i;:::-;4372:7;-1:-1:-1;4431:3:62;4416:19;;4403:33;4445:32;4403:33;4445:32;:::i;:::-;4496:7;4486:17;;;3723:786;;;;;;;;:::o;4514:350::-;4586:2;4580:9;4628:4;4616:17;;-1:-1:-1;;;;;4648:34:62;;4684:22;;;4645:62;4642:185;;;4749:10;4744:3;4740:20;4737:1;4730:31;4784:4;4781:1;4774:15;4812:4;4809:1;4802:15;4642:185;4843:2;4836:22;4514:350;:::o;4869:344::-;4936:2;4930:9;4978:3;4966:16;;-1:-1:-1;;;;;4997:34:62;;5033:22;;;4994:62;4991:185;;;5098:10;5093:3;5089:20;5086:1;5079:31;5133:4;5130:1;5123:15;5161:4;5158:1;5151:15;5218:349;5290:2;5284:9;5332:3;5320:16;;-1:-1:-1;;;;;5351:34:62;;5387:22;;;5348:62;5345:185;;;5452:10;5447:3;5443:20;5440:1;5433:31;5487:4;5484:1;5477:15;5515:4;5512:1;5505:15;5572:881;5657:6;5717:2;5705:9;5696:7;5692:23;5688:32;5732:2;5729:22;;;5747:1;5744;5737:12;5729:22;-1:-1:-1;5817:2:62;5811:9;5766:1;;5859:2;5847:15;;-1:-1:-1;;;;;5877:34:62;;5913:22;;;5874:62;5871:187;;;-1:-1:-1;;;5959:32:62;;6014:4;6011:1;6004:15;6043:4;5966:2;6032:16;5871:187;6074:2;6067:22;;;6131:23;;6163:21;;6258:2;6243:18;;;6230:32;6278:15;;;6271:32;6362:18;;;6349:32;6397:15;;;6390:32;;;;-1:-1:-1;6170:6:62;;5572:881;-1:-1:-1;;5572:881:62:o;6666:245::-;6724:6;6777:2;6765:9;6756:7;6752:23;6748:32;6745:52;;;6793:1;6790;6783:12;6745:52;6832:9;6819:23;6851:30;6875:5;6851:30;:::i;6916:247::-;6975:6;7028:2;7016:9;7007:7;7003:23;6999:32;6996:52;;;7044:1;7041;7034:12;6996:52;7083:9;7070:23;7102:31;7127:5;7102:31;:::i;7360:347::-;7411:8;7421:6;7475:3;7468:4;7460:6;7456:17;7452:27;7442:55;;7493:1;7490;7483:12;7442:55;-1:-1:-1;7516:20:62;;-1:-1:-1;;;;;7548:30:62;;7545:50;;;7591:1;7588;7581:12;7545:50;7628:4;7620:6;7616:17;7604:29;;7680:3;7673:4;7664:6;7656;7652:19;7648:30;7645:39;7642:59;;;7697:1;7694;7687:12;7642:59;7360:347;;;;;:::o;7712:409::-;7782:6;7790;7843:2;7831:9;7822:7;7818:23;7814:32;7811:52;;;7859:1;7856;7849:12;7811:52;7899:9;7886:23;-1:-1:-1;;;;;7924:6:62;7921:30;7918:50;;;7964:1;7961;7954:12;7918:50;8003:58;8053:7;8044:6;8033:9;8029:22;8003:58;:::i;:::-;8080:8;;7977:84;;-1:-1:-1;7712:409:62;-1:-1:-1;;;;7712:409:62:o;8126:712::-;8216:6;8224;8232;8240;8293:2;8281:9;8272:7;8268:23;8264:32;8261:52;;;8309:1;8306;8299:12;8261:52;8349:9;8336:23;-1:-1:-1;;;;;8374:6:62;8371:30;8368:50;;;8414:1;8411;8404:12;8368:50;8453:58;8503:7;8494:6;8483:9;8479:22;8453:58;:::i;:::-;8530:8;;-1:-1:-1;8427:84:62;-1:-1:-1;;8618:2:62;8603:18;;8590:32;-1:-1:-1;;;;;8634:32:62;;8631:52;;;8679:1;8676;8669:12;8631:52;8718:60;8770:7;8759:8;8748:9;8744:24;8718:60;:::i;:::-;8126:712;;;;-1:-1:-1;8797:8:62;-1:-1:-1;;;;8126:712:62:o;9096:903::-;9148:5;9196:4;9184:9;9179:3;9175:19;9171:30;9168:50;;;9214:1;9211;9204:12;9168:50;9236:22;;:::i;:::-;9303:23;;9335:22;;9430:2;9415:18;;;9402:32;9450:14;;;9443:31;9547:2;9532:18;;;9519:32;9567:14;;;9560:31;9664:2;9649:18;;;9636:32;9684:14;;;9677:31;9781:3;9766:19;;;9753:33;9802:15;;;9795:32;9227:31;-1:-1:-1;9879:3:62;9864:19;;9851:33;9928:4;9915:18;;9903:31;;9893:59;;9948:1;9945;9938:12;9893:59;9979:3;9968:15;;9961:32;9972:5;9096:903;-1:-1:-1;;9096:903:62:o;10004:225::-;10087:6;10140:3;10128:9;10119:7;10115:23;10111:33;10108:53;;;10157:1;10154;10147:12;10108:53;10180:43;10215:7;10204:9;10180:43;:::i;10234:338::-;10350:6;10358;10411:3;10399:9;10390:7;10386:23;10382:33;10379:53;;;10428:1;10425;10418:12;10379:53;10451:43;10486:7;10475:9;10451:43;:::i;:::-;10441:53;;10513;10558:7;10552:3;10541:9;10537:19;10513:53;:::i;:::-;10503:63;;10234:338;;;;;:::o;10577:245::-;10635:6;10688:2;10676:9;10667:7;10663:23;10659:32;10656:52;;;10704:1;10701;10694:12;10656:52;10743:9;10730:23;10762:30;10786:5;10762:30;:::i;10827:217::-;10978:2;10963:18;;10990:48;10967:9;11020:6;10990:48;:::i;11049:127::-;11110:10;11105:3;11101:20;11098:1;11091:31;11141:4;11138:1;11131:15;11165:4;11162:1;11155:15;11181:125;11246:9;;;11267:10;;;11264:36;;;11280:18;;:::i;11525:300::-;-1:-1:-1;;;;;11717:32:62;;;11699:51;;11786:32;;11781:2;11766:18;;11759:60;11687:2;11672:18;;11525:300::o;11830:136::-;11908:13;;11930:30;11908:13;11930:30;:::i;:::-;11830:136;;;:::o;11971:::-;12049:13;;12071:30;12049:13;12071:30;:::i;12112:1118::-;12209:6;12269:3;12257:9;12248:7;12244:23;12240:33;12285:2;12282:22;;;12300:1;12297;12290:12;12282:22;-1:-1:-1;12319:1:62;12342:17;;:::i;:::-;12405:16;;12430:22;;12519:2;12504:18;;;12498:25;12539:14;;;12532:31;12630:2;12615:18;;;12609:25;12650:14;;;12643:31;12706:48;12750:2;12735:18;;12706:48;:::i;:::-;12701:2;12694:5;12690:14;12683:72;12788:49;12832:3;12821:9;12817:19;12788:49;:::i;:::-;12782:3;12775:5;12771:15;12764:74;12871:49;12915:3;12904:9;12900:19;12871:49;:::i;:::-;12865:3;12858:5;12854:15;12847:74;12954:49;12998:3;12987:9;12983:19;12954:49;:::i;:::-;12948:3;12941:5;12937:15;12930:74;13037:49;13081:3;13070:9;13066:19;13037:49;:::i;:::-;13031:3;13020:15;;13013:74;13154:3;13139:19;;;13133:26;13175:15;;;13168:32;;;;-1:-1:-1;13024:5:62;;12112:1118;-1:-1:-1;;12112:1118:62:o;13775:1177::-;13869:6;13929:3;13917:9;13908:7;13904:23;13900:33;13945:2;13942:22;;;13960:1;13957;13950:12;13942:22;-1:-1:-1;13979:1:62;14002:22;;:::i;:::-;14054:9;14048:16;14073:33;14098:7;14073:33;:::i;:::-;14115:22;;14204:2;14189:18;;;14183:25;14224:14;;;14217:31;14315:2;14300:18;;;14294:25;14335:14;;;14328:31;14426:2;14411:18;;;14405:25;14446:14;;;14439:31;14537:3;14522:19;;;14516:26;14558:15;;;14551:32;14650:3;14635:19;;;14629:26;14671:15;;;14664:32;14763:3;14748:19;;;14742:26;14784:15;;;14777:32;14876:3;14861:19;;;14855:26;14897:15;;;14890:32;;;;-1:-1:-1;14122:5:62;;13775:1177;-1:-1:-1;;13775:1177:62:o;15210:399::-;15251:3;15289:5;15283:12;15316:6;15311:3;15304:19;15341:1;15351:139;15365:6;15362:1;15359:13;15351:139;;;15473:4;15458:13;;;15454:24;;15448:31;15428:11;;;15424:22;;15417:63;15380:12;15351:139;;;15355:3;15535:1;15528:4;15519:6;15514:3;15510:16;15506:27;15499:38;15598:4;15591:2;15587:7;15582:2;15574:6;15570:15;15566:29;15561:3;15557:39;15553:50;15546:57;;;15210:399;;;;:::o;15614:314::-;-1:-1:-1;;;;;15789:32:62;;15771:51;;15858:2;15853;15838:18;;15831:30;;;-1:-1:-1;;15878:44:62;;15903:18;;15895:6;15878:44;:::i;16212:277::-;16279:6;16332:2;16320:9;16311:7;16307:23;16303:32;16300:52;;;16348:1;16345;16338:12;16300:52;16380:9;16374:16;16433:5;16426:13;16419:21;16412:5;16409:32;16399:60;;16455:1;16452;16445:12;18337:1105;18439:6;18499:3;18487:9;18478:7;18474:23;18470:33;18515:2;18512:22;;;18530:1;18527;18520:12;18512:22;-1:-1:-1;18600:2:62;18594:9;18549:1;;18642:3;18630:16;;-1:-1:-1;;;;;18661:34:62;;18697:22;;;18658:62;18655:187;;;-1:-1:-1;;;18743:32:62;;18798:4;18795:1;18788:15;18827:4;18750:2;18816:16;18655:187;18858:2;18851:22;;;18915:16;;18940:21;;19028:2;19013:18;;;19007:25;19048:15;;;19041:32;19125:18;;;19119:25;19160:15;;;19153:32;19252:2;19237:18;;;19231:25;19272:15;;;19265:32;19364:3;19349:19;;;19343:26;19385:16;;;19378:33;;;;-1:-1:-1;18947:6:62;;18337:1105;-1:-1:-1;;18337:1105:62:o;19447:249::-;19516:6;19569:2;19557:9;19548:7;19544:23;19540:32;19537:52;;;19585:1;19582;19575:12;19537:52;19617:9;19611:16;19636:30;19660:5;19636:30;:::i;19701:168::-;19774:9;;;19805;;19822:15;;;19816:22;;19802:37;19792:71;;19843:18;;:::i;19874:456::-;19962:6;19970;19978;20031:2;20019:9;20010:7;20006:23;20002:32;19999:52;;;20047:1;20044;20037:12;19999:52;-1:-1:-1;;20092:16:62;;20198:2;20183:18;;20177:25;20294:2;20279:18;;;20273:25;20092:16;;20177:25;;-1:-1:-1;20273:25:62;19874:456;-1:-1:-1;19874:456:62:o;20862:432::-;21093:6;21082:9;21075:25;21136:6;21131:2;21120:9;21116:18;21109:34;21179:3;21174:2;21163:9;21159:18;21152:31;21056:4;21200:45;21240:3;21229:9;21225:19;21217:6;21200:45;:::i;:::-;21192:53;;21281:6;21276:2;21265:9;21261:18;21254:34;20862:432;;;;;;;:::o;21642:217::-;21682:1;21708;21698:132;;21752:10;21747:3;21743:20;21740:1;21733:31;21787:4;21784:1;21777:15;21815:4;21812:1;21805:15;21698:132;-1:-1:-1;21844:9:62;;21642:217::o" - }, - "methodIdentifiers": { - "MAX_FISHERMAN_REWARD_CUT()": "17337b46", - "acceptDispute(bytes32,uint256)": "050b17ad", - "arbitrator()": "6cc6cde1", - "areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))": "d36fc9d4", - "cancelDispute(bytes32)": "1792f194", - "createIndexingDispute(address,bytes32)": "4bc5839a", - "createQueryDispute(bytes)": "c50a77b1", - "createQueryDisputeConflict(bytes,bytes)": "c894222e", - "disputeDeposit()": "29e03ff1", - "disputePeriod()": "5bf31d4d", - "disputes(bytes32)": "11be1997", - "drawDispute(bytes32)": "9334ea52", - "encodeReceipt((bytes32,bytes32,bytes32))": "6369df6b", - "fishermanRewardCut()": "902a4938", - "getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))": "c9747f51", - "getDisputePeriod()": "5aea0ec4", - "getStakeSnapshot(address)": "c133b429", - "getVerifierCut()": "84633713", - "initialize(address,uint64,uint256,uint32,uint32)": "5ed2c96c", - "isDisputeCreated(bytes32)": "be41f384", - "maxSlashingCut()": "0533e1ba", - "owner()": "8da5cb5b", - "rejectDispute(bytes32)": "36167e03", - "renounceOwnership()": "715018a6", - "setArbitrator(address)": "b0eefabe", - "setDisputeDeposit(uint256)": "16972978", - "setDisputePeriod(uint64)": "d76f62d1", - "setFishermanRewardCut(uint32)": "76c993ae", - "setMaxSlashingCut(uint32)": "9f81a7cf", - "setSubgraphService(address)": "93a90a1e", - "subgraphService()": "26058249", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLength\",\"type\":\"uint256\"}],\"name\":\"AttestationInvalidBytesLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerDisputeAlreadyCreated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IDisputeManager.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"DisputeManagerDisputeNotPending\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerDisputePeriodNotFinished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerDisputePeriodZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"DisputeManagerIndexerNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerInvalidDispute\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"DisputeManagerInvalidDisputeDeposit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"cut\",\"type\":\"uint32\"}],\"name\":\"DisputeManagerInvalidFishermanReward\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxSlashingCut\",\"type\":\"uint32\"}],\"name\":\"DisputeManagerInvalidMaxSlashingCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokensSlash\",\"type\":\"uint256\"}],\"name\":\"DisputeManagerInvalidTokensSlash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"relatedDisputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerMustAcceptRelatedDispute\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"requestCID2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerNonConflictingAttestations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerNonMatchingSubgraphDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerNotArbitrator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerNotFisherman\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerZeroTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"PPMMathInvalidMulPPM\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"}],\"name\":\"ArbitratorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"DisputeDepositSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeDrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId1\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeLinked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"}],\"name\":\"DisputePeriodSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"fishermanRewardCut\",\"type\":\"uint32\"}],\"name\":\"FishermanRewardCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"name\":\"IndexingDisputeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxSlashingCut\",\"type\":\"uint32\"}],\"name\":\"MaxSlashingCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"attestation\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"name\":\"QueryDisputeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"}],\"name\":\"SubgraphServiceSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_FISHERMAN_REWARD_CUT\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"}],\"name\":\"acceptDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation2\",\"type\":\"tuple\"}],\"name\":\"areConflictingAttestations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"cancelDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"}],\"name\":\"createIndexingDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"attestationData\",\"type\":\"bytes\"}],\"name\":\"createQueryDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"attestationData1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"attestationData2\",\"type\":\"bytes\"}],\"name\":\"createQueryDisputeConflict\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputePeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"relatedDisputeId\",\"type\":\"bytes32\"},{\"internalType\":\"enum IDisputeManager.DisputeType\",\"name\":\"disputeType\",\"type\":\"uint8\"},{\"internalType\":\"enum IDisputeManager.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"drawDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"internalType\":\"struct Attestation.Receipt\",\"name\":\"receipt\",\"type\":\"tuple\"}],\"name\":\"encodeReceipt\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fishermanRewardCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"getAttestationIndexer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputePeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getStakeSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"fishermanRewardCut_\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxSlashingCut_\",\"type\":\"uint32\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"isDisputeCreated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSlashingCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"rejectDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"}],\"name\":\"setArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"setDisputeDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"}],\"name\":\"setDisputePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"fishermanRewardCut_\",\"type\":\"uint32\"}],\"name\":\"setFishermanRewardCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxSlashingCut_\",\"type\":\"uint32\"}],\"name\":\"setMaxSlashingCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"}],\"name\":\"setSubgraphService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subgraphService\",\"outputs\":[{\"internalType\":\"contract ISubgraphService\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"params\":{\"a\":\"The first value in the multiplication.\",\"b\":\"The second value in the multiplication.\"}}]},\"events\":{\"ArbitratorSet(address)\":{\"params\":{\"arbitrator\":\"The address of the arbitrator.\"}},\"DisputeAccepted(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`. The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward.\"},\"DisputeCancelled(bytes32,address,address,uint256)\":{\"details\":\"Emitted when a dispute is cancelled by the fisherman. The event emits the amount `tokens` returned to the fisherman.\"},\"DisputeDepositSet(uint256)\":{\"params\":{\"disputeDeposit\":\"The dispute deposit required to create a dispute.\"}},\"DisputeDrawn(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` used as deposit and returned to the fisherman.\"},\"DisputeLinked(bytes32,bytes32)\":{\"details\":\"Emitted when two disputes are in conflict to link them. This event will be emitted after each DisputeCreated event is emitted for each of the individual disputes.\"},\"DisputePeriodSet(uint64)\":{\"params\":{\"disputePeriod\":\"The dispute period in seconds.\"}},\"DisputeRejected(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` burned from the fisherman deposit.\"},\"FishermanRewardCutSet(uint32)\":{\"params\":{\"fishermanRewardCut\":\"The fisherman reward cut.\"}},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"IndexingDisputeCreated(bytes32,address,address,uint256,address,bytes32,uint256)\":{\"details\":\"Emitted when an indexing dispute is created for `allocationId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"MaxSlashingCutSet(uint32)\":{\"params\":{\"maxSlashingCut\":\"The maximum slashing cut that can be set.\"}},\"QueryDisputeCreated(bytes32,address,address,uint256,bytes32,bytes,uint256)\":{\"details\":\"Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted.\"},\"SubgraphServiceSet(address)\":{\"params\":{\"subgraphService\":\"The address of the subgraph service.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptDispute(bytes32,uint256)\":{\"details\":\"Accept a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be accepted\",\"tokensSlash\":\"Amount of tokens to slash from the indexer\"}},\"areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"params\":{\"attestation1\":\"The first attestation\",\"attestation2\":\"The second attestation\"}},\"cancelDispute(bytes32)\":{\"details\":\"Cancel a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be cancelled\"}},\"constructor\":{\"params\":{\"controller\":\"Address of the controller\"}},\"createIndexingDispute(address,bytes32)\":{\"params\":{\"allocationId\":\"The allocation to dispute\",\"poi\":\"The Proof of Indexing (POI) being disputed\"}},\"createQueryDispute(bytes)\":{\"params\":{\"attestationData\":\"Attestation bytes submitted by the fisherman\"}},\"createQueryDisputeConflict(bytes,bytes)\":{\"params\":{\"attestationData1\":\"First attestation data submitted\",\"attestationData2\":\"Second attestation data submitted\"},\"returns\":{\"_0\":\"DisputeId1, DisputeId2\"}},\"drawDispute(bytes32)\":{\"details\":\"Ignore a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be disregarded\"}},\"encodeReceipt((bytes32,bytes32,bytes32))\":{\"details\":\"Return the message hash used to sign the receipt\",\"params\":{\"receipt\":\"Receipt returned by indexer and submitted by fisherman\"},\"returns\":{\"_0\":\"Message hash used to sign the receipt\"}},\"getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"params\":{\"attestation\":\"Attestation\"},\"returns\":{\"_0\":\"indexer address\"}},\"getDisputePeriod()\":{\"returns\":{\"_0\":\"Dispute period in seconds\"}},\"getStakeSnapshot(address)\":{\"params\":{\"indexer\":\"The indexer address\"}},\"getVerifierCut()\":{\"returns\":{\"_0\":\"Verifier cut in percentage (ppm)\"}},\"initialize(address,uint64,uint256,uint32,uint32)\":{\"params\":{\"arbitrator\":\"Arbitrator role\",\"disputeDeposit\":\"Deposit required to create a Dispute\",\"disputePeriod\":\"Dispute period in seconds\",\"fishermanRewardCut_\":\"Percent of slashed funds for fisherman (ppm)\",\"maxSlashingCut_\":\"Maximum percentage of indexer stake that can be slashed (ppm)\"}},\"isDisputeCreated(bytes32)\":{\"details\":\"Return if dispute with Id `disputeId` exists\",\"params\":{\"disputeId\":\"True if dispute already exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"rejectDispute(bytes32)\":{\"details\":\"Reject a dispute with Id `disputeId`\",\"params\":{\"disputeId\":\"Id of the dispute to be rejected\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setArbitrator(address)\":{\"details\":\"Update the arbitrator to `_arbitrator`\",\"params\":{\"arbitrator\":\"The address of the arbitration contract or party\"}},\"setDisputeDeposit(uint256)\":{\"details\":\"Update the dispute deposit to `_disputeDeposit` Graph Tokens\",\"params\":{\"disputeDeposit\":\"The dispute deposit in Graph Tokens\"}},\"setDisputePeriod(uint64)\":{\"details\":\"Update the dispute period to `_disputePeriod` in seconds\",\"params\":{\"disputePeriod\":\"Dispute period in seconds\"}},\"setFishermanRewardCut(uint32)\":{\"details\":\"Update the reward percentage to `_percentage`\",\"params\":{\"fishermanRewardCut_\":\"Reward as a percentage of indexer stake\"}},\"setMaxSlashingCut(uint32)\":{\"params\":{\"maxSlashingCut_\":\"Max percentage slashing for disputes\"}},\"setSubgraphService(address)\":{\"details\":\"Update the subgraph service to `_subgraphService`\",\"params\":{\"subgraphService\":\"The address of the subgraph service contract\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"DisputeManager\",\"version\":1},\"userdoc\":{\"errors\":{\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"notice\":\"Thrown when no value in a multiplication is in PPM.\"}]},\"events\":{\"ArbitratorSet(address)\":{\"notice\":\"Emitted when arbitrator is set.\"},\"DisputeDepositSet(uint256)\":{\"notice\":\"Emitted when dispute deposit is set.\"},\"DisputePeriodSet(uint64)\":{\"notice\":\"Emitted when dispute period is set.\"},\"FishermanRewardCutSet(uint32)\":{\"notice\":\"Emitted when fisherman reward cut is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"MaxSlashingCutSet(uint32)\":{\"notice\":\"Emitted when max slashing cut is set.\"},\"SubgraphServiceSet(address)\":{\"notice\":\"Emitted when subgraph service is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptDispute(bytes32,uint256)\":{\"notice\":\"The arbitrator accepts a dispute as being valid. This function will revert if the indexer is not slashable, whether because it does not have any stake available or the slashing percentage is configured to be zero. In those cases a dispute must be resolved using drawDispute or rejectDispute.\"},\"arbitrator()\":{\"notice\":\"The arbitrator is solely in control of arbitrating disputes\"},\"areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"notice\":\"Checks if two attestations are conflicting.\"},\"cancelDispute(bytes32)\":{\"notice\":\"Once the dispute period ends, if the dispute status remains Pending, the fisherman can cancel the dispute and get back their initial deposit.\"},\"constructor\":{\"notice\":\"Contract constructor\"},\"createIndexingDispute(address,bytes32)\":{\"notice\":\"Create an indexing dispute for the arbitrator to resolve. The disputes are created in reference to an allocationId and specifically a POI for that allocation. This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens. Requirements: - fisherman must have previously approved this contract to pull `disputeDeposit` amount of tokens from their balance.\"},\"createQueryDispute(bytes)\":{\"notice\":\"Create a query dispute for the arbitrator to resolve. This function is called by a fisherman and it will pull `disputeDeposit` GRT tokens. * Requirements: - fisherman must have previously approved this contract to pull `disputeDeposit` amount of tokens from their balance.\"},\"createQueryDisputeConflict(bytes,bytes)\":{\"notice\":\"Create query disputes for two conflicting attestations. A conflicting attestation is a proof presented by two different indexers where for the same request on a subgraph the response is different. For this type of dispute the fisherman is not required to present a deposit as one of the attestation is considered to be right. Two linked disputes will be created and if the arbitrator resolve one, the other one will be automatically resolved.\"},\"disputeDeposit()\":{\"notice\":\"Deposit required to create a Dispute\"},\"disputePeriod()\":{\"notice\":\"dispute period in seconds\"},\"disputes(bytes32)\":{\"notice\":\"List of disputes created\"},\"drawDispute(bytes32)\":{\"notice\":\"The arbitrator draws dispute.\"},\"encodeReceipt((bytes32,bytes32,bytes32))\":{\"notice\":\"Get the message hash that a indexer used to sign the receipt. Encodes a receipt using a domain separator, as described on https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification.\"},\"fishermanRewardCut()\":{\"notice\":\"Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM.\"},\"getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))\":{\"notice\":\"Returns the indexer that signed an attestation.\"},\"getDisputePeriod()\":{\"notice\":\"Get the dispute period.\"},\"getStakeSnapshot(address)\":{\"notice\":\"Get the stake snapshot for an indexer.\"},\"getVerifierCut()\":{\"notice\":\"Get the verifier cut.\"},\"initialize(address,uint64,uint256,uint32,uint32)\":{\"notice\":\"Initialize this contract.\"},\"isDisputeCreated(bytes32)\":{\"notice\":\"Return whether a dispute exists or not.\"},\"maxSlashingCut()\":{\"notice\":\"Maximum percentage of indexer stake that can be slashed on a dispute. In PPM.\"},\"rejectDispute(bytes32)\":{\"notice\":\"The arbitrator rejects a dispute as being invalid.\"},\"setArbitrator(address)\":{\"notice\":\"Set the arbitrator address.\"},\"setDisputeDeposit(uint256)\":{\"notice\":\"Set the dispute deposit required to create a dispute.\"},\"setDisputePeriod(uint64)\":{\"notice\":\"Set the dispute period.\"},\"setFishermanRewardCut(uint32)\":{\"notice\":\"Set the percent reward that the fisherman gets when slashing occurs.\"},\"setMaxSlashingCut(uint32)\":{\"notice\":\"Set the maximum percentage that can be used for slashing indexers.\"},\"setSubgraphService(address)\":{\"notice\":\"Set the subgraph service address.\"},\"subgraphService()\":{\"notice\":\"The Subgraph Service contract address\"}},\"notice\":\"Provides a way to permissionlessly create disputes for incorrect behavior in the Subgraph Service. There are two types of disputes that can be created: Query disputes and Indexing disputes. Query Disputes: Graph nodes receive queries and return responses with signed receipts called attestations. An attestation can be disputed if the consumer thinks the query response was invalid. Indexers use the derived private key for an allocation to sign attestations. Indexing Disputes: Indexers present a Proof of Indexing (POI) when they close allocations to prove they were indexing a subgraph. The Staking contract emits that proof with the format keccak256(indexer.address, POI). Any fisherman can dispute the validity of a POI by submitting a dispute to this contract along with a deposit. Arbitration: Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated to a EOA or DAO.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/DisputeManager.sol\":\"DisputeManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":{\"keccak256\":\"0x7bd336193785ed6f09a3bd847f9208f64aa9b87ad67c40838d00fec41bb153d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d96d83cdb9bbb567e4eafac8bdef3ff6bdaf426338baf76bae277c11afb33cee\",\"dweb:/ipfs/QmNjr4PiJ76Wc5mFqa9H88BjsEMrUfy1jiftNHYTgd6Mp5\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/MathUtils.sol\":{\"keccak256\":\"0xfb077625fde8c7bb17ba4674956099673bd144546d90d2a91a8463d17b625b0e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://6ed606a9a5652778589ae03495af5c344fed262157dd372d8c0e1757c80713b0\",\"dweb:/ipfs/QmTePK9JT74GsWj4rxL2H7hUyuM3LeMrnojLvehU8yiD5r\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/DisputeManager.sol\":{\"keccak256\":\"0x4d8936e9370d025aedeaac856c11dc15f6fbd43e59a713d6a3b679aea5588d05\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://3696d5f3084bf697cf27a78e1f8dd9b451a63ee853946c8cb7916d91ae7180cb\",\"dweb:/ipfs/QmSJV3D56pfMEa47Hxet2nu6PpYazHojXE1DHvuzEfVbn6\"]},\"contracts/DisputeManagerStorage.sol\":{\"keccak256\":\"0x0b9007663146b3feed1e671a5a28b3c99aeba2c29b0aefa7be39c7dad4347e05\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8019924a92649c8ac72ba83c08869dbce2a67f969f4dfb02113a1713bce6af6c\",\"dweb:/ipfs/QmUGCnj8cB3ccQAVXuG1mM1h7eGiD66zMHn9NaLbq7atz1\"]},\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/AttestationManager.sol\":{\"keccak256\":\"0xb50da53c59205cf06bec2263238d89d6df6d72522a1e555bfe2c3ca8558c8f88\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://18241c6b621d825234a62dc08a7f7e87b2e3e23caa5f618a74a1c48cde46052e\",\"dweb:/ipfs/QmWvo16uoasqBMVVLr557gyMsCq2Nts7EakgkdwJZuRHiF\"]},\"contracts/utilities/AttestationManagerStorage.sol\":{\"keccak256\":\"0xc14058d90b97806df0f43acfce6bc984c17ded00511ea9d7dd559d897fed7cf7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://df851043d7e2b5f0eaa611141cbc2b594c3ece4ba4e7f040215095d7bdef7ea0\",\"dweb:/ipfs/Qmf5PBxRP4dCtPonNdeoHrgmCYZDogzx4vMEsLM3h5JQDs\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 13231, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "_domainSeparator", - "offset": 0, - "slot": "0", - "type": "t_bytes32" - }, - { - "astId": 13236, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 9448, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "subgraphService", - "offset": 0, - "slot": "51", - "type": "t_contract(ISubgraphService)11280" - }, - { - "astId": 9451, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "arbitrator", - "offset": 0, - "slot": "52", - "type": "t_address" - }, - { - "astId": 9454, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "disputePeriod", - "offset": 20, - "slot": "52", - "type": "t_uint64" - }, - { - "astId": 9457, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "disputeDeposit", - "offset": 0, - "slot": "53", - "type": "t_uint256" - }, - { - "astId": 9460, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "fishermanRewardCut", - "offset": 0, - "slot": "54", - "type": "t_uint32" - }, - { - "astId": 9463, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "maxSlashingCut", - "offset": 4, - "slot": "54", - "type": "t_uint32" - }, - { - "astId": 9469, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "disputes", - "offset": 0, - "slot": "55", - "type": "t_mapping(t_bytes32,t_struct(Dispute)10738_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(ISubgraphService)11280": { - "encoding": "inplace", - "label": "contract ISubgraphService", - "numberOfBytes": "20" - }, - "t_enum(DisputeStatus)10718": { - "encoding": "inplace", - "label": "enum IDisputeManager.DisputeStatus", - "numberOfBytes": "1" - }, - "t_enum(DisputeType)10710": { - "encoding": "inplace", - "label": "enum IDisputeManager.DisputeType", - "numberOfBytes": "1" - }, - "t_mapping(t_bytes32,t_struct(Dispute)10738_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct IDisputeManager.Dispute)", - "numberOfBytes": "32", - "value": "t_struct(Dispute)10738_storage" - }, - "t_struct(Dispute)10738_storage": { - "encoding": "inplace", - "label": "struct IDisputeManager.Dispute", - "members": [ - { - "astId": 10721, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "indexer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 10723, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "fisherman", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 10725, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "deposit", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 10727, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "relatedDisputeId", - "offset": 0, - "slot": "3", - "type": "t_bytes32" - }, - { - "astId": 10730, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "disputeType", - "offset": 0, - "slot": "4", - "type": "t_enum(DisputeType)10710" - }, - { - "astId": 10733, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "status", - "offset": 1, - "slot": "4", - "type": "t_enum(DisputeStatus)10718" - }, - { - "astId": 10735, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "createdAt", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 10737, - "contract": "contracts/DisputeManager.sol:DisputeManager", - "label": "stakeSnapshot", - "offset": 0, - "slot": "6", - "type": "t_uint256" - } - ], - "numberOfBytes": "224" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - } - } - } - } - }, - "contracts/DisputeManagerStorage.sol": { - "DisputeManagerV1Storage": { - "abi": [ - { - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputeDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disputePeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "disputes", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "internalType": "uint256", - "name": "deposit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "relatedDisputeId", - "type": "bytes32" - }, - { - "internalType": "enum IDisputeManager.DisputeType", - "name": "disputeType", - "type": "uint8" - }, - { - "internalType": "enum IDisputeManager.DisputeStatus", - "name": "status", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fishermanRewardCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxSlashingCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "subgraphService", - "outputs": [ - { - "internalType": "contract ISubgraphService", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "arbitrator()": "6cc6cde1", - "disputeDeposit()": "29e03ff1", - "disputePeriod()": "5bf31d4d", - "disputes(bytes32)": "11be1997", - "fishermanRewardCut()": "902a4938", - "maxSlashingCut()": "0533e1ba", - "subgraphService()": "26058249" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputePeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"relatedDisputeId\",\"type\":\"bytes32\"},{\"internalType\":\"enum IDisputeManager.DisputeType\",\"name\":\"disputeType\",\"type\":\"uint8\"},{\"internalType\":\"enum IDisputeManager.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fishermanRewardCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSlashingCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subgraphService\",\"outputs\":[{\"internalType\":\"contract ISubgraphService\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"arbitrator()\":{\"notice\":\"The arbitrator is solely in control of arbitrating disputes\"},\"disputeDeposit()\":{\"notice\":\"Deposit required to create a Dispute\"},\"disputePeriod()\":{\"notice\":\"dispute period in seconds\"},\"disputes(bytes32)\":{\"notice\":\"List of disputes created\"},\"fishermanRewardCut()\":{\"notice\":\"Percentage of indexer slashed funds to assign as a reward to fisherman in successful dispute. In PPM.\"},\"maxSlashingCut()\":{\"notice\":\"Maximum percentage of indexer stake that can be slashed on a dispute. In PPM.\"},\"subgraphService()\":{\"notice\":\"The Subgraph Service contract address\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/DisputeManagerStorage.sol\":\"DisputeManagerV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/DisputeManagerStorage.sol\":{\"keccak256\":\"0x0b9007663146b3feed1e671a5a28b3c99aeba2c29b0aefa7be39c7dad4347e05\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8019924a92649c8ac72ba83c08869dbce2a67f969f4dfb02113a1713bce6af6c\",\"dweb:/ipfs/QmUGCnj8cB3ccQAVXuG1mM1h7eGiD66zMHn9NaLbq7atz1\"]},\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 9448, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "subgraphService", - "offset": 0, - "slot": "0", - "type": "t_contract(ISubgraphService)11280" - }, - { - "astId": 9451, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "arbitrator", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 9454, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "disputePeriod", - "offset": 20, - "slot": "1", - "type": "t_uint64" - }, - { - "astId": 9457, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "disputeDeposit", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 9460, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "fishermanRewardCut", - "offset": 0, - "slot": "3", - "type": "t_uint32" - }, - { - "astId": 9463, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "maxSlashingCut", - "offset": 4, - "slot": "3", - "type": "t_uint32" - }, - { - "astId": 9469, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "disputes", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_bytes32,t_struct(Dispute)10738_storage)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_contract(ISubgraphService)11280": { - "encoding": "inplace", - "label": "contract ISubgraphService", - "numberOfBytes": "20" - }, - "t_enum(DisputeStatus)10718": { - "encoding": "inplace", - "label": "enum IDisputeManager.DisputeStatus", - "numberOfBytes": "1" - }, - "t_enum(DisputeType)10710": { - "encoding": "inplace", - "label": "enum IDisputeManager.DisputeType", - "numberOfBytes": "1" - }, - "t_mapping(t_bytes32,t_struct(Dispute)10738_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct IDisputeManager.Dispute)", - "numberOfBytes": "32", - "value": "t_struct(Dispute)10738_storage" - }, - "t_struct(Dispute)10738_storage": { - "encoding": "inplace", - "label": "struct IDisputeManager.Dispute", - "members": [ - { - "astId": 10721, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "indexer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 10723, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "fisherman", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 10725, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "deposit", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 10727, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "relatedDisputeId", - "offset": 0, - "slot": "3", - "type": "t_bytes32" - }, - { - "astId": 10730, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "disputeType", - "offset": 0, - "slot": "4", - "type": "t_enum(DisputeType)10710" - }, - { - "astId": 10733, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "status", - "offset": 1, - "slot": "4", - "type": "t_enum(DisputeStatus)10718" - }, - { - "astId": 10735, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "createdAt", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 10737, - "contract": "contracts/DisputeManagerStorage.sol:DisputeManagerV1Storage", - "label": "stakeSnapshot", - "offset": 0, - "slot": "6", - "type": "t_uint256" - } - ], - "numberOfBytes": "224" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - } - } - } - } - }, - "contracts/SubgraphService.sol": { - "SubgraphService": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "internalType": "address", - "name": "disputeManager", - "type": "address" - }, - { - "internalType": "address", - "name": "tapCollector", - "type": "address" - }, - { - "internalType": "address", - "name": "curation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - } - ], - "name": "AllocationClosed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationDoesNotExist", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationManagerAllocationClosed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationManagerAllocationSameSize", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationManagerInvalidAllocationProof", - "type": "error" - }, - { - "inputs": [], - "name": "AllocationManagerInvalidZeroAllocationId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "DataServiceFeesClaimNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "DataServiceFeesZeroTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "DataServicePausableNotPauseGuardian", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "disputeManager", - "type": "address" - } - ], - "name": "DirectoryNotDisputeManager", - "type": "error" - }, - { - "inputs": [], - "name": "ECDSAInvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "ECDSAInvalidSignatureLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "ECDSAInvalidSignatureS", - "type": "error" - }, - { - "inputs": [], - "name": "EnforcedPause", - "type": "error" - }, - { - "inputs": [], - "name": "ExpectedPause", - "type": "error" - }, - { - "inputs": [], - "name": "FailedInnerCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "LegacyAllocationAlreadyMigrated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "LegacyAllocationExists", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListEmptyList", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidIterations", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListInvalidZeroId", - "type": "error" - }, - { - "inputs": [], - "name": "LinkedListMaxElementsExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "b", - "type": "uint256" - } - ], - "name": "PPMMathInvalidMulPPM", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidRange", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionManagerInvalidValue", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ProvisionManagerNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionManagerProvisionNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokensAvailable", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensRequired", - "type": "uint256" - } - ], - "name": "ProvisionTrackerInsufficientTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceAllocationIsAltruistic", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceAllocationNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceCannotForceCloseAllocation", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceEmptyGeohash", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceEmptyUrl", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balanceBefore", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "balanceAfter", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "SubgraphServiceInconsistentCollection", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceIndexerAlreadyRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "providedIndexer", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedIndexer", - "type": "address" - } - ], - "name": "SubgraphServiceIndexerMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "SubgraphServiceIndexerNotRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "SubgraphServiceInvalidCurationCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - } - ], - "name": "SubgraphServiceInvalidPaymentType", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "ravIndexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationIndexer", - "type": "address" - } - ], - "name": "SubgraphServiceInvalidRAV", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationClosed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newTokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldTokens", - "type": "uint256" - } - ], - "name": "AllocationResized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "CurationCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "ratio", - "type": "uint32" - } - ], - "name": "DelegationRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensIndexerRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDelegationRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "currentEpoch", - "type": "uint256" - } - ], - "name": "IndexingRewardsCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "LegacyAllocationMigrated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxPOIStaleness", - "type": "uint256" - } - ], - "name": "MaxPOIStalenessSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "PauseGuardianSet", - "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": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "min", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "max", - "type": "uint256" - } - ], - "name": "ProvisionTokensRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensCollected", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensCurators", - "type": "uint256" - } - ], - "name": "QueryFeesCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "rewardsDestination", - "type": "address" - } - ], - "name": "RewardsDestinationSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unlockTimestamp", - "type": "uint256" - } - ], - "name": "StakeClaimLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - } - ], - "name": "StakeClaimReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "claimsCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReleased", - "type": "uint256" - } - ], - "name": "StakeClaimsReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "ratio", - "type": "uint256" - } - ], - "name": "StakeToFeesRatioSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "subgraphService", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "disputeManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "tapCollector", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "curation", - "type": "address" - } - ], - "name": "SubgraphServiceDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "min", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "max", - "type": "uint64" - } - ], - "name": "ThawingPeriodRangeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "min", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "max", - "type": "uint32" - } - ], - "name": "VerifierCutRangeSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "allocationProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "allocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastPOIPresentedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "claims", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "nextClaim", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "claimsLists", - "outputs": [ - { - "internalType": "bytes32", - "name": "head", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tail", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "curationFeesCut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "encodeAllocationProof", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "feesProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "forceCloseAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastPOIPresentedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "internalType": "struct Allocation.State", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocationData", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getLegacyAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "internalType": "struct LegacyAllocation.State", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "getSubgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "indexers", - "outputs": [ - { - "internalType": "uint256", - "name": "registeredAt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "geoHash", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "minimumProvisionTokens", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "maximumDelegationRatio", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "stakeToFeesRatio", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "isActiveAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "isOverAllocated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "isStaleAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "legacyAllocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxPOIStaleness", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maximumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentID", - "type": "bytes32" - } - ], - "name": "migrateLegacyAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "minimumProvisionTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumThawingPeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "results", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - } - ], - "name": "pauseGuardians", - "outputs": [ - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numClaimsToRelease", - "type": "uint256" - } - ], - "name": "releaseStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "resizeAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "rewardsDestination", - "outputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "setCurationCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "delegationRatio", - "type": "uint32" - } - ], - "name": "setDelegationRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxPOIStaleness", - "type": "uint256" - } - ], - "name": "setMaxPOIStaleness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "minimumProvisionTokens", - "type": "uint256" - } - ], - "name": "setMinimumProvisionTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setPauseGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "rewardsDestination", - "type": "address" - } - ], - "name": "setRewardsDestination", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "stakeToFeesRatio_", - "type": "uint256" - } - ], - "name": "setStakeToFeesRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stakeToFeesRatio", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "subgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": { - "@_13349": { - "entryPoint": null, - "id": 13349, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_4520": { - "entryPoint": null, - "id": 4520, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_629": { - "entryPoint": null, - "id": 629, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_9595": { - "entryPoint": null, - "id": 9595, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_disableInitializers_5070": { - "entryPoint": 1139, - "id": 5070, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getContractFromController_4652": { - "entryPoint": 965, - "id": 4652, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_getInitializableStorage_5101": { - "entryPoint": null, - "id": 5101, - "parameterSlots": 0, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 1317, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 1429, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": { - "entryPoint": 1345, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_encode_tuple_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 8, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 1463, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nativeSrc": "0:3424:62", - "nodeType": "YulBlock", - "src": "0:3424:62", - "statements": [ - { - "nativeSrc": "6:3:62", - "nodeType": "YulBlock", - "src": "6:3:62", - "statements": [] - }, - { - "body": { - "nativeSrc": "74:117:62", - "nodeType": "YulBlock", - "src": "74:117:62", - "statements": [ - { - "nativeSrc": "84:22:62", - "nodeType": "YulAssignment", - "src": "84:22:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "99:6:62", - "nodeType": "YulIdentifier", - "src": "99:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "93:5:62", - "nodeType": "YulIdentifier", - "src": "93:5:62" - }, - "nativeSrc": "93:13:62", - "nodeType": "YulFunctionCall", - "src": "93:13:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "84:5:62", - "nodeType": "YulIdentifier", - "src": "84:5:62" - } - ] - }, - { - "body": { - "nativeSrc": "169:16:62", - "nodeType": "YulBlock", - "src": "169:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "178:1:62", - "nodeType": "YulLiteral", - "src": "178:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "181:1:62", - "nodeType": "YulLiteral", - "src": "181:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "171:6:62", - "nodeType": "YulIdentifier", - "src": "171:6:62" - }, - "nativeSrc": "171:12:62", - "nodeType": "YulFunctionCall", - "src": "171:12:62" - }, - "nativeSrc": "171:12:62", - "nodeType": "YulExpressionStatement", - "src": "171:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "128:5:62", - "nodeType": "YulIdentifier", - "src": "128:5:62" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "139:5:62", - "nodeType": "YulIdentifier", - "src": "139:5:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "154:3:62", - "nodeType": "YulLiteral", - "src": "154:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "159:1:62", - "nodeType": "YulLiteral", - "src": "159:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "150:3:62", - "nodeType": "YulIdentifier", - "src": "150:3:62" - }, - "nativeSrc": "150:11:62", - "nodeType": "YulFunctionCall", - "src": "150:11:62" - }, - { - "kind": "number", - "nativeSrc": "163:1:62", - "nodeType": "YulLiteral", - "src": "163:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "146:3:62", - "nodeType": "YulIdentifier", - "src": "146:3:62" - }, - "nativeSrc": "146:19:62", - "nodeType": "YulFunctionCall", - "src": "146:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "135:3:62", - "nodeType": "YulIdentifier", - "src": "135:3:62" - }, - "nativeSrc": "135:31:62", - "nodeType": "YulFunctionCall", - "src": "135:31:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "125:2:62", - "nodeType": "YulIdentifier", - "src": "125:2:62" - }, - "nativeSrc": "125:42:62", - "nodeType": "YulFunctionCall", - "src": "125:42:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "118:6:62", - "nodeType": "YulIdentifier", - "src": "118:6:62" - }, - "nativeSrc": "118:50:62", - "nodeType": "YulFunctionCall", - "src": "118:50:62" - }, - "nativeSrc": "115:70:62", - "nodeType": "YulIf", - "src": "115:70:62" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nativeSrc": "14:177:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "53:6:62", - "nodeType": "YulTypedName", - "src": "53:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "64:5:62", - "nodeType": "YulTypedName", - "src": "64:5:62", - "type": "" - } - ], - "src": "14:177:62" - }, - { - "body": { - "nativeSrc": "328:332:62", - "nodeType": "YulBlock", - "src": "328:332:62", - "statements": [ - { - "body": { - "nativeSrc": "375:16:62", - "nodeType": "YulBlock", - "src": "375:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "384:1:62", - "nodeType": "YulLiteral", - "src": "384:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "387:1:62", - "nodeType": "YulLiteral", - "src": "387:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "377:6:62", - "nodeType": "YulIdentifier", - "src": "377:6:62" - }, - "nativeSrc": "377:12:62", - "nodeType": "YulFunctionCall", - "src": "377:12:62" - }, - "nativeSrc": "377:12:62", - "nodeType": "YulExpressionStatement", - "src": "377:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "349:7:62", - "nodeType": "YulIdentifier", - "src": "349:7:62" - }, - { - "name": "headStart", - "nativeSrc": "358:9:62", - "nodeType": "YulIdentifier", - "src": "358:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "345:3:62", - "nodeType": "YulIdentifier", - "src": "345:3:62" - }, - "nativeSrc": "345:23:62", - "nodeType": "YulFunctionCall", - "src": "345:23:62" - }, - { - "kind": "number", - "nativeSrc": "370:3:62", - "nodeType": "YulLiteral", - "src": "370:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "341:3:62", - "nodeType": "YulIdentifier", - "src": "341:3:62" - }, - "nativeSrc": "341:33:62", - "nodeType": "YulFunctionCall", - "src": "341:33:62" - }, - "nativeSrc": "338:53:62", - "nodeType": "YulIf", - "src": "338:53:62" - }, - { - "nativeSrc": "400:50:62", - "nodeType": "YulAssignment", - "src": "400:50:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "440:9:62", - "nodeType": "YulIdentifier", - "src": "440:9:62" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nativeSrc": "410:29:62", - "nodeType": "YulIdentifier", - "src": "410:29:62" - }, - "nativeSrc": "410:40:62", - "nodeType": "YulFunctionCall", - "src": "410:40:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "400:6:62", - "nodeType": "YulIdentifier", - "src": "400:6:62" - } - ] - }, - { - "nativeSrc": "459:59:62", - "nodeType": "YulAssignment", - "src": "459:59:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "503:9:62", - "nodeType": "YulIdentifier", - "src": "503:9:62" - }, - { - "kind": "number", - "nativeSrc": "514:2:62", - "nodeType": "YulLiteral", - "src": "514:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "499:3:62", - "nodeType": "YulIdentifier", - "src": "499:3:62" - }, - "nativeSrc": "499:18:62", - "nodeType": "YulFunctionCall", - "src": "499:18:62" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nativeSrc": "469:29:62", - "nodeType": "YulIdentifier", - "src": "469:29:62" - }, - "nativeSrc": "469:49:62", - "nodeType": "YulFunctionCall", - "src": "469:49:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "459:6:62", - "nodeType": "YulIdentifier", - "src": "459:6:62" - } - ] - }, - { - "nativeSrc": "527:59:62", - "nodeType": "YulAssignment", - "src": "527:59:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "571:9:62", - "nodeType": "YulIdentifier", - "src": "571:9:62" - }, - { - "kind": "number", - "nativeSrc": "582:2:62", - "nodeType": "YulLiteral", - "src": "582:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "567:3:62", - "nodeType": "YulIdentifier", - "src": "567:3:62" - }, - "nativeSrc": "567:18:62", - "nodeType": "YulFunctionCall", - "src": "567:18:62" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nativeSrc": "537:29:62", - "nodeType": "YulIdentifier", - "src": "537:29:62" - }, - "nativeSrc": "537:49:62", - "nodeType": "YulFunctionCall", - "src": "537:49:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "527:6:62", - "nodeType": "YulIdentifier", - "src": "527:6:62" - } - ] - }, - { - "nativeSrc": "595:59:62", - "nodeType": "YulAssignment", - "src": "595:59:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "639:9:62", - "nodeType": "YulIdentifier", - "src": "639:9:62" - }, - { - "kind": "number", - "nativeSrc": "650:2:62", - "nodeType": "YulLiteral", - "src": "650:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "635:3:62", - "nodeType": "YulIdentifier", - "src": "635:3:62" - }, - "nativeSrc": "635:18:62", - "nodeType": "YulFunctionCall", - "src": "635:18:62" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nativeSrc": "605:29:62", - "nodeType": "YulIdentifier", - "src": "605:29:62" - }, - "nativeSrc": "605:49:62", - "nodeType": "YulFunctionCall", - "src": "605:49:62" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "595:6:62", - "nodeType": "YulIdentifier", - "src": "595:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory", - "nativeSrc": "196:464:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "270:9:62", - "nodeType": "YulTypedName", - "src": "270:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "281:7:62", - "nodeType": "YulTypedName", - "src": "281:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "293:6:62", - "nodeType": "YulTypedName", - "src": "293:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "301:6:62", - "nodeType": "YulTypedName", - "src": "301:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "309:6:62", - "nodeType": "YulTypedName", - "src": "309:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "317:6:62", - "nodeType": "YulTypedName", - "src": "317:6:62", - "type": "" - } - ], - "src": "196:464:62" - }, - { - "body": { - "nativeSrc": "838:160:62", - "nodeType": "YulBlock", - "src": "838:160:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "855:9:62", - "nodeType": "YulIdentifier", - "src": "855:9:62" - }, - { - "kind": "number", - "nativeSrc": "866:2:62", - "nodeType": "YulLiteral", - "src": "866:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "848:6:62", - "nodeType": "YulIdentifier", - "src": "848:6:62" - }, - "nativeSrc": "848:21:62", - "nodeType": "YulFunctionCall", - "src": "848:21:62" - }, - "nativeSrc": "848:21:62", - "nodeType": "YulExpressionStatement", - "src": "848:21:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "889:9:62", - "nodeType": "YulIdentifier", - "src": "889:9:62" - }, - { - "kind": "number", - "nativeSrc": "900:2:62", - "nodeType": "YulLiteral", - "src": "900:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "885:3:62", - "nodeType": "YulIdentifier", - "src": "885:3:62" - }, - "nativeSrc": "885:18:62", - "nodeType": "YulFunctionCall", - "src": "885:18:62" - }, - { - "kind": "number", - "nativeSrc": "905:2:62", - "nodeType": "YulLiteral", - "src": "905:2:62", - "type": "", - "value": "10" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "878:6:62", - "nodeType": "YulIdentifier", - "src": "878:6:62" - }, - "nativeSrc": "878:30:62", - "nodeType": "YulFunctionCall", - "src": "878:30:62" - }, - "nativeSrc": "878:30:62", - "nodeType": "YulExpressionStatement", - "src": "878:30:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "928:9:62", - "nodeType": "YulIdentifier", - "src": "928:9:62" - }, - { - "kind": "number", - "nativeSrc": "939:2:62", - "nodeType": "YulLiteral", - "src": "939:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "924:3:62", - "nodeType": "YulIdentifier", - "src": "924:3:62" - }, - "nativeSrc": "924:18:62", - "nodeType": "YulFunctionCall", - "src": "924:18:62" - }, - { - "hexValue": "436f6e74726f6c6c6572", - "kind": "string", - "nativeSrc": "944:12:62", - "nodeType": "YulLiteral", - "src": "944:12:62", - "type": "", - "value": "Controller" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "917:6:62", - "nodeType": "YulIdentifier", - "src": "917:6:62" - }, - "nativeSrc": "917:40:62", - "nodeType": "YulFunctionCall", - "src": "917:40:62" - }, - "nativeSrc": "917:40:62", - "nodeType": "YulExpressionStatement", - "src": "917:40:62" - }, - { - "nativeSrc": "966:26:62", - "nodeType": "YulAssignment", - "src": "966:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "978:9:62", - "nodeType": "YulIdentifier", - "src": "978:9:62" - }, - { - "kind": "number", - "nativeSrc": "989:2:62", - "nodeType": "YulLiteral", - "src": "989:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "974:3:62", - "nodeType": "YulIdentifier", - "src": "974:3:62" - }, - "nativeSrc": "974:18:62", - "nodeType": "YulFunctionCall", - "src": "974:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "966:4:62", - "nodeType": "YulIdentifier", - "src": "966:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "665:333:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "815:9:62", - "nodeType": "YulTypedName", - "src": "815:9:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "829:4:62", - "nodeType": "YulTypedName", - "src": "829:4:62", - "type": "" - } - ], - "src": "665:333:62" - }, - { - "body": { - "nativeSrc": "1272:520:62", - "nodeType": "YulBlock", - "src": "1272:520:62", - "statements": [ - { - "nativeSrc": "1282:27:62", - "nodeType": "YulAssignment", - "src": "1282:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1294:9:62", - "nodeType": "YulIdentifier", - "src": "1294:9:62" - }, - { - "kind": "number", - "nativeSrc": "1305:3:62", - "nodeType": "YulLiteral", - "src": "1305:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1290:3:62", - "nodeType": "YulIdentifier", - "src": "1290:3:62" - }, - "nativeSrc": "1290:19:62", - "nodeType": "YulFunctionCall", - "src": "1290:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "1282:4:62", - "nodeType": "YulIdentifier", - "src": "1282:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1325:9:62", - "nodeType": "YulIdentifier", - "src": "1325:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "1340:6:62", - "nodeType": "YulIdentifier", - "src": "1340:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1356:3:62", - "nodeType": "YulLiteral", - "src": "1356:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1361:1:62", - "nodeType": "YulLiteral", - "src": "1361:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1352:3:62", - "nodeType": "YulIdentifier", - "src": "1352:3:62" - }, - "nativeSrc": "1352:11:62", - "nodeType": "YulFunctionCall", - "src": "1352:11:62" - }, - { - "kind": "number", - "nativeSrc": "1365:1:62", - "nodeType": "YulLiteral", - "src": "1365:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1348:3:62", - "nodeType": "YulIdentifier", - "src": "1348:3:62" - }, - "nativeSrc": "1348:19:62", - "nodeType": "YulFunctionCall", - "src": "1348:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1336:3:62", - "nodeType": "YulIdentifier", - "src": "1336:3:62" - }, - "nativeSrc": "1336:32:62", - "nodeType": "YulFunctionCall", - "src": "1336:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1318:6:62", - "nodeType": "YulIdentifier", - "src": "1318:6:62" - }, - "nativeSrc": "1318:51:62", - "nodeType": "YulFunctionCall", - "src": "1318:51:62" - }, - "nativeSrc": "1318:51:62", - "nodeType": "YulExpressionStatement", - "src": "1318:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1389:9:62", - "nodeType": "YulIdentifier", - "src": "1389:9:62" - }, - { - "kind": "number", - "nativeSrc": "1400:2:62", - "nodeType": "YulLiteral", - "src": "1400:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1385:3:62", - "nodeType": "YulIdentifier", - "src": "1385:3:62" - }, - "nativeSrc": "1385:18:62", - "nodeType": "YulFunctionCall", - "src": "1385:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "1409:6:62", - "nodeType": "YulIdentifier", - "src": "1409:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1425:3:62", - "nodeType": "YulLiteral", - "src": "1425:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1430:1:62", - "nodeType": "YulLiteral", - "src": "1430:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1421:3:62", - "nodeType": "YulIdentifier", - "src": "1421:3:62" - }, - "nativeSrc": "1421:11:62", - "nodeType": "YulFunctionCall", - "src": "1421:11:62" - }, - { - "kind": "number", - "nativeSrc": "1434:1:62", - "nodeType": "YulLiteral", - "src": "1434:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1417:3:62", - "nodeType": "YulIdentifier", - "src": "1417:3:62" - }, - "nativeSrc": "1417:19:62", - "nodeType": "YulFunctionCall", - "src": "1417:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1405:3:62", - "nodeType": "YulIdentifier", - "src": "1405:3:62" - }, - "nativeSrc": "1405:32:62", - "nodeType": "YulFunctionCall", - "src": "1405:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1378:6:62", - "nodeType": "YulIdentifier", - "src": "1378:6:62" - }, - "nativeSrc": "1378:60:62", - "nodeType": "YulFunctionCall", - "src": "1378:60:62" - }, - "nativeSrc": "1378:60:62", - "nodeType": "YulExpressionStatement", - "src": "1378:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1458:9:62", - "nodeType": "YulIdentifier", - "src": "1458:9:62" - }, - { - "kind": "number", - "nativeSrc": "1469:2:62", - "nodeType": "YulLiteral", - "src": "1469:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1454:3:62", - "nodeType": "YulIdentifier", - "src": "1454:3:62" - }, - "nativeSrc": "1454:18:62", - "nodeType": "YulFunctionCall", - "src": "1454:18:62" - }, - { - "arguments": [ - { - "name": "value2", - "nativeSrc": "1478:6:62", - "nodeType": "YulIdentifier", - "src": "1478:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1494:3:62", - "nodeType": "YulLiteral", - "src": "1494:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1499:1:62", - "nodeType": "YulLiteral", - "src": "1499:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1490:3:62", - "nodeType": "YulIdentifier", - "src": "1490:3:62" - }, - "nativeSrc": "1490:11:62", - "nodeType": "YulFunctionCall", - "src": "1490:11:62" - }, - { - "kind": "number", - "nativeSrc": "1503:1:62", - "nodeType": "YulLiteral", - "src": "1503:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1486:3:62", - "nodeType": "YulIdentifier", - "src": "1486:3:62" - }, - "nativeSrc": "1486:19:62", - "nodeType": "YulFunctionCall", - "src": "1486:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1474:3:62", - "nodeType": "YulIdentifier", - "src": "1474:3:62" - }, - "nativeSrc": "1474:32:62", - "nodeType": "YulFunctionCall", - "src": "1474:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1447:6:62", - "nodeType": "YulIdentifier", - "src": "1447:6:62" - }, - "nativeSrc": "1447:60:62", - "nodeType": "YulFunctionCall", - "src": "1447:60:62" - }, - "nativeSrc": "1447:60:62", - "nodeType": "YulExpressionStatement", - "src": "1447:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1527:9:62", - "nodeType": "YulIdentifier", - "src": "1527:9:62" - }, - { - "kind": "number", - "nativeSrc": "1538:2:62", - "nodeType": "YulLiteral", - "src": "1538:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1523:3:62", - "nodeType": "YulIdentifier", - "src": "1523:3:62" - }, - "nativeSrc": "1523:18:62", - "nodeType": "YulFunctionCall", - "src": "1523:18:62" - }, - { - "arguments": [ - { - "name": "value3", - "nativeSrc": "1547:6:62", - "nodeType": "YulIdentifier", - "src": "1547:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1563:3:62", - "nodeType": "YulLiteral", - "src": "1563:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1568:1:62", - "nodeType": "YulLiteral", - "src": "1568:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1559:3:62", - "nodeType": "YulIdentifier", - "src": "1559:3:62" - }, - "nativeSrc": "1559:11:62", - "nodeType": "YulFunctionCall", - "src": "1559:11:62" - }, - { - "kind": "number", - "nativeSrc": "1572:1:62", - "nodeType": "YulLiteral", - "src": "1572:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1555:3:62", - "nodeType": "YulIdentifier", - "src": "1555:3:62" - }, - "nativeSrc": "1555:19:62", - "nodeType": "YulFunctionCall", - "src": "1555:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1543:3:62", - "nodeType": "YulIdentifier", - "src": "1543:3:62" - }, - "nativeSrc": "1543:32:62", - "nodeType": "YulFunctionCall", - "src": "1543:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1516:6:62", - "nodeType": "YulIdentifier", - "src": "1516:6:62" - }, - "nativeSrc": "1516:60:62", - "nodeType": "YulFunctionCall", - "src": "1516:60:62" - }, - "nativeSrc": "1516:60:62", - "nodeType": "YulExpressionStatement", - "src": "1516:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1596:9:62", - "nodeType": "YulIdentifier", - "src": "1596:9:62" - }, - { - "kind": "number", - "nativeSrc": "1607:3:62", - "nodeType": "YulLiteral", - "src": "1607:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1592:3:62", - "nodeType": "YulIdentifier", - "src": "1592:3:62" - }, - "nativeSrc": "1592:19:62", - "nodeType": "YulFunctionCall", - "src": "1592:19:62" - }, - { - "arguments": [ - { - "name": "value4", - "nativeSrc": "1617:6:62", - "nodeType": "YulIdentifier", - "src": "1617:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1633:3:62", - "nodeType": "YulLiteral", - "src": "1633:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1638:1:62", - "nodeType": "YulLiteral", - "src": "1638:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1629:3:62", - "nodeType": "YulIdentifier", - "src": "1629:3:62" - }, - "nativeSrc": "1629:11:62", - "nodeType": "YulFunctionCall", - "src": "1629:11:62" - }, - { - "kind": "number", - "nativeSrc": "1642:1:62", - "nodeType": "YulLiteral", - "src": "1642:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1625:3:62", - "nodeType": "YulIdentifier", - "src": "1625:3:62" - }, - "nativeSrc": "1625:19:62", - "nodeType": "YulFunctionCall", - "src": "1625:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1613:3:62", - "nodeType": "YulIdentifier", - "src": "1613:3:62" - }, - "nativeSrc": "1613:32:62", - "nodeType": "YulFunctionCall", - "src": "1613:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1585:6:62", - "nodeType": "YulIdentifier", - "src": "1585:6:62" - }, - "nativeSrc": "1585:61:62", - "nodeType": "YulFunctionCall", - "src": "1585:61:62" - }, - "nativeSrc": "1585:61:62", - "nodeType": "YulExpressionStatement", - "src": "1585:61:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1666:9:62", - "nodeType": "YulIdentifier", - "src": "1666:9:62" - }, - { - "kind": "number", - "nativeSrc": "1677:3:62", - "nodeType": "YulLiteral", - "src": "1677:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1662:3:62", - "nodeType": "YulIdentifier", - "src": "1662:3:62" - }, - "nativeSrc": "1662:19:62", - "nodeType": "YulFunctionCall", - "src": "1662:19:62" - }, - { - "arguments": [ - { - "name": "value5", - "nativeSrc": "1687:6:62", - "nodeType": "YulIdentifier", - "src": "1687:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1703:3:62", - "nodeType": "YulLiteral", - "src": "1703:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1708:1:62", - "nodeType": "YulLiteral", - "src": "1708:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1699:3:62", - "nodeType": "YulIdentifier", - "src": "1699:3:62" - }, - "nativeSrc": "1699:11:62", - "nodeType": "YulFunctionCall", - "src": "1699:11:62" - }, - { - "kind": "number", - "nativeSrc": "1712:1:62", - "nodeType": "YulLiteral", - "src": "1712:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1695:3:62", - "nodeType": "YulIdentifier", - "src": "1695:3:62" - }, - "nativeSrc": "1695:19:62", - "nodeType": "YulFunctionCall", - "src": "1695:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1683:3:62", - "nodeType": "YulIdentifier", - "src": "1683:3:62" - }, - "nativeSrc": "1683:32:62", - "nodeType": "YulFunctionCall", - "src": "1683:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1655:6:62", - "nodeType": "YulIdentifier", - "src": "1655:6:62" - }, - "nativeSrc": "1655:61:62", - "nodeType": "YulFunctionCall", - "src": "1655:61:62" - }, - "nativeSrc": "1655:61:62", - "nodeType": "YulExpressionStatement", - "src": "1655:61:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1736:9:62", - "nodeType": "YulIdentifier", - "src": "1736:9:62" - }, - { - "kind": "number", - "nativeSrc": "1747:3:62", - "nodeType": "YulLiteral", - "src": "1747:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1732:3:62", - "nodeType": "YulIdentifier", - "src": "1732:3:62" - }, - "nativeSrc": "1732:19:62", - "nodeType": "YulFunctionCall", - "src": "1732:19:62" - }, - { - "arguments": [ - { - "name": "value6", - "nativeSrc": "1757:6:62", - "nodeType": "YulIdentifier", - "src": "1757:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1773:3:62", - "nodeType": "YulLiteral", - "src": "1773:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1778:1:62", - "nodeType": "YulLiteral", - "src": "1778:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1769:3:62", - "nodeType": "YulIdentifier", - "src": "1769:3:62" - }, - "nativeSrc": "1769:11:62", - "nodeType": "YulFunctionCall", - "src": "1769:11:62" - }, - { - "kind": "number", - "nativeSrc": "1782:1:62", - "nodeType": "YulLiteral", - "src": "1782:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1765:3:62", - "nodeType": "YulIdentifier", - "src": "1765:3:62" - }, - "nativeSrc": "1765:19:62", - "nodeType": "YulFunctionCall", - "src": "1765:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1753:3:62", - "nodeType": "YulIdentifier", - "src": "1753:3:62" - }, - "nativeSrc": "1753:32:62", - "nodeType": "YulFunctionCall", - "src": "1753:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1725:6:62", - "nodeType": "YulIdentifier", - "src": "1725:6:62" - }, - "nativeSrc": "1725:61:62", - "nodeType": "YulFunctionCall", - "src": "1725:61:62" - }, - "nativeSrc": "1725:61:62", - "nodeType": "YulExpressionStatement", - "src": "1725:61:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed", - "nativeSrc": "1003:789:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1193:9:62", - "nodeType": "YulTypedName", - "src": "1193:9:62", - "type": "" - }, - { - "name": "value6", - "nativeSrc": "1204:6:62", - "nodeType": "YulTypedName", - "src": "1204:6:62", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "1212:6:62", - "nodeType": "YulTypedName", - "src": "1212:6:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "1220:6:62", - "nodeType": "YulTypedName", - "src": "1220:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "1228:6:62", - "nodeType": "YulTypedName", - "src": "1228:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "1236:6:62", - "nodeType": "YulTypedName", - "src": "1236:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "1244:6:62", - "nodeType": "YulTypedName", - "src": "1244:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1252:6:62", - "nodeType": "YulTypedName", - "src": "1252:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "1263:4:62", - "nodeType": "YulTypedName", - "src": "1263:4:62", - "type": "" - } - ], - "src": "1003:789:62" - }, - { - "body": { - "nativeSrc": "1982:310:62", - "nodeType": "YulBlock", - "src": "1982:310:62", - "statements": [ - { - "nativeSrc": "1992:27:62", - "nodeType": "YulAssignment", - "src": "1992:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2004:9:62", - "nodeType": "YulIdentifier", - "src": "2004:9:62" - }, - { - "kind": "number", - "nativeSrc": "2015:3:62", - "nodeType": "YulLiteral", - "src": "2015:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2000:3:62", - "nodeType": "YulIdentifier", - "src": "2000:3:62" - }, - "nativeSrc": "2000:19:62", - "nodeType": "YulFunctionCall", - "src": "2000:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "1992:4:62", - "nodeType": "YulIdentifier", - "src": "1992:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2035:9:62", - "nodeType": "YulIdentifier", - "src": "2035:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "2050:6:62", - "nodeType": "YulIdentifier", - "src": "2050:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2066:3:62", - "nodeType": "YulLiteral", - "src": "2066:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "2071:1:62", - "nodeType": "YulLiteral", - "src": "2071:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2062:3:62", - "nodeType": "YulIdentifier", - "src": "2062:3:62" - }, - "nativeSrc": "2062:11:62", - "nodeType": "YulFunctionCall", - "src": "2062:11:62" - }, - { - "kind": "number", - "nativeSrc": "2075:1:62", - "nodeType": "YulLiteral", - "src": "2075:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2058:3:62", - "nodeType": "YulIdentifier", - "src": "2058:3:62" - }, - "nativeSrc": "2058:19:62", - "nodeType": "YulFunctionCall", - "src": "2058:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2046:3:62", - "nodeType": "YulIdentifier", - "src": "2046:3:62" - }, - "nativeSrc": "2046:32:62", - "nodeType": "YulFunctionCall", - "src": "2046:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2028:6:62", - "nodeType": "YulIdentifier", - "src": "2028:6:62" - }, - "nativeSrc": "2028:51:62", - "nodeType": "YulFunctionCall", - "src": "2028:51:62" - }, - "nativeSrc": "2028:51:62", - "nodeType": "YulExpressionStatement", - "src": "2028:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2099:9:62", - "nodeType": "YulIdentifier", - "src": "2099:9:62" - }, - { - "kind": "number", - "nativeSrc": "2110:2:62", - "nodeType": "YulLiteral", - "src": "2110:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2095:3:62", - "nodeType": "YulIdentifier", - "src": "2095:3:62" - }, - "nativeSrc": "2095:18:62", - "nodeType": "YulFunctionCall", - "src": "2095:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "2119:6:62", - "nodeType": "YulIdentifier", - "src": "2119:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2135:3:62", - "nodeType": "YulLiteral", - "src": "2135:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "2140:1:62", - "nodeType": "YulLiteral", - "src": "2140:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2131:3:62", - "nodeType": "YulIdentifier", - "src": "2131:3:62" - }, - "nativeSrc": "2131:11:62", - "nodeType": "YulFunctionCall", - "src": "2131:11:62" - }, - { - "kind": "number", - "nativeSrc": "2144:1:62", - "nodeType": "YulLiteral", - "src": "2144:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2127:3:62", - "nodeType": "YulIdentifier", - "src": "2127:3:62" - }, - "nativeSrc": "2127:19:62", - "nodeType": "YulFunctionCall", - "src": "2127:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2115:3:62", - "nodeType": "YulIdentifier", - "src": "2115:3:62" - }, - "nativeSrc": "2115:32:62", - "nodeType": "YulFunctionCall", - "src": "2115:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2088:6:62", - "nodeType": "YulIdentifier", - "src": "2088:6:62" - }, - "nativeSrc": "2088:60:62", - "nodeType": "YulFunctionCall", - "src": "2088:60:62" - }, - "nativeSrc": "2088:60:62", - "nodeType": "YulExpressionStatement", - "src": "2088:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2168:9:62", - "nodeType": "YulIdentifier", - "src": "2168:9:62" - }, - { - "kind": "number", - "nativeSrc": "2179:2:62", - "nodeType": "YulLiteral", - "src": "2179:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2164:3:62", - "nodeType": "YulIdentifier", - "src": "2164:3:62" - }, - "nativeSrc": "2164:18:62", - "nodeType": "YulFunctionCall", - "src": "2164:18:62" - }, - { - "arguments": [ - { - "name": "value2", - "nativeSrc": "2188:6:62", - "nodeType": "YulIdentifier", - "src": "2188:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2204:3:62", - "nodeType": "YulLiteral", - "src": "2204:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "2209:1:62", - "nodeType": "YulLiteral", - "src": "2209:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2200:3:62", - "nodeType": "YulIdentifier", - "src": "2200:3:62" - }, - "nativeSrc": "2200:11:62", - "nodeType": "YulFunctionCall", - "src": "2200:11:62" - }, - { - "kind": "number", - "nativeSrc": "2213:1:62", - "nodeType": "YulLiteral", - "src": "2213:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2196:3:62", - "nodeType": "YulIdentifier", - "src": "2196:3:62" - }, - "nativeSrc": "2196:19:62", - "nodeType": "YulFunctionCall", - "src": "2196:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2184:3:62", - "nodeType": "YulIdentifier", - "src": "2184:3:62" - }, - "nativeSrc": "2184:32:62", - "nodeType": "YulFunctionCall", - "src": "2184:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2157:6:62", - "nodeType": "YulIdentifier", - "src": "2157:6:62" - }, - "nativeSrc": "2157:60:62", - "nodeType": "YulFunctionCall", - "src": "2157:60:62" - }, - "nativeSrc": "2157:60:62", - "nodeType": "YulExpressionStatement", - "src": "2157:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2237:9:62", - "nodeType": "YulIdentifier", - "src": "2237:9:62" - }, - { - "kind": "number", - "nativeSrc": "2248:2:62", - "nodeType": "YulLiteral", - "src": "2248:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2233:3:62", - "nodeType": "YulIdentifier", - "src": "2233:3:62" - }, - "nativeSrc": "2233:18:62", - "nodeType": "YulFunctionCall", - "src": "2233:18:62" - }, - { - "arguments": [ - { - "name": "value3", - "nativeSrc": "2257:6:62", - "nodeType": "YulIdentifier", - "src": "2257:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2273:3:62", - "nodeType": "YulLiteral", - "src": "2273:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "2278:1:62", - "nodeType": "YulLiteral", - "src": "2278:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2269:3:62", - "nodeType": "YulIdentifier", - "src": "2269:3:62" - }, - "nativeSrc": "2269:11:62", - "nodeType": "YulFunctionCall", - "src": "2269:11:62" - }, - { - "kind": "number", - "nativeSrc": "2282:1:62", - "nodeType": "YulLiteral", - "src": "2282:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2265:3:62", - "nodeType": "YulIdentifier", - "src": "2265:3:62" - }, - "nativeSrc": "2265:19:62", - "nodeType": "YulFunctionCall", - "src": "2265:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2253:3:62", - "nodeType": "YulIdentifier", - "src": "2253:3:62" - }, - "nativeSrc": "2253:32:62", - "nodeType": "YulFunctionCall", - "src": "2253:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2226:6:62", - "nodeType": "YulIdentifier", - "src": "2226:6:62" - }, - "nativeSrc": "2226:60:62", - "nodeType": "YulFunctionCall", - "src": "2226:60:62" - }, - "nativeSrc": "2226:60:62", - "nodeType": "YulExpressionStatement", - "src": "2226:60:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address__fromStack_reversed", - "nativeSrc": "1797:495:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1927:9:62", - "nodeType": "YulTypedName", - "src": "1927:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "1938:6:62", - "nodeType": "YulTypedName", - "src": "1938:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "1946:6:62", - "nodeType": "YulTypedName", - "src": "1946:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "1954:6:62", - "nodeType": "YulTypedName", - "src": "1954:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1962:6:62", - "nodeType": "YulTypedName", - "src": "1962:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "1973:4:62", - "nodeType": "YulTypedName", - "src": "1973:4:62", - "type": "" - } - ], - "src": "1797:495:62" - }, - { - "body": { - "nativeSrc": "2398:76:62", - "nodeType": "YulBlock", - "src": "2398:76:62", - "statements": [ - { - "nativeSrc": "2408:26:62", - "nodeType": "YulAssignment", - "src": "2408:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2420:9:62", - "nodeType": "YulIdentifier", - "src": "2420:9:62" - }, - { - "kind": "number", - "nativeSrc": "2431:2:62", - "nodeType": "YulLiteral", - "src": "2431:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2416:3:62", - "nodeType": "YulIdentifier", - "src": "2416:3:62" - }, - "nativeSrc": "2416:18:62", - "nodeType": "YulFunctionCall", - "src": "2416:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "2408:4:62", - "nodeType": "YulIdentifier", - "src": "2408:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2450:9:62", - "nodeType": "YulIdentifier", - "src": "2450:9:62" - }, - { - "name": "value0", - "nativeSrc": "2461:6:62", - "nodeType": "YulIdentifier", - "src": "2461:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2443:6:62", - "nodeType": "YulIdentifier", - "src": "2443:6:62" - }, - "nativeSrc": "2443:25:62", - "nodeType": "YulFunctionCall", - "src": "2443:25:62" - }, - "nativeSrc": "2443:25:62", - "nodeType": "YulExpressionStatement", - "src": "2443:25:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", - "nativeSrc": "2297:177:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2367:9:62", - "nodeType": "YulTypedName", - "src": "2367:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "2378:6:62", - "nodeType": "YulTypedName", - "src": "2378:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2389:4:62", - "nodeType": "YulTypedName", - "src": "2389:4:62", - "type": "" - } - ], - "src": "2297:177:62" - }, - { - "body": { - "nativeSrc": "2560:127:62", - "nodeType": "YulBlock", - "src": "2560:127:62", - "statements": [ - { - "body": { - "nativeSrc": "2606:16:62", - "nodeType": "YulBlock", - "src": "2606:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2615:1:62", - "nodeType": "YulLiteral", - "src": "2615:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "2618:1:62", - "nodeType": "YulLiteral", - "src": "2618:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "2608:6:62", - "nodeType": "YulIdentifier", - "src": "2608:6:62" - }, - "nativeSrc": "2608:12:62", - "nodeType": "YulFunctionCall", - "src": "2608:12:62" - }, - "nativeSrc": "2608:12:62", - "nodeType": "YulExpressionStatement", - "src": "2608:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "2581:7:62", - "nodeType": "YulIdentifier", - "src": "2581:7:62" - }, - { - "name": "headStart", - "nativeSrc": "2590:9:62", - "nodeType": "YulIdentifier", - "src": "2590:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2577:3:62", - "nodeType": "YulIdentifier", - "src": "2577:3:62" - }, - "nativeSrc": "2577:23:62", - "nodeType": "YulFunctionCall", - "src": "2577:23:62" - }, - { - "kind": "number", - "nativeSrc": "2602:2:62", - "nodeType": "YulLiteral", - "src": "2602:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "2573:3:62", - "nodeType": "YulIdentifier", - "src": "2573:3:62" - }, - "nativeSrc": "2573:32:62", - "nodeType": "YulFunctionCall", - "src": "2573:32:62" - }, - "nativeSrc": "2570:52:62", - "nodeType": "YulIf", - "src": "2570:52:62" - }, - { - "nativeSrc": "2631:50:62", - "nodeType": "YulAssignment", - "src": "2631:50:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2671:9:62", - "nodeType": "YulIdentifier", - "src": "2671:9:62" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nativeSrc": "2641:29:62", - "nodeType": "YulIdentifier", - "src": "2641:29:62" - }, - "nativeSrc": "2641:40:62", - "nodeType": "YulFunctionCall", - "src": "2641:40:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "2631:6:62", - "nodeType": "YulIdentifier", - "src": "2631:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nativeSrc": "2479:208:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2526:9:62", - "nodeType": "YulTypedName", - "src": "2526:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "2537:7:62", - "nodeType": "YulTypedName", - "src": "2537:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "2549:6:62", - "nodeType": "YulTypedName", - "src": "2549:6:62", - "type": "" - } - ], - "src": "2479:208:62" - }, - { - "body": { - "nativeSrc": "2811:406:62", - "nodeType": "YulBlock", - "src": "2811:406:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2828:9:62", - "nodeType": "YulIdentifier", - "src": "2828:9:62" - }, - { - "kind": "number", - "nativeSrc": "2839:2:62", - "nodeType": "YulLiteral", - "src": "2839:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2821:6:62", - "nodeType": "YulIdentifier", - "src": "2821:6:62" - }, - "nativeSrc": "2821:21:62", - "nodeType": "YulFunctionCall", - "src": "2821:21:62" - }, - "nativeSrc": "2821:21:62", - "nodeType": "YulExpressionStatement", - "src": "2821:21:62" - }, - { - "nativeSrc": "2851:27:62", - "nodeType": "YulVariableDeclaration", - "src": "2851:27:62", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "2871:6:62", - "nodeType": "YulIdentifier", - "src": "2871:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2865:5:62", - "nodeType": "YulIdentifier", - "src": "2865:5:62" - }, - "nativeSrc": "2865:13:62", - "nodeType": "YulFunctionCall", - "src": "2865:13:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "2855:6:62", - "nodeType": "YulTypedName", - "src": "2855:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2898:9:62", - "nodeType": "YulIdentifier", - "src": "2898:9:62" - }, - { - "kind": "number", - "nativeSrc": "2909:2:62", - "nodeType": "YulLiteral", - "src": "2909:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2894:3:62", - "nodeType": "YulIdentifier", - "src": "2894:3:62" - }, - "nativeSrc": "2894:18:62", - "nodeType": "YulFunctionCall", - "src": "2894:18:62" - }, - { - "name": "length", - "nativeSrc": "2914:6:62", - "nodeType": "YulIdentifier", - "src": "2914:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2887:6:62", - "nodeType": "YulIdentifier", - "src": "2887:6:62" - }, - "nativeSrc": "2887:34:62", - "nodeType": "YulFunctionCall", - "src": "2887:34:62" - }, - "nativeSrc": "2887:34:62", - "nodeType": "YulExpressionStatement", - "src": "2887:34:62" - }, - { - "nativeSrc": "2930:10:62", - "nodeType": "YulVariableDeclaration", - "src": "2930:10:62", - "value": { - "kind": "number", - "nativeSrc": "2939:1:62", - "nodeType": "YulLiteral", - "src": "2939:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "2934:1:62", - "nodeType": "YulTypedName", - "src": "2934:1:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "2999:90:62", - "nodeType": "YulBlock", - "src": "2999:90:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3028:9:62", - "nodeType": "YulIdentifier", - "src": "3028:9:62" - }, - { - "name": "i", - "nativeSrc": "3039:1:62", - "nodeType": "YulIdentifier", - "src": "3039:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3024:3:62", - "nodeType": "YulIdentifier", - "src": "3024:3:62" - }, - "nativeSrc": "3024:17:62", - "nodeType": "YulFunctionCall", - "src": "3024:17:62" - }, - { - "kind": "number", - "nativeSrc": "3043:2:62", - "nodeType": "YulLiteral", - "src": "3043:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3020:3:62", - "nodeType": "YulIdentifier", - "src": "3020:3:62" - }, - "nativeSrc": "3020:26:62", - "nodeType": "YulFunctionCall", - "src": "3020:26:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "3062:6:62", - "nodeType": "YulIdentifier", - "src": "3062:6:62" - }, - { - "name": "i", - "nativeSrc": "3070:1:62", - "nodeType": "YulIdentifier", - "src": "3070:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3058:3:62", - "nodeType": "YulIdentifier", - "src": "3058:3:62" - }, - "nativeSrc": "3058:14:62", - "nodeType": "YulFunctionCall", - "src": "3058:14:62" - }, - { - "kind": "number", - "nativeSrc": "3074:2:62", - "nodeType": "YulLiteral", - "src": "3074:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3054:3:62", - "nodeType": "YulIdentifier", - "src": "3054:3:62" - }, - "nativeSrc": "3054:23:62", - "nodeType": "YulFunctionCall", - "src": "3054:23:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "3048:5:62", - "nodeType": "YulIdentifier", - "src": "3048:5:62" - }, - "nativeSrc": "3048:30:62", - "nodeType": "YulFunctionCall", - "src": "3048:30:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3013:6:62", - "nodeType": "YulIdentifier", - "src": "3013:6:62" - }, - "nativeSrc": "3013:66:62", - "nodeType": "YulFunctionCall", - "src": "3013:66:62" - }, - "nativeSrc": "3013:66:62", - "nodeType": "YulExpressionStatement", - "src": "3013:66:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "2960:1:62", - "nodeType": "YulIdentifier", - "src": "2960:1:62" - }, - { - "name": "length", - "nativeSrc": "2963:6:62", - "nodeType": "YulIdentifier", - "src": "2963:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "2957:2:62", - "nodeType": "YulIdentifier", - "src": "2957:2:62" - }, - "nativeSrc": "2957:13:62", - "nodeType": "YulFunctionCall", - "src": "2957:13:62" - }, - "nativeSrc": "2949:140:62", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "2971:19:62", - "nodeType": "YulBlock", - "src": "2971:19:62", - "statements": [ - { - "nativeSrc": "2973:15:62", - "nodeType": "YulAssignment", - "src": "2973:15:62", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "2982:1:62", - "nodeType": "YulIdentifier", - "src": "2982:1:62" - }, - { - "kind": "number", - "nativeSrc": "2985:2:62", - "nodeType": "YulLiteral", - "src": "2985:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2978:3:62", - "nodeType": "YulIdentifier", - "src": "2978:3:62" - }, - "nativeSrc": "2978:10:62", - "nodeType": "YulFunctionCall", - "src": "2978:10:62" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "2973:1:62", - "nodeType": "YulIdentifier", - "src": "2973:1:62" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "2953:3:62", - "nodeType": "YulBlock", - "src": "2953:3:62", - "statements": [] - }, - "src": "2949:140:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3113:9:62", - "nodeType": "YulIdentifier", - "src": "3113:9:62" - }, - { - "name": "length", - "nativeSrc": "3124:6:62", - "nodeType": "YulIdentifier", - "src": "3124:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3109:3:62", - "nodeType": "YulIdentifier", - "src": "3109:3:62" - }, - "nativeSrc": "3109:22:62", - "nodeType": "YulFunctionCall", - "src": "3109:22:62" - }, - { - "kind": "number", - "nativeSrc": "3133:2:62", - "nodeType": "YulLiteral", - "src": "3133:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3105:3:62", - "nodeType": "YulIdentifier", - "src": "3105:3:62" - }, - "nativeSrc": "3105:31:62", - "nodeType": "YulFunctionCall", - "src": "3105:31:62" - }, - { - "kind": "number", - "nativeSrc": "3138:1:62", - "nodeType": "YulLiteral", - "src": "3138:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3098:6:62", - "nodeType": "YulIdentifier", - "src": "3098:6:62" - }, - "nativeSrc": "3098:42:62", - "nodeType": "YulFunctionCall", - "src": "3098:42:62" - }, - "nativeSrc": "3098:42:62", - "nodeType": "YulExpressionStatement", - "src": "3098:42:62" - }, - { - "nativeSrc": "3149:62:62", - "nodeType": "YulAssignment", - "src": "3149:62:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3165:9:62", - "nodeType": "YulIdentifier", - "src": "3165:9:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "3184:6:62", - "nodeType": "YulIdentifier", - "src": "3184:6:62" - }, - { - "kind": "number", - "nativeSrc": "3192:2:62", - "nodeType": "YulLiteral", - "src": "3192:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3180:3:62", - "nodeType": "YulIdentifier", - "src": "3180:3:62" - }, - "nativeSrc": "3180:15:62", - "nodeType": "YulFunctionCall", - "src": "3180:15:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3201:2:62", - "nodeType": "YulLiteral", - "src": "3201:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "3197:3:62", - "nodeType": "YulIdentifier", - "src": "3197:3:62" - }, - "nativeSrc": "3197:7:62", - "nodeType": "YulFunctionCall", - "src": "3197:7:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3176:3:62", - "nodeType": "YulIdentifier", - "src": "3176:3:62" - }, - "nativeSrc": "3176:29:62", - "nodeType": "YulFunctionCall", - "src": "3176:29:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3161:3:62", - "nodeType": "YulIdentifier", - "src": "3161:3:62" - }, - "nativeSrc": "3161:45:62", - "nodeType": "YulFunctionCall", - "src": "3161:45:62" - }, - { - "kind": "number", - "nativeSrc": "3208:2:62", - "nodeType": "YulLiteral", - "src": "3208:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3157:3:62", - "nodeType": "YulIdentifier", - "src": "3157:3:62" - }, - "nativeSrc": "3157:54:62", - "nodeType": "YulFunctionCall", - "src": "3157:54:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "3149:4:62", - "nodeType": "YulIdentifier", - "src": "3149:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "2692:525:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2780:9:62", - "nodeType": "YulTypedName", - "src": "2780:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "2791:6:62", - "nodeType": "YulTypedName", - "src": "2791:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2802:4:62", - "nodeType": "YulTypedName", - "src": "2802:4:62", - "type": "" - } - ], - "src": "2692:525:62" - }, - { - "body": { - "nativeSrc": "3321:101:62", - "nodeType": "YulBlock", - "src": "3321:101:62", - "statements": [ - { - "nativeSrc": "3331:26:62", - "nodeType": "YulAssignment", - "src": "3331:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3343:9:62", - "nodeType": "YulIdentifier", - "src": "3343:9:62" - }, - { - "kind": "number", - "nativeSrc": "3354:2:62", - "nodeType": "YulLiteral", - "src": "3354:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3339:3:62", - "nodeType": "YulIdentifier", - "src": "3339:3:62" - }, - "nativeSrc": "3339:18:62", - "nodeType": "YulFunctionCall", - "src": "3339:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "3331:4:62", - "nodeType": "YulIdentifier", - "src": "3331:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3373:9:62", - "nodeType": "YulIdentifier", - "src": "3373:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "3388:6:62", - "nodeType": "YulIdentifier", - "src": "3388:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3404:2:62", - "nodeType": "YulLiteral", - "src": "3404:2:62", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nativeSrc": "3408:1:62", - "nodeType": "YulLiteral", - "src": "3408:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "3400:3:62", - "nodeType": "YulIdentifier", - "src": "3400:3:62" - }, - "nativeSrc": "3400:10:62", - "nodeType": "YulFunctionCall", - "src": "3400:10:62" - }, - { - "kind": "number", - "nativeSrc": "3412:1:62", - "nodeType": "YulLiteral", - "src": "3412:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "3396:3:62", - "nodeType": "YulIdentifier", - "src": "3396:3:62" - }, - "nativeSrc": "3396:18:62", - "nodeType": "YulFunctionCall", - "src": "3396:18:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3384:3:62", - "nodeType": "YulIdentifier", - "src": "3384:3:62" - }, - "nativeSrc": "3384:31:62", - "nodeType": "YulFunctionCall", - "src": "3384:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3366:6:62", - "nodeType": "YulIdentifier", - "src": "3366:6:62" - }, - "nativeSrc": "3366:50:62", - "nodeType": "YulFunctionCall", - "src": "3366:50:62" - }, - "nativeSrc": "3366:50:62", - "nodeType": "YulExpressionStatement", - "src": "3366:50:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", - "nativeSrc": "3222:200:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "3290:9:62", - "nodeType": "YulTypedName", - "src": "3290:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "3301:6:62", - "nodeType": "YulTypedName", - "src": "3301:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "3312:4:62", - "nodeType": "YulTypedName", - "src": "3312:4:62", - "type": "" - } - ], - "src": "3222:200:62" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n value2 := abi_decode_address_fromMemory(add(headStart, 64))\n value3 := abi_decode_address_fromMemory(add(headStart, 96))\n }\n function abi_encode_tuple_t_stringliteral_7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a__to_t_bytes_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 10)\n mstore(add(headStart, 64), \"Controller\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_address_t_address_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address_t_address_t_address__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 224)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 160), and(value5, sub(shl(160, 1), 1)))\n mstore(add(headStart, 192), and(value6, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), 32)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(64, 1), 1)))\n }\n}", - "id": 62, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "61024060405234801561001157600080fd5b5060405161668f38038061668f83398101604081905261003091610541565b3083838387806001600160a01b03811661007f5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b7906103c5565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100ea906103c5565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b6020820152610123906103c5565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015d906103c5565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610195906103c5565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101d0906103c5565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020e906103c5565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024a906103c5565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027f906103c5565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103299790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b038481166101c08190528482166101e08190528483166102008190529284166102208190526040805193845260208401929092529082019290925260608101919091527f4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda79060800160405180910390a1505050506103bc61047360201b60201c565b50505050610605565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161040091815260200190565b602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610595565b9050826001600160a01b03821661046c5760405163218f5add60e11b815260040161007691906105b7565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104c35760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146105225780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b038116811461053c57600080fd5b919050565b6000806000806080858703121561055757600080fd5b61056085610525565b935061056e60208601610525565b925061057c60408601610525565b915061058a60608601610525565b905092959194509250565b6000602082840312156105a757600080fd5b6105b082610525565b9392505050565b602081526000825180602084015260005b818110156105e557602081860181015160408684010152016105c8565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615ff161069e60003960006143f801526000612fa9015260008181611a1801526138d00152600050506000505060005050600050506000613fe6015260006137fd01526000505060005050600050506000612045015260006143d40152615ff16000f3fe608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", - "opcodes": "PUSH2 0x240 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x668F CODESIZE SUB DUP1 PUSH2 0x668F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x30 SWAP2 PUSH2 0x541 JUMP JUMPDEST ADDRESS DUP4 DUP4 DUP4 DUP8 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7F JUMPI PUSH1 0x40 MLOAD PUSH4 0x218F5ADD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x21B7B73A3937B63632B9 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xA DUP2 MSTORE PUSH10 0x23B930B8342A37B5B2B7 PUSH1 0xB1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xB7 SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x5374616B696E67 PUSH1 0xC8 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xEA SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xD DUP2 MSTORE PUSH13 0x47726170685061796D656E7473 PUSH1 0x98 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x123 SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH14 0x5061796D656E7473457363726F77 PUSH1 0x90 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x15D SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xC DUP2 MSTORE PUSH12 0x22B837B1B426B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x195 SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH14 0x2932BBB0B93239A6B0B730B3B2B9 PUSH1 0x91 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1D0 SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH17 0x4772617068546F6B656E47617465776179 PUSH1 0x78 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x20E SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x160 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xF DUP2 MSTORE PUSH15 0x23B930B834283937BC3CA0B236B4B7 PUSH1 0x89 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x24A SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x180 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x8 DUP2 MSTORE PUSH8 0x21BAB930BA34B7B7 PUSH1 0xC1 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x27F SWAP1 PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x1A0 DUP2 SWAP1 MSTORE PUSH2 0x100 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x80 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH1 0x40 MLOAD SWAP9 DUP12 AND SWAP11 SWAP8 DUP9 AND SWAP10 SWAP7 SWAP1 SWAP8 AND SWAP8 PUSH32 0xEF5021414834D86E36470F5C1CECF6544FB2BB723F2CA51A4C86FCD8C5919A43 SWAP8 PUSH2 0x329 SWAP8 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 DUP8 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP4 DUP7 AND PUSH1 0x40 DUP7 ADD MSTORE SWAP2 DUP6 AND PUSH1 0x60 DUP6 ADD MSTORE DUP5 AND PUSH1 0x80 DUP5 ADD MSTORE DUP4 AND PUSH1 0xA0 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH2 0x1C0 DUP2 SWAP1 MSTORE DUP5 DUP3 AND PUSH2 0x1E0 DUP2 SWAP1 MSTORE DUP5 DUP4 AND PUSH2 0x200 DUP2 SWAP1 MSTORE SWAP3 DUP5 AND PUSH2 0x220 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x4175B2C37456DBAC494E08DE8666D31BB8F3F2AEE36EA5D9E06894FF3E4DDDA7 SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP PUSH2 0x3BC PUSH2 0x473 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP PUSH2 0x605 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x100 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF7641A5E DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x400 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x41D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x441 SWAP2 SWAP1 PUSH2 0x595 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x46C JUMPI PUSH1 0x40 MLOAD PUSH4 0x218F5ADD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76 SWAP2 SWAP1 PUSH2 0x5B7 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND EQ PUSH2 0x522 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x53C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x557 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x560 DUP6 PUSH2 0x525 JUMP JUMPDEST SWAP4 POP PUSH2 0x56E PUSH1 0x20 DUP7 ADD PUSH2 0x525 JUMP JUMPDEST SWAP3 POP PUSH2 0x57C PUSH1 0x40 DUP7 ADD PUSH2 0x525 JUMP JUMPDEST SWAP2 POP PUSH2 0x58A PUSH1 0x60 DUP7 ADD PUSH2 0x525 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5B0 DUP3 PUSH2 0x525 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5E5 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD PUSH1 0x40 DUP7 DUP5 ADD ADD MSTORE ADD PUSH2 0x5C8 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP6 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP5 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0x200 MLOAD PUSH2 0x220 MLOAD PUSH2 0x5FF1 PUSH2 0x69E PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x43F8 ADD MSTORE PUSH1 0x0 PUSH2 0x2FA9 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1A18 ADD MSTORE PUSH2 0x38D0 ADD MSTORE PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 PUSH2 0x3FE6 ADD MSTORE PUSH1 0x0 PUSH2 0x37FD ADD MSTORE PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 POP POP PUSH1 0x0 PUSH2 0x2045 ADD MSTORE PUSH1 0x0 PUSH2 0x43D4 ADD MSTORE PUSH2 0x5FF1 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2CE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8180083B GT PUSH2 0x17E JUMPI DUP1 PUSH4 0xA827A90C GT PUSH2 0xDF JUMPI DUP1 PUSH4 0xA827A90C EQ PUSH2 0x8F6 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x909 JUMPI DUP1 PUSH4 0xB15D2A2C EQ PUSH2 0x929 JUMPI DUP1 PUSH4 0xBA38F67D EQ PUSH2 0x93C JUMPI DUP1 PUSH4 0xBFDFA7AF EQ PUSH2 0x94F JUMPI DUP1 PUSH4 0xCB8347FE EQ PUSH2 0x966 JUMPI DUP1 PUSH4 0xCBE5F3F2 EQ PUSH2 0x979 JUMPI DUP1 PUSH4 0xCE0FC0CC EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xCE56C98B EQ PUSH2 0x9AC JUMPI DUP1 PUSH4 0xD07A7A84 EQ PUSH2 0x9BF JUMPI DUP1 PUSH4 0xDEDF6726 EQ PUSH2 0x9C8 JUMPI DUP1 PUSH4 0xE2E1E8E9 EQ PUSH2 0x9DB JUMPI DUP1 PUSH4 0xE6F50054 EQ PUSH2 0x9FB JUMPI DUP1 PUSH4 0xEFF0F592 EQ PUSH2 0xA0E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8180083B EQ PUSH2 0x795 JUMPI DUP1 PUSH4 0x819BA366 EQ PUSH2 0x7A8 JUMPI DUP1 PUSH4 0x81E777A7 EQ PUSH2 0x7C5 JUMPI DUP1 PUSH4 0x832BC923 EQ PUSH2 0x7D8 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x7EB JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x7F3 JUMPI DUP1 PUSH4 0x85E82BAF EQ PUSH2 0x80E JUMPI DUP1 PUSH4 0x88812583 EQ PUSH2 0x817 JUMPI DUP1 PUSH4 0x8D2F2948 EQ PUSH2 0x82E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x859 JUMPI DUP1 PUSH4 0x9249C5C1 EQ PUSH2 0x861 JUMPI DUP1 PUSH4 0x9384E078 EQ PUSH2 0x878 JUMPI DUP1 PUSH4 0x93D4E7CB EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x9AAFA5D1 EQ PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F793CDC GT PUSH2 0x233 JUMPI DUP1 PUSH4 0x4F793CDC EQ PUSH2 0x4B1 JUMPI DUP1 PUSH4 0x52A9039C EQ PUSH2 0x4D3 JUMPI DUP1 PUSH4 0x55C85269 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0x6234E216 EQ PUSH2 0x63E JUMPI DUP1 PUSH4 0x6A3CA383 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x6D9A3951 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0x71CE020A EQ PUSH2 0x6F4 JUMPI DUP1 PUSH4 0x7203CA78 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0x73371823 EQ PUSH2 0x740 JUMPI DUP1 PUSH4 0x772495C3 EQ PUSH2 0x749 JUMPI DUP1 PUSH4 0x7AA31BCE EQ PUSH2 0x75C JUMPI DUP1 PUSH4 0x7DFE6D28 EQ PUSH2 0x76F JUMPI DUP1 PUSH4 0x7E89BAC3 EQ PUSH2 0x782 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE022923 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0x138DEA08 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x13C474C9 EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x1CAFA218 EQ PUSH2 0x3C0 JUMPI DUP1 PUSH4 0x1DD42F60 EQ PUSH2 0x3D5 JUMPI DUP1 PUSH4 0x1EBB7C30 EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0x24B8FBF6 EQ PUSH2 0x40E JUMPI DUP1 PUSH4 0x35577962 EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x36FDD28A EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x3AFD23FE EQ PUSH2 0x43D JUMPI DUP1 PUSH4 0x3F0ED79D EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0x45F54485 EQ PUSH2 0x488 JUMPI DUP1 PUSH4 0x482468B7 EQ PUSH2 0x49B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6 PUSH2 0x2E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xE0 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x35D PUSH1 0xD7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3A0 PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x6A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x3CE CALLDATASIZE PUSH1 0x4 PUSH2 0x5180 JUMP JUMPDEST PUSH2 0xAD8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3D3 PUSH2 0x3E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B8 JUMP JUMPDEST PUSH2 0xC56 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x41C CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x42F CALLDATASIZE PUSH1 0x4 PUSH2 0x5278 JUMP JUMPDEST PUSH2 0xE9A JUMP JUMPDEST PUSH2 0x35D PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x44B CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xEB0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xED1 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0xF15 JUMP JUMPDEST PUSH2 0x4A3 PUSH2 0xF1F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST PUSH2 0x4C4 PUSH2 0x4BF CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xF32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5331 JUMP JUMPDEST PUSH2 0x52E PUSH2 0x4E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP7 SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP10 AND DUP10 MSTORE PUSH1 0x20 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE SWAP6 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x604 PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP6 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP6 ADD DUP5 SWAP1 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x7 SWAP1 SWAP3 ADD SLOAD PUSH1 0xE0 SWAP1 SWAP6 ADD DUP6 SWAP1 MSTORE SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x470 PUSH2 0x1065 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x64C CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9F PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x107A JUMP JUMPDEST PUSH2 0x6C8 PUSH2 0x67F CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE PUSH1 0x9E DUP3 MSTORE DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP3 MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x10F6 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x1108 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x5366 JUMP JUMPDEST PUSH2 0x733 PUSH2 0x718 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0x35D PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x757 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x1113 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x76A CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x111D JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x77D CALLDATASIZE PUSH1 0x4 PUSH2 0x5394 JUMP JUMPDEST PUSH2 0x112E JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x790 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x1146 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x11BA JUMP JUMPDEST PUSH2 0x7B0 PUSH2 0x1345 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5394 JUMP JUMPDEST PUSH2 0x1355 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x14BB JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x14CF JUMP JUMPDEST PUSH2 0x7FB PUSH2 0x1511 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53C4 JUMP JUMPDEST PUSH2 0x35D PUSH1 0xA0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x841 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x733 PUSH2 0x15BA JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x886 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x8CE PUSH2 0x8A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9E PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x841 SWAP1 PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x904 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x15D5 JUMP JUMPDEST PUSH2 0x91C PUSH2 0x917 CALLDATASIZE PUSH1 0x4 PUSH2 0x5475 JUMP JUMPDEST PUSH2 0x1682 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x54EA JUMP JUMPDEST PUSH2 0x35D PUSH2 0x937 CALLDATASIZE PUSH1 0x4 PUSH2 0x554F JUMP JUMPDEST PUSH2 0x1769 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x94A CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x19F7 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x974 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1A15 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x987 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x68 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x9A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1B54 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x55B7 JUMP JUMPDEST PUSH2 0x1C83 JUMP JUMPDEST PUSH2 0x35D PUSH1 0xD6 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x9D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1C96 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x9E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xA09 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x1E24 JUMP JUMPDEST PUSH2 0x3A0 PUSH2 0xA1C CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP5 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xA51 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x1E35 JUMP JUMPDEST PUSH2 0xA5E PUSH2 0x50EB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAE2 PUSH2 0x1E70 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xB09 JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xB25 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xB33 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xB51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xB7B JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH2 0xB84 CALLER PUSH2 0x1E94 JUMP JUMPDEST PUSH2 0xB8C PUSH2 0x1EA5 JUMP JUMPDEST PUSH2 0xB94 PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0xB9C PUSH2 0x1EC5 JUMP JUMPDEST PUSH2 0xBE8 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x537562677261706853657276696365 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x312E3 PUSH1 0xEC SHL DUP2 MSTORE POP PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0xBF4 DUP9 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0xBFD DUP8 PUSH2 0x1F67 JUMP JUMPDEST PUSH2 0xC06 DUP7 PUSH2 0x1FBB JUMP JUMPDEST DUP4 ISZERO PUSH2 0xC4C JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC5E PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x1F67 JUMP JUMPDEST POP JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 PUSH2 0xC78 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCA7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCE8 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0xD14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0xD22 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0xD2D DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xD38 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH2 0xD40 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xD50 DUP8 DUP10 ADD DUP10 PUSH2 0x5756 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP4 MLOAD GT PUSH2 0xD78 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7838439 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD GT PUSH2 0xD9A JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E63BD95 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xDD1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD06866D PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE TIMESTAMP DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 DUP2 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 SWAP1 SWAP3 MSTORE SWAP3 SWAP1 KECCAK256 DUP2 MLOAD DUP2 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 PUSH2 0xE1B SWAP1 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x2 DUP3 ADD SWAP1 PUSH2 0xE30 SWAP1 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0xE4C JUMPI PUSH2 0xE4C DUP10 DUP3 PUSH2 0x229A JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x159567BEA25499A91F60E1FBB349FF2A1F8C1B2883198F25C1E12C99EDDB44FA DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0xE87 SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xEA2 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x22F1 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xA0 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xECB SWAP1 PUSH2 0xEC5 PUSH1 0x9D DUP6 PUSH2 0x2358 JUMP JUMPDEST SWAP1 PUSH2 0x23D2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x72E3EF97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0xF0B PUSH2 0x240F JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x2434 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xC67 CALLER DUP3 PUSH2 0x2480 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH2 0x252D JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP2 SWAP3 SWAP2 PUSH2 0xF54 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xF80 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xFCD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xFA2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xFCD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xFB0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 DUP1 PUSH1 0x2 ADD DUP1 SLOAD PUSH2 0xFE2 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x100E SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x105B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1030 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x105B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x103E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1070 PUSH2 0x25A4 JUMP JUMPDEST SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP3 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE SWAP1 PUSH2 0xECB SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH2 0x10FE PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xF13 PUSH1 0x0 PUSH2 0x25E7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH2 0x2643 JUMP JUMPDEST PUSH2 0xC67 CALLER DUP3 PUSH2 0x229A JUMP JUMPDEST PUSH2 0x1125 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x26BE JUMP JUMPDEST PUSH2 0x1136 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0x1141 DUP4 DUP4 DUP4 PUSH2 0x26F3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x114E PUSH2 0x2011 JUMP JUMPDEST PUSH2 0x115B DUP2 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x117D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1C9C717B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0xD7 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x6DEEF78FFE3DF79AE5CD8E40B842C36AC6077E13746B9B68A9F327537B01E4E9 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST DUP3 PUSH2 0x11C3 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11F2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x120F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1233 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1256 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP1 DUP2 SWAP1 PUSH2 0x1293 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x129C PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12AA DUP5 DUP7 ADD DUP7 PUSH2 0x5151 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x12C1 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP8 SWAP2 DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x12EF JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x12FA DUP2 PUSH2 0x2746 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x73330C218A680717E9EEE625C262DF66EDDFDF99ECB388D25F6B32D66B9A318A DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x1335 SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD SWAP1 SWAP2 JUMP JUMPDEST DUP3 PUSH2 0x135E PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x138D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13CE SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x13F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0x13FF DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x140A DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x1415 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 SWAP1 DUP2 SWAP1 PUSH2 0x1450 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1459 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH2 0x146E PUSH1 0x9D DUP9 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP9 SWAP2 DUP9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x149C JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0xC4C DUP7 DUP7 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x289C JUMP JUMPDEST PUSH2 0x14C3 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1500 JUMPI PUSH1 0x40 MLOAD PUSH4 0x72E3EF97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1509 PUSH2 0x2274 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x2C28 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x1527 PUSH2 0x2C6F JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP ISZERO DUP1 ISZERO PUSH2 0x153B JUMPI POP PUSH1 0x1 DUP2 ADD SLOAD ISZERO JUMPDEST PUSH2 0x157F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1152540DCC4C8E88155B9A5B9A5D1A585B1A5E9959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH2 0x1587 PUSH2 0x2C93 JUMP JUMPDEST PUSH2 0x158F PUSH2 0x2D34 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0xF PUSH1 0xF8 SHL SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP CHAINID SWAP9 POP ADDRESS SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x15C5 PUSH2 0x2D51 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E2 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x15FB PUSH1 0xA0 SLOAD DUP4 PUSH2 0x23D2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 SLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x161D SWAP2 SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2D75 JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x1628 JUMPI POP DUP1 JUMPDEST DUP5 SWAP1 PUSH2 0x1647 JUMPI PUSH1 0x40 MLOAD PUSH3 0x3477B5 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1651 DUP4 PUSH2 0x2D94 JUMP JUMPDEST ISZERO DUP5 SWAP1 PUSH2 0x1672 JUMPI PUSH1 0x40 MLOAD PUSH4 0x17C7B35D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x167C DUP5 PUSH2 0x2746 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x16AC JUMPI PUSH2 0x16AC PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x16DF JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x16CA JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1761 JUMPI PUSH2 0x173C ADDRESS DUP7 DUP7 DUP5 DUP2 DUP2 LT PUSH2 0x1703 JUMPI PUSH2 0x1703 PUSH2 0x5968 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1715 SWAP2 SWAP1 PUSH2 0x597E JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1728 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x2DB3 JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x174E JUMPI PUSH2 0x174E PUSH2 0x5968 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x16E5 JUMP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0x1774 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17A3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17E4 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1807 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP6 PUSH1 0x0 PUSH2 0x1815 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1820 DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x182B DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP9 SWAP1 DUP2 SWAP1 PUSH2 0x1866 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x186F PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1884 JUMPI PUSH2 0x1884 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x18E2 JUMPI PUSH1 0x0 PUSH2 0x1897 DUP9 DUP11 ADD DUP11 PUSH2 0x5A16 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP2 POP DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP1 DUP3 AND EQ PUSH2 0x18CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x1A071D07 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x18DA DUP2 PUSH2 0x2E29 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1995 JUMP JUMPDEST PUSH1 0x2 DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x18F6 JUMPI PUSH2 0x18F6 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x197A JUMPI PUSH1 0x0 DUP1 PUSH2 0x190A DUP10 DUP12 ADD DUP12 PUSH2 0x5B3B JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH2 0x1924 PUSH1 0x9D DUP5 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP14 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1952 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x1971 DUP3 DUP3 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x332E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1995 JUMP JUMPDEST DUP9 PUSH1 0x40 MLOAD PUSH4 0x47031CF PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5B89 JUMP JUMPDEST DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x19A7 JUMPI PUSH2 0x19A7 PUSH2 0x59EB JUMP JUMPDEST DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x54FE682BFB66381A9382E13E4B95A3DD4F960EAFBAE063FDEA3539D144FF3FF5 DUP4 PUSH1 0x40 MLOAD PUSH2 0x19E2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xECB DUP3 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2D75 JUMP JUMPDEST CALLER PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP3 EQ PUSH2 0x1A62 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCDC0567F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 PUSH2 0x1A74 DUP4 DUP6 ADD DUP6 PUSH2 0x5B97 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1A80 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE76FEDE6 DUP7 DUP5 DUP5 PUSH2 0x1A99 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP7 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B06 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2F2E74A11116E05B39159372CCEB6739257B08D72F7171D208FF27BB6466C58 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1B45 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x1B5D PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B8C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BCD SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1BF0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP1 DUP2 SWAP1 PUSH2 0x1C2D JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1C36 PUSH2 0x2274 JUMP JUMPDEST PUSH2 0x1C3F DUP6 PUSH2 0x38F2 JUMP JUMPDEST PUSH2 0x1C48 DUP6 PUSH2 0x3908 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH32 0xF53CF6521A1B5FC0C04BFFA70374A4DC2E3474F2B2AC1643C3BCC54E2DB4A939 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8F DUP4 DUP4 PUSH2 0x397B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x1C9F PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CCE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CEB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D0F SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1D32 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0x1D40 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D4B DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x1D56 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 SWAP1 DUP2 SWAP1 PUSH2 0x1D91 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1D9A PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x1DAB DUP10 DUP12 ADD DUP12 PUSH2 0x5BB9 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x1DD3 DUP12 DUP4 DUP7 DUP7 DUP6 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x39EA JUMP JUMPDEST POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD3803EB82EF5B4CDFF8646734EBBAF5B37441E96314B27FFD3D0940F12A038E7 DUP12 DUP12 PUSH1 0x40 MLOAD PUSH2 0x1E0F SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1E2C PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x1FBB JUMP JUMPDEST PUSH2 0x1E3D PUSH2 0x2011 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1E67 JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x25E7 JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 JUMP JUMPDEST PUSH2 0x1E9C PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x3B98 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EB5 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EBD PUSH2 0x3BA0 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x1EA5 JUMP JUMPDEST PUSH2 0x1ECD PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EBD PUSH2 0x3BD5 JUMP JUMPDEST PUSH2 0x1EDD PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EE7 DUP3 DUP3 PUSH2 0x3BF2 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x3C04 JUMP JUMPDEST DUP2 DUP2 DUP1 DUP3 GT ISZERO PUSH2 0x1F1D JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x0 DUP3 SWAP1 SSTORE PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x90699B8B4BF48918FEA1129C85F9BC7B51285DF7ECC982910813C7805F568849 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0xC0 SHL NOT AND PUSH1 0x1 PUSH1 0xC0 SHL PUSH4 0xFFFFFFFF DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x472ABA493F9FD1D136EC54986F619F3AA5CAFF964F0E731A9909FB9A1270211F SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1FDC JUMPI PUSH1 0x40 MLOAD PUSH4 0xBC71A043 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xD6 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x2AAAF20B08565EEBC0C962CD7C568E54C3C0C2B85A1F942B82CD1BD730FDCD23 SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST CALLER PUSH2 0x201A PUSH2 0x15BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xF13 JUMPI CALLER PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x20B8 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x25D9897E DUP5 ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E5 SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2103 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2127 SWAP2 SWAP1 PUSH2 0x5C36 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 EQ ISZERO DUP4 SWAP1 PUSH2 0x215B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B3C09BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x746F6B656E73 PUSH1 0xD0 SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x219F PUSH2 0x2643 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP4 PUSH2 0x21B4 JUMPI DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x21BA JUMP JUMPDEST DUP5 PUSH1 0xE0 ADD MLOAD JUMPDEST SWAP1 POP PUSH2 0x2208 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD DUP2 MSTORE PUSH1 0x20 ADD PUSH13 0x1D1A185DDA5B99D4195C9A5BD9 PUSH1 0x9A SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2213 PUSH2 0x252D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP7 PUSH2 0x2228 JUMPI DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x222E JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD MLOAD JUMPDEST SWAP1 POP PUSH2 0xC4C DUP2 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xE DUP2 MSTORE PUSH1 0x20 ADD PUSH14 0x1B585E15995C9A599A595C90DD5D PUSH1 0x92 SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH2 0x227C PUSH2 0x1065 JUMP JUMPDEST ISZERO PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD93C0665 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x3349D2E561F8C23A3FF42257745C8FB53E4BF3CBD4046672A3C4A0C7EE8A7B31 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x22F9 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xA95BAC2F3DF0D40E8278281C1D39D53C60E4F2BF3550CA5665738D0916E89789 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x2360 PUSH2 0x50EB JUMP JUMPDEST PUSH2 0x236A DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 SWAP1 SWAP2 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x23E7 DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0xA0 ADD MLOAD PUSH2 0x3CE8 JUMP JUMPDEST PUSH2 0x23F1 SWAP1 TIMESTAMP PUSH2 0x5955 JUMP JUMPDEST SWAP1 POP PUSH2 0x23FC DUP5 PUSH2 0x25C8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2407 JUMPI POP DUP3 DUP2 GT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2417 PUSH2 0x1065 JUMP JUMPDEST PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8DFC202B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x243C PUSH2 0x240F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2446 PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 SSTORE SWAP1 POP PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x11AF SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD DUP5 SWAP1 MSTORE DUP3 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP1 MLOAD DUP1 DUP4 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP2 SWAP1 PUSH2 0x24D4 SWAP1 DUP5 SWAP1 PUSH2 0x3CFE SWAP1 PUSH2 0x3D69 SWAP1 PUSH2 0x3E62 SWAP1 DUP10 PUSH2 0x3E87 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x13F3FA9F0E54AF1AF76D8B5D11C3973D7C2AED6312B61EFFF2F7B49D73AD67EB DUP4 DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2518 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1B45 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2538 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x84633713 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2575 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2599 SWAP2 SWAP1 PUSH2 0x5CF1 JUMP JUMPDEST SWAP3 PUSH3 0xF4240 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25D7 DUP3 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xECB JUMPI POP POP PUSH1 0x80 ADD MLOAD ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F1 PUSH2 0x2D51 JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP5 POP SWAP2 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x264E PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5AEA0EC4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x268B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26AF SWAP2 SWAP1 PUSH2 0x5D0E JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0xA0 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x21774046E2611DDB52C8C46E1AD97524EEB2E3FDA7DCD9428867868B4C4D06BA SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST PUSH2 0x2700 PUSH1 0x9E DUP5 DUP5 DUP5 PUSH2 0x3F41 JUMP JUMPDEST DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD54C7ABC930F6D506DA2D08AA7AEAD4F2443E1DB6D5F560384A2F652FF893E19 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2753 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x27DE DUP3 PUSH2 0x2761 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2792 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27D5 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x9D SWAP2 SWAP1 PUSH2 0x4008 JUMP JUMPDEST PUSH2 0x27E9 PUSH1 0x9D DUP4 PUSH2 0x40B0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x27FC SWAP2 PUSH1 0x9F SWAP2 PUSH2 0x415B JUMP JUMPDEST DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x2823 SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x663A6F978DE61DC3E2441026C082BE709377B083AB642A8CE71386F8B91C710B DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2890 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH2 0x28A4 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28B1 PUSH1 0x9D DUP7 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x28BC DUP2 PUSH2 0x25C8 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x28DC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1EB5FF95 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP DUP1 PUSH1 0x40 ADD MLOAD DUP5 EQ ISZERO DUP6 DUP6 SWAP1 SWAP2 PUSH2 0x2908 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF32518CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x40 DUP2 ADD MLOAD DUP1 DUP6 GT ISZERO PUSH2 0x293E JUMPI PUSH2 0x2939 PUSH2 0x2922 PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x292E DUP5 DUP10 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x9F SWAP3 SWAP2 SWAP1 DUP9 PUSH2 0x41E0 JUMP JUMPDEST PUSH2 0x2957 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x2957 SWAP1 PUSH2 0x294E DUP8 DUP5 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x9F SWAP2 SWAP1 PUSH2 0x415B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2961 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2992 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x29B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29D5 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x29E2 DUP5 PUSH2 0x2D94 JUMP JUMPDEST ISZERO PUSH2 0x29EE JUMPI PUSH1 0x0 PUSH2 0x29FD JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x29FD SWAP1 DUP4 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD DUP10 SWAP1 SSTORE PUSH1 0x6 ADD DUP4 SWAP1 SSTORE SWAP1 POP PUSH2 0x2A2C PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6452FC0F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC8A5F81E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A7A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A9E SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2AC9 SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP DUP3 DUP8 GT ISZERO PUSH2 0x2B11 JUMPI PUSH2 0x2AE0 DUP4 DUP9 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2B06 SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x2B47 SWAP1 POP JUMP JUMPDEST PUSH2 0x2B1B DUP8 DUP5 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2B41 SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6DB4A6F9BE2D5E72EB2A2AF2374AC487971BF342A261BA0BC1CF471BF2A2C31F DUP11 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2B9E SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP8 AND DUP8 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP6 ADD MSTORE POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2C30 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C3A PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR DUP2 SSTORE SWAP1 POP PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x2473 CALLER SWAP1 JUMP JUMPDEST PUSH32 0xA16A46D94261C7517CC8FF89F61C0CE93598E3C849801011DEE649A6A557D100 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2C9F PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x2 ADD DUP1 SLOAD PUSH2 0x2CB0 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2CDC SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2D29 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2CFE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D29 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2D0C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2D40 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x3 ADD DUP1 SLOAD PUSH2 0x2CB0 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D8C PUSH2 0x2D82 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x9F SWAP1 DUP6 DUP6 PUSH2 0x42E5 JUMP JUMPDEST ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2DA3 DUP3 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xECB JUMPI POP POP PUSH1 0x40 ADD MLOAD ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2DD0 SWAP2 SWAP1 PUSH2 0x5D3E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2E0B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E10 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2E20 DUP6 DUP4 DUP4 PUSH2 0x437F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD DUP1 MLOAD PUSH1 0x0 SWAP4 SWAP3 DUP5 SWAP3 PUSH2 0x2E4E SWAP3 DUP2 ADD DUP3 ADD SWAP2 ADD PUSH2 0x5D5A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E5D PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x2E92 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4508FBF7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2EA4 DUP5 PUSH1 0x0 PUSH2 0x2480 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EAE PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2ED9 SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F1A SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2F26 PUSH2 0x43F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C4EA0ED DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2F53 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F94 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST PUSH2 0x2F9F JUMPI PUSH1 0x0 PUSH2 0x2FA3 JUMP JUMPDEST PUSH1 0xD7 SLOAD JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7F07D283 PUSH1 0x0 DUP12 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2FEB SWAP3 SWAP2 SWAP1 PUSH2 0x5D77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3017 SWAP3 SWAP2 SWAP1 PUSH2 0x5E16 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3036 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x305A SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3068 DUP3 DUP5 PUSH2 0x441A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3074 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x309F SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30E0 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x30ED DUP4 DUP8 PUSH2 0x5D2B JUMP JUMPDEST EQ DUP6 DUP3 DUP5 SWAP1 SWAP2 SWAP3 PUSH2 0x3122 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B0D791F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP DUP4 ISZERO SWAP1 POP PUSH2 0x32DB JUMPI PUSH1 0x0 PUSH1 0xD6 SLOAD DUP5 PUSH2 0x313C SWAP2 SWAP1 PUSH2 0x5E36 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3148 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5AEA0EC4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3185 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31A9 SWAP2 SWAP1 PUSH2 0x5D0E JUMP JUMPDEST PUSH2 0x31BC SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND TIMESTAMP PUSH2 0x5D2B JUMP JUMPDEST SWAP1 POP PUSH2 0x31C9 DUP12 DUP4 DUP4 PUSH2 0x4481 JUMP JUMPDEST DUP4 ISZERO PUSH2 0x32D8 JUMPI PUSH2 0x31D7 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1D1C2FEC DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3204 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3223 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3247 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST POP PUSH2 0x326C PUSH2 0x3253 PUSH2 0x43F6 JUMP JUMPDEST DUP6 PUSH2 0x325C PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x45F3 JUMP JUMPDEST PUSH2 0x3274 PUSH2 0x43F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x102AE651 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x81573288 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x32D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 PUSH32 0x60A56D4D503735B4848FEB6F491F14D7415262346B820D3B5A3D2733201BDA36 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x333C PUSH1 0x9D DUP7 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x3347 DUP2 PUSH2 0x25C8 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x3367 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1EB5FF95 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x337F PUSH1 0xA0 SLOAD DUP4 PUSH2 0x23D2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x3392 JUMPI POP PUSH2 0x3390 DUP3 PUSH2 0x2D94 JUMP JUMPDEST ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x339D JUMPI POP DUP5 ISZERO ISZERO JUMPDEST PUSH2 0x33A8 JUMPI PUSH1 0x0 PUSH2 0x341E JUMP JUMPDEST PUSH2 0x33B0 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDB750926 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x33DB SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x33FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x341E SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH2 0x345D DUP7 PUSH2 0x342C PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2792 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x3468 PUSH1 0x9D DUP8 PUSH2 0x46A2 JUMP JUMPDEST PUSH2 0x3473 PUSH1 0x9D DUP8 PUSH2 0x474D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 ISZERO PUSH2 0x37C2 JUMPI PUSH1 0x0 PUSH2 0x3486 PUSH2 0x2043 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x40 MLOAD PUSH4 0x7573EF4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x7573EF4F SWAP2 PUSH2 0x34B9 SWAP2 ADDRESS SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5E4D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34FA SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3506 PUSH2 0x2043 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1584A179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x561285E4 SWAP2 PUSH2 0x3536 SWAP2 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5625 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3577 SWAP2 SWAP1 PUSH2 0x5E72 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD GT PUSH2 0x358C JUMPI PUSH1 0x0 PUSH2 0x3596 JUMP JUMPDEST PUSH2 0x3596 DUP6 DUP4 PUSH2 0x441A JUMP JUMPDEST SWAP3 POP DUP3 ISZERO PUSH2 0x368B JUMPI PUSH2 0x35A6 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95EA7B3 PUSH2 0x35BC PUSH2 0x2043 JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x35DA SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x35F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x361D SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST POP PUSH2 0x3626 PUSH2 0x2043 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD PUSH4 0xCA94B0E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0xCA94B0E9 SWAP2 PUSH2 0x3658 SWAP2 ADDRESS SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5EC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3672 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x3695 DUP4 DUP7 PUSH2 0x5955 JUMP JUMPDEST SWAP4 POP DUP4 ISZERO PUSH2 0x37BF JUMPI DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x37B0 JUMPI PUSH2 0x36C7 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95EA7B3 PUSH2 0x36DD PUSH2 0x2043 JUMP JUMPDEST DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x36FB SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x371A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x373E SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST POP PUSH2 0x3747 PUSH2 0x2043 JUMP JUMPDEST DUP8 MLOAD PUSH1 0x40 MLOAD PUSH4 0x3A309049 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x74612092 SWAP2 PUSH2 0x3779 SWAP2 ADDRESS SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5EC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x37BD JUMP JUMPDEST PUSH2 0x37BD DUP2 DUP7 PUSH2 0x325C PUSH2 0x43D2 JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP2 AND PUSH32 0x7DF4DBB3B3C999CA3E143D3FE67ABFA22078FD572D49D411278648C773912E31 DUP7 DUP7 DUP7 DUP14 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x76671808 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3859 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x387D SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP4 MLOAD PUSH2 0x38B4 SWAP1 DUP8 PUSH2 0x2D75 JUMP JUMPDEST ISZERO PUSH2 0x38C2 JUMPI PUSH2 0x38C2 DUP9 PUSH2 0x2746 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38FD DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0xEAC DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x3913 DUP2 PUSH1 0x1 PUSH2 0x47F9 JUMP JUMPDEST PUSH2 0x391B PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3A78B732 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3946 SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3960 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3974 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8F PUSH32 0x4BDEE85C4B4A268F4895D1096D553C3E57BB2433C380E7B7EC8CB56CC4F74673 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x39CF SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x4810 JUMP JUMPDEST PUSH2 0x39F2 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x3A19 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FFDF5EF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3A24 DUP8 DUP8 DUP6 PUSH2 0x483D JUMP JUMPDEST PUSH2 0x3A2F PUSH1 0x9E DUP8 PUSH2 0x488C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3ABC DUP9 DUP9 DUP9 DUP9 PUSH2 0x3A40 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP13 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A6D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AB0 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x9D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x48E1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AD4 PUSH2 0x3AC9 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x9F SWAP1 DUP11 DUP9 DUP8 PUSH2 0x41E0 JUMP JUMPDEST DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x3AFB SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP6 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3BD4419F8DEFEC88DD042E31B8E8743F00803AED288FE7C31C9CF0689D295CF2 DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x3B60 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3B7B PUSH2 0x4A2E JUMP JUMPDEST PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1E3D PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3BA8 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3BB5 PUSH1 0x0 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0x3BC3 PUSH1 0x0 PUSH3 0xF4240 PUSH2 0x4A48 JUMP JUMPDEST PUSH2 0xF13 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH2 0x4B1A JUMP JUMPDEST PUSH2 0x3BDD PUSH2 0x3B73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BE7 PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x3BFA PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x4BA7 JUMP JUMPDEST PUSH2 0xEAC PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3C17 DUP5 DUP5 DUP5 PUSH2 0x4BE8 JUMP JUMPDEST DUP2 DUP6 DUP6 DUP6 SWAP1 SWAP2 SWAP3 SWAP4 PUSH2 0xC4C JUMPI PUSH1 0x40 MLOAD PUSH4 0x871E13D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP3 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP2 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE SWAP1 SWAP2 PUSH2 0x3CC0 SWAP1 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x3CE0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42DAADAF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT PUSH2 0x3CF7 JUMPI DUP2 PUSH2 0x1C8F JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x80 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP1 DUP4 SWAP1 PUSH2 0x3D5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x107349A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x60 ADD MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3D78 DUP6 PUSH2 0x4BFF JUMP JUMPDEST SWAP1 POP TIMESTAMP DUP2 PUSH1 0x40 ADD MLOAD GT ISZERO PUSH2 0x3DA0 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x1 SWAP2 POP PUSH2 0x3E5B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3DB7 SWAP2 SWAP1 PUSH2 0x5F1A JUMP JUMPDEST DUP5 MLOAD SWAP2 SWAP4 POP SWAP2 POP PUSH2 0x3DCC SWAP1 PUSH1 0x68 SWAP1 DUP4 SWAP1 PUSH2 0x415B JUMP JUMPDEST DUP3 MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD DUP2 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH32 0x4C06B68820628A39C787D2DB1FAA0EEACD7B9474847B198B1E871FE6E5B93F44 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP3 MLOAD PUSH2 0x3E22 SWAP1 DUP4 PUSH2 0x5D2B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP6 POP PUSH1 0x0 DUP7 SWAP5 POP SWAP5 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP8 PUSH1 0x3 ADD SLOAD DUP4 GT ISZERO PUSH2 0x3EB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A411B9D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 ISZERO PUSH2 0x3EBE JUMPI DUP4 PUSH2 0x3EC4 JUMP JUMPDEST DUP9 PUSH1 0x3 ADD SLOAD JUMPDEST DUP10 SLOAD SWAP1 SWAP5 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3ED9 JUMPI POP PUSH1 0x0 DUP6 GT JUMPDEST ISZERO PUSH2 0x3F32 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3EEF DUP4 DUP10 DUP13 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x3F00 JUMPI POP POP PUSH2 0x3F32 JUMP JUMPDEST SWAP7 POP DUP7 PUSH2 0x3F0E DUP13 DUP13 DUP12 PUSH2 0x4C8D JUMP JUMPDEST SWAP3 POP DUP7 PUSH2 0x3F1A DUP2 PUSH2 0x5F40 JUMP JUMPDEST SWAP8 POP POP DUP4 DUP1 PUSH2 0x3F28 SWAP1 PUSH2 0x5F57 JUMP JUMPDEST SWAP5 POP POP POP POP PUSH2 0x3ECA JUMP JUMPDEST POP SWAP9 SWAP4 SWAP8 POP SWAP3 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SLOAD SWAP2 ADD MSTORE DUP3 SWAP1 ISZERO PUSH2 0x3F96 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2D3E5FB9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP4 DUP5 MSTORE SWAP4 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP6 SWAP1 SWAP4 MSTORE SWAP1 SWAP4 KECCAK256 SWAP1 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP1 MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4014 DUP5 DUP5 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x4080 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP5 SWAP2 PUSH2 0x40A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x6 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40BC DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x4128 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x414E JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP TIMESTAMP PUSH1 0x4 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x4168 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP1 DUP3 LT ISZERO PUSH2 0x41AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x5F8EC709 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x41D6 SWAP1 DUP5 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST DUP2 ISZERO PUSH2 0x3974 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x420A SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x872D0489 DUP7 ADDRESS DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x423E SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F70 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x425B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427F SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 DUP2 GT ISZERO PUSH2 0x42AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x5F8EC709 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP7 SWAP3 SWAP1 PUSH2 0x42D7 SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x872D0489 DUP6 ADDRESS DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4318 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F70 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4335 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4359 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x4394 JUMPI PUSH2 0x438F DUP3 PUSH2 0x4D14 JUMP JUMPDEST PUSH2 0x1C8F JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x43AB JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x43CB JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP DUP1 PUSH2 0x1C8F JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4429 DUP4 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x443C JUMPI POP PUSH2 0x443C DUP3 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP4 DUP4 SWAP1 SWAP2 PUSH2 0x4466 JUMPI PUSH1 0x40 MLOAD PUSH4 0x768BF0EB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP PUSH3 0xF4240 SWAP1 POP PUSH2 0x4477 DUP4 DUP6 PUSH2 0x5E36 JUMP JUMPDEST PUSH2 0x1C8F SWAP2 SWAP1 PUSH2 0x5F99 JUMP JUMPDEST DUP2 PUSH1 0x0 SUB PUSH2 0x44A2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F4C63D9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x44CE PUSH2 0x44AD PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x68 SWAP2 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP1 PUSH2 0x41E0 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x2 DUP1 DUP3 ADD SLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT ADDRESS PUSH1 0x60 SWAP1 DUP2 SHL DUP3 AND DUP4 DUP10 ADD MSTORE DUP12 SWAP1 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x48 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD DUP1 DUP3 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0x68 DUP2 ADD DUP1 DUP7 MSTORE DUP3 MLOAD SWAP3 DUP8 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0xE8 DUP3 ADD DUP7 MSTORE DUP10 DUP4 MSTORE TIMESTAMP PUSH1 0x88 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0xA8 DUP4 ADD DUP11 DUP2 MSTORE PUSH1 0xC8 SWAP1 SWAP4 ADD DUP10 DUP2 MSTORE DUP3 DUP11 MSTORE PUSH1 0x69 SWAP1 SWAP9 MSTORE SWAP6 SWAP1 SWAP8 KECCAK256 SWAP2 MLOAD DUP3 SSTORE SWAP4 MLOAD PUSH1 0x1 DUP3 ADD SSTORE SWAP3 MLOAD SWAP1 DUP4 ADD SSTORE SWAP2 MLOAD PUSH1 0x3 SWAP2 DUP3 ADD SSTORE DUP2 ADD SLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0x459C JUMPI PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD DUP2 SWAP1 SSTORE JUMPDEST PUSH2 0x45A6 DUP3 DUP3 PUSH2 0x4D3D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0x5D9E2C5278E41138269F5F980CFBEA016D8C59816754502ABC4D2F87AAEA987F SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH2 0x4627 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4646 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x466A SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10BA3930B739B332B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46AE DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x471A SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x4740 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP TIMESTAMP PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4759 DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x47C5 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x47EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x0 PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4804 DUP4 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1141 DUP2 DUP4 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xECB PUSH2 0x481D PUSH2 0x4DD0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4852 PUSH2 0x484C DUP6 DUP6 PUSH2 0x397B JUMP JUMPDEST DUP4 PUSH2 0x4DDA JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP3 AND EQ PUSH2 0x4884 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8C5B935D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SLOAD SWAP2 ADD MSTORE DUP2 SWAP1 ISZERO PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0x81736271 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0x48E9 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x496A SWAP1 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO DUP6 SWAP1 PUSH2 0x498B JUMPI PUSH1 0x40 MLOAD PUSH4 0xBC4DEF5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP6 DUP7 MSTORE DUP2 DUP4 ADD SWAP5 DUP6 MSTORE TIMESTAMP PUSH1 0x60 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH1 0x80 DUP5 ADD DUP2 DUP2 MSTORE PUSH1 0xA0 DUP6 ADD DUP3 DUP2 MSTORE PUSH1 0xC0 DUP7 ADD SWAP8 DUP9 MSTORE PUSH1 0xE0 DUP7 ADD DUP4 DUP2 MSTORE SWAP11 DUP13 AND DUP4 MSTORE SWAP12 SWAP1 SWAP4 MSTORE SWAP4 SWAP1 SWAP4 KECCAK256 DUP3 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP10 AND SWAP9 SWAP1 SWAP9 OR DUP9 SSTORE SWAP5 MLOAD PUSH1 0x1 DUP9 ADD SSTORE SWAP3 MLOAD PUSH1 0x2 DUP8 ADD SSTORE MLOAD PUSH1 0x3 DUP7 ADD SSTORE SWAP2 MLOAD PUSH1 0x4 DUP6 ADD SSTORE SWAP4 MLOAD PUSH1 0x5 DUP5 ADD SSTORE MLOAD PUSH1 0x6 DUP4 ADD SSTORE MLOAD PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4A38 PUSH2 0x1E70 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF DUP1 DUP3 AND SWAP1 DUP4 AND GT ISZERO PUSH2 0x4A76 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST POP DUP3 SWAP1 POP DUP2 PUSH4 0xFFFFFFFF DUP2 AND PUSH3 0xF4240 LT ISZERO PUSH2 0x4AA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH4 0xFFFFFFFF DUP4 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH4 0xFFFFFFFF PUSH1 0xA0 SHL NOT SWAP2 DUP7 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 SWAP1 SWAP2 AND PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2FE5A7039987697813605CC0B9D6DB7AAB575408E3FC59E8A457BEF8D7BC0A36 SWAP1 PUSH2 0x1F5B SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x52CA JUMP JUMPDEST DUP2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 AND SWAP1 DUP4 AND GT ISZERO PUSH2 0x4B4B JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5366 JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x40 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND SWAP1 DUP6 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2867E04C500E438761486B78021D4F9EB97C77FF45D10C1183F5583BA4CBF7D1 SWAP1 PUSH2 0x1F5B SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x5366 JUMP JUMPDEST PUSH2 0x4BAF PUSH2 0x3B73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4BB9 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x2 DUP2 ADD PUSH2 0x4BC9 DUP5 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x3 DUP2 ADD PUSH2 0x4BD8 DUP4 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x0 DUP1 DUP3 SSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 LT ISZERO DUP1 ISZERO PUSH2 0x2407 JUMPI POP POP SWAP1 SWAP2 GT ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4C2D PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE DUP4 SWAP1 PUSH2 0x215B JUMPI PUSH1 0x40 MLOAD PUSH4 0x107349A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x3 ADD SLOAD GT PUSH2 0x4CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDDAF8F21 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4CC6 DUP6 PUSH1 0x0 ADD SLOAD DUP6 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x4CD9 DUP6 PUSH1 0x0 ADD SLOAD DUP5 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 DUP6 PUSH1 0x3 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x4CEE SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP DUP1 DUP6 SSTORE PUSH1 0x3 DUP6 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x4D0A JUMPI PUSH1 0x0 PUSH1 0x1 DUP7 ADD SSTORE JUMPDEST POP POP SWAP2 SLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x4D24 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA12F521 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP3 PUSH1 0x3 ADD SLOAD LT PUSH2 0x4D63 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A8C56B PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x4D81 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F4A893D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 DUP4 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP4 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4D9D SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x4DB2 JUMPI DUP1 DUP3 SSTORE JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x4DC7 SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC6A PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x4DEA DUP7 DUP7 PUSH2 0x4E78 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x4DFA DUP3 DUP3 PUSH2 0x4EC5 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x4E2F PUSH2 0x4F7E JUMP JUMPDEST PUSH2 0x4E37 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x41 SUB PUSH2 0x4EB2 JUMPI PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x4EA4 DUP9 DUP3 DUP6 DUP6 PUSH2 0x5026 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x4EBE JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x0 SWAP2 POP PUSH1 0x2 SWAP1 JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4ED9 JUMPI PUSH2 0x4ED9 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4EE2 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4EF6 JUMPI PUSH2 0x4EF6 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4F14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF645EEDF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4F28 JUMPI PUSH2 0x4F28 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4F49 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCE698F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x3 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4F5D JUMPI PUSH2 0x4F5D PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0xEAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x35E2F383 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4F89 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F95 PUSH2 0x2C93 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x4FAD JUMPI DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 SLOAD DUP1 ISZERO PUSH2 0x4FBC JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4FF0 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4FFC PUSH2 0x2D34 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x5014 JUMPI DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD DUP1 ISZERO PUSH2 0x4FBC JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH16 0xA2A8918CA85BAFE22016D0B997E4DF60 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP5 GT ISZERO PUSH2 0x5057 JUMPI POP PUSH1 0x0 SWAP2 POP PUSH1 0x3 SWAP1 POP DUP3 PUSH2 0x50E1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP11 SWAP1 MSTORE PUSH1 0xFF DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x50AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x50D7 JUMPI POP PUSH1 0x0 SWAP3 POP PUSH1 0x1 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x50E1 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C8F DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x51A7 DUP2 PUSH2 0x516E JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x51CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C8F DUP2 PUSH2 0x516E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x51E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x51FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x522B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5236 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x525D DUP7 DUP3 DUP8 ADD PUSH2 0x51D5 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x528B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5296 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x52A6 DUP2 PUSH2 0x526A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x52FC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x52E4 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x531D DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x52E1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x534A PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x5305 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x535C DUP2 DUP6 PUSH2 0x5305 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x53A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x53B4 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x51A7 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0xFF PUSH1 0xF8 SHL DUP9 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x53E3 PUSH1 0xE0 DUP4 ADD DUP10 PUSH2 0x5305 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x53F5 DUP2 DUP10 PUSH2 0x5305 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD DUP7 SWAP1 MSTORE DUP4 DUP2 SUB PUSH1 0xC0 DUP6 ADD MSTORE DUP5 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP4 POP SWAP1 SWAP2 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x544B JUMPI DUP4 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x542D JUMP JUMPDEST POP SWAP1 SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x549E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x54AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x54C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP5 ADD ADD GT ISZERO PUSH2 0x54DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP1 DUP5 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP6 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP PUSH1 0x20 DUP7 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5543 JUMPI PUSH1 0x3F NOT DUP8 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x552E DUP6 DUP4 MLOAD PUSH2 0x5305 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5512 JUMP JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5565 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5570 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x5584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x559F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55AB DUP8 DUP3 DUP9 ADD PUSH2 0x51D5 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x55CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x55D5 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x52A6 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x561A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x526A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 DUP4 ADD PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 GT ISZERO PUSH2 0x56F3 JUMPI PUSH2 0x56F3 PUSH2 0x563F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x5721 JUMPI PUSH2 0x5721 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE SWAP1 POP DUP1 DUP3 DUP5 ADD DUP8 LT ISZERO PUSH2 0x5739 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP4 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x576B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x578D DUP7 DUP3 DUP8 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x57A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x57B5 DUP7 DUP3 DUP8 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x57C6 DUP2 PUSH2 0x513C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x57E5 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x5805 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1141 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x5832 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3974 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x583E JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x586B JUMPI PUSH2 0x586B PUSH2 0x563F JUMP JUMPDEST PUSH2 0x587F DUP2 PUSH2 0x5879 DUP5 SLOAD PUSH2 0x57D1 JUMP JUMPDEST DUP5 PUSH2 0x580B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 DUP2 EQ PUSH2 0x58B3 JUMPI PUSH1 0x0 DUP4 ISZERO PUSH2 0x589B JUMPI POP DUP5 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP6 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP5 SWAP1 SHL OR DUP5 SSTORE PUSH2 0x3974 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP6 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x58E3 JUMPI DUP8 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x58C3 JUMP JUMPDEST POP DUP5 DUP3 LT ISZERO PUSH2 0x5901 JUMPI DUP7 DUP5 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE DUP2 PUSH1 0x20 DUP3 ADD MSTORE DUP2 DUP4 PUSH1 0x40 DUP4 ADD CALLDATACOPY PUSH1 0x0 DUP2 DUP4 ADD PUSH1 0x40 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT AND ADD ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x5995 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x59AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP5 DUP3 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD PUSH1 0x0 DUP2 MSTORE DUP4 MLOAD PUSH2 0x59E1 DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0x52E1 JUMP JUMPDEST ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5A3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x40 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x5A50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A58 PUSH2 0x5655 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5A6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xA0 DUP2 DUP8 SUB SLT ISZERO PUSH2 0x5A80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A88 PUSH2 0x567D JUMP JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5A93 DUP2 PUSH2 0x513C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH2 0x5AA3 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH2 0x5AB6 DUP2 PUSH2 0x5A01 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5AF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5AFF DUP9 DUP3 DUP6 ADD PUSH2 0x56C2 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP DUP3 MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5B21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5B2D DUP7 DUP3 DUP6 ADD PUSH2 0x56C2 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5B59 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x5B85 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xECB DUP3 DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5BAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5BCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x5BE8 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5C0F DUP8 DUP3 DUP9 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5C26 DUP2 PUSH2 0x516E JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5C26 DUP2 PUSH2 0x5A01 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x5C4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x5C55 PUSH2 0x569F JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x5C79 PUSH1 0x60 DUP6 ADD PUSH2 0x5C1B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x5C8A PUSH1 0x80 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x5C9B PUSH1 0xA0 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x5CAC PUSH1 0xC0 DUP6 ADD PUSH2 0x5C1B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x5CBD PUSH1 0xE0 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5CEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x516E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x5A01 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5D50 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x52E1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH1 0x40 DUP1 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0x80 SHL SUB PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD SWAP1 POP PUSH1 0xA0 PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x5DE8 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x5305 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x5E05 DUP3 DUP3 PUSH2 0x5305 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5E20 DUP2 DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2407 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5305 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MSTORE DUP4 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD PUSH2 0x2407 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x5E85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x5E90 PUSH2 0x567D JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x5EFE PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x5305 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE POP PUSH1 0x40 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP1 SWAP2 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5F2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x52A6 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x5F4F JUMPI PUSH2 0x5F4F PUSH2 0x593F JUMP JUMPDEST POP PUSH1 0x0 NOT ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x5F69 JUMPI PUSH2 0x5F69 PUSH2 0x593F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5FB6 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 SDIV 0xE4 SWAP11 PUSH30 0x3D7F3015873A2C41E2F68419180F16CEF8FD91645F14BC8E8B733264736F PUSH13 0x634300081B0033000000000000 ", - "sourceMap": "1852:23230:50:-:0;;;3040:272;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3226:4;3233:14;3249:12;3263:8;3191:15;;-1:-1:-1;;;;;4295:24:33;;4287:81;;;;-1:-1:-1;;;4287:81:33;;866:2:62;4287:81:33;;;848:21:62;905:2;885:18;;;878:30;-1:-1:-1;;;924:18:62;;;917:40;974:18;;4287:81:33;;;;;;;;;-1:-1:-1;;;;;4379:42:33;;;;4457:40;;;;;;;;;;;;-1:-1:-1;;;4457:40:33;;;;;;:26;:40::i;:::-;-1:-1:-1;;;;;4431:67:33;;;4540:37;;;;;;;;;;;;-1:-1:-1;;;4540:37:33;;;;;;:26;:37::i;:::-;-1:-1:-1;;;;;4508:70:33;;;4620:43;;;;;;;;;;;;-1:-1:-1;;;4620:43:33;;;;;;:26;:43::i;:::-;-1:-1:-1;;;;;4588:76:33;;;4714:44;;;;;;;;;;;;-1:-1:-1;;;4714:44:33;;;;;;:26;:44::i;:::-;-1:-1:-1;;;;;4674:85:33;;;4805:42;;;;;;;;;;;;-1:-1:-1;;;4805:42:33;;;;;;:26;:42::i;:::-;-1:-1:-1;;;;;4769:79:33;;;4898:44;;;;;;;;;;;;-1:-1:-1;;;4898:44:33;;;;;;:26;:44::i;:::-;-1:-1:-1;;;;;4858:85:33;;;4989:47;;;;;;;;;;;;-1:-1:-1;;;4989:47:33;;;;;;:26;:47::i;:::-;-1:-1:-1;;;;;4953:84:33;;;5084:45;;;;;;;;;;;;-1:-1:-1;;;5084:45:33;;;;;;:26;:45::i;:::-;-1:-1:-1;;;;;5047:83:33;;;5167:38;;;;;;;;;;;;-1:-1:-1;;;5167:38:33;;;;;;:26;:38::i;:::-;-1:-1:-1;;;;;5140:66:33;;;;;;;5420:16;;5303:13;;5269:11;;5339:14;;5376:21;;5459:19;;5501:21;;5545:19;;5587:17;;5222:430;;;;;;;;;;;;;;;;;;;5587:17;;-1:-1:-1;;;;;1336:32:62;;;1318:51;;1405:32;;;1400:2;1385:18;;1378:60;1474:32;;;1469:2;1454:18;;1447:60;1543:32;;;1538:2;1523:18;;1516:60;1613:32;;1607:3;1592:19;;1585:61;1683:32;;1356:3;1662:19;;1655:61;1753:32;;;1747:3;1732:19;;1725:61;1305:3;1290:19;;1003:789;5222:430:33;;;;;;;;-1:-1:-1;;;;;;;2692:52:61;;;;;;;2754:49;;;;;;;2813:43;;;;;;;2866:30;;;;;;;2912:92;;;2028:51:62;;;2110:2;2095:18;;2088:60;;;;2164:18;;;2157:60;;;;2248:2;2233:18;;2226:60;;;;2912:92:61;;2015:3:62;2000:19;2912:92:61;;;;;;;2581:430;;;;3283:22:50::2;:20;;;:22;;:::i;:::-;3040:272:::0;;;;1852:23230;;7673:326:33;7759:7;7778:23;7804:16;;-1:-1:-1;;;;;7804:33:33;;7848:13;7838:24;;;;;;7804:59;;;;;;;;;;;;;2443:25:62;;2431:2;2416:18;;2297:177;7804:59:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7778:85;-1:-1:-1;7945:13:33;-1:-1:-1;;;;;7881:29:33;;7873:87;;;;-1:-1:-1;;;7873:87:33;;;;;;;;:::i;:::-;-1:-1:-1;7977:15:33;7673:326;-1:-1:-1;;7673:326:33:o;7711:422:35:-;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:35;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:35;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:35;-1:-1:-1;;;;;8035:33:35;;;;;8087:29;;3366:50:62;;;8087:29:35;;3354:2:62;3339:18;8087:29:35;;;;;;;7981:146;7760:373;7711:422::o;14:177:62:-;93:13;;-1:-1:-1;;;;;135:31:62;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;2479:208::-;2549:6;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2641:40;2671:9;2641:40;:::i;:::-;2631:50;2479:208;-1:-1:-1;;;2479:208:62:o;2692:525::-;2839:2;2828:9;2821:21;2802:4;2871:6;2865:13;2914:6;2909:2;2898:9;2894:18;2887:34;2939:1;2949:140;2963:6;2960:1;2957:13;2949:140;;;3074:2;3058:14;;;3054:23;;3048:30;3043:2;3024:17;;;3020:26;3013:66;2978:10;2949:140;;;2953:3;3138:1;3133:2;3124:6;3113:9;3109:22;3105:31;3098:42;3208:2;3201;3197:7;3192:2;3184:6;3180:15;3176:29;3165:9;3161:45;3157:54;3149:62;;;2692:525;;;;:::o;3222:200::-;1852:23230:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_EIP712NameHash_5718": { - "entryPoint": 20350, - "id": 5718, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_EIP712Name_5650": { - "entryPoint": 11411, - "id": 5650, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_EIP712VersionHash_5770": { - "entryPoint": 20453, - "id": 5770, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_EIP712Version_5666": { - "entryPoint": 11572, - "id": 5666, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@__AllocationManager_init_12271": { - "entryPoint": 7893, - "id": 12271, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@__AllocationManager_init_unchained_12282": { - "entryPoint": 15364, - "id": 12282, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@__DataServicePausable_init_1156": { - "entryPoint": 7877, - "id": 1156, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@__DataServicePausable_init_unchained_1163": { - "entryPoint": null, - "id": 1163, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@__DataService_init_642": { - "entryPoint": 7853, - "id": 642, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@__DataService_init_unchained_649": { - "entryPoint": null, - "id": 649, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@__EIP712_init_5484": { - "entryPoint": 15346, - "id": 5484, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@__EIP712_init_unchained_5524": { - "entryPoint": 19367, - "id": 5524, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@__Multicall_init_5167": { - "entryPoint": 7845, - "id": 5167, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@__Ownable_init_4708": { - "entryPoint": 7828, - "id": 4708, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@__Ownable_init_unchained_4735": { - "entryPoint": 15256, - "id": 4735, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@__Pausable_init_unchained_5321": { - "entryPoint": 15317, - "id": 5321, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@__ProvisionManager_init_unchained_1760": { - "entryPoint": 15264, - "id": 1760, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_acceptProvisionParameters_1778": { - "entryPoint": 14600, - "id": 1778, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_allocate_12401": { - "entryPoint": 14826, - "id": 12401, - "parameterSlots": 6, - "returnSlots": 1 - }, - "@_buildDomainSeparator_5557": { - "entryPoint": 19972, - "id": 5557, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_buildStakeClaimId_1051": { - "entryPoint": null, - "id": 1051, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_checkInitializing_5024": { - "entryPoint": 15219, - "id": 5024, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_checkOwner_4776": { - "entryPoint": 8209, - "id": 4776, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_checkProvisionParameters_1959": { - "entryPoint": 18425, - "id": 1959, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_checkProvisionParameters_2015": { - "entryPoint": 8596, - "id": 2015, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_checkProvisionTokens_1920": { - "entryPoint": 14578, - "id": 1920, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_checkProvisionTokens_1936": { - "entryPoint": 8546, - "id": 1936, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_checkValueInRange_2127": { - "entryPoint": 15372, - "id": 2127, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_closeAllocation_12890": { - "entryPoint": 10054, - "id": 12890, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_collectIndexingRewards_12657": { - "entryPoint": 13102, - "id": 12657, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@_collectQueryFees_10661": { - "entryPoint": 11817, - "id": 10661, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_contextSuffixLength_5147": { - "entryPoint": null, - "id": 5147, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_curation_13389": { - "entryPoint": 17398, - "id": 13389, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_deleteStakeClaim_970": { - "entryPoint": 15970, - "id": 970, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_disputeManager_13369": { - "entryPoint": 14542, - "id": 13369, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_domainSeparatorV4_5534": { - "entryPoint": 19920, - "id": 5534, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_encodeAllocationProof_12977": { - "entryPoint": 14715, - "id": 12977, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_getDelegationRatio_2024": { - "entryPoint": null, - "id": 2024, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getEIP712Storage_5468": { - "entryPoint": 11375, - "id": 5468, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getInitializableStorage_5101": { - "entryPoint": 7792, - "id": 5101, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getNextStakeClaim_1028": { - "entryPoint": 15614, - "id": 1028, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_getOwnableStorage_4679": { - "entryPoint": 11601, - "id": 4679, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getPausableStorage_5277": { - "entryPoint": 9636, - "id": 5277, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getProvisionTokensRange_2037": { - "entryPoint": null, - "id": 2037, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@_getProvision_2100": { - "entryPoint": 8295, - "id": 2100, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_getStakeClaim_999": { - "entryPoint": 19455, - "id": 999, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_getThawingPeriodRange_10452": { - "entryPoint": 9795, - "id": 10452, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@_getVerifierCutRange_10469": { - "entryPoint": 9517, - "id": 10469, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@_get_11673": { - "entryPoint": 15424, - "id": 11673, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_graphEpochManager_4580": { - "entryPoint": null, - "id": 4580, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_graphRewardsManager_4590": { - "entryPoint": 16356, - "id": 4590, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_graphStaking_4540": { - "entryPoint": 8259, - "id": 4540, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_graphToken_4530": { - "entryPoint": 17362, - "id": 4530, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_hashTypedDataV4_5573": { - "entryPoint": 18448, - "id": 5573, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_isInitializing_5092": { - "entryPoint": 18990, - "id": 5092, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_isOverAllocated_12997": { - "entryPoint": 11637, - "id": 12997, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_lockStake_833": { - "entryPoint": 17537, - "id": 833, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_migrateLegacyAllocation_12307": { - "entryPoint": 9971, - "id": 12307, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_msgSender_5130": { - "entryPoint": null, - "id": 5130, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_pause_5402": { - "entryPoint": 11304, - "id": 5402, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_processStakeClaim_958": { - "entryPoint": 15721, - "id": 958, - "parameterSlots": 2, - "returnSlots": 2 - }, - "@_releaseStake_880": { - "entryPoint": 9344, - "id": 880, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_requireNotPaused_5365": { - "entryPoint": 8820, - "id": 5365, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_requirePaused_5378": { - "entryPoint": 9231, - "id": 5378, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_resizeAllocation_12823": { - "entryPoint": 10396, - "id": 12823, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@_revert_6126": { - "entryPoint": 19732, - "id": 6126, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setDelegationRatio_1793": { - "entryPoint": 8039, - "id": 1793, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setMaxPOIStaleness_12925": { - "entryPoint": 9918, - "id": 12925, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setPauseGuardian_1185": { - "entryPoint": 8945, - "id": 1185, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setProvisionTokensRange_1825": { - "entryPoint": 7921, - "id": 1825, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setRewardsDestination_12910": { - "entryPoint": 8858, - "id": 12910, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setStakeToFeesRatio_10683": { - "entryPoint": 8123, - "id": 10683, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setThawingPeriodRange_1900": { - "entryPoint": 19226, - "id": 1900, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setVerifierCutRange_1868": { - "entryPoint": 19016, - "id": 1868, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_tapCollector_13379": { - "entryPoint": null, - "id": 13379, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_throwError_6729": { - "entryPoint": 20165, - "id": 6729, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_transferOwnership_4847": { - "entryPoint": 9703, - "id": 4847, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_unpause_5426": { - "entryPoint": 9268, - "id": 5426, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_verifyAllocationProof_13029": { - "entryPoint": 18493, - "id": 13029, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@acceptProvisionPendingParameters_9774": { - "entryPoint": 6996, - "id": 9774, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@addTail_3895": { - "entryPoint": 19773, - "id": 3895, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@allocationProvisionTracker_13053": { - "entryPoint": null, - "id": 13053, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@allocations_13042": { - "entryPoint": null, - "id": 13042, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@check_1554": { - "entryPoint": 17125, - "id": 1554, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@claimsLists_1075": { - "entryPoint": null, - "id": 1075, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@claims_1069": { - "entryPoint": null, - "id": 1069, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@clearPendingRewards_11496": { - "entryPoint": 18253, - "id": 11496, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@close_11534": { - "entryPoint": 16560, - "id": 11534, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@collect_10008": { - "entryPoint": 5993, - "id": 10008, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@create_11382": { - "entryPoint": 18657, - "id": 11382, - "parameterSlots": 6, - "returnSlots": 1 - }, - "@curationFeesCut_10700": { - "entryPoint": null, - "id": 10700, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@delegationRatio_2152": { - "entryPoint": null, - "id": 2152, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@eip712Domain_5634": { - "entryPoint": 5393, - "id": 5634, - "parameterSlots": 0, - "returnSlots": 7 - }, - "@encodeAllocationProof_10402": { - "entryPoint": 7299, - "id": 10402, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@exists_11602": { - "entryPoint": null, - "id": 11602, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@exists_12052": { - "entryPoint": null, - "id": 12052, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@feesProvisionTracker_1063": { - "entryPoint": null, - "id": 1063, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@forceCloseAllocation_10108": { - "entryPoint": 5589, - "id": 10108, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionDelegateCall_6046": { - "entryPoint": 11699, - "id": 6046, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@getAllocationData_10340": { - "entryPoint": null, - "id": 10340, - "parameterSlots": 1, - "returnSlots": 5 - }, - "@getAllocation_10301": { - "entryPoint": 2646, - "id": 10301, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getDelegationRatio_695": { - "entryPoint": null, - "id": 695, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getLegacyAllocation_10385": { - "entryPoint": null, - "id": 10385, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getProvisionTokensRange_685": { - "entryPoint": 4933, - "id": 685, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@getSubgraphAllocatedTokens_10354": { - "entryPoint": null, - "id": 10354, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getThawingPeriodRange_661": { - "entryPoint": 4360, - "id": 661, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@getVerifierCutRange_673": { - "entryPoint": 3871, - "id": 673, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@get_11554": { - "entryPoint": 9048, - "id": 11554, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@indexers_10694": { - "entryPoint": 3890, - "id": 10694, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@initialize_9644": { - "entryPoint": 2776, - "id": 9644, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@isActiveAllocation_10370": { - "entryPoint": 4218, - "id": 10370, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isAltruistic_11640": { - "entryPoint": 11668, - "id": 11640, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isInRange_4289": { - "entryPoint": 19432, - "id": 4289, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@isOpen_11621": { - "entryPoint": 9672, - "id": 11621, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isOverAllocated_10435": { - "entryPoint": 6647, - "id": 10435, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isStaleAllocation_10420": { - "entryPoint": 3760, - "id": 10420, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isStale_11587": { - "entryPoint": 9170, - "id": 11587, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@isValidPPM_4261": { - "entryPoint": null, - "id": 4261, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@legacyAllocations_13048": { - "entryPoint": null, - "id": 13048, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@lock_1480": { - "entryPoint": 16864, - "id": 1480, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@maxPOIStaleness_13056": { - "entryPoint": null, - "id": 13056, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@max_6991": { - "entryPoint": 15592, - "id": 6991, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@maximumProvisionTokens_2137": { - "entryPoint": null, - "id": 2137, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@maximumThawingPeriod_2143": { - "entryPoint": null, - "id": 2143, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@maximumVerifierCut_2149": { - "entryPoint": null, - "id": 2149, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@migrateLegacyAllocation_10170": { - "entryPoint": 4398, - "id": 10170, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@migrate_11990": { - "entryPoint": 16193, - "id": 11990, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@minimumProvisionTokens_2134": { - "entryPoint": null, - "id": 2134, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@minimumThawingPeriod_2140": { - "entryPoint": null, - "id": 2140, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@minimumVerifierCut_2146": { - "entryPoint": null, - "id": 2146, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@mulPPM_4219": { - "entryPoint": 17434, - "id": 4219, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@multicall_5250": { - "entryPoint": 5762, - "id": 5250, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@owner_4759": { - "entryPoint": 5562, - "id": 4759, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@pauseGuardians_1101": { - "entryPoint": null, - "id": 1101, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@pause_1130": { - "entryPoint": 5327, - "id": 1130, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@paused_5353": { - "entryPoint": 4197, - "id": 5353, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@presentPOI_11420": { - "entryPoint": 18082, - "id": 11420, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@pushTokens_578": { - "entryPoint": 17907, - "id": 578, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@recover_6486": { - "entryPoint": 19930, - "id": 6486, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@register_9744": { - "entryPoint": 3183, - "id": 9744, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@releaseStake_746": { - "entryPoint": 3861, - "id": 746, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@release_1518": { - "entryPoint": 16731, - "id": 1518, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@removeHead_3969": { - "entryPoint": 19597, - "id": 3969, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@renounceOwnership_4790": { - "entryPoint": 4342, - "id": 4790, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@resizeAllocation_10150": { - "entryPoint": 4949, - "id": 10150, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@revertIfExists_12034": { - "entryPoint": 18572, - "id": 12034, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@rewardsDestination_13061": { - "entryPoint": null, - "id": 13061, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@setCurationCut_10286": { - "entryPoint": 4422, - "id": 10286, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setDelegationRatio_10230": { - "entryPoint": 3158, - "id": 10230, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setMaxPOIStaleness_10258": { - "entryPoint": 4381, - "id": 10258, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setMinimumProvisionTokens_10216": { - "entryPoint": 5307, - "id": 10216, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setPauseGuardian_10187": { - "entryPoint": 3738, - "id": 10187, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setRewardsDestination_10201": { - "entryPoint": 4371, - "id": 10201, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setStakeToFeesRatio_10244": { - "entryPoint": 7716, - "id": 10244, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@slash_10052": { - "entryPoint": 6677, - "id": 10052, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@snapshotRewards_11459": { - "entryPoint": 16392, - "id": 11459, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@stakeToFeesRatio_10697": { - "entryPoint": null, - "id": 10697, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@startService_9831": { - "entryPoint": 7318, - "id": 9831, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@stopService_9882": { - "entryPoint": 4538, - "id": 9882, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@subgraphAllocatedTokens_13066": { - "entryPoint": null, - "id": 13066, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@toTypedDataHash_6803": { - "entryPoint": null, - "id": 6803, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@transferOwnership_4818": { - "entryPoint": 7733, - "id": 4818, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@traverse_4086": { - "entryPoint": 16007, - "id": 4086, - "parameterSlots": 6, - "returnSlots": 2 - }, - "@tryRecover_6456": { - "entryPoint": 20088, - "id": 6456, - "parameterSlots": 2, - "returnSlots": 3 - }, - "@tryRecover_6644": { - "entryPoint": 20518, - "id": 6644, - "parameterSlots": 4, - "returnSlots": 3 - }, - "@unpause_1143": { - "entryPoint": 3793, - "id": 1143, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@verifyCallResultFromTarget_6086": { - "entryPoint": 17279, - "id": 6086, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_bytes_calldata": { - "entryPoint": 20949, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_string": { - "entryPoint": 22210, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 20817, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_payable": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_payable_fromMemory": { - "entryPoint": 23898, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_payablet_bytes32": { - "entryPoint": 23355, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 21943, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_addresst_bytes32": { - "entryPoint": 21396, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_addresst_uint256": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_bool": { - "entryPoint": 21112, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { - "entryPoint": 21014, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_enum$_PaymentTypes_$2166t_bytes_calldata_ptr": { - "entryPoint": 21839, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": 21621, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 22024, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes32": { - "entryPoint": 21169, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes32t_uint256t_address_payablet_bytes_memory_ptr": { - "entryPoint": 23481, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_payable": { - "entryPoint": 22358, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory": { - "entryPoint": 24178, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory": { - "entryPoint": 23606, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_SignedRAV_$2546_memory_ptr": { - "entryPoint": 23062, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256_fromMemory": { - "entryPoint": 23768, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256t_address_payable_fromMemory": { - "entryPoint": 24346, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint256t_uint256": { - "entryPoint": 23447, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint256t_uint32t_uint256": { - "entryPoint": 20864, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_uint32": { - "entryPoint": 20920, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint32_fromMemory": { - "entryPoint": 23793, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint64_fromMemory": { - "entryPoint": 23822, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_uint32_fromMemory": { - "entryPoint": 23579, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_uint64_fromMemory": { - "entryPoint": 23595, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_enum_PaymentTypes": { - "entryPoint": 23399, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_string": { - "entryPoint": 21253, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_calldata_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 22980, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 23870, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": 21376, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": 22053, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed": { - "entryPoint": 21989, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_enum$_PaymentTypes_$2166__to_t_address_t_address_t_uint8__fromStack_reversed": { - "entryPoint": 24141, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": { - "entryPoint": 24263, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_uint32__to_t_address_t_address_t_uint32__fromStack_reversed": { - "entryPoint": 24432, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bytes32__to_t_address_t_bytes32__fromStack_reversed": { - "entryPoint": 21596, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 6, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 9, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 21738, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__to_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 21444, - "id": null, - "parameterSlots": 8, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_address_t_address__to_t_bytes32_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 6, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_uint256__to_t_bytes32_t_bytes32_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 22800, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__to_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": 24299, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_enum$_PaymentTypes_$2166__to_t_uint8__fromStack_reversed": { - "entryPoint": 23433, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_enum$_PaymentTypes_$2166_t_bytes_memory_ptr__to_t_uint8_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 24086, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_rational_0_by_1_t_address__to_t_uint8_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__to_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__fromStack_reversed": { - "entryPoint": 23927, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_State_$11307_memory_ptr__to_t_struct$_State_$11307_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_State_$11933_memory_ptr__to_t_struct$_State_$11933_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_string_memory_ptr_t_string_memory_ptr__to_t_uint256_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 21297, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32__to_t_uint256_t_uint256_t_uint256_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 6, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32_t_uint32__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32_t_uint32__to_t_uint32_t_uint32__fromStack_reversed": { - "entryPoint": 21194, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64_t_uint64__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed": { - "entryPoint": 21350, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "access_calldata_tail_t_bytes_calldata_ptr": { - "entryPoint": 22910, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "allocate_memory": { - "entryPoint": 22141, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "allocate_memory_4281": { - "entryPoint": 22101, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "allocate_memory_4284": { - "entryPoint": 22175, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "array_dataslot_string_storage": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "calldata_array_index_range_access_t_bytes_calldata_ptr": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 2 - }, - "checked_add_t_uint256": { - "entryPoint": 23851, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint256": { - "entryPoint": 24473, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_mul_t_uint256": { - "entryPoint": 24118, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 22869, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "clean_up_bytearray_end_slots_string_storage": { - "entryPoint": 22539, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": { - "entryPoint": 22610, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "copy_memory_to_memory_with_cleanup": { - "entryPoint": 21217, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "decrement_t_uint256": { - "entryPoint": 24384, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "extract_byte_array_length": { - "entryPoint": 22481, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "extract_used_part_and_set_length_of_short_byte_array": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 24407, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 22847, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x21": { - "entryPoint": 23019, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 22888, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 22079, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_address": { - "entryPoint": 20796, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_bool": { - "entryPoint": 21098, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_uint32": { - "entryPoint": 20846, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_uint64": { - "entryPoint": 23041, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nativeSrc": "0:39589:62", - "nodeType": "YulBlock", - "src": "0:39589:62", - "statements": [ - { - "nativeSrc": "6:3:62", - "nodeType": "YulBlock", - "src": "6:3:62", - "statements": [] - }, - { - "body": { - "nativeSrc": "59:86:62", - "nodeType": "YulBlock", - "src": "59:86:62", - "statements": [ - { - "body": { - "nativeSrc": "123:16:62", - "nodeType": "YulBlock", - "src": "123:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "132:1:62", - "nodeType": "YulLiteral", - "src": "132:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "135:1:62", - "nodeType": "YulLiteral", - "src": "135:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "125:6:62", - "nodeType": "YulIdentifier", - "src": "125:6:62" - }, - "nativeSrc": "125:12:62", - "nodeType": "YulFunctionCall", - "src": "125:12:62" - }, - "nativeSrc": "125:12:62", - "nodeType": "YulExpressionStatement", - "src": "125:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "82:5:62", - "nodeType": "YulIdentifier", - "src": "82:5:62" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "93:5:62", - "nodeType": "YulIdentifier", - "src": "93:5:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "108:3:62", - "nodeType": "YulLiteral", - "src": "108:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "113:1:62", - "nodeType": "YulLiteral", - "src": "113:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "104:3:62", - "nodeType": "YulIdentifier", - "src": "104:3:62" - }, - "nativeSrc": "104:11:62", - "nodeType": "YulFunctionCall", - "src": "104:11:62" - }, - { - "kind": "number", - "nativeSrc": "117:1:62", - "nodeType": "YulLiteral", - "src": "117:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "100:3:62", - "nodeType": "YulIdentifier", - "src": "100:3:62" - }, - "nativeSrc": "100:19:62", - "nodeType": "YulFunctionCall", - "src": "100:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "89:3:62", - "nodeType": "YulIdentifier", - "src": "89:3:62" - }, - "nativeSrc": "89:31:62", - "nodeType": "YulFunctionCall", - "src": "89:31:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "79:2:62", - "nodeType": "YulIdentifier", - "src": "79:2:62" - }, - "nativeSrc": "79:42:62", - "nodeType": "YulFunctionCall", - "src": "79:42:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "72:6:62", - "nodeType": "YulIdentifier", - "src": "72:6:62" - }, - "nativeSrc": "72:50:62", - "nodeType": "YulFunctionCall", - "src": "72:50:62" - }, - "nativeSrc": "69:70:62", - "nodeType": "YulIf", - "src": "69:70:62" - } - ] - }, - "name": "validator_revert_address", - "nativeSrc": "14:131:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "48:5:62", - "nodeType": "YulTypedName", - "src": "48:5:62", - "type": "" - } - ], - "src": "14:131:62" - }, - { - "body": { - "nativeSrc": "220:177:62", - "nodeType": "YulBlock", - "src": "220:177:62", - "statements": [ - { - "body": { - "nativeSrc": "266:16:62", - "nodeType": "YulBlock", - "src": "266:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "275:1:62", - "nodeType": "YulLiteral", - "src": "275:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "278:1:62", - "nodeType": "YulLiteral", - "src": "278:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "268:6:62", - "nodeType": "YulIdentifier", - "src": "268:6:62" - }, - "nativeSrc": "268:12:62", - "nodeType": "YulFunctionCall", - "src": "268:12:62" - }, - "nativeSrc": "268:12:62", - "nodeType": "YulExpressionStatement", - "src": "268:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "241:7:62", - "nodeType": "YulIdentifier", - "src": "241:7:62" - }, - { - "name": "headStart", - "nativeSrc": "250:9:62", - "nodeType": "YulIdentifier", - "src": "250:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "237:3:62", - "nodeType": "YulIdentifier", - "src": "237:3:62" - }, - "nativeSrc": "237:23:62", - "nodeType": "YulFunctionCall", - "src": "237:23:62" - }, - { - "kind": "number", - "nativeSrc": "262:2:62", - "nodeType": "YulLiteral", - "src": "262:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "233:3:62", - "nodeType": "YulIdentifier", - "src": "233:3:62" - }, - "nativeSrc": "233:32:62", - "nodeType": "YulFunctionCall", - "src": "233:32:62" - }, - "nativeSrc": "230:52:62", - "nodeType": "YulIf", - "src": "230:52:62" - }, - { - "nativeSrc": "291:36:62", - "nodeType": "YulVariableDeclaration", - "src": "291:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "317:9:62", - "nodeType": "YulIdentifier", - "src": "317:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "304:12:62", - "nodeType": "YulIdentifier", - "src": "304:12:62" - }, - "nativeSrc": "304:23:62", - "nodeType": "YulFunctionCall", - "src": "304:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "295:5:62", - "nodeType": "YulTypedName", - "src": "295:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "361:5:62", - "nodeType": "YulIdentifier", - "src": "361:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "336:24:62", - "nodeType": "YulIdentifier", - "src": "336:24:62" - }, - "nativeSrc": "336:31:62", - "nodeType": "YulFunctionCall", - "src": "336:31:62" - }, - "nativeSrc": "336:31:62", - "nodeType": "YulExpressionStatement", - "src": "336:31:62" - }, - { - "nativeSrc": "376:15:62", - "nodeType": "YulAssignment", - "src": "376:15:62", - "value": { - "name": "value", - "nativeSrc": "386:5:62", - "nodeType": "YulIdentifier", - "src": "386:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "376:6:62", - "nodeType": "YulIdentifier", - "src": "376:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nativeSrc": "150:247:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "186:9:62", - "nodeType": "YulTypedName", - "src": "186:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "197:7:62", - "nodeType": "YulTypedName", - "src": "197:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "209:6:62", - "nodeType": "YulTypedName", - "src": "209:6:62", - "type": "" - } - ], - "src": "150:247:62" - }, - { - "body": { - "nativeSrc": "551:551:62", - "nodeType": "YulBlock", - "src": "551:551:62", - "statements": [ - { - "nativeSrc": "561:27:62", - "nodeType": "YulAssignment", - "src": "561:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "573:9:62", - "nodeType": "YulIdentifier", - "src": "573:9:62" - }, - { - "kind": "number", - "nativeSrc": "584:3:62", - "nodeType": "YulLiteral", - "src": "584:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "569:3:62", - "nodeType": "YulIdentifier", - "src": "569:3:62" - }, - "nativeSrc": "569:19:62", - "nodeType": "YulFunctionCall", - "src": "569:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "561:4:62", - "nodeType": "YulIdentifier", - "src": "561:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "604:9:62", - "nodeType": "YulIdentifier", - "src": "604:9:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "625:6:62", - "nodeType": "YulIdentifier", - "src": "625:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "619:5:62", - "nodeType": "YulIdentifier", - "src": "619:5:62" - }, - "nativeSrc": "619:13:62", - "nodeType": "YulFunctionCall", - "src": "619:13:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "642:3:62", - "nodeType": "YulLiteral", - "src": "642:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "647:1:62", - "nodeType": "YulLiteral", - "src": "647:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "638:3:62", - "nodeType": "YulIdentifier", - "src": "638:3:62" - }, - "nativeSrc": "638:11:62", - "nodeType": "YulFunctionCall", - "src": "638:11:62" - }, - { - "kind": "number", - "nativeSrc": "651:1:62", - "nodeType": "YulLiteral", - "src": "651:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "634:3:62", - "nodeType": "YulIdentifier", - "src": "634:3:62" - }, - "nativeSrc": "634:19:62", - "nodeType": "YulFunctionCall", - "src": "634:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "615:3:62", - "nodeType": "YulIdentifier", - "src": "615:3:62" - }, - "nativeSrc": "615:39:62", - "nodeType": "YulFunctionCall", - "src": "615:39:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "597:6:62", - "nodeType": "YulIdentifier", - "src": "597:6:62" - }, - "nativeSrc": "597:58:62", - "nodeType": "YulFunctionCall", - "src": "597:58:62" - }, - "nativeSrc": "597:58:62", - "nodeType": "YulExpressionStatement", - "src": "597:58:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "675:9:62", - "nodeType": "YulIdentifier", - "src": "675:9:62" - }, - { - "kind": "number", - "nativeSrc": "686:4:62", - "nodeType": "YulLiteral", - "src": "686:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "671:3:62", - "nodeType": "YulIdentifier", - "src": "671:3:62" - }, - "nativeSrc": "671:20:62", - "nodeType": "YulFunctionCall", - "src": "671:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "703:6:62", - "nodeType": "YulIdentifier", - "src": "703:6:62" - }, - { - "kind": "number", - "nativeSrc": "711:4:62", - "nodeType": "YulLiteral", - "src": "711:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "699:3:62", - "nodeType": "YulIdentifier", - "src": "699:3:62" - }, - "nativeSrc": "699:17:62", - "nodeType": "YulFunctionCall", - "src": "699:17:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "693:5:62", - "nodeType": "YulIdentifier", - "src": "693:5:62" - }, - "nativeSrc": "693:24:62", - "nodeType": "YulFunctionCall", - "src": "693:24:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "664:6:62", - "nodeType": "YulIdentifier", - "src": "664:6:62" - }, - "nativeSrc": "664:54:62", - "nodeType": "YulFunctionCall", - "src": "664:54:62" - }, - "nativeSrc": "664:54:62", - "nodeType": "YulExpressionStatement", - "src": "664:54:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "738:9:62", - "nodeType": "YulIdentifier", - "src": "738:9:62" - }, - { - "kind": "number", - "nativeSrc": "749:4:62", - "nodeType": "YulLiteral", - "src": "749:4:62", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "734:3:62", - "nodeType": "YulIdentifier", - "src": "734:3:62" - }, - "nativeSrc": "734:20:62", - "nodeType": "YulFunctionCall", - "src": "734:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "766:6:62", - "nodeType": "YulIdentifier", - "src": "766:6:62" - }, - { - "kind": "number", - "nativeSrc": "774:4:62", - "nodeType": "YulLiteral", - "src": "774:4:62", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "762:3:62", - "nodeType": "YulIdentifier", - "src": "762:3:62" - }, - "nativeSrc": "762:17:62", - "nodeType": "YulFunctionCall", - "src": "762:17:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "756:5:62", - "nodeType": "YulIdentifier", - "src": "756:5:62" - }, - "nativeSrc": "756:24:62", - "nodeType": "YulFunctionCall", - "src": "756:24:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "727:6:62", - "nodeType": "YulIdentifier", - "src": "727:6:62" - }, - "nativeSrc": "727:54:62", - "nodeType": "YulFunctionCall", - "src": "727:54:62" - }, - "nativeSrc": "727:54:62", - "nodeType": "YulExpressionStatement", - "src": "727:54:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "801:9:62", - "nodeType": "YulIdentifier", - "src": "801:9:62" - }, - { - "kind": "number", - "nativeSrc": "812:4:62", - "nodeType": "YulLiteral", - "src": "812:4:62", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "797:3:62", - "nodeType": "YulIdentifier", - "src": "797:3:62" - }, - "nativeSrc": "797:20:62", - "nodeType": "YulFunctionCall", - "src": "797:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "829:6:62", - "nodeType": "YulIdentifier", - "src": "829:6:62" - }, - { - "kind": "number", - "nativeSrc": "837:4:62", - "nodeType": "YulLiteral", - "src": "837:4:62", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "825:3:62", - "nodeType": "YulIdentifier", - "src": "825:3:62" - }, - "nativeSrc": "825:17:62", - "nodeType": "YulFunctionCall", - "src": "825:17:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "819:5:62", - "nodeType": "YulIdentifier", - "src": "819:5:62" - }, - "nativeSrc": "819:24:62", - "nodeType": "YulFunctionCall", - "src": "819:24:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "790:6:62", - "nodeType": "YulIdentifier", - "src": "790:6:62" - }, - "nativeSrc": "790:54:62", - "nodeType": "YulFunctionCall", - "src": "790:54:62" - }, - "nativeSrc": "790:54:62", - "nodeType": "YulExpressionStatement", - "src": "790:54:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "864:9:62", - "nodeType": "YulIdentifier", - "src": "864:9:62" - }, - { - "kind": "number", - "nativeSrc": "875:4:62", - "nodeType": "YulLiteral", - "src": "875:4:62", - "type": "", - "value": "0x80" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "860:3:62", - "nodeType": "YulIdentifier", - "src": "860:3:62" - }, - "nativeSrc": "860:20:62", - "nodeType": "YulFunctionCall", - "src": "860:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "892:6:62", - "nodeType": "YulIdentifier", - "src": "892:6:62" - }, - { - "kind": "number", - "nativeSrc": "900:4:62", - "nodeType": "YulLiteral", - "src": "900:4:62", - "type": "", - "value": "0x80" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "888:3:62", - "nodeType": "YulIdentifier", - "src": "888:3:62" - }, - "nativeSrc": "888:17:62", - "nodeType": "YulFunctionCall", - "src": "888:17:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "882:5:62", - "nodeType": "YulIdentifier", - "src": "882:5:62" - }, - "nativeSrc": "882:24:62", - "nodeType": "YulFunctionCall", - "src": "882:24:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "853:6:62", - "nodeType": "YulIdentifier", - "src": "853:6:62" - }, - "nativeSrc": "853:54:62", - "nodeType": "YulFunctionCall", - "src": "853:54:62" - }, - "nativeSrc": "853:54:62", - "nodeType": "YulExpressionStatement", - "src": "853:54:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "927:9:62", - "nodeType": "YulIdentifier", - "src": "927:9:62" - }, - { - "kind": "number", - "nativeSrc": "938:4:62", - "nodeType": "YulLiteral", - "src": "938:4:62", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "923:3:62", - "nodeType": "YulIdentifier", - "src": "923:3:62" - }, - "nativeSrc": "923:20:62", - "nodeType": "YulFunctionCall", - "src": "923:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "955:6:62", - "nodeType": "YulIdentifier", - "src": "955:6:62" - }, - { - "kind": "number", - "nativeSrc": "963:4:62", - "nodeType": "YulLiteral", - "src": "963:4:62", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "951:3:62", - "nodeType": "YulIdentifier", - "src": "951:3:62" - }, - "nativeSrc": "951:17:62", - "nodeType": "YulFunctionCall", - "src": "951:17:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "945:5:62", - "nodeType": "YulIdentifier", - "src": "945:5:62" - }, - "nativeSrc": "945:24:62", - "nodeType": "YulFunctionCall", - "src": "945:24:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "916:6:62", - "nodeType": "YulIdentifier", - "src": "916:6:62" - }, - "nativeSrc": "916:54:62", - "nodeType": "YulFunctionCall", - "src": "916:54:62" - }, - "nativeSrc": "916:54:62", - "nodeType": "YulExpressionStatement", - "src": "916:54:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "990:9:62", - "nodeType": "YulIdentifier", - "src": "990:9:62" - }, - { - "kind": "number", - "nativeSrc": "1001:4:62", - "nodeType": "YulLiteral", - "src": "1001:4:62", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "986:3:62", - "nodeType": "YulIdentifier", - "src": "986:3:62" - }, - "nativeSrc": "986:20:62", - "nodeType": "YulFunctionCall", - "src": "986:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "1018:6:62", - "nodeType": "YulIdentifier", - "src": "1018:6:62" - }, - { - "kind": "number", - "nativeSrc": "1026:4:62", - "nodeType": "YulLiteral", - "src": "1026:4:62", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1014:3:62", - "nodeType": "YulIdentifier", - "src": "1014:3:62" - }, - "nativeSrc": "1014:17:62", - "nodeType": "YulFunctionCall", - "src": "1014:17:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1008:5:62", - "nodeType": "YulIdentifier", - "src": "1008:5:62" - }, - "nativeSrc": "1008:24:62", - "nodeType": "YulFunctionCall", - "src": "1008:24:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "979:6:62", - "nodeType": "YulIdentifier", - "src": "979:6:62" - }, - "nativeSrc": "979:54:62", - "nodeType": "YulFunctionCall", - "src": "979:54:62" - }, - "nativeSrc": "979:54:62", - "nodeType": "YulExpressionStatement", - "src": "979:54:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1053:9:62", - "nodeType": "YulIdentifier", - "src": "1053:9:62" - }, - { - "kind": "number", - "nativeSrc": "1064:4:62", - "nodeType": "YulLiteral", - "src": "1064:4:62", - "type": "", - "value": "0xe0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1049:3:62", - "nodeType": "YulIdentifier", - "src": "1049:3:62" - }, - "nativeSrc": "1049:20:62", - "nodeType": "YulFunctionCall", - "src": "1049:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "1081:6:62", - "nodeType": "YulIdentifier", - "src": "1081:6:62" - }, - { - "kind": "number", - "nativeSrc": "1089:4:62", - "nodeType": "YulLiteral", - "src": "1089:4:62", - "type": "", - "value": "0xe0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1077:3:62", - "nodeType": "YulIdentifier", - "src": "1077:3:62" - }, - "nativeSrc": "1077:17:62", - "nodeType": "YulFunctionCall", - "src": "1077:17:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1071:5:62", - "nodeType": "YulIdentifier", - "src": "1071:5:62" - }, - "nativeSrc": "1071:24:62", - "nodeType": "YulFunctionCall", - "src": "1071:24:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1042:6:62", - "nodeType": "YulIdentifier", - "src": "1042:6:62" - }, - "nativeSrc": "1042:54:62", - "nodeType": "YulFunctionCall", - "src": "1042:54:62" - }, - "nativeSrc": "1042:54:62", - "nodeType": "YulExpressionStatement", - "src": "1042:54:62" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_State_$11307_memory_ptr__to_t_struct$_State_$11307_memory_ptr__fromStack_reversed", - "nativeSrc": "402:700:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "520:9:62", - "nodeType": "YulTypedName", - "src": "520:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "531:6:62", - "nodeType": "YulTypedName", - "src": "531:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "542:4:62", - "nodeType": "YulTypedName", - "src": "542:4:62", - "type": "" - } - ], - "src": "402:700:62" - }, - { - "body": { - "nativeSrc": "1208:76:62", - "nodeType": "YulBlock", - "src": "1208:76:62", - "statements": [ - { - "nativeSrc": "1218:26:62", - "nodeType": "YulAssignment", - "src": "1218:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1230:9:62", - "nodeType": "YulIdentifier", - "src": "1230:9:62" - }, - { - "kind": "number", - "nativeSrc": "1241:2:62", - "nodeType": "YulLiteral", - "src": "1241:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1226:3:62", - "nodeType": "YulIdentifier", - "src": "1226:3:62" - }, - "nativeSrc": "1226:18:62", - "nodeType": "YulFunctionCall", - "src": "1226:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "1218:4:62", - "nodeType": "YulIdentifier", - "src": "1218:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1260:9:62", - "nodeType": "YulIdentifier", - "src": "1260:9:62" - }, - { - "name": "value0", - "nativeSrc": "1271:6:62", - "nodeType": "YulIdentifier", - "src": "1271:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1253:6:62", - "nodeType": "YulIdentifier", - "src": "1253:6:62" - }, - "nativeSrc": "1253:25:62", - "nodeType": "YulFunctionCall", - "src": "1253:25:62" - }, - "nativeSrc": "1253:25:62", - "nodeType": "YulExpressionStatement", - "src": "1253:25:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nativeSrc": "1107:177:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1177:9:62", - "nodeType": "YulTypedName", - "src": "1177:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1188:6:62", - "nodeType": "YulTypedName", - "src": "1188:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "1199:4:62", - "nodeType": "YulTypedName", - "src": "1199:4:62", - "type": "" - } - ], - "src": "1107:177:62" - }, - { - "body": { - "nativeSrc": "1474:206:62", - "nodeType": "YulBlock", - "src": "1474:206:62", - "statements": [ - { - "nativeSrc": "1484:27:62", - "nodeType": "YulAssignment", - "src": "1484:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1496:9:62", - "nodeType": "YulIdentifier", - "src": "1496:9:62" - }, - { - "kind": "number", - "nativeSrc": "1507:3:62", - "nodeType": "YulLiteral", - "src": "1507:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1492:3:62", - "nodeType": "YulIdentifier", - "src": "1492:3:62" - }, - "nativeSrc": "1492:19:62", - "nodeType": "YulFunctionCall", - "src": "1492:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "1484:4:62", - "nodeType": "YulIdentifier", - "src": "1484:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1527:9:62", - "nodeType": "YulIdentifier", - "src": "1527:9:62" - }, - { - "name": "value0", - "nativeSrc": "1538:6:62", - "nodeType": "YulIdentifier", - "src": "1538:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1520:6:62", - "nodeType": "YulIdentifier", - "src": "1520:6:62" - }, - "nativeSrc": "1520:25:62", - "nodeType": "YulFunctionCall", - "src": "1520:25:62" - }, - "nativeSrc": "1520:25:62", - "nodeType": "YulExpressionStatement", - "src": "1520:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1565:9:62", - "nodeType": "YulIdentifier", - "src": "1565:9:62" - }, - { - "kind": "number", - "nativeSrc": "1576:2:62", - "nodeType": "YulLiteral", - "src": "1576:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1561:3:62", - "nodeType": "YulIdentifier", - "src": "1561:3:62" - }, - "nativeSrc": "1561:18:62", - "nodeType": "YulFunctionCall", - "src": "1561:18:62" - }, - { - "name": "value1", - "nativeSrc": "1581:6:62", - "nodeType": "YulIdentifier", - "src": "1581:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1554:6:62", - "nodeType": "YulIdentifier", - "src": "1554:6:62" - }, - "nativeSrc": "1554:34:62", - "nodeType": "YulFunctionCall", - "src": "1554:34:62" - }, - "nativeSrc": "1554:34:62", - "nodeType": "YulExpressionStatement", - "src": "1554:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1608:9:62", - "nodeType": "YulIdentifier", - "src": "1608:9:62" - }, - { - "kind": "number", - "nativeSrc": "1619:2:62", - "nodeType": "YulLiteral", - "src": "1619:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1604:3:62", - "nodeType": "YulIdentifier", - "src": "1604:3:62" - }, - "nativeSrc": "1604:18:62", - "nodeType": "YulFunctionCall", - "src": "1604:18:62" - }, - { - "name": "value2", - "nativeSrc": "1624:6:62", - "nodeType": "YulIdentifier", - "src": "1624:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1597:6:62", - "nodeType": "YulIdentifier", - "src": "1597:6:62" - }, - "nativeSrc": "1597:34:62", - "nodeType": "YulFunctionCall", - "src": "1597:34:62" - }, - "nativeSrc": "1597:34:62", - "nodeType": "YulExpressionStatement", - "src": "1597:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1651:9:62", - "nodeType": "YulIdentifier", - "src": "1651:9:62" - }, - { - "kind": "number", - "nativeSrc": "1662:2:62", - "nodeType": "YulLiteral", - "src": "1662:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1647:3:62", - "nodeType": "YulIdentifier", - "src": "1647:3:62" - }, - "nativeSrc": "1647:18:62", - "nodeType": "YulFunctionCall", - "src": "1647:18:62" - }, - { - "name": "value3", - "nativeSrc": "1667:6:62", - "nodeType": "YulIdentifier", - "src": "1667:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1640:6:62", - "nodeType": "YulIdentifier", - "src": "1640:6:62" - }, - "nativeSrc": "1640:34:62", - "nodeType": "YulFunctionCall", - "src": "1640:34:62" - }, - "nativeSrc": "1640:34:62", - "nodeType": "YulExpressionStatement", - "src": "1640:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_uint256__to_t_bytes32_t_bytes32_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "1289:391:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1419:9:62", - "nodeType": "YulTypedName", - "src": "1419:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "1430:6:62", - "nodeType": "YulTypedName", - "src": "1430:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "1438:6:62", - "nodeType": "YulTypedName", - "src": "1438:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "1446:6:62", - "nodeType": "YulTypedName", - "src": "1446:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1454:6:62", - "nodeType": "YulTypedName", - "src": "1454:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "1465:4:62", - "nodeType": "YulTypedName", - "src": "1465:4:62", - "type": "" - } - ], - "src": "1289:391:62" - }, - { - "body": { - "nativeSrc": "1729:77:62", - "nodeType": "YulBlock", - "src": "1729:77:62", - "statements": [ - { - "body": { - "nativeSrc": "1784:16:62", - "nodeType": "YulBlock", - "src": "1784:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1793:1:62", - "nodeType": "YulLiteral", - "src": "1793:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1796:1:62", - "nodeType": "YulLiteral", - "src": "1796:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1786:6:62", - "nodeType": "YulIdentifier", - "src": "1786:6:62" - }, - "nativeSrc": "1786:12:62", - "nodeType": "YulFunctionCall", - "src": "1786:12:62" - }, - "nativeSrc": "1786:12:62", - "nodeType": "YulExpressionStatement", - "src": "1786:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "1752:5:62", - "nodeType": "YulIdentifier", - "src": "1752:5:62" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "1763:5:62", - "nodeType": "YulIdentifier", - "src": "1763:5:62" - }, - { - "kind": "number", - "nativeSrc": "1770:10:62", - "nodeType": "YulLiteral", - "src": "1770:10:62", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1759:3:62", - "nodeType": "YulIdentifier", - "src": "1759:3:62" - }, - "nativeSrc": "1759:22:62", - "nodeType": "YulFunctionCall", - "src": "1759:22:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "1749:2:62", - "nodeType": "YulIdentifier", - "src": "1749:2:62" - }, - "nativeSrc": "1749:33:62", - "nodeType": "YulFunctionCall", - "src": "1749:33:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "1742:6:62", - "nodeType": "YulIdentifier", - "src": "1742:6:62" - }, - "nativeSrc": "1742:41:62", - "nodeType": "YulFunctionCall", - "src": "1742:41:62" - }, - "nativeSrc": "1739:61:62", - "nodeType": "YulIf", - "src": "1739:61:62" - } - ] - }, - "name": "validator_revert_uint32", - "nativeSrc": "1685:121:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "1718:5:62", - "nodeType": "YulTypedName", - "src": "1718:5:62", - "type": "" - } - ], - "src": "1685:121:62" - }, - { - "body": { - "nativeSrc": "1914:382:62", - "nodeType": "YulBlock", - "src": "1914:382:62", - "statements": [ - { - "body": { - "nativeSrc": "1960:16:62", - "nodeType": "YulBlock", - "src": "1960:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1969:1:62", - "nodeType": "YulLiteral", - "src": "1969:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1972:1:62", - "nodeType": "YulLiteral", - "src": "1972:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1962:6:62", - "nodeType": "YulIdentifier", - "src": "1962:6:62" - }, - "nativeSrc": "1962:12:62", - "nodeType": "YulFunctionCall", - "src": "1962:12:62" - }, - "nativeSrc": "1962:12:62", - "nodeType": "YulExpressionStatement", - "src": "1962:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "1935:7:62", - "nodeType": "YulIdentifier", - "src": "1935:7:62" - }, - { - "name": "headStart", - "nativeSrc": "1944:9:62", - "nodeType": "YulIdentifier", - "src": "1944:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1931:3:62", - "nodeType": "YulIdentifier", - "src": "1931:3:62" - }, - "nativeSrc": "1931:23:62", - "nodeType": "YulFunctionCall", - "src": "1931:23:62" - }, - { - "kind": "number", - "nativeSrc": "1956:2:62", - "nodeType": "YulLiteral", - "src": "1956:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "1927:3:62", - "nodeType": "YulIdentifier", - "src": "1927:3:62" - }, - "nativeSrc": "1927:32:62", - "nodeType": "YulFunctionCall", - "src": "1927:32:62" - }, - "nativeSrc": "1924:52:62", - "nodeType": "YulIf", - "src": "1924:52:62" - }, - { - "nativeSrc": "1985:14:62", - "nodeType": "YulVariableDeclaration", - "src": "1985:14:62", - "value": { - "kind": "number", - "nativeSrc": "1998:1:62", - "nodeType": "YulLiteral", - "src": "1998:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "1989:5:62", - "nodeType": "YulTypedName", - "src": "1989:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "2008:32:62", - "nodeType": "YulAssignment", - "src": "2008:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2030:9:62", - "nodeType": "YulIdentifier", - "src": "2030:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "2017:12:62", - "nodeType": "YulIdentifier", - "src": "2017:12:62" - }, - "nativeSrc": "2017:23:62", - "nodeType": "YulFunctionCall", - "src": "2017:23:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "2008:5:62", - "nodeType": "YulIdentifier", - "src": "2008:5:62" - } - ] - }, - { - "nativeSrc": "2049:15:62", - "nodeType": "YulAssignment", - "src": "2049:15:62", - "value": { - "name": "value", - "nativeSrc": "2059:5:62", - "nodeType": "YulIdentifier", - "src": "2059:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "2049:6:62", - "nodeType": "YulIdentifier", - "src": "2049:6:62" - } - ] - }, - { - "nativeSrc": "2073:47:62", - "nodeType": "YulVariableDeclaration", - "src": "2073:47:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2105:9:62", - "nodeType": "YulIdentifier", - "src": "2105:9:62" - }, - { - "kind": "number", - "nativeSrc": "2116:2:62", - "nodeType": "YulLiteral", - "src": "2116:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2101:3:62", - "nodeType": "YulIdentifier", - "src": "2101:3:62" - }, - "nativeSrc": "2101:18:62", - "nodeType": "YulFunctionCall", - "src": "2101:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "2088:12:62", - "nodeType": "YulIdentifier", - "src": "2088:12:62" - }, - "nativeSrc": "2088:32:62", - "nodeType": "YulFunctionCall", - "src": "2088:32:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "2077:7:62", - "nodeType": "YulTypedName", - "src": "2077:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "2153:7:62", - "nodeType": "YulIdentifier", - "src": "2153:7:62" - } - ], - "functionName": { - "name": "validator_revert_uint32", - "nativeSrc": "2129:23:62", - "nodeType": "YulIdentifier", - "src": "2129:23:62" - }, - "nativeSrc": "2129:32:62", - "nodeType": "YulFunctionCall", - "src": "2129:32:62" - }, - "nativeSrc": "2129:32:62", - "nodeType": "YulExpressionStatement", - "src": "2129:32:62" - }, - { - "nativeSrc": "2170:17:62", - "nodeType": "YulAssignment", - "src": "2170:17:62", - "value": { - "name": "value_1", - "nativeSrc": "2180:7:62", - "nodeType": "YulIdentifier", - "src": "2180:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "2170:6:62", - "nodeType": "YulIdentifier", - "src": "2170:6:62" - } - ] - }, - { - "nativeSrc": "2196:16:62", - "nodeType": "YulVariableDeclaration", - "src": "2196:16:62", - "value": { - "kind": "number", - "nativeSrc": "2211:1:62", - "nodeType": "YulLiteral", - "src": "2211:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "2200:7:62", - "nodeType": "YulTypedName", - "src": "2200:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "2221:43:62", - "nodeType": "YulAssignment", - "src": "2221:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2249:9:62", - "nodeType": "YulIdentifier", - "src": "2249:9:62" - }, - { - "kind": "number", - "nativeSrc": "2260:2:62", - "nodeType": "YulLiteral", - "src": "2260:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2245:3:62", - "nodeType": "YulIdentifier", - "src": "2245:3:62" - }, - "nativeSrc": "2245:18:62", - "nodeType": "YulFunctionCall", - "src": "2245:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "2232:12:62", - "nodeType": "YulIdentifier", - "src": "2232:12:62" - }, - "nativeSrc": "2232:32:62", - "nodeType": "YulFunctionCall", - "src": "2232:32:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "2221:7:62", - "nodeType": "YulIdentifier", - "src": "2221:7:62" - } - ] - }, - { - "nativeSrc": "2273:17:62", - "nodeType": "YulAssignment", - "src": "2273:17:62", - "value": { - "name": "value_2", - "nativeSrc": "2283:7:62", - "nodeType": "YulIdentifier", - "src": "2283:7:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "2273:6:62", - "nodeType": "YulIdentifier", - "src": "2273:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint32t_uint256", - "nativeSrc": "1811:485:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1864:9:62", - "nodeType": "YulTypedName", - "src": "1864:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "1875:7:62", - "nodeType": "YulTypedName", - "src": "1875:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "1887:6:62", - "nodeType": "YulTypedName", - "src": "1887:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "1895:6:62", - "nodeType": "YulTypedName", - "src": "1895:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "1903:6:62", - "nodeType": "YulTypedName", - "src": "1903:6:62", - "type": "" - } - ], - "src": "1811:485:62" - }, - { - "body": { - "nativeSrc": "2370:176:62", - "nodeType": "YulBlock", - "src": "2370:176:62", - "statements": [ - { - "body": { - "nativeSrc": "2416:16:62", - "nodeType": "YulBlock", - "src": "2416:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2425:1:62", - "nodeType": "YulLiteral", - "src": "2425:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "2428:1:62", - "nodeType": "YulLiteral", - "src": "2428:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "2418:6:62", - "nodeType": "YulIdentifier", - "src": "2418:6:62" - }, - "nativeSrc": "2418:12:62", - "nodeType": "YulFunctionCall", - "src": "2418:12:62" - }, - "nativeSrc": "2418:12:62", - "nodeType": "YulExpressionStatement", - "src": "2418:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "2391:7:62", - "nodeType": "YulIdentifier", - "src": "2391:7:62" - }, - { - "name": "headStart", - "nativeSrc": "2400:9:62", - "nodeType": "YulIdentifier", - "src": "2400:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2387:3:62", - "nodeType": "YulIdentifier", - "src": "2387:3:62" - }, - "nativeSrc": "2387:23:62", - "nodeType": "YulFunctionCall", - "src": "2387:23:62" - }, - { - "kind": "number", - "nativeSrc": "2412:2:62", - "nodeType": "YulLiteral", - "src": "2412:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "2383:3:62", - "nodeType": "YulIdentifier", - "src": "2383:3:62" - }, - "nativeSrc": "2383:32:62", - "nodeType": "YulFunctionCall", - "src": "2383:32:62" - }, - "nativeSrc": "2380:52:62", - "nodeType": "YulIf", - "src": "2380:52:62" - }, - { - "nativeSrc": "2441:36:62", - "nodeType": "YulVariableDeclaration", - "src": "2441:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2467:9:62", - "nodeType": "YulIdentifier", - "src": "2467:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "2454:12:62", - "nodeType": "YulIdentifier", - "src": "2454:12:62" - }, - "nativeSrc": "2454:23:62", - "nodeType": "YulFunctionCall", - "src": "2454:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "2445:5:62", - "nodeType": "YulTypedName", - "src": "2445:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "2510:5:62", - "nodeType": "YulIdentifier", - "src": "2510:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint32", - "nativeSrc": "2486:23:62", - "nodeType": "YulIdentifier", - "src": "2486:23:62" - }, - "nativeSrc": "2486:30:62", - "nodeType": "YulFunctionCall", - "src": "2486:30:62" - }, - "nativeSrc": "2486:30:62", - "nodeType": "YulExpressionStatement", - "src": "2486:30:62" - }, - { - "nativeSrc": "2525:15:62", - "nodeType": "YulAssignment", - "src": "2525:15:62", - "value": { - "name": "value", - "nativeSrc": "2535:5:62", - "nodeType": "YulIdentifier", - "src": "2535:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "2525:6:62", - "nodeType": "YulIdentifier", - "src": "2525:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32", - "nativeSrc": "2301:245:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2336:9:62", - "nodeType": "YulTypedName", - "src": "2336:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "2347:7:62", - "nodeType": "YulTypedName", - "src": "2347:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "2359:6:62", - "nodeType": "YulTypedName", - "src": "2359:6:62", - "type": "" - } - ], - "src": "2301:245:62" - }, - { - "body": { - "nativeSrc": "2650:93:62", - "nodeType": "YulBlock", - "src": "2650:93:62", - "statements": [ - { - "nativeSrc": "2660:26:62", - "nodeType": "YulAssignment", - "src": "2660:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2672:9:62", - "nodeType": "YulIdentifier", - "src": "2672:9:62" - }, - { - "kind": "number", - "nativeSrc": "2683:2:62", - "nodeType": "YulLiteral", - "src": "2683:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2668:3:62", - "nodeType": "YulIdentifier", - "src": "2668:3:62" - }, - "nativeSrc": "2668:18:62", - "nodeType": "YulFunctionCall", - "src": "2668:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "2660:4:62", - "nodeType": "YulIdentifier", - "src": "2660:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2702:9:62", - "nodeType": "YulIdentifier", - "src": "2702:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "2717:6:62", - "nodeType": "YulIdentifier", - "src": "2717:6:62" - }, - { - "kind": "number", - "nativeSrc": "2725:10:62", - "nodeType": "YulLiteral", - "src": "2725:10:62", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2713:3:62", - "nodeType": "YulIdentifier", - "src": "2713:3:62" - }, - "nativeSrc": "2713:23:62", - "nodeType": "YulFunctionCall", - "src": "2713:23:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2695:6:62", - "nodeType": "YulIdentifier", - "src": "2695:6:62" - }, - "nativeSrc": "2695:42:62", - "nodeType": "YulFunctionCall", - "src": "2695:42:62" - }, - "nativeSrc": "2695:42:62", - "nodeType": "YulExpressionStatement", - "src": "2695:42:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed", - "nativeSrc": "2551:192:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2619:9:62", - "nodeType": "YulTypedName", - "src": "2619:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "2630:6:62", - "nodeType": "YulTypedName", - "src": "2630:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2641:4:62", - "nodeType": "YulTypedName", - "src": "2641:4:62", - "type": "" - } - ], - "src": "2551:192:62" - }, - { - "body": { - "nativeSrc": "2820:275:62", - "nodeType": "YulBlock", - "src": "2820:275:62", - "statements": [ - { - "body": { - "nativeSrc": "2869:16:62", - "nodeType": "YulBlock", - "src": "2869:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2878:1:62", - "nodeType": "YulLiteral", - "src": "2878:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "2881:1:62", - "nodeType": "YulLiteral", - "src": "2881:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "2871:6:62", - "nodeType": "YulIdentifier", - "src": "2871:6:62" - }, - "nativeSrc": "2871:12:62", - "nodeType": "YulFunctionCall", - "src": "2871:12:62" - }, - "nativeSrc": "2871:12:62", - "nodeType": "YulExpressionStatement", - "src": "2871:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "2848:6:62", - "nodeType": "YulIdentifier", - "src": "2848:6:62" - }, - { - "kind": "number", - "nativeSrc": "2856:4:62", - "nodeType": "YulLiteral", - "src": "2856:4:62", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2844:3:62", - "nodeType": "YulIdentifier", - "src": "2844:3:62" - }, - "nativeSrc": "2844:17:62", - "nodeType": "YulFunctionCall", - "src": "2844:17:62" - }, - { - "name": "end", - "nativeSrc": "2863:3:62", - "nodeType": "YulIdentifier", - "src": "2863:3:62" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "2840:3:62", - "nodeType": "YulIdentifier", - "src": "2840:3:62" - }, - "nativeSrc": "2840:27:62", - "nodeType": "YulFunctionCall", - "src": "2840:27:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "2833:6:62", - "nodeType": "YulIdentifier", - "src": "2833:6:62" - }, - "nativeSrc": "2833:35:62", - "nodeType": "YulFunctionCall", - "src": "2833:35:62" - }, - "nativeSrc": "2830:55:62", - "nodeType": "YulIf", - "src": "2830:55:62" - }, - { - "nativeSrc": "2894:30:62", - "nodeType": "YulAssignment", - "src": "2894:30:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "2917:6:62", - "nodeType": "YulIdentifier", - "src": "2917:6:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "2904:12:62", - "nodeType": "YulIdentifier", - "src": "2904:12:62" - }, - "nativeSrc": "2904:20:62", - "nodeType": "YulFunctionCall", - "src": "2904:20:62" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "2894:6:62", - "nodeType": "YulIdentifier", - "src": "2894:6:62" - } - ] - }, - { - "body": { - "nativeSrc": "2967:16:62", - "nodeType": "YulBlock", - "src": "2967:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2976:1:62", - "nodeType": "YulLiteral", - "src": "2976:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "2979:1:62", - "nodeType": "YulLiteral", - "src": "2979:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "2969:6:62", - "nodeType": "YulIdentifier", - "src": "2969:6:62" - }, - "nativeSrc": "2969:12:62", - "nodeType": "YulFunctionCall", - "src": "2969:12:62" - }, - "nativeSrc": "2969:12:62", - "nodeType": "YulExpressionStatement", - "src": "2969:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "2939:6:62", - "nodeType": "YulIdentifier", - "src": "2939:6:62" - }, - { - "kind": "number", - "nativeSrc": "2947:18:62", - "nodeType": "YulLiteral", - "src": "2947:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "2936:2:62", - "nodeType": "YulIdentifier", - "src": "2936:2:62" - }, - "nativeSrc": "2936:30:62", - "nodeType": "YulFunctionCall", - "src": "2936:30:62" - }, - "nativeSrc": "2933:50:62", - "nodeType": "YulIf", - "src": "2933:50:62" - }, - { - "nativeSrc": "2992:29:62", - "nodeType": "YulAssignment", - "src": "2992:29:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "3008:6:62", - "nodeType": "YulIdentifier", - "src": "3008:6:62" - }, - { - "kind": "number", - "nativeSrc": "3016:4:62", - "nodeType": "YulLiteral", - "src": "3016:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3004:3:62", - "nodeType": "YulIdentifier", - "src": "3004:3:62" - }, - "nativeSrc": "3004:17:62", - "nodeType": "YulFunctionCall", - "src": "3004:17:62" - }, - "variableNames": [ - { - "name": "arrayPos", - "nativeSrc": "2992:8:62", - "nodeType": "YulIdentifier", - "src": "2992:8:62" - } - ] - }, - { - "body": { - "nativeSrc": "3073:16:62", - "nodeType": "YulBlock", - "src": "3073:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3082:1:62", - "nodeType": "YulLiteral", - "src": "3082:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3085:1:62", - "nodeType": "YulLiteral", - "src": "3085:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3075:6:62", - "nodeType": "YulIdentifier", - "src": "3075:6:62" - }, - "nativeSrc": "3075:12:62", - "nodeType": "YulFunctionCall", - "src": "3075:12:62" - }, - "nativeSrc": "3075:12:62", - "nodeType": "YulExpressionStatement", - "src": "3075:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "3044:6:62", - "nodeType": "YulIdentifier", - "src": "3044:6:62" - }, - { - "name": "length", - "nativeSrc": "3052:6:62", - "nodeType": "YulIdentifier", - "src": "3052:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3040:3:62", - "nodeType": "YulIdentifier", - "src": "3040:3:62" - }, - "nativeSrc": "3040:19:62", - "nodeType": "YulFunctionCall", - "src": "3040:19:62" - }, - { - "kind": "number", - "nativeSrc": "3061:4:62", - "nodeType": "YulLiteral", - "src": "3061:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3036:3:62", - "nodeType": "YulIdentifier", - "src": "3036:3:62" - }, - "nativeSrc": "3036:30:62", - "nodeType": "YulFunctionCall", - "src": "3036:30:62" - }, - { - "name": "end", - "nativeSrc": "3068:3:62", - "nodeType": "YulIdentifier", - "src": "3068:3:62" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "3033:2:62", - "nodeType": "YulIdentifier", - "src": "3033:2:62" - }, - "nativeSrc": "3033:39:62", - "nodeType": "YulFunctionCall", - "src": "3033:39:62" - }, - "nativeSrc": "3030:59:62", - "nodeType": "YulIf", - "src": "3030:59:62" - } - ] - }, - "name": "abi_decode_bytes_calldata", - "nativeSrc": "2748:347:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "2783:6:62", - "nodeType": "YulTypedName", - "src": "2783:6:62", - "type": "" - }, - { - "name": "end", - "nativeSrc": "2791:3:62", - "nodeType": "YulTypedName", - "src": "2791:3:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nativeSrc": "2799:8:62", - "nodeType": "YulTypedName", - "src": "2799:8:62", - "type": "" - }, - { - "name": "length", - "nativeSrc": "2809:6:62", - "nodeType": "YulTypedName", - "src": "2809:6:62", - "type": "" - } - ], - "src": "2748:347:62" - }, - { - "body": { - "nativeSrc": "3206:438:62", - "nodeType": "YulBlock", - "src": "3206:438:62", - "statements": [ - { - "body": { - "nativeSrc": "3252:16:62", - "nodeType": "YulBlock", - "src": "3252:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3261:1:62", - "nodeType": "YulLiteral", - "src": "3261:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3264:1:62", - "nodeType": "YulLiteral", - "src": "3264:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3254:6:62", - "nodeType": "YulIdentifier", - "src": "3254:6:62" - }, - "nativeSrc": "3254:12:62", - "nodeType": "YulFunctionCall", - "src": "3254:12:62" - }, - "nativeSrc": "3254:12:62", - "nodeType": "YulExpressionStatement", - "src": "3254:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "3227:7:62", - "nodeType": "YulIdentifier", - "src": "3227:7:62" - }, - { - "name": "headStart", - "nativeSrc": "3236:9:62", - "nodeType": "YulIdentifier", - "src": "3236:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "3223:3:62", - "nodeType": "YulIdentifier", - "src": "3223:3:62" - }, - "nativeSrc": "3223:23:62", - "nodeType": "YulFunctionCall", - "src": "3223:23:62" - }, - { - "kind": "number", - "nativeSrc": "3248:2:62", - "nodeType": "YulLiteral", - "src": "3248:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "3219:3:62", - "nodeType": "YulIdentifier", - "src": "3219:3:62" - }, - "nativeSrc": "3219:32:62", - "nodeType": "YulFunctionCall", - "src": "3219:32:62" - }, - "nativeSrc": "3216:52:62", - "nodeType": "YulIf", - "src": "3216:52:62" - }, - { - "nativeSrc": "3277:36:62", - "nodeType": "YulVariableDeclaration", - "src": "3277:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3303:9:62", - "nodeType": "YulIdentifier", - "src": "3303:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "3290:12:62", - "nodeType": "YulIdentifier", - "src": "3290:12:62" - }, - "nativeSrc": "3290:23:62", - "nodeType": "YulFunctionCall", - "src": "3290:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "3281:5:62", - "nodeType": "YulTypedName", - "src": "3281:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "3347:5:62", - "nodeType": "YulIdentifier", - "src": "3347:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "3322:24:62", - "nodeType": "YulIdentifier", - "src": "3322:24:62" - }, - "nativeSrc": "3322:31:62", - "nodeType": "YulFunctionCall", - "src": "3322:31:62" - }, - "nativeSrc": "3322:31:62", - "nodeType": "YulExpressionStatement", - "src": "3322:31:62" - }, - { - "nativeSrc": "3362:15:62", - "nodeType": "YulAssignment", - "src": "3362:15:62", - "value": { - "name": "value", - "nativeSrc": "3372:5:62", - "nodeType": "YulIdentifier", - "src": "3372:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "3362:6:62", - "nodeType": "YulIdentifier", - "src": "3362:6:62" - } - ] - }, - { - "nativeSrc": "3386:46:62", - "nodeType": "YulVariableDeclaration", - "src": "3386:46:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3417:9:62", - "nodeType": "YulIdentifier", - "src": "3417:9:62" - }, - { - "kind": "number", - "nativeSrc": "3428:2:62", - "nodeType": "YulLiteral", - "src": "3428:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3413:3:62", - "nodeType": "YulIdentifier", - "src": "3413:3:62" - }, - "nativeSrc": "3413:18:62", - "nodeType": "YulFunctionCall", - "src": "3413:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "3400:12:62", - "nodeType": "YulIdentifier", - "src": "3400:12:62" - }, - "nativeSrc": "3400:32:62", - "nodeType": "YulFunctionCall", - "src": "3400:32:62" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "3390:6:62", - "nodeType": "YulTypedName", - "src": "3390:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "3475:16:62", - "nodeType": "YulBlock", - "src": "3475:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3484:1:62", - "nodeType": "YulLiteral", - "src": "3484:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3487:1:62", - "nodeType": "YulLiteral", - "src": "3487:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3477:6:62", - "nodeType": "YulIdentifier", - "src": "3477:6:62" - }, - "nativeSrc": "3477:12:62", - "nodeType": "YulFunctionCall", - "src": "3477:12:62" - }, - "nativeSrc": "3477:12:62", - "nodeType": "YulExpressionStatement", - "src": "3477:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "3447:6:62", - "nodeType": "YulIdentifier", - "src": "3447:6:62" - }, - { - "kind": "number", - "nativeSrc": "3455:18:62", - "nodeType": "YulLiteral", - "src": "3455:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "3444:2:62", - "nodeType": "YulIdentifier", - "src": "3444:2:62" - }, - "nativeSrc": "3444:30:62", - "nodeType": "YulFunctionCall", - "src": "3444:30:62" - }, - "nativeSrc": "3441:50:62", - "nodeType": "YulIf", - "src": "3441:50:62" - }, - { - "nativeSrc": "3500:84:62", - "nodeType": "YulVariableDeclaration", - "src": "3500:84:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3556:9:62", - "nodeType": "YulIdentifier", - "src": "3556:9:62" - }, - { - "name": "offset", - "nativeSrc": "3567:6:62", - "nodeType": "YulIdentifier", - "src": "3567:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3552:3:62", - "nodeType": "YulIdentifier", - "src": "3552:3:62" - }, - "nativeSrc": "3552:22:62", - "nodeType": "YulFunctionCall", - "src": "3552:22:62" - }, - { - "name": "dataEnd", - "nativeSrc": "3576:7:62", - "nodeType": "YulIdentifier", - "src": "3576:7:62" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "3526:25:62", - "nodeType": "YulIdentifier", - "src": "3526:25:62" - }, - "nativeSrc": "3526:58:62", - "nodeType": "YulFunctionCall", - "src": "3526:58:62" - }, - "variables": [ - { - "name": "value1_1", - "nativeSrc": "3504:8:62", - "nodeType": "YulTypedName", - "src": "3504:8:62", - "type": "" - }, - { - "name": "value2_1", - "nativeSrc": "3514:8:62", - "nodeType": "YulTypedName", - "src": "3514:8:62", - "type": "" - } - ] - }, - { - "nativeSrc": "3593:18:62", - "nodeType": "YulAssignment", - "src": "3593:18:62", - "value": { - "name": "value1_1", - "nativeSrc": "3603:8:62", - "nodeType": "YulIdentifier", - "src": "3603:8:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "3593:6:62", - "nodeType": "YulIdentifier", - "src": "3593:6:62" - } - ] - }, - { - "nativeSrc": "3620:18:62", - "nodeType": "YulAssignment", - "src": "3620:18:62", - "value": { - "name": "value2_1", - "nativeSrc": "3630:8:62", - "nodeType": "YulIdentifier", - "src": "3630:8:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "3620:6:62", - "nodeType": "YulIdentifier", - "src": "3620:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", - "nativeSrc": "3100:544:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "3156:9:62", - "nodeType": "YulTypedName", - "src": "3156:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "3167:7:62", - "nodeType": "YulTypedName", - "src": "3167:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "3179:6:62", - "nodeType": "YulTypedName", - "src": "3179:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "3187:6:62", - "nodeType": "YulTypedName", - "src": "3187:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "3195:6:62", - "nodeType": "YulTypedName", - "src": "3195:6:62", - "type": "" - } - ], - "src": "3100:544:62" - }, - { - "body": { - "nativeSrc": "3691:76:62", - "nodeType": "YulBlock", - "src": "3691:76:62", - "statements": [ - { - "body": { - "nativeSrc": "3745:16:62", - "nodeType": "YulBlock", - "src": "3745:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3754:1:62", - "nodeType": "YulLiteral", - "src": "3754:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3757:1:62", - "nodeType": "YulLiteral", - "src": "3757:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3747:6:62", - "nodeType": "YulIdentifier", - "src": "3747:6:62" - }, - "nativeSrc": "3747:12:62", - "nodeType": "YulFunctionCall", - "src": "3747:12:62" - }, - "nativeSrc": "3747:12:62", - "nodeType": "YulExpressionStatement", - "src": "3747:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "3714:5:62", - "nodeType": "YulIdentifier", - "src": "3714:5:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "3735:5:62", - "nodeType": "YulIdentifier", - "src": "3735:5:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "3728:6:62", - "nodeType": "YulIdentifier", - "src": "3728:6:62" - }, - "nativeSrc": "3728:13:62", - "nodeType": "YulFunctionCall", - "src": "3728:13:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "3721:6:62", - "nodeType": "YulIdentifier", - "src": "3721:6:62" - }, - "nativeSrc": "3721:21:62", - "nodeType": "YulFunctionCall", - "src": "3721:21:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "3711:2:62", - "nodeType": "YulIdentifier", - "src": "3711:2:62" - }, - "nativeSrc": "3711:32:62", - "nodeType": "YulFunctionCall", - "src": "3711:32:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "3704:6:62", - "nodeType": "YulIdentifier", - "src": "3704:6:62" - }, - "nativeSrc": "3704:40:62", - "nodeType": "YulFunctionCall", - "src": "3704:40:62" - }, - "nativeSrc": "3701:60:62", - "nodeType": "YulIf", - "src": "3701:60:62" - } - ] - }, - "name": "validator_revert_bool", - "nativeSrc": "3649:118:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "3680:5:62", - "nodeType": "YulTypedName", - "src": "3680:5:62", - "type": "" - } - ], - "src": "3649:118:62" - }, - { - "body": { - "nativeSrc": "3856:298:62", - "nodeType": "YulBlock", - "src": "3856:298:62", - "statements": [ - { - "body": { - "nativeSrc": "3902:16:62", - "nodeType": "YulBlock", - "src": "3902:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3911:1:62", - "nodeType": "YulLiteral", - "src": "3911:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3914:1:62", - "nodeType": "YulLiteral", - "src": "3914:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3904:6:62", - "nodeType": "YulIdentifier", - "src": "3904:6:62" - }, - "nativeSrc": "3904:12:62", - "nodeType": "YulFunctionCall", - "src": "3904:12:62" - }, - "nativeSrc": "3904:12:62", - "nodeType": "YulExpressionStatement", - "src": "3904:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "3877:7:62", - "nodeType": "YulIdentifier", - "src": "3877:7:62" - }, - { - "name": "headStart", - "nativeSrc": "3886:9:62", - "nodeType": "YulIdentifier", - "src": "3886:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "3873:3:62", - "nodeType": "YulIdentifier", - "src": "3873:3:62" - }, - "nativeSrc": "3873:23:62", - "nodeType": "YulFunctionCall", - "src": "3873:23:62" - }, - { - "kind": "number", - "nativeSrc": "3898:2:62", - "nodeType": "YulLiteral", - "src": "3898:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "3869:3:62", - "nodeType": "YulIdentifier", - "src": "3869:3:62" - }, - "nativeSrc": "3869:32:62", - "nodeType": "YulFunctionCall", - "src": "3869:32:62" - }, - "nativeSrc": "3866:52:62", - "nodeType": "YulIf", - "src": "3866:52:62" - }, - { - "nativeSrc": "3927:36:62", - "nodeType": "YulVariableDeclaration", - "src": "3927:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3953:9:62", - "nodeType": "YulIdentifier", - "src": "3953:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "3940:12:62", - "nodeType": "YulIdentifier", - "src": "3940:12:62" - }, - "nativeSrc": "3940:23:62", - "nodeType": "YulFunctionCall", - "src": "3940:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "3931:5:62", - "nodeType": "YulTypedName", - "src": "3931:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "3997:5:62", - "nodeType": "YulIdentifier", - "src": "3997:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "3972:24:62", - "nodeType": "YulIdentifier", - "src": "3972:24:62" - }, - "nativeSrc": "3972:31:62", - "nodeType": "YulFunctionCall", - "src": "3972:31:62" - }, - "nativeSrc": "3972:31:62", - "nodeType": "YulExpressionStatement", - "src": "3972:31:62" - }, - { - "nativeSrc": "4012:15:62", - "nodeType": "YulAssignment", - "src": "4012:15:62", - "value": { - "name": "value", - "nativeSrc": "4022:5:62", - "nodeType": "YulIdentifier", - "src": "4022:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "4012:6:62", - "nodeType": "YulIdentifier", - "src": "4012:6:62" - } - ] - }, - { - "nativeSrc": "4036:47:62", - "nodeType": "YulVariableDeclaration", - "src": "4036:47:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4068:9:62", - "nodeType": "YulIdentifier", - "src": "4068:9:62" - }, - { - "kind": "number", - "nativeSrc": "4079:2:62", - "nodeType": "YulLiteral", - "src": "4079:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4064:3:62", - "nodeType": "YulIdentifier", - "src": "4064:3:62" - }, - "nativeSrc": "4064:18:62", - "nodeType": "YulFunctionCall", - "src": "4064:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4051:12:62", - "nodeType": "YulIdentifier", - "src": "4051:12:62" - }, - "nativeSrc": "4051:32:62", - "nodeType": "YulFunctionCall", - "src": "4051:32:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "4040:7:62", - "nodeType": "YulTypedName", - "src": "4040:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "4114:7:62", - "nodeType": "YulIdentifier", - "src": "4114:7:62" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nativeSrc": "4092:21:62", - "nodeType": "YulIdentifier", - "src": "4092:21:62" - }, - "nativeSrc": "4092:30:62", - "nodeType": "YulFunctionCall", - "src": "4092:30:62" - }, - "nativeSrc": "4092:30:62", - "nodeType": "YulExpressionStatement", - "src": "4092:30:62" - }, - { - "nativeSrc": "4131:17:62", - "nodeType": "YulAssignment", - "src": "4131:17:62", - "value": { - "name": "value_1", - "nativeSrc": "4141:7:62", - "nodeType": "YulIdentifier", - "src": "4141:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "4131:6:62", - "nodeType": "YulIdentifier", - "src": "4131:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bool", - "nativeSrc": "3772:382:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "3814:9:62", - "nodeType": "YulTypedName", - "src": "3814:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "3825:7:62", - "nodeType": "YulTypedName", - "src": "3825:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "3837:6:62", - "nodeType": "YulTypedName", - "src": "3837:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "3845:6:62", - "nodeType": "YulTypedName", - "src": "3845:6:62", - "type": "" - } - ], - "src": "3772:382:62" - }, - { - "body": { - "nativeSrc": "4229:156:62", - "nodeType": "YulBlock", - "src": "4229:156:62", - "statements": [ - { - "body": { - "nativeSrc": "4275:16:62", - "nodeType": "YulBlock", - "src": "4275:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4284:1:62", - "nodeType": "YulLiteral", - "src": "4284:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4287:1:62", - "nodeType": "YulLiteral", - "src": "4287:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4277:6:62", - "nodeType": "YulIdentifier", - "src": "4277:6:62" - }, - "nativeSrc": "4277:12:62", - "nodeType": "YulFunctionCall", - "src": "4277:12:62" - }, - "nativeSrc": "4277:12:62", - "nodeType": "YulExpressionStatement", - "src": "4277:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "4250:7:62", - "nodeType": "YulIdentifier", - "src": "4250:7:62" - }, - { - "name": "headStart", - "nativeSrc": "4259:9:62", - "nodeType": "YulIdentifier", - "src": "4259:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "4246:3:62", - "nodeType": "YulIdentifier", - "src": "4246:3:62" - }, - "nativeSrc": "4246:23:62", - "nodeType": "YulFunctionCall", - "src": "4246:23:62" - }, - { - "kind": "number", - "nativeSrc": "4271:2:62", - "nodeType": "YulLiteral", - "src": "4271:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "4242:3:62", - "nodeType": "YulIdentifier", - "src": "4242:3:62" - }, - "nativeSrc": "4242:32:62", - "nodeType": "YulFunctionCall", - "src": "4242:32:62" - }, - "nativeSrc": "4239:52:62", - "nodeType": "YulIf", - "src": "4239:52:62" - }, - { - "nativeSrc": "4300:14:62", - "nodeType": "YulVariableDeclaration", - "src": "4300:14:62", - "value": { - "kind": "number", - "nativeSrc": "4313:1:62", - "nodeType": "YulLiteral", - "src": "4313:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "4304:5:62", - "nodeType": "YulTypedName", - "src": "4304:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "4323:32:62", - "nodeType": "YulAssignment", - "src": "4323:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4345:9:62", - "nodeType": "YulIdentifier", - "src": "4345:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4332:12:62", - "nodeType": "YulIdentifier", - "src": "4332:12:62" - }, - "nativeSrc": "4332:23:62", - "nodeType": "YulFunctionCall", - "src": "4332:23:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "4323:5:62", - "nodeType": "YulIdentifier", - "src": "4323:5:62" - } - ] - }, - { - "nativeSrc": "4364:15:62", - "nodeType": "YulAssignment", - "src": "4364:15:62", - "value": { - "name": "value", - "nativeSrc": "4374:5:62", - "nodeType": "YulIdentifier", - "src": "4374:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "4364:6:62", - "nodeType": "YulIdentifier", - "src": "4364:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes32", - "nativeSrc": "4159:226:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "4195:9:62", - "nodeType": "YulTypedName", - "src": "4195:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "4206:7:62", - "nodeType": "YulTypedName", - "src": "4206:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "4218:6:62", - "nodeType": "YulTypedName", - "src": "4218:6:62", - "type": "" - } - ], - "src": "4159:226:62" - }, - { - "body": { - "nativeSrc": "4485:92:62", - "nodeType": "YulBlock", - "src": "4485:92:62", - "statements": [ - { - "nativeSrc": "4495:26:62", - "nodeType": "YulAssignment", - "src": "4495:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4507:9:62", - "nodeType": "YulIdentifier", - "src": "4507:9:62" - }, - { - "kind": "number", - "nativeSrc": "4518:2:62", - "nodeType": "YulLiteral", - "src": "4518:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4503:3:62", - "nodeType": "YulIdentifier", - "src": "4503:3:62" - }, - "nativeSrc": "4503:18:62", - "nodeType": "YulFunctionCall", - "src": "4503:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "4495:4:62", - "nodeType": "YulIdentifier", - "src": "4495:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4537:9:62", - "nodeType": "YulIdentifier", - "src": "4537:9:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "4562:6:62", - "nodeType": "YulIdentifier", - "src": "4562:6:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "4555:6:62", - "nodeType": "YulIdentifier", - "src": "4555:6:62" - }, - "nativeSrc": "4555:14:62", - "nodeType": "YulFunctionCall", - "src": "4555:14:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "4548:6:62", - "nodeType": "YulIdentifier", - "src": "4548:6:62" - }, - "nativeSrc": "4548:22:62", - "nodeType": "YulFunctionCall", - "src": "4548:22:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4530:6:62", - "nodeType": "YulIdentifier", - "src": "4530:6:62" - }, - "nativeSrc": "4530:41:62", - "nodeType": "YulFunctionCall", - "src": "4530:41:62" - }, - "nativeSrc": "4530:41:62", - "nodeType": "YulExpressionStatement", - "src": "4530:41:62" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nativeSrc": "4390:187:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "4454:9:62", - "nodeType": "YulTypedName", - "src": "4454:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "4465:6:62", - "nodeType": "YulTypedName", - "src": "4465:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "4476:4:62", - "nodeType": "YulTypedName", - "src": "4476:4:62", - "type": "" - } - ], - "src": "4390:187:62" - }, - { - "body": { - "nativeSrc": "4652:156:62", - "nodeType": "YulBlock", - "src": "4652:156:62", - "statements": [ - { - "body": { - "nativeSrc": "4698:16:62", - "nodeType": "YulBlock", - "src": "4698:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4707:1:62", - "nodeType": "YulLiteral", - "src": "4707:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4710:1:62", - "nodeType": "YulLiteral", - "src": "4710:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4700:6:62", - "nodeType": "YulIdentifier", - "src": "4700:6:62" - }, - "nativeSrc": "4700:12:62", - "nodeType": "YulFunctionCall", - "src": "4700:12:62" - }, - "nativeSrc": "4700:12:62", - "nodeType": "YulExpressionStatement", - "src": "4700:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "4673:7:62", - "nodeType": "YulIdentifier", - "src": "4673:7:62" - }, - { - "name": "headStart", - "nativeSrc": "4682:9:62", - "nodeType": "YulIdentifier", - "src": "4682:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "4669:3:62", - "nodeType": "YulIdentifier", - "src": "4669:3:62" - }, - "nativeSrc": "4669:23:62", - "nodeType": "YulFunctionCall", - "src": "4669:23:62" - }, - { - "kind": "number", - "nativeSrc": "4694:2:62", - "nodeType": "YulLiteral", - "src": "4694:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "4665:3:62", - "nodeType": "YulIdentifier", - "src": "4665:3:62" - }, - "nativeSrc": "4665:32:62", - "nodeType": "YulFunctionCall", - "src": "4665:32:62" - }, - "nativeSrc": "4662:52:62", - "nodeType": "YulIf", - "src": "4662:52:62" - }, - { - "nativeSrc": "4723:14:62", - "nodeType": "YulVariableDeclaration", - "src": "4723:14:62", - "value": { - "kind": "number", - "nativeSrc": "4736:1:62", - "nodeType": "YulLiteral", - "src": "4736:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "4727:5:62", - "nodeType": "YulTypedName", - "src": "4727:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "4746:32:62", - "nodeType": "YulAssignment", - "src": "4746:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4768:9:62", - "nodeType": "YulIdentifier", - "src": "4768:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4755:12:62", - "nodeType": "YulIdentifier", - "src": "4755:12:62" - }, - "nativeSrc": "4755:23:62", - "nodeType": "YulFunctionCall", - "src": "4755:23:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "4746:5:62", - "nodeType": "YulIdentifier", - "src": "4746:5:62" - } - ] - }, - { - "nativeSrc": "4787:15:62", - "nodeType": "YulAssignment", - "src": "4787:15:62", - "value": { - "name": "value", - "nativeSrc": "4797:5:62", - "nodeType": "YulIdentifier", - "src": "4797:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "4787:6:62", - "nodeType": "YulIdentifier", - "src": "4787:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nativeSrc": "4582:226:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "4618:9:62", - "nodeType": "YulTypedName", - "src": "4618:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "4629:7:62", - "nodeType": "YulTypedName", - "src": "4629:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "4641:6:62", - "nodeType": "YulTypedName", - "src": "4641:6:62", - "type": "" - } - ], - "src": "4582:226:62" - }, - { - "body": { - "nativeSrc": "4938:153:62", - "nodeType": "YulBlock", - "src": "4938:153:62", - "statements": [ - { - "nativeSrc": "4948:26:62", - "nodeType": "YulAssignment", - "src": "4948:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4960:9:62", - "nodeType": "YulIdentifier", - "src": "4960:9:62" - }, - { - "kind": "number", - "nativeSrc": "4971:2:62", - "nodeType": "YulLiteral", - "src": "4971:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4956:3:62", - "nodeType": "YulIdentifier", - "src": "4956:3:62" - }, - "nativeSrc": "4956:18:62", - "nodeType": "YulFunctionCall", - "src": "4956:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "4948:4:62", - "nodeType": "YulIdentifier", - "src": "4948:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4990:9:62", - "nodeType": "YulIdentifier", - "src": "4990:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "5005:6:62", - "nodeType": "YulIdentifier", - "src": "5005:6:62" - }, - { - "kind": "number", - "nativeSrc": "5013:10:62", - "nodeType": "YulLiteral", - "src": "5013:10:62", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5001:3:62", - "nodeType": "YulIdentifier", - "src": "5001:3:62" - }, - "nativeSrc": "5001:23:62", - "nodeType": "YulFunctionCall", - "src": "5001:23:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4983:6:62", - "nodeType": "YulIdentifier", - "src": "4983:6:62" - }, - "nativeSrc": "4983:42:62", - "nodeType": "YulFunctionCall", - "src": "4983:42:62" - }, - "nativeSrc": "4983:42:62", - "nodeType": "YulExpressionStatement", - "src": "4983:42:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5045:9:62", - "nodeType": "YulIdentifier", - "src": "5045:9:62" - }, - { - "kind": "number", - "nativeSrc": "5056:2:62", - "nodeType": "YulLiteral", - "src": "5056:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5041:3:62", - "nodeType": "YulIdentifier", - "src": "5041:3:62" - }, - "nativeSrc": "5041:18:62", - "nodeType": "YulFunctionCall", - "src": "5041:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "5065:6:62", - "nodeType": "YulIdentifier", - "src": "5065:6:62" - }, - { - "kind": "number", - "nativeSrc": "5073:10:62", - "nodeType": "YulLiteral", - "src": "5073:10:62", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5061:3:62", - "nodeType": "YulIdentifier", - "src": "5061:3:62" - }, - "nativeSrc": "5061:23:62", - "nodeType": "YulFunctionCall", - "src": "5061:23:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5034:6:62", - "nodeType": "YulIdentifier", - "src": "5034:6:62" - }, - "nativeSrc": "5034:51:62", - "nodeType": "YulFunctionCall", - "src": "5034:51:62" - }, - "nativeSrc": "5034:51:62", - "nodeType": "YulExpressionStatement", - "src": "5034:51:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint32_t_uint32__to_t_uint32_t_uint32__fromStack_reversed", - "nativeSrc": "4813:278:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "4899:9:62", - "nodeType": "YulTypedName", - "src": "4899:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "4910:6:62", - "nodeType": "YulTypedName", - "src": "4910:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "4918:6:62", - "nodeType": "YulTypedName", - "src": "4918:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "4929:4:62", - "nodeType": "YulTypedName", - "src": "4929:4:62", - "type": "" - } - ], - "src": "4813:278:62" - }, - { - "body": { - "nativeSrc": "5162:184:62", - "nodeType": "YulBlock", - "src": "5162:184:62", - "statements": [ - { - "nativeSrc": "5172:10:62", - "nodeType": "YulVariableDeclaration", - "src": "5172:10:62", - "value": { - "kind": "number", - "nativeSrc": "5181:1:62", - "nodeType": "YulLiteral", - "src": "5181:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "5176:1:62", - "nodeType": "YulTypedName", - "src": "5176:1:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5241:63:62", - "nodeType": "YulBlock", - "src": "5241:63:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nativeSrc": "5266:3:62", - "nodeType": "YulIdentifier", - "src": "5266:3:62" - }, - { - "name": "i", - "nativeSrc": "5271:1:62", - "nodeType": "YulIdentifier", - "src": "5271:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5262:3:62", - "nodeType": "YulIdentifier", - "src": "5262:3:62" - }, - "nativeSrc": "5262:11:62", - "nodeType": "YulFunctionCall", - "src": "5262:11:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "5285:3:62", - "nodeType": "YulIdentifier", - "src": "5285:3:62" - }, - { - "name": "i", - "nativeSrc": "5290:1:62", - "nodeType": "YulIdentifier", - "src": "5290:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5281:3:62", - "nodeType": "YulIdentifier", - "src": "5281:3:62" - }, - "nativeSrc": "5281:11:62", - "nodeType": "YulFunctionCall", - "src": "5281:11:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5275:5:62", - "nodeType": "YulIdentifier", - "src": "5275:5:62" - }, - "nativeSrc": "5275:18:62", - "nodeType": "YulFunctionCall", - "src": "5275:18:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5255:6:62", - "nodeType": "YulIdentifier", - "src": "5255:6:62" - }, - "nativeSrc": "5255:39:62", - "nodeType": "YulFunctionCall", - "src": "5255:39:62" - }, - "nativeSrc": "5255:39:62", - "nodeType": "YulExpressionStatement", - "src": "5255:39:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "5202:1:62", - "nodeType": "YulIdentifier", - "src": "5202:1:62" - }, - { - "name": "length", - "nativeSrc": "5205:6:62", - "nodeType": "YulIdentifier", - "src": "5205:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "5199:2:62", - "nodeType": "YulIdentifier", - "src": "5199:2:62" - }, - "nativeSrc": "5199:13:62", - "nodeType": "YulFunctionCall", - "src": "5199:13:62" - }, - "nativeSrc": "5191:113:62", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "5213:19:62", - "nodeType": "YulBlock", - "src": "5213:19:62", - "statements": [ - { - "nativeSrc": "5215:15:62", - "nodeType": "YulAssignment", - "src": "5215:15:62", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "5224:1:62", - "nodeType": "YulIdentifier", - "src": "5224:1:62" - }, - { - "kind": "number", - "nativeSrc": "5227:2:62", - "nodeType": "YulLiteral", - "src": "5227:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5220:3:62", - "nodeType": "YulIdentifier", - "src": "5220:3:62" - }, - "nativeSrc": "5220:10:62", - "nodeType": "YulFunctionCall", - "src": "5220:10:62" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "5215:1:62", - "nodeType": "YulIdentifier", - "src": "5215:1:62" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "5195:3:62", - "nodeType": "YulBlock", - "src": "5195:3:62", - "statements": [] - }, - "src": "5191:113:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nativeSrc": "5324:3:62", - "nodeType": "YulIdentifier", - "src": "5324:3:62" - }, - { - "name": "length", - "nativeSrc": "5329:6:62", - "nodeType": "YulIdentifier", - "src": "5329:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5320:3:62", - "nodeType": "YulIdentifier", - "src": "5320:3:62" - }, - "nativeSrc": "5320:16:62", - "nodeType": "YulFunctionCall", - "src": "5320:16:62" - }, - { - "kind": "number", - "nativeSrc": "5338:1:62", - "nodeType": "YulLiteral", - "src": "5338:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5313:6:62", - "nodeType": "YulIdentifier", - "src": "5313:6:62" - }, - "nativeSrc": "5313:27:62", - "nodeType": "YulFunctionCall", - "src": "5313:27:62" - }, - "nativeSrc": "5313:27:62", - "nodeType": "YulExpressionStatement", - "src": "5313:27:62" - } - ] - }, - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "5096:250:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nativeSrc": "5140:3:62", - "nodeType": "YulTypedName", - "src": "5140:3:62", - "type": "" - }, - { - "name": "dst", - "nativeSrc": "5145:3:62", - "nodeType": "YulTypedName", - "src": "5145:3:62", - "type": "" - }, - { - "name": "length", - "nativeSrc": "5150:6:62", - "nodeType": "YulTypedName", - "src": "5150:6:62", - "type": "" - } - ], - "src": "5096:250:62" - }, - { - "body": { - "nativeSrc": "5401:221:62", - "nodeType": "YulBlock", - "src": "5401:221:62", - "statements": [ - { - "nativeSrc": "5411:26:62", - "nodeType": "YulVariableDeclaration", - "src": "5411:26:62", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "5431:5:62", - "nodeType": "YulIdentifier", - "src": "5431:5:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5425:5:62", - "nodeType": "YulIdentifier", - "src": "5425:5:62" - }, - "nativeSrc": "5425:12:62", - "nodeType": "YulFunctionCall", - "src": "5425:12:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "5415:6:62", - "nodeType": "YulTypedName", - "src": "5415:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "5453:3:62", - "nodeType": "YulIdentifier", - "src": "5453:3:62" - }, - { - "name": "length", - "nativeSrc": "5458:6:62", - "nodeType": "YulIdentifier", - "src": "5458:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5446:6:62", - "nodeType": "YulIdentifier", - "src": "5446:6:62" - }, - "nativeSrc": "5446:19:62", - "nodeType": "YulFunctionCall", - "src": "5446:19:62" - }, - "nativeSrc": "5446:19:62", - "nodeType": "YulExpressionStatement", - "src": "5446:19:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "5513:5:62", - "nodeType": "YulIdentifier", - "src": "5513:5:62" - }, - { - "kind": "number", - "nativeSrc": "5520:4:62", - "nodeType": "YulLiteral", - "src": "5520:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5509:3:62", - "nodeType": "YulIdentifier", - "src": "5509:3:62" - }, - "nativeSrc": "5509:16:62", - "nodeType": "YulFunctionCall", - "src": "5509:16:62" - }, - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "5531:3:62", - "nodeType": "YulIdentifier", - "src": "5531:3:62" - }, - { - "kind": "number", - "nativeSrc": "5536:4:62", - "nodeType": "YulLiteral", - "src": "5536:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5527:3:62", - "nodeType": "YulIdentifier", - "src": "5527:3:62" - }, - "nativeSrc": "5527:14:62", - "nodeType": "YulFunctionCall", - "src": "5527:14:62" - }, - { - "name": "length", - "nativeSrc": "5543:6:62", - "nodeType": "YulIdentifier", - "src": "5543:6:62" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "5474:34:62", - "nodeType": "YulIdentifier", - "src": "5474:34:62" - }, - "nativeSrc": "5474:76:62", - "nodeType": "YulFunctionCall", - "src": "5474:76:62" - }, - "nativeSrc": "5474:76:62", - "nodeType": "YulExpressionStatement", - "src": "5474:76:62" - }, - { - "nativeSrc": "5559:57:62", - "nodeType": "YulAssignment", - "src": "5559:57:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "5574:3:62", - "nodeType": "YulIdentifier", - "src": "5574:3:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "5587:6:62", - "nodeType": "YulIdentifier", - "src": "5587:6:62" - }, - { - "kind": "number", - "nativeSrc": "5595:2:62", - "nodeType": "YulLiteral", - "src": "5595:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5583:3:62", - "nodeType": "YulIdentifier", - "src": "5583:3:62" - }, - "nativeSrc": "5583:15:62", - "nodeType": "YulFunctionCall", - "src": "5583:15:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5604:2:62", - "nodeType": "YulLiteral", - "src": "5604:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "5600:3:62", - "nodeType": "YulIdentifier", - "src": "5600:3:62" - }, - "nativeSrc": "5600:7:62", - "nodeType": "YulFunctionCall", - "src": "5600:7:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5579:3:62", - "nodeType": "YulIdentifier", - "src": "5579:3:62" - }, - "nativeSrc": "5579:29:62", - "nodeType": "YulFunctionCall", - "src": "5579:29:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5570:3:62", - "nodeType": "YulIdentifier", - "src": "5570:3:62" - }, - "nativeSrc": "5570:39:62", - "nodeType": "YulFunctionCall", - "src": "5570:39:62" - }, - { - "kind": "number", - "nativeSrc": "5611:4:62", - "nodeType": "YulLiteral", - "src": "5611:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5566:3:62", - "nodeType": "YulIdentifier", - "src": "5566:3:62" - }, - "nativeSrc": "5566:50:62", - "nodeType": "YulFunctionCall", - "src": "5566:50:62" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "5559:3:62", - "nodeType": "YulIdentifier", - "src": "5559:3:62" - } - ] - } - ] - }, - "name": "abi_encode_string", - "nativeSrc": "5351:271:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "5378:5:62", - "nodeType": "YulTypedName", - "src": "5378:5:62", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "5385:3:62", - "nodeType": "YulTypedName", - "src": "5385:3:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "5393:3:62", - "nodeType": "YulTypedName", - "src": "5393:3:62", - "type": "" - } - ], - "src": "5351:271:62" - }, - { - "body": { - "nativeSrc": "5824:257:62", - "nodeType": "YulBlock", - "src": "5824:257:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5841:9:62", - "nodeType": "YulIdentifier", - "src": "5841:9:62" - }, - { - "name": "value0", - "nativeSrc": "5852:6:62", - "nodeType": "YulIdentifier", - "src": "5852:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5834:6:62", - "nodeType": "YulIdentifier", - "src": "5834:6:62" - }, - "nativeSrc": "5834:25:62", - "nodeType": "YulFunctionCall", - "src": "5834:25:62" - }, - "nativeSrc": "5834:25:62", - "nodeType": "YulExpressionStatement", - "src": "5834:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5879:9:62", - "nodeType": "YulIdentifier", - "src": "5879:9:62" - }, - { - "kind": "number", - "nativeSrc": "5890:2:62", - "nodeType": "YulLiteral", - "src": "5890:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5875:3:62", - "nodeType": "YulIdentifier", - "src": "5875:3:62" - }, - "nativeSrc": "5875:18:62", - "nodeType": "YulFunctionCall", - "src": "5875:18:62" - }, - { - "kind": "number", - "nativeSrc": "5895:2:62", - "nodeType": "YulLiteral", - "src": "5895:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5868:6:62", - "nodeType": "YulIdentifier", - "src": "5868:6:62" - }, - "nativeSrc": "5868:30:62", - "nodeType": "YulFunctionCall", - "src": "5868:30:62" - }, - "nativeSrc": "5868:30:62", - "nodeType": "YulExpressionStatement", - "src": "5868:30:62" - }, - { - "nativeSrc": "5907:59:62", - "nodeType": "YulVariableDeclaration", - "src": "5907:59:62", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "5939:6:62", - "nodeType": "YulIdentifier", - "src": "5939:6:62" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5951:9:62", - "nodeType": "YulIdentifier", - "src": "5951:9:62" - }, - { - "kind": "number", - "nativeSrc": "5962:2:62", - "nodeType": "YulLiteral", - "src": "5962:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5947:3:62", - "nodeType": "YulIdentifier", - "src": "5947:3:62" - }, - "nativeSrc": "5947:18:62", - "nodeType": "YulFunctionCall", - "src": "5947:18:62" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "5921:17:62", - "nodeType": "YulIdentifier", - "src": "5921:17:62" - }, - "nativeSrc": "5921:45:62", - "nodeType": "YulFunctionCall", - "src": "5921:45:62" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "5911:6:62", - "nodeType": "YulTypedName", - "src": "5911:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5986:9:62", - "nodeType": "YulIdentifier", - "src": "5986:9:62" - }, - { - "kind": "number", - "nativeSrc": "5997:2:62", - "nodeType": "YulLiteral", - "src": "5997:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5982:3:62", - "nodeType": "YulIdentifier", - "src": "5982:3:62" - }, - "nativeSrc": "5982:18:62", - "nodeType": "YulFunctionCall", - "src": "5982:18:62" - }, - { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "6006:6:62", - "nodeType": "YulIdentifier", - "src": "6006:6:62" - }, - { - "name": "headStart", - "nativeSrc": "6014:9:62", - "nodeType": "YulIdentifier", - "src": "6014:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "6002:3:62", - "nodeType": "YulIdentifier", - "src": "6002:3:62" - }, - "nativeSrc": "6002:22:62", - "nodeType": "YulFunctionCall", - "src": "6002:22:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5975:6:62", - "nodeType": "YulIdentifier", - "src": "5975:6:62" - }, - "nativeSrc": "5975:50:62", - "nodeType": "YulFunctionCall", - "src": "5975:50:62" - }, - "nativeSrc": "5975:50:62", - "nodeType": "YulExpressionStatement", - "src": "5975:50:62" - }, - { - "nativeSrc": "6034:41:62", - "nodeType": "YulAssignment", - "src": "6034:41:62", - "value": { - "arguments": [ - { - "name": "value2", - "nativeSrc": "6060:6:62", - "nodeType": "YulIdentifier", - "src": "6060:6:62" - }, - { - "name": "tail_1", - "nativeSrc": "6068:6:62", - "nodeType": "YulIdentifier", - "src": "6068:6:62" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "6042:17:62", - "nodeType": "YulIdentifier", - "src": "6042:17:62" - }, - "nativeSrc": "6042:33:62", - "nodeType": "YulFunctionCall", - "src": "6042:33:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "6034:4:62", - "nodeType": "YulIdentifier", - "src": "6034:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_string_memory_ptr_t_string_memory_ptr__to_t_uint256_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed", - "nativeSrc": "5627:454:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "5777:9:62", - "nodeType": "YulTypedName", - "src": "5777:9:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "5788:6:62", - "nodeType": "YulTypedName", - "src": "5788:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "5796:6:62", - "nodeType": "YulTypedName", - "src": "5796:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "5804:6:62", - "nodeType": "YulTypedName", - "src": "5804:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "5815:4:62", - "nodeType": "YulTypedName", - "src": "5815:4:62", - "type": "" - } - ], - "src": "5627:454:62" - }, - { - "body": { - "nativeSrc": "6383:408:62", - "nodeType": "YulBlock", - "src": "6383:408:62", - "statements": [ - { - "nativeSrc": "6393:27:62", - "nodeType": "YulAssignment", - "src": "6393:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6405:9:62", - "nodeType": "YulIdentifier", - "src": "6405:9:62" - }, - { - "kind": "number", - "nativeSrc": "6416:3:62", - "nodeType": "YulLiteral", - "src": "6416:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6401:3:62", - "nodeType": "YulIdentifier", - "src": "6401:3:62" - }, - "nativeSrc": "6401:19:62", - "nodeType": "YulFunctionCall", - "src": "6401:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "6393:4:62", - "nodeType": "YulIdentifier", - "src": "6393:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6436:9:62", - "nodeType": "YulIdentifier", - "src": "6436:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "6451:6:62", - "nodeType": "YulIdentifier", - "src": "6451:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6467:3:62", - "nodeType": "YulLiteral", - "src": "6467:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "6472:1:62", - "nodeType": "YulLiteral", - "src": "6472:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "6463:3:62", - "nodeType": "YulIdentifier", - "src": "6463:3:62" - }, - "nativeSrc": "6463:11:62", - "nodeType": "YulFunctionCall", - "src": "6463:11:62" - }, - { - "kind": "number", - "nativeSrc": "6476:1:62", - "nodeType": "YulLiteral", - "src": "6476:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "6459:3:62", - "nodeType": "YulIdentifier", - "src": "6459:3:62" - }, - "nativeSrc": "6459:19:62", - "nodeType": "YulFunctionCall", - "src": "6459:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "6447:3:62", - "nodeType": "YulIdentifier", - "src": "6447:3:62" - }, - "nativeSrc": "6447:32:62", - "nodeType": "YulFunctionCall", - "src": "6447:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6429:6:62", - "nodeType": "YulIdentifier", - "src": "6429:6:62" - }, - "nativeSrc": "6429:51:62", - "nodeType": "YulFunctionCall", - "src": "6429:51:62" - }, - "nativeSrc": "6429:51:62", - "nodeType": "YulExpressionStatement", - "src": "6429:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6500:9:62", - "nodeType": "YulIdentifier", - "src": "6500:9:62" - }, - { - "kind": "number", - "nativeSrc": "6511:2:62", - "nodeType": "YulLiteral", - "src": "6511:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6496:3:62", - "nodeType": "YulIdentifier", - "src": "6496:3:62" - }, - "nativeSrc": "6496:18:62", - "nodeType": "YulFunctionCall", - "src": "6496:18:62" - }, - { - "name": "value1", - "nativeSrc": "6516:6:62", - "nodeType": "YulIdentifier", - "src": "6516:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6489:6:62", - "nodeType": "YulIdentifier", - "src": "6489:6:62" - }, - "nativeSrc": "6489:34:62", - "nodeType": "YulFunctionCall", - "src": "6489:34:62" - }, - "nativeSrc": "6489:34:62", - "nodeType": "YulExpressionStatement", - "src": "6489:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6543:9:62", - "nodeType": "YulIdentifier", - "src": "6543:9:62" - }, - { - "kind": "number", - "nativeSrc": "6554:2:62", - "nodeType": "YulLiteral", - "src": "6554:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6539:3:62", - "nodeType": "YulIdentifier", - "src": "6539:3:62" - }, - "nativeSrc": "6539:18:62", - "nodeType": "YulFunctionCall", - "src": "6539:18:62" - }, - { - "name": "value2", - "nativeSrc": "6559:6:62", - "nodeType": "YulIdentifier", - "src": "6559:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6532:6:62", - "nodeType": "YulIdentifier", - "src": "6532:6:62" - }, - "nativeSrc": "6532:34:62", - "nodeType": "YulFunctionCall", - "src": "6532:34:62" - }, - "nativeSrc": "6532:34:62", - "nodeType": "YulExpressionStatement", - "src": "6532:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6586:9:62", - "nodeType": "YulIdentifier", - "src": "6586:9:62" - }, - { - "kind": "number", - "nativeSrc": "6597:2:62", - "nodeType": "YulLiteral", - "src": "6597:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6582:3:62", - "nodeType": "YulIdentifier", - "src": "6582:3:62" - }, - "nativeSrc": "6582:18:62", - "nodeType": "YulFunctionCall", - "src": "6582:18:62" - }, - { - "name": "value3", - "nativeSrc": "6602:6:62", - "nodeType": "YulIdentifier", - "src": "6602:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6575:6:62", - "nodeType": "YulIdentifier", - "src": "6575:6:62" - }, - "nativeSrc": "6575:34:62", - "nodeType": "YulFunctionCall", - "src": "6575:34:62" - }, - "nativeSrc": "6575:34:62", - "nodeType": "YulExpressionStatement", - "src": "6575:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6629:9:62", - "nodeType": "YulIdentifier", - "src": "6629:9:62" - }, - { - "kind": "number", - "nativeSrc": "6640:3:62", - "nodeType": "YulLiteral", - "src": "6640:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6625:3:62", - "nodeType": "YulIdentifier", - "src": "6625:3:62" - }, - "nativeSrc": "6625:19:62", - "nodeType": "YulFunctionCall", - "src": "6625:19:62" - }, - { - "name": "value4", - "nativeSrc": "6646:6:62", - "nodeType": "YulIdentifier", - "src": "6646:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6618:6:62", - "nodeType": "YulIdentifier", - "src": "6618:6:62" - }, - "nativeSrc": "6618:35:62", - "nodeType": "YulFunctionCall", - "src": "6618:35:62" - }, - "nativeSrc": "6618:35:62", - "nodeType": "YulExpressionStatement", - "src": "6618:35:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6673:9:62", - "nodeType": "YulIdentifier", - "src": "6673:9:62" - }, - { - "kind": "number", - "nativeSrc": "6684:3:62", - "nodeType": "YulLiteral", - "src": "6684:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6669:3:62", - "nodeType": "YulIdentifier", - "src": "6669:3:62" - }, - "nativeSrc": "6669:19:62", - "nodeType": "YulFunctionCall", - "src": "6669:19:62" - }, - { - "name": "value5", - "nativeSrc": "6690:6:62", - "nodeType": "YulIdentifier", - "src": "6690:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6662:6:62", - "nodeType": "YulIdentifier", - "src": "6662:6:62" - }, - "nativeSrc": "6662:35:62", - "nodeType": "YulFunctionCall", - "src": "6662:35:62" - }, - "nativeSrc": "6662:35:62", - "nodeType": "YulExpressionStatement", - "src": "6662:35:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6717:9:62", - "nodeType": "YulIdentifier", - "src": "6717:9:62" - }, - { - "kind": "number", - "nativeSrc": "6728:3:62", - "nodeType": "YulLiteral", - "src": "6728:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6713:3:62", - "nodeType": "YulIdentifier", - "src": "6713:3:62" - }, - "nativeSrc": "6713:19:62", - "nodeType": "YulFunctionCall", - "src": "6713:19:62" - }, - { - "name": "value6", - "nativeSrc": "6734:6:62", - "nodeType": "YulIdentifier", - "src": "6734:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6706:6:62", - "nodeType": "YulIdentifier", - "src": "6706:6:62" - }, - "nativeSrc": "6706:35:62", - "nodeType": "YulFunctionCall", - "src": "6706:35:62" - }, - "nativeSrc": "6706:35:62", - "nodeType": "YulExpressionStatement", - "src": "6706:35:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6761:9:62", - "nodeType": "YulIdentifier", - "src": "6761:9:62" - }, - { - "kind": "number", - "nativeSrc": "6772:3:62", - "nodeType": "YulLiteral", - "src": "6772:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6757:3:62", - "nodeType": "YulIdentifier", - "src": "6757:3:62" - }, - "nativeSrc": "6757:19:62", - "nodeType": "YulFunctionCall", - "src": "6757:19:62" - }, - { - "name": "value7", - "nativeSrc": "6778:6:62", - "nodeType": "YulIdentifier", - "src": "6778:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6750:6:62", - "nodeType": "YulIdentifier", - "src": "6750:6:62" - }, - "nativeSrc": "6750:35:62", - "nodeType": "YulFunctionCall", - "src": "6750:35:62" - }, - "nativeSrc": "6750:35:62", - "nodeType": "YulExpressionStatement", - "src": "6750:35:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "6086:705:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6296:9:62", - "nodeType": "YulTypedName", - "src": "6296:9:62", - "type": "" - }, - { - "name": "value7", - "nativeSrc": "6307:6:62", - "nodeType": "YulTypedName", - "src": "6307:6:62", - "type": "" - }, - { - "name": "value6", - "nativeSrc": "6315:6:62", - "nodeType": "YulTypedName", - "src": "6315:6:62", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "6323:6:62", - "nodeType": "YulTypedName", - "src": "6323:6:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "6331:6:62", - "nodeType": "YulTypedName", - "src": "6331:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "6339:6:62", - "nodeType": "YulTypedName", - "src": "6339:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "6347:6:62", - "nodeType": "YulTypedName", - "src": "6347:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "6355:6:62", - "nodeType": "YulTypedName", - "src": "6355:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "6363:6:62", - "nodeType": "YulTypedName", - "src": "6363:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "6374:4:62", - "nodeType": "YulTypedName", - "src": "6374:4:62", - "type": "" - } - ], - "src": "6086:705:62" - }, - { - "body": { - "nativeSrc": "7009:276:62", - "nodeType": "YulBlock", - "src": "7009:276:62", - "statements": [ - { - "nativeSrc": "7019:27:62", - "nodeType": "YulAssignment", - "src": "7019:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7031:9:62", - "nodeType": "YulIdentifier", - "src": "7031:9:62" - }, - { - "kind": "number", - "nativeSrc": "7042:3:62", - "nodeType": "YulLiteral", - "src": "7042:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7027:3:62", - "nodeType": "YulIdentifier", - "src": "7027:3:62" - }, - "nativeSrc": "7027:19:62", - "nodeType": "YulFunctionCall", - "src": "7027:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "7019:4:62", - "nodeType": "YulIdentifier", - "src": "7019:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7062:9:62", - "nodeType": "YulIdentifier", - "src": "7062:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "7077:6:62", - "nodeType": "YulIdentifier", - "src": "7077:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7093:3:62", - "nodeType": "YulLiteral", - "src": "7093:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "7098:1:62", - "nodeType": "YulLiteral", - "src": "7098:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "7089:3:62", - "nodeType": "YulIdentifier", - "src": "7089:3:62" - }, - "nativeSrc": "7089:11:62", - "nodeType": "YulFunctionCall", - "src": "7089:11:62" - }, - { - "kind": "number", - "nativeSrc": "7102:1:62", - "nodeType": "YulLiteral", - "src": "7102:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "7085:3:62", - "nodeType": "YulIdentifier", - "src": "7085:3:62" - }, - "nativeSrc": "7085:19:62", - "nodeType": "YulFunctionCall", - "src": "7085:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "7073:3:62", - "nodeType": "YulIdentifier", - "src": "7073:3:62" - }, - "nativeSrc": "7073:32:62", - "nodeType": "YulFunctionCall", - "src": "7073:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7055:6:62", - "nodeType": "YulIdentifier", - "src": "7055:6:62" - }, - "nativeSrc": "7055:51:62", - "nodeType": "YulFunctionCall", - "src": "7055:51:62" - }, - "nativeSrc": "7055:51:62", - "nodeType": "YulExpressionStatement", - "src": "7055:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7126:9:62", - "nodeType": "YulIdentifier", - "src": "7126:9:62" - }, - { - "kind": "number", - "nativeSrc": "7137:2:62", - "nodeType": "YulLiteral", - "src": "7137:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7122:3:62", - "nodeType": "YulIdentifier", - "src": "7122:3:62" - }, - "nativeSrc": "7122:18:62", - "nodeType": "YulFunctionCall", - "src": "7122:18:62" - }, - { - "name": "value1", - "nativeSrc": "7142:6:62", - "nodeType": "YulIdentifier", - "src": "7142:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7115:6:62", - "nodeType": "YulIdentifier", - "src": "7115:6:62" - }, - "nativeSrc": "7115:34:62", - "nodeType": "YulFunctionCall", - "src": "7115:34:62" - }, - "nativeSrc": "7115:34:62", - "nodeType": "YulExpressionStatement", - "src": "7115:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7169:9:62", - "nodeType": "YulIdentifier", - "src": "7169:9:62" - }, - { - "kind": "number", - "nativeSrc": "7180:2:62", - "nodeType": "YulLiteral", - "src": "7180:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7165:3:62", - "nodeType": "YulIdentifier", - "src": "7165:3:62" - }, - "nativeSrc": "7165:18:62", - "nodeType": "YulFunctionCall", - "src": "7165:18:62" - }, - { - "name": "value2", - "nativeSrc": "7185:6:62", - "nodeType": "YulIdentifier", - "src": "7185:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7158:6:62", - "nodeType": "YulIdentifier", - "src": "7158:6:62" - }, - "nativeSrc": "7158:34:62", - "nodeType": "YulFunctionCall", - "src": "7158:34:62" - }, - "nativeSrc": "7158:34:62", - "nodeType": "YulExpressionStatement", - "src": "7158:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7212:9:62", - "nodeType": "YulIdentifier", - "src": "7212:9:62" - }, - { - "kind": "number", - "nativeSrc": "7223:2:62", - "nodeType": "YulLiteral", - "src": "7223:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7208:3:62", - "nodeType": "YulIdentifier", - "src": "7208:3:62" - }, - "nativeSrc": "7208:18:62", - "nodeType": "YulFunctionCall", - "src": "7208:18:62" - }, - { - "name": "value3", - "nativeSrc": "7228:6:62", - "nodeType": "YulIdentifier", - "src": "7228:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7201:6:62", - "nodeType": "YulIdentifier", - "src": "7201:6:62" - }, - "nativeSrc": "7201:34:62", - "nodeType": "YulFunctionCall", - "src": "7201:34:62" - }, - "nativeSrc": "7201:34:62", - "nodeType": "YulExpressionStatement", - "src": "7201:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7255:9:62", - "nodeType": "YulIdentifier", - "src": "7255:9:62" - }, - { - "kind": "number", - "nativeSrc": "7266:3:62", - "nodeType": "YulLiteral", - "src": "7266:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7251:3:62", - "nodeType": "YulIdentifier", - "src": "7251:3:62" - }, - "nativeSrc": "7251:19:62", - "nodeType": "YulFunctionCall", - "src": "7251:19:62" - }, - { - "name": "value4", - "nativeSrc": "7272:6:62", - "nodeType": "YulIdentifier", - "src": "7272:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7244:6:62", - "nodeType": "YulIdentifier", - "src": "7244:6:62" - }, - "nativeSrc": "7244:35:62", - "nodeType": "YulFunctionCall", - "src": "7244:35:62" - }, - "nativeSrc": "7244:35:62", - "nodeType": "YulExpressionStatement", - "src": "7244:35:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "6796:489:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6946:9:62", - "nodeType": "YulTypedName", - "src": "6946:9:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "6957:6:62", - "nodeType": "YulTypedName", - "src": "6957:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "6965:6:62", - "nodeType": "YulTypedName", - "src": "6965:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "6973:6:62", - "nodeType": "YulTypedName", - "src": "6973:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "6981:6:62", - "nodeType": "YulTypedName", - "src": "6981:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "6989:6:62", - "nodeType": "YulTypedName", - "src": "6989:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "7000:4:62", - "nodeType": "YulTypedName", - "src": "7000:4:62", - "type": "" - } - ], - "src": "6796:489:62" - }, - { - "body": { - "nativeSrc": "7439:172:62", - "nodeType": "YulBlock", - "src": "7439:172:62", - "statements": [ - { - "nativeSrc": "7449:26:62", - "nodeType": "YulAssignment", - "src": "7449:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7461:9:62", - "nodeType": "YulIdentifier", - "src": "7461:9:62" - }, - { - "kind": "number", - "nativeSrc": "7472:2:62", - "nodeType": "YulLiteral", - "src": "7472:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7457:3:62", - "nodeType": "YulIdentifier", - "src": "7457:3:62" - }, - "nativeSrc": "7457:18:62", - "nodeType": "YulFunctionCall", - "src": "7457:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "7449:4:62", - "nodeType": "YulIdentifier", - "src": "7449:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7491:9:62", - "nodeType": "YulIdentifier", - "src": "7491:9:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "7512:6:62", - "nodeType": "YulIdentifier", - "src": "7512:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "7506:5:62", - "nodeType": "YulIdentifier", - "src": "7506:5:62" - }, - "nativeSrc": "7506:13:62", - "nodeType": "YulFunctionCall", - "src": "7506:13:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7529:3:62", - "nodeType": "YulLiteral", - "src": "7529:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "7534:1:62", - "nodeType": "YulLiteral", - "src": "7534:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "7525:3:62", - "nodeType": "YulIdentifier", - "src": "7525:3:62" - }, - "nativeSrc": "7525:11:62", - "nodeType": "YulFunctionCall", - "src": "7525:11:62" - }, - { - "kind": "number", - "nativeSrc": "7538:1:62", - "nodeType": "YulLiteral", - "src": "7538:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "7521:3:62", - "nodeType": "YulIdentifier", - "src": "7521:3:62" - }, - "nativeSrc": "7521:19:62", - "nodeType": "YulFunctionCall", - "src": "7521:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "7502:3:62", - "nodeType": "YulIdentifier", - "src": "7502:3:62" - }, - "nativeSrc": "7502:39:62", - "nodeType": "YulFunctionCall", - "src": "7502:39:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7484:6:62", - "nodeType": "YulIdentifier", - "src": "7484:6:62" - }, - "nativeSrc": "7484:58:62", - "nodeType": "YulFunctionCall", - "src": "7484:58:62" - }, - "nativeSrc": "7484:58:62", - "nodeType": "YulExpressionStatement", - "src": "7484:58:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7562:9:62", - "nodeType": "YulIdentifier", - "src": "7562:9:62" - }, - { - "kind": "number", - "nativeSrc": "7573:4:62", - "nodeType": "YulLiteral", - "src": "7573:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7558:3:62", - "nodeType": "YulIdentifier", - "src": "7558:3:62" - }, - "nativeSrc": "7558:20:62", - "nodeType": "YulFunctionCall", - "src": "7558:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "7590:6:62", - "nodeType": "YulIdentifier", - "src": "7590:6:62" - }, - { - "kind": "number", - "nativeSrc": "7598:4:62", - "nodeType": "YulLiteral", - "src": "7598:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7586:3:62", - "nodeType": "YulIdentifier", - "src": "7586:3:62" - }, - "nativeSrc": "7586:17:62", - "nodeType": "YulFunctionCall", - "src": "7586:17:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "7580:5:62", - "nodeType": "YulIdentifier", - "src": "7580:5:62" - }, - "nativeSrc": "7580:24:62", - "nodeType": "YulFunctionCall", - "src": "7580:24:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7551:6:62", - "nodeType": "YulIdentifier", - "src": "7551:6:62" - }, - "nativeSrc": "7551:54:62", - "nodeType": "YulFunctionCall", - "src": "7551:54:62" - }, - "nativeSrc": "7551:54:62", - "nodeType": "YulExpressionStatement", - "src": "7551:54:62" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_State_$11933_memory_ptr__to_t_struct$_State_$11933_memory_ptr__fromStack_reversed", - "nativeSrc": "7290:321:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "7408:9:62", - "nodeType": "YulTypedName", - "src": "7408:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "7419:6:62", - "nodeType": "YulTypedName", - "src": "7419:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "7430:4:62", - "nodeType": "YulTypedName", - "src": "7430:4:62", - "type": "" - } - ], - "src": "7290:321:62" - }, - { - "body": { - "nativeSrc": "7741:169:62", - "nodeType": "YulBlock", - "src": "7741:169:62", - "statements": [ - { - "nativeSrc": "7751:26:62", - "nodeType": "YulAssignment", - "src": "7751:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7763:9:62", - "nodeType": "YulIdentifier", - "src": "7763:9:62" - }, - { - "kind": "number", - "nativeSrc": "7774:2:62", - "nodeType": "YulLiteral", - "src": "7774:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7759:3:62", - "nodeType": "YulIdentifier", - "src": "7759:3:62" - }, - "nativeSrc": "7759:18:62", - "nodeType": "YulFunctionCall", - "src": "7759:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "7751:4:62", - "nodeType": "YulIdentifier", - "src": "7751:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7793:9:62", - "nodeType": "YulIdentifier", - "src": "7793:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "7808:6:62", - "nodeType": "YulIdentifier", - "src": "7808:6:62" - }, - { - "kind": "number", - "nativeSrc": "7816:18:62", - "nodeType": "YulLiteral", - "src": "7816:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "7804:3:62", - "nodeType": "YulIdentifier", - "src": "7804:3:62" - }, - "nativeSrc": "7804:31:62", - "nodeType": "YulFunctionCall", - "src": "7804:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7786:6:62", - "nodeType": "YulIdentifier", - "src": "7786:6:62" - }, - "nativeSrc": "7786:50:62", - "nodeType": "YulFunctionCall", - "src": "7786:50:62" - }, - "nativeSrc": "7786:50:62", - "nodeType": "YulExpressionStatement", - "src": "7786:50:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7856:9:62", - "nodeType": "YulIdentifier", - "src": "7856:9:62" - }, - { - "kind": "number", - "nativeSrc": "7867:2:62", - "nodeType": "YulLiteral", - "src": "7867:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7852:3:62", - "nodeType": "YulIdentifier", - "src": "7852:3:62" - }, - "nativeSrc": "7852:18:62", - "nodeType": "YulFunctionCall", - "src": "7852:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "7876:6:62", - "nodeType": "YulIdentifier", - "src": "7876:6:62" - }, - { - "kind": "number", - "nativeSrc": "7884:18:62", - "nodeType": "YulLiteral", - "src": "7884:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "7872:3:62", - "nodeType": "YulIdentifier", - "src": "7872:3:62" - }, - "nativeSrc": "7872:31:62", - "nodeType": "YulFunctionCall", - "src": "7872:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "7845:6:62", - "nodeType": "YulIdentifier", - "src": "7845:6:62" - }, - "nativeSrc": "7845:59:62", - "nodeType": "YulFunctionCall", - "src": "7845:59:62" - }, - "nativeSrc": "7845:59:62", - "nodeType": "YulExpressionStatement", - "src": "7845:59:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed", - "nativeSrc": "7616:294:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "7702:9:62", - "nodeType": "YulTypedName", - "src": "7702:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "7713:6:62", - "nodeType": "YulTypedName", - "src": "7713:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "7721:6:62", - "nodeType": "YulTypedName", - "src": "7721:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "7732:4:62", - "nodeType": "YulTypedName", - "src": "7732:4:62", - "type": "" - } - ], - "src": "7616:294:62" - }, - { - "body": { - "nativeSrc": "8016:102:62", - "nodeType": "YulBlock", - "src": "8016:102:62", - "statements": [ - { - "nativeSrc": "8026:26:62", - "nodeType": "YulAssignment", - "src": "8026:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8038:9:62", - "nodeType": "YulIdentifier", - "src": "8038:9:62" - }, - { - "kind": "number", - "nativeSrc": "8049:2:62", - "nodeType": "YulLiteral", - "src": "8049:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8034:3:62", - "nodeType": "YulIdentifier", - "src": "8034:3:62" - }, - "nativeSrc": "8034:18:62", - "nodeType": "YulFunctionCall", - "src": "8034:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "8026:4:62", - "nodeType": "YulIdentifier", - "src": "8026:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8068:9:62", - "nodeType": "YulIdentifier", - "src": "8068:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "8083:6:62", - "nodeType": "YulIdentifier", - "src": "8083:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8099:3:62", - "nodeType": "YulLiteral", - "src": "8099:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "8104:1:62", - "nodeType": "YulLiteral", - "src": "8104:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "8095:3:62", - "nodeType": "YulIdentifier", - "src": "8095:3:62" - }, - "nativeSrc": "8095:11:62", - "nodeType": "YulFunctionCall", - "src": "8095:11:62" - }, - { - "kind": "number", - "nativeSrc": "8108:1:62", - "nodeType": "YulLiteral", - "src": "8108:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "8091:3:62", - "nodeType": "YulIdentifier", - "src": "8091:3:62" - }, - "nativeSrc": "8091:19:62", - "nodeType": "YulFunctionCall", - "src": "8091:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "8079:3:62", - "nodeType": "YulIdentifier", - "src": "8079:3:62" - }, - "nativeSrc": "8079:32:62", - "nodeType": "YulFunctionCall", - "src": "8079:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "8061:6:62", - "nodeType": "YulIdentifier", - "src": "8061:6:62" - }, - "nativeSrc": "8061:51:62", - "nodeType": "YulFunctionCall", - "src": "8061:51:62" - }, - "nativeSrc": "8061:51:62", - "nodeType": "YulExpressionStatement", - "src": "8061:51:62" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nativeSrc": "7915:203:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "7985:9:62", - "nodeType": "YulTypedName", - "src": "7985:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "7996:6:62", - "nodeType": "YulTypedName", - "src": "7996:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "8007:4:62", - "nodeType": "YulTypedName", - "src": "8007:4:62", - "type": "" - } - ], - "src": "7915:203:62" - }, - { - "body": { - "nativeSrc": "8227:404:62", - "nodeType": "YulBlock", - "src": "8227:404:62", - "statements": [ - { - "body": { - "nativeSrc": "8273:16:62", - "nodeType": "YulBlock", - "src": "8273:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8282:1:62", - "nodeType": "YulLiteral", - "src": "8282:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "8285:1:62", - "nodeType": "YulLiteral", - "src": "8285:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "8275:6:62", - "nodeType": "YulIdentifier", - "src": "8275:6:62" - }, - "nativeSrc": "8275:12:62", - "nodeType": "YulFunctionCall", - "src": "8275:12:62" - }, - "nativeSrc": "8275:12:62", - "nodeType": "YulExpressionStatement", - "src": "8275:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "8248:7:62", - "nodeType": "YulIdentifier", - "src": "8248:7:62" - }, - { - "name": "headStart", - "nativeSrc": "8257:9:62", - "nodeType": "YulIdentifier", - "src": "8257:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "8244:3:62", - "nodeType": "YulIdentifier", - "src": "8244:3:62" - }, - "nativeSrc": "8244:23:62", - "nodeType": "YulFunctionCall", - "src": "8244:23:62" - }, - { - "kind": "number", - "nativeSrc": "8269:2:62", - "nodeType": "YulLiteral", - "src": "8269:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "8240:3:62", - "nodeType": "YulIdentifier", - "src": "8240:3:62" - }, - "nativeSrc": "8240:32:62", - "nodeType": "YulFunctionCall", - "src": "8240:32:62" - }, - "nativeSrc": "8237:52:62", - "nodeType": "YulIf", - "src": "8237:52:62" - }, - { - "nativeSrc": "8298:36:62", - "nodeType": "YulVariableDeclaration", - "src": "8298:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8324:9:62", - "nodeType": "YulIdentifier", - "src": "8324:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "8311:12:62", - "nodeType": "YulIdentifier", - "src": "8311:12:62" - }, - "nativeSrc": "8311:23:62", - "nodeType": "YulFunctionCall", - "src": "8311:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "8302:5:62", - "nodeType": "YulTypedName", - "src": "8302:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "8368:5:62", - "nodeType": "YulIdentifier", - "src": "8368:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "8343:24:62", - "nodeType": "YulIdentifier", - "src": "8343:24:62" - }, - "nativeSrc": "8343:31:62", - "nodeType": "YulFunctionCall", - "src": "8343:31:62" - }, - "nativeSrc": "8343:31:62", - "nodeType": "YulExpressionStatement", - "src": "8343:31:62" - }, - { - "nativeSrc": "8383:15:62", - "nodeType": "YulAssignment", - "src": "8383:15:62", - "value": { - "name": "value", - "nativeSrc": "8393:5:62", - "nodeType": "YulIdentifier", - "src": "8393:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "8383:6:62", - "nodeType": "YulIdentifier", - "src": "8383:6:62" - } - ] - }, - { - "nativeSrc": "8407:47:62", - "nodeType": "YulVariableDeclaration", - "src": "8407:47:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8439:9:62", - "nodeType": "YulIdentifier", - "src": "8439:9:62" - }, - { - "kind": "number", - "nativeSrc": "8450:2:62", - "nodeType": "YulLiteral", - "src": "8450:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8435:3:62", - "nodeType": "YulIdentifier", - "src": "8435:3:62" - }, - "nativeSrc": "8435:18:62", - "nodeType": "YulFunctionCall", - "src": "8435:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "8422:12:62", - "nodeType": "YulIdentifier", - "src": "8422:12:62" - }, - "nativeSrc": "8422:32:62", - "nodeType": "YulFunctionCall", - "src": "8422:32:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "8411:7:62", - "nodeType": "YulTypedName", - "src": "8411:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "8488:7:62", - "nodeType": "YulIdentifier", - "src": "8488:7:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "8463:24:62", - "nodeType": "YulIdentifier", - "src": "8463:24:62" - }, - "nativeSrc": "8463:33:62", - "nodeType": "YulFunctionCall", - "src": "8463:33:62" - }, - "nativeSrc": "8463:33:62", - "nodeType": "YulExpressionStatement", - "src": "8463:33:62" - }, - { - "nativeSrc": "8505:17:62", - "nodeType": "YulAssignment", - "src": "8505:17:62", - "value": { - "name": "value_1", - "nativeSrc": "8515:7:62", - "nodeType": "YulIdentifier", - "src": "8515:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "8505:6:62", - "nodeType": "YulIdentifier", - "src": "8505:6:62" - } - ] - }, - { - "nativeSrc": "8531:16:62", - "nodeType": "YulVariableDeclaration", - "src": "8531:16:62", - "value": { - "kind": "number", - "nativeSrc": "8546:1:62", - "nodeType": "YulLiteral", - "src": "8546:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "8535:7:62", - "nodeType": "YulTypedName", - "src": "8535:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "8556:43:62", - "nodeType": "YulAssignment", - "src": "8556:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8584:9:62", - "nodeType": "YulIdentifier", - "src": "8584:9:62" - }, - { - "kind": "number", - "nativeSrc": "8595:2:62", - "nodeType": "YulLiteral", - "src": "8595:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8580:3:62", - "nodeType": "YulIdentifier", - "src": "8580:3:62" - }, - "nativeSrc": "8580:18:62", - "nodeType": "YulFunctionCall", - "src": "8580:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "8567:12:62", - "nodeType": "YulIdentifier", - "src": "8567:12:62" - }, - "nativeSrc": "8567:32:62", - "nodeType": "YulFunctionCall", - "src": "8567:32:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "8556:7:62", - "nodeType": "YulIdentifier", - "src": "8556:7:62" - } - ] - }, - { - "nativeSrc": "8608:17:62", - "nodeType": "YulAssignment", - "src": "8608:17:62", - "value": { - "name": "value_2", - "nativeSrc": "8618:7:62", - "nodeType": "YulIdentifier", - "src": "8618:7:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "8608:6:62", - "nodeType": "YulIdentifier", - "src": "8608:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes32", - "nativeSrc": "8123:508:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8177:9:62", - "nodeType": "YulTypedName", - "src": "8177:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "8188:7:62", - "nodeType": "YulTypedName", - "src": "8188:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "8200:6:62", - "nodeType": "YulTypedName", - "src": "8200:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "8208:6:62", - "nodeType": "YulTypedName", - "src": "8208:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "8216:6:62", - "nodeType": "YulTypedName", - "src": "8216:6:62", - "type": "" - } - ], - "src": "8123:508:62" - }, - { - "body": { - "nativeSrc": "8765:119:62", - "nodeType": "YulBlock", - "src": "8765:119:62", - "statements": [ - { - "nativeSrc": "8775:26:62", - "nodeType": "YulAssignment", - "src": "8775:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8787:9:62", - "nodeType": "YulIdentifier", - "src": "8787:9:62" - }, - { - "kind": "number", - "nativeSrc": "8798:2:62", - "nodeType": "YulLiteral", - "src": "8798:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8783:3:62", - "nodeType": "YulIdentifier", - "src": "8783:3:62" - }, - "nativeSrc": "8783:18:62", - "nodeType": "YulFunctionCall", - "src": "8783:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "8775:4:62", - "nodeType": "YulIdentifier", - "src": "8775:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8817:9:62", - "nodeType": "YulIdentifier", - "src": "8817:9:62" - }, - { - "name": "value0", - "nativeSrc": "8828:6:62", - "nodeType": "YulIdentifier", - "src": "8828:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "8810:6:62", - "nodeType": "YulIdentifier", - "src": "8810:6:62" - }, - "nativeSrc": "8810:25:62", - "nodeType": "YulFunctionCall", - "src": "8810:25:62" - }, - "nativeSrc": "8810:25:62", - "nodeType": "YulExpressionStatement", - "src": "8810:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8855:9:62", - "nodeType": "YulIdentifier", - "src": "8855:9:62" - }, - { - "kind": "number", - "nativeSrc": "8866:2:62", - "nodeType": "YulLiteral", - "src": "8866:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8851:3:62", - "nodeType": "YulIdentifier", - "src": "8851:3:62" - }, - "nativeSrc": "8851:18:62", - "nodeType": "YulFunctionCall", - "src": "8851:18:62" - }, - { - "name": "value1", - "nativeSrc": "8871:6:62", - "nodeType": "YulIdentifier", - "src": "8871:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "8844:6:62", - "nodeType": "YulIdentifier", - "src": "8844:6:62" - }, - "nativeSrc": "8844:34:62", - "nodeType": "YulFunctionCall", - "src": "8844:34:62" - }, - "nativeSrc": "8844:34:62", - "nodeType": "YulExpressionStatement", - "src": "8844:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "8636:248:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8726:9:62", - "nodeType": "YulTypedName", - "src": "8726:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "8737:6:62", - "nodeType": "YulTypedName", - "src": "8737:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "8745:6:62", - "nodeType": "YulTypedName", - "src": "8745:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "8756:4:62", - "nodeType": "YulTypedName", - "src": "8756:4:62", - "type": "" - } - ], - "src": "8636:248:62" - }, - { - "body": { - "nativeSrc": "8993:404:62", - "nodeType": "YulBlock", - "src": "8993:404:62", - "statements": [ - { - "body": { - "nativeSrc": "9039:16:62", - "nodeType": "YulBlock", - "src": "9039:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9048:1:62", - "nodeType": "YulLiteral", - "src": "9048:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9051:1:62", - "nodeType": "YulLiteral", - "src": "9051:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "9041:6:62", - "nodeType": "YulIdentifier", - "src": "9041:6:62" - }, - "nativeSrc": "9041:12:62", - "nodeType": "YulFunctionCall", - "src": "9041:12:62" - }, - "nativeSrc": "9041:12:62", - "nodeType": "YulExpressionStatement", - "src": "9041:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "9014:7:62", - "nodeType": "YulIdentifier", - "src": "9014:7:62" - }, - { - "name": "headStart", - "nativeSrc": "9023:9:62", - "nodeType": "YulIdentifier", - "src": "9023:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "9010:3:62", - "nodeType": "YulIdentifier", - "src": "9010:3:62" - }, - "nativeSrc": "9010:23:62", - "nodeType": "YulFunctionCall", - "src": "9010:23:62" - }, - { - "kind": "number", - "nativeSrc": "9035:2:62", - "nodeType": "YulLiteral", - "src": "9035:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "9006:3:62", - "nodeType": "YulIdentifier", - "src": "9006:3:62" - }, - "nativeSrc": "9006:32:62", - "nodeType": "YulFunctionCall", - "src": "9006:32:62" - }, - "nativeSrc": "9003:52:62", - "nodeType": "YulIf", - "src": "9003:52:62" - }, - { - "nativeSrc": "9064:36:62", - "nodeType": "YulVariableDeclaration", - "src": "9064:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9090:9:62", - "nodeType": "YulIdentifier", - "src": "9090:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9077:12:62", - "nodeType": "YulIdentifier", - "src": "9077:12:62" - }, - "nativeSrc": "9077:23:62", - "nodeType": "YulFunctionCall", - "src": "9077:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "9068:5:62", - "nodeType": "YulTypedName", - "src": "9068:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "9134:5:62", - "nodeType": "YulIdentifier", - "src": "9134:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "9109:24:62", - "nodeType": "YulIdentifier", - "src": "9109:24:62" - }, - "nativeSrc": "9109:31:62", - "nodeType": "YulFunctionCall", - "src": "9109:31:62" - }, - "nativeSrc": "9109:31:62", - "nodeType": "YulExpressionStatement", - "src": "9109:31:62" - }, - { - "nativeSrc": "9149:15:62", - "nodeType": "YulAssignment", - "src": "9149:15:62", - "value": { - "name": "value", - "nativeSrc": "9159:5:62", - "nodeType": "YulIdentifier", - "src": "9159:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "9149:6:62", - "nodeType": "YulIdentifier", - "src": "9149:6:62" - } - ] - }, - { - "nativeSrc": "9173:47:62", - "nodeType": "YulVariableDeclaration", - "src": "9173:47:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9205:9:62", - "nodeType": "YulIdentifier", - "src": "9205:9:62" - }, - { - "kind": "number", - "nativeSrc": "9216:2:62", - "nodeType": "YulLiteral", - "src": "9216:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9201:3:62", - "nodeType": "YulIdentifier", - "src": "9201:3:62" - }, - "nativeSrc": "9201:18:62", - "nodeType": "YulFunctionCall", - "src": "9201:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9188:12:62", - "nodeType": "YulIdentifier", - "src": "9188:12:62" - }, - "nativeSrc": "9188:32:62", - "nodeType": "YulFunctionCall", - "src": "9188:32:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "9177:7:62", - "nodeType": "YulTypedName", - "src": "9177:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "9254:7:62", - "nodeType": "YulIdentifier", - "src": "9254:7:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "9229:24:62", - "nodeType": "YulIdentifier", - "src": "9229:24:62" - }, - "nativeSrc": "9229:33:62", - "nodeType": "YulFunctionCall", - "src": "9229:33:62" - }, - "nativeSrc": "9229:33:62", - "nodeType": "YulExpressionStatement", - "src": "9229:33:62" - }, - { - "nativeSrc": "9271:17:62", - "nodeType": "YulAssignment", - "src": "9271:17:62", - "value": { - "name": "value_1", - "nativeSrc": "9281:7:62", - "nodeType": "YulIdentifier", - "src": "9281:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "9271:6:62", - "nodeType": "YulIdentifier", - "src": "9271:6:62" - } - ] - }, - { - "nativeSrc": "9297:16:62", - "nodeType": "YulVariableDeclaration", - "src": "9297:16:62", - "value": { - "kind": "number", - "nativeSrc": "9312:1:62", - "nodeType": "YulLiteral", - "src": "9312:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "9301:7:62", - "nodeType": "YulTypedName", - "src": "9301:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "9322:43:62", - "nodeType": "YulAssignment", - "src": "9322:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9350:9:62", - "nodeType": "YulIdentifier", - "src": "9350:9:62" - }, - { - "kind": "number", - "nativeSrc": "9361:2:62", - "nodeType": "YulLiteral", - "src": "9361:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9346:3:62", - "nodeType": "YulIdentifier", - "src": "9346:3:62" - }, - "nativeSrc": "9346:18:62", - "nodeType": "YulFunctionCall", - "src": "9346:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9333:12:62", - "nodeType": "YulIdentifier", - "src": "9333:12:62" - }, - "nativeSrc": "9333:32:62", - "nodeType": "YulFunctionCall", - "src": "9333:32:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "9322:7:62", - "nodeType": "YulIdentifier", - "src": "9322:7:62" - } - ] - }, - { - "nativeSrc": "9374:17:62", - "nodeType": "YulAssignment", - "src": "9374:17:62", - "value": { - "name": "value_2", - "nativeSrc": "9384:7:62", - "nodeType": "YulIdentifier", - "src": "9384:7:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "9374:6:62", - "nodeType": "YulIdentifier", - "src": "9374:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256", - "nativeSrc": "8889:508:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8943:9:62", - "nodeType": "YulTypedName", - "src": "8943:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "8954:7:62", - "nodeType": "YulTypedName", - "src": "8954:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "8966:6:62", - "nodeType": "YulTypedName", - "src": "8966:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "8974:6:62", - "nodeType": "YulTypedName", - "src": "8974:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "8982:6:62", - "nodeType": "YulTypedName", - "src": "8982:6:62", - "type": "" - } - ], - "src": "8889:508:62" - }, - { - "body": { - "nativeSrc": "9759:881:62", - "nodeType": "YulBlock", - "src": "9759:881:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9776:9:62", - "nodeType": "YulIdentifier", - "src": "9776:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "9791:6:62", - "nodeType": "YulIdentifier", - "src": "9791:6:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9803:3:62", - "nodeType": "YulLiteral", - "src": "9803:3:62", - "type": "", - "value": "248" - }, - { - "kind": "number", - "nativeSrc": "9808:3:62", - "nodeType": "YulLiteral", - "src": "9808:3:62", - "type": "", - "value": "255" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "9799:3:62", - "nodeType": "YulIdentifier", - "src": "9799:3:62" - }, - "nativeSrc": "9799:13:62", - "nodeType": "YulFunctionCall", - "src": "9799:13:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "9787:3:62", - "nodeType": "YulIdentifier", - "src": "9787:3:62" - }, - "nativeSrc": "9787:26:62", - "nodeType": "YulFunctionCall", - "src": "9787:26:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9769:6:62", - "nodeType": "YulIdentifier", - "src": "9769:6:62" - }, - "nativeSrc": "9769:45:62", - "nodeType": "YulFunctionCall", - "src": "9769:45:62" - }, - "nativeSrc": "9769:45:62", - "nodeType": "YulExpressionStatement", - "src": "9769:45:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9834:9:62", - "nodeType": "YulIdentifier", - "src": "9834:9:62" - }, - { - "kind": "number", - "nativeSrc": "9845:2:62", - "nodeType": "YulLiteral", - "src": "9845:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9830:3:62", - "nodeType": "YulIdentifier", - "src": "9830:3:62" - }, - "nativeSrc": "9830:18:62", - "nodeType": "YulFunctionCall", - "src": "9830:18:62" - }, - { - "kind": "number", - "nativeSrc": "9850:3:62", - "nodeType": "YulLiteral", - "src": "9850:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9823:6:62", - "nodeType": "YulIdentifier", - "src": "9823:6:62" - }, - "nativeSrc": "9823:31:62", - "nodeType": "YulFunctionCall", - "src": "9823:31:62" - }, - "nativeSrc": "9823:31:62", - "nodeType": "YulExpressionStatement", - "src": "9823:31:62" - }, - { - "nativeSrc": "9863:60:62", - "nodeType": "YulVariableDeclaration", - "src": "9863:60:62", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "9895:6:62", - "nodeType": "YulIdentifier", - "src": "9895:6:62" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9907:9:62", - "nodeType": "YulIdentifier", - "src": "9907:9:62" - }, - { - "kind": "number", - "nativeSrc": "9918:3:62", - "nodeType": "YulLiteral", - "src": "9918:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9903:3:62", - "nodeType": "YulIdentifier", - "src": "9903:3:62" - }, - "nativeSrc": "9903:19:62", - "nodeType": "YulFunctionCall", - "src": "9903:19:62" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "9877:17:62", - "nodeType": "YulIdentifier", - "src": "9877:17:62" - }, - "nativeSrc": "9877:46:62", - "nodeType": "YulFunctionCall", - "src": "9877:46:62" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "9867:6:62", - "nodeType": "YulTypedName", - "src": "9867:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9943:9:62", - "nodeType": "YulIdentifier", - "src": "9943:9:62" - }, - { - "kind": "number", - "nativeSrc": "9954:2:62", - "nodeType": "YulLiteral", - "src": "9954:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9939:3:62", - "nodeType": "YulIdentifier", - "src": "9939:3:62" - }, - "nativeSrc": "9939:18:62", - "nodeType": "YulFunctionCall", - "src": "9939:18:62" - }, - { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "9963:6:62", - "nodeType": "YulIdentifier", - "src": "9963:6:62" - }, - { - "name": "headStart", - "nativeSrc": "9971:9:62", - "nodeType": "YulIdentifier", - "src": "9971:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "9959:3:62", - "nodeType": "YulIdentifier", - "src": "9959:3:62" - }, - "nativeSrc": "9959:22:62", - "nodeType": "YulFunctionCall", - "src": "9959:22:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9932:6:62", - "nodeType": "YulIdentifier", - "src": "9932:6:62" - }, - "nativeSrc": "9932:50:62", - "nodeType": "YulFunctionCall", - "src": "9932:50:62" - }, - "nativeSrc": "9932:50:62", - "nodeType": "YulExpressionStatement", - "src": "9932:50:62" - }, - { - "nativeSrc": "9991:47:62", - "nodeType": "YulVariableDeclaration", - "src": "9991:47:62", - "value": { - "arguments": [ - { - "name": "value2", - "nativeSrc": "10023:6:62", - "nodeType": "YulIdentifier", - "src": "10023:6:62" - }, - { - "name": "tail_1", - "nativeSrc": "10031:6:62", - "nodeType": "YulIdentifier", - "src": "10031:6:62" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "10005:17:62", - "nodeType": "YulIdentifier", - "src": "10005:17:62" - }, - "nativeSrc": "10005:33:62", - "nodeType": "YulFunctionCall", - "src": "10005:33:62" - }, - "variables": [ - { - "name": "tail_2", - "nativeSrc": "9995:6:62", - "nodeType": "YulTypedName", - "src": "9995:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10058:9:62", - "nodeType": "YulIdentifier", - "src": "10058:9:62" - }, - { - "kind": "number", - "nativeSrc": "10069:2:62", - "nodeType": "YulLiteral", - "src": "10069:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10054:3:62", - "nodeType": "YulIdentifier", - "src": "10054:3:62" - }, - "nativeSrc": "10054:18:62", - "nodeType": "YulFunctionCall", - "src": "10054:18:62" - }, - { - "name": "value3", - "nativeSrc": "10074:6:62", - "nodeType": "YulIdentifier", - "src": "10074:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "10047:6:62", - "nodeType": "YulIdentifier", - "src": "10047:6:62" - }, - "nativeSrc": "10047:34:62", - "nodeType": "YulFunctionCall", - "src": "10047:34:62" - }, - "nativeSrc": "10047:34:62", - "nodeType": "YulExpressionStatement", - "src": "10047:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10101:9:62", - "nodeType": "YulIdentifier", - "src": "10101:9:62" - }, - { - "kind": "number", - "nativeSrc": "10112:3:62", - "nodeType": "YulLiteral", - "src": "10112:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10097:3:62", - "nodeType": "YulIdentifier", - "src": "10097:3:62" - }, - "nativeSrc": "10097:19:62", - "nodeType": "YulFunctionCall", - "src": "10097:19:62" - }, - { - "arguments": [ - { - "name": "value4", - "nativeSrc": "10122:6:62", - "nodeType": "YulIdentifier", - "src": "10122:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10138:3:62", - "nodeType": "YulLiteral", - "src": "10138:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "10143:1:62", - "nodeType": "YulLiteral", - "src": "10143:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "10134:3:62", - "nodeType": "YulIdentifier", - "src": "10134:3:62" - }, - "nativeSrc": "10134:11:62", - "nodeType": "YulFunctionCall", - "src": "10134:11:62" - }, - { - "kind": "number", - "nativeSrc": "10147:1:62", - "nodeType": "YulLiteral", - "src": "10147:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "10130:3:62", - "nodeType": "YulIdentifier", - "src": "10130:3:62" - }, - "nativeSrc": "10130:19:62", - "nodeType": "YulFunctionCall", - "src": "10130:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "10118:3:62", - "nodeType": "YulIdentifier", - "src": "10118:3:62" - }, - "nativeSrc": "10118:32:62", - "nodeType": "YulFunctionCall", - "src": "10118:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "10090:6:62", - "nodeType": "YulIdentifier", - "src": "10090:6:62" - }, - "nativeSrc": "10090:61:62", - "nodeType": "YulFunctionCall", - "src": "10090:61:62" - }, - "nativeSrc": "10090:61:62", - "nodeType": "YulExpressionStatement", - "src": "10090:61:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10171:9:62", - "nodeType": "YulIdentifier", - "src": "10171:9:62" - }, - { - "kind": "number", - "nativeSrc": "10182:3:62", - "nodeType": "YulLiteral", - "src": "10182:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10167:3:62", - "nodeType": "YulIdentifier", - "src": "10167:3:62" - }, - "nativeSrc": "10167:19:62", - "nodeType": "YulFunctionCall", - "src": "10167:19:62" - }, - { - "name": "value5", - "nativeSrc": "10188:6:62", - "nodeType": "YulIdentifier", - "src": "10188:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "10160:6:62", - "nodeType": "YulIdentifier", - "src": "10160:6:62" - }, - "nativeSrc": "10160:35:62", - "nodeType": "YulFunctionCall", - "src": "10160:35:62" - }, - "nativeSrc": "10160:35:62", - "nodeType": "YulExpressionStatement", - "src": "10160:35:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10215:9:62", - "nodeType": "YulIdentifier", - "src": "10215:9:62" - }, - { - "kind": "number", - "nativeSrc": "10226:3:62", - "nodeType": "YulLiteral", - "src": "10226:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10211:3:62", - "nodeType": "YulIdentifier", - "src": "10211:3:62" - }, - "nativeSrc": "10211:19:62", - "nodeType": "YulFunctionCall", - "src": "10211:19:62" - }, - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "10236:6:62", - "nodeType": "YulIdentifier", - "src": "10236:6:62" - }, - { - "name": "headStart", - "nativeSrc": "10244:9:62", - "nodeType": "YulIdentifier", - "src": "10244:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "10232:3:62", - "nodeType": "YulIdentifier", - "src": "10232:3:62" - }, - "nativeSrc": "10232:22:62", - "nodeType": "YulFunctionCall", - "src": "10232:22:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "10204:6:62", - "nodeType": "YulIdentifier", - "src": "10204:6:62" - }, - "nativeSrc": "10204:51:62", - "nodeType": "YulFunctionCall", - "src": "10204:51:62" - }, - "nativeSrc": "10204:51:62", - "nodeType": "YulExpressionStatement", - "src": "10204:51:62" - }, - { - "nativeSrc": "10264:17:62", - "nodeType": "YulVariableDeclaration", - "src": "10264:17:62", - "value": { - "name": "tail_2", - "nativeSrc": "10275:6:62", - "nodeType": "YulIdentifier", - "src": "10275:6:62" - }, - "variables": [ - { - "name": "pos", - "nativeSrc": "10268:3:62", - "nodeType": "YulTypedName", - "src": "10268:3:62", - "type": "" - } - ] - }, - { - "nativeSrc": "10290:27:62", - "nodeType": "YulVariableDeclaration", - "src": "10290:27:62", - "value": { - "arguments": [ - { - "name": "value6", - "nativeSrc": "10310:6:62", - "nodeType": "YulIdentifier", - "src": "10310:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "10304:5:62", - "nodeType": "YulIdentifier", - "src": "10304:5:62" - }, - "nativeSrc": "10304:13:62", - "nodeType": "YulFunctionCall", - "src": "10304:13:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "10294:6:62", - "nodeType": "YulTypedName", - "src": "10294:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "10333:6:62", - "nodeType": "YulIdentifier", - "src": "10333:6:62" - }, - { - "name": "length", - "nativeSrc": "10341:6:62", - "nodeType": "YulIdentifier", - "src": "10341:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "10326:6:62", - "nodeType": "YulIdentifier", - "src": "10326:6:62" - }, - "nativeSrc": "10326:22:62", - "nodeType": "YulFunctionCall", - "src": "10326:22:62" - }, - "nativeSrc": "10326:22:62", - "nodeType": "YulExpressionStatement", - "src": "10326:22:62" - }, - { - "nativeSrc": "10357:22:62", - "nodeType": "YulAssignment", - "src": "10357:22:62", - "value": { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "10368:6:62", - "nodeType": "YulIdentifier", - "src": "10368:6:62" - }, - { - "kind": "number", - "nativeSrc": "10376:2:62", - "nodeType": "YulLiteral", - "src": "10376:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10364:3:62", - "nodeType": "YulIdentifier", - "src": "10364:3:62" - }, - "nativeSrc": "10364:15:62", - "nodeType": "YulFunctionCall", - "src": "10364:15:62" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "10357:3:62", - "nodeType": "YulIdentifier", - "src": "10357:3:62" - } - ] - }, - { - "nativeSrc": "10388:29:62", - "nodeType": "YulVariableDeclaration", - "src": "10388:29:62", - "value": { - "arguments": [ - { - "name": "value6", - "nativeSrc": "10406:6:62", - "nodeType": "YulIdentifier", - "src": "10406:6:62" - }, - { - "kind": "number", - "nativeSrc": "10414:2:62", - "nodeType": "YulLiteral", - "src": "10414:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10402:3:62", - "nodeType": "YulIdentifier", - "src": "10402:3:62" - }, - "nativeSrc": "10402:15:62", - "nodeType": "YulFunctionCall", - "src": "10402:15:62" - }, - "variables": [ - { - "name": "srcPtr", - "nativeSrc": "10392:6:62", - "nodeType": "YulTypedName", - "src": "10392:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "10426:10:62", - "nodeType": "YulVariableDeclaration", - "src": "10426:10:62", - "value": { - "kind": "number", - "nativeSrc": "10435:1:62", - "nodeType": "YulLiteral", - "src": "10435:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "10430:1:62", - "nodeType": "YulTypedName", - "src": "10430:1:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "10494:120:62", - "nodeType": "YulBlock", - "src": "10494:120:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "10515:3:62", - "nodeType": "YulIdentifier", - "src": "10515:3:62" - }, - { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "10526:6:62", - "nodeType": "YulIdentifier", - "src": "10526:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "10520:5:62", - "nodeType": "YulIdentifier", - "src": "10520:5:62" - }, - "nativeSrc": "10520:13:62", - "nodeType": "YulFunctionCall", - "src": "10520:13:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "10508:6:62", - "nodeType": "YulIdentifier", - "src": "10508:6:62" - }, - "nativeSrc": "10508:26:62", - "nodeType": "YulFunctionCall", - "src": "10508:26:62" - }, - "nativeSrc": "10508:26:62", - "nodeType": "YulExpressionStatement", - "src": "10508:26:62" - }, - { - "nativeSrc": "10547:19:62", - "nodeType": "YulAssignment", - "src": "10547:19:62", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "10558:3:62", - "nodeType": "YulIdentifier", - "src": "10558:3:62" - }, - { - "kind": "number", - "nativeSrc": "10563:2:62", - "nodeType": "YulLiteral", - "src": "10563:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10554:3:62", - "nodeType": "YulIdentifier", - "src": "10554:3:62" - }, - "nativeSrc": "10554:12:62", - "nodeType": "YulFunctionCall", - "src": "10554:12:62" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "10547:3:62", - "nodeType": "YulIdentifier", - "src": "10547:3:62" - } - ] - }, - { - "nativeSrc": "10579:25:62", - "nodeType": "YulAssignment", - "src": "10579:25:62", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "10593:6:62", - "nodeType": "YulIdentifier", - "src": "10593:6:62" - }, - { - "kind": "number", - "nativeSrc": "10601:2:62", - "nodeType": "YulLiteral", - "src": "10601:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10589:3:62", - "nodeType": "YulIdentifier", - "src": "10589:3:62" - }, - "nativeSrc": "10589:15:62", - "nodeType": "YulFunctionCall", - "src": "10589:15:62" - }, - "variableNames": [ - { - "name": "srcPtr", - "nativeSrc": "10579:6:62", - "nodeType": "YulIdentifier", - "src": "10579:6:62" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "10456:1:62", - "nodeType": "YulIdentifier", - "src": "10456:1:62" - }, - { - "name": "length", - "nativeSrc": "10459:6:62", - "nodeType": "YulIdentifier", - "src": "10459:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "10453:2:62", - "nodeType": "YulIdentifier", - "src": "10453:2:62" - }, - "nativeSrc": "10453:13:62", - "nodeType": "YulFunctionCall", - "src": "10453:13:62" - }, - "nativeSrc": "10445:169:62", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "10467:18:62", - "nodeType": "YulBlock", - "src": "10467:18:62", - "statements": [ - { - "nativeSrc": "10469:14:62", - "nodeType": "YulAssignment", - "src": "10469:14:62", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "10478:1:62", - "nodeType": "YulIdentifier", - "src": "10478:1:62" - }, - { - "kind": "number", - "nativeSrc": "10481:1:62", - "nodeType": "YulLiteral", - "src": "10481:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10474:3:62", - "nodeType": "YulIdentifier", - "src": "10474:3:62" - }, - "nativeSrc": "10474:9:62", - "nodeType": "YulFunctionCall", - "src": "10474:9:62" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "10469:1:62", - "nodeType": "YulIdentifier", - "src": "10469:1:62" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "10449:3:62", - "nodeType": "YulBlock", - "src": "10449:3:62", - "statements": [] - }, - "src": "10445:169:62" - }, - { - "nativeSrc": "10623:11:62", - "nodeType": "YulAssignment", - "src": "10623:11:62", - "value": { - "name": "pos", - "nativeSrc": "10631:3:62", - "nodeType": "YulIdentifier", - "src": "10631:3:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "10623:4:62", - "nodeType": "YulIdentifier", - "src": "10623:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__to_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed", - "nativeSrc": "9402:1238:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "9680:9:62", - "nodeType": "YulTypedName", - "src": "9680:9:62", - "type": "" - }, - { - "name": "value6", - "nativeSrc": "9691:6:62", - "nodeType": "YulTypedName", - "src": "9691:6:62", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "9699:6:62", - "nodeType": "YulTypedName", - "src": "9699:6:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "9707:6:62", - "nodeType": "YulTypedName", - "src": "9707:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "9715:6:62", - "nodeType": "YulTypedName", - "src": "9715:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "9723:6:62", - "nodeType": "YulTypedName", - "src": "9723:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "9731:6:62", - "nodeType": "YulTypedName", - "src": "9731:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "9739:6:62", - "nodeType": "YulTypedName", - "src": "9739:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "9750:4:62", - "nodeType": "YulTypedName", - "src": "9750:4:62", - "type": "" - } - ], - "src": "9402:1238:62" - }, - { - "body": { - "nativeSrc": "10744:101:62", - "nodeType": "YulBlock", - "src": "10744:101:62", - "statements": [ - { - "nativeSrc": "10754:26:62", - "nodeType": "YulAssignment", - "src": "10754:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10766:9:62", - "nodeType": "YulIdentifier", - "src": "10766:9:62" - }, - { - "kind": "number", - "nativeSrc": "10777:2:62", - "nodeType": "YulLiteral", - "src": "10777:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10762:3:62", - "nodeType": "YulIdentifier", - "src": "10762:3:62" - }, - "nativeSrc": "10762:18:62", - "nodeType": "YulFunctionCall", - "src": "10762:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "10754:4:62", - "nodeType": "YulIdentifier", - "src": "10754:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10796:9:62", - "nodeType": "YulIdentifier", - "src": "10796:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "10811:6:62", - "nodeType": "YulIdentifier", - "src": "10811:6:62" - }, - { - "kind": "number", - "nativeSrc": "10819:18:62", - "nodeType": "YulLiteral", - "src": "10819:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "10807:3:62", - "nodeType": "YulIdentifier", - "src": "10807:3:62" - }, - "nativeSrc": "10807:31:62", - "nodeType": "YulFunctionCall", - "src": "10807:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "10789:6:62", - "nodeType": "YulIdentifier", - "src": "10789:6:62" - }, - "nativeSrc": "10789:50:62", - "nodeType": "YulFunctionCall", - "src": "10789:50:62" - }, - "nativeSrc": "10789:50:62", - "nodeType": "YulExpressionStatement", - "src": "10789:50:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", - "nativeSrc": "10645:200:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "10713:9:62", - "nodeType": "YulTypedName", - "src": "10713:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "10724:6:62", - "nodeType": "YulTypedName", - "src": "10724:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "10735:4:62", - "nodeType": "YulTypedName", - "src": "10735:4:62", - "type": "" - } - ], - "src": "10645:200:62" - }, - { - "body": { - "nativeSrc": "10979:145:62", - "nodeType": "YulBlock", - "src": "10979:145:62", - "statements": [ - { - "nativeSrc": "10989:26:62", - "nodeType": "YulAssignment", - "src": "10989:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11001:9:62", - "nodeType": "YulIdentifier", - "src": "11001:9:62" - }, - { - "kind": "number", - "nativeSrc": "11012:2:62", - "nodeType": "YulLiteral", - "src": "11012:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10997:3:62", - "nodeType": "YulIdentifier", - "src": "10997:3:62" - }, - "nativeSrc": "10997:18:62", - "nodeType": "YulFunctionCall", - "src": "10997:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "10989:4:62", - "nodeType": "YulIdentifier", - "src": "10989:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11031:9:62", - "nodeType": "YulIdentifier", - "src": "11031:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "11046:6:62", - "nodeType": "YulIdentifier", - "src": "11046:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11062:3:62", - "nodeType": "YulLiteral", - "src": "11062:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "11067:1:62", - "nodeType": "YulLiteral", - "src": "11067:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "11058:3:62", - "nodeType": "YulIdentifier", - "src": "11058:3:62" - }, - "nativeSrc": "11058:11:62", - "nodeType": "YulFunctionCall", - "src": "11058:11:62" - }, - { - "kind": "number", - "nativeSrc": "11071:1:62", - "nodeType": "YulLiteral", - "src": "11071:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "11054:3:62", - "nodeType": "YulIdentifier", - "src": "11054:3:62" - }, - "nativeSrc": "11054:19:62", - "nodeType": "YulFunctionCall", - "src": "11054:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "11042:3:62", - "nodeType": "YulIdentifier", - "src": "11042:3:62" - }, - "nativeSrc": "11042:32:62", - "nodeType": "YulFunctionCall", - "src": "11042:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11024:6:62", - "nodeType": "YulIdentifier", - "src": "11024:6:62" - }, - "nativeSrc": "11024:51:62", - "nodeType": "YulFunctionCall", - "src": "11024:51:62" - }, - "nativeSrc": "11024:51:62", - "nodeType": "YulExpressionStatement", - "src": "11024:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11095:9:62", - "nodeType": "YulIdentifier", - "src": "11095:9:62" - }, - { - "kind": "number", - "nativeSrc": "11106:2:62", - "nodeType": "YulLiteral", - "src": "11106:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11091:3:62", - "nodeType": "YulIdentifier", - "src": "11091:3:62" - }, - "nativeSrc": "11091:18:62", - "nodeType": "YulFunctionCall", - "src": "11091:18:62" - }, - { - "name": "value1", - "nativeSrc": "11111:6:62", - "nodeType": "YulIdentifier", - "src": "11111:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11084:6:62", - "nodeType": "YulIdentifier", - "src": "11084:6:62" - }, - "nativeSrc": "11084:34:62", - "nodeType": "YulFunctionCall", - "src": "11084:34:62" - }, - "nativeSrc": "11084:34:62", - "nodeType": "YulExpressionStatement", - "src": "11084:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bytes32__to_t_address_t_bytes32__fromStack_reversed", - "nativeSrc": "10850:274:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "10940:9:62", - "nodeType": "YulTypedName", - "src": "10940:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "10951:6:62", - "nodeType": "YulTypedName", - "src": "10951:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "10959:6:62", - "nodeType": "YulTypedName", - "src": "10959:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "10970:4:62", - "nodeType": "YulTypedName", - "src": "10970:4:62", - "type": "" - } - ], - "src": "10850:274:62" - }, - { - "body": { - "nativeSrc": "11245:505:62", - "nodeType": "YulBlock", - "src": "11245:505:62", - "statements": [ - { - "body": { - "nativeSrc": "11291:16:62", - "nodeType": "YulBlock", - "src": "11291:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11300:1:62", - "nodeType": "YulLiteral", - "src": "11300:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11303:1:62", - "nodeType": "YulLiteral", - "src": "11303:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11293:6:62", - "nodeType": "YulIdentifier", - "src": "11293:6:62" - }, - "nativeSrc": "11293:12:62", - "nodeType": "YulFunctionCall", - "src": "11293:12:62" - }, - "nativeSrc": "11293:12:62", - "nodeType": "YulExpressionStatement", - "src": "11293:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "11266:7:62", - "nodeType": "YulIdentifier", - "src": "11266:7:62" - }, - { - "name": "headStart", - "nativeSrc": "11275:9:62", - "nodeType": "YulIdentifier", - "src": "11275:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "11262:3:62", - "nodeType": "YulIdentifier", - "src": "11262:3:62" - }, - "nativeSrc": "11262:23:62", - "nodeType": "YulFunctionCall", - "src": "11262:23:62" - }, - { - "kind": "number", - "nativeSrc": "11287:2:62", - "nodeType": "YulLiteral", - "src": "11287:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "11258:3:62", - "nodeType": "YulIdentifier", - "src": "11258:3:62" - }, - "nativeSrc": "11258:32:62", - "nodeType": "YulFunctionCall", - "src": "11258:32:62" - }, - "nativeSrc": "11255:52:62", - "nodeType": "YulIf", - "src": "11255:52:62" - }, - { - "nativeSrc": "11316:37:62", - "nodeType": "YulVariableDeclaration", - "src": "11316:37:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11343:9:62", - "nodeType": "YulIdentifier", - "src": "11343:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "11330:12:62", - "nodeType": "YulIdentifier", - "src": "11330:12:62" - }, - "nativeSrc": "11330:23:62", - "nodeType": "YulFunctionCall", - "src": "11330:23:62" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "11320:6:62", - "nodeType": "YulTypedName", - "src": "11320:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "11396:16:62", - "nodeType": "YulBlock", - "src": "11396:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11405:1:62", - "nodeType": "YulLiteral", - "src": "11405:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11408:1:62", - "nodeType": "YulLiteral", - "src": "11408:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11398:6:62", - "nodeType": "YulIdentifier", - "src": "11398:6:62" - }, - "nativeSrc": "11398:12:62", - "nodeType": "YulFunctionCall", - "src": "11398:12:62" - }, - "nativeSrc": "11398:12:62", - "nodeType": "YulExpressionStatement", - "src": "11398:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "11368:6:62", - "nodeType": "YulIdentifier", - "src": "11368:6:62" - }, - { - "kind": "number", - "nativeSrc": "11376:18:62", - "nodeType": "YulLiteral", - "src": "11376:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "11365:2:62", - "nodeType": "YulIdentifier", - "src": "11365:2:62" - }, - "nativeSrc": "11365:30:62", - "nodeType": "YulFunctionCall", - "src": "11365:30:62" - }, - "nativeSrc": "11362:50:62", - "nodeType": "YulIf", - "src": "11362:50:62" - }, - { - "nativeSrc": "11421:32:62", - "nodeType": "YulVariableDeclaration", - "src": "11421:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11435:9:62", - "nodeType": "YulIdentifier", - "src": "11435:9:62" - }, - { - "name": "offset", - "nativeSrc": "11446:6:62", - "nodeType": "YulIdentifier", - "src": "11446:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11431:3:62", - "nodeType": "YulIdentifier", - "src": "11431:3:62" - }, - "nativeSrc": "11431:22:62", - "nodeType": "YulFunctionCall", - "src": "11431:22:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "11425:2:62", - "nodeType": "YulTypedName", - "src": "11425:2:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "11501:16:62", - "nodeType": "YulBlock", - "src": "11501:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11510:1:62", - "nodeType": "YulLiteral", - "src": "11510:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11513:1:62", - "nodeType": "YulLiteral", - "src": "11513:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11503:6:62", - "nodeType": "YulIdentifier", - "src": "11503:6:62" - }, - "nativeSrc": "11503:12:62", - "nodeType": "YulFunctionCall", - "src": "11503:12:62" - }, - "nativeSrc": "11503:12:62", - "nodeType": "YulExpressionStatement", - "src": "11503:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "11480:2:62", - "nodeType": "YulIdentifier", - "src": "11480:2:62" - }, - { - "kind": "number", - "nativeSrc": "11484:4:62", - "nodeType": "YulLiteral", - "src": "11484:4:62", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11476:3:62", - "nodeType": "YulIdentifier", - "src": "11476:3:62" - }, - "nativeSrc": "11476:13:62", - "nodeType": "YulFunctionCall", - "src": "11476:13:62" - }, - { - "name": "dataEnd", - "nativeSrc": "11491:7:62", - "nodeType": "YulIdentifier", - "src": "11491:7:62" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "11472:3:62", - "nodeType": "YulIdentifier", - "src": "11472:3:62" - }, - "nativeSrc": "11472:27:62", - "nodeType": "YulFunctionCall", - "src": "11472:27:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "11465:6:62", - "nodeType": "YulIdentifier", - "src": "11465:6:62" - }, - "nativeSrc": "11465:35:62", - "nodeType": "YulFunctionCall", - "src": "11465:35:62" - }, - "nativeSrc": "11462:55:62", - "nodeType": "YulIf", - "src": "11462:55:62" - }, - { - "nativeSrc": "11526:30:62", - "nodeType": "YulVariableDeclaration", - "src": "11526:30:62", - "value": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "11553:2:62", - "nodeType": "YulIdentifier", - "src": "11553:2:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "11540:12:62", - "nodeType": "YulIdentifier", - "src": "11540:12:62" - }, - "nativeSrc": "11540:16:62", - "nodeType": "YulFunctionCall", - "src": "11540:16:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "11530:6:62", - "nodeType": "YulTypedName", - "src": "11530:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "11599:16:62", - "nodeType": "YulBlock", - "src": "11599:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11608:1:62", - "nodeType": "YulLiteral", - "src": "11608:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11611:1:62", - "nodeType": "YulLiteral", - "src": "11611:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11601:6:62", - "nodeType": "YulIdentifier", - "src": "11601:6:62" - }, - "nativeSrc": "11601:12:62", - "nodeType": "YulFunctionCall", - "src": "11601:12:62" - }, - "nativeSrc": "11601:12:62", - "nodeType": "YulExpressionStatement", - "src": "11601:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "11571:6:62", - "nodeType": "YulIdentifier", - "src": "11571:6:62" - }, - { - "kind": "number", - "nativeSrc": "11579:18:62", - "nodeType": "YulLiteral", - "src": "11579:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "11568:2:62", - "nodeType": "YulIdentifier", - "src": "11568:2:62" - }, - "nativeSrc": "11568:30:62", - "nodeType": "YulFunctionCall", - "src": "11568:30:62" - }, - "nativeSrc": "11565:50:62", - "nodeType": "YulIf", - "src": "11565:50:62" - }, - { - "body": { - "nativeSrc": "11673:16:62", - "nodeType": "YulBlock", - "src": "11673:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11682:1:62", - "nodeType": "YulLiteral", - "src": "11682:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11685:1:62", - "nodeType": "YulLiteral", - "src": "11685:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11675:6:62", - "nodeType": "YulIdentifier", - "src": "11675:6:62" - }, - "nativeSrc": "11675:12:62", - "nodeType": "YulFunctionCall", - "src": "11675:12:62" - }, - "nativeSrc": "11675:12:62", - "nodeType": "YulExpressionStatement", - "src": "11675:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "11638:2:62", - "nodeType": "YulIdentifier", - "src": "11638:2:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11646:1:62", - "nodeType": "YulLiteral", - "src": "11646:1:62", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "11649:6:62", - "nodeType": "YulIdentifier", - "src": "11649:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "11642:3:62", - "nodeType": "YulIdentifier", - "src": "11642:3:62" - }, - "nativeSrc": "11642:14:62", - "nodeType": "YulFunctionCall", - "src": "11642:14:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11634:3:62", - "nodeType": "YulIdentifier", - "src": "11634:3:62" - }, - "nativeSrc": "11634:23:62", - "nodeType": "YulFunctionCall", - "src": "11634:23:62" - }, - { - "kind": "number", - "nativeSrc": "11659:2:62", - "nodeType": "YulLiteral", - "src": "11659:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11630:3:62", - "nodeType": "YulIdentifier", - "src": "11630:3:62" - }, - "nativeSrc": "11630:32:62", - "nodeType": "YulFunctionCall", - "src": "11630:32:62" - }, - { - "name": "dataEnd", - "nativeSrc": "11664:7:62", - "nodeType": "YulIdentifier", - "src": "11664:7:62" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "11627:2:62", - "nodeType": "YulIdentifier", - "src": "11627:2:62" - }, - "nativeSrc": "11627:45:62", - "nodeType": "YulFunctionCall", - "src": "11627:45:62" - }, - "nativeSrc": "11624:65:62", - "nodeType": "YulIf", - "src": "11624:65:62" - }, - { - "nativeSrc": "11698:21:62", - "nodeType": "YulAssignment", - "src": "11698:21:62", - "value": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "11712:2:62", - "nodeType": "YulIdentifier", - "src": "11712:2:62" - }, - { - "kind": "number", - "nativeSrc": "11716:2:62", - "nodeType": "YulLiteral", - "src": "11716:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11708:3:62", - "nodeType": "YulIdentifier", - "src": "11708:3:62" - }, - "nativeSrc": "11708:11:62", - "nodeType": "YulFunctionCall", - "src": "11708:11:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "11698:6:62", - "nodeType": "YulIdentifier", - "src": "11698:6:62" - } - ] - }, - { - "nativeSrc": "11728:16:62", - "nodeType": "YulAssignment", - "src": "11728:16:62", - "value": { - "name": "length", - "nativeSrc": "11738:6:62", - "nodeType": "YulIdentifier", - "src": "11738:6:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "11728:6:62", - "nodeType": "YulIdentifier", - "src": "11728:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "nativeSrc": "11129:621:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11203:9:62", - "nodeType": "YulTypedName", - "src": "11203:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "11214:7:62", - "nodeType": "YulTypedName", - "src": "11214:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "11226:6:62", - "nodeType": "YulTypedName", - "src": "11226:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "11234:6:62", - "nodeType": "YulTypedName", - "src": "11234:6:62", - "type": "" - } - ], - "src": "11129:621:62" - }, - { - "body": { - "nativeSrc": "11924:611:62", - "nodeType": "YulBlock", - "src": "11924:611:62", - "statements": [ - { - "nativeSrc": "11934:32:62", - "nodeType": "YulVariableDeclaration", - "src": "11934:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11952:9:62", - "nodeType": "YulIdentifier", - "src": "11952:9:62" - }, - { - "kind": "number", - "nativeSrc": "11963:2:62", - "nodeType": "YulLiteral", - "src": "11963:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11948:3:62", - "nodeType": "YulIdentifier", - "src": "11948:3:62" - }, - "nativeSrc": "11948:18:62", - "nodeType": "YulFunctionCall", - "src": "11948:18:62" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "11938:6:62", - "nodeType": "YulTypedName", - "src": "11938:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11982:9:62", - "nodeType": "YulIdentifier", - "src": "11982:9:62" - }, - { - "kind": "number", - "nativeSrc": "11993:2:62", - "nodeType": "YulLiteral", - "src": "11993:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11975:6:62", - "nodeType": "YulIdentifier", - "src": "11975:6:62" - }, - "nativeSrc": "11975:21:62", - "nodeType": "YulFunctionCall", - "src": "11975:21:62" - }, - "nativeSrc": "11975:21:62", - "nodeType": "YulExpressionStatement", - "src": "11975:21:62" - }, - { - "nativeSrc": "12005:17:62", - "nodeType": "YulVariableDeclaration", - "src": "12005:17:62", - "value": { - "name": "tail_1", - "nativeSrc": "12016:6:62", - "nodeType": "YulIdentifier", - "src": "12016:6:62" - }, - "variables": [ - { - "name": "pos", - "nativeSrc": "12009:3:62", - "nodeType": "YulTypedName", - "src": "12009:3:62", - "type": "" - } - ] - }, - { - "nativeSrc": "12031:27:62", - "nodeType": "YulVariableDeclaration", - "src": "12031:27:62", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "12051:6:62", - "nodeType": "YulIdentifier", - "src": "12051:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "12045:5:62", - "nodeType": "YulIdentifier", - "src": "12045:5:62" - }, - "nativeSrc": "12045:13:62", - "nodeType": "YulFunctionCall", - "src": "12045:13:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "12035:6:62", - "nodeType": "YulTypedName", - "src": "12035:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "12074:6:62", - "nodeType": "YulIdentifier", - "src": "12074:6:62" - }, - { - "name": "length", - "nativeSrc": "12082:6:62", - "nodeType": "YulIdentifier", - "src": "12082:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "12067:6:62", - "nodeType": "YulIdentifier", - "src": "12067:6:62" - }, - "nativeSrc": "12067:22:62", - "nodeType": "YulFunctionCall", - "src": "12067:22:62" - }, - "nativeSrc": "12067:22:62", - "nodeType": "YulExpressionStatement", - "src": "12067:22:62" - }, - { - "nativeSrc": "12098:25:62", - "nodeType": "YulAssignment", - "src": "12098:25:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12109:9:62", - "nodeType": "YulIdentifier", - "src": "12109:9:62" - }, - { - "kind": "number", - "nativeSrc": "12120:2:62", - "nodeType": "YulLiteral", - "src": "12120:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12105:3:62", - "nodeType": "YulIdentifier", - "src": "12105:3:62" - }, - "nativeSrc": "12105:18:62", - "nodeType": "YulFunctionCall", - "src": "12105:18:62" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "12098:3:62", - "nodeType": "YulIdentifier", - "src": "12098:3:62" - } - ] - }, - { - "nativeSrc": "12132:53:62", - "nodeType": "YulVariableDeclaration", - "src": "12132:53:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12154:9:62", - "nodeType": "YulIdentifier", - "src": "12154:9:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12169:1:62", - "nodeType": "YulLiteral", - "src": "12169:1:62", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "12172:6:62", - "nodeType": "YulIdentifier", - "src": "12172:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "12165:3:62", - "nodeType": "YulIdentifier", - "src": "12165:3:62" - }, - "nativeSrc": "12165:14:62", - "nodeType": "YulFunctionCall", - "src": "12165:14:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12150:3:62", - "nodeType": "YulIdentifier", - "src": "12150:3:62" - }, - "nativeSrc": "12150:30:62", - "nodeType": "YulFunctionCall", - "src": "12150:30:62" - }, - { - "kind": "number", - "nativeSrc": "12182:2:62", - "nodeType": "YulLiteral", - "src": "12182:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12146:3:62", - "nodeType": "YulIdentifier", - "src": "12146:3:62" - }, - "nativeSrc": "12146:39:62", - "nodeType": "YulFunctionCall", - "src": "12146:39:62" - }, - "variables": [ - { - "name": "tail_2", - "nativeSrc": "12136:6:62", - "nodeType": "YulTypedName", - "src": "12136:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "12194:29:62", - "nodeType": "YulVariableDeclaration", - "src": "12194:29:62", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "12212:6:62", - "nodeType": "YulIdentifier", - "src": "12212:6:62" - }, - { - "kind": "number", - "nativeSrc": "12220:2:62", - "nodeType": "YulLiteral", - "src": "12220:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12208:3:62", - "nodeType": "YulIdentifier", - "src": "12208:3:62" - }, - "nativeSrc": "12208:15:62", - "nodeType": "YulFunctionCall", - "src": "12208:15:62" - }, - "variables": [ - { - "name": "srcPtr", - "nativeSrc": "12198:6:62", - "nodeType": "YulTypedName", - "src": "12198:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "12232:10:62", - "nodeType": "YulVariableDeclaration", - "src": "12232:10:62", - "value": { - "kind": "number", - "nativeSrc": "12241:1:62", - "nodeType": "YulLiteral", - "src": "12241:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "12236:1:62", - "nodeType": "YulTypedName", - "src": "12236:1:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "12300:206:62", - "nodeType": "YulBlock", - "src": "12300:206:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "12321:3:62", - "nodeType": "YulIdentifier", - "src": "12321:3:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "12334:6:62", - "nodeType": "YulIdentifier", - "src": "12334:6:62" - }, - { - "name": "headStart", - "nativeSrc": "12342:9:62", - "nodeType": "YulIdentifier", - "src": "12342:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "12330:3:62", - "nodeType": "YulIdentifier", - "src": "12330:3:62" - }, - "nativeSrc": "12330:22:62", - "nodeType": "YulFunctionCall", - "src": "12330:22:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12358:2:62", - "nodeType": "YulLiteral", - "src": "12358:2:62", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "12354:3:62", - "nodeType": "YulIdentifier", - "src": "12354:3:62" - }, - "nativeSrc": "12354:7:62", - "nodeType": "YulFunctionCall", - "src": "12354:7:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12326:3:62", - "nodeType": "YulIdentifier", - "src": "12326:3:62" - }, - "nativeSrc": "12326:36:62", - "nodeType": "YulFunctionCall", - "src": "12326:36:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "12314:6:62", - "nodeType": "YulIdentifier", - "src": "12314:6:62" - }, - "nativeSrc": "12314:49:62", - "nodeType": "YulFunctionCall", - "src": "12314:49:62" - }, - "nativeSrc": "12314:49:62", - "nodeType": "YulExpressionStatement", - "src": "12314:49:62" - }, - { - "nativeSrc": "12376:50:62", - "nodeType": "YulAssignment", - "src": "12376:50:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "12410:6:62", - "nodeType": "YulIdentifier", - "src": "12410:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "12404:5:62", - "nodeType": "YulIdentifier", - "src": "12404:5:62" - }, - "nativeSrc": "12404:13:62", - "nodeType": "YulFunctionCall", - "src": "12404:13:62" - }, - { - "name": "tail_2", - "nativeSrc": "12419:6:62", - "nodeType": "YulIdentifier", - "src": "12419:6:62" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "12386:17:62", - "nodeType": "YulIdentifier", - "src": "12386:17:62" - }, - "nativeSrc": "12386:40:62", - "nodeType": "YulFunctionCall", - "src": "12386:40:62" - }, - "variableNames": [ - { - "name": "tail_2", - "nativeSrc": "12376:6:62", - "nodeType": "YulIdentifier", - "src": "12376:6:62" - } - ] - }, - { - "nativeSrc": "12439:25:62", - "nodeType": "YulAssignment", - "src": "12439:25:62", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "12453:6:62", - "nodeType": "YulIdentifier", - "src": "12453:6:62" - }, - { - "kind": "number", - "nativeSrc": "12461:2:62", - "nodeType": "YulLiteral", - "src": "12461:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12449:3:62", - "nodeType": "YulIdentifier", - "src": "12449:3:62" - }, - "nativeSrc": "12449:15:62", - "nodeType": "YulFunctionCall", - "src": "12449:15:62" - }, - "variableNames": [ - { - "name": "srcPtr", - "nativeSrc": "12439:6:62", - "nodeType": "YulIdentifier", - "src": "12439:6:62" - } - ] - }, - { - "nativeSrc": "12477:19:62", - "nodeType": "YulAssignment", - "src": "12477:19:62", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "12488:3:62", - "nodeType": "YulIdentifier", - "src": "12488:3:62" - }, - { - "kind": "number", - "nativeSrc": "12493:2:62", - "nodeType": "YulLiteral", - "src": "12493:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12484:3:62", - "nodeType": "YulIdentifier", - "src": "12484:3:62" - }, - "nativeSrc": "12484:12:62", - "nodeType": "YulFunctionCall", - "src": "12484:12:62" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "12477:3:62", - "nodeType": "YulIdentifier", - "src": "12477:3:62" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "12262:1:62", - "nodeType": "YulIdentifier", - "src": "12262:1:62" - }, - { - "name": "length", - "nativeSrc": "12265:6:62", - "nodeType": "YulIdentifier", - "src": "12265:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "12259:2:62", - "nodeType": "YulIdentifier", - "src": "12259:2:62" - }, - "nativeSrc": "12259:13:62", - "nodeType": "YulFunctionCall", - "src": "12259:13:62" - }, - "nativeSrc": "12251:255:62", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "12273:18:62", - "nodeType": "YulBlock", - "src": "12273:18:62", - "statements": [ - { - "nativeSrc": "12275:14:62", - "nodeType": "YulAssignment", - "src": "12275:14:62", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "12284:1:62", - "nodeType": "YulIdentifier", - "src": "12284:1:62" - }, - { - "kind": "number", - "nativeSrc": "12287:1:62", - "nodeType": "YulLiteral", - "src": "12287:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12280:3:62", - "nodeType": "YulIdentifier", - "src": "12280:3:62" - }, - "nativeSrc": "12280:9:62", - "nodeType": "YulFunctionCall", - "src": "12280:9:62" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "12275:1:62", - "nodeType": "YulIdentifier", - "src": "12275:1:62" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "12255:3:62", - "nodeType": "YulBlock", - "src": "12255:3:62", - "statements": [] - }, - "src": "12251:255:62" - }, - { - "nativeSrc": "12515:14:62", - "nodeType": "YulAssignment", - "src": "12515:14:62", - "value": { - "name": "tail_2", - "nativeSrc": "12523:6:62", - "nodeType": "YulIdentifier", - "src": "12523:6:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "12515:4:62", - "nodeType": "YulIdentifier", - "src": "12515:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nativeSrc": "11755:780:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11893:9:62", - "nodeType": "YulTypedName", - "src": "11893:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "11904:6:62", - "nodeType": "YulTypedName", - "src": "11904:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "11915:4:62", - "nodeType": "YulTypedName", - "src": "11915:4:62", - "type": "" - } - ], - "src": "11755:780:62" - }, - { - "body": { - "nativeSrc": "12680:571:62", - "nodeType": "YulBlock", - "src": "12680:571:62", - "statements": [ - { - "body": { - "nativeSrc": "12726:16:62", - "nodeType": "YulBlock", - "src": "12726:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12735:1:62", - "nodeType": "YulLiteral", - "src": "12735:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12738:1:62", - "nodeType": "YulLiteral", - "src": "12738:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12728:6:62", - "nodeType": "YulIdentifier", - "src": "12728:6:62" - }, - "nativeSrc": "12728:12:62", - "nodeType": "YulFunctionCall", - "src": "12728:12:62" - }, - "nativeSrc": "12728:12:62", - "nodeType": "YulExpressionStatement", - "src": "12728:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "12701:7:62", - "nodeType": "YulIdentifier", - "src": "12701:7:62" - }, - { - "name": "headStart", - "nativeSrc": "12710:9:62", - "nodeType": "YulIdentifier", - "src": "12710:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "12697:3:62", - "nodeType": "YulIdentifier", - "src": "12697:3:62" - }, - "nativeSrc": "12697:23:62", - "nodeType": "YulFunctionCall", - "src": "12697:23:62" - }, - { - "kind": "number", - "nativeSrc": "12722:2:62", - "nodeType": "YulLiteral", - "src": "12722:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "12693:3:62", - "nodeType": "YulIdentifier", - "src": "12693:3:62" - }, - "nativeSrc": "12693:32:62", - "nodeType": "YulFunctionCall", - "src": "12693:32:62" - }, - "nativeSrc": "12690:52:62", - "nodeType": "YulIf", - "src": "12690:52:62" - }, - { - "nativeSrc": "12751:36:62", - "nodeType": "YulVariableDeclaration", - "src": "12751:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12777:9:62", - "nodeType": "YulIdentifier", - "src": "12777:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "12764:12:62", - "nodeType": "YulIdentifier", - "src": "12764:12:62" - }, - "nativeSrc": "12764:23:62", - "nodeType": "YulFunctionCall", - "src": "12764:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "12755:5:62", - "nodeType": "YulTypedName", - "src": "12755:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "12821:5:62", - "nodeType": "YulIdentifier", - "src": "12821:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "12796:24:62", - "nodeType": "YulIdentifier", - "src": "12796:24:62" - }, - "nativeSrc": "12796:31:62", - "nodeType": "YulFunctionCall", - "src": "12796:31:62" - }, - "nativeSrc": "12796:31:62", - "nodeType": "YulExpressionStatement", - "src": "12796:31:62" - }, - { - "nativeSrc": "12836:15:62", - "nodeType": "YulAssignment", - "src": "12836:15:62", - "value": { - "name": "value", - "nativeSrc": "12846:5:62", - "nodeType": "YulIdentifier", - "src": "12846:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "12836:6:62", - "nodeType": "YulIdentifier", - "src": "12836:6:62" - } - ] - }, - { - "nativeSrc": "12860:47:62", - "nodeType": "YulVariableDeclaration", - "src": "12860:47:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12892:9:62", - "nodeType": "YulIdentifier", - "src": "12892:9:62" - }, - { - "kind": "number", - "nativeSrc": "12903:2:62", - "nodeType": "YulLiteral", - "src": "12903:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12888:3:62", - "nodeType": "YulIdentifier", - "src": "12888:3:62" - }, - "nativeSrc": "12888:18:62", - "nodeType": "YulFunctionCall", - "src": "12888:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "12875:12:62", - "nodeType": "YulIdentifier", - "src": "12875:12:62" - }, - "nativeSrc": "12875:32:62", - "nodeType": "YulFunctionCall", - "src": "12875:32:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "12864:7:62", - "nodeType": "YulTypedName", - "src": "12864:7:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "12942:16:62", - "nodeType": "YulBlock", - "src": "12942:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12951:1:62", - "nodeType": "YulLiteral", - "src": "12951:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12954:1:62", - "nodeType": "YulLiteral", - "src": "12954:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12944:6:62", - "nodeType": "YulIdentifier", - "src": "12944:6:62" - }, - "nativeSrc": "12944:12:62", - "nodeType": "YulFunctionCall", - "src": "12944:12:62" - }, - "nativeSrc": "12944:12:62", - "nodeType": "YulExpressionStatement", - "src": "12944:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "12929:7:62", - "nodeType": "YulIdentifier", - "src": "12929:7:62" - }, - { - "kind": "number", - "nativeSrc": "12938:1:62", - "nodeType": "YulLiteral", - "src": "12938:1:62", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "12926:2:62", - "nodeType": "YulIdentifier", - "src": "12926:2:62" - }, - "nativeSrc": "12926:14:62", - "nodeType": "YulFunctionCall", - "src": "12926:14:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "12919:6:62", - "nodeType": "YulIdentifier", - "src": "12919:6:62" - }, - "nativeSrc": "12919:22:62", - "nodeType": "YulFunctionCall", - "src": "12919:22:62" - }, - "nativeSrc": "12916:42:62", - "nodeType": "YulIf", - "src": "12916:42:62" - }, - { - "nativeSrc": "12967:17:62", - "nodeType": "YulAssignment", - "src": "12967:17:62", - "value": { - "name": "value_1", - "nativeSrc": "12977:7:62", - "nodeType": "YulIdentifier", - "src": "12977:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "12967:6:62", - "nodeType": "YulIdentifier", - "src": "12967:6:62" - } - ] - }, - { - "nativeSrc": "12993:46:62", - "nodeType": "YulVariableDeclaration", - "src": "12993:46:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13024:9:62", - "nodeType": "YulIdentifier", - "src": "13024:9:62" - }, - { - "kind": "number", - "nativeSrc": "13035:2:62", - "nodeType": "YulLiteral", - "src": "13035:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13020:3:62", - "nodeType": "YulIdentifier", - "src": "13020:3:62" - }, - "nativeSrc": "13020:18:62", - "nodeType": "YulFunctionCall", - "src": "13020:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "13007:12:62", - "nodeType": "YulIdentifier", - "src": "13007:12:62" - }, - "nativeSrc": "13007:32:62", - "nodeType": "YulFunctionCall", - "src": "13007:32:62" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "12997:6:62", - "nodeType": "YulTypedName", - "src": "12997:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "13082:16:62", - "nodeType": "YulBlock", - "src": "13082:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "13091:1:62", - "nodeType": "YulLiteral", - "src": "13091:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "13094:1:62", - "nodeType": "YulLiteral", - "src": "13094:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "13084:6:62", - "nodeType": "YulIdentifier", - "src": "13084:6:62" - }, - "nativeSrc": "13084:12:62", - "nodeType": "YulFunctionCall", - "src": "13084:12:62" - }, - "nativeSrc": "13084:12:62", - "nodeType": "YulExpressionStatement", - "src": "13084:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "13054:6:62", - "nodeType": "YulIdentifier", - "src": "13054:6:62" - }, - { - "kind": "number", - "nativeSrc": "13062:18:62", - "nodeType": "YulLiteral", - "src": "13062:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "13051:2:62", - "nodeType": "YulIdentifier", - "src": "13051:2:62" - }, - "nativeSrc": "13051:30:62", - "nodeType": "YulFunctionCall", - "src": "13051:30:62" - }, - "nativeSrc": "13048:50:62", - "nodeType": "YulIf", - "src": "13048:50:62" - }, - { - "nativeSrc": "13107:84:62", - "nodeType": "YulVariableDeclaration", - "src": "13107:84:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13163:9:62", - "nodeType": "YulIdentifier", - "src": "13163:9:62" - }, - { - "name": "offset", - "nativeSrc": "13174:6:62", - "nodeType": "YulIdentifier", - "src": "13174:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13159:3:62", - "nodeType": "YulIdentifier", - "src": "13159:3:62" - }, - "nativeSrc": "13159:22:62", - "nodeType": "YulFunctionCall", - "src": "13159:22:62" - }, - { - "name": "dataEnd", - "nativeSrc": "13183:7:62", - "nodeType": "YulIdentifier", - "src": "13183:7:62" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "13133:25:62", - "nodeType": "YulIdentifier", - "src": "13133:25:62" - }, - "nativeSrc": "13133:58:62", - "nodeType": "YulFunctionCall", - "src": "13133:58:62" - }, - "variables": [ - { - "name": "value2_1", - "nativeSrc": "13111:8:62", - "nodeType": "YulTypedName", - "src": "13111:8:62", - "type": "" - }, - { - "name": "value3_1", - "nativeSrc": "13121:8:62", - "nodeType": "YulTypedName", - "src": "13121:8:62", - "type": "" - } - ] - }, - { - "nativeSrc": "13200:18:62", - "nodeType": "YulAssignment", - "src": "13200:18:62", - "value": { - "name": "value2_1", - "nativeSrc": "13210:8:62", - "nodeType": "YulIdentifier", - "src": "13210:8:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "13200:6:62", - "nodeType": "YulIdentifier", - "src": "13200:6:62" - } - ] - }, - { - "nativeSrc": "13227:18:62", - "nodeType": "YulAssignment", - "src": "13227:18:62", - "value": { - "name": "value3_1", - "nativeSrc": "13237:8:62", - "nodeType": "YulIdentifier", - "src": "13237:8:62" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "13227:6:62", - "nodeType": "YulIdentifier", - "src": "13227:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_enum$_PaymentTypes_$2166t_bytes_calldata_ptr", - "nativeSrc": "12540:711:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "12622:9:62", - "nodeType": "YulTypedName", - "src": "12622:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "12633:7:62", - "nodeType": "YulTypedName", - "src": "12633:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "12645:6:62", - "nodeType": "YulTypedName", - "src": "12645:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "12653:6:62", - "nodeType": "YulTypedName", - "src": "12653:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "12661:6:62", - "nodeType": "YulTypedName", - "src": "12661:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "12669:6:62", - "nodeType": "YulTypedName", - "src": "12669:6:62", - "type": "" - } - ], - "src": "12540:711:62" - }, - { - "body": { - "nativeSrc": "13343:301:62", - "nodeType": "YulBlock", - "src": "13343:301:62", - "statements": [ - { - "body": { - "nativeSrc": "13389:16:62", - "nodeType": "YulBlock", - "src": "13389:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "13398:1:62", - "nodeType": "YulLiteral", - "src": "13398:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "13401:1:62", - "nodeType": "YulLiteral", - "src": "13401:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "13391:6:62", - "nodeType": "YulIdentifier", - "src": "13391:6:62" - }, - "nativeSrc": "13391:12:62", - "nodeType": "YulFunctionCall", - "src": "13391:12:62" - }, - "nativeSrc": "13391:12:62", - "nodeType": "YulExpressionStatement", - "src": "13391:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "13364:7:62", - "nodeType": "YulIdentifier", - "src": "13364:7:62" - }, - { - "name": "headStart", - "nativeSrc": "13373:9:62", - "nodeType": "YulIdentifier", - "src": "13373:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "13360:3:62", - "nodeType": "YulIdentifier", - "src": "13360:3:62" - }, - "nativeSrc": "13360:23:62", - "nodeType": "YulFunctionCall", - "src": "13360:23:62" - }, - { - "kind": "number", - "nativeSrc": "13385:2:62", - "nodeType": "YulLiteral", - "src": "13385:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "13356:3:62", - "nodeType": "YulIdentifier", - "src": "13356:3:62" - }, - "nativeSrc": "13356:32:62", - "nodeType": "YulFunctionCall", - "src": "13356:32:62" - }, - "nativeSrc": "13353:52:62", - "nodeType": "YulIf", - "src": "13353:52:62" - }, - { - "nativeSrc": "13414:36:62", - "nodeType": "YulVariableDeclaration", - "src": "13414:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13440:9:62", - "nodeType": "YulIdentifier", - "src": "13440:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "13427:12:62", - "nodeType": "YulIdentifier", - "src": "13427:12:62" - }, - "nativeSrc": "13427:23:62", - "nodeType": "YulFunctionCall", - "src": "13427:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "13418:5:62", - "nodeType": "YulTypedName", - "src": "13418:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "13484:5:62", - "nodeType": "YulIdentifier", - "src": "13484:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "13459:24:62", - "nodeType": "YulIdentifier", - "src": "13459:24:62" - }, - "nativeSrc": "13459:31:62", - "nodeType": "YulFunctionCall", - "src": "13459:31:62" - }, - "nativeSrc": "13459:31:62", - "nodeType": "YulExpressionStatement", - "src": "13459:31:62" - }, - { - "nativeSrc": "13499:15:62", - "nodeType": "YulAssignment", - "src": "13499:15:62", - "value": { - "name": "value", - "nativeSrc": "13509:5:62", - "nodeType": "YulIdentifier", - "src": "13509:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "13499:6:62", - "nodeType": "YulIdentifier", - "src": "13499:6:62" - } - ] - }, - { - "nativeSrc": "13523:47:62", - "nodeType": "YulVariableDeclaration", - "src": "13523:47:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13555:9:62", - "nodeType": "YulIdentifier", - "src": "13555:9:62" - }, - { - "kind": "number", - "nativeSrc": "13566:2:62", - "nodeType": "YulLiteral", - "src": "13566:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13551:3:62", - "nodeType": "YulIdentifier", - "src": "13551:3:62" - }, - "nativeSrc": "13551:18:62", - "nodeType": "YulFunctionCall", - "src": "13551:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "13538:12:62", - "nodeType": "YulIdentifier", - "src": "13538:12:62" - }, - "nativeSrc": "13538:32:62", - "nodeType": "YulFunctionCall", - "src": "13538:32:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "13527:7:62", - "nodeType": "YulTypedName", - "src": "13527:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "13604:7:62", - "nodeType": "YulIdentifier", - "src": "13604:7:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "13579:24:62", - "nodeType": "YulIdentifier", - "src": "13579:24:62" - }, - "nativeSrc": "13579:33:62", - "nodeType": "YulFunctionCall", - "src": "13579:33:62" - }, - "nativeSrc": "13579:33:62", - "nodeType": "YulExpressionStatement", - "src": "13579:33:62" - }, - { - "nativeSrc": "13621:17:62", - "nodeType": "YulAssignment", - "src": "13621:17:62", - "value": { - "name": "value_1", - "nativeSrc": "13631:7:62", - "nodeType": "YulIdentifier", - "src": "13631:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "13621:6:62", - "nodeType": "YulIdentifier", - "src": "13621:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nativeSrc": "13256:388:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "13301:9:62", - "nodeType": "YulTypedName", - "src": "13301:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "13312:7:62", - "nodeType": "YulTypedName", - "src": "13312:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "13324:6:62", - "nodeType": "YulTypedName", - "src": "13324:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "13332:6:62", - "nodeType": "YulTypedName", - "src": "13332:6:62", - "type": "" - } - ], - "src": "13256:388:62" - }, - { - "body": { - "nativeSrc": "13750:76:62", - "nodeType": "YulBlock", - "src": "13750:76:62", - "statements": [ - { - "nativeSrc": "13760:26:62", - "nodeType": "YulAssignment", - "src": "13760:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13772:9:62", - "nodeType": "YulIdentifier", - "src": "13772:9:62" - }, - { - "kind": "number", - "nativeSrc": "13783:2:62", - "nodeType": "YulLiteral", - "src": "13783:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13768:3:62", - "nodeType": "YulIdentifier", - "src": "13768:3:62" - }, - "nativeSrc": "13768:18:62", - "nodeType": "YulFunctionCall", - "src": "13768:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "13760:4:62", - "nodeType": "YulIdentifier", - "src": "13760:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13802:9:62", - "nodeType": "YulIdentifier", - "src": "13802:9:62" - }, - { - "name": "value0", - "nativeSrc": "13813:6:62", - "nodeType": "YulIdentifier", - "src": "13813:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13795:6:62", - "nodeType": "YulIdentifier", - "src": "13795:6:62" - }, - "nativeSrc": "13795:25:62", - "nodeType": "YulFunctionCall", - "src": "13795:25:62" - }, - "nativeSrc": "13795:25:62", - "nodeType": "YulExpressionStatement", - "src": "13795:25:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", - "nativeSrc": "13649:177:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "13719:9:62", - "nodeType": "YulTypedName", - "src": "13719:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "13730:6:62", - "nodeType": "YulTypedName", - "src": "13730:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "13741:4:62", - "nodeType": "YulTypedName", - "src": "13741:4:62", - "type": "" - } - ], - "src": "13649:177:62" - }, - { - "body": { - "nativeSrc": "14016:206:62", - "nodeType": "YulBlock", - "src": "14016:206:62", - "statements": [ - { - "nativeSrc": "14026:27:62", - "nodeType": "YulAssignment", - "src": "14026:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14038:9:62", - "nodeType": "YulIdentifier", - "src": "14038:9:62" - }, - { - "kind": "number", - "nativeSrc": "14049:3:62", - "nodeType": "YulLiteral", - "src": "14049:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14034:3:62", - "nodeType": "YulIdentifier", - "src": "14034:3:62" - }, - "nativeSrc": "14034:19:62", - "nodeType": "YulFunctionCall", - "src": "14034:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "14026:4:62", - "nodeType": "YulIdentifier", - "src": "14026:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14069:9:62", - "nodeType": "YulIdentifier", - "src": "14069:9:62" - }, - { - "name": "value0", - "nativeSrc": "14080:6:62", - "nodeType": "YulIdentifier", - "src": "14080:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14062:6:62", - "nodeType": "YulIdentifier", - "src": "14062:6:62" - }, - "nativeSrc": "14062:25:62", - "nodeType": "YulFunctionCall", - "src": "14062:25:62" - }, - "nativeSrc": "14062:25:62", - "nodeType": "YulExpressionStatement", - "src": "14062:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14107:9:62", - "nodeType": "YulIdentifier", - "src": "14107:9:62" - }, - { - "kind": "number", - "nativeSrc": "14118:2:62", - "nodeType": "YulLiteral", - "src": "14118:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14103:3:62", - "nodeType": "YulIdentifier", - "src": "14103:3:62" - }, - "nativeSrc": "14103:18:62", - "nodeType": "YulFunctionCall", - "src": "14103:18:62" - }, - { - "name": "value1", - "nativeSrc": "14123:6:62", - "nodeType": "YulIdentifier", - "src": "14123:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14096:6:62", - "nodeType": "YulIdentifier", - "src": "14096:6:62" - }, - "nativeSrc": "14096:34:62", - "nodeType": "YulFunctionCall", - "src": "14096:34:62" - }, - "nativeSrc": "14096:34:62", - "nodeType": "YulExpressionStatement", - "src": "14096:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14150:9:62", - "nodeType": "YulIdentifier", - "src": "14150:9:62" - }, - { - "kind": "number", - "nativeSrc": "14161:2:62", - "nodeType": "YulLiteral", - "src": "14161:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14146:3:62", - "nodeType": "YulIdentifier", - "src": "14146:3:62" - }, - "nativeSrc": "14146:18:62", - "nodeType": "YulFunctionCall", - "src": "14146:18:62" - }, - { - "name": "value2", - "nativeSrc": "14166:6:62", - "nodeType": "YulIdentifier", - "src": "14166:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14139:6:62", - "nodeType": "YulIdentifier", - "src": "14139:6:62" - }, - "nativeSrc": "14139:34:62", - "nodeType": "YulFunctionCall", - "src": "14139:34:62" - }, - "nativeSrc": "14139:34:62", - "nodeType": "YulExpressionStatement", - "src": "14139:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14193:9:62", - "nodeType": "YulIdentifier", - "src": "14193:9:62" - }, - { - "kind": "number", - "nativeSrc": "14204:2:62", - "nodeType": "YulLiteral", - "src": "14204:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14189:3:62", - "nodeType": "YulIdentifier", - "src": "14189:3:62" - }, - "nativeSrc": "14189:18:62", - "nodeType": "YulFunctionCall", - "src": "14189:18:62" - }, - { - "name": "value3", - "nativeSrc": "14209:6:62", - "nodeType": "YulIdentifier", - "src": "14209:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14182:6:62", - "nodeType": "YulIdentifier", - "src": "14182:6:62" - }, - "nativeSrc": "14182:34:62", - "nodeType": "YulFunctionCall", - "src": "14182:34:62" - }, - "nativeSrc": "14182:34:62", - "nodeType": "YulExpressionStatement", - "src": "14182:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32__to_t_uint256_t_uint256_t_uint256_t_bytes32__fromStack_reversed", - "nativeSrc": "13831:391:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "13961:9:62", - "nodeType": "YulTypedName", - "src": "13961:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "13972:6:62", - "nodeType": "YulTypedName", - "src": "13972:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "13980:6:62", - "nodeType": "YulTypedName", - "src": "13980:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "13988:6:62", - "nodeType": "YulTypedName", - "src": "13988:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "13996:6:62", - "nodeType": "YulTypedName", - "src": "13996:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "14007:4:62", - "nodeType": "YulTypedName", - "src": "14007:4:62", - "type": "" - } - ], - "src": "13831:391:62" - }, - { - "body": { - "nativeSrc": "14335:101:62", - "nodeType": "YulBlock", - "src": "14335:101:62", - "statements": [ - { - "nativeSrc": "14345:26:62", - "nodeType": "YulAssignment", - "src": "14345:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14357:9:62", - "nodeType": "YulIdentifier", - "src": "14357:9:62" - }, - { - "kind": "number", - "nativeSrc": "14368:2:62", - "nodeType": "YulLiteral", - "src": "14368:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14353:3:62", - "nodeType": "YulIdentifier", - "src": "14353:3:62" - }, - "nativeSrc": "14353:18:62", - "nodeType": "YulFunctionCall", - "src": "14353:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "14345:4:62", - "nodeType": "YulIdentifier", - "src": "14345:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14387:9:62", - "nodeType": "YulIdentifier", - "src": "14387:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "14402:6:62", - "nodeType": "YulIdentifier", - "src": "14402:6:62" - }, - { - "kind": "number", - "nativeSrc": "14410:18:62", - "nodeType": "YulLiteral", - "src": "14410:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "14398:3:62", - "nodeType": "YulIdentifier", - "src": "14398:3:62" - }, - "nativeSrc": "14398:31:62", - "nodeType": "YulFunctionCall", - "src": "14398:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14380:6:62", - "nodeType": "YulIdentifier", - "src": "14380:6:62" - }, - "nativeSrc": "14380:50:62", - "nodeType": "YulFunctionCall", - "src": "14380:50:62" - }, - "nativeSrc": "14380:50:62", - "nodeType": "YulExpressionStatement", - "src": "14380:50:62" - } - ] - }, - "name": "abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed", - "nativeSrc": "14227:209:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "14304:9:62", - "nodeType": "YulTypedName", - "src": "14304:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "14315:6:62", - "nodeType": "YulTypedName", - "src": "14315:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "14326:4:62", - "nodeType": "YulTypedName", - "src": "14326:4:62", - "type": "" - } - ], - "src": "14227:209:62" - }, - { - "body": { - "nativeSrc": "14598:240:62", - "nodeType": "YulBlock", - "src": "14598:240:62", - "statements": [ - { - "nativeSrc": "14608:26:62", - "nodeType": "YulAssignment", - "src": "14608:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14620:9:62", - "nodeType": "YulIdentifier", - "src": "14620:9:62" - }, - { - "kind": "number", - "nativeSrc": "14631:2:62", - "nodeType": "YulLiteral", - "src": "14631:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14616:3:62", - "nodeType": "YulIdentifier", - "src": "14616:3:62" - }, - "nativeSrc": "14616:18:62", - "nodeType": "YulFunctionCall", - "src": "14616:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "14608:4:62", - "nodeType": "YulIdentifier", - "src": "14608:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14650:9:62", - "nodeType": "YulIdentifier", - "src": "14650:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "14665:6:62", - "nodeType": "YulIdentifier", - "src": "14665:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14681:3:62", - "nodeType": "YulLiteral", - "src": "14681:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "14686:1:62", - "nodeType": "YulLiteral", - "src": "14686:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "14677:3:62", - "nodeType": "YulIdentifier", - "src": "14677:3:62" - }, - "nativeSrc": "14677:11:62", - "nodeType": "YulFunctionCall", - "src": "14677:11:62" - }, - { - "kind": "number", - "nativeSrc": "14690:1:62", - "nodeType": "YulLiteral", - "src": "14690:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "14673:3:62", - "nodeType": "YulIdentifier", - "src": "14673:3:62" - }, - "nativeSrc": "14673:19:62", - "nodeType": "YulFunctionCall", - "src": "14673:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "14661:3:62", - "nodeType": "YulIdentifier", - "src": "14661:3:62" - }, - "nativeSrc": "14661:32:62", - "nodeType": "YulFunctionCall", - "src": "14661:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14643:6:62", - "nodeType": "YulIdentifier", - "src": "14643:6:62" - }, - "nativeSrc": "14643:51:62", - "nodeType": "YulFunctionCall", - "src": "14643:51:62" - }, - "nativeSrc": "14643:51:62", - "nodeType": "YulExpressionStatement", - "src": "14643:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14714:9:62", - "nodeType": "YulIdentifier", - "src": "14714:9:62" - }, - { - "kind": "number", - "nativeSrc": "14725:2:62", - "nodeType": "YulLiteral", - "src": "14725:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14710:3:62", - "nodeType": "YulIdentifier", - "src": "14710:3:62" - }, - "nativeSrc": "14710:18:62", - "nodeType": "YulFunctionCall", - "src": "14710:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "14734:6:62", - "nodeType": "YulIdentifier", - "src": "14734:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14750:3:62", - "nodeType": "YulLiteral", - "src": "14750:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "14755:1:62", - "nodeType": "YulLiteral", - "src": "14755:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "14746:3:62", - "nodeType": "YulIdentifier", - "src": "14746:3:62" - }, - "nativeSrc": "14746:11:62", - "nodeType": "YulFunctionCall", - "src": "14746:11:62" - }, - { - "kind": "number", - "nativeSrc": "14759:1:62", - "nodeType": "YulLiteral", - "src": "14759:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "14742:3:62", - "nodeType": "YulIdentifier", - "src": "14742:3:62" - }, - "nativeSrc": "14742:19:62", - "nodeType": "YulFunctionCall", - "src": "14742:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "14730:3:62", - "nodeType": "YulIdentifier", - "src": "14730:3:62" - }, - "nativeSrc": "14730:32:62", - "nodeType": "YulFunctionCall", - "src": "14730:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14703:6:62", - "nodeType": "YulIdentifier", - "src": "14703:6:62" - }, - "nativeSrc": "14703:60:62", - "nodeType": "YulFunctionCall", - "src": "14703:60:62" - }, - "nativeSrc": "14703:60:62", - "nodeType": "YulExpressionStatement", - "src": "14703:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14783:9:62", - "nodeType": "YulIdentifier", - "src": "14783:9:62" - }, - { - "kind": "number", - "nativeSrc": "14794:2:62", - "nodeType": "YulLiteral", - "src": "14794:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14779:3:62", - "nodeType": "YulIdentifier", - "src": "14779:3:62" - }, - "nativeSrc": "14779:18:62", - "nodeType": "YulFunctionCall", - "src": "14779:18:62" - }, - { - "arguments": [ - { - "name": "value2", - "nativeSrc": "14803:6:62", - "nodeType": "YulIdentifier", - "src": "14803:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14819:3:62", - "nodeType": "YulLiteral", - "src": "14819:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "14824:1:62", - "nodeType": "YulLiteral", - "src": "14824:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "14815:3:62", - "nodeType": "YulIdentifier", - "src": "14815:3:62" - }, - "nativeSrc": "14815:11:62", - "nodeType": "YulFunctionCall", - "src": "14815:11:62" - }, - { - "kind": "number", - "nativeSrc": "14828:1:62", - "nodeType": "YulLiteral", - "src": "14828:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "14811:3:62", - "nodeType": "YulIdentifier", - "src": "14811:3:62" - }, - "nativeSrc": "14811:19:62", - "nodeType": "YulFunctionCall", - "src": "14811:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "14799:3:62", - "nodeType": "YulIdentifier", - "src": "14799:3:62" - }, - "nativeSrc": "14799:32:62", - "nodeType": "YulFunctionCall", - "src": "14799:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14772:6:62", - "nodeType": "YulIdentifier", - "src": "14772:6:62" - }, - "nativeSrc": "14772:60:62", - "nodeType": "YulFunctionCall", - "src": "14772:60:62" - }, - "nativeSrc": "14772:60:62", - "nodeType": "YulExpressionStatement", - "src": "14772:60:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed", - "nativeSrc": "14441:397:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "14551:9:62", - "nodeType": "YulTypedName", - "src": "14551:9:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "14562:6:62", - "nodeType": "YulTypedName", - "src": "14562:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "14570:6:62", - "nodeType": "YulTypedName", - "src": "14570:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "14578:6:62", - "nodeType": "YulTypedName", - "src": "14578:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "14589:4:62", - "nodeType": "YulTypedName", - "src": "14589:4:62", - "type": "" - } - ], - "src": "14441:397:62" - }, - { - "body": { - "nativeSrc": "14921:167:62", - "nodeType": "YulBlock", - "src": "14921:167:62", - "statements": [ - { - "body": { - "nativeSrc": "14967:16:62", - "nodeType": "YulBlock", - "src": "14967:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14976:1:62", - "nodeType": "YulLiteral", - "src": "14976:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "14979:1:62", - "nodeType": "YulLiteral", - "src": "14979:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "14969:6:62", - "nodeType": "YulIdentifier", - "src": "14969:6:62" - }, - "nativeSrc": "14969:12:62", - "nodeType": "YulFunctionCall", - "src": "14969:12:62" - }, - "nativeSrc": "14969:12:62", - "nodeType": "YulExpressionStatement", - "src": "14969:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "14942:7:62", - "nodeType": "YulIdentifier", - "src": "14942:7:62" - }, - { - "name": "headStart", - "nativeSrc": "14951:9:62", - "nodeType": "YulIdentifier", - "src": "14951:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "14938:3:62", - "nodeType": "YulIdentifier", - "src": "14938:3:62" - }, - "nativeSrc": "14938:23:62", - "nodeType": "YulFunctionCall", - "src": "14938:23:62" - }, - { - "kind": "number", - "nativeSrc": "14963:2:62", - "nodeType": "YulLiteral", - "src": "14963:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "14934:3:62", - "nodeType": "YulIdentifier", - "src": "14934:3:62" - }, - "nativeSrc": "14934:32:62", - "nodeType": "YulFunctionCall", - "src": "14934:32:62" - }, - "nativeSrc": "14931:52:62", - "nodeType": "YulIf", - "src": "14931:52:62" - }, - { - "nativeSrc": "14992:29:62", - "nodeType": "YulVariableDeclaration", - "src": "14992:29:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15011:9:62", - "nodeType": "YulIdentifier", - "src": "15011:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15005:5:62", - "nodeType": "YulIdentifier", - "src": "15005:5:62" - }, - "nativeSrc": "15005:16:62", - "nodeType": "YulFunctionCall", - "src": "15005:16:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "14996:5:62", - "nodeType": "YulTypedName", - "src": "14996:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "15052:5:62", - "nodeType": "YulIdentifier", - "src": "15052:5:62" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nativeSrc": "15030:21:62", - "nodeType": "YulIdentifier", - "src": "15030:21:62" - }, - "nativeSrc": "15030:28:62", - "nodeType": "YulFunctionCall", - "src": "15030:28:62" - }, - "nativeSrc": "15030:28:62", - "nodeType": "YulExpressionStatement", - "src": "15030:28:62" - }, - { - "nativeSrc": "15067:15:62", - "nodeType": "YulAssignment", - "src": "15067:15:62", - "value": { - "name": "value", - "nativeSrc": "15077:5:62", - "nodeType": "YulIdentifier", - "src": "15077:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "15067:6:62", - "nodeType": "YulIdentifier", - "src": "15067:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nativeSrc": "14843:245:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "14887:9:62", - "nodeType": "YulTypedName", - "src": "14887:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "14898:7:62", - "nodeType": "YulTypedName", - "src": "14898:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "14910:6:62", - "nodeType": "YulTypedName", - "src": "14910:6:62", - "type": "" - } - ], - "src": "14843:245:62" - }, - { - "body": { - "nativeSrc": "15222:171:62", - "nodeType": "YulBlock", - "src": "15222:171:62", - "statements": [ - { - "nativeSrc": "15232:26:62", - "nodeType": "YulAssignment", - "src": "15232:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15244:9:62", - "nodeType": "YulIdentifier", - "src": "15244:9:62" - }, - { - "kind": "number", - "nativeSrc": "15255:2:62", - "nodeType": "YulLiteral", - "src": "15255:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15240:3:62", - "nodeType": "YulIdentifier", - "src": "15240:3:62" - }, - "nativeSrc": "15240:18:62", - "nodeType": "YulFunctionCall", - "src": "15240:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "15232:4:62", - "nodeType": "YulIdentifier", - "src": "15232:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15274:9:62", - "nodeType": "YulIdentifier", - "src": "15274:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "15289:6:62", - "nodeType": "YulIdentifier", - "src": "15289:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15305:3:62", - "nodeType": "YulLiteral", - "src": "15305:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "15310:1:62", - "nodeType": "YulLiteral", - "src": "15310:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "15301:3:62", - "nodeType": "YulIdentifier", - "src": "15301:3:62" - }, - "nativeSrc": "15301:11:62", - "nodeType": "YulFunctionCall", - "src": "15301:11:62" - }, - { - "kind": "number", - "nativeSrc": "15314:1:62", - "nodeType": "YulLiteral", - "src": "15314:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "15297:3:62", - "nodeType": "YulIdentifier", - "src": "15297:3:62" - }, - "nativeSrc": "15297:19:62", - "nodeType": "YulFunctionCall", - "src": "15297:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "15285:3:62", - "nodeType": "YulIdentifier", - "src": "15285:3:62" - }, - "nativeSrc": "15285:32:62", - "nodeType": "YulFunctionCall", - "src": "15285:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15267:6:62", - "nodeType": "YulIdentifier", - "src": "15267:6:62" - }, - "nativeSrc": "15267:51:62", - "nodeType": "YulFunctionCall", - "src": "15267:51:62" - }, - "nativeSrc": "15267:51:62", - "nodeType": "YulExpressionStatement", - "src": "15267:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15338:9:62", - "nodeType": "YulIdentifier", - "src": "15338:9:62" - }, - { - "kind": "number", - "nativeSrc": "15349:2:62", - "nodeType": "YulLiteral", - "src": "15349:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15334:3:62", - "nodeType": "YulIdentifier", - "src": "15334:3:62" - }, - "nativeSrc": "15334:18:62", - "nodeType": "YulFunctionCall", - "src": "15334:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "15358:6:62", - "nodeType": "YulIdentifier", - "src": "15358:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15374:3:62", - "nodeType": "YulLiteral", - "src": "15374:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "15379:1:62", - "nodeType": "YulLiteral", - "src": "15379:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "15370:3:62", - "nodeType": "YulIdentifier", - "src": "15370:3:62" - }, - "nativeSrc": "15370:11:62", - "nodeType": "YulFunctionCall", - "src": "15370:11:62" - }, - { - "kind": "number", - "nativeSrc": "15383:1:62", - "nodeType": "YulLiteral", - "src": "15383:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "15366:3:62", - "nodeType": "YulIdentifier", - "src": "15366:3:62" - }, - "nativeSrc": "15366:19:62", - "nodeType": "YulFunctionCall", - "src": "15366:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "15354:3:62", - "nodeType": "YulIdentifier", - "src": "15354:3:62" - }, - "nativeSrc": "15354:32:62", - "nodeType": "YulFunctionCall", - "src": "15354:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15327:6:62", - "nodeType": "YulIdentifier", - "src": "15327:6:62" - }, - "nativeSrc": "15327:60:62", - "nodeType": "YulFunctionCall", - "src": "15327:60:62" - }, - "nativeSrc": "15327:60:62", - "nodeType": "YulExpressionStatement", - "src": "15327:60:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nativeSrc": "15093:300:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "15183:9:62", - "nodeType": "YulTypedName", - "src": "15183:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "15194:6:62", - "nodeType": "YulTypedName", - "src": "15194:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "15202:6:62", - "nodeType": "YulTypedName", - "src": "15202:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "15213:4:62", - "nodeType": "YulTypedName", - "src": "15213:4:62", - "type": "" - } - ], - "src": "15093:300:62" - }, - { - "body": { - "nativeSrc": "15430:95:62", - "nodeType": "YulBlock", - "src": "15430:95:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15447:1:62", - "nodeType": "YulLiteral", - "src": "15447:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15454:3:62", - "nodeType": "YulLiteral", - "src": "15454:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "15459:10:62", - "nodeType": "YulLiteral", - "src": "15459:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "15450:3:62", - "nodeType": "YulIdentifier", - "src": "15450:3:62" - }, - "nativeSrc": "15450:20:62", - "nodeType": "YulFunctionCall", - "src": "15450:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15440:6:62", - "nodeType": "YulIdentifier", - "src": "15440:6:62" - }, - "nativeSrc": "15440:31:62", - "nodeType": "YulFunctionCall", - "src": "15440:31:62" - }, - "nativeSrc": "15440:31:62", - "nodeType": "YulExpressionStatement", - "src": "15440:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15487:1:62", - "nodeType": "YulLiteral", - "src": "15487:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "15490:4:62", - "nodeType": "YulLiteral", - "src": "15490:4:62", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15480:6:62", - "nodeType": "YulIdentifier", - "src": "15480:6:62" - }, - "nativeSrc": "15480:15:62", - "nodeType": "YulFunctionCall", - "src": "15480:15:62" - }, - "nativeSrc": "15480:15:62", - "nodeType": "YulExpressionStatement", - "src": "15480:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15511:1:62", - "nodeType": "YulLiteral", - "src": "15511:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "15514:4:62", - "nodeType": "YulLiteral", - "src": "15514:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "15504:6:62", - "nodeType": "YulIdentifier", - "src": "15504:6:62" - }, - "nativeSrc": "15504:15:62", - "nodeType": "YulFunctionCall", - "src": "15504:15:62" - }, - "nativeSrc": "15504:15:62", - "nodeType": "YulExpressionStatement", - "src": "15504:15:62" - } - ] - }, - "name": "panic_error_0x41", - "nativeSrc": "15398:127:62", - "nodeType": "YulFunctionDefinition", - "src": "15398:127:62" - }, - { - "body": { - "nativeSrc": "15576:211:62", - "nodeType": "YulBlock", - "src": "15576:211:62", - "statements": [ - { - "nativeSrc": "15586:21:62", - "nodeType": "YulAssignment", - "src": "15586:21:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15602:4:62", - "nodeType": "YulLiteral", - "src": "15602:4:62", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15596:5:62", - "nodeType": "YulIdentifier", - "src": "15596:5:62" - }, - "nativeSrc": "15596:11:62", - "nodeType": "YulFunctionCall", - "src": "15596:11:62" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "15586:6:62", - "nodeType": "YulIdentifier", - "src": "15586:6:62" - } - ] - }, - { - "nativeSrc": "15616:35:62", - "nodeType": "YulVariableDeclaration", - "src": "15616:35:62", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "15638:6:62", - "nodeType": "YulIdentifier", - "src": "15638:6:62" - }, - { - "kind": "number", - "nativeSrc": "15646:4:62", - "nodeType": "YulLiteral", - "src": "15646:4:62", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15634:3:62", - "nodeType": "YulIdentifier", - "src": "15634:3:62" - }, - "nativeSrc": "15634:17:62", - "nodeType": "YulFunctionCall", - "src": "15634:17:62" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "15620:10:62", - "nodeType": "YulTypedName", - "src": "15620:10:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "15726:22:62", - "nodeType": "YulBlock", - "src": "15726:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "15728:16:62", - "nodeType": "YulIdentifier", - "src": "15728:16:62" - }, - "nativeSrc": "15728:18:62", - "nodeType": "YulFunctionCall", - "src": "15728:18:62" - }, - "nativeSrc": "15728:18:62", - "nodeType": "YulExpressionStatement", - "src": "15728:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15669:10:62", - "nodeType": "YulIdentifier", - "src": "15669:10:62" - }, - { - "kind": "number", - "nativeSrc": "15681:18:62", - "nodeType": "YulLiteral", - "src": "15681:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "15666:2:62", - "nodeType": "YulIdentifier", - "src": "15666:2:62" - }, - "nativeSrc": "15666:34:62", - "nodeType": "YulFunctionCall", - "src": "15666:34:62" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15705:10:62", - "nodeType": "YulIdentifier", - "src": "15705:10:62" - }, - { - "name": "memPtr", - "nativeSrc": "15717:6:62", - "nodeType": "YulIdentifier", - "src": "15717:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "15702:2:62", - "nodeType": "YulIdentifier", - "src": "15702:2:62" - }, - "nativeSrc": "15702:22:62", - "nodeType": "YulFunctionCall", - "src": "15702:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "15663:2:62", - "nodeType": "YulIdentifier", - "src": "15663:2:62" - }, - "nativeSrc": "15663:62:62", - "nodeType": "YulFunctionCall", - "src": "15663:62:62" - }, - "nativeSrc": "15660:88:62", - "nodeType": "YulIf", - "src": "15660:88:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15764:4:62", - "nodeType": "YulLiteral", - "src": "15764:4:62", - "type": "", - "value": "0x40" - }, - { - "name": "newFreePtr", - "nativeSrc": "15770:10:62", - "nodeType": "YulIdentifier", - "src": "15770:10:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15757:6:62", - "nodeType": "YulIdentifier", - "src": "15757:6:62" - }, - "nativeSrc": "15757:24:62", - "nodeType": "YulFunctionCall", - "src": "15757:24:62" - }, - "nativeSrc": "15757:24:62", - "nodeType": "YulExpressionStatement", - "src": "15757:24:62" - } - ] - }, - "name": "allocate_memory_4281", - "nativeSrc": "15530:257:62", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "15565:6:62", - "nodeType": "YulTypedName", - "src": "15565:6:62", - "type": "" - } - ], - "src": "15530:257:62" - }, - { - "body": { - "nativeSrc": "15833:207:62", - "nodeType": "YulBlock", - "src": "15833:207:62", - "statements": [ - { - "nativeSrc": "15843:19:62", - "nodeType": "YulAssignment", - "src": "15843:19:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15859:2:62", - "nodeType": "YulLiteral", - "src": "15859:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15853:5:62", - "nodeType": "YulIdentifier", - "src": "15853:5:62" - }, - "nativeSrc": "15853:9:62", - "nodeType": "YulFunctionCall", - "src": "15853:9:62" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "15843:6:62", - "nodeType": "YulIdentifier", - "src": "15843:6:62" - } - ] - }, - { - "nativeSrc": "15871:35:62", - "nodeType": "YulVariableDeclaration", - "src": "15871:35:62", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "15893:6:62", - "nodeType": "YulIdentifier", - "src": "15893:6:62" - }, - { - "kind": "number", - "nativeSrc": "15901:4:62", - "nodeType": "YulLiteral", - "src": "15901:4:62", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15889:3:62", - "nodeType": "YulIdentifier", - "src": "15889:3:62" - }, - "nativeSrc": "15889:17:62", - "nodeType": "YulFunctionCall", - "src": "15889:17:62" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "15875:10:62", - "nodeType": "YulTypedName", - "src": "15875:10:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "15981:22:62", - "nodeType": "YulBlock", - "src": "15981:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "15983:16:62", - "nodeType": "YulIdentifier", - "src": "15983:16:62" - }, - "nativeSrc": "15983:18:62", - "nodeType": "YulFunctionCall", - "src": "15983:18:62" - }, - "nativeSrc": "15983:18:62", - "nodeType": "YulExpressionStatement", - "src": "15983:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15924:10:62", - "nodeType": "YulIdentifier", - "src": "15924:10:62" - }, - { - "kind": "number", - "nativeSrc": "15936:18:62", - "nodeType": "YulLiteral", - "src": "15936:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "15921:2:62", - "nodeType": "YulIdentifier", - "src": "15921:2:62" - }, - "nativeSrc": "15921:34:62", - "nodeType": "YulFunctionCall", - "src": "15921:34:62" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15960:10:62", - "nodeType": "YulIdentifier", - "src": "15960:10:62" - }, - { - "name": "memPtr", - "nativeSrc": "15972:6:62", - "nodeType": "YulIdentifier", - "src": "15972:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "15957:2:62", - "nodeType": "YulIdentifier", - "src": "15957:2:62" - }, - "nativeSrc": "15957:22:62", - "nodeType": "YulFunctionCall", - "src": "15957:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "15918:2:62", - "nodeType": "YulIdentifier", - "src": "15918:2:62" - }, - "nativeSrc": "15918:62:62", - "nodeType": "YulFunctionCall", - "src": "15918:62:62" - }, - "nativeSrc": "15915:88:62", - "nodeType": "YulIf", - "src": "15915:88:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16019:2:62", - "nodeType": "YulLiteral", - "src": "16019:2:62", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "16023:10:62", - "nodeType": "YulIdentifier", - "src": "16023:10:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16012:6:62", - "nodeType": "YulIdentifier", - "src": "16012:6:62" - }, - "nativeSrc": "16012:22:62", - "nodeType": "YulFunctionCall", - "src": "16012:22:62" - }, - "nativeSrc": "16012:22:62", - "nodeType": "YulExpressionStatement", - "src": "16012:22:62" - } - ] - }, - "name": "allocate_memory", - "nativeSrc": "15792:248:62", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "15822:6:62", - "nodeType": "YulTypedName", - "src": "15822:6:62", - "type": "" - } - ], - "src": "15792:248:62" - }, - { - "body": { - "nativeSrc": "16091:206:62", - "nodeType": "YulBlock", - "src": "16091:206:62", - "statements": [ - { - "nativeSrc": "16101:19:62", - "nodeType": "YulAssignment", - "src": "16101:19:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16117:2:62", - "nodeType": "YulLiteral", - "src": "16117:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "16111:5:62", - "nodeType": "YulIdentifier", - "src": "16111:5:62" - }, - "nativeSrc": "16111:9:62", - "nodeType": "YulFunctionCall", - "src": "16111:9:62" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "16101:6:62", - "nodeType": "YulIdentifier", - "src": "16101:6:62" - } - ] - }, - { - "nativeSrc": "16129:34:62", - "nodeType": "YulVariableDeclaration", - "src": "16129:34:62", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "16151:6:62", - "nodeType": "YulIdentifier", - "src": "16151:6:62" - }, - { - "kind": "number", - "nativeSrc": "16159:3:62", - "nodeType": "YulLiteral", - "src": "16159:3:62", - "type": "", - "value": "288" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16147:3:62", - "nodeType": "YulIdentifier", - "src": "16147:3:62" - }, - "nativeSrc": "16147:16:62", - "nodeType": "YulFunctionCall", - "src": "16147:16:62" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "16133:10:62", - "nodeType": "YulTypedName", - "src": "16133:10:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16238:22:62", - "nodeType": "YulBlock", - "src": "16238:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "16240:16:62", - "nodeType": "YulIdentifier", - "src": "16240:16:62" - }, - "nativeSrc": "16240:18:62", - "nodeType": "YulFunctionCall", - "src": "16240:18:62" - }, - "nativeSrc": "16240:18:62", - "nodeType": "YulExpressionStatement", - "src": "16240:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "16181:10:62", - "nodeType": "YulIdentifier", - "src": "16181:10:62" - }, - { - "kind": "number", - "nativeSrc": "16193:18:62", - "nodeType": "YulLiteral", - "src": "16193:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16178:2:62", - "nodeType": "YulIdentifier", - "src": "16178:2:62" - }, - "nativeSrc": "16178:34:62", - "nodeType": "YulFunctionCall", - "src": "16178:34:62" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "16217:10:62", - "nodeType": "YulIdentifier", - "src": "16217:10:62" - }, - { - "name": "memPtr", - "nativeSrc": "16229:6:62", - "nodeType": "YulIdentifier", - "src": "16229:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "16214:2:62", - "nodeType": "YulIdentifier", - "src": "16214:2:62" - }, - "nativeSrc": "16214:22:62", - "nodeType": "YulFunctionCall", - "src": "16214:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "16175:2:62", - "nodeType": "YulIdentifier", - "src": "16175:2:62" - }, - "nativeSrc": "16175:62:62", - "nodeType": "YulFunctionCall", - "src": "16175:62:62" - }, - "nativeSrc": "16172:88:62", - "nodeType": "YulIf", - "src": "16172:88:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16276:2:62", - "nodeType": "YulLiteral", - "src": "16276:2:62", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "16280:10:62", - "nodeType": "YulIdentifier", - "src": "16280:10:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16269:6:62", - "nodeType": "YulIdentifier", - "src": "16269:6:62" - }, - "nativeSrc": "16269:22:62", - "nodeType": "YulFunctionCall", - "src": "16269:22:62" - }, - "nativeSrc": "16269:22:62", - "nodeType": "YulExpressionStatement", - "src": "16269:22:62" - } - ] - }, - "name": "allocate_memory_4284", - "nativeSrc": "16045:252:62", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "16080:6:62", - "nodeType": "YulTypedName", - "src": "16080:6:62", - "type": "" - } - ], - "src": "16045:252:62" - }, - { - "body": { - "nativeSrc": "16355:836:62", - "nodeType": "YulBlock", - "src": "16355:836:62", - "statements": [ - { - "body": { - "nativeSrc": "16404:16:62", - "nodeType": "YulBlock", - "src": "16404:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16413:1:62", - "nodeType": "YulLiteral", - "src": "16413:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "16416:1:62", - "nodeType": "YulLiteral", - "src": "16416:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "16406:6:62", - "nodeType": "YulIdentifier", - "src": "16406:6:62" - }, - "nativeSrc": "16406:12:62", - "nodeType": "YulFunctionCall", - "src": "16406:12:62" - }, - "nativeSrc": "16406:12:62", - "nodeType": "YulExpressionStatement", - "src": "16406:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "16383:6:62", - "nodeType": "YulIdentifier", - "src": "16383:6:62" - }, - { - "kind": "number", - "nativeSrc": "16391:4:62", - "nodeType": "YulLiteral", - "src": "16391:4:62", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16379:3:62", - "nodeType": "YulIdentifier", - "src": "16379:3:62" - }, - "nativeSrc": "16379:17:62", - "nodeType": "YulFunctionCall", - "src": "16379:17:62" - }, - { - "name": "end", - "nativeSrc": "16398:3:62", - "nodeType": "YulIdentifier", - "src": "16398:3:62" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "16375:3:62", - "nodeType": "YulIdentifier", - "src": "16375:3:62" - }, - "nativeSrc": "16375:27:62", - "nodeType": "YulFunctionCall", - "src": "16375:27:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "16368:6:62", - "nodeType": "YulIdentifier", - "src": "16368:6:62" - }, - "nativeSrc": "16368:35:62", - "nodeType": "YulFunctionCall", - "src": "16368:35:62" - }, - "nativeSrc": "16365:55:62", - "nodeType": "YulIf", - "src": "16365:55:62" - }, - { - "nativeSrc": "16429:34:62", - "nodeType": "YulVariableDeclaration", - "src": "16429:34:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "16456:6:62", - "nodeType": "YulIdentifier", - "src": "16456:6:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "16443:12:62", - "nodeType": "YulIdentifier", - "src": "16443:12:62" - }, - "nativeSrc": "16443:20:62", - "nodeType": "YulFunctionCall", - "src": "16443:20:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "16433:6:62", - "nodeType": "YulTypedName", - "src": "16433:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "16472:28:62", - "nodeType": "YulVariableDeclaration", - "src": "16472:28:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "16487:6:62", - "nodeType": "YulIdentifier", - "src": "16487:6:62" - }, - { - "kind": "number", - "nativeSrc": "16495:4:62", - "nodeType": "YulLiteral", - "src": "16495:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16483:3:62", - "nodeType": "YulIdentifier", - "src": "16483:3:62" - }, - "nativeSrc": "16483:17:62", - "nodeType": "YulFunctionCall", - "src": "16483:17:62" - }, - "variables": [ - { - "name": "src", - "nativeSrc": "16476:3:62", - "nodeType": "YulTypedName", - "src": "16476:3:62", - "type": "" - } - ] - }, - { - "nativeSrc": "16509:16:62", - "nodeType": "YulVariableDeclaration", - "src": "16509:16:62", - "value": { - "kind": "number", - "nativeSrc": "16524:1:62", - "nodeType": "YulLiteral", - "src": "16524:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "array_1", - "nativeSrc": "16513:7:62", - "nodeType": "YulTypedName", - "src": "16513:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "16534:13:62", - "nodeType": "YulVariableDeclaration", - "src": "16534:13:62", - "value": { - "kind": "number", - "nativeSrc": "16546:1:62", - "nodeType": "YulLiteral", - "src": "16546:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "size", - "nativeSrc": "16538:4:62", - "nodeType": "YulTypedName", - "src": "16538:4:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16590:22:62", - "nodeType": "YulBlock", - "src": "16590:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "16592:16:62", - "nodeType": "YulIdentifier", - "src": "16592:16:62" - }, - "nativeSrc": "16592:18:62", - "nodeType": "YulFunctionCall", - "src": "16592:18:62" - }, - "nativeSrc": "16592:18:62", - "nodeType": "YulExpressionStatement", - "src": "16592:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "16562:6:62", - "nodeType": "YulIdentifier", - "src": "16562:6:62" - }, - { - "kind": "number", - "nativeSrc": "16570:18:62", - "nodeType": "YulLiteral", - "src": "16570:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16559:2:62", - "nodeType": "YulIdentifier", - "src": "16559:2:62" - }, - "nativeSrc": "16559:30:62", - "nodeType": "YulFunctionCall", - "src": "16559:30:62" - }, - "nativeSrc": "16556:56:62", - "nodeType": "YulIf", - "src": "16556:56:62" - }, - { - "nativeSrc": "16621:43:62", - "nodeType": "YulVariableDeclaration", - "src": "16621:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "16643:6:62", - "nodeType": "YulIdentifier", - "src": "16643:6:62" - }, - { - "kind": "number", - "nativeSrc": "16651:2:62", - "nodeType": "YulLiteral", - "src": "16651:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16639:3:62", - "nodeType": "YulIdentifier", - "src": "16639:3:62" - }, - "nativeSrc": "16639:15:62", - "nodeType": "YulFunctionCall", - "src": "16639:15:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16660:2:62", - "nodeType": "YulLiteral", - "src": "16660:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "16656:3:62", - "nodeType": "YulIdentifier", - "src": "16656:3:62" - }, - "nativeSrc": "16656:7:62", - "nodeType": "YulFunctionCall", - "src": "16656:7:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "16635:3:62", - "nodeType": "YulIdentifier", - "src": "16635:3:62" - }, - "nativeSrc": "16635:29:62", - "nodeType": "YulFunctionCall", - "src": "16635:29:62" - }, - "variables": [ - { - "name": "result", - "nativeSrc": "16625:6:62", - "nodeType": "YulTypedName", - "src": "16625:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "16673:25:62", - "nodeType": "YulAssignment", - "src": "16673:25:62", - "value": { - "arguments": [ - { - "name": "result", - "nativeSrc": "16685:6:62", - "nodeType": "YulIdentifier", - "src": "16685:6:62" - }, - { - "kind": "number", - "nativeSrc": "16693:4:62", - "nodeType": "YulLiteral", - "src": "16693:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16681:3:62", - "nodeType": "YulIdentifier", - "src": "16681:3:62" - }, - "nativeSrc": "16681:17:62", - "nodeType": "YulFunctionCall", - "src": "16681:17:62" - }, - "variableNames": [ - { - "name": "size", - "nativeSrc": "16673:4:62", - "nodeType": "YulIdentifier", - "src": "16673:4:62" - } - ] - }, - { - "nativeSrc": "16707:15:62", - "nodeType": "YulVariableDeclaration", - "src": "16707:15:62", - "value": { - "kind": "number", - "nativeSrc": "16721:1:62", - "nodeType": "YulLiteral", - "src": "16721:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "memPtr", - "nativeSrc": "16711:6:62", - "nodeType": "YulTypedName", - "src": "16711:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "16731:19:62", - "nodeType": "YulAssignment", - "src": "16731:19:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16747:2:62", - "nodeType": "YulLiteral", - "src": "16747:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "16741:5:62", - "nodeType": "YulIdentifier", - "src": "16741:5:62" - }, - "nativeSrc": "16741:9:62", - "nodeType": "YulFunctionCall", - "src": "16741:9:62" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "16731:6:62", - "nodeType": "YulIdentifier", - "src": "16731:6:62" - } - ] - }, - { - "nativeSrc": "16759:60:62", - "nodeType": "YulVariableDeclaration", - "src": "16759:60:62", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "16781:6:62", - "nodeType": "YulIdentifier", - "src": "16781:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "result", - "nativeSrc": "16797:6:62", - "nodeType": "YulIdentifier", - "src": "16797:6:62" - }, - { - "kind": "number", - "nativeSrc": "16805:2:62", - "nodeType": "YulLiteral", - "src": "16805:2:62", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16793:3:62", - "nodeType": "YulIdentifier", - "src": "16793:3:62" - }, - "nativeSrc": "16793:15:62", - "nodeType": "YulFunctionCall", - "src": "16793:15:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16814:2:62", - "nodeType": "YulLiteral", - "src": "16814:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "16810:3:62", - "nodeType": "YulIdentifier", - "src": "16810:3:62" - }, - "nativeSrc": "16810:7:62", - "nodeType": "YulFunctionCall", - "src": "16810:7:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "16789:3:62", - "nodeType": "YulIdentifier", - "src": "16789:3:62" - }, - "nativeSrc": "16789:29:62", - "nodeType": "YulFunctionCall", - "src": "16789:29:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16777:3:62", - "nodeType": "YulIdentifier", - "src": "16777:3:62" - }, - "nativeSrc": "16777:42:62", - "nodeType": "YulFunctionCall", - "src": "16777:42:62" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "16763:10:62", - "nodeType": "YulTypedName", - "src": "16763:10:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16894:22:62", - "nodeType": "YulBlock", - "src": "16894:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "16896:16:62", - "nodeType": "YulIdentifier", - "src": "16896:16:62" - }, - "nativeSrc": "16896:18:62", - "nodeType": "YulFunctionCall", - "src": "16896:18:62" - }, - "nativeSrc": "16896:18:62", - "nodeType": "YulExpressionStatement", - "src": "16896:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "16837:10:62", - "nodeType": "YulIdentifier", - "src": "16837:10:62" - }, - { - "kind": "number", - "nativeSrc": "16849:18:62", - "nodeType": "YulLiteral", - "src": "16849:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16834:2:62", - "nodeType": "YulIdentifier", - "src": "16834:2:62" - }, - "nativeSrc": "16834:34:62", - "nodeType": "YulFunctionCall", - "src": "16834:34:62" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "16873:10:62", - "nodeType": "YulIdentifier", - "src": "16873:10:62" - }, - { - "name": "memPtr", - "nativeSrc": "16885:6:62", - "nodeType": "YulIdentifier", - "src": "16885:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "16870:2:62", - "nodeType": "YulIdentifier", - "src": "16870:2:62" - }, - "nativeSrc": "16870:22:62", - "nodeType": "YulFunctionCall", - "src": "16870:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "16831:2:62", - "nodeType": "YulIdentifier", - "src": "16831:2:62" - }, - "nativeSrc": "16831:62:62", - "nodeType": "YulFunctionCall", - "src": "16831:62:62" - }, - "nativeSrc": "16828:88:62", - "nodeType": "YulIf", - "src": "16828:88:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16932:2:62", - "nodeType": "YulLiteral", - "src": "16932:2:62", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "16936:10:62", - "nodeType": "YulIdentifier", - "src": "16936:10:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16925:6:62", - "nodeType": "YulIdentifier", - "src": "16925:6:62" - }, - "nativeSrc": "16925:22:62", - "nodeType": "YulFunctionCall", - "src": "16925:22:62" - }, - "nativeSrc": "16925:22:62", - "nodeType": "YulExpressionStatement", - "src": "16925:22:62" - }, - { - "nativeSrc": "16956:17:62", - "nodeType": "YulAssignment", - "src": "16956:17:62", - "value": { - "name": "memPtr", - "nativeSrc": "16967:6:62", - "nodeType": "YulIdentifier", - "src": "16967:6:62" - }, - "variableNames": [ - { - "name": "array_1", - "nativeSrc": "16956:7:62", - "nodeType": "YulIdentifier", - "src": "16956:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "16989:6:62", - "nodeType": "YulIdentifier", - "src": "16989:6:62" - }, - { - "name": "length", - "nativeSrc": "16997:6:62", - "nodeType": "YulIdentifier", - "src": "16997:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16982:6:62", - "nodeType": "YulIdentifier", - "src": "16982:6:62" - }, - "nativeSrc": "16982:22:62", - "nodeType": "YulFunctionCall", - "src": "16982:22:62" - }, - "nativeSrc": "16982:22:62", - "nodeType": "YulExpressionStatement", - "src": "16982:22:62" - }, - { - "body": { - "nativeSrc": "17042:16:62", - "nodeType": "YulBlock", - "src": "17042:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "17051:1:62", - "nodeType": "YulLiteral", - "src": "17051:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "17054:1:62", - "nodeType": "YulLiteral", - "src": "17054:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17044:6:62", - "nodeType": "YulIdentifier", - "src": "17044:6:62" - }, - "nativeSrc": "17044:12:62", - "nodeType": "YulFunctionCall", - "src": "17044:12:62" - }, - "nativeSrc": "17044:12:62", - "nodeType": "YulExpressionStatement", - "src": "17044:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "17023:3:62", - "nodeType": "YulIdentifier", - "src": "17023:3:62" - }, - { - "name": "length", - "nativeSrc": "17028:6:62", - "nodeType": "YulIdentifier", - "src": "17028:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17019:3:62", - "nodeType": "YulIdentifier", - "src": "17019:3:62" - }, - "nativeSrc": "17019:16:62", - "nodeType": "YulFunctionCall", - "src": "17019:16:62" - }, - { - "name": "end", - "nativeSrc": "17037:3:62", - "nodeType": "YulIdentifier", - "src": "17037:3:62" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "17016:2:62", - "nodeType": "YulIdentifier", - "src": "17016:2:62" - }, - "nativeSrc": "17016:25:62", - "nodeType": "YulFunctionCall", - "src": "17016:25:62" - }, - "nativeSrc": "17013:45:62", - "nodeType": "YulIf", - "src": "17013:45:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "17084:6:62", - "nodeType": "YulIdentifier", - "src": "17084:6:62" - }, - { - "kind": "number", - "nativeSrc": "17092:4:62", - "nodeType": "YulLiteral", - "src": "17092:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17080:3:62", - "nodeType": "YulIdentifier", - "src": "17080:3:62" - }, - "nativeSrc": "17080:17:62", - "nodeType": "YulFunctionCall", - "src": "17080:17:62" - }, - { - "name": "src", - "nativeSrc": "17099:3:62", - "nodeType": "YulIdentifier", - "src": "17099:3:62" - }, - { - "name": "length", - "nativeSrc": "17104:6:62", - "nodeType": "YulIdentifier", - "src": "17104:6:62" - } - ], - "functionName": { - "name": "calldatacopy", - "nativeSrc": "17067:12:62", - "nodeType": "YulIdentifier", - "src": "17067:12:62" - }, - "nativeSrc": "17067:44:62", - "nodeType": "YulFunctionCall", - "src": "17067:44:62" - }, - "nativeSrc": "17067:44:62", - "nodeType": "YulExpressionStatement", - "src": "17067:44:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "17135:6:62", - "nodeType": "YulIdentifier", - "src": "17135:6:62" - }, - { - "name": "length", - "nativeSrc": "17143:6:62", - "nodeType": "YulIdentifier", - "src": "17143:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17131:3:62", - "nodeType": "YulIdentifier", - "src": "17131:3:62" - }, - "nativeSrc": "17131:19:62", - "nodeType": "YulFunctionCall", - "src": "17131:19:62" - }, - { - "kind": "number", - "nativeSrc": "17152:4:62", - "nodeType": "YulLiteral", - "src": "17152:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17127:3:62", - "nodeType": "YulIdentifier", - "src": "17127:3:62" - }, - "nativeSrc": "17127:30:62", - "nodeType": "YulFunctionCall", - "src": "17127:30:62" - }, - { - "kind": "number", - "nativeSrc": "17159:1:62", - "nodeType": "YulLiteral", - "src": "17159:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17120:6:62", - "nodeType": "YulIdentifier", - "src": "17120:6:62" - }, - "nativeSrc": "17120:41:62", - "nodeType": "YulFunctionCall", - "src": "17120:41:62" - }, - "nativeSrc": "17120:41:62", - "nodeType": "YulExpressionStatement", - "src": "17120:41:62" - }, - { - "nativeSrc": "17170:15:62", - "nodeType": "YulAssignment", - "src": "17170:15:62", - "value": { - "name": "memPtr", - "nativeSrc": "17179:6:62", - "nodeType": "YulIdentifier", - "src": "17179:6:62" - }, - "variableNames": [ - { - "name": "array", - "nativeSrc": "17170:5:62", - "nodeType": "YulIdentifier", - "src": "17170:5:62" - } - ] - } - ] - }, - "name": "abi_decode_string", - "nativeSrc": "16302:889:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "16329:6:62", - "nodeType": "YulTypedName", - "src": "16329:6:62", - "type": "" - }, - { - "name": "end", - "nativeSrc": "16337:3:62", - "nodeType": "YulTypedName", - "src": "16337:3:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nativeSrc": "16345:5:62", - "nodeType": "YulTypedName", - "src": "16345:5:62", - "type": "" - } - ], - "src": "16302:889:62" - }, - { - "body": { - "nativeSrc": "17328:549:62", - "nodeType": "YulBlock", - "src": "17328:549:62", - "statements": [ - { - "body": { - "nativeSrc": "17374:16:62", - "nodeType": "YulBlock", - "src": "17374:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "17383:1:62", - "nodeType": "YulLiteral", - "src": "17383:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "17386:1:62", - "nodeType": "YulLiteral", - "src": "17386:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17376:6:62", - "nodeType": "YulIdentifier", - "src": "17376:6:62" - }, - "nativeSrc": "17376:12:62", - "nodeType": "YulFunctionCall", - "src": "17376:12:62" - }, - "nativeSrc": "17376:12:62", - "nodeType": "YulExpressionStatement", - "src": "17376:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "17349:7:62", - "nodeType": "YulIdentifier", - "src": "17349:7:62" - }, - { - "name": "headStart", - "nativeSrc": "17358:9:62", - "nodeType": "YulIdentifier", - "src": "17358:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "17345:3:62", - "nodeType": "YulIdentifier", - "src": "17345:3:62" - }, - "nativeSrc": "17345:23:62", - "nodeType": "YulFunctionCall", - "src": "17345:23:62" - }, - { - "kind": "number", - "nativeSrc": "17370:2:62", - "nodeType": "YulLiteral", - "src": "17370:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "17341:3:62", - "nodeType": "YulIdentifier", - "src": "17341:3:62" - }, - "nativeSrc": "17341:32:62", - "nodeType": "YulFunctionCall", - "src": "17341:32:62" - }, - "nativeSrc": "17338:52:62", - "nodeType": "YulIf", - "src": "17338:52:62" - }, - { - "nativeSrc": "17399:37:62", - "nodeType": "YulVariableDeclaration", - "src": "17399:37:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17426:9:62", - "nodeType": "YulIdentifier", - "src": "17426:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "17413:12:62", - "nodeType": "YulIdentifier", - "src": "17413:12:62" - }, - "nativeSrc": "17413:23:62", - "nodeType": "YulFunctionCall", - "src": "17413:23:62" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "17403:6:62", - "nodeType": "YulTypedName", - "src": "17403:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "17479:16:62", - "nodeType": "YulBlock", - "src": "17479:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "17488:1:62", - "nodeType": "YulLiteral", - "src": "17488:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "17491:1:62", - "nodeType": "YulLiteral", - "src": "17491:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17481:6:62", - "nodeType": "YulIdentifier", - "src": "17481:6:62" - }, - "nativeSrc": "17481:12:62", - "nodeType": "YulFunctionCall", - "src": "17481:12:62" - }, - "nativeSrc": "17481:12:62", - "nodeType": "YulExpressionStatement", - "src": "17481:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "17451:6:62", - "nodeType": "YulIdentifier", - "src": "17451:6:62" - }, - { - "kind": "number", - "nativeSrc": "17459:18:62", - "nodeType": "YulLiteral", - "src": "17459:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "17448:2:62", - "nodeType": "YulIdentifier", - "src": "17448:2:62" - }, - "nativeSrc": "17448:30:62", - "nodeType": "YulFunctionCall", - "src": "17448:30:62" - }, - "nativeSrc": "17445:50:62", - "nodeType": "YulIf", - "src": "17445:50:62" - }, - { - "nativeSrc": "17504:60:62", - "nodeType": "YulAssignment", - "src": "17504:60:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17536:9:62", - "nodeType": "YulIdentifier", - "src": "17536:9:62" - }, - { - "name": "offset", - "nativeSrc": "17547:6:62", - "nodeType": "YulIdentifier", - "src": "17547:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17532:3:62", - "nodeType": "YulIdentifier", - "src": "17532:3:62" - }, - "nativeSrc": "17532:22:62", - "nodeType": "YulFunctionCall", - "src": "17532:22:62" - }, - { - "name": "dataEnd", - "nativeSrc": "17556:7:62", - "nodeType": "YulIdentifier", - "src": "17556:7:62" - } - ], - "functionName": { - "name": "abi_decode_string", - "nativeSrc": "17514:17:62", - "nodeType": "YulIdentifier", - "src": "17514:17:62" - }, - "nativeSrc": "17514:50:62", - "nodeType": "YulFunctionCall", - "src": "17514:50:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "17504:6:62", - "nodeType": "YulIdentifier", - "src": "17504:6:62" - } - ] - }, - { - "nativeSrc": "17573:48:62", - "nodeType": "YulVariableDeclaration", - "src": "17573:48:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17606:9:62", - "nodeType": "YulIdentifier", - "src": "17606:9:62" - }, - { - "kind": "number", - "nativeSrc": "17617:2:62", - "nodeType": "YulLiteral", - "src": "17617:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17602:3:62", - "nodeType": "YulIdentifier", - "src": "17602:3:62" - }, - "nativeSrc": "17602:18:62", - "nodeType": "YulFunctionCall", - "src": "17602:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "17589:12:62", - "nodeType": "YulIdentifier", - "src": "17589:12:62" - }, - "nativeSrc": "17589:32:62", - "nodeType": "YulFunctionCall", - "src": "17589:32:62" - }, - "variables": [ - { - "name": "offset_1", - "nativeSrc": "17577:8:62", - "nodeType": "YulTypedName", - "src": "17577:8:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "17666:16:62", - "nodeType": "YulBlock", - "src": "17666:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "17675:1:62", - "nodeType": "YulLiteral", - "src": "17675:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "17678:1:62", - "nodeType": "YulLiteral", - "src": "17678:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17668:6:62", - "nodeType": "YulIdentifier", - "src": "17668:6:62" - }, - "nativeSrc": "17668:12:62", - "nodeType": "YulFunctionCall", - "src": "17668:12:62" - }, - "nativeSrc": "17668:12:62", - "nodeType": "YulExpressionStatement", - "src": "17668:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nativeSrc": "17636:8:62", - "nodeType": "YulIdentifier", - "src": "17636:8:62" - }, - { - "kind": "number", - "nativeSrc": "17646:18:62", - "nodeType": "YulLiteral", - "src": "17646:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "17633:2:62", - "nodeType": "YulIdentifier", - "src": "17633:2:62" - }, - "nativeSrc": "17633:32:62", - "nodeType": "YulFunctionCall", - "src": "17633:32:62" - }, - "nativeSrc": "17630:52:62", - "nodeType": "YulIf", - "src": "17630:52:62" - }, - { - "nativeSrc": "17691:62:62", - "nodeType": "YulAssignment", - "src": "17691:62:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17723:9:62", - "nodeType": "YulIdentifier", - "src": "17723:9:62" - }, - { - "name": "offset_1", - "nativeSrc": "17734:8:62", - "nodeType": "YulIdentifier", - "src": "17734:8:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17719:3:62", - "nodeType": "YulIdentifier", - "src": "17719:3:62" - }, - "nativeSrc": "17719:24:62", - "nodeType": "YulFunctionCall", - "src": "17719:24:62" - }, - { - "name": "dataEnd", - "nativeSrc": "17745:7:62", - "nodeType": "YulIdentifier", - "src": "17745:7:62" - } - ], - "functionName": { - "name": "abi_decode_string", - "nativeSrc": "17701:17:62", - "nodeType": "YulIdentifier", - "src": "17701:17:62" - }, - "nativeSrc": "17701:52:62", - "nodeType": "YulFunctionCall", - "src": "17701:52:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "17691:6:62", - "nodeType": "YulIdentifier", - "src": "17691:6:62" - } - ] - }, - { - "nativeSrc": "17762:45:62", - "nodeType": "YulVariableDeclaration", - "src": "17762:45:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "17792:9:62", - "nodeType": "YulIdentifier", - "src": "17792:9:62" - }, - { - "kind": "number", - "nativeSrc": "17803:2:62", - "nodeType": "YulLiteral", - "src": "17803:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17788:3:62", - "nodeType": "YulIdentifier", - "src": "17788:3:62" - }, - "nativeSrc": "17788:18:62", - "nodeType": "YulFunctionCall", - "src": "17788:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "17775:12:62", - "nodeType": "YulIdentifier", - "src": "17775:12:62" - }, - "nativeSrc": "17775:32:62", - "nodeType": "YulFunctionCall", - "src": "17775:32:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "17766:5:62", - "nodeType": "YulTypedName", - "src": "17766:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "17841:5:62", - "nodeType": "YulIdentifier", - "src": "17841:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "17816:24:62", - "nodeType": "YulIdentifier", - "src": "17816:24:62" - }, - "nativeSrc": "17816:31:62", - "nodeType": "YulFunctionCall", - "src": "17816:31:62" - }, - "nativeSrc": "17816:31:62", - "nodeType": "YulExpressionStatement", - "src": "17816:31:62" - }, - { - "nativeSrc": "17856:15:62", - "nodeType": "YulAssignment", - "src": "17856:15:62", - "value": { - "name": "value", - "nativeSrc": "17866:5:62", - "nodeType": "YulIdentifier", - "src": "17866:5:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "17856:6:62", - "nodeType": "YulIdentifier", - "src": "17856:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_payable", - "nativeSrc": "17196:681:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "17278:9:62", - "nodeType": "YulTypedName", - "src": "17278:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "17289:7:62", - "nodeType": "YulTypedName", - "src": "17289:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "17301:6:62", - "nodeType": "YulTypedName", - "src": "17301:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "17309:6:62", - "nodeType": "YulTypedName", - "src": "17309:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "17317:6:62", - "nodeType": "YulTypedName", - "src": "17317:6:62", - "type": "" - } - ], - "src": "17196:681:62" - }, - { - "body": { - "nativeSrc": "17937:325:62", - "nodeType": "YulBlock", - "src": "17937:325:62", - "statements": [ - { - "nativeSrc": "17947:22:62", - "nodeType": "YulAssignment", - "src": "17947:22:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "17961:1:62", - "nodeType": "YulLiteral", - "src": "17961:1:62", - "type": "", - "value": "1" - }, - { - "name": "data", - "nativeSrc": "17964:4:62", - "nodeType": "YulIdentifier", - "src": "17964:4:62" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "17957:3:62", - "nodeType": "YulIdentifier", - "src": "17957:3:62" - }, - "nativeSrc": "17957:12:62", - "nodeType": "YulFunctionCall", - "src": "17957:12:62" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "17947:6:62", - "nodeType": "YulIdentifier", - "src": "17947:6:62" - } - ] - }, - { - "nativeSrc": "17978:38:62", - "nodeType": "YulVariableDeclaration", - "src": "17978:38:62", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "18008:4:62", - "nodeType": "YulIdentifier", - "src": "18008:4:62" - }, - { - "kind": "number", - "nativeSrc": "18014:1:62", - "nodeType": "YulLiteral", - "src": "18014:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "18004:3:62", - "nodeType": "YulIdentifier", - "src": "18004:3:62" - }, - "nativeSrc": "18004:12:62", - "nodeType": "YulFunctionCall", - "src": "18004:12:62" - }, - "variables": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "17982:18:62", - "nodeType": "YulTypedName", - "src": "17982:18:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "18055:31:62", - "nodeType": "YulBlock", - "src": "18055:31:62", - "statements": [ - { - "nativeSrc": "18057:27:62", - "nodeType": "YulAssignment", - "src": "18057:27:62", - "value": { - "arguments": [ - { - "name": "length", - "nativeSrc": "18071:6:62", - "nodeType": "YulIdentifier", - "src": "18071:6:62" - }, - { - "kind": "number", - "nativeSrc": "18079:4:62", - "nodeType": "YulLiteral", - "src": "18079:4:62", - "type": "", - "value": "0x7f" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "18067:3:62", - "nodeType": "YulIdentifier", - "src": "18067:3:62" - }, - "nativeSrc": "18067:17:62", - "nodeType": "YulFunctionCall", - "src": "18067:17:62" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "18057:6:62", - "nodeType": "YulIdentifier", - "src": "18057:6:62" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "18035:18:62", - "nodeType": "YulIdentifier", - "src": "18035:18:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "18028:6:62", - "nodeType": "YulIdentifier", - "src": "18028:6:62" - }, - "nativeSrc": "18028:26:62", - "nodeType": "YulFunctionCall", - "src": "18028:26:62" - }, - "nativeSrc": "18025:61:62", - "nodeType": "YulIf", - "src": "18025:61:62" - }, - { - "body": { - "nativeSrc": "18145:111:62", - "nodeType": "YulBlock", - "src": "18145:111:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18166:1:62", - "nodeType": "YulLiteral", - "src": "18166:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18173:3:62", - "nodeType": "YulLiteral", - "src": "18173:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "18178:10:62", - "nodeType": "YulLiteral", - "src": "18178:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "18169:3:62", - "nodeType": "YulIdentifier", - "src": "18169:3:62" - }, - "nativeSrc": "18169:20:62", - "nodeType": "YulFunctionCall", - "src": "18169:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18159:6:62", - "nodeType": "YulIdentifier", - "src": "18159:6:62" - }, - "nativeSrc": "18159:31:62", - "nodeType": "YulFunctionCall", - "src": "18159:31:62" - }, - "nativeSrc": "18159:31:62", - "nodeType": "YulExpressionStatement", - "src": "18159:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18210:1:62", - "nodeType": "YulLiteral", - "src": "18210:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "18213:4:62", - "nodeType": "YulLiteral", - "src": "18213:4:62", - "type": "", - "value": "0x22" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18203:6:62", - "nodeType": "YulIdentifier", - "src": "18203:6:62" - }, - "nativeSrc": "18203:15:62", - "nodeType": "YulFunctionCall", - "src": "18203:15:62" - }, - "nativeSrc": "18203:15:62", - "nodeType": "YulExpressionStatement", - "src": "18203:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18238:1:62", - "nodeType": "YulLiteral", - "src": "18238:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "18241:4:62", - "nodeType": "YulLiteral", - "src": "18241:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "18231:6:62", - "nodeType": "YulIdentifier", - "src": "18231:6:62" - }, - "nativeSrc": "18231:15:62", - "nodeType": "YulFunctionCall", - "src": "18231:15:62" - }, - "nativeSrc": "18231:15:62", - "nodeType": "YulExpressionStatement", - "src": "18231:15:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "18101:18:62", - "nodeType": "YulIdentifier", - "src": "18101:18:62" - }, - { - "arguments": [ - { - "name": "length", - "nativeSrc": "18124:6:62", - "nodeType": "YulIdentifier", - "src": "18124:6:62" - }, - { - "kind": "number", - "nativeSrc": "18132:2:62", - "nodeType": "YulLiteral", - "src": "18132:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "18121:2:62", - "nodeType": "YulIdentifier", - "src": "18121:2:62" - }, - "nativeSrc": "18121:14:62", - "nodeType": "YulFunctionCall", - "src": "18121:14:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "18098:2:62", - "nodeType": "YulIdentifier", - "src": "18098:2:62" - }, - "nativeSrc": "18098:38:62", - "nodeType": "YulFunctionCall", - "src": "18098:38:62" - }, - "nativeSrc": "18095:161:62", - "nodeType": "YulIf", - "src": "18095:161:62" - } - ] - }, - "name": "extract_byte_array_length", - "nativeSrc": "17882:380:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "17917:4:62", - "nodeType": "YulTypedName", - "src": "17917:4:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nativeSrc": "17926:6:62", - "nodeType": "YulTypedName", - "src": "17926:6:62", - "type": "" - } - ], - "src": "17882:380:62" - }, - { - "body": { - "nativeSrc": "18323:65:62", - "nodeType": "YulBlock", - "src": "18323:65:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18340:1:62", - "nodeType": "YulLiteral", - "src": "18340:1:62", - "type": "", - "value": "0" - }, - { - "name": "ptr", - "nativeSrc": "18343:3:62", - "nodeType": "YulIdentifier", - "src": "18343:3:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18333:6:62", - "nodeType": "YulIdentifier", - "src": "18333:6:62" - }, - "nativeSrc": "18333:14:62", - "nodeType": "YulFunctionCall", - "src": "18333:14:62" - }, - "nativeSrc": "18333:14:62", - "nodeType": "YulExpressionStatement", - "src": "18333:14:62" - }, - { - "nativeSrc": "18356:26:62", - "nodeType": "YulAssignment", - "src": "18356:26:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18374:1:62", - "nodeType": "YulLiteral", - "src": "18374:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "18377:4:62", - "nodeType": "YulLiteral", - "src": "18377:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "18364:9:62", - "nodeType": "YulIdentifier", - "src": "18364:9:62" - }, - "nativeSrc": "18364:18:62", - "nodeType": "YulFunctionCall", - "src": "18364:18:62" - }, - "variableNames": [ - { - "name": "data", - "nativeSrc": "18356:4:62", - "nodeType": "YulIdentifier", - "src": "18356:4:62" - } - ] - } - ] - }, - "name": "array_dataslot_string_storage", - "nativeSrc": "18267:121:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "ptr", - "nativeSrc": "18306:3:62", - "nodeType": "YulTypedName", - "src": "18306:3:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "data", - "nativeSrc": "18314:4:62", - "nodeType": "YulTypedName", - "src": "18314:4:62", - "type": "" - } - ], - "src": "18267:121:62" - }, - { - "body": { - "nativeSrc": "18474:437:62", - "nodeType": "YulBlock", - "src": "18474:437:62", - "statements": [ - { - "body": { - "nativeSrc": "18507:398:62", - "nodeType": "YulBlock", - "src": "18507:398:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18528:1:62", - "nodeType": "YulLiteral", - "src": "18528:1:62", - "type": "", - "value": "0" - }, - { - "name": "array", - "nativeSrc": "18531:5:62", - "nodeType": "YulIdentifier", - "src": "18531:5:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18521:6:62", - "nodeType": "YulIdentifier", - "src": "18521:6:62" - }, - "nativeSrc": "18521:16:62", - "nodeType": "YulFunctionCall", - "src": "18521:16:62" - }, - "nativeSrc": "18521:16:62", - "nodeType": "YulExpressionStatement", - "src": "18521:16:62" - }, - { - "nativeSrc": "18550:30:62", - "nodeType": "YulVariableDeclaration", - "src": "18550:30:62", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18572:1:62", - "nodeType": "YulLiteral", - "src": "18572:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "18575:4:62", - "nodeType": "YulLiteral", - "src": "18575:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "18562:9:62", - "nodeType": "YulIdentifier", - "src": "18562:9:62" - }, - "nativeSrc": "18562:18:62", - "nodeType": "YulFunctionCall", - "src": "18562:18:62" - }, - "variables": [ - { - "name": "data", - "nativeSrc": "18554:4:62", - "nodeType": "YulTypedName", - "src": "18554:4:62", - "type": "" - } - ] - }, - { - "nativeSrc": "18593:57:62", - "nodeType": "YulVariableDeclaration", - "src": "18593:57:62", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "18616:4:62", - "nodeType": "YulIdentifier", - "src": "18616:4:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18626:1:62", - "nodeType": "YulLiteral", - "src": "18626:1:62", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "18633:10:62", - "nodeType": "YulIdentifier", - "src": "18633:10:62" - }, - { - "kind": "number", - "nativeSrc": "18645:2:62", - "nodeType": "YulLiteral", - "src": "18645:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18629:3:62", - "nodeType": "YulIdentifier", - "src": "18629:3:62" - }, - "nativeSrc": "18629:19:62", - "nodeType": "YulFunctionCall", - "src": "18629:19:62" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "18622:3:62", - "nodeType": "YulIdentifier", - "src": "18622:3:62" - }, - "nativeSrc": "18622:27:62", - "nodeType": "YulFunctionCall", - "src": "18622:27:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18612:3:62", - "nodeType": "YulIdentifier", - "src": "18612:3:62" - }, - "nativeSrc": "18612:38:62", - "nodeType": "YulFunctionCall", - "src": "18612:38:62" - }, - "variables": [ - { - "name": "deleteStart", - "nativeSrc": "18597:11:62", - "nodeType": "YulTypedName", - "src": "18597:11:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "18687:23:62", - "nodeType": "YulBlock", - "src": "18687:23:62", - "statements": [ - { - "nativeSrc": "18689:19:62", - "nodeType": "YulAssignment", - "src": "18689:19:62", - "value": { - "name": "data", - "nativeSrc": "18704:4:62", - "nodeType": "YulIdentifier", - "src": "18704:4:62" - }, - "variableNames": [ - { - "name": "deleteStart", - "nativeSrc": "18689:11:62", - "nodeType": "YulIdentifier", - "src": "18689:11:62" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "18669:10:62", - "nodeType": "YulIdentifier", - "src": "18669:10:62" - }, - { - "kind": "number", - "nativeSrc": "18681:4:62", - "nodeType": "YulLiteral", - "src": "18681:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "18666:2:62", - "nodeType": "YulIdentifier", - "src": "18666:2:62" - }, - "nativeSrc": "18666:20:62", - "nodeType": "YulFunctionCall", - "src": "18666:20:62" - }, - "nativeSrc": "18663:47:62", - "nodeType": "YulIf", - "src": "18663:47:62" - }, - { - "nativeSrc": "18723:41:62", - "nodeType": "YulVariableDeclaration", - "src": "18723:41:62", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "18737:4:62", - "nodeType": "YulIdentifier", - "src": "18737:4:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18747:1:62", - "nodeType": "YulLiteral", - "src": "18747:1:62", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "len", - "nativeSrc": "18754:3:62", - "nodeType": "YulIdentifier", - "src": "18754:3:62" - }, - { - "kind": "number", - "nativeSrc": "18759:2:62", - "nodeType": "YulLiteral", - "src": "18759:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18750:3:62", - "nodeType": "YulIdentifier", - "src": "18750:3:62" - }, - "nativeSrc": "18750:12:62", - "nodeType": "YulFunctionCall", - "src": "18750:12:62" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "18743:3:62", - "nodeType": "YulIdentifier", - "src": "18743:3:62" - }, - "nativeSrc": "18743:20:62", - "nodeType": "YulFunctionCall", - "src": "18743:20:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18733:3:62", - "nodeType": "YulIdentifier", - "src": "18733:3:62" - }, - "nativeSrc": "18733:31:62", - "nodeType": "YulFunctionCall", - "src": "18733:31:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "18727:2:62", - "nodeType": "YulTypedName", - "src": "18727:2:62", - "type": "" - } - ] - }, - { - "nativeSrc": "18777:24:62", - "nodeType": "YulVariableDeclaration", - "src": "18777:24:62", - "value": { - "name": "deleteStart", - "nativeSrc": "18790:11:62", - "nodeType": "YulIdentifier", - "src": "18790:11:62" - }, - "variables": [ - { - "name": "start", - "nativeSrc": "18781:5:62", - "nodeType": "YulTypedName", - "src": "18781:5:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "18875:20:62", - "nodeType": "YulBlock", - "src": "18875:20:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "start", - "nativeSrc": "18884:5:62", - "nodeType": "YulIdentifier", - "src": "18884:5:62" - }, - { - "kind": "number", - "nativeSrc": "18891:1:62", - "nodeType": "YulLiteral", - "src": "18891:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "18877:6:62", - "nodeType": "YulIdentifier", - "src": "18877:6:62" - }, - "nativeSrc": "18877:16:62", - "nodeType": "YulFunctionCall", - "src": "18877:16:62" - }, - "nativeSrc": "18877:16:62", - "nodeType": "YulExpressionStatement", - "src": "18877:16:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "start", - "nativeSrc": "18825:5:62", - "nodeType": "YulIdentifier", - "src": "18825:5:62" - }, - { - "name": "_1", - "nativeSrc": "18832:2:62", - "nodeType": "YulIdentifier", - "src": "18832:2:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "18822:2:62", - "nodeType": "YulIdentifier", - "src": "18822:2:62" - }, - "nativeSrc": "18822:13:62", - "nodeType": "YulFunctionCall", - "src": "18822:13:62" - }, - "nativeSrc": "18814:81:62", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "18836:26:62", - "nodeType": "YulBlock", - "src": "18836:26:62", - "statements": [ - { - "nativeSrc": "18838:22:62", - "nodeType": "YulAssignment", - "src": "18838:22:62", - "value": { - "arguments": [ - { - "name": "start", - "nativeSrc": "18851:5:62", - "nodeType": "YulIdentifier", - "src": "18851:5:62" - }, - { - "kind": "number", - "nativeSrc": "18858:1:62", - "nodeType": "YulLiteral", - "src": "18858:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18847:3:62", - "nodeType": "YulIdentifier", - "src": "18847:3:62" - }, - "nativeSrc": "18847:13:62", - "nodeType": "YulFunctionCall", - "src": "18847:13:62" - }, - "variableNames": [ - { - "name": "start", - "nativeSrc": "18838:5:62", - "nodeType": "YulIdentifier", - "src": "18838:5:62" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "18818:3:62", - "nodeType": "YulBlock", - "src": "18818:3:62", - "statements": [] - }, - "src": "18814:81:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nativeSrc": "18490:3:62", - "nodeType": "YulIdentifier", - "src": "18490:3:62" - }, - { - "kind": "number", - "nativeSrc": "18495:2:62", - "nodeType": "YulLiteral", - "src": "18495:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "18487:2:62", - "nodeType": "YulIdentifier", - "src": "18487:2:62" - }, - "nativeSrc": "18487:11:62", - "nodeType": "YulFunctionCall", - "src": "18487:11:62" - }, - "nativeSrc": "18484:421:62", - "nodeType": "YulIf", - "src": "18484:421:62" - } - ] - }, - "name": "clean_up_bytearray_end_slots_string_storage", - "nativeSrc": "18393:518:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nativeSrc": "18446:5:62", - "nodeType": "YulTypedName", - "src": "18446:5:62", - "type": "" - }, - { - "name": "len", - "nativeSrc": "18453:3:62", - "nodeType": "YulTypedName", - "src": "18453:3:62", - "type": "" - }, - { - "name": "startIndex", - "nativeSrc": "18458:10:62", - "nodeType": "YulTypedName", - "src": "18458:10:62", - "type": "" - } - ], - "src": "18393:518:62" - }, - { - "body": { - "nativeSrc": "19001:81:62", - "nodeType": "YulBlock", - "src": "19001:81:62", - "statements": [ - { - "nativeSrc": "19011:65:62", - "nodeType": "YulAssignment", - "src": "19011:65:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "data", - "nativeSrc": "19026:4:62", - "nodeType": "YulIdentifier", - "src": "19026:4:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19044:1:62", - "nodeType": "YulLiteral", - "src": "19044:1:62", - "type": "", - "value": "3" - }, - { - "name": "len", - "nativeSrc": "19047:3:62", - "nodeType": "YulIdentifier", - "src": "19047:3:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "19040:3:62", - "nodeType": "YulIdentifier", - "src": "19040:3:62" - }, - "nativeSrc": "19040:11:62", - "nodeType": "YulFunctionCall", - "src": "19040:11:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19057:1:62", - "nodeType": "YulLiteral", - "src": "19057:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "19053:3:62", - "nodeType": "YulIdentifier", - "src": "19053:3:62" - }, - "nativeSrc": "19053:6:62", - "nodeType": "YulFunctionCall", - "src": "19053:6:62" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "19036:3:62", - "nodeType": "YulIdentifier", - "src": "19036:3:62" - }, - "nativeSrc": "19036:24:62", - "nodeType": "YulFunctionCall", - "src": "19036:24:62" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "19032:3:62", - "nodeType": "YulIdentifier", - "src": "19032:3:62" - }, - "nativeSrc": "19032:29:62", - "nodeType": "YulFunctionCall", - "src": "19032:29:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "19022:3:62", - "nodeType": "YulIdentifier", - "src": "19022:3:62" - }, - "nativeSrc": "19022:40:62", - "nodeType": "YulFunctionCall", - "src": "19022:40:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19068:1:62", - "nodeType": "YulLiteral", - "src": "19068:1:62", - "type": "", - "value": "1" - }, - { - "name": "len", - "nativeSrc": "19071:3:62", - "nodeType": "YulIdentifier", - "src": "19071:3:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "19064:3:62", - "nodeType": "YulIdentifier", - "src": "19064:3:62" - }, - "nativeSrc": "19064:11:62", - "nodeType": "YulFunctionCall", - "src": "19064:11:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "19019:2:62", - "nodeType": "YulIdentifier", - "src": "19019:2:62" - }, - "nativeSrc": "19019:57:62", - "nodeType": "YulFunctionCall", - "src": "19019:57:62" - }, - "variableNames": [ - { - "name": "used", - "nativeSrc": "19011:4:62", - "nodeType": "YulIdentifier", - "src": "19011:4:62" - } - ] - } - ] - }, - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "18916:166:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "18978:4:62", - "nodeType": "YulTypedName", - "src": "18978:4:62", - "type": "" - }, - { - "name": "len", - "nativeSrc": "18984:3:62", - "nodeType": "YulTypedName", - "src": "18984:3:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "used", - "nativeSrc": "18992:4:62", - "nodeType": "YulTypedName", - "src": "18992:4:62", - "type": "" - } - ], - "src": "18916:166:62" - }, - { - "body": { - "nativeSrc": "19183:1203:62", - "nodeType": "YulBlock", - "src": "19183:1203:62", - "statements": [ - { - "nativeSrc": "19193:24:62", - "nodeType": "YulVariableDeclaration", - "src": "19193:24:62", - "value": { - "arguments": [ - { - "name": "src", - "nativeSrc": "19213:3:62", - "nodeType": "YulIdentifier", - "src": "19213:3:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "19207:5:62", - "nodeType": "YulIdentifier", - "src": "19207:5:62" - }, - "nativeSrc": "19207:10:62", - "nodeType": "YulFunctionCall", - "src": "19207:10:62" - }, - "variables": [ - { - "name": "newLen", - "nativeSrc": "19197:6:62", - "nodeType": "YulTypedName", - "src": "19197:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "19260:22:62", - "nodeType": "YulBlock", - "src": "19260:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "19262:16:62", - "nodeType": "YulIdentifier", - "src": "19262:16:62" - }, - "nativeSrc": "19262:18:62", - "nodeType": "YulFunctionCall", - "src": "19262:18:62" - }, - "nativeSrc": "19262:18:62", - "nodeType": "YulExpressionStatement", - "src": "19262:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "19232:6:62", - "nodeType": "YulIdentifier", - "src": "19232:6:62" - }, - { - "kind": "number", - "nativeSrc": "19240:18:62", - "nodeType": "YulLiteral", - "src": "19240:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "19229:2:62", - "nodeType": "YulIdentifier", - "src": "19229:2:62" - }, - "nativeSrc": "19229:30:62", - "nodeType": "YulFunctionCall", - "src": "19229:30:62" - }, - "nativeSrc": "19226:56:62", - "nodeType": "YulIf", - "src": "19226:56:62" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "19335:4:62", - "nodeType": "YulIdentifier", - "src": "19335:4:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "slot", - "nativeSrc": "19373:4:62", - "nodeType": "YulIdentifier", - "src": "19373:4:62" - } - ], - "functionName": { - "name": "sload", - "nativeSrc": "19367:5:62", - "nodeType": "YulIdentifier", - "src": "19367:5:62" - }, - "nativeSrc": "19367:11:62", - "nodeType": "YulFunctionCall", - "src": "19367:11:62" - } - ], - "functionName": { - "name": "extract_byte_array_length", - "nativeSrc": "19341:25:62", - "nodeType": "YulIdentifier", - "src": "19341:25:62" - }, - "nativeSrc": "19341:38:62", - "nodeType": "YulFunctionCall", - "src": "19341:38:62" - }, - { - "name": "newLen", - "nativeSrc": "19381:6:62", - "nodeType": "YulIdentifier", - "src": "19381:6:62" - } - ], - "functionName": { - "name": "clean_up_bytearray_end_slots_string_storage", - "nativeSrc": "19291:43:62", - "nodeType": "YulIdentifier", - "src": "19291:43:62" - }, - "nativeSrc": "19291:97:62", - "nodeType": "YulFunctionCall", - "src": "19291:97:62" - }, - "nativeSrc": "19291:97:62", - "nodeType": "YulExpressionStatement", - "src": "19291:97:62" - }, - { - "nativeSrc": "19397:18:62", - "nodeType": "YulVariableDeclaration", - "src": "19397:18:62", - "value": { - "kind": "number", - "nativeSrc": "19414:1:62", - "nodeType": "YulLiteral", - "src": "19414:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "srcOffset", - "nativeSrc": "19401:9:62", - "nodeType": "YulTypedName", - "src": "19401:9:62", - "type": "" - } - ] - }, - { - "nativeSrc": "19424:17:62", - "nodeType": "YulAssignment", - "src": "19424:17:62", - "value": { - "kind": "number", - "nativeSrc": "19437:4:62", - "nodeType": "YulLiteral", - "src": "19437:4:62", - "type": "", - "value": "0x20" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "19424:9:62", - "nodeType": "YulIdentifier", - "src": "19424:9:62" - } - ] - }, - { - "cases": [ - { - "body": { - "nativeSrc": "19487:642:62", - "nodeType": "YulBlock", - "src": "19487:642:62", - "statements": [ - { - "nativeSrc": "19501:35:62", - "nodeType": "YulVariableDeclaration", - "src": "19501:35:62", - "value": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "19520:6:62", - "nodeType": "YulIdentifier", - "src": "19520:6:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19532:2:62", - "nodeType": "YulLiteral", - "src": "19532:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "19528:3:62", - "nodeType": "YulIdentifier", - "src": "19528:3:62" - }, - "nativeSrc": "19528:7:62", - "nodeType": "YulFunctionCall", - "src": "19528:7:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "19516:3:62", - "nodeType": "YulIdentifier", - "src": "19516:3:62" - }, - "nativeSrc": "19516:20:62", - "nodeType": "YulFunctionCall", - "src": "19516:20:62" - }, - "variables": [ - { - "name": "loopEnd", - "nativeSrc": "19505:7:62", - "nodeType": "YulTypedName", - "src": "19505:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "19549:49:62", - "nodeType": "YulVariableDeclaration", - "src": "19549:49:62", - "value": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "19593:4:62", - "nodeType": "YulIdentifier", - "src": "19593:4:62" - } - ], - "functionName": { - "name": "array_dataslot_string_storage", - "nativeSrc": "19563:29:62", - "nodeType": "YulIdentifier", - "src": "19563:29:62" - }, - "nativeSrc": "19563:35:62", - "nodeType": "YulFunctionCall", - "src": "19563:35:62" - }, - "variables": [ - { - "name": "dstPtr", - "nativeSrc": "19553:6:62", - "nodeType": "YulTypedName", - "src": "19553:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "19611:10:62", - "nodeType": "YulVariableDeclaration", - "src": "19611:10:62", - "value": { - "kind": "number", - "nativeSrc": "19620:1:62", - "nodeType": "YulLiteral", - "src": "19620:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "19615:1:62", - "nodeType": "YulTypedName", - "src": "19615:1:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "19691:165:62", - "nodeType": "YulBlock", - "src": "19691:165:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "19716:6:62", - "nodeType": "YulIdentifier", - "src": "19716:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "19734:3:62", - "nodeType": "YulIdentifier", - "src": "19734:3:62" - }, - { - "name": "srcOffset", - "nativeSrc": "19739:9:62", - "nodeType": "YulIdentifier", - "src": "19739:9:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19730:3:62", - "nodeType": "YulIdentifier", - "src": "19730:3:62" - }, - "nativeSrc": "19730:19:62", - "nodeType": "YulFunctionCall", - "src": "19730:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "19724:5:62", - "nodeType": "YulIdentifier", - "src": "19724:5:62" - }, - "nativeSrc": "19724:26:62", - "nodeType": "YulFunctionCall", - "src": "19724:26:62" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "19709:6:62", - "nodeType": "YulIdentifier", - "src": "19709:6:62" - }, - "nativeSrc": "19709:42:62", - "nodeType": "YulFunctionCall", - "src": "19709:42:62" - }, - "nativeSrc": "19709:42:62", - "nodeType": "YulExpressionStatement", - "src": "19709:42:62" - }, - { - "nativeSrc": "19768:24:62", - "nodeType": "YulAssignment", - "src": "19768:24:62", - "value": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "19782:6:62", - "nodeType": "YulIdentifier", - "src": "19782:6:62" - }, - { - "kind": "number", - "nativeSrc": "19790:1:62", - "nodeType": "YulLiteral", - "src": "19790:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19778:3:62", - "nodeType": "YulIdentifier", - "src": "19778:3:62" - }, - "nativeSrc": "19778:14:62", - "nodeType": "YulFunctionCall", - "src": "19778:14:62" - }, - "variableNames": [ - { - "name": "dstPtr", - "nativeSrc": "19768:6:62", - "nodeType": "YulIdentifier", - "src": "19768:6:62" - } - ] - }, - { - "nativeSrc": "19809:33:62", - "nodeType": "YulAssignment", - "src": "19809:33:62", - "value": { - "arguments": [ - { - "name": "srcOffset", - "nativeSrc": "19826:9:62", - "nodeType": "YulIdentifier", - "src": "19826:9:62" - }, - { - "kind": "number", - "nativeSrc": "19837:4:62", - "nodeType": "YulLiteral", - "src": "19837:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19822:3:62", - "nodeType": "YulIdentifier", - "src": "19822:3:62" - }, - "nativeSrc": "19822:20:62", - "nodeType": "YulFunctionCall", - "src": "19822:20:62" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "19809:9:62", - "nodeType": "YulIdentifier", - "src": "19809:9:62" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "19645:1:62", - "nodeType": "YulIdentifier", - "src": "19645:1:62" - }, - { - "name": "loopEnd", - "nativeSrc": "19648:7:62", - "nodeType": "YulIdentifier", - "src": "19648:7:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "19642:2:62", - "nodeType": "YulIdentifier", - "src": "19642:2:62" - }, - "nativeSrc": "19642:14:62", - "nodeType": "YulFunctionCall", - "src": "19642:14:62" - }, - "nativeSrc": "19634:222:62", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "19657:21:62", - "nodeType": "YulBlock", - "src": "19657:21:62", - "statements": [ - { - "nativeSrc": "19659:17:62", - "nodeType": "YulAssignment", - "src": "19659:17:62", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "19668:1:62", - "nodeType": "YulIdentifier", - "src": "19668:1:62" - }, - { - "kind": "number", - "nativeSrc": "19671:4:62", - "nodeType": "YulLiteral", - "src": "19671:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19664:3:62", - "nodeType": "YulIdentifier", - "src": "19664:3:62" - }, - "nativeSrc": "19664:12:62", - "nodeType": "YulFunctionCall", - "src": "19664:12:62" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "19659:1:62", - "nodeType": "YulIdentifier", - "src": "19659:1:62" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "19638:3:62", - "nodeType": "YulBlock", - "src": "19638:3:62", - "statements": [] - }, - "src": "19634:222:62" - }, - { - "body": { - "nativeSrc": "19904:166:62", - "nodeType": "YulBlock", - "src": "19904:166:62", - "statements": [ - { - "nativeSrc": "19922:43:62", - "nodeType": "YulVariableDeclaration", - "src": "19922:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "19949:3:62", - "nodeType": "YulIdentifier", - "src": "19949:3:62" - }, - { - "name": "srcOffset", - "nativeSrc": "19954:9:62", - "nodeType": "YulIdentifier", - "src": "19954:9:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19945:3:62", - "nodeType": "YulIdentifier", - "src": "19945:3:62" - }, - "nativeSrc": "19945:19:62", - "nodeType": "YulFunctionCall", - "src": "19945:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "19939:5:62", - "nodeType": "YulIdentifier", - "src": "19939:5:62" - }, - "nativeSrc": "19939:26:62", - "nodeType": "YulFunctionCall", - "src": "19939:26:62" - }, - "variables": [ - { - "name": "lastValue", - "nativeSrc": "19926:9:62", - "nodeType": "YulTypedName", - "src": "19926:9:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "19989:6:62", - "nodeType": "YulIdentifier", - "src": "19989:6:62" - }, - { - "arguments": [ - { - "name": "lastValue", - "nativeSrc": "20001:9:62", - "nodeType": "YulIdentifier", - "src": "20001:9:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20028:1:62", - "nodeType": "YulLiteral", - "src": "20028:1:62", - "type": "", - "value": "3" - }, - { - "name": "newLen", - "nativeSrc": "20031:6:62", - "nodeType": "YulIdentifier", - "src": "20031:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "20024:3:62", - "nodeType": "YulIdentifier", - "src": "20024:3:62" - }, - "nativeSrc": "20024:14:62", - "nodeType": "YulFunctionCall", - "src": "20024:14:62" - }, - { - "kind": "number", - "nativeSrc": "20040:3:62", - "nodeType": "YulLiteral", - "src": "20040:3:62", - "type": "", - "value": "248" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "20020:3:62", - "nodeType": "YulIdentifier", - "src": "20020:3:62" - }, - "nativeSrc": "20020:24:62", - "nodeType": "YulFunctionCall", - "src": "20020:24:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20050:1:62", - "nodeType": "YulLiteral", - "src": "20050:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "20046:3:62", - "nodeType": "YulIdentifier", - "src": "20046:3:62" - }, - "nativeSrc": "20046:6:62", - "nodeType": "YulFunctionCall", - "src": "20046:6:62" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "20016:3:62", - "nodeType": "YulIdentifier", - "src": "20016:3:62" - }, - "nativeSrc": "20016:37:62", - "nodeType": "YulFunctionCall", - "src": "20016:37:62" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "20012:3:62", - "nodeType": "YulIdentifier", - "src": "20012:3:62" - }, - "nativeSrc": "20012:42:62", - "nodeType": "YulFunctionCall", - "src": "20012:42:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "19997:3:62", - "nodeType": "YulIdentifier", - "src": "19997:3:62" - }, - "nativeSrc": "19997:58:62", - "nodeType": "YulFunctionCall", - "src": "19997:58:62" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "19982:6:62", - "nodeType": "YulIdentifier", - "src": "19982:6:62" - }, - "nativeSrc": "19982:74:62", - "nodeType": "YulFunctionCall", - "src": "19982:74:62" - }, - "nativeSrc": "19982:74:62", - "nodeType": "YulExpressionStatement", - "src": "19982:74:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "loopEnd", - "nativeSrc": "19875:7:62", - "nodeType": "YulIdentifier", - "src": "19875:7:62" - }, - { - "name": "newLen", - "nativeSrc": "19884:6:62", - "nodeType": "YulIdentifier", - "src": "19884:6:62" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "19872:2:62", - "nodeType": "YulIdentifier", - "src": "19872:2:62" - }, - "nativeSrc": "19872:19:62", - "nodeType": "YulFunctionCall", - "src": "19872:19:62" - }, - "nativeSrc": "19869:201:62", - "nodeType": "YulIf", - "src": "19869:201:62" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "20090:4:62", - "nodeType": "YulIdentifier", - "src": "20090:4:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20104:1:62", - "nodeType": "YulLiteral", - "src": "20104:1:62", - "type": "", - "value": "1" - }, - { - "name": "newLen", - "nativeSrc": "20107:6:62", - "nodeType": "YulIdentifier", - "src": "20107:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "20100:3:62", - "nodeType": "YulIdentifier", - "src": "20100:3:62" - }, - "nativeSrc": "20100:14:62", - "nodeType": "YulFunctionCall", - "src": "20100:14:62" - }, - { - "kind": "number", - "nativeSrc": "20116:1:62", - "nodeType": "YulLiteral", - "src": "20116:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20096:3:62", - "nodeType": "YulIdentifier", - "src": "20096:3:62" - }, - "nativeSrc": "20096:22:62", - "nodeType": "YulFunctionCall", - "src": "20096:22:62" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "20083:6:62", - "nodeType": "YulIdentifier", - "src": "20083:6:62" - }, - "nativeSrc": "20083:36:62", - "nodeType": "YulFunctionCall", - "src": "20083:36:62" - }, - "nativeSrc": "20083:36:62", - "nodeType": "YulExpressionStatement", - "src": "20083:36:62" - } - ] - }, - "nativeSrc": "19480:649:62", - "nodeType": "YulCase", - "src": "19480:649:62", - "value": { - "kind": "number", - "nativeSrc": "19485:1:62", - "nodeType": "YulLiteral", - "src": "19485:1:62", - "type": "", - "value": "1" - } - }, - { - "body": { - "nativeSrc": "20146:234:62", - "nodeType": "YulBlock", - "src": "20146:234:62", - "statements": [ - { - "nativeSrc": "20160:14:62", - "nodeType": "YulVariableDeclaration", - "src": "20160:14:62", - "value": { - "kind": "number", - "nativeSrc": "20173:1:62", - "nodeType": "YulLiteral", - "src": "20173:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "20164:5:62", - "nodeType": "YulTypedName", - "src": "20164:5:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "20209:67:62", - "nodeType": "YulBlock", - "src": "20209:67:62", - "statements": [ - { - "nativeSrc": "20227:35:62", - "nodeType": "YulAssignment", - "src": "20227:35:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "20246:3:62", - "nodeType": "YulIdentifier", - "src": "20246:3:62" - }, - { - "name": "srcOffset", - "nativeSrc": "20251:9:62", - "nodeType": "YulIdentifier", - "src": "20251:9:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20242:3:62", - "nodeType": "YulIdentifier", - "src": "20242:3:62" - }, - "nativeSrc": "20242:19:62", - "nodeType": "YulFunctionCall", - "src": "20242:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "20236:5:62", - "nodeType": "YulIdentifier", - "src": "20236:5:62" - }, - "nativeSrc": "20236:26:62", - "nodeType": "YulFunctionCall", - "src": "20236:26:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "20227:5:62", - "nodeType": "YulIdentifier", - "src": "20227:5:62" - } - ] - } - ] - }, - "condition": { - "name": "newLen", - "nativeSrc": "20190:6:62", - "nodeType": "YulIdentifier", - "src": "20190:6:62" - }, - "nativeSrc": "20187:89:62", - "nodeType": "YulIf", - "src": "20187:89:62" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "20296:4:62", - "nodeType": "YulIdentifier", - "src": "20296:4:62" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "20355:5:62", - "nodeType": "YulIdentifier", - "src": "20355:5:62" - }, - { - "name": "newLen", - "nativeSrc": "20362:6:62", - "nodeType": "YulIdentifier", - "src": "20362:6:62" - } - ], - "functionName": { - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "20302:52:62", - "nodeType": "YulIdentifier", - "src": "20302:52:62" - }, - "nativeSrc": "20302:67:62", - "nodeType": "YulFunctionCall", - "src": "20302:67:62" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "20289:6:62", - "nodeType": "YulIdentifier", - "src": "20289:6:62" - }, - "nativeSrc": "20289:81:62", - "nodeType": "YulFunctionCall", - "src": "20289:81:62" - }, - "nativeSrc": "20289:81:62", - "nodeType": "YulExpressionStatement", - "src": "20289:81:62" - } - ] - }, - "nativeSrc": "20138:242:62", - "nodeType": "YulCase", - "src": "20138:242:62", - "value": "default" - } - ], - "expression": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "19460:6:62", - "nodeType": "YulIdentifier", - "src": "19460:6:62" - }, - { - "kind": "number", - "nativeSrc": "19468:2:62", - "nodeType": "YulLiteral", - "src": "19468:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "19457:2:62", - "nodeType": "YulIdentifier", - "src": "19457:2:62" - }, - "nativeSrc": "19457:14:62", - "nodeType": "YulFunctionCall", - "src": "19457:14:62" - }, - "nativeSrc": "19450:930:62", - "nodeType": "YulSwitch", - "src": "19450:930:62" - } - ] - }, - "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage", - "nativeSrc": "19087:1299:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "slot", - "nativeSrc": "19168:4:62", - "nodeType": "YulTypedName", - "src": "19168:4:62", - "type": "" - }, - { - "name": "src", - "nativeSrc": "19174:3:62", - "nodeType": "YulTypedName", - "src": "19174:3:62", - "type": "" - } - ], - "src": "19087:1299:62" - }, - { - "body": { - "nativeSrc": "20520:259:62", - "nodeType": "YulBlock", - "src": "20520:259:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "20537:9:62", - "nodeType": "YulIdentifier", - "src": "20537:9:62" - }, - { - "kind": "number", - "nativeSrc": "20548:2:62", - "nodeType": "YulLiteral", - "src": "20548:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "20530:6:62", - "nodeType": "YulIdentifier", - "src": "20530:6:62" - }, - "nativeSrc": "20530:21:62", - "nodeType": "YulFunctionCall", - "src": "20530:21:62" - }, - "nativeSrc": "20530:21:62", - "nodeType": "YulExpressionStatement", - "src": "20530:21:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "20571:9:62", - "nodeType": "YulIdentifier", - "src": "20571:9:62" - }, - { - "kind": "number", - "nativeSrc": "20582:2:62", - "nodeType": "YulLiteral", - "src": "20582:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20567:3:62", - "nodeType": "YulIdentifier", - "src": "20567:3:62" - }, - "nativeSrc": "20567:18:62", - "nodeType": "YulFunctionCall", - "src": "20567:18:62" - }, - { - "name": "value1", - "nativeSrc": "20587:6:62", - "nodeType": "YulIdentifier", - "src": "20587:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "20560:6:62", - "nodeType": "YulIdentifier", - "src": "20560:6:62" - }, - "nativeSrc": "20560:34:62", - "nodeType": "YulFunctionCall", - "src": "20560:34:62" - }, - "nativeSrc": "20560:34:62", - "nodeType": "YulExpressionStatement", - "src": "20560:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "20620:9:62", - "nodeType": "YulIdentifier", - "src": "20620:9:62" - }, - { - "kind": "number", - "nativeSrc": "20631:2:62", - "nodeType": "YulLiteral", - "src": "20631:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20616:3:62", - "nodeType": "YulIdentifier", - "src": "20616:3:62" - }, - "nativeSrc": "20616:18:62", - "nodeType": "YulFunctionCall", - "src": "20616:18:62" - }, - { - "name": "value0", - "nativeSrc": "20636:6:62", - "nodeType": "YulIdentifier", - "src": "20636:6:62" - }, - { - "name": "value1", - "nativeSrc": "20644:6:62", - "nodeType": "YulIdentifier", - "src": "20644:6:62" - } - ], - "functionName": { - "name": "calldatacopy", - "nativeSrc": "20603:12:62", - "nodeType": "YulIdentifier", - "src": "20603:12:62" - }, - "nativeSrc": "20603:48:62", - "nodeType": "YulFunctionCall", - "src": "20603:48:62" - }, - "nativeSrc": "20603:48:62", - "nodeType": "YulExpressionStatement", - "src": "20603:48:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "20675:9:62", - "nodeType": "YulIdentifier", - "src": "20675:9:62" - }, - { - "name": "value1", - "nativeSrc": "20686:6:62", - "nodeType": "YulIdentifier", - "src": "20686:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20671:3:62", - "nodeType": "YulIdentifier", - "src": "20671:3:62" - }, - "nativeSrc": "20671:22:62", - "nodeType": "YulFunctionCall", - "src": "20671:22:62" - }, - { - "kind": "number", - "nativeSrc": "20695:2:62", - "nodeType": "YulLiteral", - "src": "20695:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20667:3:62", - "nodeType": "YulIdentifier", - "src": "20667:3:62" - }, - "nativeSrc": "20667:31:62", - "nodeType": "YulFunctionCall", - "src": "20667:31:62" - }, - { - "kind": "number", - "nativeSrc": "20700:1:62", - "nodeType": "YulLiteral", - "src": "20700:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "20660:6:62", - "nodeType": "YulIdentifier", - "src": "20660:6:62" - }, - "nativeSrc": "20660:42:62", - "nodeType": "YulFunctionCall", - "src": "20660:42:62" - }, - "nativeSrc": "20660:42:62", - "nodeType": "YulExpressionStatement", - "src": "20660:42:62" - }, - { - "nativeSrc": "20711:62:62", - "nodeType": "YulAssignment", - "src": "20711:62:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "20727:9:62", - "nodeType": "YulIdentifier", - "src": "20727:9:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "20746:6:62", - "nodeType": "YulIdentifier", - "src": "20746:6:62" - }, - { - "kind": "number", - "nativeSrc": "20754:2:62", - "nodeType": "YulLiteral", - "src": "20754:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20742:3:62", - "nodeType": "YulIdentifier", - "src": "20742:3:62" - }, - "nativeSrc": "20742:15:62", - "nodeType": "YulFunctionCall", - "src": "20742:15:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20763:2:62", - "nodeType": "YulLiteral", - "src": "20763:2:62", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "20759:3:62", - "nodeType": "YulIdentifier", - "src": "20759:3:62" - }, - "nativeSrc": "20759:7:62", - "nodeType": "YulFunctionCall", - "src": "20759:7:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "20738:3:62", - "nodeType": "YulIdentifier", - "src": "20738:3:62" - }, - "nativeSrc": "20738:29:62", - "nodeType": "YulFunctionCall", - "src": "20738:29:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20723:3:62", - "nodeType": "YulIdentifier", - "src": "20723:3:62" - }, - "nativeSrc": "20723:45:62", - "nodeType": "YulFunctionCall", - "src": "20723:45:62" - }, - { - "kind": "number", - "nativeSrc": "20770:2:62", - "nodeType": "YulLiteral", - "src": "20770:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20719:3:62", - "nodeType": "YulIdentifier", - "src": "20719:3:62" - }, - "nativeSrc": "20719:54:62", - "nodeType": "YulFunctionCall", - "src": "20719:54:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "20711:4:62", - "nodeType": "YulIdentifier", - "src": "20711:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "20391:388:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "20481:9:62", - "nodeType": "YulTypedName", - "src": "20481:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "20492:6:62", - "nodeType": "YulTypedName", - "src": "20492:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "20500:6:62", - "nodeType": "YulTypedName", - "src": "20500:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "20511:4:62", - "nodeType": "YulTypedName", - "src": "20511:4:62", - "type": "" - } - ], - "src": "20391:388:62" - }, - { - "body": { - "nativeSrc": "20862:177:62", - "nodeType": "YulBlock", - "src": "20862:177:62", - "statements": [ - { - "body": { - "nativeSrc": "20908:16:62", - "nodeType": "YulBlock", - "src": "20908:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20917:1:62", - "nodeType": "YulLiteral", - "src": "20917:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20920:1:62", - "nodeType": "YulLiteral", - "src": "20920:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20910:6:62", - "nodeType": "YulIdentifier", - "src": "20910:6:62" - }, - "nativeSrc": "20910:12:62", - "nodeType": "YulFunctionCall", - "src": "20910:12:62" - }, - "nativeSrc": "20910:12:62", - "nodeType": "YulExpressionStatement", - "src": "20910:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "20883:7:62", - "nodeType": "YulIdentifier", - "src": "20883:7:62" - }, - { - "name": "headStart", - "nativeSrc": "20892:9:62", - "nodeType": "YulIdentifier", - "src": "20892:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "20879:3:62", - "nodeType": "YulIdentifier", - "src": "20879:3:62" - }, - "nativeSrc": "20879:23:62", - "nodeType": "YulFunctionCall", - "src": "20879:23:62" - }, - { - "kind": "number", - "nativeSrc": "20904:2:62", - "nodeType": "YulLiteral", - "src": "20904:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "20875:3:62", - "nodeType": "YulIdentifier", - "src": "20875:3:62" - }, - "nativeSrc": "20875:32:62", - "nodeType": "YulFunctionCall", - "src": "20875:32:62" - }, - "nativeSrc": "20872:52:62", - "nodeType": "YulIf", - "src": "20872:52:62" - }, - { - "nativeSrc": "20933:36:62", - "nodeType": "YulVariableDeclaration", - "src": "20933:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "20959:9:62", - "nodeType": "YulIdentifier", - "src": "20959:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "20946:12:62", - "nodeType": "YulIdentifier", - "src": "20946:12:62" - }, - "nativeSrc": "20946:23:62", - "nodeType": "YulFunctionCall", - "src": "20946:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "20937:5:62", - "nodeType": "YulTypedName", - "src": "20937:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "21003:5:62", - "nodeType": "YulIdentifier", - "src": "21003:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "20978:24:62", - "nodeType": "YulIdentifier", - "src": "20978:24:62" - }, - "nativeSrc": "20978:31:62", - "nodeType": "YulFunctionCall", - "src": "20978:31:62" - }, - "nativeSrc": "20978:31:62", - "nodeType": "YulExpressionStatement", - "src": "20978:31:62" - }, - { - "nativeSrc": "21018:15:62", - "nodeType": "YulAssignment", - "src": "21018:15:62", - "value": { - "name": "value", - "nativeSrc": "21028:5:62", - "nodeType": "YulIdentifier", - "src": "21028:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "21018:6:62", - "nodeType": "YulIdentifier", - "src": "21018:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_payable", - "nativeSrc": "20784:255:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "20828:9:62", - "nodeType": "YulTypedName", - "src": "20828:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "20839:7:62", - "nodeType": "YulTypedName", - "src": "20839:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "20851:6:62", - "nodeType": "YulTypedName", - "src": "20851:6:62", - "type": "" - } - ], - "src": "20784:255:62" - }, - { - "body": { - "nativeSrc": "21218:171:62", - "nodeType": "YulBlock", - "src": "21218:171:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21235:9:62", - "nodeType": "YulIdentifier", - "src": "21235:9:62" - }, - { - "kind": "number", - "nativeSrc": "21246:2:62", - "nodeType": "YulLiteral", - "src": "21246:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21228:6:62", - "nodeType": "YulIdentifier", - "src": "21228:6:62" - }, - "nativeSrc": "21228:21:62", - "nodeType": "YulFunctionCall", - "src": "21228:21:62" - }, - "nativeSrc": "21228:21:62", - "nodeType": "YulExpressionStatement", - "src": "21228:21:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21269:9:62", - "nodeType": "YulIdentifier", - "src": "21269:9:62" - }, - { - "kind": "number", - "nativeSrc": "21280:2:62", - "nodeType": "YulLiteral", - "src": "21280:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21265:3:62", - "nodeType": "YulIdentifier", - "src": "21265:3:62" - }, - "nativeSrc": "21265:18:62", - "nodeType": "YulFunctionCall", - "src": "21265:18:62" - }, - { - "kind": "number", - "nativeSrc": "21285:2:62", - "nodeType": "YulLiteral", - "src": "21285:2:62", - "type": "", - "value": "21" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21258:6:62", - "nodeType": "YulIdentifier", - "src": "21258:6:62" - }, - "nativeSrc": "21258:30:62", - "nodeType": "YulFunctionCall", - "src": "21258:30:62" - }, - "nativeSrc": "21258:30:62", - "nodeType": "YulExpressionStatement", - "src": "21258:30:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21308:9:62", - "nodeType": "YulIdentifier", - "src": "21308:9:62" - }, - { - "kind": "number", - "nativeSrc": "21319:2:62", - "nodeType": "YulLiteral", - "src": "21319:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21304:3:62", - "nodeType": "YulIdentifier", - "src": "21304:3:62" - }, - "nativeSrc": "21304:18:62", - "nodeType": "YulFunctionCall", - "src": "21304:18:62" - }, - { - "hexValue": "4549503731323a20556e696e697469616c697a6564", - "kind": "string", - "nativeSrc": "21324:23:62", - "nodeType": "YulLiteral", - "src": "21324:23:62", - "type": "", - "value": "EIP712: Uninitialized" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21297:6:62", - "nodeType": "YulIdentifier", - "src": "21297:6:62" - }, - "nativeSrc": "21297:51:62", - "nodeType": "YulFunctionCall", - "src": "21297:51:62" - }, - "nativeSrc": "21297:51:62", - "nodeType": "YulExpressionStatement", - "src": "21297:51:62" - }, - { - "nativeSrc": "21357:26:62", - "nodeType": "YulAssignment", - "src": "21357:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21369:9:62", - "nodeType": "YulIdentifier", - "src": "21369:9:62" - }, - { - "kind": "number", - "nativeSrc": "21380:2:62", - "nodeType": "YulLiteral", - "src": "21380:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21365:3:62", - "nodeType": "YulIdentifier", - "src": "21365:3:62" - }, - "nativeSrc": "21365:18:62", - "nodeType": "YulFunctionCall", - "src": "21365:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "21357:4:62", - "nodeType": "YulIdentifier", - "src": "21357:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade__to_t_string_memory_ptr__fromStack_reversed", - "nativeSrc": "21044:345:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "21195:9:62", - "nodeType": "YulTypedName", - "src": "21195:9:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "21209:4:62", - "nodeType": "YulTypedName", - "src": "21209:4:62", - "type": "" - } - ], - "src": "21044:345:62" - }, - { - "body": { - "nativeSrc": "21426:95:62", - "nodeType": "YulBlock", - "src": "21426:95:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21443:1:62", - "nodeType": "YulLiteral", - "src": "21443:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21450:3:62", - "nodeType": "YulLiteral", - "src": "21450:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "21455:10:62", - "nodeType": "YulLiteral", - "src": "21455:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "21446:3:62", - "nodeType": "YulIdentifier", - "src": "21446:3:62" - }, - "nativeSrc": "21446:20:62", - "nodeType": "YulFunctionCall", - "src": "21446:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21436:6:62", - "nodeType": "YulIdentifier", - "src": "21436:6:62" - }, - "nativeSrc": "21436:31:62", - "nodeType": "YulFunctionCall", - "src": "21436:31:62" - }, - "nativeSrc": "21436:31:62", - "nodeType": "YulExpressionStatement", - "src": "21436:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21483:1:62", - "nodeType": "YulLiteral", - "src": "21483:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "21486:4:62", - "nodeType": "YulLiteral", - "src": "21486:4:62", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21476:6:62", - "nodeType": "YulIdentifier", - "src": "21476:6:62" - }, - "nativeSrc": "21476:15:62", - "nodeType": "YulFunctionCall", - "src": "21476:15:62" - }, - "nativeSrc": "21476:15:62", - "nodeType": "YulExpressionStatement", - "src": "21476:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21507:1:62", - "nodeType": "YulLiteral", - "src": "21507:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "21510:4:62", - "nodeType": "YulLiteral", - "src": "21510:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "21500:6:62", - "nodeType": "YulIdentifier", - "src": "21500:6:62" - }, - "nativeSrc": "21500:15:62", - "nodeType": "YulFunctionCall", - "src": "21500:15:62" - }, - "nativeSrc": "21500:15:62", - "nodeType": "YulExpressionStatement", - "src": "21500:15:62" - } - ] - }, - "name": "panic_error_0x11", - "nativeSrc": "21394:127:62", - "nodeType": "YulFunctionDefinition", - "src": "21394:127:62" - }, - { - "body": { - "nativeSrc": "21575:79:62", - "nodeType": "YulBlock", - "src": "21575:79:62", - "statements": [ - { - "nativeSrc": "21585:17:62", - "nodeType": "YulAssignment", - "src": "21585:17:62", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "21597:1:62", - "nodeType": "YulIdentifier", - "src": "21597:1:62" - }, - { - "name": "y", - "nativeSrc": "21600:1:62", - "nodeType": "YulIdentifier", - "src": "21600:1:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "21593:3:62", - "nodeType": "YulIdentifier", - "src": "21593:3:62" - }, - "nativeSrc": "21593:9:62", - "nodeType": "YulFunctionCall", - "src": "21593:9:62" - }, - "variableNames": [ - { - "name": "diff", - "nativeSrc": "21585:4:62", - "nodeType": "YulIdentifier", - "src": "21585:4:62" - } - ] - }, - { - "body": { - "nativeSrc": "21626:22:62", - "nodeType": "YulBlock", - "src": "21626:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "21628:16:62", - "nodeType": "YulIdentifier", - "src": "21628:16:62" - }, - "nativeSrc": "21628:18:62", - "nodeType": "YulFunctionCall", - "src": "21628:18:62" - }, - "nativeSrc": "21628:18:62", - "nodeType": "YulExpressionStatement", - "src": "21628:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nativeSrc": "21617:4:62", - "nodeType": "YulIdentifier", - "src": "21617:4:62" - }, - { - "name": "x", - "nativeSrc": "21623:1:62", - "nodeType": "YulIdentifier", - "src": "21623:1:62" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "21614:2:62", - "nodeType": "YulIdentifier", - "src": "21614:2:62" - }, - "nativeSrc": "21614:11:62", - "nodeType": "YulFunctionCall", - "src": "21614:11:62" - }, - "nativeSrc": "21611:37:62", - "nodeType": "YulIf", - "src": "21611:37:62" - } - ] - }, - "name": "checked_sub_t_uint256", - "nativeSrc": "21526:128:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "21557:1:62", - "nodeType": "YulTypedName", - "src": "21557:1:62", - "type": "" - }, - { - "name": "y", - "nativeSrc": "21560:1:62", - "nodeType": "YulTypedName", - "src": "21560:1:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nativeSrc": "21566:4:62", - "nodeType": "YulTypedName", - "src": "21566:4:62", - "type": "" - } - ], - "src": "21526:128:62" - }, - { - "body": { - "nativeSrc": "21789:201:62", - "nodeType": "YulBlock", - "src": "21789:201:62", - "statements": [ - { - "body": { - "nativeSrc": "21827:16:62", - "nodeType": "YulBlock", - "src": "21827:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21836:1:62", - "nodeType": "YulLiteral", - "src": "21836:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "21839:1:62", - "nodeType": "YulLiteral", - "src": "21839:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "21829:6:62", - "nodeType": "YulIdentifier", - "src": "21829:6:62" - }, - "nativeSrc": "21829:12:62", - "nodeType": "YulFunctionCall", - "src": "21829:12:62" - }, - "nativeSrc": "21829:12:62", - "nodeType": "YulExpressionStatement", - "src": "21829:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "21805:10:62", - "nodeType": "YulIdentifier", - "src": "21805:10:62" - }, - { - "name": "endIndex", - "nativeSrc": "21817:8:62", - "nodeType": "YulIdentifier", - "src": "21817:8:62" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "21802:2:62", - "nodeType": "YulIdentifier", - "src": "21802:2:62" - }, - "nativeSrc": "21802:24:62", - "nodeType": "YulFunctionCall", - "src": "21802:24:62" - }, - "nativeSrc": "21799:44:62", - "nodeType": "YulIf", - "src": "21799:44:62" - }, - { - "body": { - "nativeSrc": "21876:16:62", - "nodeType": "YulBlock", - "src": "21876:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21885:1:62", - "nodeType": "YulLiteral", - "src": "21885:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "21888:1:62", - "nodeType": "YulLiteral", - "src": "21888:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "21878:6:62", - "nodeType": "YulIdentifier", - "src": "21878:6:62" - }, - "nativeSrc": "21878:12:62", - "nodeType": "YulFunctionCall", - "src": "21878:12:62" - }, - "nativeSrc": "21878:12:62", - "nodeType": "YulExpressionStatement", - "src": "21878:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "endIndex", - "nativeSrc": "21858:8:62", - "nodeType": "YulIdentifier", - "src": "21858:8:62" - }, - { - "name": "length", - "nativeSrc": "21868:6:62", - "nodeType": "YulIdentifier", - "src": "21868:6:62" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "21855:2:62", - "nodeType": "YulIdentifier", - "src": "21855:2:62" - }, - "nativeSrc": "21855:20:62", - "nodeType": "YulFunctionCall", - "src": "21855:20:62" - }, - "nativeSrc": "21852:40:62", - "nodeType": "YulIf", - "src": "21852:40:62" - }, - { - "nativeSrc": "21901:36:62", - "nodeType": "YulAssignment", - "src": "21901:36:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "21918:6:62", - "nodeType": "YulIdentifier", - "src": "21918:6:62" - }, - { - "name": "startIndex", - "nativeSrc": "21926:10:62", - "nodeType": "YulIdentifier", - "src": "21926:10:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21914:3:62", - "nodeType": "YulIdentifier", - "src": "21914:3:62" - }, - "nativeSrc": "21914:23:62", - "nodeType": "YulFunctionCall", - "src": "21914:23:62" - }, - "variableNames": [ - { - "name": "offsetOut", - "nativeSrc": "21901:9:62", - "nodeType": "YulIdentifier", - "src": "21901:9:62" - } - ] - }, - { - "nativeSrc": "21946:38:62", - "nodeType": "YulAssignment", - "src": "21946:38:62", - "value": { - "arguments": [ - { - "name": "endIndex", - "nativeSrc": "21963:8:62", - "nodeType": "YulIdentifier", - "src": "21963:8:62" - }, - { - "name": "startIndex", - "nativeSrc": "21973:10:62", - "nodeType": "YulIdentifier", - "src": "21973:10:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "21959:3:62", - "nodeType": "YulIdentifier", - "src": "21959:3:62" - }, - "nativeSrc": "21959:25:62", - "nodeType": "YulFunctionCall", - "src": "21959:25:62" - }, - "variableNames": [ - { - "name": "lengthOut", - "nativeSrc": "21946:9:62", - "nodeType": "YulIdentifier", - "src": "21946:9:62" - } - ] - } - ] - }, - "name": "calldata_array_index_range_access_t_bytes_calldata_ptr", - "nativeSrc": "21659:331:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "21723:6:62", - "nodeType": "YulTypedName", - "src": "21723:6:62", - "type": "" - }, - { - "name": "length", - "nativeSrc": "21731:6:62", - "nodeType": "YulTypedName", - "src": "21731:6:62", - "type": "" - }, - { - "name": "startIndex", - "nativeSrc": "21739:10:62", - "nodeType": "YulTypedName", - "src": "21739:10:62", - "type": "" - }, - { - "name": "endIndex", - "nativeSrc": "21751:8:62", - "nodeType": "YulTypedName", - "src": "21751:8:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "offsetOut", - "nativeSrc": "21764:9:62", - "nodeType": "YulTypedName", - "src": "21764:9:62", - "type": "" - }, - { - "name": "lengthOut", - "nativeSrc": "21775:9:62", - "nodeType": "YulTypedName", - "src": "21775:9:62", - "type": "" - } - ], - "src": "21659:331:62" - }, - { - "body": { - "nativeSrc": "22027:95:62", - "nodeType": "YulBlock", - "src": "22027:95:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22044:1:62", - "nodeType": "YulLiteral", - "src": "22044:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22051:3:62", - "nodeType": "YulLiteral", - "src": "22051:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "22056:10:62", - "nodeType": "YulLiteral", - "src": "22056:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "22047:3:62", - "nodeType": "YulIdentifier", - "src": "22047:3:62" - }, - "nativeSrc": "22047:20:62", - "nodeType": "YulFunctionCall", - "src": "22047:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22037:6:62", - "nodeType": "YulIdentifier", - "src": "22037:6:62" - }, - "nativeSrc": "22037:31:62", - "nodeType": "YulFunctionCall", - "src": "22037:31:62" - }, - "nativeSrc": "22037:31:62", - "nodeType": "YulExpressionStatement", - "src": "22037:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22084:1:62", - "nodeType": "YulLiteral", - "src": "22084:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "22087:4:62", - "nodeType": "YulLiteral", - "src": "22087:4:62", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22077:6:62", - "nodeType": "YulIdentifier", - "src": "22077:6:62" - }, - "nativeSrc": "22077:15:62", - "nodeType": "YulFunctionCall", - "src": "22077:15:62" - }, - "nativeSrc": "22077:15:62", - "nodeType": "YulExpressionStatement", - "src": "22077:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22108:1:62", - "nodeType": "YulLiteral", - "src": "22108:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22111:4:62", - "nodeType": "YulLiteral", - "src": "22111:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22101:6:62", - "nodeType": "YulIdentifier", - "src": "22101:6:62" - }, - "nativeSrc": "22101:15:62", - "nodeType": "YulFunctionCall", - "src": "22101:15:62" - }, - "nativeSrc": "22101:15:62", - "nodeType": "YulExpressionStatement", - "src": "22101:15:62" - } - ] - }, - "name": "panic_error_0x32", - "nativeSrc": "21995:127:62", - "nodeType": "YulFunctionDefinition", - "src": "21995:127:62" - }, - { - "body": { - "nativeSrc": "22221:427:62", - "nodeType": "YulBlock", - "src": "22221:427:62", - "statements": [ - { - "nativeSrc": "22231:51:62", - "nodeType": "YulVariableDeclaration", - "src": "22231:51:62", - "value": { - "arguments": [ - { - "name": "ptr_to_tail", - "nativeSrc": "22270:11:62", - "nodeType": "YulIdentifier", - "src": "22270:11:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "22257:12:62", - "nodeType": "YulIdentifier", - "src": "22257:12:62" - }, - "nativeSrc": "22257:25:62", - "nodeType": "YulFunctionCall", - "src": "22257:25:62" - }, - "variables": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "22235:18:62", - "nodeType": "YulTypedName", - "src": "22235:18:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "22371:16:62", - "nodeType": "YulBlock", - "src": "22371:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22380:1:62", - "nodeType": "YulLiteral", - "src": "22380:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22383:1:62", - "nodeType": "YulLiteral", - "src": "22383:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22373:6:62", - "nodeType": "YulIdentifier", - "src": "22373:6:62" - }, - "nativeSrc": "22373:12:62", - "nodeType": "YulFunctionCall", - "src": "22373:12:62" - }, - "nativeSrc": "22373:12:62", - "nodeType": "YulExpressionStatement", - "src": "22373:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "22305:18:62", - "nodeType": "YulIdentifier", - "src": "22305:18:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "22333:12:62", - "nodeType": "YulIdentifier", - "src": "22333:12:62" - }, - "nativeSrc": "22333:14:62", - "nodeType": "YulFunctionCall", - "src": "22333:14:62" - }, - { - "name": "base_ref", - "nativeSrc": "22349:8:62", - "nodeType": "YulIdentifier", - "src": "22349:8:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "22329:3:62", - "nodeType": "YulIdentifier", - "src": "22329:3:62" - }, - "nativeSrc": "22329:29:62", - "nodeType": "YulFunctionCall", - "src": "22329:29:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22364:2:62", - "nodeType": "YulLiteral", - "src": "22364:2:62", - "type": "", - "value": "30" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "22360:3:62", - "nodeType": "YulIdentifier", - "src": "22360:3:62" - }, - "nativeSrc": "22360:7:62", - "nodeType": "YulFunctionCall", - "src": "22360:7:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22325:3:62", - "nodeType": "YulIdentifier", - "src": "22325:3:62" - }, - "nativeSrc": "22325:43:62", - "nodeType": "YulFunctionCall", - "src": "22325:43:62" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "22301:3:62", - "nodeType": "YulIdentifier", - "src": "22301:3:62" - }, - "nativeSrc": "22301:68:62", - "nodeType": "YulFunctionCall", - "src": "22301:68:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "22294:6:62", - "nodeType": "YulIdentifier", - "src": "22294:6:62" - }, - "nativeSrc": "22294:76:62", - "nodeType": "YulFunctionCall", - "src": "22294:76:62" - }, - "nativeSrc": "22291:96:62", - "nodeType": "YulIf", - "src": "22291:96:62" - }, - { - "nativeSrc": "22396:47:62", - "nodeType": "YulVariableDeclaration", - "src": "22396:47:62", - "value": { - "arguments": [ - { - "name": "base_ref", - "nativeSrc": "22414:8:62", - "nodeType": "YulIdentifier", - "src": "22414:8:62" - }, - { - "name": "rel_offset_of_tail", - "nativeSrc": "22424:18:62", - "nodeType": "YulIdentifier", - "src": "22424:18:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22410:3:62", - "nodeType": "YulIdentifier", - "src": "22410:3:62" - }, - "nativeSrc": "22410:33:62", - "nodeType": "YulFunctionCall", - "src": "22410:33:62" - }, - "variables": [ - { - "name": "addr_1", - "nativeSrc": "22400:6:62", - "nodeType": "YulTypedName", - "src": "22400:6:62", - "type": "" - } - ] - }, - { - "nativeSrc": "22452:30:62", - "nodeType": "YulAssignment", - "src": "22452:30:62", - "value": { - "arguments": [ - { - "name": "addr_1", - "nativeSrc": "22475:6:62", - "nodeType": "YulIdentifier", - "src": "22475:6:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "22462:12:62", - "nodeType": "YulIdentifier", - "src": "22462:12:62" - }, - "nativeSrc": "22462:20:62", - "nodeType": "YulFunctionCall", - "src": "22462:20:62" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "22452:6:62", - "nodeType": "YulIdentifier", - "src": "22452:6:62" - } - ] - }, - { - "body": { - "nativeSrc": "22525:16:62", - "nodeType": "YulBlock", - "src": "22525:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22534:1:62", - "nodeType": "YulLiteral", - "src": "22534:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22537:1:62", - "nodeType": "YulLiteral", - "src": "22537:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22527:6:62", - "nodeType": "YulIdentifier", - "src": "22527:6:62" - }, - "nativeSrc": "22527:12:62", - "nodeType": "YulFunctionCall", - "src": "22527:12:62" - }, - "nativeSrc": "22527:12:62", - "nodeType": "YulExpressionStatement", - "src": "22527:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "22497:6:62", - "nodeType": "YulIdentifier", - "src": "22497:6:62" - }, - { - "kind": "number", - "nativeSrc": "22505:18:62", - "nodeType": "YulLiteral", - "src": "22505:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "22494:2:62", - "nodeType": "YulIdentifier", - "src": "22494:2:62" - }, - "nativeSrc": "22494:30:62", - "nodeType": "YulFunctionCall", - "src": "22494:30:62" - }, - "nativeSrc": "22491:50:62", - "nodeType": "YulIf", - "src": "22491:50:62" - }, - { - "nativeSrc": "22550:25:62", - "nodeType": "YulAssignment", - "src": "22550:25:62", - "value": { - "arguments": [ - { - "name": "addr_1", - "nativeSrc": "22562:6:62", - "nodeType": "YulIdentifier", - "src": "22562:6:62" - }, - { - "kind": "number", - "nativeSrc": "22570:4:62", - "nodeType": "YulLiteral", - "src": "22570:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22558:3:62", - "nodeType": "YulIdentifier", - "src": "22558:3:62" - }, - "nativeSrc": "22558:17:62", - "nodeType": "YulFunctionCall", - "src": "22558:17:62" - }, - "variableNames": [ - { - "name": "addr", - "nativeSrc": "22550:4:62", - "nodeType": "YulIdentifier", - "src": "22550:4:62" - } - ] - }, - { - "body": { - "nativeSrc": "22626:16:62", - "nodeType": "YulBlock", - "src": "22626:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22635:1:62", - "nodeType": "YulLiteral", - "src": "22635:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22638:1:62", - "nodeType": "YulLiteral", - "src": "22638:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22628:6:62", - "nodeType": "YulIdentifier", - "src": "22628:6:62" - }, - "nativeSrc": "22628:12:62", - "nodeType": "YulFunctionCall", - "src": "22628:12:62" - }, - "nativeSrc": "22628:12:62", - "nodeType": "YulExpressionStatement", - "src": "22628:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "addr", - "nativeSrc": "22591:4:62", - "nodeType": "YulIdentifier", - "src": "22591:4:62" - }, - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "22601:12:62", - "nodeType": "YulIdentifier", - "src": "22601:12:62" - }, - "nativeSrc": "22601:14:62", - "nodeType": "YulFunctionCall", - "src": "22601:14:62" - }, - { - "name": "length", - "nativeSrc": "22617:6:62", - "nodeType": "YulIdentifier", - "src": "22617:6:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "22597:3:62", - "nodeType": "YulIdentifier", - "src": "22597:3:62" - }, - "nativeSrc": "22597:27:62", - "nodeType": "YulFunctionCall", - "src": "22597:27:62" - } - ], - "functionName": { - "name": "sgt", - "nativeSrc": "22587:3:62", - "nodeType": "YulIdentifier", - "src": "22587:3:62" - }, - "nativeSrc": "22587:38:62", - "nodeType": "YulFunctionCall", - "src": "22587:38:62" - }, - "nativeSrc": "22584:58:62", - "nodeType": "YulIf", - "src": "22584:58:62" - } - ] - }, - "name": "access_calldata_tail_t_bytes_calldata_ptr", - "nativeSrc": "22127:521:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base_ref", - "nativeSrc": "22178:8:62", - "nodeType": "YulTypedName", - "src": "22178:8:62", - "type": "" - }, - { - "name": "ptr_to_tail", - "nativeSrc": "22188:11:62", - "nodeType": "YulTypedName", - "src": "22188:11:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "addr", - "nativeSrc": "22204:4:62", - "nodeType": "YulTypedName", - "src": "22204:4:62", - "type": "" - }, - { - "name": "length", - "nativeSrc": "22210:6:62", - "nodeType": "YulTypedName", - "src": "22210:6:62", - "type": "" - } - ], - "src": "22127:521:62" - }, - { - "body": { - "nativeSrc": "22846:247:62", - "nodeType": "YulBlock", - "src": "22846:247:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "22869:3:62", - "nodeType": "YulIdentifier", - "src": "22869:3:62" - }, - { - "name": "value0", - "nativeSrc": "22874:6:62", - "nodeType": "YulIdentifier", - "src": "22874:6:62" - }, - { - "name": "value1", - "nativeSrc": "22882:6:62", - "nodeType": "YulIdentifier", - "src": "22882:6:62" - } - ], - "functionName": { - "name": "calldatacopy", - "nativeSrc": "22856:12:62", - "nodeType": "YulIdentifier", - "src": "22856:12:62" - }, - "nativeSrc": "22856:33:62", - "nodeType": "YulFunctionCall", - "src": "22856:33:62" - }, - "nativeSrc": "22856:33:62", - "nodeType": "YulExpressionStatement", - "src": "22856:33:62" - }, - { - "nativeSrc": "22898:26:62", - "nodeType": "YulVariableDeclaration", - "src": "22898:26:62", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "22912:3:62", - "nodeType": "YulIdentifier", - "src": "22912:3:62" - }, - { - "name": "value1", - "nativeSrc": "22917:6:62", - "nodeType": "YulIdentifier", - "src": "22917:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22908:3:62", - "nodeType": "YulIdentifier", - "src": "22908:3:62" - }, - "nativeSrc": "22908:16:62", - "nodeType": "YulFunctionCall", - "src": "22908:16:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "22902:2:62", - "nodeType": "YulTypedName", - "src": "22902:2:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "22940:2:62", - "nodeType": "YulIdentifier", - "src": "22940:2:62" - }, - { - "kind": "number", - "nativeSrc": "22944:1:62", - "nodeType": "YulLiteral", - "src": "22944:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22933:6:62", - "nodeType": "YulIdentifier", - "src": "22933:6:62" - }, - "nativeSrc": "22933:13:62", - "nodeType": "YulFunctionCall", - "src": "22933:13:62" - }, - "nativeSrc": "22933:13:62", - "nodeType": "YulExpressionStatement", - "src": "22933:13:62" - }, - { - "nativeSrc": "22955:27:62", - "nodeType": "YulVariableDeclaration", - "src": "22955:27:62", - "value": { - "arguments": [ - { - "name": "value2", - "nativeSrc": "22975:6:62", - "nodeType": "YulIdentifier", - "src": "22975:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "22969:5:62", - "nodeType": "YulIdentifier", - "src": "22969:5:62" - }, - "nativeSrc": "22969:13:62", - "nodeType": "YulFunctionCall", - "src": "22969:13:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "22959:6:62", - "nodeType": "YulTypedName", - "src": "22959:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value2", - "nativeSrc": "23030:6:62", - "nodeType": "YulIdentifier", - "src": "23030:6:62" - }, - { - "kind": "number", - "nativeSrc": "23038:4:62", - "nodeType": "YulLiteral", - "src": "23038:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23026:3:62", - "nodeType": "YulIdentifier", - "src": "23026:3:62" - }, - "nativeSrc": "23026:17:62", - "nodeType": "YulFunctionCall", - "src": "23026:17:62" - }, - { - "name": "_1", - "nativeSrc": "23045:2:62", - "nodeType": "YulIdentifier", - "src": "23045:2:62" - }, - { - "name": "length", - "nativeSrc": "23049:6:62", - "nodeType": "YulIdentifier", - "src": "23049:6:62" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "22991:34:62", - "nodeType": "YulIdentifier", - "src": "22991:34:62" - }, - "nativeSrc": "22991:65:62", - "nodeType": "YulFunctionCall", - "src": "22991:65:62" - }, - "nativeSrc": "22991:65:62", - "nodeType": "YulExpressionStatement", - "src": "22991:65:62" - }, - { - "nativeSrc": "23065:22:62", - "nodeType": "YulAssignment", - "src": "23065:22:62", - "value": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "23076:2:62", - "nodeType": "YulIdentifier", - "src": "23076:2:62" - }, - { - "name": "length", - "nativeSrc": "23080:6:62", - "nodeType": "YulIdentifier", - "src": "23080:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23072:3:62", - "nodeType": "YulIdentifier", - "src": "23072:3:62" - }, - "nativeSrc": "23072:15:62", - "nodeType": "YulFunctionCall", - "src": "23072:15:62" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "23065:3:62", - "nodeType": "YulIdentifier", - "src": "23065:3:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_calldata_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "22653:440:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "22806:3:62", - "nodeType": "YulTypedName", - "src": "22806:3:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "22811:6:62", - "nodeType": "YulTypedName", - "src": "22811:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "22819:6:62", - "nodeType": "YulTypedName", - "src": "22819:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "22827:6:62", - "nodeType": "YulTypedName", - "src": "22827:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "22838:3:62", - "nodeType": "YulTypedName", - "src": "22838:3:62", - "type": "" - } - ], - "src": "22653:440:62" - }, - { - "body": { - "nativeSrc": "23130:95:62", - "nodeType": "YulBlock", - "src": "23130:95:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23147:1:62", - "nodeType": "YulLiteral", - "src": "23147:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23154:3:62", - "nodeType": "YulLiteral", - "src": "23154:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "23159:10:62", - "nodeType": "YulLiteral", - "src": "23159:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "23150:3:62", - "nodeType": "YulIdentifier", - "src": "23150:3:62" - }, - "nativeSrc": "23150:20:62", - "nodeType": "YulFunctionCall", - "src": "23150:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23140:6:62", - "nodeType": "YulIdentifier", - "src": "23140:6:62" - }, - "nativeSrc": "23140:31:62", - "nodeType": "YulFunctionCall", - "src": "23140:31:62" - }, - "nativeSrc": "23140:31:62", - "nodeType": "YulExpressionStatement", - "src": "23140:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23187:1:62", - "nodeType": "YulLiteral", - "src": "23187:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "23190:4:62", - "nodeType": "YulLiteral", - "src": "23190:4:62", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23180:6:62", - "nodeType": "YulIdentifier", - "src": "23180:6:62" - }, - "nativeSrc": "23180:15:62", - "nodeType": "YulFunctionCall", - "src": "23180:15:62" - }, - "nativeSrc": "23180:15:62", - "nodeType": "YulExpressionStatement", - "src": "23180:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23211:1:62", - "nodeType": "YulLiteral", - "src": "23211:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "23214:4:62", - "nodeType": "YulLiteral", - "src": "23214:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "23204:6:62", - "nodeType": "YulIdentifier", - "src": "23204:6:62" - }, - "nativeSrc": "23204:15:62", - "nodeType": "YulFunctionCall", - "src": "23204:15:62" - }, - "nativeSrc": "23204:15:62", - "nodeType": "YulExpressionStatement", - "src": "23204:15:62" - } - ] - }, - "name": "panic_error_0x21", - "nativeSrc": "23098:127:62", - "nodeType": "YulFunctionDefinition", - "src": "23098:127:62" - }, - { - "body": { - "nativeSrc": "23274:85:62", - "nodeType": "YulBlock", - "src": "23274:85:62", - "statements": [ - { - "body": { - "nativeSrc": "23337:16:62", - "nodeType": "YulBlock", - "src": "23337:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23346:1:62", - "nodeType": "YulLiteral", - "src": "23346:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "23349:1:62", - "nodeType": "YulLiteral", - "src": "23349:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "23339:6:62", - "nodeType": "YulIdentifier", - "src": "23339:6:62" - }, - "nativeSrc": "23339:12:62", - "nodeType": "YulFunctionCall", - "src": "23339:12:62" - }, - "nativeSrc": "23339:12:62", - "nodeType": "YulExpressionStatement", - "src": "23339:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "23297:5:62", - "nodeType": "YulIdentifier", - "src": "23297:5:62" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "23308:5:62", - "nodeType": "YulIdentifier", - "src": "23308:5:62" - }, - { - "kind": "number", - "nativeSrc": "23315:18:62", - "nodeType": "YulLiteral", - "src": "23315:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "23304:3:62", - "nodeType": "YulIdentifier", - "src": "23304:3:62" - }, - "nativeSrc": "23304:30:62", - "nodeType": "YulFunctionCall", - "src": "23304:30:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "23294:2:62", - "nodeType": "YulIdentifier", - "src": "23294:2:62" - }, - "nativeSrc": "23294:41:62", - "nodeType": "YulFunctionCall", - "src": "23294:41:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "23287:6:62", - "nodeType": "YulIdentifier", - "src": "23287:6:62" - }, - "nativeSrc": "23287:49:62", - "nodeType": "YulFunctionCall", - "src": "23287:49:62" - }, - "nativeSrc": "23284:69:62", - "nodeType": "YulIf", - "src": "23284:69:62" - } - ] - }, - "name": "validator_revert_uint64", - "nativeSrc": "23230:129:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "23263:5:62", - "nodeType": "YulTypedName", - "src": "23263:5:62", - "type": "" - } - ], - "src": "23230:129:62" - }, - { - "body": { - "nativeSrc": "23461:1544:62", - "nodeType": "YulBlock", - "src": "23461:1544:62", - "statements": [ - { - "body": { - "nativeSrc": "23507:16:62", - "nodeType": "YulBlock", - "src": "23507:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23516:1:62", - "nodeType": "YulLiteral", - "src": "23516:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "23519:1:62", - "nodeType": "YulLiteral", - "src": "23519:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "23509:6:62", - "nodeType": "YulIdentifier", - "src": "23509:6:62" - }, - "nativeSrc": "23509:12:62", - "nodeType": "YulFunctionCall", - "src": "23509:12:62" - }, - "nativeSrc": "23509:12:62", - "nodeType": "YulExpressionStatement", - "src": "23509:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "23482:7:62", - "nodeType": "YulIdentifier", - "src": "23482:7:62" - }, - { - "name": "headStart", - "nativeSrc": "23491:9:62", - "nodeType": "YulIdentifier", - "src": "23491:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "23478:3:62", - "nodeType": "YulIdentifier", - "src": "23478:3:62" - }, - "nativeSrc": "23478:23:62", - "nodeType": "YulFunctionCall", - "src": "23478:23:62" - }, - { - "kind": "number", - "nativeSrc": "23503:2:62", - "nodeType": "YulLiteral", - "src": "23503:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "23474:3:62", - "nodeType": "YulIdentifier", - "src": "23474:3:62" - }, - "nativeSrc": "23474:32:62", - "nodeType": "YulFunctionCall", - "src": "23474:32:62" - }, - "nativeSrc": "23471:52:62", - "nodeType": "YulIf", - "src": "23471:52:62" - }, - { - "nativeSrc": "23532:37:62", - "nodeType": "YulVariableDeclaration", - "src": "23532:37:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23559:9:62", - "nodeType": "YulIdentifier", - "src": "23559:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "23546:12:62", - "nodeType": "YulIdentifier", - "src": "23546:12:62" - }, - "nativeSrc": "23546:23:62", - "nodeType": "YulFunctionCall", - "src": "23546:23:62" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "23536:6:62", - "nodeType": "YulTypedName", - "src": "23536:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "23612:16:62", - "nodeType": "YulBlock", - "src": "23612:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23621:1:62", - "nodeType": "YulLiteral", - "src": "23621:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "23624:1:62", - "nodeType": "YulLiteral", - "src": "23624:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "23614:6:62", - "nodeType": "YulIdentifier", - "src": "23614:6:62" - }, - "nativeSrc": "23614:12:62", - "nodeType": "YulFunctionCall", - "src": "23614:12:62" - }, - "nativeSrc": "23614:12:62", - "nodeType": "YulExpressionStatement", - "src": "23614:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "23584:6:62", - "nodeType": "YulIdentifier", - "src": "23584:6:62" - }, - { - "kind": "number", - "nativeSrc": "23592:18:62", - "nodeType": "YulLiteral", - "src": "23592:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "23581:2:62", - "nodeType": "YulIdentifier", - "src": "23581:2:62" - }, - "nativeSrc": "23581:30:62", - "nodeType": "YulFunctionCall", - "src": "23581:30:62" - }, - "nativeSrc": "23578:50:62", - "nodeType": "YulIf", - "src": "23578:50:62" - }, - { - "nativeSrc": "23637:32:62", - "nodeType": "YulVariableDeclaration", - "src": "23637:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23651:9:62", - "nodeType": "YulIdentifier", - "src": "23651:9:62" - }, - { - "name": "offset", - "nativeSrc": "23662:6:62", - "nodeType": "YulIdentifier", - "src": "23662:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23647:3:62", - "nodeType": "YulIdentifier", - "src": "23647:3:62" - }, - "nativeSrc": "23647:22:62", - "nodeType": "YulFunctionCall", - "src": "23647:22:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "23641:2:62", - "nodeType": "YulTypedName", - "src": "23641:2:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "23709:16:62", - "nodeType": "YulBlock", - "src": "23709:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23718:1:62", - "nodeType": "YulLiteral", - "src": "23718:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "23721:1:62", - "nodeType": "YulLiteral", - "src": "23721:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "23711:6:62", - "nodeType": "YulIdentifier", - "src": "23711:6:62" - }, - "nativeSrc": "23711:12:62", - "nodeType": "YulFunctionCall", - "src": "23711:12:62" - }, - "nativeSrc": "23711:12:62", - "nodeType": "YulExpressionStatement", - "src": "23711:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "23689:7:62", - "nodeType": "YulIdentifier", - "src": "23689:7:62" - }, - { - "name": "_1", - "nativeSrc": "23698:2:62", - "nodeType": "YulIdentifier", - "src": "23698:2:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "23685:3:62", - "nodeType": "YulIdentifier", - "src": "23685:3:62" - }, - "nativeSrc": "23685:16:62", - "nodeType": "YulFunctionCall", - "src": "23685:16:62" - }, - { - "kind": "number", - "nativeSrc": "23703:4:62", - "nodeType": "YulLiteral", - "src": "23703:4:62", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "23681:3:62", - "nodeType": "YulIdentifier", - "src": "23681:3:62" - }, - "nativeSrc": "23681:27:62", - "nodeType": "YulFunctionCall", - "src": "23681:27:62" - }, - "nativeSrc": "23678:47:62", - "nodeType": "YulIf", - "src": "23678:47:62" - }, - { - "nativeSrc": "23734:35:62", - "nodeType": "YulVariableDeclaration", - "src": "23734:35:62", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4281", - "nativeSrc": "23747:20:62", - "nodeType": "YulIdentifier", - "src": "23747:20:62" - }, - "nativeSrc": "23747:22:62", - "nodeType": "YulFunctionCall", - "src": "23747:22:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "23738:5:62", - "nodeType": "YulTypedName", - "src": "23738:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "23778:32:62", - "nodeType": "YulVariableDeclaration", - "src": "23778:32:62", - "value": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "23807:2:62", - "nodeType": "YulIdentifier", - "src": "23807:2:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "23794:12:62", - "nodeType": "YulIdentifier", - "src": "23794:12:62" - }, - "nativeSrc": "23794:16:62", - "nodeType": "YulFunctionCall", - "src": "23794:16:62" - }, - "variables": [ - { - "name": "offset_1", - "nativeSrc": "23782:8:62", - "nodeType": "YulTypedName", - "src": "23782:8:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "23855:16:62", - "nodeType": "YulBlock", - "src": "23855:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23864:1:62", - "nodeType": "YulLiteral", - "src": "23864:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "23867:1:62", - "nodeType": "YulLiteral", - "src": "23867:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "23857:6:62", - "nodeType": "YulIdentifier", - "src": "23857:6:62" - }, - "nativeSrc": "23857:12:62", - "nodeType": "YulFunctionCall", - "src": "23857:12:62" - }, - "nativeSrc": "23857:12:62", - "nodeType": "YulExpressionStatement", - "src": "23857:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nativeSrc": "23825:8:62", - "nodeType": "YulIdentifier", - "src": "23825:8:62" - }, - { - "kind": "number", - "nativeSrc": "23835:18:62", - "nodeType": "YulLiteral", - "src": "23835:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "23822:2:62", - "nodeType": "YulIdentifier", - "src": "23822:2:62" - }, - "nativeSrc": "23822:32:62", - "nodeType": "YulFunctionCall", - "src": "23822:32:62" - }, - "nativeSrc": "23819:52:62", - "nodeType": "YulIf", - "src": "23819:52:62" - }, - { - "nativeSrc": "23880:27:62", - "nodeType": "YulVariableDeclaration", - "src": "23880:27:62", - "value": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "23894:2:62", - "nodeType": "YulIdentifier", - "src": "23894:2:62" - }, - { - "name": "offset_1", - "nativeSrc": "23898:8:62", - "nodeType": "YulIdentifier", - "src": "23898:8:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23890:3:62", - "nodeType": "YulIdentifier", - "src": "23890:3:62" - }, - "nativeSrc": "23890:17:62", - "nodeType": "YulFunctionCall", - "src": "23890:17:62" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "23884:2:62", - "nodeType": "YulTypedName", - "src": "23884:2:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "23947:16:62", - "nodeType": "YulBlock", - "src": "23947:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23956:1:62", - "nodeType": "YulLiteral", - "src": "23956:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "23959:1:62", - "nodeType": "YulLiteral", - "src": "23959:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "23949:6:62", - "nodeType": "YulIdentifier", - "src": "23949:6:62" - }, - "nativeSrc": "23949:12:62", - "nodeType": "YulFunctionCall", - "src": "23949:12:62" - }, - "nativeSrc": "23949:12:62", - "nodeType": "YulExpressionStatement", - "src": "23949:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "23927:7:62", - "nodeType": "YulIdentifier", - "src": "23927:7:62" - }, - { - "name": "_2", - "nativeSrc": "23936:2:62", - "nodeType": "YulIdentifier", - "src": "23936:2:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "23923:3:62", - "nodeType": "YulIdentifier", - "src": "23923:3:62" - }, - "nativeSrc": "23923:16:62", - "nodeType": "YulFunctionCall", - "src": "23923:16:62" - }, - { - "kind": "number", - "nativeSrc": "23941:4:62", - "nodeType": "YulLiteral", - "src": "23941:4:62", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "23919:3:62", - "nodeType": "YulIdentifier", - "src": "23919:3:62" - }, - "nativeSrc": "23919:27:62", - "nodeType": "YulFunctionCall", - "src": "23919:27:62" - }, - "nativeSrc": "23916:47:62", - "nodeType": "YulIf", - "src": "23916:47:62" - }, - { - "nativeSrc": "23972:32:62", - "nodeType": "YulVariableDeclaration", - "src": "23972:32:62", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory", - "nativeSrc": "23987:15:62", - "nodeType": "YulIdentifier", - "src": "23987:15:62" - }, - "nativeSrc": "23987:17:62", - "nodeType": "YulFunctionCall", - "src": "23987:17:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "23976:7:62", - "nodeType": "YulTypedName", - "src": "23976:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "24013:31:62", - "nodeType": "YulVariableDeclaration", - "src": "24013:31:62", - "value": { - "arguments": [ - { - "name": "_2", - "nativeSrc": "24041:2:62", - "nodeType": "YulIdentifier", - "src": "24041:2:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "24028:12:62", - "nodeType": "YulIdentifier", - "src": "24028:12:62" - }, - "nativeSrc": "24028:16:62", - "nodeType": "YulFunctionCall", - "src": "24028:16:62" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "24017:7:62", - "nodeType": "YulTypedName", - "src": "24017:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_2", - "nativeSrc": "24078:7:62", - "nodeType": "YulIdentifier", - "src": "24078:7:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "24053:24:62", - "nodeType": "YulIdentifier", - "src": "24053:24:62" - }, - "nativeSrc": "24053:33:62", - "nodeType": "YulFunctionCall", - "src": "24053:33:62" - }, - "nativeSrc": "24053:33:62", - "nodeType": "YulExpressionStatement", - "src": "24053:33:62" - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "24102:7:62", - "nodeType": "YulIdentifier", - "src": "24102:7:62" - }, - { - "name": "value_2", - "nativeSrc": "24111:7:62", - "nodeType": "YulIdentifier", - "src": "24111:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24095:6:62", - "nodeType": "YulIdentifier", - "src": "24095:6:62" - }, - "nativeSrc": "24095:24:62", - "nodeType": "YulFunctionCall", - "src": "24095:24:62" - }, - "nativeSrc": "24095:24:62", - "nodeType": "YulExpressionStatement", - "src": "24095:24:62" - }, - { - "nativeSrc": "24128:40:62", - "nodeType": "YulVariableDeclaration", - "src": "24128:40:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nativeSrc": "24160:2:62", - "nodeType": "YulIdentifier", - "src": "24160:2:62" - }, - { - "kind": "number", - "nativeSrc": "24164:2:62", - "nodeType": "YulLiteral", - "src": "24164:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24156:3:62", - "nodeType": "YulIdentifier", - "src": "24156:3:62" - }, - "nativeSrc": "24156:11:62", - "nodeType": "YulFunctionCall", - "src": "24156:11:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "24143:12:62", - "nodeType": "YulIdentifier", - "src": "24143:12:62" - }, - "nativeSrc": "24143:25:62", - "nodeType": "YulFunctionCall", - "src": "24143:25:62" - }, - "variables": [ - { - "name": "value_3", - "nativeSrc": "24132:7:62", - "nodeType": "YulTypedName", - "src": "24132:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_3", - "nativeSrc": "24202:7:62", - "nodeType": "YulIdentifier", - "src": "24202:7:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "24177:24:62", - "nodeType": "YulIdentifier", - "src": "24177:24:62" - }, - "nativeSrc": "24177:33:62", - "nodeType": "YulFunctionCall", - "src": "24177:33:62" - }, - "nativeSrc": "24177:33:62", - "nodeType": "YulExpressionStatement", - "src": "24177:33:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "24230:7:62", - "nodeType": "YulIdentifier", - "src": "24230:7:62" - }, - { - "kind": "number", - "nativeSrc": "24239:2:62", - "nodeType": "YulLiteral", - "src": "24239:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24226:3:62", - "nodeType": "YulIdentifier", - "src": "24226:3:62" - }, - "nativeSrc": "24226:16:62", - "nodeType": "YulFunctionCall", - "src": "24226:16:62" - }, - { - "name": "value_3", - "nativeSrc": "24244:7:62", - "nodeType": "YulIdentifier", - "src": "24244:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24219:6:62", - "nodeType": "YulIdentifier", - "src": "24219:6:62" - }, - "nativeSrc": "24219:33:62", - "nodeType": "YulFunctionCall", - "src": "24219:33:62" - }, - "nativeSrc": "24219:33:62", - "nodeType": "YulExpressionStatement", - "src": "24219:33:62" - }, - { - "nativeSrc": "24261:42:62", - "nodeType": "YulVariableDeclaration", - "src": "24261:42:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nativeSrc": "24293:2:62", - "nodeType": "YulIdentifier", - "src": "24293:2:62" - }, - { - "kind": "number", - "nativeSrc": "24297:4:62", - "nodeType": "YulLiteral", - "src": "24297:4:62", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24289:3:62", - "nodeType": "YulIdentifier", - "src": "24289:3:62" - }, - "nativeSrc": "24289:13:62", - "nodeType": "YulFunctionCall", - "src": "24289:13:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "24276:12:62", - "nodeType": "YulIdentifier", - "src": "24276:12:62" - }, - "nativeSrc": "24276:27:62", - "nodeType": "YulFunctionCall", - "src": "24276:27:62" - }, - "variables": [ - { - "name": "value_4", - "nativeSrc": "24265:7:62", - "nodeType": "YulTypedName", - "src": "24265:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_4", - "nativeSrc": "24336:7:62", - "nodeType": "YulIdentifier", - "src": "24336:7:62" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "24312:23:62", - "nodeType": "YulIdentifier", - "src": "24312:23:62" - }, - "nativeSrc": "24312:32:62", - "nodeType": "YulFunctionCall", - "src": "24312:32:62" - }, - "nativeSrc": "24312:32:62", - "nodeType": "YulExpressionStatement", - "src": "24312:32:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "24364:7:62", - "nodeType": "YulIdentifier", - "src": "24364:7:62" - }, - { - "kind": "number", - "nativeSrc": "24373:4:62", - "nodeType": "YulLiteral", - "src": "24373:4:62", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24360:3:62", - "nodeType": "YulIdentifier", - "src": "24360:3:62" - }, - "nativeSrc": "24360:18:62", - "nodeType": "YulFunctionCall", - "src": "24360:18:62" - }, - { - "name": "value_4", - "nativeSrc": "24380:7:62", - "nodeType": "YulIdentifier", - "src": "24380:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24353:6:62", - "nodeType": "YulIdentifier", - "src": "24353:6:62" - }, - "nativeSrc": "24353:35:62", - "nodeType": "YulFunctionCall", - "src": "24353:35:62" - }, - "nativeSrc": "24353:35:62", - "nodeType": "YulExpressionStatement", - "src": "24353:35:62" - }, - { - "nativeSrc": "24397:40:62", - "nodeType": "YulVariableDeclaration", - "src": "24397:40:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nativeSrc": "24429:2:62", - "nodeType": "YulIdentifier", - "src": "24429:2:62" - }, - { - "kind": "number", - "nativeSrc": "24433:2:62", - "nodeType": "YulLiteral", - "src": "24433:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24425:3:62", - "nodeType": "YulIdentifier", - "src": "24425:3:62" - }, - "nativeSrc": "24425:11:62", - "nodeType": "YulFunctionCall", - "src": "24425:11:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "24412:12:62", - "nodeType": "YulIdentifier", - "src": "24412:12:62" - }, - "nativeSrc": "24412:25:62", - "nodeType": "YulFunctionCall", - "src": "24412:25:62" - }, - "variables": [ - { - "name": "value_5", - "nativeSrc": "24401:7:62", - "nodeType": "YulTypedName", - "src": "24401:7:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "24504:16:62", - "nodeType": "YulBlock", - "src": "24504:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "24513:1:62", - "nodeType": "YulLiteral", - "src": "24513:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "24516:1:62", - "nodeType": "YulLiteral", - "src": "24516:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "24506:6:62", - "nodeType": "YulIdentifier", - "src": "24506:6:62" - }, - "nativeSrc": "24506:12:62", - "nodeType": "YulFunctionCall", - "src": "24506:12:62" - }, - "nativeSrc": "24506:12:62", - "nodeType": "YulExpressionStatement", - "src": "24506:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_5", - "nativeSrc": "24459:7:62", - "nodeType": "YulIdentifier", - "src": "24459:7:62" - }, - { - "arguments": [ - { - "name": "value_5", - "nativeSrc": "24472:7:62", - "nodeType": "YulIdentifier", - "src": "24472:7:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "24489:3:62", - "nodeType": "YulLiteral", - "src": "24489:3:62", - "type": "", - "value": "128" - }, - { - "kind": "number", - "nativeSrc": "24494:1:62", - "nodeType": "YulLiteral", - "src": "24494:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "24485:3:62", - "nodeType": "YulIdentifier", - "src": "24485:3:62" - }, - "nativeSrc": "24485:11:62", - "nodeType": "YulFunctionCall", - "src": "24485:11:62" - }, - { - "kind": "number", - "nativeSrc": "24498:1:62", - "nodeType": "YulLiteral", - "src": "24498:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "24481:3:62", - "nodeType": "YulIdentifier", - "src": "24481:3:62" - }, - "nativeSrc": "24481:19:62", - "nodeType": "YulFunctionCall", - "src": "24481:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "24468:3:62", - "nodeType": "YulIdentifier", - "src": "24468:3:62" - }, - "nativeSrc": "24468:33:62", - "nodeType": "YulFunctionCall", - "src": "24468:33:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "24456:2:62", - "nodeType": "YulIdentifier", - "src": "24456:2:62" - }, - "nativeSrc": "24456:46:62", - "nodeType": "YulFunctionCall", - "src": "24456:46:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "24449:6:62", - "nodeType": "YulIdentifier", - "src": "24449:6:62" - }, - "nativeSrc": "24449:54:62", - "nodeType": "YulFunctionCall", - "src": "24449:54:62" - }, - "nativeSrc": "24446:74:62", - "nodeType": "YulIf", - "src": "24446:74:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "24540:7:62", - "nodeType": "YulIdentifier", - "src": "24540:7:62" - }, - { - "kind": "number", - "nativeSrc": "24549:2:62", - "nodeType": "YulLiteral", - "src": "24549:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24536:3:62", - "nodeType": "YulIdentifier", - "src": "24536:3:62" - }, - "nativeSrc": "24536:16:62", - "nodeType": "YulFunctionCall", - "src": "24536:16:62" - }, - { - "name": "value_5", - "nativeSrc": "24554:7:62", - "nodeType": "YulIdentifier", - "src": "24554:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24529:6:62", - "nodeType": "YulIdentifier", - "src": "24529:6:62" - }, - "nativeSrc": "24529:33:62", - "nodeType": "YulFunctionCall", - "src": "24529:33:62" - }, - "nativeSrc": "24529:33:62", - "nodeType": "YulExpressionStatement", - "src": "24529:33:62" - }, - { - "nativeSrc": "24571:42:62", - "nodeType": "YulVariableDeclaration", - "src": "24571:42:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nativeSrc": "24604:2:62", - "nodeType": "YulIdentifier", - "src": "24604:2:62" - }, - { - "kind": "number", - "nativeSrc": "24608:3:62", - "nodeType": "YulLiteral", - "src": "24608:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24600:3:62", - "nodeType": "YulIdentifier", - "src": "24600:3:62" - }, - "nativeSrc": "24600:12:62", - "nodeType": "YulFunctionCall", - "src": "24600:12:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "24587:12:62", - "nodeType": "YulIdentifier", - "src": "24587:12:62" - }, - "nativeSrc": "24587:26:62", - "nodeType": "YulFunctionCall", - "src": "24587:26:62" - }, - "variables": [ - { - "name": "offset_2", - "nativeSrc": "24575:8:62", - "nodeType": "YulTypedName", - "src": "24575:8:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "24658:16:62", - "nodeType": "YulBlock", - "src": "24658:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "24667:1:62", - "nodeType": "YulLiteral", - "src": "24667:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "24670:1:62", - "nodeType": "YulLiteral", - "src": "24670:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "24660:6:62", - "nodeType": "YulIdentifier", - "src": "24660:6:62" - }, - "nativeSrc": "24660:12:62", - "nodeType": "YulFunctionCall", - "src": "24660:12:62" - }, - "nativeSrc": "24660:12:62", - "nodeType": "YulExpressionStatement", - "src": "24660:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_2", - "nativeSrc": "24628:8:62", - "nodeType": "YulIdentifier", - "src": "24628:8:62" - }, - { - "kind": "number", - "nativeSrc": "24638:18:62", - "nodeType": "YulLiteral", - "src": "24638:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "24625:2:62", - "nodeType": "YulIdentifier", - "src": "24625:2:62" - }, - "nativeSrc": "24625:32:62", - "nodeType": "YulFunctionCall", - "src": "24625:32:62" - }, - "nativeSrc": "24622:52:62", - "nodeType": "YulIf", - "src": "24622:52:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "24694:7:62", - "nodeType": "YulIdentifier", - "src": "24694:7:62" - }, - { - "kind": "number", - "nativeSrc": "24703:3:62", - "nodeType": "YulLiteral", - "src": "24703:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24690:3:62", - "nodeType": "YulIdentifier", - "src": "24690:3:62" - }, - "nativeSrc": "24690:17:62", - "nodeType": "YulFunctionCall", - "src": "24690:17:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nativeSrc": "24731:2:62", - "nodeType": "YulIdentifier", - "src": "24731:2:62" - }, - { - "name": "offset_2", - "nativeSrc": "24735:8:62", - "nodeType": "YulIdentifier", - "src": "24735:8:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24727:3:62", - "nodeType": "YulIdentifier", - "src": "24727:3:62" - }, - "nativeSrc": "24727:17:62", - "nodeType": "YulFunctionCall", - "src": "24727:17:62" - }, - { - "name": "dataEnd", - "nativeSrc": "24746:7:62", - "nodeType": "YulIdentifier", - "src": "24746:7:62" - } - ], - "functionName": { - "name": "abi_decode_string", - "nativeSrc": "24709:17:62", - "nodeType": "YulIdentifier", - "src": "24709:17:62" - }, - "nativeSrc": "24709:45:62", - "nodeType": "YulFunctionCall", - "src": "24709:45:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24683:6:62", - "nodeType": "YulIdentifier", - "src": "24683:6:62" - }, - "nativeSrc": "24683:72:62", - "nodeType": "YulFunctionCall", - "src": "24683:72:62" - }, - "nativeSrc": "24683:72:62", - "nodeType": "YulExpressionStatement", - "src": "24683:72:62" - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "24771:5:62", - "nodeType": "YulIdentifier", - "src": "24771:5:62" - }, - { - "name": "value_1", - "nativeSrc": "24778:7:62", - "nodeType": "YulIdentifier", - "src": "24778:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24764:6:62", - "nodeType": "YulIdentifier", - "src": "24764:6:62" - }, - "nativeSrc": "24764:22:62", - "nodeType": "YulFunctionCall", - "src": "24764:22:62" - }, - "nativeSrc": "24764:22:62", - "nodeType": "YulExpressionStatement", - "src": "24764:22:62" - }, - { - "nativeSrc": "24795:41:62", - "nodeType": "YulVariableDeclaration", - "src": "24795:41:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "24828:2:62", - "nodeType": "YulIdentifier", - "src": "24828:2:62" - }, - { - "kind": "number", - "nativeSrc": "24832:2:62", - "nodeType": "YulLiteral", - "src": "24832:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24824:3:62", - "nodeType": "YulIdentifier", - "src": "24824:3:62" - }, - "nativeSrc": "24824:11:62", - "nodeType": "YulFunctionCall", - "src": "24824:11:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "24811:12:62", - "nodeType": "YulIdentifier", - "src": "24811:12:62" - }, - "nativeSrc": "24811:25:62", - "nodeType": "YulFunctionCall", - "src": "24811:25:62" - }, - "variables": [ - { - "name": "offset_3", - "nativeSrc": "24799:8:62", - "nodeType": "YulTypedName", - "src": "24799:8:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "24881:16:62", - "nodeType": "YulBlock", - "src": "24881:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "24890:1:62", - "nodeType": "YulLiteral", - "src": "24890:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "24893:1:62", - "nodeType": "YulLiteral", - "src": "24893:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "24883:6:62", - "nodeType": "YulIdentifier", - "src": "24883:6:62" - }, - "nativeSrc": "24883:12:62", - "nodeType": "YulFunctionCall", - "src": "24883:12:62" - }, - "nativeSrc": "24883:12:62", - "nodeType": "YulExpressionStatement", - "src": "24883:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_3", - "nativeSrc": "24851:8:62", - "nodeType": "YulIdentifier", - "src": "24851:8:62" - }, - { - "kind": "number", - "nativeSrc": "24861:18:62", - "nodeType": "YulLiteral", - "src": "24861:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "24848:2:62", - "nodeType": "YulIdentifier", - "src": "24848:2:62" - }, - "nativeSrc": "24848:32:62", - "nodeType": "YulFunctionCall", - "src": "24848:32:62" - }, - "nativeSrc": "24845:52:62", - "nodeType": "YulIf", - "src": "24845:52:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "24917:5:62", - "nodeType": "YulIdentifier", - "src": "24917:5:62" - }, - { - "kind": "number", - "nativeSrc": "24924:2:62", - "nodeType": "YulLiteral", - "src": "24924:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24913:3:62", - "nodeType": "YulIdentifier", - "src": "24913:3:62" - }, - "nativeSrc": "24913:14:62", - "nodeType": "YulFunctionCall", - "src": "24913:14:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "24951:2:62", - "nodeType": "YulIdentifier", - "src": "24951:2:62" - }, - { - "name": "offset_3", - "nativeSrc": "24955:8:62", - "nodeType": "YulIdentifier", - "src": "24955:8:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24947:3:62", - "nodeType": "YulIdentifier", - "src": "24947:3:62" - }, - "nativeSrc": "24947:17:62", - "nodeType": "YulFunctionCall", - "src": "24947:17:62" - }, - { - "name": "dataEnd", - "nativeSrc": "24966:7:62", - "nodeType": "YulIdentifier", - "src": "24966:7:62" - } - ], - "functionName": { - "name": "abi_decode_string", - "nativeSrc": "24929:17:62", - "nodeType": "YulIdentifier", - "src": "24929:17:62" - }, - "nativeSrc": "24929:45:62", - "nodeType": "YulFunctionCall", - "src": "24929:45:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24906:6:62", - "nodeType": "YulIdentifier", - "src": "24906:6:62" - }, - "nativeSrc": "24906:69:62", - "nodeType": "YulFunctionCall", - "src": "24906:69:62" - }, - "nativeSrc": "24906:69:62", - "nodeType": "YulExpressionStatement", - "src": "24906:69:62" - }, - { - "nativeSrc": "24984:15:62", - "nodeType": "YulAssignment", - "src": "24984:15:62", - "value": { - "name": "value", - "nativeSrc": "24994:5:62", - "nodeType": "YulIdentifier", - "src": "24994:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "24984:6:62", - "nodeType": "YulIdentifier", - "src": "24984:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_SignedRAV_$2546_memory_ptr", - "nativeSrc": "23364:1641:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "23427:9:62", - "nodeType": "YulTypedName", - "src": "23427:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "23438:7:62", - "nodeType": "YulTypedName", - "src": "23438:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "23450:6:62", - "nodeType": "YulTypedName", - "src": "23450:6:62", - "type": "" - } - ], - "src": "23364:1641:62" - }, - { - "body": { - "nativeSrc": "25105:280:62", - "nodeType": "YulBlock", - "src": "25105:280:62", - "statements": [ - { - "body": { - "nativeSrc": "25151:16:62", - "nodeType": "YulBlock", - "src": "25151:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25160:1:62", - "nodeType": "YulLiteral", - "src": "25160:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "25163:1:62", - "nodeType": "YulLiteral", - "src": "25163:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "25153:6:62", - "nodeType": "YulIdentifier", - "src": "25153:6:62" - }, - "nativeSrc": "25153:12:62", - "nodeType": "YulFunctionCall", - "src": "25153:12:62" - }, - "nativeSrc": "25153:12:62", - "nodeType": "YulExpressionStatement", - "src": "25153:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "25126:7:62", - "nodeType": "YulIdentifier", - "src": "25126:7:62" - }, - { - "name": "headStart", - "nativeSrc": "25135:9:62", - "nodeType": "YulIdentifier", - "src": "25135:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "25122:3:62", - "nodeType": "YulIdentifier", - "src": "25122:3:62" - }, - "nativeSrc": "25122:23:62", - "nodeType": "YulFunctionCall", - "src": "25122:23:62" - }, - { - "kind": "number", - "nativeSrc": "25147:2:62", - "nodeType": "YulLiteral", - "src": "25147:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "25118:3:62", - "nodeType": "YulIdentifier", - "src": "25118:3:62" - }, - "nativeSrc": "25118:32:62", - "nodeType": "YulFunctionCall", - "src": "25118:32:62" - }, - "nativeSrc": "25115:52:62", - "nodeType": "YulIf", - "src": "25115:52:62" - }, - { - "nativeSrc": "25176:36:62", - "nodeType": "YulVariableDeclaration", - "src": "25176:36:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25202:9:62", - "nodeType": "YulIdentifier", - "src": "25202:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "25189:12:62", - "nodeType": "YulIdentifier", - "src": "25189:12:62" - }, - "nativeSrc": "25189:23:62", - "nodeType": "YulFunctionCall", - "src": "25189:23:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "25180:5:62", - "nodeType": "YulTypedName", - "src": "25180:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "25246:5:62", - "nodeType": "YulIdentifier", - "src": "25246:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "25221:24:62", - "nodeType": "YulIdentifier", - "src": "25221:24:62" - }, - "nativeSrc": "25221:31:62", - "nodeType": "YulFunctionCall", - "src": "25221:31:62" - }, - "nativeSrc": "25221:31:62", - "nodeType": "YulExpressionStatement", - "src": "25221:31:62" - }, - { - "nativeSrc": "25261:15:62", - "nodeType": "YulAssignment", - "src": "25261:15:62", - "value": { - "name": "value", - "nativeSrc": "25271:5:62", - "nodeType": "YulIdentifier", - "src": "25271:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "25261:6:62", - "nodeType": "YulIdentifier", - "src": "25261:6:62" - } - ] - }, - { - "nativeSrc": "25285:16:62", - "nodeType": "YulVariableDeclaration", - "src": "25285:16:62", - "value": { - "kind": "number", - "nativeSrc": "25300:1:62", - "nodeType": "YulLiteral", - "src": "25300:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "25289:7:62", - "nodeType": "YulTypedName", - "src": "25289:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "25310:43:62", - "nodeType": "YulAssignment", - "src": "25310:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25338:9:62", - "nodeType": "YulIdentifier", - "src": "25338:9:62" - }, - { - "kind": "number", - "nativeSrc": "25349:2:62", - "nodeType": "YulLiteral", - "src": "25349:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25334:3:62", - "nodeType": "YulIdentifier", - "src": "25334:3:62" - }, - "nativeSrc": "25334:18:62", - "nodeType": "YulFunctionCall", - "src": "25334:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "25321:12:62", - "nodeType": "YulIdentifier", - "src": "25321:12:62" - }, - "nativeSrc": "25321:32:62", - "nodeType": "YulFunctionCall", - "src": "25321:32:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "25310:7:62", - "nodeType": "YulIdentifier", - "src": "25310:7:62" - } - ] - }, - { - "nativeSrc": "25362:17:62", - "nodeType": "YulAssignment", - "src": "25362:17:62", - "value": { - "name": "value_1", - "nativeSrc": "25372:7:62", - "nodeType": "YulIdentifier", - "src": "25372:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "25362:6:62", - "nodeType": "YulIdentifier", - "src": "25362:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_payablet_bytes32", - "nativeSrc": "25010:375:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "25063:9:62", - "nodeType": "YulTypedName", - "src": "25063:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "25074:7:62", - "nodeType": "YulTypedName", - "src": "25074:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "25086:6:62", - "nodeType": "YulTypedName", - "src": "25086:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "25094:6:62", - "nodeType": "YulTypedName", - "src": "25094:6:62", - "type": "" - } - ], - "src": "25010:375:62" - }, - { - "body": { - "nativeSrc": "25444:186:62", - "nodeType": "YulBlock", - "src": "25444:186:62", - "statements": [ - { - "body": { - "nativeSrc": "25486:111:62", - "nodeType": "YulBlock", - "src": "25486:111:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25507:1:62", - "nodeType": "YulLiteral", - "src": "25507:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25514:3:62", - "nodeType": "YulLiteral", - "src": "25514:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "25519:10:62", - "nodeType": "YulLiteral", - "src": "25519:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "25510:3:62", - "nodeType": "YulIdentifier", - "src": "25510:3:62" - }, - "nativeSrc": "25510:20:62", - "nodeType": "YulFunctionCall", - "src": "25510:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25500:6:62", - "nodeType": "YulIdentifier", - "src": "25500:6:62" - }, - "nativeSrc": "25500:31:62", - "nodeType": "YulFunctionCall", - "src": "25500:31:62" - }, - "nativeSrc": "25500:31:62", - "nodeType": "YulExpressionStatement", - "src": "25500:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25551:1:62", - "nodeType": "YulLiteral", - "src": "25551:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "25554:4:62", - "nodeType": "YulLiteral", - "src": "25554:4:62", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25544:6:62", - "nodeType": "YulIdentifier", - "src": "25544:6:62" - }, - "nativeSrc": "25544:15:62", - "nodeType": "YulFunctionCall", - "src": "25544:15:62" - }, - "nativeSrc": "25544:15:62", - "nodeType": "YulExpressionStatement", - "src": "25544:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25579:1:62", - "nodeType": "YulLiteral", - "src": "25579:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "25582:4:62", - "nodeType": "YulLiteral", - "src": "25582:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "25572:6:62", - "nodeType": "YulIdentifier", - "src": "25572:6:62" - }, - "nativeSrc": "25572:15:62", - "nodeType": "YulFunctionCall", - "src": "25572:15:62" - }, - "nativeSrc": "25572:15:62", - "nodeType": "YulExpressionStatement", - "src": "25572:15:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "25467:5:62", - "nodeType": "YulIdentifier", - "src": "25467:5:62" - }, - { - "kind": "number", - "nativeSrc": "25474:1:62", - "nodeType": "YulLiteral", - "src": "25474:1:62", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "25464:2:62", - "nodeType": "YulIdentifier", - "src": "25464:2:62" - }, - "nativeSrc": "25464:12:62", - "nodeType": "YulFunctionCall", - "src": "25464:12:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "25457:6:62", - "nodeType": "YulIdentifier", - "src": "25457:6:62" - }, - "nativeSrc": "25457:20:62", - "nodeType": "YulFunctionCall", - "src": "25457:20:62" - }, - "nativeSrc": "25454:143:62", - "nodeType": "YulIf", - "src": "25454:143:62" - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "25613:3:62", - "nodeType": "YulIdentifier", - "src": "25613:3:62" - }, - { - "name": "value", - "nativeSrc": "25618:5:62", - "nodeType": "YulIdentifier", - "src": "25618:5:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25606:6:62", - "nodeType": "YulIdentifier", - "src": "25606:6:62" - }, - "nativeSrc": "25606:18:62", - "nodeType": "YulFunctionCall", - "src": "25606:18:62" - }, - "nativeSrc": "25606:18:62", - "nodeType": "YulExpressionStatement", - "src": "25606:18:62" - } - ] - }, - "name": "abi_encode_enum_PaymentTypes", - "nativeSrc": "25390:240:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "25428:5:62", - "nodeType": "YulTypedName", - "src": "25428:5:62", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "25435:3:62", - "nodeType": "YulTypedName", - "src": "25435:3:62", - "type": "" - } - ], - "src": "25390:240:62" - }, - { - "body": { - "nativeSrc": "25751:98:62", - "nodeType": "YulBlock", - "src": "25751:98:62", - "statements": [ - { - "nativeSrc": "25761:26:62", - "nodeType": "YulAssignment", - "src": "25761:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25773:9:62", - "nodeType": "YulIdentifier", - "src": "25773:9:62" - }, - { - "kind": "number", - "nativeSrc": "25784:2:62", - "nodeType": "YulLiteral", - "src": "25784:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25769:3:62", - "nodeType": "YulIdentifier", - "src": "25769:3:62" - }, - "nativeSrc": "25769:18:62", - "nodeType": "YulFunctionCall", - "src": "25769:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "25761:4:62", - "nodeType": "YulIdentifier", - "src": "25761:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25825:6:62", - "nodeType": "YulIdentifier", - "src": "25825:6:62" - }, - { - "name": "headStart", - "nativeSrc": "25833:9:62", - "nodeType": "YulIdentifier", - "src": "25833:9:62" - } - ], - "functionName": { - "name": "abi_encode_enum_PaymentTypes", - "nativeSrc": "25796:28:62", - "nodeType": "YulIdentifier", - "src": "25796:28:62" - }, - "nativeSrc": "25796:47:62", - "nodeType": "YulFunctionCall", - "src": "25796:47:62" - }, - "nativeSrc": "25796:47:62", - "nodeType": "YulExpressionStatement", - "src": "25796:47:62" - } - ] - }, - "name": "abi_encode_tuple_t_enum$_PaymentTypes_$2166__to_t_uint8__fromStack_reversed", - "nativeSrc": "25635:214:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "25720:9:62", - "nodeType": "YulTypedName", - "src": "25720:9:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "25731:6:62", - "nodeType": "YulTypedName", - "src": "25731:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "25742:4:62", - "nodeType": "YulTypedName", - "src": "25742:4:62", - "type": "" - } - ], - "src": "25635:214:62" - }, - { - "body": { - "nativeSrc": "25941:259:62", - "nodeType": "YulBlock", - "src": "25941:259:62", - "statements": [ - { - "body": { - "nativeSrc": "25987:16:62", - "nodeType": "YulBlock", - "src": "25987:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25996:1:62", - "nodeType": "YulLiteral", - "src": "25996:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "25999:1:62", - "nodeType": "YulLiteral", - "src": "25999:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "25989:6:62", - "nodeType": "YulIdentifier", - "src": "25989:6:62" - }, - "nativeSrc": "25989:12:62", - "nodeType": "YulFunctionCall", - "src": "25989:12:62" - }, - "nativeSrc": "25989:12:62", - "nodeType": "YulExpressionStatement", - "src": "25989:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "25962:7:62", - "nodeType": "YulIdentifier", - "src": "25962:7:62" - }, - { - "name": "headStart", - "nativeSrc": "25971:9:62", - "nodeType": "YulIdentifier", - "src": "25971:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "25958:3:62", - "nodeType": "YulIdentifier", - "src": "25958:3:62" - }, - "nativeSrc": "25958:23:62", - "nodeType": "YulFunctionCall", - "src": "25958:23:62" - }, - { - "kind": "number", - "nativeSrc": "25983:2:62", - "nodeType": "YulLiteral", - "src": "25983:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "25954:3:62", - "nodeType": "YulIdentifier", - "src": "25954:3:62" - }, - "nativeSrc": "25954:32:62", - "nodeType": "YulFunctionCall", - "src": "25954:32:62" - }, - "nativeSrc": "25951:52:62", - "nodeType": "YulIf", - "src": "25951:52:62" - }, - { - "nativeSrc": "26012:14:62", - "nodeType": "YulVariableDeclaration", - "src": "26012:14:62", - "value": { - "kind": "number", - "nativeSrc": "26025:1:62", - "nodeType": "YulLiteral", - "src": "26025:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "26016:5:62", - "nodeType": "YulTypedName", - "src": "26016:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "26035:32:62", - "nodeType": "YulAssignment", - "src": "26035:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26057:9:62", - "nodeType": "YulIdentifier", - "src": "26057:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "26044:12:62", - "nodeType": "YulIdentifier", - "src": "26044:12:62" - }, - "nativeSrc": "26044:23:62", - "nodeType": "YulFunctionCall", - "src": "26044:23:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "26035:5:62", - "nodeType": "YulIdentifier", - "src": "26035:5:62" - } - ] - }, - { - "nativeSrc": "26076:15:62", - "nodeType": "YulAssignment", - "src": "26076:15:62", - "value": { - "name": "value", - "nativeSrc": "26086:5:62", - "nodeType": "YulIdentifier", - "src": "26086:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "26076:6:62", - "nodeType": "YulIdentifier", - "src": "26076:6:62" - } - ] - }, - { - "nativeSrc": "26100:16:62", - "nodeType": "YulVariableDeclaration", - "src": "26100:16:62", - "value": { - "kind": "number", - "nativeSrc": "26115:1:62", - "nodeType": "YulLiteral", - "src": "26115:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "26104:7:62", - "nodeType": "YulTypedName", - "src": "26104:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "26125:43:62", - "nodeType": "YulAssignment", - "src": "26125:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26153:9:62", - "nodeType": "YulIdentifier", - "src": "26153:9:62" - }, - { - "kind": "number", - "nativeSrc": "26164:2:62", - "nodeType": "YulLiteral", - "src": "26164:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26149:3:62", - "nodeType": "YulIdentifier", - "src": "26149:3:62" - }, - "nativeSrc": "26149:18:62", - "nodeType": "YulFunctionCall", - "src": "26149:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "26136:12:62", - "nodeType": "YulIdentifier", - "src": "26136:12:62" - }, - "nativeSrc": "26136:32:62", - "nodeType": "YulFunctionCall", - "src": "26136:32:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "26125:7:62", - "nodeType": "YulIdentifier", - "src": "26125:7:62" - } - ] - }, - { - "nativeSrc": "26177:17:62", - "nodeType": "YulAssignment", - "src": "26177:17:62", - "value": { - "name": "value_1", - "nativeSrc": "26187:7:62", - "nodeType": "YulIdentifier", - "src": "26187:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "26177:6:62", - "nodeType": "YulIdentifier", - "src": "26177:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256", - "nativeSrc": "25854:346:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "25899:9:62", - "nodeType": "YulTypedName", - "src": "25899:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "25910:7:62", - "nodeType": "YulTypedName", - "src": "25910:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "25922:6:62", - "nodeType": "YulTypedName", - "src": "25922:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "25930:6:62", - "nodeType": "YulTypedName", - "src": "25930:6:62", - "type": "" - } - ], - "src": "25854:346:62" - }, - { - "body": { - "nativeSrc": "26390:258:62", - "nodeType": "YulBlock", - "src": "26390:258:62", - "statements": [ - { - "nativeSrc": "26400:27:62", - "nodeType": "YulAssignment", - "src": "26400:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26412:9:62", - "nodeType": "YulIdentifier", - "src": "26412:9:62" - }, - { - "kind": "number", - "nativeSrc": "26423:3:62", - "nodeType": "YulLiteral", - "src": "26423:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26408:3:62", - "nodeType": "YulIdentifier", - "src": "26408:3:62" - }, - "nativeSrc": "26408:19:62", - "nodeType": "YulFunctionCall", - "src": "26408:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "26400:4:62", - "nodeType": "YulIdentifier", - "src": "26400:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26443:9:62", - "nodeType": "YulIdentifier", - "src": "26443:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "26458:6:62", - "nodeType": "YulIdentifier", - "src": "26458:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26474:3:62", - "nodeType": "YulLiteral", - "src": "26474:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "26479:1:62", - "nodeType": "YulLiteral", - "src": "26479:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "26470:3:62", - "nodeType": "YulIdentifier", - "src": "26470:3:62" - }, - "nativeSrc": "26470:11:62", - "nodeType": "YulFunctionCall", - "src": "26470:11:62" - }, - { - "kind": "number", - "nativeSrc": "26483:1:62", - "nodeType": "YulLiteral", - "src": "26483:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "26466:3:62", - "nodeType": "YulIdentifier", - "src": "26466:3:62" - }, - "nativeSrc": "26466:19:62", - "nodeType": "YulFunctionCall", - "src": "26466:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "26454:3:62", - "nodeType": "YulIdentifier", - "src": "26454:3:62" - }, - "nativeSrc": "26454:32:62", - "nodeType": "YulFunctionCall", - "src": "26454:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "26436:6:62", - "nodeType": "YulIdentifier", - "src": "26436:6:62" - }, - "nativeSrc": "26436:51:62", - "nodeType": "YulFunctionCall", - "src": "26436:51:62" - }, - "nativeSrc": "26436:51:62", - "nodeType": "YulExpressionStatement", - "src": "26436:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26507:9:62", - "nodeType": "YulIdentifier", - "src": "26507:9:62" - }, - { - "kind": "number", - "nativeSrc": "26518:2:62", - "nodeType": "YulLiteral", - "src": "26518:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26503:3:62", - "nodeType": "YulIdentifier", - "src": "26503:3:62" - }, - "nativeSrc": "26503:18:62", - "nodeType": "YulFunctionCall", - "src": "26503:18:62" - }, - { - "name": "value1", - "nativeSrc": "26523:6:62", - "nodeType": "YulIdentifier", - "src": "26523:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "26496:6:62", - "nodeType": "YulIdentifier", - "src": "26496:6:62" - }, - "nativeSrc": "26496:34:62", - "nodeType": "YulFunctionCall", - "src": "26496:34:62" - }, - "nativeSrc": "26496:34:62", - "nodeType": "YulExpressionStatement", - "src": "26496:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26550:9:62", - "nodeType": "YulIdentifier", - "src": "26550:9:62" - }, - { - "kind": "number", - "nativeSrc": "26561:2:62", - "nodeType": "YulLiteral", - "src": "26561:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26546:3:62", - "nodeType": "YulIdentifier", - "src": "26546:3:62" - }, - "nativeSrc": "26546:18:62", - "nodeType": "YulFunctionCall", - "src": "26546:18:62" - }, - { - "name": "value2", - "nativeSrc": "26566:6:62", - "nodeType": "YulIdentifier", - "src": "26566:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "26539:6:62", - "nodeType": "YulIdentifier", - "src": "26539:6:62" - }, - "nativeSrc": "26539:34:62", - "nodeType": "YulFunctionCall", - "src": "26539:34:62" - }, - "nativeSrc": "26539:34:62", - "nodeType": "YulExpressionStatement", - "src": "26539:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26593:9:62", - "nodeType": "YulIdentifier", - "src": "26593:9:62" - }, - { - "kind": "number", - "nativeSrc": "26604:2:62", - "nodeType": "YulLiteral", - "src": "26604:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26589:3:62", - "nodeType": "YulIdentifier", - "src": "26589:3:62" - }, - "nativeSrc": "26589:18:62", - "nodeType": "YulFunctionCall", - "src": "26589:18:62" - }, - { - "arguments": [ - { - "name": "value3", - "nativeSrc": "26613:6:62", - "nodeType": "YulIdentifier", - "src": "26613:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26629:3:62", - "nodeType": "YulLiteral", - "src": "26629:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "26634:1:62", - "nodeType": "YulLiteral", - "src": "26634:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "26625:3:62", - "nodeType": "YulIdentifier", - "src": "26625:3:62" - }, - "nativeSrc": "26625:11:62", - "nodeType": "YulFunctionCall", - "src": "26625:11:62" - }, - { - "kind": "number", - "nativeSrc": "26638:1:62", - "nodeType": "YulLiteral", - "src": "26638:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "26621:3:62", - "nodeType": "YulIdentifier", - "src": "26621:3:62" - }, - "nativeSrc": "26621:19:62", - "nodeType": "YulFunctionCall", - "src": "26621:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "26609:3:62", - "nodeType": "YulIdentifier", - "src": "26609:3:62" - }, - "nativeSrc": "26609:32:62", - "nodeType": "YulFunctionCall", - "src": "26609:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "26582:6:62", - "nodeType": "YulIdentifier", - "src": "26582:6:62" - }, - "nativeSrc": "26582:60:62", - "nodeType": "YulFunctionCall", - "src": "26582:60:62" - }, - "nativeSrc": "26582:60:62", - "nodeType": "YulExpressionStatement", - "src": "26582:60:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed", - "nativeSrc": "26205:443:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "26335:9:62", - "nodeType": "YulTypedName", - "src": "26335:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "26346:6:62", - "nodeType": "YulTypedName", - "src": "26346:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "26354:6:62", - "nodeType": "YulTypedName", - "src": "26354:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "26362:6:62", - "nodeType": "YulTypedName", - "src": "26362:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "26370:6:62", - "nodeType": "YulTypedName", - "src": "26370:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "26381:4:62", - "nodeType": "YulTypedName", - "src": "26381:4:62", - "type": "" - } - ], - "src": "26205:443:62" - }, - { - "body": { - "nativeSrc": "26791:567:62", - "nodeType": "YulBlock", - "src": "26791:567:62", - "statements": [ - { - "body": { - "nativeSrc": "26838:16:62", - "nodeType": "YulBlock", - "src": "26838:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26847:1:62", - "nodeType": "YulLiteral", - "src": "26847:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "26850:1:62", - "nodeType": "YulLiteral", - "src": "26850:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "26840:6:62", - "nodeType": "YulIdentifier", - "src": "26840:6:62" - }, - "nativeSrc": "26840:12:62", - "nodeType": "YulFunctionCall", - "src": "26840:12:62" - }, - "nativeSrc": "26840:12:62", - "nodeType": "YulExpressionStatement", - "src": "26840:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "26812:7:62", - "nodeType": "YulIdentifier", - "src": "26812:7:62" - }, - { - "name": "headStart", - "nativeSrc": "26821:9:62", - "nodeType": "YulIdentifier", - "src": "26821:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "26808:3:62", - "nodeType": "YulIdentifier", - "src": "26808:3:62" - }, - "nativeSrc": "26808:23:62", - "nodeType": "YulFunctionCall", - "src": "26808:23:62" - }, - { - "kind": "number", - "nativeSrc": "26833:3:62", - "nodeType": "YulLiteral", - "src": "26833:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "26804:3:62", - "nodeType": "YulIdentifier", - "src": "26804:3:62" - }, - "nativeSrc": "26804:33:62", - "nodeType": "YulFunctionCall", - "src": "26804:33:62" - }, - "nativeSrc": "26801:53:62", - "nodeType": "YulIf", - "src": "26801:53:62" - }, - { - "nativeSrc": "26863:14:62", - "nodeType": "YulVariableDeclaration", - "src": "26863:14:62", - "value": { - "kind": "number", - "nativeSrc": "26876:1:62", - "nodeType": "YulLiteral", - "src": "26876:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "26867:5:62", - "nodeType": "YulTypedName", - "src": "26867:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "26886:32:62", - "nodeType": "YulAssignment", - "src": "26886:32:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26908:9:62", - "nodeType": "YulIdentifier", - "src": "26908:9:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "26895:12:62", - "nodeType": "YulIdentifier", - "src": "26895:12:62" - }, - "nativeSrc": "26895:23:62", - "nodeType": "YulFunctionCall", - "src": "26895:23:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "26886:5:62", - "nodeType": "YulIdentifier", - "src": "26886:5:62" - } - ] - }, - { - "nativeSrc": "26927:15:62", - "nodeType": "YulAssignment", - "src": "26927:15:62", - "value": { - "name": "value", - "nativeSrc": "26937:5:62", - "nodeType": "YulIdentifier", - "src": "26937:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "26927:6:62", - "nodeType": "YulIdentifier", - "src": "26927:6:62" - } - ] - }, - { - "nativeSrc": "26951:16:62", - "nodeType": "YulVariableDeclaration", - "src": "26951:16:62", - "value": { - "kind": "number", - "nativeSrc": "26966:1:62", - "nodeType": "YulLiteral", - "src": "26966:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "26955:7:62", - "nodeType": "YulTypedName", - "src": "26955:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "26976:43:62", - "nodeType": "YulAssignment", - "src": "26976:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "27004:9:62", - "nodeType": "YulIdentifier", - "src": "27004:9:62" - }, - { - "kind": "number", - "nativeSrc": "27015:2:62", - "nodeType": "YulLiteral", - "src": "27015:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27000:3:62", - "nodeType": "YulIdentifier", - "src": "27000:3:62" - }, - "nativeSrc": "27000:18:62", - "nodeType": "YulFunctionCall", - "src": "27000:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "26987:12:62", - "nodeType": "YulIdentifier", - "src": "26987:12:62" - }, - "nativeSrc": "26987:32:62", - "nodeType": "YulFunctionCall", - "src": "26987:32:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "26976:7:62", - "nodeType": "YulIdentifier", - "src": "26976:7:62" - } - ] - }, - { - "nativeSrc": "27028:17:62", - "nodeType": "YulAssignment", - "src": "27028:17:62", - "value": { - "name": "value_1", - "nativeSrc": "27038:7:62", - "nodeType": "YulIdentifier", - "src": "27038:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "27028:6:62", - "nodeType": "YulIdentifier", - "src": "27028:6:62" - } - ] - }, - { - "nativeSrc": "27054:47:62", - "nodeType": "YulVariableDeclaration", - "src": "27054:47:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "27086:9:62", - "nodeType": "YulIdentifier", - "src": "27086:9:62" - }, - { - "kind": "number", - "nativeSrc": "27097:2:62", - "nodeType": "YulLiteral", - "src": "27097:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27082:3:62", - "nodeType": "YulIdentifier", - "src": "27082:3:62" - }, - "nativeSrc": "27082:18:62", - "nodeType": "YulFunctionCall", - "src": "27082:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "27069:12:62", - "nodeType": "YulIdentifier", - "src": "27069:12:62" - }, - "nativeSrc": "27069:32:62", - "nodeType": "YulFunctionCall", - "src": "27069:32:62" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "27058:7:62", - "nodeType": "YulTypedName", - "src": "27058:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_2", - "nativeSrc": "27135:7:62", - "nodeType": "YulIdentifier", - "src": "27135:7:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "27110:24:62", - "nodeType": "YulIdentifier", - "src": "27110:24:62" - }, - "nativeSrc": "27110:33:62", - "nodeType": "YulFunctionCall", - "src": "27110:33:62" - }, - "nativeSrc": "27110:33:62", - "nodeType": "YulExpressionStatement", - "src": "27110:33:62" - }, - { - "nativeSrc": "27152:17:62", - "nodeType": "YulAssignment", - "src": "27152:17:62", - "value": { - "name": "value_2", - "nativeSrc": "27162:7:62", - "nodeType": "YulIdentifier", - "src": "27162:7:62" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "27152:6:62", - "nodeType": "YulIdentifier", - "src": "27152:6:62" - } - ] - }, - { - "nativeSrc": "27178:46:62", - "nodeType": "YulVariableDeclaration", - "src": "27178:46:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "27209:9:62", - "nodeType": "YulIdentifier", - "src": "27209:9:62" - }, - { - "kind": "number", - "nativeSrc": "27220:2:62", - "nodeType": "YulLiteral", - "src": "27220:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27205:3:62", - "nodeType": "YulIdentifier", - "src": "27205:3:62" - }, - "nativeSrc": "27205:18:62", - "nodeType": "YulFunctionCall", - "src": "27205:18:62" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "27192:12:62", - "nodeType": "YulIdentifier", - "src": "27192:12:62" - }, - "nativeSrc": "27192:32:62", - "nodeType": "YulFunctionCall", - "src": "27192:32:62" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "27182:6:62", - "nodeType": "YulTypedName", - "src": "27182:6:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "27267:16:62", - "nodeType": "YulBlock", - "src": "27267:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27276:1:62", - "nodeType": "YulLiteral", - "src": "27276:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "27279:1:62", - "nodeType": "YulLiteral", - "src": "27279:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "27269:6:62", - "nodeType": "YulIdentifier", - "src": "27269:6:62" - }, - "nativeSrc": "27269:12:62", - "nodeType": "YulFunctionCall", - "src": "27269:12:62" - }, - "nativeSrc": "27269:12:62", - "nodeType": "YulExpressionStatement", - "src": "27269:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "27239:6:62", - "nodeType": "YulIdentifier", - "src": "27239:6:62" - }, - { - "kind": "number", - "nativeSrc": "27247:18:62", - "nodeType": "YulLiteral", - "src": "27247:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "27236:2:62", - "nodeType": "YulIdentifier", - "src": "27236:2:62" - }, - "nativeSrc": "27236:30:62", - "nodeType": "YulFunctionCall", - "src": "27236:30:62" - }, - "nativeSrc": "27233:50:62", - "nodeType": "YulIf", - "src": "27233:50:62" - }, - { - "nativeSrc": "27292:60:62", - "nodeType": "YulAssignment", - "src": "27292:60:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "27324:9:62", - "nodeType": "YulIdentifier", - "src": "27324:9:62" - }, - { - "name": "offset", - "nativeSrc": "27335:6:62", - "nodeType": "YulIdentifier", - "src": "27335:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27320:3:62", - "nodeType": "YulIdentifier", - "src": "27320:3:62" - }, - "nativeSrc": "27320:22:62", - "nodeType": "YulFunctionCall", - "src": "27320:22:62" - }, - { - "name": "dataEnd", - "nativeSrc": "27344:7:62", - "nodeType": "YulIdentifier", - "src": "27344:7:62" - } - ], - "functionName": { - "name": "abi_decode_string", - "nativeSrc": "27302:17:62", - "nodeType": "YulIdentifier", - "src": "27302:17:62" - }, - "nativeSrc": "27302:50:62", - "nodeType": "YulFunctionCall", - "src": "27302:50:62" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "27292:6:62", - "nodeType": "YulIdentifier", - "src": "27292:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes32t_uint256t_address_payablet_bytes_memory_ptr", - "nativeSrc": "26653:705:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "26733:9:62", - "nodeType": "YulTypedName", - "src": "26733:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "26744:7:62", - "nodeType": "YulTypedName", - "src": "26744:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "26756:6:62", - "nodeType": "YulTypedName", - "src": "26756:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "26764:6:62", - "nodeType": "YulTypedName", - "src": "26764:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "26772:6:62", - "nodeType": "YulTypedName", - "src": "26772:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "26780:6:62", - "nodeType": "YulTypedName", - "src": "26780:6:62", - "type": "" - } - ], - "src": "26653:705:62" - }, - { - "body": { - "nativeSrc": "27422:77:62", - "nodeType": "YulBlock", - "src": "27422:77:62", - "statements": [ - { - "nativeSrc": "27432:22:62", - "nodeType": "YulAssignment", - "src": "27432:22:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "27447:6:62", - "nodeType": "YulIdentifier", - "src": "27447:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "27441:5:62", - "nodeType": "YulIdentifier", - "src": "27441:5:62" - }, - "nativeSrc": "27441:13:62", - "nodeType": "YulFunctionCall", - "src": "27441:13:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "27432:5:62", - "nodeType": "YulIdentifier", - "src": "27432:5:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "27487:5:62", - "nodeType": "YulIdentifier", - "src": "27487:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint32", - "nativeSrc": "27463:23:62", - "nodeType": "YulIdentifier", - "src": "27463:23:62" - }, - "nativeSrc": "27463:30:62", - "nodeType": "YulFunctionCall", - "src": "27463:30:62" - }, - "nativeSrc": "27463:30:62", - "nodeType": "YulExpressionStatement", - "src": "27463:30:62" - } - ] - }, - "name": "abi_decode_uint32_fromMemory", - "nativeSrc": "27363:136:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "27401:6:62", - "nodeType": "YulTypedName", - "src": "27401:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "27412:5:62", - "nodeType": "YulTypedName", - "src": "27412:5:62", - "type": "" - } - ], - "src": "27363:136:62" - }, - { - "body": { - "nativeSrc": "27563:77:62", - "nodeType": "YulBlock", - "src": "27563:77:62", - "statements": [ - { - "nativeSrc": "27573:22:62", - "nodeType": "YulAssignment", - "src": "27573:22:62", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "27588:6:62", - "nodeType": "YulIdentifier", - "src": "27588:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "27582:5:62", - "nodeType": "YulIdentifier", - "src": "27582:5:62" - }, - "nativeSrc": "27582:13:62", - "nodeType": "YulFunctionCall", - "src": "27582:13:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "27573:5:62", - "nodeType": "YulIdentifier", - "src": "27573:5:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "27628:5:62", - "nodeType": "YulIdentifier", - "src": "27628:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "27604:23:62", - "nodeType": "YulIdentifier", - "src": "27604:23:62" - }, - "nativeSrc": "27604:30:62", - "nodeType": "YulFunctionCall", - "src": "27604:30:62" - }, - "nativeSrc": "27604:30:62", - "nodeType": "YulExpressionStatement", - "src": "27604:30:62" - } - ] - }, - "name": "abi_decode_uint64_fromMemory", - "nativeSrc": "27504:136:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "27542:6:62", - "nodeType": "YulTypedName", - "src": "27542:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "27553:5:62", - "nodeType": "YulTypedName", - "src": "27553:5:62", - "type": "" - } - ], - "src": "27504:136:62" - }, - { - "body": { - "nativeSrc": "27753:1015:62", - "nodeType": "YulBlock", - "src": "27753:1015:62", - "statements": [ - { - "nativeSrc": "27763:43:62", - "nodeType": "YulVariableDeclaration", - "src": "27763:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "27781:7:62", - "nodeType": "YulIdentifier", - "src": "27781:7:62" - }, - { - "name": "headStart", - "nativeSrc": "27790:9:62", - "nodeType": "YulIdentifier", - "src": "27790:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "27777:3:62", - "nodeType": "YulIdentifier", - "src": "27777:3:62" - }, - "nativeSrc": "27777:23:62", - "nodeType": "YulFunctionCall", - "src": "27777:23:62" - }, - { - "kind": "number", - "nativeSrc": "27802:3:62", - "nodeType": "YulLiteral", - "src": "27802:3:62", - "type": "", - "value": "288" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "27773:3:62", - "nodeType": "YulIdentifier", - "src": "27773:3:62" - }, - "nativeSrc": "27773:33:62", - "nodeType": "YulFunctionCall", - "src": "27773:33:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "27767:2:62", - "nodeType": "YulTypedName", - "src": "27767:2:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "27821:16:62", - "nodeType": "YulBlock", - "src": "27821:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27830:1:62", - "nodeType": "YulLiteral", - "src": "27830:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "27833:1:62", - "nodeType": "YulLiteral", - "src": "27833:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "27823:6:62", - "nodeType": "YulIdentifier", - "src": "27823:6:62" - }, - "nativeSrc": "27823:12:62", - "nodeType": "YulFunctionCall", - "src": "27823:12:62" - }, - "nativeSrc": "27823:12:62", - "nodeType": "YulExpressionStatement", - "src": "27823:12:62" - } - ] - }, - "condition": { - "name": "_1", - "nativeSrc": "27818:2:62", - "nodeType": "YulIdentifier", - "src": "27818:2:62" - }, - "nativeSrc": "27815:22:62", - "nodeType": "YulIf", - "src": "27815:22:62" - }, - { - "nativeSrc": "27846:7:62", - "nodeType": "YulAssignment", - "src": "27846:7:62", - "value": { - "kind": "number", - "nativeSrc": "27852:1:62", - "nodeType": "YulLiteral", - "src": "27852:1:62", - "type": "", - "value": "0" - }, - "variableNames": [ - { - "name": "_1", - "nativeSrc": "27846:2:62", - "nodeType": "YulIdentifier", - "src": "27846:2:62" - } - ] - }, - { - "nativeSrc": "27862:35:62", - "nodeType": "YulVariableDeclaration", - "src": "27862:35:62", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4284", - "nativeSrc": "27875:20:62", - "nodeType": "YulIdentifier", - "src": "27875:20:62" - }, - "nativeSrc": "27875:22:62", - "nodeType": "YulFunctionCall", - "src": "27875:22:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "27866:5:62", - "nodeType": "YulTypedName", - "src": "27866:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "27906:17:62", - "nodeType": "YulVariableDeclaration", - "src": "27906:17:62", - "value": { - "name": "_1", - "nativeSrc": "27921:2:62", - "nodeType": "YulIdentifier", - "src": "27921:2:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "27910:7:62", - "nodeType": "YulTypedName", - "src": "27910:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "27932:27:62", - "nodeType": "YulAssignment", - "src": "27932:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "27949:9:62", - "nodeType": "YulIdentifier", - "src": "27949:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "27943:5:62", - "nodeType": "YulIdentifier", - "src": "27943:5:62" - }, - "nativeSrc": "27943:16:62", - "nodeType": "YulFunctionCall", - "src": "27943:16:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "27932:7:62", - "nodeType": "YulIdentifier", - "src": "27932:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "27975:5:62", - "nodeType": "YulIdentifier", - "src": "27975:5:62" - }, - { - "name": "value_1", - "nativeSrc": "27982:7:62", - "nodeType": "YulIdentifier", - "src": "27982:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "27968:6:62", - "nodeType": "YulIdentifier", - "src": "27968:6:62" - }, - "nativeSrc": "27968:22:62", - "nodeType": "YulFunctionCall", - "src": "27968:22:62" - }, - "nativeSrc": "27968:22:62", - "nodeType": "YulExpressionStatement", - "src": "27968:22:62" - }, - { - "nativeSrc": "27999:17:62", - "nodeType": "YulVariableDeclaration", - "src": "27999:17:62", - "value": { - "name": "_1", - "nativeSrc": "28014:2:62", - "nodeType": "YulIdentifier", - "src": "28014:2:62" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "28003:7:62", - "nodeType": "YulTypedName", - "src": "28003:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "28025:36:62", - "nodeType": "YulAssignment", - "src": "28025:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28046:9:62", - "nodeType": "YulIdentifier", - "src": "28046:9:62" - }, - { - "kind": "number", - "nativeSrc": "28057:2:62", - "nodeType": "YulLiteral", - "src": "28057:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28042:3:62", - "nodeType": "YulIdentifier", - "src": "28042:3:62" - }, - "nativeSrc": "28042:18:62", - "nodeType": "YulFunctionCall", - "src": "28042:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "28036:5:62", - "nodeType": "YulIdentifier", - "src": "28036:5:62" - }, - "nativeSrc": "28036:25:62", - "nodeType": "YulFunctionCall", - "src": "28036:25:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "28025:7:62", - "nodeType": "YulIdentifier", - "src": "28025:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28081:5:62", - "nodeType": "YulIdentifier", - "src": "28081:5:62" - }, - { - "kind": "number", - "nativeSrc": "28088:2:62", - "nodeType": "YulLiteral", - "src": "28088:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28077:3:62", - "nodeType": "YulIdentifier", - "src": "28077:3:62" - }, - "nativeSrc": "28077:14:62", - "nodeType": "YulFunctionCall", - "src": "28077:14:62" - }, - { - "name": "value_2", - "nativeSrc": "28093:7:62", - "nodeType": "YulIdentifier", - "src": "28093:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28070:6:62", - "nodeType": "YulIdentifier", - "src": "28070:6:62" - }, - "nativeSrc": "28070:31:62", - "nodeType": "YulFunctionCall", - "src": "28070:31:62" - }, - "nativeSrc": "28070:31:62", - "nodeType": "YulExpressionStatement", - "src": "28070:31:62" - }, - { - "nativeSrc": "28110:17:62", - "nodeType": "YulVariableDeclaration", - "src": "28110:17:62", - "value": { - "name": "_1", - "nativeSrc": "28125:2:62", - "nodeType": "YulIdentifier", - "src": "28125:2:62" - }, - "variables": [ - { - "name": "value_3", - "nativeSrc": "28114:7:62", - "nodeType": "YulTypedName", - "src": "28114:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "28136:36:62", - "nodeType": "YulAssignment", - "src": "28136:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28157:9:62", - "nodeType": "YulIdentifier", - "src": "28157:9:62" - }, - { - "kind": "number", - "nativeSrc": "28168:2:62", - "nodeType": "YulLiteral", - "src": "28168:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28153:3:62", - "nodeType": "YulIdentifier", - "src": "28153:3:62" - }, - "nativeSrc": "28153:18:62", - "nodeType": "YulFunctionCall", - "src": "28153:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "28147:5:62", - "nodeType": "YulIdentifier", - "src": "28147:5:62" - }, - "nativeSrc": "28147:25:62", - "nodeType": "YulFunctionCall", - "src": "28147:25:62" - }, - "variableNames": [ - { - "name": "value_3", - "nativeSrc": "28136:7:62", - "nodeType": "YulIdentifier", - "src": "28136:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28192:5:62", - "nodeType": "YulIdentifier", - "src": "28192:5:62" - }, - { - "kind": "number", - "nativeSrc": "28199:2:62", - "nodeType": "YulLiteral", - "src": "28199:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28188:3:62", - "nodeType": "YulIdentifier", - "src": "28188:3:62" - }, - "nativeSrc": "28188:14:62", - "nodeType": "YulFunctionCall", - "src": "28188:14:62" - }, - { - "name": "value_3", - "nativeSrc": "28204:7:62", - "nodeType": "YulIdentifier", - "src": "28204:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28181:6:62", - "nodeType": "YulIdentifier", - "src": "28181:6:62" - }, - "nativeSrc": "28181:31:62", - "nodeType": "YulFunctionCall", - "src": "28181:31:62" - }, - "nativeSrc": "28181:31:62", - "nodeType": "YulExpressionStatement", - "src": "28181:31:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28232:5:62", - "nodeType": "YulIdentifier", - "src": "28232:5:62" - }, - { - "kind": "number", - "nativeSrc": "28239:2:62", - "nodeType": "YulLiteral", - "src": "28239:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28228:3:62", - "nodeType": "YulIdentifier", - "src": "28228:3:62" - }, - "nativeSrc": "28228:14:62", - "nodeType": "YulFunctionCall", - "src": "28228:14:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28277:9:62", - "nodeType": "YulIdentifier", - "src": "28277:9:62" - }, - { - "kind": "number", - "nativeSrc": "28288:2:62", - "nodeType": "YulLiteral", - "src": "28288:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28273:3:62", - "nodeType": "YulIdentifier", - "src": "28273:3:62" - }, - "nativeSrc": "28273:18:62", - "nodeType": "YulFunctionCall", - "src": "28273:18:62" - } - ], - "functionName": { - "name": "abi_decode_uint32_fromMemory", - "nativeSrc": "28244:28:62", - "nodeType": "YulIdentifier", - "src": "28244:28:62" - }, - "nativeSrc": "28244:48:62", - "nodeType": "YulFunctionCall", - "src": "28244:48:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28221:6:62", - "nodeType": "YulIdentifier", - "src": "28221:6:62" - }, - "nativeSrc": "28221:72:62", - "nodeType": "YulFunctionCall", - "src": "28221:72:62" - }, - "nativeSrc": "28221:72:62", - "nodeType": "YulExpressionStatement", - "src": "28221:72:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28313:5:62", - "nodeType": "YulIdentifier", - "src": "28313:5:62" - }, - { - "kind": "number", - "nativeSrc": "28320:3:62", - "nodeType": "YulLiteral", - "src": "28320:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28309:3:62", - "nodeType": "YulIdentifier", - "src": "28309:3:62" - }, - "nativeSrc": "28309:15:62", - "nodeType": "YulFunctionCall", - "src": "28309:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28359:9:62", - "nodeType": "YulIdentifier", - "src": "28359:9:62" - }, - { - "kind": "number", - "nativeSrc": "28370:3:62", - "nodeType": "YulLiteral", - "src": "28370:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28355:3:62", - "nodeType": "YulIdentifier", - "src": "28355:3:62" - }, - "nativeSrc": "28355:19:62", - "nodeType": "YulFunctionCall", - "src": "28355:19:62" - } - ], - "functionName": { - "name": "abi_decode_uint64_fromMemory", - "nativeSrc": "28326:28:62", - "nodeType": "YulIdentifier", - "src": "28326:28:62" - }, - "nativeSrc": "28326:49:62", - "nodeType": "YulFunctionCall", - "src": "28326:49:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28302:6:62", - "nodeType": "YulIdentifier", - "src": "28302:6:62" - }, - "nativeSrc": "28302:74:62", - "nodeType": "YulFunctionCall", - "src": "28302:74:62" - }, - "nativeSrc": "28302:74:62", - "nodeType": "YulExpressionStatement", - "src": "28302:74:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28396:5:62", - "nodeType": "YulIdentifier", - "src": "28396:5:62" - }, - { - "kind": "number", - "nativeSrc": "28403:3:62", - "nodeType": "YulLiteral", - "src": "28403:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28392:3:62", - "nodeType": "YulIdentifier", - "src": "28392:3:62" - }, - "nativeSrc": "28392:15:62", - "nodeType": "YulFunctionCall", - "src": "28392:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28442:9:62", - "nodeType": "YulIdentifier", - "src": "28442:9:62" - }, - { - "kind": "number", - "nativeSrc": "28453:3:62", - "nodeType": "YulLiteral", - "src": "28453:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28438:3:62", - "nodeType": "YulIdentifier", - "src": "28438:3:62" - }, - "nativeSrc": "28438:19:62", - "nodeType": "YulFunctionCall", - "src": "28438:19:62" - } - ], - "functionName": { - "name": "abi_decode_uint64_fromMemory", - "nativeSrc": "28409:28:62", - "nodeType": "YulIdentifier", - "src": "28409:28:62" - }, - "nativeSrc": "28409:49:62", - "nodeType": "YulFunctionCall", - "src": "28409:49:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28385:6:62", - "nodeType": "YulIdentifier", - "src": "28385:6:62" - }, - "nativeSrc": "28385:74:62", - "nodeType": "YulFunctionCall", - "src": "28385:74:62" - }, - "nativeSrc": "28385:74:62", - "nodeType": "YulExpressionStatement", - "src": "28385:74:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28479:5:62", - "nodeType": "YulIdentifier", - "src": "28479:5:62" - }, - { - "kind": "number", - "nativeSrc": "28486:3:62", - "nodeType": "YulLiteral", - "src": "28486:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28475:3:62", - "nodeType": "YulIdentifier", - "src": "28475:3:62" - }, - "nativeSrc": "28475:15:62", - "nodeType": "YulFunctionCall", - "src": "28475:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28525:9:62", - "nodeType": "YulIdentifier", - "src": "28525:9:62" - }, - { - "kind": "number", - "nativeSrc": "28536:3:62", - "nodeType": "YulLiteral", - "src": "28536:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28521:3:62", - "nodeType": "YulIdentifier", - "src": "28521:3:62" - }, - "nativeSrc": "28521:19:62", - "nodeType": "YulFunctionCall", - "src": "28521:19:62" - } - ], - "functionName": { - "name": "abi_decode_uint32_fromMemory", - "nativeSrc": "28492:28:62", - "nodeType": "YulIdentifier", - "src": "28492:28:62" - }, - "nativeSrc": "28492:49:62", - "nodeType": "YulFunctionCall", - "src": "28492:49:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28468:6:62", - "nodeType": "YulIdentifier", - "src": "28468:6:62" - }, - "nativeSrc": "28468:74:62", - "nodeType": "YulFunctionCall", - "src": "28468:74:62" - }, - "nativeSrc": "28468:74:62", - "nodeType": "YulExpressionStatement", - "src": "28468:74:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28562:5:62", - "nodeType": "YulIdentifier", - "src": "28562:5:62" - }, - { - "kind": "number", - "nativeSrc": "28569:3:62", - "nodeType": "YulLiteral", - "src": "28569:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28558:3:62", - "nodeType": "YulIdentifier", - "src": "28558:3:62" - }, - "nativeSrc": "28558:15:62", - "nodeType": "YulFunctionCall", - "src": "28558:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28608:9:62", - "nodeType": "YulIdentifier", - "src": "28608:9:62" - }, - { - "kind": "number", - "nativeSrc": "28619:3:62", - "nodeType": "YulLiteral", - "src": "28619:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28604:3:62", - "nodeType": "YulIdentifier", - "src": "28604:3:62" - }, - "nativeSrc": "28604:19:62", - "nodeType": "YulFunctionCall", - "src": "28604:19:62" - } - ], - "functionName": { - "name": "abi_decode_uint64_fromMemory", - "nativeSrc": "28575:28:62", - "nodeType": "YulIdentifier", - "src": "28575:28:62" - }, - "nativeSrc": "28575:49:62", - "nodeType": "YulFunctionCall", - "src": "28575:49:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28551:6:62", - "nodeType": "YulIdentifier", - "src": "28551:6:62" - }, - "nativeSrc": "28551:74:62", - "nodeType": "YulFunctionCall", - "src": "28551:74:62" - }, - "nativeSrc": "28551:74:62", - "nodeType": "YulExpressionStatement", - "src": "28551:74:62" - }, - { - "nativeSrc": "28634:17:62", - "nodeType": "YulVariableDeclaration", - "src": "28634:17:62", - "value": { - "name": "_1", - "nativeSrc": "28649:2:62", - "nodeType": "YulIdentifier", - "src": "28649:2:62" - }, - "variables": [ - { - "name": "value_4", - "nativeSrc": "28638:7:62", - "nodeType": "YulTypedName", - "src": "28638:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "28660:37:62", - "nodeType": "YulAssignment", - "src": "28660:37:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28681:9:62", - "nodeType": "YulIdentifier", - "src": "28681:9:62" - }, - { - "kind": "number", - "nativeSrc": "28692:3:62", - "nodeType": "YulLiteral", - "src": "28692:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28677:3:62", - "nodeType": "YulIdentifier", - "src": "28677:3:62" - }, - "nativeSrc": "28677:19:62", - "nodeType": "YulFunctionCall", - "src": "28677:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "28671:5:62", - "nodeType": "YulIdentifier", - "src": "28671:5:62" - }, - "nativeSrc": "28671:26:62", - "nodeType": "YulFunctionCall", - "src": "28671:26:62" - }, - "variableNames": [ - { - "name": "value_4", - "nativeSrc": "28660:7:62", - "nodeType": "YulIdentifier", - "src": "28660:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28717:5:62", - "nodeType": "YulIdentifier", - "src": "28717:5:62" - }, - { - "kind": "number", - "nativeSrc": "28724:3:62", - "nodeType": "YulLiteral", - "src": "28724:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28713:3:62", - "nodeType": "YulIdentifier", - "src": "28713:3:62" - }, - "nativeSrc": "28713:15:62", - "nodeType": "YulFunctionCall", - "src": "28713:15:62" - }, - { - "name": "value_4", - "nativeSrc": "28730:7:62", - "nodeType": "YulIdentifier", - "src": "28730:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28706:6:62", - "nodeType": "YulIdentifier", - "src": "28706:6:62" - }, - "nativeSrc": "28706:32:62", - "nodeType": "YulFunctionCall", - "src": "28706:32:62" - }, - "nativeSrc": "28706:32:62", - "nodeType": "YulExpressionStatement", - "src": "28706:32:62" - }, - { - "nativeSrc": "28747:15:62", - "nodeType": "YulAssignment", - "src": "28747:15:62", - "value": { - "name": "value", - "nativeSrc": "28757:5:62", - "nodeType": "YulIdentifier", - "src": "28757:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "28747:6:62", - "nodeType": "YulIdentifier", - "src": "28747:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory", - "nativeSrc": "27645:1123:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "27719:9:62", - "nodeType": "YulTypedName", - "src": "27719:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "27730:7:62", - "nodeType": "YulTypedName", - "src": "27730:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "27742:6:62", - "nodeType": "YulTypedName", - "src": "27742:6:62", - "type": "" - } - ], - "src": "27645:1123:62" - }, - { - "body": { - "nativeSrc": "28908:156:62", - "nodeType": "YulBlock", - "src": "28908:156:62", - "statements": [ - { - "nativeSrc": "28918:26:62", - "nodeType": "YulAssignment", - "src": "28918:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28930:9:62", - "nodeType": "YulIdentifier", - "src": "28930:9:62" - }, - { - "kind": "number", - "nativeSrc": "28941:2:62", - "nodeType": "YulLiteral", - "src": "28941:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28926:3:62", - "nodeType": "YulIdentifier", - "src": "28926:3:62" - }, - "nativeSrc": "28926:18:62", - "nodeType": "YulFunctionCall", - "src": "28926:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "28918:4:62", - "nodeType": "YulIdentifier", - "src": "28918:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28960:9:62", - "nodeType": "YulIdentifier", - "src": "28960:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "28975:6:62", - "nodeType": "YulIdentifier", - "src": "28975:6:62" - }, - { - "kind": "number", - "nativeSrc": "28983:4:62", - "nodeType": "YulLiteral", - "src": "28983:4:62", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "28971:3:62", - "nodeType": "YulIdentifier", - "src": "28971:3:62" - }, - "nativeSrc": "28971:17:62", - "nodeType": "YulFunctionCall", - "src": "28971:17:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28953:6:62", - "nodeType": "YulIdentifier", - "src": "28953:6:62" - }, - "nativeSrc": "28953:36:62", - "nodeType": "YulFunctionCall", - "src": "28953:36:62" - }, - "nativeSrc": "28953:36:62", - "nodeType": "YulExpressionStatement", - "src": "28953:36:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29009:9:62", - "nodeType": "YulIdentifier", - "src": "29009:9:62" - }, - { - "kind": "number", - "nativeSrc": "29020:2:62", - "nodeType": "YulLiteral", - "src": "29020:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29005:3:62", - "nodeType": "YulIdentifier", - "src": "29005:3:62" - }, - "nativeSrc": "29005:18:62", - "nodeType": "YulFunctionCall", - "src": "29005:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "29029:6:62", - "nodeType": "YulIdentifier", - "src": "29029:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "29045:3:62", - "nodeType": "YulLiteral", - "src": "29045:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "29050:1:62", - "nodeType": "YulLiteral", - "src": "29050:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "29041:3:62", - "nodeType": "YulIdentifier", - "src": "29041:3:62" - }, - "nativeSrc": "29041:11:62", - "nodeType": "YulFunctionCall", - "src": "29041:11:62" - }, - { - "kind": "number", - "nativeSrc": "29054:1:62", - "nodeType": "YulLiteral", - "src": "29054:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "29037:3:62", - "nodeType": "YulIdentifier", - "src": "29037:3:62" - }, - "nativeSrc": "29037:19:62", - "nodeType": "YulFunctionCall", - "src": "29037:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "29025:3:62", - "nodeType": "YulIdentifier", - "src": "29025:3:62" - }, - "nativeSrc": "29025:32:62", - "nodeType": "YulFunctionCall", - "src": "29025:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28998:6:62", - "nodeType": "YulIdentifier", - "src": "28998:6:62" - }, - "nativeSrc": "28998:60:62", - "nodeType": "YulFunctionCall", - "src": "28998:60:62" - }, - "nativeSrc": "28998:60:62", - "nodeType": "YulExpressionStatement", - "src": "28998:60:62" - } - ] - }, - "name": "abi_encode_tuple_t_rational_0_by_1_t_address__to_t_uint8_t_address__fromStack_reversed", - "nativeSrc": "28773:291:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "28869:9:62", - "nodeType": "YulTypedName", - "src": "28869:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "28880:6:62", - "nodeType": "YulTypedName", - "src": "28880:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "28888:6:62", - "nodeType": "YulTypedName", - "src": "28888:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "28899:4:62", - "nodeType": "YulTypedName", - "src": "28899:4:62", - "type": "" - } - ], - "src": "28773:291:62" - }, - { - "body": { - "nativeSrc": "29150:149:62", - "nodeType": "YulBlock", - "src": "29150:149:62", - "statements": [ - { - "body": { - "nativeSrc": "29196:16:62", - "nodeType": "YulBlock", - "src": "29196:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "29205:1:62", - "nodeType": "YulLiteral", - "src": "29205:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "29208:1:62", - "nodeType": "YulLiteral", - "src": "29208:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "29198:6:62", - "nodeType": "YulIdentifier", - "src": "29198:6:62" - }, - "nativeSrc": "29198:12:62", - "nodeType": "YulFunctionCall", - "src": "29198:12:62" - }, - "nativeSrc": "29198:12:62", - "nodeType": "YulExpressionStatement", - "src": "29198:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "29171:7:62", - "nodeType": "YulIdentifier", - "src": "29171:7:62" - }, - { - "name": "headStart", - "nativeSrc": "29180:9:62", - "nodeType": "YulIdentifier", - "src": "29180:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "29167:3:62", - "nodeType": "YulIdentifier", - "src": "29167:3:62" - }, - "nativeSrc": "29167:23:62", - "nodeType": "YulFunctionCall", - "src": "29167:23:62" - }, - { - "kind": "number", - "nativeSrc": "29192:2:62", - "nodeType": "YulLiteral", - "src": "29192:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "29163:3:62", - "nodeType": "YulIdentifier", - "src": "29163:3:62" - }, - "nativeSrc": "29163:32:62", - "nodeType": "YulFunctionCall", - "src": "29163:32:62" - }, - "nativeSrc": "29160:52:62", - "nodeType": "YulIf", - "src": "29160:52:62" - }, - { - "nativeSrc": "29221:14:62", - "nodeType": "YulVariableDeclaration", - "src": "29221:14:62", - "value": { - "kind": "number", - "nativeSrc": "29234:1:62", - "nodeType": "YulLiteral", - "src": "29234:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "29225:5:62", - "nodeType": "YulTypedName", - "src": "29225:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "29244:25:62", - "nodeType": "YulAssignment", - "src": "29244:25:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29259:9:62", - "nodeType": "YulIdentifier", - "src": "29259:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29253:5:62", - "nodeType": "YulIdentifier", - "src": "29253:5:62" - }, - "nativeSrc": "29253:16:62", - "nodeType": "YulFunctionCall", - "src": "29253:16:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "29244:5:62", - "nodeType": "YulIdentifier", - "src": "29244:5:62" - } - ] - }, - { - "nativeSrc": "29278:15:62", - "nodeType": "YulAssignment", - "src": "29278:15:62", - "value": { - "name": "value", - "nativeSrc": "29288:5:62", - "nodeType": "YulIdentifier", - "src": "29288:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "29278:6:62", - "nodeType": "YulIdentifier", - "src": "29278:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256_fromMemory", - "nativeSrc": "29069:230:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "29116:9:62", - "nodeType": "YulTypedName", - "src": "29116:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "29127:7:62", - "nodeType": "YulTypedName", - "src": "29127:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "29139:6:62", - "nodeType": "YulTypedName", - "src": "29139:6:62", - "type": "" - } - ], - "src": "29069:230:62" - }, - { - "body": { - "nativeSrc": "29384:169:62", - "nodeType": "YulBlock", - "src": "29384:169:62", - "statements": [ - { - "body": { - "nativeSrc": "29430:16:62", - "nodeType": "YulBlock", - "src": "29430:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "29439:1:62", - "nodeType": "YulLiteral", - "src": "29439:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "29442:1:62", - "nodeType": "YulLiteral", - "src": "29442:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "29432:6:62", - "nodeType": "YulIdentifier", - "src": "29432:6:62" - }, - "nativeSrc": "29432:12:62", - "nodeType": "YulFunctionCall", - "src": "29432:12:62" - }, - "nativeSrc": "29432:12:62", - "nodeType": "YulExpressionStatement", - "src": "29432:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "29405:7:62", - "nodeType": "YulIdentifier", - "src": "29405:7:62" - }, - { - "name": "headStart", - "nativeSrc": "29414:9:62", - "nodeType": "YulIdentifier", - "src": "29414:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "29401:3:62", - "nodeType": "YulIdentifier", - "src": "29401:3:62" - }, - "nativeSrc": "29401:23:62", - "nodeType": "YulFunctionCall", - "src": "29401:23:62" - }, - { - "kind": "number", - "nativeSrc": "29426:2:62", - "nodeType": "YulLiteral", - "src": "29426:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "29397:3:62", - "nodeType": "YulIdentifier", - "src": "29397:3:62" - }, - "nativeSrc": "29397:32:62", - "nodeType": "YulFunctionCall", - "src": "29397:32:62" - }, - "nativeSrc": "29394:52:62", - "nodeType": "YulIf", - "src": "29394:52:62" - }, - { - "nativeSrc": "29455:29:62", - "nodeType": "YulVariableDeclaration", - "src": "29455:29:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29474:9:62", - "nodeType": "YulIdentifier", - "src": "29474:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29468:5:62", - "nodeType": "YulIdentifier", - "src": "29468:5:62" - }, - "nativeSrc": "29468:16:62", - "nodeType": "YulFunctionCall", - "src": "29468:16:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "29459:5:62", - "nodeType": "YulTypedName", - "src": "29459:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "29517:5:62", - "nodeType": "YulIdentifier", - "src": "29517:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint32", - "nativeSrc": "29493:23:62", - "nodeType": "YulIdentifier", - "src": "29493:23:62" - }, - "nativeSrc": "29493:30:62", - "nodeType": "YulFunctionCall", - "src": "29493:30:62" - }, - "nativeSrc": "29493:30:62", - "nodeType": "YulExpressionStatement", - "src": "29493:30:62" - }, - { - "nativeSrc": "29532:15:62", - "nodeType": "YulAssignment", - "src": "29532:15:62", - "value": { - "name": "value", - "nativeSrc": "29542:5:62", - "nodeType": "YulIdentifier", - "src": "29542:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "29532:6:62", - "nodeType": "YulIdentifier", - "src": "29532:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32_fromMemory", - "nativeSrc": "29304:249:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "29350:9:62", - "nodeType": "YulTypedName", - "src": "29350:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "29361:7:62", - "nodeType": "YulTypedName", - "src": "29361:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "29373:6:62", - "nodeType": "YulTypedName", - "src": "29373:6:62", - "type": "" - } - ], - "src": "29304:249:62" - }, - { - "body": { - "nativeSrc": "29638:169:62", - "nodeType": "YulBlock", - "src": "29638:169:62", - "statements": [ - { - "body": { - "nativeSrc": "29684:16:62", - "nodeType": "YulBlock", - "src": "29684:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "29693:1:62", - "nodeType": "YulLiteral", - "src": "29693:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "29696:1:62", - "nodeType": "YulLiteral", - "src": "29696:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "29686:6:62", - "nodeType": "YulIdentifier", - "src": "29686:6:62" - }, - "nativeSrc": "29686:12:62", - "nodeType": "YulFunctionCall", - "src": "29686:12:62" - }, - "nativeSrc": "29686:12:62", - "nodeType": "YulExpressionStatement", - "src": "29686:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "29659:7:62", - "nodeType": "YulIdentifier", - "src": "29659:7:62" - }, - { - "name": "headStart", - "nativeSrc": "29668:9:62", - "nodeType": "YulIdentifier", - "src": "29668:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "29655:3:62", - "nodeType": "YulIdentifier", - "src": "29655:3:62" - }, - "nativeSrc": "29655:23:62", - "nodeType": "YulFunctionCall", - "src": "29655:23:62" - }, - { - "kind": "number", - "nativeSrc": "29680:2:62", - "nodeType": "YulLiteral", - "src": "29680:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "29651:3:62", - "nodeType": "YulIdentifier", - "src": "29651:3:62" - }, - "nativeSrc": "29651:32:62", - "nodeType": "YulFunctionCall", - "src": "29651:32:62" - }, - "nativeSrc": "29648:52:62", - "nodeType": "YulIf", - "src": "29648:52:62" - }, - { - "nativeSrc": "29709:29:62", - "nodeType": "YulVariableDeclaration", - "src": "29709:29:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29728:9:62", - "nodeType": "YulIdentifier", - "src": "29728:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29722:5:62", - "nodeType": "YulIdentifier", - "src": "29722:5:62" - }, - "nativeSrc": "29722:16:62", - "nodeType": "YulFunctionCall", - "src": "29722:16:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "29713:5:62", - "nodeType": "YulTypedName", - "src": "29713:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "29771:5:62", - "nodeType": "YulIdentifier", - "src": "29771:5:62" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "29747:23:62", - "nodeType": "YulIdentifier", - "src": "29747:23:62" - }, - "nativeSrc": "29747:30:62", - "nodeType": "YulFunctionCall", - "src": "29747:30:62" - }, - "nativeSrc": "29747:30:62", - "nodeType": "YulExpressionStatement", - "src": "29747:30:62" - }, - { - "nativeSrc": "29786:15:62", - "nodeType": "YulAssignment", - "src": "29786:15:62", - "value": { - "name": "value", - "nativeSrc": "29796:5:62", - "nodeType": "YulIdentifier", - "src": "29796:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "29786:6:62", - "nodeType": "YulIdentifier", - "src": "29786:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint64_fromMemory", - "nativeSrc": "29558:249:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "29604:9:62", - "nodeType": "YulTypedName", - "src": "29604:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "29615:7:62", - "nodeType": "YulTypedName", - "src": "29615:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "29627:6:62", - "nodeType": "YulTypedName", - "src": "29627:6:62", - "type": "" - } - ], - "src": "29558:249:62" - }, - { - "body": { - "nativeSrc": "29941:145:62", - "nodeType": "YulBlock", - "src": "29941:145:62", - "statements": [ - { - "nativeSrc": "29951:26:62", - "nodeType": "YulAssignment", - "src": "29951:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29963:9:62", - "nodeType": "YulIdentifier", - "src": "29963:9:62" - }, - { - "kind": "number", - "nativeSrc": "29974:2:62", - "nodeType": "YulLiteral", - "src": "29974:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29959:3:62", - "nodeType": "YulIdentifier", - "src": "29959:3:62" - }, - "nativeSrc": "29959:18:62", - "nodeType": "YulFunctionCall", - "src": "29959:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "29951:4:62", - "nodeType": "YulIdentifier", - "src": "29951:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29993:9:62", - "nodeType": "YulIdentifier", - "src": "29993:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "30008:6:62", - "nodeType": "YulIdentifier", - "src": "30008:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30024:3:62", - "nodeType": "YulLiteral", - "src": "30024:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "30029:1:62", - "nodeType": "YulLiteral", - "src": "30029:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "30020:3:62", - "nodeType": "YulIdentifier", - "src": "30020:3:62" - }, - "nativeSrc": "30020:11:62", - "nodeType": "YulFunctionCall", - "src": "30020:11:62" - }, - { - "kind": "number", - "nativeSrc": "30033:1:62", - "nodeType": "YulLiteral", - "src": "30033:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "30016:3:62", - "nodeType": "YulIdentifier", - "src": "30016:3:62" - }, - "nativeSrc": "30016:19:62", - "nodeType": "YulFunctionCall", - "src": "30016:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "30004:3:62", - "nodeType": "YulIdentifier", - "src": "30004:3:62" - }, - "nativeSrc": "30004:32:62", - "nodeType": "YulFunctionCall", - "src": "30004:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29986:6:62", - "nodeType": "YulIdentifier", - "src": "29986:6:62" - }, - "nativeSrc": "29986:51:62", - "nodeType": "YulFunctionCall", - "src": "29986:51:62" - }, - "nativeSrc": "29986:51:62", - "nodeType": "YulExpressionStatement", - "src": "29986:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30057:9:62", - "nodeType": "YulIdentifier", - "src": "30057:9:62" - }, - { - "kind": "number", - "nativeSrc": "30068:2:62", - "nodeType": "YulLiteral", - "src": "30068:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30053:3:62", - "nodeType": "YulIdentifier", - "src": "30053:3:62" - }, - "nativeSrc": "30053:18:62", - "nodeType": "YulFunctionCall", - "src": "30053:18:62" - }, - { - "name": "value1", - "nativeSrc": "30073:6:62", - "nodeType": "YulIdentifier", - "src": "30073:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30046:6:62", - "nodeType": "YulIdentifier", - "src": "30046:6:62" - }, - "nativeSrc": "30046:34:62", - "nodeType": "YulFunctionCall", - "src": "30046:34:62" - }, - "nativeSrc": "30046:34:62", - "nodeType": "YulExpressionStatement", - "src": "30046:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", - "nativeSrc": "29812:274:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "29902:9:62", - "nodeType": "YulTypedName", - "src": "29902:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "29913:6:62", - "nodeType": "YulTypedName", - "src": "29913:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "29921:6:62", - "nodeType": "YulTypedName", - "src": "29921:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "29932:4:62", - "nodeType": "YulTypedName", - "src": "29932:4:62", - "type": "" - } - ], - "src": "29812:274:62" - }, - { - "body": { - "nativeSrc": "30139:77:62", - "nodeType": "YulBlock", - "src": "30139:77:62", - "statements": [ - { - "nativeSrc": "30149:16:62", - "nodeType": "YulAssignment", - "src": "30149:16:62", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "30160:1:62", - "nodeType": "YulIdentifier", - "src": "30160:1:62" - }, - { - "name": "y", - "nativeSrc": "30163:1:62", - "nodeType": "YulIdentifier", - "src": "30163:1:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30156:3:62", - "nodeType": "YulIdentifier", - "src": "30156:3:62" - }, - "nativeSrc": "30156:9:62", - "nodeType": "YulFunctionCall", - "src": "30156:9:62" - }, - "variableNames": [ - { - "name": "sum", - "nativeSrc": "30149:3:62", - "nodeType": "YulIdentifier", - "src": "30149:3:62" - } - ] - }, - { - "body": { - "nativeSrc": "30188:22:62", - "nodeType": "YulBlock", - "src": "30188:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "30190:16:62", - "nodeType": "YulIdentifier", - "src": "30190:16:62" - }, - "nativeSrc": "30190:18:62", - "nodeType": "YulFunctionCall", - "src": "30190:18:62" - }, - "nativeSrc": "30190:18:62", - "nodeType": "YulExpressionStatement", - "src": "30190:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nativeSrc": "30180:1:62", - "nodeType": "YulIdentifier", - "src": "30180:1:62" - }, - { - "name": "sum", - "nativeSrc": "30183:3:62", - "nodeType": "YulIdentifier", - "src": "30183:3:62" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "30177:2:62", - "nodeType": "YulIdentifier", - "src": "30177:2:62" - }, - "nativeSrc": "30177:10:62", - "nodeType": "YulFunctionCall", - "src": "30177:10:62" - }, - "nativeSrc": "30174:36:62", - "nodeType": "YulIf", - "src": "30174:36:62" - } - ] - }, - "name": "checked_add_t_uint256", - "nativeSrc": "30091:125:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "30122:1:62", - "nodeType": "YulTypedName", - "src": "30122:1:62", - "type": "" - }, - { - "name": "y", - "nativeSrc": "30125:1:62", - "nodeType": "YulTypedName", - "src": "30125:1:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nativeSrc": "30131:3:62", - "nodeType": "YulTypedName", - "src": "30131:3:62", - "type": "" - } - ], - "src": "30091:125:62" - }, - { - "body": { - "nativeSrc": "30358:150:62", - "nodeType": "YulBlock", - "src": "30358:150:62", - "statements": [ - { - "nativeSrc": "30368:27:62", - "nodeType": "YulVariableDeclaration", - "src": "30368:27:62", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "30388:6:62", - "nodeType": "YulIdentifier", - "src": "30388:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "30382:5:62", - "nodeType": "YulIdentifier", - "src": "30382:5:62" - }, - "nativeSrc": "30382:13:62", - "nodeType": "YulFunctionCall", - "src": "30382:13:62" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "30372:6:62", - "nodeType": "YulTypedName", - "src": "30372:6:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "30443:6:62", - "nodeType": "YulIdentifier", - "src": "30443:6:62" - }, - { - "kind": "number", - "nativeSrc": "30451:4:62", - "nodeType": "YulLiteral", - "src": "30451:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30439:3:62", - "nodeType": "YulIdentifier", - "src": "30439:3:62" - }, - "nativeSrc": "30439:17:62", - "nodeType": "YulFunctionCall", - "src": "30439:17:62" - }, - { - "name": "pos", - "nativeSrc": "30458:3:62", - "nodeType": "YulIdentifier", - "src": "30458:3:62" - }, - { - "name": "length", - "nativeSrc": "30463:6:62", - "nodeType": "YulIdentifier", - "src": "30463:6:62" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "30404:34:62", - "nodeType": "YulIdentifier", - "src": "30404:34:62" - }, - "nativeSrc": "30404:66:62", - "nodeType": "YulFunctionCall", - "src": "30404:66:62" - }, - "nativeSrc": "30404:66:62", - "nodeType": "YulExpressionStatement", - "src": "30404:66:62" - }, - { - "nativeSrc": "30479:23:62", - "nodeType": "YulAssignment", - "src": "30479:23:62", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "30490:3:62", - "nodeType": "YulIdentifier", - "src": "30490:3:62" - }, - { - "name": "length", - "nativeSrc": "30495:6:62", - "nodeType": "YulIdentifier", - "src": "30495:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30486:3:62", - "nodeType": "YulIdentifier", - "src": "30486:3:62" - }, - "nativeSrc": "30486:16:62", - "nodeType": "YulFunctionCall", - "src": "30486:16:62" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "30479:3:62", - "nodeType": "YulIdentifier", - "src": "30479:3:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "30221:287:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "30334:3:62", - "nodeType": "YulTypedName", - "src": "30334:3:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "30339:6:62", - "nodeType": "YulTypedName", - "src": "30339:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "30350:3:62", - "nodeType": "YulTypedName", - "src": "30350:3:62", - "type": "" - } - ], - "src": "30221:287:62" - }, - { - "body": { - "nativeSrc": "30602:170:62", - "nodeType": "YulBlock", - "src": "30602:170:62", - "statements": [ - { - "body": { - "nativeSrc": "30648:16:62", - "nodeType": "YulBlock", - "src": "30648:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30657:1:62", - "nodeType": "YulLiteral", - "src": "30657:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "30660:1:62", - "nodeType": "YulLiteral", - "src": "30660:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "30650:6:62", - "nodeType": "YulIdentifier", - "src": "30650:6:62" - }, - "nativeSrc": "30650:12:62", - "nodeType": "YulFunctionCall", - "src": "30650:12:62" - }, - "nativeSrc": "30650:12:62", - "nodeType": "YulExpressionStatement", - "src": "30650:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "30623:7:62", - "nodeType": "YulIdentifier", - "src": "30623:7:62" - }, - { - "name": "headStart", - "nativeSrc": "30632:9:62", - "nodeType": "YulIdentifier", - "src": "30632:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "30619:3:62", - "nodeType": "YulIdentifier", - "src": "30619:3:62" - }, - "nativeSrc": "30619:23:62", - "nodeType": "YulFunctionCall", - "src": "30619:23:62" - }, - { - "kind": "number", - "nativeSrc": "30644:2:62", - "nodeType": "YulLiteral", - "src": "30644:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "30615:3:62", - "nodeType": "YulIdentifier", - "src": "30615:3:62" - }, - "nativeSrc": "30615:32:62", - "nodeType": "YulFunctionCall", - "src": "30615:32:62" - }, - "nativeSrc": "30612:52:62", - "nodeType": "YulIf", - "src": "30612:52:62" - }, - { - "nativeSrc": "30673:29:62", - "nodeType": "YulVariableDeclaration", - "src": "30673:29:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30692:9:62", - "nodeType": "YulIdentifier", - "src": "30692:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "30686:5:62", - "nodeType": "YulIdentifier", - "src": "30686:5:62" - }, - "nativeSrc": "30686:16:62", - "nodeType": "YulFunctionCall", - "src": "30686:16:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "30677:5:62", - "nodeType": "YulTypedName", - "src": "30677:5:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "30736:5:62", - "nodeType": "YulIdentifier", - "src": "30736:5:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "30711:24:62", - "nodeType": "YulIdentifier", - "src": "30711:24:62" - }, - "nativeSrc": "30711:31:62", - "nodeType": "YulFunctionCall", - "src": "30711:31:62" - }, - "nativeSrc": "30711:31:62", - "nodeType": "YulExpressionStatement", - "src": "30711:31:62" - }, - { - "nativeSrc": "30751:15:62", - "nodeType": "YulAssignment", - "src": "30751:15:62", - "value": { - "name": "value", - "nativeSrc": "30761:5:62", - "nodeType": "YulIdentifier", - "src": "30761:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "30751:6:62", - "nodeType": "YulIdentifier", - "src": "30751:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_payable_fromMemory", - "nativeSrc": "30513:259:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "30568:9:62", - "nodeType": "YulTypedName", - "src": "30568:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "30579:7:62", - "nodeType": "YulTypedName", - "src": "30579:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "30591:6:62", - "nodeType": "YulTypedName", - "src": "30591:6:62", - "type": "" - } - ], - "src": "30513:259:62" - }, - { - "body": { - "nativeSrc": "30960:884:62", - "nodeType": "YulBlock", - "src": "30960:884:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30977:9:62", - "nodeType": "YulIdentifier", - "src": "30977:9:62" - }, - { - "kind": "number", - "nativeSrc": "30988:2:62", - "nodeType": "YulLiteral", - "src": "30988:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30970:6:62", - "nodeType": "YulIdentifier", - "src": "30970:6:62" - }, - "nativeSrc": "30970:21:62", - "nodeType": "YulFunctionCall", - "src": "30970:21:62" - }, - "nativeSrc": "30970:21:62", - "nodeType": "YulExpressionStatement", - "src": "30970:21:62" - }, - { - "nativeSrc": "31000:33:62", - "nodeType": "YulVariableDeclaration", - "src": "31000:33:62", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "31026:6:62", - "nodeType": "YulIdentifier", - "src": "31026:6:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "31020:5:62", - "nodeType": "YulIdentifier", - "src": "31020:5:62" - }, - "nativeSrc": "31020:13:62", - "nodeType": "YulFunctionCall", - "src": "31020:13:62" - }, - "variables": [ - { - "name": "memberValue0", - "nativeSrc": "31004:12:62", - "nodeType": "YulTypedName", - "src": "31004:12:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "31053:9:62", - "nodeType": "YulIdentifier", - "src": "31053:9:62" - }, - { - "kind": "number", - "nativeSrc": "31064:2:62", - "nodeType": "YulLiteral", - "src": "31064:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31049:3:62", - "nodeType": "YulIdentifier", - "src": "31049:3:62" - }, - "nativeSrc": "31049:18:62", - "nodeType": "YulFunctionCall", - "src": "31049:18:62" - }, - { - "kind": "number", - "nativeSrc": "31069:2:62", - "nodeType": "YulLiteral", - "src": "31069:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31042:6:62", - "nodeType": "YulIdentifier", - "src": "31042:6:62" - }, - "nativeSrc": "31042:30:62", - "nodeType": "YulFunctionCall", - "src": "31042:30:62" - }, - "nativeSrc": "31042:30:62", - "nodeType": "YulExpressionStatement", - "src": "31042:30:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "31092:9:62", - "nodeType": "YulIdentifier", - "src": "31092:9:62" - }, - { - "kind": "number", - "nativeSrc": "31103:3:62", - "nodeType": "YulLiteral", - "src": "31103:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31088:3:62", - "nodeType": "YulIdentifier", - "src": "31088:3:62" - }, - "nativeSrc": "31088:19:62", - "nodeType": "YulFunctionCall", - "src": "31088:19:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "31119:12:62", - "nodeType": "YulIdentifier", - "src": "31119:12:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "31113:5:62", - "nodeType": "YulIdentifier", - "src": "31113:5:62" - }, - "nativeSrc": "31113:19:62", - "nodeType": "YulFunctionCall", - "src": "31113:19:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31142:3:62", - "nodeType": "YulLiteral", - "src": "31142:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "31147:1:62", - "nodeType": "YulLiteral", - "src": "31147:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31138:3:62", - "nodeType": "YulIdentifier", - "src": "31138:3:62" - }, - "nativeSrc": "31138:11:62", - "nodeType": "YulFunctionCall", - "src": "31138:11:62" - }, - { - "kind": "number", - "nativeSrc": "31151:1:62", - "nodeType": "YulLiteral", - "src": "31151:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "31134:3:62", - "nodeType": "YulIdentifier", - "src": "31134:3:62" - }, - "nativeSrc": "31134:19:62", - "nodeType": "YulFunctionCall", - "src": "31134:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31109:3:62", - "nodeType": "YulIdentifier", - "src": "31109:3:62" - }, - "nativeSrc": "31109:45:62", - "nodeType": "YulFunctionCall", - "src": "31109:45:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31081:6:62", - "nodeType": "YulIdentifier", - "src": "31081:6:62" - }, - "nativeSrc": "31081:74:62", - "nodeType": "YulFunctionCall", - "src": "31081:74:62" - }, - "nativeSrc": "31081:74:62", - "nodeType": "YulExpressionStatement", - "src": "31081:74:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "31175:9:62", - "nodeType": "YulIdentifier", - "src": "31175:9:62" - }, - { - "kind": "number", - "nativeSrc": "31186:4:62", - "nodeType": "YulLiteral", - "src": "31186:4:62", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31171:3:62", - "nodeType": "YulIdentifier", - "src": "31171:3:62" - }, - "nativeSrc": "31171:20:62", - "nodeType": "YulFunctionCall", - "src": "31171:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "31207:12:62", - "nodeType": "YulIdentifier", - "src": "31207:12:62" - }, - { - "kind": "number", - "nativeSrc": "31221:4:62", - "nodeType": "YulLiteral", - "src": "31221:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31203:3:62", - "nodeType": "YulIdentifier", - "src": "31203:3:62" - }, - "nativeSrc": "31203:23:62", - "nodeType": "YulFunctionCall", - "src": "31203:23:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "31197:5:62", - "nodeType": "YulIdentifier", - "src": "31197:5:62" - }, - "nativeSrc": "31197:30:62", - "nodeType": "YulFunctionCall", - "src": "31197:30:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31237:3:62", - "nodeType": "YulLiteral", - "src": "31237:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "31242:1:62", - "nodeType": "YulLiteral", - "src": "31242:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31233:3:62", - "nodeType": "YulIdentifier", - "src": "31233:3:62" - }, - "nativeSrc": "31233:11:62", - "nodeType": "YulFunctionCall", - "src": "31233:11:62" - }, - { - "kind": "number", - "nativeSrc": "31246:1:62", - "nodeType": "YulLiteral", - "src": "31246:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "31229:3:62", - "nodeType": "YulIdentifier", - "src": "31229:3:62" - }, - "nativeSrc": "31229:19:62", - "nodeType": "YulFunctionCall", - "src": "31229:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31193:3:62", - "nodeType": "YulIdentifier", - "src": "31193:3:62" - }, - "nativeSrc": "31193:56:62", - "nodeType": "YulFunctionCall", - "src": "31193:56:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31164:6:62", - "nodeType": "YulIdentifier", - "src": "31164:6:62" - }, - "nativeSrc": "31164:86:62", - "nodeType": "YulFunctionCall", - "src": "31164:86:62" - }, - "nativeSrc": "31164:86:62", - "nodeType": "YulExpressionStatement", - "src": "31164:86:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "31270:9:62", - "nodeType": "YulIdentifier", - "src": "31270:9:62" - }, - { - "kind": "number", - "nativeSrc": "31281:3:62", - "nodeType": "YulLiteral", - "src": "31281:3:62", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31266:3:62", - "nodeType": "YulIdentifier", - "src": "31266:3:62" - }, - "nativeSrc": "31266:19:62", - "nodeType": "YulFunctionCall", - "src": "31266:19:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "31301:12:62", - "nodeType": "YulIdentifier", - "src": "31301:12:62" - }, - { - "kind": "number", - "nativeSrc": "31315:2:62", - "nodeType": "YulLiteral", - "src": "31315:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31297:3:62", - "nodeType": "YulIdentifier", - "src": "31297:3:62" - }, - "nativeSrc": "31297:21:62", - "nodeType": "YulFunctionCall", - "src": "31297:21:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "31291:5:62", - "nodeType": "YulIdentifier", - "src": "31291:5:62" - }, - "nativeSrc": "31291:28:62", - "nodeType": "YulFunctionCall", - "src": "31291:28:62" - }, - { - "kind": "number", - "nativeSrc": "31321:18:62", - "nodeType": "YulLiteral", - "src": "31321:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31287:3:62", - "nodeType": "YulIdentifier", - "src": "31287:3:62" - }, - "nativeSrc": "31287:53:62", - "nodeType": "YulFunctionCall", - "src": "31287:53:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31259:6:62", - "nodeType": "YulIdentifier", - "src": "31259:6:62" - }, - "nativeSrc": "31259:82:62", - "nodeType": "YulFunctionCall", - "src": "31259:82:62" - }, - "nativeSrc": "31259:82:62", - "nodeType": "YulExpressionStatement", - "src": "31259:82:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "31361:9:62", - "nodeType": "YulIdentifier", - "src": "31361:9:62" - }, - { - "kind": "number", - "nativeSrc": "31372:3:62", - "nodeType": "YulLiteral", - "src": "31372:3:62", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31357:3:62", - "nodeType": "YulIdentifier", - "src": "31357:3:62" - }, - "nativeSrc": "31357:19:62", - "nodeType": "YulFunctionCall", - "src": "31357:19:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "31392:12:62", - "nodeType": "YulIdentifier", - "src": "31392:12:62" - }, - { - "kind": "number", - "nativeSrc": "31406:4:62", - "nodeType": "YulLiteral", - "src": "31406:4:62", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31388:3:62", - "nodeType": "YulIdentifier", - "src": "31388:3:62" - }, - "nativeSrc": "31388:23:62", - "nodeType": "YulFunctionCall", - "src": "31388:23:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "31382:5:62", - "nodeType": "YulIdentifier", - "src": "31382:5:62" - }, - "nativeSrc": "31382:30:62", - "nodeType": "YulFunctionCall", - "src": "31382:30:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31422:3:62", - "nodeType": "YulLiteral", - "src": "31422:3:62", - "type": "", - "value": "128" - }, - { - "kind": "number", - "nativeSrc": "31427:1:62", - "nodeType": "YulLiteral", - "src": "31427:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31418:3:62", - "nodeType": "YulIdentifier", - "src": "31418:3:62" - }, - "nativeSrc": "31418:11:62", - "nodeType": "YulFunctionCall", - "src": "31418:11:62" - }, - { - "kind": "number", - "nativeSrc": "31431:1:62", - "nodeType": "YulLiteral", - "src": "31431:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "31414:3:62", - "nodeType": "YulIdentifier", - "src": "31414:3:62" - }, - "nativeSrc": "31414:19:62", - "nodeType": "YulFunctionCall", - "src": "31414:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31378:3:62", - "nodeType": "YulIdentifier", - "src": "31378:3:62" - }, - "nativeSrc": "31378:56:62", - "nodeType": "YulFunctionCall", - "src": "31378:56:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31350:6:62", - "nodeType": "YulIdentifier", - "src": "31350:6:62" - }, - "nativeSrc": "31350:85:62", - "nodeType": "YulFunctionCall", - "src": "31350:85:62" - }, - "nativeSrc": "31350:85:62", - "nodeType": "YulExpressionStatement", - "src": "31350:85:62" - }, - { - "nativeSrc": "31444:51:62", - "nodeType": "YulVariableDeclaration", - "src": "31444:51:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "31476:12:62", - "nodeType": "YulIdentifier", - "src": "31476:12:62" - }, - { - "kind": "number", - "nativeSrc": "31490:3:62", - "nodeType": "YulLiteral", - "src": "31490:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31472:3:62", - "nodeType": "YulIdentifier", - "src": "31472:3:62" - }, - "nativeSrc": "31472:22:62", - "nodeType": "YulFunctionCall", - "src": "31472:22:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "31466:5:62", - "nodeType": "YulIdentifier", - "src": "31466:5:62" - }, - "nativeSrc": "31466:29:62", - "nodeType": "YulFunctionCall", - "src": "31466:29:62" - }, - "variables": [ - { - "name": "memberValue0_1", - "nativeSrc": "31448:14:62", - "nodeType": "YulTypedName", - "src": "31448:14:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "31515:9:62", - "nodeType": "YulIdentifier", - "src": "31515:9:62" - }, - { - "kind": "number", - "nativeSrc": "31526:3:62", - "nodeType": "YulLiteral", - "src": "31526:3:62", - "type": "", - "value": "256" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31511:3:62", - "nodeType": "YulIdentifier", - "src": "31511:3:62" - }, - "nativeSrc": "31511:19:62", - "nodeType": "YulFunctionCall", - "src": "31511:19:62" - }, - { - "kind": "number", - "nativeSrc": "31532:4:62", - "nodeType": "YulLiteral", - "src": "31532:4:62", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31504:6:62", - "nodeType": "YulIdentifier", - "src": "31504:6:62" - }, - "nativeSrc": "31504:33:62", - "nodeType": "YulFunctionCall", - "src": "31504:33:62" - }, - "nativeSrc": "31504:33:62", - "nodeType": "YulExpressionStatement", - "src": "31504:33:62" - }, - { - "nativeSrc": "31546:65:62", - "nodeType": "YulVariableDeclaration", - "src": "31546:65:62", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nativeSrc": "31575:14:62", - "nodeType": "YulIdentifier", - "src": "31575:14:62" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "31595:9:62", - "nodeType": "YulIdentifier", - "src": "31595:9:62" - }, - { - "kind": "number", - "nativeSrc": "31606:3:62", - "nodeType": "YulLiteral", - "src": "31606:3:62", - "type": "", - "value": "288" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31591:3:62", - "nodeType": "YulIdentifier", - "src": "31591:3:62" - }, - "nativeSrc": "31591:19:62", - "nodeType": "YulFunctionCall", - "src": "31591:19:62" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "31557:17:62", - "nodeType": "YulIdentifier", - "src": "31557:17:62" - }, - "nativeSrc": "31557:54:62", - "nodeType": "YulFunctionCall", - "src": "31557:54:62" - }, - "variables": [ - { - "name": "end", - "nativeSrc": "31550:3:62", - "nodeType": "YulTypedName", - "src": "31550:3:62", - "type": "" - } - ] - }, - { - "nativeSrc": "31620:46:62", - "nodeType": "YulVariableDeclaration", - "src": "31620:46:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "31652:6:62", - "nodeType": "YulIdentifier", - "src": "31652:6:62" - }, - { - "kind": "number", - "nativeSrc": "31660:4:62", - "nodeType": "YulLiteral", - "src": "31660:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31648:3:62", - "nodeType": "YulIdentifier", - "src": "31648:3:62" - }, - "nativeSrc": "31648:17:62", - "nodeType": "YulFunctionCall", - "src": "31648:17:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "31642:5:62", - "nodeType": "YulIdentifier", - "src": "31642:5:62" - }, - "nativeSrc": "31642:24:62", - "nodeType": "YulFunctionCall", - "src": "31642:24:62" - }, - "variables": [ - { - "name": "memberValue0_2", - "nativeSrc": "31624:14:62", - "nodeType": "YulTypedName", - "src": "31624:14:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "31686:9:62", - "nodeType": "YulIdentifier", - "src": "31686:9:62" - }, - { - "kind": "number", - "nativeSrc": "31697:4:62", - "nodeType": "YulLiteral", - "src": "31697:4:62", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31682:3:62", - "nodeType": "YulIdentifier", - "src": "31682:3:62" - }, - "nativeSrc": "31682:20:62", - "nodeType": "YulFunctionCall", - "src": "31682:20:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nativeSrc": "31712:3:62", - "nodeType": "YulIdentifier", - "src": "31712:3:62" - }, - { - "name": "headStart", - "nativeSrc": "31717:9:62", - "nodeType": "YulIdentifier", - "src": "31717:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "31708:3:62", - "nodeType": "YulIdentifier", - "src": "31708:3:62" - }, - "nativeSrc": "31708:19:62", - "nodeType": "YulFunctionCall", - "src": "31708:19:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31733:2:62", - "nodeType": "YulLiteral", - "src": "31733:2:62", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "31729:3:62", - "nodeType": "YulIdentifier", - "src": "31729:3:62" - }, - "nativeSrc": "31729:7:62", - "nodeType": "YulFunctionCall", - "src": "31729:7:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31704:3:62", - "nodeType": "YulIdentifier", - "src": "31704:3:62" - }, - "nativeSrc": "31704:33:62", - "nodeType": "YulFunctionCall", - "src": "31704:33:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31675:6:62", - "nodeType": "YulIdentifier", - "src": "31675:6:62" - }, - "nativeSrc": "31675:63:62", - "nodeType": "YulFunctionCall", - "src": "31675:63:62" - }, - "nativeSrc": "31675:63:62", - "nodeType": "YulExpressionStatement", - "src": "31675:63:62" - }, - { - "nativeSrc": "31747:46:62", - "nodeType": "YulAssignment", - "src": "31747:46:62", - "value": { - "arguments": [ - { - "name": "memberValue0_2", - "nativeSrc": "31773:14:62", - "nodeType": "YulIdentifier", - "src": "31773:14:62" - }, - { - "name": "end", - "nativeSrc": "31789:3:62", - "nodeType": "YulIdentifier", - "src": "31789:3:62" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "31755:17:62", - "nodeType": "YulIdentifier", - "src": "31755:17:62" - }, - "nativeSrc": "31755:38:62", - "nodeType": "YulFunctionCall", - "src": "31755:38:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "31747:4:62", - "nodeType": "YulIdentifier", - "src": "31747:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "31813:9:62", - "nodeType": "YulIdentifier", - "src": "31813:9:62" - }, - { - "kind": "number", - "nativeSrc": "31824:4:62", - "nodeType": "YulLiteral", - "src": "31824:4:62", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31809:3:62", - "nodeType": "YulIdentifier", - "src": "31809:3:62" - }, - "nativeSrc": "31809:20:62", - "nodeType": "YulFunctionCall", - "src": "31809:20:62" - }, - { - "name": "value1", - "nativeSrc": "31831:6:62", - "nodeType": "YulIdentifier", - "src": "31831:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31802:6:62", - "nodeType": "YulIdentifier", - "src": "31802:6:62" - }, - "nativeSrc": "31802:36:62", - "nodeType": "YulFunctionCall", - "src": "31802:36:62" - }, - "nativeSrc": "31802:36:62", - "nodeType": "YulExpressionStatement", - "src": "31802:36:62" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__to_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__fromStack_reversed", - "nativeSrc": "30777:1067:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "30921:9:62", - "nodeType": "YulTypedName", - "src": "30921:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "30932:6:62", - "nodeType": "YulTypedName", - "src": "30932:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "30940:6:62", - "nodeType": "YulTypedName", - "src": "30940:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "30951:4:62", - "nodeType": "YulTypedName", - "src": "30951:4:62", - "type": "" - } - ], - "src": "30777:1067:62" - }, - { - "body": { - "nativeSrc": "32011:164:62", - "nodeType": "YulBlock", - "src": "32011:164:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "32050:6:62", - "nodeType": "YulIdentifier", - "src": "32050:6:62" - }, - { - "name": "headStart", - "nativeSrc": "32058:9:62", - "nodeType": "YulIdentifier", - "src": "32058:9:62" - } - ], - "functionName": { - "name": "abi_encode_enum_PaymentTypes", - "nativeSrc": "32021:28:62", - "nodeType": "YulIdentifier", - "src": "32021:28:62" - }, - "nativeSrc": "32021:47:62", - "nodeType": "YulFunctionCall", - "src": "32021:47:62" - }, - "nativeSrc": "32021:47:62", - "nodeType": "YulExpressionStatement", - "src": "32021:47:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "32088:9:62", - "nodeType": "YulIdentifier", - "src": "32088:9:62" - }, - { - "kind": "number", - "nativeSrc": "32099:2:62", - "nodeType": "YulLiteral", - "src": "32099:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32084:3:62", - "nodeType": "YulIdentifier", - "src": "32084:3:62" - }, - "nativeSrc": "32084:18:62", - "nodeType": "YulFunctionCall", - "src": "32084:18:62" - }, - { - "kind": "number", - "nativeSrc": "32104:2:62", - "nodeType": "YulLiteral", - "src": "32104:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32077:6:62", - "nodeType": "YulIdentifier", - "src": "32077:6:62" - }, - "nativeSrc": "32077:30:62", - "nodeType": "YulFunctionCall", - "src": "32077:30:62" - }, - "nativeSrc": "32077:30:62", - "nodeType": "YulExpressionStatement", - "src": "32077:30:62" - }, - { - "nativeSrc": "32116:53:62", - "nodeType": "YulAssignment", - "src": "32116:53:62", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "32142:6:62", - "nodeType": "YulIdentifier", - "src": "32142:6:62" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "32154:9:62", - "nodeType": "YulIdentifier", - "src": "32154:9:62" - }, - { - "kind": "number", - "nativeSrc": "32165:2:62", - "nodeType": "YulLiteral", - "src": "32165:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32150:3:62", - "nodeType": "YulIdentifier", - "src": "32150:3:62" - }, - "nativeSrc": "32150:18:62", - "nodeType": "YulFunctionCall", - "src": "32150:18:62" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "32124:17:62", - "nodeType": "YulIdentifier", - "src": "32124:17:62" - }, - "nativeSrc": "32124:45:62", - "nodeType": "YulFunctionCall", - "src": "32124:45:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "32116:4:62", - "nodeType": "YulIdentifier", - "src": "32116:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_enum$_PaymentTypes_$2166_t_bytes_memory_ptr__to_t_uint8_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "31849:326:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "31972:9:62", - "nodeType": "YulTypedName", - "src": "31972:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "31983:6:62", - "nodeType": "YulTypedName", - "src": "31983:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "31991:6:62", - "nodeType": "YulTypedName", - "src": "31991:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "32002:4:62", - "nodeType": "YulTypedName", - "src": "32002:4:62", - "type": "" - } - ], - "src": "31849:326:62" - }, - { - "body": { - "nativeSrc": "32337:162:62", - "nodeType": "YulBlock", - "src": "32337:162:62", - "statements": [ - { - "nativeSrc": "32347:26:62", - "nodeType": "YulAssignment", - "src": "32347:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "32359:9:62", - "nodeType": "YulIdentifier", - "src": "32359:9:62" - }, - { - "kind": "number", - "nativeSrc": "32370:2:62", - "nodeType": "YulLiteral", - "src": "32370:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32355:3:62", - "nodeType": "YulIdentifier", - "src": "32355:3:62" - }, - "nativeSrc": "32355:18:62", - "nodeType": "YulFunctionCall", - "src": "32355:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "32347:4:62", - "nodeType": "YulIdentifier", - "src": "32347:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "32389:9:62", - "nodeType": "YulIdentifier", - "src": "32389:9:62" - }, - { - "name": "value0", - "nativeSrc": "32400:6:62", - "nodeType": "YulIdentifier", - "src": "32400:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32382:6:62", - "nodeType": "YulIdentifier", - "src": "32382:6:62" - }, - "nativeSrc": "32382:25:62", - "nodeType": "YulFunctionCall", - "src": "32382:25:62" - }, - "nativeSrc": "32382:25:62", - "nodeType": "YulExpressionStatement", - "src": "32382:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "32427:9:62", - "nodeType": "YulIdentifier", - "src": "32427:9:62" - }, - { - "kind": "number", - "nativeSrc": "32438:2:62", - "nodeType": "YulLiteral", - "src": "32438:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32423:3:62", - "nodeType": "YulIdentifier", - "src": "32423:3:62" - }, - "nativeSrc": "32423:18:62", - "nodeType": "YulFunctionCall", - "src": "32423:18:62" - }, - { - "name": "value1", - "nativeSrc": "32443:6:62", - "nodeType": "YulIdentifier", - "src": "32443:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32416:6:62", - "nodeType": "YulIdentifier", - "src": "32416:6:62" - }, - "nativeSrc": "32416:34:62", - "nodeType": "YulFunctionCall", - "src": "32416:34:62" - }, - "nativeSrc": "32416:34:62", - "nodeType": "YulExpressionStatement", - "src": "32416:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "32470:9:62", - "nodeType": "YulIdentifier", - "src": "32470:9:62" - }, - { - "kind": "number", - "nativeSrc": "32481:2:62", - "nodeType": "YulLiteral", - "src": "32481:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32466:3:62", - "nodeType": "YulIdentifier", - "src": "32466:3:62" - }, - "nativeSrc": "32466:18:62", - "nodeType": "YulFunctionCall", - "src": "32466:18:62" - }, - { - "name": "value2", - "nativeSrc": "32486:6:62", - "nodeType": "YulIdentifier", - "src": "32486:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32459:6:62", - "nodeType": "YulIdentifier", - "src": "32459:6:62" - }, - "nativeSrc": "32459:34:62", - "nodeType": "YulFunctionCall", - "src": "32459:34:62" - }, - "nativeSrc": "32459:34:62", - "nodeType": "YulExpressionStatement", - "src": "32459:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "32180:319:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "32290:9:62", - "nodeType": "YulTypedName", - "src": "32290:9:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "32301:6:62", - "nodeType": "YulTypedName", - "src": "32301:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "32309:6:62", - "nodeType": "YulTypedName", - "src": "32309:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "32317:6:62", - "nodeType": "YulTypedName", - "src": "32317:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "32328:4:62", - "nodeType": "YulTypedName", - "src": "32328:4:62", - "type": "" - } - ], - "src": "32180:319:62" - }, - { - "body": { - "nativeSrc": "32556:116:62", - "nodeType": "YulBlock", - "src": "32556:116:62", - "statements": [ - { - "nativeSrc": "32566:20:62", - "nodeType": "YulAssignment", - "src": "32566:20:62", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "32581:1:62", - "nodeType": "YulIdentifier", - "src": "32581:1:62" - }, - { - "name": "y", - "nativeSrc": "32584:1:62", - "nodeType": "YulIdentifier", - "src": "32584:1:62" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "32577:3:62", - "nodeType": "YulIdentifier", - "src": "32577:3:62" - }, - "nativeSrc": "32577:9:62", - "nodeType": "YulFunctionCall", - "src": "32577:9:62" - }, - "variableNames": [ - { - "name": "product", - "nativeSrc": "32566:7:62", - "nodeType": "YulIdentifier", - "src": "32566:7:62" - } - ] - }, - { - "body": { - "nativeSrc": "32644:22:62", - "nodeType": "YulBlock", - "src": "32644:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "32646:16:62", - "nodeType": "YulIdentifier", - "src": "32646:16:62" - }, - "nativeSrc": "32646:18:62", - "nodeType": "YulFunctionCall", - "src": "32646:18:62" - }, - "nativeSrc": "32646:18:62", - "nodeType": "YulExpressionStatement", - "src": "32646:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nativeSrc": "32615:1:62", - "nodeType": "YulIdentifier", - "src": "32615:1:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "32608:6:62", - "nodeType": "YulIdentifier", - "src": "32608:6:62" - }, - "nativeSrc": "32608:9:62", - "nodeType": "YulFunctionCall", - "src": "32608:9:62" - }, - { - "arguments": [ - { - "name": "y", - "nativeSrc": "32622:1:62", - "nodeType": "YulIdentifier", - "src": "32622:1:62" - }, - { - "arguments": [ - { - "name": "product", - "nativeSrc": "32629:7:62", - "nodeType": "YulIdentifier", - "src": "32629:7:62" - }, - { - "name": "x", - "nativeSrc": "32638:1:62", - "nodeType": "YulIdentifier", - "src": "32638:1:62" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "32625:3:62", - "nodeType": "YulIdentifier", - "src": "32625:3:62" - }, - "nativeSrc": "32625:15:62", - "nodeType": "YulFunctionCall", - "src": "32625:15:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "32619:2:62", - "nodeType": "YulIdentifier", - "src": "32619:2:62" - }, - "nativeSrc": "32619:22:62", - "nodeType": "YulFunctionCall", - "src": "32619:22:62" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "32605:2:62", - "nodeType": "YulIdentifier", - "src": "32605:2:62" - }, - "nativeSrc": "32605:37:62", - "nodeType": "YulFunctionCall", - "src": "32605:37:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "32598:6:62", - "nodeType": "YulIdentifier", - "src": "32598:6:62" - }, - "nativeSrc": "32598:45:62", - "nodeType": "YulFunctionCall", - "src": "32598:45:62" - }, - "nativeSrc": "32595:71:62", - "nodeType": "YulIf", - "src": "32595:71:62" - } - ] - }, - "name": "checked_mul_t_uint256", - "nativeSrc": "32504:168:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "32535:1:62", - "nodeType": "YulTypedName", - "src": "32535:1:62", - "type": "" - }, - { - "name": "y", - "nativeSrc": "32538:1:62", - "nodeType": "YulTypedName", - "src": "32538:1:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nativeSrc": "32544:7:62", - "nodeType": "YulTypedName", - "src": "32544:7:62", - "type": "" - } - ], - "src": "32504:168:62" - }, - { - "body": { - "nativeSrc": "32806:119:62", - "nodeType": "YulBlock", - "src": "32806:119:62", - "statements": [ - { - "nativeSrc": "32816:26:62", - "nodeType": "YulAssignment", - "src": "32816:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "32828:9:62", - "nodeType": "YulIdentifier", - "src": "32828:9:62" - }, - { - "kind": "number", - "nativeSrc": "32839:2:62", - "nodeType": "YulLiteral", - "src": "32839:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32824:3:62", - "nodeType": "YulIdentifier", - "src": "32824:3:62" - }, - "nativeSrc": "32824:18:62", - "nodeType": "YulFunctionCall", - "src": "32824:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "32816:4:62", - "nodeType": "YulIdentifier", - "src": "32816:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "32858:9:62", - "nodeType": "YulIdentifier", - "src": "32858:9:62" - }, - { - "name": "value0", - "nativeSrc": "32869:6:62", - "nodeType": "YulIdentifier", - "src": "32869:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32851:6:62", - "nodeType": "YulIdentifier", - "src": "32851:6:62" - }, - "nativeSrc": "32851:25:62", - "nodeType": "YulFunctionCall", - "src": "32851:25:62" - }, - "nativeSrc": "32851:25:62", - "nodeType": "YulExpressionStatement", - "src": "32851:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "32896:9:62", - "nodeType": "YulIdentifier", - "src": "32896:9:62" - }, - { - "kind": "number", - "nativeSrc": "32907:2:62", - "nodeType": "YulLiteral", - "src": "32907:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32892:3:62", - "nodeType": "YulIdentifier", - "src": "32892:3:62" - }, - "nativeSrc": "32892:18:62", - "nodeType": "YulFunctionCall", - "src": "32892:18:62" - }, - { - "name": "value1", - "nativeSrc": "32912:6:62", - "nodeType": "YulIdentifier", - "src": "32912:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32885:6:62", - "nodeType": "YulIdentifier", - "src": "32885:6:62" - }, - "nativeSrc": "32885:34:62", - "nodeType": "YulFunctionCall", - "src": "32885:34:62" - }, - "nativeSrc": "32885:34:62", - "nodeType": "YulExpressionStatement", - "src": "32885:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed", - "nativeSrc": "32677:248:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "32767:9:62", - "nodeType": "YulTypedName", - "src": "32767:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "32778:6:62", - "nodeType": "YulTypedName", - "src": "32778:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "32786:6:62", - "nodeType": "YulTypedName", - "src": "32786:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "32797:4:62", - "nodeType": "YulTypedName", - "src": "32797:4:62", - "type": "" - } - ], - "src": "32677:248:62" - }, - { - "body": { - "nativeSrc": "33102:236:62", - "nodeType": "YulBlock", - "src": "33102:236:62", - "statements": [ - { - "nativeSrc": "33112:26:62", - "nodeType": "YulAssignment", - "src": "33112:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33124:9:62", - "nodeType": "YulIdentifier", - "src": "33124:9:62" - }, - { - "kind": "number", - "nativeSrc": "33135:2:62", - "nodeType": "YulLiteral", - "src": "33135:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33120:3:62", - "nodeType": "YulIdentifier", - "src": "33120:3:62" - }, - "nativeSrc": "33120:18:62", - "nodeType": "YulFunctionCall", - "src": "33120:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "33112:4:62", - "nodeType": "YulIdentifier", - "src": "33112:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33154:9:62", - "nodeType": "YulIdentifier", - "src": "33154:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "33169:6:62", - "nodeType": "YulIdentifier", - "src": "33169:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "33185:3:62", - "nodeType": "YulLiteral", - "src": "33185:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "33190:1:62", - "nodeType": "YulLiteral", - "src": "33190:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "33181:3:62", - "nodeType": "YulIdentifier", - "src": "33181:3:62" - }, - "nativeSrc": "33181:11:62", - "nodeType": "YulFunctionCall", - "src": "33181:11:62" - }, - { - "kind": "number", - "nativeSrc": "33194:1:62", - "nodeType": "YulLiteral", - "src": "33194:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "33177:3:62", - "nodeType": "YulIdentifier", - "src": "33177:3:62" - }, - "nativeSrc": "33177:19:62", - "nodeType": "YulFunctionCall", - "src": "33177:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "33165:3:62", - "nodeType": "YulIdentifier", - "src": "33165:3:62" - }, - "nativeSrc": "33165:32:62", - "nodeType": "YulFunctionCall", - "src": "33165:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33147:6:62", - "nodeType": "YulIdentifier", - "src": "33147:6:62" - }, - "nativeSrc": "33147:51:62", - "nodeType": "YulFunctionCall", - "src": "33147:51:62" - }, - "nativeSrc": "33147:51:62", - "nodeType": "YulExpressionStatement", - "src": "33147:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33218:9:62", - "nodeType": "YulIdentifier", - "src": "33218:9:62" - }, - { - "kind": "number", - "nativeSrc": "33229:2:62", - "nodeType": "YulLiteral", - "src": "33229:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33214:3:62", - "nodeType": "YulIdentifier", - "src": "33214:3:62" - }, - "nativeSrc": "33214:18:62", - "nodeType": "YulFunctionCall", - "src": "33214:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "33238:6:62", - "nodeType": "YulIdentifier", - "src": "33238:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "33254:3:62", - "nodeType": "YulLiteral", - "src": "33254:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "33259:1:62", - "nodeType": "YulLiteral", - "src": "33259:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "33250:3:62", - "nodeType": "YulIdentifier", - "src": "33250:3:62" - }, - "nativeSrc": "33250:11:62", - "nodeType": "YulFunctionCall", - "src": "33250:11:62" - }, - { - "kind": "number", - "nativeSrc": "33263:1:62", - "nodeType": "YulLiteral", - "src": "33263:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "33246:3:62", - "nodeType": "YulIdentifier", - "src": "33246:3:62" - }, - "nativeSrc": "33246:19:62", - "nodeType": "YulFunctionCall", - "src": "33246:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "33234:3:62", - "nodeType": "YulIdentifier", - "src": "33234:3:62" - }, - "nativeSrc": "33234:32:62", - "nodeType": "YulFunctionCall", - "src": "33234:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33207:6:62", - "nodeType": "YulIdentifier", - "src": "33207:6:62" - }, - "nativeSrc": "33207:60:62", - "nodeType": "YulFunctionCall", - "src": "33207:60:62" - }, - "nativeSrc": "33207:60:62", - "nodeType": "YulExpressionStatement", - "src": "33207:60:62" - }, - { - "expression": { - "arguments": [ - { - "name": "value2", - "nativeSrc": "33305:6:62", - "nodeType": "YulIdentifier", - "src": "33305:6:62" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33317:9:62", - "nodeType": "YulIdentifier", - "src": "33317:9:62" - }, - { - "kind": "number", - "nativeSrc": "33328:2:62", - "nodeType": "YulLiteral", - "src": "33328:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33313:3:62", - "nodeType": "YulIdentifier", - "src": "33313:3:62" - }, - "nativeSrc": "33313:18:62", - "nodeType": "YulFunctionCall", - "src": "33313:18:62" - } - ], - "functionName": { - "name": "abi_encode_enum_PaymentTypes", - "nativeSrc": "33276:28:62", - "nodeType": "YulIdentifier", - "src": "33276:28:62" - }, - "nativeSrc": "33276:56:62", - "nodeType": "YulFunctionCall", - "src": "33276:56:62" - }, - "nativeSrc": "33276:56:62", - "nodeType": "YulExpressionStatement", - "src": "33276:56:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_enum$_PaymentTypes_$2166__to_t_address_t_address_t_uint8__fromStack_reversed", - "nativeSrc": "32930:408:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "33055:9:62", - "nodeType": "YulTypedName", - "src": "33055:9:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "33066:6:62", - "nodeType": "YulTypedName", - "src": "33066:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "33074:6:62", - "nodeType": "YulTypedName", - "src": "33074:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "33082:6:62", - "nodeType": "YulTypedName", - "src": "33082:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "33093:4:62", - "nodeType": "YulTypedName", - "src": "33093:4:62", - "type": "" - } - ], - "src": "32930:408:62" - }, - { - "body": { - "nativeSrc": "33456:708:62", - "nodeType": "YulBlock", - "src": "33456:708:62", - "statements": [ - { - "nativeSrc": "33466:43:62", - "nodeType": "YulVariableDeclaration", - "src": "33466:43:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "33484:7:62", - "nodeType": "YulIdentifier", - "src": "33484:7:62" - }, - { - "name": "headStart", - "nativeSrc": "33493:9:62", - "nodeType": "YulIdentifier", - "src": "33493:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "33480:3:62", - "nodeType": "YulIdentifier", - "src": "33480:3:62" - }, - "nativeSrc": "33480:23:62", - "nodeType": "YulFunctionCall", - "src": "33480:23:62" - }, - { - "kind": "number", - "nativeSrc": "33505:3:62", - "nodeType": "YulLiteral", - "src": "33505:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "33476:3:62", - "nodeType": "YulIdentifier", - "src": "33476:3:62" - }, - "nativeSrc": "33476:33:62", - "nodeType": "YulFunctionCall", - "src": "33476:33:62" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "33470:2:62", - "nodeType": "YulTypedName", - "src": "33470:2:62", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "33524:16:62", - "nodeType": "YulBlock", - "src": "33524:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "33533:1:62", - "nodeType": "YulLiteral", - "src": "33533:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "33536:1:62", - "nodeType": "YulLiteral", - "src": "33536:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "33526:6:62", - "nodeType": "YulIdentifier", - "src": "33526:6:62" - }, - "nativeSrc": "33526:12:62", - "nodeType": "YulFunctionCall", - "src": "33526:12:62" - }, - "nativeSrc": "33526:12:62", - "nodeType": "YulExpressionStatement", - "src": "33526:12:62" - } - ] - }, - "condition": { - "name": "_1", - "nativeSrc": "33521:2:62", - "nodeType": "YulIdentifier", - "src": "33521:2:62" - }, - "nativeSrc": "33518:22:62", - "nodeType": "YulIf", - "src": "33518:22:62" - }, - { - "nativeSrc": "33549:7:62", - "nodeType": "YulAssignment", - "src": "33549:7:62", - "value": { - "kind": "number", - "nativeSrc": "33555:1:62", - "nodeType": "YulLiteral", - "src": "33555:1:62", - "type": "", - "value": "0" - }, - "variableNames": [ - { - "name": "_1", - "nativeSrc": "33549:2:62", - "nodeType": "YulIdentifier", - "src": "33549:2:62" - } - ] - }, - { - "nativeSrc": "33565:30:62", - "nodeType": "YulVariableDeclaration", - "src": "33565:30:62", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory", - "nativeSrc": "33578:15:62", - "nodeType": "YulIdentifier", - "src": "33578:15:62" - }, - "nativeSrc": "33578:17:62", - "nodeType": "YulFunctionCall", - "src": "33578:17:62" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "33569:5:62", - "nodeType": "YulTypedName", - "src": "33569:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "33604:17:62", - "nodeType": "YulVariableDeclaration", - "src": "33604:17:62", - "value": { - "name": "_1", - "nativeSrc": "33619:2:62", - "nodeType": "YulIdentifier", - "src": "33619:2:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "33608:7:62", - "nodeType": "YulTypedName", - "src": "33608:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "33630:27:62", - "nodeType": "YulAssignment", - "src": "33630:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33647:9:62", - "nodeType": "YulIdentifier", - "src": "33647:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33641:5:62", - "nodeType": "YulIdentifier", - "src": "33641:5:62" - }, - "nativeSrc": "33641:16:62", - "nodeType": "YulFunctionCall", - "src": "33641:16:62" - }, - "variableNames": [ - { - "name": "value_1", - "nativeSrc": "33630:7:62", - "nodeType": "YulIdentifier", - "src": "33630:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "33673:5:62", - "nodeType": "YulIdentifier", - "src": "33673:5:62" - }, - { - "name": "value_1", - "nativeSrc": "33680:7:62", - "nodeType": "YulIdentifier", - "src": "33680:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33666:6:62", - "nodeType": "YulIdentifier", - "src": "33666:6:62" - }, - "nativeSrc": "33666:22:62", - "nodeType": "YulFunctionCall", - "src": "33666:22:62" - }, - "nativeSrc": "33666:22:62", - "nodeType": "YulExpressionStatement", - "src": "33666:22:62" - }, - { - "nativeSrc": "33697:17:62", - "nodeType": "YulVariableDeclaration", - "src": "33697:17:62", - "value": { - "name": "_1", - "nativeSrc": "33712:2:62", - "nodeType": "YulIdentifier", - "src": "33712:2:62" - }, - "variables": [ - { - "name": "value_2", - "nativeSrc": "33701:7:62", - "nodeType": "YulTypedName", - "src": "33701:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "33723:36:62", - "nodeType": "YulAssignment", - "src": "33723:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33744:9:62", - "nodeType": "YulIdentifier", - "src": "33744:9:62" - }, - { - "kind": "number", - "nativeSrc": "33755:2:62", - "nodeType": "YulLiteral", - "src": "33755:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33740:3:62", - "nodeType": "YulIdentifier", - "src": "33740:3:62" - }, - "nativeSrc": "33740:18:62", - "nodeType": "YulFunctionCall", - "src": "33740:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33734:5:62", - "nodeType": "YulIdentifier", - "src": "33734:5:62" - }, - "nativeSrc": "33734:25:62", - "nodeType": "YulFunctionCall", - "src": "33734:25:62" - }, - "variableNames": [ - { - "name": "value_2", - "nativeSrc": "33723:7:62", - "nodeType": "YulIdentifier", - "src": "33723:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "33779:5:62", - "nodeType": "YulIdentifier", - "src": "33779:5:62" - }, - { - "kind": "number", - "nativeSrc": "33786:2:62", - "nodeType": "YulLiteral", - "src": "33786:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33775:3:62", - "nodeType": "YulIdentifier", - "src": "33775:3:62" - }, - "nativeSrc": "33775:14:62", - "nodeType": "YulFunctionCall", - "src": "33775:14:62" - }, - { - "name": "value_2", - "nativeSrc": "33791:7:62", - "nodeType": "YulIdentifier", - "src": "33791:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33768:6:62", - "nodeType": "YulIdentifier", - "src": "33768:6:62" - }, - "nativeSrc": "33768:31:62", - "nodeType": "YulFunctionCall", - "src": "33768:31:62" - }, - "nativeSrc": "33768:31:62", - "nodeType": "YulExpressionStatement", - "src": "33768:31:62" - }, - { - "nativeSrc": "33808:17:62", - "nodeType": "YulVariableDeclaration", - "src": "33808:17:62", - "value": { - "name": "_1", - "nativeSrc": "33823:2:62", - "nodeType": "YulIdentifier", - "src": "33823:2:62" - }, - "variables": [ - { - "name": "value_3", - "nativeSrc": "33812:7:62", - "nodeType": "YulTypedName", - "src": "33812:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "33834:36:62", - "nodeType": "YulAssignment", - "src": "33834:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33855:9:62", - "nodeType": "YulIdentifier", - "src": "33855:9:62" - }, - { - "kind": "number", - "nativeSrc": "33866:2:62", - "nodeType": "YulLiteral", - "src": "33866:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33851:3:62", - "nodeType": "YulIdentifier", - "src": "33851:3:62" - }, - "nativeSrc": "33851:18:62", - "nodeType": "YulFunctionCall", - "src": "33851:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33845:5:62", - "nodeType": "YulIdentifier", - "src": "33845:5:62" - }, - "nativeSrc": "33845:25:62", - "nodeType": "YulFunctionCall", - "src": "33845:25:62" - }, - "variableNames": [ - { - "name": "value_3", - "nativeSrc": "33834:7:62", - "nodeType": "YulIdentifier", - "src": "33834:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "33890:5:62", - "nodeType": "YulIdentifier", - "src": "33890:5:62" - }, - { - "kind": "number", - "nativeSrc": "33897:2:62", - "nodeType": "YulLiteral", - "src": "33897:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33886:3:62", - "nodeType": "YulIdentifier", - "src": "33886:3:62" - }, - "nativeSrc": "33886:14:62", - "nodeType": "YulFunctionCall", - "src": "33886:14:62" - }, - { - "name": "value_3", - "nativeSrc": "33902:7:62", - "nodeType": "YulIdentifier", - "src": "33902:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33879:6:62", - "nodeType": "YulIdentifier", - "src": "33879:6:62" - }, - "nativeSrc": "33879:31:62", - "nodeType": "YulFunctionCall", - "src": "33879:31:62" - }, - "nativeSrc": "33879:31:62", - "nodeType": "YulExpressionStatement", - "src": "33879:31:62" - }, - { - "nativeSrc": "33919:17:62", - "nodeType": "YulVariableDeclaration", - "src": "33919:17:62", - "value": { - "name": "_1", - "nativeSrc": "33934:2:62", - "nodeType": "YulIdentifier", - "src": "33934:2:62" - }, - "variables": [ - { - "name": "value_4", - "nativeSrc": "33923:7:62", - "nodeType": "YulTypedName", - "src": "33923:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "33945:36:62", - "nodeType": "YulAssignment", - "src": "33945:36:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33966:9:62", - "nodeType": "YulIdentifier", - "src": "33966:9:62" - }, - { - "kind": "number", - "nativeSrc": "33977:2:62", - "nodeType": "YulLiteral", - "src": "33977:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33962:3:62", - "nodeType": "YulIdentifier", - "src": "33962:3:62" - }, - "nativeSrc": "33962:18:62", - "nodeType": "YulFunctionCall", - "src": "33962:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33956:5:62", - "nodeType": "YulIdentifier", - "src": "33956:5:62" - }, - "nativeSrc": "33956:25:62", - "nodeType": "YulFunctionCall", - "src": "33956:25:62" - }, - "variableNames": [ - { - "name": "value_4", - "nativeSrc": "33945:7:62", - "nodeType": "YulIdentifier", - "src": "33945:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "34001:5:62", - "nodeType": "YulIdentifier", - "src": "34001:5:62" - }, - { - "kind": "number", - "nativeSrc": "34008:2:62", - "nodeType": "YulLiteral", - "src": "34008:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33997:3:62", - "nodeType": "YulIdentifier", - "src": "33997:3:62" - }, - "nativeSrc": "33997:14:62", - "nodeType": "YulFunctionCall", - "src": "33997:14:62" - }, - { - "name": "value_4", - "nativeSrc": "34013:7:62", - "nodeType": "YulIdentifier", - "src": "34013:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33990:6:62", - "nodeType": "YulIdentifier", - "src": "33990:6:62" - }, - "nativeSrc": "33990:31:62", - "nodeType": "YulFunctionCall", - "src": "33990:31:62" - }, - "nativeSrc": "33990:31:62", - "nodeType": "YulExpressionStatement", - "src": "33990:31:62" - }, - { - "nativeSrc": "34030:17:62", - "nodeType": "YulVariableDeclaration", - "src": "34030:17:62", - "value": { - "name": "_1", - "nativeSrc": "34045:2:62", - "nodeType": "YulIdentifier", - "src": "34045:2:62" - }, - "variables": [ - { - "name": "value_5", - "nativeSrc": "34034:7:62", - "nodeType": "YulTypedName", - "src": "34034:7:62", - "type": "" - } - ] - }, - { - "nativeSrc": "34056:37:62", - "nodeType": "YulAssignment", - "src": "34056:37:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34077:9:62", - "nodeType": "YulIdentifier", - "src": "34077:9:62" - }, - { - "kind": "number", - "nativeSrc": "34088:3:62", - "nodeType": "YulLiteral", - "src": "34088:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34073:3:62", - "nodeType": "YulIdentifier", - "src": "34073:3:62" - }, - "nativeSrc": "34073:19:62", - "nodeType": "YulFunctionCall", - "src": "34073:19:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "34067:5:62", - "nodeType": "YulIdentifier", - "src": "34067:5:62" - }, - "nativeSrc": "34067:26:62", - "nodeType": "YulFunctionCall", - "src": "34067:26:62" - }, - "variableNames": [ - { - "name": "value_5", - "nativeSrc": "34056:7:62", - "nodeType": "YulIdentifier", - "src": "34056:7:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "34113:5:62", - "nodeType": "YulIdentifier", - "src": "34113:5:62" - }, - { - "kind": "number", - "nativeSrc": "34120:3:62", - "nodeType": "YulLiteral", - "src": "34120:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34109:3:62", - "nodeType": "YulIdentifier", - "src": "34109:3:62" - }, - "nativeSrc": "34109:15:62", - "nodeType": "YulFunctionCall", - "src": "34109:15:62" - }, - { - "name": "value_5", - "nativeSrc": "34126:7:62", - "nodeType": "YulIdentifier", - "src": "34126:7:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34102:6:62", - "nodeType": "YulIdentifier", - "src": "34102:6:62" - }, - "nativeSrc": "34102:32:62", - "nodeType": "YulFunctionCall", - "src": "34102:32:62" - }, - "nativeSrc": "34102:32:62", - "nodeType": "YulExpressionStatement", - "src": "34102:32:62" - }, - { - "nativeSrc": "34143:15:62", - "nodeType": "YulAssignment", - "src": "34143:15:62", - "value": { - "name": "value", - "nativeSrc": "34153:5:62", - "nodeType": "YulIdentifier", - "src": "34153:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "34143:6:62", - "nodeType": "YulIdentifier", - "src": "34143:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory", - "nativeSrc": "33343:821:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "33422:9:62", - "nodeType": "YulTypedName", - "src": "33422:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "33433:7:62", - "nodeType": "YulTypedName", - "src": "33433:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "33445:6:62", - "nodeType": "YulTypedName", - "src": "33445:6:62", - "type": "" - } - ], - "src": "33343:821:62" - }, - { - "body": { - "nativeSrc": "34326:214:62", - "nodeType": "YulBlock", - "src": "34326:214:62", - "statements": [ - { - "nativeSrc": "34336:26:62", - "nodeType": "YulAssignment", - "src": "34336:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34348:9:62", - "nodeType": "YulIdentifier", - "src": "34348:9:62" - }, - { - "kind": "number", - "nativeSrc": "34359:2:62", - "nodeType": "YulLiteral", - "src": "34359:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34344:3:62", - "nodeType": "YulIdentifier", - "src": "34344:3:62" - }, - "nativeSrc": "34344:18:62", - "nodeType": "YulFunctionCall", - "src": "34344:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "34336:4:62", - "nodeType": "YulIdentifier", - "src": "34336:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34378:9:62", - "nodeType": "YulIdentifier", - "src": "34378:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "34393:6:62", - "nodeType": "YulIdentifier", - "src": "34393:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "34409:3:62", - "nodeType": "YulLiteral", - "src": "34409:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "34414:1:62", - "nodeType": "YulLiteral", - "src": "34414:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "34405:3:62", - "nodeType": "YulIdentifier", - "src": "34405:3:62" - }, - "nativeSrc": "34405:11:62", - "nodeType": "YulFunctionCall", - "src": "34405:11:62" - }, - { - "kind": "number", - "nativeSrc": "34418:1:62", - "nodeType": "YulLiteral", - "src": "34418:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "34401:3:62", - "nodeType": "YulIdentifier", - "src": "34401:3:62" - }, - "nativeSrc": "34401:19:62", - "nodeType": "YulFunctionCall", - "src": "34401:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "34389:3:62", - "nodeType": "YulIdentifier", - "src": "34389:3:62" - }, - "nativeSrc": "34389:32:62", - "nodeType": "YulFunctionCall", - "src": "34389:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34371:6:62", - "nodeType": "YulIdentifier", - "src": "34371:6:62" - }, - "nativeSrc": "34371:51:62", - "nodeType": "YulFunctionCall", - "src": "34371:51:62" - }, - "nativeSrc": "34371:51:62", - "nodeType": "YulExpressionStatement", - "src": "34371:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34442:9:62", - "nodeType": "YulIdentifier", - "src": "34442:9:62" - }, - { - "kind": "number", - "nativeSrc": "34453:2:62", - "nodeType": "YulLiteral", - "src": "34453:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34438:3:62", - "nodeType": "YulIdentifier", - "src": "34438:3:62" - }, - "nativeSrc": "34438:18:62", - "nodeType": "YulFunctionCall", - "src": "34438:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "34462:6:62", - "nodeType": "YulIdentifier", - "src": "34462:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "34478:3:62", - "nodeType": "YulLiteral", - "src": "34478:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "34483:1:62", - "nodeType": "YulLiteral", - "src": "34483:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "34474:3:62", - "nodeType": "YulIdentifier", - "src": "34474:3:62" - }, - "nativeSrc": "34474:11:62", - "nodeType": "YulFunctionCall", - "src": "34474:11:62" - }, - { - "kind": "number", - "nativeSrc": "34487:1:62", - "nodeType": "YulLiteral", - "src": "34487:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "34470:3:62", - "nodeType": "YulIdentifier", - "src": "34470:3:62" - }, - "nativeSrc": "34470:19:62", - "nodeType": "YulFunctionCall", - "src": "34470:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "34458:3:62", - "nodeType": "YulIdentifier", - "src": "34458:3:62" - }, - "nativeSrc": "34458:32:62", - "nodeType": "YulFunctionCall", - "src": "34458:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34431:6:62", - "nodeType": "YulIdentifier", - "src": "34431:6:62" - }, - "nativeSrc": "34431:60:62", - "nodeType": "YulFunctionCall", - "src": "34431:60:62" - }, - "nativeSrc": "34431:60:62", - "nodeType": "YulExpressionStatement", - "src": "34431:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34511:9:62", - "nodeType": "YulIdentifier", - "src": "34511:9:62" - }, - { - "kind": "number", - "nativeSrc": "34522:2:62", - "nodeType": "YulLiteral", - "src": "34522:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34507:3:62", - "nodeType": "YulIdentifier", - "src": "34507:3:62" - }, - "nativeSrc": "34507:18:62", - "nodeType": "YulFunctionCall", - "src": "34507:18:62" - }, - { - "name": "value2", - "nativeSrc": "34527:6:62", - "nodeType": "YulIdentifier", - "src": "34527:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34500:6:62", - "nodeType": "YulIdentifier", - "src": "34500:6:62" - }, - "nativeSrc": "34500:34:62", - "nodeType": "YulFunctionCall", - "src": "34500:34:62" - }, - "nativeSrc": "34500:34:62", - "nodeType": "YulExpressionStatement", - "src": "34500:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", - "nativeSrc": "34169:371:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "34279:9:62", - "nodeType": "YulTypedName", - "src": "34279:9:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "34290:6:62", - "nodeType": "YulTypedName", - "src": "34290:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "34298:6:62", - "nodeType": "YulTypedName", - "src": "34298:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "34306:6:62", - "nodeType": "YulTypedName", - "src": "34306:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "34317:4:62", - "nodeType": "YulTypedName", - "src": "34317:4:62", - "type": "" - } - ], - "src": "34169:371:62" - }, - { - "body": { - "nativeSrc": "34758:250:62", - "nodeType": "YulBlock", - "src": "34758:250:62", - "statements": [ - { - "nativeSrc": "34768:27:62", - "nodeType": "YulAssignment", - "src": "34768:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34780:9:62", - "nodeType": "YulIdentifier", - "src": "34780:9:62" - }, - { - "kind": "number", - "nativeSrc": "34791:3:62", - "nodeType": "YulLiteral", - "src": "34791:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34776:3:62", - "nodeType": "YulIdentifier", - "src": "34776:3:62" - }, - "nativeSrc": "34776:19:62", - "nodeType": "YulFunctionCall", - "src": "34776:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "34768:4:62", - "nodeType": "YulIdentifier", - "src": "34768:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34811:9:62", - "nodeType": "YulIdentifier", - "src": "34811:9:62" - }, - { - "name": "value0", - "nativeSrc": "34822:6:62", - "nodeType": "YulIdentifier", - "src": "34822:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34804:6:62", - "nodeType": "YulIdentifier", - "src": "34804:6:62" - }, - "nativeSrc": "34804:25:62", - "nodeType": "YulFunctionCall", - "src": "34804:25:62" - }, - "nativeSrc": "34804:25:62", - "nodeType": "YulExpressionStatement", - "src": "34804:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34849:9:62", - "nodeType": "YulIdentifier", - "src": "34849:9:62" - }, - { - "kind": "number", - "nativeSrc": "34860:2:62", - "nodeType": "YulLiteral", - "src": "34860:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34845:3:62", - "nodeType": "YulIdentifier", - "src": "34845:3:62" - }, - "nativeSrc": "34845:18:62", - "nodeType": "YulFunctionCall", - "src": "34845:18:62" - }, - { - "name": "value1", - "nativeSrc": "34865:6:62", - "nodeType": "YulIdentifier", - "src": "34865:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34838:6:62", - "nodeType": "YulIdentifier", - "src": "34838:6:62" - }, - "nativeSrc": "34838:34:62", - "nodeType": "YulFunctionCall", - "src": "34838:34:62" - }, - "nativeSrc": "34838:34:62", - "nodeType": "YulExpressionStatement", - "src": "34838:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34892:9:62", - "nodeType": "YulIdentifier", - "src": "34892:9:62" - }, - { - "kind": "number", - "nativeSrc": "34903:2:62", - "nodeType": "YulLiteral", - "src": "34903:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34888:3:62", - "nodeType": "YulIdentifier", - "src": "34888:3:62" - }, - "nativeSrc": "34888:18:62", - "nodeType": "YulFunctionCall", - "src": "34888:18:62" - }, - { - "name": "value2", - "nativeSrc": "34908:6:62", - "nodeType": "YulIdentifier", - "src": "34908:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34881:6:62", - "nodeType": "YulIdentifier", - "src": "34881:6:62" - }, - "nativeSrc": "34881:34:62", - "nodeType": "YulFunctionCall", - "src": "34881:34:62" - }, - "nativeSrc": "34881:34:62", - "nodeType": "YulExpressionStatement", - "src": "34881:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34935:9:62", - "nodeType": "YulIdentifier", - "src": "34935:9:62" - }, - { - "kind": "number", - "nativeSrc": "34946:2:62", - "nodeType": "YulLiteral", - "src": "34946:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34931:3:62", - "nodeType": "YulIdentifier", - "src": "34931:3:62" - }, - "nativeSrc": "34931:18:62", - "nodeType": "YulFunctionCall", - "src": "34931:18:62" - }, - { - "name": "value3", - "nativeSrc": "34951:6:62", - "nodeType": "YulIdentifier", - "src": "34951:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34924:6:62", - "nodeType": "YulIdentifier", - "src": "34924:6:62" - }, - "nativeSrc": "34924:34:62", - "nodeType": "YulFunctionCall", - "src": "34924:34:62" - }, - "nativeSrc": "34924:34:62", - "nodeType": "YulExpressionStatement", - "src": "34924:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34978:9:62", - "nodeType": "YulIdentifier", - "src": "34978:9:62" - }, - { - "kind": "number", - "nativeSrc": "34989:3:62", - "nodeType": "YulLiteral", - "src": "34989:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34974:3:62", - "nodeType": "YulIdentifier", - "src": "34974:3:62" - }, - "nativeSrc": "34974:19:62", - "nodeType": "YulFunctionCall", - "src": "34974:19:62" - }, - { - "name": "value4", - "nativeSrc": "34995:6:62", - "nodeType": "YulIdentifier", - "src": "34995:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34967:6:62", - "nodeType": "YulIdentifier", - "src": "34967:6:62" - }, - "nativeSrc": "34967:35:62", - "nodeType": "YulFunctionCall", - "src": "34967:35:62" - }, - "nativeSrc": "34967:35:62", - "nodeType": "YulExpressionStatement", - "src": "34967:35:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__fromStack_reversed", - "nativeSrc": "34545:463:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "34695:9:62", - "nodeType": "YulTypedName", - "src": "34695:9:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "34706:6:62", - "nodeType": "YulTypedName", - "src": "34706:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "34714:6:62", - "nodeType": "YulTypedName", - "src": "34714:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "34722:6:62", - "nodeType": "YulTypedName", - "src": "34722:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "34730:6:62", - "nodeType": "YulTypedName", - "src": "34730:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "34738:6:62", - "nodeType": "YulTypedName", - "src": "34738:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "34749:4:62", - "nodeType": "YulTypedName", - "src": "34749:4:62", - "type": "" - } - ], - "src": "34545:463:62" - }, - { - "body": { - "nativeSrc": "35170:214:62", - "nodeType": "YulBlock", - "src": "35170:214:62", - "statements": [ - { - "nativeSrc": "35180:26:62", - "nodeType": "YulAssignment", - "src": "35180:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "35192:9:62", - "nodeType": "YulIdentifier", - "src": "35192:9:62" - }, - { - "kind": "number", - "nativeSrc": "35203:2:62", - "nodeType": "YulLiteral", - "src": "35203:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "35188:3:62", - "nodeType": "YulIdentifier", - "src": "35188:3:62" - }, - "nativeSrc": "35188:18:62", - "nodeType": "YulFunctionCall", - "src": "35188:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "35180:4:62", - "nodeType": "YulIdentifier", - "src": "35180:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "35222:9:62", - "nodeType": "YulIdentifier", - "src": "35222:9:62" - }, - { - "name": "value0", - "nativeSrc": "35233:6:62", - "nodeType": "YulIdentifier", - "src": "35233:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "35215:6:62", - "nodeType": "YulIdentifier", - "src": "35215:6:62" - }, - "nativeSrc": "35215:25:62", - "nodeType": "YulFunctionCall", - "src": "35215:25:62" - }, - "nativeSrc": "35215:25:62", - "nodeType": "YulExpressionStatement", - "src": "35215:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "35260:9:62", - "nodeType": "YulIdentifier", - "src": "35260:9:62" - }, - { - "kind": "number", - "nativeSrc": "35271:2:62", - "nodeType": "YulLiteral", - "src": "35271:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "35256:3:62", - "nodeType": "YulIdentifier", - "src": "35256:3:62" - }, - "nativeSrc": "35256:18:62", - "nodeType": "YulFunctionCall", - "src": "35256:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "35280:6:62", - "nodeType": "YulIdentifier", - "src": "35280:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "35296:3:62", - "nodeType": "YulLiteral", - "src": "35296:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "35301:1:62", - "nodeType": "YulLiteral", - "src": "35301:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "35292:3:62", - "nodeType": "YulIdentifier", - "src": "35292:3:62" - }, - "nativeSrc": "35292:11:62", - "nodeType": "YulFunctionCall", - "src": "35292:11:62" - }, - { - "kind": "number", - "nativeSrc": "35305:1:62", - "nodeType": "YulLiteral", - "src": "35305:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "35288:3:62", - "nodeType": "YulIdentifier", - "src": "35288:3:62" - }, - "nativeSrc": "35288:19:62", - "nodeType": "YulFunctionCall", - "src": "35288:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "35276:3:62", - "nodeType": "YulIdentifier", - "src": "35276:3:62" - }, - "nativeSrc": "35276:32:62", - "nodeType": "YulFunctionCall", - "src": "35276:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "35249:6:62", - "nodeType": "YulIdentifier", - "src": "35249:6:62" - }, - "nativeSrc": "35249:60:62", - "nodeType": "YulFunctionCall", - "src": "35249:60:62" - }, - "nativeSrc": "35249:60:62", - "nodeType": "YulExpressionStatement", - "src": "35249:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "35329:9:62", - "nodeType": "YulIdentifier", - "src": "35329:9:62" - }, - { - "kind": "number", - "nativeSrc": "35340:2:62", - "nodeType": "YulLiteral", - "src": "35340:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "35325:3:62", - "nodeType": "YulIdentifier", - "src": "35325:3:62" - }, - "nativeSrc": "35325:18:62", - "nodeType": "YulFunctionCall", - "src": "35325:18:62" - }, - { - "arguments": [ - { - "name": "value2", - "nativeSrc": "35349:6:62", - "nodeType": "YulIdentifier", - "src": "35349:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "35365:3:62", - "nodeType": "YulLiteral", - "src": "35365:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "35370:1:62", - "nodeType": "YulLiteral", - "src": "35370:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "35361:3:62", - "nodeType": "YulIdentifier", - "src": "35361:3:62" - }, - "nativeSrc": "35361:11:62", - "nodeType": "YulFunctionCall", - "src": "35361:11:62" - }, - { - "kind": "number", - "nativeSrc": "35374:1:62", - "nodeType": "YulLiteral", - "src": "35374:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "35357:3:62", - "nodeType": "YulIdentifier", - "src": "35357:3:62" - }, - "nativeSrc": "35357:19:62", - "nodeType": "YulFunctionCall", - "src": "35357:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "35345:3:62", - "nodeType": "YulIdentifier", - "src": "35345:3:62" - }, - "nativeSrc": "35345:32:62", - "nodeType": "YulFunctionCall", - "src": "35345:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "35318:6:62", - "nodeType": "YulIdentifier", - "src": "35318:6:62" - }, - "nativeSrc": "35318:60:62", - "nodeType": "YulFunctionCall", - "src": "35318:60:62" - }, - "nativeSrc": "35318:60:62", - "nodeType": "YulExpressionStatement", - "src": "35318:60:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_address_t_address__to_t_bytes32_t_address_t_address__fromStack_reversed", - "nativeSrc": "35013:371:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "35123:9:62", - "nodeType": "YulTypedName", - "src": "35123:9:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "35134:6:62", - "nodeType": "YulTypedName", - "src": "35134:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "35142:6:62", - "nodeType": "YulTypedName", - "src": "35142:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "35150:6:62", - "nodeType": "YulTypedName", - "src": "35150:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "35161:4:62", - "nodeType": "YulTypedName", - "src": "35161:4:62", - "type": "" - } - ], - "src": "35013:371:62" - }, - { - "body": { - "nativeSrc": "35592:230:62", - "nodeType": "YulBlock", - "src": "35592:230:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "35609:9:62", - "nodeType": "YulIdentifier", - "src": "35609:9:62" - }, - { - "kind": "number", - "nativeSrc": "35620:3:62", - "nodeType": "YulLiteral", - "src": "35620:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "35602:6:62", - "nodeType": "YulIdentifier", - "src": "35602:6:62" - }, - "nativeSrc": "35602:22:62", - "nodeType": "YulFunctionCall", - "src": "35602:22:62" - }, - "nativeSrc": "35602:22:62", - "nodeType": "YulExpressionStatement", - "src": "35602:22:62" - }, - { - "nativeSrc": "35633:54:62", - "nodeType": "YulAssignment", - "src": "35633:54:62", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "35659:6:62", - "nodeType": "YulIdentifier", - "src": "35659:6:62" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "35671:9:62", - "nodeType": "YulIdentifier", - "src": "35671:9:62" - }, - { - "kind": "number", - "nativeSrc": "35682:3:62", - "nodeType": "YulLiteral", - "src": "35682:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "35667:3:62", - "nodeType": "YulIdentifier", - "src": "35667:3:62" - }, - "nativeSrc": "35667:19:62", - "nodeType": "YulFunctionCall", - "src": "35667:19:62" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "35641:17:62", - "nodeType": "YulIdentifier", - "src": "35641:17:62" - }, - "nativeSrc": "35641:46:62", - "nodeType": "YulFunctionCall", - "src": "35641:46:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "35633:4:62", - "nodeType": "YulIdentifier", - "src": "35633:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "35707:9:62", - "nodeType": "YulIdentifier", - "src": "35707:9:62" - }, - { - "kind": "number", - "nativeSrc": "35718:2:62", - "nodeType": "YulLiteral", - "src": "35718:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "35703:3:62", - "nodeType": "YulIdentifier", - "src": "35703:3:62" - }, - "nativeSrc": "35703:18:62", - "nodeType": "YulFunctionCall", - "src": "35703:18:62" - }, - { - "name": "value1", - "nativeSrc": "35723:6:62", - "nodeType": "YulIdentifier", - "src": "35723:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "35696:6:62", - "nodeType": "YulIdentifier", - "src": "35696:6:62" - }, - "nativeSrc": "35696:34:62", - "nodeType": "YulFunctionCall", - "src": "35696:34:62" - }, - "nativeSrc": "35696:34:62", - "nodeType": "YulExpressionStatement", - "src": "35696:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "35750:9:62", - "nodeType": "YulIdentifier", - "src": "35750:9:62" - }, - { - "kind": "number", - "nativeSrc": "35761:2:62", - "nodeType": "YulLiteral", - "src": "35761:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "35746:3:62", - "nodeType": "YulIdentifier", - "src": "35746:3:62" - }, - "nativeSrc": "35746:18:62", - "nodeType": "YulFunctionCall", - "src": "35746:18:62" - }, - { - "name": "value2", - "nativeSrc": "35766:6:62", - "nodeType": "YulIdentifier", - "src": "35766:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "35739:6:62", - "nodeType": "YulIdentifier", - "src": "35739:6:62" - }, - "nativeSrc": "35739:34:62", - "nodeType": "YulFunctionCall", - "src": "35739:34:62" - }, - "nativeSrc": "35739:34:62", - "nodeType": "YulExpressionStatement", - "src": "35739:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "35793:9:62", - "nodeType": "YulIdentifier", - "src": "35793:9:62" - }, - { - "kind": "number", - "nativeSrc": "35804:2:62", - "nodeType": "YulLiteral", - "src": "35804:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "35789:3:62", - "nodeType": "YulIdentifier", - "src": "35789:3:62" - }, - "nativeSrc": "35789:18:62", - "nodeType": "YulFunctionCall", - "src": "35789:18:62" - }, - { - "name": "value3", - "nativeSrc": "35809:6:62", - "nodeType": "YulIdentifier", - "src": "35809:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "35782:6:62", - "nodeType": "YulIdentifier", - "src": "35782:6:62" - }, - "nativeSrc": "35782:34:62", - "nodeType": "YulFunctionCall", - "src": "35782:34:62" - }, - "nativeSrc": "35782:34:62", - "nodeType": "YulExpressionStatement", - "src": "35782:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__to_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "35389:433:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "35537:9:62", - "nodeType": "YulTypedName", - "src": "35537:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "35548:6:62", - "nodeType": "YulTypedName", - "src": "35548:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "35556:6:62", - "nodeType": "YulTypedName", - "src": "35556:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "35564:6:62", - "nodeType": "YulTypedName", - "src": "35564:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "35572:6:62", - "nodeType": "YulTypedName", - "src": "35572:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "35583:4:62", - "nodeType": "YulTypedName", - "src": "35583:4:62", - "type": "" - } - ], - "src": "35389:433:62" - }, - { - "body": { - "nativeSrc": "35933:266:62", - "nodeType": "YulBlock", - "src": "35933:266:62", - "statements": [ - { - "body": { - "nativeSrc": "35979:16:62", - "nodeType": "YulBlock", - "src": "35979:16:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "35988:1:62", - "nodeType": "YulLiteral", - "src": "35988:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "35991:1:62", - "nodeType": "YulLiteral", - "src": "35991:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "35981:6:62", - "nodeType": "YulIdentifier", - "src": "35981:6:62" - }, - "nativeSrc": "35981:12:62", - "nodeType": "YulFunctionCall", - "src": "35981:12:62" - }, - "nativeSrc": "35981:12:62", - "nodeType": "YulExpressionStatement", - "src": "35981:12:62" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "35954:7:62", - "nodeType": "YulIdentifier", - "src": "35954:7:62" - }, - { - "name": "headStart", - "nativeSrc": "35963:9:62", - "nodeType": "YulIdentifier", - "src": "35963:9:62" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "35950:3:62", - "nodeType": "YulIdentifier", - "src": "35950:3:62" - }, - "nativeSrc": "35950:23:62", - "nodeType": "YulFunctionCall", - "src": "35950:23:62" - }, - { - "kind": "number", - "nativeSrc": "35975:2:62", - "nodeType": "YulLiteral", - "src": "35975:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "35946:3:62", - "nodeType": "YulIdentifier", - "src": "35946:3:62" - }, - "nativeSrc": "35946:32:62", - "nodeType": "YulFunctionCall", - "src": "35946:32:62" - }, - "nativeSrc": "35943:52:62", - "nodeType": "YulIf", - "src": "35943:52:62" - }, - { - "nativeSrc": "36004:14:62", - "nodeType": "YulVariableDeclaration", - "src": "36004:14:62", - "value": { - "kind": "number", - "nativeSrc": "36017:1:62", - "nodeType": "YulLiteral", - "src": "36017:1:62", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "36008:5:62", - "nodeType": "YulTypedName", - "src": "36008:5:62", - "type": "" - } - ] - }, - { - "nativeSrc": "36027:25:62", - "nodeType": "YulAssignment", - "src": "36027:25:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "36042:9:62", - "nodeType": "YulIdentifier", - "src": "36042:9:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "36036:5:62", - "nodeType": "YulIdentifier", - "src": "36036:5:62" - }, - "nativeSrc": "36036:16:62", - "nodeType": "YulFunctionCall", - "src": "36036:16:62" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "36027:5:62", - "nodeType": "YulIdentifier", - "src": "36027:5:62" - } - ] - }, - { - "nativeSrc": "36061:15:62", - "nodeType": "YulAssignment", - "src": "36061:15:62", - "value": { - "name": "value", - "nativeSrc": "36071:5:62", - "nodeType": "YulIdentifier", - "src": "36071:5:62" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "36061:6:62", - "nodeType": "YulIdentifier", - "src": "36061:6:62" - } - ] - }, - { - "nativeSrc": "36085:40:62", - "nodeType": "YulVariableDeclaration", - "src": "36085:40:62", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "36110:9:62", - "nodeType": "YulIdentifier", - "src": "36110:9:62" - }, - { - "kind": "number", - "nativeSrc": "36121:2:62", - "nodeType": "YulLiteral", - "src": "36121:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "36106:3:62", - "nodeType": "YulIdentifier", - "src": "36106:3:62" - }, - "nativeSrc": "36106:18:62", - "nodeType": "YulFunctionCall", - "src": "36106:18:62" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "36100:5:62", - "nodeType": "YulIdentifier", - "src": "36100:5:62" - }, - "nativeSrc": "36100:25:62", - "nodeType": "YulFunctionCall", - "src": "36100:25:62" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "36089:7:62", - "nodeType": "YulTypedName", - "src": "36089:7:62", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "36159:7:62", - "nodeType": "YulIdentifier", - "src": "36159:7:62" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "36134:24:62", - "nodeType": "YulIdentifier", - "src": "36134:24:62" - }, - "nativeSrc": "36134:33:62", - "nodeType": "YulFunctionCall", - "src": "36134:33:62" - }, - "nativeSrc": "36134:33:62", - "nodeType": "YulExpressionStatement", - "src": "36134:33:62" - }, - { - "nativeSrc": "36176:17:62", - "nodeType": "YulAssignment", - "src": "36176:17:62", - "value": { - "name": "value_1", - "nativeSrc": "36186:7:62", - "nodeType": "YulIdentifier", - "src": "36186:7:62" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "36176:6:62", - "nodeType": "YulIdentifier", - "src": "36176:6:62" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_address_payable_fromMemory", - "nativeSrc": "35827:372:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "35891:9:62", - "nodeType": "YulTypedName", - "src": "35891:9:62", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "35902:7:62", - "nodeType": "YulTypedName", - "src": "35902:7:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "35914:6:62", - "nodeType": "YulTypedName", - "src": "35914:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "35922:6:62", - "nodeType": "YulTypedName", - "src": "35922:6:62", - "type": "" - } - ], - "src": "35827:372:62" - }, - { - "body": { - "nativeSrc": "36333:145:62", - "nodeType": "YulBlock", - "src": "36333:145:62", - "statements": [ - { - "nativeSrc": "36343:26:62", - "nodeType": "YulAssignment", - "src": "36343:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "36355:9:62", - "nodeType": "YulIdentifier", - "src": "36355:9:62" - }, - { - "kind": "number", - "nativeSrc": "36366:2:62", - "nodeType": "YulLiteral", - "src": "36366:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "36351:3:62", - "nodeType": "YulIdentifier", - "src": "36351:3:62" - }, - "nativeSrc": "36351:18:62", - "nodeType": "YulFunctionCall", - "src": "36351:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "36343:4:62", - "nodeType": "YulIdentifier", - "src": "36343:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "36385:9:62", - "nodeType": "YulIdentifier", - "src": "36385:9:62" - }, - { - "name": "value0", - "nativeSrc": "36396:6:62", - "nodeType": "YulIdentifier", - "src": "36396:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "36378:6:62", - "nodeType": "YulIdentifier", - "src": "36378:6:62" - }, - "nativeSrc": "36378:25:62", - "nodeType": "YulFunctionCall", - "src": "36378:25:62" - }, - "nativeSrc": "36378:25:62", - "nodeType": "YulExpressionStatement", - "src": "36378:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "36423:9:62", - "nodeType": "YulIdentifier", - "src": "36423:9:62" - }, - { - "kind": "number", - "nativeSrc": "36434:2:62", - "nodeType": "YulLiteral", - "src": "36434:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "36419:3:62", - "nodeType": "YulIdentifier", - "src": "36419:3:62" - }, - "nativeSrc": "36419:18:62", - "nodeType": "YulFunctionCall", - "src": "36419:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "36443:6:62", - "nodeType": "YulIdentifier", - "src": "36443:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "36459:3:62", - "nodeType": "YulLiteral", - "src": "36459:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "36464:1:62", - "nodeType": "YulLiteral", - "src": "36464:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "36455:3:62", - "nodeType": "YulIdentifier", - "src": "36455:3:62" - }, - "nativeSrc": "36455:11:62", - "nodeType": "YulFunctionCall", - "src": "36455:11:62" - }, - { - "kind": "number", - "nativeSrc": "36468:1:62", - "nodeType": "YulLiteral", - "src": "36468:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "36451:3:62", - "nodeType": "YulIdentifier", - "src": "36451:3:62" - }, - "nativeSrc": "36451:19:62", - "nodeType": "YulFunctionCall", - "src": "36451:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "36439:3:62", - "nodeType": "YulIdentifier", - "src": "36439:3:62" - }, - "nativeSrc": "36439:32:62", - "nodeType": "YulFunctionCall", - "src": "36439:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "36412:6:62", - "nodeType": "YulIdentifier", - "src": "36412:6:62" - }, - "nativeSrc": "36412:60:62", - "nodeType": "YulFunctionCall", - "src": "36412:60:62" - }, - "nativeSrc": "36412:60:62", - "nodeType": "YulExpressionStatement", - "src": "36412:60:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed", - "nativeSrc": "36204:274:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "36294:9:62", - "nodeType": "YulTypedName", - "src": "36294:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "36305:6:62", - "nodeType": "YulTypedName", - "src": "36305:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "36313:6:62", - "nodeType": "YulTypedName", - "src": "36313:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "36324:4:62", - "nodeType": "YulTypedName", - "src": "36324:4:62", - "type": "" - } - ], - "src": "36204:274:62" - }, - { - "body": { - "nativeSrc": "36530:89:62", - "nodeType": "YulBlock", - "src": "36530:89:62", - "statements": [ - { - "body": { - "nativeSrc": "36557:22:62", - "nodeType": "YulBlock", - "src": "36557:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "36559:16:62", - "nodeType": "YulIdentifier", - "src": "36559:16:62" - }, - "nativeSrc": "36559:18:62", - "nodeType": "YulFunctionCall", - "src": "36559:18:62" - }, - "nativeSrc": "36559:18:62", - "nodeType": "YulExpressionStatement", - "src": "36559:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nativeSrc": "36550:5:62", - "nodeType": "YulIdentifier", - "src": "36550:5:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "36543:6:62", - "nodeType": "YulIdentifier", - "src": "36543:6:62" - }, - "nativeSrc": "36543:13:62", - "nodeType": "YulFunctionCall", - "src": "36543:13:62" - }, - "nativeSrc": "36540:39:62", - "nodeType": "YulIf", - "src": "36540:39:62" - }, - { - "nativeSrc": "36588:25:62", - "nodeType": "YulAssignment", - "src": "36588:25:62", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "36599:5:62", - "nodeType": "YulIdentifier", - "src": "36599:5:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "36610:1:62", - "nodeType": "YulLiteral", - "src": "36610:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "36606:3:62", - "nodeType": "YulIdentifier", - "src": "36606:3:62" - }, - "nativeSrc": "36606:6:62", - "nodeType": "YulFunctionCall", - "src": "36606:6:62" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "36595:3:62", - "nodeType": "YulIdentifier", - "src": "36595:3:62" - }, - "nativeSrc": "36595:18:62", - "nodeType": "YulFunctionCall", - "src": "36595:18:62" - }, - "variableNames": [ - { - "name": "ret", - "nativeSrc": "36588:3:62", - "nodeType": "YulIdentifier", - "src": "36588:3:62" - } - ] - } - ] - }, - "name": "decrement_t_uint256", - "nativeSrc": "36483:136:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "36512:5:62", - "nodeType": "YulTypedName", - "src": "36512:5:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nativeSrc": "36522:3:62", - "nodeType": "YulTypedName", - "src": "36522:3:62", - "type": "" - } - ], - "src": "36483:136:62" - }, - { - "body": { - "nativeSrc": "36671:88:62", - "nodeType": "YulBlock", - "src": "36671:88:62", - "statements": [ - { - "body": { - "nativeSrc": "36702:22:62", - "nodeType": "YulBlock", - "src": "36702:22:62", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "36704:16:62", - "nodeType": "YulIdentifier", - "src": "36704:16:62" - }, - "nativeSrc": "36704:18:62", - "nodeType": "YulFunctionCall", - "src": "36704:18:62" - }, - "nativeSrc": "36704:18:62", - "nodeType": "YulExpressionStatement", - "src": "36704:18:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nativeSrc": "36687:5:62", - "nodeType": "YulIdentifier", - "src": "36687:5:62" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "36698:1:62", - "nodeType": "YulLiteral", - "src": "36698:1:62", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "36694:3:62", - "nodeType": "YulIdentifier", - "src": "36694:3:62" - }, - "nativeSrc": "36694:6:62", - "nodeType": "YulFunctionCall", - "src": "36694:6:62" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "36684:2:62", - "nodeType": "YulIdentifier", - "src": "36684:2:62" - }, - "nativeSrc": "36684:17:62", - "nodeType": "YulFunctionCall", - "src": "36684:17:62" - }, - "nativeSrc": "36681:43:62", - "nodeType": "YulIf", - "src": "36681:43:62" - }, - { - "nativeSrc": "36733:20:62", - "nodeType": "YulAssignment", - "src": "36733:20:62", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "36744:5:62", - "nodeType": "YulIdentifier", - "src": "36744:5:62" - }, - { - "kind": "number", - "nativeSrc": "36751:1:62", - "nodeType": "YulLiteral", - "src": "36751:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "36740:3:62", - "nodeType": "YulIdentifier", - "src": "36740:3:62" - }, - "nativeSrc": "36740:13:62", - "nodeType": "YulFunctionCall", - "src": "36740:13:62" - }, - "variableNames": [ - { - "name": "ret", - "nativeSrc": "36733:3:62", - "nodeType": "YulIdentifier", - "src": "36733:3:62" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nativeSrc": "36624:135:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "36653:5:62", - "nodeType": "YulTypedName", - "src": "36653:5:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nativeSrc": "36663:3:62", - "nodeType": "YulTypedName", - "src": "36663:3:62", - "type": "" - } - ], - "src": "36624:135:62" - }, - { - "body": { - "nativeSrc": "36919:231:62", - "nodeType": "YulBlock", - "src": "36919:231:62", - "statements": [ - { - "nativeSrc": "36929:26:62", - "nodeType": "YulAssignment", - "src": "36929:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "36941:9:62", - "nodeType": "YulIdentifier", - "src": "36941:9:62" - }, - { - "kind": "number", - "nativeSrc": "36952:2:62", - "nodeType": "YulLiteral", - "src": "36952:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "36937:3:62", - "nodeType": "YulIdentifier", - "src": "36937:3:62" - }, - "nativeSrc": "36937:18:62", - "nodeType": "YulFunctionCall", - "src": "36937:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "36929:4:62", - "nodeType": "YulIdentifier", - "src": "36929:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "36971:9:62", - "nodeType": "YulIdentifier", - "src": "36971:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "36986:6:62", - "nodeType": "YulIdentifier", - "src": "36986:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "37002:3:62", - "nodeType": "YulLiteral", - "src": "37002:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "37007:1:62", - "nodeType": "YulLiteral", - "src": "37007:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "36998:3:62", - "nodeType": "YulIdentifier", - "src": "36998:3:62" - }, - "nativeSrc": "36998:11:62", - "nodeType": "YulFunctionCall", - "src": "36998:11:62" - }, - { - "kind": "number", - "nativeSrc": "37011:1:62", - "nodeType": "YulLiteral", - "src": "37011:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "36994:3:62", - "nodeType": "YulIdentifier", - "src": "36994:3:62" - }, - "nativeSrc": "36994:19:62", - "nodeType": "YulFunctionCall", - "src": "36994:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "36982:3:62", - "nodeType": "YulIdentifier", - "src": "36982:3:62" - }, - "nativeSrc": "36982:32:62", - "nodeType": "YulFunctionCall", - "src": "36982:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "36964:6:62", - "nodeType": "YulIdentifier", - "src": "36964:6:62" - }, - "nativeSrc": "36964:51:62", - "nodeType": "YulFunctionCall", - "src": "36964:51:62" - }, - "nativeSrc": "36964:51:62", - "nodeType": "YulExpressionStatement", - "src": "36964:51:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "37035:9:62", - "nodeType": "YulIdentifier", - "src": "37035:9:62" - }, - { - "kind": "number", - "nativeSrc": "37046:2:62", - "nodeType": "YulLiteral", - "src": "37046:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "37031:3:62", - "nodeType": "YulIdentifier", - "src": "37031:3:62" - }, - "nativeSrc": "37031:18:62", - "nodeType": "YulFunctionCall", - "src": "37031:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "37055:6:62", - "nodeType": "YulIdentifier", - "src": "37055:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "37071:3:62", - "nodeType": "YulLiteral", - "src": "37071:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "37076:1:62", - "nodeType": "YulLiteral", - "src": "37076:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "37067:3:62", - "nodeType": "YulIdentifier", - "src": "37067:3:62" - }, - "nativeSrc": "37067:11:62", - "nodeType": "YulFunctionCall", - "src": "37067:11:62" - }, - { - "kind": "number", - "nativeSrc": "37080:1:62", - "nodeType": "YulLiteral", - "src": "37080:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "37063:3:62", - "nodeType": "YulIdentifier", - "src": "37063:3:62" - }, - "nativeSrc": "37063:19:62", - "nodeType": "YulFunctionCall", - "src": "37063:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "37051:3:62", - "nodeType": "YulIdentifier", - "src": "37051:3:62" - }, - "nativeSrc": "37051:32:62", - "nodeType": "YulFunctionCall", - "src": "37051:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "37024:6:62", - "nodeType": "YulIdentifier", - "src": "37024:6:62" - }, - "nativeSrc": "37024:60:62", - "nodeType": "YulFunctionCall", - "src": "37024:60:62" - }, - "nativeSrc": "37024:60:62", - "nodeType": "YulExpressionStatement", - "src": "37024:60:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "37104:9:62", - "nodeType": "YulIdentifier", - "src": "37104:9:62" - }, - { - "kind": "number", - "nativeSrc": "37115:2:62", - "nodeType": "YulLiteral", - "src": "37115:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "37100:3:62", - "nodeType": "YulIdentifier", - "src": "37100:3:62" - }, - "nativeSrc": "37100:18:62", - "nodeType": "YulFunctionCall", - "src": "37100:18:62" - }, - { - "arguments": [ - { - "name": "value2", - "nativeSrc": "37124:6:62", - "nodeType": "YulIdentifier", - "src": "37124:6:62" - }, - { - "kind": "number", - "nativeSrc": "37132:10:62", - "nodeType": "YulLiteral", - "src": "37132:10:62", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "37120:3:62", - "nodeType": "YulIdentifier", - "src": "37120:3:62" - }, - "nativeSrc": "37120:23:62", - "nodeType": "YulFunctionCall", - "src": "37120:23:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "37093:6:62", - "nodeType": "YulIdentifier", - "src": "37093:6:62" - }, - "nativeSrc": "37093:51:62", - "nodeType": "YulFunctionCall", - "src": "37093:51:62" - }, - "nativeSrc": "37093:51:62", - "nodeType": "YulExpressionStatement", - "src": "37093:51:62" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_uint32__to_t_address_t_address_t_uint32__fromStack_reversed", - "nativeSrc": "36764:386:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "36872:9:62", - "nodeType": "YulTypedName", - "src": "36872:9:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "36883:6:62", - "nodeType": "YulTypedName", - "src": "36883:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "36891:6:62", - "nodeType": "YulTypedName", - "src": "36891:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "36899:6:62", - "nodeType": "YulTypedName", - "src": "36899:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "36910:4:62", - "nodeType": "YulTypedName", - "src": "36910:4:62", - "type": "" - } - ], - "src": "36764:386:62" - }, - { - "body": { - "nativeSrc": "37201:171:62", - "nodeType": "YulBlock", - "src": "37201:171:62", - "statements": [ - { - "body": { - "nativeSrc": "37232:111:62", - "nodeType": "YulBlock", - "src": "37232:111:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "37253:1:62", - "nodeType": "YulLiteral", - "src": "37253:1:62", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "37260:3:62", - "nodeType": "YulLiteral", - "src": "37260:3:62", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "37265:10:62", - "nodeType": "YulLiteral", - "src": "37265:10:62", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "37256:3:62", - "nodeType": "YulIdentifier", - "src": "37256:3:62" - }, - "nativeSrc": "37256:20:62", - "nodeType": "YulFunctionCall", - "src": "37256:20:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "37246:6:62", - "nodeType": "YulIdentifier", - "src": "37246:6:62" - }, - "nativeSrc": "37246:31:62", - "nodeType": "YulFunctionCall", - "src": "37246:31:62" - }, - "nativeSrc": "37246:31:62", - "nodeType": "YulExpressionStatement", - "src": "37246:31:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "37297:1:62", - "nodeType": "YulLiteral", - "src": "37297:1:62", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "37300:4:62", - "nodeType": "YulLiteral", - "src": "37300:4:62", - "type": "", - "value": "0x12" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "37290:6:62", - "nodeType": "YulIdentifier", - "src": "37290:6:62" - }, - "nativeSrc": "37290:15:62", - "nodeType": "YulFunctionCall", - "src": "37290:15:62" - }, - "nativeSrc": "37290:15:62", - "nodeType": "YulExpressionStatement", - "src": "37290:15:62" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "37325:1:62", - "nodeType": "YulLiteral", - "src": "37325:1:62", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "37328:4:62", - "nodeType": "YulLiteral", - "src": "37328:4:62", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "37318:6:62", - "nodeType": "YulIdentifier", - "src": "37318:6:62" - }, - "nativeSrc": "37318:15:62", - "nodeType": "YulFunctionCall", - "src": "37318:15:62" - }, - "nativeSrc": "37318:15:62", - "nodeType": "YulExpressionStatement", - "src": "37318:15:62" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y", - "nativeSrc": "37221:1:62", - "nodeType": "YulIdentifier", - "src": "37221:1:62" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "37214:6:62", - "nodeType": "YulIdentifier", - "src": "37214:6:62" - }, - "nativeSrc": "37214:9:62", - "nodeType": "YulFunctionCall", - "src": "37214:9:62" - }, - "nativeSrc": "37211:132:62", - "nodeType": "YulIf", - "src": "37211:132:62" - }, - { - "nativeSrc": "37352:14:62", - "nodeType": "YulAssignment", - "src": "37352:14:62", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "37361:1:62", - "nodeType": "YulIdentifier", - "src": "37361:1:62" - }, - { - "name": "y", - "nativeSrc": "37364:1:62", - "nodeType": "YulIdentifier", - "src": "37364:1:62" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "37357:3:62", - "nodeType": "YulIdentifier", - "src": "37357:3:62" - }, - "nativeSrc": "37357:9:62", - "nodeType": "YulFunctionCall", - "src": "37357:9:62" - }, - "variableNames": [ - { - "name": "r", - "nativeSrc": "37352:1:62", - "nodeType": "YulIdentifier", - "src": "37352:1:62" - } - ] - } - ] - }, - "name": "checked_div_t_uint256", - "nativeSrc": "37155:217:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "37186:1:62", - "nodeType": "YulTypedName", - "src": "37186:1:62", - "type": "" - }, - { - "name": "y", - "nativeSrc": "37189:1:62", - "nodeType": "YulTypedName", - "src": "37189:1:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nativeSrc": "37195:1:62", - "nodeType": "YulTypedName", - "src": "37195:1:62", - "type": "" - } - ], - "src": "37155:217:62" - }, - { - "body": { - "nativeSrc": "37551:158:62", - "nodeType": "YulBlock", - "src": "37551:158:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "37568:9:62", - "nodeType": "YulIdentifier", - "src": "37568:9:62" - }, - { - "kind": "number", - "nativeSrc": "37579:2:62", - "nodeType": "YulLiteral", - "src": "37579:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "37561:6:62", - "nodeType": "YulIdentifier", - "src": "37561:6:62" - }, - "nativeSrc": "37561:21:62", - "nodeType": "YulFunctionCall", - "src": "37561:21:62" - }, - "nativeSrc": "37561:21:62", - "nodeType": "YulExpressionStatement", - "src": "37561:21:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "37602:9:62", - "nodeType": "YulIdentifier", - "src": "37602:9:62" - }, - { - "kind": "number", - "nativeSrc": "37613:2:62", - "nodeType": "YulLiteral", - "src": "37613:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "37598:3:62", - "nodeType": "YulIdentifier", - "src": "37598:3:62" - }, - "nativeSrc": "37598:18:62", - "nodeType": "YulFunctionCall", - "src": "37598:18:62" - }, - { - "kind": "number", - "nativeSrc": "37618:1:62", - "nodeType": "YulLiteral", - "src": "37618:1:62", - "type": "", - "value": "9" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "37591:6:62", - "nodeType": "YulIdentifier", - "src": "37591:6:62" - }, - "nativeSrc": "37591:29:62", - "nodeType": "YulFunctionCall", - "src": "37591:29:62" - }, - "nativeSrc": "37591:29:62", - "nodeType": "YulExpressionStatement", - "src": "37591:29:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "37640:9:62", - "nodeType": "YulIdentifier", - "src": "37640:9:62" - }, - { - "kind": "number", - "nativeSrc": "37651:2:62", - "nodeType": "YulLiteral", - "src": "37651:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "37636:3:62", - "nodeType": "YulIdentifier", - "src": "37636:3:62" - }, - "nativeSrc": "37636:18:62", - "nodeType": "YulFunctionCall", - "src": "37636:18:62" - }, - { - "hexValue": "217472616e73666572", - "kind": "string", - "nativeSrc": "37656:11:62", - "nodeType": "YulLiteral", - "src": "37656:11:62", - "type": "", - "value": "!transfer" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "37629:6:62", - "nodeType": "YulIdentifier", - "src": "37629:6:62" - }, - "nativeSrc": "37629:39:62", - "nodeType": "YulFunctionCall", - "src": "37629:39:62" - }, - "nativeSrc": "37629:39:62", - "nodeType": "YulExpressionStatement", - "src": "37629:39:62" - }, - { - "nativeSrc": "37677:26:62", - "nodeType": "YulAssignment", - "src": "37677:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "37689:9:62", - "nodeType": "YulIdentifier", - "src": "37689:9:62" - }, - { - "kind": "number", - "nativeSrc": "37700:2:62", - "nodeType": "YulLiteral", - "src": "37700:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "37685:3:62", - "nodeType": "YulIdentifier", - "src": "37685:3:62" - }, - "nativeSrc": "37685:18:62", - "nodeType": "YulFunctionCall", - "src": "37685:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "37677:4:62", - "nodeType": "YulIdentifier", - "src": "37677:4:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed", - "nativeSrc": "37377:332:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "37528:9:62", - "nodeType": "YulTypedName", - "src": "37528:9:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "37542:4:62", - "nodeType": "YulTypedName", - "src": "37542:4:62", - "type": "" - } - ], - "src": "37377:332:62" - }, - { - "body": { - "nativeSrc": "37841:153:62", - "nodeType": "YulBlock", - "src": "37841:153:62", - "statements": [ - { - "nativeSrc": "37851:26:62", - "nodeType": "YulAssignment", - "src": "37851:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "37863:9:62", - "nodeType": "YulIdentifier", - "src": "37863:9:62" - }, - { - "kind": "number", - "nativeSrc": "37874:2:62", - "nodeType": "YulLiteral", - "src": "37874:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "37859:3:62", - "nodeType": "YulIdentifier", - "src": "37859:3:62" - }, - "nativeSrc": "37859:18:62", - "nodeType": "YulFunctionCall", - "src": "37859:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "37851:4:62", - "nodeType": "YulIdentifier", - "src": "37851:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "37893:9:62", - "nodeType": "YulIdentifier", - "src": "37893:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "37908:6:62", - "nodeType": "YulIdentifier", - "src": "37908:6:62" - }, - { - "kind": "number", - "nativeSrc": "37916:10:62", - "nodeType": "YulLiteral", - "src": "37916:10:62", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "37904:3:62", - "nodeType": "YulIdentifier", - "src": "37904:3:62" - }, - "nativeSrc": "37904:23:62", - "nodeType": "YulFunctionCall", - "src": "37904:23:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "37886:6:62", - "nodeType": "YulIdentifier", - "src": "37886:6:62" - }, - "nativeSrc": "37886:42:62", - "nodeType": "YulFunctionCall", - "src": "37886:42:62" - }, - "nativeSrc": "37886:42:62", - "nodeType": "YulExpressionStatement", - "src": "37886:42:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "37948:9:62", - "nodeType": "YulIdentifier", - "src": "37948:9:62" - }, - { - "kind": "number", - "nativeSrc": "37959:2:62", - "nodeType": "YulLiteral", - "src": "37959:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "37944:3:62", - "nodeType": "YulIdentifier", - "src": "37944:3:62" - }, - "nativeSrc": "37944:18:62", - "nodeType": "YulFunctionCall", - "src": "37944:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "37968:6:62", - "nodeType": "YulIdentifier", - "src": "37968:6:62" - }, - { - "kind": "number", - "nativeSrc": "37976:10:62", - "nodeType": "YulLiteral", - "src": "37976:10:62", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "37964:3:62", - "nodeType": "YulIdentifier", - "src": "37964:3:62" - }, - "nativeSrc": "37964:23:62", - "nodeType": "YulFunctionCall", - "src": "37964:23:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "37937:6:62", - "nodeType": "YulIdentifier", - "src": "37937:6:62" - }, - "nativeSrc": "37937:51:62", - "nodeType": "YulFunctionCall", - "src": "37937:51:62" - }, - "nativeSrc": "37937:51:62", - "nodeType": "YulExpressionStatement", - "src": "37937:51:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint32_t_uint32__to_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "37714:280:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "37802:9:62", - "nodeType": "YulTypedName", - "src": "37802:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "37813:6:62", - "nodeType": "YulTypedName", - "src": "37813:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "37821:6:62", - "nodeType": "YulTypedName", - "src": "37821:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "37832:4:62", - "nodeType": "YulTypedName", - "src": "37832:4:62", - "type": "" - } - ], - "src": "37714:280:62" - }, - { - "body": { - "nativeSrc": "38126:169:62", - "nodeType": "YulBlock", - "src": "38126:169:62", - "statements": [ - { - "nativeSrc": "38136:26:62", - "nodeType": "YulAssignment", - "src": "38136:26:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "38148:9:62", - "nodeType": "YulIdentifier", - "src": "38148:9:62" - }, - { - "kind": "number", - "nativeSrc": "38159:2:62", - "nodeType": "YulLiteral", - "src": "38159:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "38144:3:62", - "nodeType": "YulIdentifier", - "src": "38144:3:62" - }, - "nativeSrc": "38144:18:62", - "nodeType": "YulFunctionCall", - "src": "38144:18:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "38136:4:62", - "nodeType": "YulIdentifier", - "src": "38136:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "38178:9:62", - "nodeType": "YulIdentifier", - "src": "38178:9:62" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "38193:6:62", - "nodeType": "YulIdentifier", - "src": "38193:6:62" - }, - { - "kind": "number", - "nativeSrc": "38201:18:62", - "nodeType": "YulLiteral", - "src": "38201:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "38189:3:62", - "nodeType": "YulIdentifier", - "src": "38189:3:62" - }, - "nativeSrc": "38189:31:62", - "nodeType": "YulFunctionCall", - "src": "38189:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "38171:6:62", - "nodeType": "YulIdentifier", - "src": "38171:6:62" - }, - "nativeSrc": "38171:50:62", - "nodeType": "YulFunctionCall", - "src": "38171:50:62" - }, - "nativeSrc": "38171:50:62", - "nodeType": "YulExpressionStatement", - "src": "38171:50:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "38241:9:62", - "nodeType": "YulIdentifier", - "src": "38241:9:62" - }, - { - "kind": "number", - "nativeSrc": "38252:2:62", - "nodeType": "YulLiteral", - "src": "38252:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "38237:3:62", - "nodeType": "YulIdentifier", - "src": "38237:3:62" - }, - "nativeSrc": "38237:18:62", - "nodeType": "YulFunctionCall", - "src": "38237:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "38261:6:62", - "nodeType": "YulIdentifier", - "src": "38261:6:62" - }, - { - "kind": "number", - "nativeSrc": "38269:18:62", - "nodeType": "YulLiteral", - "src": "38269:18:62", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "38257:3:62", - "nodeType": "YulIdentifier", - "src": "38257:3:62" - }, - "nativeSrc": "38257:31:62", - "nodeType": "YulFunctionCall", - "src": "38257:31:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "38230:6:62", - "nodeType": "YulIdentifier", - "src": "38230:6:62" - }, - "nativeSrc": "38230:59:62", - "nodeType": "YulFunctionCall", - "src": "38230:59:62" - }, - "nativeSrc": "38230:59:62", - "nodeType": "YulExpressionStatement", - "src": "38230:59:62" - } - ] - }, - "name": "abi_encode_tuple_t_uint64_t_uint64__to_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "37999:296:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "38087:9:62", - "nodeType": "YulTypedName", - "src": "38087:9:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "38098:6:62", - "nodeType": "YulTypedName", - "src": "38098:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "38106:6:62", - "nodeType": "YulTypedName", - "src": "38106:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "38117:4:62", - "nodeType": "YulTypedName", - "src": "38117:4:62", - "type": "" - } - ], - "src": "37999:296:62" - }, - { - "body": { - "nativeSrc": "38475:215:62", - "nodeType": "YulBlock", - "src": "38475:215:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "38492:3:62", - "nodeType": "YulIdentifier", - "src": "38492:3:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "38505:2:62", - "nodeType": "YulLiteral", - "src": "38505:2:62", - "type": "", - "value": "96" - }, - { - "name": "value0", - "nativeSrc": "38509:6:62", - "nodeType": "YulIdentifier", - "src": "38509:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "38501:3:62", - "nodeType": "YulIdentifier", - "src": "38501:3:62" - }, - "nativeSrc": "38501:15:62", - "nodeType": "YulFunctionCall", - "src": "38501:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "38530:2:62", - "nodeType": "YulLiteral", - "src": "38530:2:62", - "type": "", - "value": "96" - }, - { - "kind": "number", - "nativeSrc": "38534:1:62", - "nodeType": "YulLiteral", - "src": "38534:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "38526:3:62", - "nodeType": "YulIdentifier", - "src": "38526:3:62" - }, - "nativeSrc": "38526:10:62", - "nodeType": "YulFunctionCall", - "src": "38526:10:62" - }, - { - "kind": "number", - "nativeSrc": "38538:1:62", - "nodeType": "YulLiteral", - "src": "38538:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "38522:3:62", - "nodeType": "YulIdentifier", - "src": "38522:3:62" - }, - "nativeSrc": "38522:18:62", - "nodeType": "YulFunctionCall", - "src": "38522:18:62" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "38518:3:62", - "nodeType": "YulIdentifier", - "src": "38518:3:62" - }, - "nativeSrc": "38518:23:62", - "nodeType": "YulFunctionCall", - "src": "38518:23:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "38497:3:62", - "nodeType": "YulIdentifier", - "src": "38497:3:62" - }, - "nativeSrc": "38497:45:62", - "nodeType": "YulFunctionCall", - "src": "38497:45:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "38485:6:62", - "nodeType": "YulIdentifier", - "src": "38485:6:62" - }, - "nativeSrc": "38485:58:62", - "nodeType": "YulFunctionCall", - "src": "38485:58:62" - }, - "nativeSrc": "38485:58:62", - "nodeType": "YulExpressionStatement", - "src": "38485:58:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "38563:3:62", - "nodeType": "YulIdentifier", - "src": "38563:3:62" - }, - { - "kind": "number", - "nativeSrc": "38568:2:62", - "nodeType": "YulLiteral", - "src": "38568:2:62", - "type": "", - "value": "20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "38559:3:62", - "nodeType": "YulIdentifier", - "src": "38559:3:62" - }, - "nativeSrc": "38559:12:62", - "nodeType": "YulFunctionCall", - "src": "38559:12:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "38581:2:62", - "nodeType": "YulLiteral", - "src": "38581:2:62", - "type": "", - "value": "96" - }, - { - "name": "value1", - "nativeSrc": "38585:6:62", - "nodeType": "YulIdentifier", - "src": "38585:6:62" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "38577:3:62", - "nodeType": "YulIdentifier", - "src": "38577:3:62" - }, - "nativeSrc": "38577:15:62", - "nodeType": "YulFunctionCall", - "src": "38577:15:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "38606:2:62", - "nodeType": "YulLiteral", - "src": "38606:2:62", - "type": "", - "value": "96" - }, - { - "kind": "number", - "nativeSrc": "38610:1:62", - "nodeType": "YulLiteral", - "src": "38610:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "38602:3:62", - "nodeType": "YulIdentifier", - "src": "38602:3:62" - }, - "nativeSrc": "38602:10:62", - "nodeType": "YulFunctionCall", - "src": "38602:10:62" - }, - { - "kind": "number", - "nativeSrc": "38614:1:62", - "nodeType": "YulLiteral", - "src": "38614:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "38598:3:62", - "nodeType": "YulIdentifier", - "src": "38598:3:62" - }, - "nativeSrc": "38598:18:62", - "nodeType": "YulFunctionCall", - "src": "38598:18:62" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "38594:3:62", - "nodeType": "YulIdentifier", - "src": "38594:3:62" - }, - "nativeSrc": "38594:23:62", - "nodeType": "YulFunctionCall", - "src": "38594:23:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "38573:3:62", - "nodeType": "YulIdentifier", - "src": "38573:3:62" - }, - "nativeSrc": "38573:45:62", - "nodeType": "YulFunctionCall", - "src": "38573:45:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "38552:6:62", - "nodeType": "YulIdentifier", - "src": "38552:6:62" - }, - "nativeSrc": "38552:67:62", - "nodeType": "YulFunctionCall", - "src": "38552:67:62" - }, - "nativeSrc": "38552:67:62", - "nodeType": "YulExpressionStatement", - "src": "38552:67:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "38639:3:62", - "nodeType": "YulIdentifier", - "src": "38639:3:62" - }, - { - "kind": "number", - "nativeSrc": "38644:2:62", - "nodeType": "YulLiteral", - "src": "38644:2:62", - "type": "", - "value": "40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "38635:3:62", - "nodeType": "YulIdentifier", - "src": "38635:3:62" - }, - "nativeSrc": "38635:12:62", - "nodeType": "YulFunctionCall", - "src": "38635:12:62" - }, - { - "name": "value2", - "nativeSrc": "38649:6:62", - "nodeType": "YulIdentifier", - "src": "38649:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "38628:6:62", - "nodeType": "YulIdentifier", - "src": "38628:6:62" - }, - "nativeSrc": "38628:28:62", - "nodeType": "YulFunctionCall", - "src": "38628:28:62" - }, - "nativeSrc": "38628:28:62", - "nodeType": "YulExpressionStatement", - "src": "38628:28:62" - }, - { - "nativeSrc": "38665:19:62", - "nodeType": "YulAssignment", - "src": "38665:19:62", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "38676:3:62", - "nodeType": "YulIdentifier", - "src": "38676:3:62" - }, - { - "kind": "number", - "nativeSrc": "38681:2:62", - "nodeType": "YulLiteral", - "src": "38681:2:62", - "type": "", - "value": "72" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "38672:3:62", - "nodeType": "YulIdentifier", - "src": "38672:3:62" - }, - "nativeSrc": "38672:12:62", - "nodeType": "YulFunctionCall", - "src": "38672:12:62" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "38665:3:62", - "nodeType": "YulIdentifier", - "src": "38665:3:62" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "38300:390:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "38435:3:62", - "nodeType": "YulTypedName", - "src": "38435:3:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "38440:6:62", - "nodeType": "YulTypedName", - "src": "38440:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "38448:6:62", - "nodeType": "YulTypedName", - "src": "38448:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "38456:6:62", - "nodeType": "YulTypedName", - "src": "38456:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "38467:3:62", - "nodeType": "YulTypedName", - "src": "38467:3:62", - "type": "" - } - ], - "src": "38300:390:62" - }, - { - "body": { - "nativeSrc": "38908:276:62", - "nodeType": "YulBlock", - "src": "38908:276:62", - "statements": [ - { - "nativeSrc": "38918:27:62", - "nodeType": "YulAssignment", - "src": "38918:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "38930:9:62", - "nodeType": "YulIdentifier", - "src": "38930:9:62" - }, - { - "kind": "number", - "nativeSrc": "38941:3:62", - "nodeType": "YulLiteral", - "src": "38941:3:62", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "38926:3:62", - "nodeType": "YulIdentifier", - "src": "38926:3:62" - }, - "nativeSrc": "38926:19:62", - "nodeType": "YulFunctionCall", - "src": "38926:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "38918:4:62", - "nodeType": "YulIdentifier", - "src": "38918:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "38961:9:62", - "nodeType": "YulIdentifier", - "src": "38961:9:62" - }, - { - "name": "value0", - "nativeSrc": "38972:6:62", - "nodeType": "YulIdentifier", - "src": "38972:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "38954:6:62", - "nodeType": "YulIdentifier", - "src": "38954:6:62" - }, - "nativeSrc": "38954:25:62", - "nodeType": "YulFunctionCall", - "src": "38954:25:62" - }, - "nativeSrc": "38954:25:62", - "nodeType": "YulExpressionStatement", - "src": "38954:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "38999:9:62", - "nodeType": "YulIdentifier", - "src": "38999:9:62" - }, - { - "kind": "number", - "nativeSrc": "39010:2:62", - "nodeType": "YulLiteral", - "src": "39010:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "38995:3:62", - "nodeType": "YulIdentifier", - "src": "38995:3:62" - }, - "nativeSrc": "38995:18:62", - "nodeType": "YulFunctionCall", - "src": "38995:18:62" - }, - { - "name": "value1", - "nativeSrc": "39015:6:62", - "nodeType": "YulIdentifier", - "src": "39015:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "38988:6:62", - "nodeType": "YulIdentifier", - "src": "38988:6:62" - }, - "nativeSrc": "38988:34:62", - "nodeType": "YulFunctionCall", - "src": "38988:34:62" - }, - "nativeSrc": "38988:34:62", - "nodeType": "YulExpressionStatement", - "src": "38988:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "39042:9:62", - "nodeType": "YulIdentifier", - "src": "39042:9:62" - }, - { - "kind": "number", - "nativeSrc": "39053:2:62", - "nodeType": "YulLiteral", - "src": "39053:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "39038:3:62", - "nodeType": "YulIdentifier", - "src": "39038:3:62" - }, - "nativeSrc": "39038:18:62", - "nodeType": "YulFunctionCall", - "src": "39038:18:62" - }, - { - "name": "value2", - "nativeSrc": "39058:6:62", - "nodeType": "YulIdentifier", - "src": "39058:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "39031:6:62", - "nodeType": "YulIdentifier", - "src": "39031:6:62" - }, - "nativeSrc": "39031:34:62", - "nodeType": "YulFunctionCall", - "src": "39031:34:62" - }, - "nativeSrc": "39031:34:62", - "nodeType": "YulExpressionStatement", - "src": "39031:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "39085:9:62", - "nodeType": "YulIdentifier", - "src": "39085:9:62" - }, - { - "kind": "number", - "nativeSrc": "39096:2:62", - "nodeType": "YulLiteral", - "src": "39096:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "39081:3:62", - "nodeType": "YulIdentifier", - "src": "39081:3:62" - }, - "nativeSrc": "39081:18:62", - "nodeType": "YulFunctionCall", - "src": "39081:18:62" - }, - { - "name": "value3", - "nativeSrc": "39101:6:62", - "nodeType": "YulIdentifier", - "src": "39101:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "39074:6:62", - "nodeType": "YulIdentifier", - "src": "39074:6:62" - }, - "nativeSrc": "39074:34:62", - "nodeType": "YulFunctionCall", - "src": "39074:34:62" - }, - "nativeSrc": "39074:34:62", - "nodeType": "YulExpressionStatement", - "src": "39074:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "39128:9:62", - "nodeType": "YulIdentifier", - "src": "39128:9:62" - }, - { - "kind": "number", - "nativeSrc": "39139:3:62", - "nodeType": "YulLiteral", - "src": "39139:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "39124:3:62", - "nodeType": "YulIdentifier", - "src": "39124:3:62" - }, - "nativeSrc": "39124:19:62", - "nodeType": "YulFunctionCall", - "src": "39124:19:62" - }, - { - "arguments": [ - { - "name": "value4", - "nativeSrc": "39149:6:62", - "nodeType": "YulIdentifier", - "src": "39149:6:62" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "39165:3:62", - "nodeType": "YulLiteral", - "src": "39165:3:62", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "39170:1:62", - "nodeType": "YulLiteral", - "src": "39170:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "39161:3:62", - "nodeType": "YulIdentifier", - "src": "39161:3:62" - }, - "nativeSrc": "39161:11:62", - "nodeType": "YulFunctionCall", - "src": "39161:11:62" - }, - { - "kind": "number", - "nativeSrc": "39174:1:62", - "nodeType": "YulLiteral", - "src": "39174:1:62", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "39157:3:62", - "nodeType": "YulIdentifier", - "src": "39157:3:62" - }, - "nativeSrc": "39157:19:62", - "nodeType": "YulFunctionCall", - "src": "39157:19:62" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "39145:3:62", - "nodeType": "YulIdentifier", - "src": "39145:3:62" - }, - "nativeSrc": "39145:32:62", - "nodeType": "YulFunctionCall", - "src": "39145:32:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "39117:6:62", - "nodeType": "YulIdentifier", - "src": "39117:6:62" - }, - "nativeSrc": "39117:61:62", - "nodeType": "YulFunctionCall", - "src": "39117:61:62" - }, - "nativeSrc": "39117:61:62", - "nodeType": "YulExpressionStatement", - "src": "39117:61:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed", - "nativeSrc": "38695:489:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "38845:9:62", - "nodeType": "YulTypedName", - "src": "38845:9:62", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "38856:6:62", - "nodeType": "YulTypedName", - "src": "38856:6:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "38864:6:62", - "nodeType": "YulTypedName", - "src": "38864:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "38872:6:62", - "nodeType": "YulTypedName", - "src": "38872:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "38880:6:62", - "nodeType": "YulTypedName", - "src": "38880:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "38888:6:62", - "nodeType": "YulTypedName", - "src": "38888:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "38899:4:62", - "nodeType": "YulTypedName", - "src": "38899:4:62", - "type": "" - } - ], - "src": "38695:489:62" - }, - { - "body": { - "nativeSrc": "39370:217:62", - "nodeType": "YulBlock", - "src": "39370:217:62", - "statements": [ - { - "nativeSrc": "39380:27:62", - "nodeType": "YulAssignment", - "src": "39380:27:62", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "39392:9:62", - "nodeType": "YulIdentifier", - "src": "39392:9:62" - }, - { - "kind": "number", - "nativeSrc": "39403:3:62", - "nodeType": "YulLiteral", - "src": "39403:3:62", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "39388:3:62", - "nodeType": "YulIdentifier", - "src": "39388:3:62" - }, - "nativeSrc": "39388:19:62", - "nodeType": "YulFunctionCall", - "src": "39388:19:62" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "39380:4:62", - "nodeType": "YulIdentifier", - "src": "39380:4:62" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "39423:9:62", - "nodeType": "YulIdentifier", - "src": "39423:9:62" - }, - { - "name": "value0", - "nativeSrc": "39434:6:62", - "nodeType": "YulIdentifier", - "src": "39434:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "39416:6:62", - "nodeType": "YulIdentifier", - "src": "39416:6:62" - }, - "nativeSrc": "39416:25:62", - "nodeType": "YulFunctionCall", - "src": "39416:25:62" - }, - "nativeSrc": "39416:25:62", - "nodeType": "YulExpressionStatement", - "src": "39416:25:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "39461:9:62", - "nodeType": "YulIdentifier", - "src": "39461:9:62" - }, - { - "kind": "number", - "nativeSrc": "39472:2:62", - "nodeType": "YulLiteral", - "src": "39472:2:62", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "39457:3:62", - "nodeType": "YulIdentifier", - "src": "39457:3:62" - }, - "nativeSrc": "39457:18:62", - "nodeType": "YulFunctionCall", - "src": "39457:18:62" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "39481:6:62", - "nodeType": "YulIdentifier", - "src": "39481:6:62" - }, - { - "kind": "number", - "nativeSrc": "39489:4:62", - "nodeType": "YulLiteral", - "src": "39489:4:62", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "39477:3:62", - "nodeType": "YulIdentifier", - "src": "39477:3:62" - }, - "nativeSrc": "39477:17:62", - "nodeType": "YulFunctionCall", - "src": "39477:17:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "39450:6:62", - "nodeType": "YulIdentifier", - "src": "39450:6:62" - }, - "nativeSrc": "39450:45:62", - "nodeType": "YulFunctionCall", - "src": "39450:45:62" - }, - "nativeSrc": "39450:45:62", - "nodeType": "YulExpressionStatement", - "src": "39450:45:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "39515:9:62", - "nodeType": "YulIdentifier", - "src": "39515:9:62" - }, - { - "kind": "number", - "nativeSrc": "39526:2:62", - "nodeType": "YulLiteral", - "src": "39526:2:62", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "39511:3:62", - "nodeType": "YulIdentifier", - "src": "39511:3:62" - }, - "nativeSrc": "39511:18:62", - "nodeType": "YulFunctionCall", - "src": "39511:18:62" - }, - { - "name": "value2", - "nativeSrc": "39531:6:62", - "nodeType": "YulIdentifier", - "src": "39531:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "39504:6:62", - "nodeType": "YulIdentifier", - "src": "39504:6:62" - }, - "nativeSrc": "39504:34:62", - "nodeType": "YulFunctionCall", - "src": "39504:34:62" - }, - "nativeSrc": "39504:34:62", - "nodeType": "YulExpressionStatement", - "src": "39504:34:62" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "39558:9:62", - "nodeType": "YulIdentifier", - "src": "39558:9:62" - }, - { - "kind": "number", - "nativeSrc": "39569:2:62", - "nodeType": "YulLiteral", - "src": "39569:2:62", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "39554:3:62", - "nodeType": "YulIdentifier", - "src": "39554:3:62" - }, - "nativeSrc": "39554:18:62", - "nodeType": "YulFunctionCall", - "src": "39554:18:62" - }, - { - "name": "value3", - "nativeSrc": "39574:6:62", - "nodeType": "YulIdentifier", - "src": "39574:6:62" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "39547:6:62", - "nodeType": "YulIdentifier", - "src": "39547:6:62" - }, - "nativeSrc": "39547:34:62", - "nodeType": "YulFunctionCall", - "src": "39547:34:62" - }, - "nativeSrc": "39547:34:62", - "nodeType": "YulExpressionStatement", - "src": "39547:34:62" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed", - "nativeSrc": "39189:398:62", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "39315:9:62", - "nodeType": "YulTypedName", - "src": "39315:9:62", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "39326:6:62", - "nodeType": "YulTypedName", - "src": "39326:6:62", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "39334:6:62", - "nodeType": "YulTypedName", - "src": "39334:6:62", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "39342:6:62", - "nodeType": "YulTypedName", - "src": "39342:6:62", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "39350:6:62", - "nodeType": "YulTypedName", - "src": "39350:6:62", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "39361:4:62", - "nodeType": "YulTypedName", - "src": "39361:4:62", - "type": "" - } - ], - "src": "39189:398:62" - } - ] - }, - "contents": "{\n { }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_struct$_State_$11307_memory_ptr__to_t_struct$_State_$11307_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 256)\n mstore(headStart, and(mload(value0), sub(shl(160, 1), 1)))\n mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n mstore(add(headStart, 0xe0), mload(add(value0, 0xe0)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_uint256__to_t_bytes32_t_bytes32_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function validator_revert_uint32(value)\n {\n if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint256t_uint32t_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_uint32(value_1)\n value1 := value_1\n let value_2 := 0\n value_2 := calldataload(add(headStart, 64))\n value2 := value_2\n }\n function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_uint32(value)\n value0 := value\n }\n function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff))\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value1 := value1_1\n value2 := value2_1\n }\n function validator_revert_bool(value)\n {\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_bool(value_1)\n value1 := value_1\n }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_uint32_t_uint32__to_t_uint32_t_uint32__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffff))\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_string(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_uint256_t_string_memory_ptr_t_string_memory_ptr__to_t_uint256_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n mstore(headStart, value0)\n mstore(add(headStart, 32), 96)\n let tail_1 := abi_encode_string(value1, add(headStart, 96))\n mstore(add(headStart, 64), sub(tail_1, headStart))\n tail := abi_encode_string(value2, tail_1)\n }\n function abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 256)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), value5)\n mstore(add(headStart, 192), value6)\n mstore(add(headStart, 224), value7)\n }\n function abi_encode_tuple_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__to_t_address_t_bytes32_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 160)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n }\n function abi_encode_tuple_t_struct$_State_$11933_memory_ptr__to_t_struct$_State_$11933_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(mload(value0), sub(shl(160, 1), 1)))\n mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n }\n function abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_addresst_addresst_bytes32(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n let value_2 := 0\n value_2 := calldataload(add(headStart, 64))\n value2 := value_2\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n let value_2 := 0\n value_2 := calldataload(add(headStart, 64))\n value2 := value_2\n }\n function abi_encode_tuple_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__to_t_bytes1_t_string_memory_ptr_t_string_memory_ptr_t_uint256_t_address_t_bytes32_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, and(value0, shl(248, 255)))\n mstore(add(headStart, 32), 224)\n let tail_1 := abi_encode_string(value1, add(headStart, 224))\n mstore(add(headStart, 64), sub(tail_1, headStart))\n let tail_2 := abi_encode_string(value2, tail_1)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 160), value5)\n mstore(add(headStart, 192), sub(tail_2, headStart))\n let pos := tail_2\n let length := mload(value6)\n mstore(tail_2, length)\n pos := add(tail_2, 32)\n let srcPtr := add(value6, 32)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, mload(srcPtr))\n pos := add(pos, 32)\n srcPtr := add(srcPtr, 32)\n }\n tail := pos\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_address_t_bytes32__to_t_address_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n if gt(add(add(_1, shl(5, length)), 32), dataEnd) { revert(0, 0) }\n value0 := add(_1, 32)\n value1 := length\n }\n function abi_encode_tuple_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let tail_1 := add(headStart, 32)\n mstore(headStart, 32)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let tail_2 := add(add(headStart, shl(5, length)), 64)\n let srcPtr := add(value0, 32)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(63)))\n tail_2 := abi_encode_string(mload(srcPtr), tail_2)\n srcPtr := add(srcPtr, 32)\n pos := add(pos, 32)\n }\n tail := tail_2\n }\n function abi_decode_tuple_t_addresst_enum$_PaymentTypes_$2166t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n if iszero(lt(value_1, 3)) { revert(0, 0) }\n value1 := value_1\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32__to_t_uint256_t_uint256_t_uint256_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_bool(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_4281() -> memPtr\n {\n memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(0x40, newFreePtr)\n }\n function allocate_memory() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 0xa0)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory_4284() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 288)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function abi_decode_string(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let length := calldataload(offset)\n let src := add(offset, 0x20)\n let array_1 := 0\n let size := 0\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n let result := and(add(length, 31), not(31))\n size := add(result, 0x20)\n let memPtr := 0\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(result, 63), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n array_1 := memPtr\n mstore(memPtr, length)\n if gt(add(src, length), end) { revert(0, 0) }\n calldatacopy(add(memPtr, 0x20), src, length)\n mstore(add(add(memPtr, length), 0x20), 0)\n array := memPtr\n }\n function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_payable(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_string(add(headStart, offset), dataEnd)\n let offset_1 := calldataload(add(headStart, 32))\n if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n value1 := abi_decode_string(add(headStart, offset_1), dataEnd)\n let value := calldataload(add(headStart, 64))\n validator_revert_address(value)\n value2 := value\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function array_dataslot_string_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _1 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _1) { start := add(start, 1) }\n { sstore(start, 0) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n srcOffset := 0x20\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_string_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, 0x20) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 0x20)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n function abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), value1)\n calldatacopy(add(headStart, 64), value0, value1)\n mstore(add(add(headStart, value1), 64), 0)\n tail := add(add(headStart, and(add(value1, 31), not(31))), 64)\n }\n function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_2e5045ff73280aa8e8acd8c82710f23812497f87f7f576e2220a2ddd0d45eade__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 21)\n mstore(add(headStart, 64), \"EIP712: Uninitialized\")\n tail := add(headStart, 96)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function calldata_array_index_range_access_t_bytes_calldata_ptr(offset, length, startIndex, endIndex) -> offsetOut, lengthOut\n {\n if gt(startIndex, endIndex) { revert(0, 0) }\n if gt(endIndex, length) { revert(0, 0) }\n offsetOut := add(offset, startIndex)\n lengthOut := sub(endIndex, startIndex)\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n {\n let rel_offset_of_tail := calldataload(ptr_to_tail)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n let addr_1 := add(base_ref, rel_offset_of_tail)\n length := calldataload(addr_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n addr := add(addr_1, 0x20)\n if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n }\n function abi_encode_tuple_packed_t_bytes_calldata_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n calldatacopy(pos, value0, value1)\n let _1 := add(pos, value1)\n mstore(_1, 0)\n let length := mload(value2)\n copy_memory_to_memory_with_cleanup(add(value2, 0x20), _1, length)\n end := add(_1, length)\n }\n function panic_error_0x21()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function validator_revert_uint64(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_struct$_SignedRAV_$2546_memory_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if slt(sub(dataEnd, _1), 0x40) { revert(0, 0) }\n let value := allocate_memory_4281()\n let offset_1 := calldataload(_1)\n if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n let _2 := add(_1, offset_1)\n if slt(sub(dataEnd, _2), 0xa0) { revert(0, 0) }\n let value_1 := allocate_memory()\n let value_2 := calldataload(_2)\n validator_revert_address(value_2)\n mstore(value_1, value_2)\n let value_3 := calldataload(add(_2, 32))\n validator_revert_address(value_3)\n mstore(add(value_1, 32), value_3)\n let value_4 := calldataload(add(_2, 0x40))\n validator_revert_uint64(value_4)\n mstore(add(value_1, 0x40), value_4)\n let value_5 := calldataload(add(_2, 96))\n if iszero(eq(value_5, and(value_5, sub(shl(128, 1), 1)))) { revert(0, 0) }\n mstore(add(value_1, 96), value_5)\n let offset_2 := calldataload(add(_2, 128))\n if gt(offset_2, 0xffffffffffffffff) { revert(0, 0) }\n mstore(add(value_1, 128), abi_decode_string(add(_2, offset_2), dataEnd))\n mstore(value, value_1)\n let offset_3 := calldataload(add(_1, 32))\n if gt(offset_3, 0xffffffffffffffff) { revert(0, 0) }\n mstore(add(value, 32), abi_decode_string(add(_1, offset_3), dataEnd))\n value0 := value\n }\n function abi_decode_tuple_t_address_payablet_bytes32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n }\n function abi_encode_enum_PaymentTypes(value, pos)\n {\n if iszero(lt(value, 3))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(pos, value)\n }\n function abi_encode_tuple_t_enum$_PaymentTypes_$2166__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n abi_encode_enum_PaymentTypes(value0, headStart)\n }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n }\n function abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_bytes32t_uint256t_address_payablet_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n let value_2 := calldataload(add(headStart, 64))\n validator_revert_address(value_2)\n value2 := value_2\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value3 := abi_decode_string(add(headStart, offset), dataEnd)\n }\n function abi_decode_uint32_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_uint32(value)\n }\n function abi_decode_uint64_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_uint64(value)\n }\n function abi_decode_tuple_t_struct$_Provision_$3718_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 288)\n if _1 { revert(0, 0) }\n _1 := 0\n let value := allocate_memory_4284()\n let value_1 := _1\n value_1 := mload(headStart)\n mstore(value, value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n mstore(add(value, 96), abi_decode_uint32_fromMemory(add(headStart, 96)))\n mstore(add(value, 128), abi_decode_uint64_fromMemory(add(headStart, 128)))\n mstore(add(value, 160), abi_decode_uint64_fromMemory(add(headStart, 160)))\n mstore(add(value, 192), abi_decode_uint32_fromMemory(add(headStart, 192)))\n mstore(add(value, 224), abi_decode_uint64_fromMemory(add(headStart, 224)))\n let value_4 := _1\n value_4 := mload(add(headStart, 256))\n mstore(add(value, 256), value_4)\n value0 := value\n }\n function abi_encode_tuple_t_rational_0_by_1_t_address__to_t_uint8_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xff))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := mload(headStart)\n value0 := value\n }\n function abi_decode_tuple_t_uint32_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_uint32(value)\n value0 := value\n }\n function abi_decode_tuple_t_uint64_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_uint64(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__to_t_struct$_SignedRAV_$2546_memory_ptr_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n let memberValue0 := mload(value0)\n mstore(add(headStart, 64), 64)\n mstore(add(headStart, 128), and(mload(memberValue0), sub(shl(160, 1), 1)))\n mstore(add(headStart, 0xa0), and(mload(add(memberValue0, 0x20)), sub(shl(160, 1), 1)))\n mstore(add(headStart, 192), and(mload(add(memberValue0, 64)), 0xffffffffffffffff))\n mstore(add(headStart, 224), and(mload(add(memberValue0, 0x60)), sub(shl(128, 1), 1)))\n let memberValue0_1 := mload(add(memberValue0, 128))\n mstore(add(headStart, 256), 0xa0)\n let end := abi_encode_string(memberValue0_1, add(headStart, 288))\n let memberValue0_2 := mload(add(value0, 0x20))\n mstore(add(headStart, 0x60), add(sub(end, headStart), not(63)))\n tail := abi_encode_string(memberValue0_2, end)\n mstore(add(headStart, 0x20), value1)\n }\n function abi_encode_tuple_t_enum$_PaymentTypes_$2166_t_bytes_memory_ptr__to_t_uint8_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n abi_encode_enum_PaymentTypes(value0, headStart)\n mstore(add(headStart, 32), 64)\n tail := abi_encode_string(value1, add(headStart, 64))\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_address_t_address_t_enum$_PaymentTypes_$2166__to_t_address_t_address_t_uint8__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n abi_encode_enum_PaymentTypes(value2, add(headStart, 64))\n }\n function abi_decode_tuple_t_struct$_DelegationPool_$3748_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := slt(sub(dataEnd, headStart), 160)\n if _1 { revert(0, 0) }\n _1 := 0\n let value := allocate_memory()\n let value_1 := _1\n value_1 := mload(headStart)\n mstore(value, value_1)\n let value_2 := _1\n value_2 := mload(add(headStart, 32))\n mstore(add(value, 32), value_2)\n let value_3 := _1\n value_3 := mload(add(headStart, 64))\n mstore(add(value, 64), value_3)\n let value_4 := _1\n value_4 := mload(add(headStart, 96))\n mstore(add(value, 96), value_4)\n let value_5 := _1\n value_5 := mload(add(headStart, 128))\n mstore(add(value, 128), value_5)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_bytes32_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 160)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n }\n function abi_encode_tuple_t_bytes32_t_address_t_address__to_t_bytes32_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__to_t_bytes_memory_ptr_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, 128)\n tail := abi_encode_string(value0, add(headStart, 128))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_decode_tuple_t_uint256t_address_payable_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := 0\n value := mload(headStart)\n value0 := value\n let value_1 := mload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function decrement_t_uint256(value) -> ret\n {\n if iszero(value) { panic_error_0x11() }\n ret := add(value, not(0))\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0)) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function abi_encode_tuple_t_address_t_address_t_uint32__to_t_address_t_address_t_uint32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, 0xffffffff))\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_encode_tuple_t_stringliteral_aaf3daf27360df170a52f29a0edeebb3d20b8e3dc84a13c5eaf056803b549f50__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 9)\n mstore(add(headStart, 64), \"!transfer\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_uint32_t_uint32__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffff))\n }\n function abi_encode_tuple_t_uint64_t_uint64__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffffffffffff))\n }\n function abi_encode_tuple_packed_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n mstore(pos, and(shl(96, value0), not(sub(shl(96, 1), 1))))\n mstore(add(pos, 20), and(shl(96, value1), not(sub(shl(96, 1), 1))))\n mstore(add(pos, 40), value2)\n end := add(pos, 72)\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 160)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xff))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n}", - "id": 62, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "4317": [ - { - "length": 32, - "start": 17364 - } - ], - "4321": [ - { - "length": 32, - "start": 8261 - } - ], - "4337": [ - { - "length": 32, - "start": 14333 - } - ], - "4341": [ - { - "length": 32, - "start": 16358 - } - ], - "13256": [ - { - "length": 32, - "start": 6680 - }, - { - "length": 32, - "start": 14544 - } - ], - "13260": [ - { - "length": 32, - "start": 12201 - } - ], - "13264": [ - { - "length": 32, - "start": 17400 - } - ] - }, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2CE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8180083B GT PUSH2 0x17E JUMPI DUP1 PUSH4 0xA827A90C GT PUSH2 0xDF JUMPI DUP1 PUSH4 0xA827A90C EQ PUSH2 0x8F6 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x909 JUMPI DUP1 PUSH4 0xB15D2A2C EQ PUSH2 0x929 JUMPI DUP1 PUSH4 0xBA38F67D EQ PUSH2 0x93C JUMPI DUP1 PUSH4 0xBFDFA7AF EQ PUSH2 0x94F JUMPI DUP1 PUSH4 0xCB8347FE EQ PUSH2 0x966 JUMPI DUP1 PUSH4 0xCBE5F3F2 EQ PUSH2 0x979 JUMPI DUP1 PUSH4 0xCE0FC0CC EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xCE56C98B EQ PUSH2 0x9AC JUMPI DUP1 PUSH4 0xD07A7A84 EQ PUSH2 0x9BF JUMPI DUP1 PUSH4 0xDEDF6726 EQ PUSH2 0x9C8 JUMPI DUP1 PUSH4 0xE2E1E8E9 EQ PUSH2 0x9DB JUMPI DUP1 PUSH4 0xE6F50054 EQ PUSH2 0x9FB JUMPI DUP1 PUSH4 0xEFF0F592 EQ PUSH2 0xA0E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8180083B EQ PUSH2 0x795 JUMPI DUP1 PUSH4 0x819BA366 EQ PUSH2 0x7A8 JUMPI DUP1 PUSH4 0x81E777A7 EQ PUSH2 0x7C5 JUMPI DUP1 PUSH4 0x832BC923 EQ PUSH2 0x7D8 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x7EB JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x7F3 JUMPI DUP1 PUSH4 0x85E82BAF EQ PUSH2 0x80E JUMPI DUP1 PUSH4 0x88812583 EQ PUSH2 0x817 JUMPI DUP1 PUSH4 0x8D2F2948 EQ PUSH2 0x82E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x859 JUMPI DUP1 PUSH4 0x9249C5C1 EQ PUSH2 0x861 JUMPI DUP1 PUSH4 0x9384E078 EQ PUSH2 0x878 JUMPI DUP1 PUSH4 0x93D4E7CB EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x9AAFA5D1 EQ PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F793CDC GT PUSH2 0x233 JUMPI DUP1 PUSH4 0x4F793CDC EQ PUSH2 0x4B1 JUMPI DUP1 PUSH4 0x52A9039C EQ PUSH2 0x4D3 JUMPI DUP1 PUSH4 0x55C85269 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0x6234E216 EQ PUSH2 0x63E JUMPI DUP1 PUSH4 0x6A3CA383 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x6D9A3951 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0x71CE020A EQ PUSH2 0x6F4 JUMPI DUP1 PUSH4 0x7203CA78 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0x73371823 EQ PUSH2 0x740 JUMPI DUP1 PUSH4 0x772495C3 EQ PUSH2 0x749 JUMPI DUP1 PUSH4 0x7AA31BCE EQ PUSH2 0x75C JUMPI DUP1 PUSH4 0x7DFE6D28 EQ PUSH2 0x76F JUMPI DUP1 PUSH4 0x7E89BAC3 EQ PUSH2 0x782 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE022923 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0x138DEA08 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x13C474C9 EQ PUSH2 0x36B JUMPI DUP1 PUSH4 0x1CAFA218 EQ PUSH2 0x3C0 JUMPI DUP1 PUSH4 0x1DD42F60 EQ PUSH2 0x3D5 JUMPI DUP1 PUSH4 0x1EBB7C30 EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0x24B8FBF6 EQ PUSH2 0x40E JUMPI DUP1 PUSH4 0x35577962 EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x36FDD28A EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x3AFD23FE EQ PUSH2 0x43D JUMPI DUP1 PUSH4 0x3F0ED79D EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0x45F54485 EQ PUSH2 0x488 JUMPI DUP1 PUSH4 0x482468B7 EQ PUSH2 0x49B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6 PUSH2 0x2E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0xE0 SWAP2 DUP3 ADD MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x35D PUSH1 0xD7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3A0 PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x6A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x3CE CALLDATASIZE PUSH1 0x4 PUSH2 0x5180 JUMP JUMPDEST PUSH2 0xAD8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3D3 PUSH2 0x3E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B8 JUMP JUMPDEST PUSH2 0xC56 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x41C CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x42F CALLDATASIZE PUSH1 0x4 PUSH2 0x5278 JUMP JUMPDEST PUSH2 0xE9A JUMP JUMPDEST PUSH2 0x35D PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x44B CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xEB0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xED1 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0xF15 JUMP JUMPDEST PUSH2 0x4A3 PUSH2 0xF1F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST PUSH2 0x4C4 PUSH2 0x4BF CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0xF32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5331 JUMP JUMPDEST PUSH2 0x52E PUSH2 0x4E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 DUP8 ADD SLOAD PUSH1 0x7 SWAP1 SWAP8 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP7 SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP10 AND DUP10 MSTORE PUSH1 0x20 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE SWAP6 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x604 PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP6 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP6 ADD DUP5 SWAP1 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x7 SWAP1 SWAP3 ADD SLOAD PUSH1 0xE0 SWAP1 SWAP6 ADD DUP6 SWAP1 MSTORE SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x470 PUSH2 0x1065 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x64C CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9F PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x107A JUMP JUMPDEST PUSH2 0x6C8 PUSH2 0x67F CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE PUSH1 0x9E DUP3 MSTORE DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP3 MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x10F6 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x1108 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x5366 JUMP JUMPDEST PUSH2 0x733 PUSH2 0x718 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0x35D PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x757 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x1113 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x76A CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x111D JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x77D CALLDATASIZE PUSH1 0x4 PUSH2 0x5394 JUMP JUMPDEST PUSH2 0x112E JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x790 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x1146 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x11BA JUMP JUMPDEST PUSH2 0x7B0 PUSH2 0x1345 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5394 JUMP JUMPDEST PUSH2 0x1355 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x7E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x14BB JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x14CF JUMP JUMPDEST PUSH2 0x7FB PUSH2 0x1511 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x53C4 JUMP JUMPDEST PUSH2 0x35D PUSH1 0xA0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x841 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B JUMP JUMPDEST PUSH2 0x733 PUSH2 0x15BA JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x886 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x8CE PUSH2 0x8A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x9E PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x841 SWAP1 PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x904 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x15D5 JUMP JUMPDEST PUSH2 0x91C PUSH2 0x917 CALLDATASIZE PUSH1 0x4 PUSH2 0x5475 JUMP JUMPDEST PUSH2 0x1682 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0x54EA JUMP JUMPDEST PUSH2 0x35D PUSH2 0x937 CALLDATASIZE PUSH1 0x4 PUSH2 0x554F JUMP JUMPDEST PUSH2 0x1769 JUMP JUMPDEST PUSH2 0x470 PUSH2 0x94A CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x19F7 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x3F9 SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x974 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1A15 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x987 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH1 0x68 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x9A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1B54 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x55B7 JUMP JUMPDEST PUSH2 0x1C83 JUMP JUMPDEST PUSH2 0x35D PUSH1 0xD6 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x9D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5216 JUMP JUMPDEST PUSH2 0x1C96 JUMP JUMPDEST PUSH2 0x35D PUSH2 0x9E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xA09 CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH2 0x1E24 JUMP JUMPDEST PUSH2 0x3A0 PUSH2 0xA1C CALLDATASIZE PUSH1 0x4 PUSH2 0x52B1 JUMP JUMPDEST PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP5 JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0xA51 CALLDATASIZE PUSH1 0x4 PUSH2 0x5151 JUMP JUMPDEST PUSH2 0x1E35 JUMP JUMPDEST PUSH2 0xA5E PUSH2 0x50EB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAE2 PUSH2 0x1E70 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xB09 JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xB25 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xB33 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xB51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xB7B JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH2 0xB84 CALLER PUSH2 0x1E94 JUMP JUMPDEST PUSH2 0xB8C PUSH2 0x1EA5 JUMP JUMPDEST PUSH2 0xB94 PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0xB9C PUSH2 0x1EC5 JUMP JUMPDEST PUSH2 0xBE8 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD PUSH15 0x537562677261706853657276696365 PUSH1 0x88 SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x312E3 PUSH1 0xEC SHL DUP2 MSTORE POP PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0xBF4 DUP9 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0xBFD DUP8 PUSH2 0x1F67 JUMP JUMPDEST PUSH2 0xC06 DUP7 PUSH2 0x1FBB JUMP JUMPDEST DUP4 ISZERO PUSH2 0xC4C JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC5E PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x1F67 JUMP JUMPDEST POP JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 PUSH2 0xC78 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCA7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCE8 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0xD14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0xD22 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0xD2D DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xD38 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH2 0xD40 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0xD50 DUP8 DUP10 ADD DUP10 PUSH2 0x5756 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP4 MLOAD GT PUSH2 0xD78 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7838439 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD GT PUSH2 0xD9A JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E63BD95 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0xDD1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD06866D PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE TIMESTAMP DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 DUP2 MSTORE DUP3 DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 SWAP1 SWAP3 MSTORE SWAP3 SWAP1 KECCAK256 DUP2 MLOAD DUP2 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 PUSH2 0xE1B SWAP1 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x2 DUP3 ADD SWAP1 PUSH2 0xE30 SWAP1 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0xE4C JUMPI PUSH2 0xE4C DUP10 DUP3 PUSH2 0x229A JUMP JUMPDEST DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x159567BEA25499A91F60E1FBB349FF2A1F8C1B2883198F25C1E12C99EDDB44FA DUP10 DUP10 PUSH1 0x40 MLOAD PUSH2 0xE87 SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xEA2 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x22F1 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xA0 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xECB SWAP1 PUSH2 0xEC5 PUSH1 0x9D DUP6 PUSH2 0x2358 JUMP JUMPDEST SWAP1 PUSH2 0x23D2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x72E3EF97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0xF0B PUSH2 0x240F JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x2434 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xC67 CALLER DUP3 PUSH2 0x2480 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH2 0x252D JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP2 SWAP3 SWAP2 PUSH2 0xF54 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xF80 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xFCD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xFA2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xFCD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xFB0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 DUP1 PUSH1 0x2 ADD DUP1 SLOAD PUSH2 0xFE2 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x100E SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x105B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1030 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x105B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x103E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1070 PUSH2 0x25A4 JUMP JUMPDEST SLOAD PUSH1 0xFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP3 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP4 ADD MSTORE SWAP1 PUSH2 0xECB SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH2 0x10FE PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xF13 PUSH1 0x0 PUSH2 0x25E7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH2 0x2643 JUMP JUMPDEST PUSH2 0xC67 CALLER DUP3 PUSH2 0x229A JUMP JUMPDEST PUSH2 0x1125 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x26BE JUMP JUMPDEST PUSH2 0x1136 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0x1141 DUP4 DUP4 DUP4 PUSH2 0x26F3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x114E PUSH2 0x2011 JUMP JUMPDEST PUSH2 0x115B DUP2 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP2 SWAP1 PUSH2 0x117D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1C9C717B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0xD7 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x6DEEF78FFE3DF79AE5CD8E40B842C36AC6077E13746B9B68A9F327537B01E4E9 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST DUP3 PUSH2 0x11C3 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11F2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x120F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1233 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1256 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP1 DUP2 SWAP1 PUSH2 0x1293 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x129C PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12AA DUP5 DUP7 ADD DUP7 PUSH2 0x5151 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x12C1 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP8 SWAP2 DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x12EF JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x12FA DUP2 PUSH2 0x2746 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x73330C218A680717E9EEE625C262DF66EDDFDF99ECB388D25F6B32D66B9A318A DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x1335 SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF2A PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD SWAP1 SWAP2 JUMP JUMPDEST DUP3 PUSH2 0x135E PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x138D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13CE SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x13F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0x13FF DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x140A DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x1415 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 SWAP1 DUP2 SWAP1 PUSH2 0x1450 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1459 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH2 0x146E PUSH1 0x9D DUP9 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP9 SWAP2 DUP9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x149C JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0xC4C DUP7 DUP7 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x289C JUMP JUMPDEST PUSH2 0x14C3 PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1500 JUMPI PUSH1 0x40 MLOAD PUSH4 0x72E3EF97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1509 PUSH2 0x2274 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x2C28 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x1527 PUSH2 0x2C6F JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP ISZERO DUP1 ISZERO PUSH2 0x153B JUMPI POP PUSH1 0x1 DUP2 ADD SLOAD ISZERO JUMPDEST PUSH2 0x157F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1152540DCC4C8E88155B9A5B9A5D1A585B1A5E9959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH2 0x1587 PUSH2 0x2C93 JUMP JUMPDEST PUSH2 0x158F PUSH2 0x2D34 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0xF PUSH1 0xF8 SHL SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP CHAINID SWAP9 POP ADDRESS SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x15C5 PUSH2 0x2D51 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E2 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x15FB PUSH1 0xA0 SLOAD DUP4 PUSH2 0x23D2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 SLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x161D SWAP2 SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2D75 JUMP JUMPDEST SWAP1 POP DUP2 DUP1 PUSH2 0x1628 JUMPI POP DUP1 JUMPDEST DUP5 SWAP1 PUSH2 0x1647 JUMPI PUSH1 0x40 MLOAD PUSH3 0x3477B5 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1651 DUP4 PUSH2 0x2D94 JUMP JUMPDEST ISZERO DUP5 SWAP1 PUSH2 0x1672 JUMPI PUSH1 0x40 MLOAD PUSH4 0x17C7B35D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x167C DUP5 PUSH2 0x2746 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x16AC JUMPI PUSH2 0x16AC PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x16DF JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x16CA JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1761 JUMPI PUSH2 0x173C ADDRESS DUP7 DUP7 DUP5 DUP2 DUP2 LT PUSH2 0x1703 JUMPI PUSH2 0x1703 PUSH2 0x5968 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1715 SWAP2 SWAP1 PUSH2 0x597E JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1728 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x59C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x2DB3 JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x174E JUMPI PUSH2 0x174E PUSH2 0x5968 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x16E5 JUMP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0x1774 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17A3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17E4 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1807 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP6 PUSH1 0x0 PUSH2 0x1815 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1820 DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x182B DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP9 SWAP1 DUP2 SWAP1 PUSH2 0x1866 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x186F PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1884 JUMPI PUSH2 0x1884 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x18E2 JUMPI PUSH1 0x0 PUSH2 0x1897 DUP9 DUP11 ADD DUP11 PUSH2 0x5A16 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP2 POP DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP1 DUP3 AND EQ PUSH2 0x18CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x1A071D07 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x18DA DUP2 PUSH2 0x2E29 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1995 JUMP JUMPDEST PUSH1 0x2 DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x18F6 JUMPI PUSH2 0x18F6 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x197A JUMPI PUSH1 0x0 DUP1 PUSH2 0x190A DUP10 DUP12 ADD DUP12 PUSH2 0x5B3B JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH2 0x1924 PUSH1 0x9D DUP5 PUSH2 0x2358 JUMP JUMPDEST MLOAD DUP14 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1952 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC0BBFF13 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH2 0x1971 DUP3 DUP3 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x332E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1995 JUMP JUMPDEST DUP9 PUSH1 0x40 MLOAD PUSH4 0x47031CF PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5B89 JUMP JUMPDEST DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x19A7 JUMPI PUSH2 0x19A7 PUSH2 0x59EB JUMP JUMPDEST DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x54FE682BFB66381A9382E13E4B95A3DD4F960EAFBAE063FDEA3539D144FF3FF5 DUP4 PUSH1 0x40 MLOAD PUSH2 0x19E2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xECB DUP3 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2D75 JUMP JUMPDEST CALLER PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP3 EQ PUSH2 0x1A62 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCDC0567F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 PUSH2 0x1A74 DUP4 DUP6 ADD DUP6 PUSH2 0x5B97 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1A80 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE76FEDE6 DUP7 DUP5 DUP5 PUSH2 0x1A99 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP7 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B06 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2F2E74A11116E05B39159372CCEB6739257B08D72F7171D208FF27BB6466C58 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1B45 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x1B5D PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B8C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BCD SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1BF0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP1 DUP2 SWAP1 PUSH2 0x1C2D JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1C36 PUSH2 0x2274 JUMP JUMPDEST PUSH2 0x1C3F DUP6 PUSH2 0x38F2 JUMP JUMPDEST PUSH2 0x1C48 DUP6 PUSH2 0x3908 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH32 0xF53CF6521A1B5FC0C04BFFA70374A4DC2E3474F2B2AC1643C3BCC54E2DB4A939 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8F DUP4 DUP4 PUSH2 0x397B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x1C9F PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7C145CC7 DUP3 ADDRESS CALLER PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CCE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x55E5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CEB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D0F SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST DUP2 CALLER SWAP1 SWAP2 PUSH2 0x1D32 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCC5D3C8B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP DUP4 PUSH1 0x0 PUSH2 0x1D40 DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D4B DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x1D56 DUP2 PUSH1 0x0 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 SWAP1 DUP2 SWAP1 PUSH2 0x1D91 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEE271899 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH2 0x1D9A PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0x1DAB DUP10 DUP12 ADD DUP12 PUSH2 0x5BB9 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x1DD3 DUP12 DUP4 DUP7 DUP7 DUP6 PUSH1 0x2 PUSH1 0x18 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x39EA JUMP JUMPDEST POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD3803EB82EF5B4CDFF8646734EBBAF5B37441E96314B27FFD3D0940F12A038E7 DUP12 DUP12 PUSH1 0x40 MLOAD PUSH2 0x1E0F SWAP3 SWAP2 SWAP1 PUSH2 0x5910 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1E2C PUSH2 0x2011 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x1FBB JUMP JUMPDEST PUSH2 0x1E3D PUSH2 0x2011 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1E67 JUMPI PUSH1 0x0 PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x25E7 JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SWAP1 JUMP JUMPDEST PUSH2 0x1E9C PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x3B98 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EB5 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EBD PUSH2 0x3BA0 JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x1EA5 JUMP JUMPDEST PUSH2 0x1ECD PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EBD PUSH2 0x3BD5 JUMP JUMPDEST PUSH2 0x1EDD PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x1EE7 DUP3 DUP3 PUSH2 0x3BF2 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x3C04 JUMP JUMPDEST DUP2 DUP2 DUP1 DUP3 GT ISZERO PUSH2 0x1F1D JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x0 DUP3 SWAP1 SSTORE PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x90699B8B4BF48918FEA1129C85F9BC7B51285DF7ECC982910813C7805F568849 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0xC0 SHL NOT AND PUSH1 0x1 PUSH1 0xC0 SHL PUSH4 0xFFFFFFFF DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x472ABA493F9FD1D136EC54986F619F3AA5CAFF964F0E731A9909FB9A1270211F SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1FDC JUMPI PUSH1 0x40 MLOAD PUSH4 0xBC71A043 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xD6 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x2AAAF20B08565EEBC0C962CD7C568E54C3C0C2B85A1F942B82CD1BD730FDCD23 SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST CALLER PUSH2 0x201A PUSH2 0x15BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xF13 JUMPI CALLER PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x20B8 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x25D9897E DUP5 ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E5 SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2103 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2127 SWAP2 SWAP1 PUSH2 0x5C36 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 EQ ISZERO DUP4 SWAP1 PUSH2 0x215B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B3C09BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x746F6B656E73 PUSH1 0xD0 SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x219F PUSH2 0x2643 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP4 PUSH2 0x21B4 JUMPI DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x21BA JUMP JUMPDEST DUP5 PUSH1 0xE0 ADD MLOAD JUMPDEST SWAP1 POP PUSH2 0x2208 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD DUP2 MSTORE PUSH1 0x20 ADD PUSH13 0x1D1A185DDA5B99D4195C9A5BD9 PUSH1 0x9A SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2213 PUSH2 0x252D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP7 PUSH2 0x2228 JUMPI DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x222E JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD MLOAD JUMPDEST SWAP1 POP PUSH2 0xC4C DUP2 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xE DUP2 MSTORE PUSH1 0x20 ADD PUSH14 0x1B585E15995C9A599A595C90DD5D PUSH1 0x92 SHL DUP2 MSTORE POP PUSH2 0x3C0C JUMP JUMPDEST PUSH2 0x227C PUSH2 0x1065 JUMP JUMPDEST ISZERO PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD93C0665 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x3349D2E561F8C23A3FF42257745C8FB53E4BF3CBD4046672A3C4A0C7EE8A7B31 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x22F9 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x67 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xA95BAC2F3DF0D40E8278281C1D39D53C60E4F2BF3550CA5665738D0916E89789 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH2 0x2360 PUSH2 0x50EB JUMP JUMPDEST PUSH2 0x236A DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 SWAP1 SWAP2 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x23E7 DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0xA0 ADD MLOAD PUSH2 0x3CE8 JUMP JUMPDEST PUSH2 0x23F1 SWAP1 TIMESTAMP PUSH2 0x5955 JUMP JUMPDEST SWAP1 POP PUSH2 0x23FC DUP5 PUSH2 0x25C8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2407 JUMPI POP DUP3 DUP2 GT JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2417 PUSH2 0x1065 JUMP JUMPDEST PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8DFC202B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x243C PUSH2 0x240F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2446 PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 SSTORE SWAP1 POP PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x11AF SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD DUP5 SWAP1 MSTORE DUP3 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP1 MLOAD DUP1 DUP4 SUB DUP3 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP2 SWAP1 PUSH2 0x24D4 SWAP1 DUP5 SWAP1 PUSH2 0x3CFE SWAP1 PUSH2 0x3D69 SWAP1 PUSH2 0x3E62 SWAP1 DUP10 PUSH2 0x3E87 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x13F3FA9F0E54AF1AF76D8B5D11C3973D7C2AED6312B61EFFF2F7B49D73AD67EB DUP4 DUP4 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2518 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1B45 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2538 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x84633713 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2575 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2599 SWAP2 SWAP1 PUSH2 0x5CF1 JUMP JUMPDEST SWAP3 PUSH3 0xF4240 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25D7 DUP3 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xECB JUMPI POP POP PUSH1 0x80 ADD MLOAD ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F1 PUSH2 0x2D51 JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP4 SWAP5 POP SWAP2 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x264E PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5AEA0EC4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x268B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26AF SWAP2 SWAP1 PUSH2 0x5D0E JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0xA0 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x21774046E2611DDB52C8C46E1AD97524EEB2E3FDA7DCD9428867868B4C4D06BA SWAP1 PUSH1 0x20 ADD PUSH2 0x11AF JUMP JUMPDEST PUSH2 0x2700 PUSH1 0x9E DUP5 DUP5 DUP5 PUSH2 0x3F41 JUMP JUMPDEST DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD54C7ABC930F6D506DA2D08AA7AEAD4F2443E1DB6D5F560384A2F652FF893E19 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2753 PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x27DE DUP3 PUSH2 0x2761 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2792 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27D5 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x9D SWAP2 SWAP1 PUSH2 0x4008 JUMP JUMPDEST PUSH2 0x27E9 PUSH1 0x9D DUP4 PUSH2 0x40B0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x27FC SWAP2 PUSH1 0x9F SWAP2 PUSH2 0x415B JUMP JUMPDEST DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x2823 SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x663A6F978DE61DC3E2441026C082BE709377B083AB642A8CE71386F8B91C710B DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x2890 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH2 0x28A4 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28B1 PUSH1 0x9D DUP7 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x28BC DUP2 PUSH2 0x25C8 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x28DC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1EB5FF95 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP DUP1 PUSH1 0x40 ADD MLOAD DUP5 EQ ISZERO DUP6 DUP6 SWAP1 SWAP2 PUSH2 0x2908 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF32518CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x40 DUP2 ADD MLOAD DUP1 DUP6 GT ISZERO PUSH2 0x293E JUMPI PUSH2 0x2939 PUSH2 0x2922 PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x292E DUP5 DUP10 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x9F SWAP3 SWAP2 SWAP1 DUP9 PUSH2 0x41E0 JUMP JUMPDEST PUSH2 0x2957 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x2957 SWAP1 PUSH2 0x294E DUP8 DUP5 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x9F SWAP2 SWAP1 PUSH2 0x415B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2961 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2992 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x29B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29D5 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x29E2 DUP5 PUSH2 0x2D94 JUMP JUMPDEST ISZERO PUSH2 0x29EE JUMPI PUSH1 0x0 PUSH2 0x29FD JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x29FD SWAP1 DUP4 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD DUP10 SWAP1 SSTORE PUSH1 0x6 ADD DUP4 SWAP1 SSTORE SWAP1 POP PUSH2 0x2A2C PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6452FC0F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC8A5F81E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A7A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A9E SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2AC9 SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP DUP3 DUP8 GT ISZERO PUSH2 0x2B11 JUMPI PUSH2 0x2AE0 DUP4 DUP9 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2B06 SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x2B47 SWAP1 POP JUMP JUMPDEST PUSH2 0x2B1B DUP8 DUP5 PUSH2 0x5955 JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP7 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2B41 SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6DB4A6F9BE2D5E72EB2A2AF2374AC487971BF342A261BA0BC1CF471BF2A2C31F DUP11 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2B9E SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP8 AND DUP8 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP6 ADD MSTORE POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2C30 PUSH2 0x2274 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C3A PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR DUP2 SSTORE SWAP1 POP PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x2473 CALLER SWAP1 JUMP JUMPDEST PUSH32 0xA16A46D94261C7517CC8FF89F61C0CE93598E3C849801011DEE649A6A557D100 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2C9F PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x2 ADD DUP1 SLOAD PUSH2 0x2CB0 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2CDC SWAP1 PUSH2 0x57D1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2D29 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2CFE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D29 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2D0C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2D40 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x3 ADD DUP1 SLOAD PUSH2 0x2CB0 SWAP1 PUSH2 0x57D1 JUMP JUMPDEST PUSH32 0x9016D09D72D40FDAE2FD8CEAC6B6234C7706214FD39C1CD1E609A0528C199300 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D8C PUSH2 0x2D82 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x9F SWAP1 DUP6 DUP6 PUSH2 0x42E5 JUMP JUMPDEST ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2DA3 DUP3 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xECB JUMPI POP POP PUSH1 0x40 ADD MLOAD ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x2DD0 SWAP2 SWAP1 PUSH2 0x5D3E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2E0B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E10 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2E20 DUP6 DUP4 DUP4 PUSH2 0x437F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD DUP1 MLOAD PUSH1 0x0 SWAP4 SWAP3 DUP5 SWAP3 PUSH2 0x2E4E SWAP3 DUP2 ADD DUP3 ADD SWAP2 ADD PUSH2 0x5D5A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E5D PUSH1 0x9D DUP4 PUSH2 0x2358 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x2E92 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4508FBF7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2EA4 DUP5 PUSH1 0x0 PUSH2 0x2480 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EAE PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2ED9 SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F1A SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2F26 PUSH2 0x43F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C4EA0ED DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2F53 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F94 SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST PUSH2 0x2F9F JUMPI PUSH1 0x0 PUSH2 0x2FA3 JUMP JUMPDEST PUSH1 0xD7 SLOAD JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7F07D283 PUSH1 0x0 DUP12 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2FEB SWAP3 SWAP2 SWAP1 PUSH2 0x5D77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3017 SWAP3 SWAP2 SWAP1 PUSH2 0x5E16 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3036 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x305A SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3068 DUP3 DUP5 PUSH2 0x441A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3074 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x309F SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30E0 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x30ED DUP4 DUP8 PUSH2 0x5D2B JUMP JUMPDEST EQ DUP6 DUP3 DUP5 SWAP1 SWAP2 SWAP3 PUSH2 0x3122 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B0D791F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP DUP4 ISZERO SWAP1 POP PUSH2 0x32DB JUMPI PUSH1 0x0 PUSH1 0xD6 SLOAD DUP5 PUSH2 0x313C SWAP2 SWAP1 PUSH2 0x5E36 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3148 PUSH2 0x38CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5AEA0EC4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3185 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31A9 SWAP2 SWAP1 PUSH2 0x5D0E JUMP JUMPDEST PUSH2 0x31BC SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND TIMESTAMP PUSH2 0x5D2B JUMP JUMPDEST SWAP1 POP PUSH2 0x31C9 DUP12 DUP4 DUP4 PUSH2 0x4481 JUMP JUMPDEST DUP4 ISZERO PUSH2 0x32D8 JUMPI PUSH2 0x31D7 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1D1C2FEC DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3204 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3223 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3247 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST POP PUSH2 0x326C PUSH2 0x3253 PUSH2 0x43F6 JUMP JUMPDEST DUP6 PUSH2 0x325C PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x45F3 JUMP JUMPDEST PUSH2 0x3274 PUSH2 0x43F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x102AE651 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x81573288 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x32D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 PUSH32 0x60A56D4D503735B4848FEB6F491F14D7415262346B820D3B5A3D2733201BDA36 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x333C PUSH1 0x9D DUP7 PUSH2 0x2358 JUMP JUMPDEST SWAP1 POP PUSH2 0x3347 DUP2 PUSH2 0x25C8 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x3367 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1EB5FF95 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x337F PUSH1 0xA0 SLOAD DUP4 PUSH2 0x23D2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x3392 JUMPI POP PUSH2 0x3390 DUP3 PUSH2 0x2D94 JUMP JUMPDEST ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x339D JUMPI POP DUP5 ISZERO ISZERO JUMPDEST PUSH2 0x33A8 JUMPI PUSH1 0x0 PUSH2 0x341E JUMP JUMPDEST PUSH2 0x33B0 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDB750926 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x33DB SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x33FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x341E SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH2 0x345D DUP7 PUSH2 0x342C PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2792 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x3468 PUSH1 0x9D DUP8 PUSH2 0x46A2 JUMP JUMPDEST PUSH2 0x3473 PUSH1 0x9D DUP8 PUSH2 0x474D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 ISZERO PUSH2 0x37C2 JUMPI PUSH1 0x0 PUSH2 0x3486 PUSH2 0x2043 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x40 MLOAD PUSH4 0x7573EF4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x7573EF4F SWAP2 PUSH2 0x34B9 SWAP2 ADDRESS SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5E4D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34FA SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3506 PUSH2 0x2043 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD PUSH4 0x1584A179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x561285E4 SWAP2 PUSH2 0x3536 SWAP2 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5625 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3577 SWAP2 SWAP1 PUSH2 0x5E72 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x20 ADD MLOAD GT PUSH2 0x358C JUMPI PUSH1 0x0 PUSH2 0x3596 JUMP JUMPDEST PUSH2 0x3596 DUP6 DUP4 PUSH2 0x441A JUMP JUMPDEST SWAP3 POP DUP3 ISZERO PUSH2 0x368B JUMPI PUSH2 0x35A6 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95EA7B3 PUSH2 0x35BC PUSH2 0x2043 JUMP JUMPDEST DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x35DA SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x35F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x361D SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST POP PUSH2 0x3626 PUSH2 0x2043 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD PUSH4 0xCA94B0E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0xCA94B0E9 SWAP2 PUSH2 0x3658 SWAP2 ADDRESS SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x5EC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3672 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x3695 DUP4 DUP7 PUSH2 0x5955 JUMP JUMPDEST SWAP4 POP DUP4 ISZERO PUSH2 0x37BF JUMPI DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x37B0 JUMPI PUSH2 0x36C7 PUSH2 0x43D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95EA7B3 PUSH2 0x36DD PUSH2 0x2043 JUMP JUMPDEST DUP8 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x36FB SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x371A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x373E SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST POP PUSH2 0x3747 PUSH2 0x2043 JUMP JUMPDEST DUP8 MLOAD PUSH1 0x40 MLOAD PUSH4 0x3A309049 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH4 0x74612092 SWAP2 PUSH2 0x3779 SWAP2 ADDRESS SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x5EC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x37A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x37BD JUMP JUMPDEST PUSH2 0x37BD DUP2 DUP7 PUSH2 0x325C PUSH2 0x43D2 JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP2 AND PUSH32 0x7DF4DBB3B3C999CA3E143D3FE67ABFA22078FD572D49D411278648C773912E31 DUP7 DUP7 DUP7 DUP14 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x76671808 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3859 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x387D SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP4 MLOAD PUSH2 0x38B4 SWAP1 DUP8 PUSH2 0x2D75 JUMP JUMPDEST ISZERO PUSH2 0x38C2 JUMPI PUSH2 0x38C2 DUP9 PUSH2 0x2746 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38FD DUP3 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0xEAC DUP2 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x3913 DUP2 PUSH1 0x1 PUSH2 0x47F9 JUMP JUMPDEST PUSH2 0x391B PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3A78B732 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3946 SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3960 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3974 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8F PUSH32 0x4BDEE85C4B4A268F4895D1096D553C3E57BB2433C380E7B7EC8CB56CC4F74673 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x39CF SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x4810 JUMP JUMPDEST PUSH2 0x39F2 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x3A19 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FFDF5EF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3A24 DUP8 DUP8 DUP6 PUSH2 0x483D JUMP JUMPDEST PUSH2 0x3A2F PUSH1 0x9E DUP8 PUSH2 0x488C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3ABC DUP9 DUP9 DUP9 DUP9 PUSH2 0x3A40 PUSH2 0x3FE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEEAC3E0E DUP13 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A6D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AB0 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x9D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x48E1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AD4 PUSH2 0x3AC9 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x9F SWAP1 DUP11 DUP9 DUP8 PUSH2 0x41E0 JUMP JUMPDEST DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x3AFB SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST PUSH1 0xA2 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP6 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3BD4419F8DEFEC88DD042E31B8E8743F00803AED288FE7C31C9CF0689D295CF2 DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x3B60 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3B7B PUSH2 0x4A2E JUMP JUMPDEST PUSH2 0xF13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1E3D PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3BA8 PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3BB5 PUSH1 0x0 PUSH1 0x0 NOT PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0x3BC3 PUSH1 0x0 PUSH3 0xF4240 PUSH2 0x4A48 JUMP JUMPDEST PUSH2 0xF13 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH2 0x4B1A JUMP JUMPDEST PUSH2 0x3BDD PUSH2 0x3B73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BE7 PUSH2 0x25A4 JUMP JUMPDEST DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x3BFA PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0xEAC DUP3 DUP3 PUSH2 0x4BA7 JUMP JUMPDEST PUSH2 0xEAC PUSH2 0x3B73 JUMP JUMPDEST PUSH2 0x3C17 DUP5 DUP5 DUP5 PUSH2 0x4BE8 JUMP JUMPDEST DUP2 DUP6 DUP6 DUP6 SWAP1 SWAP2 SWAP3 SWAP4 PUSH2 0xC4C JUMPI PUSH1 0x40 MLOAD PUSH4 0x871E13D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x100 DUP2 ADD DUP4 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP3 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 DUP5 ADD MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP2 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE SWAP1 SWAP2 PUSH2 0x3CC0 SWAP1 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x3CE0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x42DAADAF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT PUSH2 0x3CF7 JUMPI DUP2 PUSH2 0x1C8F JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x80 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP1 DUP4 SWAP1 PUSH2 0x3D5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x107349A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST POP PUSH1 0x60 ADD MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3D78 DUP6 PUSH2 0x4BFF JUMP JUMPDEST SWAP1 POP TIMESTAMP DUP2 PUSH1 0x40 ADD MLOAD GT ISZERO PUSH2 0x3DA0 JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x1 SWAP2 POP PUSH2 0x3E5B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3DB7 SWAP2 SWAP1 PUSH2 0x5F1A JUMP JUMPDEST DUP5 MLOAD SWAP2 SWAP4 POP SWAP2 POP PUSH2 0x3DCC SWAP1 PUSH1 0x68 SWAP1 DUP4 SWAP1 PUSH2 0x415B JUMP JUMPDEST DUP3 MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD DUP2 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH32 0x4C06B68820628A39C787D2DB1FAA0EEACD7B9474847B198B1E871FE6E5B93F44 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP3 MLOAD PUSH2 0x3E22 SWAP1 DUP4 PUSH2 0x5D2B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP6 POP PUSH1 0x0 DUP7 SWAP5 POP SWAP5 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP8 PUSH1 0x3 ADD SLOAD DUP4 GT ISZERO PUSH2 0x3EB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A411B9D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 ISZERO PUSH2 0x3EBE JUMPI DUP4 PUSH2 0x3EC4 JUMP JUMPDEST DUP9 PUSH1 0x3 ADD SLOAD JUMPDEST DUP10 SLOAD SWAP1 SWAP5 POP JUMPDEST DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3ED9 JUMPI POP PUSH1 0x0 DUP6 GT JUMPDEST ISZERO PUSH2 0x3F32 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3EEF DUP4 DUP10 DUP13 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x3F00 JUMPI POP POP PUSH2 0x3F32 JUMP JUMPDEST SWAP7 POP DUP7 PUSH2 0x3F0E DUP13 DUP13 DUP12 PUSH2 0x4C8D JUMP JUMPDEST SWAP3 POP DUP7 PUSH2 0x3F1A DUP2 PUSH2 0x5F40 JUMP JUMPDEST SWAP8 POP POP DUP4 DUP1 PUSH2 0x3F28 SWAP1 PUSH2 0x5F57 JUMP JUMPDEST SWAP5 POP POP POP POP PUSH2 0x3ECA JUMP JUMPDEST POP SWAP9 SWAP4 SWAP8 POP SWAP3 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SLOAD SWAP2 ADD MSTORE DUP3 SWAP1 ISZERO PUSH2 0x3F96 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2D3E5FB9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP4 DUP5 MSTORE SWAP4 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP6 SWAP1 SWAP4 MSTORE SWAP1 SWAP4 KECCAK256 SWAP1 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP1 MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4014 DUP5 DUP5 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x4080 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP5 SWAP2 PUSH2 0x40A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x6 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40BC DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x4128 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x414E JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP TIMESTAMP PUSH1 0x4 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x4168 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP1 DUP3 LT ISZERO PUSH2 0x41AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x5F8EC709 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x41D6 SWAP1 DUP5 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST DUP2 ISZERO PUSH2 0x3974 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x420A SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x872D0489 DUP7 ADDRESS DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x423E SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F70 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x425B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427F SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 DUP2 DUP2 GT ISZERO PUSH2 0x42AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x5F8EC709 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP7 SWAP3 SWAP1 PUSH2 0x42D7 SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x872D0489 DUP6 ADDRESS DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4318 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5F70 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4335 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4359 SWAP2 SWAP1 PUSH2 0x5CD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x4394 JUMPI PUSH2 0x438F DUP3 PUSH2 0x4D14 JUMP JUMPDEST PUSH2 0x1C8F JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x43AB JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x43CB JUMPI DUP4 PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP DUP1 PUSH2 0x1C8F JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4429 DUP4 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x443C JUMPI POP PUSH2 0x443C DUP3 PUSH3 0xF4240 LT ISZERO SWAP1 JUMP JUMPDEST DUP4 DUP4 SWAP1 SWAP2 PUSH2 0x4466 JUMPI PUSH1 0x40 MLOAD PUSH4 0x768BF0EB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0xD0B JUMP JUMPDEST POP PUSH3 0xF4240 SWAP1 POP PUSH2 0x4477 DUP4 DUP6 PUSH2 0x5E36 JUMP JUMPDEST PUSH2 0x1C8F SWAP2 SWAP1 PUSH2 0x5F99 JUMP JUMPDEST DUP2 PUSH1 0x0 SUB PUSH2 0x44A2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F4C63D9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x44CE PUSH2 0x44AD PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x68 SWAP2 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH4 0xFFFFFFFF PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP2 DIV DUP2 AND SWAP1 PUSH2 0x41E0 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x2 DUP1 DUP3 ADD SLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT ADDRESS PUSH1 0x60 SWAP1 DUP2 SHL DUP3 AND DUP4 DUP10 ADD MSTORE DUP12 SWAP1 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x48 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD DUP1 DUP3 SUB SWAP1 SWAP3 ADD DUP3 MSTORE PUSH1 0x68 DUP2 ADD DUP1 DUP7 MSTORE DUP3 MLOAD SWAP3 DUP8 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0xE8 DUP3 ADD DUP7 MSTORE DUP10 DUP4 MSTORE TIMESTAMP PUSH1 0x88 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0xA8 DUP4 ADD DUP11 DUP2 MSTORE PUSH1 0xC8 SWAP1 SWAP4 ADD DUP10 DUP2 MSTORE DUP3 DUP11 MSTORE PUSH1 0x69 SWAP1 SWAP9 MSTORE SWAP6 SWAP1 SWAP8 KECCAK256 SWAP2 MLOAD DUP3 SSTORE SWAP4 MLOAD PUSH1 0x1 DUP3 ADD SSTORE SWAP3 MLOAD SWAP1 DUP4 ADD SSTORE SWAP2 MLOAD PUSH1 0x3 SWAP2 DUP3 ADD SSTORE DUP2 ADD SLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0x459C JUMPI PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD DUP2 SWAP1 SSTORE JUMPDEST PUSH2 0x45A6 DUP3 DUP3 PUSH2 0x4D3D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0x5D9E2C5278E41138269F5F980CFBEA016D8C59816754502ABC4D2F87AAEA987F SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH2 0x4627 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x545C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4646 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x466A SWAP2 SWAP1 PUSH2 0x5608 JUMP JUMPDEST PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10BA3930B739B332B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46AE DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x471A SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x4740 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP TIMESTAMP PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4759 DUP4 DUP4 PUSH2 0x3C40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH2 0x47C5 SWAP1 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD DUP4 SWAP2 PUSH2 0x47EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x61B66E0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x545C JUMP JUMPDEST POP POP PUSH1 0x0 PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4804 DUP4 PUSH2 0x2067 JUMP JUMPDEST SWAP1 POP PUSH2 0x1141 DUP2 DUP4 PUSH2 0x2194 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xECB PUSH2 0x481D PUSH2 0x4DD0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4852 PUSH2 0x484C DUP6 DUP6 PUSH2 0x397B JUMP JUMPDEST DUP4 PUSH2 0x4DDA JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP1 DUP3 AND EQ PUSH2 0x4884 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8C5B935D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5625 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP1 SWAP4 AND DUP1 DUP4 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SLOAD SWAP2 ADD MSTORE DUP2 SWAP1 ISZERO PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0x81736271 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST PUSH2 0x48E9 PUSH2 0x50EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x100 DUP2 ADD DUP5 MSTORE DUP2 SLOAD SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x7 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x496A SWAP1 PUSH1 0x60 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO DUP6 SWAP1 PUSH2 0x498B JUMPI PUSH1 0x40 MLOAD PUSH4 0xBC4DEF5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 SWAP1 PUSH2 0x5380 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP6 DUP7 MSTORE DUP2 DUP4 ADD SWAP5 DUP6 MSTORE TIMESTAMP PUSH1 0x60 DUP4 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 PUSH1 0x80 DUP5 ADD DUP2 DUP2 MSTORE PUSH1 0xA0 DUP6 ADD DUP3 DUP2 MSTORE PUSH1 0xC0 DUP7 ADD SWAP8 DUP9 MSTORE PUSH1 0xE0 DUP7 ADD DUP4 DUP2 MSTORE SWAP11 DUP13 AND DUP4 MSTORE SWAP12 SWAP1 SWAP4 MSTORE SWAP4 SWAP1 SWAP4 KECCAK256 DUP3 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP10 AND SWAP9 SWAP1 SWAP9 OR DUP9 SSTORE SWAP5 MLOAD PUSH1 0x1 DUP9 ADD SSTORE SWAP3 MLOAD PUSH1 0x2 DUP8 ADD SSTORE MLOAD PUSH1 0x3 DUP7 ADD SSTORE SWAP2 MLOAD PUSH1 0x4 DUP6 ADD SSTORE SWAP4 MLOAD PUSH1 0x5 DUP5 ADD SSTORE MLOAD PUSH1 0x6 DUP4 ADD SSTORE MLOAD PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4A38 PUSH2 0x1E70 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF DUP1 DUP3 AND SWAP1 DUP4 AND GT ISZERO PUSH2 0x4A76 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST POP DUP3 SWAP1 POP DUP2 PUSH4 0xFFFFFFFF DUP2 AND PUSH3 0xF4240 LT ISZERO PUSH2 0x4AA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x52CA JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH4 0xFFFFFFFF DUP4 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH4 0xFFFFFFFF PUSH1 0xA0 SHL NOT SWAP2 DUP7 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 SWAP1 SWAP2 AND PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2FE5A7039987697813605CC0B9D6DB7AAB575408E3FC59E8A457BEF8D7BC0A36 SWAP1 PUSH2 0x1F5B SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x52CA JUMP JUMPDEST DUP2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 AND SWAP1 DUP4 AND GT ISZERO PUSH2 0x4B4B JUMPI PUSH1 0x40 MLOAD PUSH4 0xCCCCDAFB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP3 SWAP2 SWAP1 PUSH2 0x5366 JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x40 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND SWAP1 DUP6 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2867E04C500E438761486B78021D4F9EB97C77FF45D10C1183F5583BA4CBF7D1 SWAP1 PUSH2 0x1F5B SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x5366 JUMP JUMPDEST PUSH2 0x4BAF PUSH2 0x3B73 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4BB9 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x2 DUP2 ADD PUSH2 0x4BC9 DUP5 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x3 DUP2 ADD PUSH2 0x4BD8 DUP4 DUP3 PUSH2 0x5852 JUMP JUMPDEST POP PUSH1 0x0 DUP1 DUP3 SSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 LT ISZERO DUP1 ISZERO PUSH2 0x2407 JUMPI POP POP SWAP1 SWAP2 GT ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4C2D PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x69 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE DUP4 SWAP1 PUSH2 0x215B JUMPI PUSH1 0x40 MLOAD PUSH4 0x107349A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD0B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x3 ADD SLOAD GT PUSH2 0x4CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDDAF8F21 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4CC6 DUP6 PUSH1 0x0 ADD SLOAD DUP6 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x4CD9 DUP6 PUSH1 0x0 ADD SLOAD DUP5 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 DUP6 PUSH1 0x3 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x4CEE SWAP2 SWAP1 PUSH2 0x5955 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP DUP1 DUP6 SSTORE PUSH1 0x3 DUP6 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x4D0A JUMPI PUSH1 0x0 PUSH1 0x1 DUP7 ADD SSTORE JUMPDEST POP POP SWAP2 SLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x4D24 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA12F521 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP3 PUSH1 0x3 ADD SLOAD LT PUSH2 0x4D63 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A8C56B PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x4D81 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F4A893D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 DUP4 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP4 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4D9D SWAP1 DUP5 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x4DB2 JUMPI DUP1 DUP3 SSTORE JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x4DC7 SWAP2 SWAP1 PUSH2 0x5D2B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC6A PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x4DEA DUP7 DUP7 PUSH2 0x4E78 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x4DFA DUP3 DUP3 PUSH2 0x4EC5 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x4E2F PUSH2 0x4F7E JUMP JUMPDEST PUSH2 0x4E37 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 MLOAD PUSH1 0x41 SUB PUSH2 0x4EB2 JUMPI PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x4EA4 DUP9 DUP3 DUP6 DUP6 PUSH2 0x5026 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x4EBE JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x0 SWAP2 POP PUSH1 0x2 SWAP1 JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4ED9 JUMPI PUSH2 0x4ED9 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4EE2 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4EF6 JUMPI PUSH2 0x4EF6 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4F14 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF645EEDF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4F28 JUMPI PUSH2 0x4F28 PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0x4F49 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCE698F7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x3 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4F5D JUMPI PUSH2 0x4F5D PUSH2 0x59EB JUMP JUMPDEST SUB PUSH2 0xEAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x35E2F383 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4F89 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F95 PUSH2 0x2C93 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x4FAD JUMPI DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 SLOAD DUP1 ISZERO PUSH2 0x4FBC JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4FF0 PUSH2 0x2C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4FFC PUSH2 0x2D34 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x5014 JUMPI DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD DUP1 ISZERO PUSH2 0x4FBC JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH16 0xA2A8918CA85BAFE22016D0B997E4DF60 PUSH1 0x1 PUSH1 0xFF SHL SUB DUP5 GT ISZERO PUSH2 0x5057 JUMPI POP PUSH1 0x0 SWAP2 POP PUSH1 0x3 SWAP1 POP DUP3 PUSH2 0x50E1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP11 SWAP1 MSTORE PUSH1 0xFF DUP10 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x50AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x50D7 JUMPI POP PUSH1 0x0 SWAP3 POP PUSH1 0x1 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x50E1 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C8F DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x51A7 DUP2 PUSH2 0x516E JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x51CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C8F DUP2 PUSH2 0x516E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x51E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x51FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x522B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5236 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x525D DUP7 DUP3 DUP8 ADD PUSH2 0x51D5 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x528B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5296 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x52A6 DUP2 PUSH2 0x526A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x52FC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x52E4 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x531D DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x52E1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x534A PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x5305 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x535C DUP2 DUP6 PUSH2 0x5305 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x53A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x53B4 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x51A7 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0xFF PUSH1 0xF8 SHL DUP9 AND DUP2 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x53E3 PUSH1 0xE0 DUP4 ADD DUP10 PUSH2 0x5305 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x53F5 DUP2 DUP10 PUSH2 0x5305 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD DUP7 SWAP1 MSTORE DUP4 DUP2 SUB PUSH1 0xC0 DUP6 ADD MSTORE DUP5 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP4 POP SWAP1 SWAP2 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x544B JUMPI DUP4 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x542D JUMP JUMPDEST POP SWAP1 SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x549E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x54AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x54C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP5 ADD ADD GT ISZERO PUSH2 0x54DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP1 DUP5 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP6 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP PUSH1 0x20 DUP7 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5543 JUMPI PUSH1 0x3F NOT DUP8 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x552E DUP6 DUP4 MLOAD PUSH2 0x5305 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5512 JUMP JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5565 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5570 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x5584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x559F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55AB DUP8 DUP3 DUP9 ADD PUSH2 0x51D5 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x55CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x55D5 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x52A6 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x561A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x526A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5677 JUMPI PUSH2 0x5677 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 DUP4 ADD PUSH1 0x0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 GT ISZERO PUSH2 0x56F3 JUMPI PUSH2 0x56F3 PUSH2 0x563F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x5721 JUMPI PUSH2 0x5721 PUSH2 0x563F JUMP JUMPDEST PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE SWAP1 POP DUP1 DUP3 DUP5 ADD DUP8 LT ISZERO PUSH2 0x5739 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP4 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x576B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x578D DUP7 DUP3 DUP8 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x57A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x57B5 DUP7 DUP3 DUP8 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x57C6 DUP2 PUSH2 0x513C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x57E5 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x5805 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1141 JUMPI DUP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x5832 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3974 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x583E JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x586B JUMPI PUSH2 0x586B PUSH2 0x563F JUMP JUMPDEST PUSH2 0x587F DUP2 PUSH2 0x5879 DUP5 SLOAD PUSH2 0x57D1 JUMP JUMPDEST DUP5 PUSH2 0x580B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 DUP2 EQ PUSH2 0x58B3 JUMPI PUSH1 0x0 DUP4 ISZERO PUSH2 0x589B JUMPI POP DUP5 DUP3 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP6 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP5 SWAP1 SHL OR DUP5 SSTORE PUSH2 0x3974 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP6 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x58E3 JUMPI DUP8 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x58C3 JUMP JUMPDEST POP DUP5 DUP3 LT ISZERO PUSH2 0x5901 JUMPI DUP7 DUP5 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE DUP2 PUSH1 0x20 DUP3 ADD MSTORE DUP2 DUP4 PUSH1 0x40 DUP4 ADD CALLDATACOPY PUSH1 0x0 DUP2 DUP4 ADD PUSH1 0x40 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT AND ADD ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x5995 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x59AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x3E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP5 DUP3 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD PUSH1 0x0 DUP2 MSTORE DUP4 MLOAD PUSH2 0x59E1 DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0x52E1 JUMP JUMPDEST ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5A3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x40 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x5A50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A58 PUSH2 0x5655 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5A6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xA0 DUP2 DUP8 SUB SLT ISZERO PUSH2 0x5A80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A88 PUSH2 0x567D JUMP JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5A93 DUP2 PUSH2 0x513C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH2 0x5AA3 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH2 0x5AB6 DUP2 PUSH2 0x5A01 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5AF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5AFF DUP9 DUP3 DUP6 ADD PUSH2 0x56C2 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP DUP3 MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5B21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5B2D DUP7 DUP3 DUP6 ADD PUSH2 0x56C2 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5B59 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x5B85 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xECB DUP3 DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5BAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5BCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x5BE8 DUP2 PUSH2 0x513C JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x5C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5C0F DUP8 DUP3 DUP9 ADD PUSH2 0x56C2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5C26 DUP2 PUSH2 0x516E JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5C26 DUP2 PUSH2 0x5A01 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x5C4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x5C55 PUSH2 0x569F JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x5C79 PUSH1 0x60 DUP6 ADD PUSH2 0x5C1B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x5C8A PUSH1 0x80 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x5C9B PUSH1 0xA0 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x5CAC PUSH1 0xC0 DUP6 ADD PUSH2 0x5C1B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x5CBD PUSH1 0xE0 DUP6 ADD PUSH2 0x5C2B JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5CEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x516E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x5A01 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5D50 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x52E1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C8F DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH1 0x40 DUP1 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0x80 SHL SUB PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD SWAP1 POP PUSH1 0xA0 PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x5DE8 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x5305 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x5E05 DUP3 DUP3 PUSH2 0x5305 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5E20 DUP2 DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2407 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5305 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xECB JUMPI PUSH2 0xECB PUSH2 0x593F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MSTORE DUP4 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD PUSH2 0x2407 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5B67 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT DUP1 ISZERO PUSH2 0x5E85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x5E90 PUSH2 0x567D JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP4 DUP5 ADD MLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x5EFE PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x5305 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE POP PUSH1 0x40 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP1 SWAP2 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5F2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x52A6 DUP2 PUSH2 0x513C JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x5F4F JUMPI PUSH2 0x5F4F PUSH2 0x593F JUMP JUMPDEST POP PUSH1 0x0 NOT ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x5F69 JUMPI PUSH2 0x5F69 PUSH2 0x593F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5FB6 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 SDIV 0xE4 SWAP11 PUSH30 0x3D7F3015873A2C41E2F68419180F16CEF8FD91645F14BC8E8B733264736F PUSH13 0x634300081B0033000000000000 ", - "sourceMap": "1852:23230:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17047:151;;;;;;:::i;:::-;;:::i;:::-;;;;;;619:13:62;;-1:-1:-1;;;;;615:39:62;597:58;;711:4;699:17;;;693:24;671:20;;;664:54;774:4;762:17;;;756:24;734:20;;;727:54;837:4;825:17;;;819:24;797:20;;;790:54;900:4;888:17;;;882:24;860:20;;;853:54;642:3;951:17;;;945:24;923:20;;;916:54;1026:4;1014:17;;;1008:24;986:20;;;979:54;1089:4;1077:17;;;1071:24;1049:20;;;1042:54;;;;584:3;569:19;;402:700;17047:151:50;;;;;;;;510:30:51;;;;;;;;;1253:25:62;;;1241:2;1226:18;510:30:51;1107:177:62;648:75:11;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1520:25:62;;;1576:2;1561:18;;1554:34;;;;1604:18;;;1597:34;1662:2;1647:18;;1640:34;1507:3;1492:19;648:75:11;1289:391:62;3866:538:50;;;;;;:::i;:::-;;:::i;:::-;;16073:133;;;;;;:::i;:::-;;:::i;3052:106:8:-;10192:15:17;;-1:-1:-1;;;10192:15:17;;;;3052:106:8;;;2725:10:62;2713:23;;;2695:42;;2683:2;2668:18;3052:106:8;2551:192:62;5139:893:50;;;;;;:::i;:::-;;:::i;15339:149::-;;;;;;:::i;:::-;;:::i;295:37:18:-;;;;;;1052:86:58;;;;;;:::i;:::-;;;;;;;;;;;;;;19796:165:50;;;;;;:::i;:::-;;:::i;:::-;;;4555:14:62;;4548:22;4530:41;;4518:2;4503:18;19796:165:50;4390:187:62;1194:93:12;;;:::i;930:138:10:-;;;;;;:::i;:::-;;:::i;2653:116:8:-;;;:::i;:::-;;;;;;;;:::i;255:76:51:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;285:79:58:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;285:79:58;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6447:32:62;;;6429:51;;6511:2;6496:18;;6489:34;;;;6539:18;;;6532:34;;;;6597:2;6582:18;;6575:34;;;;6640:3;6625:19;;6618:35;6467:3;6669:19;;6662:35;6728:3;6713:19;;6706:35;6772:3;6757:19;;6750:35;6416:3;6401:19;285:79:58;6086:705:62;17867:412:50;;;;;;:::i;:::-;-1:-1:-1;;;;;18048:25:50;;;17962:7;18048:25;;;:11;:25;;;;;;;;;18017:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17867:412;;;;;-1:-1:-1;;;;;7073:32:62;;;7055:51;;7137:2;7122:18;;7115:34;;;;7165:18;;;7158:34;;;;7223:2;7208:18;;7201:34;7266:3;7251:19;;7244:35;7042:3;7027:19;17867:412:50;6796:489:62;2692:145:38;;;:::i;563:76:58:-;;;;;;:::i;:::-;;;;;;;;;;;;;;19061:146:50;;;;;;:::i;:::-;;:::i;19287:169::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;19418:31:50;;;;;:17;:31;;;;;19411:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;19287:169;;;;;7506:13:62;;-1:-1:-1;;;;;7502:39:62;7484:58;;7598:4;7586:17;;;7580:24;7558:20;;;7551:54;;;;7457:18;19287:169:50;7290:321:62;3155:101:34;;;:::i;2456:120:8:-;;;:::i;:::-;;;;;;;;:::i;855:73:58:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;855:73:58;;;;;;;;;;:::i;436:37:18:-;;;;;;15570:148:50;;;;;;:::i;:::-;;:::i;16505:134::-;;;;;;:::i;:::-;;:::i;15016:246::-;;;;;;:::i;:::-;;:::i;16714:259::-;;;;;;:::i;:::-;;:::i;9782:495::-;;;;;;:::i;:::-;;:::i;2850:126:8:-;;;:::i;:::-;;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;;8783:18;2850:126:8;8636:248:62;14422:510:50;;;;;;:::i;:::-;;:::i;15804:190::-;;;;;;:::i;:::-;;:::i;1032:92:12:-;;;:::i;5173:903:39:-;;;:::i;:::-;;;;;;;;;;;;;:::i;762:30:58:-;;;;;;856:32:18;;;;;-1:-1:-1;;;856:32:18;;;;;;576:34;;;;;-1:-1:-1;;;;;576:34:18;;;;;;-1:-1:-1;;;;;10807:31:62;;;10789:50;;10777:2;10762:18;576:34:18;10645:200:62;2441:144:34;;;:::i;997:32:18:-;;;;;-1:-1:-1;;;997:32:18;;;;;;673:68:12;;;;;;:::i;:::-;;;;;;;;;;;;;;;;413:91:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;413:91:58;;;;;;;;;;;;;;:::i;712:34:18:-;;;;;-1:-1:-1;;;712:34:18;;-1:-1:-1;;;;;712:34:18;;;13804:541:50;;;;;;:::i;:::-;;:::i;1502:484:37:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11451:1433:50:-;;;;;;:::i;:::-;;:::i;20037:146::-;;;;;;:::i;:::-;;:::i;1187:29:18:-;;;;;-1:-1:-1;;;1187:29:18;;;;;;13407:316:50;;;;;;:::i;:::-;;:::i;332:78:11:-;;;;;;:::i;:::-;;;;;;;;;;;;;;6619:346:50;;;;;;:::i;:::-;;:::i;19538:180::-;;;;;;:::i;:::-;;:::i;410:31:51:-;;;;;;8129:615:50;;;;;;:::i;:::-;;:::i;18604:176::-;;;;;;:::i;:::-;18702:7;18728:45;;;:23;:45;;;;;;;18604:176;16286:140;;;;;;:::i;:::-;;:::i;501:75:11:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3405:215:34;;;;;;:::i;:::-;;:::i;17047:151:50:-;17124:23;;:::i;:::-;-1:-1:-1;;;;;;17166:25:50;;;;;;;:11;:25;;;;;;;;;17159:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17047:151::o;3866:538::-;4158:30:35;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:35;-1:-1:-1;;;4302:15:35;;;4301:16;;-1:-1:-1;;;;;4348:14:35;4279:19;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:35;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:35;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:35;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:35;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:35;-1:-1:-1;;;5013:22:35;;;4979:67;4036:26:50::1;4051:10;4036:14;:26::i;:::-;4072:18;:16;:18::i;:::-;4100:20;:18;:20::i;:::-;4130:28;:26;:28::i;:::-;4168:50;;;;;;;;;;;;;;-1:-1:-1::0;;;4168:50:50::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;4168:50:50::1;;::::0;:24:::1;:50::i;:::-;4229:67;4254:22;-1:-1:-1::0;;4229:24:50::1;:67::i;:::-;4306:43;4326:22;4306:19;:43::i;:::-;4359:38;4380:16;4359:20;:38::i;:::-;5070:14:35::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:35;;;5142:14;;-1:-1:-1;10789:50:62;;5142:14:35;;10777:2:62;10762:18;5142:14:35;;;;;;;5066:101;4092:1081;;;;;3866:538:50;;;:::o;16073:133::-;2334:13:34;:11;:13::i;:::-;16163:36:50::1;16183:15;16163:19;:36::i;:::-;16073:133:::0;:::o;3130:21:8:-;3123:28;;3052:106;:::o;5139:893:50:-;5262:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;;;;;;;;;;;5290:7:50::1;4289:42:17;4334:30;4348:15;4334:13;:30::i;:::-;4289:75;;4374:32;4396:9;4374:21;:32::i;:::-;4416:43;4442:9;4453:5;4416:25;:43::i;:::-;2316:19:38::2;:17;:19::i;:::-;5324:17:50::3;::::0;;5396:77:::3;::::0;;::::3;5420:4:::0;5396:77:::3;:::i;:::-;5323:150;;;;;;5512:1;5498:3;5492:17;:21;5484:57;;;;-1:-1:-1::0;;;5484:57:50::3;;;;;;;;;;;;5583:1;5565:7;5559:21;:25;5551:65;;;;-1:-1:-1::0;;;5551:65:50::3;;;;;;;;;;;;-1:-1:-1::0;;;;;5634:17:50;::::3;;::::0;;;:8:::3;:17;::::0;;;;:30;:35;5626:87:::3;;;;-1:-1:-1::0;;;5626:87:50::3;;;;;;;;;;;;5776:70;::::0;;::::3;::::0;::::3;::::0;;5800:15:::3;5776:70:::0;;::::3;::::0;;::::3;::::0;;;;;;;;;-1:-1:-1;;;;;5756:17:50;::::3;-1:-1:-1::0;5756:17:50;;;:8:::3;:17:::0;;;;;;:90;;;;;;5776:70;;5756:17;:90:::3;::::0;::::3;::::0;::::3;::::0;;::::3;:::i;:::-;-1:-1:-1::0;5756:90:50::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;:::i;:::-;-1:-1:-1::0;;;;;;;;5860:32:50;::::3;::::0;5856:114:::3;;5908:51;5931:7;5940:18;5908:22;:51::i;:::-;6011:7;-1:-1:-1::0;;;;;5985:40:50::3;;6020:4;;5985:40;;;;;;;:::i;:::-;;;;;;;;5313:719;;;4279:198:17::1;4066:1;5139:893:50::0;;;;:::o;15339:149::-;2334:13:34;:11;:13::i;:::-;15440:41:50::1;15458:13;15473:7;15440:17;:41::i;:::-;15339:149:::0;;:::o;19796:165::-;19938:15;;19877:4;;19900:54;;:29;:11;19916:12;19900:15;:29::i;:::-;:37;;:54::i;:::-;19893:61;19796:165;-1:-1:-1;;19796:165:50:o;1194:93:12:-;883:10;868:26;;;;:14;:26;;;;;;;;860:84;;;;-1:-1:-1;;;860:84:12;;;;;;;;:::i;:::-;;2563:16:38::1;:14;:16::i;:::-;1270:10:12::2;:8;:10::i;:::-;1194:93::o:0;930:138:10:-;1016:45;1030:10;1042:18;1016:13;:45::i;2653:116:8:-;2707:6;2715;2740:22;:20;:22::i;:::-;2733:29;;;;2653:116;;:::o;255:76:51:-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2692:145:38:-;2739:4;2755:25;2783:21;:19;:21::i;:::-;2821:9;;;;2692:145;-1:-1:-1;;2692:145:38:o;19061:146:50:-;-1:-1:-1;;;;;19166:25:50;;;19143:4;19166:25;;;:11;:25;;;;;;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19143:4;19166:34;;:32;:34::i;3155:101:34:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;2456:120:8:-:0;2512:6;2520;2545:24;:22;:24::i;15570:148:50:-;15657:54;15680:10;15692:18;15657:22;:54::i;16505:134::-;2334:13:34;:11;:13::i;:::-;16596:36:50::1;16616:15;16596:19;:36::i;15016:246::-:0;2334:13:34;:11;:13::i;:::-;15186:69:50::1;15211:7;15220:12;15234:20;15186:24;:69::i;:::-;15016:246:::0;;;:::o;16714:259::-;2334:13:34;:11;:13::i;:::-;16805:31:50::1;16824:11;312:9:31::0;-1:-1:-1;1823:16:31;;1742:104;16805:31:50::1;16872:11;16797:88;;;;;-1:-1:-1::0;;;16797:88:50::1;;;;;;1253:25:62::0;;1241:2;1226:18;;1107:177;16797:88:50::1;-1:-1:-1::0;16895:15:50::1;:29:::0;;;16939:27:::1;::::0;1253:25:62;;;16939:27:50::1;::::0;1241:2:62;1226:18;16939:27:50::1;;;;;;;;16714:259:::0;:::o;9782:495::-;9908:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;2497:17:50;::::1;;::::0;;;:8:::1;:17;::::0;;;;:30;9939:7;;;;2489:90:::1;;;;-1:-1:-1::0;;;2489:90:50::1;;;;;;;;:::i;:::-;;2316:19:38::2;:17;:19::i;:::-;9972:20:50::3;9995:27;::::0;;::::3;10006:4:::0;9995:27:::3;:::i;:::-;9972:50:::0;-1:-1:-1;;;;;;10053:48:50;::::3;:29;:11;9972:50:::0;10053:15:::3;:29::i;:::-;:37:::0;10154:7;;10163:12;;-1:-1:-1;;;;;10053:48:50::3;;10032:154;;;;-1:-1:-1::0;;;10032:154:50::3;;;;;;;;;:::i;:::-;;;10196:30;10213:12;10196:16;:30::i;:::-;10256:7;-1:-1:-1::0;;;;;10241:29:50::3;;10265:4;;10241:29;;;;;;;:::i;:::-;;;;;;;;9962:315;4066:1:17::1;9782:495:50::0;;;;:::o;2850:126:8:-;2908:7;2917;2943:26;10501:11:17;10545:22;10569;;10545;;10434:165;14422:510:50;14585:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;;;14621:7:50::1;4289:42:17;4334:30;4348:15;4334:13;:30::i;:::-;4289:75;;4374:32;4396:9;4374:21;:32::i;:::-;4416:43;4442:9;4453:5;4416:25;:43::i;:::-;-1:-1:-1::0;;;;;2497:17:50;::::2;;::::0;;;:8:::2;:17;::::0;;;;:30;14660:7;;;;2489:90:::2;;;;-1:-1:-1::0;;;2489:90:50::2;;;;;;;;:::i;:::-;;2316:19:38::3;:17;:19::i;:::-;-1:-1:-1::0;;;;;14726:48:50;::::4;:29;:11;14742:12:::0;14726:15:::4;:29::i;:::-;:37:::0;14827:7;;14836:12;;-1:-1:-1;;;;;14726:48:50::4;;14705:154;;;;-1:-1:-1::0;;;14705:154:50::4;;;;;;;;;:::i;:::-;;;14869:56;14887:12;14901:6;14909:15;;;;;;;;;;;14869:17;:56::i;15804:190::-:0;2334:13:34;:11;:13::i;:::-;15909:78:50::1;15934:22;-1:-1:-1::0;;15909:24:50::1;:78::i;1032:92:12:-:0;883:10;868:26;;;;:14;:26;;;;;;;;860:84;;;;-1:-1:-1;;;860:84:12;;;;;;;;:::i;:::-;;2316:19:38::1;:17;:19::i;:::-;1109:8:12::2;:6;:8::i;5173:903:39:-:0;5271:13;5298:18;5330:21;5365:15;5394:25;5433:12;5459:27;5511:23;5537:19;:17;:19::i;:::-;5777:13;;5511:45;;-1:-1:-1;5777:18:39;:43;;;;-1:-1:-1;5799:16:39;;;;:21;5777:43;5769:77;;;;-1:-1:-1;;;5769:77:39;;21246:2:62;5769:77:39;;;21228:21:62;21285:2;21265:18;;;21258:30;-1:-1:-1;;;21304:18:62;;;21297:51;21365:18;;5769:77:39;21044:345:62;5769:77:39;5908:13;:11;:13::i;:::-;5935:16;:14;:16::i;:::-;6043;;;6027:1;6043:16;;;;;;;;;-1:-1:-1;;;5857:212:39;;;-1:-1:-1;5857:212:39;;-1:-1:-1;5965:13:39;;-1:-1:-1;6000:4:39;;-1:-1:-1;6027:1:39;-1:-1:-1;6043:16:39;-1:-1:-1;5857:212:39;-1:-1:-1;;5173:903:39:o;2441:144:34:-;2487:7;2506:24;2533:20;:18;:20::i;:::-;2570:8;-1:-1:-1;;;;;2570:8:34;;2441:144;-1:-1:-1;;2441:144:34:o;13804:541:50:-;13884:34;13921:29;:11;13937:12;13921:15;:29::i;:::-;13884:66;;13960:12;13975:35;13994:15;;13975:10;:18;;:35;;;;:::i;:::-;14061:18;;14081:15;;13960:50;;-1:-1:-1;14020:21:50;;14044:53;;14061:18;-1:-1:-1;;;14081:15:50;;;;14044:16;:53::i;:::-;14020:77;;14115:7;:27;;;;14126:16;14115:27;14186:12;14107:93;;;;;-1:-1:-1;;;14107:93:50;;;;;;;;:::i;:::-;;14219:25;:10;:23;:25::i;:::-;14218:26;14284:12;14210:88;;;;;-1:-1:-1;;;14210:88:50;;;;;;;;:::i;:::-;;14308:30;14325:12;14308:16;:30::i;:::-;13874:471;;;13804:541;:::o;1502:484:37:-;1668:12;;;1604:20;1668:12;;;;;;;;1570:22;;1779:4;-1:-1:-1;;;;;1767:24:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:34;;1806:9;1801:155;1821:15;;;1801:155;;;1870:75;1907:4;1927;;1932:1;1927:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1936;1914:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1870:28;:75::i;:::-;1857:7;1865:1;1857:10;;;;;;;;:::i;:::-;;;;;;;;;;:88;1838:3;;1801:155;;;;1965:14;1502:484;;;;:::o;11451:1433:50:-;11769:7;11646;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;;;11682:7:50::1;4289:42:17;4334:30;4348:15;4334:13;:30::i;:::-;4289:75;;4374:32;4396:9;4374:21;:32::i;:::-;4416:43;4442:9;4453:5;4416:25;:43::i;:::-;-1:-1:-1::0;;;;;2497:17:50;::::2;;::::0;;;:8:::2;:17;::::0;;;;:30;11721:7;;;;2489:90:::2;;;;-1:-1:-1::0;;;2489:90:50::2;;;;;;;;:::i;:::-;;2316:19:38::3;:17;:19::i;:::-;11792:24:50::4;::::0;11835:11:::4;:51;;;;;;;;:::i;:::-;::::0;11831:935:::4;;11902:40;11945:43;::::0;;::::4;11956:4:::0;11945:43:::4;:::i;:::-;12027:13:::0;;:29:::4;;::::0;11902:86;;-1:-1:-1;12060:7:50;-1:-1:-1;;;;;12027:40:50;;::::4;::::0;;::::4;;12002:167;;;;-1:-1:-1::0;;;12002:167:50::4;;;;;;;;;:::i;:::-;;;12202:28;12220:9;12202:17;:28::i;:::-;12183:47;;11888:353;11831:935;;;12266:43;12251:11;:58;;;;;;;;:::i;:::-;::::0;12247:519:::4;;12326:20;::::0;12363:36:::4;::::0;;::::4;12374:4:::0;12363:36:::4;:::i;:::-;12325:74:::0;;-1:-1:-1;12325:74:50;-1:-1:-1;;;;;;12438:48:50;::::4;:29;:11;12325:74:::0;12438:15:::4;:29::i;:::-;:37:::0;12543:7;;12552:12;;-1:-1:-1;;;;;12438:48:50::4;;12413:166;;;;-1:-1:-1::0;;;12413:166:50::4;;;;;;;;;:::i;:::-;;;12612:59;12636:12;12650:3;12655:15;;;;;;;;;;;12612:23;:59::i;:::-;12593:78;;12311:371;;12247:519;;;12743:11;12709:46;;-1:-1:-1::0;;;12709:46:50::4;;;;;;;;:::i;12247:519::-;12814:11;12781:63;;;;;;;;:::i;:::-;12805:7;-1:-1:-1::0;;;;;12781:63:50::4;;12827:16;12781:63;;;;1253:25:62::0;;1241:2;1226:18;;1107:177;12781:63:50::4;;;;;;;;12861:16:::0;11451:1433;-1:-1:-1;;;;;;;;;11451:1433:50:o;20037:146::-;20111:4;20134:42;20151:7;20160:15;;;;;;;;;;;20134:16;:42::i;13407:316::-;2112:10:61;2134:15;-1:-1:-1;;;;;2112:38:61;;;;2091:147;;;;-1:-1:-1;;;2091:147:61;;;;;;;;;:::i;:::-;-1:-1:-1;13508:14:50::1;::::0;-1:-1:-1;13508:14:50;13542:36:::1;::::0;;::::1;13553:4:::0;13542:36:::1;:::i;:::-;13507:71;;;;13588:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;13588:21:50::1;;13610:7;13619:6;13627;13643:17;:15;:17::i;:::-;13588:74;::::0;::::1;::::0;;;-1:-1:-1;;;;;;13588:74:50;;;-1:-1:-1;;;;;26454:32:62;;;13588:74:50::1;::::0;::::1;26436:51:62::0;26503:18;;;26496:34;;;;26546:18;;;26539:34;;;;26609:32;;;26589:18;;;26582:60;26408:19;;13588:74:50::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13700:7;-1:-1:-1::0;;;;;13677:39:50::1;;13709:6;13677:39;;;;1253:25:62::0;;1241:2;1226:18;;1107:177;13677:39:50::1;;;;;;;;13497:226;;13407:316:::0;;;:::o;6619:346::-;6761:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;2497:17:50;::::1;;::::0;;;:8:::1;:17;::::0;;;;:30;6792:7;;;;2489:90:::1;;;;-1:-1:-1::0;;;2489:90:50::1;;;;;;;;:::i;:::-;;2316:19:38::2;:17;:19::i;:::-;6825:30:50::3;6847:7;6825:21;:30::i;:::-;6865:35;6892:7;6865:26;:35::i;:::-;6915:43;::::0;-1:-1:-1;;;;;6915:43:50;::::3;::::0;::::3;::::0;;;::::3;4066:1:17::1;6619:346:50::0;;;;:::o;19538:180::-;19640:7;19666:45;19689:7;19698:12;19666:22;:45::i;:::-;19659:52;19538:180;-1:-1:-1;;;19538:180:50:o;8129:615::-;8280:7;3902:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;3902:28:17;;3931:15;3956:4;3963:10;3902:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4018:15;4035:10;3881:175;;;;;;-1:-1:-1;;;3881:175:17;;;;;;;;;:::i;:::-;;;8316:7:50::1;4289:42:17;4334:30;4348:15;4334:13;:30::i;:::-;4289:75;;4374:32;4396:9;4374:21;:32::i;:::-;4416:43;4442:9;4453:5;4416:25;:43::i;:::-;-1:-1:-1::0;;;;;2497:17:50;::::2;;::::0;;;:8:::2;:17;::::0;;;;:30;8355:7;;;;2489:90:::2;;;;-1:-1:-1::0;;;2489:90:50::2;;;;;;;;:::i;:::-;;2316:19:38::3;:17;:19::i;:::-;8401:28:50::4;::::0;;;8501:86:::4;::::0;;::::4;8525:4:::0;8501:86:::4;:::i;:::-;8400:187;;;;;;;;8597:96;8607:7;8616:12;8630:20;8652:6;8660:15;8677;;;;;;;;;;;8597:9;:96::i;:::-;;8723:7;-1:-1:-1::0;;;;;8708:29:50::4;;8732:4;;8708:29;;;;;;;:::i;:::-;;;;;;;;8390:354;;;;4469:1:17::2;4279:198:::1;4066:1;8129:615:50::0;;;;:::o;16286:140::-;2334:13:34;:11;:13::i;:::-;16380:39:50::1;16401:17;16380:20;:39::i;3405:215:34:-:0;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:34;::::1;3485:91;;3562:1;3534:31;;-1:-1:-1::0;;;3534:31:34::1;;;;;;;;:::i;3485:91::-;3585:28;3604:8;3585:18;:28::i;8737:170:35:-:0;8870:21;;8737:170::o;1847:127:34:-;6931:20:35;:18;:20::i;:::-;1929:38:34::1;1954:12;1929:24;:38::i;1202:61:37:-:0;6931:20:35;:18;:20::i;2045:148:8:-;6931:20:35;:18;:20::i;:::-;2111:35:8::1;:33;:35::i;:::-;2156:30;:28;:30::i;1423:156:12:-:0;6931:20:35;:18;:20::i;:::-;1497:27:12::1;:25;:27::i;6521:213:57:-:0;6931:20:35;:18;:20::i;:::-;6636:30:57::1;6650:5;6657:8;6636:13;:30::i;:::-;6676:51;6711:5;6718:8;6676:34;:51::i;6312:279:17:-:0;6401:4;6409;6401:12;;;;6393:63;;;;-1:-1:-1;;;6393:63:17;;;;;8810:25:62;;;;8851:18;;;8844:34;8783:18;;6393:63:17;8636:248:62;6393:63:17;-1:-1:-1;;6466:22:17;:29;;;6505:22;:29;;;6549:35;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;6549:35:17;;8783:18:62;6549:35:17;;;;;;;;6312:279;;:::o;5957:135::-;6020:15;:24;;-1:-1:-1;;;;6020:24:17;-1:-1:-1;;;6020:24:17;;;;;;;;;;;;;6059:26;;2695:42:62;;;6059:26:17;;2683:2:62;2668:18;6059:26:17;2551:192:62;24822:258:50;24905:17;24926:1;24905:22;24897:77;;;;-1:-1:-1;;;24897:77:50;;;;;;;;;;;;24984:16;:36;;;25035:38;;1253:25:62;;;25035:38:50;;1241:2:62;1226:18;25035:38:50;1107:177:62;2658:162:34;966:10:36;2717:7:34;:5;:7::i;:::-;-1:-1:-1;;;;;2717:23:34;;2713:101;;966:10:36;2763:40:34;;-1:-1:-1;;;2763:40:34;;;;;;;;:::i;5889:102:33:-;5971:13;;5889:102::o;11557:351:17:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11718:15:17;:13;:15::i;:::-;-1:-1:-1;;;;;11718:28:17;;11747:16;11773:4;11718:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11673:106;;11797:9;:19;;;-1:-1:-1;;;;;11797:24:17;11820:1;11797:24;;11857:16;11789:86;;;;;-1:-1:-1;;;11789:86:17;;;;;;;;:::i;:::-;-1:-1:-1;11892:9:17;11557:351;-1:-1:-1;;11557:351:17:o;8224:210::-;8332:95;8351:10;:17;;;8370:22;;8394;;8332:95;;;;;;;;;;;;;-1:-1:-1;;;8332:95:17;;;:18;:95::i;9236:755::-;9391:23;9416;9443:24;:22;:24::i;:::-;9390:77;;;;9477:27;9507:13;:74;;9557:10;:24;;;9507:74;;;9523:10;:31;;;9507:74;9477:104;;9591:93;9610:20;-1:-1:-1;;;;;9591:93:17;9632:16;-1:-1:-1;;;;;9591:93:17;9650:16;-1:-1:-1;;;;;9591:93:17;;;;;;;;;;;;;;-1:-1:-1;;;9591:93:17;;;:18;:93::i;:::-;9696:21;9719;9744:22;:20;:22::i;:::-;9695:71;;;;9776:28;9807:13;:76;;9858:10;:25;;;9807:76;;;9823:10;:32;;;9807:76;9776:107;;9893:91;9912:21;9893:91;;9935:14;9893:91;;9951:14;9893:91;;;;;;;;;;;;;;;-1:-1:-1;;;9893:91:17;;;:18;:91::i;2905:128:38:-;2970:8;:6;:8::i;:::-;2966:61;;;3001:15;;-1:-1:-1;;;3001:15:38;;;;;;;;;;;18843:222:57;-1:-1:-1;;;;;18941:28:57;;;;;;;:18;:28;;;;;;:50;;-1:-1:-1;;;;;;18941:50:57;;;;;;;;;19006:52;;;18941:28;19006:52;18843:222;;:::o;2101:204:12:-;2316:19:38;:17;:19::i;:::-;-1:-1:-1;;;;;2200:30:12;::::1;;::::0;;;:14:::1;:30;::::0;;;;;;;;:41;;-1:-1:-1;;2200:41:12::1;::::0;::::1;;::::0;;::::1;::::0;;;2256:42;;4530:41:62;;;2256:42:12::1;::::0;4503:18:62;2256:42:12::1;;;;;;;2101:204:::0;;:::o;5580:160:54:-;5678:12;;:::i;:::-;5709:24;5714:4;5720:12;5709:4;:24::i;:::-;5702:31;;;;;;;;;;-1:-1:-1;;;;;5702:31:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5580:160;-1:-1:-1;;;5580:160:54:o;5924:267::-;6007:4;6023:24;6068:49;6077:4;:14;;;6093:4;:23;;;6068:8;:49::i;:::-;6050:67;;:15;:67;:::i;:::-;6023:94;;6134:13;:4;:11;:13::i;:::-;:50;;;;;6170:14;6151:16;:33;6134:50;6127:57;5924:267;-1:-1:-1;;;;5924:267:54:o;3105:126:38:-;3168:8;:6;:8::i;:::-;3163:62;;3199:15;;-1:-1:-1;;;3199:15:38;;;;;;;;;;;3674:178;2563:16;:14;:16::i;:::-;3732:25:::1;3760:21;:19;:21::i;:::-;3791:17:::0;;-1:-1:-1;;3791:17:38::1;::::0;;;-1:-1:-1;3823:22:38::1;966:10:36::0;3832:12:38::1;3823:22;;;;;;:::i;2551:526:10:-:0;-1:-1:-1;;;;;2685:29:10;;2648:34;2685:29;;;:11;:29;;;;;;;;2898:31;;;;;28953:36:62;;;29005:18;;;28998:60;;;;2898:31:10;;;;;;;;;28926:18:62;;;;2898:31:10;;2648:34;;2770:202;;2685:29;;2803:18;;2835;;2867:17;;2943:19;2770;:202::i;:::-;2724:248;;;;3008:16;-1:-1:-1;;;;;2988:82:10;;3026:14;3053:4;3042:27;;;;;;;;;;;;:::i;:::-;2988:82;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;;8783:18;2988:82:10;8636:248:62;20988:174:50;21052:10;21064;21094:17;:15;:17::i;:::-;-1:-1:-1;;;;;21094:32:50;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21086:69;312:9:31;;-1:-1:-1;20988:174:50;-1:-1:-1;20988:174:50:o;1147:162:38:-;1270:23;;1147:162::o;6503:123:54:-;6561:4;6584:13;:4;6374:14;;;:19;;;6293:107;6584:13;:35;;;;-1:-1:-1;;6601:13:54;;;:18;;6503:123::o;3774:248:34:-;3847:24;3874:20;:18;:20::i;:::-;3923:8;;-1:-1:-1;;;;;3941:19:34;;;-1:-1:-1;;;;;;3941:19:34;;;;;;3975:40;;3847:47;;-1:-1:-1;3923:8:34;;;;;3975:40;;3904:16;;3975:40;3837:185;;3774:248;:::o;20571:180:50:-;20637:10;20649;20679:17;:15;:17::i;:::-;-1:-1:-1;;;;;20679:34:50;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20671:73;-1:-1:-1;;;;;1406:16:17;-1:-1:-1;20571:180:50;-1:-1:-1;20571:180:50:o;19322:166:57:-;19396:15;:34;;;19445:36;;1253:25:62;;;19445:36:57;;1241:2:62;1226:18;19445:36:57;1107:177:62;7497:292:57;7622:73;:17;7648:8;7658:13;7673:21;7622:25;:73::i;:::-;7760:21;7745:13;-1:-1:-1;;;;;7710:72:57;7735:8;-1:-1:-1;;;;;7710:72:57;;;;;;;;;;;7497:292;;;:::o;17711:889::-;17779:34;17816:30;:11;17832:13;17816:15;:30::i;:::-;17779:67;;17949:160;17990:13;18017:22;:20;:22::i;:::-;-1:-1:-1;;;;;18017:49:57;;18067:10;:31;;;18017:82;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;18017:82:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17949:11;;:160;:27;:160::i;:::-;18120:32;:11;18138:13;18120:17;:32::i;:::-;18197:18;;18217:17;;;;18162:73;;:26;;:34;:73::i;:::-;18457:10;:17;;;18386:23;:56;18410:10;:31;;;18386:56;;;;;;;;;;;;:88;;;;:::i;:::-;18315:23;:56;18339:10;:31;;;18315:56;;;;;;;;;;;:159;;;;18542:10;:31;;;18527:13;-1:-1:-1;;;;;18490:103:57;18507:10;:18;;;-1:-1:-1;;;;;18490:103:57;;18575:10;:17;;;18490:103;;;;1253:25:62;;1241:2;1226:18;;1107:177;18490:103:57;;;;;;;;17769:831;17711:889;:::o;15057:2069::-;15197:23;;:::i;:::-;15232:34;15269:30;:11;15285:13;15269:15;:30::i;:::-;15232:67;;15317:19;:10;:17;:19::i;:::-;15372:13;15309:78;;;;;-1:-1:-1;;;15309:78:57;;;;;;;;:::i;:::-;;15416:10;:17;;;15405:7;:28;;15471:13;15486:7;15397:98;;;;;;-1:-1:-1;;;15397:98:57;;;;;;;;;:::i;:::-;-1:-1:-1;;15562:17:57;;;;15593:19;;;15589:263;;;15628:107;15660:15;:13;:15::i;:::-;15677:18;;15697:19;15707:9;15697:7;:19;:::i;:::-;15628:26;;:107;;15718:16;15628:31;:107::i;:::-;15589:263;;;15801:18;;15766:75;;15821:19;15833:7;15821:9;:19;:::i;:::-;15766:26;;:75;:34;:75::i;:::-;15957:35;15995:22;:20;:22::i;:::-;-1:-1:-1;;;;;15995:49:57;;16058:10;:31;;;15995:104;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;15995:104:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15957:142;;16109:42;16155:25;:10;:23;:25::i;:::-;16154:26;:125;;16278:1;16154:125;;;16225:38;;;;16195:68;;:27;:68;:::i;:::-;-1:-1:-1;;;;;16323:26:57;;;;;;:11;:26;;;;;:33;;;:43;;;16376:54;;:84;;;16109:170;-1:-1:-1;16518:22:57;:20;:22::i;:::-;:115;;-1:-1:-1;;;16518:115:57;;;;;8810:25:62;;;8851:18;;;8844:34;;;-1:-1:-1;;;;;16518:34:57;;;;;;;8783:18:62;;16518:115:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16470:26:57;;;;;;:11;:26;;;;;:44;;:163;;:44;;:26;:163;;;;;:::i;:::-;;;;-1:-1:-1;;16717:19:57;;;16713:243;;;16813:19;16823:9;16813:7;:19;:::i;:::-;16752:23;:56;16776:10;:31;;;16752:56;;;;;;;;;;;;:81;;;;;;;:::i;:::-;;;;-1:-1:-1;16713:243:57;;-1:-1:-1;16713:243:57;;16925:19;16937:7;16925:9;:19;:::i;:::-;16864:23;:56;16888:10;:31;;;16864:56;;;;;;;;;;;;:81;;;;;;;:::i;:::-;;;;-1:-1:-1;;16713:243:57;17024:10;:31;;;17009:13;-1:-1:-1;;;;;16971:105:57;16989:10;:18;;;-1:-1:-1;;;;;16971:105:57;;17057:7;17066:9;16971:105;;;;;;8810:25:62;;;8866:2;8851:18;;8844:34;8798:2;8783:18;;8636:248;16971:105:57;;;;;;;;-1:-1:-1;;;;;;;;;17093:26:57;;;;;;;:11;:26;;;;;;;;;17086:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17086:33:57;;15057:2069;-1:-1:-1;;15057:2069:57:o;3366:176:38:-;2316:19;:17;:19::i;:::-;3425:25:::1;3453:21;:19;:21::i;:::-;3484:16:::0;;-1:-1:-1;;3484:16:38::1;3496:4;3484:16;::::0;;3425:49;-1:-1:-1;3515:20:38::1;3522:12;966:10:36::0;;887:96;2720:156:39;2839:21;;2720:156::o;6300:155::-;6354:13;6379:23;6405:19;:17;:19::i;:::-;6379:45;;6441:1;:7;;6434:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6300:155;:::o;6682:161::-;6739:13;6764:23;6790:19;:17;:19::i;:::-;6764:45;;6826:1;:10;;6819:17;;;;;:::i;1192:159:34:-;1313:22;;1192:159::o;20766:200:57:-;20858:4;20882:77;20915:15;:13;:15::i;:::-;20882:26;;20932:8;20942:16;20882:32;:77::i;:::-;20881:78;;20766:200;-1:-1:-1;;;20766:200:57:o;6735:127:54:-;6799:4;6822:13;:4;6374:14;;;:19;;;6293:107;6822:13;:33;;;;-1:-1:-1;;6839:11:54;;;:16;;6735:127::o;4106:253:42:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:42;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:42:o;22503:2313:50:-;22641:14;;:30;;;;;22715:23;;;;;22704:46;;22590:21;;22641:30;22590:21;;22704:46;;;;;;;;;:::i;:::-;22681:69;-1:-1:-1;22760:34:50;22797:29;:11;22681:69;22797:15;:29::i;:::-;22930:18;;22760:66;;-1:-1:-1;22952:7:50;;-1:-1:-1;;;;;22930:29:50;;;;;;;22922:94;;;;-1:-1:-1;;;22922:94:50;;;;;;;;;:::i;:::-;-1:-1:-1;;23057:31:50;;;;23139:25;23153:7;23026:28;23139:13;:25::i;:::-;23270:21;23294:13;:11;:13::i;:::-;-1:-1:-1;;;;;23294:23:50;;23326:4;23294:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23270:62;;23343:19;23365:11;:9;:11::i;:::-;-1:-1:-1;;;;;23365:21:50;;23387:20;23365:43;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;23365:43:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;23429:1;23365:65;;;23411:15;;23365:65;23343:87;-1:-1:-1;23440:23:50;3551:13:61;-1:-1:-1;;;;;23466:23:50;;23503:36;23564:10;23576:11;23553:35;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23466:132;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23440:158;-1:-1:-1;23608:22:50;23633:35;23440:158;23656:11;23633:22;:35::i;:::-;23608:60;;23679:20;23702:13;:11;:13::i;:::-;-1:-1:-1;;;;;23702:23:50;;23734:4;23702:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23679:61;-1:-1:-1;23679:61:50;23771:30;23787:14;23771:13;:30;:::i;:::-;:46;23869:13;23884:12;23898:14;23750:173;;;;;;;-1:-1:-1;;;23750:173:50;;;;;32382:25:62;;;;32423:18;;;32416:34;;;;32466:18;;;32459:34;32355:18;;23750:173:50;32180:319:62;23750:173:50;-1:-1:-1;;23938:19:50;;;-1:-1:-1;23934:768:50;;24029:20;24070:16;;24052:15;:34;;;;:::i;:::-;24029:57;;24100:23;24144:17;:15;:17::i;:::-;-1:-1:-1;;;;;24144:34:50;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24126:54;;-1:-1:-1;;;;;24126:54:50;:15;:54;:::i;:::-;24100:80;;24194:50;24205:7;24214:12;24228:15;24194:10;:50::i;:::-;24263:18;;24259:433;;24392:22;:20;:22::i;:::-;-1:-1:-1;;;;;24392:45:50;;24438:20;24392:67;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;24392:67:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24540:62;24573:11;:9;:11::i;:::-;24587:14;24540:13;:11;:13::i;:::-;-1:-1:-1;;;;;24540:24:50;;:62;:24;:62::i;:::-;24620:11;:9;:11::i;:::-;:57;;-1:-1:-1;;;24620:57:50;;;;;8810:25:62;;;8851:18;;;8844:34;;;-1:-1:-1;;;;;24620:19:50;;;;;;;8783:18:62;;24620:57:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24259:433;23959:743;;23934:768;24717:60;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;-1:-1:-1;;;;;24717:60:50;;;;;8783:18:62;24717:60:50;;;;;;;-1:-1:-1;24794:15:50;;22503:2313;-1:-1:-1;;;;;;;;;22503:2313:50:o;10951:3331:57:-;11094:7;;11150:30;:11;11166:13;11150:15;:30::i;:::-;11113:67;;11198:19;:10;:17;:19::i;:::-;11253:13;11190:78;;;;;-1:-1:-1;;;11190:78:57;;;;;;;;:::i;:::-;;11338:21;11364:35;11383:15;;11364:10;:18;;:35;;;;:::i;:::-;11363:36;:78;;;;;11416:25;:10;:23;:25::i;:::-;11415:26;11363:78;:112;;;;-1:-1:-1;11457:18:57;;;11363:112;11362:194;;11555:1;11362:194;;;11491:22;:20;:22::i;:::-;-1:-1:-1;;;;;11491:34:57;;11526:13;11491:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11338:218;;11676:160;11717:13;11744:22;:20;:22::i;:::-;-1:-1:-1;;;;;11744:49:57;;11794:10;:31;;;11744:82;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;11676:160:57;11846:37;:11;11869:13;11846:22;:37::i;:::-;11956:46;:11;11988:13;11956:31;:46::i;:::-;12013:28;;12104:18;;12100:1612;;12186:20;12209:15;:13;:15::i;:::-;12262:18;;12209:177;;-1:-1:-1;;;12209:177:57;;-1:-1:-1;;;;;12209:35:57;;;;;;;:177;;12306:4;;12329:43;;12209:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12186:200;;12400:57;12460:15;:13;:15::i;:::-;12511:18;;12460:114;;-1:-1:-1;;;12460:114:57;;-1:-1:-1;;;;;12460:33:57;;;;;;;:114;;12555:4;;12460:114;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12400:174;;12741:1;12717:14;:21;;;:25;:66;;12782:1;12717:66;;;12745:34;:13;12766:12;12745:20;:34::i;:::-;12691:92;-1:-1:-1;12801:27:57;;12797:251;;12848:13;:11;:13::i;:::-;-1:-1:-1;;;;;12848:21:57;;12878:15;:13;:15::i;:::-;12896:23;12848:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12938:15;:13;:15::i;:::-;12974:18;;12938:95;;-1:-1:-1;;;12938:95:57;;-1:-1:-1;;;;;12938:35:57;;;;;;;:95;;13002:4;;13009:23;;12938:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12797:251;13130:39;13146:23;13130:13;:39;:::i;:::-;13107:62;-1:-1:-1;13187:24:57;;13183:519;;13279:18;;-1:-1:-1;;;;;13260:38:57;;;13231:26;13260:38;;;:18;:38;;;;;;;;13316:372;;13376:13;:11;:13::i;:::-;-1:-1:-1;;;;;13376:21:57;;13406:15;:13;:15::i;:::-;13424:20;13376:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13467:15;:13;:15::i;:::-;13500:18;;13467:89;;-1:-1:-1;;;13467:89:57;;-1:-1:-1;;;;;13467:32:57;;;;;;;:89;;13528:4;;13535:20;;13467:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13316:372;;;13603:66;13628:18;13648:20;13603:13;:11;:13::i;:66::-;13213:489;13183:519;12124:1588;;12100:1612;13824:31;;;;13765:18;;-1:-1:-1;;;;;13727:303:57;;;;;;13869:13;13896:20;13930:23;13967:4;6678:19:33;-1:-1:-1;;;;;13985:33:57;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13727:303;;;34804:25:62;;;34860:2;34845:18;;34838:34;;;;34888:18;;;34881:34;;;;34946:2;34931:18;;34924:34;34989:3;34974:19;;34967:35;34791:3;34776:19;13727:303:57;;;;;;;14150:18;;14133:54;;14170:16;14133;:54::i;:::-;14129:116;;;14203:31;14220:13;14203:16;:31::i;:::-;-1:-1:-1;14262:13:57;;10951:3331;-1:-1:-1;;;;;;10951:3331:57:o;3285:106:61:-;3369:15;;3285:106::o;7843:214:17:-;7932:42;7977:31;7991:16;7977:13;:31::i;:::-;7932:76;;8018:32;8040:9;8018:21;:32::i;5614:206::-;5695:49;5721:16;5739:4;5695:25;:49::i;:::-;5754:15;:13;:15::i;:::-;-1:-1:-1;;;;;5754:41:17;;5796:16;5754:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5614:206;:::o;20253:227:57:-;20349:7;20375:98;1942:68;20447:8;20457:13;20402:69;;;;;;;;;35215:25:62;;;-1:-1:-1;;;;;35276:32:62;;;35271:2;35256:18;;35249:60;35345:32;35340:2;35325:18;;35318:60;35203:2;35188:18;;35013:371;20402:69:57;;;;;;;;;;;;;20392:80;;;;;;20375:16;:98::i;8499:1504::-;8735:23;;:::i;:::-;-1:-1:-1;;;;;8778:27:57;;8770:80;;;;-1:-1:-1;;;8770:80:57;;;;;;;;;;;;8861:65;8884:8;8894:13;8909:16;8861:22;:65::i;:::-;9079:47;:17;9112:13;9079:32;:47::i;:::-;9136:34;9173:219;9205:8;9227:13;9254:21;9289:7;9310:22;:20;:22::i;:::-;-1:-1:-1;;;;;9310:49:57;;9360:21;9310:72;;;;;;;;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;9310:72:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9173:11;;:219;;;;:18;:219::i;:::-;9136:256;;9545:85;9577:15;:13;:15::i;:::-;9545:26;;9594:8;9604:7;9613:16;9545:31;:85::i;:::-;9852:10;:17;;;9781:23;:56;9805:10;:31;;;9781:56;;;;;;;;;;;;:88;;;;:::i;:::-;9710:23;:56;9734:10;:31;;;9710:56;;;;;;;;;;;:159;;;;9928:21;9913:13;-1:-1:-1;;;;;9885:84:57;9903:8;-1:-1:-1;;;;;9885:84:57;;9951:10;:17;;;9885:84;;;;1253:25:62;;1241:2;1226:18;;1107:177;9885:84:57;;;;;;;;9986:10;8499:1504;-1:-1:-1;;;;;;;8499:1504:57:o;7084:141:35:-;7151:17;:15;:17::i;:::-;7146:73;;7191:17;;-1:-1:-1;;;7191:17:35;;;;;;;;;;;1980:235:34;6931:20:35;:18;:20::i;4910:342:17:-;6931:20:35;:18;:20::i;:::-;4991:84:17::1;1485:17;-1:-1:-1::0;;4991:24:17::1;:84::i;:::-;5085:72;1173:16;312:9:31;5085:20:17;:72::i;:::-;5167:78;1330:16;-1:-1:-1::0;;;;;5167:22:17::1;:78::i;1939:156:38:-:0;6931:20:35;:18;:20::i;:::-;2012:25:38::1;2040:21;:19;:21::i;:::-;2071:17:::0;;-1:-1:-1;;2071:17:38::1;::::0;;-1:-1:-1;1939:156:38:o;3446:147:39:-;6931:20:35;:18;:20::i;:::-;3548:38:39::1;3572:4;3578:7;3548:23;:38::i;6849:139:57:-:0;6931:20:35;:18;:20::i;12210:234:17:-;12342:28;:6;12359:4;12365;12342:16;:28::i;:::-;12401:14;12417:6;12425:4;12431;12334:103;;;;;;;;-1:-1:-1;;;12334:103:17;;;;;;;;;;;:::i;7084:278:54:-;-1:-1:-1;;;;;7234:18:54;;;7182:13;7234:18;;;;;;;;;;;7270:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7182:13;;7270:19;;6374:14;;;:19;;;6293:107;7270:19;7314:12;7262:66;;;;;-1:-1:-1;;;7262:66:54;;;;;;;;:::i;:::-;-1:-1:-1;7345:10:54;7084:278;-1:-1:-1;;;7084:278:54:o;2382:104:46:-;2440:7;2470:1;2466;:5;:13;;2478:1;2466:13;;;-1:-1:-1;2474:1:46;;2382:104;-1:-1:-1;2382:104:46:o;5166:247:10:-;5234:7;5279:16;;;:6;:16;;;;;;;;5253:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5286:8;;5305:69;;;;-1:-1:-1;;;5305:69:10;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;5305:69:10;-1:-1:-1;5391:15:10;;;;5166:247;-1:-1:-1;;5166:247:10:o;3552:726::-;3634:4;3640:12;3664:23;3690:24;3705:8;3690:14;:24::i;:::-;3664:50;;3772:15;3751:5;:18;;;:36;3747:103;;;-1:-1:-1;;1112:9:29;;;;;;;;;-1:-1:-1;1112:9:29;;3811:4:10;;-1:-1:-1;3803:36:10;;3747:103;3879:21;3902:23;3940:4;3929:36;;;;;;;;;;;;:::i;:::-;4041:12;;3878:87;;-1:-1:-1;3878:87:10;-1:-1:-1;3995:59:10;;:20;;3878:87;;3995:28;:59::i;:::-;4115:12;;4129:18;;;;;4069:79;;8810:25:62;;;8866:2;8851:18;;8844:34;4105:8:10;;-1:-1:-1;;;;;4069:79:10;;;;;8783:18:62;4069:79:10;;;;;;;4211:12;;4195:28;;:13;:28;:::i;:::-;4184:57;;;;;;36378:25:62;;;;-1:-1:-1;;;;;36439:32:62;;36419:18;;;36412:60;36351:18;;4184:57:10;;;;;;;;;;;;4177:64;;4259:5;4266:4;4251:20;;;;;;;3552:726;;;;;;:::o;4488:93::-;4558:16;;;;:6;:16;;;;;4551:23;;;;;;;;;;;;;;;;;;4488:93::o;4479:945:29:-;4795:7;4804:12;4850:4;:10;;;4836;:24;;4828:64;;;;-1:-1:-1;;;4828:64:29;;;;;;;;;;;;4903:17;4948:15;;4947:43;;4980:10;4947:43;;;4967:4;:10;;;4947:43;5018:9;;4934:56;;-1:-1:-1;5038:335:29;5045:20;;;;;:38;;;5082:1;5069:10;:14;5045:38;5038:335;;;5100:16;5118:17;5139:35;5151:6;5159:14;5139:11;:35;;:::i;:::-;5099:75;;;;5193:11;5189:22;;;5206:5;;;;5189:22;5243:4;-1:-1:-1;5243:4:29;5270:40;:4;5286:11;5299:10;5270:15;:40::i;:::-;5261:49;-1:-1:-1;5325:12:29;;;;:::i;:::-;;;;5351:11;;;;;:::i;:::-;;;;5085:288;;5038:335;;;-1:-1:-1;5391:9:29;5402:14;;-1:-1:-1;4479:945:29;;-1:-1:-1;;;;;;4479:945:29:o;1731:423:56:-;-1:-1:-1;;;;;1923:18:56;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;:18;;3034:26;1914:84;;;;-1:-1:-1;;;1914:84:56;;;;;;;;:::i;:::-;-1:-1:-1;2035:71:56;;;;;;;;-1:-1:-1;;;;;2035:71:56;;;;;;;;;;;;2116:18;;;-1:-1:-1;2116:18:56;;;;;;;;;;:31;;;;-1:-1:-1;;;;;;2116:31:56;;;;;;;;;;;-1:-1:-1;2116:31:56;;;;1731:423::o;6774:117:33:-;6863:21;;6774:117::o;3965:400:54:-;4138:24;4165;4170:4;4176:12;4165:4;:24::i;:::-;4207:17;;;;;;;;;;-1:-1:-1;;;;;4207:17:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4138:51;;-1:-1:-1;4207:19:54;;:17;:19::i;:::-;4259;;;;4245:12;;4199:81;;;;-1:-1:-1;;;4199:81:54;;;;;;;;;:::i;:::-;-1:-1:-1;;4290:38:54;;:68;-1:-1:-1;;3965:400:54:o;5141:292::-;5237:24;5264;5269:4;5275:12;5264:4;:24::i;:::-;5306:17;;;;;;;;;;-1:-1:-1;;;;;5306:17:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5237:51;;-1:-1:-1;5306:19:54;;:17;:19::i;:::-;5358;;;;5344:12;;5298:81;;;;-1:-1:-1;;;5298:81:54;;;;;;;;;:::i;:::-;-1:-1:-1;;5411:15:54;5389:19;;;;:37;-1:-1:-1;;5141:292:54:o;2331:307:16:-;2454:6;2464:1;2454:11;2450:24;;2331:307;;;:::o;2450:24::-;-1:-1:-1;;;;;2491:21:16;;;;;;;;;;;;;;2516:6;2491:31;;;;2483:107;;;;-1:-1:-1;;;2483:107:16;;;;;8810:25:62;;;;8851:18;;;8844:34;8783:18;;2483:107:16;8636:248:62;2483:107:16;-1:-1:-1;;;;;;;2600:21:16;;;;;;;;;;;;;:31;;2625:6;;2600:21;:31;;2625:6;;2600:31;:::i;:::-;;;;-1:-1:-1;;;;;2331:307:16:o;1377:590::-;1593:24;;1610:7;1593:24;-1:-1:-1;;;;;1652:21:16;;1627:22;1652:21;;;;;;;;;;;:30;;1676:6;;1652:30;:::i;:::-;1627:55;;1692:23;1718:12;-1:-1:-1;;;;;1718:31:16;;1750:15;1775:4;1782:15;1718:80;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1692:106;-1:-1:-1;1692:106:16;1816:14;:33;;;;1808:111;;;;-1:-1:-1;;;1808:111:16;;;;;8810:25:62;;;;8851:18;;;8844:34;8783:18;;1808:111:16;8636:248:62;1808:111:16;-1:-1:-1;;;;;;;1929:21:16;;;;;;;;;;;;;:31;;1954:6;;1929:21;:31;;1954:6;;1929:31;:::i;:::-;;;;-1:-1:-1;;;;1377:590:16;;;;;:::o;3000:383::-;3197:4;3213:23;3239:12;-1:-1:-1;;;;;3239:31:16;;3271:15;3296:4;3303:15;3239:80;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3336:21:16;;;;;;;;;;;;;;:40;;;-1:-1:-1;;3000:383:16;;;;;;:::o;4625:582:42:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:42;;;:23;5045:49;5041:119;;;5138:6;5121:24;;-1:-1:-1;;;5121:24:42;;;;;;;;:::i;5041:119::-;-1:-1:-1;5180:10:42;5173:17;;5725:94:33;5801:11;;5725:94::o;3646:87:61:-;3718:8;;3646:87::o;959:188:31:-;1020:7;1047:13;1058:1;312:9;-1:-1:-1;1823:16:31;;1742:104;1047:13;:30;;;;1064:13;1075:1;312:9;-1:-1:-1;1823:16:31;;1742:104;1064:13;1100:1;1103;1039:67;;;;;;-1:-1:-1;;;1039:67:31;;;;;8810:25:62;;;;8851:18;;;8844:34;8783:18;;1039:67:31;8636:248:62;1039:67:31;-1:-1:-1;312:9:31;;-1:-1:-1;1124:5:31;1128:1;1124;:5;:::i;:::-;1123:17;;;;:::i;1619:859:10:-;1735:7;1746:1;1735:12;1727:50;;;;-1:-1:-1;;;1727:50:10;;;;;;;;;;;;1787:86;1813:15;:13;:15::i;:::-;1857;;1787:20;;:86;1830:16;;1848:7;;1857:15;-1:-1:-1;;;1857:15:10;;;;;;1787:25;:86;:::i;:::-;-1:-1:-1;;;;;1921:29:10;;1884:34;1921:29;;;:11;:29;;;;;;;;2053:16;;;;;5717:57;;-1:-1:-1;;;;;;5742:4:10;38530:2:62;38501:15;;;38497:45;;5717:57:10;;;38485:58:62;38577:15;;;38573:45;38559:12;;;38552:67;38635:12;;;;38628:28;;;;5717:57:10;;;;;;;;;;38672:12:62;;;5717:57:10;;;5707:68;;;;;;;;;2098:170;;;;;;;;2163:15;2098:170;;;;;;;;;;;;;;;;;;;2080:15;;;:6;:15;;;;;;;:188;;;;;;;;;;;;;;;;;;;;;;;2282:16;;;1921:29;;5707:68;2282:21;2278:70;;2312:15;;;;2305:23;;;;:6;:23;;;;;:33;;:43;;;2278:70;2358:27;:10;2377:7;2358:18;:27::i;:::-;2401:70;;;8810:25:62;;;8866:2;8851:18;;8844:34;;;2436:7:10;;-1:-1:-1;;;;;2401:70:10;;;;;8783:18:62;2401:70:10;;;;;;;1717:761;;1619:859;;;:::o;1050:198:7:-;1148:11;;1144:98;;1183:34;;-1:-1:-1;;;1183:34:7;;-1:-1:-1;;;;;1183:20:7;;;;;:34;;1204:3;;1209:7;;1183:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1175:56;;;;-1:-1:-1;;;1175:56:7;;37579:2:62;1175:56:7;;;37561:21:62;37618:1;37598:18;;;37591:29;-1:-1:-1;;;37636:18:62;;;37629:39;37685:18;;1175:56:7;37377:332:62;3307:307:54;3408:24;3435;3440:4;3446:12;3435:4;:24::i;:::-;3477:17;;;;;;;;;;-1:-1:-1;;;;;3477:17:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3408:51;;-1:-1:-1;3477:19:54;;:17;:19::i;:::-;3529;;;;3515:12;;3469:81;;;;-1:-1:-1;;;3469:81:54;;;;;;;;;:::i;:::-;-1:-1:-1;;3592:15:54;3560:29;;;;:47;-1:-1:-1;;3307:307:54:o;4628:301::-;4738:24;4765;4770:4;4776:12;4765:4;:24::i;:::-;4807:17;;;;;;;;;;-1:-1:-1;;;;;4807:17:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4738:51;;-1:-1:-1;4807:19:54;;:17;:19::i;:::-;4859;;;;4845:12;;4799:81;;;;-1:-1:-1;;;4799:81:54;;;;;;;;;:::i;:::-;-1:-1:-1;;4921:1:54;4890:28;;;;:32;-1:-1:-1;;4628:301:54:o;8702:257:17:-;8815:42;8860:31;8874:16;8860:13;:31::i;:::-;8815:76;;8901:51;8927:9;8938:13;8901:25;:51::i;4946:176:39:-;5023:7;5049:66;5082:20;:18;:20::i;:::-;5104:10;3555:4:45;3549:11;-1:-1:-1;;;3573:23:45;;3625:4;3616:14;;3609:39;;;;3677:4;3668:14;;3661:34;3733:4;3718:20;;;3353:401;21351:317:57;21468:14;21485:70;21499:47;21522:8;21532:13;21499:22;:47::i;:::-;21548:6;21485:13;:70::i;:::-;21468:87;-1:-1:-1;21468:87:57;21583:13;-1:-1:-1;;;;;21573:23:57;;;;;;;21565:96;;;;-1:-1:-1;;;21565:96:57;;;;;;;;;:::i;:::-;;;21458:210;21351:317;;;:::o;2647:192:56:-;-1:-1:-1;;;;;2766:18:56;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;:18;;3034:26;2757:75;;;;-1:-1:-1;;;2757:75:56;;;;;;;;:::i;2227:799:54:-;2477:12;;:::i;:::-;-1:-1:-1;;;;;2510:18:54;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;6374:14;;;:19;;;6293:107;2510:27;2509:28;2563:12;2501:76;;;;;-1:-1:-1;;;2501:76:54;;;;;;;;:::i;:::-;-1:-1:-1;;2614:335:54;;;;;;;;-1:-1:-1;;;;;2614:335:54;;;;;;;;;;;;;;;;;;2759:15;2614:335;;;;;;-1:-1:-1;2614:335:54;;;;;;;;;;;;;;;;;;;;;;;;2960:18;;;;;;;;;;;;;:31;;;;-1:-1:-1;;;;;;2960:31:54;;;;;;;;;;;-1:-1:-1;2960:31:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2614:335;2227:799::o;8487:120:35:-;8537:4;8560:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8560:40:35;;;;;;-1:-1:-1;8487:120:35:o;6807:346:17:-;6890:4;6898;6890:12;;;;;;;;;6882:63;;;;-1:-1:-1;;;6882:63:17;;;;;;;;;:::i;:::-;-1:-1:-1;7018:4:17;;-1:-1:-1;6963:24:17;;;;312:9:31;-1:-1:-1;1823:16:31;6955:75:17;;;;-1:-1:-1;;;6955:75:17;;;;;;;;;:::i;:::-;-1:-1:-1;;7040:18:17;:25;;;7075;;;-1:-1:-1;;;7075:25:17;-1:-1:-1;;;;7040:25:17;;;-1:-1:-1;;;7040:25:17;7075;;;;-1:-1:-1;;;;7075:25:17;;;;;;;;;;7115:31;;;;;;7061:4;;7096;;7115:31;:::i;7367:269::-;7452:4;7460;-1:-1:-1;;;;;7452:12:17;;;;;;;;7444:63;;;;-1:-1:-1;;;7444:63:17;;;;;;;;;:::i;:::-;-1:-1:-1;;7517:20:17;:27;;-1:-1:-1;;;;;7554:27:17;;;-1:-1:-1;;;7554:27:17;-1:-1:-1;;;;;;7554:27:17;;;7517;;;7554;;;;7596:33;;;;;;7540:4;;7577;;7596:33;:::i;3599:330:39:-;6931:20:35;:18;:20::i;:::-;3711:23:39::1;3737:19;:17;:19::i;:::-;3711:45:::0;-1:-1:-1;3766:7:39::1;::::0;::::1;:14;3776:4:::0;3766:7;:14:::1;:::i;:::-;-1:-1:-1::0;3790:10:39::1;::::0;::::1;:20;3803:7:::0;3790:10;:20:::1;:::i;:::-;-1:-1:-1::0;3891:1:39::1;3875:17:::0;;;3902:16:::1;::::0;;::::1;:20:::0;-1:-1:-1;;3599:330:39:o;451:141:32:-;534:4;566:3;557:5;:12;;:28;;;;-1:-1:-1;;573:12:32;;;;;550:35;-1:-1:-1;451:141:32:o;4701:243:10:-;4765:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4765:17:10;4794:23;4820:16;;;:6;:16;;;;;;;;;4794:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4827:8;;4846:69;;;;-1:-1:-1;;;4846:69:10;;;;;;1253:25:62;;1241:2;1226:18;;1107:177;3052:459:29;3223:7;3263:1;3250:4;:10;;;:14;3242:46;;;;-1:-1:-1;;;3242:46:29;;;;;;;;;;;;3298:16;3317:22;3329:4;:9;;;3317:11;:22;;:::i;:::-;3298:41;;3349:21;3360:4;:9;;;3349:10;:21;;:::i;:::-;3394:1;3380:4;:10;;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;3405:20:29;;;3439:10;;;;3405:9;3439:15;3435:43;;3476:1;3456:9;;;:22;3435:43;-1:-1:-1;;3495:9:29;;;3052:459;-1:-1:-1;;3052:459:29:o;5743:516:42:-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:42;;;;;;;;;;;2257:319:29;1226:6;2332:4;:10;;;:22;2324:64;;;;-1:-1:-1;;;2324:64:29;;;;;;;;;;;;2406:2;2398:52;;;;-1:-1:-1;;;2398:52:29;;;;;;;;;;;;2460:9;;;;:14;;;2484:10;;;:15;;:10;;:15;;2460:9;;2484:15;:::i;:::-;;;;-1:-1:-1;;2513:10:29;;;;2527:1;2513:15;2509:35;;2530:14;;;2509:35;2568:1;2554:4;:10;;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;2257:319:29:o;4015:109:39:-;4068:7;4094:23;:21;:23::i;3702:255:44:-;3780:7;3800:17;3819:18;3839:16;3859:27;3870:4;3876:9;3859:10;:27::i;:::-;3799:87;;;;;;3896:28;3908:5;3915:8;3896:11;:28::i;:::-;-1:-1:-1;3941:9:44;;3702:255;-1:-1:-1;;;;3702:255:44:o;4130:191:39:-;4185:7;2073:95;4243:17;:15;:17::i;:::-;4262:20;:18;:20::i;:::-;4221:92;;;;;;38954:25:62;;;;38995:18;;38988:34;;;;39038:18;;;39031:34;4284:13:39;39081:18:62;;;39074:34;4307:4:39;39124:19:62;;;39117:61;38926:19;;4221:92:39;;;;;;;;;;;;4211:103;;;;;;4204:110;;4130:191;:::o;2129:766:44:-;2210:7;2219:12;2233:7;2256:9;:16;2276:2;2256:22;2252:637;;2592:4;2577:20;;2571:27;2641:4;2626:20;;2620:27;2698:4;2683:20;;2677:27;2294:9;2669:36;2739:25;2750:4;2669:36;2571:27;2620;2739:10;:25::i;:::-;2732:32;;;;;;;;;;;2252:637;-1:-1:-1;;2860:16:44;;2811:1;;-1:-1:-1;2815:35:44;;2252:637;2129:766;;;;;:::o;7196:532::-;7291:20;7282:5;:29;;;;;;;;:::i;:::-;;7278:444;;7196:532;;:::o;7278:444::-;7387:29;7378:5;:38;;;;;;;;:::i;:::-;;7374:348;;7439:23;;-1:-1:-1;;;7439:23:44;;;;;;;;;;;7374:348;7492:35;7483:5;:44;;;;;;;;:::i;:::-;;7479:243;;7550:46;;-1:-1:-1;;;7550:46:44;;;;;1253:25:62;;;1226:18;;7550:46:44;1107:177:62;7479:243:44;7626:30;7617:5;:39;;;;;;;;:::i;:::-;;7613:109;;7679:32;;-1:-1:-1;;;7679:32:44;;;;;1253:25:62;;;1226:18;;7679:32:44;1107:177:62;7058:687:39;7108:7;7127:23;7153:19;:17;:19::i;:::-;7127:45;;7182:18;7203:13;:11;:13::i;:::-;7230:18;;7182:34;;-1:-1:-1;7230:22:39;7226:513;;7275:22;;;;;;;;7058:687;-1:-1:-1;;7058:687:39:o;7226:513::-;7572:13;;7603:15;;7599:130;;7645:10;7058:687;-1:-1:-1;;;7058:687:39:o;7599:130::-;7701:13;7694:20;;;;;7058:687;:::o;7966:723::-;8019:7;8038:23;8064:19;:17;:19::i;:::-;8038:45;;8093:21;8117:16;:14;:16::i;:::-;8147:21;;8093:40;;-1:-1:-1;8147:25:39;8143:540;;8195:25;;;;;;;;7966:723;-1:-1:-1;;7966:723:39:o;8143:540::-;8507:16;;;;8541:18;;8537:136;;8586:13;7966:723;-1:-1:-1;;;7966:723:39:o;5140:1530:44:-;5266:7;;;-1:-1:-1;;;;;6186:79:44;;6182:164;;;-1:-1:-1;6297:1:44;;-1:-1:-1;6301:30:44;;-1:-1:-1;6333:1:44;6281:54;;6182:164;6457:24;;;6440:14;6457:24;;;;;;;;;39416:25:62;;;39489:4;39477:17;;39457:18;;;39450:45;;;;39511:18;;;39504:34;;;39554:18;;;39547:34;;;6457:24:44;;39388:19:62;;6457:24:44;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6457:24:44;;-1:-1:-1;;6457:24:44;;;-1:-1:-1;;;;;;;6495:20:44;;6491:113;;-1:-1:-1;6547:1:44;;-1:-1:-1;6551:29:44;;-1:-1:-1;6547:1:44;;-1:-1:-1;6531:62:44;;6491:113;6622:6;-1:-1:-1;6630:20:44;;-1:-1:-1;6630:20:44;;-1:-1:-1;5140:1530:44;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:62:-;-1:-1:-1;;;;;89:31:62;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;1685:121::-;1770:10;1763:5;1759:22;1752:5;1749:33;1739:61;;1796:1;1793;1786:12;1811:485;1887:6;1895;1903;1956:2;1944:9;1935:7;1931:23;1927:32;1924:52;;;1972:1;1969;1962:12;1924:52;2017:23;;;-1:-1:-1;2116:2:62;2101:18;;2088:32;2129;2088;2129;:::i;:::-;1811:485;;2180:7;;-1:-1:-1;;;2260:2:62;2245:18;;;;2232:32;;1811:485::o;2301:245::-;2359:6;2412:2;2400:9;2391:7;2387:23;2383:32;2380:52;;;2428:1;2425;2418:12;2380:52;2467:9;2454:23;2486:30;2510:5;2486:30;:::i;2748:347::-;2799:8;2809:6;2863:3;2856:4;2848:6;2844:17;2840:27;2830:55;;2881:1;2878;2871:12;2830:55;-1:-1:-1;2904:20:62;;-1:-1:-1;;;;;2936:30:62;;2933:50;;;2979:1;2976;2969:12;2933:50;3016:4;3008:6;3004:17;2992:29;;3068:3;3061:4;3052:6;3044;3040:19;3036:30;3033:39;3030:59;;;3085:1;3082;3075:12;3100:544;3179:6;3187;3195;3248:2;3236:9;3227:7;3223:23;3219:32;3216:52;;;3264:1;3261;3254:12;3216:52;3303:9;3290:23;3322:31;3347:5;3322:31;:::i;:::-;3372:5;-1:-1:-1;3428:2:62;3413:18;;3400:32;-1:-1:-1;;;;;3444:30:62;;3441:50;;;3487:1;3484;3477:12;3441:50;3526:58;3576:7;3567:6;3556:9;3552:22;3526:58;:::i;:::-;3100:544;;3603:8;;-1:-1:-1;3500:84:62;;-1:-1:-1;;;;3100:544:62:o;3649:118::-;3735:5;3728:13;3721:21;3714:5;3711:32;3701:60;;3757:1;3754;3747:12;3772:382;3837:6;3845;3898:2;3886:9;3877:7;3873:23;3869:32;3866:52;;;3914:1;3911;3904:12;3866:52;3953:9;3940:23;3972:31;3997:5;3972:31;:::i;:::-;4022:5;-1:-1:-1;4079:2:62;4064:18;;4051:32;4092:30;4051:32;4092:30;:::i;:::-;4141:7;4131:17;;;3772:382;;;;;:::o;4159:226::-;4218:6;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;-1:-1:-1;4332:23:62;;4159:226;-1:-1:-1;4159:226:62:o;4813:278::-;5013:10;5001:23;;;4983:42;;5061:23;;5056:2;5041:18;;5034:51;4971:2;4956:18;;4813:278::o;5096:250::-;5181:1;5191:113;5205:6;5202:1;5199:13;5191:113;;;5281:11;;;5275:18;5262:11;;;5255:39;5227:2;5220:10;5191:113;;;-1:-1:-1;;5338:1:62;5320:16;;5313:27;5096:250::o;5351:271::-;5393:3;5431:5;5425:12;5458:6;5453:3;5446:19;5474:76;5543:6;5536:4;5531:3;5527:14;5520:4;5513:5;5509:16;5474:76;:::i;:::-;5604:2;5583:15;-1:-1:-1;;5579:29:62;5570:39;;;;5611:4;5566:50;;5351:271;-1:-1:-1;;5351:271:62:o;5627:454::-;5852:6;5841:9;5834:25;5895:2;5890;5879:9;5875:18;5868:30;5815:4;5921:45;5962:2;5951:9;5947:18;5939:6;5921:45;:::i;:::-;6014:9;6006:6;6002:22;5997:2;5986:9;5982:18;5975:50;6042:33;6068:6;6060;6042:33;:::i;:::-;6034:41;5627:454;-1:-1:-1;;;;;;5627:454:62:o;7616:294::-;-1:-1:-1;;;;;7804:31:62;;;7786:50;;7872:31;;7867:2;7852:18;;7845:59;7774:2;7759:18;;7616:294::o;7915:203::-;-1:-1:-1;;;;;8079:32:62;;;;8061:51;;8049:2;8034:18;;7915:203::o;8123:508::-;8200:6;8208;8216;8269:2;8257:9;8248:7;8244:23;8240:32;8237:52;;;8285:1;8282;8275:12;8237:52;8324:9;8311:23;8343:31;8368:5;8343:31;:::i;:::-;8393:5;-1:-1:-1;8450:2:62;8435:18;;8422:32;8463:33;8422:32;8463:33;:::i;9402:1238::-;9808:3;9803;9799:13;9791:6;9787:26;9776:9;9769:45;9850:3;9845:2;9834:9;9830:18;9823:31;9750:4;9877:46;9918:3;9907:9;9903:19;9895:6;9877:46;:::i;:::-;9971:9;9963:6;9959:22;9954:2;9943:9;9939:18;9932:50;10005:33;10031:6;10023;10005:33;:::i;:::-;10069:2;10054:18;;10047:34;;;-1:-1:-1;;;;;10118:32:62;;10112:3;10097:19;;10090:61;10138:3;10167:19;;10160:35;;;10232:22;;;10226:3;10211:19;;10204:51;10304:13;;10326:22;;;10376:2;10402:15;;;;-1:-1:-1;10364:15:62;;;;-1:-1:-1;10445:169:62;10459:6;10456:1;10453:13;10445:169;;;10520:13;;10508:26;;10563:2;10589:15;;;;10554:12;;;;10481:1;10474:9;10445:169;;;-1:-1:-1;10631:3:62;;9402:1238;-1:-1:-1;;;;;;;;;;;9402:1238:62:o;10850:274::-;-1:-1:-1;;;;;11042:32:62;;;;11024:51;;11106:2;11091:18;;11084:34;11012:2;10997:18;;10850:274::o;11129:621::-;11226:6;11234;11287:2;11275:9;11266:7;11262:23;11258:32;11255:52;;;11303:1;11300;11293:12;11255:52;11343:9;11330:23;-1:-1:-1;;;;;11368:6:62;11365:30;11362:50;;;11408:1;11405;11398:12;11362:50;11431:22;;11484:4;11476:13;;11472:27;-1:-1:-1;11462:55:62;;11513:1;11510;11503:12;11462:55;11553:2;11540:16;-1:-1:-1;;;;;11571:6:62;11568:30;11565:50;;;11611:1;11608;11601:12;11565:50;11664:7;11659:2;11649:6;11646:1;11642:14;11638:2;11634:23;11630:32;11627:45;11624:65;;;11685:1;11682;11675:12;11624:65;11716:2;11708:11;;;;;11738:6;;-1:-1:-1;11129:621:62;-1:-1:-1;;;11129:621:62:o;11755:780::-;11915:4;11963:2;11952:9;11948:18;11993:2;11982:9;11975:21;12016:6;12051;12045:13;12082:6;12074;12067:22;12120:2;12109:9;12105:18;12098:25;;12182:2;12172:6;12169:1;12165:14;12154:9;12150:30;12146:39;12132:53;;12220:2;12212:6;12208:15;12241:1;12251:255;12265:6;12262:1;12259:13;12251:255;;;12358:2;12354:7;12342:9;12334:6;12330:22;12326:36;12321:3;12314:49;12386:40;12419:6;12410;12404:13;12386:40;:::i;:::-;12376:50;-1:-1:-1;12461:2:62;12484:12;;;;12449:15;;;;;12287:1;12280:9;12251:255;;;-1:-1:-1;12523:6:62;;11755:780;-1:-1:-1;;;;;;11755:780:62:o;12540:711::-;12645:6;12653;12661;12669;12722:2;12710:9;12701:7;12697:23;12693:32;12690:52;;;12738:1;12735;12728:12;12690:52;12777:9;12764:23;12796:31;12821:5;12796:31;:::i;:::-;12846:5;-1:-1:-1;12903:2:62;12888:18;;12875:32;12938:1;12926:14;;12916:42;;12954:1;12951;12944:12;12916:42;12977:7;-1:-1:-1;13035:2:62;13020:18;;13007:32;-1:-1:-1;;;;;13051:30:62;;13048:50;;;13094:1;13091;13084:12;13048:50;13133:58;13183:7;13174:6;13163:9;13159:22;13133:58;:::i;:::-;12540:711;;;;-1:-1:-1;13210:8:62;-1:-1:-1;;;;12540:711:62:o;13256:388::-;13324:6;13332;13385:2;13373:9;13364:7;13360:23;13356:32;13353:52;;;13401:1;13398;13391:12;13353:52;13440:9;13427:23;13459:31;13484:5;13459:31;:::i;:::-;13509:5;-1:-1:-1;13566:2:62;13551:18;;13538:32;13579:33;13538:32;13579:33;:::i;14441:397::-;-1:-1:-1;;;;;14661:32:62;;;14643:51;;14730:32;;;14725:2;14710:18;;14703:60;14799:32;;;14794:2;14779:18;;14772:60;14631:2;14616:18;;14441:397::o;14843:245::-;14910:6;14963:2;14951:9;14942:7;14938:23;14934:32;14931:52;;;14979:1;14976;14969:12;14931:52;15011:9;15005:16;15030:28;15052:5;15030:28;:::i;15093:300::-;-1:-1:-1;;;;;15285:32:62;;;15267:51;;15354:32;;15349:2;15334:18;;15327:60;15255:2;15240:18;;15093:300::o;15398:127::-;15459:10;15454:3;15450:20;15447:1;15440:31;15490:4;15487:1;15480:15;15514:4;15511:1;15504:15;15530:257;15602:4;15596:11;;;15634:17;;-1:-1:-1;;;;;15666:34:62;;15702:22;;;15663:62;15660:88;;;15728:18;;:::i;:::-;15764:4;15757:24;15530:257;:::o;15792:248::-;15859:2;15853:9;15901:4;15889:17;;-1:-1:-1;;;;;15921:34:62;;15957:22;;;15918:62;15915:88;;;15983:18;;:::i;16045:252::-;16117:2;16111:9;16159:3;16147:16;;-1:-1:-1;;;;;16178:34:62;;16214:22;;;16175:62;16172:88;;;16240:18;;:::i;16302:889::-;16345:5;16398:3;16391:4;16383:6;16379:17;16375:27;16365:55;;16416:1;16413;16406:12;16365:55;16456:6;16443:20;16495:4;16487:6;16483:17;16524:1;16546;-1:-1:-1;;;;;16562:6:62;16559:30;16556:56;;;16592:18;;:::i;:::-;-1:-1:-1;16747:2:62;16741:9;-1:-1:-1;;16660:2:62;16639:15;;16635:29;;16805:2;16793:15;16789:29;16777:42;;16870:22;;;-1:-1:-1;;;;;16834:34:62;;16831:62;16828:88;;;16896:18;;:::i;:::-;16932:2;16925:22;16982;;;16967:6;-1:-1:-1;16967:6:62;17019:16;;;17016:25;-1:-1:-1;17013:45:62;;;17054:1;17051;17044:12;17013:45;17104:6;17099:3;17092:4;17084:6;17080:17;17067:44;17159:1;17152:4;17143:6;17135;17131:19;17127:30;17120:41;17179:6;17170:15;;;;;;16302:889;;;;:::o;17196:681::-;17301:6;17309;17317;17370:2;17358:9;17349:7;17345:23;17341:32;17338:52;;;17386:1;17383;17376:12;17338:52;17426:9;17413:23;-1:-1:-1;;;;;17451:6:62;17448:30;17445:50;;;17491:1;17488;17481:12;17445:50;17514;17556:7;17547:6;17536:9;17532:22;17514:50;:::i;:::-;17504:60;;;17617:2;17606:9;17602:18;17589:32;-1:-1:-1;;;;;17636:8:62;17633:32;17630:52;;;17678:1;17675;17668:12;17630:52;17701;17745:7;17734:8;17723:9;17719:24;17701:52;:::i;:::-;17691:62;;;17803:2;17792:9;17788:18;17775:32;17816:31;17841:5;17816:31;:::i;:::-;17866:5;17856:15;;;17196:681;;;;;:::o;17882:380::-;17961:1;17957:12;;;;18004;;;18025:61;;18079:4;18071:6;18067:17;18057:27;;18025:61;18132:2;18124:6;18121:14;18101:18;18098:38;18095:161;;18178:10;18173:3;18169:20;18166:1;18159:31;18213:4;18210:1;18203:15;18241:4;18238:1;18231:15;18095:161;;17882:380;;;:::o;18393:518::-;18495:2;18490:3;18487:11;18484:421;;;18531:5;18528:1;18521:16;18575:4;18572:1;18562:18;18645:2;18633:10;18629:19;18626:1;18622:27;18616:4;18612:38;18681:4;18669:10;18666:20;18663:47;;;-1:-1:-1;18704:4:62;18663:47;18759:2;18754:3;18750:12;18747:1;18743:20;18737:4;18733:31;18723:41;;18814:81;18832:2;18825:5;18822:13;18814:81;;;18891:1;18877:16;;18858:1;18847:13;18814:81;;19087:1299;19213:3;19207:10;-1:-1:-1;;;;;19232:6:62;19229:30;19226:56;;;19262:18;;:::i;:::-;19291:97;19381:6;19341:38;19373:4;19367:11;19341:38;:::i;:::-;19335:4;19291:97;:::i;:::-;19437:4;19468:2;19457:14;;19485:1;19480:649;;;;20173:1;20190:6;20187:89;;;-1:-1:-1;20242:19:62;;;20236:26;20187:89;-1:-1:-1;;19044:1:62;19040:11;;;19036:24;19032:29;19022:40;19068:1;19064:11;;;19019:57;20289:81;;19450:930;;19480:649;18340:1;18333:14;;;18377:4;18364:18;;-1:-1:-1;;19516:20:62;;;19634:222;19648:7;19645:1;19642:14;19634:222;;;19730:19;;;19724:26;19709:42;;19837:4;19822:20;;;;19790:1;19778:14;;;;19664:12;19634:222;;;19638:3;19884:6;19875:7;19872:19;19869:201;;;19945:19;;;19939:26;-1:-1:-1;;20028:1:62;20024:14;;;20040:3;20020:24;20016:37;20012:42;19997:58;19982:74;;19869:201;-1:-1:-1;;;;20116:1:62;20100:14;;;20096:22;20083:36;;-1:-1:-1;19087:1299:62:o;20391:388::-;20548:2;20537:9;20530:21;20587:6;20582:2;20571:9;20567:18;20560:34;20644:6;20636;20631:2;20620:9;20616:18;20603:48;20700:1;20671:22;;;20695:2;20667:31;;;20660:42;;;;20763:2;20742:15;;;-1:-1:-1;;20738:29:62;20723:45;20719:54;;20391:388;-1:-1:-1;20391:388:62:o;21394:127::-;21455:10;21450:3;21446:20;21443:1;21436:31;21486:4;21483:1;21476:15;21510:4;21507:1;21500:15;21526:128;21593:9;;;21614:11;;;21611:37;;;21628:18;;:::i;21995:127::-;22056:10;22051:3;22047:20;22044:1;22037:31;22087:4;22084:1;22077:15;22111:4;22108:1;22101:15;22127:521;22204:4;22210:6;22270:11;22257:25;22364:2;22360:7;22349:8;22333:14;22329:29;22325:43;22305:18;22301:68;22291:96;;22383:1;22380;22373:12;22291:96;22410:33;;22462:20;;;-1:-1:-1;;;;;;22494:30:62;;22491:50;;;22537:1;22534;22527:12;22491:50;22570:4;22558:17;;-1:-1:-1;22601:14:62;22597:27;;;22587:38;;22584:58;;;22638:1;22635;22628:12;22653:440;22882:6;22874;22869:3;22856:33;22838:3;22917:6;22912:3;22908:16;22944:1;22940:2;22933:13;22975:6;22969:13;22991:65;23049:6;23045:2;23038:4;23030:6;23026:17;22991:65;:::i;:::-;23072:15;;22653:440;-1:-1:-1;;;;;22653:440:62:o;23098:127::-;23159:10;23154:3;23150:20;23147:1;23140:31;23190:4;23187:1;23180:15;23214:4;23211:1;23204:15;23230:129;-1:-1:-1;;;;;23308:5:62;23304:30;23297:5;23294:41;23284:69;;23349:1;23346;23339:12;23364:1641;23450:6;23503:2;23491:9;23482:7;23478:23;23474:32;23471:52;;;23519:1;23516;23509:12;23471:52;23559:9;23546:23;-1:-1:-1;;;;;23584:6:62;23581:30;23578:50;;;23624:1;23621;23614:12;23578:50;23647:22;;23703:4;23685:16;;;23681:27;23678:47;;;23721:1;23718;23711:12;23678:47;23747:22;;:::i;:::-;23807:2;23794:16;-1:-1:-1;;;;;23825:8:62;23822:32;23819:52;;;23867:1;23864;23857:12;23819:52;23890:17;;23941:4;23923:16;;;23919:27;23916:47;;;23959:1;23956;23949:12;23916:47;23987:17;;:::i;:::-;24041:2;24028:16;24053:33;24078:7;24053:33;:::i;:::-;24095:24;;24164:2;24156:11;;24143:25;24177:33;24143:25;24177:33;:::i;:::-;24239:2;24226:16;;24219:33;24297:4;24289:13;;24276:27;24312:32;24276:27;24312:32;:::i;:::-;24373:4;24360:18;;24353:35;24433:2;24425:11;;24412:25;-1:-1:-1;;;;;24468:33:62;;24456:46;;24446:74;;24516:1;24513;24506:12;24446:74;24549:2;24536:16;;24529:33;24608:3;24600:12;;24587:26;-1:-1:-1;;;;;24625:32:62;;24622:52;;;24670:1;24667;24660:12;24622:52;24709:45;24746:7;24735:8;24731:2;24727:17;24709:45;:::i;:::-;24703:3;24690:17;;24683:72;-1:-1:-1;24764:22:62;;-1:-1:-1;24832:2:62;24824:11;;24811:25;-1:-1:-1;;;;;24848:32:62;;24845:52;;;24893:1;24890;24883:12;24845:52;24929:45;24966:7;24955:8;24951:2;24947:17;24929:45;:::i;:::-;24924:2;24913:14;;24906:69;-1:-1:-1;24917:5:62;23364:1641;-1:-1:-1;;;;23364:1641:62:o;25010:375::-;25086:6;25094;25147:2;25135:9;25126:7;25122:23;25118:32;25115:52;;;25163:1;25160;25153:12;25115:52;25202:9;25189:23;25221:31;25246:5;25221:31;:::i;:::-;25271:5;25349:2;25334:18;;;;25321:32;;-1:-1:-1;;;25010:375:62:o;25390:240::-;25474:1;25467:5;25464:12;25454:143;;25519:10;25514:3;25510:20;25507:1;25500:31;25554:4;25551:1;25544:15;25582:4;25579:1;25572:15;25454:143;25606:18;;25390:240::o;25635:214::-;25784:2;25769:18;;25796:47;25773:9;25825:6;25796:47;:::i;25854:346::-;25922:6;25930;25983:2;25971:9;25962:7;25958:23;25954:32;25951:52;;;25999:1;25996;25989:12;25951:52;-1:-1:-1;;26044:23:62;;;26164:2;26149:18;;;26136:32;;-1:-1:-1;25854:346:62:o;26653:705::-;26756:6;26764;26772;26780;26833:3;26821:9;26812:7;26808:23;26804:33;26801:53;;;26850:1;26847;26840:12;26801:53;26895:23;;;-1:-1:-1;27015:2:62;27000:18;;26987:32;;-1:-1:-1;27097:2:62;27082:18;;27069:32;27110:33;27069:32;27110:33;:::i;:::-;27162:7;-1:-1:-1;27220:2:62;27205:18;;27192:32;-1:-1:-1;;;;;27236:30:62;;27233:50;;;27279:1;27276;27269:12;27233:50;27302;27344:7;27335:6;27324:9;27320:22;27302:50;:::i;:::-;27292:60;;;26653:705;;;;;;;:::o;27363:136::-;27441:13;;27463:30;27441:13;27463:30;:::i;:::-;27363:136;;;:::o;27504:::-;27582:13;;27604:30;27582:13;27604:30;:::i;27645:1123::-;27742:6;27802:3;27790:9;27781:7;27777:23;27773:33;27818:2;27815:22;;;27833:1;27830;27823:12;27815:22;-1:-1:-1;27852:1:62;27875:22;;:::i;:::-;27943:16;;27968:22;;28057:2;28042:18;;;28036:25;28077:14;;;28070:31;28168:2;28153:18;;;28147:25;28188:14;;;28181:31;28244:48;28288:2;28273:18;;28244:48;:::i;:::-;28239:2;28232:5;28228:14;28221:72;28326:49;28370:3;28359:9;28355:19;28326:49;:::i;:::-;28320:3;28313:5;28309:15;28302:74;28409:49;28453:3;28442:9;28438:19;28409:49;:::i;:::-;28403:3;28396:5;28392:15;28385:74;28492:49;28536:3;28525:9;28521:19;28492:49;:::i;:::-;28486:3;28479:5;28475:15;28468:74;28575:49;28619:3;28608:9;28604:19;28575:49;:::i;:::-;28569:3;28558:15;;28551:74;28692:3;28677:19;;;28671:26;28713:15;;;28706:32;;;;-1:-1:-1;28562:5:62;;27645:1123;-1:-1:-1;;27645:1123:62:o;29069:230::-;29139:6;29192:2;29180:9;29171:7;29167:23;29163:32;29160:52;;;29208:1;29205;29198:12;29160:52;-1:-1:-1;29253:16:62;;29069:230;-1:-1:-1;29069:230:62:o;29304:249::-;29373:6;29426:2;29414:9;29405:7;29401:23;29397:32;29394:52;;;29442:1;29439;29432:12;29394:52;29474:9;29468:16;29493:30;29517:5;29493:30;:::i;29558:249::-;29627:6;29680:2;29668:9;29659:7;29655:23;29651:32;29648:52;;;29696:1;29693;29686:12;29648:52;29728:9;29722:16;29747:30;29771:5;29747:30;:::i;30091:125::-;30156:9;;;30177:10;;;30174:36;;;30190:18;;:::i;30221:287::-;30350:3;30388:6;30382:13;30404:66;30463:6;30458:3;30451:4;30443:6;30439:17;30404:66;:::i;:::-;30486:16;;;;;30221:287;-1:-1:-1;;30221:287:62:o;30513:259::-;30591:6;30644:2;30632:9;30623:7;30619:23;30615:32;30612:52;;;30660:1;30657;30650:12;30612:52;30692:9;30686:16;30711:31;30736:5;30711:31;:::i;30777:1067::-;30988:2;30977:9;30970:21;30951:4;31026:6;31020:13;31069:2;31064;31053:9;31049:18;31042:30;31151:1;31147;31142:3;31138:11;31134:19;31119:12;31113:19;31109:45;31103:3;31092:9;31088:19;31081:74;31246:1;31242;31237:3;31233:11;31229:19;31221:4;31207:12;31203:23;31197:30;31193:56;31186:4;31175:9;31171:20;31164:86;-1:-1:-1;;;;;31315:2:62;31301:12;31297:21;31291:28;31287:53;31281:3;31270:9;31266:19;31259:82;31431:1;31427;31422:3;31418:11;31414:19;31406:4;31392:12;31388:23;31382:30;31378:56;31372:3;31361:9;31357:19;31350:85;31490:3;31476:12;31472:22;31466:29;31444:51;;31532:4;31526:3;31515:9;31511:19;31504:33;31557:54;31606:3;31595:9;31591:19;31575:14;31557:54;:::i;:::-;31546:65;;31660:4;31652:6;31648:17;31642:24;31733:2;31729:7;31717:9;31712:3;31708:19;31704:33;31697:4;31686:9;31682:20;31675:63;31755:38;31789:3;31773:14;31755:38;:::i;:::-;31747:46;;;;31831:6;31824:4;31813:9;31809:20;31802:36;30777:1067;;;;;:::o;31849:326::-;32021:47;32058:9;32050:6;32021:47;:::i;:::-;32104:2;32099;32088:9;32084:18;32077:30;32002:4;32124:45;32165:2;32154:9;32150:18;32142:6;32124:45;:::i;32504:168::-;32577:9;;;32608;;32625:15;;;32619:22;;32605:37;32595:71;;32646:18;;:::i;32930:408::-;-1:-1:-1;;;;;33165:32:62;;;33147:51;;33234:32;;33229:2;33214:18;;33207:60;33135:2;33120:18;;33276:56;33328:2;33313:18;;33305:6;33276:56;:::i;33343:821::-;33445:6;33505:3;33493:9;33484:7;33480:23;33476:33;33521:2;33518:22;;;33536:1;33533;33526:12;33518:22;-1:-1:-1;33555:1:62;33578:17;;:::i;:::-;33641:16;;33666:22;;33755:2;33740:18;;;33734:25;33775:14;;;33768:31;33866:2;33851:18;;;33845:25;33886:14;;;33879:31;33977:2;33962:18;;;33956:25;33997:14;;;33990:31;34088:3;34073:19;;;34067:26;34109:15;;;34102:32;;;;-1:-1:-1;33673:5:62;;33343:821;-1:-1:-1;;33343:821:62:o;34169:371::-;-1:-1:-1;;;;;34389:32:62;;;34371:51;;34458:32;;;;34453:2;34438:18;;34431:60;34522:2;34507:18;;34500:34;;;;34359:2;34344:18;;34169:371::o;35389:433::-;35620:3;35609:9;35602:22;35583:4;35641:46;35682:3;35671:9;35667:19;35659:6;35641:46;:::i;:::-;35718:2;35703:18;;35696:34;;;;-1:-1:-1;35761:2:62;35746:18;;35739:34;;;;35804:2;35789:18;;;35782:34;35633:54;35389:433;-1:-1:-1;35389:433:62:o;35827:372::-;35914:6;35922;35975:2;35963:9;35954:7;35950:23;35946:32;35943:52;;;35991:1;35988;35981:12;35943:52;36036:16;;36121:2;36106:18;;36100:25;36036:16;;-1:-1:-1;36134:33:62;36100:25;36134:33;:::i;36483:136::-;36522:3;36550:5;36540:39;;36559:18;;:::i;:::-;-1:-1:-1;;;36595:18:62;;36483:136::o;36624:135::-;36663:3;36684:17;;;36681:43;;36704:18;;:::i;:::-;-1:-1:-1;36751:1:62;36740:13;;36624:135::o;36764:386::-;-1:-1:-1;;;;;36982:32:62;;;36964:51;;37051:32;;;;37046:2;37031:18;;37024:60;37132:10;37120:23;;;37115:2;37100:18;;37093:51;36952:2;36937:18;;36764:386::o;37155:217::-;37195:1;37221;37211:132;;37265:10;37260:3;37256:20;37253:1;37246:31;37300:4;37297:1;37290:15;37328:4;37325:1;37318:15;37211:132;-1:-1:-1;37357:9:62;;37155:217::o" - }, - "methodIdentifiers": { - "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", - "allocationProvisionTracker(address)": "6234e216", - "allocations(address)": "52a9039c", - "claims(bytes32)": "eff0f592", - "claimsLists(address)": "13c474c9", - "collect(address,uint8,bytes)": "b15d2a2c", - "curationFeesCut()": "138dea08", - "delegationRatio()": "bfdfa7af", - "eip712Domain()": "84b0196e", - "encodeAllocationProof(address,address)": "ce56c98b", - "feesProvisionTracker(address)": "cbe5f3f2", - "forceCloseAllocation(address)": "a827a90c", - "getAllocation(address)": "0e022923", - "getAllocationData(address)": "55c85269", - "getDelegationRatio()": "1ebb7c30", - "getLegacyAllocation(address)": "6d9a3951", - "getProvisionTokensRange()": "819ba366", - "getSubgraphAllocatedTokens(bytes32)": "e2e1e8e9", - "getThawingPeriodRange()": "71ce020a", - "getVerifierCutRange()": "482468b7", - "indexers(address)": "4f793cdc", - "initialize(uint256,uint32,uint256)": "1cafa218", - "isActiveAllocation(address)": "6a3ca383", - "isOverAllocated(address)": "ba38f67d", - "isStaleAllocation(address)": "3f0ed79d", - "legacyAllocations(address)": "93d4e7cb", - "maxPOIStaleness()": "85e82baf", - "maximumProvisionTokens()": "73371823", - "maximumThawingPeriod()": "9aafa5d1", - "maximumVerifierCut()": "9249c5c1", - "migrateLegacyAllocation(address,address,bytes32)": "7dfe6d28", - "minimumProvisionTokens()": "36fdd28a", - "minimumThawingPeriod()": "8d2f2948", - "minimumVerifierCut()": "88812583", - "multicall(bytes[])": "ac9650d8", - "owner()": "8da5cb5b", - "pause()": "8456cb59", - "pauseGuardians(address)": "9384e078", - "paused()": "5c975abb", - "register(address,bytes)": "24b8fbf6", - "releaseStake(uint256)": "45f54485", - "renounceOwnership()": "715018a6", - "resizeAllocation(address,address,uint256)": "81e777a7", - "rewardsDestination(address)": "7203ca78", - "setCurationCut(uint256)": "7e89bac3", - "setDelegationRatio(uint32)": "1dd42f60", - "setMaxPOIStaleness(uint256)": "7aa31bce", - "setMinimumProvisionTokens(uint256)": "832bc923", - "setPauseGuardian(address,bool)": "35577962", - "setRewardsDestination(address)": "772495c3", - "setStakeToFeesRatio(uint256)": "e6f50054", - "slash(address,bytes)": "cb8347fe", - "stakeToFeesRatio()": "d07a7a84", - "startService(address,bytes)": "dedf6726", - "stopService(address,bytes)": "8180083b", - "subgraphAllocatedTokens(bytes32)": "3afd23fe", - "transferOwnership(address)": "f2fde38b", - "unpause()": "3f4ba83a" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tapCollector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"curation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"}],\"name\":\"AllocationClosed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationManagerAllocationClosed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationManagerAllocationSameSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationManagerInvalidAllocationProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllocationManagerInvalidZeroAllocationId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"DataServiceFeesClaimNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataServiceFeesZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"DataServicePausableNotPauseGuardian\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"}],\"name\":\"DirectoryNotDisputeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationAlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListEmptyList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidIterations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListInvalidZeroId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedListMaxElementsExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"PPMMathInvalidMulPPM\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionManagerInvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ProvisionManagerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionManagerProvisionNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensAvailable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensRequired\",\"type\":\"uint256\"}],\"name\":\"ProvisionTrackerInsufficientTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceAllocationIsAltruistic\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceAllocationNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceCannotForceCloseAllocation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceEmptyGeohash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceEmptyUrl\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balanceBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"SubgraphServiceInconsistentCollection\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceIndexerAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"providedIndexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedIndexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceIndexerMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceIndexerNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"SubgraphServiceInvalidCurationCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"}],\"name\":\"SubgraphServiceInvalidPaymentType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ravIndexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationIndexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceInvalidRAV\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceInvalidZeroStakeToFeesRatio\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldTokens\",\"type\":\"uint256\"}],\"name\":\"AllocationResized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"CurationCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ratio\",\"type\":\"uint32\"}],\"name\":\"DelegationRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensIndexerRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDelegationRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"name\":\"IndexingRewardsCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"LegacyAllocationMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxPOIStaleness\",\"type\":\"uint256\"}],\"name\":\"MaxPOIStalenessSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"PauseGuardianSet\",\"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\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ProvisionTokensRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensCollected\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensCurators\",\"type\":\"uint256\"}],\"name\":\"QueryFeesCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardsDestination\",\"type\":\"address\"}],\"name\":\"RewardsDestinationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}],\"name\":\"StakeClaimLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"}],\"name\":\"StakeClaimReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"claimsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReleased\",\"type\":\"uint256\"}],\"name\":\"StakeClaimsReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"StakeToFeesRatioSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tapCollector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"curation\",\"type\":\"address\"}],\"name\":\"SubgraphServiceDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"ThawingPeriodRangeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"min\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"max\",\"type\":\"uint32\"}],\"name\":\"VerifierCutRangeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"allocationProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"allocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"claims\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nextClaim\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"claimsLists\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"head\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tail\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curationFeesCut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"encodeAllocationProof\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"feesProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"forceCloseAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"internalType\":\"struct Allocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocationData\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getLegacyAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"internalType\":\"struct LegacyAllocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"getSubgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"indexers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"registeredAt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geoHash\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumProvisionTokens\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"maximumDelegationRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"stakeToFeesRatio\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"isActiveAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"isOverAllocated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"isStaleAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"legacyAllocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPOIStaleness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentID\",\"type\":\"bytes32\"}],\"name\":\"migrateLegacyAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumProvisionTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumThawingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pauseGuardian\",\"type\":\"address\"}],\"name\":\"pauseGuardians\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numClaimsToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"resizeAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"setCurationCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"}],\"name\":\"setDelegationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxPOIStaleness\",\"type\":\"uint256\"}],\"name\":\"setMaxPOIStaleness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumProvisionTokens\",\"type\":\"uint256\"}],\"name\":\"setMinimumProvisionTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pauseGuardian\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setPauseGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardsDestination\",\"type\":\"address\"}],\"name\":\"setRewardsDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeToFeesRatio_\",\"type\":\"uint256\"}],\"name\":\"setStakeToFeesRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToFeesRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"custom:security-contact\":\"Please email security+contracts@thegraph.com if you find any bugs. We may have an active bug bounty program.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AllocationAlreadyExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"AllocationClosed(address,uint256)\":[{\"params\":{\"allocationId\":\"The allocation id\",\"closedAt\":\"The timestamp when the allocation was closed\"}}],\"AllocationDoesNotExist(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"AllocationManagerAllocationClosed(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"AllocationManagerAllocationSameSize(address,uint256)\":[{\"params\":{\"allocationId\":\"The id of the allocation\",\"tokens\":\"The amount of tokens\"}}],\"AllocationManagerInvalidAllocationProof(address,address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\",\"signer\":\"The address that signed the proof\"}}],\"DataServicePausableNotPauseGuardian(address)\":[{\"params\":{\"account\":\"The address of the pause guardian\"}}],\"DirectoryNotDisputeManager(address,address)\":[{\"params\":{\"caller\":\"The caller address\",\"disputeManager\":\"The Dispute Manager address\"}}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"LegacyAllocationAlreadyMigrated(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"LegacyAllocationExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"params\":{\"a\":\"The first value in the multiplication.\",\"b\":\"The second value in the multiplication.\"}}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"params\":{\"max\":\"The maximum value.\",\"min\":\"The minimum value.\"}}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"params\":{\"max\":\"The maximum allowed value.\",\"message\":\"The error message.\",\"min\":\"The minimum allowed value.\",\"value\":\"The value that is out of range.\"}}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"params\":{\"caller\":\"The address of the caller.\",\"serviceProvider\":\"The address of the serviceProvider.\"}}],\"ProvisionManagerProvisionNotFound(address)\":[{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}}],\"SubgraphServiceAllocationIsAltruistic(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"SubgraphServiceAllocationNotAuthorized(address,address)\":[{\"params\":{\"allocationId\":\"The id of the allocation.\",\"indexer\":\"The address of the expected indexer.\"}}],\"SubgraphServiceCannotForceCloseAllocation(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"SubgraphServiceInconsistentCollection(uint256,uint256,uint256)\":[{\"params\":{\"balanceAfter\":\"The contract GRT balance after the collection\",\"balanceBefore\":\"The contract GRT balance before the collection\",\"tokensDataService\":\"The amount of tokens sent to the subgraph service\"}}],\"SubgraphServiceIndexerMismatch(address,address)\":[{\"params\":{\"expectedIndexer\":\"The address of the expected indexer.\",\"providedIndexer\":\"The address of the provided indexer.\"}}],\"SubgraphServiceIndexerNotRegistered(address)\":[{\"params\":{\"indexer\":\"The address of the indexer that is not registered\"}}],\"SubgraphServiceInvalidCurationCut(uint256)\":[{\"params\":{\"curationCut\":\"The curation cut value\"}}],\"SubgraphServiceInvalidPaymentType(uint8)\":[{\"params\":{\"paymentType\":\"The payment type that is not supported\"}}],\"SubgraphServiceInvalidRAV(address,address)\":[{\"params\":{\"allocationIndexer\":\"The address of the allocation indexer\",\"ravIndexer\":\"The address of the RAV indexer\"}}]},\"events\":{\"AllocationClosed(address,address,bytes32,uint256)\":{\"details\":\"Emitted when an indexer closes an allocation\",\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokens\":\"The amount of tokens allocated\"}},\"AllocationCreated(address,address,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokens\":\"The amount of tokens allocated\"}},\"AllocationResized(address,address,bytes32,uint256,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"newTokens\":\"The new amount of tokens allocated\",\"oldTokens\":\"The old amount of tokens allocated\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"CurationCutSet(uint256)\":{\"params\":{\"curationCut\":\"The curation cut\"}},\"DelegationRatioSet(uint32)\":{\"params\":{\"ratio\":\"The delegation ratio\"}},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"IndexingRewardsCollected(address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"currentEpoch\":\"The current epoch\",\"indexer\":\"The address of the indexer\",\"poi\":\"The POI presented\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokensDelegationRewards\":\"The amount of tokens collected for delegators\",\"tokensIndexerRewards\":\"The amount of tokens collected for the indexer\",\"tokensRewards\":\"The amount of tokens collected\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"LegacyAllocationMigrated(address,address,bytes32)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"MaxPOIStalenessSet(uint256)\":{\"params\":{\"maxPOIStaleness\":\"The max POI staleness in seconds\"}},\"PauseGuardianSet(address,bool)\":{\"params\":{\"account\":\"The address of the pause guardian\",\"allowed\":\"The allowed status of the pause guardian\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"params\":{\"max\":\"The maximum allowed value for the provision tokens.\",\"min\":\"The minimum allowed value for the provision tokens.\"}},\"QueryFeesCollected(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokensCollected\":\"The amount of tokens collected\",\"tokensCurators\":\"The amount of tokens curators receive\"}},\"RewardsDestinationSet(address,address)\":{\"params\":{\"indexer\":\"The address of the indexer\",\"rewardsDestination\":\"The address where indexing rewards should be sent\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens to lock in the claim\",\"unlockTimestamp\":\"The timestamp when the tokens can be released\"}},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"releasableAt\":\"The timestamp when the tokens were released\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens released\"}},\"StakeClaimsReleased(address,uint256,uint256)\":{\"params\":{\"claimsCount\":\"The number of stake claims being released\",\"serviceProvider\":\"The address of the service provider\",\"tokensReleased\":\"The total amount of tokens being released\"}},\"StakeToFeesRatioSet(uint256)\":{\"params\":{\"ratio\":\"The stake to fees ratio\"}},\"SubgraphServiceDirectoryInitialized(address,address,address,address)\":{\"params\":{\"curation\":\"The Curation contract address\",\"disputeManager\":\"The Dispute Manager contract address\",\"subgraphService\":\"The Subgraph Service contract address\",\"tapCollector\":\"The TAP Collector contract address\"}},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"params\":{\"max\":\"The maximum allowed value for the thawing period.\",\"min\":\"The minimum allowed value for the thawing period.\"}},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"params\":{\"max\":\"The maximum allowed value for the max verifier cut.\",\"min\":\"The minimum allowed value for the max verifier cut.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Implements {IDataService-acceptProvisionPendingParameters} Requirements: - The indexer must be registered - Must have previously staged provision parameters, using {IHorizonStaking-setProvisionParameters} - The new provision parameters must be valid according to the subgraph service rules Emits a {ProvisionPendingParametersAccepted} event\",\"params\":{\"indexer\":\"The address of the indexer to accept the provision for\"}},\"collect(address,uint8,bytes)\":{\"details\":\"This function is the equivalent of the `collect` function for query fees and the `closeAllocation` function for indexing rewards in the legacy Staking contract. Requirements: - The indexer must be registered - The provision must be valid according to the subgraph service rules Emits a {ServicePaymentCollected} event. Emits payment type specific events. For query fees, see {SubgraphService-_collectQueryFees} for more details. For indexing rewards, see {AllocationManager-_collectIndexingRewards} for more details.\",\"params\":{\"data\":\"Encoded data to fulfill the payment. The structure of the data depends on the payment type. See above.\",\"indexer\":\"The address of the indexer\",\"paymentType\":\"The type of payment to collect as defined in {IGraphPayments}\"}},\"constructor\":{\"details\":\"DataService and Directory constructors set a bunch of immutable variables\",\"params\":{\"curation\":\"The address of the Curation contract\",\"disputeManager\":\"The address of the DisputeManager contract\",\"graphController\":\"The address of the Graph Controller contract\",\"tapCollector\":\"The address of the TAPCollector contract\"}},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getAllocationData(address)\":{\"details\":\"Implements {IRewardsIssuer.getAllocationData}Note that this is slightly different than {getAllocation}. It returns an unstructured subset of the allocation data, which is the minimum required to mint rewards. Should only be used by the {RewardsManager}.\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"_0\":\"indexer The indexer address\",\"_1\":\"subgraphDeploymentId Subgraph deployment id for the allocation\",\"_2\":\"tokens Amount of allocated tokens\",\"_3\":\"accRewardsPerAllocatedToken Rewards snapshot\"}},\"getSubgraphAllocatedTokens(bytes32)\":{\"details\":\"Implements {IRewardsIssuer.getSubgraphAllocatedTokens}To be used by the {RewardsManager}.\",\"params\":{\"subgraphDeploymentId\":\"Deployment Id for the subgraph\"},\"returns\":{\"_0\":\"Total tokens allocated to subgraph\"}},\"initialize(uint256,uint32,uint256)\":{\"details\":\"The thawingPeriod and verifierCut ranges are not set here because they are variables on the DisputeManager. We use the {ProvisionManager} overrideable getters to get the ranges.\",\"params\":{\"maximumDelegationRatio\":\"The maximum delegation ratio allowed for an allocation\",\"minimumProvisionTokens\":\"The minimum amount of provisioned tokens required to create an allocation\",\"stakeToFeesRatio\":\"The ratio of stake to fees to lock when collecting query fees\"}},\"isActiveAllocation(address)\":{\"details\":\"Implements {IRewardsIssuer.isAllocationActive}To be used by the {RewardsManager}.\",\"params\":{\"allocationId\":\"The allocation Id\"},\"returns\":{\"_0\":\"Wether or not the allocation is active\"}},\"multicall(bytes[])\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Receives and executes a batch of function calls on this contract.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"register(address,bytes)\":{\"params\":{\"data\":\"Encoded registration data: - address `url`: The URL of the indexer - string `geohash`: The geohash of the indexer - address `rewardsDestination`: The address where the indexer wants to receive indexing rewards. Use zero address for automatic reprovisioning to the subgraph service.\",\"indexer\":\"The address of the indexer to register\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"slash(address,bytes)\":{\"details\":\"Slashing is delegated to the {DisputeManager} contract which is the only one that can call this function. See {IHorizonStaking-slash} for more details. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Encoded data: - uint256 `tokens`: The amount of tokens to slash - uint256 `reward`: The amount of tokens to reward the slasher\",\"indexer\":\"The address of the indexer to be slashed\"}},\"startService(address,bytes)\":{\"details\":\"This is the equivalent of the `allocate` function in the legacy Staking contract. Requirements: - The indexer must be registered - The provision must be valid according to the subgraph service rules - Allocation id cannot be zero - Allocation id cannot be reused from the legacy staking contract - The indexer must have enough available tokens to allocate The `allocationProof` is a 65-bytes Ethereum signed message of `keccak256(indexerAddress,allocationId)`. See {AllocationManager-allocate} for more details. Emits {ServiceStarted} and {AllocationCreated} events\",\"params\":{\"data\":\"Encoded data: - bytes32 `subgraphDeploymentId`: The id of the subgraph deployment - uint256 `tokens`: The amount of tokens to allocate - address `allocationId`: The id of the allocation - bytes `allocationProof`: Signed proof of the allocation id address ownership\",\"indexer\":\"The address of the indexer\"}},\"stopService(address,bytes)\":{\"details\":\"This is the equivalent of the `closeAllocation` function in the legacy Staking contract. There are a few notable differences with the legacy function: - allocations are nowlong lived. All service payments, including indexing rewards, should be collected periodically without the need of closing the allocation. Allocations should only be closed when indexers want to reclaim the allocated tokens for other purposes. - No POI is required to close an allocation. Indexers should present POIs to collect indexing rewards using {collect}. Requirements: - The indexer must be registered - Allocation must exist and be open Emits {ServiceStopped} and {AllocationClosed} events\",\"params\":{\"data\":\"Encoded data: - address `allocationId`: The id of the allocation\",\"indexer\":\"The address of the indexer\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"SubgraphService contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AllocationAlreadyExists(address)\":[{\"notice\":\"Thrown when attempting to create an allocation with an existing id\"}],\"AllocationClosed(address,uint256)\":[{\"notice\":\"Thrown when trying to perform an operation on a closed allocation\"}],\"AllocationDoesNotExist(address)\":[{\"notice\":\"Thrown when trying to perform an operation on a non-existent allocation\"}],\"AllocationManagerAllocationClosed(address)\":[{\"notice\":\"Thrown when attempting to collect indexing rewards on a closed allocationl\"}],\"AllocationManagerAllocationSameSize(address,uint256)\":[{\"notice\":\"Thrown when attempting to resize an allocation with the same size\"}],\"AllocationManagerInvalidAllocationProof(address,address)\":[{\"notice\":\"Thrown when an allocation proof is invalid Both `signer` and `allocationId` should match for a valid proof.\"}],\"AllocationManagerInvalidZeroAllocationId()\":[{\"notice\":\"Thrown when attempting to create an allocation with a zero allocation id\"}],\"DataServiceFeesClaimNotFound(bytes32)\":[{\"notice\":\"Thrown when attempting to get a stake claim that does not exist.\"}],\"DataServiceFeesZeroTokens()\":[{\"notice\":\"Emitted when trying to lock zero tokens in a stake claim\"}],\"DataServicePausableNotPauseGuardian(address)\":[{\"notice\":\"Emitted when a the caller is not a pause guardian\"}],\"DirectoryNotDisputeManager(address,address)\":[{\"notice\":\"Thrown when the caller is not the Dispute Manager\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}],\"LegacyAllocationAlreadyMigrated(address)\":[{\"notice\":\"Thrown when trying to migrate an allocation that has already been migrated\"}],\"LegacyAllocationExists(address)\":[{\"notice\":\"Thrown when attempting to migrate an allocation with an existing id\"}],\"LinkedListEmptyList()\":[{\"notice\":\"Thrown when trying to remove an item from an empty list\"}],\"LinkedListInvalidIterations()\":[{\"notice\":\"Thrown when trying to traverse a list with more iterations than elements\"}],\"LinkedListInvalidZeroId()\":[{\"notice\":\"Thrown when trying to add an item with id equal to bytes32(0)\"}],\"LinkedListMaxElementsExceeded()\":[{\"notice\":\"Thrown when trying to add an item to a list that has reached the maximum number of elements\"}],\"PPMMathInvalidMulPPM(uint256,uint256)\":[{\"notice\":\"Thrown when no value in a multiplication is in PPM.\"}],\"ProvisionManagerInvalidRange(uint256,uint256)\":[{\"notice\":\"Thrown when attempting to set a range where min is greater than max.\"}],\"ProvisionManagerInvalidValue(bytes,uint256,uint256,uint256)\":[{\"notice\":\"Thrown when a provision parameter is out of range.\"}],\"ProvisionManagerNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the caller is not authorized to manage the provision of a service provider.\"}],\"ProvisionManagerProvisionNotFound(address)\":[{\"notice\":\"Thrown when a provision is not found.\"}],\"ProvisionTrackerInsufficientTokens(uint256,uint256)\":[{\"notice\":\"Thrown when trying to lock more tokens than available\"}],\"SubgraphServiceAllocationIsAltruistic(address)\":[{\"notice\":\"Thrown when trying to force close an altruistic allocation\"}],\"SubgraphServiceAllocationNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the indexer in the allocation state does not match the expected indexer.\"}],\"SubgraphServiceCannotForceCloseAllocation(address)\":[{\"notice\":\"Thrown when trying to force close an allocation that is not stale and the indexer is not over-allocated\"}],\"SubgraphServiceEmptyGeohash()\":[{\"notice\":\"Thrown when an indexer tries to register with an empty geohash\"}],\"SubgraphServiceEmptyUrl()\":[{\"notice\":\"Thrown when an indexer tries to register with an empty URL\"}],\"SubgraphServiceInconsistentCollection(uint256,uint256,uint256)\":[{\"notice\":\"Thrown when the contract GRT balance is inconsistent with the payment amount collected from Graph Payments\"}],\"SubgraphServiceIndexerAlreadyRegistered()\":[{\"notice\":\"Thrown when an indexer tries to register but they are already registered\"}],\"SubgraphServiceIndexerMismatch(address,address)\":[{\"notice\":\"@notice Thrown when the service provider in the RAV does not match the expected indexer.\"}],\"SubgraphServiceIndexerNotRegistered(address)\":[{\"notice\":\"Thrown when an indexer tries to perform an operation but they are not registered\"}],\"SubgraphServiceInvalidCurationCut(uint256)\":[{\"notice\":\"Thrown when trying to set a curation cut that is not a valid PPM value\"}],\"SubgraphServiceInvalidPaymentType(uint8)\":[{\"notice\":\"Thrown when an indexer tries to collect fees for an unsupported payment type\"}],\"SubgraphServiceInvalidRAV(address,address)\":[{\"notice\":\"Thrown when collecting a RAV where the RAV indexer is not the same as the allocation indexer\"}],\"SubgraphServiceInvalidZeroStakeToFeesRatio()\":[{\"notice\":\"Thrown when trying to set stake to fees ratio to zero\"}]},\"events\":{\"AllocationCreated(address,address,bytes32,uint256)\":{\"notice\":\"Emitted when an indexer creates an allocation\"},\"AllocationResized(address,address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when an indexer resizes an allocation\"},\"CurationCutSet(uint256)\":{\"notice\":\"Emitted when curator cuts are set\"},\"DelegationRatioSet(uint32)\":{\"notice\":\"Emitted when the delegation ratio is set.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"IndexingRewardsCollected(address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)\":{\"notice\":\"Emitted when an indexer collects indexing rewards for an allocation\"},\"LegacyAllocationMigrated(address,address,bytes32)\":{\"notice\":\"Emitted when a legacy allocation is migrated into the subgraph service\"},\"MaxPOIStalenessSet(uint256)\":{\"notice\":\"Emitted when the maximum POI staleness is updated\"},\"PauseGuardianSet(address,bool)\":{\"notice\":\"Emitted when a pause guardian is set.\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"ProvisionTokensRangeSet(uint256,uint256)\":{\"notice\":\"Emitted when the provision tokens range is set.\"},\"QueryFeesCollected(address,uint256,uint256)\":{\"notice\":\"Emitted when a subgraph service collects query fees from Graph Payments\"},\"RewardsDestinationSet(address,address)\":{\"notice\":\"Emitted when an indexer sets a new indexing rewards destination\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is created and stake is locked.\"},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is released and stake is unlocked.\"},\"StakeClaimsReleased(address,uint256,uint256)\":{\"notice\":\"Emitted when a series of stake claims are released.\"},\"StakeToFeesRatioSet(uint256)\":{\"notice\":\"Emitted when the stake to fees ratio is set.\"},\"SubgraphServiceDirectoryInitialized(address,address,address,address)\":{\"notice\":\"Emitted when the Directory is initialized\"},\"ThawingPeriodRangeSet(uint64,uint64)\":{\"notice\":\"Emitted when the thawing period range is set.\"},\"VerifierCutRangeSet(uint32,uint32)\":{\"notice\":\"Emitted when the verifier cut range is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accept staged parameters in the provision of a service provider\"},\"allocationProvisionTracker(address)\":{\"notice\":\"Tracks allocated tokens per indexer\"},\"allocations(address)\":{\"notice\":\"Allocation details\"},\"claims(bytes32)\":{\"notice\":\"List of all locked stake claims to be released to service providers\"},\"claimsLists(address)\":{\"notice\":\"Service providers registered in the data service\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment for the service provided by the indexer Allows collecting different types of payments such as query fees and indexing rewards. It uses Graph Horizon payments protocol to process payments. Reverts if the payment type is not supported.\"},\"constructor\":{\"notice\":\"Constructor for the SubgraphService contract\"},\"curationFeesCut()\":{\"notice\":\"The cut curators take from query fee payments\"},\"delegationRatio()\":{\"notice\":\"How much delegation the service provider can effectively use\"},\"encodeAllocationProof(address,address)\":{\"notice\":\"See {ISubgraphService.encodeAllocationProof}\"},\"forceCloseAllocation(address)\":{\"notice\":\"See {ISubgraphService.closeStaleAllocation}\"},\"getAllocation(address)\":{\"notice\":\"See {ISubgraphService.getAllocation}\"},\"getAllocationData(address)\":{\"notice\":\"Get allocation data to calculate rewards issuance\"},\"getDelegationRatio()\":{\"notice\":\"See {IDataService-getDelegationRatio}.\"},\"getLegacyAllocation(address)\":{\"notice\":\"See {ISubgraphService.getLegacyAllocation}\"},\"getProvisionTokensRange()\":{\"notice\":\"See {IDataService-getProvisionTokensRange}.\"},\"getSubgraphAllocatedTokens(bytes32)\":{\"notice\":\"Return the total amount of tokens allocated to subgraph.\"},\"getThawingPeriodRange()\":{\"notice\":\"See {IDataService-getThawingPeriodRange}.\"},\"getVerifierCutRange()\":{\"notice\":\"See {IDataService-getVerifierCutRange}.\"},\"indexers(address)\":{\"notice\":\"Service providers registered in the data service\"},\"initialize(uint256,uint32,uint256)\":{\"notice\":\"Initialize the contract\"},\"isActiveAllocation(address)\":{\"notice\":\"Check if an allocation is open\"},\"isOverAllocated(address)\":{\"notice\":\"See {ISubgraphService.isOverAllocated}\"},\"isStaleAllocation(address)\":{\"notice\":\"See {ISubgraphService.isStaleAllocation}\"},\"legacyAllocations(address)\":{\"notice\":\"Legacy allocation details\"},\"maxPOIStaleness()\":{\"notice\":\"Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\"},\"maximumProvisionTokens()\":{\"notice\":\"The maximum amount of tokens allowed to register a provision in the data service\"},\"maximumThawingPeriod()\":{\"notice\":\"The maximum thawing period allowed to register a provision in the data service\"},\"maximumVerifierCut()\":{\"notice\":\"The maximum verifier cut allowed to register a provision in the data service (in PPM)\"},\"migrateLegacyAllocation(address,address,bytes32)\":{\"notice\":\"See {ISubgraphService.migrateLegacyAllocation}\"},\"minimumProvisionTokens()\":{\"notice\":\"The minimum amount of tokens required to register a provision in the data service\"},\"minimumThawingPeriod()\":{\"notice\":\"The minimum thawing period required to register a provision in the data service\"},\"minimumVerifierCut()\":{\"notice\":\"The minimum verifier cut required to register a provision in the data service (in PPM)\"},\"pause()\":{\"notice\":\"See {IDataServicePausable-pause}\"},\"pauseGuardians(address)\":{\"notice\":\"List of pause guardians and their allowed status\"},\"register(address,bytes)\":{\"notice\":\"@dev Implements {IDataService.register} Requirements: - The indexer must not be already registered - The URL must not be empty - The provision must be valid according to the subgraph service rules Emits a {ServiceProviderRegistered} event\"},\"releaseStake(uint256)\":{\"notice\":\"See {IDataServiceFees-releaseStake}\"},\"resizeAllocation(address,address,uint256)\":{\"notice\":\"See {ISubgraphService.resizeAllocation}\"},\"rewardsDestination(address)\":{\"notice\":\"Destination of accrued indexing rewards\"},\"setCurationCut(uint256)\":{\"notice\":\"See {ISubgraphService.setCurationCut}\"},\"setDelegationRatio(uint32)\":{\"notice\":\"See {ISubgraphService.setDelegationRatio}\"},\"setMaxPOIStaleness(uint256)\":{\"notice\":\"See {ISubgraphService.setMaxPOIStaleness}\"},\"setMinimumProvisionTokens(uint256)\":{\"notice\":\"See {ISubgraphService.setMinimumProvisionTokens}\"},\"setPauseGuardian(address,bool)\":{\"notice\":\"See {ISubgraphService.setPauseGuardian}\"},\"setRewardsDestination(address)\":{\"notice\":\"See {ISubgraphService.setRewardsDestination}\"},\"setStakeToFeesRatio(uint256)\":{\"notice\":\"See {ISubgraphService.setStakeToFeesRatio}\"},\"slash(address,bytes)\":{\"notice\":\"Slash an indexer\"},\"stakeToFeesRatio()\":{\"notice\":\"Multiplier for how many tokens back collected query fees\"},\"startService(address,bytes)\":{\"notice\":\"Allocates tokens to subgraph deployment, manifesting the indexer's commitment to index it\"},\"stopService(address,bytes)\":{\"notice\":\"Close an allocation, indicating that the indexer has stopped indexing the subgraph deployment\"},\"subgraphAllocatedTokens(bytes32)\":{\"notice\":\"Track total tokens allocated per subgraph deployment\"},\"unpause()\":{\"notice\":\"See {IDataServicePausable-pause}\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SubgraphService.sol\":\"SubgraphService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":{\"keccak256\":\"0x7bd336193785ed6f09a3bd847f9208f64aa9b87ad67c40838d00fec41bb153d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d96d83cdb9bbb567e4eafac8bdef3ff6bdaf426338baf76bae277c11afb33cee\",\"dweb:/ipfs/QmNjr4PiJ76Wc5mFqa9H88BjsEMrUfy1jiftNHYTgd6Mp5\"]},\"@graphprotocol/horizon/contracts/data-service/DataService.sol\":{\"keccak256\":\"0x72d1f60db2ba0d65de99869a98ee0ae43dab30a474415c3ee349458b71f97439\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f59f760342a177e107bd1323ad62a0346d2845ea49554380d625107aafd69a30\",\"dweb:/ipfs/QmaovA9tVpp3yS3KtWqsRQwWK5TNyJeF1BZFuTFR6mhCiL\"]},\"@graphprotocol/horizon/contracts/data-service/DataServiceStorage.sol\":{\"keccak256\":\"0xc291c4f4cd273f7aa4e664843207032c0cb85454c9af834940c982073309eab6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6bf8640abd32f4b2f0700cf5fa04e22926401e7381b92e45b776b4b8cdf27219\",\"dweb:/ipfs/QmaGnVYjXx34sJw6xoLqM2Xtz8gCSiEUGKTajd5cvrmgoC\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol\":{\"keccak256\":\"0x136536e55b4a7ee042b368f32e771e6fe5aa512d89e3eb3e53bc65133a61ec7e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4cd6aa727129b4d30db958f0fb814fe9313da691340af3998baa283bd0c0d3a4\",\"dweb:/ipfs/QmZfakV8Gemw3o6SLQJjZ3m4gYkaFi4VMuQ5jnDJzyhia4\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol\":{\"keccak256\":\"0xfc2ead98c0a29cf14523745ccb07cbd568ba3299bffe5f9c3bec9dad7bf00562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a27545f89d99c54e8acd01d510b31e97500c75a4ace58f2986ab01eb1f0ff13\",\"dweb:/ipfs/QmeBPV1QfdTM6M9q478k512hKSr7kWsKwfEESdDimHQaoH\"]},\"@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol\":{\"keccak256\":\"0xbb8e8d819d97570ccdcd5a6fafd8c43880016f71f6ce1eb4a2f260a1eaf6da5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9f72b98fb9e707e88da2bd496102f0142e55a614c1b65319d4a09ee28b73f227\",\"dweb:/ipfs/Qma93cnXPBKf8qoVbWnQpKiffPwpzE837WncTo3Mx3v42H\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServicePausable.sol\":{\"keccak256\":\"0xdf6f1f87857eaa5824747e81aed89f11d52e34400077d341f66165631772ccd2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5fd53c4e7571f1efe15ef3fdf291cec2cb282f5a617c8986eae00f56741b4c6\",\"dweb:/ipfs/QmX1WQNc5XJDgDT6aEv779DAgWzY7Uby8obF2Fey3m1WnE\"]},\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":{\"keccak256\":\"0x9012127a1b1dc8a3f75ad49925632faecca8bcb46f42ab7d1ac0af83a7514f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b002f1f6759e7ced37f161706bc4b787ba7534fb4326ae7ab395270926292c42\",\"dweb:/ipfs/QmRVDPWMbrijk14sywXTbnKdueVBgADBB7h8F9aGA4DgSZ\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol\":{\"keccak256\":\"0xd26e1eb1b0702f856f8489c4f5548644598a502221beece2f87ac4d01af9a609\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69c3c34019e752bb6562c1b6709fcfd6958eb036ebe07b5c3c63ec47b4a17efc\",\"dweb:/ipfs/QmeKJuzv9Kb5TPBzpi2SoWwmPpn3Y9v3MR1g7hXoFJcwAG\"]},\"@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol\":{\"keccak256\":\"0x256512546eedbc0a954815735a5bd6d8832c465a3ce0bdc4959a6dcca3ea24ac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bcd9acb66c3153a5d38888ef17a798659bae9938e998e6597fcfb8f666bd3e50\",\"dweb:/ipfs/QmfTQt588Zon3AhR1PxhkHGL8xGw5JC7DAepTLDXeMWWA1\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":{\"keccak256\":\"0x86f3cfc8eaac309e99018dda796248fb44130b09c2e5bcfc6c63c0e568803bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://176a017cb5c677222ac6a82fecd798292f5f41b4dcb9e16768fbf87816381010\",\"dweb:/ipfs/QmNuLfA5nZptMzWPuvDzJnm7Pwt7uYn1A7G8fwTWPy5Ybm\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\":{\"keccak256\":\"0xa5a882c413c68bfe914bad5e419c0340d7d6a6aef453894ea10b7b96458932bc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5dfc1a11d94b22db5a9262b7038c2fb9c69616f47a11507f59efcc5aa1dcf9b\",\"dweb:/ipfs/QmQ8ahkkfm8PXTuZc5Q8zX2RzXHoSi9btYc57KMvtCrLMU\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/libraries/UintRange.sol\":{\"keccak256\":\"0x3389a6fae8651820ced92bdc06b7168280055ea65467ac094c5c3fd950700820\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2e3756bebea135066625cba99d4d608ca1770a21abfd3cfbc05a3e1b280c688b\",\"dweb:/ipfs/QmQeebmsKNQqKpGKYPEyJqrpF3ZjP71udwPgoGEdTfvTSb\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol\":{\"keccak256\":\"0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300\",\"dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/SubgraphService.sol\":{\"keccak256\":\"0x432feb6e60a2757391aea8457b5d941c87b26f82223ace7147061591215ddb58\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://231d2a5eef41ee638f7a703c83f8c772e89035c40e1573732c1c2105b517ba52\",\"dweb:/ipfs/QmRH2SLFMeg6vvwPJyo2cfi18HJMZhv7m28PffitFaHa5o\"]},\"contracts/SubgraphServiceStorage.sol\":{\"keccak256\":\"0xd65d4e68881be74d04902e73d3434103a6250367d6f32acdca0ad984064a6f24\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f6adf65148f3a7241be65927f0a721e0646f469bc7fbb3b1c5a41e117539c822\",\"dweb:/ipfs/QmVWGLJRrFnpAPTNW8429KSHNbfMC93sHFHp2UopiQ6Pun\"]},\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/AllocationManager.sol\":{\"keccak256\":\"0xc24b976ce48a98b22cc22c50cc704ec2f5624e753d8cc2a16ede76109345624e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://009aee0ceb4cb423d389a2dad841e9ba39845d0385d507aca47fd49680de3908\",\"dweb:/ipfs/QmXnSEpeFmN6zbbuUJ1w37Sjhgag3h7vjZLi819BdtTUeF\"]},\"contracts/utilities/AllocationManagerStorage.sol\":{\"keccak256\":\"0x4e5f682e3c67a101ddefb795d43f27ef5ed9b458dc348b85e4f2290c01cf48a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dd557b9537c581bbb4bcb5843c03289cf9101236790e33e206621068ff4431b7\",\"dweb:/ipfs/QmcmDDBuGnrNmud7oS79FRsLwb88Ebkqxg8Ws3vQSSs8xQ\"]},\"contracts/utilities/Directory.sol\":{\"keccak256\":\"0xad65e3c6e8ddcb2855c9fbb689d538c3709bda1b7b08f665bc7a9e905e6a9ef4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ae2fbea52fc9b412dc333d74d0984a458da80cc98defdd86bc6a9f31633df56\",\"dweb:/ipfs/QmatwUHznJRo9wvA9ggG4UZVWprdUtAeBmx7T5vDU8vBx9\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 2134, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "minimumProvisionTokens", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 2137, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "maximumProvisionTokens", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2140, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "minimumThawingPeriod", - "offset": 0, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2143, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "maximumThawingPeriod", - "offset": 8, - "slot": "2", - "type": "t_uint64" - }, - { - "astId": 2146, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "minimumVerifierCut", - "offset": 16, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2149, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "maximumVerifierCut", - "offset": 20, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2152, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "delegationRatio", - "offset": 24, - "slot": "2", - "type": "t_uint32" - }, - { - "astId": 2157, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "__gap", - "offset": 0, - "slot": "3", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 703, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "__gap", - "offset": 0, - "slot": "53", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 1101, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "pauseGuardians", - "offset": 0, - "slot": "103", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 1063, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "feesProvisionTracker", - "offset": 0, - "slot": "104", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 1069, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "claims", - "offset": 0, - "slot": "105", - "type": "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)" - }, - { - "astId": 1075, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "claimsLists", - "offset": 0, - "slot": "106", - "type": "t_mapping(t_address,t_struct(List)3813_storage)" - }, - { - "astId": 1080, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "__gap", - "offset": 0, - "slot": "107", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 13042, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "allocations", - "offset": 0, - "slot": "157", - "type": "t_mapping(t_address,t_struct(State)11307_storage)" - }, - { - "astId": 13048, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "legacyAllocations", - "offset": 0, - "slot": "158", - "type": "t_mapping(t_address,t_struct(State)11933_storage)" - }, - { - "astId": 13053, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "allocationProvisionTracker", - "offset": 0, - "slot": "159", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 13056, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "maxPOIStaleness", - "offset": 0, - "slot": "160", - "type": "t_uint256" - }, - { - "astId": 13061, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "rewardsDestination", - "offset": 0, - "slot": "161", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 13066, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "subgraphAllocatedTokens", - "offset": 0, - "slot": "162", - "type": "t_mapping(t_bytes32,t_uint256)" - }, - { - "astId": 13071, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "__gap", - "offset": 0, - "slot": "163", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 10694, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "indexers", - "offset": 0, - "slot": "213", - "type": "t_mapping(t_address,t_struct(Indexer)11078_storage)" - }, - { - "astId": 10697, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "stakeToFeesRatio", - "offset": 0, - "slot": "214", - "type": "t_uint256" - }, - { - "astId": 10700, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "curationFeesCut", - "offset": 0, - "slot": "215", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_struct(Indexer)11078_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct ISubgraphService.Indexer)", - "numberOfBytes": "32", - "value": "t_struct(Indexer)11078_storage" - }, - "t_mapping(t_address,t_struct(List)3813_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LinkedList.List)", - "numberOfBytes": "32", - "value": "t_struct(List)3813_storage" - }, - "t_mapping(t_address,t_struct(State)11307_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct Allocation.State)", - "numberOfBytes": "32", - "value": "t_struct(State)11307_storage" - }, - "t_mapping(t_address,t_struct(State)11933_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LegacyAllocation.State)", - "numberOfBytes": "32", - "value": "t_struct(State)11933_storage" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_bytes32,t_struct(StakeClaim)1335_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct IDataServiceFees.StakeClaim)", - "numberOfBytes": "32", - "value": "t_struct(StakeClaim)1335_storage" - }, - "t_mapping(t_bytes32,t_uint256)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Indexer)11078_storage": { - "encoding": "inplace", - "label": "struct ISubgraphService.Indexer", - "members": [ - { - "astId": 11073, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "registeredAt", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 11075, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "url", - "offset": 0, - "slot": "1", - "type": "t_string_storage" - }, - { - "astId": 11077, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "geoHash", - "offset": 0, - "slot": "2", - "type": "t_string_storage" - } - ], - "numberOfBytes": "96" - }, - "t_struct(List)3813_storage": { - "encoding": "inplace", - "label": "struct LinkedList.List", - "members": [ - { - "astId": 3806, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "head", - "offset": 0, - "slot": "0", - "type": "t_bytes32" - }, - { - "astId": 3808, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "tail", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 3810, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "nonce", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 3812, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "count", - "offset": 0, - "slot": "3", - "type": "t_uint256" - } - ], - "numberOfBytes": "128" - }, - "t_struct(StakeClaim)1335_storage": { - "encoding": "inplace", - "label": "struct IDataServiceFees.StakeClaim", - "members": [ - { - "astId": 1328, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "tokens", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 1330, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "createdAt", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 1332, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "releasableAt", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 1334, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "nextClaim", - "offset": 0, - "slot": "3", - "type": "t_bytes32" - } - ], - "numberOfBytes": "128" - }, - "t_struct(State)11307_storage": { - "encoding": "inplace", - "label": "struct Allocation.State", - "members": [ - { - "astId": 11292, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "indexer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 11294, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "subgraphDeploymentId", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 11296, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "tokens", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 11298, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "createdAt", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 11300, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "closedAt", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 11302, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "lastPOIPresentedAt", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 11304, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "accRewardsPerAllocatedToken", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 11306, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "accRewardsPending", - "offset": 0, - "slot": "7", - "type": "t_uint256" - } - ], - "numberOfBytes": "256" - }, - "t_struct(State)11933_storage": { - "encoding": "inplace", - "label": "struct LegacyAllocation.State", - "members": [ - { - "astId": 11930, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "indexer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 11932, - "contract": "contracts/SubgraphService.sol:SubgraphService", - "label": "subgraphDeploymentId", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - } - } - } - } - }, - "contracts/SubgraphServiceStorage.sol": { - "SubgraphServiceV1Storage": { - "abi": [ - { - "inputs": [], - "name": "curationFeesCut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "indexers", - "outputs": [ - { - "internalType": "uint256", - "name": "registeredAt", - "type": "uint256" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "geoHash", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stakeToFeesRatio", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "curationFeesCut()": "138dea08", - "indexers(address)": "4f793cdc", - "stakeToFeesRatio()": "d07a7a84" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"curationFeesCut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"indexers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"registeredAt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"geoHash\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToFeesRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"curationFeesCut()\":{\"notice\":\"The cut curators take from query fee payments\"},\"indexers(address)\":{\"notice\":\"Service providers registered in the data service\"},\"stakeToFeesRatio()\":{\"notice\":\"Multiplier for how many tokens back collected query fees\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SubgraphServiceStorage.sol\":\"SubgraphServiceV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/SubgraphServiceStorage.sol\":{\"keccak256\":\"0xd65d4e68881be74d04902e73d3434103a6250367d6f32acdca0ad984064a6f24\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f6adf65148f3a7241be65927f0a721e0646f469bc7fbb3b1c5a41e117539c822\",\"dweb:/ipfs/QmVWGLJRrFnpAPTNW8429KSHNbfMC93sHFHp2UopiQ6Pun\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 10694, - "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", - "label": "indexers", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_struct(Indexer)11078_storage)" - }, - { - "astId": 10697, - "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", - "label": "stakeToFeesRatio", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 10700, - "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", - "label": "curationFeesCut", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_struct(Indexer)11078_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct ISubgraphService.Indexer)", - "numberOfBytes": "32", - "value": "t_struct(Indexer)11078_storage" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Indexer)11078_storage": { - "encoding": "inplace", - "label": "struct ISubgraphService.Indexer", - "members": [ - { - "astId": 11073, - "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", - "label": "registeredAt", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 11075, - "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", - "label": "url", - "offset": 0, - "slot": "1", - "type": "t_string_storage" - }, - { - "astId": 11077, - "contract": "contracts/SubgraphServiceStorage.sol:SubgraphServiceV1Storage", - "label": "geoHash", - "offset": 0, - "slot": "2", - "type": "t_string_storage" - } - ], - "numberOfBytes": "96" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } - } - }, - "contracts/interfaces/IDisputeManager.sol": { - "IDisputeManager": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerDisputeAlreadyCreated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum IDisputeManager.DisputeStatus", - "name": "status", - "type": "uint8" - } - ], - "name": "DisputeManagerDisputeNotPending", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerDisputePeriodNotFinished", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerDisputePeriodZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "DisputeManagerIndexerNotFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerInvalidDispute", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "DisputeManagerInvalidDisputeDeposit", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "cut", - "type": "uint32" - } - ], - "name": "DisputeManagerInvalidFishermanReward", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxSlashingCut", - "type": "uint32" - } - ], - "name": "DisputeManagerInvalidMaxSlashingCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokensSlash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxTokensSlash", - "type": "uint256" - } - ], - "name": "DisputeManagerInvalidTokensSlash", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "relatedDisputeId", - "type": "bytes32" - } - ], - "name": "DisputeManagerMustAcceptRelatedDispute", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "requestCID1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "requestCID2", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID2", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId2", - "type": "bytes32" - } - ], - "name": "DisputeManagerNonConflictingAttestations", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId1", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId2", - "type": "bytes32" - } - ], - "name": "DisputeManagerNonMatchingSubgraphDeployment", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerNotArbitrator", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerNotFisherman", - "type": "error" - }, - { - "inputs": [], - "name": "DisputeManagerZeroTokens", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "arbitrator", - "type": "address" - } - ], - "name": "ArbitratorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "DisputeDepositSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeDrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId1", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId2", - "type": "bytes32" - } - ], - "name": "DisputeLinked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - } - ], - "name": "DisputePeriodSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "DisputeRejected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "fishermanRewardCut", - "type": "uint32" - } - ], - "name": "FishermanRewardCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "name": "IndexingDisputeCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "maxSlashingCut", - "type": "uint32" - } - ], - "name": "MaxSlashingCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fisherman", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "attestation", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeSnapshot", - "type": "uint256" - } - ], - "name": "QueryDisputeCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "subgraphService", - "type": "address" - } - ], - "name": "SubgraphServiceSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokensSlash", - "type": "uint256" - } - ], - "name": "acceptDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation2", - "type": "tuple" - } - ], - "name": "areConflictingAttestations", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "cancelDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - } - ], - "name": "createIndexingDispute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "attestationData", - "type": "bytes" - } - ], - "name": "createQueryDispute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "attestationData1", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "attestationData2", - "type": "bytes" - } - ], - "name": "createQueryDisputeConflict", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "drawDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "internalType": "struct Attestation.Receipt", - "name": "receipt", - "type": "tuple" - } - ], - "name": "encodeReceipt", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "requestCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "responseCID", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - } - ], - "internalType": "struct Attestation.State", - "name": "attestation", - "type": "tuple" - } - ], - "name": "getAttestationIndexer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDisputePeriod", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "getStakeSnapshot", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCut", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "isDisputeCreated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "disputeId", - "type": "bytes32" - } - ], - "name": "rejectDispute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "arbitrator", - "type": "address" - } - ], - "name": "setArbitrator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "disputeDeposit", - "type": "uint256" - } - ], - "name": "setDisputeDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "disputePeriod", - "type": "uint64" - } - ], - "name": "setDisputePeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "cut", - "type": "uint32" - } - ], - "name": "setFishermanRewardCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "maxCut", - "type": "uint32" - } - ], - "name": "setMaxSlashingCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "subgraphService", - "type": "address" - } - ], - "name": "setSubgraphService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "acceptDispute(bytes32,uint256)": "050b17ad", - "areConflictingAttestations((bytes32,bytes32,bytes32,bytes32,bytes32,uint8),(bytes32,bytes32,bytes32,bytes32,bytes32,uint8))": "d36fc9d4", - "cancelDispute(bytes32)": "1792f194", - "createIndexingDispute(address,bytes32)": "4bc5839a", - "createQueryDispute(bytes)": "c50a77b1", - "createQueryDisputeConflict(bytes,bytes)": "c894222e", - "drawDispute(bytes32)": "9334ea52", - "encodeReceipt((bytes32,bytes32,bytes32))": "6369df6b", - "getAttestationIndexer((bytes32,bytes32,bytes32,bytes32,bytes32,uint8))": "c9747f51", - "getDisputePeriod()": "5aea0ec4", - "getStakeSnapshot(address)": "c133b429", - "getVerifierCut()": "84633713", - "isDisputeCreated(bytes32)": "be41f384", - "rejectDispute(bytes32)": "36167e03", - "setArbitrator(address)": "b0eefabe", - "setDisputeDeposit(uint256)": "16972978", - "setDisputePeriod(uint64)": "d76f62d1", - "setFishermanRewardCut(uint32)": "76c993ae", - "setMaxSlashingCut(uint32)": "9f81a7cf", - "setSubgraphService(address)": "93a90a1e" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerDisputeAlreadyCreated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IDisputeManager.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"DisputeManagerDisputeNotPending\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerDisputePeriodNotFinished\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerDisputePeriodZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"DisputeManagerIndexerNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerInvalidDispute\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"DisputeManagerInvalidDisputeDeposit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"cut\",\"type\":\"uint32\"}],\"name\":\"DisputeManagerInvalidFishermanReward\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxSlashingCut\",\"type\":\"uint32\"}],\"name\":\"DisputeManagerInvalidMaxSlashingCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokensSlash\",\"type\":\"uint256\"}],\"name\":\"DisputeManagerInvalidTokensSlash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"relatedDisputeId\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerMustAcceptRelatedDispute\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"requestCID2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerNonConflictingAttestations\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeManagerNonMatchingSubgraphDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerNotArbitrator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerNotFisherman\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputeManagerZeroTokens\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"}],\"name\":\"ArbitratorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"DisputeDepositSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeDrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId1\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId2\",\"type\":\"bytes32\"}],\"name\":\"DisputeLinked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"}],\"name\":\"DisputePeriodSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"DisputeRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"fishermanRewardCut\",\"type\":\"uint32\"}],\"name\":\"FishermanRewardCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"name\":\"IndexingDisputeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxSlashingCut\",\"type\":\"uint32\"}],\"name\":\"MaxSlashingCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fisherman\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"attestation\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeSnapshot\",\"type\":\"uint256\"}],\"name\":\"QueryDisputeCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"}],\"name\":\"SubgraphServiceSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokensSlash\",\"type\":\"uint256\"}],\"name\":\"acceptDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation2\",\"type\":\"tuple\"}],\"name\":\"areConflictingAttestations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"cancelDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"}],\"name\":\"createIndexingDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"attestationData\",\"type\":\"bytes\"}],\"name\":\"createQueryDispute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"attestationData1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"attestationData2\",\"type\":\"bytes\"}],\"name\":\"createQueryDisputeConflict\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"drawDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"internalType\":\"struct Attestation.Receipt\",\"name\":\"receipt\",\"type\":\"tuple\"}],\"name\":\"encodeReceipt\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"requestCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"responseCID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"internalType\":\"struct Attestation.State\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"getAttestationIndexer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDisputePeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"getStakeSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCut\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"isDisputeCreated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"disputeId\",\"type\":\"bytes32\"}],\"name\":\"rejectDispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"}],\"name\":\"setArbitrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeDeposit\",\"type\":\"uint256\"}],\"name\":\"setDisputeDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"disputePeriod\",\"type\":\"uint64\"}],\"name\":\"setDisputePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"cut\",\"type\":\"uint32\"}],\"name\":\"setFishermanRewardCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"maxCut\",\"type\":\"uint32\"}],\"name\":\"setMaxSlashingCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"}],\"name\":\"setSubgraphService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ArbitratorSet(address)\":{\"params\":{\"arbitrator\":\"The address of the arbitrator.\"}},\"DisputeAccepted(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator accepts a `disputeId` to `indexer` created by `fisherman`. The event emits the amount `tokens` transferred to the fisherman, the deposit plus reward.\"},\"DisputeCancelled(bytes32,address,address,uint256)\":{\"details\":\"Emitted when a dispute is cancelled by the fisherman. The event emits the amount `tokens` returned to the fisherman.\"},\"DisputeDepositSet(uint256)\":{\"params\":{\"disputeDeposit\":\"The dispute deposit required to create a dispute.\"}},\"DisputeDrawn(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator draw a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` used as deposit and returned to the fisherman.\"},\"DisputeLinked(bytes32,bytes32)\":{\"details\":\"Emitted when two disputes are in conflict to link them. This event will be emitted after each DisputeCreated event is emitted for each of the individual disputes.\"},\"DisputePeriodSet(uint64)\":{\"params\":{\"disputePeriod\":\"The dispute period in seconds.\"}},\"DisputeRejected(bytes32,address,address,uint256)\":{\"details\":\"Emitted when arbitrator rejects a `disputeId` for `indexer` created by `fisherman`. The event emits the amount `tokens` burned from the fisherman deposit.\"},\"FishermanRewardCutSet(uint32)\":{\"params\":{\"fishermanRewardCut\":\"The fisherman reward cut.\"}},\"IndexingDisputeCreated(bytes32,address,address,uint256,address,bytes32,uint256)\":{\"details\":\"Emitted when an indexing dispute is created for `allocationId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman.\"},\"MaxSlashingCutSet(uint32)\":{\"params\":{\"maxSlashingCut\":\"The maximum slashing cut that can be set.\"}},\"QueryDisputeCreated(bytes32,address,address,uint256,bytes32,bytes,uint256)\":{\"details\":\"Emitted when a query dispute is created for `subgraphDeploymentId` and `indexer` by `fisherman`. The event emits the amount of `tokens` deposited by the fisherman and `attestation` submitted.\"},\"SubgraphServiceSet(address)\":{\"params\":{\"subgraphService\":\"The address of the subgraph service.\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"ArbitratorSet(address)\":{\"notice\":\"Emitted when arbitrator is set.\"},\"DisputeDepositSet(uint256)\":{\"notice\":\"Emitted when dispute deposit is set.\"},\"DisputePeriodSet(uint64)\":{\"notice\":\"Emitted when dispute period is set.\"},\"FishermanRewardCutSet(uint32)\":{\"notice\":\"Emitted when fisherman reward cut is set.\"},\"MaxSlashingCutSet(uint32)\":{\"notice\":\"Emitted when max slashing cut is set.\"},\"SubgraphServiceSet(address)\":{\"notice\":\"Emitted when subgraph service is set.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IDisputeManager.sol\":\"IDisputeManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "contracts/interfaces/ISubgraphService.sol": { - "ISubgraphService": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - } - ], - "name": "DataServiceFeesClaimNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "DataServiceFeesZeroTokens", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceAllocationIsAltruistic", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceAllocationNotAuthorized", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "SubgraphServiceCannotForceCloseAllocation", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceEmptyGeohash", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceEmptyUrl", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balanceBefore", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "balanceAfter", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokensDataService", - "type": "uint256" - } - ], - "name": "SubgraphServiceInconsistentCollection", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceIndexerAlreadyRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "providedIndexer", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedIndexer", - "type": "address" - } - ], - "name": "SubgraphServiceIndexerMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "SubgraphServiceIndexerNotRegistered", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "SubgraphServiceInvalidCurationCut", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "paymentType", - "type": "uint8" - } - ], - "name": "SubgraphServiceInvalidPaymentType", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "ravIndexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationIndexer", - "type": "address" - } - ], - "name": "SubgraphServiceInvalidRAV", - "type": "error" - }, - { - "inputs": [], - "name": "SubgraphServiceInvalidZeroStakeToFeesRatio", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "CurationCutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - } - ], - "name": "ProvisionPendingParametersAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensCollected", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensCurators", - "type": "uint256" - } - ], - "name": "QueryFeesCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServicePaymentCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceProviderRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "ServiceProviderSlashed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ServiceStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unlockTimestamp", - "type": "uint256" - } - ], - "name": "StakeClaimLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "claimId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "releasableAt", - "type": "uint256" - } - ], - "name": "StakeClaimReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "claimsCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensReleased", - "type": "uint256" - } - ], - "name": "StakeClaimsReleased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "ratio", - "type": "uint256" - } - ], - "name": "StakeToFeesRatioSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "acceptProvisionPendingParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "enum IGraphPayments.PaymentTypes", - "name": "feeType", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "collect", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "encodeAllocationProof", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "forceCloseAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastPOIPresentedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "internalType": "struct Allocation.State", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDelegationRatio", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "getLegacyAllocation", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "internalType": "struct LegacyAllocation.State", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getProvisionTokensRange", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getThawingPeriodRange", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVerifierCutRange", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "isOverAllocated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "isStaleAllocation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "migrateLegacyAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "numClaimsToRelease", - "type": "uint256" - } - ], - "name": "releaseStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "resizeAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "curationCut", - "type": "uint256" - } - ], - "name": "setCurationCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "delegationRatio", - "type": "uint32" - } - ], - "name": "setDelegationRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxPOIStaleness", - "type": "uint256" - } - ], - "name": "setMaxPOIStaleness", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "minimumProvisionTokens", - "type": "uint256" - } - ], - "name": "setMinimumProvisionTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pauseGuardian", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "name": "setPauseGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "rewardsDestination", - "type": "address" - } - ], - "name": "setRewardsDestination", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "stakeToFeesRatio", - "type": "uint256" - } - ], - "name": "setStakeToFeesRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "slash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "startService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "serviceProvider", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "stopService", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "acceptProvisionPendingParameters(address,bytes)": "ce0fc0cc", - "collect(address,uint8,bytes)": "b15d2a2c", - "encodeAllocationProof(address,address)": "ce56c98b", - "forceCloseAllocation(address)": "a827a90c", - "getAllocation(address)": "0e022923", - "getDelegationRatio()": "1ebb7c30", - "getLegacyAllocation(address)": "6d9a3951", - "getProvisionTokensRange()": "819ba366", - "getThawingPeriodRange()": "71ce020a", - "getVerifierCutRange()": "482468b7", - "isOverAllocated(address)": "ba38f67d", - "isStaleAllocation(address)": "3f0ed79d", - "migrateLegacyAllocation(address,address,bytes32)": "7dfe6d28", - "register(address,bytes)": "24b8fbf6", - "releaseStake(uint256)": "45f54485", - "resizeAllocation(address,address,uint256)": "81e777a7", - "setCurationCut(uint256)": "7e89bac3", - "setDelegationRatio(uint32)": "1dd42f60", - "setMaxPOIStaleness(uint256)": "7aa31bce", - "setMinimumProvisionTokens(uint256)": "832bc923", - "setPauseGuardian(address,bool)": "35577962", - "setRewardsDestination(address)": "772495c3", - "setStakeToFeesRatio(uint256)": "e6f50054", - "slash(address,bytes)": "cb8347fe", - "startService(address,bytes)": "dedf6726", - "stopService(address,bytes)": "8180083b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"DataServiceFeesClaimNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataServiceFeesZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceAllocationIsAltruistic\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceAllocationNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"SubgraphServiceCannotForceCloseAllocation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceEmptyGeohash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceEmptyUrl\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balanceBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokensDataService\",\"type\":\"uint256\"}],\"name\":\"SubgraphServiceInconsistentCollection\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceIndexerAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"providedIndexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedIndexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceIndexerMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceIndexerNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"SubgraphServiceInvalidCurationCut\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"paymentType\",\"type\":\"uint8\"}],\"name\":\"SubgraphServiceInvalidPaymentType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ravIndexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationIndexer\",\"type\":\"address\"}],\"name\":\"SubgraphServiceInvalidRAV\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubgraphServiceInvalidZeroStakeToFeesRatio\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"CurationCutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"}],\"name\":\"ProvisionPendingParametersAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensCollected\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensCurators\",\"type\":\"uint256\"}],\"name\":\"QueryFeesCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServicePaymentCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"ServiceProviderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ServiceStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unlockTimestamp\",\"type\":\"uint256\"}],\"name\":\"StakeClaimLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releasableAt\",\"type\":\"uint256\"}],\"name\":\"StakeClaimReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"claimsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensReleased\",\"type\":\"uint256\"}],\"name\":\"StakeClaimsReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"StakeToFeesRatioSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"acceptProvisionPendingParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"enum IGraphPayments.PaymentTypes\",\"name\":\"feeType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"encodeAllocationProof\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"forceCloseAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"internalType\":\"struct Allocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"getLegacyAllocation\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"internalType\":\"struct LegacyAllocation.State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProvisionTokensRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThawingPeriodRange\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifierCutRange\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"isOverAllocated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"isStaleAllocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"migrateLegacyAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numClaimsToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"resizeAllocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"curationCut\",\"type\":\"uint256\"}],\"name\":\"setCurationCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"delegationRatio\",\"type\":\"uint32\"}],\"name\":\"setDelegationRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxPOIStaleness\",\"type\":\"uint256\"}],\"name\":\"setMaxPOIStaleness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumProvisionTokens\",\"type\":\"uint256\"}],\"name\":\"setMinimumProvisionTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pauseGuardian\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setPauseGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardsDestination\",\"type\":\"address\"}],\"name\":\"setRewardsDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeToFeesRatio\",\"type\":\"uint256\"}],\"name\":\"setStakeToFeesRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"startService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"serviceProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"stopService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This interface extends {IDataServiceFees} and {IDataService}.\",\"errors\":{\"SubgraphServiceAllocationIsAltruistic(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"SubgraphServiceAllocationNotAuthorized(address,address)\":[{\"params\":{\"allocationId\":\"The id of the allocation.\",\"indexer\":\"The address of the expected indexer.\"}}],\"SubgraphServiceCannotForceCloseAllocation(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"SubgraphServiceInconsistentCollection(uint256,uint256,uint256)\":[{\"params\":{\"balanceAfter\":\"The contract GRT balance after the collection\",\"balanceBefore\":\"The contract GRT balance before the collection\",\"tokensDataService\":\"The amount of tokens sent to the subgraph service\"}}],\"SubgraphServiceIndexerMismatch(address,address)\":[{\"params\":{\"expectedIndexer\":\"The address of the expected indexer.\",\"providedIndexer\":\"The address of the provided indexer.\"}}],\"SubgraphServiceIndexerNotRegistered(address)\":[{\"params\":{\"indexer\":\"The address of the indexer that is not registered\"}}],\"SubgraphServiceInvalidCurationCut(uint256)\":[{\"params\":{\"curationCut\":\"The curation cut value\"}}],\"SubgraphServiceInvalidPaymentType(uint8)\":[{\"params\":{\"paymentType\":\"The payment type that is not supported\"}}],\"SubgraphServiceInvalidRAV(address,address)\":[{\"params\":{\"allocationIndexer\":\"The address of the allocation indexer\",\"ravIndexer\":\"The address of the RAV indexer\"}}]},\"events\":{\"CurationCutSet(uint256)\":{\"params\":{\"curationCut\":\"The curation cut\"}},\"ProvisionPendingParametersAccepted(address)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\"}},\"QueryFeesCollected(address,uint256,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider\",\"tokensCollected\":\"The amount of tokens collected\",\"tokensCurators\":\"The amount of tokens curators receive\"}},\"ServicePaymentCollected(address,uint8,uint256)\":{\"params\":{\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens collected.\"}},\"ServiceProviderRegistered(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceProviderSlashed(address,uint256)\":{\"params\":{\"serviceProvider\":\"The address of the service provider.\",\"tokens\":\"The amount of tokens slashed.\"}},\"ServiceStarted(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"ServiceStopped(address,bytes)\":{\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens to lock in the claim\",\"unlockTimestamp\":\"The timestamp when the tokens can be released\"}},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"params\":{\"claimId\":\"The id of the stake claim\",\"releasableAt\":\"The timestamp when the tokens were released\",\"serviceProvider\":\"The address of the service provider\",\"tokens\":\"The amount of tokens released\"}},\"StakeClaimsReleased(address,uint256,uint256)\":{\"params\":{\"claimsCount\":\"The number of stake claims being released\",\"serviceProvider\":\"The address of the service provider\",\"tokensReleased\":\"The total amount of tokens being released\"}},\"StakeToFeesRatioSet(uint256)\":{\"params\":{\"ratio\":\"The stake to fees ratio\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"details\":\"Provides a way for the data service to validate and accept provision parameter changes. Call {_acceptProvision}. Emits a {ProvisionPendingParametersAccepted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"collect(address,uint8,bytes)\":{\"details\":\"The implementation of this function is expected to interact with {GraphPayments} to collect payment from the service payer, which is done via {IGraphPayments-collect}.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"feeType\":\"The type of fee to collect as defined in {GraphPayments}.\",\"serviceProvider\":\"The address of the service provider.\"},\"returns\":{\"_0\":\"The amount of tokens collected.\"}},\"encodeAllocationProof(address,address)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\"}},\"forceCloseAllocation(address)\":{\"details\":\"This function can be permissionlessly called when the allocation is stale or if the indexer is over-allocated. This ensures that rewards for other allocations are not diluted by an inactive allocation, and that over-allocated indexers stop accumulating rewards with tokens they no longer have allocated. Requirements: - Allocation must exist and be open - Allocation must be stale or indexer must be over-allocated - Allocation cannot be altruistic Emits a {AllocationClosed} event.\",\"params\":{\"allocationId\":\"The id of the allocation\"}},\"getAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"}},\"getDelegationRatio()\":{\"returns\":{\"_0\":\"The delegation ratio\"}},\"getLegacyAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"}},\"getProvisionTokensRange()\":{\"returns\":{\"_0\":\"Minimum provision tokens allowed\",\"_1\":\"Maximum provision tokens allowed\"}},\"getThawingPeriodRange()\":{\"returns\":{\"_0\":\"Minimum thawing period allowed\",\"_1\":\"Maximum thawing period allowed\"}},\"getVerifierCutRange()\":{\"returns\":{\"_0\":\"Minimum verifier cut allowed\",\"_1\":\"Maximum verifier cut allowed\"}},\"isOverAllocated(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"True if the indexer is over-allocated, false otherwise\"}},\"isStaleAllocation(address)\":{\"params\":{\"allocationId\":\"The id of the allocation\"},\"returns\":{\"_0\":\"True if the allocation is stale, false otherwise\"}},\"migrateLegacyAllocation(address,address,bytes32)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"register(address,bytes)\":{\"details\":\"Before registering, the service provider must have created a provision in the Graph Horizon staking contract with parameters that are compatible with the data service. Verifies provision parameters and rejects registration in the event they are not valid. Emits a {ServiceProviderRegistered} event. NOTE: Failing to accept the provision will result in the service provider operating on an unverified provision. Depending on of the data service this can be a security risk as the protocol won't be able to guarantee economic security for the consumer.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"releaseStake(uint256)\":{\"details\":\"This function is only meant to be called if the service provider has enough stake claims that releasing them all at once would exceed the block gas limit.This function can be overriden and/or disabled.Emits a {StakeClaimsReleased} event, and a {StakeClaimReleased} event for each claim released.\",\"params\":{\"numClaimsToRelease\":\"Amount of stake claims to process. If 0, all stake claims are processed.\"}},\"resizeAllocation(address,address,uint256)\":{\"details\":\"Requirements: - The indexer must be registered - The provision must be valid according to the subgraph service rules - `tokens` must be different from the current allocation size - The indexer must have enough available tokens to allocate if they are upsizing the allocation Emits a {AllocationResized} event. See {AllocationManager-_resizeAllocation} for more details.\",\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"tokens\":\"The new amount of tokens in the allocation\"}},\"setCurationCut(uint256)\":{\"details\":\"Emits a {CuratorCutSet} event\",\"params\":{\"curationCut\":\"The curation cut for the payment type\"}},\"setDelegationRatio(uint32)\":{\"params\":{\"delegationRatio\":\"The delegation ratio\"}},\"setMaxPOIStaleness(uint256)\":{\"params\":{\"maxPOIStaleness\":\"The max POI staleness in seconds\"}},\"setMinimumProvisionTokens(uint256)\":{\"params\":{\"minimumProvisionTokens\":\"The minimum amount of provisioned tokens required to create an allocation\"}},\"setPauseGuardian(address,bool)\":{\"params\":{\"allowed\":\"True if the pause guardian is allowed to pause the contract, false otherwise\",\"pauseGuardian\":\"The address of the pause guardian\"}},\"setRewardsDestination(address)\":{\"details\":\"Emits a {RewardsDestinationSet} event\",\"params\":{\"rewardsDestination\":\"The address where indexing rewards should be sent\"}},\"setStakeToFeesRatio(uint256)\":{\"params\":{\"stakeToFeesRatio\":\"The stake to fees ratio\"}},\"slash(address,bytes)\":{\"details\":\"To slash the service provider's provision the function should call {Staking-slash}. Emits a {ServiceProviderSlashed} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"startService(address,bytes)\":{\"details\":\"Emits a {ServiceStarted} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}},\"stopService(address,bytes)\":{\"details\":\"Emits a {ServiceStopped} event.\",\"params\":{\"data\":\"Custom data, usage defined by the data service.\",\"serviceProvider\":\"The address of the service provider.\"}}},\"title\":\"Interface for the {SubgraphService} contract\",\"version\":1},\"userdoc\":{\"errors\":{\"DataServiceFeesClaimNotFound(bytes32)\":[{\"notice\":\"Thrown when attempting to get a stake claim that does not exist.\"}],\"DataServiceFeesZeroTokens()\":[{\"notice\":\"Emitted when trying to lock zero tokens in a stake claim\"}],\"SubgraphServiceAllocationIsAltruistic(address)\":[{\"notice\":\"Thrown when trying to force close an altruistic allocation\"}],\"SubgraphServiceAllocationNotAuthorized(address,address)\":[{\"notice\":\"Thrown when the indexer in the allocation state does not match the expected indexer.\"}],\"SubgraphServiceCannotForceCloseAllocation(address)\":[{\"notice\":\"Thrown when trying to force close an allocation that is not stale and the indexer is not over-allocated\"}],\"SubgraphServiceEmptyGeohash()\":[{\"notice\":\"Thrown when an indexer tries to register with an empty geohash\"}],\"SubgraphServiceEmptyUrl()\":[{\"notice\":\"Thrown when an indexer tries to register with an empty URL\"}],\"SubgraphServiceInconsistentCollection(uint256,uint256,uint256)\":[{\"notice\":\"Thrown when the contract GRT balance is inconsistent with the payment amount collected from Graph Payments\"}],\"SubgraphServiceIndexerAlreadyRegistered()\":[{\"notice\":\"Thrown when an indexer tries to register but they are already registered\"}],\"SubgraphServiceIndexerMismatch(address,address)\":[{\"notice\":\"@notice Thrown when the service provider in the RAV does not match the expected indexer.\"}],\"SubgraphServiceIndexerNotRegistered(address)\":[{\"notice\":\"Thrown when an indexer tries to perform an operation but they are not registered\"}],\"SubgraphServiceInvalidCurationCut(uint256)\":[{\"notice\":\"Thrown when trying to set a curation cut that is not a valid PPM value\"}],\"SubgraphServiceInvalidPaymentType(uint8)\":[{\"notice\":\"Thrown when an indexer tries to collect fees for an unsupported payment type\"}],\"SubgraphServiceInvalidRAV(address,address)\":[{\"notice\":\"Thrown when collecting a RAV where the RAV indexer is not the same as the allocation indexer\"}],\"SubgraphServiceInvalidZeroStakeToFeesRatio()\":[{\"notice\":\"Thrown when trying to set stake to fees ratio to zero\"}]},\"events\":{\"CurationCutSet(uint256)\":{\"notice\":\"Emitted when curator cuts are set\"},\"ProvisionPendingParametersAccepted(address)\":{\"notice\":\"Emitted when a service provider accepts a provision in {Graph Horizon staking contract}.\"},\"QueryFeesCollected(address,uint256,uint256)\":{\"notice\":\"Emitted when a subgraph service collects query fees from Graph Payments\"},\"ServicePaymentCollected(address,uint8,uint256)\":{\"notice\":\"Emitted when a service provider collects payment.\"},\"ServiceProviderRegistered(address,bytes)\":{\"notice\":\"Emitted when a service provider is registered with the data service.\"},\"ServiceProviderSlashed(address,uint256)\":{\"notice\":\"Emitted when a service provider is slashed.\"},\"ServiceStarted(address,bytes)\":{\"notice\":\"Emitted when a service provider starts providing the service.\"},\"ServiceStopped(address,bytes)\":{\"notice\":\"Emitted when a service provider stops providing the service.\"},\"StakeClaimLocked(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is created and stake is locked.\"},\"StakeClaimReleased(address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when a stake claim is released and stake is unlocked.\"},\"StakeClaimsReleased(address,uint256,uint256)\":{\"notice\":\"Emitted when a series of stake claims are released.\"},\"StakeToFeesRatioSet(uint256)\":{\"notice\":\"Emitted when the stake to fees ratio is set.\"}},\"kind\":\"user\",\"methods\":{\"acceptProvisionPendingParameters(address,bytes)\":{\"notice\":\"Accepts pending parameters in the provision of a service provider in the {Graph Horizon staking contract}.\"},\"collect(address,uint8,bytes)\":{\"notice\":\"Collects payment earnt by the service provider.\"},\"encodeAllocationProof(address,address)\":{\"notice\":\"Encodes the allocation proof for EIP712 signing\"},\"forceCloseAllocation(address)\":{\"notice\":\"Force close an allocation\"},\"getAllocation(address)\":{\"notice\":\"Gets the details of an allocation For legacy allocations use {getLegacyAllocation}\"},\"getDelegationRatio()\":{\"notice\":\"External getter for the delegation ratio\"},\"getLegacyAllocation(address)\":{\"notice\":\"Gets the details of a legacy allocation For non-legacy allocations use {getAllocation}\"},\"getProvisionTokensRange()\":{\"notice\":\"External getter for the provision tokens range\"},\"getThawingPeriodRange()\":{\"notice\":\"External getter for the thawing period range\"},\"getVerifierCutRange()\":{\"notice\":\"External getter for the verifier cut range\"},\"isOverAllocated(address)\":{\"notice\":\"Checks if an indexer is over-allocated\"},\"isStaleAllocation(address)\":{\"notice\":\"Checks if an allocation is stale\"},\"migrateLegacyAllocation(address,address,bytes32)\":{\"notice\":\"Imports a legacy allocation id into the subgraph service This is a governor only action that is required to prevent indexers from re-using allocation ids from the legacy staking contract.\"},\"register(address,bytes)\":{\"notice\":\"Registers a service provider with the data service. The service provider can now start providing the service.\"},\"releaseStake(uint256)\":{\"notice\":\"Releases expired stake claims for the caller.\"},\"resizeAllocation(address,address,uint256)\":{\"notice\":\"Change the amount of tokens in an allocation\"},\"setCurationCut(uint256)\":{\"notice\":\"Sets the curators payment cut for query fees\"},\"setDelegationRatio(uint32)\":{\"notice\":\"Sets the delegation ratio\"},\"setMaxPOIStaleness(uint256)\":{\"notice\":\"Sets the max POI staleness See {AllocationManagerV1Storage-maxPOIStaleness} for more details.\"},\"setMinimumProvisionTokens(uint256)\":{\"notice\":\"Sets the minimum amount of provisioned tokens required to create an allocation\"},\"setPauseGuardian(address,bool)\":{\"notice\":\"Sets a pause guardian\"},\"setRewardsDestination(address)\":{\"notice\":\"Sets the rewards destination for an indexer to receive indexing rewards\"},\"setStakeToFeesRatio(uint256)\":{\"notice\":\"Sets the stake to fees ratio\"},\"slash(address,bytes)\":{\"notice\":\"Slash a service provider for misbehaviour.\"},\"startService(address,bytes)\":{\"notice\":\"Service provider starts providing the service.\"},\"stopService(address,bytes)\":{\"notice\":\"Service provider stops providing the service.\"}},\"notice\":\"The Subgraph Service is a data service built on top of Graph Horizon that supports the use case of subgraph indexing and querying. The {SubgraphService} contract implements the flows described in the Data Service framework to allow indexers to register as subgraph service providers, create allocations to signal their commitment to index a subgraph, and collect fees for indexing and querying services.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/ISubgraphService.sol\":\"ISubgraphService\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "contracts/libraries/Allocation.sol": { - "Allocation": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationAlreadyExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - } - ], - "name": "AllocationClosed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationDoesNotExist", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220291c9aa1e1a00cb5ec5f2f8ed26ccb21fe0b529c44b1d6c1644b12749dba75d764736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x29 SHR SWAP11 LOG1 0xE1 LOG0 0xC 0xB5 0xEC PUSH0 0x2F DUP15 0xD2 PUSH13 0xCB21FE0B529C44B1D6C1644B12 PUSH21 0x9DBA75D764736F6C634300081B0033000000000000 ", - "sourceMap": "220:7144:54:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;220:7144:54;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220291c9aa1e1a00cb5ec5f2f8ed26ccb21fe0b529c44b1d6c1644b12749dba75d764736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x29 SHR SWAP11 LOG1 0xE1 LOG0 0xC 0xB5 0xEC PUSH0 0x2F DUP15 0xD2 PUSH13 0xCB21FE0B529C44B1D6C1644B12 PUSH21 0x9DBA75D764736F6C634300081B0033000000000000 ", - "sourceMap": "220:7144:54:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"}],\"name\":\"AllocationClosed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationDoesNotExist\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllocationAlreadyExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"AllocationClosed(address,uint256)\":[{\"params\":{\"allocationId\":\"The allocation id\",\"closedAt\":\"The timestamp when the allocation was closed\"}}],\"AllocationDoesNotExist(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"Allocation library\",\"version\":1},\"userdoc\":{\"errors\":{\"AllocationAlreadyExists(address)\":[{\"notice\":\"Thrown when attempting to create an allocation with an existing id\"}],\"AllocationClosed(address,uint256)\":[{\"notice\":\"Thrown when trying to perform an operation on a closed allocation\"}],\"AllocationDoesNotExist(address)\":[{\"notice\":\"Thrown when trying to perform an operation on a non-existent allocation\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to handle Allocations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/Allocation.sol\":\"Allocation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "contracts/libraries/Attestation.sol": { - "Attestation": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLength", - "type": "uint256" - } - ], - "name": "AttestationInvalidBytesLength", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fa356496335e29bc5b636632a191a68385d839ae18bff5095b2d78d3f63eb7ae64736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STATICCALL CALLDATALOAD PUSH5 0x96335E29BC JUMPDEST PUSH4 0x6632A191 0xA6 DUP4 DUP6 0xD8 CODECOPY 0xAE XOR 0xBF CREATE2 MULMOD JUMPDEST 0x2D PUSH25 0xD3F63EB7AE64736F6C634300081B0033000000000000000000 ", - "sourceMap": "152:4376:55:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;152:4376:55;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fa356496335e29bc5b636632a191a68385d839ae18bff5095b2d78d3f63eb7ae64736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STATICCALL CALLDATALOAD PUSH5 0x96335E29BC JUMPDEST PUSH4 0x6632A191 0xA6 DUP4 DUP6 0xD8 CODECOPY 0xAE XOR 0xBF CREATE2 MULMOD JUMPDEST 0x2D PUSH25 0xD3F63EB7AE64736F6C634300081B0033000000000000000000 ", - "sourceMap": "152:4376:55:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLength\",\"type\":\"uint256\"}],\"name\":\"AttestationInvalidBytesLength\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Attestation library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to handle Attestation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/Attestation.sol\":\"Attestation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "contracts/libraries/LegacyAllocation.sol": { - "LegacyAllocation": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "LegacyAllocationAlreadyMigrated", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "LegacyAllocationDoesNotExist", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "LegacyAllocationExists", - "type": "error" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220470e3c1f93a943319bd2758940bf40c2421579802938427096997bb3795f5e8964736f6c634300081b0033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE 0xE EXTCODECOPY 0x1F SWAP4 0xA9 NUMBER BALANCE SWAP12 0xD2 PUSH22 0x8940BF40C2421579802938427096997BB3795F5E8964 PUSH20 0x6F6C634300081B00330000000000000000000000 ", - "sourceMap": "164:3349:56:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;164:3349:56;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220470e3c1f93a943319bd2758940bf40c2421579802938427096997bb3795f5e8964736f6c634300081b0033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE 0xE EXTCODECOPY 0x1F SWAP4 0xA9 NUMBER BALANCE SWAP12 0xD2 PUSH22 0x8940BF40C2421579802938427096997BB3795F5E8964 PUSH20 0x6F6C634300081B00330000000000000000000000 ", - "sourceMap": "164:3349:56:-:0;;;;;;;;" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationAlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"LegacyAllocationExists\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"LegacyAllocationAlreadyMigrated(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"LegacyAllocationDoesNotExist(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}],\"LegacyAllocationExists(address)\":[{\"params\":{\"allocationId\":\"The allocation id\"}}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"LegacyAllocation library\",\"version\":1},\"userdoc\":{\"errors\":{\"LegacyAllocationAlreadyMigrated(address)\":[{\"notice\":\"Thrown when trying to migrate an allocation that has already been migrated\"}],\"LegacyAllocationDoesNotExist(address)\":[{\"notice\":\"Thrown when trying to get a non-existent allocation\"}],\"LegacyAllocationExists(address)\":[{\"notice\":\"Thrown when attempting to migrate an allocation with an existing id\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to handle legacy Allocations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/LegacyAllocation.sol\":\"LegacyAllocation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - }, - "contracts/utilities/AllocationManager.sol": { - "AllocationManager": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationManagerAllocationClosed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationManagerAllocationSameSize", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - }, - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "AllocationManagerInvalidAllocationProof", - "type": "error" - }, - { - "inputs": [], - "name": "AllocationManagerInvalidZeroAllocationId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractName", - "type": "bytes" - } - ], - "name": "GraphDirectoryInvalidZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationClosed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "AllocationCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newTokens", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldTokens", - "type": "uint256" - } - ], - "name": "AllocationResized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EIP712DomainChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "graphToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphStaking", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphPayments", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEscrow", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "graphController", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphEpochManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphRewardsManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphTokenGateway", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphProxyAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "graphCuration", - "type": "address" - } - ], - "name": "GraphDirectoryInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensIndexerRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensDelegationRewards", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "poi", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "currentEpoch", - "type": "uint256" - } - ], - "name": "IndexingRewardsCollected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "allocationId", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "LegacyAllocationMigrated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxPOIStaleness", - "type": "uint256" - } - ], - "name": "MaxPOIStalenessSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "rewardsDestination", - "type": "address" - } - ], - "name": "RewardsDestinationSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "allocationProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "allocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastPOIPresentedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "legacyAllocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxPOIStaleness", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "rewardsDestination", - "outputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "subgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "allocationProvisionTracker(address)": "6234e216", - "allocations(address)": "52a9039c", - "eip712Domain()": "84b0196e", - "legacyAllocations(address)": "93d4e7cb", - "maxPOIStaleness()": "85e82baf", - "rewardsDestination(address)": "7203ca78", - "subgraphAllocatedTokens(bytes32)": "3afd23fe" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationManagerAllocationClosed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationManagerAllocationSameSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"AllocationManagerInvalidAllocationProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllocationManagerInvalidZeroAllocationId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractName\",\"type\":\"bytes\"}],\"name\":\"GraphDirectoryInvalidZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"AllocationCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldTokens\",\"type\":\"uint256\"}],\"name\":\"AllocationResized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphStaking\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphPayments\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEscrow\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"graphController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphEpochManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphRewardsManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphTokenGateway\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphProxyAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"graphCuration\",\"type\":\"address\"}],\"name\":\"GraphDirectoryInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensIndexerRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensDelegationRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poi\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"name\":\"IndexingRewardsCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"LegacyAllocationMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxPOIStaleness\",\"type\":\"uint256\"}],\"name\":\"MaxPOIStalenessSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardsDestination\",\"type\":\"address\"}],\"name\":\"RewardsDestinationSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"allocationProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"allocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"legacyAllocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPOIStaleness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AllocationManagerAllocationClosed(address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\"}}],\"AllocationManagerAllocationSameSize(address,uint256)\":[{\"params\":{\"allocationId\":\"The id of the allocation\",\"tokens\":\"The amount of tokens\"}}],\"AllocationManagerInvalidAllocationProof(address,address)\":[{\"params\":{\"allocationId\":\"The id of the allocation\",\"signer\":\"The address that signed the proof\"}}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"params\":{\"contractName\":\"The name of the contract that was not found, or the controller\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"AllocationClosed(address,address,bytes32,uint256)\":{\"details\":\"Emitted when an indexer closes an allocation\",\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokens\":\"The amount of tokens allocated\"}},\"AllocationCreated(address,address,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokens\":\"The amount of tokens allocated\"}},\"AllocationResized(address,address,bytes32,uint256,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"newTokens\":\"The new amount of tokens allocated\",\"oldTokens\":\"The old amount of tokens allocated\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"params\":{\"graphController\":\"The Graph Controller contract address\",\"graphCuration\":\"The Curation contract address\",\"graphEpochManager\":\"The Epoch Manager contract address\",\"graphEscrow\":\"The Payments Escrow contract address\",\"graphPayments\":\"The Graph Payments contract address\",\"graphProxyAdmin\":\"The Graph Proxy Admin contract address\",\"graphRewardsManager\":\"The Rewards Manager contract address\",\"graphStaking\":\"The Horizon Staking contract address\",\"graphToken\":\"The Graph Token contract address\",\"graphTokenGateway\":\"The Token Gateway contract address\"}},\"IndexingRewardsCollected(address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"currentEpoch\":\"The current epoch\",\"indexer\":\"The address of the indexer\",\"poi\":\"The POI presented\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\",\"tokensDelegationRewards\":\"The amount of tokens collected for delegators\",\"tokensIndexerRewards\":\"The amount of tokens collected for the indexer\",\"tokensRewards\":\"The amount of tokens collected\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"LegacyAllocationMigrated(address,address,bytes32)\":{\"params\":{\"allocationId\":\"The id of the allocation\",\"indexer\":\"The address of the indexer\",\"subgraphDeploymentId\":\"The id of the subgraph deployment\"}},\"MaxPOIStalenessSet(uint256)\":{\"params\":{\"maxPOIStaleness\":\"The max POI staleness in seconds\"}},\"RewardsDestinationSet(address,address)\":{\"params\":{\"indexer\":\"The address of the indexer\",\"rewardsDestination\":\"The address where indexing rewards should be sent\"}}},\"kind\":\"dev\",\"methods\":{\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"}},\"stateVariables\":{\"EIP712_ALLOCATION_PROOF_TYPEHASH\":{\"details\":\"EIP712 typehash for allocation proof\"}},\"title\":\"AllocationManager contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AllocationManagerAllocationClosed(address)\":[{\"notice\":\"Thrown when attempting to collect indexing rewards on a closed allocationl\"}],\"AllocationManagerAllocationSameSize(address,uint256)\":[{\"notice\":\"Thrown when attempting to resize an allocation with the same size\"}],\"AllocationManagerInvalidAllocationProof(address,address)\":[{\"notice\":\"Thrown when an allocation proof is invalid Both `signer` and `allocationId` should match for a valid proof.\"}],\"AllocationManagerInvalidZeroAllocationId()\":[{\"notice\":\"Thrown when attempting to create an allocation with a zero allocation id\"}],\"GraphDirectoryInvalidZeroAddress(bytes)\":[{\"notice\":\"Thrown when either the controller is the zero address or a contract address is not found on the controller\"}]},\"events\":{\"AllocationCreated(address,address,bytes32,uint256)\":{\"notice\":\"Emitted when an indexer creates an allocation\"},\"AllocationResized(address,address,bytes32,uint256,uint256)\":{\"notice\":\"Emitted when an indexer resizes an allocation\"},\"GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)\":{\"notice\":\"Emitted when the GraphDirectory is initialized\"},\"IndexingRewardsCollected(address,address,bytes32,uint256,uint256,uint256,bytes32,uint256)\":{\"notice\":\"Emitted when an indexer collects indexing rewards for an allocation\"},\"LegacyAllocationMigrated(address,address,bytes32)\":{\"notice\":\"Emitted when a legacy allocation is migrated into the subgraph service\"},\"MaxPOIStalenessSet(uint256)\":{\"notice\":\"Emitted when the maximum POI staleness is updated\"},\"RewardsDestinationSet(address,address)\":{\"notice\":\"Emitted when an indexer sets a new indexing rewards destination\"}},\"kind\":\"user\",\"methods\":{\"allocationProvisionTracker(address)\":{\"notice\":\"Tracks allocated tokens per indexer\"},\"allocations(address)\":{\"notice\":\"Allocation details\"},\"legacyAllocations(address)\":{\"notice\":\"Legacy allocation details\"},\"maxPOIStaleness()\":{\"notice\":\"Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\"},\"rewardsDestination(address)\":{\"notice\":\"Destination of accrued indexing rewards\"},\"subgraphAllocatedTokens(bytes32)\":{\"notice\":\"Track total tokens allocated per subgraph deployment\"}},\"notice\":\"A helper contract implementing allocation lifecycle management. Allows opening, resizing, and closing allocations, as well as collecting indexing rewards by presenting a Proof of Indexing (POI).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/AllocationManager.sol\":\"AllocationManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/arbitrum/ITokenGateway.sol\":{\"keccak256\":\"0x3cbcc6e4629543a99acacc7ee4ffa6c063b9fb17d3597ccd2f9481008e3633bd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d6bb0bb830b67d579e57a261e5f5d9e90b32dc006b02badbecf1f6c82c0a5100\",\"dweb:/ipfs/Qmd38iNXZpinwbNRJPEAA8r9bmmtRwjTSK1SkmH47ge4kJ\"]},\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/contracts/contracts/epochs/IEpochManager.sol\":{\"keccak256\":\"0x0f4b3a3569c023d2610d0d8b37b3ecb0b67f848d77aa063bb311756670017e85\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://df7c43568e554b301134aa2c58e4889ad0d3dcfec40e834b63621a43f39da154\",\"dweb:/ipfs/QmZeSV9AM6FKCkH9QYyF7i5nVggseEJXbvWbtrgUeXqQpo\"]},\"@graphprotocol/contracts/contracts/governance/IController.sol\":{\"keccak256\":\"0xe37df86cdea385d708ba00862cd9e04940e4f2aa50354fb3a9d2d4f505d5509a\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0f6c9fd2b7a8c5a6b89ef12c7423144df04a5f251d5480be1b73c74a785ff12a\",\"dweb:/ipfs/QmYpiCQoxbDEYQ2FNA39Z4FGfoxfQ8jvH1Z3ccrqguQFMP\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsIssuer.sol\":{\"keccak256\":\"0x1aa1346592e17eaa4a2711e584c33ed3887c6290eee4c74abac6a1dac5600d47\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://90b853048a0c88ef983370786fed2338d43b2293f9396107aba36ff87de8cbd1\",\"dweb:/ipfs/QmVCKC45HbzsYjzntCcffDEjv2DLsdUb3sBhf2ouknBK9D\"]},\"@graphprotocol/contracts/contracts/rewards/IRewardsManager.sol\":{\"keccak256\":\"0x5b4e4b27c41121831d28a6a71ed90fcb44c34d2d3e722993dac74c239ad653fd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://9312944c7b9f5f5901e6b899e11838a628c5a146b6ee70f2bd4664010d652e68\",\"dweb:/ipfs/QmYMjrhnL5pefMQfSf64wFrqmqEAYgxoyf3jb8g2jz1kMc\"]},\"@graphprotocol/contracts/contracts/token/IGraphToken.sol\":{\"keccak256\":\"0x2ffad6798d641c8d1288730be725c43041c803caceaf6d9985122d000ad5761c\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5f782a5670037fc9223dc20fd4f99c0277a9bec7d08f7800b0a0733e819a07cb\",\"dweb:/ipfs/QmP3K2QnmukScCh1nzgphYdg7AiAuTaT914jq4txLYNpra\"]},\"@graphprotocol/contracts/contracts/utils/TokenUtils.sol\":{\"keccak256\":\"0x7bd336193785ed6f09a3bd847f9208f64aa9b87ad67c40838d00fec41bb153d5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d96d83cdb9bbb567e4eafac8bdef3ff6bdaf426338baf76bae277c11afb33cee\",\"dweb:/ipfs/QmNjr4PiJ76Wc5mFqa9H88BjsEMrUfy1jiftNHYTgd6Mp5\"]},\"@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol\":{\"keccak256\":\"0x9012127a1b1dc8a3f75ad49925632faecca8bcb46f42ab7d1ac0af83a7514f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b002f1f6759e7ced37f161706bc4b787ba7534fb4326ae7ab395270926292c42\",\"dweb:/ipfs/QmRVDPWMbrijk14sywXTbnKdueVBgADBB7h8F9aGA4DgSZ\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphProxyAdmin.sol\":{\"keccak256\":\"0xa9c752ea887bd2a3637934b5f197526b6fac46b0b924deb75a8d224290ccbc95\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e0a6625b4175959cd53af91a3741c12fb1fa2e91e0ab2302dff8a06bf7a66781\",\"dweb:/ipfs/QmPMoc5DN9gZr22gWkKGQDgJ8eqK1pChGQYTbPLC9LDCiY\"]},\"@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol\":{\"keccak256\":\"0xa32bd068b2a6a6cdd3863439aa280b29718ebb0a94da59e5806455c75af7994e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d1cdd344d026af2fc6e136337f9f86354d1b2731a6076e498c2ffd370705cdb5\",\"dweb:/ipfs/QmZe4rGR9gvyWP9ENDGLWxcB5a67qvbqbFKKhr9Di7VkEN\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsEscrow.sol\":{\"keccak256\":\"0x04da4bb0cfc6db397d6140ae72d6a4ffcadb19b5a8fc654ae3fd1550b64526ff\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9dca21008f5cf563d1863148b151d103b92a99c7bb0fe4667fdd9236bfa9881e\",\"dweb:/ipfs/QmPBfG7s2ajEYn35oJk6TjQ6wCQ7FNVAuZnzXbAENbKF9i\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol\":{\"keccak256\":\"0x2aa4aa3745b13f9cadcbf3f93888ebbaa8f5d1da3b6f845f1741d51b16ff9944\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://290e13fd3dc9170244aaa4c6e5f5646878d011ee25024926d4d60d40eb6cf8c9\",\"dweb:/ipfs/QmPWwXxhnxmNSUpVF6caT1cXVtV2c1ackJiMzAbUG4z6Fo\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol\":{\"keccak256\":\"0xbb225acac73f4245b30a8fe9c0bf4bcc8b310f40da526a0447a2303f1ca63e96\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://207826b2277a0bd42b8a4d8825f6b16e46d6dc8039e4027faa22df462aa06079\",\"dweb:/ipfs/QmYS177dKBuY7iRUdwBMHxSMd6SfNpARTApLHMLgFCozTy\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol\":{\"keccak256\":\"0xd161d01d49ec47200c1c8374d11ad7d9a2c1776a2f87c546f78535ffa33b3954\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://7da68f651214064c6afb1b43955879a2eaea6076c44e92975abf31735b0e1012\",\"dweb:/ipfs/QmZBHtfqhzWsv1oWy73pR8zabgLnhqpiWhknK4TzrPBhV2\"]},\"@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol\":{\"keccak256\":\"0xf1426559b911f2c10d750c6e4f2e406b752561484132008c9acd43afd8f93af9\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://695b61f4bf5993b872c5362bade240fb98fe1fbdcc2f834e12ff61c84d640116\",\"dweb:/ipfs/QmRcE4NyTUBXbXRCtMJv19GUABNWztAY2iXpFTbpKvKBnA\"]},\"@graphprotocol/horizon/contracts/libraries/LinkedList.sol\":{\"keccak256\":\"0x44b2d65992b15bb7d0a9d2f397a5d55450da36054b5a174a82cea484081b5ee1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://34c61d8ec1b3314b4ea5b4afb556ed78ffa177e3ac8bd5e3e235ba5afad2f95b\",\"dweb:/ipfs/QmdwvTpdmKPCzebZWKVK8Y1ooUDKpeWeKk9FgxQHdoMmDU\"]},\"@graphprotocol/horizon/contracts/libraries/PPMMath.sol\":{\"keccak256\":\"0x2bc503df758ca7fcc2a741b41350158a53e295974a37478336f2ed8b76e460a5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://24af9fe8ca1e0daae752a4b331b77c3a268a2a358e2e34a50df8ef283dd8670f\",\"dweb:/ipfs/QmYBJAMWHeiWWepGTTdkUSN4Vn2oP4GvyeqiwDK1TVdfce\"]},\"@graphprotocol/horizon/contracts/utilities/GraphDirectory.sol\":{\"keccak256\":\"0x1be743a301a082944c78ba37b48c466ebc47d2ddd94529a3e05ed828e4413c68\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://663e05ec37777a21b344acb96235db183dcfac14e42048cfc921ab2038cd77d1\",\"dweb:/ipfs/QmY5mQ2L3BLrB8TDNXadDhjR2nCb7ssNPTJ6zegJnC5bjq\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/AllocationManager.sol\":{\"keccak256\":\"0xc24b976ce48a98b22cc22c50cc704ec2f5624e753d8cc2a16ede76109345624e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://009aee0ceb4cb423d389a2dad841e9ba39845d0385d507aca47fd49680de3908\",\"dweb:/ipfs/QmXnSEpeFmN6zbbuUJ1w37Sjhgag3h7vjZLi819BdtTUeF\"]},\"contracts/utilities/AllocationManagerStorage.sol\":{\"keccak256\":\"0x4e5f682e3c67a101ddefb795d43f27ef5ed9b458dc348b85e4f2290c01cf48a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dd557b9537c581bbb4bcb5843c03289cf9101236790e33e206621068ff4431b7\",\"dweb:/ipfs/QmcmDDBuGnrNmud7oS79FRsLwb88Ebkqxg8Ws3vQSSs8xQ\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 13042, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "allocations", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_struct(State)11307_storage)" - }, - { - "astId": 13048, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "legacyAllocations", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_struct(State)11933_storage)" - }, - { - "astId": 13053, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "allocationProvisionTracker", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 13056, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "maxPOIStaleness", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 13061, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "rewardsDestination", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 13066, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "subgraphAllocatedTokens", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_bytes32,t_uint256)" - }, - { - "astId": 13071, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "__gap", - "offset": 0, - "slot": "6", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_address,t_struct(State)11307_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct Allocation.State)", - "numberOfBytes": "32", - "value": "t_struct(State)11307_storage" - }, - "t_mapping(t_address,t_struct(State)11933_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LegacyAllocation.State)", - "numberOfBytes": "32", - "value": "t_struct(State)11933_storage" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(State)11307_storage": { - "encoding": "inplace", - "label": "struct Allocation.State", - "members": [ - { - "astId": 11292, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "indexer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 11294, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "subgraphDeploymentId", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 11296, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "tokens", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 11298, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "createdAt", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 11300, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "closedAt", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 11302, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "lastPOIPresentedAt", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 11304, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "accRewardsPerAllocatedToken", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 11306, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "accRewardsPending", - "offset": 0, - "slot": "7", - "type": "t_uint256" - } - ], - "numberOfBytes": "256" - }, - "t_struct(State)11933_storage": { - "encoding": "inplace", - "label": "struct LegacyAllocation.State", - "members": [ - { - "astId": 11930, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "indexer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 11932, - "contract": "contracts/utilities/AllocationManager.sol:AllocationManager", - "label": "subgraphDeploymentId", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } - } - }, - "contracts/utilities/AllocationManagerStorage.sol": { - "AllocationManagerV1Storage": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "allocationProvisionTracker", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "allocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "createdAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "closedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastPOIPresentedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPerAllocatedToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accRewardsPending", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allocationId", - "type": "address" - } - ], - "name": "legacyAllocations", - "outputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxPOIStaleness", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "indexer", - "type": "address" - } - ], - "name": "rewardsDestination", - "outputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "subgraphDeploymentId", - "type": "bytes32" - } - ], - "name": "subgraphAllocatedTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": { - "allocationProvisionTracker(address)": "6234e216", - "allocations(address)": "52a9039c", - "legacyAllocations(address)": "93d4e7cb", - "maxPOIStaleness()": "85e82baf", - "rewardsDestination(address)": "7203ca78", - "subgraphAllocatedTokens(bytes32)": "3afd23fe" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"allocationProvisionTracker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"allocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPOIPresentedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPerAllocatedToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardsPending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationId\",\"type\":\"address\"}],\"name\":\"legacyAllocations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxPOIStaleness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"indexer\",\"type\":\"address\"}],\"name\":\"rewardsDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subgraphDeploymentId\",\"type\":\"bytes32\"}],\"name\":\"subgraphAllocatedTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"},\"subgraphAllocatedTokens\":{\"details\":\"Used to calculate indexing rewards\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allocationProvisionTracker(address)\":{\"notice\":\"Tracks allocated tokens per indexer\"},\"allocations(address)\":{\"notice\":\"Allocation details\"},\"legacyAllocations(address)\":{\"notice\":\"Legacy allocation details\"},\"maxPOIStaleness()\":{\"notice\":\"Maximum amount of time, in seconds, allowed between presenting POIs to qualify for indexing rewards\"},\"rewardsDestination(address)\":{\"notice\":\"Destination of accrued indexing rewards\"},\"subgraphAllocatedTokens(bytes32)\":{\"notice\":\"Track total tokens allocated per subgraph deployment\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/AllocationManagerStorage.sol\":\"AllocationManagerV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/AllocationManagerStorage.sol\":{\"keccak256\":\"0x4e5f682e3c67a101ddefb795d43f27ef5ed9b458dc348b85e4f2290c01cf48a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dd557b9537c581bbb4bcb5843c03289cf9101236790e33e206621068ff4431b7\",\"dweb:/ipfs/QmcmDDBuGnrNmud7oS79FRsLwb88Ebkqxg8Ws3vQSSs8xQ\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 13042, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "allocations", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_struct(State)11307_storage)" - }, - { - "astId": 13048, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "legacyAllocations", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_struct(State)11933_storage)" - }, - { - "astId": 13053, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "allocationProvisionTracker", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 13056, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "maxPOIStaleness", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 13061, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "rewardsDestination", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 13066, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "subgraphAllocatedTokens", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_bytes32,t_uint256)" - }, - { - "astId": 13071, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "__gap", - "offset": 0, - "slot": "6", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_address,t_struct(State)11307_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct Allocation.State)", - "numberOfBytes": "32", - "value": "t_struct(State)11307_storage" - }, - "t_mapping(t_address,t_struct(State)11933_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct LegacyAllocation.State)", - "numberOfBytes": "32", - "value": "t_struct(State)11933_storage" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(State)11307_storage": { - "encoding": "inplace", - "label": "struct Allocation.State", - "members": [ - { - "astId": 11292, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "indexer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 11294, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "subgraphDeploymentId", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - }, - { - "astId": 11296, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "tokens", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 11298, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "createdAt", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 11300, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "closedAt", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 11302, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "lastPOIPresentedAt", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 11304, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "accRewardsPerAllocatedToken", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 11306, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "accRewardsPending", - "offset": 0, - "slot": "7", - "type": "t_uint256" - } - ], - "numberOfBytes": "256" - }, - "t_struct(State)11933_storage": { - "encoding": "inplace", - "label": "struct LegacyAllocation.State", - "members": [ - { - "astId": 11930, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "indexer", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 11932, - "contract": "contracts/utilities/AllocationManagerStorage.sol:AllocationManagerV1Storage", - "label": "subgraphDeploymentId", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } - } - }, - "contracts/utilities/AttestationManager.sol": { - "AttestationManager": { - "abi": [ - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"title\":\"AttestationManager contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A helper contract implementing attestation verification. Uses a custom implementation of EIP712 for backwards compatibility with attestations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/AttestationManager.sol\":\"AttestationManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/utilities/AttestationManager.sol\":{\"keccak256\":\"0xb50da53c59205cf06bec2263238d89d6df6d72522a1e555bfe2c3ca8558c8f88\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://18241c6b621d825234a62dc08a7f7e87b2e3e23caa5f618a74a1c48cde46052e\",\"dweb:/ipfs/QmWvo16uoasqBMVVLr557gyMsCq2Nts7EakgkdwJZuRHiF\"]},\"contracts/utilities/AttestationManagerStorage.sol\":{\"keccak256\":\"0xc14058d90b97806df0f43acfce6bc984c17ded00511ea9d7dd559d897fed7cf7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://df851043d7e2b5f0eaa611141cbc2b594c3ece4ba4e7f040215095d7bdef7ea0\",\"dweb:/ipfs/Qmf5PBxRP4dCtPonNdeoHrgmCYZDogzx4vMEsLM3h5JQDs\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 13231, - "contract": "contracts/utilities/AttestationManager.sol:AttestationManager", - "label": "_domainSeparator", - "offset": 0, - "slot": "0", - "type": "t_bytes32" - }, - { - "astId": 13236, - "contract": "contracts/utilities/AttestationManager.sol:AttestationManager", - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } - } - }, - "contracts/utilities/AttestationManagerStorage.sol": { - "AttestationManagerV1Storage": { - "abi": [], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"Gap to allow adding variables in future upgrades\"},\"_domainSeparator\":{\"details\":\"EIP712 domain separator\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/AttestationManagerStorage.sol\":\"AttestationManagerV1Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"contracts/utilities/AttestationManagerStorage.sol\":{\"keccak256\":\"0xc14058d90b97806df0f43acfce6bc984c17ded00511ea9d7dd559d897fed7cf7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://df851043d7e2b5f0eaa611141cbc2b594c3ece4ba4e7f040215095d7bdef7ea0\",\"dweb:/ipfs/Qmf5PBxRP4dCtPonNdeoHrgmCYZDogzx4vMEsLM3h5JQDs\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 13231, - "contract": "contracts/utilities/AttestationManagerStorage.sol:AttestationManagerV1Storage", - "label": "_domainSeparator", - "offset": 0, - "slot": "0", - "type": "t_bytes32" - }, - { - "astId": 13236, - "contract": "contracts/utilities/AttestationManagerStorage.sol:AttestationManagerV1Storage", - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage" - } - ], - "types": { - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } - } - }, - "contracts/utilities/Directory.sol": { - "Directory": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "address", - "name": "disputeManager", - "type": "address" - } - ], - "name": "DirectoryNotDisputeManager", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "subgraphService", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "disputeManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "tapCollector", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "curation", - "type": "address" - } - ], - "name": "SubgraphServiceDirectoryInitialized", - "type": "event" - } - ], - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"}],\"name\":\"DirectoryNotDisputeManager\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"subgraphService\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"disputeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tapCollector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"curation\",\"type\":\"address\"}],\"name\":\"SubgraphServiceDirectoryInitialized\",\"type\":\"event\"}],\"devdoc\":{\"errors\":{\"DirectoryNotDisputeManager(address,address)\":[{\"params\":{\"caller\":\"The caller address\",\"disputeManager\":\"The Dispute Manager address\"}}]},\"events\":{\"SubgraphServiceDirectoryInitialized(address,address,address,address)\":{\"params\":{\"curation\":\"The Curation contract address\",\"disputeManager\":\"The Dispute Manager contract address\",\"subgraphService\":\"The Subgraph Service contract address\",\"tapCollector\":\"The TAP Collector contract address\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"curation\":\"The Curation contract address\",\"disputeManager\":\"The Dispute Manager contract address\",\"subgraphService\":\"The Subgraph Service contract address\",\"tapCollector\":\"The TAP Collector contract address\"}}},\"stateVariables\":{\"CURATION\":{\"details\":\"Required for curation fees distribution\"},\"TAP_COLLECTOR\":{\"details\":\"Required to collect payments via Graph Horizon payments protocol\"}},\"title\":\"Directory contract\",\"version\":1},\"userdoc\":{\"errors\":{\"DirectoryNotDisputeManager(address,address)\":[{\"notice\":\"Thrown when the caller is not the Dispute Manager\"}]},\"events\":{\"SubgraphServiceDirectoryInitialized(address,address,address,address)\":{\"notice\":\"Emitted when the Directory is initialized\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor for the Directory contract\"}},\"notice\":\"This contract is meant to be inherited by {SubgraphService} contract. It contains the addresses of the contracts that the contract interacts with. Uses immutable variables to minimize gas costs.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utilities/Directory.sol\":\"Directory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":50},\"remappings\":[]},\"sources\":{\"@graphprotocol/contracts/contracts/curation/ICuration.sol\":{\"keccak256\":\"0x17e4db429003cab08cd2859db94b95e0cee1f9478c1881903a4104def8fdc048\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://52ed58228a0e92aeb3493473a6e02f92d26a4e4eb0c46d38dd446e3bfcb6691e\",\"dweb:/ipfs/QmZzWxHAztdz2Q7cobqVEf4ExGpNuqWJFYgs2oHCgApjW6\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol\":{\"keccak256\":\"0xe7c73e5a3f28048cb7d81f5914b6817216e78f4bcc1d0f0b316cd062585db854\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d78fdce88011d6bf6db3ca1e711f8b7192feb64f65e137b95a06245503fa13b4\",\"dweb:/ipfs/QmQduHFHJD4DHwDaPsjM4wwBw9GUojZ9YrVdDjiB3oMxY3\"]},\"@graphprotocol/horizon/contracts/data-service/interfaces/IDataServiceFees.sol\":{\"keccak256\":\"0x8d2bed66024782e98b52836a3be855fe6ae59c9bb9ba863e3d420c6ebb80f764\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9e945e02d82e8fef6cb25148533acaa6579c9e70eaac6e725eb30559ba91b3f8\",\"dweb:/ipfs/QmfUei9N9Exwwmrm2gL2FKcMuyGPqUpSVKY8pKE2QeJyuz\"]},\"@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol\":{\"keccak256\":\"0xb7d1ddfef1f8b718ef53f32a848ac3d1e95dff4307902241a4bb2f133ade323c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37383a20159af2d17894a99b41f3260f93288570a49c013e6b5f19cebf565100\",\"dweb:/ipfs/QmdriKPYwQPEZuwSQKqreVbLk9quvH3eriuT4JwrgNwm49\"]},\"@graphprotocol/horizon/contracts/interfaces/IPaymentsCollector.sol\":{\"keccak256\":\"0x86f3cfc8eaac309e99018dda796248fb44130b09c2e5bcfc6c63c0e568803bf8\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://176a017cb5c677222ac6a82fecd798292f5f41b4dcb9e16768fbf87816381010\",\"dweb:/ipfs/QmNuLfA5nZptMzWPuvDzJnm7Pwt7uYn1A7G8fwTWPy5Ybm\"]},\"@graphprotocol/horizon/contracts/interfaces/ITAPCollector.sol\":{\"keccak256\":\"0xa5a882c413c68bfe914bad5e419c0340d7d6a6aef453894ea10b7b96458932bc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a5dfc1a11d94b22db5a9262b7038c2fb9c69616f47a11507f59efcc5aa1dcf9b\",\"dweb:/ipfs/QmQ8ahkkfm8PXTuZc5Q8zX2RzXHoSi9btYc57KMvtCrLMU\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/interfaces/IDisputeManager.sol\":{\"keccak256\":\"0x12d82ad300a87b0ca3a43f9dc693f01bfc5765342e2b727b38e5ea234bb146c7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4b3b8a3663613e7c94b106a1f19f074d338745ca3a93047ac8d0e1db61684b34\",\"dweb:/ipfs/QmNVtbS6XRWfq2SEmagGsWMPCeRvpVj4BXVcvQ5PPtPy1i\"]},\"contracts/interfaces/ISubgraphService.sol\":{\"keccak256\":\"0xd61a4cb3fe5b91d0ac8288d85aa0cb3a8d19e78cb87e700ffb34636bf6d5853a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8fc1f600bc67f34cadaf25daf34c0f4f5e9ac8dced8353ee01853ecfbfa51d3b\",\"dweb:/ipfs/QmeidTmk5rQFtzc6S9fdA4urqewYBSdBHVfaCauPmqTFt8\"]},\"contracts/libraries/Allocation.sol\":{\"keccak256\":\"0xdc1528c7429147d886323e98c4cb02076c91e1220fa25ec263aadd09841f749f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a61d43fe10ddce9df90fea94ed52c5284f78e1419548e8ca8bdfce977642c677\",\"dweb:/ipfs/Qme35BnH5DPbEGsc2MVeFJdY2uqXEhU1WVQW1E5jawYdan\"]},\"contracts/libraries/Attestation.sol\":{\"keccak256\":\"0x25271cc1233cb1853a2e3a070d5143268384b09d2368ff1fa78c25bddc80d5d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0176185c14b41702bdfa60dc0fd27626a33f4dbf3289b1e28ef51abb37e0e125\",\"dweb:/ipfs/QmbHLdmPNRby5eyG6dFuUWHUg8aBUQSjD9E7QCgqfPxjNB\"]},\"contracts/libraries/LegacyAllocation.sol\":{\"keccak256\":\"0x705b640c357b931820f764b018ddf096a71e5097e7eb3f30e9be44b06f903563\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c99211c9ee8d1369cdc65981ec111935b6e86990025e096fdf240b04cf51ece2\",\"dweb:/ipfs/QmTpfFsy8njQYpHxw7XDcWHDeEv47msUDzD13m173CaV9p\"]},\"contracts/utilities/Directory.sol\":{\"keccak256\":\"0xad65e3c6e8ddcb2855c9fbb689d538c3709bda1b7b08f665bc7a9e905e6a9ef4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ae2fbea52fc9b412dc333d74d0984a458da80cc98defdd86bc6a9f31633df56\",\"dweb:/ipfs/QmatwUHznJRo9wvA9ggG4UZVWprdUtAeBmx7T5vDU8vBx9\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - } - } - } - } - } -} \ No newline at end of file diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/deployed_addresses.json b/packages/subgraph-service/ignition/deployments/chain-421614/deployed_addresses.json deleted file mode 100644 index b60c2e877..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/deployed_addresses.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "SubgraphServiceProxies#OZProxyDummy_DisputeManager": "0x925FC952A401483A2cF4b8fB780580a0051ecebA", - "SubgraphServiceProxies#OZProxyDummy_SubgraphService": "0x83D97ee6d5a6c34896024Df82B9aA162e8244046", - "SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager": "0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5", - "SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService": "0xBc53a58f03917A88174C2795B674734eCEeec05F", - "SubgraphServiceProxies#ProxyAdmin_DisputeManager": "0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e", - "SubgraphServiceProxies#ProxyAdmin_SubgraphService": "0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F", - "Controller#Controller": "0x59c3CA02528054C6337f63eb367a374Ac45C292C", - "Curation#Curation": "0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01", - "EpochManager#EpochManager": "0xFBb7D5597f4796225A957Fd56d368bfaD45F5036", - "HorizonProxies#OZProxyDummy_GraphPayments": "0x779934076396014b1395892C1a960CAd33548b7a", - "HorizonProxies#OZProxyDummy_PaymentsEscrow": "0x994e77A4673d74C3565B04EF572988B9c7f05778", - "RewardsManager#RewardsManager": "0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910", - "BridgeEscrow#BridgeEscrow": "0x5d767c408237E7cB90Ccc2332c1946115B5187D9", - "Curation#GraphCurationToken": "0x714fF20f04c77104eC4906E1059b5478e253daCb", - "GraphProxyAdmin#GraphProxyAdmin": "0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45", - "GraphToken#GraphToken": "0x1Aec39D141925B02bef1D1A30b80746356Dcc291", - "GraphTokenGateway#GraphTokenGateway": "0x2B8665A7E899ee5FA67460b5f296aE901016102C", - "HorizonStakingExtension#ExponentialRebates": "0xA966fedEE46EbfA9B2390986aa19fab5aE018e87", - "HorizonProxies#TransparentUpgradeableProxy_GraphPayments": "0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD", - "HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow": "0x7782536dac304b46E4Eb60751e4021ab3b09aBAb", - "Curation#GraphProxy": "0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C", - "BridgeEscrow#GraphProxy": "0x84a56624009F5CF297d52940dF268CdF8d2a09B4", - "EpochManager#GraphProxy": "0xCf27161EE08cA6087f9fF445a44474B89C10e554", - "GraphToken#GraphProxy": "0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8", - "GraphTokenGateway#GraphProxy": "0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3", - "RewardsManager#GraphProxy": "0x1C0f92202CFc66B160972D54c513A7354F507Bf8", - "BridgeEscrow#BridgeEscrow_Instance": "0x84a56624009F5CF297d52940dF268CdF8d2a09B4", - "Curation#Curation_Instance": "0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C", - "EpochManager#EpochManager_Instance": "0xCf27161EE08cA6087f9fF445a44474B89C10e554", - "GraphToken#GraphToken_Instance": "0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8", - "GraphTokenGateway#GraphTokenGateway_Instance": "0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3", - "HorizonProxies#ProxyAdmin_GraphPayments": "0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9", - "HorizonProxies#ProxyAdmin_PaymentsEscrow": "0xB3eD0202b929Cef59B0e2668a68F06FE996e8419", - "RewardsManager#RewardsManager_Instance": "0x1C0f92202CFc66B160972D54c513A7354F507Bf8", - "GraphHorizon_Periphery#Dummy": "0x923a8027EF79AaCC9B4eBC22a548F7c755153F6a", - "HorizonProxies#GraphProxy_HorizonStaking": "0xdabc7419aba5A47d368d008f42bb66c7D5801740", - "HorizonProxies#RegisteredDummy": "0x5560e7816fb9198A07d1432559cD67fd304C5046", - "GraphPayments#GraphPayments_Instance": "0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD", - "PaymentsEscrow#PaymentsEscrow": "0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6", - "PaymentsEscrow#PaymentsEscrow_Instance": "0x7782536dac304b46E4Eb60751e4021ab3b09aBAb", - "GraphPayments#GraphPayments": "0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42", - "HorizonStakingExtension#HorizonStakingExtension": "0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c", - "TAPCollector#TAPCollector": "0x84149af521E4C32dDCCb7e9F1F63a187A964396c", - "HorizonStaking#HorizonStaking": "0x5DF9C2eFB1206d11C50Ad130446364c88934a17E", - "HorizonStaking#HorizonStaking_Instance": "0xdabc7419aba5A47d368d008f42bb66c7D5801740", - "DisputeManager#DisputeManager_Instance": "0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5", - "DisputeManager#ProxyAdmin": "0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e", - "DisputeManager#DisputeManager": "0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1", - "SubgraphService#ProxyAdmin": "0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F", - "SubgraphService#SubgraphService": "0x2268247782f4b7AdB2DA810EFD6e43B27a37af54", - "SubgraphService#SubgraphService_Instance": "0xBc53a58f03917A88174C2795B674734eCEeec05F" -} diff --git a/packages/subgraph-service/ignition/deployments/chain-421614/journal.jsonl b/packages/subgraph-service/ignition/deployments/chain-421614/journal.jsonl deleted file mode 100644 index fb2cb3378..000000000 --- a/packages/subgraph-service/ignition/deployments/chain-421614/journal.jsonl +++ /dev/null @@ -1,378 +0,0 @@ - -{"chainId":421614,"type":"DEPLOYMENT_INITIALIZE"} -{"artifactId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","networkInteractionId":1,"nonce":665,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x4675097edd717a34579e7a17b1832587974a058b3b703cebca8e350958190bb4"},"type":"TRANSACTION_SEND"} -{"artifactId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","networkInteractionId":1,"nonce":666,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x96a30c734828666fe0ab2556250b99d884c38c86cf1007c849cd408d36795347"},"type":"TRANSACTION_SEND"} -{"futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","hash":"0x4675097edd717a34579e7a17b1832587974a058b3b703cebca8e350958190bb4","networkInteractionId":1,"receipt":{"blockHash":"0x4a2b220fb8234e254bbddbccade1775c7efeccc0343e340b28ae0dee26329a36","blockNumber":97665248,"contractAddress":"0x925FC952A401483A2cF4b8fB780580a0051ecebA","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"SubgraphServiceProxies#OZProxyDummy_DisputeManager","result":{"address":"0x925FC952A401483A2cF4b8fB780580a0051ecebA","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","hash":"0x96a30c734828666fe0ab2556250b99d884c38c86cf1007c849cd408d36795347","networkInteractionId":1,"receipt":{"blockHash":"0x6919345e241f960bb1d8777296c1b85fcd156f2f160160755a7d740afa5577e8","blockNumber":97665258,"contractAddress":"0x83D97ee6d5a6c34896024Df82B9aA162e8244046","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"SubgraphServiceProxies#OZProxyDummy_SubgraphService","result":{"address":"0x83D97ee6d5a6c34896024Df82B9aA162e8244046","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","constructorArgs":["0x925FC952A401483A2cF4b8fB780580a0051ecebA","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["SubgraphServiceProxies#OZProxyDummy_DisputeManager"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000925fc952a401483a2cf4b8fb780580a0051eceba000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","networkInteractionId":1,"nonce":667,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf14fa3f80378f25cbfde869983319264993e93b8c9db2ba6709e136c748b247f"},"type":"TRANSACTION_SEND"} -{"artifactId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","constructorArgs":["0x83D97ee6d5a6c34896024Df82B9aA162e8244046","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["SubgraphServiceProxies#OZProxyDummy_SubgraphService"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000083d97ee6d5a6c34896024df82b9aa162e8244046000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","networkInteractionId":1,"nonce":668,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc03d8961808eb43cf32ee42f131ed5d34eb6fbc45802434c9584cbc415691dfe"},"type":"TRANSACTION_SEND"} -{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","hash":"0xf14fa3f80378f25cbfde869983319264993e93b8c9db2ba6709e136c748b247f","networkInteractionId":1,"receipt":{"blockHash":"0xc0cbb8134a0eaf79fa62a878944fb146338512843ed9784f176f9bbcfb8a6f76","blockNumber":97665278,"contractAddress":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","logs":[{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000925fc952a401483a2cf4b8fb780580a0051eceba"]},{"address":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e002de2c9c6b7aebd9e275c1234b68b917a2b13e","logIndex":2,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","result":{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","hash":"0xc03d8961808eb43cf32ee42f131ed5d34eb6fbc45802434c9584cbc415691dfe","networkInteractionId":1,"receipt":{"blockHash":"0xaea8a176a9c6003e36d95860d9528b320df9c6ec26c5df74ca4ad4860bbf589c","blockNumber":97665289,"contractAddress":"0xBc53a58f03917A88174C2795B674734eCEeec05F","logs":[{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x00000000000000000000000083d97ee6d5a6c34896024df82b9aa162e8244046"]},{"address":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f1c68dd0c1cb5bd75c431f94c8734a5067a0b2f","logIndex":2,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","result":{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager","dependencies":["SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager"],"emitterAddress":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","eventIndex":0,"eventName":"AdminChanged","futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager_AdminChanged","nameOrIndex":"newAdmin","result":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","strategy":"basic","strategyConfig":{},"txToReadFrom":"0xf14fa3f80378f25cbfde869983319264993e93b8c9db2ba6709e136c748b247f","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService","dependencies":["SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService"],"emitterAddress":"0xBc53a58f03917A88174C2795B674734eCEeec05F","eventIndex":0,"eventName":"AdminChanged","futureId":"SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService_AdminChanged","nameOrIndex":"newAdmin","result":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","strategy":"basic","strategyConfig":{},"txToReadFrom":"0xc03d8961808eb43cf32ee42f131ed5d34eb6fbc45802434c9584cbc415691dfe","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"SubgraphServiceProxies#ProxyAdmin_DisputeManager","contractAddress":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","contractName":"ProxyAdmin","dependencies":["SubgraphServiceProxies#TransparentUpgradeableProxy_DisputeManager_AdminChanged"],"futureId":"SubgraphServiceProxies#ProxyAdmin_DisputeManager","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"SubgraphServiceProxies#ProxyAdmin_SubgraphService","contractAddress":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","contractName":"ProxyAdmin","dependencies":["SubgraphServiceProxies#TransparentUpgradeableProxy_SubgraphService_AdminChanged"],"futureId":"SubgraphServiceProxies#ProxyAdmin_SubgraphService","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"BridgeEscrow#BridgeEscrow","constructorArgs":[],"contractName":"BridgeEscrow","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"BridgeEscrow#BridgeEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"BridgeEscrow#BridgeEscrow","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051610c376101696000398061071f5250806106f65250806106cd528061089e5250806106a452508061067b5250806106525250806106295250610c376000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c4d66de81161005b578063c4d66de814610181578063d6866ea5146101a7578063e7dd4b2c146101af578063f77c4791146101d557610088565b80630621472c1461008d57806392eefe9b146100b55780639ce7abe5146100db578063a2594d821461015b575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101f9565b005b6100b3600480360360208110156100cb57600080fd5b50356001600160a01b0316610290565b6100b3600480360360408110156100f157600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184600183028401116401000000008311171561015057600080fd5b5090925090506102a4565b6100b36004803603602081101561017157600080fd5b50356001600160a01b03166103fa565b6100b36004803603602081101561019757600080fd5b50356001600160a01b0316610515565b6100b3610624565b6100b3600480360360208110156101c557600080fd5b50356001600160a01b0316610745565b6101dd6107ac565b604080516001600160a01b039092168252519081900360200190f35b6102016107c1565b610209610897565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050506040513d602081101561028b57600080fd5b505050565b6102986108c7565b6102a18161092c565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d602081101561030a57600080fd5b50516001600160a01b03163314610368576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156103dc57600080fd5b505af11580156103f0573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b505050506040513d602081101561046057600080fd5b50516001600160a01b031633146104be576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104f957600080fd5b505af115801561050d573d6000803e3d6000fd5b505050505050565b61051d6109de565b6001600160a01b0316336001600160a01b031614610578576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600054610100900460ff16806105915750610591610a03565b8061059f575060005460ff16155b6105da5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd4602e913960400191505060405180910390fd5b600054610100900460ff16158015610605576000805460ff1961ff0019909116610100171660011790555b61060e82610298565b8015610620576000805461ff00191690555b5050565b61064d7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106767f0000000000000000000000000000000000000000000000000000000000000000610a14565b61069f7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106c87f0000000000000000000000000000000000000000000000000000000000000000610a14565b6106f17f0000000000000000000000000000000000000000000000000000000000000000610a14565b61071a7f0000000000000000000000000000000000000000000000000000000000000000610a14565b6107437f0000000000000000000000000000000000000000000000000000000000000000610a14565b565b61074d6107c1565b610755610897565b6001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561026157600080fd5b6000546201000090046001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561080f57600080fd5b505afa158015610823573d6000803e3d6000fd5b505050506040513d602081101561083957600080fd5b50516001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006108c27f0000000000000000000000000000000000000000000000000000000000000000610b22565b905090565b6000546201000090046001600160a01b03163314610743576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610980576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b03831662010000810262010000600160b01b03199092169190911790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000610a0e30610bcd565b15905090565b60008060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d6020811015610a9857600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146106205760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600160205260408120546001600160a01b031680610bc757600060029054906101000a90046001600160a01b03166001600160a01b031663f7641a5e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9857600080fd5b505afa158015610bac573d6000803e3d6000fd5b505050506040513d6020811015610bc257600080fd5b505190505b92915050565b3b15159056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220c31afba89fb33b650455afd85c794f3d761dc1b1adc4a7b3036ffb0292947a4f64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"BridgeEscrow#BridgeEscrow","networkInteractionId":1,"nonce":669,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x1bbf7d97fb0863b9aef2b2f540ae3e7e83d4c117c61a6e7d11ebeb5f30bc9808"},"type":"TRANSACTION_SEND"} -{"artifactId":"Controller#Controller","constructorArgs":[],"contractName":"Controller","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Controller#Controller","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"Controller#Controller","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506100243361003360201b6109b21760201c565b61002e6001610055565b6100e7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff1615158115151415610075576100e4565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff910416156100a157426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a15b50565b610ba0806100f66000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80635c975abb116100a2578063e0e9929211610071578063e0e9929214610215578063e3056a3414610241578063eb5dd94f14610249578063f2fde38b14610275578063f7641a5e1461029b5761010b565b80635c975abb146101e057806379ba5097146101e85780639181df9c146101f057806391b4ded91461020d5761010b565b80632e292fc7116100de5780632e292fc71461017757806348bde20c146101935780634fc07d75146101b957806356371bd8146101c15761010b565b80630c340a2414610110578063147ddef51461013457806316c38b3c1461014e57806324a3d6221461016f575b600080fd5b6101186102b8565b604080516001600160a01b039092168252519081900360200190f35b61013c6102c7565b60408051918252519081900360200190f35b61016d6004803603602081101561016457600080fd5b503515156102cd565b005b610118610337565b61017f610346565b604080519115158252519081900360200190f35b61016d600480360360208110156101a957600080fd5b50356001600160a01b0316610356565b610118610412565b61016d600480360360208110156101d757600080fd5b50351515610421565b61017f610488565b61016d610498565b61016d6004803603602081101561020657600080fd5b50356105a6565b61013c610651565b61016d6004803603604081101561022b57600080fd5b50803590602001356001600160a01b0316610657565b61011861076e565b61016d6004803603604081101561025f57600080fd5b50803590602001356001600160a01b031661077d565b61016d6004803603602081101561028b57600080fd5b50356001600160a01b0316610899565b610118600480360360208110156102b157600080fd5b5035610997565b6000546001600160a01b031681565b60025481565b6000546001600160a01b03163314806102f057506004546001600160a01b031633145b61032b5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b610334816109d4565b50565b6004546001600160a01b031681565b600154600160a01b900460ff1690565b6000546001600160a01b031633146103ae576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610409576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61033481610a65565b6000546001600160a01b031690565b6000546001600160a01b031633148061044457506004546001600160a01b031633145b61047f5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b496022913960400191505060405180910390fd5b61033481610ab7565b600154600160a81b900460ff1690565b6001546001600160a01b031680158015906104bb5750336001600160a01b038216145b61050c576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905580519283525183927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a250565b60035481565b6000546001600160a01b031633146106af576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661070a576040805162461bcd60e51b815260206004820152601c60248201527f436f6e74726163742061646472657373206d7573742062652073657400000000604482015290519081900360640190fd5b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927f937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd92908290030190a25050565b6001546001600160a01b031681565b6000546001600160a01b031633146107d5576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610829576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b6000828152600560205260408082205481516392eefe9b60e01b81526001600160a01b038581166004830152925192909116926392eefe9b9260248084019382900301818387803b15801561087d57600080fd5b505af1158015610891573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146108f1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610943576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000908152600560205260409020546001600160a01b031690565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600160159054906101000a900460ff16151581151514156109f457610334565b6001805460ff60a81b1916600160a81b8315158102919091179182905560ff91041615610a2057426003555b60015460408051600160a81b90920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b600160149054906101000a900460ff1615158115151415610ad757610334565b6001805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615610b0357426002555b60015460408051600160a01b90920460ff1615158252517f511b770d1b1dc5cbd412a5017f55cbb2295b826385e5f46c1de2b6ebeb44ae02916020908290030190a15056fe4f6e6c7920476f7665726e6f72206f7220477561726469616e2063616e2063616c6ca26469706673582212207cecec10a8617577e80b5c52f6cd82da5e5974468c039848ed5e90b25c8267c764736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"Controller#Controller","networkInteractionId":1,"nonce":670,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x3ae0392f2cb0de80d200c4f33896e45cbaa7e0fc41fb1ea83fae29f9bb2a9e4d"},"type":"TRANSACTION_SEND"} -{"futureId":"Controller#Controller","hash":"0x3ae0392f2cb0de80d200c4f33896e45cbaa7e0fc41fb1ea83fae29f9bb2a9e4d","networkInteractionId":1,"receipt":{"blockHash":"0xfdb6493b02bdf6d735dc4c3f5c2e204731560c94f31476eb99239421d1ff86be","blockNumber":97665326,"contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":1,"topics":["0x8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"Controller#Controller","result":{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"Curation#Curation","constructorArgs":[],"contractName":"Curation","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Curation#Curation","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"Curation#Curation","networkInteraction":{"data":"0x6101806040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea361014052613d0960e61b6101605234801561011a57600080fd5b5060805160a05160c05160e0516101005161012051610140516101605160e01c6128cc61018f60003980610c2f52508061141b52806119025250806113f25250806113c9528061180c5250806113a05280611dbf5250806113775280611ff252508061134e52508061132552506128cc6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806399439fee11610104578063cd0ad4a2116100a2578063eff1d50e11610071578063eff1d50e146103f2578063f049b900146103fa578063f115c4271461040d578063f77c479114610415576101da565b8063cd0ad4a2146103af578063cd18119e146103c2578063d6866ea5146103d5578063eba0c8a1146103dd576101da565b80639f94c667116100de5780639f94c6671461035f578063a2594d8214610372578063a25e62c714610385578063b5217bb41461038d576101da565b806399439fee146103265780639b4d9f33146103395780639ce7abe51461034c576101da565b80634c4ea0ed1161017c5780637a2a45b81161014b5780637a2a45b8146102da57806381573288146102ed57806392eefe9b1461030057806393a90a1e14610313576101da565b80634c4ea0ed1461027f5780634c8c7a441461029f5780636536fe32146102b457806369db11a1146102c7576101da565b806326058249116101b857806326058249146102235780633718896d14610238578063375a54ab1461024b57806346e855da1461026c576101da565b80630faaf87f146101df578063185360f91461020857806324bdeec714610210575b600080fd5b6101f26101ed366004612175565b61041d565b6040516101ff91906122ab565b60405180910390f35b6101f26104da565b6101f261021e366004612196565b6104e0565b61022b610662565b6040516101ff9190612273565b6101f2610246366004612175565b610677565b61025e610259366004612196565b6108b6565b6040516101ff9291906127b8565b6101f261027a36600461215d565b610af7565b61029261028d36600461215d565b610b0c565b6040516101ff91906122a0565b6102b26102ad3660046120e4565b610b20565b005b6102b26102c236600461215d565b610cb0565b6101f26102d5366004612175565b610cc4565b6101f26102e8366004612175565b610d78565b6102b26102fb366004612175565b610d8b565b6102b261030e3660046120c8565b610e5e565b6102b26103213660046120c8565b610e6f565b6101f261033436600461215d565b610ecb565b6102b26103473660046120c8565b610f72565b6102b261035a3660046121c1565b610f83565b6101f261036d366004612132565b6110d9565b6102b26103803660046120c8565b61118d565b61022b6112a8565b6103a061039b36600461215d565b6112be565b6040516101ff939291906127dc565b6102b26103bd366004612259565b6112ef565b6102b26103d0366004612259565b61130f565b6102b2611320565b6103e5611441565b6040516101ff9190612801565b61022b611454565b61025e610408366004612175565b611463565b6103e56114c0565b61022b6114cc565b6000828152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b0316908201528161046d85610ecb565b82519091506104975760405162461bcd60e51b815260040161048e906125e8565b60405180910390fd5b838110156104b75760405162461bcd60e51b815260040161048e906124f3565b81516104cf9082906104c990876114db565b90611534565b925050505b92915050565b600d5481565b60006104ea61159b565b33836105085760405162461bcd60e51b815260040161048e906122b4565b8361051382876110d9565b10156105315760405162461bcd60e51b815260040161048e906124af565b600061053d868661041d565b90508381101561055f5760405162461bcd60e51b815260040161048e906123ff565b61056886611709565b6000868152600f60205260409020805461058290836117a8565b8155600181015460405163079cc67960e41b8152600160201b9091046001600160a01b0316906379cc6790906105be9086908a90600401612287565b600060405180830381600087803b1580156105d857600080fd5b505af11580156105ec573d6000803e3d6000fd5b505050506105f987610ecb565b61060257600081555b61061461060d611805565b8484611835565b86836001600160a01b03167fe14cd5e80f6821ded0538e85a537487acf10bb5e97a12176df56a099e90bfb3484896040516106509291906127b8565b60405180910390a35095945050505050565b6010546201000090046001600160a01b031681565b600061068161159b565b6106896118fb565b6001600160a01b0316336001600160a01b0316146106b95760405162461bcd60e51b815260040161048e90612781565b816106d65760405162461bcd60e51b815260040161048e906126c0565b60006106e28484611926565b6000858152600f6020526040902090915033906106fe86610b0c565b6107ca576001810154600160201b90046001600160a01b03166107ca57600c5460009061073a90600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610769903090600401612273565b600060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6107d386611709565b60006107dd611805565b90506107ea818488611a76565b81546107f69087611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f19906108329086908890600401612287565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505086836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf888760006040516108a3939291906127c6565b60405180910390a3509195945050505050565b6000806108c161159b565b836108de5760405162461bcd60e51b815260040161048e906126c0565b6000806108eb8787611463565b915091508482101561090f5760405162461bcd60e51b815260040161048e906123ff565b6000878152600f60205260409020339061092889610b0c565b6109f4576001810154600160201b90046001600160a01b03166109f457600c5460009061096490600160401b90046001600160a01b03166119d9565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de890610993903090600401612273565b600060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b5050506001830180546001600160a01b03909316600160201b02640100000000600160c01b031990931692909217909155505b6109fd89611709565b6000610a07611805565b9050610a1481848b611a76565b610a1e8185611b2f565b610a33610a2b8a866117a8565b835490611ad5565b825560018201546040516340c10f1960e01b8152600160201b9091046001600160a01b0316906340c10f1990610a6f9086908990600401612287565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505089836001600160a01b03167fb7bf5f4e5b23ef992df9875ecea572620d18dab0c1a5486a9b695d20d9ec50cf8b8888604051610adf939291906127c6565b60405180910390a35092989197509095505050505050565b6000818152600f60205260409020545b919050565b6000908152600f6020526040902054151590565b610b28611b7b565b6001600160a01b0316336001600160a01b031614610b83576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b601054610100900460ff1680610b9c5750610b9c611ba0565b80610baa575060105460ff16155b610be55760405162461bcd60e51b815260040180806020018281038252602e815260200180612848602e913960400191505060405180910390fd5b601054610100900460ff16158015610c10576010805460ff1961ff0019909116610100171660011790555b610c1985610e66565b600c805467ffffffff000000001916600160201b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff160217905560405160008051602061282883398151915290610c74906123d2565b60405180910390a1610c8583611bb1565b610c8e82611c16565b610c9784611c54565b8015610ca9576010805461ff00191690555b5050505050565b610cb8611ce4565b610cc181611c16565b50565b600081610ce35760405162461bcd60e51b815260040161048e90612322565b6000610cef8484611926565b6000858152600f6020908152604080832081516060810183528154815260019091015463ffffffff811693820193909352600160201b9092046001600160a01b031690820152919250610d4b83610d4588610ecb565b90611ad5565b8251909150600090610d5d9087611ad5565b9050610d6d826104c983876114db565b979650505050505050565b6000610d848383611926565b9392505050565b6010546201000090046001600160a01b0316331480610dc25750610dad611db8565b6001600160a01b0316336001600160a01b0316145b610dde5760405162461bcd60e51b815260040161048e9061255c565b610de782610b0c565b610e035760405162461bcd60e51b815260040161048e9061245c565b6000828152600f602052604090208054610e1d9083611ad5565b815560405183907ff17fdee613a92b35db6b7598eb43750b24d4072eb304e6eca80121e40402e34b90610e519085906122ab565b60405180910390a2505050565b610e66611de3565b610cc181611e42565b610e77611ce4565b6010805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015610f6957806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2c57600080fd5b505afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612241565b610d84565b60009392505050565b610f7a611ce4565b610cc181611c54565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b505050506040513d6020811015610fe957600080fd5b50516001600160a01b03163314611047576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050565b6000818152600f6020526040812060010154600160201b90046001600160a01b03168015611182576040516370a0823160e01b81526001600160a01b038216906370a082319061112d908790600401612273565b60206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612241565b611185565b60005b949350505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b50516001600160a01b03163314611251576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050505050565b600c54600160401b90046001600160a01b031681565b600f602052600090815260409020805460019091015463ffffffff811690600160201b90046001600160a01b031683565b6112f7611ce4565b60405162461bcd60e51b815260040161048e906123a3565b611317611ce4565b610cc181611bb1565b6113497f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113727f0000000000000000000000000000000000000000000000000000000000000000611eea565b61139b7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113c47f0000000000000000000000000000000000000000000000000000000000000000611eea565b6113ed7f0000000000000000000000000000000000000000000000000000000000000000611eea565b6114167f0000000000000000000000000000000000000000000000000000000000000000611eea565b61143f7f0000000000000000000000000000000000000000000000000000000000000000611eea565b565b600c54600160201b900463ffffffff1681565b600e546001600160a01b031681565b600c546000908190819061149790620f4240906104c990879061149190849063ffffffff908116906117a816565b906114db565b905060006114a585836117a8565b905060006114b38784611926565b9791965090945050505050565b600c5463ffffffff1681565b6000546001600160a01b031681565b6000826114ea575060006104d4565b828202828482816114f757fe5b0414610d845760405162461bcd60e51b81526004018080602001828103825260218152602001806128766021913960400191505060405180910390fd5b600080821161158a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161159357fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d602081101561161157600080fd5b50511561164e576040805162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015290519081900360640190fd5b60008054906101000a90046001600160a01b03166001600160a01b0316632e292fc76040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d60208110156116c457600080fd5b50511561143f576040805162461bcd60e51b815260206004820152600e60248201526d14185c9d1a585b0b5c185d5cd95960921b604482015290519081900360640190fd5b6000611713611feb565b90506001600160a01b038116156117a4576040516307470bfb60e21b81526001600160a01b03821690631d1c2fec906117509085906004016122ab565b602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190612241565b505b5050565b6000828211156117ff576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b905090565b80156117a257826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050506040513d60208110156118bc57600080fd5b50516117a2576040805162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000828152600f602090815260408083208151606081018352815480825260019092015463ffffffff811694820194909452600160201b9093046001600160a01b0316918301919091526119c657600d548310156119965760405162461bcd60e51b815260040161048e90612359565b600d546119be906119b6906104c96119ae87836117a8565b6001906114db565b600190611ad5565b9150506104d4565b8051611185906104c98561149188610ecb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610b07576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b80156117a257604080516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018490529151918516916323b872dd916064808201926020929091908290030181600087803b15801561189257600080fd5b600082820183811015610d84576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b80156117a457816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561128c57600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611bab306120ae565b15905090565b620f424063ffffffff82161115611bda5760405162461bcd60e51b815260040161048e906126f7565b600c805463ffffffff191663ffffffff831617905560405160008051602061282883398151915290611c0b906125b9565b60405180910390a150565b80611c335760405162461bcd60e51b815260040161048e90612645565b600d81905560405160008051602061282883398151915290611c0b9061242c565b6001600160a01b038116611c7a5760405162461bcd60e51b815260040161048e906122eb565b611c83816120ae565b611c9f5760405162461bcd60e51b815260040161048e90612689565b600c805468010000000000000000600160e01b031916600160401b6001600160a01b0384160217905560405160008051602061282883398151915290611c0b90612754565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3057600080fd5b505afa158015611d44573d6000803e3d6000fd5b505050506040513d6020811015611d5a57600080fd5b50516001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b60006118307f0000000000000000000000000000000000000000000000000000000000000000612012565b6000546001600160a01b0316331461143f576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116611e96576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015611f3757600080fd5b505afa158015611f4b573d6000803e3d6000fd5b505050506040513d6020811015611f6157600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146117a45760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b60006118307f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b0316806104d45760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b50519392505050565b3b151590565b803563ffffffff81168114610b0757600080fd5b6000602082840312156120d9578081fd5b8135610d8481612812565b600080600080608085870312156120f9578283fd5b843561210481612812565b9350602085013561211481612812565b9250612122604086016120b4565b9396929550929360600135925050565b60008060408385031215612144578182fd5b823561214f81612812565b946020939093013593505050565b60006020828403121561216e578081fd5b5035919050565b60008060408385031215612187578182fd5b50508035926020909101359150565b6000806000606084860312156121aa578283fd5b505081359360208301359350604090920135919050565b6000806000604084860312156121d5578283fd5b83356121e081612812565b9250602084013567ffffffffffffffff808211156121fc578384fd5b818601915086601f83011261220f578384fd5b81358181111561221d578485fd5b87602082850101111561222e578485fd5b6020830194508093505050509250925092565b600060208284031215612252578081fd5b5051919050565b60006020828403121561226a578081fd5b610d84826120b4565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60208082526017908201527f43616e6e6f74206275726e207a65726f207369676e616c000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206d6173746572206d757374206265206e6f6e2d656d7074790000604082015260600190565b6020808252601d908201527f43616e27742063616c63756c6174652077697468203020746f6b656e73000000604082015260600190565b6020808252602a908201527f4375726174696f6e206465706f7369742069732062656c6f77206d696e696d756040820152691b481c995c5d5a5c995960b21b606082015260800190565b6020808252601590820152742737ba1034b6b83632b6b2b73a32b21034b710261960591b604082015260600190565b60208082526013908201527264656661756c7452657365727665526174696f60681b604082015260600190565b60208082526013908201527229b634b83830b3b290383937ba32b1ba34b7b760691b604082015260600190565b6020808252601690820152751b5a5b9a5b5d5b50dd5c985d1a5bdb91195c1bdcda5d60521b604082015260600190565b60208082526033908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527274656420746f20636f6c6c656374206665657360681b606082015260800190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207369676e616c207468616e20796f756040820152631037bbb760e11b606082015260800190565b60208082526043908201527f5369676e616c206d7573742062652061626f7665206f7220657175616c20746f60408201527f207369676e616c2069737375656420696e20746865206375726174696f6e20706060820152621bdbdb60ea1b608082015260a00190565b60208082526037908201527f43616c6c6572206d75737420626520746865207375626772617068207365727660408201527f696365206f72207374616b696e6720636f6e7472616374000000000000000000606082015260800190565b6020808252601590820152746375726174696f6e54617850657263656e7461676560581b604082015260600190565b6020808252603b908201527f5375626772617068206465706c6f796d656e74206d757374206265206375726160408201527f74656420746f20706572666f726d2063616c63756c6174696f6e730000000000606082015260800190565b60208082526024908201527f4d696e696d756d206375726174696f6e206465706f7369742063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601f908201527f546f6b656e206d6173746572206d757374206265206120636f6e747261637400604082015260600190565b6020808252601a908201527f43616e6e6f74206465706f736974207a65726f20746f6b656e73000000000000604082015260600190565b60208082526039908201527f4375726174696f6e207461782070657263656e74616765206d7573742062652060408201527f62656c6f77206f7220657175616c20746f204d41585f50504d00000000000000606082015260800190565b60208082526013908201527231bab930ba34b7b72a37b5b2b726b0b9ba32b960691b604082015260600190565b6020808252601a908201527f4f6e6c792074686520474e532063616e2063616c6c2074686973000000000000604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b92835263ffffffff9190911660208301526001600160a01b0316604082015260600190565b63ffffffff91909116815260200190565b6001600160a01b0381168114610cc157600080fdfe96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122048a2c0bbd827c328fe29a977d84099426057dab6398c943cb2b41e9b1c61d2c064736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"Curation#Curation","networkInteractionId":1,"nonce":671,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x81b10a161cce12b09a56d7e949a6c31fe83db9020d8a23a4c118b0a58337a712"},"type":"TRANSACTION_SEND"} -{"futureId":"Curation#Curation","hash":"0x81b10a161cce12b09a56d7e949a6c31fe83db9020d8a23a4c118b0a58337a712","networkInteractionId":1,"receipt":{"blockHash":"0x2d398c8a9683bf19552720ad47d591082ffd2a31cd2567211729dc171f2edf0e","blockNumber":97665339,"contractAddress":"0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"Curation#Curation","result":{"address":"0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"Curation#GraphCurationToken","constructorArgs":[],"contractName":"GraphCurationToken","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Curation#GraphCurationToken","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"Curation#GraphCurationToken","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506114ec806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806379ba5097116100a2578063a9059cbb11610071578063a9059cbb14610352578063c4d66de81461037e578063dd62ed3e146103a4578063e3056a34146103d2578063f2fde38b146103da57610116565b806379ba5097146102ea57806379cc6790146102f257806395d89b411461031e578063a457c2d71461032657610116565b806323b872dd116100e957806323b872dd14610216578063313ce5671461024c578063395093511461026a57806340c10f191461029657806370a08231146102c457610116565b806306fdde031461011b578063095ea7b3146101985780630c340a24146101d857806318160ddd146101fc575b600080fd5b610123610400565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015d578181015183820152602001610145565b50505050905090810190601f16801561018a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c4600480360360408110156101ae57600080fd5b506001600160a01b038135169060200135610496565b604080519115158252519081900360200190f35b6101e06104b3565b604080516001600160a01b039092168252519081900360200190f35b6102046104c2565b60408051918252519081900360200190f35b6101c46004803603606081101561022c57600080fd5b506001600160a01b038135811691602081013590911690604001356104c8565b61025461054f565b6040805160ff9092168252519081900360200190f35b6101c46004803603604081101561028057600080fd5b506001600160a01b038135169060200135610558565b6102c2600480360360408110156102ac57600080fd5b506001600160a01b0381351690602001356105a6565b005b610204600480360360208110156102da57600080fd5b50356001600160a01b031661060c565b6102c2610627565b6102c26004803603604081101561030857600080fd5b506001600160a01b038135169060200135610737565b610123610799565b6101c46004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356107fa565b6101c46004803603604081101561036857600080fd5b506001600160a01b038135169060200135610862565b6102c26004803603602081101561039457600080fd5b50356001600160a01b0316610876565b610204600480360360408110156103ba57600080fd5b506001600160a01b0381358116916020013516610972565b6101e061099d565b6102c2600480360360208110156103f057600080fd5b50356001600160a01b03166109ac565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b60006104aa6104a3610aaa565b8484610aae565b50600192915050565b6065546001600160a01b031681565b60355490565b60006104d5848484610b9a565b610545846104e1610aaa565b61054085604051806060016040528060288152602001611400602891396001600160a01b038a1660009081526034602052604081209061051f610aaa565b6001600160a01b031681526020810191909152604001600020549190610cf7565b610aae565b5060019392505050565b60385460ff1690565b60006104aa610565610aaa565b846105408560346000610576610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610d8e565b6065546001600160a01b031633146105fe576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610def565b5050565b6001600160a01b031660009081526033602052604090205490565b6066546001600160a01b0316801580159061064a5750336001600160a01b038216145b61069b576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b606580546001600160a01b038381166001600160a01b0319808416919091179384905560668054909116905560405191811692169082907f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f90600090a36066546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6065546001600160a01b0316331461078f576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106088282610ee1565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561048c5780601f106104615761010080835404028352916020019161048c565b60006104aa610807610aaa565b84610540856040518060600160405280602581526020016114926025913960346000610831610aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610cf7565b60006104aa61086f610aaa565b8484610b9a565b600054610100900460ff168061088f575061088f610fdd565b8061089d575060005460ff16155b6108d85760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015610903576000805460ff1961ff0019909116610100171660011790555b61090c82610fee565b61095d604051806040016040528060148152602001734772617068204375726174696f6e20536861726560601b8152506040518060400160405280600381526020016247435360e81b815250611010565b8015610608576000805461ff00191690555050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6066546001600160a01b031681565b6065546001600160a01b03163314610a04576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610a56576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b606680546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b038316610af35760405162461bcd60e51b815260040180806020018281038252602481526020018061146e6024913960400191505060405180910390fd5b6001600160a01b038216610b385760405162461bcd60e51b815260040180806020018281038252602281526020018061138a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610bdf5760405162461bcd60e51b81526004018080602001828103825260258152602001806114496025913960400191505060405180910390fd5b6001600160a01b038216610c245760405162461bcd60e51b81526004018080602001828103825260238152602001806113456023913960400191505060405180910390fd5b610c2f8383836110c1565b610c6c816040518060600160405280602681526020016113ac602691396001600160a01b0386166000908152603360205260409020549190610cf7565b6001600160a01b038085166000908152603360205260408082209390935590841681522054610c9b9082610d8e565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d4b578181015183820152602001610d33565b50505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610de8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610e4a576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e56600083836110c1565b603554610e639082610d8e565b6035556001600160a01b038216600090815260336020526040902054610e899082610d8e565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610f265760405162461bcd60e51b81526004018080602001828103825260218152602001806114286021913960400191505060405180910390fd5b610f32826000836110c1565b610f6f81604051806060016040528060228152602001611368602291396001600160a01b0385166000908152603360205260409020549190610cf7565b6001600160a01b038316600090815260336020526040902055603554610f9590826110c6565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610fe830611123565b15905090565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16806110295750611029610fdd565b80611037575060005460ff16155b6110725760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561109d576000805460ff1961ff0019909116610100171660011790555b6110a5611129565b6110af83836111cb565b80156110c1576000805461ff00191690555b505050565b60008282111561111d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806111425750611142610fdd565b80611150575060005460ff16155b61118b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff161580156111b6576000805460ff1961ff0019909116610100171660011790555b80156111c8576000805461ff00191690555b50565b600054610100900460ff16806111e457506111e4610fdd565b806111f2575060005460ff16155b61122d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806113d2602e913960400191505060405180910390fd5b600054610100900460ff16158015611258576000805460ff1961ff0019909116610100171660011790555b825161126b9060369060208601906112a3565b50815161127f9060379060208501906112a3565b506038805460ff1916601217905580156110c1576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826112d9576000855561131f565b82601f106112f257805160ff191683800117855561131f565b8280016001018555821561131f579182015b8281111561131f578251825591602001919060010190611304565b5061132b92915061132f565b5090565b5b8082111561132b576000815560010161133056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b687fddcd01dbad6e1d5fbd49cb041f69ed61684a12a4c26c6e37e0f5ad7c2a64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"Curation#GraphCurationToken","networkInteractionId":1,"nonce":672,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x9d3f08284859c2c3f523c7c7bf48aaecadb5aa4e9cbc6f4abb001c48db908ba3"},"type":"TRANSACTION_SEND"} -{"artifactId":"EpochManager#EpochManager","constructorArgs":[],"contractName":"EpochManager","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"EpochManager#EpochManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"EpochManager#EpochManager","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161103461016460003980610aac525080610a83525080610a5a525080610a31525080610a085250806109df5250806109b652506110346000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a2594d82116100ad578063cd6dc68711610071578063cd6dc687146102c4578063d0cfa46e146102f0578063d6866ea5146102f8578063f77c479114610300578063faa1a23c146103245761012c565b8063a2594d821461027e578063ab93122c146102a4578063b4146a0b146102ac578063c46e58eb146102b4578063cc65149b146102bc5761012c565b806376671808116100f457806376671808146101ab57806385df51fd146101b35780638ae63d6d146101d057806392eefe9b146101d85780639ce7abe5146101fe5761012c565b806319c3b82d146101315780631b28126d1461014b5780631ce05d381461016857806354eea7961461018457806357d775f8146101a3575b600080fd5b61013961032c565b60408051918252519081900360200190f35b6101396004803603602081101561016157600080fd5b5035610353565b61017061037f565b604080519115158252519081900360200190f35b6101a16004803603602081101561019a57600080fd5b5035610392565b005b61013961047f565b610139610485565b610139600480360360208110156101c957600080fd5b503561049b565b61013961053b565b6101a1600480360360208110156101ee57600080fd5b50356001600160a01b031661053f565b6101a16004803603604081101561021457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561023f57600080fd5b82018360208201111561025157600080fd5b8035906020019184600183028401116401000000008311171561027357600080fd5b509092509050610553565b6101a16004803603602081101561029457600080fd5b50356001600160a01b03166106a9565b6101396107c4565b6101396107e6565b6101a16107ec565b610139610888565b6101a1600480360360408110156102da57600080fd5b506001600160a01b03813516906020013561088e565b610139610999565b6101a16109b1565b610308610ad2565b604080516001600160a01b039092168252519081900360200190f35b610139610ae1565b600061034e600c54610348600f5461034261053b565b90610ae7565b90610b49565b905090565b60008061035e610485565b905080831061036e576000610378565b6103788184610ae7565b9392505050565b6000610389610485565b600d5414905090565b61039a610bb0565b600081116103ea576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b600c5481141561042b5760405162461bcd60e51b8152600401808060200182810382526029815260200180610f666029913960400191505060405180910390fd5b610433610485565b600e5561043e6107c4565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a250565b600c5481565b600061034e61049261032c565b600e5490610c84565b6000806104a661053b565b90508083106104e65760405162461bcd60e51b8152600401808060200182810382526023815260200180610fdc6023913960400191505060405180910390fd5b6101008110806104fa575061010081038310155b6105355760405162461bcd60e51b815260040180806020018281038252602c815260200180610fb0602c913960400191505060405180910390fd5b50504090565b4390565b610547610cde565b61055081610d3d565b50565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b505050506040513d60208110156105b957600080fd5b50516001600160a01b03163314610617576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561068b57600080fd5b505af115801561069f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106e557600080fd5b505af11580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516001600160a01b0316331461076d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050505050565b600061034e6107dd600c546107d761032c565b90610de5565b600f5490610c84565b600e5481565b6107f461037f565b15610846576040805162461bcd60e51b815260206004820152601960248201527f43757272656e742065706f636820616c72656164792072756e00000000000000604482015290519081900360640190fd5b61084e610485565b600d8190556040805133815290517f666a37ccc682d20f8c51c5f6fd835cbadbcaaf09921e076282446e42d7264e3e9181900360200190a2565b600f5481565b610896610e3e565b6001600160a01b0316336001600160a01b0316146108f1576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b60008111610941576040805162461bcd60e51b8152602060048201526018602482015277045706f6368206c656e6774682063616e6e6f7420626520360441b604482015290519081900360640190fd5b61094a82610547565b6001600e5561095761053b565b600f55600c819055600e546040805183815290517f25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce24419181900360200190a25050565b60006109a36107c4565b6109ab61053b565b03905090565b6109da7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a037f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a2c7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a557f0000000000000000000000000000000000000000000000000000000000000000610e63565b610a7e7f0000000000000000000000000000000000000000000000000000000000000000610e63565b610aa77f0000000000000000000000000000000000000000000000000000000000000000610e63565b610ad07f0000000000000000000000000000000000000000000000000000000000000000610e63565b565b6000546001600160a01b031681565b600d5481565b600082821115610b3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000808211610b9f576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610ba857fe5b049392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfc57600080fd5b505afa158015610c10573d6000803e3d6000fd5b505050506040513d6020811015610c2657600080fd5b50516001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b600082820183811015610378576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610ad0576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b038116610d91576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600082610df457506000610b43565b82820282848281610e0157fe5b04146103785760405162461bcd60e51b8152600401808060200182810382526021815260200180610f8f6021913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d6020811015610eda57600080fd5b50516000838152600160205260409020549091506001600160a01b03808316911614610f615760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25b505056fe45706f6368206c656e677468206d75737420626520646966666572656e7420746f2063757272656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e206f6e6c792072657472696576652068617368657320666f72206c6173742032353620626c6f636b7343616e206f6e6c79207265747269657665207061737420626c6f636b20686173686573a26469706673582212204f2e402817a5814bc2adbaf12f2c502ea545dc841b2e7971e3e247c0bfe5bd9464736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"EpochManager#EpochManager","networkInteractionId":1,"nonce":673,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x2926b3a82c5526008763763ba1fc2e6f4a0b058e2aa2e3600aff63f2678d358c"},"type":"TRANSACTION_SEND"} -{"futureId":"EpochManager#EpochManager","hash":"0x2926b3a82c5526008763763ba1fc2e6f4a0b058e2aa2e3600aff63f2678d358c","networkInteractionId":1,"receipt":{"blockHash":"0xf9a1d638963db590068461eb5be0fb291361be215852bb0b94745c5fdb41e7c6","blockNumber":97665362,"contractAddress":"0xFBb7D5597f4796225A957Fd56d368bfaD45F5036","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"EpochManager#EpochManager","result":{"address":"0xFBb7D5597f4796225A957Fd56d368bfaD45F5036","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"GraphProxyAdmin#GraphProxyAdmin","constructorArgs":[],"contractName":"GraphProxyAdmin","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphProxyAdmin#GraphProxyAdmin","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphProxyAdmin#GraphProxyAdmin","networkInteraction":{"data":"0x608060405234801561001057600080fd5b506100243361002960201b610a0c1760201c565b61004b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b610a648061005a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637eff275e116100715780637eff275e146101b157806399a88ec4146101df578063e3056a341461020d578063eb451a0214610215578063f2fde38b14610243578063f3b7dead14610269576100a9565b806307ebde0e146100ae5780630c340a2414610139578063204e1c7a1461015d5780635bf410eb1461018357806379ba5097146101a9575b600080fd5b610137600480360360608110156100c457600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156100f857600080fd5b82018360208201111561010a57600080fd5b8035906020019184600183028401116401000000008311171561012c57600080fd5b50909250905061028f565b005b610141610388565b604080516001600160a01b039092168252519081900360200190f35b6101416004803603602081101561017357600080fd5b50356001600160a01b0316610397565b6101416004803603602081101561019957600080fd5b50356001600160a01b031661046a565b610137610525565b610137600480360360408110156101c757600080fd5b506001600160a01b0381358116916020013516610633565b610137600480360360408110156101f557600080fd5b506001600160a01b03813581169160200135166106f6565b61014161079d565b6101376004803603604081101561022b57600080fd5b506001600160a01b03813581169160200135166107ac565b6101376004803603602081101561025957600080fd5b50356001600160a01b0316610853565b6101416004803603602081101561027f57600080fd5b50356001600160a01b0316610951565b6000546001600160a01b031633146102e7576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b836001600160a01b0316639ce7abe58484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561036a57600080fd5b505af115801561037e573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b50915091508161044b576040805162461bcd60e51b8152602060048201526016602482015275141c9bde1e481a5b5c1b0818d85b1b0819985a5b195960521b604482015290519081900360640190fd5b80806020019051602081101561046057600080fd5b5051949350505050565b6000806000836001600160a01b0316604051808063396f7b2360e01b8152506004019050600060405180830381855afa9150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601d60248201527f50726f78792070656e64696e67496d706c2063616c6c206661696c6564000000604482015290519081900360640190fd5b6001546001600160a01b031680158015906105485750336001600160a01b038216145b610599576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000546001600160a01b0316331461068b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663704b6c02826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461074e576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6001546001600160a01b031681565b6000546001600160a01b03163314610804576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b816001600160a01b031663a2594d82826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156106da57600080fd5b6000546001600160a01b031633146108ab576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b0381166108fd576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146109b0576040519150601f19603f3d011682016040523d82523d6000602084013e6109b5565b606091505b50915091508161044b576040805162461bcd60e51b815260206004820152601760248201527f50726f78792061646d696e2063616c6c206661696c6564000000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039290921691909117905556fea26469706673582212208b271ee4c7625d89f662c15e90f70e142245bf56f0595043fe9af742b09d958c64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphProxyAdmin#GraphProxyAdmin","networkInteractionId":1,"nonce":674,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x51c1db4798ea9bbacc08f180d8fe1481f583c397a2fe8797dc8b0ba99160a84c"},"type":"TRANSACTION_SEND"} -{"artifactId":"GraphToken#GraphToken","constructorArgs":[],"contractName":"GraphToken","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphToken#GraphToken","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphToken#GraphToken","networkInteraction":{"data":"0x6101206040527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726080527fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f9660a0527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60c0527fe33842a7acd1d5a1d28f25a931703e5605152dc48d64dc4716efdae1f565959160e0527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610100523480156100c657600080fd5b5060805160a05160c05160e0516101005161261e61010660003980611547525080611eae525080611e5e525080611e3d525080611e1c525061261e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638c2a993e1161011a578063a9059cbb116100ad578063ca52d7d71161007c578063ca52d7d71461067a578063d505accf146106a0578063dd62ed3e146106f1578063e3056a341461071f578063f2fde38b14610727576101fb565b8063a9059cbb146105fa578063aa271e1a14610626578063c2eeeebd1461064c578063c4d66de814610654576101fb565b806398650275116100e957806398650275146105205780639ce7abe514610528578063a2594d82146105a8578063a457c2d7146105ce576101fb565b80638c2a993e146104a057806390646b4a146104cc57806395d89b41146104f2578063983b2d56146104fa576101fb565b8063395093511161019257806374f4f5471161016157806374f4f5471461041a57806379ba50971461044657806379cc67901461044e5780637ecebe001461047a576101fb565b8063395093511461037f57806340c10f19146103ab57806342966c68146103d757806370a08231146103f4576101fb565b806318160ddd116101ce57806318160ddd146102e957806323b872dd146103035780633092afd514610339578063313ce56714610361576101fb565b806306fdde0314610200578063095ea7b31461027d5780630c340a24146102bd578063116191b6146102e1575b600080fd5b61020861074d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b0381351690602001356107e3565b604080519115158252519081900360200190f35b6102c5610800565b604080516001600160a01b039092168252519081900360200190f35b6102c561080f565b6102f161081e565b60408051918252519081900360200190f35b6102a96004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610824565b61035f6004803603602081101561034f57600080fd5b50356001600160a01b03166108ab565b005b610369610958565b6040805160ff9092168252519081900360200190f35b6102a96004803603604081101561039557600080fd5b506001600160a01b038135169060200135610961565b61035f600480360360408110156103c157600080fd5b506001600160a01b0381351690602001356109af565b61035f600480360360208110156103ed57600080fd5b5035610a0e565b6102f16004803603602081101561040a57600080fd5b50356001600160a01b0316610a1f565b61035f6004803603604081101561043057600080fd5b506001600160a01b038135169060200135610a3a565b61035f610ad4565b61035f6004803603604081101561046457600080fd5b506001600160a01b038135169060200135610be2565b6102f16004803603602081101561049057600080fd5b50356001600160a01b0316610c3c565b61035f600480360360408110156104b657600080fd5b506001600160a01b038135169060200135610c4e565b61035f600480360360208110156104e257600080fd5b50356001600160a01b0316610ce8565b610208610de1565b61035f6004803603602081101561051057600080fd5b50356001600160a01b0316610e42565b61035f610eef565b61035f6004803603604081101561053e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561056957600080fd5b82018360208201111561057b57600080fd5b8035906020019184600183028401116401000000008311171561059d57600080fd5b509092509050610f43565b61035f600480360360208110156105be57600080fd5b50356001600160a01b0316611099565b6102a9600480360360408110156105e457600080fd5b506001600160a01b0381351690602001356111b4565b6102a96004803603604081101561061057600080fd5b506001600160a01b03813516906020013561121c565b6102a96004803603602081101561063c57600080fd5b50356001600160a01b0316611230565b6102c561124e565b61035f6004803603602081101561066a57600080fd5b50356001600160a01b031661125d565b61035f6004803603602081101561069057600080fd5b50356001600160a01b03166113d3565b61035f600480360360e08110156106b657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356114cf565b6102f16004803603604081101561070757600080fd5b506001600160a01b0381358116916020013516611680565b6102c56116ab565b61035f6004803603602081101561073d57600080fd5b50356001600160a01b03166116ba565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f06117b8565b84846117bc565b50600192915050565b6000546001600160a01b031681565b60ca546001600160a01b031681565b60365490565b60006108318484846118a8565b6108a18461083d6117b8565b61089c8560405180606001604052806028815260200161250e602891396001600160a01b038a1660009081526035602052604081209061087b6117b8565b6001600160a01b031681526020810191909152604001600020549190611a05565b6117bc565b5060019392505050565b6000546001600160a01b03163314610903576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b61090c81611230565b61094c576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b61095581611a9c565b50565b60395460ff1690565b60006107f761096e6117b8565b8461089c856035600061097f6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ae5565b6109b833611230565b610a00576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b610a0a8282611b46565b5050565b610955610a196117b8565b82611c38565b6001600160a01b031660009081526034602052604090205490565b60ca546001600160a01b03163314610a87576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610a918282610be2565b6040805182815290516001600160a01b038416917fe87aeeb22c5753db7f543198a4c3089d2233040ea9d1cab0eaa3b96d94d4fc6e919081900360200190a25050565b6001546001600160a01b03168015801590610af75750336001600160a01b038216145b610b48576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b031980841691909117808555600180549092169091556040519282169391169183917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f91a36001546040516001600160a01b03918216918416907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610c198260405180606001604052806024815260200161253660249139610c1286610c0d6117b8565b611680565b9190611a05565b9050610c2d83610c276117b8565b836117bc565b610c378383611c38565b505050565b609a6020526000908152604090205481565b60ca546001600160a01b03163314610c9b576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b610ca58282611b46565b6040805182815290516001600160a01b038416917fae4b6e741e38054ad6705655cc56c91c184f6768f76b41e10803e2766d89e19f919081900360200190a25050565b6000546001600160a01b03163314610d40576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d8d576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4741544557415960881b604482015290519081900360640190fd5b60ca80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5317fa585931182194fed99f2ea5f2efd38af9cff9724273704c8501c521e34b9181900360200190a150565b60388054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d95780601f106107ae576101008083540402835291602001916107d9565b6000546001600160a01b03163314610e9a576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa6a4a72a22a960911b604482015290519081900360640190fd5b61095581611d34565b610ef833611230565b610f38576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa0afa6a4a72a22a960a11b604482015290519081900360640190fd5b610f4133611a9c565b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7f57600080fd5b505af1158015610f93573d6000803e3d6000fd5b505050506040513d6020811015610fa957600080fd5b50516001600160a01b03163314611007576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561107b57600080fd5b505af115801561108f573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050506040513d60208110156110ff57600080fd5b50516001600160a01b0316331461115d576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505050565b60006107f76111c16117b8565b8461089c856040518060600160405280602581526020016125c460259139603560006111eb6117b8565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a05565b60006107f76112296117b8565b84846118a8565b6001600160a01b031660009081526099602052604090205460ff1690565b60cb546001600160a01b031681565b611265611d80565b6001600160a01b0316336001600160a01b0316146112c0576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b600154600160a81b900460ff16806112db57506112db611da5565b806112f05750600154600160a01b900460ff16155b61132b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015611362576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6001600160a01b0382166113b1576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b6113bc826000611db6565b8015610a0a576001805460ff60a81b191690555050565b6000546001600160a01b0316331461142b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b03811661147b576040805162461bcd60e51b8152602060048201526012602482015271494e56414c49445f4c315f4144445245535360701b604482015290519081900360640190fd5b60cb80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f603c0b2e4494ac82839a70be8b6c660d7d042ccfe71c3ce0e5157f59090e74459181900360200190a150565b8315806114dc5750834211155b611523576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b6098546001600160a01b038089166000818152609a602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401855280519082012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251920191909120906115ed82868686611ef3565b9050806001600160a01b0316896001600160a01b03161461164b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b0389166000908152609a60205260409020805460010190556116758989896117bc565b505050505050505050565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314611712576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116611764576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b3390565b6001600160a01b0383166118015760405162461bcd60e51b81526004018080602001828103825260248152602001806125a06024913960400191505060405180910390fd5b6001600160a01b0382166118465760405162461bcd60e51b81526004018080602001828103825260228152602001806124546022913960400191505060405180910390fd5b6001600160a01b03808416600081815260356020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118ed5760405162461bcd60e51b815260040180806020018281038252602581526020018061257b6025913960400191505060405180910390fd5b6001600160a01b0382166119325760405162461bcd60e51b815260040180806020018281038252602381526020018061240f6023913960400191505060405180910390fd5b61193d838383610c37565b61197a81604051806060016040528060268152602001612476602691396001600160a01b0386166000908152603460205260409020549190611a05565b6001600160a01b0380851660009081526034602052604080822093909355908416815220546119a99082611ae5565b6001600160a01b0380841660008181526034602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a59578181015183820152602001611a41565b50505050905090810190601f168015611a865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260996020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600082820183811015611b3f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ba1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611bad60008383610c37565b603654611bba9082611ae5565b6036556001600160a01b038216600090815260346020526040902054611be09082611ae5565b6001600160a01b03831660008181526034602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061255a6021913960400191505060405180910390fd5b611c8982600083610c37565b611cc681604051806060016040528060228152602001612432602291396001600160a01b0385166000908152603460205260409020549190611a05565b6001600160a01b038316600090815260346020526040902055603654611cec9082612071565b6036556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611db0306120ce565b15905090565b611dfe6040518060400160405280600b81526020016a23b930b834102a37b5b2b760a91b8152506040518060400160405280600381526020016211d49560ea1b8152506120d4565b611e07826121a0565b611e118282611b46565b611e1a82611d34565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e856121c2565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f000000000000000000000000000000000000000000000000000000000000000060c0808401919091528151808403909101815260e0909201905280519101206098555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f545760405162461bcd60e51b815260040180806020018281038252602281526020018061249c6022913960400191505060405180910390fd5b8360ff16601b1480611f6957508360ff16601c145b611fa45760405162461bcd60e51b81526004018080602001828103825260228152602001806124ec6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612068576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6000828211156120c8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600154600160a81b900460ff16806120ef57506120ef611da5565b806121045750600154600160a01b900460ff16155b61213f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612176576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b61217e6121c6565b612188838361227e565b8015610c37576001805460ff60a81b19169055505050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b4690565b600154600160a81b900460ff16806121e157506121e1611da5565b806121f65750600154600160a01b900460ff16155b6122315760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612268576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015610955576001805460ff60a81b1916905550565b600154600160a81b900460ff16806122995750612299611da5565b806122ae5750600154600160a01b900460ff16155b6122e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806124be602e913960400191505060405180910390fd5b600154600160a81b900460ff16158015612320576001805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b825161233390603790602086019061236d565b50815161234790603890602085019061236d565b506039805460ff191660121790558015610c37576001805460ff60a81b19169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123a357600085556123e9565b82601f106123bc57805160ff19168380011785556123e9565b828001600101855582156123e9579182015b828111156123e95782518255916020019190600101906123ce565b506123f59291506123f9565b5090565b5b808211156123f557600081556001016123fa56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ff9ed43c1b257716d58111b6358b62039b7d7359bc9f0f142332535a4370cafe64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphToken#GraphToken","networkInteractionId":1,"nonce":675,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x2b8f1636bdf24dfc8e48fb4795aecee9bfa5a35b190eaec2a4089d8d1de628b5"},"type":"TRANSACTION_SEND"} -{"artifactId":"GraphTokenGateway#GraphTokenGateway","constructorArgs":[],"contractName":"GraphTokenGateway","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphTokenGateway#GraphTokenGateway","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphTokenGateway#GraphTokenGateway","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e05161010051610120516101405161222b6101696000398061112f5250806111065250806110dd528061150a5250806110b452508061108b525080611062525080611039525061222b6000f3fe6080604052600436106101405760003560e01c806392eefe9b116100b6578063c4d66de81161006f578063c4d66de814610355578063d2ce7d6514610375578063d685c0b214610388578063d6866ea5146103a8578063f14a4bd5146103bd578063f77c4791146103d257610140565b806392eefe9b146102a05780639ce7abe5146102c0578063a0c76a96146102e0578063a2594d8214610300578063a7e28d4814610320578063c4c0087c1461034057610140565b806348bde20c1161010857806348bde20c146101e75780634adc698a146102075780635c975abb1461021c57806369bc8cd41461023e5780637b3a3c8b1461025e57806391b4ded91461028b57610140565b80630252fec114610145578063147ddef51461016757806316c38b3c1461019257806324a3d622146101b25780632e567b36146101d4575b600080fd5b34801561015157600080fd5b50610165610160366004611b43565b6103e7565b005b34801561017357600080fd5b5061017c610474565b60405161018991906121a9565b60405180910390f35b34801561019e57600080fd5b506101656101ad366004611da9565b61047a565b3480156101be57600080fd5b506101c7610572565b6040516101899190611e67565b6101656101e2366004611bb4565b610581565b3480156101f357600080fd5b50610165610202366004611b43565b6107b9565b34801561021357600080fd5b506101c7610825565b34801561022857600080fd5b50610231610834565b6040516101899190611f43565b34801561024a57600080fd5b50610165610259366004611b43565b610842565b34801561026a57600080fd5b5061027e610279366004611cb4565b6108bb565b6040516101899190611f4e565b34801561029757600080fd5b5061017c6108d7565b3480156102ac57600080fd5b506101656102bb366004611b43565b6108dd565b3480156102cc57600080fd5b506101656102db366004611dc9565b6108ee565b3480156102ec57600080fd5b5061027e6102fb366004611c37565b610a44565b34801561030c57600080fd5b5061016561031b366004611b43565b610ac4565b34801561032c57600080fd5b506101c761033b366004611b43565b610bdf565b34801561034c57600080fd5b506101c7610c0f565b34801561036157600080fd5b50610165610370366004611b43565b610c1e565b61027e610383366004611d25565b610d44565b34801561039457600080fd5b506101656103a3366004611b43565b610fbb565b3480156103b457600080fd5b50610165611034565b3480156103c957600080fd5b506101c7611155565b3480156103de57600080fd5b506101c7611164565b6103ef611173565b6001600160a01b03811661041e5760405162461bcd60e51b815260040161041590612034565b60405180910390fd5b607780546001600160a01b0319166001600160a01b0383161790556040517f43a303848c82a28f94def3043839eaebd654c19fdada874a74fb94d8bf7d343890610469908390611e67565b60405180910390a150565b60015481565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156104bc57600080fd5b505afa1580156104d0573d6000803e3d6000fd5b505050506040513d60208110156104e657600080fd5b50516001600160a01b031633148061050857506003546001600160a01b031633145b610559576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920476f7665726e6f72206f7220477561726469616e00000000000000604482015290519081900360640190fd5b806105665761056661123d565b61056f816112b5565b50565b6003546001600160a01b031681565b600260435414156105d9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026043556105e6611340565b6076546105fb906001600160a01b0316611391565b6001600160a01b0316336001600160a01b03161461062b5760405162461bcd60e51b815260040161041590612172565b6075546001600160a01b038781169116146106585760405162461bcd60e51b81526004016104159061214b565b34156106765760405162461bcd60e51b815260040161041590611fdd565b60755461068b906001600160a01b0316610bdf565b6001600160a01b0316638c2a993e85856040518363ffffffff1660e01b81526004016106b8929190611ee2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505082159150610757905057604051635260769b60e11b81526001600160a01b0385169063a4c0ed3690610724908890879087908790600401611efb565b600060405180830381600087803b15801561073e57600080fd5b505af1158015610752573d6000803e3d6000fd5b505050505b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2866040516107a491906121a9565b60405180910390a45050600160435550505050565b6107c1611173565b6001600160a01b03811661081c576040805162461bcd60e51b815260206004820152601960248201527f5061757365477561726469616e206d7573742062652073657400000000000000604482015290519081900360640190fd5b61056f816113aa565b6077546001600160a01b031681565b600054610100900460ff1690565b61084a611173565b6001600160a01b0381166108705760405162461bcd60e51b81526004016104159061200c565b607580546001600160a01b0319166001600160a01b0383161790556040517f0b7cf729ac6c387cab57a28d257c6ecac863c24b086353121057083c7bfc79f990610469908390611e67565b60606108cd8686866000808888610d44565b9695505050505050565b60025481565b6108e56113fc565b61056f8161145b565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561092a57600080fd5b505af115801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b50516001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b5050505050505050565b6060632e567b3660e01b86868686600087604051602001610a66929190611f61565b60408051601f1981840301815290829052610a879594939291602401611e7b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50516001600160a01b03163314610b88576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050505050565b6075546000906001600160a01b03838116911614610bff57506000610c0a565b610c07611503565b90505b919050565b6076546001600160a01b031681565b610c26611533565b6001600160a01b0316336001600160a01b031614610c81576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b604254610100900460ff1680610c9a5750610c9a611558565b80610ca8575060425460ff16155b610ce35760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015610d0e576042805460ff1961ff0019909116610100171660011790555b610d17826108e5565b6000805461ff001916610100179055610d2e611569565b8015610d40576042805461ff00191690555b5050565b606060026043541415610d9e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002604355610dab611340565b6075546001600160a01b03898116911614610dd85760405162461bcd60e51b81526004016104159061214b565b85610df55760405162461bcd60e51b815260040161041590611fb0565b3415610e135760405162461bcd60e51b815260040161041590611fdd565b6001600160a01b038716610e395760405162461bcd60e51b81526004016104159061205f565b610e41611a76565b610e4b8484611612565b602083018190526001600160a01b0390911682525115610e7d5760405162461bcd60e51b8152600401610415906120bc565b607554610e92906001600160a01b0316610bdf565b81516040516374f4f54760e01b81526001600160a01b0392909216916374f4f54791610ec2918b90600401611ee2565b600060405180830381600087803b158015610edc57600080fd5b505af1158015610ef0573d6000803e3d6000fd5b505050506000610f3060008360000151607660009054906101000a90046001600160a01b0316610f2b8e87600001518f8f8a60200151610a44565b61168f565b905080896001600160a01b031683600001516001600160a01b03167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738d60008d604051610f7f93929190611ec1565b60405180910390a480604051602001610f9891906121a9565b604051602081830303815290604052925050506001604355979650505050505050565b610fc3611173565b6001600160a01b038116610fe95760405162461bcd60e51b81526004016104159061208c565b607680546001600160a01b0319166001600160a01b0383161790556040517f60d5265d09ed32300af9a69188333d24b405b6f4196f623f3e2b78321181a61590610469908390611e67565b61105d7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110867f000000000000000000000000000000000000000000000000000000000000000061182f565b6110af7f000000000000000000000000000000000000000000000000000000000000000061182f565b6110d87f000000000000000000000000000000000000000000000000000000000000000061182f565b6111017f000000000000000000000000000000000000000000000000000000000000000061182f565b61112a7f000000000000000000000000000000000000000000000000000000000000000061182f565b6111537f000000000000000000000000000000000000000000000000000000000000000061182f565b565b6075546001600160a01b031681565b6004546001600160a01b031681565b6004805460408051634fc07d7560e01b815290516001600160a01b0390921692634fc07d75928282019260209290829003018186803b1580156111b557600080fd5b505afa1580156111c9573d6000803e3d6000fd5b505050506040513d60208110156111df57600080fd5b50516001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b6077546001600160a01b03166112655760405162461bcd60e51b815260040161041590611f85565b6076546001600160a01b031661128d5760405162461bcd60e51b8152600401610415906120f3565b6075546001600160a01b03166111535760405162461bcd60e51b815260040161041590612123565b600060019054906101000a900460ff16151581151514156112d55761056f565b6000805461ff0019166101008315158102919091179182905560ff910416156112fd57426002555b6000546040805161010090920460ff1615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5916020908290030190a150565b600054610100900460ff1615611153576040805162461bcd60e51b81526020600482015260116024820152705061757365642028636f6e74726163742960781b604482015290519081900360640190fd5b7311110000000000000000000000000000000011110190565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e90600090a35050565b6004546001600160a01b03163314611153576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166114af576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000611930565b905090565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000611563306119ca565b15905090565b604254610100900460ff16806115825750611582611558565b80611590575060425460ff16155b6115cb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff161580156115f6576042805460ff1961ff0019909116610100171660011790555b6115fe6119d0565b801561056f576042805461ff001916905550565b607754600090606090829082906001600160a01b03163314156116455761163b85870187611b66565b9092509050611682565b33915085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b90925090505b9250929050565b60008060646001600160a01b031663928c169a8786866040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156117005781810151838201526020016116e8565b50505050905090810190601f16801561172d5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50505050506040513d602081101561177757600080fd5b5051604080516020808252865182820152865193945084936001600160a01b03808a1694908b16937f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68938a93919283929083019185019080838360005b838110156117ec5781810151838201526020016117d4565b50505050905090810190601f1680156118195780820380516001836020036101000a031916815260200191505b509250505060405180910390a495945050505050565b6004805460408051637bb20d2f60e11b8152928301849052516000926001600160a01b039092169163f7641a5e916024808301926020929190829003018186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b50516000838152600560205260409020549091506001600160a01b03808316911614610d405760008281526005602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000818152600560205260408120546001600160a01b031680610c07576004805460408051637bb20d2f60e11b8152928301869052516001600160a01b039091169163f7641a5e916024808301926020929190829003018186803b15801561199757600080fd5b505afa1580156119ab573d6000803e3d6000fd5b505050506040513d60208110156119c157600080fd5b50519392505050565b3b151590565b604254610100900460ff16806119e957506119e9611558565b806119f7575060425460ff16155b611a325760405162461bcd60e51b815260040180806020018281038252602e8152602001806121c8602e913960400191505060405180910390fd5b604254610100900460ff16158015611a5d576042805460ff1961ff0019909116610100171660011790555b6001604355801561056f576042805461ff001916905550565b60408051808201909152600081526060602082015290565b60008083601f840112611a9f578182fd5b50813567ffffffffffffffff811115611ab6578182fd5b60208301915083602082850101111561168857600080fd5b600082601f830112611ade578081fd5b813567ffffffffffffffff80821115611af357fe5b604051601f8301601f191681016020018281118282101715611b1157fe5b604052828152848301602001861015611b28578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215611b54578081fd5b8135611b5f816121b2565b9392505050565b60008060408385031215611b78578081fd5b8235611b83816121b2565b9150602083013567ffffffffffffffff811115611b9e578182fd5b611baa85828601611ace565b9150509250929050565b60008060008060008060a08789031215611bcc578182fd5b8635611bd7816121b2565b95506020870135611be7816121b2565b94506040870135611bf7816121b2565b935060608701359250608087013567ffffffffffffffff811115611c19578283fd5b611c2589828a01611a8e565b979a9699509497509295939492505050565b600080600080600060a08688031215611c4e578081fd5b8535611c59816121b2565b94506020860135611c69816121b2565b93506040860135611c79816121b2565b925060608601359150608086013567ffffffffffffffff811115611c9b578182fd5b611ca788828901611ace565b9150509295509295909350565b600080600080600060808688031215611ccb578081fd5b8535611cd6816121b2565b94506020860135611ce6816121b2565b935060408601359250606086013567ffffffffffffffff811115611d08578182fd5b611d1488828901611a8e565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d3f578081fd5b8735611d4a816121b2565b96506020880135611d5a816121b2565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d8a578182fd5b611d968a828b01611a8e565b989b979a50959850939692959293505050565b600060208284031215611dba578081fd5b81358015158114611b5f578182fd5b600080600060408486031215611ddd578283fd5b8335611de8816121b2565b9250602084013567ffffffffffffffff811115611e03578283fd5b611e0f86828701611a8e565b9497909650939450505050565b60008151808452815b81811015611e4157602081850181015186830182015201611e25565b81811115611e525782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090611eb690830184611e1c565b979650505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b600060208252611b5f6020830184611e1c565b600060ff8416825260406020830152611f7d6040830184611e1c565b949350505050565b602080825260119082015270130c97d493d555115497d393d517d4d155607a1b604082015260600190565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b602080825260159082015274494e56414c49445f4e4f4e5a45524f5f56414c554560581b604082015260600190565b6020808252600e908201526d1253959053125117d30c57d1d49560921b604082015260600190565b60208082526011908201527024a72b20a624a22fa6192fa927aaaa22a960791b604082015260600190565b60208082526013908201527224a72b20a624a22fa222a9aa24a720aa24a7a760691b604082015260600190565b6020808252601690820152751253959053125117d30c57d0d3d5539511549410549560521b604082015260600190565b6020808252601a908201527f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000604082015260600190565b602080825260169082015275130c57d0d3d5539511549410549517d393d517d4d15560521b604082015260600190565b6020808252600e908201526d130c57d1d49517d393d517d4d15560921b604082015260600190565b6020808252600d908201526c1513d2d15397d393d517d1d495609a1b604082015260600190565b60208082526018908201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604082015260600190565b90815260200190565b6001600160a01b038116811461056f57600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a264697066735822122057745d277cf1b69bcdb769c1080348f4281e738017b4783e36958ec852e3141b64736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphTokenGateway#GraphTokenGateway","networkInteractionId":1,"nonce":676,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0fc1922bf5f636404f8b6393b0e75d933c57b0bcc5fe452fbba6817f91d6260d"},"type":"TRANSACTION_SEND"} -{"artifactId":"HorizonProxies#OZProxyDummy_GraphPayments","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#OZProxyDummy_GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","networkInteractionId":1,"nonce":677,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xfcdb517c739e39c4079965c00f6436d4312e91b3fecd1490909a5ecea4c70d01"},"type":"TRANSACTION_SEND"} -{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","hash":"0xfcdb517c739e39c4079965c00f6436d4312e91b3fecd1490909a5ecea4c70d01","networkInteractionId":1,"receipt":{"blockHash":"0xb12d820bd14f60e40fe0687503a62fb2445b877e197efd27ded703562a56344b","blockNumber":97665397,"contractAddress":"0x779934076396014b1395892C1a960CAd33548b7a","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonProxies#OZProxyDummy_GraphPayments","result":{"address":"0x779934076396014b1395892C1a960CAd33548b7a","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","constructorArgs":[],"contractName":"Dummy","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","networkInteractionId":1,"nonce":678,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xac4ce8d1fdf1317d7ada6e6e1ab22cdba08db0b6199dacac72a66fa47576df99"},"type":"TRANSACTION_SEND"} -{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","hash":"0xac4ce8d1fdf1317d7ada6e6e1ab22cdba08db0b6199dacac72a66fa47576df99","networkInteractionId":1,"receipt":{"blockHash":"0x06e529349e456be3fd4977463460264899500ddc270d61d0f75ea95432738494","blockNumber":97665408,"contractAddress":"0x994e77A4673d74C3565B04EF572988B9c7f05778","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonProxies#OZProxyDummy_PaymentsEscrow","result":{"address":"0x994e77A4673d74C3565B04EF572988B9c7f05778","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"HorizonStakingExtension#ExponentialRebates","constructorArgs":[],"contractName":"ExponentialRebates","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonStakingExtension#ExponentialRebates","futureType":"LIBRARY_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonStakingExtension#ExponentialRebates","networkInteraction":{"data":"0x610c2d610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806349484d811461003a575b600080fd5b61004d610048366004610a66565b61005f565b60405190815260200160405180910390f35b6000806100728660030b8660030b61011c565b9050806000036100855787915050610112565b87600003610097576000915050610112565b60006100a98560030b8560030b61011c565b905060006100b8828a8c61013c565b9050600f6100c582610153565b13156100d657899350505050610112565b60006100ff6001607f1b6100fa866100f56100f087610ae2565b610169565b610882565b61089d565b905061010b818c6108d4565b9450505050505b9695505050505050565b600061013561012f846001607f1b610920565b83610988565b9392505050565b600061014b61012f8585610920565b949350505050565b60006101636001607f1b83610b14565b92915050565b60006101796101ff607c1b610ae2565b82121561018857506000919050565b8160000361019b57506001607f1b919050565b60008213156101c55760405162461bcd60e51b81526004016101bc90610b42565b60405180910390fd5b6000806101d66001607c1b85610b69565b91508190506001607f1b6101ea8280610b7d565b6101f49190610b14565b9050610208816710e1b3be415a0000610b7d565b6102129084610bad565b92506001607f1b6102238383610b7d565b61022d9190610b14565b9050610241816705a0913f6b1e0000610b7d565b61024b9084610bad565b92506001607f1b61025c8383610b7d565b6102669190610b14565b905061027a81670168244fdac78000610b7d565b6102849084610bad565b92506001607f1b6102958383610b7d565b61029f9190610b14565b90506102b281664807432bc18000610b7d565b6102bc9084610bad565b92506001607f1b6102cd8383610b7d565b6102d79190610b14565b90506102ea81660c0135dca04000610b7d565b6102f49084610bad565b92506001607f1b6103058383610b7d565b61030f9190610b14565b9050610322816601b707b1cdc000610b7d565b61032c9084610bad565b92506001607f1b61033d8383610b7d565b6103479190610b14565b9050610359816536e0f639b800610b7d565b6103639084610bad565b92506001607f1b6103748383610b7d565b61037e9190610b14565b905061039081650618fee9f800610b7d565b61039a9084610bad565b92506001607f1b6103ab8383610b7d565b6103b59190610b14565b90506103c681649c197dcc00610b7d565b6103d09084610bad565b92506001607f1b6103e18383610b7d565b6103eb9190610b14565b90506103fc81640e30dce400610b7d565b6104069084610bad565b92506001607f1b6104178383610b7d565b6104219190610b14565b90506104328164012ebd1300610b7d565b61043c9084610bad565b92506001607f1b61044d8383610b7d565b6104579190610b14565b9050610467816317499f00610b7d565b6104719084610bad565b92506001607f1b6104828383610b7d565b61048c9190610b14565b905061049c816301a9d480610b7d565b6104a69084610bad565b92506001607f1b6104b78383610b7d565b6104c19190610b14565b90506104d081621c6380610b7d565b6104da9084610bad565b92506001607f1b6104eb8383610b7d565b6104f59190610b14565b9050610504816201c638610b7d565b61050e9084610bad565b92506001607f1b61051f8383610b7d565b6105299190610b14565b905061053781611ab8610b7d565b6105419084610bad565b92506001607f1b6105528383610b7d565b61055c9190610b14565b905061056a8161017c610b7d565b6105749084610bad565b92506001607f1b6105858383610b7d565b61058f9190610b14565b905061059c816014610b7d565b6105a69084610bad565b92506001607f1b6105b78383610b7d565b6105c19190610b14565b90506105ce816001610b7d565b6105d89084610bad565b92506001607f1b826105f26721c3677c82b4000086610b14565b6105fc9190610bad565b6106069190610bad565b925061061184610ae2565b9350600160841b841615610657577243cbaf42a000812488fc5c220ad7b97bf6e99e61064a6cf1aaddd7742e56d32fb9f9974485610b7d565b6106549190610b14565b92505b600160831b84161561069c577105d27a9f51c31b7c2f8038212a057477999161068f6e0afe10820813d65dfe6a33c07f738f85610b7d565b6106999190610b14565b92505b600160821b8416156106e157701b4c902e273a58678d6d3bfdb93db96d026106d46f02582ab704279e8efd15e0265855c47a85610b7d565b6106de9190610b14565b92505b600160811b841615610726577003b1cc971a9bb5b9867477440d6d1577506107196f1152aaa3bf81cb9fdb76eae12d02957185610b7d565b6107239190610b14565b92505b600160801b84161561076b5770015bf0a8b1457695355fb8ac404e7a79e361075e6f2f16ac6c59de6f8d5d6f63c1482a7c8685610b7d565b6107689190610b14565b92505b6001607f1b8416156107af576fd3094c70f034de4b96ff7d5b6f99fcd86107a26f4da2cbf1be5827f9eb3ad1aa9866ebb385610b7d565b6107ac9190610b14565b92505b6001607e1b8416156107f3576fa45af1e1f40c333b3de1db4dd55f29a76107e66f63afbe7ab2082ba1a0ae5e4eb1b479dc85610b7d565b6107f09190610b14565b92505b6001607d1b841615610837576f910b022db7ae67ce76b441c27035c6a161082a6f70f5a893b608861e1f58934f97aea57d85610b7d565b6108349190610b14565b92505b6001607c1b84161561087b576f88415abbe9a76bead8d00cf112e4d4a861086e6f783eafef1c0a8f3978c7f81824d62ebf85610b7d565b6108789190610b14565b92505b5050919050565b60006001607f1b6108938484610920565b6101359190610b14565b6000600160ff1b82036108c25760405162461bcd60e51b81526004016101bc90610b42565b610135836108cf84610ae2565b6109f2565b6000808212156108f65760405162461bcd60e51b81526004016101bc90610b42565b60006109028484610920565b905060008113610916576000915050610163565b607f1c9392505050565b600082158061092d575081155b1561093a57506000610163565b508181028183828161094e5761094e610afe565b0514158061096b57508282828161096757610967610afe565b0514155b156101635760405162461bcd60e51b81526004016101bc90610bd5565b6000816000036109aa5760405162461bcd60e51b81526004016101bc90610bd5565b600160ff1b831480156109be575081600019145b156109db5760405162461bcd60e51b81526004016101bc90610bd5565b8183816109ea576109ea610afe565b059392505050565b818101600083128015610a055750600082125b8015610a1057508281135b8061096b5750600083138015610a265750600082135b801561096b5750828112156101635760405162461bcd60e51b81526004016101bc90610bd5565b803563ffffffff81168114610a6157600080fd5b919050565b60008060008060008060c08789031215610a7f57600080fd5b8635955060208701359450610a9660408801610a4d565b9350610aa460608801610a4d565b9250610ab260808801610a4d565b9150610ac060a08801610a4d565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201610af757610af7610acc565b5060000390565b634e487b7160e01b600052601260045260246000fd5b600082610b2357610b23610afe565b600160ff1b821460001984141615610b3d57610b3d610acc565b500590565b6020808252600d908201526c6f75742d6f662d626f756e647360981b604082015260600190565b600082610b7857610b78610afe565b500790565b80820260008212600160ff1b84141615610b9957610b99610acc565b818105831482151761016357610163610acc565b8082018281126000831280158216821582161715610bcd57610bcd610acc565b505092915050565b6020808252600890820152676f766572666c6f7760c01b60408201526060019056fea26469706673582212201cac81319f1bc19d15bc3a02519b03e3559a9cf147525a96caa8cb800f74da2864736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonStakingExtension#ExponentialRebates","networkInteractionId":1,"nonce":679,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x969a0e54409dc477218979e106b24123cd23518677aa9110137f1efa405a0861"},"type":"TRANSACTION_SEND"} -{"artifactId":"RewardsManager#RewardsManager","constructorArgs":[],"contractName":"RewardsManager","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"RewardsManager#RewardsManager","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"RewardsManager#RewardsManager","networkInteraction":{"data":"0x6101606040527fe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f6080527fc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f6706360a0527f966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c5318076160c0527f1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d16703460e0527f45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247610100527fd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0610120527f39605a6c26a173774ca666c67ef70cf491880e5d3d6d0ca66ec0a31034f15ea36101405234801561011057600080fd5b5060805160a05160c05160e051610100516101205161014051611eb861017360003980610fe1525080610fb8525080610f8f528061194f525080610f6652806116d2525080610f3d525080610f14525080610eeb52806115165250611eb86000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806392eefe9b1161010f578063c8a5f81e116100a2578063e284f84811610071578063e284f848146103cb578063e820e284146103d3578063eeac3e0e146103f3578063f77c479114610406576101e5565b8063c8a5f81e14610395578063d6866ea5146103a8578063db750926146103b0578063e242cf1e146103c3576101e5565b8063a8cc0ee2116100de578063a8cc0ee21461036a578063b951acd714610372578063c4d66de81461037a578063c7d1117d1461038d576101e5565b806392eefe9b1461031e57806393a90a1e146103315780639ce7abe514610344578063a2594d8214610357576101e5565b806326058249116101875780636c080f18116101565780636c080f18146102da578063702a280e146102e257806379ee54f7146103035780639006ce8b14610316576101e5565b806326058249146102895780634986594f146102915780634bbfc1c5146102b45780635c6cbd59146102c7576101e5565b80631324a506116101c35780631324a5061461023057806316a84ab2146102435780631d1c2fec146102635780631debaded14610276576101e5565b806305bb8c6b146101ea5780630903c094146102085780631156bdc11461021d575b600080fd5b6101f261040e565b6040516101ff9190611c75565b60405180910390f35b61021b610216366004611a54565b61041d565b005b61021b61022b366004611b75565b610479565b61021b61023e366004611b8d565b61048d565b610256610251366004611b75565b6104ce565b6040516101ff9190611cad565b610256610271366004611b75565b6104e0565b61021b610284366004611ad4565b610519565b6101f26105b8565b6102a461029f366004611b75565b6105c7565b6040516101ff9493929190611e23565b61021b6102c2366004611b75565b6105ee565b6102566102d5366004611b75565b6106ea565b6102566107db565b6102f56102f0366004611b75565b6107e1565b6040516101ff929190611e15565b610256610311366004611a54565b610955565b610256610b3d565b61021b61032c366004611a54565b610b43565b61021b61033f366004611a54565b610b54565b61021b610352366004611bbc565b610bae565b61021b610365366004611a54565b610d04565b610256610e1f565b610256610e3b565b61021b610388366004611a54565b610e41565b610256610ead565b6102566103a3366004611c54565b610ec5565b61021b610ee6565b6102566103be366004611a54565b611007565b610256611232565b610256611238565b6103e66103e1366004611b75565b611347565b6040516101ff9190611ca2565b610256610401366004611b75565b61135b565b6101f261138d565b600f546001600160a01b031681565b61042561139c565b600f80546001600160a01b0319166001600160a01b0383161790556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611cb6565b60405180910390a150565b61048161139c565b61048a81611470565b50565b600f546001600160a01b031633146104c05760405162461bcd60e51b81526004016104b790611ced565b60405180910390fd5b6104ca82826114ac565b5050565b60116020526000908152604090205481565b60006104ea610ead565b506000828152601060205260409020610502836106ea565b808255600d5460029092019190915590505b919050565b600f546001600160a01b031633146105435760405162461bcd60e51b81526004016104b790611ced565b8281146105625760405162461bcd60e51b81526004016104b790611dcc565b60005b838110156105b1576105a985858381811061057c57fe5b9050602002013584848481811061058f57fe5b90506020020160208101906105a49190611b3d565b6114ac565b600101610565565b5050505050565b6015546001600160a01b031681565b60106020526000908152604090208054600182015460028301546003909301549192909184565b600f546001600160a01b031633148061069b575060008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b15801561064e57600080fd5b505afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611a70565b6001600160a01b0316336001600160a01b0316145b6106b75760405162461bcd60e51b81526004016104b790611ded565b60128190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d3c565b60008181526010602052604081208161070161150f565b6001600160a01b03166346e855da856040518263ffffffff1660e01b815260040161072c9190611cad565b60206040518083038186803b15801561074457600080fd5b505afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190611c3c565b905060006012548210156107915760006107c3565b6107c3670de0b6b3a76400006107bd846107b787600201546107b1610e1f565b9061153a565b90611597565b906115f0565b83549091506107d29082611657565b95945050505050565b60145481565b60008181526010602052604081208190816107fb856106ea565b9050600061080d8284600101546116b1565b905060008060405180604001604052806108256116cb565b6001600160a01b03908116825260155416602090910152905060005b600281101561090457600082826002811061085857fe5b60200201516001600160a01b0316146108fc5781816002811061087757fe5b60200201516001600160a01b031663e2e1e8e98a6040518263ffffffff1660e01b81526004016108a79190611cad565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190611c3c565b830192505b600101610841565b508161091b57600084965096505050505050610950565b6000610933836107bd86670de0b6b3a7640000611597565b60038701549091506109459082611657565b975093955050505050505b915091565b60008060009050600060405180604001604052806109716116cb565b6001600160a01b03908116825260155416602090910152905060005b6002811015610a685760008282600281106109a457fe5b60200201516001600160a01b031614610a60578181600281106109c357fe5b60200201516001600160a01b0316636a3ca383866040518263ffffffff1660e01b81526004016109f39190611c75565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190611b59565b15610a6057818160028110610a5457fe5b60200201519250610a68565b60010161098d565b506001600160a01b038216610a8257600092505050610514565b600080600080856001600160a01b03166355c85269896040518263ffffffff1660e01b8152600401610ab49190611c75565b60a06040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611a8c565b9450945094509450506000610b18856107e1565b509050610b30610b298585846116f6565b8390611657565b9998505050505050505050565b600e5481565b610b4b61171b565b61048a8161177a565b610b5c61139c565b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede90600090a35050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50516001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b60405163623faf6160e01b8152602060048201908152602482018490526001600160a01b0386169163623faf619186918691908190604401848480828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d4057600080fd5b505af1158015610d54573d6000803e3d6000fd5b505050506040513d6020811015610d6a57600080fd5b50516001600160a01b03163314610dc8576040805162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e0000604482015290519081900360640190fd5b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050505050565b6000610e35610e2c611238565b600d5490611657565b90505b90565b60125481565b610e49611822565b6001600160a01b0316336001600160a01b031614610ea4576040805162461bcd60e51b815260206004820152601360248201527227b7363c9034b6b83632b6b2b73a30ba34b7b760691b604482015290519081900360640190fd5b61048a81610b4b565b6000610eb7610e1f565b600d81905543600e55905090565b6000610edd670de0b6b3a76400006107bd8486611597565b90505b92915050565b610f0f7f0000000000000000000000000000000000000000000000000000000000000000611847565b610f387f0000000000000000000000000000000000000000000000000000000000000000611847565b610f617f0000000000000000000000000000000000000000000000000000000000000000611847565b610f8a7f0000000000000000000000000000000000000000000000000000000000000000611847565b610fb37f0000000000000000000000000000000000000000000000000000000000000000611847565b610fdc7f0000000000000000000000000000000000000000000000000000000000000000611847565b6110057f0000000000000000000000000000000000000000000000000000000000000000611847565b565b6000336110126116cb565b6001600160a01b0316816001600160a01b0316148061103e57506015546001600160a01b038281169116145b61105a5760405162461bcd60e51b81526004016104b790611d95565b6000806000806000856001600160a01b03166355c85269896040518263ffffffff1660e01b815260040161108e9190611c75565b60a06040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190611a8c565b9450945094509450945060006110f38561135b565b90506110fe85611347565b1561115357886001600160a01b0316866001600160a01b03167f9b1323a10f3955b1c9c054ffbda78edfdf49998aaf37f61d9f84776b59ac804360405160405180910390a36000975050505050505050610514565b600061116a6111638686856116f6565b8490611657565b905080156111da5761117a611948565b6001600160a01b03166340c10f1989836040518363ffffffff1660e01b81526004016111a7929190611c89565b600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b896001600160a01b0316876001600160a01b03167fbf5617ec135b48259c44e1ae312a03606f36e174082ef2e87042b86ceebace648360405161121d9190611cad565b60405180910390a39998505050505050505050565b600d5481565b600080611250600e544361153a90919063ffffffff16565b905080611261576000915050610e38565b601454611272576000915050610e38565b600061127c611948565b90506000816001600160a01b03166370a0823161129761150f565b6040518263ffffffff1660e01b81526004016112b39190611c75565b60206040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190611c3c565b9050806113165760009350505050610e38565b6014546000906113269085611597565b905061133e826107bd83670de0b6b3a7640000611597565b94505050505090565b600090815260116020526040902054151590565b60008181526010602052604081208180611374856107e1565b6003850182905560019094019390935550909392505050565b6000546001600160a01b031681565b60008054906101000a90046001600160a01b03166001600160a01b0316634fc07d756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e857600080fd5b505afa1580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b50516001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601860248201527f4f6e6c7920436f6e74726f6c6c657220676f7665726e6f720000000000000000604482015290519081900360640190fd5b611478610ead565b5060148190556040517f96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c9061046e90611d6b565b6000816114ba5760006114bc565b435b600084815260116020526040908190208290555190915083907fe016102b339c3889f4967b491f3381f2c352c8fe3d4f880007807d45b124065a90611502908490611cad565b60405180910390a2505050565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600082821115611591576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115a657506000610ee0565b828202828482816115b357fe5b0414610edd5760405162461bcd60e51b8152600401808060200182810382526021815260200180611e626021913960400191505060405180910390fd5b6000808211611646576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161164f57fe5b049392505050565b600082820183811015610edd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183116116c1576000610edd565b610edd838361153a565b6000610e357f000000000000000000000000000000000000000000000000000000000000000061196f565b600080611703838561153a565b90506107d2670de0b6b3a76400006107bd8388611597565b6000546001600160a01b03163314611005576040805162461bcd60e51b815260206004820152601960248201527f43616c6c6572206d75737420626520436f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b6001600160a01b0381166117ce576040805162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9bdb1b195c881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709181900360200190a150565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000805460408051637bb20d2f60e11b81526004810185905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b50516000838152600160205260409020549091506001600160a01b038083169116146104ca5760008281526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251908152915184927fd0e7a942b1fc38c411c4f53d153ba14fd24542a6a35ebacd9b6afca1a154e20692908290030190a25050565b6000610e357f00000000000000000000000000000000000000000000000000000000000000005b6000818152600160205260408120546001600160a01b031680610ee05760005460408051637bb20d2f60e11b81526004810186905290516001600160a01b039092169163f7641a5e91602480820192602092909190829003018186803b1580156119d857600080fd5b505afa1580156119ec573d6000803e3d6000fd5b505050506040513d6020811015611a0257600080fd5b50519392505050565b60008083601f840112611a1c578182fd5b50813567ffffffffffffffff811115611a33578182fd5b6020830191508360208083028501011115611a4d57600080fd5b9250929050565b600060208284031215611a65578081fd5b8135610edd81611e3e565b600060208284031215611a81578081fd5b8151610edd81611e3e565b600080600080600060a08688031215611aa3578081fd5b8551611aae81611e3e565b602087015160408801516060890151608090990151929a91995097965090945092505050565b60008060008060408587031215611ae9578384fd5b843567ffffffffffffffff80821115611b00578586fd5b611b0c88838901611a0b565b90965094506020870135915080821115611b24578384fd5b50611b3187828801611a0b565b95989497509550505050565b600060208284031215611b4e578081fd5b8135610edd81611e53565b600060208284031215611b6a578081fd5b8151610edd81611e53565b600060208284031215611b86578081fd5b5035919050565b60008060408385031215611b9f578182fd5b823591506020830135611bb181611e53565b809150509250929050565b600080600060408486031215611bd0578283fd5b8335611bdb81611e3e565b9250602084013567ffffffffffffffff80821115611bf7578384fd5b818601915086601f830112611c0a578384fd5b813581811115611c18578485fd5b876020828501011115611c29578485fd5b6020830194508093505050509250925092565b600060208284031215611c4d578081fd5b5051919050565b60008060408385031215611c66578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6020808252601a908201527f7375626772617068417661696c6162696c6974794f7261636c65000000000000604082015260600190565b6020808252602f908201527f43616c6c6572206d75737420626520746865207375626772617068206176616960408201526e6c6162696c697479206f7261636c6560881b606082015260800190565b6020808252601590820152741b5a5b9a5b5d5b54dd5899dc985c1a14da59db985b605a1b604082015260600190565b60208082526010908201526f69737375616e6365506572426c6f636b60801b604082015260600190565b6020808252601f908201527f43616c6c6572206d757374206265206120726577617264732069737375657200604082015260600190565b602080825260079082015266042d8cadccee8d60cb1b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6001600160a01b038116811461048a57600080fd5b801515811461048a57600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f18b1a1091f1c6856415c7806703c6da0f0a9f186640f4b0f22d6d3964d5934764736f6c63430007060033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"RewardsManager#RewardsManager","networkInteractionId":1,"nonce":680,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xafb2066742ff060dc628cddb4a4569d5c0c7100adf4d0504ab7caa0f8f89e22e"},"type":"TRANSACTION_SEND"} -{"futureId":"RewardsManager#RewardsManager","hash":"0xafb2066742ff060dc628cddb4a4569d5c0c7100adf4d0504ab7caa0f8f89e22e","networkInteractionId":1,"receipt":{"blockHash":"0x3ff820234575a56aec75a6ef0860b67d046fc20210d0e40b9900aa55f0388b35","blockNumber":97665430,"contractAddress":"0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"RewardsManager#RewardsManager","result":{"address":"0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"BridgeEscrow#BridgeEscrow","hash":"0x1bbf7d97fb0863b9aef2b2f540ae3e7e83d4c117c61a6e7d11ebeb5f30bc9808","networkInteractionId":1,"receipt":{"blockHash":"0x5660e99330c8f3710625877945f6ee948c1dd2a5cf56a37cba01009e54337487","blockNumber":97665313,"contractAddress":"0x5d767c408237E7cB90Ccc2332c1946115B5187D9","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"BridgeEscrow#BridgeEscrow","result":{"address":"0x5d767c408237E7cB90Ccc2332c1946115B5187D9","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"Curation#GraphCurationToken","hash":"0x9d3f08284859c2c3f523c7c7bf48aaecadb5aa4e9cbc6f4abb001c48db908ba3","networkInteractionId":1,"receipt":{"blockHash":"0x9d2a8e9af62f35e5d085e57a42f54ef105bf4e45a533c4fa94295389c9456973","blockNumber":97665351,"contractAddress":"0x714fF20f04c77104eC4906E1059b5478e253daCb","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"Curation#GraphCurationToken","result":{"address":"0x714fF20f04c77104eC4906E1059b5478e253daCb","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphProxyAdmin#GraphProxyAdmin","hash":"0x51c1db4798ea9bbacc08f180d8fe1481f583c397a2fe8797dc8b0ba99160a84c","networkInteractionId":1,"receipt":{"blockHash":"0xd1e9bec4928c03556ef842c03adfc5d1075277933cdbb24aa9bc34d44f441d7e","blockNumber":97665371,"contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphProxyAdmin#GraphProxyAdmin","result":{"address":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphToken#GraphToken","hash":"0x2b8f1636bdf24dfc8e48fb4795aecee9bfa5a35b190eaec2a4089d8d1de628b5","networkInteractionId":1,"receipt":{"blockHash":"0x401d9cec1b4f846b2e6108d38765b2bdeb961996ab3f955762375a1d74173ede","blockNumber":97665380,"contractAddress":"0x1Aec39D141925B02bef1D1A30b80746356Dcc291","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphToken#GraphToken","result":{"address":"0x1Aec39D141925B02bef1D1A30b80746356Dcc291","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphTokenGateway#GraphTokenGateway","hash":"0x0fc1922bf5f636404f8b6393b0e75d933c57b0bcc5fe452fbba6817f91d6260d","networkInteractionId":1,"receipt":{"blockHash":"0xf14fb7817fc975fbda57fc768cc0e75340addcfa1a2d8076c43377cb08ab1508","blockNumber":97665386,"contractAddress":"0x2B8665A7E899ee5FA67460b5f296aE901016102C","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphTokenGateway#GraphTokenGateway","result":{"address":"0x2B8665A7E899ee5FA67460b5f296aE901016102C","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"HorizonStakingExtension#ExponentialRebates","hash":"0x969a0e54409dc477218979e106b24123cd23518677aa9110137f1efa405a0861","networkInteractionId":1,"receipt":{"blockHash":"0x5f065e626164a4774e35e3b4a350556b1f670ae10fb9bc88a58fadfe937cddb5","blockNumber":97665419,"contractAddress":"0xA966fedEE46EbfA9B2390986aa19fab5aE018e87","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonStakingExtension#ExponentialRebates","result":{"address":"0xA966fedEE46EbfA9B2390986aa19fab5aE018e87","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"args":["0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setPauseGuardian","futureId":"Controller#Controller.setPauseGuardian","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"Controller#Controller.setPauseGuardian","networkInteraction":{"data":"0x48bde20c00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"Controller#Controller.setPauseGuardian","networkInteractionId":1,"nonce":681,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc1e3e53b36d3f52ec7ee4d5ef22a789b4e36090f7e465a9ed5c2eda7af7177cf"},"type":"TRANSACTION_SEND"} -{"args":[false],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setPaused","futureId":"Controller#Controller.setPaused","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"Controller#Controller.setPaused","networkInteraction":{"data":"0x16c38b3c0000000000000000000000000000000000000000000000000000000000000000","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"Controller#Controller.setPaused","networkInteractionId":1,"nonce":682,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x07d8805a6dedb6623d3ec001452ad5be3ddbeca3b9678f1604f2660581cdd2fe"},"type":"TRANSACTION_SEND"} -{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"transferOwnership","futureId":"Controller#Controller.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"Controller#Controller.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"Controller#Controller.transferOwnership","networkInteractionId":1,"nonce":683,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x7a95eec4f6b7ede10e32e8c42a134cf59906e8dd2335b07d048952df3f131005"},"type":"TRANSACTION_SEND"} -{"futureId":"Controller#Controller.transferOwnership","hash":"0x7a95eec4f6b7ede10e32e8c42a134cf59906e8dd2335b07d048952df3f131005","networkInteractionId":1,"receipt":{"blockHash":"0x5d7c5fccd1a19b720b0df7711fb83227cf2e34f85e99699756cf1b34a77f29ee","blockNumber":97665469,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x","logIndex":0,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"Controller#Controller.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"transferOwnership","futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","networkInteractionId":1,"nonce":684,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xa39935fc6723e299fce4354a88e1e3922a1fabd99bf53ff13999c3e5403db8df"},"type":"TRANSACTION_SEND"} -{"args":["0xade6b8eb69a49b56929c1d4f4b428d791861db6f"],"artifactId":"GraphToken#GraphToken","dependencies":["GraphToken#GraphToken"],"functionName":"initialize","futureId":"GraphToken#encodeFunctionCall(GraphToken#GraphToken.initialize)","result":"0xc4d66de8000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","constructorArgs":["0x779934076396014b1395892C1a960CAd33548b7a","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["HorizonProxies#OZProxyDummy_GraphPayments"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000779934076396014b1395892c1a960cad33548b7a000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","networkInteractionId":1,"nonce":685,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x22c2f026d84fa8f556a76a1ca64fb666ef8d57dba2d981315f1f8e8b49ce9fe2"},"type":"TRANSACTION_SEND"} -{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","constructorArgs":["0x994e77A4673d74C3565B04EF572988B9c7f05778","0xade6b8eb69a49b56929c1d4f4b428d791861db6f","0x"],"contractName":"TransparentUpgradeableProxy","dependencies":["HorizonProxies#OZProxyDummy_PaymentsEscrow"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","networkInteraction":{"data":"0x60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea264697066735822122053869634917c3f506e9458e33de6974842d50d2f87cc565783db64cc7b8af3f264736f6c63430008140033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea2646970667358221220c1ca14a59ae9fe8f66625b7accc22e698394cc37b875cf375a41b9ced938f75264736f6c63430008140033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103000000000000000000000000994e77a4673d74c3565b04ef572988b9c7f05778000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","networkInteractionId":1,"nonce":686,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x473c72596e7af8e037dde45ed6a6ead298a338cf49fdc75027fd2e929d007536"},"type":"TRANSACTION_SEND"} -{"futureId":"Controller#Controller.setPauseGuardian","hash":"0xc1e3e53b36d3f52ec7ee4d5ef22a789b4e36090f7e465a9ed5c2eda7af7177cf","networkInteractionId":1,"receipt":{"blockHash":"0x48723ea331f82b6d0b447714b6ca92e767ea4b8f1452551480c7fb3ae40c4987","blockNumber":97665450,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x","logIndex":0,"topics":["0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"Controller#Controller.setPauseGuardian","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"Controller#Controller.setPaused","hash":"0x07d8805a6dedb6623d3ec001452ad5be3ddbeca3b9678f1604f2660581cdd2fe","networkInteractionId":1,"receipt":{"blockHash":"0x165250e298b540500cfadb6762796d6a395763c9ab85f94fd489d04a41c0cdc5","blockNumber":97665460,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000000000000000000000000000000000000000000000","logIndex":0,"topics":["0x8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec5"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"Controller#Controller.setPaused","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","hash":"0xa39935fc6723e299fce4354a88e1e3922a1fabd99bf53ff13999c3e5403db8df","networkInteractionId":1,"receipt":{"blockHash":"0x38afc17b17d4657031a750edbdfc0aad9cbad52c6469b24b71b8c47a1b9d6d1c","blockNumber":97665481,"logs":[{"address":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","data":"0x","logIndex":0,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphProxyAdmin#GraphProxyAdmin.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","hash":"0x22c2f026d84fa8f556a76a1ca64fb666ef8d57dba2d981315f1f8e8b49ce9fe2","networkInteractionId":1,"receipt":{"blockHash":"0xa0c01ec9868c6f5ee3e020ccd3da0845543b063d05bebf0047b202e22c74f3b0","blockNumber":97665492,"contractAddress":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","logs":[{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000779934076396014b1395892c1a960cad33548b7a"]},{"address":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191308fb34b4d18487bc323ffe5ef7b2dd2449e9","logIndex":2,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","result":{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","hash":"0x473c72596e7af8e037dde45ed6a6ead298a338cf49fdc75027fd2e929d007536","networkInteractionId":1,"receipt":{"blockHash":"0x9334d8bbeebd5de8e23d553aad2af7b610b072c6088f40ff465c8c5147f132d4","blockNumber":97665503,"contractAddress":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","logs":[{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000994e77a4673d74c3565b04ef572988b9c7f05778"]},{"address":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3ed0202b929cef59b0e2668a68f06fe996e8419","logIndex":2,"topics":["0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","result":{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"BridgeEscrow#GraphProxy","constructorArgs":["0x5d767c408237E7cB90Ccc2332c1946115B5187D9","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["BridgeEscrow#BridgeEscrow","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"BridgeEscrow#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"BridgeEscrow#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d9000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"BridgeEscrow#GraphProxy","networkInteractionId":1,"nonce":687,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x60dce7ab15dc797a01f9ffc9eb9527723a751cf220acb7f25a428c8f7638363b"},"type":"TRANSACTION_SEND"} -{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C"],"artifactId":"BridgeEscrow#BridgeEscrow","dependencies":["BridgeEscrow#BridgeEscrow","Controller#Controller"],"functionName":"initialize","futureId":"BridgeEscrow#encodeFunctionCall(BridgeEscrow#BridgeEscrow.initialize)","result":"0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"Curation#GraphProxy","constructorArgs":["0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["Curation#Curation","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"Curation#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"Curation#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"Curation#GraphProxy","networkInteractionId":1,"nonce":688,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x924776e6178848f13272c7e946a39d7a2548414e146e996b296fc3c0fca966a0"},"type":"TRANSACTION_SEND"} -{"futureId":"Curation#GraphProxy","hash":"0x924776e6178848f13272c7e946a39d7a2548414e146e996b296fc3c0fca966a0","networkInteractionId":1,"receipt":{"blockHash":"0x388c38d5f31e0103734819548e93d947bfb284c950838ecc719482b6012d1068","blockNumber":97665536,"contractAddress":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","logs":[{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"Curation#GraphProxy","result":{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C","0x714fF20f04c77104eC4906E1059b5478e253daCb",10000,1],"artifactId":"Curation#Curation","dependencies":["Curation#Curation","Controller#Controller","Curation#GraphCurationToken"],"functionName":"initialize","futureId":"Curation#encodeFunctionCall(Curation#Curation.initialize)","result":"0x4c8c7a4400000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000714ff20f04c77104ec4906e1059b5478e253dacb00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"EpochManager#GraphProxy","constructorArgs":["0xFBb7D5597f4796225A957Fd56d368bfaD45F5036","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["EpochManager#EpochManager","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"EpochManager#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"EpochManager#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"EpochManager#GraphProxy","networkInteractionId":1,"nonce":689,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xfdd12ca58013199c013c5f92eb97e0850ba695a95d902aaeae856eb22291b3fd"},"type":"TRANSACTION_SEND"} -{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C",60],"artifactId":"EpochManager#EpochManager","dependencies":["EpochManager#EpochManager","Controller#Controller"],"functionName":"initialize","futureId":"EpochManager#encodeFunctionCall(EpochManager#EpochManager.initialize)","result":"0xcd6dc68700000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000000000000000000000000000000000000000003c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"args":["0xed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","networkInteraction":{"data":"0xe0e99292ed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","networkInteractionId":1,"nonce":690,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xe07e5ca7dd1af20c4b2e6f7cded02e75c524291f98b88baa494d3d2c729304f4"},"type":"TRANSACTION_SEND"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","hash":"0xe07e5ca7dd1af20c4b2e6f7cded02e75c524291f98b88baa494d3d2c729304f4","networkInteractionId":1,"receipt":{"blockHash":"0x968194c0edb5536cc8f3cbb665074e200d61534e9c3f88d858d522754ae14446","blockNumber":97665554,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xed734418922426bf2cc8783754bd80fc4d441a4dbe994549aee8a2f03136fcdb"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"artifactId":"GraphToken#GraphProxy","constructorArgs":["0x1Aec39D141925B02bef1D1A30b80746356Dcc291","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["GraphToken#GraphToken","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphToken#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphToken#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphToken#GraphProxy","networkInteractionId":1,"nonce":691,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x70b289c37eb6693d9a73f0445da8fc869c83915982938e9b667d4c41c89fee4a"},"type":"TRANSACTION_SEND"} -{"artifactId":"GraphTokenGateway#GraphProxy","constructorArgs":["0x2B8665A7E899ee5FA67460b5f296aE901016102C","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["GraphTokenGateway#GraphTokenGateway","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphTokenGateway#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphTokenGateway#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphTokenGateway#GraphProxy","networkInteractionId":1,"nonce":692,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x06b7de86ba4ddf10d8a8cd98075a3bfc0ec485344eba637a1d234b9cf1a05cd9"},"type":"TRANSACTION_SEND"} -{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C"],"artifactId":"GraphTokenGateway#GraphTokenGateway","dependencies":["GraphTokenGateway#GraphTokenGateway","Controller#Controller"],"functionName":"initialize","futureId":"GraphTokenGateway#encodeFunctionCall(GraphTokenGateway#GraphTokenGateway.initialize)","result":"0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"emitterAddress":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","eventIndex":0,"eventName":"AdminChanged","futureId":"HorizonProxies#TransparentUpgradeableProxy_GraphPayments_AdminChanged","nameOrIndex":"newAdmin","result":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","strategy":"basic","strategyConfig":{},"txToReadFrom":"0x22c2f026d84fa8f556a76a1ca64fb666ef8d57dba2d981315f1f8e8b49ce9fe2","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"emitterAddress":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","eventIndex":0,"eventName":"AdminChanged","futureId":"HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow_AdminChanged","nameOrIndex":"newAdmin","result":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","strategy":"basic","strategyConfig":{},"txToReadFrom":"0x473c72596e7af8e037dde45ed6a6ead298a338cf49fdc75027fd2e929d007536","type":"READ_EVENT_ARGUMENT_EXECUTION_STATE_INITIALIZE"} -{"args":["0x88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f","0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_GraphPayments","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonProxies#setContractProxy_GraphPayments","networkInteraction":{"data":"0xe0e9929288cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonProxies#setContractProxy_GraphPayments","networkInteractionId":1,"nonce":693,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x6cdb2ccb86dc13e8bf62f777a3a179c68e2a0de8cbf5b3236b53889e577a51b3"},"type":"TRANSACTION_SEND"} -{"args":["0x628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9","0x7782536dac304b46E4Eb60751e4021ab3b09aBAb"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","networkInteraction":{"data":"0xe0e99292628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc90000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","networkInteractionId":1,"nonce":694,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0f3a19a01b271c679106cbff57b610477915fe28b73c03aeef274e8f636bf3f0"},"type":"TRANSACTION_SEND"} -{"artifactId":"RewardsManager#GraphProxy","constructorArgs":["0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["RewardsManager#RewardsManager","GraphProxyAdmin#GraphProxyAdmin"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"RewardsManager#GraphProxy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"RewardsManager#GraphProxy","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c6910000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"RewardsManager#GraphProxy","networkInteractionId":1,"nonce":695,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc6846ec161cba19b22d0e81e114898aa3cf0adcaec174df04be56e64b7949f60"},"type":"TRANSACTION_SEND"} -{"args":["0x59c3CA02528054C6337f63eb367a374Ac45C292C"],"artifactId":"RewardsManager#RewardsManager","dependencies":["RewardsManager#RewardsManager","Controller#Controller"],"functionName":"initialize","futureId":"RewardsManager#encodeFunctionCall(RewardsManager#RewardsManager.initialize)","result":"0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"futureId":"BridgeEscrow#GraphProxy","hash":"0x60dce7ab15dc797a01f9ffc9eb9527723a751cf220acb7f25a428c8f7638363b","networkInteractionId":1,"receipt":{"blockHash":"0x9b842c515603de7f7f457a03af8b04a2459b9687855da4727747940918687f9c","blockNumber":97665524,"contractAddress":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","logs":[{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d9"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"BridgeEscrow#GraphProxy","result":{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"EpochManager#GraphProxy","hash":"0xfdd12ca58013199c013c5f92eb97e0850ba695a95d902aaeae856eb22291b3fd","networkInteractionId":1,"receipt":{"blockHash":"0xb01af1cf3880fa8e0c54271b98763e40743eb573416ac6622204f33911603899","blockNumber":97665547,"contractAddress":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","logs":[{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"EpochManager#GraphProxy","result":{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphToken#GraphProxy","hash":"0x70b289c37eb6693d9a73f0445da8fc869c83915982938e9b667d4c41c89fee4a","networkInteractionId":1,"receipt":{"blockHash":"0x88c7e6929f56d87b2f7bfca3bc40804e0c5e4d895704dbc2e7f9b2ce28a24c24","blockNumber":97665567,"contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphToken#GraphProxy","result":{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphTokenGateway#GraphProxy","hash":"0x06b7de86ba4ddf10d8a8cd98075a3bfc0ec485344eba637a1d234b9cf1a05cd9","networkInteractionId":1,"receipt":{"blockHash":"0x959891b8d848f75409e643c61047d8b118efc0780f1e68b6e4add090741f6052","blockNumber":97665579,"contractAddress":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","logs":[{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphTokenGateway#GraphProxy","result":{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"HorizonProxies#setContractProxy_GraphPayments","hash":"0x6cdb2ccb86dc13e8bf62f777a3a179c68e2a0de8cbf5b3236b53889e577a51b3","networkInteractionId":1,"receipt":{"blockHash":"0xc7ffb73af2f28fb0861ff6820932207fb73c02dd83a29ffee03f6417a59cf202","blockNumber":97665588,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x88cae14a9889b95b4cfd9472fc7dcbca2da791846a1e314bac9c1f8a234cbf9f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonProxies#setContractProxy_GraphPayments","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","hash":"0x0f3a19a01b271c679106cbff57b610477915fe28b73c03aeef274e8f636bf3f0","networkInteractionId":1,"receipt":{"blockHash":"0x19f8cc56b079e3c4eeeec1a1a5665253db6192949f90314c181731109fd1211d","blockNumber":97665599,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x628f67391f8b955553cabfadbf5f1b6a31d2a2d0fea175f5594af9d40b0bedc9"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonProxies#setContractProxy_PaymentsEscrow","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"RewardsManager#GraphProxy","hash":"0xc6846ec161cba19b22d0e81e114898aa3cf0adcaec174df04be56e64b7949f60","networkInteractionId":1,"receipt":{"blockHash":"0x2f4cc496a64e0718889d3c43a2fc13057b2639cc7f904a5666ad76de18e241bb","blockNumber":97665610,"contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c6910"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"RewardsManager#GraphProxy","result":{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"BridgeEscrow#BridgeEscrow_Instance","contractAddress":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","contractName":"BridgeEscrow_Instance","dependencies":["BridgeEscrow#GraphProxy"],"futureId":"BridgeEscrow#BridgeEscrow_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"args":["0x5d767c408237E7cB90Ccc2332c1946115B5187D9","0x84a56624009F5CF297d52940dF268CdF8d2a09B4","0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","BridgeEscrow#BridgeEscrow","BridgeEscrow#GraphProxy","BridgeEscrow#encodeFunctionCall(BridgeEscrow#BridgeEscrow.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d900000000000000000000000084a56624009f5cf297d52940df268cdf8d2a09b400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":696,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xd3c18abd2c454e57149a2c30030f0cd37318e5ba162544f038ecded5e4501b75"},"type":"TRANSACTION_SEND"} -{"artifactId":"Curation#Curation_Instance","contractAddress":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","contractName":"Curation_Instance","dependencies":["Curation#GraphProxy"],"futureId":"Curation#Curation_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"args":["0xFB1a3F555c919B3F8477959639f9d8cA9A3b3c01","0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","0x4c8c7a4400000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000714ff20f04c77104ec4906e1059b5478e253dacb00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","Curation#Curation","Curation#GraphProxy","Curation#encodeFunctionCall(Curation#Curation.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000844c8c7a4400000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000714ff20f04c77104ec4906e1059b5478e253dacb0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":697,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0252212bb4f86eb8e8d52c7b891b4d256de169ebaee1f68960f33cb41cba430f"},"type":"TRANSACTION_SEND"} -{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x0252212bb4f86eb8e8d52c7b891b4d256de169ebaee1f68960f33cb41cba430f","networkInteractionId":1,"receipt":{"blockHash":"0x971268dad5646dc8025dc908a806ad71f0b781d5aa01d7d4a54d35bbf4444d61","blockNumber":97665650,"logs":[{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000fb1a3f555c919b3f8477959639f9d8ca9a3b3c01","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001364656661756c7452657365727665526174696f00000000000000000000000000","logIndex":3,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000156375726174696f6e54617850657263656e746167650000000000000000000000","logIndex":4,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000166d696e696d756d4375726174696f6e4465706f73697400000000000000000000","logIndex":5,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]},{"address":"0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C","data":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000136375726174696f6e546f6b656e4d617374657200000000000000000000000000","logIndex":6,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"Curation#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"artifactId":"EpochManager#EpochManager_Instance","contractAddress":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","contractName":"EpochManager_Instance","dependencies":["EpochManager#GraphProxy"],"futureId":"EpochManager#EpochManager_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"args":["0xFBb7D5597f4796225A957Fd56d368bfaD45F5036","0xCf27161EE08cA6087f9fF445a44474B89C10e554","0xcd6dc68700000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000000000000000000000000000000000000000003c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","EpochManager#EpochManager","EpochManager#GraphProxy","EpochManager#encodeFunctionCall(EpochManager#EpochManager.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e55400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044cd6dc68700000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":698,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x4356c858d052a126039f5d902f92ba05824a22619181a519325a4588023ae688"},"type":"TRANSACTION_SEND"} -{"args":["0x1Aec39D141925B02bef1D1A30b80746356Dcc291","0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","0xc4d66de8000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphToken#GraphToken","GraphToken#GraphProxy","GraphToken#encodeFunctionCall(GraphToken#GraphToken.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":699,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc9290f621aac5ac566934e36b825b1208998eff556f5f27e84297907fc839764"},"type":"TRANSACTION_SEND"} -{"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","contractName":"GraphToken_Instance","dependencies":["GraphToken#GraphProxy"],"futureId":"GraphToken#GraphToken_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"args":["0x2B8665A7E899ee5FA67460b5f296aE901016102C","0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphTokenGateway#GraphTokenGateway","GraphTokenGateway#GraphProxy","GraphTokenGateway#encodeFunctionCall(GraphTokenGateway#GraphTokenGateway.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c0000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":700,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x18011b47c9be25a02c12f60a24ad53e1f7712c9c4884593d47d98faf5157877f"},"type":"TRANSACTION_SEND"} -{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x18011b47c9be25a02c12f60a24ad53e1f7712c9c4884593d47d98faf5157877f","networkInteractionId":1,"receipt":{"blockHash":"0xea9baf497a6be895fa392c4c072bb6b35afee6fe2c7dd01774eed506d58bdf58","blockNumber":97665682,"logs":[{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c"]},{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000002b8665a7e899ee5fa67460b5f296ae901016102c","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphTokenGateway#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"artifactId":"GraphTokenGateway#GraphTokenGateway_Instance","contractAddress":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","contractName":"GraphTokenGateway_Instance","dependencies":["GraphTokenGateway#GraphProxy"],"futureId":"GraphTokenGateway#GraphTokenGateway_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"HorizonProxies#ProxyAdmin_GraphPayments","contractAddress":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","contractName":"ProxyAdmin","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments_AdminChanged"],"futureId":"HorizonProxies#ProxyAdmin_GraphPayments","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","contractAddress":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","contractName":"ProxyAdmin","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow_AdminChanged"],"futureId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"args":["0x7C52Ce46ea416DA19aea8cE6072C2E28159c6910","0x1C0f92202CFc66B160972D54c513A7354F507Bf8","0xc4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","RewardsManager#RewardsManager","RewardsManager#GraphProxy","RewardsManager#encodeFunctionCall(RewardsManager#RewardsManager.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxyAndCall","futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteraction":{"data":"0x07ebde0e0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c69100000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024c4d66de800000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","networkInteractionId":1,"nonce":701,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xd68b760941f96b73f668536d2b225cd3295bb971a5ed6b40baa30fb84f481597"},"type":"TRANSACTION_SEND"} -{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xd68b760941f96b73f668536d2b225cd3295bb971a5ed6b40baa30fb84f481597","networkInteractionId":1,"receipt":{"blockHash":"0x021b8caf11507166285bcb6e3561fa8a7d34bdd3e82b50d9ba49df2c0af59a75","blockNumber":97665694,"logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c6910"]},{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000007c52ce46ea416da19aea8ce6072c2e28159c6910","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"RewardsManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","contractName":"RewardsManager_Instance","dependencies":["RewardsManager#GraphProxy"],"futureId":"RewardsManager#RewardsManager_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xd3c18abd2c454e57149a2c30030f0cd37318e5ba162544f038ecded5e4501b75","networkInteractionId":1,"receipt":{"blockHash":"0x99e9cb615aa284510c98597e7d4691dda4637aa673cc71ebc68705b6a71abc95","blockNumber":97665639,"logs":[{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d9"]},{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000005d767c408237e7cb90ccc2332c1946115b5187d9","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0x84a56624009F5CF297d52940dF268CdF8d2a09B4","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"BridgeEscrow#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0x4356c858d052a126039f5d902f92ba05824a22619181a519325a4588023ae688","networkInteractionId":1,"receipt":{"blockHash":"0x2052065cfea901e8fab8ae90947cbe1ca94634b3b69ab589cb30ea3e7bfb23a2","blockNumber":97665661,"logs":[{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036"]},{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x000000000000000000000000fbb7d5597f4796225a957fd56d368bfad45f5036","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","logIndex":2,"topics":["0x4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70"]},{"address":"0xCf27161EE08cA6087f9fF445a44474B89C10e554","data":"0x000000000000000000000000000000000000000000000000000000000000003c","logIndex":3,"topics":["0x25ddd6f00038d5eac0051df83c6084f140a01586f092e2728d1ed781c9ce2441","0x0000000000000000000000000000000000000000000000000000000000000001"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"EpochManager#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","hash":"0xc9290f621aac5ac566934e36b825b1208998eff556f5f27e84297907fc839764","networkInteractionId":1,"receipt":{"blockHash":"0x3111b46862e73e1476f75a4901f654d51eb2a6ba530d0bb693df11b12f963599","blockNumber":97665672,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291"]},{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000001aec39d141925b02bef1d1a30b80746356dcc291","0x0000000000000000000000000000000000000000000000000000000000000000"]},{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x0000000000000000000000000000000000000000000000000000000000000000","logIndex":2,"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]},{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":3,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphToken#GraphProxyAdmin~GraphProxyAdmin.acceptProxyAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"args":["0xe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f","0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","Curation#Curation_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_Curation","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","networkInteraction":{"data":"0xe0e99292e6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","networkInteractionId":1,"nonce":702,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0d3246218132b00fa8839135c5a9d22b84a0283c7cdafb9d515ad5693c817c79"},"type":"TRANSACTION_SEND"} -{"args":["0xc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063","0xCf27161EE08cA6087f9fF445a44474B89C10e554"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","EpochManager#EpochManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","networkInteraction":{"data":"0xe0e99292c713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e554","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","networkInteractionId":1,"nonce":703,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8b29698b48714a9cf49cfd9f61b4b85d72a6619f31016a305d538c8a77d0ec7b"},"type":"TRANSACTION_SEND"} -{"args":["0xade6b8eb69a49b56929c1d4f4b428d791861db6f","10000000000000000000000000000"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"mint","futureId":"GraphToken#GraphToken_Instance.mint","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphToken#GraphToken_Instance.mint","networkInteraction":{"data":"0x40c10f19000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f0000000000000000000000000000000000000000204fce5e3e25026110000000","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphToken#GraphToken_Instance.mint","networkInteractionId":1,"nonce":704,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x5e89a0111bf53fdec85c3217a78b3f4520cf914c0cd458525d80f092f4bf2b4e"},"type":"TRANSACTION_SEND"} -{"args":[],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"renounceMinter","futureId":"GraphToken#GraphToken_Instance.renounceMinter","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","networkInteraction":{"data":"0x98650275","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","networkInteractionId":1,"nonce":705,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf76ca2d9d1c8db0fa70fe898e47caa22ce5a5392387174b102b260f73f93a0e8"},"type":"TRANSACTION_SEND"} -{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"transferOwnership","futureId":"GraphToken#GraphToken_Instance.transferOwnership","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","networkInteraction":{"data":"0xf2fde38b000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","networkInteractionId":1,"nonce":706,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x22adf2e833f1f302f56befc6bd01dad573d89003c9ed350efc7b4889c54ad23d"},"type":"TRANSACTION_SEND"} -{"args":["0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC"],"artifactId":"GraphTokenGateway#GraphTokenGateway_Instance","contractAddress":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","dependencies":["GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setPauseGuardian","futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","networkInteraction":{"data":"0x48bde20c00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc","id":1,"to":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","networkInteractionId":1,"nonce":707,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xd7139b2954c4a432974cbafc4ea100493527d5857ff6173e85f0e269e785e2e4"},"type":"TRANSACTION_SEND"} -{"args":["114155251141552511415"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setIssuancePerBlock","futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","networkInteraction":{"data":"0x1156bdc10000000000000000000000000000000000000000000000063038ec17c1be19b7","id":1,"to":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","networkInteractionId":1,"nonce":708,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x44cd760b5a43fae0f38a986c95dfc064eac371fdea223e8c5fd995556e01eb74"},"type":"TRANSACTION_SEND"} -{"args":["0xd03ea8624C8C5987235048901fB614fDcA89b117"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setSubgraphAvailabilityOracle","futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","networkInteraction":{"data":"0x0903c094000000000000000000000000d03ea8624c8c5987235048901fb614fdca89b117","id":1,"to":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","networkInteractionId":1,"nonce":709,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x260510632da250baca33a824b36739ff9cd85789ae4f1a11eda2fd5f86ecd63a"},"type":"TRANSACTION_SEND"} -{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","hash":"0x260510632da250baca33a824b36739ff9cd85789ae4f1a11eda2fd5f86ecd63a","networkInteractionId":1,"receipt":{"blockHash":"0xbf423bbc18f37fda47c658857d5e3b422c62f19e9acc46e2880768756c9d328e","blockNumber":97665790,"logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a7375626772617068417661696c6162696c6974794f7261636c65000000000000","logIndex":0,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphAvailabilityOracle","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"args":["0xBc53a58f03917A88174C2795B674734eCEeec05F"],"artifactId":"RewardsManager#RewardsManager_Instance","contractAddress":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","dependencies":["RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setSubgraphService","futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","networkInteraction":{"data":"0x93a90a1e000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f","id":1,"to":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","networkInteractionId":1,"nonce":710,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xb20ae47445f3b01649aeecd7f7d0f91b260206a23c7e372ba1880a6dd8d0f176"},"type":"TRANSACTION_SEND"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","hash":"0x0d3246218132b00fa8839135c5a9d22b84a0283c7cdafb9d515ad5693c817c79","networkInteractionId":1,"receipt":{"blockHash":"0xf65acea5cd26d2bcb8d7a5a8570a27d5d1f1822f115803e2c98cdc42d93e849e","blockNumber":97665716,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xe6876326c1291dfcbbd3864a6816d698cd591defc7aa2153d7f9c4c04016c89f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_Curation","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","hash":"0x8b29698b48714a9cf49cfd9f61b4b85d72a6619f31016a305d538c8a77d0ec7b","networkInteractionId":1,"receipt":{"blockHash":"0x9703d9afc9df93dd1d7de7c4d33662037f6dacbfc4efd41371272421bf8b355a","blockNumber":97665727,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e554","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xc713c3df6d14cdf946460395d09af88993ee2b948b1a808161494e32c5f67063"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_EpochManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphToken#GraphToken_Instance.mint","hash":"0x5e89a0111bf53fdec85c3217a78b3f4520cf914c0cd458525d80f092f4bf2b4e","networkInteractionId":1,"receipt":{"blockHash":"0x57ccbd361d8eed5418bc04beac87816c81b2ae8c6414aa910d1b6f4e04cd1e82","blockNumber":97665736,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x0000000000000000000000000000000000000000204fce5e3e25026110000000","logIndex":0,"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphToken#GraphToken_Instance.mint","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","hash":"0xf76ca2d9d1c8db0fa70fe898e47caa22ce5a5392387174b102b260f73f93a0e8","networkInteractionId":1,"receipt":{"blockHash":"0x53367afdefdfc575bbaddf49c6111e4bd1f1dfd30cc20d94790271fda1333691","blockNumber":97665748,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0xe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb66692","0x000000000000000000000000ade6b8eb69a49b56929c1d4f4b428d791861db6f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphToken#GraphToken_Instance.renounceMinter","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","hash":"0x22adf2e833f1f302f56befc6bd01dad573d89003c9ed350efc7b4889c54ad23d","networkInteractionId":1,"receipt":{"blockHash":"0xde5163f66b9998a0704669403d7363df542688c66bddf9c4d5f2136db996e6bf","blockNumber":97665757,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0x76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphToken#GraphToken_Instance.transferOwnership","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","hash":"0xd7139b2954c4a432974cbafc4ea100493527d5857ff6173e85f0e269e785e2e4","networkInteractionId":1,"receipt":{"blockHash":"0xba1f0c388212cea1f8d7aebcfa6700918066efda31af2cb18084cfd800e4f411","blockNumber":97665768,"logs":[{"address":"0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3","data":"0x","logIndex":0,"topics":["0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e","0x0000000000000000000000000000000000000000000000000000000000000000","0x00000000000000000000000095ced938f7991cd0dfcb48f0a06a40fa1af46ebc"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphTokenGateway#GraphTokenGateway_Instance.setPauseGuardian","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","hash":"0x44cd760b5a43fae0f38a986c95dfc064eac371fdea223e8c5fd995556e01eb74","networkInteractionId":1,"receipt":{"blockHash":"0x14768baf9985f47e73e5ceb0ba29806db3eda4791224aaf8d895ff23e87d02bf","blockNumber":97665780,"logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001069737375616e6365506572426c6f636b00000000000000000000000000000000","logIndex":0,"topics":["0x96d5a4b4edf1cefd0900c166d64447f8da1d01d1861a6a60894b5b82a2c15c3c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"RewardsManager#RewardsManager_Instance.setIssuancePerBlock","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","hash":"0xb20ae47445f3b01649aeecd7f7d0f91b260206a23c7e372ba1880a6dd8d0f176","networkInteractionId":1,"receipt":{"blockHash":"0x809cdec7cff27070d351ac964401c545c40a7c0e15ddd322fae0b199b2e3606e","blockNumber":97665799,"logs":[{"address":"0x1C0f92202CFc66B160972D54c513A7354F507Bf8","data":"0x","logIndex":0,"topics":["0x97befc0afcf2bace352f077aea9873c9552fc2e5ab26874f356006fdf9da4ede","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"RewardsManager#RewardsManager_Instance.setSubgraphService","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"args":["0xd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0","0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","networkInteraction":{"data":"0xe0e99292d362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf00000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","networkInteractionId":1,"nonce":711,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x7a0cf3d5b00512272bc02cac445206a33637cfa680d22af86750c80195043274"},"type":"TRANSACTION_SEND"} -{"args":["0x966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761","0x1C0f92202CFc66B160972D54c513A7354F507Bf8"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","networkInteraction":{"data":"0xe0e99292966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c531807610000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf8","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","networkInteractionId":1,"nonce":712,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x3b74943c8239ed31372488e6a10fd1ae84074316c6061094745c21749c7fd82f"},"type":"TRANSACTION_SEND"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","hash":"0x3b74943c8239ed31372488e6a10fd1ae84074316c6061094745c21749c7fd82f","networkInteractionId":1,"receipt":{"blockHash":"0x5bb7bd7c73fc4414539800003a570ba4e171e89518ee5c5e4906ba67e35c0a34","blockNumber":97665837,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf8","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x966f1e8d8d8014e05f6ec4a57138da9be1f7c5a7f802928a18072f7c53180761"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_RewardsManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"args":["0x2679F1a908f1B241D6Bd10b1898762C70E0a24C3"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance","GraphTokenGateway#GraphTokenGateway_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"addMinter","futureId":"GraphToken#addMinterGateway","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphToken#addMinterGateway","networkInteraction":{"data":"0x983b2d560000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphToken#addMinterGateway","networkInteractionId":1,"nonce":713,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8c129360e592b7d41fb66b02d6c79455ad4ec6138654e76d3d93e8709888465a"},"type":"TRANSACTION_SEND"} -{"args":["0x1C0f92202CFc66B160972D54c513A7354F507Bf8"],"artifactId":"GraphToken#GraphToken_Instance","contractAddress":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","dependencies":["GraphToken#GraphToken_Instance","RewardsManager#RewardsManager_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"addMinter","futureId":"GraphToken#addMinterRewardsManager","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphToken#addMinterRewardsManager","networkInteraction":{"data":"0x983b2d560000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf8","id":1,"to":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphToken#addMinterRewardsManager","networkInteractionId":1,"nonce":714,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xc8b296142da1b4ae30666b2a291f6e2ee50c23c29815ee36aaa851fff504ccd4"},"type":"TRANSACTION_SEND"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","hash":"0x7a0cf3d5b00512272bc02cac445206a33637cfa680d22af86750c80195043274","networkInteractionId":1,"receipt":{"blockHash":"0xd32042609ab890e87bba0cab8240d8ad037b7962befea0300f16ad6c402b278f","blockNumber":97665826,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x0000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0xd362cac9cb75c10d67bcc0b7eeb0b1ef48bb5420b556c092d4fd7f758816fcf0"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphToken#addMinterGateway","hash":"0x8c129360e592b7d41fb66b02d6c79455ad4ec6138654e76d3d93e8709888465a","networkInteractionId":1,"receipt":{"blockHash":"0x41027a3b0321b221c1eb1675ac8f3400ee1d90487ddc25ca2e3701ed2c1e321b","blockNumber":97665846,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":0,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x0000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphToken#addMinterGateway","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"GraphToken#addMinterRewardsManager","hash":"0xc8b296142da1b4ae30666b2a291f6e2ee50c23c29815ee36aaa851fff504ccd4","networkInteractionId":1,"receipt":{"blockHash":"0x97c343ab37d642739692dda87dea5377c31da6be674ad28e9a9af2865fe67413","blockNumber":97665857,"logs":[{"address":"0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8","data":"0x","logIndex":7,"topics":["0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6","0x0000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf8"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphToken#addMinterRewardsManager","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"args":["0x45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247","0xcF242b6E8d1A5883627049485Bf2c1d3Dcf56bA8"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","GraphToken#GraphToken_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","networkInteraction":{"data":"0xe0e9929245fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","networkInteractionId":1,"nonce":715,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x78f2d578ef1e6be44f8ed0bebd654b247e9f17524d275eb07aff2feb7336d981"},"type":"TRANSACTION_SEND"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","hash":"0x78f2d578ef1e6be44f8ed0bebd654b247e9f17524d275eb07aff2feb7336d981","networkInteractionId":1,"receipt":{"blockHash":"0x39696584ae3b00e8f4e76b3c645415c2e257be4f9d13c74255a51dd253c9a5c9","blockNumber":97665876,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","logIndex":0,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x45fc200c7e4544e457d3c5709bfe0d520442c30bbcbdaede89e8d4a4bbc19247"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphHorizon_Periphery#setContractProxy_GraphToken","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"artifactId":"GraphHorizon_Periphery#Dummy","constructorArgs":[],"contractName":"Dummy","dependencies":["GraphHorizon_Periphery#setContractProxy_EpochManager","GraphHorizon_Periphery#setContractProxy_RewardsManager","GraphHorizon_Periphery#setContractProxy_GraphToken","GraphHorizon_Periphery#setContractProxy_GraphTokenGateway","GraphHorizon_Periphery#setContractProxy_GraphProxyAdmin","GraphHorizon_Periphery#setContractProxy_Curation"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphHorizon_Periphery#Dummy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphHorizon_Periphery#Dummy","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphHorizon_Periphery#Dummy","networkInteractionId":1,"nonce":716,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x1bcfb5e1e9bc192e94dcf5a345bae0323032e3df635f1d98250da4274bbfefa1"},"type":"TRANSACTION_SEND"} -{"futureId":"GraphHorizon_Periphery#Dummy","hash":"0x1bcfb5e1e9bc192e94dcf5a345bae0323032e3df635f1d98250da4274bbfefa1","networkInteractionId":1,"receipt":{"blockHash":"0x62f813fe603c912b206848a2fb9eb29cadba13867dbd5b71cded65e5107823a7","blockNumber":97665891,"contractAddress":"0x923a8027EF79AaCC9B4eBC22a548F7c755153F6a","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphHorizon_Periphery#Dummy","result":{"address":"0x923a8027EF79AaCC9B4eBC22a548F7c755153F6a","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"HorizonProxies#GraphProxy_HorizonStaking","constructorArgs":["0x0000000000000000000000000000000000000000","0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45"],"contractName":"GraphProxy","dependencies":["GraphProxyAdmin#GraphProxyAdmin","GraphHorizon_Periphery#Dummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#GraphProxy_HorizonStaking","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","networkInteraction":{"data":"0x608060405234801561001057600080fd5b50604051610a12380380610a128339818101604052604081101561003357600080fd5b50805160209091015161004581610055565b61004e826100b3565b5050610137565b600061005f610111565b6000805160206109d2833981519152838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006100bd610124565b6000805160206109f2833981519152838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b6000805160206109d28339815191525490565b6000805160206109f28339815191525490565b61088c806101466000396000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b14610104578063623faf6114610119578063704b6c0214610196578063f851a440146101c957610083565b80633659cfe61461008b578063396f7b23146100be57806359fc20bb146100ef57610083565b36610083576100816101de565b005b6100816101de565b34801561009757600080fd5b50610081600480360360208110156100ae57600080fd5b50356001600160a01b031661029e565b3480156100ca57600080fd5b506100d36102d8565b604080516001600160a01b039092168252519081900360200190f35b3480156100fb57600080fd5b50610081610338565b34801561011057600080fd5b506100d3610393565b34801561012557600080fd5b506100816004803603602081101561013c57600080fd5b81019060208101813564010000000081111561015757600080fd5b82018360208201111561016957600080fd5b8035906020019184600183028401116401000000008311171561018b57600080fd5b5090925090506103e1565b3480156101a257600080fd5b50610081600480360360208110156101b957600080fd5b50356001600160a01b03166104f1565b3480156101d557600080fd5b506100d3610576565b6101e66105c0565b6001600160a01b0316336001600160a01b0316141561024c576040805162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400604482015290519081900360640190fd5b6040516001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541636600083376000803684845af490503d806000843e81801561029a578184f35b8184fd5b6102a66105c0565b6001600160a01b0316336001600160a01b031614156102cd576102c8816105e5565b6102d5565b6102d56101de565b50565b60006102e26105c0565b6001600160a01b0316336001600160a01b031614806103195750610304610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610655565b9050610335565b6103356101de565b90565b6103406105c0565b6001600160a01b0316336001600160a01b031614806103775750610362610655565b6001600160a01b0316336001600160a01b0316145b156103895761038461067a565b610391565b6103916101de565b565b600061039d6105c0565b6001600160a01b0316336001600160a01b031614806103d457506103bf610655565b6001600160a01b0316336001600160a01b0316145b1561032d57610326610751565b6103e96105c0565b6001600160a01b0316336001600160a01b03161480610420575061040b610655565b6001600160a01b0316336001600160a01b0316145b156104e55761042d61067a565b6000610437610751565b6001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d8060008114610491576040519150601f19603f3d011682016040523d82523d6000602084013e610496565b606091505b50509050806104df576040805162461bcd60e51b815260206004820152601060248201526f125b5c1b0818d85b1b0819985a5b195960821b604482015290519081900360640190fd5b506104ed565b6104ed6101de565b5050565b6104f96105c0565b6001600160a01b0316336001600160a01b031614156102cd576001600160a01b03811661056d576040805162461bcd60e51b815260206004820152601e60248201527f41646d696e2063616e7420626520746865207a65726f20616464726573730000604482015290519081900360640190fd5b6102c881610776565b60006105806105c0565b6001600160a01b0316336001600160a01b031614806105b757506105a2610655565b6001600160a01b0316336001600160a01b0316145b1561032d576103265b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60006105ef610655565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c838155604051919250906001600160a01b0380851691908416907f980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a190600090a3505050565b7f9e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c5490565b6000610684610655565b90506001600160a01b0381166106e1576040805162461bcd60e51b815260206004820152601b60248201527f496d706c2063616e6e6f74206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b336001600160a01b0382161461073e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c792070656e64696e6720696d706c656d656e746174696f6e0000000000604482015290519081900360640190fd5b610747816107e6565b6102d560006105e5565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b60006107806105c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103838155604051919250906001600160a01b0380851691908416907f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b90600090a3505050565b60006107f0610751565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc838155604051919250906001600160a01b0380851691908416907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a350505056fea264697066735822122041ce882775d17ef838c17f08249aa48a5f3ea1c65b581e69896452640b274de264736f6c63430007060033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61039e5eddc59e0b171f57125ab86bee043d9128098c3a6b9adb4f2e86333c2f6f8c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","networkInteractionId":1,"nonce":717,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0be81a5951e38358bf1ad21fadd0e7e929e80717a8b55fef13f976bc5e54bf7f"},"type":"TRANSACTION_SEND"} -{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","hash":"0x0be81a5951e38358bf1ad21fadd0e7e929e80717a8b55fef13f976bc5e54bf7f","networkInteractionId":1,"receipt":{"blockHash":"0xb46cdfedfe470a8444ea5c8af51d6518eef5010410c3d28f3fe7c31aa0a02b4f","blockNumber":97665907,"contractAddress":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","logs":[{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":0,"topics":["0x101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45"]},{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonProxies#GraphProxy_HorizonStaking","result":{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"args":["0x1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034","0xdabc7419aba5A47d368d008f42bb66c7D5801740"],"artifactId":"Controller#Controller","contractAddress":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","dependencies":["Controller#Controller","HorizonProxies#GraphProxy_HorizonStaking"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setContractProxy","futureId":"HorizonProxies#setContractProxy_HorizonStaking","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","networkInteraction":{"data":"0xe0e992921df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","id":1,"to":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","networkInteractionId":1,"nonce":718,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xe80b17da59ff503afc808d1849215383b2d6238dfa99e4373fffeb8ec80b7b10"},"type":"TRANSACTION_SEND"} -{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","hash":"0xe80b17da59ff503afc808d1849215383b2d6238dfa99e4373fffeb8ec80b7b10","networkInteractionId":1,"receipt":{"blockHash":"0x20e3c5de40693e83d7413d295f86aff74a41928a3d66f32e1d5294964df9c7d0","blockNumber":97665923,"logs":[{"address":"0x59c3CA02528054C6337f63eb367a374Ac45C292C","data":"0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","logIndex":3,"topics":["0x937cf566d78d4769ff0211a7d87a6bea51e1fc026fd4d3d8cd589f0e99b983bd","0x1df41cd916959d1163dc8f0671a666ea8a3e434c13e40faef527133b5d167034"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonProxies#setContractProxy_HorizonStaking","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"artifactId":"HorizonProxies#RegisteredDummy","constructorArgs":[],"contractName":"Dummy","dependencies":["HorizonProxies#setContractProxy_HorizonStaking","HorizonProxies#setContractProxy_GraphPayments","HorizonProxies#setContractProxy_PaymentsEscrow"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonProxies#RegisteredDummy","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonProxies#RegisteredDummy","networkInteraction":{"data":"0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e9552d0bd17028a389e7fe001355f436a4c48f8bbc01c19b8c400850f5a6b5ac64736f6c634300081b0033","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonProxies#RegisteredDummy","networkInteractionId":1,"nonce":719,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xa746c68e08fc55c8f7de91b24891c949b5b3863ca72ae5fc7dc5c6e1c9b39fc6"},"type":"TRANSACTION_SEND"} -{"futureId":"HorizonProxies#RegisteredDummy","hash":"0xa746c68e08fc55c8f7de91b24891c949b5b3863ca72ae5fc7dc5c6e1c9b39fc6","networkInteractionId":1,"receipt":{"blockHash":"0x364e0c66e079587d29d8e9d9d18cfc0a11f3e58be52177419f8630679c9d6667","blockNumber":97665939,"contractAddress":"0x5560e7816fb9198A07d1432559cD67fd304C5046","logs":[],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonProxies#RegisteredDummy","result":{"address":"0x5560e7816fb9198A07d1432559cD67fd304C5046","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"GraphPayments#GraphPayments","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C",10000],"contractName":"GraphPayments","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"GraphPayments#GraphPayments","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphPayments#GraphPayments","networkInteraction":{"data":"0x6101e060405234801561001157600080fd5b5060405161132f38038061132f833981016040819052610030916104ee565b816001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b290610372565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e590610372565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e90610372565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015890610372565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019090610372565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb90610372565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020990610372565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024590610372565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a90610372565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a45061033a81620f4240101590565b819061035c5760405163d3097bcb60e01b815260040161007191815260200190565b506101c081905261036b610420565b505061058a565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103ad91815260200190565b602060405180830381865afa1580156103ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ee919061051a565b9050826001600160a01b0382166104195760405163218f5add60e11b8152600401610071919061053c565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104705760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104cf5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b03811681146104e957600080fd5b919050565b6000806040838503121561050157600080fd5b61050a836104d2565b9150602083015190509250929050565b60006020828403121561052c57600080fd5b610535826104d2565b9392505050565b602081526000825180602084015260005b8181101561056a576020818601810151604086840101520161054d565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051610d086106276000396000818160560152610104015260005050600050506000505060005050600050506000505060005050600050506000818161012e015281816102c1015261035401526000818160d5015281816102220152818161025a0152818161029201526103f50152610d086000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d526e50146100515780636c69783a1461008b5780638129fc1c146100a0578063ac9650d8146100a8575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61009e6100993660046109ab565b6100c8565b005b61009e61047f565b6100bb6100b6366004610a06565b61058d565b6040516100829190610aa1565b6100fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163385610676565b6000610128847f0000000000000000000000000000000000000000000000000000000000000000610733565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637573ef4f87868a6040518463ffffffff1660e01b815260040161017c93929190610b21565b602060405180830381865afa158015610199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bd9190610b65565b905060006101cb8683610733565b90506000816101da8686610b94565b6101e49190610b94565b905086818082101561021757604051638bd93bad60e01b8152600481019290925260248201526044015b60405180910390fd5b5050610253846102447f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316906107a1565b61028a86867f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190610806565b81156103e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190610ba7565b507f000000000000000000000000000000000000000000000000000000000000000060405163ca94b0e960e01b81526001600160a01b038a81166004830152888116602483015260448201859052919091169063ca94b0e990606401600060405180830381600087803b1580156103c757600080fd5b505af11580156103db573d6000803e3d6000fd5b505050505b60006103ec8289610bc9565b905061041989827f000000000000000000000000000000000000000000000000000000000000000061027a565b6040805182815260208101859052908101879052606081018690526001600160a01b0380891691908b169033907fb6dba03dcdcd7b7167b22bd6f1462a936eb55f4218b1d4dddff20bdec5703ca39060800160405180910390a450505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156104c55750825b905060008267ffffffffffffffff1660011480156104e25750303b155b9050811580156104f0575080155b1561050e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053857845460ff60401b1916600160401b1785555b610540610841565b831561058657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b6040805160008152602081019091526060908267ffffffffffffffff8111156105b8576105b8610bdc565b6040519080825280602002602001820160405280156105eb57816020015b60608152602001906001900390816105d65790505b50915060005b8381101561066d576106483086868481811061060f5761060f610bf2565b90506020028101906106219190610c08565b8560405160200161063493929190610c56565b60405160208183030381529060405261084b565b83828151811061065a5761065a610bf2565b60209081029190910101526001016105f1565b50505b92915050565b801561072e576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af11580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190610ba7565b61072e5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161020e565b505050565b600061074283620f4240101590565b80610755575061075582620f4240101590565b8383909161077f5760405163768bf0eb60e11b81526004810192909252602482015260440161020e565b50620f424090506107908385610c7d565b61079a9190610c94565b9392505050565b801561080257604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b505050505b5050565b801561072e5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016106b3565b6108496108c1565b565b6060600080846001600160a01b0316846040516108689190610cb6565b600060405180830381855af49150503d80600081146108a3576040519150601f19603f3d011682016040523d82523d6000602084013e6108a8565b606091505b50915091506108b885838361090a565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661084957604051631afcd79f60e31b815260040160405180910390fd5b60608261091f5761091a82610966565b61079a565b815115801561093657506001600160a01b0384163b155b1561095f57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b5092915050565b8051156109765780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b03811681146109a657600080fd5b919050565b600080600080600060a086880312156109c357600080fd5b8535600381106109d257600080fd5b94506109e06020870161098f565b9350604086013592506109f56060870161098f565b949793965091946080013592915050565b60008060208385031215610a1957600080fd5b823567ffffffffffffffff811115610a3057600080fd5b8301601f81018513610a4157600080fd5b803567ffffffffffffffff811115610a5857600080fd5b8560208260051b8401011115610a6d57600080fd5b6020919091019590945092505050565b60005b83811015610a98578181015183820152602001610a80565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015610b1557603f1987860301845281518051808752610af2816020890160208501610a7d565b601f01601f19169590950160209081019550938401939190910190600101610ac9565b50929695505050505050565b6001600160a01b038481168252831660208201526060810160038310610b5757634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b600060208284031215610b7757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561067057610670610b7e565b600060208284031215610bb957600080fd5b8151801515811461079a57600080fd5b8181038181111561067057610670610b7e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c1f57600080fd5b83018035915067ffffffffffffffff821115610c3a57600080fd5b602001915036819003821315610c4f57600080fd5b9250929050565b828482376000838201600081528351610c73818360208801610a7d565b0195945050505050565b808202811582820484141761067057610670610b7e565b600082610cb157634e487b7160e01b600052601260045260246000fd5b500490565b60008251610cc8818460208701610a7d565b919091019291505056fea2646970667358221220329af098a6f1bd645aa52dabc2029106013cfb67b7e66c24d6a3d3c7009305a864736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c0000000000000000000000000000000000000000000000000000000000002710","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphPayments#GraphPayments","networkInteractionId":1,"nonce":720,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x9e93b952fa3e6e7c60c2742ec2c37dc1906d247d589314b92124b926b4b943e7"},"type":"TRANSACTION_SEND"} -{"artifactId":"GraphPayments#GraphPayments_Instance","contractAddress":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","contractName":"GraphPayments","dependencies":["HorizonProxies#TransparentUpgradeableProxy_GraphPayments"],"futureId":"GraphPayments#GraphPayments_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"HorizonStakingExtension#HorizonStakingExtension","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C","0xBc53a58f03917A88174C2795B674734eCEeec05F"],"contractName":"HorizonStakingExtension","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy","HorizonStakingExtension#ExponentialRebates"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonStakingExtension#HorizonStakingExtension","futureType":"CONTRACT_DEPLOYMENT","libraries":{"ExponentialRebates":"0xA966fedEE46EbfA9B2390986aa19fab5aE018e87"},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonStakingExtension#HorizonStakingExtension","networkInteraction":{"data":"0x6101e060405234801561001157600080fd5b5060405161311a38038061311a83398101604081905261003091610411565b818181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610347565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610347565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610347565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610347565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610347565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610347565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610347565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610347565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610347565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b03166101c052506104b4915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038291815260200190565b602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c39190610444565b9050826001600160a01b0382166103ee5760405163218f5add60e11b81526004016100749190610466565b5092915050565b80516001600160a01b038116811461040c57600080fd5b919050565b6000806040838503121561042457600080fd5b61042d836103f5565b915061043b602084016103f5565b90509250929050565b60006020828403121561045657600080fd5b61045f826103f5565b9392505050565b602081526000825180602084015260005b818110156104945760208186018101516040868401015201610477565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612bb061056a6000396000818161196c0152611b6c01526000611d910152600050506000505060008181611e73015281816121bf01526122c901526000818161120a01526118a5015260008181610be70152610e19015260005050600050506000505060008181610f870152818161113d01528181611d5901528181611ee801526120d00152612bb06000f3fe6080604052600436106101dc5760003560e01c806398c657dc11610102578063b7ca724111610095578063e73e14bf11610064578063e73e14bf14610a60578063f1d60d6614610a98578063fb744cc014610ab8578063fc54fb2714610ad857600080fd5b8063b7ca724114610926578063c0641994146109e9578063ccebcabb14610a04578063e2e1e8e914610a3357600080fd5b8063a784d498116100d1578063a784d49814610856578063ac9650d814610876578063ae4fe67a146108a3578063b6363cf2146108dc57600080fd5b806398c657dc146107195780639ce7abe514610746578063a212daf814610766578063a2594d821461083657600080fd5b8063561285e41161017a578063872d048911610149578063872d0489146106385780638cc01c86146106585780638d3c100a146106d95780639054e343146106f957600080fd5b8063561285e4146105865780636a3ca383146105e85780637573ef4f146106185780637a766460146102fb57600080fd5b806325d9897e116101b657806325d9897e1461033157806339514ad21461045457806344c32a611461048657806355c85269146104a857600080fd5b806308ce5f68146102335780630e022923146102665780631787e69f146102fb57600080fd5b3661022e5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561023f57600080fd5b5061025361024e3660046125ad565b610af0565b6040519081526020015b60405180910390f35b34801561027257600080fd5b506102866102813660046125e6565b610b05565b60405161025d919060006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b34801561030757600080fd5b506102536103163660046125e6565b6001600160a01b03166000908152600e602052604090205490565b34801561033d57600080fd5b5061044761034c3660046125ad565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b60405161025d9190612603565b34801561046057600080fd5b50601a546001600160401b03165b6040516001600160401b03909116815260200161025d565b34801561049257600080fd5b506104a66104a13660046126a4565b610be5565b005b3480156104b457600080fd5b506105546104c33660046125e6565b6001600160a01b039081166000908152600f602090815260408083208151610120810183528154909516808652600182015493860184905260028201549286018390526003820154606087015260048201546080870152600582015460a0870152600682015460c0870152600782015460e08701819052600890920154610100909601959095529394919390929091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161025d565b34801561059257600080fd5b506105a66105a13660046125ad565b610c93565b60405161025d9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156105f457600080fd5b506106086106033660046125e6565b610d39565b604051901515815260200161025d565b34801561062457600080fd5b506102536106333660046126d0565b610d5e565b34801561064457600080fd5b5061025361065336600461271f565b610dc2565b34801561066457600080fd5b506106be6106733660046125e6565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b6040805182518152602092830151928101929092520161025d565b3480156106e557600080fd5b506104a66106f4366004612768565b610e17565b34801561070557600080fd5b5061025361071436600461278d565b6112e3565b34801561072557600080fd5b506107396107343660046125e6565b6113cb565b60405161025d91906127e3565b34801561075257600080fd5b506104a661076136600461280b565b6113d6565b34801561077257600080fd5b5061080361078136600461278d565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b60405161025d91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561084257600080fd5b506104a66108513660046125e6565b611501565b34801561086257600080fd5b506102536108713660046125e6565b61161d565b34801561088257600080fd5b50610896610891366004612890565b611628565b60405161025d9190612929565b3480156108af57600080fd5b506106086108be3660046125e6565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156108e857600080fd5b506106086108f73660046125ad565b6001600160a01b0380821660009081526015602090815260408083209386168352929052205460ff1692915050565b34801561093257600080fd5b506109ad6109413660046129a9565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b60405161025d9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b3480156109f557600080fd5b50600d5463ffffffff1661046e565b348015610a1057600080fd5b50610a24610a1f36600461278d565b61170f565b6040519051815260200161025d565b348015610a3f57600080fd5b50610253610a4e3660046129a9565b60009081526010602052604090205490565b348015610a6c57600080fd5b50610608610a7b3660046125e6565b6001600160a01b03166000908152600e6020526040902054151590565b348015610aa457600080fd5b50610608610ab33660046125e6565b611761565b348015610ac457600080fd5b50610253610ad33660046125ad565b611786565b348015610ae457600080fd5b5060205460ff16610608565b6000610afc8383611792565b90505b92915050565b610b6060405180610120016040528060006001600160a01b0316815260200160008019168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b039081166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015290565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6791906129c2565b15610c8557604051632b37d9d160e21b815260040160405180910390fd5b610c8f82826117ca565b5050565b610cc56040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b610cf76040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000610d038585611b68565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b60006001610d4683611bec565b6002811115610d5757610d576127cd565b1492915050565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115610d9857610d986127cd565b6002811115610da957610da96127cd565b81526020019081526020016000205490505b9392505050565b600080610dcf8585611792565b90506000610ddd8686611c45565b90506000610df163ffffffff8616846129fa565b90506000610dff8383611c70565b9050610e0b8185612a11565b98975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906129c2565b15610eb757604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152600660248201526521616c6c6f6360d01b6044820152606401610225565b6000610f0182611bec565b90506000816002811115610f1757610f176127cd565b03610f4f5760405162461bcd60e51b81526020600482015260086024820152670858dbdb1b1958dd60c21b6044820152606401610225565b82600003610f5c57505050565b6001600160a01b0382166000908152600f60205260408120600181015490918590808080610fb633867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190611c87565b600d54610fd1908690600160401b900463ffffffff16611d44565b9350610fdd8486612a24565b600d54909550610ffe9087908790640100000000900463ffffffff16611d7d565b925061100a8386612a24565b945084876005015461101c9190612a11565b6005880155600287015460009015806110425750601954600160a01b900463ffffffff16155b61110d5760058801546002890154600d546019546040516349484d8160e01b81526004810194909452602484019290925263ffffffff600160a01b80830482166044860152600160c01b928390048216606486015283048116608485015291041660a482015273A966fedEE46EbfA9B2390986aa19fab5aE018e87906349484d819060c401602060405180830381865af41580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190612a37565b611110565b60005b9050611120818960080154611f90565b925061112c8387611c70565b925061116c61113b8488612a24565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690611faa565b82156111d4578288600801546111829190612a11565b6008890155875461119c906001600160a01b031684611ff2565b91506111a88284612a24565b88546001600160a01b039081166000818152601760205260409020549295506111d49286921615612084565b5086546001600160a01b038a8116918891167ff5ded07502b6feba4c13b19a0c6646efd4b4119f439bcbd49076e4f0ed1eec4b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190612a37565b604080516001600160a01b039093168352602083019190915281018f9052606081018990526080810188905260a081018a905260c0810187905260e081018690526101000160405180910390a450505050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611329576000915050610dbb565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b80156113bf576000818152601d602052604090206001810154426001600160401b03909116116113ae5760028301546001840154825461139391906129fa565b61139d9190612a50565b6113a79085612a11565b93506113b4565b506113bf565b600201549050611353565b50909695505050505050565b6000610aff82611bec565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190612a72565b6001600160a01b0316336001600160a01b03161461149b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906114c99086908690600401612a8f565b600060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b5050505050505050565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190612a72565b6001600160a01b0316336001600160a01b0316146115c65760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610225565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505050565b6000610aff826120fa565b604080516000815260208101909152606090826001600160401b0381111561165257611652612abe565b60405190808252806020026020018201604052801561168557816020015b60608152602001906001900390816116705790505b50915060005b83811015611707576116e2308686848181106116a9576116a9612ad4565b90506020028101906116bb9190612aea565b856040516020016116ce93929190612b37565b604051602081830303815290604052612145565b8382815181106116f4576116f4612ad4565b602090810291909101015260010161168b565b505092915050565b60408051602081019091526000815260408051602081019091526000815260006117398686611b68565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b60008061176d83611bec565b600281111561177e5761177e6127cd565b141592915050565b6000610afc8383611c45565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610afc9190612a24565b60006117d583611bec565b905060018160028111156117eb576117eb6127cd565b146118225760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b6044820152606401610225565b6001600160a01b038381166000908152600f6020908152604091829020825161012081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e0830152600801546101008201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190612a37565b60808201819052606082015160009161193d91611f90565b9050600082600001516001600160a01b0316336001600160a01b031614806119ae575082516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600090815260156020908152604080832093909416825291909152205460ff165b600d54909150600160801b900463ffffffff16821115806119d157506040830151155b15611a0b5780611a0b5760405162461bcd60e51b8152602060048201526005602482015264042c2eae8d60db1b6044820152606401610225565b60808301516001600160a01b0387166000908152600f6020526040908190206004019190915583015115611aef57808015611a4557508415155b15611a5d57611a588684600001516121bb565b611a6c565b611a6a83602001516122a8565b505b60408084015184516001600160a01b03166000908152600e6020529190912060010154611a999190612a24565b83516001600160a01b03166000908152600e602090815260408083206001019390935582860151818701518352601090915291902054611ad99190612a24565b6020808501516000908152601090915260409020555b60208084015184516080808701516040808901518151928352958201959095523394810194909452606084018990528415908401526001600160a01b03808a16939116907ff6725dd105a6fc88bb79a6e4627f128577186c567a17c94818d201c2a4ce14039060a00160405180910390a4505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611bc157506001600160a01b0382166000908152601460205260409020610aff565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610aff565b6001600160a01b038082166000908152600f6020526040812080549192909116611c195750600092915050565b600381015415801590611c2e57506004810154155b15611c3c5750600192915050565b50600292915050565b600080611c528484611b68565b905080600501548160020154611c689190612a24565b949350505050565b600081831115611c805781610afc565b5090919050565b8015611d3f576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0791906129c2565b611d3f5760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610225565b505050565b600080611d518484612336565b9050610afc817f000000000000000000000000000000000000000000000000000000000000000061115d565b600082600003611d8f57506000610dbb565b7f000000000000000000000000000000000000000000000000000000000000000060008315801590611dc957506001600160a01b03821615155b9050808015611e3c5750604051634c4ea0ed60e01b8152600481018790526001600160a01b03831690634c4ea0ed90602401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c91906129c2565b15611f84576000611e4d8686612336565b90508015611f7a576040516307470bfb60e21b8152600481018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631d1c2fec906024016020604051808303816000875af1158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190612a37565b50611f1883827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190612388565b60405163102ae65160e31b815260048101889052602481018290526001600160a01b03841690638157328890604401600060405180830381600087803b158015611f6157600080fd5b505af1158015611f75573d6000803e3d6000fd5b505050505b9250610dbb915050565b50600095945050505050565b6000818311611fa0576000610afc565b610afc8284612a24565b8015610c8f57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561160157600080fd5b6001600160a01b038216600090815260146020526040812060028101548291901580159061203157508054600160401b900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff600160401b90910481169087906123c316565b90506120638186612a24565b92508282600201546120759190612a11565b6002830155505b509392505050565b8260000361209157505050565b80156120a157611d3f828461242a565b6001600160a01b03808316600090815260176020526040902054166120f481156120cb57816120cd565b835b857f0000000000000000000000000000000000000000000000000000000000000000611f08565b50505050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916121319190612a24565b61213b9190612a24565b610aff9190612a24565b6060600080846001600160a01b0316846040516121629190612b5e565b600060405180830381855af49150503d806000811461219d576040519150601f19603f3d011682016040523d82523d6000602084013e6121a2565b606091505b50915091506121b28583836124a9565b95945050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000604051636dba849360e11b81526001600160a01b038581166004830152919091169063db750926906024016020604051808303816000875af1158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c9190612a37565b90508060000361225b57505050565b60006122678383612505565b905060006122758284612a24565b6001600160a01b038086166000908152601760205260409020549192506122a191839187911615612084565b5050505050565b6040516377561f0760e11b8152600481018290526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063eeac3e0e906024016020604051808303816000875af1158015612312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff9190612a37565b600061234582620f4240101590565b829061236757604051633dc311df60e01b815260040161022591815260200190565b5061237e8361237984620f4240612a24565b6123c3565b610afc9084612a24565b8015611d3f5760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611cc4565b60006123d283620f4240101590565b806123e557506123e582620f4240101590565b8383909161240f5760405163768bf0eb60e11b815260048101929092526024820152604401610225565b50620f4240905061242083856129fa565b610afc9190612a50565b6001600160a01b0382166000908152600e602052604090205461244e908290612a11565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29061249d9084815260200190565b60405180910390a25050565b6060826124be576124b98261256c565b610dbb565b81511580156124d557506001600160a01b0384163b155b156124fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610225565b5080610dbb565b6001600160a01b038216600090815260146020526040812060028101548291901580159061254557508054640100000000900463ffffffff16620f424010155b1561207c5780546000906120579063ffffffff64010000000090910481169087906123c316565b80511561257c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b038116811461259557600080fd5b600080604083850312156125c057600080fd5b82356125cb81612598565b915060208301356125db81612598565b809150509250929050565b6000602082840312156125f857600080fd5b8135610afc81612598565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a083015161266160a08401826001600160401b03169052565b5060c083015161267960c084018263ffffffff169052565b5060e083015161269460e08401826001600160401b03169052565b5061010092830151919092015290565b600080604083850312156126b757600080fd5b82356126c281612598565b946020939093013593505050565b6000806000606084860312156126e557600080fd5b83356126f081612598565b9250602084013561270081612598565b915060408401356003811061271457600080fd5b809150509250925092565b60008060006060848603121561273457600080fd5b833561273f81612598565b9250602084013561274f81612598565b9150604084013563ffffffff8116811461271457600080fd5b6000806040838503121561277b57600080fd5b8235915060208301356125db81612598565b6000806000606084860312156127a257600080fd5b83356127ad81612598565b925060208401356127bd81612598565b9150604084013561271481612598565b634e487b7160e01b600052602160045260246000fd5b602081016003831061280557634e487b7160e01b600052602160045260246000fd5b91905290565b60008060006040848603121561282057600080fd5b833561282b81612598565b925060208401356001600160401b0381111561284657600080fd5b8401601f8101861361285757600080fd5b80356001600160401b0381111561286d57600080fd5b86602082840101111561287f57600080fd5b939660209190910195509293505050565b600080602083850312156128a357600080fd5b82356001600160401b038111156128b957600080fd5b8301601f810185136128ca57600080fd5b80356001600160401b038111156128e057600080fd5b8560208260051b84010111156128f557600080fd5b6020919091019590945092505050565b60005b83811015612920578181015183820152602001612908565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561299d57603f198786030184528151805180875261297a816020890160208501612905565b601f01601f19169590950160209081019550938401939190910190600101612951565b50929695505050505050565b6000602082840312156129bb57600080fd5b5035919050565b6000602082840312156129d457600080fd5b81518015158114610afc57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610aff57610aff6129e4565b80820180821115610aff57610aff6129e4565b81810381811115610aff57610aff6129e4565b600060208284031215612a4957600080fd5b5051919050565b600082612a6d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a8457600080fd5b8151610afc81612598565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612b0157600080fd5b8301803591506001600160401b03821115612b1b57600080fd5b602001915036819003821315612b3057600080fd5b9250929050565b828482376000838201600081528351612b54818360208801612905565b0195945050505050565b60008251612b70818460208701612905565b919091019291505056fea26469706673582212202248057a8bce81db640fbc5d05cef1efff890ddbde3697383b1612b453370f4364736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonStakingExtension#HorizonStakingExtension","networkInteractionId":1,"nonce":721,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8a378086ba3ff7a7b025b0a3f4960e3076365c2d0202cef53b4fa9d9ca049585"},"type":"TRANSACTION_SEND"} -{"artifactId":"PaymentsEscrow#PaymentsEscrow","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C",10000,10000],"contractName":"PaymentsEscrow","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"PaymentsEscrow#PaymentsEscrow","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"PaymentsEscrow#PaymentsEscrow","networkInteraction":{"data":"0x61020060405234801561001157600080fd5b506040516121d83803806121d88339810160408190526100309161046b565b826001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b2906103a1565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e5906103a1565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e906103a1565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b6020820152610158906103a1565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610190906103a1565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb906103a1565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b6020820152610209906103a1565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b6020820152610245906103a1565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a906103a1565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450816276a7008082111561035c57604051635c0f65a160e01b815260048101929092526024820152604401610071565b508190506276a7008082111561038e57604051635c0f65a160e01b815260048101929092526024820152604401610071565b50506101c0919091526101e05250610510565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b81526004016103dc91815260200190565b602060405180830381865afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d91906104a0565b9050826001600160a01b0382166104485760405163218f5add60e11b815260040161007191906104c2565b5092915050565b80516001600160a01b038116811461046657600080fd5b919050565b60008060006060848603121561048057600080fd5b6104898461044f565b602085015160409095015190969495509392505050565b6000602082840312156104b257600080fd5b6104bb8261044f565b9392505050565b602081526000825180602084015260005b818110156104f057602081860181015160408684010152016104d3565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051611be36105f56000396000818161020801526111c801526000818161015001526103a401526000505060005050600050506000505060005050600081816103010152818161041d01528181610590015281816106d90152818161078b015281816109cf01528181610a8001528181611049015261124d01526000505060008181610cbd0152610d6501526000505060008181610c0101528181610c8e01528181610ddb015281816113c5015261148f0152611be36000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638129fc1c116100a2578063b2168b6b11610071578063b2168b6b14610278578063beb6eceb14610282578063d6bd603c146102c6578063f93f1cd0146102d9578063f940e385146102ec57600080fd5b80638129fc1c1461022a5780638340f5491461023257806387dbfe8214610245578063ac9650d81461025857600080fd5b806372eb521e116100de57806372eb521e1461018557806378a24c54146101985780637a8df28b146101ab5780637b8ae6cf1461020357600080fd5b80630ee36be31461011057806332825b81146101255780634f9d392e146101385780636cd476561461014b575b600080fd5b61012361011e366004611762565b6102ff565b005b610123610133366004611762565b61041b565b61012361014636600461177d565b61058e565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101236101933660046117a7565b6106d7565b6101236101a6366004611762565b610789565b6101e86101b93660046117f2565b600160208181526000948552604080862082529385528385209052908352912080549181015460029091015483565b6040805193845260208401929092529082015260600161017c565b6101727f000000000000000000000000000000000000000000000000000000000000000081565b6101236108bf565b610123610240366004611835565b6109cd565b610123610253366004611872565b610a7e565b61026b6102663660046118e0565b610f0f565b60405161017c919061197b565b6101726276a70081565b6102b16102903660046119fb565b60006020818152928152604080822090935290815220805460019091015482565b6040805192835260208301919091520161017c565b6101726102d43660046117f2565b610ff8565b6101236102e7366004611835565b611047565b6101236102fa3660046119fb565b61124b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103819190611a2e565b1561039f57604051639e68cf0b60e01b815260040160405180910390fd5b6103c97f000000000000000000000000000000000000000000000000000000000000000042611a66565b336000818152602081815260408083206001600160a01b03871680855292528083206001019490945592517f47c16ea40fc834cf4be3dc9ec160a1ff77ba18b1231e9e6886e3231c708326ff9190a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049d9190611a2e565b156104bb57604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03851684529091528120600181015490910361050157604051638cbd172f60e01b815260040160405180910390fd5b6001810154429081811061053657604051633c50db7960e11b8152600481019290925260248201526044015b60405180910390fd5b5050336000818152602081815260408083206001600160a01b0387168085529252808320838155600101839055519092917f3d7c3b7414bb2ce0675b85ea842ee937d10fe3b291f1cb2dc3361510bd113d9091a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190611a2e565b1561062e57604051639e68cf0b60e01b815260040160405180910390fd5b8060000361064f57604051633aff1f3760e21b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b03861684529091528120805490918391839190610684908490611a66565b909155505080546040805184815260208101929092526001600160a01b0385169133917f61715ac91d89f310ff71b2ccccdce0ebbd98d1ae31e8482559060139ac54a69d910160405180910390a3505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107599190611a2e565b1561077757604051639e68cf0b60e01b815260040160405180910390fd5b6107838484848461143b565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080b9190611a2e565b1561082957604051639e68cf0b60e01b815260040160405180910390fd5b336000908152602081815260408083206001600160a01b0385168452909152812060010154900361086d57604051638cbd172f60e01b815260040160405180910390fd5b336000818152602081815260408083206001600160a01b0386168085529252808320600101839055519092917f988de7a3afe0d801be198872279c1fd9771d8013712ee4f00652354c8a6ec27d91a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109055750825b905060008267ffffffffffffffff1660011480156109225750303b155b905081158015610930575080155b1561094e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561097857845460ff60401b1916600160401b1785555b610980611505565b83156109c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611a2e565b15610a6d57604051639e68cf0b60e01b815260040160405180910390fd5b610a793384848461143b565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611a2e565b15610b1e57604051639e68cf0b60e01b815260040160405180910390fd5b6001600160a01b038516600090815260208181526040808320338452909152902080548480821015610b6c5760405163b0b503e760e01b81526004810192909252602482015260440161052d565b50506001600160a01b038087166000908152600160209081526040808320338452825280832093891683529290522080548580821015610bc857604051633db4e69160e01b81526004810192909252602482015260440161052d565b505084826000016000828254610bde9190611a79565b9091555050805485908290600090610bf7908490611a79565b90915550600090507f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a9190611a8c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018990526044016020604051808303816000875af1158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d9190611a2e565b50604051633634bc1d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636c69783a90610da2908c908b908b908b908b90600401611aa5565b600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505050506000610dfd7f000000000000000000000000000000000000000000000000000000000000000090565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e679190611a8c565b9050610e738188611a66565b8214828289909192610ea957604051631f82726b60e21b815260048101939093526024830191909152604482015260640161052d565b505050876001600160a01b0316336001600160a01b03168a6001600160a01b03167fedeef164a6af3d5877b558880222d022aafee6e9787cafd3e5055f7d33306dd68a604051610efb91815260200190565b60405180910390a450505050505050505050565b6040805160008152602081019091526060908267ffffffffffffffff811115610f3a57610f3a611af0565b604051908082528060200260200182016040528015610f6d57816020015b6060815260200190600190039081610f585790505b50915060005b83811015610fef57610fca30868684818110610f9157610f91611b06565b9050602002810190610fa39190611b1c565b85604051602001610fb693929190611b6a565b60405160208183030381529060405261150f565b838281518110610fdc57610fdc611b06565b6020908102919091010152600101610f73565b50505b92915050565b6001600160a01b03808416600090815260016020818152604080842087861685528252808420948616845293905291812091820154825491929161103c9190611a79565b9150505b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c99190611a2e565b156110e757604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b038781168552908352818420908616845290915281209082900361118d57806001015460000361114357604051638cbd172f60e01b815260040160405180910390fd5b600060018201819055600282018190556040516001600160a01b0385169133917fb2486c13d5da6cdbddffe9f9ec53350f7f15033cec803877fd75ff89d734c9489190a350505050565b805482808210156111ba57604051633db4e69160e01b81526004810192909252602482015260440161052d565b5050600181018290556111ed7f000000000000000000000000000000000000000000000000000000000000000042611a66565b600282018190556040516001600160a01b03808616929087169133917fba109e8a47e57c895aa1802554cd51025499c2b07c3c9b467c70413a4434ffbc9161123d91888252602082015260400190565b60405180910390a450505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190611a2e565b156112eb57604051639e68cf0b60e01b815260040160405180910390fd5b3360009081526001602090815260408083206001600160a01b03868116855290835281842090851684529091528120600281015490910361133f57604051638cbd172f60e01b815260040160405180910390fd5b6002810154429081811061136f57604051633c50db7960e11b81526004810192909252602482015260440161052d565b50506000816000015482600101541161138c57816001015461138f565b81545b9050808260000160008282546113a59190611a79565b909155505060006001830181905560028301556113ec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611585565b826001600160a01b0316846001600160a01b0316336001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161123d91815260200190565b6001600160a01b038085166000908152600160209081526040808320878516845282528083209386168352929052908120805483929061147c908490611a66565b909155506114b690506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611637565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a968460405161123d91815260200190565b61150d611678565b565b6060600080846001600160a01b03168460405161152c9190611b91565b600060405180830381855af49150503d8060008114611567576040519150601f19603f3d011682016040523d82523d6000602084013e61156c565b606091505b509150915061157c8583836116c1565b95945050505050565b8015610a795760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af11580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190611a2e565b610a795760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161052d565b8015610a79576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064016115bc565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661150d57604051631afcd79f60e31b815260040160405180910390fd5b6060826116d6576116d18261171d565b611040565b81511580156116ed57506001600160a01b0384163b155b1561171657604051639996b31560e01b81526001600160a01b038516600482015260240161052d565b5080611040565b80511561172d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b038116811461175d57600080fd5b919050565b60006020828403121561177457600080fd5b61104082611746565b6000806040838503121561179057600080fd5b61179983611746565b946020939093013593505050565b600080600080608085870312156117bd57600080fd5b6117c685611746565b93506117d460208601611746565b92506117e260408601611746565b9396929550929360600135925050565b60008060006060848603121561180757600080fd5b61181084611746565b925061181e60208501611746565b915061182c60408501611746565b90509250925092565b60008060006060848603121561184a57600080fd5b61185384611746565b925061186160208501611746565b929592945050506040919091013590565b60008060008060008060c0878903121561188b57600080fd5b86356003811061189a57600080fd5b95506118a860208801611746565b94506118b660408801611746565b9350606087013592506118cb60808801611746565b9598949750929591949360a090920135925050565b600080602083850312156118f357600080fd5b823567ffffffffffffffff81111561190a57600080fd5b8301601f8101851361191b57600080fd5b803567ffffffffffffffff81111561193257600080fd5b8560208260051b840101111561194757600080fd5b6020919091019590945092505050565b60005b8381101561197257818101518382015260200161195a565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156119ef57603f19878603018452815180518087526119cc816020890160208501611957565b601f01601f191695909501602090810195509384019391909101906001016119a3565b50929695505050505050565b60008060408385031215611a0e57600080fd5b611a1783611746565b9150611a2560208401611746565b90509250929050565b600060208284031215611a4057600080fd5b8151801515811461104057600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610ff257610ff2611a50565b81810381811115610ff257610ff2611a50565b600060208284031215611a9e57600080fd5b5051919050565b60a0810160038710611ac757634e487b7160e01b600052602160045260246000fd5b9581526001600160a01b0394851660208201526040810193909352921660608201526080015290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611b3357600080fd5b83018035915067ffffffffffffffff821115611b4e57600080fd5b602001915036819003821315611b6357600080fd5b9250929050565b828482376000838201600081528351611b87818360208801611957565b0195945050505050565b60008251611ba3818460208701611957565b919091019291505056fea2646970667358221220a2310128f8eef1d4020c2e25f9c893bf4089333983224daab65c35fcea8e45cd64736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002710","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"PaymentsEscrow#PaymentsEscrow","networkInteractionId":1,"nonce":722,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xe5c2784fecb4826c373aca8f28dd673073155bcaf609889d3ab04ee5eaa9e581"},"type":"TRANSACTION_SEND"} -{"futureId":"PaymentsEscrow#PaymentsEscrow","hash":"0xe5c2784fecb4826c373aca8f28dd673073155bcaf609889d3ab04ee5eaa9e581","networkInteractionId":1,"receipt":{"blockHash":"0xb33afb8521d96be6bf65dd981f36311c17dfade7473576ac00906f59c9db580a","blockNumber":97665974,"contractAddress":"0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6","logs":[{"address":"0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"PaymentsEscrow#PaymentsEscrow","result":{"address":"0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"PaymentsEscrow#PaymentsEscrow_Instance","contractAddress":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","contractName":"PaymentsEscrow","dependencies":["HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow"],"futureId":"PaymentsEscrow#PaymentsEscrow_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"TAPCollector#TAPCollector","constructorArgs":["TAPCollector","1","0x59c3CA02528054C6337f63eb367a374Ac45C292C",10000],"contractName":"TAPCollector","dependencies":["Controller#Controller","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"TAPCollector#TAPCollector","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"TAPCollector#TAPCollector","networkInteraction":{"data":"0x6102c060405234801561001157600080fd5b50604051612162380380612162833981016040819052610030916105de565b81848461003e8260006103e0565b6101205261004d8160016103e0565b61014052815160208084019190912060e052815190820120610100524660a0526100da60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03811661012c5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101e05260408051808201909152600a81526923b930b8342a37b5b2b760b11b602082015261016490610413565b6001600160a01b0316610160526040805180820190915260078152665374616b696e6760c81b602082015261019890610413565b6001600160a01b03166101805260408051808201909152600d81526c47726170685061796d656e747360981b60208201526101d290610413565b6001600160a01b03166101a05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261020d90610413565b6001600160a01b03166101c05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261024690610413565b6001600160a01b03166102005260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b602082015261028190610413565b6001600160a01b0316610220526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102bf90610413565b6001600160a01b03166102405260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102fb90610413565b6001600160a01b03166102605260408051808201909152600881526721bab930ba34b7b760c11b602082015261033090610413565b6001600160a01b039081166102808190526101e05161018051610160516101a0516101c0516102005161022051610240516102605160408051968c168752948b166020870152928a1685850152908916606085015288166080840152871660a083015260c0820195909552935192851694918216939116917fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a439181900360e00190a4506102a0525061082b915050565b60006020835110156103fc576103f5836104c1565b905061040d565b8161040784826106e8565b5060ff90505b92915050565b6000806101e0516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161044e91815260200190565b602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f91906107a6565b9050826001600160a01b0382166104ba5760405163218f5add60e11b815260040161012391906107f4565b5092915050565b600080829050601f815111156104ec578260405163305a27a960e01b815260040161012391906107f4565b80516104f782610807565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610530578181015183820152602001610518565b50506000910152565b600082601f83011261054a57600080fd5b81516001600160401b03811115610563576105636104ff565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610591576105916104ff565b6040528181528382016020018510156105a957600080fd5b6105ba826020830160208701610515565b949350505050565b80516001600160a01b03811681146105d957600080fd5b919050565b600080600080608085870312156105f457600080fd5b84516001600160401b0381111561060a57600080fd5b61061687828801610539565b602087015190955090506001600160401b0381111561063457600080fd5b61064087828801610539565b93505061064f604086016105c2565b6060959095015193969295505050565b600181811c9082168061067357607f821691505b60208210810361069357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156106e357806000526020600020601f840160051c810160208510156106c05750805b601f840160051c820191505b818110156106e057600081556001016106cc565b50505b505050565b81516001600160401b03811115610701576107016104ff565b6107158161070f845461065f565b84610699565b6020601f82116001811461074957600083156107315750848201515b600019600385901b1c1916600184901b1784556106e0565b600084815260208120601f198516915b828110156107795787850151825560209485019460019092019101610759565b50848210156107975786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156107b857600080fd5b6107c1826105c2565b9392505050565b600081518084526107e0816020860160208601610515565b601f01601f19169290920160200192915050565b6020815260006107c160208301846107c8565b805160208083015191908110156106935760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516118786108ea600039600081816101bf015261035e015260005050600050506000505060005050600050506000505060006107db015260005050600050506000505060006109900152600061095e01526000610f2101526000610ef901526000610e5401526000610e7e01526000610ea801526118786000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637f07d283116100715780637f07d2831461016b57806384b0196e1461018c5780638821603c146101a7578063960ba169146101ba578063cfdb35bd146101e1578063fee9f01f1461021257600080fd5b8063015cdd80146100ae5780631354f019146100c35780631ef518f2146100d657806339aa7416146101065780635d2b6a4e14610119575b600080fd5b6100c16100bc366004611081565b610225565b005b6100c16100d1366004611081565b610302565b6100e96100e436600461109e565b6103c7565b6040516001600160a01b0390911681526020015b60405180910390f35b6100c1610114366004611081565b6103e0565b61014c610127366004611081565b600260205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016100fd565b61017e6101793660046111e5565b6104f4565b6040519081526020016100fd565b6101946105cd565b6040516100fd9796959493929190611288565b61017e6101b5366004611320565b610613565b61017e7f000000000000000000000000000000000000000000000000000000000000000081565b61017e6101ef36600461135a565b600360209081526000938452604080852082529284528284209052825290205481565b6100c16102203660046113a5565b610626565b6001600160a01b038082166000908152600260205260409020805490913391849116821461027e57604051630ad827d360e41b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b5050600081600101541182906102b357604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b506000600182018190556040519081526001600160a01b0383169033907f3b4432b11b66b46d9a7b190aa989c0ae85a5395b543540220596dd94dd405ceb906020015b60405180910390a35050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461035657604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b5061038390507f000000000000000000000000000000000000000000000000000000000000000042611445565b600182018190556040519081526001600160a01b0383169033907fd939049941f6a15381248e4ac0010f15efdf0f3221923711244c200b5ff2cddf906020016102f6565b60006103da6103d583611515565b6106e2565b92915050565b6001600160a01b038082166000908152600260205260409020805490913391849116821461043457604051630ad827d360e41b81526001600160a01b03928316600482015291166024820152604401610275565b50506000816001015411829061046957604051631885ecbd60e01b81526001600160a01b039091166004820152602401610275565b50600181015442908181111561049b57604051631a42d0ab60e31b815260048101929092526024820152604401610275565b50506001600160a01b03821660008181526002602052604080822080546001600160a01b03191681556001018290555133917f2fc91dbd92d741cae16e0315578d7f6cf77043b771692c4bd993658ecfe8942291a35050565b60008060008380602001905181019061050d91906115d2565b815151919350915033906001600160a01b0381168214610553576040516347666ba360e11b81526001600160a01b03928316600482015291166024820152604401610275565b50506000610560836106e2565b6001600160a01b038082166000908152600260205260409020549192501661059b57604051630ef060dd60e01b815260040160405180910390fd5b6001600160a01b038082166000908152600260205260409020546105c3918891168585610709565b9695505050505050565b6000606080600080600060606105e1610957565b6105e9610989565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60006103da610621836116f8565b6109b6565b6001600160a01b03848116600090815260026020526040902054168481156106745760405163cb2320b760e01b81526001600160a01b03928316600482015291166024820152604401610275565b505061068282828587610a6d565b6001600160a01b03841660008181526002602052604080822080546001600160a01b0319163390811782556001909101839055905190917f6edcdd4150e63c6c36d965976c1c37375609c8b040c50d39e7156437b80e282891a350505050565b6000806106f283600001516109b6565b9050610702818460200151610b95565b9392505050565b815180516020808301516060909301516001600160a01b03808416600090815260038452604080822083881683528552808220928a168252919093528220549193916001600160801b03909116908181808211610782576040516308e467d960e31b815260048101929092526024820152604401610275565b50600090506107918284611704565b9050600061079f8289610bbf565b90508115610862576001600160a01b03868116600090815260036020908152604080832089851684528252808320938e168352929052208490557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387dbfe828c8c88868b876040518763ffffffff1660e01b815260040161082f9695949392919061172d565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b505050505b856001600160a01b03168a6001600160a01b03168c600281111561088857610888611717565b604080516001600160a01b038a168152602081018790529081018590527ffadd34108e3c00b000a046b272ee080bb1755b91078c0ef5200c0b7da6132bd19060600160405180910390a4846001600160a01b0316866001600160a01b03168b6001600160a01b03167f2d55f33a4a377f40129b217a6cf7a5022a112941b80cd589332abc245aa0a5c78c60000151604001518d60000151606001518e60000151608001518f602001516040516109419493929190611781565b60405180910390a4509998505050505050505050565b60606109847f00000000000000000000000000000000000000000000000000000000000000006000610c26565b905090565b60606109847f00000000000000000000000000000000000000000000000000000000000000006001610c26565b60006103da7fe502a96d6aaed328ceacc76a5f627b9823162f5a205dab5a702b40073a6778428360000151846020015185604001518660600151876080015180519060200120604051602001610a52969594939291909586526001600160a01b0394851660208701529290931660408501526001600160401b031660608401526001600160801b0391909116608083015260a082015260c00190565b60405160208183030381529060405280519060200120610cd1565b8142808211610a98576040516343c042b360e01b815260048101929092526024820152604401610275565b50506040805146602082015290810183905233606090811b6bffffffffffffffffffffffff1916908201526000906074016040516020818303038152906040528051906020012090506000610b1a827f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b9050826001600160a01b0316610b668288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b9592505050565b6001600160a01b031614610b8d5760405163164f10af60e11b815260040160405180910390fd5b505050505050565b600080600080610ba58686610cfe565b925092509250610bb58282610d4b565b5090949350505050565b6000610bce83620f4240101590565b80610be15750610be182620f4240101590565b83839091610c0b5760405163768bf0eb60e11b815260048101929092526024820152604401610275565b50620f42409050610c1c83856117cf565b61070291906117e6565b606060ff8314610c4057610c3983610e08565b90506103da565b818054610c4c90611808565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7890611808565b8015610cc55780601f10610c9a57610100808354040283529160200191610cc5565b820191906000526020600020905b815481529060010190602001808311610ca857829003601f168201915b505050505090506103da565b60006103da610cde610e47565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008351604103610d385760208401516040850151606086015160001a610d2a88828585610f72565b955095509550505050610d44565b50508151600091506002905b9250925092565b6000826003811115610d5f57610d5f611717565b03610d68575050565b6001826003811115610d7c57610d7c611717565b03610d9a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610dae57610dae611717565b03610dcf5760405163fce698f760e01b815260048101829052602401610275565b6003826003811115610de357610de3611717565b03610e04576040516335e2f38360e21b815260048101829052602401610275565b5050565b60606000610e1583611041565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ea057507f000000000000000000000000000000000000000000000000000000000000000046145b15610eca57507f000000000000000000000000000000000000000000000000000000000000000090565b610984604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610fad5750600091506003905082611037565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611001573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661102d57506000925060019150829050611037565b9250600091508190505b9450945094915050565b600060ff8216601f8111156103da57604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b038116811461107e57600080fd5b50565b60006020828403121561109357600080fd5b813561070281611069565b6000602082840312156110b057600080fd5b81356001600160401b038111156110c657600080fd5b82016040818503121561070257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715611110576111106110d8565b60405290565b604080519081016001600160401b0381118282101715611110576111106110d8565b604051601f8201601f191681016001600160401b0381118282101715611160576111606110d8565b604052919050565b60006001600160401b03821115611181576111816110d8565b50601f01601f191660200190565b600082601f8301126111a057600080fd5b81356111b36111ae82611168565b611138565b8181528460208386010111156111c857600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156111f857600080fd5b82356003811061120757600080fd5b915060208301356001600160401b0381111561122257600080fd5b61122e8582860161118f565b9150509250929050565b60005b8381101561125357818101518382015260200161123b565b50506000910152565b60008151808452611274816020860160208601611238565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e0602082015260006112a760e083018961125c565b82810360408401526112b9818961125c565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561130f5783518352602093840193909201916001016112f1565b50909b9a5050505050505050505050565b60006020828403121561133257600080fd5b81356001600160401b0381111561134857600080fd5b820160a0818503121561070257600080fd5b60008060006060848603121561136f57600080fd5b833561137a81611069565b9250602084013561138a81611069565b9150604084013561139a81611069565b809150509250925092565b600080600080606085870312156113bb57600080fd5b84356113c681611069565b93506020850135925060408501356001600160401b038111156113e857600080fd5b8501601f810187136113f957600080fd5b80356001600160401b0381111561140f57600080fd5b87602082840101111561142157600080fd5b949793965060200194505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156103da576103da61142f565b6001600160401b038116811461107e57600080fd5b6001600160801b038116811461107e57600080fd5b600060a0828403121561149457600080fd5b61149c6110ee565b905081356114a981611069565b815260208201356114b981611069565b602082015260408201356114cc81611458565b604082015260608201356114df8161146d565b606082015260808201356001600160401b038111156114fd57600080fd5b6115098482850161118f565b60808301525092915050565b60006040823603121561152757600080fd5b61152f611116565b82356001600160401b0381111561154557600080fd5b61155136828601611482565b82525060208301356001600160401b0381111561156d57600080fd5b6115793682860161118f565b60208301525092915050565b600082601f83011261159657600080fd5b81516115a46111ae82611168565b8181528460208386010111156115b957600080fd5b6115ca826020830160208701611238565b949350505050565b600080604083850312156115e557600080fd5b82516001600160401b038111156115fb57600080fd5b83016040818603121561160d57600080fd5b611615611116565b81516001600160401b0381111561162b57600080fd5b820160a0818803121561163d57600080fd5b6116456110ee565b815161165081611069565b8152602082015161166081611069565b6020820152604082015161167381611458565b604082015260608201516116868161146d565b606082015260808201516001600160401b038111156116a457600080fd5b6116b089828501611585565b60808301525082525060208201516001600160401b038111156116d257600080fd5b6116de87828501611585565b602083810191909152959095015190969095509350505050565b60006103da3683611482565b818103818111156103da576103da61142f565b634e487b7160e01b600052602160045260246000fd5b60c081016003881061174f57634e487b7160e01b600052602160045260246000fd5b9681526001600160a01b03958616602082015293851660408501526060840192909252909216608082015260a0015290565b6001600160401b03851681526001600160801b03841660208201526080604082015260006117b2608083018561125c565b82810360608401526117c4818561125c565b979650505050505050565b80820281158282048414176103da576103da61142f565b60008261180357634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061181c57607f821691505b60208210810361183c57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220acb6bfec6d9c2f80f4ced26fd1055163ff8dce81039d2e933346d801e1bdbb3064736f6c634300081b0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000c544150436f6c6c6563746f72000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"TAPCollector#TAPCollector","networkInteractionId":1,"nonce":723,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x3220df2a1ecc3785a9247ade399caffdf66bf5cbdfae697e6be889c60e18c60a"},"type":"TRANSACTION_SEND"} -{"futureId":"GraphPayments#GraphPayments","hash":"0x9e93b952fa3e6e7c60c2742ec2c37dc1906d247d589314b92124b926b4b943e7","networkInteractionId":1,"receipt":{"blockHash":"0x534dab1e5885f0def0197a5cfe63a7ddb7b62705dc6e66ade010694a784dfec5","blockNumber":97665952,"contractAddress":"0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","logs":[{"address":"0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]},{"address":"0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","data":"0x000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":1,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphPayments#GraphPayments","result":{"address":"0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"HorizonStakingExtension#HorizonStakingExtension","hash":"0x8a378086ba3ff7a7b025b0a3f4960e3076365c2d0202cef53b4fa9d9ca049585","networkInteractionId":1,"receipt":{"blockHash":"0x8d77f10b142a5be0d1fe9384e74fd12e787dfe876d5fb6409b7417b9b0a31e8c","blockNumber":97665964,"contractAddress":"0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c","logs":[{"address":"0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":12,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonStakingExtension#HorizonStakingExtension","result":{"address":"0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"futureId":"TAPCollector#TAPCollector","hash":"0x3220df2a1ecc3785a9247ade399caffdf66bf5cbdfae697e6be889c60e18c60a","networkInteractionId":1,"receipt":{"blockHash":"0x527151a95244529c92e154f0f6ebb4e9daaf345185af2f42d0f2895183dae236","blockNumber":97665985,"contractAddress":"0x84149af521E4C32dDCCb7e9F1F63a187A964396c","logs":[{"address":"0x84149af521E4C32dDCCb7e9F1F63a187A964396c","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"TAPCollector#TAPCollector","result":{"address":"0x84149af521E4C32dDCCb7e9F1F63a187A964396c","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"args":[],"artifactId":"GraphPayments#GraphPayments","dependencies":["GraphPayments#GraphPayments"],"functionName":"initialize","futureId":"GraphPayments#encodeFunctionCall(GraphPayments#GraphPayments.initialize)","result":"0x8129fc1c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"HorizonStaking#HorizonStaking","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C","0x83e6689eDbc7e71861F2c1Eb273D1E0DF00C9f3c","0xBc53a58f03917A88174C2795B674734eCEeec05F"],"contractName":"HorizonStaking","dependencies":["Controller#Controller","HorizonStakingExtension#HorizonStakingExtension","GraphHorizon_Periphery#Dummy","HorizonProxies#RegisteredDummy"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"HorizonStaking#HorizonStaking","futureType":"CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonStaking#HorizonStaking","networkInteraction":{"data":"0x61020060405234801561001157600080fd5b506040516160913803806160918339810160408190526100309161041b565b828181806001600160a01b03811661007d5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b590610351565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e890610351565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261012190610351565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015b90610351565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b602082015261019390610351565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101ce90610351565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020c90610351565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024890610351565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027d90610351565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103279790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b039081166101c052929092166101e052506104ce915050565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161038c91815260200190565b602060405180830381865afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd919061045e565b9050826001600160a01b0382166103f85760405163218f5add60e11b81526004016100749190610480565b5092915050565b80516001600160a01b038116811461041657600080fd5b919050565b60008060006060848603121561043057600080fd5b610439846103ff565b9250610447602085016103ff565b9150610455604085016103ff565b90509250925092565b60006020828403121561047057600080fd5b610479826103ff565b9392505050565b602081526000825180602084015260005b818110156104ae5760208186018101516040868401015201610491565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615ae16105b06000396000610331015260008181610eb30152818161180b015281816118be015281816118e0015281816134240152818161425401526145900152600050506000505060005050600050506000505060006133dd015260005050600050506000505060008181610e7d01528181611a5c015281816129af01528181612cc601528181612d5d01528181612ef701528181613ec1015281816140d0015281816141e401526142fc0152615ae16000f3fe6080604052600436106102cd5760003560e01c80638cc01c8611610175578063b7ca7241116100dc578063e76fede611610095578063f93f1cd01161006f578063f93f1cd014610c83578063fb744cc014610ca3578063fc54fb2714610cc3578063fecc9cc114610cdb5761031f565b8063e76fede614610c2e578063ef58bd6714610c4e578063f64b359814610c635761031f565b8063b7ca724114610ac7578063ba7fb0b414610b8a578063bc735d9014610baa578063ca94b0e914610bca578063ccebcabb14610bea578063e473522a14610c195761031f565b8063a2a317221161012e578063a2a31722146109e1578063a694fc3a14610a01578063a784d49814610a21578063ac9650d814610a41578063ad4d35b514610a6e578063ae4fe67a14610a8e5761031f565b80638cc01c86146108105780639054e343146108915780639ce7abe5146108b1578063a02b9426146108d1578063a212daf8146108f1578063a2594d82146109c15761031f565b806342c516931161023457806374612092116101ed5780637c145cc7116101c75780637c145cc71461078057806381e21b56146107b057806382d66cb8146107d0578063872d0489146107f05761031f565b8063746120921461070a5780637573ef4f1461072a5780637a7664601461074a5761031f565b806342c51693146106085780634ca7ac22146106285780634d99dd161461064857806351a60b0214610668578063561285e4146106885780636230001a146106ea5761031f565b806325d9897e1161028657806325d9897e146104485780632e17de781461056b57806339514ad21461058b5780633993d849146105b35780633a78b732146105d35780633ccfd60b146105f35761031f565b8063010167e514610375578063026e402b1461039557806308ce5f68146103b5578063162ea5ed146103e85780632119537314610408578063259bc435146104285761031f565b3661031f5760405162461bcd60e51b815260206004820152601760248201527f524543454956455f4554485f4e4f545f414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b34801561032b57600080fd5b506040517f00000000000000000000000000000000000000000000000000000000000000009036600082376000803683855af43d806000843e81801561036f578184f35b8184fd5b005b34801561038157600080fd5b50610373610390366004615110565b610cfb565b3480156103a157600080fd5b506103736103b0366004615172565b610dce565b3480156103c157600080fd5b506103d56103d036600461519e565b610ede565b6040519081526020015b60405180910390f35b3480156103f457600080fd5b506103d56104033660046151d7565b610ef3565b34801561041457600080fd5b5061037361042336600461522a565b610fb8565b34801561043457600080fd5b5061037361044336600461526b565b611088565b34801561045457600080fd5b5061055e61046336600461519e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b039182166000908152601b6020908152604080832093909416825291825282902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff808216606084015264010000000082046001600160401b039081166080850152600160601b8304811660a0850152600160a01b830490911660c0840152600160c01b9091041660e082015260049091015461010082015290565b6040516103df9190615286565b34801561057757600080fd5b50610373610586366004615327565b611177565b34801561059757600080fd5b50601a546040516001600160401b0390911681526020016103df565b3480156105bf57600080fd5b506103736105ce36600461522a565b61120a565b3480156105df57600080fd5b506103736105ee366004615340565b6112a6565b3480156105ff57600080fd5b50610373611441565b34801561061457600080fd5b5061037361062336600461536c565b6114d3565b34801561063457600080fd5b506103736106433660046153c9565b611684565b34801561065457600080fd5b50610373610663366004615172565b61177e565b34801561067457600080fd5b5061037361068336600461519e565b611831565b34801561069457600080fd5b506106a86106a336600461519e565b611907565b6040516103df9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b3480156106f657600080fd5b506103736107053660046153f7565b6119ad565b34801561071657600080fd5b5061037361072536600461522a565b611a92565b34801561073657600080fd5b506103d561074536600461543d565b611b2e565b34801561075657600080fd5b506103d5610765366004615340565b6001600160a01b03166000908152600e602052604090205490565b34801561078c57600080fd5b506107a061079b366004615484565b611b92565b60405190151581526020016103df565b3480156107bc57600080fd5b506103736107cb3660046154cf565b611ba7565b3480156107dc57600080fd5b506103736107eb366004615110565b611e20565b3480156107fc57600080fd5b506103d561080b366004615527565b611f31565b34801561081c57600080fd5b5061087661082b366004615340565b60408051808201825260008082526020918201819052825180840184528181528083018281526001600160a01b03959095168252600e90925291909120805482526004015490915290565b604080518251815260209283015192810192909252016103df565b34801561089d57600080fd5b506103d56108ac366004615484565b611f86565b3480156108bd57600080fd5b506103736108cc366004615565565b61206e565b3480156108dd57600080fd5b506103d56108ec36600461522a565b612199565b3480156108fd57600080fd5b5061098e61090c366004615484565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160a01b039788168252601e815284822096881682529586528381209490961686529284529381902081519283018252805483526001810154938301939093526002830154908201526003909101549181019190915290565b6040516103df91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156109cd57600080fd5b506103736109dc366004615340565b61222e565b3480156109ed57600080fd5b506103736109fc366004615172565b612342565b348015610a0d57600080fd5b50610373610a1c366004615327565b6123d3565b348015610a2d57600080fd5b506103d5610a3c366004615340565b612464565b348015610a4d57600080fd5b50610a61610a5c3660046155ea565b61246f565b6040516103df9190615683565b348015610a7a57600080fd5b50610373610a89366004615703565b612556565b348015610a9a57600080fd5b506107a0610aa9366004615340565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ad357600080fd5b50610b4e610ae2366004615327565b6040805160808082018352600080835260208084018290528385018290526060938401829052948152601d8552839020835191820184528054825260018101546001600160401b0316948201949094526002840154928101929092526003909201549181019190915290565b6040516103df9190815181526020808301516001600160401b031690820152604080830151908201526060918201519181019190915260800190565b348015610b9657600080fd5b50610373610ba5366004615743565b61262f565b348015610bb657600080fd5b50610373610bc5366004615703565b612747565b348015610bd657600080fd5b50610373610be536600461522a565b6127d9565b348015610bf657600080fd5b50610c0a610c05366004615484565b612a27565b604051905181526020016103df565b348015610c2557600080fd5b50610373612a79565b348015610c3a57600080fd5b50610373610c49366004615784565b612b4b565b348015610c5a57600080fd5b5061037361306d565b348015610c6f57600080fd5b50610373610c7e3660046157c3565b613149565b348015610c8f57600080fd5b506103d5610c9e36600461522a565b61322c565b348015610caf57600080fd5b506103d5610cbe36600461519e565b613300565b348015610ccf57600080fd5b5060205460ff166107a0565b348015610ce757600080fd5b50610373610cf636600461522a565b61330c565b610d036133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190615831565b15610d8257604051632b37d9d160e21b815260040160405180910390fd5b8484610d8f8282336133ff565b828233909192610db557604051630c76b97b60e41b81526004016103169392919061584e565b505050610dc587868887876134c3565b50505050505050565b610dd66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190615831565b15610e5557604051632b37d9d160e21b815260040160405180910390fd5b80600003610e7657604051630a2a4e5b60e11b815260040160405180910390fd5b610ead33827f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03169190613842565b610eda827f00000000000000000000000000000000000000000000000000000000000000008360006138fa565b5050565b6000610eea8383613ad0565b90505b92915050565b6000610efd6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615831565b15610f7c57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038216610fa357604051633dbb48ed60e21b815260040160405180910390fd5b610faf85858585613b08565b95945050505050565b8282610fc58282336133ff565b828233909192610feb57604051630c76b97b60e41b81526004016103169392919061584e565b505050610ff66133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190615831565b1561107557604051632b37d9d160e21b815260040160405180910390fd5b611080858585613d23565b505050505050565b6110906133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190615871565b6001600160a01b0316336001600160a01b03161461112257604051635d9044cd60e01b815260040160405180910390fd5b601a805467ffffffffffffffff19166001600160401b0383169081179091556040519081527fe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f9060200160405180910390a150565b61117f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190615831565b156111fe57604051632b37d9d160e21b815260040160405180910390fd5b61120781613e21565b50565b6112126133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190615831565b1561129157604051632b37d9d160e21b815260040160405180910390fd5b6112a18383600080600086613ff4565b505050565b6112ae6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190615831565b1561132d57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0381166000908152601b602090815260408083203380855292529091206003810154600160a01b810463ffffffff908116911614158061139357506003810154600160c01b81046001600160401b039081166401000000009092041614155b156112a1576003810180546401000000006001600160401b03600160c01b63ffffffff19841663ffffffff600160a01b8604811691821792909204831684026bffffffffffffffffffffffff199095161793909317938490556040805193851684529190930490921660208201526001600160a01b0384811692908616917fa4c005afae9298a5ca51e7710c334ac406fb3d914588ade970850f917cedb1c6910160405180910390a3505050565b6114496133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114aa9190615831565b156114c857604051632b37d9d160e21b815260040160405180910390fd5b6114d133614157565b565b6114db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153c9190615831565b1561155a57604051632b37d9d160e21b815260040160405180910390fd5b83836115678282336133ff565b82823390919261158d57604051630c76b97b60e41b81526004016103169392919061584e565b50505061159d83620f4240101590565b83906115bf57604051631504950160e21b815260040161031691815260200190565b506001600160a01b038087166000908152601c60209081526040808320938916835292905290812084918660028111156115fb576115fb61588e565b600281111561160c5761160c61588e565b815260208101919091526040016000205583600281111561162f5761162f61588e565b856001600160a01b0316876001600160a01b03167f3474eba30406cacbfbc5a596a7e471662bbcccf206f8d244dbb6f4cc578c52208660405161167491815260200190565b60405180910390a4505050505050565b61168c6133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190615871565b6001600160a01b0316336001600160a01b03161461171e57604051635d9044cd60e01b815260040160405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f4542960abc7f2d26dab244fc440acf511e3dd0f5cefad571ca802283b4751bbb91015b60405180910390a25050565b6117866133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e79190615831565b1561180557604051632b37d9d160e21b815260040160405180910390fd5b6112a1827f00000000000000000000000000000000000000000000000000000000000000008333613b08565b6118396133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190615831565b156118b857604051632b37d9d160e21b815260040160405180910390fd5b610eda827f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000600080613ff4565b6119396040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b61196b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006119778585614250565b60028101548352600381015460208401526005810154604084015260068101546060840152600701546080830152509392505050565b6119b56133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190615831565b15611a3457604051632b37d9d160e21b815260040160405180910390fd5b81600003611a5557604051630a2a4e5b60e11b815260040160405180910390fd5b611a8033837f0000000000000000000000000000000000000000000000000000000000000000610e9d565b611a8c848484846138fa565b50505050565b611a9a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190615831565b15611b1957604051632b37d9d160e21b815260040160405180910390fd5b611b2383826142d4565b6112a183838361432a565b6001600160a01b038084166000908152601c60209081526040808320938616835292905290812081836002811115611b6857611b6861588e565b6002811115611b7957611b7961588e565b81526020019081526020016000205490505b9392505050565b6000611b9f8484846133ff565b949350505050565b611baf6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190615831565b15611c2e57604051632b37d9d160e21b815260040160405180910390fd5b8383611c3b8282336133ff565b828233909192611c6157604051630c76b97b60e41b81526004016103169392919061584e565b50505063ffffffff8416620f424010158490611c99576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5483906001600160401b03908116908216811015611ce05760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038681166000908152601b60209081526040808320938916835292905220600381015487908790600160601b90046001600160401b0316611d3f576040516330acea0d60e11b81526004016103169291906158a4565b5050600381015463ffffffff868116600160a01b90920416141580611d7b575060038101546001600160401b03858116600160c01b9092041614155b15610dc5576003810180546001600160401b038616600160c01b026001600160c01b0363ffffffff8916600160a01b02166001600160a01b039283161717909155604051878216918916907fe89cbb9d63ba60af555547b12dde6817283e88cbdd45feb2059f2ba71ea346ba90611e0f908990899063ffffffff9290921682526001600160401b0316602082015260400190565b60405180910390a350505050505050565b611e286133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190615831565b15611ea757604051632b37d9d160e21b815260040160405180910390fd5b8484611eb48282336133ff565b828233909192611eda57604051630c76b97b60e41b81526004016103169392919061584e565b5050506001600160a01b038616600090815260226020526040902054869060ff16611f2357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b50610dc587868887876134c3565b600080611f3e8585613ad0565b90506000611f4c8686614473565b90506000611f6063ffffffff8616846158d4565b90506000611f6e8383614496565b9050611f7a81856158eb565b98975050505050505050565b6001600160a01b038084166000908152601e6020908152604080832086851684528252808320938516835292905290812060038101548203611fcc576000915050611b8b565b6001600160a01b038086166000908152601b60209081526040808320938816835292905290812082545b8015612062576000818152601d602052604090206001810154426001600160401b03909116116120515760028301546001840154825461203691906158d4565b61204091906158fe565b61204a90856158eb565b9350612057565b50612062565b600201549050611ff6565b50909695505050505050565b82806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190615871565b6001600160a01b0316336001600160a01b0316146121335760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b60405163623faf6160e01b81526001600160a01b0385169063623faf61906121619086908690600401615920565b600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050505050505050565b60006121a36133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190615831565b1561222257604051632b37d9d160e21b815260040160405180910390fd5b611b9f84848433613b08565b80806001600160a01b031663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190615871565b6001600160a01b0316336001600160a01b0316146122f35760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d757374206265207468652070726f78792061646d696e00006044820152606401610316565b816001600160a01b03166359fc20bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561232e57600080fd5b505af1158015611080573d6000803e3d6000fd5b61234a6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615831565b156123c957604051632b37d9d160e21b815260040160405180910390fd5b610eda82826142d4565b6123db6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190615831565b1561245a57604051632b37d9d160e21b815260040160405180910390fd5b61120733826142d4565b6000610eed826144ad565b604080516000815260208101909152606090826001600160401b0381111561249957612499615962565b6040519080825280602002602001820160405280156124cc57816020015b60608152602001906001900390816124b75790505b50915060005b8381101561254e57612529308686848181106124f0576124f0615978565b9050602002810190612502919061598e565b85604051602001612515939291906159d4565b6040516020818303038152906040526144f8565b83828151811061253b5761253b615978565b60209081029190910101526001016124d2565b505092915050565b61255e6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190615831565b156125dd57604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b038316600090815260226020526040902054839060ff1661262357604051622920f760e21b81526001600160a01b039091166004820152602401610316565b506112a1838383614565565b6126376133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615831565b156126b657604051632b37d9d160e21b815260040160405180910390fd5b83836126c38282336133ff565b8282339091926126e957604051630c76b97b60e41b81526004016103169392919061584e565b50505085846126f98282336133ff565b82823390919261271f57604051630c76b97b60e41b81526004016103169392919061584e565b505050600061272f898988613d23565b905061273c89888361432a565b505050505050505050565b61274f6133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190615831565b156127ce57604051632b37d9d160e21b815260040160405180910390fd5b6112a1838383614565565b6127e16133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128429190615831565b1561286057604051632b37d9d160e21b815260040160405180910390fd5b8060000361288157604051630a2a4e5b60e11b815260040160405180910390fd5b6001600160a01b038084166000908152601b6020908152604080832093861683529281529082902082516101208101845281548152600182015492810192909252600281015492820192909252600382015463ffffffff80821660608401526001600160401b03640100000000830481166080850152600160601b8304811660a08501819052600160a01b840490921660c0850152600160c01b90920490911660e08301526004909201546101008201529084908490612956576040516330acea0d60e11b81526004016103169291906158a4565b505060006129648585614250565b90506000816003015411858590916129915760405163b6a70b3b60e01b81526004016103169291906158a4565b50508281600201546129a391906158eb565b60028201556129d333847f0000000000000000000000000000000000000000000000000000000000000000610e9d565b836001600160a01b0316856001600160a01b03167f673007a04e501145e79f59aea5e0413b6e88344fdaf10326254530d6a151153085604051612a1891815260200190565b60405180910390a35050505050565b6040805160208101909152600081526040805160208101909152600081526000612a518686614250565b6001600160a01b03851660009081526004909101602052604090205482525090509392505050565b612a816133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae29190615871565b6001600160a01b0316336001600160a01b031614612b1357604051635d9044cd60e01b815260040160405180910390fd5b600d805463ffffffff191690556040517f93be484d290d119d9cf99cce69d173c732f9403333ad84f69c807b590203d10990600090a1565b612b536133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb49190615831565b15612bd257604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166000908152601b6020908152604080832033808552925282209091612c018784614250565b9050600081600201548360000154612c1991906158eb565b9050808781612c445760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506000612c528883614496565b90506000612c64856000015483614496565b90508015612ed4576003850154600090612c8990839063ffffffff9081169061469516565b9050888181811015612cb757604051632f514d5760e21b815260048101929092526024820152604401610316565b50508815612d4e57612cf6888a7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031691906146fc565b876001600160a01b0316876001600160a01b03168c6001600160a01b03167f95ff4196cd75fa49180ba673948ea43935f59e7c4ba101fa09b9fe0ec266d5828c604051612d4591815260200190565b60405180910390a45b612d8c612d5b8a8461594f565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031690614737565b8554600090612da3670de0b6b3a7640000856158d4565b612dad91906158fe565b9050670de0b6b3a7640000612dc2828261594f565b8860010154612dd191906158d4565b612ddb91906158fe565b60018801558654612ded90849061594f565b8755600287015415801590612e0457506001870154155b15612e285760006002880181905560048801805491612e22836159fb565b91905055505b6001600160a01b038c166000908152600e6020526040902060040154612e4f90849061594f565b6001600160a01b038d166000908152600e60205260409020600481019190915554612e7b90849061594f565b6001600160a01b038d81166000818152600e60209081526040918290209490945551868152918b169290917fe7b110f13cde981d5079ab7faa4249c5f331f5c292dbc6031969d2ce694188a3910160405180910390a350505b612ede818361594f565b915081156130615760205460ff161561301357612f1b827f0000000000000000000000000000000000000000000000000000000000000000612d7d565b6002840154600090612f35670de0b6b3a7640000856158d4565b612f3f91906158fe565b9050828560020154612f51919061594f565b6002860155670de0b6b3a7640000612f69828261594f565b8660050154612f7891906158d4565b612f8291906158fe565b6005860155600685015415801590612f9c57506005850154155b15612fc05760006006860181905560078601805491612fba836159fb565b91905055505b866001600160a01b03168b6001600160a01b03167fc5d16dbb577cf07678b577232717c9a606197a014f61847e623d47fc6bf6b7718560405161300591815260200190565b60405180910390a350613061565b856001600160a01b03168a6001600160a01b03167fdce44f0aeed2089c75db59f5a517b9a19a734bf0213412fa129f0d0434126b248460405161305891815260200190565b60405180910390a35b50505050505050505050565b6130756133db565b6001600160a01b0316634fc07d756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d69190615871565b6001600160a01b0316336001600160a01b03161461310757604051635d9044cd60e01b815260040160405180910390fd5b6020805460ff1916600190811782556040519081527f78bd9090b1ff40fc9c2d6056a25fb880530a766f5b0595d77f3cf33fe189c194910160405180910390a1565b6131516133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b29190615831565b156131d057604051632b37d9d160e21b815260040160405180910390fd5b6001600160a01b0384166131f7576040516322347d6760e21b815260040160405180910390fd5b6001600160a01b03831661321e5760405163a962605960e01b815260040160405180910390fd5b611080868686868686613ff4565b60006132366133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132979190615831565b156132b557604051632b37d9d160e21b815260040160405180910390fd5b83836132c28282336133ff565b8282339091926132e857604051630c76b97b60e41b81526004016103169392919061584e565b5050506132f686868661477f565b9695505050505050565b6000610eea8383614473565b6133146133db565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133759190615831565b1561339357604051632b37d9d160e21b815260040160405180910390fd5b82826133a08282336133ff565b8282339091926133c657604051630c76b97b60e41b81526004016103169392919061584e565b5050506133d485858561432a565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000836001600160a01b0316826001600160a01b03160361342257506001611b8b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361348a57506001600160a01b0380841660009081526015602090815260408083209385168352929052205460ff16611b8b565b506001600160a01b038084166000908152601f60209081526040808320868516845282528083209385168352929052205460ff16611b8b565b600084116134e457604051630a2a4e5b60e11b815260040160405180910390fd5b8163ffffffff8116620f42401015613518576040516329bff5f560e01b815263ffffffff9091166004820152602401610316565b50601a5481906001600160401b0390811690821681101561355f5760405163ee5602e160e01b81526001600160401b03928316600482015291166024820152604401610316565b50506001600160a01b038581166000908152601b6020908152604080832093871683529290522060030154600160601b90046001600160401b0316156135b857604051632b542c0d60e11b815260040160405180910390fd5b60006135c3866144ad565b90508481808211156135f15760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505060405180610120016040528086815260200160008152602001600081526020018463ffffffff168152602001836001600160401b03168152602001426001600160401b031681526020018463ffffffff168152602001836001600160401b031681526020016000815250601b6000886001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160030160046101000a8154816001600160401b0302191690836001600160401b0316021790555060a082015181600301600c6101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160030160146101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160030160186101000a8154816001600160401b0302191690836001600160401b0316021790555061010082015181600401559050506000600e6000886001600160a01b03166001600160a01b0316815260200190815260200160002090508581600401546137df91906158eb565b60048201556040805187815263ffffffff861660208201526001600160401b038516918101919091526001600160a01b0380871691908916907f88b4c2d08cea0f01a24841ff5d14814ddb5b14ac44b05e0835fcc0dcd8c7bc2590606001611e0f565b80156112a1576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af115801561389e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c29190615831565b6112a15760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610316565b6001600160a01b038481166000908152601b602090815260408083209387168352929052206003015484908490600160601b90046001600160401b0316613956576040516330acea0d60e11b81526004016103169291906158a4565b505060006139648585614250565b336000908152600482016020526040902060028201549192509015158061398d57506003820154155b868690916139b057604051631984edef60e31b81526004016103169291906158a4565b505060008260020154600014806139ce575082600501548360020154145b9050600081613a0957836005015484600201546139eb919061594f565b60038501546139fa90886158d4565b613a0491906158fe565b613a0b565b855b90508015801590613a1c5750848110155b81869091613a4657604051635d88e8d160e01b815260048101929092526024820152604401610316565b5050858460020154613a5891906158eb565b60028501556003840154613a6d9082906158eb565b60038501558254613a7f9082906158eb565b835560405186815233906001600160a01b0389811691908b16907feaefa9a428d7aa0b99b7ac8aec4885d6304a78cc8d6a78a6c99dd29e9693cdf49060200160405180910390a45050505050505050565b6001600160a01b038281166000908152601b60209081526040808320938516835292905290812060018101549054610eea919061594f565b6000808311613b2a57604051637318ad9960e01b815260040160405180910390fd5b6000613b368686614250565b33600090815260048201602052604090208054919250908580821015613b785760405163ab99793560e01b815260048101929092526024820152604401610316565b5050600282015487908790613ba257604051631984edef60e31b81526004016103169291906158a4565b50506000826003015483600501548460020154613bbf919061594f565b613bc990886158d4565b613bd391906158fe565b905060008360050154600014613c065760058401546006850154613bf790846158d4565b613c0191906158fe565b613c08565b815b6001600160a01b038a81166000908152601b60209081526040808320938d1683529290529081206003015491925090613c529064010000000090046001600160401b0316426158eb565b9050828560050154613c6491906158eb565b60058601556006850154613c799083906158eb565b60068601556003850154613c8e90899061594f565b60038601558354613ca090899061594f565b84600001819055506000613cbc8b8b8a86868b600701546148fc565b9050336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f50d19209821f5d69c0884b007c6ba9ffde612c0cff5dd3234d0c6baf2c4556aa87604051613d0d91815260200190565b60405180910390a49a9950505050505050505050565b6001600160a01b038084166000908152601b60209081526040808320938616835292905290812060028101546001820154600483015484929190613d7290899089908290859087908c90614aa4565b865492955093509150613d8690849061594f565b845560028401829055600184018190556001600160a01b0388166000908152600e602052604081206004018054859290613dc190849061594f565b92505081905550866001600160a01b0316886001600160a01b03167f9008d731ddfbec70bc364780efd63057c6877bee8027c4708a104b365395885d85604051613e0d91815260200190565b60405180910390a350909695505050505050565b336000829003613e4457604051630a2a4e5b60e11b815260040160405180910390fd5b6000613e4f826144ad565b9050828180821115613e7d5760405163ccaf28a960e01b815260048101929092526024820152604401610316565b50506001600160a01b0382166000908152600e602052604081208054600d549192909163ffffffff1690819003613f2d57613eb8868361594f565b8355613ee585877f0000000000000000000000000000000000000000000000000000000000000000612ce6565b846001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc87604051613f2091815260200190565b60405180910390a2611080565b600283015415801590613f44575082600301544310155b15613f5257613f5285614157565b600283015415613f7c57613f79613f6d846003015443614bec565b84600201548389614c06565b90505b858360020154613f8c91906158eb565b6002840155613f9b81436158eb565b6003840181905560028401546040805191825260208201929092526001600160a01b038716917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050505050565b60006140008787614250565b90508060020154600014158061401857506003810154155b8787909161403b57604051631984edef60e31b81526004016103169291906158a4565b5050600080826006015490506000836005015490506140638a8a3384868a8a60070154614aa4565b60028701549295509350915061407a90849061594f565b6002850155600684018290556005840181905582156140f4576001600160a01b038816158015906140b357506001600160a01b03871615155b156140c9576140c4888885896138fa565b6140f4565b6140f433847f0000000000000000000000000000000000000000000000000000000000000000612ce6565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f305f519d8909c676ffd870495d4563032eb0b506891a6dd9827490256cc9914e8660405161414391815260200190565b60405180910390a450505050505050505050565b6001600160a01b0381166000908152600e602052604081206002810154909181900361419657604051630a2a4e5b60e11b815260040160405180910390fd5b6003820154438111156141bf57604051631d222f1b60e31b815260040161031691815260200190565b50600060028301819055600383015581546141db90829061594f565b825561420883827f0000000000000000000000000000000000000000000000000000000000000000612ce6565b826001600160a01b03167f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc8260405161424391815260200190565b60405180910390a2505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036142a957506001600160a01b0382166000908152601460205260409020610eed565b506001600160a01b038083166000908152602160209081526040808320938516835292905220610eed565b806000036142f557604051630a2a4e5b60e11b815260040160405180910390fd5b61432033827f0000000000000000000000000000000000000000000000000000000000000000610e9d565b610eda8282614c5a565b6001600160a01b038084166000908152601b6020908152604080832093861683529290529081209082900361437257604051630a2a4e5b60e11b815260040160405180910390fd5b600381015484908490600160601b90046001600160401b03166143aa576040516330acea0d60e11b81526004016103169291906158a4565b505060006143b7856144ad565b90508281808211156143e55760405163ccaf28a960e01b815260048101929092526024820152604401610316565b505081546143f49084906158eb565b82556001600160a01b0385166000908152600e602052604090206004015461441d9084906158eb565b6001600160a01b038681166000818152600e602090815260409182902060040194909455518681529187169290917feaf6ea3a42ed2fd1b6d575f818cbda593af9524aa94bd30e65302ac4dc2347459101612a18565b6000806144808484614250565b905080600501548160020154611b9f919061594f565b6000818311156144a65781610eea565b5090919050565b6001600160a01b0381166000908152600e602052604081206002810154600182015460048301549254919290916144e4919061594f565b6144ee919061594f565b610eed919061594f565b6060600080846001600160a01b0316846040516145159190615a14565b600060405180830381855af49150503d8060008114614550576040519150601f19603f3d011682016040523d82523d6000602084013e614555565b606091505b5091509150610faf858383614ccd565b336001600160a01b0383160361458e57604051630123065360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145fb573360009081526015602090815260408083206001600160a01b03861684529091529020805460ff1916821515179055614637565b336000908152601f602090815260408083206001600160a01b03878116855290835281842090861684529091529020805460ff19168215151790555b816001600160a01b0316836001600160a01b0316336001600160a01b03167faa5a59b38e8f68292982382bf635c2f263ca37137bbc52956acd808fd7bf976f84604051614688911515815260200190565b60405180910390a4505050565b60006146a483620f4240101590565b806146b757506146b782620f4240101590565b838390916146e15760405163768bf0eb60e11b815260048101929092526024820152604401610316565b50620f424090506146f283856158d4565b610eea91906158fe565b80156112a15760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb9060440161387f565b8015610eda57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561232e57600080fd5b6000816000036147a257604051630a2a4e5b60e11b815260040160405180910390fd5b60006147ae8585613ad0565b90508083808210156147dc5760405163587ab9ab60e11b815260048101929092526024820152604401610316565b50506001600160a01b038086166000908152601b60209081526040808320938816835292905290812060018101549091901561483657816001015485836002015461482791906158d4565b61483191906158fe565b614838565b845b600383015490915060009061485e9064010000000090046001600160401b0316426158eb565b905081836002015461487091906158eb565b600284015560018301546148859087906158eb565b836001018190555060006148a189898b868689600401546148fc565b9050876001600160a01b0316896001600160a01b03167f3b81913739097ced1e7fa748c6058d34e2c00b961fb501094543b397b198fdaa896040516148e891815260200190565b60405180910390a398975050505050505050565b6001600160a01b038087166000908152601e6020908152604080832089851684528252808320938816835292905290812060038101546064116149525760405163332b852b60e11b815260040160405180910390fd5b60028101546040516bffffffffffffffffffffffff1960608b811b821660208401528a811b8216603484015289901b166048820152605c810191909152600090607c0160408051808303601f1901815282825280516020918201206080840183528984526001600160401b038981168386019081526000868601818152606088018c8152858352601d909652959020955186555160018601805467ffffffffffffffff19169190921617905591516002840155516003928301559083015490915015614a325760018201546000908152601d602052604090206002018190555b614a3c8282614d29565b604080518781526001600160401b03871660208201529081018290526001600160a01b03808916918a8216918c16907f434422e55cc9ab3bcca23cbf515724bbad83af8dd645832a1abd3db5e641dea59060600160405180910390a498975050505050505050565b6001600160a01b038088166000908152601e602090815260408083208a8516845282528083209389168352929052908120600381015482918291614afb576040516307e332c560e31b815260040160405180910390fd5b60008080614b53614dbc614dd1614f30868f8f8e604051602001614b38949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905288939291908e614f61565b9150915080806020019051810190614b6b9190615a30565b809c50819d508295505050508b6001600160a01b03168d6001600160a01b03168f6001600160a01b03167f9de822a9c144d03cad4a18bc322e9a3d91ffa99463d22e5c25da2a41d4c354d58587604051614bcf929190918252602082015260400190565b60405180910390a450909c989b5096995096975050505050505050565b6000818311614bfc576000610eea565b610eea828461594f565b6000614c1282856158eb565b6001614c1e84876158eb565b614c28919061594f565b614c3284866158d4565b614c3c87896158d4565b614c4691906158eb565b614c5091906158eb565b610faf91906158fe565b6001600160a01b0382166000908152600e6020526040902054614c7e9082906158eb565b6001600160a01b0383166000818152600e6020526040908190209290925590517f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc2906117729084815260200190565b606082614ce257614cdd8261501b565b611b8b565b8151158015614cf957506001600160a01b0384163b155b15614d2257604051639996b31560e01b81526001600160a01b0385166004820152602401610316565b5080611b8b565b612710826003015410614d4f576040516303a8c56b60e61b815260040160405180910390fd5b80614d6d57604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d899084906158eb565b90915550506003820154600003614d9e578082555b6001826003016000828254614db391906158eb565b90915550505050565b6000908152601d602052604090206002015490565b6000828152601d60205260408120600181015460609190426001600160401b039091161115614e1457505060408051602081019091526000815260019150614f29565b60008060008087806020019051810190614e2e9190615a5e565b93509350935093506000808287600301541490508015614e8b5786548490614e579087906158d4565b614e6191906158fe565b9150614e6d828661594f565b8754909550614e7c908561594f565b9350614e8882876158eb565b95505b865460018801546040805185815260208101939093526001600160401b039091169082015281151560608201528b907fbe7f1ad13b07d1f0e9574e97c844204d5433e4ab98133a1f0ce257764a6abeb79060800160405180910390a26040805160208101889052908101869052606081018590526080810184905260a001604051602081830303815290604052995060008a98509850505050505050505b9250929050565b6000908152601d6020526040812081815560018101805467ffffffffffffffff191690556002810182905560030155565b600060608760030154831115614f8a57604051634a411b9d60e11b815260040160405180910390fd5b60008315614f985783614f9e565b88600301545b89549094505b8015801590614fb35750600085115b1561500c57600080614fc983898c63ffffffff16565b915091508115614fda57505061500c565b965086614fe88c8c8b615044565b925086614ff481615a94565b9750508380615002906159fb565b9450505050614fa4565b50989397509295505050505050565b80511561502b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008084600301541161506a5760405163ddaf8f2160e01b815260040160405180910390fd5b600061507d85600001548563ffffffff16565b905061509085600001548463ffffffff16565b60018560030160008282546150a5919061594f565b909155505080855560038501546000036150c157600060018601555b5050915492915050565b6001600160a01b038116811461120757600080fd5b803563ffffffff811681146150f457600080fd5b919050565b80356001600160401b03811681146150f457600080fd5b600080600080600060a0868803121561512857600080fd5b8535615133816150cb565b94506020860135615143816150cb565b935060408601359250615158606087016150e0565b9150615166608087016150f9565b90509295509295909350565b6000806040838503121561518557600080fd5b8235615190816150cb565b946020939093013593505050565b600080604083850312156151b157600080fd5b82356151bc816150cb565b915060208301356151cc816150cb565b809150509250929050565b600080600080608085870312156151ed57600080fd5b84356151f8816150cb565b93506020850135615208816150cb565b925060408501359150606085013561521f816150cb565b939692955090935050565b60008060006060848603121561523f57600080fd5b833561524a816150cb565b9250602084013561525a816150cb565b929592945050506040919091013590565b60006020828403121561527d57600080fd5b610eea826150f9565b60006101208201905082518252602083015160208301526040830151604083015263ffffffff60608401511660608301526001600160401b03608084015116608083015260a08301516152e460a08401826001600160401b03169052565b5060c08301516152fc60c084018263ffffffff169052565b5060e083015161531760e08401826001600160401b03169052565b5061010092830151919092015290565b60006020828403121561533957600080fd5b5035919050565b60006020828403121561535257600080fd5b8135611b8b816150cb565b8035600381106150f457600080fd5b6000806000806080858703121561538257600080fd5b843561538d816150cb565b9350602085013561539d816150cb565b92506153ab6040860161535d565b9396929550929360600135925050565b801515811461120757600080fd5b600080604083850312156153dc57600080fd5b82356153e7816150cb565b915060208301356151cc816153bb565b6000806000806080858703121561540d57600080fd5b8435615418816150cb565b93506020850135615428816150cb565b93969395505050506040820135916060013590565b60008060006060848603121561545257600080fd5b833561545d816150cb565b9250602084013561546d816150cb565b915061547b6040850161535d565b90509250925092565b60008060006060848603121561549957600080fd5b83356154a4816150cb565b925060208401356154b4816150cb565b915060408401356154c4816150cb565b809150509250925092565b600080600080608085870312156154e557600080fd5b84356154f0816150cb565b93506020850135615500816150cb565b925061550e604086016150e0565b915061551c606086016150f9565b905092959194509250565b60008060006060848603121561553c57600080fd5b8335615547816150cb565b92506020840135615557816150cb565b915061547b604085016150e0565b60008060006040848603121561557a57600080fd5b8335615585816150cb565b925060208401356001600160401b038111156155a057600080fd5b8401601f810186136155b157600080fd5b80356001600160401b038111156155c757600080fd5b8660208284010111156155d957600080fd5b939660209190910195509293505050565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b8301601f8101851361562457600080fd5b80356001600160401b0381111561563a57600080fd5b8560208260051b840101111561564f57600080fd5b6020919091019590945092505050565b60005b8381101561567a578181015183820152602001615662565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156156f757603f19878603018452815180518087526156d481602089016020850161565f565b601f01601f191695909501602090810195509384019391909101906001016156ab565b50929695505050505050565b60008060006060848603121561571857600080fd5b8335615723816150cb565b92506020840135615733816150cb565b915060408401356154c4816153bb565b6000806000806080858703121561575957600080fd5b8435615764816150cb565b93506020850135615774816150cb565b925060408501356153ab816150cb565b6000806000806080858703121561579a57600080fd5b84356157a5816150cb565b93506020850135925060408501359150606085013561521f816150cb565b60008060008060008060c087890312156157dc57600080fd5b86356157e7816150cb565b955060208701356157f7816150cb565b94506040870135615807816150cb565b93506060870135615817816150cb565b9598949750929560808101359460a0909101359350915050565b60006020828403121561584357600080fd5b8151611b8b816153bb565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561588357600080fd5b8151611b8b816150cb565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610eed57610eed6158be565b80820180821115610eed57610eed6158be565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b81810381811115610eed57610eed6158be565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126159a557600080fd5b8301803591506001600160401b038211156159bf57600080fd5b602001915036819003821315614f2957600080fd5b8284823760008382016000815283516159f181836020880161565f565b0195945050505050565b600060018201615a0d57615a0d6158be565b5060010190565b60008251615a2681846020870161565f565b9190910192915050565b600080600060608486031215615a4557600080fd5b5050815160208301516040909301519094929350919050565b60008060008060808587031215615a7457600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081615aa357615aa36158be565b50600019019056fea2646970667358221220a984158462a19071d33f0c9b0b8967a96b4b64feb78c617c0635061568508fff64736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c00000000000000000000000083e6689edbc7e71861f2c1eb273d1e0df00c9f3c000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonStaking#HorizonStaking","networkInteractionId":1,"nonce":724,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0b2ad822ad72df01ea02d1440acafa9d8e03c4aaae4d8913dfce65950d5e355e"},"type":"TRANSACTION_SEND"} -{"args":[],"artifactId":"PaymentsEscrow#PaymentsEscrow","dependencies":["PaymentsEscrow#PaymentsEscrow"],"functionName":"initialize","futureId":"PaymentsEscrow#encodeFunctionCall(PaymentsEscrow#PaymentsEscrow.initialize)","result":"0x8129fc1c","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"futureId":"HorizonStaking#HorizonStaking","hash":"0x0b2ad822ad72df01ea02d1440acafa9d8e03c4aaae4d8913dfce65950d5e355e","networkInteractionId":1,"receipt":{"blockHash":"0x7e8030153ee0c6ac844050c223e9cd869bc2d6a97dd3618433048565e24a3091","blockNumber":97666006,"contractAddress":"0x5DF9C2eFB1206d11C50Ad130446364c88934a17E","logs":[{"address":"0x5DF9C2eFB1206d11C50Ad130446364c88934a17E","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":3,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonStaking#HorizonStaking","result":{"address":"0x5DF9C2eFB1206d11C50Ad130446364c88934a17E","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"args":["0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","0xB5DA0C077f45BD34964D4d94cf4FE0DFbbC8Ba42","0x8129fc1c"],"artifactId":"HorizonProxies#ProxyAdmin_GraphPayments","contractAddress":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","dependencies":["HorizonProxies#ProxyAdmin_GraphPayments","HorizonProxies#TransparentUpgradeableProxy_GraphPayments","GraphPayments#GraphPayments","GraphPayments#encodeFunctionCall(GraphPayments#GraphPayments.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","networkInteraction":{"data":"0x9623609d000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd000000000000000000000000b5da0c077f45bd34964d4d94cf4fe0dfbbc8ba42000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000048129fc1c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0x191308fb34b4d18487bC323FfE5ef7B2dd2449e9","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","networkInteractionId":1,"nonce":725,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x48ce5bf2a7a7946fa46cb08b938f65d055c9ab405ddd145047fab559d861b90c"},"type":"TRANSACTION_SEND"} -{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","hash":"0x48ce5bf2a7a7946fa46cb08b938f65d055c9ab405ddd145047fab559d861b90c","networkInteractionId":1,"receipt":{"blockHash":"0xb195a6f83aab96ccb5eba8a3d96408470717d7d45c14275f607b932be78415b7","blockNumber":97666020,"logs":[{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x000000000000000000000000b5da0c077f45bd34964d4d94cf4fe0dfbbc8ba42"]},{"address":"0xdFEe494C436613BafbfB80de4b19597fc69Ec4fD","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":1,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"GraphPayments#HorizonProxies~ProxyAdmin_GraphPayments.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"args":["0xdabc7419aba5A47d368d008f42bb66c7D5801740","0x5DF9C2eFB1206d11C50Ad130446364c88934a17E"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","HorizonProxies#GraphProxy_HorizonStaking","HorizonStaking#HorizonStaking"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgrade","futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","networkInteraction":{"data":"0x99a88ec4000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d58017400000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","networkInteractionId":1,"nonce":726,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x81143e8bb21cbc2317da05173fd931ed787127cb7ac75f500dfbfd648819e4ea"},"type":"TRANSACTION_SEND"} -{"args":["0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","0x69F0a00274f8211120a80D7aFdf9b0f2D76A02F6","0x8129fc1c"],"artifactId":"HorizonProxies#ProxyAdmin_PaymentsEscrow","contractAddress":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","dependencies":["HorizonProxies#ProxyAdmin_PaymentsEscrow","HorizonProxies#TransparentUpgradeableProxy_PaymentsEscrow","PaymentsEscrow#PaymentsEscrow","PaymentsEscrow#encodeFunctionCall(PaymentsEscrow#PaymentsEscrow.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","networkInteraction":{"data":"0x9623609d0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab00000000000000000000000069f0a00274f8211120a80d7afdf9b0f2d76a02f6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000048129fc1c00000000000000000000000000000000000000000000000000000000","id":1,"to":"0xB3eD0202b929Cef59B0e2668a68F06FE996e8419","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","networkInteractionId":1,"nonce":727,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x32b4bbcdacd219fa708ba9fd58fbb98123cc33186b309fd1fc11f600d52d777d"},"type":"TRANSACTION_SEND"} -{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","hash":"0x81143e8bb21cbc2317da05173fd931ed787127cb7ac75f500dfbfd648819e4ea","networkInteractionId":1,"receipt":{"blockHash":"0xc517348d8cd18b7483f14d529927aad1f12fa4e1bcc1c10171d338692009501b","blockNumber":97666032,"logs":[{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":0,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","hash":"0x32b4bbcdacd219fa708ba9fd58fbb98123cc33186b309fd1fc11f600d52d777d","networkInteractionId":1,"receipt":{"blockHash":"0x70b6e83e417987050209e72e57662d612e2e85356f58d583d13c6b445380ae30","blockNumber":97666043,"logs":[{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x00000000000000000000000069f0a00274f8211120a80d7afdf9b0f2d76a02f6"]},{"address":"0x7782536dac304b46E4Eb60751e4021ab3b09aBAb","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":1,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"PaymentsEscrow#HorizonProxies~ProxyAdmin_PaymentsEscrow.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"args":["0x5DF9C2eFB1206d11C50Ad130446364c88934a17E","0xdabc7419aba5A47d368d008f42bb66c7D5801740"],"artifactId":"GraphProxyAdmin#GraphProxyAdmin","contractAddress":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","dependencies":["GraphProxyAdmin#GraphProxyAdmin","HorizonStaking#HorizonStaking","HorizonProxies#GraphProxy_HorizonStaking","HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.upgrade"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"acceptProxy","futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","networkInteraction":{"data":"0xeb451a020000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","id":1,"to":"0xdA053Da930D61a2a69E00Ff7AaFa11c13cb19d45","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","networkInteractionId":1,"nonce":728,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x8dc462902d97eb17529894458a9293405cd9d6ee81228a13630f5f05de8d33cc"},"type":"TRANSACTION_SEND"} -{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","hash":"0x8dc462902d97eb17529894458a9293405cd9d6ee81228a13630f5f05de8d33cc","networkInteractionId":1,"receipt":{"blockHash":"0x5cc13c1c69f5bed6de0daaa39985ff4e524a96ba26e8c97f8d5e0b7c3f458c4c","blockNumber":97666058,"logs":[{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":0,"topics":["0xaa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e"]},{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x","logIndex":1,"topics":["0x980c0d30fe97457c47903527d88b7009a1643be6de24d2af664214919f0540a1","0x0000000000000000000000005df9c2efb1206d11c50ad130446364c88934a17e","0x0000000000000000000000000000000000000000000000000000000000000000"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"artifactId":"HorizonStaking#HorizonStaking_Instance","contractAddress":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","contractName":"HorizonStaking","dependencies":["HorizonStaking#GraphProxyAdmin~GraphProxyAdmin.acceptProxy","HorizonProxies#GraphProxy_HorizonStaking"],"futureId":"HorizonStaking#HorizonStaking_Instance","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"args":[2419200],"artifactId":"HorizonStaking#HorizonStaking_Instance","contractAddress":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","dependencies":["HorizonStaking#HorizonStaking_Instance"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"setMaxThawingPeriod","futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","networkInteraction":{"data":"0x259bc435000000000000000000000000000000000000000000000000000000000024ea00","id":1,"to":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","networkInteractionId":1,"nonce":729,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x1c16b43dbb76c48cf13fdae859d9cbe3aada5bf42ca4b0f46a7823c423271a86"},"type":"TRANSACTION_SEND"} -{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","hash":"0x1c16b43dbb76c48cf13fdae859d9cbe3aada5bf42ca4b0f46a7823c423271a86","networkInteractionId":1,"receipt":{"blockHash":"0xfb550b0cd988a9383520bd6466d4371534898c8839c17a6fca131d252ae41f78","blockNumber":97666073,"logs":[{"address":"0xdabc7419aba5A47d368d008f42bb66c7D5801740","data":"0x000000000000000000000000000000000000000000000000000000000024ea00","logIndex":0,"topics":["0xe8526be46fa99b6313d439293c9be3491ffb067741bc8fce9d30c270cbb8459f"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"HorizonStaking#HorizonStaking_Instance.setMaxThawingPeriod","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"artifactId":"DisputeManager#DisputeManager","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C"],"contractName":"DisputeManager","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"DisputeManager#DisputeManager","futureType":"NAMED_ARTIFACT_CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"DisputeManager#DisputeManager","networkInteraction":{"data":"0x6101c060405234801561001157600080fd5b506040516138243803806138248339810160408190526100309161049b565b806001600160a01b03811661007a5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b29061033b565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100e59061033b565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b602082015261011e9061033b565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b60208201526101589061033b565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b60208201526101909061033b565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101cb9061033b565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b60208201526102099061033b565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b60208201526102459061033b565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027a9061033b565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103249790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a4506103356103e9565b50610519565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161037691815260200190565b602060405180830381865afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b7919061049b565b9050826001600160a01b0382166103e25760405163218f5add60e11b815260040161007191906104cb565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104395760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146104985780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156104ad57600080fd5b81516001600160a01b03811681146104c457600080fd5b9392505050565b602081526000825180602084015260005b818110156104f957602081860181015160408684010152016104dc565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516132a861057c60003960005050600050506000505060005050600050506000505060005050600050506000611fe30152600061160e01526132a86000f3fe608060405234801561001057600080fd5b50600436106101b05760003560e01c806376c993ae116100ef578063be41f38411610092578063be41f3841461040b578063c133b4291461042e578063c50a77b114610441578063c894222e14610454578063c9747f511461047c578063d36fc9d41461048f578063d76f62d1146104a2578063f2fde38b146104b557600080fd5b806376c993ae1461038657806384633713146103995780638da5cb5b146103a7578063902a4938146103af5780639334ea52146103bf57806393a90a1e146103d25780639f81a7cf146103e5578063b0eefabe146103f857600080fd5b806336167e031161015757806336167e03146102d95780634bc5839a146102ec5780635aea0ec4146102ff5780635bf31d4d1461032b5780635ed2c96c146103455780636369df6b146103585780636cc6cde11461036b578063715018a61461037e57600080fd5b8063050b17ad146101b55780630533e1ba146101ca57806311be1997146101fb578063169729781461027257806317337b46146102855780631792f1941461028f57806326058249146102a257806329e03ff1146102c2575b600080fd5b6101c86101c3366004612a74565b6104c8565b005b6036546101e190600160201b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61025e610209366004612a96565b60376020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160a01b039586169695909416949293919260ff80831693610100909304169188565b6040516101f2989796959493929190612ad9565b6101c8610280366004612a96565b61074b565b6101e16207a12081565b6101c861029d366004612a96565b61075f565b6033546102b5906001600160a01b031681565b6040516101f29190612b39565b6102cb60355481565b6040519081526020016101f2565b6101c86102e7366004612a96565b610a07565b6102cb6102fa366004612b62565b610bef565b603454600160a01b90046001600160401b03165b6040516001600160401b0390911681526020016101f2565b60345461031390600160a01b90046001600160401b031681565b6101c8610353366004612bb5565b610c10565b6102cb610366366004612cb5565b610d43565b6034546102b5906001600160a01b031681565b6101c8610d4e565b6101c8610394366004612d20565b610d62565b60365463ffffffff166101e1565b6102b5610d73565b6036546101e19063ffffffff1681565b6101c86103cd366004612a96565b610d8e565b6101c86103e0366004612d3d565b610fae565b6101c86103f3366004612d20565b610fbf565b6101c8610406366004612d3d565b610fd0565b61041e610419366004612a96565b610fe1565b60405190151581526020016101f2565b6102cb61043c366004612d3d565b611017565b6102cb61044f366004612da2565b6110af565b610467610462366004612de3565b61113b565b604080519283526020830191909152016101f2565b6102b561048a366004612eb9565b611320565b61041e61049d366004612ed5565b611411565b6101c86104b0366004612f0b565b61141d565b6101c86104c3366004612d3d565b61142e565b6034546001600160a01b031633146104f35760405163a8baf3bb60e01b815260040160405180910390fd5b816104fd81610fe1565b8190610528576040516314a03bbd60e21b815260040161051f91815260200190565b60405180910390fd5b506004600082815260376020526040902060040154610100900460ff16600581111561055657610556612aaf565b600083815260376020526040902060040154610100900460ff1691146105905760405163146e540f60e21b815260040161051f9190612f28565b50600083815260376020526040812060048101805461ff001916610100179055805460068201549192916105cf916001600160a01b0316908690611469565b6001830154600284015491925061060e916001600160a01b03909116906105f69084612f4c565b6105fe61160c565b6001600160a01b03169190611630565b604080516101008101825283546001600160a01b0390811682526001850154166020820152600280850154928201929092526003840154606082015260048401546106d6928591608084019160ff9091169081111561066f5761066f612aaf565b600281111561068057610680612aaf565b81526020016004820160019054906101000a900460ff1660058111156106a8576106a8612aaf565b60058111156106b9576106b9612aaf565b8152602001600582015481526020016006820154815250506116e7565b156106e8576106e88260030154610a07565b6001820154825460028401546001600160a01b03928316929091169087907f6d800aaaf64b9a1f321dcd63da04369d33d8a0d49ad0fbba085aab4a98bf31c490610733908690612f4c565b60405190815260200160405180910390a45050505050565b61075361172e565b61075c81611760565b50565b8061076981610fe1565b819061078b576040516314a03bbd60e21b815260040161051f91815260200190565b506000818152603760205260409020600101546001600160a01b031633146107c65760405163082c005560e41b815260040160405180910390fd5b816107d081610fe1565b81906107f2576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff16600581111561082057610820612aaf565b600083815260376020526040902060040154610100900460ff16911461085a5760405163146e540f60e21b815260040161051f9190612f28565b5060008381526037602052604090206034546005820154429161088e91600160a01b9091046001600160401b031690612f4c565b106108ac57604051631d7753d560e11b815260040160405180910390fd5b6002810154156108d657600181015460028201546108d6916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b03908116825260018401541660208201526002808401549282019290925260038301546060820152600483015461099e928491608084019160ff9091169081111561093757610937612aaf565b600281111561094857610948612aaf565b81526020016004820160019054906101000a900460ff16600581111561097057610970612aaf565b600581111561098157610981612aaf565b8152602001600582015481526020016006820154815250506117bf565b5060048101805461ff00191661050017905560018101548154600283015460408051918252516001600160a01b03938416939092169187917f223103f8eb52e5f43a75655152acd882a605d70df57a5c0fefd30f516b1756d2919081900360200190a450505050565b6034546001600160a01b03163314610a325760405163a8baf3bb60e01b815260040160405180910390fd5b80610a3c81610fe1565b8190610a5e576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610a8c57610a8c612aaf565b600083815260376020526040902060040154610100900460ff169114610ac65760405163146e540f60e21b815260040161051f9190612f28565b5060008281526037602090815260409182902060048101805461020061ff001982161790915583516101008101855282546001600160a01b0390811682526001840154169381019390935260028083015494840194909452600382015460608401529092610b4992918491608084019160ff169081111561066f5761066f612aaf565b6003820154849115610b7757604051634137159360e11b81526004810192909252602482015260440161051f565b5050610b988160020154610b8961160c565b6001600160a01b03169061180d565b6001810154815460028301546040519081526001600160a01b03928316929091169085907f2226ebd23625a7938fb786df2248bd171d2e6ad70cb2b654ea1be830ca17224d906020015b60405180910390a4505050565b6000610bf9611872565b610c07336035548585611891565b90505b92915050565b6000610c1a611bd3565b805490915060ff600160401b82041615906001600160401b0316600081158015610c415750825b90506000826001600160401b03166001148015610c5d5750303b155b905081158015610c6b575080155b15610c895760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cb357845460ff60401b1916600160401b1785555b610cbc33611bf7565b610cc4611c08565b610ccd8a611c18565b610cd689611c89565b610cdf88611760565b610ce887611d0e565b610cf186611d8b565b8315610d3757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000610c0a82611e18565b610d5661172e565b610d606000611eb5565b565b610d6a61172e565b61075c81611d0e565b600080610d7e611f11565b546001600160a01b031692915050565b6034546001600160a01b03163314610db95760405163a8baf3bb60e01b815260040160405180910390fd5b80610dc381610fe1565b8190610de5576040516314a03bbd60e21b815260040161051f91815260200190565b506004600082815260376020526040902060040154610100900460ff166005811115610e1357610e13612aaf565b600083815260376020526040902060040154610100900460ff169114610e4d5760405163146e540f60e21b815260040161051f9190612f28565b506000828152603760205260409020600281015415610e865760018101546002820154610e86916001600160a01b0316906105fe61160c565b604080516101008101825282546001600160a01b039081168252600184015416602082015260028084015492820192909252600383015460608201526004830154610f4e928491608084019160ff90911690811115610ee757610ee7612aaf565b6002811115610ef857610ef8612aaf565b81526020016004820160019054906101000a900460ff166005811115610f2057610f20612aaf565b6005811115610f3157610f31612aaf565b815260200160058201548152602001600682015481525050611f35565b5060048101805461ff0019166103001790556001810154815460028301546040519081526001600160a01b03928316929091169085907ff0912efb86ea1d65a17d64d48393cdb1ca0ea5220dd2bbe438621199d30955b790602001610be2565b610fb661172e565b61075c81611f70565b610fc761172e565b61075c81611d8b565b610fd861172e565b61075c81611c18565b600080600083815260376020526040902060040154610100900460ff16600581111561100f5761100f612aaf565b141592915050565b600080611022611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e9261105692889290911690600401612f5f565b61012060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612f94565b90506110a8838260000151612005565b9392505050565b60006110b9611872565b610c07336035546110ff86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b6000806000339050600061118488888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b905060006111c787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213692505050565b90506111d38282612532565b8251602080850151604080870151865193870151918701519495929490939261123257604051636aba529760e11b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161051f565b505050505050600061127d846000858d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b905060006112c4856000858c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061227d92505050565b60008381526037602052604080822060039081018490558383528183200185905551919250829184917ffec135a4cf8e5c6e13dea23be058bf03a8bf8f1f6fb0a021b0a5aeddfba8140791a3909a909950975050505050505050565b60008061132c83612563565b603354604051630e02292360e01b81529192506000916001600160a01b0390911690630e02292390611362908590600401612b39565b61010060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613036565b805190915082906001600160a01b03166113d2576040516334789d8b60e21b815260040161051f9190612b39565b50604084015160208201519081811461140757604051630a24cfe560e21b81526004810192909252602482015260440161051f565b5050519392505050565b6000610c078383612532565b61142561172e565b61075c81611c89565b61143661172e565b6001600160a01b038116611460576000604051631e4fbdf760e01b815260040161051f9190612b39565b61075c81611eb5565b600080611474611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926114a8928a9290911690600401612f5f565b61012060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190612f94565b60365490915060009061150f90859063ffffffff600160201b9091048116906125f416565b905084158015906115205750808511155b8582909161154a5760405163cc6b7c4160e01b81526004810192909252602482015260440161051f565b5050600061155c86846000015161265b565b60365490915060009061157a9063ffffffff9081169084906125f416565b60335460408051602081018b905280820184905281518082038301815260608201928390526365c1a3ff60e11b9092529293506001600160a01b039091169163cb8347fe916115ce918c91906064016130f9565b600060405180830381600087803b1580156115e857600080fd5b505af11580156115fc573d6000803e3d6000fd5b50929a9950505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b80156116e25760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061311d565b6116e25760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b604482015260640161051f565b505050565b606081015160009080158015906110a857506004600082815260376020526040902060040154610100900460ff16600581111561172657611726612aaf565b149392505050565b33611737610d73565b6001600160a01b031614610d60573360405163118cdaa760e01b815260040161051f9190612b39565b80806117825760405163033f4e0560e01b815260040161051f91815260200190565b5060358190556040518181527f97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8906020015b60405180910390a150565b60006117ca826116e7565b1561180557606082015160008181526037602052604090206004810180546005919061ff001916610100835b02179055506001949350505050565b506000919050565b801561186e57604051630852cd8d60e31b8152600481018290526001600160a01b038316906342966c6890602401600060405180830381600087803b15801561185557600080fd5b505af1158015611869573d6000803e3d6000fd5b505050505b5050565b610d603360355461188161160c565b6001600160a01b03169190612671565b6040516001600160601b0319606084901b1660208201526034810182905260009081906054016040516020818303038152906040528051906020012090506118d881610fe1565b1581906118fb5760405163124a23f160e11b815260040161051f91815260200190565b50603354604051630e02292360e01b81526000916001600160a01b031690630e0229239061192d908890600401612b39565b61010060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f9190613036565b8051909150856001600160a01b03821661199d576040516334789d8b60e21b815260040161051f9190612b39565b5060006119a8611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926119dc92879290911690600401612f5f565b61012060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612f94565b8051909150600003611a435760405163307efdb760e11b815260040160405180910390fd5b6000611a53838360000151612005565b604080516101008101825286516001600160a01b0390811682528d1660208201529081018b905260006060820152909150608081016001815260200160048152426020808301919091526040918201849052600088815260378252829020835181546001600160a01b039182166001600160a01b031991821617835592850151600180840180549290931691909416179055918301516002808401919091556060840151600384015560808401516004840180549193909260ff19909216918490811115611b2357611b23612aaf565b021790555060a082015160048201805461ff001916610100836005811115611b4d57611b4d612aaf565b021790555060c0820151600582015560e0909101516006909101558351604080518b81526001600160a01b038b811660208301529181018a905260608101849052818d16929091169087907fbfd6e5f61b4aa04b088a513a833705c7c703b907516c1dbfa66f93d1f725d33d9060800160405180910390a4509298975050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611bff6126b2565b61075c816126d7565b611c106126b2565b610d606126df565b6001600160a01b038116611c3f5760405163616bc44160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517f51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e90600090a250565b806001600160401b0316600003611cb35760405163c4411f1160e01b815260040160405180910390fd5b6034805467ffffffffffffffff60a01b1916600160a01b6001600160401b038416908102919091179091556040519081527f310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6906020016117b4565b806207a12063ffffffff82161115611d425760405163432e664360e11b815263ffffffff909116600482015260240161051f565b506036805463ffffffff191663ffffffff83169081179091556040519081527fc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab906020016117b4565b8063ffffffff8116620f42401015611dbf57604051634e9374fb60e11b815263ffffffff909116600482015260240161051f565b506036805467ffffffff000000001916600160201b63ffffffff8481168202929092179283905560405192041681527f7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502906020016117b4565b600054815160208084015160409485015185517f32dd026408194a0d7e54cc66a2ab6c856efc55cfcd4dd258fde5b1a55222baa6818501528087019490945260608401919091526080808401919091528451808403909101815260a08301855280519082012061190160f01b60c084015260c283019390935260e28083019390935283518083039093018352610102909101909252805191012090565b6000611ebf611f11565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000611f40826116e7565b1561180557606082015160008181526037602052604090206004810180546003919061ff001916610100836117f6565b6001600160a01b038116611f975760405163616bc44160e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0383169081179091556040517f81dcb738da3dabd5bb2adbc7dd107fbbfca936e9c8aecab25f5b17a710a784c790600090a250565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080612010611fe1565b603354604051631584a17960e21b81526001600160a01b039283169263561285e49261204492899290911690600401612f5f565b60a060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612085919061313f565b6000015190506000603360009054906101000a90046001600160a01b03166001600160a01b0316631ebb7c306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906131be565b6121149063ffffffff16856131db565b9050600061212283836127b1565b61212c9086612f4c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001612175602080612f4c565b61217f9190612f4c565b61218a906060612f4c565b825190811490600161219d602080612f4c565b6121a79190612f4c565b6121b2906060612f4c565b90916121da57604051633fdf342360e01b81526004810192909252602482015260440161051f565b50506000806000848060200190518101906121f591906131f2565b92509250925060006122088660606127c1565b905060006122218761221c60206060612f4c565b6127c1565b90506000612245886020612236816060612f4c565b6122409190612f4c565b612813565b6040805160c081018252978852602088019690965294860193909352606085019190915260808401525060ff1660a082015292915050565b60008061228984611320565b90506000612295611fe1565b6033546040516312ecc4bf60e11b81526001600160a01b03928316926325d9897e926122c992879290911690600401612f5f565b61012060405180830381865afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b9190612f94565b80519091506000036123305760405163307efdb760e11b815260040160405180910390fd5b84516020808701516040808901518151938401949094528201526060808201929092526001600160601b031984831b811660808301529189901b909116609482015260009060a80160405160208183030381529060405280519060200120905061239981610fe1565b1581906123bc5760405163124a23f160e11b815260040161051f91815260200190565b5060006123cd848460000151612005565b60408051610100810182526001600160a01b0387811682528c811660208084019182528385018e8152600060608601818152600260808801818152600460a08a018190524260c08b015260e08a018c90528d8552603790965298909220875181549088166001600160a01b031991821617825595516001808301805492909916919097161790965591518582015590516003850155945190830180549697509395929490939260ff19169190849081111561248a5761248a612aaf565b021790555060a082015160048201805461ff0019166101008360058111156124b4576124b4612aaf565b021790555060c0820151816005015560e08201518160060155905050886001600160a01b0316846001600160a01b0316837ffb609a7fd5eb7947365d2f96d051030cac33a27e3e4923f97ea4e03aaa2bcb148b8b604001518b8760405161251e9493929190613220565b60405180910390a450979650505050505050565b8051825160009114801561254d575081604001518360400151145b8015610c07575050602090810151910151141590565b60408051606081018252825181526020808401519082015282820151918101919091526000908161259382611e18565b90506125ec81856060015186608001518760a001516040516020016125d893929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052612865565b949350505050565b600061260383620f4240101590565b80612616575061261682620f4240101590565b838390916126405760405163768bf0eb60e11b81526004810192909252602482015260440161051f565b50620f4240905061265183856131db565b610c079190613250565b600081831061266a5781610c07565b5090919050565b80156116e2576040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd90606401611667565b6126ba61288f565b610d6057604051631afcd79f60e31b815260040160405180910390fd5b6114366126b2565b6126e76126b2565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527f171a7fa058648750a8c5aae430f30db8d0100efc3a5e1b2e8054b1c1ce28b6b4918101919091527f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d60608201524660808201523060a08201527fa070ffb1cd7409649bf77822cce74495468e06dbfaef09556838bf188679b9c260c082015260e00160408051601f198184030181529190528051602090910120600055565b60008183111561266a5781610c07565b60006127ce602083612f4c565b835190811015906127e0602085612f4c565b909161280857604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016020015190565b6000612820600183612f4c565b83519081101590612832600185612f4c565b909161285a57604051633fdf342360e01b81526004810192909252602482015260440161051f565b505050016001015190565b60008060008061287586866128a9565b92509250925061288582826128f6565b5090949350505050565b6000612899611bd3565b54600160401b900460ff16919050565b600080600083516041036128e35760208401516040850151606086015160001a6128d5888285856129af565b9550955095505050506128ef565b50508151600091506002905b9250925092565b600082600381111561290a5761290a612aaf565b03612913575050565b600182600381111561292757612927612aaf565b036129455760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561295957612959612aaf565b0361297a5760405163fce698f760e01b81526004810182905260240161051f565b600382600381111561298e5761298e612aaf565b0361186e576040516335e2f38360e21b81526004810182905260240161051f565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156129e05750600091506003905082612a6a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612a34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6057506000925060019150829050612a6a565b9250600091508190505b9450945094915050565b60008060408385031215612a8757600080fd5b50508035926020909101359150565b600060208284031215612aa857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60068110612ad557612ad5612aaf565b9052565b6001600160a01b038981168252881660208201526040810187905260608101869052610100810160038610612b1057612b10612aaf565b856080830152612b2360a0830186612ac5565b60c082019390935260e001529695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461075c57600080fd5b60008060408385031215612b7557600080fd5b8235612b8081612b4d565b946020939093013593505050565b6001600160401b038116811461075c57600080fd5b63ffffffff8116811461075c57600080fd5b600080600080600060a08688031215612bcd57600080fd5b8535612bd881612b4d565b94506020860135612be881612b8e565b9350604086013592506060860135612bff81612ba3565b91506080860135612c0f81612ba3565b809150509295509295909350565b60405160c081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612c4d57634e487b7160e01b600052604160045260246000fd5b60006060828403128015612cc857600080fd5b50604051600090606081016001600160401b0381118282101715612cfa57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b600060208284031215612d3257600080fd5b81356110a881612ba3565b600060208284031215612d4f57600080fd5b81356110a881612b4d565b60008083601f840112612d6c57600080fd5b5081356001600160401b03811115612d8357600080fd5b602083019150836020828501011115612d9b57600080fd5b9250929050565b60008060208385031215612db557600080fd5b82356001600160401b03811115612dcb57600080fd5b612dd785828601612d5a565b90969095509350505050565b60008060008060408587031215612df957600080fd5b84356001600160401b03811115612e0f57600080fd5b612e1b87828801612d5a565b90955093505060208501356001600160401b03811115612e3a57600080fd5b612e4687828801612d5a565b95989497509550505050565b600060c08284031215612e6457600080fd5b612e6c612c1d565b8235815260208084013590820152604080840135908201526060808401359082015260808084013590820152905060a082013560ff81168114612eae57600080fd5b60a082015292915050565b600060c08284031215612ecb57600080fd5b610c078383612e52565b6000806101808385031215612ee957600080fd5b612ef38484612e52565b9150612f028460c08501612e52565b90509250929050565b600060208284031215612f1d57600080fd5b81356110a881612b8e565b60208101610c0a8284612ac5565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c0a57610c0a612f36565b6001600160a01b0392831681529116602082015260400190565b8051612f8481612ba3565b919050565b8051612f8481612b8e565b6000610120828403128015612fa857600080fd5b506000612fb3612c53565b835181526020808501519082015260408085015190820152612fd760608501612f79565b6060820152612fe860808501612f89565b6080820152612ff960a08501612f89565b60a082015261300a60c08501612f79565b60c082015261301b60e08501612f89565b60e08201526101009384015193810193909352509092915050565b600061010082840312801561304a57600080fd5b506000613055612c84565b835161306081612b4d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e09384015193810193909352509092915050565b6000815180845260005b818110156130d9576020818501810151868301820152016130bd565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190526000906125ec908301846130b3565b60006020828403121561312f57600080fd5b815180151581146110a857600080fd5b600060a082840312801561315257600080fd5b5060405160009060a081016001600160401b038111828210171561318457634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b6000602082840312156131d057600080fd5b81516110a881612ba3565b8082028115828204841417610c0a57610c0a612f36565b60008060006060848603121561320757600080fd5b5050815160208301516040909301519094929350919050565b84815283602082015260806040820152600061323f60808301856130b3565b905082606083015295945050505050565b60008261326d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122015fc51a79247a9edf26bdaf727ea63de7398a97bc3a27ad1e74c0ff8bf34282e64736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"DisputeManager#DisputeManager","networkInteractionId":1,"nonce":730,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xf02f773d37fe324131e62a7356fa40507b12c6095b5f672d9a4ed4a63c80b307"},"type":"TRANSACTION_SEND"} -{"artifactId":"DisputeManager#DisputeManager_Instance","contractAddress":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","contractName":"DisputeManager","dependencies":[],"futureId":"DisputeManager#DisputeManager_Instance","futureType":"NAMED_ARTIFACT_CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"DisputeManager#ProxyAdmin","contractAddress":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","contractName":"ProxyAdmin","dependencies":[],"futureId":"DisputeManager#ProxyAdmin","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"futureId":"DisputeManager#DisputeManager","hash":"0xf02f773d37fe324131e62a7356fa40507b12c6095b5f672d9a4ed4a63c80b307","networkInteractionId":1,"receipt":{"blockHash":"0x8bf842806ab89320556d4cd8f5ddf73fd4868e00209224aa77add59a46d76bdc","blockNumber":97666098,"contractAddress":"0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","logs":[{"address":"0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":4,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]},{"address":"0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","data":"0x000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":5,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"DisputeManager#DisputeManager","result":{"address":"0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"args":["0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0",2419200,"10000000000000000000000",500000,1000000],"artifactId":"DisputeManager#DisputeManager","dependencies":["DisputeManager#DisputeManager"],"functionName":"initialize","futureId":"DisputeManager#encodeFunctionCall(DisputeManager#DisputeManager.initialize)","result":"0x5ed2c96c000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0000000000000000000000000000000000000000000000000000000000024ea0000000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000000000000000000007a12000000000000000000000000000000000000000000000000000000000000f4240","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"args":["0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1","0x5ed2c96c000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0000000000000000000000000000000000000000000000000000000000024ea0000000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000000000000000000007a12000000000000000000000000000000000000000000000000000000000000f4240"],"artifactId":"DisputeManager#ProxyAdmin","contractAddress":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","dependencies":["DisputeManager#ProxyAdmin","DisputeManager#DisputeManager","DisputeManager#encodeFunctionCall(DisputeManager#DisputeManager.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","networkInteraction":{"data":"0x9623609d0000000000000000000000008f2f7801f4bbdcaeabfd18ee671b1874b1dc59d50000000000000000000000008e436e815226c8bd5e775c7ff693dae6a94be7d1000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a45ed2c96c000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0000000000000000000000000000000000000000000000000000000000024ea0000000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000000000000000000007a12000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000","id":1,"to":"0xe002DE2C9C6b7aebD9e275C1234B68b917a2B13e","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","networkInteractionId":1,"nonce":731,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x2dd77b6988019198c5c5c7d2cc696716139d7825b5ff7ec2e3c8ce5de1032125"},"type":"TRANSACTION_SEND"} -{"futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","hash":"0x2dd77b6988019198c5c5c7d2cc696716139d7825b5ff7ec2e3c8ce5de1032125","networkInteractionId":1,"receipt":{"blockHash":"0x605ed3bd10e731864ba11f2fe559988fd8840e79f451d9e204b40e7acc40cdab","blockNumber":97666115,"logs":[{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x0000000000000000000000008e436e815226c8bd5e775c7ff693dae6a94be7d1"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000e002de2c9c6b7aebd9e275c1234b68b917a2b13e"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x","logIndex":2,"topics":["0x51744122301b50e919f4e3d22adf8c53abc92195b8c667eda98c6ef20375672e","0x000000000000000000000000ffcf8fdee72ac11b5c542428b35eef5769c409f0"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x000000000000000000000000000000000000000000000000000000000024ea00","logIndex":3,"topics":["0x310462a9bf49fff4a57910ec647c77cbf8aaf2f13394554ac6cdf14fc68db7e6"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x00000000000000000000000000000000000000000000021e19e0c9bab2400000","logIndex":4,"topics":["0x97896b9da0f97f36bf3011570bcff930069299de4b1e89c9cb44909841cac2f8"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x000000000000000000000000000000000000000000000000000000000007a120","logIndex":5,"topics":["0xc573dc0f869f6a1d0a74fc7712a63baabcb5567131d2d98005e163924eddcbab"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x00000000000000000000000000000000000000000000000000000000000f4240","logIndex":6,"topics":["0x7efaf01bec3cda8d104163bb466d01d7e16f68848301c7eb0749cfa59d680502"]},{"address":"0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":7,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"DisputeManager#ProxyAdmin.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} -{"artifactId":"SubgraphService#ProxyAdmin","contractAddress":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","contractName":"ProxyAdmin","dependencies":[],"futureId":"SubgraphService#ProxyAdmin","futureType":"CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"artifactId":"SubgraphService#SubgraphService","constructorArgs":["0x59c3CA02528054C6337f63eb367a374Ac45C292C","0x8F2f7801f4BBDcaeabFD18Ee671B1874b1dC59d5","0x84149af521E4C32dDCCb7e9F1F63a187A964396c","0x345Fc25633aeBE518Ad42047fCB210eC01b8de7C"],"contractName":"SubgraphService","dependencies":[],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","futureId":"SubgraphService#SubgraphService","futureType":"NAMED_ARTIFACT_CONTRACT_DEPLOYMENT","libraries":{},"strategy":"basic","strategyConfig":{},"type":"DEPLOYMENT_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"SubgraphService#SubgraphService","networkInteraction":{"data":"0x61024060405234801561001157600080fd5b5060405161668f38038061668f83398101604081905261003091610541565b3083838387806001600160a01b03811661007f5760405163218f5add60e11b815260206004820152600a60248201526921b7b73a3937b63632b960b11b60448201526064015b60405180910390fd5b6001600160a01b0381166101005260408051808201909152600a81526923b930b8342a37b5b2b760b11b60208201526100b7906103c5565b6001600160a01b03166080526040805180820190915260078152665374616b696e6760c81b60208201526100ea906103c5565b6001600160a01b031660a05260408051808201909152600d81526c47726170685061796d656e747360981b6020820152610123906103c5565b6001600160a01b031660c05260408051808201909152600e81526d5061796d656e7473457363726f7760901b602082015261015d906103c5565b6001600160a01b031660e05260408051808201909152600c81526b22b837b1b426b0b730b3b2b960a11b6020820152610195906103c5565b6001600160a01b03166101205260408051808201909152600e81526d2932bbb0b93239a6b0b730b3b2b960911b60208201526101d0906103c5565b6001600160a01b0316610140526040805180820190915260118152704772617068546f6b656e4761746577617960781b602082015261020e906103c5565b6001600160a01b03166101605260408051808201909152600f81526e23b930b834283937bc3ca0b236b4b760891b602082015261024a906103c5565b6001600160a01b03166101805260408051808201909152600881526721bab930ba34b7b760c11b602082015261027f906103c5565b6001600160a01b039081166101a08190526101005160a05160805160c05160e05161012051610140516101605161018051604051988b169a9788169996909716977fef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43976103299790916001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e00190565b60405180910390a450506001600160a01b038481166101c08190528482166101e08190528483166102008190529284166102208190526040805193845260208401929092529082019290925260608101919091527f4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda79060800160405180910390a1505050506103bc61047360201b60201c565b50505050610605565b600080610100516001600160a01b031663f7641a5e84805190602001206040518263ffffffff1660e01b815260040161040091815260200190565b602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610595565b9050826001600160a01b03821661046c5760405163218f5add60e11b815260040161007691906105b7565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156104c35760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146105225780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b038116811461053c57600080fd5b919050565b6000806000806080858703121561055757600080fd5b61056085610525565b935061056e60208601610525565b925061057c60408601610525565b915061058a60608601610525565b905092959194509250565b6000602082840312156105a757600080fd5b6105b082610525565b9392505050565b602081526000825180602084015260005b818110156105e557602081860181015160408684010152016105c8565b506000604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615ff161069e60003960006143f801526000612fa9015260008181611a1801526138d00152600050506000505060005050600050506000613fe6015260006137fd01526000505060005050600050506000612045015260006143d40152615ff16000f3fe608060405234801561001057600080fd5b50600436106102ce5760003560e01c80638180083b1161017e578063a827a90c116100df578063a827a90c146108f6578063ac9650d814610909578063b15d2a2c14610929578063ba38f67d1461093c578063bfdfa7af1461094f578063cb8347fe14610966578063cbe5f3f214610979578063ce0fc0cc14610999578063ce56c98b146109ac578063d07a7a84146109bf578063dedf6726146109c8578063e2e1e8e9146109db578063e6f50054146109fb578063eff0f59214610a0e578063f2fde38b14610a4357600080fd5b80638180083b14610795578063819ba366146107a857806381e777a7146107c5578063832bc923146107d85780638456cb59146107eb57806384b0196e146107f357806385e82baf1461080e57806388812583146108175780638d2f29481461082e5780638da5cb5b146108595780639249c5c1146108615780639384e0781461087857806393d4e7cb1461089b5780639aafa5d1146108dc57600080fd5b80634f793cdc116102335780634f793cdc146104b157806352a9039c146104d357806355c85269146105735780635c975abb146106365780636234e2161461063e5780636a3ca3831461065e5780636d9a395114610671578063715018a6146106ec57806371ce020a146106f45780637203ca781461070a5780637337182314610740578063772495c3146107495780637aa31bce1461075c5780637dfe6d281461076f5780637e89bac31461078257600080fd5b80630e022923146102d3578063138dea081461035457806313c474c91461036b5780631cafa218146103c05780631dd42f60146103d55780631ebb7c30146103e857806324b8fbf61461040e578063355779621461042157806336fdd28a146104345780633afd23fe1461043d5780633f0ed79d1461045d5780633f4ba83a1461048057806345f5448514610488578063482468b71461049b575b600080fd5b6102e66102e1366004615151565b610a56565b60405161034b919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0828101519082015260c0808301519082015260e091820151918101919091526101000190565b60405180910390f35b61035d60d75481565b60405190815260200161034b565b6103a0610379366004615151565b606a6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b6103d36103ce366004615180565b610ad8565b005b6103d36103e33660046151b8565b610c56565b600254600160c01b900463ffffffff165b60405163ffffffff909116815260200161034b565b6103d361041c366004615216565b610c6f565b6103d361042f366004615278565b610e9a565b61035d60005481565b61035d61044b3660046152b1565b60a26020526000908152604090205481565b61047061046b366004615151565b610eb0565b604051901515815260200161034b565b6103d3610ed1565b6103d36104963660046152b1565b610f15565b6104a3610f1f565b60405161034b9291906152ca565b6104c46104bf366004615151565b610f32565b60405161034b93929190615331565b61052e6104e1366004615151565b609d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909188565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161034b565b610604610581366004615151565b6001600160a01b039081166000908152609d60209081526040918290208251610100810184528154909416808552600182015492850183905260028201549385018490526003820154606086015260048201546080860152600582015460a0860152600682015460c0860181905260079092015460e09095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161034b565b610470611065565b61035d61064c366004615151565b609f6020526000908152604090205481565b61047061066c366004615151565b61107a565b6106c861067f366004615151565b604080518082018252600080825260209182018190526001600160a01b039384168152609e82528290208251808401909352805490931682526001909201549181019190915290565b6040805182516001600160a01b03168152602092830151928101929092520161034b565b6103d36110f6565b6106fc611108565b60405161034b929190615366565b610733610718366004615151565b60a1602052600090815260409020546001600160a01b031681565b60405161034b9190615380565b61035d60015481565b6103d3610757366004615151565b611113565b6103d361076a3660046152b1565b61111d565b6103d361077d366004615394565b61112e565b6103d36107903660046152b1565b611146565b6103d36107a3366004615216565b6111ba565b6107b0611345565b6040805192835260208301919091520161034b565b6103d36107d3366004615394565b611355565b6103d36107e63660046152b1565b6114bb565b6103d36114cf565b6107fb611511565b60405161034b97969594939291906153c4565b61035d60a05481565b6002546103f990600160801b900463ffffffff1681565b600254610841906001600160401b031681565b6040516001600160401b03909116815260200161034b565b6107336115ba565b6002546103f990600160a01b900463ffffffff1681565b610470610886366004615151565b60676020526000908152604090205460ff1681565b6108ce6108a9366004615151565b609e60205260009081526040902080546001909101546001600160a01b039091169082565b60405161034b92919061545c565b60025461084190600160401b90046001600160401b031681565b6103d3610904366004615151565b6115d5565b61091c610917366004615475565b611682565b60405161034b91906154ea565b61035d61093736600461554f565b611769565b61047061094a366004615151565b6119f7565b6002546103f990600160c01b900463ffffffff1681565b6103d3610974366004615216565b611a15565b61035d610987366004615151565b60686020526000908152604090205481565b6103d36109a7366004615216565b611b54565b61035d6109ba3660046155b7565b611c83565b61035d60d65481565b6103d36109d6366004615216565b611c96565b61035d6109e93660046152b1565b600090815260a2602052604090205490565b6103d3610a093660046152b1565b611e24565b6103a0610a1c3660046152b1565b60696020526000908152604090208054600182015460028301546003909301549192909184565b6103d3610a51366004615151565b611e35565b610a5e6150eb565b506001600160a01b039081166000908152609d6020908152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290565b6000610ae2611e70565b805490915060ff600160401b82041615906001600160401b0316600081158015610b095750825b90506000826001600160401b03166001148015610b255750303b155b905081158015610b33575080155b15610b515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b7b57845460ff60401b1916600160401b1785555b610b8433611e94565b610b8c611ea5565b610b94611ead565b610b9c611ec5565b610be86040518060400160405280600f81526020016e53756267726170685365727669636560881b815250604051806040016040528060038152602001620312e360ec1b815250611ed5565b610bf488600019611ef1565b610bfd87611f67565b610c0686611fbb565b8315610c4c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610c5e612011565b610c6781611f67565b50565b905090565b82610c78612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401610ca7939291906155e5565b602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190615608565b81339091610d145760405163cc5d3c8b60e01b8152600401610d0b929190615625565b60405180910390fd5b5050836000610d2282612067565b9050610d2d81612162565b610d38816000612194565b610d40612274565b60008080610d5087890189615756565b9250925092506000835111610d7857604051630783843960e51b815260040160405180910390fd5b6000825111610d9a57604051631e63bd9560e21b815260040160405180910390fd5b6001600160a01b038916600090815260d5602052604090205415610dd157604051630d06866d60e21b815260040160405180910390fd5b6040805160608101825242815260208082018681528284018690526001600160a01b038d16600090815260d59092529290208151815591519091906001820190610e1b9082615852565b5060408201516002820190610e309082615852565b5050506001600160a01b03811615610e4c57610e4c898261229a565b886001600160a01b03167f159567bea25499a91f60e1fbb349ff2a1f8c1b2883198f25c1e12c99eddb44fa8989604051610e87929190615910565b60405180910390a2505050505050505050565b610ea2612011565b610eac82826122f1565b5050565b60a054600090610ecb90610ec5609d85612358565b906123d2565b92915050565b3360008181526067602052604090205460ff16610f02576040516372e3ef9760e01b8152600401610d0b9190615380565b50610f0b61240f565b610f13612434565b565b610c673382612480565b600080610f2a61252d565b915091509091565b60d56020526000908152604090208054600182018054919291610f54906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f80906157d1565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505090806002018054610fe2906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461100e906157d1565b801561105b5780601f106110305761010080835404028352916020019161105b565b820191906000526020600020905b81548152906001019060200180831161103e57829003601f168201915b5050505050905083565b6000806110706125a4565b5460ff1692915050565b6001600160a01b038082166000908152609d60209081526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e083015290610ecb906125c8565b6110fe612011565b610f1360006125e7565b600080610f2a612643565b610c67338261229a565b611125612011565b610c67816126be565b611136612011565b6111418383836126f3565b505050565b61114e612011565b61115b81620f4240101590565b819061117d57604051631c9c717b60e01b8152600401610d0b91815260200190565b5060d78190556040518181527f6deef78ffe3df79ae5cd8e40b842c36ac6077e13746b9b68a9f327537b01e4e9906020015b60405180910390a150565b826111c3612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016111f2939291906155e5565b602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112339190615608565b813390916112565760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d56020526040902054849081906112935760405163ee27189960e01b8152600401610d0b9190615380565b5061129c612274565b60006112aa84860186615151565b90506001600160a01b0386166112c1609d83612358565b51879183916001600160a01b0316146112ef5760405163c0bbff1360e01b8152600401610d0b929190615625565b50506112fa81612746565b856001600160a01b03167f73330c218a680717e9eee625c262df66eddfdf99ecb388d25f6b32d66b9a318a8686604051611335929190615910565b60405180910390a2505050505050565b600080610f2a6000546001549091565b8261135e612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b815260040161138d939291906155e5565b602060405180830381865afa1580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190615608565b813390916113f15760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50508360006113ff82612067565b905061140a81612162565b611415816000612194565b6001600160a01b038616600090815260d56020526040902054869081906114505760405163ee27189960e01b8152600401610d0b9190615380565b50611459612274565b6001600160a01b03871661146e609d88612358565b51889188916001600160a01b03161461149c5760405163c0bbff1360e01b8152600401610d0b929190615625565b5050610c4c8686600260189054906101000a900463ffffffff1661289c565b6114c3612011565b610c6781600019611ef1565b3360008181526067602052604090205460ff16611500576040516372e3ef9760e01b8152600401610d0b9190615380565b50611509612274565b610f13612c28565b6000606080600080600060606000611527612c6f565b805490915015801561153b57506001810154155b61157f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d0b565b611587612c93565b61158f612d34565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000806115c5612d51565b546001600160a01b031692915050565b60006115e2609d83612358565b905060006115fb60a054836123d290919063ffffffff16565b825160025491925060009161161d9190600160c01b900463ffffffff16612d75565b905081806116285750805b849061164757604051623477b560e51b8152600401610d0b9190615380565b5061165183612d94565b158490611672576040516317c7b35d60e31b8152600401610d0b9190615380565b5061167c84612746565b50505050565b604080516000815260208101909152606090826001600160401b038111156116ac576116ac61563f565b6040519080825280602002602001820160405280156116df57816020015b60608152602001906001900390816116ca5790505b50915060005b838110156117615761173c3086868481811061170357611703615968565b9050602002810190611715919061597e565b85604051602001611728939291906159c4565b604051602081830303815290604052612db3565b83828151811061174e5761174e615968565b60209081029190910101526001016116e5565b505092915050565b600084611774612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b81526004016117a3939291906155e5565b602060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190615608565b813390916118075760405163cc5d3c8b60e01b8152600401610d0b929190615625565b505085600061181582612067565b905061182081612162565b61182b816000612194565b6001600160a01b038816600090815260d56020526040902054889081906118665760405163ee27189960e01b8152600401610d0b9190615380565b5061186f612274565b600080896002811115611884576118846159eb565b036118e2576000611897888a018a615a16565b8051602001519091508b6001600160a01b03828116908216146118cf57604051631a071d0760e01b8152600401610d0b929190615625565b50506118da81612e29565b915050611995565b60028960028111156118f6576118f66159eb565b0361197a5760008061190a898b018b615b3b565b90925090506001600160a01b038c16611924609d84612358565b518d9184916001600160a01b0316146119525760405163c0bbff1360e01b8152600401610d0b929190615625565b50506119718282600260189054906101000a900463ffffffff1661332e565b92505050611995565b8860405163047031cf60e41b8152600401610d0b9190615b89565b8860028111156119a7576119a76159eb565b8a6001600160a01b03167f54fe682bfb66381a9382e13e4b95a3dd4f960eafbae063fdea3539d144ff3ff5836040516119e291815260200190565b60405180910390a39998505050505050505050565b6000610ecb82600260189054906101000a900463ffffffff16612d75565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168214611a625760405163cdc0567f60e01b8152600401610d0b929190615625565b506000905080611a7483850185615b97565b91509150611a80612043565b6001600160a01b031663e76fede6868484611a996138ce565b60405160e086901b6001600160e01b03191681526001600160a01b039485166004820152602481019390935260448301919091529091166064820152608401600060405180830381600087803b158015611af257600080fd5b505af1158015611b06573d6000803e3d6000fd5b50505050846001600160a01b03167f02f2e74a11116e05b39159372cceb6739257b08d72f7171d208ff27bb6466c5883604051611b4591815260200190565b60405180910390a25050505050565b82611b5d612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611b8c939291906155e5565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190615608565b81339091611bf05760405163cc5d3c8b60e01b8152600401610d0b929190615625565b50506001600160a01b038416600090815260d5602052604090205484908190611c2d5760405163ee27189960e01b8152600401610d0b9190615380565b50611c36612274565b611c3f856138f2565b611c4885613908565b6040516001600160a01b038616907ff53cf6521a1b5fc0c04bffa70374a4dc2e3474f2b2ac1643c3bcc54e2db4a93990600090a25050505050565b6000611c8f838361397b565b9392505050565b82611c9f612043565b6001600160a01b0316637c145cc78230336040518463ffffffff1660e01b8152600401611cce939291906155e5565b602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190615608565b81339091611d325760405163cc5d3c8b60e01b8152600401610d0b929190615625565b5050836000611d4082612067565b9050611d4b81612162565b611d56816000612194565b6001600160a01b038616600090815260d5602052604090205486908190611d915760405163ee27189960e01b8152600401610d0b9190615380565b50611d9a612274565b6000808080611dab898b018b615bb9565b9350935093509350611dd38b83868685600260189054906101000a900463ffffffff166139ea565b508a6001600160a01b03167fd3803eb82ef5b4cdff8646734ebbaf5b37441e96314b27ffd3d0940f12a038e78b8b604051611e0f929190615910565b60405180910390a25050505050505050505050565b611e2c612011565b610c6781611fbb565b611e3d612011565b6001600160a01b038116611e67576000604051631e4fbdf760e01b8152600401610d0b9190615380565b610c67816125e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b611e9c613b73565b610c6781613b98565b610f13613b73565b611eb5613b73565b611ebd613ba0565b610f13611ea5565b611ecd613b73565b611ebd613bd5565b611edd613b73565b611ee78282613bf2565b610eac8282613c04565b818180821115611f1d5760405163ccccdafb60e01b815260048101929092526024820152604401610d0b565b50506000829055600181905560408051838152602081018390527f90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f56884991015b60405180910390a15050565b6002805463ffffffff60c01b1916600160c01b63ffffffff8416908102919091179091556040519081527f472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f906020016111af565b80600003611fdc5760405163bc71a04360e01b815260040160405180910390fd5b60d68190556040518181527f2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23906020016111af565b3361201a6115ba565b6001600160a01b031614610f13573360405163118cdaa760e01b8152600401610d0b9190615380565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906120b8612043565b6001600160a01b03166325d9897e84306040518363ffffffff1660e01b81526004016120e5929190615625565b61012060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190615c36565b90508060a001516001600160401b031660001415839061215b57604051637b3c09bf60e01b8152600401610d0b9190615380565b5092915050565b610c67816000015160005460015460405180604001604052806006815260200165746f6b656e7360d01b815250613c0c565b60008061219f612643565b915091506000836121b45784608001516121ba565b8460e001515b9050612208816001600160401b0316846001600160401b0316846001600160401b03166040518060400160405280600d81526020016c1d1a185dda5b99d4195c9a5bd9609a1b815250613c0c565b60008061221361252d565b9150915060008661222857876060015161222e565b8760c001515b9050610c4c8163ffffffff168463ffffffff168463ffffffff166040518060400160405280600e81526020016d1b585e15995c9a599a595c90dd5d60921b815250613c0c565b61227c611065565b15610f135760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03828116600081815260a1602052604080822080546001600160a01b0319169486169485179055517f3349d2e561f8c23a3ff42257745c8fb53e4bf3cbd4046672a3c4a0c7ee8a7b319190a35050565b6122f9612274565b6001600160a01b038216600081815260676020908152604091829020805460ff191685151590811790915591519182527fa95bac2f3df0d40e8278281c1d39d53c60e4f2bf3550ca5665738d0916e89789910160405180910390a25050565b6123606150eb565b61236a8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260079091015460e08201529392505050565b6000806123e784606001518560a00151613ce8565b6123f19042615955565b90506123fc846125c8565b801561240757508281115b949350505050565b612417611065565b610f1357604051638dfc202b60e01b815260040160405180910390fd5b61243c61240f565b60006124466125a4565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516111af9190615380565b6001600160a01b0382166000818152606a602090815260408083208151928301849052828201949094528051808303820181526060909201905281906124d4908490613cfe90613d6990613e629089613e87565b91509150846001600160a01b03167f13f3fa9f0e54af1af76d8b5d11c3973d7c2aed6312b61efff2f7b49d73ad67eb83838060200190518101906125189190615cd8565b60408051928352602083019190915201611b45565b6000806125386138ce565b6001600160a01b031663846337136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125999190615cf1565b92620f424092509050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b60006125d78260600151151590565b8015610ecb575050608001511590565b60006125f1612d51565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008061264e6138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190615d0e565b926001600160401b0392509050565b60a08190556040518181527f21774046e2611ddb52c8c46e1ad97524eeb2e3fda7dcd9428867868b4c4d06ba906020016111af565b612700609e848484613f41565b80826001600160a01b0316846001600160a01b03167fd54c7abc930f6d506da2d08aa7aead4f2443e1db6d5f560384a2f652ff893e1960405160405180910390a4505050565b6000612753609d83612358565b90506127de82612761613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161279291815260200190565b6020604051808303816000875af11580156127b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d59190615cd8565b609d9190614008565b6127e9609d836140b0565b805160408201516127fc91609f9161415b565b806040015160a2600083602001518152602001908152602001600020546128239190615955565b60a2600083602001518152602001908152602001600020819055508060200151826001600160a01b031682600001516001600160a01b03167f663a6f978de61dc3e2441026c082be709377b083ab642a8ce71386f8b91c710b846040015160405161289091815260200190565b60405180910390a45050565b6128a46150eb565b60006128b1609d86612358565b90506128bc816125c8565b85906128dc57604051631eb5ff9560e01b8152600401610d0b9190615380565b508060400151841415858590916129085760405163f32518cd60e01b8152600401610d0b92919061545c565b505060408101518085111561293e57612939612922612043565b835161292e8489615955565b609f929190886141e0565b612957565b81516129579061294e8784615955565b609f919061415b565b6000612961613fe4565b6001600160a01b031663eeac3e0e84602001516040518263ffffffff1660e01b815260040161299291815260200190565b6020604051808303816000875af11580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190615cd8565b905060006129e284612d94565b156129ee5760006129fd565b60c08401516129fd9083615955565b6001600160a01b0389166000908152609d60205260409020600281018990556006018390559050612a2c613fe4565b604051636452fc0f60e11b815260048101859052602481018390526001600160a01b03919091169063c8a5f81e90604401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e9190615cd8565b6001600160a01b0389166000908152609d602052604081206007018054909190612ac9908490615d2b565b909155505082871115612b1157612ae08388615955565b60a26000866020015181526020019081526020016000206000828254612b069190615d2b565b90915550612b479050565b612b1b8784615955565b60a26000866020015181526020019081526020016000206000828254612b419190615955565b90915550505b8360200151886001600160a01b031685600001516001600160a01b03167f6db4a6f9be2d5e72eb2a2af2374ac487971bf342a261ba0bc1cf471bf2a2c31f8a87604051612b9e929190918252602082015260400190565b60405180910390a4505050506001600160a01b039384166000908152609d6020908152604091829020825161010081018452815490971687526001810154918701919091526002810154918601919091526003810154606086015260048101546080860152600581015460a0860152600681015460c08601526007015460e0850152509192915050565b612c30612274565b6000612c3a6125a4565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124733390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000612c9f612c6f565b9050806002018054612cb0906157d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc906157d1565b8015612d295780601f10612cfe57610100808354040283529160200191612d29565b820191906000526020600020905b815481529060010190602001808311612d0c57829003601f168201915b505050505091505090565b60606000612d40612c6f565b9050806003018054612cb0906157d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000612d8c612d82612043565b609f9085856142e5565b159392505050565b6000612da38260600151151590565b8015610ecb575050604001511590565b6060600080846001600160a01b031684604051612dd09190615d3e565b600060405180830381855af49150503d8060008114612e0b576040519150601f19603f3d011682016040523d82523d6000602084013e612e10565b606091505b5091509150612e2085838361437f565b95945050505050565b80516020808201516080909201518051600093928492612e4e92810182019101615d5a565b90506000612e5d609d83612358565b805190915083906001600160a01b0381811690831614612e9257604051634508fbf760e11b8152600401610d0b929190615625565b50506020810151612ea4846000612480565b6000612eae6143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612ed99190615380565b602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190615cd8565b90506000612f266143f6565b6001600160a01b0316634c4ea0ed846040518263ffffffff1660e01b8152600401612f5391815260200190565b602060405180830381865afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190615608565b612f9f576000612fa3565b60d7545b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f07d28360008b85604051602001612feb929190615d77565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401613017929190615e16565b6020604051808303816000875af1158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190615cd8565b90506000613068828461441a565b905060006130746143d2565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161309f9190615380565b602060405180830381865afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190615cd8565b9050806130ed8387615d2b565b1485828490919261312257604051631b0d791f60e11b8152600481019390935260248301919091526044820152606401610d0b565b5050831590506132db57600060d6548461313c9190615e36565b905060006131486138ce565b6001600160a01b0316635aea0ec46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a99190615d0e565b6131bc906001600160401b031642615d2b565b90506131c98b8383614481565b83156132d8576131d7613fe4565b6001600160a01b0316631d1c2fec896040518263ffffffff1660e01b815260040161320491815260200190565b6020604051808303816000875af1158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190615cd8565b5061326c6132536143f6565b8561325c6143d2565b6001600160a01b031691906145f3565b6132746143f6565b60405163102ae65160e31b8152600481018a9052602481018690526001600160a01b039190911690638157328890604401600060405180830381600087803b1580156132bf57600080fd5b505af11580156132d3573d6000803e3d6000fd5b505050505b50505b60408051848152602081018490526001600160a01b038b16917f60a56d4d503735b4848feb6f491f14d7415262346b820d3b5a3d2733201bda36910160405180910390a250909998505050505050505050565b60008061333c609d86612358565b9050613347816125c8565b859061336757604051631eb5ff9560e01b8152600401610d0b9190615380565b50600061337f60a054836123d290919063ffffffff16565b158015613392575061339082612d94565b155b801561339d57508415155b6133a857600061341e565b6133b0613fe4565b6001600160a01b031663db750926876040518263ffffffff1660e01b81526004016133db9190615380565b6020604051808303816000875af11580156133fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341e9190615cd8565b905061345d8661342c613fe4565b6001600160a01b031663eeac3e0e85602001516040518263ffffffff1660e01b815260040161279291815260200190565b613468609d876146a2565b613473609d8761474d565b60008082156137c2576000613486612043565b8551604051637573ef4f60e01b81526001600160a01b039290921691637573ef4f916134b9913090600290600401615e4d565b602060405180830381865afa1580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615cd8565b90506000613506612043565b8651604051631584a17960e21b81526001600160a01b03929092169163561285e491613536913090600401615625565b60a060405180830381865afa158015613553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135779190615e72565b9050600081602001511161358c576000613596565b613596858361441a565b9250821561368b576135a66143d2565b6001600160a01b031663095ea7b36135bc612043565b856040518363ffffffff1660e01b81526004016135da92919061545c565b6020604051808303816000875af11580156135f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361d9190615608565b50613626612043565b865160405163ca94b0e960e01b81526001600160a01b03929092169163ca94b0e9916136589130908890600401615ec7565b600060405180830381600087803b15801561367257600080fd5b505af1158015613686573d6000803e3d6000fd5b505050505b6136958386615955565b935083156137bf5785516001600160a01b03908116600090815260a1602052604090205416806137b0576136c76143d2565b6001600160a01b031663095ea7b36136dd612043565b876040518363ffffffff1660e01b81526004016136fb92919061545c565b6020604051808303816000875af115801561371a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373e9190615608565b50613747612043565b8751604051633a30904960e11b81526001600160a01b0392909216916374612092916137799130908a90600401615ec7565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050506137bd565b6137bd818661325c6143d2565b505b50505b602084015184516001600160a01b038a811691167f7df4dbb3b3c999ca3e143d3fe67abfa22078fd572d49d411278648c773912e318686868d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387d9190615cd8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a483516138b49087612d75565b156138c2576138c288612746565b50909695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006138fd82612067565b9050610eac81612162565b6139138160016147f9565b61391b612043565b6001600160a01b0316633a78b732826040518263ffffffff1660e01b81526004016139469190615380565b600060405180830381600087803b15801561396057600080fd5b505af1158015613974573d6000803e3d6000fd5b5050505050565b6000611c8f7f4bdee85c4b4a268f4895d1096d553c3e57bb2433c380e7b7ec8cb56cc4f7467384846040516020016139cf939291909283526001600160a01b03918216602084015216604082015260600190565b60405160208183030381529060405280519060200120614810565b6139f26150eb565b6001600160a01b038616613a1957604051634ffdf5ef60e11b815260040160405180910390fd5b613a2487878561483d565b613a2f609e8761488c565b6000613abc88888888613a40613fe4565b6001600160a01b031663eeac3e0e8c6040518263ffffffff1660e01b8152600401613a6d91815260200190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190615cd8565b609d94939291906148e1565b9050613ad4613ac9612043565b609f908a88876141e0565b806040015160a260008360200151815260200190815260200160002054613afb9190615d2b565b60a26000836020015181526020019081526020016000208190555085876001600160a01b0316896001600160a01b03167f3bd4419f8defec88dd042e31b8e8743f00803aed288fe7c31c9cf0689d295cf28460400151604051613b6091815260200190565b60405180910390a4979650505050505050565b613b7b614a2e565b610f1357604051631afcd79f60e31b815260040160405180910390fd5b611e3d613b73565b613ba8613b73565b613bb56000600019611ef1565b613bc36000620f4240614a48565b610f1360006001600160401b03614b1a565b613bdd613b73565b6000613be76125a4565b805460ff1916905550565b613bfa613b73565b610eac8282614ba7565b610eac613b73565b613c17848484614be8565b8185858590919293610c4c57604051630871e13d60e01b8152600401610d0b9493929190615eeb565b6001600160a01b03808216600090815260208481526040808320815161010081018352815490951685526001810154928501929092526002820154908401526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401529091613cc09060600151151590565b8390613ce0576040516342daadaf60e01b8152600401610d0b9190615380565b509392505050565b6000818311613cf75781611c8f565b5090919050565b60008181526069602090815260408083208151608081018352815481526001820154938101849052600282015492810192909252600301546060820152908390613d5e5760405163107349a960e21b8152600401610d0b91815260200190565b506060015192915050565b600060606000613d7885614bff565b90504281604001511115613da057505060408051602081019091526000815260019150613e5b565b60008085806020019051810190613db79190615f1a565b84519193509150613dcc90606890839061415b565b82516040808501518151928352602083015288916001600160a01b038416917f4c06b68820628a39c787d2db1faa0eeacd7b9474847b198b1e871fe6e5b93f44910160405180910390a38251613e229083615d2b565b6040805160208101929092526001600160a01b038316908201526060016040516020818303038152906040529550600086945094505050505b9250929050565b6000908152606960205260408120818155600181018290556002810182905560030155565b600060608760030154831115613eb057604051634a411b9d60e11b815260040160405180910390fd5b60008315613ebe5783613ec4565b88600301545b89549094505b8015801590613ed95750600085115b15613f3257600080613eef83898c63ffffffff16565b915091508115613f00575050613f32565b965086613f0e8c8c8b614c8d565b925086613f1a81615f40565b9750508380613f2890615f57565b9450505050613eca565b50989397509295505050505050565b6001600160a01b038281166000908152602086815260409182902082518084019093528054909316808352600190930154910152829015613f9657604051632d3e5fb960e01b8152600401610d0b9190615380565b506040805180820182526001600160a01b0394851681526020808201938452938516600090815295909352909320905181546001600160a01b03191692169190911781559051600190910155565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006140148484613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614080906125c8565b600482015484916140a6576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050600601555050565b60006140bc8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152909150614128906125c8565b6004820154839161414e576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426004909101555050565b8060000361416857505050565b6001600160a01b03821660009081526020849052604090205481808210156141ac57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038216600090815260208490526040812080548392906141d6908490615955565b9091555050505050565b8115613974576001600160a01b03831660009081526020869052604081205461420a908490615d2b565b90506000856001600160a01b031663872d04898630866040518463ffffffff1660e01b815260040161423e93929190615f70565b602060405180830381865afa15801561425b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427f9190615cd8565b90508082818111156142ad57604051635f8ec70960e01b815260048101929092526024820152604401610d0b565b50506001600160a01b038516600090815260208890526040812080548692906142d7908490615d2b565b909155505050505050505050565b600080846001600160a01b031663872d04898530866040518463ffffffff1660e01b815260040161431893929190615f70565b602060405180830381865afa158015614335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143599190615cd8565b6001600160a01b0385166000908152602088905260409020541115915050949350505050565b6060826143945761438f82614d14565b611c8f565b81511580156143ab57506001600160a01b0384163b155b156143cb5783604051639996b31560e01b8152600401610d0b9190615380565b5080611c8f565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061442983620f4240101590565b8061443c575061443c82620f4240101590565b838390916144665760405163768bf0eb60e11b815260048101929092526024820152604401610d0b565b50620f424090506144778385615e36565b611c8f9190615f99565b816000036144a257604051638f4c63d960e01b815260040160405180910390fd5b6144ce6144ad612043565b600254606891908690869063ffffffff600160c01b9091048116906141e016565b6001600160a01b0383166000908152606a6020908152604080832060028082015483516001600160601b031930606090811b8216838901528b901b166034820152604880820192909252845180820390920182526068810180865282519287019290922060e882018652898352426088830190815260a883018a815260c8909301898152828a52606990985295909720915182559351600182015592519083015591516003918201558101549091901561459c57600182015460009081526069602052604090206003018190555b6145a68282614d3d565b604080518581526020810185905282916001600160a01b038816917f5d9e2c5278e41138269f5f980cfbea016d8c59816754502abc4d2f87aaea987f910160405180910390a35050505050565b80156111415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614627908590859060040161545c565b6020604051808303816000875af1158015614646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466a9190615608565b6111415760405162461bcd60e51b815260206004820152600960248201526810ba3930b739b332b960b91b6044820152606401610d0b565b60006146ae8383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015290915061471a906125c8565b60048201548391614740576040516361b66e0d60e01b8152600401610d0b92919061545c565b5050426005909101555050565b60006147598383613c40565b604080516101008101825282546001600160a01b03168152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201529091506147c5906125c8565b600482015483916147eb576040516361b66e0d60e01b8152600401610d0b92919061545c565b505060006007909101555050565b600061480483612067565b90506111418183612194565b6000610ecb61481d614dd0565b8360405161190160f01b8152600281019290925260228201526042902090565b600061485261484c858561397b565b83614dda565b905080836001600160a01b038083169082161461488457604051638c5b935d60e01b8152600401610d0b929190615625565b505050505050565b6001600160a01b03818116600090815260208481526040918290208251808401909352805490931680835260019093015491015281901561114157604051638173627160e01b8152600401610d0b9190615380565b6148e96150eb565b6001600160a01b0380861660009081526020898152604091829020825161010081018452815490941684526001810154918401919091526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015261496a9060600151151590565b15859061498b57604051630bc4def560e01b8152600401610d0b9190615380565b505060408051610100810182526001600160a01b0396871681526020808201958652818301948552426060830190815260006080840181815260a0850182815260c0860197885260e086018381529a8c1683529b90935293909320825181546001600160a01b0319169916989098178855945160018801559251600287015551600386015591516004850155935160058401555160068301555160079091015590565b6000614a38611e70565b54600160401b900460ff16919050565b818163ffffffff8082169083161115614a765760405163ccccdafb60e01b8152600401610d0b9291906152ca565b508290508163ffffffff8116620f42401015614aa75760405163ccccdafb60e01b8152600401610d0b9291906152ca565b50506002805463ffffffff838116600160a01b0263ffffffff60a01b19918616600160801b029190911667ffffffffffffffff60801b19909216919091171790556040517f2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a3690611f5b90849084906152ca565b81816001600160401b038082169083161115614b4b5760405163ccccdafb60e01b8152600401610d0b929190615366565b5050600280546001600160401b03838116600160401b026001600160801b0319909216908516171790556040517f2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d190611f5b9084908490615366565b614baf613b73565b6000614bb9612c6f565b905060028101614bc98482615852565b5060038101614bd88382615852565b5060008082556001909101555050565b600082841015801561240757505090911115919050565b614c2d6040518060800160405280600081526020016000815260200160008152602001600080191681525090565b6000828152606960209081526040918290208251608081018452815481526001820154928101839052600282015493810193909352600301546060830152839061215b5760405163107349a960e21b8152600401610d0b91815260200190565b600080846003015411614cb35760405163ddaf8f2160e01b815260040160405180910390fd5b6000614cc685600001548563ffffffff16565b9050614cd985600001548463ffffffff16565b6001856003016000828254614cee9190615955565b90915550508085556003850154600003614d0a57600060018601555b5050915492915050565b805115614d245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b612710826003015410614d63576040516303a8c56b60e61b815260040160405180910390fd5b80614d8157604051638f4a893d60e01b815260040160405180910390fd5b6001808301829055600283018054600090614d9d908490615d2b565b90915550506003820154600003614db2578082555b6001826003016000828254614dc79190615d2b565b90915550505050565b6000610c6a614e04565b600080600080614dea8686614e78565b925092509250614dfa8282614ec5565b5090949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2f614f7e565b614e37614fe5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060008351604103614eb25760208401516040850151606086015160001a614ea488828585615026565b955095509550505050614ebe565b50508151600091506002905b9250925092565b6000826003811115614ed957614ed96159eb565b03614ee2575050565b6001826003811115614ef657614ef66159eb565b03614f145760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614f2857614f286159eb565b03614f495760405163fce698f760e01b815260048101829052602401610d0b565b6003826003811115614f5d57614f5d6159eb565b03610eac576040516335e2f38360e21b815260048101829052602401610d0b565b600080614f89612c6f565b90506000614f95612c93565b805190915015614fad57805160209091012092915050565b81548015614fbc579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080614ff0612c6f565b90506000614ffc612d34565b80519091501561501457805160209091012092915050565b60018201548015614fbc579392505050565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384111561505757506000915060039050826150e1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156150ab573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166150d7575060009250600191508290506150e1565b9250600091508190505b9450945094915050565b60405180610100016040528060006001600160a01b03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610c6757600080fd5b60006020828403121561516357600080fd5b8135611c8f8161513c565b63ffffffff81168114610c6757600080fd5b60008060006060848603121561519557600080fd5b8335925060208401356151a78161516e565b929592945050506040919091013590565b6000602082840312156151ca57600080fd5b8135611c8f8161516e565b60008083601f8401126151e757600080fd5b5081356001600160401b038111156151fe57600080fd5b602083019150836020828501011115613e5b57600080fd5b60008060006040848603121561522b57600080fd5b83356152368161513c565b925060208401356001600160401b0381111561525157600080fd5b61525d868287016151d5565b9497909650939450505050565b8015158114610c6757600080fd5b6000806040838503121561528b57600080fd5b82356152968161513c565b915060208301356152a68161526a565b809150509250929050565b6000602082840312156152c357600080fd5b5035919050565b63ffffffff92831681529116602082015260400190565b60005b838110156152fc5781810151838201526020016152e4565b50506000910152565b6000815180845261531d8160208601602086016152e1565b601f01601f19169290920160200192915050565b83815260606020820152600061534a6060830185615305565b828103604084015261535c8185615305565b9695505050505050565b6001600160401b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b6000806000606084860312156153a957600080fd5b83356153b48161513c565b925060208401356151a78161513c565b60ff60f81b8816815260e0602082015260006153e360e0830189615305565b82810360408401526153f58189615305565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561544b57835183526020938401939092019160010161542d565b50909b9a5050505050505050505050565b6001600160a01b03929092168252602082015260400190565b6000806020838503121561548857600080fd5b82356001600160401b0381111561549e57600080fd5b8301601f810185136154af57600080fd5b80356001600160401b038111156154c557600080fd5b8560208260051b84010111156154da57600080fd5b6020919091019590945092505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561554357603f1987860301845261552e858351615305565b94506020938401939190910190600101615512565b50929695505050505050565b6000806000806060858703121561556557600080fd5b84356155708161513c565b935060208501356003811061558457600080fd5b925060408501356001600160401b0381111561559f57600080fd5b6155ab878288016151d5565b95989497509550505050565b600080604083850312156155ca57600080fd5b82356155d58161513c565b915060208301356152a68161513c565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60006020828403121561561a57600080fd5b8151611c8f8161526a565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156156775761567761563f565b60405290565b60405160a081016001600160401b03811182821017156156775761567761563f565b60405161012081016001600160401b03811182821017156156775761567761563f565b600082601f8301126156d357600080fd5b8135602083016000806001600160401b038411156156f3576156f361563f565b50604051601f19601f85018116603f011681018181106001600160401b03821117156157215761572161563f565b60405283815290508082840187101561573957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561576b57600080fd5b83356001600160401b0381111561578157600080fd5b61578d868287016156c2565b93505060208401356001600160401b038111156157a957600080fd5b6157b5868287016156c2565b92505060408401356157c68161513c565b809150509250925092565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561114157806000526020600020601f840160051c810160208510156158325750805b601f840160051c820191505b81811015613974576000815560010161583e565b81516001600160401b0381111561586b5761586b61563f565b61587f8161587984546157d1565b8461580b565b6020601f8211600181146158b3576000831561589b5750848201515b600019600385901b1c1916600184901b178455613974565b600084815260208120601f198516915b828110156158e357878501518255602094850194600190920191016158c3565b50848210156159015786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ecb57610ecb61593f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261599557600080fd5b8301803591506001600160401b038211156159af57600080fd5b602001915036819003821315613e5b57600080fd5b8284823760008382016000815283516159e18183602088016152e1565b0195945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0381168114610c6757600080fd5b600060208284031215615a2857600080fd5b81356001600160401b03811115615a3e57600080fd5b820160408185031215615a5057600080fd5b615a58615655565b81356001600160401b03811115615a6e57600080fd5b820160a08187031215615a8057600080fd5b615a8861567d565b8135615a938161513c565b81526020820135615aa38161513c565b60208201526040820135615ab681615a01565b604082015260608201356001600160801b0381168114615ad557600080fd5b606082015260808201356001600160401b03811115615af357600080fd5b615aff888285016156c2565b60808301525082525060208201356001600160401b03811115615b2157600080fd5b615b2d868285016156c2565b602083015250949350505050565b60008060408385031215615b4e57600080fd5b8235615b598161513c565b946020939093013593505050565b60038110615b8557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610ecb8284615b67565b60008060408385031215615baa57600080fd5b50508035926020909101359150565b60008060008060808587031215615bcf57600080fd5b84359350602085013592506040850135615be88161513c565b915060608501356001600160401b03811115615c0357600080fd5b615c0f878288016156c2565b91505092959194509250565b8051615c268161516e565b919050565b8051615c2681615a01565b6000610120828403128015615c4a57600080fd5b506000615c5561569f565b835181526020808501519082015260408085015190820152615c7960608501615c1b565b6060820152615c8a60808501615c2b565b6080820152615c9b60a08501615c2b565b60a0820152615cac60c08501615c1b565b60c0820152615cbd60e08501615c2b565b60e08201526101009384015193810193909352509092915050565b600060208284031215615cea57600080fd5b5051919050565b600060208284031215615d0357600080fd5b8151611c8f8161516e565b600060208284031215615d2057600080fd5b8151611c8f81615a01565b80820180821115610ecb57610ecb61593f565b60008251615d508184602087016152e1565b9190910192915050565b600060208284031215615d6c57600080fd5b8151611c8f8161513c565b604081526000835160408084015260018060a01b03815116608084015260018060a01b0360208201511660a08401526001600160401b0360408201511660c084015260018060801b0360608201511660e08401526080810151905060a0610100840152615de8610120840182615305565b90506020850151603f19848303016060850152615e058282615305565b925050508260208301529392505050565b615e208184615b67565b6040602082015260006124076040830184615305565b8082028115828204841417610ecb57610ecb61593f565b6001600160a01b03848116825283166020820152606081016124076040830184615b67565b600060a0828403128015615e8557600080fd5b506000615e9061567d565b8351815260208085015190820152604080850151908201526060808501519082015260809384015193810193909352509092915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b608081526000615efe6080830187615305565b6020830195909552506040810192909252606090910152919050565b60008060408385031215615f2d57600080fd5b825160208401519092506152a68161513c565b600081615f4f57615f4f61593f565b506000190190565b600060018201615f6957615f6961593f565b5060010190565b6001600160a01b03938416815291909216602082015263ffffffff909116604082015260600190565b600082615fb657634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212209c05e49a7d3d7f3015873a2c41e2f68419180f16cef8fd91645f14bc8e8b733264736f6c634300081b003300000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c0000000000000000000000008f2f7801f4bbdcaeabfd18ee671b1874b1dc59d500000000000000000000000084149af521e4c32ddccb7e9f1f63a187a964396c000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","id":1,"type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"SubgraphService#SubgraphService","networkInteractionId":1,"nonce":732,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0xb27877abe206e77e750e818c99fc51080fdb8452a378ce53c7ebf04add36f63a"},"type":"TRANSACTION_SEND"} -{"futureId":"SubgraphService#SubgraphService","hash":"0xb27877abe206e77e750e818c99fc51080fdb8452a378ce53c7ebf04add36f63a","networkInteractionId":1,"receipt":{"blockHash":"0x2752fbab44e4099519b2990f42ca7e6dddb2637baa2ade461605250adb3923e8","blockNumber":97666132,"contractAddress":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","logs":[{"address":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","data":"0x000000000000000000000000dfee494c436613bafbfb80de4b19597fc69ec4fd0000000000000000000000007782536dac304b46e4eb60751e4021ab3b09abab000000000000000000000000cf27161ee08ca6087f9ff445a44474b89c10e5540000000000000000000000001c0f92202cfc66b160972d54c513a7354f507bf80000000000000000000000002679f1a908f1b241d6bd10b1898762c70e0a24c3000000000000000000000000da053da930d61a2a69e00ff7aafa11c13cb19d45000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":0,"topics":["0xef5021414834d86e36470f5c1cecf6544fb2bb723f2ca51a4c86fcd8c5919a43","0x000000000000000000000000cf242b6e8d1a5883627049485bf2c1d3dcf56ba8","0x000000000000000000000000dabc7419aba5a47d368d008f42bb66c7d5801740","0x00000000000000000000000059c3ca02528054c6337f63eb367a374ac45c292c"]},{"address":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","data":"0x0000000000000000000000002268247782f4b7adb2da810efd6e43b27a37af540000000000000000000000008f2f7801f4bbdcaeabfd18ee671b1874b1dc59d500000000000000000000000084149af521e4c32ddccb7e9f1f63a187a964396c000000000000000000000000345fc25633aebe518ad42047fcb210ec01b8de7c","logIndex":1,"topics":["0x4175b2c37456dbac494e08de8666d31bb8f3f2aee36ea5d9e06894ff3e4ddda7"]},{"address":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","data":"0x000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":2,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"SubgraphService#SubgraphService","result":{"address":"0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","type":"SUCCESS"},"type":"DEPLOYMENT_EXECUTION_STATE_COMPLETE"} -{"artifactId":"SubgraphService#SubgraphService_Instance","contractAddress":"0xBc53a58f03917A88174C2795B674734eCEeec05F","contractName":"SubgraphService","dependencies":[],"futureId":"SubgraphService#SubgraphService_Instance","futureType":"NAMED_ARTIFACT_CONTRACT_AT","strategy":"basic","strategyConfig":{},"type":"CONTRACT_AT_EXECUTION_STATE_INITIALIZE"} -{"args":["100000000000000000000000",16,2],"artifactId":"SubgraphService#SubgraphService","dependencies":["SubgraphService#SubgraphService"],"functionName":"initialize","futureId":"SubgraphService#encodeFunctionCall(SubgraphService#SubgraphService.initialize)","result":"0x1cafa21800000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002","strategy":"basic","strategyConfig":{},"type":"ENCODE_FUNCTION_CALL_EXECUTION_STATE_INITIALIZE"} -{"args":["0xBc53a58f03917A88174C2795B674734eCEeec05F","0x2268247782f4b7AdB2DA810EFD6e43B27a37af54","0x1cafa21800000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002"],"artifactId":"SubgraphService#ProxyAdmin","contractAddress":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","dependencies":["SubgraphService#ProxyAdmin","SubgraphService#SubgraphService","SubgraphService#encodeFunctionCall(SubgraphService#SubgraphService.initialize)"],"from":"0xade6b8eb69a49b56929c1d4f4b428d791861db6f","functionName":"upgradeAndCall","futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","strategy":"basic","strategyConfig":{},"type":"CALL_EXECUTION_STATE_INITIALIZE","value":{"_kind":"bigint","value":"0"}} -{"futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","networkInteraction":{"data":"0x9623609d000000000000000000000000bc53a58f03917a88174c2795b674734eceeec05f0000000000000000000000002268247782f4b7adb2da810efd6e43b27a37af54000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000641cafa21800000000000000000000000000000000000000000000152d02c7e14af68000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000","id":1,"to":"0x4f1c68dd0c1CB5bd75C431f94c8734A5067a0b2F","type":"ONCHAIN_INTERACTION","value":{"_kind":"bigint","value":"0"}},"type":"NETWORK_INTERACTION_REQUEST"} -{"futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","networkInteractionId":1,"nonce":733,"transaction":{"fees":{"maxFeePerGas":{"_kind":"bigint","value":"200000000"},"maxPriorityFeePerGas":{"_kind":"bigint","value":"0"}},"hash":"0x0993cd6bb738f22c34f1a94f1866552b635a791f3c3e9172dc24398d24a6c2e8"},"type":"TRANSACTION_SEND"} -{"futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","hash":"0x0993cd6bb738f22c34f1a94f1866552b635a791f3c3e9172dc24398d24a6c2e8","networkInteractionId":1,"receipt":{"blockHash":"0x2d540ae6e3726ba85e2f00c09c9dc57f5f485a4a57bb5712e1f0a9c1eea3ead0","blockNumber":97666148,"logs":[{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x","logIndex":0,"topics":["0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","0x0000000000000000000000002268247782f4b7adb2da810efd6e43b27a37af54"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x","logIndex":1,"topics":["0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000004f1c68dd0c1cb5bd75c431f94c8734a5067a0b2f"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","logIndex":2,"topics":["0x90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f568849"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4240","logIndex":3,"topics":["0x2fe5a7039987697813605cc0b9d6db7aab575408e3fc59e8a457bef8d7bc0a36"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff","logIndex":4,"topics":["0x2867e04c500e438761486b78021d4f9eb97c77ff45d10c1183f5583ba4cbf7d1"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x00000000000000000000000000000000000000000000152d02c7e14af6800000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","logIndex":5,"topics":["0x90699b8b4bf48918fea1129c85f9bc7b51285df7ecc982910813c7805f568849"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000010","logIndex":6,"topics":["0x472aba493f9fd1d136ec54986f619f3aa5caff964f0e731a9909fb9a1270211f"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000002","logIndex":7,"topics":["0x2aaaf20b08565eebc0c962cd7c568e54c3c0c2b85a1f942b82cd1bd730fdcd23"]},{"address":"0xBc53a58f03917A88174C2795B674734eCEeec05F","data":"0x0000000000000000000000000000000000000000000000000000000000000001","logIndex":8,"topics":["0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"]}],"status":"SUCCESS"},"type":"TRANSACTION_CONFIRM"} -{"futureId":"SubgraphService#ProxyAdmin.upgradeAndCall","result":{"type":"SUCCESS"},"type":"CALL_EXECUTION_STATE_COMPLETE"} \ No newline at end of file From a475c4ac8a351cca1cfea9f5aed1898f4ed9a379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 22 Nov 2024 16:15:37 -0300 Subject: [PATCH 289/343] chore: move files and fix test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../src/sdk/address-book.ts | 2 +- .../src/sdk/deployments/horizon/contracts.ts | 2 +- .../src/sdk/{deployments => }/lib/artifact.ts | 2 +- .../src/sdk/{deployments => }/lib/contract.ts | 0 .../test/fixtures/files/addresses-arbsep.json | 226 ++++++++++++++++++ .../fixtures/path-config/hardhat.config.ts | 7 + .../hardhat-graph-protocol/test/gre.test.ts | 2 +- 7 files changed, 237 insertions(+), 4 deletions(-) rename packages/hardhat-graph-protocol/src/sdk/{deployments => }/lib/artifact.ts (96%) rename packages/hardhat-graph-protocol/src/sdk/{deployments => }/lib/contract.ts (100%) create mode 100644 packages/hardhat-graph-protocol/test/fixtures/files/addresses-arbsep.json diff --git a/packages/hardhat-graph-protocol/src/sdk/address-book.ts b/packages/hardhat-graph-protocol/src/sdk/address-book.ts index aa18cccb3..b9b16cedf 100644 --- a/packages/hardhat-graph-protocol/src/sdk/address-book.ts +++ b/packages/hardhat-graph-protocol/src/sdk/address-book.ts @@ -3,7 +3,7 @@ import fs from 'fs' import { AssertionError } from 'assert' import { assertObject } from './utils/assertion' -import { ContractList, loadContract } from './deployments/lib/contract' +import { ContractList, loadContract } from './lib/contract' import { logDebug, logError, logWarn } from '../logger' import { Provider, Signer } from 'ethers' diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/contracts.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/contracts.ts index d2bdb00ef..7cb828e73 100644 --- a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/contracts.ts +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/contracts.ts @@ -14,7 +14,7 @@ import type { PaymentsEscrow, TAPCollector, } from '@graphprotocol/horizon' -import type { ContractList } from '../lib/contract' +import type { ContractList } from '../../lib/contract' export const GraphHorizonContractNameList = [ // @graphprotocol/contracts diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/lib/artifact.ts b/packages/hardhat-graph-protocol/src/sdk/lib/artifact.ts similarity index 96% rename from packages/hardhat-graph-protocol/src/sdk/deployments/lib/artifact.ts rename to packages/hardhat-graph-protocol/src/sdk/lib/artifact.ts index 3c50a1fe6..eff3fc601 100644 --- a/packages/hardhat-graph-protocol/src/sdk/deployments/lib/artifact.ts +++ b/packages/hardhat-graph-protocol/src/sdk/lib/artifact.ts @@ -1,5 +1,5 @@ import { Artifacts } from 'hardhat/internal/artifacts' -import { logError } from '../../../logger' +import { logError } from '../../logger' import type { Artifact } from 'hardhat/types' diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts b/packages/hardhat-graph-protocol/src/sdk/lib/contract.ts similarity index 100% rename from packages/hardhat-graph-protocol/src/sdk/deployments/lib/contract.ts rename to packages/hardhat-graph-protocol/src/sdk/lib/contract.ts diff --git a/packages/hardhat-graph-protocol/test/fixtures/files/addresses-arbsep.json b/packages/hardhat-graph-protocol/test/fixtures/files/addresses-arbsep.json new file mode 100644 index 000000000..530fd98ae --- /dev/null +++ b/packages/hardhat-graph-protocol/test/fixtures/files/addresses-arbsep.json @@ -0,0 +1,226 @@ +{ + "421614": { + "HorizonStaking": { + "address": "0xFf2Ee30de92F276018642A59Fb7Be95b3F9088Af" + }, + "GraphPayments": { + "address": "0xf5B3661BbB8CD48571C7f41ba2D896a3589C9753" + }, + "PaymentsEscrow": { + "address": "0x09B985a2042848A08bA59060EaF0f07c6F5D4d54" + }, + "TAPCollector": { + "address": "0xacC71844EF6beEF70106ABe6E51013189A1f3738" + }, + "GraphProxyAdmin": { + "address": "0x7474a6cc5fAeDEc620Db0fa8E4da6eD58477042C", + "creationCodeHash": "0x68b304ac6bce7380d5e0f6b14a122f628bffebcc75f8205cb60f0baf578b79c3", + "runtimeCodeHash": "0x8d9ba87a745cf82ab407ebabe6c1490197084d320efb6c246d94bcc80e804417", + "txHash": "0x71b6defab0d3d7b711b7f6769f20a8c85bc9686eb5939b2a86dfaf587fceab17" + }, + "Controller": { + "address": "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "creationCodeHash": "0x5bde9a87bc4e8dd24d41900f0a19321c1dc6d3373d51bba093b130bb5b80a677", + "runtimeCodeHash": "0x7f0479db1d60ecf6295d92ea2359ebdd223640795613558b0594680f5d4922c9", + "txHash": "0xf7b4faa14f9d29bb62dec73fd163d1253184233012bcadf7ae78af7995017f29" + }, + "EpochManager": { + "address": "0x88b3C7f37253bAA1A9b95feAd69bD5320585826D", + "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", "554"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x587ea6f421a08ab3a390103f63daba0529901f2e662ca7f6fe575674a439fa79", + "proxy": true, + "implementation": { + "address": "0x646627fa39ec6f6E757Cb4189bC54c92FFBb71da", + "creationCodeHash": "0x9947bd0a1f46027123b8fb4aec8b11af540aea587eb79642475d57b4e347078f", + "runtimeCodeHash": "0xe45a27197726de0e3149014823794708edd432ee56ec8358554c0d2365674ca0", + "txHash": "0x82653a0bd83e0541379b920415af94e4be1d732dfab720e5dead839062781c07" + } + }, + "L2GraphToken": { + "address": "0xf8c05dCF59E8B28BFD5eed176C562bEbcfc7Ac04", + "initArgs": ["0xadE6B8EB69a49B56929C1d4F4b428d791861dB6f"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xbb27939a4e4b5d92da8a10add4b7d0126e907da30b07b5f3d439f1c32a6c8e2c", + "proxy": true, + "implementation": { + "address": "0x4cf968bA38b43dd10be114daa7959C1b369479e5", + "creationCodeHash": "0x6c4146427aafa7375a569154be95c8c931bf83aab0315706dd78bdf79c889e4c", + "runtimeCodeHash": "0x004371d1d80011906953dcba17c648503fc94b94e1e0365c8d8c706ff91f93e9", + "txHash": "0x3fab5697addf0c0e16b8e2249f2b833c6f256e699b293d184089c96de8deaa44" + } + }, + "GraphCurationToken": { + "address": "0x00FBd5D46FFAc54862c1Dd27BE08924BB17f5CDa", + "creationCodeHash": "0x1ee42ee271cefe20c33c0de904501e618ac4b56debca67c634d0564cecea9ff2", + "runtimeCodeHash": "0x340e8f378c0117b300f3ec255bc5c3a273f9ab5bd2940fa8eb3b5065b21f86dc", + "txHash": "0x045d64dc3ebb7ae6c4976854ce0a797a04524d22a6ef5f526bfc27f744bc68e5" + }, + "ServiceRegistry": { + "address": "0x888541878CbDDEd880Cd58c728f1Af5C47343F86", + "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xdaa1228e8cd8569c1e5562b63d2fd89caf897ab67da05922636d3309b838e289", + "proxy": true, + "implementation": { + "address": "0x05E732280bf9F37054346Cb83f5Fd58C5B44F6A8", + "creationCodeHash": "0xec9cb879003a06609541ad87efd4bc5dfc8ea60e4e77cfa5ae2cb5208742e7bc", + "runtimeCodeHash": "0x5161b534164413a88d851832f9c9d1dd1bca32fe2bbb62bb35d112c1dc8b69ab", + "txHash": "0xe1fce867f5dd708e60518b7f257fdbcb28f460d1e3b82045b82d03e64345b210" + } + }, + "L2Curation": { + "address": "0xDe761f075200E75485F4358978FB4d1dC8644FD5", + "initArgs": [ + "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "0x00FBd5D46FFAc54862c1Dd27BE08924BB17f5CDa", + "10000", + "1" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xe9298239bcb3c386cf66e6dd493cf6e7cdd9771c65fa2225e0b34d17550d6805", + "proxy": true, + "implementation": { + "address": "0xd90022aB67920212D0F902F5c427DE82732DE136", + "creationCodeHash": "0x2287d9023bf7d91e688e1eb029eff7657ef3b87e37b5222b01fd50985d0928f9", + "runtimeCodeHash": "0xd799b2b74e9634d6b6ef15b5710409264bed04a60f9519b9d8f05ac183199d16", + "txHash": "0x436bcf91fed712dc8d54f449726b2078fb63cd770f90b492a9622efac5817762" + } + }, + "SubgraphNFTDescriptor": { + "address": "0x4032F7B6b27FfC9862106f826379DaB1716C71d7", + "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", + "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", + "txHash": "0xb7e7aeeecc693f34f491b01c56950533119810a4e3e2642081efc127f11cb782" + }, + "SubgraphNFT": { + "address": "0xF21Df5BbA7EB9b54D8F60C560aFb9bA63e6aED1A", + "constructorArgs": ["0xadE6B8EB69a49B56929C1d4F4b428d791861dB6f"], + "creationCodeHash": "0xc1e58864302084de282dffe54c160e20dd96c6cfff45e00e6ebfc15e04136982", + "runtimeCodeHash": "0x7216e736a8a8754e88688fbf5c0c7e9caf35c55ecc3a0c5a597b951c56cf7458", + "txHash": "0x1309c1caea76f4014ba612de092cc746816119b1440d635d11b6bc7e361a32b0" + }, + "L2GNS": { + "address": "0x3133948342F35b8699d8F94aeE064AbB76eDe965", + "initArgs": [ + "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "0xF21Df5BbA7EB9b54D8F60C560aFb9bA63e6aED1A" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x137140783a99a3e9a60048d607124626ca87e2b972e8cc05efb41ac87c3cbcc4", + "proxy": true, + "implementation": { + "address": "0x00CBF5024d454255577Bf2b0fB6A43328a6828c9", + "creationCodeHash": "0xd71f45e6c194920a26f90fcec96d8c3375f02c5aef8ad90c1be24e906ffe8342", + "runtimeCodeHash": "0x68ec24512fedb866d7ba7ba6c02160317d0ca34eaacd23bddcc62d2cbcd9869c", + "txHash": "0x54619944731edec530b7b0cd587f9c2faae332aa1671fe5e8d7e7e5c7e291a77" + } + }, + "StakingExtension": { + "address": "0x05709dd705A5674346B7206a2bC657C8bAb3301B", + "creationCodeHash": "0x7ae74140871330ecabb7040182dc8288c2c84693393a519230036f39c2281138", + "runtimeCodeHash": "0x4994aa74e9e29c36a8158af690a245ccd1cf4d955223e5fcb1ca62810b37ed57", + "txHash": "0xbe1ff9cb949a53209b778708265740dfa2a08a93cfce4c897a53989a5d93f8c1" + }, + "L2Staking": { + "address": "0x865365C425f3A593Ffe698D9c4E6707D14d51e08", + "initArgs": [ + "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "100000000000000000000000", + "6646", + "10000", + "100000", + "8", + "12", + "16", + "100,100,60,100", + "0x876fB4B13D7Ed146757D3664B7E962b36936001C" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x326cf1f2849da4bb4d7e39f2783779e3c99fa48e4ee8ef004cfdd50c62e775df", + "proxy": true, + "implementation": { + "address": "0xD07dFD514dc1b57020e6C1F49e05c48d0658C99f", + "creationCodeHash": "0x6a763345e5f166ea4e73ce9a116a49c9fc0833d9ea235a86fa5a997e91cf09e5", + "runtimeCodeHash": "0xb4c31859ac132241f04c802d4add70a94c7f2c6eb9dfd4bf224048d249dbc7bc", + "txHash": "0x68b34eda64287b84582c8f005c4e96162252d36c9c5c9b84332336a7c2e3d6d3", + "libraries": { + "LibExponential": "0xd844116f6d79a280b117Bb6d9EBf4121D4e8B44b" + } + } + }, + "RewardsManager": { + "address": "0x1F49caE7669086c8ba53CC35d1E9f80176d67E79", + "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xd8765fb87e11e8d41951f9071188b888829022a889cf66fdc2357f1f9f15c8e2", + "proxy": true, + "implementation": { + "address": "0x714B54e5249C90414fecA240e2F5B618C243F0aE", + "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", + "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", + "txHash": "0x8192f6c0e63a9beede3b025878af6a49367564c8bc32cb11a64f5f1e8351c7cd" + } + }, + "DisputeManager": { + "address": "0x7C9B82717f9433932507dF6EdA93A9678b258698", + "initArgs": [ + "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "0xF89688d5d44d73cc4dE880857A3940487076e5A4", + "10000000000000000000000", + "500000", + "25000", + "25000" + ], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0xb3764f4b576b46ee8dc6cbf680cad650b3ba80aa93dc6cf099862cfe8efc8a68", + "proxy": true, + "implementation": { + "address": "0x887aC2f58D62Ac86d4E9aEc07c953991e3ca1bA3", + "creationCodeHash": "0xce4c47d94a33d69e03d607dd13a9ad1ed7fa730ef4a2308eb56ddd646ebaa0aa", + "runtimeCodeHash": "0x18d4a1659ccecede3d4d305ef1db4653d8f3dcbd4012f4e52200ae9f0c6c322c", + "txHash": "0x59d99afb9cefbb5c2275d9ac2d7230ac7f4a4cfb2440636408988a66075c032a" + } + }, + "AllocationExchange": { + "address": "0x9BD4FBDa981D628AbA16F261f810dD59E5bAf9eA", + "constructorArgs": [ + "0xf8c05dCF59E8B28BFD5eed176C562bEbcfc7Ac04", + "0x865365C425f3A593Ffe698D9c4E6707D14d51e08", + "0x72ee30d43Fb5A90B3FE983156C5d2fBE6F6d07B3", + "0x49D4CFC037430cA9355B422bAeA7E9391e1d3215" + ], + "creationCodeHash": "0x2963baeedb2d0f5a95fa41f6c89e48e5bf177ca439379fc6becd54870d330ab0", + "runtimeCodeHash": "0xd8b53b3f65b49198d35392e0fd11da229a40d15a96151bca2976cbbe36b909d5", + "txHash": "0xa1a9410662d43463c39802e887f33a1401ed0fc35bf22c5be275e62141eae442" + }, + "L2GraphTokenGateway": { + "address": "0xB24Ce0f8c18c4DdDa584A7EeC132F49C966813bb", + "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695"], + "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", + "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", + "txHash": "0x90949db305a73b85e7208aa6b8d03c5181945eedc3df38e90f215a0dec8b02ae", + "proxy": true, + "implementation": { + "address": "0x3C2eB5E561f70c0573E5f6c92358e988E32cb5eC", + "creationCodeHash": "0x90253be19d23d542b29e95e6faf52304fcff91b21edfdb5f79e165051740d1ab", + "runtimeCodeHash": "0x3a7fab6792b4dad58c7b59da19c5b65b3985d1be77024a9f86cb135965e9b462", + "txHash": "0x78ff2e39d5c33ddfb89b1dbee89bdbc24452843a051f860c94e4e9dd75ded9c3" + } + }, + "EthereumDIDRegistry": { + "address": "0xF5f4cA61481558709AFa94AdEDa7B5F180f4AD59", + "creationCodeHash": "0x20cd202f7991716a84c097da5fbd365fd27f7f35f241f82c529ad7aba18b814b", + "runtimeCodeHash": "0x5f396ffd54b6cd6b3faded0f366c5d7e148cc54743926061be2dfd12a75391de", + "txHash": "0x2cefbc169b8ae51c263d0298956d86a397b05f11f076b71c918551f63fe33784" + } + } +} diff --git a/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts b/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts index 836815e33..0d689a80e 100644 --- a/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts +++ b/packages/hardhat-graph-protocol/test/fixtures/path-config/hardhat.config.ts @@ -31,6 +31,13 @@ const config: HardhatUserConfig = { chainId: 421613, url: 'https://goerli-rollup.arbitrum.io/rpc', }, + 'arbitrumSepolia': { + chainId: 421614, + url: 'https://goerli-rollup.arbitrum.io/rpc', + deployments: { + horizon: 'addresses-arbsep.json', + }, + }, 'localhost': { chainId: 1337, url: 'http://127.0.0.1:8545', diff --git a/packages/hardhat-graph-protocol/test/gre.test.ts b/packages/hardhat-graph-protocol/test/gre.test.ts index d66a3fe75..d1fbbd6cd 100644 --- a/packages/hardhat-graph-protocol/test/gre.test.ts +++ b/packages/hardhat-graph-protocol/test/gre.test.ts @@ -32,7 +32,7 @@ describe('GRE usage', function () { }) describe(`Project using GRE - deployments`, function () { - useHardhatProject('path-config', 'mainnet') + useHardhatProject('path-config', 'arbitrumSepolia') it('should load Horizon deployment', function () { const graph = this.hre.graph() From cdf3fb4f9785f336829c00feecbad25fe93e0ca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 22 Nov 2024 17:01:46 -0300 Subject: [PATCH 290/343] feat: add subgraph service to gre MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/hardhat-graph-protocol/README.md | 32 + packages/hardhat-graph-protocol/package.json | 1 + .../src/deployment-list.ts | 6 + packages/hardhat-graph-protocol/src/gre.ts | 11 +- .../src/sdk/deployments/horizon/index.ts | 5 +- .../subgraph-service/address-book.ts | 48 + .../deployments/subgraph-service/contracts.ts | 60 + .../sdk/deployments/subgraph-service/index.ts | 6 + packages/horizon/addresses.json | 1241 +---------------- packages/subgraph-service/addresses.json | 34 + packages/subgraph-service/hardhat.config.ts | 8 + packages/subgraph-service/package.json | 7 + packages/subgraph-service/tsconfig.json | 1 + .../types/hardhat-graph-protocol.d.ts | 45 + yarn.lock | 4 +- 15 files changed, 266 insertions(+), 1243 deletions(-) create mode 100644 packages/hardhat-graph-protocol/README.md create mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/address-book.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/contracts.ts create mode 100644 packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/index.ts create mode 100644 packages/subgraph-service/addresses.json create mode 100644 packages/subgraph-service/types/hardhat-graph-protocol.d.ts diff --git a/packages/hardhat-graph-protocol/README.md b/packages/hardhat-graph-protocol/README.md new file mode 100644 index 000000000..9f9d6eb71 --- /dev/null +++ b/packages/hardhat-graph-protocol/README.md @@ -0,0 +1,32 @@ +# hardhat-graph-protocol + + +## Usage + +Install with yarn + +```bash +yarn add --dev hardhat-graph-protocol + +# From the monorepo +yarn add --dev hardhat-graph-protocol@workspace:^x.y.z +``` + +And add it to your `hardhat.config.ts`: + +```ts +import "hardhat-graph-protocol"; + +export default { + ... + graph: { + deployments: { + horizon: require.resolve('@graphprotocol/horizon/addresses.json'), + subgraphService: require.resolve('@graphprotocol/subgraph-service/addresses.json'), + } + }, + ... +}; +``` + +_Note_: When using the plugin from within this monorepo TypeScript fails to properly apply the type extension typings. This is a known issue and can be worked around by adding a `types/hardhat-graph-protocol.d.ts` file with the same content as the `type-extensions.ts` file in this repository. \ No newline at end of file diff --git a/packages/hardhat-graph-protocol/package.json b/packages/hardhat-graph-protocol/package.json index 5d81d0dd5..f5752731e 100644 --- a/packages/hardhat-graph-protocol/package.json +++ b/packages/hardhat-graph-protocol/package.json @@ -30,6 +30,7 @@ "dependencies": { "@graphprotocol/contracts": "workspace:^7.0.0", "@graphprotocol/horizon": "workspace:^0.0.1", + "@graphprotocol/subgraph-service": "workspace:^0.0.1", "@nomicfoundation/hardhat-ethers": "^3.0.8", "debug": "^4.3.7" }, diff --git a/packages/hardhat-graph-protocol/src/deployment-list.ts b/packages/hardhat-graph-protocol/src/deployment-list.ts index a37b85680..fb3e46fab 100644 --- a/packages/hardhat-graph-protocol/src/deployment-list.ts +++ b/packages/hardhat-graph-protocol/src/deployment-list.ts @@ -1,8 +1,10 @@ import type { GraphHorizonAddressBook, GraphHorizonContracts } from './sdk/deployments/horizon' +import type { SubgraphServiceAddressBook, SubgraphServiceContracts } from './sdk/deployments/subgraph-service' // List of supported Graph deployments export const GraphDeploymentsList = [ 'horizon', + 'subgraphService', ] as const export type GraphDeploymentRuntimeEnvironmentMap = { @@ -10,4 +12,8 @@ export type GraphDeploymentRuntimeEnvironmentMap = { contracts: GraphHorizonContracts addressBook: GraphHorizonAddressBook } + subgraphService: { + contracts: SubgraphServiceContracts + addressBook: SubgraphServiceAddressBook + } } diff --git a/packages/hardhat-graph-protocol/src/gre.ts b/packages/hardhat-graph-protocol/src/gre.ts index d8f4c0825..028df6229 100644 --- a/packages/hardhat-graph-protocol/src/gre.ts +++ b/packages/hardhat-graph-protocol/src/gre.ts @@ -1,10 +1,12 @@ import path from 'path' import { getAddressBookPath } from './config' -import { GraphHorizonAddressBook } from './sdk/deployments/horizon' import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider' import { logDebug } from './logger' +import { GraphHorizonAddressBook } from './sdk/deployments/horizon' +import { SubgraphServiceAddressBook } from './sdk/deployments/subgraph-service' + import { assertGraphRuntimeEnvironment, type GraphRuntimeEnvironmentOptions, isGraphDeployment } from './types' import type { HardhatConfig, HardhatRuntimeEnvironment, HardhatUserConfig } from 'hardhat/types' @@ -58,6 +60,13 @@ export const greExtendEnvironment = (hre: HardhatRuntimeEnvironment) => { contracts: addressBook.loadContracts(provider), } break + case 'subgraphService': + addressBook = new SubgraphServiceAddressBook(addressBookPath, chainId) + greDeployments.subgraphService = { + addressBook: addressBook, + contracts: addressBook.loadContracts(provider), + } + break default: break } diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts index 8bbcb8449..1a451a161 100644 --- a/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/horizon/index.ts @@ -2,8 +2,5 @@ import { GraphHorizonAddressBook } from './address-book' import type { GraphHorizonContractName, GraphHorizonContracts } from './contracts' -export { - GraphHorizonAddressBook, -} - +export { GraphHorizonAddressBook } export type { GraphHorizonContractName, GraphHorizonContracts } diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/address-book.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/address-book.ts new file mode 100644 index 000000000..3fca297a0 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/address-book.ts @@ -0,0 +1,48 @@ +import { logDebug, logError } from '../../../logger' +import { Provider, Signer } from 'ethers' +import { SubgraphServiceArtifactsMap, SubgraphServiceContractNameList } from './contracts' +import { AddressBook } from '../../address-book' +import { assertObject } from '../../utils/assertion' + +import type { SubgraphServiceContractName, SubgraphServiceContracts } from './contracts' + +export class SubgraphServiceAddressBook extends AddressBook { + isContractName(name: unknown): name is SubgraphServiceContractName { + return ( + typeof name === 'string' + && SubgraphServiceContractNameList.includes(name as SubgraphServiceContractName) + ) + } + + loadContracts( + signerOrProvider?: Signer | Provider, + ): SubgraphServiceContracts { + logDebug('Loading Subgraph Service contracts...') + + const contracts = this._loadContracts( + SubgraphServiceArtifactsMap, + signerOrProvider, + ) + this._assertSubgraphServiceContracts(contracts) + + // Aliases + contracts.Curation = contracts.L2Curation + contracts.GNS = contracts.L2GNS + + return contracts + } + + _assertSubgraphServiceContracts( + contracts: unknown, + ): asserts contracts is SubgraphServiceContracts { + assertObject(contracts) + + // Assert that all SubgraphServiceContracts were loaded + for (const contractName of SubgraphServiceContractNameList) { + if (!contracts[contractName]) { + const errMessage = `Missing SubgraphService contract: ${contractName}` + logError(errMessage) + } + } + } +} diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/contracts.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/contracts.ts new file mode 100644 index 000000000..7d0ef1ebc --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/contracts.ts @@ -0,0 +1,60 @@ +import path from 'path' + +import type { + L2Curation, + L2GNS, + ServiceRegistry, + SubgraphNFT, +} from '@graphprotocol/contracts' + +import type { + DisputeManager, + SubgraphService, +} from '@graphprotocol/subgraph-service' +import type { ContractList } from '../../lib/contract' + +export const SubgraphServiceContractNameList = [ + // @graphprotocol/contracts + 'L2Curation', + 'L2GNS', + 'SubgraphNFT', + 'ServiceRegistry', + + // @graphprotocol/subgraph-service + 'SubgraphService', + 'DisputeManager', +] as const + +const root = path.resolve(__dirname, '../../../../..') // hardhat-graph-protocol root +export const CONTRACTS_ARTIFACTS_PATH = path.resolve(root, 'node_modules', '@graphprotocol/contracts/build/contracts') +export const SUBGRAPH_SERVICE_ARTIFACTS_PATH = path.resolve(root, 'node_modules', '@graphprotocol/subgraph-service/build/contracts') + +export const SubgraphServiceArtifactsMap = { + // @graphprotocol/contracts + L2Curation: CONTRACTS_ARTIFACTS_PATH, + L2GNS: CONTRACTS_ARTIFACTS_PATH, + SubgraphNFT: CONTRACTS_ARTIFACTS_PATH, + ServiceRegistry: CONTRACTS_ARTIFACTS_PATH, + + // @graphprotocol/subgraph-service + SubgraphService: SUBGRAPH_SERVICE_ARTIFACTS_PATH, + DisputeManager: SUBGRAPH_SERVICE_ARTIFACTS_PATH, +} as const + +export interface SubgraphServiceContracts extends ContractList { + // @graphprotocol/contracts + L2Curation: L2Curation + L2GNS: L2GNS + SubgraphNFT: SubgraphNFT + ServiceRegistry: ServiceRegistry + + // @graphprotocol/subgraph-service + SubgraphService: SubgraphService + DisputeManager: DisputeManager + + // Aliases + Curation: L2Curation + GNS: L2GNS +} + +export type SubgraphServiceContractName = (typeof SubgraphServiceContractNameList)[number] diff --git a/packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/index.ts b/packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/index.ts new file mode 100644 index 000000000..8f9d7bfa6 --- /dev/null +++ b/packages/hardhat-graph-protocol/src/sdk/deployments/subgraph-service/index.ts @@ -0,0 +1,6 @@ +import { SubgraphServiceAddressBook } from './address-book' + +import type { SubgraphServiceContractName, SubgraphServiceContracts } from './contracts' + +export { SubgraphServiceAddressBook } +export type { SubgraphServiceContractName, SubgraphServiceContracts } diff --git a/packages/horizon/addresses.json b/packages/horizon/addresses.json index fe4dc467b..530fd98ae 100644 --- a/packages/horizon/addresses.json +++ b/packages/horizon/addresses.json @@ -1,1016 +1,4 @@ { - "1": { - "IENS": { - "address": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" - }, - "IEthereumDIDRegistry": { - "address": "0xdCa7EF03e98e0DC2B855bE647C39ABe984fcF21B" - }, - "GraphProxyAdmin": { - "address": "0xF3B000a6749259539aF4E49f24EEc74Ea0e71430", - "creationCodeHash": "0x26a6f47e71ad242e264768571ce7223bf5a86fd0113ab6cb8200f65820232904", - "runtimeCodeHash": "0xd5330527cfb09df657adc879d8ad704ce6b8d5917265cabbd3eb073d1399f122", - "txHash": "0xc5fe1a9f70e3cc4d286e19e3ee8ee9a0639c7415aea22a3f308951abf300382c" - }, - "BancorFormula": { - "address": "0xd0C61e8F15d9deF697E1100663eD7dA74d3727dC", - "creationCodeHash": "0x17f6de9ab8a9bcf03a548c01d620a32caf1f29be8d90a9688ebee54295f857ef", - "runtimeCodeHash": "0x97a57f69b0029383398d02587a3a357168950d61622fe9f9710bf02b59740d63", - "txHash": "0xcd0e28e7d328ff306bb1f2079e594ff9d04d09f21bc5f978b790c8d44b02055a" - }, - "Controller": { - "address": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117", - "creationCodeHash": "0x7f37a1844c38fffd5390d2114804ffc4e5cf66dfb5c7bd67a32a4f5d10eebd2d", - "runtimeCodeHash": "0x929c62381fbed59483f832611752177cc2642e1e35fedeeb6cd9703e278448a0", - "txHash": "0x12b13ed4ac6fee14335be09df76171b26223d870977524cfdce46c11112a5c04" - }, - "EpochManager": { - "address": "0x64F990Bf16552A693dCB043BB7bf3866c5E05DdB", - "initArgs": [ - { - "name": "controller", - "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" - }, - { - "name": "lengthInBlocks", - "value": 6646 - } - ], - "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", - "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", - "txHash": "0x9116a77a4e87eb3fe28514a26b1a6e3ee5ce982f9df3c18aadfc36d4f7f050e7", - "proxy": true, - "implementation": { - "address": "0x3fab259F2392F733c60C19492B5678E5D2D2Ee31", - "creationCodeHash": "0xf03074bb7f026a2574b6ffb5d0f63f0c4fee81e004e1c46ef262dd5802d3384f", - "runtimeCodeHash": "0x0d078a0bf778c6c713c46979ac668161a0a0466356252e47082f80912e4495b2", - "txHash": "0x730141db9a1dc5c9429f7543442e34e9eb994610e2ceabdedb6d322e1bedf2aa" - } - }, - "GraphToken": { - "address": "0xc944E90C64B2c07662A292be6244BDf05Cda44a7", - "constructorArgs": [ - { - "name": "initialSupply", - "value": "10000000000000000000000000000" - } - ], - "creationCodeHash": "0x30da7a30d71fbd41d3327e4d0183401f257af3e905a0c68ebfd18b590b27b530", - "runtimeCodeHash": "0xb964f76194a04272e7582382a4d6bd6271bbb90deb5c1fd3ae3913504ea3a830", - "txHash": "0x079625b9f58a40f1948b396b7007d09ff4aa193d7ec798923910fc179294cab8" - }, - "ServiceRegistry": { - "address": "0xaD0C9DaCf1e515615b0581c8D7E295E296Ec26E6", - "initArgs": [ - { - "name": "controller", - "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" - } - ], - "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", - "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", - "txHash": "0x94cbb1d3863e33bf92acc6fab534c5ce63a9d1347958a323ae496b06f710f042", - "proxy": true, - "implementation": { - "address": "0x866232Ec9a9F918a821eBa561Cc5FC960Ef5B3aa", - "creationCodeHash": "0xf5fa541b43d15fade518feb63a95a73b9c67626108ead259e444af3a7ae1804f", - "runtimeCodeHash": "0x9856d2c2985f410f2f77e456fe6163827ea5251eb5e3f3768d3d4f8868187882", - "txHash": "0xdf811598fbfbc487b16b5bb3444ed47ae3107d3dcde8dbd770e8810315f942b5" - } - }, - "GraphCurationToken": { - "address": "0xb2E26f17Aea8eFA534e15Bde5C79c25D0C3dfa2e", - "creationCodeHash": "0x7e9a56b6fc05d428d1c1116eaa88a658f05487b493d847bfe5c69e35ec34f092", - "runtimeCodeHash": "0x587f9d4e9ecf9e7048d9f42f027957ca34ee6a95ca37d9758d8cd0ee16e89818", - "txHash": "0x68eb11f4d6eaec5036c97b4c6102a509ac31933f1fe011f275b3e5fee30b6590" - }, - "Curation": { - "address": "0x8FE00a685Bcb3B2cc296ff6FfEaB10acA4CE1538", - "initArgs": [ - { - "name": "controller", - "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" - }, - { - "name": "bondingCurve", - "value": "0xd0C61e8F15d9deF697E1100663eD7dA74d3727dC" - }, - { - "name": "reserveRatio", - "value": 500000 - }, - { - "name": "curationTaxPercentage", - "value": 25000 - }, - { - "name": "minimumCurationDeposit", - "value": "1000000000000000000" - } - ], - "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", - "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", - "txHash": "0x64d8d94e21f1923bd1793011ba28f24befd57b511622920716238b05595dac7d", - "proxy": true, - "implementation": { - "address": "0xDeb46851907fd85DD475780CcE2eE0D67c969825", - "creationCodeHash": "0x32ec24cd745738aea9b8cb693d4a20f3cf219226da985ab92d270d3e0b5f7f65", - "runtimeCodeHash": "0xfc0db997a425bc44ee6d6f1e2fd6471227489a22c94f1b358b900134e7ce6308", - "txHash": "0xe95fd068849d1c9f49fbeadb3e7618e1748cc581406d7fdf15204a49d90d2f02" - } - }, - "L1GNS": { - "address": "0xaDcA0dd4729c8BA3aCf3E99F3A9f471EF37b6825", - "initArgs": [ - { - "name": "controller", - "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" - }, - { - "name": "bondingCurve", - "value": "0xd0C61e8F15d9deF697E1100663eD7dA74d3727dC" - }, - { - "name": "didRegistry", - "value": "0xdca7ef03e98e0dc2b855be647c39abe984fcf21b" - } - ], - "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", - "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", - "txHash": "0x7ef90b0477e5c5d05bbd203af7d2bf15224640204e12abb07331df11425d2d00", - "proxy": true, - "implementation": { - "address": "0x83A5B6C542aB20436087Fc79724bdF06ea80f836", - "creationCodeHash": "0xc34de4bdb2c1f364bc3aed96ac77248518578af009a60597835325c0346cc639", - "runtimeCodeHash": "0x134ddad3a28975b2b246e41fc21f647a0b6a6c47d170aea23c9d9ef295cfdd01", - "txHash": "0x0c26745e6d492737a64c253f2384bb2af1ec63a64088799b208e3f0563a528ce" - } - }, - "L1Staking": { - "address": "0xF55041E37E12cD407ad00CE2910B8269B01263b9", - "initArgs": [ - { - "name": "controller", - "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" - }, - { - "name": "minimumIndexerStake", - "value": "100000000000000000000000" - }, - { - "name": "thawingPeriod", - "value": 186092 - }, - { - "name": "protocolPercentage", - "value": 10000 - }, - { - "name": "curationPercentage", - "value": 100000 - }, - { - "name": "channelDisputeEpochs", - "value": 7 - }, - { - "name": "maxAllocationEpochs", - "value": 28 - }, - { - "name": "delegationUnbondingPeriod", - "value": 28 - }, - { - "name": "delegationRatio", - "value": 16 - }, - { - "name": "rebateAlphaNumerator", - "value": 77 - }, - { - "name": "rebateAlphaDenominator", - "value": 100 - } - ], - "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", - "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", - "txHash": "0x6c92edf1c385983d57be0635cf40e1d1068d778edecf2be1631f51556c731af7", - "proxy": true, - "implementation": { - "address": "0x20a14D78848BC8B3F3d4B77239F2adC3C0259A10", - "creationCodeHash": "0x2f3c1dcd9c0abbafd708a5ba243e4afaa115a18f7a4a7db9728cc75e8a8c48fb", - "runtimeCodeHash": "0x4c9896765a37b29d0de3a6f37df1903f7efe1f62e937cb31fdfedd8be7f3008e", - "txHash": "0x6c096b17b867db5775e8d300f0469dec888dde8dbcee03a2294383e23150fbe5", - "libraries": { - "LibExponential": "0xD0AAe7a0A6Ae551DCA969183e1bB376F8a455Ea1" - } - } - }, - "RewardsManager": { - "address": "0x9Ac758AB77733b4150A901ebd659cbF8cB93ED66", - "initArgs": [ - { - "name": "controller", - "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" - }, - { - "name": "issuanceRate", - "value": "1000000012184945188" - } - ], - "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", - "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", - "txHash": "0xd3a4d1b3e250e606f56417fd6e43d35bc794e793b1c5be4ffbecc3a43ca1b7b6", - "proxy": true, - "implementation": { - "address": "0xD92944C84826Be7d1D168B239D30AF4583E085e5", - "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", - "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", - "txHash": "0x55256a323baca3666f9c9f4e4141f037aecd7c5110b7db1a3f3ab28802c8dd48" - } - }, - "DisputeManager": { - "address": "0x97307b963662cCA2f7eD50e38dCC555dfFc4FB0b", - "initArgs": [ - { - "name": "controller", - "value": "0x24CCD4D3Ac8529fF08c58F74ff6755036E616117" - }, - { - "name": "arbitrator", - "value": "0xE1FDD398329C6b74C14cf19100316f0826a492d3" - }, - { - "name": "minimumDeposit", - "value": "10000000000000000000000" - }, - { - "name": "fishermanRewardPercentage", - "value": 500000 - }, - { - "name": "slashingPercentage", - "value": 25000 - } - ], - "creationCodeHash": "0xa02709eb59b9cca8bee1271845b42db037dc1d042dad93410ba532d378a7c79f", - "runtimeCodeHash": "0xdb307489fd9a4a438b5b48909e12020b209280ad777561c0a7451655db097e75", - "txHash": "0x90cd5852f5824f76d93814ffea26040ff503c81a84c4430e3688f219f9b48465", - "proxy": true, - "implementation": { - "address": "0x444c138bf2b151f28a713b0ee320240365a5bfc2", - "creationCodeHash": "0xc00c4702d9683f70a90f0b73ce1842e66fa4c26b2cf75fb486a016bb7bac2102", - "runtimeCodeHash": "0x2bb6445bf9e12618423efe9ef64d05e14d283979829e751cd24685c1440c403f", - "txHash": "0x413cd4f8e9e70ad482500772c1f13b0be48deb42d7f2d0d5a74b56d5a6bd8a4d" - } - }, - "AllocationExchange": { - "address": "0x4a53cf3b3EdA545dc61dee0cA21eA8996C94385f", - "initArgs": [ - { - "name": "graphToken", - "value": "0xc944e90c64b2c07662a292be6244bdf05cda44a7" - }, - { - "name": "staking", - "value": "0xf55041e37e12cd407ad00ce2910b8269b01263b9" - }, - { - "name": "governor", - "value": "0x74db79268e63302d3fc69fb5a7627f7454a41732" - }, - { - "name": "authority", - "value": "0x79fd74da4c906509862c8fe93e87a9602e370bc4" - } - ], - "creationCodeHash": "0x1c7b0d7e81fc15f8ccc5b159e2cedb1f152653ebbce895b59eb74a1b26826fda", - "runtimeCodeHash": "0xa63c77e0724a5f679660358452e388f60379f1331e74542afb1436ffb213b960", - "txHash": "0x2ecd036c562f2503af9eaa1a9bca3729bd31ec8a91677530eefbecb398b793ba" - }, - "SubgraphNFTDescriptor": { - "address": "0x8F0B7e136891e8Bad6aa4Abcb64EeeFE29dC2Af0", - "creationCodeHash": "0x7ac0757e66857e512df199569ee11c47a61b00a8d812469b79afa5dafa98c0ed", - "runtimeCodeHash": "0x9a34ad6b202bdfa95ea85654ea2e0dd40a4b8b10847f1c3d3d805fa95a078a3d", - "txHash": "0x77d98358726575ae044ac988b98b63f537951ccae2010e7177c4a7833dce9158" - }, - "SubgraphNFT": { - "address": "0x24e36639b3A3aaA9c928a8A6f12d34F942f1ab67", - "creationCodeHash": "0x8c9929ec6293458209f9cbadd96821604765e3656fe3c7b289b99194ede15336", - "runtimeCodeHash": "0x6309a51754b6bec245685c7a81059dc28e3756f1045f18d059abc9294f454a6a", - "txHash": "0x106c31f2c24a5285c47a766422823766f1c939034513e85613d70d99ef697173" - }, - "BridgeEscrow": { - "address": "0x36aFF7001294daE4C2ED4fDEfC478a00De77F090", - "initArgs": ["0x24CCD4D3Ac8529fF08c58F74ff6755036E616117"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x218aff2c804dd3dfe5064b08cab83ffb37382ca2aea1a225c2ead02ec99f38b5", - "proxy": true, - "implementation": { - "address": "0xBcD54513aa593646d72aEA31406c633C235Ad6EA", - "creationCodeHash": "0x6a1fc897c0130a1c99221cde1938d247de13a0861111ac47ad81c691f323df1a", - "runtimeCodeHash": "0xc8e31a4ebea0c3e43ceece974071ba0b6db2bed6725190795e07a2d369d2a8ab", - "txHash": "0x92908e33b54f59ec13a0f7bd29b818c421742294b9974d73859e0bde871bafb9" - } - }, - "L1GraphTokenGateway": { - "address": "0x01cDC91B0A9bA741903aA3699BF4CE31d6C5cC06", - "initArgs": ["0x24CCD4D3Ac8529fF08c58F74ff6755036E616117"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xd327568a286d6fcda1a6b78a14c87d660523a6900be901d6a7fbc2504faff64b", - "proxy": true, - "implementation": { - "address": "0xD41ca6A1d034D178c196DFa916f22f7D1a1B8222", - "creationCodeHash": "0x7d6f46e4801d562a8c6fc37779711cce39b3544ea62c6c6517d4b06e8604e38c", - "runtimeCodeHash": "0xa0c0a37340ee949d31c3d41b642c507c58f225c09da9ae3d378e5148cd27081a", - "txHash": "0x25f4234807c7f09b813d4e413311bbe440c8257bc050c71678f63a7abc6e643e" - } - }, - "StakingExtension": { - "address": "0xA479c00cDa8C07bce458D7a826C7b091672EB92C", - "creationCodeHash": "0xe23c59dbfb94b0cf7ef58f654b905977624ce57eaae2fce692edb28ca3f1b3ba", - "runtimeCodeHash": "0xca8ad20187bc87e0e04a15184f529787dd23a0095047d411e1b271617a951c49", - "txHash": "0x13cd940ba9c8dd576f9f311e805539792f4caa88ada5a1b516355edabc776dd8" - } - }, - "5": { - "GraphProxyAdmin": { - "address": "0x6D47902c3358E0BCC06171DE935cB23D8E276fdd", - "creationCodeHash": "0x8b9a4c23135748eb0e4d0e743f7276d86264ace935d23f9aadcfccd64b482055", - "runtimeCodeHash": "0x47aa67e4a85090fe7324268b55fb7b320ee7a8937f2ad02480b71d4bb3332b13", - "txHash": "0xd4be829c13c741b8b56ca5ee7d98d86237ce44df7c11eff73df26cd87d5cab94" - }, - "BancorFormula": { - "address": "0x2DFDC3e11E035dD96A4aB30Ef67fab4Fb6EC01f2", - "creationCodeHash": "0x7ae36017eddb326ddd79c7363781366121361d42fdb201cf57c57424eede46f4", - "runtimeCodeHash": "0xed6701e196ad93718e28c2a2a44d110d9e9906085bcfe4faf4f6604b08f0116c", - "txHash": "0x97ca33e6e7d1d7d62bdec4827f208076922d9c42bf149693b36ab91429e65740" - }, - "Controller": { - "address": "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", - "creationCodeHash": "0x4f2082404e96b71282e9d7a8b7efd0f34996b5edac6711095911d36a57637c88", - "runtimeCodeHash": "0xe31d064a2db44ac10d41d74265b7d4482f86ee95644b9745c04f9fc91006906d", - "txHash": "0x8087bd10cc8d456a7b573bc30308785342db2b90d80f3a750931ab9cf5273b83" - }, - "EpochManager": { - "address": "0x03541c5cd35953CD447261122F93A5E7b812D697", - "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", "554"], - "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", - "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", - "txHash": "0xb1c6189514b52091e35c0349dff29357a2572cd9c2f9ad7f623b2b24252826d1", - "proxy": true, - "implementation": { - "address": "0xb6a641879F195448F3Da10fF3b3C4541808a9342", - "creationCodeHash": "0x729aca90fcffdeede93bc42a6e089a93085ec04133e965cf0291cf6245880595", - "runtimeCodeHash": "0xce525d338b6ed471eeb36d2927a26608cca2d5cfe52bd0585945eacc55b525cf", - "txHash": "0x139630c31b6a5799231572aa0b555a44209acd79fb3df98832d80cf9a1013b58" - } - }, - "GraphToken": { - "address": "0x5c946740441C12510a167B447B7dE565C20b9E3C", - "constructorArgs": ["10000000000000000000000000000"], - "creationCodeHash": "0xa749ef173d768ffe0786529cd23238bc525f4a621a91303d8fb176533c18cec2", - "runtimeCodeHash": "0xe584408c8e04a6200bc7a50816343585ad80f699bd394b89bb96964dbc1a2a92", - "txHash": "0x0639808a47da8a5270bc89eb3009c7d29167c8f32f015648920ec5d114225540" - }, - "GraphCurationToken": { - "address": "0x8bEd0a89F18a801Da9dEA994D475DEa74f75A059", - "creationCodeHash": "0x8c076dacbf98f839a0ff25c197eafc836fc3fc1ee5183c7f157acec17678a641", - "runtimeCodeHash": "0xad138b4c4f34501f83aea6c03a49c103a9115526c993860a9acbd6caeaaf0d64", - "txHash": "0xc09739affd3d9dd43f690d3a487b1c149ad8aa50164995cfbc9de73914ff278a" - }, - "ServiceRegistry": { - "address": "0x7CF8aD279E9F26b7DAD2Be452A74068536C8231F", - "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B"], - "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", - "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", - "txHash": "0xf250ef40f4172e54b96047a59cfd7fc35ffabe14484ff1d518e0262195895282", - "proxy": true, - "implementation": { - "address": "0xdC7Fb3a43B9e069df5F07eDc835f60dAc3fD40BA", - "creationCodeHash": "0x45f56a7ad420cd11a8585594fb29121747d87d412161c8779ea36dfd34a48e88", - "runtimeCodeHash": "0x26aceabe83e2b757b2f000e185017528cdde2323c2129fd612180ac3192adfda", - "txHash": "0x2fdb5fa641f707809322107573ce7799711e125cc781aade99fd2948455847ab" - } - }, - "Curation": { - "address": "0xE59B4820dDE28D2c235Bd9A73aA4e8716Cb93E9B", - "initArgs": [ - "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", - "0x2DFDC3e11E035dD96A4aB30Ef67fab4Fb6EC01f2", - "0x8bEd0a89F18a801Da9dEA994D475DEa74f75A059", - "500000", - "10000", - "1000000000000000000" - ], - "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", - "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", - "txHash": "0xf1b1f0f28b80068bcc9fd6ef475be6324a8b23cbdb792f7344f05ce00aa997d7", - "proxy": true, - "implementation": { - "address": "0x2b757ad83e4ed51ecae8d4dc9ade8e3fa29f7bdc", - "creationCodeHash": "0xde37904a7c087e05dc5f84e46a7ff35e1f75f013db373c72715d81d21921de4a", - "runtimeCodeHash": "0x867f82ea221eee52ee0db10a2b49ed8051f4ffc4069238d01f8a0110798a51ef", - "txHash": "0x928ed1d624aecbfdb60d5840c2b9cc81573b9dbe3ec96cf6d86dc8194cb7fdac" - } - }, - "SubgraphNFTDescriptor": { - "address": "0xE7e406b4Bfce0B78A751712BFEb1D6B0ce60e8fb", - "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", - "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", - "txHash": "0xffee21f6616abd4ffdab0b930dbf44d2ba381a08c3c834798df464fd85e8047e" - }, - "SubgraphNFT": { - "address": "0x083318049968F20EfaEA48b0978EC57bbb0ECbcE", - "constructorArgs": ["0xEfc519BEd6a43a14f1BBBbA9e796C4931f7A5540"], - "creationCodeHash": "0x5de044b15df24beb8781d1ebe71f01301a6b8985183f37eb8d599aa4059a1d3e", - "runtimeCodeHash": "0x6a7751298d6ffdbcf421a3b72faab5b7d425884b04757303123758dbcfb21dfa", - "txHash": "0x8884b65a236c188e4c61cf9593be2f67b27e4f80785939336d659866cfd97aec" - }, - "L1GNS": { - "address": "0x065611D3515325aE6fe14f09AEe5Aa2C0a1f0CA7", - "initArgs": [ - "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", - "0x2DFDC3e11E035dD96A4aB30Ef67fab4Fb6EC01f2", - "0x083318049968F20EfaEA48b0978EC57bbb0ECbcE" - ], - "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", - "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", - "txHash": "0x0149f062893acb0eafcbf67acc99da99e03aab3ee2b6b40fbe523d91e0fcecd1", - "proxy": true, - "implementation": { - "address": "0xa95ee5A5f6b45Fcf85A7fa0714f462472C467818", - "creationCodeHash": "0x2e71e4aefc1e678cb9c71882c1da67fc640389337a7d6ae43f78d0f13294594a", - "runtimeCodeHash": "0xde0e02c6a36a90e11c768f40a81430b7e9cda261aa6dada14eaad392d42efc21", - "txHash": "0xbc6e9171943020d30c22197282311f003e79374e6eeeaab9c360942bdf4193f4" - } - }, - "L1Staking": { - "address": "0x35e3Cb6B317690d662160d5d02A5b364578F62c9", - "initArgs": [ - "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", - "100000000000000000000000", - "6646", - "10000", - "100000", - "2", - "4", - "12", - "16", - "77", - "100" - ], - "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", - "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", - "txHash": "0x1960be49029284756037cf3ee8afe9eeaba93de4ba84875c5eefd5d2289903bd", - "proxy": true, - "implementation": { - "address": "0x475e6b44ad3F570907C234A7084df5Df65c7430C", - "creationCodeHash": "0x665ac0b452b51bf138cc1ab67e642a06874e754081432ea0fe3dd093c0eef145", - "runtimeCodeHash": "0x1f4490e6582f31ac25b22700b5704b893b9d7641ece59f7f911856f979f0b672", - "txHash": "0x509f8956d8e7a18c37838d9468e1c424558b1af3080087834da3244fa50cba2a", - "libraries": { - "LibExponential": "0xEB421FC914f8e898711974f13F194BCd21e51433" - } - } - }, - "RewardsManager": { - "address": "0x1246D7c4c903fDd6147d581010BD194102aD4ee2", - "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", "1000000012184945188"], - "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", - "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", - "txHash": "0x108efecde4422dacf6ec7a07884cab214ba0a441fc73a6ad82ceb5c73e1c9334", - "proxy": true, - "implementation": { - "address": "0x295b26b449C533bd1831FF7d14c151C95a380e5e", - "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", - "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", - "txHash": "0x112a3c4447e16a75d1ceda6b475df1bdec8353c24de7282f333e734f93da85cc" - } - }, - "DisputeManager": { - "address": "0x8c344366D9269174F10bB588F16945eb47f78dc9", - "initArgs": [ - "0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B", - "0xFD01aa87BeB04D0ac764FC298aCFd05FfC5439cD", - "10000000000000000000000", - "500000", - "25000", - "25000" - ], - "creationCodeHash": "0x25a7b6cafcebb062169bc25fca9bcce8f23bd7411235859229ae3cc99b9a7d58", - "runtimeCodeHash": "0xaf2d63813a0e5059f63ec46e1b280eb9d129d5ad548f0cdd1649d9798fde10b6", - "txHash": "0xe93eba1bda0d262efabbc05d4e01b9ee197f22dd4f798e4c5fc5b1b9c137428e", - "proxy": true, - "implementation": { - "address": "0x476F0b8e5F952f0740aD3b0cb50648a7496c8388", - "creationCodeHash": "0x5b73c9b910d66426fd965ac3110e9debda1d81134c0354a7af8ec1f2ebd765f6", - "runtimeCodeHash": "0xcaf3547f0d675a1e1d2f887cf4666410bc3b084e65ad283ed3f1ff2b1bccc113", - "txHash": "0x6a90b5e2d5dcae2c94fe518ce7f6fb2ffc11e562b9feac6464dcb32e1e90c039" - } - }, - "AllocationExchange": { - "address": "0x67FBea097202f46D601D7C937b5DBb615659aDF2", - "constructorArgs": [ - "0x5c946740441C12510a167B447B7dE565C20b9E3C", - "0x35e3Cb6B317690d662160d5d02A5b364578F62c9", - "0xf1135bFF22512FF2A585b8d4489426CE660f204c", - "0x52e498aE9B8A5eE2A5Cd26805F06A9f29A7F489F" - ], - "creationCodeHash": "0x97714e1a80674ab0af90a10f2c7156cc92794ef81565fe9c7c35ecbe0025cc08", - "runtimeCodeHash": "0x5c20792fefe71126668be8ab19ab26cdb8ab9a6f73efbfa1d90f91e26459fa67", - "txHash": "0x87b35e5289792800832902206cf0ee4b9900e4d38089bd6634d10ea78729bf54" - }, - "IENS": { - "address": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" - }, - "IEthereumDIDRegistry": { - "address": "0xdCa7EF03e98e0DC2B855bE647C39ABe984fcF21B" - }, - "BridgeEscrow": { - "address": "0x8e4145358af77516B886D865e2EcacC0Fd832B75", - "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x190ea3c8f731a77a8fd1cbce860f9561f233adeafe559b33201b7d21ccd298cf", - "proxy": true, - "implementation": { - "address": "0xDD569E05D54fBF5d02fE4a26aC03Ea00317A0A2e", - "creationCodeHash": "0x6a1fc897c0130a1c99221cde1938d247de13a0861111ac47ad81c691f323df1a", - "runtimeCodeHash": "0xc8e31a4ebea0c3e43ceece974071ba0b6db2bed6725190795e07a2d369d2a8ab", - "txHash": "0x369038dcc8d8e70d40782dd761a82cc453c7a4f1939284c724a5a72119e3e566" - } - }, - "L1GraphTokenGateway": { - "address": "0xc82fF7b51c3e593D709BA3dE1b3a0d233D1DEca1", - "initArgs": ["0x48eD7AfbaB432d1Fc6Ea84EEC70E745d9DAcaF3B"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x4a06731591df5c5f77c11bf8df7851234873eb6727fbbc93f5595a223f7cf3fc", - "proxy": true, - "implementation": { - "address": "0x9e8bab937Cac7c359F5e92248d10C613B3Cd7B8b", - "creationCodeHash": "0x7d6f46e4801d562a8c6fc37779711cce39b3544ea62c6c6517d4b06e8604e38c", - "runtimeCodeHash": "0xa0c0a37340ee949d31c3d41b642c507c58f225c09da9ae3d378e5148cd27081a", - "txHash": "0x517794503416be02d916d289f4e7510359d17567bec987da99319e27e5f40fc1" - } - }, - "StakingExtension": { - "address": "0x163203D9fae9eB88a8B3a11B1778710D6F855907", - "creationCodeHash": "0xe23c59dbfb94b0cf7ef58f654b905977624ce57eaae2fce692edb28ca3f1b3ba", - "runtimeCodeHash": "0xca8ad20187bc87e0e04a15184f529787dd23a0095047d411e1b271617a951c49", - "txHash": "0x20a0c0f2a26258e1c63f33f3a5651580bb74ea4bf0e66076ebbdda4fa41d5955" - } - }, - "42161": { - "GraphProxyAdmin": { - "address": "0x2983936aC20202a6555993448E0d5654AC8Ca5fd", - "creationCodeHash": "0x68b304ac6bce7380d5e0f6b14a122f628bffebcc75f8205cb60f0baf578b79c3", - "runtimeCodeHash": "0x8d9ba87a745cf82ab407ebabe6c1490197084d320efb6c246d94bcc80e804417", - "txHash": "0x3ff82c38ec0e08e8f4194689188edcc1e8acb1f231c14cce8f0223f4dfc6cb76" - }, - "BancorFormula": { - "address": "0xA489FDc65229D6225014C0b357BCD19af6f00eE9", - "creationCodeHash": "0x7ae36017eddb326ddd79c7363781366121361d42fdb201cf57c57424eede46f4", - "runtimeCodeHash": "0xed6701e196ad93718e28c2a2a44d110d9e9906085bcfe4faf4f6604b08f0116c", - "txHash": "0xb2bb14ba3cbd1bb31b08b86aced469745f9888710254bb3baed047f435e788c0" - }, - "Controller": { - "address": "0x0a8491544221dd212964fbb96487467291b2C97e", - "creationCodeHash": "0x798f913fbaa1b2547c917e3dc31679089ab27cba442c511c159803acdba28c15", - "runtimeCodeHash": "0x00ae0824f79c4e48d2d23a8d4e6d075f04f44f3ea30a4f4305c345bb98117c62", - "txHash": "0x2a9d5744ad0e5e2e6bb6733ae890702fed2bce906e4e8b1cc50d2d3912c58d18" - }, - "EpochManager": { - "address": "0x5A843145c43d328B9bB7a4401d94918f131bB281", - "initArgs": ["0x0a8491544221dd212964fbb96487467291b2C97e", "6646"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x4c70b8a56278452898d9eb23787a977d38141ebe48c79417c3acf6748ff921cf", - "proxy": true, - "implementation": { - "address": "0xeEDEdb3660154f439D93bfF612f7902edf07b848", - "creationCodeHash": "0x83bc0b08dbe1a9259666ec209f06223863f7bb9cfbf917a2d4b795c771a727fe", - "runtimeCodeHash": "0xed60261c6dc84ebc16830c36f3ee370a92802601d5a2fe1c3c19f5120dcbc2eb", - "txHash": "0x64fac1c567b7be735084b337a1e4ea9b990a8ffee8190485dc9b8dfcc257146c" - } - }, - "L2GraphToken": { - "address": "0x9623063377AD1B27544C965cCd7342f7EA7e88C7", - "initArgs": ["0x4528FD7868c91Ef64B9907450Ee8d82dC639612c"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x8465190df853c05bbdec00ba6b66139be0e5663fd5b740bdd464ad7409ce2100", - "proxy": true, - "implementation": { - "address": "0xaFFCb96181D920FE8C0Af046C49B2c9eC98b28df", - "creationCodeHash": "0x6c4146427aafa7375a569154be95c8c931bf83aab0315706dd78bdf79c889e4c", - "runtimeCodeHash": "0x004371d1d80011906953dcba17c648503fc94b94e1e0365c8d8c706ff91f93e9", - "txHash": "0xbd7d146ce80831ed7643e9f5b5a84737da354994ae080cb3d7ff7bbc3e696b3d" - } - }, - "GraphCurationToken": { - "address": "0x47a0d56ea574419B524285d52fFe7198297D209c", - "creationCodeHash": "0x1ee42ee271cefe20c33c0de904501e618ac4b56debca67c634d0564cecea9ff2", - "runtimeCodeHash": "0x340e8f378c0117b300f3ec255bc5c3a273f9ab5bd2940fa8eb3b5065b21f86dc", - "txHash": "0x382568f1871a3d57f4d3787b255a2364e9926cb6770fdca3cde6cb04b577ecd5" - }, - "ServiceRegistry": { - "address": "0x072884c745c0A23144753335776c99BE22588f8A", - "initArgs": ["0x0a8491544221dd212964fbb96487467291b2C97e"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x54b1da3f2fdd2327abe01f75ac38a670ee16d3f47bc58641ddaef04f0b9d0f78", - "proxy": true, - "implementation": { - "address": "0xD32569dA3B89b040A0589B5b8D2c721a68472ff3", - "creationCodeHash": "0x50808e8cce93cf78a23c9e6dd7984356bd2bd93be30b358982909140dd61f6ff", - "runtimeCodeHash": "0xaef79c87f7e80107c0dc568cf1f8950459b5174ee3aa565ec487556a655e71db", - "txHash": "0xca363c6bc841b43bd896b6d2098434679884d200a28013dedb48a2c95028ce40" - } - }, - "L2Curation": { - "address": "0x22d78fb4bc72e191C765807f8891B5e1785C8014", - "initArgs": [ - "0x0a8491544221dd212964fbb96487467291b2C97e", - "0xA489FDc65229D6225014C0b357BCD19af6f00eE9", - "0x47a0d56ea574419B524285d52fFe7198297D209c", - "1000000", - "10000", - "1000000000000000000" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x8f856e2090af3243349199f7991e01b1c28de7b70b0185d2370d8ada5ce9c97b", - "proxy": true, - "implementation": { - "address": "0x41Ad970e071aadbE098c17aDFCff2fF3105456Ae", - "creationCodeHash": "0x2c7b48c311e8f0cb03513d4ca4c0010132d7402f1aabb1dd65f28cdcf07255ba", - "runtimeCodeHash": "0xa750bd231f2b1ec9ffaeef4de79eddbde8aca9bdbf4c9125424eea644bf27aff", - "txHash": "0x7b03bc16b3af6a650ff866311b1f580936e8b7264ddb4c6348fb824c508d1dcb" - } - }, - "SubgraphNFTDescriptor": { - "address": "0x96cce9b6489744630A058324FB22e7CD02815ebe", - "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", - "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", - "txHash": "0xbb01566726e1d58825cf7aa2860f0f571ff47f92b3837aad0e73e7791fbca48c" - }, - "SubgraphNFT": { - "address": "0x3FbD54f0cc17b7aE649008dEEA12ed7D2622B23f", - "constructorArgs": ["0x4528FD7868c91Ef64B9907450Ee8d82dC639612c"], - "creationCodeHash": "0xc1e58864302084de282dffe54c160e20dd96c6cfff45e00e6ebfc15e04136982", - "runtimeCodeHash": "0x7216e736a8a8754e88688fbf5c0c7e9caf35c55ecc3a0c5a597b951c56cf7458", - "txHash": "0x4334bd64938c1c5c604bde96467a8601875046569f738e6860851594c91681ff" - }, - "L2GNS": { - "address": "0xec9A7fb6CbC2E41926127929c2dcE6e9c5D33Bec", - "initArgs": [ - "0x0a8491544221dd212964fbb96487467291b2C97e", - "0xA489FDc65229D6225014C0b357BCD19af6f00eE9", - "0x3FbD54f0cc17b7aE649008dEEA12ed7D2622B23f" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xf7f2747d1aafd1684ffee7316e727475249cd358af559c6234089b72ffc25f5d", - "proxy": true, - "implementation": { - "address": "0x9B81c7C5A21E65b849FD487540B0A82d3b97b2c7", - "creationCodeHash": "0xd71f45e6c194920a26f90fcec96d8c3375f02c5aef8ad90c1be24e906ffe8342", - "runtimeCodeHash": "0x68ec24512fedb866d7ba7ba6c02160317d0ca34eaacd23bddcc62d2cbcd9869c", - "txHash": "0xfaecc9eb83958359f7440b3dbe1747c2191590acbbde920f191c94352cc0b6d7" - } - }, - "L2Staking": { - "address": "0x00669A4CF01450B64E8A2A20E9b1FCB71E61eF03", - "initArgs": [ - "0x0a8491544221dd212964fbb96487467291b2C97e", - "100000000000000000000000", - "186092", - "10000", - "100000", - "7", - "28", - "28", - "16", - "77", - "100" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xa33c0d58ddaed7e3f7381a33e3d5f63e39219863019f00d54ce2fd2446076ac7", - "proxy": true, - "implementation": { - "address": "0x4a886d3E44C7731Dcf888Da704CA5C51ed63DfC8", - "creationCodeHash": "0xa9796308a637b0bfe091f32c1019e4db8efe4bab80788c052fa334e6810c3a98", - "runtimeCodeHash": "0x19d3491cab54b2aae04d05525a532200e946ce9b55573b58f2e3e1606b4514be", - "txHash": "0xc3235306a51c20b28a8b05da69859e03a081a84c9914156c79da07dcc45b3b4e", - "libraries": { - "LibExponential": "0x208f638d8804e4ccc874ec39e240feea3dc289ee" - } - } - }, - "RewardsManager": { - "address": "0x971B9d3d0Ae3ECa029CAB5eA1fB0F72c85e6a525", - "initArgs": ["0x0a8491544221dd212964fbb96487467291b2C97e"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x222e14cb6f49e3e7b76f6a523c1a3c24f96402676be8662bf1b94bb2250ddd0f", - "proxy": true, - "implementation": { - "address": "0x5912Afc5E0f430B0F84b792E9C7CC892b4bE6Bdb", - "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", - "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", - "txHash": "0x4ac3d936067601dab0ccab5ccd544edbe8457b56c43c6e2f370d33acdb806d19" - } - }, - "DisputeManager": { - "address": "0x0Ab2B043138352413Bb02e67E626a70320E3BD46", - "initArgs": [ - "0x0a8491544221dd212964fbb96487467291b2C97e", - "0x113DC95e796836b8F0Fa71eE7fB42f221740c3B0", - "10000000000000000000000", - "500000", - "25000", - "25000" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x68f08fe0a1179170c8b4c7542725d71432b4171604d7456dff824e0ec1c6cdb9", - "proxy": true, - "implementation": { - "address": "0x358bCB57F9893188c1f5CA4e3390C8E84dAAD9B9", - "creationCodeHash": "0xce4c47d94a33d69e03d607dd13a9ad1ed7fa730ef4a2308eb56ddd646ebaa0aa", - "runtimeCodeHash": "0x18d4a1659ccecede3d4d305ef1db4653d8f3dcbd4012f4e52200ae9f0c6c322c", - "txHash": "0xc6b7c7ac5e1b800326fdc99a12262a1528f46fbd0881b5869d7c5a1709c6e0ce" - } - }, - "AllocationExchange": { - "address": "0x993F00C98D1678371a7b261Ed0E0D4b6F42d9aEE", - "constructorArgs": [ - "0x9623063377AD1B27544C965cCd7342f7EA7e88C7", - "0x00669A4CF01450B64E8A2A20E9b1FCB71E61eF03", - "0x270Ea4ea9e8A699f8fE54515E3Bb2c418952623b", - "0x79f2212de27912bCb25a452fC102C85c142E3eE3" - ], - "creationCodeHash": "0x96c5b59557c161d80f1617775a7b9537a89b0ecf2258598b3a37724be91ae80a", - "runtimeCodeHash": "0xc86fd1d67a0db0aed4cb310f977ebf3e70865e2095a167f4a103c3792146027c", - "txHash": "0x2bad6b8e5eda0026c8c38a70b925bbedd6a617a1e06952fb30e427fdbc592422" - }, - "L2GraphTokenGateway": { - "address": "0x65E1a5e8946e7E87d9774f5288f41c30a99fD302", - "initArgs": ["0x0a8491544221dd212964fbb96487467291b2C97e"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x50816047ea926423ec02b6b89efb96efcd3d7e7028ea7cf82c3da9fd1bf3869e", - "proxy": true, - "implementation": { - "address": "0x6f37b2AF8A0Cc74f1bFddf2E9302Cb226710127F", - "creationCodeHash": "0xbd52455bd8b14bfc27af623388fe2f9e06ddd4c4be3fc06c51558a912de91770", - "runtimeCodeHash": "0x29e47f693053f978d6b2ac0a327319591bf5b5e8a6e6c0744b8afcc0250bf667", - "txHash": "0x0eaa9d03982b88e765262a15b95548cb688ce9337a48460f39e55f8850690cbe" - } - }, - "EthereumDIDRegistry": { - "address": "0xa9AEb1c6f14f4244547B9a0946C485DA99047638", - "creationCodeHash": "0x20cd202f7991716a84c097da5fbd365fd27f7f35f241f82c529ad7aba18b814b", - "runtimeCodeHash": "0x5f396ffd54b6cd6b3faded0f366c5d7e148cc54743926061be2dfd12a75391de", - "txHash": "0xdd23b546fa3b6be0cea2339abe3023a082153693fbc7bf1bc86d190165823b39" - }, - "IEthereumDIDRegistry": { - "address": "0xa9AEb1c6f14f4244547B9a0946C485DA99047638" - }, - "StakingExtension": { - "address": "0x3bE385576d7C282070Ad91BF94366de9f9ba3571", - "constructorArgs": [], - "creationCodeHash": "0xbfc20ab9b880712ab90b5dec9d2a14c724b0bf7c20f02ede8ea76610bd41b6ef", - "runtimeCodeHash": "0xd7fdd744c7a88993435a2978876b1e4341c5e0fb4d611011bb56e8738ab2485d", - "txHash": "0xcc449d1ca1007fba76b25e987ea0d39164acf4027c10c40bd669ede1c65dc569" - } - }, - "421613": { - "GraphProxyAdmin": { - "address": "0x4037466bb242f51575d32E8B1be693b3E5Cd1386", - "creationCodeHash": "0x68b304ac6bce7380d5e0f6b14a122f628bffebcc75f8205cb60f0baf578b79c3", - "runtimeCodeHash": "0x8d9ba87a745cf82ab407ebabe6c1490197084d320efb6c246d94bcc80e804417", - "txHash": "0x9c4d5f8c0ab5a5bc36b0a063ab1ff04372ce7d917c0b200b94544b5da4f0230d" - }, - "BancorFormula": { - "address": "0x71319060b9fdeD6174b6368bE04F9A1b7c9aCe48", - "creationCodeHash": "0x7ae36017eddb326ddd79c7363781366121361d42fdb201cf57c57424eede46f4", - "runtimeCodeHash": "0xed6701e196ad93718e28c2a2a44d110d9e9906085bcfe4faf4f6604b08f0116c", - "txHash": "0x7fe8cabb7a4fe56311591aa8d68d6c82cb0d5c232fc5aaf28bed4d1ece0e42e5" - }, - "Controller": { - "address": "0x7f734E995010Aa8d28b912703093d532C37b6EAb", - "creationCodeHash": "0x798f913fbaa1b2547c917e3dc31679089ab27cba442c511c159803acdba28c15", - "runtimeCodeHash": "0x00ae0824f79c4e48d2d23a8d4e6d075f04f44f3ea30a4f4305c345bb98117c62", - "txHash": "0x6213da3e6367ef47cd6e1fe23e4d83296f16153a64236a5c91f865f2ec84c089" - }, - "EpochManager": { - "address": "0x8ECedc7631f4616D7f4074f9fC9D0368674794BE", - "initArgs": ["0x7f734E995010Aa8d28b912703093d532C37b6EAb", "554"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x62b0d6b8556be9443397ad1f6030fdc47b1a4a3ebcc63f34cdf4091420aec84b", - "proxy": true, - "implementation": { - "address": "0xAaB195Ed1B445A2A0E357494d9036bC746227AE2", - "creationCodeHash": "0x83bc0b08dbe1a9259666ec209f06223863f7bb9cfbf917a2d4b795c771a727fe", - "runtimeCodeHash": "0xed60261c6dc84ebc16830c36f3ee370a92802601d5a2fe1c3c19f5120dcbc2eb", - "txHash": "0xd4f8780490f63432580e3dd5b2b4d9b39e904e8b4ac5cfd23540658cbafe449d" - } - }, - "L2GraphToken": { - "address": "0x18C924BD5E8b83b47EFaDD632b7178E2Fd36073D", - "initArgs": ["0xEfc519BEd6a43a14f1BBBbA9e796C4931f7A5540"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x7ec14b524141af953959b537c1acbea9b49b12ee906563a6172123b09ab3d1f6", - "proxy": true, - "implementation": { - "address": "0x5dcAcF820D7b9F0640e8a23a5a857675A774C34a", - "creationCodeHash": "0x6c4146427aafa7375a569154be95c8c931bf83aab0315706dd78bdf79c889e4c", - "runtimeCodeHash": "0x004371d1d80011906953dcba17c648503fc94b94e1e0365c8d8c706ff91f93e9", - "txHash": "0xb748498a2ebc90e20dc8da981be832f4e00f08ea9ff289880738705e45d6aeca" - } - }, - "GraphCurationToken": { - "address": "0x2B757ad83e4ed51ecaE8D4dC9AdE8E3Fa29F7BdC", - "creationCodeHash": "0x1ee42ee271cefe20c33c0de904501e618ac4b56debca67c634d0564cecea9ff2", - "runtimeCodeHash": "0x340e8f378c0117b300f3ec255bc5c3a273f9ab5bd2940fa8eb3b5065b21f86dc", - "txHash": "0x1aa753cd01fa4505c71f6866dae35faee723d181141ed91b6e5cf3082ee90f9b" - }, - "ServiceRegistry": { - "address": "0x07ECDD4278D83Cd2425cA86256634f666b659e53", - "initArgs": ["0x7f734E995010Aa8d28b912703093d532C37b6EAb"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x8a13420fdc91139297ab1497fbf5b443c156bbc7b9d2a1ac97fb9f23abde2723", - "proxy": true, - "implementation": { - "address": "0xd18D4B4e84eA4713E04060c93bD079A974BE6C4a", - "creationCodeHash": "0x50808e8cce93cf78a23c9e6dd7984356bd2bd93be30b358982909140dd61f6ff", - "runtimeCodeHash": "0xaef79c87f7e80107c0dc568cf1f8950459b5174ee3aa565ec487556a655e71db", - "txHash": "0x2d6043d89a5f5c4f3d0df0f50264ab7efebc898be0b5d358a00715ba9f657a89" - } - }, - "L2Curation": { - "address": "0x7080AAcC4ADF4b1E72615D6eb24CDdE40a04f6Ca", - "initArgs": [ - "0x7f734E995010Aa8d28b912703093d532C37b6EAb", - "0x71319060b9fdeD6174b6368bE04F9A1b7c9aCe48", - "0x2B757ad83e4ed51ecaE8D4dC9AdE8E3Fa29F7BdC", - "1000000", - "10000", - "1000000000000000000" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x2e5744fa4eca56cf6902e27fcc0509487f39bdb0d29b9eb0181db986235289a0", - "proxy": true, - "implementation": { - "address": "0xDA6c9d39b49c3d41CaC2030c6B75b40Efea09817", - "creationCodeHash": "0xa5fa77df71a72c5aadba812345978c291c5fa1a3a23129b6eba3a38ac85d8b5d", - "runtimeCodeHash": "0x1d265e9f658778b48a0247cfef79bfc9304d1faa1f1e085f2fea85629f68e2d5", - "txHash": "0x815eda87a2599d6f2c7458c7b164e7307d05018f0dd72073a50971d424313377" - } - }, - "SubgraphNFTDescriptor": { - "address": "0x30545f313bD2eb0F85E4f808Ae4D2C016efE78b2", - "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", - "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", - "txHash": "0x060839a09e89cbd47adbb8c04cc76b21a00785600a4e8b44939dd928391777e1" - }, - "SubgraphNFT": { - "address": "0x5571D8FE183AD1367dF21eE9968690f0Eabdc593", - "constructorArgs": ["0xEfc519BEd6a43a14f1BBBbA9e796C4931f7A5540"], - "creationCodeHash": "0xc1e58864302084de282dffe54c160e20dd96c6cfff45e00e6ebfc15e04136982", - "runtimeCodeHash": "0x7216e736a8a8754e88688fbf5c0c7e9caf35c55ecc3a0c5a597b951c56cf7458", - "txHash": "0xc11917ffedda6867648fa2cb62cca1df3c0ed485a0a0885284e93a2c5d33455c" - }, - "L2GNS": { - "address": "0x6bf9104e054537301cC23A1023Ca30A6Df79eB21", - "initArgs": [ - "0x7f734E995010Aa8d28b912703093d532C37b6EAb", - "0x71319060b9fdeD6174b6368bE04F9A1b7c9aCe48", - "0x5571D8FE183AD1367dF21eE9968690f0Eabdc593" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x3c2509730e06249d970818319bb507185d4fdea13d5600cef87928a718950c19", - "proxy": true, - "implementation": { - "address": "0x80A6500EFD52C66820dB0E8014088B4eBf8B8f52", - "creationCodeHash": "0xd2aa0d4e2d6ca8d0b2067d249d3202a340b13291a65e23c46f5c04df703bfc0e", - "runtimeCodeHash": "0xa88669e10cde56141250596f6f034629b1bf55086a3ed21ebb0e2bd3b3fca991", - "txHash": "0x3bb004adf949e9c896e85f6e3124ecea0c223470e3a091e42539613d52679c4d" - } - }, - "L2Staking": { - "address": "0xcd549d0C43d915aEB21d3a331dEaB9B7aF186D26", - "initArgs": [ - "0x7f734E995010Aa8d28b912703093d532C37b6EAb", - "100000000000000000000000", - "6646", - "10000", - "100000", - "2", - "4", - "12", - "16", - "77", - "100" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xc98ebdd0a80b97ef8f6305903ef6496a7781db76a5b1b3c3c3b2b10dbd9a7af5", - "proxy": true, - "implementation": { - "address": "0x75CeE6C9EE7c03Ba7cAd82E98FFB57672d7caeBc", - "creationCodeHash": "0x3fd633cabdb4545d667b8e188b5fe8b6326bfd4a8809908f77b7e447c46a22e8", - "runtimeCodeHash": "0x54ba28cc34f7e24b9e1a8e8595f9ecfe4bb7ad70c226444b7a9aa3d26589bbc7", - "txHash": "0x357ab1915642f845527a136aa654c0c18cb43dbb79d4fe297fdf8210fb30082e", - "libraries": { - "LibExponential": "0xdE74fcD55A1E3829EC4FE934f5776bC14bc99917" - } - } - }, - "RewardsManager": { - "address": "0x5F06ABd1CfAcF7AE99530D7Fed60E085f0B15e8D", - "initArgs": ["0x7f734E995010Aa8d28b912703093d532C37b6EAb"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xd4cfa95475e9e867fb24babd6a00a5b6b01d2267533e2412986aa1ff94d51c02", - "proxy": true, - "implementation": { - "address": "0x87f2fAb2C8c422AE0f866D004207fa65bdfD2df2", - "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", - "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", - "txHash": "0xac157ea27b57c36ae336768aef9cd8f74d39b13ff621cd18683db544804b5a3c" - } - }, - "DisputeManager": { - "address": "0x16DEF7E0108A5467A106dbD7537f8591f470342E", - "initArgs": [ - "0x7f734E995010Aa8d28b912703093d532C37b6EAb", - "0xF89688d5d44d73cc4dE880857A3940487076e5A4", - "10000000000000000000000", - "500000", - "25000", - "25000" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x70188c9243c2226ac793ac8c0a9eecd76c9b44e53f7f6f97fa177a34808421a0", - "proxy": true, - "implementation": { - "address": "0x39aEdA1d6ea3B62b76C7c439beBfFCb5369a175C", - "creationCodeHash": "0x2e77ad7a1627b6e04bece0fe18b3ab543ef4a2d6914f2e5e640b2c8175aca3a8", - "runtimeCodeHash": "0x0186afe711eff4ceea28620d091e3c6034fd15be05894119c74a38b020e3a554", - "txHash": "0x4efbd28e55866c0292309964f47bd805922ad417e5980e14e055ad693024582d" - } - }, - "AllocationExchange": { - "address": "0x61809D6Cde07f27D2fcDCb67a42d0Af1988Be5e8", - "constructorArgs": [ - "0x18C924BD5E8b83b47EFaDD632b7178E2Fd36073D", - "0xcd549d0C43d915aEB21d3a331dEaB9B7aF186D26", - "0x05F359b1319f1Ca9b799CB6386F31421c2c49dBA", - "0xD06f366678AE139a94b2AaC2913608De568F1D03" - ], - "creationCodeHash": "0x96c5b59557c161d80f1617775a7b9537a89b0ecf2258598b3a37724be91ae80a", - "runtimeCodeHash": "0xed3d9cce65ddfa8a237d4d7d294ffdb13a082e0adcda3bbd313029cfae1365f3", - "txHash": "0x1df63329a21dca69d20e03c076dd89c350970d35319eeefab028cebbc78d29dc" - }, - "L2GraphTokenGateway": { - "address": "0xef2757855d2802bA53733901F90C91645973f743", - "initArgs": ["0x7f734E995010Aa8d28b912703093d532C37b6EAb"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x47bde4e3ad0bc077897a3de65058c4b7dd710aa447ec25942f716321cbdc590d", - "proxy": true, - "implementation": { - "address": "0xc68cd0d2ca533232Fd86D6e48b907338B2E0a74A", - "creationCodeHash": "0xbd52455bd8b14bfc27af623388fe2f9e06ddd4c4be3fc06c51558a912de91770", - "runtimeCodeHash": "0x29e47f693053f978d6b2ac0a327319591bf5b5e8a6e6c0744b8afcc0250bf667", - "txHash": "0xf68a5e1e516ee9a646f19bbe4d58336fdfcf5fc859f84cdac5e68b00bcd3a09a" - } - }, - "IEthereumDIDRegistry": { - "address": "0x8FFfcD6a85D29E9C33517aaf60b16FE4548f517E" - }, - "StakingExtension": { - "address": "0x5c54fB391003bef3002A79C656a29F09C59E2795", - "creationCodeHash": "0xe23c59dbfb94b0cf7ef58f654b905977624ce57eaae2fce692edb28ca3f1b3ba", - "runtimeCodeHash": "0xca8ad20187bc87e0e04a15184f529787dd23a0095047d411e1b271617a951c49", - "txHash": "0x69eca0ff395bb348cc8d29bb1681afe24515f618bce9a093ad5a02140e15b867" - } - }, "421614": { "HorizonStaking": { "address": "0xFf2Ee30de92F276018642A59Fb7Be95b3F9088Af" @@ -1118,7 +106,10 @@ }, "L2GNS": { "address": "0x3133948342F35b8699d8F94aeE064AbB76eDe965", - "initArgs": ["0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", "0xF21Df5BbA7EB9b54D8F60C560aFb9bA63e6aED1A"], + "initArgs": [ + "0x9DB3ee191681f092607035d9BDA6e59FbEaCa695", + "0xF21Df5BbA7EB9b54D8F60C560aFb9bA63e6aED1A" + ], "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", "txHash": "0x137140783a99a3e9a60048d607124626ca87e2b972e8cc05efb41ac87c3cbcc4", @@ -1231,229 +222,5 @@ "runtimeCodeHash": "0x5f396ffd54b6cd6b3faded0f366c5d7e148cc54743926061be2dfd12a75391de", "txHash": "0x2cefbc169b8ae51c263d0298956d86a397b05f11f076b71c918551f63fe33784" } - }, - "11155111": { - "GraphProxyAdmin": { - "address": "0xe2011488ea6B02692Ee58717698aecDdfBf4756F", - "creationCodeHash": "0x68b304ac6bce7380d5e0f6b14a122f628bffebcc75f8205cb60f0baf578b79c3", - "runtimeCodeHash": "0x8d9ba87a745cf82ab407ebabe6c1490197084d320efb6c246d94bcc80e804417", - "txHash": "0x104f9104e7364f3605b1522c017aa8302344a689c059e58ad43c6cc6cd9f4e2a" - }, - "BancorFormula": { - "address": "0x56b9f17D3Ca520b229F56D13a988dFAE9924C91E", - "creationCodeHash": "0x7ae36017eddb326ddd79c7363781366121361d42fdb201cf57c57424eede46f4", - "runtimeCodeHash": "0xed6701e196ad93718e28c2a2a44d110d9e9906085bcfe4faf4f6604b08f0116c", - "txHash": "0xb32bbff4bdf106e1f02ea826c0c412d66e2e081acd43aaba5f75676c28f969a2" - }, - "Controller": { - "address": "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", - "creationCodeHash": "0x5bde9a87bc4e8dd24d41900f0a19321c1dc6d3373d51bba093b130bb5b80a677", - "runtimeCodeHash": "0x7f0479db1d60ecf6295d92ea2359ebdd223640795613558b0594680f5d4922c9", - "txHash": "0xe9ab682c6d6b68d5f99d5253c8a6201f9b9f352dac337579d8ddeff6d9738f50" - }, - "EpochManager": { - "address": "0x3C39036a76104D7c6D3eF13a21477C0fE23A3Aa2", - "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", "554"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xc44a6798882df720a50df98fa0daa3ad32641afc18cb054047a44bcbf5e54dae", - "proxy": true, - "implementation": { - "address": "0xA1af9300209cc60de6Ce39752d57F04AB7E29432", - "creationCodeHash": "0x9947bd0a1f46027123b8fb4aec8b11af540aea587eb79642475d57b4e347078f", - "runtimeCodeHash": "0xe45a27197726de0e3149014823794708edd432ee56ec8358554c0d2365674ca0", - "txHash": "0x5f8205a69175903cafb8d688578c01b2fbcdaf970102194994851af7d2ace4d8" - } - }, - "GraphToken": { - "address": "0xCA59cCeb39bE1808d7aA607153f4A5062daF3a83", - "constructorArgs": ["10000000000000000000000000000"], - "creationCodeHash": "0x9c50586e9e305b3a299f1cdf92ca9bb04fad5f43b5e0f7505054d79783fd8b69", - "runtimeCodeHash": "0xfe612acbb09bdb23fe60014e890054621fd34d74bf12bd94fb73351d474cd641", - "txHash": "0xe034493538c9604e629129ede83a4298ec9fd97d5c8b2e1be67c01877464effe" - }, - "GraphCurationToken": { - "address": "0xE04cE530c532538F1F63cA911849925425C2A1Aa", - "creationCodeHash": "0x1ee42ee271cefe20c33c0de904501e618ac4b56debca67c634d0564cecea9ff2", - "runtimeCodeHash": "0x340e8f378c0117b300f3ec255bc5c3a273f9ab5bd2940fa8eb3b5065b21f86dc", - "txHash": "0xe5684e296859ae9ef5662ef1a16d520e201253d51d8068ddb07c94aa17b1f217" - }, - "ServiceRegistry": { - "address": "0x0Ee47634c94E6606f67301b3A868319073CB0FC2", - "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xe60ff360c1a53a81aea3c26213a41c3335bd9e93928df504276e69911255bbb7", - "proxy": true, - "implementation": { - "address": "0xe4484C9c5F18482d4c2E2f3BB0639f092922D97a", - "creationCodeHash": "0xec9cb879003a06609541ad87efd4bc5dfc8ea60e4e77cfa5ae2cb5208742e7bc", - "runtimeCodeHash": "0x5161b534164413a88d851832f9c9d1dd1bca32fe2bbb62bb35d112c1dc8b69ab", - "txHash": "0x5dead3a8e67425b461bf0167bbe6a1e48232d1ce04d213c7e8ed173cff4019b8" - } - }, - "Curation": { - "address": "0x77A6e5F2f13218B33A97Aec56d591dB18D60FFb1", - "initArgs": [ - "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", - "0x56b9f17D3Ca520b229F56D13a988dFAE9924C91E", - "0xE04cE530c532538F1F63cA911849925425C2A1Aa", - "500000", - "10000", - "1000000000000000000" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x5cd28f416034ea0fe8dcf3fe31661128a7103678ce60f1385ff843cc7b3314f8", - "proxy": true, - "implementation": { - "address": "0x54C6639e45F9Eb5Ab55A370d4071e77e5f1b9FF6", - "creationCodeHash": "0x666b377dfbba2be2e9cda6f1a1297819aae39b6571935a9f65314435f1cbd943", - "runtimeCodeHash": "0xbca44d6f233be6574d7db9cf0d0db09697d9ad6f36e69d5d9e22ad7004e83c51", - "txHash": "0x92bb03a530c6a3d33974c783bc3560a3e3c68910a48c951029d052d4234c02bd" - } - }, - "SubgraphNFTDescriptor": { - "address": "0xC9b2011A082d75c01C5C3eEA132f29ebaD182BD5", - "creationCodeHash": "0xf16e8ff11d852eea165195ac9e0dfa00f98e48f6ce3c77c469c7df9bf195b651", - "runtimeCodeHash": "0x39583196f2bcb85789b6e64692d8c0aa56f001c46f0ca3d371abbba2c695860f", - "txHash": "0xd191fe32ca3538322628fcea353becca0eee1e4855c265552a54682e1c44541f" - }, - "SubgraphNFT": { - "address": "0x120005c38D2624Ef70185fEf3a051Dd57b27a491", - "constructorArgs": ["0x559081D91F5Ff43dfE51A07C216F8E6893805B35"], - "creationCodeHash": "0xc1e58864302084de282dffe54c160e20dd96c6cfff45e00e6ebfc15e04136982", - "runtimeCodeHash": "0x7216e736a8a8754e88688fbf5c0c7e9caf35c55ecc3a0c5a597b951c56cf7458", - "txHash": "0x67192875a3b846c1ff81e5fcaa5fde0f9948834bec3b11fef4d5bb2ab4226fa2" - }, - "L1GNS": { - "address": "0x5461D48556B94e7fdD8ED5A8f865Ba4F1A3b5454", - "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", "0x120005c38D2624Ef70185fEf3a051Dd57b27a491"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xf92078845db80bcb42a1cf8d8fe230a9e3c86cc6f66e15c8a81368e5fad42885", - "proxy": true, - "implementation": { - "address": "0x4Ac3832d773FE6B6dcC8EB6241B83212F1a55096", - "creationCodeHash": "0xad517d289662731ecf3e0341e1612dc51bd6b63993f78057e17e1f9654740879", - "runtimeCodeHash": "0x3143b8a44a2a8e6590a85580ddf69baf87012d8865fa20fac25bbdfda5d5648e", - "txHash": "0x999f9af5e1e25a4558a315ebe76e7808bf0afa99fc97694a01c73d0a1eef060a" - } - }, - "StakingExtension": { - "address": "0x3fF97b5bdC1D46B0bbD1a3166F232683470a0ce3", - "creationCodeHash": "0xe23c59dbfb94b0cf7ef58f654b905977624ce57eaae2fce692edb28ca3f1b3ba", - "runtimeCodeHash": "0xca8ad20187bc87e0e04a15184f529787dd23a0095047d411e1b271617a951c49", - "txHash": "0x060e4f03881b4e1cf03be197ec3533b43a1a550a74f8adbdaba829f867a761ae" - }, - "L1Staking": { - "address": "0x14e9B07Dc56A0B03ac8A58453B5cCCB289d6ec90", - "initArgs": [ - "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", - "100000000000000000000000", - "6646", - "10000", - "100000", - "4", - "12", - "16", - "100,100,60,100", - "0x3fF97b5bdC1D46B0bbD1a3166F232683470a0ce3" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xe766e786e2d2f1c0af821c785178915e98f4251832bf523540d0e4ff93212a6f", - "proxy": true, - "implementation": { - "address": "0x88aec82f14002a56014819f4e23a22eB32F528b1", - "creationCodeHash": "0x8244555e05aae22fb53a3c3f8717b83d26306748faccc9e9828d43ceaa4b9e67", - "runtimeCodeHash": "0x33ecbc61c2f077b9cc37d5f3d4f6863f576e31ffaa310630ec0a89dd9a8fa940", - "txHash": "0xa56f2052e6c761c12a24459949320e5c11c56219c00a78821505f35bd023c573", - "libraries": { - "LibExponential": "0xc63d7df28b01e6f20b17834B106948baEbF04441" - } - } - }, - "RewardsManager": { - "address": "0x175f483AfAB4Fc52A6E07F9e9d46C90eB95941b5", - "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x6b128afe0d58657c7df7ef6d86a997d3767b166afb671406999ccc69d6c72a61", - "proxy": true, - "implementation": { - "address": "0x3a7382e41d56f6085fcdE56546884ecfcCe8e949", - "creationCodeHash": "0x59c1680da2d19124daaf95fd66acc5eae68e6f46dfe2ff0b3ccb777daf9949b2", - "runtimeCodeHash": "0xe33080183ec49ab1ec8d78b80b90158f0f3ac6f2deedf6115a32a9d11d3e4d9b", - "txHash": "0x3666a68a84e1e2175e45862da197a122439c6f3d7c35f795914bd52fc0c1da3b" - } - }, - "DisputeManager": { - "address": "0x1Da0DF3435cde4199650D35690E3B0885dfc38B1", - "initArgs": [ - "0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C", - "0xd6ff9e98F0Fd99ccB658832F586e23F4D8Cb8Bad", - "10000000000000000000000", - "500000", - "25000", - "25000" - ], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xd19578ab4bc280cfc890cc2f9b29bc57a8153cc879bbd22ab4202197078286ab", - "proxy": true, - "implementation": { - "address": "0x38d343aBB283452a6855572F6343193A8799Ef7e", - "creationCodeHash": "0x9d7257851678e3a0bd8ef74c219c314de490ebe91e6263129a3030d841dfc74b", - "runtimeCodeHash": "0xe490c3ae892d23d6ebed61a6081d70045ee6618f5196f25c28e6d7d66f798fee", - "txHash": "0xe6a215fe9ed86e23b7fad7b40938500ba64292f5c17b771ace1b00d4d2cd8c25" - } - }, - "AllocationExchange": { - "address": "0xd49670f70f68F7dc62c8B287F6388d250C5487E2", - "constructorArgs": [ - "0xCA59cCeb39bE1808d7aA607153f4A5062daF3a83", - "0x14e9B07Dc56A0B03ac8A58453B5cCCB289d6ec90", - "0x4EBf30832eC2db76aE228D5d239083B59f530d1f", - "0x840daec5dF962D49cf2EFd789c4E40A7b7e0117D" - ], - "creationCodeHash": "0x2963baeedb2d0f5a95fa41f6c89e48e5bf177ca439379fc6becd54870d330ab0", - "runtimeCodeHash": "0x9463db858ad818a01e751412460a5c8e6b249dd92ec564a7d0ef9663eaad3e33", - "txHash": "0x760473d4ea2805869979650079788d553dc9fe8e871764ea1c994c194239bf3e" - }, - "L1GraphTokenGateway": { - "address": "0x549DCB0b510Ee7C8d6E8e346ab9aC75E22DD78B3", - "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0x098fb600073aa336154343c9f6f565e190e28792a357c69235b06fc86e2bc9fe", - "proxy": true, - "implementation": { - "address": "0xF1De736CcBb1a37591f7fCA4CA415932a4a8d632", - "creationCodeHash": "0xf21eb0fd5bf5a54dd522b653f6c1da315876355e1e90fedeb08b1fe94f1b54d9", - "runtimeCodeHash": "0xe2964bc67225afc1c732a4216824911ad847bbe8f2188c835e25c2b255c69685", - "txHash": "0xcadae13c0f824e387a3ae07f6929258d5540b3e909f231bba6aca7f70d0558be" - } - }, - "BridgeEscrow": { - "address": "0x428Ab6E9EeF41Dc5098a34a6993Cdd5Be5BA24a6", - "initArgs": ["0xf53B3910ecaeED1Aac4Bb5Ba9840d25E36e52b7C"], - "creationCodeHash": "0xcdd28bb3db05f1267ca0f5ea29536c61841be5937ce711b813924f8ff38918cc", - "runtimeCodeHash": "0x4ca8c37c807bdfda1d6dcf441324b7ea14c6ddec5db37c20c2bf05aeae49bc0d", - "txHash": "0xb4a922195600c6291cd485f1e98d0bb1f1c25673759015f512e16f53ab9e7665", - "proxy": true, - "implementation": { - "address": "0x4F1aBAa9ec53c2E5d4902Edd099C74B2d8a0aAdD", - "creationCodeHash": "0x27276d0e03aa52bfd4664ca5608cb3fac28fa42034c0d859d06dbc4174342192", - "runtimeCodeHash": "0x796b2cef94bab38e2cc4f82fef882d4c3441ef229329468d46fa72e1fd74be4a", - "txHash": "0xbadc145e826c54b4a4a0263701a29d6ecd11f8c6533c0d8e1cfe5422321d55f6" - } - }, - "EthereumDIDRegistry": { - "address": "0xDe57D27e530c99bDa15Fe231B8C632E4a37E7343", - "creationCodeHash": "0x20cd202f7991716a84c097da5fbd365fd27f7f35f241f82c529ad7aba18b814b", - "runtimeCodeHash": "0x5f396ffd54b6cd6b3faded0f366c5d7e148cc54743926061be2dfd12a75391de", - "txHash": "0x8f3c9ae70242ed54c51a8f22c8d97f3ebc34cd65ccc4cc87054637b47610cf3a" - } } } diff --git a/packages/subgraph-service/addresses.json b/packages/subgraph-service/addresses.json new file mode 100644 index 000000000..0fb2088ec --- /dev/null +++ b/packages/subgraph-service/addresses.json @@ -0,0 +1,34 @@ +{ + "421614": { + "SubgraphService": { + "address": "0x2268247782f4b7AdB2DA810EFD6e43B27a37af54" + }, + "DisputeManager": { + "address": "0x8e436E815226C8Bd5e775C7FF693DAe6a94bE7d1" + }, + "ServiceRegistry": { + "address": "0x888541878CbDDEd880Cd58c728f1Af5C47343F86", + "proxy": true, + "implementation": { + "address": "0x05E732280bf9F37054346Cb83f5Fd58C5B44F6A8" + } + }, + "L2Curation": { + "address": "0xDe761f075200E75485F4358978FB4d1dC8644FD5", + "proxy": true, + "implementation": { + "address": "0xd90022aB67920212D0F902F5c427DE82732DE136" + } + }, + "SubgraphNFT": { + "address": "0xF21Df5BbA7EB9b54D8F60C560aFb9bA63e6aED1A" + }, + "L2GNS": { + "address": "0x3133948342F35b8699d8F94aeE064AbB76eDe965", + "proxy": true, + "implementation": { + "address": "0x00CBF5024d454255577Bf2b0fB6A43328a6828c9" + } + } + } +} diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts index a1158bb8b..39f10d49b 100644 --- a/packages/subgraph-service/hardhat.config.ts +++ b/packages/subgraph-service/hardhat.config.ts @@ -5,6 +5,7 @@ import 'hardhat-contract-sizer' import 'hardhat-storage-layout' import 'hardhat-secure-accounts' import 'solidity-docgen' +import 'hardhat-graph-protocol' import { HardhatUserConfig } from 'hardhat/config' @@ -35,9 +36,16 @@ const config: HardhatUserConfig = { }, }, arbitrumSepolia: { + chainId: 421614, url: 'https://sepolia-rollup.arbitrum.io/rpc', }, }, + graph: { + deployments: { + horizon: require.resolve('@graphprotocol/horizon/addresses.json'), + subgraphService: 'addresses.json', + }, + }, } export default config diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index f9094be53..c3dba042c 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -4,6 +4,12 @@ "description": "", "author": "The Graph core devs", "license": "GPL-2.0-or-later", + "types": "typechain-types/index.ts", + "files": [ + "build/contracts/**/*", + "README.md", + "addresses.json" + ], "scripts": { "lint:ts": "eslint '**/*.{js,ts}' --fix", "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", @@ -38,6 +44,7 @@ "hardhat": "^2.20.1", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.8", + "hardhat-graph-protocol": "workspace:^0.0.1", "hardhat-secure-accounts": "^1.0.4", "hardhat-storage-layout": "^0.1.7", "lint-staged": "^15.2.2", diff --git a/packages/subgraph-service/tsconfig.json b/packages/subgraph-service/tsconfig.json index 8de96f814..06c7ed638 100644 --- a/packages/subgraph-service/tsconfig.json +++ b/packages/subgraph-service/tsconfig.json @@ -10,6 +10,7 @@ }, "include": [ "hardhat.config.ts", + "types/**/*.ts", "scripts/**/*.ts", "test/**/*.ts", "ignition/**/*.ts", diff --git a/packages/subgraph-service/types/hardhat-graph-protocol.d.ts b/packages/subgraph-service/types/hardhat-graph-protocol.d.ts new file mode 100644 index 000000000..ab3c30b4b --- /dev/null +++ b/packages/subgraph-service/types/hardhat-graph-protocol.d.ts @@ -0,0 +1,45 @@ +// TypeScript does not resolve correctly the type extensions when they are symlinked from the same monorepo. +// So we need to re-type it... this file should be a copy of hardhat-graph-protocol/src/type-extensions.ts +import 'hardhat/types/config' +import 'hardhat/types/runtime' +import type { GraphDeployments, GraphRuntimeEnvironment, GraphRuntimeEnvironmentOptions } from 'hardhat-graph-protocol/src/types' + +declare module 'hardhat/types/runtime' { + interface HardhatRuntimeEnvironment { + graph: (opts?: GraphRuntimeEnvironmentOptions) => GraphRuntimeEnvironment + } +} + +declare module 'hardhat/types/config' { + interface HardhatConfig { + graph: GraphRuntimeEnvironmentOptions + } + + interface HardhatUserConfig { + graph: GraphRuntimeEnvironmentOptions + } + + interface HardhatNetworkConfig { + deployments?: GraphDeployments + } + + interface HardhatNetworkUserConfig { + deployments?: GraphDeployments + } + + interface HttpNetworkConfig { + deployments?: GraphDeployments + } + + interface HttpNetworkUserConfig { + deployments?: GraphDeployments + } + + interface ProjectPathsConfig { + graph?: string + } + + interface ProjectPathsUserConfig { + graph?: string + } +} diff --git a/yarn.lock b/yarn.lock index ce5384ed2..8abf407bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3019,7 +3019,7 @@ __metadata: languageName: unknown linkType: soft -"@graphprotocol/subgraph-service@workspace:packages/subgraph-service": +"@graphprotocol/subgraph-service@workspace:^0.0.1, @graphprotocol/subgraph-service@workspace:packages/subgraph-service": version: 0.0.0-use.local resolution: "@graphprotocol/subgraph-service@workspace:packages/subgraph-service" dependencies: @@ -3048,6 +3048,7 @@ __metadata: hardhat: "npm:^2.20.1" hardhat-contract-sizer: "npm:^2.10.0" hardhat-gas-reporter: "npm:^1.0.8" + hardhat-graph-protocol: "workspace:^0.0.1" hardhat-secure-accounts: "npm:^1.0.4" hardhat-storage-layout: "npm:^0.1.7" lint-staged: "npm:^15.2.2" @@ -14380,6 +14381,7 @@ __metadata: dependencies: "@graphprotocol/contracts": "workspace:^7.0.0" "@graphprotocol/horizon": "workspace:^0.0.1" + "@graphprotocol/subgraph-service": "workspace:^0.0.1" "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" "@types/chai": "npm:^4.0.0" "@types/debug": "npm:^4.1.12" From 4fa4f571be0687f9ee3e06111cadf3d9a8d4bcb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 25 Nov 2024 13:58:40 -0300 Subject: [PATCH 291/343] chore: hardcode ignition config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/scripts/deploy.ts | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/horizon/scripts/deploy.ts b/packages/horizon/scripts/deploy.ts index 386b93803..ee86723c1 100644 --- a/packages/horizon/scripts/deploy.ts +++ b/packages/horizon/scripts/deploy.ts @@ -5,10 +5,32 @@ import { ignition } from 'hardhat' import HorizonModule from '../ignition/modules/horizon' async function main() { - const HorizonConfig = removeNFromBigInts(require('../ignition/configs/horizon.hardhat.json5')) + // const HorizonConfig = removeNFromBigInts(require('../ignition/configs/horizon.hardhat.json5')) // Deploy Horizon await ignition.deploy(HorizonModule, { - parameters: HorizonConfig, + parameters: { + $global: { + governor: '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0', + pauseGuardian: '0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC', + subgraphAvailabilityOracle: '0xd03ea8624C8C5987235048901fB614fDcA89b117', + subgraphServiceAddress: '0x0000000000000000000000000000000000000000', + }, + RewardsManager: { issuancePerBlock: '114155251141552511415' }, + EpochManager: { epochLength: 60 }, + Curation: { curationTaxPercentage: 10000, minimumCurationDeposit: 1 }, + GraphToken: { initialSupply: '10000000000000000000000000000' }, + HorizonStaking: { maxThawingPeriod: 2419200 }, + GraphPayments: { protocolPaymentCut: 10000 }, + PaymentsEscrow: { + revokeCollectorThawingPeriod: 10000, + withdrawEscrowThawingPeriod: 10000, + }, + TAPCollector: { + eip712Name: 'TAPCollector', + eip712Version: '1', + revokeSignerThawingPeriod: 10000, + }, + }, }) } main().catch((error) => { From e5dc7975f533c3994762054160d35220b1a8e32a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 26 Nov 2024 10:15:55 -0300 Subject: [PATCH 292/343] fix: update all ignition packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/package.json | 4 +-- packages/horizon/scripts/deploy.ts | 27 +++---------------- packages/subgraph-service/package.json | 4 +-- yarn.lock | 37 +++++++------------------- 4 files changed, 17 insertions(+), 55 deletions(-) diff --git a/packages/horizon/package.json b/packages/horizon/package.json index f338314ac..4b594485f 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -18,11 +18,11 @@ "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-foundry": "^1.1.1", "@nomicfoundation/hardhat-ignition": "^0.15.8", - "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.8", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", "@nomicfoundation/hardhat-verify": "^2.0.10", - "@nomicfoundation/ignition-core": "^0.15.5", + "@nomicfoundation/ignition-core": "^0.15.8", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", "@typechain/ethers-v6": "^0.5.0", diff --git a/packages/horizon/scripts/deploy.ts b/packages/horizon/scripts/deploy.ts index ee86723c1..4af1f769e 100644 --- a/packages/horizon/scripts/deploy.ts +++ b/packages/horizon/scripts/deploy.ts @@ -5,32 +5,11 @@ import { ignition } from 'hardhat' import HorizonModule from '../ignition/modules/horizon' async function main() { - // const HorizonConfig = removeNFromBigInts(require('../ignition/configs/horizon.hardhat.json5')) + const HorizonConfig = removeNFromBigInts(require('../ignition/configs/horizon.hardhat.json5')) + // Deploy Horizon await ignition.deploy(HorizonModule, { - parameters: { - $global: { - governor: '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0', - pauseGuardian: '0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC', - subgraphAvailabilityOracle: '0xd03ea8624C8C5987235048901fB614fDcA89b117', - subgraphServiceAddress: '0x0000000000000000000000000000000000000000', - }, - RewardsManager: { issuancePerBlock: '114155251141552511415' }, - EpochManager: { epochLength: 60 }, - Curation: { curationTaxPercentage: 10000, minimumCurationDeposit: 1 }, - GraphToken: { initialSupply: '10000000000000000000000000000' }, - HorizonStaking: { maxThawingPeriod: 2419200 }, - GraphPayments: { protocolPaymentCut: 10000 }, - PaymentsEscrow: { - revokeCollectorThawingPeriod: 10000, - withdrawEscrowThawingPeriod: 10000, - }, - TAPCollector: { - eip712Name: 'TAPCollector', - eip712Version: '1', - revokeSignerThawingPeriod: 10000, - }, - }, + parameters: HorizonConfig, }) } main().catch((error) => { diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 4af0ff39a..66650c097 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -19,11 +19,11 @@ "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-foundry": "^1.1.1", "@nomicfoundation/hardhat-ignition": "^0.15.8", - "@nomicfoundation/hardhat-ignition-ethers": "^0.15.5", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.8", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", "@nomicfoundation/hardhat-verify": "^2.0.10", - "@nomicfoundation/ignition-core": "^0.15.5", + "@nomicfoundation/ignition-core": "^0.15.8", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", "@typechain/ethers-v6": "^0.5.0", diff --git a/yarn.lock b/yarn.lock index 18e4f4528..24b71d711 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2934,11 +2934,11 @@ __metadata: "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" "@nomicfoundation/hardhat-ignition": "npm:^0.15.8" - "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.5" + "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.8" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" "@nomicfoundation/hardhat-verify": "npm:^2.0.10" - "@nomicfoundation/ignition-core": "npm:^0.15.5" + "@nomicfoundation/ignition-core": "npm:^0.15.8" "@openzeppelin/contracts": "npm:^5.0.2" "@openzeppelin/contracts-upgradeable": "npm:^5.0.2" "@typechain/ethers-v6": "npm:^0.5.0" @@ -3027,11 +3027,11 @@ __metadata: "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" "@nomicfoundation/hardhat-foundry": "npm:^1.1.1" "@nomicfoundation/hardhat-ignition": "npm:^0.15.8" - "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.5" + "@nomicfoundation/hardhat-ignition-ethers": "npm:^0.15.8" "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" "@nomicfoundation/hardhat-toolbox": "npm:^4.0.0" "@nomicfoundation/hardhat-verify": "npm:^2.0.10" - "@nomicfoundation/ignition-core": "npm:^0.15.5" + "@nomicfoundation/ignition-core": "npm:^0.15.8" "@openzeppelin/contracts": "npm:^5.0.2" "@openzeppelin/contracts-upgradeable": "npm:^5.0.2" "@typechain/ethers-v6": "npm:^0.5.0" @@ -4678,16 +4678,16 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/hardhat-ignition-ethers@npm:^0.15.5": - version: 0.15.5 - resolution: "@nomicfoundation/hardhat-ignition-ethers@npm:0.15.5" +"@nomicfoundation/hardhat-ignition-ethers@npm:^0.15.8": + version: 0.15.8 + resolution: "@nomicfoundation/hardhat-ignition-ethers@npm:0.15.8" peerDependencies: "@nomicfoundation/hardhat-ethers": ^3.0.4 - "@nomicfoundation/hardhat-ignition": ^0.15.5 - "@nomicfoundation/ignition-core": ^0.15.5 + "@nomicfoundation/hardhat-ignition": ^0.15.8 + "@nomicfoundation/ignition-core": ^0.15.8 ethers: ^6.7.0 hardhat: ^2.18.0 - checksum: 19f0e029a580dd4d27048f1e87f8111532684cf7f0a2b5c8d6ae8d811ff489629305e3a616cb89702421142c7c628f1efa389781414de1279689018c463cce60 + checksum: 480825fa20d24031b330f96ff667137b8fdb67db0efea8cb3ccd5919c3f93e2c567de6956278e36c399311fd61beef20fae6e7700f52beaa813002cbee482efa languageName: node linkType: hard @@ -4764,23 +4764,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ignition-core@npm:^0.15.5": - version: 0.15.5 - resolution: "@nomicfoundation/ignition-core@npm:0.15.5" - dependencies: - "@ethersproject/address": "npm:5.6.1" - "@nomicfoundation/solidity-analyzer": "npm:^0.1.1" - cbor: "npm:^9.0.0" - debug: "npm:^4.3.2" - ethers: "npm:^6.7.0" - fs-extra: "npm:^10.0.0" - immer: "npm:10.0.2" - lodash: "npm:4.17.21" - ndjson: "npm:2.0.0" - checksum: ff14724d8e992dc54291da6e6a864f6b3db268b6725d0af6ecbf3f81ed65f6824441421b23129d118cd772efc8ab0275d1decf203019cb3049a48b37f9c15432 - languageName: node - linkType: hard - "@nomicfoundation/ignition-core@npm:^0.15.8": version: 0.15.8 resolution: "@nomicfoundation/ignition-core@npm:0.15.8" From 1ce1a1725b02fe3337768b12f90b3b0036a8cf40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 26 Nov 2024 11:50:27 -0300 Subject: [PATCH 293/343] ci: fix circular dependency in build stage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- package.json | 2 +- packages/hardhat-graph-protocol/package.json | 1 + packages/horizon/hardhat.config.ts | 5 ++- packages/horizon/package.json | 4 +-- packages/subgraph-service/hardhat.config.ts | 5 ++- packages/subgraph-service/package.json | 4 +-- scripts/build | 32 ++++++++++++++++++++ 7 files changed, 46 insertions(+), 7 deletions(-) create mode 100755 scripts/build diff --git a/package.json b/package.json index eb94a1de7..d1e0f60d8 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "postinstall": "husky install", "clean": "yarn workspaces foreach --all --parallel --verbose run clean", "clean:all": "yarn clean && rm -rf node_modules packages/*/node_modules", - "build": "yarn workspaces foreach --all --verbose run build", + "build": "chmod +x ./scripts/build && ./scripts/build", "lint": "yarn workspaces foreach --all --parallel --verbose run lint", "test": "yarn workspaces foreach --all --parallel --verbose --interlaced run test" }, diff --git a/packages/hardhat-graph-protocol/package.json b/packages/hardhat-graph-protocol/package.json index f5752731e..b71d8620b 100644 --- a/packages/hardhat-graph-protocol/package.json +++ b/packages/hardhat-graph-protocol/package.json @@ -17,6 +17,7 @@ "types": "dist/src/index.d.ts", "scripts": { "build": "tsc", + "clean": "rm -rf dist", "lint": "eslint '**/*.{js,ts}' --fix", "test": "mocha --exit --recursive 'test/**/*.test.ts'", "prepublishOnly": "npm run build" diff --git a/packages/horizon/hardhat.config.ts b/packages/horizon/hardhat.config.ts index dca9b466a..41c92d1b9 100644 --- a/packages/horizon/hardhat.config.ts +++ b/packages/horizon/hardhat.config.ts @@ -4,10 +4,13 @@ import '@nomicfoundation/hardhat-ignition-ethers' import 'hardhat-storage-layout' import 'hardhat-contract-sizer' import 'hardhat-secure-accounts' -import 'hardhat-graph-protocol' import type { HardhatUserConfig } from 'hardhat/config' +if (process.env.BUILD_RUN !== 'true') { + require('hardhat-graph-protocol') +} + const config: HardhatUserConfig = { solidity: { version: '0.8.27', diff --git a/packages/horizon/package.json b/packages/horizon/package.json index e2363022a..dddb07b13 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -14,8 +14,8 @@ "lint:ts": "eslint '**/*.{js,ts}' --fix", "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", - "clean": "rm -rf build cache typechain-types", - "build": "forge build && hardhat compile", + "clean": "rm -rf build dist cache cache_forge typechain-types", + "build": "forge build --skip test && SKIP_LOAD=true hardhat compile", "test": "forge test && hardhat test" }, "devDependencies": { diff --git a/packages/subgraph-service/hardhat.config.ts b/packages/subgraph-service/hardhat.config.ts index 39f10d49b..4db905141 100644 --- a/packages/subgraph-service/hardhat.config.ts +++ b/packages/subgraph-service/hardhat.config.ts @@ -5,10 +5,13 @@ import 'hardhat-contract-sizer' import 'hardhat-storage-layout' import 'hardhat-secure-accounts' import 'solidity-docgen' -import 'hardhat-graph-protocol' import { HardhatUserConfig } from 'hardhat/config' +if (process.env.BUILD_RUN !== 'true') { + require('hardhat-graph-protocol') +} + const config: HardhatUserConfig = { solidity: { version: '0.8.27', diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index c3dba042c..7b3458117 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -14,8 +14,8 @@ "lint:ts": "eslint '**/*.{js,ts}' --fix", "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", - "clean": "rm -rf build cache typechain-types", - "build": "forge build && hardhat compile", + "clean": "rm -rf build dist cache cache_forge typechain-types", + "build": "forge build --skip test && SKIP_LOAD=true hardhat compile", "test": "forge test && hardhat test" }, "devDependencies": { diff --git a/scripts/build b/scripts/build new file mode 100755 index 000000000..c8331ab9a --- /dev/null +++ b/scripts/build @@ -0,0 +1,32 @@ +#!/bin/bash + +# List of packages to build - order matters! +packages=( + "packages/eslint-graph-config" + # "packages/solhint-graph-config" -- disabled since it doesn't have a build script + # "packages/solhint-plugin-graph" -- disabled since it doesn't have a build script + "packages/contracts" + "packages/horizon" + "packages/subgraph-service" + "packages/hardhat-graph-protocol" + "packages/data-edge" + "packages/sdk" + "packages/token-distribution" +) + +for package in "${packages[@]}"; do + echo -e "\n\n==== Building $package..." + + cd "$package" || { echo "Failed to navigate to $package"; exit 1; } + + if BUILD_RUN=true yarn build; then + echo "Successfully built $package" + else + echo "Build failed for $package" >&2 + exit 1 + fi + + cd - > /dev/null +done + +echo "All packages built successfully!" From 5026fbb7e9064d40b7fcba8707172f8922dd1541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 26 Nov 2024 11:57:22 -0300 Subject: [PATCH 294/343] fix: build scripts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/package.json | 2 +- packages/subgraph-service/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/horizon/package.json b/packages/horizon/package.json index dddb07b13..99966ddb1 100644 --- a/packages/horizon/package.json +++ b/packages/horizon/package.json @@ -15,7 +15,7 @@ "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build dist cache cache_forge typechain-types", - "build": "forge build --skip test && SKIP_LOAD=true hardhat compile", + "build": "forge build --skip test && BUILD_RUN=true hardhat compile", "test": "forge test && hardhat test" }, "devDependencies": { diff --git a/packages/subgraph-service/package.json b/packages/subgraph-service/package.json index 7b3458117..9fcee897d 100644 --- a/packages/subgraph-service/package.json +++ b/packages/subgraph-service/package.json @@ -15,7 +15,7 @@ "lint:sol": "prettier --write contracts/**/*.sol && solhint --noPrompt --fix contracts/**/*.sol --config node_modules/solhint-graph-config/index.js", "lint": "yarn lint:ts && yarn lint:sol", "clean": "rm -rf build dist cache cache_forge typechain-types", - "build": "forge build --skip test && SKIP_LOAD=true hardhat compile", + "build": "forge build --skip test && BUILD_RUN=true hardhat compile", "test": "forge test && hardhat test" }, "devDependencies": { From 8f3e0f1a5869f0baab15c6723cafa11e4122e199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 26 Nov 2024 12:33:07 -0300 Subject: [PATCH 295/343] fix: build steps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .github/workflows/ci-horizon.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-horizon.yml b/.github/workflows/ci-horizon.yml index 159ca7b4d..056e692bb 100644 --- a/.github/workflows/ci-horizon.yml +++ b/.github/workflows/ci-horizon.yml @@ -24,10 +24,26 @@ jobs: submodules: recursive - name: Set up environment uses: ./.github/actions/setup - - name: Build + - name: Build contracts + run: | + pushd packages/contracts + yarn build + popd + - name: Build horizon run: | pushd packages/horizon yarn build + popd + - name: Build subgraph service + run: | + pushd packages/subgraph-service + yarn build + popd + - name: Build hardhat-graph-protocol + run: | + pushd packages/hardhat-graph-protocol + yarn build + popd - name: Run tests run: | pushd packages/horizon From c8efe89b533f47c892d23ea923912111254f7853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 26 Nov 2024 16:18:12 -0300 Subject: [PATCH 296/343] fix: prevent payers from being able to bypass escrow mechanism (TRST-H01) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/ITAPCollector.sol | 6 + .../payments/collectors/TAPCollector.sol | 10 ++ .../tap-collector/collect/collect.t.sol | 141 ++++++++++++++---- 3 files changed, 130 insertions(+), 27 deletions(-) diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index dd557de53..d04f142d6 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -137,6 +137,12 @@ interface ITAPCollector is IPaymentsCollector { */ error TAPCollectorInvalidRAVSigner(); + /** + * Thrown when the RAV is for a data service the service provider has no provision for + * @param dataService The address of the data service + */ + error TAPCollectorUnauthorizedDataService(address dataService); + /** * Thrown when the caller is not the data service the RAV was issued to * @param caller The address of the caller diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 57588a042..40a375349 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -118,6 +118,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { * @notice Initiate a payment collection through the payments protocol * See {IGraphPayments.collect}. * @dev Caller must be the data service the RAV was issued to. + * @dev Service provider must have an active provision with the data service to collect payments * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. */ function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external override returns (uint256) { @@ -130,6 +131,15 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { address signer = _recoverRAVSigner(signedRAV); require(authorizedSigners[signer].payer != address(0), TAPCollectorInvalidRAVSigner()); + // Check the service provider has an active provision with the data service + // This prevents an attack where the payer can deny the service provider from collecting payments + // by using a signer as data service to syphon off the tokens in the escrow to an account they control + uint256 tokensAvailable = _graphStaking().getProviderTokensAvailable( + signedRAV.rav.serviceProvider, + signedRAV.rav.dataService + ); + require(tokensAvailable > 0, TAPCollectorUnauthorizedDataService(signedRAV.rav.dataService)); + return _collect(paymentType, authorizedSigners[signer].payer, signedRAV, dataServiceCut); } diff --git a/packages/horizon/test/payments/tap-collector/collect/collect.t.sol b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol index 06b0e027a..555c9c50e 100644 --- a/packages/horizon/test/payments/tap-collector/collect/collect.t.sol +++ b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol @@ -9,10 +9,9 @@ import { IGraphPayments } from "../../../../contracts/interfaces/IGraphPayments. import { TAPCollectorTest } from "../TAPCollector.t.sol"; contract TAPCollectorCollectTest is TAPCollectorTest { - /* - * HELPERS - */ + * HELPERS + */ function _getQueryFeeEncodedData( uint256 _signerPrivateKey, @@ -47,22 +46,27 @@ contract TAPCollectorCollectTest is TAPCollectorTest { * TESTS */ - function testTAPCollector_Collect(uint256 tokens) public useGateway useSigner { + function testTAPCollector_Collect( + uint256 tokens + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - + _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); - + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); resetPrank(users.verifier); _collect(IGraphPayments.PaymentTypes.QueryFee, data); } - function testTAPCollector_Collect_Multiple(uint256 tokens, uint8 steps) public useGateway useSigner { + function testTAPCollector_Collect_Multiple( + uint256 tokens, + uint8 steps + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { steps = uint8(bound(steps, 1, 100)); tokens = bound(tokens, steps, type(uint128).max); - + _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); @@ -70,15 +74,94 @@ contract TAPCollectorCollectTest is TAPCollectorTest { uint256 payed = 0; uint256 tokensPerStep = tokens / steps; for (uint256 i = 0; i < steps; i++) { - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(payed + tokensPerStep)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.indexer, + users.verifier, + uint128(payed + tokensPerStep) + ); _collect(IGraphPayments.PaymentTypes.QueryFee, data); payed += tokensPerStep; } } + function testTAPCollector_Collect_RevertWhen_NoProvision(uint256 tokens) public useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorUnauthorizedDataService.selector, + users.verifier + ); + vm.expectRevert(expectedError); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testTAPCollector_Collect_RevertWhen_ProvisionEmpty( + uint256 tokens + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { + // thaw tokens from the provision + resetPrank(users.indexer); + staking.thaw(users.indexer, users.verifier, 100); + + tokens = bound(tokens, 1, type(uint128).max); + + resetPrank(users.gateway); + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + + resetPrank(users.verifier); + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorUnauthorizedDataService.selector, + users.verifier + ); + vm.expectRevert(expectedError); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + + function testTAPCollector_Collect_PreventSignerAttack( + uint256 tokens + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + + resetPrank(users.gateway); + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + // The sender authorizes another signer + (address anotherSigner, uint256 anotherSignerPrivateKey) = makeAddrAndKey("anotherSigner"); + uint256 proofDeadline = block.timestamp + 1; + bytes memory anotherSignerProof = _getSignerProof(proofDeadline, anotherSignerPrivateKey); + _authorizeSigner(anotherSigner, proofDeadline, anotherSignerProof); + + // And crafts a RAV using the new signer as the data service + bytes memory data = _getQueryFeeEncodedData( + anotherSignerPrivateKey, + users.indexer, + anotherSigner, + uint128(tokens) + ); + + // the call should revert because the service provider has no provision with the "data service" + resetPrank(anotherSigner); + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorUnauthorizedDataService.selector, + anotherSigner + ); + vm.expectRevert(expectedError); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + function testTAPCollector_Collect_RevertWhen_CallerNotDataService(uint256 tokens) public useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - + resetPrank(users.gateway); _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); @@ -95,9 +178,11 @@ contract TAPCollectorCollectTest is TAPCollectorTest { tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); } - function testTAPCollector_Collect_RevertWhen_InconsistentRAVTokens(uint256 tokens) public useGateway useSigner { + function testTAPCollector_Collect_RevertWhen_InconsistentRAVTokens( + uint256 tokens + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - + _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); @@ -106,20 +191,18 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _collect(IGraphPayments.PaymentTypes.QueryFee, data); // Attempt to collect again - vm.expectRevert(abi.encodeWithSelector( - ITAPCollector.TAPCollectorInconsistentRAVTokens.selector, - tokens, - tokens - )); + vm.expectRevert( + abi.encodeWithSelector(ITAPCollector.TAPCollectorInconsistentRAVTokens.selector, tokens, tokens) + ); tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); } function testTAPCollector_Collect_RevertWhen_SignerNotAuthorized(uint256 tokens) public useGateway { tokens = bound(tokens, 1, type(uint128).max); - + _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); - + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); resetPrank(users.verifier); @@ -127,16 +210,18 @@ contract TAPCollectorCollectTest is TAPCollectorTest { tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); } - function testTAPCollector_Collect_ThawingSigner(uint256 tokens) public useGateway useSigner { + function testTAPCollector_Collect_ThawingSigner( + uint256 tokens + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - + _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); // Start thawing signer _thawSigner(signer); skip(revokeSignerThawingPeriod + 1); - + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); resetPrank(users.verifier); @@ -145,7 +230,7 @@ contract TAPCollectorCollectTest is TAPCollectorTest { function testTAPCollector_Collect_RevertIf_SignerWasRevoked(uint256 tokens) public useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - + _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); @@ -153,7 +238,7 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _thawSigner(signer); skip(revokeSignerThawingPeriod + 1); _revokeAuthorizedSigner(signer); - + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); resetPrank(users.verifier); @@ -161,9 +246,11 @@ contract TAPCollectorCollectTest is TAPCollectorTest { tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); } - function testTAPCollector_Collect_ThawingSignerCanceled(uint256 tokens) public useGateway useSigner { + function testTAPCollector_Collect_ThawingSignerCanceled( + uint256 tokens + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - + _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); @@ -171,7 +258,7 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _thawSigner(signer); skip(revokeSignerThawingPeriod + 1); _cancelThawSigner(signer); - + bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); resetPrank(users.verifier); From ce749be7f8d08c3ba9908a3a8f7675f5184dae0b Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 28 Nov 2024 14:47:11 -0300 Subject: [PATCH 297/343] fix: separate delegation and provision thaw request lists (TRST-H02) --- .../internal/IHorizonStakingBase.sol | 16 +- .../internal/IHorizonStakingTypes.sol | 32 ++++ .../contracts/staking/HorizonStaking.sol | 174 +++++++++++------- .../contracts/staking/HorizonStakingBase.sol | 96 +++++++++- .../staking/HorizonStakingStorage.sol | 13 +- .../HorizonStakingShared.t.sol | 114 +++++++++--- .../test/staking/delegation/withdraw.t.sol | 16 +- 7 files changed, 353 insertions(+), 108 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index e221dc2cf..32e476298 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -134,21 +134,27 @@ interface IHorizonStakingBase { /** * @notice Gets a thaw request. + * @param thawRequestType The type of thaw request. * @param thawRequestId The id of the thaw request. * @return The thaw request details. */ - function getThawRequest(bytes32 thawRequestId) external view returns (IHorizonStakingTypes.ThawRequest memory); + function getThawRequest( + IHorizonStakingTypes.ThawRequestType thawRequestType, + bytes32 thawRequestId + ) external view returns (IHorizonStakingTypes.ThawRequest memory); /** * @notice Gets the metadata of a thaw request list. * Service provider and delegators each have their own thaw request list per provision. * Metadata includes the head and tail of the list, plus the total number of thaw requests. + * @param thawRequestType The type of thaw request. * @param serviceProvider The address of the service provider. * @param verifier The address of the verifier. * @param owner The owner of the thaw requests. Use either the service provider or delegator address. * @return The thaw requests list metadata. */ function getThawRequestList( + IHorizonStakingTypes.ThawRequestType thawRequestType, address serviceProvider, address verifier, address owner @@ -156,12 +162,18 @@ interface IHorizonStakingBase { /** * @notice Gets the amount of thawed tokens for a given provision. + * @param thawRequestType The type of thaw request. * @param serviceProvider The address of the service provider. * @param verifier The address of the verifier. * @param owner The owner of the thaw requests. Use either the service provider or delegator address. * @return The amount of thawed tokens. */ - function getThawedTokens(address serviceProvider, address verifier, address owner) external view returns (uint256); + function getThawedTokens( + IHorizonStakingTypes.ThawRequestType thawRequestType, + address serviceProvider, + address verifier, + address owner + ) external view returns (uint256); /** * @notice Gets the maximum allowed thawing period for a provision. diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index 0dfc6c774..8aff1a6e0 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -131,6 +131,16 @@ interface IHorizonStakingTypes { uint256 __DEPRECATED_tokensLockedUntil; } + /** + * @dev Enum to specify the type of thaw request. + * @param Provision Represents a thaw request for a provision. + * @param Delegation Represents a thaw request for a delegation. + */ + enum ThawRequestType { + Provision, + Delegation + } + /** * @notice Details of a stake thawing operation. * @dev ThawRequests are stored in linked lists by service provider/delegator, @@ -146,4 +156,26 @@ interface IHorizonStakingTypes { // Used to invalidate unfulfilled thaw requests uint256 thawingNonce; } + + /** + * @notice Parameters to fulfill thaw requests. + * @param requestType The type of thaw request (Provision or Delegation) + * @param serviceProvider The address of the service provider + * @param verifier The address of the verifier + * @param owner The address of the owner of the thaw request + * @param tokensThawing The current amount of tokens already thawing + * @param sharesThawing The current amount of shares already thawing + * @param nThawRequests The number of thaw requests to fulfill. If set to 0, all thaw requests are fulfilled. + * @param thawingNonce The current valid thawing nonce. Any thaw request with a different nonce is invalid and should be ignored. + */ + struct FulfillThawRequestsParams { + ThawRequestType requestType; + address serviceProvider; + address verifier; + address owner; + uint256 tokensThawing; + uint256 sharesThawing; + uint256 nThawRequests; + uint256 thawingNonce; + } } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 8df8f20f6..4ad8136c4 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -741,6 +741,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { prov.tokensThawing = prov.tokensThawing + _tokens; bytes32 thawRequestId = _createThawRequest( + ThawRequestType.Provision, _serviceProvider, _verifier, _serviceProvider, @@ -765,15 +766,18 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokensThawed_ = 0; uint256 sharesThawing = prov.sharesThawing; uint256 tokensThawing = prov.tokensThawing; - (tokensThawed_, tokensThawing, sharesThawing) = _fulfillThawRequests( - _serviceProvider, - _verifier, - _serviceProvider, - tokensThawing, - sharesThawing, - _nThawRequests, - prov.thawingNonce - ); + + FulfillThawRequestsParams memory params = FulfillThawRequestsParams({ + requestType: ThawRequestType.Provision, + serviceProvider: _serviceProvider, + verifier: _verifier, + owner: _serviceProvider, + tokensThawing: tokensThawing, + sharesThawing: sharesThawing, + nThawRequests: _nThawRequests, + thawingNonce: prov.thawingNonce + }); + (tokensThawed_, tokensThawing, sharesThawing) = _fulfillThawRequests(params); prov.tokens = prov.tokens - tokensThawed_; prov.sharesThawing = sharesThawing; @@ -860,6 +864,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { delegation.shares = delegation.shares - _shares; bytes32 thawRequestId = _createThawRequest( + ThawRequestType.Delegation, _serviceProvider, _verifier, _beneficiary, @@ -894,15 +899,18 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokensThawed = 0; uint256 sharesThawing = pool.sharesThawing; uint256 tokensThawing = pool.tokensThawing; - (tokensThawed, tokensThawing, sharesThawing) = _fulfillThawRequests( - _serviceProvider, - _verifier, - msg.sender, - tokensThawing, - sharesThawing, - _nThawRequests, - pool.thawingNonce - ); + + FulfillThawRequestsParams memory params = FulfillThawRequestsParams({ + requestType: ThawRequestType.Delegation, + serviceProvider: _serviceProvider, + verifier: _verifier, + owner: msg.sender, + tokensThawing: tokensThawing, + sharesThawing: sharesThawing, + nThawRequests: _nThawRequests, + thawingNonce: pool.thawingNonce + }); + (tokensThawed, tokensThawing, sharesThawing) = _fulfillThawRequests(params); // The next subtraction should never revert becase: pool.tokens >= pool.tokensThawing and pool.tokensThawing >= tokensThawed // In the event the pool gets completely slashed tokensThawed will fulfil to 0. @@ -936,6 +944,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @return The ID of the thaw request */ function _createThawRequest( + ThawRequestType _requestType, address _serviceProvider, address _verifier, address _owner, @@ -943,18 +952,22 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint64 _thawingUntil, uint256 _thawingNonce ) private returns (bytes32) { - LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; + LinkedList.List storage thawRequestList = _getThawRequestList( + _requestType, + _serviceProvider, + _verifier, + _owner + ); require(thawRequestList.count < MAX_THAW_REQUESTS, HorizonStakingTooManyThawRequests()); bytes32 thawRequestId = keccak256(abi.encodePacked(_serviceProvider, _verifier, _owner, thawRequestList.nonce)); - _thawRequests[thawRequestId] = ThawRequest({ - shares: _shares, - thawingUntil: _thawingUntil, - next: bytes32(0), - thawingNonce: _thawingNonce - }); + ThawRequest storage thawRequest = _getThawRequest(_requestType, thawRequestId); + thawRequest.shares = _shares; + thawRequest.thawingUntil = _thawingUntil; + thawRequest.next = bytes32(0); + thawRequest.thawingNonce = _thawingNonce; - if (thawRequestList.count != 0) _thawRequests[thawRequestList.tail].next = thawRequestId; + if (thawRequestList.count != 0) _getThawRequest(_requestType, thawRequestList.tail).next = thawRequestId; thawRequestList.addTail(thawRequestId); emit ThawRequestCreated(_serviceProvider, _verifier, _owner, _shares, _thawingUntil, thawRequestId); @@ -964,41 +977,49 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice Traverses a thaw request list and fulfills expired thaw requests. * @dev Emits a {ThawRequestsFulfilled} event and a {ThawRequestFulfilled} event for each thaw request fulfilled. - * @param _serviceProvider The address of the service provider - * @param _verifier The address of the verifier - * @param _owner The address of the owner of the thaw request - * @param _tokensThawing The current amount of tokens already thawing - * @param _sharesThawing The current amount of shares already thawing - * @param _nThawRequests The number of thaw requests to fulfill. If set to 0, all thaw requests are fulfilled. - * @param _thawingNonce The current valid thawing nonce. Any thaw request with a different nonce is invalid and should be ignored. + * @param params The parameters for fulfilling thaw requests * @return The amount of thawed tokens * @return The amount of tokens still thawing * @return The amount of shares still thawing */ - function _fulfillThawRequests( - address _serviceProvider, - address _verifier, - address _owner, - uint256 _tokensThawing, - uint256 _sharesThawing, - uint256 _nThawRequests, - uint256 _thawingNonce - ) private returns (uint256, uint256, uint256) { - LinkedList.List storage thawRequestList = _thawRequestLists[_serviceProvider][_verifier][_owner]; + function _fulfillThawRequests(FulfillThawRequestsParams memory params) private returns (uint256, uint256, uint256) { + LinkedList.List storage thawRequestList = _getThawRequestList( + params.requestType, + params.serviceProvider, + params.verifier, + params.owner + ); require(thawRequestList.count > 0, HorizonStakingNothingThawing()); - uint256 tokensThawed = 0; + function(bytes32) view returns (bytes32) getNextItem = _getNextThawRequest(params.requestType); + function(bytes32) deleteItem = _getDeleteThawRequest(params.requestType); + bytes memory acc = abi.encode( + params.requestType, + uint256(0), + params.tokensThawing, + params.sharesThawing, + params.thawingNonce + ); (uint256 thawRequestsFulfilled, bytes memory data) = thawRequestList.traverse( - _getNextThawRequest, + getNextItem, _fulfillThawRequest, - _deleteThawRequest, - abi.encode(tokensThawed, _tokensThawing, _sharesThawing, _thawingNonce), - _nThawRequests + deleteItem, + acc, + params.nThawRequests ); - (tokensThawed, _tokensThawing, _sharesThawing) = abi.decode(data, (uint256, uint256, uint256)); - emit ThawRequestsFulfilled(_serviceProvider, _verifier, _owner, thawRequestsFulfilled, tokensThawed); - return (tokensThawed, _tokensThawing, _sharesThawing); + (, uint256 tokensThawed, uint256 tokensThawing, uint256 sharesThawing) = abi.decode( + data, + (ThawRequestType, uint256, uint256, uint256) + ); + emit ThawRequestsFulfilled( + params.serviceProvider, + params.verifier, + params.owner, + thawRequestsFulfilled, + tokensThawed + ); + return (tokensThawed, tokensThawing, sharesThawing); } /** @@ -1013,19 +1034,22 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @return The updated accumulator data */ function _fulfillThawRequest(bytes32 _thawRequestId, bytes memory _acc) private returns (bool, bytes memory) { - ThawRequest storage thawRequest = _thawRequests[_thawRequestId]; + // decode + ( + ThawRequestType requestType, + uint256 tokensThawed, + uint256 tokensThawing, + uint256 sharesThawing, + uint256 thawingNonce + ) = abi.decode(_acc, (ThawRequestType, uint256, uint256, uint256, uint256)); + + ThawRequest storage thawRequest = _getThawRequest(requestType, _thawRequestId); // early exit if (thawRequest.thawingUntil > block.timestamp) { return (true, LinkedList.NULL_BYTES); } - // decode - (uint256 tokensThawed, uint256 tokensThawing, uint256 sharesThawing, uint256 thawingNonce) = abi.decode( - _acc, - (uint256, uint256, uint256, uint256) - ); - // process - only fulfill thaw requests for the current valid nonce uint256 tokens = 0; bool validThawRequest = thawRequest.thawingNonce == thawingNonce; @@ -1044,17 +1068,39 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { ); // encode - _acc = abi.encode(tokensThawed, tokensThawing, sharesThawing, thawingNonce); + _acc = abi.encode(requestType, tokensThawed, tokensThawing, sharesThawing, thawingNonce); return (false, _acc); } /** - * @notice Deletes a ThawRequest. - * @dev This function is used as a callback in the thaw requests linked list traversal. - * @param _thawRequestId The ID of the thaw request to delete + * @notice Determines the correct callback function for `deleteItem` based on the request type. + * @param _requestType The type of thaw request (Provision or Delegation). + * @return A function pointer to the appropriate `deleteItem` callback. + */ + function _getDeleteThawRequest(ThawRequestType _requestType) private pure returns (function(bytes32)) { + if (_requestType == ThawRequestType.Provision) { + return _deleteProvisionThawRequest; + } else if (_requestType == ThawRequestType.Delegation) { + return _deleteDelegationThawRequest; + } else { + revert("Unknown ThawRequestType"); + } + } + + /** + * @notice Deletes a thaw request for a provision. + * @param _thawRequestId The ID of the thaw request to delete. + */ + function _deleteProvisionThawRequest(bytes32 _thawRequestId) private { + delete _provisionThawRequests[_thawRequestId]; + } + + /** + * @notice Deletes a thaw request for a delegation. + * @param _thawRequestId The ID of the thaw request to delete. */ - function _deleteThawRequest(bytes32 _thawRequestId) private { - delete _thawRequests[_thawRequestId]; + function _deleteDelegationThawRequest(bytes32 _thawRequestId) private { + delete _delegationThawRequests[_thawRequestId]; } /** diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index d29d3edec..cdc45bb20 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -173,30 +173,35 @@ abstract contract HorizonStakingBase is /** * @notice See {IHorizonStakingBase-getThawRequest}. */ - function getThawRequest(bytes32 thawRequestId) external view override returns (ThawRequest memory) { - return _thawRequests[thawRequestId]; + function getThawRequest( + ThawRequestType requestType, + bytes32 thawRequestId + ) external view override returns (ThawRequest memory) { + return _getThawRequest(requestType, thawRequestId); } /** * @notice See {IHorizonStakingBase-getThawRequestList}. */ function getThawRequestList( + ThawRequestType requestType, address serviceProvider, address verifier, address owner ) external view override returns (LinkedList.List memory) { - return _thawRequestLists[serviceProvider][verifier][owner]; + return _getThawRequestList(requestType, serviceProvider, verifier, owner); } /** * @notice See {IHorizonStakingBase-getThawedTokens}. */ function getThawedTokens( + ThawRequestType requestType, address serviceProvider, address verifier, address owner ) external view override returns (uint256) { - LinkedList.List storage thawRequestList = _thawRequestLists[serviceProvider][verifier][owner]; + LinkedList.List storage thawRequestList = _getThawRequestList(requestType, serviceProvider, verifier, owner); if (thawRequestList.count == 0) { return 0; } @@ -206,7 +211,7 @@ abstract contract HorizonStakingBase is bytes32 thawRequestId = thawRequestList.head; while (thawRequestId != bytes32(0)) { - ThawRequest storage thawRequest = _thawRequests[thawRequestId]; + ThawRequest storage thawRequest = _getThawRequest(requestType, thawRequestId); if (thawRequest.thawingUntil <= block.timestamp) { tokens += (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; } else { @@ -289,11 +294,84 @@ abstract contract HorizonStakingBase is } /** - * @notice Gets the next thaw request after `_thawRequestId`. - * @dev This function is used as a callback in the thaw requests linked list traversal. + * @notice Determines the correct callback function for `getNextItem` based on the request type. + * @param _requestType The type of thaw request (Provision or Delegation). + * @return A function pointer to the appropriate `getNextItem` callback. */ - function _getNextThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { - return _thawRequests[_thawRequestId].next; + function _getNextThawRequest( + ThawRequestType _requestType + ) internal pure returns (function(bytes32) view returns (bytes32)) { + if (_requestType == ThawRequestType.Provision) { + return _getNextProvisionThawRequest; + } else if (_requestType == ThawRequestType.Delegation) { + return _getNextDelegationThawRequest; + } else { + revert("Unknown ThawRequestType"); + } + } + + /** + * @notice Retrieves the next thaw request for a provision. + * @param _thawRequestId The ID of the current thaw request. + * @return The ID of the next thaw request in the list. + */ + function _getNextProvisionThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { + return _provisionThawRequests[_thawRequestId].next; + } + + /** + * @notice Retrieves the next thaw request for a delegation. + * @param _thawRequestId The ID of the current thaw request. + * @return The ID of the next thaw request in the list. + */ + function _getNextDelegationThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { + return _delegationThawRequests[_thawRequestId].next; + } + + /** + * @notice Retrieves the thaw request list for the given request type. + * @dev Uses the `ThawRequestType` to determine which mapping to access. + * Reverts if the request type is unknown. + * @param _requestType The type of thaw request (Provision or Delegation). + * @param _serviceProvider The address of the service provider. + * @param _verifier The address of the verifier. + * @param _owner The address of the owner of the thaw request. + * @return The linked list of thaw requests for the specified request type. + */ + function _getThawRequestList( + ThawRequestType _requestType, + address _serviceProvider, + address _verifier, + address _owner + ) internal view returns (LinkedList.List storage) { + if (_requestType == ThawRequestType.Provision) { + return _provisionThawRequestLists[_serviceProvider][_verifier][_owner]; + } else if (_requestType == ThawRequestType.Delegation) { + return _delegationThawRequestLists[_serviceProvider][_verifier][_owner]; + } else { + revert("Unknown ThawRequestType"); + } + } + + /** + * @notice Retrieves a specific thaw request for the given request type. + * @dev Uses the `ThawRequestType` to determine which mapping to access. + * Reverts if the request type is unknown. + * @param _requestType The type of thaw request (Provision or Delegation). + * @param _thawRequestId The unique ID of the thaw request. + * @return The thaw request data for the specified request type and ID. + */ + function _getThawRequest( + ThawRequestType _requestType, + bytes32 _thawRequestId + ) internal view returns (IHorizonStakingTypes.ThawRequest storage) { + if (_requestType == ThawRequestType.Provision) { + return _provisionThawRequests[_thawRequestId]; + } else if (_requestType == ThawRequestType.Delegation) { + return _delegationThawRequests[_thawRequestId]; + } else { + revert("Unknown ThawRequestType"); + } } /** diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index ce2755468..9ed0cef26 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -149,12 +149,21 @@ abstract contract HorizonStakingV1Storage { /// @dev Thaw requests /// Details for each thawing operation in the staking contract (for both service providers and delegators). - mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _thawRequests; + mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _provisionThawRequests; /// @dev Thaw request lists /// Metadata defining linked lists of thaw requests for each service provider or delegator (owner) mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) - internal _thawRequestLists; + internal _provisionThawRequestLists; + + /// @dev Thaw requests + /// Details for each thawing operation in the staking contract (for both service providers and delegators). + mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _delegationThawRequests; + + /// @dev Thaw request lists + /// Metadata defining linked lists of thaw requests for each service provider or delegator (owner) + mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) + internal _delegationThawRequestLists; /// @dev Operator allow list /// Used for all verifiers except the subgraph data service. diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 1fe4ceba3..39e2c5c34 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -8,6 +8,7 @@ import { IGraphPayments } from "../../../contracts/interfaces/IGraphPayments.sol import { IHorizonStakingBase } from "../../../contracts/interfaces/internal/IHorizonStakingBase.sol"; import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; +import { IHorizonStakingTypes } from "../../../contracts/interfaces/internal/IHorizonStakingTypes.sol"; import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; import { MathUtils } from "../../../contracts/libraries/MathUtils.sol"; @@ -400,6 +401,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // before Provision memory beforeProvision = staking.getProvision(serviceProvider, verifier); LinkedList.List memory beforeThawRequestList = staking.getThawRequestList( + IHorizonStakingTypes.ThawRequestType.Provision, serviceProvider, verifier, serviceProvider @@ -428,13 +430,9 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // after Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); - ThawRequest memory afterThawRequest = staking.getThawRequest(thawRequestId); - LinkedList.List memory afterThawRequestList = staking.getThawRequestList( - serviceProvider, - verifier, - serviceProvider - ); - ThawRequest memory afterPreviousTailThawRequest = staking.getThawRequest(beforeThawRequestList.tail); + ThawRequest memory afterThawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Provision, thawRequestId); + LinkedList.List memory afterThawRequestList = _getProvisionThawRequestList(serviceProvider, verifier, serviceProvider); + ThawRequest memory afterPreviousTailThawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Provision, beforeThawRequestList.tail); // assert assertEq(afterProvision.tokens, beforeProvision.tokens); @@ -472,6 +470,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { Provision memory beforeProvision = staking.getProvision(serviceProvider, verifier); ServiceProviderInternal memory beforeServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); LinkedList.List memory beforeThawRequestList = staking.getThawRequestList( + IHorizonStakingTypes.ThawRequestType.Provision, serviceProvider, verifier, serviceProvider @@ -513,6 +512,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); LinkedList.List memory afterThawRequestList = staking.getThawRequestList( + IHorizonStakingTypes.ThawRequestType.Provision, serviceProvider, verifier, serviceProvider @@ -540,7 +540,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { beforeServiceProvider.__DEPRECATED_tokensLockedUntil ); for (uint i = 0; i < calcValues.thawRequestsFulfilledListIds.length; i++) { - ThawRequest memory thawRequest = staking.getThawRequest(calcValues.thawRequestsFulfilledListIds[i]); + ThawRequest memory thawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Provision, calcValues.thawRequestsFulfilledListIds[i]); assertEq(thawRequest.shares, 0); assertEq(thawRequest.thawingUntil, 0); assertEq(thawRequest.next, bytes32(0)); @@ -583,7 +583,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { provision: staking.getProvision(serviceProvider, verifier), provisionNewVerifier: staking.getProvision(serviceProvider, newVerifier), serviceProvider: _getStorage_ServiceProviderInternal(serviceProvider), - thawRequestList: staking.getThawRequestList(serviceProvider, verifier, serviceProvider) + thawRequestList: staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Provision, serviceProvider, verifier, serviceProvider) }); // calc @@ -626,6 +626,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { Provision memory afterProvisionNewVerifier = staking.getProvision(serviceProvider, newVerifier); ServiceProviderInternal memory afterServiceProvider = _getStorage_ServiceProviderInternal(serviceProvider); LinkedList.List memory afterThawRequestList = staking.getThawRequestList( + IHorizonStakingTypes.ThawRequestType.Provision, serviceProvider, verifier, serviceProvider @@ -680,7 +681,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // assert: thaw request list old verifier for (uint i = 0; i < calcValues.thawRequestsFulfilledListIds.length; i++) { - ThawRequest memory thawRequest = staking.getThawRequest(calcValues.thawRequestsFulfilledListIds[i]); + ThawRequest memory thawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Provision, calcValues.thawRequestsFulfilledListIds[i]); assertEq(thawRequest.shares, 0); assertEq(thawRequest.thawingUntil, 0); assertEq(thawRequest.next, bytes32(0)); @@ -882,8 +883,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256 deltaShares = afterDelegation.shares - beforeDelegation.shares; // assertions - assertEq(beforePool.tokens + tokens, afterPool.tokens); - assertEq(beforePool.shares + calcShares, afterPool.shares); + assertEq(beforePool.tokens + tokens, afterPool.tokens, "afterPool.tokens FAIL"); + assertEq(beforePool.shares + calcShares, afterPool.shares, "afterPool.shares FAIL"); assertEq(beforePool.tokensThawing, afterPool.tokensThawing); assertEq(beforePool.sharesThawing, afterPool.sharesThawing); assertEq(beforePool.thawingNonce, afterPool.thawingNonce); @@ -930,7 +931,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { BeforeValues_Undelegate memory beforeValues; beforeValues.pool = _getStorage_DelegationPoolInternal(serviceProvider, verifier, legacy); beforeValues.delegation = _getStorage_Delegation(serviceProvider, verifier, delegator, legacy); - beforeValues.thawRequestList = staking.getThawRequestList(serviceProvider, verifier, delegator); + beforeValues.thawRequestList = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, serviceProvider, verifier, delegator); beforeValues.delegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); // calc @@ -978,8 +979,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { beneficiary, legacy ); - LinkedList.List memory afterThawRequestList = staking.getThawRequestList(serviceProvider, verifier, beneficiary); - ThawRequest memory afterThawRequest = staking.getThawRequest(calcValues.thawRequestId); + LinkedList.List memory afterThawRequestList = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, serviceProvider, verifier, beneficiary); + ThawRequest memory afterThawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Delegation, calcValues.thawRequestId); uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); // assertions @@ -1077,7 +1078,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { beforeValues.pool = _getStorage_DelegationPoolInternal(_serviceProvider, _verifier, legacy); beforeValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _newVerifier, legacy); beforeValues.newDelegation = _getStorage_Delegation(_newServiceProvider, _newVerifier, msgSender, legacy); - beforeValues.thawRequestList = staking.getThawRequestList(_serviceProvider, _verifier, msgSender); + beforeValues.thawRequestList = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, _serviceProvider, _verifier, msgSender); beforeValues.senderBalance = token.balanceOf(msgSender); beforeValues.stakingBalance = token.balanceOf(address(staking)); @@ -1150,7 +1151,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { afterValues.pool = _getStorage_DelegationPoolInternal(_serviceProvider, _verifier, legacy); afterValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _newVerifier, legacy); afterValues.newDelegation = _getStorage_Delegation(_newServiceProvider, _newVerifier, msgSender, legacy); - afterValues.thawRequestList = staking.getThawRequestList(_serviceProvider, _verifier, msgSender); + afterValues.thawRequestList = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, _serviceProvider, _verifier, msgSender); afterValues.senderBalance = token.balanceOf(msgSender); afterValues.stakingBalance = token.balanceOf(address(staking)); @@ -1162,7 +1163,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterValues.pool.thawingNonce, beforeValues.pool.thawingNonce); for (uint i = 0; i < calcValues.thawRequestsFulfilledListIds.length; i++) { - ThawRequest memory thawRequest = staking.getThawRequest(calcValues.thawRequestsFulfilledListIds[i]); + ThawRequest memory thawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Delegation, calcValues.thawRequestsFulfilledListIds[i]); assertEq(thawRequest.shares, 0); assertEq(thawRequest.thawingUntil, 0); assertEq(thawRequest.next, bytes32(0)); @@ -1797,7 +1798,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address operator, bool legacy ) internal view returns (bool) { - uint256 slotNumber = legacy ? 21 : 31; + uint256 slotNumber = legacy ? 21 : 33; uint256 slot; if (legacy) { @@ -1879,7 +1880,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address verifier, bool legacy ) internal view returns (DelegationPoolInternalTest memory) { - uint256 slotNumber = legacy ? 20 : 33; + uint256 slotNumber = legacy ? 20 : 35; uint256 baseSlot; if (legacy) { baseSlot = uint256(keccak256(abi.encode(serviceProvider, slotNumber))); @@ -1911,7 +1912,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address delegator, bool legacy ) internal view returns (DelegationInternal memory) { - uint256 slotNumber = legacy ? 20 : 33; + uint256 slotNumber = legacy ? 20 : 35; uint256 baseSlot; // DelegationPool @@ -2207,6 +2208,13 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256[] thawRequestsFulfilledListTokens; } + struct ThawingData { + uint256 tokensThawed; + uint256 tokensThawing; + uint256 sharesThawing; + uint256 thawRequestsFulfilled; + } + function calcThawRequestData( address serviceProvider, address verifier, @@ -2214,7 +2222,9 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256 iterations, bool delegation ) private view returns (CalcValues_ThawRequestData memory) { - LinkedList.List memory thawRequestList = staking.getThawRequestList(serviceProvider, verifier, owner); + LinkedList.List memory thawRequestList = delegation + ? _getDelegationThawRequestList(serviceProvider, verifier, owner) + : _getProvisionThawRequestList(serviceProvider, verifier, owner); if (thawRequestList.count == 0) { return CalcValues_ThawRequestData(0, 0, 0, new ThawRequest[](0), new bytes32[](0), new uint256[](0)); } @@ -2229,7 +2239,9 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { bytes32 thawRequestId = thawRequestList.head; while (thawRequestId != bytes32(0) && (iterations == 0 || thawRequestsFulfilled < iterations)) { - ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + ThawRequest memory thawRequest = delegation + ? _getDelegationThawRequest(thawRequestId) + : _getProvisionThawRequest(thawRequestId); bool isThawRequestValid = thawRequest.thawingNonce == (delegation ? pool.thawingNonce : prov.thawingNonce); if (thawRequest.thawingUntil <= block.timestamp) { thawRequestsFulfilled++; @@ -2254,7 +2266,9 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256 i = 0; thawRequestId = thawRequestList.head; while (thawRequestId != bytes32(0) && (iterations == 0 || i < iterations)) { - ThawRequest memory thawRequest = staking.getThawRequest(thawRequestId); + ThawRequest memory thawRequest = delegation + ? _getDelegationThawRequest(thawRequestId) + : _getProvisionThawRequest(thawRequestId); bool isThawRequestValid = thawRequest.thawingNonce == (delegation ? pool.thawingNonce : prov.thawingNonce); if (thawRequest.thawingUntil <= block.timestamp) { @@ -2264,7 +2278,9 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { : (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; } thawRequestsFulfilledListIds[i] = thawRequestId; - thawRequestsFulfilledList[i] = staking.getThawRequest(thawRequestId); + thawRequestsFulfilledList[i] = delegation + ? _getDelegationThawRequest(thawRequestId) + : _getProvisionThawRequest(thawRequestId); thawRequestId = thawRequestsFulfilledList[i].next; i++; } else { @@ -2287,4 +2303,52 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { thawRequestsFulfilledListTokens ); } + + function _getProvisionThawRequestList(address serviceProvider, address verifier, address owner) + private + view + returns (LinkedList.List memory) + { + return staking.getThawRequestList( + IHorizonStakingTypes.ThawRequestType.Provision, + serviceProvider, + verifier, + owner + ); + } + + function _getDelegationThawRequestList(address serviceProvider, address verifier, address owner) + private + view + returns (LinkedList.List memory) + { + return staking.getThawRequestList( + IHorizonStakingTypes.ThawRequestType.Delegation, + serviceProvider, + verifier, + owner + ); + } + + function _getProvisionThawRequest(bytes32 thawRequestId) + private + view + returns (ThawRequest memory) + { + return staking.getThawRequest( + IHorizonStakingTypes.ThawRequestType.Provision, + thawRequestId + ); + } + + function _getDelegationThawRequest(bytes32 thawRequestId) + private + view + returns (ThawRequest memory) + { + return staking.getThawRequest( + IHorizonStakingTypes.ThawRequestType.Delegation, + thawRequestId + ); + } } diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index c9aa04dbc..45bdbb1a8 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; +import { IHorizonStakingTypes } from "../../../contracts/interfaces/internal/IHorizonStakingTypes.sol"; import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; @@ -42,11 +43,12 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useUndelegate(withdrawShares) { LinkedList.List memory thawingRequests = staking.getThawRequestList( + IHorizonStakingTypes.ThawRequestType.Delegation, users.indexer, subgraphDataServiceAddress, users.delegator ); - ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + ThawRequest memory thawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Delegation, thawingRequests.tail); skip(thawRequest.thawingUntil + 1); @@ -93,11 +95,12 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { _undelegate(users.indexer, delegation.shares); LinkedList.List memory thawingRequests = staking.getThawRequestList( + IHorizonStakingTypes.ThawRequestType.Delegation, users.indexer, subgraphDataServiceLegacyAddress, users.delegator ); - ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + ThawRequest memory thawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Delegation, thawingRequests.tail); skip(thawRequest.thawingUntil + 1); @@ -180,6 +183,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { useDelegation(delegationAmount) { vm.assume(beneficiary != address(0)); + vm.assume(beneficiary != address(staking)); // Skip beneficiary if balance will overflow vm.assume(token.balanceOf(beneficiary) < type(uint256).max - delegationAmount); @@ -189,8 +193,8 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); // Thawing period ends - LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceAddress, beneficiary); - ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + LinkedList.List memory thawingRequests = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, users.indexer, subgraphDataServiceAddress, beneficiary); + ThawRequest memory thawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Delegation, thawingRequests.tail); skip(thawRequest.thawingUntil + 1); // Beneficiary withdraws delegated tokens @@ -216,8 +220,8 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); // Thawing period ends - LinkedList.List memory thawingRequests = staking.getThawRequestList(users.indexer, subgraphDataServiceAddress, users.delegator); - ThawRequest memory thawRequest = staking.getThawRequest(thawingRequests.tail); + LinkedList.List memory thawingRequests = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, users.indexer, subgraphDataServiceAddress, users.delegator); + ThawRequest memory thawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Delegation, thawingRequests.tail); skip(thawRequest.thawingUntil + 1); // Delegator attempts to withdraw delegated tokens, should revert since beneficiary is the thaw request owner From 9dc58d00554aa3ccc8ab10e249ef3fba5cc3ce2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 27 Nov 2024 11:16:26 -0300 Subject: [PATCH 298/343] fix: disallow signers to be authorized for different payers (TRST-M10) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/ITAPCollector.sol | 20 +++- .../payments/collectors/TAPCollector.sol | 21 +++- .../payments/tap-collector/TAPCollector.t.sol | 21 ++-- .../tap-collector/collect/collect.t.sol | 113 ++++++++++++++++-- .../signer/authorizeSigner.t.sol | 21 ++++ .../tap-collector/signer/thawSigner.t.sol | 14 +++ 6 files changed, 186 insertions(+), 24 deletions(-) diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index d04f142d6..b364135c3 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -18,10 +18,14 @@ interface ITAPCollector is IPaymentsCollector { address payer; // Timestamp at which thawing period ends (zero if not thawing) uint256 thawEndTimestamp; + // Whether the signer authorization was revoked + bool revoked; } /// @notice The Receipt Aggregate Voucher (RAV) struct struct ReceiptAggregateVoucher { + // The address of the payer the RAV was issued by + address payer; // The address of the data service the RAV was issued to address dataService; // The address of the service provider the RAV was issued to @@ -119,6 +123,12 @@ interface ITAPCollector is IPaymentsCollector { */ error TAPCollectorSignerNotAuthorizedByPayer(address payer, address signer); + /** + * Thrown when the attempting to revoke a signer that was already revoked + * @param signer The address of the signer + */ + error TAPCollectorAuthorizationAlreadyRevoked(address payer, address signer); + /** * Thrown when the signer is not thawing * @param signer The address of the signer @@ -137,6 +147,13 @@ interface ITAPCollector is IPaymentsCollector { */ error TAPCollectorInvalidRAVSigner(); + /** + * Thrown when the RAV payer does not match the signers authorized payer + * @param authorizedPayer The address of the authorized payer + * @param ravPayer The address of the RAV payer + */ + error TAPCollectorInvalidRAVPayer(address authorizedPayer, address ravPayer); + /** * Thrown when the RAV is for a data service the service provider has no provision for * @param dataService The address of the data service @@ -159,7 +176,8 @@ interface ITAPCollector is IPaymentsCollector { error TAPCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected); /** - * @notice Authorize a signer to sign on behalf of the payer + * @notice Authorize a signer to sign on behalf of the payer. + * A signer can not be authorized for multiple payers even after revoking previous authorizations. * @dev Requirements: * - `signer` must not be already authorized * - `proofDeadline` must be greater than the current timestamp diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 40a375349..a5449e1cc 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -18,6 +18,8 @@ import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/Mes * @dev Note that the contract expects the RAV aggregate value to be monotonically increasing, each successive RAV for the same * (data service-payer-receiver) tuple should have a value greater than the previous one. The contract will keep track of the tokens * already collected and calculate the difference to collect. + * @dev The contract also implements a mechanism to authorize signers to sign RAVs on behalf of a payer. Signers cannot be reused + * for different payers. * @custom:security-contact Please email security+contracts@thegraph.com if you find any * bugs. We may have an active bug bounty program. */ @@ -27,7 +29,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { /// @notice The EIP712 typehash for the ReceiptAggregateVoucher struct bytes32 private constant EIP712_RAV_TYPEHASH = keccak256( - "ReceiptAggregateVoucher(address dataService,address serviceProvider,uint64 timestampNs,uint128 valueAggregate,bytes metadata)" + "ReceiptAggregateVoucher(address payer,address dataService,address serviceProvider,uint64 timestampNs,uint128 valueAggregate,bytes metadata)" ); /// @notice Authorization details for payer-signer pairs @@ -79,6 +81,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { PayerAuthorization storage authorization = authorizedSigners[signer]; require(authorization.payer == msg.sender, TAPCollectorSignerNotAuthorizedByPayer(msg.sender, signer)); + require(!authorization.revoked, TAPCollectorAuthorizationAlreadyRevoked(msg.sender, signer)); authorization.thawEndTimestamp = block.timestamp + REVOKE_SIGNER_THAWING_PERIOD; emit SignerThawing(msg.sender, signer, authorization.thawEndTimestamp); @@ -110,7 +113,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { TAPCollectorSignerStillThawing(block.timestamp, authorization.thawEndTimestamp) ); - delete authorizedSigners[signer]; + authorization.revoked = true; emit SignerRevoked(msg.sender, signer); } @@ -122,14 +125,26 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. */ function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external override returns (uint256) { + // Ensure caller is the RAV data service (SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(data, (SignedRAV, uint256)); require( signedRAV.rav.dataService == msg.sender, TAPCollectorCallerNotDataService(msg.sender, signedRAV.rav.dataService) ); + // Ensure RAV signer is authorized for a payer address signer = _recoverRAVSigner(signedRAV); - require(authorizedSigners[signer].payer != address(0), TAPCollectorInvalidRAVSigner()); + require( + authorizedSigners[signer].payer != address(0) && !authorizedSigners[signer].revoked, + TAPCollectorInvalidRAVSigner() + ); + + // Ensure RAV payer matches the authorized payer + address payer = signedRAV.rav.payer; + require( + authorizedSigners[signer].payer == payer, + TAPCollectorInvalidRAVPayer(authorizedSigners[signer].payer, payer) + ); // Check the service provider has an active provision with the data service // This prevents an attack where the payer can deny the service provider from collecting payments diff --git a/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol b/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol index 25b4c901c..1120c5b92 100644 --- a/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol +++ b/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol @@ -66,9 +66,10 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest tapCollector.authorizeSigner(_signer, _proofDeadline, _proof); - (address _payer, uint256 thawEndTimestamp) = tapCollector.authorizedSigners(_signer); + (address _payer, uint256 thawEndTimestamp, bool revoked) = tapCollector.authorizedSigners(_signer); assertEq(_payer, msgSender); assertEq(thawEndTimestamp, 0); + assertEq(revoked, false); } function _thawSigner(address _signer) internal { @@ -80,9 +81,10 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest tapCollector.thawSigner(_signer); - (address _payer, uint256 thawEndTimestamp) = tapCollector.authorizedSigners(_signer); + (address _payer, uint256 thawEndTimestamp, bool revoked) = tapCollector.authorizedSigners(_signer); assertEq(_payer, msgSender); assertEq(thawEndTimestamp, expectedThawEndTimestamp); + assertEq(revoked, false); } function _cancelThawSigner(address _signer) internal { @@ -93,29 +95,34 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest tapCollector.cancelThawSigner(_signer); - (address _payer, uint256 thawEndTimestamp) = tapCollector.authorizedSigners(_signer); + (address _payer, uint256 thawEndTimestamp, bool revoked) = tapCollector.authorizedSigners(_signer); assertEq(_payer, msgSender); assertEq(thawEndTimestamp, 0); + assertEq(revoked, false); } function _revokeAuthorizedSigner(address _signer) internal { (, address msgSender, ) = vm.readCallers(); + (address beforePayer, uint256 beforeThawEndTimestamp, ) = tapCollector.authorizedSigners(_signer); + vm.expectEmit(address(tapCollector)); emit ITAPCollector.SignerRevoked(msgSender, _signer); tapCollector.revokeAuthorizedSigner(_signer); - (address _payer, uint256 thawEndTimestamp) = tapCollector.authorizedSigners(_signer); - assertEq(_payer, address(0)); - assertEq(thawEndTimestamp, 0); + (address afterPayer, uint256 afterThawEndTimestamp, bool afterRevoked) = tapCollector.authorizedSigners(_signer); + + assertEq(beforePayer, afterPayer); + assertEq(beforeThawEndTimestamp, afterThawEndTimestamp); + assertEq(afterRevoked, true); } function _collect(IGraphPayments.PaymentTypes _paymentType, bytes memory _data) internal { (ITAPCollector.SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(_data, (ITAPCollector.SignedRAV, uint256)); bytes32 messageHash = tapCollector.encodeRAV(signedRAV.rav); address _signer = ECDSA.recover(messageHash, signedRAV.signature); - (address _payer, ) = tapCollector.authorizedSigners(_signer); + (address _payer, , ) = tapCollector.authorizedSigners(_signer); uint256 tokensAlreadyCollected = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); uint256 tokensToCollect = signedRAV.rav.valueAggregate - tokensAlreadyCollected; uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); diff --git a/packages/horizon/test/payments/tap-collector/collect/collect.t.sol b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol index 555c9c50e..dabc56592 100644 --- a/packages/horizon/test/payments/tap-collector/collect/collect.t.sol +++ b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol @@ -15,11 +15,12 @@ contract TAPCollectorCollectTest is TAPCollectorTest { function _getQueryFeeEncodedData( uint256 _signerPrivateKey, + address _payer, address _indexer, address _collector, uint128 _tokens ) private view returns (bytes memory) { - ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(_indexer, _collector, _tokens); + ITAPCollector.ReceiptAggregateVoucher memory rav = _getRAV(_payer, _indexer, _collector, _tokens); bytes32 messageHash = tapCollector.encodeRAV(rav); (uint8 v, bytes32 r, bytes32 s) = vm.sign(_signerPrivateKey, messageHash); bytes memory signature = abi.encodePacked(r, s, v); @@ -28,12 +29,14 @@ contract TAPCollectorCollectTest is TAPCollectorTest { } function _getRAV( + address _payer, address _indexer, address _collector, uint128 _tokens ) private pure returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { return ITAPCollector.ReceiptAggregateVoucher({ + payer: _payer, dataService: _collector, serviceProvider: _indexer, timestampNs: 0, @@ -54,7 +57,13 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); resetPrank(users.verifier); _collect(IGraphPayments.PaymentTypes.QueryFee, data); @@ -76,6 +85,7 @@ contract TAPCollectorCollectTest is TAPCollectorTest { for (uint256 i = 0; i < steps; i++) { bytes memory data = _getQueryFeeEncodedData( signerPrivateKey, + users.gateway, users.indexer, users.verifier, uint128(payed + tokensPerStep) @@ -91,7 +101,13 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); resetPrank(users.verifier); bytes memory expectedError = abi.encodeWithSelector( @@ -115,7 +131,13 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); resetPrank(users.verifier); bytes memory expectedError = abi.encodeWithSelector( @@ -137,13 +159,16 @@ contract TAPCollectorCollectTest is TAPCollectorTest { // The sender authorizes another signer (address anotherSigner, uint256 anotherSignerPrivateKey) = makeAddrAndKey("anotherSigner"); - uint256 proofDeadline = block.timestamp + 1; - bytes memory anotherSignerProof = _getSignerProof(proofDeadline, anotherSignerPrivateKey); - _authorizeSigner(anotherSigner, proofDeadline, anotherSignerProof); + { + uint256 proofDeadline = block.timestamp + 1; + bytes memory anotherSignerProof = _getSignerProof(proofDeadline, anotherSignerPrivateKey); + _authorizeSigner(anotherSigner, proofDeadline, anotherSignerProof); + } // And crafts a RAV using the new signer as the data service bytes memory data = _getQueryFeeEncodedData( anotherSignerPrivateKey, + users.gateway, users.indexer, anotherSigner, uint128(tokens) @@ -166,7 +191,13 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); resetPrank(users.indexer); bytes memory expectedError = abi.encodeWithSelector( @@ -178,6 +209,32 @@ contract TAPCollectorCollectTest is TAPCollectorTest { tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); } + function testTAPCollector_Collect_RevertWhen_PayerMismatch(uint256 tokens) public useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + + resetPrank(users.gateway); + _approveCollector(address(tapCollector), tokens); + _depositTokens(address(tapCollector), users.indexer, tokens); + + (address anotherPayer, ) = makeAddrAndKey("anotherPayer"); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + anotherPayer, + users.indexer, + users.verifier, + uint128(tokens) + ); + + resetPrank(users.verifier); + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorInvalidRAVPayer.selector, + users.gateway, + anotherPayer + ); + vm.expectRevert(expectedError); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); + } + function testTAPCollector_Collect_RevertWhen_InconsistentRAVTokens( uint256 tokens ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { @@ -185,7 +242,13 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); resetPrank(users.verifier); _collect(IGraphPayments.PaymentTypes.QueryFee, data); @@ -203,7 +266,13 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); resetPrank(users.verifier); vm.expectRevert(abi.encodeWithSelector(ITAPCollector.TAPCollectorInvalidRAVSigner.selector)); @@ -222,7 +291,13 @@ contract TAPCollectorCollectTest is TAPCollectorTest { _thawSigner(signer); skip(revokeSignerThawingPeriod + 1); - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); resetPrank(users.verifier); _collect(IGraphPayments.PaymentTypes.QueryFee, data); @@ -239,7 +314,13 @@ contract TAPCollectorCollectTest is TAPCollectorTest { skip(revokeSignerThawingPeriod + 1); _revokeAuthorizedSigner(signer); - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); resetPrank(users.verifier); vm.expectRevert(abi.encodeWithSelector(ITAPCollector.TAPCollectorInvalidRAVSigner.selector)); @@ -259,7 +340,13 @@ contract TAPCollectorCollectTest is TAPCollectorTest { skip(revokeSignerThawingPeriod + 1); _cancelThawSigner(signer); - bytes memory data = _getQueryFeeEncodedData(signerPrivateKey, users.indexer, users.verifier, uint128(tokens)); + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); resetPrank(users.verifier); _collect(IGraphPayments.PaymentTypes.QueryFee, data); diff --git a/packages/horizon/test/payments/tap-collector/signer/authorizeSigner.t.sol b/packages/horizon/test/payments/tap-collector/signer/authorizeSigner.t.sol index b337c48c7..30ffd4610 100644 --- a/packages/horizon/test/payments/tap-collector/signer/authorizeSigner.t.sol +++ b/packages/horizon/test/payments/tap-collector/signer/authorizeSigner.t.sol @@ -49,6 +49,27 @@ contract TAPCollectorAuthorizeSignerTest is TAPCollectorTest { tapCollector.authorizeSigner(signer, proofDeadline, signerProof); } + function testTAPCollector_AuthorizeSigner_RevertWhen_AlreadyAuthroizedAfterRevoking() public useGateway { + // Authorize signer + uint256 proofDeadline = block.timestamp + 1; + bytes memory signerProof = _getSignerProof(proofDeadline, signerPrivateKey); + _authorizeSigner(signer, proofDeadline, signerProof); + + // Revoke signer + _thawSigner(signer); + skip(revokeSignerThawingPeriod + 1); + _revokeAuthorizedSigner(signer); + + // Attempt to authorize signer again + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorSignerAlreadyAuthorized.selector, + users.gateway, + signer + ); + vm.expectRevert(expectedError); + tapCollector.authorizeSigner(signer, proofDeadline, signerProof); + } + function testTAPCollector_AuthorizeSigner_RevertWhen_ProofExpired() public useGateway { // Sign proof with payer uint256 proofDeadline = block.timestamp - 1; diff --git a/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol b/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol index fb47c37fb..db9d99040 100644 --- a/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol +++ b/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol @@ -26,4 +26,18 @@ contract TAPCollectorThawSignerTest is TAPCollectorTest { vm.expectRevert(expectedError); tapCollector.thawSigner(signer); } + + function testTAPCollector_ThawSigner_RevertWhen_AlreadyRevoked() public useGateway useSigner { + _thawSigner(signer); + skip(revokeSignerThawingPeriod + 1); + _revokeAuthorizedSigner(signer); + + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorAuthorizationAlreadyRevoked.selector, + users.gateway, + signer + ); + vm.expectRevert(expectedError); + tapCollector.thawSigner(signer); + } } From 65f4d688e68a24bda2734947d2fbff087a878fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 27 Nov 2024 12:17:28 -0300 Subject: [PATCH 299/343] fix: remove collector allowance feature from payments escrow (TRST-CL1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IPaymentsEscrow.sol | 101 ---------------- .../contracts/payments/PaymentsEscrow.sol | 75 +----------- .../ignition/configs/horizon.hardhat.json | 1 - .../ignition/modules/core/PaymentsEscrow.ts | 3 +- packages/horizon/test/GraphBase.t.sol | 2 +- .../horizon/test/escrow/GraphEscrow.t.sol | 6 - packages/horizon/test/escrow/collect.t.sol | 36 +----- packages/horizon/test/escrow/collector.t.sol | 108 ------------------ packages/horizon/test/escrow/paused.t.sol | 22 ---- .../tap-collector/collect/collect.t.sol | 11 -- .../PaymentsEscrowShared.t.sol | 16 --- packages/horizon/test/utils/Constants.sol | 1 - .../test/SubgraphBaseTest.t.sol | 2 - .../subgraphService/SubgraphService.t.sol | 2 +- .../subgraphService/collect/query/query.t.sol | 7 +- .../subgraph-service/test/utils/Constants.sol | 1 - 16 files changed, 10 insertions(+), 384 deletions(-) delete mode 100644 packages/horizon/test/escrow/collector.t.sol diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index c1eb7707a..4d7207481 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -25,50 +25,6 @@ interface IPaymentsEscrow { uint256 thawEndTimestamp; } - /// @notice Details for a payer-collector pair - /// @dev Collectors can be removed only after a thawing period - struct Collector { - // Amount of tokens the collector is allowed to collect - uint256 allowance; - // Timestamp at which the collector thawing period ends (zero if not thawing) - uint256 thawEndTimestamp; - } - - /** - * @notice Emitted when a payer authorizes a collector to collect funds - * @param payer The address of the payer - * @param collector The address of the collector - * @param addedAllowance The amount of tokens added to the collector's allowance - * @param newTotalAllowance The new total allowance after addition - */ - event AuthorizedCollector( - address indexed payer, - address indexed collector, - uint256 addedAllowance, - uint256 newTotalAllowance - ); - - /** - * @notice Emitted when a payer thaws a collector - * @param payer The address of the payer - * @param collector The address of the collector - */ - event ThawCollector(address indexed payer, address indexed collector); - - /** - * @notice Emitted when a payer cancels the thawing of a collector - * @param payer The address of the payer - * @param collector The address of the collector - */ - event CancelThawCollector(address indexed payer, address indexed collector); - - /** - * @notice Emitted when a payer revokes a collector authorization. - * @param payer The address of the payer - * @param collector The address of the collector - */ - event RevokeCollector(address indexed payer, address indexed collector); - /** * @notice Emitted when a payer deposits funds into the escrow for a payer-collector-receiver tuple * @param payer The address of the payer @@ -152,13 +108,6 @@ interface IPaymentsEscrow { */ error PaymentsEscrowThawingPeriodTooLong(uint256 thawingPeriod, uint256 maxWaitPeriod); - /** - * @notice Thrown when a collector has insufficient allowance to collect funds - * @param allowance The current allowance - * @param minAllowance The minimum required allowance - */ - error PaymentsEscrowInsufficientAllowance(uint256 allowance, uint256 minAllowance); - /** * @notice Thrown when the contract balance is not consistent with the collection amount * @param balanceBefore The balance before the collection @@ -172,54 +121,6 @@ interface IPaymentsEscrow { */ error PaymentsEscrowInvalidZeroTokens(); - /** - * @notice Authorize a collector to collect funds from the payer's escrow - * @dev This function can only be used to increase the allowance of a collector. - * To reduce it the authorization must be revoked and a new one must be created. - * - * Requirements: - * - `allowance` must be greater than zero - * - * Emits an {AuthorizedCollector} event - * - * @param collector The address of the collector - * @param allowance The amount of tokens to add to the collector's allowance - */ - function approveCollector(address collector, uint256 allowance) external; - - /** - * @notice Thaw a collector's collector authorization - * @dev The thawing period is defined by the `REVOKE_COLLECTOR_THAWING_PERIOD` constant - * - * Emits a {ThawCollector} event - * - * @param collector The address of the collector - */ - function thawCollector(address collector) external; - - /** - * @notice Cancel a collector's authorization thawing - * @dev Requirements: - * - `collector` must be thawing - * - * Emits a {CancelThawCollector} event - * - * @param collector The address of the collector - */ - function cancelThawCollector(address collector) external; - - /** - * @notice Revoke a collector's authorization. - * Removes the collector from the list of authorized collectors. - * @dev Requirements: - * - `collector` must have thawed - * - * Emits a {RevokeCollector} event - * - * @param collector The address of the collector - */ - function revokeCollector(address collector) external; - /** * @notice Deposits funds into the escrow for a payer-collector-receiver tuple, where * the payer is the transaction caller. @@ -277,8 +178,6 @@ interface IPaymentsEscrow { * @notice Collects funds from the payer-collector-receiver's escrow and sends them to {GraphPayments} for * distribution using the Graph Horizon Payments protocol. * The function will revert if there are not enough funds in the escrow. - * @dev Requirements: - * - `collector` needs to be authorized by the payer and have enough allowance * * Emits an {EscrowCollected} event * diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 7cf7e9e38..5643d4a5b 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -23,10 +23,6 @@ import { GraphDirectory } from "../utilities/GraphDirectory.sol"; contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, IPaymentsEscrow { using TokenUtils for IGraphToken; - /// @notice Authorization details for payer-collector pairs - mapping(address payer => mapping(address collector => IPaymentsEscrow.Collector collectorDetails)) - public authorizedCollectors; - /// @notice Escrow account details for payer-collector-receiver tuples mapping(address payer => mapping(address collector => mapping(address receiver => IPaymentsEscrow.EscrowAccount escrowAccount))) public escrowAccounts; @@ -35,9 +31,6 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, /// @dev This is a precautionary measure to avoid inadvertedly locking funds for too long uint256 public constant MAX_WAIT_PERIOD = 90 days; - /// @notice Thawing period in seconds for authorized collectors - uint256 public immutable REVOKE_COLLECTOR_THAWING_PERIOD; - /// @notice Thawing period in seconds for escrow funds withdrawal uint256 public immutable WITHDRAW_ESCROW_THAWING_PERIOD; @@ -49,24 +42,14 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, /** * @notice Construct the PaymentsEscrow contract * @param controller The address of the controller - * @param revokeCollectorThawingPeriod Thawing period in seconds for authorized collectors * @param withdrawEscrowThawingPeriod Thawing period in seconds for escrow funds withdrawal */ - constructor( - address controller, - uint256 revokeCollectorThawingPeriod, - uint256 withdrawEscrowThawingPeriod - ) GraphDirectory(controller) { - require( - revokeCollectorThawingPeriod <= MAX_WAIT_PERIOD, - PaymentsEscrowThawingPeriodTooLong(revokeCollectorThawingPeriod, MAX_WAIT_PERIOD) - ); + constructor(address controller, uint256 withdrawEscrowThawingPeriod) GraphDirectory(controller) { require( withdrawEscrowThawingPeriod <= MAX_WAIT_PERIOD, PaymentsEscrowThawingPeriodTooLong(withdrawEscrowThawingPeriod, MAX_WAIT_PERIOD) ); - REVOKE_COLLECTOR_THAWING_PERIOD = revokeCollectorThawingPeriod; WITHDRAW_ESCROW_THAWING_PERIOD = withdrawEscrowThawingPeriod; } @@ -77,52 +60,6 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, __Multicall_init(); } - /** - * @notice See {IPaymentsEscrow-approveCollector} - */ - function approveCollector(address collector_, uint256 allowance) external override notPaused { - require(allowance != 0, PaymentsEscrowInvalidZeroTokens()); - Collector storage collector = authorizedCollectors[msg.sender][collector_]; - collector.allowance += allowance; - emit AuthorizedCollector(msg.sender, collector_, allowance, collector.allowance); - } - - /** - * @notice See {IPaymentsEscrow-thawCollector} - */ - function thawCollector(address collector) external override notPaused { - authorizedCollectors[msg.sender][collector].thawEndTimestamp = - block.timestamp + - REVOKE_COLLECTOR_THAWING_PERIOD; - emit ThawCollector(msg.sender, collector); - } - - /** - * @notice See {IPaymentsEscrow-cancelThawCollector} - */ - function cancelThawCollector(address collector) external override notPaused { - require(authorizedCollectors[msg.sender][collector].thawEndTimestamp != 0, PaymentsEscrowNotThawing()); - - authorizedCollectors[msg.sender][collector].thawEndTimestamp = 0; - emit CancelThawCollector(msg.sender, collector); - } - - /** - * @notice See {IPaymentsEscrow-revokeCollector} - */ - function revokeCollector(address collector_) external override notPaused { - Collector storage collector = authorizedCollectors[msg.sender][collector_]; - - require(collector.thawEndTimestamp != 0, PaymentsEscrowNotThawing()); - require( - collector.thawEndTimestamp < block.timestamp, - PaymentsEscrowStillThawing(block.timestamp, collector.thawEndTimestamp) - ); - - delete authorizedCollectors[msg.sender][collector_]; - emit RevokeCollector(msg.sender, collector_); - } - /** * @notice See {IPaymentsEscrow-deposit} */ @@ -194,19 +131,11 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, address dataService, uint256 tokensDataService ) external override notPaused { - // Check if collector is authorized and has enough funds - Collector storage collectorDetails = authorizedCollectors[payer][msg.sender]; - require( - collectorDetails.allowance >= tokens, - PaymentsEscrowInsufficientAllowance(collectorDetails.allowance, tokens) - ); - // Check if there are enough funds in the escrow account EscrowAccount storage account = escrowAccounts[payer][msg.sender][receiver]; require(account.balance >= tokens, PaymentsEscrowInsufficientBalance(account.balance, tokens)); - // Reduce amount from approved collector and account balance - collectorDetails.allowance -= tokens; + // Reduce amount from account balance account.balance -= tokens; uint256 balanceBefore = _graphToken().balanceOf(address(this)); diff --git a/packages/horizon/ignition/configs/horizon.hardhat.json b/packages/horizon/ignition/configs/horizon.hardhat.json index 894a2ed59..7c4214d37 100644 --- a/packages/horizon/ignition/configs/horizon.hardhat.json +++ b/packages/horizon/ignition/configs/horizon.hardhat.json @@ -36,7 +36,6 @@ "protocolPaymentCut": 10000 }, "PaymentsEscrow": { - "revokeCollectorThawingPeriod": 10000, "withdrawEscrowThawingPeriod": 10000 }, "TAPCollector": { diff --git a/packages/horizon/ignition/modules/core/PaymentsEscrow.ts b/packages/horizon/ignition/modules/core/PaymentsEscrow.ts index 1dbd07088..7c7948a7e 100644 --- a/packages/horizon/ignition/modules/core/PaymentsEscrow.ts +++ b/packages/horizon/ignition/modules/core/PaymentsEscrow.ts @@ -10,13 +10,12 @@ export default buildModule('PaymentsEscrow', (m) => { const { Controller, PeripheryRegistered } = m.useModule(GraphPeripheryModule) const { PaymentsEscrowProxyAdmin, PaymentsEscrowProxy, HorizonRegistered } = m.useModule(HorizonProxiesModule) - const revokeCollectorThawingPeriod = m.getParameter('revokeCollectorThawingPeriod') const withdrawEscrowThawingPeriod = m.getParameter('withdrawEscrowThawingPeriod') // Deploy PaymentsEscrow implementation const PaymentsEscrowImplementation = m.contract('PaymentsEscrow', PaymentsEscrowArtifact, - [Controller, revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod], + [Controller, withdrawEscrowThawingPeriod], { after: [PeripheryRegistered, HorizonRegistered], }, diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 7aa44d6f5..b2d43ba63 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -116,7 +116,7 @@ abstract contract GraphBaseTest is IHorizonStakingTypes, Utils, Constants { // PaymentsEscrow bytes memory escrowImplementationParameters = abi.encode( address(controller), - revokeCollectorThawingPeriod,withdrawEscrowThawingPeriod + withdrawEscrowThawingPeriod ); bytes memory escrowImplementationBytecode = abi.encodePacked( type(PaymentsEscrow).creationCode, diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index d3ffd21da..421bbfdd2 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -24,12 +24,6 @@ contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { _; } - modifier useCollector(uint256 tokens) { - vm.assume(tokens > 0); - escrow.approveCollector(users.verifier, tokens); - _; - } - modifier depositAndThawTokens(uint256 amount, uint256 thawAmount) { vm.assume(thawAmount > 0); vm.assume(amount > thawAmount); diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 72b795ee9..254d8738d 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -106,47 +106,17 @@ contract GraphEscrowCollectTest is GraphEscrowTest { _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); resetPrank(users.gateway); - escrow.approveCollector(users.verifier, tokens); _depositTokens(users.verifier, users.indexer, tokens); resetPrank(users.verifier); _collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, tokens, subgraphDataServiceAddress, tokensDataService); } - function testCollect_RevertWhen_CollectorNotAuthorized(uint256 amount) public { - vm.assume(amount > 0); - vm.startPrank(users.verifier); - uint256 dataServiceCut = 30000; // 3% - bytes memory expectedError = abi.encodeWithSelector( - IPaymentsEscrow.PaymentsEscrowInsufficientAllowance.selector, - 0, - amount - ); - vm.expectRevert(expectedError); - escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, dataServiceCut); - vm.stopPrank(); - } - - function testCollect_RevertWhen_CollectorHasInsufficientAmount( - uint256 amount, - uint256 insufficientAmount - ) public useGateway useCollector(insufficientAmount) useDeposit(amount) { - vm.assume(insufficientAmount < amount); - - vm.startPrank(users.verifier); - bytes memory expectedError = abi.encodeWithSignature( - "PaymentsEscrowInsufficientAllowance(uint256,uint256)", - insufficientAmount, - amount - ); - vm.expectRevert(expectedError); - escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); - } - function testCollect_RevertWhen_SenderHasInsufficientAmountInEscrow( uint256 amount, uint256 insufficientAmount - ) public useGateway useCollector(amount) useDeposit(insufficientAmount) { + ) public useGateway useDeposit(insufficientAmount) { + vm.assume(amount > 0); vm.assume(insufficientAmount < amount); vm.startPrank(users.verifier); @@ -162,7 +132,6 @@ contract GraphEscrowCollectTest is GraphEscrowTest { vm.assume(amount > 1 ether); resetPrank(users.gateway); - escrow.approveCollector(users.verifier, amount); _depositTokens(users.verifier, users.indexer, amount); resetPrank(users.verifier); @@ -181,7 +150,6 @@ contract GraphEscrowCollectTest is GraphEscrowTest { vm.assume(amount <= MAX_STAKING_TOKENS); resetPrank(users.gateway); - escrow.approveCollector(users.verifier, amount); _depositTokens(users.verifier, users.indexer, amount); resetPrank(users.verifier); diff --git a/packages/horizon/test/escrow/collector.t.sol b/packages/horizon/test/escrow/collector.t.sol deleted file mode 100644 index d6cb3bc0f..000000000 --- a/packages/horizon/test/escrow/collector.t.sol +++ /dev/null @@ -1,108 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.27; - -import "forge-std/Test.sol"; - -import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; - -import { GraphEscrowTest } from "./GraphEscrow.t.sol"; - -contract GraphEscrowCollectorTest is GraphEscrowTest { - - /* - * HELPERS - */ - - function _thawCollector() internal { - (uint256 beforeAllowance,) = escrow.authorizedCollectors(users.gateway, users.verifier); - vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.ThawCollector(users.gateway, users.verifier); - escrow.thawCollector(users.verifier); - - (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(allowance, beforeAllowance); - assertEq(thawEndTimestamp, block.timestamp + revokeCollectorThawingPeriod); - } - - function _cancelThawCollector() internal { - (uint256 beforeAllowance, uint256 beforeThawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertTrue(beforeThawEndTimestamp != 0, "Collector should be thawing"); - vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.CancelThawCollector(users.gateway, users.verifier); - escrow.cancelThawCollector(users.verifier); - - (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(allowance, beforeAllowance); - assertEq(thawEndTimestamp, 0); - } - - function _revokeCollector() internal { - vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.RevokeCollector(users.gateway, users.verifier); - escrow.revokeCollector(users.verifier); - - (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(users.gateway, users.verifier); - assertEq(allowance, 0); - assertEq(thawEndTimestamp, 0); - } - - /* - * TESTS - */ - - function testCollector_Approve( - uint256 tokens, - uint256 approveSteps - ) public useGateway { - approveSteps = bound(approveSteps, 1, 100); - vm.assume(tokens > approveSteps); - - uint256 approveTokens = tokens / approveSteps; - for (uint i = 0; i < approveSteps; i++) { - _approveCollector(users.verifier, approveTokens); - } - } - - function testCollector_RevertWhen_ApprovingForZeroAllowance( - uint256 amount - ) public useGateway useCollector(amount) { - bytes memory expectedError = abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowInvalidZeroTokens.selector); - vm.expectRevert(expectedError); - escrow.approveCollector(users.verifier, 0); - } - - function testCollector_Thaw(uint256 amount) public useGateway useCollector(amount) { - _thawCollector(); - } - - function testCollector_CancelThaw(uint256 amount) public useGateway useCollector(amount) { - _thawCollector(); - _cancelThawCollector(); - } - - function testCollector_RevertWhen_CancelThawIsNotThawing(uint256 amount) public useGateway useCollector(amount) { - bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowNotThawing()"); - vm.expectRevert(expectedError); - escrow.cancelThawCollector(users.verifier); - vm.stopPrank(); - } - - function testCollector_Revoke(uint256 amount) public useGateway useCollector(amount) { - _thawCollector(); - skip(revokeCollectorThawingPeriod + 1); - _revokeCollector(); - } - - function testCollector_RevertWhen_RevokeIsNotThawing(uint256 amount) public useGateway useCollector(amount) { - bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowNotThawing()"); - vm.expectRevert(expectedError); - escrow.revokeCollector(users.verifier); - } - - function testCollector_RevertWhen_RevokeIsStillThawing(uint256 amount) public useGateway useCollector(amount) { - escrow.thawCollector(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowStillThawing(uint256,uint256)", block.timestamp, block.timestamp + revokeCollectorThawingPeriod); - vm.expectRevert(expectedError); - escrow.revokeCollector(users.verifier); - } -} \ No newline at end of file diff --git a/packages/horizon/test/escrow/paused.t.sol b/packages/horizon/test/escrow/paused.t.sol index a993da883..6019b5c15 100644 --- a/packages/horizon/test/escrow/paused.t.sol +++ b/packages/horizon/test/escrow/paused.t.sol @@ -63,26 +63,4 @@ contract GraphEscrowPausedTest is GraphEscrowTest { vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, tokens, subgraphDataServiceAddress, tokensDataService); } - - // Collectors - - function testPaused_RevertWhen_ApproveCollector(uint256 tokens) public useGateway usePaused(true) { - vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); - escrow.approveCollector(users.verifier, tokens); - } - - function testPaused_RevertWhen_ThawCollector(uint256 tokens) public useGateway useCollector(tokens) usePaused(true) { - vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); - escrow.thawCollector(users.verifier); - } - - function testPaused_RevertWhen_CancelThawCollector(uint256 tokens) public useGateway useCollector(tokens) usePaused(true) { - vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); - escrow.cancelThawCollector(users.verifier); - } - - function testPaused_RevertWhen_RevokeCollector(uint256 tokens) public useGateway useCollector(tokens) usePaused(true) { - vm.expectRevert(abi.encodeWithSelector(IPaymentsEscrow.PaymentsEscrowIsPaused.selector)); - escrow.revokeCollector(users.verifier); - } } \ No newline at end of file diff --git a/packages/horizon/test/payments/tap-collector/collect/collect.t.sol b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol index dabc56592..ddb76b919 100644 --- a/packages/horizon/test/payments/tap-collector/collect/collect.t.sol +++ b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol @@ -54,7 +54,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); bytes memory data = _getQueryFeeEncodedData( @@ -76,7 +75,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { steps = uint8(bound(steps, 1, 100)); tokens = bound(tokens, steps, type(uint128).max); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); resetPrank(users.verifier); @@ -98,7 +96,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { function testTAPCollector_Collect_RevertWhen_NoProvision(uint256 tokens) public useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); bytes memory data = _getQueryFeeEncodedData( @@ -128,7 +125,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { tokens = bound(tokens, 1, type(uint128).max); resetPrank(users.gateway); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); bytes memory data = _getQueryFeeEncodedData( @@ -154,7 +150,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { tokens = bound(tokens, 1, type(uint128).max); resetPrank(users.gateway); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); // The sender authorizes another signer @@ -188,7 +183,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { tokens = bound(tokens, 1, type(uint128).max); resetPrank(users.gateway); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); bytes memory data = _getQueryFeeEncodedData( @@ -240,7 +234,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); bytes memory data = _getQueryFeeEncodedData( signerPrivateKey, @@ -263,7 +256,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { function testTAPCollector_Collect_RevertWhen_SignerNotAuthorized(uint256 tokens) public useGateway { tokens = bound(tokens, 1, type(uint128).max); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); bytes memory data = _getQueryFeeEncodedData( @@ -284,7 +276,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); // Start thawing signer @@ -306,7 +297,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { function testTAPCollector_Collect_RevertIf_SignerWasRevoked(uint256 tokens) public useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); // Start thawing signer @@ -332,7 +322,6 @@ contract TAPCollectorCollectTest is TAPCollectorTest { ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); // Start thawing signer diff --git a/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol b/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol index 2bc435f7a..c3714dfd6 100644 --- a/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol +++ b/packages/horizon/test/shared/payments-escrow/PaymentsEscrowShared.t.sol @@ -22,22 +22,6 @@ abstract contract PaymentsEscrowSharedTest is GraphBaseTest { * HELPERS */ - function _approveCollector(address _verifier, uint256 _tokens) internal { - (, address msgSender, ) = vm.readCallers(); - (uint256 beforeAllowance,) = escrow.authorizedCollectors(msgSender, _verifier); - vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.AuthorizedCollector( - msgSender, // payer - _verifier, // collector - _tokens, // addedAllowance - beforeAllowance + _tokens // newTotalAllowance after the added allowance - ); - escrow.approveCollector(_verifier, _tokens); - (uint256 allowance, uint256 thawEndTimestamp) = escrow.authorizedCollectors(msgSender, _verifier); - assertEq(allowance - beforeAllowance, _tokens); - assertEq(thawEndTimestamp, 0); - } - function _depositTokens(address _collector, address _receiver, uint256 _tokens) internal { (, address msgSender, ) = vm.readCallers(); (uint256 escrowBalanceBefore,,) = escrow.escrowAccounts(msgSender, _collector, _receiver); diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index cd5cc2bfb..e9ad5c2e9 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -7,7 +7,6 @@ abstract contract Constants { uint256 internal constant MAX_STAKING_TOKENS = 10_000_000_000 ether; // GraphEscrow parameters uint256 internal constant withdrawEscrowThawingPeriod = 60; - uint256 internal constant revokeCollectorThawingPeriod = 60; // GraphPayments parameters uint256 internal constant protocolPaymentCut = 10000; // Staking constants diff --git a/packages/subgraph-service/test/SubgraphBaseTest.t.sol b/packages/subgraph-service/test/SubgraphBaseTest.t.sol index 099164473..663442e1f 100644 --- a/packages/subgraph-service/test/SubgraphBaseTest.t.sol +++ b/packages/subgraph-service/test/SubgraphBaseTest.t.sol @@ -113,7 +113,6 @@ abstract contract SubgraphBaseTest is Utils, Constants { vm.getCode("PaymentsEscrow.sol:PaymentsEscrow"), abi.encode( address(controller), - revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod ) )); @@ -174,7 +173,6 @@ abstract contract SubgraphBaseTest is Utils, Constants { ); escrow = new PaymentsEscrow{salt: saltEscrow}( address(controller), - revokeCollectorThawingPeriod, withdrawEscrowThawingPeriod ); diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index b417f30bf..64842b1f2 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -232,7 +232,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { ITAPCollector.SignedRAV memory signedRav = abi.decode(_data, (ITAPCollector.SignedRAV)); allocationId = abi.decode(signedRav.rav.metadata, (address)); allocation = subgraphService.getAllocation(allocationId); - (address payer, ) = tapCollector.authorizedSigners(_recoverRAVSigner(signedRav)); + (address payer, , ) = tapCollector.authorizedSigners(_recoverRAVSigner(signedRav)); // Total amount of tokens collected for indexer uint256 tokensCollected = tapCollector.tokensCollected(address(subgraphService), _indexer, payer); diff --git a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol index 93972679f..65d7e23d7 100644 --- a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol @@ -54,8 +54,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { }); } - function _approveCollector(uint256 tokens) private { - escrow.approveCollector(address(tapCollector), tokens); + function _deposit(uint256 tokens) private { token.approve(address(escrow), tokens); escrow.deposit(address(tapCollector), users.indexer, tokens); } @@ -91,7 +90,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { tokensPayment = bound(tokensPayment, minimumProvisionTokens, maxTokensPayment); resetPrank(users.gateway); - _approveCollector(tokensPayment); + _deposit(tokensPayment); _authorizeSigner(); resetPrank(users.indexer); @@ -108,7 +107,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { uint256 tokensPayment = tokensAllocated / stakeToFeesRatio / numPayments; resetPrank(users.gateway); - _approveCollector(tokensAllocated); + _deposit(tokensAllocated); _authorizeSigner(); resetPrank(users.indexer); diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index 76f864da1..025396ea8 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -21,7 +21,6 @@ abstract contract Constants { uint64 internal constant MAX_WAIT_PERIOD = 28 days; // GraphEscrow parameters uint256 internal constant withdrawEscrowThawingPeriod = 60; - uint256 internal constant revokeCollectorThawingPeriod = 60; // GraphPayments parameters uint256 internal constant protocolPaymentCut = 10000; // RewardsMananger parameters From 86b998ba6d83e388c8c85fd049ca032122cf8df2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 27 Nov 2024 14:43:48 -0300 Subject: [PATCH 300/343] fix: make getBalance return 0 if balance is less than thawing amount (TRST-L10) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IPaymentsEscrow.sol | 1 + .../contracts/payments/PaymentsEscrow.sol | 3 + .../horizon/test/escrow/GraphEscrow.t.sol | 92 +++++++++- packages/horizon/test/escrow/collect.t.sol | 167 +++++++----------- packages/horizon/test/escrow/getters.t.sol | 67 +++++++ packages/horizon/test/escrow/thaw.t.sol | 11 +- 6 files changed, 229 insertions(+), 112 deletions(-) create mode 100644 packages/horizon/test/escrow/getters.t.sol diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 4d7207481..32f83d597 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -199,6 +199,7 @@ interface IPaymentsEscrow { /** * @notice Get the balance of a payer-collector-receiver tuple + * This function will return 0 if the current balance is less than the amount of funds being thawed. * @param payer The address of the payer * @param collector The address of the collector * @param receiver The address of the receiver diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 5643d4a5b..108197fb3 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -157,6 +157,9 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, */ function getBalance(address payer, address collector, address receiver) external view override returns (uint256) { EscrowAccount storage account = escrowAccounts[payer][collector][receiver]; + if (account.balance <= account.tokensThawing) { + return 0; + } return account.balance - account.tokensThawing; } diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index 421bbfdd2..b2c4438bc 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -2,12 +2,13 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; +import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; +import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; import { PaymentsEscrowSharedTest } from "../shared/payments-escrow/PaymentsEscrowShared.t.sol"; contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { - /* * MODIFIERS */ @@ -39,4 +40,91 @@ contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { function _approveEscrow(uint256 tokens) internal { token.approve(address(escrow), tokens); } -} \ No newline at end of file + + function _thawEscrow(address collector, address receiver, uint256 amount) internal { + (, address msgSender, ) = vm.readCallers(); + uint256 expectedThawEndTimestamp = block.timestamp + withdrawEscrowThawingPeriod; + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.Thaw(msgSender, collector, receiver, amount, expectedThawEndTimestamp); + escrow.thaw(collector, receiver, amount); + + (, uint256 amountThawing, uint256 thawEndTimestamp) = escrow.escrowAccounts(msgSender, collector, receiver); + assertEq(amountThawing, amount); + assertEq(thawEndTimestamp, expectedThawEndTimestamp); + } + + struct CollectPaymentData { + uint256 escrowBalance; + uint256 paymentsBalance; + uint256 receiverBalance; + uint256 delegationPoolBalance; + uint256 dataServiceBalance; + } + + function _collectEscrow( + IGraphPayments.PaymentTypes _paymentType, + address _payer, + address _receiver, + uint256 _tokens, + address _dataService, + uint256 _tokensDataService + ) internal { + (, address _collector, ) = vm.readCallers(); + + // Previous balances + (uint256 previousPayerEscrowBalance, , ) = escrow.escrowAccounts(_payer, _collector, _receiver); + CollectPaymentData memory previousBalances = CollectPaymentData({ + escrowBalance: token.balanceOf(address(escrow)), + paymentsBalance: token.balanceOf(address(payments)), + receiverBalance: token.balanceOf(_receiver), + delegationPoolBalance: staking.getDelegatedTokensAvailable(_receiver, _dataService), + dataServiceBalance: token.balanceOf(_dataService) + }); + + vm.expectEmit(address(escrow)); + emit IPaymentsEscrow.EscrowCollected(_payer, _collector, _receiver, _tokens); + escrow.collect(_paymentType, _payer, _receiver, _tokens, _dataService, _tokensDataService); + + // Calculate cuts + uint256 protocolPaymentCut = payments.PROTOCOL_PAYMENT_CUT(); + uint256 delegatorCut = staking.getDelegationFeeCut(_receiver, _dataService, _paymentType); + + // After balances + (uint256 afterPayerEscrowBalance, , ) = escrow.escrowAccounts(_payer, _collector, _receiver); + CollectPaymentData memory afterBalances = CollectPaymentData({ + escrowBalance: token.balanceOf(address(escrow)), + paymentsBalance: token.balanceOf(address(payments)), + receiverBalance: token.balanceOf(_receiver), + delegationPoolBalance: staking.getDelegatedTokensAvailable(_receiver, _dataService), + dataServiceBalance: token.balanceOf(_dataService) + }); + + // Check receiver balance after payment + uint256 receiverExpectedPayment = _tokens - + _tokensDataService - + (_tokens * protocolPaymentCut) / + MAX_PPM - + (_tokens * delegatorCut) / + MAX_PPM; + assertEq(afterBalances.receiverBalance - previousBalances.receiverBalance, receiverExpectedPayment); + assertEq(token.balanceOf(address(payments)), 0); + + // Check delegation pool balance after payment + assertEq( + afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance, + (_tokens * delegatorCut) / MAX_PPM + ); + + // Check that the escrow account has been updated + assertEq(previousBalances.escrowBalance, afterBalances.escrowBalance + _tokens); + + // Check that payments balance didn't change + assertEq(previousBalances.paymentsBalance, afterBalances.paymentsBalance); + + // Check data service balance after payment + assertEq(afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, _tokensDataService); + + // Check payers escrow balance after payment + assertEq(previousPayerEscrowBalance - _tokens, afterPayerEscrowBalance); + } +} diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 254d8738d..711dd7d19 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -5,89 +5,10 @@ import "forge-std/Test.sol"; import { IHorizonStakingMain } from "../../contracts/interfaces/internal/IHorizonStakingMain.sol"; import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; -import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowCollectTest is GraphEscrowTest { - - struct CollectPaymentData { - uint256 escrowBalance; - uint256 paymentsBalance; - uint256 receiverBalance; - uint256 delegationPoolBalance; - uint256 dataServiceBalance; - } - - function _collect( - IGraphPayments.PaymentTypes _paymentType, - address _payer, - address _receiver, - uint256 _tokens, - address _dataService, - uint256 _tokensDataService - ) private { - (, address _collector, ) = vm.readCallers(); - - // Previous balances - (uint256 previousPayerEscrowBalance,,) = escrow.escrowAccounts(_payer, _collector, _receiver); - CollectPaymentData memory previousBalances = CollectPaymentData({ - escrowBalance: token.balanceOf(address(escrow)), - paymentsBalance: token.balanceOf(address(payments)), - receiverBalance: token.balanceOf(_receiver), - delegationPoolBalance: staking.getDelegatedTokensAvailable( - _receiver, - _dataService - ), - dataServiceBalance: token.balanceOf(_dataService) - }); - - vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.EscrowCollected(_payer, _collector, _receiver, _tokens); - escrow.collect(_paymentType, _payer, _receiver, _tokens, _dataService, _tokensDataService); - - // Calculate cuts - uint256 protocolPaymentCut = payments.PROTOCOL_PAYMENT_CUT(); - uint256 delegatorCut = staking.getDelegationFeeCut( - _receiver, - _dataService, - _paymentType - ); - - // After balances - (uint256 afterPayerEscrowBalance,,) = escrow.escrowAccounts(_payer, _collector, _receiver); - CollectPaymentData memory afterBalances = CollectPaymentData({ - escrowBalance: token.balanceOf(address(escrow)), - paymentsBalance: token.balanceOf(address(payments)), - receiverBalance: token.balanceOf(_receiver), - delegationPoolBalance: staking.getDelegatedTokensAvailable( - _receiver, - _dataService - ), - dataServiceBalance: token.balanceOf(_dataService) - }); - - // Check receiver balance after payment - uint256 receiverExpectedPayment = _tokens - _tokensDataService - _tokens * protocolPaymentCut / MAX_PPM - _tokens * delegatorCut / MAX_PPM; - assertEq(afterBalances.receiverBalance - previousBalances.receiverBalance, receiverExpectedPayment); - assertEq(token.balanceOf(address(payments)), 0); - - // Check delegation pool balance after payment - assertEq(afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance, _tokens * delegatorCut / MAX_PPM); - - // Check that the escrow account has been updated - assertEq(previousBalances.escrowBalance, afterBalances.escrowBalance + _tokens); - - // Check that payments balance didn't change - assertEq(previousBalances.paymentsBalance, afterBalances.paymentsBalance); - - // Check data service balance after payment - assertEq(afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, _tokensDataService); - - // Check payers escrow balance after payment - assertEq(previousPayerEscrowBalance - _tokens, afterPayerEscrowBalance); - } - /* * TESTS */ @@ -96,9 +17,14 @@ contract GraphEscrowCollectTest is GraphEscrowTest { uint256 tokens, uint256 delegationTokens, uint256 tokensDataService - ) public useIndexer useProvision(tokens, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { - uint256 tokensProtocol = tokens * protocolPaymentCut / MAX_PPM; - uint256 tokensDelegatoion = tokens * delegationFeeCut / MAX_PPM; + ) + public + useIndexer + useProvision(tokens, 0, 0) + useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) + { + uint256 tokensProtocol = (tokens * protocolPaymentCut) / MAX_PPM; + uint256 tokensDelegatoion = (tokens * delegationFeeCut) / MAX_PPM; vm.assume(tokensDataService < tokens - tokensProtocol - tokensDelegatoion); delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); @@ -109,38 +35,70 @@ contract GraphEscrowCollectTest is GraphEscrowTest { _depositTokens(users.verifier, users.indexer, tokens); resetPrank(users.verifier); - _collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, tokens, subgraphDataServiceAddress, tokensDataService); + _collectEscrow( + IGraphPayments.PaymentTypes.QueryFee, + users.gateway, + users.indexer, + tokens, + subgraphDataServiceAddress, + tokensDataService + ); } function testCollect_RevertWhen_SenderHasInsufficientAmountInEscrow( - uint256 amount, + uint256 amount, uint256 insufficientAmount - ) public useGateway useDeposit(insufficientAmount) { + ) public useGateway useDeposit(insufficientAmount) { vm.assume(amount > 0); vm.assume(insufficientAmount < amount); vm.startPrank(users.verifier); - bytes memory expectedError = abi.encodeWithSignature("PaymentsEscrowInsufficientBalance(uint256,uint256)", insufficientAmount, amount); + bytes memory expectedError = abi.encodeWithSignature( + "PaymentsEscrowInsufficientBalance(uint256,uint256)", + insufficientAmount, + amount + ); vm.expectRevert(expectedError); - escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 0); + escrow.collect( + IGraphPayments.PaymentTypes.QueryFee, + users.gateway, + users.indexer, + amount, + subgraphDataServiceAddress, + 0 + ); vm.stopPrank(); } function testCollect_RevertWhen_InvalidPool( uint256 amount - ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { + ) + public + useIndexer + useProvision(amount, 0, 0) + useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) + { vm.assume(amount > 1 ether); resetPrank(users.gateway); _depositTokens(users.verifier, users.indexer, amount); resetPrank(users.verifier); - vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + vm.expectRevert( + abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + users.indexer, + subgraphDataServiceAddress + ) + ); + escrow.collect( + IGraphPayments.PaymentTypes.QueryFee, + users.gateway, users.indexer, - subgraphDataServiceAddress - )); - escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 1); + amount, + subgraphDataServiceAddress, + 1 + ); } function testCollect_RevertWhen_InvalidProvision( @@ -148,16 +106,25 @@ contract GraphEscrowCollectTest is GraphEscrowTest { ) public useIndexer useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { vm.assume(amount > 1 ether); vm.assume(amount <= MAX_STAKING_TOKENS); - + resetPrank(users.gateway); _depositTokens(users.verifier, users.indexer, amount); resetPrank(users.verifier); - vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidProvision.selector, + vm.expectRevert( + abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidProvision.selector, + users.indexer, + subgraphDataServiceAddress + ) + ); + escrow.collect( + IGraphPayments.PaymentTypes.QueryFee, + users.gateway, users.indexer, - subgraphDataServiceAddress - )); - escrow.collect(IGraphPayments.PaymentTypes.QueryFee, users.gateway, users.indexer, amount, subgraphDataServiceAddress, 1); + amount, + subgraphDataServiceAddress, + 1 + ); } -} \ No newline at end of file +} diff --git a/packages/horizon/test/escrow/getters.t.sol b/packages/horizon/test/escrow/getters.t.sol new file mode 100644 index 000000000..6434e1b30 --- /dev/null +++ b/packages/horizon/test/escrow/getters.t.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; +import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; + +import { GraphEscrowTest } from "./GraphEscrow.t.sol"; + +contract GraphEscrowGettersTest is GraphEscrowTest { + /* + * TESTS + */ + + function testGetBalance(uint256 amount) public useGateway useDeposit(amount) { + uint256 balance = escrow.getBalance(users.gateway, users.verifier, users.indexer); + assertEq(balance, amount); + } + + function testGetBalance_WhenThawing( + uint256 amountDeposit, + uint256 amountThawing + ) public useGateway useDeposit(amountDeposit) { + vm.assume(amountThawing > 0); + vm.assume(amountDeposit >= amountThawing); + + // thaw some funds + _thawEscrow(users.verifier, users.indexer, amountThawing); + + uint256 balance = escrow.getBalance(users.gateway, users.verifier, users.indexer); + assertEq(balance, amountDeposit - amountThawing); + } + + function testGetBalance_WhenCollectedOverThawing( + uint256 amountDeposit, + uint256 amountThawing, + uint256 amountCollected + ) public useGateway useDeposit(amountDeposit) { + vm.assume(amountThawing > 0); + vm.assume(amountDeposit > 0); + vm.assume(amountDeposit >= amountThawing); + vm.assume(amountDeposit >= amountCollected); + vm.assume(amountDeposit - amountCollected < amountThawing); + + // thaw some funds + _thawEscrow(users.verifier, users.indexer, amountThawing); + + // users start with max uint256 balance so we burn to avoid overflow + // TODO: we should modify all tests to consider users have a max balance thats less than max uint256 + resetPrank(users.indexer); + token.burn(amountCollected); + + // collect some funds to get the balance of the account below the amount thawing + resetPrank(users.verifier); + _collectEscrow( + IGraphPayments.PaymentTypes.QueryFee, + users.gateway, + users.indexer, + amountCollected, + subgraphDataServiceAddress, + 0 + ); + + // balance should always be 0 since thawing funds > available funds + uint256 balance = escrow.getBalance(users.gateway, users.verifier, users.indexer); + assertEq(balance, 0); + } +} diff --git a/packages/horizon/test/escrow/thaw.t.sol b/packages/horizon/test/escrow/thaw.t.sol index 8e2674e00..017c3291f 100644 --- a/packages/horizon/test/escrow/thaw.t.sol +++ b/packages/horizon/test/escrow/thaw.t.sol @@ -3,8 +3,6 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; -import { IPaymentsEscrow } from "../../contracts/interfaces/IPaymentsEscrow.sol"; - import { GraphEscrowTest } from "./GraphEscrow.t.sol"; contract GraphEscrowThawTest is GraphEscrowTest { @@ -14,14 +12,7 @@ contract GraphEscrowThawTest is GraphEscrowTest { */ function testThaw_Tokens(uint256 amount) public useGateway useDeposit(amount) { - uint256 expectedThawEndTimestamp = block.timestamp + withdrawEscrowThawingPeriod; - vm.expectEmit(address(escrow)); - emit IPaymentsEscrow.Thaw(users.gateway, users.verifier, users.indexer, amount, expectedThawEndTimestamp); - escrow.thaw(users.verifier, users.indexer, amount); - - (, uint256 amountThawing,uint256 thawEndTimestamp) = escrow.escrowAccounts(users.gateway, users.verifier, users.indexer); - assertEq(amountThawing, amount); - assertEq(thawEndTimestamp, expectedThawEndTimestamp); + _thawEscrow(users.verifier, users.indexer, amount); } function testThaw_RevertWhen_InsufficientThawAmount( From a9bf99c851bbfbc6adc32466f326bd7164fa8b19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 27 Nov 2024 17:26:27 -0300 Subject: [PATCH 301/343] fix: allow partially collecting RAVs (TRST-M05) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/ITAPCollector.sol | 25 ++++ .../payments/collectors/TAPCollector.sol | 119 ++++++++++-------- .../payments/tap-collector/TAPCollector.t.sol | 18 ++- .../tap-collector/collect/collect.t.sol | 56 ++++++++- 4 files changed, 162 insertions(+), 56 deletions(-) diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index b364135c3..347ccf565 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.27; import { IPaymentsCollector } from "./IPaymentsCollector.sol"; +import { IGraphPayments } from "./IGraphPayments.sol"; /** * @title Interface for the {TAPCollector} contract @@ -175,6 +176,13 @@ interface ITAPCollector is IPaymentsCollector { */ error TAPCollectorInconsistentRAVTokens(uint256 tokens, uint256 tokensCollected); + /** + * Thrown when the attempting to collect more tokens than what it's owed + * @param tokensToCollect The amount of tokens to collect + * @param maxTokensToCollect The maximum amount of tokens to collect + */ + error TAPCollectorInvalidTokensToCollectAmount(uint256 tokensToCollect, uint256 maxTokensToCollect); + /** * @notice Authorize a signer to sign on behalf of the payer. * A signer can not be authorized for multiple payers even after revoking previous authorizations. @@ -237,4 +245,21 @@ interface ITAPCollector is IPaymentsCollector { * @return The hash of the RAV. */ function encodeRAV(ReceiptAggregateVoucher calldata rav) external view returns (bytes32); + + /** + * @notice See {IPaymentsCollector.collect} + * This variant adds the ability to partially collect a RAV by specifying the amount of tokens to collect. + * + * Requirements: + * - The amount of tokens to collect must be less than or equal to the total amount of tokens in the RAV minus + * the tokens already collected. + * @param paymentType The payment type to collect + * @param data Additional data required for the payment collection + * @param tokensToCollect The amount of tokens to collect + */ + function collect( + IGraphPayments.PaymentTypes paymentType, + bytes calldata data, + uint256 tokensToCollect + ) external returns (uint256); } diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index a5449e1cc..c98ef68a1 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -125,37 +125,15 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { * @notice REVERT: This function may revert if ECDSA.recover fails, check ECDSA library for details. */ function collect(IGraphPayments.PaymentTypes paymentType, bytes memory data) external override returns (uint256) { - // Ensure caller is the RAV data service - (SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(data, (SignedRAV, uint256)); - require( - signedRAV.rav.dataService == msg.sender, - TAPCollectorCallerNotDataService(msg.sender, signedRAV.rav.dataService) - ); - - // Ensure RAV signer is authorized for a payer - address signer = _recoverRAVSigner(signedRAV); - require( - authorizedSigners[signer].payer != address(0) && !authorizedSigners[signer].revoked, - TAPCollectorInvalidRAVSigner() - ); - - // Ensure RAV payer matches the authorized payer - address payer = signedRAV.rav.payer; - require( - authorizedSigners[signer].payer == payer, - TAPCollectorInvalidRAVPayer(authorizedSigners[signer].payer, payer) - ); - - // Check the service provider has an active provision with the data service - // This prevents an attack where the payer can deny the service provider from collecting payments - // by using a signer as data service to syphon off the tokens in the escrow to an account they control - uint256 tokensAvailable = _graphStaking().getProviderTokensAvailable( - signedRAV.rav.serviceProvider, - signedRAV.rav.dataService - ); - require(tokensAvailable > 0, TAPCollectorUnauthorizedDataService(signedRAV.rav.dataService)); + return _collect(paymentType, data, 0); + } - return _collect(paymentType, authorizedSigners[signer].payer, signedRAV, dataServiceCut); + function collect( + IGraphPayments.PaymentTypes paymentType, + bytes memory data, + uint256 tokensToCollect + ) external override returns (uint256) { + return _collect(paymentType, data, tokensToCollect); } /** @@ -177,28 +155,71 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { */ function _collect( IGraphPayments.PaymentTypes _paymentType, - address _payer, - SignedRAV memory _signedRAV, - uint256 _dataServiceCut + bytes memory _data, + uint256 _tokensToCollect ) private returns (uint256) { - address dataService = _signedRAV.rav.dataService; - address receiver = _signedRAV.rav.serviceProvider; + // Ensure caller is the RAV data service + (SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(_data, (SignedRAV, uint256)); + require( + signedRAV.rav.dataService == msg.sender, + TAPCollectorCallerNotDataService(msg.sender, signedRAV.rav.dataService) + ); + + // Ensure RAV signer is authorized for a payer + address signer = _recoverRAVSigner(signedRAV); + require( + authorizedSigners[signer].payer != address(0) && !authorizedSigners[signer].revoked, + TAPCollectorInvalidRAVSigner() + ); - uint256 tokensRAV = _signedRAV.rav.valueAggregate; - uint256 tokensAlreadyCollected = tokensCollected[dataService][receiver][_payer]; + // Ensure RAV payer matches the authorized payer + address payer = authorizedSigners[signer].payer; require( - tokensRAV > tokensAlreadyCollected, - TAPCollectorInconsistentRAVTokens(tokensRAV, tokensAlreadyCollected) + signedRAV.rav.payer == payer, + TAPCollectorInvalidRAVPayer(payer, signedRAV.rav.payer) ); - uint256 tokensToCollect = tokensRAV - tokensAlreadyCollected; - uint256 tokensDataService = tokensToCollect.mulPPM(_dataServiceCut); + address dataService = signedRAV.rav.dataService; + address receiver = signedRAV.rav.serviceProvider; + + // Check the service provider has an active provision with the data service + // This prevents an attack where the payer can deny the service provider from collecting payments + // by using a signer as data service to syphon off the tokens in the escrow to an account they control + { + uint256 tokensAvailable = _graphStaking().getProviderTokensAvailable( + signedRAV.rav.serviceProvider, + signedRAV.rav.dataService + ); + require(tokensAvailable > 0, TAPCollectorUnauthorizedDataService(signedRAV.rav.dataService)); + } + + uint256 tokensToCollect = 0; + { + uint256 tokensRAV = signedRAV.rav.valueAggregate; + uint256 tokensAlreadyCollected = tokensCollected[dataService][receiver][payer]; + require( + tokensRAV > tokensAlreadyCollected, + TAPCollectorInconsistentRAVTokens(tokensRAV, tokensAlreadyCollected) + ); + + if (_tokensToCollect == 0) { + tokensToCollect = tokensRAV - tokensAlreadyCollected; + } else { + require( + _tokensToCollect <= tokensRAV - tokensAlreadyCollected, + TAPCollectorInvalidTokensToCollectAmount(_tokensToCollect, tokensRAV - tokensAlreadyCollected) + ); + tokensToCollect = _tokensToCollect; + } + } + + uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); if (tokensToCollect > 0) { - tokensCollected[dataService][receiver][_payer] = tokensRAV; + tokensCollected[dataService][receiver][payer] += tokensToCollect; _graphPaymentsEscrow().collect( _paymentType, - _payer, + payer, receiver, tokensToCollect, dataService, @@ -206,15 +227,15 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { ); } - emit PaymentCollected(_paymentType, _payer, receiver, tokensToCollect, dataService, tokensDataService); + emit PaymentCollected(_paymentType, payer, receiver, tokensToCollect, dataService, tokensDataService); emit RAVCollected( - _payer, + payer, dataService, receiver, - _signedRAV.rav.timestampNs, - _signedRAV.rav.valueAggregate, - _signedRAV.rav.metadata, - _signedRAV.signature + signedRAV.rav.timestampNs, + signedRAV.rav.valueAggregate, + signedRAV.rav.metadata, + signedRAV.signature ); return tokensToCollect; } diff --git a/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol b/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol index 1120c5b92..ac67d6552 100644 --- a/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol +++ b/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol @@ -119,12 +119,20 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest } function _collect(IGraphPayments.PaymentTypes _paymentType, bytes memory _data) internal { + __collect(_paymentType, _data, 0); + } + + function _collect(IGraphPayments.PaymentTypes _paymentType, bytes memory _data, uint256 _tokensToCollect) internal { + __collect(_paymentType, _data, _tokensToCollect); + } + + function __collect(IGraphPayments.PaymentTypes _paymentType, bytes memory _data, uint256 _tokensToCollect) internal { (ITAPCollector.SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(_data, (ITAPCollector.SignedRAV, uint256)); bytes32 messageHash = tapCollector.encodeRAV(signedRAV.rav); address _signer = ECDSA.recover(messageHash, signedRAV.signature); (address _payer, , ) = tapCollector.authorizedSigners(_signer); uint256 tokensAlreadyCollected = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); - uint256 tokensToCollect = signedRAV.rav.valueAggregate - tokensAlreadyCollected; + uint256 tokensToCollect = _tokensToCollect == 0 ? signedRAV.rav.valueAggregate - tokensAlreadyCollected : _tokensToCollect; uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); vm.expectEmit(address(tapCollector)); @@ -136,6 +144,7 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest signedRAV.rav.dataService, tokensDataService ); + vm.expectEmit(address(tapCollector)); emit ITAPCollector.RAVCollected( _payer, signedRAV.rav.dataService, @@ -145,11 +154,10 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest signedRAV.rav.metadata, signedRAV.signature ); - - uint256 tokensCollected = tapCollector.collect(_paymentType, _data); - assertEq(tokensCollected, tokensToCollect); + uint256 tokensCollected = _tokensToCollect == 0 ? tapCollector.collect(_paymentType, _data) : tapCollector.collect(_paymentType, _data, _tokensToCollect); uint256 tokensCollectedAfter = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); - assertEq(tokensCollectedAfter, signedRAV.rav.valueAggregate); + assertEq(tokensCollected, tokensToCollect); + assertEq(tokensCollectedAfter, _tokensToCollect == 0 ? signedRAV.rav.valueAggregate : tokensAlreadyCollected + _tokensToCollect); } } diff --git a/packages/horizon/test/payments/tap-collector/collect/collect.t.sol b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol index ddb76b919..a4e1eafa7 100644 --- a/packages/horizon/test/payments/tap-collector/collect/collect.t.sol +++ b/packages/horizon/test/payments/tap-collector/collect/collect.t.sol @@ -203,11 +203,12 @@ contract TAPCollectorCollectTest is TAPCollectorTest { tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data); } - function testTAPCollector_Collect_RevertWhen_PayerMismatch(uint256 tokens) public useGateway useSigner { + function testTAPCollector_Collect_RevertWhen_PayerMismatch( + uint256 tokens + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { tokens = bound(tokens, 1, type(uint128).max); resetPrank(users.gateway); - _approveCollector(address(tapCollector), tokens); _depositTokens(address(tapCollector), users.indexer, tokens); (address anotherPayer, ) = makeAddrAndKey("anotherPayer"); @@ -340,4 +341,55 @@ contract TAPCollectorCollectTest is TAPCollectorTest { resetPrank(users.verifier); _collect(IGraphPayments.PaymentTypes.QueryFee, data); } + + function testTAPCollector_CollectPartial( + uint256 tokens, + uint256 tokensToCollect + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max); + tokensToCollect = bound(tokensToCollect, 1, tokens); + + _depositTokens(address(tapCollector), users.indexer, tokens); + + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); + + resetPrank(users.verifier); + _collect(IGraphPayments.PaymentTypes.QueryFee, data, tokensToCollect); + } + + function testTAPCollector_CollectPartial_RevertWhen_AmountTooHigh( + uint256 tokens, + uint256 tokensToCollect + ) public useIndexer useProvisionDataService(users.verifier, 100, 0, 0) useGateway useSigner { + tokens = bound(tokens, 1, type(uint128).max - 1); + + _depositTokens(address(tapCollector), users.indexer, tokens); + + bytes memory data = _getQueryFeeEncodedData( + signerPrivateKey, + users.gateway, + users.indexer, + users.verifier, + uint128(tokens) + ); + + resetPrank(users.verifier); + uint256 tokensAlreadyCollected = tapCollector.tokensCollected(users.verifier, users.indexer, users.gateway); + tokensToCollect = bound(tokensToCollect, tokens - tokensAlreadyCollected + 1, type(uint128).max); + + vm.expectRevert( + abi.encodeWithSelector( + ITAPCollector.TAPCollectorInvalidTokensToCollectAmount.selector, + tokensToCollect, + tokens - tokensAlreadyCollected + ) + ); + tapCollector.collect(IGraphPayments.PaymentTypes.QueryFee, data, tokensToCollect); + } } From 670fba7cf1538e30a5b38465c51ed30402310e41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 28 Nov 2024 12:28:49 -0300 Subject: [PATCH 302/343] fix: subgraph service test broke after rebase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../test/subgraphService/collect/query/query.t.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol index 65d7e23d7..d42c36f65 100644 --- a/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol +++ b/packages/subgraph-service/test/subgraphService/collect/query/query.t.sol @@ -46,6 +46,7 @@ contract SubgraphServiceRegisterTest is SubgraphServiceTest { ) private view returns (ITAPCollector.ReceiptAggregateVoucher memory rav) { return ITAPCollector.ReceiptAggregateVoucher({ + payer: users.gateway, dataService: address(subgraphService), serviceProvider: indexer, timestampNs: 0, From 7efedcce90806eb10c1c48e22ffb4d27c817df4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Thu, 28 Nov 2024 16:12:55 -0300 Subject: [PATCH 303/343] fix: overallocated condition no longer allows force closing (TRST-H05) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/SubgraphService.sol | 6 +- .../contracts/interfaces/ISubgraphService.sol | 12 ++-- .../subgraphService/SubgraphService.t.sol | 4 +- .../allocation/forceClose.t.sol | 68 +++---------------- 4 files changed, 20 insertions(+), 70 deletions(-) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index a07463a25..89986b87f 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -312,11 +312,9 @@ contract SubgraphService is /** * @notice See {ISubgraphService.closeStaleAllocation} */ - function forceCloseAllocation(address allocationId) external override { + function closeStaleAllocation(address allocationId) external override { Allocation.State memory allocation = allocations.get(allocationId); - bool isStale = allocation.isStale(maxPOIStaleness); - bool isOverAllocated_ = _isOverAllocated(allocation.indexer, delegationRatio); - require(isStale || isOverAllocated_, SubgraphServiceCannotForceCloseAllocation(allocationId)); + require(allocation.isStale(maxPOIStaleness), SubgraphServiceCannotForceCloseAllocation(allocationId)); require(!allocation.isAltruistic(), SubgraphServiceAllocationIsAltruistic(allocationId)); _closeAllocation(allocationId); } diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 32ea9e8fb..e33cdb209 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -127,22 +127,20 @@ interface ISubgraphService is IDataServiceFees { error SubgraphServiceInvalidZeroStakeToFeesRatio(); /** - * @notice Force close an allocation - * @dev This function can be permissionlessly called when the allocation is stale or - * if the indexer is over-allocated. This ensures that rewards for other allocations are - * not diluted by an inactive allocation, and that over-allocated indexers stop accumulating - * rewards with tokens they no longer have allocated. + * @notice Force close a stale allocation + * @dev This function can be permissionlessly called when the allocation is stale. This + * ensures that rewards for other allocations are not diluted by an inactive allocation. * * Requirements: * - Allocation must exist and be open - * - Allocation must be stale or indexer must be over-allocated + * - Allocation must be stale * - Allocation cannot be altruistic * * Emits a {AllocationClosed} event. * * @param allocationId The id of the allocation */ - function forceCloseAllocation(address allocationId) external; + function closeStaleAllocation(address allocationId) external; /** * @notice Change the amount of tokens in an allocation diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index b417f30bf..19fdf8dc8 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -151,7 +151,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { assertEq(afterSubgraphAllocatedTokens, _tokens); } - function _forceCloseAllocation(address _allocationId) internal { + function _closeStaleAllocation(address _allocationId) internal { assertTrue(subgraphService.isActiveAllocation(_allocationId)); Allocation.State memory allocation = subgraphService.getAllocation(_allocationId); @@ -168,7 +168,7 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { ); // close stale allocation - subgraphService.forceCloseAllocation(_allocationId); + subgraphService.closeStaleAllocation(_allocationId); // update allocation allocation = subgraphService.getAllocation(_allocationId); diff --git a/packages/subgraph-service/test/subgraphService/allocation/forceClose.t.sol b/packages/subgraph-service/test/subgraphService/allocation/forceClose.t.sol index 8817355f6..5b35f8d4e 100644 --- a/packages/subgraph-service/test/subgraphService/allocation/forceClose.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/forceClose.t.sol @@ -3,38 +3,30 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; -import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; -import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; -import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; import { Allocation } from "../../../contracts/libraries/Allocation.sol"; -import { AllocationManager } from "../../../contracts/utilities/AllocationManager.sol"; import { ISubgraphService } from "../../../contracts/interfaces/ISubgraphService.sol"; -import { LegacyAllocation } from "../../../contracts/libraries/LegacyAllocation.sol"; import { SubgraphServiceTest } from "../SubgraphService.t.sol"; contract SubgraphServiceAllocationForceCloseTest is SubgraphServiceTest { - address private permissionlessBob = makeAddr("permissionlessBob"); /* * TESTS */ - function test_SubgraphService_Allocation_ForceClose_Stale( - uint256 tokens - ) public useIndexer useAllocation(tokens) { + function test_SubgraphService_Allocation_ForceClose_Stale(uint256 tokens) public useIndexer useAllocation(tokens) { // Skip forward skip(maxPOIStaleness + 1); resetPrank(permissionlessBob); - _forceCloseAllocation(allocationID); + _closeStaleAllocation(allocationID); } function test_SubgraphService_Allocation_ForceClose_Stale_AfterCollecting( uint256 tokens - ) public useIndexer useAllocation(tokens) { + ) public useIndexer useAllocation(tokens) { // Simulate POIs being submitted uint8 numberOfPOIs = 5; uint256 timeBetweenPOIs = 5 days; @@ -52,43 +44,10 @@ contract SubgraphServiceAllocationForceCloseTest is SubgraphServiceTest { // Close the stale allocation resetPrank(permissionlessBob); - _forceCloseAllocation(allocationID); - } - - function test_SubgraphService_Allocation_ForceClose_OverAllocated( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - // thaw some tokens to become over allocated - staking.thaw(users.indexer, address(subgraphService), tokens / 2); - - resetPrank(permissionlessBob); - _forceCloseAllocation(allocationID); - } - - function test_SubgraphService_Allocation_ForceClose_OverAllocated_AfterCollecting( - uint256 tokens - ) public useIndexer useAllocation(tokens) { - // Simulate POIs being submitted - uint8 numberOfPOIs = 5; - uint256 timeBetweenPOIs = 5 days; - - for (uint8 i = 0; i < numberOfPOIs; i++) { - // Skip forward - skip(timeBetweenPOIs); - - bytes memory data = abi.encode(allocationID, bytes32("POI1")); - _collect(users.indexer, IGraphPayments.PaymentTypes.IndexingRewards, data); - } - - // thaw some tokens to become over allocated - staking.thaw(users.indexer, address(subgraphService), tokens / 2); - - // Close the over allocated allocation - resetPrank(permissionlessBob); - _forceCloseAllocation(allocationID); + _closeStaleAllocation(allocationID); } - function test_SubgraphService_Allocation_ForceClose_RevertIf_NotStaleOrOverAllocated( + function test_SubgraphService_Allocation_ForceClose_RevertIf_NotStale( uint256 tokens ) public useIndexer useAllocation(tokens) { // Simulate POIs being submitted @@ -98,12 +57,12 @@ contract SubgraphServiceAllocationForceCloseTest is SubgraphServiceTest { for (uint8 i = 0; i < numberOfPOIs; i++) { // Skip forward skip(timeBetweenPOIs); - + resetPrank(users.indexer); bytes memory data = abi.encode(allocationID, bytes32("POI1")); _collect(users.indexer, IGraphPayments.PaymentTypes.IndexingRewards, data); - + resetPrank(permissionlessBob); vm.expectRevert( abi.encodeWithSelector( @@ -111,13 +70,11 @@ contract SubgraphServiceAllocationForceCloseTest is SubgraphServiceTest { allocationID ) ); - subgraphService.forceCloseAllocation(allocationID); + subgraphService.closeStaleAllocation(allocationID); } } - function test_SubgraphService_Allocation_ForceClose_RevertIf_Altruistic( - uint256 tokens - ) public useIndexer { + function test_SubgraphService_Allocation_ForceClose_RevertIf_Altruistic(uint256 tokens) public useIndexer { tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); @@ -130,11 +87,8 @@ contract SubgraphServiceAllocationForceCloseTest is SubgraphServiceTest { resetPrank(permissionlessBob); vm.expectRevert( - abi.encodeWithSelector( - ISubgraphService.SubgraphServiceAllocationIsAltruistic.selector, - allocationID - ) + abi.encodeWithSelector(ISubgraphService.SubgraphServiceAllocationIsAltruistic.selector, allocationID) ); - subgraphService.forceCloseAllocation(allocationID); + subgraphService.closeStaleAllocation(allocationID); } } From 9a9f53b9ae8181b8ab992a486bc0afc8a1f1258b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 29 Nov 2024 13:41:10 -0300 Subject: [PATCH 304/343] fix: use staking contract to check for allo collision (TRST-M06) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/libraries/LegacyAllocation.sol | 24 ++++--- .../contracts/utilities/AllocationManager.sol | 2 +- .../test/shared/HorizonStakingShared.t.sol | 67 ++++++++++++++++++- .../subgraphService/SubgraphService.t.sol | 11 +++ .../subgraphService/allocation/start.t.sol | 36 +++++++--- .../subgraphService/governance/legacy.t.sol | 23 +++++++ 6 files changed, 139 insertions(+), 24 deletions(-) create mode 100644 packages/subgraph-service/test/subgraphService/governance/legacy.t.sol diff --git a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol index c60783785..3f17c1cef 100644 --- a/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol +++ b/packages/subgraph-service/contracts/libraries/LegacyAllocation.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.27; +import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol"; + /** * @title LegacyAllocation library * @notice A library to handle legacy Allocations. @@ -22,7 +24,7 @@ library LegacyAllocation { * @notice Thrown when attempting to migrate an allocation with an existing id * @param allocationId The allocation id */ - error LegacyAllocationExists(address allocationId); + error LegacyAllocationAlreadyExists(address allocationId); /** * @notice Thrown when trying to get a non-existent allocation @@ -30,12 +32,6 @@ library LegacyAllocation { */ error LegacyAllocationDoesNotExist(address allocationId); - /** - * @notice Thrown when trying to migrate an allocation that has already been migrated - * @param allocationId The allocation id - */ - error LegacyAllocationAlreadyMigrated(address allocationId); - /** * @notice Migrate a legacy allocation * @dev Requirements: @@ -52,7 +48,7 @@ library LegacyAllocation { address allocationId, bytes32 subgraphDeploymentId ) internal { - require(!self[allocationId].exists(), LegacyAllocationAlreadyMigrated(allocationId)); + require(!self[allocationId].exists(), LegacyAllocationAlreadyExists(allocationId)); State memory allocation = State({ indexer: indexer, subgraphDeploymentId: subgraphDeploymentId }); self[allocationId] = allocation; @@ -69,11 +65,19 @@ library LegacyAllocation { /** * @notice Revert if a legacy allocation exists + * @dev We first check the migrated mapping then the old staking contract. + * @dev TODO: after the transition period when all the allocations are migrated we can + * remove the call to the staking contract. * @param self The legacy allocation list mapping * @param allocationId The allocation id */ - function revertIfExists(mapping(address => State) storage self, address allocationId) internal view { - require(!self[allocationId].exists(), LegacyAllocationExists(allocationId)); + function revertIfExists( + mapping(address => State) storage self, + IHorizonStaking graphStaking, + address allocationId + ) internal view { + require(!self[allocationId].exists(), LegacyAllocationAlreadyExists(allocationId)); + require(!graphStaking.isAllocation(allocationId), LegacyAllocationAlreadyExists(allocationId)); } /** diff --git a/packages/subgraph-service/contracts/utilities/AllocationManager.sol b/packages/subgraph-service/contracts/utilities/AllocationManager.sol index 669cd9bf8..87e8ebcc8 100644 --- a/packages/subgraph-service/contracts/utilities/AllocationManager.sol +++ b/packages/subgraph-service/contracts/utilities/AllocationManager.sol @@ -212,7 +212,7 @@ abstract contract AllocationManager is EIP712Upgradeable, GraphDirectory, Alloca // Ensure allocation id is not reused // need to check both subgraph service (on allocations.create()) and legacy allocations - legacyAllocations.revertIfExists(_allocationId); + legacyAllocations.revertIfExists(_graphStaking(), _allocationId); Allocation.State memory allocation = allocations.create( _indexer, _allocationId, diff --git a/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol b/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol index e07516903..abe425793 100644 --- a/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol +++ b/packages/subgraph-service/test/shared/HorizonStakingShared.t.sol @@ -5,11 +5,11 @@ import "forge-std/Test.sol"; import { IGraphPayments } from "@graphprotocol/horizon/contracts/interfaces/IGraphPayments.sol"; import { IHorizonStakingTypes } from "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol"; +import { IHorizonStakingExtension } from "@graphprotocol/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol"; import { SubgraphBaseTest } from "../SubgraphBaseTest.t.sol"; abstract contract HorizonStakingSharedTest is SubgraphBaseTest { - /* * HELPERS */ @@ -45,11 +45,11 @@ abstract contract HorizonStakingSharedTest is SubgraphBaseTest { function _thawDeprovisionAndUnstake(address _indexer, address _verifier, uint256 _tokens) internal { // Initiate thaw request staking.thaw(_indexer, _verifier, _tokens); - + // Skip thawing period IHorizonStakingTypes.Provision memory provision = staking.getProvision(_indexer, _verifier); skip(provision.thawingPeriod + 1); - + // Deprovision and unstake staking.deprovision(_indexer, _verifier, 0); staking.unstake(_tokens); @@ -64,6 +64,67 @@ abstract contract HorizonStakingSharedTest is SubgraphBaseTest { staking.setProvisionParameters(_indexer, _verifier, _maxVerifierCut, _thawingPeriod); } + function _setStorage_allocation_hardcoded(address indexer, address allocationId, uint256 tokens) internal { + IHorizonStakingExtension.Allocation memory allocation = IHorizonStakingExtension.Allocation({ + indexer: indexer, + subgraphDeploymentID: bytes32("0x12344321"), + tokens: tokens, + createdAtEpoch: 1234, + closedAtEpoch: 1235, + collectedFees: 1234, + __DEPRECATED_effectiveAllocation: 1222234, + accRewardsPerAllocatedToken: 1233334, + distributedRebates: 1244434 + }); + + // __DEPRECATED_allocations + uint256 allocationsSlot = 15; + bytes32 allocationBaseSlot = keccak256(abi.encode(allocationId, allocationsSlot)); + vm.store(address(staking), allocationBaseSlot, bytes32(uint256(uint160(allocation.indexer)))); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 1), allocation.subgraphDeploymentID); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 2), bytes32(tokens)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 3), bytes32(allocation.createdAtEpoch)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 4), bytes32(allocation.closedAtEpoch)); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 5), bytes32(allocation.collectedFees)); + vm.store( + address(staking), + bytes32(uint256(allocationBaseSlot) + 6), + bytes32(allocation.__DEPRECATED_effectiveAllocation) + ); + vm.store( + address(staking), + bytes32(uint256(allocationBaseSlot) + 7), + bytes32(allocation.accRewardsPerAllocatedToken) + ); + vm.store(address(staking), bytes32(uint256(allocationBaseSlot) + 8), bytes32(allocation.distributedRebates)); + + // _serviceProviders + uint256 serviceProviderSlot = 14; + bytes32 serviceProviderBaseSlot = keccak256(abi.encode(allocation.indexer, serviceProviderSlot)); + uint256 currentTokensStaked = uint256(vm.load(address(staking), serviceProviderBaseSlot)); + uint256 currentTokensProvisioned = uint256( + vm.load(address(staking), bytes32(uint256(serviceProviderBaseSlot) + 1)) + ); + vm.store( + address(staking), + bytes32(uint256(serviceProviderBaseSlot) + 0), + bytes32(currentTokensStaked + tokens) + ); + vm.store( + address(staking), + bytes32(uint256(serviceProviderBaseSlot) + 1), + bytes32(currentTokensProvisioned + tokens) + ); + + // __DEPRECATED_subgraphAllocations + uint256 subgraphsAllocationsSlot = 16; + bytes32 subgraphAllocationsBaseSlot = keccak256( + abi.encode(allocation.subgraphDeploymentID, subgraphsAllocationsSlot) + ); + uint256 currentAllocatedTokens = uint256(vm.load(address(staking), subgraphAllocationsBaseSlot)); + vm.store(address(staking), subgraphAllocationsBaseSlot, bytes32(currentAllocatedTokens + tokens)); + } + /* * PRIVATE */ diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 19fdf8dc8..cf9faae14 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -379,6 +379,17 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { } } + function _migrateLegacyAllocation(address _indexer, address _allocationId, bytes32 _subgraphDeploymentID) internal { + vm.expectEmit(address(subgraphService)); + emit AllocationManager.LegacyAllocationMigrated(_indexer, _allocationId, _subgraphDeploymentID); + + subgraphService.migrateLegacyAllocation(_indexer, _allocationId, _subgraphDeploymentID); + + (address afterIndexer, bytes32 afterSubgraphDeploymentId) = subgraphService.legacyAllocations(_allocationId); + assertEq(afterIndexer, _indexer); + assertEq(afterSubgraphDeploymentId, _subgraphDeploymentID); + } + /* * HELPERS */ diff --git a/packages/subgraph-service/test/subgraphService/allocation/start.t.sol b/packages/subgraph-service/test/subgraphService/allocation/start.t.sol index f5d76a350..a7df1f1a8 100644 --- a/packages/subgraph-service/test/subgraphService/allocation/start.t.sol +++ b/packages/subgraph-service/test/subgraphService/allocation/start.t.sol @@ -4,7 +4,6 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import { IDataService } from "@graphprotocol/horizon/contracts/data-service/interfaces/IDataService.sol"; import { ProvisionManager } from "@graphprotocol/horizon/contracts/data-service/utilities/ProvisionManager.sol"; import { ProvisionTracker } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionTracker.sol"; @@ -137,35 +136,52 @@ contract SubgraphServiceAllocationStartTest is SubgraphServiceTest { subgraphService.startService(users.indexer, data); } - function test_SubgraphService_Allocation_Start_RevertWhen_ArealdyExists(uint256 tokens) public useIndexer { + function test_SubgraphService_Allocation_Start_RevertWhen_AlreadyExists_SubgraphService(uint256 tokens) public useIndexer { tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); _register(users.indexer, abi.encode("url", "geoHash", address(0))); - bytes32 slot = keccak256(abi.encode(allocationID, uint256(158))); - vm.store(address(subgraphService), slot, bytes32(uint256(uint160(users.indexer)))); - vm.store(address(subgraphService), bytes32(uint256(slot) + 1), subgraphDeployment); - bytes memory data = _generateData(tokens); + _startService(users.indexer, data); + vm.expectRevert(abi.encodeWithSelector( - LegacyAllocation.LegacyAllocationExists.selector, + Allocation.AllocationAlreadyExists.selector, allocationID )); subgraphService.startService(users.indexer, data); } - function test_SubgraphService_Allocation_Start_RevertWhen_ReusingAllocationId(uint256 tokens) public useIndexer { + function test_SubgraphService_Allocation_Start_RevertWhen_AlreadyExists_Migrated(uint256 tokens) public useIndexer { tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); _register(users.indexer, abi.encode("url", "geoHash", address(0))); + resetPrank(users.governor); + _migrateLegacyAllocation(users.indexer, allocationID, subgraphDeployment); + + resetPrank(users.indexer); bytes memory data = _generateData(tokens); - _startService(users.indexer, data); + vm.expectRevert(abi.encodeWithSelector( + LegacyAllocation.LegacyAllocationAlreadyExists.selector, + allocationID + )); + subgraphService.startService(users.indexer, data); + } + + function test_SubgraphService_Allocation_Start_RevertWhen_AlreadyExists_Staking(uint256 tokens) public useIndexer { + tokens = bound(tokens, minimumProvisionTokens, MAX_TOKENS); + _createProvision(users.indexer, tokens, maxSlashingPercentage, disputePeriod); + _register(users.indexer, abi.encode("url", "geoHash", address(0))); + + // create dummy allo in staking contract + _setStorage_allocation_hardcoded(users.indexer, allocationID, tokens); + + bytes memory data = _generateData(tokens); vm.expectRevert(abi.encodeWithSelector( - Allocation.AllocationAlreadyExists.selector, + LegacyAllocation.LegacyAllocationAlreadyExists.selector, allocationID )); subgraphService.startService(users.indexer, data); diff --git a/packages/subgraph-service/test/subgraphService/governance/legacy.t.sol b/packages/subgraph-service/test/subgraphService/governance/legacy.t.sol new file mode 100644 index 000000000..d1b5dd124 --- /dev/null +++ b/packages/subgraph-service/test/subgraphService/governance/legacy.t.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +import { SubgraphServiceTest } from "../SubgraphService.t.sol"; + +contract SubgraphServiceLegacyAllocation is SubgraphServiceTest { + /* + * TESTS + */ + + function test_MigrateAllocation() public useGovernor { + _migrateLegacyAllocation(users.indexer, allocationID, subgraphDeployment); + } + + function test_MigrateAllocation_WhenNotGovernor() public useIndexer { + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, users.indexer)); + subgraphService.migrateLegacyAllocation(users.indexer, allocationID, subgraphDeployment); + } +} From d02f410eb0c3967e9b6f80e36a1a5bde43492941 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 29 Nov 2024 18:17:15 -0300 Subject: [PATCH 305/343] fix: separate delegation and delegationWithBeneficiary thaw requests (TRST-H03) --- .../internal/IHorizonStakingBase.sol | 5 + .../internal/IHorizonStakingMain.sol | 24 +- .../internal/IHorizonStakingTypes.sol | 3 +- .../contracts/staking/HorizonStaking.sol | 57 ++- .../contracts/staking/HorizonStakingBase.sol | 19 +- .../staking/HorizonStakingStorage.sol | 18 +- .../HorizonStakingShared.t.sol | 382 ++++++++++-------- .../test/staking/delegation/undelegate.t.sol | 4 +- .../test/staking/delegation/withdraw.t.sol | 6 +- 9 files changed, 327 insertions(+), 191 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol index 32e476298..0145dac16 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingBase.sol @@ -24,6 +24,11 @@ interface IHorizonStakingBase { */ event StakeDeposited(address indexed serviceProvider, uint256 tokens); + /** + * @notice Thrown when using an invalid thaw request type. + */ + error HorizonStakingInvalidThawRequestType(); + /** * @notice Gets the details of a service provider. * @param serviceProvider The address of the service provider. diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index b144b0ce6..9122153c5 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -747,7 +747,7 @@ interface IHorizonStakingMain { * @param beneficiary The address where the tokens will be withdrawn after thawing * @return The ID of the thaw request */ - function undelegate( + function undelegateWithBeneficiary( address serviceProvider, address verifier, uint256 shares, @@ -772,6 +772,28 @@ interface IHorizonStakingMain { */ function withdrawDelegated(address serviceProvider, address verifier, uint256 nThawRequests) external; + /** + * @notice Withdraw undelegated with beneficiary tokens from a provision after thawing. + * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw + * requests in the event that fulfilling all of them results in a gas limit error. + * @dev If the delegation pool was completely slashed before withdrawing, calling this function will fulfill + * the thaw requests with an amount equal to zero. + * + * Requirements: + * - Must have previously initiated a thaw request using {undelegateWithBeneficiary}. + * + * Emits {ThawRequestFulfilled}, {ThawRequestsFulfilled} and {DelegatedTokensWithdrawn} events. + * + * @param serviceProvider The service provider address + * @param verifier The verifier address + * @param nThawRequests The number of thaw requests to fulfill. Set to 0 to fulfill all thaw requests. + */ + function withdrawDelegatedWithBeneficiary( + address serviceProvider, + address verifier, + uint256 nThawRequests + ) external; + /** * @notice Re-delegate undelegated tokens from a provision after thawing to a `newServiceProvider` and `newVerifier`. * @dev The parameter `nThawRequests` can be set to a non zero value to fulfill a specific number of thaw diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index 8aff1a6e0..9da150d0f 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -138,7 +138,8 @@ interface IHorizonStakingTypes { */ enum ThawRequestType { Provision, - Delegation + Delegation, + DelegationWithBeneficiary } /** diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 4ad8136c4..0e9e4bba2 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -297,20 +297,20 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, uint256 shares ) external override notPaused returns (bytes32) { - return _undelegate(serviceProvider, verifier, shares, msg.sender); + return _undelegate(ThawRequestType.Delegation, serviceProvider, verifier, shares, msg.sender); } /** * @notice See {IHorizonStakingMain-undelegate}. */ - function undelegate( + function undelegateWithBeneficiary( address serviceProvider, address verifier, uint256 shares, address beneficiary ) external override notPaused returns (bytes32) { require(beneficiary != address(0), HorizonStakingInvalidBeneficiaryZeroAddress()); - return _undelegate(serviceProvider, verifier, shares, beneficiary); + return _undelegate(ThawRequestType.DelegationWithBeneficiary, serviceProvider, verifier, shares, beneficiary); } /** @@ -321,7 +321,34 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { address verifier, uint256 nThawRequests ) external override notPaused { - _withdrawDelegated(serviceProvider, verifier, address(0), address(0), 0, nThawRequests); + _withdrawDelegated( + ThawRequestType.Delegation, + serviceProvider, + verifier, + address(0), + address(0), + 0, + nThawRequests + ); + } + + /** + * @notice See {IHorizonStakingMain-withdrawDelegatedWithBeneficiary}. + */ + function withdrawDelegatedWithBeneficiary( + address serviceProvider, + address verifier, + uint256 nThawRequests + ) external override notPaused { + _withdrawDelegated( + ThawRequestType.DelegationWithBeneficiary, + serviceProvider, + verifier, + address(0), + address(0), + 0, + nThawRequests + ); } /** @@ -338,6 +365,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { require(newServiceProvider != address(0), HorizonStakingInvalidServiceProviderZeroAddress()); require(newVerifier != address(0), HorizonStakingInvalidVerifierZeroAddress()); _withdrawDelegated( + ThawRequestType.Delegation, oldServiceProvider, oldVerifier, newServiceProvider, @@ -374,7 +402,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice See {IHorizonStakingMain-undelegate}. */ function undelegate(address serviceProvider, uint256 shares) external override notPaused { - _undelegate(serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares, msg.sender); + _undelegate(ThawRequestType.Delegation, serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, shares, msg.sender); } /** @@ -382,6 +410,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { */ function withdrawDelegated(address serviceProvider, address newServiceProvider) external override notPaused { _withdrawDelegated( + ThawRequestType.Delegation, serviceProvider, SUBGRAPH_DATA_SERVICE_ADDRESS, newServiceProvider, @@ -837,6 +866,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * that were not thawing will be preserved. */ function _undelegate( + ThawRequestType _requestType, address _serviceProvider, address _verifier, uint256 _shares, @@ -864,7 +894,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { delegation.shares = delegation.shares - _shares; bytes32 thawRequestId = _createThawRequest( - ThawRequestType.Delegation, + _requestType, _serviceProvider, _verifier, _beneficiary, @@ -881,6 +911,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @notice See {IHorizonStakingMain-withdrawDelegated}. */ function _withdrawDelegated( + ThawRequestType _requestType, address _serviceProvider, address _verifier, address _newServiceProvider, @@ -901,7 +932,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokensThawing = pool.tokensThawing; FulfillThawRequestsParams memory params = FulfillThawRequestsParams({ - requestType: ThawRequestType.Delegation, + requestType: _requestType, serviceProvider: _serviceProvider, verifier: _verifier, owner: msg.sender, @@ -1082,8 +1113,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { return _deleteProvisionThawRequest; } else if (_requestType == ThawRequestType.Delegation) { return _deleteDelegationThawRequest; + } else if (_requestType == ThawRequestType.DelegationWithBeneficiary) { + return _deleteDelegationWithBeneficiaryThawRequest; } else { - revert("Unknown ThawRequestType"); + revert HorizonStakingInvalidThawRequestType(); } } @@ -1103,6 +1136,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { delete _delegationThawRequests[_thawRequestId]; } + /** + * @notice Deletes a thaw request for a delegation with a beneficiary. + * @param _thawRequestId The ID of the thaw request to delete. + */ + function _deleteDelegationWithBeneficiaryThawRequest(bytes32 _thawRequestId) private { + delete _delegationWithBeneficiaryThawRequests[_thawRequestId]; + } + /** * @notice See {IHorizonStakingMain-setOperator}. * @dev Note that this function handles the special case where the verifier is the subgraph data service, diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index cdc45bb20..01210d157 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -305,8 +305,10 @@ abstract contract HorizonStakingBase is return _getNextProvisionThawRequest; } else if (_requestType == ThawRequestType.Delegation) { return _getNextDelegationThawRequest; + } else if (_requestType == ThawRequestType.DelegationWithBeneficiary) { + return _getNextDelegationWithBeneficiaryThawRequest; } else { - revert("Unknown ThawRequestType"); + revert HorizonStakingInvalidThawRequestType(); } } @@ -328,6 +330,15 @@ abstract contract HorizonStakingBase is return _delegationThawRequests[_thawRequestId].next; } + /** + * @notice Retrieves the next thaw request for a delegation with a beneficiary. + * @param _thawRequestId The ID of the current thaw request. + * @return The ID of the next thaw request in the list. + */ + function _getNextDelegationWithBeneficiaryThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { + return _delegationWithBeneficiaryThawRequests[_thawRequestId].next; + } + /** * @notice Retrieves the thaw request list for the given request type. * @dev Uses the `ThawRequestType` to determine which mapping to access. @@ -348,8 +359,10 @@ abstract contract HorizonStakingBase is return _provisionThawRequestLists[_serviceProvider][_verifier][_owner]; } else if (_requestType == ThawRequestType.Delegation) { return _delegationThawRequestLists[_serviceProvider][_verifier][_owner]; + } else if (_requestType == ThawRequestType.DelegationWithBeneficiary) { + return _delegationWithBeneficiaryThawRequestLists[_serviceProvider][_verifier][_owner]; } else { - revert("Unknown ThawRequestType"); + revert HorizonStakingInvalidThawRequestType(); } } @@ -369,6 +382,8 @@ abstract contract HorizonStakingBase is return _provisionThawRequests[_thawRequestId]; } else if (_requestType == ThawRequestType.Delegation) { return _delegationThawRequests[_thawRequestId]; + } else if (_requestType == ThawRequestType.DelegationWithBeneficiary) { + return _delegationWithBeneficiaryThawRequests[_thawRequestId]; } else { revert("Unknown ThawRequestType"); } diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index 9ed0cef26..ca6a1450f 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -148,23 +148,33 @@ abstract contract HorizonStakingV1Storage { internal _delegationFeeCut; /// @dev Thaw requests - /// Details for each thawing operation in the staking contract (for both service providers and delegators). + /// Details for each thawing operation in the staking contract for both service providers. mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _provisionThawRequests; /// @dev Thaw request lists - /// Metadata defining linked lists of thaw requests for each service provider or delegator (owner) + /// Metadata defining linked lists of thaw requests for each service provider (owner). mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) internal _provisionThawRequestLists; /// @dev Thaw requests - /// Details for each thawing operation in the staking contract (for both service providers and delegators). + /// Details for each thawing operation in the staking contract for delegators. mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _delegationThawRequests; /// @dev Thaw request lists - /// Metadata defining linked lists of thaw requests for each service provider or delegator (owner) + /// Metadata defining linked lists of thaw requests for each delegator (owner). mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) internal _delegationThawRequestLists; + /// @dev Thaw requests + /// Details for each thawing operation in the staking contract for both delegators undelegating to a beneficiary. + mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) + internal _delegationWithBeneficiaryThawRequests; + + /// @dev Thaw request lists + /// Metadata defining linked lists of thaw requests for each delegator (owner) undelegating to a beneficiary. + mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) + internal _delegationWithBeneficiaryThawRequestLists; + /// @dev Operator allow list /// Used for all verifiers except the subgraph data service. mapping(address serviceProvider => mapping(address verifier => mapping(address operator => bool authorized))) diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 39e2c5c34..ac86c83f5 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -431,7 +431,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { // after Provision memory afterProvision = staking.getProvision(serviceProvider, verifier); ThawRequest memory afterThawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Provision, thawRequestId); - LinkedList.List memory afterThawRequestList = _getProvisionThawRequestList(serviceProvider, verifier, serviceProvider); + LinkedList.List memory afterThawRequestList = _getThawRequestList(IHorizonStakingTypes.ThawRequestType.Provision, serviceProvider, verifier, serviceProvider); ThawRequest memory afterPreviousTailThawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Provision, beforeThawRequestList.tail); // assert @@ -476,13 +476,15 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { serviceProvider ); - CalcValues_ThawRequestData memory calcValues = calcThawRequestData( - serviceProvider, - verifier, - serviceProvider, - nThawRequests, - false - ); + Params_CalcThawRequestData memory params = Params_CalcThawRequestData({ + thawRequestType: IHorizonStakingTypes.ThawRequestType.Provision, + serviceProvider: serviceProvider, + verifier: verifier, + owner: serviceProvider, + iterations: nThawRequests, + delegation: false + }); + CalcValues_ThawRequestData memory calcValues = calcThawRequestData(params); // deprovision for (uint i = 0; i < calcValues.thawRequestsFulfilledList.length; i++) { @@ -587,13 +589,15 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { }); // calc - CalcValues_ThawRequestData memory calcValues = calcThawRequestData( - serviceProvider, - verifier, - serviceProvider, - nThawRequests, - false - ); + Params_CalcThawRequestData memory params = Params_CalcThawRequestData({ + thawRequestType: IHorizonStakingTypes.ThawRequestType.Provision, + serviceProvider: serviceProvider, + verifier: verifier, + owner: serviceProvider, + iterations: nThawRequests, + delegation: false + }); + CalcValues_ThawRequestData memory calcValues = calcThawRequestData(params); // reprovision for (uint i = 0; i < calcValues.thawRequestsFulfilledList.length; i++) { @@ -899,16 +903,30 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { function _undelegate(address serviceProvider, address verifier, uint256 shares) internal { (, address caller, ) = vm.readCallers(); - __undelegate(serviceProvider, verifier, shares, false, caller); + __undelegate(IHorizonStakingTypes.ThawRequestType.Delegation, serviceProvider, verifier, shares, false, caller); } - function _undelegate(address serviceProvider, address verifier, uint256 shares, address beneficiary) internal { - __undelegate(serviceProvider, verifier, shares, false, beneficiary); + function _undelegateWithBeneficiary(address serviceProvider, address verifier, uint256 shares, address beneficiary) internal { + __undelegate( + IHorizonStakingTypes.ThawRequestType.DelegationWithBeneficiary, + serviceProvider, + verifier, + shares, + false, + beneficiary + ); } function _undelegate(address serviceProvider, uint256 shares) internal { (, address caller, ) = vm.readCallers(); - __undelegate(serviceProvider, subgraphDataServiceLegacyAddress, shares, true, caller); + __undelegate( + IHorizonStakingTypes.ThawRequestType.Delegation, + serviceProvider, + subgraphDataServiceLegacyAddress, + shares, + true, + caller + ); } struct BeforeValues_Undelegate { @@ -924,14 +942,21 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { bytes32 thawRequestId; } - function __undelegate(address serviceProvider, address verifier, uint256 shares, bool legacy, address beneficiary) private { + function __undelegate( + IHorizonStakingTypes.ThawRequestType thawRequestType, + address serviceProvider, + address verifier, + uint256 shares, + bool legacy, + address beneficiary + ) private { (, address delegator, ) = vm.readCallers(); // before BeforeValues_Undelegate memory beforeValues; beforeValues.pool = _getStorage_DelegationPoolInternal(serviceProvider, verifier, legacy); beforeValues.delegation = _getStorage_Delegation(serviceProvider, verifier, delegator, legacy); - beforeValues.thawRequestList = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, serviceProvider, verifier, delegator); + beforeValues.thawRequestList = staking.getThawRequestList(thawRequestType, serviceProvider, verifier, delegator); beforeValues.delegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); // calc @@ -963,8 +988,12 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { emit IHorizonStakingMain.TokensUndelegated(serviceProvider, verifier, delegator, calcValues.tokens); if (legacy) { staking.undelegate(serviceProvider, shares); + } else if (thawRequestType == IHorizonStakingTypes.ThawRequestType.Delegation) { + staking.undelegate(serviceProvider, verifier, shares); + } else if (thawRequestType == IHorizonStakingTypes.ThawRequestType.DelegationWithBeneficiary) { + staking.undelegateWithBeneficiary(serviceProvider, verifier, shares, beneficiary); } else { - staking.undelegate(serviceProvider, verifier, shares, beneficiary); + revert("Invalid thaw request type"); } // after @@ -979,8 +1008,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { beneficiary, legacy ); - LinkedList.List memory afterThawRequestList = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, serviceProvider, verifier, beneficiary); - ThawRequest memory afterThawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Delegation, calcValues.thawRequestId); + LinkedList.List memory afterThawRequestList = staking.getThawRequestList(thawRequestType, serviceProvider, verifier, beneficiary); + ThawRequest memory afterThawRequest = staking.getThawRequest(thawRequestType, calcValues.thawRequestId); uint256 afterDelegatedTokens = staking.getDelegatedTokensAvailable(serviceProvider, verifier); // assertions @@ -1009,15 +1038,35 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address verifier, uint256 nThawRequests ) internal { - __withdrawDelegated( - serviceProvider, - verifier, - address(0), - address(0), - 0, - nThawRequests, - false - ); + Params_WithdrawDelegated memory params = Params_WithdrawDelegated({ + thawRequestType: IHorizonStakingTypes.ThawRequestType.Delegation, + serviceProvider: serviceProvider, + verifier: verifier, + newServiceProvider: address(0), + newVerifier: address(0), + minSharesForNewProvider: 0, + nThawRequests: nThawRequests, + legacy: false + }); + __withdrawDelegated(params); + } + + function _withdrawDelegatedWithBeneficiary( + address serviceProvider, + address verifier, + uint256 nThawRequests + ) internal { + Params_WithdrawDelegated memory params = Params_WithdrawDelegated({ + thawRequestType: IHorizonStakingTypes.ThawRequestType.DelegationWithBeneficiary, + serviceProvider: serviceProvider, + verifier: verifier, + newServiceProvider: address(0), + newVerifier: address(0), + minSharesForNewProvider: 0, + nThawRequests: nThawRequests, + legacy: false + }); + __withdrawDelegated(params); } function _redelegate( @@ -1028,19 +1077,31 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256 minSharesForNewProvider, uint256 nThawRequests ) internal { - __withdrawDelegated( - serviceProvider, - verifier, - newServiceProvider, - newVerifier, - minSharesForNewProvider, - nThawRequests, - false - ); + Params_WithdrawDelegated memory params = Params_WithdrawDelegated({ + thawRequestType: IHorizonStakingTypes.ThawRequestType.Delegation, + serviceProvider: serviceProvider, + verifier: verifier, + newServiceProvider: newServiceProvider, + newVerifier: newVerifier, + minSharesForNewProvider: minSharesForNewProvider, + nThawRequests: nThawRequests, + legacy: false + }); + __withdrawDelegated(params); } function _withdrawDelegated(address serviceProvider, address newServiceProvider) internal { - __withdrawDelegated(serviceProvider, subgraphDataServiceLegacyAddress, newServiceProvider, subgraphDataServiceLegacyAddress, 0, 0, true); + Params_WithdrawDelegated memory params = Params_WithdrawDelegated({ + thawRequestType: IHorizonStakingTypes.ThawRequestType.Delegation, + serviceProvider: serviceProvider, + verifier: subgraphDataServiceLegacyAddress, + newServiceProvider: newServiceProvider, + newVerifier: subgraphDataServiceLegacyAddress, + minSharesForNewProvider: 0, + nThawRequests: 0, + legacy: true + }); + __withdrawDelegated(params); } struct BeforeValues_WithdrawDelegated { @@ -1060,35 +1121,40 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256 stakingBalance; } - function __withdrawDelegated( - address _serviceProvider, - address _verifier, - address _newServiceProvider, - address _newVerifier, - uint256 _minSharesForNewProvider, - uint256 _nThawRequests, - bool legacy - ) private { + struct Params_WithdrawDelegated { + IHorizonStakingTypes.ThawRequestType thawRequestType; + address serviceProvider; + address verifier; + address newServiceProvider; + address newVerifier; + uint256 minSharesForNewProvider; + uint256 nThawRequests; + bool legacy; + } + + function __withdrawDelegated(Params_WithdrawDelegated memory params) private { (, address msgSender, ) = vm.readCallers(); - bool reDelegate = _newServiceProvider != address(0) && _newVerifier != address(0); + bool reDelegate = params.newServiceProvider != address(0) && params.newVerifier != address(0); // before BeforeValues_WithdrawDelegated memory beforeValues; - beforeValues.pool = _getStorage_DelegationPoolInternal(_serviceProvider, _verifier, legacy); - beforeValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _newVerifier, legacy); - beforeValues.newDelegation = _getStorage_Delegation(_newServiceProvider, _newVerifier, msgSender, legacy); - beforeValues.thawRequestList = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, _serviceProvider, _verifier, msgSender); + beforeValues.pool = _getStorage_DelegationPoolInternal(params.serviceProvider, params.verifier, params.legacy); + beforeValues.newPool = _getStorage_DelegationPoolInternal(params.newServiceProvider, params.newVerifier, params.legacy); + beforeValues.newDelegation = _getStorage_Delegation(params.newServiceProvider, params.newVerifier, msgSender, params.legacy); + beforeValues.thawRequestList = staking.getThawRequestList(params.thawRequestType, params.serviceProvider, params.verifier, msgSender); beforeValues.senderBalance = token.balanceOf(msgSender); beforeValues.stakingBalance = token.balanceOf(address(staking)); - CalcValues_ThawRequestData memory calcValues = calcThawRequestData( - _serviceProvider, - _verifier, - msgSender, - _nThawRequests, - true - ); + Params_CalcThawRequestData memory paramsCalc = Params_CalcThawRequestData({ + thawRequestType: params.thawRequestType, + serviceProvider: params.serviceProvider, + verifier: params.verifier, + owner: msgSender, + iterations: params.nThawRequests, + delegation: true + }); + CalcValues_ThawRequestData memory calcValues = calcThawRequestData(paramsCalc); // withdrawDelegated for (uint i = 0; i < calcValues.thawRequestsFulfilledList.length; i++) { @@ -1104,8 +1170,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { } vm.expectEmit(address(staking)); emit IHorizonStakingMain.ThawRequestsFulfilled( - _serviceProvider, - _verifier, + params.serviceProvider, + params.verifier, msgSender, calcValues.thawRequestsFulfilledList.length, calcValues.tokensThawed @@ -1114,8 +1180,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { vm.expectEmit(); if (reDelegate) { emit IHorizonStakingMain.TokensDelegated( - _newServiceProvider, - _newVerifier, + params.newServiceProvider, + params.newVerifier, msgSender, calcValues.tokensThawed ); @@ -1126,32 +1192,36 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { vm.expectEmit(); emit IHorizonStakingMain.DelegatedTokensWithdrawn( - _serviceProvider, - _verifier, + params.serviceProvider, + params.verifier, msgSender, calcValues.tokensThawed ); - if (legacy) { - staking.withdrawDelegated(_serviceProvider, _newServiceProvider); + if (params.legacy) { + staking.withdrawDelegated(params.serviceProvider, params.newServiceProvider); } else if (reDelegate) { staking.redelegate( - _serviceProvider, - _verifier, - _newServiceProvider, - _newVerifier, - _minSharesForNewProvider, - _nThawRequests + params.serviceProvider, + params.verifier, + params.newServiceProvider, + params.newVerifier, + params.minSharesForNewProvider, + params.nThawRequests ); + } else if (params.thawRequestType == IHorizonStakingTypes.ThawRequestType.Delegation) { + staking.withdrawDelegated(params.serviceProvider, params.verifier, params.nThawRequests); + } else if (params.thawRequestType == IHorizonStakingTypes.ThawRequestType.DelegationWithBeneficiary) { + staking.withdrawDelegatedWithBeneficiary(params.serviceProvider, params.verifier, params.nThawRequests); } else { - staking.withdrawDelegated(_serviceProvider, _verifier, _nThawRequests); + revert("Invalid thaw request type"); } // after AfterValues_WithdrawDelegated memory afterValues; - afterValues.pool = _getStorage_DelegationPoolInternal(_serviceProvider, _verifier, legacy); - afterValues.newPool = _getStorage_DelegationPoolInternal(_newServiceProvider, _newVerifier, legacy); - afterValues.newDelegation = _getStorage_Delegation(_newServiceProvider, _newVerifier, msgSender, legacy); - afterValues.thawRequestList = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, _serviceProvider, _verifier, msgSender); + afterValues.pool = _getStorage_DelegationPoolInternal(params.serviceProvider, params.verifier, params.legacy); + afterValues.newPool = _getStorage_DelegationPoolInternal(params.newServiceProvider, params.newVerifier, params.legacy); + afterValues.newDelegation = _getStorage_Delegation(params.newServiceProvider, params.newVerifier, msgSender, params.legacy); + afterValues.thawRequestList = staking.getThawRequestList(params.thawRequestType, params.serviceProvider, params.verifier, msgSender); afterValues.senderBalance = token.balanceOf(msgSender); afterValues.stakingBalance = token.balanceOf(address(staking)); @@ -1163,7 +1233,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { assertEq(afterValues.pool.thawingNonce, beforeValues.pool.thawingNonce); for (uint i = 0; i < calcValues.thawRequestsFulfilledListIds.length; i++) { - ThawRequest memory thawRequest = staking.getThawRequest(IHorizonStakingTypes.ThawRequestType.Delegation, calcValues.thawRequestsFulfilledListIds[i]); + ThawRequest memory thawRequest = staking.getThawRequest(params.thawRequestType, calcValues.thawRequestsFulfilledListIds[i]); assertEq(thawRequest.shares, 0); assertEq(thawRequest.thawingUntil, 0); assertEq(thawRequest.next, bytes32(0)); @@ -1211,7 +1281,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { afterValues.newDelegation.__DEPRECATED_tokensLockedUntil, beforeValues.newDelegation.__DEPRECATED_tokensLockedUntil ); - assertGe(deltaShares, _minSharesForNewProvider); + assertGe(deltaShares, params.minSharesForNewProvider); assertEq(calcShares, deltaShares); assertEq(afterValues.senderBalance - beforeValues.senderBalance, 0); assertEq(beforeValues.stakingBalance - afterValues.stakingBalance, 0); @@ -1798,7 +1868,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address operator, bool legacy ) internal view returns (bool) { - uint256 slotNumber = legacy ? 21 : 33; + uint256 slotNumber = legacy ? 21 : 35; uint256 slot; if (legacy) { @@ -1880,7 +1950,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address verifier, bool legacy ) internal view returns (DelegationPoolInternalTest memory) { - uint256 slotNumber = legacy ? 20 : 35; + uint256 slotNumber = legacy ? 20 : 37; uint256 baseSlot; if (legacy) { baseSlot = uint256(keccak256(abi.encode(serviceProvider, slotNumber))); @@ -1912,7 +1982,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address delegator, bool legacy ) internal view returns (DelegationInternal memory) { - uint256 slotNumber = legacy ? 20 : 35; + uint256 slotNumber = legacy ? 20 : 37; uint256 baseSlot; // DelegationPool @@ -2215,38 +2285,42 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256 thawRequestsFulfilled; } - function calcThawRequestData( - address serviceProvider, - address verifier, - address owner, - uint256 iterations, - bool delegation - ) private view returns (CalcValues_ThawRequestData memory) { - LinkedList.List memory thawRequestList = delegation - ? _getDelegationThawRequestList(serviceProvider, verifier, owner) - : _getProvisionThawRequestList(serviceProvider, verifier, owner); + struct Params_CalcThawRequestData { + IHorizonStakingTypes.ThawRequestType thawRequestType; + address serviceProvider; + address verifier; + address owner; + uint256 iterations; + bool delegation; + } + + function calcThawRequestData(Params_CalcThawRequestData memory params) private view returns (CalcValues_ThawRequestData memory) { + LinkedList.List memory thawRequestList = _getThawRequestList( + params.thawRequestType, + params.serviceProvider, + params.verifier, + params.owner + ); if (thawRequestList.count == 0) { return CalcValues_ThawRequestData(0, 0, 0, new ThawRequest[](0), new bytes32[](0), new uint256[](0)); } - Provision memory prov = staking.getProvision(serviceProvider, verifier); - DelegationPool memory pool = staking.getDelegationPool(serviceProvider, verifier); + Provision memory prov = staking.getProvision(params.serviceProvider, params.verifier); + DelegationPool memory pool = staking.getDelegationPool(params.serviceProvider, params.verifier); uint256 tokensThawed = 0; - uint256 tokensThawing = delegation ? pool.tokensThawing : prov.tokensThawing; - uint256 sharesThawing = delegation ? pool.sharesThawing : prov.sharesThawing; + uint256 tokensThawing = params.delegation ? pool.tokensThawing : prov.tokensThawing; + uint256 sharesThawing = params.delegation ? pool.sharesThawing : prov.sharesThawing; uint256 thawRequestsFulfilled = 0; bytes32 thawRequestId = thawRequestList.head; - while (thawRequestId != bytes32(0) && (iterations == 0 || thawRequestsFulfilled < iterations)) { - ThawRequest memory thawRequest = delegation - ? _getDelegationThawRequest(thawRequestId) - : _getProvisionThawRequest(thawRequestId); - bool isThawRequestValid = thawRequest.thawingNonce == (delegation ? pool.thawingNonce : prov.thawingNonce); + while (thawRequestId != bytes32(0) && (params.iterations == 0 || thawRequestsFulfilled < params.iterations)) { + ThawRequest memory thawRequest = _getThawRequest(params.thawRequestType, thawRequestId); + bool isThawRequestValid = thawRequest.thawingNonce == (params.delegation ? pool.thawingNonce : prov.thawingNonce); if (thawRequest.thawingUntil <= block.timestamp) { thawRequestsFulfilled++; if (isThawRequestValid) { - uint256 tokens = delegation + uint256 tokens = params.delegation ? (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing : (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; tokensThawed += tokens; @@ -2260,28 +2334,28 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { } // we need to do a second pass because solidity doesnt allow dynamic arrays on memory - ThawRequest[] memory thawRequestsFulfilledList = new ThawRequest[](thawRequestsFulfilled); - bytes32[] memory thawRequestsFulfilledListIds = new bytes32[](thawRequestsFulfilled); - uint256[] memory thawRequestsFulfilledListTokens = new uint256[](thawRequestsFulfilled); + CalcValues_ThawRequestData memory thawRequestData; + thawRequestData.tokensThawed = tokensThawed; + thawRequestData.tokensThawing = tokensThawing; + thawRequestData.sharesThawing = sharesThawing; + thawRequestData.thawRequestsFulfilledList = new ThawRequest[](thawRequestsFulfilled); + thawRequestData.thawRequestsFulfilledListIds = new bytes32[](thawRequestsFulfilled); + thawRequestData.thawRequestsFulfilledListTokens = new uint256[](thawRequestsFulfilled); uint256 i = 0; thawRequestId = thawRequestList.head; - while (thawRequestId != bytes32(0) && (iterations == 0 || i < iterations)) { - ThawRequest memory thawRequest = delegation - ? _getDelegationThawRequest(thawRequestId) - : _getProvisionThawRequest(thawRequestId); - bool isThawRequestValid = thawRequest.thawingNonce == (delegation ? pool.thawingNonce : prov.thawingNonce); + while (thawRequestId != bytes32(0) && (params.iterations == 0 || i < params.iterations)) { + ThawRequest memory thawRequest = _getThawRequest(params.thawRequestType, thawRequestId); + bool isThawRequestValid = thawRequest.thawingNonce == (params.delegation ? pool.thawingNonce : prov.thawingNonce); if (thawRequest.thawingUntil <= block.timestamp) { if (isThawRequestValid) { - thawRequestsFulfilledListTokens[i] = delegation + thawRequestData.thawRequestsFulfilledListTokens[i] = params.delegation ? (thawRequest.shares * pool.tokensThawing) / pool.sharesThawing : (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; } - thawRequestsFulfilledListIds[i] = thawRequestId; - thawRequestsFulfilledList[i] = delegation - ? _getDelegationThawRequest(thawRequestId) - : _getProvisionThawRequest(thawRequestId); - thawRequestId = thawRequestsFulfilledList[i].next; + thawRequestData.thawRequestsFulfilledListIds[i] = thawRequestId; + thawRequestData.thawRequestsFulfilledList[i] = _getThawRequest(params.thawRequestType, thawRequestId); + thawRequestId = thawRequestData.thawRequestsFulfilledList[i].next; i++; } else { break; @@ -2289,65 +2363,33 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { thawRequestId = thawRequest.next; } - assertEq(thawRequestsFulfilled, thawRequestsFulfilledList.length); - assertEq(thawRequestsFulfilled, thawRequestsFulfilledListIds.length); - assertEq(thawRequestsFulfilled, thawRequestsFulfilledListTokens.length); - - return - CalcValues_ThawRequestData( - tokensThawed, - tokensThawing, - sharesThawing, - thawRequestsFulfilledList, - thawRequestsFulfilledListIds, - thawRequestsFulfilledListTokens - ); - } + assertEq(thawRequestsFulfilled, thawRequestData.thawRequestsFulfilledList.length); + assertEq(thawRequestsFulfilled, thawRequestData.thawRequestsFulfilledListIds.length); + assertEq(thawRequestsFulfilled, thawRequestData.thawRequestsFulfilledListTokens.length); - function _getProvisionThawRequestList(address serviceProvider, address verifier, address owner) - private - view - returns (LinkedList.List memory) - { - return staking.getThawRequestList( - IHorizonStakingTypes.ThawRequestType.Provision, - serviceProvider, - verifier, - owner - ); + return thawRequestData; } - function _getDelegationThawRequestList(address serviceProvider, address verifier, address owner) - private - view - returns (LinkedList.List memory) - { + function _getThawRequestList( + IHorizonStakingTypes.ThawRequestType thawRequestType, + address serviceProvider, + address verifier, + address owner + ) private view returns (LinkedList.List memory) { return staking.getThawRequestList( - IHorizonStakingTypes.ThawRequestType.Delegation, + thawRequestType, serviceProvider, verifier, owner ); } - function _getProvisionThawRequest(bytes32 thawRequestId) - private - view - returns (ThawRequest memory) - { - return staking.getThawRequest( - IHorizonStakingTypes.ThawRequestType.Provision, - thawRequestId - ); - } - - function _getDelegationThawRequest(bytes32 thawRequestId) - private - view - returns (ThawRequest memory) - { + function _getThawRequest( + IHorizonStakingTypes.ThawRequestType thawRequestType, + bytes32 thawRequestId + ) private view returns (ThawRequest memory) { return staking.getThawRequest( - IHorizonStakingTypes.ThawRequestType.Delegation, + thawRequestType, thawRequestId ); } diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index 4cad2e0c3..c824832c4 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -57,7 +57,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { vm.assume(beneficiary != address(0)); resetPrank(users.delegator); DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); - _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); + _undelegateWithBeneficiary(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); } function testUndelegate_RevertWhen_TooManyUndelegations() @@ -232,6 +232,6 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); bytes memory expectedError = abi.encodeWithSelector(IHorizonStakingMain.HorizonStakingInvalidBeneficiaryZeroAddress.selector); vm.expectRevert(expectedError); - staking.undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, address(0)); + staking.undelegateWithBeneficiary(users.indexer, subgraphDataServiceAddress, delegation.shares, address(0)); } } diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 45bdbb1a8..ff3fb3db0 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -190,7 +190,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { // Delegator undelegates to beneficiary resetPrank(users.delegator); DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); - _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); + _undelegateWithBeneficiary(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); // Thawing period ends LinkedList.List memory thawingRequests = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, users.indexer, subgraphDataServiceAddress, beneficiary); @@ -199,7 +199,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { // Beneficiary withdraws delegated tokens resetPrank(beneficiary); - _withdrawDelegated(users.indexer, subgraphDataServiceAddress, 1); + _withdrawDelegatedWithBeneficiary(users.indexer, subgraphDataServiceAddress, 1); } function testWithdrawDelegation_RevertWhen_PreviousOwnerAttemptsToWithdraw( @@ -217,7 +217,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { // Delegator undelegates to beneficiary resetPrank(users.delegator); DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); - _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); + _undelegateWithBeneficiary(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); // Thawing period ends LinkedList.List memory thawingRequests = staking.getThawRequestList(IHorizonStakingTypes.ThawRequestType.Delegation, users.indexer, subgraphDataServiceAddress, users.delegator); From 167055ac64d5aedbac264da23189bd7dbede8fd0 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Mon, 2 Dec 2024 15:45:25 -0300 Subject: [PATCH 306/343] fix: round down tokens thawing when slashing (TRST-H04) --- .../contracts/staking/HorizonStaking.sol | 7 ++-- .../HorizonStakingShared.t.sol | 4 +- .../horizon/test/staking/slash/slash.t.sol | 42 +++++++++++++++++++ 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 0e9e4bba2..151bcaff4 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -461,8 +461,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _graphToken().burnTokens(providerTokensSlashed - tokensVerifier); // Provision accounting - // TODO check for rounding issues - uint256 provisionFractionSlashed = (providerTokensSlashed * FIXED_POINT_PRECISION) / prov.tokens; + uint256 provisionFractionSlashed = (providerTokensSlashed * FIXED_POINT_PRECISION + prov.tokens - 1) / + prov.tokens; prov.tokensThawing = (prov.tokensThawing * (FIXED_POINT_PRECISION - provisionFractionSlashed)) / (FIXED_POINT_PRECISION); @@ -497,7 +497,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { _graphToken().burnTokens(tokensToSlash); // Delegation pool accounting - uint256 delegationFractionSlashed = (tokensToSlash * FIXED_POINT_PRECISION) / pool.tokens; + uint256 delegationFractionSlashed = (tokensToSlash * FIXED_POINT_PRECISION + pool.tokens - 1) / + pool.tokens; pool.tokens = pool.tokens - tokensToSlash; pool.tokensThawing = (pool.tokensThawing * (FIXED_POINT_PRECISION - delegationFractionSlashed)) / diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index ac86c83f5..c960b19bd 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -1488,7 +1488,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { uint256 tokensSlashed = calcValues.providerTokensSlashed + (isDelegationSlashingEnabled ? calcValues.delegationTokensSlashed : 0); uint256 provisionThawingTokens = (before.provision.tokensThawing * - (1e18 - ((calcValues.providerTokensSlashed * 1e18) / before.provision.tokens))) / (1e18); + (1e18 - ((calcValues.providerTokensSlashed * 1e18 + before.provision.tokens - 1) / before.provision.tokens))) / (1e18); // assert assertEq(afterProvision.tokens + calcValues.providerTokensSlashed, before.provision.tokens); @@ -1506,7 +1506,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { (before.provision.sharesThawing != 0 && afterProvision.sharesThawing == 0) ? before.provision.thawingNonce + 1 : before.provision.thawingNonce); if (isDelegationSlashingEnabled) { uint256 poolThawingTokens = (before.pool.tokensThawing * - (1e18 - ((calcValues.delegationTokensSlashed * 1e18) / before.pool.tokens))) / (1e18); + (1e18 - ((calcValues.delegationTokensSlashed * 1e18 + before.pool.tokens - 1) / before.pool.tokens))) / (1e18); assertEq(afterPool.tokens + calcValues.delegationTokensSlashed, before.pool.tokens); assertEq(afterPool.shares, before.pool.shares); assertEq(afterPool.tokensThawing, poolThawingTokens); diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index 7c7933419..a74403ed7 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -140,4 +140,46 @@ contract HorizonStakingSlashTest is HorizonStakingTest { vm.startPrank(subgraphDataServiceAddress); _slash(users.indexer, subgraphDataServiceAddress, tokens + delegationTokens, 0); } + + function testSlash_RoundDown_TokensThawing_Provision() public useIndexer { + uint256 tokens = 1 ether + 1; + _useProvision(subgraphDataServiceAddress, tokens, MAX_PPM, MAX_THAWING_PERIOD); + + _thaw(users.indexer, subgraphDataServiceAddress, tokens); + + resetPrank(subgraphDataServiceAddress); + _slash(users.indexer, subgraphDataServiceAddress, 1, 0); + + resetPrank(users.indexer); + Provision memory provision = staking.getProvision(users.indexer, subgraphDataServiceAddress); + assertEq(provision.tokens, tokens - 1); + // Tokens thawing should be rounded down + assertEq(provision.tokensThawing, tokens - 2); + } + + function testSlash_RoundDown_TokensThawing_Delegation( + uint256 tokens + ) public useIndexer useProvision(tokens, MAX_PPM, 0) useDelegationSlashing { + resetPrank(users.delegator); + uint256 delegationTokens = 1 ether + 1; + _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); + + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); + + resetPrank(subgraphDataServiceAddress); + // Slash 1 token from delegation + _slash(users.indexer, subgraphDataServiceAddress, tokens + 1, 0); + + resetPrank(users.delegator); + DelegationPool memory pool = staking.getDelegationPool(users.indexer, subgraphDataServiceAddress); + assertEq(pool.tokens, delegationTokens - 1); + // Tokens thawing should be rounded down + assertEq(pool.tokensThawing, delegationTokens - 2); + } } From 4d75947de7cf7515ff5d7e9289fa3a559f58f7fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 29 Nov 2024 17:25:45 -0300 Subject: [PATCH 307/343] fix: dispute manager refactor (TRST-M07 / TRST-M08) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/DisputeManager.sol | 185 +++++------ .../contracts/interfaces/IDisputeManager.sol | 3 +- .../test/disputeManager/DisputeManager.t.sol | 298 ++++++++++++++---- .../disputeManager/disputes/disputes.t.sol | 4 +- .../disputes/indexing/accept.t.sol | 19 +- .../disputes/query/accept.t.sol | 21 +- .../disputes/queryConflict/accept.t.sol | 54 +++- .../disputes/queryConflict/reject.t.sol | 13 +- .../governance/disputeDeposit.t.sol | 6 +- .../test/mocks/MockGRTToken.sol | 4 +- .../subgraph-service/test/utils/Constants.sol | 1 + 11 files changed, 409 insertions(+), 199 deletions(-) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 58c93a756..a9d45ead7 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -59,6 +59,9 @@ contract DisputeManager is // Maximum value for fisherman reward cut in PPM uint32 public constant MAX_FISHERMAN_REWARD_CUT = 500000; + // Minimum value for dispute deposit + uint256 public constant MIN_DISPUTE_DEPOSIT = 1e18; // 1 GRT + // -- Modifiers -- /** @@ -140,7 +143,7 @@ contract DisputeManager is */ function createIndexingDispute(address allocationId, bytes32 poi) external override returns (bytes32) { // Get funds from fisherman - _pullFishermanDeposit(); + _graphToken().pullTokens(msg.sender, disputeDeposit); // Create a dispute return _createIndexingDisputeWithAllocation(msg.sender, disputeDeposit, allocationId, poi); @@ -158,7 +161,7 @@ contract DisputeManager is */ function createQueryDispute(bytes calldata attestationData) external override returns (bytes32) { // Get funds from fisherman - _pullFishermanDeposit(); + _graphToken().pullTokens(msg.sender, disputeDeposit); // Create a dispute return @@ -174,10 +177,14 @@ contract DisputeManager is * @notice Create query disputes for two conflicting attestations. * A conflicting attestation is a proof presented by two different indexers * where for the same request on a subgraph the response is different. - * For this type of dispute the fisherman is not required to present a deposit - * as one of the attestation is considered to be right. * Two linked disputes will be created and if the arbitrator resolve one, the other - * one will be automatically resolved. + * one will be automatically resolved. Note that: + * - it's not possible to reject a conflicting query dispute as by definition at least one + * of the attestations is incorrect. + * - if both attestations are proven to be incorrect, the arbitrator can slash the indexer twice. + * Requirements: + * - fisherman must have previously approved this contract to pull `disputeDeposit` amount + * of tokens from their balance. * @param attestationData1 First attestation data submitted * @param attestationData2 Second attestation data submitted * @return DisputeId1, DisputeId2 @@ -205,10 +212,23 @@ contract DisputeManager is ) ); + // Get funds from fisherman + _graphToken().pullTokens(msg.sender, disputeDeposit); + // Create the disputes // The deposit is zero for conflicting attestations - bytes32 dId1 = _createQueryDisputeWithAttestation(fisherman, 0, attestation1, attestationData1); - bytes32 dId2 = _createQueryDisputeWithAttestation(fisherman, 0, attestation2, attestationData2); + bytes32 dId1 = _createQueryDisputeWithAttestation( + fisherman, + disputeDeposit / 2, + attestation1, + attestationData1 + ); + bytes32 dId2 = _createQueryDisputeWithAttestation( + fisherman, + disputeDeposit / 2, + attestation2, + attestationData2 + ); // Store the linked disputes to be resolved disputes[dId1].relatedDisputeId = dId2; @@ -228,54 +248,59 @@ contract DisputeManager is * @dev Accept a dispute with Id `disputeId` * @param disputeId Id of the dispute to be accepted * @param tokensSlash Amount of tokens to slash from the indexer + * @param acceptDisputeInConflict If the dispute is in conflict, accept the conflicting dispute. Otherwise + * it will be drawn automatically. Ignored if the dispute is not in conflict. */ function acceptDispute( bytes32 disputeId, - uint256 tokensSlash + uint256 tokensSlash, + bool acceptDisputeInConflict ) external override onlyArbitrator onlyPendingDispute(disputeId) { Dispute storage dispute = disputes[disputeId]; - - // store the dispute status - dispute.status = IDisputeManager.DisputeStatus.Accepted; - - // Slash - uint256 tokensToReward = _slashIndexer(dispute.indexer, tokensSlash, dispute.stakeSnapshot); - - // Give the fisherman their reward and their deposit back - _graphToken().pushTokens(dispute.fisherman, tokensToReward + dispute.deposit); + _acceptDispute(disputeId, dispute, tokensSlash); if (_isDisputeInConflict(dispute)) { - rejectDispute(dispute.relatedDisputeId); + Dispute storage relatedDispute = disputes[dispute.relatedDisputeId]; + if (acceptDisputeInConflict) { + _acceptDispute(dispute.relatedDisputeId, relatedDispute, tokensSlash); + } else { + _drawDispute(dispute.relatedDisputeId, relatedDispute); + } } + } - emit DisputeAccepted(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit + tokensToReward); + /** + * @notice The arbitrator rejects a dispute as being invalid. + * Note that conflicting query disputes cannot be rejected. + * @dev Reject a dispute with Id `disputeId` + * @param disputeId Id of the dispute to be rejected + */ + function rejectDispute(bytes32 disputeId) external override onlyArbitrator onlyPendingDispute(disputeId) { + Dispute storage dispute = disputes[disputeId]; + require(!_isDisputeInConflict(dispute), DisputeManagerDisputeInConflict(disputeId)); + _rejectDispute(disputeId, dispute); } /** * @notice The arbitrator draws dispute. + * Note that drawing a conflicting query dispute should not be possible however it is allowed + * to give arbitrators greater flexibility when resolving disputes. * @dev Ignore a dispute with Id `disputeId` * @param disputeId Id of the dispute to be disregarded */ function drawDispute(bytes32 disputeId) external override onlyArbitrator onlyPendingDispute(disputeId) { Dispute storage dispute = disputes[disputeId]; + _drawDispute(disputeId, dispute); - // Return deposit to the fisherman if any - if (dispute.deposit > 0) { - _graphToken().pushTokens(dispute.fisherman, dispute.deposit); + if (_isDisputeInConflict(dispute)) { + _drawDispute(dispute.relatedDisputeId, disputes[dispute.relatedDisputeId]); } - - // resolve related dispute if any - _drawDisputeInConflict(dispute); - - // store dispute status - dispute.status = IDisputeManager.DisputeStatus.Drawn; - - emit DisputeDrawn(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); } /** * @notice Once the dispute period ends, if the dispute status remains Pending, * the fisherman can cancel the dispute and get back their initial deposit. + * Note that cancelling a conflicting query dispute will also cancel the related dispute. * @dev Cancel a dispute with Id `disputeId` * @param disputeId Id of the dispute to be cancelled */ @@ -284,19 +309,11 @@ contract DisputeManager is // Check if dispute period has finished require(dispute.createdAt + disputePeriod < block.timestamp, DisputeManagerDisputePeriodNotFinished()); + _cancelDispute(disputeId, dispute); - // Return deposit to the fisherman if any - if (dispute.deposit > 0) { - _graphToken().pushTokens(dispute.fisherman, dispute.deposit); + if (_isDisputeInConflict(dispute)) { + _cancelDispute(dispute.relatedDisputeId, disputes[dispute.relatedDisputeId]); } - - // resolve related dispute if any - _cancelDisputeInConflict(dispute); - - // store dispute status - dispute.status = IDisputeManager.DisputeStatus.Cancelled; - - emit DisputeCancelled(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); } /** @@ -401,29 +418,6 @@ contract DisputeManager is return Attestation.areConflicting(attestation1, attestation2); } - /** - * @notice The arbitrator rejects a dispute as being invalid. - * @dev Reject a dispute with Id `disputeId` - * @param disputeId Id of the dispute to be rejected - */ - function rejectDispute(bytes32 disputeId) public override onlyArbitrator onlyPendingDispute(disputeId) { - Dispute storage dispute = disputes[disputeId]; - - // store dispute status - dispute.status = IDisputeManager.DisputeStatus.Rejected; - - // For conflicting disputes, the related dispute must be accepted - require( - !_isDisputeInConflict(dispute), - DisputeManagerMustAcceptRelatedDispute(disputeId, dispute.relatedDisputeId) - ); - - // Burn the fisherman's deposit - _graphToken().burnTokens(dispute.deposit); - - emit DisputeRejected(disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); - } - /** * @notice Returns the indexer that signed an attestation. * @param attestation Attestation @@ -561,42 +555,33 @@ contract DisputeManager is return disputeId; } - /** - * @notice Draw the conflicting dispute if there is any for the one passed to this function. - * @param _dispute Dispute - * @return True if resolved - */ - function _drawDisputeInConflict(Dispute memory _dispute) private returns (bool) { - if (_isDisputeInConflict(_dispute)) { - bytes32 relatedDisputeId = _dispute.relatedDisputeId; - Dispute storage relatedDispute = disputes[relatedDisputeId]; - relatedDispute.status = IDisputeManager.DisputeStatus.Drawn; - return true; - } - return false; + function _acceptDispute(bytes32 _disputeId, Dispute storage _dispute, uint256 _tokensSlashed) private { + uint256 tokensToReward = _slashIndexer(_dispute.indexer, _tokensSlashed, _dispute.stakeSnapshot); + _dispute.status = IDisputeManager.DisputeStatus.Accepted; + _graphToken().pushTokens(_dispute.fisherman, tokensToReward + _dispute.deposit); + + emit DisputeAccepted(_disputeId, _dispute.indexer, _dispute.fisherman, _dispute.deposit + tokensToReward); } - /** - * @notice Cancel the conflicting dispute if there is any for the one passed to this function. - * @param _dispute Dispute - * @return True if cancelled - */ - function _cancelDisputeInConflict(Dispute memory _dispute) private returns (bool) { - if (_isDisputeInConflict(_dispute)) { - bytes32 relatedDisputeId = _dispute.relatedDisputeId; - Dispute storage relatedDispute = disputes[relatedDisputeId]; - relatedDispute.status = IDisputeManager.DisputeStatus.Cancelled; - return true; - } - return false; + function _rejectDispute(bytes32 _disputeId, Dispute storage _dispute) private { + _dispute.status = IDisputeManager.DisputeStatus.Rejected; + _graphToken().burnTokens(_dispute.deposit); + + emit DisputeRejected(_disputeId, _dispute.indexer, _dispute.fisherman, _dispute.deposit); } - /** - * @notice Pull `disputeDeposit` from fisherman account. - */ - function _pullFishermanDeposit() private { - // Transfer tokens to deposit from fisherman to this contract - _graphToken().pullTokens(msg.sender, disputeDeposit); + function _drawDispute(bytes32 _disputeId, Dispute storage _dispute) private { + _dispute.status = IDisputeManager.DisputeStatus.Drawn; + _graphToken().pushTokens(_dispute.fisherman, _dispute.deposit); + + emit DisputeDrawn(_disputeId, _dispute.indexer, _dispute.fisherman, _dispute.deposit); + } + + function _cancelDispute(bytes32 _disputeId, Dispute storage _dispute) private { + _dispute.status = IDisputeManager.DisputeStatus.Cancelled; + _graphToken().pushTokens(_dispute.fisherman, _dispute.deposit); + + emit DisputeCancelled(_disputeId, _dispute.indexer, _dispute.fisherman, _dispute.deposit); } /** @@ -658,7 +643,7 @@ contract DisputeManager is * @param _disputeDeposit The dispute deposit in Graph Tokens */ function _setDisputeDeposit(uint256 _disputeDeposit) private { - require(_disputeDeposit != 0, DisputeManagerInvalidDisputeDeposit(_disputeDeposit)); + require(_disputeDeposit >= MIN_DISPUTE_DEPOSIT, DisputeManagerInvalidDisputeDeposit(_disputeDeposit)); disputeDeposit = _disputeDeposit; emit DisputeDepositSet(_disputeDeposit); } @@ -704,10 +689,8 @@ contract DisputeManager is * @param _dispute Dispute * @return True conflicting attestation dispute */ - function _isDisputeInConflict(Dispute memory _dispute) private view returns (bool) { - bytes32 relatedId = _dispute.relatedDisputeId; - // this is so the check returns false when rejecting the related dispute. - return relatedId != 0 && disputes[relatedId].status == IDisputeManager.DisputeStatus.Pending; + function _isDisputeInConflict(Dispute storage _dispute) private view returns (bool) { + return _dispute.relatedDisputeId != bytes32(0); } /** diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 95511ecc2..10865a77d 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -169,6 +169,7 @@ interface IDisputeManager { error DisputeManagerDisputeNotPending(IDisputeManager.DisputeStatus status); error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId); error DisputeManagerDisputePeriodNotFinished(); + error DisputeManagerDisputeInConflict(bytes32 disputeId); error DisputeManagerMustAcceptRelatedDispute(bytes32 disputeId, bytes32 relatedDisputeId); error DisputeManagerIndexerNotFound(address allocationId); error DisputeManagerNonMatchingSubgraphDeployment(bytes32 subgraphDeploymentId1, bytes32 subgraphDeploymentId2); @@ -202,7 +203,7 @@ interface IDisputeManager { function createIndexingDispute(address allocationId, bytes32 poi) external returns (bytes32); - function acceptDispute(bytes32 disputeId, uint256 tokensSlash) external; + function acceptDispute(bytes32 disputeId, uint256 tokensSlash, bool acceptDisputeInConflict) external; function rejectDispute(bytes32 disputeId) external; diff --git a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol index 0d99aec0b..ce6546030 100644 --- a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol +++ b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol @@ -3,8 +3,6 @@ pragma solidity 0.8.27; import "forge-std/Test.sol"; -import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; import { PPMMath } from "@graphprotocol/horizon/contracts/libraries/PPMMath.sol"; import { IDisputeManager } from "../../contracts/interfaces/IDisputeManager.sol"; import { Attestation } from "../../contracts/libraries/Attestation.sol"; @@ -26,7 +24,7 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { vm.stopPrank(); } - modifier useFisherman { + modifier useFisherman() { vm.startPrank(users.fisherman); _; vm.stopPrank(); @@ -88,7 +86,7 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { // Create the indexing dispute bytes32 _disputeId = disputeManager.createIndexingDispute(_allocationId, _poi); - + // Check that the dispute was created and that it has the correct ID assertTrue(disputeManager.isDisputeCreated(_disputeId), "Dispute should be created."); assertEq(expectedDisputeId, _disputeId, "Dispute ID should match"); @@ -99,20 +97,32 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { assertEq(dispute.fisherman, fisherman, "Fisherman should match"); assertEq(dispute.deposit, disputeDeposit, "Deposit should match"); assertEq(dispute.relatedDisputeId, bytes32(0), "Related dispute ID should be empty"); - assertEq(uint8(dispute.disputeType), uint8(IDisputeManager.DisputeType.IndexingDispute), "Dispute type should be indexing"); - assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status should be pending"); + assertEq( + uint8(dispute.disputeType), + uint8(IDisputeManager.DisputeType.IndexingDispute), + "Dispute type should be indexing" + ); + assertEq( + uint8(dispute.status), + uint8(IDisputeManager.DisputeStatus.Pending), + "Dispute status should be pending" + ); assertEq(dispute.createdAt, block.timestamp, "Created at should match"); assertEq(dispute.stakeSnapshot, stakeSnapshot, "Stake snapshot should match"); // Check that the fisherman was charged the dispute deposit uint256 afterFishermanBalance = token.balanceOf(fisherman); - assertEq(afterFishermanBalance, beforeFishermanBalance - disputeDeposit, "Fisherman should be charged the dispute deposit"); + assertEq( + afterFishermanBalance, + beforeFishermanBalance - disputeDeposit, + "Fisherman should be charged the dispute deposit" + ); return _disputeId; } function _createQueryDispute(bytes memory _attestationData) internal returns (bytes32) { - (, address fisherman,) = vm.readCallers(); + (, address fisherman, ) = vm.readCallers(); Attestation.State memory attestation = Attestation.parse(_attestationData); address indexer = disputeManager.getAttestationIndexer(attestation); bytes32 expectedDisputeId = keccak256( @@ -130,7 +140,7 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { // Approve the dispute deposit token.approve(address(disputeManager), disputeDeposit); - + vm.expectEmit(address(disputeManager)); emit IDisputeManager.QueryDisputeCreated( expectedDisputeId, @@ -141,9 +151,9 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { _attestationData, stakeSnapshot ); - + bytes32 _disputeID = disputeManager.createQueryDispute(_attestationData); - + // Check that the dispute was created and that it has the correct ID assertTrue(disputeManager.isDisputeCreated(_disputeID), "Dispute should be created."); assertEq(expectedDisputeId, _disputeID, "Dispute ID should match"); @@ -154,15 +164,27 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { assertEq(dispute.fisherman, fisherman, "Fisherman should match"); assertEq(dispute.deposit, disputeDeposit, "Deposit should match"); assertEq(dispute.relatedDisputeId, bytes32(0), "Related dispute ID should be empty"); - assertEq(uint8(dispute.disputeType), uint8(IDisputeManager.DisputeType.QueryDispute), "Dispute type should be query"); - assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status should be pending"); + assertEq( + uint8(dispute.disputeType), + uint8(IDisputeManager.DisputeType.QueryDispute), + "Dispute type should be query" + ); + assertEq( + uint8(dispute.status), + uint8(IDisputeManager.DisputeStatus.Pending), + "Dispute status should be pending" + ); assertEq(dispute.createdAt, block.timestamp, "Created at should match"); assertEq(dispute.stakeSnapshot, stakeSnapshot, "Stake snapshot should match"); // Check that the fisherman was charged the dispute deposit uint256 afterFishermanBalance = token.balanceOf(fisherman); - assertEq(afterFishermanBalance, beforeFishermanBalance - disputeDeposit, "Fisherman should be charged the dispute deposit"); - + assertEq( + afterFishermanBalance, + beforeFishermanBalance - disputeDeposit, + "Fisherman should be charged the dispute deposit" + ); + return _disputeID; } @@ -174,11 +196,12 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { uint256 stakeSnapshot1; uint256 stakeSnapshot2; } + function _createQueryDisputeConflict( bytes memory attestationData1, bytes memory attestationData2 ) internal returns (bytes32, bytes32) { - (, address fisherman,) = vm.readCallers(); + (, address fisherman, ) = vm.readCallers(); BeforeValues_CreateQueryDisputeConflict memory beforeValues; beforeValues.attestation1 = Attestation.parse(attestationData1); @@ -188,6 +211,11 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { beforeValues.stakeSnapshot1 = disputeManager.getStakeSnapshot(beforeValues.indexer1); beforeValues.stakeSnapshot2 = disputeManager.getStakeSnapshot(beforeValues.indexer2); + uint256 beforeFishermanBalance = token.balanceOf(fisherman); + + // Approve the dispute deposit + token.approve(address(disputeManager), disputeDeposit); + bytes32 expectedDisputeId1 = keccak256( abi.encodePacked( beforeValues.attestation1.requestCID, @@ -213,7 +241,7 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { expectedDisputeId1, beforeValues.indexer1, fisherman, - 0, + disputeDeposit / 2, beforeValues.attestation1.subgraphDeploymentId, attestationData1, beforeValues.stakeSnapshot1 @@ -223,13 +251,16 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { expectedDisputeId2, beforeValues.indexer2, fisherman, - 0, + disputeDeposit / 2, beforeValues.attestation2.subgraphDeploymentId, attestationData2, beforeValues.stakeSnapshot2 ); - (bytes32 _disputeId1, bytes32 _disputeId2) = disputeManager.createQueryDisputeConflict(attestationData1, attestationData2); + (bytes32 _disputeId1, bytes32 _disputeId2) = disputeManager.createQueryDisputeConflict( + attestationData1, + attestationData2 + ); // Check that the disputes were created and that they have the correct IDs assertTrue(disputeManager.isDisputeCreated(_disputeId1), "Dispute 1 should be created."); @@ -241,28 +272,55 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { IDisputeManager.Dispute memory dispute1 = _getDispute(_disputeId1); assertEq(dispute1.indexer, beforeValues.indexer1, "Indexer 1 should match"); assertEq(dispute1.fisherman, fisherman, "Fisherman 1 should match"); - assertEq(dispute1.deposit, 0, "Deposit 1 should match"); + assertEq(dispute1.deposit, disputeDeposit / 2, "Deposit 1 should match"); assertEq(dispute1.relatedDisputeId, _disputeId2, "Related dispute ID 1 should be the id of the other dispute"); - assertEq(uint8(dispute1.disputeType), uint8(IDisputeManager.DisputeType.QueryDispute), "Dispute type 1 should be query"); - assertEq(uint8(dispute1.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status 1 should be pending"); + assertEq( + uint8(dispute1.disputeType), + uint8(IDisputeManager.DisputeType.QueryDispute), + "Dispute type 1 should be query" + ); + assertEq( + uint8(dispute1.status), + uint8(IDisputeManager.DisputeStatus.Pending), + "Dispute status 1 should be pending" + ); assertEq(dispute1.createdAt, block.timestamp, "Created at 1 should match"); assertEq(dispute1.stakeSnapshot, beforeValues.stakeSnapshot1, "Stake snapshot 1 should match"); IDisputeManager.Dispute memory dispute2 = _getDispute(_disputeId2); assertEq(dispute2.indexer, beforeValues.indexer2, "Indexer 2 should match"); assertEq(dispute2.fisherman, fisherman, "Fisherman 2 should match"); - assertEq(dispute2.deposit, 0, "Deposit 2 should match"); + assertEq(dispute2.deposit, disputeDeposit / 2, "Deposit 2 should match"); assertEq(dispute2.relatedDisputeId, _disputeId1, "Related dispute ID 2 should be the id of the other dispute"); - assertEq(uint8(dispute2.disputeType), uint8(IDisputeManager.DisputeType.QueryDispute), "Dispute type 2 should be query"); - assertEq(uint8(dispute2.status), uint8(IDisputeManager.DisputeStatus.Pending), "Dispute status 2 should be pending"); + assertEq( + uint8(dispute2.disputeType), + uint8(IDisputeManager.DisputeType.QueryDispute), + "Dispute type 2 should be query" + ); + assertEq( + uint8(dispute2.status), + uint8(IDisputeManager.DisputeStatus.Pending), + "Dispute status 2 should be pending" + ); assertEq(dispute2.createdAt, block.timestamp, "Created at 2 should match"); assertEq(dispute2.stakeSnapshot, beforeValues.stakeSnapshot2, "Stake snapshot 2 should match"); + // Check that the fisherman was charged the dispute deposit + uint256 afterFishermanBalance = token.balanceOf(fisherman); + assertEq( + afterFishermanBalance, + beforeFishermanBalance - disputeDeposit, + "Fisherman should be charged the dispute deposit" + ); + return (_disputeId1, _disputeId2); } - function _acceptDispute(bytes32 _disputeId, uint256 _tokensSlash) internal { + function _acceptDispute(bytes32 _disputeId, uint256 _tokensSlash, bool _acceptRelatedDispute) internal { IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); + bool isDisputeInConflict = dispute.relatedDisputeId != bytes32(0); + IDisputeManager.Dispute memory relatedDispute; + if (isDisputeInConflict) relatedDispute = _getDispute(dispute.relatedDisputeId); address fisherman = dispute.fisherman; uint256 fishermanPreviousBalance = token.balanceOf(fisherman); uint256 indexerTokensAvailable = staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)); @@ -271,37 +329,86 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { uint256 fishermanReward = _tokensSlash.mulPPM(fishermanRewardPercentage); vm.expectEmit(address(disputeManager)); - emit IDisputeManager.DisputeAccepted(_disputeId, dispute.indexer, dispute.fisherman, dispute.deposit + fishermanReward); + emit IDisputeManager.DisputeAccepted( + _disputeId, + dispute.indexer, + dispute.fisherman, + dispute.deposit + fishermanReward + ); + + if (isDisputeInConflict) { + if (_acceptRelatedDispute) { + emit IDisputeManager.DisputeAccepted( + dispute.relatedDisputeId, + relatedDispute.indexer, + relatedDispute.fisherman, + relatedDispute.deposit + ); + } else { + emit IDisputeManager.DisputeRejected( + dispute.relatedDisputeId, + relatedDispute.indexer, + relatedDispute.fisherman, + relatedDispute.deposit + ); + } + } // Accept the dispute - disputeManager.acceptDispute(_disputeId, _tokensSlash); + disputeManager.acceptDispute(_disputeId, _tokensSlash, _acceptRelatedDispute); // Check fisherman's got their reward and their deposit (if any) back - uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward + disputeDeposit; - assertEq(token.balanceOf(fisherman), fishermanExpectedBalance, "Fisherman should get their reward and deposit back"); + uint256 fishermanExpectedBalance = fishermanPreviousBalance + + fishermanReward + + disputeDeposit + + (isDisputeInConflict ? relatedDispute.deposit : 0) + + ((isDisputeInConflict && _acceptRelatedDispute) ? fishermanReward : 0); + assertEq( + token.balanceOf(fisherman), + fishermanExpectedBalance, + "Fisherman should get their reward and deposit back" + ); // Check indexer was slashed by the correct amount uint256 expectedIndexerTokensAvailable; - if (_tokensSlash > indexerTokensAvailable) { + uint256 tokensToSlash = (isDisputeInConflict && _acceptRelatedDispute) ? _tokensSlash * 2 : _tokensSlash; + if (tokensToSlash > indexerTokensAvailable) { expectedIndexerTokensAvailable = 0; } else { - expectedIndexerTokensAvailable = indexerTokensAvailable - _tokensSlash; + expectedIndexerTokensAvailable = indexerTokensAvailable - tokensToSlash; } - assertEq(staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), expectedIndexerTokensAvailable, "Indexer should be slashed by the correct amount"); + assertEq( + staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), + expectedIndexerTokensAvailable, + "Indexer should be slashed by the correct amount" + ); // Check dispute status dispute = _getDispute(_disputeId); - assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Accepted), "Dispute status should be accepted"); + assertEq( + uint8(dispute.status), + uint8(IDisputeManager.DisputeStatus.Accepted), + "Dispute status should be accepted" + ); - // If there's a related dispute, check that it was rejected - if (dispute.relatedDisputeId != bytes32(0)) { - IDisputeManager.Dispute memory relatedDispute = _getDispute(dispute.relatedDisputeId); - assertEq(uint8(relatedDispute.status), uint8(IDisputeManager.DisputeStatus.Rejected), "Related dispute status should be rejected"); + // If there's a related dispute, check it + if (isDisputeInConflict) { + relatedDispute = _getDispute(dispute.relatedDisputeId); + assertEq( + uint8(relatedDispute.status), + _acceptRelatedDispute + ? uint8(IDisputeManager.DisputeStatus.Accepted) + : uint8(IDisputeManager.DisputeStatus.Drawn), + "Related dispute status should be drawn" + ); } } function _drawDispute(bytes32 _disputeId) internal { IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); + bool isConflictingDispute = dispute.relatedDisputeId != bytes32(0); + IDisputeManager.Dispute memory relatedDispute; + if (isConflictingDispute) relatedDispute = _getDispute(dispute.relatedDisputeId); address fisherman = dispute.fisherman; uint256 fishermanPreviousBalance = token.balanceOf(fisherman); uint256 indexerTokensAvailable = staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)); @@ -309,15 +416,29 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { vm.expectEmit(address(disputeManager)); emit IDisputeManager.DisputeDrawn(_disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); + if (isConflictingDispute) { + emit IDisputeManager.DisputeDrawn( + dispute.relatedDisputeId, + relatedDispute.indexer, + relatedDispute.fisherman, + relatedDispute.deposit + ); + } // Draw the dispute disputeManager.drawDispute(_disputeId); // Check that the fisherman got their deposit back - uint256 fishermanExpectedBalance = fishermanPreviousBalance + dispute.deposit; + uint256 fishermanExpectedBalance = fishermanPreviousBalance + + dispute.deposit + + (isConflictingDispute ? relatedDispute.deposit : 0); assertEq(token.balanceOf(fisherman), fishermanExpectedBalance, "Fisherman should receive their deposit back."); // Check that indexer was not slashed - assertEq(staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), indexerTokensAvailable, "Indexer should not be slashed"); + assertEq( + staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), + indexerTokensAvailable, + "Indexer should not be slashed" + ); // Check dispute status dispute = _getDispute(_disputeId); @@ -325,8 +446,12 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { // If there's a related dispute, check that it was drawn too if (dispute.relatedDisputeId != bytes32(0)) { - IDisputeManager.Dispute memory relatedDispute = _getDispute(dispute.relatedDisputeId); - assertEq(uint8(relatedDispute.status), uint8(IDisputeManager.DisputeStatus.Drawn), "Related dispute status should be drawn"); + relatedDispute = _getDispute(dispute.relatedDisputeId); + assertEq( + uint8(relatedDispute.status), + uint8(IDisputeManager.DisputeStatus.Drawn), + "Related dispute status should be drawn" + ); } } @@ -346,17 +471,28 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { assertEq(token.balanceOf(users.fisherman), fishermanPreviousBalance, "Fisherman should lose the deposit."); // Check that indexer was not slashed - assertEq(staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), indexerTokensAvailable, "Indexer should not be slashed"); + assertEq( + staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), + indexerTokensAvailable, + "Indexer should not be slashed" + ); // Check dispute status dispute = _getDispute(_disputeId); - assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Rejected), "Dispute status should be rejected"); + assertEq( + uint8(dispute.status), + uint8(IDisputeManager.DisputeStatus.Rejected), + "Dispute status should be rejected" + ); // Checl related id is empty assertEq(dispute.relatedDisputeId, bytes32(0), "Related dispute ID should be empty"); } function _cancelDispute(bytes32 _disputeId) internal { IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); + bool isDisputeInConflict = dispute.relatedDisputeId != bytes32(0); + IDisputeManager.Dispute memory relatedDispute; + if (isDisputeInConflict) relatedDispute = _getDispute(dispute.relatedDisputeId); address fisherman = dispute.fisherman; uint256 fishermanPreviousBalance = token.balanceOf(fisherman); uint256 disputePeriod = disputeManager.disputePeriod(); @@ -368,24 +504,50 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { vm.expectEmit(address(disputeManager)); emit IDisputeManager.DisputeCancelled(_disputeId, dispute.indexer, dispute.fisherman, dispute.deposit); + if (isDisputeInConflict) { + emit IDisputeManager.DisputeCancelled( + dispute.relatedDisputeId, + relatedDispute.indexer, + relatedDispute.fisherman, + relatedDispute.deposit + ); + } + // Cancel the dispute disputeManager.cancelDispute(_disputeId); // Check that the fisherman got their deposit back - uint256 fishermanExpectedBalance = fishermanPreviousBalance + dispute.deposit; - assertEq(token.balanceOf(users.fisherman), fishermanExpectedBalance, "Fisherman should receive their deposit back."); + uint256 fishermanExpectedBalance = fishermanPreviousBalance + + dispute.deposit + + (isDisputeInConflict ? relatedDispute.deposit : 0); + assertEq( + token.balanceOf(users.fisherman), + fishermanExpectedBalance, + "Fisherman should receive their deposit back." + ); // Check that indexer was not slashed - assertEq(staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), indexerTokensAvailable, "Indexer should not be slashed"); + assertEq( + staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), + indexerTokensAvailable, + "Indexer should not be slashed" + ); // Check dispute status dispute = _getDispute(_disputeId); - assertEq(uint8(dispute.status), uint8(IDisputeManager.DisputeStatus.Cancelled), "Dispute status should be cancelled"); + assertEq( + uint8(dispute.status), + uint8(IDisputeManager.DisputeStatus.Cancelled), + "Dispute status should be cancelled" + ); - // If there's a related dispute, check that it was cancelled too - if (dispute.relatedDisputeId != bytes32(0)) { - IDisputeManager.Dispute memory relatedDispute = _getDispute(dispute.relatedDisputeId); - assertEq(uint8(relatedDispute.status), uint8(IDisputeManager.DisputeStatus.Cancelled), "Related dispute status should be cancelled"); + if (isDisputeInConflict) { + relatedDispute = _getDispute(dispute.relatedDisputeId); + assertEq( + uint8(relatedDispute.status), + uint8(IDisputeManager.DisputeStatus.Cancelled), + "Related dispute status should be cancelled" + ); } } @@ -398,11 +560,12 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { bytes32 responseCID, bytes32 subgraphDeploymentId ) internal pure returns (Attestation.Receipt memory receipt) { - return Attestation.Receipt({ - requestCID: requestCID, - responseCID: responseCID, - subgraphDeploymentId: subgraphDeploymentId - }); + return + Attestation.Receipt({ + requestCID: requestCID, + responseCID: responseCID, + subgraphDeploymentId: subgraphDeploymentId + }); } function _createConflictingAttestations( @@ -446,15 +609,16 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { uint256 createdAt, uint256 stakeSnapshot ) = disputeManager.disputes(_disputeId); - return IDisputeManager.Dispute({ - indexer: indexer, - fisherman: fisherman, - deposit: deposit, - relatedDisputeId: relatedDisputeId, - disputeType: disputeType, - status: status, - createdAt: createdAt, - stakeSnapshot: stakeSnapshot - }); + return + IDisputeManager.Dispute({ + indexer: indexer, + fisherman: fisherman, + deposit: deposit, + relatedDisputeId: relatedDisputeId, + disputeType: disputeType, + status: status, + createdAt: createdAt, + stakeSnapshot: stakeSnapshot + }); } } diff --git a/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol b/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol index b6b4a6890..a7ac899ef 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol @@ -27,7 +27,7 @@ contract DisputeManagerDisputeTest is DisputeManagerTest { IDisputeManager.DisputeManagerInvalidDispute.selector, disputeID )); - disputeManager.acceptDispute(disputeID, tokensSlash); + disputeManager.acceptDispute(disputeID, tokensSlash, false); } function test_Dispute_Accept_RevertIf_SlashZeroTokens( @@ -40,7 +40,7 @@ contract DisputeManagerDisputeTest is DisputeManagerTest { resetPrank(users.arbitrator); uint256 maxTokensToSlash = uint256(maxSlashingPercentage).mulPPM(tokens); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerInvalidTokensSlash.selector, 0, maxTokensToSlash)); - disputeManager.acceptDispute(disputeID, 0); + disputeManager.acceptDispute(disputeID, 0, false); } function test_Dispute_Reject_RevertIf_DisputeDoesNotExist( diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol index 49bee9e26..28717a00f 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol @@ -24,7 +24,20 @@ contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); resetPrank(users.arbitrator); - _acceptDispute(disputeID, tokensSlash); + _acceptDispute(disputeID, tokensSlash, false); + } + + function test_Indexing_Accept_Dispute_OptParam( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + resetPrank(users.fisherman); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); + + resetPrank(users.arbitrator); + _acceptDispute(disputeID, tokensSlash, true); } function test_Indexing_Accept_RevertIf_CallerIsNotArbitrator( @@ -39,7 +52,7 @@ contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { // attempt to accept dispute as fisherman resetPrank(users.fisherman); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); - disputeManager.acceptDispute(disputeID, tokensSlash); + disputeManager.acceptDispute(disputeID, tokensSlash, false); } function test_Indexing_Accept_RevertWhen_SlashingOverMaxSlashPercentage( @@ -59,6 +72,6 @@ contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { maxTokensToSlash ); vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID, tokensSlash); + disputeManager.acceptDispute(disputeID, tokensSlash, false); } } diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol index 7670d381e..8c63a3004 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol @@ -31,7 +31,22 @@ contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { bytes32 disputeID = _createQueryDispute(attestationData); resetPrank(users.arbitrator); - _acceptDispute(disputeID, tokensSlash); + _acceptDispute(disputeID, tokensSlash, false); + } + + function test_Query_Accept_Dispute_OptParam( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + resetPrank(users.arbitrator); + _acceptDispute(disputeID, tokensSlash, true); } function test_Query_Accept_RevertIf_CallerIsNotArbitrator( @@ -47,7 +62,7 @@ contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { // attempt to accept dispute as fisherman vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); - disputeManager.acceptDispute(disputeID, tokensSlash); + disputeManager.acceptDispute(disputeID, tokensSlash, false); } function test_Query_Accept_RevertWhen_SlashingOverMaxSlashPercentage( @@ -70,6 +85,6 @@ contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { maxTokensToSlash ); vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID, tokensSlash); + disputeManager.acceptDispute(disputeID, tokensSlash, false); } } diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol index 46a6d4bdd..d44c2432a 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol @@ -18,7 +18,7 @@ contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { * TESTS */ - function test_Query_Conflict_Accept_Dispute( + function test_Query_Conflict_Accept_Dispute_Draw_Other( uint256 tokens, uint256 tokensSlash ) public useIndexer useAllocation(tokens) { @@ -33,11 +33,49 @@ contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { allocationIDPrivateKey ); + uint256 fishermanBalanceBefore = token.balanceOf(users.fisherman); + resetPrank(users.fisherman); - (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + (bytes32 disputeID1, ) = _createQueryDisputeConflict(attestationData1, attestationData2); resetPrank(users.arbitrator); - _acceptDispute(disputeID1, tokensSlash); + _acceptDispute(disputeID1, tokensSlash, false); + + uint256 fishermanRewardPercentage = disputeManager.fishermanRewardCut(); + uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanBalanceAfter = token.balanceOf(users.fisherman); + + assertEq(fishermanBalanceAfter, fishermanBalanceBefore + fishermanReward); + } + + function test_Query_Conflict_Accept_Dispute_Accept_Other( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + uint256 fishermanBalanceBefore = token.balanceOf(users.fisherman); + + resetPrank(users.fisherman); + (bytes32 disputeID1, ) = _createQueryDisputeConflict(attestationData1, attestationData2); + + resetPrank(users.arbitrator); + _acceptDispute(disputeID1, tokensSlash, true); + + uint256 fishermanRewardPercentage = disputeManager.fishermanRewardCut(); + uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanBalanceAfter = token.balanceOf(users.fisherman); + + assertEq(fishermanBalanceAfter, fishermanBalanceBefore + fishermanReward * 2); } function test_Query_Conflict_Accept_RevertIf_CallerIsNotArbitrator( @@ -56,12 +94,12 @@ contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { ); resetPrank(users.fisherman); - (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + (bytes32 disputeID1, ) = _createQueryDisputeConflict(attestationData1, attestationData2); // attempt to accept dispute as fisherman resetPrank(users.fisherman); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); - disputeManager.acceptDispute(disputeID1, tokensSlash); + disputeManager.acceptDispute(disputeID1, tokensSlash, false); } function test_Query_Conflict_Accept_RevertWhen_SlashingOverMaxSlashPercentage( @@ -80,17 +118,17 @@ contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { ); resetPrank(users.fisherman); - (bytes32 disputeID1,) = _createQueryDisputeConflict(attestationData1, attestationData2); + (bytes32 disputeID1, ) = _createQueryDisputeConflict(attestationData1, attestationData2); // max slashing percentage is 50% resetPrank(users.arbitrator); uint256 maxTokensToSlash = uint256(maxSlashingPercentage).mulPPM(tokens); bytes memory expectedError = abi.encodeWithSelector( - IDisputeManager.DisputeManagerInvalidTokensSlash.selector, + IDisputeManager.DisputeManagerInvalidTokensSlash.selector, tokensSlash, maxTokensToSlash ); vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID1, tokensSlash); + disputeManager.acceptDispute(disputeID1, tokensSlash, false); } } diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol index ff347f7d2..3b56a05d8 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/reject.t.sol @@ -7,14 +7,11 @@ import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManage import { DisputeManagerTest } from "../../DisputeManager.t.sol"; contract DisputeManagerQueryConflictRejectDisputeTest is DisputeManagerTest { - /* * TESTS */ - function test_Query_Conflict_Reject_Revert( - uint256 tokens - ) public useIndexer useAllocation(tokens) { + function test_Query_Conflict_Reject_Revert(uint256 tokens) public useIndexer useAllocation(tokens) { bytes32 requestCID = keccak256(abi.encodePacked("Request CID")); bytes32 responseCID1 = keccak256(abi.encodePacked("Response CID 1")); bytes32 responseCID2 = keccak256(abi.encodePacked("Response CID 2")); @@ -29,14 +26,10 @@ contract DisputeManagerQueryConflictRejectDisputeTest is DisputeManagerTest { ); resetPrank(users.fisherman); - (bytes32 disputeID1, bytes32 disputeID2) = _createQueryDisputeConflict(attestationData1, attestationData2); + (bytes32 disputeID1, ) = _createQueryDisputeConflict(attestationData1, attestationData2); resetPrank(users.arbitrator); - vm.expectRevert(abi.encodeWithSelector( - IDisputeManager.DisputeManagerMustAcceptRelatedDispute.selector, - disputeID1, - disputeID2 - )); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerDisputeInConflict.selector, disputeID1)); disputeManager.rejectDispute(disputeID1); } } diff --git a/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol b/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol index 1df13acb2..bfd97f731 100644 --- a/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol +++ b/packages/subgraph-service/test/disputeManager/governance/disputeDeposit.t.sol @@ -14,12 +14,12 @@ contract DisputeManagerGovernanceDisputeDepositTest is DisputeManagerTest { */ function test_Governance_SetDisputeDeposit(uint256 disputeDeposit) public useGovernor { - vm.assume(disputeDeposit > 0); + vm.assume(disputeDeposit >= MIN_DISPUTE_DEPOSIT); _setDisputeDeposit(disputeDeposit); } - function test_Governance_RevertWhen_ZeroValue() public useGovernor { - uint256 disputeDeposit = 0; + function test_Governance_RevertWhen_DepositTooLow(uint256 disputeDeposit) public useGovernor { + vm.assume(disputeDeposit < MIN_DISPUTE_DEPOSIT); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerInvalidDisputeDeposit.selector, disputeDeposit)); disputeManager.setDisputeDeposit(disputeDeposit); } diff --git a/packages/subgraph-service/test/mocks/MockGRTToken.sol b/packages/subgraph-service/test/mocks/MockGRTToken.sol index 7d21fd00a..c54f4e24c 100644 --- a/packages/subgraph-service/test/mocks/MockGRTToken.sol +++ b/packages/subgraph-service/test/mocks/MockGRTToken.sol @@ -7,7 +7,9 @@ import "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; contract MockGRTToken is ERC20, IGraphToken { constructor() ERC20("Graph Token", "GRT") {} - function burn(uint256 amount) external {} + function burn(uint256 amount) external { + _burn(msg.sender, amount); + } function burnFrom(address _from, uint256 amount) external { _burn(_from, amount); diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index 76f864da1..517f9991d 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -7,6 +7,7 @@ abstract contract Constants { uint256 internal constant EPOCH_LENGTH = 1; // Dispute Manager uint64 internal constant disputePeriod = 7 days; + uint256 internal constant MIN_DISPUTE_DEPOSIT = 1 ether; // 1 GRT uint256 internal constant disputeDeposit = 100 ether; // 100 GRT uint32 internal constant fishermanRewardPercentage = 500000; // 50% uint32 internal constant maxSlashingPercentage = 500000; // 50% From def8026dcffe710556a926c5bcd91d0c6945df22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 3 Dec 2024 11:59:05 -0300 Subject: [PATCH 308/343] fix: ignore thawing tokens on provision token check (TRST-L13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../utilities/ProvisionManager.sol | 8 +++++++- .../test/data-service/DataService.t.sol | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol index a3f96794c..68ac2813d 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManager.sol @@ -202,10 +202,16 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa /** * @notice Checks if the provision tokens of a service provider are within the valid range. + * Note that thawing tokens are not considered in this check. * @param _provision The provision to check. */ function _checkProvisionTokens(IHorizonStaking.Provision memory _provision) internal view virtual { - _checkValueInRange(_provision.tokens, minimumProvisionTokens, maximumProvisionTokens, "tokens"); + _checkValueInRange( + _provision.tokens - _provision.tokensThawing, + minimumProvisionTokens, + maximumProvisionTokens, + "tokens" + ); } /** diff --git a/packages/horizon/test/data-service/DataService.t.sol b/packages/horizon/test/data-service/DataService.t.sol index c535c6dea..d18e49ba9 100644 --- a/packages/horizon/test/data-service/DataService.t.sol +++ b/packages/horizon/test/data-service/DataService.t.sol @@ -65,6 +65,25 @@ contract DataServiceTest is HorizonStakingSharedTest { assertEq(max, dataServiceOverride.PROVISION_TOKENS_MAX()); } + function test_ProvisionTokens_WhenCheckingAValidProvision_WithThawing(uint256 tokens, uint256 tokensThaw) external useIndexer { + dataService.setProvisionTokensRange(dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); + tokens = bound(tokens, dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); + tokensThaw = bound(tokensThaw, tokens - dataService.PROVISION_TOKENS_MIN() + 1, tokens); + + _createProvision(users.indexer, address(dataService), tokens, 0, 0); + staking.thaw(users.indexer, address(dataService), tokensThaw); + vm.expectRevert( + abi.encodeWithSelector( + ProvisionManager.ProvisionManagerInvalidValue.selector, + "tokens", + tokens - tokensThaw, + dataService.PROVISION_TOKENS_MIN(), + dataService.PROVISION_TOKENS_MAX() + ) + ); + dataService.checkProvisionTokens(users.indexer); + } + function test_ProvisionTokens_WhenCheckingAValidProvision(uint256 tokens) external useIndexer { dataService.setProvisionTokensRange(dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); tokens = bound(tokens, dataService.PROVISION_TOKENS_MIN(), dataService.PROVISION_TOKENS_MAX()); From 2e108130eca4c7ec36d3b649c4a8bc6626a46254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 3 Dec 2024 12:11:28 -0300 Subject: [PATCH 309/343] fix: clarify data service initialization modes (TRST-L01) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/contracts/data-service/DataService.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/horizon/contracts/data-service/DataService.sol b/packages/horizon/contracts/data-service/DataService.sol index 8a06ad4ea..7923f1903 100644 --- a/packages/horizon/contracts/data-service/DataService.sol +++ b/packages/horizon/contracts/data-service/DataService.sol @@ -25,6 +25,8 @@ import { ProvisionManager } from "./utilities/ProvisionManager.sol"; * - If the data service implementation is NOT upgradeable, it must initialize the contract by calling * {__DataService_init} or {__DataService_init_unchained} in the constructor. Note that the `initializer` * will be required in the constructor. + * - Note that in both cases if using {__DataService_init_unchained} variant the corresponding parent + * initializers must be called in the implementation. */ abstract contract DataService is GraphDirectory, ProvisionManager, DataServiceV1Storage, IDataService { /** From 2bf44562faeace3cc021758081cd1368b872fe02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 3 Dec 2024 12:47:55 -0300 Subject: [PATCH 310/343] fix: verify state transition for tap collector thawing signers (TRST-R03) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../horizon/contracts/interfaces/ITAPCollector.sol | 7 +++++++ .../contracts/payments/collectors/TAPCollector.sol | 9 +++++---- .../payments/tap-collector/signer/thawSigner.t.sol | 13 +++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/horizon/contracts/interfaces/ITAPCollector.sol b/packages/horizon/contracts/interfaces/ITAPCollector.sol index 347ccf565..194edb11a 100644 --- a/packages/horizon/contracts/interfaces/ITAPCollector.sol +++ b/packages/horizon/contracts/interfaces/ITAPCollector.sol @@ -130,6 +130,13 @@ interface ITAPCollector is IPaymentsCollector { */ error TAPCollectorAuthorizationAlreadyRevoked(address payer, address signer); + /** + * Thrown when attempting to thaw a signer that is already thawing + * @param signer The address of the signer + * @param thawEndTimestamp The timestamp at which the thawing period ends + */ + error TAPCollectorSignerAlreadyThawing(address signer, uint256 thawEndTimestamp); + /** * Thrown when the signer is not thawing * @param signer The address of the signer diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index c98ef68a1..e23d16486 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -82,6 +82,10 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { require(authorization.payer == msg.sender, TAPCollectorSignerNotAuthorizedByPayer(msg.sender, signer)); require(!authorization.revoked, TAPCollectorAuthorizationAlreadyRevoked(msg.sender, signer)); + require( + authorization.thawEndTimestamp == 0, + TAPCollectorSignerAlreadyThawing(signer, authorization.thawEndTimestamp) + ); authorization.thawEndTimestamp = block.timestamp + REVOKE_SIGNER_THAWING_PERIOD; emit SignerThawing(msg.sender, signer, authorization.thawEndTimestamp); @@ -174,10 +178,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { // Ensure RAV payer matches the authorized payer address payer = authorizedSigners[signer].payer; - require( - signedRAV.rav.payer == payer, - TAPCollectorInvalidRAVPayer(payer, signedRAV.rav.payer) - ); + require(signedRAV.rav.payer == payer, TAPCollectorInvalidRAVPayer(payer, signedRAV.rav.payer)); address dataService = signedRAV.rav.dataService; address receiver = signedRAV.rav.serviceProvider; diff --git a/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol b/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol index db9d99040..def79d831 100644 --- a/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol +++ b/packages/horizon/test/payments/tap-collector/signer/thawSigner.t.sol @@ -40,4 +40,17 @@ contract TAPCollectorThawSignerTest is TAPCollectorTest { vm.expectRevert(expectedError); tapCollector.thawSigner(signer); } + + function testTAPCollector_ThawSigner_RevertWhen_AlreadyThawing() public useGateway useSigner { + _thawSigner(signer); + + (,uint256 thawEndTimestamp,) = tapCollector.authorizedSigners(signer); + bytes memory expectedError = abi.encodeWithSelector( + ITAPCollector.TAPCollectorSignerAlreadyThawing.selector, + signer, + thawEndTimestamp + ); + vm.expectRevert(expectedError); + tapCollector.thawSigner(signer); + } } From abe3321a049ff524625178bf69b7f445183e7d0a Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Tue, 3 Dec 2024 15:03:33 -0300 Subject: [PATCH 311/343] fix: add legacy slasher for transition period (TRST-H06) --- .../internal/IHorizonStakingExtension.sol | 16 ++ .../contracts/staking/HorizonStaking.sol | 18 ++ .../staking/HorizonStakingExtension.sol | 57 ++++++ packages/horizon/test/GraphBase.t.sol | 3 +- .../test/staking/slash/legacySlash.t.sol | 183 ++++++++++++++++++ packages/horizon/test/utils/Users.sol | 1 + 6 files changed, 277 insertions(+), 1 deletion(-) create mode 100644 packages/horizon/test/staking/slash/legacySlash.t.sol diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index a0b2dc1af..84318f536 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -77,6 +77,12 @@ interface IHorizonStakingExtension is IRewardsIssuer { uint256 delegationRewards ); + /** + * @dev Emitted when `indexer` was slashed for a total of `tokens` amount. + * Tracks `reward` amount of tokens given to `beneficiary`. + */ + event StakeSlashed(address indexed indexer, uint256 tokens, uint256 reward, address beneficiary); + /** * @notice Close an allocation and free the staked tokens. * To be eligible for rewards a proof of indexing must be presented. @@ -148,4 +154,14 @@ interface IHorizonStakingExtension is IRewardsIssuer { */ // solhint-disable-next-line func-name-mixedcase function __DEPRECATED_getThawingPeriod() external view returns (uint64); + + /** + * @notice Slash the indexer stake. Delegated tokens are not subject to slashing. + * @dev Can only be called by the slasher role. + * @param indexer Address of indexer to slash + * @param tokens Amount of tokens to slash from the indexer stake + * @param reward Amount of reward tokens to send to a beneficiary + * @param beneficiary Address of a beneficiary to receive a reward for the slashing + */ + function legacySlash(address indexer, uint256 tokens, uint256 reward, address beneficiary) external; } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 151bcaff4..659d0f089 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.27; import { IGraphToken } from "@graphprotocol/contracts/contracts/token/IGraphToken.sol"; import { IHorizonStakingMain } from "../interfaces/internal/IHorizonStakingMain.sol"; +import { IHorizonStakingExtension } from "../interfaces/internal/IHorizonStakingExtension.sol"; import { IGraphPayments } from "../interfaces/IGraphPayments.sol"; import { TokenUtils } from "@graphprotocol/contracts/contracts/utils/TokenUtils.sol"; @@ -433,6 +434,23 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 tokensVerifier, address verifierDestination ) external override notPaused { + // TODO remove after the transition period + // Check if sender is authorized to slash on the deprecated list + if (__DEPRECATED_slashers[msg.sender]) { + // Forward call to staking extension + (bool success, ) = STAKING_EXTENSION_ADDRESS.delegatecall( + abi.encodeWithSelector( + IHorizonStakingExtension.legacySlash.selector, + serviceProvider, + tokens, + tokensVerifier, + verifierDestination + ) + ); + require(success, "Delegatecall to legacySlash failed"); + return; + } + address verifier = msg.sender; Provision storage prov = _provisions[serviceProvider][verifier]; DelegationPoolInternal storage pool = _getDelegationPool(serviceProvider, verifier); diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index bc878a4f5..bb523d564 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -36,6 +36,14 @@ contract HorizonStakingExtension is HorizonStakingBase, IHorizonStakingExtension _; } + /** + * @dev Check if the caller is the slasher. + */ + modifier onlySlasher() { + require(__DEPRECATED_slashers[msg.sender] == true, "!slasher"); + _; + } + /** * @dev The staking contract is upgradeable however we still use the constructor to set * a few immutable variables. @@ -255,6 +263,55 @@ contract HorizonStakingExtension is HorizonStakingBase, IHorizonStakingExtension return __DEPRECATED_thawingPeriod; } + function legacySlash( + address indexer, + uint256 tokens, + uint256 reward, + address beneficiary + ) external override onlySlasher notPaused { + ServiceProviderInternal storage indexerStake = _serviceProviders[indexer]; + + // Only able to slash a non-zero number of tokens + require(tokens > 0, "!tokens"); + + // Rewards comes from tokens slashed balance + require(tokens >= reward, "rewards>slash"); + + // Cannot slash stake of an indexer without any or enough stake + require(indexerStake.tokensStaked > 0, "!stake"); + require(tokens <= indexerStake.tokensStaked, "slash>stake"); + + // Validate beneficiary of slashed tokens + require(beneficiary != address(0), "!beneficiary"); + + // Slashing more tokens than freely available (over allocation condition) + // Unlock locked tokens to avoid the indexer to withdraw them + uint256 tokensAvailable = indexerStake.tokensStaked - + indexerStake.__DEPRECATED_tokensAllocated - + indexerStake.__DEPRECATED_tokensLocked; + if (tokens > tokensAvailable && indexerStake.__DEPRECATED_tokensLocked > 0) { + uint256 tokensOverAllocated = tokens - tokensAvailable; + uint256 tokensToUnlock = MathUtils.min(tokensOverAllocated, indexerStake.__DEPRECATED_tokensLocked); + indexerStake.__DEPRECATED_tokensLocked = indexerStake.__DEPRECATED_tokensLocked - tokensToUnlock; + if (indexerStake.__DEPRECATED_tokensLocked == 0) { + indexerStake.__DEPRECATED_tokensLockedUntil = 0; + } + } + + // Remove tokens to slash from the stake + indexerStake.tokensStaked = indexerStake.tokensStaked - tokens; + + // -- Interactions -- + + // Set apart the reward for the beneficiary and burn remaining slashed stake + _graphToken().burnTokens(tokens - reward); + + // Give the beneficiary a reward for slashing + _graphToken().pushTokens(beneficiary, reward); + + emit StakeSlashed(indexer, tokens, reward, beneficiary); + } + /** * @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service. * @dev TODO: Delete after the transition period diff --git a/packages/horizon/test/GraphBase.t.sol b/packages/horizon/test/GraphBase.t.sol index 7aa44d6f5..b58479fcf 100644 --- a/packages/horizon/test/GraphBase.t.sol +++ b/packages/horizon/test/GraphBase.t.sol @@ -71,7 +71,8 @@ abstract contract GraphBaseTest is IHorizonStakingTypes, Utils, Constants { operator: createUser("operator"), gateway: createUser("gateway"), verifier: createUser("verifier"), - delegator: createUser("delegator") + delegator: createUser("delegator"), + legacySlasher: createUser("legacySlasher") }); // Deploy protocol contracts diff --git a/packages/horizon/test/staking/slash/legacySlash.t.sol b/packages/horizon/test/staking/slash/legacySlash.t.sol new file mode 100644 index 000000000..760978aae --- /dev/null +++ b/packages/horizon/test/staking/slash/legacySlash.t.sol @@ -0,0 +1,183 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingLegacySlashTest is HorizonStakingTest { + + /* + * MODIFIERS + */ + + modifier useLegacySlasher(address slasher) { + bytes32 storageKey = keccak256(abi.encode(slasher, 18)); + vm.store(address(staking), storageKey, bytes32(uint256(1))); + _; + } + + /* + * HELPERS + */ + + function _setIndexer( + address _indexer, + uint256 _tokensStaked, + uint256 _tokensAllocated, + uint256 _tokensLocked, + uint256 _tokensLockedUntil + ) public { + bytes32 baseSlot = keccak256(abi.encode(_indexer, 14)); + + vm.store(address(staking), bytes32(uint256(baseSlot)), bytes32(_tokensStaked)); + vm.store(address(staking), bytes32(uint256(baseSlot) + 1), bytes32(_tokensAllocated)); + vm.store(address(staking), bytes32(uint256(baseSlot) + 2), bytes32(_tokensLocked)); + vm.store(address(staking), bytes32(uint256(baseSlot) + 3), bytes32(_tokensLockedUntil)); + } + + /* + * ACTIONS + */ + + function _legacySlash(address _indexer, uint256 _tokens, uint256 _rewards, address _beneficiary) internal { + // before + uint256 beforeStakingBalance = token.balanceOf(address(staking)); + uint256 beforeRewardsDestinationBalance = token.balanceOf(_beneficiary); + + // slash + vm.expectEmit(address(staking)); + emit IHorizonStakingExtension.StakeSlashed(_indexer, _tokens, _rewards, _beneficiary); + staking.slash(_indexer, _tokens, _rewards, _beneficiary); + + // after + uint256 afterStakingBalance = token.balanceOf(address(staking)); + uint256 afterRewardsDestinationBalance = token.balanceOf(_beneficiary); + + assertEq(beforeStakingBalance - _tokens, afterStakingBalance); + assertEq(beforeRewardsDestinationBalance, afterRewardsDestinationBalance - _rewards); + } + + /* + * TESTS + */ + + function testSlash_Legacy( + uint256 tokens, + uint256 slashTokens, + uint256 reward + ) public useIndexer useLegacySlasher(users.legacySlasher) { + vm.assume(tokens > 1); + slashTokens = bound(slashTokens, 1, tokens); + reward = bound(reward, 0, slashTokens); + + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); + + resetPrank(users.legacySlasher); + _legacySlash(users.indexer, slashTokens, reward, makeAddr("fisherman")); + } + + function testSlash_Legacy_UsingLockedTokens( + uint256 tokens, + uint256 slashTokens, + uint256 reward + ) public useIndexer useLegacySlasher(users.legacySlasher) { + vm.assume(tokens > 1); + slashTokens = bound(slashTokens, 1, tokens); + reward = bound(reward, 0, slashTokens); + + _setIndexer(users.indexer, tokens, 0, tokens, block.timestamp + 1); + // Send tokens manually to staking + token.transfer(address(staking), tokens); + + resetPrank(users.legacySlasher); + _legacySlash(users.indexer, slashTokens, reward, makeAddr("fisherman")); + } + + function testSlash_Legacy_UsingAllocatedTokens( + uint256 tokens, + uint256 slashTokens, + uint256 reward + ) public useIndexer useLegacySlasher(users.legacySlasher) { + vm.assume(tokens > 1); + slashTokens = bound(slashTokens, 1, tokens); + reward = bound(reward, 0, slashTokens); + + _setIndexer(users.indexer, tokens, 0, tokens, 0); + // Send tokens manually to staking + token.transfer(address(staking), tokens); + + resetPrank(users.legacySlasher); + staking.legacySlash(users.indexer, slashTokens, reward, makeAddr("fisherman")); + } + + function testSlash_Legacy_RevertWhen_CallerNotSlasher( + uint256 tokens, + uint256 slashTokens, + uint256 reward + ) public useIndexer { + vm.assume(tokens > 0); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); + + vm.expectRevert("!slasher"); + staking.legacySlash(users.indexer, slashTokens, reward, makeAddr("fisherman")); + } + + function testSlash_Legacy_RevertWhen_RewardsOverSlashTokens( + uint256 tokens, + uint256 slashTokens, + uint256 reward + ) public useIndexer useLegacySlasher(users.legacySlasher) { + vm.assume(tokens > 0); + vm.assume(slashTokens > 0); + vm.assume(reward > slashTokens); + + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); + + resetPrank(users.legacySlasher); + vm.expectRevert("rewards>slash"); + staking.legacySlash(users.indexer, slashTokens, reward, makeAddr("fisherman")); + } + + function testSlash_Legacy_RevertWhen_NoStake( + uint256 slashTokens, + uint256 reward + ) public useLegacySlasher(users.legacySlasher) { + vm.assume(slashTokens > 0); + reward = bound(reward, 0, slashTokens); + + resetPrank(users.legacySlasher); + vm.expectRevert("!stake"); + staking.legacySlash(users.indexer, slashTokens, reward, makeAddr("fisherman")); + } + + function testSlash_Legacy_RevertWhen_ZeroTokens( + uint256 tokens + ) public useIndexer useLegacySlasher(users.legacySlasher) { + vm.assume(tokens > 0); + + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); + + resetPrank(users.legacySlasher); + vm.expectRevert("!tokens"); + staking.legacySlash(users.indexer, 0, 0, makeAddr("fisherman")); + } + + function testSlash_Legacy_RevertWhen_NoBeneficiary( + uint256 tokens, + uint256 slashTokens, + uint256 reward + ) public useIndexer useLegacySlasher(users.legacySlasher) { + vm.assume(tokens > 0); + slashTokens = bound(slashTokens, 1, tokens); + reward = bound(reward, 0, slashTokens); + + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); + + resetPrank(users.legacySlasher); + vm.expectRevert("!beneficiary"); + staking.legacySlash(users.indexer, slashTokens, reward, address(0)); + } +} diff --git a/packages/horizon/test/utils/Users.sol b/packages/horizon/test/utils/Users.sol index b26329f91..ecd3927ab 100644 --- a/packages/horizon/test/utils/Users.sol +++ b/packages/horizon/test/utils/Users.sol @@ -9,4 +9,5 @@ struct Users { address gateway; address verifier; address delegator; + address legacySlasher; } \ No newline at end of file From 63ee9ed295822cb4662ce28302d9ba025573325f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 3 Dec 2024 12:41:05 -0300 Subject: [PATCH 312/343] fix: verify state transition for pause guardian (TRST-R03) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../extensions/DataServicePausable.sol | 4 ++++ .../DataServicePausableUpgradeable.sol | 4 ++++ .../interfaces/IDataServicePausable.sol | 7 +++++++ .../extensions/DataServicePausable.t.sol | 17 +++++++++++++++++ 4 files changed, 32 insertions(+) diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index 3c83fbb0e..926f58e1a 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -51,6 +51,10 @@ abstract contract DataServicePausable is Pausable, DataService, IDataServicePaus * @param _allowed The allowed status of the pause guardian */ function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal { + require( + pauseGuardians[_pauseGuardian] == !_allowed, + DataServicePausablePauseGuardianNoChange(_pauseGuardian, _allowed) + ); pauseGuardians[_pauseGuardian] = _allowed; emit PauseGuardianSet(_pauseGuardian, _allowed); } diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol index 82d7cc63b..d282c789d 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol @@ -62,6 +62,10 @@ abstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataSer * @param _allowed The allowed status of the pause guardian */ function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused { + require( + pauseGuardians[_pauseGuardian] == !_allowed, + DataServicePausablePauseGuardianNoChange(_pauseGuardian, _allowed) + ); pauseGuardians[_pauseGuardian] = _allowed; emit PauseGuardianSet(_pauseGuardian, _allowed); } diff --git a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol index bd27ca848..0579c6649 100644 --- a/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol +++ b/packages/horizon/contracts/data-service/interfaces/IDataServicePausable.sol @@ -23,6 +23,13 @@ interface IDataServicePausable is IDataService { */ error DataServicePausableNotPauseGuardian(address account); + /** + * @notice Emitted when a pause guardian is set to the same allowed status + * @param account The address of the pause guardian + * @param allowed The allowed status of the pause guardian + */ + error DataServicePausablePauseGuardianNoChange(address account, bool allowed); + /** * @notice Pauses the data service. * @dev Note that only functions using the modifiers `whenNotPaused` diff --git a/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol b/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol index 111838fe4..46cded2eb 100644 --- a/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol +++ b/packages/horizon/test/data-service/extensions/DataServicePausable.t.sol @@ -70,6 +70,23 @@ contract DataServicePausableTest is HorizonStakingSharedTest { _assert_setPauseGuardian(address(this), false); } + function test_SetPauseGuardian_RevertWhen_AlreadyPauseGuardian() external { + _assert_setPauseGuardian(address(this), true); + vm.expectRevert( + abi.encodeWithSignature("DataServicePausablePauseGuardianNoChange(address,bool)", address(this), true) + ); + dataService.setPauseGuardian(address(this), true); + } + + function test_SetPauseGuardian_RevertWhen_AlreadyNotPauseGuardian() external { + _assert_setPauseGuardian(address(this), true); + _assert_setPauseGuardian(address(this), false); + vm.expectRevert( + abi.encodeWithSignature("DataServicePausablePauseGuardianNoChange(address,bool)", address(this), false) + ); + dataService.setPauseGuardian(address(this), false); + } + function test_PausedProtectedFn_RevertWhen_TheProtocolIsPaused() external { _assert_setPauseGuardian(address(this), true); _assert_pause(); From 194b6037af1ec647b4940855e645550b9c612e4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 4 Dec 2024 10:24:49 -0300 Subject: [PATCH 313/343] fix: add storage gap to upgradeable contract (TRST-R04) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../horizon/contracts/data-service/DataServiceStorage.sol | 1 + .../data-service/extensions/DataServiceFeesStorage.sol | 1 + .../extensions/DataServicePausableUpgradeable.sol | 3 +++ .../data-service/extensions/DataServiceRescuable.sol | 4 ++++ .../data-service/utilities/ProvisionManagerStorage.sol | 1 + 5 files changed, 10 insertions(+) diff --git a/packages/horizon/contracts/data-service/DataServiceStorage.sol b/packages/horizon/contracts/data-service/DataServiceStorage.sol index a0271443c..3d8e84f82 100644 --- a/packages/horizon/contracts/data-service/DataServiceStorage.sol +++ b/packages/horizon/contracts/data-service/DataServiceStorage.sol @@ -3,5 +3,6 @@ pragma solidity 0.8.27; abstract contract DataServiceV1Storage { /// @dev Gap to allow adding variables in future upgrades + /// Note that this contract is not upgradeable but might be inherited by an upgradeable contract uint256[50] private __gap; } diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol index cb4f908dc..853b57209 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol @@ -18,5 +18,6 @@ abstract contract DataServiceFeesV1Storage { mapping(address serviceProvider => LinkedList.List list) public claimsLists; /// @dev Gap to allow adding variables in future upgrades + /// Note that this contract is not upgradeable but might be inherited by an upgradeable contract uint256[50] private __gap; } diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol index d282c789d..4bc209095 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol @@ -15,6 +15,9 @@ abstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataSer /// @notice List of pause guardians and their allowed status mapping(address pauseGuardian => bool allowed) public pauseGuardians; + /// @dev Gap to allow adding variables in future upgrades + uint256[50] private __gap; + /** * @notice Checks if the caller is a pause guardian. */ diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index 0d2f0750d..e3d587245 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -22,6 +22,10 @@ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { /// @notice List of rescuers and their allowed status mapping(address rescuer => bool allowed) public rescuers; + /// @dev Gap to allow adding variables in future upgrades + /// Note that this contract is not upgradeable but might be inherited by an upgradeable contract + uint256[50] private __gap; + /** * @notice Checks if the caller is a rescuer. */ diff --git a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol index 0a6bed2be..0732afc9a 100644 --- a/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol +++ b/packages/horizon/contracts/data-service/utilities/ProvisionManagerStorage.sol @@ -28,5 +28,6 @@ abstract contract ProvisionManagerV1Storage { uint32 public delegationRatio; /// @dev Gap to allow adding variables in future upgrades + /// Note that this contract is not upgradeable but might be inherited by an upgradeable contract uint256[50] private __gap; } From 29ed2e645a6aa404b9c40b58f5eb28bd8ddc8a06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 4 Dec 2024 10:31:56 -0300 Subject: [PATCH 314/343] fix: allow setting pause guardian when paused (TRST-R05) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../data-service/extensions/DataServicePausableUpgradeable.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol index 4bc209095..10ec644ab 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol @@ -64,7 +64,7 @@ abstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataSer * @param _pauseGuardian The address of the pause guardian * @param _allowed The allowed status of the pause guardian */ - function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal whenNotPaused { + function _setPauseGuardian(address _pauseGuardian, bool _allowed) internal { require( pauseGuardians[_pauseGuardian] == !_allowed, DataServicePausablePauseGuardianNoChange(_pauseGuardian, _allowed) From c8ede7a4c408cc9ef4ac63c90c592a3e7b497231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Wed, 4 Dec 2024 10:40:40 -0300 Subject: [PATCH 315/343] fix: clarify initialization needs for data service extensions (TRST-R06) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/data-service/extensions/DataServiceFees.sol | 2 ++ .../contracts/data-service/extensions/DataServicePausable.sol | 2 ++ .../data-service/extensions/DataServicePausableUpgradeable.sol | 2 ++ .../contracts/data-service/extensions/DataServiceRescuable.sol | 2 ++ 4 files changed, 8 insertions(+) diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index 09102dd4a..a2b0ed563 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -14,6 +14,8 @@ import { DataServiceFeesV1Storage } from "./DataServiceFeesStorage.sol"; * @dev Implementation of the {IDataServiceFees} interface. * @notice Extension for the {IDataService} contract to handle payment collateralization * using a Horizon provision. See {IDataServiceFees} for more details. + * @dev This contract inherits from {DataService} which needs to be initialized, please see + * {DataService} for detailed instructions. */ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDataServiceFees { using ProvisionTracker for mapping(address => uint256); diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol index 926f58e1a..475614454 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausable.sol @@ -14,6 +14,8 @@ import { DataService } from "../DataService.sol"; * pause guardians. * @dev Note that this extension does not provide an external function to set pause * guardians. This should be implemented in the derived contract. + * @dev This contract inherits from {DataService} which needs to be initialized, please see + * {DataService} for detailed instructions. */ abstract contract DataServicePausable is Pausable, DataService, IDataServicePausable { /// @notice List of pause guardians and their allowed status diff --git a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol index 10ec644ab..2cecdedb6 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol @@ -10,6 +10,8 @@ import { DataService } from "../DataService.sol"; * @title DataServicePausableUpgradeable contract * @dev Implementation of the {IDataServicePausable} interface. * @dev Upgradeable version of the {DataServicePausable} contract. + * @dev This contract inherits from {DataService} which needs to be initialized, please see + * {DataService} for detailed instructions. */ abstract contract DataServicePausableUpgradeable is PausableUpgradeable, DataService, IDataServicePausable { /// @notice List of pause guardians and their allowed status diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol index e3d587245..0f57862d5 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceRescuable.sol @@ -17,6 +17,8 @@ import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.s * that calls this contract's _rescueTokens. * @dev Note that this extension does not provide an external function to set * rescuers. This should be implemented in the derived contract. + * @dev This contract inherits from {DataService} which needs to be initialized, please see + * {DataService} for detailed instructions. */ abstract contract DataServiceRescuable is DataService, IDataServiceRescuable { /// @notice List of rescuers and their allowed status From f254897802b6cbfbc8e9e972798fa89a0bbf6398 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 4 Dec 2024 10:56:36 -0300 Subject: [PATCH 316/343] fix: add missing legacy withdraw delegated (TRST-H07) --- .../internal/IHorizonStakingExtension.sol | 14 +++ .../staking/HorizonStakingExtension.sol | 37 +++++++ .../staking/delegation/legacyWithdraw.t.sol | 98 +++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 packages/horizon/test/staking/delegation/legacyWithdraw.t.sol diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 84318f536..4c6f83075 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -83,6 +83,11 @@ interface IHorizonStakingExtension is IRewardsIssuer { */ event StakeSlashed(address indexed indexer, uint256 tokens, uint256 reward, address beneficiary); + /** + * @dev Emitted when `delegator` withdrew delegated `tokens` from `indexer` using `legacyWithdrawDelegated`. + */ + event StakeDelegatedWithdrawn(address indexed indexer, address indexed delegator, uint256 tokens); + /** * @notice Close an allocation and free the staked tokens. * To be eligible for rewards a proof of indexing must be presented. @@ -164,4 +169,13 @@ interface IHorizonStakingExtension is IRewardsIssuer { * @param beneficiary Address of a beneficiary to receive a reward for the slashing */ function legacySlash(address indexer, uint256 tokens, uint256 reward, address beneficiary) external; + + /** + * @notice Withdraw undelegated tokens once the unbonding period has passed. + * @param _indexer Withdraw available tokens delegated to indexer + */ + function legacyWithdrawDelegated( + address _indexer, + address /* _newIndexer, deprecated */ + ) external returns (uint256); } diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index bb523d564..4eaeb9a12 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -312,6 +312,43 @@ contract HorizonStakingExtension is HorizonStakingBase, IHorizonStakingExtension emit StakeSlashed(indexer, tokens, reward, beneficiary); } + /** + * @notice Withdraw undelegated tokens once the unbonding period has passed. + * @param indexer Withdraw available tokens delegated to indexer + */ + function legacyWithdrawDelegated( + address indexer, + address // newIndexer, deprecated + ) external override notPaused returns (uint256) { + // Get the delegation pool of the indexer + address delegator = msg.sender; + DelegationPoolInternal storage pool = _legacyDelegationPools[indexer]; + DelegationInternal storage delegation = pool.delegators[delegator]; + + // Validation + uint256 tokensToWithdraw = 0; + uint256 currentEpoch = _graphEpochManager().currentEpoch(); + if ( + delegation.__DEPRECATED_tokensLockedUntil > 0 && currentEpoch >= delegation.__DEPRECATED_tokensLockedUntil + ) { + tokensToWithdraw = delegation.__DEPRECATED_tokensLocked; + } + require(tokensToWithdraw > 0, "!tokens"); + + // Reset lock + delegation.__DEPRECATED_tokensLocked = 0; + delegation.__DEPRECATED_tokensLockedUntil = 0; + + emit StakeDelegatedWithdrawn(indexer, delegator, tokensToWithdraw); + + // -- Interactions -- + + // Return tokens to the delegator + _graphToken().pushTokens(delegator, tokensToWithdraw); + + return tokensToWithdraw; + } + /** * @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service. * @dev TODO: Delete after the transition period diff --git a/packages/horizon/test/staking/delegation/legacyWithdraw.t.sol b/packages/horizon/test/staking/delegation/legacyWithdraw.t.sol new file mode 100644 index 000000000..c70fb73a3 --- /dev/null +++ b/packages/horizon/test/staking/delegation/legacyWithdraw.t.sol @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { IHorizonStakingMain } from "../../../contracts/interfaces/internal/IHorizonStakingMain.sol"; +import { IHorizonStakingTypes } from "../../../contracts/interfaces/internal/IHorizonStakingTypes.sol"; +import { IHorizonStakingExtension } from "../../../contracts/interfaces/internal/IHorizonStakingExtension.sol"; +import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; + +import { HorizonStakingTest } from "../HorizonStaking.t.sol"; + +contract HorizonStakingLegacyWithdrawDelegationTest is HorizonStakingTest { + /* + * MODIFIERS + */ + + modifier useDelegator() { + resetPrank(users.delegator); + _; + } + + /* + * HELPERS + */ + + function _setLegacyDelegation( + address _indexer, + address _delegator, + uint256 _shares, + uint256 __DEPRECATED_tokensLocked, + uint256 __DEPRECATED_tokensLockedUntil + ) public { + // Calculate the base storage slot for the serviceProvider in the mapping + bytes32 baseSlot = keccak256(abi.encode(_indexer, uint256(20))); + + // Calculate the slot for the delegator's DelegationInternal struct + bytes32 delegatorSlot = keccak256(abi.encode(_delegator, bytes32(uint256(baseSlot) + 4))); + + // Use vm.store to set each field of the struct + vm.store(address(staking), bytes32(uint256(delegatorSlot)), bytes32(_shares)); + vm.store(address(staking), bytes32(uint256(delegatorSlot) + 1), bytes32(__DEPRECATED_tokensLocked)); + vm.store(address(staking), bytes32(uint256(delegatorSlot) + 2), bytes32(__DEPRECATED_tokensLockedUntil)); + } + + /* + * ACTIONS + */ + + function _legacyWithdrawDelegated(address _indexer) internal { + (, address delegator, ) = vm.readCallers(); + IHorizonStakingTypes.DelegationPool memory pool = staking.getDelegationPool(_indexer, subgraphDataServiceLegacyAddress); + uint256 beforeStakingBalance = token.balanceOf(address(staking)); + uint256 beforeDelegatorBalance = token.balanceOf(users.delegator); + + vm.expectEmit(address(staking)); + emit IHorizonStakingExtension.StakeDelegatedWithdrawn(_indexer, delegator, pool.tokens); + staking.legacyWithdrawDelegated(users.indexer, address(0)); + + uint256 afterStakingBalance = token.balanceOf(address(staking)); + uint256 afterDelegatorBalance = token.balanceOf(users.delegator); + + assertEq(afterStakingBalance, beforeStakingBalance - pool.tokens); + assertEq(afterDelegatorBalance - pool.tokens, beforeDelegatorBalance); + + DelegationInternal memory delegation = _getStorage_Delegation( + _indexer, + subgraphDataServiceLegacyAddress, + delegator, + true + ); + assertEq(delegation.shares, 0); + assertEq(delegation.__DEPRECATED_tokensLocked, 0); + assertEq(delegation.__DEPRECATED_tokensLockedUntil, 0); + } + + /* + * TESTS + */ + + function testWithdraw_Legacy(uint256 tokensLocked) public useDelegator { + vm.assume(tokensLocked > 0); + + _setStorage_DelegationPool(users.indexer, tokensLocked, 0, 0); + _setLegacyDelegation(users.indexer, users.delegator, 0, tokensLocked, 1); + token.transfer(address(staking), tokensLocked); + + _legacyWithdrawDelegated(users.indexer); + } + + function testWithdraw_Legacy_RevertWhen_NoTokens() public useDelegator { + _setStorage_DelegationPool(users.indexer, 0, 0, 0); + _setLegacyDelegation(users.indexer, users.delegator, 0, 0, 0); + + vm.expectRevert("!tokens"); + staking.legacyWithdrawDelegated(users.indexer, address(0)); + } +} From 91cda5619ee96954cfaa7526c24499521e66ee3f Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 4 Dec 2024 15:15:40 -0300 Subject: [PATCH 317/343] fix: added minimum delegation for provisions (TRST-M03) --- .../contracts/staking/HorizonStaking.sol | 11 +++++ packages/horizon/test/escrow/collect.t.sol | 2 +- .../horizon/test/payments/GraphPayments.t.sol | 2 +- .../horizon/test/staking/HorizonStaking.t.sol | 28 ++++++++++++- .../test/staking/delegation/addToPool.t.sol | 5 ++- .../test/staking/delegation/delegate.t.sol | 24 +++++++++-- .../test/staking/delegation/redelegate.t.sol | 13 ------ .../test/staking/delegation/undelegate.t.sol | 41 ++++++++++++++++--- .../test/staking/delegation/withdraw.t.sol | 21 +--------- .../horizon/test/staking/slash/slash.t.sol | 6 +-- packages/horizon/test/utils/Constants.sol | 1 + 11 files changed, 105 insertions(+), 49 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 659d0f089..5d7961574 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -41,6 +41,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /// @dev Address of the staking extension contract address private immutable STAKING_EXTENSION_ADDRESS; + /// @dev Minimum amount of delegation. + uint256 private constant MIN_DELEGATION = 1e18; + /** * @notice Checks that the caller is authorized to operate over a provision. * @param serviceProvider The address of the service provider. @@ -842,6 +845,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * have been done before calling this function. */ function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) private { + require(_tokens >= MIN_DELEGATION, HorizonStakingInsufficientTokens(_tokens, MIN_DELEGATION)); require( _provisions[_serviceProvider][_verifier].createdAt != 0, HorizonStakingInvalidProvision(_serviceProvider, _verifier) @@ -911,6 +915,13 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { pool.shares = pool.shares - _shares; delegation.shares = delegation.shares - _shares; + if (delegation.shares != 0) { + uint256 remainingTokens = (delegation.shares * (pool.tokens - pool.tokensThawing)) / pool.shares; + require( + remainingTokens >= MIN_DELEGATION, + HorizonStakingInsufficientTokens(remainingTokens, MIN_DELEGATION) + ); + } bytes32 thawRequestId = _createThawRequest( _requestType, diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 72b795ee9..e47c04ec5 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -101,7 +101,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { uint256 tokensDelegatoion = tokens * delegationFeeCut / MAX_PPM; vm.assume(tokensDataService < tokens - tokensProtocol - tokensDelegatoion); - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 19028bde1..47740b4cd 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -119,7 +119,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { address escrowAddress = address(escrow); // Delegate tokens - tokensDelegate = bound(tokensDelegate, 1, MAX_STAKING_TOKENS); + tokensDelegate = bound(tokensDelegate, MIN_DELEGATION, MAX_STAKING_TOKENS); vm.startPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, tokensDelegate, 0); diff --git a/packages/horizon/test/staking/HorizonStaking.t.sol b/packages/horizon/test/staking/HorizonStaking.t.sol index b1b45d118..d57b1c1b8 100644 --- a/packages/horizon/test/staking/HorizonStaking.t.sol +++ b/packages/horizon/test/staking/HorizonStaking.t.sol @@ -31,7 +31,7 @@ contract HorizonStakingTest is HorizonStakingSharedTest { modifier useDelegation(uint256 delegationAmount) { address msgSender; (, msgSender, ) = vm.readCallers(); - vm.assume(delegationAmount > 1); + vm.assume(delegationAmount >= MIN_DELEGATION); vm.assume(delegationAmount <= MAX_STAKING_TOKENS); vm.startPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); @@ -56,4 +56,30 @@ contract HorizonStakingTest is HorizonStakingSharedTest { resetPrank(msgSender); _; } + + modifier useUndelegate(uint256 shares) { + resetPrank(users.delegator); + + DelegationPoolInternalTest memory pool = _getStorage_DelegationPoolInternal( + users.indexer, + subgraphDataServiceAddress, + false + ); + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + + shares = bound(shares, 1, delegation.shares); + uint256 tokens = (shares * (pool.tokens - pool.tokensThawing)) / pool.shares; + if (shares < delegation.shares) { + uint256 remainingTokens = (shares * (pool.tokens - pool.tokensThawing - tokens)) / pool.shares; + vm.assume(remainingTokens >= MIN_DELEGATION); + } + + _undelegate(users.indexer, subgraphDataServiceAddress, shares); + _; + } } diff --git a/packages/horizon/test/staking/delegation/addToPool.t.sol b/packages/horizon/test/staking/delegation/addToPool.t.sol index ff5b957ca..2bd73f28f 100644 --- a/packages/horizon/test/staking/delegation/addToPool.t.sol +++ b/packages/horizon/test/staking/delegation/addToPool.t.sol @@ -10,6 +10,7 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { modifier useValidDelegationAmount(uint256 tokens) { vm.assume(tokens <= MAX_STAKING_TOKENS); + vm.assume(tokens >= MIN_DELEGATION); _; } @@ -93,7 +94,7 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { uint256 recoverAmount ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { recoverAmount = bound(recoverAmount, 1, MAX_STAKING_TOKENS); - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); // create delegation pool resetPrank(users.delegator); @@ -116,7 +117,7 @@ contract HorizonStakingDelegationAddToPoolTest is HorizonStakingTest { uint256 recoverAmount ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { recoverAmount = bound(recoverAmount, 1, MAX_STAKING_TOKENS); - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); // create delegation pool resetPrank(users.delegator); diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index ab58e4bde..5fc6681df 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -59,9 +59,25 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { staking.delegate(users.indexer, subgraphDataServiceAddress, 0, 0); } + function testDelegate_RevertWhen_UnderMinDelegation( + uint256 amount, + uint256 delegationAmount + ) public useIndexer useProvision(amount, 0, 0) { + delegationAmount = bound(delegationAmount, 1, MIN_DELEGATION - 1); + vm.startPrank(users.delegator); + token.approve(address(staking), delegationAmount); + bytes memory expectedError = abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInsufficientTokens.selector, + delegationAmount, + MIN_DELEGATION + ); + vm.expectRevert(expectedError); + staking.delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); + } + function testDelegate_LegacySubgraphService(uint256 amount, uint256 delegationAmount) public useIndexer { amount = bound(amount, 1 ether, MAX_STAKING_TOKENS); - delegationAmount = bound(delegationAmount, 1, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(users.indexer, subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); @@ -72,7 +88,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); @@ -96,7 +112,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, 2, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION * 2, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); @@ -126,7 +142,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { uint256 recoverAmount ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { recoverAmount = bound(recoverAmount, 1, MAX_STAKING_TOKENS); - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); // create delegation pool resetPrank(users.delegator); diff --git a/packages/horizon/test/staking/delegation/redelegate.t.sol b/packages/horizon/test/staking/delegation/redelegate.t.sol index 605e6601f..6e30348c4 100644 --- a/packages/horizon/test/staking/delegation/redelegate.t.sol +++ b/packages/horizon/test/staking/delegation/redelegate.t.sol @@ -9,19 +9,6 @@ import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { - /* - * MODIFIERS - */ - - modifier useUndelegate(uint256 shares) { - resetPrank(users.delegator); - DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); - shares = bound(shares, 1, delegation.shares); - - _undelegate(users.indexer, subgraphDataServiceAddress, shares); - _; - } - /* * HELPERS */ diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index c824832c4..a2d41c061 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -32,7 +32,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 undelegateSteps ) public useIndexer useProvision(amount, 0, 0) { undelegateSteps = bound(undelegateSteps, 1, 10); - delegationAmount = bound(delegationAmount, 10 wei, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, MIN_DELEGATION * undelegateSteps, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationAmount, 0); @@ -44,9 +44,17 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { ); uint256 undelegateAmount = delegation.shares / undelegateSteps; - for (uint i = 0; i < undelegateSteps; i++) { + for (uint i = 0; i < undelegateSteps - 1; i++) { _undelegate(users.indexer, subgraphDataServiceAddress, undelegateAmount); } + + delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + _undelegate(users.indexer, subgraphDataServiceAddress, delegation.shares); } function testUndelegate_WithBeneficiary( @@ -60,6 +68,29 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { _undelegateWithBeneficiary(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); } + function testUndelegate_RevertWhen_InsuficientTokens( + uint256 amount, + uint256 delegationAmount, + uint256 undelegateAmount + ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { + undelegateAmount = bound(undelegateAmount, 1, delegationAmount); + resetPrank(users.delegator); + DelegationInternal memory delegation = _getStorage_Delegation( + users.indexer, + subgraphDataServiceAddress, + users.delegator, + false + ); + undelegateAmount = bound(undelegateAmount, delegation.shares - MIN_DELEGATION + 1, delegation.shares - 1); + bytes memory expectedError = abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInsufficientTokens.selector, + delegation.shares - undelegateAmount, + MIN_DELEGATION + ); + vm.expectRevert(expectedError); + staking.undelegate(users.indexer, subgraphDataServiceAddress, undelegateAmount); + } + function testUndelegate_RevertWhen_TooManyUndelegations() public useIndexer @@ -112,7 +143,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { function testUndelegate_LegacySubgraphService(uint256 amount, uint256 delegationAmount) public useIndexer { amount = bound(amount, 1, MAX_STAKING_TOKENS); - delegationAmount = bound(delegationAmount, 1, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(users.indexer, subgraphDataServiceLegacyAddress, amount, 0, 0); resetPrank(users.delegator); @@ -131,7 +162,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); @@ -162,7 +193,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, 0) useDelegationSlashing { - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); // delegate resetPrank(users.delegator); diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index ff3fb3db0..c8ab59122 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -10,23 +10,6 @@ import { LinkedList } from "../../../contracts/libraries/LinkedList.sol"; import { HorizonStakingTest } from "../HorizonStaking.t.sol"; contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { - /* - * MODIFIERS - */ - - modifier useUndelegate(uint256 shares) { - resetPrank(users.delegator); - DelegationInternal memory delegation = _getStorage_Delegation( - users.indexer, - subgraphDataServiceAddress, - users.delegator, - false - ); - shares = bound(shares, 1, delegation.shares); - - _undelegate(users.indexer, subgraphDataServiceAddress, shares); - _; - } /* * TESTS @@ -81,7 +64,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { } function testWithdrawDelegation_LegacySubgraphService(uint256 delegationAmount) public useIndexer { - delegationAmount = bound(delegationAmount, 1, MAX_STAKING_TOKENS); + delegationAmount = bound(delegationAmount, MIN_DELEGATION, MAX_STAKING_TOKENS); _createProvision(users.indexer, subgraphDataServiceLegacyAddress, 10_000_000 ether, 0, MAX_THAWING_PERIOD); resetPrank(users.delegator); @@ -111,7 +94,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, 0, MAX_THAWING_PERIOD) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, 2, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION * 2, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); diff --git a/packages/horizon/test/staking/slash/slash.t.sol b/packages/horizon/test/staking/slash/slash.t.sol index a74403ed7..fc5676b0f 100644 --- a/packages/horizon/test/staking/slash/slash.t.sol +++ b/packages/horizon/test/staking/slash/slash.t.sol @@ -54,7 +54,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 delegationTokens ) public useIndexer useProvision(tokens, MAX_PPM, 0) { vm.assume(slashTokens > tokens); - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); verifierCutAmount = bound(verifierCutAmount, 0, MAX_PPM); vm.assume(verifierCutAmount <= tokens); @@ -71,7 +71,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 verifierCutAmount, uint256 delegationTokens ) public useIndexer useProvision(tokens, MAX_PPM, 0) useDelegationSlashing() { - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); slashTokens = bound(slashTokens, tokens + 1, tokens + 1 + delegationTokens); verifierCutAmount = bound(verifierCutAmount, 0, tokens); @@ -110,7 +110,7 @@ contract HorizonStakingSlashTest is HorizonStakingTest { uint256 tokens, uint256 delegationTokens ) public useIndexer useProvision(tokens, MAX_PPM, 0) useDelegationSlashing { - delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + delegationTokens = bound(delegationTokens, MIN_DELEGATION, MAX_STAKING_TOKENS); resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index cd5cc2bfb..9af54087d 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -14,6 +14,7 @@ abstract contract Constants { uint256 internal constant MAX_THAW_REQUESTS = 100; uint64 internal constant MAX_THAWING_PERIOD = 28 days; uint32 internal constant THAWING_PERIOD_IN_BLOCKS = 300; + uint256 internal constant MIN_DELEGATION = 1e18; // Epoch manager uint256 internal constant EPOCH_LENGTH = 1; // Rewards manager From 07ef418ecbd1641de3bdad7e5efa9a96cddf9219 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 4 Dec 2024 16:11:15 -0300 Subject: [PATCH 318/343] fix: operator check in closeAllocation (TRST-M12) --- .../staking/HorizonStakingExtension.sol | 3 +-- .../test/staking/allocation/close.t.sol | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 4eaeb9a12..33d59b61b 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -443,8 +443,7 @@ contract HorizonStakingExtension is HorizonStakingBase, IHorizonStakingExtension // Anyone is allowed to close ONLY under two concurrent conditions // - After maxAllocationEpochs passed // - When the allocation is for non-zero amount of tokens - bool isIndexerOrOperator = msg.sender == alloc.indexer || - isOperator(alloc.indexer, SUBGRAPH_DATA_SERVICE_ADDRESS); + bool isIndexerOrOperator = msg.sender == alloc.indexer || isOperator(msg.sender, alloc.indexer); if (epochs <= __DEPRECATED_maxAllocationEpochs || alloc.tokens == 0) { require(isIndexerOrOperator, "!auth"); } diff --git a/packages/horizon/test/staking/allocation/close.t.sol b/packages/horizon/test/staking/allocation/close.t.sol index ce3cab273..6257e30ec 100644 --- a/packages/horizon/test/staking/allocation/close.t.sol +++ b/packages/horizon/test/staking/allocation/close.t.sol @@ -12,6 +12,18 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingTest { bytes32 internal constant _poi = keccak256("poi"); + /* + * MODIFIERS + */ + + modifier useLegacyOperator() { + resetPrank(users.indexer); + _setOperator(subgraphDataServiceLegacyAddress, users.operator, true); + vm.startPrank(users.operator); + _; + vm.stopPrank(); + } + /* * TESTS */ @@ -26,6 +38,16 @@ contract HorizonStakingCloseAllocationTest is HorizonStakingTest { _closeAllocation(_allocationId, _poi); } + function testCloseAllocation_Operator(uint256 tokens) public useLegacyOperator() useAllocation(1 ether) { + tokens = bound(tokens, 1, MAX_STAKING_TOKENS); + _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); + + // Skip 15 epochs + vm.roll(15); + + _closeAllocation(_allocationId, _poi); + } + function testCloseAllocation_WithBeneficiaryAddress(uint256 tokens) public useIndexer useAllocation(1 ether) { tokens = bound(tokens, 1, MAX_STAKING_TOKENS); _createProvision(users.indexer, subgraphDataServiceLegacyAddress, tokens, 0, 0); From 26e4dc75a43645a3bfc9936106490ed7f4e5597b Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 4 Dec 2024 18:02:13 -0300 Subject: [PATCH 319/343] fix: getThawedTokens calculation (TRST-L03) --- .../contracts/staking/HorizonStakingBase.sol | 11 ++++++--- .../horizon/test/staking/provision/thaw.t.sol | 24 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 01210d157..3563dba2e 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -206,20 +206,25 @@ abstract contract HorizonStakingBase is return 0; } - uint256 tokens = 0; + uint256 thawedTokens = 0; Provision storage prov = _provisions[serviceProvider][verifier]; + uint256 tokensThawing = prov.tokensThawing; + uint256 sharesThawing = prov.sharesThawing; bytes32 thawRequestId = thawRequestList.head; while (thawRequestId != bytes32(0)) { ThawRequest storage thawRequest = _getThawRequest(requestType, thawRequestId); if (thawRequest.thawingUntil <= block.timestamp) { - tokens += (thawRequest.shares * prov.tokensThawing) / prov.sharesThawing; + uint256 tokens = (thawRequest.shares * tokensThawing) / sharesThawing; + tokensThawing = tokensThawing - tokens; + sharesThawing = sharesThawing - thawRequest.shares; + thawedTokens = thawedTokens + tokens; } else { break; } thawRequestId = thawRequest.next; } - return tokens; + return thawedTokens; } /** diff --git a/packages/horizon/test/staking/provision/thaw.t.sol b/packages/horizon/test/staking/provision/thaw.t.sol index c3b4d6903..c69792f50 100644 --- a/packages/horizon/test/staking/provision/thaw.t.sol +++ b/packages/horizon/test/staking/provision/thaw.t.sol @@ -139,4 +139,28 @@ contract HorizonStakingThawTest is HorizonStakingTest { resetPrank(users.indexer); _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); } + + function testThaw_GetThawedTokens( + uint256 amount, + uint64 thawingPeriod, + uint256 thawSteps + ) public useIndexer useProvision(amount, 0, thawingPeriod) { + thawSteps = bound(thawSteps, 1, 10); + + uint256 thawAmount = amount / thawSteps; + vm.assume(thawAmount > 0); + for (uint256 i = 0; i < thawSteps; i++) { + _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); + } + + skip(thawingPeriod + 1); + + uint256 thawedTokens = staking.getThawedTokens( + ThawRequestType.Provision, + users.indexer, + subgraphDataServiceAddress, + users.indexer + ); + vm.assertEq(thawedTokens, thawAmount * thawSteps); + } } From c9f8a2f348da657d046c91ce0aa3df9e1fbd01f2 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 4 Dec 2024 18:09:17 -0300 Subject: [PATCH 320/343] fix: documentation on unstake (TRST-M11) --- .../contracts/interfaces/internal/IHorizonStakingMain.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 9122153c5..c9d57492a 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -515,6 +515,8 @@ interface IHorizonStakingMain { * - During the transition period it's locked for a period of time before it can be withdrawn * by calling {withdraw}. * - After the transition period it's immediately withdrawn. + * Note that after the transition period if there are tokens still locked they will have to be + * withdrawn by calling {withdraw}. * @dev Requirements: * - `_tokens` cannot be zero. * - `_serviceProvider` must have enough idle stake to cover the staking amount and any From 9271b99aa5c3e34f9f709378f9dfec52f77b1a3f Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Wed, 4 Dec 2024 18:47:31 -0300 Subject: [PATCH 321/343] fix: remove unused value from event (TRST-R01) --- .../contracts/interfaces/internal/IHorizonStakingMain.sol | 3 +-- packages/horizon/contracts/staking/HorizonStaking.sol | 2 +- .../test/shared/horizon-staking/HorizonStakingShared.t.sol | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index c9d57492a..728d36e7c 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -303,9 +303,8 @@ interface IHorizonStakingMain { /** * @notice Emitted when the delegation slashing global flag is set. - * @param enabled Whether delegation slashing is enabled or disabled. */ - event DelegationSlashingEnabled(bool enabled); + event DelegationSlashingEnabled(); // -- Errors: tokens diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 5d7961574..18eb64ee6 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -585,7 +585,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { */ function setDelegationSlashingEnabled() external override onlyGovernor { _delegationSlashingEnabled = true; - emit DelegationSlashingEnabled(_delegationSlashingEnabled); + emit DelegationSlashingEnabled(); } /** diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index c960b19bd..ecaa37492 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -1367,7 +1367,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { function _setDelegationSlashingEnabled() internal { // setDelegationSlashingEnabled vm.expectEmit(); - emit IHorizonStakingMain.DelegationSlashingEnabled(true); + emit IHorizonStakingMain.DelegationSlashingEnabled(); staking.setDelegationSlashingEnabled(); // after From 151e63a54b824d63cf53f5b39f23478d6b56047a Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 5 Dec 2024 13:31:40 -0300 Subject: [PATCH 322/343] fix: round thawing shares up (TRST-R07) --- packages/horizon/contracts/staking/HorizonStaking.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 18eb64ee6..4f7246859 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -783,9 +783,10 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // Calculate shares to issue // Thawing pool is reset/initialized when the pool is empty: prov.tokensThawing == 0 + // Round thawing shares up to ensure fairness and avoid undervaluing the shares due to rounding down. uint256 thawingShares = prov.tokensThawing == 0 ? _tokens - : ((prov.sharesThawing * _tokens) / prov.tokensThawing); + : ((prov.sharesThawing * _tokens + prov.tokensThawing - 1) / prov.tokensThawing); uint64 thawingUntil = uint64(block.timestamp + uint256(prov.thawingPeriod)); prov.sharesThawing = prov.sharesThawing + thawingShares; @@ -907,6 +908,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // delegation pool shares -> delegation pool tokens -> thawing pool shares // Thawing pool is reset/initialized when the pool is empty: prov.tokensThawing == 0 uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; + // Thawing shares are rounded down to protect the pool and avoid taking extra tokens from other participants. uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); uint64 thawingUntil = uint64(block.timestamp + uint256(_provisions[_serviceProvider][_verifier].thawingPeriod)); From 4d62209eafed4bc5aafe2d64413f38b11a7d8e64 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 5 Dec 2024 16:28:22 -0300 Subject: [PATCH 323/343] fix: remove redundant non-zero check (TRST-R09) --- .../contracts/data-service/extensions/DataServiceFees.sol | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol index a2b0ed563..6685dc5a7 100644 --- a/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol +++ b/packages/horizon/contracts/data-service/extensions/DataServiceFees.sol @@ -129,9 +129,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat * @param _claimId The ID of the stake claim */ function _getNextStakeClaim(bytes32 _claimId) private view returns (bytes32) { - StakeClaim memory claim = claims[_claimId]; - require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId)); - return claim.nextClaim; + return claims[_claimId].nextClaim; } /** From 6e5a295f9b86ba71ccf66729e88fa8a626c22a1b Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 5 Dec 2024 16:39:15 -0300 Subject: [PATCH 324/343] fix: check shares are not zero when creating a thaw request (TRST-R14) --- packages/horizon/contracts/staking/HorizonStaking.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 4f7246859..f9ad7fb7b 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -1015,6 +1015,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint64 _thawingUntil, uint256 _thawingNonce ) private returns (bytes32) { + require(_shares != 0, HorizonStakingInvalidZeroShares()); LinkedList.List storage thawRequestList = _getThawRequestList( _requestType, _serviceProvider, From d9c61907cb74aa10d11599e0ced278fc46227a82 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 6 Dec 2024 11:41:16 -0300 Subject: [PATCH 325/343] fix: move legacyWithdrawDelegated to withdrawDelegated (TRST-H07) --- .../internal/IHorizonStakingExtension.sol | 14 ------- .../internal/IHorizonStakingMain.sol | 18 ++++++-- .../contracts/staking/HorizonStaking.sol | 41 ++++++++++++++----- .../staking/HorizonStakingExtension.sol | 37 ----------------- .../HorizonStakingShared.t.sol | 20 +-------- .../staking/delegation/legacyWithdraw.t.sol | 6 +-- .../test/staking/delegation/withdraw.t.sol | 2 +- 7 files changed, 51 insertions(+), 87 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol index 4c6f83075..84318f536 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingExtension.sol @@ -83,11 +83,6 @@ interface IHorizonStakingExtension is IRewardsIssuer { */ event StakeSlashed(address indexed indexer, uint256 tokens, uint256 reward, address beneficiary); - /** - * @dev Emitted when `delegator` withdrew delegated `tokens` from `indexer` using `legacyWithdrawDelegated`. - */ - event StakeDelegatedWithdrawn(address indexed indexer, address indexed delegator, uint256 tokens); - /** * @notice Close an allocation and free the staked tokens. * To be eligible for rewards a proof of indexing must be presented. @@ -169,13 +164,4 @@ interface IHorizonStakingExtension is IRewardsIssuer { * @param beneficiary Address of a beneficiary to receive a reward for the slashing */ function legacySlash(address indexer, uint256 tokens, uint256 reward, address beneficiary) external; - - /** - * @notice Withdraw undelegated tokens once the unbonding period has passed. - * @param _indexer Withdraw available tokens delegated to indexer - */ - function legacyWithdrawDelegated( - address _indexer, - address /* _newIndexer, deprecated */ - ) external returns (uint256); } diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 728d36e7c..489c54554 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -205,6 +205,15 @@ interface IHorizonStakingMain { uint256 tokens ); + /** + * @notice Emitted when `delegator` withdrew delegated `tokens` from `indexer` using `withdrawDelegated`. + * @dev This event is for the legacy `withdrawDelegated` function. + * @param indexer The address of the indexer + * @param delegator The address of the delegator + * @param tokens The amount of tokens withdrawn + */ + event StakeDelegatedWithdrawn(address indexed indexer, address indexed delegator, uint256 tokens); + /** * @notice Emitted when tokens are added to a delegation pool's reserve. * @param serviceProvider The address of the service provider @@ -861,13 +870,14 @@ interface IHorizonStakingMain { /** * @notice Withdraw undelegated tokens from the subgraph data service provision after thawing. * This function is for backwards compatibility with the legacy staking contract. - * It only allows withdrawing from the subgraph data service and DOES NOT have slippage protection in - * case the caller opts for re-delegating. + * It only allows withdrawing tokens undelegated before horizon upgrade. * @dev See {delegate}. * @param serviceProvider The service provider address - * @param newServiceProvider The address of a new service provider, if the delegator wants to re-delegate */ - function withdrawDelegated(address serviceProvider, address newServiceProvider) external; + function withdrawDelegated( + address serviceProvider, + address // newServiceProvider, deprecated + ) external returns (uint256); /** * @notice Slash a service provider. This can only be called by a verifier to which diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index f9ad7fb7b..5cd605acf 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -412,16 +412,37 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /** * @notice See {IHorizonStakingMain-withdrawDelegated}. */ - function withdrawDelegated(address serviceProvider, address newServiceProvider) external override notPaused { - _withdrawDelegated( - ThawRequestType.Delegation, - serviceProvider, - SUBGRAPH_DATA_SERVICE_ADDRESS, - newServiceProvider, - SUBGRAPH_DATA_SERVICE_ADDRESS, - 0, - 0 - ); + function withdrawDelegated( + address serviceProvider, + address // newServiceProvider, deprecated + ) external override notPaused returns (uint256) { + // Get the delegation pool of the indexer + address delegator = msg.sender; + DelegationPoolInternal storage pool = _legacyDelegationPools[serviceProvider]; + DelegationInternal storage delegation = pool.delegators[delegator]; + + // Validation + uint256 tokensToWithdraw = 0; + uint256 currentEpoch = _graphEpochManager().currentEpoch(); + if ( + delegation.__DEPRECATED_tokensLockedUntil > 0 && currentEpoch >= delegation.__DEPRECATED_tokensLockedUntil + ) { + tokensToWithdraw = delegation.__DEPRECATED_tokensLocked; + } + require(tokensToWithdraw > 0, "!tokens"); + + // Reset lock + delegation.__DEPRECATED_tokensLocked = 0; + delegation.__DEPRECATED_tokensLockedUntil = 0; + + emit StakeDelegatedWithdrawn(serviceProvider, delegator, tokensToWithdraw); + + // -- Interactions -- + + // Return tokens to the delegator + _graphToken().pushTokens(delegator, tokensToWithdraw); + + return tokensToWithdraw; } /* diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index 33d59b61b..ee8a29a22 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -312,43 +312,6 @@ contract HorizonStakingExtension is HorizonStakingBase, IHorizonStakingExtension emit StakeSlashed(indexer, tokens, reward, beneficiary); } - /** - * @notice Withdraw undelegated tokens once the unbonding period has passed. - * @param indexer Withdraw available tokens delegated to indexer - */ - function legacyWithdrawDelegated( - address indexer, - address // newIndexer, deprecated - ) external override notPaused returns (uint256) { - // Get the delegation pool of the indexer - address delegator = msg.sender; - DelegationPoolInternal storage pool = _legacyDelegationPools[indexer]; - DelegationInternal storage delegation = pool.delegators[delegator]; - - // Validation - uint256 tokensToWithdraw = 0; - uint256 currentEpoch = _graphEpochManager().currentEpoch(); - if ( - delegation.__DEPRECATED_tokensLockedUntil > 0 && currentEpoch >= delegation.__DEPRECATED_tokensLockedUntil - ) { - tokensToWithdraw = delegation.__DEPRECATED_tokensLocked; - } - require(tokensToWithdraw > 0, "!tokens"); - - // Reset lock - delegation.__DEPRECATED_tokensLocked = 0; - delegation.__DEPRECATED_tokensLockedUntil = 0; - - emit StakeDelegatedWithdrawn(indexer, delegator, tokensToWithdraw); - - // -- Interactions -- - - // Return tokens to the delegator - _graphToken().pushTokens(delegator, tokensToWithdraw); - - return tokensToWithdraw; - } - /** * @notice (Legacy) Return true if operator is allowed for the service provider on the subgraph data service. * @dev TODO: Delete after the transition period diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index ecaa37492..4e024f899 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -1046,7 +1046,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { newVerifier: address(0), minSharesForNewProvider: 0, nThawRequests: nThawRequests, - legacy: false + legacy: verifier == subgraphDataServiceLegacyAddress }); __withdrawDelegated(params); } @@ -1090,20 +1090,6 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { __withdrawDelegated(params); } - function _withdrawDelegated(address serviceProvider, address newServiceProvider) internal { - Params_WithdrawDelegated memory params = Params_WithdrawDelegated({ - thawRequestType: IHorizonStakingTypes.ThawRequestType.Delegation, - serviceProvider: serviceProvider, - verifier: subgraphDataServiceLegacyAddress, - newServiceProvider: newServiceProvider, - newVerifier: subgraphDataServiceLegacyAddress, - minSharesForNewProvider: 0, - nThawRequests: 0, - legacy: true - }); - __withdrawDelegated(params); - } - struct BeforeValues_WithdrawDelegated { DelegationPoolInternalTest pool; DelegationPoolInternalTest newPool; @@ -1197,9 +1183,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { msgSender, calcValues.tokensThawed ); - if (params.legacy) { - staking.withdrawDelegated(params.serviceProvider, params.newServiceProvider); - } else if (reDelegate) { + if (reDelegate) { staking.redelegate( params.serviceProvider, params.verifier, diff --git a/packages/horizon/test/staking/delegation/legacyWithdraw.t.sol b/packages/horizon/test/staking/delegation/legacyWithdraw.t.sol index c70fb73a3..c90fa1200 100644 --- a/packages/horizon/test/staking/delegation/legacyWithdraw.t.sol +++ b/packages/horizon/test/staking/delegation/legacyWithdraw.t.sol @@ -54,8 +54,8 @@ contract HorizonStakingLegacyWithdrawDelegationTest is HorizonStakingTest { uint256 beforeDelegatorBalance = token.balanceOf(users.delegator); vm.expectEmit(address(staking)); - emit IHorizonStakingExtension.StakeDelegatedWithdrawn(_indexer, delegator, pool.tokens); - staking.legacyWithdrawDelegated(users.indexer, address(0)); + emit IHorizonStakingMain.StakeDelegatedWithdrawn(_indexer, delegator, pool.tokens); + staking.withdrawDelegated(users.indexer, address(0)); uint256 afterStakingBalance = token.balanceOf(address(staking)); uint256 afterDelegatorBalance = token.balanceOf(users.delegator); @@ -93,6 +93,6 @@ contract HorizonStakingLegacyWithdrawDelegationTest is HorizonStakingTest { _setLegacyDelegation(users.indexer, users.delegator, 0, 0, 0); vm.expectRevert("!tokens"); - staking.legacyWithdrawDelegated(users.indexer, address(0)); + staking.withdrawDelegated(users.indexer, address(0)); } } diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index c8ab59122..0d791ff4c 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -87,7 +87,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { skip(thawRequest.thawingUntil + 1); - _withdrawDelegated(users.indexer, address(0)); + _withdrawDelegated(users.indexer, subgraphDataServiceLegacyAddress, 0); } function testWithdrawDelegation_RevertWhen_InvalidPool( From 161f8a2382c0add3b28994f620e536f6451b82e1 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 6 Dec 2024 15:19:04 -0300 Subject: [PATCH 326/343] fix: added comment for stack too deep solution --- .../contracts/interfaces/internal/IHorizonStakingTypes.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index 9da150d0f..0d615a7b6 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -160,6 +160,7 @@ interface IHorizonStakingTypes { /** * @notice Parameters to fulfill thaw requests. + * @dev This struct is used to avoid stack too deep error in the `fulfillThawRequests` function. * @param requestType The type of thaw request (Provision or Delegation) * @param serviceProvider The address of the service provider * @param verifier The address of the verifier From 43bc72be75980baefd63dafe3c415b9a02aa730a Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 6 Dec 2024 15:24:02 -0300 Subject: [PATCH 327/343] fix: added comment to explain minimum delegation (TRST-M03) --- packages/horizon/contracts/staking/HorizonStaking.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 5cd605acf..ac2af54c2 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -867,6 +867,8 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * have been done before calling this function. */ function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) private { + // Enforces a minimum delegation amount to prevent share manipulation attacks. + // This stops attackers from inflating share value and blocking other delegators. require(_tokens >= MIN_DELEGATION, HorizonStakingInsufficientTokens(_tokens, MIN_DELEGATION)); require( _provisions[_serviceProvider][_verifier].createdAt != 0, From c59c1866299c88c1fbe7836508712a2f79ba3890 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 6 Dec 2024 15:30:35 -0300 Subject: [PATCH 328/343] fix: new event for minimum delegation not met (TRST-M03) --- .../contracts/interfaces/internal/IHorizonStakingMain.sol | 7 +++++++ packages/horizon/contracts/staking/HorizonStaking.sol | 2 +- packages/horizon/test/staking/delegation/delegate.t.sol | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 489c54554..dcbe3fce5 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -423,6 +423,13 @@ interface IHorizonStakingMain { */ error HorizonStakingInvalidDelegationPool(address serviceProvider, address verifier); + /** + * @notice Thrown when the minimum token amount required for delegation is not met. + * @param tokens The actual token amount + * @param minTokens The minimum required token amount + */ + error HorizonStakingInsufficientDelegationTokens(uint256 tokens, uint256 minTokens); + /** * @notice Thrown when attempting to undelegate with a beneficiary that is the zero address. */ diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index ac2af54c2..db29cf12a 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -869,7 +869,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { function _delegate(address _serviceProvider, address _verifier, uint256 _tokens, uint256 _minSharesOut) private { // Enforces a minimum delegation amount to prevent share manipulation attacks. // This stops attackers from inflating share value and blocking other delegators. - require(_tokens >= MIN_DELEGATION, HorizonStakingInsufficientTokens(_tokens, MIN_DELEGATION)); + require(_tokens >= MIN_DELEGATION, HorizonStakingInsufficientDelegationTokens(_tokens, MIN_DELEGATION)); require( _provisions[_serviceProvider][_verifier].createdAt != 0, HorizonStakingInvalidProvision(_serviceProvider, _verifier) diff --git a/packages/horizon/test/staking/delegation/delegate.t.sol b/packages/horizon/test/staking/delegation/delegate.t.sol index 5fc6681df..043453e10 100644 --- a/packages/horizon/test/staking/delegation/delegate.t.sol +++ b/packages/horizon/test/staking/delegation/delegate.t.sol @@ -67,7 +67,7 @@ contract HorizonStakingDelegateTest is HorizonStakingTest { vm.startPrank(users.delegator); token.approve(address(staking), delegationAmount); bytes memory expectedError = abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInsufficientTokens.selector, + IHorizonStakingMain.HorizonStakingInsufficientDelegationTokens.selector, delegationAmount, MIN_DELEGATION ); From d1c5cc7556641eb83976f35b863eefe42bae2830 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 6 Dec 2024 16:44:11 -0300 Subject: [PATCH 329/343] fix: add a new mapping instead of splitting thaw requests (TRST-H02) --- .../contracts/staking/HorizonStaking.sol | 6 ++-- .../contracts/staking/HorizonStakingBase.sol | 26 ++++------------ .../staking/HorizonStakingStorage.sol | 30 ++++--------------- .../HorizonStakingShared.t.sol | 6 ++-- 4 files changed, 17 insertions(+), 51 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index db29cf12a..257202d3e 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -1181,7 +1181,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param _thawRequestId The ID of the thaw request to delete. */ function _deleteProvisionThawRequest(bytes32 _thawRequestId) private { - delete _provisionThawRequests[_thawRequestId]; + delete _thawRequests[ThawRequestType.Provision][_thawRequestId]; } /** @@ -1189,7 +1189,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param _thawRequestId The ID of the thaw request to delete. */ function _deleteDelegationThawRequest(bytes32 _thawRequestId) private { - delete _delegationThawRequests[_thawRequestId]; + delete _thawRequests[ThawRequestType.Delegation][_thawRequestId]; } /** @@ -1197,7 +1197,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { * @param _thawRequestId The ID of the thaw request to delete. */ function _deleteDelegationWithBeneficiaryThawRequest(bytes32 _thawRequestId) private { - delete _delegationWithBeneficiaryThawRequests[_thawRequestId]; + delete _thawRequests[ThawRequestType.DelegationWithBeneficiary][_thawRequestId]; } /** diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 3563dba2e..6745fb2e1 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -323,7 +323,7 @@ abstract contract HorizonStakingBase is * @return The ID of the next thaw request in the list. */ function _getNextProvisionThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { - return _provisionThawRequests[_thawRequestId].next; + return _thawRequests[ThawRequestType.Provision][_thawRequestId].next; } /** @@ -332,7 +332,7 @@ abstract contract HorizonStakingBase is * @return The ID of the next thaw request in the list. */ function _getNextDelegationThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { - return _delegationThawRequests[_thawRequestId].next; + return _thawRequests[ThawRequestType.Delegation][_thawRequestId].next; } /** @@ -341,7 +341,7 @@ abstract contract HorizonStakingBase is * @return The ID of the next thaw request in the list. */ function _getNextDelegationWithBeneficiaryThawRequest(bytes32 _thawRequestId) internal view returns (bytes32) { - return _delegationWithBeneficiaryThawRequests[_thawRequestId].next; + return _thawRequests[ThawRequestType.DelegationWithBeneficiary][_thawRequestId].next; } /** @@ -360,15 +360,7 @@ abstract contract HorizonStakingBase is address _verifier, address _owner ) internal view returns (LinkedList.List storage) { - if (_requestType == ThawRequestType.Provision) { - return _provisionThawRequestLists[_serviceProvider][_verifier][_owner]; - } else if (_requestType == ThawRequestType.Delegation) { - return _delegationThawRequestLists[_serviceProvider][_verifier][_owner]; - } else if (_requestType == ThawRequestType.DelegationWithBeneficiary) { - return _delegationWithBeneficiaryThawRequestLists[_serviceProvider][_verifier][_owner]; - } else { - revert HorizonStakingInvalidThawRequestType(); - } + return _thawRequestLists[_requestType][_serviceProvider][_verifier][_owner]; } /** @@ -383,15 +375,7 @@ abstract contract HorizonStakingBase is ThawRequestType _requestType, bytes32 _thawRequestId ) internal view returns (IHorizonStakingTypes.ThawRequest storage) { - if (_requestType == ThawRequestType.Provision) { - return _provisionThawRequests[_thawRequestId]; - } else if (_requestType == ThawRequestType.Delegation) { - return _delegationThawRequests[_thawRequestId]; - } else if (_requestType == ThawRequestType.DelegationWithBeneficiary) { - return _delegationWithBeneficiaryThawRequests[_thawRequestId]; - } else { - revert("Unknown ThawRequestType"); - } + return _thawRequests[_requestType][_thawRequestId]; } /** diff --git a/packages/horizon/contracts/staking/HorizonStakingStorage.sol b/packages/horizon/contracts/staking/HorizonStakingStorage.sol index ca6a1450f..a470ac363 100644 --- a/packages/horizon/contracts/staking/HorizonStakingStorage.sol +++ b/packages/horizon/contracts/staking/HorizonStakingStorage.sol @@ -148,32 +148,14 @@ abstract contract HorizonStakingV1Storage { internal _delegationFeeCut; /// @dev Thaw requests - /// Details for each thawing operation in the staking contract for both service providers. - mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _provisionThawRequests; + /// Details for each thawing operation in the staking contract (for both service providers and delegators). + mapping(IHorizonStakingTypes.ThawRequestType thawRequestType => mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest)) + internal _thawRequests; /// @dev Thaw request lists - /// Metadata defining linked lists of thaw requests for each service provider (owner). - mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) - internal _provisionThawRequestLists; - - /// @dev Thaw requests - /// Details for each thawing operation in the staking contract for delegators. - mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) internal _delegationThawRequests; - - /// @dev Thaw request lists - /// Metadata defining linked lists of thaw requests for each delegator (owner). - mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) - internal _delegationThawRequestLists; - - /// @dev Thaw requests - /// Details for each thawing operation in the staking contract for both delegators undelegating to a beneficiary. - mapping(bytes32 thawRequestId => IHorizonStakingTypes.ThawRequest thawRequest) - internal _delegationWithBeneficiaryThawRequests; - - /// @dev Thaw request lists - /// Metadata defining linked lists of thaw requests for each delegator (owner) undelegating to a beneficiary. - mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list))) - internal _delegationWithBeneficiaryThawRequestLists; + /// Metadata defining linked lists of thaw requests for each service provider or delegator (owner) + mapping(IHorizonStakingTypes.ThawRequestType thawRequestType => mapping(address serviceProvider => mapping(address verifier => mapping(address owner => LinkedList.List list)))) + internal _thawRequestLists; /// @dev Operator allow list /// Used for all verifiers except the subgraph data service. diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index 4e024f899..b47ac7d7e 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -1852,7 +1852,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address operator, bool legacy ) internal view returns (bool) { - uint256 slotNumber = legacy ? 21 : 35; + uint256 slotNumber = legacy ? 21 : 31; uint256 slot; if (legacy) { @@ -1934,7 +1934,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address verifier, bool legacy ) internal view returns (DelegationPoolInternalTest memory) { - uint256 slotNumber = legacy ? 20 : 37; + uint256 slotNumber = legacy ? 20 : 33; uint256 baseSlot; if (legacy) { baseSlot = uint256(keccak256(abi.encode(serviceProvider, slotNumber))); @@ -1966,7 +1966,7 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { address delegator, bool legacy ) internal view returns (DelegationInternal memory) { - uint256 slotNumber = legacy ? 20 : 37; + uint256 slotNumber = legacy ? 20 : 33; uint256 baseSlot; // DelegationPool From 0a31b5806a0f202e27dea39590d5fe67d7b5676e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 9 Dec 2024 11:27:51 -0300 Subject: [PATCH 330/343] fix: ensure subgraph service is set before using it (TRST-R10) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/DisputeManager.sol | 38 ++++++++++++++----- .../contracts/interfaces/IDisputeManager.sol | 1 + .../test/disputeManager/DisputeManager.t.sol | 11 ++++++ .../disputes/indexing/accept.t.sol | 17 +++++++++ .../disputes/indexing/create.t.sol | 35 +++++++++++------ .../disputes/query/accept.t.sol | 18 +++++++++ .../disputes/query/create.t.sol | 17 ++++++++- .../governance/subgraphService.t.sol | 24 ++++++++++++ 8 files changed, 140 insertions(+), 21 deletions(-) create mode 100644 packages/subgraph-service/test/disputeManager/governance/subgraphService.t.sol diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index a9d45ead7..930e1e5ef 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -402,7 +402,10 @@ contract DisputeManager is * @param indexer The indexer address */ function getStakeSnapshot(address indexer) external view override returns (uint256) { - IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService)); + IHorizonStaking.Provision memory provision = _graphStaking().getProvision( + indexer, + address(_getSubgraphService()) + ); return _getStakeSnapshot(indexer, provision.tokens); } @@ -427,7 +430,7 @@ contract DisputeManager is // Get attestation signer. Indexers signs with the allocationId address allocationId = _recoverSigner(attestation); - Allocation.State memory alloc = subgraphService.getAllocation(allocationId); + Allocation.State memory alloc = _getSubgraphService().getAllocation(allocationId); require(alloc.indexer != address(0), DisputeManagerIndexerNotFound(allocationId)); require( alloc.subgraphDeploymentId == attestation.subgraphDeploymentId, @@ -466,7 +469,10 @@ contract DisputeManager is address indexer = getAttestationIndexer(_attestation); // The indexer is disputable - IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService)); + IHorizonStaking.Provision memory provision = _graphStaking().getProvision( + indexer, + address(_getSubgraphService()) + ); require(provision.tokens != 0, DisputeManagerZeroTokens()); // Create a disputeId @@ -529,12 +535,13 @@ contract DisputeManager is require(!isDisputeCreated(disputeId), DisputeManagerDisputeAlreadyCreated(disputeId)); // Allocation must exist - Allocation.State memory alloc = subgraphService.getAllocation(_allocationId); + ISubgraphService subgraphService_ = _getSubgraphService(); + Allocation.State memory alloc = subgraphService_.getAllocation(_allocationId); address indexer = alloc.indexer; require(indexer != address(0), DisputeManagerIndexerNotFound(_allocationId)); // The indexer must be disputable - IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService)); + IHorizonStaking.Provision memory provision = _graphStaking().getProvision(indexer, address(subgraphService_)); require(provision.tokens != 0, DisputeManagerZeroTokens()); // Store dispute @@ -596,8 +603,10 @@ contract DisputeManager is uint256 _tokensSlash, uint256 _tokensStakeSnapshot ) private returns (uint256) { + ISubgraphService subgraphService_ = _getSubgraphService(); + // Get slashable amount for indexer - IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_indexer, address(subgraphService)); + IHorizonStaking.Provision memory provision = _graphStaking().getProvision(_indexer, address(subgraphService_)); // Ensure slash amount is within the cap uint256 maxTokensSlash = _tokensStakeSnapshot.mulPPM(maxSlashingCut); @@ -611,7 +620,7 @@ contract DisputeManager is uint256 maxRewardableTokens = Math.min(_tokensSlash, provision.tokens); uint256 tokensRewards = uint256(fishermanRewardCut).mulPPM(maxRewardableTokens); - subgraphService.slash(_indexer, abi.encode(_tokensSlash, tokensRewards)); + subgraphService_.slash(_indexer, abi.encode(_tokensSlash, tokensRewards)); return tokensRewards; } @@ -684,6 +693,16 @@ contract DisputeManager is emit SubgraphServiceSet(_subgraphService); } + /** + * @notice Get the address of the subgraph service + * @dev Will revert if the subgraph service is not set + * @return The subgraph service address + */ + function _getSubgraphService() private view returns (ISubgraphService) { + require(address(subgraphService) != address(0), DisputeManagerSubgraphServiceNotSet()); + return subgraphService; + } + /** * @notice Returns whether the dispute is for a conflicting attestation or not. * @param _dispute Dispute @@ -705,8 +724,9 @@ contract DisputeManager is * @return Total stake snapshot */ function _getStakeSnapshot(address _indexer, uint256 _indexerStake) private view returns (uint256) { - uint256 delegatorsStake = _graphStaking().getDelegationPool(_indexer, address(subgraphService)).tokens; - uint256 delegatorsStakeMax = _indexerStake * uint256(subgraphService.getDelegationRatio()); + ISubgraphService subgraphService_ = _getSubgraphService(); + uint256 delegatorsStake = _graphStaking().getDelegationPool(_indexer, address(subgraphService_)).tokens; + uint256 delegatorsStakeMax = _indexerStake * uint256(subgraphService_.getDelegationRatio()); uint256 stakeSnapshot = _indexerStake + MathUtils.min(delegatorsStake, delegatorsStakeMax); return stakeSnapshot; } diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index 10865a77d..e8c1cd346 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -181,6 +181,7 @@ interface IDisputeManager { bytes32 responseCID2, bytes32 subgraphDeploymentId2 ); + error DisputeManagerSubgraphServiceNotSet(); function setDisputePeriod(uint64 disputePeriod) external; diff --git a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol index ce6546030..ac7b55978 100644 --- a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol +++ b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol @@ -62,6 +62,13 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { assertEq(disputeManager.disputeDeposit(), _disputeDeposit, "Dispute deposit should be set."); } + function _setSubgraphService(address _subgraphService) internal { + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.SubgraphServiceSet(_subgraphService); + disputeManager.setSubgraphService(_subgraphService); + assertEq(address(disputeManager.subgraphService()), _subgraphService, "Subgraph service should be set."); + } + function _createIndexingDispute(address _allocationId, bytes32 _poi) internal returns (bytes32) { (, address fisherman, ) = vm.readCallers(); bytes32 expectedDisputeId = keccak256(abi.encodePacked(_allocationId, _poi)); @@ -621,4 +628,8 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { stakeSnapshot: stakeSnapshot }); } + + function _setStorage_SubgraphService(address _subgraphService) internal { + vm.store(address(disputeManager), bytes32(uint256(51)), bytes32(uint256(uint160(_subgraphService)))); + } } diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol index 28717a00f..95ed7eb28 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol @@ -27,6 +27,23 @@ contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { _acceptDispute(disputeID, tokensSlash, false); } + function test_Indexing_Accept_Dispute_RevertWhen_SubgraphServiceNotSet( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + resetPrank(users.fisherman); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); + + resetPrank(users.arbitrator); + // clear subgraph service address from storage + _setStorage_SubgraphService(address(0)); + + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerSubgraphServiceNotSet.selector)); + disputeManager.acceptDispute(disputeID, tokensSlash, false); + } + function test_Indexing_Accept_Dispute_OptParam( uint256 tokens, uint256 tokensSlash diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol index 8d1b75c21..3b1df5011 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/create.t.sol @@ -7,16 +7,28 @@ import { IDisputeManager } from "../../../../contracts/interfaces/IDisputeManage import { DisputeManagerTest } from "../../DisputeManager.t.sol"; contract DisputeManagerIndexingCreateDisputeTest is DisputeManagerTest { - /* * TESTS */ - function test_Indexing_Create_Dispute( + function test_Indexing_Create_Dispute(uint256 tokens) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + _createIndexingDispute(allocationID, bytes32("POI1")); + } + + function test_Indexing_Create_Dispute_RevertWhen_SubgraphServiceNotSet( uint256 tokens ) public useIndexer useAllocation(tokens) { resetPrank(users.fisherman); - _createIndexingDispute(allocationID, bytes32("POI1")); + + // clear subgraph service address from storage + _setStorage_SubgraphService(address(0)); + + // // Approve the dispute deposit + token.approve(address(disputeManager), disputeDeposit); + + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerSubgraphServiceNotSet.selector)); + disputeManager.createIndexingDispute(allocationID, bytes32("POI2")); } function test_Indexing_Create_MultipleDisputes() public { @@ -33,7 +45,12 @@ contract DisputeManagerIndexingCreateDisputeTest is DisputeManagerTest { _createProvision(indexer, tokens, maxSlashingPercentage, disputePeriod); _register(indexer, abi.encode("url", "geoHash", address(0))); uint256 allocationIDPrivateKey = uint256(keccak256(abi.encodePacked(i))); - bytes memory data = _createSubgraphAllocationData(indexer, subgraphDeployment, allocationIDPrivateKey, tokens); + bytes memory data = _createSubgraphAllocationData( + indexer, + subgraphDeployment, + allocationIDPrivateKey, + tokens + ); _startService(indexer, data); allocationIDPrivateKeys[i] = allocationIDPrivateKey; } @@ -48,7 +65,7 @@ contract DisputeManagerIndexingCreateDisputeTest is DisputeManagerTest { uint256 tokens ) public useIndexer useAllocation(tokens) { resetPrank(users.fisherman); - bytes32 disputeID =_createIndexingDispute(allocationID, bytes32("POI1")); + bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); // Create another dispute with different fisherman address otherFisherman = makeAddr("otherFisherman"); @@ -78,9 +95,7 @@ contract DisputeManagerIndexingCreateDisputeTest is DisputeManagerTest { vm.stopPrank(); } - function test_Indexing_Create_RevertIf_AllocationDoesNotExist( - uint256 tokens - ) public useFisherman { + function test_Indexing_Create_RevertIf_AllocationDoesNotExist(uint256 tokens) public useFisherman { tokens = bound(tokens, disputeDeposit, 10_000_000_000 ether); token.approve(address(disputeManager), tokens); bytes memory expectedError = abi.encodeWithSelector( @@ -92,9 +107,7 @@ contract DisputeManagerIndexingCreateDisputeTest is DisputeManagerTest { vm.stopPrank(); } - function test_Indexing_Create_RevertIf_IndexerIsBelowStake( - uint256 tokens - ) public useIndexer useAllocation(tokens) { + function test_Indexing_Create_RevertIf_IndexerIsBelowStake(uint256 tokens) public useIndexer useAllocation(tokens) { // Close allocation bytes memory data = abi.encode(allocationID); _stopService(users.indexer, data); diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol index 8c63a3004..70a427c28 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol @@ -34,6 +34,24 @@ contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { _acceptDispute(disputeID, tokensSlash, false); } + function test_Query_Accept_Dispute_RevertWhen_SubgraphServiceNotSet( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + resetPrank(users.arbitrator); + // clear subgraph service address from storage + _setStorage_SubgraphService(address(0)); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerSubgraphServiceNotSet.selector)); + disputeManager.acceptDispute(disputeID, tokensSlash, false); + } + function test_Query_Accept_Dispute_OptParam( uint256 tokens, uint256 tokensSlash diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol index 4eba11744..3dd4f7bbf 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/query/create.t.sol @@ -17,13 +17,28 @@ contract DisputeManagerQueryCreateDisputeTest is DisputeManagerTest { * TESTS */ - function test_Query_Create_Dispute(uint256 tokens) public useIndexer useAllocation(tokens) { + function test_Query_Create_Dispute_Only(uint256 tokens) public useIndexer useAllocation(tokens) { resetPrank(users.fisherman); Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); _createQueryDispute(attestationData); } + function test_Query_Create_Dispute_RevertWhen_SubgraphServiceNotSet(uint256 tokens) public useIndexer useAllocation(tokens) { + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + + // clear subgraph service address from storage + _setStorage_SubgraphService(address(0)); + + // // Approve the dispute deposit + token.approve(address(disputeManager), disputeDeposit); + + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerSubgraphServiceNotSet.selector)); + disputeManager.createQueryDispute(attestationData); + } + function test_Query_Create_MultipleDisputes_DifferentFisherman( uint256 tokens ) public useIndexer useAllocation(tokens) { diff --git a/packages/subgraph-service/test/disputeManager/governance/subgraphService.t.sol b/packages/subgraph-service/test/disputeManager/governance/subgraphService.t.sol new file mode 100644 index 000000000..8f39d48c3 --- /dev/null +++ b/packages/subgraph-service/test/disputeManager/governance/subgraphService.t.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.27; + +import "forge-std/Test.sol"; + +import { IDisputeManager } from "../../../contracts/interfaces/IDisputeManager.sol"; +import { DisputeManagerTest } from "../DisputeManager.t.sol"; + +contract DisputeManagerGovernanceSubgraphService is DisputeManagerTest { + + /* + * TESTS + */ + + function test_Governance_SetSubgraphService(address subgraphService) public useGovernor { + vm.assume(subgraphService != address(0)); + _setSubgraphService(subgraphService); + } + + function test_Governance_SetSubgraphService_RevertWhenZero() public useGovernor { + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerInvalidZeroAddress.selector)); + disputeManager.setSubgraphService(address(0)); + } +} From 85de5bdf4879b323ab9e05b2fb512f6674d7185b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 9 Dec 2024 15:27:39 -0300 Subject: [PATCH 331/343] fix: documentation error (TRST-R09) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/subgraph-service/contracts/DisputeManager.sol | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 930e1e5ef..98677c7f0 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -31,11 +31,9 @@ import { AttestationManager } from "./utilities/AttestationManager.sol"; * Indexers use the derived private key for an allocation to sign attestations. * * Indexing Disputes: - * Indexers present a Proof of Indexing (POI) when they close allocations to prove - * they were indexing a subgraph. The Staking contract emits that proof with the format - * keccak256(indexer.address, POI). - * Any fisherman can dispute the validity of a POI by submitting a dispute to this contract - * along with a deposit. + * Indexers periodically present a Proof of Indexing (POI) to prove they are indexing a subgraph. + * The Subgraph Service contract emits that proof which includes the POI. Any fisherman can dispute the + * validity of a POI by submitting a dispute to this contract along with a deposit. * * Arbitration: * Disputes can only be accepted, rejected or drawn by the arbitrator role that can be delegated From 6ec971069ea91451bfb3827fb18b315e02c5e702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 9 Dec 2024 15:31:36 -0300 Subject: [PATCH 332/343] docs: add missing return value documentation (TRST-R) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/subgraph-service/contracts/SubgraphService.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index 89986b87f..fdeb83537 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -422,6 +422,7 @@ contract SubgraphService is * @return subgraphDeploymentId Subgraph deployment id for the allocation * @return tokens Amount of allocated tokens * @return accRewardsPerAllocatedToken Rewards snapshot + * @return accRewardsPending Rewards pending to be minted due to allocation resize */ function getAllocationData( address allocationId From 6e00d1764ded92317f9830d5ec7cc0403ba035d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Mon, 9 Dec 2024 15:35:25 -0300 Subject: [PATCH 333/343] docs: fix documentation errors (TRST-R09) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/horizon/contracts/staking/HorizonStaking.sol | 2 +- .../horizon/contracts/staking/HorizonStakingExtension.sol | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index 257202d3e..e42930546 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -735,7 +735,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { } /** - * @notice See {IHorizonStakingMain-createProvision}. + * @notice See {IHorizonStakingMain-provision}. */ function _createProvision( address _serviceProvider, diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index ee8a29a22..ac9dc6bc8 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -19,8 +19,8 @@ import { HorizonStakingBase } from "./HorizonStakingBase.sol"; * to the Horizon Staking contract. It allows indexers to close allocations and collect pending query fees, but it * does not allow for the creation of new allocations. This should allow indexers to migrate to a subgraph data service * without losing rewards or having service interruptions. - * @dev TODO: Once the transition period passes this contract can be removed. It's expected the transition period to - * last for a full allocation cycle (28 epochs). + * @dev TODO: Once the transition period passes this contract can be removed (note that an upgrade to the RewardsManager + * will also be required). It's expected the transition period to last for a full allocation cycle (28 epochs). * @custom:security-contact Please email security+contracts@thegraph.com if you find any * bugs. We may have an active bug bounty program. */ From a06580420f485169c42b17df6b2109a340f3a23f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Tue, 10 Dec 2024 11:05:53 -0300 Subject: [PATCH 334/343] fix: refactor payments cut distribution (TRST-L12) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- .../contracts/interfaces/IGraphPayments.sol | 35 +++-- .../interfaces/IPaymentsCollector.sol | 6 +- .../contracts/interfaces/IPaymentsEscrow.sol | 4 +- .../contracts/payments/GraphPayments.sol | 49 +++--- .../contracts/payments/PaymentsEscrow.sol | 4 +- .../payments/collectors/TAPCollector.sol | 13 +- .../horizon/test/escrow/GraphEscrow.t.sol | 53 ++++--- packages/horizon/test/escrow/collect.t.sol | 10 +- .../horizon/test/payments/GraphPayments.t.sol | 144 ++++++++++-------- .../payments/tap-collector/TAPCollector.t.sol | 54 +++++-- .../contracts/SubgraphService.sol | 7 +- .../contracts/interfaces/ISubgraphService.sol | 6 +- .../subgraphService/SubgraphService.t.sol | 7 +- 13 files changed, 227 insertions(+), 165 deletions(-) diff --git a/packages/horizon/contracts/interfaces/IGraphPayments.sol b/packages/horizon/contracts/interfaces/IGraphPayments.sol index f446d6f52..eaac08ae4 100644 --- a/packages/horizon/contracts/interfaces/IGraphPayments.sol +++ b/packages/horizon/contracts/interfaces/IGraphPayments.sol @@ -23,27 +23,30 @@ interface IGraphPayments { * @param payer The address of the payer * @param receiver The address of the receiver * @param dataService The address of the data service - * @param tokensReceiver Amount of tokens for the receiver - * @param tokensDelegationPool Amount of tokens for delegators - * @param tokensDataService Amount of tokens for the data service + * @param tokens The total amount of tokens being collected * @param tokensProtocol Amount of tokens charged as protocol tax + * @param tokensDataService Amount of tokens for the data service + * @param tokensDelegationPool Amount of tokens for delegators + * @param tokensReceiver Amount of tokens for the receiver */ - event PaymentCollected( + event GraphPaymentCollected( address indexed payer, address indexed receiver, address indexed dataService, - uint256 tokensReceiver, - uint256 tokensDelegationPool, + uint256 tokens, + uint256 tokensProtocol, uint256 tokensDataService, - uint256 tokensProtocol + uint256 tokensDelegationPool, + uint256 tokensReceiver ); /** - * @notice Thrown when there are insufficient tokens to pay the required amount - * @param tokens The amount of tokens available - * @param minTokens The amount of tokens being collected + * @notice Thrown when the calculated amount of tokens to be paid out to all parties is + * not the same as the amount of tokens being collected + * @param tokens The amount of tokens being collected + * @param tokensCalculated The sum of all the tokens to be paid out */ - error GraphPaymentsInsufficientTokens(uint256 tokens, uint256 minTokens); + error GraphPaymentsBadAccounting(uint256 tokens, uint256 tokensCalculated); /** * @notice Thrown when the protocol payment cut is invalid @@ -51,6 +54,12 @@ interface IGraphPayments { */ error GraphPaymentsInvalidProtocolPaymentCut(uint256 protocolPaymentCut); + /** + * @notice Thrown when trying to use a cut that is not expressed in PPM + * @param cut The cut + */ + error GraphPaymentsInvalidCut(uint256 cut); + /** * @notice Collects funds from a payer. * It will pay cuts to all relevant parties and forward the rest to the receiver. @@ -58,13 +67,13 @@ interface IGraphPayments { * @param receiver The address of the receiver * @param tokens The amount of tokens being collected * @param dataService The address of the data service - * @param tokensDataService The amount of tokens that should be sent to the data service + * @param dataServiceCut The data service cut in PPM */ function collect( PaymentTypes paymentType, address receiver, uint256 tokens, address dataService, - uint256 tokensDataService + uint256 dataServiceCut ) external; } diff --git a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol index 85d09d59f..61854bb71 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsCollector.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsCollector.sol @@ -19,17 +19,15 @@ interface IPaymentsCollector { * @param paymentType The payment type collected as defined by {IGraphPayments} * @param payer The address of the payer * @param receiver The address of the receiver - * @param tokensReceiver The amount of tokens received by the receiver * @param dataService The address of the data service - * @param tokensDataService The amount of tokens received by the data service + * @param tokens The amount of tokens being collected */ event PaymentCollected( IGraphPayments.PaymentTypes indexed paymentType, address indexed payer, address receiver, - uint256 tokensReceiver, address indexed dataService, - uint256 tokensDataService + uint256 tokens ); /** diff --git a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol index 32f83d597..760a086a7 100644 --- a/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol +++ b/packages/horizon/contracts/interfaces/IPaymentsEscrow.sol @@ -186,7 +186,7 @@ interface IPaymentsEscrow { * @param receiver The address of the receiver * @param tokens The amount of tokens to collect * @param dataService The address of the data service - * @param tokensDataService The amount of tokens that {GraphPayments} should send to the data service + * @param dataServiceCut The data service cut in PPM that {GraphPayments} should send */ function collect( IGraphPayments.PaymentTypes paymentType, @@ -194,7 +194,7 @@ interface IPaymentsEscrow { address receiver, uint256 tokens, address dataService, - uint256 tokensDataService + uint256 dataServiceCut ) external; /** diff --git a/packages/horizon/contracts/payments/GraphPayments.sol b/packages/horizon/contracts/payments/GraphPayments.sol index 0ebe566a5..0dd06ef72 100644 --- a/packages/horizon/contracts/payments/GraphPayments.sol +++ b/packages/horizon/contracts/payments/GraphPayments.sol @@ -32,7 +32,7 @@ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, I * @param protocolPaymentCut The protocol tax in PPM */ constructor(address controller, uint256 protocolPaymentCut) GraphDirectory(controller) { - require(PPMMath.isValidPPM(protocolPaymentCut), GraphPaymentsInvalidProtocolPaymentCut(protocolPaymentCut)); + require(PPMMath.isValidPPM(protocolPaymentCut), GraphPaymentsInvalidCut(protocolPaymentCut)); PROTOCOL_PAYMENT_CUT = protocolPaymentCut; _disableInitializers(); } @@ -52,41 +52,54 @@ contract GraphPayments is Initializable, MulticallUpgradeable, GraphDirectory, I address receiver, uint256 tokens, address dataService, - uint256 tokensDataService + uint256 dataServiceCut ) external { + require(PPMMath.isValidPPM(dataServiceCut), GraphPaymentsInvalidCut(dataServiceCut)); + + // Pull tokens from the sender _graphToken().pullTokens(msg.sender, tokens); - // Calculate cuts - uint256 tokensProtocol = tokens.mulPPM(PROTOCOL_PAYMENT_CUT); - uint256 delegationFeeCut = _graphStaking().getDelegationFeeCut(receiver, dataService, paymentType); - uint256 tokensDelegationPool = tokens.mulPPM(delegationFeeCut); - uint256 totalCut = tokensProtocol + tokensDataService + tokensDelegationPool; - require(tokens >= totalCut, GraphPaymentsInsufficientTokens(tokens, totalCut)); + // Calculate token amounts for each party + // Order matters: protocol -> data service -> delegators -> receiver + // Note the substractions should not underflow as we are only deducting a percentage of the remainder + uint256 tokensRemaining = tokens; + + uint256 tokensProtocol = tokensRemaining.mulPPMRoundUp(PROTOCOL_PAYMENT_CUT); + tokensRemaining = tokensRemaining - tokensProtocol; + + uint256 tokensDataService = tokensRemaining.mulPPMRoundUp(dataServiceCut); + tokensRemaining = tokensRemaining - tokensDataService; + + uint256 tokensDelegationPool = tokensRemaining.mulPPMRoundUp( + _graphStaking().getDelegationFeeCut(receiver, dataService, paymentType) + ); + tokensRemaining = tokensRemaining - tokensDelegationPool; + + // Ensure accounting is correct + uint256 tokensTotal = tokensProtocol + tokensDataService + tokensDelegationPool + tokensRemaining; + require(tokens == tokensTotal, GraphPaymentsBadAccounting(tokens, tokensTotal)); - // Pay protocol cut + // Pay all parties _graphToken().burnTokens(tokensProtocol); - // Pay data service cut _graphToken().pushTokens(dataService, tokensDataService); - // Pay delegators if (tokensDelegationPool > 0) { _graphToken().approve(address(_graphStaking()), tokensDelegationPool); _graphStaking().addToDelegationPool(receiver, dataService, tokensDelegationPool); } - // Pay receiver - uint256 tokensReceiverRemaining = tokens - totalCut; - _graphToken().pushTokens(receiver, tokensReceiverRemaining); + _graphToken().pushTokens(receiver, tokensRemaining); - emit PaymentCollected( + emit GraphPaymentCollected( msg.sender, receiver, dataService, - tokensReceiverRemaining, - tokensDelegationPool, + tokens, + tokensProtocol, tokensDataService, - tokensProtocol + tokensDelegationPool, + tokensRemaining ); } } diff --git a/packages/horizon/contracts/payments/PaymentsEscrow.sol b/packages/horizon/contracts/payments/PaymentsEscrow.sol index 108197fb3..6f4252873 100644 --- a/packages/horizon/contracts/payments/PaymentsEscrow.sol +++ b/packages/horizon/contracts/payments/PaymentsEscrow.sol @@ -129,7 +129,7 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, address receiver, uint256 tokens, address dataService, - uint256 tokensDataService + uint256 dataServiceCut ) external override notPaused { // Check if there are enough funds in the escrow account EscrowAccount storage account = escrowAccounts[payer][msg.sender][receiver]; @@ -141,7 +141,7 @@ contract PaymentsEscrow is Initializable, MulticallUpgradeable, GraphDirectory, uint256 balanceBefore = _graphToken().balanceOf(address(this)); _graphToken().approve(address(_graphPayments()), tokens); - _graphPayments().collect(paymentType, receiver, tokens, dataService, tokensDataService); + _graphPayments().collect(paymentType, receiver, tokens, dataService, dataServiceCut); uint256 balanceAfter = _graphToken().balanceOf(address(this)); require( diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index e23d16486..8d15ff5c8 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -214,21 +214,12 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { } } - uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); - if (tokensToCollect > 0) { tokensCollected[dataService][receiver][payer] += tokensToCollect; - _graphPaymentsEscrow().collect( - _paymentType, - payer, - receiver, - tokensToCollect, - dataService, - tokensDataService - ); + _graphPaymentsEscrow().collect(_paymentType, payer, receiver, tokensToCollect, dataService, dataServiceCut); } - emit PaymentCollected(_paymentType, payer, receiver, tokensToCollect, dataService, tokensDataService); + emit PaymentCollected(_paymentType, payer, receiver, dataService, tokensToCollect); emit RAVCollected( payer, dataService, diff --git a/packages/horizon/test/escrow/GraphEscrow.t.sol b/packages/horizon/test/escrow/GraphEscrow.t.sol index b2c4438bc..120713c6c 100644 --- a/packages/horizon/test/escrow/GraphEscrow.t.sol +++ b/packages/horizon/test/escrow/GraphEscrow.t.sol @@ -7,8 +7,11 @@ import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; import { PaymentsEscrowSharedTest } from "../shared/payments-escrow/PaymentsEscrowShared.t.sol"; +import { PPMMath } from "../../contracts/libraries/PPMMath.sol"; contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { + using PPMMath for uint256; + /* * MODIFIERS */ @@ -59,6 +62,7 @@ contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { uint256 receiverBalance; uint256 delegationPoolBalance; uint256 dataServiceBalance; + uint256 payerEscrowBalance; } function _collectEscrow( @@ -67,53 +71,62 @@ contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { address _receiver, uint256 _tokens, address _dataService, - uint256 _tokensDataService + uint256 _dataServiceCut ) internal { (, address _collector, ) = vm.readCallers(); // Previous balances - (uint256 previousPayerEscrowBalance, , ) = escrow.escrowAccounts(_payer, _collector, _receiver); CollectPaymentData memory previousBalances = CollectPaymentData({ escrowBalance: token.balanceOf(address(escrow)), paymentsBalance: token.balanceOf(address(payments)), receiverBalance: token.balanceOf(_receiver), delegationPoolBalance: staking.getDelegatedTokensAvailable(_receiver, _dataService), - dataServiceBalance: token.balanceOf(_dataService) + dataServiceBalance: token.balanceOf(_dataService), + payerEscrowBalance: 0 }); + { + (uint256 payerEscrowBalance, , ) = escrow.escrowAccounts(_payer, _collector, _receiver); + previousBalances.payerEscrowBalance = payerEscrowBalance; + } + vm.expectEmit(address(escrow)); emit IPaymentsEscrow.EscrowCollected(_payer, _collector, _receiver, _tokens); - escrow.collect(_paymentType, _payer, _receiver, _tokens, _dataService, _tokensDataService); + escrow.collect(_paymentType, _payer, _receiver, _tokens, _dataService, _dataServiceCut); // Calculate cuts - uint256 protocolPaymentCut = payments.PROTOCOL_PAYMENT_CUT(); - uint256 delegatorCut = staking.getDelegationFeeCut(_receiver, _dataService, _paymentType); + // this is nasty but stack is indeed too deep + uint256 tokensDataService = (_tokens - _tokens.mulPPMRoundUp(payments.PROTOCOL_PAYMENT_CUT())).mulPPMRoundUp( + _dataServiceCut + ); + uint256 tokensDelegation = (_tokens - + _tokens.mulPPMRoundUp(payments.PROTOCOL_PAYMENT_CUT()) - + tokensDataService).mulPPMRoundUp(staking.getDelegationFeeCut(_receiver, _dataService, _paymentType)); + uint256 receiverExpectedPayment = _tokens - + _tokens.mulPPMRoundUp(payments.PROTOCOL_PAYMENT_CUT()) - + tokensDataService - + tokensDelegation; // After balances - (uint256 afterPayerEscrowBalance, , ) = escrow.escrowAccounts(_payer, _collector, _receiver); CollectPaymentData memory afterBalances = CollectPaymentData({ escrowBalance: token.balanceOf(address(escrow)), paymentsBalance: token.balanceOf(address(payments)), receiverBalance: token.balanceOf(_receiver), delegationPoolBalance: staking.getDelegatedTokensAvailable(_receiver, _dataService), - dataServiceBalance: token.balanceOf(_dataService) + dataServiceBalance: token.balanceOf(_dataService), + payerEscrowBalance: 0 }); + { + (uint256 afterPayerEscrowBalance, , ) = escrow.escrowAccounts(_payer, _collector, _receiver); + afterBalances.payerEscrowBalance = afterPayerEscrowBalance; + } // Check receiver balance after payment - uint256 receiverExpectedPayment = _tokens - - _tokensDataService - - (_tokens * protocolPaymentCut) / - MAX_PPM - - (_tokens * delegatorCut) / - MAX_PPM; assertEq(afterBalances.receiverBalance - previousBalances.receiverBalance, receiverExpectedPayment); assertEq(token.balanceOf(address(payments)), 0); // Check delegation pool balance after payment - assertEq( - afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance, - (_tokens * delegatorCut) / MAX_PPM - ); + assertEq(afterBalances.delegationPoolBalance - previousBalances.delegationPoolBalance, tokensDelegation); // Check that the escrow account has been updated assertEq(previousBalances.escrowBalance, afterBalances.escrowBalance + _tokens); @@ -122,9 +135,9 @@ contract GraphEscrowTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest { assertEq(previousBalances.paymentsBalance, afterBalances.paymentsBalance); // Check data service balance after payment - assertEq(afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, _tokensDataService); + assertEq(afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, tokensDataService); // Check payers escrow balance after payment - assertEq(previousPayerEscrowBalance - _tokens, afterPayerEscrowBalance); + assertEq(previousBalances.payerEscrowBalance - _tokens, afterBalances.payerEscrowBalance); } } diff --git a/packages/horizon/test/escrow/collect.t.sol b/packages/horizon/test/escrow/collect.t.sol index 711dd7d19..106582beb 100644 --- a/packages/horizon/test/escrow/collect.t.sol +++ b/packages/horizon/test/escrow/collect.t.sol @@ -16,18 +16,16 @@ contract GraphEscrowCollectTest is GraphEscrowTest { function testCollect_Tokens( uint256 tokens, uint256 delegationTokens, - uint256 tokensDataService + uint256 dataServiceCut ) public useIndexer useProvision(tokens, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { - uint256 tokensProtocol = (tokens * protocolPaymentCut) / MAX_PPM; - uint256 tokensDelegatoion = (tokens * delegationFeeCut) / MAX_PPM; - vm.assume(tokensDataService < tokens - tokensProtocol - tokensDelegatoion); - + dataServiceCut = bound(dataServiceCut, 0, MAX_PPM); delegationTokens = bound(delegationTokens, 1, MAX_STAKING_TOKENS); + resetPrank(users.delegator); _delegate(users.indexer, subgraphDataServiceAddress, delegationTokens, 0); @@ -41,7 +39,7 @@ contract GraphEscrowCollectTest is GraphEscrowTest { users.indexer, tokens, subgraphDataServiceAddress, - tokensDataService + dataServiceCut ); } diff --git a/packages/horizon/test/payments/GraphPayments.t.sol b/packages/horizon/test/payments/GraphPayments.t.sol index 19028bde1..559180bf1 100644 --- a/packages/horizon/test/payments/GraphPayments.t.sol +++ b/packages/horizon/test/payments/GraphPayments.t.sol @@ -8,8 +8,10 @@ import { IGraphPayments } from "../../contracts/interfaces/IGraphPayments.sol"; import { GraphPayments } from "../../contracts/payments/GraphPayments.sol"; import { HorizonStakingSharedTest } from "../shared/horizon-staking/HorizonStakingShared.t.sol"; +import { PPMMath } from "../../contracts/libraries/PPMMath.sol"; contract GraphPaymentsTest is HorizonStakingSharedTest { + using PPMMath for uint256; struct CollectPaymentData { uint256 escrowBalance; @@ -24,54 +26,52 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { address _receiver, uint256 _tokens, address _dataService, - uint256 _tokensDataService + uint256 _dataServiceCut ) private { // Previous balances CollectPaymentData memory previousBalances = CollectPaymentData({ escrowBalance: token.balanceOf(address(escrow)), paymentsBalance: token.balanceOf(address(payments)), receiverBalance: token.balanceOf(_receiver), - delegationPoolBalance: staking.getDelegatedTokensAvailable( - _receiver, - _dataService - ), + delegationPoolBalance: staking.getDelegatedTokensAvailable(_receiver, _dataService), dataServiceBalance: token.balanceOf(_dataService) }); // Calculate cuts - uint256 protocolPaymentCut = payments.PROTOCOL_PAYMENT_CUT(); - uint256 delegatorCut = staking.getDelegationFeeCut( - _receiver, - _dataService, - _paymentType + uint256 tokensProtocol = _tokens.mulPPMRoundUp(payments.PROTOCOL_PAYMENT_CUT()); + uint256 tokensDataService = (_tokens - tokensProtocol).mulPPMRoundUp(_dataServiceCut); + uint256 tokensDelegation = (_tokens - tokensProtocol - tokensDataService).mulPPMRoundUp( + staking.getDelegationFeeCut(_receiver, _dataService, _paymentType) ); - uint256 tokensProtocol = _tokens * protocolPaymentCut / MAX_PPM; - uint256 tokensDelegation = _tokens * delegatorCut / MAX_PPM; - uint256 receiverExpectedPayment = _tokens - _tokensDataService - tokensProtocol - tokensDelegation; + uint256 receiverExpectedPayment = _tokens - tokensProtocol - tokensDataService - tokensDelegation; - (,address msgSender, ) = vm.readCallers(); + (, address msgSender, ) = vm.readCallers(); vm.expectEmit(address(payments)); - emit IGraphPayments.PaymentCollected( + emit IGraphPayments.GraphPaymentCollected( msgSender, _receiver, _dataService, - receiverExpectedPayment, + _tokens, + tokensProtocol, + tokensDataService, tokensDelegation, - _tokensDataService, - tokensProtocol + receiverExpectedPayment + ); + payments.collect( + _paymentType, + _receiver, + _tokens, + _dataService, + _dataServiceCut ); - payments.collect(_paymentType, _receiver, _tokens, _dataService, _tokensDataService); // After balances CollectPaymentData memory afterBalances = CollectPaymentData({ escrowBalance: token.balanceOf(address(escrow)), paymentsBalance: token.balanceOf(address(payments)), receiverBalance: token.balanceOf(_receiver), - delegationPoolBalance: staking.getDelegatedTokensAvailable( - _receiver, - _dataService - ), + delegationPoolBalance: staking.getDelegatedTokensAvailable(_receiver, _dataService), dataServiceBalance: token.balanceOf(_dataService) }); @@ -89,7 +89,7 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { assertEq(previousBalances.paymentsBalance, afterBalances.paymentsBalance); // Check data service balance after payment - assertEq(afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, _tokensDataService); + assertEq(afterBalances.dataServiceBalance - previousBalances.dataServiceBalance, tokensDataService); } /* @@ -97,11 +97,11 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { */ function testConstructor_RevertIf_InvalidProtocolPaymentCut(uint256 protocolPaymentCut) public { - protocolPaymentCut = bound(protocolPaymentCut, MAX_PPM + 1, MAX_PPM + 100); + protocolPaymentCut = bound(protocolPaymentCut, MAX_PPM + 1, type(uint256).max); resetPrank(users.deployer); bytes memory expectedError = abi.encodeWithSelector( - IGraphPayments.GraphPaymentsInvalidProtocolPaymentCut.selector, + IGraphPayments.GraphPaymentsInvalidCut.selector, protocolPaymentCut ); vm.expectRevert(expectedError); @@ -110,12 +110,15 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { function testCollect( uint256 amount, - uint256 tokensDataService, + uint256 dataServiceCut, uint256 tokensDelegate - ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { - uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; - uint256 tokensDelegation = amount * delegationFeeCut / MAX_PPM; - vm.assume(tokensDataService < amount - tokensProtocol - tokensDelegation); + ) + public + useIndexer + useProvision(amount, 0, 0) + useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) + { + dataServiceCut = bound(dataServiceCut, 0, MAX_PPM); address escrowAddress = address(escrow); // Delegate tokens @@ -129,35 +132,50 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { approve(address(payments), amount); // Collect payments through GraphPayments - _collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); + _collect( + IGraphPayments.PaymentTypes.QueryFee, + users.indexer, + amount, + subgraphDataServiceAddress, + dataServiceCut + ); vm.stopPrank(); } - function testCollect_RevertWhen_InsufficientAmount( + function testCollect_RevertWhen_InvalidDataServiceCut( uint256 amount, - uint256 tokensDataService - ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { - tokensDataService = bound(tokensDataService, amount + 1, MAX_STAKING_TOKENS + 1); - - address escrowAddress = address(escrow); - mint(escrowAddress, amount); - vm.startPrank(escrowAddress); - approve(address(payments), amount); + uint256 dataServiceCut + ) + public + useIndexer + useProvision(amount, 0, 0) + useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) + { + dataServiceCut = bound(dataServiceCut, MAX_PPM + 1, type(uint256).max); - bytes memory expectedError; - { - uint256 tokensProtocol = amount * protocolPaymentCut / MAX_PPM; - uint256 tokensDelegatoion = amount * delegationFeeCut / MAX_PPM; - uint256 requiredAmount = tokensDataService + tokensProtocol + tokensDelegatoion; - expectedError = abi.encodeWithSignature("GraphPaymentsInsufficientTokens(uint256,uint256)", amount, requiredAmount); - } + resetPrank(users.deployer); + bytes memory expectedError = abi.encodeWithSelector( + IGraphPayments.GraphPaymentsInvalidCut.selector, + dataServiceCut + ); vm.expectRevert(expectedError); - payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, tokensDataService); + payments.collect( + IGraphPayments.PaymentTypes.QueryFee, + users.indexer, + amount, + subgraphDataServiceAddress, + dataServiceCut + ); } function testCollect_RevertWhen_InvalidPool( uint256 amount - ) public useIndexer useProvision(amount, 0, 0) useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) { + ) + public + useIndexer + useProvision(amount, 0, 0) + useDelegationFeeCut(IGraphPayments.PaymentTypes.QueryFee, delegationFeeCut) + { vm.assume(amount > 1 ether); address escrowAddress = address(escrow); @@ -167,11 +185,13 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { approve(address(payments), amount); // Collect payments through GraphPayments - vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, - users.indexer, - subgraphDataServiceAddress - )); + vm.expectRevert( + abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidDelegationPool.selector, + users.indexer, + subgraphDataServiceAddress + ) + ); payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, 1); } @@ -181,18 +201,20 @@ contract GraphPaymentsTest is HorizonStakingSharedTest { vm.assume(amount > 1 ether); vm.assume(amount <= MAX_STAKING_TOKENS); address escrowAddress = address(escrow); - + // Add tokens in escrow mint(escrowAddress, amount); vm.startPrank(escrowAddress); approve(address(payments), amount); // Collect payments through GraphPayments - vm.expectRevert(abi.encodeWithSelector( - IHorizonStakingMain.HorizonStakingInvalidProvision.selector, - users.indexer, - subgraphDataServiceAddress - )); + vm.expectRevert( + abi.encodeWithSelector( + IHorizonStakingMain.HorizonStakingInvalidProvision.selector, + users.indexer, + subgraphDataServiceAddress + ) + ); payments.collect(IGraphPayments.PaymentTypes.QueryFee, users.indexer, amount, subgraphDataServiceAddress, 1); } } diff --git a/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol b/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol index ac67d6552..362cff8af 100644 --- a/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol +++ b/packages/horizon/test/payments/tap-collector/TAPCollector.t.sol @@ -60,12 +60,12 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest function _authorizeSigner(address _signer, uint256 _proofDeadline, bytes memory _proof) internal { (, address msgSender, ) = vm.readCallers(); - + vm.expectEmit(address(tapCollector)); emit ITAPCollector.SignerAuthorized(msgSender, _signer); - + tapCollector.authorizeSigner(_signer, _proofDeadline, _proof); - + (address _payer, uint256 thawEndTimestamp, bool revoked) = tapCollector.authorizedSigners(_signer); assertEq(_payer, msgSender); assertEq(thawEndTimestamp, 0); @@ -111,7 +111,9 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest tapCollector.revokeAuthorizedSigner(_signer); - (address afterPayer, uint256 afterThawEndTimestamp, bool afterRevoked) = tapCollector.authorizedSigners(_signer); + (address afterPayer, uint256 afterThawEndTimestamp, bool afterRevoked) = tapCollector.authorizedSigners( + _signer + ); assertEq(beforePayer, afterPayer); assertEq(beforeThawEndTimestamp, afterThawEndTimestamp); @@ -126,23 +128,34 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest __collect(_paymentType, _data, _tokensToCollect); } - function __collect(IGraphPayments.PaymentTypes _paymentType, bytes memory _data, uint256 _tokensToCollect) internal { - (ITAPCollector.SignedRAV memory signedRAV, uint256 dataServiceCut) = abi.decode(_data, (ITAPCollector.SignedRAV, uint256)); + function __collect( + IGraphPayments.PaymentTypes _paymentType, + bytes memory _data, + uint256 _tokensToCollect + ) internal { + (ITAPCollector.SignedRAV memory signedRAV, ) = abi.decode( + _data, + (ITAPCollector.SignedRAV, uint256) + ); bytes32 messageHash = tapCollector.encodeRAV(signedRAV.rav); address _signer = ECDSA.recover(messageHash, signedRAV.signature); (address _payer, , ) = tapCollector.authorizedSigners(_signer); - uint256 tokensAlreadyCollected = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); - uint256 tokensToCollect = _tokensToCollect == 0 ? signedRAV.rav.valueAggregate - tokensAlreadyCollected : _tokensToCollect; - uint256 tokensDataService = tokensToCollect.mulPPM(dataServiceCut); - + uint256 tokensAlreadyCollected = tapCollector.tokensCollected( + signedRAV.rav.dataService, + signedRAV.rav.serviceProvider, + _payer + ); + uint256 tokensToCollect = _tokensToCollect == 0 + ? signedRAV.rav.valueAggregate - tokensAlreadyCollected + : _tokensToCollect; + vm.expectEmit(address(tapCollector)); emit IPaymentsCollector.PaymentCollected( - _paymentType, + _paymentType, _payer, signedRAV.rav.serviceProvider, - tokensToCollect, signedRAV.rav.dataService, - tokensDataService + tokensToCollect ); vm.expectEmit(address(tapCollector)); emit ITAPCollector.RAVCollected( @@ -154,10 +167,19 @@ contract TAPCollectorTest is HorizonStakingSharedTest, PaymentsEscrowSharedTest signedRAV.rav.metadata, signedRAV.signature ); - uint256 tokensCollected = _tokensToCollect == 0 ? tapCollector.collect(_paymentType, _data) : tapCollector.collect(_paymentType, _data, _tokensToCollect); + uint256 tokensCollected = _tokensToCollect == 0 + ? tapCollector.collect(_paymentType, _data) + : tapCollector.collect(_paymentType, _data, _tokensToCollect); - uint256 tokensCollectedAfter = tapCollector.tokensCollected(signedRAV.rav.dataService, signedRAV.rav.serviceProvider, _payer); + uint256 tokensCollectedAfter = tapCollector.tokensCollected( + signedRAV.rav.dataService, + signedRAV.rav.serviceProvider, + _payer + ); assertEq(tokensCollected, tokensToCollect); - assertEq(tokensCollectedAfter, _tokensToCollect == 0 ? signedRAV.rav.valueAggregate : tokensAlreadyCollected + _tokensToCollect); + assertEq( + tokensCollectedAfter, + _tokensToCollect == 0 ? signedRAV.rav.valueAggregate : tokensAlreadyCollected + _tokensToCollect + ); } } diff --git a/packages/subgraph-service/contracts/SubgraphService.sol b/packages/subgraph-service/contracts/SubgraphService.sol index a07463a25..b1403124b 100644 --- a/packages/subgraph-service/contracts/SubgraphService.sol +++ b/packages/subgraph-service/contracts/SubgraphService.sol @@ -556,13 +556,10 @@ contract SubgraphService is IGraphPayments.PaymentTypes.QueryFee, abi.encode(_signedRav, curationCut) ); - uint256 tokensCurators = tokensCollected.mulPPM(curationCut); uint256 balanceAfter = _graphToken().balanceOf(address(this)); - require( - balanceBefore + tokensCurators == balanceAfter, - SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter, tokensCurators) - ); + require(balanceAfter >= balanceBefore, SubgraphServiceInconsistentCollection(balanceBefore, balanceAfter)); + uint256 tokensCurators = balanceAfter - balanceBefore; if (tokensCollected > 0) { // lock stake as economic security for fees diff --git a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol index 32ea9e8fb..44b9b3e6d 100644 --- a/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol +++ b/packages/subgraph-service/contracts/interfaces/ISubgraphService.sol @@ -80,13 +80,11 @@ interface ISubgraphService is IDataServiceFees { error SubgraphServiceInvalidPaymentType(IGraphPayments.PaymentTypes paymentType); /** - * @notice Thrown when the contract GRT balance is inconsistent with the payment amount collected - * from Graph Payments + * @notice Thrown when the contract GRT balance is inconsistent after collecting from Graph Payments * @param balanceBefore The contract GRT balance before the collection * @param balanceAfter The contract GRT balance after the collection - * @param tokensDataService The amount of tokens sent to the subgraph service */ - error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter, uint256 tokensDataService); + error SubgraphServiceInconsistentCollection(uint256 balanceBefore, uint256 balanceAfter); /** * @notice @notice Thrown when the service provider in the RAV does not match the expected indexer. diff --git a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol index 64842b1f2..619ad4bab 100644 --- a/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol +++ b/packages/subgraph-service/test/subgraphService/SubgraphService.t.sol @@ -242,7 +242,8 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { // Calculate curation cut uint256 curationFeesCut = subgraphService.curationFeesCut(); queryFeeData.curationCut = curation.isCurated(allocation.subgraphDeploymentId) ? curationFeesCut : 0; - uint256 tokensCurators = paymentCollected.mulPPM(queryFeeData.curationCut); + uint256 tokensProtocol = paymentCollected.mulPPMRoundUp(queryFeeData.protocolPaymentCut); + uint256 tokensCurators = (paymentCollected - tokensProtocol).mulPPMRoundUp(queryFeeData.curationCut); vm.expectEmit(address(subgraphService)); emit ISubgraphService.QueryFeesCollected(_indexer, paymentCollected, tokensCurators); @@ -302,8 +303,8 @@ contract SubgraphServiceTest is SubgraphServiceSharedTest { if (_paymentType == IGraphPayments.PaymentTypes.QueryFee) { // Check indexer got paid the correct amount { - uint256 tokensProtocol = paymentCollected.mulPPM(protocolPaymentCut); - uint256 curationTokens = paymentCollected.mulPPM(queryFeeData.curationCut); + uint256 tokensProtocol = paymentCollected.mulPPMRoundUp(protocolPaymentCut); + uint256 curationTokens = (paymentCollected - tokensProtocol).mulPPMRoundUp(queryFeeData.curationCut); uint256 expectedIndexerTokensPayment = paymentCollected - tokensProtocol - curationTokens; assertEq( collectPaymentDataAfter.indexerBalance, From 25d22e4104edcbddcd12186bbfbb314be3b1bae9 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 13 Dec 2024 15:31:03 -0300 Subject: [PATCH 335/343] fix: added new function for accept dispute in conflict that includes tokensSlashRelated (TRST-M08) --- .../contracts/DisputeManager.sol | 41 +++-- .../contracts/interfaces/IDisputeManager.sol | 10 +- .../test/disputeManager/DisputeManager.t.sol | 169 ++++++++++++++---- .../disputeManager/disputes/disputes.t.sol | 4 +- .../disputes/indexing/accept.t.sol | 10 +- .../disputes/query/accept.t.sol | 29 ++- .../disputes/queryConflict/accept.t.sol | 86 ++++++++- 7 files changed, 281 insertions(+), 68 deletions(-) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index 98677c7f0..b1d420542 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -243,27 +243,46 @@ contract DisputeManager is * This function will revert if the indexer is not slashable, whether because it does not have * any stake available or the slashing percentage is configured to be zero. In those cases * a dispute must be resolved using drawDispute or rejectDispute. + * This function will also revert if the dispute is in conflict, to accept a conflicting dispute + * use acceptDisputeConflict. * @dev Accept a dispute with Id `disputeId` * @param disputeId Id of the dispute to be accepted - * @param tokensSlash Amount of tokens to slash from the indexer - * @param acceptDisputeInConflict If the dispute is in conflict, accept the conflicting dispute. Otherwise - * it will be drawn automatically. Ignored if the dispute is not in conflict. + * @param tokensSlash Amount of tokens to slash from the indexer for the first dispute */ function acceptDispute( + bytes32 disputeId, + uint256 tokensSlash + ) external override onlyArbitrator onlyPendingDispute(disputeId) { + require(!_isDisputeInConflict(disputes[disputeId]), DisputeManagerDisputeInConflict(disputeId)); + Dispute storage dispute = disputes[disputeId]; + _acceptDispute(disputeId, dispute, tokensSlash); + } + + /** + * @notice The arbitrator accepts a conflicting dispute as being valid. + * This function will revert if the indexer is not slashable, whether because it does not have + * any stake available or the slashing percentage is configured to be zero. In those cases + * a dispute must be resolved using drawDispute. + * @param disputeId Id of the dispute to be accepted + * @param tokensSlash Amount of tokens to slash from the indexer for the first dispute + * @param acceptDisputeInConflict Accept the conflicting dispute. Otherwise it will be drawn automatically + * @param tokensSlashRelated Amount of tokens to slash from the indexer for the related dispute in case + * acceptDisputeInConflict is true, otherwise it will be ignored + */ + function acceptDisputeConflict( bytes32 disputeId, uint256 tokensSlash, - bool acceptDisputeInConflict + bool acceptDisputeInConflict, + uint256 tokensSlashRelated ) external override onlyArbitrator onlyPendingDispute(disputeId) { + require(_isDisputeInConflict(disputes[disputeId]), DisputeManagerDisputeNotInConflict(disputeId)); Dispute storage dispute = disputes[disputeId]; _acceptDispute(disputeId, dispute, tokensSlash); - if (_isDisputeInConflict(dispute)) { - Dispute storage relatedDispute = disputes[dispute.relatedDisputeId]; - if (acceptDisputeInConflict) { - _acceptDispute(dispute.relatedDisputeId, relatedDispute, tokensSlash); - } else { - _drawDispute(dispute.relatedDisputeId, relatedDispute); - } + if (acceptDisputeInConflict) { + _acceptDispute(dispute.relatedDisputeId, disputes[dispute.relatedDisputeId], tokensSlashRelated); + } else { + _drawDispute(dispute.relatedDisputeId, disputes[dispute.relatedDisputeId]); } } diff --git a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol index e8c1cd346..ee2e92ac2 100644 --- a/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol +++ b/packages/subgraph-service/contracts/interfaces/IDisputeManager.sol @@ -170,6 +170,7 @@ interface IDisputeManager { error DisputeManagerDisputeAlreadyCreated(bytes32 disputeId); error DisputeManagerDisputePeriodNotFinished(); error DisputeManagerDisputeInConflict(bytes32 disputeId); + error DisputeManagerDisputeNotInConflict(bytes32 disputeId); error DisputeManagerMustAcceptRelatedDispute(bytes32 disputeId, bytes32 relatedDisputeId); error DisputeManagerIndexerNotFound(address allocationId); error DisputeManagerNonMatchingSubgraphDeployment(bytes32 subgraphDeploymentId1, bytes32 subgraphDeploymentId2); @@ -204,7 +205,14 @@ interface IDisputeManager { function createIndexingDispute(address allocationId, bytes32 poi) external returns (bytes32); - function acceptDispute(bytes32 disputeId, uint256 tokensSlash, bool acceptDisputeInConflict) external; + function acceptDispute(bytes32 disputeId, uint256 tokensSlash) external; + + function acceptDisputeConflict( + bytes32 disputeId, + uint256 tokensSlash, + bool acceptDisputeInConflict, + uint256 tokensSlashRelated + ) external; function rejectDispute(bytes32 disputeId) external; diff --git a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol index ac7b55978..0349fe7da 100644 --- a/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol +++ b/packages/subgraph-service/test/disputeManager/DisputeManager.t.sol @@ -323,11 +323,8 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { return (_disputeId1, _disputeId2); } - function _acceptDispute(bytes32 _disputeId, uint256 _tokensSlash, bool _acceptRelatedDispute) internal { + function _acceptDispute(bytes32 _disputeId, uint256 _tokensSlash) internal { IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); - bool isDisputeInConflict = dispute.relatedDisputeId != bytes32(0); - IDisputeManager.Dispute memory relatedDispute; - if (isDisputeInConflict) relatedDispute = _getDispute(dispute.relatedDisputeId); address fisherman = dispute.fisherman; uint256 fishermanPreviousBalance = token.balanceOf(fisherman); uint256 indexerTokensAvailable = staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)); @@ -343,33 +340,13 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { dispute.deposit + fishermanReward ); - if (isDisputeInConflict) { - if (_acceptRelatedDispute) { - emit IDisputeManager.DisputeAccepted( - dispute.relatedDisputeId, - relatedDispute.indexer, - relatedDispute.fisherman, - relatedDispute.deposit - ); - } else { - emit IDisputeManager.DisputeRejected( - dispute.relatedDisputeId, - relatedDispute.indexer, - relatedDispute.fisherman, - relatedDispute.deposit - ); - } - } - // Accept the dispute - disputeManager.acceptDispute(_disputeId, _tokensSlash, _acceptRelatedDispute); + disputeManager.acceptDispute(_disputeId, _tokensSlash); // Check fisherman's got their reward and their deposit (if any) back uint256 fishermanExpectedBalance = fishermanPreviousBalance + fishermanReward + - disputeDeposit + - (isDisputeInConflict ? relatedDispute.deposit : 0) + - ((isDisputeInConflict && _acceptRelatedDispute) ? fishermanReward : 0); + disputeDeposit; assertEq( token.balanceOf(fisherman), fishermanExpectedBalance, @@ -378,11 +355,10 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { // Check indexer was slashed by the correct amount uint256 expectedIndexerTokensAvailable; - uint256 tokensToSlash = (isDisputeInConflict && _acceptRelatedDispute) ? _tokensSlash * 2 : _tokensSlash; - if (tokensToSlash > indexerTokensAvailable) { + if (_tokensSlash > indexerTokensAvailable) { expectedIndexerTokensAvailable = 0; } else { - expectedIndexerTokensAvailable = indexerTokensAvailable - tokensToSlash; + expectedIndexerTokensAvailable = indexerTokensAvailable - _tokensSlash; } assertEq( staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), @@ -397,18 +373,137 @@ contract DisputeManagerTest is SubgraphServiceSharedTest { uint8(IDisputeManager.DisputeStatus.Accepted), "Dispute status should be accepted" ); + } - // If there's a related dispute, check it - if (isDisputeInConflict) { - relatedDispute = _getDispute(dispute.relatedDisputeId); + struct FishermanParams { + address fisherman; + uint256 previousBalance; + uint256 disputeDeposit; + uint256 relatedDisputeDeposit; + uint256 rewardPercentage; + uint256 rewardFirstDispute; + uint256 rewardRelatedDispute; + uint256 totalReward; + uint256 expectedBalance; + } + + function _acceptDisputeConflict(bytes32 _disputeId, uint256 _tokensSlash, bool _acceptRelatedDispute, uint256 _tokensRelatedSlash) internal { + IDisputeManager.Dispute memory dispute = _getDispute(_disputeId); + IDisputeManager.Dispute memory relatedDispute = _getDispute(dispute.relatedDisputeId); + uint256 indexerTokensAvailable = staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)); + uint256 relatedIndexerTokensAvailable = staking.getProviderTokensAvailable(relatedDispute.indexer, address(subgraphService)); + + FishermanParams memory params; + params.fisherman = dispute.fisherman; + params.previousBalance = token.balanceOf(params.fisherman); + params.disputeDeposit = dispute.deposit; + params.relatedDisputeDeposit = relatedDispute.deposit; + params.rewardPercentage = disputeManager.fishermanRewardCut(); + params.rewardFirstDispute = _tokensSlash.mulPPM(params.rewardPercentage); + params.rewardRelatedDispute = (_acceptRelatedDispute) ? _tokensRelatedSlash.mulPPM(params.rewardPercentage) : 0; + params.totalReward = params.rewardFirstDispute + params.rewardRelatedDispute; + + vm.expectEmit(address(disputeManager)); + emit IDisputeManager.DisputeAccepted( + _disputeId, + dispute.indexer, + params.fisherman, + params.disputeDeposit + params.rewardFirstDispute + ); + + if (_acceptRelatedDispute) { + emit IDisputeManager.DisputeAccepted( + dispute.relatedDisputeId, + relatedDispute.indexer, + relatedDispute.fisherman, + relatedDispute.deposit + params.rewardRelatedDispute + ); + } else { + emit IDisputeManager.DisputeDrawn( + dispute.relatedDisputeId, + relatedDispute.indexer, + relatedDispute.fisherman, + relatedDispute.deposit + ); + } + + // Accept the dispute + disputeManager.acceptDisputeConflict(_disputeId, _tokensSlash, _acceptRelatedDispute, _tokensRelatedSlash); + + // Check fisherman's got their reward and their deposit back + params.expectedBalance = params.previousBalance + + params.totalReward + + params.disputeDeposit + + params.relatedDisputeDeposit; + assertEq( + token.balanceOf(params.fisherman), + params.expectedBalance, + "Fisherman should get their reward and deposit back" + ); + + // If both disputes are for the same indexer, check that the indexer was slashed by the correct amount + if (dispute.indexer == relatedDispute.indexer) { + uint256 tokensToSlash = (_acceptRelatedDispute) ? _tokensSlash + _tokensRelatedSlash : _tokensSlash; + uint256 expectedIndexerTokensAvailable; + if (tokensToSlash > indexerTokensAvailable) { + expectedIndexerTokensAvailable = 0; + } else { + expectedIndexerTokensAvailable = indexerTokensAvailable - tokensToSlash; + } assertEq( - uint8(relatedDispute.status), - _acceptRelatedDispute - ? uint8(IDisputeManager.DisputeStatus.Accepted) - : uint8(IDisputeManager.DisputeStatus.Drawn), - "Related dispute status should be drawn" + staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), + expectedIndexerTokensAvailable, + "Indexer should be slashed by the correct amount" ); + } else { + // Check indexer for first dispute was slashed by the correct amount + uint256 expectedIndexerTokensAvailable; + uint256 tokensToSlash = (_acceptRelatedDispute) ? _tokensSlash : _tokensSlash; + if (tokensToSlash > indexerTokensAvailable) { + expectedIndexerTokensAvailable = 0; + } else { + expectedIndexerTokensAvailable = indexerTokensAvailable - tokensToSlash; + } + assertEq( + staking.getProviderTokensAvailable(dispute.indexer, address(subgraphService)), + expectedIndexerTokensAvailable, + "Indexer should be slashed by the correct amount" + ); + + // Check indexer for related dispute was slashed by the correct amount if it was accepted + if (_acceptRelatedDispute) { + uint256 expectedRelatedIndexerTokensAvailable; + if (_tokensRelatedSlash > relatedIndexerTokensAvailable) { + expectedRelatedIndexerTokensAvailable = 0; + } else { + expectedRelatedIndexerTokensAvailable = relatedIndexerTokensAvailable - _tokensRelatedSlash; + } + assertEq( + staking.getProviderTokensAvailable(relatedDispute.indexer, address(subgraphService)), + expectedRelatedIndexerTokensAvailable, + "Indexer should be slashed by the correct amount" + ); + } } + + + // Check dispute status + dispute = _getDispute(_disputeId); + assertEq( + uint8(dispute.status), + uint8(IDisputeManager.DisputeStatus.Accepted), + "Dispute status should be accepted" + ); + + // If there's a related dispute, check it + relatedDispute = _getDispute(dispute.relatedDisputeId); + assertEq( + uint8(relatedDispute.status), + _acceptRelatedDispute + ? uint8(IDisputeManager.DisputeStatus.Accepted) + : uint8(IDisputeManager.DisputeStatus.Drawn), + "Related dispute status should be drawn" + ); } function _drawDispute(bytes32 _disputeId) internal { diff --git a/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol b/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol index a7ac899ef..b6b4a6890 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/disputes.t.sol @@ -27,7 +27,7 @@ contract DisputeManagerDisputeTest is DisputeManagerTest { IDisputeManager.DisputeManagerInvalidDispute.selector, disputeID )); - disputeManager.acceptDispute(disputeID, tokensSlash, false); + disputeManager.acceptDispute(disputeID, tokensSlash); } function test_Dispute_Accept_RevertIf_SlashZeroTokens( @@ -40,7 +40,7 @@ contract DisputeManagerDisputeTest is DisputeManagerTest { resetPrank(users.arbitrator); uint256 maxTokensToSlash = uint256(maxSlashingPercentage).mulPPM(tokens); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerInvalidTokensSlash.selector, 0, maxTokensToSlash)); - disputeManager.acceptDispute(disputeID, 0, false); + disputeManager.acceptDispute(disputeID, 0); } function test_Dispute_Reject_RevertIf_DisputeDoesNotExist( diff --git a/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol index 95ed7eb28..f1d1dc24f 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/indexing/accept.t.sol @@ -24,7 +24,7 @@ contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); resetPrank(users.arbitrator); - _acceptDispute(disputeID, tokensSlash, false); + _acceptDispute(disputeID, tokensSlash); } function test_Indexing_Accept_Dispute_RevertWhen_SubgraphServiceNotSet( @@ -41,7 +41,7 @@ contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { _setStorage_SubgraphService(address(0)); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerSubgraphServiceNotSet.selector)); - disputeManager.acceptDispute(disputeID, tokensSlash, false); + disputeManager.acceptDispute(disputeID, tokensSlash); } function test_Indexing_Accept_Dispute_OptParam( @@ -54,7 +54,7 @@ contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { bytes32 disputeID = _createIndexingDispute(allocationID, bytes32("POI1")); resetPrank(users.arbitrator); - _acceptDispute(disputeID, tokensSlash, true); + _acceptDispute(disputeID, tokensSlash); } function test_Indexing_Accept_RevertIf_CallerIsNotArbitrator( @@ -69,7 +69,7 @@ contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { // attempt to accept dispute as fisherman resetPrank(users.fisherman); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); - disputeManager.acceptDispute(disputeID, tokensSlash, false); + disputeManager.acceptDispute(disputeID, tokensSlash); } function test_Indexing_Accept_RevertWhen_SlashingOverMaxSlashPercentage( @@ -89,6 +89,6 @@ contract DisputeManagerIndexingAcceptDisputeTest is DisputeManagerTest { maxTokensToSlash ); vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID, tokensSlash, false); + disputeManager.acceptDispute(disputeID, tokensSlash); } } diff --git a/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol index 70a427c28..7262dadb9 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/query/accept.t.sol @@ -31,7 +31,7 @@ contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { bytes32 disputeID = _createQueryDispute(attestationData); resetPrank(users.arbitrator); - _acceptDispute(disputeID, tokensSlash, false); + _acceptDispute(disputeID, tokensSlash); } function test_Query_Accept_Dispute_RevertWhen_SubgraphServiceNotSet( @@ -49,7 +49,7 @@ contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { // clear subgraph service address from storage _setStorage_SubgraphService(address(0)); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerSubgraphServiceNotSet.selector)); - disputeManager.acceptDispute(disputeID, tokensSlash, false); + disputeManager.acceptDispute(disputeID, tokensSlash); } function test_Query_Accept_Dispute_OptParam( @@ -64,7 +64,7 @@ contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { bytes32 disputeID = _createQueryDispute(attestationData); resetPrank(users.arbitrator); - _acceptDispute(disputeID, tokensSlash, true); + _acceptDispute(disputeID, tokensSlash); } function test_Query_Accept_RevertIf_CallerIsNotArbitrator( @@ -80,7 +80,7 @@ contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { // attempt to accept dispute as fisherman vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); - disputeManager.acceptDispute(disputeID, tokensSlash, false); + disputeManager.acceptDispute(disputeID, tokensSlash); } function test_Query_Accept_RevertWhen_SlashingOverMaxSlashPercentage( @@ -103,6 +103,25 @@ contract DisputeManagerQueryAcceptDisputeTest is DisputeManagerTest { maxTokensToSlash ); vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID, tokensSlash, false); + disputeManager.acceptDispute(disputeID, tokensSlash); + } + + function test_Query_Accept_RevertWhen_UsingConflictAccept( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + resetPrank(users.fisherman); + Attestation.Receipt memory receipt = _createAttestationReceipt(requestCID, responseCID, subgraphDeploymentId); + bytes memory attestationData = _createAtestationData(receipt, allocationIDPrivateKey); + bytes32 disputeID = _createQueryDispute(attestationData); + + resetPrank(users.arbitrator); + vm.expectRevert(abi.encodeWithSelector( + IDisputeManager.DisputeManagerDisputeNotInConflict.selector, + disputeID + )); + disputeManager.acceptDisputeConflict(disputeID, tokensSlash, true, 0); } } diff --git a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol index d44c2432a..f145277af 100644 --- a/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol +++ b/packages/subgraph-service/test/disputeManager/disputes/queryConflict/accept.t.sol @@ -39,7 +39,7 @@ contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { (bytes32 disputeID1, ) = _createQueryDisputeConflict(attestationData1, attestationData2); resetPrank(users.arbitrator); - _acceptDispute(disputeID1, tokensSlash, false); + _acceptDisputeConflict(disputeID1, tokensSlash, false, 0); uint256 fishermanRewardPercentage = disputeManager.fishermanRewardCut(); uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); @@ -50,9 +50,11 @@ contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { function test_Query_Conflict_Accept_Dispute_Accept_Other( uint256 tokens, - uint256 tokensSlash + uint256 tokensSlash, + uint256 tokensSlashRelatedDispute ) public useIndexer useAllocation(tokens) { tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + tokensSlashRelatedDispute = bound(tokensSlashRelatedDispute, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( requestCID, @@ -69,13 +71,15 @@ contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { (bytes32 disputeID1, ) = _createQueryDisputeConflict(attestationData1, attestationData2); resetPrank(users.arbitrator); - _acceptDispute(disputeID1, tokensSlash, true); + _acceptDisputeConflict(disputeID1, tokensSlash, true, tokensSlashRelatedDispute); uint256 fishermanRewardPercentage = disputeManager.fishermanRewardCut(); - uint256 fishermanReward = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanRewardFirstDispute = tokensSlash.mulPPM(fishermanRewardPercentage); + uint256 fishermanRewardRelatedDispute = tokensSlashRelatedDispute.mulPPM(fishermanRewardPercentage); + uint256 fishermanReward = fishermanRewardFirstDispute + fishermanRewardRelatedDispute; uint256 fishermanBalanceAfter = token.balanceOf(users.fisherman); - assertEq(fishermanBalanceAfter, fishermanBalanceBefore + fishermanReward * 2); + assertEq(fishermanBalanceAfter, fishermanBalanceBefore + fishermanReward); } function test_Query_Conflict_Accept_RevertIf_CallerIsNotArbitrator( @@ -99,7 +103,7 @@ contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { // attempt to accept dispute as fisherman resetPrank(users.fisherman); vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerNotArbitrator.selector)); - disputeManager.acceptDispute(disputeID1, tokensSlash, false); + disputeManager.acceptDisputeConflict(disputeID1, tokensSlash, false, 0); } function test_Query_Conflict_Accept_RevertWhen_SlashingOverMaxSlashPercentage( @@ -129,6 +133,74 @@ contract DisputeManagerQueryConflictAcceptDisputeTest is DisputeManagerTest { maxTokensToSlash ); vm.expectRevert(expectedError); - disputeManager.acceptDispute(disputeID1, tokensSlash, false); + disputeManager.acceptDisputeConflict(disputeID1, tokensSlash, false, 0); + } + + function test_Query_Conflict_Accept_AcceptRelated_DifferentIndexer( + uint256 tokensFirstIndexer, + uint256 tokensSecondIndexer, + uint256 tokensSlash, + uint256 tokensSlashRelatedDispute + ) public useIndexer useAllocation(tokensFirstIndexer) { + tokensSecondIndexer = bound(tokensSecondIndexer, minimumProvisionTokens, 10_000_000_000 ether); + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokensFirstIndexer)); + + // Setup different indexer for related dispute + address differentIndexer = makeAddr("DifferentIndexer"); + mint(differentIndexer, tokensSecondIndexer); + uint256 differentIndexerAllocationIDPrivateKey = uint256(keccak256(abi.encodePacked(differentIndexer))); + resetPrank(differentIndexer); + _createProvision(differentIndexer, tokensSecondIndexer, maxSlashingPercentage, disputePeriod); + _register(differentIndexer, abi.encode("url", "geoHash", address(0))); + bytes memory data = _createSubgraphAllocationData( + differentIndexer, + subgraphDeployment, + differentIndexerAllocationIDPrivateKey, + tokensSecondIndexer + ); + _startService(differentIndexer, data); + tokensSlashRelatedDispute = bound( + tokensSlashRelatedDispute, + 1, + uint256(maxSlashingPercentage).mulPPM(tokensSecondIndexer) + ); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + differentIndexerAllocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1, ) = _createQueryDisputeConflict(attestationData1, attestationData2); + + resetPrank(users.arbitrator); + _acceptDisputeConflict(disputeID1, tokensSlash, true, tokensSlashRelatedDispute); + } + + function test_Query_Conflict_Accept_RevertWhen_UsingSingleAccept( + uint256 tokens, + uint256 tokensSlash + ) public useIndexer useAllocation(tokens) { + tokensSlash = bound(tokensSlash, 1, uint256(maxSlashingPercentage).mulPPM(tokens)); + + (bytes memory attestationData1, bytes memory attestationData2) = _createConflictingAttestations( + requestCID, + subgraphDeployment, + responseCID1, + responseCID2, + allocationIDPrivateKey, + allocationIDPrivateKey + ); + + resetPrank(users.fisherman); + (bytes32 disputeID1, ) = _createQueryDisputeConflict(attestationData1, attestationData2); + + resetPrank(users.arbitrator); + vm.expectRevert(abi.encodeWithSelector(IDisputeManager.DisputeManagerDisputeInConflict.selector, disputeID1)); + disputeManager.acceptDispute(disputeID1, tokensSlash); } } From dc79bd401974a605789f38a5d812b731a9006143 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 13 Dec 2024 15:45:07 -0300 Subject: [PATCH 336/343] fix: add payer to EIP712 rav type hash (TRST-M15) --- packages/horizon/contracts/payments/collectors/TAPCollector.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/horizon/contracts/payments/collectors/TAPCollector.sol b/packages/horizon/contracts/payments/collectors/TAPCollector.sol index 8d15ff5c8..c8b42b87f 100644 --- a/packages/horizon/contracts/payments/collectors/TAPCollector.sol +++ b/packages/horizon/contracts/payments/collectors/TAPCollector.sol @@ -249,6 +249,7 @@ contract TAPCollector is EIP712, GraphDirectory, ITAPCollector { keccak256( abi.encode( EIP712_RAV_TYPEHASH, + _rav.payer, _rav.dataService, _rav.serviceProvider, _rav.timestampNs, From 4ba215c8925e38d0ec60a29ecfb9ac223b2faef4 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Mon, 16 Dec 2024 12:19:04 -0300 Subject: [PATCH 337/343] fix: accept dispute documentation --- packages/subgraph-service/contracts/DisputeManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/subgraph-service/contracts/DisputeManager.sol b/packages/subgraph-service/contracts/DisputeManager.sol index b1d420542..2854282f4 100644 --- a/packages/subgraph-service/contracts/DisputeManager.sol +++ b/packages/subgraph-service/contracts/DisputeManager.sol @@ -247,7 +247,7 @@ contract DisputeManager is * use acceptDisputeConflict. * @dev Accept a dispute with Id `disputeId` * @param disputeId Id of the dispute to be accepted - * @param tokensSlash Amount of tokens to slash from the indexer for the first dispute + * @param tokensSlash Amount of tokens to slash from the indexer */ function acceptDispute( bytes32 disputeId, From d6d376c27330c022b18d68bb2445ddff7800a5de Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 12 Dec 2024 15:39:28 -0300 Subject: [PATCH 338/343] fix: legacy slashing underflow (TRST-H08) --- .../staking/HorizonStakingExtension.sol | 5 ++-- .../test/staking/slash/legacySlash.t.sol | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStakingExtension.sol b/packages/horizon/contracts/staking/HorizonStakingExtension.sol index ac9dc6bc8..3b42ebf1a 100644 --- a/packages/horizon/contracts/staking/HorizonStakingExtension.sol +++ b/packages/horizon/contracts/staking/HorizonStakingExtension.sol @@ -286,9 +286,8 @@ contract HorizonStakingExtension is HorizonStakingBase, IHorizonStakingExtension // Slashing more tokens than freely available (over allocation condition) // Unlock locked tokens to avoid the indexer to withdraw them - uint256 tokensAvailable = indexerStake.tokensStaked - - indexerStake.__DEPRECATED_tokensAllocated - - indexerStake.__DEPRECATED_tokensLocked; + uint256 tokensUsed = indexerStake.__DEPRECATED_tokensAllocated + indexerStake.__DEPRECATED_tokensLocked; + uint256 tokensAvailable = tokensUsed > indexerStake.tokensStaked ? 0 : indexerStake.tokensStaked - tokensUsed; if (tokens > tokensAvailable && indexerStake.__DEPRECATED_tokensLocked > 0) { uint256 tokensOverAllocated = tokens - tokensAvailable; uint256 tokensToUnlock = MathUtils.min(tokensOverAllocated, indexerStake.__DEPRECATED_tokensLocked); diff --git a/packages/horizon/test/staking/slash/legacySlash.t.sol b/packages/horizon/test/staking/slash/legacySlash.t.sol index 760978aae..f5595fdac 100644 --- a/packages/horizon/test/staking/slash/legacySlash.t.sol +++ b/packages/horizon/test/staking/slash/legacySlash.t.sol @@ -180,4 +180,29 @@ contract HorizonStakingLegacySlashTest is HorizonStakingTest { vm.expectRevert("!beneficiary"); staking.legacySlash(users.indexer, slashTokens, reward, address(0)); } + + function test_LegacySlash_WhenTokensAllocatedGreaterThanStake() + public + useIndexer + useLegacySlasher(users.legacySlasher) + { + // Setup indexer with: + // - tokensStaked = 1000 GRT + // - tokensAllocated = 800 GRT + // - tokensLocked = 300 GRT + // This means tokensUsed (1100 GRT) > tokensStaked (1000 GRT) + _setIndexer( + users.indexer, + 1000 ether, // tokensStaked + 800 ether, // tokensAllocated + 300 ether, // tokensLocked + 0 // tokensLockedUntil + ); + + // Send tokens manually to staking + token.transfer(address(staking), 1100 ether); + + resetPrank(users.legacySlasher); + _legacySlash(users.indexer, 1000 ether, 500 ether, makeAddr("fisherman")); + } } From 7d90ad28f7302e1eacf9c6850c4d649d2a6436b6 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 12 Dec 2024 17:14:58 -0300 Subject: [PATCH 339/343] fix: underflow in getIdleStake (TRST-L14) --- packages/horizon/contracts/staking/HorizonStakingBase.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/horizon/contracts/staking/HorizonStakingBase.sol b/packages/horizon/contracts/staking/HorizonStakingBase.sol index 6745fb2e1..5f2808255 100644 --- a/packages/horizon/contracts/staking/HorizonStakingBase.sol +++ b/packages/horizon/contracts/staking/HorizonStakingBase.sol @@ -268,11 +268,11 @@ abstract contract HorizonStakingBase is * TODO: update the calculation after the transition period. */ function _getIdleStake(address _serviceProvider) internal view returns (uint256) { - return - _serviceProviders[_serviceProvider].tokensStaked - - _serviceProviders[_serviceProvider].tokensProvisioned - - _serviceProviders[_serviceProvider].__DEPRECATED_tokensAllocated - + uint256 tokensUsed = _serviceProviders[_serviceProvider].tokensProvisioned + + _serviceProviders[_serviceProvider].__DEPRECATED_tokensAllocated + _serviceProviders[_serviceProvider].__DEPRECATED_tokensLocked; + uint256 tokensStaked = _serviceProviders[_serviceProvider].tokensStaked; + return tokensStaked > tokensUsed ? tokensStaked - tokensUsed : 0; } /** From 57aea4439978faa2e896e41c799a8e280cba3199 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Thu, 12 Dec 2024 17:39:14 -0300 Subject: [PATCH 340/343] fix: added thaw request type to thaw request fulfilled event (TRST-R15) --- .../internal/IHorizonStakingMain.sol | 5 ++- .../internal/IHorizonStakingTypes.sol | 15 +++++++ .../contracts/staking/HorizonStaking.sol | 41 +++++++++++++++---- .../HorizonStakingShared.t.sol | 9 ++-- 4 files changed, 58 insertions(+), 12 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index dcbe3fce5..6df04cf54 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.27; import { IGraphPayments } from "../../interfaces/IGraphPayments.sol"; +import { IHorizonStakingTypes } from "./IHorizonStakingTypes.sol"; /** * @title Inferface for the {HorizonStaking} contract. @@ -280,13 +281,15 @@ interface IHorizonStakingMain { * @param owner The address of the owner of the thaw requests * @param thawRequestsFulfilled The number of thaw requests fulfilled * @param tokens The total amount of tokens being released + * @param requestType The type of thaw request */ event ThawRequestsFulfilled( address indexed serviceProvider, address indexed verifier, address indexed owner, uint256 thawRequestsFulfilled, - uint256 tokens + uint256 tokens, + IHorizonStakingTypes.ThawRequestType requestType ); // -- Events: governance -- diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol index 0d615a7b6..e2376bf18 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingTypes.sol @@ -180,4 +180,19 @@ interface IHorizonStakingTypes { uint256 nThawRequests; uint256 thawingNonce; } + + /** + * @notice Results of the traversal of thaw requests. + * @dev This struct is used to avoid stack too deep error in the `fulfillThawRequests` function. + * @param requestsFulfilled The number of thaw requests fulfilled + * @param tokensThawed The total amount of tokens thawed + * @param tokensThawing The total amount of tokens thawing + * @param sharesThawing The total amount of shares thawing + */ + struct TraverseThawRequestsResults { + uint256 requestsFulfilled; + uint256 tokensThawed; + uint256 tokensThawing; + uint256 sharesThawing; + } } diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index e42930546..c035125e8 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -1078,8 +1078,33 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { ); require(thawRequestList.count > 0, HorizonStakingNothingThawing()); + TraverseThawRequestsResults memory results = _traverseThawRequests(params, thawRequestList); + + emit ThawRequestsFulfilled( + params.serviceProvider, + params.verifier, + params.owner, + results.requestsFulfilled, + results.tokensThawed, + params.requestType + ); + + return (results.tokensThawed, results.tokensThawing, results.sharesThawing); + } + + /** + * @notice Traverses a thaw request list and fulfills expired thaw requests. + * @param params The parameters for fulfilling thaw requests + * @param thawRequestList The list of thaw requests to traverse + * @return The results of the traversal + */ + function _traverseThawRequests( + FulfillThawRequestsParams memory params, + LinkedList.List storage thawRequestList + ) private returns (TraverseThawRequestsResults memory) { function(bytes32) view returns (bytes32) getNextItem = _getNextThawRequest(params.requestType); function(bytes32) deleteItem = _getDeleteThawRequest(params.requestType); + bytes memory acc = abi.encode( params.requestType, uint256(0), @@ -1099,14 +1124,14 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { data, (ThawRequestType, uint256, uint256, uint256) ); - emit ThawRequestsFulfilled( - params.serviceProvider, - params.verifier, - params.owner, - thawRequestsFulfilled, - tokensThawed - ); - return (tokensThawed, tokensThawing, sharesThawing); + + return + TraverseThawRequestsResults({ + requestsFulfilled: thawRequestsFulfilled, + tokensThawed: tokensThawed, + tokensThawing: tokensThawing, + sharesThawing: sharesThawing + }); } /** diff --git a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol index b47ac7d7e..3be6633fb 100644 --- a/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol +++ b/packages/horizon/test/shared/horizon-staking/HorizonStakingShared.t.sol @@ -504,7 +504,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { verifier, serviceProvider, calcValues.thawRequestsFulfilledList.length, - calcValues.tokensThawed + calcValues.tokensThawed, + IHorizonStakingTypes.ThawRequestType.Provision ); vm.expectEmit(address(staking)); emit IHorizonStakingMain.TokensDeprovisioned(serviceProvider, verifier, calcValues.tokensThawed); @@ -617,7 +618,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { verifier, serviceProvider, calcValues.thawRequestsFulfilledList.length, - calcValues.tokensThawed + calcValues.tokensThawed, + IHorizonStakingTypes.ThawRequestType.Provision ); vm.expectEmit(address(staking)); emit IHorizonStakingMain.TokensDeprovisioned(serviceProvider, verifier, calcValues.tokensThawed); @@ -1160,7 +1162,8 @@ abstract contract HorizonStakingSharedTest is GraphBaseTest { params.verifier, msgSender, calcValues.thawRequestsFulfilledList.length, - calcValues.tokensThawed + calcValues.tokensThawed, + params.thawRequestType ); if (calcValues.tokensThawed != 0) { vm.expectEmit(); From bbd23f5e2ab000816375b31f0e250b886eb74346 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 13 Dec 2024 11:27:37 -0300 Subject: [PATCH 341/343] fix: add minimum tokens amount for undelegate with beneficiary (TRST-H03) --- .../interfaces/internal/IHorizonStakingMain.sol | 7 +++++++ .../horizon/contracts/staking/HorizonStaking.sol | 16 +++++++++++++++- .../test/staking/delegation/undelegate.t.sol | 3 ++- .../test/staking/delegation/withdraw.t.sol | 2 ++ .../test/staking/provision/deprovision.t.sol | 4 ++-- .../horizon/test/staking/provision/thaw.t.sol | 11 +++-------- packages/horizon/test/utils/Constants.sol | 3 ++- 7 files changed, 33 insertions(+), 13 deletions(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index 6df04cf54..f9e3969b6 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -433,6 +433,13 @@ interface IHorizonStakingMain { */ error HorizonStakingInsufficientDelegationTokens(uint256 tokens, uint256 minTokens); + /** + * @notice Thrown when the minimum token amount required for delegation with beneficiary is not met. + * @param tokens The actual token amount + * @param minTokens The minimum required token amount + */ + error HorizonStakingInsufficientUndelegationTokens(uint256 tokens, uint256 minTokens); + /** * @notice Thrown when attempting to undelegate with a beneficiary that is the zero address. */ diff --git a/packages/horizon/contracts/staking/HorizonStaking.sol b/packages/horizon/contracts/staking/HorizonStaking.sol index c035125e8..3414fe555 100644 --- a/packages/horizon/contracts/staking/HorizonStaking.sol +++ b/packages/horizon/contracts/staking/HorizonStaking.sol @@ -36,7 +36,7 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { uint256 private constant FIXED_POINT_PRECISION = 1e18; /// @dev Maximum number of simultaneous stake thaw requests (per provision) or undelegations (per delegation) - uint256 private constant MAX_THAW_REQUESTS = 100; + uint256 private constant MAX_THAW_REQUESTS = 1_000; /// @dev Address of the staking extension contract address private immutable STAKING_EXTENSION_ADDRESS; @@ -44,6 +44,9 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { /// @dev Minimum amount of delegation. uint256 private constant MIN_DELEGATION = 1e18; + /// @dev Minimum amount of undelegation with beneficiary. + uint256 private constant MIN_UNDELEGATION_WITH_BENEFICIARY = 10e18; + /** * @notice Checks that the caller is authorized to operate over a provision. * @param serviceProvider The address of the service provider. @@ -931,6 +934,17 @@ contract HorizonStaking is HorizonStakingBase, IHorizonStakingMain { // delegation pool shares -> delegation pool tokens -> thawing pool shares // Thawing pool is reset/initialized when the pool is empty: prov.tokensThawing == 0 uint256 tokens = (_shares * (pool.tokens - pool.tokensThawing)) / pool.shares; + + // Since anyone can undelegate for any beneficiary, we require a minimum amount to prevent + // malicious actors from flooding the thaw request list with tiny amounts and causing a + // denial of service attack by hitting the MAX_THAW_REQUESTS limit + if (_requestType == ThawRequestType.DelegationWithBeneficiary) { + require( + tokens >= MIN_UNDELEGATION_WITH_BENEFICIARY, + HorizonStakingInsufficientUndelegationTokens(tokens, MIN_UNDELEGATION_WITH_BENEFICIARY) + ); + } + // Thawing shares are rounded down to protect the pool and avoid taking extra tokens from other participants. uint256 thawingShares = pool.tokensThawing == 0 ? tokens : ((tokens * pool.sharesThawing) / pool.tokensThawing); uint64 thawingUntil = uint64(block.timestamp + uint256(_provisions[_serviceProvider][_verifier].thawingPeriod)); diff --git a/packages/horizon/test/staking/delegation/undelegate.t.sol b/packages/horizon/test/staking/delegation/undelegate.t.sol index a2d41c061..e23fdadb8 100644 --- a/packages/horizon/test/staking/delegation/undelegate.t.sol +++ b/packages/horizon/test/staking/delegation/undelegate.t.sol @@ -63,6 +63,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { address beneficiary ) public useIndexer useProvision(amount, 0, 0) useDelegation(delegationAmount) { vm.assume(beneficiary != address(0)); + vm.assume(delegationAmount >= MIN_UNDELEGATION_WITH_BENEFICIARY); resetPrank(users.delegator); DelegationInternal memory delegation = _getStorage_Delegation(users.indexer, subgraphDataServiceAddress, users.delegator, false); _undelegateWithBeneficiary(users.indexer, subgraphDataServiceAddress, delegation.shares, beneficiary); @@ -95,7 +96,7 @@ contract HorizonStakingUndelegateTest is HorizonStakingTest { public useIndexer useProvision(1000 ether, 0, 0) - useDelegation(1000 ether) + useDelegation(10000 ether) { resetPrank(users.delegator); diff --git a/packages/horizon/test/staking/delegation/withdraw.t.sol b/packages/horizon/test/staking/delegation/withdraw.t.sol index 0d791ff4c..ab286c279 100644 --- a/packages/horizon/test/staking/delegation/withdraw.t.sol +++ b/packages/horizon/test/staking/delegation/withdraw.t.sol @@ -167,6 +167,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { { vm.assume(beneficiary != address(0)); vm.assume(beneficiary != address(staking)); + vm.assume(delegationAmount >= MIN_UNDELEGATION_WITH_BENEFICIARY); // Skip beneficiary if balance will overflow vm.assume(token.balanceOf(beneficiary) < type(uint256).max - delegationAmount); @@ -196,6 +197,7 @@ contract HorizonStakingWithdrawDelegationTest is HorizonStakingTest { { vm.assume(beneficiary != address(0)); vm.assume(beneficiary != users.delegator); + vm.assume(delegationAmount >= MIN_UNDELEGATION_WITH_BENEFICIARY); // Delegator undelegates to beneficiary resetPrank(users.delegator); diff --git a/packages/horizon/test/staking/provision/deprovision.t.sol b/packages/horizon/test/staking/provision/deprovision.t.sol index ff022e1aa..4fa97da6c 100644 --- a/packages/horizon/test/staking/provision/deprovision.t.sol +++ b/packages/horizon/test/staking/provision/deprovision.t.sol @@ -17,7 +17,7 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { uint256 thawCount, uint256 deprovisionCount ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - thawCount = bound(thawCount, 1, MAX_THAW_REQUESTS); + thawCount = bound(thawCount, 1, 100); deprovisionCount = bound(deprovisionCount, 0, thawCount); vm.assume(amount >= thawCount); // ensure the provision has at least 1 token for each thaw step uint256 individualThawAmount = amount / thawCount; @@ -37,7 +37,7 @@ contract HorizonStakingDeprovisionTest is HorizonStakingTest { uint64 thawingPeriod, uint256 thawCount ) public useIndexer useProvision(amount, maxVerifierCut, thawingPeriod) { - thawCount = bound(thawCount, 2, MAX_THAW_REQUESTS); + thawCount = bound(thawCount, 2, 100); vm.assume(amount >= thawCount); // ensure the provision has at least 1 token for each thaw step uint256 individualThawAmount = amount / thawCount; diff --git a/packages/horizon/test/staking/provision/thaw.t.sol b/packages/horizon/test/staking/provision/thaw.t.sol index c69792f50..eb58e8e86 100644 --- a/packages/horizon/test/staking/provision/thaw.t.sol +++ b/packages/horizon/test/staking/provision/thaw.t.sol @@ -26,7 +26,7 @@ contract HorizonStakingThawTest is HorizonStakingTest { uint64 thawingPeriod, uint256 thawCount ) public useIndexer useProvision(amount, 0, thawingPeriod) { - thawCount = bound(thawCount, 1, MAX_THAW_REQUESTS); + thawCount = bound(thawCount, 1, 100); vm.assume(amount >= thawCount); // ensure the provision has at least 1 token for each thaw step uint256 individualThawAmount = amount / thawCount; @@ -72,13 +72,8 @@ contract HorizonStakingThawTest is HorizonStakingTest { staking.thaw(users.indexer, subgraphDataServiceAddress, thawAmount); } - function testThaw_RevertWhen_OverMaxThawRequests( - uint256 amount, - uint64 thawingPeriod, - uint256 thawAmount - ) public useIndexer useProvision(amount, 0, thawingPeriod) { - vm.assume(amount >= MAX_THAW_REQUESTS + 1); - thawAmount = bound(thawAmount, 1, amount / (MAX_THAW_REQUESTS + 1)); + function testThaw_RevertWhen_OverMaxThawRequests() public useIndexer useProvision(10000 ether, 0, 0) { + uint256 thawAmount = 1 ether; for (uint256 i = 0; i < MAX_THAW_REQUESTS; i++) { _thaw(users.indexer, subgraphDataServiceAddress, thawAmount); diff --git a/packages/horizon/test/utils/Constants.sol b/packages/horizon/test/utils/Constants.sol index 9af54087d..d96c39202 100644 --- a/packages/horizon/test/utils/Constants.sol +++ b/packages/horizon/test/utils/Constants.sol @@ -11,10 +11,11 @@ abstract contract Constants { // GraphPayments parameters uint256 internal constant protocolPaymentCut = 10000; // Staking constants - uint256 internal constant MAX_THAW_REQUESTS = 100; + uint256 internal constant MAX_THAW_REQUESTS = 1_000; uint64 internal constant MAX_THAWING_PERIOD = 28 days; uint32 internal constant THAWING_PERIOD_IN_BLOCKS = 300; uint256 internal constant MIN_DELEGATION = 1e18; + uint256 internal constant MIN_UNDELEGATION_WITH_BENEFICIARY = 10e18; // Epoch manager uint256 internal constant EPOCH_LENGTH = 1; // Rewards manager From 399b7a91f89248d95a224dc5369286b3f39ec590 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 13 Dec 2024 15:46:25 -0300 Subject: [PATCH 342/343] fix: natspec for new undelegate error --- .../contracts/interfaces/internal/IHorizonStakingMain.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol index f9e3969b6..50ca90fc3 100644 --- a/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol +++ b/packages/horizon/contracts/interfaces/internal/IHorizonStakingMain.sol @@ -434,7 +434,7 @@ interface IHorizonStakingMain { error HorizonStakingInsufficientDelegationTokens(uint256 tokens, uint256 minTokens); /** - * @notice Thrown when the minimum token amount required for delegation with beneficiary is not met. + * @notice Thrown when the minimum token amount required for undelegation with beneficiary is not met. * @param tokens The actual token amount * @param minTokens The minimum required token amount */ From 1038cf499a9a1fe0e8b70d1de7699f5f97e01641 Mon Sep 17 00:00:00 2001 From: Maikol <86025070+Maikol@users.noreply.github.com> Date: Wed, 18 Dec 2024 08:56:55 +1100 Subject: [PATCH 343/343] fix: use min delegation for SubgraphService tests (#1080) --- .../subgraph-service/test/shared/SubgraphServiceShared.t.sol | 2 +- packages/subgraph-service/test/utils/Constants.sol | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol index d0f28fcec..e3258a09e 100644 --- a/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol +++ b/packages/subgraph-service/test/shared/SubgraphServiceShared.t.sol @@ -41,7 +41,7 @@ abstract contract SubgraphServiceSharedTest is HorizonStakingSharedTest { } modifier useDelegation(uint256 tokens) { - vm.assume(tokens > 1); + vm.assume(tokens > MIN_DELEGATION); vm.assume(tokens < 10_000_000_000 ether); (, address msgSender,) = vm.readCallers(); resetPrank(users.delegator); diff --git a/packages/subgraph-service/test/utils/Constants.sol b/packages/subgraph-service/test/utils/Constants.sol index 0c6419f3e..150060a70 100644 --- a/packages/subgraph-service/test/utils/Constants.sol +++ b/packages/subgraph-service/test/utils/Constants.sol @@ -20,6 +20,7 @@ abstract contract Constants { uint256 public constant curationCut = 10000; // Staking uint64 internal constant MAX_WAIT_PERIOD = 28 days; + uint256 internal constant MIN_DELEGATION = 1 ether; // GraphEscrow parameters uint256 internal constant withdrawEscrowThawingPeriod = 60; // GraphPayments parameters